diff options
Diffstat (limited to 'src/mame/drivers/lola8a.cpp')
-rw-r--r-- | src/mame/drivers/lola8a.cpp | 101 |
1 files changed, 62 insertions, 39 deletions
diff --git a/src/mame/drivers/lola8a.cpp b/src/mame/drivers/lola8a.cpp index c80e2f1702f..59997f6599b 100644 --- a/src/mame/drivers/lola8a.cpp +++ b/src/mame/drivers/lola8a.cpp @@ -2,14 +2,14 @@ // copyright-holders:Miodrag Milanovic, Robbbert /*************************************************************************** - Lola 8A +Lola 8A - Ivo Lola Ribar Institute +Ivo Lola Ribar Institute - 2013-08-28 Skeleton driver. +2013-08-28 Skeleton driver. - BASIC commands : +BASIC commands : (must be in UPPERcase) LET NEXT IF GOTO GOSUB RETURN READ DATA FOR CLS INPUT DIM STOP END RESTORE REM CLEAR PUSH POKE PRINT OUT ERROR USR CURSOR NORMAL INVERSE PLOT UNPLOT @@ -18,8 +18,35 @@ SPC OFF TAB THEN TO STEP AND OR XOR NOT ABS LEN SQR INT ASC CHR VAL STR MID ARG CALL RND LEFT RIGHT DOT SGN SIN FREE PI FN TAN COS POP PEEK INP LN EXP ATN - COLOUR x (x = 0 to 3) there's no known colour ram, unable to determine - how colours can be displayed. Therefore we only show black and white. +COLOUR x (x = 0 to 3) there's no known colour ram, unable to determine +how colours can be displayed. Therefore we only show black and white. + +Unknown how to produce sound - there's no commands. + +MON: (Guesswork by trying things) + - A0 : display addresses A0 to A7 + - 0,FFF : display addresses 0 to FFE (yes it leaves one out) + - G,R : displays registers (R B=3 : set B register to 3) + - M,N,Q,T : display or set a specific "register"? (Q : display Q ; Q=6 : set Q to 6) + - SP : display or set SP (SP=3B00 : set SP) + - PC : display or set PC + - L : disassembler (L 0,FF : disassemble range 0 to FF) + - K : single-step? (address set by G) (K 99 : single-step at 99) + +Control Keys + - A : display gets a little corrupted + - G : back to normal + - C : break? (only does a newline) + - L : clear screen + - M : same as pressing Enter + +TO DO + - How to use the sound? + - Does it have colour? + - Do the AY ports do anything? + - What is Ctrl-A for? + - Need software + - Need manuals & schematics ****************************************************************************/ @@ -47,6 +74,7 @@ public: , m_cass(*this, "cassette") , m_palette(*this, "palette") , m_p_videoram(*this, "videoram") + , m_io_keyboard(*this, "KEY.%u", 0) { } void lola8a(machine_config &config); @@ -69,6 +97,7 @@ private: required_device<cassette_image_device> m_cass; required_device<palette_device> m_palette; required_shared_ptr<uint8_t> m_p_videoram; + required_ioport_array<10> m_io_keyboard; }; void lola8a_state::lola8a_mem(address_map &map) @@ -90,7 +119,6 @@ void lola8a_state::lola8a_io(address_map &map) map(0x80, 0x80).w(AY8910_TAG, FUNC(ay8910_device::address_w)); map(0x84, 0x84).rw(AY8910_TAG, FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w)); map(0x88, 0x88).r(FUNC(lola8a_state::keyboard_r)); - map(0x90, 0x90).rw(HD46505SP_TAG, FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); map(0x92, 0x92).rw(HD46505SP_TAG, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); @@ -98,7 +126,7 @@ void lola8a_state::lola8a_io(address_map &map) /* Input ports */ static INPUT_PORTS_START( lola8a ) - PORT_START("line_0") + PORT_START("KEY.0") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) @@ -108,7 +136,7 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_1") + PORT_START("KEY.1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) @@ -118,7 +146,7 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_2") + PORT_START("KEY.2") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) @@ -128,7 +156,7 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_3") + PORT_START("KEY.3") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) @@ -138,7 +166,7 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_4") + PORT_START("KEY.4") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) @@ -148,7 +176,7 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_5") + PORT_START("KEY.5") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) @@ -158,7 +186,7 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_6") + PORT_START("KEY.6") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH)// Z" PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) @@ -168,32 +196,32 @@ static INPUT_PORTS_START( lola8a ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) // C" + PORT_START("KEY.7") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)// C" PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) // = - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) // S" - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // C' - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // ; + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_END)// S" + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE)// C' + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS)// ; PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_8") + PORT_START("KEY.8") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH)// / PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) // ???? + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) // unmarked key PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // : + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) // : PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) - PORT_START("line_9") + PORT_START("KEY.9") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) // return - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // ???? - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) // ???? + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) // DEL key + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) // unmarked key PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // ???? + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) // unmarked key PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE)// @ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) @@ -247,17 +275,12 @@ WRITE_LINE_MEMBER( lola8a_state::cass_w ) READ8_MEMBER(lola8a_state::keyboard_r) { - static const char *const keynames[] = - { - "line_0", "line_1", "line_2", "line_3", - "line_4", "line_5", "line_6", "line_7", - "line_8", "line_9", nullptr, nullptr, - nullptr,nullptr,nullptr,nullptr - }; - - if( keynames[m_portb & 0x0f]) - return ioport(keynames[m_portb & 0x0f])->read(); - return 0xff; + u8 data = 0xff, kbrow = m_portb & 15; + + if (kbrow < 10) + data = m_io_keyboard[kbrow]->read(); + + return data; } WRITE_LINE_MEMBER(lola8a_state::crtc_vsync) @@ -299,7 +322,7 @@ void lola8a_state::lola8a(machine_config &config) /* Cassette */ CASSETTE(config, m_cass); - WAVE(config, "wave", m_cass).add_route(ALL_OUTPUTS, "mono", 0.25); + WAVE(config, "wave", m_cass).add_route(ALL_OUTPUTS, "mono", 0.05); } /* ROM definition */ @@ -313,4 +336,4 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1986, lola8a, 0, 0, lola8a, lola8a, lola8a_state, empty_init, "Institut Ivo Lola Ribar", "Lola 8A", MACHINE_NOT_WORKING ) +COMP( 1986, lola8a, 0, 0, lola8a, lola8a, lola8a_state, empty_init, "Institut Ivo Lola Ribar", "Lola 8A", 0 ) |