4cade/src/4cade.init.a

118 lines
4.4 KiB
Plaintext
Raw Normal View History

2018-12-29 18:38:18 +00:00
;license:MIT
;(c) 2018 by 4am
;
; this file is included directly and is run from $2000/main as soon as the .SYSTEM file is loaded
2018-11-10 13:36:36 +00:00
sta $C00E ; 40-column
sta $C00C
sta $C004
sta $C002
sta $C000
jsr $FB2F
jsr $FC58
jsr Has64K ; check for 64K (required)
bcs @no64K
2019-01-13 23:55:40 +00:00
jsr DisableAccelerator ; set to 1 MHz (supports IIgs and many common accelerator cards)
jsr IsGS ; check for IIgs (allows super hi-res artwork)
ror MachineStatus
2019-01-13 23:55:40 +00:00
jsr HasVidHDCard ; check for VidHD card (allows super hi-res artwork even on non-IIgs machines)
ror MachineStatus
jsr Has128K ; check for 128K (allows DHGR slideshows and 128K games)
ror MachineStatus
jsr HasJoystick ; check for joystick (absence is OK but we filter out some games that require a joystick)
ror MachineStatus ; now bit 4 = 1 if IIgs
; bit 5 = 1 if VidHD
; bit 6 = 1 if 128K
; bit 7 = 1 if joystick
2019-06-20 01:36:49 +00:00
+READ_ROM_WRITE_RAM2
jsr init ; initialize and relocate ProRWTS2 to $D400 in RAM bank 2
ldx #$00 ; relocate program code to top of language card
@FM lda FirstMover,x
2019-06-19 04:49:12 +00:00
sta RELBASE,x
inx
bne @FM
lda @FM+2
cmp #>LastMover
bcs +
inc @FM+2
inc @FM+5
bne @FM
+ ldy #$04
@LM lda LastMover,x ; relocate font data to $D600 in RAM bank 2
sta $D600,x
inx
bne @LM
inc @LM+2
inc @LM+5
dey
bne @LM
jmp OneTimeSetup
@no64K
ldy #@no64Klen
- lda @s_no64K,y
sta $6B6,y
dey
bpl -
@hang bmi @hang
@s_no64K !raw "REQUIRES 64K"
@no64Klen=*-@s_no64K
; ProRWTS2 has its own function to relocate itself
!source "src/prorwts2.a"
ProRWTSBuffer
2018-11-10 13:36:36 +00:00
; these routines will only be called once, from main memory, before relocating to language card
2019-01-13 23:55:40 +00:00
!source "src/hw.iigs.a"
!source "src/hw.vidhd.a"
!source "src/hw.memcheck.a"
!source "src/hw.joystick.a"
!source "src/hw.normfast.a"
*=ProRWTSBuffer+512 ; ProRWTS needs a 512-byte buffer for its init function
; so we reuse as much of the 1-time code as possible
; and fill the rest with zeros
OneTimeSetup
2018-11-26 19:43:39 +00:00
lda MachineStatus
sta oldstatus
jsr SaveScreenHoles ; save initial copy of screen hole content
lda #$91
sta holepatch ; enable restoring of copy from now on
lda hddopendir+1 ; save current directory as 'root'
ldy hddopendir+3
2019-06-20 01:10:56 +00:00
+READ_RAM1_WRITE_RAM1
+STAY gRootDirectory
2019-01-10 17:42:50 +00:00
lda $43
sta promote + ProDOS_unit - $bf00
; save unit while overriding !pseudopc
2019-06-19 02:40:17 +00:00
+LDADDR kGlobalPrefsFilename
jsr SetPath
jsr LoadFile ; load preferences file into $8000
2018-11-10 15:08:14 +00:00
2018-12-29 18:38:18 +00:00
jsr ParseKeyValueList ; parse contents into OKVS data structure into LC RAM bank
2018-11-10 15:08:14 +00:00
!word gGlobalPrefsStore
2018-12-29 18:38:18 +00:00
!word ldrlo2 ; (ldrlo2) points to last load address, so $8000
2018-11-10 15:08:14 +00:00
!byte 16
2018-12-29 18:38:18 +00:00
+LDAY SRC ; (SRC) points to free space after the OKVS data structure we just created
2018-11-10 15:08:14 +00:00
+STAY gGamesListStore ; save pointer to free space for next store
2019-06-19 02:40:17 +00:00
+LDADDR kGameListConfFile
jsr SetPath
2018-12-29 18:38:18 +00:00
jsr LoadFile ; load games list file into $8000
2019-06-19 02:40:17 +00:00
2018-12-29 18:38:18 +00:00
jsr ParseGamesList ; parse games list into OKVS data structure in LC RAM bank
!word gGamesListStore
2018-12-29 18:38:18 +00:00
!word ldrlo2 ; (ldrlo2) points to last load address, so $8000
2019-01-08 19:10:26 +00:00
bit $C010 ; clear keyboard strobe so we don't mistakenly think we just tried to run something
2018-12-29 18:38:18 +00:00
jmp Main ; continue execution from LC RAM bank
kGameListConfFile
2018-12-29 18:38:18 +00:00
!byte 10
!text "GAMES.CONF"