diff options
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 |
commit | db0ac057181541798dbe61b01c736c1d7f327c70 (patch) | |
tree | 20263cbe49a803a374c4095a3ac3efd976023ace | |
parent | 30d56887568c2dc7c252a6ff8044af6ab05f9bc9 (diff) |
orion, partner, radio86, mikrosha, apogee: small cleanup
ondra: fixed bug, updated xml.
-rw-r--r-- | hash/ondra.xml | 36 | ||||
-rw-r--r-- | src/mame/drivers/apogee.cpp | 126 | ||||
-rw-r--r-- | src/mame/drivers/mikrosha.cpp | 119 | ||||
-rw-r--r-- | src/mame/drivers/ondra.cpp | 10 | ||||
-rw-r--r-- | src/mame/drivers/orion.cpp | 163 | ||||
-rw-r--r-- | src/mame/drivers/partner.cpp | 88 | ||||
-rw-r--r-- | src/mame/drivers/radio86.cpp | 255 | ||||
-rw-r--r-- | src/mame/includes/orion.h | 28 | ||||
-rw-r--r-- | src/mame/includes/partner.h | 36 | ||||
-rw-r--r-- | src/mame/includes/radio86.h | 121 | ||||
-rw-r--r-- | src/mame/machine/ondra.cpp | 1 | ||||
-rw-r--r-- | src/mame/machine/orion.cpp | 94 | ||||
-rw-r--r-- | src/mame/machine/partner.cpp | 198 | ||||
-rw-r--r-- | src/mame/machine/radio86.cpp | 137 |
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 & Ondra ViLi cassettes"> <software name="copyfile"> - <description>COPYFILE</description> + <description>Copyfile Utility</description> <year>19??</year> <publisher><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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]; } |