diff options
author | 2017-11-30 22:17:14 -0500 | |
---|---|---|
committer | 2017-11-30 22:17:14 -0500 | |
commit | dcba5a1edcd36cb74e873470668e583f48538f7d (patch) | |
tree | c5630583eed3177ade6c74fc9b08fe8f1442b85a /src | |
parent | 0a22db8f2bddb23c4004dfed528e689333861333 (diff) |
swtpc09: Memory banking modernization (nw)
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/swtpc09.cpp | 392 | ||||
-rw-r--r-- | src/mame/includes/swtpc09.h | 3 | ||||
-rw-r--r-- | src/mame/machine/swtpc09.cpp | 119 |
3 files changed, 315 insertions, 199 deletions
diff --git a/src/mame/drivers/swtpc09.cpp b/src/mame/drivers/swtpc09.cpp index 1c7d537c2e3..e062a05268b 100644 --- a/src/mame/drivers/swtpc09.cpp +++ b/src/mame/drivers/swtpc09.cpp @@ -60,11 +60,97 @@ /* Address map is dynamically setup when DAT memory is written to */ /* only ROM from FF00-FFFF and DAT memory at FFF0-FFFF (write only) is guaranteed always*/ -static ADDRESS_MAP_START(swtpc09_mem, AS_PROGRAM, 8, swtpc09_state) +static ADDRESS_MAP_START(mp09_mem, AS_PROGRAM, 8, swtpc09_state) + AM_RANGE(0x0000, 0x0fff) AM_DEVICE("bank0", address_map_bank_device, amap8) + AM_RANGE(0x1000, 0x1fff) AM_DEVICE("bank1", address_map_bank_device, amap8) + AM_RANGE(0x2000, 0x2fff) AM_DEVICE("bank2", address_map_bank_device, amap8) + AM_RANGE(0x3000, 0x3fff) AM_DEVICE("bank3", address_map_bank_device, amap8) + AM_RANGE(0x4000, 0x4fff) AM_DEVICE("bank4", address_map_bank_device, amap8) + AM_RANGE(0x5000, 0x5fff) AM_DEVICE("bank5", address_map_bank_device, amap8) + AM_RANGE(0x6000, 0x6fff) AM_DEVICE("bank6", address_map_bank_device, amap8) + AM_RANGE(0x7000, 0x7fff) AM_DEVICE("bank7", address_map_bank_device, amap8) + AM_RANGE(0x8000, 0x8fff) AM_DEVICE("bank8", address_map_bank_device, amap8) + AM_RANGE(0x9000, 0x9fff) AM_DEVICE("bank9", address_map_bank_device, amap8) + AM_RANGE(0xa000, 0xafff) AM_DEVICE("banka", address_map_bank_device, amap8) + AM_RANGE(0xb000, 0xbfff) AM_DEVICE("bankb", address_map_bank_device, amap8) + AM_RANGE(0xc000, 0xcfff) AM_DEVICE("bankc", address_map_bank_device, amap8) + AM_RANGE(0xd000, 0xdfff) AM_DEVICE("bankd", address_map_bank_device, amap8) + AM_RANGE(0xe000, 0xefff) AM_DEVICE("banke", address_map_bank_device, amap8) + AM_RANGE(0xf000, 0xfeff) AM_DEVICE("bankf", address_map_bank_device, amap8) AM_RANGE(0xff00, 0xffef) AM_ROM AM_RANGE(0xfff0, 0xffff) AM_ROM AM_WRITE(dat_w) ADDRESS_MAP_END +static ADDRESS_MAP_START(flex_dmf2_mem, AS_PROGRAM, 8, swtpc09_state) + AM_RANGE(0xe000, 0xe003) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe004, 0xe004) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w) + AM_RANGE(0xe005, 0xe005) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w) + AM_RANGE(0xe080, 0xe083) AM_MIRROR(0xf000c) AM_DEVREADWRITE("pia", pia6821_device, read, write) + AM_RANGE(0xe090, 0xe097) AM_MIRROR(0xf0008) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) + AM_RANGE(0xe0a0, 0xefff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf000, 0xf01f) AM_MIRROR(0xf0000) AM_READWRITE(m6844_r, m6844_w) + AM_RANGE(0xf020, 0xf023) AM_MIRROR(0xf0000) AM_DEVREADWRITE("fdc", fd1793_device, read, write) + AM_RANGE(0xf024, 0xf03f) AM_MIRROR(0xf0000) AM_READWRITE(dmf2_control_reg_r, dmf2_control_reg_w) + //AM_RANGE(0xf042, 0xf7ff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf800, 0xffff) AM_MIRROR(0xf0000) AM_ROM AM_REGION("maincpu", 0xf800) + AM_RANGE(0x00000, 0xfffff) AM_RAM AM_SHARE("mainram") // all the rest is treated as ram, 1MB ram emulated +ADDRESS_MAP_END + +static ADDRESS_MAP_START(flex_dc4_piaide_mem, AS_PROGRAM, 8, swtpc09_state) + AM_RANGE(0xe000, 0xe003) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe004, 0xe004) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w) + AM_RANGE(0xe005, 0xe005) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w) + AM_RANGE(0xe014, 0xe014) AM_MIRROR(0xf0000) AM_WRITE(dc4_control_reg_w) + AM_RANGE(0xe018, 0xe01b) AM_MIRROR(0xf0000) AM_DEVREADWRITE("fdc", fd1793_device, read, write) + //AM_RANGE(0xe01c, 0xe05f) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe060, 0xe063) AM_MIRROR(0xf000c) AM_DEVREADWRITE("piaide", pia6821_device, read, write) + //AM_RANGE(0xe070, 0xe07f) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe080, 0xe083) AM_MIRROR(0xf000c) AM_DEVREADWRITE("pia", pia6821_device, read, write) + AM_RANGE(0xe090, 0xe097) AM_MIRROR(0xf0008) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) + //AM_RANGE(0xe0a0, 0xe7ff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe800, 0xefff) AM_MIRROR(0xf0000) AM_ROM AM_REGION("maincpu", 0xe800) //piaide rom + //AM_RANGE(0xf000, 0xf01f) AM_MIRROR(0xf0000) AM_READWRITE(m6844_r, m6844_w) + //AM_RANGE(0xf020, 0xf023) AM_MIRROR(0xf0000) AM_DEVREADWRITE("fdc", fd1793_device, read, write) + //AM_RANGE(0xf024, 0xf03f) AM_MIRROR(0xf0000) AM_READWRITE(dmf2_control_reg_r, dmf2_control_reg_w) + //AM_RANGE(0xf040, 0xf041) AM_MIRROR(0xf0000) AM_READWRITE(dmf2_dma_address_reg_r, dmf2_dma_address_reg_w) + AM_RANGE(0xf000, 0xf7ff) AM_MIRROR(0xf0000) AM_RAM AM_SHARE("s09ram") // 2k ram for piaide on s09 board + AM_RANGE(0xf800, 0xffff) AM_MIRROR(0xf0000) AM_ROM AM_REGION("maincpu", 0xf800) + AM_RANGE(0x00000, 0xfffff) AM_RAM AM_SHARE("mainram") // all the rest is treated as ram, 1MB ram emulated +ADDRESS_MAP_END + +static ADDRESS_MAP_START(uniflex_dmf2_mem, AS_PROGRAM, 8, swtpc09_state) + AM_RANGE(0xe000, 0xe000) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w) + AM_RANGE(0xe001, 0xe001) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w) + AM_RANGE(0xe002, 0xe07f) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe080, 0xe083) AM_MIRROR(0xf000c) AM_DEVREADWRITE("pia", pia6821_device, read, write) + AM_RANGE(0xe090, 0xe097) AM_MIRROR(0xf0008) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) + AM_RANGE(0xe0a0, 0xefff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf000, 0xf01f) AM_MIRROR(0xf0000) AM_READWRITE(m6844_r, m6844_w) + AM_RANGE(0xf020, 0xf023) AM_MIRROR(0xf0000) AM_DEVREADWRITE("fdc", fd1793_device, read, write) + AM_RANGE(0xf024, 0xf03f) AM_MIRROR(0xf0000) AM_READWRITE(dmf2_control_reg_r, dmf2_control_reg_w) + //AM_RANGE(0xf042, 0xf7ff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf800, 0xffff) AM_MIRROR(0xf0000) AM_ROM AM_REGION("maincpu", 0xf800) + AM_RANGE(0x00000, 0xfffff) AM_RAM AM_SHARE("mainram") // all the rest is treated as ram, 1MB ram emulated +ADDRESS_MAP_END + +static ADDRESS_MAP_START(uniflex_dmf3_mem, AS_PROGRAM, 8, swtpc09_state) + AM_RANGE(0xe000, 0xe000) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w) + AM_RANGE(0xe001, 0xe001) AM_MIRROR(0xf0000) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w) + AM_RANGE(0xe002, 0xe07f) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xe080, 0xe083) AM_MIRROR(0xf000c) AM_DEVREADWRITE("pia", pia6821_device, read, write) + AM_RANGE(0xe090, 0xe097) AM_MIRROR(0xf0008) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) + AM_RANGE(0xe0a0, 0xefff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf000, 0xf01f) AM_MIRROR(0xf0000) AM_READWRITE(m6844_r, m6844_w) + AM_RANGE(0xf020, 0xf023) AM_MIRROR(0xf0000) AM_DEVREADWRITE("fdc", fd1793_device, read, write) + AM_RANGE(0xf024, 0xf024) AM_MIRROR(0xf0000) AM_READWRITE(dmf3_control_reg_r, dmf3_control_reg_w) + AM_RANGE(0xf025, 0xf025) AM_MIRROR(0xf0000) AM_READWRITE(dmf3_dma_address_reg_r, dmf3_dma_address_reg_w) + //AM_RANGE(0xf030, 0xf03f) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf040, 0xf04f) AM_MIRROR(0xf0000) AM_DEVREADWRITE("via", via6522_device, read, write) + //AM_RANGE(0xf050, 0xf7ff) AM_MIRROR(0xf0000) AM_NOP + AM_RANGE(0xf800, 0xffff) AM_MIRROR(0xf0000) AM_ROM AM_REGION("maincpu", 0xf800) + AM_RANGE(0x00000, 0xfffff) AM_RAM AM_SHARE("mainram") // all the rest is treated as ram, 1MB ram emulated +ADDRESS_MAP_END + /* Input ports */ static INPUT_PORTS_START( swtpc09 ) @@ -92,67 +178,122 @@ SLOT_INTERFACE_END /* Machine driver */ /* MPU09, MPID, MPS2 DMF2 */ -static MACHINE_CONFIG_START( swtpc09 ) +static MACHINE_CONFIG_START( swtpc09_base ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6809, 1000000) - MCFG_CPU_PROGRAM_MAP(swtpc09_mem) - - /* video hardware */ - MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) - - MCFG_DEVICE_ADD("ptm", PTM6840, 2000000) - MCFG_PTM6840_EXTERNAL_CLOCKS(50, 0, 50) - MCFG_PTM6840_OUT0_CB(WRITELINE(swtpc09_state, ptm_o1_callback)) - MCFG_PTM6840_OUT2_CB(WRITELINE(swtpc09_state, ptm_o3_callback)) - MCFG_PTM6840_IRQ_CB(WRITELINE(swtpc09_state, ptm_irq)) + MCFG_CPU_PROGRAM_MAP(mp09_mem) + + MCFG_DEVICE_ADD("bank0", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank1", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank2", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank3", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank4", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank5", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank6", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank7", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank8", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bank9", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("banka", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bankb", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bankc", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bankd", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("banke", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) + MCFG_DEVICE_ADD("bankf", ADDRESS_MAP_BANK, 0) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x01000) + MCFG_DEVICE_PROGRAM_MAP(flex_dmf2_mem) MCFG_DEVICE_ADD("pia", PIA6821, 0) MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_a_r)) MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_ca1_r)) MCFG_PIA_IRQA_HANDLER(WRITELINE(swtpc09_state, pia0_irq_a)) - MCFG_DEVICE_ADD("acia", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(swtpc09_state, acia_interrupt)) - - MCFG_DEVICE_ADD("brg", MC14411, XTAL_1_8432MHz) - MCFG_MC14411_F1_CB(DEVWRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia", acia6850_device, write_rxc)) - - MCFG_FD1793_ADD("fdc", XTAL_1MHz) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(swtpc09_state, fdc_intrq_w)) - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(swtpc09_state, fdc_drq_w)) - - MCFG_FLOPPY_DRIVE_ADD("fdc:0", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:2", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:3", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) -MACHINE_CONFIG_END - -/* MPU09, MPID, MPS2 DC4 PIAIDE*/ -static MACHINE_CONFIG_START( swtpc09i ) - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M6809, 1000000) - MCFG_CPU_PROGRAM_MAP(swtpc09_mem) - - /* video hardware */ - MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("ptm", PTM6840, 2000000) MCFG_PTM6840_EXTERNAL_CLOCKS(50, 0, 50) MCFG_PTM6840_OUT0_CB(WRITELINE(swtpc09_state, ptm_o1_callback)) MCFG_PTM6840_OUT2_CB(WRITELINE(swtpc09_state, ptm_o3_callback)) MCFG_PTM6840_IRQ_CB(WRITELINE(swtpc09_state, ptm_irq)) - MCFG_DEVICE_ADD("pia", PIA6821, 0) - MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_a_r)) - MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_ca1_r)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(swtpc09_state, pia0_irq_a)) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) MCFG_DEVICE_ADD("acia", ACIA6850, 0) MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd)) @@ -164,11 +305,52 @@ static MACHINE_CONFIG_START( swtpc09i ) MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia", acia6850_device, write_rxc)) MCFG_FD1793_ADD("fdc", XTAL_1MHz) - MCFG_FLOPPY_DRIVE_ADD("fdc:0", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:2", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:3", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( swtpc09, swtpc09_base ) + MCFG_DEVICE_MODIFY("fdc") + MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(swtpc09_state, fdc_intrq_w)) + MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(swtpc09_state, fdc_drq_w)) +MACHINE_CONFIG_END + +/* MPU09, MPID, MPS2 DC4 PIAIDE*/ +static MACHINE_CONFIG_DERIVED( swtpc09i, swtpc09_base ) + MCFG_DEVICE_MODIFY("bank0") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank1") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank2") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank3") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank4") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank5") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank6") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank7") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank8") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bank9") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("banka") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bankb") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bankc") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bankd") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("banke") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) + MCFG_DEVICE_MODIFY("bankf") + MCFG_DEVICE_PROGRAM_MAP(flex_dc4_piaide_mem) MCFG_DEVICE_ADD("piaide", PIA6821, 0) @@ -181,45 +363,87 @@ static MACHINE_CONFIG_START( swtpc09i ) MACHINE_CONFIG_END -/* MPU09, MPID, MPS2 DMF3 */ -static MACHINE_CONFIG_START( swtpc09d3 ) - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M6809, 2000000) - MCFG_CPU_PROGRAM_MAP(swtpc09_mem) - - /* video hardware */ - MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) +static MACHINE_CONFIG_DERIVED( swtpc09u, swtpc09 ) + MCFG_DEVICE_MODIFY("bank0") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank1") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank2") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank3") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank4") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank5") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank6") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank7") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank8") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bank9") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("banka") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bankb") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bankc") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bankd") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("banke") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) + MCFG_DEVICE_MODIFY("bankf") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf2_mem) +MACHINE_CONFIG_END - MCFG_DEVICE_ADD("ptm", PTM6840, 2000000) - MCFG_PTM6840_EXTERNAL_CLOCKS(50, 0, 50) - MCFG_PTM6840_OUT0_CB(WRITELINE(swtpc09_state, ptm_o1_callback)) - MCFG_PTM6840_OUT2_CB(WRITELINE(swtpc09_state, ptm_o3_callback)) - MCFG_PTM6840_IRQ_CB(WRITELINE(swtpc09_state, ptm_irq)) - MCFG_DEVICE_ADD("pia", PIA6821, 0) - MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_a_r)) - MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_ca1_r)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(swtpc09_state, pia0_irq_a)) +/* MPU09, MPID, MPS2 DMF3 */ +static MACHINE_CONFIG_DERIVED( swtpc09d3, swtpc09_base ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_CLOCK(2000000) + + MCFG_DEVICE_MODIFY("pia") + MCFG_DEVICE_CLOCK(2000000) + + MCFG_DEVICE_MODIFY("bank0") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank1") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank2") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank3") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank4") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank5") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank6") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank7") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank8") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bank9") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("banka") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bankb") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bankc") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bankd") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("banke") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) + MCFG_DEVICE_MODIFY("bankf") + MCFG_DEVICE_PROGRAM_MAP(uniflex_dmf3_mem) - MCFG_DEVICE_ADD("acia", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(swtpc09_state, acia_interrupt)) + /* video hardware */ + MCFG_DEVICE_MODIFY("acia") MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE)) - MCFG_DEVICE_ADD("brg", MC14411, XTAL_1_8432MHz) - MCFG_MC14411_F1_CB(DEVWRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia", acia6850_device, write_rxc)) - - MCFG_FD1793_ADD("fdc", XTAL_1MHz) - - MCFG_FLOPPY_DRIVE_ADD("fdc:0", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:2", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:3", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) - MCFG_DEVICE_ADD("via", VIA6522, XTAL_4MHz / 4) MCFG_VIA6522_READPA_HANDLER(READ8(swtpc09_state, dmf3_via_read_porta)) MCFG_VIA6522_READPB_HANDLER(READ8(swtpc09_state, dmf3_via_read_portb)) @@ -256,5 +480,5 @@ ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS COMP( 1980, swtpc09, 0, 0, swtpc09, swtpc09, swtpc09_state, swtpc09, "SWTPC", "swtpc S/09 Sbug", MACHINE_NO_SOUND_HW ) COMP( 1980, swtpc09i, swtpc09, 0, swtpc09i, swtpc09, swtpc09_state, swtpc09i, "SWTPC", "swtpc S/09 Sbug + piaide", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) -COMP( 1980, swtpc09u, swtpc09, 0, swtpc09, swtpc09, swtpc09_state, swtpc09u, "SWTPC", "swtpc S/09 UNIBug + DMF2", MACHINE_NO_SOUND_HW ) +COMP( 1980, swtpc09u, swtpc09, 0, swtpc09u, swtpc09, swtpc09_state, swtpc09u, "SWTPC", "swtpc S/09 UNIBug + DMF2", MACHINE_NO_SOUND_HW ) COMP( 1980, swtpc09d3, swtpc09, 0, swtpc09d3, swtpc09, swtpc09_state, swtpc09d3, "SWTPC", "swtpc S/09 UNIBug + DMF3", MACHINE_NO_SOUND_HW ) diff --git a/src/mame/includes/swtpc09.h b/src/mame/includes/swtpc09.h index ac4190b89c9..3a8ac892277 100644 --- a/src/mame/includes/swtpc09.h +++ b/src/mame/includes/swtpc09.h @@ -22,6 +22,7 @@ #include "machine/terminal.h" #include "imagedev/harddriv.h" #include "machine/idectrl.h" +#include "machine/bankdev.h" #include "machine/mc14411.h" #include "bus/rs232/rs232.h" @@ -33,6 +34,7 @@ public: swtpc09_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_bank(*this, "bank%x", 0) , m_brg(*this, "brg") , m_pia(*this, "pia") , m_ptm(*this, "ptm") @@ -102,6 +104,7 @@ protected: void swtpc09_irq_handler(uint8_t peripheral, uint8_t state); required_device<cpu_device> m_maincpu; + required_device_array<address_map_bank_device, 16> m_bank; required_device<mc14411_device> m_brg; required_device<pia6821_device> m_pia; required_device<ptm6840_device> m_ptm; diff --git a/src/mame/machine/swtpc09.cpp b/src/mame/machine/swtpc09.cpp index 7a44f52a6c2..01e38845925 100644 --- a/src/mame/machine/swtpc09.cpp +++ b/src/mame/machine/swtpc09.cpp @@ -150,9 +150,8 @@ WRITE8_MEMBER ( swtpc09_state::dmf2_control_reg_w ) /* FDC controller dma transfer */ void swtpc09_state::swtpc09_fdc_dma_transfer() { - uint8_t *RAM = memregion("maincpu")->base(); uint32_t offset; - address_space &space = m_maincpu->space(AS_PROGRAM); + address_space &space = m_bank[0]->space(AS_PROGRAM); offset = (m_fdc_dma_address_reg & 0x0f)<<16; @@ -163,11 +162,11 @@ void swtpc09_state::swtpc09_fdc_dma_transfer() uint8_t data = m_fdc->data_r(space, 0); LOG(("swtpc09_dma_write_mem %05X %02X\n", m_m6844_channel[0].address + offset, data)); - RAM[m_m6844_channel[0].address + offset] = data; + space.write_byte(m_m6844_channel[0].address + offset, data); } else { - uint8_t data = RAM[m_m6844_channel[0].address + offset]; + uint8_t data = space.read_byte(m_m6844_channel[0].address + offset); m_fdc->data_w(space, 0, data); //LOG(("swtpc09_dma_read_mem %04X %02X\n", m_m6844_channel[0].address, data)); @@ -456,125 +455,15 @@ WRITE8_MEMBER( swtpc09_state::piaide_b_w ) WRITE8_MEMBER(swtpc09_state::dat_w) { uint8_t a16_to_a19, a12_to_a15; - uint8_t *RAM = memregion("maincpu")->base(); uint32_t physical_address, logical_address; - address_space &mem = m_maincpu->space(AS_PROGRAM); - - fd1793_device *fdc = machine().device<fd1793_device>("fdc"); - pia6821_device *pia = machine().device<pia6821_device>("pia"); - ptm6840_device *ptm = machine().device<ptm6840_device>("ptm"); - acia6850_device *acia = machine().device<acia6850_device>("acia"); - via6522_device *via = machine().device<via6522_device>("via"); - pia6821_device *piaide = machine().device<pia6821_device>("piaide"); - a16_to_a19 = data & 0xf0; a12_to_a15 = ~data & 0x0f; //lower 4 bits are inverted physical_address = ((a16_to_a19 + a12_to_a15) << 12); logical_address = offset << 12; - LOG(("swtpc09_dat_bank_unmap Logical address:%04X\n", offset << 12 )); LOG(("swtpc09_dat_bank_set dat:%02X Logical address:%04X Physical address:%05X\n", data, offset << 12, physical_address )); - - // unmap page to be changed - mem.unmap_readwrite(offset << 12, (offset << 12)+0x0fff); - - // map in new page - if (a12_to_a15 == 0x0e) // 0xE000 address range to be mapped in at this page - { - if (m_system_type == FLEX_DMF2) // if flex/sbug, map in acia at 0xE004 - { - mem.nop_readwrite(logical_address+0x000, logical_address+0x003); - mem.install_readwrite_handler(logical_address+0x004, logical_address+0x004, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w),acia)); - mem.install_readwrite_handler(logical_address+0x005, logical_address+0x005, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w),acia)); - mem.nop_readwrite(logical_address+0x006, logical_address+0x07f); - mem.install_readwrite_handler(logical_address+0x080, logical_address+0x08f, read8_delegate(FUNC(pia6821_device::read), pia), write8_delegate(FUNC(pia6821_device::write), pia)); - mem.install_readwrite_handler(logical_address+0x090, logical_address+0x09f, read8_delegate(FUNC(ptm6840_device::read), ptm), write8_delegate(FUNC(ptm6840_device::write), ptm)); - mem.nop_readwrite(logical_address+0x0a0, logical_address+0xfff); - } - else if (m_system_type == FLEX_DC4_PIAIDE) // if flex/sbug and dc4 and piaide - { - mem.nop_readwrite(logical_address+0x000, logical_address+0x003); - mem.install_readwrite_handler(logical_address+0x004, logical_address+0x004, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w),acia)); - mem.install_readwrite_handler(logical_address+0x005, logical_address+0x005, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w),acia)); - mem.install_write_handler(logical_address+0x014, logical_address+0x014, write8_delegate(FUNC(swtpc09_state::dc4_control_reg_w),this)); - mem.install_readwrite_handler(logical_address+0x018, logical_address+0x01b, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc)); - //mem.nop_readwrite(logical_address+0x01c, logical_address+0x05f); - mem.install_readwrite_handler(logical_address+0x060, logical_address+0x06f, read8_delegate(FUNC(pia6821_device::read), piaide), write8_delegate(FUNC(pia6821_device::write), piaide)); - //mem.nop_readwrite(logical_address+0x070, logical_address+0x07f); - mem.install_readwrite_handler(logical_address+0x080, logical_address+0x08f, read8_delegate(FUNC(pia6821_device::read), pia), write8_delegate(FUNC(pia6821_device::write), pia)); - mem.install_readwrite_handler(logical_address+0x090, logical_address+0x09f, read8_delegate(FUNC(ptm6840_device::read), ptm), write8_delegate(FUNC(ptm6840_device::write), ptm)); - //mem.nop_readwrite(logical_address+0x0a0, logical_address+0x7ff); - mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xe800]); //piaide rom - } - else // assume unibug, map in acia at 0xE000 - { - mem.install_readwrite_handler(logical_address+0x000, logical_address+0x000, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w), acia)); - mem.install_readwrite_handler(logical_address+0x001, logical_address+0x001, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w), acia)); - mem.nop_readwrite(logical_address+0x002, logical_address+0x07f); - mem.install_readwrite_handler(logical_address+0x080, logical_address+0x08f, read8_delegate(FUNC(pia6821_device::read), pia), write8_delegate(FUNC(pia6821_device::write), pia)); - mem.install_readwrite_handler(logical_address+0x090, logical_address+0x09f, read8_delegate(FUNC(ptm6840_device::read), ptm), write8_delegate(FUNC(ptm6840_device::write), ptm)); - mem.nop_readwrite(logical_address+0x0a0, logical_address+0xfff); - } - } - else if (a12_to_a15 == 0x0f) // 0xF000 address range to be mapped in at this page - { - if (m_system_type == UNIFLEX_DMF2 || m_system_type == FLEX_DMF2) // if DMF2 conroller this is the map - { - mem.install_readwrite_handler(logical_address+0x000, logical_address+0x01f, read8_delegate(FUNC(swtpc09_state::m6844_r),this), write8_delegate(FUNC(swtpc09_state::m6844_w),this)); - mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc)); - mem.install_readwrite_handler(logical_address+0x024, logical_address+0x03f, read8_delegate(FUNC(swtpc09_state::dmf2_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_control_reg_w),this)); - mem.install_readwrite_handler(logical_address+0x040, logical_address+0x041, read8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_w),this)); - //mem.nop_readwrite(logical_address+0x042, logical_address+0x7ff); - mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xf800]); - mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this)); - } - else if (m_system_type == FLEX_DC4_PIAIDE) // 2k ram for piaide on s09 board - { - //mem.install_readwrite_handler(logical_address+0x000, logical_address+0x01f, read8_delegate(FUNC(swtpc09_state::m6844_r),this), write8_delegate(FUNC(swtpc09_state::m6844_w),this)); - //mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc)); - //mem.install_readwrite_handler(logical_address+0x024, logical_address+0x03f, read8_delegate(FUNC(swtpc09_state::dmf2_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_control_reg_w),this)); - //mem.install_readwrite_handler(logical_address+0x040, logical_address+0x041, read8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_w),this)); - mem.install_ram(logical_address+0x000, logical_address+0x7ff, &RAM[0xf000]); - mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xf800]); - mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this)); - } - else // assume DMF3 controller - { - mem.install_readwrite_handler(logical_address+0x000, logical_address+0x01f, read8_delegate(FUNC(swtpc09_state::m6844_r),this), write8_delegate(FUNC(swtpc09_state::m6844_w),this)); - mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc)); - mem.install_readwrite_handler(logical_address+0x024, logical_address+0x024, read8_delegate(FUNC(swtpc09_state::dmf3_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf3_control_reg_w),this)); - mem.install_readwrite_handler(logical_address+0x025, logical_address+0x025, read8_delegate(FUNC(swtpc09_state::dmf3_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf3_dma_address_reg_w),this)); - //mem.nop_readwrite(logical_address+0x030, logical_address+0x03f); - mem.install_readwrite_handler(logical_address+0x040, logical_address+0x04f, read8_delegate(FUNC(via6522_device::read), via), write8_delegate(FUNC(via6522_device::write), via)); - //mem.nop_readwrite(logical_address+0x050, logical_address+0x7ff); - mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xf800]); - mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this)); - } - } - else if (offset==0x0f) // then we need to leave in top part of ram and dat write - { - mem.install_ram(logical_address, logical_address+0x0eff, &RAM[physical_address]); - mem.install_rom(logical_address+0xf00, logical_address+0xfff, &RAM[0xff00]); - mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this)); - - } - else // all the rest is treated as ram, 1MB ram emulated - { - mem.install_ram(logical_address, logical_address+0x0fff, &RAM[physical_address]); - } - -// unused code to limit to 256k ram -// else if (!(a12_to_a15 & 0x0c) ) // limit ram to 256k || a12_to_a15 == 0x02 -// { -// memory_install_ram(space, logical_address, logical_address+0x0fff, 0, 0, &RAM[physical_address]); -// } -// -// else // all the rest is treated as unallocated -// { -// memory_nop_readwrite(space, logical_address, logical_address+0x0fff, 0, 0); -// } - + m_bank[logical_address >> 12]->set_bank(physical_address >> 12); } /* MC6844 DMA controller I/O */ |