summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/primo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/primo.c')
-rw-r--r--src/mess/machine/primo.c358
1 files changed, 0 insertions, 358 deletions
diff --git a/src/mess/machine/primo.c b/src/mess/machine/primo.c
deleted file mode 100644
index 1295fe14b8d..00000000000
--- a/src/mess/machine/primo.c
+++ /dev/null
@@ -1,358 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Krzysztof Strzecha
-/*******************************************************************************
-
- primo.c
-
- Functions to emulate general aspects of Microkey Primo computers
- (RAM, ROM, interrupts, I/O ports)
-
- Krzysztof Strzecha
-
-*******************************************************************************/
-
-/* Core includes */
-#include "emu.h"
-#include "includes/primo.h"
-
-/* Components */
-#include "cpu/z80/z80.h"
-#include "bus/cbmiec/cbmiec.h"
-#include "sound/speaker.h"
-
-/* Devices */
-#include "imagedev/cassette.h"
-#include "imagedev/snapquik.h"
-
-
-
-/*******************************************************************************
-
- Interrupt callback
-
-*******************************************************************************/
-
-INTERRUPT_GEN_MEMBER(primo_state::primo_vblank_interrupt)
-{
- if (m_nmi)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
-/*******************************************************************************
-
- Memory banking
-
-*******************************************************************************/
-
-void primo_state::primo_update_memory()
-{
- address_space& space = m_maincpu->space(AS_PROGRAM);
- switch (m_port_FD & 0x03)
- {
- case 0x00: /* Original ROM */
- space.unmap_write(0x0000, 0x3fff);
- membank("bank1")->set_base(memregion("maincpu")->base() + 0x10000);
- break;
- case 0x01: /* EPROM extension 1 */
- space.unmap_write(0x0000, 0x3fff);
- membank("bank1")->set_base(m_cart2_rom->base());
- break;
- case 0x02: /* RAM */
- space.install_write_bank(0x0000, 0x3fff, "bank1");
- membank("bank1")->set_base(memregion("maincpu")->base());
- break;
- case 0x03: /* EPROM extension 2 */
- space.unmap_write(0x0000, 0x3fff);
- membank("bank1")->set_base(m_cart1_rom->base());
- break;
- }
- logerror ("Memory update: %02x\n", m_port_FD);
-}
-
-/*******************************************************************************
-
- IO read/write handlers
-
-*******************************************************************************/
-
-READ8_MEMBER(primo_state::primo_be_1_r)
-{
- UINT8 data = 0x00;
- static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" };
-
- // bit 7, 6 - not used
-
- // bit 5 - VBLANK
- data |= (machine().first_screen()->vblank()) ? 0x20 : 0x00;
-
- // bit 4 - I4 (external bus)
-
- // bit 3 - I3 (external bus)
-
- // bit 2 - cassette
- data |= (m_cassette->input() < 0.1) ? 0x04 : 0x00;
-
- // bit 1 - reset button
- data |= (ioport("RESET")->read()) ? 0x02 : 0x00;
-
- // bit 0 - keyboard
- data |= (ioport(portnames[(offset & 0x0030) >> 4])->read() >> (offset&0x000f)) & 0x0001 ? 0x01 : 0x00;
-
- return data;
-}
-
-READ8_MEMBER(primo_state::primo_be_2_r)
-{
- UINT8 data = 0xff;
-
- // bit 7, 6 - not used
-
- // bit 5 - SCLK
- if (!m_iec->clk_r())
- data &= ~0x20;
-
- // bit 4 - SDATA
- if (!m_iec->data_r())
- data &= ~0x10;
-
- // bit 3 - SRQ
- if (!m_iec->srq_r())
- data &= ~0x08;
-
- // bit 2 - joystic 2 (not implemeted yet)
-
- // bit 1 - ATN
- if (!m_iec->atn_r())
- data &= ~0x02;
-
- // bit 0 - joystic 1 (not implemeted yet)
-
- logerror ("IOR BE-2 data:%02x\n", data);
- return data;
-}
-
-WRITE8_MEMBER(primo_state::primo_ki_1_w)
-{
- // bit 7 - NMI generator enable/disable
- m_nmi = (data & 0x80) ? 1 : 0;
-
- // bit 6 - joystick register shift (not emulated)
-
- // bit 5 - V.24 (2) / tape control (not emulated)
-
- // bit 4 - speaker
- m_speaker->level_w(BIT(data, 4));
-
- // bit 3 - display buffer
- if (data & 0x08)
- m_video_memory_base |= 0x2000;
- else
- m_video_memory_base &= 0xdfff;
-
- // bit 2 - V.24 (1) / tape control (not emulated)
-
- // bit 1, 0 - cassette output
- switch (data & 0x03)
- {
- case 0:
- m_cassette->output(-1.0);
- break;
- case 1:
- case 2:
- m_cassette->output(0.0);
- break;
- case 3:
- m_cassette->output(1.0);
- break;
- }
-}
-
-WRITE8_MEMBER(primo_state::primo_ki_2_w)
-{
- // bit 7, 6 - not used
-
- // bit 5 - SCLK
- m_iec->clk_w(!BIT(data, 5));
-
- // bit 4 - SDATA
- m_iec->data_w(!BIT(data, 4));
-
- // bit 3 - not used
-
- // bit 2 - SRQ
- m_iec->srq_w(!BIT(data, 2));
-
- // bit 1 - ATN
- m_iec->atn_w(!BIT(data, 1));
-
- // bit 0 - not used
-
-// logerror ("IOW KI-2 data:%02x\n", data);
-}
-
-WRITE8_MEMBER(primo_state::primo_FD_w)
-{
- if (!ioport("MEMORY_EXPANSION")->read())
- {
- m_port_FD = data;
- primo_update_memory();
- }
-}
-
-/*******************************************************************************
-
- Driver initialization
-
-*******************************************************************************/
-
-void primo_state::primo_common_driver_init (primo_state *state)
-{
- m_port_FD = 0x00;
-}
-
-DRIVER_INIT_MEMBER(primo_state,primo32)
-{
- primo_common_driver_init(this);
- m_video_memory_base = 0x6800;
-}
-
-DRIVER_INIT_MEMBER(primo_state,primo48)
-{
- primo_common_driver_init(this);
- m_video_memory_base = 0xa800;
-}
-
-DRIVER_INIT_MEMBER(primo_state,primo64)
-{
- primo_common_driver_init(this);
- m_video_memory_base = 0xe800;
-}
-
-/*******************************************************************************
-
- Machine initialization
-
-*******************************************************************************/
-
-void primo_state::primo_common_machine_init ()
-{
- if (ioport("MEMORY_EXPANSION")->read())
- m_port_FD = 0x00;
- primo_update_memory();
- machine().device("maincpu")->set_clock_scale(ioport("CPU_CLOCK")->read() ? 1.5 : 1.0);
-}
-
-void primo_state::machine_start()
-{
- std::string region_tag;
- m_cart1_rom = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
- m_cart2_rom = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
-}
-
-void primo_state::machine_reset()
-{
- primo_common_machine_init();
-}
-
-MACHINE_RESET_MEMBER(primo_state,primob)
-{
- primo_common_machine_init();
-
-//removed cbm_drive_0_config(SERIAL, 8);
-//removed cbm_drive_1_config(SERIAL, 9);
-}
-
-/*******************************************************************************
-
- Snapshot files (.pss)
-
-*******************************************************************************/
-
-void primo_state::primo_setup_pss (UINT8* snapshot_data, UINT32 snapshot_size)
-{
- /* Z80 registers */
- m_maincpu->set_state_int(Z80_BC, snapshot_data[4] + snapshot_data[5]*256);
- m_maincpu->set_state_int(Z80_DE, snapshot_data[6] + snapshot_data[7]*256);
- m_maincpu->set_state_int(Z80_HL, snapshot_data[8] + snapshot_data[9]*256);
- m_maincpu->set_state_int(Z80_AF, snapshot_data[10] + snapshot_data[11]*256);
- m_maincpu->set_state_int(Z80_BC2, snapshot_data[12] + snapshot_data[13]*256);
- m_maincpu->set_state_int(Z80_DE2, snapshot_data[14] + snapshot_data[15]*256);
- m_maincpu->set_state_int(Z80_HL2, snapshot_data[16] + snapshot_data[17]*256);
- m_maincpu->set_state_int(Z80_AF2, snapshot_data[18] + snapshot_data[19]*256);
- m_maincpu->set_state_int(Z80_PC, snapshot_data[20] + snapshot_data[21]*256);
- m_maincpu->set_state_int(Z80_SP, snapshot_data[22] + snapshot_data[23]*256);
- m_maincpu->set_state_int(Z80_I, snapshot_data[24]);
- m_maincpu->set_state_int(Z80_R, snapshot_data[25]);
- m_maincpu->set_state_int(Z80_IX, snapshot_data[26] + snapshot_data[27]*256);
- m_maincpu->set_state_int(Z80_IY, snapshot_data[28] + snapshot_data[29]*256);
-
-
- /* IO ports */
-
- // KI-1 bit 7 - NMI generator enable/disable
- m_nmi = (snapshot_data[30] & 0x80) ? 1 : 0;
-
- // KI-1 bit 4 - speaker
- m_speaker->level_w(BIT(snapshot_data[30], 4));
-
-
- /* memory */
- for (int i = 0; i < 0xc000; i++)
- m_maincpu->space(AS_PROGRAM).write_byte(i + 0x4000, snapshot_data[i + 38]);
-}
-
-SNAPSHOT_LOAD_MEMBER( primo_state, primo )
-{
- dynamic_buffer snapshot_data(snapshot_size);
-
- if (image.fread(&snapshot_data[0], snapshot_size) != snapshot_size)
- {
- return IMAGE_INIT_FAIL;
- }
-
- if (strncmp((char *)&snapshot_data[0], "PS01", 4))
- {
- return IMAGE_INIT_FAIL;
- }
-
- primo_setup_pss(&snapshot_data[0], snapshot_size);
-
- return IMAGE_INIT_PASS;
-}
-
-/*******************************************************************************
-
- Quicload files (.pp)
-
-*******************************************************************************/
-
-
-void primo_state::primo_setup_pp(UINT8* quickload_data, UINT32 quickload_size)
-{
- UINT16 load_addr;
- UINT16 start_addr;
-
- load_addr = quickload_data[0] + quickload_data[1]*256;
- start_addr = quickload_data[2] + quickload_data[3]*256;
-
- for (int i = 4; i < quickload_size; i++)
- m_maincpu->space(AS_PROGRAM).write_byte(start_addr+i-4, quickload_data[i]);
-
- m_maincpu->set_state_int(Z80_PC, start_addr);
-
- logerror ("Quickload .pp l: %04x r: %04x s: %04x\n", load_addr, start_addr, quickload_size-4);
-}
-
-QUICKLOAD_LOAD_MEMBER( primo_state, primo )
-{
- dynamic_buffer quickload_data(quickload_size);
-
- if (image.fread(&quickload_data[0], quickload_size) != quickload_size)
- {
- return IMAGE_INIT_FAIL;
- }
-
- primo_setup_pp(&quickload_data[0], quickload_size);
-
- return IMAGE_INIT_PASS;
-}