auto-select MB slot for Black Belt

This commit is contained in:
Peter Ferrie 2023-09-08 12:23:42 -07:00
parent 657cb6c9f1
commit 020fe79133
5 changed files with 91 additions and 43 deletions

View File

@ -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

View File

@ -1 +1,3 @@
# This file is maintained by hand
BLACK.BELT.MB=Type(06),AuxType(0200),Access(C3)

View File

@ -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 $BC13
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 ", *

View File

@ -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 $BC13
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 ", *
}

View File

@ -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