mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
mcs40 updates:
* Split ROM and RAM port address spaces * Split RAM memory and status address spaces (no more read/modify/write) * Fixed bug in FIN handling * Exposed cycle callback * Implemented most of intelc440 front panel * Added preliminary internal artwork for intlc440 * Re-implmented flicker I/O based on how hardware actually works * Corrected flicker RAM size * Hooked up flicker playfield lamp outputs - this really needs PWM
This commit is contained in:
parent
76afa6e7d7
commit
6c42de79b7
@ -9,18 +9,14 @@
|
||||
*****************************************************************************/
|
||||
#include "emu.h"
|
||||
#include "mcs40.h"
|
||||
|
||||
#include "debugger.h"
|
||||
|
||||
|
||||
/*
|
||||
MCS-40 uses an unusual scheme for memory. RAMs contain four registers,
|
||||
each of which has 16 memory characters and 4 status characters (all
|
||||
characters are 4 bits wide). We represent a register as 16 bytes,
|
||||
storing memory characters in the low nybbles and status characters in
|
||||
the high nybbles of the first four bytes. This necessitates a
|
||||
read/modify/write on each write, as MAME doesn't cater for nybble lane
|
||||
select.
|
||||
characters are 4 bits wide). We represent memory and status as separate
|
||||
address spaces, storing one nybble per byte.
|
||||
|
||||
I/O is similarly unusual. It's assumed that there's one 4-bit I/O port
|
||||
per 256 bytes of ROM. The upper four bits of RC select the ROM I/O port
|
||||
@ -30,24 +26,28 @@ upper two bits of RC along with the lower three bits of CR select the
|
||||
RAM output port for WMP instructions. This isn't too bad, but it's
|
||||
complicated by the GPIO peripherals. These chips respond to WRR/RDR,
|
||||
but can be wired to the CM-RAM lines, so they can be selected by the
|
||||
combination of the lower three bits of RC along with the upper four bits
|
||||
combination of the lower three bits of CR along with the upper four bits
|
||||
of RC. On top of this, the 4289 latches the entire RC value on its A
|
||||
outputs at X1, allowing for a flat 8-bit I/O space using the WRR/RDR
|
||||
instructions, as well as having CM lines for devices selection. This
|
||||
instructions, as well as having CM lines for device selection. This
|
||||
means we need 12 bits to represent the entire range of possibilities
|
||||
using the WRR/RDR instructions. At this point, we're placing the
|
||||
ROM/RAM select in bit 12, CR in bits 11-8, and RC in bits 7-0. Ideally
|
||||
we'd be able to put the RAM output ports in a separate address space,
|
||||
but we're already running out.
|
||||
using the WRR/RDR instructions.
|
||||
|
||||
CR RC
|
||||
4001: 0 B--- RRRR----
|
||||
4002: 1 -CCC RR------
|
||||
4207: 0 BCCC 11PP----
|
||||
4209: 0 BCCC 11PP----
|
||||
4211: 0 BCCC 11PP----
|
||||
4289: 0 B--- AAAAAAAA
|
||||
4308: 0 B--- RRPP----
|
||||
The WRR/RDR instructions operate on a flat 11- or 12-bit address space,
|
||||
depending on whether the CPU has ROM banking support. You can use
|
||||
AM_MIRROR to mask out unused chip select lines, and then shift the
|
||||
offset to mask out unused RC bits.
|
||||
|
||||
CR RC
|
||||
4001: B--- RRRR----
|
||||
4207: BCCC 11PP----
|
||||
4209: BCCC 11PP----
|
||||
4211: BCCC 11PP----
|
||||
4289: B--- AAAAAAAA
|
||||
4308: B--- RRPP----
|
||||
|
||||
The WMP instruction operates on a 5-bit address space - three low bits
|
||||
of CR and two high bits of RC.
|
||||
|
||||
The "program memory" space is separate from the instruction, I/O and
|
||||
opcode spaces. It's accessed via a 4008/4009 pair, or a 4289. With a
|
||||
@ -65,7 +65,6 @@ write-back, using the RC value as the address and the first/last signal
|
||||
as nybble lane select.
|
||||
|
||||
TODO: 4040 interrupt support (including BBS, EIN, DIN instructions)
|
||||
TODO: expose data bus
|
||||
*/
|
||||
|
||||
|
||||
@ -93,11 +92,17 @@ mcs40_cpu_device_base::mcs40_cpu_device_base(
|
||||
unsigned index_reg_cnt,
|
||||
unsigned cr_mask)
|
||||
: cpu_device(mconfig, type, tag, owner, clock)
|
||||
, m_program_config("program", ENDIANNESS_LITTLE, 8, 10, 0)
|
||||
, m_data_config("data", ENDIANNESS_LITTLE, 8, 11, 0)
|
||||
, m_io_config("io", ENDIANNESS_LITTLE, 8, 13, 0)
|
||||
, m_opcodes_config("opcodes", ENDIANNESS_LITTLE, 8, rom_width, 0)
|
||||
, m_program(nullptr), m_data(nullptr), m_io(nullptr), m_opcodes(nullptr), m_direct(nullptr)
|
||||
, m_space_config{
|
||||
{ "rom", ENDIANNESS_LITTLE, 8, u8(rom_width), 0 },
|
||||
{ "ram", ENDIANNESS_LITTLE, 8, u8(11), 0 },
|
||||
{ "romport", ENDIANNESS_LITTLE, 8, u8(rom_width - 1), 0 },
|
||||
{ "unused", ENDIANNESS_LITTLE, 8, u8(0), 0 },
|
||||
{ "status", ENDIANNESS_LITTLE, 8, u8(9), 0 },
|
||||
{ "ramport", ENDIANNESS_LITTLE, 8, u8(5), 0 },
|
||||
{ "program", ENDIANNESS_LITTLE, 8, u8(rom_width - 3), 0 }, }
|
||||
, m_spaces{ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
|
||||
, m_direct(nullptr)
|
||||
, m_bus_cycle_cb()
|
||||
, m_sync_cb(*this)
|
||||
, m_cm_rom_cb{ { *this }, { *this } }
|
||||
, m_cm_ram_cb{ { *this }, { *this }, { *this }, { *this }, }
|
||||
@ -130,12 +135,15 @@ void mcs40_cpu_device_base::device_start()
|
||||
{
|
||||
m_icountptr = &m_icount;
|
||||
|
||||
m_program = &space(AS_PROGRAM);
|
||||
m_data = &space(AS_DATA);
|
||||
m_io = &space(AS_IO);
|
||||
m_opcodes = &space(AS_OPCODES);
|
||||
m_direct = &m_opcodes->direct();
|
||||
m_spaces[AS_ROM] = &space(AS_ROM);
|
||||
m_spaces[AS_RAM_MEMORY] = &space(AS_RAM_MEMORY);
|
||||
m_spaces[AS_ROM_PORTS] = &space(AS_ROM_PORTS);
|
||||
m_spaces[AS_RAM_STATUS] = &space(AS_RAM_STATUS);
|
||||
m_spaces[AS_RAM_PORTS] = &space(AS_RAM_PORTS);
|
||||
m_spaces[AS_PROGRAM_MEMORY] = &space(AS_PROGRAM_MEMORY);
|
||||
m_direct = &m_spaces[AS_ROM]->direct();
|
||||
|
||||
m_bus_cycle_cb.bind_relative_to(*owner());
|
||||
m_sync_cb.resolve_safe();
|
||||
m_cm_rom_cb[0].resolve_safe();
|
||||
m_cm_rom_cb[1].resolve_safe();
|
||||
@ -326,11 +334,12 @@ void mcs40_cpu_device_base::execute_run()
|
||||
std::vector<std::pair<int, const address_space_config *>> mcs40_cpu_device_base::memory_space_config() const
|
||||
{
|
||||
return std::vector<std::pair<int, const address_space_config *>> {
|
||||
std::make_pair(AS_PROGRAM, &m_program_config),
|
||||
std::make_pair(AS_DATA, &m_data_config),
|
||||
std::make_pair(AS_IO, &m_io_config),
|
||||
std::make_pair(AS_OPCODES, &m_opcodes_config)
|
||||
};
|
||||
std::make_pair(AS_ROM, &m_space_config[AS_ROM]),
|
||||
std::make_pair(AS_RAM_MEMORY, &m_space_config[AS_RAM_MEMORY]),
|
||||
std::make_pair(AS_ROM_PORTS, &m_space_config[AS_ROM_PORTS]),
|
||||
std::make_pair(AS_RAM_STATUS, &m_space_config[AS_RAM_STATUS]),
|
||||
std::make_pair(AS_RAM_PORTS, &m_space_config[AS_RAM_PORTS]),
|
||||
std::make_pair(AS_PROGRAM_MEMORY, &m_space_config[AS_PROGRAM_MEMORY]) };
|
||||
}
|
||||
|
||||
|
||||
@ -528,40 +537,39 @@ inline void mcs40_cpu_device_base::set_rc(u8 val)
|
||||
|
||||
inline u8 mcs40_cpu_device_base::read_memory()
|
||||
{
|
||||
return m_data->read_byte((u16(m_cr & 0x7U) << 8) | m_latched_rc) & 0x0fU;
|
||||
return m_spaces[AS_RAM_MEMORY]->read_byte((u16(m_cr & 0x7U) << 8) | m_latched_rc) & 0x0fU;
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::write_memory(u8 val)
|
||||
{
|
||||
u16 const addr((u16(m_cr & 0x7U) << 8) | m_latched_rc);
|
||||
m_data->write_byte(addr, (m_data->read_byte(addr) & 0xf0U) | (val & 0x0fU));
|
||||
m_spaces[AS_RAM_MEMORY]->write_byte((u16(m_cr & 0x7U) << 8) | m_latched_rc, val & 0x0fU);
|
||||
}
|
||||
|
||||
inline u8 mcs40_cpu_device_base::read_status()
|
||||
{
|
||||
u16 const addr((((u16(m_cr) << 8) | m_latched_rc) & 0x07f0U) | (m_opa & 0x0003U));
|
||||
return (m_data->read_byte(addr) >> 4) & 0x0fU;
|
||||
u16 const addr((((u16(m_cr) << 6) | (m_latched_rc >> 2)) & 0x01fcU) | (m_opa & 0x0003U));
|
||||
return m_spaces[AS_RAM_STATUS]->read_byte(addr) & 0x0fU;
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::write_status(u8 val)
|
||||
{
|
||||
u16 const addr((((u16(m_cr) << 8) | m_latched_rc) & 0x07f0U) | (m_opa & 0x0003U));
|
||||
m_data->write_byte(addr, (m_data->read_byte(addr) & 0x0fU) | (val << 4));
|
||||
u16 const addr((((u16(m_cr) << 6) | (m_latched_rc >> 2)) & 0x01fcU) | (m_opa & 0x0003U));
|
||||
m_spaces[AS_RAM_STATUS]->write_byte(addr, val & 0x0fU);
|
||||
}
|
||||
|
||||
inline u8 mcs40_cpu_device_base::read_rom_port()
|
||||
{
|
||||
return m_io->read_byte((u16(m_cr) << 8) | m_latched_rc) & 0x0fU;
|
||||
return m_spaces[AS_ROM_PORTS]->read_byte((u16(m_cr) << 8) | m_latched_rc) & 0x0fU;
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::write_rom_port(u8 val)
|
||||
{
|
||||
m_io->write_byte((u16(m_cr) << 8) | m_latched_rc, val & 0x0fU);
|
||||
m_spaces[AS_ROM_PORTS]->write_byte((u16(m_cr) << 8) | m_latched_rc, val & 0x0fU);
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::write_memory_port(u8 val)
|
||||
{
|
||||
m_io->write_byte(0x1000U | (u16(m_cr) << 8) | m_latched_rc, val & 0x0fU);
|
||||
m_spaces[AS_RAM_PORTS]->write_byte(((m_cr << 2) & 0x1cU) | (m_latched_rc >> 6), val & 0x0fU);
|
||||
}
|
||||
|
||||
|
||||
@ -615,43 +623,38 @@ inline void mcs40_cpu_device_base::do_a1()
|
||||
m_sync_cb(1);
|
||||
update_4289_pm(1U);
|
||||
update_4289_f_l(1U);
|
||||
// low nybble of ROM address is output here
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::A1, 1U, m_rom_addr & 0x000fU);
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::do_a2()
|
||||
{
|
||||
// mid nybble of ROM address is output here
|
||||
m_4289_a = (m_4289_a & 0x0fU) | (m_rom_addr & 0xf0U);
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::A2, 1U, (m_rom_addr >> 4) & 0x000fU);
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::do_a3()
|
||||
{
|
||||
// high nybble of ROM address is output here
|
||||
m_4289_c = (m_rom_addr >> 8) & 0x0fU;
|
||||
update_cm_rom(BIT(m_cr, 3) ? 0x01U : 0x02U);
|
||||
update_cm_ram(f_cm_ram_table[m_cr & 0x07U]);
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::A3, 1U, (m_rom_addr >> 8) & 0x000fU);
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::do_m1()
|
||||
{
|
||||
// OPR is read here
|
||||
if (!m_extended_cm || (cycle::OP != m_cycle))
|
||||
update_cm_rom(0x03);
|
||||
else
|
||||
update_cm_ram(f_cm_ram_table[m_cr & 0x07U]);
|
||||
// TODO: split this up into two nybble reads - MAME doesn't support this
|
||||
{
|
||||
update_cm_rom(0x03U);
|
||||
update_cm_rom(0x0fU);
|
||||
}
|
||||
// TODO: just read the high nybble here - MAME doesn't support this
|
||||
u8 const read = m_direct->read_byte(rom_bank() | m_rom_addr);
|
||||
if (cycle::OP == m_cycle)
|
||||
{
|
||||
if (m_stop_ff)
|
||||
{
|
||||
m_opr = 0x0U;
|
||||
m_opa = 0x0U;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_opr = read >> 4;
|
||||
m_opa = read & 0x0fU;
|
||||
}
|
||||
m_opr = (m_stop_ff) ? 0x0U : (read >> 4);
|
||||
m_io_pending = is_io_op(m_opr);
|
||||
}
|
||||
else
|
||||
@ -659,11 +662,18 @@ inline void mcs40_cpu_device_base::do_m1()
|
||||
m_arg = read;
|
||||
}
|
||||
m_decoded_halt = false;
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::M1, 1U, (read >> 4) & 0x0fU);
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::do_m2()
|
||||
{
|
||||
// OPA is read here
|
||||
// TODO: just read the low nybble here - MAME doesn't support this
|
||||
u8 const read = m_direct->read_byte(rom_bank() | m_rom_addr);
|
||||
if (cycle::OP == m_cycle)
|
||||
m_opa = (m_stop_ff) ? 0x0U : (read & 0x0fU);
|
||||
else
|
||||
m_arg = read;
|
||||
if (m_io_pending)
|
||||
{
|
||||
update_cm_rom(BIT(m_cr, 3) ? 0x01U : 0x02U);
|
||||
@ -671,13 +681,20 @@ inline void mcs40_cpu_device_base::do_m2()
|
||||
}
|
||||
m_resume = m_stop_latch && (CLEAR_LINE == m_stp);
|
||||
m_stop_latch = CLEAR_LINE != m_stp;
|
||||
if (!m_stop_ff && (cycle::IN != m_cycle))
|
||||
m_rom_addr = pc() = (pc() + 1) & 0x0fff;
|
||||
if (!m_stop_ff)
|
||||
{
|
||||
if (cycle::IN != m_cycle)
|
||||
pc() = (pc() + 1) & 0x0fff;
|
||||
m_rom_addr = pc();
|
||||
}
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::M2, 1U, read & 0x0fU);
|
||||
}
|
||||
|
||||
inline void mcs40_cpu_device_base::do_x1()
|
||||
{
|
||||
// A or OPA is output here
|
||||
// FIXME: is 4004 output on the second cycle of two-cycle instruction OPA or low nybble of the argument?
|
||||
u8 const output(m_extended_cm ? m_a : (cycle::OP == m_cycle) ? m_opa : m_arg);
|
||||
update_cy(m_c);
|
||||
update_cm_rom(0x03U);
|
||||
update_cm_ram(0x0fU);
|
||||
@ -704,20 +721,23 @@ inline void mcs40_cpu_device_base::do_x1()
|
||||
update_4289_f_l(m_4289_first ? 0x01 : 0x00);
|
||||
m_4289_first = !m_4289_first;
|
||||
if (pmem::READ == m_program_op)
|
||||
m_arg = m_program->read_byte(program_addr()) & 0x0fU;
|
||||
m_arg = m_spaces[AS_PROGRAM_MEMORY]->read_byte(program_addr()) & 0x0fU;
|
||||
else
|
||||
assert(pmem::WRITE == m_program_op);
|
||||
}
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::X1, 1U, output);
|
||||
}
|
||||
|
||||
void mcs40_cpu_device_base::do_x2()
|
||||
{
|
||||
u8 output((m_new_rc >> 4) & 0x0fU); // FIXME: what appears on the bus if it isn't SRC, I/O or program memory access?
|
||||
if (m_io_pending)
|
||||
{
|
||||
assert(phase::X2 == m_phase);
|
||||
assert(m_latched_rc == m_new_rc);
|
||||
assert(!m_rc_pending);
|
||||
do_io(m_opr, m_opa);
|
||||
output = do_io(m_opr, m_opa);
|
||||
m_io_pending = false;
|
||||
}
|
||||
if (m_rc_pending)
|
||||
@ -725,13 +745,18 @@ void mcs40_cpu_device_base::do_x2()
|
||||
update_cm_rom(BIT(m_cr, 3) ? 0x01U : 0x02U);
|
||||
update_cm_ram(f_cm_ram_table[m_cr & 0x07U]);
|
||||
m_latched_rc = (m_latched_rc & 0x0fU) | (m_new_rc & 0xf0U);
|
||||
output = (m_new_rc >> 4) & 0x0fU;
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(m_latched_rc == m_new_rc);
|
||||
}
|
||||
if (pmem::READ == m_program_op)
|
||||
set_a(m_arg);
|
||||
set_a(output = m_arg & 0x0fU);
|
||||
else if (pmem::WRITE == m_program_op)
|
||||
output = get_a();
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::X2, 1U, output);
|
||||
}
|
||||
|
||||
void mcs40_cpu_device_base::do_x3()
|
||||
@ -749,7 +774,7 @@ void mcs40_cpu_device_base::do_x3()
|
||||
assert(m_latched_rc == m_new_rc);
|
||||
}
|
||||
if (pmem::WRITE == m_program_op)
|
||||
m_program->write_byte(program_addr(), get_a());
|
||||
m_spaces[AS_PROGRAM_MEMORY]->write_byte(program_addr(), get_a());
|
||||
if (!m_stop_ff && m_decoded_halt)
|
||||
{
|
||||
m_stop_ff = true;
|
||||
@ -761,6 +786,8 @@ void mcs40_cpu_device_base::do_x3()
|
||||
m_stp_ack_cb(1U);
|
||||
}
|
||||
m_resume = false;
|
||||
if (!m_bus_cycle_cb.isnull())
|
||||
m_bus_cycle_cb(phase::X3, 0U, m_new_rc & 0x0fU); // FIXME: what appears on the bus if it isn't SRC?
|
||||
}
|
||||
|
||||
|
||||
@ -1049,7 +1076,7 @@ void i4004_cpu_device::do_cycle2(u8 opr, u8 opa, u8 arg)
|
||||
break;
|
||||
|
||||
case 0x3: // FIN
|
||||
assert(BIT(opa, 0));
|
||||
assert(!BIT(opa, 0));
|
||||
index_reg_pair(opa >> 1) = arg;
|
||||
break;
|
||||
|
||||
@ -1076,46 +1103,57 @@ void i4004_cpu_device::do_cycle2(u8 opr, u8 opa, u8 arg)
|
||||
}
|
||||
}
|
||||
|
||||
void i4004_cpu_device::do_io(u8 opr, u8 opa)
|
||||
u8 i4004_cpu_device::do_io(u8 opr, u8 opa)
|
||||
{
|
||||
assert(0xe == opr);
|
||||
u8 result;
|
||||
switch (opa)
|
||||
{
|
||||
case 0x0: // WRM
|
||||
write_memory(get_a());
|
||||
break;
|
||||
result = get_a();
|
||||
write_memory(result);
|
||||
return result;
|
||||
case 0x1: // WMP
|
||||
write_memory_port(get_a());
|
||||
break;
|
||||
result = get_a();
|
||||
write_memory_port(result);
|
||||
return result;
|
||||
case 0x2: // WRR
|
||||
write_rom_port(get_a());
|
||||
break;
|
||||
result = get_a();
|
||||
write_rom_port(result);
|
||||
return result;
|
||||
case 0x3: // WPM
|
||||
break;
|
||||
// FIXME: with early 4002 chips this overwrites memory
|
||||
return get_a();
|
||||
case 0x4: // WR0
|
||||
case 0x5: // WR1
|
||||
case 0x6: // WR2
|
||||
case 0x7: // WR3
|
||||
write_status(get_a());
|
||||
break;
|
||||
result = get_a();
|
||||
write_status(result);
|
||||
return result;
|
||||
case 0x8: // SBM
|
||||
set_a_c(get_a() + (read_memory() ^ 0x0fU) + (get_c() ^ 0x01U));
|
||||
break;
|
||||
result = read_memory();
|
||||
set_a_c(get_a() + (result ^ 0x0fU) + (get_c() ^ 0x01U));
|
||||
return result;
|
||||
case 0x9: // RDM
|
||||
set_a(read_memory());
|
||||
break;
|
||||
result = read_memory();
|
||||
set_a(result);
|
||||
return result;
|
||||
case 0xa: // RDR
|
||||
set_a(read_rom_port());
|
||||
break;
|
||||
result = read_rom_port();
|
||||
set_a(result);
|
||||
return result;
|
||||
case 0xb: // ADM
|
||||
set_a_c(get_a() + read_memory() + get_c());
|
||||
break;
|
||||
result = read_memory();
|
||||
set_a_c(get_a() + result + get_c());
|
||||
return result;
|
||||
case 0xc: // RD0
|
||||
case 0xd: // RD1
|
||||
case 0xe: // RD2
|
||||
case 0xf: // RD3
|
||||
set_a(read_status());
|
||||
break;
|
||||
result = read_status();
|
||||
set_a(result);
|
||||
return result;
|
||||
default: // something is badly wrong if we get here
|
||||
throw false;
|
||||
}
|
||||
|
@ -25,6 +25,31 @@ enum
|
||||
CONFIGURATION MACROS
|
||||
***********************************************************************/
|
||||
|
||||
#define MCS40BUS_FUNC(cls, fnc) \
|
||||
mcs40_cpu_device_base::bus_cycle_delegate((&cls::fnc), (#cls "::" #fnc), DEVICE_SELF, (cls *)nullptr)
|
||||
|
||||
|
||||
#define MCFG_I4004_ROM_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4004_cpu_device::AS_ROM, map)
|
||||
|
||||
#define MCFG_I4004_RAM_MEMORY_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4004_cpu_device::AS_RAM_MEMORY, map)
|
||||
|
||||
#define MCFG_I4004_ROM_PORTS_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4004_cpu_device::AS_ROM_PORTS, map)
|
||||
|
||||
#define MCFG_I4004_RAM_STATUS_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4004_cpu_device::AS_RAM_STATUS, map)
|
||||
|
||||
#define MCFG_I4004_RAM_PORTS_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4004_cpu_device::AS_RAM_PORTS, map)
|
||||
|
||||
#define MCFG_I4004_PROGRAM_MEMORY_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4004_cpu_device::AS_PROGRAM_MEMORY, map)
|
||||
|
||||
#define MCFG_I4004_BUS_CYCLE_CB(obj) \
|
||||
i4004_cpu_device::set_bus_cycle_cb(*device, (MCS40BUS_##obj));
|
||||
|
||||
#define MCFG_I4004_SYNC_CB(obj) \
|
||||
devcb = &i4004_cpu_device::set_sync_cb(*device, DEVCB_##obj);
|
||||
|
||||
@ -50,6 +75,27 @@ enum
|
||||
devcb = &i4004_cpu_device::set_4289_f_l_cb(*device, DEVCB_##obj);
|
||||
|
||||
|
||||
#define MCFG_I4040_ROM_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4040_cpu_device::AS_ROM, map)
|
||||
|
||||
#define MCFG_I4040_RAM_MEMORY_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4040_cpu_device::AS_RAM_MEMORY, map)
|
||||
|
||||
#define MCFG_I4040_ROM_PORTS_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4040_cpu_device::AS_ROM_PORTS, map)
|
||||
|
||||
#define MCFG_I4040_RAM_STATUS_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4040_cpu_device::AS_RAM_STATUS, map)
|
||||
|
||||
#define MCFG_I4040_RAM_PORTS_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4040_cpu_device::AS_RAM_PORTS, map)
|
||||
|
||||
#define MCFG_I4040_PROGRAM_MEMORY_MAP(map) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(i4040_cpu_device::AS_PROGRAM_MEMORY, map)
|
||||
|
||||
#define MCFG_I4040_BUS_CYCLE_CB(obj) \
|
||||
i4040_cpu_device::set_bus_cycle_cb(*device, (MCS40BUS_##obj));
|
||||
|
||||
#define MCFG_I4040_SYNC_CB(obj) \
|
||||
devcb = &i4040_cpu_device::set_sync_cb(*device, DEVCB_##obj);
|
||||
|
||||
@ -92,12 +138,31 @@ enum
|
||||
class mcs40_cpu_device_base : public cpu_device
|
||||
{
|
||||
public:
|
||||
enum {
|
||||
AS_ROM = AS_PROGRAM,
|
||||
AS_RAM_MEMORY = AS_DATA,
|
||||
AS_ROM_PORTS = AS_IO,
|
||||
AS_RAM_STATUS = AS_OPCODES + 1,
|
||||
AS_RAM_PORTS,
|
||||
AS_PROGRAM_MEMORY
|
||||
};
|
||||
enum class phase { A1, A2, A3, M1, M2, X1, X2, X3 };
|
||||
|
||||
// step isn't a real signal, but realistically anything watching the bus will have a counter to track it
|
||||
typedef device_delegate<void (phase step, u8 sync, u8 data)> bus_cycle_delegate;
|
||||
|
||||
// configuration helpers
|
||||
template <typename Obj> static void set_bus_cycle_cb(device_t &device, Obj &&cb)
|
||||
{ downcast<mcs40_cpu_device_base &>(device).m_bus_cycle_cb = std::forward<Obj>(cb); }
|
||||
template <typename Obj> static devcb_base &set_4289_pm_cb(device_t &device, Obj &&cb)
|
||||
{ return downcast<mcs40_cpu_device_base &>(device).m_4289_pm_cb.set_callback(std::forward<Obj>(cb)); }
|
||||
template <typename Obj> static devcb_base &set_4289_f_l_cb(device_t &device, Obj &&cb)
|
||||
{ return downcast<mcs40_cpu_device_base &>(device).m_4289_f_l_cb.set_callback(std::forward<Obj>(cb)); }
|
||||
|
||||
// chip select outputs
|
||||
u8 get_cm_rom() const { return m_cm_rom; }
|
||||
u8 get_cm_ram() const { return m_cm_ram; }
|
||||
|
||||
// 4008/4009 or 4289 outputs
|
||||
u8 get_4289_a() const { return m_4289_a; } // 8-bit address
|
||||
u8 get_4289_c() const { return m_4289_c; } // 4-bit chip select
|
||||
@ -143,7 +208,7 @@ protected:
|
||||
virtual bool is_io_op(u8 opr) = 0;
|
||||
virtual cycle do_cycle1(u8 opr, u8 opa, pmem &program_op) = 0;
|
||||
virtual void do_cycle2(u8 opr, u8 opa, u8 arg) = 0;
|
||||
virtual void do_io(u8 opr, u8 opa) = 0;
|
||||
virtual u8 do_io(u8 opr, u8 opa) = 0;
|
||||
|
||||
// register access
|
||||
u8 get_a() const;
|
||||
@ -207,8 +272,6 @@ private:
|
||||
I4040_SRC
|
||||
};
|
||||
|
||||
enum class phase { A1, A2, A3, M1, M2, X1, X2, X3 };
|
||||
|
||||
// instruction phases
|
||||
void do_a1();
|
||||
void do_a2();
|
||||
@ -230,10 +293,13 @@ private:
|
||||
void update_4289_f_l(u8 val);
|
||||
|
||||
// address spaces
|
||||
address_space_config m_program_config, m_data_config, m_io_config, m_opcodes_config;
|
||||
address_space *m_program, *m_data, *m_io, *m_opcodes;
|
||||
address_space_config m_space_config[7];
|
||||
address_space *m_spaces[7];
|
||||
direct_read_data *m_direct;
|
||||
|
||||
// bus snooping callback
|
||||
bus_cycle_delegate m_bus_cycle_cb;
|
||||
|
||||
// output callbacks
|
||||
devcb_write_line m_sync_cb;
|
||||
devcb_write_line m_cm_rom_cb[2], m_cm_ram_cb[4];
|
||||
@ -323,7 +389,7 @@ protected:
|
||||
virtual bool is_io_op(u8 opr) override;
|
||||
virtual cycle do_cycle1(u8 opr, u8 opa, pmem &program_op) override;
|
||||
virtual void do_cycle2(u8 opr, u8 opa, u8 arg) override;
|
||||
virtual void do_io(u8 opr, u8 opa) override;
|
||||
virtual u8 do_io(u8 opr, u8 opa) override;
|
||||
|
||||
// configuration helpers
|
||||
using mcs40_cpu_device_base::set_sync_cb;
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include "4004clk.lh"
|
||||
|
||||
|
||||
class nixieclock_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -77,21 +78,29 @@ WRITE8_MEMBER(nixieclock_state::neon_w)
|
||||
output_set_neon_value(3, BIT(data,0));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START(4004clk_rom, AS_OPCODES, 8, nixieclock_state)
|
||||
AM_RANGE(0x0000, 0x0FFF) AM_ROM AM_REGION("maincpu", 0)
|
||||
static ADDRESS_MAP_START(4004clk_rom, i4004_cpu_device::AS_ROM, 8, nixieclock_state)
|
||||
AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(4004clk_mem, AS_DATA, 8, nixieclock_state)
|
||||
static ADDRESS_MAP_START(4004clk_mem, i4004_cpu_device::AS_RAM_MEMORY, 8, nixieclock_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x007F) AM_RAM
|
||||
AM_RANGE(0x0000, 0x007f) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( 4004clk_io, AS_IO, 8, nixieclock_state)
|
||||
static ADDRESS_MAP_START(4004clk_stat, i4004_cpu_device::AS_RAM_STATUS, 8, nixieclock_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x001f) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(4004clk_rp, i4004_cpu_device::AS_ROM_PORTS, 8, nixieclock_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0700) AM_READ_PORT("INPUT")
|
||||
AM_RANGE(0x0000, 0x00ef) AM_MIRROR(0x0700) AM_WRITE(nixie_w)
|
||||
AM_RANGE(0x00f0, 0x00ff) AM_MIRROR(0x0700) AM_WRITE(neon_w)
|
||||
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x083f) AM_DEVWRITE("dac", dac_bit_interface, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(4004clk_mp, i4004_cpu_device::AS_RAM_PORTS, 8, nixieclock_state)
|
||||
AM_RANGE(0x00, 0x00) AM_DEVWRITE("dac", dac_bit_interface, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Input ports */
|
||||
@ -118,9 +127,11 @@ static MACHINE_CONFIG_START( 4004clk )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", I4004, XTAL_5MHz / 8)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(4004clk_rom)
|
||||
MCFG_CPU_DATA_MAP(4004clk_mem)
|
||||
MCFG_CPU_IO_MAP(4004clk_io)
|
||||
MCFG_I4004_ROM_MAP(4004clk_rom)
|
||||
MCFG_I4004_RAM_MEMORY_MAP(4004clk_mem)
|
||||
MCFG_I4004_ROM_PORTS_MAP(4004clk_rp)
|
||||
MCFG_I4004_RAM_STATUS_MAP(4004clk_stat)
|
||||
MCFG_I4004_RAM_PORTS_MAP(4004clk_mp)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEFAULT_LAYOUT(layout_4004clk)
|
||||
|
@ -99,23 +99,31 @@ WRITE8_MEMBER(busicom_state::printer_ctrl_w)
|
||||
{
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START(busicom_rom, AS_OPCODES, 8, busicom_state )
|
||||
static ADDRESS_MAP_START(busicom_rom, i4004_cpu_device::AS_ROM, 8, busicom_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x04FF) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(busicom_mem, AS_DATA, 8, busicom_state )
|
||||
static ADDRESS_MAP_START(busicom_mem, i4004_cpu_device::AS_RAM_MEMORY, 8, busicom_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x07F) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( busicom_io , AS_IO, 8, busicom_state )
|
||||
static ADDRESS_MAP_START(busicom_stat, i4004_cpu_device::AS_RAM_STATUS, 8, busicom_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x01F) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( busicom_rp, i4004_cpu_device::AS_ROM_PORTS, 8, busicom_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0700) AM_WRITE(shifter_w) // ROM0 I/O
|
||||
AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x0700) AM_READWRITE(keyboard_r,printer_ctrl_w) // ROM1 I/O
|
||||
AM_RANGE(0x0020, 0x002f) AM_MIRROR(0x0700) AM_READ(printer_r) // ROM2 I/O
|
||||
AM_RANGE(0x1000, 0x103f) AM_MIRROR(0x0700) AM_WRITE(printer_w) // RAM0 output
|
||||
AM_RANGE(0x1040, 0x105f) AM_MIRROR(0x0800) AM_WRITE(status_w) // RAM1 output
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( busicom_mp, i4004_cpu_device::AS_RAM_PORTS, 8, busicom_state )
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(printer_w) // RAM0 output
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(status_w) // RAM1 output
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Input ports */
|
||||
@ -214,10 +222,11 @@ void busicom_state::machine_reset()
|
||||
static MACHINE_CONFIG_START( busicom )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", I4004, 750000)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(busicom_rom)
|
||||
MCFG_CPU_DATA_MAP(busicom_mem)
|
||||
MCFG_CPU_IO_MAP(busicom_io)
|
||||
|
||||
MCFG_I4004_ROM_MAP(busicom_rom)
|
||||
MCFG_I4004_RAM_MEMORY_MAP(busicom_mem)
|
||||
MCFG_I4004_ROM_PORTS_MAP(busicom_rp)
|
||||
MCFG_I4004_RAM_STATUS_MAP(busicom_stat)
|
||||
MCFG_I4004_RAM_PORTS_MAP(busicom_mp)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -1,221 +1,279 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Robbbert
|
||||
/***********************************************************************************
|
||||
// copyright-holders:Robbbert, Vas Crabb
|
||||
/*************************************************************************
|
||||
|
||||
PINBALL
|
||||
Flicker was originally an EM machine, and Bally asked Nutting Associates
|
||||
to create a solid-state prototype.
|
||||
Flicker was originally an electromechanical machine, and Bally asked
|
||||
Nutting Associates to create a solid-state prototype.
|
||||
|
||||
Seems to be the first ever microprocessor-controlled pinball machine.
|
||||
|
||||
2012-08-23 Made working [Robbbert]
|
||||
|
||||
Inputs from US Patent 4093232
|
||||
Some clues from PinMAME
|
||||
|
||||
Note: If F3 pressed, or you start the system, it will remember any credits from
|
||||
last time. However, you still need to insert a coin before the start button
|
||||
will work.
|
||||
Note: If F3 pressed, or you start the system, it will remember any
|
||||
credits from last time. However, you still need to insert a coin
|
||||
before the start button will work.
|
||||
|
||||
************************************************************************************/
|
||||
The input/output multiplexing on this machine is quite clever. RAM0
|
||||
output connected to two 1-of-16 decoders. These are strobed using
|
||||
CM-RAM1 and CM-RAM2. There is no RAM or I/O mapped there - the
|
||||
additional chip select lines are just used to strobe the decoders.
|
||||
|
||||
*************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "machine/genpin.h"
|
||||
#include "cpu/mcs40/mcs40.h"
|
||||
|
||||
#include "flicker.lh"
|
||||
|
||||
|
||||
class flicker_state : public genpin_class
|
||||
{
|
||||
public:
|
||||
flicker_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
flicker_state(machine_config const &mconfig, device_type type, char const *tag)
|
||||
: genpin_class(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_testport(*this, "TEST")
|
||||
, m_coinport(*this, "COIN")
|
||||
, m_switch(*this, "SWITCH.%u", 0)
|
||||
{ }
|
||||
, m_switch(*this, "SWITCH.%X", 0)
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ram0_out) { m_ram0_output = data; }
|
||||
DECLARE_WRITE8_MEMBER(rom0_out) { m_rom0_output = data; }
|
||||
DECLARE_WRITE8_MEMBER(rom1_out) { m_rom1_output = data; }
|
||||
DECLARE_READ8_MEMBER(rom2_in);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(cm_ram1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(cm_ram2_w);
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(coins_in);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(port00_w);
|
||||
DECLARE_WRITE8_MEMBER(port01_w);
|
||||
DECLARE_WRITE8_MEMBER(port10_w);
|
||||
DECLARE_READ8_MEMBER(port02_r);
|
||||
private:
|
||||
uint8_t m_out_data;
|
||||
required_device<i4004_cpu_device> m_maincpu;
|
||||
required_ioport m_testport;
|
||||
required_ioport m_coinport;
|
||||
required_ioport_array<7> m_switch;
|
||||
required_device<i4004_cpu_device> m_maincpu;
|
||||
required_ioport m_testport;
|
||||
required_ioport m_coinport;
|
||||
required_ioport_array<7> m_switch;
|
||||
|
||||
bool m_cm_ram1 = false, m_cm_ram2 = false;
|
||||
u8 m_ram0_output = 0U, m_rom0_output = 0U, m_rom1_output = 0U;
|
||||
u8 m_mux_col = 0U, m_relay_drive = 0U;
|
||||
};
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( flicker_rom, AS_OPCODES, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x03FF) AM_ROM AM_REGION("maincpu", 0)
|
||||
static ADDRESS_MAP_START( flicker_rom, i4004_cpu_device::AS_ROM, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x03ff) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(flicker_map, AS_DATA, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x00FF) AM_RAM AM_SHARE("nvram")
|
||||
static ADDRESS_MAP_START( flicker_memory, i4004_cpu_device::AS_RAM_MEMORY, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x003f) AM_RAM AM_SHARE("memory")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( flicker_io, AS_IO, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0700) AM_WRITE(port00_w)
|
||||
AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x0700) AM_WRITE(port01_w)
|
||||
AM_RANGE(0x0020, 0x002f) AM_MIRROR(0x0700) AM_READ(port02_r)
|
||||
AM_RANGE(0x1000, 0x103f) AM_MIRROR(0x0800) AM_WRITE(port10_w)
|
||||
static ADDRESS_MAP_START( flicker_status, i4004_cpu_device::AS_RAM_STATUS, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x000f) AM_RAM AM_SHARE("status")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( flicker_rom_ports, i4004_cpu_device::AS_ROM_PORTS, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0700) AM_WRITE(rom0_out)
|
||||
AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x0700) AM_WRITE(rom1_out)
|
||||
AM_RANGE(0x0020, 0x002f) AM_MIRROR(0x0700) AM_READ(rom2_in)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( flicker_ram_ports, i4004_cpu_device::AS_RAM_PORTS, 8, flicker_state )
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(ram0_out)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( flicker )
|
||||
PORT_START("TEST")
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Slam") PORT_CODE(KEYCODE_HOME)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Slam") PORT_CODE(KEYCODE_HOME)
|
||||
PORT_BIT(0x001c, IP_ACTIVE_HIGH, IPT_UNKNOWN) // called "two coins", "three coins", "four coins" in patent, purpose unknown
|
||||
PORT_BIT(0x07e0, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, flicker_state, coins_in, nullptr)
|
||||
PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_TILT)
|
||||
PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_START)
|
||||
PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test")
|
||||
PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_START) PORT_NAME("Credit Button")
|
||||
PORT_BIT(0x6000, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_SERVICE1) PORT_NAME("Test")
|
||||
|
||||
// The coin slot would be connected to one of the lines via a wire jumper on a terminal strip
|
||||
PORT_START("COIN")
|
||||
// The coin slot would be connected to one of six lines via a wire jumper on a terminal strip
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_COIN1)
|
||||
PORT_DIPNAME( 0x07e0, 0x0020, DEF_STR( Coinage ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( 1C_4C ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( 1C_5C ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( 1C_6C ) )
|
||||
PORT_CONFNAME(0x3f, 0x01, DEF_STR(Coinage))
|
||||
PORT_CONFSETTING( 0x01, DEF_STR(1C_1C))
|
||||
PORT_CONFSETTING( 0x02, DEF_STR(1C_2C))
|
||||
PORT_CONFSETTING( 0x04, DEF_STR(1C_3C))
|
||||
PORT_CONFSETTING( 0x08, DEF_STR(1C_4C))
|
||||
PORT_CONFSETTING( 0x10, DEF_STR(1C_5C))
|
||||
PORT_CONFSETTING( 0x20, DEF_STR(1C_6C))
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN1)
|
||||
|
||||
PORT_START("SWITCH.0")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Lane Target") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/B Target") PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Lane 1000") PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/A Target") PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Lane Target") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"/B\" Target") PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Lane 1000") PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"/A\" Target") PORT_CODE(KEYCODE_Y)
|
||||
|
||||
PORT_START("SWITCH.1")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Lane Target") PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/C Target") PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Lane 1000") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/D Target") PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Lane Target") PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"/C\" Target") PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Lane 1000") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"/D\" Target") PORT_CODE(KEYCODE_A)
|
||||
|
||||
PORT_START("SWITCH.2")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Spinner") PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Spinner") PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x000e, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_START("SWITCH.3")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10's Target") PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("100's Target") PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Pot Bumper") PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3000 Hole") PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10's Target") PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("100's Target") PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Pot Bumper") PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3000 Hole") PORT_CODE(KEYCODE_H)
|
||||
|
||||
PORT_START("SWITCH.4")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1000 Bonus") PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("500 Target") PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Out Hole") PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1000 Bonus") PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("500 Targets") PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Out Hole") PORT_CODE(KEYCODE_X)
|
||||
|
||||
PORT_START("SWITCH.5")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left 500 Out") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Bumper") PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right 500 Out") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Bumper") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left 500 Out") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Bumper") PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right 500 Out") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Bumper") PORT_CODE(KEYCODE_V)
|
||||
|
||||
PORT_START("SWITCH.6")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A Target") PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B target") PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C target") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D Target") PORT_CODE(KEYCODE_COMMA)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"A\" Target") PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"B\" Target") PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"C\" Target") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("\"D\" Target") PORT_CODE(KEYCODE_COMMA)
|
||||
|
||||
// TODO: what are the other things in this matrix? FIVE-BALL, STRAIGHT, 15K-110K, etc.
|
||||
INPUT_PORTS_END
|
||||
|
||||
READ8_MEMBER( flicker_state::port02_r )
|
||||
|
||||
READ8_MEMBER(flicker_state::rom2_in)
|
||||
{
|
||||
if (offset < 7)
|
||||
return m_switch[offset]->read();
|
||||
else
|
||||
return 0;
|
||||
return (m_switch.size() > m_mux_col) ? m_switch[m_mux_col]->read() : 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( flicker_state::port00_w )
|
||||
|
||||
WRITE_LINE_MEMBER(flicker_state::cm_ram1_w)
|
||||
{
|
||||
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 };
|
||||
output().set_digit_value(offset, patterns[data]);
|
||||
}
|
||||
static constexpr uint8_t led_digits[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 };
|
||||
static constexpr char const *const lamp_matrix[][4] = {
|
||||
{ nullptr, "lamp_credit_lamp", "lamp_flippers", "lamp_special" },
|
||||
{ "lamp_a_lamp", "lamp_b_lamp", "lamp_c_lamp", "lamp_d_lamp" },
|
||||
{ "lamp_not_a_lamp", "lamp_not_b_lamp", "lamp_not_c_lamp", "lamp_not_d_lamp" },
|
||||
{ "lamp_left_extra_ball", "lamp_double_bonus", "lamp_shoot_again", "lamp_right_extra_ball" },
|
||||
{ "lamp_00_100s", "lamp_100", "lamp_200", "lamp_300" },
|
||||
{ "lamp_400", "lamp_500", "lamp_600", "lamp_700" },
|
||||
{ "lamp_800", "lamp_900", nullptr, nullptr },
|
||||
{ "lamp_point_00", "lamp_1000", "lamp_2000", "lamp_3000" },
|
||||
{ "lamp_4000", "lamp_5000", "lamp_6000", "lamp_7000" },
|
||||
{ "lamp_dummy_zero", "lamp_game_over", "lamp_tilt", "lamp_same_player_shoots" },
|
||||
{ "lamp_1_up", "lamp_2_up", "lamp_one_player", "lamp_two_player" } };
|
||||
|
||||
WRITE8_MEMBER( flicker_state::port01_w )
|
||||
{
|
||||
uint16_t test_port = m_testport->read() & 0xf81e;
|
||||
uint16_t coin_port = m_coinport->read() & 0x07e0;
|
||||
|
||||
if (BIT(m_coinport->read(), 0) )
|
||||
test_port |= coin_port;
|
||||
|
||||
m_maincpu->set_input_line(I4004_TEST_LINE, BIT(test_port, offset));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( flicker_state::port10_w )
|
||||
{
|
||||
/* Outputs depend on data:
|
||||
1 = tens chime
|
||||
2 = hundreds chime
|
||||
3 = thousands chime
|
||||
4 = left bumper
|
||||
5 = right bumper
|
||||
6 = pot bumper
|
||||
7 = out hole
|
||||
8 = 3000 hole
|
||||
9 = knocker
|
||||
A = coin counter
|
||||
B = coin acceptor
|
||||
|
||||
The coin outputs (A and B) don't activate
|
||||
|
||||
A large amount of data is continuously flowing through here, even when there is no
|
||||
sound to produce. We need to change this to just one pulse per actual sound. */
|
||||
|
||||
offset &= 0x0f;
|
||||
if (data != offset)
|
||||
if (!m_cm_ram1 && !state)
|
||||
{
|
||||
if (data != m_out_data)
|
||||
m_mux_col = m_ram0_output;
|
||||
output().set_digit_value(m_mux_col, led_digits[m_rom0_output]);
|
||||
if (ARRAY_LENGTH(lamp_matrix) > m_mux_col)
|
||||
{
|
||||
m_out_data = data;
|
||||
switch (data)
|
||||
{
|
||||
case 0x01:
|
||||
m_samples->start(1, 1);
|
||||
break;
|
||||
case 0x02:
|
||||
m_samples->start(2, 2);
|
||||
break;
|
||||
case 0x03:
|
||||
m_samples->start(3, 3);
|
||||
break;
|
||||
case 0x04:
|
||||
case 0x05:
|
||||
case 0x06:
|
||||
m_samples->start(0, 0);
|
||||
break;
|
||||
case 0x07:
|
||||
case 0x08:
|
||||
m_samples->start(5, 5);
|
||||
break;
|
||||
case 0x09:
|
||||
m_samples->start(0, 6);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (lamp_matrix[m_mux_col][0])
|
||||
output().set_value(lamp_matrix[m_mux_col][0], BIT(m_rom1_output, 0));
|
||||
if (lamp_matrix[m_mux_col][1])
|
||||
output().set_value(lamp_matrix[m_mux_col][1], BIT(m_rom1_output, 1));
|
||||
if (lamp_matrix[m_mux_col][2])
|
||||
output().set_value(lamp_matrix[m_mux_col][2], BIT(m_rom1_output, 2));
|
||||
if (lamp_matrix[m_mux_col][3])
|
||||
output().set_value(lamp_matrix[m_mux_col][3], BIT(m_rom1_output, 3));
|
||||
}
|
||||
if (0x0c == m_mux_col)
|
||||
{
|
||||
// TODO: BIT(m_rom1_output, 0) -> COIN ACC.
|
||||
}
|
||||
// TODO: these should be hooked up to input changed members as well
|
||||
m_maincpu->set_input_line(I4004_TEST_LINE, BIT(m_testport->read(), m_mux_col));
|
||||
}
|
||||
m_cm_ram1 = !state;
|
||||
}
|
||||
|
||||
|
||||
CUSTOM_INPUT_MEMBER(flicker_state::coins_in)
|
||||
{
|
||||
u8 const coins(m_coinport->read());
|
||||
return BIT(coins, 7) ? (coins & 0x3f) : 0;
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(flicker_state::cm_ram2_w)
|
||||
{
|
||||
if (!m_cm_ram2 && !state && (m_relay_drive != m_ram0_output))
|
||||
{
|
||||
// The coin outputs (A and B) aren't used
|
||||
switch (m_relay_drive = m_ram0_output)
|
||||
{
|
||||
case 0x01: // 10 chime
|
||||
m_samples->start(1, 1);
|
||||
break;
|
||||
case 0x02: // 100 chime
|
||||
m_samples->start(2, 2);
|
||||
break;
|
||||
case 0x03: // 1000 chime
|
||||
m_samples->start(3, 3);
|
||||
break;
|
||||
case 0x04: // left bumper
|
||||
case 0x05: // right bumper
|
||||
case 0x06: // pot bumper
|
||||
m_samples->start(0, 0);
|
||||
break;
|
||||
case 0x07: // out hole
|
||||
case 0x08: // 3000 hole
|
||||
m_samples->start(5, 5);
|
||||
break;
|
||||
case 0x09: // door knocker
|
||||
m_samples->start(0, 6);
|
||||
break;
|
||||
case 0x0a: // coin counter
|
||||
logerror("coin counter\n");
|
||||
break;
|
||||
case 0x0b: // coin acceptor
|
||||
logerror("coin acceptor\n");
|
||||
break;
|
||||
default: // 0/C/D/E/F not connected
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_cm_ram2 = !state;
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( flicker )
|
||||
/* basic machine hardware */
|
||||
static MACHINE_CONFIG_START(flicker)
|
||||
// basic machine hardware
|
||||
MCFG_CPU_ADD("maincpu", I4004, XTAL_5MHz / 8)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(flicker_rom)
|
||||
MCFG_CPU_DATA_MAP(flicker_map)
|
||||
MCFG_CPU_IO_MAP(flicker_io)
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MCFG_I4004_ROM_MAP(flicker_rom)
|
||||
MCFG_I4004_RAM_MEMORY_MAP(flicker_memory)
|
||||
MCFG_I4004_ROM_PORTS_MAP(flicker_rom_ports)
|
||||
MCFG_I4004_RAM_STATUS_MAP(flicker_status)
|
||||
MCFG_I4004_RAM_PORTS_MAP(flicker_ram_ports)
|
||||
MCFG_I4004_CM_RAM1_CB(WRITELINE(flicker_state, cm_ram1_w))
|
||||
MCFG_I4004_CM_RAM2_CB(WRITELINE(flicker_state, cm_ram2_w))
|
||||
|
||||
/* Video */
|
||||
MCFG_NVRAM_ADD_0FILL("memory")
|
||||
MCFG_NVRAM_ADD_0FILL("status")
|
||||
|
||||
// video
|
||||
MCFG_DEFAULT_LAYOUT(layout_flicker)
|
||||
|
||||
/* Sound */
|
||||
MCFG_FRAGMENT_ADD( genpin_audio )
|
||||
// sound
|
||||
MCFG_FRAGMENT_ADD(genpin_audio)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
ROM_START(flicker)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_REGION(0x0400, "maincpu", 0)
|
||||
ROM_LOAD("flicker.rom", 0x0000, 0x0400, CRC(c692e586) SHA1(5cabb28a074d18b589b5b8f700c57e1610071c68))
|
||||
ROM_END
|
||||
|
||||
// YEAR GAME PARENT MACHINE INPUT CLASS INIT ORIENTATION COMPANY DESCRIPTION FLAGS
|
||||
GAME(1974, flicker, 0, flicker, flicker, flicker_state, 0, ROT0, "Dave Nutting Associates / Bally", "Flicker (prototype)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
|
||||
// YEAR GAME PARENT MACHINE INPUT CLASS INIT ORIENTATION COMPANY DESCRIPTION FLAGS
|
||||
GAME( 1974, flicker, 0, flicker, flicker, flicker_state, 0, ROT0, "Dave Nutting Associates / Bally", "Flicker (prototype)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
|
||||
|
@ -14,6 +14,8 @@
|
||||
#include "cpu/mcs40/mcs40.h"
|
||||
#include "machine/bankdev.h"
|
||||
|
||||
#include "intlc440.lh"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
@ -24,11 +26,15 @@ public:
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_cpu(*this, "maincpu")
|
||||
, m_program_banks(*this, "prgbank")
|
||||
, m_io_banks(*this, "iobank")
|
||||
, m_rom_port_banks(*this, "rpbank")
|
||||
, m_ram_port_banks(*this, "mpbank")
|
||||
, m_bus(*this, "bus")
|
||||
, m_tty(*this, "tty")
|
||||
, m_ram(*this, "ram")
|
||||
, m_sw_mode(*this, "MODE")
|
||||
, m_sw_control(*this, "CONTROL")
|
||||
, m_sw_addr_data(*this, "ADDRDAT")
|
||||
, m_sw_passes(*this, "PASSES")
|
||||
{
|
||||
}
|
||||
|
||||
@ -45,6 +51,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(ram0_out);
|
||||
DECLARE_WRITE8_MEMBER(ram1_out);
|
||||
|
||||
void bus_cycle(mcs40_cpu_device_base::phase step, u8 sync, u8 data);
|
||||
DECLARE_WRITE_LINE_MEMBER(stp_ack);
|
||||
|
||||
// universal slot outputs
|
||||
@ -53,13 +60,20 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(bus_reset_4002);
|
||||
DECLARE_WRITE_LINE_MEMBER(bus_user_reset);
|
||||
|
||||
// edge-sensitive front-panel switches
|
||||
// front panel switches
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_stop);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_single_step);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_reset);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_mon);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_ram);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_prom);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_run);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_next_inst);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_decr);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_incr);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_load);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_cma_enable);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sw_cma_write);
|
||||
|
||||
protected:
|
||||
virtual void driver_start() override;
|
||||
@ -82,7 +96,15 @@ private:
|
||||
BIT_SW_RESET,
|
||||
BIT_SW_MON,
|
||||
BIT_SW_RAM,
|
||||
BIT_SW_PROM
|
||||
BIT_SW_PROM,
|
||||
|
||||
BIT_SW_RUN = 0,
|
||||
BIT_SW_NEXT_INST,
|
||||
BIT_SW_DECR,
|
||||
BIT_SW_INCR,
|
||||
BIT_SW_LOAD,
|
||||
BIT_SW_CMA_ENABLE,
|
||||
BIT_SW_CMA_WRITE
|
||||
};
|
||||
enum : ioport_value
|
||||
{
|
||||
@ -91,22 +113,34 @@ private:
|
||||
MASK_SW_RESET = 1U << BIT_SW_RESET,
|
||||
MASK_SW_MON = 1U << BIT_SW_MON,
|
||||
MASK_SW_RAM = 1U << BIT_SW_RAM,
|
||||
MASK_SW_PROM = 1U << BIT_SW_PROM
|
||||
MASK_SW_PROM = 1U << BIT_SW_PROM,
|
||||
|
||||
MASK_SW_DECR = 1U << BIT_SW_DECR,
|
||||
MASK_SW_INCR = 1U << BIT_SW_INCR,
|
||||
MASK_SW_LOAD = 1U << BIT_SW_LOAD,
|
||||
MASK_SW_CMA_ENABLE = 1U << BIT_SW_CMA_ENABLE,
|
||||
MASK_SW_CMA_WRITE = 1U << BIT_SW_CMA_WRITE
|
||||
};
|
||||
|
||||
TIMER_CALLBACK_MEMBER(single_step_expired);
|
||||
TIMER_CALLBACK_MEMBER(reset_expired);
|
||||
|
||||
void trigger_reset();
|
||||
void reset_panel();
|
||||
void display_address(u16 value, u16 mask);
|
||||
void display_instruction(u8 value, u8 mask);
|
||||
void display_active_bank(u8 value);
|
||||
void display_execution(u8 value, u8 mask);
|
||||
void display_pointer(u8 value, u8 mask);
|
||||
|
||||
required_device<cpu_device> m_cpu;
|
||||
required_device<address_map_bank_device> m_program_banks, m_io_banks;
|
||||
required_device<mcs40_cpu_device_base> m_cpu;
|
||||
required_device<address_map_bank_device> m_program_banks, m_rom_port_banks, m_ram_port_banks;
|
||||
required_device<bus::intellec4::univ_bus_device> m_bus;
|
||||
required_device<rs232_port_device> m_tty;
|
||||
|
||||
required_shared_ptr<u8> m_ram;
|
||||
|
||||
required_ioport m_sw_mode;
|
||||
required_ioport m_sw_mode, m_sw_control, m_sw_addr_data, m_sw_passes;
|
||||
|
||||
emu_timer *m_single_step_timer = nullptr;
|
||||
emu_timer *m_reset_timer = nullptr;
|
||||
@ -116,9 +150,18 @@ private:
|
||||
bool m_ram_write = false;
|
||||
|
||||
// control board state
|
||||
bool m_stp_ack = false, m_single_step = false;
|
||||
bool m_stp_ack = false, m_single_step = false, m_cpu_reset = false;
|
||||
bool m_ff_mon = true, m_ff_ram = false, m_ff_prom = false;
|
||||
|
||||
// front panel state
|
||||
u16 m_latched_addr = 0U, m_display_addr = 0U;
|
||||
u8 m_display_instr = 0U, m_display_bank = 0U, m_display_exec = 0U, m_display_ptr = 0U;
|
||||
u8 m_pass_counter = 0U;
|
||||
bool m_panel_reset = false;
|
||||
bool m_next_inst = false, m_adr_cmp_latch = false, m_search_complete = false;
|
||||
bool m_src = false, m_pointer_valid = false;
|
||||
bool m_cma_enable = false, m_cma_write = false;
|
||||
|
||||
// current state of signals from bus
|
||||
bool m_bus_stop = false, m_bus_reset_4002 = false, m_bus_user_reset = false;
|
||||
|
||||
@ -126,6 +169,7 @@ private:
|
||||
bool m_sw_stop = false;
|
||||
bool m_sw_reset = false;
|
||||
bool m_sw_mon = false, m_sw_ram = false, m_sw_prom = false;
|
||||
bool m_sw_run = false;
|
||||
};
|
||||
|
||||
|
||||
@ -196,6 +240,83 @@ WRITE8_MEMBER(intellec4_40_state::ram1_out)
|
||||
m_tty->write_rts(BIT(~data, 0));
|
||||
}
|
||||
|
||||
void intellec4_40_state::bus_cycle(mcs40_cpu_device_base::phase step, u8 sync, u8 data)
|
||||
{
|
||||
switch (step)
|
||||
{
|
||||
case mcs40_cpu_device_base::phase::A1:
|
||||
if (m_cma_enable)
|
||||
{
|
||||
display_address(m_latched_addr, 0x0fffU);
|
||||
display_instruction(m_ram[m_latched_addr], 0xffU);
|
||||
}
|
||||
else if (!m_search_complete)
|
||||
{
|
||||
display_address(u16(data), 0x000fU);
|
||||
m_src = false;
|
||||
}
|
||||
if (m_cma_write)
|
||||
{
|
||||
m_ram[m_latched_addr] = u8(~m_sw_addr_data->read() & 0x00ffU);
|
||||
m_cma_write = false;
|
||||
}
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::A2:
|
||||
if (!m_search_complete && !m_cma_enable)
|
||||
display_address(u16(data) << 4, 0x00f0U);
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::A3:
|
||||
if (!m_search_complete && !m_cma_enable)
|
||||
{
|
||||
display_address(u16(data) << 8, 0x0f00U);
|
||||
display_active_bank(~m_cpu->get_cm_ram());
|
||||
}
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::M1:
|
||||
if (!m_search_complete && !m_cma_enable)
|
||||
display_instruction(data << 4, 0xf0U);
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::M2:
|
||||
if (!m_search_complete && !m_cma_enable)
|
||||
display_instruction(data, 0x0fU);
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::X1:
|
||||
// not connected to anything
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::X2:
|
||||
if (!m_search_complete && !m_cma_enable)
|
||||
{
|
||||
display_execution(data << 4, 0xf0U);
|
||||
m_src = BIT(~m_cpu->get_cm_rom(), 0);
|
||||
if (m_src)
|
||||
display_pointer(data << 4, 0xf0U);
|
||||
}
|
||||
break;
|
||||
case mcs40_cpu_device_base::phase::X3:
|
||||
if (m_search_complete != m_adr_cmp_latch)
|
||||
machine().output().set_value("led_status_search", m_search_complete = m_adr_cmp_latch);
|
||||
if (!m_search_complete && !m_cma_enable)
|
||||
{
|
||||
display_execution(data, 0x0fU);
|
||||
if (m_src)
|
||||
{
|
||||
display_pointer(data, 0x0fU);
|
||||
if (!m_panel_reset && !m_pointer_valid)
|
||||
machine().output().set_value("led_status_ptr_valid", m_pointer_valid = true);
|
||||
}
|
||||
}
|
||||
if (!m_panel_reset && !m_adr_cmp_latch)
|
||||
m_adr_cmp_latch = (m_latched_addr == m_display_addr) && !((m_pass_counter ^ m_sw_passes->read()) & 0x0fU);
|
||||
if (!m_search_complete && !m_panel_reset && !m_cma_enable && !m_sw_run && (m_latched_addr == m_display_addr))
|
||||
m_pass_counter = (m_pass_counter + 1U) & 0x0fU;
|
||||
if (m_adr_cmp_latch && !m_next_inst && !m_search_complete)
|
||||
machine().output().set_value("led_status_search", m_search_complete = true);
|
||||
if (!m_cpu_reset && !m_cma_enable && !m_sw_run)
|
||||
m_panel_reset = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(intellec4_40_state::stp_ack)
|
||||
{
|
||||
// resets the single-step monostable
|
||||
@ -287,7 +408,8 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_mon)
|
||||
if (!m_ff_mon)
|
||||
{
|
||||
m_program_banks->set_bank(BANK_PRG_MON);
|
||||
m_io_banks->set_bank(BANK_IO_MON);
|
||||
m_rom_port_banks->set_bank(BANK_IO_MON);
|
||||
m_ram_port_banks->set_bank(BANK_IO_MON);
|
||||
machine().output().set_value("led_mode_mon", m_ff_mon = true);
|
||||
}
|
||||
trigger_reset();
|
||||
@ -295,7 +417,8 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_mon)
|
||||
else
|
||||
{
|
||||
m_program_banks->set_bank(BANK_PRG_NONE);
|
||||
m_io_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_rom_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_ram_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
}
|
||||
if (m_ff_ram)
|
||||
machine().output().set_value("led_mode_ram", m_ff_ram = false);
|
||||
@ -314,7 +437,8 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_ram)
|
||||
if (!m_ff_ram)
|
||||
{
|
||||
m_program_banks->set_bank(BANK_PRG_RAM);
|
||||
m_io_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_rom_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_ram_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
machine().output().set_value("led_mode_ram", m_ff_ram = true);
|
||||
}
|
||||
trigger_reset();
|
||||
@ -322,7 +446,8 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_ram)
|
||||
else
|
||||
{
|
||||
m_program_banks->set_bank(BANK_PRG_NONE);
|
||||
m_io_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_rom_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_ram_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
}
|
||||
if (m_ff_mon)
|
||||
machine().output().set_value("led_mode_mon", m_ff_mon = false);
|
||||
@ -341,7 +466,8 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_prom)
|
||||
if (!m_ff_prom)
|
||||
{
|
||||
m_program_banks->set_bank(BANK_PRG_PROM);
|
||||
m_io_banks->set_bank(BANK_IO_PROM);
|
||||
m_rom_port_banks->set_bank(BANK_IO_PROM);
|
||||
m_ram_port_banks->set_bank(BANK_IO_PROM);
|
||||
machine().output().set_value("led_mode_prom", m_ff_prom = true);
|
||||
}
|
||||
trigger_reset();
|
||||
@ -349,7 +475,8 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_prom)
|
||||
else
|
||||
{
|
||||
m_program_banks->set_bank(BANK_PRG_NONE);
|
||||
m_io_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_rom_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
m_ram_port_banks->set_bank(BANK_IO_NEITHER);
|
||||
}
|
||||
if (m_ff_mon)
|
||||
machine().output().set_value("led_mode_mon", m_ff_mon = false);
|
||||
@ -359,6 +486,61 @@ INPUT_CHANGED_MEMBER(intellec4_40_state::sw_prom)
|
||||
m_sw_prom = !bool(newval);
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_run)
|
||||
{
|
||||
m_sw_run = !bool(newval);
|
||||
if (m_sw_run)
|
||||
reset_panel();
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_next_inst)
|
||||
{
|
||||
m_next_inst = !bool(newval);
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_decr)
|
||||
{
|
||||
// connected to a pulse generator circuit
|
||||
if (newval && !oldval)
|
||||
{
|
||||
m_latched_addr = (m_latched_addr - 1U) & 0x0fffU;
|
||||
reset_panel();
|
||||
}
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_incr)
|
||||
{
|
||||
// connected to a pulse generator circuit
|
||||
if (newval && !oldval)
|
||||
{
|
||||
m_latched_addr = (m_latched_addr + 1U) & 0x0fffU;
|
||||
reset_panel();
|
||||
}
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_load)
|
||||
{
|
||||
// connected to a pulse generator circuit
|
||||
if (newval && !oldval)
|
||||
{
|
||||
m_latched_addr = ~m_sw_addr_data->read() & 0x0fffU;
|
||||
reset_panel();
|
||||
}
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_cma_enable)
|
||||
{
|
||||
m_cma_enable = bool(newval);
|
||||
if (m_cma_enable)
|
||||
reset_panel();
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(intellec4_40_state::sw_cma_write)
|
||||
{
|
||||
if (newval && !oldval)
|
||||
m_cma_write = m_cma_enable;
|
||||
}
|
||||
|
||||
|
||||
void intellec4_40_state::driver_start()
|
||||
{
|
||||
@ -371,10 +553,27 @@ void intellec4_40_state::driver_start()
|
||||
|
||||
save_item(NAME(m_stp_ack));
|
||||
save_item(NAME(m_single_step));
|
||||
save_item(NAME(m_cpu_reset));
|
||||
save_item(NAME(m_ff_mon));
|
||||
save_item(NAME(m_ff_ram));
|
||||
save_item(NAME(m_ff_prom));
|
||||
|
||||
save_item(NAME(m_latched_addr));
|
||||
save_item(NAME(m_display_addr));
|
||||
save_item(NAME(m_display_instr));
|
||||
save_item(NAME(m_display_bank));
|
||||
save_item(NAME(m_display_exec));
|
||||
save_item(NAME(m_display_ptr));
|
||||
save_item(NAME(m_pass_counter));
|
||||
save_item(NAME(m_next_inst));
|
||||
save_item(NAME(m_panel_reset));
|
||||
save_item(NAME(m_adr_cmp_latch));
|
||||
save_item(NAME(m_search_complete));
|
||||
save_item(NAME(m_src));
|
||||
save_item(NAME(m_pointer_valid));
|
||||
save_item(NAME(m_cma_enable));
|
||||
save_item(NAME(m_cma_write));
|
||||
|
||||
save_item(NAME(m_bus_stop));
|
||||
save_item(NAME(m_bus_reset_4002));
|
||||
save_item(NAME(m_bus_user_reset));
|
||||
@ -383,6 +582,7 @@ void intellec4_40_state::driver_start()
|
||||
save_item(NAME(m_sw_reset));
|
||||
save_item(NAME(m_sw_mon));
|
||||
save_item(NAME(m_sw_ram));
|
||||
save_item(NAME(m_sw_run));
|
||||
|
||||
m_stp_ack = m_single_step = false;
|
||||
m_ff_mon = true;
|
||||
@ -392,15 +592,26 @@ void intellec4_40_state::driver_start()
|
||||
void intellec4_40_state::driver_reset()
|
||||
{
|
||||
// set stuff according to initial state of front panel
|
||||
ioport_value const sw_mode(m_sw_mode->read());
|
||||
m_sw_stop = BIT(~sw_mode, BIT_SW_STOP);
|
||||
m_sw_reset = BIT(~sw_mode, BIT_SW_RESET);
|
||||
m_sw_mon = BIT(~sw_mode, BIT_SW_MON);
|
||||
m_sw_ram = BIT(~sw_mode, BIT_SW_RAM);
|
||||
m_sw_prom = BIT(~sw_mode, BIT_SW_PROM);
|
||||
ioport_value const sw_mode(m_sw_mode->read()), sw_control(m_sw_control->read());
|
||||
m_sw_stop = BIT(~sw_mode, BIT_SW_STOP);
|
||||
m_sw_reset = BIT(~sw_mode, BIT_SW_RESET);
|
||||
m_sw_mon = BIT(~sw_mode, BIT_SW_MON);
|
||||
m_sw_ram = BIT(~sw_mode, BIT_SW_RAM);
|
||||
m_sw_prom = BIT(~sw_mode, BIT_SW_PROM);
|
||||
m_sw_run = BIT(~sw_control, BIT_SW_RUN);
|
||||
m_next_inst = BIT(~sw_control, BIT_SW_NEXT_INST);
|
||||
m_cma_enable = BIT( sw_control, BIT_SW_CMA_ENABLE);
|
||||
m_ff_mon = m_ff_mon && !m_sw_ram && !m_sw_prom;
|
||||
m_ff_ram = m_ff_ram && !m_sw_mon && !m_sw_prom;
|
||||
m_ff_prom = m_ff_prom && !m_sw_mon && !m_sw_ram;
|
||||
m_panel_reset = m_panel_reset || m_cma_enable || m_sw_run;
|
||||
if (m_panel_reset)
|
||||
{
|
||||
m_pass_counter = 0U;
|
||||
m_adr_cmp_latch = false;
|
||||
m_search_complete = m_search_complete && m_next_inst;
|
||||
m_pointer_valid = false;
|
||||
}
|
||||
|
||||
// ensure we're consistent with the state of the bus
|
||||
m_bus_stop = 0 == m_bus->stop_out();
|
||||
@ -408,16 +619,20 @@ void intellec4_40_state::driver_reset()
|
||||
m_bus_user_reset = 0 == m_bus->user_reset_out();
|
||||
|
||||
// ensure device inputs are all in the correct state
|
||||
m_cpu->set_input_line(INPUT_LINE_RESET, m_cpu_reset ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_cpu->set_input_line(I4040_TEST_LINE, m_bus->test_out() ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_cpu->set_input_line(I4040_STP_LINE, ((m_sw_stop && !m_single_step) || m_bus_stop) ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_bus->test_in(1);
|
||||
m_bus->stop_in((m_sw_stop && !m_single_step) ? 0 : 1);
|
||||
m_bus->cpu_reset_in(m_cpu_reset ? 0 : 1);
|
||||
|
||||
// set front panel LEDs
|
||||
machine().output().set_value("led_status_run", !m_stp_ack);
|
||||
machine().output().set_value("led_mode_mon", m_ff_mon);
|
||||
machine().output().set_value("led_mode_ram", m_ff_ram);
|
||||
machine().output().set_value("led_mode_prom", m_ff_prom);
|
||||
machine().output().set_value("led_status_ptr_valid", m_pointer_valid);
|
||||
machine().output().set_value("led_status_run", !m_stp_ack);
|
||||
machine().output().set_value("led_status_search", m_search_complete);
|
||||
machine().output().set_value("led_mode_mon", m_ff_mon);
|
||||
machine().output().set_value("led_mode_ram", m_ff_ram);
|
||||
machine().output().set_value("led_mode_prom", m_ff_prom);
|
||||
}
|
||||
|
||||
|
||||
@ -434,9 +649,13 @@ TIMER_CALLBACK_MEMBER(intellec4_40_state::single_step_expired)
|
||||
|
||||
TIMER_CALLBACK_MEMBER(intellec4_40_state::reset_expired)
|
||||
{
|
||||
m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
|
||||
m_bus->cpu_reset_in(1);
|
||||
// FIXME: can cause 4002 reset as well
|
||||
if (m_cpu_reset)
|
||||
{
|
||||
m_cpu_reset = false;
|
||||
m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
|
||||
m_bus->cpu_reset_in(1);
|
||||
// FIXME: can cause 4002 reset as well
|
||||
}
|
||||
}
|
||||
|
||||
void intellec4_40_state::trigger_reset()
|
||||
@ -447,14 +666,143 @@ void intellec4_40_state::trigger_reset()
|
||||
// 9602 with Rx = 27kΩ, Cx = 0.1µF
|
||||
// K * Rx(kΩ) * Cx(pF) * (1 + (1 / Rx(kΩ))) = 0.34 * 27 * 100000 * (1 + (1 / 27)) = 952000ns
|
||||
m_reset_timer->adjust(attotime::from_usec(952));
|
||||
m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
m_bus->cpu_reset_in(0);
|
||||
// FIXME: can cause 4002 reset as well
|
||||
if (!m_cpu_reset)
|
||||
{
|
||||
m_cpu_reset = true;
|
||||
m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
m_bus->cpu_reset_in(0);
|
||||
reset_panel();
|
||||
// FIXME: can cause 4002 reset as well
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void intellec4_40_state::reset_panel()
|
||||
{
|
||||
if (!m_panel_reset)
|
||||
{
|
||||
m_pass_counter = 0U;
|
||||
m_panel_reset = true;
|
||||
m_adr_cmp_latch = false;
|
||||
if (m_search_complete && !m_next_inst)
|
||||
machine().output().set_value("led_status_search", m_search_complete = false);
|
||||
if (m_pointer_valid)
|
||||
machine().output().set_value("led_status_ptr_valid", m_pointer_valid = false);
|
||||
}
|
||||
}
|
||||
|
||||
ADDRESS_MAP_START(mod40_program_banks, AS_OPCODES, 8, intellec4_40_state)
|
||||
void intellec4_40_state::display_address(u16 value, u16 mask)
|
||||
{
|
||||
u16 const diff((value ^ m_display_addr) & mask);
|
||||
m_display_addr ^= diff;
|
||||
if (BIT(diff, 0))
|
||||
machine().output().set_value("led_address_a1_0", BIT(value, 0));
|
||||
if (BIT(diff, 1))
|
||||
machine().output().set_value("led_address_a1_1", BIT(value, 1));
|
||||
if (BIT(diff, 2))
|
||||
machine().output().set_value("led_address_a1_2", BIT(value, 2));
|
||||
if (BIT(diff, 3))
|
||||
machine().output().set_value("led_address_a1_3", BIT(value, 3));
|
||||
if (BIT(diff, 4))
|
||||
machine().output().set_value("led_address_a2_0", BIT(value, 4));
|
||||
if (BIT(diff, 5))
|
||||
machine().output().set_value("led_address_a2_1", BIT(value, 5));
|
||||
if (BIT(diff, 6))
|
||||
machine().output().set_value("led_address_a2_2", BIT(value, 6));
|
||||
if (BIT(diff, 7))
|
||||
machine().output().set_value("led_address_a2_3", BIT(value, 7));
|
||||
if (BIT(diff, 8))
|
||||
machine().output().set_value("led_address_a3_0", BIT(value, 8));
|
||||
if (BIT(diff, 9))
|
||||
machine().output().set_value("led_address_a3_1", BIT(value, 9));
|
||||
if (BIT(diff, 10))
|
||||
machine().output().set_value("led_address_a3_2", BIT(value, 10));
|
||||
if (BIT(diff, 11))
|
||||
machine().output().set_value("led_address_a3_3", BIT(value, 11));
|
||||
}
|
||||
|
||||
void intellec4_40_state::display_instruction(u8 value, u8 mask)
|
||||
{
|
||||
u16 const diff((value ^ m_display_instr) & mask);
|
||||
m_display_instr ^= diff;
|
||||
if (BIT(diff, 0))
|
||||
machine().output().set_value("led_instruction_m2_0", BIT(value, 0));
|
||||
if (BIT(diff, 1))
|
||||
machine().output().set_value("led_instruction_m2_1", BIT(value, 1));
|
||||
if (BIT(diff, 2))
|
||||
machine().output().set_value("led_instruction_m2_2", BIT(value, 2));
|
||||
if (BIT(diff, 3))
|
||||
machine().output().set_value("led_instruction_m2_3", BIT(value, 3));
|
||||
if (BIT(diff, 4))
|
||||
machine().output().set_value("led_instruction_m1_0", BIT(value, 4));
|
||||
if (BIT(diff, 5))
|
||||
machine().output().set_value("led_instruction_m1_1", BIT(value, 5));
|
||||
if (BIT(diff, 6))
|
||||
machine().output().set_value("led_instruction_m1_2", BIT(value, 6));
|
||||
if (BIT(diff, 7))
|
||||
machine().output().set_value("led_instruction_m1_3", BIT(value, 7));
|
||||
}
|
||||
|
||||
void intellec4_40_state::display_active_bank(u8 value)
|
||||
{
|
||||
u8 const diff((value ^ m_display_bank) & 0x0fU);
|
||||
m_display_bank ^= diff;
|
||||
if (BIT(diff, 0))
|
||||
machine().output().set_value("led_active_bank_0", BIT(value, 0));
|
||||
if (BIT(diff, 1))
|
||||
machine().output().set_value("led_active_bank_1", BIT(value, 1));
|
||||
if (BIT(diff, 2))
|
||||
machine().output().set_value("led_active_bank_2", BIT(value, 2));
|
||||
if (BIT(diff, 3))
|
||||
machine().output().set_value("led_active_bank_3", BIT(value, 3));
|
||||
}
|
||||
|
||||
void intellec4_40_state::display_execution(u8 value, u8 mask)
|
||||
{
|
||||
u16 const diff((value ^ m_display_exec) & mask);
|
||||
m_display_exec ^= diff;
|
||||
if (BIT(diff, 0))
|
||||
machine().output().set_value("led_execution_x3_0", BIT(value, 0));
|
||||
if (BIT(diff, 1))
|
||||
machine().output().set_value("led_execution_x3_1", BIT(value, 1));
|
||||
if (BIT(diff, 2))
|
||||
machine().output().set_value("led_execution_x3_2", BIT(value, 2));
|
||||
if (BIT(diff, 3))
|
||||
machine().output().set_value("led_execution_x3_3", BIT(value, 3));
|
||||
if (BIT(diff, 4))
|
||||
machine().output().set_value("led_execution_x2_0", BIT(value, 4));
|
||||
if (BIT(diff, 5))
|
||||
machine().output().set_value("led_execution_x2_1", BIT(value, 5));
|
||||
if (BIT(diff, 6))
|
||||
machine().output().set_value("led_execution_x2_2", BIT(value, 6));
|
||||
if (BIT(diff, 7))
|
||||
machine().output().set_value("led_execution_x2_3", BIT(value, 7));
|
||||
}
|
||||
|
||||
void intellec4_40_state::display_pointer(u8 value, u8 mask)
|
||||
{
|
||||
u16 const diff((value ^ m_display_ptr) & mask);
|
||||
m_display_ptr ^= diff;
|
||||
if (BIT(diff, 0))
|
||||
machine().output().set_value("led_last_ptr_x3_0", BIT(value, 0));
|
||||
if (BIT(diff, 1))
|
||||
machine().output().set_value("led_last_ptr_x3_1", BIT(value, 1));
|
||||
if (BIT(diff, 2))
|
||||
machine().output().set_value("led_last_ptr_x3_2", BIT(value, 2));
|
||||
if (BIT(diff, 3))
|
||||
machine().output().set_value("led_last_ptr_x3_3", BIT(value, 3));
|
||||
if (BIT(diff, 4))
|
||||
machine().output().set_value("led_last_ptr_x2_0", BIT(value, 4));
|
||||
if (BIT(diff, 5))
|
||||
machine().output().set_value("led_last_ptr_x2_1", BIT(value, 5));
|
||||
if (BIT(diff, 6))
|
||||
machine().output().set_value("led_last_ptr_x2_2", BIT(value, 6));
|
||||
if (BIT(diff, 7))
|
||||
machine().output().set_value("led_last_ptr_x2_3", BIT(value, 7));
|
||||
}
|
||||
|
||||
|
||||
ADDRESS_MAP_START(mod40_program_banks, mcs40_cpu_device_base::AS_ROM, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
|
||||
// 0x0000...0x0fff MON
|
||||
@ -468,57 +816,73 @@ ADDRESS_MAP_START(mod40_program_banks, AS_OPCODES, 8, intellec4_40_state)
|
||||
// 0x3000...0x3fff unmapped in case someone presses two mode switches at once
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(mod40_io_banks, AS_PROGRAM, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_START(mod40_rom_port_banks, mcs40_cpu_device_base::AS_ROM_PORTS, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
|
||||
// 0x0000...0x0fff ROM ports - MON
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x6700) AM_READ(rom0_in)
|
||||
AM_RANGE(0x00e0, 0x00ef) AM_MIRROR(0x6700) AM_READWRITE(rome_in, rome_out)
|
||||
AM_RANGE(0x00f0, 0x00ff) AM_MIRROR(0x6700) AM_READWRITE(romf_in, romf_out)
|
||||
// 0x0000...0x0fff MON
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x3700) AM_READ(rom0_in)
|
||||
AM_RANGE(0x00e0, 0x00ef) AM_MIRROR(0x3700) AM_READWRITE(rome_in, rome_out)
|
||||
AM_RANGE(0x00f0, 0x00ff) AM_MIRROR(0x3700) AM_READWRITE(romf_in, romf_out)
|
||||
|
||||
// 0x1000...0x1fff RAM ports - MON
|
||||
AM_RANGE(0x1000, 0x103f) AM_MIRROR(0x6800) AM_WRITE(ram0_out)
|
||||
AM_RANGE(0x1040, 0x107f) AM_MIRROR(0x6800) AM_WRITE(ram1_out)
|
||||
// 0x1000...0x1fff neither
|
||||
|
||||
// 0x2000...0x2fff ROM ports - neither
|
||||
// 0x2000...0x2fff PROM
|
||||
|
||||
// 0x3000...0x3fff RAM ports - neither
|
||||
// 0x3000...0x3fff unused
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// 0x4000...0x4fff ROM ports - PROM
|
||||
ADDRESS_MAP_START(mod40_ram_port_banks, mcs40_cpu_device_base::AS_RAM_PORTS, 8, intellec4_40_state)
|
||||
// 0x00...0x1f MON
|
||||
AM_RANGE(0x00, 0x00) AM_MIRROR(0x60) AM_WRITE(ram0_out)
|
||||
AM_RANGE(0x00, 0x01) AM_MIRROR(0x60) AM_WRITE(ram1_out)
|
||||
|
||||
// 0x5000...0x5fff RAM ports - PROM
|
||||
// 0x20...0x3f neither
|
||||
|
||||
// 0x6000...0x7fff unused
|
||||
// 0x40...0x5f PROM
|
||||
|
||||
// 0x60...0x7f unused
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
ADDRESS_MAP_START(mod40_program, AS_PROGRAM, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_START(mod40_rom, mcs40_cpu_device_base::AS_ROM, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
AM_RANGE(0x0000, 0x01ff) AM_READWRITE(pm_read, pm_write)
|
||||
AM_RANGE(0x0000, 0x0fff) AM_DEVICE("prgbank", address_map_bank_device, amap8)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(mod40_data, AS_DATA, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_START(mod40_ram_memory, mcs40_cpu_device_base::AS_RAM_MEMORY, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
AM_RANGE(0x0000, 0x00ff) AM_RAM // 4 * 4002
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(mod40_io, AS_IO, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_START(mod40_rom_ports, mcs40_cpu_device_base::AS_ROM_PORTS, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
AM_RANGE(0x0000, 0x1fff) AM_DEVICE("iobank", address_map_bank_device, amap8)
|
||||
AM_RANGE(0x0000, 0x0fff) AM_DEVICE("rpbank", address_map_bank_device, amap8)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(mod40_opcodes, AS_OPCODES, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_START(mod40_ram_status, mcs40_cpu_device_base::AS_RAM_STATUS, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
AM_RANGE(0x0000, 0x0fff) AM_DEVICE("prgbank", address_map_bank_device, amap8)
|
||||
AM_RANGE(0x0000, 0x003f) AM_RAM // 4 * 4002
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(mod40_ram_ports, mcs40_cpu_device_base::AS_RAM_PORTS, 8, intellec4_40_state)
|
||||
AM_RANGE(0x00, 0x1f) AM_DEVICE("mpbank", address_map_bank_device, amap8)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(mod40_program_memory, mcs40_cpu_device_base::AS_PROGRAM_MEMORY, 8, intellec4_40_state)
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
AM_RANGE(0x0000, 0x01ff) AM_READWRITE(pm_read, pm_write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
MACHINE_CONFIG_START(intlc440)
|
||||
MCFG_CPU_ADD("maincpu", I4040, 5185000. / 7)
|
||||
MCFG_CPU_PROGRAM_MAP(mod40_program)
|
||||
MCFG_CPU_DATA_MAP(mod40_data)
|
||||
MCFG_CPU_IO_MAP(mod40_io)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(mod40_opcodes)
|
||||
MCFG_I4040_ROM_MAP(mod40_rom)
|
||||
MCFG_I4040_RAM_MEMORY_MAP(mod40_ram_memory)
|
||||
MCFG_I4040_ROM_PORTS_MAP(mod40_rom_ports)
|
||||
MCFG_I4040_RAM_STATUS_MAP(mod40_ram_status)
|
||||
MCFG_I4040_RAM_PORTS_MAP(mod40_ram_ports)
|
||||
MCFG_I4040_PROGRAM_MEMORY_MAP(mod40_program_memory)
|
||||
MCFG_I4040_BUS_CYCLE_CB(FUNC(intellec4_40_state, bus_cycle));
|
||||
MCFG_I4040_SYNC_CB(DEVWRITELINE("bus", bus::intellec4::univ_bus_device, sync_in))
|
||||
MCFG_I4040_STP_ACK_CB(WRITELINE(intellec4_40_state, stp_ack))
|
||||
|
||||
@ -529,12 +893,19 @@ MACHINE_CONFIG_START(intlc440)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
|
||||
|
||||
MCFG_DEVICE_ADD("iobank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(mod40_io_banks)
|
||||
MCFG_DEVICE_ADD("rpbank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(mod40_rom_port_banks)
|
||||
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
|
||||
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(15)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
|
||||
|
||||
MCFG_DEVICE_ADD("mpbank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(mod40_ram_port_banks)
|
||||
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
|
||||
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(7)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x20)
|
||||
|
||||
MCFG_RS232_PORT_ADD("tty", default_rs232_devices, "terminal")
|
||||
|
||||
@ -556,17 +927,48 @@ MACHINE_CONFIG_START(intlc440)
|
||||
MCFG_INTELLEC4_UNIV_SLOT_ADD("bus", "j17", 518000. / 7, intellec4_univ_cards, nullptr)
|
||||
MCFG_INTELLEC4_UNIV_SLOT_ADD("bus", "j18", 518000. / 7, intellec4_univ_cards, nullptr)
|
||||
MCFG_INTELLEC4_UNIV_SLOT_ADD("bus", "j19", 518000. / 7, intellec4_univ_cards, nullptr)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_intlc440)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
INPUT_PORTS_START(intlc440)
|
||||
PORT_START("MODE")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_TOGGLE PORT_NAME("STOP") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_stop, 0)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("SINGLE STEP") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_single_step, 0)
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("RESET") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_reset, 0)
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("MON") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_mon, 0)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("RAM") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_ram, 0)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("PROM") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_prom, 0)
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("STOP") PORT_CODE(KEYCODE_LEFT) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_stop, 0)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("SINGLE STEP") PORT_CODE(KEYCODE_RIGHT) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_single_step, 0)
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RESET") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_reset, 0)
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("MON") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_mon, 0)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RAM") PORT_CODE(KEYCODE_2_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_ram, 0)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("PROM") PORT_CODE(KEYCODE_3_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_prom, 0)
|
||||
|
||||
PORT_START("CONTROL")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("RUN") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_run, 0)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("NEXT INST") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_next_inst, 0)
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("DECR") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_decr, 0)
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("INCR") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_incr, 0)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("LOAD") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_load, 0)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("CMA ENABLE") PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_cma_enable, 0)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("CMA WRITE") PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, intellec4_40_state, sw_cma_write, 0)
|
||||
|
||||
PORT_START("ADDRDAT")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 0")
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 1")
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 2")
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 3")
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 4")
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 5")
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 6")
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 7")
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 8")
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 9")
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 10")
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("ADDRESS/DATA 11")
|
||||
|
||||
PORT_START("PASSES")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("PASSES 0")
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("PASSES 1")
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("PASSES 2")
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_TOGGLE PORT_NAME("PASSES 3")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -588,4 +990,4 @@ ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
|
||||
COMP( 1974?, intlc440, 0, 0, intlc440, intlc440, intellec4_40_state, 0, "Intel", "INTELLEC 4/MOD40", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1974?, intlc440, 0, 0, intlc440, intlc440, intellec4_40_state, 0, "Intel", "INTELLEC 4/MOD40", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_CLICKABLE_ARTWORK | MACHINE_SUPPORTS_SAVE )
|
||||
|
865
src/mame/layout/intlc440.lay
Normal file
865
src/mame/layout/intlc440.lay
Normal file
@ -0,0 +1,865 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0
|
||||
copyright-holders:Vas Crabb
|
||||
Intel INTELLEC® 4/MOD 40 layout
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
<element name="background">
|
||||
<rect><color red="0.20" green="0.16" blue="0.31" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="led" defstate="0">
|
||||
<rect state="0"><color red="0.43" green="0.35" blue="0.39" /></rect>
|
||||
<rect state="1"><color red="1.0" green="0.18" blue="0.20" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="switch" defstate="0">
|
||||
<rect state="0">
|
||||
<color red="1.0" green="0.97" blue="0.87" />
|
||||
<bounds left="0.0" top="0.0" right="1.0" bottom="0.15" />
|
||||
</rect>
|
||||
<rect state="0">
|
||||
<color red="0.88" green="0.83" blue="0.66" />
|
||||
<bounds left="0.0" top="0.15" right="1.0" bottom="0.5" />
|
||||
</rect>
|
||||
<rect state="0">
|
||||
<color red="0.94" green="0.90" blue="0.75" />
|
||||
<bounds left="0.0" top="0.5" right="1.0" bottom="1.0" />
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<color red="0.94" green="0.90" blue="0.75" />
|
||||
<bounds left="0.0" top="0.0" right="1.0" bottom="0.5" />
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<color red="1.0" green="0.97" blue="0.87" />
|
||||
<bounds left="0.0" top="0.5" right="1.0" bottom="0.9" />
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<color red="0.76" green="0.70" blue="0.47" />
|
||||
<bounds left="0.0" top="0.9" right="1.0" bottom="1.0" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="label_0"><text string="0"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_1"><text string="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_2"><text string="2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_3"><text string="3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_4"><text string="4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_5"><text string="5"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_6"><text string="6"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_7"><text string="7"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_8"><text string="8"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_9"><text string="9"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_10"><text string="10"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_11"><text string="11"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_a1"><text string="A1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_a2"><text string="A2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_a3"><text string="A3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_m1"><text string="M1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_m2"><text string="M2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_x2"><text string="X2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_x3"><text string="X3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_search"><text string="SEARCH"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_complete"><text string="COMPLETE"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_pointer"><text string="POINTER"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_valid"><text string="VALID"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_cm_ram"><text string="CM-RAM"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_mon"><text string="MON"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_ram"><text string="RAM"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_prom"><text string="PROM"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
|
||||
<element name="label_passes"><text string="PASSES"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_run"><text string="RUN"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_next"><text string="NEXT"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_inst"><text string="INST"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_decr"><text string="DECR"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_incr"><text string="INCR"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_load"><text string="LOAD"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_stop"><text string="STOP"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_single"><text string="SINGLE"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="label_step"><text string="STEP"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_write"><text string="WRITE"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_reset"><text string="RESET"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<element name="label_address">
|
||||
<text string="ADDRESS" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_status">
|
||||
<text string="STATUS" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_instruction">
|
||||
<text string="INSTRUCTION" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_active_bank">
|
||||
<text string="ACTIVE BANK" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_mode">
|
||||
<text string="MODE" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_execution">
|
||||
<text string="EXECUTION" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_last_ptr">
|
||||
<text string="LAST RAM/ROM POINTER" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
|
||||
<element name="label_enable">
|
||||
<text string="ENABLE" align="2"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_disable">
|
||||
<text string="DISABLE" align="2"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
|
||||
<element name="label_addr_data">
|
||||
<text string="ADDRESS/DATA" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_mode_ctrl">
|
||||
<text string="MODE CONTROL" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_pass_counter">
|
||||
<text string="PASS COUNTER" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_search_ctrl">
|
||||
<text string="SEARCH ADDRESS CONTROL" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_cma">
|
||||
<text string="CMA" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
<element name="label_reset_ctrl">
|
||||
<text string="RESET CONTROL" align="1"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
</element>
|
||||
|
||||
<view name="Terminal Below">
|
||||
<cpanel element="background"><bounds left="0" top="0" right="1000" bottom="400" /></cpanel>
|
||||
|
||||
<cpanel element="label_address"><bounds left="72" top="55" right="506" bottom="63" /></cpanel>
|
||||
<cpanel element="label_a3"><bounds left="81" top="63" right="185" bottom="70" /></cpanel>
|
||||
<cpanel element="label_a2"><bounds left="237" top="63" right="341" bottom="70" /></cpanel>
|
||||
<cpanel element="label_a1"><bounds left="393" top="63" right="497" bottom="70" /></cpanel>
|
||||
<cpanel element="label_11"><bounds left="81" top="71" right="92" bottom="78" /></cpanel>
|
||||
<cpanel element="label_10"><bounds left="112" top="71" right="123" bottom="78" /></cpanel>
|
||||
<cpanel element="label_9"><bounds left="143" top="71" right="154" bottom="78" /></cpanel>
|
||||
<cpanel element="label_8"><bounds left="174" top="71" right="185" bottom="78" /></cpanel>
|
||||
<cpanel element="label_7"><bounds left="237" top="71" right="248" bottom="78" /></cpanel>
|
||||
<cpanel element="label_6"><bounds left="268" top="71" right="279" bottom="78" /></cpanel>
|
||||
<cpanel element="label_5"><bounds left="299" top="71" right="310" bottom="78" /></cpanel>
|
||||
<cpanel element="label_4"><bounds left="330" top="71" right="341" bottom="78" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="393" top="71" right="404" bottom="78" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="424" top="71" right="435" bottom="78" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="455" top="71" right="466" bottom="78" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="486" top="71" right="497" bottom="78" /></cpanel>
|
||||
|
||||
<cpanel element="label_status"><bounds left="540" top="55" right="662" bottom="63" /></cpanel>
|
||||
<cpanel element="label_search"><bounds left="561" top="63" right="610" bottom="70" /></cpanel>
|
||||
<cpanel element="label_complete"><bounds left="561" top="71" right="610" bottom="78" /></cpanel>
|
||||
<cpanel element="label_pointer"><bounds left="623" top="63" right="672" bottom="70" /></cpanel>
|
||||
<cpanel element="label_valid"><bounds left="623" top="71" right="672" bottom="78" /></cpanel>
|
||||
<cpanel element="label_run"><bounds left="611" top="71" right="626" bottom="78" /></cpanel>
|
||||
|
||||
<cpanel element="label_instruction"><bounds left="72" top="104" right="350" bottom="112" /></cpanel>
|
||||
<cpanel element="label_m1"><bounds left="81" top="112" right="185" bottom="119" /></cpanel>
|
||||
<cpanel element="label_m2"><bounds left="237" top="112" right="341" bottom="119" /></cpanel>
|
||||
<cpanel element="label_7"><bounds left="81" top="120" right="92" bottom="127" /></cpanel>
|
||||
<cpanel element="label_6"><bounds left="112" top="120" right="123" bottom="127" /></cpanel>
|
||||
<cpanel element="label_5"><bounds left="143" top="120" right="154" bottom="127" /></cpanel>
|
||||
<cpanel element="label_4"><bounds left="174" top="120" right="185" bottom="127" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="237" top="120" right="248" bottom="127" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="268" top="120" right="279" bottom="127" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="299" top="120" right="310" bottom="127" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="330" top="120" right="341" bottom="127" /></cpanel>
|
||||
|
||||
<cpanel element="label_active_bank"><bounds left="384" top="104" right="506" bottom="112" /></cpanel>
|
||||
<cpanel element="label_cm_ram"><bounds left="393" top="112" right="497" bottom="119" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="393" top="120" right="404" bottom="127" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="424" top="120" right="435" bottom="127" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="455" top="120" right="466" bottom="127" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="486" top="120" right="497" bottom="127" /></cpanel>
|
||||
|
||||
<cpanel element="label_mode"><bounds left="540" top="104" right="662" bottom="112" /></cpanel>
|
||||
<cpanel element="label_mon"><bounds left="577" top="120" right="594" bottom="127" /></cpanel>
|
||||
<cpanel element="label_ram"><bounds left="608" top="120" right="625" bottom="127" /></cpanel>
|
||||
<cpanel element="label_prom"><bounds left="639" top="120" right="656" bottom="127" /></cpanel>
|
||||
|
||||
<cpanel element="label_execution"><bounds left="72" top="153" right="350" bottom="161" /></cpanel>
|
||||
<cpanel element="label_x2"><bounds left="81" top="161" right="185" bottom="168" /></cpanel>
|
||||
<cpanel element="label_x3"><bounds left="237" top="161" right="341" bottom="168" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="81" top="169" right="92" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="112" top="169" right="123" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="143" top="169" right="154" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="174" top="169" right="185" bottom="176" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="237" top="169" right="248" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="268" top="169" right="279" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="299" top="169" right="310" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="330" top="169" right="341" bottom="176" /></cpanel>
|
||||
|
||||
<cpanel element="label_last_ptr"><bounds left="384" top="153" right="662" bottom="161" /></cpanel>
|
||||
<cpanel element="label_x2"><bounds left="393" top="161" right="497" bottom="168" /></cpanel>
|
||||
<cpanel element="label_x3"><bounds left="549" top="161" right="653" bottom="168" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="393" top="169" right="404" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="424" top="169" right="435" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="455" top="169" right="466" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="486" top="169" right="497" bottom="176" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="549" top="169" right="560" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="580" top="169" right="591" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="611" top="169" right="622" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="642" top="169" right="653" bottom="176" /></cpanel>
|
||||
|
||||
<cpanel element="label_addr_data"><bounds left="72" top="214" right="506" bottom="222" /></cpanel>
|
||||
<cpanel element="label_11"><bounds left="74" top="230" right="99" bottom="237" /></cpanel>
|
||||
<cpanel element="label_10"><bounds left="105" top="230" right="130" bottom="237" /></cpanel>
|
||||
<cpanel element="label_9"><bounds left="136" top="230" right="161" bottom="237" /></cpanel>
|
||||
<cpanel element="label_8"><bounds left="167" top="230" right="192" bottom="237" /></cpanel>
|
||||
<cpanel element="label_7"><bounds left="230" top="230" right="255" bottom="237" /></cpanel>
|
||||
<cpanel element="label_6"><bounds left="261" top="230" right="286" bottom="237" /></cpanel>
|
||||
<cpanel element="label_5"><bounds left="292" top="230" right="317" bottom="237" /></cpanel>
|
||||
<cpanel element="label_4"><bounds left="323" top="230" right="348" bottom="237" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="386" top="230" right="411" bottom="237" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="417" top="230" right="442" bottom="237" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="448" top="230" right="473" bottom="237" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="479" top="230" right="504" bottom="237" /></cpanel>
|
||||
|
||||
<cpanel element="label_mode_ctrl"><bounds left="571" top="214" right="662" bottom="222" /></cpanel>
|
||||
<cpanel element="label_mon"><bounds left="573" top="230" right="598" bottom="237" /></cpanel>
|
||||
<cpanel element="label_ram"><bounds left="604" top="230" right="629" bottom="237" /></cpanel>
|
||||
<cpanel element="label_prom"><bounds left="635" top="230" right="660" bottom="237" /></cpanel>
|
||||
|
||||
<cpanel element="label_pass_counter"><bounds left="72" top="296" right="194" bottom="304" /></cpanel>
|
||||
<cpanel element="label_passes"><bounds left="74" top="304" right="192" bottom="311" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="74" top="312" right="99" bottom="319" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="105" top="312" right="130" bottom="319" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="136" top="312" right="161" bottom="319" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="167" top="312" right="192" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel element="label_search_ctrl"><bounds left="228" top="296" right="381" bottom="304" /></cpanel>
|
||||
<cpanel element="label_run"><bounds left="230" top="312" right="255" bottom="319" /></cpanel>
|
||||
<cpanel element="label_next"><bounds left="261" top="304" right="286" bottom="311" /></cpanel>
|
||||
<cpanel element="label_inst"><bounds left="261" top="312" right="286" bottom="319" /></cpanel>
|
||||
<cpanel element="label_decr"><bounds left="292" top="312" right="317" bottom="319" /></cpanel>
|
||||
<cpanel element="label_incr"><bounds left="323" top="312" right="348" bottom="319" /></cpanel>
|
||||
<cpanel element="label_load"><bounds left="354" top="312" right="379" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel element="label_stop"><bounds left="448" top="312" right="473" bottom="319" /></cpanel>
|
||||
<cpanel element="label_single"><bounds left="479" top="304" right="504" bottom="311" /></cpanel>
|
||||
<cpanel element="label_step"><bounds left="479" top="312" right="504" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel element="label_cma"><bounds left="571" top="296" right="631" bottom="304" /></cpanel>
|
||||
<cpanel element="label_write"><bounds left="604" top="312" right="629" bottom="319" /></cpanel>
|
||||
<cpanel element="label_enable"><bounds left="514" top="321" right="570" bottom="328" /></cpanel>
|
||||
<cpanel element="label_disable"><bounds left="514" top="361" right="570" bottom="368" /></cpanel>
|
||||
|
||||
<cpanel element="label_reset_ctrl"><bounds left="664" top="296" right="724" bottom="304" /></cpanel>
|
||||
<cpanel element="label_reset"><bounds left="666" top="312" right="691" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel name="led_address_a3_3" element="led">
|
||||
<bounds left="81" top="79" right="92" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a3_2" element="led">
|
||||
<bounds left="112" top="79" right="123" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a3_1" element="led">
|
||||
<bounds left="143" top="79" right="154" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a3_0" element="led">
|
||||
<bounds left="174" top="79" right="185" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_3" element="led">
|
||||
<bounds left="237" top="79" right="248" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_2" element="led">
|
||||
<bounds left="268" top="79" right="279" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_1" element="led">
|
||||
<bounds left="299" top="79" right="310" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_0" element="led">
|
||||
<bounds left="330" top="79" right="341" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_3" element="led">
|
||||
<bounds left="393" top="79" right="404" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_2" element="led">
|
||||
<bounds left="424" top="79" right="435" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_1" element="led">
|
||||
<bounds left="455" top="79" right="466" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_0" element="led">
|
||||
<bounds left="486" top="79" right="497" bottom="86" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_status_search" element="led">
|
||||
<bounds left="580" top="79" right="591" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_status_run" element="led">
|
||||
<bounds left="611" top="79" right="622" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_status_ptr_valid" element="led">
|
||||
<bounds left="642" top="79" right="653" bottom="86" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_instruction_m1_3" element="led">
|
||||
<bounds left="81" top="128" right="92" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m1_2" element="led">
|
||||
<bounds left="112" top="128" right="123" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m1_1" element="led">
|
||||
<bounds left="143" top="128" right="154" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m1_0" element="led">
|
||||
<bounds left="174" top="128" right="185" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_3" element="led">
|
||||
<bounds left="237" top="128" right="248" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_2" element="led">
|
||||
<bounds left="268" top="128" right="279" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_1" element="led">
|
||||
<bounds left="299" top="128" right="310" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_0" element="led">
|
||||
<bounds left="330" top="128" right="341" bottom="135" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_active_bank_3" element="led">
|
||||
<bounds left="393" top="128" right="404" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_active_bank_2" element="led">
|
||||
<bounds left="424" top="128" right="435" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_active_bank_1" element="led">
|
||||
<bounds left="455" top="128" right="466" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_active_bank_0" element="led">
|
||||
<bounds left="486" top="128" right="497" bottom="135" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_mode_mon" element="led">
|
||||
<bounds left="580" top="128" right="591" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_mode_ram" element="led">
|
||||
<bounds left="611" top="128" right="622" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_mode_prom" element="led">
|
||||
<bounds left="642" top="128" right="653" bottom="135" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_execution_x2_3" element="led">
|
||||
<bounds left="81" top="177" right="92" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x2_2" element="led">
|
||||
<bounds left="112" top="177" right="123" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x2_1" element="led">
|
||||
<bounds left="143" top="177" right="154" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x2_0" element="led">
|
||||
<bounds left="174" top="177" right="185" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_3" element="led">
|
||||
<bounds left="237" top="177" right="248" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_2" element="led">
|
||||
<bounds left="268" top="177" right="279" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_1" element="led">
|
||||
<bounds left="299" top="177" right="310" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_0" element="led">
|
||||
<bounds left="330" top="177" right="341" bottom="184" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_last_ptr_x2_3" element="led">
|
||||
<bounds left="393" top="177" right="404" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x2_2" element="led">
|
||||
<bounds left="424" top="177" right="435" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x2_1" element="led">
|
||||
<bounds left="455" top="177" right="466" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x2_0" element="led">
|
||||
<bounds left="486" top="177" right="497" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_3" element="led">
|
||||
<bounds left="549" top="177" right="560" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_2" element="led">
|
||||
<bounds left="580" top="177" right="591" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_1" element="led">
|
||||
<bounds left="611" top="177" right="622" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_0" element="led">
|
||||
<bounds left="642" top="177" right="653" bottom="184" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0800">
|
||||
<bounds left="74" top="240" right="99" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0400">
|
||||
<bounds left="105" top="240" right="130" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0200">
|
||||
<bounds left="136" top="240" right="161" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0100">
|
||||
<bounds left="167" top="240" right="192" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0080">
|
||||
<bounds left="230" top="240" right="255" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0040">
|
||||
<bounds left="261" top="240" right="286" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0020">
|
||||
<bounds left="292" top="240" right="317" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0010">
|
||||
<bounds left="323" top="240" right="348" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0008">
|
||||
<bounds left="386" top="240" right="411" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0004">
|
||||
<bounds left="417" top="240" right="442" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0002">
|
||||
<bounds left="448" top="240" right="473" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0001">
|
||||
<bounds left="479" top="240" right="504" bottom="286" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0008">
|
||||
<bounds left="573" top="240" right="598" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0010">
|
||||
<bounds left="604" top="240" right="629" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0020">
|
||||
<bounds left="635" top="240" right="660" bottom="286" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x08">
|
||||
<bounds left="74" top="322" right="99" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x04">
|
||||
<bounds left="105" top="322" right="130" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x02">
|
||||
<bounds left="136" top="322" right="161" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x01">
|
||||
<bounds left="167" top="322" right="192" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0001">
|
||||
<bounds left="230" top="322" right="255" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0002">
|
||||
<bounds left="261" top="322" right="286" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0004">
|
||||
<bounds left="292" top="322" right="317" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0008">
|
||||
<bounds left="323" top="322" right="348" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0010">
|
||||
<bounds left="354" top="322" right="379" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0001">
|
||||
<bounds left="448" top="322" right="473" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0002">
|
||||
<bounds left="479" top="322" right="504" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0020">
|
||||
<bounds left="573" top="322" right="598" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0040">
|
||||
<bounds left="604" top="322" right="629" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0004">
|
||||
<bounds left="666" top="322" right="691" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<screen index="0"><bounds left="0" top="400" right="1000" bottom="1150" /></screen>
|
||||
</view>
|
||||
|
||||
<view name="Front Panel">
|
||||
<cpanel element="background"><bounds left="0" top="0" right="1000" bottom="400" /></cpanel>
|
||||
|
||||
<cpanel element="label_address"><bounds left="72" top="55" right="506" bottom="63" /></cpanel>
|
||||
<cpanel element="label_a3"><bounds left="81" top="63" right="185" bottom="70" /></cpanel>
|
||||
<cpanel element="label_a2"><bounds left="237" top="63" right="341" bottom="70" /></cpanel>
|
||||
<cpanel element="label_a1"><bounds left="393" top="63" right="497" bottom="70" /></cpanel>
|
||||
<cpanel element="label_11"><bounds left="81" top="71" right="92" bottom="78" /></cpanel>
|
||||
<cpanel element="label_10"><bounds left="112" top="71" right="123" bottom="78" /></cpanel>
|
||||
<cpanel element="label_9"><bounds left="143" top="71" right="154" bottom="78" /></cpanel>
|
||||
<cpanel element="label_8"><bounds left="174" top="71" right="185" bottom="78" /></cpanel>
|
||||
<cpanel element="label_7"><bounds left="237" top="71" right="248" bottom="78" /></cpanel>
|
||||
<cpanel element="label_6"><bounds left="268" top="71" right="279" bottom="78" /></cpanel>
|
||||
<cpanel element="label_5"><bounds left="299" top="71" right="310" bottom="78" /></cpanel>
|
||||
<cpanel element="label_4"><bounds left="330" top="71" right="341" bottom="78" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="393" top="71" right="404" bottom="78" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="424" top="71" right="435" bottom="78" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="455" top="71" right="466" bottom="78" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="486" top="71" right="497" bottom="78" /></cpanel>
|
||||
|
||||
<cpanel element="label_status"><bounds left="540" top="55" right="662" bottom="63" /></cpanel>
|
||||
<cpanel element="label_search"><bounds left="561" top="63" right="610" bottom="70" /></cpanel>
|
||||
<cpanel element="label_complete"><bounds left="561" top="71" right="610" bottom="78" /></cpanel>
|
||||
<cpanel element="label_pointer"><bounds left="623" top="63" right="672" bottom="70" /></cpanel>
|
||||
<cpanel element="label_valid"><bounds left="623" top="71" right="672" bottom="78" /></cpanel>
|
||||
<cpanel element="label_run"><bounds left="611" top="71" right="626" bottom="78" /></cpanel>
|
||||
|
||||
<cpanel element="label_instruction"><bounds left="72" top="104" right="350" bottom="112" /></cpanel>
|
||||
<cpanel element="label_m1"><bounds left="81" top="112" right="185" bottom="119" /></cpanel>
|
||||
<cpanel element="label_m2"><bounds left="237" top="112" right="341" bottom="119" /></cpanel>
|
||||
<cpanel element="label_7"><bounds left="81" top="120" right="92" bottom="127" /></cpanel>
|
||||
<cpanel element="label_6"><bounds left="112" top="120" right="123" bottom="127" /></cpanel>
|
||||
<cpanel element="label_5"><bounds left="143" top="120" right="154" bottom="127" /></cpanel>
|
||||
<cpanel element="label_4"><bounds left="174" top="120" right="185" bottom="127" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="237" top="120" right="248" bottom="127" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="268" top="120" right="279" bottom="127" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="299" top="120" right="310" bottom="127" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="330" top="120" right="341" bottom="127" /></cpanel>
|
||||
|
||||
<cpanel element="label_active_bank"><bounds left="384" top="104" right="506" bottom="112" /></cpanel>
|
||||
<cpanel element="label_cm_ram"><bounds left="393" top="112" right="497" bottom="119" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="393" top="120" right="404" bottom="127" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="424" top="120" right="435" bottom="127" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="455" top="120" right="466" bottom="127" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="486" top="120" right="497" bottom="127" /></cpanel>
|
||||
|
||||
<cpanel element="label_mode"><bounds left="540" top="104" right="662" bottom="112" /></cpanel>
|
||||
<cpanel element="label_mon"><bounds left="577" top="120" right="594" bottom="127" /></cpanel>
|
||||
<cpanel element="label_ram"><bounds left="608" top="120" right="625" bottom="127" /></cpanel>
|
||||
<cpanel element="label_prom"><bounds left="639" top="120" right="656" bottom="127" /></cpanel>
|
||||
|
||||
<cpanel element="label_execution"><bounds left="72" top="153" right="350" bottom="161" /></cpanel>
|
||||
<cpanel element="label_x2"><bounds left="81" top="161" right="185" bottom="168" /></cpanel>
|
||||
<cpanel element="label_x3"><bounds left="237" top="161" right="341" bottom="168" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="81" top="169" right="92" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="112" top="169" right="123" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="143" top="169" right="154" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="174" top="169" right="185" bottom="176" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="237" top="169" right="248" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="268" top="169" right="279" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="299" top="169" right="310" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="330" top="169" right="341" bottom="176" /></cpanel>
|
||||
|
||||
<cpanel element="label_last_ptr"><bounds left="384" top="153" right="662" bottom="161" /></cpanel>
|
||||
<cpanel element="label_x2"><bounds left="393" top="161" right="497" bottom="168" /></cpanel>
|
||||
<cpanel element="label_x3"><bounds left="549" top="161" right="653" bottom="168" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="393" top="169" right="404" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="424" top="169" right="435" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="455" top="169" right="466" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="486" top="169" right="497" bottom="176" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="549" top="169" right="560" bottom="176" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="580" top="169" right="591" bottom="176" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="611" top="169" right="622" bottom="176" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="642" top="169" right="653" bottom="176" /></cpanel>
|
||||
|
||||
<cpanel element="label_addr_data"><bounds left="72" top="214" right="506" bottom="222" /></cpanel>
|
||||
<cpanel element="label_11"><bounds left="74" top="230" right="99" bottom="237" /></cpanel>
|
||||
<cpanel element="label_10"><bounds left="105" top="230" right="130" bottom="237" /></cpanel>
|
||||
<cpanel element="label_9"><bounds left="136" top="230" right="161" bottom="237" /></cpanel>
|
||||
<cpanel element="label_8"><bounds left="167" top="230" right="192" bottom="237" /></cpanel>
|
||||
<cpanel element="label_7"><bounds left="230" top="230" right="255" bottom="237" /></cpanel>
|
||||
<cpanel element="label_6"><bounds left="261" top="230" right="286" bottom="237" /></cpanel>
|
||||
<cpanel element="label_5"><bounds left="292" top="230" right="317" bottom="237" /></cpanel>
|
||||
<cpanel element="label_4"><bounds left="323" top="230" right="348" bottom="237" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="386" top="230" right="411" bottom="237" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="417" top="230" right="442" bottom="237" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="448" top="230" right="473" bottom="237" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="479" top="230" right="504" bottom="237" /></cpanel>
|
||||
|
||||
<cpanel element="label_mode_ctrl"><bounds left="571" top="214" right="662" bottom="222" /></cpanel>
|
||||
<cpanel element="label_mon"><bounds left="573" top="230" right="598" bottom="237" /></cpanel>
|
||||
<cpanel element="label_ram"><bounds left="604" top="230" right="629" bottom="237" /></cpanel>
|
||||
<cpanel element="label_prom"><bounds left="635" top="230" right="660" bottom="237" /></cpanel>
|
||||
|
||||
<cpanel element="label_pass_counter"><bounds left="72" top="296" right="194" bottom="304" /></cpanel>
|
||||
<cpanel element="label_passes"><bounds left="74" top="304" right="192" bottom="311" /></cpanel>
|
||||
<cpanel element="label_3"><bounds left="74" top="312" right="99" bottom="319" /></cpanel>
|
||||
<cpanel element="label_2"><bounds left="105" top="312" right="130" bottom="319" /></cpanel>
|
||||
<cpanel element="label_1"><bounds left="136" top="312" right="161" bottom="319" /></cpanel>
|
||||
<cpanel element="label_0"><bounds left="167" top="312" right="192" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel element="label_search_ctrl"><bounds left="228" top="296" right="381" bottom="304" /></cpanel>
|
||||
<cpanel element="label_run"><bounds left="230" top="312" right="255" bottom="319" /></cpanel>
|
||||
<cpanel element="label_next"><bounds left="261" top="304" right="286" bottom="311" /></cpanel>
|
||||
<cpanel element="label_inst"><bounds left="261" top="312" right="286" bottom="319" /></cpanel>
|
||||
<cpanel element="label_decr"><bounds left="292" top="312" right="317" bottom="319" /></cpanel>
|
||||
<cpanel element="label_incr"><bounds left="323" top="312" right="348" bottom="319" /></cpanel>
|
||||
<cpanel element="label_load"><bounds left="354" top="312" right="379" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel element="label_stop"><bounds left="448" top="312" right="473" bottom="319" /></cpanel>
|
||||
<cpanel element="label_single"><bounds left="479" top="304" right="504" bottom="311" /></cpanel>
|
||||
<cpanel element="label_step"><bounds left="479" top="312" right="504" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel element="label_cma"><bounds left="571" top="296" right="631" bottom="304" /></cpanel>
|
||||
<cpanel element="label_write"><bounds left="604" top="312" right="629" bottom="319" /></cpanel>
|
||||
<cpanel element="label_enable"><bounds left="514" top="321" right="570" bottom="328" /></cpanel>
|
||||
<cpanel element="label_disable"><bounds left="514" top="361" right="570" bottom="368" /></cpanel>
|
||||
|
||||
<cpanel element="label_reset_ctrl"><bounds left="664" top="296" right="724" bottom="304" /></cpanel>
|
||||
<cpanel element="label_reset"><bounds left="666" top="312" right="691" bottom="319" /></cpanel>
|
||||
|
||||
<cpanel name="led_address_a3_3" element="led">
|
||||
<bounds left="81" top="79" right="92" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a3_2" element="led">
|
||||
<bounds left="112" top="79" right="123" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a3_1" element="led">
|
||||
<bounds left="143" top="79" right="154" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a3_0" element="led">
|
||||
<bounds left="174" top="79" right="185" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_3" element="led">
|
||||
<bounds left="237" top="79" right="248" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_2" element="led">
|
||||
<bounds left="268" top="79" right="279" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_1" element="led">
|
||||
<bounds left="299" top="79" right="310" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a2_0" element="led">
|
||||
<bounds left="330" top="79" right="341" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_3" element="led">
|
||||
<bounds left="393" top="79" right="404" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_2" element="led">
|
||||
<bounds left="424" top="79" right="435" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_1" element="led">
|
||||
<bounds left="455" top="79" right="466" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_address_a1_0" element="led">
|
||||
<bounds left="486" top="79" right="497" bottom="86" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_status_search" element="led">
|
||||
<bounds left="580" top="79" right="591" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_status_run" element="led">
|
||||
<bounds left="611" top="79" right="622" bottom="86" />
|
||||
</cpanel>
|
||||
<cpanel name="led_status_ptr_valid" element="led">
|
||||
<bounds left="642" top="79" right="653" bottom="86" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_instruction_m1_3" element="led">
|
||||
<bounds left="81" top="128" right="92" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m1_2" element="led">
|
||||
<bounds left="112" top="128" right="123" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m1_1" element="led">
|
||||
<bounds left="143" top="128" right="154" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m1_0" element="led">
|
||||
<bounds left="174" top="128" right="185" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_3" element="led">
|
||||
<bounds left="237" top="128" right="248" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_2" element="led">
|
||||
<bounds left="268" top="128" right="279" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_1" element="led">
|
||||
<bounds left="299" top="128" right="310" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_instruction_m2_0" element="led">
|
||||
<bounds left="330" top="128" right="341" bottom="135" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_active_bank_3" element="led">
|
||||
<bounds left="393" top="128" right="404" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_active_bank_2" element="led">
|
||||
<bounds left="424" top="128" right="435" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_active_bank_1" element="led">
|
||||
<bounds left="455" top="128" right="466" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_active_bank_0" element="led">
|
||||
<bounds left="486" top="128" right="497" bottom="135" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_mode_mon" element="led">
|
||||
<bounds left="580" top="128" right="591" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_mode_ram" element="led">
|
||||
<bounds left="611" top="128" right="622" bottom="135" />
|
||||
</cpanel>
|
||||
<cpanel name="led_mode_prom" element="led">
|
||||
<bounds left="642" top="128" right="653" bottom="135" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_execution_x2_3" element="led">
|
||||
<bounds left="81" top="177" right="92" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x2_2" element="led">
|
||||
<bounds left="112" top="177" right="123" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x2_1" element="led">
|
||||
<bounds left="143" top="177" right="154" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x2_0" element="led">
|
||||
<bounds left="174" top="177" right="185" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_3" element="led">
|
||||
<bounds left="237" top="177" right="248" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_2" element="led">
|
||||
<bounds left="268" top="177" right="279" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_1" element="led">
|
||||
<bounds left="299" top="177" right="310" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_execution_x3_0" element="led">
|
||||
<bounds left="330" top="177" right="341" bottom="184" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel name="led_last_ptr_x2_3" element="led">
|
||||
<bounds left="393" top="177" right="404" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x2_2" element="led">
|
||||
<bounds left="424" top="177" right="435" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x2_1" element="led">
|
||||
<bounds left="455" top="177" right="466" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x2_0" element="led">
|
||||
<bounds left="486" top="177" right="497" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_3" element="led">
|
||||
<bounds left="549" top="177" right="560" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_2" element="led">
|
||||
<bounds left="580" top="177" right="591" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_1" element="led">
|
||||
<bounds left="611" top="177" right="622" bottom="184" />
|
||||
</cpanel>
|
||||
<cpanel name="led_last_ptr_x3_0" element="led">
|
||||
<bounds left="642" top="177" right="653" bottom="184" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0800">
|
||||
<bounds left="74" top="240" right="99" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0400">
|
||||
<bounds left="105" top="240" right="130" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0200">
|
||||
<bounds left="136" top="240" right="161" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0100">
|
||||
<bounds left="167" top="240" right="192" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0080">
|
||||
<bounds left="230" top="240" right="255" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0040">
|
||||
<bounds left="261" top="240" right="286" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0020">
|
||||
<bounds left="292" top="240" right="317" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0010">
|
||||
<bounds left="323" top="240" right="348" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0008">
|
||||
<bounds left="386" top="240" right="411" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0004">
|
||||
<bounds left="417" top="240" right="442" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0002">
|
||||
<bounds left="448" top="240" right="473" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0001">
|
||||
<bounds left="479" top="240" right="504" bottom="286" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0008">
|
||||
<bounds left="573" top="240" right="598" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0010">
|
||||
<bounds left="604" top="240" right="629" bottom="286" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0020">
|
||||
<bounds left="635" top="240" right="660" bottom="286" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x08">
|
||||
<bounds left="74" top="322" right="99" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x04">
|
||||
<bounds left="105" top="322" right="130" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x02">
|
||||
<bounds left="136" top="322" right="161" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="PASSES" inputmask="0x01">
|
||||
<bounds left="167" top="322" right="192" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0001">
|
||||
<bounds left="230" top="322" right="255" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0002">
|
||||
<bounds left="261" top="322" right="286" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0004">
|
||||
<bounds left="292" top="322" right="317" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0008">
|
||||
<bounds left="323" top="322" right="348" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0010">
|
||||
<bounds left="354" top="322" right="379" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0001">
|
||||
<bounds left="448" top="322" right="473" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0002">
|
||||
<bounds left="479" top="322" right="504" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0020">
|
||||
<bounds left="573" top="322" right="598" bottom="368" />
|
||||
</cpanel>
|
||||
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0040">
|
||||
<bounds left="604" top="322" right="629" bottom="368" />
|
||||
</cpanel>
|
||||
|
||||
<cpanel element="switch" inputtag="MODE" inputmask="0x0004">
|
||||
<bounds left="666" top="322" right="691" bottom="368" />
|
||||
</cpanel>
|
||||
</view>
|
||||
</mamelayout>
|
Loading…
Reference in New Issue
Block a user