Skip to content

Instantly share code, notes, and snippets.

@claus
Created October 16, 2019 09:09
Show Gist options
  • Save claus/1c24f7e5ce57f1f874b9dfbb1da5603e to your computer and use it in GitHub Desktop.
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)
; 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