summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2020-07-20 03:04:06 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2020-07-20 03:04:06 +1000
commit381c38a848d29a3d09d94709fd285a6b56b930a5 (patch)
treec8268c638accd511cef98c37b10ec8a95634e80e
parent4088eb80cffa1d54d9a25a521a5b7c0e2377febf (diff)
primo: small cleanup
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/mame/drivers/primo.cpp99
-rw-r--r--src/mame/includes/primo.h59
-rw-r--r--src/mame/includes/ut88.h4
-rw-r--r--src/mame/machine/primo.cpp67
-rw-r--r--src/mame/video/primo.cpp47
6 files changed, 123 insertions, 154 deletions
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<cpu_device> m_maincpu;
required_device<cbm_iec_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<uint8_t> m_video_ram;
+ required_shared_ptr<uint8_t> 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;
-}