summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/giclassic.cpp
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2017-04-16 22:58:55 -0400
committer arbee <rb6502@users.noreply.github.com>2017-04-16 22:58:55 -0400
commit17d6ef6f5c6299f6fc389262591bdb0575458cde (patch)
tree2ef720c1d1fb1e950d3ed09822f667f19a8938fc /src/mame/drivers/giclassic.cpp
parentb2e89fd2e1fd4c1f5d487ffc9c79f9ef5b4cc78d (diff)
New games added as GAME_NOT_WORKING:
GI-Classic EX (Server) [R. Belmont, Phil Bennett, The Dumping Union]
Diffstat (limited to 'src/mame/drivers/giclassic.cpp')
-rw-r--r--src/mame/drivers/giclassic.cpp188
1 files changed, 186 insertions, 2 deletions
diff --git a/src/mame/drivers/giclassic.cpp b/src/mame/drivers/giclassic.cpp
index 94af182bb88..a7b20a47fa2 100644
--- a/src/mame/drivers/giclassic.cpp
+++ b/src/mame/drivers/giclassic.cpp
@@ -7,8 +7,11 @@
Preliminary driver by R. Belmont
GI Classic EX Main PCB:
- Main CPU: 68020
- Photo too unclear to identify Konami customs.
+ Main CPU: 68000
+ Video: 056832 + 058143 (GX tilemaps)
+ Video: 055673(x2) + 053246 (GX sprites)
+ Video: 055555 (Mixer)
+ 053252 (x2) (CRTC?)
GI Classic EX Satellite PCB:
Main CPU: 68000-12
@@ -42,7 +45,10 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
+#include "machine/k053252.h"
+#include "video/k055555.h"
#include "video/k054156_k054157_k056832.h"
+#include "video/k053246_k053247_k055673.h"
#include "video/konami_helper.h"
#include "screen.h"
#include "speaker.h"
@@ -78,6 +84,10 @@ private:
uint8_t m_control;
};
+// --------------------------------------------------------------------------------------------------------------
+// Client portion
+// --------------------------------------------------------------------------------------------------------------
+
K056832_CB_MEMBER(giclassic_state::tile_callback)
{
*color = (*color & 0xf);
@@ -155,6 +165,129 @@ void giclassic_state::machine_reset()
{
}
+// --------------------------------------------------------------------------------------------------------------
+// Server portion
+// --------------------------------------------------------------------------------------------------------------
+
+class giclassicsvr_state : public driver_device
+{
+public:
+ giclassicsvr_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_k056832(*this, "k056832"),
+ m_k055673(*this, "k055673"),
+ m_palette(*this, "palette")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<k056832_device> m_k056832;
+ required_device<k055673_device> m_k055673;
+ required_device<palette_device> m_palette;
+
+ INTERRUPT_GEN_MEMBER(giclassicsvr_interrupt);
+
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ uint32_t screen_update_giclassicsvr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ K056832_CB_MEMBER(tile_callback);
+ K055673_CB_MEMBER(sprite_callback);
+
+ DECLARE_WRITE16_MEMBER(control_w);
+ DECLARE_READ16_MEMBER(control_r);
+
+private:
+ uint16 m_control;
+};
+
+WRITE16_MEMBER(giclassicsvr_state::control_w)
+{
+ m_control = data;
+}
+
+READ16_MEMBER(giclassicsvr_state::control_r)
+{
+ return m_control;
+}
+
+INTERRUPT_GEN_MEMBER(giclassicsvr_state::giclassicsvr_interrupt)
+{
+ //if (m_control & 2)
+ {
+ m_maincpu->set_input_line(M68K_IRQ_4, HOLD_LINE);
+ m_maincpu->set_input_line(M68K_IRQ_5, HOLD_LINE);
+ }
+}
+
+K056832_CB_MEMBER(giclassicsvr_state::tile_callback)
+{
+}
+
+K055673_CB_MEMBER(giclassicsvr_state::sprite_callback)
+{
+ int c = *color;
+
+ *color = (c & 0x001f);
+ //int pri = (c >> 5) & 7;
+ // .... .... ...x xxxx - Color
+ // .... .... xxx. .... - Priority?
+ // .... ..x. .... .... - ?
+ // ..x. .... .... .... - ?
+
+ *priority_mask = 0;
+
+ // 0 - Sprites over everything
+ // f0 -
+ // f0 cc -
+ // f0 cc aa -
+
+ // 1111 0000
+ // 1100 1100
+ // 1010 1010
+}
+
+
+uint32_t giclassicsvr_state::screen_update_giclassicsvr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(0, cliprect);
+ screen.priority().fill(0, cliprect);
+
+ m_k056832->tilemap_draw(screen, bitmap, cliprect, 3, 0, 1);
+ m_k056832->tilemap_draw(screen, bitmap, cliprect, 2, 0, 2);
+ m_k056832->tilemap_draw(screen, bitmap, cliprect, 1, 0, 4);
+ m_k056832->tilemap_draw(screen, bitmap, cliprect, 0, 0, 8);
+
+ return 0;
+}
+
+static ADDRESS_MAP_START( server_main, AS_PROGRAM, 16, giclassicsvr_state )
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_REGION("maincpu", 0)
+ AM_RANGE(0x080000, 0x08ffff) AM_RAM
+ AM_RANGE(0x090000, 0x093fff) AM_RAM
+ AM_RANGE(0x100000, 0x107fff) AM_RAM AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ AM_RANGE(0x180000, 0x183fff) AM_RAM
+ AM_RANGE(0x280000, 0x281fff) AM_RAM AM_DEVREADWRITE("k056832", k056832_device, ram_word_r, ram_word_w)
+ AM_RANGE(0x300000, 0x300007) AM_DEVWRITE("k055673", k055673_device, k053246_word_w) // SPRITES
+ AM_RANGE(0x300060, 0x30006f) AM_DEVREAD("k055673", k055673_device, k055673_ps_rom_word_r) // SPRITES
+ AM_RANGE(0x308000, 0x30803f) AM_DEVREADWRITE("k056832", k056832_device, word_r, word_w)
+ AM_RANGE(0x320000, 0x32001f) AM_DEVREADWRITE8("k053252a", k053252_device, read, write, 0x00ff) // CRTC 1
+ AM_RANGE(0x320000, 0x32001f) AM_DEVREADWRITE8("k053252b", k053252_device, read, write, 0xff00) // CRTC 2
+ AM_RANGE(0x380000, 0x380001) AM_WRITENOP // watchdog reset
+ AM_RANGE(0x398000, 0x398001) AM_READWRITE(control_r, control_w)
+ AM_RANGE(0x400000, 0x41ffff) AM_RAM
+ADDRESS_MAP_END
+
+static INPUT_PORTS_START( giclassvr )
+INPUT_PORTS_END
+
+void giclassicsvr_state::machine_start()
+{
+}
+
+void giclassicsvr_state::machine_reset()
+{
+}
+
static MACHINE_CONFIG_START( giclassic, giclassic_state )
/* basic machine hardware */
@@ -181,6 +314,43 @@ static MACHINE_CONFIG_START( giclassic, giclassic_state )
MCFG_K056832_PALETTE("palette")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_START( giclassvr, giclassicsvr_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) // unknown speed
+ MCFG_CPU_PROGRAM_MAP(server_main)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", giclassicsvr_state, giclassicsvr_interrupt)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(59.62)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_SIZE(600, 384)
+ MCFG_SCREEN_VISIBLE_AREA(0, 599, 0, 383)
+ MCFG_SCREEN_UPDATE_DRIVER(giclassicsvr_state, screen_update_giclassicsvr)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_PALETTE_ADD("palette", 16384)
+ MCFG_PALETTE_ENABLE_SHADOWS()
+ MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
+
+ MCFG_DEVICE_ADD("k056832", K056832, 0)
+ MCFG_K056832_CB(giclassicsvr_state, tile_callback)
+ MCFG_K056832_CONFIG("gfx1", K056832_BPP_4PIRATESH, 0, 0, "none")
+ MCFG_K056832_PALETTE("palette")
+
+ MCFG_DEVICE_ADD("k055673", K055673, 0)
+ MCFG_K055673_CB(giclassicsvr_state, sprite_callback)
+ MCFG_K055673_CONFIG("gfx2", K055673_LAYOUT_PS, -60, 24)
+ MCFG_K055673_PALETTE("palette")
+
+ MCFG_DEVICE_ADD("k053252a", K053252, XTAL_32MHz/4)
+ MCFG_K053252_OFFSETS(40, 16) // TODO
+
+ MCFG_DEVICE_ADD("k053252b", K053252, XTAL_32MHz/4)
+ MCFG_K053252_OFFSETS(40, 16) // TODO
+MACHINE_CONFIG_END
+
ROM_START( giclasex )
ROM_REGION( 0x80000, "maincpu", 0 ) /* main program */
ROM_LOAD16_WORD_SWAP( "gsgu760ae01.12t", 0x000000, 0x080000, CRC(f0f9c118) SHA1(1753d53946bc0703d329e4a09c452713b260da75) )
@@ -190,4 +360,18 @@ ROM_START( giclasex )
ROM_LOAD( "gsgu760ae02.14e", 0x080000, 0x080000, CRC(2b9fe163) SHA1(f60190a9689a70d6c5bb14fb46b7ac2267cf0969) )
ROM_END
+ROM_START( giclassvr )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* main program */
+ ROM_LOAD16_WORD_SWAP( "gsgu_760_fd01.34e.bin", 0x000000, 0x080000, CRC(da89c1d7) SHA1(551d050a9b6e54fbf98e966eb37924b644037893) )
+
+ ROM_REGION( 0x100000, "gfx1", 0 ) /* tilemaps */
+ ROM_LOAD( "gsgu_760_ad04.25q", 0x080000, 0x080000, CRC(71a45742) SHA1(fbddd54f5fb236662f7cc7e9b350723bc5404f72) )
+ ROM_LOAD( "gsgu_760_ad05.25r", 0x000000, 0x080000, CRC(44221eec) SHA1(966452e606e828b536ed11cbdd626a2fe3165199) )
+
+ ROM_REGION( 0x100000, "gfx2", 0 ) /* tilemaps */
+ ROM_LOAD32_WORD( "gsgu_760_ad02.34j", 0x000000, 0x080000, CRC(6d33c720) SHA1(35da3e1f0133a76480d2078fae89ea87b841ffc7) )
+ ROM_LOAD32_WORD( "gsgu_760_ad02.34k", 0x000002, 0x080000, CRC(8057a417) SHA1(82d4a1d84729e9f0a8aff4c219a19601b89caf15) )
+ROM_END
+
GAME( 1998, giclasex, 0, giclassic, giclassic, driver_device, 0, 0, "Konami", "GI-Classic EX (satellite terminal)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND_HW)
+GAME( 1998, giclassvr, 0, giclassvr, giclassvr, driver_device, 0, 0, "Konami", "GI-Classic EX (server)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND_HW)