orion, partner, radio86, mikrosha, apogee: small cleanup

ondra: fixed bug, updated xml.
This commit is contained in:
Robbbert 2020-07-09 00:05:46 +10:00
parent 30d5688756
commit db0ac05718
14 changed files with 735 additions and 677 deletions

View File

@ -2,14 +2,18 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
These tapes only work on ondrav. Load the tape and press Enter. Tape will load and then the program will run by itself.
If asked for numbers, press letters: Q = 1, W = 2, E = 3, etc.
-->
<softwarelist name="ondra" description="Ondra &amp; Ondra ViLi cassettes">
<software name="copyfile">
<description>COPYFILE</description>
<description>Copyfile Utility</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="112800">
<rom name="copyfile.wav" size="112800" crc="b3049df0" sha1="9172a09b22d2e532c96f87ffab098f8b292fecf3"/>
@ -18,10 +22,10 @@ license:CC0
</software>
<software name="editasm">
<description>EDITASM</description>
<description>Microsoft Editor/Assembler 10.0</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1015968">
<rom name="editasm.wav" size="1015968" crc="62b18cc1" sha1="71850e204e17c44d3dcd7cda9e9d8717d96063a8"/>
@ -33,7 +37,7 @@ license:CC0
<description>GALAXIANS</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1449244">
<rom name="galaxians.wav" size="1449244" crc="e9245841" sha1="bc24392a6ac9db4730363cea8efda4f090d3d1b1"/>
@ -42,10 +46,10 @@ license:CC0
</software>
<software name="jetpac">
<description>JETPAC</description>
<description>Jetpac</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move and fly, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1304736">
<rom name="jetpac.wav" size="1304736" crc="d69d30d2" sha1="9919166ce9b954188af163bcfe52db6df4da8df6"/>
@ -54,10 +58,10 @@ license:CC0
</software>
<software name="jetset">
<description>JETSETWILLY</description>
<description>Jet Set Willy</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load. Press enter a few times to start. Arrows to move, Space to jump." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="2308256">
<rom name="jetsetwilly.wav" size="2308256" crc="753c51fd" sha1="4342dc96eb60fe5ee92222542c714dc22eda77a0"/>
@ -69,7 +73,7 @@ license:CC0
<description>KAREL</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="385184">
<rom name="karel.wav" size="385184" crc="c10354de" sha1="e640e63e5fc4fe34af33ecfaf57196cc00917b71"/>
@ -78,10 +82,10 @@ license:CC0
</software>
<software name="mikos">
<description>MIKOS</description>
<description>MIKOS v0.5</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run. Emulates ondrat." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="297120">
<rom name="mikos.wav" size="297120" crc="4ba186d4" sha1="56e15d9e064afa2196a235ff25f504256779ca5a"/>
@ -90,10 +94,10 @@ license:CC0
</software>
<software name="pascal">
<description>PASCAL</description>
<description>Hisoft Pascal System</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1732768">
<rom name="pascal.wav" size="1732768" crc="e9b74b24" sha1="6ba4fd152e8c2e60483f7725ab73f8e5bf39445d"/>
@ -105,7 +109,7 @@ license:CC0
<description>PLANETOIDS</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to turn, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1355936">
<rom name="planetoids.wav" size="1355936" crc="8d517fd8" sha1="e34600276d188018b66a1077697c9a63b9565692"/>
@ -117,7 +121,7 @@ license:CC0
<description>PSSST</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Works only on the Ondra ViLi" />
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move, get the spray can, Space to fire." />
<part name="cass" interface="ondra_cass">
<dataarea name="cass" size="1380112">
<rom name="pssst.wav" size="1380112" crc="745ed80b" sha1="2bab363cc8efbac52c46d1ecc09184a667c9c1f3"/>

View File

@ -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 )

View File

@ -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 )

View File

@ -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");
}

View File

@ -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 )

View File

@ -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 )

View File

@ -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 )

View File

@ -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

View File

@ -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);
uint8_t m_mem_page;
uint8_t m_win_mem_page;
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();
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;
};

View File

@ -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);
};

View File

@ -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);
}

View File

@ -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)

View File

@ -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));
}

View File

@ -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)
u8 radio86_state::radio_cpu_state_r()
{
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()
{
// 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];
}