diff --git a/src/4cade.init.a b/src/4cade.init.a index 242d21b6f..b0b421cba 100644 --- a/src/4cade.init.a +++ b/src/4cade.init.a @@ -16,8 +16,18 @@ jsr ROM_TEXT jsr ROM_HOME jsr Has64K ; check for 64K (required) - bcs @no64K - jsr DisableAccelerator ; set to 1 MHz (supports IIgs and many common accelerator cards) + bcc + + + ldy #@no64Klen +- lda @s_no64K,y + sta $6B6,y + dey + bpl - +@hang bmi @hang +@s_no64K !raw "REQUIRES 64K" +@no64Klen=*-@s_no64K + ++ jsr DisableAccelerator ; set to 1 MHz (supports IIgs and many common accelerator cards) jsr IsGS ; check for IIgs (allows super hi-res artwork) php bcc + @@ -35,6 +45,64 @@ ; bit 5 = 1 if VidHD ; bit 6 = 1 if 128K ; bit 7 = 1 if joystick + + lda ROM_MACHINEID + cmp #$06 + beq + + lda #$DF + +HIDE_NEXT_2_BYTES ++ lda #$FF + sta zpCharMask + + ldy #8 +- lda TOTAL,y + ora #$80 + sta $04B7,y + dey + bpl - + ldy #10 +- lda REPLAY,y + ora #$80 + sta $0536,y + dey + bpl - + + ldy LoaderVersion +- lda LoaderVersion,y + ora #$80 + +FORCE_UPPERCASE_IF_REQUIRED + sta $07CF,y + dey + bne - + + bit zpMachineStatus + bvc ++ + bpl + + +LDADDR Loader128KAndJoystick + bne @ShowLoadScreen ++ + +LDADDR Loader128K + bne @ShowLoadScreen +++ + bpl + + +LDADDR Loader64KAndJoystick + bne @ShowLoadScreen ++ + +LDADDR Loader64K +@ShowLoadScreen + +STAY PTR + ldy #0 + lda (PTR),y + tay +- lda (PTR),y + ora #$80 + +FORCE_UPPERCASE_IF_REQUIRED +@load sta $07F7 + dec @load+1 + dey + bne - + +@Relocate +READ_ROM_WRITE_RAM2 jsr init ; initialize and relocate ProRWTS2 to $D400 in RAM bank 2 ; ProRWTS2 disk-data live at $D000-D3FF @@ -60,16 +128,6 @@ 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 @@ -79,6 +137,26 @@ ProRWTSBuffer !source "src/hw.memcheck.a" !source "src/hw.joystick.a" !source "src/hw.normfast.a" +TOTAL + !text "T O T A L" +REPLAY + !text "R E P L A Y" +LoaderVersion + !byte 4 + !text "v2.0" +Loader64K + !byte 3 + !text "64K" +Loader64KAndJoystick + !byte 14 + !text "joystick + 64K" +Loader128K + !byte 4 + !text "128K" +Loader128KAndJoystick + !byte 15 + !text "joystick + 128K" + *=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 diff --git a/src/constants.a b/src/constants.a index 38f973dba..2cde4c12a 100644 --- a/src/constants.a +++ b/src/constants.a @@ -70,6 +70,7 @@ zpMachineStatus= $F0 ; bit 7 = 1 if machine has joystick ; bit 5 = 1 if machine has a VidHD card ; bit 4 = 1 if machine is a IIgs ; only used during init, then copied to MachineStatus in LC RAM +zpCharMask = $F1 ; only uesd during init, then clobbered ; $FE ; used by ParseGamesList ; $FF ; used by ParseGamesList diff --git a/src/macros.a b/src/macros.a index 7fb0ce326..dacdf132a 100644 --- a/src/macros.a +++ b/src/macros.a @@ -124,6 +124,14 @@ + } +; requires setting zpCharMask in zero page to #$FF or #$DF before use +!macro FORCE_UPPERCASE_IF_REQUIRED { + cmp #$E1 + bcc + + and zpCharMask ++ +} + ; does not set page 1 or 2 !macro HGR_MODE { bit $C057