sapi,homez80,dms5000,bob85,a7150: minor cleanup

This commit is contained in:
Robbbert 2020-07-18 16:34:08 +10:00
parent 36efc0599b
commit 28c22e101a
5 changed files with 143 additions and 127 deletions

View File

@ -2,20 +2,23 @@
// copyright-holders:Miodrag Milanovic, Sergey Svishchev
/***************************************************************************
Robotron A7150
Robotron A7150
04/10/2009 Skeleton driver.
2009-10-04 Skeleton driver.
http://www.robotrontechnik.de/index.htm?/html/computer/a7150.htm
http://www.robotrontechnik.de/index.htm?/html/computer/a7150.htm
http://www.tiffe.de/Robotron/MMS16/
- Confidence test is documented in A7150_Rechner...pdf, pp. 112-119
- Internal test of KGS -- in KGS-K7070.pdf, pp. 19-23
http://www.tiffe.de/Robotron/MMS16/
- Confidence test is documented in A7150_Rechner...pdf, pp. 112-119
- Internal test of KGS -- in KGS-K7070.pdf, pp. 19-23
To do:
- MMS16 (Multibus clone) and slot devices
- native keyboard
- A7100 model
After about a minute, the self-test will appear.
To do:
- Machine hangs when screen should scroll
- MMS16 (Multibus clone) and slot devices
- native keyboard
- A7100 model
****************************************************************************/
@ -109,8 +112,8 @@ private:
required_device<address_map_bank_device> m_video_bankdev;
required_device<palette_device> m_palette;
void a7150_io(address_map &map);
void a7150_mem(address_map &map);
void io_map(address_map &map);
void mem_map(address_map &map);
void k7070_cpu_banked(address_map &map);
void k7070_cpu_io(address_map &map);
void k7070_cpu_mem(address_map &map);
@ -313,14 +316,14 @@ void a7150_state::a7150_kgs_w(offs_t offset, uint8_t data)
}
void a7150_state::a7150_mem(address_map &map)
void a7150_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x00000, 0xf7fff).ram();
map(0xf8000, 0xfffff).rom().region("user1", 0);
map(0xf8000, 0xfffff).rom().region("maincpu", 0);
}
void a7150_state::a7150_io(address_map &map)
void a7150_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x004a, 0x004a).w("isbc_215g", FUNC(isbc_215g_device::write)); // KES board
@ -448,6 +451,12 @@ void a7150_state::machine_reset()
void a7150_state::machine_start()
{
save_item(NAME(m_kgs_msel));
save_item(NAME(m_kgs_iml));
save_item(NAME(m_kgs_datao));
save_item(NAME(m_kgs_datai));
save_item(NAME(m_kgs_ctrl));
save_item(NAME(m_ifss_loopback));
}
static const z80_daisy_config k7070_daisy_chain[] =
@ -469,8 +478,8 @@ static const z80_daisy_config k7070_daisy_chain[] =
void a7150_state::a7150(machine_config &config)
{
I8086(config, m_maincpu, XTAL(9'832'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &a7150_state::a7150_mem);
m_maincpu->set_addrmap(AS_IO, &a7150_state::a7150_io);
m_maincpu->set_addrmap(AS_PROGRAM, &a7150_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &a7150_state::io_map);
m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb));
m_maincpu->esc_opcode_handler().set("i8087", FUNC(i8087_device::insn_w));
m_maincpu->esc_data_handler().set("i8087", FUNC(i8087_device::addr_w));
@ -567,7 +576,7 @@ void a7150_state::a7150(machine_config &config)
/* ROM definition */
ROM_START( a7150 )
ROM_REGION16_LE( 0x10000, "user1", ROMREGION_ERASEFF )
ROM_REGION16_LE( 0x8000, "maincpu", 0 )
ROM_DEFAULT_BIOS("2.3")
// A7100
@ -596,7 +605,7 @@ ROM_START( a7150 )
ROMX_LOAD("275.rom", 0x4000, 0x2000, CRC(0da54426) SHA1(7492caff98b1d1a896c5964942b17beadf996b60), ROM_BIOS(3) | ROM_SKIP(1))
ROMX_LOAD("276.rom", 0x0000, 0x2000, CRC(5924192a) SHA1(eb494d9f96a0b3ea69f4b9cb2b7add66a8c16946), ROM_BIOS(3) | ROM_SKIP(1))
ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF )
ROM_REGION( 0x2000, "user2", ROMREGION_ERASEFF )
// ROM from A7100
ROM_LOAD( "kgs7070-152.bin", 0x0000, 0x2000, CRC(403f4235) SHA1(d07ccd40f8b600651d513f588bcf1ea4f15ed094))
// ROM_LOAD( "kgs7070-153.rom", 0x0000, 0x2000, CRC(a72fe820) SHA1(4b77ab2b59ea8c3632986847ff359df26b16196b))
@ -606,4 +615,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1986, a7150, 0, 0, a7150, a7150, a7150_state, empty_init, "VEB Robotron", "A7150", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
COMP( 1986, a7150, 0, 0, a7150, a7150, a7150_state, empty_init, "VEB Robotron", "A7150", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -46,8 +46,8 @@ public:
void bob85(machine_config &config);
private:
void bob85_io(address_map &map);
void bob85_mem(address_map &map);
void io_map(address_map &map);
void mem_map(address_map &map);
uint8_t bob85_keyboard_r();
void bob85_7seg_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(sod_w);
@ -57,8 +57,7 @@ private:
uint8_t m_count_key;
u16 m_casscnt;
bool m_cassold, m_cassbit;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
void machine_start() override;
required_device<i8085a_cpu_device> m_maincpu;
required_device<cassette_image_device> m_cass;
required_ioport m_line0;
@ -145,14 +144,14 @@ void bob85_state::bob85_7seg_w(offs_t offset, uint8_t data)
m_digits[offset] = bitswap<8>( data,3,2,1,0,7,6,5,4 );
}
void bob85_state::bob85_mem(address_map &map)
void bob85_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x02ff).rom();
map(0x0600, 0x09ff).ram();
}
void bob85_state::bob85_io(address_map &map)
void bob85_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x0a, 0x0a).r(FUNC(bob85_state::bob85_keyboard_r));
@ -191,8 +190,14 @@ static INPUT_PORTS_START( bob85 )
PORT_BIT(0xC0, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
void bob85_state::machine_reset()
void bob85_state::machine_start()
{
m_digits.resolve();
save_item(NAME(m_prev_key));
save_item(NAME(m_count_key));
save_item(NAME(m_casscnt));
save_item(NAME(m_cassold));
save_item(NAME(m_cassbit));
}
TIMER_DEVICE_CALLBACK_MEMBER( bob85_state::kansas_r )
@ -229,8 +234,8 @@ void bob85_state::bob85(machine_config &config)
{
/* basic machine hardware */
I8085A(config, m_maincpu, XTAL(5'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &bob85_state::bob85_mem);
m_maincpu->set_addrmap(AS_IO, &bob85_state::bob85_io);
m_maincpu->set_addrmap(AS_PROGRAM, &bob85_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &bob85_state::io_map);
m_maincpu->in_sid_func().set(FUNC(bob85_state::sid_r));
m_maincpu->out_sod_func().set(FUNC(bob85_state::sod_w));
@ -247,11 +252,11 @@ void bob85_state::bob85(machine_config &config)
/* ROM definition */
ROM_START( bob85 )
ROM_REGION( 0x600, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x0300, "maincpu", 0 )
ROM_LOAD( "bob85.rom", 0x0000, 0x0300, BAD_DUMP CRC(adde33a8) SHA1(00f26dd0c52005e7705e6cc9cb11a20e572682c6) ) // should be 6 separate 74S287's (256x4)
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1984, bob85, 0, 0, bob85, bob85, bob85_state, empty_init, "Josef Kratochvil", "BOB-85", MACHINE_NO_SOUND_HW)
COMP( 1984, bob85, 0, 0, bob85, bob85, bob85_state, empty_init, "Josef Kratochvil", "BOB-85", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )

View File

@ -2,9 +2,9 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
Digital Microsystems DMS-5000
Digital Microsystems DMS-5000
11/01/2010 Skeleton driver.
2010-01-11 Skeleton driver.
****************************************************************************/
@ -30,11 +30,9 @@ public:
private:
uint8_t status_r(offs_t offset);
void brightness_w(uint8_t data);
virtual void machine_reset() override;
virtual void video_start() override;
uint32_t screen_update_dms5000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void dms5000_io(address_map &map);
void dms5000_mem(address_map &map);
void io_map(address_map &map);
void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
@ -60,15 +58,15 @@ void dms5000_state::brightness_w(uint8_t data)
{
}
void dms5000_state::dms5000_mem(address_map &map)
void dms5000_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x00000, 0x1ffff).ram();
map(0x40000, 0x4ffff).ram();
map(0xfc000, 0xfffff).rom().region("user1", 0);
map(0xfc000, 0xfffff).rom().region("maincpu", 0);
}
void dms5000_state::dms5000_io(address_map &map)
void dms5000_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x20, 0x2f).r(FUNC(dms5000_state::status_r)).umask16(0xff00);
@ -81,14 +79,6 @@ static INPUT_PORTS_START( dms5000 )
INPUT_PORTS_END
void dms5000_state::machine_reset()
{
}
void dms5000_state::video_start()
{
}
uint32_t dms5000_state::screen_update_dms5000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
@ -98,8 +88,8 @@ void dms5000_state::dms5000(machine_config &config)
{
/* basic machine hardware */
I8086(config, m_maincpu, XTAL(9'830'400));
m_maincpu->set_addrmap(AS_PROGRAM, &dms5000_state::dms5000_mem);
m_maincpu->set_addrmap(AS_IO, &dms5000_state::dms5000_io);
m_maincpu->set_addrmap(AS_PROGRAM, &dms5000_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &dms5000_state::io_map);
LS259(config, "cntlatch", 0); // V34
@ -117,7 +107,7 @@ void dms5000_state::dms5000(machine_config &config)
/* ROM definition */
ROM_START( dms5000 )
ROM_REGION16_LE( 0x4000, "user1", ROMREGION_ERASEFF )
ROM_REGION16_LE( 0x4000, "maincpu", 0 )
ROM_LOAD16_BYTE( "dms-5000_54-8673o.bin", 0x0001, 0x2000, CRC(dce9823e) SHA1(d36ab87d2e6f5e9f02d59a6a7724ad3ce2428a2f))
ROM_LOAD16_BYTE( "dms-5000_54-8672e.bin", 0x0000, 0x2000, CRC(94d64c06) SHA1(be5a53da7bb29a5fa9ac31efe550d5d6ff8b77cd))
ROM_END
@ -125,4 +115,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1982, dms5000, 0, 0, dms5000, dms5000, dms5000_state, empty_init, "Digital Microsystems", "DMS-5000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP( 1982, dms5000, 0, 0, dms5000, dms5000, dms5000_state, empty_init, "Digital Microsystems", "DMS-5000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -32,53 +32,49 @@ public:
homez80_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_p_videoram(*this, "videoram")
, m_vram(*this, "videoram")
, m_p_chargen(*this, "chargen")
, m_io_keyboard(*this, "X%u", 0U)
{ }
void homez80(machine_config &config);
private:
uint8_t homez80_keyboard_r(offs_t offset);
u8 homez80_keyboard_r(offs_t offset);
INTERRUPT_GEN_MEMBER(homez80_interrupt);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void homez80_io(address_map &map);
void homez80_mem(address_map &map);
void mem_map(address_map &map);
bool m_irq;
virtual void machine_reset() override;
void machine_reset() override;
void machine_start() override;
required_device<cpu_device> m_maincpu;
required_shared_ptr<uint8_t> m_p_videoram;
required_shared_ptr<u8> m_vram;
required_region_ptr<u8> m_p_chargen;
required_ioport_array<16> m_io_keyboard;
};
uint8_t homez80_state::homez80_keyboard_r(offs_t offset)
u8 homez80_state::homez80_keyboard_r(offs_t offset)
{
char kbdrow[8];
sprintf(kbdrow,"LINE%d",offset);
return ioport(kbdrow)->read();
return m_io_keyboard[offset]->read();
}
void homez80_state::homez80_mem(address_map &map)
void homez80_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x0fff).rom(); // Monitor
map(0x2000, 0x23ff).ram().share("videoram"); // Video RAM
map(0x7020, 0x702f).r(FUNC(homez80_state::homez80_keyboard_r));
map(0x8000, 0xffff).ram(); // 32 K RAM
map(0x0000, 0x0fff).rom(); // 27C256 (A12,13,14 tied high)
map(0x2000, 0x23ff).mirror(0x0c00).ram().share("videoram"); // IC13, UM61256 (A10-14 tied low)
map(0x7000, 0x700f).mirror(0x0ff0).r(FUNC(homez80_state::homez80_keyboard_r));
map(0x8000, 0xffff).ram(); // 61256 (32K)
}
void homez80_state::homez80_io(address_map &map)
{
map.unmap_value_high();
}
/* Input ports */
INPUT_PORTS_START( homez80 )
PORT_START("LINE0")
PORT_START("X0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
@ -87,16 +83,16 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
PORT_START("LINE1")
PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE // crude, just another shift key
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("LINE2")
PORT_START("X2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
@ -105,16 +101,16 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("LINE3")
PORT_START("X3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
PORT_START("LINE4")
PORT_START("X4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
@ -123,7 +119,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
PORT_START("LINE5")
PORT_START("X5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
@ -132,7 +128,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
PORT_START("LINE6")
PORT_START("X6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)
@ -141,7 +137,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)
PORT_START("LINE7")
PORT_START("X7")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)
@ -150,25 +146,25 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)
PORT_START("LINE8")
PORT_START("X8")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SCRLOCK)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SCRLOCK) // nothing
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR) // nothing
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) // nothing
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("LINE9")
PORT_START("X9")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE) // nothing
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("LINE10")
PORT_START("X10")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
@ -177,7 +173,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD)
PORT_START("LINE11")
PORT_START("X11")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
@ -186,7 +182,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD)
PORT_START("LINE12")
PORT_START("X12")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
@ -195,7 +191,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD)
PORT_START("LINE13")
PORT_START("X13")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)
@ -204,7 +200,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)
PORT_START("LINE14")
PORT_START("X14")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)
@ -213,7 +209,7 @@ INPUT_PORTS_START( homez80 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)
PORT_START("LINE15")
PORT_START("X15")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10)
@ -230,10 +226,15 @@ void homez80_state::machine_reset()
m_irq = 0;
}
uint32_t homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
void homez80_state::machine_start()
{
uint8_t y,ra,chr,gfx;
uint16_t sy=0,ma=0,x;
save_item(NAME(m_irq));
}
u32 homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
u8 y,ra,chr,gfx;
u16 sy=0,ma=0,x;
for (y = 0; y < 32; y++)
{
@ -243,7 +244,7 @@ uint32_t homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
for (x = ma; x < ma+32; x++)
{
chr = m_p_videoram[x];
chr = m_vram[x];
/* get pattern of pixels for that character scanline */
gfx = m_p_chargen[ (chr<<3) | ra];
@ -265,7 +266,7 @@ uint32_t homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
}
const gfx_layout homez80_charlayout =
const gfx_layout charlayout =
{
8, 8, /* 8x8 characters */
256, /* 256 characters */
@ -277,7 +278,7 @@ const gfx_layout homez80_charlayout =
};
static GFXDECODE_START( gfx_homez80 )
GFXDECODE_ENTRY( "chargen", 0x0000, homez80_charlayout, 0, 1 )
GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@ -291,8 +292,7 @@ void homez80_state::homez80(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(8'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &homez80_state::homez80_mem);
m_maincpu->set_addrmap(AS_IO, &homez80_state::homez80_io);
m_maincpu->set_addrmap(AS_PROGRAM, &homez80_state::mem_map);
m_maincpu->set_periodic_int(FUNC(homez80_state::homez80_interrupt), attotime::from_hz(50));
/* video hardware */
@ -310,14 +310,14 @@ void homez80_state::homez80(machine_config &config)
/* ROM definition */
ROM_START( homez80 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "sysrom.bin", 0x0000, 0x1000, CRC(37ca7545) SHA1(3f597d7e45b1ab211d5bd4a99abb21915723c357) )
ROM_REGION(0x0800, "chargen",0)
ROM_LOAD( "chargen.bin", 0x0000, 0x0800, CRC(93243be3) SHA1(718efc06c131843c15383e50af23f3a5cf44dd9b) )
ROM_LOAD( "chargen.ic12", 0x0000, 0x0800, CRC(93243be3) SHA1(718efc06c131843c15383e50af23f3a5cf44dd9b) ) // 27C256, A11/12/13/14 tied low.
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 2008, homez80, 0, 0, homez80, homez80, homez80_state, empty_init, "Kun-Szabo Marton", "Homebrew Z80 Computer", MACHINE_NO_SOUND_HW)
COMP( 2008, homez80, 0, 0, homez80, homez80, homez80_state, empty_init, "Kun-Szabo Marton", "Homebrew Z80 Computer", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )

View File

@ -97,11 +97,11 @@ private:
uint8_t port11_r();
uint8_t port40_r();
uint8_t port41_r();
DECLARE_MACHINE_RESET(sapi1);
DECLARE_MACHINE_RESET(sapizps3);
MC6845_UPDATE_ROW(crtc_update_row);
DECLARE_READ_LINE_MEMBER(si);
DECLARE_WRITE_LINE_MEMBER(so);
void machine_reset() override;
void machine_start() override;
uint32_t screen_update_sapi1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_sapi3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -724,24 +724,39 @@ void sapi_state::sapi3_25_w(uint8_t data)
m_zps3_25 = data & 0xfc; //??
}
MACHINE_RESET_MEMBER( sapi_state, sapi1 )
void sapi_state::machine_reset()
{
m_keyboard_mask = 0;
m_refresh_counter = 0x20;
// setup uart to 8N2 for sapi1 -bios 0
m_uart->write_np(1);
m_uart->write_tsb(1);
m_uart->write_nb1(1);
m_uart->write_nb2(1);
m_uart->write_eps(1);
m_uart->write_cs(1);
m_uart->write_cs(0);
if (m_uart)
{
// setup uart to 8N2 for sapi1 -bios 0
m_uart->write_np(1);
m_uart->write_tsb(1);
m_uart->write_nb1(1);
m_uart->write_nb2(1);
m_uart->write_eps(1);
m_uart->write_cs(1);
m_uart->write_cs(0);
}
if (m_bank1)
m_bank1->set_entry(1);
}
MACHINE_RESET_MEMBER( sapi_state, sapizps3 )
void sapi_state::machine_start()
{
m_keyboard_mask = 0;
m_bank1->set_entry(1);
save_item(NAME(m_term_data));
save_item(NAME(m_keyboard_mask));
save_item(NAME(m_refresh_counter));
save_item(NAME(m_zps3_25));
save_item(NAME(m_cass_data));
save_item(NAME(m_cassinbit));
save_item(NAME(m_cassoutbit));
save_item(NAME(m_cassold));
save_item(NAME(m_ier));
save_item(NAME(m_iet));
}
void sapi_state::init_sapizps3()
@ -771,7 +786,6 @@ void sapi_state::sapi1(machine_config &config)
I8080A(config, m_maincpu, 18_MHz_XTAL / 9); // Tesla MHB8080A + MHB8224 + MHB8228
m_maincpu->set_addrmap(AS_PROGRAM, &sapi_state::sapi1_mem);
m_maincpu->set_addrmap(AS_IO, &sapi_state::sapi1_io);
MCFG_MACHINE_RESET_OVERRIDE(sapi_state, sapi1)
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@ -821,7 +835,6 @@ void sapi_state::sapi3(machine_config &config)
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &sapi_state::sapi3_mem);
m_maincpu->set_addrmap(AS_IO, &sapi_state::sapi3_io);
MCFG_MACHINE_RESET_OVERRIDE(sapi_state, sapizps3 )
screen_device &screen(*subdevice<screen_device>("screen"));
screen.set_size(40*6, 20*9);
@ -867,7 +880,6 @@ void sapi_state::sapi3a(machine_config &config)
I8080A(config, m_maincpu, 18_MHz_XTAL / 9); // Tesla MHB8080A + MHB8224 + MHB8228
m_maincpu->set_addrmap(AS_PROGRAM, &sapi_state::sapi3a_mem);
m_maincpu->set_addrmap(AS_IO, &sapi_state::sapi3a_io);
MCFG_MACHINE_RESET_OVERRIDE(sapi_state, sapizps3 )
/* video hardware */
AY51013(config, m_uart); // Tesla MHB1012
@ -942,9 +954,9 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1985, sapi1, 0, 0, sapi1, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 1", MACHINE_NO_SOUND_HW )
COMP( 1985, sapizps2, sapi1, 0, sapi2, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 2", MACHINE_NO_SOUND_HW )
COMP( 1985, sapizps3, sapi1, 0, sapi3, sapi1, sapi_state, init_sapizps3, "Tesla", "SAPI-1 ZPS 3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
COMP( 1985, sapizps3a, sapi1, 0, sapi3a, sapi1, sapi_state, init_sapizps3a, "Tesla", "SAPI-1 ZPS 3 (terminal)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
COMP( 1985, sapizps3b, sapi1, 0, sapi3b, sapi1, sapi_state, init_sapizps3b, "Tesla", "SAPI-1 ZPS 3 (6845)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
COMP( 1985, sapi1, 0, 0, sapi1, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 1", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
COMP( 1985, sapizps2, sapi1, 0, sapi2, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 2", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
COMP( 1985, sapizps3, sapi1, 0, sapi3, sapi1, sapi_state, init_sapizps3, "Tesla", "SAPI-1 ZPS 3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
COMP( 1985, sapizps3a, sapi1, 0, sapi3a, sapi1, sapi_state, init_sapizps3a, "Tesla", "SAPI-1 ZPS 3 (terminal)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
COMP( 1985, sapizps3b, sapi1, 0, sapi3b, sapi1, sapi_state, init_sapizps3b, "Tesla", "SAPI-1 ZPS 3 (6845)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )