mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
(MESS) ep64: Stop Dave from crashing, give Nick RGB32 and resnet colors. (nw)
This commit is contained in:
parent
d56ed8f269
commit
5f081ec3ee
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -6574,7 +6574,6 @@ src/mess/includes/dragon.h svneol=native#text/plain
|
||||
src/mess/includes/einstein.h svneol=native#text/plain
|
||||
src/mess/includes/electron.h svneol=native#text/plain
|
||||
src/mess/includes/elf.h svneol=native#text/plain
|
||||
src/mess/includes/enterp.h svneol=native#text/plain
|
||||
src/mess/includes/ep64.h svneol=native#text/plain
|
||||
src/mess/includes/eti660.h svneol=native#text/plain
|
||||
src/mess/includes/europc.h svneol=native#text/plain
|
||||
|
@ -1928,7 +1928,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dbase242hu">
|
||||
<software name="dbase242hu" cloneof="dbase23">
|
||||
<description>dBase II (v2.42) (Hun)</description>
|
||||
<year>1984</year>
|
||||
<publisher>Ashton-Tate/Babsoft</publisher>
|
||||
|
@ -36,10 +36,11 @@ DEVICE_ADDRESS_MAP_START( z80_io_map, 8, dave_device )
|
||||
AM_RANGE(0x0000, 0xffff) AM_READWRITE(io_r, io_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( program_map, DAVE_AS_PROGRAM, 8, dave_device )
|
||||
|
||||
static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, dave_device )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( io_map, DAVE_AS_IO, 8, dave_device )
|
||||
static ADDRESS_MAP_START( io_map, AS_IO, 8, dave_device )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -53,11 +54,11 @@ ADDRESS_MAP_END
|
||||
//-------------------------------------------------
|
||||
|
||||
dave_device::dave_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, DAVE, "DAVE", tag, owner, clock),
|
||||
: device_t(mconfig, DAVE, "DAVE", tag, owner, clock, "dave", __FILE__),
|
||||
device_memory_interface(mconfig, *this),
|
||||
device_sound_interface(mconfig, *this),
|
||||
m_program_space_config("program", ENDIANNESS_LITTLE, 8, 22, 0, *ADDRESS_MAP_NAME(program_map)),
|
||||
m_io_space_config("I/O", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(io_map)),
|
||||
m_io_space_config("i/o", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(io_map)),
|
||||
m_write_irq(*this),
|
||||
m_write_lh(*this),
|
||||
m_write_rh(*this)
|
||||
@ -164,8 +165,8 @@ const address_space_config *dave_device::memory_space_config(address_spacenum sp
|
||||
{
|
||||
switch (spacenum)
|
||||
{
|
||||
case DAVE_AS_PROGRAM: return &m_program_space_config;
|
||||
case DAVE_AS_IO: return &m_io_space_config;
|
||||
case AS_PROGRAM: return &m_program_space_config;
|
||||
case AS_IO: return &m_io_space_config;
|
||||
default: return NULL;
|
||||
}
|
||||
}
|
||||
@ -302,7 +303,7 @@ READ8_MEMBER( dave_device::program_r )
|
||||
UINT8 segment = m_segment[offset >> 14];
|
||||
offset = (segment << 14) | (offset & 0x3fff);
|
||||
|
||||
return m_addrspace[0]->read_byte(offset);
|
||||
return this->space(AS_PROGRAM).read_byte(offset);
|
||||
}
|
||||
|
||||
|
||||
@ -315,7 +316,7 @@ WRITE8_MEMBER( dave_device::program_w )
|
||||
UINT8 segment = m_segment[offset >> 14];
|
||||
offset = (segment << 14) | (offset & 0x3fff);
|
||||
|
||||
m_addrspace[0]->write_byte(offset, data);
|
||||
this->space(AS_PROGRAM).write_byte(offset, data);
|
||||
}
|
||||
|
||||
|
||||
@ -365,7 +366,7 @@ READ8_MEMBER( dave_device::io_r )
|
||||
break;
|
||||
|
||||
default:
|
||||
data = m_addrspace[1]->read_byte(offset);
|
||||
data = this->space(AS_IO).read_byte(offset);
|
||||
}
|
||||
|
||||
return data;
|
||||
@ -403,13 +404,13 @@ WRITE8_MEMBER( dave_device::io_w )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
count = (data & 0x0ff) | ((m_regs[offset + 1] & 0x0f)<<8);
|
||||
count = (data & 0x0ff) | ((m_regs[(offset & 0x1f) + 1] & 0x0f)<<8);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
{
|
||||
count = (m_regs[offset - 1] & 0x0ff) | ((data & 0x0f)<<8);
|
||||
count = (m_regs[(offset & 0x1f) - 1] & 0x0ff) | ((data & 0x0f)<<8);
|
||||
|
||||
}
|
||||
break;
|
||||
@ -420,7 +421,7 @@ WRITE8_MEMBER( dave_device::io_w )
|
||||
|
||||
m_period[channel_index] = ((STEP * machine().sample_rate())/125000) * count;
|
||||
|
||||
m_regs[offset & 0x01f] = data;
|
||||
m_regs[offset & 0x1f] = data;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -444,9 +445,9 @@ WRITE8_MEMBER( dave_device::io_w )
|
||||
/* update mame version of volume from data written */
|
||||
/* 0x03f->0x07e00. Max is 0x07fff */
|
||||
/* I believe the volume is linear - to be checked! */
|
||||
m_mame_volumes[offset - 8] = (data & 0x03f) << 9;
|
||||
m_mame_volumes[(offset & 0x1f) - 8] = (data & 0x03f) << 9;
|
||||
|
||||
m_regs[offset & 0x01f] = data;
|
||||
m_regs[offset & 0x1f] = data;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -570,14 +571,14 @@ WRITE8_MEMBER( dave_device::io_w )
|
||||
m_level_and[7] = 0xffff;
|
||||
}
|
||||
|
||||
m_regs[offset & 0x01f] = data;
|
||||
m_regs[offset & 0x1f] = data;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
||||
m_segment[offset & 0x03] = data;
|
||||
|
||||
m_regs[offset & 0x01f] = data;
|
||||
m_regs[offset & 0x1f] = data;
|
||||
break;
|
||||
|
||||
case 0xb4:
|
||||
@ -585,15 +586,15 @@ WRITE8_MEMBER( dave_device::io_w )
|
||||
m_irq_status &= ~(m_irq_enable & IRQ_LATCH);
|
||||
update_interrupt();
|
||||
|
||||
m_regs[offset & 0x01f] = data;
|
||||
m_regs[offset & 0x1f] = data;
|
||||
break;
|
||||
|
||||
case 0xbf:
|
||||
m_regs[offset & 0x01f] = data;
|
||||
m_regs[offset & 0x1f] = data;
|
||||
break;
|
||||
|
||||
default:
|
||||
m_addrspace[1]->write_byte(offset, data);
|
||||
this->space(AS_IO).write_byte(offset, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,9 +20,6 @@
|
||||
// MACROS / CONSTANTS
|
||||
///*************************************************************************
|
||||
|
||||
#define DAVE_AS_PROGRAM AS_0
|
||||
#define DAVE_AS_IO AS_1
|
||||
|
||||
|
||||
|
||||
///*************************************************************************
|
||||
@ -32,10 +29,10 @@
|
||||
#define MCFG_DAVE_ADD(_tag, _clock, _irq, _program_map, _io_map) \
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") \
|
||||
MCFG_SOUND_ADD(_tag, DAVE, _clock) \
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) \
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(DAVE_AS_PROGRAM, _program_map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(DAVE_AS_IO, _io_map) \
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) \
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 0.25) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, _program_map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_IO, _io_map) \
|
||||
downcast<dave_device *>(device)->set_irq_callback(DEVCB2_##_irq);
|
||||
|
||||
|
||||
|
@ -312,7 +312,7 @@ ADDRESS_MAP_END
|
||||
// ADDRESS_MAP( dave_64k_mem )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( dave_64k_mem, DAVE_AS_PROGRAM, 8, ep64_state )
|
||||
static ADDRESS_MAP_START( dave_64k_mem, AS_PROGRAM, 8, ep64_state )
|
||||
AM_RANGE(0x000000, 0x007fff) AM_ROM AM_REGION(Z80_TAG, 0)
|
||||
AM_RANGE(0x010000, 0x01ffff) AM_ROM AM_REGION("cart", 0)
|
||||
AM_RANGE(0x3f0000, 0x3fffff) AM_DEVICE(NICK_TAG, nick_device, vram_map)
|
||||
@ -323,7 +323,7 @@ ADDRESS_MAP_END
|
||||
// ADDRESS_MAP( dave_128k_mem )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( dave_128k_mem, DAVE_AS_PROGRAM, 8, ep64_state )
|
||||
static ADDRESS_MAP_START( dave_128k_mem, AS_PROGRAM, 8, ep64_state )
|
||||
AM_IMPORT_FROM(dave_64k_mem)
|
||||
AM_RANGE(0x3e0000, 0x3effff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -333,7 +333,7 @@ ADDRESS_MAP_END
|
||||
// ADDRESS_MAP( dave_io )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( dave_io, DAVE_AS_IO, 8, ep64_state )
|
||||
static ADDRESS_MAP_START( dave_io, AS_IO, 8, ep64_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x80, 0x8f) AM_DEVICE(NICK_TAG, nick_device, vio_map)
|
||||
AM_RANGE(0xb5, 0xb5) AM_READWRITE(rd0_r, wr0_w)
|
||||
@ -353,105 +353,104 @@ ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( ep64 )
|
||||
PORT_START("Y0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
|
||||
PORT_START("Y1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LOCK") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL)
|
||||
|
||||
PORT_START("Y2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
|
||||
|
||||
PORT_START("Y3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 \xC2\xA3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('\xA3')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3 \xC2\xA3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR(0x00a3)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
|
||||
|
||||
PORT_START("Y4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
|
||||
|
||||
PORT_START("Y5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') PORT_CHAR('~')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ERASE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') PORT_CHAR('~')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ERASE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("Y6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
/* Notice that, in fact, ep128 only had the built-in joystick and no cursor arrow keys on the keyboard */
|
||||
PORT_START("Y7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(F10))
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("HOLD") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(F11))
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_END)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HOLD") PORT_CODE(KEYCODE_HOME)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
|
||||
|
||||
PORT_START("Y8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT (right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Right SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
|
||||
|
||||
PORT_START("Y9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -572,7 +571,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ep128, ep64 )
|
||||
MCFG_DEVICE_MODIFY(DAVE_TAG)
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, dave_128k_mem)
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, dave_128k_mem)
|
||||
|
||||
// internal RAM
|
||||
MCFG_RAM_MODIFY(RAM_TAG)
|
||||
|
@ -1,47 +0,0 @@
|
||||
#ifndef __ENTERP_H__
|
||||
#define __ENTERP_H__
|
||||
|
||||
|
||||
#define NICK_PALETTE_SIZE 256
|
||||
|
||||
#include "machine/ram.h"
|
||||
#include "audio/dave.h"
|
||||
#include "video/epnick.h"
|
||||
|
||||
class ep_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ep_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_dave(*this, "custom"),
|
||||
m_nick(*this, "nick"),
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_joy(*this, "JOY1") { }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<dave_sound_device> m_dave;
|
||||
required_device<nick_device> m_nick;
|
||||
required_device<ram_device> m_ram;
|
||||
required_ioport m_joy;
|
||||
|
||||
UINT8 exdos_card_value; /* state of the wd1770 irq/drq lines */
|
||||
UINT8 keyboard_line; /* index of keyboard line to read */
|
||||
|
||||
ioport_port *m_key[10];
|
||||
|
||||
DECLARE_READ8_MEMBER(exdos_card_r);
|
||||
DECLARE_WRITE8_MEMBER(exdos_card_w);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void palette_init();
|
||||
UINT32 screen_update_enterp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE8_MEMBER(enterprise_dave_reg_write);
|
||||
DECLARE_READ8_MEMBER(enterprise_dave_reg_read);
|
||||
DECLARE_WRITE_LINE_MEMBER(enterp_wd1770_intrq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(enterp_wd1770_drq_w);
|
||||
void enterprise_update_memory_page(address_space &space, offs_t page, int index);
|
||||
};
|
||||
|
||||
|
||||
#endif /* __ENTERP_H__ */
|
@ -103,8 +103,8 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
|
||||
DECLARE_WRITE_LINE_MEMBER( wait_w ) { m_write_wait(state); }
|
||||
|
||||
address_space& program() { return m_dave->space(DAVE_AS_PROGRAM); }
|
||||
address_space& io() { return m_dave->space(DAVE_AS_IO); }
|
||||
address_space& program() { return m_dave->space(AS_PROGRAM); }
|
||||
address_space& io() { return m_dave->space(AS_IO); }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -67,33 +67,6 @@
|
||||
/* "clocks" per line */
|
||||
#define NICK_TOTAL_CLOCKS_PER_LINE 64
|
||||
|
||||
/* Enterprise has 256 colours, all may be on the screen at once!
|
||||
the NICK_GET_RED8, NICK_GET_GREEN8, NICK_GET_BLUE8 macros
|
||||
return a 8-bit colour value for the index specified. */
|
||||
|
||||
/* given a colour index in range 0..255 gives the Red component */
|
||||
#define NICK_GET_RED8(x) \
|
||||
(( \
|
||||
(BIT(x, 0) << 2) | \
|
||||
(BIT(x, 3) << 1) | \
|
||||
(BIT(x, 6) << 0) \
|
||||
) << 5)
|
||||
|
||||
/* given a colour index in range 0..255 gives the Red component */
|
||||
#define NICK_GET_GREEN8(x) \
|
||||
(( \
|
||||
(BIT(x, 1) << 2) | \
|
||||
(BIT(x, 4) << 1) | \
|
||||
(BIT(x, 7) << 0) \
|
||||
) << 5)
|
||||
|
||||
/* given a colour index in range 0..255 gives the Red component */
|
||||
#define NICK_GET_BLUE8(x) \
|
||||
(( \
|
||||
(BIT(x, 2) << 1) | \
|
||||
(BIT(x, 5) << 0) \
|
||||
) << 6)
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -114,6 +87,7 @@ DEVICE_ADDRESS_MAP_START( vio_map, 8, nick_device )
|
||||
AM_RANGE(0x03, 0x03) AM_WRITE(lph_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( nick_map, AS_0, 8, nick_device )
|
||||
AM_RANGE(0x0000, 0xffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -129,10 +103,19 @@ ADDRESS_MAP_END
|
||||
//-------------------------------------------------
|
||||
|
||||
nick_device::nick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, NICK, "NICK", tag, owner, clock),
|
||||
: device_t(mconfig, NICK, "NICK", tag, owner, clock, "nick", __FILE__),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_space_config("vram", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(nick_map)),
|
||||
m_write_virq(*this)
|
||||
m_write_virq(*this),
|
||||
horizontal_clock(0),
|
||||
m_scanline_count(0),
|
||||
m_FIXBIAS(0),
|
||||
m_BORDER(0),
|
||||
m_LPL(0),
|
||||
m_LPH(0),
|
||||
m_LD1(0),
|
||||
m_LD2(0),
|
||||
m_virq(CLEAR_LINE)
|
||||
{
|
||||
}
|
||||
|
||||
@ -143,21 +126,19 @@ nick_device::nick_device(const machine_config &mconfig, const char *tag, device_
|
||||
|
||||
void nick_device::device_start()
|
||||
{
|
||||
screen_device *screen = machine().first_screen();
|
||||
|
||||
screen->register_screen_bitmap(m_bitmap);
|
||||
m_screen = machine().device<screen_device>(m_screen_tag);
|
||||
m_screen->register_screen_bitmap(m_bitmap);
|
||||
calc_visible_clocks(ENTERPRISE_SCREEN_WIDTH);
|
||||
|
||||
// initialize palette
|
||||
for (int i = 0; i < 256; i++)
|
||||
palette_set_color_rgb(machine(), i, NICK_GET_RED8(i), NICK_GET_GREEN8(i), NICK_GET_BLUE8(i));
|
||||
initialize_palette();
|
||||
|
||||
// resolve callbacks
|
||||
m_write_virq.resolve_safe();
|
||||
|
||||
// allocate timers
|
||||
m_timer_scanline = timer_alloc();
|
||||
m_timer_scanline->adjust(screen->time_until_pos(0, 0), 0, screen->scan_period());
|
||||
m_timer_scanline->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period());
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_scanline_count));
|
||||
@ -193,17 +174,6 @@ void nick_device::device_reset()
|
||||
m_write_virq(CLEAR_LINE);
|
||||
m_virq = 0;
|
||||
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
int pen_index;
|
||||
|
||||
pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1);
|
||||
m_pen_idx_4col[i] = pen_index;
|
||||
|
||||
pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1) | (BIT(i, 5) << 2) | (BIT(i, 1) << 3);
|
||||
m_pen_idx_16col[i] = pen_index;
|
||||
}
|
||||
|
||||
m_scanline_count = 0;
|
||||
}
|
||||
|
||||
@ -214,12 +184,12 @@ void nick_device::device_reset()
|
||||
|
||||
void nick_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
int scanline = machine().first_screen()->vpos();
|
||||
int scanline = m_screen->vpos();
|
||||
|
||||
if (scanline < ENTERPRISE_SCREEN_HEIGHT)
|
||||
{
|
||||
/* set write address for line */
|
||||
m_dest = &m_bitmap.pix16(scanline);
|
||||
m_dest = &m_bitmap.pix32(scanline);
|
||||
m_dest_pos = 0;
|
||||
m_dest_max_pos = m_bitmap.width();
|
||||
|
||||
@ -244,7 +214,7 @@ const address_space_config *nick_device::memory_space_config(address_spacenum sp
|
||||
// update_screen - update screen
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 nick_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 nick_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
|
||||
|
||||
@ -258,7 +228,7 @@ UINT32 nick_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
|
||||
|
||||
READ8_MEMBER( nick_device::vram_r )
|
||||
{
|
||||
return m_addrspace[0]->read_byte(offset);
|
||||
return this->space().read_byte(offset);
|
||||
}
|
||||
|
||||
|
||||
@ -268,7 +238,7 @@ READ8_MEMBER( nick_device::vram_r )
|
||||
|
||||
WRITE8_MEMBER( nick_device::vram_w )
|
||||
{
|
||||
m_addrspace[0]->write_byte(offset, data);
|
||||
this->space().write_byte(offset, data);
|
||||
}
|
||||
|
||||
|
||||
@ -316,13 +286,76 @@ WRITE8_MEMBER( nick_device::lph_w )
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// initialize_palette -
|
||||
//-------------------------------------------------
|
||||
|
||||
void nick_device::initialize_palette()
|
||||
{
|
||||
const int resistances_rg[] = { RES_R(470), RES_R(220), RES_R(100) };
|
||||
const int resistances_b[] = { RES_R(220), RES_R(82) };
|
||||
|
||||
double color_weights_rg[3], color_weights_b[2];
|
||||
|
||||
compute_resistor_weights(0, 0xff, -1.0,
|
||||
3, resistances_rg, color_weights_rg, 0, 0,
|
||||
2, resistances_b, color_weights_b, 0, 0,
|
||||
0, 0, 0, 0, 0);
|
||||
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
PC0 100R -- RED
|
||||
PC1 100R -- GREEN
|
||||
PC2 82R -- BLUE
|
||||
PC3 220R -- RED
|
||||
PC4 220R -- GREEN
|
||||
PC5 220R -- BLUE
|
||||
PC6 470R -- RED
|
||||
PC7 470R -- GREEN
|
||||
|
||||
*/
|
||||
|
||||
int ra = BIT(i, 0);
|
||||
int rb = BIT(i, 3);
|
||||
int rc = BIT(i, 6);
|
||||
|
||||
int ga = BIT(i, 1);
|
||||
int gb = BIT(i, 4);
|
||||
int gc = BIT(i, 7);
|
||||
|
||||
int ba = BIT(i, 2);
|
||||
int bb = BIT(i, 5);
|
||||
|
||||
UINT8 r = combine_3_weights(color_weights_rg, rc, rb, ra);
|
||||
UINT8 g = combine_3_weights(color_weights_rg, gc, gb, ga);
|
||||
UINT8 b = combine_2_weights(color_weights_b, bb, ba);
|
||||
|
||||
m_palette[i] = MAKE_RGB(r, g, b);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
int pen_index;
|
||||
|
||||
pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1);
|
||||
m_pen_idx_4col[i] = pen_index;
|
||||
|
||||
pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1) | (BIT(i, 5) << 2) | (BIT(i, 1) << 3);
|
||||
m_pen_idx_16col[i] = pen_index;
|
||||
}
|
||||
}
|
||||
|
||||
// MESS specific
|
||||
/* 8-bit pixel write! */
|
||||
void nick_device::write_pixel(int ci)
|
||||
{
|
||||
if (m_dest_pos < m_dest_max_pos)
|
||||
{
|
||||
m_dest[m_dest_pos++] = ci;
|
||||
m_dest[m_dest_pos++] = m_palette[ci];
|
||||
}
|
||||
}
|
||||
|
||||
@ -745,10 +778,10 @@ void nick_device::do_pixel(int clocks_visible)
|
||||
|
||||
for (int i = 0; i < clocks_visible; i++)
|
||||
{
|
||||
buf1 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf1 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
|
||||
buf2 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf2 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
|
||||
write_pixels(buf1, buf1);
|
||||
@ -763,7 +796,7 @@ void nick_device::do_lpixel(int clocks_visible)
|
||||
|
||||
for (int i = 0; i < clocks_visible; i++)
|
||||
{
|
||||
buf1 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf1 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
|
||||
write_pixels_lpixel(buf1, buf1);
|
||||
@ -776,10 +809,10 @@ void nick_device::do_attr(int clocks_visible)
|
||||
|
||||
for (int i = 0; i < clocks_visible; i++)
|
||||
{
|
||||
buf1 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf1 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
|
||||
buf2 = m_addrspace[0]->read_byte(m_LD2);
|
||||
buf2 = space().read_byte(m_LD2);
|
||||
m_LD2++;
|
||||
|
||||
{
|
||||
@ -797,9 +830,9 @@ void nick_device::do_ch256(int clocks_visible)
|
||||
|
||||
for (int i = 0; i < clocks_visible; i++)
|
||||
{
|
||||
buf1 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf1 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
buf2 = m_addrspace[0]->read_byte(ADDR_CH256(m_LD2, buf1));
|
||||
buf2 = space().read_byte(ADDR_CH256(m_LD2, buf1));
|
||||
|
||||
write_pixels_lpixel(buf2, buf1);
|
||||
}
|
||||
@ -811,9 +844,9 @@ void nick_device::do_ch128(int clocks_visible)
|
||||
|
||||
for (int i = 0; i < clocks_visible; i++)
|
||||
{
|
||||
buf1 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf1 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
buf2 = m_addrspace[0]->read_byte(ADDR_CH128(m_LD2, buf1));
|
||||
buf2 = space().read_byte(ADDR_CH128(m_LD2, buf1));
|
||||
|
||||
write_pixels_lpixel(buf2, buf1);
|
||||
}
|
||||
@ -825,9 +858,9 @@ void nick_device::do_ch64(int clocks_visible)
|
||||
|
||||
for (int i = 0; i < clocks_visible; i++)
|
||||
{
|
||||
buf1 = m_addrspace[0]->read_byte(m_LD1);
|
||||
buf1 = space().read_byte(m_LD1);
|
||||
m_LD1++;
|
||||
buf2 = m_addrspace[0]->read_byte(ADDR_CH64(m_LD2, buf1));
|
||||
buf2 = space().read_byte(ADDR_CH64(m_LD2, buf1));
|
||||
|
||||
write_pixels_lpixel(buf2, buf1);
|
||||
}
|
||||
@ -950,22 +983,22 @@ void nick_device::reload_lpt()
|
||||
UINT32 LPT_Addr = ((m_LPL & 0x0ff) << 4) | ((m_LPH & 0x0f) << (8+4));
|
||||
|
||||
/* update internal LPT state */
|
||||
m_LPT.SC = m_addrspace[0]->read_byte(LPT_Addr);
|
||||
m_LPT.MB = m_addrspace[0]->read_byte(LPT_Addr + 1);
|
||||
m_LPT.LM = m_addrspace[0]->read_byte(LPT_Addr + 2);
|
||||
m_LPT.RM = m_addrspace[0]->read_byte(LPT_Addr + 3);
|
||||
m_LPT.LD1L = m_addrspace[0]->read_byte(LPT_Addr + 4);
|
||||
m_LPT.LD1H = m_addrspace[0]->read_byte(LPT_Addr + 5);
|
||||
m_LPT.LD2L = m_addrspace[0]->read_byte(LPT_Addr + 6);
|
||||
m_LPT.LD2H = m_addrspace[0]->read_byte(LPT_Addr + 7);
|
||||
m_LPT.COL[0] = m_addrspace[0]->read_byte(LPT_Addr + 8);
|
||||
m_LPT.COL[1] = m_addrspace[0]->read_byte(LPT_Addr + 9);
|
||||
m_LPT.COL[2] = m_addrspace[0]->read_byte(LPT_Addr + 10);
|
||||
m_LPT.COL[3] = m_addrspace[0]->read_byte(LPT_Addr + 11);
|
||||
m_LPT.COL[4] = m_addrspace[0]->read_byte(LPT_Addr + 12);
|
||||
m_LPT.COL[5] = m_addrspace[0]->read_byte(LPT_Addr + 13);
|
||||
m_LPT.COL[6] = m_addrspace[0]->read_byte(LPT_Addr + 14);
|
||||
m_LPT.COL[7] = m_addrspace[0]->read_byte(LPT_Addr + 15);
|
||||
m_LPT.SC = space().read_byte(LPT_Addr);
|
||||
m_LPT.MB = space().read_byte(LPT_Addr + 1);
|
||||
m_LPT.LM = space().read_byte(LPT_Addr + 2);
|
||||
m_LPT.RM = space().read_byte(LPT_Addr + 3);
|
||||
m_LPT.LD1L = space().read_byte(LPT_Addr + 4);
|
||||
m_LPT.LD1H = space().read_byte(LPT_Addr + 5);
|
||||
m_LPT.LD2L = space().read_byte(LPT_Addr + 6);
|
||||
m_LPT.LD2H = space().read_byte(LPT_Addr + 7);
|
||||
m_LPT.COL[0] = space().read_byte(LPT_Addr + 8);
|
||||
m_LPT.COL[1] = space().read_byte(LPT_Addr + 9);
|
||||
m_LPT.COL[2] = space().read_byte(LPT_Addr + 10);
|
||||
m_LPT.COL[3] = space().read_byte(LPT_Addr + 11);
|
||||
m_LPT.COL[4] = space().read_byte(LPT_Addr + 12);
|
||||
m_LPT.COL[5] = space().read_byte(LPT_Addr + 13);
|
||||
m_LPT.COL[6] = space().read_byte(LPT_Addr + 14);
|
||||
m_LPT.COL[7] = space().read_byte(LPT_Addr + 15);
|
||||
}
|
||||
|
||||
/* call here to render a line of graphics */
|
||||
@ -977,8 +1010,7 @@ void nick_device::do_line()
|
||||
|
||||
if (m_virq && !(m_LPT.MB & NICK_MB_VIRQ))
|
||||
{
|
||||
screen_device *screen = machine().first_screen();
|
||||
m_timer_scanline->adjust(screen->time_until_pos(0, 0), 0, screen->scan_period());
|
||||
m_timer_scanline->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period());
|
||||
}
|
||||
|
||||
m_virq = (m_LPT.MB & NICK_MB_VIRQ) ? 1 : 0;
|
||||
|
@ -13,6 +13,8 @@
|
||||
#define __NICK__
|
||||
|
||||
#include "emu.h"
|
||||
#include "machine/rescap.h"
|
||||
#include "video/resnet.h"
|
||||
|
||||
|
||||
|
||||
@ -28,8 +30,8 @@
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, ENTERPRISE_SCREEN_WIDTH-1, 0, ENTERPRISE_SCREEN_HEIGHT-1) \
|
||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, nick_device, screen_update) \
|
||||
MCFG_DEVICE_ADD(_tag, NICK, _clock) \
|
||||
downcast<nick_device *>(device)->set_virq_callback(DEVCB2_##_virq); \
|
||||
MCFG_PALETTE_LENGTH(256)
|
||||
downcast<nick_device *>(device)->set_screen_tag(_screen_tag); \
|
||||
downcast<nick_device *>(device)->set_virq_callback(DEVCB2_##_virq);
|
||||
|
||||
|
||||
/* there are 64us per line, although in reality
|
||||
@ -70,12 +72,13 @@ public:
|
||||
// construction/destruction
|
||||
nick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
void set_screen_tag(const char *screen_tag) { m_screen_tag = screen_tag; }
|
||||
template<class _virq> void set_virq_callback(_virq virq) { m_write_virq.set_callback(virq); }
|
||||
|
||||
virtual DECLARE_ADDRESS_MAP(vram_map, 8);
|
||||
virtual DECLARE_ADDRESS_MAP(vio_map, 8);
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
@ -99,6 +102,8 @@ protected:
|
||||
private:
|
||||
devcb2_write_line m_write_virq;
|
||||
|
||||
void initialize_palette();
|
||||
|
||||
void write_pixel(int ci);
|
||||
void calc_visible_clocks(int width);
|
||||
void init();
|
||||
@ -138,11 +143,11 @@ private:
|
||||
|
||||
LPT_ENTRY m_LPT;
|
||||
|
||||
UINT16 *m_dest;
|
||||
UINT32 *m_dest;
|
||||
int m_dest_pos;
|
||||
int m_dest_max_pos;
|
||||
|
||||
UINT8 m_reg[16];
|
||||
UINT8 m_reg[4];
|
||||
|
||||
/* first clock visible on left hand side */
|
||||
int m_first_visible_clock;
|
||||
@ -156,7 +161,10 @@ private:
|
||||
|
||||
int m_virq;
|
||||
|
||||
bitmap_ind16 m_bitmap;
|
||||
const char *m_screen_tag;
|
||||
screen_device *m_screen;
|
||||
bitmap_rgb32 m_bitmap;
|
||||
rgb_t m_palette[256];
|
||||
|
||||
emu_timer *m_timer_scanline;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user