From 3a906762c42b90df420a33104dcea749172c62b0 Mon Sep 17 00:00:00 2001 From: 4am Date: Mon, 23 Dec 2019 10:48:04 -0500 Subject: [PATCH] macros for reset vector fixes https://github.com/a2-4am/4cade/issues/79 --- src/macros.a | 27 +++++++++++++++++++++++++++ src/prelaunch/conan.a | 8 ++------ src/prelaunch/head.on.a | 20 +------------------- src/prelaunch/moon.patrol.a | 14 ++------------ src/prelaunch/pieman.a | 8 ++------ src/prelaunch/quadrant.6112.a | 20 +------------------- src/prelaunch/sabotage.a | 8 ++------ src/prelaunch/snack.attack.a | 8 ++------ src/prelaunch/spdway.classic.a | 8 ++------ src/prelaunch/starblaster.a | 13 +------------ 10 files changed, 42 insertions(+), 92 deletions(-) diff --git a/src/macros.a b/src/macros.a index 269f580a6..3b933d45d 100644 --- a/src/macros.a +++ b/src/macros.a @@ -177,3 +177,30 @@ jsr ROM_TEXT2COPY ; set alternate display mode on IIgs (required for some games) + } + +!macro RESET_VECTOR .addr { + lda #<.addr + sta $3F2 + lda #>.addr + sta $3F3 + eor #$A5 + sta $3F4 +} + +; for games that clobber $100-$105, the prelaunch code constructs a new reset vector +; somewhere else and sets its +!macro NEW_RESET_VECTOR .addr { + lda #$2C + sta .addr + lda #$88 + sta .addr+1 + lda #$C0 + sta .addr+2 + lda #$6C ; JMP ($FFFC) points to 'Reenter' + sta .addr+3 + lda #$FC + sta .addr+4 + lda #$FF + sta .addr+5 + +RESET_VECTOR .addr +} diff --git a/src/prelaunch/conan.a b/src/prelaunch/conan.a index ba2d2be0f..132472549 100755 --- a/src/prelaunch/conan.a +++ b/src/prelaunch/conan.a @@ -19,12 +19,8 @@ +ENABLE_ACCEL - lda #0 - sta $3f2 - lda #1 - sta $3f3 - lda #$A4 ; reset vector patch - sta $3f4 ; (doesn't work during copyright) + ; re-patch reset vector (doesn't work during copyright sequence) + +RESET_VECTOR $100 lda #$6c sta $bd40 diff --git a/src/prelaunch/head.on.a b/src/prelaunch/head.on.a index 7fb2c4e99..2c8a217c7 100755 --- a/src/prelaunch/head.on.a +++ b/src/prelaunch/head.on.a @@ -7,25 +7,7 @@ !source "src/prelaunch/common.a" - lda #$2C - sta $7000 - lda #$88 - sta $7001 - lda #$C0 - sta $7002 - lda #$6C ; JMP ($FFFC) - sta $7003 ; 'Reenter' - lda #$FC - sta $7004 - lda #$FF - sta $7005 ; re-establish LC hook - - lda #0 - sta $3F2 - lda #$70 - sta $3F3 - lda #$D5 - sta $3F4 ; reset vector patch + +NEW_RESET_VECTOR $7000 jmp $2000 diff --git a/src/prelaunch/moon.patrol.a b/src/prelaunch/moon.patrol.a index 0285bd2f9..175b9bc5c 100755 --- a/src/prelaunch/moon.patrol.a +++ b/src/prelaunch/moon.patrol.a @@ -21,18 +21,8 @@ sta $2d07 sta $1c17 + - ldy #6 -- lda $100-1,y ; game uses $100 as variable - sta $1B0-1,y ; move hook to $1B0 - dey - bne - - - lda #$B0 - sta $3F2 - lda #$01 - sta $3F3 - lda #$A4 - sta $3F4 ; reset vector patch + ; game uses $100 as variable, so move reset vector to $1B0 + +NEW_RESET_VECTOR $1B0 +DISABLE_ACCEL jmp $919 diff --git a/src/prelaunch/pieman.a b/src/prelaunch/pieman.a index 648c108ba..628b27fba 100755 --- a/src/prelaunch/pieman.a +++ b/src/prelaunch/pieman.a @@ -21,12 +21,8 @@ sta $948 jsr $940 - lda #0 - sta $3F2 - lda #1 - sta $3F3 - lda #$A4 - sta $3F4 ; reset vector patch + ; re-patch reset vector + +RESET_VECTOR $100 jmp $950 diff --git a/src/prelaunch/quadrant.6112.a b/src/prelaunch/quadrant.6112.a index c6d6aac74..478fcfe7c 100755 --- a/src/prelaunch/quadrant.6112.a +++ b/src/prelaunch/quadrant.6112.a @@ -11,25 +11,7 @@ sta $872 jsr $800 ; title - lda #$2C - sta $100 - lda #$88 - sta $101 - lda #$C0 - sta $102 - lda #$6C ; JMP ($FFFC) - sta $103 ; 'Reenter' - lda #$FC - sta $104 - lda #$FF - sta $105 ; re-establish LC hook - - lda #0 - sta $3f2 - lda #1 - sta $3f3 - lda #$A4 - sta $3f4 ; reset vector patch + +NEW_RESET_VECTOR $100 jmp $2007 diff --git a/src/prelaunch/sabotage.a b/src/prelaunch/sabotage.a index bcb595585..fc19e8e34 100755 --- a/src/prelaunch/sabotage.a +++ b/src/prelaunch/sabotage.a @@ -18,12 +18,8 @@ sta $1DB2 jsr $1D1F - lda #0 - sta $3f2 - lda #1 - sta $3f3 - lda #$A4 - sta $3f4 ; reset vector patch + ; re-patch reset vector + +RESET_VECTOR $100 jmp $42BC diff --git a/src/prelaunch/snack.attack.a b/src/prelaunch/snack.attack.a index 8fec54b5f..8eb2b3789 100755 --- a/src/prelaunch/snack.attack.a +++ b/src/prelaunch/snack.attack.a @@ -19,12 +19,8 @@ sta $BD19 jsr $BCFA - lda #0 - sta $3F2 - lda #1 - sta $3F3 - lda #$A4 - sta $3F4 ; reset vector patch + ; re-patch reset vector + +RESET_VECTOR $100 jmp $7E00 diff --git a/src/prelaunch/spdway.classic.a b/src/prelaunch/spdway.classic.a index 4b71295b0..49ee73398 100755 --- a/src/prelaunch/spdway.classic.a +++ b/src/prelaunch/spdway.classic.a @@ -12,12 +12,8 @@ sta $2078 jsr $2000 ; decompress - lda #0 - sta $3F2 - lda #1 - sta $3F3 - lda #$A4 - sta $3F4 ; reset vector patch + ; re-patch reset vector + +RESET_VECTOR $100 +DISABLE_ACCEL jmp $817 diff --git a/src/prelaunch/starblaster.a b/src/prelaunch/starblaster.a index 1386fb1b0..09588412a 100755 --- a/src/prelaunch/starblaster.a +++ b/src/prelaunch/starblaster.a @@ -12,18 +12,7 @@ sta $9318 jsr $6BD1 ; decompress/title - ldy #6 -- lda $100-1,y - sta $280-1,y ; move hook to $280 - dey - bne - - - lda #$80 - sta $3F2 - lda #$02 - sta $3F3 - lda #$A7 - sta $3F4 ; reset vector patch + +NEW_RESET_VECTOR $280 jmp $6000