summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mahlemiut <bsr@xnet.co.nz>2017-11-02 14:57:16 +1300
committer mahlemiut <bsr@xnet.co.nz>2017-11-02 15:01:01 +1300
commite74413d3b9d0f7f0fb5d35b220d00fa20fe19607 (patch)
tree7c5b8f38d6042c62e59623caf3a94c6eb158cb58
parenta08876a04f3faeab11a2cc117ae32c9803181dd3 (diff)
added Attache 8:16 ROMs, and revision H BIOS
new working clone ----------------- Otrona Attache 8:16 [Al Kossow]
-rw-r--r--src/mame/drivers/attache.cpp165
-rw-r--r--src/mame/mame.lst3
2 files changed, 160 insertions, 8 deletions
diff --git a/src/mame/drivers/attache.cpp b/src/mame/drivers/attache.cpp
index 7d5d6dd7218..429dd697f7d 100644
--- a/src/mame/drivers/attache.cpp
+++ b/src/mame/drivers/attache.cpp
@@ -43,11 +43,23 @@
* nnnnY - I/O port receive (nnnn = address of data loaded)
* Z - Auto Disk Test (1Z for drive B)
*
+ * For the 8086 board (will display an 'x' if the 8086 board is not installed):
+ * [ - 8086 RAM Test
+ * ] - SCC Test
+ * ( - GPIB Listener/Talker Test
+ * ) - GPIB Controller Test
*
+ * The Attache 8:16 is an upgraded Attache adding an 8086 (+ optional 8087) board with its own 256kB of RAM,
+ * and optionally a GPIB controller (TMS9914A) and serial synchronous port (Z8530 SCC). It also has modifications
+ * to the main Z80 board, specifically the display circuitry, adding a high-resolution display, and replacing
+ * the character ROM with a larger ROM containing an IBM character set.
+ * It effectively allows the Attache to run MS-DOS and use a 10MB hard disk.
+ *
* TODO:
* - Keyboard repeat
* - Get at least some of the system tests to pass
* - and probably lots more I've forgotten, too.
+ * - implement Z80-8086 comms on the 8:16
*
*/
@@ -63,6 +75,7 @@
#include "machine/z80ctc.h"
#include "machine/z80sio.h"
#include "machine/z80pio.h"
+#include "cpu/i86/i86.h"
#include "sound/ay8910.h"
#include "video/tms9927.h"
@@ -215,6 +228,17 @@ private:
uint8_t m_memmap;
};
+class attache816_state : public attache_state
+{
+public:
+ attache816_state(const machine_config &mconfig, device_type type, const char *tag)
+ : attache_state(mconfig, type, tag),
+ m_extcpu(*this,"extcpu")
+ { }
+private:
+ required_device<cpu_device> m_extcpu;
+};
+
// Attributes (based on schematics):
// bit 0 = ALT
// bit 1 = RW
@@ -285,7 +309,7 @@ uint32_t attache_state::screen_update(screen_device &screen, bitmap_rgb32 &bitma
for(scan=0;scan<10;scan++) // 10 scanlines per line
{
- data = m_char_rom->base()[ch*16+scan];
+ data = m_char_rom->base()[(ch*16+scan)];
if((m_attr_ram[(vy*128)+x] & 0xc0) != 0xc0) // if not strikethrough
{
if(m_attr_ram[(vy*128)+x] & 0x40) // superscript
@@ -743,7 +767,7 @@ WRITE_LINE_MEMBER( attache_state::fdc_dack_w )
{
}
-static ADDRESS_MAP_START( attache_map , AS_PROGRAM, 8, attache_state)
+static ADDRESS_MAP_START( attache_map, AS_PROGRAM, 8, attache_state)
AM_RANGE(0x0000,0x1fff) AM_RAMBANK("bank1")
AM_RANGE(0x2000,0x3fff) AM_RAMBANK("bank2")
AM_RANGE(0x4000,0x5fff) AM_RAMBANK("bank3")
@@ -754,7 +778,7 @@ static ADDRESS_MAP_START( attache_map , AS_PROGRAM, 8, attache_state)
AM_RANGE(0xe000,0xffff) AM_RAMBANK("bank8")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( attache_io , AS_IO, 8, attache_state)
+static ADDRESS_MAP_START( attache_io, AS_IO, 8, attache_state)
AM_RANGE(0xe0, 0xed) AM_DEVREADWRITE("dma",am9517a_device,read,write) AM_MIRROR(0xff00)
AM_RANGE(0xee, 0xee) AM_WRITE(display_command_w) AM_MIRROR(0xff00)
AM_RANGE(0xef, 0xef) AM_READWRITE(dma_mask_r, dma_mask_w) AM_MIRROR(0xff00)
@@ -766,6 +790,33 @@ static ADDRESS_MAP_START( attache_io , AS_IO, 8, attache_state)
AM_RANGE(0xff, 0xff) AM_READWRITE(memmap_r, memmap_w) AM_MIRROR(0xff00)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( attache816_io, AS_IO, 8, attache_state)
+// 0xb8 - 8086 comms port (connects to PPI port A)
+// 0xb9 - Status/Control
+ AM_RANGE(0xe0, 0xed) AM_DEVREADWRITE("dma",am9517a_device,read,write) AM_MIRROR(0xff00)
+ AM_RANGE(0xee, 0xee) AM_WRITE(display_command_w) AM_MIRROR(0xff00)
+ AM_RANGE(0xef, 0xef) AM_READWRITE(dma_mask_r, dma_mask_w) AM_MIRROR(0xff00)
+ AM_RANGE(0xe6, 0xe7) AM_DEVREADWRITE("sio",z80sio_device,ba_cd_r, ba_cd_w) AM_MIRROR(0xff00)
+ AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE("ctc",z80ctc_device,read,write) AM_MIRROR(0xff00)
+ AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE("pio",z80pio_device,read_alt,write_alt) AM_MIRROR(0xff00)
+ AM_RANGE(0xfc, 0xfd) AM_DEVICE("fdc",upd765a_device,map) AM_MIRROR(0xff00)
+ AM_RANGE(0xfe, 0xfe) AM_READWRITE(display_data_r, display_data_w) AM_SELECT(0xff00)
+ AM_RANGE(0xff, 0xff) AM_READWRITE(memmap_r, memmap_w) AM_MIRROR(0xff00)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( attache_x86_map, AS_PROGRAM, 16, attache_state)
+ AM_RANGE(0x00000, 0x3ffff) AM_RAM
+ AM_RANGE(0xb0000, 0xbffff) AM_NOP // triggers IRQ?
+ AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("x86bios",0x0000)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( attache_x86_io, AS_IO, 16, attache_state)
+// 0x100-0x104 - i8255 PPI
+// 0x108/9 - Set/Clear IBF IRQ enable
+// 0x10c/d - Set/Clear OBF IRQ enable
+ AM_RANGE(0x104, 0x105) AM_NOP
+ADDRESS_MAP_END
+
static INPUT_PORTS_START(attache)
PORT_START("row0")
PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("BS") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
@@ -919,6 +970,71 @@ static MACHINE_CONFIG_START( attache )
MCFG_Z80_DAISY_CHAIN(attache_daisy_chain)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
+
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(64)) /* not accurate */
+ MCFG_SCREEN_SIZE(640,240)
+ MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
+ MCFG_SCREEN_UPDATE_DRIVER(attache_state, screen_update)
+ MCFG_SCREEN_VBLANK_CALLBACK(DEVWRITELINE("ctc", z80ctc_device, trg2))
+
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
+
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("psg", AY8912, XTAL_8MHz / 4)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+
+ MCFG_MSM5832_ADD("rtc",XTAL_32_768kHz)
+
+ MCFG_DEVICE_ADD("pio", Z80PIO, XTAL_8MHz/26)
+ MCFG_Z80PIO_IN_PA_CB(READ8(attache_state, pio_portA_r))
+ MCFG_Z80PIO_OUT_PA_CB(WRITE8(attache_state, pio_portA_w))
+ MCFG_Z80PIO_IN_PB_CB(READ8(attache_state, pio_portB_r))
+ MCFG_Z80PIO_OUT_PB_CB(WRITE8(attache_state, pio_portB_w))
+
+ MCFG_DEVICE_ADD("sio", Z80SIO, XTAL_8MHz / 26)
+
+ MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_8MHz / 4)
+ MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+
+ MCFG_DEVICE_ADD("dma", AM9517A, XTAL_8MHz / 4)
+ MCFG_AM9517A_OUT_HREQ_CB(WRITELINE(attache_state, hreq_w))
+ MCFG_AM9517A_OUT_EOP_CB(WRITELINE(attache_state, eop_w))
+ MCFG_AM9517A_IN_MEMR_CB(READ8(attache_state, dma_mem_r))
+ MCFG_AM9517A_OUT_MEMW_CB(WRITE8(attache_state, dma_mem_w))
+ MCFG_AM9517A_IN_IOR_0_CB(READ8(attache_state, fdc_dma_r))
+ MCFG_AM9517A_OUT_IOW_0_CB(WRITE8(attache_state, fdc_dma_w))
+ // MCFG_AM9517A_OUT_DACK_0_CB(WRITELINE(attache_state, fdc_dack_w))
+
+ MCFG_UPD765A_ADD("fdc", true, true)
+ MCFG_UPD765_INTRQ_CALLBACK(DEVWRITELINE("ctc", z80ctc_device, trg3))
+ MCFG_UPD765_DRQ_CALLBACK(DEVWRITELINE("dma", am9517a_device, dreq0_w)) MCFG_DEVCB_INVERT
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", attache_floppies, "525dd", floppy_image_device::default_floppy_formats)
+
+ MCFG_DEVICE_ADD("crtc", TMS9927, 12324000)
+ MCFG_TMS9927_CHAR_WIDTH(8)
+
+ MCFG_NVRAM_ADD_0FILL("nvram")
+
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("64k")
+
+ MCFG_SOFTWARE_LIST_ADD("disk_list","attache")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( attache816 )
+ MCFG_CPU_ADD("maincpu",Z80,XTAL_8MHz / 2)
+ MCFG_CPU_PROGRAM_MAP(attache_map)
+ MCFG_CPU_IO_MAP(attache816_io)
+ MCFG_Z80_DAISY_CHAIN(attache_daisy_chain)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+
+ MCFG_CPU_ADD("extcpu",I8086,XTAL_24MHz / 3)
+ MCFG_CPU_PROGRAM_MAP(attache_x86_map)
+ MCFG_CPU_IO_MAP(attache_x86_io)
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
MCFG_SCREEN_REFRESH_RATE(60)
@@ -978,10 +1094,12 @@ ROM_START( attache )
ROM_FILL(0x0000,0x10000,0x00)
ROM_REGION(0x1000, "boot", 0)
- ROM_SYSTEM_BIOS(0, "u252revg", "Boot Rev.G")
- ROMX_LOAD("u252revg.bin", 0x0000, 0x1000, CRC(113136b7) SHA1(845afd9ed2fd2b28c39921d8f2ba99e5295e0330), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "u252revf", "Boot Rev.F")
- ROMX_LOAD("u252revf.bin", 0x0000, 0x1000, CRC(b49eb3b2) SHA1(5b1b348301b2f76b1f250ba68bb8733fc15d18c2), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(0, "u252revh", "Boot Rev.H")
+ ROMX_LOAD("u252revh.bin", 0x0000, 0x1000, CRC(a06f0bdf) SHA1(d526cf23bfe0f8f9bcde812cd864a2a4cbc8b673), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "u252revg", "Boot Rev.G")
+ ROMX_LOAD("u252revg.bin", 0x0000, 0x1000, CRC(113136b7) SHA1(845afd9ed2fd2b28c39921d8f2ba99e5295e0330), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(2, "u252revf", "Boot Rev.F")
+ ROMX_LOAD("u252revf.bin", 0x0000, 0x1000, CRC(b49eb3b2) SHA1(5b1b348301b2f76b1f250ba68bb8733fc15d18c2), ROM_BIOS(3))
ROM_REGION(0x1000, "video", 0)
ROM_LOAD("u416vid.bin", 0x0000, 0x1000, CRC(e376ec59) SHA1(7b9e9db575e77ce2f479eb9ae913528e4f0d125d) )
@@ -994,7 +1112,40 @@ ROM_START( attache )
ROM_REGION(0x100, "floppy", 0)
ROM_LOAD("u630.bin", 0x0000, 0x0100, CRC(f7a5c821) SHA1(fea07d9ac7e4e5f4f72aa7b2159deaedbd662ead) )
+
+ROM_END
+
+ROM_START( attache816 )
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_FILL(0x0000,0x10000,0x00)
+
+ ROM_REGION(0x1000, "boot", 0)
+ ROM_SYSTEM_BIOS(0, "u252revh", "Boot Rev.H")
+ ROMX_LOAD("u252revh.bin", 0x0000, 0x1000, CRC(a06f0bdf) SHA1(d526cf23bfe0f8f9bcde812cd864a2a4cbc8b673), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "u252revg", "Boot Rev.G")
+ ROMX_LOAD("u252revg.bin", 0x0000, 0x1000, CRC(113136b7) SHA1(845afd9ed2fd2b28c39921d8f2ba99e5295e0330), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(2, "u252revf", "Boot Rev.F")
+ ROMX_LOAD("u252revf.bin", 0x0000, 0x1000, CRC(b49eb3b2) SHA1(5b1b348301b2f76b1f250ba68bb8733fc15d18c2), ROM_BIOS(3))
+
+ ROM_REGION(0x2000, "video", 0)
+ ROM_LOAD("u416vid2.bin", 0x0000, 0x2000, CRC(0bdaed8d) SHA1(eee1e8505906e7c3587ecdf9dd9227a2a3b3cdd4) )
+
+ ROM_REGION(0x100, "attr", 0)
+ ROM_LOAD("u413.bin", 0x0000, 0x0100, CRC(5b60e622) SHA1(43450c747db1394466eabe5c26a61bf75a4f3b52) )
+
+ ROM_REGION(0x200, "iosel", 0)
+ ROM_LOAD("u110.bin", 0x0000, 0x0200, CRC(70dd255a) SHA1(36dcce07a2c14eefc069433459c422341bd47efb) )
+
+ ROM_REGION(0x100, "floppy", 0)
+ ROM_LOAD("u630.bin", 0x0000, 0x0100, CRC(f7a5c821) SHA1(fea07d9ac7e4e5f4f72aa7b2159deaedbd662ead) )
+
+ // chip locations based on schematics
+ ROM_REGION(0x2000, "x86bios", 0)
+ ROM_LOAD16_BYTE("u4.bin", 0x0000, 0x1000, CRC(658c8f93) SHA1(ce4b388af5b73884194f548afa706964305462f7) )
+ ROM_LOAD16_BYTE("u9.bin", 0x0001, 0x1000, CRC(cc4cd938) SHA1(6a1d316628641f9b4de5c8c46f9430ef5bd6120f) )
+
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT DEVICE INIT COMPANY FULLNAME FLAGS
COMP( 1982, attache, 0, 0, attache, attache, attache_state, 0, "Otrona", "Attach\xC3\xA9", MACHINE_IMPERFECT_GRAPHICS )
+COMP( 1983, attache816, attache,0, attache816, attache, attache816_state, 0, "Otrona", "Attach\xC3\xA9 8:16", MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index fb647075650..44281dcbf68 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -2568,7 +2568,8 @@ tajmah // Tajmahal
att4425 //
@source:attache.cpp
-attache //
+attache // (c) 1982 Otrona
+attache816 // (c) 1983 Otrona
@source:attckufo.cpp
attckufo // (c) 1980 Ryoto Electric Co.