Created
October 16, 2019 09:09
-
-
Save claus/1c24f7e5ce57f1f874b9dfbb1da5603e to your computer and use it in GitHub Desktop.
6502 assembler intro for Flash Forward awards ceremony 2006 in Austin, Tx (FC64 emulator)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; FC64 Flashforward Trailer | |
; ========================= | |
; Basic: "1 SYS(2064)" | |
.a 0801 | |
.b 0d,08,01,00,9e,28,32,30,36,34,29,00,00,00,00 | |
; Initialization | |
SEI ; Disable interrupts | |
LDA #$7F ; Disable timer interrupts | |
STA $DC0D | |
LDA #$01 ; Enable raster interrupts | |
STA $D01A | |
LDA #$00 ; Init interrupt vector | |
STA $0314 | |
LDA #$09 | |
STA $0315 | |
LDA $D016 | |
AND #%11110111 | |
ORA #%00010111 | |
STA $D016 | |
LDA #51 ; trigger rasterline 51 | |
STA $D012 | |
LDA $D011 ; trigger rasterline high bit clear | |
AND #$7F | |
STA $D011 | |
LDX #0 ; copy screen codes for the 8 top and bottom rows | |
LDA $7000,X | |
STA $0400,X | |
LDA $70A0,X | |
STA $04A0,X | |
LDA $7200,X | |
STA $06A8,X | |
LDA $72A0,X | |
STA $0748,X | |
INX | |
CPX #160 | |
BNE $083E | |
LDA $D018 ; set character rom to $3000 | |
AND #%11110001 | |
ORA #%00001100 | |
STA $D018 | |
LDA #9 ; background color 2 (brown) | |
STA $D022 | |
LDA #0 ; background color 3 (black) | |
STA $D023 | |
LDA #0 ; border color (black) | |
STA $D020 | |
JSR $2000 ; initialize color ram | |
CLI | |
LDA $01 ; switch off basic | |
AND #$FE | |
STA $01 | |
JMP $087E ; endless | |
; smooth scroll counters | |
.a 08f2 | |
.b 07,00 | |
; top area | |
.a 0900 | |
LDA #8 ; orange background | |
STA $D021 | |
LDA $D016 ; scroll | |
AND #%11111000 | |
ORA $08F2 | |
STA $D016 | |
DEC $08F2 | |
DEC $08F2 | |
BPL $091D | |
LDA #7 | |
STA $08F2 | |
LDA #115 ; trigger rasterline 115 | |
STA $D012 | |
LDA #$00 ; set interrupt vector to $0A00 | |
STA $0314 | |
LDA #$0A | |
STA $0315 | |
LDA #$01 ; ack the raster interrupt | |
STA $D019 | |
JMP $EA31 ; continue irq | |
; middle area | |
.a 0A00 | |
LDA #0 ; black background | |
STA $D021 | |
LDA $D016 ; reset horizontal scroll | |
AND #%11100000 | |
ORA #%00000111 | |
STA $D016 | |
LDA #187 ; trigger rasterline 187 | |
STA $D012 | |
LDA #$00 ; set interrupt vector to $0B00 | |
STA $0314 | |
LDA #$0B | |
STA $0315 | |
LDA #$01 ; ack the raster interrupt | |
STA $D019 | |
JMP $EA31 ; continue irq | |
; bottom area | |
.a 0B00 | |
LDA #8 ; orange background | |
STA $D021 | |
LDA $D016 ; scroll | |
AND #%11110000 | |
ORA #%00010000 | |
ORA $08F3 | |
STA $D016 | |
LDX $08F3 | |
INX | |
INX | |
CPX #8 | |
BNE $0B1D | |
LDX #0 | |
STX $08F3 | |
LDA #255 ; trigger rasterline 255 | |
STA $D012 | |
LDA #$00 ; set interrupt vector to $0C00 | |
STA $0314 | |
LDA #$0C | |
STA $0315 | |
LDA #$01 ; ack the raster interrupt | |
STA $D019 | |
JMP $EA31 ; continue irq | |
; invisible part | |
; we do the heavy stuff here | |
.a 0C00 | |
LDA #51 ; trigger rasterline 51 | |
STA $D012 | |
LDA #$00 ; set interrupt vector back to $0900 | |
STA $0314 | |
LDA #$09 | |
STA $0315 | |
LDA #$01 ; ack the raster interrupt | |
STA $D019 | |
JSR $0D00 ; move characters in top area left, if needed | |
JSR $0E00 ; move characters in bottom area right, if needed | |
JSR $0F00 ; text ticker | |
JMP $EA31 ; continue irq | |
; check if we need to move characters in top area around | |
.a 0D00 | |
LDX $08F2 | |
CPX #7 | |
BNE $0D0A | |
JSR $0D20 | |
RTS | |
; move characters in top area left | |
.a 0D20 | |
LDX #0 | |
LDA $0401,X | |
STA $0400,X | |
LDA $0429,X | |
STA $0428,X | |
LDA $0451,X | |
STA $0450,X | |
LDA $0479,X | |
STA $0478,X | |
LDA $04A1,X | |
STA $04A0,X | |
LDA $04C9,X | |
STA $04C8,X | |
LDA $04F1,X | |
STA $04F0,X | |
LDA $0519,X | |
STA $0518,X | |
INX | |
CPX #39 | |
BNE $0D22 | |
LDA $041C | |
STA $0427 | |
LDA $0444 | |
STA $044F | |
LDA $046C | |
STA $0477 | |
LDA $0494 | |
STA $049F | |
LDA $04BC | |
STA $04C7 | |
LDA $04E4 | |
STA $04EF | |
LDA $050C | |
STA $0517 | |
LDA $0534 | |
STA $053F | |
RTS | |
; check if we need to move characters in bottom area around | |
.a 0E00 | |
LDA $08F3 | |
BNE $0E08 | |
JSR $0E20 | |
RTS | |
; move characters in bottom area right | |
.a 0E20 | |
LDX #38 | |
LDA $06A8,X | |
STA $06A9,X | |
LDA $06D0,X | |
STA $06D1,X | |
LDA $06F8,X | |
STA $06F9,X | |
LDA $0720,X | |
STA $0721,X | |
LDA $0748,X | |
STA $0749,X | |
LDA $0770,X | |
STA $0771,X | |
LDA $0798,X | |
STA $0799,X | |
LDA $07C0,X | |
STA $07C1,X | |
DEX | |
BPL $0E22 | |
LDA $06B3 | |
STA $06A8 | |
LDA $06DB | |
STA $06D0 | |
LDA $0703 | |
STA $06F8 | |
LDA $072B | |
STA $0720 | |
LDA $0753 | |
STA $0748 | |
LDA $077B | |
STA $0770 | |
LDA $07A3 | |
STA $0798 | |
LDA $07CB | |
STA $07C0 | |
RTS | |
.a 0EF0 | |
.b 50,00 | |
.a 0F00 | |
DEC $0EF0 | |
BEQ $0F50 | |
RTS | |
.a 0F50 | |
LDY #0 | |
LDX $0EF1 | |
LDA $7400,X | |
BEQ $0F66 | |
STA $05E0,Y | |
INX | |
INY | |
CPY #40 | |
BNE $0F55 | |
STX $0EF1 | |
LDA #$50 | |
STA $0EF0 | |
RTS | |
; initialize color ram | |
.a 2000 | |
LDX #39 | |
LDA #9 ; this is white (#1) with bit 3 set (multicolor) | |
STA $D800,X | |
STA $D828,X | |
STA $D850,X | |
STA $D878,X | |
STA $D8A0,X | |
STA $D8C8,X | |
STA $D8F0,X | |
STA $D918,X | |
STA $DAA8,X | |
STA $DAD0,X | |
STA $DAF8,X | |
STA $DB20,X | |
STA $DB48,X | |
STA $DB70,X | |
STA $DB98,X | |
STA $DBC0,X | |
LDA #1 | |
STA $D940,X | |
STA $D940,X | |
STA $D968,X | |
STA $D990,X | |
STA $D9B8,X | |
STA $D9E0,X | |
STA $DA08,X | |
STA $DA30,X | |
STA $DA58,X | |
DEX | |
BPL $2002 | |
RTS | |
; main font: stolen from Blue Max | |
.a 3000 | |
.b 00,00,00,00,00,00,00,00 | |
.b 7C,FE,EE,FE,EE,EE,EE,00 | |
.b FC,FE,EE,FC,EE,FE,FC,00 | |
.b 7C,FE,EE,E0,EE,FE,7C,00 | |
.b FC,FE,EE,EE,EE,FE,FC,00 | |
.b FE,FE,E0,FE,E0,FE,FE,00 | |
.b FE,FE,E0,FE,E0,E0,E0,00 | |
.b 7C,FE,E0,FE,EE,FE,7C,00 | |
.b EE,EE,EE,FE,EE,EE,EE,00 | |
.b FE,FE,38,38,38,FE,FE,00 | |
.b 0E,0E,0E,EE,EE,FE,7C,00 | |
.b EE,EE,EE,FC,EE,EE,EE,00 | |
.b E0,E0,E0,E0,E0,FE,FE,00 | |
.b C6,EE,FE,FE,EE,EE,EE,00 | |
.b FC,FE,EE,EE,EE,EE,EE,00 | |
.b 7C,FE,EE,EE,EE,FE,7C,00 | |
.b FC,FE,EE,FC,E0,E0,E0,00 | |
.b 7C,FE,EE,EE,EE,7C,0E,00 | |
.b FC,FE,EE,FC,EE,EE,EE,00 | |
.b 7C,FE,E0,7C,0E,FE,7C,00 | |
.b FE,FE,38,38,38,38,38,00 | |
.b EE,EE,EE,EE,EE,FE,7C,00 | |
.b EE,EE,EE,EE,EE,7C,38,00 | |
.b EE,EE,EE,FE,FE,EE,C6,00 | |
.b EE,EE,EE,7C,EE,EE,EE,00 | |
.b EE,EE,EE,7C,38,38,38,00 | |
.b FE,FE,0E,7C,E0,FE,FE,00 | |
.b 5D,00,00,00,00,00,00,00 | |
.b FF,07,0E,1C,38,70,E0,C0 | |
.b C0,E0,70,38,1C,0E,07,03 | |
.b 03,03,03,03,03,03,03,03 | |
.b 03,07,0F,1F,3B,73,E3,C3 | |
.b 00,00,00,00,00,00,00,00 | |
.b 55,55,55,55,55,55,55,55 | |
.b 03,03,03,03,03,03,03,03 | |
.b 57,57,57,57,57,57,57,57 | |
.b 00,00,00,00,00,00,00,00 | |
.b 00,00,00,00,00,00,00,00 | |
.b 03,03,0D,0D,35,35,D5,D5 | |
.b 57,57,5C,5C,70,70,C0,C0 | |
.b 00,00,00,00,03,0D,35,D5 | |
.b 03,0D,35,D5,55,55,55,55 | |
.b 55,55,55,55,57,5C,70,C0 | |
.b 57,5C,70,C0,00,00,00,00 | |
.b 00,00,00,00,00,00,00,00 | |
.b 18,3C,7E,FF,18,18,18,18 | |
.b 18,18,18,18,FF,7E,3C,18 | |
.b 18,18,18,18,00,00,00,00 | |
.b 3F,33,33,33,33,33,3F,00 | |
.b 3C,0C,0C,0C,0C,0C,3F,00 | |
.b 3F,33,03,3F,30,30,3F,00 | |
.b FC,FE,0E,7C,0E,FE,FC,00 | |
.b EE,EE,EE,7E,0E,0E,0E,00 | |
.b 3F,30,3F,03,03,33,3F,00 | |
.b 7E,FE,E0,FC,EE,FE,7C,00 | |
.b 3F,33,03,03,03,03,03,00 | |
.b 3F,33,3F,33,33,33,3F,00 | |
.b 7E,FE,EE,7E,0E,0E,0E,00 | |
.b 0C,33,33,3F,33,33,33,00 | |
.b 30,3C,33,3F,33,33,3F,00 | |
.b 00,3F,30,30,30,30,3F,00 | |
.b 03,03,3F,33,33,33,3F,00 | |
.b 3F,30,30,3C,30,30,3F,00 | |
.b 7C,FE,0E,1C,38,00,38,00 | |
.b 00,00,00,00,00,00,00,00 | |
.b 7C,FE,EE,FE,EE,EE,EE,00 | |
.b FC,FE,EE,FC,EE,FE,FC,00 | |
.b 7C,FE,EE,E0,EE,FE,7C,00 | |
.b FC,FE,EE,EE,EE,FE,FC,00 | |
.b FE,FE,E0,FE,E0,FE,FE,00 | |
.b FE,FE,E0,FE,E0,E0,E0,00 | |
.b 7C,FE,E0,FE,EE,FE,7C,00 | |
.b EE,EE,EE,FE,EE,EE,EE,00 | |
.b FE,FE,38,38,38,FE,FE,00 | |
.b 0E,0E,0E,EE,EE,FE,7C,00 | |
.b EE,EE,EE,FC,EE,EE,EE,00 | |
.b E0,E0,E0,E0,E0,FE,FE,00 | |
.b C6,EE,FE,FE,EE,EE,EE,00 | |
.b FC,FE,EE,EE,EE,EE,EE,00 | |
.b 7C,FE,EE,EE,EE,FE,7C,00 | |
.b FC,FE,EE,FC,E0,E0,E0,00 | |
.b 7C,FE,EE,EE,EE,7C,0E,00 | |
.b FC,FE,EE,FC,EE,EE,EE,00 | |
.b 7C,FE,E0,7C,0E,FE,7C,00 | |
.b FE,FE,38,38,38,38,38,00 | |
.b EE,EE,EE,EE,EE,FE,7C,00 | |
.b EE,EE,EE,EE,EE,7C,38,00 | |
.b EE,EE,EE,FE,FE,EE,C6,00 | |
.b EE,EE,EE,7C,EE,EE,EE,00 | |
.b EE,EE,EE,7C,38,38,38,00 | |
.b FE,FE,0E,7C,E0,FE,FE,00 | |
.b 5D,57,55,D9,D7,55,75,D5 | |
.b AE,3F,AD,3D,F5,F5,55,57 | |
.b 55,75,55,57,DD,75,FB,A7 | |
.b D5,D7,5D,55,D7,D5,B5,B7 | |
.b 00,00,00,00,00,00,00,00 | |
; custom font: arrow left | |
.a 3400 | |
.b 00,00,00,00,01,01,6a,6a | |
.b 00,00,06,06,a9,a9,7f,7f | |
.b 15,15,a9,a9,f9,f9,d9,d9 | |
.b 00,00,00,00,01,01,6a,6a | |
.b 00,00,06,06,a9,a9,7f,7f | |
.b 1a,1a,a7,a7,ff,ff,ff,ff | |
.b 9f,9f,ff,ff,ff,ff,ff,ff | |
.b ff,ff,ff,ff,ff,ff,ff,ff | |
.b e9,e9,69,69,a9,a9,aa,aa | |
.b 00,00,00,00,00,00,aa,aa | |
.b 00,00,00,00,00,00,a4,a4 | |
.b 00,00,06,06,ab,ab,ab,ab | |
.b 1a,1a,a7,a7,ff,ff,ff,ff | |
.b e4,e4,e4,e4,e4,e4,e4,e4 | |
.b aa,aa,aa,aa,aa,aa,aa,aa | |
.b a7,a7,aa,aa,aa,aa,aa,aa | |
.b ff,ff,9f,9f,aa,aa,aa,aa | |
.b ff,ff,ff,ff,7f,7f,a9,a9 | |
.b ff,ff,ff,ff,aa,aa,aa,aa | |
.b e4,e4,e4,e4,a4,a4,a4,a4 | |
.b 6a,6a,ea,ea,da,da,fa,fa | |
.b a4,a4,a4,a4,a4,a4,a4,a4 | |
.b aa,aa,aa,aa,06,06,00,00 | |
.b aa,aa,aa,aa,aa,aa,1a,1a | |
.b 6a,6a,01,01,00,00,00,00 | |
.b 55,55,00,00,00,00,00,00 | |
.b 54,54,00,00,00,00,00,00 | |
.b a9,a9,a9,a9,a9,a9,a9,a9 | |
.b a9,a9,a9,a9,a9,a9,15,15 | |
; custom font: arrow right | |
.a 3600 | |
.b 01,01,01,01,01,01,01,01 | |
.b 50,50,aa,aa,bd,bd,9f,9f | |
.b 00,00,40,40,a9,a9,f6,f6 | |
.b 00,00,00,00,00,00,a4,a4 | |
.b 00,00,00,00,00,00,6a,6a | |
.b 01,01,01,01,01,01,aa,aa | |
.b af,af,a7,a7,ab,ab,ab,ab | |
.b ff,ff,ff,ff,ff,ff,ff,ff | |
.b da,da,ff,ff,ff,ff,ff,ff | |
.b 90,90,6a,6a,fd,fd,ff,ff | |
.b 00,00,40,40,6a,6a,f6,f6 | |
.b 00,00,00,00,00,00,a4,a4 | |
.b 6f,6f,6f,6f,6f,6f,6f,6f | |
.b 90,90,6a,6a,ff,ff,ff,ff | |
.b 00,00,40,40,a8,a8,a8,a8 | |
.b 6f,6f,6f,6f,6a,6a,6a,6a | |
.b ff,ff,ff,ff,aa,aa,aa,aa | |
.b ff,ff,ff,ff,ab,ab,ab,ab | |
.b ff,ff,ff,ff,ff,ff,fd,fd | |
.b ff,ff,ff,ff,f6,f6,aa,aa | |
.b ff,ff,da,da,aa,aa,aa,aa | |
.b 6a,6a,aa,aa,aa,aa,aa,aa | |
.b a8,a8,a8,a8,a8,a8,a8,a8 | |
.b 6a,6a,6a,6a,6a,6a,6a,6a | |
.b aa,aa,aa,aa,aa,aa,aa,aa | |
.b a7,a7,af,af,9f,9f,bd,bd | |
.b ff,ff,ff,ff,f6,f6,aa,aa | |
.b ff,ff,da,da,aa,aa,aa,aa | |
.b 6a,6a,aa,aa,aa,aa,aa,aa | |
.b aa,aa,aa,aa,aa,aa,90,90 | |
.b a8,a8,a8,a8,40,40,00,00 | |
.b 55,55,00,00,00,00,00,00 | |
.b 55,55,01,01,01,01,01,01 | |
.b aa,aa,a9,a9,40,40,00,00 | |
.b a4,a4,00,00,00,00,00,00 | |
.b aa,aa,aa,aa,aa,aa,50,50 | |
; screen codes for the top 8 rows | |
.a 7000 | |
.b 20,20,20,20,20,80,81,82,20,20,20,20,20,20,20,20,80,81,82,20,20,20,20,20,20,20,20,80,81,82,20,20,20,20,20,20,20,20,80,81 | |
.b 20,20,83,84,85,86,87,88,89,8a,20,20,20,83,84,85,86,87,88,89,8a,20,20,20,83,84,85,86,87,88,89,8a,20,20,20,83,84,85,86,87 | |
.b 8b,8c,86,87,87,87,87,87,87,8d,20,8b,8c,86,87,87,87,87,87,87,8d,20,8b,8c,86,87,87,87,87,87,87,8d,20,8b,8c,86,87,87,87,87 | |
.b 8e,8f,90,91,87,87,87,92,92,93,20,8e,8f,90,91,87,87,87,92,92,93,20,8e,8f,90,91,87,87,87,92,92,93,20,8e,8f,90,91,87,87,87 | |
.b 8e,8e,8e,8e,8f,90,91,94,8e,95,20,8e,8e,8e,8e,8f,90,91,94,8e,95,20,8e,8e,8e,8e,8f,90,91,94,8e,95,20,8e,8e,8e,8e,8f,90,91 | |
.b 96,97,8e,8e,8e,8e,8e,8e,8e,95,20,96,97,8e,8e,8e,8e,8e,8e,8e,95,20,96,97,8e,8e,8e,8e,8e,8e,8e,95,20,96,97,8e,8e,8e,8e,8e | |
.b 20,20,98,96,97,8e,8e,9b,99,9a,20,20,20,98,96,97,8e,8e,9b,99,9a,20,20,20,98,96,97,8e,8e,9b,99,9a,20,20,20,98,96,97,8e,8e | |
.b 20,20,20,20,20,98,96,9c,20,20,20,20,20,20,20,20,98,96,9c,20,20,20,20,20,20,20,20,98,96,9c,20,20,20,20,20,20,20,20,98,96 | |
; screen codes for the bottom 8 rows | |
.a 7200 | |
.b 20,c0,c1,c2,c3,20,20,20,20,20,20,20,c0,c1,c2,c3,20,20,20,20,20,20,20,c0,c1,c2,c3,20,20,20,20,20,20,20,c0,c1,c2,c3,20,20 | |
.b c4,c5,c6,c7,c8,c9,ca,cb,20,20,20,c4,c5,c6,c7,c8,c9,ca,cb,20,20,20,c4,c5,c6,c7,c8,c9,ca,cb,20,20,20,c4,c5,c6,c7,c8,c9,ca | |
.b cc,c7,c7,c7,c7,c7,c7,c8,cd,ce,20,cc,c7,c7,c7,c7,c7,c7,c8,cd,ce,20,cc,c7,c7,c7,c7,c7,c7,c8,cd,ce,20,cc,c7,c7,c7,c7,c7,c7 | |
.b cf,d0,d1,c7,c7,d2,d3,d4,d5,d6,20,cf,d0,d1,c7,c7,d2,d3,d4,d5,d6,20,cf,d0,d1,c7,c7,d2,d3,d4,d5,d6,20,cf,d0,d1,c7,c7,d2,d3 | |
.b d7,d8,d9,da,db,dc,d8,d8,d8,d6,20,d7,d8,d9,da,db,dc,d8,d8,d8,d6,20,d7,d8,d9,da,db,dc,d8,d8,d8,d6,20,d7,d8,d9,da,db,dc,d8 | |
.b d7,d8,d8,d8,d8,d8,d8,d8,dd,de,20,d7,d8,d8,d8,d8,d8,d8,d8,dd,de,20,d7,d8,d8,d8,d8,d8,d8,d8,dd,de,20,d7,d8,d8,d8,d8,d8,d8 | |
.b df,e0,d8,d8,d8,dd,e1,e2,20,20,20,df,e0,d8,d8,d8,dd,e1,e2,20,20,20,df,e0,d8,d8,d8,dd,e1,e2,20,20,20,df,e0,d8,d8,d8,dd,e1 | |
.b 20,c0,e3,e1,e2,20,20,20,20,20,20,20,c0,e3,e1,e2,20,20,20,20,20,20,20,c0,e3,e1,e2,20,20,20,20,20,20,20,c0,e3,e1,e2,20,20 | |
.a 7400 | |
.b " AS3? " | |
.b " REAL CODERS DO ASSEMBLY " | |
.b " WAHLERS AND SCHALL PRESENT " | |
.b " FC64 " | |
.b " THE C64 EMULATOR FOR FLASHPLAYER 9 " | |
.b " EVERYTHING ELSE IS JUST SCRIPT " | |
.b 00 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment