mirror of
https://github.com/holub/mame
synced 2025-04-19 07:00:31 +03:00
primo: small cleanup
This commit is contained in:
parent
4088eb80cf
commit
381c38a848
@ -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")
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user