; MOUSE TRAP - A GAME FOR PIXIE GRAPHICS ; ; WRITTEN BY DAN RUBIS ; ; INITIALIZATION SECTION START: GHI R0 ; INITIALIZE - HIGH PHI R1 ; BYTES PHI R2 ; OF PHI R3 ; SOME PHI R4 ; REGISTERS LDI MAIN ; INITIALIZE MAIN PLO R3 ; PROGRAM P-COUNTER LDI STACK-1 ; INITIALIZE STACK PLO R2 ; POINTER LDI INTRPT ; INITIALIZE INTERRUPT PLO R1 ; HANDLER P-COUNTER SEP R3 ; GO TO MAINLINE ; INTERRUPT HANDLER INTRTN: LDXA ; RESTORE D REG. RET ; RETURN FROM INTERRUPT INTRPT: DEC R2 ; R2 IS THE STACK POINTER SAV ; SAVE T REG ON STACK DEC R2 STR R2 ; SAVE D REG. ON STACK NOP ; SYNC NOP ; SYNC NOP ; SYNC LDI 000H PHI R0 LDI 000H PLO R0 REFRSH: GLO R0 ; GET LINE START ADDRESS SEX R2 SEX R2 ; NOP DEC R0 PLO R0 SEX R2 ; NOP DEC R0 PLO R0 SEX R2 ; NOP DEC R0 PLO R0 BN1 REFRSH ; LOOP TIL 'DISPLAY STATUS' LOW BR INTRTN ; MAIN LINE MAIN: SEX R2 ; TURN ON TV INP 1 ;+DLDI BOARD,R15 ; RF POINTS TO DISPLAY AREA LDI BOARD ; KLOTZ PLO RF LDI 0 PHI RF BLANK: LDI 000H ; BLANK OUT BITE IN STR RF ; DISPLAY AREA GLO RF ; CHECK FOR END OF BOARD XRI 0FFH ; ( IE. END OF PAGE) BZ MOUSE ; - YES - CONTINUE ON INC RF ; - NO - INC. TO NEXT BR BLANK ; BYTE AND BACK FOR NEXT MOUSE: LDI 0D0H ; SET REG. RF TO POINT PLO RF ; TO MOUSE PICTURE LDI 001H ; AND STORE THE STR RF ; MOUSE LDI 0CBH ; SET REG. RF TO POINT PLO RF ; TO GAME BOARD PICTURE LDI 005H ; AND STORE PART OF STR RF ; GAME BOARD LDI 0DBH ; AND THEN PLO RF ; DO SECOND LDI 005H ; PART OF STR RF ; BOARD LDI 000H PHI R9 PHI RA PHI RC PHI RD LDI 0DDH ; INITIALIZE SCORE PLO RD ; BOARD LDI 0DEH PLO RC LOOP: LDI 0D0H ; INITIALIZE ADDRESS PLO R9 ; OF TRACK PLO RA LDI 007H ; R7 = NUMBER OF BYTES - 1 PLO R7 ; IN TRACK LDN R9 ; STORE FIRST BYTE ON LINE PHI R8 SHRC ; ROTATE RIGHT INC R9 ; MOVE POINTER TO NEXT BYTE ON LINE LDN R9 SHRC ; ROTATE RIGHT STR R9 ; RESTORE BYTE DEC R7 ; ONE LESS BYTE INP 4 ; READ MOUSE SPEED FROM KEYBOARD PLO RE ; AND SAVE IN TIME REGISTER DELAY: DEC RE ; DELAY LOOP GLO RE BNZ DELAY GLO R7 ; ALL BYTES SHIFTED? BNZ 068H GHI R8 ; SHIFT FIRST BYTE ON LINE SHRC STR RA ; AND STORE B4 SKIP ; CONTINUE SHIFTING BR LOOP ; UNTIL 'IN' ON SKIP: LDI 0D3H PLO RF LDN RF ; TEST IF MOUSE XRI 002H ; IS CAUGHT BNZ 091H LDI 001H ; SCORE 1 FOR YOU STR RD GLO RD ADI 008H PLO RD LDI 020H ; SET BUZZER PLO RB ; FREQUENCY BR BUZZER ; AND BUZZZZ LDI 001H ; SCORE 1 FOR THE MOUSE STR RC GLO RC ADI 008H PLO RC LDI 0FFH ; SET BUZZER PLO RB ; FREQUENCY BUZZER: SEQ GLO RB BUZON: SMI 001H BNZ BUZON REQ GLO RB BUZOFF: SMI 001H BNZ BUZOFF B4 BUZZER ; BUZZ WHILE 'IN' IS ON LDI 0FDH ; END OF GAME? PLO RF LDA RF XRI 001H BZ HALT LDN RF XRI 001H BZ HALT BR LOOP ; LOOP BACK FOR ANOTHER PASS HALT: BR HALT ; END OF GAME HANG UP DB 00 DB 00 DB 00 DB 00 ; STACK STARTS HERE STACK: ; GAME BOARD STARTS HERE BOARD: EQU 0C0H