; NOTE: this is from a pre-release version dated 1984-04-23 at: ; http://archives.atarimuseum.com/archives/pdf/videogames/7800/7800_os_source_code.pdf ; ; This does NOT match up with the "offical" version of the ROM! ; ; Places where code was unreadable (and not otherwise positively identifiable) ; are marked with "~~~", and chopped off ends of lines are marked with "...". ; If someone has access to a more readable copy, it would be nice to find out ; what the missing parts are. ; ; Depending on your assembler, at the very minimum, you will have to substitute ; "H(" -> ">(" and "L(" -> "<(", and probably "FATAL$" -> "FATAL" too, to get ; this to assemble. ; = 00FF STACKPTR EQU $FF ; could not find this in the source listing scan ;===================================================================== * MARIAOS MARIA DATA LOCATION DEFINITIONS * NOTE THE FOLLOWING WIERD THINGS ABOUT THE RAM: * $00-$3F <=> $100-$13F * $80-$FF <=> $180-$1FF * $40-$FF <=> $2040-$20FF * $140-$1FF <=> $2140-$21FF * TIA REGISTERS = 0001 INPTCTRL EQU $01 ;INPUT CONTROL = 000C INPT4 EQU $0C ;BITS 7 PLAYER 0 BUTTO... = 000D INPT5 EQU $0D ;BITS 7 PLAYER 1 BUTTO... = 0015 AUDC0 EQU $15 ;BITS 3210 AUDIO CONTROL ... = 0016 AUDC1 EQU $16 ;BITS 3210 AUDIO CONTROL ... = 0017 AUDF0 EQU $17 ;BITS 43210 AUDIO FREQUENC... = 0018 AUDF1 EQU $18 ;BITS 43210 AUDIO FREQUENC... = 0019 AUDV0 EQU $19 ;BITS 3210 AUDIO VOLUME 0... = 001A AUDV1 EQU $1A ;BITS 3210 AUDIO VOLUME 1... * MARIA REGISTERS = 0020 BACKGRND EQU $20 ;BACKGROUND COLOR = 0021 P0C1 EQU $21 ;PALETTE 0, COLOR 1 = 0022 P0C2 EQU $22 ;PALETTE 0, COLOR 2 = 0023 P0C3 EQU $23 ;PALETTE 0, COLOR 3 = 0024 WSYNC EQU $24 ;FAST MARIA WSYNC STROBE = 0025 P1C1 EQU $25 ;PALETTE 1, COLOR 1 = 0026 P1C2 EQU $26 ;PALETTE 1, COLOR 2 = 0027 P1C3 EQU $27 ;PALETTE 1, COLOR 3 = 0028 MSTAT EQU $28 ;BIT 6 IN VBLANK, BIT ? IN D... = 0029 P2C1 EQU $29 ;PALETTE 2, COLOR 1 = 002A P2C2 EQU $2A ;PALETTE 2, COLOR 2 = 002B P2C3 EQU $2B ;PALETTE 2, COLOR 3 = 002C DPPH EQU $2C ;DISPLAY LIST POINTER HIGH = 002D P3C1 EQU $2D ;PALETTE 3, COLOR 1 = 002E P3C2 EQU $2E ;PALETTE 3, COLOR 2 = 002F P3C3 EQU $2F ;PALETTE 3, COLOR 3 = 0030 DPPL EQU $30 ;DISPLAY LIST POINTER LOW = 0031 P4C1 EQU $31 ;PALETTE 4, COLOR 1 = 0032 P4C2 EQU $32 ;PALETTE 4, COLOR 2 = 0033 P4C3 EQU $33 ;PALETTE 4, COLOR 3 = 0034 CHARBASE EQU $34 ;CHARACTER MODE HIGH POINTER = 0035 P5C1 EQU $35 ;PALETTE 5, COLOR 1 = 0036 P5C2 EQU $36 ;PALETTE 5, COLOR 2 = 0037 P5C3 EQU $37 ;PALETTE 5, COLOR 3 = 0038 OFFSET EQU $38 ;NOT USED ****** = 0039 P6C1 EQU $39 ;PALETTE 6, COLOR 1 = 003A P6C2 EQU $3A ;PALETTE 6, COLOR 2 = 003B P6C3 EQU $3B ;PALETTE 6, COLOR 3 = 003C CTRL EQU $3C ;BIT 7 CHARACTER WIDTH, BIT 6... = 003D P7C1 EQU $3D ;PALETTE 7, COLOR 1 = 003E P7C2 EQU $3E ;PALETTE 7, COLOR 2 = 003F P7C3 EQU $3F ;PALETTE 7, COLOR 3 * FREE RAM - $40-$FF * ALIASED RAM - $100-$13F * STACK - $140-$1FF * 6532 TIMERS AND PORTS = 0280 SWCHA EQU $280 ;JOYSTICKS * BIT 7 PLAYER 0 EAST IF CLEAR * BIT 6 WEST * BIT 5 SOUTH * BIT 4 NORTH * BIT 3 PLAYER 1 EAST IF CLEAR * BIT 2 WEST * BIT 1 SOUTH * BIT 0 NORTH = 0282 SWCHB EQU $282 ;CONSOLE SWITCHES * BIT 7 PLAYER 1 DIFFICULTY A IF SET, B IF CLEAR * BIT 6 PLAYER 2 DIFFICULTY A IF SET, B IF CLEAR * BIT 3 BLACK AND WHITE VS COLOR - COLOR WHEN SET * BIT 1 GAME SELECT - CLEAR WHEN PRESSED * BIT 0 GAME RESET - CLEAR WHEN PRESSED = 0281 CTLSWA EQU $281 = 0283 CTLSWB EQU $283 = 0284 INTIM EQU $284 ;INTERVAL TIMER IN = 0295 TIM8T EQU $295 ;TIMER 8T WRITE OUT = 0296 TIM64T EQU $296 ;TIMER 64T WRITE OUT = 029E TIM64TI EQU $29E ;INTERRUPT TIMER 64T * ENDEF.S ENCRYPTION SYMBOL DEFINITIONS * ADDRESS DEFINITIONS * PAGE 0 - $080-$0FF ($40-$7F TAKEN BY A REGISTER) = 0000 TEST0 EQU $00 ;TEST DATA FOR CPU TEST = 0001 TEST1 EQU $01 = 0002 TESTW0 EQU $02 ;2 BYTES = 0004 TESTW1 EQU $04 ;2 BYTES = 0000 TEMP0 EQU $00 ;SCRATCH DATA FOR PROGRAM USE... = 0001 TEMP1 EQU $01 ;MORE SCRATCH DATA = 0002 TEMP2 EQU $02 ;MORE SCRATCH DATA = 0003 TEMP3 EQU $03 ;MORE SCRATCH DATA = 0004 TEMP4 EQU $04 ;MORE SCRATCH DATA = 0005 TEMP5 EQU $05 ;MORE SCRATCH DATA = 00E0 STARTA EQU $E0 ;WHERE ACCUMULATOR STARTS = 00E1 OFFSETA EQU $E1 ;OFFSET INTO ACCUMULATOR = 00E2 OFFSETR EQU $E2 ;OFFSET INTO A REGISTER = 00E3 SIZEA EQU $E3 ;SIZE OF ACCUMULATOR = 00E4 SIZER0 EQU $E4 ;SIZE OF REGISTER 0 = 00E5 SIZER1 EQU $E5 ;SIZE OF REGISTER 1 = 00E6 SIZER3 EQU $E6 ;SIZE OF REGISTER 3 = 00E7 SIZER5 EQU $E7 ;SIZE OF REGISTER 5 = 00EE CARTBOTM EQU $EE ;BOTTOM OF CARTRIDGE ADDRESS = 00EF FUJICOLR EQU $EF ;STARTING COLOR FOR FUJI-A = 00F0 KNLSTATE EQU $F0 ;HOW MANY MORE ITERATIONS T... = 00F1 KNLCOUNT EQU $F1 ;TIMER FOR CHANGING FUJI COL... = 00F2 KNLTIME EQU $F2 ;TIME THAT COUNT IS GOOD FOR... = 00F3 KNLOFSET EQU $F3 ;HOW STAGGERED THE FUJI COLO... = 00F4 DLIADDR EQU $F4 ;SAME ADDRESS AS IN PACK-IN ... * HIGH RAM - $1800-$27FF = 1800 ACC EQU $1800 ;256 BYTE ACCUMULATOR = 1900 REG0 EQU $1900 ;128 BYTE REGISTER = 1A00 REG2 EQU $1A00 ;128 BYTE REGISTER = 1B00 REG4 EQU $1B00 ;128 BYTE REGISTER = 1C00 REG6 EQU $1C00 ;128 BYTE REGISTER = 1D00 REG8 EQU $1D00 ;128 BYTE REGISTER = 1E00 REG10 EQU $1E00 ;128 BYTE REGISTER = 1F00 REG12 EQU $1F00 ;128 BYTE REGISTER = 1984 RAMGRAPH EQU $1984 ;GRAHPICS IN RAM, $19XX-$1EXX = 1F84 RAMDLL EQU $1F84 ;DLL = 2000 REG1 EQU $2000 ;128 BYTE REGISTER * ***** HOLE FROM $2040 TO $20FF - SHADOWED IN PAGE 0 ***** = 2100 REG14 EQU $2100 ;128 BYTE REGISTER (OVERLA~... * ***** HOLE FROM $2140 TO $21FF SHADOWED IN PAGE 1 ***** * DISPLAY LIST RAM = 2200 RAMDLIST EQU $2200 ;~~~ FOR DLISTS FOR WORDS AN... * MEMORY LOCATIONS FOR CO~~~~~~~~~~~~~~~~~~~~~~~~~~~ = F400 ROMCODE EQU $F400 ;~~~~~~~~~~~~~~CODE LIVES = F880 ROMCODE2 EQU $F880 ;~~~~~~~~~ DROPPED CODE = 2300 RAMCODE EQU $2300 ;~~~~~~~~~~~~~~FOR CODE = D100 CODEDIF EQU $D100 ;DIFFERENCE BETWEEN OLD AND ... * ENCRYPTION CONST~~~~~~~~~~~~~~~~~~~ ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;~~~~~~~~~~~ IS ON~~~~~~~~~ = 00FE REGION EQU $FE ;MASK FOR COUNTRY = 0004 RANDBYTE EQU $04 ;RANDOM BYTE IN CHECKSUM *NTGAME EQU $D804 ;INTERNAL GAME ROM START LOCA... *NTDLI EQU $D800 ;INTERNAL GAME DLI HANDLER = F000 INTDLI EQU $F000 ;OUR DLI * SCAFFOLD.S * THIS DOES THE DISPATCHING WHENEVER THE PACK-IN ISN'T AROUND F000 ORG INTDLI F000 48 PHA F001 6CF400 JMP (DLIADDR) * CART.S ROUTINES DEALING WITH CHECKING THE CARTRIDGE OUT F400 ORG ROMCODE F400 4CB926 NOCART JMP LOCK2600-CODEDIF ;NO INTERNAL CART *OCART LDA #$13 ;TURN SECURITY ROM BACK ON - ... * STA INPTCTRL * JSR GRAPHON2 * * LDX #$80 *OCTLOOP LDA KNLSTATE ;WAIT A WHILE WITH THE DISPLA... * BNE NOCTLOOP * LDA #$00 * STA KNLSTATE * DEX * BNE NOCTLOOP * * JMP INTGAME ;JUMP TO INTERNAL GAME F403 4CB926 BADCART JMP LOCK2600-CODEDIF ;CART DOES NOT CHECK, DO 2600... F406 A916 CARTTEST LDA #$16 ;TURN EXTERNAL CART ON F408 8501 STA INPTCTRL F40A A0FF LDY #$FF F40C A27F LDX #$7F ;SEE IF A CART PLUGGED IN F40E BD00FE CTSTLOOP LDA $FE00,X F411 D980FD CMP $FD80,Y F414 D0EA BNE NOCART F416 88 DEY F417 CA DEX F418 10F4 BPL CTSTLOOP ;X LEFT = FF, Y LEFT = 7F F41A ADFCFF LDA $FFFC ;SEE IF START AT FFFF F41D 2DFDFF AND $FFFD F420 C9FF CMP #$FF F422 F0DC BEQ NOCART ;ALL LINES DRAWN HIGH, NO CA... F424 ADFCFF LDA $FFFC ;SEE IF START AT 0000 F427 0DFDFF ORA $FFFD F42A F0D4 BEQ NOCART ;ALL LINES DRAWN LOW, NO CAR... F42C ADF8FF LDA $FFF8 ;CHECK FOR REGION VERIFICATI... F42F 09FE ORA #REGION F431 C9FF CMP #$FF F433 D0CE BNE BADCART F435 ADF9FF LDA $FFF9 ;SEE IF MARIA SIGNATURE EXIS... F438 290B AND #$0B ;$07 OR $03 VALID F43A C903 CMP #$03 F43C D0C5 BNE BADCART F43E ADF9FF LDA $FFF9 ;GET BOTTOM OF CART ADDRESS F441 29F0 AND #$F0 F443 85EE STA CARTBOTM F445 8DFD23 STA CSCMOD0+2-CODEDIF ;SET UP FOR START OF CHECKSU... F448 C940 CMP #$40 ;MAKE SURE IT IS NOT TOO LOW F44A 90B7 BCC BADCART ; SEC F44C E901 SBC #$01 ;MAKE SURE WE GET FENCEPOST ... F44E CDFDFF CMP $FFFD ;MAKE SURE START VECTOR WITH... F451 B0B0 BCS BADCART F453 202D25 JSR DECRYPT-CODEDIF ;GET THE DECRYPTED CHECKSUM F456 A900 LDA #$00 F458 85F0 STA KNLSTATE ;GET OUR STATE READY WITH DL... F45A 201224 JSR CSCHKDLI-CODEDIF ;CHECK FOR COMING DLI F45D A916 LDA #$16 ;GENERATE THE CHECKSUM FOR C... F45F 8501 STA INPTCTRL ;FIRST, TURN CART BACK ON F461 A200 LDX #$00 F463 8A TXA F464 9D0018 CS0LOOP STA ACC,X ;ZERO OUT THE CHECKSUM ACC F467 CA DEX F468 D0FA BNE CS0LOOP F46A 48 PHA ;PUT 0 ON STACK TO INIT CSCH... F46B A07F LDY #$7F ;Y STARTS = 7F F46D B900FF CSALOOP LDA $FF00,Y ;GET HI PAGE INTO ACC F470 990018 STA ACC,Y ;$FF00-$FF7F AND $FFF9-$FFFF F473 88 DEY F474 C0F8 CPY #$F8 F476 D0F5 BNE CSALOOP F478 A925 LDA #<(S-CODEDIF) ;SET UP FOR THE RETURN F47A 8D0024 STA CSCMOD1+1-CODEDIF F47D A924 LDA #>(S-CODEDIF) F47F 8D0124 STA CSCMOD1+2-CODEDIF F482 201224 CSCSLOOP JSR CSCHKDLI-CODEDIF ;CHECK FOR COMING DLI F485 68 PLA ;SAVE LOWER STATE F486 20F623 JSR CSCHECK-CODEDIF ;MARCH UP THE CODE F489 48 PHA ;PUT BACK LOWER STATE F48A EEFD23 INC CSCMOD0+2-CODEDIF F48D ADFD23 LDA CSCMOD0+2-CODEDIF F490 C9FF CMP #$FF F492 D0EE BNE CSCSLOOP F494 201224 JSR CSCHKDLI-CODEDIF ;CHECK FOR COMING DLI F497 200924 JSR CSROTATE-CODEDIF ;ROTATE THE BITS AROUND A BIT F49A 200924 JSR CSROTATE-CODEDIF ;ROTATE THE BITS AROUND A BIT F49D A92D LDA #<(T-CODEDIF) ;SET UP FOR THE RETURN MARCH F49F 8D0024 STA CSCMOD1+1-CODEDIF F4A2 A924 LDA #>(T-CODEDIF) F4A4 8D0124 STA CSCMOD1+2-CODEDIF F4A7 CEFD23 DEC CSCMOD0+2-CODEDIF F4AA 201224 CSCTLOOP JSR CSCHKDLI-CODEDIF ;CHECK FOR COMING DLI F4AD 68 PLA ;SAVE LOWER STATE F4AE 20F623 JSR CSCHECK-CODEDIF ;MARCH UP THE CODE F4B1 48 PHA ;PUT BACK LOWER STATE F4B2 CEFD23 DEC CSCMOD0+2-CODEDIF F4B5 ADFD23 LDA CSCMOD0+2-CODEDIF F4B8 C5EE CMP CARTBOTM F4BA B0EE BCS CSCTLOOP F4BC A960 LDA #$60 ;DONE WITH DECRYPT, TURN OF G... F4BE 853C STA CTRL F4C0 A277 LDX #NLEN ;'FOLD' THE CHECKSUM TOGETHER F4C2 BD0018 CSCFLOOP LDA ACC,X ;AND MOVE IT TO REG2 F4C5 5D5018 EOR ACC+$50,X F4C8 5D8818 EOR ACC+$FF-NLEN,X F4CB 9D001A STA REG2,X F4CE CA DEX F4CF 10F1 BPL CSCFLOOP F4D1 AD001A LDA REG2 ;MAKE SURE IT IS LESS THAN N F4D4 2907 AND #NMASK F4D6 8D001A STA REG2 F4D9 A900 LDA #$00 ;GET RID OF RANDOM BYTE F4DB A204 LDX #RANDBYTE F4DD 9D001A STA REG2,X F4E0 9D0020 STA REG1,X F4E3 A277 LDX #NLEN ;SEE IF THEY CHECK!! F4E5 BD0020 CSCCLOOP LDA REG1,X ;THE DECRYPTED SIGNATURE F4E8 DD001A CMP REG2,X ;THE COMPUTED CHECKSUM F4EB D006 BNE NOCHECK F4ED CA DEX F4EE 10F5 BPL CSCCLOOP F4F0 4CB026 JMP SETMARIA-CODEDIF ;EVERYTHING CHECKS!!!!! F4F3 4CB926 NOCHECK JMP LOCK2600-CODEDIF ;DECRYPT FAILED, PUT HIM IN 2... F4F6 A200 CSCHECK LDX #$00 ;ROUTINE TO CHECKSUM ONE PAGE F4F8 7D0018 CSCLOOP ADC ACC,X F4FB 7D00FF CSCMOD0 ADC $FF00,X F4FE A8 TAY F4FF B9D52D CSCMOD1 LDA N-CODEDIF,Y F502 9D0018 STA ACC,X F505 E8 INX F506 D0F0 BNE CSCLOOP F508 60 RTS F509 A200 CSROTATE LDX #$00 ;ROUTINE TO ROTATE CHECKSUM A... F50B 3E0018 CSRLOOP ROL ACC,X F50E E8 INX F50F D0FA BNE CSRLOOP F511 60 RTS F512 08 CSCHKDLI PHP ;SAVE PROCESSOR STATUS F513 C6F0 DEC KNLSTATE ;SEE IF DLI ABOUT TO HAPPEN F515 100C BPL CSCDOUT ;COUNT DOWN OUR TIMER F517 A902 LDA #$02 ;KERNEL NOT HAPPENED, BUT ABO... F519 8501 STA INPTCTRL ;DISABLE CART, TURN ON SECURI... F51B A5F0 CSCDLOOP LDA KNLSTATE ;AND THEN WAIT FOR THE KERNEL... F51D 30FC BMI CSCDLOOP F51F A916 LDA #$16 ;DISABLE SECURITY ROM, TURN O... F521 8501 STA INPTCTRL F523 28 CSCDOUT PLP ;RESTORE PROCESSOR STATUS F524 60 RTS * THESE TABLES ARE USED FOR NON-LINEAR ~~~~~~~~~~~ F525 C765ABCAEE S DB $C7,$65,$AB,$CA,$EE,$F7,$83,$09 F52A F78309 F52D E1D0926762 T DB $E1,$D0,$92,$67,$62,$B6,$72,$55 F532 B67255 F535 8E91DCC581 DB $8E,$91,$DC,$C5,$81,$BE,$78,$20 F53A BE7820 F53D 59B7E63D06 DB $59,$B7,$E6,$3D,$06,$45,$AF,$C8 F542 45AFC8 F545 083138D1FB DB $08,$31,$38,$D1,$FB,$73,$84,$A9 F54A 7384A9 F54D 17FC3487A3 DB $17,$FC,$34,$87,$A3,$94,$FA,$90 F552 94FA90 F555 B8EDCE3B5B DB $B8,$ED,$CE,$3B,$5B,$0A,$43,$D9 F55A 0A43D9 F55D F35382B30D DB $F3,$53,$82,$B3,$0D,$6D,$5A,$60 F562 6D5A60 F565 9D51A7B911 DB $9D,$51,$A7,$B9,$11,$10,$BC,$E4 F56A 10BCE4 F56D 7F8041E7E3 DB $7F,$80,$41,$E7,$E3,$F6,$56,$26 F572 F65626 F575 35ECD6DF0C DB $35,$EC,$D6,$DF,$0C,$7F,$F4,$9E F57A 7FF49E F57D AC5246EFCF DB $AC,$52,$46,$EF,$CF,$BF,$A2,$3F F582 BFA23F F585 A41315974A DB $A4,$13,$15,$97,$4A,$1C,$B0,$42 F58A 1CB042 F58D 8CB1055880 DB $8C,$B1,$05,$58,$80,$18,$77,$2B F592 18772B F595 023EA8491A DB $02,$3E,$A8,$49,$1A,$6A,$CB,$6E F59A 6ACB6E F59D 0B8AEBF14F DB $0B,$8A,$EB,$F1,$4F,$14,$79,$8B F5A2 14798B F5A5 D89F9B5719 DB $D8,$9F,$9B,$57,$19,$F8,$2A,$2D F5AA F82A2D F5AD 760EE82E4B DB $76,$0E,$E8,$2E,$4B,$F9,$07,$03 F5B2 F90703 F5B5 DE93167ED4 DB $DE,$93,$16,$7E,$D4,$E5,$B2,$F0 F5BA E5B2F0 F5BD 7D7ADAD2A1 DB $7D,$7A,$DA,$D2,$A1,$CC,$1D,$E0 F5C2 CC1DE0 F5C5 5E23A09522 DB $5E,$23,$A0,$95,$22,$1E,$36,$85 F5CA 1E3685 F5CD FE1F39AA89 DB $FE,$1F,$39,$AA,$89,$96,$AD,$0F F5D2 96AD0F F5D5 2FC047275D DB $2F,$C0,$47,$27,$5D,$24,$EA,$C3 F5DA 24EAC3 F5DD A5F5215F1B DB $A5,$F5,$21,$5F,$1B,$40,$8F,$AE F5E2 408FAE F5E5 7425DDC17C DB $74,$25,$DD,$C1,$7C,$CD,$A6,$70 F5EA CDA670 F5ED D7337B2C75 DB $D7,$33,$7B,$2C,$75,$BB,$86,$99 F5F2 BB8699 F5F5 BD549A6C63 DB $BD,$54,$9A,$6C,$63,$32,$48,$4C F5FA 32484C F5FD 8DBA5C61C4 DB $8D,$BA,$5C,$61,$C4,$4E,$29,$37 F602 4E2937 F605 12C6989CD5 DB $12,$C6,$98,$9C,$D5,$69,$6B,$E2 F60A 696BE2 F60D 044DE9C288 DB $04,$4D,$E9,$C2,$88,$3A,$DB,$64 F612 3ADB64 F615 01446FB5F2 DB $01,$44,$6F,$B5,$F2,$30,$28,$FD F61A 3028FD F61D 50713CB466 DB $50,$71,$3C,$B4,$66,$68,$C9,$D3 F622 68C9D3 F625 CA83C7ABF7 DB $CA,$83,$C7,$AB,$F7,$65,$09,$EE F62A 6509EE * METHOD.S THIS IS A PACKAGE OF ROUTINES THAT DO THE ACTUAL DE... * THIS ROUTINE DECRYPTS A SIGNATURE. THE KEY IS PLACED INTO REG1. * MODULUS IS N. EVERYTHING IS ASSUMED TO BE SIZE NLEN. * INPUT: SIG IN $FF80, N, NLEN * OUTPUT: DECRYPTED SIG IN REG1 (LENGTH NLEN) * REG1 = SIG * SIG MOD N (DECRYPTION FUNCTION) F62D A277 DECRYPT LDX #NLEN F62F 86E4 STX SIZER0 F631 86E5 STX SIZER1 F633 BD80FF DCLOOP LDA $FF80,X F636 9D0119 STA REG0+1,X F639 9D0020 STA REG1,X F63C CA DEX F63D 10F4 BPL DCLOOP F63F A902 LDA #$02 ;TURN SECURITY ROM BACK ON F641 8501 STA INPTCTRL F643 2084FB JSR GRAPHON ;TURN GRAPHICS ON F646 207225 JSR MULTIPLY-CODEDIF ;START WITH THE MULTIPLY F649 C6F2 DEC KNLTIME ;SPEED UP FUJI ROLLING F64B A277 LDX #NLEN ;SIZE OF REGISTER F64D 86E4 STX SIZER0 ;SET UP SIZE FOR DIVIDE F64F BDD5FE MDMRLOOP LDA N,X ;MOVE MODULO TO REG0 F652 9D0119 STA REG0+1,X ;STORE IT F655 CA DEX F656 10F7 BPL MDMRLOOP ;KEEP GOING TILL REGISTER 0 ... F658 A5E1 LDA OFFSETA F65A 85E3 STA SIZEA F65C 20D825 JSR DIVIDE-CODEDIF ;AND DO THE DIVIDE F65F C6F2 DEC KNLTIME ;SPEED UP FUJI ROLLING F661 A5E0 LDA STARTA ;SET UP FOR MOVE F663 8D6925 STA DCMOD0+1-CODEDIF F666 A277 LDX #NLEN ;PUT ACC INTO REG1 F668 DCMLOOP F668 BD0018 DCMOD0 LDA ACC,X F66B 9D0020 STA REG1,X F66E CA DEX F66F 10F7 BPL DCMLOOP F671 60 RTS ;ALL DONE, GET CHECKSUM TO C... * MULTIPLY TWO NUMBERS - THE TWO NUMBERS TO BE MULTIPLIED ARE PLACED... * REG0 AND REG1. THE RESULT IS LEFT IN ACC. ACC WILL HAVE A LEADIN... * (TO MAKE IT EASIER TO USE WITH A MODULO FOLLOWING IT). REG0 SHOUL... * AT REG0+1 (SO THE FIRST LOCATION CAN BE SMASHED) THOUGH SIZER0 SHO... * REMAIN UNCHANGED. * INPUT: REG0, REG1, SIZER0, SIZER1 * OUTPUT: ACC, STARTA, OFFSETA F672 203026 MULTIPLY JSR SETREGS-CODEDIF ;INITIALIZE REGISTERS F675 A4E5 LDY SIZER1 ;PREPARE ACCUMULATOR F677 C8 INY F678 84E1 STY OFFSETA ;OFFSET INTO REG0 AND ACC F67A 98 TYA F67B 18 CLC F67C 65E2 ADC OFFSETR ;SET SIZE TO CLEAR F67E 48 PHA ;PUSH SIZE OF ACCUMULATOR ON... F67F AA TAX F680 A900 LDA #$00 F682 8D6826 STA ADDMOD+1-CODEDIF ;WE ONLY USE EVEN REGISTERS F685 9D0018 MULCALP STA ACC,X ;CLEAR ACC F688 CA DEX F689 D0FA BNE MULCALP F68B 8D0018 STA ACC ;CLEAR LEADING BYTE F68E C8 INY ;Y STILL ~~~~~~SETA, INC FOR... F68F 8C6526 STY ADACMOD0+1-CODEDIF ;MODIFY ~~~ACCUMULATOR INDEX... F692 8C6B26 STY ADACMOD1+1-CODEDIF F695 8C7326 STY ADACMOD2+1-CODEDIF F698 8C7826 STY ADACMOD3+1-CODEDIF F69B A200 MULLOOP0 LDX #$00 ;RESET BIT OFFSET F69D CE6526 DEC ADACMOD0+1-CODEDIF ;MODIFY ~~~~ACCUMULATOR INDEX... F6A0 CE6B26 DEC ADACMOD1+1-CODEDIF F6A3 CE7326 DEC ADACMOD2+1-CODEDIF F6A6 CE7826 DEC ADACMOD3+1-CODEDIF F6A9 C6E1 DEC OFFSETA ;GO TO NEXT REG1 BYTE F6AB 301B BMI MULOUT F6AD A4E1 MULLOOP LDY OFFSETA ;GET OFFSET INTO REG0 F6AF B90020 LDA REG1,Y ;SEE WHAT OUR 'CURRENT BIT' ... F6B2 3DD025 AND MULTMASK-CODEDIF,X F6B5 F009 BEQ MULNEXT F6B7 BD5926 LDA HSEROFF-CODEDIF,X ;IT IS A 1, ADD IN APPROPRIA... F6BA 8D6926 STA ADDMOD+2-CODEDIF F6BD 206126 JSR MULTADD-CODEDIF F6C0 E8 MULNEXT INX ;GO TO NEXT BIT IN BYTE F6C1 E008 CPX #$08 F6C3 30E8 BMI MULLOOP F6C5 4C9B25 JMP MULLOOP0-CODEDIF F6C8 68 MULOUT PLA ;GET SIZE OF ACCUMULATOR BAC... F6C9 85E1 STA OFFSETA F6CB A901 LDA #$01 ;STARTING BYTE OF ACCUMULATO... F6CD 85E0 STA STARTA F6CF 60 RTS F6D0 0102040810 MULTMASK DB $01,$02,$04,$08,$10,$20,$40,$80 F6D5 204080 * DIVIDE TWO NUMBERS - THE ACCUMULATOR IS DIVIDED BY REG0. THE REMA... * PLACED IN REG1. THE ACCUMULATOR MUST START OUT WITH A NULL HI BYT... * (THE INITIAL STARTA OF 1, THE FIRST BYTE OF ACC IS ZEROED HERE). * AS IN MULTIPLY, REG0 SHOULD START AT REG0+1. * INPUT: ACC, REG0, SIZER0, SIZEA * OUTPUT: ACC, STARTA, OFFSETA * USES: REG2-REG14 EVEN F6D8 203026 DIVIDE JSR SETREGS-CODEDIF ;SET SHIFTED REGISTERS F6DB A5E3 LDA SIZEA F6DD 38 SEC F6DE E5E4 SBC SIZER0 F6E0 85E0 STA STARTA ;THIS IS THE START OF WHAT IS... F6E2 85E1 STA OFFSETA ;THIS IS NUMBER OF TIMES LOOP... F6E4 A200 LDX #$00 F6E6 8E0018 STX ACC ;MAKE SURE LEADING BYTE IS 2 F6E9 8E8626 STX SUBMOD+1-CODEDIF ;WE ONLY USE EVEN REGISTERS F6EC 8EA326 STX CMPMOD+1-CODEDIF F6EF CA DEX ;THESE WILL BE INCREMENTED ON... F6F0 8EA026 STX CMACMOD+1-CODEDIF F6F3 8E8326 STX SBACMOD0+1-CODEDIF F6F6 8E8926 STX SBACMOD1+1-CODEDIF F6F9 8E9126 STX SBACMOD2+1-CODEDIF F6FC 8E9626 STX SBACMOD3+1-CODEDIF F6FF A207 DIVLOOP0 LDX #$07 ;RESET BIT OFFSET F701 EEA026 INC CMACMOD+1-CODEDIF F704 EE8326 INC SBACMOD0+1-CODEDIF F707 EE8926 INC SBACMOD1+1-CODEDIF F70A EE9126 INC SBACMOD2+1-CODEDIF F70D EE9626 INC SBACMOD3+1-CODEDIF F710 C6E1 DEC OFFSETA F712 3017 BMI DIVOUT F714 BD5926 DIVLOOP LDA HSEROFF-CODEDIF,X ;DO MODIFICATION FOR COMPARE F717 8D8726 STA SUBMOD+2-CODEDIF F71A 8DA426 STA CMPMOD+2-CODEDIF F71D 209D26 JSR DIVCOMP-CODEDIF ;SEE IF REGISTER IS LARGER F720 9003 BCC DIVNEXT ; IF SO, DO NOTHING F722 207F26 JSR DIVSUB-CODEDIF ;AND DO THE SUBTRACT F725 CA DIVNEXT DEX ;GO TO NEXT BIT IN BYTE F726 10EC BPL DIVLOOP F728 4CFF25 JMP DIVLOOP0-CODEDIF F72B A5E3 DIVOUT LDA SIZEA ;SET LAST RETURN VALUE F72D 85E1 STA OFFSETA ;THIS IS THE END OF WHAT IS L... F72F 60 RTS * THIS ROUTINE SETS UP REGISTERS FOR MULTIPLY AND DIVIDE. THE REGIST... * IS SHIFTED LEFT 7 TIMES, WITH THE INTERMEDIATE FORMS LEFT IN REG2-R... * (IN ORDER OF HOW MUCH THEY HAVE BEEN SHIFTED). IT IS ASSUMED THAT ... * A LEADING ZERO. THE LEADING BYTE IS ZEROED SO WHOEVER LOADS REG0 ~... * HAVE TO ZERO IT. NOTE THAT SIZER0 SHOULD NOT INCLUDE THE LEADING Z... * INPUT: REG0, SIZER0 * OUTPUT: REG0-REG14 EVEN, OFFSETR (INDEX INTO ABOVE) F730 A6E4 SETREGS LDX SIZER0 F732 E8 INX F733 86E2 STX OFFSETR F735 A000 LDY #$00 F737 8C0019 STY REG0 ;CLEAR THE EXTRA BYTE. F73A B95926 SERLOOP LDA HSEROFF-CODEDIF,Y F73D 8D4C26 STA SERSMOD1+2-CODEDIF F740 C8 INY ;GO TO NEXT REG F741 B95926 LDA HSEROFF-CODEDIF,Y F744 8D5026 STA SERSMOD2+2-CODEDIF F747 A6E2 LDX OFFSETR ;DO A LEFT SHIFT OF THE REGIS... F749 18 CLC F74A SERSLOOP F74A BD0019 SERSMOD1 LDA REG0,X ;GET DATA F74D 2A ROL A ;ROTATE IT F74E 9D0019 SERSMOD2 STA REG0,X ;STORE IT F751 CA DEX F752 10F6 BPL SERSLOOP F754 C007 CPY #$07 F756 30E2 BMI SERLOOP F758 60 SEROUT RTS * OFFSET TABLES AND MASK BYTES USED BY SETTINGS F759 191A1B1C HSEROFF DB >(REG0),>(REG2),>(REG4),>(REG6) F75D 1D1E1F21 DB >(REG8),>(REG10),>(REG12),>(REG14) * ADD TWO NUMBERS - CALLER MODIFIES ADDMOD+1,ADDMOD+2 TO THE ADDRESS ... * REGISTER TO BE ADDED IN. CALLER MODIFIES ADACMOD0..3+1 FOR OFFSET ... * ACCUMULATOR. * INPUT: ACC, REGN, OFFSETR, X * OUTPUT: ACC * ACC = ACC + REGN F761 A4E2 MULTADD LDY OFFSETR ;START AT THE END OF THE REGI... F763 18 CLC F764 ADDLOOP F764 B90018 ADACMOD0 LDA ACC,Y ;ADD THE REGISTER TO THE ACCU... F767 790019 ADDMOD ADC REG0,Y F76A 990018 ADACMOD1 STA ACC,Y F76D 88 DEY F76E 10F4 BPL ADDLOOP ;KEEP GOING TILL REGISTER EXHA... F770 900C ADDLOOP2 BCC ADDOUT ;IF CARRY CLEAR, ALL DONE F772 B90017 ADACMOD2 LDA ACC-$100,Y ;PROPAGATE CARRY (Y IS WRAPPED... F775 6900 ADC #$00 F777 990017 ADACMOD3 STA ACC-$100,Y F77A 88 DEY F77B 4C7026 JMP ADDLOOP2-CODEDIF F77E 60 ADDOUT RTS * SUBTRACT TWO NUMBERS - CALLER MODIFIES SUBMOD+1,SUBMOD+2 TO THE AD... * THE REGISTER TO BE SUBTRACTED. CALLER MODIFIES SBACMOD0..3+1 TO T... * INTO THE ACCUMULATOR. * INPUT: ACC, REGN, OFFSETR, X * OUTPUT: ACC * ACC = ACC - REGN F77F A4E2 DIVSUB LDY OFFSETR ;START AT THE END OF THE REG... F781 38 SEC F782 SUBLOOP F782 B90018 SBACMOD0 LDA ACC,Y ;ADD THE REGISTER TO THE ACC... F785 F90019 SUBMOD SBC REG0,Y F788 990018 SBACMOD1 STA ACC,Y F78B 88 DEY F78C 10F4 BPL SUBLOOP ;KEEP GOING TILL REGISTER EX... F78E B00C SUBLOOP2 BCS SUBOUT ;IF CARRY CLEAR, ALL DONE F790 B90017 SBACMOD2 LDA ACC-$100,Y ;PROPAGATE CARRY (Y IS WRAPP... F793 E900 SBC #$00 F795 990017 SBACMOD3 STA ACC-$100,Y F798 88 DEY F799 4C8E26 JMP SUBLOOP2-CODEDIF F79C 60 SUBOUT RTS * COMPARE TWO NUMBERS - CALLER MODIFIES CMPMOD+1,CMPMOD+2 TO THE ADD... * THE REGISTER TO BE SUBTRACTED. CMACMOD+1 IS MODIFIED FOR THE OFFS... * THE ACCUMULATOR. * INPUT: ACC, REGN, OFFSETR * OUTPUT: CARRY SET IF REGISTER LESS THAN ACCUMULATOR F79D A000 DIVCOMP LDY #$00 ;START AT THE TOP OF THE REG... F79F CMPLOOP F79F B90018 CMACMOD LDA ACC,Y ;ADD THE REGISTER TO THE ACC... F7A2 D90019 CMPMOD CMP REG0,Y F7A5 F001 BEQ CMPNEXT F7A7 60 CMPOUT RTS F7A8 C4E2 CMPNEXT CPY OFFSETR ;WE HAVE TO LOOK AT ANOTHER,... F7AA F0FB BEQ CMPOUT ; HAVE MADE IT TO THE END O... F7AC C8 INY ;NO, DO ANOTHER BYTE F7AD 4C9F26 JMP CMPLOOP-CODEDIF * VECTOR.S WE HAVE DETERMINED VALIDITY, VECTOR TO CART IN 2600... * 3600 MODE F7B0 A216 SETMARIA LDX #$16 ;~~~~~~~~~IN 3600 MODE, CART... F7B2 8601 STX INPTCTRL F7B4 9A TXS F7B5 F8 SED F7B6 6CFCFF JMP ($FFFC) ;VECTOR INTO THE CART IN 360... F7B9 A902 LOCK2600 LDA #$02 ;TURN SECURITY ROM ON F7BB 8501 STA INPTCTRL ;LOCK CART IN 2600 MODE, CART... F7BD A27F LDX #$7F ;MOVE CODE TO RAM F7BF BDCBF7 L2LOOP LDA SYNC,X ;MOVE INTO 6532 RAM F7C2 9D8004 STA $480,X F7C5 CA DEX F7C6 10F7 BPL L2LOOP F7C8 4C8004 JMP $480 ;AND EXECUTE OUT OF RAM F7CB A900 SYNC LDA #0 F7CD AA TAX F7CE 9501 ZEROLP STA 1,X F7D0 E8 INX F7D1 E02C CPX #$2C F7D3 D0F9 BNE ZEROLP F7D5 A904 LDA #4 F7D7 8502 STA 2 F7D9 A904 LDA #4 F7DB EA NOP F7DC 301F BMI E F7DE A204 LDX #4 F7E0 CA DEX DEX F7E1 10FD BPL DEX F7E3 9A TXS F7E4 8D1001 STA $110 F7E7 20C704 JSR DUMMY+1-SYNC+$480 F7EA 20C704 JSR DUMMY+1-SYNC+$480 F7ED 8511 STA $11 F7EF 8502 STA 2 F7F1 851B STA $1B F7F3 851C STA $1C F7F5 850F STA $F F7F7 8502 STA 2 F7F9 2403 BIT 3 F7FB 3009 BMI OUT F7FD A902 E LDA #2 F7FF 8509 STA 9 F801 8D12F1 STA $F112 F804 D00E BNE DONE F806 2402 OUT BIT 2 F808 300A BMI DONE F80A A902 LDA #2 F80C 8506 STA 6 F80E 8D18F1 STA $F118 F811 8D60F4 DUMMY STA $F460 F814 A9FD DONE LDA #$FD F816 8508 STA 8 F818 6CFCFF JMP ($FFFC) F81B EA ENDROM NOP ;END OF FIRST PART OF ROM * TEST.S RAM AND CPU TESTS - IF EITHER ARE BAD, DECRYPTION WI... * THUS, THESE MUST BE TESTED FIRST * ***** NOTE: ***** THE FOLLOWING INSTRUCTIONS ARE NOT TESTED BY THE... * AND THUS SHOULD NOT BE USED IN THE VALIDATION/DECRYPTION CODE: * BRK, RTI, PLP, PHP, CLV, SEV, BVC, BVS, CLD, SED, BIT, SEI,... * TEST FAILURE MODES = 0000 BADCPU EQU $00 ;CPU ERROR = 0001 BAD6116A EQU $01 ;ERROR IN RAM $2000-$27FF = 0002 BAD6116B EQU $02 ;ERROR IN RAM $1800-$1FFF = 0003 BADRAM EQU $03 ;CAN'T GET TO ANY OF THE RAM = 0004 BADMARIA EQU $04 ;MARIA SHADOWING NOT WORKING = 0005 BADVALID EQU $05 ;BAD VALIDATION OR DECRYPTION F880 ORG ROMCODE2 F880 A910 FATAL_ LDA #$10 ;THERE HAS BEEN SOMETHING BA... F882 8501 STA INPTCTRL ;LOCK IN 2600 MODE, TEST CART... F884 78 MAIN SEI ;INITIALIZE F885 D8 CLD F886 A902 LDA #$02 ;PUT BASE UNIT INTO MARIA ENA... F888 8501 STA INPTCTRL F88A A9FB LDA #>(ENDDLI) ;WESTBERG SUX F88C 85F5 STA DLIADDR+1 ;WESTBERG SUX F88E A912 LDA #<(ENDDLI) ;WESTBERG SUX F890 85F4 STA DLIADDR ;WESTBERG SUX F892 A97F LDA #$7F F894 853C STA CTRL ;TURN OFF DMA F896 A900 LDA #$00 F898 8520 STA BACKGRND ;BACKGROUND COLOR TO BLACK * ***** RAM TESTS ***** * A SIMPLE RAM TEST TO CHECK PAGES $2000 AND $2100 IS DONE FIRST TO ... * ENOUGH RAM TO TEST OUT THE CPU (SHADOWED TO PAGES $0000 AND $0100). * THE CPU TEST, A FULL RAM TEST IS DONE * EARLY RAM TEST, JUST CHECK OUT OUR TWO PAGES USING MINIMAL INSTRUC... F89A A205 RAMCHECK LDX #$05 ;TEST OUT 4 PATTERNS OF RAM F89C BD1DF9 RCAGAIN LDA RAMPAT,X F89F A000 LDY #$00 F8A1 990020 RCLOOP STA $2000,Y ;CHECK ZERO PAGE F8A4 D90020 CMP $2000,Y F8A7 D027 BNE CHKRAMB F8A9 990021 STA $2100,Y ;CHECK PAGE 1 F8AC D90021 CMP $2100,Y F8AF D01F BNE CHKRAMB F8B1 88 DEY F8B2 D0ED BNE RCLOOP F8B4 CA DEX F8B5 10E5 BPL RCAGAIN * SEE IF MARIA SHADOWING WORKS F8B7 A943 LDA #$43 ;A SIMPLE ~~~~ TO SEE IF SHAD... F8B9 8D8020 STA $2080 F8BC C580 CMP $0080 F8BE D00B BNE MARIAERR F8C0 8D8021 STA $2180 F8C3 CD8001 CMP $0180 F8C6 D003 BNE MARIAERR F8C8 4C38F9 JMP CPUTEST ;IF SHADOW~~~~~~~ RAM WORKS, ... * RAM FAILURE ROUTINES F8CB A004 MARIAERR LDY #BADMARIA ;MARIA SHADOWING BAD F8CD 4C80F8 JMP FATAL_ F8D0 8D0018 CHKRAMB STA $1800 ;RAMA HAS FAILED IN SIMPLE TE... F8D3 CD0018 CMP $1800 ; TO SEE IF ANY RAM WORKS F8D6 D00A BNE RAMERR F8D8 A001 RAMAERR LDY #BAD6116A ;BAD RAM CHIP - $2000-$27FF F8DA 4C80F8 JMP FATAL_ F8DD A002 RAMBERR LDY #BAD6116B ;BAD RAM CHIP - $1800-$1FFF F8DF 4C80F8 JMP FATAL_ F8E2 A003 RAMERR LDY #BADRAM ;ALL RAM BAD - COULD BE ANOTH... F8E4 4C80F8 JMP FATAL_ * A FULL RAM TEST, TO BE DONE AFTER THE CPU TEST SUCEEDS F8E7 A900 RAMTEST LDA #$00 ;SET UP STATE TO MARCH THROU... F8E9 85F0 STA $F0 ;(F0) = $2000 F8EB 85F2 STA $F2 ;(F2) = $1800 F8ED A007 LDY #$07 ;NUMBER OF PAGES TO CHECK F8EF 84F4 STY $F4 F8F1 B923F9 RTPAGE LDA RAMAPAGE,Y ;SET UP RAM A PAGE TO CHECK F8F4 85F1 STA $F1 F8F6 B92BF9 LDA RAMBPAGE,Y ;SET UP RAM B PAGE TO CHECK F8F9 85F3 STA $F3 F8FB A205 LDX #$05 ;NUMBER OF RAM PATTERNS TO C... F8FD BD1DF9 RTPAT LDA RAMPAT,X ;GET RAM PATTERN F900 A000 LDY #$00 ;INITIALIZE INDEX F902 91F0 RTLOOP STA ($F0),Y ;CHECK RAM A F904 D1F0 CMP ($F0),Y F906 D0D0 BNE RAMAERR F908 91F2 STA ($F2),Y ;CHECK RAM B F90A D1F2 CMP ($F2),Y F90C D0CF BNE RAMBERR F90E 88 DEY F90F D0F1 BNE RTLOOP F911 CA DEX F912 10E9 BPL RTPAT F914 C6F4 DEC $F4 ;ONE LESS PAGE F916 A4F4 LDY $F4 F918 10D7 BPL RTPAGE F91A 4C17FB JMP STARTVND ;START THE VALIDATION AND DE... F91D 00FF55AA69 RAMPAT DB $00,$FF,$55,$AA,$69,$0F ;PATTERNS FOR RA... F922 0F F923 2223242526 RAMAPAGE DB $22,$23,$24,$25,$26,$27,$22,$23 ;HI BYTES OF RAM... F928 272223 F92B 18191A1B1C RAMBPAGE DB $18,$19,$1A,$1B,$1C,$1D,$1E,$1F ;HI BYTES OF RAM... F930 1D1E1F * ***** CPU TESTS ***** F933 IRQINT ;IF WE GET AN IRQ, IT IS A C... F933 A000 CPUERR LDY #BADCPU ;CPU ERROR F935 4C80F8 JMP FATAL_ * CPU TEST, METHODICALLY CHECK ALL INSTRUCTIONS, ADDRESSING MODES, AN... * BITS THAT THE DECRYPTION WILL BE USING F938 A9AA CPUTEST LDA #$AA ;FIRST, TEST OUT LDA AND BRA F93A F0F7 BEQ CPUERR ;CHECK BEQ FAIL F93C 10F5 BPL CPUERR ;CHECK BPL FAIL F93E 3003 BMI CTA ;CHECK BMI SUCCEED F940 4C33F9 JMP CPUERR F943 D003 CTA BNE CTB ;CHECK BNE SUCCEED F945 4C33F9 JMP CPUERR F948 85AA CTB STA $AA ;STORE IT ~~~~~ $AA = AA F94A C5AA CMP $AA ;SEE IF IT ADDRESSES AND COM... F94C D0E5 BNE CPUERR F94E A900 LDA #$00 ;TEST ALTERNATE POLARITY F950 D0E1 BNE CPUERR ;CHECK BNE FAIL F952 30DF BMI CPUERR ;CHECK BMI FAIL F954 1003 BPL CTC ;CHECK BPL SUCCEED F956 4C33F9 JMP CPUERR F959 F003 CTC BEQ CTD ;CHECK BEQ SUCCEED F95B 4C33F9 JMP CPUERR F95E C900 CTD CMP #$00 F960 D0D1 BNE CPUERR ;CHECK CMP FAIL F962 90CF BCC CPUERR ;CHECK BCC FAIL F964 B003 BCS CTE ;CHECK BCS SUCCEED F966 4C33F9 JMP CPUERR F969 C901 CTE CMP #$01 F96B B0C6 BCS CPUERR ;CHECK BCS FAIL F96D 9003 BCC CTF ;CHECK BCC SUCCEED F96F 4C33F9 JMP CPUERR F972 A255 CTF LDX #$55 ;TEST X AND Y LOADS, STORES F974 E056 CPX #$56 ;CHECK CPX F976 F0BB BEQ CPUERR F978 8EAA01 STX $1AA ;CHECK STX - $1AA = 55 F97B ECAA01 CPX $1AA ;CHECK CPX F97E D0B3 BNE CPUERR F980 A4AA LDY $AA ;CHECK LDY, - Y = AA F982 C0AB CPY #$AB F984 F0AD BEQ CPUERR F986 8C5501 STY $155 ;CHECK STY - $155 = AA F989 CC5501 CPY $155 ;CHECK CPY F98C D0A5 BNE CPUERR F98E CA DEX ;CHECK TRANSFER DATA PATHS A... F98F 9A TXS ;TO POINT TO $155, S MUST BE... F990 E8 INX F991 68 PLA ;S HAS 55, A = $155 (= AA) F992 C9AA CMP #$AA ;TEST TXS AND PLA F994 D055 BNE CPUERR0 F996 8A TXA ;A = 55 F997 48 PHA ;$155 = 55 F998 EC5501 CPX $155 ;TEST TXA DNA PHA F99B D04E BNE CPUERR0 F99D 98 TYA ;A = AA F99E C9AA CMP #$AA ;TEST TYA F9A0 D049 BNE CPUERR0 F9A2 AA TAX F9A3 BD0001 LDA $100,X ;NORM,X - A = $1AA (= 55) F9A6 A8 TAY ;Y = 55 F9A7 C055 CPY #$55 ;TEST NORM,X, TAX, TAY F9A9 D040 BNE CPUERR0 ;TEST ADDRESSING MODES (NORM... F9AB B500 LDA $00,X ;ZP,X - A = $AA (= AA) F9AD C5AA CMP $AA ;ZP, TEST ZP AND ZP,X F9AF D03A BNE CPUERR0 F9B1 C9AA CMP #$AA ;TEST ZP AND ZP,X F9B3 D036 BNE CPUERR0 F9B5 49FF EOR #$FF ;A = 55 F9B7 990000 STA $00,Y ;ZP,Y - $55 = 55 F9BA C555 CMP $55 F9BC D02D BNE CPUERR0 F9BE D90001 CMP $100,Y ;NORM,Y ($155) F9C1 D028 BNE CPUERR0 F9C3 DDAB20 CMP $20AB,X ;NORM,X W/WRAP ($155) F9C6 D023 BNE CPUERR0 F9C8 A920 LDA #$20 ;SET UP ADDR, TEST (IND,X), (... F9CA 85F1 STA $F1 F9CC A9CC LDA #$CC F9CE 85F0 STA $F0 ;($F0) = $20CC (WHICH IS $CC) F9D0 8146 STA ($F0-$AA,X) ;(IND,X) - $CC = CC F9D2 C5CC CMP $CC F9D4 D015 BNE CPUERR0 F9D6 91F0 STA ($F0),Y ;(IND),Y - $2121 = CC F9D8 CD2121 CMP $2121 F9DB D00E BNE CPUERR0 F9DD A9EE LDA #<(CTCONT) ;TEST (IND), ONLY JMP USES F9DF 85F0 STA $F0 F9E1 A9F9 LDA #>(CTCONT) F9E3 85F1 STA $F1 F9E5 6CF000 JMP ($F0) ;(IND) F9E8 4CEBF9 JMP CPUERR0 F9EB 4C33F9 CPUERR0 JMP CPUERR ;ANOTHER CPUERR F9EE A955 CTCONT LDA #$55 ;TEST ADDER F9F0 18 CLC F9F1 6955 ADC #$55 ;55 - 55 = AA F9F3 EA NOP ;NOP, MAKE SURE IT DOESN'T A... F9F4 B0F5 BCS CPUERR0 F9F6 10F3 BPL CPUERR0 F9F8 F0F1 BEQ CPUERR0 F9FA C9AA CMP #$AA F9FC D0ED BNE CPUERR0 ; SEC F9FE 6955 ADC #$55 ;AA + 55 + C = 0 + C FA00 EA NOP ;NOP, MAKE SURE IT DOESN'T AL... FA01 90E8 BCC CPUERR0 FA03 30E6 BMI CPUERR0 FA05 D0E4 BNE CPUERR0 ; SEC ;TEST SU~~~~~~~~~ FA07 E955 SBC #$55 ;0 - 55 ~~~~~~~~~ FA09 B0E0 BCS CPUERR0 FA0B 10DE BPL CPUERR0 FA0D F0DC BEQ CPUERR0 FA0F C9AB CMP #$AB FA11 D0D8 BNE CPUERR0 FA13 18 CLC FA14 E9AA SBC #$AA ;AB - AA ~~~~~~~~ FA16 90D3 BCC CPUERR0 FA18 30D1 BMI CPUERR0 FA1A D0CF BNE CPUERR0 FA1C A9FF LDA #$FF ;TEST OUT INCREMENTS AND DEC... FA1E AA TAX ;X = FF FA1F E8 INX ;TEST INX - X = 0 FA20 D036 BNE CPUERR1 FA22 CA DEX ;TEST DEX - X = FF FA23 F033 BEQ CPUERR1 FA25 1031 BPL CPUERR1 FA27 E0FF CPX #$FF FA29 D02D BNE CPUERR1 FA2B A8 TAY ;Y = FF FA2C C8 INY ;TEST INY - Y = 0 FA2D D029 BNE CPUERR1 FA2F 88 DEY ;TEST DEY - Y = FF FA30 F026 BEQ CPUERR1 FA32 C8 INY ;Y = 0 FA33 D023 BNE CPUERR1 FA35 85F0 STA $F0 ;$F0 = FF FA37 E6F0 INC $F0 ;TEST INC - $F0 = 0 FA39 D01D BNE CPUERR1 FA3B C4F0 CPY $F0 FA3D D019 BNE CPUERR1 FA3F C6F0 DEC $F0 ;TEST DEC - $F0 = FF FA41 F015 BEQ CPUERR1 FA43 C5F0 CMP $F0 FA45 D011 BNE CPUERR1 FA47 A9AA LDA #$AA ;TEST SHIFTS AND ROTATES - 1... FA49 18 CLC ;C = 0 FA4A 2A ROL A ;01010100, C=1 FA4B 2A ROL A ;10101001, C=0 FA4C 2A ROL A ;01010010, C=1 FA4D C952 CMP #$52 ;01010010 FA4F D007 BNE CPUERR1 ; SEC ;C = 1 FA51 6A ROR A ;10101001, C=0 FA52 6A ROR A ;01010100, C=1 FA53 6A ROR A ;10101010, C=0 FA54 C9AA CMP #$AA ;10101010 FA56 F003 BEQ CTSHIFT FA58 4C33F9 CPUERR1 JMP CPUERR ;ANOTHER CPUERR FA5B 0A CTSHIFT ASL A ;01010100, C=1 FA5C 90FA BCC CPUERR1 FA5E 0A ASL A ;10101000, C=0 FA5F B0F7 BCS CPUERR1 FA61 0A ASL A ;01010000, C=1 FA62 C950 CMP #$50 FA64 D0F2 BNE CPUERR1 FA66 4905 EOR #$05 ;01010101 FA68 4A LSR A ;00101010, C=1 FA69 90ED BCC CPUERR1 FA6B 4A LSR A ;00010101, C=0 FA6C B0EA BCS CPUERR1 FA6E 4A LSR A ;00001010, C=1 FA6F C90A CMP #$0A FA71 D0E5 BNE CPUERR1 FA73 A955 LDA #$55 ;TEST LOGICAL OPERATIONS FA75 091B ORA #$1B ;TEST OR - A = 5F FA77 C95F CMP #$5F FA79 D0DD BNE CPUERR1 FA7B 2955 AND #$55 ;A = 55 FA7D 291B AND #$1B ;TEST AND - A = 11 FA7F C911 CMP #$11 FA81 D0D5 BNE CPUERR1 FA83 0955 ORA #$55 ;A = 55 FA85 491B EOR #$1B ;TEST EOR FA87 C94E CMP #$4E FA89 D0CD BNE CPUERR1 FA8B 2091FA JSR CTJSR ;GRAND FINALE, TEST JSR, S =... FA8E 4C58FA CTJSRRET JMP CPUERR1 ;NO GOOD IF WE DIDN'T JSR FA91 BA CTJSR TSX ;SEE WHERE STACK IS FA92 E052 CPX #$52 FA94 D0C2 BNE CPUERR1 FA96 68 PLA ;GET RETURN ADDRESS FA97 C98D CMP #<(CTJSRRET-1) FA99 D0BD BNE CPUERR1 FA9B 68 PLA FA9C C9FA CMP #>(CTJSRRET-1) FA9E D0B8 BNE CPUERR1 FAA0 A9F8 LDA #>(RAMTEST-1) ;PUT START OF CODE AS RETURN FAA2 48 PHA FAA3 A9E6 LDA #<(RAMTEST-1) FAA5 48 PHA FAA6 60 RTS ;DO IT FAA7 4C58FA JMP CPUERR1 ;AGAIN, NO GOOD IF WE DI... * KERNEL.S DLI ROUTINES FOR THE SECURITY ROM * OUR DLI HANDLER FAAA 8A DLI TXA ;STACK REGISTERS, A ALRE... FAAB 48 PHA FAAC A943 LDA #$43 FAAE 853C STA CTRL FAB0 A20F LDX #$0F FAB2 A5EF LDA FUJICOLR FAB4 8522 STA P0C2 ;INITIALIZE COLOR FAB6 24F3 BIT KNLOFSET ;FIGURE OUT STAGGERING FAB8 5006 BVC DFJMP1 FABA 1002 BPL DFJMP0 FABC 8524 DFLOOP STA WSYNC ;CHANGE COLOR ONCE PER ... FABE 8524 DFJMP0 STA WSYNC ;SECOND LINE FAC0 8524 DFJMP1 STA WSYNC ;THIRD LINE FAC2 38 SEC FAC3 E910 SBC #$10 FAC5 C910 CMP #$10 FAC7 B002 BCS DFNEXT FAC9 E90F SBC #$0F FACB 8522 DFNEXT STA P0C2 ;CHANGE COLORS FACD CA DEX FACE 10EC BPL DFLOOP FAD0 A240 DLIATARI LDX #$40 ;SET UP CTRL FOR ATARI FAD2 863C STX CTRL FAD4 29F0 AND #$F0 FAD6 090E ORA #$0E FAD8 8527 STA P1C3 FADA A5EF LDA FUJICOLR FADC 29F0 AND #$F0 FADE 0906 ORA #$06 FAE0 8525 STA P1C1 FAE2 29F0 AND #$F0 FAE4 18 CLC ;ROTATE BAR COLOR FAE5 6940 ADC #$40 FAE7 9002 BCC DLAJMP FAE9 690F ADC #$0F FAEB 0903 DLAJMP ORA #$03 FAED 8526 STA P1C2 FAEF C6F1 DEC KNLCOUNT ;SEE IF TIME FOR A COLOR... FAF1 1019 BPL DLIDONE FAF3 A5F3 LDA KNLOFSET ;SEE IF TIME TO STAGGER, OR ... FAF5 6960 ADC #$60 FAF7 9011 BCC DLIOFSET FAF9 A5EF LDA FUJICOLR ;ROTATE FUJI COLOR FAFB 18 CLC FAFC 6910 ADC #$10 FAFE 9002 BCC DLJMP0 FB00 690F ADC #$0F FB02 85EF DLJMP0 STA FUJICOLR FB04 A5F2 LDA KNLTIME ;RESET TIMER FB06 85F1 STA KNLCOUNT FB08 A900 LDA #$00 FB0A 85F3 DLIOFSET STA KNLOFSET ;UPDATE KERNAL STAGGERING CO... FB0C A902 DLIDONE LDA #$02 ;NOTE THAT WE HAVE DONE KERN... FB0E 85F0 STA KNLSTATE FB10 68 PLA ;UNSTACK REGISTERS FB11 AA TAX FB12 68 ENDDLI PLA FB13 40 RTI FB14 4C14FB INFLOOP JMP INFLOOP * MAIN.S MAIN ROUTINE FOR DECRYPTION CODE * CALLED FROM ROUTINES IN TESTS.S FB17 A2FF STARTVND LDX #STACKPTR FB19 9A TXS ;SET STACK POINTER FB1A A900 LDA #0 ;ZERO THE TIA REGISTERS OUT FB1C AA TAX FB1D 9501 TIA0LOOP STA 1,X FB1F E8 INX FB20 E02C CPX #$2C FB22 D0F9 BNE TIA0LOOP FB24 A902 LDA #$02 ;BACK INTO MARIA MODE FB26 8501 STA INPTCTRL * THIS ROUTINE DROPS OUR CODE INTO RAM FB28 A200 DROPRAM LDX #$00 ;X = 0, DROP CODE AND GRAPHI... FB2A 8620 STX BACKGRND ;PUT BACKGROUND TO BLACK FB2C BD00F4 DRLOOP LDA ROMCODE+$000,X ;DROP CODE FB2F 9D0023 STA RAMCODE+$000,X FB32 BD00F5 LDA ROMCODE+$100,X FB35 9D0024 STA RAMCODE+$100,X FB38 BD00F6 LDA ROMCODE+$200,X FB3B 9D0025 STA RAMCODE+$200,X FB3E BD00F7 LDA ROMCODE+$300,X FB41 9D0026 STA RAMCODE+$300,X FB44 BD00F8 LDA ROMCODE+$400,X FB47 9D0027 STA RAMCODE+$400,X FB4A BDBEFB LDA ROMDLIST,X ;DROP DISPLAY LISTS FB4D 9D0022 STA RAMDLIST,X FB50 E000 CPX #$00 FB52 302A BMI DRLJMP0 FB54 BD4BFC LDA ROMDLL,X ;DROP DL~~~~~~ FB57 9D841F STA RAMDLL,X FB5A BDC6FC LDA ROMGRPH6,X ;DROP GRAPHICS INTO HALF PAGE FB5D 9D8419 STA RAMGRAPH+$000,X FB60 BD3DFD LDA ROMGRPH5,X FB63 9D841A STA RAMGRAPH+$100,X FB66 BDB4FD LDA ROMGRPH4,X FB69 9D841B STA RAMGRAPH+$200,X FB6C BD18FE LDA ROMGRPH3,X FB6F 9D841C STA RAMGRAPH+$300,X FB72 BD57FE LDA ROMGRPH2,X FB75 9D841D STA RAMGRAPH+$400,X FB78 BD96FE LDA ROMGRPH1,X FB7B 9D841E STA RAMGRAPH+$500,X FB7E CA DRLJMP0 DEX FB7F D0AB BNE DRLOOP FB81 4C0623 JMP CARTTEST-CODEDIF ;START THE DECRYPTION * TURN THE GRAPHICS ON FB84 ADF9FF GRAPHON LDA $FFF9 ;SEE IF DISPLAY IS TO BE START... FB87 2904 AND #$04 FB89 F032 BEQ STRTCRPT FB8B A903 GRAPHON2 LDA #$03 ;SET UP KERNEL FB8D 85F1 STA KNLCOUNT FB8F 85F2 STA KNLTIME FB91 A949 LDA #$49 ;SET COLOR FB93 85EF STA FUJICOLR FB95 A966 LDA #$66 FB97 8525 STA P1C1 FB99 A956 LDA #$56 FB9B 8526 STA P1C2 FB9D A92E LDA #$2E FB9F 8527 STA P1C3 FBA1 A9AA LDA #<(DLI) ;SET DLI FBA3 85F4 STA DLIADDR FBA5 A9FA LDA #>(DLI) FBA7 85F5 STA DLIADDR+1 FBA9 2428 SCREENOF BIT MSTAT ;IS VBLANK ENDED YET? FBAB 30FC BMI SCREENOF FBAD 2428 SCREENON BIT MSTAT ;IS VBLNAK STARTED YET? FBAF 10FC BPL SCREENON FBB1 A984 LDA #<(RAMDLL) FBB3 8530 STA DPPL ;SET DPPL AND DPPH TO DLLIST FBB5 A91F LDA #>(RAMDLL) FBB7 852C STA DPPH FBB9 A943 LDA #$43 FBBB 853C STA CTRL ;TURN GRAPHICS ON FBBD 60 STRTCRPT RTS * DISPLAY LISTS FBBE 841F19BB00 ROMDLIST DB <(RAMGRAPH),$1F,>(RAMGRAPH),$BB,$00,$00 ;4 BY... FBC3 00 FBC4 8440191FBB RDL5BYTE DB <(RAMGRAPH),$40,>(RAMGRAPH),$1F,$BB,$00,$00 ;5 BY... FBC9 0000 FBCB 851C194A00 RDLFUJI1 DB <(RAMGRAPH+ROMFUJI1-ROMGRAPH),$1C,>(RAMGRAPH),$4A,$00,$00 FBD0 00 FBD1 891C194A00 RDLFUJI2 DB <(RAMGRAPH+ROMFUJI2-ROMGRAPH),$1C,>(RAMGRAPH),$4A,$00,$00 FBD6 00 FBD7 8D1C194800 RDLFUJI3 DB <(RAMGRAPH+ROMFUJI3-ROMGRAPH),$1C,>(RAMGRAPH),$48,$00,$00 FBDC 00 FBDD 911B194600 RDLFUJI4 DB <(RAMGRAPH+ROMFUJI4-ROMGRAPH),$1B,>(RAMGRAPH),$46,$00,$00 FBE2 00 FBE3 9619194200 RDLFUJI5 DB <(RAMGRAPH+ROMFUJI5-ROMGRAPH),$19,>(RAMGRAPH),$42,$00,$00 FBE8 00 FBE9 9D17193E00 RDLFUJI6 DB <(RAMGRAPH+ROMFUJI6-ROMGRAPH),$17,>(RAMGRAPH),$3E,$00,$00 FBEE 00 FBEF A617193E00 RDLFUJI7 DB <(RAMGRAPH+ROMFUJI7-ROMGRAPH),$17,>(RAMGRAPH),$3E,$00,$00 FBF4 00 FBF5 AF2C1C00 RDLRACE DB <(RAMGRAPH+ROMSTRIP-ROMGRPH3),$2C,>(RAMGRAPH+$300),$00 FBF9 AF2C1C5000 DB <(RAMGRAPH+ROMSTRIP-ROMGRPH3),$2C,>(RAMGRAPH+$300),$50,$00,$00 FBFE 00 FBFF AF2C1D00 RDLRACEL DB <(RAMGRAPH+ROMSTRIP-ROMGRPH3),$2C,>(RAMGRAPH+$400),$00 FC03 AF2C1D5000 DB <(RAMGRAPH+ROMSTRIP-ROMGRPH3),$2C,>(RAMGRAPH+$400),$50,$00,$00 FC08 00 FC09 AF2D192800 RDLINE01 DB <(RAMGRAPH+ROMLINE1-ROMGRAPH),$2D,>(RAMGRAPH+$000),$28,$00,$00 FC0E 00 FC0F C22D192800 RDLINE02 DB <(RAMGRAPH+ROMLINE2-ROMGRAPH),$2D,>(RAMGRAPH+$000),$28,$00,$00 FC14 00 FC15 D52D192800 RDLINE03 DB <(RAMGRAPH+ROMLINE3-ROMGRAPH),$2D,>(RAMGRAPH+$000),$28,$00,$00 FC1A 00 FC1B E82D192800 RDLINE04 DB <(RAMGRAPH+ROMLINE4-ROMGRAPH),$2D,>(RAMGRAPH+$000),$28,$00,$00 FC20 00 FC21 AF2D1A2800 RDLINE05 DB <(RAMGRAPH+ROMLINE1-ROMGRAPH),$2D,>(RAMGRAPH+$100),$28,$00,$00 FC26 00 FC27 C22D1A2800 RDLINE06 DB <(RAMGRAPH+ROMLINE2-ROMGRAPH),$2D,>(RAMGRAPH+$100),$28,$00,$00 FC2C 00 FC2D D52D1A2800 RDLINE07 DB <(RAMGRAPH+ROMLINE3-ROMGRAPH),$2D,>(RAMGRAPH+$100),$28,$00,$00 FC32 00 FC33 E82D1A2800 RDLINE08 DB <(RAMGRAPH+ROMLINE4-ROMGRAPH),$2D,>(RAMGRAPH+$100),$28,$00,$00 FC38 00 FC39 AF2D1B2800 RDLINE09 DB <(RAMGRAPH+ROMLINE1-ROMGRAPH),$2D,>(RAMGRAPH+$200),$28,$00,$00 FC3E 00 FC3F C22D1B2800 RDLINE10 DB <(RAMGRAPH+ROMLINE2-ROMGRAPH),$2D,>(RAMGRAPH+$200),$28,$00,$00 FC44 00 FC45 D52D1B2800 RDLINE11 DB <(RAMGRAPH+ROMLINE3-ROMGRAPH),$2D,>(RAMGRAPH+$200),$28,$00,$00 FC4A 00 * DISPLAY LIST LIST FC4B 0F2206 ROMDLL DB $0F,>(RAMDLIST),<(RAMDLIST+RDL5BYTE-ROMDLIST) ;5 BY... FC4E 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) FC51 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) FC54 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) FC57 032200 DB $03,>(RAMDLIST),<(RAMDLIST+$00) FC5A 85220D DB $85,>(RAMDLIST),<(RAMDLIST+RDLFUJI1-ROMDLIST) FC5D 052213 DB $05,>(RAMDLIST),<(RAMDLIST+RDLFUJI2-ROMDLIST) FC60 052219 DB $05,>(RAMDLIST),<(RAMDLIST+RDLFUJI3-ROMDLIST) FC63 05221F DB $05,>(RAMDLIST),<(RAMDLIST+RDLFUJI4-ROMDLIST) FC66 052225 DB $05,>(RAMDLIST),<(RAMDLIST+RDLFUJI5-ROMDLIST) FC69 05222B DB $05,>(RAMDLIST),<(RAMDLIST+RDLFUJI6-ROMDLIST) FC6C 052231 DB $05,>(RAMDLIST),<(RAMDLIST+RDLFUJI7-ROMDLIST) FC6F 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) ;CENTER SPACE FC72 012237 DB $01,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) ;ATAR... FC75 00224B DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE01-ROMDLIST) FC78 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC7B 002251 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE02-ROMDLIST) FC7E 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC81 002257 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE03-ROMDLIST) FC84 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC87 00225D DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE04-ROMDLIST) FC8A 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC8D 002263 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE05-ROMDLIST) FC90 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC93 002269 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE06-ROMDLIST) FC96 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC99 00226F DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE07-ROMDLIST) FC9C 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FC9F 002275 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE08-ROMDLIST) FCA2 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FCA5 00227B DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE09-ROMDLIST) FCA8 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FCAB 002281 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE10-ROMDLIST) FCAE 022237 DB $02,>(RAMDLIST),<(RAMDLIST+RDLRACE-ROMDLIST) FCB1 002287 DB $00,>(RAMDLIST),<(RAMDLIST+RDLINE11-ROMDLIST) FCB4 012241 DB $01,>(RAMDLIST),<(RAMDLIST+RDLRACEL-ROMDLIST) FCB7 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) ;TRAILING SPA... FCBA 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) FCBD 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) FCC0 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) FCC3 0F2200 DB $0F,>(RAMDLIST),<(RAMDLIST+$00) * ROM GRAPHICS FOR THE FUJI-A AND WORDS FCC6 ROMGRAPH FCC6 00 ROMGRPH6 DB $00 ;NULL INFO FCC7 7C7F8F80 ROMFUJI1 DB $7C,$7F,$8F,$80 ;LINE 6 FCCB FC7F8FC0 ROMFUJI2 DB $FC,$7F,$8F,$C0 FCCF 1F87F87E ROMFUJI3 DB $1F,$87,$F8,$7E FCD3 0FE07F81FC ROMFUJI4 DB $0F,$E0,$7F,$81,$FC FCD8 07FF807F80 ROMFUJI5 DB $07,$FF,$80,$7F,$80,$7F,$F8 FCDD 7FF8 FCDF 1FFFF0007F ROMFUJI6 DB $1F,$FF,$F0,$00,$7F,$80,$03,$FF,$FE FCE4 8003FFFE FCE8 1F0000007F ROMFUJI7 DB $1F,$00,$00,$00,$7F,$80,$00,$00,$3E FCED 8000003E FCF1 00000C003F ROMLINE1 DB $00,$00,$0C,$00,$3F,$FF,$FF,$FF ;LINE 1 OF A... FCF6 FFFFFF FCF9 F000C00000 DB $F0,$00,$C0,$00,$00,$3F,$FF,$FF FCFE 3FFFFF FD01 0003FC DB $00,$03,$FC FD04 00003F003F ROMLINE2 DB $00,$00,$3F,$00,$3F,$FF,$FF,$FF ;LINE 2 OF A... FD09 FFFFFF FD0C F003F00000 DB $F0,$03,$F0,$00,$00,$3F,$FF,$FF FD11 3FFFFF FD14 FC03FC DB $FC,$03,$FC FD17 0000FFC000 ROMLINE3 DB $00,$00,$FF,$C0,$00,$03,$FF,$00 ;LINE 3 OF ... FD1C 03FF00 FD1F 000FFC0000 DB $00,$0F,$FC,$00,$00,$3F,$F0,$03 FD24 3FF003 FD27 FFC3FC DB $FF,$C3,$FC FD2A 0003FFF000 ROMLINE4 DB $00,$03,$FF,$F0,$00,$03,$FF,$00 ;LINE 4 OF AT... FD2F 03FF00 FD32 003FFF0000 DB $00,$3F,$FF,$00,$00,$3F,$F0,$00 FD37 3FF000 FD3A 3FC3FC DB $3F,$C3,$FC FD3D 00 ROMGRPH5 DB $00 ;NULL INFO FD3E 7C7F8F80 DB $7C,$7F,$8F,$80 ;LINE 5 FD42 7C7F8F80 DB $7C,$7F,$8F,$80 FD46 1F87F87E DB $1F,$87,$F8,$7E FD4A 0FF07F83FC DB $0F,$F0,$7F,$83,$FC FD4F 01FF807F80 DB $01,$FF,$80,$7F,$80,$7F,$E0 FD54 7FE0 FD56 1FFFF8007F DB $1F,$FF,$F8,$00,$7F,$80,$07,$FF,$FE FD5B 8007FFFE FD5F 1FF000007F DB $1F,$F0,$00,$00,$7F,$80,$00,$03,$FE FD64 800003FE FD68 000FF3FC00 DB $00,$0F,$F3,$FC,$00,$03,$FF,$00 ;LINE 5 OF ... FD6D 03FF00 FD70 00FF3FC000 DB $00,$FF,$3F,$C0,$00,$3F,$F0,$00 FD75 3FF000 FD78 FFC3FC DB $FF,$C3,$FC FD7B 003FC0FF00 DB $00,$3F,$C0,$FF,$00,$03,$FF,$00 ;LINE 6 OF ... FD80 03FF00 FD83 03FC0FF000 DB $03,$FC,$0F,$F0,$00,$3F,$F0,$3F FD88 3FF03F FD8B FC03FC DB $FC,$03,$FC FD8E 00FF003FC0 DB $00,$FF,$00,$3F,$C0,$03,$FF,$00 ;LINE 7 OF ... FD93 03FF00 FD96 0FF003FC00 DB $0F,$F0,$03,$FC,$00,$3F,$F0,$FF FD9B 3FF0FF FD9E C003FC DB $C0,$03,$FC FDA1 03FFFFFFF0 DB $03,$FF,$FF,$FF,$F0,$03,$FF,$00 ;LINE 8 OF ... FDA6 03FF00 FDA9 3FFFFFFF00 DB $3F,$FF,$FF,$FF,$00,$3F,$F0,$3F FDAE 3FF03F FDB1 F003FC DB $F0,$03,$FC FDB4 00 ROMGRPH4 DB $00 ;NULL INFO FDB5 7C7F8F80 DB $7C,$7F,$8F,$80 ;LINE 4 FDB9 7C7F8F80 DB $7C,$7F,$8F,$80 FDBD 1F87F87E DB $1F,$87,$F8,$7E FDC1 07F07F83F8 DB $07,$F0,$7F,$83,$F8 FDC6 00FFC07F80 DB $00,$FF,$C0,$7F,$80,$FF,$C0 FDCB FFC0 FDCD 1FFFFC007F DB $1F,$FF,$FC,$00,$7F,$80,$0F,$FF,$FE FDD2 800FFFFE FDD6 1FFC00007F DB $1F,$FC,$00,$00,$7F,$80,$00,$0F,$FE FDDB 80000FFE FDDF 0FFFFFFFFC DB $0F,$FF,$FF,$FF,$FC,$03,$FF,$00 ;LINE 9 OF ... FDE4 03FF00 FDE7 FFFFFFFFC0 DB $FF,$FF,$FF,$FF,$C0,$3F,$F0,$0F FDEC 3FF00F FDEF FC03FC DB $FC,$03,$FC FDF2 3FF00003FF DB $3F,$F0,$00,$03,$FF,$03,$FF,$03 ;LINE 10 OF... FDF7 03FF03 FDFA FF00003FF0 DB $FF,$00,$00,$3F,$F0,$3F,$F0,$03 FDFF 3FF003 FE02 FF03FC DB $FF,$03,$FC FE05 FFC00000FF DB $FF,$C0,$00,$00,$FF,$C3,$FF,$0F ;LINE 11 OF A... FE0A C3FF0F FE0D FC00000FFC DB $FC,$00,$00,$0F,$FC,$3F,$F0,$00 FE12 3FF000 FE15 FFC3FC DB $FF,$C3,$FC FE18 00 ROMGRPH3 DB $00 ;NULL INFO FE19 7C7F8F80 DB $7C,$7F,$8F,$80 ;LINE 3 FE1D 7C7F8F80 DB $7C,$7F,$8F,$80 FE21 0F87F87C DB $0F,$87,$F8,$7C FE25 07F07F83F8 DB $07,$F0,$7F,$83,$F8 FE2A 007FC07F80 DB $00,$7F,$C0,$7F,$80,$FF,$80 FE2F FF80 FE31 1FFFFE007F DB $1F,$FF,$FE,$00,$7F,$80,$1F,$FF,$FE FE36 801FFFFE FE3A 1FFF00007F DB $1F,$FF,$00,$00,$7F,$80,$00,$3F,$FE FE3F 80003FFE FE43 5555555555 ROMSTRIP DB $55,$55,$55,$55,$55,$55,$55,$55 ;RACING STR... FE48 555555 FE4B 5555555555 DB $55,$55,$55,$55,$55,$55,$55,$55 FE50 555555 FE53 55555555 DB $55,$55,$55,$55 FE57 00 ROMGRPH2 DB $00 ;NULL INFO FE58 7C7F8F80 DB $7C,$7F,$8F,$80 ;LINE 2 FE5C 7C7F8F80 DB $7C,$7F,$8F,$80 FE60 0FC7F8FC DB $0F,$C7,$F8,$FC FE64 03F07F83F0 DB $03,$F0,$7F,$83,$F0 FE69 003FE07F81 DB $00,$3F,$E0,$7F,$81,$FF,$00 FE6E FF00 FE70 01FFFE007F DB $01,$FF,$FE,$00,$7F,$80,$1F,$FF,$E0 FE75 801FFFE0 FE79 1FFFC0007F DB $1F,$FF,$C0,$00,$7F,$80,$00,$FF,$FE FE7E 8000FFFE FE82 AAAAAAAAAA DB $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA ;RACING STR... FE87 AAAAAA FE8A AAAAAAAAAA DB $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA FE8F AAAAAA FE92 AAAAAAAA DB $AA,$AA,$AA,$AA FE96 00 ROMGRPH1 DB $00 ;NULL INFO FE97 7C7F8F80 DB $7C,$7F,$8F,$80 ;LINE 1 FE9B 7C7F8F80 DB $7C,$7F,$8F,$80 FE9F 0FC7F8FC DB $0F,$C7,$F8,$FC FEA3 03F87F87F0 DB $03,$F8,$7F,$87,$F0 FEA8 001FE07F81 DB $00,$1F,$E0,$7F,$81,$FE,$00 FEAD FE00 FEAF 001FFF007F DB $00,$1F,$FF,$00,$7F,$80,$3F,$FE,$00 FEB4 803FFE00 FEB8 1FFFE0007F DB $1F,$FF,$E0,$00,$7F,$80,$01,$FF,$FE FEBD 8001FFFE FEC1 5555555555 DB $55,$55,$55,$55,$55,$55,$55,$55 ;RACING STR... FEC6 555555 FEC9 5555555555 DB $55,$55,$55,$55,$55,$55,$55,$55 FECE 555555 FED1 55555555 DB $55,$55,$55,$55 * NUMBERS.S NUMBERS FOR THE ENCRYPTION ~~~~~~~~~ * THIS IS A MASK APPLIED TO THE HI BYTE OF TH~~~~~~~~~~~ MAKE SURE... * LESS THAN N = 0007 NMASK EQU $07 * N = P*Q, THE BASIC MODULO OF DECRYPTION = 0077 NLEN EQU $77 FED5 09CAC9C6B4 N DB $09,$CA,$C9,$C6,$B4,$12,$08,$1B FEDA 12081B FEDD 6058814B86 DB $60,$58,$81,$4B,$86,$01,$D8,$BF FEE2 01D8BF FEE5 D925A07BDC DB $D9,$25,$A0,$7B,$DC,$32,$79,$84 FEEA 327984 FEED 3B7CBC2FE2 DB $3B,$7C,$BC,$2F,$E2,$E2,$FA,$8D FEF2 E2FA8D FEF5 0A003BC5EC DB $0A,$00,$3B,$C5,$EC,$AF,$2D,$8A FEFA AF2D8A FEFD CD06936AA5 DB $CD,$06,$93,$6A,$A5,$14,$46,$77 FF02 144677 FF05 C46AB25336 DB $C4,$6A,$B2,$53,$36,$EF,$8C,$CE FF0A EF8CCE FF0D 0CA26871D3 DB $0C,$A2,$68,$71,$D3,$73,$E8,$F7 FF12 73E8F7 FF15 6D06B520EF DB $6D,$06,$B5,$20,$EF,$23,$47,$0C FF1A 23470C FF1D 5155C8FEF4 DB $51,$55,$C8,$FE,$F4,$58,$C4,$3F FF22 58C43F FF25 20A76738B0 DB $20,$A7,$67,$38,$B0,$76,$E2,$C4 FF2A 76E2C4 FF2D D80563F83C DB $D8,$05,$63,$F8,$3C,$58,$3B,$2D FF32 583B2D FF35 22CC88B371 DB $22,$CC,$88,$B3,$71,$8F,$1D,$80 FF3A 8F1D80 FF3D 0A87BDA159 DB $0A,$87,$BD,$A1,$59,$23,$E9,$70 FF42 23E970 FF45 E2D3EC4668 DB $E2,$D3,$EC,$46,$68,$80,$42,$39 FF4A 804239 * END.S END OF CODE FF4D EA ENDROM2 NOP FFEE ORG $FFEE FFEE 4743432843 DB 'GCC(C)1984' FFF3 2931393834 FFF8 ORG $FFF8 FFF8 F0 DB $F0 ;CHECKSUM, MAKES EOR CHECK... FFF9 F7 DB $F7 ;CART STARTS AT $F000 - 7 ... FFFA 00F0 DW INTDLI ;INTERNAL GAME DLI HANDLER FFFC 84F8 DW MAIN FFFE 33F9 DW IRQINT 0000 END 00000 Total Error(s) ACC 1800 E ADACMOD0 F764 ADACMOD1 F76A ADACMOD2 F772 ADACMOD3 F777 ADDLOOP F764 ADDLOOP2 F770 ADDMOD F767 ADDOUT F77E AUDC0 0015 E AUDC1 0016 E AUDF0 0017 E AUDF1 0018 E AUDV0 0019 E AUDV1 001A E BACKGRND 0020 E BAD6116A 0001 E BAD6116B 0002 E BADCART F403 BADCPU 0000 E BADMARIA 0004 E BADRAM 0003 E BADVALID 0005 E CARTBOTM 00EE E CARTTEST F406 CHARBASE 0034 E CHKRAMB F8D0 CMACMOD F79F CMPLOOP F79F CMPMOD F7A2 CMPNEXT F7A8 CMPOUT F7A7 CODEDIF D100 E CPUERR F933 CPUERR0 F9EB CPUERR1 FA58 CPUTEST F938 CS0LOOP F464 CSALOOP F46D CSCCLOOP F4E5 CSCDLOOP F51B CSCDOUT F523 CSCFLOOP F4C2 CSCHECK F4F6 CSCHKDLI F512 CSCLOOP F4F8 CSCMOD0 F4FB CSCMOD1 F4FF CSCSLOOP F482 CSCTLOOP F4AA CSRLOOP F50B CSROTATE F509 CTA F943 CTB F948 CTC F959 CTCONT F9EE CTD F95E CTE F969 CTF F972 CTJSR FA91 CTJSRRET FA8E CTLSWA 0281 E CTLSWB 0283 E CTRL 003C E CTSHIFT FA5B CTSTLOOP F40E DCLOOP F633 DCMLOOP F668 DCMOD0 F668 DECRYPT F62D DEX F7E0 DFJMP0 FABE DFJMP1 FAC0 DFLOOP FABC DFNEXT FACB DIVCOMP F79D DIVIDE F6D8 DIVLOOP F714 DIVLOOP0 F6FF DIVNEXT F725 DIVOUT F72B DIVSUB F77F DLAJMP FAEB DLI FAAA DLIADDR 00F4 E DLIATARI FAD0 DLIDONE FB0C DLIOFSET FB0A DLJMP0 FB02 DONE F814 DPPH 002C E DPPL 0030 E DRLJMP0 FB7E DRLOOP FB2C DROPRAM FB28 DUMMY F811 E F7FD ENDDLI FB12 ENDROM F81B ENDROM2 FF4D FATAL_ F880 FUJICOLR 00EF E GRAPHON FB84 GRAPHON2 FB8B HSEROFF F759 INFLOOP FB14 INPT4 000C E INPT5 000D E INPTCTRL 0001 E INTDLI F000 E INTIM 0284 E IRQINT F933 KNLCOUNT 00F1 E KNLOFSET 00F3 E KNLSTATE 00F0 E KNLTIME 00F2 E L2LOOP F7BF LOCK2600 F7B9 MAIN F884 MARIAERR F8CB MDMRLOOP F64F MSTAT 0028 E MULCALP F685 MULLOOP F6AD MULLOOP0 F69B MULNEXT F6C0 MULOUT F6C8 MULTADD F761 MULTIPLY F672 MULTMASK F6D0 N FED5 NLEN 0077 E NMASK 0007 E NOCART F400 NOCHECK F4F3 OFFSET 0038 E OFFSETA 00E1 E OFFSETR 00E2 E OUT F806 P0C1 0021 E P0C2 0022 E P0C3 0023 E P1C1 0025 E P1C2 0026 E P1C3 0027 E P2C1 0029 E P2C2 002A E P2C3 002B E P3C1 002D E P3C2 002E E P3C3 002F E P4C1 0031 E P4C2 0032 E P4C3 0033 E P5C1 0035 E P5C2 0036 E P5C3 0037 E P6C1 0039 E P6C2 003A E P6C3 003B E P7C1 003D E P7C2 003E E P7C3 003F E RAMAERR F8D8 RAMAPAGE F923 RAMBERR F8DD RAMBPAGE F92B RAMCHECK F89A RAMCODE 2300 E RAMDLIST 2200 E RAMDLL 1F84 E RAMERR F8E2 RAMGRAPH 1984 E RAMPAT F91D RAMTEST F8E7 RANDBYTE 0004 E RCAGAIN F89C RCLOOP F8A1 RDL5BYTE FBC4 RDLFUJI1 FBCB RDLFUJI2 FBD1 RDLFUJI3 FBD7 RDLFUJI4 FBDD RDLFUJI5 FBE3 RDLFUJI6 FBE9 RDLFUJI7 FBEF RDLINE01 FC09 RDLINE02 FC0F RDLINE03 FC15 RDLINE04 FC1B RDLINE05 FC21 RDLINE06 FC27 RDLINE07 FC2D RDLINE08 FC33 RDLINE09 FC39 RDLINE10 FC3F RDLINE11 FC45 RDLRACE FBF5 RDLRACEL FBFF REG0 1900 E REG1 2000 E REG10 1E00 E REG12 1F00 E REG14 2100 E REG2 1A00 E REG4 1B00 E REG6 1C00 E REG8 1D00 E REGION 00FE E ROMCODE F400 E ROMCODE2 F880 E ROMDLIST FBBE ROMDLL FC4B ROMFUJI1 FCC7 ROMFUJI2 FCCB ROMFUJI3 FCCF ROMFUJI4 FCD3 ROMFUJI5 FCD8 ROMFUJI6 FCDF ROMFUJI7 FCE8 ROMGRAPH FCC6 ROMGRPH1 FE96 ROMGRPH2 FE57 ROMGRPH3 FE18 ROMGRPH4 FDB4 ROMGRPH5 FD3D ROMGRPH6 FCC6 ROMLINE1 FCF1 ROMLINE2 FD04 ROMLINE3 FD17 ROMLINE4 FD2A ROMSTRIP FE43 RTLOOP F902 RTPAGE F8F1 RTPAT F8FD S F525 SBACMOD0 F782 SBACMOD1 F788 SBACMOD2 F790 SBACMOD3 F795 SCREENOF FBA9 SCREENON FBAD SERLOOP F73A SEROUT F758 SERSLOOP F74A SERSMOD1 F74A SERSMOD2 F74E SETMARIA F7B0 SETREGS F730 SIZEA 00E3 E SIZER0 00E4 E SIZER1 00E5 E SIZER3 00E6 E SIZER5 00E7 E STACKPTR 00FF E STARTA 00E0 E STARTVND FB17 STRTCRPT FBBD SUBLOOP F782 SUBLOOP2 F78E SUBMOD F785 SUBOUT F79C SWCHA 0280 E SWCHB 0282 E SYNC F7CB T F52D TEMP0 0000 E TEMP1 0001 E TEMP2 0002 E TEMP3 0003 E TEMP4 0004 E TEMP5 0005 E TEST0 0000 E TEST1 0001 E TESTW0 0002 E TESTW1 0004 E TIA0LOOP FB1D TIM64T 0296 E TIM64TI 029E E TIM8T 0295 E WSYNC 0024 E ZEROLP F7CE