diff --git a/hash/vector06_cart.xml b/hash/vector06_cart.xml index df16ef42f23..a93b7327f1a 100644 --- a/hash/vector06_cart.xml +++ b/hash/vector06_cart.xml @@ -9,9 +9,10 @@ license:CC0 ROMDISK 19?? <unknown> + - + diff --git a/hash/vector06_flop.xml b/hash/vector06_flop.xml index e8afe175758..be900e497f2 100644 --- a/hash/vector06_flop.xml +++ b/hash/vector06_flop.xml @@ -9,6 +9,7 @@ license:CC0 MicroDOS v3.1 BIOS T-34 19?? <unknown> + @@ -20,6 +21,7 @@ license:CC0 MicroDOS v3.1M BIOS T-72 19?? <unknown> + @@ -31,6 +33,7 @@ license:CC0 Card Game 19?? <unknown> + @@ -43,6 +46,7 @@ license:CC0 1995 <unknown> + @@ -55,6 +59,7 @@ license:CC0 19?? <unknown> + @@ -66,6 +71,7 @@ license:CC0 Kombat Rabbits 1995 <unknown> + @@ -77,6 +83,7 @@ license:CC0 Lemmings 1996 <unknown> + @@ -88,6 +95,7 @@ license:CC0 Color Lines 19?? <unknown> + @@ -99,6 +107,7 @@ license:CC0 Master Reversi 19?? <unknown> + @@ -110,6 +119,7 @@ license:CC0 Puzznic 1996 <unknown> + @@ -121,6 +131,7 @@ license:CC0 Robocop 1995 <unknown> + @@ -132,6 +143,7 @@ license:CC0 Tetris 3D 1996 <unknown> + @@ -139,10 +151,11 @@ license:CC0 - + Zoo 19?? <unknown> + diff --git a/src/mame/drivers/vector06.cpp b/src/mame/drivers/vector06.cpp index 6fe38d34ba5..b91a025789f 100644 --- a/src/mame/drivers/vector06.cpp +++ b/src/mame/drivers/vector06.cpp @@ -13,13 +13,22 @@ boot from FDD: press F12 after initial boot was load (indicated in screen lower part) hold Ctrl ("YC" key) during MicroDOS start to format RAM disk (required by some games) +48k MicroDos one-letter commands: +B crash? +D dir +E erase +K ? +O some kind of status display +U user + TODO: - correct CPU speed / latency emulation, each machine cycle takes here 4 clocks, i.e. INX B 4+1 will be 2*4=8clocks, SHLD addr is 4+3+3+3+3 so it will be 5*4=20clocks and so on - - "Card Game" wont work, jump to 0 instead of vblank interrupt RST7, something direct.explicit or banking related ? - - border emulaton + - "Card Game" wont work, jump to 0 instead of vblank interrupt RST7, something banking related ? + - border emulation - separate base unexpanded Vector06C configuration - slotify AY8910 sound boards ? + - Rus/Lat key doesn't seem to be right? ****************************************************************************/ @@ -28,121 +37,120 @@ TODO: #include "formats/vector06_dsk.h" #include "screen.h" -#include "softlist.h" #include "speaker.h" /* Address maps */ -void vector06_state::vector06_mem(address_map &map) +void vector06_state::mem_map(address_map &map) { map(0x0000, 0xffff).bankrw("bank1"); map(0x0000, 0x7fff).bankr("bank2"); map(0xa000, 0xdfff).bankrw("bank3"); } -void vector06_state::vector06_io(address_map &map) +void vector06_state::io_map(address_map &map) { map.global_mask(0xff); map.unmap_value_high(); - map(0x00, 0x03).lrw8(NAME([this] (offs_t offset) -> u8 { return m_ppi8255->read(offset^3); }), NAME([this] (offs_t offset, u8 data) { m_ppi8255->write(offset^3, data); })); - map(0x04, 0x07).lrw8(NAME([this] (offs_t offset) -> u8 { return m_ppi8255_2->read(offset^3); }), NAME([this] (offs_t offset, u8 data) { m_ppi8255_2->write(offset^3, data); })); - map(0x08, 0x0b).lrw8(NAME([this] (offs_t offset) -> u8 { return m_pit8253->read(offset^3); }), NAME([this] (offs_t offset, u8 data) { m_pit8253->write(offset^3, data); })); - map(0x0c, 0x0c).w(FUNC(vector06_state::vector06_color_set)); - map(0x10, 0x10).w(FUNC(vector06_state::vector06_ramdisk_w)); + map(0x00, 0x03).lrw8(NAME([this] (offs_t offset) -> u8 { return m_ppi1->read(offset^3); }), NAME([this] (offs_t offset, u8 data) { m_ppi1->write(offset^3, data); })); + map(0x04, 0x07).lrw8(NAME([this] (offs_t offset) -> u8 { return m_ppi2->read(offset^3); }), NAME([this] (offs_t offset, u8 data) { m_ppi2->write(offset^3, data); })); + map(0x08, 0x0b).lrw8(NAME([this] (offs_t offset) -> u8 { return m_pit->read(offset^3); }), NAME([this] (offs_t offset, u8 data) { m_pit->write(offset^3, data); })); + map(0x0c, 0x0c).w(FUNC(vector06_state::color_set)); + map(0x10, 0x10).w(FUNC(vector06_state::ramdisk_w)); map(0x14, 0x15).rw(m_ay, FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_address_w)); map(0x18, 0x18).rw(m_fdc, FUNC(kr1818vg93_device::data_r), FUNC(kr1818vg93_device::data_w)); map(0x19, 0x19).rw(m_fdc, FUNC(kr1818vg93_device::sector_r), FUNC(kr1818vg93_device::sector_w)); map(0x1a, 0x1a).rw(m_fdc, FUNC(kr1818vg93_device::track_r), FUNC(kr1818vg93_device::track_w)); map(0x1b, 0x1b).rw(m_fdc, FUNC(kr1818vg93_device::status_r), FUNC(kr1818vg93_device::cmd_w)); - map(0x1c, 0x1c).w(FUNC(vector06_state::vector06_disc_w)); + map(0x1c, 0x1c).w(FUNC(vector06_state::disc_w)); } /* Input ports */ static INPUT_PORTS_START( vector06 ) PORT_START("LINE.0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BkSp") PORT_CODE(KEYCODE_BACKSPACE) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BkSp") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_START("LINE.1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PgUp") PORT_CODE(KEYCODE_PGUP) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_START("LINE.2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 \"") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 #") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 \'") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') PORT_START("LINE.3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("'") PORT_CODE(KEYCODE_INSERT) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- =") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') PORT_START("LINE.4") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_QUOTE) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@ `") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('@') PORT_CHAR('`') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') PORT_START("LINE.5") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') PORT_START("LINE.6") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') PORT_START("LINE.7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("~") PORT_CODE(KEYCODE_TILDE) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('{') PORT_CHAR('[') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\ |") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('|') PORT_CHAR('\\') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("] }") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('}') PORT_CHAR(']') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^ ~") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(32) PORT_START("LINE.8") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_LALT) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl YC") PORT_CODE(KEYCODE_LCONTROL) //PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_LALT) // This acts as a caps lock in the CP/M screen PORT_START("RESET") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F11) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset 2") PORT_CODE(KEYCODE_F12) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11)) PORT_CHANGED_MEMBER(DEVICE_SELF, vector06_state, f11_button, 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AP2") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) PORT_CHANGED_MEMBER(DEVICE_SELF, vector06_state, f12_button, 0) INPUT_PORTS_END @@ -162,11 +170,11 @@ void vector06_state::vector06(machine_config &config) { /* basic machine hardware */ I8080(config, m_maincpu, 3000000); // actual speed is wrong due to unemulated latency - m_maincpu->set_addrmap(AS_PROGRAM, &vector06_state::vector06_mem); - m_maincpu->set_addrmap(AS_IO, &vector06_state::vector06_io); - m_maincpu->out_status_func().set(FUNC(vector06_state::vector06_status_callback)); - m_maincpu->set_vblank_int("screen", FUNC(vector06_state::vector06_interrupt)); - m_maincpu->set_irq_acknowledge_callback(FUNC(vector06_state::vector06_irq_callback)); + m_maincpu->set_addrmap(AS_PROGRAM, &vector06_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &vector06_state::io_map); + m_maincpu->out_status_func().set(FUNC(vector06_state::status_callback)); + m_maincpu->set_vblank_int("screen", FUNC(vector06_state::irq0_line_hold)); + m_maincpu->set_irq_acknowledge_callback(FUNC(vector06_state::irq_callback)); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -174,7 +182,7 @@ void vector06_state::vector06(machine_config &config) m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ m_screen->set_size(256+64, 256+64); m_screen->set_visarea(0, 256+64-1, 0, 256+64-1); - m_screen->set_screen_update(FUNC(vector06_state::screen_update_vector06)); + m_screen->set_screen_update(FUNC(vector06_state::screen_update)); m_screen->set_palette(m_palette); PALETTE(config, m_palette, palette_device::BLACK, 16); @@ -182,17 +190,17 @@ void vector06_state::vector06(machine_config &config) SPEAKER(config, "mono").front_center(); /* devices */ - I8255(config, m_ppi8255); - m_ppi8255->in_pb_callback().set(FUNC(vector06_state::vector06_8255_portb_r)); - m_ppi8255->in_pc_callback().set(FUNC(vector06_state::vector06_8255_portc_r)); - m_ppi8255->out_pa_callback().set(FUNC(vector06_state::vector06_8255_porta_w)); - m_ppi8255->out_pb_callback().set(FUNC(vector06_state::vector06_8255_portb_w)); + I8255(config, m_ppi1); + m_ppi1->in_pb_callback().set(FUNC(vector06_state::ppi1_portb_r)); + m_ppi1->in_pc_callback().set(FUNC(vector06_state::ppi1_portc_r)); + m_ppi1->out_pa_callback().set(FUNC(vector06_state::ppi1_porta_w)); + m_ppi1->out_pb_callback().set(FUNC(vector06_state::ppi1_portb_w)); - I8255(config, m_ppi8255_2); - m_ppi8255_2->in_pb_callback().set(FUNC(vector06_state::vector06_romdisk_portb_r)); - m_ppi8255_2->out_pa_callback().set(FUNC(vector06_state::vector06_romdisk_porta_w)); - m_ppi8255_2->out_pb_callback().set(FUNC(vector06_state::vector06_romdisk_portb_w)); - m_ppi8255_2->out_pc_callback().set(FUNC(vector06_state::vector06_romdisk_portc_w)); + I8255(config, m_ppi2); + m_ppi2->in_pb_callback().set(FUNC(vector06_state::ppi2_portb_r)); + m_ppi2->out_pa_callback().set(FUNC(vector06_state::ppi2_porta_w)); + m_ppi2->out_pb_callback().set(FUNC(vector06_state::ppi2_portb_w)); + m_ppi2->out_pc_callback().set(FUNC(vector06_state::ppi2_portc_w)); CASSETTE(config, m_cassette); m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); @@ -200,8 +208,8 @@ void vector06_state::vector06(machine_config &config) KR1818VG93(config, m_fdc, 1_MHz_XTAL); - FLOPPY_CONNECTOR(config, "wd1793:0", vector06_floppies, "qd", vector06_state::floppy_formats); - FLOPPY_CONNECTOR(config, "wd1793:1", vector06_floppies, "qd", vector06_state::floppy_formats); + FLOPPY_CONNECTOR(config, "fdc:0", vector06_floppies, "qd", vector06_state::floppy_formats); + FLOPPY_CONNECTOR(config, "fdc:1", vector06_floppies, "qd", vector06_state::floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("vector06_flop"); /* cartridge */ @@ -213,58 +221,61 @@ void vector06_state::vector06(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); - PIT8253(config, m_pit8253, 0); - m_pit8253->set_clk<0>(1500000); - m_pit8253->set_clk<1>(1500000); - m_pit8253->set_clk<2>(1500000); - m_pit8253->out_handler<0>().set(FUNC(vector06_state::speaker_w)); - m_pit8253->out_handler<1>().set(FUNC(vector06_state::speaker_w)); - m_pit8253->out_handler<2>().set(FUNC(vector06_state::speaker_w)); + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(1500000); + m_pit->set_clk<1>(1500000); + m_pit->set_clk<2>(1500000); + m_pit->out_handler<0>().set(FUNC(vector06_state::speaker_w)); + m_pit->out_handler<1>().set(FUNC(vector06_state::speaker_w)); + m_pit->out_handler<2>().set(FUNC(vector06_state::speaker_w)); // optional AY8910(config, m_ay, 1773400).add_route(ALL_OUTPUTS, "mono", 0.50); } + /* ROM definition */ ROM_START( vector06 ) - ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "unboot32k", "Universal Boot 32K") - ROMX_LOAD( "unboot32k.rt", 0x10000, 0x8000, CRC(28c9b5cd) SHA1(8cd7fb658896a7066ae93b10eaafa0f12139ad81), ROM_BIOS(0)) + ROMX_LOAD( "unboot32k.rt", 0x0000, 0x8000, CRC(28c9b5cd) SHA1(8cd7fb658896a7066ae93b10eaafa0f12139ad81), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "unboot2k", "Universal Boot 2K") - ROMX_LOAD( "unboot2k.rt", 0x10000, 0x0800, CRC(4c80dc31) SHA1(7e5e3acfdbea2e52b0d64c5868821deaec383815), ROM_BIOS(1)) + ROMX_LOAD( "unboot2k.rt", 0x0000, 0x0800, CRC(4c80dc31) SHA1(7e5e3acfdbea2e52b0d64c5868821deaec383815), ROM_BIOS(1)) ROM_SYSTEM_BIOS(2, "coman", "Boot Coman") - ROMX_LOAD( "coman.rt", 0x10000, 0x0800, CRC(f8c4a85a) SHA1(47fa8b02f09a1d06aa63a2b90b2597b1d93d976f), ROM_BIOS(2)) + ROMX_LOAD( "coman.rt", 0x0000, 0x0800, CRC(f8c4a85a) SHA1(47fa8b02f09a1d06aa63a2b90b2597b1d93d976f), ROM_BIOS(2)) ROM_SYSTEM_BIOS(3, "bootbyte", "Boot Byte") - ROMX_LOAD( "bootbyte.rt", 0x10000, 0x0800, CRC(3b42fd9d) SHA1(a112f4fe519bc3dbee85b09040d4804a17c9eda2), ROM_BIOS(3)) + ROMX_LOAD( "bootbyte.rt", 0x0000, 0x0800, CRC(3b42fd9d) SHA1(a112f4fe519bc3dbee85b09040d4804a17c9eda2), ROM_BIOS(3)) ROM_SYSTEM_BIOS(4, "bootos", "Boot OS") - ROMX_LOAD( "bootos.rt", 0x10000, 0x0200, CRC(46bef038) SHA1(6732f4a360cd38112c53c458842d31f5b035cf59), ROM_BIOS(4)) + ROMX_LOAD( "bootos.rt", 0x0000, 0x0200, CRC(46bef038) SHA1(6732f4a360cd38112c53c458842d31f5b035cf59), ROM_BIOS(4)) ROM_SYSTEM_BIOS(5, "boot512", "Boot 512") - ROMX_LOAD( "boot512.rt", 0x10000, 0x0200, CRC(a0b1c6b2) SHA1(f6fe15cb0974aed30f9b7aa72133324a66d1ed3f), ROM_BIOS(5)) + ROMX_LOAD( "boot512.rt", 0x0000, 0x0200, CRC(a0b1c6b2) SHA1(f6fe15cb0974aed30f9b7aa72133324a66d1ed3f), ROM_BIOS(5)) ROM_END ROM_START( vec1200 ) - ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "vec1200.bin", 0x10000, 0x2000, CRC(37349224) SHA1(060fbb2c1a89040c929521cfd58cb6f1431a8b75)) + ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "vec1200.bin", 0x0000, 0x2000, CRC(37349224) SHA1(060fbb2c1a89040c929521cfd58cb6f1431a8b75)) ROM_REGION( 0x0200, "palette", 0 ) ROM_LOAD( "palette.bin", 0x0000, 0x0200, CRC(74b7376b) SHA1(fb56b60babd7e6ed68e5f4e791ad2800d7ef6729)) ROM_END ROM_START( pk6128c ) - ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "6128.bin", 0x10000, 0x4000, CRC(d4f68433) SHA1(ef5ac75f9240ca8996689c23642d4e47e5e774d8)) + ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "6128.bin", 0x0000, 0x4000, CRC(d4f68433) SHA1(ef5ac75f9240ca8996689c23642d4e47e5e774d8)) ROM_END -ROM_START( krista2 ) - ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "krista2.epr", 0x10000, 0x0200, CRC(df5440b0) SHA1(bcbbb3cc10aeb17c1262b45111d20279266b9ba4)) +ROM_START( krista2 ) // appears it wants to load a tape at boot + ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "krista2.epr", 0x0000, 0x0200, CRC(df5440b0) SHA1(bcbbb3cc10aeb17c1262b45111d20279266b9ba4)) + + ROM_REGION( 0x0200, "palette", 0 ) ROM_LOAD( "krista2.pal", 0x0000, 0x0200, CRC(b243da33) SHA1(9af7873e6f8bf452c8d831833ffb02dce833c095)) ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1987, vector06, 0, 0, vector06, vector06, vector06_state, empty_init, "", "Vector 06c", 0) -COMP( 1987, vec1200, vector06, 0, vector06, vector06, vector06_state, empty_init, "", "Vector 1200", MACHINE_NOT_WORKING) -COMP( 1987, pk6128c, vector06, 0, vector06, vector06, vector06_state, empty_init, "", "PK-6128c", MACHINE_NOT_WORKING) -COMP( 1987, krista2, vector06, 0, vector06, vector06, vector06_state, empty_init, "", "Krista-2", MACHINE_NOT_WORKING) +COMP( 1987, vector06, 0, 0, vector06, vector06, vector06_state, empty_init, "", "Vector 06c", MACHINE_SUPPORTS_SAVE ) +COMP( 1987, vec1200, vector06, 0, vector06, vector06, vector06_state, empty_init, "", "Vector 1200", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 1987, pk6128c, vector06, 0, vector06, vector06, vector06_state, empty_init, "", "PK-6128c", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 1987, krista2, vector06, 0, vector06, vector06, vector06_state, empty_init, "", "Krista-2", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/vector06.h b/src/mame/includes/vector06.h index 492fd032680..de71b842273 100644 --- a/src/mame/includes/vector06.h +++ b/src/mame/includes/vector06.h @@ -32,61 +32,61 @@ class vector06_state : public driver_device { public: - vector06_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_speaker(*this, "speaker"), - m_cassette(*this, "cassette"), - m_cart(*this, "cartslot"), - m_fdc(*this, "wd1793"), - m_floppy0(*this, "wd1793:0"), - m_floppy1(*this, "wd1793:1"), - m_ay(*this, "aysnd"), - m_ram(*this, RAM_TAG), - m_palette(*this, "palette"), - m_screen(*this, "screen"), - m_ppi8255(*this, "ppi8255"), - m_ppi8255_2(*this, "ppi8255_2"), - m_pit8253(*this, "pit8253"), - m_bank1(*this, "bank1"), - m_bank2(*this, "bank2"), - m_bank3(*this, "bank3"), - m_region_maincpu(*this, "maincpu"), - m_line(*this, "LINE.%u", 0), - m_reset(*this, "RESET") + vector06_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_rom(*this, "maincpu") + , m_speaker(*this, "speaker") + , m_cassette(*this, "cassette") + , m_cart(*this, "cartslot") + , m_fdc(*this, "fdc") + , m_floppy0(*this, "fdc:0") + , m_floppy1(*this, "fdc:1") + , m_ay(*this, "aysnd") + , m_ram(*this, RAM_TAG) + , m_palette(*this, "palette") + , m_screen(*this, "screen") + , m_ppi1(*this, "ppi1") + , m_ppi2(*this, "ppi2") + , m_pit(*this, "pit") + , m_bank1(*this, "bank1") + , m_bank2(*this, "bank2") + , m_bank3(*this, "bank3") + , m_io_keyboard(*this, "LINE.%u", 0U) + , m_io_reset(*this, "RESET") { } void vector06(machine_config &config); + DECLARE_INPUT_CHANGED_MEMBER(f11_button); + DECLARE_INPUT_CHANGED_MEMBER(f12_button); private: DECLARE_FLOPPY_FORMATS(floppy_formats); - uint8_t vector06_8255_portb_r(); - uint8_t vector06_8255_portc_r(); - void vector06_8255_porta_w(uint8_t data); - void vector06_8255_portb_w(uint8_t data); - void vector06_color_set(uint8_t data); - uint8_t vector06_romdisk_portb_r(); - void vector06_romdisk_portb_w(uint8_t data); - void vector06_romdisk_porta_w(uint8_t data); - void vector06_romdisk_portc_w(uint8_t data); - void vector06_disc_w(uint8_t data); - void vector06_status_callback(uint8_t data); - void vector06_ramdisk_w(uint8_t data); + uint8_t ppi1_portb_r(); + uint8_t ppi1_portc_r(); + void ppi1_porta_w(uint8_t data); + void ppi1_portb_w(uint8_t data); + void color_set(uint8_t data); + uint8_t ppi2_portb_r(); + void ppi2_portb_w(uint8_t data); + void ppi2_porta_w(uint8_t data); + void ppi2_portc_w(uint8_t data); + void disc_w(uint8_t data); + void status_callback(uint8_t data); + void ramdisk_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(speaker_w); - void vector06_set_video_mode(int width); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_vector06(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(vector06_interrupt); - TIMER_CALLBACK_MEMBER(reset_check_callback); - IRQ_CALLBACK_MEMBER(vector06_irq_callback); + void machine_start() override; + void machine_reset() override; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(irq_callback); + void update_mem(); - void vector06_io(address_map &map); - void vector06_mem(address_map &map); + void io_map(address_map &map); + void mem_map(address_map &map); required_device m_maincpu; + required_region_ptr m_rom; required_device m_speaker; required_device m_cassette; required_device m_cart; @@ -97,28 +97,24 @@ private: required_device m_ram; required_device m_palette; required_device m_screen; - required_device m_ppi8255, m_ppi8255_2; - required_device m_pit8253; + required_device m_ppi1, m_ppi2; + required_device m_pit; required_memory_bank m_bank1; required_memory_bank m_bank2; required_memory_bank m_bank3; - required_memory_region m_region_maincpu; - required_ioport_array<9> m_line; - required_ioport m_reset; + required_ioport_array<9> m_io_keyboard; + required_ioport m_io_reset; uint8_t m_keyboard_mask; uint8_t m_color_index; - uint8_t m_video_mode; uint8_t m_romdisk_msb; uint8_t m_romdisk_lsb; uint8_t m_vblank_state; uint8_t m_rambank; uint8_t m_aylatch; + bool m_video_mode; bool m_stack_state; bool m_romen; - emu_timer *m_reset_check_timer; - - void update_mem(); }; #endif // MAME_INCLUDES_VECTOR06_H diff --git a/src/mame/machine/vector06.cpp b/src/mame/machine/vector06.cpp index 9d29160cb6d..630c0948fec 100644 --- a/src/mame/machine/vector06.cpp +++ b/src/mame/machine/vector06.cpp @@ -14,23 +14,19 @@ #include "screen.h" -uint8_t vector06_state::vector06_8255_portb_r() +uint8_t vector06_state::ppi1_portb_r() { uint8_t key = 0xff; - if (BIT(m_keyboard_mask, 0)) key &= m_line[0]->read(); - if (BIT(m_keyboard_mask, 1)) key &= m_line[1]->read(); - if (BIT(m_keyboard_mask, 2)) key &= m_line[2]->read(); - if (BIT(m_keyboard_mask, 3)) key &= m_line[3]->read(); - if (BIT(m_keyboard_mask, 4)) key &= m_line[4]->read(); - if (BIT(m_keyboard_mask, 5)) key &= m_line[5]->read(); - if (BIT(m_keyboard_mask, 6)) key &= m_line[6]->read(); - if (BIT(m_keyboard_mask, 7)) key &= m_line[7]->read(); + for (u8 i = 0; i < 8; i++) + if (BIT(m_keyboard_mask, i)) + key &= m_io_keyboard[i]->read(); + return key; } -uint8_t vector06_state::vector06_8255_portc_r() +uint8_t vector06_state::ppi1_portc_r() { - uint8_t ret = m_line[8]->read(); + uint8_t ret = m_io_keyboard[8]->read(); if (m_cassette->input() > 0) ret |= 0x10; @@ -38,28 +34,24 @@ uint8_t vector06_state::vector06_8255_portc_r() return ret; } -void vector06_state::vector06_8255_porta_w(uint8_t data) +void vector06_state::ppi1_porta_w(uint8_t data) { m_keyboard_mask = data ^ 0xff; } -void vector06_state::vector06_set_video_mode(int width) -{ - rectangle visarea(0, width+64-1, 0, 256+64-1); - m_screen->configure(width+64, 256+64, visarea, m_screen->frame_period().attoseconds()); -} - -void vector06_state::vector06_8255_portb_w(uint8_t data) +void vector06_state::ppi1_portb_w(uint8_t data) { m_color_index = data & 0x0f; - if ((data & 0x10) != m_video_mode) + if (BIT(data, 4) != m_video_mode) { - m_video_mode = data & 0x10; - vector06_set_video_mode((m_video_mode==0x10) ? 512 : 256); + m_video_mode = BIT(data, 4); + u16 width = m_video_mode ? 512 : 256; + rectangle visarea(0, width+64-1, 0, 256+64-1); + m_screen->configure(width+64, 256+64, visarea, m_screen->frame_period().attoseconds()); } } -void vector06_state::vector06_color_set(uint8_t data) +void vector06_state::color_set(uint8_t data) { uint8_t r = (data & 7) << 5; uint8_t g = ((data >> 3) & 7) << 5; @@ -68,7 +60,7 @@ void vector06_state::vector06_color_set(uint8_t data) } -uint8_t vector06_state::vector06_romdisk_portb_r() +uint8_t vector06_state::ppi2_portb_r() { uint16_t addr = ((m_romdisk_msb & 0x7f) << 8) | m_romdisk_lsb; if ((m_romdisk_msb & 0x80) && m_cart->exists() && addr < m_cart->get_rom_size()) @@ -77,46 +69,42 @@ uint8_t vector06_state::vector06_romdisk_portb_r() return m_ay->data_r(); } -void vector06_state::vector06_romdisk_portb_w(uint8_t data) +void vector06_state::ppi2_portb_w(uint8_t data) { m_aylatch = data; } -void vector06_state::vector06_romdisk_porta_w(uint8_t data) +void vector06_state::ppi2_porta_w(uint8_t data) { m_romdisk_lsb = data; } -void vector06_state::vector06_romdisk_portc_w (uint8_t data) +void vector06_state::ppi2_portc_w (uint8_t data) { if (data & 4) m_ay->address_data_w((data >> 1) & 1, m_aylatch); m_romdisk_msb = data; } -INTERRUPT_GEN_MEMBER(vector06_state::vector06_interrupt) -{ - device.execute().set_input_line(0, HOLD_LINE); -} - -IRQ_CALLBACK_MEMBER(vector06_state::vector06_irq_callback) +IRQ_CALLBACK_MEMBER(vector06_state::irq_callback) { // Interrupt is RST 7 return 0xff; } -TIMER_CALLBACK_MEMBER(vector06_state::reset_check_callback) +INPUT_CHANGED_MEMBER(vector06_state::f11_button) { - uint8_t val = m_reset->read(); - - if (BIT(val, 0)) + if (newval) { m_romen = true; update_mem(); m_maincpu->reset(); } +} - if (BIT(val, 1)) +INPUT_CHANGED_MEMBER(vector06_state::f12_button) +{ + if (newval) { m_romen = false; update_mem(); @@ -124,7 +112,7 @@ TIMER_CALLBACK_MEMBER(vector06_state::reset_check_callback) } } -void vector06_state::vector06_disc_w(uint8_t data) +void vector06_state::disc_w(uint8_t data) { floppy_image_device *floppy = nullptr; @@ -146,26 +134,28 @@ void vector06_state::vector06_disc_w(uint8_t data) void vector06_state::update_mem() { - if ((m_rambank & 0x10) && m_stack_state) { - int sentry = ((m_rambank >> 2) & 3) + 1; + if (BIT(m_rambank, 4) && m_stack_state) + { + u8 sentry = ((m_rambank >> 2) & 3) + 1; m_bank1->set_entry(sentry); m_bank3->set_entry(sentry); - m_bank2->set_base(m_ram->pointer() + sentry * 0x10000); + m_bank2->set_entry(sentry + 1u); } - else { + else + { m_bank1->set_entry(0); - int ventry = 0; - if (m_rambank & 0x20) + u8 ventry = 0; + if (BIT(m_rambank, 5)) ventry = (m_rambank & 3) + 1; m_bank3->set_entry(ventry); if (m_romen) - m_bank2->set_base(m_region_maincpu->base() + 0x10000); + m_bank2->set_entry(0); else - m_bank2->set_base(m_ram->pointer()); + m_bank2->set_entry(1); } } -void vector06_state::vector06_ramdisk_w(uint8_t data) +void vector06_state::ramdisk_w(uint8_t data) { const uint8_t oldbank = m_rambank; m_rambank = data; @@ -173,11 +163,11 @@ void vector06_state::vector06_ramdisk_w(uint8_t data) update_mem(); } -void vector06_state::vector06_status_callback(uint8_t data) +void vector06_state::status_callback(uint8_t data) { const bool oldstate = m_stack_state; m_stack_state = bool(data & i8080_cpu_device::STATUS_STACK); - if (oldstate != m_stack_state && (m_rambank & 0x10)) + if ((oldstate != m_stack_state) && BIT(m_rambank, 4)) update_mem(); } @@ -188,8 +178,23 @@ WRITE_LINE_MEMBER(vector06_state::speaker_w) void vector06_state::machine_start() { - m_reset_check_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vector06_state::reset_check_callback), this)); - m_reset_check_timer->adjust(attotime::from_hz(50), 0, attotime::from_hz(50)); + u8 *r = m_ram->pointer(); + + m_bank1->configure_entries(0, 5, r, 0x10000); + m_bank2->configure_entry(0, m_rom); + m_bank2->configure_entries(1, 5, r, 0x10000); + m_bank3->configure_entries(0, 5, r + 0xa000, 0x10000); + + save_item(NAME(m_keyboard_mask)); + save_item(NAME(m_color_index)); + save_item(NAME(m_romdisk_msb)); + save_item(NAME(m_romdisk_lsb)); + save_item(NAME(m_vblank_state)); + save_item(NAME(m_rambank)); + save_item(NAME(m_aylatch)); + save_item(NAME(m_video_mode)); + save_item(NAME(m_stack_state)); + save_item(NAME(m_romen)); } void vector06_state::machine_reset() @@ -198,13 +203,12 @@ void vector06_state::machine_reset() m_rambank = 0; m_romen = true; - m_bank1->configure_entries(0, 5, m_ram->pointer(), 0x10000); - for (int i = 0; i < 5; i++) - m_bank3->configure_entry(i, m_ram->pointer() + 0x10000 * i + 0xa000); - update_mem(); m_keyboard_mask = 0; m_color_index = 0; m_video_mode = 0; + m_bank1->set_entry(0); + m_bank2->set_entry(0); + m_bank3->set_entry(0); } diff --git a/src/mame/video/vector06.cpp b/src/mame/video/vector06.cpp index f9f15eaa04e..9acc3d1c823 100644 --- a/src/mame/video/vector06.cpp +++ b/src/mame/video/vector06.cpp @@ -13,18 +13,14 @@ #include "includes/vector06.h" -void vector06_state::video_start() -{ -} - -uint32_t vector06_state::screen_update_vector06(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t vector06_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { uint8_t code1,code2,code3,code4; uint8_t col; int y, x, b,draw_y; uint8_t *ram = m_ram->pointer(); - int width = (m_video_mode==0x00) ? 256 : 512; + u16 width = (m_video_mode) ? 512 : 256; rectangle screen_area(0,width+64-1,0,256+64-1); // fill border color bitmap.fill(m_color_index, screen_area); @@ -42,12 +38,13 @@ uint32_t vector06_state::screen_update_vector06(screen_device &screen, bitmap_in code4 = ram[0xe000 + x*256 + y]; for (b = 0; b < 8; b++) { - col = ((code1 >> b) & 0x01) * 8 + ((code2 >> b) & 0x01) * 4 + ((code3 >> b) & 0x01)* 2+ ((code4 >> b) & 0x01); - if (m_video_mode==0x00) { - bitmap.pix16(draw_y, x*8+(7-b)+32) = col; - } else { - bitmap.pix16(draw_y, x*16+(7-b)*2+1+32) = ((code2 >> b) & 0x01) * 2; - bitmap.pix16(draw_y, x*16+(7-b)*2+32) = ((code3 >> b) & 0x01) * 2; + col = BIT(code1, b) * 8 + BIT(code2, b) * 4 + BIT(code3, b)* 2+ BIT(code4, b); + if (!m_video_mode) + bitmap.pix16(draw_y, x*8+(7-b)+32) = col; + else + { + bitmap.pix16(draw_y, x*16+(7-b)*2+1+32) = BIT(code2, b) * 2; + bitmap.pix16(draw_y, x*16+(7-b)*2+32) = BIT(code3, b) * 2; } } }