first round of svi318.c cleanup (with some tagmap reduction too). nw.

This commit is contained in:
Fabio Priuli 2014-09-21 17:11:36 +00:00
parent d7d4d78699
commit 55ce0b996f
3 changed files with 212 additions and 272 deletions

View File

@ -17,22 +17,22 @@
#include "rendlay.h" #include "rendlay.h"
static ADDRESS_MAP_START( svi318_mem, AS_PROGRAM, 8, svi318_state ) static ADDRESS_MAP_START( svi318_mem, AS_PROGRAM, 8, svi318_state )
AM_RANGE( 0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(svi318_writemem1 ) AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(writemem1)
AM_RANGE( 0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(svi318_writemem2 ) AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(writemem2)
AM_RANGE( 0xc000, 0xffff) AM_READ_BANK("bank3") AM_WRITE(svi318_writemem3 ) AM_RANGE(0xc000, 0xffff) AM_READ_BANK("bank3") AM_WRITE(writemem3)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( svi328_806_mem, AS_PROGRAM, 8, svi318_state ) static ADDRESS_MAP_START( svi328_806_mem, AS_PROGRAM, 8, svi318_state )
AM_RANGE( 0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(svi318_writemem1 ) AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(writemem1)
AM_RANGE( 0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(svi318_writemem2 ) AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(writemem2)
AM_RANGE( 0xc000, 0xefff) AM_READ_BANK("bank3") AM_WRITE(svi318_writemem3 ) AM_RANGE(0xc000, 0xefff) AM_READ_BANK("bank3") AM_WRITE(writemem3)
AM_RANGE( 0xf000, 0xffff) AM_READ_BANK("bank4") AM_WRITE(svi318_writemem4 ) AM_RANGE(0xf000, 0xffff) AM_READ_BANK("bank4") AM_WRITE(writemem4)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( svi318_io, AS_IO, 8, svi318_state ) static ADDRESS_MAP_START( svi318_io, AS_IO, 8, svi318_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE( 0x00, 0x38) AM_READWRITE(svi318_io_ext_r, svi318_io_ext_w ) AM_RANGE(0x00, 0x38) AM_READWRITE(io_ext_r, io_ext_w )
AM_RANGE(0x80, 0x80) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write) AM_RANGE(0x80, 0x80) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write)
AM_RANGE(0x81, 0x81) AM_DEVWRITE("tms9928a", tms9928a_device, register_write) AM_RANGE(0x81, 0x81) AM_DEVWRITE("tms9928a", tms9928a_device, register_write)
AM_RANGE(0x84, 0x84) AM_DEVREAD("tms9928a", tms9928a_device, vram_read) AM_RANGE(0x84, 0x84) AM_DEVREAD("tms9928a", tms9928a_device, vram_read)
@ -40,14 +40,14 @@ static ADDRESS_MAP_START( svi318_io, AS_IO, 8, svi318_state )
AM_RANGE(0x88, 0x88) AM_DEVWRITE("ay8910", ay8910_device, address_w) AM_RANGE(0x88, 0x88) AM_DEVWRITE("ay8910", ay8910_device, address_w)
AM_RANGE(0x8c, 0x8c) AM_DEVWRITE("ay8910", ay8910_device, data_w) AM_RANGE(0x8c, 0x8c) AM_DEVWRITE("ay8910", ay8910_device, data_w)
AM_RANGE(0x90, 0x90) AM_DEVREAD("ay8910", ay8910_device, data_r) AM_RANGE(0x90, 0x90) AM_DEVREAD("ay8910", ay8910_device, data_r)
AM_RANGE( 0x96, 0x97) AM_WRITE(svi318_ppi_w) AM_RANGE(0x96, 0x97) AM_WRITE(ppi_w)
AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read) AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( svi328_806_io, AS_IO, 8, svi318_state ) static ADDRESS_MAP_START( svi328_806_io, AS_IO, 8, svi318_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE( 0x00, 0x58) AM_READWRITE(svi318_io_ext_r, svi318_io_ext_w ) AM_RANGE(0x00, 0x58) AM_READWRITE(io_ext_r, io_ext_w )
AM_RANGE(0x80, 0x80) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write) AM_RANGE(0x80, 0x80) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write)
AM_RANGE(0x81, 0x81) AM_DEVWRITE("tms9928a", tms9928a_device, register_write) AM_RANGE(0x81, 0x81) AM_DEVWRITE("tms9928a", tms9928a_device, register_write)
AM_RANGE(0x84, 0x84) AM_DEVREAD("tms9928a", tms9928a_device, vram_read) AM_RANGE(0x84, 0x84) AM_DEVREAD("tms9928a", tms9928a_device, vram_read)
@ -55,7 +55,7 @@ static ADDRESS_MAP_START( svi328_806_io, AS_IO, 8, svi318_state )
AM_RANGE(0x88, 0x88) AM_DEVWRITE("ay8910", ay8910_device, address_w) AM_RANGE(0x88, 0x88) AM_DEVWRITE("ay8910", ay8910_device, address_w)
AM_RANGE(0x8c, 0x8c) AM_DEVWRITE("ay8910", ay8910_device, data_w) AM_RANGE(0x8c, 0x8c) AM_DEVWRITE("ay8910", ay8910_device, data_w)
AM_RANGE(0x90, 0x90) AM_DEVREAD("ay8910", ay8910_device, data_r) AM_RANGE(0x90, 0x90) AM_DEVREAD("ay8910", ay8910_device, data_r)
AM_RANGE( 0x96, 0x97) AM_WRITE(svi318_ppi_w) AM_RANGE(0x96, 0x97) AM_WRITE(ppi_w)
AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read) AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -101,7 +101,7 @@ behave? Do they need multiple mapping in natural keyboard?
*/ */
static INPUT_PORTS_START( svi318 ) static INPUT_PORTS_START( svi318 )
PORT_START("LINE0") PORT_START("LINE.0")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
@ -111,7 +111,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
PORT_START("LINE1") PORT_START("LINE.1")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR(';') PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR(';')
@ -121,7 +121,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_START("LINE2") PORT_START("LINE.2")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
@ -131,7 +131,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
PORT_START("LINE3") PORT_START("LINE.3")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('0') PORT_CHAR('J') PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('0') PORT_CHAR('J')
@ -141,7 +141,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
PORT_START("LINE4") PORT_START("LINE.4")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
@ -151,7 +151,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
PORT_START("LINE5") PORT_START("LINE.5")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
@ -161,7 +161,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_START("LINE6") PORT_START("LINE.6")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Grph") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Grph") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
@ -171,7 +171,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_START("LINE7") PORT_START("LINE.7")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1 F6") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F6)) PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1 F6") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F6))
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2 F7") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F7)) PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2 F7") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F7))
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3 F8") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3 F8") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F8))
@ -181,7 +181,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ins Paste") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ins Paste") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
PORT_START("LINE8") PORT_START("LINE.8")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del Cut") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del Cut") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
@ -191,10 +191,10 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_START("LINE9") PORT_START("LINE.9")
PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("LINE10") PORT_START("LINE.10")
PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("JOYSTICKS") PORT_START("JOYSTICKS")
@ -217,7 +217,7 @@ static INPUT_PORTS_START( svi328 )
PORT_INCLUDE( svi318 ) PORT_INCLUDE( svi318 )
PORT_MODIFY("LINE9") PORT_MODIFY("LINE.9")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
@ -227,7 +227,7 @@ static INPUT_PORTS_START( svi328 )
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
PORT_MODIFY("LINE10") PORT_MODIFY("LINE.10")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
@ -270,14 +270,14 @@ static MACHINE_CONFIG_START( svi318, svi318_state )
MCFG_MACHINE_RESET_OVERRIDE(svi318_state, svi318) MCFG_MACHINE_RESET_OVERRIDE(svi318_state, svi318)
MCFG_DEVICE_ADD("ppi8255", I8255, 0) MCFG_DEVICE_ADD("ppi8255", I8255, 0)
MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, svi318_ppi_port_a_r)) MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, ppi_port_a_r))
MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, svi318_ppi_port_b_r)) MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, ppi_port_b_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, svi318_ppi_port_c_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, ppi_port_c_w))
MCFG_DEVICE_ADD("ins8250_0", INS8250, 1000000) MCFG_DEVICE_ADD("ins8250_0", INS8250, 1000000)
MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, svi318_ins8250_interrupt)) MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
MCFG_DEVICE_ADD("ins8250_1", INS8250, 3072000) MCFG_DEVICE_ADD("ins8250_1", INS8250, 3072000)
MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, svi318_ins8250_interrupt)) MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
/* Video hardware */ /* Video hardware */
MCFG_DEVICE_ADD("tms9928a", TMS9929A, XTAL_10_738635MHz / 2) MCFG_DEVICE_ADD("tms9928a", TMS9929A, XTAL_10_738635MHz / 2)
@ -293,8 +293,8 @@ static MACHINE_CONFIG_START( svi318, svi318_state )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("ay8910", AY8910, 1789773) MCFG_SOUND_ADD("ay8910", AY8910, 1789773)
MCFG_AY8910_PORT_A_READ_CB(READ8(svi318_state, svi318_psg_port_a_r)) MCFG_AY8910_PORT_A_READ_CB(READ8(svi318_state, psg_port_a_r))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi318_state, svi318_psg_port_b_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi318_state, psg_port_b_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
/* printer */ /* printer */
@ -310,8 +310,8 @@ static MACHINE_CONFIG_START( svi318, svi318_state )
MCFG_DEVICE_ADD("wd179x", FD1793, 0) MCFG_DEVICE_ADD("wd179x", FD1793, 0)
MCFG_WD17XX_DEFAULT_DRIVE2_TAGS MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(svi318_state,svi_fdc_intrq_w)) MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(svi318_state, fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(svi318_state,svi_fdc_drq_w)) MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(svi318_state, fdc_drq_w))
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(svi318_floppy_interface) MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(svi318_floppy_interface)
@ -387,14 +387,14 @@ static MACHINE_CONFIG_START( svi328_806, svi318_state )
MCFG_MACHINE_RESET_OVERRIDE(svi318_state, svi328_806) MCFG_MACHINE_RESET_OVERRIDE(svi318_state, svi328_806)
MCFG_DEVICE_ADD("ppi8255", I8255, 0) MCFG_DEVICE_ADD("ppi8255", I8255, 0)
MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, svi318_ppi_port_a_r)) MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, ppi_port_a_r))
MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, svi318_ppi_port_b_r)) MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, ppi_port_b_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, svi318_ppi_port_c_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, ppi_port_c_w))
MCFG_DEVICE_ADD("ins8250_0", INS8250, 1000000) MCFG_DEVICE_ADD("ins8250_0", INS8250, 1000000)
MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, svi318_ins8250_interrupt)) MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
MCFG_DEVICE_ADD("ins8250_1", INS8250, 3072000) MCFG_DEVICE_ADD("ins8250_1", INS8250, 3072000)
MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, svi318_ins8250_interrupt)) MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
/* Video hardware */ /* Video hardware */
MCFG_DEFAULT_LAYOUT(layout_dualhsxs) MCFG_DEFAULT_LAYOUT(layout_dualhsxs)
@ -430,8 +430,8 @@ static MACHINE_CONFIG_START( svi328_806, svi318_state )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("ay8910", AY8910, 1789773) MCFG_SOUND_ADD("ay8910", AY8910, 1789773)
MCFG_AY8910_PORT_A_READ_CB(READ8(svi318_state, svi318_psg_port_a_r)) MCFG_AY8910_PORT_A_READ_CB(READ8(svi318_state, psg_port_a_r))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi318_state, svi318_psg_port_b_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi318_state, psg_port_b_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
/* printer */ /* printer */
@ -447,8 +447,8 @@ static MACHINE_CONFIG_START( svi328_806, svi318_state )
MCFG_DEVICE_ADD("wd179x", FD1793, 0) MCFG_DEVICE_ADD("wd179x", FD1793, 0)
MCFG_WD17XX_DEFAULT_DRIVE2_TAGS MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(svi318_state,svi_fdc_intrq_w)) MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(svi318_state, fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(svi318_state,svi_fdc_drq_w)) MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(svi318_state, fdc_drq_w))
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(svi318_floppy_interface) MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(svi318_floppy_interface)

View File

@ -74,17 +74,9 @@ public:
m_ins8250_0(*this, "ins8250_0"), m_ins8250_0(*this, "ins8250_0"),
m_ins8250_1(*this, "ins8250_1"), m_ins8250_1(*this, "ins8250_1"),
m_cart(*this, "cartslot"), m_cart(*this, "cartslot"),
m_line0(*this, "LINE0"), m_fd1793(*this, "wd179x"),
m_line1(*this, "LINE1"), m_crtc(*this, "crtc"),
m_line2(*this, "LINE2"), m_line(*this, "LINE"),
m_line3(*this, "LINE3"),
m_line4(*this, "LINE4"),
m_line5(*this, "LINE5"),
m_line6(*this, "LINE6"),
m_line7(*this, "LINE7"),
m_line8(*this, "LINE8"),
m_line9(*this, "LINE9"),
m_line10(*this, "LINE10"),
m_joysticks(*this, "JOYSTICKS"), m_joysticks(*this, "JOYSTICKS"),
m_buttons(*this, "BUTTONS"), m_buttons(*this, "BUTTONS"),
m_palette(*this, "palette") { } m_palette(*this, "palette") { }
@ -92,19 +84,19 @@ public:
SVI_318 m_svi; SVI_318 m_svi;
int m_centronics_busy; int m_centronics_busy;
SVI318_FDC_STRUCT m_fdc; SVI318_FDC_STRUCT m_fdc;
DECLARE_WRITE8_MEMBER(svi318_ppi_w); DECLARE_WRITE8_MEMBER(ppi_w);
DECLARE_READ8_MEMBER(svi318_psg_port_a_r); DECLARE_READ8_MEMBER(psg_port_a_r);
DECLARE_WRITE8_MEMBER(svi318_psg_port_b_w); DECLARE_WRITE8_MEMBER(psg_port_b_w);
DECLARE_WRITE8_MEMBER(svi318_fdc_drive_motor_w); DECLARE_WRITE8_MEMBER(fdc_drive_motor_w);
DECLARE_WRITE8_MEMBER(svi318_fdc_density_side_w); DECLARE_WRITE8_MEMBER(fdc_density_side_w);
DECLARE_READ8_MEMBER(svi318_fdc_irqdrq_r); DECLARE_READ8_MEMBER(fdc_irqdrq_r);
DECLARE_WRITE8_MEMBER(svi806_ram_enable_w); DECLARE_WRITE8_MEMBER(svi806_ram_enable_w);
DECLARE_WRITE8_MEMBER(svi318_writemem1); DECLARE_WRITE8_MEMBER(writemem1);
DECLARE_WRITE8_MEMBER(svi318_writemem2); DECLARE_WRITE8_MEMBER(writemem2);
DECLARE_WRITE8_MEMBER(svi318_writemem3); DECLARE_WRITE8_MEMBER(writemem3);
DECLARE_WRITE8_MEMBER(svi318_writemem4); DECLARE_WRITE8_MEMBER(writemem4);
DECLARE_READ8_MEMBER(svi318_io_ext_r); DECLARE_READ8_MEMBER(io_ext_r);
DECLARE_WRITE8_MEMBER(svi318_io_ext_w); DECLARE_WRITE8_MEMBER(io_ext_w);
DECLARE_DRIVER_INIT(svi318); DECLARE_DRIVER_INIT(svi318);
DECLARE_MACHINE_START(svi318_pal); DECLARE_MACHINE_START(svi318_pal);
DECLARE_MACHINE_RESET(svi318); DECLARE_MACHINE_RESET(svi318);
@ -112,12 +104,12 @@ public:
DECLARE_VIDEO_START(svi328_806); DECLARE_VIDEO_START(svi328_806);
DECLARE_MACHINE_START(svi318_ntsc); DECLARE_MACHINE_START(svi318_ntsc);
DECLARE_WRITE_LINE_MEMBER(vdp_interrupt); DECLARE_WRITE_LINE_MEMBER(vdp_interrupt);
DECLARE_WRITE_LINE_MEMBER(svi318_ins8250_interrupt); DECLARE_WRITE_LINE_MEMBER(ins8250_interrupt);
DECLARE_READ8_MEMBER(svi318_ppi_port_a_r); DECLARE_READ8_MEMBER(ppi_port_a_r);
DECLARE_READ8_MEMBER(svi318_ppi_port_b_r); DECLARE_READ8_MEMBER(ppi_port_b_r);
DECLARE_WRITE8_MEMBER(svi318_ppi_port_c_w); DECLARE_WRITE8_MEMBER(ppi_port_c_w);
DECLARE_WRITE_LINE_MEMBER(svi_fdc_intrq_w); DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(svi_fdc_drq_w); DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
bool cart_verify(UINT8 *ROM); bool cart_verify(UINT8 *ROM);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart); DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
@ -136,17 +128,9 @@ protected:
required_device<ins8250_device> m_ins8250_0; required_device<ins8250_device> m_ins8250_0;
required_device<ins8250_device> m_ins8250_1; required_device<ins8250_device> m_ins8250_1;
required_device<generic_slot_device> m_cart; required_device<generic_slot_device> m_cart;
required_ioport m_line0; required_device<fd1793_device> m_fd1793;
required_ioport m_line1; optional_device<mc6845_device> m_crtc;
required_ioport m_line2; required_ioport_array<11> m_line;
required_ioport m_line3;
required_ioport m_line4;
required_ioport m_line5;
required_ioport m_line6;
required_ioport m_line7;
required_ioport m_line8;
required_ioport m_line9;
required_ioport m_line10;
required_ioport m_joysticks; required_ioport m_joysticks;
required_ioport m_buttons; required_ioport m_buttons;
public: public:

View File

@ -25,13 +25,14 @@ enum {
/* Serial ports */ /* Serial ports */
WRITE_LINE_MEMBER(svi318_state::svi318_ins8250_interrupt) WRITE_LINE_MEMBER(svi318_state::ins8250_interrupt)
{ {
if (m_svi.bankLow != SVI_CART) if (m_svi.bankLow != SVI_CART)
{ {
m_maincpu->set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE)); m_maincpu->set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE));
} }
} }
#if 0 #if 0
static INS8250_REFRESH_CONNECT( svi318_com_refresh_connected ) static INS8250_REFRESH_CONNECT( svi318_com_refresh_connected )
{ {
@ -86,18 +87,15 @@ DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
8 CASR Cassette, Read data 8 CASR Cassette, Read data
*/ */
READ8_MEMBER(svi318_state::svi318_ppi_port_a_r) READ8_MEMBER(svi318_state::ppi_port_a_r)
{ {
int data = 0x0f; int data = 0x0f;
if (m_cassette->input() > 0.0038) if (m_cassette->input() > 0.0038)
{
data |= 0x80; data |= 0x80;
}
if (!m_cassette->exists()) if (!m_cassette->exists())
{
data |= 0x40; data |= 0x40;
}
data |= m_buttons->read() & 0x30; data |= m_buttons->read() & 0x30;
return data; return data;
@ -116,23 +114,11 @@ READ8_MEMBER(svi318_state::svi318_ppi_port_a_r)
8 IN7 Keyboard, Column status of selected line 8 IN7 Keyboard, Column status of selected line
*/ */
READ8_MEMBER(svi318_state::svi318_ppi_port_b_r) READ8_MEMBER(svi318_state::ppi_port_b_r)
{ {
switch (m_svi.keyboard_row) if (m_svi.keyboard_row <= 10)
{ return m_line[m_svi.keyboard_row]->read();
case 0: return m_line0->read(); else
case 1: return m_line1->read();
case 2: return m_line2->read();
case 3: return m_line3->read();
case 4: return m_line4->read();
case 5: return m_line5->read();
case 6: return m_line6->read();
case 7: return m_line7->read();
case 8: return m_line8->read();
case 9: return m_line9->read();
case 10: return m_line10->read();
}
return 0xff; return 0xff;
} }
@ -149,7 +135,7 @@ READ8_MEMBER(svi318_state::svi318_ppi_port_b_r)
8 SOUND Keyboard, Click sound bit (pulse) 8 SOUND Keyboard, Click sound bit (pulse)
*/ */
WRITE8_MEMBER(svi318_state::svi318_ppi_port_c_w) WRITE8_MEMBER(svi318_state::ppi_port_c_w)
{ {
int val; int val;
@ -169,10 +155,10 @@ WRITE8_MEMBER(svi318_state::svi318_ppi_port_c_w)
/* cassette signal write */ /* cassette signal write */
m_cassette->output((data & 0x20) ? -1.0 : +1.0); m_cassette->output((data & 0x20) ? -1.0 : +1.0);
m_svi.keyboard_row = data & 0x0F; m_svi.keyboard_row = data & 0x0f;
} }
WRITE8_MEMBER(svi318_state::svi318_ppi_w) WRITE8_MEMBER(svi318_state::ppi_w)
{ {
m_ppi->write(space, offset + 2, data); m_ppi->write(space, offset + 2, data);
} }
@ -193,7 +179,7 @@ WRITE8_MEMBER(svi318_state::svi318_ppi_w)
8 RIGHT2 Joystick 2, Right 8 RIGHT2 Joystick 2, Right
*/ */
READ8_MEMBER(svi318_state::svi318_psg_port_a_r) READ8_MEMBER(svi318_state::psg_port_a_r)
{ {
return m_joysticks->read(); return m_joysticks->read();
} }
@ -214,7 +200,7 @@ READ8_MEMBER(svi318_state::svi318_psg_port_a_r)
with RAM are disabled. with RAM are disabled.
*/ */
WRITE8_MEMBER(svi318_state::svi318_psg_port_b_w) WRITE8_MEMBER(svi318_state::psg_port_b_w)
{ {
if ( (m_svi.bank_switch ^ data) & 0x20) if ( (m_svi.bank_switch ^ data) & 0x20)
set_led_status (machine(), 0, !(data & 0x20) ); set_led_status (machine(), 0, !(data & 0x20) );
@ -225,41 +211,38 @@ WRITE8_MEMBER(svi318_state::svi318_psg_port_b_w)
/* Disk drives */ /* Disk drives */
WRITE_LINE_MEMBER(svi318_state::svi_fdc_intrq_w) WRITE_LINE_MEMBER(svi318_state::fdc_intrq_w)
{ {
m_fdc.irq = state; m_fdc.irq = state;
} }
WRITE_LINE_MEMBER(svi318_state::svi_fdc_drq_w) WRITE_LINE_MEMBER(svi318_state::fdc_drq_w)
{ {
m_fdc.drq = state; m_fdc.drq = state;
} }
WRITE8_MEMBER(svi318_state::svi318_fdc_drive_motor_w) WRITE8_MEMBER(svi318_state::fdc_drive_motor_w)
{ {
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
switch (data & 3) switch (data & 3)
{ {
case 1: case 1:
fdc->set_drive(0); m_fd1793->set_drive(0);
m_fdc.driveselect = 0; m_fdc.driveselect = 0;
break; break;
case 2: case 2:
fdc->set_drive(1); m_fd1793->set_drive(1);
m_fdc.driveselect = 1; m_fdc.driveselect = 1;
break; break;
} }
} }
WRITE8_MEMBER(svi318_state::svi318_fdc_density_side_w) WRITE8_MEMBER(svi318_state::fdc_density_side_w)
{ {
fd1793_device *fdc = machine().device<fd1793_device>("wd179x"); m_fd1793->dden_w(BIT(data, 0));
m_fd1793->set_side(BIT(data, 1));
fdc->dden_w(BIT(data, 0));
fdc->set_side(BIT(data, 1));
} }
READ8_MEMBER(svi318_state::svi318_fdc_irqdrq_r) READ8_MEMBER(svi318_state::fdc_irqdrq_r)
{ {
UINT8 result = 0; UINT8 result = 0;
@ -272,21 +255,19 @@ READ8_MEMBER(svi318_state::svi318_fdc_irqdrq_r)
MC6845_UPDATE_ROW( svi318_state::crtc_update_row ) MC6845_UPDATE_ROW( svi318_state::crtc_update_row )
{ {
const rgb_t *palette = m_palette->palette()->entry_list_raw(); const rgb_t *palette = m_palette->palette()->entry_list_raw();
int i;
for( i = 0; i < x_count; i++ ) for (int i = 0; i < x_count; i++)
{ {
int j; UINT8 data = m_svi.svi806_gfx[m_svi.svi806_ram->u8((ma + i) & 0x7ff) * 16 + ra];
UINT8 data = m_svi.svi806_gfx[ m_svi.svi806_ram->u8(( ma + i ) & 0x7FF) * 16 + ra ];
if (i == cursor_x) if (i == cursor_x)
{ {
data = 0xFF; data = 0xFF;
} }
for( j=0; j < 8; j++ ) for (int j = 0; j < 8; j++)
{ {
bitmap.pix32(y, i * 8 + j ) = palette[TMS9928A_PALETTE_SIZE + ( ( data & 0x80 ) ? 1 : 0 )]; bitmap.pix32(y, i * 8 + j) = palette[TMS9928A_PALETTE_SIZE + BIT(data, 7)];
data = data << 1; data = data << 1;
} }
} }
@ -300,7 +281,7 @@ void svi318_state::svi318_80col_init()
/* The upper 2KB will be set to FFs and will never be written to */ /* The upper 2KB will be set to FFs and will never be written to */
m_svi.svi806_ram = machine().memory().region_alloc("gfx2", 0x1000, 1, ENDIANNESS_LITTLE); m_svi.svi806_ram = machine().memory().region_alloc("gfx2", 0x1000, 1, ENDIANNESS_LITTLE);
memset(m_svi.svi806_ram->base(), 0x00, 0x800); memset(m_svi.svi806_ram->base(), 0x00, 0x800);
memset( m_svi.svi806_ram->base() + 0x800, 0xFF, 0x800 ); memset(m_svi.svi806_ram->base() + 0x800, 0xff, 0x800);
m_svi.svi806_gfx = memregion("gfx1")->base(); m_svi.svi806_gfx = memregion("gfx1")->base();
} }
@ -460,9 +441,7 @@ DRIVER_INIT_MEMBER(svi318_state,svi318)
memset(&m_svi, 0, sizeof(m_svi)); memset(&m_svi, 0, sizeof(m_svi));
if (!strcmp(machine().system().name, "svi318") || !strcmp(machine().system().name, "svi318n")) if (!strcmp(machine().system().name, "svi318") || !strcmp(machine().system().name, "svi318n"))
{
m_svi.svi318 = 1; m_svi.svi318 = 1;
}
m_maincpu->set_input_line_vector(0, 0xff); m_maincpu->set_input_line_vector(0, 0xff);
@ -486,10 +465,9 @@ MACHINE_START_MEMBER(svi318_state, svi318_pal)
static void svi318_load_proc(device_image_interface &image) static void svi318_load_proc(device_image_interface &image)
{ {
svi318_state *state = image.device().machine().driver_data<svi318_state>(); svi318_state *state = image.device().machine().driver_data<svi318_state>();
int size; int size = image.length();
int id = floppy_get_drive(&image.device()); int id = floppy_get_drive(&image.device());
size = image.length();
switch (size) switch (size)
{ {
case 172032: /* SVI-328 SSDD */ case 172032: /* SVI-328 SSDD */
@ -506,12 +484,10 @@ static void svi318_load_proc(device_image_interface &image)
MACHINE_RESET_MEMBER(svi318_state, svi318) MACHINE_RESET_MEMBER(svi318_state, svi318)
{ {
int drive;
m_svi.bank_switch = 0xff; m_svi.bank_switch = 0xff;
svi318_set_banks(); svi318_set_banks();
for(drive=0;drive<2;drive++) for (int drive = 0; drive < 2; drive++)
{ {
floppy_get_device(machine(), drive)->floppy_install_load_proc(svi318_load_proc); floppy_get_device(machine(), drive)->floppy_install_load_proc(svi318_load_proc);
} }
@ -519,7 +495,7 @@ MACHINE_RESET_MEMBER(svi318_state,svi318)
/* Memory */ /* Memory */
WRITE8_MEMBER(svi318_state::svi318_writemem1) WRITE8_MEMBER(svi318_state::writemem1)
{ {
if (m_svi.bankLow_read_only) if (m_svi.bankLow_read_only)
return; return;
@ -527,7 +503,7 @@ WRITE8_MEMBER(svi318_state::svi318_writemem1)
m_svi.bankLow_ptr[offset] = data; m_svi.bankLow_ptr[offset] = data;
} }
WRITE8_MEMBER(svi318_state::svi318_writemem2) WRITE8_MEMBER(svi318_state::writemem2)
{ {
if (m_svi.bankHigh1_read_only) if (m_svi.bankHigh1_read_only)
return; return;
@ -535,7 +511,7 @@ WRITE8_MEMBER(svi318_state::svi318_writemem2)
m_svi.bankHigh1_ptr[offset] = data; m_svi.bankHigh1_ptr[offset] = data;
} }
WRITE8_MEMBER(svi318_state::svi318_writemem3) WRITE8_MEMBER(svi318_state::writemem3)
{ {
if (m_svi.bankHigh2_read_only) if (m_svi.bankHigh2_read_only)
return; return;
@ -543,7 +519,7 @@ WRITE8_MEMBER(svi318_state::svi318_writemem3)
m_svi.bankHigh2_ptr[offset] = data; m_svi.bankHigh2_ptr[offset] = data;
} }
WRITE8_MEMBER(svi318_state::svi318_writemem4) WRITE8_MEMBER(svi318_state::writemem4)
{ {
if (m_svi.svi806_ram_enabled) if (m_svi.svi806_ram_enabled)
{ {
@ -675,23 +651,15 @@ WRITE_LINE_MEMBER(svi318_state::write_centronics_busy)
m_centronics_busy = state; m_centronics_busy = state;
} }
READ8_MEMBER(svi318_state::svi318_io_ext_r) READ8_MEMBER(svi318_state::io_ext_r)
{ {
UINT8 data = 0xff;
device_t *device;
if (m_svi.bankLow == SVI_CART) if (m_svi.bankLow == SVI_CART)
{
return 0xff; return 0xff;
}
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
switch (offset) switch (offset)
{ {
case 0x12: case 0x12:
data = 0xfe | m_centronics_busy; return 0xfe | m_centronics_busy;
break;
case 0x20: case 0x20:
case 0x21: case 0x21:
@ -701,54 +669,44 @@ READ8_MEMBER(svi318_state::svi318_io_ext_r)
case 0x25: case 0x25:
case 0x26: case 0x26:
case 0x27: case 0x27:
data = m_ins8250_0->ins8250_r(space, offset & 7); return m_ins8250_0->ins8250_r(space, offset & 7);
break;
case 0x28: case 0x28:
case 0x29: case 0x29:
case 0x2A: case 0x2a:
case 0x2B: case 0x2b:
case 0x2C: case 0x2c:
case 0x2D: case 0x2d:
case 0x2E: case 0x2e:
case 0x2F: case 0x2f:
data = m_ins8250_1->ins8250_r(space, offset & 7); return m_ins8250_1->ins8250_r(space, offset & 7);
break;
case 0x30: case 0x30:
data = fdc->status_r(space, 0); return m_fd1793->status_r(space, 0);
break;
case 0x31: case 0x31:
data = fdc->track_r(space, 0); return m_fd1793->track_r(space, 0);
break;
case 0x32: case 0x32:
data = fdc->sector_r(space, 0); return m_fd1793->sector_r(space, 0);
break;
case 0x33: case 0x33:
data = fdc->data_r(space, 0); return m_fd1793->data_r(space, 0);
break;
case 0x34: case 0x34:
data = svi318_fdc_irqdrq_r(space, 0); return fdc_irqdrq_r(space, 0);
break;
case 0x51: case 0x51:
device = machine().device("crtc"); return m_crtc->register_r(space, offset);
data = downcast<mc6845_device *>(device)->register_r( space, offset );
break;
} }
return data; return 0xff;
} }
WRITE8_MEMBER(svi318_state::svi318_io_ext_w) WRITE8_MEMBER(svi318_state::io_ext_w)
{ {
device_t *device;
if (m_svi.bankLow == SVI_CART) if (m_svi.bankLow == SVI_CART)
{
return; return;
}
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
switch (offset) switch (offset)
{ {
@ -783,31 +741,29 @@ WRITE8_MEMBER(svi318_state::svi318_io_ext_w)
break; break;
case 0x30: case 0x30:
fdc->command_w(space, 0, data); m_fd1793->command_w(space, 0, data);
break; break;
case 0x31: case 0x31:
fdc->track_w(space, 0, data); m_fd1793->track_w(space, 0, data);
break; break;
case 0x32: case 0x32:
fdc->sector_w(space, 0, data); m_fd1793->sector_w(space, 0, data);
break; break;
case 0x33: case 0x33:
fdc->data_w(space, 0, data); m_fd1793->data_w(space, 0, data);
break; break;
case 0x34: case 0x34:
svi318_fdc_drive_motor_w(space, 0, data); fdc_drive_motor_w(space, 0, data);
break; break;
case 0x38: case 0x38:
svi318_fdc_density_side_w(space, 0, data); fdc_density_side_w(space, 0, data);
break; break;
case 0x50: case 0x50:
device = machine().device("crtc"); m_crtc->address_w(space, offset, data);
downcast<mc6845_device *>(device)->address_w(space, offset, data);
break; break;
case 0x51: case 0x51:
device = machine().device("crtc"); m_crtc->register_w(space, offset, data);
downcast<mc6845_device *>(device)->register_w(space, offset, data);
break; break;
case 0x58: case 0x58: