mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
pcd: make sinix boot with pcx driver (nw)
This commit is contained in:
parent
8f47435daa
commit
17962a4baf
@ -750,6 +750,7 @@ ssam88s
|
||||
|
||||
// Non-PC msdos
|
||||
pcd // Siemens PC-D
|
||||
pcx // Siemens PC-X
|
||||
slicer // 1983 Slicer Computers
|
||||
olypeopl // Olympia People PC
|
||||
|
||||
|
@ -17,10 +17,12 @@
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "machine/mc146818.h"
|
||||
#include "machine/pcd_kbd.h"
|
||||
#include "machine/terminal.h"
|
||||
#include "sound/speaker.h"
|
||||
#include "video/scn2674.h"
|
||||
#include "formats/pc_dsk.h"
|
||||
#include "bus/scsi/omti5100.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
@ -43,6 +45,7 @@ public:
|
||||
m_scsi(*this, "scsi"),
|
||||
m_scsi_data_out(*this, "scsi_data_out"),
|
||||
m_scsi_data_in(*this, "scsi_data_in"),
|
||||
m_terminal(*this, "terminal"),
|
||||
m_ram(*this, "ram"),
|
||||
m_vram(*this, "vram"),
|
||||
m_charram(8*1024)
|
||||
@ -74,6 +77,9 @@ public:
|
||||
DECLARE_WRITE16_MEMBER( mmu_w );
|
||||
DECLARE_READ16_MEMBER( mem_r );
|
||||
DECLARE_WRITE16_MEMBER( mem_w );
|
||||
DECLARE_READ8_MEMBER( exp_r );
|
||||
DECLARE_WRITE8_MEMBER( exp_w );
|
||||
DECLARE_WRITE8_MEMBER( term_key_w );
|
||||
SCN2674_DRAW_CHARACTER_MEMBER(display_pixels);
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
DECLARE_WRITE_LINE_MEMBER(write_scsi_bsy);
|
||||
@ -101,10 +107,11 @@ private:
|
||||
required_device<SCSI_PORT_DEVICE> m_scsi;
|
||||
required_device<output_latch_device> m_scsi_data_out;
|
||||
required_device<input_buffer_device> m_scsi_data_in;
|
||||
optional_device<generic_terminal_device> m_terminal;
|
||||
required_device<ram_device> m_ram;
|
||||
required_shared_ptr<UINT16> m_vram;
|
||||
dynamic_buffer m_charram;
|
||||
UINT8 m_stat, m_led, m_vram_sw;
|
||||
UINT8 m_stat, m_led, m_vram_sw, m_term_key;
|
||||
int m_msg, m_bsy, m_io, m_cd, m_req, m_rst;
|
||||
emu_timer *m_req_hack;
|
||||
UINT16 m_dskctl;
|
||||
@ -159,6 +166,7 @@ void pcd_state::machine_reset()
|
||||
m_mmu.ctl = 0;
|
||||
m_mmu.sc = false;
|
||||
m_mmu.type = ioport("mmu")->read();
|
||||
m_term_key = 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_state::irq_callback )
|
||||
@ -486,6 +494,50 @@ READ16_MEMBER(pcd_state::mem_r)
|
||||
}
|
||||
return ram[offset];
|
||||
}
|
||||
|
||||
// The PC-X treats the graphics board as a serial port. Maybe the 8031 (instead of 8047) can
|
||||
// write directly to the video ram and there's a char ROM instead of RAM?
|
||||
READ8_MEMBER(pcd_state::exp_r)
|
||||
{
|
||||
if(m_dskctl & 0x40)
|
||||
{
|
||||
if(!offset)
|
||||
{
|
||||
UINT8 data = m_term_key;
|
||||
m_term_key = 0;
|
||||
return data;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pic2->ir0_w(CLEAR_LINE);
|
||||
return (m_term_key ? 1 : 0);
|
||||
}
|
||||
}
|
||||
else if(offset & 1)
|
||||
return m_crtc->read(space, offset/2);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pcd_state::exp_w)
|
||||
{
|
||||
if(m_dskctl & 0x40)
|
||||
{
|
||||
if(!offset)
|
||||
{
|
||||
m_pic2->ir0_w(ASSERT_LINE);
|
||||
m_terminal->write(space, 0, data);
|
||||
}
|
||||
}
|
||||
else if(!(offset & 1))
|
||||
return m_crtc->write(space, offset/2, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pcd_state::term_key_w)
|
||||
{
|
||||
m_pic2->ir0_w(ASSERT_LINE);
|
||||
m_term_key = data;
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
@ -522,6 +574,11 @@ static ADDRESS_MAP_START( pcd_io, AS_IO, 16, pcd_state )
|
||||
AM_RANGE(0xfb00, 0xffff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( pcx_io, AS_IO, 16, pcd_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0xf980, 0xf98f) AM_READWRITE8(exp_r, exp_w, 0xffff)
|
||||
AM_IMPORT_FROM(pcd_io)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE DRIVERS
|
||||
@ -579,6 +636,7 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
MCFG_DEVICE_ADD("usart1", MC2661, XTAL_4_9152MHz)
|
||||
MCFG_MC2661_RXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir3_w))
|
||||
MCFG_MC2661_TXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir3_w))
|
||||
MCFG_MC2661_TXD_HANDLER(DEVWRITELINE("rs232_1", rs232_port_device, write_txd))
|
||||
MCFG_DEVICE_ADD("usart2", MC2661, XTAL_4_9152MHz)
|
||||
MCFG_MC2661_RXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir2_w))
|
||||
//MCFG_MC2661_TXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir2_w)) // this gets stuck high causing the keyboard to not work
|
||||
@ -586,6 +644,12 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
MCFG_DEVICE_ADD("usart3", MC2661, XTAL_4_9152MHz)
|
||||
MCFG_MC2661_RXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir4_w))
|
||||
MCFG_MC2661_TXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir4_w))
|
||||
MCFG_MC2661_TXD_HANDLER(DEVWRITELINE("rs232_2", rs232_port_device, write_txd))
|
||||
|
||||
MCFG_RS232_PORT_ADD("rs232_1", default_rs232_devices, NULL)
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("usart1", mc2661_device, rx_w))
|
||||
MCFG_RS232_PORT_ADD("rs232_2", default_rs232_devices, NULL)
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("usart3", mc2661_device, rx_w))
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -606,6 +670,7 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
MCFG_SCN2674_TEXT_CHARACTER_WIDTH(8)
|
||||
MCFG_SCN2674_GFX_CHARACTER_WIDTH(16)
|
||||
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(pcd_state, display_pixels)
|
||||
MCFG_VIDEO_SET_SCREEN("screen")
|
||||
|
||||
// rtc
|
||||
MCFG_MC146818_ADD("rtc", XTAL_32_768kHz)
|
||||
@ -627,6 +692,16 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
MCFG_SCSIDEV_ADD("scsi:1", "harddisk", OMTI5100, SCSI_ID_0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_DERIVED(pcx, pcd)
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_IO_MAP(pcx_io)
|
||||
|
||||
// FIXME: temporary workaround
|
||||
MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
|
||||
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(pcd_state, term_key_w))
|
||||
|
||||
MCFG_DEVICE_REMOVE("graphics")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
//**************************************************************************
|
||||
// ROM DEFINITIONS
|
||||
@ -646,9 +721,19 @@ ROM_START( pcd )
|
||||
ROM_LOAD("s36361-d321-v1.bin", 0x000, 0x400, CRC(69baeb2a) SHA1(98b9cd0f38c51b4988a3aed0efcf004bedd115ff))
|
||||
ROM_END
|
||||
|
||||
ROM_START( pcx )
|
||||
ROM_REGION(0x4000, "bios", 0)
|
||||
ROM_SYSTEM_BIOS(0, "v2", "V2 GS") // from mainboard SYBAC S26361-D359 V2 GS
|
||||
ROMX_LOAD("s26361-d359.d42", 0x0001, 0x2000, CRC(e20244dd) SHA1(0ebc5ddb93baacd9106f1917380de58aac64fe73), ROM_SKIP(1) | ROM_BIOS(1))
|
||||
ROMX_LOAD("s26361-d359.d43", 0x0000, 0x2000, CRC(e03db2ec) SHA1(fcae8b0c9e7543706817b0a53872826633361fda), ROM_SKIP(1) | ROM_BIOS(1))
|
||||
ROM_SYSTEM_BIOS(1, "v3", "V3 GS4") // from mainboard SYBAC S26361-D359 V3 GS4
|
||||
ROMX_LOAD("361d0359.d42", 0x0001, 0x2000, CRC(5b4461e4) SHA1(db6756aeabb2e6d3921dc7571a5bed3497b964bf), ROM_SKIP(1) | ROM_BIOS(2))
|
||||
ROMX_LOAD("361d0359.d43", 0x0000, 0x2000, CRC(71c3189d) SHA1(e8dd6c632bfc833074d3a833ea7f59bb5460f313), ROM_SKIP(1) | ROM_BIOS(2))
|
||||
ROM_END
|
||||
|
||||
//**************************************************************************
|
||||
// GAME DRIVERS
|
||||
//**************************************************************************
|
||||
|
||||
COMP( 1984, pcd, 0, 0, pcd, pcd, driver_device, 0, "Siemens", "PC-D", MACHINE_NOT_WORKING )
|
||||
COMP( 1984, pcx, pcd, 0, pcx, pcd, driver_device, 0, "Siemens", "PC-X", MACHINE_NOT_WORKING )
|
||||
|
Loading…
Reference in New Issue
Block a user