summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/excali64.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/excali64.c')
-rw-r--r--src/mess/drivers/excali64.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/mess/drivers/excali64.c b/src/mess/drivers/excali64.c
index 5d3e9dac676..48542ab346f 100644
--- a/src/mess/drivers/excali64.c
+++ b/src/mess/drivers/excali64.c
@@ -9,16 +9,17 @@ Skeleton driver created on 2014-12-09.
Chips: Z80A, 8251, 8253, 8255, 6845
We have Basic 1.1. Other known versions are 1.01, 2.1
+There are 2 versions of the colour prom, which have different palettes.
+We have the later version.
Control W then Enter will switch between 40 and 80 characters per line.
ToDo:
-- Some keys can be connected to more than one position in the matrix. Need to
- determine the correct positions.
-- The position of the "Line Insert" key is unknown.
- Colours are approximate.
- Disk controller
-- ROM banking
+- Graphics commands such as LINE and CIRCLE produce a syntax error.
+- Some commands such as HGRCLS are missing from the rom. Perhaps we need a later version?
+- SET command produces random graphics instead of the expected lo-res dot.
- The schematic shows the audio counter connected to 2MHz, but this produces
sounds that are too high. Connected to 1MHz for now.
- Serial
@@ -103,7 +104,6 @@ static ADDRESS_MAP_START(excali64_io, AS_IO, 8, excali64_state)
ADDRESS_MAP_END
-// Keyboard matrix is not included in schematics, so some guesswork
static INPUT_PORTS_START( excali64 )
PORT_START("KEY.0") /* line 0 */
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12)
@@ -153,7 +153,7 @@ static INPUT_PORTS_START( excali64 )
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(0x7f) PORT_CHAR(0x7f) PORT_CHAR(0x1f)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(0x1b)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) //1
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT)
PORT_START("KEY.5") /* line 5 */
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_CHAR(0x1b)
@@ -245,8 +245,6 @@ WRITE8_MEMBER( excali64_state::port70_w )
membank("bankr1")->set_entry(0);
membank("bankr2")->set_entry(0);
membank("bankr3")->set_entry(0);
- membank("bankr4")->set_entry(0);
- membank("bankw1")->set_entry(0);
membank("bankw2")->set_entry(0);
membank("bankw3")->set_entry(0);
membank("bankw4")->set_entry(0);
@@ -258,8 +256,6 @@ WRITE8_MEMBER( excali64_state::port70_w )
membank("bankr1")->set_entry(1);
membank("bankr2")->set_entry(1);
membank("bankr3")->set_entry(1);
- membank("bankr4")->set_entry(0);
- membank("bankw1")->set_entry(0);
membank("bankw2")->set_entry(2);
membank("bankw3")->set_entry(2);
membank("bankw4")->set_entry(2);
@@ -270,12 +266,14 @@ WRITE8_MEMBER( excali64_state::port70_w )
membank("bankr1")->set_entry(1);
membank("bankr2")->set_entry(1);
membank("bankr3")->set_entry(1);
- membank("bankr4")->set_entry(0);
- membank("bankw1")->set_entry(0);
membank("bankw2")->set_entry(2);
membank("bankw3")->set_entry(2);
membank("bankw4")->set_entry(0);
}
+
+ // other half of ROM_1
+ if ((data & 0x22) == 0x20)
+ membank("bankr1")->set_entry(2);
}
MACHINE_RESET_MEMBER( excali64_state, excali64 )
@@ -342,6 +340,7 @@ PALETTE_INIT_MEMBER( excali64_state, excali64 )
membank("bankw4")->configure_entry(0, &ram[0x4000]);//boot
// rom_1
membank("bankr1")->configure_entry(1, &main[0x0000]);//boot
+ membank("bankr1")->configure_entry(2, &main[0x2000]);
// rom_2
membank("bankr2")->configure_entry(1, &main[0x4000]);//boot
membank("bankr3")->configure_entry(1, &main[0x5000]);//boot