51 lines
1.6 KiB
Tal
51 lines
1.6 KiB
Tal
|0100
|
|
;data1a hash emit/long #0a18 DEO
|
|
;data1b hash emit/long #0a18 DEOk DEO
|
|
|
|
;data2a hash emit/long #0a18 DEO
|
|
;data2b hash emit/long #0a18 DEOk DEO
|
|
|
|
;data3a hash emit/long #0a18 DEO
|
|
;data3b hash emit/long #0a18 DEOk DEO
|
|
|
|
;data4a hash emit/long #0a18 DEO
|
|
;data4b hash emit/long #0a18 DEOk DEO
|
|
|
|
#010f DEO BRK
|
|
|
|
( hash function: run two 16-bit LCGs in parallel )
|
|
( )
|
|
( upper fn: x1=x0*9283+cc ; a is #2443 x0 is #1234 )
|
|
( lower fn: y1=y0*4493+cc ; b is #118d y1 is #abcd )
|
|
@hash ( s* -> x* y* )
|
|
STH2 LIT2 2443 LIT2 1234 ( a* x0* [s*] )
|
|
STH2r LIT2r 118d LIT2r abcd ( a* x0* s* [b* y0*] )
|
|
&loop ( a* x* s* [b* y*] )
|
|
LDAk DUP ?&ok ( a* x* s* c^ [b* y*] )
|
|
POP POP2 NIP2 ( x* [b* y*] )
|
|
STH2r POP2r JMP2r ( x* y* )
|
|
&ok ( a* x* s* c^ [b* y*] )
|
|
DUP STH2 STH2 ( a* x* [b* y* cc* s*] )
|
|
OVR2 MUL2 OVR2r ( a* ax* [b* y* cc* s* cc*] )
|
|
STH2r ADD2 STH2r STH2r ( a* ax+cc* s* cc* [b* y*] )
|
|
OVR2r MUL2r STH2 ADD2r ( a* ax+cc* s* [b* by+cc*] )
|
|
INC2 !&loop ( a* ax+cc s+1* [b* by+cc*] )
|
|
|
|
@emit ( n* -> )
|
|
&long SWP2 emit/short
|
|
&short SWP emit/byte
|
|
&byte DUP #04 SFT emit/char
|
|
&char #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r
|
|
|
|
@data1a "abc 00
|
|
@data1b "ebc 00
|
|
|
|
@data2a "wigjewigjewigjewigjewigjewigjcncmnbegejgiwejgieg 00
|
|
@data2b "wigjewigjewigjewigjewigjewigjcmcmnbegejgiwejgieg 00
|
|
|
|
@data3a "zzjiewgew 00
|
|
@data3b "zzjiewge 00
|
|
|
|
@data4a "this 20 "is 20 "a 20 "test 00
|
|
@data4b "this 20 "is 20 "a 20 "test. 00
|