new demo/intro draft
This commit is contained in:
parent
2c4130899c
commit
05ed319d93
@ -54,6 +54,14 @@ delayStatus:
|
|||||||
score:
|
score:
|
||||||
WORD
|
WORD
|
||||||
|
|
||||||
|
; vertical scroll intro
|
||||||
|
introYscroll:
|
||||||
|
BYTE
|
||||||
|
|
||||||
|
; raster line for interrupt
|
||||||
|
rasterLineInt:
|
||||||
|
BYTE
|
||||||
|
|
||||||
#if VERBOSE = 1
|
#if VERBOSE = 1
|
||||||
ECHO "data.asm @ ",LASTINIT,"len:",(. - LASTINIT)
|
ECHO "data.asm @ ",LASTINIT,"len:",(. - LASTINIT)
|
||||||
#endif
|
#endif
|
486
src/font.asm
486
src/font.asm
File diff suppressed because it is too large
Load Diff
@ -25,11 +25,16 @@ delay:
|
|||||||
; Status of the game (costants pre-processor defined, sort of enum)
|
; Status of the game (costants pre-processor defined, sort of enum)
|
||||||
ST_INTRO0 = 0
|
ST_INTRO0 = 0
|
||||||
ST_INTRO1 = 1
|
ST_INTRO1 = 1
|
||||||
ST_LEVEL_TITLE = 2
|
ST_INTRO2 = 2
|
||||||
ST_LEVEL_LOAD = 3
|
ST_INTRO3 = 3
|
||||||
ST_PLAY = 4
|
ST_INTRO4 = 4
|
||||||
ST_DELAY = 5
|
ST_MENURESET = 64
|
||||||
ST_END = 6
|
ST_MENU = 65
|
||||||
|
ST_LEVEL_TITLE = 128
|
||||||
|
ST_LEVEL_LOAD = 129
|
||||||
|
ST_PLAY = 130
|
||||||
|
ST_DELAY = 131
|
||||||
|
ST_END = 132
|
||||||
ST_PAUSE = 255
|
ST_PAUSE = 255
|
||||||
|
|
||||||
; Screen features
|
; Screen features
|
||||||
@ -79,7 +84,7 @@ intro3string:
|
|||||||
#if DEBUG = 1
|
#if DEBUG = 1
|
||||||
BYTE "DBG RELS"
|
BYTE "DBG RELS"
|
||||||
#else
|
#else
|
||||||
BYTE "(C) 2018"
|
BYTE "2017 (C) 2021"
|
||||||
#endif
|
#endif
|
||||||
BYTE #0
|
BYTE #0
|
||||||
levelIntroString:
|
levelIntroString:
|
||||||
@ -93,6 +98,15 @@ scoreString:
|
|||||||
noMoreLevelsString:
|
noMoreLevelsString:
|
||||||
BYTE "NO MORE LEVELS"
|
BYTE "NO MORE LEVELS"
|
||||||
BYTE #0
|
BYTE #0
|
||||||
|
introStringA1:
|
||||||
|
BYTE "RETROFFICINA"
|
||||||
|
BYTE #$0
|
||||||
|
introStringA2:
|
||||||
|
BYTE "AND"
|
||||||
|
BYTE #$0
|
||||||
|
introStringA3:
|
||||||
|
BYTE "GIOMBA"
|
||||||
|
BYTE #$0
|
||||||
|
|
||||||
; Levels
|
; Levels
|
||||||
; ----------------------------------------------------------------------
|
; ----------------------------------------------------------------------
|
||||||
|
297
src/intro1.asm
297
src/intro1.asm
@ -4,8 +4,301 @@ LASTINIT SET .
|
|||||||
|
|
||||||
; Currently statusIntro0 is the same as statusIntro1
|
; Currently statusIntro0 is the same as statusIntro1
|
||||||
; statusIntro1 has just been reserved for future use
|
; statusIntro1 has just been reserved for future use
|
||||||
statusIntro0:
|
statusIntro0 SUBROUTINE
|
||||||
statusIntro1:
|
lda introYscroll
|
||||||
|
|
||||||
|
.enter:
|
||||||
|
inc rasterLineInt
|
||||||
|
|
||||||
|
lda $d011
|
||||||
|
and #$07
|
||||||
|
cmp #$07
|
||||||
|
beq .nextline
|
||||||
|
inc $d011
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
rts
|
||||||
|
.nextline:
|
||||||
|
lda $d011
|
||||||
|
and #$f8
|
||||||
|
sta $d011
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda #$80
|
||||||
|
.clearLineLoop:
|
||||||
|
sta (dstPointer),y
|
||||||
|
iny
|
||||||
|
cpy #40
|
||||||
|
bne .clearLineLoop
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda dstPointer
|
||||||
|
adc #40
|
||||||
|
sta dstPointer
|
||||||
|
lda dstPointer + 1
|
||||||
|
adc #0
|
||||||
|
sta dstPointer + 1
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
.glgLoop:
|
||||||
|
lda GLGProgramsText,y
|
||||||
|
sta (dstPointer),y
|
||||||
|
iny
|
||||||
|
cpy #200
|
||||||
|
bne .glgLoop
|
||||||
|
|
||||||
|
dec introYscroll
|
||||||
|
beq .next
|
||||||
|
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.next:
|
||||||
|
lda #ST_INTRO1
|
||||||
|
sta status
|
||||||
|
rts
|
||||||
|
|
||||||
|
setupMagicInterrupt SUBROUTINE
|
||||||
|
; Store in $314 address of our custom interrupt handler
|
||||||
|
ldx #<.magicInterruptH
|
||||||
|
ldy #>.magicInterruptH
|
||||||
|
stx $314
|
||||||
|
sty $315
|
||||||
|
|
||||||
|
; Set raster beam to trigger interrupt at row
|
||||||
|
lda rasterLineInt
|
||||||
|
sta $d012
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.magicInterruptH:
|
||||||
|
; +36
|
||||||
|
dec $d019 ; +42, EOI
|
||||||
|
inc $d020 ; +48, white
|
||||||
|
bit $02 ; +51, timing
|
||||||
|
nop ; +53, timing
|
||||||
|
nop ; +55, timing
|
||||||
|
nop ; +57, timing
|
||||||
|
dec $d020 ; +63, black
|
||||||
|
|
||||||
|
; second line, +0
|
||||||
|
inc $0800 ; + 6, timing
|
||||||
|
inc $0800 ; +12, timing
|
||||||
|
inc $0800 ; +18, timing
|
||||||
|
inc $0800 ; +24, timing
|
||||||
|
inc $0800 ; +30, timing
|
||||||
|
inc $0800 ; +36, timing
|
||||||
|
inc $0800 ; +42, timing
|
||||||
|
inc $d020 ; +54, white
|
||||||
|
inc $0800 ; +60, timing
|
||||||
|
bit $02 ; +60, timing
|
||||||
|
dec $d020 ; +63, black
|
||||||
|
|
||||||
|
; set raster beam low
|
||||||
|
ldx #<.magicInterruptL
|
||||||
|
ldy #>.magicInterruptL
|
||||||
|
stx $314
|
||||||
|
sty $315
|
||||||
|
clc
|
||||||
|
lda rasterLineInt
|
||||||
|
adc #23
|
||||||
|
sta $d012
|
||||||
|
|
||||||
|
jmp $ea31
|
||||||
|
|
||||||
|
.magicInterruptL:
|
||||||
|
; +36
|
||||||
|
dec $d019 ; +42, EOI
|
||||||
|
inc $0800 ; +48, timing
|
||||||
|
inc $0800 ; +54, timing
|
||||||
|
inc $0800 ; +60, timing
|
||||||
|
bit $02 ; +63, timing
|
||||||
|
|
||||||
|
; newline
|
||||||
|
inc $d020 ; + 6, white
|
||||||
|
inc $0800 ; +12, timing
|
||||||
|
inc $0800 ; +18, timing
|
||||||
|
dec $d020 ; +24, black
|
||||||
|
inc $0800 ; +30, timing
|
||||||
|
inc $0800 ; +36, timing
|
||||||
|
inc $0800 ; +42, timing
|
||||||
|
inc $0800 ; +48, timing
|
||||||
|
inc $0800 ; +54, timing
|
||||||
|
inc $0800 ; +60, timing
|
||||||
|
bit $02 ; +63, timing
|
||||||
|
|
||||||
|
; newline
|
||||||
|
inc $d020 ; +6, white
|
||||||
|
inc $0800 ; +12, timing
|
||||||
|
inc $0800 ; +18, timing
|
||||||
|
dec $d020 ; +24, black
|
||||||
|
|
||||||
|
ldx #<irq
|
||||||
|
ldy #>irq
|
||||||
|
stx $314
|
||||||
|
sty $315
|
||||||
|
lda #$00
|
||||||
|
sta $d012
|
||||||
|
|
||||||
|
jmp $ea31
|
||||||
|
|
||||||
|
GLGProgramsText:
|
||||||
|
BYTE #$80,#$80,#$80,#$80,#$80,#$80,#$80,#$f0,#$f4,#$80,#$80,#$80,#$f0,#$f4,#$80,#$80,#$f0,#$f4,#$f1,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80
|
||||||
|
BYTE #$80,#$80,#$80,#$80,#$80,#$80,#$80,#$f5,#$80,#$80,#$f5,#$80,#$f5,#$80,#$80,#$80,#$f5,#$80,#$f5,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$f1,#$80,#$80,#$80,#$f0,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4
|
||||||
|
BYTE #$80,#$80,#$80,#$80,#$80,#$80,#$80,#$f5,#$80,#$f5,#$f5,#$80,#$f5,#$80,#$f5,#$80,#$fd,#$f4,#$f3,#$f0,#$f0,#$f1,#$f0,#$f1,#$f0,#$f0,#$fc,#$f0,#$fb,#$f1,#$f2,#$f1,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80
|
||||||
|
BYTE #$80,#$80,#$80,#$80,#$80,#$80,#$80,#$f2,#$f4,#$fc,#$f2,#$f4,#$f2,#$f4,#$fc,#$80,#$f5,#$80,#$80,#$f5,#$f2,#$f3,#$f2,#$fc,#$f5,#$f2,#$f3,#$f5,#$f5,#$f5,#$f4,#$f3,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80
|
||||||
|
BYTE #$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$f4,#$fa,#$f4,#$f4,#$f4,#$f4,#$f3,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$f3,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80,#$80
|
||||||
|
|
||||||
|
statusIntro1 SUBROUTINE
|
||||||
|
lda $d011
|
||||||
|
and #$07
|
||||||
|
cmp #$04
|
||||||
|
beq .next
|
||||||
|
inc $d011
|
||||||
|
inc rasterLineInt
|
||||||
|
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.next:
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
|
||||||
|
lda counter
|
||||||
|
cmp #$80
|
||||||
|
bne .end
|
||||||
|
lda counter + 1
|
||||||
|
cmp #$00
|
||||||
|
bne .end
|
||||||
|
|
||||||
|
; lda #ST_MENURESET
|
||||||
|
lda #ST_INTRO2
|
||||||
|
sta status
|
||||||
|
|
||||||
|
.end:
|
||||||
|
rts
|
||||||
|
|
||||||
|
statusIntro2 SUBROUTINE
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
|
||||||
|
; "RETROFFICINA"
|
||||||
|
lda #<introStringA1
|
||||||
|
sta srcStringPointer
|
||||||
|
lda #>introStringA1
|
||||||
|
sta srcStringPointer + 1
|
||||||
|
lda #$4e
|
||||||
|
sta dstScreenPointer
|
||||||
|
lda #$05
|
||||||
|
sta dstScreenPointer + 1
|
||||||
|
jsr printString
|
||||||
|
|
||||||
|
lda counter
|
||||||
|
cmp #$08
|
||||||
|
bne .end
|
||||||
|
lda counter + 1
|
||||||
|
cmp #$01
|
||||||
|
bne .end
|
||||||
|
lda #ST_INTRO3
|
||||||
|
sta status
|
||||||
|
|
||||||
|
.end:
|
||||||
|
rts
|
||||||
|
|
||||||
|
statusIntro3 SUBROUTINE
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
|
||||||
|
; "AND"
|
||||||
|
lda #<introStringA2
|
||||||
|
sta srcStringPointer
|
||||||
|
lda #>introStringA2
|
||||||
|
sta srcStringPointer + 1
|
||||||
|
lda #$a3
|
||||||
|
sta dstScreenPointer
|
||||||
|
lda #$05
|
||||||
|
sta dstScreenPointer + 1
|
||||||
|
jsr printString
|
||||||
|
|
||||||
|
lda counter
|
||||||
|
cmp #$86
|
||||||
|
bne .end
|
||||||
|
lda counter + 1
|
||||||
|
cmp #$01
|
||||||
|
bne .end
|
||||||
|
lda #ST_INTRO4
|
||||||
|
sta status
|
||||||
|
|
||||||
|
.end:
|
||||||
|
rts
|
||||||
|
|
||||||
|
statusIntro4 SUBROUTINE
|
||||||
|
jsr setupMagicInterrupt
|
||||||
|
|
||||||
|
; "GIOMBA"
|
||||||
|
lda #<introStringA3
|
||||||
|
sta srcStringPointer
|
||||||
|
lda #>introStringA3
|
||||||
|
sta srcStringPointer + 1
|
||||||
|
lda #$f1
|
||||||
|
sta dstScreenPointer
|
||||||
|
lda #$05
|
||||||
|
sta dstScreenPointer + 1
|
||||||
|
jsr printString
|
||||||
|
|
||||||
|
lda counter
|
||||||
|
cmp #$86
|
||||||
|
bne .end
|
||||||
|
lda counter + 1
|
||||||
|
cmp #$01
|
||||||
|
bne .end
|
||||||
|
lda #ST_INTRO4
|
||||||
|
sta status
|
||||||
|
|
||||||
|
.end:
|
||||||
|
rts
|
||||||
|
|
||||||
|
statusMenuReset SUBROUTINE
|
||||||
|
jsr multicolorOff
|
||||||
|
|
||||||
|
; Copy shade colors from costant table to color RAM for 2nd and 4th line of text
|
||||||
|
ldx #39
|
||||||
|
.colorShadeLoop:
|
||||||
|
lda colorshade,x
|
||||||
|
sta $d828,x ; 2nd line
|
||||||
|
sta $d878,x ; 4th line
|
||||||
|
dex
|
||||||
|
cpx #$ff
|
||||||
|
bne .colorShadeLoop
|
||||||
|
|
||||||
|
; Print website
|
||||||
|
lda #<intro2string ; lsb of string address
|
||||||
|
sta srcStringPointer ; put into lsb of source pointer
|
||||||
|
lda #>intro2string ; do the same for msb of string address
|
||||||
|
sta srcStringPointer + 1 ; put into msb of source pointer
|
||||||
|
lda #$9e ; this is lsb of address of 23th line
|
||||||
|
sta dstScreenPointer ; put into lsb of dest pointer
|
||||||
|
lda #$07 ; do the same for msb of adress of 20th line
|
||||||
|
sta dstScreenPointer + 1 ; put into msb of dest pointer
|
||||||
|
jsr printString ; print
|
||||||
|
|
||||||
|
; Print Copyright
|
||||||
|
lda #<intro3string ; the assembly is the same as above,
|
||||||
|
sta srcStringPointer ; just change string to be printed
|
||||||
|
lda #>intro3string ; and line (24th line)
|
||||||
|
sta srcStringPointer + 1
|
||||||
|
lda #$ce
|
||||||
|
sta dstScreenPointer
|
||||||
|
lda #$07
|
||||||
|
sta dstScreenPointer + 1
|
||||||
|
jsr printString
|
||||||
|
|
||||||
|
jsr setupMagicInterrupt ; never forget the magic
|
||||||
|
|
||||||
|
lda #ST_MENU
|
||||||
|
sta status
|
||||||
|
rts
|
||||||
|
|
||||||
|
statusMenu SUBROUTINE
|
||||||
|
jsr setupMagicInterrupt ; never forget to draw the lines
|
||||||
; Decrement interrupt divider for the intro
|
; Decrement interrupt divider for the intro
|
||||||
ldx introCounter
|
ldx introCounter
|
||||||
dex
|
dex
|
||||||
|
@ -4,50 +4,36 @@ LASTINIT SET .
|
|||||||
|
|
||||||
; Intro reset
|
; Intro reset
|
||||||
; ----------------------------------------------------------------------
|
; ----------------------------------------------------------------------
|
||||||
introreset:
|
introreset SUBROUTINE
|
||||||
jsr multicolorOff
|
jsr multicolorOff
|
||||||
|
|
||||||
jsr clearScreen
|
jsr clearScreen
|
||||||
|
|
||||||
; Copy shade colors from costant table to color RAM for 2nd and 4th line of text
|
|
||||||
ldx #39
|
|
||||||
introresetColorShade
|
|
||||||
lda colorshade,x
|
|
||||||
sta $d828,x ; 2nd line
|
|
||||||
sta $d878,x ; 4th line
|
|
||||||
dex
|
|
||||||
cpx #$ff
|
|
||||||
bne introresetColorShade
|
|
||||||
|
|
||||||
; Set screen colors
|
; Set screen colors
|
||||||
lda #0
|
lda #0
|
||||||
sta $d020 ; overscan
|
sta $d020 ; overscan
|
||||||
sta $d021 ; center
|
sta $d021 ; center
|
||||||
|
|
||||||
; Print website
|
lda #14
|
||||||
lda #<intro2string ; lsb of string address
|
sta introYscroll
|
||||||
sta srcStringPointer ; put into lsb of source pointer
|
|
||||||
lda #>intro2string ; do the same for msb of string address
|
|
||||||
sta srcStringPointer + 1 ; put into msb of source pointer
|
|
||||||
lda #$26 ; this is lsb of address of 20th line
|
|
||||||
sta dstScreenPointer ; put into lsb of dest pointer
|
|
||||||
lda #$07 ; do the same for msb of adress of 20th line
|
|
||||||
sta dstScreenPointer + 1 ; put into msb of dest pointer
|
|
||||||
jsr printString ; print
|
|
||||||
|
|
||||||
; Print Copyright
|
ldx #$78
|
||||||
lda #<intro3string ; the assembly is the same as above,
|
stx dstPointer
|
||||||
sta srcStringPointer ; just change string to be printed
|
ldy #$04
|
||||||
lda #>intro3string ; and line (21th line)
|
sty dstPointer + 1
|
||||||
sta srcStringPointer + 1
|
|
||||||
lda #$58
|
|
||||||
sta dstScreenPointer
|
|
||||||
lda #$07
|
|
||||||
sta dstScreenPointer + 1
|
|
||||||
jsr printString
|
|
||||||
|
|
||||||
rts
|
lda #68+19
|
||||||
|
sta rasterLineInt
|
||||||
|
|
||||||
|
#if DEBUG = 1
|
||||||
|
ldy #$00
|
||||||
|
.charsetLoop:
|
||||||
|
tya
|
||||||
|
sta $4c8,y
|
||||||
|
iny
|
||||||
|
bne .charsetLoop
|
||||||
|
#endif
|
||||||
|
|
||||||
#if VERBOSE = 1
|
#if VERBOSE = 1
|
||||||
ECHO "introreset.asm @ ",LASTINIT,"len:",(. - LASTINIT)
|
ECHO "introreset.asm @ ",LASTINIT,"len:",(. - LASTINIT)
|
||||||
#endif
|
#endif
|
||||||
|
@ -63,16 +63,32 @@ zeroFillZeroPage:
|
|||||||
; Reset screen (and other parameters) to play intro
|
; Reset screen (and other parameters) to play intro
|
||||||
jsr introreset
|
jsr introreset
|
||||||
|
|
||||||
intro0running: ; Cycle here until SPACE or `Q` is pressed
|
menu SUBROUTINE
|
||||||
|
.menu: ; Cycle here until SPACE or `Q` is pressed
|
||||||
jsr $ffe4 ; GETIN
|
jsr $ffe4 ; GETIN
|
||||||
cmp #$20 ; Is it SPACE?
|
cmp #$20 ; Is it SPACE?
|
||||||
beq intro0end ; if yes, go to intro0end and start game (see)
|
beq .intro0end ; if yes, go to intro0end and start game (see)
|
||||||
|
#if DEBUG = 1
|
||||||
|
cmp #$41 ; Is it A?
|
||||||
|
beq .printCounter ; if yes, print current counter
|
||||||
|
#endif
|
||||||
cmp #$51 ; Is it Q?
|
cmp #$51 ; Is it Q?
|
||||||
bne intro0running ; If not, keep looping here,
|
bne .menu ; If not, keep looping here,
|
||||||
jmp $fce2 ; else, reset the computer
|
jmp $fce2 ; else, reset the computer
|
||||||
|
|
||||||
|
#if DEBUG = 1
|
||||||
|
.printCounter
|
||||||
|
lda counter + 1
|
||||||
|
ldy #2
|
||||||
|
jsr printByte
|
||||||
|
lda counter
|
||||||
|
ldy #4
|
||||||
|
jsr printByte
|
||||||
|
jmp .menu
|
||||||
|
#endif
|
||||||
|
|
||||||
; Intro is finished, now it's time to start the proper game
|
; Intro is finished, now it's time to start the proper game
|
||||||
intro0end:
|
.intro0end:
|
||||||
; Set current level pointer to list start
|
; Set current level pointer to list start
|
||||||
lda #<levelsList
|
lda #<levelsList
|
||||||
sta levelPointer
|
sta levelPointer
|
||||||
@ -92,20 +108,21 @@ intro0end:
|
|||||||
lda #ST_LEVEL_TITLE
|
lda #ST_LEVEL_TITLE
|
||||||
sta status
|
sta status
|
||||||
|
|
||||||
endless:
|
.endless:
|
||||||
; Loop waiting for gameover
|
; Loop waiting for gameover
|
||||||
lda status
|
lda status
|
||||||
cmp #ST_END ; is status equal to end ?
|
cmp #ST_END ; is status equal to end ?
|
||||||
bne endless ; if not, just wait looping here, else...
|
bne .endless ; if not, just wait looping here, else...
|
||||||
|
|
||||||
jsr introreset ; reset variables for intro
|
jsr clearScreen
|
||||||
lda #ST_INTRO0
|
|
||||||
sta status ; put machine into play intro status
|
lda #ST_MENURESET
|
||||||
jmp intro0running ; and go there waiting for keypress
|
sta status ; put machine into menu status
|
||||||
|
jmp .menu ; and go there waiting for keypress
|
||||||
|
|
||||||
; Interrupt Handler
|
; Interrupt Handler
|
||||||
; ----------------------------------------------------------------------
|
; ----------------------------------------------------------------------
|
||||||
irq:
|
irq SUBROUTINE
|
||||||
; Things that must be done every interrupt (50Hz)
|
; Things that must be done every interrupt (50Hz)
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
; Acknoweledge IRQ
|
; Acknoweledge IRQ
|
||||||
@ -118,24 +135,68 @@ irq:
|
|||||||
tya
|
tya
|
||||||
pha
|
pha
|
||||||
|
|
||||||
|
#if DEBUG = 1
|
||||||
|
; Change background to show how much time does music take for each interrupt
|
||||||
|
lda #1
|
||||||
|
sta $d020
|
||||||
|
#endif
|
||||||
|
|
||||||
|
; if interrupt raster line is not 0, then someone is doing some magic elsewhere
|
||||||
|
lda $d012
|
||||||
|
;bne .noPlay
|
||||||
|
; Play music first -> no skew if computations are slow
|
||||||
|
jsr sidtune + 3
|
||||||
|
.noPlay:
|
||||||
|
|
||||||
#if DEBUG = 1
|
#if DEBUG = 1
|
||||||
; Change background to visually see the ISR timing
|
; Change background to visually see the ISR timing
|
||||||
lda #2
|
lda #2
|
||||||
sta $d020
|
sta $d020
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
inc counter
|
||||||
|
bne .noIncCounter
|
||||||
|
inc counter + 1
|
||||||
|
.noIncCounter
|
||||||
|
|
||||||
; Check status and call appropriate sub-routine
|
; Check status and call appropriate sub-routine
|
||||||
; Sort of switch-case
|
; Sort of switch-case
|
||||||
lda status
|
lda status
|
||||||
|
checkStatusIntro0:
|
||||||
cmp #ST_INTRO0
|
cmp #ST_INTRO0
|
||||||
bne checkStatusIntro1
|
bne checkStatusIntro1
|
||||||
jsr statusIntro0
|
jsr statusIntro0
|
||||||
jmp checkEndStatus
|
jmp checkEndStatus
|
||||||
checkStatusIntro1:
|
checkStatusIntro1:
|
||||||
cmp #ST_INTRO1
|
cmp #ST_INTRO1
|
||||||
bne checkStatusPlay
|
bne checkStatusIntro2
|
||||||
jsr statusIntro1
|
jsr statusIntro1
|
||||||
jmp checkEndStatus
|
jmp checkEndStatus
|
||||||
|
checkStatusIntro2:
|
||||||
|
cmp #ST_INTRO2
|
||||||
|
bne checkStatusIntro3
|
||||||
|
jsr statusIntro2
|
||||||
|
jmp checkEndStatus
|
||||||
|
checkStatusIntro3:
|
||||||
|
cmp #ST_INTRO3
|
||||||
|
bne checkStatusIntro4
|
||||||
|
jsr statusIntro3
|
||||||
|
jmp checkEndStatus
|
||||||
|
checkStatusIntro4:
|
||||||
|
cmp #ST_INTRO4
|
||||||
|
bne checkStatusMenuReset
|
||||||
|
jsr statusIntro4
|
||||||
|
jmp checkEndStatus
|
||||||
|
checkStatusMenuReset:
|
||||||
|
cmp #ST_MENURESET
|
||||||
|
bne checkStatusMenu
|
||||||
|
jsr statusMenuReset
|
||||||
|
jmp checkEndStatus
|
||||||
|
checkStatusMenu:
|
||||||
|
cmp #ST_MENU
|
||||||
|
bne checkStatusPlay
|
||||||
|
jsr statusMenu
|
||||||
|
jmp checkEndStatus
|
||||||
checkStatusPlay:
|
checkStatusPlay:
|
||||||
cmp #ST_PLAY
|
cmp #ST_PLAY
|
||||||
bne checkStatusDelay
|
bne checkStatusDelay
|
||||||
@ -158,19 +219,6 @@ checkStatusLevelLoad:
|
|||||||
jmp checkEndStatus
|
jmp checkEndStatus
|
||||||
checkEndStatus:
|
checkEndStatus:
|
||||||
|
|
||||||
#if DEBUG = 1
|
|
||||||
; Change background to show how much time does music take for each interrupt
|
|
||||||
lda #1
|
|
||||||
sta $d020
|
|
||||||
#endif
|
|
||||||
|
|
||||||
; Play music
|
|
||||||
jsr sidtune + 3
|
|
||||||
; jsr sidtune + 3
|
|
||||||
; jsr sidtune + 3
|
|
||||||
; jsr sidtune + 3
|
|
||||||
; jsr sidtune + 3
|
|
||||||
|
|
||||||
; Increase random value
|
; Increase random value
|
||||||
inc random
|
inc random
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ clearScreen SUBROUTINE
|
|||||||
sta $500,x
|
sta $500,x
|
||||||
sta $600,x
|
sta $600,x
|
||||||
sta $700,x
|
sta $700,x
|
||||||
lda #$05
|
lda #$0f
|
||||||
sta $d800,x
|
sta $d800,x
|
||||||
sta $d900,x
|
sta $d900,x
|
||||||
sta $da00,x
|
sta $da00,x
|
||||||
|
@ -26,6 +26,9 @@ strlenString DS 2
|
|||||||
srcPointer DS 2
|
srcPointer DS 2
|
||||||
dstPointer DS 2
|
dstPointer DS 2
|
||||||
|
|
||||||
|
; Interrupt counter
|
||||||
|
counter DS 2
|
||||||
|
|
||||||
; Note: Locations $90-$FF in zeropage are used by kernal
|
; Note: Locations $90-$FF in zeropage are used by kernal
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user