From 4e68bc9b5e24f62753178be235c884a809d03a3d Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 8 Aug 2020 04:01:06 +1000 Subject: [PATCH] vtech2: small clean; added savestate --- src/mame/drivers/vtech2.cpp | 27 ++++++++++++++------------- src/mame/includes/vtech2.h | 8 ++++---- src/mame/machine/vtech2.cpp | 23 +++++++++++++++++++++++ src/mame/video/vtech2.cpp | 25 ++++++++++++------------- 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/mame/drivers/vtech2.cpp b/src/mame/drivers/vtech2.cpp index 20890a9bc6d..b40e19874da 100644 --- a/src/mame/drivers/vtech2.cpp +++ b/src/mame/drivers/vtech2.cpp @@ -107,7 +107,7 @@ void vtech2_state::m_map350(address_map &map) map(0x00000, 0x03fff).rom().region("maincpu", 0); map(0x04000, 0x07fff).rom().region("maincpu", 0x4000); map(0x08000, 0x0bfff).rw(FUNC(vtech2_state::mmio_r), FUNC(vtech2_state::mmio_w)); - map(0x0c000, 0x0ffff).ram().share(m_videoram); + map(0x0c000, 0x0ffff).ram().share(m_vram); map(0x10000, 0x13fff).noprw(); map(0x14000, 0x17fff).noprw(); map(0x18000, 0x1bfff).noprw(); @@ -129,7 +129,7 @@ void vtech2_state::m_map500(address_map &map) map(0x10000, 0x13fff).ram(); map(0x14000, 0x17fff).ram(); map(0x18000, 0x1bfff).ram(); - map(0x1c000, 0x1ffff).ram().share(m_videoram); + map(0x1c000, 0x1ffff).ram().share(m_vram); map(0x20000, 0x23fff).noprw(); // TODO: 64k ram expansion pak map(0x24000, 0x27fff).noprw(); // TODO: 64k ram expansion pak map(0x28000, 0x2bfff).noprw(); // TODO: 64k ram expansion pak @@ -147,7 +147,7 @@ void vtech2_state::m_map700(address_map &map) map(0x10000, 0x13fff).ram(); map(0x14000, 0x17fff).ram(); map(0x18000, 0x1bfff).ram(); - map(0x1c000, 0x1ffff).ram().share(m_videoram); + map(0x1c000, 0x1ffff).ram().share(m_vram); map(0x20000, 0x23fff).ram(); map(0x24000, 0x27fff).ram(); map(0x28000, 0x2bfff).ram(); @@ -471,11 +471,6 @@ void vtech2_state::vtech2_palette(palette_device &palette) const palette.set_pen_indirect(512 + i, i); } -INTERRUPT_GEN_MEMBER(vtech2_state::vtech2_interrupt) -{ - m_maincpu->set_input_line(0, HOLD_LINE); -} - static const floppy_interface vtech2_floppy_interface = { FLOPPY_STANDARD_5_25_SSDD_40, @@ -489,7 +484,7 @@ void vtech2_state::laser350(machine_config &config) Z80(config, m_maincpu, 3694700); /* 3.694700 MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &vtech2_state::mem_map); m_maincpu->set_addrmap(AS_IO, &vtech2_state::io_map); - m_maincpu->set_vblank_int("screen", FUNC(vtech2_state::vtech2_interrupt)); + m_maincpu->set_vblank_int("screen", FUNC(vtech2_state::irq0_line_hold)); config.set_maximum_quantum(attotime::from_hz(60)); ADDRESS_MAP_BANK(config, "banka").set_map(&vtech2_state::m_map350).set_options(ENDIANNESS_LITTLE, 8, 18, 0x4000); @@ -503,7 +498,7 @@ void vtech2_state::laser350(machine_config &config) screen.set_vblank_time(0); screen.set_size(88*8, 24*8+32); screen.set_visarea(0*8, 88*8-1, 0*8, 24*8+32-1); - screen.set_screen_update(FUNC(vtech2_state::screen_update_laser)); + screen.set_screen_update(FUNC(vtech2_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_vtech2); @@ -556,8 +551,10 @@ void vtech2_state::laser700(machine_config &config) ROM_START(laser350) ROM_REGION(0x8000,"maincpu",0) ROM_LOAD("27-0401-00-00.u6", 0x0000, 0x8000, CRC(9bed01f7) SHA1(3210fddfab2f4c7855fa902fb8e2fc18d10d48f1)) + ROM_REGION(0x2000,"gfx1",0) ROM_LOAD( "27-393-00.u10", 0x0000, 0x2000, CRC(d47313a2) SHA1(4650e8e339aad628c0e5d8a1944b21abff793446) ) + ROM_REGION(0x0100,"gfx2",ROMREGION_ERASEFF) /* initialized in init_laser */ ROM_END @@ -567,8 +564,10 @@ ROM_START(laser500) // based on the picture at http://www.8bit-museum.de/hardwar // There should be two roms, one 0x2000 long for the font at u10, and one longer one for the os rom at u6. ROM_REGION(0x8000,"maincpu",0) ROM_LOAD("27-0401-00-00.u6", 0x0000, 0x8000, CRC(9bed01f7) SHA1(3210fddfab2f4c7855fa902fb8e2fc18d10d48f1)) // may be dumped at wrong size; label is: "VTL 27-0401-00-00 // 6133-7081 // 8611MAK" + ROM_REGION(0x2000,"gfx1",0) ROM_LOAD( "27-393-00.u10", 0x0000, 0x2000, CRC(d47313a2) SHA1(4650e8e339aad628c0e5d8a1944b21abff793446) ) // label is "TMS 2364-25NL // D8614L // ZA234015 // 27-393-00/VT 85 // SINGAPORE" + ROM_REGION(0x0100,"gfx2",ROMREGION_ERASEFF) /* initialized in init_laser */ ROM_END @@ -576,8 +575,10 @@ ROM_END ROM_START(laser700) ROM_REGION(0x8000,"maincpu",0) ROM_LOAD("27-0401-00-00.u6", 0x0000, 0x8000, CRC(9bed01f7) SHA1(3210fddfab2f4c7855fa902fb8e2fc18d10d48f1)) + ROM_REGION(0x2000,"gfx1",0) ROM_LOAD( "27-393-00.u10", 0x0000, 0x2000, CRC(d47313a2) SHA1(4650e8e339aad628c0e5d8a1944b21abff793446) ) + ROM_REGION(0x0100,"gfx2",ROMREGION_ERASEFF) /* initialized in init_laser */ ROM_END @@ -590,6 +591,6 @@ ROM_END ***************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1985, laser350, 0, 0, laser350, laser350, vtech2_state, init_laser, "Video Technology", "Laser 350" , 0) -COMP( 1985, laser500, laser350, 0, laser500, laser500, vtech2_state, init_laser, "Video Technology", "Laser 500" , 0) -COMP( 1985, laser700, laser350, 0, laser700, laser500, vtech2_state, init_laser, "Video Technology", "Laser 700" , 0) +COMP( 1985, laser350, 0, 0, laser350, laser350, vtech2_state, init_laser, "Video Technology", "Laser 350" , MACHINE_SUPPORTS_SAVE ) +COMP( 1985, laser500, laser350, 0, laser500, laser500, vtech2_state, init_laser, "Video Technology", "Laser 500" , MACHINE_SUPPORTS_SAVE ) +COMP( 1985, laser700, laser350, 0, laser700, laser500, vtech2_state, init_laser, "Video Technology", "Laser 700" , MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/vtech2.h b/src/mame/includes/vtech2.h index ef67efaa51a..5d6f963371f 100644 --- a/src/mame/includes/vtech2.h +++ b/src/mame/includes/vtech2.h @@ -33,7 +33,7 @@ public: , m_laser_file(*this, "floppy%u", 0U) , m_gfxdecode(*this, "gfxdecode") , m_palette(*this, "palette") - , m_videoram(*this, "videoram") + , m_vram(*this, "videoram") , m_io_keyboard(*this, {"ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7", "ROWD", "ROWC", "ROWB", "ROWA"}) , m_banka(*this, "banka") , m_bankb(*this, "bankb") @@ -52,6 +52,7 @@ public: protected: virtual void machine_reset() override; + virtual void machine_start() override; private: void laser_fdc_w(offs_t offset, uint8_t data); @@ -59,8 +60,7 @@ private: void laser_two_color_w(uint8_t data); uint8_t laser_fdc_r(offs_t offset); void vtech2_palette(palette_device &palette) const; - uint32_t screen_update_laser(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(vtech2_interrupt); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void mmio_w(uint8_t data); uint8_t mmio_r(offs_t offset); uint8_t cart_r(offs_t offset); @@ -82,7 +82,7 @@ private: optional_device_array m_laser_file; required_device m_gfxdecode; required_device m_palette; - optional_shared_ptr m_videoram; + optional_shared_ptr m_vram; required_ioport_array<12> m_io_keyboard; required_device m_banka; required_device m_bankb; diff --git a/src/mame/machine/vtech2.cpp b/src/mame/machine/vtech2.cpp index c83711b0f88..8b396dceccc 100644 --- a/src/mame/machine/vtech2.cpp +++ b/src/mame/machine/vtech2.cpp @@ -68,6 +68,29 @@ void vtech2_state::machine_reset() m_language = m_io_keyboard[5]->read() & 0x30; } +void vtech2_state::machine_start() +{ + save_item(NAME(m_laser_frame_message)); + save_item(NAME(m_laser_frame_time)); + save_item(NAME(m_laser_latch)); + save_item(NAME(m_laser_track_x2)); + save_item(NAME(m_laser_fdc_status)); + save_item(NAME(m_laser_fdc_data)); + save_item(NAME(m_laser_data)); + save_item(NAME(m_laser_fdc_edge)); + save_item(NAME(m_laser_fdc_bits)); + save_item(NAME(m_laser_drive)); + save_item(NAME(m_laser_fdc_start)); + save_item(NAME(m_laser_fdc_write)); + save_item(NAME(m_laser_fdc_offs)); + save_item(NAME(m_laser_fdc_latch)); + save_item(NAME(m_level_old)); + save_item(NAME(m_cassette_bit)); + save_item(NAME(m_laser_bg_mode)); + save_item(NAME(m_laser_two_color)); + save_item(NAME(m_language)); + save_item(NAME(m_cart_size)); +} uint8_t vtech2_state::cart_r(offs_t offset) { diff --git a/src/mame/video/vtech2.cpp b/src/mame/video/vtech2.cpp index c4328050b32..db400c8bc1d 100644 --- a/src/mame/video/vtech2.cpp +++ b/src/mame/video/vtech2.cpp @@ -112,9 +112,8 @@ static const int offs_0[96] = { 0x26a0,0x2ea0,0x36a0,0x3ea0,0x27a0,0x2fa0,0x37a0,0x3fa0 }; -uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t vtech2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t *videoram = m_videoram; int offs, x, y; int full_refresh = 1; int lang_offs = 0; @@ -146,7 +145,7 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code, color = m_laser_two_color; sy = BORDER_V/2 + y; sx = BORDER_H/2 + x * 8; - code = videoram[offs]; + code = m_vram[offs]; m_gfxdecode->gfx(2)->opaque(bitmap,cliprect,code,color,0,0,sx,sy); } } @@ -165,8 +164,8 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code, color; sy = BORDER_V/2 + y; sx = BORDER_H/2 + x * 16; - code = videoram[offs]; - color = videoram[offs+1]; + code = m_vram[offs]; + color = m_vram[offs+1]; m_gfxdecode->gfx(3)->opaque(bitmap,cliprect,code,color,0,0,sx,sy); } } @@ -185,7 +184,7 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code; sy = BORDER_V/2 + y; sx = BORDER_H/2 + x * 8; - code = videoram[offs]; + code = m_vram[offs]; m_gfxdecode->gfx(5)->opaque(bitmap,cliprect,code,0,0,0,sx,sy); } } @@ -205,7 +204,7 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code; sy = BORDER_V/2 + y * 2; sx = BORDER_H/2 + x * 8; - code = videoram[offs]; + code = m_vram[offs]; m_gfxdecode->gfx(6)->opaque(bitmap,cliprect,code,0,0,0,sx,sy); } } @@ -224,7 +223,7 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code, color = m_laser_two_color; sy = BORDER_V/2 + y; sx = BORDER_H/2 + x * 16; - code = videoram[offs]; + code = m_vram[offs]; m_gfxdecode->gfx(3)->opaque(bitmap,cliprect,code,color,0,0,sx,sy); } } @@ -243,8 +242,8 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code, color; sy = BORDER_V/2 + y; sx = BORDER_H/2 + x * 32; - code = videoram[offs]; - color = videoram[offs+1]; + code = m_vram[offs]; + color = m_vram[offs+1]; m_gfxdecode->gfx(4)->opaque(bitmap,cliprect,code,color,0,0,sx,sy); } } @@ -265,7 +264,7 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code, color = m_laser_two_color; sy = BORDER_V/2 + y * 8; sx = BORDER_H/2 + x * 8; - code = videoram[0x3800+offs] + lang_offs; + code = m_vram[0x3800+offs] + lang_offs; m_gfxdecode->gfx(0)->opaque(bitmap,cliprect,code,color,0,0,sx,sy); } } @@ -281,8 +280,8 @@ uint32_t vtech2_state::screen_update_laser(screen_device &screen, bitmap_ind16 & int sx, sy, code, color = 0; sy = BORDER_V/2 + y * 8; sx = BORDER_H/2 + x * 16; - code = videoram[0x3800+offs] + lang_offs; - color = videoram[0x3801+offs]; + code = m_vram[0x3800+offs] + lang_offs; + color = m_vram[0x3801+offs]; m_gfxdecode->gfx(1)->opaque(bitmap,cliprect,code,color,0,0,sx,sy); } }