Source code for 280 ZZZAP - Is it available?

As far as changes I think it would be better to not automatically start a game when a credit is added. If there are multiple credits then you need to press start for the next game. Would be better to just add credits and then use the start button when you're ready to start the first game. As it is the game starts as you drop the coin and you may not actually be ready to play. So I think that one change would be a welcome one and improve the game.

That's trivial -- like on Sea Wolf they just omitted a "ret" on the end of the coin handling routine and made it flow right into the "start button pressed" handler -- without checking to see if the button was actually pressed. Unfortunately cleanly putting a single byte back into the middle of the code space would require reassembling from scratch -- would be easier to put in a patch, but there aren't many free bytes available (without getting rid of the other languages).
 
So each data bit represents 2 pixels? (Assuming each # character is a pixel.)

What tool did you use for that listing? Or is it just manually generated?
 
So each data bit represents 2 pixels? (Assuming each # character is a pixel.)
Each data bit is 1 pixel, but with the aspect ratio of the font, doubling chars make it more like the screen

What tool did you use for that listing? Or is it just manually generated?
C

Code:
mspaeth@E6440 ~/mame/roms/280zzzap
$ cat ./zzzap.bin | mwdumpgfx_asm 0621 04 1f > foo
Hit EOF
 
It might not be clean enough for the code to be relocatable (and there's still some data tables I haven't figured out), but the current code base is in good enough shape to reassemble accurately.

1732048795408.png
 
Nice! so in the current version on Github are there any comments like the representation of the images like in the prior posts? Is the Github repro available to others to take a look at? What is the best way to contribute to it?
 
1732259497795.png
well now the flag guy has a wiener.
the real question is does MAME cut the legs off? or are the legs normally cut off on real hardware? my machine is buried at the moment.
 
Find the bug in this code:

Code:
07e8: af        xor  a
07e9: 32 41 21  ld   ($2141),a
07ec: 79        ld   a,c
07ed: 0f        rrca
07ee: e6 07     and  $07
07f0: 81        add  a,c
07f1: 79        ld   a,c
07f2: 3a 3a 20  ld   a,($203A)
07f5: cd 5c 08  call $085C

I'd be curious to patch the fix and see how it affects gameplay, but MAME doesn't really play well enough to tell.
 
mame has the engine frequency wrong too. i have 4 daughter cards 3 zzzap and 1 laguna and they all have a lower engine frequency than mame
 
On the topic of MAME is it a problem with the Midway L boards in general? If so, I would expect it would affect the whole series of games including Space Invaders and even Sea Wolf.

Or is the timing off on just the racing games like 280 ZZZAP? Has that be captured as a bug and noted before?

What is the process to submit a patch or fix for existing systems?
 
The legs of the flag guy being cut off is likely an issue with the frame buffer code in MAME. I haven't taken a screen shot to measure, but I'm guessing it's cutting off at the center of the screen, which may mean they have the mid screen and end of screen interrupts swapped. I've never gotten MAME to build successfully in windows and I don't have any Linux boxes new enough to build recent releases, so I haven't submitted any patches in years. Shockingly, they don't appreciate patches to the 10-year-old code base I do dev and testing on :)

The sound issues are trivial, and really just need accurate frequency measurements from real hardware since the analog calculations they use to do sounds are really basic and ignore all kinds of actual device physics / parameters.
 
Looks like there's a "bug" in the code

The DIPs show show bit 4 selecting 2.00 vs 2.50, and bit 5 being an enable disable.

The actual ROM has a table of 3 values (+1 "garbage" unattainable value):
Code:
                ;; "4" byte table for $0bed
                ;; Extended time (0x03 = None)
001d: 25 30 20
                ;; rst $20
                ;; Unstack regs and rts
0020: e1        pop  hl                    ; (Calling adddress thrown away)
0021: f1        pop  af
0022: c1        pop  bc
0023: d1        pop  de

The code that uses this table is missing a rotate which would make all 4 bytes usable:
Code:
                in            a,($02)                    ; IN2
                rrca                                        ; 07654321
                rrca                                        ; 10765432
                rrca                                        ; 12076543
                and            $06                            ; D5=extended time, D4=2.0, not 2.5
                ld            c,a
                ld            b,$00
                ld            hl,L001D                ; Index into table 
                add            hl,bc
                ld            c,(hl)                    ; (Score for extended play)

So instead of reading $1d-$20, it reads $1d / $1f / $21 / $23, making the high 2 values "unattainable", rather than just the highest.

By adding an extra rrca and changing the and value to $03, there could be a 3.0 extended time threshold as originally intended.
 
Back
Top Bottom