primo: small cleanup

This commit is contained in:
Robbbert 2020-07-20 03:04:06 +10:00
parent 4088eb80cf
commit 381c38a848
6 changed files with 123 additions and 154 deletions

View File

@ -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")

View File

@ -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 )

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}