;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_RAM2_WRITE_RAM2 jsr CloseHandles ; close any open handles to restore ProRWTS state to original ; (also switches to LC RAM bank 1) 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 inx stx $3F3 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 MegaAttractMode jmp @loop + jsr SearchMode jmp @loop Mode !byte $00 ; 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 !word Reenter ; NMI vector ($FFFA-B) !word Reenter ; reset vector ($FFFC-D) !word Reenter ; IRQ vector ($FFFE-F) } LastMover !source "src/ui.font.data.a" !if RELBASE = $2000 { !ifdef PASS2 { } else { ;PASS2 !set PASS2=1 !warn "RELBASE = ", $10000 - (LastMover - FirstMover) } }