LOADMAP.S 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. * LOADMAP.S ROUTINES DEALING WITH MAZE MAINTENANCE
  2. * MAZE DRAWING ROUTINE: CALLED WITH THE NUMBER OF THE DESIRED MAZE IN RACK,
  3. * WILL DRAW THE APPROPRIATE MAZE.
  4. ;ZERO PAGE TEMPORARY VARIABLES.
  5. ; TEMP0-7 : EIGHT BYTE SHIFT REGISTER
  6. ; TEMP8-9 : POINTER TO MAZE DATA
  7. ; TEMP10-11: POINTER TO PLAY FIELD (CHARACTER MAP)
  8. ; TEMP12 : TEMPORARY VALUE STORAGE FOR COMPUTATIONS
  9. ; TEMP13 : OFFSET TO PLAYFIELD POINTER FOR LEFT HALF OF MAZE
  10. ; TEMP14 : OFFSET TO PLAYFIELD POINTER FOR RIGHT HALF OF MAZE
  11. ; TEMP15 : COUNTER TO KEEP TRACK OF CURRENT ROW
  12. LOADMAP LDA #$00
  13. STA DOTS ;INITIALIZE DOT COUNTER
  14. STA DOTS+1
  15. LDY RACK
  16. LDA MAZEBEGL,Y
  17. STA TEMP8
  18. LDA MAZEBEGH,Y
  19. STA TEMP8+1
  20. LDA #0
  21. STA TEMP13
  22. LDA #WIDTH-1
  23. STA TEMP14
  24. JSR LDSHFTL
  25. NEXTCOL JSR LDSHFTH
  26. LDA #L(SCREEN)
  27. STA TEMP10
  28. LDA #H(SCREEN)
  29. STA TEMP10+1
  30. LDA #HEIGHT
  31. STA TEMP15
  32. NEXTROW LDA TEMP0+0
  33. AND #$03
  34. STA TEMP12
  35. LDA TEMP0+4
  36. ASL A
  37. ASL A
  38. AND #$0C
  39. ORA TEMP12
  40. TAX
  41. LDA TEMP13
  42. CMP #10
  43. BCC NOTPEN
  44. LDA TEMP15
  45. SBC #15
  46. CMP #5
  47. BCS NOTPEN
  48. ;PEN
  49. TXA
  50. ADC #$10
  51. TAX
  52. NOTPEN
  53. ;NORMAL PLAYFIELD
  54. TXA ;SEE IF SHOULD BE AN EMPTY CHARACTER
  55. CMP #$0F ; NEAR THE BORDER INSTEAD OF FULL
  56. BNE DOCHAR
  57. LDA TEMP13
  58. CMP #$03
  59. BPL DOCHAR
  60. LDX #$00 ;IT SHOULD BE EMPTY
  61. DOCHAR LDA LEFT,X
  62. LDY TEMP13
  63. STA (TEMP10),Y
  64. LDA RIGHT,X
  65. LDY TEMP14
  66. STA (TEMP10),Y
  67. JSR SHIFT
  68. CLC
  69. LDA TEMP10
  70. ADC #WIDTH
  71. STA TEMP10
  72. BCC NOINC
  73. INC TEMP10+1
  74. NOINC DEC TEMP15
  75. BNE NEXTROW
  76. INC TEMP13
  77. DEC TEMP14
  78. LDA TEMP13
  79. CMP TEMP14
  80. BCS LOADDONE
  81. JSR SHIFT
  82. JSR SHIFT
  83. JMP NEXTCOL
  84. SHIFT LDX #$07
  85. LSR TEMP0+7
  86. SHIFT1 ROR TEMP0-1,X
  87. DEX
  88. BNE SHIFT1
  89. RTS
  90. LOADDONE LDA #DOORCHAR ;PEN ENTRANCE CHARACTER
  91. STA SCREEN+28*11+13 ;ENTRANCE AT 11TH ROW, 13TH COLUMN
  92. STA SCREEN+28*11+14 ; AND 11TH ROW, 14TH COLUMN.
  93. * THIS CODE TAKES CARE OF PUTTING UP THE DOTS
  94. LDA #$00 ;INITIALIZE EVERYTHING TO ZERO
  95. TAY
  96. STA TEMP0
  97. STA TEMP1
  98. LMDLOOP LDA DOTARRAY,Y ;GET NEW SET OF DOT BITS
  99. STA TEMP15
  100. JSR LMDOTS ;DO EACH OF THE 8 BITS
  101. JSR LMDOTS
  102. JSR LMDOTS
  103. JSR LMDOTS
  104. JSR LMDOTS
  105. JSR LMDOTS
  106. JSR LMDOTS
  107. JSR LMDOTS
  108. INY
  109. CPY #$78
  110. BNE LMDLOOP
  111. * AND FINALLY - DO THE POWER DOTS
  112. LDY RACK ;GET THE RACK
  113. LDA EDZONE0,Y
  114. STA TEMP0
  115. LDA EDCOL0,Y
  116. STA TEMP1
  117. JSR LMEDOTS ;ZONE 0 COLUMN 0
  118. LDA EDCOL1,Y
  119. STA TEMP1
  120. JSR LMEDOTS ;ZONE 0 COLUMN 1
  121. LDA EDZONE1,Y
  122. STA TEMP0
  123. JSR LMEDOTS ;ZONE 1 COLUMN 1
  124. LDA EDCOL0,Y
  125. STA TEMP1
  126. JSR LMEDOTS ;ZONE 1 COLUMN 0
  127. RTS
  128. * THIS ROUTINE CHECKS FOR A PARTICULAR POWER DOT
  129. LMEDOTS JSR GETCHAR ;SEE WHAT'S THERE
  130. CMP #DOTCHAR ;IS IT A DOT?
  131. BNE LMEDOUT
  132. LDX #EDOTCHAR ;PUT AN EDOT DOWN
  133. JSR PLOPCHAR
  134. LMEDOUT RTS
  135. * THIS ROUTINE LOADS IN A PARTICULAR DOT
  136. LMDOTS ASL TEMP15 ;GET A BIT OFF
  137. BCC LMDINC ;SEE IF A DOT HERE
  138. LDX #DOTCHAR ;DOT HERE
  139. JSR PLOPCHAR ;PUT IT IN
  140. INC DOTS ;ADD IT TO THE DOT COUNTER
  141. BNE LMDINC
  142. INC DOTS+1
  143. LMDINC JMP NEXTPLOP ;INCREMENT COLUMN
  144. LEFT DB $50,$30,$31,$32,$33,$34,$50,$35,$36,$50,$37,$38,$39,$3A,$3B,$3C
  145. PLEFT DB $50,$3E,$3F,$40,$41,$42,$50,$50,$43,$50,$44,$50,$45,$50,$50,$50
  146. RIGHT DB $50,$33,$36,$39,$30,$34,$50,$3A,$31,$50,$37,$3B,$32,$35,$38,$3C
  147. PRIGHT DB $50,$41,$43,$45,$3E,$42,$50,$50,$3F,$50,$44,$50,$40,$50,$50,$50
  148. LDSHFTL LDX #$03
  149. BNE LDSHFT1
  150. LDSHFTH LDX #$07
  151. LDSHFT1 LDY #$03
  152. LDSHFT2 LDA (TEMP8),Y
  153. STA TEMP0,X
  154. DEX
  155. DEY
  156. BPL LDSHFT2
  157. CLC
  158. LDA TEMP8
  159. ADC #$04
  160. STA TEMP8
  161. BCC LDSHFT3
  162. INC TEMP8+1
  163. LDSHFT3 RTS
  164. ; <=======================================================================>
  165. * THIS ROUTINE LOADS IN THE DOTS FOR A NEW RACK INTO DOTARRAY
  166. * USES: TEMP0-1, X
  167. LOADDOTS LDX RACK ;SET UP FOR TRANSFER
  168. LDA DOTBEGL,X
  169. STA TEMP0
  170. LDA DOTBEGH,X
  171. STA TEMP1
  172. LDY #$7F
  173. LDDLOOP LDA (TEMP0),Y ;AND MOVE THEM
  174. STA DOTARRAY,Y
  175. DEY
  176. BPL LDDLOOP
  177. RTS
  178. ; <=======================================================================>
  179. * THIS ROUTINE USES THE CHARACTER MAP IN SCREEN TO UPDATE THE INFORMATION
  180. * IN DOTARRAY.
  181. SAVEDOTS LDA #$00 ;INITIALIZE EVERYTHING TO ZERO
  182. TAY
  183. STA TEMP0
  184. STA TEMP1
  185. SDLOOP JSR SDDOTS ;DO EACH OF THE 8 BITS
  186. JSR SDDOTS
  187. JSR SDDOTS
  188. JSR SDDOTS
  189. JSR SDDOTS
  190. JSR SDDOTS
  191. JSR SDDOTS
  192. JSR SDDOTS
  193. LDA TEMP15
  194. STA DOTARRAY,Y
  195. INY
  196. CPY #$78
  197. BNE SDLOOP
  198. RTS
  199. * THIS ROUTINE CHECKS FOR A PARTICULAR DOT
  200. SDDOTS LDA TEMP1 ;SEE IF OUT OF RANGE
  201. CMP #$1C
  202. BPL SDNODOTS
  203. JSR GETCHAR ;FIND OUT WHAT IS HERE
  204. CMP #DOTCHAR
  205. BMI SDNODOTS
  206. SEC ;SHIFT IN A 1
  207. JMP SDDOIT
  208. SDNODOTS CLC ;SHIFT IN A 0
  209. SDDOIT ROL TEMP15
  210. * THIS ROUTINE INCREMENTS THE COLUMN FOR ROUTINES USING PUT/PLOPCHAR
  211. NEXTPLOP INC TEMP1 ;NEXT COLUMN
  212. LDA TEMP1
  213. CMP #$20
  214. BMI NCOUT
  215. LDA #$00 ;NEXT ZONE
  216. STA TEMP1
  217. INC TEMP0
  218. NCOUT RTS
  219. ; <=======================================================================>
  220. ;TABLES OF POINTERS TO TABLES...
  221. MAZEBEGL DB L(MAZE1),L(MAZE2),L(MAZE3),L(MAZE4)
  222. MAZEBEGH DB H(MAZE1),H(MAZE2),H(MAZE3),H(MAZE4)
  223. DOTBEGL DB L(DOT1),L(DOT2),L(DOT3),L(DOT4)
  224. DOTBEGH DB H(DOT1),H(DOT2),H(DOT3),H(DOT4)
  225. ; <=======================================================================>
  226. MAZE1 DB $7F,$FE,$FC,$7F,$41,$FE,$3C,$40,$41,$FE,$3C,$40
  227. DB $09,$00,$00,$4F,$09,$00,$00,$4F,$C9,$F3,$24,$4F
  228. DB $01,$12,$24,$40,$01,$12,$24,$40,$4F,$92,$27,$4F
  229. DB $41,$00,$04,$41,$41,$00,$04,$41,$49,$F2,$24,$49
  230. DB $09,$F2,$20,$48,$09,$F2,$20,$48,$C9,$F3,$3C,$4F
  231. DOT1 DB $00,$00,$00,$00,$7E,$7F,$E7,$E0
  232. DB $42,$40,$24,$20,$42,$40,$24,$20
  233. DB $7F,$FF,$FF,$E0,$12,$09,$04,$80
  234. DB $12,$09,$04,$80,$13,$F9,$FC,$80
  235. DB $10,$00,$00,$80,$10,$00,$00,$80
  236. DB $10,$00,$00,$80,$10,$00,$00,$80
  237. DB $10,$00,$00,$80,$10,$00,$00,$80
  238. DB $10,$00,$00,$80,$10,$00,$00,$80
  239. DB $10,$00,$00,$80,$10,$00,$00,$80
  240. DB $10,$00,$00,$80,$1F,$C0,$3F,$80
  241. DB $10,$40,$20,$80,$10,$40,$20,$80
  242. DB $7F,$F9,$FF,$E0,$42,$09,$04,$20
  243. DB $42,$09,$04,$20,$42,$79,$E4,$20
  244. DB $42,$40,$24,$20,$42,$40,$24,$20
  245. DB $7F,$FF,$FF,$E0,$00,$00,$00,$00
  246. ; <=======================================================================>
  247. MAZE2 DB $F9,$FF,$3F,$7F,$09,$10,$3C,$41,$09,$10,$3C,$41
  248. DB $C9,$93,$00,$48,$49,$90,$00,$48,$49,$90,$27,$4F
  249. DB $41,$02,$20,$40,$41,$02,$20,$40,$4F,$3E,$E7,$49
  250. DB $01,$00,$24,$48,$01,$00,$24,$48,$C9,$F3,$00,$49
  251. DB $09,$F2,$00,$41,$09,$F2,$3C,$41,$79,$F2,$3C,$4F
  252. DOT2 DB $00,$00,$00,$00,$00,$7F,$E0,$00
  253. DB $00,$40,$20,$00,$00,$40,$20,$00
  254. DB $7F,$F9,$FF,$E0,$40,$49,$20,$20
  255. DB $40,$49,$20,$20,$4F,$CF,$3F,$20
  256. DB $48,$00,$01,$20,$48,$00,$01,$20
  257. DB $7E,$00,$07,$E0,$02,$00,$04,$00
  258. DB $02,$00,$04,$00,$7E,$00,$07,$E0
  259. DB $42,$00,$04,$20,$42,$00,$04,$20
  260. DB $72,$00,$04,$E0,$12,$00,$04,$80
  261. DB $12,$00,$04,$80,$1F,$F0,$FF,$80
  262. DB $10,$10,$80,$80,$10,$10,$80,$80
  263. DB $1E,$70,$E7,$80,$12,$40,$24,$80
  264. DB $12,$40,$24,$80,$73,$F9,$FC,$E0
  265. DB $42,$09,$04,$20,$42,$09,$04,$20
  266. DB $7F,$FF,$FF,$E0,$00,$00,$00,$00
  267. ; <=======================================================================>
  268. MAZE3 DB $FF,$FC,$FF,$7F
  269. DB $81,$00,$20,$40
  270. DB $81,$00,$20,$40
  271. DB $99,$9C,$07,$49
  272. DB $09,$10,$04,$49
  273. DB $09,$10,$E4,$49
  274. DB $C9,$83,$00,$40
  275. DB $09,$82,$00,$40
  276. DB $09,$F2,$3C,$7F
  277. DB $41,$00,$04,$41
  278. DB $41,$00,$04,$41
  279. DB $4F,$F2,$24,$49
  280. DB $01,$F2,$20,$48
  281. DB $01,$F2,$20,$48
  282. DB $79,$F2,$3C,$4F
  283. DOT3 DB $00,$00,$00,$00,$7F,$CF,$3F,$E0
  284. DB $40,$49,$20,$20,$40,$49,$20,$20
  285. DB $4F,$F9,$FF,$20,$79,$09,$09,$E0
  286. DB $09,$09,$09,$00,$09,$FF,$F9,$00
  287. DB $78,$00,$01,$E0,$40,$00,$00,$20
  288. DB $40,$00,$00,$20,$40,$00,$00,$20
  289. DB $40,$00,$00,$20,$40,$00,$00,$20
  290. DB $40,$00,$00,$20,$40,$00,$00,$20
  291. DB $40,$00,$00,$20,$40,$00,$00,$20
  292. DB $40,$00,$00,$20,$7E,$79,$E7,$E0
  293. DB $12,$40,$24,$80,$12,$40,$24,$80
  294. DB $73,$F9,$FC,$E0,$42,$09,$04,$20
  295. DB $42,$09,$04,$20,$7E,$79,$E7,$E0
  296. DB $42,$40,$24,$20,$42,$40,$24,$20
  297. DB $7E,$7F,$E7,$E0,$00,$00,$00,$00
  298. ; <=======================================================================>
  299. MAZE4 DB $FF,$4F,$FE,$7F
  300. DB $01,$4E,$3E,$40
  301. DB $01,$4E,$3E,$40
  302. DB $79,$40,$00,$4F
  303. DB $41,$40,$00,$41
  304. DB $41,$F2,$39,$41
  305. DB $09,$02,$20,$48
  306. DB $09,$02,$20,$48
  307. DB $C9,$9F,$27,$4F
  308. DB $01,$02,$04,$48
  309. DB $01,$02,$04,$48
  310. DB $79,$F2,$E4,$49
  311. DB $09,$F0,$00,$41
  312. DB $09,$F0,$00,$41
  313. DB $C9,$F3,$3C,$79
  314. DOT4 DB $00,$00,$00,$00,$7F,$FF,$FF,$E0
  315. DB $48,$40,$21,$20,$48,$40,$21,$20
  316. DB $4F,$CF,$3F,$20,$42,$49,$24,$20
  317. DB $42,$49,$24,$20,$7E,$79,$E7,$E0
  318. DB $10,$00,$00,$80,$10,$00,$00,$80
  319. DB $1E,$00,$07,$80,$02,$00,$04,$00
  320. DB $02,$00,$04,$00,$02,$00,$04,$00
  321. DB $02,$00,$04,$00,$02,$00,$04,$00
  322. DB $02,$00,$04,$00,$1E,$00,$07,$80
  323. DB $12,$00,$04,$80,$13,$C0,$3C,$80
  324. DB $10,$40,$20,$80,$10,$40,$20,$80
  325. DB $7F,$C0,$3F,$E0,$42,$40,$24,$20
  326. DB $42,$40,$24,$20,$4E,$7F,$E7,$20
  327. DB $48,$09,$01,$20,$48,$09,$01,$20
  328. DB $7F,$F9,$FF,$E0,$00,$00,$00,$00
  329. ; <=======================================================================>
  330. ;CONSTANT VALUES FOR MS.PACMAN
  331. WIDTH EQU 28
  332. HEIGHT EQU 30
  333. * ZONES AND COLUMNS FOR THE ENERGY DOTS - INDEXED BY RACK
  334. EDZONE0 DB $03,$04,$03,$03
  335. EDZONE1 DB $19,$19,$16,$1A
  336. EDCOL0 DB $01,$01,$01,$01
  337. EDCOL1 DB $1A,$1A,$1A,$1A