; Disassembly of bios7800.bin ; Disassembled Sun Mar 08 20:30:38 1998 ; Using DiStella v2.0 ; ; Comments added by Keith Henrickson ; Further commented by Daniel Boris ; They may be wrong. Use at your own risk. Modification suggested ; for bypassing authentication scheme is at this date untested. ; ; Command Line: E:\DISTELLA\DISTELLA.EXE -cbios7800.cfg bios7800.bin ; ; bios7800.cfg contents: ; ; ORG F000 ; CODE F000 F003 ; CODE F400 F52D ; CODE F636 F6D8 ; CODE F6E1 F761 ; CODE F76A F838 ; CODE F8E7 F91C ; CODE F9EE FBBD ; 7800 system INPTCTRL = $01 ; TIA VSYNC = $00 VBLANK = $01 WSYNC = $02 RSYNC = $03 COLUP0 = $06 COLUPF = $08 COLUBK = $09 PF2 = $0F RESP1 = $11 GRP0 = $1B GRP1 = $1C ;Maria BACKGRND= $20 POC1 = $21 POC2 = $22 POC3 = $23 WSYNC = $24 P1C1 = $25 P1C2 = $26 P1C3 = $27 MSTAT = $28 DPPH = $2C DPPL = $30 CTRL = $3C ; Addresses LF409 = $F409 LF412 = $F412 LF41B = $F41B LF460 = $F460 LF500 = $F500 LF639 = $F639 LF655 = $F655 LF659 = $F659 LF662 = $F662 LF66E = $F66E LF672 = $F672 LF679 = $F679 LF67C = $F67C LF68C = $F68C LF68F = $F68F LF690 = $F690 LF69A = $F69A LF69F = $F69F LF6A8 = $F6A8 LF6AD = $F6AD LF6B9 = $F6B9 LF6C2 = $F6C2 LF700 = $F700 LF800 = $F800 LF901 = $F901 LFA84 = $FA84 ORG $F000 LF000: PHA ; This is the NMI routine. JMP($00F4) ; RAM NMI vector is at $00F4. ; this code is designed to be executed while stored in ram at 2300. LF400: JMP $26C2 ; Enter 2600 mode. LF403: JMP $26C2 ; Enter 2600 mode. LF406: LDA #$16 ; ($2306) STA INPTCTRL ; Switch in Cart LF40A: LDY #$FF ; LDX #$7F ; LF40E: LDA LFE00,X ; CMP LFD80,Y ; BNE LF400 ; Switch to 2600 mode DEY ; DEX ; BPL LF40E ; Compares FE7F with FE7F two ways?? LDA LFFFC ; AND LFFFD ; CMP #$FF ; BEQ LF400 ; If RESET vector is FFFF, then go 2600. LDA LFFFC ; ORA LFFFD ; BEQ LF400 ; If RESET vector is 0000, then go 2600. LDA LFFF8 ; "Region verification" ORA #$FE ; CMP #$FF ; BNE LF403 ; If low-bit of FFF8=0, then go 2600. LDA LFFF8 ; EOR #$F0 ; Invert high nibble AND #$F0 ; Extract high nibble BNE LF403 ; If high nibble was not F, then go 2600. LDA LFFF9 ; AND #$0B ; Apply mask 00001011 CMP #$03 ; Low two bits must be set. Bit 2 can. Bit 3 not. BNE LF403 ; If low nibble FFF9 was not 3 or 7, go 2600. LDA LFFF9 ; AND #$F0 ; Extract ROM start STA $EE ; Store it STA $2406 ; Store it a couple of places for auth. (whocares) CMP #$40 ; BCC LF403 ; If ROM start < than 4, then go 2600 SBC #$01 ; Subtract 1. CMP LFFFD ; High byte of reset vector BCS LF403 ; If high-byte of start is >=, go 2600 JSR $2536 ; Start the authentication process. LDA #$00 STA $F0 JSR $241B LDA #$16 STA INPTCTRL LDX #$00 TXA LF46D: STA $1800,X DEX BNE LF46D PHA LDY #$7F LF476: LDA LFF00,Y STA $1800,Y DEY CPY #$F8 BNE LF476 LDA #$2E STA $2409 LDA #$24 STA $240A LF48B: JSR $241B PLA JSR $23FF PHA INC $2406 LDA $2406 CMP #$FF BNE LF48B JSR $241B JSR $2412 JSR $2412 LDA #$36 STA $2409 LDA #$24 STA $240A DEC $2406 LF4B3: JSR $241B PLA JSR $23FF PHA DEC $2406 LDA $2406 CMP $EE BCS LF4B3 LDA #$60 STA CTRL LDX #$77 LF4CB: LDA $1800,X EOR $1850,X EOR $1888,X STA $1A00,X DEX BPL LF4CB LDA $1A00 AND #$07 STA $1A00 LDA #$00 LDX #$04 STA $1A00,X STA $2000,X LDX #$77 ; That was a lot, but we end up here, comparing LF4EE: LDA $2000,X ; two parts of memory. If they match, then CMP $1A00,X ; go to 7800 mode.... BNE LF4FC ; otherwise go to 2600 mode. DEX ; NOP out above branch to allow user-written BPL LF4EE ; carts to run -- I think. JMP $26B9 ; 7800 mode init LF4FC: JMP $26C2 ; 2600 mode init. LDX #$00 ; more authentication stuff all the way through LF501: ADC $1800,X ADC LFF00,X TAY LDA $2DD5,Y STA $1800,X INX BNE LF501 RTS LDX #$00 LF514: ROL $1800,X INX BNE LF514 RTS PHP DEC $F0 BPL LF52C LDA #$02 STA INPTCTRL LF524: LDA $F0 BMI LF524 LDA #$16 STA INPTCTRL LF52C: PLP RTS LF52E: .byte $C7,$65,$AB,$CA,$EE,$F7,$83,$09 LF536: .byte $E1,$D0,$92,$67,$62,$B6,$72,$55,$8E,$91,$DC,$C5,$81,$BE,$78,$20 .byte $59,$B7,$E6,$3D,$06,$45,$AF,$C8,$08,$31,$38,$D1,$FB,$73,$84,$A9 .byte $17,$FC,$34,$87,$A3,$94,$FA,$90,$B8,$ED,$CE,$3B,$5B,$0A,$43,$D9 .byte $F3,$53,$82,$B3,$0D,$6D,$5A,$60,$9D,$51,$A7,$B9 LF572: .byte $11,$10,$BC,$E4,$7F,$80,$41,$E7,$E3 LF57B: .byte $F6,$56,$26,$35,$EC,$D6,$DF,$0C,$7F,$F4,$9E,$AC,$52,$46,$EF,$CF .byte $BF,$A2,$3F,$A4,$13,$15,$97,$4A,$1C,$B0,$42,$8C,$B1,$05,$58,$80 .byte $18,$77,$2B,$02,$3E,$A8,$49,$1A,$6A LF5A4: .byte $CB,$6E,$0B,$8A,$EB,$F1,$4F,$14,$79,$8B,$D8,$9F,$9B,$57,$19,$F8 .byte $2A,$2D,$76,$0E,$E8,$2E,$4B,$F9,$07,$03,$DE,$93,$16,$7E,$D4,$E5 .byte $B2,$F0,$7D,$7A,$DA,$D2,$A1,$CC,$1D,$E0,$5E,$23,$A0,$95,$22,$1E .byte $36,$85,$FE,$1F,$39 LF5D9: .byte $AA,$89,$96,$AD,$0F,$2F,$C0,$47 LF5E1: .byte $27,$5D,$24,$EA,$C3,$A5,$F5,$21,$5F,$1B,$40,$8F,$AE,$74,$25,$DD .byte $C1,$7C,$CD,$A6,$70,$D7,$33,$7B,$2C,$75,$BB,$86,$99,$BD,$54 LF600: .byte $9A,$6C,$63,$32,$48,$4C,$8D,$BA LF608: .byte $5C,$61,$C4,$4E,$29,$37,$12,$C6,$98,$9C,$D5,$69,$6B,$E2,$04,$4D .byte $E9,$C2,$88,$3A,$DB,$64,$01,$44,$6F,$B5,$F2,$30,$28,$FD,$50,$71 .byte $3C,$B4,$66,$68,$C9,$D3,$CA,$83,$C7,$AB,$F7,$65,$09,$EE LDX #$77 ;($2536) STX $E4 STX $E5 LF63C: LDA LFF80,X ;Read Key STA $1901,X ;Store it STA $2000,X ;Store it again DEX ;next byte of key BPL LF63C ;Continue LDA #$02 ; STA INPTCTRL ;Disable cart JSR LFB84 ;Init display JSR $257B DEC $F2 LDX #$77 STX $E4 LF658: LDA LFED5,X STA $1901,X DEX BPL LF658 LDA $E1 STA $E3 JSR $25E1 DEC $F2 LF66A: LDA $E0 STA $2572 LDX #$77 LF671: LDA $1800,X LF674: STA $2000,X DEX BPL LF671 RTS JSR $2639 ;($257B) LDY $E5 INY LF681: STY $E1 TYA CLC ADC $E2 PHA LF688: TAX LDA #$00 STA $2671 LF68E: STA $1800,X DEX LF692: BNE LF68E STA $1800 LF697: INY STY $266E STY $2674 STY $267C STY $2681 LDX #$00 LF6A6: DEC $266E LF6A9: DEC $2674 LF6AC: DEC $267C DEC $2681 DEC $E1 BMI LF6D1 LF6B6: LDY $E1 LDA $2000,Y AND $25D9,X BEQ LF6C9 LDA $2662,X STA $2672 JSR $266A LF6C9: INX CPX #$08 BMI LF6B6 JMP $25A4 LF6D1: PLA STA $E1 LDA #$01 STA $E0 RTS LF6D9: .byte $01,$02,$04,$08,$10,$20,$40,$80 JSR $2639 LDA $E3 SEC SBC $E4 STA $E0 STA $E1 LDX #$00 STX $1800 STX $268F STX $26AC DEX STX $26A9 STX $268C STX $2692 STX $269A STX $269F LDX #$07 INC $26A9 INC $268C INC $2692 INC $269A INC $269F DEC $E1 BMI LF734 LF71D: LDA $2662,X STA $2690 STA $26AD JSR $26A6 BCC LF72E JSR $2688 LF72E: DEX BPL LF71D JMP $2608 LF734: LDA $E3 STA $E1 RTS LDX $E4 ;($2639) INX STX $E2 LDY #$00 STY $1900 LF743: LDA $2662,Y STA $2655 INY LDA $2662,Y STA $2659 LDX $E2 CLC LF753: LDA $1900,X ROL A STA $1900,X DEX BPL LF753 CPY #$07 BMI LF743 RTS LF762: .byte $19,$1A,$1B,$1C,$1D,$1E,$1F,$21 LDY $E2 CLC LF76D: LDA $1800,Y ADC $1900,Y STA $1800,Y DEY BPL LF76D BCC LF787 LDA $1700,Y ADC #$00 STA $1700,Y DEY JMP $2679 LF787: RTS LDY $E2 SEC LF78B: LDA $1800,Y SBC $1900,Y STA $1800,Y DEY BPL LF78B BCS LF7A5 LDA $1700,Y SBC #$00 STA $1700,Y DEY JMP $2697 LF7A5: RTS LDY #$00 LDA $1800,Y CMP $1900,Y BEQ LF7B1 LF7B0: RTS LF7B1: CPY $E2 BEQ LF7B0 INY JMP $26A8 LF7B9: LDX #$16 ; finally, back to something important STX INPTCTRL ; switch out bios and use reset vector TXS ; on cart to start the game. SED JMP(LFFFC) ; Enable 2600 mode LF7C2: LDA #$02 ; Enable memory/bios STA INPTCTRL ; LDX #$7F LF7C8: LDA LF7D4,X ; again, copy code to ram.... STA $0480,X DEX BPL LF7C8 JMP $0480 ; execute it ; code executed at $0480 (RIOT RAM) LF7D4: LDA #$00 ; TAX ; STA INPTCTRL ; Disable 7800 RAM LF7D9: STA RSYNC,X ; Clear the TIA INX ; CPX #$2A ; BNE LF7D9 ; STA WSYNC ; wait for sync LDA #$04 ; NOP ; BMI LF80A LDX #$04 LF7E9: DEX BPL LF7E9 TXS STA $0110 JSR $04CB JSR $04CB STA RESP1 STA GRP0 STA GRP1 STA PF2 NOP STA WSYNC LDA #$00 NOP BMI LF80A BIT RSYNC BMI LF813 LF80A: LDA #$02 STA COLUBK STA LF112 BNE LF831 LF813: BIT WSYNC BMI LF823 LDA #$02 STA COLUP0 STA LF118 STA LF460 BNE LF831 LF823: STA DPPH LDA #$08 STA GRP0 JSR $04CB NOP BIT WSYNC BMI LF80A LF831: LDA #$FD STA COLUPF JMP(LFFFC) ; And use the reset vector on the cart to start NOP ; the 2600 game. LF880: LDA #$1D ; this is called any time the self-test fails. STA INPTCTRL ; Eanble TIA/Cart/lock out INPTCTRL START: SEI ; BIOS entry point. Disable interrupts CLD ; Clear decimal flag LDA #$02 ; LF888: STA INPTCTRL ; Enable 7800 RAM LDA #$FB ; STA $F5 ; LDA #$12 ; STA $F4 ; set nmi vector to FB12. (shares cleanup of irq) LDA #$7F ; STA CTRL ; Turn off DMA LDA #$00 ; STA BACKGRND ; Background color LDX #$05 ; LF89C: LDA LF91D,X ; looks icky, but it's just a ram test LDY #$00 ; LF8A1: STA $2000,Y ; CMP $2000,Y ; BNE LF8D0 ; Test failed STA $2100,Y ; CMP $2100,Y ; BNE LF8D0 ; Test failed DEY ; BNE LF8A1 ; DEX ; BPL LF89C ; and right down here, it passes LDA #$43 ; Check RAM 0 mirror STA $2080 ; CMP $80 ; BNE LF8CB ; make sure they match. If not, fail selftest. STA $2180 ; Check RAM 1 mirror CMP $0180 ; BNE LF8CB ; make sure they match. If not, fail selftest. JMP LF938 ; continue selftest LF8CB: LDY #$04 ; JMP LF880 ; selftest fail. LF8D0: STA $1800 ; test store and compare CMP $1800 BNE LF8E2 ; some kind of error code is being determined LF8D8: LDY #$01 JMP LF880 LF8DD: LDY #$04 JMP $F880 LF8E2: LDY #$03 JMP LF880 LF8E7: LDA #$00 ; this is a more comprehensive ram test than STA $F0 ; the first routine, and it is called after STA $F2 ; more of the selftest has completed. LDY #$07 STY $F4 LF8F1: LDA LF923,Y STA $F1 LDA LF92B,Y STA $F3 LDX #$05 LF8FD: LDA LF91D,X LF900: LDY #$00 LF902: STA ($F0),Y CMP ($F0),Y BNE LF8D8 STA ($F2),Y CMP ($F2),Y BNE LF8DD DEY BNE LF902 DEX BPL LF8FD DEC $F4 LDY $F4 BPL LF8F1 JMP LFB17 ; ram test passed, so jump in here. ; ram test data LF91D: .byte $00,$FF,$55,$AA,$69,$0F LF923: .byte $22,$23,$24,$25,$26,$27,$22,$23 LF92B: .byte $18,$19,$1A,$1B,$1C,$1D,$1E,$1F LF933: LDY #$00 ; local place for selftest fail branch target JMP LF880 ; 6502 CPU test LF938: LDA #$AA ; test some flags and branches BEQ LF933 ; test failed BPL LF933 ; test failed BMI LF943 ; test passed JMP LF933 ; test failed LF943: BNE LF948 ; test passed JMP LF933 ; test failed LF948: STA $AA ; store AA to 00AA CMP $AA ; compare it back BNE LF933 ; if it doesn't match, selftest fail LDA #$00 ; do some more flag tests BNE LF933 ; BMI LF933 ; BPL LF959 ; test passed JMP LF933 ; LF959: BEQ LF95E ; test passed JMP LF933 ; LF95E: CMP #$00 ; test the compare instruction BNE LF933 ; BCC LF933 ; BCS LF969 ; test passed, since they're equal JMP LF933 ; LF969: CMP #$01 ; compare it to 01 BCS LF933 ; BCC LF972 ; A < 01, so carry is clear JMP LF933 ; LF972: LDX #$55 ; test comparisons with the X register CPX #$56 ; BEQ LF933 ; STX $01AA ; CPX $01AA ; BNE LF933 ; LDY $AA ; and with the Y register. CPY #$AB ; LF984: BEQ LF933 ; STY $0155 ; put some stuff in the stack area to test stack CPY $0155 ; and then access this data in many diffeent ways BNE LF933 ; DEX ; TXS ; INX ; PLA ; CMP #$AA ; BNE LF9EB ; TXA ; PHA ; CPX $0155 ; BNE LF9EB ; TYA ; CMP #$AA ; BNE LF9EB ; TAX ; LDA $0100,X ; TAY ; CPY #$55 ; BNE LF9EB ; LDA VSYNC,X ; CMP $AA ; BNE LF9EB ; CMP #$AA ; BNE LF9EB ; EOR #$FF ; STA $0000,Y ; CMP $55 ; BNE LF9EB ; CMP $0100,Y ; BNE LF9EB ; CMP $20AB,X ; BNE LF9EB ; LDA #$20 ; STA $F1 ; LDA #$CC ; STA $F0 ; STA ($46,X) ; CMP $CC ; BNE LF9EB ; STA ($F0),Y ; CMP $2121 ; BNE LF9EB ; LDA #$EE ; test the indirect jump by setting up a jump STA $F0 ; to F9EE LDA #$F9 ; STA $F1 ; JMP($00F0) ; and do it. LF9E8: JMP $F9EB LF9EB: JMP LF933 LF9EE: LDA #$55 ; now test out the math functions. CLC ADC #$55 NOP BCS LF9EB ; test addition. BPL LF9EB BEQ LF9EB CMP #$AA ; make sure it worked BNE LF9EB ADC #$55 ; test addition again. LFA00: NOP BCC LF9EB BMI LF9EB BNE LF9EB SBC #$55 ; test subtraction BCS LF9EB BPL LF9EB BEQ LF9EB CMP #$AB ; make sure it worked BNE LF9EB CLC SBC #$AA ; test subtraction again BCC LF9EB BMI LF9EB BNE LF9EB LDA #$FF ; set up a stack TAX ; and do all kinds of stuff in it for tests INX BNE LFA58 DEX BEQ LFA58 BPL LFA58 CPX #$FF BNE LFA58 TAY INY BNE LFA58 DEY BEQ LFA58 INY BNE LFA58 STA $F0 INC $F0 BNE LFA58 CPY $F0 BNE LFA58 DEC $F0 BEQ LFA58 CMP $F0 BNE LFA58 LDA #$AA CLC ROL A ; now we get onto the more complex math instrs ROL A ROL A CMP #$52 BNE LFA58 ; make sure rotate left works. ROR A ROR A ROR A CMP #$AA BEQ LFA5B ; test rotate right LFA58: JMP LF933 ; fail! LFA5B: ASL A ; test arithmetic shift left BCC LFA58 ASL A BCS LFA58 ASL A CMP #$50 BNE LFA58 EOR #$05 LSR A ; and logical shift right BCC LFA58 LSR A BCS LFA58 LSR A CMP #$0A BNE LFA58 LDA #$55 ; now test the ands and ors. ORA #$1B CMP #$5F BNE LFA58 AND #$55 AND #$1B CMP #$11 BNE LFA58 ORA #$55 EOR #$1B ; and the eors CMP #$4E BNE LFA58 JSR LFA91 ; test jump subroutine instruction JMP LFA58 ; if we return, fail LFA91: TSX CPX #$52 ; check stack pointer BNE LFA58 ; fail if not right PLA CMP #$8D BNE LFA58 PLA CMP #$FA BNE LFA58 ; get the old return address off the stack LDA #$F8 PHA LDA #$E6 PHA ; and make our own RTS ; and 'return' to F8E7 JMP LFA58 ; another jump to catch a failure ; Interrupt routine NMI. LFAAA: TXA ;Save A PHA ; LDA #$43 ;Setup control register STA CTRL ; LDX #$0F ; Handle the color scrolling in the FUJI LDA $EF STA WSYNC ;Wait for Sync BIT $F3 BVC LFAC0 BPL LFABE LFABC: STA WSYNC ;Wait for 3 scanlines LFABE: STA WSYNC ; LFAC0: STA WSYNC ; SEC SBC #$10 CMP #$10 BCS LFACB SBC #$0F LFACB: STA WSYNC DEX BPL LFABC ;Branch to do next section of fuji LDX #$40 ;set 160x2/160x4 mode STX CTRL ; AND #$F0 ; ORA #$0E ;set Palette 1 color 3 STA P1C3 ; LDA $EF ; AND #$F0 ; ORA #$06 ;set Palette 1 color 1 STA P1C1 ; AND #$F0 CLC ADC #$40 BCC LFAEB ADC #$0F LFAEB: ORA #$03 ;set Palette 1 color 2 STA P1C2 DEC $F1 BPL LFB0C LDA $F3 ADC #$60 BCC LFB0A LDA $EF CLC ADC #$10 BCC LFB02 ADC #$0F LFB02: STA $EF LDA $F2 STA $F1 LDA #$00 LFB0A: STA $F3 LFB0C: LDA #$02 STA $F0 PLA TAX PLA RTI LFB14: JMP LFB14 LFB17: LDX #$FF ; selftest has passed, start system init TXS ; set up a stack LDA #$00 ; Clear TIA/Maria registers TAX ; LFB1D: STA $01,X ; ; INX ; CPX #$2C ; BNE LFB1D ; LDA #$02 ; STA INPTCTRL ; Enable 7800 RAM LDX #$00 ; STX BACKGRND ; Set background color LFB2C: LDA LF400,X ; copy the authentication and title screen to STA $2300,X ; ram LDA LF500,X ; STA $2400,X ; LDA LF600,X ; STA $2500,X ; LDA LF700,X ; STA $2600,X ; LDA LF800,X ; STA $2700,X ; LDA LFBBE,X ; STA $2200,X ; CPX #$00 ; BMI LFB7E ; LDA LFC4B,X ; STA $1F84,X ; LDA LFCC6,X ; STA $1984,X ; LDA LFD3D,X ; STA $1A84,X ; LDA LFDB4,X ; STA $1B84,X ; LDA LFE18,X ; STA $1C84,X ; LDA LFE57,X ; STA $1D84,X ; LDA LFE96,X ; STA $1E84,X ; LFB7E: DEX ; BNE LFB2C ; JMP $2306 ; and execute it ;Start display of Atari logo LFB84: LDA LFFF9 ; Read ROM start byte from cart AND #$04 ; Is rom start greater then $4000? BEQ LFBBD ; Branch if not LDA #$03 STA $F1 STA $F2 LDA #$49 STA $EF LDA #$66 ;Palette 1 Color 1 STA P1C1 ; LDA #$56 ;Palette 1 Color 2 STA P1C2 ; LDA #$2E ;Palette 1 Color 3 STA P1C3 ; LDA #$AA ;Set NMI vector to FAAA STA $F4 ; LDA #$FA ; STA $F5 ; LFBA9: BIT MSTAT ;Check VBLANK status BMI LFBA9 ;Wait till end of VBLANK LFBAD: BIT MSTAT ;Check BLANK status BPL LFBAD ;Wait for start of next VBLANK LDA #$84 ;Set Display list pointer to $1f84 STA DPPL ; LDA #$1F ; STA DPPH ; LDA #$43 ;Maria mode = DMA on/320A or 320C STA CTRL ; LFBBD: RTS ; ; Graphics and Display List Data LFBBE: ;$2200 Display Lists .byte $84,$1F,$19,$BB, ;$2200 Blank space $00,$00 .byte $84,$40,$19,$1F,$BB, ;$2206 First DL on screen $00,$00 .byte $85,$1C,$19,$4A, ;$220D Blank space before Fuji $00,$00 .byte $89,$1C,$19,$4A, ;$2213 Fuji line 1 $00,$00 .byte $8D,$1C,$19,$48, ;$2219 Fuji line 2 $00,$00 .byte $91,$1B,$19,$46, ;$221F Fuji line 3 $00,$00 .byte $96,$19,$19,$42, ;$2225 Fuji line 4 $00,$00 .byte $9D,$17,$19,$3E, ;$222B Fuji line 5 $00,$00 .byte $A6,$17,$19,$3E, ;$2231 Fuji line 6 $00,$00 .byte $AF,$2C,$1C,$00, ;$2237 Start of Atari $AF,$2C,$1C,$50, and between lines $00,$00 .byte $AF,$2C,$1D,$00, ;$2241 End of Atari $AF,$2C,$1D,$50, $00,$00 .byte $AF,$2D,$19,$28, ;$224B Atari line 1 $00,$00 .byte $C2,$2D,$19,$28, ;$2251 Atari line 2 $00,$00 .byte $D5,$2D,$19,$28, ;$2257 Atari line 3 $00,$00 .byte $E8,$2D,$19,$28, ;$225D Atari line 4 $00,$00 .byte $AF,$2D,$1A,$28, ;$2263 Atari line 5 $00,$00 .byte $C2,$2D,$1A,$28, ;$2269 Atari line 6 $00,$00 .byte $D5,$2D,$1A,$28, ;$226F Atari line 7 $00,$00 .byte $E8,$2D,$1A,$28, ;$2275 Atari line 8 $00,$00 .byte $AF,$2D,$1B,$28, ;$227B Atari line 9 $00,$00 .byte $C2,$2D,$1B,$28, ;$2281 Atari line 10 $00,$00 .byte $D5,$2D,$1B,$28, ;$2287 Atari line 11 $00,$00 ; $1F84 Display List List LFC4B: .byte $0F,$22,$06, ;Blank space $0F,$22,$00, ; $0F,$22,$00, ; $0F,$22,$00, ; $03,$22,$00, ; $85,$22,$0D, ;DLI $05,$22,$13, ;Draw Fuji $05,$22,$19, ; $05,$22,$1F, ; $05,$22,$25, ; $05,$22,$2B, ; $05,$22,$31, ; $0F,$22,$00, ;Blank area $01,$22,$37, ;Draw "ATARI" $00,$22,$4B, ;Line 1 $02,$22,$37, $00,$22,$51, ;Line 2 $02,$22,$37, $00,$22,$57, ;Line 3 $02,$22,$37, $00,$22,$5D, ;Line 4 $02,$22,$37, $00,$22,$63, ;Line 5 $02,$22,$37, $00,$22,$69, ;Line 6 $02,$22,$37, $00,$22,$6F, ;Line 7 $02,$22,$37, $00,$22,$75, ;Line 8 $02,$22,$37, $00,$22,$7B, ;Line 9 $02,$22,$37, $00,$22,$81, ;Line 10 $02,$22,$37, $00,$22,$87, ;Line 11 $01,$22,$41, $0F,$22,$00, ;Blank Space $0F,$22,$00, ; $0F,$22,$00, ; $0F,$22,$00, ; $0F,$22,$00 ; ;Atari data $19AF .byte $00,$00,$0C,$00,$3F,$FF,$FF,$FF,$F0,$00,$C0,$00,$00,$3F,$FF,$FF,$00,$03,$FC, $19C2 .byte $00,$00,$3F,$00,$3F,$FF,$FF,$FF,$F0,$03,$F0,$00,$00,$3F,$FF,$FF,$FC,$03,$FC, $19D5 .byte $00,$00,$FF,$C0,$00,$03,$FF,$00,$00,$0F,$FC,$00,$00,$3F,$F0,$03,$FF,$C3,$FC, $19E8 .byte $00,$03,$FF,$F0,$00,$03,$FF,$00,$00,$3F,$FF,$00,$00,$3F,$F0,$00,$3F,$C3,$FC $1AAF .byte $00,$0F,$F3,$FC,$00,$03,$FF,$00,$00,$FF,$3F,$C0,$00,$3F,$F0,$00,$FF,$C3,$FC, $1AC2 .byte $00,$3F,$C0,$FF,$00,$03,$FF,$00,$00,$FC,$0F,$F0,$00,$3F,$F0,$3F,$FC,$03,$FC, $1AD5 .byte $00,$FF,$00,$3F,$C0,$03,$FF,$00,$0F,$F0,$03,$FC,$00,$3F,$F0,$FF,$C0,$03,$FC, $1AE8 .byte $03,$FF,$FF,$FF,$F0,$03,$FF,$00,$3F,$FF,$FF,$FF,$00,$3F,$F0,$3F,$F0,$03,$FC $1BAF .byte $0F,$FF,$FF,$FF,$FC,$03,$FF,$00,$FF,$FF,$FF,$FF,$C0,$3F,$F0,$0F,$FC,$03,$FC, $1BC2 .byte $3F,$F0,$0F,$03,$FF,$03,$FF,$03,$FF,$00,$00,$3F,$F0,$3F,$F0,$03,$FF,$03,$FC, $1BD5 .byte $FF,$C0,$00,$00,$FF,$C3,$FF,$0F,$FC,$00,$00,$0F,$FC,$3F,$F0,$00,$FF,$C3,$FC ; $1984 LFCC6: .byte $00,$7C,$7F,$8F,$80,$FC,$7F,$8F,$C0,$1F,$87,$F8,$7E,$0F,$E0,$7F .byte $81,$FC,$07,$FF,$80,$7F,$80,$7F,$F8,$1F,$FF,$F0,$00,$7F,$80,$03 .byte $FF,$FE,$1F,$00,$00,$00,$7F,$80,$00,$00,$3E, ; $1A84 LFD3D: .byte $00,$7C,$7F,$8F,$80,$7C,$7F,$8F,$80,$1F,$87,$F8,$7E,$0F,$F0,$7F .byte $83,$FC,$01,$FF,$80,$7F,$80,$7F,$E0,$1F,$FF,$F8,$00,$7F,$80,$07 .byte $FF,$FE,$1F,$F0,$00,$00,$7F,$80,$00,$03,$FE, ; $1B84 LFDB4: .byte $00,$7C,$7F,$8F,$80,$7C,$7F,$8F,$80,$1F,$87,$F8,$7E,$07,$F0,$7F .byte $83,$F8,$00,$FF,$C0,$7F,$80,$FF,$C0,$1F,$FF,$FC,$00,$7F,$80,$0F .byte $FF LFDD5: .byte $FE,$1F,$FC,$00,$00,$7F,$80,$00,$0F,$FE, ; $1C84 LFE18: .byte $00,$7C,$7F,$8F,$80,$7C,$7F,$8F,$80,$0F,$87,$F8,$7C,$07,$F0,$7F .byte $83,$F8,$00,$7F,$C0,$7F,$80,$FF,$80,$1F,$FF,$FE,$00,$7F,$80,$1F .byte $FF,$FE,$1F,$FF,$00,$00,$7F,$80,$00,$3F,$FE,$55,$55,$55,$55,$55 .byte $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ; $1D84 LFE57: .byte $00,$7C,$7F,$8F,$80,$7C,$7F,$8F,$80,$0F,$C7,$F8,$FC,$03,$F0,$7F .byte $83,$F0,$00,$3F,$E0,$7F,$81,$FF,$00,$01,$FF,$FE,$00,$7F,$80,$1F .byte $FF,$E0,$1F,$FF,$C0,$00,$7F,$80,$00,$FF,$FE,$AA,$AA LFE84: .byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA .byte $AA,$AA ;$1E84 LFE96: .byte $00,$7C,$7F,$8F,$80,$7C,$7F,$8F,$80,$0F,$C7,$F8,$FC,$03,$F8,$7F .byte $87,$F0,$00,$1F,$E0,$7F,$81,$FE,$00,$00,$1F,$FF,$00,$7F,$80,$3F .byte $FE,$00,$1F,$FF,$E0,$00,$7F,$80,$01,$FF,$FE,$55,$55,$55,$55,$55 .byte $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 LFED5: .byte $09,$CA,$C9,$C6,$B4,$12,$08,$1B,$60,$58,$81,$4B,$86,$01,$D8,$BF .byte $D9,$25,$A0,$7B,$DC,$32,$79,$84,$3B,$7C,$BC,$2F,$E2,$E2,$FA,$8D .byte $0A,$00,$3B,$C5,$EC,$AF,$2D,$8A,$CD,$06,$93 LFF00: .byte $6A,$A5,$14,$46,$77,$C4,$6A,$B2,$53,$36,$EF,$8C,$CE,$0C,$A2,$68 .byte $71,$D3,$73,$E8,$F7,$6D,$06,$B5,$20,$EF,$23,$47,$0C,$51,$55,$C8 .byte $FE,$F4,$58,$C4,$3F,$20,$A7,$67,$38,$B0,$76,$E2,$C4,$D8,$05,$63 .byte $F8,$3C,$58,$3B,$2D,$22,$CC,$88,$B3,$71,$8F,$1D,$80,$0A,$87,$BD .byte $A1,$59,$23,$E9,$70,$E2,$D3,$EC,$46,$68,$80,$42,$39,$EA,$FF,$FF LFFEE: .byte $47,$43,$43,$28,$43,$29 ; 'GCC(C)' .byte $31,$39,$38,$34,$2D,$F7 ; '1984-' LFFFA: .byte $00,$F0 ; system vector - nmi LFFFC: .byte $84,$F8 ; system vector - reset LFFFE: .byte $AA,$FA ; system vector - irq