diff options
Diffstat (limited to 'src/mame/drivers/dwarfd.cpp')
-rw-r--r-- | src/mame/drivers/dwarfd.cpp | 86 |
1 files changed, 39 insertions, 47 deletions
diff --git a/src/mame/drivers/dwarfd.cpp b/src/mame/drivers/dwarfd.cpp index fba7b069a75..248bc5d2f6e 100644 --- a/src/mame/drivers/dwarfd.cpp +++ b/src/mame/drivers/dwarfd.cpp @@ -332,7 +332,7 @@ private: /* memory */ uint8_t m_dw_ram[0x1000]; - required_device<cpu_device> m_maincpu; + required_device<i8085a_cpu_device> m_maincpu; required_device<palette_device> m_palette; required_device<i8275_device> m_crtc; required_region_ptr<uint16_t> m_charmap; @@ -604,7 +604,6 @@ INPUT_PORTS_END I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::pesp_display_pixels) { - int i; int bank = ((gpa & 2) ? 0 : 2) + (gpa & 1); const rgb_t *palette = m_palette->palette()->entry_list_raw(); uint16_t pixels = m_charmap[(linecount & 7) + ((charcode + (bank * 128)) << 3)]; @@ -614,7 +613,7 @@ I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::pesp_display_pixels) //if(!linecount) // logerror("%d %d %02x %02x %02x %02x %02x %02x %02x\n", x/8, y/8, charcode, lineattr, lten, rvv, vsp, gpa, hlgt); - for(i=0;i<8;i+=2) + for (int i = 0; i < 8; i += 2) { uint8_t pixel = (pixels >> (i * 2)) & 0xf; uint8_t value = (pixel >> 1) | (rvv << 4) | (vsp << 3); @@ -628,7 +627,6 @@ I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::pesp_display_pixels) I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::display_pixels) { - int i; int bank = ((gpa & 2) ? 0 : 4) + (gpa & 1) + (m_dsw2->read() & 2); const rgb_t *palette = m_palette->palette()->entry_list_raw(); uint16_t pixels = m_charmap[(linecount & 7) + ((charcode + (bank * 128)) << 3)]; @@ -638,7 +636,7 @@ I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::display_pixels) //if(!linecount) // logerror("%d %d %02x %02x %02x %02x %02x %02x %02x\n", x/8, y/8, charcode, lineattr, lten, rvv, vsp, gpa, hlgt); - for(i=0;i<8;i+=2) + for (int i = 0; i < 8; i += 2) { uint8_t pixel = (pixels >> (i * 2)) & 0xf; uint8_t value = (pixel >> 1) | (rvv << 4) | (vsp << 3); @@ -652,7 +650,6 @@ I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::display_pixels) I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::qc_display_pixels) { - int i; int bank = gpa; const rgb_t *palette = m_palette->palette()->entry_list_raw(); uint16_t pixels = m_charmap[(linecount & 7) + ((charcode + (bank * 128)) << 3)]; @@ -662,7 +659,7 @@ I8275_DRAW_CHARACTER_MEMBER(dwarfd_state::qc_display_pixels) //if(!linecount) // logerror("%d %d %02x %02x %02x %02x %02x %02x %02x\n", x/8, y/8, charcode, lineattr, lten, rvv, vsp, gpa, hlgt); - for(i=0;i<8;i+=2) + for (int i = 0; i < 8; i += 2) { uint8_t pixel = (pixels >> (i * 2)) & 0xf; uint8_t value = (pixel >> 1) | (rvv << 4) | (vsp << 3); @@ -706,16 +703,15 @@ GFXDECODE_END PALETTE_INIT_MEMBER(dwarfd_state, dwarfd) { uint8_t rgb[3]; - int i,j; uint8_t *prom = memregion("proms")->base(); - for (i = 0; i < 32; i++) + for (int i = 0; i < 32; i++) { // what are the top 2 bits? rgb[0] = ((prom[i] & 0x08) >> 2) | (prom[i] & 1); rgb[1] = ((prom[i] & 0x10) >> 3) | ((prom[i] & 2) >> 1); rgb[2] = ((prom[i] & 0x20) >> 4) | ((prom[i] & 4) >> 2); - for(j = 0; j < 3; j++) + for (int j = 0; j < 3; j++) rgb[j] |= (rgb[j] << 6) | (rgb[j] << 4) | (rgb[j] << 2); palette.set_pen_color(i,rgb_t(rgb[0], rgb[1], rgb[2])); @@ -733,59 +729,55 @@ void dwarfd_state::machine_reset() m_back_color = false; } -MACHINE_CONFIG_START(dwarfd_state::dwarfd) - +void dwarfd_state::dwarfd(machine_config &config) +{ /* basic machine hardware */ /* FIXME: The 8085A had a max clock of 6MHz, internally divided by 2! */ - MCFG_DEVICE_ADD("maincpu", I8085A, 10595000/3*2) /* ? MHz */ - MCFG_I8085A_SOD(WRITELINE(*this, dwarfd_state,dwarfd_sod_callback)) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) + I8085A(config, m_maincpu, 10595000/3*2); /* ? MHz */ + m_maincpu->out_sod_func().set(FUNC(dwarfd_state::dwarfd_sod_callback)); + m_maincpu->set_addrmap(AS_PROGRAM, &dwarfd_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &dwarfd_state::io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(272*2, 200+4*8) - MCFG_SCREEN_VISIBLE_AREA(0, 272*2-1, 0, 200-1) - MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update) - - MCFG_DEVICE_ADD("i8275", I8275, 10595000/3) - MCFG_I8275_CHARACTER_WIDTH(8) - MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(dwarfd_state, display_pixels) - MCFG_I8275_IRQ_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE)) - MCFG_I8275_DRQ_CALLBACK(WRITELINE(*this, dwarfd_state, drq_w)) - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_dwarfd) - MCFG_PALETTE_ADD("palette", 32) - MCFG_PALETTE_INIT_OWNER(dwarfd_state, dwarfd) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(272*2, 200+4*8); + screen.set_visarea(0, 272*2-1, 0, 200-1); + screen.set_screen_update("i8275", FUNC(i8275_device::screen_update)); + + I8275(config, m_crtc, 10595000/3); + m_crtc->set_character_width(8); + m_crtc->set_display_callback(FUNC(dwarfd_state::display_pixels)); + m_crtc->irq_wr_callback().set_inputline("maincpu", I8085_RST55_LINE); + m_crtc->drq_wr_callback().set(FUNC(dwarfd_state::drq_w)); + + GFXDECODE(config, "gfxdecode", m_palette, gfx_dwarfd); + PALETTE(config, m_palette, 32).set_init(FUNC(dwarfd_state::palette_init_dwarfd)); SPEAKER(config, "mono").front_center(); ay8910_device &aysnd(AY8910(config, "aysnd", 1500000)); aysnd.port_a_read_callback().set_ioport("IN2"); aysnd.port_b_read_callback().set_ioport("IN1"); aysnd.add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dwarfd_state::pokeresp) +void dwarfd_state::pokeresp(machine_config &config) +{ dwarfd(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(pokeresp_map) - MCFG_DEVICE_IO_MAP(io_map) + m_maincpu->set_addrmap(AS_PROGRAM, &dwarfd_state::pokeresp_map); + m_maincpu->set_addrmap(AS_IO, &dwarfd_state::io_map); - MCFG_DEVICE_MODIFY("i8275") - MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(dwarfd_state, pesp_display_pixels) -MACHINE_CONFIG_END + m_crtc->set_display_callback(FUNC(dwarfd_state::pesp_display_pixels)); +} -MACHINE_CONFIG_START(dwarfd_state::qc) +void dwarfd_state::qc(machine_config &config) +{ dwarfd(config); + m_maincpu->set_addrmap(AS_PROGRAM, &dwarfd_state::qc_map); + m_maincpu->set_addrmap(AS_IO, &dwarfd_state::qc_io_map); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(qc_map) - MCFG_DEVICE_IO_MAP(qc_io_map) - - MCFG_DEVICE_MODIFY("i8275") - MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(dwarfd_state, qc_display_pixels) -MACHINE_CONFIG_END + m_crtc->set_display_callback(FUNC(dwarfd_state::qc_display_pixels)); +} /* Dwarfs den PROM explanation: The proms used in Dwarfs den are 74S188 (82s23 equivalent, 32x8 open collector) |