summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/osborne1.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2019-12-06 21:43:12 +1100
committer Vas Crabb <vas@vastheman.com>2019-12-06 23:12:11 +1100
commitbe7476e81bafad3ec7b5c4f501fbd131bfdf1911 (patch)
tree095a85845903f5ed5f3522a44affb327322c6048 /src/mame/drivers/osborne1.cpp
parent9f2b31a9d8c751247c618b51eef8d01ba819eaec (diff)
osborne1.cpp:
* Move drawing to scanline update function and get rid of intermediate bitmap * Connect VBLANK input to PIA in machine configuration * Use the screen parameters set by the BIOS in machine configuration for osborne1nv * Turned SCREEN-PAC variant into a separate machine as it's a major hardware modification * Got back some performance by adding a memory access cache
Diffstat (limited to 'src/mame/drivers/osborne1.cpp')
-rw-r--r--src/mame/drivers/osborne1.cpp66
1 files changed, 48 insertions, 18 deletions
diff --git a/src/mame/drivers/osborne1.cpp b/src/mame/drivers/osborne1.cpp
index afa933e8de6..9f9dcc46979 100644
--- a/src/mame/drivers/osborne1.cpp
+++ b/src/mame/drivers/osborne1.cpp
@@ -109,6 +109,13 @@ void osborne1_state::osborne1_mem(address_map &map)
map(0xF000, 0xFFFF).bankr(m_bank_fxxx).w(FUNC(osborne1_state::videoram_w));
}
+void osborne1sp_state::osborne1sp_mem(address_map &map)
+{
+ osborne1_mem(map);
+
+ map(0x2000, 0x3FFF).rw(FUNC(osborne1sp_state::bank_2xxx_3xxx_r), FUNC(osborne1sp_state::bank_2xxx_3xxx_w));
+}
+
void osborne1_state::osborne1_op(address_map &map)
{
@@ -228,15 +235,12 @@ static INPUT_PORTS_START( osborne1 )
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("CNF")
- PORT_BIT(0xF8, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_CONFNAME(0x06, 0x00, "Serial Speed")
+ PORT_BIT(0xFC, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_CONFNAME(0x03, 0x00, "Serial Speed")
PORT_CONFSETTING(0x00, "300/1200")
- PORT_CONFSETTING(0x02, "600/2400")
- PORT_CONFSETTING(0x04, "1200/4800")
- PORT_CONFSETTING(0x06, "2400/9600")
- PORT_CONFNAME(0x01, 0x00, "Video Output")
- PORT_CONFSETTING(0x00, "Standard")
- PORT_CONFSETTING(0x01, "SCREEN-PAC")
+ PORT_CONFSETTING(0x01, "600/2400")
+ PORT_CONFSETTING(0x02, "1200/4800")
+ PORT_CONFSETTING(0x03, "2400/9600")
INPUT_PORTS_END
INPUT_PORTS_START( osborne1nv )
@@ -283,7 +287,7 @@ static GFXDECODE_START( gfx_osborne1 )
GFXDECODE_END
-void osborne1_state::osborne1(machine_config &config)
+void osborne1_state::osborne1_base(machine_config &config)
{
Z80(config, m_maincpu, MAIN_CLOCK/4);
m_maincpu->set_addrmap(AS_PROGRAM, &osborne1_state::osborne1_mem);
@@ -292,9 +296,6 @@ void osborne1_state::osborne1(machine_config &config)
m_maincpu->irqack_cb().set(FUNC(osborne1_state::irqack_w));
SCREEN(config, m_screen, SCREEN_TYPE_RASTER, rgb_t::green());
- m_screen->set_screen_update(FUNC(osborne1_state::screen_update));
- m_screen->set_raw(MAIN_CLOCK, 1024, 0, 104*8, 260, 0, 24*10);
- m_screen->set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_osborne1);
PALETTE(config, "palette", palette_device::MONOCHROME_HIGHLIGHT);
@@ -343,15 +344,41 @@ void osborne1_state::osborne1(machine_config &config)
SOFTWARE_LIST(config, "flop_list").set_original("osborne1");
}
+void osborne1_state::osborne1(machine_config &config)
+{
+ osborne1_base(config);
+
+ m_screen->set_screen_update(FUNC(osborne1_state::screen_update));
+ m_screen->set_raw(MAIN_CLOCK / 2, 512, 0, 52 * 8, 260, 0, 24 * 10);
+ m_screen->screen_vblank().set(m_pia1, FUNC(pia6821_device::ca1_w));
+ m_screen->set_palette("palette");
+ m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE | VIDEO_ALWAYS_UPDATE);
+}
+
+void osborne1sp_state::osborne1sp(machine_config &config)
+{
+ osborne1_base(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &osborne1sp_state::osborne1sp_mem);
+
+ m_screen->set_screen_update(FUNC(osborne1sp_state::screen_update));
+ m_screen->set_raw(MAIN_CLOCK, 1024, 0, 104 * 8, 260, 0, 24 * 10);
+ m_screen->screen_vblank().set(m_pia1, FUNC(pia6821_device::ca1_w));
+ m_screen->set_palette("palette");
+ m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE | VIDEO_ALWAYS_UPDATE);
+}
+
void osborne1nv_state::osborne1nv(machine_config &config)
{
- osborne1(config);
+ osborne1_base(config);
+
m_maincpu->set_addrmap(AS_IO, &osborne1nv_state::osborne1nv_io);
- m_screen->set_no_palette();
m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+ m_screen->set_raw(12.288_MHz_XTAL, (96 + 1) * 8, 0, 80 * 8, ((25 + 1) * 10) + 4, 0, 24 * 10);
+ m_screen->screen_vblank().set(m_pia1, FUNC(pia6821_device::ca1_w)); // FIXME: AFAICT the PIA gets this from the (vestigial) onboard video circuitry
- sy6545_1_device &crtc(SY6545_1(config, "crtc", XTAL(12'288'000)/8));
+ sy6545_1_device &crtc(SY6545_1(config, "crtc", 12.288_MHz_XTAL / 8));
crtc.set_screen(m_screen);
crtc.set_show_border_area(false);
crtc.set_char_width(8);
@@ -389,6 +416,8 @@ ROM_START( osborne1 )
ROMX_LOAD( "7a3007-00.ud15", 0x0000, 0x800, CRC(6c1eab0d) SHA1(b04459d377a70abc9155a5486003cb795342c801), ROM_BIOS(6) )
ROM_END
+#define rom_osborne1sp rom_osborne1
+
ROM_START( osborne1nv )
ROM_REGION(0x1000, "maincpu", 0)
ROM_LOAD( "monrom-rev1.51-12.ud11", 0x0000, 0x1000, CRC(298da402) SHA1(7fedd070936ccfe98f96d6e0ac71689666da79cb) )
@@ -400,6 +429,7 @@ ROM_START( osborne1nv )
ROM_LOAD( "character_generator_6-29-84.14", 0x0000, 0x800, CRC(6c1eab0d) SHA1(b04459d377a70abc9155a5486003cb795342c801) )
ROM_END
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1981, osborne1, 0, 0, osborne1, osborne1, osborne1_state, init_osborne1, "Osborne", "Osborne-1", MACHINE_SUPPORTS_SAVE )
-COMP( 1984, osborne1nv, osborne1, 0, osborne1nv, osborne1nv, osborne1nv_state, init_osborne1, "Osborne/Nuevo", "Osborne-1 (Nuevo Video)", MACHINE_SUPPORTS_SAVE )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1981, osborne1, 0, 0, osborne1, osborne1, osborne1_state, empty_init, "Osborne", "Osborne-1", MACHINE_SUPPORTS_SAVE )
+COMP( 1983, osborne1sp, osborne1, 0, osborne1sp, osborne1, osborne1sp_state, empty_init, "Osborne", "Osborne-1 with SCREEN-PAC", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, osborne1nv, osborne1, 0, osborne1nv, osborne1nv, osborne1nv_state, empty_init, "Osborne/Nuevo", "Osborne-1 (Nuevo Video)", MACHINE_SUPPORTS_SAVE )