mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
added Attache 8:16 ROMs, and revision H BIOS
new working clone ----------------- Otrona Attache 8:16 [Al Kossow]
This commit is contained in:
parent
a08876a04f
commit
e74413d3b9
@ -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 )
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user