SINIT.S 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931
  1. .subttl "CONSOLIDATE NUMBER INITIALIZATIONS"
  2. org $9000
  3. **********PREINIT***************************************************************
  4. PREINIT: ;SET UP POWER UP DEFAULTS
  5. LDX #1 ;SETS DEFAULT MODES FOR STARTUP
  6. STX NUMPLYRS
  7. STX DIFCULTY ;STANDARD DIFFICULTY LEVEL
  8. DEX ;PLAYER ONE ONLY
  9. STX PLAYER
  10. LDX #5 ;FIVE LIVES ONLY
  11. STX PL1LIVES
  12. STX PL2LIVES
  13. JSR INITGAME
  14. JSR MCPINIT
  15. RTS
  16. **********INITIT****************************************************************
  17. INITIT: ;INITIALIZE STATE TO TITLE PAGE + MENU
  18. JSR ABSZERO ;ZERO OUT ABSOLUTE MEMORY
  19. JSR BLANKMAP ;BLANK OUT CHARACTER MAP
  20. JSR SCRAPALL ;KILL ALL TUNES
  21. JSR IOINIT ;SET UP SOFTWARE IO REGISTERS
  22. JSR DLYZFILL ;FILL UP DLY AND DLZ
  23. LDA #$80 ;RESET EAST AND WEST JOYSTICK TIMERS
  24. STA ETIMER
  25. STA WTIMER
  26. STA STIMER ;SELECT TIMER
  27. LDA #35 ;DISABLE SELECTION FOR FIRST 35 FRAMES
  28. STA OTIMER ;OF SELECT MODE
  29. NODELAY:
  30. LDX #74 ;COPY TITLE PAGE DISPLAY LIST LIST
  31. DTITLOOP: LDA TITBL,X
  32. STA DLLIST,X
  33. DEX
  34. BPL DTITLOOP
  35. LDA #TITSTATE&$FF ;SET UP STATE POINTER FOR INDIRECT JMP
  36. STA STATEPTR ;TO TITSTATE
  37. LDA #TITSTATE/256
  38. STA STATEPTR+1
  39. LDA #$4C
  40. STA HANDLER
  41. LDA #DLITIT&$FF ;SET UP DLI POINTER FOR THE DLI
  42. STA DLIPTR ;OF TITLEPAGE
  43. LDA #DLITIT/256
  44. STA DLIPTR+1
  45. TITLOGO:
  46. LDA #TITCHR1/256 ;LOAD HIGH BYTE OF TITLE PAGE CHARS
  47. STA CHARBASE ;INTO CHARBASE
  48. LDA #DLLIST&$FF ;SET UP DPPL AND DPPH FOR TITLE PAGE
  49. STA DPPL
  50. LDA #DLLIST/256
  51. STA DPPH
  52. LDX #79
  53. LDA #0
  54. ZERODL: STA DL0,X
  55. STA DL1,X
  56. STA DL2,X
  57. STA DL3,X
  58. STA DL4,X
  59. STA DL5,X
  60. DEX
  61. BPL ZERODL
  62. LDX #4 ;FILL DLISTS
  63. TITZNLP: LDA TITZN0TB,X ;WING HEADER FOR DL0
  64. STA DL0,X
  65. LDA TITZN1TB,X
  66. STA DL1,X
  67. LDA TITZN2TB,X ;WING HEADER FOR LEFT SIDE OF DL2
  68. STA DL2,X
  69. LDA TTZN2TB2,X ;WING HEADER FOR RIGHT SIDE OF DL2
  70. STA DL2+5,X
  71. LDA TITZN3TB,X
  72. STA DL3,X
  73. LDA TITZN4TB,X
  74. STA DL4,X
  75. LDA TITZN5TB,X
  76. STA DL5,X
  77. LDA CRTB1,X ;CREST HEADERS
  78. STA DL1+5,X
  79. LDA CRTB2,X
  80. STA DL2+10,X
  81. LDA CRTB3,X
  82. STA DL3+5,X
  83. LDA CRTB4,X
  84. STA DL4+5,X
  85. LDA CRTB5,X
  86. STA DL5+5,X
  87. LDA NOVHDTBL,X ;NOVICE HEADER MAP
  88. STA DL6,X
  89. LDA STDHDTBL,X ;STANDARD HEADER MAP
  90. STA DL6+5,X
  91. LDA ADVHDTBL,X ;ADVANCED HEADER MAP
  92. STA DL6+10,X
  93. LDA EXPHDTBL,X ;EXPERT HEADER MAP
  94. STA DL6+15,X
  95. LDA CRHDTBL,X ;CRIGHT MESSAGE MAP HEADER
  96. STA DL7,X
  97. DEX
  98. BPL TITZNLP
  99. LDX #3
  100. PAULOOP: LDA DSTOPSTP,X ;'DESERT FALCON' TEXT IS DONE IN DIRECT
  101. STA DL1+10,X ;MODE
  102. LDA FCTOPSTP,X
  103. STA DL1+14,X
  104. LDA DSSTPSTP,X
  105. STA DL2+15,X
  106. LDA FCSTPSTP,X
  107. STA DL2+19,X
  108. LDA DSBOTSTP,X
  109. STA DL2+23,X
  110. LDA FCBOTSTP,X
  111. STA DL2+27,X
  112. LDA DSSBTSTP,X
  113. STA DL3+10,X
  114. LDA FCSBTSTP,X
  115. STA DL3+14,X
  116. DEX
  117. BPL PAULOOP
  118. JSR PLAYTWID ;TURN ON CORRECT PLAYER
  119. JSR DIFFTWID ;TURN ON CORRECT DIFFICULTY
  120. LDX #10 ;FILLS TOPMSMAP WITH 'PLAYER TEXT'
  121. MOON: LDA PLUTOTBL,X ;TWO PLAYER ON TOP
  122. STA TOPMSMAP+2,X
  123. LDA MOONTBL,X ;ONE PLAYER ON BOTTOM
  124. STA BOTMSMAP+2,X
  125. DEX
  126. BPL MOON
  127. LDA #50 ;TWO PLAYER ON TOP
  128. STA DLY+9
  129. LDA #48 ;ONE PLAYER ON BOTTOM
  130. STA DLZ+9
  131. LDX #19 ;FILL CHAR MAPS WITH CHARS FOR WINGS
  132. WINGSLP: LDA WNGMPTB0,X ;FOR WING MAPS 0 THRU 2
  133. STA WINGMAP0,X
  134. LDA #WINGS1&$FF
  135. STA WINGMAP1,X
  136. STA WINGMAP2,X
  137. DEX
  138. BPL WINGSLP
  139. LDA #WINGS0&$FF ;HACK FIRST AND LAST CHAR OF WINGMAP2
  140. STA WINGMAP2 ;THIS IS TO SAVE BYTES YOU REALIZE
  141. LDA #WINGS2&$FF
  142. STA WINGMAP2+19
  143. LDX #17 ;FILL CHAR MAPS 3 AND 4
  144. LDA #WINGS1&$FF
  145. WNGSLP34: STA WINGMAP3,X
  146. STA WINGMAP4,X
  147. DEX
  148. BPL WNGSLP34
  149. LDA #WINGS6&$FF ;HACK IN END CHARACTERS AS USUAL
  150. STA WINGMAP3
  151. LDA #WINGS0&$FF
  152. STA WINGMAP4
  153. LDA #WINGS9&$FF
  154. STA WINGMAP3+17
  155. LDA #WINGS2&$FF
  156. STA WINGMAP4+17
  157. LDX #9 ;FILL WINGMAP5
  158. LDA #WINGS1&$FF
  159. WNGSLP5: STA WINGMAP5,X
  160. DEX
  161. BPL WNGSLP5
  162. LDA #WINGS7&$FF ;HACK ENDS OF CHARACTER MAP
  163. STA WINGMAP5
  164. LDA #WINGS8&$FF
  165. STA WINGMAP5+9
  166. LDX #29 ;FILL CREST MAP
  167. LDA #WINGS1&$FF
  168. CRSTLP: STA CRSTMAP1,X
  169. DEX
  170. BPL CRSTLP
  171. LDA #WINGS0&$FF
  172. STA CRSTMAP1
  173. STA CRSTMAP1+12
  174. STA CRSTMAP1+22
  175. STA CRSTMAP1+28
  176. LDA #WINGS2&$FF
  177. STA CRSTMAP1+11
  178. STA CRSTMAP1+21
  179. STA CRSTMAP1+25
  180. STA CRSTMAP1+29
  181. LDX #11 ;STUFF MESSAGE MAP WITH COPYRIGHT MSG
  182. SLEEP: LDA CRIGHTBL,X
  183. STA CRMAP,X
  184. DEX
  185. BPL SLEEP
  186. LDX #27 ;STUFF DIFFICULTY MAPS
  187. DIFMAPLP: LDA DIFTBL,X ;ALL DIFF MAPS ARE CONTIGUOUS IN MEM.
  188. STA NOVMAP,X
  189. DEX
  190. BPL DIFMAPLP
  191. LDX #2 ;STUFF PALETTES FOR TITLE PAGE
  192. PALSTFLP: LDA #$0F ;CONSTANT
  193. STA P0C1,X
  194. LDA PALWD1,X
  195. STA P1C1,X
  196. LDA PALWD2,X
  197. STA P2C1,X
  198. LDA PALWD3,X
  199. STA P3C1,X
  200. LDA PALWD4,X
  201. STA P4C1,X
  202. LDA #$04 ;CONSTANT
  203. STA P5C1,X
  204. DEX
  205. BPL PALSTFLP
  206. LDA #$00 ;LAST BUT NOT LEAST: BACKGRND
  207. STA BACKGRND
  208. RTS
  209. INITLOGO:
  210. LDX #23
  211. FILLLOGO: LDA LOGOTBL,X
  212. STA DLLIST,X
  213. DEX
  214. BPL FILLLOGO
  215. LDA #$4C
  216. STA HANDLER
  217. LDA #DLIHSC0&$FF ;SET UP DLI POINTER FOR THE DLI
  218. STA DLIPTR ;OF TITLEPAGE
  219. LDA #DLIHSC0/256
  220. STA DLIPTR+1
  221. JMP TITLOGO ;COMMON TITLE PAGE AND LOGO INITS.
  222. TITBL: ;22 HEADERS = 66 BYTES LONG
  223. ; FIRST THE 25 BLANK LINES
  224. .dc.b $4F,NULHDR/256,NULHDR&$FF
  225. .dc.b $48,NULHDR/256,NULHDR&$FF
  226. ; VISIBLE SCREEN HAS 192 LINES
  227. ; FIRST WE HAVE 24 BLANK LINES
  228. .dc.b $47,NULHDR/256,NULHDR&$FF
  229. .dc.b $4F,NULHDR/256,NULHDR&$FF
  230. ; THEN WE HAVE 6 ZONES OF EIGHT HIGH FOR TITLE AND LOGO
  231. .dc.b $C7,DL0/256,DL0&$FF ;1ST ZONE TIT PG. WITH INTER.
  232. .dc.b $47,DL1/256,DL1&$FF ;2ND ZONE OF TIT PG
  233. .dc.b $47,DL2/256,DL2&$FF ;3RD ZONE OF TIT PG
  234. .dc.b $47,DL3/256,DL3&$FF ;4TH ZONE OF TIT PG
  235. .dc.b $47,DL4/256,DL4&$FF ;5TH ZONE OF TIT PG
  236. .dc.b $47,DL5/256,DL5&$FF ;6TH ZONE OF TIT PG
  237. ; THEN THERE ARE 64 MORE BLANK LINES
  238. .dc.b $4F,NULHDR/256,NULHDR&$FF
  239. .dc.b $4F,NULHDR/256,NULHDR&$FF
  240. .dc.b $4F,NULHDR/256,NULHDR&$FF
  241. .dc.b $4F,NULHDR/256,NULHDR&$FF
  242. ; NOW WE HAVE ONE PLAYER MAP: 8 LINES
  243. .dc.b $C7,DLY/256,DLY&$FF
  244. ; THEN TWO BLANK LINES
  245. .dc.b $41,NULHDR/256,NULHDR&$FF
  246. ; DIFFICULTY LEVEL: 8 LINES
  247. .dc.b $47,DL6/256,DL6&$FF
  248. ; TWO BLANK LINES
  249. .dc.b $41,NULHDR/256,NULHDR&$FF
  250. ; TWO PLAYER MAP: 8 LINES
  251. .dc.b $47,DLZ/256,DLZ&$FF
  252. ; 8 BLANK LINES
  253. .dc.b $47,NULHDR/256,NULHDR&$FF
  254. ; COPYRIGHT MESSAGE: 8 LINES
  255. .dc.b $47,DL7/256,DL7&$FF
  256. ; 16 BLANK LINES
  257. .dc.b $43,NULHDR/256,NULHDR&$FF
  258. ; 16 MORE: 8 OF WHICH ARE ON THE SCREEN AND 8 WHICH ARE NOT
  259. .dc.b $4F,NULHDR/256,NULHDR&$FF
  260. ; THE REMAING 32 ARE OFF THE SCREEN
  261. .dc.b $4F,NULHDR/256,NULHDR&$FF
  262. .dc.b $CF,NULHDR/256,NULHDR&$FF ;25 NEEDED, EXTRA FOR SAFETY
  263. CRIGHTBL: .dc.b CRIGHT&$FF,BLANKCHR&$FF,AA&$FF,T&$FF,AA&$FF
  264. .dc.b R&$FF,I&$FF,BLANKCHR&$FF
  265. .dc.b 1,9,8,7 ;12 LONG EGGHEAD
  266. LOGOTBL: ;DLL FOR LOGO ON HSC
  267. ;8 HEADERS 24 BYTES LONG
  268. ; FIRST THE 24 BLANK LINES ---TRUST ME, MGF
  269. .dc.b $CF,NULHDR/256,NULHDR&$FF ;DLI HERE TO SET COLORS.
  270. .dc.b $47,NULHDR/256,NULHDR&$FF
  271. ; THEN WE HAVE 6 ZONES OF EIGHT HIGH FOR TITLE AND LOGO
  272. .dc.b $47,DL0/256,DL0&$FF ;1ST ZONE TIT PG.
  273. .dc.b $47,DL1/256,DL1&$FF ;2ND ZONE OF TIT PG
  274. .dc.b $47,DL2/256,DL2&$FF ;3RD ZONE OF TIT PG
  275. .dc.b $47,DL3/256,DL3&$FF ;4TH ZONE OF TIT PG
  276. .dc.b $47,DL4/256,DL4&$FF ;5TH ZONE OF TIT PG
  277. .dc.b $47,DL5/256,DL5&$FF ;6TH ZONE OF TIT PG WITH INTER
  278. * HEADERS FOR WINGS
  279. TITZN0TB: .dc.b WINGMAP0&$FF,$60,WINGMAP0/256,$2C,0
  280. TITZN1TB: .dc.b WINGMAP1&$FF,$60,WINGMAP1/256,$2C,0
  281. TITZN2TB: .dc.b WINGMAP2&$FF,$60,WINGMAP2/256,$3A,0
  282. TTZN2TB2: .dc.b (WINGMAP2+14)&$FF,$60,(WINGMAP2+14)/256,$3A,112
  283. TITZN3TB: .dc.b WINGMAP3&$FF,$60,WINGMAP3/256,$2E,8
  284. TITZN4TB: .dc.b WINGMAP4&$FF,$60,WINGMAP4/256,$2E,8
  285. TITZN5TB: .dc.b WINGMAP5&$FF,$60,WINGMAP5/256,$36,40
  286. * HEADERS FOR CREST
  287. CRTB1: .dc.b CRSTMAP1&$FF,$60,CRSTMAP1/256,$54,32
  288. CRTB2: .dc.b CRSTMAP2&$FF,$60,CRSTMAP2/256,$56,40
  289. CRTB3: .dc.b CRSTMAP3&$FF,$60,CRSTMAP3/256,$5C,64
  290. CRTB4: .dc.b CRSTMAP4&$FF,$60,CRSTMAP4/256,$5E,72
  291. CRTB5: .dc.b CRSTMAP5&$FF,$60,CRSTMAP5/256,$5E,72
  292. * HEADERS FOR ALL PARTS OF 'DESERT FALCON' TEXT
  293. DSTOPSTP: .dc.b TITCHR1&$FF,$94,TITCHR1/256,28
  294. FCTOPSTP: .dc.b TITCHR13&$FF,$94,TITCHR13/256,84
  295. DSBOTSTP: .dc.b TITCHR7&$FF,$94,TITCHR7/256,28
  296. FCBOTSTP: .dc.b TITCHR19&$FF,$94,TITCHR19/256,84
  297. DSSTPSTP: .dc.b TITCHR1&$FF,$74,TITCHR1/256,32
  298. FCSTPSTP: .dc.b TITCHR13&$FF,$74,TITCHR13/256,88
  299. DSSBTSTP: .dc.b TITCHR7&$FF,$74,TITCHR7/256,32
  300. FCSBTSTP: .dc.b TITCHR19&$FF,$74,TITCHR19/256,88
  301. * HEADERS FOR DIFFICULTY MAPS
  302. NOVHDTBL: .dc.b NOVMAP&$FF,$60,NOVMAP/256,$BA,12
  303. STDHDTBL: .dc.b STDMAP&$FF,$60,STDMAP/256,$B8,44
  304. ADVHDTBL: .dc.b ADVMAP&$FF,$60,ADVMAP/256,$B8,84
  305. EXPHDTBL: .dc.b EXPMAP&$FF,$60,EXPMAP/256,$BA,124
  306. * HEADER FOR CRIGHT MESSAGE
  307. CRHDTBL: .dc.b CRMAP&$FF,$60,CRMAP/256,$14,56
  308. * CHAR MAP TABLE FOR WINGS
  309. WNGMPTB0: .dc.b WINGS3&$FF,WINGS4&$FF,WINGS4&$FF
  310. .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF
  311. .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF
  312. .dc.b WINGS5&$FF,WINGS3&$FF,WINGS4&$FF
  313. .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF
  314. .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF
  315. .dc.b WINGS4&$FF,WINGS5&$FF,WINGS3&$FF
  316. * CHAR MAP TABLE FOR DIFFICULTY MAP
  317. DIFTBL: .dc.b N&$FF,O&$FF,V&$FF,I&$FF,C&$FF,E&$FF
  318. .dc.b S&$FF,T&$FF,AA&$FF,N&$FF,D&$FF,AA&$FF
  319. .dc.b R&$FF,D&$FF,AA&$FF,D&$FF,V&$FF,AA&$FF
  320. .dc.b N&$FF,C&$FF,E&$FF,D&$FF
  321. .dc.b E&$FF,X&$FF,P&$FF,E&$FF,R&$FF,T&$FF
  322. * PALETTES FOR TITLE PAGE
  323. PALWD1: .dc.b $31,$3A,$16 ;PALETTE 1 USED FOR WINGS
  324. PALWD2: .dc.b $00,$00,$31 ;CREST (NOT THE TOOTHPASTE!)
  325. PALWD3: .dc.b $11,$10,$10 ;SHADOWS
  326. PALWD4: .dc.b $1B,$37,$44 ;TITLE
  327. * CHAR MAPS FOR ONE AND TWO PLAYER SHIT
  328. MOONTBL: .dc.b BLANKCHR&$FF,O&$FF,N&$FF,E&$FF,BLANKCHR&$FF
  329. .dc.b P&$FF,L&$FF,AA&$FF,Y&$FF
  330. .dc.b E&$FF,R&$FF
  331. PLUTOTBL: .dc.b T&$FF,W&$FF,O&$FF,BLANKCHR&$FF,P&$FF,L&$FF
  332. .dc.b AA&$FF,Y&$FF,E&$FF,R&$FF,S&$FF
  333. * THIS TURNS ON THE BRIGHTNESS OF THE CURRENT DIFFICULTY LEVEL
  334. DIFFTWID:
  335. LDX #3
  336. DULLOUT: LDY DLDEXTBL,X ;FIRST DULL THEM ALL OUT
  337. LDA DFPWDLL,X
  338. STA DL6,Y
  339. DEX
  340. BPL DULLOUT
  341. LDX DIFCULTY ;THEN BRIGHTEN THE CORRECT ONE
  342. LDY DLDEXTBL,X
  343. LDA DFPWBRT,X
  344. STA DL6,Y
  345. RTS
  346. * WRITES DIFF LEVEL AND NUM. PLAYERS INTO TIT PAGE DISPLAY
  347. DLDEXTBL: .dc.b 3,8,13,18
  348. DFPWBRT: .dc.b $1A,$18,$18,$1A ;BRIGHT
  349. DFPWDLL: .dc.b $BA,$B8,$B8,$BA ;DULL
  350. PLAYTWID: ;TURN ON CORRECT PLAYER
  351. LDA #$10 ;TURN ON: PALETTE 0, WIDTH 12
  352. LDY #$B0 ;TURN OFF: PALETTE 3, WIDTH 12
  353. LDX NUMPLYRS
  354. DEX
  355. BNE TWOTWO
  356. STY DLY+8 ;TURN OFF TWO PLAYERS
  357. STA DLZ+8 ;TURN ON ONE PLAYER
  358. RTS
  359. TWOTWO: STA DLY+8 ;TURN ON TWO PLAYERS
  360. STY DLZ+8 ;TURN OFF ONE PLAYER
  361. RTS
  362. **********RANDOM INITS**********************************************************
  363. * ABSZERO: ZEROES OUT 7800 RAM
  364. ABSZERO: LDA #$18 ;zero out absolute memory
  365. STA PTR0+1 ;this does pages 18 - 20
  366. LDA #0
  367. STA NULHDR
  368. STA NULHDR+1
  369. STA PTR0
  370. TAY
  371. ABSZERLP: STA (PTR0),Y
  372. DEY
  373. BNE ABSZERLP
  374. INC PTR0+1
  375. LDX PTR0+1
  376. CPX #$20
  377. BNE ABSZERLP
  378. LDX #$22 ;THIS DOES PAGES 22 THRU 27
  379. STX PTR0+1 ;A BETTER BE ZERO HERE OR ELSE
  380. REST0LP: STA (PTR0),Y
  381. DEY
  382. BNE REST0LP
  383. INC PTR0+1
  384. LDX PTR0+1
  385. CPX #$28
  386. BNE REST0LP
  387. RTS
  388. * DLYZFILL: FILLS CHAR MAP AT BOTTOM OF SCREEN
  389. DLYZFILL:
  390. LDX #$E
  391. YZFILL: LDA YFILL,X
  392. STA DLY,X
  393. LDA ZFILL,X
  394. STA DLZ,X
  395. DEX
  396. BPL YZFILL
  397. RTS
  398. * BLANKMAP: BLANKS OUT CHARACTER MAP ON BOTTOM OF SCREEN
  399. BLANKMAP:
  400. LDX #39 ;BLANK OUT CHARACTER MAP ON BOTTOM
  401. LDA #BLANKCHR&$FF
  402. LULUPE: STA PL1MAP,X
  403. STA PL1LVMAP,X
  404. DEX
  405. BPL LULUPE
  406. RTS
  407. * IOINIT: INITIALIZE SOFTWARE IO REGISTERS
  408. IOINIT:
  409. LDA #$0B
  410. STA SWCHBIO
  411. STA OLDSWCHB
  412. LDA #$FF
  413. STA LEFTBUT+1
  414. STA LEFTBUT
  415. STA RIGHTBUT
  416. STA RIGHTBUT+1
  417. RTS
  418. **********TOTINIT***************************************************************
  419. TOTINIT:
  420. JSR ABSZERO ;ZERO OUT ABSOLUTE MEMORY
  421. JSR BLANKMAP ;BLANK OUT CHARACTER MAP
  422. JSR DLYZFILL ;FILL DLISTS FOR BOT OF SCREEN DISPLAY
  423. JSR IOINIT ;INITIALIZE SOFTWARE IO REGISTERS
  424. JSR SCRAPALL ;KILLS ALL TUNES
  425. JSR COLINIT ;INITIALIZE PALETTES
  426. LDX #59 ;COPY DISPLAY LIST LIST
  427. DLLLOOP: LDA DLTBL,X
  428. STA DLLIST,X
  429. DEX
  430. BPL DLLLOOP
  431. LDX #3
  432. STFLIST:
  433. LDY ZREFTBL,X ;INIT LIST REF PNTS
  434. LDA IDXTBL,X
  435. STA DXTBL,Y
  436. STA DFTBL,Y
  437. LDA IRLTBL,X
  438. STA RLTBL,Y
  439. LDA ILLTBL,X
  440. STA LLTBL,Y
  441. DEX
  442. BPL STFLIST
  443. ;THIS LOOP SETS UP SCROLLING OBJECT AREA TO BE EMPTY
  444. LDA #SCRENBOT+1
  445. LDX #79 ;FILL VPTBL WITH SCRENBOT+1'S
  446. FILLVPLP: STA VPTBL,X
  447. DEX
  448. BPL FILLVPLP
  449. ; THIS LOOP INITIALIZES THE SCROLLING OBJECT QUEUE
  450. LDX #PYRSTOP-PYRSTART
  451. LDY #PYRSTART
  452. KILLJACK: TYA
  453. STA SLOTQ,X
  454. INY
  455. DEX
  456. BPL KILLJACK
  457. LDA #0
  458. STA SLOTGPTR
  459. STA SLOTRPTR
  460. ; THIS LOOP INITIALIZES THE SCROLLING OBJECT BUFFER
  461. LDX #9
  462. STX FRBUFPTR ;INIT STACK POINTER
  463. ISOBLOOP: LDA #$FF
  464. STA STAMPID,X
  465. TXA
  466. STA FRBUFSTK,X ;PUT ALL BUFFER LOCATIONS IN FREE STACK
  467. DEX
  468. BPL ISOBLOOP
  469. ; THIS LOOP INITIALIZES THE MINI SPHINX TABLE
  470. LDX #MININUMB-1
  471. LDA #$FF
  472. MINITLP: STA MINITBL,X
  473. DEX
  474. BPL MINITLP
  475. ; THIS LOOP INITIALIZES THE FIRE POT TABLE
  476. LDX #FIRENUMB-1
  477. LDA #$FF
  478. FIRETLP: STA FIRETIP,X
  479. DEX
  480. BPL FIRETLP
  481. ; OF COURSE, X IS NOW FF
  482. STX HIEROSLT ;SLOT NUMBER FOR HIERO ANIMATION
  483. STX IOSIM ;SIMULATED JOYSTICK INPUT OF FF
  484. STX ZONEOFF
  485. STX UWEOK ;OK TO START UWE
  486. STX WAITCNT ;REST WAIT COUNTER
  487. STX OSCRLCNT
  488. DEX ;AND AN FE
  489. STX JERKOFF
  490. LDA #80 ;THIS IS DEFINED IN GAME AS ZBIRDZ
  491. STA ZTBL+ZBIRD
  492. LDA #CHARS/256 ;CHARBASES
  493. STA CHARBASE
  494. STA D11CBASE
  495. ;
  496. ; INITIALIZE DISPLAY LISTS
  497. ;
  498. LDX #11
  499. LDA #DL11&$FF
  500. STA PTR0
  501. UPTOP: LDA HIBYE,X
  502. STA PTR0+1
  503. LDY #6 ;Y=6
  504. LDA #00
  505. STA (PTR0),Y ;TO END DMA
  506. DEY ;Y=5
  507. STA (PTR0),Y ;TO END DMA
  508. DEY ;Y=4
  509. STA (PTR0),Y ;HPOS
  510. DEY ;Y=3
  511. LDA #ZPALWID
  512. STA (PTR0),Y
  513. DEY ;Y=2
  514. LDA #ZBUFFB/256
  515. STA (PTR0),Y
  516. DEY ;Y=1
  517. LDA #$60 ;160X2 INDIRECT MODE
  518. STA (PTR0),Y
  519. DEY ;Y=0
  520. LDA #ZBUFFB&$FF
  521. STA (PTR0),Y
  522. DEX
  523. BPL UPTOP
  524. ;MORE RANDOM INITIALIZATIONS
  525. LDA #1 ;1
  526. STA NEXFRAME
  527. LDA #8 ;NUMBER OF FLEAS AVAILABLE
  528. STA NUMFLEAS ;THE SCREEN
  529. LDA #11
  530. STA BUFDEX
  531. LDA #2 ;2
  532. STA FIRECNT
  533. ;
  534. ; CODE TO SET UP FOR LOADER
  535. ;
  536. LDX #23
  537. LDY #DL11/256
  538. INITLP9: STY ZNDLPOS,X
  539. DEY
  540. DEX
  541. DEX
  542. BPL INITLP9
  543. LDA #DL8/256 ;MULTIMEGAHACK
  544. STA ZNDLPOS+17
  545. LDA #DL9/256
  546. STA ZNDLPOS+19
  547. ;INITIALIZE LISTS WITH REFERENCE
  548. LDA #ZREF0 ;POINTS
  549. STA LOWEST
  550. LDA #ZREF3
  551. STA HIGHEST
  552. LDX #ZSHAD ;INSERT SHADOW AND BIRD INTO LIST
  553. LDA #$FE
  554. STA TEMP6
  555. STA TEMP10
  556. JSR OBJINS
  557. LDX #ZBIRD
  558. LDA #50
  559. STA TEMP6
  560. LDA #60
  561. STA TEMP10
  562. JSR OBJINS
  563. ;SET UP PW'S FOR THINGS THAT ARE CONSTANT
  564. ;PUT SHTBL IN ROM
  565. TESTHERE: LDA #$1C
  566. STA PWTBL+ZBIRD
  567. LDA #$3C
  568. STA PWTBL+ZSHAD
  569. ;AND SOME HIGH BYTES
  570. LDA #BIRDFMS/256 ;STORE SH'S AND SM'S
  571. STA SHTBL+ZBIRD
  572. STA SHTBL+ZSHAD
  573. CLC
  574. ADC #1
  575. STA SMTBL+ZBIRD
  576. STA SMTBL+ZSHAD
  577. LDX #3
  578. STFLP:
  579. LDA #$3E
  580. STA PWTBL+SHOTSHAD,X
  581. STA PWTBL+SPXSHTSH,X
  582. LDA #$1E ; PALETTE 0, 8 WIDE
  583. STA PWTBL+ZSHOT1,X
  584. LDA #$9E
  585. STA PWTBL+SPHXSHOT,X
  586. LDA #SHOTAN0/256
  587. STA SHTBL+ZSHOT1,X
  588. STA SHTBL+SHOTSHAD,X
  589. CLC
  590. ADC #1
  591. STA SMTBL+ZSHOT1,X
  592. STA SMTBL+SHOTSHAD,X
  593. LDA #SPSHOTST/256 ;SPHINX SHOT
  594. STA SHTBL+SPHXSHOT,X
  595. STA SHTBL+SPXSHTSH,X
  596. CLC
  597. ADC #17-5
  598. STA SMTBL+SPHXSHOT,X
  599. STA SMTBL+SPXSHTSH,X
  600. LDA #SPSHOTST&$FF ;SPHINX SHOT
  601. STA SLTBL+SPHXSHOT,X
  602. STA SLTBL+SPXSHTSH,X
  603. LDA IPTBLLO,X ;INIT CIRCULAR BUFFER FOR LOOKAHEAD
  604. STA PTRTBLLO,X ;CHAR MAP POINTER TABLE TO DIRT ONLY
  605. LDA IPTBLHI,X
  606. STA PTRTBLHI,X
  607. DEX
  608. BPL STFLP
  609. ;THOSE TRICKY SM'S
  610. LDA #2
  611. STA SCRATE
  612. LDA MASK9L+2 ;STUFF MASKS AS WELL
  613. STA LEFTMASK
  614. LDA MASK9L+1
  615. STA LEFTMASK+1
  616. LDA MASK9L
  617. STA LEFTMASK+2
  618. LDA MASK9L+3
  619. STA LEFTMASK+3
  620. LDA MASK9R+2 ;STUFF MASKS AS WELL
  621. STA RIGTMASK
  622. LDA MASK9R+1
  623. STA RIGTMASK+1
  624. LDA MASK9R
  625. STA RIGTMASK+2
  626. LDA MASK9R+3
  627. STA RIGTMASK+3
  628. LDX #2
  629. STX STUFFDEX
  630. INX
  631. STX LOADFDEX
  632. RTS
  633. IDXTBL: .dc.b 2*NUMBER,200,140,80
  634. ILLTBL: .dc.b $FF
  635. ZREFTBL: .dc.b ZREF0&$FF
  636. IRLTBL: .dc.b ZREF1&$FF,ZREF2&$FF,ZREF3&$FF,$FF
  637. IPTBLLO: .dc.b (BLOCK9+66)&$FF,(BLOCK9+33)&$FF,BLOCK9&$FF,(BLOCK9+99)&$FF
  638. IPTBLHI: .dc.b (BLOCK9+66)/256,(BLOCK9+33)/256,BLOCK9/256,(BLOCK9+99)/256
  639. TOTINIT2:
  640. JSR MCPINIT2
  641. LDA #$F1 ;DO SCROLLS TO FILL SCREEN
  642. JSRAGAIN:
  643. PHA
  644. JSR VSCRP
  645. JSR RANDOM
  646. JSR GRNDMCP
  647. JSR SCRLOAD
  648. JSR NEWBLOCK
  649. LDA #0
  650. STA GSCRFLAG
  651. STA GCOARSE
  652. JSR SCROLL
  653. PLA
  654. TAY
  655. DEY
  656. TYA
  657. BNE JSRAGAIN
  658. LDA #0
  659. STA SCRATE ;TO STOP SCROLLING
  660. STA SCROLLS ;TO KEEP FROM SCROLLING AGAIN
  661. JSR CLRPFLGS
  662. JSR PLACEMNT ;PUT THAT BIRD DOWN
  663. ; THIS DOES PROJECTION
  664. LDA SHADANAD,Y
  665. STA SLTBL+ZSHAD
  666. LDA #DLLIST&$FF ;SET UP DLIST LIST POINTER
  667. STA DPPL
  668. LDA #DLLIST/256
  669. STA DPPH
  670. LDA #DLITOP&$FF ;INTERRUPT SHIT
  671. STA DLIPTR
  672. LDA #DLITOP/256 ;ONLY TIME DLIPTR+1 IS STORED!!!!
  673. STA DLIPTR+1
  674. LDA #$80
  675. STA RUNLOAD ;FLAG TO ENABLE LOADER
  676. JSR LOADER ;once for good luck
  677. RTS
  678. INITGAME: LDA #GAMSTATE&$FF
  679. STA STATEPTR
  680. LDA #GAMSTATE/256
  681. STA STATEPTR+1
  682. JSR INITNPLR
  683. LDA #5
  684. STA PL1LIVES
  685. STA PL2LIVES
  686. LDA #40 ;UNDO AUTO PLAY HACK
  687. STA DLZ+9
  688. LDA #$50 ;SET UP TREASURE BASE VALUE
  689. STA TRVAL1+1
  690. STA TRVAL2+1
  691. LDA #1 ;INITIALIZE TREASURE MULTIPLIERS
  692. STA JEWCNT
  693. STA JEWCNT+1
  694. STA BARCNT
  695. STA BARCNT+1
  696. STA EGGCNT
  697. STA EGGCNT+1
  698. BCKSTART: ;STARTUP BACKGROUND TUNE
  699. LDX #1
  700. BCKINTLP: LDA #$0
  701. STA VBRUN,X
  702. LDA #$1
  703. STA DBK0,X
  704. LDA #$FF
  705. STA TBINDX0,X
  706. STA CBINDX0,X
  707. STA VBINDX0,X
  708. DEX
  709. BPL BCKINTLP
  710. RTS
  711. PLYONTBL: .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  712. .dc.b P&$FF,L&$FF,AA&$FF,Y&$FF,E&$FF
  713. .dc.b R&$FF,BLANKCHR&$FF,O&$FF,N&$FF,E&$FF
  714. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  715. PLYTWTBL: .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  716. .dc.b P&$FF,L&$FF,AA&$FF,Y&$FF,E&$FF,R&$FF
  717. .dc.b BLANKCHR&$FF,T&$FF,W&$FF,O&$FF
  718. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  719. INITNPLR: LDX #13 ;THERE ARE BETTER WAYS BUT THIS IS MOST
  720. GETCHA: LDA PLAYER ;BYTE EFFICIENT I THINK AND WE'RE NOT
  721. BEQ BLAH1 ;CONCERNED ABOUT TIME HERE
  722. LDA PLYTWTBL,X
  723. BNE BLAH2 ;THE ONLY ZERO CHARACTER IS ZERO
  724. BLAH1: LDA PLYONTBL,X
  725. BLAH2: STA BOTMSMAP+3,X
  726. DEX
  727. BPL GETCHA
  728. JSR BCKSTART ;START BACKGROUND TUNE
  729. LDA #$16 ;TURN ON PALETTE
  730. LDY #$B6 ;TURN OFF PALETTE
  731. LDX PLAYER
  732. BNE TWOISUP
  733. STA DLY+3 ;PLAYER ONE IS UP: TURN ON HIS SCORE
  734. STA DLZ+3 ;AND LIVES
  735. STY DLY+13 ;TURN OFF PLAYER TWO'S LIVES AND SCORE
  736. STY DLZ+13
  737. RTS
  738. TWOISUP: STA DLY+13 ;PLAYER TWO IS UP: TURN ON HIS SCORE
  739. STA DLZ+13 ;AND LIVES
  740. STY DLY+3 ;TURN OFF PLAYER ONE'S LIVES AND SCORE
  741. STY DLZ+3
  742. RTS
  743. INITAUTO: LDA #ATOSTATE&$FF
  744. STA STATEPTR
  745. LDA #ATOSTATE/256
  746. STA STATEPTR+1
  747. LDA #38 ;CENTER 'DESERT FALCON' IN BOTMSMAP
  748. STA DLZ+9
  749. LDX #12
  750. GGJJ2: LDA SPHTBL,X
  751. STA BOTMSMAP+4,X
  752. DEX
  753. BPL GGJJ2
  754. RTS
  755. YFILL: .dc.b PL1MAP&$FF,$60,PL1MAP/256,$16,0
  756. .dc.b TOPMSMAP&$FF,$60,TOPMSMAP/256,$2C,40
  757. .dc.b PL2MAP&$FF,$60,PL2MAP/256,$16,120
  758. ZFILL: .dc.b PL1LVMAP&$FF,$60,PL1LVMAP/256,$16,0
  759. .dc.b BOTMSMAP&$FF,$60,BOTMSMAP/256,$4C,40
  760. .dc.b PL2LVMAP&$FF,$60,PL2LVMAP/256,$16,120
  761. DLTBL: .dc.b $4F,NULHDR/256,NULHDR&$FF,$C8,NULHDR/256,NULHDR&$FF
  762. .dc.b $4F,DL0/256,DL0&$FF,$4F,DL1/256,DL1&$FF
  763. .dc.b $4F,DL2/256,DL2&$FF,$4F,DL3/256,DL3&$FF,$4F,DL4/256,DL4&$FF
  764. .dc.b $4F,DL5/256,DL5&$FF,$4F,DL6/256,DL6&$FF,$4F,DL7/256,DL7&$FF
  765. .dc.b $4F,DL8/256,DL8&$FF,$4F,DL9/256,DL9&$FF,$4F
  766. .dc.b DL10/256,DL10&$FF
  767. .dc.b $CF,DL11/256,DL11&$FF,$C0,NULHDR/256,NULHDR&$FF
  768. ;one blank line to clean up dma mess
  769. .dc.b $47,DLY/256,DLY&$FF,$47,DLZ/256,DLZ&$FF
  770. .dc.b $CF,NULHDR/256,NULHDR&$FF,$46,NULHDR/256,NULHDR&$FF
  771. * FOR PAL HACKING
  772. * .dc.b $4F,NULHDR/256,NULHDR&$FF,$4F,NULHDR/256,NULHDR&$FF
  773. * .dc.b $4F,NULHDR/256,NULHDR&$FF,$4B,NULHDR/256,NULHDR&$FF
  774. .dc.b $CF,NULHDR/256,NULHDR&$FF
  775. SPHTBL: .dc.b D&$FF,E&$FF,S&$FF,E&$FF,R&$FF,T&$FF
  776. .dc.b BLANKCHR&$FF,F&$FF,AA&$FF,L&$FF,C&$FF
  777. .dc.b O&$FF,N&$FF