* XORSHIFT PRNG DEMO PROGRAM * FOR THE UNEXPANDED TI-99/4A * MICHAEL MARTIN, 2024 IDT 'XORSHIFT' * CARTRIDGE HEADER AORG >6000 DATA >AA01,0,0,MENU DATA 0,0,0,0 MENU DATA 0,MAIN BYTE 13 TEXT 'XORSHIFT DEMO' * MAIN PROGRAM COPY 'vdplib.asm' MAIN LWPI >8300 * SET WORKSPACE LIMI 0 * DISABLE INTERRUPTS LI R9,1 * SEED RNG LI R10,1 .VFILL >0000,>20,>0300 * CLEAR SCREEN BL @STDCHR * SET STANDARD CHARSET .VFILL >0968,>00,>08 * CLEAR DASH CHARACTER .VWRITE >0969,>FF * AND REPLACE WITH UNDERLINE LI R8,>40C2 * LEAVE ROOM FOR HEADER LI R4,64 * 64 ITERATIONS LP BL @RNG BL @PHEX DEC R4 JNE LP .VBLIT >0044,HDR,HDRLEN .VBLIT >0000,FRAME,FRAMELEN LI R8,>4000 | FRAMELEN INF MOV R8,R7 MOV @>8378,R0 ANDI R0,255 BL @PHEX MOV R7,R8 JMP INF * LOOP FOREVER ONCE DONE RNG MOV R9,R0 SLA R0,5 XOR R9,R0 MOV R0,R9 SRL R0,3 XOR R9,R0 XOR R10,R0 MOV R10,R9 SRL R10,1 XOR R0,R10 MOV R10,R0 B *R11 PHEX LIMI 0 MOV R0,R1 MOV R11,R2 SWPB R8 MOVB R8,@>8C02 SWPB R8 MOVB R8,@>8C02 SRL R0,4 BL @PDIGI MOV R1,R0 BL @PDIGI SWPB R1 MOV R1,R0 SRL R0,4 BL @PDIGI MOV R1,R0 BL @PDIGI MOV R1,R0 LI R1,>2000 MOV R1,@>8C00 AI R8,8 MOV R1,@>8C00 NOP MOV R1,@>8C00 NOP MOV R1,@>8C00 LIMI 2 B *R2 PDIGI ANDI R0,>0F00 AI R0,>3000 CI R0,>3A00 JL POK AI R0,>0700 POK MOVB R0,@>8C00 B *R11 HDR TEXT 'XORSHIFT16 TEST SEQUENCE ' TEXT '------------------------' HDRLEN EQU $-HDR FRAME TEXT 'FRAME COUNT: ' FRAMELEN EQU $-FRAME EVEN END MAIN