Scramble is a cracking game, but again like so many games of its era lacks free play mode. So you either need to keep it coined up (where it just stares back at you telling you to press start) or coin it up every time you want to play it. So this mod is to overcome those problems. It has the following features:-
A freeplay mode, selectable by the coinage DIP switches (on a real board, you need DIPs 4 & 5 off, in mame you select 1 coin/4 credits)
Attract mode is maintained in free play mode
It displays "FREE PLAY" on the screen when in free play mode instead of credits
You can't add credits when in free play mode
DIPs are only checked on boot, so changing them mid game has no impact
The hack has been done
for the Stern (set 1 & 2) which use different addressing. The different variants of game code are very similar, and my code is
pretty simple so could be adapted to other ROMs (e.g. Konami) by changing the absolute
addresses. I'm sharing the (annotated) source code below if you want to change it to other versions.
Parching changes to be made:-
Stern set 1
0D8D (ROM 2e, address 058d->)
CD 00 3B
06E3 (ROM 2d, address 06e3->)
CA 28 3B
3B00 (ROM 2p, address 300->)
3A 00 40 FE 03 C2 B9 0D 3A 06 40 A7 C2 F8 0D 3A 01 81 CB 7F 3E 01 28 0A 3A 01 81 CB 77 3E 02 C2 F8 0D 32 02 40 C3 F8 0D 3A 00 40 FE 03 C2 DE 0A 21 9F 4B 11 3C 3B 01 E0 FF C3 36 04 40 46 52 45 45 40 50 4C 41 59 40 40 3F
Stern set 2
21EB (ROM 2j, address 01eb->)
CD 00 3D
0710 (ROM 2d, address 0710->)
CA 28 3D
3D00 (ROM 2p, address 500->)
3A 00 40 FE 03 C2 EC 09 3A 06 40 A7 C2 2C 0A 3A 01 81 CB 7F
3E 01 28 0A 3A 01 81 CB 77 3E 02 C2 2C 0A 32 02 40 C3 2C 0A 3A 00 40 FE 03 C2
1A 07 21 9F 4B 11 3C 3D 01 E0 FF C3 52 04 40 46 52 45 45 40 50 4C 41 59 40 40
3F
Source code (this is for the set 1 version, set 2 is mostly the same, just with different absolute addresses)
; Stern Scramble (set 1) enhanced free play @0x3B00
; philmurr 06/11/16
; call freeplaycode ;intercept for hack @ 0D8D
; jp printfreeplay ;intercept for printing on screen @06E3
org 0x3b00
freeplaycode:
ld a,(0x4000) ; are we in "free play" mode?
cp 3
jp nz,0x0db9 ; return to main code if not
ld a,(0x4006) ;are we in a game?
and a
jp nz,0x0df8 ;if yes, don't try to add more credits
ld a,(0x8101)
bit 7,a ; P1 button pressed
ld a,1 ;1 dummy credit
jr z,addcredit
ld a,(0x8101)
bit 6,a ; P2 button pressed?
ld a,2 ;2 dummy credits
jp nz,0x0df8 ; return to main code if not
addcredit:
ld (0x4002),a ; add 1 or 2 credits depending on P1/P2 pressed
jp 0x0df8 ; return to main code
printfreeplay:
ld a,(0x4000) ;are we in "free play" mode?
cp 3
jp nz,0x0ade ;if not, go to code to print "CREDIT x"
ld hl,0x4b9f ;screen position
ld de,fptext ;text data
ld bc,0xffe0 ;next line
jp 0x0436 ;print it and continue
fptext:
db 64,70,82,69,69,64,80,76,65,89,64,64,63
;
Photos from Mame and on real hardware are below
Edit: typos in patching for set 1
philmurr2016-11-06 14:45:59
A freeplay mode, selectable by the coinage DIP switches (on a real board, you need DIPs 4 & 5 off, in mame you select 1 coin/4 credits)
Attract mode is maintained in free play mode
It displays "FREE PLAY" on the screen when in free play mode instead of credits
You can't add credits when in free play mode
DIPs are only checked on boot, so changing them mid game has no impact
The hack has been done
for the Stern (set 1 & 2) which use different addressing. The different variants of game code are very similar, and my code is
pretty simple so could be adapted to other ROMs (e.g. Konami) by changing the absolute
addresses. I'm sharing the (annotated) source code below if you want to change it to other versions.
Parching changes to be made:-
Stern set 1
0D8D (ROM 2e, address 058d->)
CD 00 3B
06E3 (ROM 2d, address 06e3->)
CA 28 3B
3B00 (ROM 2p, address 300->)
3A 00 40 FE 03 C2 B9 0D 3A 06 40 A7 C2 F8 0D 3A 01 81 CB 7F 3E 01 28 0A 3A 01 81 CB 77 3E 02 C2 F8 0D 32 02 40 C3 F8 0D 3A 00 40 FE 03 C2 DE 0A 21 9F 4B 11 3C 3B 01 E0 FF C3 36 04 40 46 52 45 45 40 50 4C 41 59 40 40 3F
Stern set 2
21EB (ROM 2j, address 01eb->)
CD 00 3D
0710 (ROM 2d, address 0710->)
CA 28 3D
3D00 (ROM 2p, address 500->)
3A 00 40 FE 03 C2 EC 09 3A 06 40 A7 C2 2C 0A 3A 01 81 CB 7F
3E 01 28 0A 3A 01 81 CB 77 3E 02 C2 2C 0A 32 02 40 C3 2C 0A 3A 00 40 FE 03 C2
1A 07 21 9F 4B 11 3C 3D 01 E0 FF C3 52 04 40 46 52 45 45 40 50 4C 41 59 40 40
3F
Source code (this is for the set 1 version, set 2 is mostly the same, just with different absolute addresses)
; Stern Scramble (set 1) enhanced free play @0x3B00
; philmurr 06/11/16
; call freeplaycode ;intercept for hack @ 0D8D
; jp printfreeplay ;intercept for printing on screen @06E3
org 0x3b00
freeplaycode:
ld a,(0x4000) ; are we in "free play" mode?
cp 3
jp nz,0x0db9 ; return to main code if not
ld a,(0x4006) ;are we in a game?
and a
jp nz,0x0df8 ;if yes, don't try to add more credits
ld a,(0x8101)
bit 7,a ; P1 button pressed
ld a,1 ;1 dummy credit
jr z,addcredit
ld a,(0x8101)
bit 6,a ; P2 button pressed?
ld a,2 ;2 dummy credits
jp nz,0x0df8 ; return to main code if not
addcredit:
ld (0x4002),a ; add 1 or 2 credits depending on P1/P2 pressed
jp 0x0df8 ; return to main code
printfreeplay:
ld a,(0x4000) ;are we in "free play" mode?
cp 3
jp nz,0x0ade ;if not, go to code to print "CREDIT x"
ld hl,0x4b9f ;screen position
ld de,fptext ;text data
ld bc,0xffe0 ;next line
jp 0x0436 ;print it and continue
fptext:
db 64,70,82,69,69,64,80,76,65,89,64,64,63
;
Photos from Mame and on real hardware are below
Edit: typos in patching for set 1
philmurr2016-11-06 14:45:59