From 3dda0621ffe133a53e7532781310832a227dc0d2 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 12 Oct 2023 15:55:28 -0400 Subject: skeleton/cosmicos.cpp, dm7000.cpp, micronic.cpp, softbox.cpp, vp415.cpp, xor100.cpp, zorba.cpp: Consolidate drivers in one source file each * skeleton/dm7000.cpp: Update optional logging calls to use logmacro --- src/mame/skeleton/cosmicos.cpp | 142 ++++++++++++++++++++- src/mame/skeleton/cosmicos.h | 147 ---------------------- src/mame/skeleton/dm7000.cpp | 127 +++++++++++++++---- src/mame/skeleton/dm7000.h | 98 --------------- src/mame/skeleton/micronic.cpp | 96 +++++++++++++- src/mame/skeleton/micronic.h | 105 ---------------- src/mame/skeleton/softbox.cpp | 69 +++++++++- src/mame/skeleton/softbox.h | 70 ----------- src/mame/skeleton/vp415.cpp | 239 ++++++++++++++++++++++++++++++++++- src/mame/skeleton/vp415.h | 280 ----------------------------------------- src/mame/skeleton/xor100.cpp | 104 ++++++++++++++- src/mame/skeleton/xor100.h | 107 ---------------- src/mame/skeleton/zorba.cpp | 124 +++++++++++++++++- src/mame/skeleton/zorba.h | 131 ------------------- 14 files changed, 868 insertions(+), 971 deletions(-) delete mode 100644 src/mame/skeleton/cosmicos.h delete mode 100644 src/mame/skeleton/dm7000.h delete mode 100644 src/mame/skeleton/micronic.h delete mode 100644 src/mame/skeleton/softbox.h delete mode 100644 src/mame/skeleton/vp415.h delete mode 100644 src/mame/skeleton/xor100.h delete mode 100644 src/mame/skeleton/zorba.h diff --git a/src/mame/skeleton/cosmicos.cpp b/src/mame/skeleton/cosmicos.cpp index 465e74bd243..363ab420f80 100644 --- a/src/mame/skeleton/cosmicos.cpp +++ b/src/mame/skeleton/cosmicos.cpp @@ -38,13 +38,151 @@ */ #include "emu.h" -#include "cosmicos.h" +#include "cpu/cosmac/cosmac.h" +#include "imagedev/cassette.h" +#include "imagedev/snapquik.h" +#include "machine/ram.h" +#include "machine/rescap.h" +#include "machine/timer.h" +#include "sound/cdp1864.h" +#include "sound/spkrdev.h" +#include "video/dm9368.h" #include "screen.h" #include "speaker.h" #include "cosmicos.lh" +namespace { + +#define CDP1802_TAG "ic19" +#define CDP1864_TAG "ic3" +#define DM9368_TAG "ic10" +#define SCREEN_TAG "screen" + +enum +{ + LED_RUN = 0, + LED_LOAD, + LED_PAUSE, + LED_RESET, + LED_D7, + LED_D6, + LED_D5, + LED_D4, + LED_D3, + LED_D2, + LED_D1, + LED_D0, + LED_Q, + LED_CASSETTE +}; + +class cosmicos_state : public driver_device +{ +public: + cosmicos_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_digit(0), + m_maincpu(*this, CDP1802_TAG), + m_cti(*this, CDP1864_TAG), + m_led(*this, DM9368_TAG), + m_cassette(*this, "cassette"), + m_speaker(*this, "speaker"), + m_ram(*this, RAM_TAG), + m_rom(*this, CDP1802_TAG), + m_key_row(*this, {"Y1", "Y2", "Y3", "Y4"}), + m_io_data(*this, "DATA"), + m_special(*this, "SPECIAL"), + m_buttons(*this, "BUTTONS"), + m_digits(*this, "digit%u", 0U), + m_leds(*this, "led%u", 0U) + { } + + DECLARE_INPUT_CHANGED_MEMBER( data ); + DECLARE_INPUT_CHANGED_MEMBER( enter ); + DECLARE_INPUT_CHANGED_MEMBER( single_step ); + DECLARE_INPUT_CHANGED_MEMBER( run ); + DECLARE_INPUT_CHANGED_MEMBER( load ); + DECLARE_INPUT_CHANGED_MEMBER( cosmicos_pause ); + DECLARE_INPUT_CHANGED_MEMBER( reset ); + DECLARE_INPUT_CHANGED_MEMBER( clear_data ); + DECLARE_INPUT_CHANGED_MEMBER( memory_protect ); + DECLARE_INPUT_CHANGED_MEMBER( memory_disable ); + + void init_cosmicos(); + void cosmicos(machine_config &config); + +private: + uint8_t read(offs_t offset); + void write(offs_t offset, uint8_t data); + uint8_t video_off_r(); + uint8_t video_on_r(); + void audio_latch_w(uint8_t data); + uint8_t hex_keyboard_r(); + void hex_keylatch_w(uint8_t data); + uint8_t reset_counter_r(); + void segment_w(uint8_t data); + uint8_t data_r(); + void display_w(uint8_t data); + uint8_t dma_r(); + void sc_w(uint8_t data); + void set_cdp1802_mode(int mode); + void clear_input_data(); + void dmaout_w(int state); + void efx_w(int state); + int wait_r(); + int clear_r(); + int ef1_r(); + int ef2_r(); + int ef3_r(); + int ef4_r(); + void q_w(int state); + DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); + TIMER_DEVICE_CALLBACK_MEMBER(digit_tick); + TIMER_DEVICE_CALLBACK_MEMBER(int_tick); + void cosmicos_io(address_map &map); + void cosmicos_mem(address_map &map); + + /* CPU state */ + int m_wait = 0; + int m_clear = 0; + int m_sc1 = 0; + + /* memory state */ + uint8_t m_data = 0U; + int m_boot = 0; + int m_ram_protect = 0; + int m_ram_disable = 0; + + /* keyboard state */ + uint8_t m_keylatch = 0U; + + /* display state */ + uint8_t m_segment = 0U; + int m_digit = 0; + int m_counter = 0; + int m_q = 0; + int m_dmaout = 0; + int m_efx = 0; + int m_video_on = 0; + + virtual void machine_start() override; + virtual void machine_reset() override; + required_device m_maincpu; + required_device m_cti; + required_device m_led; + required_device m_cassette; + required_device m_speaker; + required_device m_ram; + required_memory_region m_rom; + required_ioport_array<4> m_key_row; + required_ioport m_io_data; + required_ioport m_special; + required_ioport m_buttons; + output_finder<10> m_digits; + output_finder<14> m_leds; +}; enum { @@ -577,6 +715,8 @@ ROM_START( cosmicos ) ROMX_LOAD( "ascii.ic7", 0x400, 0x400, NO_DUMP, ROM_BIOS(1) ) ROM_END +} // anonymous namespace + /* System Drivers */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS diff --git a/src/mame/skeleton/cosmicos.h b/src/mame/skeleton/cosmicos.h deleted file mode 100644 index 84f7eb1f5d2..00000000000 --- a/src/mame/skeleton/cosmicos.h +++ /dev/null @@ -1,147 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -#ifndef MAME_SKELETON_COSMICOS_H -#define MAME_SKELETON_COSMICOS_H - -#pragma once - -#include "cpu/cosmac/cosmac.h" -#include "imagedev/cassette.h" -#include "imagedev/snapquik.h" -#include "machine/ram.h" -#include "machine/rescap.h" -#include "machine/timer.h" -#include "sound/cdp1864.h" -#include "sound/spkrdev.h" -#include "video/dm9368.h" - -#define CDP1802_TAG "ic19" -#define CDP1864_TAG "ic3" -#define DM9368_TAG "ic10" -#define SCREEN_TAG "screen" - -enum -{ - LED_RUN = 0, - LED_LOAD, - LED_PAUSE, - LED_RESET, - LED_D7, - LED_D6, - LED_D5, - LED_D4, - LED_D3, - LED_D2, - LED_D1, - LED_D0, - LED_Q, - LED_CASSETTE -}; - -class cosmicos_state : public driver_device -{ -public: - cosmicos_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_digit(0), - m_maincpu(*this, CDP1802_TAG), - m_cti(*this, CDP1864_TAG), - m_led(*this, DM9368_TAG), - m_cassette(*this, "cassette"), - m_speaker(*this, "speaker"), - m_ram(*this, RAM_TAG), - m_rom(*this, CDP1802_TAG), - m_key_row(*this, {"Y1", "Y2", "Y3", "Y4"}), - m_io_data(*this, "DATA"), - m_special(*this, "SPECIAL"), - m_buttons(*this, "BUTTONS"), - m_digits(*this, "digit%u", 0U), - m_leds(*this, "led%u", 0U) - { } - - DECLARE_INPUT_CHANGED_MEMBER( data ); - DECLARE_INPUT_CHANGED_MEMBER( enter ); - DECLARE_INPUT_CHANGED_MEMBER( single_step ); - DECLARE_INPUT_CHANGED_MEMBER( run ); - DECLARE_INPUT_CHANGED_MEMBER( load ); - DECLARE_INPUT_CHANGED_MEMBER( cosmicos_pause ); - DECLARE_INPUT_CHANGED_MEMBER( reset ); - DECLARE_INPUT_CHANGED_MEMBER( clear_data ); - DECLARE_INPUT_CHANGED_MEMBER( memory_protect ); - DECLARE_INPUT_CHANGED_MEMBER( memory_disable ); - - void init_cosmicos(); - void cosmicos(machine_config &config); - -private: - uint8_t read(offs_t offset); - void write(offs_t offset, uint8_t data); - uint8_t video_off_r(); - uint8_t video_on_r(); - void audio_latch_w(uint8_t data); - uint8_t hex_keyboard_r(); - void hex_keylatch_w(uint8_t data); - uint8_t reset_counter_r(); - void segment_w(uint8_t data); - uint8_t data_r(); - void display_w(uint8_t data); - uint8_t dma_r(); - void sc_w(uint8_t data); - void set_cdp1802_mode(int mode); - void clear_input_data(); - void dmaout_w(int state); - void efx_w(int state); - int wait_r(); - int clear_r(); - int ef1_r(); - int ef2_r(); - int ef3_r(); - int ef4_r(); - void q_w(int state); - DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); - TIMER_DEVICE_CALLBACK_MEMBER(digit_tick); - TIMER_DEVICE_CALLBACK_MEMBER(int_tick); - void cosmicos_io(address_map &map); - void cosmicos_mem(address_map &map); - - /* CPU state */ - int m_wait = 0; - int m_clear = 0; - int m_sc1 = 0; - - /* memory state */ - uint8_t m_data = 0U; - int m_boot = 0; - int m_ram_protect = 0; - int m_ram_disable = 0; - - /* keyboard state */ - uint8_t m_keylatch = 0U; - - /* display state */ - uint8_t m_segment = 0U; - int m_digit = 0; - int m_counter = 0; - int m_q = 0; - int m_dmaout = 0; - int m_efx = 0; - int m_video_on = 0; - - virtual void machine_start() override; - virtual void machine_reset() override; - required_device m_maincpu; - required_device m_cti; - required_device m_led; - required_device m_cassette; - required_device m_speaker; - required_device m_ram; - required_memory_region m_rom; - required_ioport_array<4> m_key_row; - required_ioport m_io_data; - required_ioport m_special; - required_ioport m_buttons; - output_finder<10> m_digits; - output_finder<14> m_leds; -}; - -#endif // MAME_SKELETON_COSMICOS_H diff --git a/src/mame/skeleton/dm7000.cpp b/src/mame/skeleton/dm7000.cpp index 62571f39265..8690f88732e 100644 --- a/src/mame/skeleton/dm7000.cpp +++ b/src/mame/skeleton/dm7000.cpp @@ -39,48 +39,124 @@ ****************************************************************************/ #include "emu.h" -#include "dm7000.h" + +#include "cpu/powerpc/ppc.h" +#include "machine/terminal.h" #include "screen.h" -#include +#define VERBOSE ( 1 ) +#include "logmacro.h" -#define VERBOSE_LEVEL ( 9 ) +namespace { -static inline void ATTR_PRINTF(3,4) verboselog( device_t &device, int n_level, const char *s_fmt, ...) +class dm7000_state : public driver_device { - if (VERBOSE_LEVEL >= n_level) +public: + dm7000_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_terminal(*this, "terminal") { - va_list v; - char buf[32768]; - va_start( v, s_fmt); - vsprintf( buf, s_fmt, v); - va_end( v); - device.logerror( "%s: %s", device.machine().describe_context( ), buf); } -} + + void dm7000(machine_config &config); + +private: + required_device m_maincpu; + required_device m_terminal; + + void dm7000_iic0_w(offs_t offset, uint8_t data); + uint8_t dm7000_iic0_r(offs_t offset); + void dm7000_iic1_w(offs_t offset, uint8_t data); + uint8_t dm7000_iic1_r(offs_t offset); + + void dm7000_scc0_w(offs_t offset, uint8_t data); + uint8_t dm7000_scc0_r(offs_t offset); + void kbd_put(u8 data); + uint8_t m_scc0_lcr = 0U; + uint8_t m_scc0_lsr = 0U; + uint8_t m_term_data = 0U; + + + void dm7000_gpio0_w(offs_t offset, uint8_t data); + uint8_t dm7000_gpio0_r(offs_t offset); + + void dm7000_scp0_w(offs_t offset, uint8_t data); + uint8_t dm7000_scp0_r(offs_t offset); + + void dm7000_enet_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint16_t dm7000_enet_r(offs_t offset); + + uint32_t dcr_r(offs_t offset); + void dcr_w(offs_t offset, uint32_t data); + + + uint16_t m_enet_regs[32]{}; + + uint32_t dcr[1024]{}; + virtual void machine_reset() override; + virtual void video_start() override; + uint32_t screen_update_dm7000(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void dm7000_mem(address_map &map); +}; + +/* */ +#define UART_DLL 0 +#define UART_RBR 0 +#define UART_THR 0 +#define UART_DLH 1 +#define UART_IER 1 +#define UART_IIR 2 +#define UART_FCR 2 +#define UART_LCR 3 +#define UART_LCR_DLAB 0x80 +#define UART_MCR 4 +#define UART_LSR 5 +#define UART_LSR_TEMT 0x20 +#define UART_LSR_THRE 0x40 +#define UART_MSR 6 +#define UART_SCR 7 + +/* */ +#define SCP_SPMODE 0 +#define SCP_RXDATA 1 +#define SCP_TXDATA 2 +#define SCP_SPCOM 3 +#define SCP_STATUS 4 +#define SCP_STATUS_RXRDY 1 +#define SCP_CDM 6 + +/* STB045xxx DCRs */ + +#define DCRSTB045_CICVCR 0x033 /* CIC Video Control Register */ +#define DCRSTB045_SCCR 0x120 /* Serial Clock Control Register */ +#define DCRSTB045_VIDEO_CNTL 0x140 /* Video Control Register */ +#define DCRSTB045_CMD_STAT 0x14a /* Command status */ +#define DCRSTB045_DISP_MODE 0x154 /* Display Mode Register */ +#define DCRSTB045_FRAME_BUFR_BASE 0x179 /* Frame Buffers Base Address Register */ uint8_t dm7000_state::dm7000_iic0_r(offs_t offset) { uint8_t data = 0; // dummy - verboselog(*this, 9, "(IIC0) %08X -> %08X\n", 0x40030000 + offset, data); + LOG("%s: (IIC0) %08X -> %08X\n", machine().describe_context(), 0x40030000 + offset, data); return data; } void dm7000_state::dm7000_iic0_w(offs_t offset, uint8_t data) { - verboselog(*this, 9, "(IIC0) %08X <- %08X\n", 0x40030000 + offset, data); + LOG("%s: (IIC0) %08X <- %08X\n", machine().describe_context(), 0x40030000 + offset, data); } uint8_t dm7000_state::dm7000_iic1_r(offs_t offset) { uint8_t data = 0; // dummy - verboselog(*this, 9, "(IIC1) %08X -> %08X\n", 0x400b0000 + offset, data); + LOG("%s: (IIC1) %08X -> %08X\n", machine().describe_context(), 0x400b0000 + offset, data); return data; } void dm7000_state::dm7000_iic1_w(offs_t offset, uint8_t data) { - verboselog(*this, 9, "(IIC1) %08X <- %08X\n", 0x400b0000 + offset, data); + LOG("%s: (IIC1) %08X <- %08X\n", machine().describe_context(), 0x400b0000 + offset, data); } uint8_t dm7000_state::dm7000_scc0_r(offs_t offset) @@ -100,7 +176,7 @@ uint8_t dm7000_state::dm7000_scc0_r(offs_t offset) data = UART_LSR_THRE | UART_LSR_TEMT | m_scc0_lsr; break; } - verboselog(*this, 9, "(SCC0) %08X -> %08X\n", 0x40040000 + offset, data); + LOG("%s: (SCC0) %08X -> %08X\n", machine().describe_context(), 0x40040000 + offset, data); return data; } @@ -117,19 +193,19 @@ void dm7000_state::dm7000_scc0_w(offs_t offset, uint8_t data) m_scc0_lcr = data; break; } - verboselog(*this, 9, "(SCC0) %08X <- %08X\n", 0x40040000 + offset, data); + LOG("%s: (SCC0) %08X <- %08X\n", machine().describe_context(), 0x40040000 + offset, data); } uint8_t dm7000_state::dm7000_gpio0_r(offs_t offset) { uint8_t data = 0; // dummy - verboselog(*this, 9, "(GPIO0) %08X -> %08X\n", 0x40060000 + offset, data); + LOG("%s: (GPIO0) %08X -> %08X\n", machine().describe_context(), 0x40060000 + offset, data); return data; } void dm7000_state::dm7000_gpio0_w(offs_t offset, uint8_t data) { - verboselog(*this, 9, "(GPIO0) %08X <- %08X\n", 0x40060000 + offset, data); + LOG("%s: (GPIO0) %08X <- %08X\n", machine().describe_context(), 0x40060000 + offset, data); } uint8_t dm7000_state::dm7000_scp0_r(offs_t offset) @@ -140,13 +216,13 @@ uint8_t dm7000_state::dm7000_scp0_r(offs_t offset) data = SCP_STATUS_RXRDY; break; } - verboselog(*this, 9, "(SCP0) %08X -> %08X\n", 0x400c0000 + offset, data); + LOG("%s: (SCP0) %08X -> %08X\n", machine().describe_context(), 0x400c0000 + offset, data); return data; } void dm7000_state::dm7000_scp0_w(offs_t offset, uint8_t data) { - verboselog(*this, 9, "(SCP0) %08X <- %08X\n", 0x400c0000 + offset, data); + LOG("%s: (SCP0) %08X <- %08X\n", machine().describe_context(), 0x400c0000 + offset, data); switch(offset) { case SCP_TXDATA: //printf("%02X ", data); @@ -171,13 +247,13 @@ uint16_t dm7000_state::dm7000_enet_r(offs_t offset) data = m_enet_regs[offset]; break; } - verboselog(*this, 9, "(ENET) %08X -> %08X\n", 0x72000600 + (offset), data); + LOG("%s: (ENET) %08X -> %08X\n", machine().describe_context(), 0x72000600 + (offset), data); return data; } void dm7000_state::dm7000_enet_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - verboselog(*this, 9, "(ENET) %08X <- %08X\n", 0x72000600 + (offset), data); + LOG("%s: (ENET) %08X <- %08X\n", machine().describe_context(), 0x72000600 + (offset), data); COMBINE_DATA(&m_enet_regs[offset]); } @@ -348,6 +424,9 @@ ROM_START( dm500 ) ROM_REGION( 0x800000, "user2", ROMREGION_32BIT | ROMREGION_BE | ROMREGION_ERASEFF ) ROM_LOAD("rel108_dm500.img", 0x0000, 0x5aa000, CRC(44be2376) SHA1(1f360572998b1bc4dc10c5210a2aed573a75e2fa)) ROM_END + +} // anonymous namespace + /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS diff --git a/src/mame/skeleton/dm7000.h b/src/mame/skeleton/dm7000.h deleted file mode 100644 index e112e48b0f2..00000000000 --- a/src/mame/skeleton/dm7000.h +++ /dev/null @@ -1,98 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Lukasz Markowski -#ifndef MAME_SKELETON_DM7000_H -#define MAME_SKELETON_DM7000_H - -#pragma once - -#include "cpu/powerpc/ppc.h" -#include "machine/terminal.h" - - -class dm7000_state : public driver_device -{ -public: - dm7000_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_terminal(*this, "terminal") - { - } - - void dm7000(machine_config &config); - -private: - required_device m_maincpu; - required_device m_terminal; - - void dm7000_iic0_w(offs_t offset, uint8_t data); - uint8_t dm7000_iic0_r(offs_t offset); - void dm7000_iic1_w(offs_t offset, uint8_t data); - uint8_t dm7000_iic1_r(offs_t offset); - - void dm7000_scc0_w(offs_t offset, uint8_t data); - uint8_t dm7000_scc0_r(offs_t offset); - void kbd_put(u8 data); - uint8_t m_scc0_lcr = 0U; - uint8_t m_scc0_lsr = 0U; - uint8_t m_term_data = 0U; - - - void dm7000_gpio0_w(offs_t offset, uint8_t data); - uint8_t dm7000_gpio0_r(offs_t offset); - - void dm7000_scp0_w(offs_t offset, uint8_t data); - uint8_t dm7000_scp0_r(offs_t offset); - - void dm7000_enet_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t dm7000_enet_r(offs_t offset); - - uint32_t dcr_r(offs_t offset); - void dcr_w(offs_t offset, uint32_t data); - - - uint16_t m_enet_regs[32]{}; - - uint32_t dcr[1024]{}; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_dm7000(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - void dm7000_mem(address_map &map); -}; - -/* */ -#define UART_DLL 0 -#define UART_RBR 0 -#define UART_THR 0 -#define UART_DLH 1 -#define UART_IER 1 -#define UART_IIR 2 -#define UART_FCR 2 -#define UART_LCR 3 -#define UART_LCR_DLAB 0x80 -#define UART_MCR 4 -#define UART_LSR 5 -#define UART_LSR_TEMT 0x20 -#define UART_LSR_THRE 0x40 -#define UART_MSR 6 -#define UART_SCR 7 - -/* */ -#define SCP_SPMODE 0 -#define SCP_RXDATA 1 -#define SCP_TXDATA 2 -#define SCP_SPCOM 3 -#define SCP_STATUS 4 -#define SCP_STATUS_RXRDY 1 -#define SCP_CDM 6 - -/* STB045xxx DCRs */ - -#define DCRSTB045_CICVCR 0x033 /* CIC Video Control Register */ -#define DCRSTB045_SCCR 0x120 /* Serial Clock Control Register */ -#define DCRSTB045_VIDEO_CNTL 0x140 /* Video Control Register */ -#define DCRSTB045_CMD_STAT 0x14a /* Command status */ -#define DCRSTB045_DISP_MODE 0x154 /* Display Mode Register */ -#define DCRSTB045_FRAME_BUFR_BASE 0x179 /* Frame Buffers Base Address Register */ - -#endif // MAME_SKELETON_DM7000_H diff --git a/src/mame/skeleton/micronic.cpp b/src/mame/skeleton/micronic.cpp index 5eab8d32847..a9c888251a6 100644 --- a/src/mame/skeleton/micronic.cpp +++ b/src/mame/skeleton/micronic.cpp @@ -118,10 +118,102 @@ */ #include "emu.h" -#include "micronic.h" + +#include "cpu/z80/z80.h" +#include "video/hd61830.h" +#include "machine/mc146818.h" +#include "machine/ram.h" +#include "machine/nvram.h" +#include "sound/beep.h" +#include "imagedev/cassette.h" +#include "emupal.h" #include "screen.h" #include "speaker.h" +namespace { + +#define SCREEN_TAG "screen" +#define Z80_TAG "z80" +#define MC146818_TAG "mc146818" +#define HD61830_TAG "hd61830" + +class micronic_state : public driver_device +{ +public: + micronic_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, Z80_TAG), + m_lcdc(*this, HD61830_TAG), + m_beep(*this, "beeper"), + m_rtc(*this, MC146818_TAG), + m_nvram1(*this, "nvram1"), + m_nvram2(*this, "nvram2"), + m_ram(*this, RAM_TAG), + m_ram_base(*this, "ram_base"), + m_status_flag(1), + m_bank1(*this, "bank1"), + m_bit0(*this, "BIT0"), + m_bit1(*this, "BIT1"), + m_bit2(*this, "BIT2"), + m_bit3(*this, "BIT3"), + m_bit4(*this, "BIT4"), + m_bit5(*this, "BIT5"), + m_backbattery(*this, "BACKBATTERY"), + m_mainbattery(*this, "MAINBATTERY"), + m_cassette(*this, "cassette") + { } + + void micronic(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + void nvram_init(nvram_device &nvram, void *data, size_t size); + + uint8_t keypad_r(); + uint8_t status_flag_r(); + void status_flag_w(uint8_t data); + void kp_matrix_w(uint8_t data); + void beep_w(uint8_t data); + uint8_t irq_flag_r(); + void port_2c_w(uint8_t data); + void bank_select_w(uint8_t data); + void lcd_contrast_w(uint8_t data); + void mc146818_irq(int state); + + void micronic_palette(palette_device &palette) const; + + void micronic_io(address_map &map); + void micronic_mem(address_map &map); + + required_device m_maincpu; + required_device m_lcdc; + required_device m_beep; + required_device m_rtc; + required_device m_nvram1; + required_device m_nvram2; + required_device m_ram; + + required_shared_ptr m_ram_base; + uint8_t m_banks_num = 0; + uint8_t m_kp_matrix = 0; + uint8_t m_lcd_contrast = 0; + int m_lcd_backlight = 0; + uint8_t m_status_flag = 0; + + required_memory_bank m_bank1; + required_ioport m_bit0; + required_ioport m_bit1; + required_ioport m_bit2; + required_ioport m_bit3; + required_ioport m_bit4; + required_ioport m_bit5; + required_ioport m_backbattery; + required_ioport m_mainbattery; + optional_device m_cassette; +}; uint8_t micronic_state::keypad_r() { @@ -378,6 +470,8 @@ ROM_START( micronic ) ROMX_LOAD("monitor2.bin", 0x0000, 0x8000, CRC(c6ae2bbf) SHA1(1f2e3a3d4720a8e1bb38b37f4ab9e0e32676d030), ROM_BIOS(1)) ROM_END +} // anonymous namespace + /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS diff --git a/src/mame/skeleton/micronic.h b/src/mame/skeleton/micronic.h deleted file mode 100644 index ecf227def28..00000000000 --- a/src/mame/skeleton/micronic.h +++ /dev/null @@ -1,105 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Sandro Ronco -/***************************************************************************** - - includes/micronic.h - -*****************************************************************************/ -#ifndef MAME_SKELETON_MICRONIC_H -#define MAME_SKELETON_MICRONIC_H - -#pragma once - -#include "cpu/z80/z80.h" -#include "video/hd61830.h" -#include "machine/mc146818.h" -#include "machine/ram.h" -#include "machine/nvram.h" -#include "sound/beep.h" -#include "imagedev/cassette.h" -#include "emupal.h" - -#define SCREEN_TAG "screen" -#define Z80_TAG "z80" -#define MC146818_TAG "mc146818" -#define HD61830_TAG "hd61830" - -class micronic_state : public driver_device -{ -public: - micronic_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, Z80_TAG), - m_lcdc(*this, HD61830_TAG), - m_beep(*this, "beeper"), - m_rtc(*this, MC146818_TAG), - m_nvram1(*this, "nvram1"), - m_nvram2(*this, "nvram2"), - m_ram(*this, RAM_TAG), - m_ram_base(*this, "ram_base"), - m_status_flag(1), - m_bank1(*this, "bank1"), - m_bit0(*this, "BIT0"), - m_bit1(*this, "BIT1"), - m_bit2(*this, "BIT2"), - m_bit3(*this, "BIT3"), - m_bit4(*this, "BIT4"), - m_bit5(*this, "BIT5"), - m_backbattery(*this, "BACKBATTERY"), - m_mainbattery(*this, "MAINBATTERY"), - m_cassette(*this, "cassette") - { } - - void micronic(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - -private: - void nvram_init(nvram_device &nvram, void *data, size_t size); - - uint8_t keypad_r(); - uint8_t status_flag_r(); - void status_flag_w(uint8_t data); - void kp_matrix_w(uint8_t data); - void beep_w(uint8_t data); - uint8_t irq_flag_r(); - void port_2c_w(uint8_t data); - void bank_select_w(uint8_t data); - void lcd_contrast_w(uint8_t data); - void mc146818_irq(int state); - - void micronic_palette(palette_device &palette) const; - - void micronic_io(address_map &map); - void micronic_mem(address_map &map); - - required_device m_maincpu; - required_device m_lcdc; - required_device m_beep; - required_device m_rtc; - required_device m_nvram1; - required_device m_nvram2; - required_device m_ram; - - required_shared_ptr m_ram_base; - uint8_t m_banks_num = 0; - uint8_t m_kp_matrix = 0; - uint8_t m_lcd_contrast = 0; - int m_lcd_backlight = 0; - uint8_t m_status_flag = 0; - - required_memory_bank m_bank1; - required_ioport m_bit0; - required_ioport m_bit1; - required_ioport m_bit2; - required_ioport m_bit3; - required_ioport m_bit4; - required_ioport m_bit5; - required_ioport m_backbattery; - required_ioport m_mainbattery; - optional_device m_cassette; -}; - -#endif // MAME_SKELETON_MICRONIC_H diff --git a/src/mame/skeleton/softbox.cpp b/src/mame/skeleton/softbox.cpp index c892b276c07..aa1fe987857 100644 --- a/src/mame/skeleton/softbox.cpp +++ b/src/mame/skeleton/softbox.cpp @@ -94,9 +94,72 @@ */ #include "emu.h" -#include "softbox.h" + +#include "bus/ieee488/ieee488.h" +#include "bus/imi7000/imi7000.h" #include "bus/rs232/rs232.h" -#include "softlist.h" +#include "cpu/z80/z80.h" +#include "imagedev/harddriv.h" +#include "machine/corvushd.h" +#include "machine/com8116.h" +#include "machine/i8251.h" +#include "machine/i8255.h" +#include "softlist_dev.h" + +namespace { + +#define Z80_TAG "z80" +#define I8251_TAG "ic15" +#define I8255_0_TAG "ic17" +#define I8255_1_TAG "ic16" +#define COM8116_TAG "ic14" +#define RS232_TAG "rs232" +#define CORVUS_HDC_TAG "corvus" + +class softbox_state : public driver_device +{ +public: + softbox_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, Z80_TAG) + , m_ieee(*this, IEEE488_TAG) + , m_hdc(*this, CORVUS_HDC_TAG) + , m_leds(*this, "led%u", 0U) + { } + + void softbox(machine_config &config); + +private: + // device_ieee488_interface overrides + virtual void ieee488_ifc(int state); + + uint8_t ppi0_pa_r(); + void ppi0_pb_w(uint8_t data); + + uint8_t ppi1_pa_r(); + void ppi1_pb_w(uint8_t data); + uint8_t ppi1_pc_r(); + void ppi1_pc_w(uint8_t data); + + enum + { + LED_A = 0, + LED_B, + LED_READY + }; + + void softbox_io(address_map &map); + void softbox_mem(address_map &map); + int m_ifc = 0; // Tracks previous state of IEEE-488 IFC line + + virtual void machine_start() override; + virtual void device_reset_after_children() override; + + required_device m_maincpu; + required_device m_ieee; + required_device m_hdc; + output_finder<3> m_leds; +}; //************************************************************************** @@ -426,7 +489,7 @@ ROM_START( softbox ) ROMX_LOAD( "390.ic4", 0x800, 0x800, CRC(abe6cb30) SHA1(4b26d5db36f828e01268f718799f145d09b449ad), ROM_BIOS(2) ) ROM_END - +} // anonymous namespace //************************************************************************** // SYSTEM DRIVERS diff --git a/src/mame/skeleton/softbox.h b/src/mame/skeleton/softbox.h deleted file mode 100644 index 8c75724ecac..00000000000 --- a/src/mame/skeleton/softbox.h +++ /dev/null @@ -1,70 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder, Mike Naberezny -#ifndef MAME_SKELETON_SOFTBOX_H -#define MAME_SKELETON_SOFTBOX_H - -#pragma once - -#include "bus/ieee488/ieee488.h" -#include "bus/imi7000/imi7000.h" -#include "cpu/z80/z80.h" -#include "imagedev/harddriv.h" -#include "machine/corvushd.h" -#include "machine/com8116.h" -#include "machine/i8251.h" -#include "machine/i8255.h" - -#define Z80_TAG "z80" -#define I8251_TAG "ic15" -#define I8255_0_TAG "ic17" -#define I8255_1_TAG "ic16" -#define COM8116_TAG "ic14" -#define RS232_TAG "rs232" -#define CORVUS_HDC_TAG "corvus" - -class softbox_state : public driver_device -{ -public: - softbox_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, Z80_TAG) - , m_ieee(*this, IEEE488_TAG) - , m_hdc(*this, CORVUS_HDC_TAG) - , m_leds(*this, "led%u", 0U) - { } - - void softbox(machine_config &config); - -private: - // device_ieee488_interface overrides - virtual void ieee488_ifc(int state); - - uint8_t ppi0_pa_r(); - void ppi0_pb_w(uint8_t data); - - uint8_t ppi1_pa_r(); - void ppi1_pb_w(uint8_t data); - uint8_t ppi1_pc_r(); - void ppi1_pc_w(uint8_t data); - - enum - { - LED_A = 0, - LED_B, - LED_READY - }; - - void softbox_io(address_map &map); - void softbox_mem(address_map &map); - int m_ifc = 0; // Tracks previous state of IEEE-488 IFC line - - virtual void machine_start() override; - virtual void device_reset_after_children() override; - - required_device m_maincpu; - required_device m_ieee; - required_device m_hdc; - output_finder<3> m_leds; -}; - -#endif // MAME_SKELETON_SOFTBOX_H diff --git a/src/mame/skeleton/vp415.cpp b/src/mame/skeleton/vp415.cpp index 112fda8d8bf..70befc79a6d 100644 --- a/src/mame/skeleton/vp415.cpp +++ b/src/mame/skeleton/vp415.cpp @@ -39,7 +39,241 @@ ***************************************************************************/ #include "emu.h" -#include "vp415.h" + +#include "cpu/mcs51/mcs51.h" +#include "cpu/mcs48/mcs48.h" +#include "cpu/z80/z80.h" + +#include "machine/i8155.h" +#include "machine/i8255.h" +#include "machine/ncr5385.h" +#include "machine/saa1043.h" + +#include "video/mb88303.h" + +#include "screen.h" + +namespace { + +class vp415_state : public driver_device +{ +public: + vp415_state(const machine_config &mconfig, device_type type, const char *tag); + + void vp415(machine_config &config); + + static const char *const DATACPU_TAG; + static const char *const DATAMCU_TAG; + + static const char *const DESCRAMBLE_ROM_TAG; + static const char *const SYNC_ROM_TAG; + static const char *const DRIVE_ROM_TAG; + + static const char *const CTRLMCU_TAG; + static const char *const CONTROL_ROM_TAG; + + static const char *const SWITCHES_TAG; + +private: + virtual void machine_reset() override; + virtual void machine_start() override; + + TIMER_CALLBACK_MEMBER(drive_2ppr_tick); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void sel34_w(uint8_t data); + uint8_t sel37_r(); + + void cpu_int1_w(int state); + + void data_mcu_port1_w(uint8_t data); + uint8_t data_mcu_port1_r(); + void data_mcu_port2_w(uint8_t data); + uint8_t data_mcu_port2_r(); + + void ctrl_regs_w(offs_t offset, uint8_t data); + uint8_t ctrl_regs_r(offs_t offset); + void ctrl_cpu_port1_w(uint8_t data); + uint8_t ctrl_cpu_port1_r(); + void ctrl_cpu_port3_w(uint8_t data); + uint8_t ctrl_cpu_port3_r(); + + void ctrl_mcu_port1_w(uint8_t data); + uint8_t ctrl_mcu_port1_r(); + void ctrl_mcu_port2_w(uint8_t data); + uint8_t ctrl_mcu_port2_r(); + + uint8_t drive_i8155_pb_r(); + uint8_t drive_i8155_pc_r(); + + void drive_i8255_pa_w(uint8_t data); + void drive_i8255_pb_w(uint8_t data); + uint8_t drive_i8255_pc_r(); + void drive_cpu_port1_w(uint8_t data); + void drive_cpu_port3_w(uint8_t data); + + void refv_w(int state); + + // CPU Board enums + enum + { + SEL34_INTR_N = 0x01, + SEL34_RES = 0x20, + SEL34_ERD = 0x40, + SEL34_ENW = 0x80, + SEL34_INTR_N_BIT = 0, + SEL34_RES_BIT = 5, + SEL34_ERD_BIT = 6, + SEL34_ENW_BIT = 7, + }; + + enum + { + SEL37_ID0 = 0x01, + SEL37_ID1 = 0x02, + SEL37_BRD = 0x10, + SEL37_MON_N = 0x20, + SEL37_SK1c = 0x40, + SEL37_SK1d = 0x40, + + SEL37_ID0_BIT = 0, + SEL37_ID1_BIT = 1, + SEL37_BRD_BIT = 4, + SEL37_MON_N_BIT = 5, + SEL37_SK1c_BIT = 6, + SEL37_SK1d_BIT = 7, + }; + + // Control Board enums + enum + { + CTRL_P3_INT1 = 0x08, + + CTRL_P3_INT1_BIT = 3 + }; + + // Drive Board enums + enum + { + I8255PC_NOT_FOCUSED = 0x02, + I8255PC_0RPM_N = 0x08, + I8255PC_DISC_REFLECTION = 0x10, + }; + + enum + { + I8255PB_COMM1 = 0x01, + I8255PB_COMM2 = 0x02, + I8255PB_COMM3 = 0x04, + I8255PB_COMM4 = 0x08, + I8255PB_RLS_N = 0x10, + I8255PB_SL_PWR = 0x20, + I8255PB_RAD_FS_N = 0x40, + I8255PB_STR1 = 0x80, + + I8255PB_COMM1_BIT = 0, + I8255PB_COMM2_BIT = 1, + I8255PB_COMM3_BIT = 2, + I8255PB_COMM4_BIT = 3, + I8255PB_RLS_N_BIT = 4, + I8255PB_SL_PWR_BIT = 5, + I8255PB_RAD_FS_N_BIT = 6, + I8255PB_STR1_BIT = 7, + }; + + enum + { + I8155PB_2PPR = 0x01, + I8155PB_RAD_MIR = 0x04, + I8155PB_FRLOCK = 0x08, + + I8155PB_2PPR_BIT = 0, + I8155PB_RAD_MIR_BIT = 2, + I8155PB_FRLOCK_BIT = 3, + }; + + enum + { + DRIVE_P1_CP1 = 0x01, + DRIVE_P1_CP2 = 0x02, + DRIVE_P1_LDI = 0x04, + DRIVE_P1_ATN_N = 0x08, + DRIVE_P1_TX = 0x10, + DRIVE_P1_STB_N = 0x20, + DRIVE_P1_STR0_N = 0x40, + DRIVE_P1_TP2 = 0x80, + + DRIVE_P1_CP1_BIT = 0, + DRIVE_P1_CP2_BIT = 1, + DRIVE_P1_LDI_BIT = 2, + DRIVE_P1_ATN_N_BIT = 3, + DRIVE_P1_TX_BIT = 4, + DRIVE_P1_STB_N_BIT = 5, + DRIVE_P1_STR0_N_BIT = 6, + DRIVE_P1_TP2_BIT = 7 + }; + + virtual void video_start() override; + + void z80_program_map(address_map &map); + void z80_io_map(address_map &map); + void datamcu_program_map(address_map &map); + void set_int_line(uint8_t line, uint8_t value); + void update_cpu_int(); + + void ctrl_program_map(address_map &map); + void ctrl_io_map(address_map &map); + void ctrlmcu_program_map(address_map &map); + void sd_w(uint8_t data); + uint8_t sd_r(); + + void drive_program_map(address_map &map); + void drive_io_map(address_map &map); + + required_device m_datacpu; + required_device m_datamcu; + required_device m_scsi; + required_device m_drivecpu; + required_device m_ctrlcpu; + required_device m_ctrlmcu; + required_device m_chargen; + required_shared_ptr m_mainram; + required_shared_ptr m_ctrlram; + required_ioport m_switches; + + uint8_t m_sel34 = 0; + uint8_t m_sel37 = 0; + + uint8_t m_int_lines[2]{}; + + uint8_t m_refv = 0; + + uint8_t m_ctrl_cpu_p1 = 0; + uint8_t m_ctrl_cpu_p3 = 0; + uint8_t m_ctrl_mcu_p1 = 0; + uint8_t m_ctrl_mcu_p2 = 0; + + uint8_t m_drive_p1 = 0; + uint8_t m_drive_pc_bits = 0; + + uint8_t m_drive_rad_mir_dac = 0; + uint8_t m_drive_i8255_pb = 0; + emu_timer *m_drive_2ppr_timer = nullptr; + uint8_t m_drive_2ppr = 0; + + static const char *const DATARAM_TAG; + static const char *const SCSI_TAG; + + static const char *const CTRLCPU_TAG; + static const char *const CTRLRAM_TAG; + + static const char *const DRIVECPU_TAG; + static const char *const I8155_TAG; + static const char *const I8255_TAG; + static const char *const CHARGEN_TAG; + static const char *const SYNCGEN_TAG; +}; const char *const vp415_state::DATACPU_TAG = "datacpu"; const char *const vp415_state::DATAMCU_TAG = "datamcu"; @@ -570,5 +804,6 @@ ROM_START(vp415) ROM_LOAD( "d8041ahc 152.7211", 0x000, 0x400, CRC(2972d4b2) SHA1(e08086714fa5be1a67feac8f64210b21bb410dd3) ) // Same contents as 7252; this is intentional! ROM_END -CONS( 1983, vp415, 0, 0, vp415, vp415, vp415_state, empty_init, "Philips", "VP415", MACHINE_IS_SKELETON ) +} // anonymous namespace +CONS( 1983, vp415, 0, 0, vp415, vp415, vp415_state, empty_init, "Philips", "VP415", MACHINE_IS_SKELETON ) diff --git a/src/mame/skeleton/vp415.h b/src/mame/skeleton/vp415.h deleted file mode 100644 index 59bc8222685..00000000000 --- a/src/mame/skeleton/vp415.h +++ /dev/null @@ -1,280 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/*************************************************************************** - - Skeleton driver for Philips VP415 LV ROM Player - - List of Modules: - A - Audio Processor - B - RGB - C - Video Processor - D - Ref Source - E - Slide Drive - F - Motor+Sequence - G - Gen Lock - H - ETBC B - I - ETBC C - J - Focus - K - HF Processor - L - Video Dropout Correction - M - Radial - N - Display Keyboard - P - Front Loader - Q - RC5 Mirror - R - Drive Processor - S - Control - T - Supply - U - Analog I/O - V - Module Carrier - W - CPU Datagrabber - X - LV ROM - Y - Vid Mix - Z - Deck Electronics - - TODO: - - Driver currently fails the initial self-test with code 073. Per - the service manual, code 73 means "a/d converted mirror pos. min. - (out of field of view)". - -***************************************************************************/ - -#ifndef MAME_SKELETON_VP415_H -#define MAME_SKELETON_VP415_H - -#pragma once - -#include "cpu/mcs51/mcs51.h" -#include "cpu/mcs48/mcs48.h" -#include "cpu/z80/z80.h" - -#include "machine/i8155.h" -#include "machine/i8255.h" -#include "machine/ncr5385.h" -#include "machine/saa1043.h" - -#include "video/mb88303.h" - -#include "screen.h" - - -class vp415_state : public driver_device -{ -public: - vp415_state(const machine_config &mconfig, device_type type, const char *tag); - - void vp415(machine_config &config); - - static const char *const DATACPU_TAG; - static const char *const DATAMCU_TAG; - - static const char *const DESCRAMBLE_ROM_TAG; - static const char *const SYNC_ROM_TAG; - static const char *const DRIVE_ROM_TAG; - - static const char *const CTRLMCU_TAG; - static const char *const CONTROL_ROM_TAG; - - static const char *const SWITCHES_TAG; - -private: - virtual void machine_reset() override; - virtual void machine_start() override; - - TIMER_CALLBACK_MEMBER(drive_2ppr_tick); - - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - - void sel34_w(uint8_t data); - uint8_t sel37_r(); - - void cpu_int1_w(int state); - - void data_mcu_port1_w(uint8_t data); - uint8_t data_mcu_port1_r(); - void data_mcu_port2_w(uint8_t data); - uint8_t data_mcu_port2_r(); - - void ctrl_regs_w(offs_t offset, uint8_t data); - uint8_t ctrl_regs_r(offs_t offset); - void ctrl_cpu_port1_w(uint8_t data); - uint8_t ctrl_cpu_port1_r(); - void ctrl_cpu_port3_w(uint8_t data); - uint8_t ctrl_cpu_port3_r(); - - void ctrl_mcu_port1_w(uint8_t data); - uint8_t ctrl_mcu_port1_r(); - void ctrl_mcu_port2_w(uint8_t data); - uint8_t ctrl_mcu_port2_r(); - - uint8_t drive_i8155_pb_r(); - uint8_t drive_i8155_pc_r(); - - void drive_i8255_pa_w(uint8_t data); - void drive_i8255_pb_w(uint8_t data); - uint8_t drive_i8255_pc_r(); - void drive_cpu_port1_w(uint8_t data); - void drive_cpu_port3_w(uint8_t data); - - void refv_w(int state); - - // CPU Board enums - enum - { - SEL34_INTR_N = 0x01, - SEL34_RES = 0x20, - SEL34_ERD = 0x40, - SEL34_ENW = 0x80, - SEL34_INTR_N_BIT = 0, - SEL34_RES_BIT = 5, - SEL34_ERD_BIT = 6, - SEL34_ENW_BIT = 7, - }; - - enum - { - SEL37_ID0 = 0x01, - SEL37_ID1 = 0x02, - SEL37_BRD = 0x10, - SEL37_MON_N = 0x20, - SEL37_SK1c = 0x40, - SEL37_SK1d = 0x40, - - SEL37_ID0_BIT = 0, - SEL37_ID1_BIT = 1, - SEL37_BRD_BIT = 4, - SEL37_MON_N_BIT = 5, - SEL37_SK1c_BIT = 6, - SEL37_SK1d_BIT = 7, - }; - - // Control Board enums - enum - { - CTRL_P3_INT1 = 0x08, - - CTRL_P3_INT1_BIT = 3 - }; - - // Drive Board enums - enum - { - I8255PC_NOT_FOCUSED = 0x02, - I8255PC_0RPM_N = 0x08, - I8255PC_DISC_REFLECTION = 0x10, - }; - - enum - { - I8255PB_COMM1 = 0x01, - I8255PB_COMM2 = 0x02, - I8255PB_COMM3 = 0x04, - I8255PB_COMM4 = 0x08, - I8255PB_RLS_N = 0x10, - I8255PB_SL_PWR = 0x20, - I8255PB_RAD_FS_N = 0x40, - I8255PB_STR1 = 0x80, - - I8255PB_COMM1_BIT = 0, - I8255PB_COMM2_BIT = 1, - I8255PB_COMM3_BIT = 2, - I8255PB_COMM4_BIT = 3, - I8255PB_RLS_N_BIT = 4, - I8255PB_SL_PWR_BIT = 5, - I8255PB_RAD_FS_N_BIT = 6, - I8255PB_STR1_BIT = 7, - }; - - enum - { - I8155PB_2PPR = 0x01, - I8155PB_RAD_MIR = 0x04, - I8155PB_FRLOCK = 0x08, - - I8155PB_2PPR_BIT = 0, - I8155PB_RAD_MIR_BIT = 2, - I8155PB_FRLOCK_BIT = 3, - }; - - enum - { - DRIVE_P1_CP1 = 0x01, - DRIVE_P1_CP2 = 0x02, - DRIVE_P1_LDI = 0x04, - DRIVE_P1_ATN_N = 0x08, - DRIVE_P1_TX = 0x10, - DRIVE_P1_STB_N = 0x20, - DRIVE_P1_STR0_N = 0x40, - DRIVE_P1_TP2 = 0x80, - - DRIVE_P1_CP1_BIT = 0, - DRIVE_P1_CP2_BIT = 1, - DRIVE_P1_LDI_BIT = 2, - DRIVE_P1_ATN_N_BIT = 3, - DRIVE_P1_TX_BIT = 4, - DRIVE_P1_STB_N_BIT = 5, - DRIVE_P1_STR0_N_BIT = 6, - DRIVE_P1_TP2_BIT = 7 - }; - - virtual void video_start() override; - - void z80_program_map(address_map &map); - void z80_io_map(address_map &map); - void datamcu_program_map(address_map &map); - void set_int_line(uint8_t line, uint8_t value); - void update_cpu_int(); - - void ctrl_program_map(address_map &map); - void ctrl_io_map(address_map &map); - void ctrlmcu_program_map(address_map &map); - void sd_w(uint8_t data); - uint8_t sd_r(); - - void drive_program_map(address_map &map); - void drive_io_map(address_map &map); - - required_device m_datacpu; - required_device m_datamcu; - required_device m_scsi; - required_device m_drivecpu; - required_device m_ctrlcpu; - required_device m_ctrlmcu; - required_device m_chargen; - required_shared_ptr m_mainram; - required_shared_ptr m_ctrlram; - required_ioport m_switches; - - uint8_t m_sel34 = 0; - uint8_t m_sel37 = 0; - - uint8_t m_int_lines[2]{}; - - uint8_t m_refv = 0; - - uint8_t m_ctrl_cpu_p1 = 0; - uint8_t m_ctrl_cpu_p3 = 0; - uint8_t m_ctrl_mcu_p1 = 0; - uint8_t m_ctrl_mcu_p2 = 0; - - uint8_t m_drive_p1 = 0; - uint8_t m_drive_pc_bits = 0; - - uint8_t m_drive_rad_mir_dac = 0; - uint8_t m_drive_i8255_pb = 0; - emu_timer *m_drive_2ppr_timer = nullptr; - uint8_t m_drive_2ppr = 0; - - static const char *const DATARAM_TAG; - static const char *const SCSI_TAG; - - static const char *const CTRLCPU_TAG; - static const char *const CTRLRAM_TAG; - - static const char *const DRIVECPU_TAG; - static const char *const I8155_TAG; - static const char *const I8255_TAG; - static const char *const CHARGEN_TAG; - static const char *const SYNCGEN_TAG; -}; - -#endif // MAME_SKELETON_VP415_H diff --git a/src/mame/skeleton/xor100.cpp b/src/mame/skeleton/xor100.cpp index 04151b82459..73b3c21afdd 100644 --- a/src/mame/skeleton/xor100.cpp +++ b/src/mame/skeleton/xor100.cpp @@ -43,8 +43,108 @@ TODO: #include "emu.h" -#include "xor100.h" + +#include "bus/centronics/ctronics.h" #include "bus/rs232/rs232.h" +#include "bus/s100/s100.h" +#include "cpu/z80/z80.h" +#include "imagedev/floppy.h" +#include "machine/com8116.h" +#include "machine/i8251.h" +#include "machine/i8255.h" +#include "machine/ram.h" +#include "machine/wd_fdc.h" +#include "machine/z80ctc.h" + +namespace { + +#define SCREEN_TAG "screen" +#define Z80_TAG "5b" +#define I8251_A_TAG "12b" +#define I8251_B_TAG "14b" +#define I8255A_TAG "8a" +#define COM5016_TAG "15c" +#define Z80CTC_TAG "11b" +#define WD1795_TAG "wd1795" +#define CENTRONICS_TAG "centronics" +#define RS232_A_TAG "rs232a" +#define RS232_B_TAG "rs232b" +#define S100_TAG "s100" + +class xor100_state : public driver_device +{ +public: + xor100_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, Z80_TAG) + , m_uart_a(*this, I8251_A_TAG) + , m_uart_b(*this, I8251_B_TAG) + , m_fdc(*this, WD1795_TAG) + , m_ctc(*this, Z80CTC_TAG) + , m_ram(*this, RAM_TAG) + , m_centronics(*this, CENTRONICS_TAG) + , m_s100(*this, S100_TAG) + , m_floppy(*this, WD1795_TAG":%u", 0U) + , m_rom(*this, Z80_TAG) + , m_bank1(*this, "bank1") + , m_bank2(*this, "bank2") + , m_bank3(*this, "bank3") + { } + + void xor100(machine_config &config); + +private: + void mmu_w(uint8_t data); + void prom_toggle_w(uint8_t data); + uint8_t prom_disable_r(); + uint8_t fdc_wait_r(); + void fdc_dcont_w(uint8_t data); + void fdc_dsel_w(uint8_t data); + void fdc_intrq_w(bool state); + void fdc_drq_w(bool state); + + uint8_t i8255_pc_r(); + void ctc_z0_w(int state); + void ctc_z1_w(int state); + void ctc_z2_w(int state); + void write_centronics_busy(int state); + void write_centronics_select(int state); + + void xor100_io(address_map &map); + void xor100_mem(address_map &map); + + virtual void machine_start() override; + virtual void machine_reset() override; + + void bankswitch(); + void post_load(); + + required_device m_maincpu; + required_device m_uart_a; + required_device m_uart_b; + required_device m_fdc; + required_device m_ctc; + required_device m_ram; + required_device m_centronics; + required_device m_s100; + required_device_array m_floppy; + required_memory_region m_rom; + required_memory_bank m_bank1; + required_memory_bank m_bank2; + required_memory_bank m_bank3; + + // memory state + int m_mode = 0; + int m_bank = 0; + + // floppy state + bool m_fdc_irq = false; + bool m_fdc_drq = false; + int m_fdc_dden = 0; + + int m_centronics_busy = 0; + int m_centronics_select = 0; +}; /* Read/Write Handlers */ @@ -561,6 +661,8 @@ ROM_START( xor100 ) ROMX_LOAD( "xp 185.8b", 0x000, 0x800, CRC(0d0bda8d) SHA1(11c83f7cd7e6a570641b44a2f2cc5737a7dd8ae3), ROM_BIOS(0) ) ROM_END +} // anonymous namespace + /* System Drivers */ // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS diff --git a/src/mame/skeleton/xor100.h b/src/mame/skeleton/xor100.h deleted file mode 100644 index 8f777a5ea4a..00000000000 --- a/src/mame/skeleton/xor100.h +++ /dev/null @@ -1,107 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -#ifndef MAME_SKELETON_XOR100_H -#define MAME_SKELETON_XOR100_H - -#pragma once - -#include "bus/s100/s100.h" -#include "cpu/z80/z80.h" -#include "imagedev/floppy.h" -#include "machine/ram.h" -#include "machine/com8116.h" -#include "bus/centronics/ctronics.h" -#include "machine/i8255.h" -#include "machine/i8251.h" -#include "machine/wd_fdc.h" -#include "machine/z80ctc.h" - -#define SCREEN_TAG "screen" -#define Z80_TAG "5b" -#define I8251_A_TAG "12b" -#define I8251_B_TAG "14b" -#define I8255A_TAG "8a" -#define COM5016_TAG "15c" -#define Z80CTC_TAG "11b" -#define WD1795_TAG "wd1795" -#define CENTRONICS_TAG "centronics" -#define RS232_A_TAG "rs232a" -#define RS232_B_TAG "rs232b" -#define S100_TAG "s100" - -class xor100_state : public driver_device -{ -public: - xor100_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, Z80_TAG) - , m_uart_a(*this, I8251_A_TAG) - , m_uart_b(*this, I8251_B_TAG) - , m_fdc(*this, WD1795_TAG) - , m_ctc(*this, Z80CTC_TAG) - , m_ram(*this, RAM_TAG) - , m_centronics(*this, CENTRONICS_TAG) - , m_s100(*this, S100_TAG) - , m_floppy(*this, WD1795_TAG":%u", 0U) - , m_rom(*this, Z80_TAG) - , m_bank1(*this, "bank1") - , m_bank2(*this, "bank2") - , m_bank3(*this, "bank3") - { } - - void xor100(machine_config &config); - -private: - void mmu_w(uint8_t data); - void prom_toggle_w(uint8_t data); - uint8_t prom_disable_r(); - uint8_t fdc_wait_r(); - void fdc_dcont_w(uint8_t data); - void fdc_dsel_w(uint8_t data); - void fdc_intrq_w(bool state); - void fdc_drq_w(bool state); - - uint8_t i8255_pc_r(); - void ctc_z0_w(int state); - void ctc_z1_w(int state); - void ctc_z2_w(int state); - void write_centronics_busy(int state); - void write_centronics_select(int state); - - void xor100_io(address_map &map); - void xor100_mem(address_map &map); - - virtual void machine_start() override; - virtual void machine_reset() override; - - void bankswitch(); - void post_load(); - - required_device m_maincpu; - required_device m_uart_a; - required_device m_uart_b; - required_device m_fdc; - required_device m_ctc; - required_device m_ram; - required_device m_centronics; - required_device m_s100; - required_device_array m_floppy; - required_memory_region m_rom; - required_memory_bank m_bank1; - required_memory_bank m_bank2; - required_memory_bank m_bank3; - - // memory state - int m_mode = 0; - int m_bank = 0; - - // floppy state - bool m_fdc_irq = false; - bool m_fdc_drq = false; - int m_fdc_dden = 0; - - int m_centronics_busy = 0; - int m_centronics_select = 0; -}; - -#endif // MAME_SKELETON_XOR100_H diff --git a/src/mame/skeleton/zorba.cpp b/src/mame/skeleton/zorba.cpp index 84b0455d919..10d52b68100 100644 --- a/src/mame/skeleton/zorba.cpp +++ b/src/mame/skeleton/zorba.cpp @@ -51,25 +51,145 @@ ToDo: *************************************************************************************************************/ #include "emu.h" -#include "zorba.h" #include "zorbakbd.h" #include "bus/centronics/ctronics.h" +#include "bus/ieee488/ieee488.h" #include "bus/rs232/rs232.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m68705.h" +#include "imagedev/floppy.h" + +#include "machine/6821pia.h" +#include "machine/i8251.h" #include "machine/input_merger.h" #include "machine/output_latch.h" #include "machine/pit8253.h" +#include "machine/wd_fdc.h" +#include "machine/z80dma.h" + +#include "sound/beep.h" + +#include "video/i8275.h" +#include "emupal.h" #include "screen.h" #include "softlist_dev.h" #include "speaker.h" +namespace { + +class zorba_state : public driver_device +{ +public: + zorba_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_config_port(*this, "CNF") + , m_rom(*this, "maincpu") + , m_ram(*this, "mainram") + , m_bank1(*this, "bank1") + , m_p_chargen(*this, "chargen") + , m_maincpu(*this, "maincpu") + , m_dma(*this, "dma") + , m_uart0(*this, "uart0") + , m_uart1(*this, "uart1") + , m_uart2(*this, "uart2") + , m_pia0(*this, "pia0") + , m_pia1(*this, "pia1") + , m_palette(*this, "palette") + , m_crtc(*this, "crtc") + , m_beep(*this, "beeper") + , m_fdc (*this, "fdc") + , m_floppy0(*this, "fdc:0") + , m_floppy1(*this, "fdc:1") + , m_ieee(*this, IEEE488_TAG) + { + } + + DECLARE_INPUT_CHANGED_MEMBER(printer_type); + void zorba(machine_config &config); + +private: + virtual void machine_start() override; + virtual void machine_reset() override; + + void zorba_io(address_map &map); + void zorba_mem(address_map &map); + + // Memory banking control + uint8_t ram_r(); + void ram_w(uint8_t data); + uint8_t rom_r(); + void rom_w(uint8_t data); + + // Interrupt vectoring glue + void intmask_w(uint8_t data); + template void tx_rx_rdy_w(int state); + template void irq_w(int state); + + // DMA controller handlers + void busreq_w(int state); + uint8_t memory_read_byte(offs_t offset); + void memory_write_byte(offs_t offset, uint8_t data); + uint8_t io_read_byte(offs_t offset); + void io_write_byte(offs_t offset, uint8_t data); + + // PIT handlers + void br1_w(int state); + + // PIA handlers + void pia0_porta_w(uint8_t data); + uint8_t pia1_portb_r(); + void pia1_portb_w(uint8_t data); + + // Video + I8275_DRAW_CHARACTER_MEMBER(zorba_update_chr); + + // Printer port glue + void printer_fault_w(int state); + void printer_select_w(int state); + + required_ioport m_config_port; + + required_region_ptr m_rom; + required_shared_ptr m_ram; + required_memory_bank m_bank1; + required_region_ptr m_p_chargen; + + required_device m_maincpu; + required_device m_dma; + required_device m_uart0; + required_device m_uart1; + required_device m_uart2; + required_device m_pia0; + required_device m_pia1; + + required_device m_palette; + required_device m_crtc; + + required_device m_beep; + + required_device m_fdc; + required_device m_floppy0; + required_device m_floppy1; + + required_device m_ieee; + + uint8_t m_intmask = 0U; + uint8_t m_tx_rx_rdy = 0U; + uint8_t m_irq = 0U; + + bool m_printer_prowriter = false; + int m_printer_fault = 0; + int m_printer_select = 0; + + uint8_t m_term_data = 0U; +}; + void zorba_state::zorba_mem(address_map &map) { map(0x0000, 0xffff).ram().share("mainram"); @@ -549,6 +669,8 @@ ROM_START( zorba ) ROM_LOAD( "74ls288.u77", 0x0040, 0x0020, CRC(946e03b0) SHA1(24240bdd7bdf507a5b51628fb36ad1266fc53a28) BAD_DUMP ) // looks like bad dump of address decode PROM ROM_END +} // anonymous namespace + COMP( 1984?, zorba, 0, 0, zorba, zorba, zorba_state, empty_init, "Modular Micros", "Zorba (Modular Micros)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Undumped versions (see startup screen notes at top of file) diff --git a/src/mame/skeleton/zorba.h b/src/mame/skeleton/zorba.h deleted file mode 100644 index 392ae6a0ff0..00000000000 --- a/src/mame/skeleton/zorba.h +++ /dev/null @@ -1,131 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Robbbert, Vas Crabb -#ifndef MAME_SKELETON_ZORBA_H -#define MAME_SKELETON_ZORBA_H - -#pragma once - -#include "sound/beep.h" - -#include "bus/ieee488/ieee488.h" - -#include "imagedev/floppy.h" - -#include "machine/6821pia.h" -#include "machine/i8251.h" -#include "machine/wd_fdc.h" -#include "machine/z80dma.h" - -#include "video/i8275.h" - -#include "emupal.h" - - -class zorba_state : public driver_device -{ -public: - zorba_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_config_port(*this, "CNF") - , m_rom(*this, "maincpu") - , m_ram(*this, "mainram") - , m_bank1(*this, "bank1") - , m_p_chargen(*this, "chargen") - , m_maincpu(*this, "maincpu") - , m_dma(*this, "dma") - , m_uart0(*this, "uart0") - , m_uart1(*this, "uart1") - , m_uart2(*this, "uart2") - , m_pia0(*this, "pia0") - , m_pia1(*this, "pia1") - , m_palette(*this, "palette") - , m_crtc(*this, "crtc") - , m_beep(*this, "beeper") - , m_fdc (*this, "fdc") - , m_floppy0(*this, "fdc:0") - , m_floppy1(*this, "fdc:1") - , m_ieee(*this, IEEE488_TAG) - { - } - - DECLARE_INPUT_CHANGED_MEMBER(printer_type); - void zorba(machine_config &config); - -private: - virtual void machine_start() override; - virtual void machine_reset() override; - - void zorba_io(address_map &map); - void zorba_mem(address_map &map); - - // Memory banking control - uint8_t ram_r(); - void ram_w(uint8_t data); - uint8_t rom_r(); - void rom_w(uint8_t data); - - // Interrupt vectoring glue - void intmask_w(uint8_t data); - template void tx_rx_rdy_w(int state); - template void irq_w(int state); - - // DMA controller handlers - void busreq_w(int state); - uint8_t memory_read_byte(offs_t offset); - void memory_write_byte(offs_t offset, uint8_t data); - uint8_t io_read_byte(offs_t offset); - void io_write_byte(offs_t offset, uint8_t data); - - // PIT handlers - void br1_w(int state); - - // PIA handlers - void pia0_porta_w(uint8_t data); - uint8_t pia1_portb_r(); - void pia1_portb_w(uint8_t data); - - // Video - I8275_DRAW_CHARACTER_MEMBER(zorba_update_chr); - - // Printer port glue - void printer_fault_w(int state); - void printer_select_w(int state); - - required_ioport m_config_port; - - required_region_ptr m_rom; - required_shared_ptr m_ram; - required_memory_bank m_bank1; - required_region_ptr m_p_chargen; - - required_device m_maincpu; - required_device m_dma; - required_device m_uart0; - required_device m_uart1; - required_device m_uart2; - required_device m_pia0; - required_device m_pia1; - - required_device m_palette; - required_device m_crtc; - - required_device m_beep; - - required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - - required_device m_ieee; - - uint8_t m_intmask = 0U; - uint8_t m_tx_rx_rdy = 0U; - uint8_t m_irq = 0U; - - bool m_printer_prowriter = false; - int m_printer_fault = 0; - int m_printer_select = 0; - - uint8_t m_term_data = 0U; -}; - -#endif // MAME_SKELETON_ZORBA_H -- cgit v1.2.3