]> 4ch.mooo.com Git - 16.git/blob - 16/keen456/KEEN4-6/ID_US_A.ASM
extrcted keen code remake
[16.git] / 16 / keen456 / KEEN4-6 / ID_US_A.ASM
1 ; Catacomb 3-D Source Code\r
2 ; Copyright (C) 1993-2014 Flat Rock Software\r
3 ;\r
4 ; This program is free software; you can redistribute it and/or modify\r
5 ; it under the terms of the GNU General Public License as published by\r
6 ; the Free Software Foundation; either version 2 of the License, or\r
7 ; (at your option) any later version.\r
8 ;\r
9 ; This program is distributed in the hope that it will be useful,\r
10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 ; GNU General Public License for more details.\r
13 ;\r
14 ; You should have received a copy of the GNU General Public License along\r
15 ; with this program; if not, write to the Free Software Foundation, Inc.,\r
16 ; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
17 \r
18 IDEAL\r
19 MODEL   MEDIUM,C\r
20 \r
21 ;       Assembly portion of the User Mgr. This is just John Carmack's table\r
22 ;               driven pseudo-random number generator, and we put it in the User Mgr\r
23 ;               because we couldn't figure out where it should go\r
24 \r
25 \r
26 ;============================================================================\r
27 ;\r
28 ;                           RANDOM ROUTINES\r
29 ;\r
30 ;============================================================================\r
31 \r
32         FARDATA\r
33 \r
34 rndindex        dw      ?\r
35 \r
36 rndtable db    0,   8, 109, 220, 222, 241, 149, 107,  75, 248, 254, 140,  16,  66\r
37         db   74,  21, 211,  47,  80, 242, 154,  27, 205, 128, 161,  89,  77,  36\r
38         db   95, 110,  85,  48, 212, 140, 211, 249,  22,  79, 200,  50,  28, 188\r
39         db   52, 140, 202, 120,  68, 145,  62,  70, 184, 190,  91, 197, 152, 224\r
40         db  149, 104,  25, 178, 252, 182, 202, 182, 141, 197,   4,  81, 181, 242\r
41         db  145,  42,  39, 227, 156, 198, 225, 193, 219,  93, 122, 175, 249,   0\r
42         db  175, 143,  70, 239,  46, 246, 163,  53, 163, 109, 168, 135,   2, 235\r
43         db   25,  92,  20, 145, 138,  77,  69, 166,  78, 176, 173, 212, 166, 113\r
44         db   94, 161,  41,  50, 239,  49, 111, 164,  70,  60,   2,  37, 171,  75\r
45         db  136, 156,  11,  56,  42, 146, 138, 229,  73, 146,  77,  61,  98, 196\r
46         db  135, 106,  63, 197, 195,  86,  96, 203, 113, 101, 170, 247, 181, 113\r
47         db   80, 250, 108,   7, 255, 237, 129, 226,  79, 107, 112, 166, 103, 241\r
48         db   24, 223, 239, 120, 198,  58,  60,  82, 128,   3, 184,  66, 143, 224\r
49         db  145, 224,  81, 206, 163,  45,  63,  90, 168, 114,  59,  33, 159,  95\r
50         db   28, 139, 123,  98, 125, 196,  15,  70, 194, 253,  54,  14, 109, 226\r
51         db   71,  17, 161,  93, 186,  87, 244, 138,  20,  52, 123, 251,  26,  36\r
52         db   17,  46,  52, 231, 232,  76,  31, 221,  84,  37, 216, 165, 212, 106\r
53         db  197, 242,  98,  43,  39, 175, 254, 145, 190,  84, 118, 222, 187, 136\r
54         db  120, 163, 236, 249\r
55 \r
56 \r
57         CODESEG\r
58 \r
59 LastRnd         dw      ?\r
60 \r
61 ;=================================================\r
62 ;\r
63 ; void US_InitRndT (boolean randomize)\r
64 ; Init table based RND generator\r
65 ; if randomize is false, the counter is set to 0\r
66 ;\r
67 ;=================================================\r
68 \r
69 PROC    US_InitRndT randomize:word\r
70         uses    si,di\r
71         public  US_InitRndT\r
72 \r
73         mov     ax,SEG rndtable\r
74         mov     es,ax\r
75         mov     ax,[randomize]\r
76         or      ax,ax\r
77         jne     @@timeit                ;if randomize is true, really random\r
78 \r
79         mov     dx,0                    ;set to a definite value\r
80         jmp     @@setit\r
81 \r
82 @@timeit:\r
83         mov     ah,2ch\r
84         int     21h                     ;GetSystemTime\r
85         and     dx,0ffh\r
86 \r
87 @@setit:\r
88         mov     [es:rndindex],dx\r
89         ret\r
90 \r
91 ENDP\r
92 \r
93 ;=================================================\r
94 ;\r
95 ; int US_RndT (void)\r
96 ; Return a random # between 0-255\r
97 ; Exit : AX = value\r
98 ;\r
99 ;=================================================\r
100 PROC    US_RndT\r
101         public  US_RndT\r
102 \r
103         mov     ax,SEG rndtable\r
104         mov     es,ax\r
105         mov     bx,[es:rndindex]\r
106         inc     bx\r
107         and     bx,0ffh\r
108         mov     [es:rndindex],bx\r
109         mov     al,[es:rndtable+BX]\r
110         xor     ah,ah\r
111 \r
112         ret\r
113 \r
114 ENDP\r
115 \r
116 END\r
117 \r