ID_US_A.ASM (2782B)
1 IDEAL 2 MODEL MEDIUM,C 3 4 ; Assembly portion of the User Mgr. This is just John Carmack's table 5 ; driven pseudo-random number generator, and we put it in the User Mgr 6 ; because we couldn't figure out where it should go 7 8 9 ;============================================================================ 10 ; 11 ; RANDOM ROUTINES 12 ; 13 ;============================================================================ 14 15 FARDATA 16 17 rndindex dw ? 18 19 rndtable db 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66 20 db 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36 21 db 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188 22 db 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224 23 db 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242 24 db 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0 25 db 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235 26 db 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113 27 db 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75 28 db 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196 29 db 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113 30 db 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241 31 db 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224 32 db 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95 33 db 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226 34 db 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36 35 db 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106 36 db 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136 37 db 120, 163, 236, 249 38 39 PUBLIC rndtable 40 41 CODESEG 42 43 LastRnd dw ? 44 45 ;================================================= 46 ; 47 ; void US_InitRndT (boolean randomize) 48 ; Init table based RND generator 49 ; if randomize is false, the counter is set to 0 50 ; 51 ;================================================= 52 53 PROC US_InitRndT randomize:word 54 uses si,di 55 public US_InitRndT 56 57 mov ax,SEG rndtable 58 mov es,ax 59 60 mov ax,[randomize] 61 or ax,ax 62 jne @@timeit ;if randomize is true, really random 63 64 mov dx,0 ;set to a definite value 65 jmp @@setit 66 67 @@timeit: 68 mov ah,2ch 69 int 21h ;GetSystemTime 70 and dx,0ffh 71 72 @@setit: 73 mov [es:rndindex],dx 74 ret 75 76 ENDP 77 78 ;================================================= 79 ; 80 ; int US_RndT (void) 81 ; Return a random # between 0-255 82 ; Exit : AX = value 83 ; 84 ;================================================= 85 PROC US_RndT 86 public US_RndT 87 88 mov ax,SEG rndtable 89 mov es,ax 90 mov bx,[es:rndindex] 91 inc bx 92 and bx,0ffh 93 mov [es:rndindex],bx 94 mov al,[es:rndtable+BX] 95 xor ah,ah 96 ret 97 98 ENDP 99 100 END 101