zapcomp: Fixed some errors in the rom; tidied the code.

This commit is contained in:
Robbbert 2015-10-02 11:05:53 +10:00
parent e3e027f20e
commit e1cad4365a
3 changed files with 61 additions and 77 deletions

View File

@ -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")

View File

@ -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<cpu_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 )

View File

@ -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<cpu_device> m_maincpu;
DECLARE_READ8_MEMBER(keyboard_r);
DECLARE_WRITE8_MEMBER(display_7seg_w);
virtual void machine_start();
};
#endif // __ZAPCOMPUTER__