(nw) xor100 : notes

This commit is contained in:
Robbbert 2018-08-02 23:00:40 +10:00
parent 5f484e857e
commit 153fa4c4f8
4 changed files with 39 additions and 64 deletions

View File

@ -17,7 +17,7 @@ The terminal must be set for 9600 baud, 7 bits, even parity, 1 stop bit.
ToDo:
- Fix floppy. It needs to WAIT the cpu whenever port 0xD3 is read, wait
for either DRQ ir INTRQ to assert, then release the cpu and then do the
for either DRQ or INTRQ to assert, then release the cpu and then do the
actual port read. Our Z80 cannot do that.
- Fix FDC so MAME doesn't crash when a certain disk is inserted.

View File

@ -7,7 +7,7 @@ ToDo:
- peripheral interfaces
- Fix floppy. It needs to WAIT the cpu whenever port 0x14 is read, wait
for either DRQ ir INTRQ to assert, then release the cpu and then do the
for either DRQ or INTRQ to assert, then release the cpu and then do the
actual port read. Our Z80 cannot do that.
The schematic isn't clear, but it seems the 2 halves of U16 (as shown) have
a common element, so that activity on one side can affect what happens on

View File

@ -2,43 +2,45 @@
// copyright-holders:Curt Coder
/****************************************************************************************************
XOR S-100-12
XOR S-100-12
XOR Data Science was apparently a 1982 reincorporation of a Huntington Beach-based
company previously known as Delta Products. At least some of the S-100 boards used
in XOR's systems were originally developed and documented under the former company
name.
XOR Data Science was apparently a 1982 reincorporation of a Huntington Beach-based
company previously known as Delta Products. At least some of the S-100 boards used
in XOR's systems were originally developed and documented under the former company
name.
*****************************************************************************************************
All input must be in upper case.
Summary of Monitor commands:
All input must be in upper case.
Summary of Monitor commands:
D xxxx yyyy = dump memory to screen
F xxxx yyyy zz = fill memory from xxxx to yyyy-1 with zz
G xxxx = execute program at xxxx
H xxxx yyyy aa bb... = Search memory for a string of bytes
L xxxx = edit memory (. to exit)
M xxxx yyyy zzzz = Move (copy) memory
V xxxx = Ascii dump of memory to the screen (cr to continue, space to exit)
X n = Select a bank (0 works, others freeze)
D xxxx yyyy = dump memory to screen
F xxxx yyyy zz = fill memory from xxxx to yyyy-1 with zz
G xxxx = execute program at xxxx
H xxxx yyyy aa bb... = Search memory for a string of bytes
L xxxx = edit memory (. to exit)
M xxxx yyyy zzzz = Move (copy) memory
R = Read cassette (not in all bios versions)
V xxxx = Ascii dump of memory to the screen (cr to continue, space to exit)
W = Write cassette (not in all bios versions)
X n = Select a bank (0 works, others freeze)
^C = Boot from floppy
Note some of the commands are a bit buggy, eg F doesn't fill the last byte
Note some of the commands are a bit buggy, eg F doesn't fill the last byte
TODO:
- Fix floppy. It needs to WAIT the cpu whenever port 0xFC is read, wait
for either DRQ or INTRQ to assert, then release the cpu and then do the
actual port read. Our Z80 cannot do that.
- The only available disks crash MAME when loaded.
- honor jumper settings
- CTC signal header
- serial printer
- cassette (no information, assumed to be on another card)
*****************************************************************************************************/
/*
TODO:
- cannot boot from floppy (at prompt press ^C, wait, it says 'Drive not ready')
- honor jumper settings
- CTC signal header
- serial printer
- cassette? (no mention of it in the manuals)
*/
#include "emu.h"
#include "includes/xor100.h"
@ -157,16 +159,6 @@ READ8_MEMBER( xor100_state::prom_disable_r )
return 0xff;
}
READ8_MEMBER( xor100_state::fdc_r )
{
return m_fdc->gen_r(offset) ^ 0xff;
}
WRITE8_MEMBER( xor100_state::fdc_w )
{
m_fdc->gen_w(offset, data ^ 0xff);
}
READ8_MEMBER( xor100_state::fdc_wait_r )
{
/*
@ -188,12 +180,11 @@ READ8_MEMBER( xor100_state::fdc_wait_r )
{
if (!m_fdc_irq && !m_fdc_drq)
{
fatalerror("Z80 WAIT not supported by MAME core\n");
m_maincpu->set_input_line(Z80_INPUT_LINE_BOGUSWAIT, ASSERT_LINE);
}
}
return !m_fdc_irq << 7;
return m_fdc_irq ? 0x7f : 0xff;
}
WRITE8_MEMBER( xor100_state::fdc_dcont_w )
@ -276,7 +267,9 @@ void xor100_state::xor100_io(address_map &map)
map(0x0a, 0x0a).r(FUNC(xor100_state::prom_disable_r));
map(0x0b, 0x0b).portr("DSW0").w(COM5016_TAG, FUNC(com8116_device::stt_str_w));
map(0x0c, 0x0f).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0xf8, 0xfb).rw(FUNC(xor100_state::fdc_r), FUNC(xor100_state::fdc_w));
map(0xf8, 0xfb).lrw8("fdc",
[this](address_space &space, offs_t offset, u8 mem_mask) { return m_fdc->read(space, offset, mem_mask) ^ 0xff; },
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_fdc->write(space, offset, data ^ 0xff, mem_mask); });
map(0xfc, 0xfc).rw(FUNC(xor100_state::fdc_wait_r), FUNC(xor100_state::fdc_dcont_w));
map(0xfd, 0xfd).w(FUNC(xor100_state::fdc_dsel_w));
}
@ -429,10 +422,7 @@ void xor100_state::fdc_intrq_w(bool state)
m_ctc->trg0(state);
if (state)
{
fatalerror("Z80 WAIT not supported by MAME core\n");
m_maincpu->set_input_line(Z80_INPUT_LINE_BOGUSWAIT, ASSERT_LINE);
}
m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE);
}
void xor100_state::fdc_drq_w(bool state)
@ -440,22 +430,10 @@ void xor100_state::fdc_drq_w(bool state)
m_fdc_drq = state;
if (state)
{
fatalerror("Z80 WAIT not supported by MAME core\n");
m_maincpu->set_input_line(Z80_INPUT_LINE_BOGUSWAIT, ASSERT_LINE);
}
m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE);
}
static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 )
DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
DEVICE_INPUT_DEFAULTS_END
static void xor100_s100_cards(device_slot_interface &device)
{
}
@ -526,7 +504,6 @@ MACHINE_CONFIG_START(xor100_state::xor100)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_dsr))
MCFG_RS232_CTS_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_cts))
MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
com8116_device &brg(COM8116(config, COM5016_TAG, 5.0688_MHz_XTAL));
brg.fr_handler().set(m_uart_a, FUNC(i8251_device::write_txc));
@ -589,4 +566,4 @@ ROM_END
/* System Drivers */
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
COMP( 1980, xor100, 0, 0, xor100, xor100, xor100_state, empty_init, "XOR Data Science", "XOR S-100-12", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1980, xor100, 0, 0, xor100, xor100, xor100_state, empty_init, "XOR Data Science", "XOR S-100-12", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )

View File

@ -54,8 +54,6 @@ private:
DECLARE_WRITE8_MEMBER( mmu_w );
DECLARE_WRITE8_MEMBER( prom_toggle_w );
DECLARE_READ8_MEMBER( prom_disable_r );
DECLARE_READ8_MEMBER( fdc_r );
DECLARE_WRITE8_MEMBER( fdc_w );
DECLARE_READ8_MEMBER( fdc_wait_r );
DECLARE_WRITE8_MEMBER( fdc_dcont_w );
DECLARE_WRITE8_MEMBER( fdc_dsel_w );