4cade/src/4cade.a

96 lines
2.4 KiB
Plaintext

;license:MIT
;(c) 2018 by 4am
;
!cpu 6502
!to "build/LAUNCHER.SYSTEM",plain
*=$2000
!ifndef RELBASE {
RELBASE=$2000
}
!source "src/constants.a"
!source "src/macros.a"
; first-run initialization, relocates code to language card and continues from Main
!source "src/4cade.init.a"
FirstMover
!pseudopc RELBASE {
Reenter ; self-running demos should call this to exit back to 4cade
cld
cli
+READ_RAM1_WRITE_RAM1
jsr CloseHandles ; close any open handles to restore ProRWTS state to original
jsr SaveScreenHoles ; restore screen hole contents from saved copy
Main
ldx #$FF
txs
ldx #5
- lda Prelaunch,x ; copy reset vector code (switches to LC RAM and jumps to |Reenter|)
sta $100,x
dex
bpl -
inx
stx $3F2 ; set up reset vectors
stx $FFFC
inx
stx $3F3
stx $FFFD
txa
eor #$A5
sta $3F4
jsr BlankHGR
@loop
lda $C000
cmp #$8D
bne +
jsr Play
+ cmp #$9B
bne +
lda Mode
eor #$80
sta Mode
+
bit $C010
bit Mode
bpl +
jsr AttractMode
jmp @loop
+
jsr SearchMode
jmp @loop
Mode
!byte $80
; these routines will only be called after relocating to language card
!source "src/ui.search.mode.a"
!source "src/ui.attract.mode.a"
!source "src/ui.attract.hgr.a"
!source "src/ui.attract.dhgr.a"
!source "src/ui.attract.shr.a"
!source "src/prodos.path.a"
!source "src/glue.launch.a"
!source "src/glue.prorwts2.a"
!source "src/okvs.a"
!source "src/wait.a"
!source "src/textrank.a"
!source "src/parse.common.a"
!source "src/parse.prefs.a"
!source "src/parse.games.a"
!source "src/ui.sound.a"
!source "src/ui.font.a"
gGlobalPrefsStore
!word $D000 ; address of first okvs store
}
LastMover
!source "src/ui.font.data.a"
!if RELBASE = $2000 {
!ifdef PASS2 {
} else { ;PASS2
!set PASS2=1
!warn "RELBASE = ", $FFFC - (LastMover - FirstMover)
}
}