mirror of
https://github.com/holub/mame
synced 2025-07-07 19:03:29 +03:00
orion, partner, radio86, mikrosha, apogee: small cleanup
ondra: fixed bug, updated xml.
This commit is contained in:
parent
30d5688756
commit
db0ac05718
@ -2,14 +2,18 @@
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0
|
||||
|
||||
These tapes only work on ondrav. Load the tape and press Enter. Tape will load and then the program will run by itself.
|
||||
If asked for numbers, press letters: Q = 1, W = 2, E = 3, etc.
|
||||
|
||||
-->
|
||||
<softwarelist name="ondra" description="Ondra & Ondra ViLi cassettes">
|
||||
|
||||
<software name="copyfile">
|
||||
<description>COPYFILE</description>
|
||||
<description>Copyfile Utility</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="112800">
|
||||
<rom name="copyfile.wav" size="112800" crc="b3049df0" sha1="9172a09b22d2e532c96f87ffab098f8b292fecf3"/>
|
||||
@ -18,10 +22,10 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="editasm">
|
||||
<description>EDITASM</description>
|
||||
<description>Microsoft Editor/Assembler 10.0</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="1015968">
|
||||
<rom name="editasm.wav" size="1015968" crc="62b18cc1" sha1="71850e204e17c44d3dcd7cda9e9d8717d96063a8"/>
|
||||
@ -33,7 +37,7 @@ license:CC0
|
||||
<description>GALAXIANS</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move, Space to fire." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="1449244">
|
||||
<rom name="galaxians.wav" size="1449244" crc="e9245841" sha1="bc24392a6ac9db4730363cea8efda4f090d3d1b1"/>
|
||||
@ -42,10 +46,10 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="jetpac">
|
||||
<description>JETPAC</description>
|
||||
<description>Jetpac</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move and fly, Space to fire." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="1304736">
|
||||
<rom name="jetpac.wav" size="1304736" crc="d69d30d2" sha1="9919166ce9b954188af163bcfe52db6df4da8df6"/>
|
||||
@ -54,10 +58,10 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="jetset">
|
||||
<description>JETSETWILLY</description>
|
||||
<description>Jet Set Willy</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load. Press enter a few times to start. Arrows to move, Space to jump." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="2308256">
|
||||
<rom name="jetsetwilly.wav" size="2308256" crc="753c51fd" sha1="4342dc96eb60fe5ee92222542c714dc22eda77a0"/>
|
||||
@ -69,7 +73,7 @@ license:CC0
|
||||
<description>KAREL</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="385184">
|
||||
<rom name="karel.wav" size="385184" crc="c10354de" sha1="e640e63e5fc4fe34af33ecfaf57196cc00917b71"/>
|
||||
@ -78,10 +82,10 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="mikos">
|
||||
<description>MIKOS</description>
|
||||
<description>MIKOS v0.5</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run. Emulates ondrat." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="297120">
|
||||
<rom name="mikos.wav" size="297120" crc="4ba186d4" sha1="56e15d9e064afa2196a235ff25f504256779ca5a"/>
|
||||
@ -90,10 +94,10 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="pascal">
|
||||
<description>PASCAL</description>
|
||||
<description>Hisoft Pascal System</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="1732768">
|
||||
<rom name="pascal.wav" size="1732768" crc="e9b74b24" sha1="6ba4fd152e8c2e60483f7725ab73f8e5bf39445d"/>
|
||||
@ -105,7 +109,7 @@ license:CC0
|
||||
<description>PLANETOIDS</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to turn, Space to fire." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="1355936">
|
||||
<rom name="planetoids.wav" size="1355936" crc="8d517fd8" sha1="e34600276d188018b66a1077697c9a63b9565692"/>
|
||||
@ -117,7 +121,7 @@ license:CC0
|
||||
<description>PSSST</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Works only on the Ondra ViLi" />
|
||||
<info name="usage" value="Ondrav only. Hit enter to load and run. Arrows to move, get the spray can, Space to fire." />
|
||||
<part name="cass" interface="ondra_cass">
|
||||
<dataarea name="cass" size="1380112">
|
||||
<rom name="pssst.wav" size="1380112" crc="745ed80b" sha1="2bab363cc8efbac52c46d1ecc09184a667c9c1f3"/>
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user