diff options
Diffstat (limited to 'src/mame/drivers/galaga.c')
-rw-r--r-- | src/mame/drivers/galaga.c | 3124 |
1 files changed, 3124 insertions, 0 deletions
diff --git a/src/mame/drivers/galaga.c b/src/mame/drivers/galaga.c new file mode 100644 index 00000000000..cb9692c126a --- /dev/null +++ b/src/mame/drivers/galaga.c @@ -0,0 +1,3124 @@ +/*************************************************************************** + +Bosconian (c) 1981 Namco +Galaga (c) 1981 Namco +Xevious (c) 1982 Namco +Dig Dug (c) 1982 Namco + +driver by Nicola Salmoria +based on previous work by Martin Scragg, Mirko Buffoni, Aaron Giles + + +All these games are based on the same 3xZ80, shared memory, CPU design. +Bosconian and Galaga use the same CPU board, with minor differences +(Galaga has one missing RAM and no 50XX custom) +Xevious is physically different, but logically identical. +Dig Dug is the only one a bit different, because it reads the dip switches +through a custom chip instead of having them mapped in memory. + +The video board, on the other hand, is completely different for all the games, +that's why they use separate video/ source files. + + +Custom ICs: +---------- +Bosconian: +--------- +CPU board: +06XX interface to custom 5xXX +07XX clock divider +08XX(x3) bus controller +50XX player score control (protection) +51XX I/O +54XX explosion sound generator + +Video board: +03XX(x2) ? +05XX starfield generator +06XX interface to custom 5xXX +07XX clock divider +50XX player score control (only used as protection check) +52XX sample player + +Galaga: +------ +CPU board: +06XX interface to custom 5xXX +07XX clock divider +08XX(x3) bus controller +51XX I/O +54XX explosion sound generator + +Video board: +00XX tilemap address generator with scrolling capability (only Super Pacman) +02XX gfx data shifter and mixer (16-bit in, 4-bit out) +04XX sprite address generator +05XX starfield generator +07XX clock divider + +Xevious: +------- +CPU board: +06XX interface to custom 5xXX +07XX clock divider +08XX(x3) bus controller +50XX player score control (only used for a protection check on startup) +51XX I/O +54XX explosion sound generator + +Video board: +03XX(x2) ? +04XX sprite address generator +07XX clock divider +11XX(x2) gfx data shifter and mixer (16-bit in, 4-bit out) +12XX sprite generator +13XX dual scrolling tilemap address generator + +Dig Dug: +------- +CPU board: +06XX interface to custom 5xXX +07XX clock divider +08XX(x3) bus controller +51XX I/O +53XX I/O + +Video board: +00XX tilemap address generator +02XX gfx data shifter and mixer (16-bit in, 4-bit out) +04XX sprite address generator +07XX clock divider + + +Memory maps: +----------- +Bosconian: +--------- +MAIN CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3N program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 3M program ROM +0010xxxxxxxxxxxx R xxxxxxxx ROM 3L program ROM +0011xxxxxxxxxxxx R xxxxxxxx ROM 3K program ROM +the rest of the memory map is common to the other CPUs + +SUB CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3J program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 3H program ROM +0010------------ n.c. +0011------------ n.c. +the rest of the memory map is common to the other CPUs + +SOUND CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3E program ROM +0001------------ n.c. +0010------------ n.c. +0011------------ n.c. +the rest of the memory map is common to the other CPUs + +COMMON: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +01000----------- n.c. +01001----------- n.c. +01010----------- n.c. +01011----------- n.c. +01100----------- n.c. +01101-----00xxxx W ----xxxx RAM 2A \ sound control registers +01101-----01xxxx W ----xxxx RAM 2B / +01101-----10-000 W -------x IRQ1 main CPU irq enable/acknowledge +01101-----10-001 W -------x IRQ2 motion CPU irq enable/acknowledge +01101-----10-010 W -------x NMION sound CPU nmi enable +01101-----10-011 W -------x RESET reset sub and sound CPU, and 5xXX chips on CPU board +01101-----10-100 W -------x n.c. +01101-----10-101 W -------x MOD 0 unused? +01101-----10-110 W -------x MOD 1 unused? +01101-----10-111 W -------x MOD 2 unused? +01101-----11---- W -------- WDR watchdog reset +01101-----00-xxx R -------x DIP SW dip switch B +01101-----00-xxx R ------x- DIP SW dip switch A +01101-----01---- R n.c. +01101-----10---- R n.c. +01101-----11---- R n.c. +01110--0-------- R/W xxxxxxxx I/O custom 06XX data +01110--1-------- R/W xxxxxxxx I/O custom 06XX control +01111xxxxxxxxxxx R/W xxxxxxxx RAM 2N work RAM (not present in Galaga) +10000xxxxxxxxxxx R/W xxxxxxxx DHRAM tilemap RAM (tile code) [1] +10001xxxxxxxxxxx R/W xxxxxxxx VCRAM tilemap RAM (tile attr) [1] +10010--0-------- R/W xxxxxxxx EXCS custom 06XX #2 data +10010--1-------- R/W xxxxxxxx EXCS custom 06XX #2 control +10011----000xxxx W ----xxxx SOWR bullets shape and X pos msb [2] +10011----001---- W xxxxxxxx POSI X playfield X scroll +10011----010---- W xxxxxxxx POSI Y playfield Y scroll +10011----011---- W -----xxx STAR to 05XX: starfield X scroll speed +10011----011---- W --xxx--- STAR to 05XX: starfield Y scroll speed +10011----100---- W -------- STARCLR to 05XX: unknown +10011----101---- W n.c. +10011----110---- W n.c. +10011----111-000 W -------x FLIP flip screen +10011----111-001 W -------x n.c. +10011----111-010 W -------x n.c. +10011----111-011 W -------x n.c. +10011----111-100 W -------x BLK 0 \ to 05XX: starfield blink +10011----111-101 W -------x BLK 1 / (select active subset) +10011----111-110 W -------x n.c. +10011----111-111 W -------x RESET reset 5xXX chips on video board +10100----------- n.c. +10101----------- n.c. +10110----------- n.c. +10111----------- n.c. + +[1] 1st half is radar + sprite registers, 2nd half is scrolling playfield +[2] SO = Small Objects? Only locations 4-F are used. + + +Galaga: +------ +MAIN CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3N program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 3M program ROM +0010xxxxxxxxxxxx R xxxxxxxx ROM 3L program ROM +0011xxxxxxxxxxxx R xxxxxxxx ROM 3K program ROM +the rest of the memory map is common to the other CPUs + +SUB CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3J program ROM +0001------------ n.c. +0010------------ n.c. +0011------------ n.c. +the rest of the memory map is common to the other CPUs + +SOUND CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3E program ROM +0001------------ n.c. +0010------------ n.c. +0011------------ n.c. +the rest of the memory map is common to the other CPUs + +COMMON: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +01000----------- n.c. +01001----------- n.c. +01010----------- n.c. +01011----------- n.c. +01100----------- n.c. +01101-----00---- W ----xxxx RAM 2A \ sound control registers +01101-----01---- W ----xxxx RAM 2B / +01101-----10-000 W -------x IRQ1 main CPU irq enable/acknowledge +01101-----10-001 W -------x IRQ2 motion CPU irq enable/acknowledge +01101-----10-010 W -------x NMION sound CPU nmi enable +01101-----10-011 W -------x RESET reset sub and sound CPU, and 5xXX chips on CPU board +01101-----10-100 W -------x n.c. +01101-----10-101 W -------x MOD 0 unused? +01101-----10-110 W -------x MOD 1 unused? +01101-----10-111 W -------x MOD 2 unused? +01101-----11---- W -------- WDR watchdog reset +01101-----00-xxx R -------x DIP SW dip switch B +01101-----00-xxx R ------x- DIP SW dip switch A +01101-----01---- R n.c. +01101-----10---- R n.c. +01101-----11---- R n.c. +01110--0-------- R/W xxxxxxxx I/O custom 06XX data +01110--1-------- R/W xxxxxxxx I/O custom 06XX control +10000xxxxxxxxxxx R/W xxxxxxxx RAM 1K tilemap RAM +10001-xxxxxxxxxx R/W xxxxxxxx RAM 3E/3F work RAM +10001-111xxxxxxx R/W xxxxxxxx portion holding sprite registers +10010-xxxxxxxxxx R/W xxxxxxxx RAM 3K/3L work RAM +10010-111xxxxxxx R/W xxxxxxxx portion holding sprite registers +10011-xxxxxxxxxx R/W xxxxxxxx RAM 3H/3J work RAM +10011-111xxxxxxx R/W xxxxxxxx portion holding sprite registers +10100--------000 W -------x \ +10100--------001 W -------x > to 05XX: starfield X scroll speed +10100--------010 W -------x / +10100--------011 W -------x \ to 05XX: starfield blink +10100--------100 W -------x / (select active subset) +10100--------101 W -------x to 05XX: unknown. It is the same as STARCLR in Bosconian +10100--------110 W -------x n.c. +10100--------111 W -------x FLIP flip screen +10101----------- n.c. +10110----------- n.c. +10111----------- n.c. + + +Namco vs Midway ROM names and locations +--------------------------------------- +Location ID Location ID +-------- ---- -------- ----- +CPU 3P GG1-1 CPU 3N 3200A +CPU 3M GG1-2 CPU 3M 3300B +CPU 2M GG1-3 CPU 3L 3400C +CPU 2L GG1-4 CPU 3K 3500D +CPU 3F GG1-5 CPU 3J 3600E +CPU 2C GG1-7 CPU 3E 3700G +CPU 1D GG1-1[bpr] CPU 1D +CPU 5C GG1-2[bpr] CPU 5C + +VID 4L GG1-9 VID 4L 2600J +VID 4F GG1-10 VID 4F 2700K +VID 4D GG1-11 VID 4D 2800L +VID 1C GG1-3[bpr] VID 1C +VID 2N GG1-4[bpr] VID 2N +VID 5N GG1-5[bpr] VID 5N + + +Xevious: +------- +MAIN CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +000xxxxxxxxxxxxx R xxxxxxxx ROM 1 program ROM +001xxxxxxxxxxxxx R xxxxxxxx ROM 2 program ROM +the rest of the memory map is common to the other CPUs + +MOTION CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +000xxxxxxxxxxxxx R xxxxxxxx ROM 3 program ROM +the rest of the memory map is common to the other CPUs + +SOUND CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +00-xxxxxxxxxxxxx R xxxxxxxx ROM 4 program ROM +the rest of the memory map is common to the other CPUs + +COMMON: +a small part of the decoding for the video board is done by a PAL so it is inferred by program behaviour + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +01000----------- n.c. +01001----------- n.c. +01010----------- n.c. +01011----------- n.c. +01100----------- n.c. +01101-----00---- W ----xxxx SRAM 0 \ sound control registers +01101-----01---- W ----xxxx SRAM 1 / +01101-----10-000 W -------x IRQ1 main CPU irq enable/acknowledge +01101-----10-001 W -------x IRQ2 motion CPU irq enable/acknowledge +01101-----10-010 W -------x NMION sound CPU nmi enable +01101-----10-011 W -------x RESET reset sub and sound CPU, and 5xXX chips on CPU board +01101-----10-100 W -------x n.c. +01101-----10-101 W -------x n.c. +01101-----10-110 W -------x n.c. +01101-----10-111 W -------x n.c. +01101-----11---- W -------- WDR watchdog reset +01101-----00-xxx R -------x DIP SW dip switch B +01101-----00-xxx R ------x- DIP SW dip switch A +01101-----01---- R n.c. +01101-----10---- R n.c. +01101-----11---- R n.c. +01110--0-------- R/W xxxxxxxx I/O custom 06XX data +01110--1-------- R/W xxxxxxxx I/O custom 06XX control +01111xxxxxxxxxxx R/W xxxxxxxx work RAM +1000-xxxxxxxxxxx R/W xxxxxxxx work RAM +1000-1111xxxxxxx R/W xxxxxxxx portion holding sprite registers (x, y) +1001-xxxxxxxxxxx R/W xxxxxxxx work RAM +1001-1111xxxxxxx R/W xxxxxxxx portion holding sprite registers (flip, size) +1010-xxxxxxxxxxx R/W xxxxxxxx work RAM +1010-1111xxxxxxx R/W xxxxxxxx portion holding sprite registers (sprite number & color) +10110xxxxxxxxxxx R/W xxxxxxxx PF0 fg tilemap RAM (tile attributes) +10111xxxxxxxxxxx R/W xxxxxxxx PF1 bg tilemap RAM (tile attributes) +11000xxxxxxxxxxx R/W xxxxxxxx PF2 fg tilemap RAM (tile code) +11001xxxxxxxxxxx R/W xxxxxxxx PF3 bg tilemap RAM (tile code) +1101-----000---x W xxxxxxxx bg X scroll (9-bit data: A0 is the msb) +1101-----001---x W xxxxxxxx fg X scroll (9-bit data: A0 is the msb) +1101-----010---x W xxxxxxxx bg Y scroll (9-bit data: A0 is the msb) +1101-----011---x W xxxxxxxx fg Y scroll (9-bit data: A0 is the msb) +1101-----111---- W -------x FLIP flip screen +1110------------ n.c. +1111-----------0 W xxxxxxxx BS0 \ address to read from background data ROMs +1111-----------1 W xxxxxxxx BS1 / (see xevious_bb_r) +1111-----------0 R xxxxxxxx BB0 \ read from background data ROMs +1111-----------1 R xxxxxxxx BB1 / + + +Namco vs Atari ROM names and locations +-------------------------------------- +Location ID Location ID +-------- ---- -------- ---------- +CPU 3P XVI-1 CPU 1M 136018-118 +CPU 3M XVI-2 " " " " +CPU 2M XVI-3 CPU 1L 136018-119 +CPU 2L XVI-4 " " " " +CPU 3F XVI-5 CPU 4C 136018-120 +CPU 3J XVI-6 " " " " +CPU 2C XVI-7 CPU 2C 136018-127 +CPU 5N XVI-1[bpr] CPU 6M 136018-028 +CPU 7N XVI-2[bpr] CPU 8M 136018-029 + +VID 2A XVI-9 VID 2A 136018-101 +VID 2B XVI-10 VID 2B 136018-102 +VID 2C XVI-11 VID 2C 136018-103 +VID 3B XVI-12 VID 3B 136018-104 +VID 3C XVI-13 VID 3C 136018-105 +VID 3D XVI-14 VID 3D 136018-106 +VID 4M XVI-15 VID 4M 136018-107 +VID 4N XVI-16 VID 4N 136018-108 +VID 4P XVI-17 VID 4P 136018-109 +VID 4R XVI-18 VID 4R 136018-110 +VID 3L XVI-4[bpr] VID 3L 136018-011 +VID 3M XVI-5[bpr] VID 3M 136018-012 +VID 4F XVI-6[bpr] VID 4F 136018-013 +VID 4H XVI-7[bpr] VID 4H 136018-014 +VID 6A XVI-8[bpr] VID 6A 136018-015 +VID 6D XVI-9[bpr] VID 6D 136018-016 +VID 6E XVI-10[bpr] VID 6E 136018-017 + + +Dig Dug: +------- +MAIN CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 0 program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 1 program ROM +0010xxxxxxxxxxxx R xxxxxxxx ROM 2 program ROM +0011xxxxxxxxxxxx R xxxxxxxx ROM 3 program ROM +the rest of the memory map is common to the other CPUs + +SUB CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 4 program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 5 program ROM +0010------------ n.c. +0011------------ n.c. +the rest of the memory map is common to the other CPUs + +SOUND CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 6 program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 7 program ROM (optional, not used) +0010------------ n.c. +0011------------ n.c. +the rest of the memory map is common to the other CPUs + +COMMON: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +01000----------- n.c. +01001----------- n.c. +01010----------- n.c. +01011----------- n.c. +01100----------- n.c. +01101-----00---- W ----xxxx AUDIO 0 \ sound control registers +01101-----01---- W ----xxxx AUDIO 1 / +01101-----10-000 W -------x IRQ1 main CPU irq enable/acknowledge +01101-----10-001 W -------x IRQ2 sub CPU irq enable/acknowledge +01101-----10-010 W -------x NMION sound CPU nmi enable +01101-----10-011 W -------x RESET reset sub and sound CPU, and 5xXX chips on CPU board +01101-----10-100 W -------x n.c. +01101-----10-101 W -------x MOD 0 \ +01101-----10-110 W -------x MOD 1 | to custom 53XX +01101-----10-111 W -------x MOD 2 / +01101-----11---- W -------- WDDIS watchdog reset +01110--0-------- R/W xxxxxxxx I/O custom 06XX data +01110--1-------- R/W xxxxxxxx I/O custom 06XX control +01111----------- n.c. +10000xxxxxxxxxxx R/W xxxxxxxx RAM 0 tilemap RAM + work RAM +10001-xxxxxxxxxx R/W xxxxxxxx OBJRAM work RAM +10001-111xxxxxxx R/W xxxxxxxx portion holding sprite registers (sprite number and color) +10010-xxxxxxxxxx R/W xxxxxxxx POSRAM work RAM +10010-111xxxxxxx R/W xxxxxxxx portion holding sprite registers (x and y) +10011-xxxxxxxxxx R/W xxxxxxxx FLPRAM work RAM +10011-111xxxxxxx R/W xxxxxxxx portion holding sprite registers (flip) +10100--------000 W -------x \ background ROM (114) bank select +10100--------001 W -------x / +10100--------010 W -------x tilemap color select (low or high 4 bits of tilemap RAM) +10100--------011 W -------x background enable +10100--------100 W -------x \ background color lookup PROM (112) bank select +10100--------101 W -------x / +10100--------110 W -------x n.c. +10100--------111 W -------x FLIP flip screen +10101----------- n.c. +10110----------- n.c. +10111----0xxxxxx W xxxxxxxx EAROM non volatile memory address latch and data write +10111----0------ R xxxxxxxx EAROM non volatile memory read +10111----1------ W ----xxxx EAROM non volatile memory control + + + +Namco vs Atari ROM names and locations +-------------------------------------- +The Namco version is composed of two boards, while the Atari version is +single board. There are two revisions of the Atari version. + +Location ID Location Location ID + (type 1) (type 2) +-------- ---- -------- -------- ---------- +CPU 3P DD1-1 6L 2C/D 136007-101 +CPU 3M DD1-2 6M 2E 136007-102 +CPU 2M DD1-3 6N/P 2B/C 136007-103 +CPU 2L DD1-4 6R 2A 136007-104 +CPU 3F DD1-5 6C 2P 136007-105 +CPU 3J DD1-6 6D 2N 136007-106 +CPU 2C DD1-7 5L 2K/L 136007-107 +CPU 5N [bpr] 2K/L 10A 136007-109 +CPU 7N [bpr] 2P 11A 136007-110 + +VID 2C DD1-9 8R 5K 136007-108 +VID 1C [bpr] 4G 8F 136007-111 +VID 2N [bpr] 10K/L 4N 136007-112 +VID 5N [bpr] 1R 8L 136007-113 +VID 2D DD1-10 9N 4J 136007-114 +VID 5C DD1-11 10C/D 4F 136007-115 +VID 5F DD1-12 7A/B 5B 136007-119 +VID 5H DD1-13 8A/B 5A 136007-118 +VID 5J DD1-14 7C 5C 136007-117 +VID 5K DD1-15 8C 5D 136007-116 + + + +Gatsbee (Galaga mod/bootleg) +---------------------------- +This game runs on modified bootleg Galaga hardware (blue board with PCB numbers DG-09-02 and DG-07-02) + +ROM8: is a 2764. pins 1, 26, 27, 28 tied together. + pin2 out of socket, has wire that is tied to pin 4 of a LS259 that sits on top of the main Z80 + CPU located at 5B/6B + +Z80: There are 2 logic chips sitting on top of it which are wired up to the Z80 and to each other. + Looks like this.... + |-------------------| + | LS32 LS259 < + |-------------------| + +Bend all the legs outwards. +Line up the LS259 so pin 16 is in line with Z80 pin 11 +Line up the LS32 so pin 7 is in line with Z80 pin 29 +Atach the 2 chips to the top of the Z80 with some glue +Connect like this.... + +LS32 pin 1 tied to Z80 pin 22 +LS32 pin 2 tied to Z80 pin 19 +LS32 pin 3,4 tied together +LS32 pin 5 tied to Z80 pin 4 +LS32 pin 6 tied to pin 10 LS32 +LS32 pin 7 tied to Z80 pin 29 (GND) +LS32 pin 8 tied to LS259 pin 14 +LS32 pin 9 tied to Z80 pin 5 +LS32 pins 11, 12, 13 have NC +LS32 pin 14 tied to Z80 pin 11 (+5V) + +LS259 pin 1 tied to Z80 pin 30 +LS259 pin 2 tied to Z80 pin 31 +LS259 pin 3 tied to Z80 pin 32 +LS259 pin 4 to ROM 8 (as above) +LS259 pins 5, 6, 7 have NC +LS259 pin 8 tied to Z80 pin 29 (GND) +LS259 pins 9, 10, 11, 12 have NC +LS259 pin 13 tied to Z80 pin 14 +LS259 pin 15 tied to Z80 pin 26 +LS259 pin 16 tied to Z80 pin 11 + + + +Easter eggs: +----------- +- Bosconian: + - enter service mode + - keep B1 pressed and enter the following sequence: + 5xU 6xR 1xD 4xL + (c) 1981 NAMCO LTD. will be added at the bottom of the screen. + +- Galaga: + - enter service mode + - keep B1 pressed and enter the following sequence: + 5xR 6xL 3xR 7xL + (c) 1981 NAMCO LTD. will appear on the screen. + +- Xevious: + - start a game + - go to the bottom right of the screen and keep B2 pressed + NAMCO ORIGINAL + program by EVEZOO + will be written at the bottom of the screen + In Super Xevious this is changed to + special thanks for you + by game designer EVEZOO + +- Dig Dug: + - enter service mode + - keep B1 pressed and enter the following sequence: + 6xU 3xR 4xD 8xL + (c) 1982 NAMCO LTD. will appear on the screen. + + +Notes: +----- +- The Cabinet Type "dip switch" actually comes from the edge connector, but is mapped + in memory in place of dip switch #8. dip switch #8 selects single/dual coin counters + and is entirely handled by hardware. + +- galaga: there is a bug in the sound CPU program. During initialization, it enables + NMI before clearing RAM, but the NMI handler doesn't save the registers, so it cannot + interrupt program execution. If the NMI happens before the LDIR that clears RAM has + finished, the program will crash. + To prevent this, I had to use a custom interrupt_gen, timing NMI generation + appropriately. + +- galaga: there were "fast shoot" hacks available, which are not supported. + Their effects can be replicated with this line in cheat.dat: + galaga:1:070D:0D:100:Fast Shoot + +- bosco: there appears to be a bug in the code at 0BB1, which handles communication + with the 06XX custom chip. First it saves in A' the command to write, then if a + transfer is still in progress it jups to 0BC1, does other things, then restores + the command from A' and stores it in RAM. At that point (0BE1) it checks again if + a transfer is in progress. If the trasnfer has terminated, it jumps to 0BEB, which + restores the command from RAM, and jumps back to 0BBA to send the command. However, + the instruction at 0BBA is ex af,af', so the command is overwritten with garbage. + There's also an exx at 0BBB which seems unnecessary but that's harmless. + Anyway, what this bug means is that we must make sure that the 06XX generates NMIs + quickly enough to ensure that 0BB1 is usually not called with a transfer still is + progress. It doesn't seem possible to prevent it altogether though, so we can only + hope that the transfer doesn't terminate in the middle of the function. + +- bosco: we have two dumps of the sound shape ROM, "prom.1d" and "bosco.spr". Music + changes a lot from one version to the other. + I'm using the former because it is more similar to the other Namco games. The latter, + after masking off the unused top 4 bits and inverting bit 3, matches the Galaga one, + so it might have come from a (bootleg?) conversion. + +- bosco & galaga: the Midway arcade cabinet had an optional rapid fire board, using + a 556 to generate autofire while the button was held. That really makes little + sense in Galaga! For Bosconian, I guess it was for the boscomdo set I, because the + other sets have autofire built-in. + +- the bosconian video system is (apart from the starfield) almost identical functionally + to Rally X, but the hardware is quite different: Rally X has no custom ICs. + +- digdug: if you enter service mode and press press service coin something like + the following is written at the bottom of the screen: + 99.9999.9999.9999.9999. + This is explained in the manual: it is the number of games played, of points, etc. + The counters start from 999 and count backwards. + +- gallag is identical to galagao, apart from the title changed to "GALLAG" and the + copyright notice changed from "(c) 1981 NAMCO LTD" to "1 9 8 2" (and the Namco logo + removed from the gfx). The only interesting thing about it is the 4th Z80, used to + simulate the custom 5xXX chips of the original. + It also has different explosion and starfield circuitries, to do without the Namco + custom chips. + +- differences between versions of digdug: + - the background graphics are slightly different in the Atari versions; the earth is + less regular. + + - "digduga1" is identical to "digdugb", apart from the gfx and copyright notices + changed from "NAMCO LTD." to "ATARI INC.". + + - "digdug" fixes two bugs that were present in "digdugb": First, as monster speed + increased in later rounds it could eventually roll over to 0, causing the monsters + to stop moving altogether. Second, "double-killing" a monster by bursting it and + immediately dropping a rock on the corpse could result in the round not ending + even after all monsters were killed. + This set also has the code to save high scores to EEPROM rewritten, though the + reason for the changes is unclear. + + - "digdugat" is almost identical to "digdug" (apart from the Atari gfx/copyright + changes), but there are three added instructions in the CPU0 program that change + the code alignment. The change eliminates the "kill screen" at round 256 by + making the round number roll over to 156, and hides the rollover from the player + by only ever displaying the lower two digits of the round number. Interestingly, + "digdug" actually contains all the code to implement the rollover (at $0018-$0026) + but just doesn't call it, implying that Namco deliberately chose to keep the kill + screen in this version. + + - "digsid" is intermediate between "digdugb" and "digdug"; it has the changed EEPROM + handling, but not the gameplay bug fixes. It has some unique changes as well: + the initial high scores are 25000 instead of 10000, and the game begins on the + screen that is round 4 in the other sets, skipping the first three screens. + The latter change seems likely to have been done by Namco themselves and not by + Sidam, as it involves insertion of code right in the middle of the CPU0 program + and realignment of all the code after the insertion. + + - "dzigzag" and "digdugb" are identical, apart from the hacked gfx and the copyright + notices changed from "NAMCO LTD." to "1 9 8 2". It's a bootleg of "digdugb", and + not of "digduga1", because the hidden "NAMCO" string at offset 0x1eea of CPU2 is + still present, while it is replaced by "ATARI" in digduga1. + The only interesting thing about the bootleg is the 4th Z80, used to simulate + the custom 5xXX chips of the original. + + +TODO: +---- +- bosco & galaga: + - the starfield is wrong. + - The function of STARCLR is unknown. It is not latched and there are no data bits + used... + +- bosco: is the scrolling tilemap placement correct? It is currently aligned so that + the test grid shown on startup is correct, but this way an unerased grey strip + remains on the left of the screen during the title sequence. + +- gallag/gatsbee: explosions are not emulated since the bootleg board doesn't have + the 54XX custom. Should probably use samples like Battles? + +- Should Xevios have a 4th Z80 like the other bootlegs? We don't have a dump for + that ROM. + +- xevious: I haven't found any Easter egg in service mode. The main loop is very + simple so there might just not be one, though this would be the only Namco game + of that era to not have a service mode Easter egg. On the other hand, the service + mode in this game is VERY spartan when compared to the other Namco games. + +- dzigzag: emulate the 4th CPU (should be similar to battles) + +***************************************************************************/ + +#include "driver.h" +#include "machine/atari_vg.h" +#include "machine/namcoio.h" +#include "machine/namco50.h" +#include "includes/galaga.h" +#include "sound/namco.h" +#include "sound/namco52.h" +#include "rescap.h" +#include "sound/samples.h" +#include "audio/namco54.h" +#include "nam_cust.h" + + +static INTERRUPT_GEN( galaga_cpu3_nmi ) +{ + /* see notes at the top of the driver */ + if (cpu_getiloops() & 1) + nmi_line_pulse(); +} + +static READ8_HANDLER( bosco_dsw_r ) +{ + int bit0,bit1; + + bit0 = (readinputportbytag("DSWB") >> offset) & 1; + bit1 = (readinputportbytag("DSWA") >> offset) & 1; + + return bit0 | (bit1 << 1); +} + +static WRITE8_HANDLER( galaga_flip_screen_w ) +{ + flip_screen_set(data & 1); +} + +static WRITE8_HANDLER( bosco_flip_screen_w ) +{ + flip_screen_set(~data & 1); +} + + +static WRITE8_HANDLER( bosco_latch_w ) +{ + int bit = data & 1; + + switch (offset) + { + case 0x00: /* IRQ1 */ + cpu_interrupt_enable(0,bit); + if (!bit) + cpunum_set_input_line(0, 0, CLEAR_LINE); + break; + + case 0x01: /* IRQ2 */ + cpu_interrupt_enable(1,bit); + if (!bit) + cpunum_set_input_line(1, 0, CLEAR_LINE); + break; + + case 0x02: /* NMION */ + cpu_interrupt_enable(2,!bit); + break; + + case 0x03: /* RESET */ + cpunum_set_input_line(1, INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE); + cpunum_set_input_line(2, INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE); + break; + + case 0x04: /* n.c. */ + break; + + case 0x05: /* MOD 0 (xevious: n.c.) */ + case 0x06: /* MOD 1 (xevious: n.c.) */ + case 0x07: /* MOD 2 (xevious: n.c.) */ + break; + } +} + + +static READ8_HANDLER( in0_l ) { return readinputportbytag("IN0"); } // fire and start buttons +static READ8_HANDLER( in0_h ) { return readinputportbytag("IN0") >> 4; } // coins +static READ8_HANDLER( in1_l ) { return readinputportbytag("IN1"); } // P1 joystick +static READ8_HANDLER( in1_h ) { return readinputportbytag("IN1") >> 4; } // P2 joystick +static READ8_HANDLER( dipA_l ) { return readinputportbytag("DSWA"); } // dips A +static READ8_HANDLER( dipA_h ) { return readinputportbytag("DSWA") >> 4; } // dips A +static READ8_HANDLER( dipB_l ) { return readinputportbytag("DSWB"); } // dips B +static READ8_HANDLER( dipB_h ) { return readinputportbytag("DSWB") >> 4; } // dips B +static WRITE8_HANDLER( out_0 ) +{ + set_led_status(1,data & 1); + set_led_status(0,data & 2); + coin_counter_w(1,~data & 4); + coin_counter_w(0,~data & 8); +} +static WRITE8_HANDLER( out_1 ) +{ + coin_lockout_global_w(data & 1); +} + +static struct namcoio_interface intf0 = +{ + { in0_l, in0_h, in1_l, in1_h }, /* port read handlers */ + { out_0, out_1 } /* port write handlers */ +}; +static struct namcoio_interface intf1 = +{ + { dipA_l, dipA_h, dipB_l, dipB_h }, /* port read handlers */ + { NULL, NULL } /* port write handlers */ +}; + + +static MACHINE_RESET( bosco ) +{ + int i; + + /* Reset all latches */ + for (i = 0;i < 8;i++) + bosco_latch_w(i,0); + + namco_06xx_init(0, 0, + NAMCOIO_51XX, &intf0, + NAMCOIO_NONE, NULL, + NAMCOIO_50XX, NULL, + NAMCOIO_54XX, NULL); + + namco_06xx_init(1, 1, + NAMCOIO_50XX_2, NULL, + NAMCOIO_52XX, NULL, + NAMCOIO_NONE, NULL, + NAMCOIO_NONE, NULL); +} + +static MACHINE_RESET( galaga ) +{ + int i; + + /* Reset all latches */ + for (i = 0;i < 8;i++) + bosco_latch_w(i,0); + + namco_06xx_init(0, 0, + NAMCOIO_51XX, &intf0, + NAMCOIO_NONE, NULL, + NAMCOIO_NONE, NULL, + NAMCOIO_54XX, NULL); +} + +static MACHINE_RESET( xevious ) +{ + int i; + + /* Reset all latches */ + for (i = 0;i < 8;i++) + bosco_latch_w(i,0); + + namco_06xx_init(0, 0, + NAMCOIO_51XX, &intf0, + NAMCOIO_NONE, NULL, + NAMCOIO_50XX, NULL, + NAMCOIO_54XX, NULL); +} + +static MACHINE_RESET( battles ) +{ + int i; + + /* Reset all latches */ + for (i = 0;i < 8;i++) + bosco_latch_w(i,0); + + battles_customio_init(); +} + +static MACHINE_RESET( digdug ) +{ + int i; + + /* Reset all latches */ + for (i = 0;i < 8;i++) + bosco_latch_w(i,0); + + namco_06xx_init(0, 0, + NAMCOIO_51XX, &intf0, + NAMCOIO_53XX_DIGDUG, &intf1, + NAMCOIO_NONE, NULL, + NAMCOIO_NONE, NULL); +} + + + +/* the same memory map is used by all three CPUs; all RAM areas are shared */ +static ADDRESS_MAP_START( bosco_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ + AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r) + AM_RANGE(0x6800, 0x681f) AM_WRITE(pacman_sound_w) AM_BASE(&namco_soundregs) + AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6830, 0x6830) AM_WRITE(watchdog_reset_w) + AM_RANGE(0x7000, 0x70ff) AM_READWRITE(namco_06xx_0_data_r, namco_06xx_0_data_w) + AM_RANGE(0x7100, 0x7100) AM_READWRITE(namco_06xx_0_ctrl_r, namco_06xx_0_ctrl_w) + AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE(1) + AM_RANGE(0x8000, 0x8fff) AM_READWRITE(bosco_videoram_r, bosco_videoram_w) AM_BASE(&bosco_videoram) /* + sprite registers */ + AM_RANGE(0x9000, 0x90ff) AM_READWRITE(namco_06xx_1_data_r, namco_06xx_1_data_w) + AM_RANGE(0x9100, 0x9100) AM_READWRITE(namco_06xx_1_ctrl_r, namco_06xx_1_ctrl_w) + AM_RANGE(0x9800, 0x980f) AM_WRITE(MWA8_RAM) AM_SHARE(2) AM_BASE(&bosco_radarattr) + AM_RANGE(0x9810, 0x9810) AM_WRITE(bosco_scrollx_w) + AM_RANGE(0x9820, 0x9820) AM_WRITE(bosco_scrolly_w) + AM_RANGE(0x9830, 0x9830) AM_WRITE(bosco_starcontrol_w) + AM_RANGE(0x9840, 0x9840) AM_WRITE(bosco_starclr_w) + AM_RANGE(0x9870, 0x9870) AM_WRITE(bosco_flip_screen_w) + AM_RANGE(0x9874, 0x9875) AM_WRITE(bosco_starblink_w) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( galaga_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ + AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r) + AM_RANGE(0x6800, 0x681f) AM_WRITE(pacman_sound_w) AM_BASE(&namco_soundregs) + AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6830, 0x6830) AM_WRITE(watchdog_reset_w) + AM_RANGE(0x7000, 0x70ff) AM_READWRITE(namco_06xx_0_data_r, namco_06xx_0_data_w) + AM_RANGE(0x7100, 0x7100) AM_READWRITE(namco_06xx_0_ctrl_r, namco_06xx_0_ctrl_w) + AM_RANGE(0x8000, 0x87ff) AM_READWRITE(galaga_videoram_r, galaga_videoram_w) AM_BASE(&galaga_videoram) + AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE(1) AM_BASE(&galaga_ram1) + AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE(2) AM_BASE(&galaga_ram2) + AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE(3) AM_BASE(&galaga_ram3) + AM_RANGE(0xa000, 0xa005) AM_WRITE(galaga_starcontrol_w) + AM_RANGE(0xa007, 0xa007) AM_WRITE(galaga_flip_screen_w) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( xevious_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ + AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r) + AM_RANGE(0x6800, 0x681f) AM_WRITE(pacman_sound_w) AM_BASE(&namco_soundregs) + AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6830, 0x6830) AM_WRITE(watchdog_reset_w) + AM_RANGE(0x7000, 0x70ff) AM_READWRITE(namco_06xx_0_data_r, namco_06xx_0_data_w) + AM_RANGE(0x7100, 0x7100) AM_READWRITE(namco_06xx_0_ctrl_r, namco_06xx_0_ctrl_w) + AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE(1) /* work RAM */ + AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE(2) AM_BASE(&xevious_sr1) /* work RAM + sprite registers */ + AM_RANGE(0x9000, 0x97ff) AM_RAM AM_SHARE(3) AM_BASE(&xevious_sr2) /* work RAM + sprite registers */ + AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE(4) AM_BASE(&xevious_sr3) /* work RAM + sprite registers */ + AM_RANGE(0xb000, 0xb7ff) AM_READWRITE(xevious_fg_colorram_r, xevious_fg_colorram_w) AM_BASE(&xevious_fg_colorram) + AM_RANGE(0xb800, 0xbfff) AM_READWRITE(xevious_bg_colorram_r, xevious_bg_colorram_w) AM_BASE(&xevious_bg_colorram) + AM_RANGE(0xc000, 0xc7ff) AM_READWRITE(xevious_fg_videoram_r, xevious_fg_videoram_w) AM_BASE(&xevious_fg_videoram) + AM_RANGE(0xc800, 0xcfff) AM_READWRITE(xevious_bg_videoram_r, xevious_bg_videoram_w) AM_BASE(&xevious_bg_videoram) + AM_RANGE(0xd000, 0xd07f) AM_WRITE(xevious_vh_latch_w) + AM_RANGE(0xf000, 0xffff) AM_READWRITE(xevious_bb_r, xevious_bs_w) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( digdug_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ + AM_RANGE(0x6800, 0x681f) AM_WRITE(pacman_sound_w) AM_BASE(&namco_soundregs) + AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6830, 0x6830) AM_WRITE(watchdog_reset_w) + AM_RANGE(0x7000, 0x70ff) AM_READWRITE(namco_06xx_0_data_r, namco_06xx_0_data_w) + AM_RANGE(0x7100, 0x7100) AM_READWRITE(namco_06xx_0_ctrl_r, namco_06xx_0_ctrl_w) + AM_RANGE(0x8000, 0x83ff) AM_READWRITE(digdug_videoram_r, digdug_videoram_w) AM_BASE(&digdug_videoram) /* tilemap RAM (bottom half of RAM 0 */ + AM_RANGE(0x8400, 0x87ff) AM_RAM AM_SHARE(1) /* work RAM (top half for RAM 0 */ + AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE(2) AM_BASE(&digdug_objram) /* work RAM + sprite registers */ + AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE(3) AM_BASE(&digdug_posram) /* work RAM + sprite registers */ + AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE(4) AM_BASE(&digdug_flpram) /* work RAM + sprite registers */ + AM_RANGE(0xa000, 0xa007) AM_READNOP AM_WRITE(digdug_PORT_w) /* video latches (spurious reads when setting latch bits) */ + AM_RANGE(0xb800, 0xb83f) AM_READWRITE(atari_vg_earom_r, atari_vg_earom_w) /* non volatile memory data */ + AM_RANGE(0xb840, 0xb840) AM_WRITE(atari_vg_earom_ctrl_w) /* non volatile memory control */ +ADDRESS_MAP_END + + + +/* bootleg 4th CPU replacing the 5xXX chips */ +static ADDRESS_MAP_START( readmem4_galaga, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_READ(MRA8_ROM) + AM_RANGE(0x1000, 0x107f) AM_READ(MRA8_RAM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writemem4_galaga, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x1000, 0x107f) AM_WRITE(MWA8_RAM) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( readmem4_battles, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_READ(MRA8_ROM) + AM_RANGE(0x4000, 0x4003) AM_READ(battles_input_port_r) + AM_RANGE(0x6000, 0x6000) AM_READ(battles_customio3_r) + AM_RANGE(0x7000, 0x7000) AM_READ(battles_customio_data3_r) + AM_RANGE(0x8000, 0x80ff) AM_READ(MRA8_RAM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writemem4_battles, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x4001, 0x4001) AM_WRITE(battles_CPU4_coin_w) + AM_RANGE(0x5000, 0x5000) AM_WRITE(battles_noise_sound_w) + AM_RANGE(0x6000, 0x6000) AM_WRITE(battles_customio3_w) + AM_RANGE(0x7000, 0x7000) AM_WRITE(battles_customio_data3_w) + AM_RANGE(0x8000, 0x80ff) AM_WRITE(MWA8_RAM) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( readmem4_dzigzag, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_READ(MRA8_ROM) + AM_RANGE(0x1000, 0x107f) AM_READ(MRA8_RAM) + AM_RANGE(0x4000, 0x4007) AM_READ(MRA8_RAM) // dip switches? bits 0 & 1 used +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writemem4_dzigzag, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x1000, 0x107f) AM_WRITE(MWA8_RAM) +ADDRESS_MAP_END + + + +static INPUT_PORTS_START( bosco ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + + PORT_START_TAG("DSWA") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hardest ) ) + PORT_DIPSETTING( 0x00, "Auto" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Freeze" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + + PORT_START_TAG("DSWB") + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + /* TODO: bonus scores are different for 5 lives */ + PORT_DIPNAME( 0x38, 0x08, "Bonus Fighter" ) + PORT_DIPSETTING( 0x30, "15K 50K" ) + PORT_DIPSETTING( 0x38, "20K 70K" ) + PORT_DIPSETTING( 0x08, "10K 50K 50K" ) + PORT_DIPSETTING( 0x10, "15K 50K 50K" ) + PORT_DIPSETTING( 0x18, "15K 70K 70K" ) + PORT_DIPSETTING( 0x20, "20K 70K 70K" ) + PORT_DIPSETTING( 0x28, "30K 100K 100K" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0x80, "3" ) + PORT_DIPSETTING( 0xc0, "5" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( boscomd ) + PORT_INCLUDE( bosco ) + + PORT_MODIFY("DSWA") + PORT_DIPNAME( 0x01, 0x01, "2 Credits Game" ) + PORT_DIPSETTING( 0x00, "1 Player" ) + PORT_DIPSETTING( 0x01, "2 Players" ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Hardest ) ) + PORT_DIPSETTING( 0x00, "Auto" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Freeze" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( galaga ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL + + PORT_START_TAG("DSWA") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Freeze" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Rack Test" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + + PORT_START_TAG("DSWB") + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + /* TODO: bonus scores are different for 5 lives */ + PORT_DIPNAME( 0x38, 0x10, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x20, "20K 60K 60K" ) + PORT_DIPSETTING( 0x18, "20K 60K" ) + PORT_DIPSETTING( 0x10, "20K 70K 70K" ) + PORT_DIPSETTING( 0x30, "20K 80K 80K" ) + PORT_DIPSETTING( 0x38, "30K 80K" ) + PORT_DIPSETTING( 0x08, "30K 100K 100K" ) + PORT_DIPSETTING( 0x28, "30K 120K 120K" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x80, "3" ) + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPSETTING( 0xc0, "5" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( galagamw ) + PORT_INCLUDE( galaga ) + + PORT_MODIFY("DSWA") + PORT_DIPNAME( 0x01, 0x01, "2 Credits Game" ) + PORT_DIPSETTING( 0x00, "1 Player" ) + PORT_DIPSETTING( 0x01, "2 Players" ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Freeze" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Rack Test" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) +INPUT_PORTS_END + +/* the same as galaga but with vertical movement */ +static INPUT_PORTS_START( gatsbee ) + PORT_INCLUDE( galaga ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL +INPUT_PORTS_END + + +static INPUT_PORTS_START( xevious ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + + PORT_START_TAG("DSWA") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x1c, 0x1c, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x18, "10K 40K 40K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x14, "10K 50K 50K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x10, "20K 50K 50K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x1c, "20K 60K 60K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x0c, "20K 70K 70K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x08, "20K 80K 80K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x04, "20K 60K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_CONDITION("DSWA",0x60,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x18, "10K 50K 50K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x14, "20K 50K 50K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x10, "20K 60K 60K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x1c, "20K 70K 70K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x0c, "20K 80K 80K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x08, "30K 100K 100K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x04, "20K 80K" ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_CONDITION("DSWA",0x60,PORTCOND_EQUALS,0x00) + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x40, "1" ) + PORT_DIPSETTING( 0x20, "2" ) + PORT_DIPSETTING( 0x60, "3" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + + PORT_START_TAG("DSWB") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_DIPNAME( 0x02, 0x02, "Flags Award Bonus Life" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x60, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x80, 0x80, "Freeze" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +/* same as xevious but different "Coin B" Dip Switch and "Copyright" Dip Switch instead of "Freeze" */ +static INPUT_PORTS_START( xeviousa ) + PORT_INCLUDE( xevious ) + + PORT_MODIFY("DSWB") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_DIPNAME( 0x02, 0x02, "Flags Award Bonus Life" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x60, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + /* when switch is on Namco, high score names are 10 letters long */ + PORT_DIPNAME( 0x80, 0x80, "Copyright" ) + PORT_DIPSETTING( 0x00, "Namco" ) + PORT_DIPSETTING( 0x80, "Atari/Namco" ) +INPUT_PORTS_END + +/* same as xevious but "Copyright" Dip Switch instead of "Freeze" */ +static INPUT_PORTS_START( xeviousb ) + PORT_INCLUDE( xevious ) + + PORT_MODIFY("DSWB") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_DIPNAME( 0x02, 0x02, "Flags Award Bonus Life" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x60, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + /* when switch is on Namco, high score names are 10 letters long */ + PORT_DIPNAME( 0x80, 0x80, "Copyright" ) + PORT_DIPSETTING( 0x00, "Namco" ) + PORT_DIPSETTING( 0x80, "Atari/Namco" ) +INPUT_PORTS_END + +/* same as xevious but different "Coin B" Dip Switch and inverted "Freeze" Dip Switch */ +static INPUT_PORTS_START( sxevious ) + PORT_INCLUDE( xevious ) + + PORT_MODIFY("DSWB") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_DIPNAME( 0x02, 0x02, "Flags Award Bonus Life" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x60, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x80, 0x00, "Freeze" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( digdug ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + + PORT_START_TAG("DSWA") + PORT_DIPNAME( 0x07, 0x01, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_7C ) ) + PORT_DIPNAME( 0x38, 0x18, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x20, "10K 40K 40K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x10, "10K 50K 50K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x30, "20K 60K 60K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x08, "20K 70K 70K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x28, "10K 40K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x18, "20K 60K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x38, "10K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_CONDITION("DSWA",0xc0,PORTCOND_NOTEQUALS,0xc0) + PORT_DIPSETTING( 0x20, "20K 60K 60K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x10, "30K 80K 80K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x30, "20K 50K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x08, "20K 60K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x28, "30K 70K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x18, "20K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x38, "30K" ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_CONDITION("DSWA",0xc0,PORTCOND_EQUALS,0xc0) + PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0x80, "3" ) + PORT_DIPSETTING( 0xc0, "5" ) + + PORT_START_TAG("DSWB") + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x20, 0x20, "Freeze" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x08, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) ) +INPUT_PORTS_END + + + +static const gfx_layout charlayout_2bpp = +{ + 8,8, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { STEP4(8*8,1), STEP4(0*8,1) }, + { STEP8(0*8,8) }, + 16*8 +}; + +static const gfx_layout charlayout_xevious = +{ + 8,8, + RGN_FRAC(1,1), + 1, + { 0 }, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static const gfx_layout charlayout_digdug = +{ + 8,8, + RGN_FRAC(1,1), + 1, + { 0 }, + { STEP8(7,-1) }, + { STEP8(0,8) }, + 8*8 +}; + +static const gfx_layout bgcharlayout = +{ + 8,8, + RGN_FRAC(1,2), + 2, + { 0, RGN_FRAC(1,2) }, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static const gfx_layout spritelayout_bosco = +{ + 16,16, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0*8,1) }, + { STEP8(0*8,8), STEP8(32*8,8) }, + 64*8 +}; + +static const gfx_layout spritelayout_galaga = +{ + 16,16, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { STEP4(0*8,1), STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1) }, + { STEP8(0*8,8), STEP8(32*8,8) }, + 64*8 +}; + +static const gfx_layout spritelayout_xevious = +{ + 16,16, + RGN_FRAC(1,2), + 3, + { RGN_FRAC(1,2)+4, 0, 4 }, + { STEP4(0*8,1), STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1) }, + { STEP8(0*8,8), STEP8(32*8,8) }, + 64*8 +}; + +static const gfx_layout dotlayout = +{ + 4,4, + 8, + 3, /* 2 bits color + 1 bit transparency */ + { 5, 6, 7 }, + { STEP4(0,8) }, + { STEP4(0,32) }, + 16*8 +}; + +static GFXDECODE_START( bosco ) + GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout_2bpp, 0, 64 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout_bosco, 64*4, 64 ) + GFXDECODE_ENTRY( REGION_GFX3, 0, dotlayout, 64*4+64*4, 1 ) +GFXDECODE_END + +static GFXDECODE_START( galaga ) + GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout_2bpp, 0, 64 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout_galaga, 64*4, 64 ) +GFXDECODE_END + +static GFXDECODE_START( xevious ) + GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout_xevious, 128*4+64*8, 64 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, bgcharlayout, 0, 128 ) + GFXDECODE_ENTRY( REGION_GFX3, 0, spritelayout_xevious, 128*4, 64 ) +GFXDECODE_END + +static GFXDECODE_START( digdug ) + GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout_digdug, 0, 16 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout_galaga, 16*2, 64 ) + GFXDECODE_ENTRY( REGION_GFX3, 0, charlayout_2bpp, 64*4 + 16*2, 64 ) +GFXDECODE_END + + +/* The resistance path of the namco sound is 16k compared to + * the 10k of the highest gain 54xx filter. Giving a 10/16 gain. + */ +static struct namco_interface namco_interface = +{ + 3, /* number of voices */ + REGION_SOUND1 /* memory region */ +}; + +/* Only used by bosco. After filtering the 4V 52xx output, + * the signal is 1V, or 25%. The relative volume between + * 52xx & 54xx is the same. + */ +static struct namco_52xx_interface namco_52xx_interface = +{ + REGION_SOUND2, /* memory region */ + 4000, /* Playback frequency - from 555 timer 6M */ + 80, /* High pass filter fc */ + 0.3, /* High pass filter Q */ + 2400, /* Low pass filter fc */ + 0.9, /* Low pass filter Q */ + .25 /* Combined gain of both filters */ +}; + +static const char *battles_sample_names[] = +{ + "*battles", + "explo1.wav", /* ground target explosion */ + "explo2.wav", /* Solvalou explosion */ + 0 /* end of array */ +}; + +struct Samplesinterface battles_samples_interface = +{ + 1, /* one channel */ + battles_sample_names +}; + + + +static MACHINE_DRIVER_START( bosco ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(bosco_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(bosco_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(bosco_map,0) + MDRV_CPU_VBLANK_INT(nmi_line_pulse,2) /* 64V */ + + MDRV_CPU_ADD_TAG(CPUTAG_50XX, MB8842, 18432000/12/6) /* 1.536 MHz, internally divided by 6 */ + MDRV_CPU_PROGRAM_MAP(namco_50xx_map_program,0) + MDRV_CPU_DATA_MAP(namco_50xx_map_data,0) + MDRV_CPU_IO_MAP(namco_50xx_map_io,0) + + MDRV_CPU_ADD_TAG(CPUTAG_50XX_2, MB8842, 18432000/12/6) /* 1.536 MHz, internally divided by 6 */ + MDRV_CPU_PROGRAM_MAP(namco_50xx_2_map_program,0) + MDRV_CPU_DATA_MAP(namco_50xx_2_map_data,0) + MDRV_CPU_IO_MAP(namco_50xx_2_map_io,0) + + MDRV_CPU_ADD_TAG(CPUTAG_54XX, MB8844, 18432000/12/6) /* 1.536 MHz, internally divided by 6 */ + MDRV_CPU_PROGRAM_MAP(namco_54xx_map_program,0) + MDRV_CPU_DATA_MAP(namco_54xx_map_data,0) + MDRV_CPU_IO_MAP(namco_54xx_map_io,0) + + MDRV_WATCHDOG_VBLANK_INIT(8) + MDRV_SCREEN_REFRESH_RATE(60.606060) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(100) /* 100 CPU slices per frame - an high value to ensure proper */ + /* synchronization of the CPUs */ + MDRV_MACHINE_RESET(bosco) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(bosco) + MDRV_PALETTE_LENGTH(64*4+64*4+4+64) + + MDRV_PALETTE_INIT(bosco) + MDRV_VIDEO_START(bosco) + MDRV_VIDEO_UPDATE(bosco) + MDRV_VIDEO_EOF(bosco) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(NAMCO, 18432000/6/32) + MDRV_SOUND_CONFIG(namco_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90 * 10.0 / 16.0) + + MDRV_SOUND_ADD(NAMCO_52XX, 18432000/12) /* 1.536 MHz */ + MDRV_SOUND_CONFIG(namco_52xx_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90) + + /* discrete circuit on the 54XX outputs */ + MDRV_SOUND_ADD_TAG("Discrete", DISCRETE, 0) + MDRV_SOUND_CONFIG_DISCRETE(bosco) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( galaga ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(galaga_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(galaga_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(galaga_map,0) + MDRV_CPU_VBLANK_INT(galaga_cpu3_nmi,4) /* 64V (see notes at the top of the driver) */ + + MDRV_CPU_ADD_TAG(CPUTAG_54XX, MB8844, 18432000/12/6) /* 1.536 MHz, internally divided by 6 */ + MDRV_CPU_PROGRAM_MAP(namco_54xx_map_program,0) + MDRV_CPU_DATA_MAP(namco_54xx_map_data,0) + MDRV_CPU_IO_MAP(namco_54xx_map_io,0) + + MDRV_WATCHDOG_VBLANK_INIT(8) + MDRV_SCREEN_REFRESH_RATE(60.606060) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(100) /* 100 CPU slices per frame - an high value to ensure proper */ + /* synchronization of the CPUs */ + MDRV_MACHINE_RESET(galaga) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 28*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1) + MDRV_GFXDECODE(galaga) + MDRV_PALETTE_LENGTH(64*4+64*4+64) + + MDRV_PALETTE_INIT(galaga) + MDRV_VIDEO_START(galaga) + MDRV_VIDEO_UPDATE(galaga) + MDRV_VIDEO_EOF(galaga) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(NAMCO, 18432000/6/32) + MDRV_SOUND_CONFIG(namco_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90 * 10.0 / 16.0) + + /* discrete circuit on the 54XX outputs */ + MDRV_SOUND_ADD_TAG("Discrete", DISCRETE, 0) + MDRV_SOUND_CONFIG_DISCRETE(galaga) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( galagab ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(galaga) + + MDRV_CPU_REMOVE(CPUTAG_54XX) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(readmem4_galaga,writemem4_galaga) + + /* sound hardware */ + MDRV_SOUND_REMOVE("Discrete") +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( xevious ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(xevious_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(xevious_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(xevious_map,0) + MDRV_CPU_VBLANK_INT(nmi_line_pulse,2) /* 64V */ + + MDRV_CPU_ADD_TAG(CPUTAG_50XX, MB8842, 18432000/12/6) /* 1.536 MHz, internally divided by 6 */ + MDRV_CPU_PROGRAM_MAP(namco_50xx_map_program,0) + MDRV_CPU_DATA_MAP(namco_50xx_map_data,0) + MDRV_CPU_IO_MAP(namco_50xx_map_io,0) + + MDRV_CPU_ADD_TAG(CPUTAG_54XX, MB8844, 18432000/12/6) /* 1.536 MHz, internally divided by 6 */ + MDRV_CPU_PROGRAM_MAP(namco_54xx_map_program,0) + MDRV_CPU_DATA_MAP(namco_54xx_map_data,0) + MDRV_CPU_IO_MAP(namco_54xx_map_io,0) + + MDRV_WATCHDOG_VBLANK_INIT(8) + MDRV_SCREEN_REFRESH_RATE(60.606060) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(1000) /* 1000 CPU slices per frame - an high value to ensure proper */ + /* synchronization of the CPUs */ + MDRV_MACHINE_RESET(xevious) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 28*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1) + MDRV_GFXDECODE(xevious) + MDRV_PALETTE_LENGTH(128*4+64*8+64*2) + + MDRV_PALETTE_INIT(xevious) + MDRV_VIDEO_START(xevious) + MDRV_VIDEO_UPDATE(xevious) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(NAMCO, 18432000/6/32) + MDRV_SOUND_CONFIG(namco_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90 * 10.0 / 16.0) + + /* discrete circuit on the 54XX outputs */ + MDRV_SOUND_ADD_TAG("Discrete", DISCRETE, 0) + MDRV_SOUND_CONFIG_DISCRETE(galaga) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( battles ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM( xevious ) + + MDRV_CPU_REMOVE(CPUTAG_50XX) + MDRV_CPU_REMOVE(CPUTAG_54XX) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(readmem4_battles,writemem4_battles) + MDRV_CPU_VBLANK_INT(battles_interrupt_4,1) + + MDRV_MACHINE_RESET(battles) + + /* video hardware */ + MDRV_PALETTE_INIT(battles) + + /* sound hardware */ + MDRV_SOUND_REMOVE("Discrete") + + MDRV_SOUND_ADD(SAMPLES, 0) + MDRV_SOUND_CONFIG(battles_samples_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( digdug ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(digdug_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(digdug_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(digdug_map,0) + MDRV_CPU_VBLANK_INT(nmi_line_pulse,2) /* 64V */ + + MDRV_SCREEN_REFRESH_RATE(60.606060) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(100) /* 100 CPU slices per frame - an high value to ensure proper */ + /* synchronization of the CPUs */ + MDRV_MACHINE_RESET(digdug) + MDRV_NVRAM_HANDLER(atari_vg) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 28*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1) + MDRV_GFXDECODE(digdug) + MDRV_PALETTE_LENGTH(16*2+64*4+64*4) + + MDRV_PALETTE_INIT(digdug) + MDRV_VIDEO_START(digdug) + MDRV_VIDEO_UPDATE(digdug) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(NAMCO, 18432000/6/32) + MDRV_SOUND_CONFIG(namco_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90 * 10.0 / 16.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( dzigzag ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(digdug) + + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(readmem4_dzigzag,writemem4_dzigzag) +MACHINE_DRIVER_END + + + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +/********************************************************************************************** + Bosconian & clones +**********************************************************************************************/ + +#define BOSCO_CUSTOMS \ + ROM_REGION_NAMCO_50XX( REGION_CPU4 ) \ + ROM_REGION_NAMCO_50XX( REGION_CPU5 ) \ + ROM_REGION_NAMCO_54XX( REGION_CPU6 ) \ + ROM_REGION_NAMCO_51XX( REGION_CPU7 ) \ + ROM_REGION_NAMCO_52XX( REGION_CPU8 ) \ + + +ROM_START( bosco ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "bos3_1.bin", 0x0000, 0x1000, CRC(96021267) SHA1(bd49b0caabcccf9df45a272d767456a4fc8a7c07) ) + ROM_LOAD( "bos1_2.bin", 0x1000, 0x1000, CRC(2d8f3ebe) SHA1(75de1cba7531ae4bf7fbbef7b8e37b9fec4ed0d0) ) + ROM_LOAD( "bos1_3.bin", 0x2000, 0x1000, CRC(c80ccfa5) SHA1(f2bbec2ea9846d4601f06c0b4242744447a88fda) ) + ROM_LOAD( "bos1_4b.bin", 0x3000, 0x1000, CRC(a3f7f4ab) SHA1(eb26184311bae0767c7a5593926e6eadcbcb680e) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "bos1_5c.bin", 0x0000, 0x1000, CRC(a7c8e432) SHA1(3607be75daa10f1f98dbfd9e600c5ba513130d44) ) + ROM_LOAD( "bos3_6.bin", 0x1000, 0x1000, CRC(4543cf82) SHA1(50ad7d1ab6694eb8fab88d0fa79ee04f6984f3ca) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "2900.3e", 0x0000, 0x1000, CRC(d45a4911) SHA1(547236adca9174f5cc0ec05b9649618bb92ba630) ) + + BOSCO_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5300.5d", 0x0000, 0x1000, CRC(a956d3c5) SHA1(c5a9d7b1f9b4acda8fb9762414e085cb5fb80c9e) ) + + ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "5200.5e", 0x0000, 0x1000, CRC(e869219c) SHA1(425614cd0642743a82ef9c1aada29774a92203ea) ) + + ROM_REGION( 0x0100, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "prom.2d", 0x0000, 0x0100, CRC(9b69b543) SHA1(47af3f67e50794e839b74fe61197af2228084efd) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "bosco.6b", 0x0000, 0x0020, CRC(d2b96fb0) SHA1(54c100ec9d173d7dd48a453ebed5f625053cb6e0) ) /* palette */ + ROM_LOAD( "bosco.4m", 0x0020, 0x0100, CRC(4e15d59c) SHA1(3542ead6421d169c3569e121ec2be304e108787c) ) /* lookup table */ + ROM_LOAD( "prom.2r", 0x0120, 0x0020, CRC(b88d5ba9) SHA1(7b97a38a540b7ca4b7d9ae338ec38b9b1a337846) ) /* video layout (not used) */ + ROM_LOAD( "prom.7h", 0x0140, 0x0020, CRC(87d61353) SHA1(c7493e52662c921625676a4a4e8cf4371bd938b7) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom.1d", 0x0000, 0x0100, CRC(de2316c6) SHA1(0e55c56046331888d1d3f0d9823d2ceb203e7d3f) ) + ROM_LOAD( "prom.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ + + ROM_REGION( 0x3000, REGION_SOUND2, 0 ) /* ROMs for digitised speech */ + ROM_LOAD( "4900.5n", 0x0000, 0x1000, CRC(09acc978) SHA1(2b264aaeb6eba70ad91593413dca733990e5467b) ) + ROM_LOAD( "5000.5m", 0x1000, 0x1000, CRC(e571e959) SHA1(9c81d7bec73bc605f7dd9a089171b0f34c4bb09a) ) + ROM_LOAD( "5100.5l", 0x2000, 0x1000, CRC(17ac9511) SHA1(266f3fae90d2fe38d109096d352863a52b379899) ) +ROM_END + +ROM_START( boscoo ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "bos1_1.bin", 0x0000, 0x1000, CRC(0d9920e7) SHA1(e7633233f603ccb5b7a970ed5b58ef361ef2c94e) ) + ROM_LOAD( "bos1_2.bin", 0x1000, 0x1000, CRC(2d8f3ebe) SHA1(75de1cba7531ae4bf7fbbef7b8e37b9fec4ed0d0) ) + ROM_LOAD( "bos1_3.bin", 0x2000, 0x1000, CRC(c80ccfa5) SHA1(f2bbec2ea9846d4601f06c0b4242744447a88fda) ) + ROM_LOAD( "bos1_4b.bin", 0x3000, 0x1000, CRC(a3f7f4ab) SHA1(eb26184311bae0767c7a5593926e6eadcbcb680e) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "bos1_5c.bin", 0x0000, 0x1000, CRC(a7c8e432) SHA1(3607be75daa10f1f98dbfd9e600c5ba513130d44) ) + ROM_LOAD( "2800.3h", 0x1000, 0x1000, CRC(31b8c648) SHA1(de0db24d385d2361ec989bf32388df8202ad535c) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "2900.3e", 0x0000, 0x1000, CRC(d45a4911) SHA1(547236adca9174f5cc0ec05b9649618bb92ba630) ) + + BOSCO_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5300.5d", 0x0000, 0x1000, CRC(a956d3c5) SHA1(c5a9d7b1f9b4acda8fb9762414e085cb5fb80c9e) ) + + ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "5200.5e", 0x0000, 0x1000, CRC(e869219c) SHA1(425614cd0642743a82ef9c1aada29774a92203ea) ) + + ROM_REGION( 0x0100, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "prom.2d", 0x0000, 0x0100, CRC(9b69b543) SHA1(47af3f67e50794e839b74fe61197af2228084efd) ) /* dots */ + + ROM_REGION( 0x0260, REGION_PROMS, 0 ) + ROM_LOAD( "bosco.6b", 0x0000, 0x0020, CRC(d2b96fb0) SHA1(54c100ec9d173d7dd48a453ebed5f625053cb6e0) ) /* palette */ + ROM_LOAD( "bosco.4m", 0x0020, 0x0100, CRC(4e15d59c) SHA1(3542ead6421d169c3569e121ec2be304e108787c) ) /* lookup table */ + ROM_LOAD( "prom.2r", 0x0120, 0x0020, CRC(b88d5ba9) SHA1(7b97a38a540b7ca4b7d9ae338ec38b9b1a337846) ) /* video layout (not used) */ + ROM_LOAD( "prom.7h", 0x0140, 0x0020, CRC(87d61353) SHA1(c7493e52662c921625676a4a4e8cf4371bd938b7) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom.1d", 0x0000, 0x0100, CRC(de2316c6) SHA1(0e55c56046331888d1d3f0d9823d2ceb203e7d3f) ) + ROM_LOAD( "prom.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ + + ROM_REGION( 0x3000, REGION_SOUND2, 0 ) /* ROMs for digitised speech */ + ROM_LOAD( "4900.5n", 0x0000, 0x1000, CRC(09acc978) SHA1(2b264aaeb6eba70ad91593413dca733990e5467b) ) + ROM_LOAD( "5000.5m", 0x1000, 0x1000, CRC(e571e959) SHA1(9c81d7bec73bc605f7dd9a089171b0f34c4bb09a) ) + ROM_LOAD( "5100.5l", 0x2000, 0x1000, CRC(17ac9511) SHA1(266f3fae90d2fe38d109096d352863a52b379899) ) +ROM_END + +ROM_START( boscoo2 ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "bos1_1.bin", 0x0000, 0x1000, CRC(0d9920e7) SHA1(e7633233f603ccb5b7a970ed5b58ef361ef2c94e) ) + ROM_LOAD( "bos1_2.bin", 0x1000, 0x1000, CRC(2d8f3ebe) SHA1(75de1cba7531ae4bf7fbbef7b8e37b9fec4ed0d0) ) + ROM_LOAD( "bos1_3.bin", 0x2000, 0x1000, CRC(c80ccfa5) SHA1(f2bbec2ea9846d4601f06c0b4242744447a88fda) ) + ROM_LOAD( "bos1_4.3k", 0x3000, 0x1000, CRC(7ebea2b8) SHA1(92fc66526ed77f3efd947b7d321b255aba4a0140) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "bos1_5b.3j", 0x0000, 0x1000, CRC(3d6955a8) SHA1(f89860d74865da5ced2f5b2196bdaa8eeb5e2322) ) + ROM_LOAD( "2800.3h", 0x1000, 0x1000, CRC(31b8c648) SHA1(de0db24d385d2361ec989bf32388df8202ad535c) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "2900.3e", 0x0000, 0x1000, CRC(d45a4911) SHA1(547236adca9174f5cc0ec05b9649618bb92ba630) ) + + BOSCO_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5300.5d", 0x0000, 0x1000, CRC(a956d3c5) SHA1(c5a9d7b1f9b4acda8fb9762414e085cb5fb80c9e) ) + + ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "5200.5e", 0x0000, 0x1000, CRC(e869219c) SHA1(425614cd0642743a82ef9c1aada29774a92203ea) ) + + ROM_REGION( 0x0100, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "prom.2d", 0x0000, 0x0100, CRC(9b69b543) SHA1(47af3f67e50794e839b74fe61197af2228084efd) ) /* dots */ + + ROM_REGION( 0x0260, REGION_PROMS, 0 ) + ROM_LOAD( "bosco.6b", 0x0000, 0x0020, CRC(d2b96fb0) SHA1(54c100ec9d173d7dd48a453ebed5f625053cb6e0) ) /* palette */ + ROM_LOAD( "bosco.4m", 0x0020, 0x0100, CRC(4e15d59c) SHA1(3542ead6421d169c3569e121ec2be304e108787c) ) /* lookup table */ + ROM_LOAD( "prom.2r", 0x0120, 0x0020, CRC(b88d5ba9) SHA1(7b97a38a540b7ca4b7d9ae338ec38b9b1a337846) ) /* video layout (not used) */ + ROM_LOAD( "prom.7h", 0x0140, 0x0020, CRC(87d61353) SHA1(c7493e52662c921625676a4a4e8cf4371bd938b7) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom.1d", 0x0000, 0x0100, CRC(de2316c6) SHA1(0e55c56046331888d1d3f0d9823d2ceb203e7d3f) ) + ROM_LOAD( "prom.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ + + ROM_REGION( 0x3000, REGION_SOUND2, 0 ) /* ROMs for digitised speech */ + ROM_LOAD( "4900.5n", 0x0000, 0x1000, CRC(09acc978) SHA1(2b264aaeb6eba70ad91593413dca733990e5467b) ) + ROM_LOAD( "5000.5m", 0x1000, 0x1000, CRC(e571e959) SHA1(9c81d7bec73bc605f7dd9a089171b0f34c4bb09a) ) + ROM_LOAD( "5100.5l", 0x2000, 0x1000, CRC(17ac9511) SHA1(266f3fae90d2fe38d109096d352863a52b379899) ) +ROM_END + +ROM_START( boscomd ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "3n", 0x0000, 0x1000, CRC(441b501a) SHA1(7b4921ff40b3c56950fd32aa0ec5563b02a00929) ) + ROM_LOAD( "3m", 0x1000, 0x1000, CRC(a3c5c7ef) SHA1(70a095a8dbca857245a70404f803916f519e0cbc) ) + ROM_LOAD( "3l", 0x2000, 0x1000, CRC(6ca9a0cf) SHA1(8f70e29beae921e63cd65689a618ca678dd14614) ) + ROM_LOAD( "3k", 0x3000, 0x1000, CRC(d83bacc5) SHA1(cf2fbfa81dabb9b6bcf436d61992e705723776fb) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "3j", 0x0000, 0x1000, CRC(4374e39a) SHA1(7571fd5961f49a0e9ba4301ddd0aca52e94e2f8b) ) + ROM_LOAD( "3h", 0x1000, 0x1000, CRC(04e9fcef) SHA1(2115a9718d511854848704e2693f9efa1c80a307) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "2900.3e", 0x0000, 0x1000, CRC(d45a4911) SHA1(547236adca9174f5cc0ec05b9649618bb92ba630) ) + + BOSCO_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5300.5d", 0x0000, 0x1000, CRC(a956d3c5) SHA1(c5a9d7b1f9b4acda8fb9762414e085cb5fb80c9e) ) + + ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "5200.5e", 0x0000, 0x1000, CRC(e869219c) SHA1(425614cd0642743a82ef9c1aada29774a92203ea) ) + + ROM_REGION( 0x0100, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "prom.2d", 0x0000, 0x0100, CRC(9b69b543) SHA1(47af3f67e50794e839b74fe61197af2228084efd) ) /* dots */ + + ROM_REGION( 0x0260, REGION_PROMS, 0 ) + ROM_LOAD( "bosco.6b", 0x0000, 0x0020, CRC(d2b96fb0) SHA1(54c100ec9d173d7dd48a453ebed5f625053cb6e0) ) /* palette */ + ROM_LOAD( "bosco.4m", 0x0020, 0x0100, CRC(4e15d59c) SHA1(3542ead6421d169c3569e121ec2be304e108787c) ) /* lookup table */ + ROM_LOAD( "prom.2r", 0x0120, 0x0020, CRC(b88d5ba9) SHA1(7b97a38a540b7ca4b7d9ae338ec38b9b1a337846) ) /* video layout (not used) */ + ROM_LOAD( "prom.7h", 0x0140, 0x0020, CRC(87d61353) SHA1(c7493e52662c921625676a4a4e8cf4371bd938b7) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom.1d", 0x0000, 0x0100, CRC(de2316c6) SHA1(0e55c56046331888d1d3f0d9823d2ceb203e7d3f) ) + ROM_LOAD( "prom.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ + + ROM_REGION( 0x3000, REGION_SOUND2, 0 ) /* ROMs for digitised speech */ + ROM_LOAD( "4900.5n", 0x0000, 0x1000, CRC(09acc978) SHA1(2b264aaeb6eba70ad91593413dca733990e5467b) ) + ROM_LOAD( "5000.5m", 0x1000, 0x1000, CRC(e571e959) SHA1(9c81d7bec73bc605f7dd9a089171b0f34c4bb09a) ) + ROM_LOAD( "5100.5l", 0x2000, 0x1000, CRC(17ac9511) SHA1(266f3fae90d2fe38d109096d352863a52b379899) ) +ROM_END + +ROM_START( boscomdo ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "2300.3n", 0x0000, 0x1000, CRC(db6128b0) SHA1(ddd285f7e00d5e58ab9b15838528e0020d47fcd2) ) + ROM_LOAD( "2400.3m", 0x1000, 0x1000, CRC(86907614) SHA1(3295ab6c5171a069875c2239b3325296c1df6031) ) + ROM_LOAD( "2500.3l", 0x2000, 0x1000, CRC(a21fae11) SHA1(dff38d90ee30558274d2d399edc3281c2ef5cb69) ) + ROM_LOAD( "2600.3k", 0x3000, 0x1000, CRC(11d6ae23) SHA1(f2f72f5c777b684f7ffd53b9c034560211113499) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "2700.3j", 0x0000, 0x1000, CRC(7254e65e) SHA1(c2ee29fcb5173e8d46a80a8a1b931a53dbdeae66) ) + ROM_LOAD( "2800.3h", 0x1000, 0x1000, CRC(31b8c648) SHA1(de0db24d385d2361ec989bf32388df8202ad535c) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "2900.3e", 0x0000, 0x1000, CRC(d45a4911) SHA1(547236adca9174f5cc0ec05b9649618bb92ba630) ) + + BOSCO_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5300.5d", 0x0000, 0x1000, CRC(a956d3c5) SHA1(c5a9d7b1f9b4acda8fb9762414e085cb5fb80c9e) ) + + ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "5200.5e", 0x0000, 0x1000, CRC(e869219c) SHA1(425614cd0642743a82ef9c1aada29774a92203ea) ) + + ROM_REGION( 0x0100, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "prom.2d", 0x0000, 0x0100, CRC(9b69b543) SHA1(47af3f67e50794e839b74fe61197af2228084efd) ) /* dots */ + + ROM_REGION( 0x0260, REGION_PROMS, 0 ) + ROM_LOAD( "bosco.6b", 0x0000, 0x0020, CRC(d2b96fb0) SHA1(54c100ec9d173d7dd48a453ebed5f625053cb6e0) ) /* palette */ + ROM_LOAD( "bosco.4m", 0x0020, 0x0100, CRC(4e15d59c) SHA1(3542ead6421d169c3569e121ec2be304e108787c) ) /* lookup table */ + ROM_LOAD( "prom.2r", 0x0120, 0x0020, CRC(b88d5ba9) SHA1(7b97a38a540b7ca4b7d9ae338ec38b9b1a337846) ) /* video layout (not used) */ + ROM_LOAD( "prom.7h", 0x0140, 0x0020, CRC(87d61353) SHA1(c7493e52662c921625676a4a4e8cf4371bd938b7) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom.1d", 0x0000, 0x0100, CRC(de2316c6) SHA1(0e55c56046331888d1d3f0d9823d2ceb203e7d3f) ) + ROM_LOAD( "prom.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ + + ROM_REGION( 0x3000, REGION_SOUND2, 0 ) /* ROMs for digitised speech */ + ROM_LOAD( "4900.5n", 0x0000, 0x1000, CRC(09acc978) SHA1(2b264aaeb6eba70ad91593413dca733990e5467b) ) + ROM_LOAD( "5000.5m", 0x1000, 0x1000, CRC(e571e959) SHA1(9c81d7bec73bc605f7dd9a089171b0f34c4bb09a) ) + ROM_LOAD( "5100.5l", 0x2000, 0x1000, CRC(17ac9511) SHA1(266f3fae90d2fe38d109096d352863a52b379899) ) +ROM_END + +/********************************************************************************************** + Galaga & clones +**********************************************************************************************/ + +#define GALAGA_CUSTOMS \ + ROM_REGION_NAMCO_54XX( REGION_CPU4 ) \ + ROM_REGION_NAMCO_51XX( REGION_CPU5 ) \ + + +ROM_START( galaga ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "gg1-1b.3p", 0x0000, 0x1000, CRC(ab036c9f) SHA1(ca7f5da42d4e76fd89bb0b35198a23c01462fbfe) ) + ROM_LOAD( "gg1-2b.3m", 0x1000, 0x1000, CRC(d9232240) SHA1(ab202aa259c3d332ef13dfb8fc8580ce2a5a253d) ) + ROM_LOAD( "gg1-3.2m", 0x2000, 0x1000, CRC(753ce503) SHA1(481f443aea3ed3504ec2f3a6bfcf3cd47e2f8f81) ) + ROM_LOAD( "gg1-4b.2l", 0x3000, 0x1000, CRC(499fcc76) SHA1(ddb8b121903646c320939c7d13f4aa4ebb130378) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "gg1-5b.3f", 0x0000, 0x1000, CRC(bb5caae3) SHA1(e957a581463caac27bc37ca2e2a90f27e4f62b6f) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "gg1-7b.2c", 0x0000, 0x1000, CRC(d016686b) SHA1(44c1a04fba3c7c826ff484185cb881b4b22e6657) ) + + GALAGA_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-9.4l", 0x0000, 0x1000, CRC(58b2f47c) SHA1(62f1279a784ab2f8218c4137c7accda00e6a3490) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-11.4d", 0x0000, 0x1000, CRC(ad447c80) SHA1(e697c180178cabd1d32483c5d8889a40633f7857) ) + ROM_LOAD( "gg1-10.4f", 0x1000, 0x1000, CRC(dd6f1afc) SHA1(c340ed8c25e0979629a9a1730edc762bd72d0cff) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( galagao ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "gg1-1", 0x0000, 0x1000, CRC(a3a0f743) SHA1(6907773db7c002ecde5e41853603d53387c5c7cd) ) + ROM_LOAD( "gg1-2", 0x1000, 0x1000, CRC(43bb0d5c) SHA1(666975aed5ce84f09794c54b550d64d95ab311f0) ) + ROM_LOAD( "gg1-3.2m", 0x2000, 0x1000, CRC(753ce503) SHA1(481f443aea3ed3504ec2f3a6bfcf3cd47e2f8f81) ) + ROM_LOAD( "gg1-4", 0x3000, 0x1000, CRC(83874442) SHA1(366cb0dbd31b787e64f88d182108b670d03b393e) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "gg1-5", 0x0000, 0x1000, CRC(3102fccd) SHA1(d29b68d6aab3217fa2106b3507b9273ff3f927bf) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "gg1-7", 0x0000, 0x1000, CRC(8995088d) SHA1(d6cb439de0718826d1a0363c9d77de8740b18ecf) ) + + GALAGA_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-9.4l", 0x0000, 0x1000, CRC(58b2f47c) SHA1(62f1279a784ab2f8218c4137c7accda00e6a3490) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-11.4d", 0x0000, 0x1000, CRC(ad447c80) SHA1(e697c180178cabd1d32483c5d8889a40633f7857) ) + ROM_LOAD( "gg1-10.4f", 0x1000, 0x1000, CRC(dd6f1afc) SHA1(c340ed8c25e0979629a9a1730edc762bd72d0cff) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( galagamw ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "3200a.bin", 0x0000, 0x1000, CRC(3ef0b053) SHA1(0c04a362b737998c0952a753fb3fd8c8a17e9b46) ) + ROM_LOAD( "3300b.bin", 0x1000, 0x1000, CRC(1b280831) SHA1(f7ea12e61929717ebe43a4198a97f109845a2c62) ) + ROM_LOAD( "3400c.bin", 0x2000, 0x1000, CRC(16233d33) SHA1(a7eb799be5e23058754a92b15e6527bfbb47a354) ) + ROM_LOAD( "3500d.bin", 0x3000, 0x1000, CRC(0aaf5c23) SHA1(3f4b0bb960bf002261e9c1278c88f594c6aa8ab6) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "3600e.bin", 0x0000, 0x1000, CRC(bc556e76) SHA1(0d3d68243c4571d985b4d8f7e0ea9f6fcffa2116) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "3700g.bin", 0x0000, 0x1000, CRC(b07f0aa4) SHA1(7528644a8480d0be2d0d37069515ed319e94778f) ) + + GALAGA_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-9.4l", 0x0000, 0x1000, CRC(58b2f47c) SHA1(62f1279a784ab2f8218c4137c7accda00e6a3490) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-11.4d", 0x0000, 0x1000, CRC(ad447c80) SHA1(e697c180178cabd1d32483c5d8889a40633f7857) ) + ROM_LOAD( "gg1-10.4f", 0x1000, 0x1000, CRC(dd6f1afc) SHA1(c340ed8c25e0979629a9a1730edc762bd72d0cff) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( galagamf ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "3200a.bin", 0x0000, 0x1000, CRC(3ef0b053) SHA1(0c04a362b737998c0952a753fb3fd8c8a17e9b46) ) + ROM_LOAD( "3300b.bin", 0x1000, 0x1000, CRC(1b280831) SHA1(f7ea12e61929717ebe43a4198a97f109845a2c62) ) + ROM_LOAD( "3400c.bin", 0x2000, 0x1000, CRC(16233d33) SHA1(a7eb799be5e23058754a92b15e6527bfbb47a354) ) + ROM_LOAD( "3500d.bin", 0x3000, 0x1000, CRC(0aaf5c23) SHA1(3f4b0bb960bf002261e9c1278c88f594c6aa8ab6) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "3600fast.bin", 0x0000, 0x1000, CRC(23d586e5) SHA1(43346c69385e9091e64cff6c027ac2689cafcbb9) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "3700g.bin", 0x0000, 0x1000, CRC(b07f0aa4) SHA1(7528644a8480d0be2d0d37069515ed319e94778f) ) + + GALAGA_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-9.4l", 0x0000, 0x1000, CRC(58b2f47c) SHA1(62f1279a784ab2f8218c4137c7accda00e6a3490) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-11.4d", 0x0000, 0x1000, CRC(ad447c80) SHA1(e697c180178cabd1d32483c5d8889a40633f7857) ) + ROM_LOAD( "gg1-10.4f", 0x1000, 0x1000, CRC(dd6f1afc) SHA1(c340ed8c25e0979629a9a1730edc762bd72d0cff) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( galagamk ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "mk2-1", 0x0000, 0x1000, CRC(23cea1e2) SHA1(18db33ade0ca6e47cc48aa151d2ccbb4646e3ae3) ) + ROM_LOAD( "mk2-2", 0x1000, 0x1000, CRC(89695b1a) SHA1(fda5557018884e903f855bf3b69a25d75ed8a767) ) + ROM_LOAD( "3400c.bin", 0x2000, 0x1000, CRC(16233d33) SHA1(a7eb799be5e23058754a92b15e6527bfbb47a354) ) + ROM_LOAD( "mk2-4", 0x3000, 0x1000, CRC(24b767f5) SHA1(d4c03e2ed582cfa7f8168ac352f790ef7af54cb8) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "gg1-5", 0x0000, 0x1000, CRC(3102fccd) SHA1(d29b68d6aab3217fa2106b3507b9273ff3f927bf) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "gg1-7b.2c", 0x0000, 0x1000, CRC(d016686b) SHA1(44c1a04fba3c7c826ff484185cb881b4b22e6657) ) + + GALAGA_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-9.4l", 0x0000, 0x1000, CRC(58b2f47c) SHA1(62f1279a784ab2f8218c4137c7accda00e6a3490) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-11.4d", 0x0000, 0x1000, CRC(ad447c80) SHA1(e697c180178cabd1d32483c5d8889a40633f7857) ) + ROM_LOAD( "gg1-10.4f", 0x1000, 0x1000, CRC(dd6f1afc) SHA1(c340ed8c25e0979629a9a1730edc762bd72d0cff) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( gallag ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "gg1-1", 0x0000, 0x1000, CRC(a3a0f743) SHA1(6907773db7c002ecde5e41853603d53387c5c7cd) ) + ROM_LOAD( "gallag.2", 0x1000, 0x1000, CRC(5eda60a7) SHA1(853d7b974dd04abd7af3a8ba2681dfabce4dce18) ) + ROM_LOAD( "gg1-3.2m", 0x2000, 0x1000, CRC(753ce503) SHA1(481f443aea3ed3504ec2f3a6bfcf3cd47e2f8f81) ) + ROM_LOAD( "gg1-4", 0x3000, 0x1000, CRC(83874442) SHA1(366cb0dbd31b787e64f88d182108b670d03b393e) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "gg1-5", 0x0000, 0x1000, CRC(3102fccd) SHA1(d29b68d6aab3217fa2106b3507b9273ff3f927bf) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "gg1-7", 0x0000, 0x1000, CRC(8995088d) SHA1(d6cb439de0718826d1a0363c9d77de8740b18ecf) ) + + ROM_REGION( 0x10000, REGION_CPU4, 0 ) /* 64k for a Z80 which emulates the custom I/O chip (not used) */ + ROM_LOAD( "gallag.6", 0x0000, 0x1000, CRC(001b70bc) SHA1(b465eee91e75257b7b049d49c0064ab5fd66c576) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gallag.8", 0x0000, 0x1000, CRC(169a98a4) SHA1(edbeb11076061e744ea88d9899dbdfe0964c7e78) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg1-11.4d", 0x0000, 0x1000, CRC(ad447c80) SHA1(e697c180178cabd1d32483c5d8889a40633f7857) ) + ROM_LOAD( "gg1-10.4f", 0x1000, 0x1000, CRC(dd6f1afc) SHA1(c340ed8c25e0979629a9a1730edc762bd72d0cff) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( gatsbee ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "1.4b", 0x0000, 0x1000, CRC(9fb8e28b) SHA1(7171e3fb37b0d6cc8f7a023c1775080d5986de99) ) + ROM_LOAD( "2.4c", 0x1000, 0x1000, CRC(bf6cb840) SHA1(5763140d32d35a38cdcb49e6de1fd5b07a9e8cc2) ) + ROM_LOAD( "3.4d", 0x2000, 0x1000, CRC(3604e2dd) SHA1(1736cf8497f7ac28e92ca94fa137c144353dc192) ) + ROM_LOAD( "4.4e", 0x3000, 0x1000, CRC(bf9f613b) SHA1(41c852fc77f0f35bf48a5b81a19234ed99871c89) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "gg1-5", 0x0000, 0x1000, CRC(3102fccd) SHA1(d29b68d6aab3217fa2106b3507b9273ff3f927bf) ) // 5.4j + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "gg1-7", 0x0000, 0x1000, CRC(8995088d) SHA1(d6cb439de0718826d1a0363c9d77de8740b18ecf) ) // 7.4k + + ROM_REGION( 0x10000, REGION_CPU4, 0 ) /* 64k for a Z80 which emulates the custom I/O chip (not used) */ + ROM_LOAD( "gallag.6", 0x0000, 0x1000, CRC(001b70bc) SHA1(b465eee91e75257b7b049d49c0064ab5fd66c576) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "8.5r", 0x0000, 0x2000, CRC(b324f650) SHA1(7bcb254f7cf03bd84291b9fdc27b8962b3e12aa4) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "9.6a", 0x0000, 0x1000, CRC(22e339d5) SHA1(9ac2887ede802d28daa4ad0a0a54bcf7b1155a2e) ) + ROM_LOAD( "10.7a", 0x1000, 0x1000, CRC(60dcf940) SHA1(6530aa5b4afef4a8422ece76a93d0c5b1d93355e) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "prom-5.5n", 0x0000, 0x0020, CRC(54603c6b) SHA1(1a6dea13b4af155d9cb5b999a75d4f1eb9c71346) ) /* palette */ + ROM_LOAD( "prom-4.2n", 0x0020, 0x0100, CRC(59b6edab) SHA1(0281de86c236c88739297ff712e0a4f5c8bf8ab9) ) /* char lookup table */ + ROM_LOAD( "prom-3.1c", 0x0120, 0x0100, CRC(4a04bb6b) SHA1(cdd4bc1013f5c11984fdc4fd10e2d2e27120c1e5) ) /* sprite lookup table */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) + ROM_LOAD( "prom-1.1d", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "prom-2.5c", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +/********************************************************************************************** + Xevious & clones +**********************************************************************************************/ + +#define XEVIOUS_CUSTOMS \ + ROM_REGION_NAMCO_50XX( REGION_CPU4 ) \ + ROM_REGION_NAMCO_54XX( REGION_CPU5 ) \ + ROM_REGION_NAMCO_51XX( REGION_CPU6 ) \ + +ROM_START( xevious ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "xvi_1.3p", 0x0000, 0x1000, CRC(09964dda) SHA1(4882b25b0938a903f3a367455ba788a30759b5b0) ) + ROM_LOAD( "xvi_2.3m", 0x1000, 0x1000, CRC(60ecce84) SHA1(8adc60a5fcbca74092518dbc570ffff0f04c5b17) ) + ROM_LOAD( "xvi_3.2m", 0x2000, 0x1000, CRC(79754b7d) SHA1(c6a154858716e1f073b476824b183de20e06d093) ) + ROM_LOAD( "xvi_4.2l", 0x3000, 0x1000, CRC(c7d4bbf0) SHA1(4b846de204d08651253d3a141677c8a31626af07) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "xvi_5.3f", 0x0000, 0x1000, CRC(c85b703f) SHA1(15f1c005b9d806a384ab1f2240b9c580bfe83893) ) + ROM_LOAD( "xvi_6.3j", 0x1000, 0x1000, CRC(e18cdaad) SHA1(6b79efee1a9642edb9f752101737132401248aed) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + XEVIOUS_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_12.3b", 0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_13.3c", 0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) ) /* bg pattern B0 */ + ROM_LOAD( "xvi_14.3d", 0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "xvi_18.4r", 0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "xvi_9.2a", 0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "xvi_11.2c", 0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) ) + + ROM_REGION( 0x0b00, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "xvi_7bpr.4h", 0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "xvi_6bpr.4f", 0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "xvi_4bpr.3l", 0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */ + ROM_LOAD( "xvi_5bpr.3m", 0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( xeviousa ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "xea-1m-a.bin", 0x0000, 0x2000, CRC(8c2b50ec) SHA1(f770873b711d838556dde67a8aac8a7f572fcc5b) ) + ROM_LOAD( "xea-1l-a.bin", 0x2000, 0x2000, CRC(0821642b) SHA1(c6c322c61d0985a2ac59f5e92d4e351107afb9eb) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "xea-4c-a.bin", 0x0000, 0x2000, CRC(14d8fa03) SHA1(e8114141394adda86184b146f2497cfeef7fc2eb) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + XEVIOUS_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_12.3b", 0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_13.3c", 0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) ) /* bg pattern B0 */ + ROM_LOAD( "xvi_14.3d", 0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "xvi_18.4r", 0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "xvi_9.2a", 0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "xvi_11.2c", 0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) ) + + ROM_REGION( 0x0b00, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "xvi_7bpr.4h", 0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "xvi_6bpr.4f", 0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "xvi_4bpr.3l", 0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */ + ROM_LOAD( "xvi_5bpr.3m", 0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( xeviousb ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "1m.bin", 0x0000, 0x2000, CRC(e82a22f6) SHA1(6fd09a7fb263cda3d5268cc6d7bfe71a57ac4b47) ) + ROM_LOAD( "1l.bin", 0x2000, 0x2000, CRC(13831df9) SHA1(a7892d1d98868a83a5d1092976873b82577e9e94) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "4c.bin", 0x0000, 0x2000, CRC(827e7747) SHA1(d22645d71b164613834336e26e6942506a0e7eaa) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + XEVIOUS_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_12.3b", 0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_13.3c", 0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) ) /* bg pattern B0 */ + ROM_LOAD( "xvi_14.3d", 0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "xvi_18.4r", 0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "xvi_9.2a", 0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "xvi_11.2c", 0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) ) + + ROM_REGION( 0x0b00, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "xvi_7bpr.4h", 0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "xvi_6bpr.4f", 0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "xvi_4bpr.3l", 0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */ + ROM_LOAD( "xvi_5bpr.3m", 0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( xeviousc ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "xvi_u_.3p", 0x0000, 0x1000, CRC(7b203868) SHA1(3bafaa42bccddfaf8d9197e93416a731b7f8fb94) ) + ROM_LOAD( "xv_2-2.3m", 0x1000, 0x1000, CRC(b6fe738e) SHA1(23cdf1f2c2642f9bc3f843b5c338372027032380) ) + ROM_LOAD( "xv_2-3.2m", 0x2000, 0x1000, CRC(dbd52ff5) SHA1(eb42393720fc1fd4a1f6cdba87ac4177fd5827fe) ) + ROM_LOAD( "xvi_u_.2l", 0x3000, 0x1000, CRC(ad12af53) SHA1(ff3a96d6f7357fb2d33cd9d77d53477b9071ffc9) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "xv2_5.3f", 0x0000, 0x1000, CRC(f8cc2861) SHA1(9b02c00cff6c771d46776416295f9e12a2166cc5) ) + ROM_LOAD( "xvi_6.3j", 0x1000, 0x1000, CRC(e18cdaad) SHA1(6b79efee1a9642edb9f752101737132401248aed) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + XEVIOUS_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_12.3b", 0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_13.3c", 0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) ) /* bg pattern B0 */ + ROM_LOAD( "xvi_14.3d", 0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "xvi_18.4r", 0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "xvi_9.2a", 0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "xvi_11.2c", 0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) ) + + ROM_REGION( 0x0b00, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "xvi_7bpr.4h", 0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "xvi_6bpr.4f", 0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "xvi_4bpr.3l", 0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */ + ROM_LOAD( "xvi_5bpr.3m", 0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( xevios ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "4.7h", 0x0000, 0x1000, CRC(1f8ca4c0) SHA1(9fdaa2e0016c07e274544f8334778fe81b8344a5) ) + ROM_LOAD( "5.6h", 0x1000, 0x1000, CRC(2e47ce8f) SHA1(fb35dd086e98279a5f17036f624ef5294c777d84) ) + ROM_LOAD( "xvi_3.2m", 0x2000, 0x1000, CRC(79754b7d) SHA1(c6a154858716e1f073b476824b183de20e06d093) ) + ROM_LOAD( "w7.4h", 0x3000, 0x1000, CRC(17f48277) SHA1(ffe590acf07985355ef91fbe0fc3dcf6e8fd62fd) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "xvi_5.3f", 0x0000, 0x1000, CRC(c85b703f) SHA1(15f1c005b9d806a384ab1f2240b9c580bfe83893) ) + ROM_LOAD( "xvi_6.3j", 0x1000, 0x1000, CRC(e18cdaad) SHA1(6b79efee1a9642edb9f752101737132401248aed) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + /* This is a bootleg, it probably shouldn't be loading these, see 'unknown roms' below */ + XEVIOUS_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_12.3b", 0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_13.3c", 0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) ) /* bg pattern B0 */ + ROM_LOAD( "xvi_14.3d", 0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "16.8d", 0x5000, 0x2000, CRC(44262c04) SHA1(4291f83193d11064c2ba6a9af27951b93bb945c3) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "10.1d", 0x0000, 0x1000, CRC(10baeebb) SHA1(c544c9e0bb7a1ef93b3f2c2c1397f659d5334373) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "12.3d", 0x3000, 0x1000, CRC(51a4e83b) SHA1(fbf3b1e47b75c5e0b297ee2cd6597b1dfd80bc6f) ) + + ROM_REGION( 0x0b00, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "xvi_7bpr.4h", 0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "xvi_6bpr.4f", 0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "xvi_4bpr.3l", 0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */ + ROM_LOAD( "xvi_5bpr.3m", 0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ + + ROM_REGION( 0x3000, REGION_USER1, 0 ) /* unknown roms */ + /* extra ROMs (function unknown, could be emulation of the custom I/O */ + /* chip with a Z80): */ + ROM_LOAD( "1.16j", 0x0000, 0x1000, CRC(2618f0ce) SHA1(54e8644b5609d6f6ec717a7469c76901eb79f26e) ) + ROM_LOAD( "2.17b", 0x1000, 0x2000, CRC(de359fac) SHA1(a55df9984bfffafeadae8a5a63b07f1fa9c5eebf) ) +ROM_END + +ROM_START( battles ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "b_1.bin", 0x0000, 0x2000, CRC(b6e4f4f3) SHA1(ceaaa63b50e75dcb05aeb68574336dfe56a8434a) ) + ROM_LOAD( "b_2.bin", 0x2000, 0x2000, CRC(47017bc8) SHA1(0da73ae079fb6a64eed56197e2c88609ef34166c) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "b_3.bin", 0x0000, 0x2000, CRC(0ede5706) SHA1(65b235c5abe487612e11d0235410f1ca59b06e95) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + ROM_REGION( 0x10000, REGION_CPU4, 0 ) /* 64k for the CUSTOM I/O Emulation CPU */ + ROM_LOAD( "b_5.bin", 0x0000, 0x1000, CRC(23107dfb) SHA1(74c49a5648faab632ae5ed8dd18a1d8b39837e2d) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b_9.bin", 0x0000, 0x1000, CRC(5bd6e9ae) SHA1(f16c7eec39fce856c775b2b81ab55fb42376850e) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "b_10.bin", 0x0000, 0x1000, CRC(b43ea55d) SHA1(06f4c4e7fc71b9e173c3bdf91c40f47750051b5e) ) /* bg pattern B0 */ + ROM_LOAD( "b_11.bin", 0x1000, 0x1000, CRC(73603931) SHA1(1f7824b107a5a3d5c3434f02f17173a1f85fd29c) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "xvi_18.4r", 0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "xvi_9.2a", 0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "xvi_11.2c", 0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) ) + + ROM_REGION( 0x1400, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "b_-bpr.bin", 0x0300, 0x0400, CRC(d2d208b1) SHA1(6c8d29912c03ee93759e24085bc66ab738768bcc) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "b_6bpr.bin", 0x0700, 0x0400, CRC(0260c041) SHA1(1a7516e8b18ffdd9789eec8b834c17b3ba312afe) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "b_4bpr.bin", 0x0b00, 0x0400, CRC(33764974) SHA1(567b048b8a93e30090ccee4f6aadc0353524d8d1) ) /* sprite lookup table low bits */ + ROM_LOAD( "b_5bpr.bin", 0x0f00, 0x0400, CRC(43674c7e) SHA1(94c19a9da81839cb1dfde3f11b2fd82ffe45efb9) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( sxevious ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for the first CPU */ + ROM_LOAD( "cpu_3p.rom", 0x0000, 0x1000, CRC(1c8d27d5) SHA1(2c41303d8c74acb5840295a4b460a39a9a8e21bb) ) + ROM_LOAD( "cpu_3m.rom", 0x1000, 0x1000, CRC(fd04e615) SHA1(7169e7f3bd1e9cfae9671b89f2a45f56b968e1ff) ) + ROM_LOAD( "cpu_2m.rom", 0x2000, 0x1000, CRC(294d5404) SHA1(ecc39fb2c0065a36f20541747089b4e30dfb99b1) ) + ROM_LOAD( "cpu_2l.rom", 0x3000, 0x1000, CRC(6a44bf92) SHA1(0ca726f7f9528789f2a718df55e59406a283cdfa) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "cpu_3f.rom", 0x0000, 0x1000, CRC(d4bd3d81) SHA1(5831bb306bd650779207936bfd00f25864733abb) ) + ROM_LOAD( "cpu_3j.rom", 0x1000, 0x1000, CRC(af06be5f) SHA1(5a020822387ab8c69214db961180760fa9853e6e) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "xvi_7.2c", 0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) ) + + XEVIOUS_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_12.3b", 0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) ) /* foreground characters */ + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_13.3c", 0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) ) /* bg pattern B0 */ + ROM_LOAD( "xvi_14.3d", 0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) ) /* bg pattern B1 */ + + ROM_REGION( 0xa000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "xvi_15.4m", 0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) ) /* sprite set #1, planes 0/1 */ + ROM_LOAD( "xvi_17.4p", 0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) ) /* sprite set #2, planes 0/1 */ + ROM_LOAD( "xvi_16.4n", 0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) ) /* sprite set #3, planes 0/1 */ + ROM_LOAD( "xvi_18.4r", 0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) ) /* sprite set #1, plane 2, set #2, plane 2 */ + /* 0x7000-0x8fff will be unpacked from 0x5000-0x6fff */ + ROM_FILL( 0x9000, 0x1000, 0x00 ) // empty space to decode sprite set #3 as 3 bits per pixel + + ROM_REGION( 0x4000, REGION_GFX4, 0 ) /* background tilemaps */ + ROM_LOAD( "xvi_9.2a", 0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) ) + ROM_LOAD( "xvi_10.2b", 0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) ) + ROM_LOAD( "xvi_11.2c", 0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) ) + + ROM_REGION( 0x0b00, REGION_PROMS, 0 ) + ROM_LOAD( "xvi_8bpr.6a", 0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */ + ROM_LOAD( "xvi_9bpr.6d", 0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */ + ROM_LOAD( "xvi10bpr.6e", 0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */ + ROM_LOAD( "xvi_7bpr.4h", 0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */ + ROM_LOAD( "xvi_6bpr.4f", 0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */ + ROM_LOAD( "xvi_4bpr.3l", 0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */ + ROM_LOAD( "xvi_5bpr.3m", 0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound PROMs */ + ROM_LOAD( "xvi_2bpr.7n", 0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) ) + ROM_LOAD( "xvi_1bpr.5n", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +/********************************************************************************************** + Dig Dug & clones +**********************************************************************************************/ + +#define DIGDUG_CUSTOMS \ + ROM_REGION_NAMCO_51XX( REGION_CPU4 ) \ + ROM_REGION_NAMCO_53XX( REGION_CPU5 ) \ + +ROM_START( digdug ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "dd1a.1", 0x0000, 0x1000, CRC(a80ec984) SHA1(86689980410b9429cd7582c7a76342721c87d030) ) + ROM_LOAD( "dd1a.2", 0x1000, 0x1000, CRC(559f00bd) SHA1(fde17785df21956d6fd06bcfe675c392dadb1524) ) + ROM_LOAD( "dd1a.3", 0x2000, 0x1000, CRC(8cbc6fe1) SHA1(57b8a5777f8bb9773caf0cafe5408c8b9768cb25) ) + ROM_LOAD( "dd1a.4", 0x3000, 0x1000, CRC(d066f830) SHA1(b0a615fe4a5c8742c1e4ef234ef34c369d2723b9) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "dd1a.5", 0x0000, 0x1000, CRC(6687933b) SHA1(c16144de7633595ddc1450ddce379f48e7b2195a) ) + ROM_LOAD( "dd1a.6", 0x1000, 0x1000, CRC(843d857f) SHA1(89b2ead7e478e119d33bfd67376cdf28f83de67a) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "136007.107", 0x0000, 0x1000, CRC(a41bce72) SHA1(2b9b74f56aa7939d9d47cf29497ae11f10d78598) ) + + DIGDUG_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "dd1.9", 0x0000, 0x0800, CRC(f14a6fe1) SHA1(0aa63300c2cb887196de590aceb98f3cf06fead4) ) + + ROM_REGION( 0x4000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.116", 0x0000, 0x1000, CRC(e22957c8) SHA1(4700c63f4f680cb8ab8c44e6f3e1712aabd5daa4) ) + ROM_LOAD( "dd1.14", 0x1000, 0x1000, CRC(2829ec99) SHA1(3e435c1afb2e44487cd7ba28a93ada2e5ccbb86d) ) + ROM_LOAD( "136007.118", 0x2000, 0x1000, CRC(458499e9) SHA1(578bd839f9218c3cf4feee1223a461144e455df8) ) + ROM_LOAD( "136007.119", 0x3000, 0x1000, CRC(c58252a0) SHA1(bd79e39e8a572d2b5c205e6de27ca23e43ec9f51) ) + + ROM_REGION( 0x1000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "dd1.11", 0x0000, 0x1000, CRC(7b383983) SHA1(57f1e8f5171d13f9f76bd091d81b4423b59f6b42) ) + + ROM_REGION( 0x1000, REGION_GFX4, 0 ) /* 4k for the playfield graphics */ + ROM_LOAD( "dd1.10b", 0x0000, 0x1000, CRC(2cf399c2) SHA1(317c48818992f757b1bd0e3997fa99937f81b52c) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "136007.113", 0x0000, 0x0020, CRC(4cb9da99) SHA1(91a5852a15d4672c29fdcbae75921794651f960c) ) + ROM_LOAD( "136007.111", 0x0020, 0x0100, CRC(00c7c419) SHA1(7ea149e8eb36920c3b84984b5ce623729d492fd3) ) + ROM_LOAD( "136007.112", 0x0120, 0x0100, CRC(e9b3e08e) SHA1(a294cc4da846eb702d61678396bfcbc87d30ea95) ) + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound prom */ + ROM_LOAD( "136007.110", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "136007.109", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( digdugb ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "136007.101", 0x0000, 0x1000, CRC(b9198079) SHA1(1d3fe04020f584ed250e32fdc6f6a3b769342884) ) + ROM_LOAD( "136007.102", 0x1000, 0x1000, CRC(b2acbe49) SHA1(c8f713e8cfa70d3bc64d3002ff7bffc65ee138e2) ) + ROM_LOAD( "136007.103", 0x2000, 0x1000, CRC(d6407b49) SHA1(0e71a8f02778286488865e20439776dbb2a8ec78) ) + ROM_LOAD( "dd1.4b", 0x3000, 0x1000, CRC(f4cebc16) SHA1(19b568f92069a1cfe1c07287408efe3b0e253375) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "dd1.5b", 0x0000, 0x1000, CRC(370ef9b4) SHA1(746b1fa15f5f2cfd69d8b5a7d6fb8c770abc3b4d) ) + ROM_LOAD( "dd1.6b", 0x1000, 0x1000, CRC(361eeb71) SHA1(372c97c666411c3590d790213ae6fa1ccb5ffa1c) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "136007.107", 0x0000, 0x1000, CRC(a41bce72) SHA1(2b9b74f56aa7939d9d47cf29497ae11f10d78598) ) + + DIGDUG_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "dd1.9", 0x0000, 0x0800, CRC(f14a6fe1) SHA1(0aa63300c2cb887196de590aceb98f3cf06fead4) ) + + ROM_REGION( 0x4000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.116", 0x0000, 0x1000, CRC(e22957c8) SHA1(4700c63f4f680cb8ab8c44e6f3e1712aabd5daa4) ) + ROM_LOAD( "dd1.14", 0x1000, 0x1000, CRC(2829ec99) SHA1(3e435c1afb2e44487cd7ba28a93ada2e5ccbb86d) ) + ROM_LOAD( "136007.118", 0x2000, 0x1000, CRC(458499e9) SHA1(578bd839f9218c3cf4feee1223a461144e455df8) ) + ROM_LOAD( "136007.119", 0x3000, 0x1000, CRC(c58252a0) SHA1(bd79e39e8a572d2b5c205e6de27ca23e43ec9f51) ) + + ROM_REGION( 0x1000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "dd1.11", 0x0000, 0x1000, CRC(7b383983) SHA1(57f1e8f5171d13f9f76bd091d81b4423b59f6b42) ) + + ROM_REGION( 0x1000, REGION_GFX4, 0 ) /* 4k for the playfield graphics */ + ROM_LOAD( "dd1.10b", 0x0000, 0x1000, CRC(2cf399c2) SHA1(317c48818992f757b1bd0e3997fa99937f81b52c) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "136007.113", 0x0000, 0x0020, CRC(4cb9da99) SHA1(91a5852a15d4672c29fdcbae75921794651f960c) ) + ROM_LOAD( "136007.111", 0x0020, 0x0100, CRC(00c7c419) SHA1(7ea149e8eb36920c3b84984b5ce623729d492fd3) ) + ROM_LOAD( "136007.112", 0x0120, 0x0100, CRC(e9b3e08e) SHA1(a294cc4da846eb702d61678396bfcbc87d30ea95) ) + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound prom */ + ROM_LOAD( "136007.110", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "136007.109", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( digdugat ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "136007.201", 0x0000, 0x1000, CRC(23d0b1a4) SHA1(a118d55e03a9ccf069f37c7bac2c9044dccd1f5e) ) + ROM_LOAD( "136007.202", 0x1000, 0x1000, CRC(5453dc1f) SHA1(8be091dd53e9b44e80e1ac9b1751efbe832db78d) ) + ROM_LOAD( "136007.203", 0x2000, 0x1000, CRC(c9077dfa) SHA1(611b3e1b575a51639530917366557773534c80aa) ) + ROM_LOAD( "136007.204", 0x3000, 0x1000, CRC(a8fc8eac) SHA1(7a24197f4ec5989bc4d635b27b6578f4d62cb5f4) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "136007.205", 0x0000, 0x1000, CRC(5ba385c5) SHA1(f4577bddff74a14b13b212f5553fa13fe9ae4bcc) ) + ROM_LOAD( "136007.206", 0x1000, 0x1000, CRC(382b4011) SHA1(2b79ddcf48177c99b5fa1f957374f4baa2bec143) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "136007.107", 0x0000, 0x1000, CRC(a41bce72) SHA1(2b9b74f56aa7939d9d47cf29497ae11f10d78598) ) + + DIGDUG_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.108", 0x0000, 0x0800, CRC(3d24a3af) SHA1(857ae93e2a41258a129dcecbaed2df359540b735) ) + + ROM_REGION( 0x4000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.116", 0x0000, 0x1000, CRC(e22957c8) SHA1(4700c63f4f680cb8ab8c44e6f3e1712aabd5daa4) ) + ROM_LOAD( "136007.117", 0x1000, 0x1000, CRC(a3bbfd85) SHA1(2105455762e0de120f2d943f9010a7d06c6b6448) ) + ROM_LOAD( "136007.118", 0x2000, 0x1000, CRC(458499e9) SHA1(578bd839f9218c3cf4feee1223a461144e455df8) ) + ROM_LOAD( "136007.119", 0x3000, 0x1000, CRC(c58252a0) SHA1(bd79e39e8a572d2b5c205e6de27ca23e43ec9f51) ) + + ROM_REGION( 0x1000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.115", 0x0000, 0x1000, CRC(754539be) SHA1(466ae754eb4721df8814d4d33a31d867507d45b3) ) + + ROM_REGION( 0x1000, REGION_GFX4, 0 ) /* 4k for the playfield graphics */ + ROM_LOAD( "136007.114", 0x0000, 0x1000, CRC(d6822397) SHA1(055ca6514141323f1e6dfcf91451507c04114d41) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "136007.113", 0x0000, 0x0020, CRC(4cb9da99) SHA1(91a5852a15d4672c29fdcbae75921794651f960c) ) + ROM_LOAD( "136007.111", 0x0020, 0x0100, CRC(00c7c419) SHA1(7ea149e8eb36920c3b84984b5ce623729d492fd3) ) + ROM_LOAD( "136007.112", 0x0120, 0x0100, CRC(e9b3e08e) SHA1(a294cc4da846eb702d61678396bfcbc87d30ea95) ) + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound prom */ + ROM_LOAD( "136007.110", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "136007.109", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( digduga1 ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "136007.101", 0x0000, 0x1000, CRC(b9198079) SHA1(1d3fe04020f584ed250e32fdc6f6a3b769342884) ) + ROM_LOAD( "136007.102", 0x1000, 0x1000, CRC(b2acbe49) SHA1(c8f713e8cfa70d3bc64d3002ff7bffc65ee138e2) ) + ROM_LOAD( "136007.103", 0x2000, 0x1000, CRC(d6407b49) SHA1(0e71a8f02778286488865e20439776dbb2a8ec78) ) + ROM_LOAD( "136007.104", 0x3000, 0x1000, CRC(b3ad42c3) SHA1(83ea80f0dd42ec1cb62e6ed45d5dda43ed21f567) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "136007.105", 0x0000, 0x1000, CRC(0a2aef4a) SHA1(ef40974fde8e8c305059e1dd03ea811a6aaca737) ) + ROM_LOAD( "136007.106", 0x1000, 0x1000, CRC(a2876d6e) SHA1(08e8ac50918ae32dd6fb34e65534652beb0395b2) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "136007.107", 0x0000, 0x1000, CRC(a41bce72) SHA1(2b9b74f56aa7939d9d47cf29497ae11f10d78598) ) + + DIGDUG_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.108", 0x0000, 0x0800, CRC(3d24a3af) SHA1(857ae93e2a41258a129dcecbaed2df359540b735) ) + + ROM_REGION( 0x4000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.116", 0x0000, 0x1000, CRC(e22957c8) SHA1(4700c63f4f680cb8ab8c44e6f3e1712aabd5daa4) ) + ROM_LOAD( "136007.117", 0x1000, 0x1000, CRC(a3bbfd85) SHA1(2105455762e0de120f2d943f9010a7d06c6b6448) ) + ROM_LOAD( "136007.118", 0x2000, 0x1000, CRC(458499e9) SHA1(578bd839f9218c3cf4feee1223a461144e455df8) ) + ROM_LOAD( "136007.119", 0x3000, 0x1000, CRC(c58252a0) SHA1(bd79e39e8a572d2b5c205e6de27ca23e43ec9f51) ) + + ROM_REGION( 0x1000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.115", 0x0000, 0x1000, CRC(754539be) SHA1(466ae754eb4721df8814d4d33a31d867507d45b3) ) + + ROM_REGION( 0x1000, REGION_GFX4, 0 ) /* 4k for the playfield graphics */ + ROM_LOAD( "136007.114", 0x0000, 0x1000, CRC(d6822397) SHA1(055ca6514141323f1e6dfcf91451507c04114d41) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "136007.113", 0x0000, 0x0020, CRC(4cb9da99) SHA1(91a5852a15d4672c29fdcbae75921794651f960c) ) + ROM_LOAD( "136007.111", 0x0020, 0x0100, CRC(00c7c419) SHA1(7ea149e8eb36920c3b84984b5ce623729d492fd3) ) + ROM_LOAD( "136007.112", 0x0120, 0x0100, CRC(e9b3e08e) SHA1(a294cc4da846eb702d61678396bfcbc87d30ea95) ) + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound prom */ + ROM_LOAD( "136007.110", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "136007.109", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( dzigzag ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "136007.101", 0x0000, 0x1000, CRC(b9198079) SHA1(1d3fe04020f584ed250e32fdc6f6a3b769342884) ) + ROM_LOAD( "136007.102", 0x1000, 0x1000, CRC(b2acbe49) SHA1(c8f713e8cfa70d3bc64d3002ff7bffc65ee138e2) ) + ROM_LOAD( "136007.103", 0x2000, 0x1000, CRC(d6407b49) SHA1(0e71a8f02778286488865e20439776dbb2a8ec78) ) + ROM_LOAD( "zigzag4", 0x3000, 0x1000, CRC(da20d2f6) SHA1(4eafe5ee917060d01d9df92d678c455edbbf27a6) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "zigzag5", 0x0000, 0x2000, CRC(f803c748) SHA1(a4c7dde0b794366cbfd03f339de980a6575a42fc) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "136007.107", 0x0000, 0x1000, CRC(a41bce72) SHA1(2b9b74f56aa7939d9d47cf29497ae11f10d78598) ) + + ROM_REGION( 0x10000, REGION_CPU4, 0 ) /* 64k for a Z80 which emulates the custom I/O chip (not used) */ + ROM_LOAD( "zigzag7", 0x0000, 0x1000, CRC(24c3510c) SHA1(3214a16f697f88d23f3441e58c56110930d7c341) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "zigzag8", 0x0000, 0x0800, CRC(86120541) SHA1(c974441ee0421a38c25bc7c3edbc6b510b7df473) ) + + ROM_REGION( 0x4000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "136007.116", 0x0000, 0x1000, CRC(e22957c8) SHA1(4700c63f4f680cb8ab8c44e6f3e1712aabd5daa4) ) + ROM_LOAD( "zigzag12", 0x1000, 0x1000, CRC(386a0956) SHA1(79f5d6af1fdc467a503216a588cb03535c823a40) ) + ROM_LOAD( "zigzag13", 0x2000, 0x1000, CRC(69f6e395) SHA1(10a7518e963f2cecb494d77137e01a068116e20b) ) + ROM_LOAD( "136007.119", 0x3000, 0x1000, CRC(c58252a0) SHA1(bd79e39e8a572d2b5c205e6de27ca23e43ec9f51) ) + + ROM_REGION( 0x1000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "dd1.11", 0x0000, 0x1000, CRC(7b383983) SHA1(57f1e8f5171d13f9f76bd091d81b4423b59f6b42) ) + + ROM_REGION( 0x1000, REGION_GFX4, 0 ) /* 4k for the playfield graphics */ + ROM_LOAD( "dd1.10b", 0x0000, 0x1000, CRC(2cf399c2) SHA1(317c48818992f757b1bd0e3997fa99937f81b52c) ) + + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "136007.113", 0x0000, 0x0020, CRC(4cb9da99) SHA1(91a5852a15d4672c29fdcbae75921794651f960c) ) + ROM_LOAD( "136007.111", 0x0020, 0x0100, CRC(00c7c419) SHA1(7ea149e8eb36920c3b84984b5ce623729d492fd3) ) + ROM_LOAD( "136007.112", 0x0120, 0x0100, CRC(e9b3e08e) SHA1(a294cc4da846eb702d61678396bfcbc87d30ea95) ) + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound prom */ + ROM_LOAD( "136007.110", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "136007.109", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +/* + +Year: 1982 +Manufacturer: Sidam + +CPUs: + +on main PCB (Sidam 11500): + +3x MK3880-4IRL-Z80CPU (main) +1x LM324N (sound) +1x TDA2003 (sound) +1x custom 0640 (DIL28)(interface to custom 5303) +1x custom 0748 (DIL28)(clock divider) +3x custom 0883 (DIL28)(bus controller) +1x custom 5156 (DIL42)(I/O) +1x custom 5303 (DIL42)(I/O) +1x oscillator 18432 + +on bottom PCB (Sidam 11510): + +1x custom 0037 (DIL28)(unknown) +1x custom 0228 (DIL28)(gfx data shifter and mixer(16-bit in, 4-bit out)) +1x custom 0425 (DIL28)(sprite address generator) +1x custom 0764 (DIL28)(clock divider) +1x custom DD1-6 (DIL20 300mil)(unknown) + +ROMs: + +on main PCB (Sidam 11500): + +7x TMS2531JL +2x TBP24S10N (11220, 11221) + +on bottom PCB (Sidam 11510): + +1x TMS2516JL (8) +6x D2732A +1x TBP24S10N (11523) +1x SN74S288N (11524) + +Notes: + +on main PCB (Sidam 11500): +1x 22x2 edge connector +1x 3 legs power connector +1x 50 pins flat cable connector to bottom +1x trimmer (volume) +2x 8x2 switches DIP + +on bottom PCB (Sidam 11510): +1x 50 pins flat cable connector to main +1x 6 legs connector + +*/ + +ROM_START( digsid ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code for the first CPU */ + ROM_LOAD( "digdug0.0", 0x0000, 0x1000, CRC(602197f0) SHA1(bea3b98a3f0f89d3b9e87aa38550ddd6f7883921) ) + ROM_LOAD( "digdug1.1", 0x1000, 0x1000, CRC(c6c8306b) SHA1(53e63ccb7edfdeea75df961ac69ebe882d808920) ) + ROM_LOAD( "digdug2.2", 0x2000, 0x1000, CRC(b695ec17) SHA1(46811106dbb686df6dc73b29e9e7db97b8c0d412) ) + ROM_LOAD( "digdug3.3", 0x3000, 0x1000, CRC(17bbfa40) SHA1(d3c7bf986d1d2b1961cea0c5e548245e84d74924) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */ + ROM_LOAD( "digdug4.4", 0x0000, 0x1000, CRC(370ef9b4) SHA1(746b1fa15f5f2cfd69d8b5a7d6fb8c770abc3b4d) ) + ROM_LOAD( "digdug5.5", 0x1000, 0x1000, CRC(d751df5d) SHA1(b08becb0176849a0fd1a706d6fae862684ff00b9) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for the third CPU */ + ROM_LOAD( "digdug6.6", 0x0000, 0x1000, CRC(a41bce72) SHA1(2b9b74f56aa7939d9d47cf29497ae11f10d78598) ) + + DIGDUG_CUSTOMS + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "digdug8.8", 0x0000, 0x0800, CRC(f14a6fe1) SHA1(0aa63300c2cb887196de590aceb98f3cf06fead4) ) + + ROM_REGION( 0x4000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "digdug14.14", 0x0000, 0x1000, CRC(e22957c8) SHA1(4700c63f4f680cb8ab8c44e6f3e1712aabd5daa4) ) + ROM_LOAD( "digdug13.13", 0x1000, 0x1000, CRC(2829ec99) SHA1(3e435c1afb2e44487cd7ba28a93ada2e5ccbb86d) ) + ROM_LOAD( "digdug12.12", 0x2000, 0x1000, CRC(458499e9) SHA1(578bd839f9218c3cf4feee1223a461144e455df8) ) + ROM_LOAD( "digdug11.11", 0x3000, 0x1000, CRC(c58252a0) SHA1(bd79e39e8a572d2b5c205e6de27ca23e43ec9f51) ) + + ROM_REGION( 0x1000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "digdug10.10", 0x0000, 0x1000, CRC(7b383983) SHA1(57f1e8f5171d13f9f76bd091d81b4423b59f6b42) ) + + ROM_REGION( 0x1000, REGION_GFX4, 0 ) /* 4k for the playfield graphics */ + ROM_LOAD( "digdug9.9", 0x0000, 0x1000, CRC(2cf399c2) SHA1(317c48818992f757b1bd0e3997fa99937f81b52c) ) + + /* Proms were not dumped with this set */ + ROM_REGION( 0x0220, REGION_PROMS, 0 ) + ROM_LOAD( "136007.113", 0x0000, 0x0020, CRC(4cb9da99) SHA1(91a5852a15d4672c29fdcbae75921794651f960c) ) + ROM_LOAD( "136007.111", 0x0020, 0x0100, CRC(00c7c419) SHA1(7ea149e8eb36920c3b84984b5ce623729d492fd3) ) + ROM_LOAD( "136007.112", 0x0120, 0x0100, CRC(e9b3e08e) SHA1(a294cc4da846eb702d61678396bfcbc87d30ea95) ) + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound prom */ + ROM_LOAD( "136007.110", 0x0000, 0x0100, CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46) ) + ROM_LOAD( "136007.109", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +static DRIVER_INIT (galaga) +{ + /* swap bytes for flipped character so we can decode them together with normal characters */ + UINT8 *rom = memory_region(REGION_GFX1); + int i; + + for (i = 0;i < memory_region_length(REGION_GFX1);i++) + { + if ((i & 0x0808) == 0x0800) + { + int t = rom[i]; + rom[i] = rom[i+8]; + rom[i+8] = t; + } + } +} + +static DRIVER_INIT (gatsbee) +{ + driver_init_galaga(machine); + + /* Gatsbee has a larger character ROM, we need a handler for banking */ + memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x1000, 0x1000, 0, 0, gatsbee_bank_w); +} + + +static DRIVER_INIT( xevious ) +{ + UINT8 *rom; + int i; + + rom = memory_region(REGION_GFX3) + 0x5000; + for (i = 0;i < 0x2000;i++) + rom[i + 0x2000] = rom[i] >> 4; +} + +static DRIVER_INIT( xevios ) +{ + int A; + + + /* convert one of the sprite ROMs to the format used by Xevious */ + for (A = 0x5000;A < 0x7000;A++) + { + UINT8 *rom = memory_region(REGION_GFX3); + + rom[A] = BITSWAP8(rom[A],1,3,5,7,0,2,4,6); + } + + /* convert one of tile map ROMs to the format used by Xevious */ + for (A = 0x0000;A < 0x1000;A++) + { + UINT8 *rom = memory_region(REGION_GFX4); + + rom[A] = BITSWAP8(rom[A],3,7,5,1,2,6,4,0); + } + + driver_init_xevious(machine); +} + + +static DRIVER_INIT( battles ) +{ + /* replace the Namco I/O handlers with interface to the 4th CPU */ + memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x7000, 0x700f, 0, 0, battles_customio_data0_r ); + memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x7100, 0x7100, 0, 0, battles_customio0_r ); + memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x7000, 0x700f, 0, 0, battles_customio_data0_w ); + memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x7100, 0x7100, 0, 0, battles_customio0_w ); + + driver_init_xevious(machine); +} + + +/* Original Namco hardware, with Namco Customs */ + +GAME( 1981, bosco, 0, bosco, bosco, 0, ROT0, "Namco", "Bosconian (new version)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, boscoo, bosco, bosco, bosco, 0, ROT0, "Namco", "Bosconian (old version)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, boscoo2, bosco, bosco, bosco, 0, ROT0, "Namco", "Bosconian (older version)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, boscomd, bosco, bosco, boscomd, 0, ROT0, "[Namco] (Midway license)", "Bosconian (Midway, new version)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, boscomdo, bosco, bosco, boscomd, 0, ROT0, "[Namco] (Midway license)", "Bosconian (Midway, old version)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) + +GAME( 1981, galaga, 0, galaga, galaga, galaga, ROT90, "Namco", "Galaga (Namco rev. B)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, galagao, galaga, galaga, galaga, galaga, ROT90, "Namco", "Galaga (Namco)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, galagamw, galaga, galaga, galagamw, galaga, ROT90, "[Namco] (Midway license)", "Galaga (Midway set 1)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, galagamk, galaga, galaga, galaga, galaga, ROT90, "[Namco] (Midway license)", "Galaga (Midway set 2)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) +GAME( 1981, galagamf, galaga, galaga, galaga, galaga, ROT90, "[Namco] (Midway license)", "Galaga (Midway set 1 with fast shoot hack)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) + +GAME( 1982, xevious, 0, xevious, xevious, xevious, ROT90, "Namco", "Xevious (Namco)", GAME_SUPPORTS_SAVE ) +GAME( 1982, xeviousa, xevious, xevious, xeviousa, xevious, ROT90, "Namco (Atari license)", "Xevious (Atari set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1982, xeviousb, xevious, xevious, xeviousb, xevious, ROT90, "Namco (Atari license)", "Xevious (Atari set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1982, xeviousc, xevious, xevious, xeviousa, xevious, ROT90, "Namco (Atari license)", "Xevious (Atari set 3)", GAME_SUPPORTS_SAVE ) +GAME( 1984, sxevious, xevious, xevious, sxevious, xevious, ROT90, "Namco", "Super Xevious", GAME_SUPPORTS_SAVE ) + +GAME( 1982, digdug, 0, digdug, digdug, 0, ROT90, "Namco", "Dig Dug (rev 2)", GAME_SUPPORTS_SAVE ) +GAME( 1982, digdugb, digdug, digdug, digdug, 0, ROT90, "Namco", "Dig Dug (rev 1)", GAME_SUPPORTS_SAVE ) +GAME( 1982, digdugat, digdug, digdug, digdug, 0, ROT90, "[Namco] (Atari license)", "Dig Dug (Atari, rev 2)", GAME_SUPPORTS_SAVE ) +GAME( 1982, digduga1, digdug, digdug, digdug, 0, ROT90, "[Namco] (Atari license)", "Dig Dug (Atari, rev 1)", GAME_SUPPORTS_SAVE ) +GAME( 1982, digsid, digdug, digdug, digdug, 0, ROT90, "Namco [Sidam license]", "Dig Dug (manufactured by Sidam)", GAME_SUPPORTS_SAVE ) + +/* Bootlegs with replacement I/O chips */ + +GAME( 1981, gallag, galaga, galagab, galaga, galaga, ROT90, "bootleg", "Gallag", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) +GAME( 1984, gatsbee, galaga, galagab, gatsbee, gatsbee, ROT90, "hack", "Gatsbee", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) + +GAME( 1982, xevios, xevious, xevious, xevious, xevios, ROT90, "bootleg", "Xevios", GAME_SUPPORTS_SAVE ) +GAME( 1982, battles, xevious, battles, xevious, battles, ROT90, "bootleg", "Battles", GAME_SUPPORTS_SAVE ) + +GAME( 1982, dzigzag, digdug, dzigzag, digdug, 0, ROT90, "bootleg", "Zig Zag (Dig Dug hardware)", GAME_SUPPORTS_SAVE ) |