From 6ac207fdc51315017c3b5aaadf2505e7664929ec Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sun, 7 Jun 2020 02:44:31 +1000 Subject: (nw) proteus3: cleaned --- src/mame/drivers/proteus3.cpp | 97 +++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 44 deletions(-) diff --git a/src/mame/drivers/proteus3.cpp b/src/mame/drivers/proteus3.cpp index 78423a28ea8..5717d4125f9 100644 --- a/src/mame/drivers/proteus3.cpp +++ b/src/mame/drivers/proteus3.cpp @@ -67,7 +67,6 @@ public: proteus3_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_p_videoram(*this, "vram") , m_p_chargen(*this, "chargen") , m_pia(*this, "pia") , m_brg(*this, "brg") @@ -81,11 +80,11 @@ public: private: DECLARE_WRITE_LINE_MEMBER(ca2_w); - void video_w(uint8_t data); + void video_w(u8 data); void kbd_put(u8 data); DECLARE_WRITE_LINE_MEMBER(acia1_clock_w); TIMER_DEVICE_CALLBACK_MEMBER(kansas_r); - uint32_t screen_update_proteus3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_proteus3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); // Clocks void write_acia_clocks(int id, int state); @@ -105,16 +104,17 @@ private: DECLARE_WRITE_LINE_MEMBER (write_f14_clock){ write_acia_clocks(mc14411_device::TIMER_F14, state); } DECLARE_WRITE_LINE_MEMBER (write_f15_clock){ write_acia_clocks(mc14411_device::TIMER_F15, state); } - void proteus3_mem(address_map &map); + void mem_map(address_map &map); - uint8_t m_video_data; - uint8_t m_flashcnt; - uint16_t m_curs_pos; - uint8_t m_cass_data[4]; - bool m_cassbit, m_cassold, m_cassinbit; virtual void machine_reset() override; + virtual void machine_start() override; + u8 m_video_data; + u8 m_flashcnt; + u16 m_curs_pos; + u8 m_cass_data[4]; + bool m_cassbit, m_cassold, m_cassinbit; + std::unique_ptr m_vram; required_device m_maincpu; - required_region_ptr m_p_videoram; required_region_ptr m_p_chargen; required_device m_pia; required_device m_brg; @@ -133,14 +133,14 @@ private: Address Maps ******************************************************************************/ -void proteus3_state::proteus3_mem(address_map &map) +void proteus3_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x7fff).ram(); map(0x8004, 0x8007).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0x8008, 0x8009).rw(m_acia1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // cassette map(0x8010, 0x8011).rw(m_acia2, FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // serial keyboard 7E2 (never writes data) - map(0xc000, 0xffff).rom(); + map(0xc000, 0xffff).rom().region("maincpu", 0); } @@ -206,7 +206,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( proteus3_state::kansas_r ) } /* cassette - turn 1200/2400Hz to a bit */ - uint8_t cass_ws = (m_cass->input() > +0.04) ? 1 : 0; + u8 cass_ws = (m_cass->input() > +0.04) ? 1 : 0; if (cass_ws != m_cass_data[0]) { @@ -248,7 +248,7 @@ WRITE_LINE_MEMBER( proteus3_state::acia1_clock_w ) /****************************************************************************** Video ******************************************************************************/ -void proteus3_state::video_w(uint8_t data) +void proteus3_state::video_w(u8 data) { m_video_data = data; } @@ -262,8 +262,8 @@ WRITE_LINE_MEMBER( proteus3_state::ca2_w ) case 0x0a: // Line Feed if (m_curs_pos > 959) // on bottom line? { - memmove(m_p_videoram, m_p_videoram+64, 960); // scroll - memset(m_p_videoram+960, 0x20, 64); // blank bottom line + memmove(m_vram.get(), m_vram.get()+64, 960); // scroll + memset(m_vram.get()+960, 0x20, 64); // blank bottom line } else m_curs_pos += 64; @@ -273,49 +273,49 @@ WRITE_LINE_MEMBER( proteus3_state::ca2_w ) break; case 0x0c: // CLS m_curs_pos = 0; // home cursor - memset(m_p_videoram, 0x20, 1024); // clear screen + memset(m_vram.get(), 0x20, 1024); // clear screen break; case 0x0f: // Cursor Left if (m_curs_pos) m_curs_pos--; break; case 0x7f: // Erase character under cursor - m_p_videoram[m_curs_pos] = 0x20; + m_vram[m_curs_pos] = 0x20; break; default: // If a displayable character, show it if ((m_video_data > 0x1f) && (m_video_data < 0x7f)) { - m_p_videoram[m_curs_pos] = m_video_data; + m_vram[m_curs_pos] = m_video_data; m_curs_pos++; if (m_curs_pos > 1023) // have we run off the bottom? { m_curs_pos -= 64; - memmove(m_p_videoram, m_p_videoram+64, 960); // scroll - memset(m_p_videoram+960, 0x20, 64); // blank bottom line + memmove(m_vram.get(), m_vram.get()+64, 960); // scroll + memset(m_vram.get()+960, 0x20, 64); // blank bottom line } } } } } -uint32_t proteus3_state::screen_update_proteus3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 proteus3_state::screen_update_proteus3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t y,ra,chr,gfx; - uint16_t sy=0,ma=0,x; + u8 y,ra,chr,gfx; + u16 sy=0,ma=0,x; m_flashcnt++; for(y = 0; y < 16; y++ ) { for (ra = 0; ra < 12; ra++) { - uint16_t *p = &bitmap.pix16(sy++); + u16 *p = &bitmap.pix16(sy++); for (x = ma; x < ma + 64; x++) { gfx = 0; if (ra < 8) { - chr = m_p_videoram[x]; // get char in videoram + chr = m_vram[x]; // get char in videoram gfx = m_p_chargen[(chr<<3) | ra]; // get dot pattern in chargen } else @@ -376,6 +376,18 @@ void proteus3_state::machine_reset() m_brg->timer_enable( mc14411_device::TIMER_F8, true); // Cassette interface } +void proteus3_state::machine_start() +{ + m_vram = make_unique_clear(0x0400); + save_pointer(NAME(m_vram), 0x0400); + save_item(NAME(m_video_data)); + save_item(NAME(m_flashcnt)); + save_item(NAME(m_curs_pos)); + save_item(NAME(m_cass_data)); + save_item(NAME(m_cassbit)); + save_item(NAME(m_cassold)); + save_item(NAME(m_cassinbit)); +} /****************************************************************************** Machine Drivers @@ -385,7 +397,7 @@ void proteus3_state::proteus3(machine_config &config) { /* basic machine hardware */ M6800(config, m_maincpu, XTAL(3'579'545)); /* Divided by 4 internally */ - m_maincpu->set_addrmap(AS_PROGRAM, &proteus3_state::proteus3_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &proteus3_state::mem_map); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -453,33 +465,30 @@ void proteus3_state::proteus3(machine_config &config) ******************************************************************************/ ROM_START(proteus3) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION(0x4000, "maincpu", ROMREGION_ERASE00) // if c000 isn't 0 it assumes a rom is there and jumps to it ROM_SYSTEM_BIOS( 0, "14k", "14k BASIC") - ROMX_LOAD( "bas1.bin", 0xc800, 0x0800, CRC(016bf2d6) SHA1(89605dbede3b6fd101ee0548e5c545a0824fcfd3), ROM_BIOS(0) ) - ROMX_LOAD( "bas2.bin", 0xd000, 0x0800, CRC(39d3e543) SHA1(dd0fe220e3c2a48ce84936301311cbe9f1597ca7), ROM_BIOS(0) ) - ROMX_LOAD( "bas3.bin", 0xd800, 0x0800, CRC(3a41617d) SHA1(175406f4732389e226bc50d27ada39e6ea48de34), ROM_BIOS(0) ) - ROMX_LOAD( "bas4.bin", 0xe000, 0x0800, CRC(ee9d77ee) SHA1(f7e60a1ab88a3accc8ffdc545657c071934d09d2), ROM_BIOS(0) ) - ROMX_LOAD( "bas5.bin", 0xe800, 0x0800, CRC(bd81bb34) SHA1(6325735e5750a9536e63b67048f74711fae1fa42), ROM_BIOS(0) ) - ROMX_LOAD( "bas6.bin", 0xf000, 0x0800, CRC(60cd006b) SHA1(28354f78490da1eb5116cbbc43eaca0670f7f398), ROM_BIOS(0) ) - ROMX_LOAD( "bas7.bin", 0xf800, 0x0800, CRC(84c3dc22) SHA1(8fddba61b5f0270ca2daef32ab5edfd60300c776), ROM_BIOS(0) ) - ROM_FILL( 0xc000, 1, 0x00 ) // if c000 isn't 0 it assumes a rom is there and jumps to it + ROMX_LOAD( "bas1.bin", 0x0800, 0x0800, CRC(016bf2d6) SHA1(89605dbede3b6fd101ee0548e5c545a0824fcfd3), ROM_BIOS(0) ) + ROMX_LOAD( "bas2.bin", 0x1000, 0x0800, CRC(39d3e543) SHA1(dd0fe220e3c2a48ce84936301311cbe9f1597ca7), ROM_BIOS(0) ) + ROMX_LOAD( "bas3.bin", 0x1800, 0x0800, CRC(3a41617d) SHA1(175406f4732389e226bc50d27ada39e6ea48de34), ROM_BIOS(0) ) + ROMX_LOAD( "bas4.bin", 0x2000, 0x0800, CRC(ee9d77ee) SHA1(f7e60a1ab88a3accc8ffdc545657c071934d09d2), ROM_BIOS(0) ) + ROMX_LOAD( "bas5.bin", 0x2800, 0x0800, CRC(bd81bb34) SHA1(6325735e5750a9536e63b67048f74711fae1fa42), ROM_BIOS(0) ) + ROMX_LOAD( "bas6.bin", 0x3000, 0x0800, CRC(60cd006b) SHA1(28354f78490da1eb5116cbbc43eaca0670f7f398), ROM_BIOS(0) ) + ROMX_LOAD( "bas7.bin", 0x3800, 0x0800, CRC(84c3dc22) SHA1(8fddba61b5f0270ca2daef32ab5edfd60300c776), ROM_BIOS(0) ) ROM_SYSTEM_BIOS( 1, "8k", "8k BASIC") - ROMX_LOAD( "proteus3_basic8k.m0", 0xe000, 0x2000, CRC(7d9111c2) SHA1(3c032c9c7f87d22a1a9819b3b812be84404d2ad2), ROM_BIOS(1) ) - ROM_RELOAD( 0xc000, 0x2000 ) + ROMX_LOAD( "proteus3_basic8k.m0", 0x2000, 0x2000, CRC(7d9111c2) SHA1(3c032c9c7f87d22a1a9819b3b812be84404d2ad2), ROM_BIOS(1) ) + ROM_RELOAD( 0x0000, 0x2000 ) ROM_SYSTEM_BIOS( 2, "8kms", "8k Micro-Systemes BASIC") - ROMX_LOAD( "ms1_basic8k.bin", 0xe000, 0x2000, CRC(b5476e28) SHA1(c8c2366d549b2645c740be4ab4237e05c3cab4a9), ROM_BIOS(2) ) - ROM_RELOAD( 0xc000, 0x2000 ) + ROMX_LOAD( "ms1_basic8k.bin", 0x2000, 0x2000, CRC(b5476e28) SHA1(c8c2366d549b2645c740be4ab4237e05c3cab4a9), ROM_BIOS(2) ) + ROM_RELOAD( 0x0000, 0x2000 ) - ROM_REGION(0x400, "chargen", 0) + ROM_REGION(0x0400, "chargen", 0) ROM_LOAD( "proteus3_font.m25", 0x0200, 0x0100, CRC(6a3a30a5) SHA1(ab39bf09722928483e497b87ac2dbd870828893b) ) ROM_CONTINUE( 0x100, 0x100 ) ROM_CONTINUE( 0x300, 0x100 ) ROM_CONTINUE( 0x000, 0x100 ) - ROM_REGION(0x400, "vram", ROMREGION_ERASE00) - ROM_REGION(0x0800, "user1", 0) // roms not used yet // Proteus III - pbug F800-FFFF, expects RAM at F000-F7FF ROM_LOAD( "proteus3_pbug.bin", 0x0000, 0x0800, CRC(1118694d) SHA1(2dfc08d405e8f2936f5b0bd1c4007995151abbba) ) @@ -491,4 +500,4 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1978, proteus3, 0, 0, proteus3, proteus3, proteus3_state, empty_init, "Proteus International", "Proteus III", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1978, proteus3, 0, 0, proteus3, proteus3, proteus3_state, empty_init, "Proteus International", "Proteus III", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3