MARIAOS.S 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244
  1. .TITLE "Decryption Rom O.S."
  2. .6502
  3. ; MARIAOS MARIA DATA LOCATION DEFINITIONS
  4. ; NOTE THE FOLLOWING WIERD THINGS ABOUT THE RAM:
  5. ; 000-03F <=> 0100-013F
  6. ; 080-0FF <=> 0180-01FF
  7. ; 040-0FF <=> 02040-020FF
  8. ; 0140-01FF <=> 02140-021FF
  9. ; TIA REGISTERS
  10. INPTCTRL = $01 ;INPUT CONTROL
  11. INPT4 = $0C ;BITS 7 PLAYER 0 BUTTON
  12. INPT5 = $0D ;BITS 7 PLAYER 1 BUTTON
  13. AUDC0 = $15 ;BITS 3210 AUDIO CONTROL 0
  14. AUDC1 = $16 ;BITS 3210 AUDIO CONTROL 1
  15. AUDF0 = $17 ;BITS 43210 AUDIO FREQUENCY 0
  16. AUDF1 = $18 ;BITS 43210 AUDIO FREQUENCY 1
  17. AUDV0 = $19 ;BITS 3210 AUDIO VOLUME 0
  18. AUDV1 = $1A ;BITS 3210 AUDIO VOLUME 1
  19. VSYNC = $00 ;BIT 1 VERTICAL SYNC SET-CLR
  20. VBLANK = $01 ;BIT 1 VERTICAL BLANK SET-CLR
  21. TWSYNC = $02 ;STROBE WAIT FOR HORIZ BLANK
  22. RSYNC = $03 ;STROBE RESET HORIZ SYNC COUNTER
  23. COLUP0 = $06 ;BITS 7654321 COLOR(4)-LUM(3) PLAYER 0
  24. COLUP1 = $07 ;BITS 7654321 COLOR(4)-LUM(3) PLAYER 1
  25. COLUPF = $08 ;BITS 7654321 COLOR(4)-LUM(3) PLAYFIELD
  26. COLUBK = $09 ;BITS 7654321 COLOR(4)-LUM(3) BACKGROUND
  27. PF2 = $0F ;BITS ALL PLAYFIELD REG BYTE 2
  28. RESP0 = $10 ;STROBE RESET PLAYER 0
  29. RESP1 = $11 ;STROBE RESET PLAYER 1
  30. GRP0 = $1B ;BITS ALL GRAPHICS FOR PLAYER 0
  31. GRP1 = $1C ;BITS ALL GRAPHICS FOR PLAYER 1
  32. CXCLR = $2C ;STROBE CLEAR ALL COLLISION LATCHES
  33. CXP0FB = $32
  34. CXP1FB = $33
  35. ; MARIA REGISTERS
  36. BACKGRND = $20 ;BACKGROUND COLOR
  37. P0C1 = $21 ;PALETTE 0, COLOR 1
  38. P0C2 = $22 ;PALETTE 0, COLOR 2
  39. P0C3 = $23 ;PALETTE 0, COLOR 3
  40. WSYNC = $24 ;FAST MARIA WSYNC STROBE WO
  41. P1C1 = $25 ;PALETTE 1, COLOR 1
  42. P1C2 = $26 ;PALETTE 1, COLOR 2
  43. P1C3 = $27 ;PALETTE 1, COLOR 3
  44. MSTAT = $28 ;BIT 6 IN VBLANK, BIT ? IN DISPLAY RO
  45. P2C1 = $29 ;PALETTE 2, COLOR 1
  46. P2C2 = $2A ;PALETTE 2, COLOR 2
  47. P2C3 = $2B ;PALETTE 2, COLOR 3
  48. DPPH = $2C ;DISPLAY LIST POINTER HIGH WO
  49. P3C1 = $2D ;PALETTE 3, COLOR 1
  50. P3C2 = $2E ;PALETTE 3, COLOR 2
  51. P3C3 = $2F ;PALETTE 3, COLOR 3
  52. DPPL = $30 ;DISPLAY LIST POINTER LOW WO
  53. P4C1 = $31 ;PALETTE 4, COLOR 1
  54. P4C2 = $32 ;PALETTE 4, COLOR 2
  55. P4C3 = $33 ;PALETTE 4, COLOR 3
  56. CHARBASE = $34 ;CHARACTER MODE HIGH POINTER WO
  57. P5C1 = $35 ;PALETTE 5, COLOR 1
  58. P5C2 = $36 ;PALETTE 5, COLOR 2
  59. P5C3 = $37 ;PALETTE 5, COLOR 3
  60. OFFSET = $38 ;NOT USED ******
  61. P6C1 = $39 ;PALETTE 6, COLOR 1
  62. P6C2 = $3A ;PALETTE 6, COLOR 2
  63. P6C3 = $3B ;PALETTE 6, COLOR 3
  64. CTRL = $3C ;BIT 7 CHARACTER WIDTH, BIT 6 BCNT WO
  65. P7C1 = $3D ;PALETTE 7, COLOR 1
  66. P7C2 = $3E ;PALETTE 7, COLOR 2
  67. P7C3 = $3F ;PALETTE 7, COLOR 3
  68. ; FREE RAM - 040-0FF
  69. ; ALIASED RAM - 0100-013F
  70. ; STACK - 0140-01FF
  71. ; 6532 TIMERS AND PORTS
  72. SWCHA = $280 ;JOYSTICKS
  73. ; BIT 7 PLAYER 0 EAST IF CLEAR
  74. ; BIT 6 WEST
  75. ; BIT 5 SOUTH
  76. ; BIT 4 NORTH
  77. ; BIT 3 PLAYER 1 EAST IF CLEAR
  78. ; BIT 2 WEST
  79. ; BIT 1 SOUTH
  80. ; BIT 0 NORTH
  81. SWCHB = $282 ;CONSOLE SWITCHES
  82. ; BIT 7 PLAYER 1 DIFFICULTY A IF SET, B IF CLEAR
  83. ; BIT 6 PLAYER 2 DIFFICULTY A IF SET, B IF CLEAR
  84. ; BIT 3 BLACK AND WHITE VS COLOR - COLOR WHEN SET
  85. ; BIT 1 GAME SELECT - CLEAR WHEN PRESSED
  86. ; BIT 0 GAME RESET - CLEAR WHEN PRESSED
  87. CTLSWA = $281
  88. CTLSWB = $283
  89. INTIM = $284 ;INTERVAL TIMER IN
  90. TIM8T = $295 ;TIMER 8T WRITE OUT
  91. TIM64T = $296 ;TIMER 64T WRITE OUT
  92. TIM64TI = $29E ;INTERRUPT TIMER 64T
  93. ; ENDEF.S ENCRYPTION SYMBOL DEFINITIONS
  94. ; ADDRESS DEFINITIONS
  95. ; PAGE 0 - 0080-00FF ($40-07F TAKEN BY A REGISTER)
  96. TEST0 = $C0 ;TEST DATA FOR CPU TEST
  97. TEST1 = $C1
  98. TESTW0 = $C2 ;2 BYTES
  99. TESTW1 = $C4 ;2 BYTES
  100. TEMP0 = $D0 ;SCRATCH DATA FOR PROGRAM USE
  101. TEMP1 = $D1 ;MORE SCRATCH DATA
  102. TEMP2 = $D2 ;MORE SCRATCH DATA
  103. TEMP3 = $D3 ;MORE SCRATCH DATA
  104. TEMP4 = $D4 ;MORE SCRATCH DATA
  105. TEMP5 = $D5 ;MORE SCRATCH DATA
  106. STARTA = $E0 ;WHERE ACCUMULATOR STARTS
  107. OFFSETA = $E1 ;OFFSET INTO ACCUMULATOR
  108. OFFSETR = $E2 ;OFFSET INTO A REGISTER
  109. SIZEA = $E3 ;SIZE OF ACCUMULATOR
  110. SIZER0 = $E4 ;SIZE OF REGISTER 0
  111. SIZER1 = $E5 ;SIZE OF REGISTER 1
  112. SIZER3 = $E6 ;SIZE OF REGISTER 3
  113. SIZER5 = $E7 ;SIZE OF REGISTER 5
  114. CARTBOTM = $EE ;BOTTOM OF CARTRIDGE ADDRESS
  115. FUJICOLR = $EF ;STARTING COLOR FOR FUJI-A
  116. KNLSTATE = $F0 ;HOW MANY MORE ITERATIONS TILL KERNEL
  117. KNLCOUNT = $F1 ;TIMER FOR CHANGING FUJI COLOR
  118. KNLTIME = $F2 ;TIME THAT COUNT IS GOOD FOR
  119. KNLOFSET = $F3 ;HOW STAGGERED THE FUJI COLOR IS
  120. DLIADDR = $F4 ;SAME ADDRESS AS IN PACK-IN
  121. ; HIGH RAM - 01800-027FF
  122. ACC = $1800 ;256 BYTE ACCUMULATOR
  123. REG0 = $1900 ;128 BYTE REGISTER
  124. REG2 = $1A00 ;128 BYTE REGISTER
  125. REG4 = $1B00 ;128 BYTE REGISTER
  126. REG6 = $1C00 ;128 BYTE REGISTER
  127. REG8 = $1D00 ;128 BYTE REGISTER
  128. REG10 = $1E00 ;128 BYTE REGISTER
  129. REG12 = $1F00 ;128 BYTE REGISTER
  130. RAMGRAPH = $1984 ;GRAPHICS IN RAM, 019XX-$1EXX
  131. RAMDLL = $1F84 ;DLL
  132. REG1 = $2000 ;128 BYTE REGISTER
  133. ; ***** HOLE FROM 02040 TO 020FF - SHADOWED IN PAGE 0 *****
  134. REG14 = $2100 ;128 BYTE REGISTER (OVERLAPS PART OF S)
  135. ; ***** HOLE FROM 02140 TO 021FF SHADOWED IN PAGE 1 *****
  136. ; DISPLAY LIST RAM
  137. RAMDLIST = $2200 ;RAM FOR DLISTS FOR WORDS AND FUJI-A
  138. ; MEMORY LOCATIONS FOR CODE, BEFORE AND AFTER MOVING
  139. ROMCD = $F400 ;WHERE DROPPED CODE LIVES
  140. ROMCD2 = $F880 ;WHERE NON-DROPPED CODE IS
  141. RAMCODE = $2300 ;AREA RESERVED FOR CODE
  142. CODEDIF = ROMCD-RAMCODE ;DIFFERENCE BETWEEN OLD AND NEW ADDRESS
  143. ; ENCRYPTION CONSTANTS
  144. STACKPTR = $FF ;WHERE STACK IS ON PAGE 1
  145. REGION = $FE ;MASK FOR COUNTRY
  146. RANDBYTE = $04 ;RANDOM BYTE IN CHECKSUM
  147. ;NTGAME = $D804 ;INTERNAL GAME ROM START LOCATION
  148. ;NTDLI = $D800 ;INTERNAL GAME DLI HANDLER
  149. INTDLI = $F000 ;OUR DLI
  150. ; SCAFFOLD.S
  151. ; THIS DOES THE DISPATCHING WHENEVER THE PACK-IN ISN'T AROUND
  152. .org INTDLI
  153. PHA
  154. JMP (DLIADDR)
  155. ; CART.S ROUTINES DEALING WITH CHECKING THE CARTRIDGE OUT
  156. .org ROMCD
  157. NOCART: JMP LOCK2600-CODEDIF ;NO INTERNAL CART
  158. BADCART:
  159. JMP LOCK2600-CODEDIF ;CART DOES NOT CHECK, DO 2600 MODE
  160. CARTTEST:
  161. LDA #$16 ;TURN EXTERNAL CART ON
  162. STA INPTCTRL
  163. LDY #$FF
  164. LDX #$7F ;SEE IF A CART PLUGGED IN
  165. CTSTLOOP:
  166. LDA $FE00,X
  167. CMP $FD80,Y
  168. BNE NOCART
  169. DEY
  170. DEX
  171. BPL CTSTLOOP ;X LEFT = FF, Y LEFT = 7F
  172. LDA $FFFC ;SEE IF START AT FFFF
  173. AND $FFFD
  174. CMP #$FF
  175. BEQ NOCART ;ALL LINES DRAWN HIGH, NO CART
  176. LDA $FFFC ;SEE IF START AT 0000
  177. ORA $FFFD
  178. BEQ NOCART ;ALL LINES DRAWN LOW, NO CART
  179. LDA $FFF8 ;CHECK FOR REGION VERIFICATION
  180. ORA #REGION
  181. CMP #$FF
  182. BNE BADCART
  183. LDA $FFF8 ;TOP 4 BITS OF FFF8 SHOULD BE 0F0
  184. EOR #$F0
  185. AND #$F0
  186. BNE BADCART
  187. LDA $FFF9 ;SEE IF MARIA SIGNATURE EXISTS
  188. AND #$0B ;0X7 OR 0X3 VALID
  189. CMP #$03
  190. BNE BADCART
  191. LDA $FFF9 ;GET BOTTOM OF CART ADDRESS
  192. AND #$F0
  193. STA CARTBOTM
  194. * .include "decrypt.s"
  195. ; VECTOR.S WE HAVE DETERMINED VALIDITY, VECTOR TO CART IN 2600 OR
  196. ; 3600 MODE
  197. SETMARIA:
  198. LDX #$16 ;PUT CART IN 3600 MODE, CART ON
  199. STX INPTCTRL
  200. TXS
  201. SED
  202. JMP ($FFFC) ;VECTOR INTO THE CART IN 3600 MODE
  203. LOCK2600:
  204. LDA #$02
  205. STA INPTCTRL ;TURN SECURITY ROM ON
  206. LDX #$7F ;LOCK CART IN 2600 MODE, CART ON
  207. L2LOOP:
  208. LDA SYNC,X ;MOVE CODE TO RAM
  209. STA $480,X ;MOVE INTO 6532 RAM
  210. DEX
  211. BPL L2LOOP
  212. JMP $480 ;AND EXECUTE OUT OF RAM
  213. ; First zero out TIA without doing a TWSYNC. This must be done in a loop that
  214. ; counts up so that graphics are turned off before the collision registers are
  215. ; cleared. RSYNC should turn case C into a case A. Note also that the stores
  216. ; of zero puts the system in TIA space but does not lock it there. This code
  217. ; must all run out of 6532 RAM since the memory map will change as we change
  218. ; mode. The 6532 RAM exists in all memory maps.
  219. SYNC:
  220. LDA #0
  221. TAX
  222. STA VBLANK
  223. ZEROLP:
  224. STA RSYNC,X
  225. INX
  226. CPX #(CXCLR-RSYNC+1)
  227. BNE ZEROLP
  228. ; Test now for a possible E case. In some E cases, TWSYNCs do not work properly
  229. ; and this must be detected. In an E case failure, the LDA is prefetched and
  230. ; the 04 following it is skipped over and NOP ($EA) is loaded into A causing
  231. ; the branch on minus to be taken. If this happens the E case can now be
  232. ; corrected. NOTE: All E cases do not get trapped here and must be handled
  233. ; latter by collisions.
  234. STA TWSYNC
  235. LDA #4
  236. NOP
  237. BMI ECASE
  238. ; Position player 0 on the left side of the screen and player 1 on the right
  239. ; side of the screen so that they will overlap (or not overlap as the case may
  240. ; be) playfield 2 that has a copy on both sides of the screen. Resets occur at
  241. ; the 38th and 65th cycle.
  242. LDX #4
  243. STALL4:
  244. DEX ;Stall loop
  245. BPL STALL4
  246. TXS ;Set the stack to 0FF for stall JSRs
  247. STA RESP0+$100 ;38th cylce
  248. JSR DUMMY+1-SYNC+$480 ;12 cycle stall
  249. JSR DUMMY+1-SYNC+$480 ;Ditto
  250. STA RESP1 ;65th cycle
  251. ; Turn on graphics to cause the collisions
  252. STA GRP0 ;68th cycle
  253. STA GRP1 ;71st cycle
  254. STA PF2 ;74th cycle
  255. ; Stall an entire scan line to allow collisions to take place. The E case test
  256. ; should follow all TWSYNCs to be safe.
  257. NOP ;76th cycle
  258. STA TWSYNC ;3rd cycle
  259. LDA #0
  260. NOP
  261. BMI ECASE
  262. ; Test now for a collision between player 1 and playfield. If there is no
  263. ; collision, we must shift the clock once. If there is a collision, we must
  264. ; do further testing.
  265. BIT CXP1FB-$30
  266. BMI NOCOL1
  267. ; This section shifts the clock once. Storing a 2 switches the system into
  268. ; MARIA MODe and the following store to 0FXXX causes a clock speed-up for one
  269. ; cycle and thus shifts the clock once.
  270. ECASE:
  271. LDA #2
  272. STA COLUBK ;changes to MARIA MODe
  273. STA $F112
  274. BNE DONE ;JMP
  275. ; Test now for a collision between player 0 and playfield. If there is no
  276. ; collision, we must shift the clock twice. If there is a collision, we must
  277. ; do further testing.
  278. NOCOL1:
  279. BIT CXP0FB-$30
  280. BMI NOCOL0
  281. ; This section shifts the clock twice. Storing a 2 switches the system into
  282. ; MARIA MODe and the following stores to 0FXXX causes two clock speed-ups for
  283. ; one cycle and thus shifts the clock twice.
  284. LDA #2
  285. STA COLUP0 ;changes to MARIA MODe
  286. STA $F118
  287. DUMMY:
  288. STA $F460 ;Note that the 060 is a RTS
  289. BNE DONE
  290. ; If we've fotten to this point the only possible failure left is an E case that
  291. ; was not detected by the TWSYNC trap. Test for this by clearing the collision
  292. ; registers, shifting the graphics for player 0 to the left one pixel by
  293. ; changing GRP0 from a 4 to an 8, and then retesting for a collision. If there
  294. ; is still a collision between player 0 and the playfield, we have an E case,
  295. ; otherwise we are done. Be careful not to test for collisions until after they
  296. ; occur (about the 40th cycle).
  297. NOCOL0:
  298. STA CXCLR ;21st cycle
  299. LDA #8 ;23rd cycle - one pixel to the left
  300. STA GRP0 ;26th cycle
  301. JSR DUMMY+1-SYNC+$480 ;12 cycle stall
  302. NOP ;40th cycle - just to be safe
  303. BIT CXP0FB-$30 ;43rd cycle
  304. BMI ECASE
  305. ; We are now synced and should lock ourselves into TIA mopde with the external
  306. ; cart enabled and jump to the reset vector. Thanks for stopping by...
  307. DONE:
  308. LDA #$FD
  309. STA COLUPF ;Change MODes to TIA with EXT and lock.
  310. JMP ($FFFC)
  311. NROM:
  312. NOP ;END OF FIRST PART OF ROM
  313. ; TESTS.S RAM AND CPU TESTS - IF EITHER ARE BAD, DECRYPTION WILL FAIL,
  314. ; THUS, THESE MUST BE TESTED FIRST
  315. ; ***** NOTE: ***** THE FOLLOWING INSTRUCTIONS ARE NOT TESTED BY THE CPU TEST,
  316. ; AND THUS SHOULD NOT BE USED IN THE VALIDATION/DECRYPTION CODE:
  317. ; BRK, RTI, PLP, PHP, CLV, SEV, BVC, BVS, CLD, SED, BIT, SEI, CLI
  318. ; TEST FAILURE MODES
  319. BADCPU = $00 ;CPU ERROR
  320. BAD16A = $01 ;ERROR IN RAM 02000-$27FF
  321. BAD16B = $02 ;ERROR IN RAM 01800-$1FFF
  322. BADRAM = $03 ;CAN'T GET TO ANY OF THE RAM
  323. BADMARIA = $04 ;MARIA SHADOWING NOT WORKING
  324. BADVALID = $05 ;BAD VALIDATION OR DECRYPTION
  325. .org ROMCD2
  326. FATAL0:
  327. LDA #$1D ;THERE HAS BEEN SOMETHING BAD FOUND
  328. STA INPTCTRL ;LOCK IN 2600 MODE, TEST CART WILL FIND
  329. MAIN:
  330. SEI ;INITIALIZE
  331. CLD
  332. LDA #$02 ;PUT BASE UNIT INTO MARIA ENABLE
  333. STA INPTCTRL
  334. LDA #ENDDLI >> 8 ;WESTBERG SUX
  335. STA DLIADDR+1 ;WESTBERG SUX
  336. LDA #$ff & ENDDLI ;WESTBERG SUX
  337. STA DLIADDR ;WESTBERG SUX
  338. LDA #$7F
  339. STA CTRL ;TURN OFF DMA
  340. LDA #$00
  341. STA BACKGRND ;BACKGROUND COLOR TO BLACK
  342. ; ***** RAM TESTS *****
  343. ; SIMPLE RAM TEST TO CHECK PAGES 02000 AND 02100 IS DONE FIRST TO GIVE US
  344. ; RAM TO TEST OUT THE CPU (SHADOWED TO PAGES 00000 AND 00100). AFTER
  345. ; THE CPU TEST, A FULL RAM TEST IS DONE.
  346. ; EARLY RAM TEST, JUST CHECK OUT OUR TWO PAGES USING MINIMAL INSTRUCTIONS
  347. RAMCHECK:
  348. LDX #$05 ;TEST OUT 4 PATTERNS OF RAM
  349. RCAGAIN:
  350. LDA RAMPAT,X
  351. LDY #$00
  352. RCLOOP:
  353. STA $2000,Y ;CHECK ZERO PAGE
  354. CMP $2000,Y
  355. BNE CHKRAMB
  356. STA $2100,Y ;CHECK PAGE 1
  357. CMP $2100,Y
  358. BNE CHKRAMB
  359. DEY
  360. BNE RCLOOP
  361. DEX
  362. BPL RCAGAIN
  363. ; SEE IF MARIA SHADOWING WORKS
  364. LDA #$43 ;A SIMPLE TEST TO SEE IF SHADOWING WORK
  365. STA $2080
  366. CMP $0080
  367. BNE MARIAERR
  368. STA $2180
  369. CMP $0180
  370. BNE MARIAERR
  371. JMP CPUTEST ;IF SHADOWING AND RAM WORKS, CHECK CPU
  372. ; RAM FAILURE ROUTINES
  373. MARIAERR:
  374. LDY #BADMARIA ;MARIA SHADOWING BAD
  375. JMP FATAL0
  376. CHKRAMB:
  377. STA $1800 ;RAMA HAS FAILED IN SIMPLE TEST, CHECK
  378. CMP $1800 ; TO SEE IF ANY RAM WORKS
  379. BNE RAMERR
  380. RAMAERR:
  381. LDY #BAD16A ;BAD RAM CHIP - 02000-$27FF
  382. JMP FATAL0
  383. RAMBERR:
  384. LDY #BAD16B ;BAD RAM CHIP - 01800-$1FFF
  385. JMP FATAL0
  386. RAMERR:
  387. LDY #BADRAM ;ALL RAM BAD - COULD BE ANOTHER PROBLEM
  388. JMP FATAL0
  389. ; A FULL RAM TEST, TO BE DONE AFTER THE CPU TEST SUCEEDS
  390. RAMTEST:
  391. LDA #$00 ;SET UP STATE TO MARCH THROUGH RAM
  392. STA $F0 ;(F0) = 02000
  393. STA $F2 ;(F2) = 01800
  394. LDY #$07 ;NUMBER OF PAGES TO CHECK
  395. STY $F4
  396. RTPAGE:
  397. LDA RAMAPAGE,Y ;SET UP RAM A PAGE TO CHECK
  398. STA $F1
  399. LDA RAMBPAGE,Y ;SET UP RAM B PAGE TO CHECK
  400. STA $F3
  401. LDX #$05 ;NUMBER OF RAM PATTERNS TO CHECK
  402. RTPAT:
  403. LDA RAMPAT,X ;GET RAM PATTERN
  404. LDY #$00 ;INITIALIZE INDEX
  405. RTLOOP:
  406. STA ($F0),Y ;CHECK RAM A
  407. CMP ($F0),Y
  408. BNE RAMAERR
  409. STA ($F2),Y ;CHECK RAM B
  410. CMP ($F2),Y
  411. BNE RAMBERR
  412. DEY
  413. BNE RTLOOP
  414. DEX
  415. BPL RTPAT
  416. DEC $F4 ;ONE LESS PAGE
  417. LDY $F4
  418. BPL RTPAGE
  419. JMP STARTVND ;START THE VALIDATION AND DECRYPTION
  420. RAMPAT:
  421. dc.b $00,$FF,$55,$AA,$69,$0F ;PATTERNS FOR RAM TEST
  422. RAMAPAGE:
  423. dc.b $22,$23,$24,$25,$26,$27,$22,$23 ;HI BYTES OF RAM A PAGES
  424. RAMBPAGE:
  425. dc.b $18,$19,$1A,$1B,$1C,$1D,$1E,$1F ;HI BYTES OF RAM B PAGES
  426. ; ***** CPU TESTS *****
  427. IRQINT:
  428. ;IF WE GET AN IRQ, IT IS A CPU ERROR
  429. CPERR:
  430. LDY #BADCPU ;CPU ERROR
  431. JMP FATAL0
  432. ; CPU TEST, METHODICALLY CHECK ALL INSTRUCTIONS, ADDRESSING MODES, AND STATUS
  433. ; BITS THAT THE DECRYPTION WILL BE USING
  434. CPUTEST:
  435. LDA #$AA ;FIRST, TEST OUT LDA AND BRANCHING
  436. BEQ CPERR ;CHECK BEQ FAIL
  437. BPL CPERR ;CHECK BPL FAIL
  438. BMI CTA ;CHECK BMI SUCCEED
  439. JMP CPERR
  440. CTA:
  441. BNE CTB ;CHECK BNE SUCCEED
  442. JMP CPERR
  443. CTB:
  444. STA $AA ;STORE IT AWAY, 0AA = AA
  445. CMP $AA ;SEE IF IT ADDRESSES AND COMPARES
  446. BNE CPERR
  447. LDA #$00 ;TEST ALTERNATE POLARITY
  448. BNE CPERR ;CHECK BNE FAIL
  449. BMI CPERR ;CHECK BMI FAIL
  450. BPL CTC ;CHECK BPL SUCCEED
  451. JMP CPERR
  452. CTC:
  453. BEQ CTD ;CHECK BEQ SUCCEED
  454. JMP CPERR
  455. CTD:
  456. CMP #$00
  457. BNE CPERR ;CHECK CMP EQ
  458. BCC CPERR ;CHECK BCC FAIL
  459. BCS CTE ;CHECK BCS SUCCEED
  460. JMP CPERR
  461. CTE:
  462. CMP #$01
  463. BCS CPERR ;CHECK BCS FAIL
  464. BCC CTF ;CHECK BCC SUCCEED
  465. JMP CPERR
  466. CTF:
  467. LDX #$55 ;TEST X AND Y, LOADS, STORES, AND COMP
  468. CPX #$56 ;CHECK CPX
  469. BEQ CPERR
  470. STX $1AA ;CHECK STX - 01AA = 55
  471. CPX $1AA ;CHECK CPX
  472. BNE CPERR
  473. LDY $AA ;CHECK LDY, - Y = AA
  474. CPY #$AB
  475. BEQ CPERR
  476. STY $155 ;CHECK STY - 0155 = AA
  477. CPY $155 ;CHECK CPY
  478. BNE CPERR
  479. DEX ;CHECK TRANSFER DATA PATHS AND STACK
  480. TXS ;TO POINT TO 0155, S MUST BE 54
  481. INX
  482. PLA ;S HAS 55, A = 0155 (= AA)
  483. CMP #$AA ;TEST TXS AND PLA
  484. BNE CPERR0
  485. TXA ;A = 55
  486. PHA ;0155 = 55
  487. CPX $155 ;TEST TXA AND PHA
  488. BNE CPERR0
  489. TYA ;A = AA
  490. CMP #$AA ;TEST TYA
  491. BNE CPERR0
  492. TAX ;X = AA
  493. LDA $100,X ;NORM,X - A = 01AA (= 55)
  494. TAY ;Y = 55
  495. CPY #$55 ;TEST NORM,X, TAX, TAY
  496. BNE CPERR0
  497. ;TEST ADDRESSING MODES (NORM,X DONE)
  498. LDA $00,X ;ZP,X - A = 0AA (= AA)
  499. CMP $AA ;ZP, TEST ZP AND ZP,X
  500. BNE CPERR0
  501. CMP #$AA ;TEST ZP AND ZP,X
  502. BNE CPERR0
  503. EOR #$FF ;A = 55
  504. STA $00,Y ;ZP,Y - 055 = 55
  505. CMP $55
  506. BNE CPERR0
  507. CMP $100,Y ;NORM,Y ($155)
  508. BNE CPERR0
  509. CMP $20AB,X ;NORM,Y W/WRAP ($155)
  510. BNE CPERR0
  511. LDA #$20 ;SET UP ADDR, TEST (IND,X), (IND),Y
  512. STA $F1
  513. LDA #$CC
  514. STA $F0 ;($F0) = 020CC (WHICH IS 0CC)
  515. STA ($F0-$AA,X) ;(IND,X) - 0CC = CC
  516. CMP $CC
  517. BNE CPERR0
  518. STA ($F0),Y ;(IND),Y - 02121 = CC
  519. CMP $2121
  520. BNE CPERR0
  521. LDA #$ff & CTCONT ;TEST (IND), ONLY JMP USES
  522. STA $F0
  523. LDA #CTCONT >> 8
  524. STA $F1
  525. JMP ($F0) ;(IND)
  526. JMP CPERR0
  527. CPERR0:
  528. JMP CPERR ;ANOTHER CPERR
  529. CTCONT:
  530. LDA #$55 ;TEST ADDER
  531. CLC
  532. ADC #$55 ;55 + 55 = AA
  533. NOP ;NOP, MAKE SURE IT DOESN'T ALTER STATE
  534. BCS CPERR0
  535. BPL CPERR0
  536. BEQ CPERR0
  537. CMP #$AA
  538. BNE CPERR0
  539. ; SEC
  540. ADC #$55 ;AA + 55 + C = 0 + C
  541. NOP ;NOP, MAKE SURE IT DOESN'T ALTER STATE
  542. BCC CPERR0
  543. BMI CPERR0
  544. BNE CPERR0
  545. ; SEC ;TEST SUBTRACT
  546. SBC #$55 ;0 - 55 = AB - C'
  547. BCS CPERR0
  548. BPL CPERR0
  549. BEQ CPERR0
  550. CMP #$AB
  551. BNE CPERR0
  552. CLC
  553. SBC #$AA ;AB - AA + C' = 0
  554. BCC CPERR0
  555. BMI CPERR0
  556. BNE CPERR0
  557. LDA #$FF ;TEST OUT INCREMENTS AND DECREMENTS
  558. TAX ;X = FF
  559. INX ;TEST INX - X = 0
  560. BNE CPERR1
  561. DEX ;TEST DEX - X = FF
  562. BEQ CPERR1
  563. BPL CPERR1
  564. CPX #$FF
  565. BNE CPERR1
  566. TAY ;Y = FF
  567. INY ;TEST INY - Y = 0
  568. BNE CPERR1
  569. DEY ;TEST DEY - Y = FF
  570. BEQ CPERR1
  571. INY ;Y = 0
  572. BNE CPERR1
  573. STA $F0 ;0F0 = FF
  574. INC $F0 ;TEST INC - 0F0 = 0
  575. BNE CPERR1
  576. CPY $F0
  577. BNE CPERR1
  578. DEC $F0 ;TEST DEC - 0F0 - FF
  579. BEQ CPERR1
  580. CMP $F0
  581. BNE CPERR1
  582. LDA #$AA ;TEST SHIFTS AND ROTATES - 10101010
  583. CLC ;C = 0
  584. ROL ;01010100, C=1
  585. ROL ;10101001, C=0
  586. ROL ;01010010, C=1
  587. CMP #$52 ;01010010
  588. BNE CPERR1
  589. ; SEC ;C = 1
  590. ROR ;10101001, C=0
  591. ROR ;01010100, C=1
  592. ROR ;10101010, C=0
  593. CMP #$AA ;10101010
  594. BEQ CTSHIFT
  595. CPERR1:
  596. JMP CPERR ;ANOTHER CPERR
  597. CTSHIFT:
  598. ASL ;01010100, C=1
  599. BCC CPERR1
  600. ASL ;10101000, C=0
  601. BCS CPERR1
  602. ASL ;01010000, C=1
  603. CMP #$50
  604. BNE CPERR1
  605. EOR #$05 ;01010101
  606. LSR ;00101010, C=1
  607. BCC CPERR1
  608. LSR ;00010101, C=0
  609. BCS CPERR1
  610. LSR ;00001010, C=1
  611. CMP #$0A
  612. BNE CPERR1
  613. LDA #$55 ;TEST LOGICAL OPERATIONS
  614. ORA #$1B ;TEST OR - A = 5F
  615. CMP #$5F
  616. BNE CPERR1
  617. AND #$55 ;A = 55
  618. AND #$1B ;TEST AND - A = 11
  619. CMP #$11
  620. BNE CPERR1
  621. ORA #$55 ;A = 55
  622. EOR #$1B ;TEST EOR
  623. CMP #$4E
  624. BNE CPERR1
  625. JSR CTJSR ;GRAND FINALE, TEST JSR, S = 55
  626. CTJSRRET:
  627. JMP CPERR1 ;NO GOOD IF WE DIDN'T JSR
  628. CTJSR:
  629. TSX ;SEE WHERE STACK IS
  630. CPX #$52
  631. BNE CPERR1
  632. PLA ;GET RETURN ADDRESS
  633. CMP #$ff & (CTJSRRET-1)
  634. BNE CPERR1
  635. PLA
  636. CMP #(CTJSRRET-1)>>8
  637. BNE CPERR1
  638. LDA #(RAMTEST-1)>>8 ;PUT START OF CODE AS RETURN ADDRESS
  639. PHA
  640. LDA #$ff & (RAMTEST-1)
  641. PHA
  642. RTS ;DO IT
  643. JMP CPERR1 ;AGAIN, NO GOOD IF WE DIDN'T DO IT
  644. ; KERNEL.S DLI ROUTINES FOR THE SECURITY ROM
  645. ; OUR DLI HANDLER
  646. DLI:
  647. TXA ;STACK REGISTERS, A ALREADY STACKED
  648. PHA
  649. LDA #$43
  650. STA CTRL
  651. LDX #$0F
  652. LDA FUJICOLR
  653. STA P0C2 ;INITIALIZE COLOR
  654. BIT KNLOFSET ;FIGURE OUT STAGGERING
  655. BVC DFJMP1
  656. BPL DFJMP0
  657. DFLOOP:
  658. STA WSYNC ;CHANGE COLOR ONCE PER THREE LINES
  659. DFJMP0:
  660. STA WSYNC ;SECOND LINE
  661. DFJMP1:
  662. STA WSYNC ;THIRD LINE
  663. SEC ;GET A NEW COLOR FOR THE NEXT LINE
  664. SBC #$10
  665. CMP #$10
  666. BCS DFNEXT
  667. SBC #$0F
  668. DFNEXT:
  669. STA P0C2 ;CHANGE COLORS
  670. DEX
  671. BPL DFLOOP
  672. DLIATARI:
  673. LDX #$40 ;SET UP CTRL FOR ATARI WORDS
  674. STX CTRL
  675. AND #$F0
  676. ORA #$0E
  677. STA P1C3
  678. LDA FUJICOLR
  679. AND #$F0
  680. ORA #$06
  681. STA P1C1
  682. AND #$F0
  683. CLC ;ROTATE BAR COLOR
  684. ADC #$40
  685. BCC DLAJMP
  686. ADC #$0F
  687. DLAJMP:
  688. ORA #$03
  689. STA P1C2
  690. DEC KNLCOUNT ;SEE IF TIME FOR A COLOR CHANGE YET
  691. BPL DLIDONE
  692. LDA KNLOFSET ;SEE IF TIME TO STAGGER, OR CHANGE CLR
  693. ADC #$60
  694. BCC DLIOFSET
  695. LDA FUJICOLR ;ROTATE FUJI COLOR
  696. CLC
  697. ADC #$10
  698. BCC DLJMP0
  699. ADC #$0F
  700. DLJMP0:
  701. STA FUJICOLR
  702. LDA KNLTIME ;RESET TIMER
  703. STA KNLCOUNT
  704. LDA #$00
  705. DLIOFSET:
  706. STA KNLOFSET ;UPDATE KERNAL STAGGERING CONTROL
  707. DLIDONE:
  708. LDA #$02 ;NOTE THAT WE HAVE DONE KERNEL
  709. STA KNLSTATE
  710. PLA ;UNSTACK REGISTERS
  711. TAX
  712. ENDDLI:
  713. PLA
  714. RTI
  715. INFLOOP:
  716. JMP INFLOOP
  717. ; MAIN.S MAIN ROUTINE FOR DECRYPTION CODE
  718. ; CALLED FROM ROUTINES IN TESTS.S
  719. STARTVND:
  720. LDX #STACKPTR
  721. TXS ;SET STACK POINTER
  722. LDA #0 ;ZERO THE TIA REGISTERS OUT
  723. TAX
  724. TIA0LOOP:
  725. STA 1,X
  726. INX
  727. CPX #$2C
  728. BNE TIA0LOOP
  729. LDA #$02 ;BACK INTO MARIA MODE
  730. STA INPTCTRL
  731. ; THIS ROUTINE DROPS OUR CODE INTO RAM
  732. DROPRAM:
  733. LDX #$00 ;X = 0, DROP CODE AND GRAPHICS INTO RAM
  734. STX BACKGRND ;PUT BACKGROUND TO BLACK
  735. DRLOOP:
  736. LDA ROMCD+$000,X ;DROP CODE
  737. STA RAMCODE+$000,X
  738. LDA ROMCD+$100,X
  739. STA RAMCODE+$100,X
  740. LDA ROMCD+$200,X
  741. STA RAMCODE+$200,X
  742. LDA ROMCD+$300,X
  743. STA RAMCODE+$300,X
  744. LDA ROMCD+$400,X
  745. STA RAMCODE+$400,X
  746. LDA ROMDLIST,X ;DROP DISPLAY LISTS
  747. STA RAMDLIST,X
  748. CPX #$00
  749. BMI DRLJMP0
  750. LDA ROMDLL,X ;DROP DLL
  751. STA RAMDLL,X
  752. LDA RMGRP6,X ;DROP GRAPHICS INTO HALF PAGE
  753. STA RAMGRAPH+$000,X
  754. LDA RMGRP5,X
  755. STA RAMGRAPH+$100,X
  756. LDA RMGRP4,X
  757. STA RAMGRAPH+$200,X
  758. LDA RMGRP3,X
  759. STA RAMGRAPH+$300,X
  760. LDA RMGRP2,X
  761. STA RAMGRAPH+$400,X
  762. LDA RMGRP1,X
  763. STA RAMGRAPH+$500,X
  764. DRLJMP0:
  765. DEX
  766. BNE DRLOOP
  767. JMP (CARTTEST-CODEDIF) ;START THE DECRYPTION
  768. ; TURN THE GRAPHICS ON
  769. GRPON:
  770. LDA $FFF9 ;SEE IF DISPLAY IS TO BE STARTED
  771. AND #$04
  772. BEQ STRTCRPT
  773. GRPON2:
  774. LDA #$03 ;SET UP KERNEL
  775. STA KNLCOUNT
  776. STA KNLTIME
  777. LDA #$49 ;SET COLORS
  778. STA FUJICOLR
  779. LDA #$66
  780. STA P1C1
  781. LDA #$56
  782. STA P1C2
  783. LDA #$2E
  784. STA P1C3
  785. LDA #$ff & DLI ;SET DLI
  786. STA DLIADDR
  787. LDA #DLI >> 8
  788. STA DLIADDR+1
  789. SCRNOF:
  790. BIT MSTAT ;IS VBLANK ENDED YET?
  791. BMI SCRNOF
  792. SCRNON:
  793. BIT MSTAT ;IS VBLANK STARTED YET?
  794. BPL SCRNON
  795. LDA #$ff & RAMDLL
  796. STA DPPL ;SET DPPL AND DPPH TO DLLIST
  797. LDA #RAMDLL >> 8
  798. STA DPPH
  799. LDA #$43
  800. STA CTRL ;TURN GRAPHICS ON
  801. STRTCRPT:
  802. RTS
  803. ; DISPLAY LISTS
  804. ROMDLIST:
  805. .dc.b $ff & (RAMGRAPH),$1F,RAMGRAPH >> 8,$BB,$00,$00
  806. RDL5BYTE:
  807. .dc.b $ff & (RAMGRAPH),$40,RAMGRAPH >> 8,$1F,$BB,$00,$00
  808. RDLFJ1:
  809. .dc.b $ff & (RAMGRAPH+RMFUJ1-ROMGRAPH),$1C,RAMGRAPH >> 8,$4A,$00,$00
  810. RDLFJ2:
  811. .dc.b $ff & (RAMGRAPH+RMFUJ2-ROMGRAPH),$1C,RAMGRAPH >> 8,$4A,$00,$00
  812. RDLFJ3:
  813. .dc.b $ff & (RAMGRAPH+RMFUJ3-ROMGRAPH),$1C,RAMGRAPH >> 8,$48,$00,$00
  814. RDLFJ4:
  815. .dc.b $ff & (RAMGRAPH+RMFUJ4-ROMGRAPH),$1B,RAMGRAPH >> 8,$46,$00,$00
  816. RDLFJ5:
  817. .dc.b $ff & (RAMGRAPH+RMFUJ5-ROMGRAPH),$19,RAMGRAPH >> 8,$42,$00,$00
  818. RDLFJ6:
  819. .dc.b $ff & (RAMGRAPH+RMFUJ6-ROMGRAPH),$17,RAMGRAPH >> 8,$3E,$00,$00
  820. RDLFJ7:
  821. .dc.b $ff & (RAMGRAPH+RMFUJ7-ROMGRAPH),$17,RAMGRAPH >> 8,$3E,$00,$00
  822. RDLRC:
  823. .dc.b $ff & (RAMGRAPH+ROMSTRIP-RMGRP3),$2C,(RAMGRAPH+$300)>>8,$00
  824. .dc.b $ff & (RAMGRAPH+ROMSTRIP-RMGRP3),$2C,(RAMGRAPH+$300)>>8,$50
  825. .dc.b $00,$00
  826. RDLRCL:
  827. .dc.b $ff & (RAMGRAPH+ROMSTRIP-RMGRP3),$2C,(RAMGRAPH+$400)>>8,$00
  828. .dc.b $ff & (RAMGRAPH+ROMSTRIP-RMGRP3),$2C,(RAMGRAPH+$400)>>8,$50
  829. .dc.b $00,$00
  830. RDLN01:
  831. .dc.b $ff & (RAMGRAPH+RMLIN1-ROMGRAPH),$2D,(RAMGRAPH+$000)>>8,$28
  832. .dc.b $00,$00
  833. RDLN02:
  834. .dc.b $ff & (RAMGRAPH+RMLIN2-ROMGRAPH),$2D,(RAMGRAPH+$000)>>8,$28
  835. .dc.b $00,$00
  836. RDLN03:
  837. .dc.b $ff & (RAMGRAPH+RMLIN3-ROMGRAPH),$2D,(RAMGRAPH+$000)>>8,$28
  838. .dc.b $00,$00
  839. RDLN04:
  840. .dc.b $ff & (RAMGRAPH+RMLIN4-ROMGRAPH),$2D,(RAMGRAPH+$000)>>8,$28
  841. .dc.b $00,$00
  842. RDLN05:
  843. .dc.b $ff & (RAMGRAPH+RMLIN1-ROMGRAPH),$2D,(RAMGRAPH+$100)>>8,$28
  844. .dc.b $00,$00
  845. RDLN06:
  846. .dc.b $ff & (RAMGRAPH+RMLIN2-ROMGRAPH),$2D,(RAMGRAPH+$100)>>8,$28
  847. .dc.b $00,$00
  848. RDLN07:
  849. .dc.b $ff & (RAMGRAPH+RMLIN3-ROMGRAPH),$2D,(RAMGRAPH+$100)>>8,$28
  850. .dc.b $00,$00
  851. RDLN08:
  852. .dc.b $ff & (RAMGRAPH+RMLIN4-ROMGRAPH),$2D,(RAMGRAPH+$100)>>8,$28
  853. .dc.b $00,$00
  854. RDLN09:
  855. .dc.b $ff & (RAMGRAPH+RMLIN1-ROMGRAPH),$2D,(RAMGRAPH+$200)>>8,$28
  856. .dc.b $00,$00
  857. RDLN10:
  858. .dc.b $ff & (RAMGRAPH+RMLIN2-ROMGRAPH),$2D,(RAMGRAPH+$200)>>8,$28
  859. .dc.b $00,$00
  860. RDLN11:
  861. .dc.b $ff & (RAMGRAPH+RMLIN3-ROMGRAPH),$2D,(RAMGRAPH+$200)>>8,$28
  862. .dc.b $00,$00
  863. ; DISPLAY LIST LIST
  864. ROMDLL:
  865. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+RDL5BYTE-ROMDLIST)
  866. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  867. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  868. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  869. dc.b $03,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  870. dc.b $85,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ1-ROMDLIST) ;FUJI-A
  871. dc.b $05,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ2-ROMDLIST)
  872. dc.b $05,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ3-ROMDLIST)
  873. dc.b $05,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ4-ROMDLIST)
  874. dc.b $05,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ5-ROMDLIST)
  875. dc.b $05,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ6-ROMDLIST)
  876. dc.b $05,RAMDLIST >> 8,$ff & (RAMDLIST+RDLFJ7-ROMDLIST)
  877. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00) ;CENTER SPACE
  878. dc.b $01,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  879. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN01-ROMDLIST)
  880. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  881. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN02-ROMDLIST)
  882. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  883. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN03-ROMDLIST)
  884. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  885. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN04-ROMDLIST)
  886. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  887. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN05-ROMDLIST)
  888. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  889. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN06-ROMDLIST)
  890. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  891. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN07-ROMDLIST)
  892. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  893. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN08-ROMDLIST)
  894. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  895. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN09-ROMDLIST)
  896. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  897. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN10-ROMDLIST)
  898. dc.b $02,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRC-ROMDLIST)
  899. dc.b $00,RAMDLIST >> 8,$ff & (RAMDLIST+RDLN11-ROMDLIST)
  900. dc.b $01,RAMDLIST >> 8,$ff & (RAMDLIST+RDLRCL-ROMDLIST)
  901. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00) ;TRAILING SPACE
  902. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  903. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  904. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  905. dc.b $0F,RAMDLIST >> 8,$ff & (RAMDLIST+$00)
  906. ; ROM GRAPHICS FOR THE FUJI-A AND WORDS
  907. ROMGRAPH:
  908. RMGRP6:
  909. dc.b $00 ;NULL INFO
  910. RMFUJ1:
  911. dc.b $7C,$7F,$8F,$80 ;LINE 6
  912. RMFUJ2:
  913. dc.b $FC,$7F,$8F,$C0
  914. RMFUJ3:
  915. dc.b $1F,$87,$F8,$7E
  916. RMFUJ4:
  917. dc.b $0F,$E0,$7F,$81,$FC
  918. RMFUJ5:
  919. dc.b $07,$FF,$80,$7F,$80,$7F,$F8
  920. RMFUJ6:
  921. dc.b $1F,$FF,$F0,$00,$7F,$80,$03,$FF,$FE
  922. RMFUJ7:
  923. dc.b $1F,$00,$00,$00,$7F,$80,$00,$00,$3E
  924. RMLIN1:
  925. dc.b $00,$00,$0C,$00,$3F,$FF,$FF,$FF ;LINE 1 OF ATARI
  926. dc.b $F0,$00,$C0,$00,$00,$3F,$FF,$FF
  927. dc.b $00,$03,$FC
  928. RMLIN2:
  929. dc.b $00,$00,$3F,$00,$3F,$FF,$FF,$FF ;LINE 2 OF ATARI
  930. dc.b $F0,$03,$F0,$00,$00,$3F,$FF,$FF
  931. dc.b $FC,$03,$FC
  932. RMLIN3:
  933. dc.b $00,$00,$FF,$C0,$00,$03,$FF,$00 ;LINE 3 OF ATARI
  934. dc.b $00,$0F,$FC,$00,$00,$3F,$F0,$03
  935. dc.b $FF,$C3,$FC
  936. RMLIN4:
  937. dc.b $00,$03,$FF,$F0,$00,$03,$FF,$00 ;LINE 4 OF ATARI
  938. dc.b $00,$3F,$FF,$00,$00,$3F,$F0,$00
  939. dc.b $3F,$C3,$FC
  940. RMGRP5:
  941. dc.b $00 ;NULL INFO
  942. dc.b $7C,$7F,$8F,$80 ;LINE 5
  943. dc.b $7C,$7F,$8F,$80
  944. dc.b $1F,$87,$F8,$7E
  945. dc.b $0F,$F0,$7F,$83,$FC
  946. dc.b $01,$FF,$80,$7F,$80,$7F,$E0
  947. dc.b $1F,$FF,$F8,$00,$7F,$80,$07,$FF,$FE
  948. dc.b $1F,$F0,$00,$00,$7F,$80,$00,$03,$FE
  949. dc.b $00,$0F,$F3,$FC,$00,$03,$FF,$00 ;LINE 5 OF ATARI
  950. dc.b $00,$FF,$3F,$C0,$00,$3F,$F0,$00
  951. dc.b $FF,$C3,$FC
  952. dc.b $00,$3F,$C0,$FF,$00,$03,$FF,$00 ;LINE 6 OF ATARI
  953. dc.b $03,$FC,$0F,$F0,$00,$3F,$F0,$3F
  954. dc.b $FC,$03,$FC
  955. dc.b $00,$FF,$00,$3F,$C0,$03,$FF,$00 ;LINE 7 OF ATARI
  956. dc.b $0F,$F0,$03,$FC,$00,$3F,$F0,$FF
  957. dc.b $C0,$03,$FC
  958. dc.b $03,$FF,$FF,$FF,$F0,$03,$FF,$00 ;LINE 8 OF ATARI
  959. dc.b $3F,$FF,$FF,$FF,$00,$3F,$F0,$3F
  960. dc.b $F0,$03,$FC
  961. RMGRP4:
  962. dc.b $00 ;NULL INFO
  963. dc.b $7C,$7F,$8F,$80 ;LINE 4
  964. dc.b $7C,$7F,$8F,$80
  965. dc.b $1F,$87,$F8,$7E
  966. dc.b $07,$F0,$7F,$83,$F8
  967. dc.b $00,$FF,$C0,$7F,$80,$FF,$C0
  968. dc.b $1F,$FF,$FC,$00,$7F,$80,$0F,$FF,$FE
  969. dc.b $1F,$FC,$00,$00,$7F,$80,$00,$0F,$FE
  970. dc.b $0F,$FF,$FF,$FF,$FC,$03,$FF,$00 ;LINE 9 OF ATARI
  971. dc.b $FF,$FF,$FF,$FF,$C0,$3F,$F0,$0F
  972. dc.b $FC,$03,$FC
  973. dc.b $3F,$F0,$00,$03,$FF,$03,$FF,$03 ;LINE 10 OF ATARI
  974. dc.b $FF,$00,$00,$3F,$F0,$3F,$F0,$03
  975. dc.b $FF,$03,$FC
  976. dc.b $FF,$C0,$00,$00,$FF,$C3,$FF,$0F ;LINE 11 OF ATARI
  977. dc.b $FC,$00,$00,$0F,$FC,$3F,$F0,$00
  978. dc.b $FF,$C3,$FC
  979. RMGRP3:
  980. dc.b $00 ;NULL INFO
  981. dc.b $7C,$7F,$8F,$80 ;LINE 3
  982. dc.b $7C,$7F,$8F,$80
  983. dc.b $0F,$87,$F8,$7C
  984. dc.b $07,$F0,$7F,$83,$F8
  985. dc.b $00,$7F,$C0,$7F,$80,$FF,$80
  986. dc.b $1F,$FF,$FE,$00,$7F,$80,$1F,$FF,$FE
  987. dc.b $1F,$FF,$00,$00,$7F,$80,$00,$3F,$FE
  988. ROMSTRIP:
  989. dc.b $55,$55,$55,$55,$55,$55,$55,$55 ;RACING STRIPE
  990. dc.b $55,$55,$55,$55,$55,$55,$55,$55
  991. dc.b $55,$55,$55,$55
  992. RMGRP2:
  993. dc.b $00 ;NULL INFO
  994. dc.b $7C,$7F,$8F,$80 ;LINE 2
  995. dc.b $7C,$7F,$8F,$80
  996. dc.b $0F,$C7,$F8,$FC
  997. dc.b $03,$F0,$7F,$83,$F0
  998. dc.b $00,$3F,$E0,$7F,$81,$FF,$00
  999. dc.b $01,$FF,$FE,$00,$7F,$80,$1F,$FF,$E0
  1000. dc.b $1F,$FF,$C0,$00,$7F,$80,$00,$FF,$FE
  1001. dc.b $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA ;RACING STRIPE
  1002. dc.b $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
  1003. dc.b $AA,$AA,$AA,$AA
  1004. RMGRP1:
  1005. dc.b $00 ;NULL INFO
  1006. dc.b $7C,$7F,$8F,$80 ;LINE 1
  1007. dc.b $7C,$7F,$8F,$80
  1008. dc.b $0F,$C7,$F8,$FC
  1009. dc.b $03,$F8,$7F,$87,$F0
  1010. dc.b $00,$1F,$E0,$7F,$81,$FE,$00
  1011. dc.b $00,$1F,$FF,$00,$7F,$80,$3F,$FE,$00
  1012. dc.b $1F,$FF,$E0,$00,$7F,$80,$01,$FF,$FE
  1013. dc.b $55,$55,$55,$55,$55,$55,$55,$55 ;RACING STRIPE
  1014. dc.b $55,$55,$55,$55,$55,$55,$55,$55
  1015. dc.b $55,$55,$55,$55
  1016. ; NUMBERS.S NUMBERS FOR THE ENCRYPTION
  1017. ; THIS IS A MASK APPLIED TO THE HI BYTE OF THE CHECKSUM TO MAKE SURE IT IS
  1018. ; LESS THAN N
  1019. NMASK = $07
  1020. ; N = P*Q, THE BASIC MODULO OF DECRYPTION
  1021. NLEN = $77
  1022. N1:
  1023. .dc.b $09,$CA,$C9,$C6,$B4,$12,$08,$1B
  1024. .dc.b $60,$58,$81,$4B,$86,$01,$D8,$BF
  1025. .dc.b $D9,$25,$A0,$7B,$DC,$32,$79,$84
  1026. .dc.b $3B,$7C,$BC,$2F,$E2,$E2,$FA,$8D
  1027. .dc.b $0A,$00,$3B,$C5,$EC,$AF,$2D,$8A
  1028. .dc.b $CD,$06,$93,$6A,$A5,$14,$46,$77
  1029. .dc.b $C4,$6A,$B2,$53,$36,$EF,$8C,$CE
  1030. .dc.b $0C,$A2,$68,$71,$D3,$73,$E8,$F7
  1031. .dc.b $6D,$06,$B5,$20,$EF,$23,$47,$0C
  1032. .dc.b $51,$55,$C8,$FE,$F4,$58,$C4,$3F
  1033. .dc.b $20,$A7,$67,$38,$B0,$76,$E2,$C4
  1034. .dc.b $D8,$05,$63,$F8,$3C,$58,$3B,$2D
  1035. .dc.b $22,$CC,$88,$B3,$71,$8F,$1D,$80
  1036. .dc.b $0A,$87,$BD,$A1,$59,$23,$E9,$70
  1037. .dc.b $E2,$D3,$EC,$46,$68,$80,$42,$39
  1038. ; END.S END OF CODE
  1039. NROM2:
  1040. NOP
  1041. .org $FFEE
  1042. .ds.b 'GCC(C)1984'
  1043. .org $FFF8
  1044. ; .dc.b $F0 ;CHECKSUM, MAKES EOR CHECKSUM ZERO
  1045. .dc.b $2D ;CHECKSUM, MAKES EOR CHECKSUM ZERO
  1046. .dc.b $F7 ;CART STARTS AT 0F000 - 7 JUST A FLAG
  1047. .dc.w INTDLI ;INTERNAL GAME DLI HANDLER
  1048. .dc.w MAIN
  1049. .dc.w IRQINT