summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2020-07-09 00:05:46 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2020-07-09 00:05:46 +1000
commitdb0ac057181541798dbe61b01c736c1d7f327c70 (patch)
tree20263cbe49a803a374c4095a3ac3efd976023ace
parent30d56887568c2dc7c252a6ff8044af6ab05f9bc9 (diff)
orion, partner, radio86, mikrosha, apogee: small cleanup
ondra: fixed bug, updated xml.
-rw-r--r--hash/ondra.xml36
-rw-r--r--src/mame/drivers/apogee.cpp126
-rw-r--r--src/mame/drivers/mikrosha.cpp119
-rw-r--r--src/mame/drivers/ondra.cpp10
-rw-r--r--src/mame/drivers/orion.cpp163
-rw-r--r--src/mame/drivers/partner.cpp88
-rw-r--r--src/mame/drivers/radio86.cpp255
-rw-r--r--src/mame/includes/orion.h28
-rw-r--r--src/mame/includes/partner.h36
-rw-r--r--src/mame/includes/radio86.h121
-rw-r--r--src/mame/machine/ondra.cpp1
-rw-r--r--src/mame/machine/orion.cpp94
-rw-r--r--src/mame/machine/partner.cpp198
-rw-r--r--src/mame/machine/radio86.cpp137
14 files changed, 735 insertions, 677 deletions
diff --git a/hash/ondra.xml b/hash/ondra.xml
index a2ea581af8e..cce6d5f31fb 100644
--- a/hash/ondra.xml
+++ b/hash/ondra.xml
@@ -2,14 +2,18 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
+
+These tapes only work on ondrav. Load the tape and press Enter. Tape will load and then the program will run by itself.
+If asked for numbers, press letters: Q = 1, W = 2, E = 3, etc.
+
-->
<softwarelist name="ondra" description="Ondra &amp; Ondra ViLi cassettes">
<software name="copyfile">
- <description>COPYFILE</description>
+ <description>Copyfile Utility</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="112800">
<rom name="copyfile.wav" size="112800" crc="b3049df0" sha1="9172a09b22d2e532c96f87ffab098f8b292fecf3"/>
@@ -18,10 +22,10 @@ license:CC0
</software>
<software name="editasm">
- <description>EDITASM</description>
+ <description>Microsoft Editor/Assembler 10.0</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1015968">
<rom name="editasm.wav" size="1015968" crc="62b18cc1" sha1="71850e204e17c44d3dcd7cda9e9d8717d96063a8"/>
@@ -33,7 +37,7 @@ license:CC0
<description>GALAXIANS</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1449244">
<rom name="galaxians.wav" size="1449244" crc="e9245841" sha1="bc24392a6ac9db4730363cea8efda4f090d3d1b1"/>
@@ -42,10 +46,10 @@ license:CC0
</software>
<software name="jetpac">
- <description>JETPAC</description>
+ <description>Jetpac</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move and fly, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1304736">
<rom name="jetpac.wav" size="1304736" crc="d69d30d2" sha1="9919166ce9b954188af163bcfe52db6df4da8df6"/>
@@ -54,10 +58,10 @@ license:CC0
</software>
<software name="jetset">
- <description>JETSETWILLY</description>
+ <description>Jet Set Willy</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load. Press enter a few times to start. Arrows to move, Space to jump." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="2308256">
<rom name="jetsetwilly.wav" size="2308256" crc="753c51fd" sha1="4342dc96eb60fe5ee92222542c714dc22eda77a0"/>
@@ -69,7 +73,7 @@ license:CC0
<description>KAREL</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="385184">
<rom name="karel.wav" size="385184" crc="c10354de" sha1="e640e63e5fc4fe34af33ecfaf57196cc00917b71"/>
@@ -78,10 +82,10 @@ license:CC0
</software>
<software name="mikos">
- <description>MIKOS</description>
+ <description>MIKOS v0.5</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run. Emulates ondrat." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="297120">
<rom name="mikos.wav" size="297120" crc="4ba186d4" sha1="56e15d9e064afa2196a235ff25f504256779ca5a"/>
@@ -90,10 +94,10 @@ license:CC0
</software>
<software name="pascal">
- <description>PASCAL</description>
+ <description>Hisoft Pascal System</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1732768">
<rom name="pascal.wav" size="1732768" crc="e9b74b24" sha1="6ba4fd152e8c2e60483f7725ab73f8e5bf39445d"/>
@@ -105,7 +109,7 @@ license:CC0
<description>PLANETOIDS</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to turn, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1355936">
<rom name="planetoids.wav" size="1355936" crc="8d517fd8" sha1="e34600276d188018b66a1077697c9a63b9565692"/>
@@ -117,7 +121,7 @@ license:CC0
<description>PSSST</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="Works only on the Ondra ViLi" />
+ <info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move, get the spray can, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1380112">
<rom name="pssst.wav" size="1380112" crc="745ed80b" sha1="2bab363cc8efbac52c46d1ecc09184a667c9c1f3"/>
diff --git a/src/mame/drivers/apogee.cpp b/src/mame/drivers/apogee.cpp
index d07816386a9..e89e0ba03b0 100644
--- a/src/mame/drivers/apogee.cpp
+++ b/src/mame/drivers/apogee.cpp
@@ -13,13 +13,10 @@
#include "includes/radio86.h"
#include "cpu/i8085/i8085.h"
-#include "imagedev/cassette.h"
-#include "machine/i8255.h"
#include "machine/pit8253.h"
#include "sound/spkrdev.h"
#include "screen.h"
-#include "softlist.h"
#include "speaker.h"
#include "formats/rk_cas.h"
@@ -45,21 +42,22 @@ private:
I8275_DRAW_CHARACTER_MEMBER(display_pixels);
required_device<speaker_sound_device> m_speaker;
- void apogee_mem(address_map &map);
+ void mem_map(address_map &map);
+ void machine_reset() override;
+ void machine_start() override;
};
/* Address maps */
-void apogee_state::apogee_mem(address_map &map)
+void apogee_state::mem_map(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0xebff).ram(); // RAM
- map(0xec00, 0xec03).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).mirror(0x00fc);
- map(0xed00, 0xed03).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
- //map(0xee00, 0xee03).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
- map(0xef00, 0xef01).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x00fe); // video
- map(0xf000, 0xf0ff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf000, 0xffff).rom(); // System ROM
+ map(0x0000, 0xebff).ram().share("mainram");
+ map(0xec00, 0xec03).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).mirror(0x00fc);
+ map(0xed00, 0xed03).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
+ //map(0xee00, 0xee03).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
+ map(0xef00, 0xef01).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x00fe); // video
+ map(0xf000, 0xf0ff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf000, 0xffff).rom().region("maincpu",0); // System ROM
}
/* Input ports */
@@ -175,23 +173,50 @@ WRITE_LINE_MEMBER(apogee_state::pit8253_out2_changed)
m_speaker->level_w(m_out0+m_out1+m_out2);
}
+void apogee_state::machine_reset()
+{
+ address_space &program = m_maincpu->space(AS_PROGRAM);
+ program.install_rom(0x0000, 0x0fff, m_rom+0x0800); // do it here for F3
+ m_rom_shadow_tap = program.install_read_tap(0xf000, 0xffff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask)
+ {
+ if (!machine().side_effects_disabled())
+ {
+ // delete this tap
+ m_rom_shadow_tap->remove();
+
+ // reinstall ram over the rom shadow
+ m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0fff, m_ram);
+ }
+
+ // return the original data
+ return data;
+ });
+}
+
+void apogee_state::machine_start()
+{
+ save_item(NAME(m_tape_value));
+ save_item(NAME(m_out0));
+ save_item(NAME(m_out1));
+ save_item(NAME(m_out2));
+}
+
I8275_DRAW_CHARACTER_MEMBER(apogee_state::display_pixels)
{
rgb_t const *const palette = m_palette->palette()->entry_list_raw();
- uint8_t const *const charmap = &m_charmap[(gpa & 1) * 0x400];
+ uint8_t const *const charmap = &m_chargen[(gpa & 1) * 0x400];
uint8_t pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
+ if (vsp)
pixels = 0;
- }
- if (lten) {
+
+ if (lten)
pixels = 0xff;
- }
- if (rvv) {
+
+ if (rvv)
pixels ^= 0xff;
- }
- for(int i=0;i<6;i++) {
+
+ for(int i=0;i<6;i++)
bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
- }
}
/* F4 Character Displayer */
@@ -209,7 +234,7 @@ static const gfx_layout apogee_charlayout =
};
static GFXDECODE_START( gfx_apogee )
- GFXDECODE_ENTRY( "gfx1", 0x0000, apogee_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, apogee_charlayout, 0, 1 )
GFXDECODE_END
@@ -218,32 +243,32 @@ void apogee_state::apogee(machine_config &config)
{
/* basic machine hardware */
I8080(config, m_maincpu, XTAL(16'000'000) / 9);
- m_maincpu->set_addrmap(AS_PROGRAM, &apogee_state::apogee_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &apogee_state::mem_map);
- pit8253_device &pit8253(PIT8253(config, "pit8253", 0));
- pit8253.set_clk<0>(XTAL(16'000'000)/9);
- pit8253.out_handler<0>().set(FUNC(apogee_state::pit8253_out0_changed));
- pit8253.set_clk<1>(XTAL(16'000'000)/9);
- pit8253.out_handler<1>().set(FUNC(apogee_state::pit8253_out1_changed));
- pit8253.set_clk<2>(XTAL(16'000'000)/9);
- pit8253.out_handler<2>().set(FUNC(apogee_state::pit8253_out2_changed));
+ pit8253_device &pit(PIT8253(config, "pit", 0));
+ pit.set_clk<0>(XTAL(16'000'000)/9);
+ pit.out_handler<0>().set(FUNC(apogee_state::pit8253_out0_changed));
+ pit.set_clk<1>(XTAL(16'000'000)/9);
+ pit.out_handler<1>().set(FUNC(apogee_state::pit8253_out1_changed));
+ pit.set_clk<2>(XTAL(16'000'000)/9);
+ pit.out_handler<2>().set(FUNC(apogee_state::pit8253_out2_changed));
- I8255(config, m_ppi8255_1);
- m_ppi8255_1->out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- m_ppi8255_1->in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- m_ppi8255_1->in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- m_ppi8255_1->out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255(config, m_ppi1);
+ m_ppi1->out_pa_callback().set(FUNC(apogee_state::radio86_8255_porta_w2));
+ m_ppi1->in_pb_callback().set(FUNC(apogee_state::radio86_8255_portb_r2));
+ m_ppi1->in_pc_callback().set(FUNC(apogee_state::radio86_8255_portc_r2));
+ m_ppi1->out_pc_callback().set(FUNC(apogee_state::radio86_8255_portc_w2));
- //I8255(config, "ppi8255_2");
+ //I8255(config, m_ppi2);
- i8275_device &i8275(I8275(config, "i8275", XTAL(16'000'000) / 12));
+ i8275_device &i8275(I8275(config, "crtc", XTAL(16'000'000) / 12));
i8275.set_character_width(6);
i8275.set_display_callback(FUNC(apogee_state::display_pixels));
- i8275.drq_wr_callback().set(m_dma8257, FUNC(i8257_device::dreq2_w));
+ i8275.drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq2_w));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_screen_update("i8275", FUNC(i8275_device::screen_update));
+ screen.set_screen_update("crtc", FUNC(i8275_device::screen_update));
screen.set_refresh_hz(50);
screen.set_size(78*6, 30*10);
screen.set_visarea(0, 78*6-1, 0, 30*10-1);
@@ -256,12 +281,12 @@ void apogee_state::apogee(machine_config &config)
m_speaker->set_levels(4, speaker_levels);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.75);
- I8257(config, m_dma8257, XTAL(16'000'000) / 9);
- m_dma8257->out_hrq_cb().set(FUNC(radio86_state::hrq_w));
- m_dma8257->in_memr_cb().set(FUNC(radio86_state::memory_read_byte));
- m_dma8257->out_memw_cb().set(FUNC(radio86_state::memory_write_byte));
- m_dma8257->out_iow_cb<2>().set("i8275", FUNC(i8275_device::dack_w));
- m_dma8257->set_reverse_rw_mode(1);
+ I8257(config, m_dma, XTAL(16'000'000) / 9);
+ m_dma->out_hrq_cb().set(FUNC(apogee_state::hrq_w));
+ m_dma->in_memr_cb().set(FUNC(apogee_state::memory_read_byte));
+ m_dma->out_memw_cb().set(FUNC(apogee_state::memory_write_byte));
+ m_dma->out_iow_cb<2>().set("crtc", FUNC(i8275_device::dack_w));
+ m_dma->set_reverse_rw_mode(1);
CASSETTE(config, m_cassette);
m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
@@ -274,13 +299,14 @@ void apogee_state::apogee(machine_config &config)
/* ROM definition */
ROM_START( apogee )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "apogee.rom", 0xf000, 0x1000, CRC(a47383a7) SHA1(6a868371c7980f92c2fc9ced921517209f197375))
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "apogee.rom", 0x0000, 0x1000, CRC(a47383a7) SHA1(6a868371c7980f92c2fc9ced921517209f197375))
+
+ ROM_REGION(0x0800, "chargen",0)
ROM_LOAD ("apogee.fnt", 0x0000, 0x0800, CRC(fe5867f0) SHA1(82c5aca63ada5e4533eb0516384aaa7b77a1f8e2))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1989, apogee, radio86, 0, apogee, apogee, apogee_state, init_radio86, "Zavod BRA", "Apogee BK-01", 0 )
+COMP( 1989, apogee, radio86, 0, apogee, apogee, apogee_state, init_radio86, "Zavod BRA", "Apogee BK-01", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mikrosha.cpp b/src/mame/drivers/mikrosha.cpp
index 4c2c9d9a396..6660e81c278 100644
--- a/src/mame/drivers/mikrosha.cpp
+++ b/src/mame/drivers/mikrosha.cpp
@@ -12,12 +12,9 @@
#include "includes/radio86.h"
#include "cpu/i8085/i8085.h"
-#include "imagedev/cassette.h"
-#include "machine/i8255.h"
#include "machine/pit8253.h"
#include "screen.h"
-#include "softlist.h"
#include "speaker.h"
#include "formats/rk_cas.h"
@@ -36,10 +33,11 @@ private:
void mikrosha_8255_font_page_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(mikrosha_pit_out2);
I8275_DRAW_CHARACTER_MEMBER(display_pixels);
- virtual void machine_reset() override;
+ void machine_reset() override;
+ void machine_start() override;
- void mikrosha_io(address_map &map);
- void mikrosha_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
uint8_t m_mikrosha_font_page;
};
@@ -52,20 +50,18 @@ void mikrosha_state::machine_reset()
}
/* Address maps */
-void mikrosha_state::mikrosha_mem(address_map &map)
+void mikrosha_state::mem_map(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0x7fff).ram(); // RAM
- map(0xc000, 0xc003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x07fc);
- map(0xc800, 0xc803).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x07fc);
- map(0xd000, 0xd001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x07fe); // video
- map(0xd800, 0xd803).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).mirror(0x07fc); // Timer
+ map(0x0000, 0x7fff).ram().share("mainram"); // RAM
+ map(0xc000, 0xc003).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x07fc);
+ map(0xc800, 0xc803).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x07fc);
+ map(0xd000, 0xd001).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x07fe); // video
+ map(0xd800, 0xd803).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).mirror(0x07fc); // Timer
map(0xe000, 0xf7ff).r(FUNC(mikrosha_state::radio_cpu_state_r)); // Not connected
- map(0xf800, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf800, 0xffff).rom(); // System ROM
+ map(0xf800, 0xffff).rom().region("maincpu",0).w(m_dma, FUNC(i8257_device::write)); // DMA
}
-void mikrosha_state::mikrosha_io(address_map &map)
+void mikrosha_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x00, 0xff).rw(FUNC(mikrosha_state::radio_io_r), FUNC(mikrosha_state::radio_io_w));
@@ -173,23 +169,28 @@ WRITE_LINE_MEMBER(mikrosha_state::mikrosha_pit_out2)
{
}
+void mikrosha_state::machine_start()
+{
+ save_item(NAME(m_tape_value));
+ save_item(NAME(m_mikrosha_font_page));
+}
+
I8275_DRAW_CHARACTER_MEMBER(mikrosha_state::display_pixels)
{
rgb_t const *const palette = m_palette->palette()->entry_list_raw();
- uint8_t const *const charmap = &m_charmap[(m_mikrosha_font_page & 1) * 0x400];
+ uint8_t const *const charmap = &m_chargen[(m_mikrosha_font_page & 1) * 0x400];
uint8_t pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
+ if (vsp)
pixels = 0;
- }
- if (lten) {
+
+ if (lten)
pixels = 0xff;
- }
- if (rvv) {
+
+ if (rvv)
pixels ^= 0xff;
- }
- for(int i=0;i<6;i++) {
+
+ for(int i=0;i<6;i++)
bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
- }
}
/* F4 Character Displayer */
@@ -207,40 +208,40 @@ static const gfx_layout mikrosha_charlayout =
};
static GFXDECODE_START( gfx_mikrosha )
- GFXDECODE_ENTRY( "gfx1", 0x0000, mikrosha_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, mikrosha_charlayout, 0, 1 )
GFXDECODE_END
void mikrosha_state::mikrosha(machine_config &config)
{
/* basic machine hardware */
I8080(config, m_maincpu, XTAL(16'000'000) / 9);
- m_maincpu->set_addrmap(AS_PROGRAM, &mikrosha_state::mikrosha_mem);
- m_maincpu->set_addrmap(AS_IO, &mikrosha_state::mikrosha_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mikrosha_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &mikrosha_state::io_map);
- I8255(config, m_ppi8255_1);
- m_ppi8255_1->in_pa_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- m_ppi8255_1->out_pb_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- m_ppi8255_1->in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- m_ppi8255_1->out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255(config, m_ppi1);
+ m_ppi1->in_pa_callback().set(FUNC(mikrosha_state::radio86_8255_portb_r2));
+ m_ppi1->out_pb_callback().set(FUNC(mikrosha_state::radio86_8255_porta_w2));
+ m_ppi1->in_pc_callback().set(FUNC(mikrosha_state::radio86_8255_portc_r2));
+ m_ppi1->out_pc_callback().set(FUNC(mikrosha_state::radio86_8255_portc_w2));
- I8255(config, m_ppi8255_2);
- m_ppi8255_2->out_pb_callback().set(FUNC(mikrosha_state::mikrosha_8255_font_page_w));
- m_ppi8255_2->tri_pb_callback().set_constant(0);
+ I8255(config, m_ppi2);
+ m_ppi2->out_pb_callback().set(FUNC(mikrosha_state::mikrosha_8255_font_page_w));
+ m_ppi2->tri_pb_callback().set_constant(0);
- i8275_device &i8275(I8275(config, "i8275", XTAL(16'000'000) / 12));
+ i8275_device &i8275(I8275(config, "crtc", XTAL(16'000'000) / 12));
i8275.set_character_width(6);
i8275.set_display_callback(FUNC(mikrosha_state::display_pixels));
- i8275.drq_wr_callback().set(m_dma8257, FUNC(i8257_device::dreq2_w));
+ i8275.drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq2_w));
- pit8253_device &pit8253(PIT8253(config, "pit8253", 0));
- pit8253.set_clk<0>(0);
- pit8253.set_clk<1>(0);
- pit8253.set_clk<2>(2000000);
- pit8253.out_handler<2>().set(FUNC(mikrosha_state::mikrosha_pit_out2));
+ pit8253_device &pit(PIT8253(config, "pit", 0));
+ pit.set_clk<0>(0);
+ pit.set_clk<1>(0);
+ pit.set_clk<2>(2000000);
+ pit.out_handler<2>().set(FUNC(mikrosha_state::mikrosha_pit_out2));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_screen_update("i8275", FUNC(i8275_device::screen_update));
+ screen.set_screen_update("crtc", FUNC(i8275_device::screen_update));
screen.set_refresh_hz(50);
screen.set_size(78*6, 30*10);
screen.set_visarea(0, 78*6-1, 0, 30*10-1);
@@ -250,12 +251,12 @@ void mikrosha_state::mikrosha(machine_config &config)
SPEAKER(config, "mono").front_center();
- I8257(config, m_dma8257, XTAL(16'000'000) / 9);
- m_dma8257->out_hrq_cb().set(FUNC(radio86_state::hrq_w));
- m_dma8257->in_memr_cb().set(FUNC(radio86_state::memory_read_byte));
- m_dma8257->out_memw_cb().set(FUNC(radio86_state::memory_write_byte));
- m_dma8257->out_iow_cb<2>().set("i8275", FUNC(i8275_device::dack_w));
- m_dma8257->set_reverse_rw_mode(1);
+ I8257(config, m_dma, XTAL(16'000'000) / 9);
+ m_dma->out_hrq_cb().set(FUNC(mikrosha_state::hrq_w));
+ m_dma->in_memr_cb().set(FUNC(mikrosha_state::memory_read_byte));
+ m_dma->out_memw_cb().set(FUNC(mikrosha_state::memory_write_byte));
+ m_dma->out_iow_cb<2>().set("crtc", FUNC(i8275_device::dack_w));
+ m_dma->set_reverse_rw_mode(1);
CASSETTE(config, m_cassette);
m_cassette->set_formats(rkm_cassette_formats);
@@ -272,21 +273,23 @@ void mikrosha_state::mikrosha(machine_config &config)
/* ROM definition */
ROM_START( mikrosha )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "mikrosha.rom", 0xf800, 0x0800, CRC(86a83556) SHA1(94b1baad0a419145939a891ff51f4324e8e4ddd2))
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "mikrosha.rom", 0x0000, 0x0800, CRC(86a83556) SHA1(94b1baad0a419145939a891ff51f4324e8e4ddd2))
+
+ ROM_REGION(0x0800, "chargen",0)
ROM_LOAD ("mikrosha.fnt", 0x0000, 0x0800, CRC(b315da1c) SHA1(b5bf9abc0fff75b1aba709a7f08b23d4a89bb04b))
ROM_END
ROM_START( m86rk )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "m86rk.bin", 0xf800, 0x0800, CRC(a898d77a) SHA1(c2497bf8434b5028fe0a9fc09be311465d5553a5))
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "m86rk.bin", 0x0000, 0x0800, CRC(a898d77a) SHA1(c2497bf8434b5028fe0a9fc09be311465d5553a5))
+
+ ROM_REGION(0x0800, "chargen",0)
/* here should probably be different rom */
ROM_LOAD ("mikrosha.fnt", 0x0000, 0x0800, CRC(b315da1c) SHA1(b5bf9abc0fff75b1aba709a7f08b23d4a89bb04b))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1987, mikrosha, radio86, 0, mikrosha, mikrosha, mikrosha_state, init_radio86, "Lianozovo Electromechanical Factory", "Mikrosha", 0)
-COMP( 1987, m86rk, radio86, 0, mikrosha, mikrosha, mikrosha_state, init_radio86, "<unknown>", "Mikrosha-86RK", 0)
+COMP( 1987, mikrosha, radio86, 0, mikrosha, mikrosha, mikrosha_state, init_radio86, "Lianozovo Electromechanical Factory", "Mikrosha", MACHINE_SUPPORTS_SAVE )
+COMP( 1987, m86rk, radio86, 0, mikrosha, mikrosha, mikrosha_state, init_radio86, "<unknown>", "Mikrosha-86RK", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/ondra.cpp b/src/mame/drivers/ondra.cpp
index 947043689ec..aed29ede721 100644
--- a/src/mame/drivers/ondra.cpp
+++ b/src/mame/drivers/ondra.cpp
@@ -16,9 +16,11 @@ ToDo:
- Sound is a speaker connected to a multivibrator circuit. There are 3 diodes
from this circuit to allow a choice of 7 frequencies. We have used a buzzer
with selected arbitrary frequencies, not having any idea what they should be.
-- Ondrav doesn't seem to accept any commands, only producing KOD 1 followed
- by halt. You have to press Esc before trying again.
-- Cassette not working. Doesn't load from softlist, and don't know how to save.
+- Ondrav: can load from softlist. Load the tape then press Enter.
+- Ondrav: doesn't seem to accept any other commands, need instructions.
+ You have to press Esc before trying again.
+- Ondrat: Doesn't load from softlist
+- Cassette: don't know how to save.
******************************************************************************/
@@ -35,7 +37,7 @@ ToDo:
void ondra_state::mem_map(address_map &map)
{
map(0x0000, 0x3fff).bankrw("bank1");
- map(0x4000, 0xdfff).ram();
+ map(0x4000, 0xdfff).bankrw("bank2");
map(0xe000, 0xffff).bankrw("bank3");
}
diff --git a/src/mame/drivers/orion.cpp b/src/mame/drivers/orion.cpp
index 94cdec70b03..97cbd7eac7d 100644
--- a/src/mame/drivers/orion.cpp
+++ b/src/mame/drivers/orion.cpp
@@ -2,10 +2,19 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- Orion driver by Miodrag Milanovic
+Orion driver by Miodrag Milanovic
- 22/04/2008 Orion Pro added
- 02/04/2008 Preliminary driver.
+2008-04-02 Preliminary driver.
+2008-04-22 Orion Pro added
+
+Orionide and orionidm produce ERROR at start, not sure why. The others
+appear to function well, as long as you use the romdisk software item.
+You can load tapes with the CH4 program which is found on the romdisk.
+
+Orionpro has its own menu. If you choose Orion Pro, you need to have the
+cpm370 disk in the drive. If you choose Orion 128, you need the romdisk.
+
+It's unknown how to create a tape.
****************************************************************************/
@@ -13,9 +22,7 @@
#include "emu.h"
#include "includes/orion.h"
-#include "imagedev/cassette.h"
#include "screen.h"
-#include "softlist.h"
#include "speaker.h"
#include "formats/smx_dsk.h"
@@ -25,7 +32,7 @@
/* Address maps */
/* Orion 128 */
-void orion_state::orion128_mem(address_map &map)
+void orion_state::mem_map(address_map &map)
{
map(0x0000, 0xefff).bankrw("bank1");
map(0xf000, 0xf3ff).bankrw("bank2");
@@ -39,7 +46,7 @@ void orion_state::orion128_mem(address_map &map)
}
/* Orion Z80 Card II */
-void orion_state::orion128_io(address_map &map)
+void orion_state::io_map(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
@@ -48,7 +55,7 @@ void orion_state::orion128_io(address_map &map)
map(0xfa, 0xfa).w(FUNC(orion_state::orion128_video_page_w));
}
-void orion_state::orionz80_mem(address_map &map)
+void orion_z80_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3fff).bankrw("bank1");
@@ -59,12 +66,12 @@ void orion_state::orionz80_mem(address_map &map)
}
/* Orion Pro */
-void orion_state::orionz80_io(address_map &map)
+void orion_z80_state::io_map(address_map &map)
{
- map(0x0000, 0xffff).rw(FUNC(orion_state::orionz80_io_r), FUNC(orion_state::orionz80_io_w));
+ map(0x0000, 0xffff).rw(FUNC(orion_z80_state::orionz80_io_r), FUNC(orion_z80_state::orionz80_io_w));
}
-void orion_state::orionpro_mem(address_map &map)
+void orion_pro_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).bankrw("bank1");
@@ -77,9 +84,9 @@ void orion_state::orionpro_mem(address_map &map)
map(0xf800, 0xffff).bankrw("bank8");
}
-void orion_state::orionpro_io(address_map &map)
+void orion_pro_state::io_map(address_map &map)
{
- map(0x0000, 0xffff).rw(FUNC(orion_state::orionpro_io_r), FUNC(orion_state::orionpro_io_w));
+ map(0x0000, 0xffff).rw(FUNC(orion_pro_state::orionpro_io_r), FUNC(orion_pro_state::orionpro_io_w));
}
FLOPPY_FORMATS_MEMBER( orion_state::orion_floppy_formats )
@@ -90,19 +97,19 @@ FLOPPY_FORMATS_END
void orion_state::orion128(machine_config &config)
{
I8080(config, m_maincpu, 2000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &orion_state::orion128_mem);
- m_maincpu->set_addrmap(AS_IO, &orion_state::orion128_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &orion_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &orion_state::io_map);
- auto &ppi1(I8255A(config, "ppi8255_1"));
- ppi1.in_pa_callback().set(FUNC(orion_state::orion_romdisk_porta_r));
- ppi1.out_pb_callback().set(FUNC(orion_state::orion_romdisk_portb_w));
- ppi1.out_pc_callback().set(FUNC(orion_state::orion_romdisk_portc_w));
+ I8255A(config, m_ppi1);
+ m_ppi1->in_pa_callback().set(FUNC(orion_state::orion_romdisk_porta_r));
+ m_ppi1->out_pb_callback().set(FUNC(orion_state::orion_romdisk_portb_w));
+ m_ppi1->out_pc_callback().set(FUNC(orion_state::orion_romdisk_portc_w));
- auto &ppi2(I8255A(config, "ppi8255_2"));
- ppi2.out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- ppi2.in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- ppi2.in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- ppi2.out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255A(config, m_ppi2);
+ m_ppi2->out_pa_callback().set(FUNC(orion_state::radio86_8255_porta_w2));
+ m_ppi2->in_pb_callback().set(FUNC(orion_state::radio86_8255_portb_r2));
+ m_ppi2->in_pc_callback().set(FUNC(orion_state::radio86_8255_portc_r2));
+ m_ppi2->out_pc_callback().set(FUNC(orion_state::radio86_8255_portc_w2));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -117,11 +124,11 @@ void orion_state::orion128(machine_config &config)
SPEAKER(config, "mono").front_center();
- auto &cassette(CASSETTE(config, "cassette"));
- cassette.set_formats(rko_cassette_formats);
- cassette.set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
- cassette.add_route(ALL_OUTPUTS, "mono", 0.05);
- cassette.set_interface("orion_cass");
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(rko_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
+ m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
+ m_cassette->set_interface("orion_cass");
SOFTWARE_LIST(config, "cass_list").set_original("orion_cass");
@@ -148,31 +155,31 @@ void orion_state::orion128(machine_config &config)
void orion_state::orion128ms(machine_config &config)
{
orion128(config);
- auto &ppi2(I8255A(config.replace(), "ppi8255_2"));
- ppi2.out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- ppi2.in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- ppi2.in_pc_callback().set(FUNC(radio86_state::rk7007_8255_portc_r));
- ppi2.out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255A(config.replace(), m_ppi2);
+ m_ppi2->out_pa_callback().set(FUNC(orion_state::radio86_8255_porta_w2));
+ m_ppi2->in_pb_callback().set(FUNC(orion_state::radio86_8255_portb_r2));
+ m_ppi2->in_pc_callback().set(FUNC(orion_state::rk7007_8255_portc_r));
+ m_ppi2->out_pc_callback().set(FUNC(orion_state::radio86_8255_portc_w2));
}
void orion_z80_state::orionz80(machine_config &config)
{
Z80(config, m_maincpu, 2500000);
- m_maincpu->set_addrmap(AS_PROGRAM, &orion_z80_state::orionz80_mem);
- m_maincpu->set_addrmap(AS_IO, &orion_z80_state::orionz80_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &orion_z80_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &orion_z80_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(orion_z80_state::orionz80_interrupt));
- auto &ppi1(I8255A(config, "ppi8255_1"));
- ppi1.in_pa_callback().set(FUNC(orion_z80_state::orion_romdisk_porta_r));
- ppi1.out_pb_callback().set(FUNC(orion_z80_state::orion_romdisk_portb_w));
- ppi1.out_pc_callback().set(FUNC(orion_z80_state::orion_romdisk_portc_w));
+ I8255A(config, m_ppi1);
+ m_ppi1->in_pa_callback().set(FUNC(orion_z80_state::orion_romdisk_porta_r));
+ m_ppi1->out_pb_callback().set(FUNC(orion_z80_state::orion_romdisk_portb_w));
+ m_ppi1->out_pc_callback().set(FUNC(orion_z80_state::orion_romdisk_portc_w));
- auto &ppi2(I8255A(config, "ppi8255_2"));
- ppi2.out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- ppi2.in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- ppi2.in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- ppi2.out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255A(config, m_ppi2);
+ m_ppi2->out_pa_callback().set(FUNC(orion_z80_state::radio86_8255_porta_w2));
+ m_ppi2->in_pb_callback().set(FUNC(orion_z80_state::radio86_8255_portb_r2));
+ m_ppi2->in_pc_callback().set(FUNC(orion_z80_state::radio86_8255_portc_r2));
+ m_ppi2->out_pc_callback().set(FUNC(orion_z80_state::radio86_8255_portc_w2));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -193,11 +200,11 @@ void orion_z80_state::orionz80(machine_config &config)
auto &ay8912(AY8912(config, "ay8912", 1773400));
ay8912.add_route(ALL_OUTPUTS, "mono", 1.00);
- auto &cassette(CASSETTE(config, "cassette"));
- cassette.set_formats(rko_cassette_formats);
- cassette.set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
- cassette.add_route(ALL_OUTPUTS, "mono", 0.05);
- cassette.set_interface("orion_cass");
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(rko_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
+ m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
+ m_cassette->set_interface("orion_cass");
SOFTWARE_LIST(config, "cass_list").set_original("orion_cass");
@@ -225,29 +232,29 @@ void orion_z80_state::orionz80ms(machine_config &config)
{
orionz80(config);
- auto &ppi2(I8255A(config.replace(), "ppi8255_2"));
- ppi2.out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- ppi2.in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- ppi2.in_pc_callback().set(FUNC(radio86_state::rk7007_8255_portc_r));
- ppi2.out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255A(config.replace(), m_ppi2);
+ m_ppi2->out_pa_callback().set(FUNC(orion_z80_state::radio86_8255_porta_w2));
+ m_ppi2->in_pb_callback().set(FUNC(orion_z80_state::radio86_8255_portb_r2));
+ m_ppi2->in_pc_callback().set(FUNC(orion_z80_state::rk7007_8255_portc_r));
+ m_ppi2->out_pc_callback().set(FUNC(orion_z80_state::radio86_8255_portc_w2));
}
void orion_pro_state::orionpro(machine_config &config)
{
Z80(config, m_maincpu, 5000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &orion_pro_state::orionpro_mem);
- m_maincpu->set_addrmap(AS_IO, &orion_pro_state::orionpro_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &orion_pro_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &orion_pro_state::io_map);
- auto &ppi1(I8255A(config, "ppi8255_1"));
- ppi1.in_pa_callback().set(FUNC(orion_pro_state::orion_romdisk_porta_r));
- ppi1.out_pb_callback().set(FUNC(orion_pro_state::orion_romdisk_portb_w));
- ppi1.out_pc_callback().set(FUNC(orion_pro_state::orion_romdisk_portc_w));
+ I8255A(config, m_ppi1);
+ m_ppi1->in_pa_callback().set(FUNC(orion_pro_state::orion_romdisk_porta_r));
+ m_ppi1->out_pb_callback().set(FUNC(orion_pro_state::orion_romdisk_portb_w));
+ m_ppi1->out_pc_callback().set(FUNC(orion_pro_state::orion_romdisk_portc_w));
- auto &ppi2(I8255A(config, "ppi8255_2"));
- ppi2.out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- ppi2.in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- ppi2.in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- ppi2.out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255A(config, m_ppi2);
+ m_ppi2->out_pa_callback().set(FUNC(orion_pro_state::radio86_8255_porta_w2));
+ m_ppi2->in_pb_callback().set(FUNC(orion_pro_state::radio86_8255_portb_r2));
+ m_ppi2->in_pc_callback().set(FUNC(orion_pro_state::radio86_8255_portc_r2));
+ m_ppi2->out_pc_callback().set(FUNC(orion_pro_state::radio86_8255_portc_w2));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -265,11 +272,11 @@ void orion_pro_state::orionpro(machine_config &config)
auto &ay8912(AY8912(config, "ay8912", 1773400));
ay8912.add_route(ALL_OUTPUTS, "mono", 1.00);
- auto &cassette(CASSETTE(config, "cassette"));
- cassette.set_formats(rko_cassette_formats);
- cassette.set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
- cassette.add_route(ALL_OUTPUTS, "mono", 0.05);
- cassette.set_interface("orion_cass");
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(rko_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
+ m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
+ m_cassette->set_interface("orion_cass");
SOFTWARE_LIST(config, "cass_list").set_original("orion_cass");
@@ -361,10 +368,10 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1990, orion128, 0, 0, orion128, radio86, orion_state, empty_init, "<unknown>", "Orion 128", 0 )
-COMP( 1990, orionms, orion128, 0, orion128ms, ms7007, orion_state, empty_init, "<unknown>", "Orion 128 (MS7007)", 0 )
-COMP( 1990, orionz80, orion128, 0, orionz80, radio86, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II", 0 )
-COMP( 1990, orionide, orion128, 0, orionz80, radio86, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II + IDE", 0 )
-COMP( 1990, orionzms, orion128, 0, orionz80ms, ms7007, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II (MS7007)", 0 )
-COMP( 1990, orionidm, orion128, 0, orionz80ms, ms7007, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II + IDE (MS7007)", 0 )
-COMP( 1994, orionpro, orion128, 0, orionpro, radio86, orion_pro_state, empty_init, "<unknown>", "Orion Pro", 0 )
+COMP( 1990, orion128, 0, 0, orion128, radio86, orion_state, empty_init, "<unknown>", "Orion 128", MACHINE_SUPPORTS_SAVE )
+COMP( 1990, orionms, orion128, 0, orion128ms, ms7007, orion_state, empty_init, "<unknown>", "Orion 128 (MS7007)", MACHINE_SUPPORTS_SAVE )
+COMP( 1990, orionz80, orion128, 0, orionz80, radio86, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II", MACHINE_SUPPORTS_SAVE )
+COMP( 1990, orionide, orion128, 0, orionz80, radio86, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II + IDE", MACHINE_SUPPORTS_SAVE )
+COMP( 1990, orionzms, orion128, 0, orionz80ms, ms7007, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II (MS7007)", MACHINE_SUPPORTS_SAVE )
+COMP( 1990, orionidm, orion128, 0, orionz80ms, ms7007, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II + IDE (MS7007)", MACHINE_SUPPORTS_SAVE )
+COMP( 1994, orionpro, orion128, 0, orionpro, radio86, orion_pro_state, empty_init, "<unknown>", "Orion Pro", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/partner.cpp b/src/mame/drivers/partner.cpp
index 2d361699bb0..442e019c79f 100644
--- a/src/mame/drivers/partner.cpp
+++ b/src/mame/drivers/partner.cpp
@@ -2,9 +2,15 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- Partner driver by Miodrag Milanovic
+Partner driver by Miodrag Milanovic
- 09/06/2008 Preliminary driver.
+2008-06-09 Preliminary driver.
+
+Works well with cassette. Need to find out how to access the built-in
+rom programs. Also need to find out how to access floppy disks, including
+those in the softlist.
+
+Cursor is one position too far to the right.
****************************************************************************/
@@ -13,10 +19,7 @@
#include "includes/partner.h"
#include "cpu/i8085/i8085.h"
-#include "imagedev/cassette.h"
-
#include "screen.h"
-#include "softlist.h"
#include "speaker.h"
#include "formats/rk_cas.h"
@@ -24,7 +27,7 @@
/* Address maps */
-void partner_state::partner_mem(address_map &map)
+void partner_state::mem_map(address_map &map)
{
map(0x0000, 0x07ff).bankrw("bank1");
map(0x0800, 0x3fff).bankrw("bank2");
@@ -36,12 +39,12 @@ void partner_state::partner_mem(address_map &map)
map(0xc000, 0xc7ff).bankrw("bank8");
map(0xc800, 0xcfff).bankrw("bank9");
map(0xd000, 0xd7ff).bankrw("bank10");
- map(0xd800, 0xd8ff).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)); // video
- map(0xd900, 0xd9ff).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0xda00, 0xdaff).w(FUNC(partner_state::partner_mem_page_w));
- map(0xdb00, 0xdbff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
+ map(0xd800, 0xd8ff).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write));
+ map(0xd900, 0xd9ff).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0xda00, 0xdaff).w(FUNC(partner_state::mem_page_w));
+ map(0xdb00, 0xdbff).w(m_dma, FUNC(i8257_device::write));
map(0xdc00, 0xddff).bankrw("bank11");
- map(0xde00, 0xdeff).w(FUNC(partner_state::partner_win_memory_page_w));
+ map(0xde00, 0xdeff).w(FUNC(partner_state::win_memory_page_w));
map(0xe000, 0xe7ff).bankrw("bank12");
map(0xe800, 0xffff).bankrw("bank13");
}
@@ -145,7 +148,7 @@ FLOPPY_FORMATS_MEMBER( partner_state::floppy_formats )
FLOPPY_FORMATS_END
/* F4 Character Displayer */
-static const gfx_layout partner_charlayout =
+static const gfx_layout charlayout =
{
8, 8, /* 8 x 8 characters */
512, /* 512 characters */
@@ -159,7 +162,7 @@ static const gfx_layout partner_charlayout =
};
static GFXDECODE_START( gfx_partner )
- GFXDECODE_ENTRY( "gfx1", 0x0000, partner_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@@ -167,22 +170,22 @@ void partner_state::partner(machine_config &config)
{
/* basic machine hardware */
I8080(config, m_maincpu, 16_MHz_XTAL / 9);
- m_maincpu->set_addrmap(AS_PROGRAM, &partner_state::partner_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &partner_state::mem_map);
- auto &ppi1(I8255(config, "ppi8255_1"));
- ppi1.out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- ppi1.in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- ppi1.in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- ppi1.out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255(config, m_ppi1);
+ m_ppi1->out_pa_callback().set(FUNC(partner_state::radio86_8255_porta_w2));
+ m_ppi1->in_pb_callback().set(FUNC(partner_state::radio86_8255_portb_r2));
+ m_ppi1->in_pc_callback().set(FUNC(partner_state::radio86_8255_portc_r2));
+ m_ppi1->out_pc_callback().set(FUNC(partner_state::radio86_8255_portc_w2));
- auto &i8275(I8275(config, "i8275", 16_MHz_XTAL / 12));
+ auto &i8275(I8275(config, "crtc", 16_MHz_XTAL / 12));
i8275.set_character_width(6);
i8275.set_display_callback(FUNC(partner_state::display_pixels));
- i8275.drq_wr_callback().set("dma8257", FUNC(i8257_device::dreq2_w));
+ i8275.drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq2_w));
/* video hardware */
auto &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_screen_update("i8275", FUNC(i8275_device::screen_update));
+ screen.set_screen_update("crtc", FUNC(i8275_device::screen_update));
screen.set_refresh_hz(50);
screen.set_size(78*6, 30*10);
screen.set_visarea(0, 78*6-1, 0, 30*10-1);
@@ -192,14 +195,14 @@ void partner_state::partner(machine_config &config)
SPEAKER(config, "mono").front_center();
- auto &dma8257(I8257(config, "dma8257", 16_MHz_XTAL / 9));
- dma8257.out_hrq_cb().set(FUNC(partner_state::hrq_w));
- dma8257.in_memr_cb().set(FUNC(partner_state::memory_read_byte));
- dma8257.out_memw_cb().set(FUNC(partner_state::memory_write_byte));
- dma8257.in_ior_cb<0>().set("wd1793", FUNC(fd1793_device::data_r));
- dma8257.out_iow_cb<0>().set("wd1793", FUNC(fd1793_device::data_w));
- dma8257.out_iow_cb<2>().set("i8275", FUNC(i8275_device::dack_w));
- dma8257.set_reverse_rw_mode(true);
+ I8257(config, m_dma, 16_MHz_XTAL / 9);
+ m_dma->out_hrq_cb().set(FUNC(partner_state::hrq_w));
+ m_dma->in_memr_cb().set(FUNC(partner_state::memory_read_byte));
+ m_dma->out_memw_cb().set(FUNC(partner_state::memory_write_byte));
+ m_dma->in_ior_cb<0>().set("fdc", FUNC(fd1793_device::data_r));
+ m_dma->out_iow_cb<0>().set("fdc", FUNC(fd1793_device::data_w));
+ m_dma->out_iow_cb<2>().set("crtc", FUNC(i8275_device::dack_w));
+ m_dma->set_reverse_rw_mode(true);
auto &cassette(CASSETTE(config, "cassette"));
cassette.set_formats(rkp_cassette_formats);
@@ -209,10 +212,10 @@ void partner_state::partner(machine_config &config)
SOFTWARE_LIST(config, "cass_list").set_original("partner_cass");
- FD1793(config, "wd1793", 16_MHz_XTAL / 16);
+ FD1793(config, "fdc", 16_MHz_XTAL / 16);
- FLOPPY_CONNECTOR(config, "fd0", "525qd", FLOPPY_525_QD, true, floppy_formats);
- FLOPPY_CONNECTOR(config, "fd1", "525qd", FLOPPY_525_QD, true, floppy_formats);
+ FLOPPY_CONNECTOR(config, "fd0", "525qd", FLOPPY_525_QD, true, floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fd1", "525qd", FLOPPY_525_QD, true, floppy_formats).enable_sound(true);
SOFTWARE_LIST(config, "flop_list").set_original("partner_flop");
@@ -224,16 +227,17 @@ void partner_state::partner(machine_config &config)
/* ROM definition */
ROM_START( partner )
- ROM_REGION( 0x1A000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "partner.rom", 0x10000, 0x2000, CRC(be1eaa10) SHA1(f9658d8055bf434240ec020d7892ea98cb5cbb76))
- ROM_LOAD( "basic.rom", 0x12000, 0x2000, CRC(1e9be0ec) SHA1(2c431f487cffddaac8413efddfc0527ad595f03b))
- ROM_LOAD( "mcpg.rom", 0x14000, 0x0800, CRC(3401225c) SHA1(6c252393ee73ed1a53d3e583547d86ab6718a533))
- ROM_LOAD( "fdd.rom", 0x16000, 0x0800, CRC(8ca350b5) SHA1(76fc92298726fb2840f4c19d7edc860d1ed86356))
- ROM_LOAD( "font.rom", 0x18000, 0x2000, CRC(dc4f1723) SHA1(6b8d5efb403cf0aeb3fd3197a0529d23c8e2f93c))
- ROM_REGION(0x2000, "gfx1",0)
- ROM_LOAD ("partner.fnt", 0x0000, 0x2000, CRC(2705f726) SHA1(3d7b33901ef098a405d7ddad924ba9677f6a9b15))
+ ROM_REGION( 0xA000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "partner.rom", 0x0000, 0x2000, CRC(be1eaa10) SHA1(f9658d8055bf434240ec020d7892ea98cb5cbb76))
+ ROM_LOAD( "basic.rom", 0x2000, 0x2000, CRC(1e9be0ec) SHA1(2c431f487cffddaac8413efddfc0527ad595f03b))
+ ROM_LOAD( "mcpg.rom", 0x4000, 0x0800, CRC(3401225c) SHA1(6c252393ee73ed1a53d3e583547d86ab6718a533))
+ ROM_LOAD( "fdd.rom", 0x6000, 0x0800, CRC(8ca350b5) SHA1(76fc92298726fb2840f4c19d7edc860d1ed86356))
+ ROM_LOAD( "font.rom", 0x8000, 0x2000, CRC(dc4f1723) SHA1(6b8d5efb403cf0aeb3fd3197a0529d23c8e2f93c))
+
+ ROM_REGION(0x2000, "chargen",0)
+ ROM_LOAD ("partner.d25", 0x0000, 0x2000, CRC(2705f726) SHA1(3d7b33901ef098a405d7ddad924ba9677f6a9b15))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1987, partner, radio86, 0, partner, partner, partner_state, init_partner, "SAM SKB VM", "Partner-01.01", MACHINE_NOT_WORKING )
+COMP( 1987, partner, radio86, 0, partner, partner, partner_state, init_partner, "SAM SKB VM", "Partner-01.01", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/radio86.cpp b/src/mame/drivers/radio86.cpp
index 6203769d5ab..81588e076c0 100644
--- a/src/mame/drivers/radio86.cpp
+++ b/src/mame/drivers/radio86.cpp
@@ -11,13 +11,8 @@
#include "emu.h"
#include "includes/radio86.h"
-
#include "cpu/i8085/i8085.h"
-#include "imagedev/cassette.h"
-#include "machine/i8255.h"
-
#include "screen.h"
-#include "softlist.h"
#include "speaker.h"
#include "formats/rk_cas.h"
@@ -26,13 +21,12 @@
/* Address maps */
void radio86_state::radio86_mem(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0x7fff).ram(); // RAM
- map(0x8000, 0x8003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- //map(0xa000, 0xa003).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- map(0xc000, 0xc001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
- map(0xe000, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf000, 0xffff).rom(); // System ROM
+ map(0x0000, 0x7fff).ram().share("mainram");
+ map(0x8000, 0x8003).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ //map(0xa000, 0xa003).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ map(0xc000, 0xc001).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
+ map(0xe000, 0xffff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf000, 0xffff).rom().region("maincpu",0); // System ROM
}
void radio86_state::radio86_io(address_map &map)
@@ -49,63 +43,58 @@ void radio86_state::rk7007_io(address_map &map)
void radio86_state::radio86rom_mem(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0x7fff).ram(); // RAM
- map(0x8000, 0x8003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- map(0xa000, 0xa003).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- map(0xc000, 0xc001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
- map(0xe000, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf000, 0xffff).rom(); // System ROM
+ map(0x0000, 0x7fff).ram().share("mainram");
+ map(0x8000, 0x8003).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ map(0xa000, 0xa003).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ map(0xc000, 0xc001).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
+ map(0xe000, 0xffff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf000, 0xffff).rom().region("maincpu",0); // System ROM
}
void radio86_state::radio86ram_mem(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0xdfff).ram(); // RAM
+ map(0x0000, 0xdfff).ram().share("mainram");
map(0xe000, 0xe7ff).rom(); // System ROM page 2
map(0xe800, 0xf5ff).ram(); // RAM
- map(0xf700, 0xf703).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0xf780, 0xf7bf).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)); // video
- map(0xf684, 0xf687).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0xf700, 0xf703).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0xf780, 0xf7bf).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)); // video
+ map(0xf684, 0xf687).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xf688, 0xf688).w(FUNC(radio86_state::radio86_pagesel));
- map(0xf800, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf800, 0xffff).rom(); // System ROM page 1
+ map(0xf800, 0xffff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf800, 0xffff).rom().region("maincpu",0); // System ROM page 1
}
void radio86_state::radio86_16_mem(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0x3fff).ram(); // RAM
+ map(0x0000, 0x3fff).ram().share("mainram");
map(0x4000, 0x7fff).r(FUNC(radio86_state::radio_cpu_state_r));
- map(0x8000, 0x8003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- //map(0xa000, 0xa003).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- map(0xc000, 0xc001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
- map(0xe000, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf000, 0xffff).rom(); // System ROM
+ map(0x8000, 0x8003).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ //map(0xa000, 0xa003).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ map(0xc000, 0xc001).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
+ map(0xe000, 0xffff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf000, 0xffff).rom().region("maincpu",0); // System ROM
}
void radio86_state::mikron2_mem(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0x7fff).ram(); // RAM
- map(0xc000, 0xc003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
- //map(0xc100, 0xc103).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
- map(0xc200, 0xc201).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x00fe); // video
- map(0xc300, 0xc3ff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf000, 0xffff).rom(); // System ROM
+ map(0x0000, 0x7fff).ram().share("mainram");
+ map(0xc000, 0xc003).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
+ //map(0xc100, 0xc103).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
+ map(0xc200, 0xc201).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x00fe); // video
+ map(0xc300, 0xc3ff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf000, 0xffff).rom().region("maincpu",0); // System ROM
}
void radio86_state::impuls03_mem(address_map &map)
{
- map(0x0000, 0x0fff).bankrw("bank1"); // First bank
- map(0x1000, 0x7fff).ram(); // RAM
- map(0x8000, 0x8003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- map(0xa000, 0xbfff).rom(); // Basic ROM
- map(0xc000, 0xc001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
- map(0xe000, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
- map(0xf000, 0xffff).rom(); // System ROM
+ map(0x0000, 0x7fff).ram().share("mainram");
+ map(0x8000, 0x8003).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
+ map(0xa000, 0xbfff).rom().region("maincpu",0x1000); // Basic ROM
+ map(0xc000, 0xc001).rw("crtc", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
+ map(0xe000, 0xffff).w(m_dma, FUNC(i8257_device::write)); // DMA
+ map(0xf000, 0xffff).rom().region("maincpu",0); // System ROM
}
/* Input ports */
@@ -456,7 +445,7 @@ static const gfx_layout radio86_charlayout =
};
static GFXDECODE_START( gfx_radio86 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, radio86_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, radio86_charlayout, 0, 1 )
GFXDECODE_END
@@ -468,32 +457,32 @@ void radio86_state::radio86(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &radio86_state::radio86_mem);
m_maincpu->set_addrmap(AS_IO, &radio86_state::radio86_io);
- I8255(config, m_ppi8255_1);
- m_ppi8255_1->out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- m_ppi8255_1->in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
- m_ppi8255_1->in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- m_ppi8255_1->out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ I8255(config, m_ppi1);
+ m_ppi1->out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
+ m_ppi1->in_pb_callback().set(FUNC(radio86_state::radio86_8255_portb_r2));
+ m_ppi1->in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
+ m_ppi1->out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
- i8275_device &crtc(I8275(config, "i8275", XTAL(16'000'000) / 12));
+ i8275_device &crtc(I8275(config, "crtc", XTAL(16'000'000) / 12));
crtc.set_character_width(6);
crtc.set_display_callback(FUNC(radio86_state::display_pixels));
- crtc.drq_wr_callback().set(m_dma8257, FUNC(i8257_device::dreq2_w));
+ crtc.drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq2_w));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_screen_update("i8275", FUNC(i8275_device::screen_update));
+ screen.set_screen_update("crtc", FUNC(i8275_device::screen_update));
screen.set_raw(XTAL(16'000'000) / 2, 516, 0, 78*6, 310, 0, 30*10);
GFXDECODE(config, "gfxdecode", m_palette, gfx_radio86);
PALETTE(config, m_palette, FUNC(radio86_state::radio86_palette), 3);
SPEAKER(config, "mono").front_center();
- I8257(config, m_dma8257, XTAL(16'000'000) / 9);
- m_dma8257->out_hrq_cb().set(FUNC(radio86_state::hrq_w));
- m_dma8257->in_memr_cb().set(FUNC(radio86_state::memory_read_byte));
- m_dma8257->out_memw_cb().set(FUNC(radio86_state::memory_write_byte));
- m_dma8257->out_iow_cb<2>().set("i8275", FUNC(i8275_device::dack_w));
- m_dma8257->set_reverse_rw_mode(1);
+ I8257(config, m_dma, XTAL(16'000'000) / 9);
+ m_dma->out_hrq_cb().set(FUNC(radio86_state::hrq_w));
+ m_dma->in_memr_cb().set(FUNC(radio86_state::memory_read_byte));
+ m_dma->out_memw_cb().set(FUNC(radio86_state::memory_write_byte));
+ m_dma->out_iow_cb<2>().set("crtc", FUNC(i8275_device::dack_w));
+ m_dma->set_reverse_rw_mode(1);
CASSETTE(config, m_cassette);
m_cassette->set_formats(rkr_cassette_formats);
@@ -510,10 +499,10 @@ void radio86_state::kr03(machine_config &config)
radio86(config);
/* basic machine hardware */
- m_ppi8255_1->out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
- m_ppi8255_1->in_pb_callback().set(FUNC(radio86_state::kr03_8255_portb_r2));
- m_ppi8255_1->in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
- m_ppi8255_1->out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
+ m_ppi1->out_pa_callback().set(FUNC(radio86_state::radio86_8255_porta_w2));
+ m_ppi1->in_pb_callback().set(FUNC(radio86_state::kr03_8255_portb_r2));
+ m_ppi1->in_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_r2));
+ m_ppi1->out_pc_callback().set(FUNC(radio86_state::radio86_8255_portc_w2));
}
void radio86_state::radio16(machine_config &config)
@@ -529,10 +518,10 @@ void radio86_state::radiorom(machine_config &config)
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &radio86_state::radio86rom_mem);
- I8255(config, m_ppi8255_2);
- m_ppi8255_2->in_pa_callback().set(FUNC(radio86_state::radio86rom_romdisk_porta_r));
- m_ppi8255_2->out_pb_callback().set(FUNC(radio86_state::radio86_romdisk_portb_w));
- m_ppi8255_2->out_pc_callback().set(FUNC(radio86_state::radio86_romdisk_portc_w));
+ I8255(config, m_ppi2);
+ m_ppi2->in_pa_callback().set(FUNC(radio86_state::radio86rom_romdisk_porta_r));
+ m_ppi2->out_pb_callback().set(FUNC(radio86_state::radio86_romdisk_portb_w));
+ m_ppi2->out_pc_callback().set(FUNC(radio86_state::radio86_romdisk_portc_w));
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "radio86_cart", "bin,rom");
@@ -545,10 +534,10 @@ void radio86_state::radioram(machine_config &config)
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &radio86_state::radio86ram_mem);
- I8255(config, m_ppi8255_2);
- m_ppi8255_2->in_pa_callback().set(FUNC(radio86_state::radio86ram_romdisk_porta_r));
- m_ppi8255_2->out_pb_callback().set(FUNC(radio86_state::radio86_romdisk_portb_w));
- m_ppi8255_2->out_pc_callback().set(FUNC(radio86_state::radio86_romdisk_portc_w));
+ I8255(config, m_ppi2);
+ m_ppi2->in_pa_callback().set(FUNC(radio86_state::radio86ram_romdisk_porta_r));
+ m_ppi2->out_pb_callback().set(FUNC(radio86_state::radio86_romdisk_portb_w));
+ m_ppi2->out_pc_callback().set(FUNC(radio86_state::radio86_romdisk_portc_w));
}
void radio86_state::rk7007(machine_config &config)
@@ -593,107 +582,119 @@ void radio86_state::impuls03(machine_config &config)
/* ROM definition */
ROM_START( radio86 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "bios.rom", 0xf800, 0x0800, CRC(bf1ceea5) SHA1(8f3d472203e550e9854dd79e1f44628635581ed0))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "bios.rom", 0x0800, 0x0800, CRC(bf1ceea5) SHA1(8f3d472203e550e9854dd79e1f44628635581ed0))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( radio4k )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "bios4k.rom", 0xf000, 0x1000, CRC(2ac9d864) SHA1(296716c6cddc9dd31d500ba421aa807c45757cfd))
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "bios4k.rom", 0x0000, 0x1000, CRC(2ac9d864) SHA1(296716c6cddc9dd31d500ba421aa807c45757cfd))
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( spektr01 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "spektr001.rom", 0xf800, 0x0800, CRC(5a38e6d5) SHA1(799c3bbe2a9f08f3aba55379cc093329048350ff))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "spektr001.rom", 0x0800, 0x0800, CRC(5a38e6d5) SHA1(799c3bbe2a9f08f3aba55379cc093329048350ff))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION(0x0800, "chargen",0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( radio16 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "rk86.16k", 0xf800, 0x0800, CRC(fd8a4caf) SHA1(90d6af571049a7c8748eac03541e921eac3f70c5))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "rk86.16k", 0x0800, 0x0800, CRC(fd8a4caf) SHA1(90d6af571049a7c8748eac03541e921eac3f70c5))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( radiorom )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "32k", "32 KB rom disk")
- ROMX_LOAD( "radiorom.rom", 0xf800, 0x0800, CRC(b5cdeab7) SHA1(1c80d72082f2fb2190b575726cb82d86ae0ee7d8), ROM_BIOS(0))
+ ROMX_LOAD( "radiorom.rom", 0x0800, 0x0800, CRC(b5cdeab7) SHA1(1c80d72082f2fb2190b575726cb82d86ae0ee7d8), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "64k", "64 KB rom disk")
- ROMX_LOAD( "radiorom.64", 0xf800, 0x0800, CRC(5250b927) SHA1(e885e0f5b2325190b38a4c92b20a8b4fa78fbd8f), ROM_BIOS(1))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROMX_LOAD( "radiorom.64", 0x0800, 0x0800, CRC(5250b927) SHA1(e885e0f5b2325190b38a4c92b20a8b4fa78fbd8f), ROM_BIOS(1))
+ ROM_COPY( "maincpu", 0x0800, 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( radioram )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "r86-1.bin", 0xf800, 0x0800, CRC(7e7ab7cb) SHA1(fedb00b6b8fbe1167faba3e4611b483f800e6934))
+ ROM_LOAD( "r86-1.bin", 0x0800, 0x0800, CRC(7e7ab7cb) SHA1(fedb00b6b8fbe1167faba3e4611b483f800e6934))
+ ROM_RELOAD( 0x0000, 0x0800 )
ROM_LOAD( "r86-2.bin", 0xe000, 0x0800, CRC(955f0616) SHA1(d2b9f960558bdcb60074091fc79d1ad56c313586))
ROM_LOAD( "romdisk.bin", 0x10000, 0x10000, CRC(43c0279b) SHA1(bc1dfd9bdbce39460616e2158f5d96279d0af3cf))
- ROM_REGION(0x0800, "gfx1",0)
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( rk7007 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "ms7007.rom", 0xf800, 0x0800, CRC(002811dc) SHA1(4529eb72198c49af77fbcd7833bcd06a1cf9b1ac))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "ms7007.rom", 0x0800, 0x0800, CRC(002811dc) SHA1(4529eb72198c49af77fbcd7833bcd06a1cf9b1ac))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( rk700716 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "ms7007.16k", 0xf800, 0x0800, CRC(5268d7b6) SHA1(efd69d8456b8cf8b37f33237153c659725608528))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "ms7007.16k", 0x0800, 0x0800, CRC(5268d7b6) SHA1(efd69d8456b8cf8b37f33237153c659725608528))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( mikron2 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "mikron2.bin", 0xf800, 0x0800, CRC(2cd79bb4) SHA1(501df47e65aaa8f4ce27751bc2a7e7089e2e888c))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "mikron2.bin", 0x0800, 0x0800, CRC(2cd79bb4) SHA1(501df47e65aaa8f4ce27751bc2a7e7089e2e888c))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( kr03 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "kr03-dd17.rf2", 0xf800, 0x0800, CRC(ac2e24d5) SHA1(a1317a261bfd55b3b37109b14d1391308dee04de))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "kr03-dd17.rf2", 0x0800, 0x0800, CRC(ac2e24d5) SHA1(a1317a261bfd55b3b37109b14d1391308dee04de))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("kr03-dd12.rf2", 0x0000, 0x0800, CRC(085f4259) SHA1(11c5829b072a00961ad936c26559fb63bf2dc896))
ROM_END
ROM_START( impuls03 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "imp03bas.rom", 0xa000, 0x2000, CRC(b13b2de4) SHA1(9af8c49d72ca257bc34cad3c62e530730929702e))
- ROM_LOAD( "imp03mon.rom", 0xf800, 0x0800, CRC(8c591ce4) SHA1(8e8e9cba6b3123d74218b92f4b4210606ba53376))
- ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_REGION(0x0800, "gfx1",0)
+ ROM_REGION( 0x3000, "maincpu", 0 )
+ ROM_LOAD( "imp03bas.rom", 0x1000, 0x2000, CRC(b13b2de4) SHA1(9af8c49d72ca257bc34cad3c62e530730929702e))
+ ROM_LOAD( "imp03mon.rom", 0x0800, 0x0800, CRC(8c591ce4) SHA1(8e8e9cba6b3123d74218b92f4b4210606ba53376))
+ ROM_RELOAD( 0x0000, 0x0800 )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1986, radio86, 0, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK", 0 )
-COMP( 1986, radio16, radio86, 0, radio16, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (16K RAM)", 0 )
-COMP( 1986, kr03, radio86, 0, kr03, kr03, radio86_state, init_radio86, "Elektronika", "KR-03", 0 )
-COMP( 1986, radio4k, radio86, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (4K ROM)", 0 )
-COMP( 1986, radiorom, radio86, 0, radiorom, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (ROM-Disk)", 0 )
-COMP( 1986, radioram, radio86, 0, radioram, radio86, radio86_state, init_radioram, "<unknown>", "Radio-86RK (ROM/RAM Disk)", 0 )
-COMP( 1986, spektr01, radio86, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Spektr-001", 0 )
-COMP( 1986, rk7007, radio86, 0, rk7007, ms7007, radio86_state, init_radio86, "<unknown>", "Radio-86RK (MS7007)", 0 )
-COMP( 1986, rk700716, radio86, 0, rk700716, ms7007, radio86_state, init_radio86, "<unknown>", "Radio-86RK (MS7007 16K RAM)", 0 )
-COMP( 1986, mikron2, radio86, 0, mikron2, radio86, radio86_state, init_radio86, "<unknown>", "Mikron-2", 0 )
-COMP( 1986, impuls03, radio86, 0, impuls03, radio86, radio86_state, init_radio86, "<unknown>", "Impuls-03", 0 )
+COMP( 1986, radio86, 0, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, radio16, radio86, 0, radio16, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (16K RAM)", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, kr03, radio86, 0, kr03, kr03, radio86_state, init_radio86, "Elektronika", "KR-03", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, radio4k, radio86, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (4K ROM)", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, radiorom, radio86, 0, radiorom, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (ROM-Disk)", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, radioram, radio86, 0, radioram, radio86, radio86_state, init_radioram, "<unknown>", "Radio-86RK (ROM/RAM Disk)", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, spektr01, radio86, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Spektr-001", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, rk7007, radio86, 0, rk7007, ms7007, radio86_state, init_radio86, "<unknown>", "Radio-86RK (MS7007)", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, rk700716, radio86, 0, rk700716, ms7007, radio86_state, init_radio86, "<unknown>", "Radio-86RK (MS7007 16K RAM)", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, mikron2, radio86, 0, mikron2, radio86, radio86_state, init_radio86, "<unknown>", "Mikron-2", MACHINE_SUPPORTS_SAVE )
+COMP( 1986, impuls03, radio86, 0, impuls03, radio86, radio86_state, init_radio86, "<unknown>", "Impuls-03", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/orion.h b/src/mame/includes/orion.h
index c179261033a..95921bd82e7 100644
--- a/src/mame/includes/orion.h
+++ b/src/mame/includes/orion.h
@@ -86,13 +86,7 @@ protected:
void orion_romdisk_portb_w(uint8_t data);
void orion_romdisk_portc_w(uint8_t data);
DECLARE_FLOPPY_FORMATS( orion_floppy_formats );
-
- void orion128_io(address_map &map);
- void orion128_mem(address_map &map);
- void orionpro_io(address_map &map);
- void orionpro_mem(address_map &map);
- void orionz80_io(address_map &map);
- void orionz80_mem(address_map &map);
+ void machine_start() override;
uint8_t m_orion128_video_mode;
uint8_t m_orion128_video_page;
@@ -135,8 +129,11 @@ protected:
void orionz80_switch_bank();
void orion_set_video_mode(int width);
void orionpro_bank_switch();
- virtual void machine_start() override;
- virtual void machine_reset() override;
+
+private:
+ void machine_reset() override;
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
};
class orion_z80_state : public orion_state
@@ -149,9 +146,10 @@ public:
void orionz80(machine_config &config);
void orionz80ms(machine_config &config);
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
+private:
+ void machine_reset() override;
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
};
class orion_pro_state : public orion_state
@@ -163,8 +161,10 @@ public:
void orionpro(machine_config &config);
-protected:
- virtual void machine_reset() override;
+private:
+ void machine_reset() override;
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
};
#endif // MAME_INCLUDES_ORION_H
diff --git a/src/mame/includes/partner.h b/src/mame/includes/partner.h
index ee315670c22..d64851b99b3 100644
--- a/src/mame/includes/partner.h
+++ b/src/mame/includes/partner.h
@@ -24,37 +24,39 @@ public:
partner_state(const machine_config &mconfig, device_type type, const char *tag)
: radio86_state(mconfig, type, tag)
, m_ram(*this, RAM_TAG)
- , m_fdc(*this, "wd1793")
+ , m_fdc(*this, "fdc")
, m_bank(*this, "bank%u", 1U)
- {
- }
+ { }
- uint8_t partner_floppy_r(offs_t offset);
- void partner_floppy_w(offs_t offset, uint8_t data);
- void partner_win_memory_page_w(uint8_t data);
- void partner_mem_page_w(uint8_t data);
void init_partner();
+ void partner(machine_config &config);
+
+private:
+ u8 floppy_r(offs_t offset);
+ void floppy_w(offs_t offset, u8 data);
+ void win_memory_page_w(u8 data);
+ void mem_page_w(u8 data);
I8275_DRAW_CHARACTER_MEMBER(display_pixels);
DECLARE_FLOPPY_FORMATS( floppy_formats );
- void partner(machine_config &config);
- void partner_mem(address_map &map);
-protected:
- void partner_window_1(uint8_t bank_num, uint16_t offset,uint8_t *rom);
- void partner_window_2(uint8_t bank_num, uint16_t offset,uint8_t *rom);
- void partner_iomap_bank(uint8_t *rom);
- void partner_bank_switch();
+ void mem_map(address_map &map);
+
+ void window_1(uint8_t bank_num, uint16_t offset,uint8_t *rom);
+ void window_2(uint8_t bank_num, uint16_t offset,uint8_t *rom);
+ void iomap_bank(uint8_t *rom);
+ void bank_switch();
- uint8_t m_mem_page;
- uint8_t m_win_mem_page;
+ u8 m_mem_page;
+ u8 m_win_mem_page;
required_device<ram_device> m_ram;
required_device<fd1793_device> m_fdc;
required_memory_bank_array<13> m_bank;
- virtual void machine_reset() override;
+ void machine_reset() override;
+ void machine_start() override;
};
diff --git a/src/mame/includes/radio86.h b/src/mame/includes/radio86.h
index 3d323527a6a..958fe495ac4 100644
--- a/src/mame/includes/radio86.h
+++ b/src/mame/includes/radio86.h
@@ -22,56 +22,23 @@
class radio86_state : public driver_device
{
public:
- enum
- {
- TIMER_RESET
- };
-
- radio86_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_cassette(*this, "cassette"),
- m_cart(*this, "cartslot"),
- m_dma8257(*this, "dma8257"),
- m_ppi8255_1(*this, "ppi8255_1"),
- m_ppi8255_2(*this, "ppi8255_2"),
- m_region_maincpu(*this, "maincpu"),
- m_bank1(*this, "bank1"),
- m_io_line(*this, "LINE%u", 0),
- m_io_cline(*this, "CLINE%u", 0),
- m_palette(*this, "palette"),
- m_charmap(*this, "gfx1")
+ radio86_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_cassette(*this, "cassette")
+ , m_cart(*this, "cartslot")
+ , m_dma(*this, "dma")
+ , m_ppi1(*this, "ppi1")
+ , m_ppi2(*this, "ppi2")
+ , m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
+ , m_bank1(*this, "bank1")
+ , m_io_line(*this, "LINE%u", 0U)
+ , m_io_cline(*this, "CLINE%u", 0U)
+ , m_palette(*this, "palette")
+ , m_chargen(*this, "chargen")
{ }
- uint8_t m_tape_value;
- int m_keyboard_mask;
- std::unique_ptr<uint8_t[]> m_radio_ram_disk;
- uint8_t m_romdisk_lsb;
- uint8_t m_romdisk_msb;
- uint8_t m_disk_sel;
- uint8_t radio_cpu_state_r();
- uint8_t radio_io_r(offs_t offset);
- void radio_io_w(offs_t offset, uint8_t data);
- void radio86_pagesel(uint8_t data);
- void init_radioram();
- void init_radio86();
- void radio86_palette(palette_device &palette) const;
- uint8_t radio86_8255_portb_r2();
- uint8_t radio86_8255_portc_r2();
- void radio86_8255_porta_w2(uint8_t data);
- void radio86_8255_portc_w2(uint8_t data);
- uint8_t rk7007_8255_portc_r();
- uint8_t kr03_8255_portb_r2();
- void hrq_w(int state);
- uint8_t radio86rom_romdisk_porta_r();
- uint8_t radio86ram_romdisk_porta_r();
- void radio86_romdisk_portb_w(uint8_t data);
- void radio86_romdisk_portc_w(uint8_t data);
- uint8_t memory_read_byte(offs_t offset);
- void memory_write_byte(offs_t offset, uint8_t data);
- I8275_DRAW_CHARACTER_MEMBER(display_pixels);
- required_device<cpu_device> m_maincpu;
-
void impuls03(machine_config &config);
void mikron2(machine_config &config);
void rk7007(machine_config &config);
@@ -81,20 +48,14 @@ public:
void radio16(machine_config &config);
void radioram(machine_config &config);
void kr03(machine_config &config);
+ void init_radioram();
+ void init_radio86();
protected:
- required_device<cassette_image_device> m_cassette;
- optional_device<generic_slot_device> m_cart; // for ROMDisk - only Radio86K & Orion?
- optional_device<i8257_device> m_dma8257;
- required_device<i8255_device> m_ppi8255_1;
- optional_device<i8255_device> m_ppi8255_2;
- required_memory_region m_region_maincpu;
- required_memory_bank m_bank1;
- required_ioport_array<9> m_io_line;
- optional_ioport_array<8> m_io_cline;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- virtual void machine_reset() override;
+
+ void machine_reset() override;
+ void machine_start() override;
void radio86_init_keyboard();
@@ -107,8 +68,48 @@ protected:
void radio86rom_mem(address_map &map);
void rk7007_io(address_map &map);
+ uint8_t m_tape_value;
+ uint8_t radio_cpu_state_r();
+ uint8_t radio_io_r(offs_t offset);
+ void radio_io_w(offs_t offset, uint8_t data);
+ uint8_t radio86_8255_portb_r2();
+ uint8_t radio86_8255_portc_r2();
+ uint8_t rk7007_8255_portc_r();
+ void radio86_8255_porta_w2(uint8_t data);
+ void radio86_8255_portc_w2(uint8_t data);
+ void radio86_palette(palette_device &palette) const;
+ void hrq_w(int state);
+ uint8_t memory_read_byte(offs_t offset);
+ void memory_write_byte(offs_t offset, uint8_t data);
+
+ memory_passthrough_handler *m_rom_shadow_tap;
+ required_device<cpu_device> m_maincpu;
+ required_device<cassette_image_device> m_cassette;
+ optional_device<generic_slot_device> m_cart; // for ROMDisk - only Radio86K & Orion?
+ optional_device<i8257_device> m_dma;
+ required_device<i8255_device> m_ppi1;
+ optional_device<i8255_device> m_ppi2;
+ required_region_ptr<u8> m_rom;
+ optional_shared_ptr<u8> m_ram;
+ optional_memory_bank m_bank1;
+ required_ioport_array<9> m_io_line;
+ optional_ioport_array<8> m_io_cline;
required_device<palette_device> m_palette;
- optional_region_ptr<uint8_t> m_charmap;
+ optional_region_ptr<uint8_t> m_chargen;
+
+private:
+ int m_keyboard_mask;
+ std::unique_ptr<uint8_t[]> m_radio_ram_disk;
+ uint8_t m_romdisk_lsb;
+ uint8_t m_romdisk_msb;
+ uint8_t m_disk_sel;
+ void radio86_pagesel(uint8_t data);
+ uint8_t kr03_8255_portb_r2();
+ uint8_t radio86rom_romdisk_porta_r();
+ uint8_t radio86ram_romdisk_porta_r();
+ void radio86_romdisk_portb_w(uint8_t data);
+ void radio86_romdisk_portc_w(uint8_t data);
+ I8275_DRAW_CHARACTER_MEMBER(display_pixels);
};
diff --git a/src/mame/machine/ondra.cpp b/src/mame/machine/ondra.cpp
index a525537b609..86af7833ba2 100644
--- a/src/mame/machine/ondra.cpp
+++ b/src/mame/machine/ondra.cpp
@@ -125,4 +125,5 @@ void ondra_state::machine_start()
save_item(NAME(m_video_enable));
save_item(NAME(m_bank_status));
save_item(NAME(m_bank_old));
+ membank("bank2")->set_base(m_ram->pointer() + 0x4000);
}
diff --git a/src/mame/machine/orion.cpp b/src/mame/machine/orion.cpp
index 2f2f77109aa..d00112f6677 100644
--- a/src/mame/machine/orion.cpp
+++ b/src/mame/machine/orion.cpp
@@ -13,7 +13,6 @@
#include "emu.h"
#include "includes/orion.h"
-#include "imagedev/cassette.h"
#include "screen.h"
@@ -42,29 +41,24 @@ void orion_state::orion_romdisk_portc_w(uint8_t data)
m_romdisk_msb = data;
}
-void orion_state::machine_start()
-{
- m_video_mode_mask = 7;
-}
-
uint8_t orion_state::orion128_system_r(offs_t offset)
{
- return m_ppi8255_2->read(offset & 3);
+ return m_ppi2->read(offset & 3);
}
void orion_state::orion128_system_w(offs_t offset, uint8_t data)
{
- m_ppi8255_2->write(offset & 3, data);
+ m_ppi2->write(offset & 3, data);
}
uint8_t orion_state::orion128_romdisk_r(offs_t offset)
{
- return m_ppi8255_1->read(offset & 3);
+ return m_ppi1->read(offset & 3);
}
void orion_state::orion128_romdisk_w(offs_t offset, uint8_t data)
{
- m_ppi8255_1->write(offset & 3, data);
+ m_ppi1->write(offset & 3, data);
}
void orion_state::orion_set_video_mode(int width)
@@ -75,9 +69,9 @@ void orion_state::orion_set_video_mode(int width)
void orion_state::orion128_video_mode_w(uint8_t data)
{
- if ((data & 0x80)!=(m_orion128_video_mode & 0x80))
+ if (BIT(data, 7)!=BIT(m_orion128_video_mode, 7))
{
- if ((data & 0x80)==0x80)
+ if (BIT(data, 7))
{
if (m_video_mode_mask == 31)
{
@@ -104,9 +98,9 @@ void orion_state::orion128_video_page_w(uint8_t data)
{
if (m_orion128_video_page != data)
{
- if ((data & 0x80)!=(m_orion128_video_page & 0x80))
+ if (BIT(data, 7)!=BIT(m_orion128_video_page, 7))
{
- if ((data & 0x80)==0x80)
+ if (BIT(data, 7))
{
if (m_video_mode_mask == 31)
{
@@ -141,16 +135,40 @@ void orion_state::orion128_memory_page_w(uint8_t data)
void orion_state::machine_reset()
{
+ m_video_mode_mask = 7;
m_orion128_video_page = 0;
m_orion128_video_mode = 0;
m_orion128_memory_page = -1;
- m_bank1->set_base(m_region_maincpu->base() + 0xf800);
+ m_bank1->set_base(m_rom + 0xf800);
m_bank2->set_base(m_ram->pointer() + 0xf000);
m_orion128_video_width = SCREEN_WIDTH_384;
orion_set_video_mode(384);
radio86_init_keyboard();
}
+void orion_state::machine_start()
+{
+ save_item(NAME(m_tape_value));
+ save_item(NAME(m_orion128_video_mode));
+ save_item(NAME(m_orion128_video_page));
+ save_item(NAME(m_orion128_video_width));
+ save_item(NAME(m_video_mode_mask));
+ save_item(NAME(m_orionpro_pseudo_color));
+ save_item(NAME(m_romdisk_lsb));
+ save_item(NAME(m_romdisk_msb));
+ save_item(NAME(m_orion128_memory_page));
+ save_item(NAME(m_orionz80_memory_page));
+ save_item(NAME(m_orionz80_dispatcher));
+ save_item(NAME(m_speaker_data));
+ save_item(NAME(m_orionpro_ram0_segment));
+ save_item(NAME(m_orionpro_ram1_segment));
+ save_item(NAME(m_orionpro_ram2_segment));
+ save_item(NAME(m_orionpro_page));
+ save_item(NAME(m_orionpro_128_page));
+ save_item(NAME(m_orionpro_rom2_segment));
+ save_item(NAME(m_orionpro_dispatcher));
+}
+
void orion_state::orion_disk_control_w(uint8_t data)
{
floppy_connector *names[] = { m_fd0, m_fd1, m_fd2, m_fd3};
@@ -197,43 +215,26 @@ void orion_state::orion128_floppy_w(offs_t offset, uint8_t data)
uint8_t orion_state::orionz80_floppy_rtc_r(offs_t offset)
{
if ((offset >= 0x60) && (offset <= 0x6f))
- {
return m_rtc->read(offset-0x60);
- }
else
- {
return orion128_floppy_r(offset);
- }
}
void orion_state::orionz80_floppy_rtc_w(offs_t offset, uint8_t data)
{
if ((offset >= 0x60) && (offset <= 0x6f))
- {
m_rtc->write(offset-0x60,data);
- }
else
- {
orion128_floppy_w(offset,data);
- }
-}
-
-
-void orion_z80_state::machine_start()
-{
- m_video_mode_mask = 7;
}
void orion_state::orionz80_sound_w(uint8_t data)
{
if (m_speaker_data == 0)
- {
m_speaker_data = data;
- }
else
- {
m_speaker_data = 0;
- }
+
m_speaker->level_w(m_speaker_data);
}
@@ -243,7 +244,6 @@ void orion_state::orionz80_sound_fe_w(uint8_t data)
m_speaker->level_w(BIT(data, 4));
}
-
void orion_state::orionz80_switch_bank()
{
uint8_t bank_select;
@@ -282,7 +282,7 @@ void orion_state::orionz80_switch_bank()
space.install_write_handler(0xff00, 0xffff, write8smo_delegate(*this, FUNC(orion_state::orionz80_sound_w)));
m_bank3->set_base(m_ram->pointer() + 0xf000);
- m_bank5->set_base(m_region_maincpu->base() + 0xf800);
+ m_bank5->set_base(m_rom + 0xf800);
}
else
@@ -329,12 +329,12 @@ void orion_z80_state::machine_reset()
space.install_write_handler(0xff00, 0xffff, write8smo_delegate(*this, FUNC(orion_z80_state::orionz80_sound_w)));
- m_bank1->set_base(m_region_maincpu->base() + 0xf800);
+ m_bank1->set_base(m_rom + 0xf800);
m_bank2->set_base(m_ram->pointer() + 0x4000);
m_bank3->set_base(m_ram->pointer() + 0xf000);
- m_bank5->set_base(m_region_maincpu->base() + 0xf800);
-
+ m_bank5->set_base(m_rom + 0xf800);
+ m_video_mode_mask = 7;
m_orion128_video_page = 0;
m_orion128_video_mode = 0;
m_orionz80_memory_page = 0;
@@ -348,17 +348,14 @@ void orion_z80_state::machine_reset()
INTERRUPT_GEN_MEMBER(orion_state::orionz80_interrupt)
{
if ((m_orionz80_dispatcher & 0x40)==0x40)
- {
device.execute().set_input_line(0, HOLD_LINE);
- }
}
uint8_t orion_state::orionz80_io_r(offs_t offset)
{
if (offset == 0xFFFD)
- {
return m_ay8912->data_r();
- }
+
return 0xff;
}
@@ -383,12 +380,6 @@ void orion_state::orionz80_io_w(offs_t offset, uint8_t data)
}
}
-
-
-
-
-
-
void orion_state::orionpro_bank_switch()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
@@ -397,9 +388,8 @@ void orion_state::orionpro_bank_switch()
uint8_t *ram = m_ram->pointer();
if (is128==1)
- {
page = m_orionpro_128_page & 7;
- }
+
space.install_write_bank(0x0000, 0x1fff, "bank1");
space.install_write_bank(0x2000, 0x3fff, "bank2");
space.install_write_bank(0x4000, 0x7fff, "bank3");
@@ -423,12 +413,12 @@ void orion_state::orionpro_bank_switch()
if ((m_orionpro_dispatcher & 0x10)==0x10)
{ // ROM1 enabled
space.unmap_write(0x0000, 0x1fff);
- m_bank1->set_base(m_region_maincpu->base() + 0x20000);
+ m_bank1->set_base(m_rom + 0x20000);
}
if ((m_orionpro_dispatcher & 0x08)==0x08)
{ // ROM2 enabled
space.unmap_write(0x2000, 0x3fff);
- m_bank2->set_base(m_region_maincpu->base() + 0x22000 + (m_orionpro_rom2_segment & 7) * 0x2000);
+ m_bank2->set_base(m_rom + 0x22000 + (m_orionpro_rom2_segment & 7) * 0x2000);
}
if ((m_orionpro_dispatcher & 0x02)==0x00)
diff --git a/src/mame/machine/partner.cpp b/src/mame/machine/partner.cpp
index a00be2dd7be..69f9c201922 100644
--- a/src/mame/machine/partner.cpp
+++ b/src/mame/machine/partner.cpp
@@ -11,7 +11,6 @@
#include "emu.h"
#include "cpu/i8085/i8085.h"
-#include "imagedev/cassette.h"
#include "includes/radio86.h"
#include "includes/partner.h"
@@ -21,97 +20,104 @@ void partner_state::init_partner()
m_tape_value = 0x80;
}
-void partner_state::partner_window_1(uint8_t bank_num, uint16_t offset,uint8_t *rom)
+void partner_state::window_1(u8 bank_num, u16 offset, u8 *rom)
{
- switch(m_win_mem_page) {
+ switch(m_win_mem_page)
+ {
case 2 : // FDD BIOS
- m_bank[bank_num]->set_base(rom + 0x16000 + offset);
+ m_bank[bank_num]->set_base(rom + 0x6000 + offset);
break;
case 4 : // MCPG BIOS
- m_bank[bank_num]->set_base(rom + 0x14000 + offset);
+ m_bank[bank_num]->set_base(rom + 0x4000 + offset);
break;
default : // BIOS
- m_bank[bank_num]->set_base(rom + 0x10000 + offset);
+ m_bank[bank_num]->set_base(rom + offset);
break;
}
}
-void partner_state::partner_window_2(uint8_t bank_num, uint16_t offset,uint8_t *rom)
+void partner_state::window_2(u8 bank_num, u16 offset, u8 *rom)
{
- switch(m_win_mem_page) {
+ switch(m_win_mem_page)
+ {
case 4 : // MCPG FONT
- m_bank[bank_num]->set_base(rom + 0x18000 + offset);
+ m_bank[bank_num]->set_base(rom + 0x8000 + offset);
break;
default : // BIOS
- m_bank[bank_num]->set_base(rom + 0x10000 + offset);
+ m_bank[bank_num]->set_base(rom + offset);
break;
}
}
-uint8_t partner_state::partner_floppy_r(offs_t offset)
+u8 partner_state::floppy_r(offs_t offset)
{
- if (offset<0x100) {
- switch(offset & 3) {
+ if (offset<0x100)
+ switch(offset & 3)
+ {
case 0x00 : return m_fdc->status_r();
case 0x01 : return m_fdc->track_r();
case 0x02 : return m_fdc->sector_r();
default :
return m_fdc->data_r();
}
- } else {
+ else
return 0;
- }
}
-void partner_state::partner_floppy_w(offs_t offset, uint8_t data)
+void partner_state::floppy_w(offs_t offset, u8 data)
{
- if (offset<0x100) {
- switch(offset & 3) {
+ if (offset<0x100)
+ switch(offset & 3)
+ {
case 0x00 : m_fdc->cmd_w(data); break;
case 0x01 : m_fdc->track_w(data);break;
case 0x02 : m_fdc->sector_w(data);break;
default : m_fdc->data_w(data);break;
}
- } else {
+ else
+ {
floppy_image_device *floppy0 = m_fdc->subdevice<floppy_connector>("0")->get_device();
floppy_image_device *floppy1 = m_fdc->subdevice<floppy_connector>("1")->get_device();
- if (((data >> 6) & 1)==1) {
+ if (BIT(data, 6))
+ {
m_fdc->set_floppy(floppy0);
floppy0->mon_w(0);
- floppy0->ss_w(data >> 7);
+ floppy0->ss_w(BIT(data, 7));
}
else
floppy0->mon_w(1);
- if (((data >> 3) & 1)==1) {
+ if (BIT(data, 3))
+ {
m_fdc->set_floppy(floppy1);
floppy1->mon_w(0);
- floppy1->ss_w(data >> 7);
+ floppy1->ss_w(BIT(data, 7));
}
else
floppy1->mon_w(1);
}
}
-void partner_state::partner_iomap_bank(uint8_t *rom)
+void partner_state::iomap_bank(u8 *rom)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- switch(m_win_mem_page) {
+ switch(m_win_mem_page)
+ {
case 2 :
// FDD
- space.install_write_handler(0xdc00, 0xddff, write8sm_delegate(*this, FUNC(partner_state::partner_floppy_w)));
- space.install_read_handler (0xdc00, 0xddff, read8sm_delegate(*this, FUNC(partner_state::partner_floppy_r)));
+ space.install_write_handler(0xdc00, 0xddff, write8sm_delegate(*this, FUNC(partner_state::floppy_w)));
+ space.install_read_handler (0xdc00, 0xddff, read8sm_delegate(*this, FUNC(partner_state::floppy_r)));
break;
case 4 :
// Timer
break;
default : // BIOS
- m_bank[10]->set_base(rom + 0x10000);
+ m_bank[10]->set_base(rom);
break;
}
}
-void partner_state::partner_bank_switch()
+void partner_state::bank_switch()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
uint8_t *rom = memregion("maincpu")->base();
@@ -133,60 +139,63 @@ void partner_state::partner_bank_switch()
space.unmap_write(0xe800, 0xffff);
// BANK 1 (0x0000 - 0x07ff)
- if (m_mem_page==0) {
+ if (m_mem_page==0)
+ {
space.unmap_write(0x0000, 0x07ff);
- m_bank[0]->set_base(rom + 0x10000);
- } else {
- if (m_mem_page==7) {
+ m_bank[0]->set_base(rom);
+ }
+ else
+ {
+ if (m_mem_page==7)
m_bank[0]->set_base(ram + 0x8000);
- } else {
- m_bank[0]->set_base(ram + 0x0000);
- }
+ else
+ m_bank[0]->set_base(ram);
}
// BANK 2 (0x0800 - 0x3fff)
- if (m_mem_page==7) {
+ if (m_mem_page==7)
m_bank[1]->set_base(ram + 0x8800);
- } else {
+ else
m_bank[1]->set_base(ram + 0x0800);
- }
// BANK 3 (0x4000 - 0x5fff)
- if (m_mem_page==7) {
+ if (m_mem_page==7)
m_bank[2]->set_base(ram + 0xC000);
- } else {
- if (m_mem_page==10) {
+ else
+ {
+ if (m_mem_page==10)
+ {
//window 1
space.unmap_write(0x4000, 0x5fff);
- partner_window_1(2, 0, rom);
- } else {
- m_bank[2]->set_base(ram + 0x4000);
+ window_1(2, 0, rom);
}
+ else
+ m_bank[2]->set_base(ram + 0x4000);
}
// BANK 4 (0x6000 - 0x7fff)
- if (m_mem_page==7) {
+ if (m_mem_page==7)
m_bank[3]->set_base(ram + 0xe000);
- } else {
+ else
m_bank[3]->set_base(ram + 0x6000);
- }
// BANK 5 (0x8000 - 0x9fff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 5:
case 10:
//window 2
space.unmap_write(0x8000, 0x9fff);
- partner_window_2(4, 0, rom);
+ window_2(4, 0, rom);
break;
case 8:
case 9:
//window 1
space.unmap_write(0x8000, 0x9fff);
- partner_window_1(4, 0, rom);
+ window_1(4, 0, rom);
break;
case 7:
- m_bank[4]->set_base(ram + 0x0000);
+ m_bank[4]->set_base(ram);
break;
default:
m_bank[4]->set_base(ram + 0x8000);
@@ -194,18 +203,19 @@ void partner_state::partner_bank_switch()
}
// BANK 6 (0xa000 - 0xb7ff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 5:
case 10:
//window 2
space.unmap_write(0xa000, 0xb7ff);
- partner_window_2(5, 0, rom);
+ window_2(5, 0, rom);
break;
case 6:
case 8:
//BASIC
space.unmap_write(0xa000, 0xb7ff);
- m_bank[5]->set_base(rom + 0x12000); // BASIC
+ m_bank[5]->set_base(rom + 0x2000); // BASIC
break;
case 7:
m_bank[5]->set_base(ram + 0x2000);
@@ -216,19 +226,20 @@ void partner_state::partner_bank_switch()
}
// BANK 7 (0xb800 - 0xbfff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 4:
case 5:
case 10:
//window 2
space.unmap_write(0xb800, 0xbfff);
- partner_window_2(6, 0x1800, rom);
+ window_2(6, 0x1800, rom);
break;
case 6:
case 8:
//BASIC
space.unmap_write(0xb800, 0xbfff);
- m_bank[6]->set_base(rom + 0x13800); // BASIC
+ m_bank[6]->set_base(rom + 0x3800); // BASIC
break;
case 7:
m_bank[6]->set_base(ram + 0x3800);
@@ -239,14 +250,15 @@ void partner_state::partner_bank_switch()
}
// BANK 8 (0xc000 - 0xc7ff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 7:
m_bank[7]->set_base(ram + 0x4000);
break;
case 8:
case 10:
space.unmap_write(0xc000, 0xc7ff);
- m_bank[7]->set_base(rom + 0x10000);
+ m_bank[7]->set_base(rom);
break;
default:
m_bank[7]->set_base(ram + 0xc000);
@@ -254,7 +266,8 @@ void partner_state::partner_bank_switch()
}
// BANK 9 (0xc800 - 0xcfff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 7:
m_bank[8]->set_base(ram + 0x4800);
break;
@@ -262,11 +275,11 @@ void partner_state::partner_bank_switch()
case 9:
// window 2
space.unmap_write(0xc800, 0xcfff);
- partner_window_2(8, 0, rom);
+ window_2(8, 0, rom);
break;
case 10:
space.unmap_write(0xc800, 0xcfff);
- m_bank[8]->set_base(rom + 0x10800);
+ m_bank[8]->set_base(rom + 0x0800);
break;
default:
m_bank[8]->set_base(ram + 0xc800);
@@ -274,7 +287,8 @@ void partner_state::partner_bank_switch()
}
// BANK 10 (0xd000 - 0xd7ff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 7:
m_bank[9]->set_base(ram + 0x5000);
break;
@@ -282,7 +296,7 @@ void partner_state::partner_bank_switch()
case 9:
// window 2
space.unmap_write(0xd000, 0xd7ff);
- partner_window_2(9, 0x0800, rom);
+ window_2(9, 0x0800, rom);
break;
default:
m_bank[9]->set_base(ram + 0xd000);
@@ -290,66 +304,72 @@ void partner_state::partner_bank_switch()
}
// BANK 11 (0xdc00 - 0xddff)
- partner_iomap_bank(rom);
+ iomap_bank(rom);
// BANK 12 (0xe000 - 0xe7ff)
- if (m_mem_page==1) {
- m_bank[11]->set_base(rom + 0x10000);
- } else {
+ if (m_mem_page==1)
+ m_bank[11]->set_base(rom);
+ else
//window 1
- partner_window_1(12, 0, rom);
- }
+ window_1(12, 0, rom);
// BANK 13 (0xe800 - 0xffff)
- switch (m_mem_page) {
+ switch (m_mem_page)
+ {
case 3:
case 4:
case 5:
// window 1
- partner_window_1(12, 0x800, rom);
+ window_1(12, 0x800, rom);
break;
default:
// BIOS
- m_bank[12]->set_base(rom + 0x10800);
+ m_bank[12]->set_base(rom + 0x0800);
break;
}
}
-void partner_state::partner_win_memory_page_w(uint8_t data)
+void partner_state::win_memory_page_w(u8 data)
{
m_win_mem_page = ~data;
- partner_bank_switch();
+ bank_switch();
}
-void partner_state::partner_mem_page_w(uint8_t data)
+void partner_state::mem_page_w(u8 data)
{
m_mem_page = (data >> 4) & 0x0f;
- partner_bank_switch();
+ bank_switch();
}
I8275_DRAW_CHARACTER_MEMBER(partner_state::display_pixels)
{
int i;
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- const uint8_t *charmap = m_charmap + 0x400 * (gpa * 2 + hlgt);
- uint8_t pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
+ const u8 *charmap = m_chargen + 0x400 * (gpa * 2 + hlgt);
+ u8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
+ if (vsp)
pixels = 0;
- }
- if (lten) {
+
+ if (lten)
pixels = 0xff;
- }
- if (rvv) {
+
+ if (rvv)
pixels ^= 0xff;
- }
- for(i=0;i<6;i++) {
+
+ for(i=0;i<6;i++)
bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1];
- }
}
void partner_state::machine_reset()
{
m_mem_page = 0;
m_win_mem_page = 0;
- partner_bank_switch();
+ bank_switch();
+}
+
+void partner_state::machine_start()
+{
+ save_item(NAME(m_tape_value));
+ save_item(NAME(m_mem_page));
+ save_item(NAME(m_win_mem_page));
}
diff --git a/src/mame/machine/radio86.cpp b/src/mame/machine/radio86.cpp
index 8bac08a48f2..14517a58409 100644
--- a/src/mame/machine/radio86.cpp
+++ b/src/mame/machine/radio86.cpp
@@ -11,7 +11,6 @@
#include "emu.h"
#include "cpu/i8085/i8085.h"
-#include "machine/i8255.h"
#include "includes/radio86.h"
@@ -25,30 +24,23 @@ void radio86_state::radio86_init_keyboard()
/* Driver initialization */
void radio86_state::init_radio86()
{
- /* set initialy ROM to be visible on first bank */
- uint8_t *RAM = m_region_maincpu->base();
- memset(RAM,0x0000,0x1000); // make frist page empty by default
- m_bank1->configure_entries(1, 2, RAM, 0x0000);
- m_bank1->configure_entries(0, 2, RAM, 0xf800);
radio86_init_keyboard();
}
void radio86_state::init_radioram()
{
init_radio86();
- m_radio_ram_disk = std::make_unique<uint8_t[]>(0x20000);
- memset(m_radio_ram_disk.get(),0,0x20000);
+ m_radio_ram_disk = make_unique_clear<u8[]>(0x20000);
+ save_pointer(NAME(m_radio_ram_disk), 0x20000);
}
-uint8_t radio86_state::radio86_8255_portb_r2()
+u8 radio86_state::radio86_8255_portb_r2()
{
- uint8_t key = 0xff;
- for (int i = 0; i < 8; i++)
- {
- if (BIT(m_keyboard_mask, i)) {
+ u8 key = 0xff;
+ for (u8 i = 0; i < 8; i++)
+ if (BIT(m_keyboard_mask, i))
key &= m_io_line[i]->read();
- }
- }
+
return key;
}
@@ -70,41 +62,39 @@ uint8_t radio86_state::kr03_8255_portb_r2()
return key;
}
-uint8_t radio86_state::radio86_8255_portc_r2()
+u8 radio86_state::radio86_8255_portc_r2()
{
double level = m_cassette->input();
- uint8_t dat = m_io_line[8]->read();
- if (level < 0) {
+ u8 dat = m_io_line[8]->read();
+ if (level < 0)
dat ^= m_tape_value;
- }
+
return dat;
}
-void radio86_state::radio86_8255_porta_w2(uint8_t data)
+void radio86_state::radio86_8255_porta_w2(u8 data)
{
m_keyboard_mask = data ^ 0xff;
}
-void radio86_state::radio86_8255_portc_w2(uint8_t data)
+void radio86_state::radio86_8255_portc_w2(u8 data)
{
m_cassette->output(data & 0x01 ? 1 : -1);
}
-uint8_t radio86_state::rk7007_8255_portc_r()
+u8 radio86_state::rk7007_8255_portc_r()
{
double level = m_cassette->input();
- uint8_t key = 0xff;
- for (int i = 0; i < 8; i++)
- {
- if ((m_keyboard_mask & (1 << i))!=0) {
+ u8 key = 0xff;
+ for (u8 i = 0; i < 8; i++)
+ if ((m_keyboard_mask & (1 << i))!=0)
key &= m_io_cline[i]->read();
- }
- }
+
key &= 0xe0;
- if (level < 0) {
+ if (level < 0)
key ^= m_tape_value;
- }
+
return key;
}
@@ -114,94 +104,101 @@ void radio86_state::hrq_w(int state)
m_maincpu->set_input_line(INPUT_LINE_HALT, state);
/* HACK - this should be connected to the BUSACK line of Z80 */
- m_dma8257->hlda_w(state);
+ m_dma->hlda_w(state);
}
-uint8_t radio86_state::memory_read_byte(offs_t offset)
+u8 radio86_state::memory_read_byte(offs_t offset)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM);
return prog_space.read_byte(offset);
}
-void radio86_state::memory_write_byte(offs_t offset, uint8_t data)
+void radio86_state::memory_write_byte(offs_t offset, u8 data)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM);
return prog_space.write_byte(offset, data);
}
-void radio86_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_RESET:
- m_bank1->set_entry(0);
- break;
- default:
- throw emu_fatalerror("Unknown id in radio86_state::device_timer");
- }
-}
-
-
-uint8_t radio86_state::radio_cpu_state_r()
+u8 radio86_state::radio_cpu_state_r()
{
- // FIXME: the driver should handler the status callback rather than accessing this through the state interface
+ // FIXME: the driver should handle the status callback rather than accessing this through the state interface
return m_maincpu->state_int(i8080_cpu_device::I8085_STATUS);
}
-uint8_t radio86_state::radio_io_r(offs_t offset)
+u8 radio86_state::radio_io_r(offs_t offset)
{
return m_maincpu->space(AS_PROGRAM).read_byte((offset << 8) + offset);
}
-void radio86_state::radio_io_w(offs_t offset, uint8_t data)
+void radio86_state::radio_io_w(offs_t offset, u8 data)
{
m_maincpu->space(AS_PROGRAM).write_byte((offset << 8) + offset,data);
}
void radio86_state::machine_reset()
{
- timer_set(attotime::from_usec(10), TIMER_RESET);
- m_bank1->set_entry(1);
-
m_keyboard_mask = 0;
m_disk_sel = 0;
+
+ address_space &program = m_maincpu->space(AS_PROGRAM);
+ program.install_rom(0x0000, 0x0fff, m_rom); // do it here for F3
+ m_rom_shadow_tap = program.install_read_tap(0xf000, 0xffff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask)
+ {
+ if (!machine().side_effects_disabled())
+ {
+ // delete this tap
+ m_rom_shadow_tap->remove();
+
+ // reinstall ram over the rom shadow
+ m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0fff, m_ram);
+ }
+
+ // return the original data
+ return data;
+ });
}
+void radio86_state::machine_start()
+{
+ save_item(NAME(m_tape_value));
+ save_item(NAME(m_keyboard_mask));
+ save_item(NAME(m_romdisk_lsb));
+ save_item(NAME(m_romdisk_msb));
+ save_item(NAME(m_disk_sel));
+}
-void radio86_state::radio86_pagesel(uint8_t data)
+void radio86_state::radio86_pagesel(u8 data)
{
m_disk_sel = data;
}
-uint8_t radio86_state::radio86rom_romdisk_porta_r()
+u8 radio86_state::radio86rom_romdisk_porta_r()
{
- uint16_t addr = (m_romdisk_msb << 8) | m_romdisk_lsb;
+ u16 addr = (m_romdisk_msb << 8) | m_romdisk_lsb;
if (m_cart->exists() && addr < m_cart->get_rom_size())
return m_cart->read_rom(addr);
else
return 0xff;
}
-uint8_t radio86_state::radio86ram_romdisk_porta_r()
+u8 radio86_state::radio86ram_romdisk_porta_r()
{
- uint8_t *romdisk = m_region_maincpu->base() + 0x10000;
- if ((m_disk_sel & 0x0f) ==0) {
+ u8 *romdisk = m_rom + 0x10000;
+ if ((m_disk_sel & 0x0f) ==0)
return romdisk[m_romdisk_msb*256+m_romdisk_lsb];
- } else {
- if (m_disk_sel==0xdf) {
- return m_radio_ram_disk[m_romdisk_msb*256+m_romdisk_lsb + 0x10000];
- } else {
- return m_radio_ram_disk[m_romdisk_msb*256+m_romdisk_lsb];
- }
- }
+ else
+ if (m_disk_sel==0xdf)
+ return m_radio_ram_disk[m_romdisk_msb*256+m_romdisk_lsb + 0x10000];
+ else
+ return m_radio_ram_disk[m_romdisk_msb*256+m_romdisk_lsb];
}
-void radio86_state::radio86_romdisk_portb_w(uint8_t data)
+void radio86_state::radio86_romdisk_portb_w(u8 data)
{
m_romdisk_lsb = data;
}
-void radio86_state::radio86_romdisk_portc_w(uint8_t data)
+void radio86_state::radio86_romdisk_portc_w(u8 data)
{
m_romdisk_msb = data;
}
@@ -209,7 +206,7 @@ void radio86_state::radio86_romdisk_portc_w(uint8_t data)
I8275_DRAW_CHARACTER_MEMBER(radio86_state::display_pixels)
{
rgb_t const *const palette = m_palette->palette()->entry_list_raw();
- uint8_t pixels = m_charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
+ u8 pixels = m_chargen[(linecount & 7) + (charcode << 3)] ^ 0xff;
if (vsp)
pixels = 0;
@@ -219,7 +216,7 @@ I8275_DRAW_CHARACTER_MEMBER(radio86_state::display_pixels)
if (rvv)
pixels ^= 0xff;
- for (int i = 0; i < 6; i++)
+ for (u8 i = 0; i < 6; i++)
bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
}