From 381c38a848d29a3d09d94709fd285a6b56b930a5 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Mon, 20 Jul 2020 03:04:06 +1000 Subject: [PATCH] primo: small cleanup --- scripts/target/mame/mess.lua | 1 - src/mame/drivers/primo.cpp | 99 +++++++++++++++++++----------------- src/mame/includes/primo.h | 59 +++++++++++---------- src/mame/includes/ut88.h | 4 -- src/mame/machine/primo.cpp | 67 +++++++++++++++--------- src/mame/video/primo.cpp | 47 ----------------- 6 files changed, 123 insertions(+), 154 deletions(-) delete mode 100644 src/mame/video/primo.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 43aa781e636..a63b8dd25fd 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2833,7 +2833,6 @@ files { MAME_DIR .. "src/mame/drivers/primo.cpp", MAME_DIR .. "src/mame/includes/primo.h", MAME_DIR .. "src/mame/machine/primo.cpp", - MAME_DIR .. "src/mame/video/primo.cpp", } createMESSProjects(_target, _subtarget, "microsoft") diff --git a/src/mame/drivers/primo.cpp b/src/mame/drivers/primo.cpp index 0650e7a1c1f..65b9e2b44c9 100644 --- a/src/mame/drivers/primo.cpp +++ b/src/mame/drivers/primo.cpp @@ -104,6 +104,10 @@ I/O Ports: Interrupts: NMI - 20ms (50HZ), can be disbled/enabled by I/O write +ToDO: +- primoc64 works, but it seems it should be used with a commodore 64 + disk drive. This isn't emulated. + *******************************************************************************/ #include "emu.h" @@ -117,19 +121,19 @@ Interrupts: #include "formats/primoptp.h" -void primo_state::primoa_port(address_map &map) +void primo_state::primoa_io(address_map &map) { map.global_mask(0xff); - map(0x00, 0x3f).rw(FUNC(primo_state::primo_be_1_r), FUNC(primo_state::primo_ki_1_w)); - map(0xfd, 0xfd).w(FUNC(primo_state::primo_FD_w)); + map(0x00, 0x3f).rw(FUNC(primo_state::be_1_r), FUNC(primo_state::ki_1_w)); + map(0xfd, 0xfd).w(FUNC(primo_state::FD_w)); } -void primo_state::primob_port(address_map &map) +void primo_state::primob_io(address_map &map) { map.global_mask(0xff); - map(0x00, 0x3f).rw(FUNC(primo_state::primo_be_1_r), FUNC(primo_state::primo_ki_1_w)); - map(0x40, 0x7f).rw(FUNC(primo_state::primo_be_2_r), FUNC(primo_state::primo_ki_2_w)); - map(0xfd, 0xfd).w(FUNC(primo_state::primo_FD_w)); + map(0x00, 0x3f).rw(FUNC(primo_state::be_1_r), FUNC(primo_state::ki_1_w)); + map(0x40, 0x7f).rw(FUNC(primo_state::be_2_r), FUNC(primo_state::ki_2_w)); + map(0xfd, 0xfd).w(FUNC(primo_state::FD_w)); } void primo_state::primo32_mem(address_map &map) @@ -251,7 +255,7 @@ void primo_state::primoa32(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, 2500000); m_maincpu->set_addrmap(AS_PROGRAM, &primo_state::primo32_mem); - m_maincpu->set_addrmap(AS_IO, &primo_state::primoa_port); + m_maincpu->set_addrmap(AS_IO, &primo_state::primoa_io); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -259,7 +263,7 @@ void primo_state::primoa32(machine_config &config) m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ m_screen->set_size(256, 192); m_screen->set_visarea(0, 256-1, 0, 192-1); - m_screen->set_screen_update(FUNC(primo_state::screen_update_primo)); + m_screen->set_screen_update(FUNC(primo_state::screen_update)); m_screen->set_palette("palette"); m_screen->screen_vblank().set(FUNC(primo_state::vblank_irq)); @@ -302,7 +306,7 @@ void primo_state::primoa64(machine_config &config) void primo_state::primob32(machine_config &config) { primoa32(config); - m_maincpu->set_addrmap(AS_IO, &primo_state::primob_port); + m_maincpu->set_addrmap(AS_IO, &primo_state::primob_io); MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob) } @@ -310,7 +314,7 @@ void primo_state::primob32(machine_config &config) void primo_state::primob48(machine_config &config) { primoa48(config); - m_maincpu->set_addrmap(AS_IO, &primo_state::primob_port); + m_maincpu->set_addrmap(AS_IO, &primo_state::primob_io); MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob) } @@ -318,7 +322,7 @@ void primo_state::primob48(machine_config &config) void primo_state::primob64(machine_config &config) { primoa64(config); - m_maincpu->set_addrmap(AS_IO, &primo_state::primob_port); + m_maincpu->set_addrmap(AS_IO, &primo_state::primob_io); MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob) } @@ -326,67 +330,66 @@ void primo_state::primob64(machine_config &config) void primo_state::primoc64(machine_config &config) { primoa64(config); - m_maincpu->set_addrmap(AS_IO, &primo_state::primob_port); + m_maincpu->set_addrmap(AS_IO, &primo_state::primob_io); MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob) } ROM_START( primoa32 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "a32_1.rom", 0x10000, 0x1000, CRC(4e91c1a4) SHA1(bf6e41b6b36a2556a50065e9acfd8cd57968f039) ) - ROM_LOAD( "a32_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) ) - ROM_LOAD( "a32_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) ) - ROM_LOAD( "a32_4.rom", 0x13000, 0x1000, CRC(70f84bc8) SHA1(9ae1c06531edf20c14ba47e78c0747dd2a92612a) ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "a32_1.rom", 0x0000, 0x1000, CRC(4e91c1a4) SHA1(bf6e41b6b36a2556a50065e9acfd8cd57968f039) ) + ROM_LOAD( "a32_2.rom", 0x1000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) ) + ROM_LOAD( "a32_3.rom", 0x2000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) ) + ROM_LOAD( "a32_4.rom", 0x3000, 0x1000, CRC(70f84bc8) SHA1(9ae1c06531edf20c14ba47e78c0747dd2a92612a) ) ROM_END ROM_START( primoa48 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "a48_1.rom", 0x10000, 0x1000, CRC(7de6ad6f) SHA1(f2fd6fac4f9bc57c646efe40281758bb7c3f56e1) ) - ROM_LOAD( "a48_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) ) - ROM_LOAD( "a48_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) ) - ROM_LOAD( "a48_4.rom", 0x13000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "a48_1.rom", 0x0000, 0x1000, CRC(7de6ad6f) SHA1(f2fd6fac4f9bc57c646efe40281758bb7c3f56e1) ) + ROM_LOAD( "a48_2.rom", 0x1000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) ) + ROM_LOAD( "a48_3.rom", 0x2000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) ) + ROM_LOAD( "a48_4.rom", 0x3000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) ) ROM_END ROM_START( primoa64 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - ROM_SYSTEM_BIOS(0, "ver1", "ver 1") - ROM_LOAD( "a64_1.rom", 0x10000, 0x1000, CRC(6a7a9b9b) SHA1(e9ce16f90d9a799a26a9cef09d9ee6a6d7749484) ) - ROM_LOAD( "a64_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) ) - ROM_LOAD( "a64_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) ) - ROM_LOAD( "a64_4.rom", 0x13000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "a64_1.rom", 0x0000, 0x1000, CRC(6a7a9b9b) SHA1(e9ce16f90d9a799a26a9cef09d9ee6a6d7749484) ) + ROM_LOAD( "a64_2.rom", 0x1000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) ) + ROM_LOAD( "a64_3.rom", 0x2000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) ) + ROM_LOAD( "a64_4.rom", 0x3000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) ) ROM_END ROM_START( primob32 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "b32.rom", 0x10000, 0x4000, CRC(f594d2bb) SHA1(b74961dba008a1a6f15a22ddbd1b89acd7e286c2) ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "b32.rom", 0x0000, 0x4000, CRC(f594d2bb) SHA1(b74961dba008a1a6f15a22ddbd1b89acd7e286c2) ) ROM_END ROM_START( primob48 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "b48.rom", 0x10000, 0x4000, CRC(df3d2a57) SHA1(ab9413aa9d7749d30a486da00bc8c6d178a2172c) ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "b48.rom", 0x0000, 0x4000, CRC(df3d2a57) SHA1(ab9413aa9d7749d30a486da00bc8c6d178a2172c) ) ROM_END ROM_START( primob64 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x4000, "maincpu", 0 ) ROM_SYSTEM_BIOS(0, "standard", "Standard") - ROMX_LOAD( "b64.rom", 0x10000, 0x4000, CRC(cea28188) SHA1(a77e42e97402e601b78ab3751eac1e85d0bbb4a0), ROM_BIOS(0) ) + ROMX_LOAD( "b64.rom", 0x0000, 0x4000, CRC(cea28188) SHA1(a77e42e97402e601b78ab3751eac1e85d0bbb4a0), ROM_BIOS(0) ) ROM_SYSTEM_BIOS(1, "cdos", "CDOS") - ROMX_LOAD( "b64cdos.rom", 0x10000, 0x4000, CRC(73305e4d) SHA1(c090c3430cdf19eed8363377b981e1c21a4ed169), ROM_BIOS(1) ) + ROMX_LOAD( "b64cdos.rom", 0x0000, 0x4000, CRC(73305e4d) SHA1(c090c3430cdf19eed8363377b981e1c21a4ed169), ROM_BIOS(1) ) ROM_END ROM_START( primoc64 ) - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "c64_1.rom", 0x10000, 0x1000, CRC(c22290ea) SHA1(af5c73f6d0f7a987c4f082a5cb69e3f016127d57) ) - ROM_LOAD( "c64_2.rom", 0x11000, 0x1000, CRC(0756b56e) SHA1(589dbdb7c43ca7ca29ed1e56e080adf8c069e407) ) - ROM_LOAD( "c64_3.rom", 0x12000, 0x1000, CRC(fc56e0af) SHA1(b547fd270d3413400bc800f5b7ea9153b7a59bff) ) - ROM_LOAD( "c64_4.rom", 0x13000, 0x1000, CRC(3770e3e6) SHA1(792cc71d8f89eb447f94aded5afc70d626a26030) ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "c64_1.rom", 0x0000, 0x1000, CRC(c22290ea) SHA1(af5c73f6d0f7a987c4f082a5cb69e3f016127d57) ) + ROM_LOAD( "c64_2.rom", 0x1000, 0x1000, CRC(0756b56e) SHA1(589dbdb7c43ca7ca29ed1e56e080adf8c069e407) ) + ROM_LOAD( "c64_3.rom", 0x2000, 0x1000, CRC(fc56e0af) SHA1(b547fd270d3413400bc800f5b7ea9153b7a59bff) ) + ROM_LOAD( "c64_4.rom", 0x3000, 0x1000, CRC(3770e3e6) SHA1(792cc71d8f89eb447f94aded5afc70d626a26030) ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1984, primoa32, 0, 0, primoa32, primo, primo_state, init_primo, "Microkey", "Primo A-32", 0 ) -COMP( 1984, primoa48, primoa32, 0, primoa48, primo, primo_state, init_primo, "Microkey", "Primo A-48", 0 ) -COMP( 1984, primoa64, primoa32, 0, primoa64, primo, primo_state, init_primo, "Microkey", "Primo A-64", 0 ) -COMP( 1984, primob32, primoa32, 0, primob32, primo, primo_state, init_primo, "Microkey", "Primo B-32", 0 ) -COMP( 1984, primob48, primoa32, 0, primob48, primo, primo_state, init_primo, "Microkey", "Primo B-48", 0 ) -COMP( 1984, primob64, primoa32, 0, primob64, primo, primo_state, init_primo, "Microkey", "Primo B-64", 0 ) -COMP( 1984, primoc64, primoa32, 0, primoc64, primo, primo_state, init_primo, "Microkey", "Primo C-64", MACHINE_NOT_WORKING ) +COMP( 1984, primoa32, 0, 0, primoa32, primo, primo_state, init_primo, "Microkey", "Primo A-32", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, primoa48, primoa32, 0, primoa48, primo, primo_state, init_primo, "Microkey", "Primo A-48", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, primoa64, primoa32, 0, primoa64, primo, primo_state, init_primo, "Microkey", "Primo A-64", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, primob32, primoa32, 0, primob32, primo, primo_state, init_primo, "Microkey", "Primo B-32", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, primob48, primoa32, 0, primob48, primo, primo_state, init_primo, "Microkey", "Primo B-48", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, primob64, primoa32, 0, primob64, primo, primo_state, init_primo, "Microkey", "Primo B-64", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, primoc64, primoa32, 0, primoc64, primo, primo_state, init_primo, "Microkey", "Primo C-64", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/primo.h b/src/mame/includes/primo.h index d1590faa669..127e492b1bd 100644 --- a/src/mame/includes/primo.h +++ b/src/mame/includes/primo.h @@ -23,20 +23,20 @@ class primo_state : public driver_device { public: - primo_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_iec(*this, CBM_IEC_TAG), - m_speaker(*this, "speaker"), - m_cassette(*this, "cassette"), - m_cart1(*this, "cartslot1"), - m_cart2(*this, "cartslot2"), - m_screen(*this, "screen"), - m_mem_exp_port(*this, "MEMORY_EXPANSION"), - m_clock_port(*this, "CPU_CLOCK"), - m_keyboard_port(*this, "IN%u", 0U), - m_reset_port(*this, "RESET"), - m_video_ram(*this, "videoram") + primo_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_iec(*this, CBM_IEC_TAG) + , m_speaker(*this, "speaker") + , m_cassette(*this, "cassette") + , m_cart1(*this, "cartslot1") + , m_cart2(*this, "cartslot2") + , m_screen(*this, "screen") + , m_mem_exp_port(*this, "MEMORY_EXPANSION") + , m_clock_port(*this, "CPU_CLOCK") + , m_keyboard_port(*this, "IN%u", 0U) + , m_reset_port(*this, "RESET") + , m_vram(*this, "videoram") { } void init_primo(); @@ -50,29 +50,28 @@ public: void primoa48(machine_config &config); private: - uint8_t primo_be_1_r(offs_t offset); - uint8_t primo_be_2_r(); - void primo_ki_1_w(uint8_t data); - void primo_ki_2_w(uint8_t data); - void primo_FD_w(uint8_t data); - virtual void machine_reset() override; - virtual void machine_start() override; + uint8_t be_1_r(offs_t offset); + uint8_t be_2_r(); + void ki_1_w(uint8_t data); + void ki_2_w(uint8_t data); + void FD_w(uint8_t data); + void machine_reset() override; + void machine_start() override; DECLARE_MACHINE_RESET(primob); - uint32_t screen_update_primo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_irq); - void primo_draw_scanline(bitmap_ind16 &bitmap, int primo_scanline); - void primo_update_memory(); - void primo_common_machine_init(); - void primo_setup_pss(uint8_t* snapshot_data, uint32_t snapshot_size); - void primo_setup_pp(uint8_t* quickload_data, uint32_t quickload_size); + void update_memory(); + void common_machine_init(); + void setup_pss(uint8_t* snapshot_data, uint32_t snapshot_size); + void setup_pp(uint8_t* quickload_data, uint32_t quickload_size); DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb); DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); void primo32_mem(address_map &map); void primo48_mem(address_map &map); void primo64_mem(address_map &map); - void primoa_port(address_map &map); - void primob_port(address_map &map); + void primoa_io(address_map &map); + void primob_io(address_map &map); required_device m_maincpu; required_device m_iec; @@ -85,7 +84,7 @@ private: required_ioport m_clock_port; required_ioport_array<4> m_keyboard_port; required_ioport m_reset_port; - required_shared_ptr m_video_ram; + required_shared_ptr m_vram; memory_region *m_cart1_rom; memory_region *m_cart2_rom; diff --git a/src/mame/includes/ut88.h b/src/mame/includes/ut88.h index 1d641467e02..8b7c2a85824 100644 --- a/src/mame/includes/ut88.h +++ b/src/mame/includes/ut88.h @@ -127,9 +127,5 @@ private: output_finder<6> m_digits; }; -/*----------- defined in video/ut88.c -----------*/ - -extern const gfx_layout ut88_charlayout; - #endif // MAME_INCLUDES_UT88_H diff --git a/src/mame/machine/primo.cpp b/src/mame/machine/primo.cpp index f3d512baa21..6c76a961e6d 100644 --- a/src/mame/machine/primo.cpp +++ b/src/mame/machine/primo.cpp @@ -39,14 +39,14 @@ WRITE_LINE_MEMBER(primo_state::vblank_irq) *******************************************************************************/ -void primo_state::primo_update_memory() +void primo_state::update_memory() { address_space& space = m_maincpu->space(AS_PROGRAM); switch (m_port_FD & 0x03) { case 0x00: /* Original ROM */ space.unmap_write(0x0000, 0x3fff); - membank("bank1")->set_base(memregion("maincpu")->base() + 0x10000); + membank("bank1")->set_base(memregion("maincpu")->base()); break; case 0x01: /* EPROM extension 1 */ space.unmap_write(0x0000, 0x3fff); @@ -70,7 +70,7 @@ void primo_state::primo_update_memory() *******************************************************************************/ -uint8_t primo_state::primo_be_1_r(offs_t offset) +uint8_t primo_state::be_1_r(offs_t offset) { uint8_t data = 0x00; @@ -95,7 +95,7 @@ uint8_t primo_state::primo_be_1_r(offs_t offset) return data; } -uint8_t primo_state::primo_be_2_r() +uint8_t primo_state::be_2_r() { uint8_t data = 0xff; @@ -125,7 +125,7 @@ uint8_t primo_state::primo_be_2_r() return data; } -void primo_state::primo_ki_1_w(uint8_t data) +void primo_state::ki_1_w(uint8_t data) { // bit 7 - NMI generator enable/disable m_nmi = BIT(data, 7); @@ -161,7 +161,7 @@ void primo_state::primo_ki_1_w(uint8_t data) } } -void primo_state::primo_ki_2_w(uint8_t data) +void primo_state::ki_2_w(uint8_t data) { // bit 7, 6 - not used @@ -184,12 +184,12 @@ void primo_state::primo_ki_2_w(uint8_t data) // logerror ("IOW KI-2 data:%02x\n", data); } -void primo_state::primo_FD_w(uint8_t data) +void primo_state::FD_w(uint8_t data) { if (!m_mem_exp_port->read()) { m_port_FD = data; - primo_update_memory(); + update_memory(); } } @@ -211,16 +211,20 @@ void primo_state::init_primo() *******************************************************************************/ -void primo_state::primo_common_machine_init() +void primo_state::common_machine_init() { if (m_mem_exp_port->read()) m_port_FD = 0x00; - primo_update_memory(); + update_memory(); m_maincpu->set_clock_scale(m_clock_port->read() ? 1.5 : 1.0); } void primo_state::machine_start() { + save_item(NAME(m_video_memory_base)); + save_item(NAME(m_port_FD)); + save_item(NAME(m_nmi)); + std::string region_tag; m_cart1_rom = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); m_cart2_rom = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); @@ -228,12 +232,12 @@ void primo_state::machine_start() void primo_state::machine_reset() { - primo_common_machine_init(); + common_machine_init(); } MACHINE_RESET_MEMBER(primo_state,primob) { - primo_common_machine_init(); + common_machine_init(); //removed cbm_drive_0_config(SERIAL, 8); //removed cbm_drive_1_config(SERIAL, 9); @@ -245,7 +249,7 @@ MACHINE_RESET_MEMBER(primo_state,primob) *******************************************************************************/ -void primo_state::primo_setup_pss (uint8_t* snapshot_data, uint32_t snapshot_size) +void primo_state::setup_pss (uint8_t* snapshot_data, uint32_t snapshot_size) { /* Z80 registers */ m_maincpu->set_state_int(Z80_BC, snapshot_data[4] + snapshot_data[5]*256); @@ -272,9 +276,8 @@ void primo_state::primo_setup_pss (uint8_t* snapshot_data, uint32_t snapshot_siz // KI-1 bit 4 - speaker m_speaker->level_w(BIT(snapshot_data[30], 4)); - /* memory */ - for (int i = 0; i < 0xc000; i++) + for (u16 i = 0; i < 0xc000; i++) m_maincpu->space(AS_PROGRAM).write_byte(i + 0x4000, snapshot_data[i + 38]); } @@ -292,7 +295,7 @@ SNAPSHOT_LOAD_MEMBER(primo_state::snapshot_cb) return image_init_result::FAIL; } - primo_setup_pss(&snapshot_data[0], snapshot_size); + setup_pss(&snapshot_data[0], snapshot_size); return image_init_result::PASS; } @@ -304,15 +307,12 @@ SNAPSHOT_LOAD_MEMBER(primo_state::snapshot_cb) *******************************************************************************/ -void primo_state::primo_setup_pp(uint8_t* quickload_data, uint32_t quickload_size) +void primo_state::setup_pp(uint8_t* quickload_data, uint32_t quickload_size) { - uint16_t load_addr; - uint16_t start_addr; + u16 load_addr = quickload_data[0] + quickload_data[1]*256; + u16 start_addr = quickload_data[2] + quickload_data[3]*256; - load_addr = quickload_data[0] + quickload_data[1]*256; - start_addr = quickload_data[2] + quickload_data[3]*256; - - for (int i = 4; i < quickload_size; i++) + for (u32 i = 4; i < quickload_size; i++) m_maincpu->space(AS_PROGRAM).write_byte(start_addr+i-4, quickload_data[i]); m_maincpu->set_state_int(Z80_PC, start_addr); @@ -329,7 +329,26 @@ QUICKLOAD_LOAD_MEMBER(primo_state::quickload_cb) return image_init_result::FAIL; } - primo_setup_pp(&quickload_data[0], quickload_size); + setup_pp(&quickload_data[0], quickload_size); return image_init_result::PASS; } + +u32 primo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + u32 ma = m_video_memory_base; + + for (u8 y = 0; y < 192; y++) + { + u16 *p = &bitmap.pix16(y); + for (u16 x = 0; x < 32; x++) + { + u8 data = m_vram[ma+x]; + for (u8 i = 0; i < 8; i++) + *p++ = BIT(data, i^7); + } + ma += 32; + } + return 0; +} + diff --git a/src/mame/video/primo.cpp b/src/mame/video/primo.cpp deleted file mode 100644 index 3d06d26fe8f..00000000000 --- a/src/mame/video/primo.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Krzysztof Strzecha -/*************************************************************************** - - primo.c - - Functions to emulate the video hardware of Primo. - - Krzysztof Strzecha - -***************************************************************************/ - -#include "emu.h" -#include "includes/primo.h" - - - -void primo_state::primo_draw_scanline(bitmap_ind16 &bitmap, int primo_scanline) -{ - int x, i; - uint8_t data; - - /* set up scanline */ - uint16_t *scanline = &bitmap.pix16(primo_scanline); - - /* address of current line in Primo video memory */ - const uint8_t* primo_video_ram_line = &m_video_ram[m_video_memory_base + 32 * primo_scanline]; - - for (x=0; x<256; x+=8) - { - data = primo_video_ram_line[x/8]; - - for (i=0; i<8; i++) - scanline[x+i]=(data & (0x80>>i)) ? 1 : 0; - - } -} - - -uint32_t primo_state::screen_update_primo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int primo_scanline; - - for (primo_scanline=0; primo_scanline<192; primo_scanline++) - primo_draw_scanline( bitmap, primo_scanline); - return 0; -}