These humble 16-pin logic devices were commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings.
Incidental to this update, coin counters and/or lockouts have been added to Atari System 1 games, Basketball, Gauntlet, Gyruss, Hana Yayoi, Hole Land, Jr. Pac-Man, Mahjong Sisters, Pooyan, Roc'n Rope, Squash, Thunder Hoop, Time Limit, Time Pilot '84 and many others. This also cleans up coin counter behavior in Sauro and Rally Bike.
(nw) The purpose of committing this change, which has been several months in the making, early in the 0.189GIT cycle will be to allow time for fixing potential regressions; I've fixed a number of drivers that lost sound from this for various reasons (hnayayoi.cpp having missing or garbage ADPCM was particularly painful, since the three games in that driver all work slightly differently), but I can't test all affected drivers exhaustively. @Tafoid, don't bother running automated screen capture comparison tests on this, as many drivers are now expected to have the screen flipped for the first few seconds after reset.
There is no need for a second device for World Rally and Glass, it's the
same thing. How the address lines are hooked up for host memory access
is part of the driver and can be done with a mirror/mask in the address
map provided by the driver. There's also no need for the SRAM
trampolines in the device, that can be done entirely through address
maps.
The drivers need trampolines to do the address swizzling. We should be
able to get rid of these when we get better support for 8-bit views of
16-bit components (dooyong drivers also have ugly trampolines for doing
this kind of thing).
* gameboy.xml: remove misleading comment
Sachen 4B-003 was recently added
Signed-off-by: Tauwasser <tauwasser@tauwasser.eu>
* gameboy: fix Super Game Boy VRAM transfer
A basic implementation of VRAM transfer. It fixes a number of games and removes
the SGB border hack. However, it's very likely that the bahvior is much more
complex. The old implementation was good enough for the majority of games,
so this should suffice until such time when SGB is implemented on top of SNES.
The attribute data was resized to 4096 bytes, so a whole VRAM transfer can take place
even though only 4050 bytes are used. The idea is that the whole 4096 bytes are
_probably_ transferred to WRAM and a game might theoretically upload a small executable
and use that data. However, running native SNES code is currently unsupported anyway.
Signed-off-by: Tauwasser <tauwasser@tauwasser.eu>
* gameboy: various code style/comment fixes
- return GB_MBC_NONE instead of magic 0 value
- add MLT_REQ case in sgb code and mention where it's actually handled
- add PAL_PRI to list of known SGB commands (not implemented)
- fix two comments
Signed-off-by: Tauwasser <tauwasser@tauwasser.eu>
* gameboy: coding style fixes for gb_lcd
Signed-off-by: Tauwasser <tauwasser@tauwasser.eu>
* Sort software part menu in internal UI (was ordered by hash)
This preserves the option priority behaviour from 0.187 when setting the
instance option to the desired part.
Note that software part selection from internal UI doesn't actually
work. For example with zorba:cpm, no matter which part you select,
you'll always end up with flop1 in A: and flop2 in B:. This actually
did work properly in 0.187, so something has gone wrong in between.