From e1cad4365afe0f75f50e0a53215af7805fa28f4f Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 2 Oct 2015 11:05:53 +1000 Subject: [PATCH] zapcomp: Fixed some errors in the rom; tidied the code. --- scripts/target/mame/mess.lua | 7 +-- src/mame/drivers/zapcomputer.c | 101 +++++++++++++++++++------------- src/mame/includes/zapcomputer.h | 30 ---------- 3 files changed, 61 insertions(+), 77 deletions(-) delete mode 100644 src/mame/includes/zapcomputer.h diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 98fcb1aef36..e1044b9c9c8 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -693,7 +693,6 @@ function linkProjects_mame_mess(_target, _subtarget) "bnpo", "bondwell", "booth", - "byte", "camputers", "canon", "cantab", @@ -1226,11 +1225,6 @@ files { MAME_DIR .. "src/mame/drivers/apexc.c", } -createMESSProjects(_target, _subtarget, "byte") -files { - MAME_DIR .. "src/mame/drivers/zapcomputer.c", -} - createMESSProjects(_target, _subtarget, "camputers") files { MAME_DIR .. "src/mame/drivers/camplynx.c", @@ -2449,6 +2443,7 @@ files { MAME_DIR .. "src/mame/drivers/savia84.c", MAME_DIR .. "src/mame/drivers/selz80.c", MAME_DIR .. "src/mame/drivers/tk80.c", + MAME_DIR .. "src/mame/drivers/zapcomputer.c", } createMESSProjects(_target, _subtarget, "trs") diff --git a/src/mame/drivers/zapcomputer.c b/src/mame/drivers/zapcomputer.c index a2a81a32d64..bc5440de7ae 100644 --- a/src/mame/drivers/zapcomputer.c +++ b/src/mame/drivers/zapcomputer.c @@ -26,15 +26,35 @@ * maybe also support video terminal described in chapter 9 */ -#include "includes/zapcomputer.h" + +#include "emu.h" +#include "cpu/z80/z80.h" #include "zapcomputer.lh" -static unsigned char decode7seg(int data){ +class zapcomp_state : public driver_device +{ +public: + zapcomp_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + { } + + DECLARE_READ8_MEMBER(keyboard_r); + DECLARE_WRITE8_MEMBER(display_7seg_w); + +private: + UINT8 decode7seg(UINT8 data); + virtual void machine_start(); + required_device m_maincpu; +}; + +UINT8 zapcomp_state::decode7seg(UINT8 data) +{ //These are bit patterns representing the conversion of 4bit values //into the status of the segments of the 7 segment displays //controlled by a 82S23 PROM - unsigned char patterns[16] = { + UINT8 patterns[16] = { 0x77, 0x41, 0x6e, 0x6b, 0x59, 0x3b, 0x3f, 0x61, 0x7f, 0x79, 0x7d, 0x1f, @@ -46,7 +66,8 @@ static unsigned char decode7seg(int data){ return BITSWAP8(patterns[data & 0x0F], 7, 3, 4, 2, 1, 0, 6, 5); } -WRITE8_MEMBER(zapcomp_state::display_7seg_w){ +WRITE8_MEMBER( zapcomp_state::display_7seg_w ) +{ switch (offset){ case 0: //Port 0x05 : address HI output_set_digit_value(0, decode7seg(data >> 4)); @@ -65,31 +86,31 @@ WRITE8_MEMBER(zapcomp_state::display_7seg_w){ } } -READ8_MEMBER(zapcomp_state::keyboard_r){ - unsigned char retval = 0x00; - unsigned char special = ioport("special_keys")->read(); - unsigned int hex_keys = (ioport("hex_keys_2")->read() << 8) | ioport("hex_keys_1")->read(); +READ8_MEMBER( zapcomp_state::keyboard_r ) +{ + UINT8 retval = 0x00; + UINT8 special = ioport("X1")->read(); + UINT16 hex_keys = ioport("X0")->read(); - if (special & 0x04) /* "SHIFT" key is pressed */ - retval = 0x40; /* turn on the SHIFT bit but DO NOT turn on the strobe bit */ + if BIT(special, 2) /* "SHIFT" key is pressed */ + retval |= 0x40; /* turn on the SHIFT bit but DO NOT turn on the strobe bit */ - if (special & 0x02) /* "NEXT" key is pressed */ + if BIT(special, 1) /* "NEXT" key is pressed */ retval |= 0xA0; /* turn on the strobe & NEXT bits */ - if (special & 0x01) /* "EXEC" key is pressed */ + if BIT(special, 0) /* "EXEC" key is pressed */ retval |= 0x90; /* turn on the strobe & EXEC bit */ - for (int i=0; i<16; i++){ - if (hex_keys & (1 << i)){ + for (int i=0; i<16; i++) + if (hex_keys & (1 << i)) retval |= (0x80 | i); /* provide the key index in bits 3-0 as well as turning on the strobe bit */ - } - } + return retval; } static ADDRESS_MAP_START( zapcomp_mem, AS_PROGRAM, 8, zapcomp_state ) - AM_RANGE(0x0000, 0x03ff) AM_ROM /* system monitor */ + AM_RANGE(0x0000, 0x03ff) AM_ROM AM_REGION("roms", 0) /* system monitor */ AM_RANGE(0x0400, 0x07ff) AM_RAM /* mandatory 1 kilobyte bank #0 */ AM_RANGE(0x0800, 0x0bff) AM_RAM /* extra 1 kilobyte bank #1 (optional) */ AM_RANGE(0x0c00, 0x0fff) AM_RAM /* extra 1 kilobyte bank #2 (optional) */ @@ -107,27 +128,25 @@ static ADDRESS_MAP_START( zapcomp_io, AS_IO, 8, zapcomp_state ) ADDRESS_MAP_END static INPUT_PORTS_START( zapcomp ) - PORT_START("hex_keys_1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') + PORT_START("X0") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') - PORT_START("hex_keys_2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') - - PORT_START("special_keys") + PORT_START("X1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("EXEC") PORT_CODE(KEYCODE_ENTER) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEXT") PORT_CODE(KEYCODE_RIGHT) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) @@ -148,9 +167,9 @@ static MACHINE_CONFIG_START( zapcomp, zapcomp_state ) MACHINE_CONFIG_END ROM_START( zapcomp ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("zap.rom", 0x0000, 0x0400, CRC(cedad5d5) SHA1(576adfafbe5475004675638c1703415f8c468c6f)) + ROM_REGION( 0x10000, "roms", 0 ) + ROM_LOAD("zap.rom", 0x0000, 0x0400, CRC(3f4416e9) SHA1(d6493707bfba1a1e1e551f8144194afa5bda3316) ) ROM_END -// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS -COMP( 1981, zapcomp, 0, 0, zapcomp, zapcomp, driver_device, 0, "Steve Ciarcia / BYTE / McGRAW-HILL", "ZAP - Z80 Applications Processor", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1981, zapcomp, 0, 0, zapcomp, zapcomp, driver_device, 0, "Steve Ciarcia / BYTE / McGRAW-HILL", "ZAP - Z80 Applications Processor", MACHINE_NO_SOUND_HW ) diff --git a/src/mame/includes/zapcomputer.h b/src/mame/includes/zapcomputer.h deleted file mode 100644 index e86ae010da3..00000000000 --- a/src/mame/includes/zapcomputer.h +++ /dev/null @@ -1,30 +0,0 @@ -// license:GPL2+ -// copyright-holders:FelipeSanches -/***************************************************************************** - * - * includes/zapcomputer.h - * - ****************************************************************************/ - -#ifndef __ZAPCOMPUTER__ -#define __ZAPCOMPUTER__ - -#include "emu.h" -#include "cpu/z80/z80.h" - -class zapcomp_state : public driver_device -{ -public: - zapcomp_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu") - { } - - required_device m_maincpu; - DECLARE_READ8_MEMBER(keyboard_r); - DECLARE_WRITE8_MEMBER(display_7seg_w); - - virtual void machine_start(); -}; - -#endif // __ZAPCOMPUTER__