Ipso Facto
Issue 6, Page 47

A Mouse Trap Game For Pixie Graphics

by Dan Rubis

Enclosed find a mouse trap game program which will work for anyone having Pixie Graphic capability (1861 chip). It uses less than 256 bytes. A speaker should be connected to the Q-line as shown in Sept. 76 issue of "Popular Electronics". The speed of the mouse can be varied by the input byte. The Input switch controls the trap. There is on-screen scoring and sound effects.

Register Useage For Mouse Trap Game

R0 Program counter
R1 Interrupt
R2 Stack
R3 Main
R4 Spare
R5 Spare
R6 # of Lines
R7 # of Bytes
R8 Store 1st Byte on Line
R9 Store Address of First Line
RA Store Address of First Line
RB Freq.
RC Mouse's Score
RD Your Score
RE Time Register for Speed or Mouse
RF Game Board Pointer & Searcher & End of Game Test

RCA Assembler Listing

                         ; MOUSE TRAP - A GAME FOR PIXIE GRAPHICS
                         ;     
                         ;    WRITTEN BY DAN RUBIS 
                         ;
                         ; INITIALIZATION SECTION
                          
0000   90                     GHI     R0      ; INITIALIZE - HIGH
0001   B1                     PHI     R1      ;               BYTES
0002   B2                     PHI     R2      ;                OF
0003   B3                     PHI     R3      ;                 SOME
0004   B4                     PHI     R4      ;                  REGISTERS
0005   F8 2D                  LDI     MAIN    ; INITIALIZE MAIN
0007   A3                     PLO     R3      ;  PROGRAM P-COUNTER
0008   F8 BD                  LDI     STACK-1 ; INITIALIZE STACK
000A   A2                     PLO     R2      ;  POINTER
000B   F8 11                  LDI     INTRPT  ; INITIALIZE INTERRUPT
000D   A1                     PLO     R1      ;  HANDLER P-COUNTER
000E   D3                     SEP     R3      ; GO TO MAINLINE

                         ; INTERRUPT HANDLER
                             
000F   72             INTRTN: LDXA            ; RESTORE D REG.
0010   70                     RET             ; RETURN FROM INTERRUPT
0011   22             INTRPT: DEC     R2      ; R2 IS THE STACK POINTER
0012   78                     SAV             ; SAVE T REG ON STACK
0013   22                     DEC     R2    
0014   52                     STR     R2      ; SAVE D REG. ON STACK
0015   C4                     NOP             ; SYNC 
0016   C4                     NOP             ;  SYNC 
0017   C4                     NOP             ;   SYNC 
0018   F8 00                  LDI     #00    
001A   B0                     PHI     R0    
001B   F8 00                  LDI     #00    
001D   A0                     PLO     R0    
001E   80             REFRSH: GLO     R0      ; GET LINE START ADDRESS
001F   E2                     SEX     R2    
0020   E2                     SEX     R2      ; NOP 
0021   20                     DEC     R0    
0022   A0                     PLO     R0    
0023   E2                     SEX     R2      ; NOP 
0024   20                     DEC     R0    
0025   A0                     PLO     R0    
0026   E2                     SEX     R2      ; NOP 
0027   20                     DEC     R0    
0028   A0                     PLO     R0    
0029   3C 1E                  BN1     REFRSH  ; LOOP TIL 'DISPLAY STATUS' LOW
002B   30 0F                  BR      INTRTN
    
                      ;    MAIN LINE      
        
002D   E2             MAIN:   SEX     R2      ; TURN ON TV
002E   69                     INP     1    
002F   F8 C0 AF               +DLDI   BOARD,R15       ; RF POINTS TO DISPLAY AREA
0032   F8 00 BF       
0035   F8 00          BLANK:  LDI     #00     ; BLANK OUT BITE IN
0037   5F                     STR     RF      ;  DISPLAY AREA
0038   8F                     GLO     RF      ; CHECK FOR END OF BOARD
0039   FB FF                  XRI     #FF     ;  ( IE. END OF PAGE)
003B   32 40                  BZ      MOUSE   ;  - YES - CONTINUE ON
003D   1F                     INC     RF      ;  - NO - INC. TO NEXT
003E   30 35                  BR      BLANK   ;    BYTE AND BACK FOR NEXT 
0040   F8 D0          MOUSE:  LDI     #D0     ; SET REG. RF TO POINT
0042   AF                     PLO     RF      ;  TO MOUSE PICTURE
0043   F8 01                  LDI     #01     ;   AND STORE THE
0045   5F                     STR     RF      ;    MOUSE
0046   F8 CB                  LDI     #CB     ; SET REG. RF TO POINT
0048   AF                     PLO     RF      ;  TO GAME BOARD PICTURE
0049   F8 05                  LDI     #05     ;   AND STORE PART OF
004B   5F                     STR     RF      ;    GAME BOARD
004C   F8 DB                  LDI     #DB     ; AND THEN
004E   AF                     PLO     RF      ;  DO SECOND
004F   F8 05                  LDI     #05     ;   PART OF
0051   5F                     STR     RF      ;    BOARD
0052   F8 00                  LDI     #00    
0054   B9                     PHI     R9    
0055   BA                     PHI     RA    
0056   BC                     PHI     RC    
0057   BD                     PHI     RD    
0058   F8 DD                  LDI     #DD     ; INITIALIZE SCORE
005A   AD                     PLO     RD      ;  BOARD 
005B   F8 DE                  LDI     #DE  
005D   AC                     PLO     RC  
005E   F8 D0          LOOP:   LDI     #D0     ; INITIALIZE ADDRESS
0060   A9                     PLO     R9      ;  OF TRACK
0061   AA                     PLO     RA  
0062   F8 07                  LDI     #07     ; R7 = NUMBER OF BYTES - 1
0064   A7                     PLO     R7      ;  IN TRACK
0065   09                     LDN     R9      ; STORE FIRST BYTE ON LINE
0066   B8                     PHI     R8  
0067   76                     SHRC            ;  ROTATE RIGHT
0068   19                     INC     R9      ; MOVE POINTER TO NEXT BYTE ON LINE
0069   09                     LDN     R9  
006A   76                     SHRC            ;  ROTATE RIGHT
006B   59                     STR     R9      ; RESTORE BYTE
006C   27                     DEC     R7      ; ONE LESS BYTE
006D   6C                     INP     4       ; READ MOUSE SPEED FROM KEYBOARD
006E   AE                     PLO     RE      ;  AND SAVE IN TIME REGISTER
006F   2E             DELAY:  DEC     RE      ; DELAY LOOP
0070   8E                     GLO     RE  
0071   3A 6F                  BNZ     DELAY  
0073   87                     GLO     R7      ; ALL BYTES SHIFTED?
0074   3A 68                  BNZ     #68  
0076   98                     GHI     R8      ; SHIFT FIRST BYTE ON LINE
0077   76                     SHRC   
0078   5A                     STR     RA      ;  AND STORE
0079   37 70                  B4      SKIP    ; CONTINUE SHIFTING
007B   30 5E                  BR      LOOP    ;  UNTIL 'IN' ON
007D   F8 D3          SKIP:   LDI     #D3  
007F   AF                     PLO     RF  
0080   0F                     LDN     RF      ; TEST IF MOUSE
0081   FB 02                  XRI     #02     ;  IS CAUGHT
0083   3A 91                  BNZ     #91
0085   F8 01                  LDI     #01     ; SCORE 1 FOR YOU
0087   5D                     STR     RD  
0088   8D                     GLO     RD  
0089   FC 08                  ADI     #08  
008B   AD                     PLO     RD  
008C   F8 20                  LDI     #20     ; SET BUZZER
008E   AB                     PLO     RB      ;  FREQUENCY
008F   30 9B                  BR      BUZZER  ;   AND BUZZZZ
0091   F8 01                  LDI     #01     ; SCORE 1 FOR THE MOUSE
0093   5C                     STR     RC  
0094   8C                     GLO     RC  
0095   FC 08                  ADI     #08  
0097   AC                     PLO     RC  
0098   F8 FF                  LDI     #FF     ; SET BUZZER
009A   AB                     PLO     RB      ;  FREQUENCY
009B   7B             BUZZER: SEQ
009C   8B                     GLO     RB
0090   FF 01          BUZON:  SMI     #01  
009F   3A 9D                  BNZ     BUZON  
00A1   7A                     REQ   
00A2   8B                     GLO     RB  
00A3   FF 01          BUZOFF: SMI     #01
00A5   3A A3                  BNZ     BUZOFF  
00A7   37 9B                  B4      BUZZER  ; BUZZ WHILE 'IN' IS ON
00A9   F8 FD                  LDI     #FD     ; END OF GAME?
00AB   AF                     PLO     RF  
00AC   4F                     LDA     RF  
00AD   FB 01                  XRI     #01  
00AF   32 B8                  BZ      HALT  
00B1   0F                     LDN     RF  
00B2   FB 01                  XRI     #01  
00B4   32 B8                  BZ      HALT  
00B6   30 5E                  BR      LOOP    ; LOOP BACK FOR ANOTHER PASS
00B8   30 B8          HALT:   BR      HALT    ; END OF GAME HANG UP
00BA   00 00                  .DBYTE 0000,0000 
00BC   00 00 

                      ; STACK STARTS HERE  
00BE                  STACK:
    
                      ; GAME BOARD STARTS HERE 
      = 00 C0              .ORG    #C0  
00C0                  BOARD:    
                           .END   

USER SYMBOL TABLE          
         
BLANK  0035   BOARD  00C0   BUZOFF 00A3   BUZON  009D   
BUZZER 0098   DELAY  006F   HALT   00B8   INTRPT 0011
INTRTN 000F   LOOP   005E   MAIN   002D   MOUSE  0040   
REFRSH 001E   SKIP   007D   STACK  00BE

          PROGRAM SIZE = 00C0
            0 ERRORS DETECTED

cosmacelf.com

Valid XHTML 1.0!