diff options
Diffstat (limited to 'src/mame/drivers/gts3a.c')
-rw-r--r-- | src/mame/drivers/gts3a.c | 155 |
1 files changed, 119 insertions, 36 deletions
diff --git a/src/mame/drivers/gts3a.c b/src/mame/drivers/gts3a.c index 26f400627b9..4b7bc7d23dc 100644 --- a/src/mame/drivers/gts3a.c +++ b/src/mame/drivers/gts3a.c @@ -3,6 +3,8 @@ PINBALL Gottlieb System 3 Dot Matrix Display + + You need to pick "Pixel Aspect (4:1)" video option in the tab menu. Status: - Nothing works @@ -17,13 +19,16 @@ ToDo: #include "machine/genpin.h" #include "cpu/m6502/m65c02.h" #include "machine/6522via.h" +#include "video/mc6845.h" class gts3a_state : public driver_device { public: gts3a_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) + , m_palette(*this, "palette") , m_maincpu(*this, "maincpu") + , m_dmdcpu(*this, "dmdcpu") , m_u4(*this, "u4") , m_u5(*this, "u5") , m_switches(*this, "X") @@ -34,8 +39,13 @@ public: DECLARE_READ8_MEMBER(u4a_r); DECLARE_READ8_MEMBER(u4b_r); DECLARE_WRITE8_MEMBER(u4b_w); + DECLARE_READ8_MEMBER(dmd_r); + DECLARE_WRITE8_MEMBER(dmd_w); DECLARE_WRITE_LINE_MEMBER(nmi_w); DECLARE_INPUT_CHANGED_MEMBER(test_inp); + MC6845_UPDATE_ROW(crtc_update_row); + DECLARE_PALETTE_INIT(gts3a); + required_device<palette_device> m_palette; private: bool m_dispclk; bool m_lampclk; @@ -43,8 +53,10 @@ private: UINT8 m_row; // for lamps and switches UINT8 m_segment[4]; UINT8 m_u4b; + UINT8 m_dmd; virtual void machine_reset(); required_device<m65c02_device> m_maincpu; + required_device<m65c02_device> m_dmdcpu; required_device<via6522_device> m_u4; required_device<via6522_device> m_u5; required_ioport_array<12> m_switches; @@ -59,6 +71,18 @@ static ADDRESS_MAP_START( gts3a_map, AS_PROGRAM, 8, gts3a_state ) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END +static ADDRESS_MAP_START( gts3a_dmd_map, AS_PROGRAM, 8, gts3a_state ) + AM_RANGE(0x0000, 0x1fff) AM_RAM + AM_RANGE(0x2000, 0x2000) AM_DEVREAD("crtc", mc6845_device, status_r) + AM_RANGE(0x2001, 0x2001) AM_DEVREAD("crtc", mc6845_device, register_r) + AM_RANGE(0x2800, 0x2800) AM_DEVWRITE("crtc", mc6845_device, address_w) + AM_RANGE(0x2801, 0x2801) AM_DEVWRITE("crtc", mc6845_device, register_w) + AM_RANGE(0x3000, 0x3000) AM_READ(dmd_r) + AM_RANGE(0x3800, 0x3800) AM_WRITE(dmd_w) + AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank1") + AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("dmdcpu", 0x78000) +ADDRESS_MAP_END + static INPUT_PORTS_START( gts3a ) PORT_START("TTS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE) PORT_NAME("Test") PORT_CHANGED_MEMBER(DEVICE_SELF, gts3a_state, test_inp, 1) @@ -254,6 +278,50 @@ void gts3a_state::machine_reset() DRIVER_INIT_MEMBER( gts3a_state, gts3a ) { + UINT8 *dmd = memregion("dmdcpu")->base(); + + membank("bank1")->configure_entries(0, 32, &dmd[0x0000], 0x4000); +} + +READ8_MEMBER( gts3a_state::dmd_r ) +{ + return 0; +} + +WRITE8_MEMBER( gts3a_state::dmd_w ) +{ + m_dmd = data; + membank("bank1")->set_entry(data & 0x1f); +} + +PALETTE_INIT_MEMBER( gts3a_state, gts3a ) +{ + palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); + palette.set_pen_color(1, rgb_t(0xf7, 0x00, 0x00)); +} + +MC6845_UPDATE_ROW( gts3a_state::crtc_update_row ) +{ + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + UINT8 gfx=0; + UINT16 mem,x; + UINT32 *p = &bitmap.pix32(y); + + for (x = 0; x < x_count; x++) + { + mem = (ma + x) & 0xfff;mem++; + gfx = 4;//m_p_chargen[(chr<<4) | ra] ^ inv; + + /* Display a scanline of a character */ + *p++ = palette[BIT(gfx, 7)]; + *p++ = palette[BIT(gfx, 6)]; + *p++ = palette[BIT(gfx, 5)]; + *p++ = palette[BIT(gfx, 4)]; + *p++ = palette[BIT(gfx, 3)]; + *p++ = palette[BIT(gfx, 2)]; + *p++ = palette[BIT(gfx, 1)]; + *p++ = palette[BIT(gfx, 0)]; + } } static MACHINE_CONFIG_START( gts3a, gts3a_state ) @@ -262,8 +330,23 @@ static MACHINE_CONFIG_START( gts3a, gts3a_state ) MCFG_CPU_PROGRAM_MAP(gts3a_map) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_CPU_ADD("dmdcpu", M65C02, XTAL_3_579545MHz / 2) + MCFG_CPU_PROGRAM_MAP(gts3a_dmd_map) + /* Video */ - // to be done + MCFG_SCREEN_ADD("screen", LCD) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) + MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + MCFG_SCREEN_SIZE(128, 32) + MCFG_SCREEN_VISIBLE_AREA(0, 127, 0, 31) + MCFG_PALETTE_ADD( "palette", 2 ) + MCFG_PALETTE_INIT_OWNER(gts3a_state, gts3a) + + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_3_579545MHz / 2) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(gts3a_state, crtc_update_row) /* Sound */ MCFG_FRAGMENT_ADD( genpin_audio ) @@ -295,7 +378,7 @@ ROM_START(barbwire) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(2b9533cd) SHA1(2b154550006e37a9dd1acb0cb832535415a7266b)) ROM_REGION(0x10000, "cpu4", 0) @@ -319,7 +402,7 @@ ROM_START(brooks) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, NO_DUMP) ROM_REGION(0x10000, "cpu4", 0) @@ -347,7 +430,7 @@ ROM_START(cueball) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x40000, CRC(3cc7f470) SHA1(6adf8ac2ff93eb19c7b1dbbcf8fff6cd926dc563)) ROM_RELOAD( 0x40000, 0x40000) @@ -373,7 +456,7 @@ ROM_START(bighurt) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(bbe96c5e) SHA1(4aaac8d88e739ccb22a7d87a820b14b6d40d3ff8)) ROM_REGION(0x10000, "cpu4", 0) @@ -397,7 +480,7 @@ ROM_START(freddy) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(d78d0fa3) SHA1(132c05e71cf5ad53184f044873fb3dd71f6da15f)) ROM_REGION(0x10000, "cpu4", 0) @@ -418,7 +501,7 @@ ROM_START(freddy4) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(d78d0fa3) SHA1(132c05e71cf5ad53184f044873fb3dd71f6da15f)) ROM_REGION(0x10000, "cpu4", 0) @@ -441,7 +524,7 @@ ROM_START(gladiatp) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(fdc8baed) SHA1(d8ad96665cd9d8b2a6ce94653753c692384685ff)) ROM_REGION(0x10000, "cpu4", 0) @@ -466,7 +549,7 @@ ROM_START(andretti) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(1f70baae) SHA1(cf07bb057093b2bd18e6ee45009245ea62094e53)) ROM_REGION(0x10000, "cpu4", 0) @@ -487,7 +570,7 @@ ROM_START(andretti4) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(1f70baae) SHA1(cf07bb057093b2bd18e6ee45009245ea62094e53)) ROM_REGION(0x10000, "cpu4", 0) @@ -511,7 +594,7 @@ ROM_START(rescu911) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(9657ebd5) SHA1(b716daa71f8ec4332bf338f1f976425b6ec781ab)) ROM_REGION(0x10000, "cpu4", 0) @@ -535,7 +618,7 @@ ROM_START(shaqattq) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(d6cca842) SHA1(0498ab558d252e42dee9636e6736d159c7d06275)) ROM_REGION(0x10000, "cpu4", 0) @@ -556,7 +639,7 @@ ROM_START(shaqattq2) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(d6cca842) SHA1(0498ab558d252e42dee9636e6736d159c7d06275)) ROM_REGION(0x10000, "cpu4", 0) @@ -580,7 +663,7 @@ ROM_START(stargatp) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(17b89750) SHA1(927702f88013945cb9f2ea8389800b925182c347)) ROM_REGION(0x10000, "cpu4", 0) @@ -600,7 +683,7 @@ ROM_START(stargatp1) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom1.bin", 0x00000, 0x80000, CRC(91c1b01a) SHA1(96eec2e9e52c8278c102f433a554327d420fe131)) ROM_REGION(0x10000, "cpu4", 0) @@ -620,7 +703,7 @@ ROM_START(stargatp2) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x80000, CRC(d0205e03) SHA1(d8dea47f0fa0e46e2bd107a1f57121372fdef0d8)) ROM_REGION(0x10000, "cpu4", 0) @@ -640,7 +723,7 @@ ROM_START(stargatp3) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom3.bin", 0x00000, 0x80000, CRC(db483524) SHA1(ea14e8b04c32fc403ce2ff060caed5562104a862)) ROM_REGION(0x10000, "cpu4", 0) @@ -660,7 +743,7 @@ ROM_START(stargatp4) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom3.bin", 0x00000, 0x80000, CRC(db483524) SHA1(ea14e8b04c32fc403ce2ff060caed5562104a862)) ROM_REGION(0x10000, "cpu4", 0) @@ -683,7 +766,7 @@ ROM_START(sfight2) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(e565e5e9) SHA1(c37abf28918feb38bbad6ebb610023d52ba96957)) ROM_REGION(0x10000, "cpu4", 0) @@ -705,7 +788,7 @@ ROM_START(sfight2a) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x80000, CRC(80eb7513) SHA1(d13d44545c7b177e27b596bac6eba173b34a017b)) ROM_REGION(0x10000, "cpu4", 0) @@ -727,7 +810,7 @@ ROM_START(sfight2b) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x80000, CRC(80eb7513) SHA1(d13d44545c7b177e27b596bac6eba173b34a017b)) ROM_REGION(0x10000, "cpu4", 0) @@ -752,7 +835,7 @@ ROM_START(snspares) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x40000, CRC(5c901899) SHA1(d106561b2e382afdb16e938072c9c8f1d1ccdae6)) ROM_RELOAD( 0x40000, 0x40000) @@ -771,7 +854,7 @@ ROM_START(snspares1) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x40000, CRC(5c901899) SHA1(d106561b2e382afdb16e938072c9c8f1d1ccdae6)) ROM_RELOAD( 0x40000, 0x40000) @@ -794,7 +877,7 @@ ROM_START(smb) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x40000, CRC(181e8234) SHA1(9b22681f61cae401269a88c3cfd783d683390877)) ROM_RELOAD( 0x40000, 0x40000) @@ -817,7 +900,7 @@ ROM_START(smb1) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x40000, CRC(181e8234) SHA1(9b22681f61cae401269a88c3cfd783d683390877)) ROM_RELOAD( 0x40000, 0x40000) @@ -840,7 +923,7 @@ ROM_START(smb2) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x40000, CRC(181e8234) SHA1(9b22681f61cae401269a88c3cfd783d683390877)) ROM_RELOAD( 0x40000, 0x40000) @@ -863,7 +946,7 @@ ROM_START(smb3) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x40000, CRC(181e8234) SHA1(9b22681f61cae401269a88c3cfd783d683390877)) ROM_RELOAD( 0x40000, 0x40000) @@ -889,7 +972,7 @@ ROM_START(smbmush) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x40000, CRC(dda6c8be) SHA1(b64f73b81afe973674f9543a704b498e31d26c12)) ROM_RELOAD( 0x40000, 0x40000) @@ -915,7 +998,7 @@ ROM_START(teedoffp) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(340b8a49) SHA1(3ac76faf920b00b77c77023c42595307840ed3a7)) ROM_REGION(0x10000, "cpu4", 0) @@ -937,7 +1020,7 @@ ROM_START(teedoffp1) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom1.bin", 0x00000, 0x80000, CRC(24f10ad2) SHA1(15f44f69d39ca9782410a75070edf348f64dba62)) ROM_REGION(0x10000, "cpu4", 0) @@ -959,7 +1042,7 @@ ROM_START(teedoffp3) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom1.bin", 0x00000, 0x80000, CRC(24f10ad2) SHA1(15f44f69d39ca9782410a75070edf348f64dba62)) ROM_REGION(0x10000, "cpu4", 0) @@ -984,7 +1067,7 @@ ROM_START(waterwld) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(79164099) SHA1(fa048fb7aa91cadd6c0758c570a4c74337bd7cd5)) ROM_REGION(0x10000, "cpu4", 0) @@ -1004,7 +1087,7 @@ ROM_START(waterwld2) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(79164099) SHA1(fa048fb7aa91cadd6c0758c570a4c74337bd7cd5)) ROM_REGION(0x10000, "cpu4", 0) @@ -1027,7 +1110,7 @@ ROM_START(wipeout) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(cbdec3ab) SHA1(2d70d436783830bf074a7a0590d5c48432136595)) ROM_REGION(0x10000, "cpu4", 0) @@ -1052,7 +1135,7 @@ ROM_START(wcsoccer) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom.bin", 0x00000, 0x80000, CRC(71ba5263) SHA1(e86c2cc89d31534fb2d9d24fab2fcdb0af7cc73d)) ROM_REGION(0x10000, "cpu4", 0) @@ -1074,7 +1157,7 @@ ROM_START(wcsoccerd2) ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) - ROM_REGION(0x80000, "user1", 0) + ROM_REGION(0x80000, "dmdcpu", 0) ROM_LOAD("dsprom2.bin", 0x00000, 0x80000, CRC(4c8ea71d) SHA1(ce751b84e2033e4de2f2c57490867ecafd423aaa)) ROM_REGION(0x10000, "cpu4", 0) |