Files
scorch_src/artwork/CartMenu/menu.asm
T
2023-08-07 21:32:24 +02:00

235 lines
4.5 KiB
NASM

icl '../../Atari/lib/ATARISYS.ASM'
icl '../../Atari/lib/MACRO.ASM'
.zpvar dliCounter .byte = $80
.zpvar TetryxColor .byte
.zpvar TetryxColorS .byte
org $2000
WeaponFont
ins '../weapons_AW6_mod.fnt' ; 'artwork/weapons.fnt'
LogoFont
ins 'Scorch_logo_mod_AW.fnt'
main
lda #0
sta dmactls
jsr WaitOneFrame
lda #0
sta TetryxColor
sta TetryxColorS
lda RANDOM
bmi TnotVisible
lda colors+2 ; visible
sta TetryxColor
TnotVisible
lda #0
ldx #3
@ sta COLOR0-1,x
dex
bpl @-
mva #>LogoFont chbas
mwa #MenuDL dlptrs
VMAIN VBLinterrupt,7 ;jsr SetVBL
SetDLI DLIinterrupt
lda #@dmactl(narrow|dma) ; narrow screen width, DL on, P/M off
sta dmactls
jsr WaitOneFrame
jsr FadeIn
jsr WaitOneFrame
jsr GetKey
jsr WaitOneFrame
jsr FadeOut
VMAIN XITVBV,7 ; jsr SetVBL (off user proc)
LDA #%01000000 ; DLI off
STA NMIEN
lda #0 ; DL off, P/M off
sta dmactls
jsr WaitOneFrame
jmp main
stop
jmp stop
;--------------------------------------------------
.proc FadeIn
ldy #15
FirstLoop
ldx #3
@ lda COLOR0-1,x
cmp colors,x
beq ColorOK
inc COLOR0-1,x
ColorOK
dex
bpl @-
lda TetryxColorS
cmp TetryxColor
beq TcolorOK
inc TetryxColorS
TcolorOK
jsr WaitOneFrame
dey
bpl FirstLoop
rts
.endp
;--------------------------------------------------
.proc FadeOut
ldy #15
FirstLoop
ldx #3
@ lda COLOR0-1,x
beq ColorOK
dec COLOR0-1,x
ColorOK
dex
bpl @-
lda TetryxColorS
beq TcolorOK
dec TetryxColorS
TcolorOK
jsr WaitOneFrame
dey
bpl FirstLoop
rts
.endp
;--------------------------------------------------
.proc DLIinterrupt
pha
lda dliCounter
bne SecondDLI
FirstDLI
mva #>WeaponFont chbase
lda #0
;sta WSYNC
sta COLPF2
beq EndOfDLI
SecondDLI
lda TetryxColorS
sta COLPF1
EndOfDLI
inc dliCounter
pla
DLIinterruptNone
rti
.endp
;--------------------------------------------------
.proc VBLinterrupt
mva #0 dliCounter
jmp XITVBV
.endp
;--------------------------------------------------
.macro SetDLI
; SetDLI #WORD
; Initialises Display List Interrupts
LDY # <:1
LDX # >:1
jsr _SetDLIproc
.endm
.proc _SetDLIproc
LDA #%11000000
STY VDSLST
STX VDSLST+1
STA NMIEN
rts
.endp
;--------------------------------------------------
.proc WaitOneFrame
;--------------------------------------------------
waitRTC ; or wait ?
rts
.endp
;--------------------------------------------------
; DL for menu
MenuDL
.byte $70,$70,$70,$70
.byte $44
.word picData
:3 .byte $04
.byte $70,$70+$80
.byte $47
.word MenuTitle
.byte $30,$70
.byte $42
.word MenuOptions
.byte $10,$02
.byte $10,$02
.byte $10+$80,$02
.byte $41
.word MenuDL
; Picture data (narrow screen)
picData
ins 'Scorch_logo_mod_AW.scr',+32, 32*4 ; load 4 lines without the first one
; Color data
colors
.BYTE 0,14,10,6
MenuTitle
dta d" SELECT OPTION "
MenuOptions
dta d" E - English Manual "
dta d" P - Polska instrukcja "
dta d" G - Start Scorch Game "
dta d" T - Start Tetryx Game "
;--------------------------------------------------
.proc GetKey
; waits for pressing a key and returns pressed value in A
; result: A=keycode
;--------------------------------------------------
jsr WaitForKeyRelease
getKeyAfterWait
lda SKSTAT
cmp #$ff
beq checkJoyGetKey ; key not pressed, check Joy
lda kbcode
cmp #@kbcode._none
beq checkJoyGetKey
and #$3f ;CTRL and SHIFT ellimination
bne getkeyend ; allways
checkJoyGetKey
;fire
lda STRIG0
beq JoyButton
checkStarttKey
lda CONSOL
and #%00000001 ; Start
beq StartPressed
bne getKeyAfterWait
StartPressed
JoyButton
lda #@kbcode._space ; Start key
getkeyend
ldy #0
sty ATRACT ; reset atract mode
rts
.endp
;--------------------------------------------------
.proc WaitForKeyRelease
;--------------------------------------------------
StillWait
lda STRIG0
beq StillWait
lda SKSTAT
cmp #$ff
bne StillWait
lda CONSOL
and #%00000001 ; Start only
cmp #%00000001
bne StillWait
KeyReleased
rts
.endp
run main