c64-devkit/source/main.asm
2017-03-26 12:56:52 +02:00

441 lines
4.1 KiB
NASM

screen = $0400
screenScroller = $0400+40*24
code = $0801
bitmap = $2000
charset = $3800
sprites = $3e00
bitmapColors = $4000
tables = $5000
music = $7000
musicPlay = $7003
bitmapScreen = $8000
colors = $d800
line1 = 0
line2 = 114
*= bitmap
!binary "graphics/logo-bitmap.dat",2544
*= charset
!binary "charset/charset.dat",800
*= sprites
!binary "sprites/sprites.dat"
*= bitmapColors
!binary "graphics/logo-colors.dat"
*= bitmapScreen
!binary "graphics/logo-screen.dat"
*= tables
sinTable1:
!source "tables/sin1.dat"
sinTable2:
!source "tables/sin2.dat"
!source "tables/sin2.dat"
sinTable3:
!source "tables/sin3.dat"
sinTable4:
!source "tables/sin4.dat"
colorTable:
!byte $06,$06,$0e,$03,$0d,$07,$0f,$01
!byte $01,$0f,$07,$0d,$03,$0e,$06,$06
colorTable2:
!byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
!byte $0b,$0b,$0c,$0c,$0c,$0c,$0c,$0f
!byte $0f,$03,$03,$07,$01,$01,$01,$01
!byte $01,$07,$03,$03,$0c,$0c,$0b,$0b
!byte $0b,$0b,$0b,$0b
infoText:
!scr "S github.com/cliffordcarnmo/c64-devkit S"
*= music
!binary "music/86400_7k.sid",,$7e
*= code
jsr $e544
jsr initSprites
lda #%00011110
sta $d018
sei
lda #$7f
sta $dc0d
sta $dd0d
lda $dc0d
lda $dd0d
lda #$01
sta $d01a
lda #$1b
sta $d011
lda #$35
sta $01
lda #line1
sta $d012
lda #<irq1
sta $fffe
lda #>irq1
sta $ffff
jsr music
jsr timerSetup
lda #$00
sta $d020
sta $d021
ldx #$00
writeText:
lda infoText,x
sta screen+40*24,x
lda #$01
sta colors+40*24,x
inx
cpx #40
bne writeText
ldx #$00
l:
lda bitmapColors,x
sta colors,x
lda bitmapScreen,x
sta $0400,x
inx
cpx #$ff
bne l
ldx #$00
l2:
lda bitmapColors+$ff,x
sta colors+$ff,x
lda bitmapScreen+$ff,x
sta screen+$ff,x
inx
cpx #$40
bne l2
lda #$02
sta $d800+40*24
sta $d827+40*24
cli
mainloop:
jsr plasma
jmp mainloop
irq1:
pha
txa
pha
tya
pha
lda #$ff
sta $d019
jsr graphicsMode
jsr musicPlay
jsr moveSprites
jsr colorCycle
inc $90
inc $92
lda #line2
sta $d012
lda #<irq2
sta $fffe
lda #>irq2
sta $ffff
pla
tay
pla
tax
pla
rti
irq2:
pha
txa
pha
tya
pha
lda #$ff
sta $d019
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jsr textMode
lda #line1
sta $d012
lda #<irq1
sta $fffe
lda #>irq1
sta $ffff
pla
tay
pla
tax
pla
rti
plasma:
ldy $64
!for i, 8, 23 {
ldx $90
lda sinTable2+i,x
adc $64
tax
lda sinTable1+i,x
sta screen+40*i,y
tax
lda colorTable-64,x
ora $dc09
and #$07
sta colors+40*i,y
}
inc $64
lda $64
cmp #40
beq zero64
rts
zero64:
lda #$00
sta $64
rts
initSprites:
lda #$f8
sta $07f8
lda #$f9
sta $07f9
lda #$fa
sta $07fa
lda #$fb
sta $07fb
lda #$fc
sta $07fc
lda #$fd
sta $07fd
lda #$fe
sta $07fe
lda #$ff
sta $07ff
lda #$01
sta $d025
lda #$06
sta $d026
lda #$02
sta $d027
sta $d028
sta $d029
sta $d02a
sta $d02b
sta $d02c
sta $d02d
sta $d02e
lda #%11111111
sta $d015
lda #%00000000
sta $d01b
lda #%11111111
sta $d01c
lda #%11000000
sta $d01d
sta $d017
lda #%00000000
sta $d010
rts
moveSprites:
ldx $92
lda sinTable4,x
sta $d000
lda sinTable3,x
sta $d001
inx
inx
inx
inx
inx
inx
inx
inx
lda sinTable4,x
sta $d002
lda sinTable3,x
sta $d003
inx
inx
inx
inx
inx
inx
inx
inx
lda sinTable4,x
sta $d004
lda sinTable3,x
sta $d005
inx
inx
inx
inx
inx
inx
inx
inx
lda sinTable4,x
sta $d006
lda sinTable3,x
sta $d007
inx
inx
inx
inx
inx
inx
inx
inx
lda sinTable4,x
sta $d008
lda sinTable3,x
sta $d009
inx
inx
inx
inx
inx
inx
inx
inx
lda sinTable4,x
sta $d00a
lda sinTable3,x
sta $d00b
lda #155
sta $d00c
lda #155
sta $d00d
lda #190
sta $d00e
lda #155
sta $d00f
rts
colorCycle:
lda colorTable2
sta colorTable2+36
ldx #$00
cl:
lda colorTable2+1,x
sta colorTable2,x
sta $dbc2,x
inx
cpx #36
bne cl
rts
timerSetup:
lda #$00
sta $dc0e
sta $dc0f
sta $dc0b
sta $dc0a
sta $dc09
sta $dc08
rts
textMode:
lda #%11001000
sta $d016
lda #%00011011
sta $d011
rts
graphicsMode:
lda #%11011000
sta $d016
lda #%00111011
sta $d011
rts