diff options
-rw-r--r-- | hash/sms.xml | 7 | ||||
-rw-r--r-- | src/devices/bus/sega8/rom.cpp | 1 | ||||
-rw-r--r-- | src/devices/bus/sms_ctrl/multitap.cpp | 2 | ||||
-rw-r--r-- | src/devices/cpu/mn10200/mn10200.cpp | 10 | ||||
-rw-r--r-- | src/devices/cpu/mn10200/mn10200.h | 1 | ||||
-rw-r--r-- | src/emu/ioport.cpp | 90 | ||||
-rw-r--r-- | src/mame/drivers/cm1800.cpp | 18 | ||||
-rw-r--r-- | src/mame/drivers/cninja.cpp | 8 | ||||
-rw-r--r-- | src/mame/drivers/deco32.cpp | 6 | ||||
-rw-r--r-- | src/mame/drivers/dsb46.cpp | 77 | ||||
-rw-r--r-- | src/mame/drivers/jade.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/mits680b.cpp | 79 | ||||
-rw-r--r-- | src/mame/drivers/pm68k.cpp | 23 | ||||
-rw-r--r-- | src/mame/drivers/sms.cpp | 6 | ||||
-rw-r--r-- | src/mame/drivers/systec.cpp | 67 | ||||
-rw-r--r-- | src/mame/drivers/zsbc3.cpp | 64 | ||||
-rw-r--r-- | src/mame/machine/deco_irq.cpp | 131 | ||||
-rw-r--r-- | src/mame/machine/deco_irq.h | 15 | ||||
-rw-r--r-- | src/mame/machine/sms.cpp | 4 | ||||
-rw-r--r-- | src/mame/video/model2rd.hxx | 12 |
20 files changed, 324 insertions, 301 deletions
diff --git a/hash/sms.xml b/hash/sms.xml index 21732b0d136..f64bb718b87 100644 --- a/hash/sms.xml +++ b/hash/sms.xml @@ -3547,6 +3547,7 @@ <year>1993</year> <publisher>Sieco</publisher> <part name="cart" interface="sms_cart"> + <feature name="slot" value="korean" /> <dataarea name="rom" size="524288"> <rom name="jang pung ii (kr).bin" size="524288" crc="929222c4" sha1="10a5095513efebae3d045b217caa7a520e66f26f" offset="000000" /> </dataarea> @@ -6803,6 +6804,12 @@ <publisher>Virgin Interactive</publisher> <info name="serial" value="MK-27025-50"/> <part name="cart" interface="sms_cart"> + <!-- PCB info based on elotrolado.net forum: + https://www.elotrolado.net/hilo_hilo-oficial-dossier-completo-de-sega-master-system_2197710_s60 + --> + <feature name="pcb" value="171-6339A" /> + <feature name="ic1" value="MPR-14831-F" /> + <feature name="ic2" value="KM62256BLP-10L" /> <!-- 32768 * 8 bit CMOS Static RAM --> <dataarea name="rom" size="262144"> <rom name="terminator, the (europe).bin" size="262144" crc="edc5c012" sha1="eaf733d385e61526b90c1b194bf605078d43e2d3" offset="000000" /> </dataarea> diff --git a/src/devices/bus/sega8/rom.cpp b/src/devices/bus/sega8/rom.cpp index 6057b23aa97..9006cc1f013 100644 --- a/src/devices/bus/sega8/rom.cpp +++ b/src/devices/bus/sega8/rom.cpp @@ -250,6 +250,7 @@ void sega8_4pak_device::device_start() void sega8_4pak_device::device_reset() { memset(m_reg, 0, sizeof(m_reg)); + memset(m_rom_bank_base, 0, sizeof(m_rom_bank_base)); } diff --git a/src/devices/bus/sms_ctrl/multitap.cpp b/src/devices/bus/sms_ctrl/multitap.cpp index 8adbb39fa13..d0d4e6e7293 100644 --- a/src/devices/bus/sms_ctrl/multitap.cpp +++ b/src/devices/bus/sms_ctrl/multitap.cpp @@ -17,7 +17,7 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(SMS_MULTITAP, sms_multitap_device, "sms_multitap", "Sega SMS Multitap") +DEFINE_DEVICE_TYPE(SMS_MULTITAP, sms_multitap_device, "sms_multitap", "Furrtek SMS Multitap") //************************************************************************** diff --git a/src/devices/cpu/mn10200/mn10200.cpp b/src/devices/cpu/mn10200/mn10200.cpp index def87ca557f..59407b507ca 100644 --- a/src/devices/cpu/mn10200/mn10200.cpp +++ b/src/devices/cpu/mn10200/mn10200.cpp @@ -208,10 +208,12 @@ void mn10200_device::device_start() m_serial[i].ctrll = 0; m_serial[i].ctrlh = 0; m_serial[i].buf = 0; + m_serial[i].recv = 0; save_item(NAME(m_serial[i].ctrll), i); save_item(NAME(m_serial[i].ctrlh), i); save_item(NAME(m_serial[i].buf), i); + save_item(NAME(m_serial[i].recv), i); } // ports @@ -2153,13 +2155,13 @@ READ8_MEMBER(mn10200_device::io_control_r) case 0x181: case 0x191: return m_serial[(offset-0x180) >> 4].ctrlh; - case 0x182: + case 0x182: //case 0x192: { - static int zz; - return zz++; + int ser = (offset-0x180) >> 4; + return m_serial[ser].recv++; } - case 0x183: + case 0x183: //case 0x193: return 0x10; // 8-bit timers diff --git a/src/devices/cpu/mn10200/mn10200.h b/src/devices/cpu/mn10200/mn10200.h index 221625a60e3..307b0b4b6a9 100644 --- a/src/devices/cpu/mn10200/mn10200.h +++ b/src/devices/cpu/mn10200/mn10200.h @@ -162,6 +162,7 @@ private: uint8_t ctrll; uint8_t ctrlh; uint8_t buf; + uint8_t recv; } m_serial[2]; // ports diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp index eae5a94faa0..bf241f30b57 100644 --- a/src/emu/ioport.cpp +++ b/src/emu/ioport.cpp @@ -779,51 +779,51 @@ std::string ioport_field::key_name(int which) const // attempt to get the string from the character info table switch (ch) { - case 8: return "Backspace"; - case 9: return "Tab"; - case 12: return "Clear"; - case 13: return "Enter"; - case 27: return "Esc"; - case 32: return "Space"; - case UCHAR_SHIFT_1: return "Shift"; - case UCHAR_SHIFT_2: return "Ctrl"; - case UCHAR_MAMEKEY(ESC): return "Esc"; - case UCHAR_MAMEKEY(INSERT): return "Insert"; - case UCHAR_MAMEKEY(DEL): return "Delete"; - case UCHAR_MAMEKEY(HOME): return "Home"; - case UCHAR_MAMEKEY(END): return "End"; - case UCHAR_MAMEKEY(PGUP): return "Page Up"; - case UCHAR_MAMEKEY(PGDN): return "Page Down"; - case UCHAR_MAMEKEY(LEFT): return "Cursor Left"; - case UCHAR_MAMEKEY(RIGHT): return "Cursor Right"; - case UCHAR_MAMEKEY(UP): return "Cursor Up"; - case UCHAR_MAMEKEY(DOWN): return "Cursor Down"; - case UCHAR_MAMEKEY(SLASH_PAD): return "Keypad /"; - case UCHAR_MAMEKEY(ASTERISK): return "Keypad *"; - case UCHAR_MAMEKEY(MINUS_PAD): return "Keypad -"; - case UCHAR_MAMEKEY(PLUS_PAD): return "Keypad +"; - case UCHAR_MAMEKEY(DEL_PAD): return "Keypad ."; - case UCHAR_MAMEKEY(ENTER_PAD): return "Keypad Enter"; - case UCHAR_MAMEKEY(BS_PAD): return "Keypad Backspace"; - case UCHAR_MAMEKEY(TAB_PAD): return "Keypad Tab"; - case UCHAR_MAMEKEY(00_PAD): return "Keypad 00"; - case UCHAR_MAMEKEY(000_PAD): return "Keypad 000"; - case UCHAR_MAMEKEY(PRTSCR): return "Print Screen"; - case UCHAR_MAMEKEY(PAUSE): return "Pause"; - case UCHAR_MAMEKEY(LSHIFT): return "Left Shift"; - case UCHAR_MAMEKEY(RSHIFT): return "Right Shift"; - case UCHAR_MAMEKEY(LCONTROL): return "Left Ctrl"; - case UCHAR_MAMEKEY(RCONTROL): return "Right Ctrl"; - case UCHAR_MAMEKEY(LALT): return "Left Alt"; - case UCHAR_MAMEKEY(RALT): return "Right Alt"; - case UCHAR_MAMEKEY(SCRLOCK): return "Scroll Lock"; - case UCHAR_MAMEKEY(NUMLOCK): return "Num Lock"; - case UCHAR_MAMEKEY(CAPSLOCK): return "Caps Lock"; - case UCHAR_MAMEKEY(LWIN): return "Left Win"; - case UCHAR_MAMEKEY(RWIN): return "Right Win"; - case UCHAR_MAMEKEY(MENU): return "Menu"; - case UCHAR_MAMEKEY(CANCEL): return "Break"; - default: break; + case 8: return "Backspace"; + case 9: return "Tab"; + case 12: return "Clear"; + case 13: return "Enter"; + case 27: return "Esc"; + case 32: return "Space"; + case UCHAR_SHIFT_1: return "Shift"; + case UCHAR_SHIFT_2: return "Ctrl"; + case UCHAR_MAMEKEY(ESC): return "Esc"; + case UCHAR_MAMEKEY(INSERT): return "Insert"; + case UCHAR_MAMEKEY(DEL): return "Delete"; + case UCHAR_MAMEKEY(HOME): return "Home"; + case UCHAR_MAMEKEY(END): return "End"; + case UCHAR_MAMEKEY(PGUP): return "Page Up"; + case UCHAR_MAMEKEY(PGDN): return "Page Down"; + case UCHAR_MAMEKEY(LEFT): return "Cursor Left"; + case UCHAR_MAMEKEY(RIGHT): return "Cursor Right"; + case UCHAR_MAMEKEY(UP): return "Cursor Up"; + case UCHAR_MAMEKEY(DOWN): return "Cursor Down"; + case UCHAR_MAMEKEY(SLASH_PAD): return "Keypad /"; + case UCHAR_MAMEKEY(ASTERISK): return "Keypad *"; + case UCHAR_MAMEKEY(MINUS_PAD): return "Keypad -"; + case UCHAR_MAMEKEY(PLUS_PAD): return "Keypad +"; + case UCHAR_MAMEKEY(DEL_PAD): return "Keypad ."; + case UCHAR_MAMEKEY(ENTER_PAD): return "Keypad Enter"; + case UCHAR_MAMEKEY(BS_PAD): return "Keypad Backspace"; + case UCHAR_MAMEKEY(TAB_PAD): return "Keypad Tab"; + case UCHAR_MAMEKEY(00_PAD): return "Keypad 00"; + case UCHAR_MAMEKEY(000_PAD): return "Keypad 000"; + case UCHAR_MAMEKEY(PRTSCR): return "Print Screen"; + case UCHAR_MAMEKEY(PAUSE): return "Pause"; + case UCHAR_MAMEKEY(LSHIFT): return "Left Shift"; + case UCHAR_MAMEKEY(RSHIFT): return "Right Shift"; + case UCHAR_MAMEKEY(LCONTROL): return "Left Ctrl"; + case UCHAR_MAMEKEY(RCONTROL): return "Right Ctrl"; + case UCHAR_MAMEKEY(LALT): return "Left Alt"; + case UCHAR_MAMEKEY(RALT): return "Right Alt"; + case UCHAR_MAMEKEY(SCRLOCK): return "Scroll Lock"; + case UCHAR_MAMEKEY(NUMLOCK): return "Num Lock"; + case UCHAR_MAMEKEY(CAPSLOCK): return "Caps Lock"; + case UCHAR_MAMEKEY(LWIN): return "Left Win"; + case UCHAR_MAMEKEY(RWIN): return "Right Win"; + case UCHAR_MAMEKEY(MENU): return "Menu"; + case UCHAR_MAMEKEY(CANCEL): return "Break"; + default: break; } // handle function keys diff --git a/src/mame/drivers/cm1800.cpp b/src/mame/drivers/cm1800.cpp index 621b45de5bc..10d8b700a24 100644 --- a/src/mame/drivers/cm1800.cpp +++ b/src/mame/drivers/cm1800.cpp @@ -37,23 +37,21 @@ to be a save command. #include "cpu/i8085/i8085.h" #include "machine/terminal.h" -#define TERMINAL_TAG "terminal" class cm1800_state : public driver_device { public: cm1800_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_terminal(*this, TERMINAL_TAG) + , m_terminal(*this, "terminal") , m_maincpu(*this, "maincpu") - { - } + { } DECLARE_READ8_MEMBER( term_status_r ); DECLARE_READ8_MEMBER( term_r ); void kbd_put(u8 data); -protected: +private: virtual void machine_reset() override; uint8_t m_term_data; @@ -81,14 +79,15 @@ void cm1800_state::kbd_put(u8 data) static ADDRESS_MAP_START(cm1800_mem, AS_PROGRAM, 8, cm1800_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE( 0x0000, 0x07ff ) AM_ROM + AM_RANGE( 0x0000, 0x07ff ) AM_ROM AM_REGION("roms", 0) AM_RANGE( 0x0800, 0xffff ) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( cm1800_io , AS_IO, 8, cm1800_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00, 0x00) AM_READ(term_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) + AM_RANGE(0x00, 0x00) AM_READ(term_r) AM_DEVWRITE("terminal", generic_terminal_device, write) AM_RANGE(0x01, 0x01) AM_READ(term_status_r) + AM_RANGE(0x03, 0x03) // unknown uart, initialisation bytes 08 then 48, so not 6551. ADDRESS_MAP_END /* Input ports */ @@ -106,15 +105,14 @@ static MACHINE_CONFIG_START( cm1800 ) MCFG_CPU_PROGRAM_MAP(cm1800_mem) MCFG_CPU_IO_MAP(cm1800_io) - /* video hardware */ - MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0) + MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0) MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(cm1800_state, kbd_put)) MACHINE_CONFIG_END /* ROM definition */ ROM_START( cm1800 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x800, "roms", ROMREGION_ERASEFF ) ROM_LOAD( "cm1800.rom", 0x0000, 0x0800, CRC(85d71d25) SHA1(42dc87d2eddc2906fa26d35db88a2e29d50fb481) ) ROM_END diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp index 2bbd743b187..6790570ad9a 100644 --- a/src/mame/drivers/cninja.cpp +++ b/src/mame/drivers/cninja.cpp @@ -122,7 +122,7 @@ static ADDRESS_MAP_START( cninja_map, AS_PROGRAM, 16, cninja_state ) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_SHARE("pf4_rowscroll") AM_RANGE(0x184000, 0x187fff) AM_RAM AM_SHARE("ram") - AM_RANGE(0x190000, 0x190007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff) + AM_RANGE(0x190000, 0x190007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff) AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram") AM_RANGE(0x1a4000, 0x1a47ff) AM_RAM AM_SHARE("spriteram") /* Sprites */ @@ -158,7 +158,7 @@ static ADDRESS_MAP_START( cninjabl_map, AS_PROGRAM, 16, cninja_state ) AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg? - AM_RANGE(0x190000, 0x190007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff) + AM_RANGE(0x190000, 0x190007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff) AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram") AM_RANGE(0x1b4000, 0x1b4001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */ @@ -230,7 +230,7 @@ static ADDRESS_MAP_START( edrandy_map, AS_PROGRAM, 16, cninja_state ) AM_RANGE(0x1a0000, 0x1a3fff) AM_READWRITE(sshangha_protection_region_8_146_r,sshangha_protection_region_8_146_w) - AM_RANGE(0x1a4000, 0x1a4007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff) + AM_RANGE(0x1a4000, 0x1a4007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff) AM_RANGE(0x1ac000, 0x1ac001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */ AM_RANGE(0x1bc000, 0x1bc7ff) AM_RAM AM_SHARE("spriteram") /* Sprites */ AM_RANGE(0x1bc800, 0x1bcfff) AM_WRITENOP /* Another bug in game code? Sprite list can overrun. Doesn't seem to mirror */ @@ -261,7 +261,7 @@ static ADDRESS_MAP_START( robocop2_map, AS_PROGRAM, 16, cninja_state ) AM_RANGE(0x198000, 0x198001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */ AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram") - AM_RANGE(0x1b0000, 0x1b0007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff) + AM_RANGE(0x1b0000, 0x1b0007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff) AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_SHARE("ram") /* Main ram */ AM_RANGE(0x1f0000, 0x1f0001) AM_DEVWRITE("deco_common", decocomn_device, priority_w) AM_RANGE(0x1f8000, 0x1f8001) AM_READ_PORT("DSW3") /* Dipswitch #3 */ diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index 88404a9805f..844937b2fce 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -746,7 +746,7 @@ static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, deco32_state ) AM_RANGE(0x128000, 0x12ffff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff) AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(nonbuffered_palette_w) AM_SHARE("paletteram") /* Palette RAM */ - AM_RANGE(0x148000, 0x14800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff) + AM_RANGE(0x148000, 0x14800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff) AM_RANGE(0x160000, 0x167fff) AM_RAM /* Extra work RAM */ AM_RANGE(0x168000, 0x168003) AM_READ(captaven_soundcpu_r) @@ -903,7 +903,7 @@ static ADDRESS_MAP_START( dragngun_map, AS_PROGRAM, 32, dragngun_state ) AM_RANGE(0x0120000, 0x0127fff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff) // AM_RANGE(0x01204c0, 0x01204c3) AM_WRITE(sound_w) - AM_RANGE(0x0128000, 0x012800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff) + AM_RANGE(0x0128000, 0x012800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff) AM_RANGE(0x0130000, 0x0131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram") AM_RANGE(0x0138000, 0x0138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */ AM_RANGE(0x0138008, 0x013800b) AM_WRITE(palette_dma_w) @@ -965,7 +965,7 @@ static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32, dragngun_state ) // AM_RANGE(0x1204c0, 0x1204c3) AM_WRITE(sound_w) AM_RANGE(0x120000, 0x127fff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff) - AM_RANGE(0x128000, 0x12800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff) + AM_RANGE(0x128000, 0x12800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff) AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram") AM_RANGE(0x138000, 0x138003) AM_READONLY AM_WRITENOP //palette dma complete in bit 0x8? ack? return 0 else tight loop diff --git a/src/mame/drivers/dsb46.cpp b/src/mame/drivers/dsb46.cpp index 4b665f66fd9..7e40b29a3f1 100644 --- a/src/mame/drivers/dsb46.cpp +++ b/src/mame/drivers/dsb46.cpp @@ -6,6 +6,15 @@ 2013-07-31 Connected to terminal [Robbbert] 2016-07-11 After 10 seconds the monitor program will start [Robbbert] +Commands: (no spaces allowed) +B - Boot the disk +D - Dump memory to screen +F - Fill Memory +G - Go To +H - Help +P - Alter port values +S - Alter memory + The photos show 3 boards: - A scsi board (all 74-series TTL) @@ -21,7 +30,11 @@ Both roms contain Z80 code. #include "emu.h" #include "cpu/z80/z80.h" -#include "machine/terminal.h" +#include "cpu/z80/z80daisy.h" +#include "machine/z80ctc.h" +#include "machine/z80sio.h" +#include "machine/clock.h" +#include "bus/rs232/rs232.h" class dsb46_state : public driver_device @@ -30,20 +43,17 @@ public: dsb46_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_terminal(*this, "terminal") - { - } + , m_sio(*this, "sio") + { } - DECLARE_READ8_MEMBER(port00_r); - DECLARE_READ8_MEMBER(port01_r); - void kbd_put(u8 data); + DECLARE_WRITE_LINE_MEMBER(clock_tick); DECLARE_WRITE8_MEMBER(port1a_w); DECLARE_DRIVER_INIT(dsb46); DECLARE_MACHINE_RESET(dsb46); + private: - uint8_t m_term_data; required_device<cpu_device> m_maincpu; - required_device<generic_terminal_device> m_terminal; + required_device<z80sio_device> m_sio; }; static ADDRESS_MAP_START( dsb46_mem, AS_PROGRAM, 8, dsb46_state ) @@ -54,13 +64,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( dsb46_io, AS_IO, 8, dsb46_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00, 0x00) AM_READ(port00_r) AM_DEVWRITE("terminal", generic_terminal_device, write) - AM_RANGE(0x01, 0x01) AM_READ(port01_r) + AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("sio", z80sio_device, ba_cd_r, ba_cd_w) + AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ctc1", z80ctc_device, read, write) AM_RANGE(0x1a, 0x1a) AM_WRITE(port1a_w) - //AM_RANGE(0x00, 0x01) uartch1 - //AM_RANGE(0x02, 0x03) uartch2 - //AM_RANGE(0x08, 0x08) ?? - //AM_RANGE(0x0a, 0x0b) ?? //AM_RANGE(0x10, 0x10) disk related //AM_RANGE(0x14, 0x14) ?? //AM_RANGE(0x18, 0x18) ?? @@ -83,7 +89,6 @@ MACHINE_RESET_MEMBER( dsb46_state,dsb46 ) { membank("read")->set_entry(0); membank("write")->set_entry(0); - m_term_data = 0; m_maincpu->reset(); } @@ -92,33 +97,47 @@ WRITE8_MEMBER( dsb46_state::port1a_w ) membank("read")->set_entry(data & 1); } -READ8_MEMBER( dsb46_state::port01_r ) +// source of baud frequency is unknown, so we invent a clock +WRITE_LINE_MEMBER( dsb46_state::clock_tick ) { - return (m_term_data) ? 5 : 4; + m_sio->txca_w(state); + m_sio->rxca_w(state); } -READ8_MEMBER( dsb46_state::port00_r ) +static const z80_daisy_config daisy_chain[] = { - uint8_t ret = m_term_data; - m_term_data = 0; - return ret; -} + { "ctc1" }, + { "sio" }, + { nullptr } +}; -void dsb46_state::kbd_put(u8 data) -{ - m_term_data = data; -} static MACHINE_CONFIG_START( dsb46 ) // basic machine hardware MCFG_CPU_ADD("maincpu", Z80, 4000000) MCFG_CPU_PROGRAM_MAP(dsb46_mem) MCFG_CPU_IO_MAP(dsb46_io) + MCFG_Z80_DAISY_CHAIN(daisy_chain) + MCFG_MACHINE_RESET_OVERRIDE(dsb46_state, dsb46) /* video hardware */ - MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(dsb46_state, kbd_put)) + MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(dsb46_state, clock_tick)) + + /* Devices */ + MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0) + MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd)) + MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) + MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts)) + + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w)) + + MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL_4MHz) + MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) MACHINE_CONFIG_END ROM_START( dsb46 ) diff --git a/src/mame/drivers/jade.cpp b/src/mame/drivers/jade.cpp index e59d2e2ffa4..73dbe093cff 100644 --- a/src/mame/drivers/jade.cpp +++ b/src/mame/drivers/jade.cpp @@ -73,12 +73,12 @@ static MACHINE_CONFIG_START( jade ) MCFG_CPU_PROGRAM_MAP(jade_mem) MCFG_CPU_IO_MAP(jade_io) - MCFG_DEVICE_ADD("siot_clock", CLOCK, 153600) + MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jade_state, clock_tick)) /* Devices */ MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0) - //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // interrupts not programmed by default + //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd)) MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts)) diff --git a/src/mame/drivers/mits680b.cpp b/src/mame/drivers/mits680b.cpp index cd3c008ab58..9511b933d46 100644 --- a/src/mame/drivers/mits680b.cpp +++ b/src/mame/drivers/mits680b.cpp @@ -2,11 +2,10 @@ // copyright-holders:Miodrag Milanovic, Robbbert /*************************************************************************** - MITS Altair 680b +MITS Altair 680b - 03/12/2009 Skeleton driver. - - 08/June/2011 connected to a terminal +2009-12-03 Skeleton driver. +2011-06-08 Connected to a terminal Monitor Commands: J @@ -17,39 +16,34 @@ P this does a rti and causes a momentary crash. Weird. ToDo: -- Hook ACIA back up, when there is some way to use it. ****************************************************************************/ #include "emu.h" #include "cpu/m6800/m6800.h" -#include "machine/mos6551.h" -#include "machine/terminal.h" +#include "machine/6850acia.h" +#include "bus/rs232/rs232.h" +#include "machine/clock.h" -#define TERMINAL_TAG "terminal" class mits680b_state : public driver_device { public: mits680b_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_terminal(*this, TERMINAL_TAG) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_acia(*this, "acia") { } - DECLARE_READ8_MEMBER(terminal_status_r); - DECLARE_READ8_MEMBER(terminal_r); DECLARE_READ8_MEMBER(status_check_r); - void kbd_put(u8 data); + DECLARE_WRITE_LINE_MEMBER(clock_tick); -protected: +private: virtual void machine_reset() override; - required_device<cpu_device> m_maincpu; - required_device<generic_terminal_device> m_terminal; - uint8_t m_term_data; + required_device<acia6850_device> m_acia; }; READ8_MEMBER( mits680b_state::status_check_r ) @@ -57,27 +51,20 @@ READ8_MEMBER( mits680b_state::status_check_r ) return 0; // crashes at start if bit 7 high } -READ8_MEMBER( mits680b_state::terminal_status_r ) -{ - return (m_term_data) ? 3 : 2; -} - -READ8_MEMBER( mits680b_state::terminal_r ) +WRITE_LINE_MEMBER( mits680b_state::clock_tick ) { - uint8_t ret = m_term_data; - m_term_data = 0; - return ret; + m_acia->write_txc(state); + m_acia->write_rxc(state); } static ADDRESS_MAP_START(mits680b_mem, AS_PROGRAM, 8, mits680b_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE( 0x0000, 0x03ff ) AM_RAM // 1024 bytes RAM - //AM_RANGE( 0xf000, 0xf003 ) AM_DEVREADWRITE("acia", mos6551_device, read, write ) - AM_RANGE( 0xf000, 0xf000 ) AM_READ(terminal_status_r) - AM_RANGE( 0xf001, 0xf001 ) AM_READ(terminal_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) - AM_RANGE( 0xf002, 0xf002 ) AM_READ(status_check_r) - AM_RANGE( 0xff00, 0xffff ) AM_ROM + AM_RANGE(0x0000, 0x03ff) AM_RAM // 1024 bytes RAM + AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w) + AM_RANGE(0xf001, 0xf001) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w) + AM_RANGE(0xf002, 0xf002) AM_READ(status_check_r) + AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("roms", 0) ADDRESS_MAP_END /* Input ports */ @@ -87,31 +74,29 @@ INPUT_PORTS_END void mits680b_state::machine_reset() { - m_term_data = 0; -} - -void mits680b_state::kbd_put(u8 data) -{ - m_term_data = data; } static MACHINE_CONFIG_START( mits680b ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu",M6800, XTAL_1MHz / 2) + MCFG_CPU_ADD("maincpu", M6800, XTAL_1MHz / 2) MCFG_CPU_PROGRAM_MAP(mits680b_mem) - /* video hardware */ - MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(mits680b_state, kbd_put)) + MCFG_DEVICE_ADD("acia", ACIA6850, 0) + MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd)) + MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) + + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) - /* acia */ - //MCFG_ACIA6551_ADD("acia") + MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(mits680b_state, clock_tick)) MACHINE_CONFIG_END /* ROM definition */ ROM_START( mits680b ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "mits680b.bin", 0xff00, 0x0100, CRC(397e717f) SHA1(257d3eb1343b8611dc05455aeed33615d581f29c)) + ROM_REGION( 0x100, "roms", ROMREGION_ERASEFF ) + ROM_LOAD( "mits680b.bin", 0x0000, 0x0100, CRC(397e717f) SHA1(257d3eb1343b8611dc05455aeed33615d581f29c)) ROM_END /* Driver */ diff --git a/src/mame/drivers/pm68k.cpp b/src/mame/drivers/pm68k.cpp index fb1c6721970..570f6e59770 100644 --- a/src/mame/drivers/pm68k.cpp +++ b/src/mame/drivers/pm68k.cpp @@ -14,22 +14,21 @@ Status: Boots into monitor, some commands work, some freeze. #include "cpu/m68000/m68000.h" #include "machine/terminal.h" -#define TERMINAL_TAG "terminal" class pm68k_state : public driver_device { public: pm68k_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_p_base(*this, "rambase"), - m_maincpu(*this, "maincpu"), - m_terminal(*this, TERMINAL_TAG) - { - } + : driver_device(mconfig, type, tag) + , m_p_base(*this, "rambase") + , m_maincpu(*this, "maincpu") + , m_terminal(*this, "terminal") + { } void kbd_put(u8 data); DECLARE_READ16_MEMBER(keyin_r); DECLARE_READ16_MEMBER(status_r); + private: uint8_t m_term_data; virtual void machine_reset() override; @@ -55,8 +54,8 @@ static ADDRESS_MAP_START(pm68k_mem, AS_PROGRAM, 16, pm68k_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xffffff) AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_SHARE("rambase") - AM_RANGE(0x200000, 0x205fff) AM_ROM AM_REGION("maincpu", 0) - AM_RANGE(0x600000, 0x600001) AM_READ(keyin_r) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0xff00) + AM_RANGE(0x200000, 0x205fff) AM_ROM AM_REGION("roms", 0) + AM_RANGE(0x600000, 0x600001) AM_READ(keyin_r) AM_DEVWRITE8("terminal", generic_terminal_device, write, 0xff00) AM_RANGE(0x600002, 0x600003) AM_READ(status_r) ADDRESS_MAP_END @@ -68,7 +67,7 @@ INPUT_PORTS_END void pm68k_state::machine_reset() { - uint8_t* ROM = memregion("maincpu")->base(); + uint8_t* ROM = memregion("roms")->base(); memcpy(m_p_base, ROM, 8); m_maincpu->reset(); } @@ -84,13 +83,13 @@ static MACHINE_CONFIG_START( pm68k ) MCFG_CPU_PROGRAM_MAP(pm68k_mem) /* video hardware */ - MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0) + MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0) MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(pm68k_state, kbd_put)) MACHINE_CONFIG_END /* ROM definition */ ROM_START( pm68k ) - ROM_REGION16_BE(0x6000, "maincpu", 0) + ROM_REGION16_BE(0x6000, "roms", 0) ROM_LOAD16_BYTE("u103", 0x00000, 0x1000, CRC(86d32d6c) SHA1(ce9c54b62c64c37ae9106fb06b8a2b2152d1ddf6) ) ROM_LOAD16_BYTE("u101", 0x00001, 0x1000, CRC(66607e54) SHA1(06f380fdeba13dc3aee826dd166f4bd3031febb9) ) ROM_LOAD16_BYTE("u104", 0x02000, 0x2000, CRC(ccd2ba4d) SHA1(5cdcf875e136aa9af5f150e0102cd209c496885e) ) diff --git a/src/mame/drivers/sms.cpp b/src/mame/drivers/sms.cpp index 70aae875a66..66d33a1ac8f 100644 --- a/src/mame/drivers/sms.cpp +++ b/src/mame/drivers/sms.cpp @@ -279,7 +279,7 @@ static ADDRESS_MAP_START( sms_mem, AS_PROGRAM, 8, sms_state ) AM_RANGE(0x0000, 0x3fff) AM_READ(read_0000) AM_RANGE(0x4000, 0x7fff) AM_READ(read_4000) AM_RANGE(0x8000, 0xbfff) AM_READ(read_8000) - AM_RANGE(0xc000, 0xfff7) AM_READWRITE(read_ram, write_ram) + AM_RANGE(0xc000, 0xfffb) AM_READWRITE(read_ram, write_ram) AM_RANGE(0xfffc, 0xffff) AM_READWRITE(sms_mapper_r, sms_mapper_w) /* Bankswitch control */ ADDRESS_MAP_END @@ -1109,8 +1109,8 @@ ROM_START(gamegear) ROM_FILL(0x0000, 0x4000, 0x00) ROM_REGION(0x0400, "user1", 0) - ROM_SYSTEM_BIOS( 0, "none", "No BIOS" ) /* gamegear */ - ROM_SYSTEM_BIOS( 1, "majesco", "Majesco BIOS" ) /* gamg */ + ROM_SYSTEM_BIOS( 0, "none", "No BIOS" ) + ROM_SYSTEM_BIOS( 1, "majesco", "Majesco BIOS" ) ROMX_LOAD("majbios.rom", 0x0000, 0x0400, CRC(0ebea9d4) SHA1(914aa165e3d879f060be77870d345b60cfeb4ede), ROM_BIOS(2)) ROM_END diff --git a/src/mame/drivers/systec.cpp b/src/mame/drivers/systec.cpp index ce953e3c230..5cf5599b301 100644 --- a/src/mame/drivers/systec.cpp +++ b/src/mame/drivers/systec.cpp @@ -35,46 +35,28 @@ #include "emu.h" #include "cpu/z80/z80.h" -#include "machine/terminal.h" +#include "machine/z80sio.h" +#include "machine/clock.h" +#include "bus/rs232/rs232.h" -#define TERMINAL_TAG "terminal" class systec_state : public driver_device { public: systec_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_terminal(*this, TERMINAL_TAG) - { - } + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_sio(*this, "sio") + { } + DECLARE_WRITE_LINE_MEMBER(clock_tick); + +private: required_device<cpu_device> m_maincpu; - required_device<generic_terminal_device> m_terminal; - DECLARE_READ8_MEMBER(systec_c4_r); - DECLARE_READ8_MEMBER(systec_c6_r); - void kbd_put(u8 data); - uint8_t m_term_data; + required_device<z80sio_device> m_sio; virtual void machine_reset() override; }; -READ8_MEMBER( systec_state::systec_c4_r ) -{ - uint8_t ret = m_term_data; - m_term_data = 0; - return ret; -} - -READ8_MEMBER( systec_state::systec_c6_r ) -{ - return 0x04 | (m_term_data ? 1 : 0); -} - -void systec_state::kbd_put(u8 data) -{ - m_term_data = data; -} - static ADDRESS_MAP_START(systec_mem, AS_PROGRAM, 8, systec_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xffff) AM_RAM AM_REGION("maincpu", 0) @@ -82,8 +64,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(systec_io, AS_IO, 8, systec_state) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xc4, 0xc4) AM_READ(systec_c4_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) - AM_RANGE(0xc6, 0xc6) AM_READ(systec_c6_r) + AM_RANGE(0x68, 0x6b) // fdc? + AM_RANGE(0x6c, 0x6c) // motor control? + AM_RANGE(0xc4, 0xc7) AM_DEVREADWRITE("sio", z80sio_device, cd_ba_r, cd_ba_w) ADDRESS_MAP_END /* Input ports */ @@ -97,16 +80,32 @@ void systec_state::machine_reset() memcpy(m_p_maincpu, m_p_roms, 0x2000); } +// source of baud frequency is unknown, so we invent a clock +WRITE_LINE_MEMBER( systec_state::clock_tick ) +{ + m_sio->txca_w(state); + m_sio->rxca_w(state); +} + static MACHINE_CONFIG_START( systec ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4) MCFG_CPU_PROGRAM_MAP(systec_mem) MCFG_CPU_IO_MAP(systec_io) + MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(systec_state, clock_tick)) + + /* Devices */ + MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0) + //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set + MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd)) + MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) + MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts)) - /* video hardware */ - MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(systec_state, kbd_put)) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/zsbc3.cpp b/src/mame/drivers/zsbc3.cpp index 4f2ad18238b..3060d52c07e 100644 --- a/src/mame/drivers/zsbc3.cpp +++ b/src/mame/drivers/zsbc3.cpp @@ -36,44 +36,30 @@ #include "emu.h" #include "cpu/z80/z80.h" -#include "machine/terminal.h" +#include "machine/z80sio.h" +#include "machine/z80pio.h" +#include "machine/clock.h" +#include "bus/rs232/rs232.h" -#define TERMINAL_TAG "terminal" class zsbc3_state : public driver_device { public: zsbc3_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_terminal(*this, TERMINAL_TAG) - { - } + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_sio(*this, "sio") + { } - DECLARE_READ8_MEMBER(zsbc3_28_r); - DECLARE_READ8_MEMBER(zsbc3_2a_r); - void kbd_put(u8 data); + DECLARE_WRITE_LINE_MEMBER(clock_tick); private: - uint8_t m_term_data; virtual void machine_reset() override; required_device<cpu_device> m_maincpu; - required_device<generic_terminal_device> m_terminal; + required_device<z80sio_device> m_sio; }; -READ8_MEMBER( zsbc3_state::zsbc3_28_r ) -{ - uint8_t ret = m_term_data; - m_term_data = 0; - return ret; -} - -READ8_MEMBER( zsbc3_state::zsbc3_2a_r ) -{ - return (m_term_data) ? 5 : 4; -} - static ADDRESS_MAP_START(zsbc3_mem, AS_PROGRAM, 8, zsbc3_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE( 0x0000, 0x07ff ) AM_ROM @@ -83,8 +69,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(zsbc3_io, AS_IO, 8, zsbc3_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x28, 0x28) AM_READ(zsbc3_28_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) - AM_RANGE(0x2a, 0x2a) AM_READ(zsbc3_2a_r) + AM_RANGE(0x08, 0x0b) //AM_DEVREADWRITE("pio", z80pio_device, read, write) // the control bytes appear to be for a PIO + AM_RANGE(0x28, 0x2b) AM_DEVREADWRITE("sio", z80sio_device, cd_ba_r, cd_ba_w) + AM_RANGE(0x30, 0x30) // unknown device, init bytes = 45, 0D + AM_RANGE(0x38, 0x38) // unknown device, init byte = C3 ADDRESS_MAP_END /* Input ports */ @@ -96,9 +84,11 @@ void zsbc3_state::machine_reset() { } -void zsbc3_state::kbd_put(u8 data) +// source of baud frequency is unknown, so we invent a clock +WRITE_LINE_MEMBER( zsbc3_state::clock_tick ) { - m_term_data = data; + m_sio->txca_w(state); + m_sio->rxca_w(state); } @@ -109,8 +99,22 @@ static MACHINE_CONFIG_START( zsbc3 ) MCFG_CPU_IO_MAP(zsbc3_io) /* video hardware */ - MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(zsbc3_state, kbd_put)) + MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(zsbc3_state, clock_tick)) + + /* Devices */ + MCFG_Z80SIO_ADD("sio", XTAL_16MHz / 4, 0, 0, 0, 0) + //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set + MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd)) + MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) + MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts)) + + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w)) + + MCFG_DEVICE_ADD("pio", Z80PIO, XTAL_16MHz / 4) + //MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp index 3724f493813..b9d04aa2797 100644 --- a/src/mame/machine/deco_irq.cpp +++ b/src/mame/machine/deco_irq.cpp @@ -10,7 +10,6 @@ ***************************************************************************/ #include "emu.h" -#include "screen.h" #include "deco_irq.h" @@ -141,82 +140,77 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback ) // INTERFACE //************************************************************************** -READ8_MEMBER( deco_irq_device::read ) +DEVICE_ADDRESS_MAP_START(map, 8, deco_irq_device) + AM_RANGE(0x0, 0x0) AM_WRITE(control_w) + AM_RANGE(0x1, 0x1) AM_READWRITE(scanline_r, scanline_w) + AM_RANGE(0x2, 0x2) AM_READWRITE(raster_irq_ack_r, vblank_irq_ack_w) + AM_RANGE(0x3, 0x3) AM_READ(status_r) +ADDRESS_MAP_END + +WRITE8_MEMBER( deco_irq_device::control_w ) { - switch (offset) - { - case 1: - return m_raster_irq_scanline; - - case 2: - m_raster_irq = false; - m_raster1_irq_cb(CLEAR_LINE); - m_raster2_irq_cb(CLEAR_LINE); - return 0xff; - - case 3: - uint8_t data = 0; - - // 7------- unknown - // -6------ lightgun irq - // --5----- raster irq - // ---4---- vblank irq - // ----32-- unknown - // ------1- vblank - // -------0 hblank? - - data |= 1 << 7; - data |= (m_lightgun_irq ? 1 : 0) << 6; - data |= (m_raster_irq ? 1 : 0) << 5; - data |= (m_vblank_irq ? 1 : 0) << 4; - data |= 0 << 3; - data |= 0 << 2; - data |= m_screen->vblank() << 1; -// data |= (m_screen->hblank() & m_screen->vblank()) << 0; - data |= m_screen->hblank() << 0; - - return data; - } + // 765----- unused? + // ---4---- raster irq target + // ----3--- unused? + // -----2-- unknown + // ------1- raster irq mask + // -------0 unused? + + m_raster_irq_target = BIT(data, 4); + m_raster_irq_masked = bool(BIT(data, 1)); + + if (m_raster_irq_masked) + raster_irq_ack_r(space, 0); +} - logerror("Read from invalid offset %x\n", offset); - return 0xff; +READ8_MEMBER( deco_irq_device::scanline_r ) +{ + return m_raster_irq_scanline; } -WRITE8_MEMBER( deco_irq_device::write ) +WRITE8_MEMBER( deco_irq_device::scanline_w ) { - switch (offset) - { - case 0: - // 765----- unused? - // ---4---- raster irq target - // ----3--- unused? - // -----2-- unknown - // ------1- raster irq mask - // -------0 unused? - - m_raster_irq_target = BIT(data, 4); - m_raster_irq_masked = bool(BIT(data, 1)); - - if (m_raster_irq_masked) - { - m_raster_irq = false; - m_raster1_irq_cb(CLEAR_LINE); - m_raster2_irq_cb(CLEAR_LINE); - } + m_raster_irq_scanline = data; +} - return; +READ8_MEMBER( deco_irq_device::raster_irq_ack_r ) +{ + m_raster_irq = false; + m_raster1_irq_cb(CLEAR_LINE); + m_raster2_irq_cb(CLEAR_LINE); - case 1: - m_raster_irq_scanline = data; - return; + return 0xff; +} - case 2: - m_vblank_irq = false; - m_vblank_irq_cb(CLEAR_LINE); - return; - } +WRITE8_MEMBER( deco_irq_device::vblank_irq_ack_w ) +{ + m_vblank_irq = false; + m_vblank_irq_cb(CLEAR_LINE); +} - logerror("Write %02x to invalid offset %x\n", data, offset); +READ8_MEMBER( deco_irq_device::status_r ) +{ + uint8_t data = 0; + + // 7------- unknown + // -6------ lightgun irq + // --5----- raster irq + // ---4---- vblank irq + // ----32-- unknown + // ------1- vblank + // -------0 hblank? + + data |= 1 << 7; + data |= (m_lightgun_irq ? 1 : 0) << 6; + data |= (m_raster_irq ? 1 : 0) << 5; + data |= (m_vblank_irq ? 1 : 0) << 4; + data |= 0 << 3; + data |= 0 << 2; + data |= m_screen->vblank() << 1; +// data |= (m_screen->hblank() & m_screen->vblank()) << 0; + data |= m_screen->hblank() << 0; + + return data; } WRITE_LINE_MEMBER( deco_irq_device::lightgun1_trigger_w ) @@ -236,4 +230,3 @@ WRITE_LINE_MEMBER( deco_irq_device::lightgun_irq_ack_w ) m_lightgun_irq = false; m_lightgun_irq_cb(CLEAR_LINE); } - diff --git a/src/mame/machine/deco_irq.h b/src/mame/machine/deco_irq.h index d8b4138a5b4..69a319dba81 100644 --- a/src/mame/machine/deco_irq.h +++ b/src/mame/machine/deco_irq.h @@ -11,6 +11,8 @@ #pragma once +#include "screen.h" + //************************************************************************** // INTERFACE CONFIGURATION MACROS @@ -59,7 +61,6 @@ public: template <class Object> static devcb_base &set_lightgun_irq_callback(device_t &device, Object &&cb) { return downcast<deco_irq_device &>(device).m_lightgun_irq_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_raster1_irq_callback(device_t &device, Object &&cb) { return downcast<deco_irq_device &>(device).m_raster1_irq_cb.set_callback(std::forward<Object>(cb)); } @@ -69,14 +70,19 @@ public: template <class Object> static devcb_base &set_vblank_irq_callback(device_t &device, Object &&cb) { return downcast<deco_irq_device &>(device).m_vblank_irq_cb.set_callback(std::forward<Object>(cb)); } - // static configuration static void set_screen_tag(device_t &device, const char *tag); TIMER_CALLBACK_MEMBER(scanline_callback); - DECLARE_READ8_MEMBER(read); - DECLARE_WRITE8_MEMBER(write); + DECLARE_ADDRESS_MAP(map, 8); + + DECLARE_WRITE8_MEMBER(control_w); + DECLARE_READ8_MEMBER(scanline_r); + DECLARE_WRITE8_MEMBER(scanline_w); + DECLARE_READ8_MEMBER(raster_irq_ack_r); + DECLARE_WRITE8_MEMBER(vblank_irq_ack_w); + DECLARE_READ8_MEMBER(status_r); DECLARE_WRITE_LINE_MEMBER(lightgun1_trigger_w); DECLARE_WRITE_LINE_MEMBER(lightgun2_trigger_w); @@ -118,4 +124,5 @@ private: // device type definition DECLARE_DEVICE_TYPE(DECO_IRQ, deco_irq_device) + #endif // MAME_MACHINE_DECO_IRQ_H diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp index 93f24511f7c..e6178e045ec 100644 --- a/src/mame/machine/sms.cpp +++ b/src/mame/machine/sms.cpp @@ -331,7 +331,7 @@ READ8_MEMBER(sms_state::sms_input_port_dc_r) else { // Return if the I/O chip is disabled (1). This check isn't performed - // for the Game Gear because has no effect on it (even in SMS mode?). + // for the Game Gear because has no effect on it, even in SMS mode. if (m_mem_ctrl_reg & IO_CHIP) return 0xff; } @@ -376,7 +376,7 @@ READ8_MEMBER(sms_state::sms_input_port_dd_r) else { // Return if the I/O chip is disabled (1). This check isn't performed - // for the Game Gear because has no effect on it (even in SMS mode?). + // for the Game Gear because has no effect on it, even in SMS mode. if (m_mem_ctrl_reg & IO_CHIP) return 0xff; } diff --git a/src/mame/video/model2rd.hxx b/src/mame/video/model2rd.hxx index 7f2754b4d21..22d9107fc56 100644 --- a/src/mame/video/model2rd.hxx +++ b/src/mame/video/model2rd.hxx @@ -79,8 +79,12 @@ void MODEL2_FUNC_NAME(int32_t scanline, const extent_t& extent, const m2_poly_ex return; #else - luma = lumaram[BYTE_XOR_LE(lumabase + (0xf << 3))] & 0x3F; + luma = lumaram[BYTE_XOR_LE(lumabase + (0xf << 3))]; + // fix luma overflow + if(luma > 0x3f) + luma = 0x3f; + color = state->m_palram[BYTE_XOR_LE(color + 0x1000)] & 0x7fff; colortable_r += ((color >> 0) & 0x1f) << 8; @@ -177,7 +181,11 @@ void MODEL2_FUNC_NAME(int32_t scanline, const extent_t& extent, const m2_poly_ex if ( t == 0x0f ) continue; #endif - luma = lumaram[BYTE_XOR_LE(lumabase + (t << 3))] & 0x3f; + luma = lumaram[BYTE_XOR_LE(lumabase + (t << 3))]; + + // Virtua Striker sets up a luma of 0x40 for flags, fix here. + if(luma > 0x3f) + luma = 0x3f; /* we have the 6 bits of luma information along with 5 bits per color component */ /* now build and index into the master color lookup table and extract the raw RGB values */ |