mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
zapcomp: Fixed some errors in the rom; tidied the code.
This commit is contained in:
parent
e3e027f20e
commit
e1cad4365a
@ -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")
|
||||
|
@ -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 )
|
||||
|
@ -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__
|
Loading…
Reference in New Issue
Block a user