123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- * LOADMAP.S ROUTINES DEALING WITH MAZE MAINTENANCE
- * MAZE DRAWING ROUTINE: CALLED WITH THE NUMBER OF THE DESIRED MAZE IN RACK,
- * WILL DRAW THE APPROPRIATE MAZE.
- ;ZERO PAGE TEMPORARY VARIABLES.
- ; TEMP0-7 : EIGHT BYTE SHIFT REGISTER
- ; TEMP8-9 : POINTER TO MAZE DATA
- ; TEMP10-11: POINTER TO PLAY FIELD (CHARACTER MAP)
- ; TEMP12 : TEMPORARY VALUE STORAGE FOR COMPUTATIONS
- ; TEMP13 : OFFSET TO PLAYFIELD POINTER FOR LEFT HALF OF MAZE
- ; TEMP14 : OFFSET TO PLAYFIELD POINTER FOR RIGHT HALF OF MAZE
- ; TEMP15 : COUNTER TO KEEP TRACK OF CURRENT ROW
- LOADMAP LDA #$00
- STA DOTS ;INITIALIZE DOT COUNTER
- STA DOTS+1
- LDY RACK
- LDA MAZEBEGL,Y
- STA TEMP8
- LDA MAZEBEGH,Y
- STA TEMP8+1
- LDA #0
- STA TEMP13
- LDA #WIDTH-1
- STA TEMP14
- JSR LDSHFTL
- NEXTCOL JSR LDSHFTH
- LDA #L(SCREEN)
- STA TEMP10
- LDA #H(SCREEN)
- STA TEMP10+1
- LDA #HEIGHT
- STA TEMP15
- NEXTROW LDA TEMP0+0
- AND #$03
- STA TEMP12
- LDA TEMP0+4
- ASL A
- ASL A
- AND #$0C
- ORA TEMP12
- TAX
- LDA TEMP13
- CMP #10
- BCC NOTPEN
- LDA TEMP15
- SBC #15
- CMP #5
- BCS NOTPEN
- ;PEN
- TXA
- ADC #$10
- TAX
- NOTPEN
- ;NORMAL PLAYFIELD
- TXA ;SEE IF SHOULD BE AN EMPTY CHARACTER
- CMP #$0F ; NEAR THE BORDER INSTEAD OF FULL
- BNE DOCHAR
- LDA TEMP13
- CMP #$03
- BPL DOCHAR
- LDX #$00 ;IT SHOULD BE EMPTY
- DOCHAR LDA LEFT,X
- LDY TEMP13
- STA (TEMP10),Y
- LDA RIGHT,X
- LDY TEMP14
- STA (TEMP10),Y
- JSR SHIFT
- CLC
- LDA TEMP10
- ADC #WIDTH
- STA TEMP10
- BCC NOINC
- INC TEMP10+1
- NOINC DEC TEMP15
- BNE NEXTROW
- INC TEMP13
- DEC TEMP14
- LDA TEMP13
- CMP TEMP14
- BCS LOADDONE
- JSR SHIFT
- JSR SHIFT
- JMP NEXTCOL
- SHIFT LDX #$07
- LSR TEMP0+7
- SHIFT1 ROR TEMP0-1,X
- DEX
- BNE SHIFT1
- RTS
- LOADDONE LDA #DOORCHAR ;PEN ENTRANCE CHARACTER
- STA SCREEN+28*11+13 ;ENTRANCE AT 11TH ROW, 13TH COLUMN
- STA SCREEN+28*11+14 ; AND 11TH ROW, 14TH COLUMN.
- * THIS CODE TAKES CARE OF PUTTING UP THE DOTS
- LDA #$00 ;INITIALIZE EVERYTHING TO ZERO
- TAY
- STA TEMP0
- STA TEMP1
- LMDLOOP LDA DOTARRAY,Y ;GET NEW SET OF DOT BITS
- STA TEMP15
- JSR LMDOTS ;DO EACH OF THE 8 BITS
- JSR LMDOTS
- JSR LMDOTS
- JSR LMDOTS
- JSR LMDOTS
- JSR LMDOTS
- JSR LMDOTS
- JSR LMDOTS
- INY
- CPY #$78
- BNE LMDLOOP
- * AND FINALLY - DO THE POWER DOTS
- LDY RACK ;GET THE RACK
- LDA EDZONE0,Y
- STA TEMP0
- LDA EDCOL0,Y
- STA TEMP1
- JSR LMEDOTS ;ZONE 0 COLUMN 0
- LDA EDCOL1,Y
- STA TEMP1
- JSR LMEDOTS ;ZONE 0 COLUMN 1
- LDA EDZONE1,Y
- STA TEMP0
- JSR LMEDOTS ;ZONE 1 COLUMN 1
- LDA EDCOL0,Y
- STA TEMP1
- JSR LMEDOTS ;ZONE 1 COLUMN 0
- RTS
- * THIS ROUTINE CHECKS FOR A PARTICULAR POWER DOT
- LMEDOTS JSR GETCHAR ;SEE WHAT'S THERE
- CMP #DOTCHAR ;IS IT A DOT?
- BNE LMEDOUT
- LDX #EDOTCHAR ;PUT AN EDOT DOWN
- JSR PLOPCHAR
- LMEDOUT RTS
- * THIS ROUTINE LOADS IN A PARTICULAR DOT
- LMDOTS ASL TEMP15 ;GET A BIT OFF
- BCC LMDINC ;SEE IF A DOT HERE
- LDX #DOTCHAR ;DOT HERE
- JSR PLOPCHAR ;PUT IT IN
- INC DOTS ;ADD IT TO THE DOT COUNTER
- BNE LMDINC
- INC DOTS+1
- LMDINC JMP NEXTPLOP ;INCREMENT COLUMN
- LEFT DB $50,$30,$31,$32,$33,$34,$50,$35,$36,$50,$37,$38,$39,$3A,$3B,$3C
- PLEFT DB $50,$3E,$3F,$40,$41,$42,$50,$50,$43,$50,$44,$50,$45,$50,$50,$50
- RIGHT DB $50,$33,$36,$39,$30,$34,$50,$3A,$31,$50,$37,$3B,$32,$35,$38,$3C
- PRIGHT DB $50,$41,$43,$45,$3E,$42,$50,$50,$3F,$50,$44,$50,$40,$50,$50,$50
- LDSHFTL LDX #$03
- BNE LDSHFT1
- LDSHFTH LDX #$07
- LDSHFT1 LDY #$03
- LDSHFT2 LDA (TEMP8),Y
- STA TEMP0,X
- DEX
- DEY
- BPL LDSHFT2
- CLC
- LDA TEMP8
- ADC #$04
- STA TEMP8
- BCC LDSHFT3
- INC TEMP8+1
- LDSHFT3 RTS
- ; <=======================================================================>
- * THIS ROUTINE LOADS IN THE DOTS FOR A NEW RACK INTO DOTARRAY
- * USES: TEMP0-1, X
- LOADDOTS LDX RACK ;SET UP FOR TRANSFER
- LDA DOTBEGL,X
- STA TEMP0
- LDA DOTBEGH,X
- STA TEMP1
- LDY #$7F
- LDDLOOP LDA (TEMP0),Y ;AND MOVE THEM
- STA DOTARRAY,Y
- DEY
- BPL LDDLOOP
- RTS
- ; <=======================================================================>
- * THIS ROUTINE USES THE CHARACTER MAP IN SCREEN TO UPDATE THE INFORMATION
- * IN DOTARRAY.
- SAVEDOTS LDA #$00 ;INITIALIZE EVERYTHING TO ZERO
- TAY
- STA TEMP0
- STA TEMP1
- SDLOOP JSR SDDOTS ;DO EACH OF THE 8 BITS
- JSR SDDOTS
- JSR SDDOTS
- JSR SDDOTS
- JSR SDDOTS
- JSR SDDOTS
- JSR SDDOTS
- JSR SDDOTS
- LDA TEMP15
- STA DOTARRAY,Y
- INY
- CPY #$78
- BNE SDLOOP
- RTS
- * THIS ROUTINE CHECKS FOR A PARTICULAR DOT
- SDDOTS LDA TEMP1 ;SEE IF OUT OF RANGE
- CMP #$1C
- BPL SDNODOTS
- JSR GETCHAR ;FIND OUT WHAT IS HERE
- CMP #DOTCHAR
- BMI SDNODOTS
- SEC ;SHIFT IN A 1
- JMP SDDOIT
- SDNODOTS CLC ;SHIFT IN A 0
- SDDOIT ROL TEMP15
- * THIS ROUTINE INCREMENTS THE COLUMN FOR ROUTINES USING PUT/PLOPCHAR
- NEXTPLOP INC TEMP1 ;NEXT COLUMN
- LDA TEMP1
- CMP #$20
- BMI NCOUT
- LDA #$00 ;NEXT ZONE
- STA TEMP1
- INC TEMP0
- NCOUT RTS
- ; <=======================================================================>
- ;TABLES OF POINTERS TO TABLES...
- MAZEBEGL DB L(MAZE1),L(MAZE2),L(MAZE3),L(MAZE4)
- MAZEBEGH DB H(MAZE1),H(MAZE2),H(MAZE3),H(MAZE4)
- DOTBEGL DB L(DOT1),L(DOT2),L(DOT3),L(DOT4)
- DOTBEGH DB H(DOT1),H(DOT2),H(DOT3),H(DOT4)
- ; <=======================================================================>
- MAZE1 DB $7F,$FE,$FC,$7F,$41,$FE,$3C,$40,$41,$FE,$3C,$40
- DB $09,$00,$00,$4F,$09,$00,$00,$4F,$C9,$F3,$24,$4F
- DB $01,$12,$24,$40,$01,$12,$24,$40,$4F,$92,$27,$4F
- DB $41,$00,$04,$41,$41,$00,$04,$41,$49,$F2,$24,$49
- DB $09,$F2,$20,$48,$09,$F2,$20,$48,$C9,$F3,$3C,$4F
- DOT1 DB $00,$00,$00,$00,$7E,$7F,$E7,$E0
- DB $42,$40,$24,$20,$42,$40,$24,$20
- DB $7F,$FF,$FF,$E0,$12,$09,$04,$80
- DB $12,$09,$04,$80,$13,$F9,$FC,$80
- DB $10,$00,$00,$80,$10,$00,$00,$80
- DB $10,$00,$00,$80,$10,$00,$00,$80
- DB $10,$00,$00,$80,$10,$00,$00,$80
- DB $10,$00,$00,$80,$10,$00,$00,$80
- DB $10,$00,$00,$80,$10,$00,$00,$80
- DB $10,$00,$00,$80,$1F,$C0,$3F,$80
- DB $10,$40,$20,$80,$10,$40,$20,$80
- DB $7F,$F9,$FF,$E0,$42,$09,$04,$20
- DB $42,$09,$04,$20,$42,$79,$E4,$20
- DB $42,$40,$24,$20,$42,$40,$24,$20
- DB $7F,$FF,$FF,$E0,$00,$00,$00,$00
- ; <=======================================================================>
- MAZE2 DB $F9,$FF,$3F,$7F,$09,$10,$3C,$41,$09,$10,$3C,$41
- DB $C9,$93,$00,$48,$49,$90,$00,$48,$49,$90,$27,$4F
- DB $41,$02,$20,$40,$41,$02,$20,$40,$4F,$3E,$E7,$49
- DB $01,$00,$24,$48,$01,$00,$24,$48,$C9,$F3,$00,$49
- DB $09,$F2,$00,$41,$09,$F2,$3C,$41,$79,$F2,$3C,$4F
- DOT2 DB $00,$00,$00,$00,$00,$7F,$E0,$00
- DB $00,$40,$20,$00,$00,$40,$20,$00
- DB $7F,$F9,$FF,$E0,$40,$49,$20,$20
- DB $40,$49,$20,$20,$4F,$CF,$3F,$20
- DB $48,$00,$01,$20,$48,$00,$01,$20
- DB $7E,$00,$07,$E0,$02,$00,$04,$00
- DB $02,$00,$04,$00,$7E,$00,$07,$E0
- DB $42,$00,$04,$20,$42,$00,$04,$20
- DB $72,$00,$04,$E0,$12,$00,$04,$80
- DB $12,$00,$04,$80,$1F,$F0,$FF,$80
- DB $10,$10,$80,$80,$10,$10,$80,$80
- DB $1E,$70,$E7,$80,$12,$40,$24,$80
- DB $12,$40,$24,$80,$73,$F9,$FC,$E0
- DB $42,$09,$04,$20,$42,$09,$04,$20
- DB $7F,$FF,$FF,$E0,$00,$00,$00,$00
- ; <=======================================================================>
- MAZE3 DB $FF,$FC,$FF,$7F
- DB $81,$00,$20,$40
- DB $81,$00,$20,$40
- DB $99,$9C,$07,$49
- DB $09,$10,$04,$49
- DB $09,$10,$E4,$49
- DB $C9,$83,$00,$40
- DB $09,$82,$00,$40
- DB $09,$F2,$3C,$7F
- DB $41,$00,$04,$41
- DB $41,$00,$04,$41
- DB $4F,$F2,$24,$49
- DB $01,$F2,$20,$48
- DB $01,$F2,$20,$48
- DB $79,$F2,$3C,$4F
- DOT3 DB $00,$00,$00,$00,$7F,$CF,$3F,$E0
- DB $40,$49,$20,$20,$40,$49,$20,$20
- DB $4F,$F9,$FF,$20,$79,$09,$09,$E0
- DB $09,$09,$09,$00,$09,$FF,$F9,$00
- DB $78,$00,$01,$E0,$40,$00,$00,$20
- DB $40,$00,$00,$20,$40,$00,$00,$20
- DB $40,$00,$00,$20,$40,$00,$00,$20
- DB $40,$00,$00,$20,$40,$00,$00,$20
- DB $40,$00,$00,$20,$40,$00,$00,$20
- DB $40,$00,$00,$20,$7E,$79,$E7,$E0
- DB $12,$40,$24,$80,$12,$40,$24,$80
- DB $73,$F9,$FC,$E0,$42,$09,$04,$20
- DB $42,$09,$04,$20,$7E,$79,$E7,$E0
- DB $42,$40,$24,$20,$42,$40,$24,$20
- DB $7E,$7F,$E7,$E0,$00,$00,$00,$00
- ; <=======================================================================>
- MAZE4 DB $FF,$4F,$FE,$7F
- DB $01,$4E,$3E,$40
- DB $01,$4E,$3E,$40
- DB $79,$40,$00,$4F
- DB $41,$40,$00,$41
- DB $41,$F2,$39,$41
- DB $09,$02,$20,$48
- DB $09,$02,$20,$48
- DB $C9,$9F,$27,$4F
- DB $01,$02,$04,$48
- DB $01,$02,$04,$48
- DB $79,$F2,$E4,$49
- DB $09,$F0,$00,$41
- DB $09,$F0,$00,$41
- DB $C9,$F3,$3C,$79
- DOT4 DB $00,$00,$00,$00,$7F,$FF,$FF,$E0
- DB $48,$40,$21,$20,$48,$40,$21,$20
- DB $4F,$CF,$3F,$20,$42,$49,$24,$20
- DB $42,$49,$24,$20,$7E,$79,$E7,$E0
- DB $10,$00,$00,$80,$10,$00,$00,$80
- DB $1E,$00,$07,$80,$02,$00,$04,$00
- DB $02,$00,$04,$00,$02,$00,$04,$00
- DB $02,$00,$04,$00,$02,$00,$04,$00
- DB $02,$00,$04,$00,$1E,$00,$07,$80
- DB $12,$00,$04,$80,$13,$C0,$3C,$80
- DB $10,$40,$20,$80,$10,$40,$20,$80
- DB $7F,$C0,$3F,$E0,$42,$40,$24,$20
- DB $42,$40,$24,$20,$4E,$7F,$E7,$20
- DB $48,$09,$01,$20,$48,$09,$01,$20
- DB $7F,$F9,$FF,$E0,$00,$00,$00,$00
- ; <=======================================================================>
- ;CONSTANT VALUES FOR MS.PACMAN
- WIDTH EQU 28
- HEIGHT EQU 30
- * ZONES AND COLUMNS FOR THE ENERGY DOTS - INDEXED BY RACK
- EDZONE0 DB $03,$04,$03,$03
- EDZONE1 DB $19,$19,$16,$1A
- EDCOL0 DB $01,$01,$01,$01
- EDCOL1 DB $1A,$1A,$1A,$1A
|