diff --git a/src/constants.a b/src/constants.a index 0363299..d13615c 100644 --- a/src/constants.a +++ b/src/constants.a @@ -189,6 +189,7 @@ EnableAccelerator = DisableAccelerator+3 ; AND masks for MockingboardStuff MOCKINGBOARD_SLOT = %00001111 HAS_SPEECH = %11000000 +MOCKINGBOARD_NEW = %00100000 ; AND masks for game info bitfield (after game display name in gSearchStore) HAS_DHGR_TITLE = %10000000 ; this one is hard-coded via BMI instead of AND/BNE diff --git a/src/prelaunch/_FileInformation.txt b/src/prelaunch/_FileInformation.txt index 1d9e598..90d314a 100644 --- a/src/prelaunch/_FileInformation.txt +++ b/src/prelaunch/_FileInformation.txt @@ -1 +1,3 @@ # This file is maintained by hand + +BLACK.BELT.MB=Type(06),AuxType(0200),Access(C3) diff --git a/src/prelaunch/black.belt.a b/src/prelaunch/black.belt.a index 1d11b1c..4c3895b 100644 --- a/src/prelaunch/black.belt.a +++ b/src/prelaunch/black.belt.a @@ -7,49 +7,15 @@ !source "src/prelaunch/common.a" - +ENABLE_ACCEL - lda #$4C - sta $85F - jsr $800 ; decompress - +DISABLE_ACCEL - jsr $8F00 ; title - +ENABLE_ACCEL - lda #$4C - sta $8A0 - ldy #0 - jsr $865 ; decompress - +READ_RAM2_NO_WRITE - lda MockingboardStuff - beq .nomock - pha - lda #$a9 - sta $1506 - jsr $BC0E ; decompress new Mockingboard support - pla - and #$20 - bne .newmock - jsr $BC07 ; decompress old Mockingboard support -.newmock - -.nomock - lda #$4C - sta $BC12 - lda #callback - sta $BC14 - jsr DisableAccelerator + +READ_RAM2_WRITE_RAM2 + jsr EnableAccelerator + +LOAD_FILE_AT blackbelt_mb, $200 +READ_ROM_NO_WRITE - jmp $8A3 + jmp $200 -callback - +ENABLE_ACCEL - lda #0 - sta $B6 - jsr $BC16 - +DISABLE_ACCEL - lda #0 - rts +blackbelt_mb + !byte 23 + !text "PRELAUNCH/BLACK.BELT.MB" !if * > $1C0 { !error "code is too large, ends at ", * diff --git a/src/prelaunch/black.belt.mb.a b/src/prelaunch/black.belt.mb.a new file mode 100644 index 0000000..abdddd6 --- /dev/null +++ b/src/prelaunch/black.belt.mb.a @@ -0,0 +1,78 @@ +;license:MIT +;(c) 2023 by qkumba + +!cpu 6502 +!to "build/PRELAUNCH/BLACK.BELT.MB",plain +*=$200 + + !source "src/constants.a" ; no code in these + !source "src/macros.a" + + +ENABLE_ACCEL + lda #$4C + sta $85F + jsr $800 ; decompress + +DISABLE_ACCEL + jsr $8F00 ; title + +ENABLE_ACCEL + lda #$4C + sta $8A0 + ldy #0 + nop + nop + nop ; alignment for SMC + jsr $865 ; decompress + +READ_RAM2_NO_WRITE + lda MockingboardStuff + beq .nomock + pha + jsr $BC0E ; decompress new Mockingboard support + lda #0 ; SMC + pla + pha + and #MOCKINGBOARD_NEW + bne .newmock + jsr $BC07 ; decompress old Mockingboard support +.newmock + pla + and #7 + ora #$C0 + ldx #0 +- ldy $15FB, x + cpy #$C4 + bne + + sta $15FB, x ++ ldy $A000, x + cpy #$C4 + bne + + sta $A000, x ++ ldy $A100, x + cpy #$C4 + bne + + sta $A100, x ++ inx + bne - + +.nomock + lda #$4C + sta $BC12 + lda #callback + sta $BC14 + jsr DisableAccelerator + +READ_ROM_NO_WRITE + jmp $8A3 + +callback + +ENABLE_ACCEL + lda #0 + sta $B6 + jsr $BC16 + +DISABLE_ACCEL + lda #0 + rts + +!if * > $2FF { + !error "code is too large, ends at ", * +} diff --git a/winmake.bat b/winmake.bat index 30c6210..cc2baec 100644 --- a/winmake.bat +++ b/winmake.bat @@ -29,6 +29,7 @@ rem version 3.1.0 or later set EXOMIZER=exomizer mem -q -P23 -lnone if "%1" equ "dsk" ( +call :clean call :index if "%2". equ "". ( call :asmproboot @@ -73,6 +74,7 @@ if "%1" equ "clean" ( if "%2". neq "". ( 1>nul move build\%DISK% ) +:clean echo y|1>nul 2>nul rd build /s if "%2". neq "". ( md build @@ -314,8 +316,7 @@ goto :EOF :asmlauncher 2>nul 1>build\buildnum.log %GIT% rev-list --count HEAD -if errorlevel 1 (set _build=0 -) else for /f "tokens=*" %%q in (build\buildnum.log) do set _build=%%q +if errorlevel 1 (set _build=0) else for /f "tokens=*" %%q in (build\buildnum.log) do set _build=%%q 2>build\relbase.log %ACME% -DBUILDNUMBER=%_build% src\4cade.a for /f "tokens=*" %%q in (build\relbase.log) do set _make=%%q %ACME% -DBUILDNUMBER=%_build% -DRELBASE=$!_make:~-5,4! -r build\4cade.lst src\4cade.a