poly88: cleanup; sys9002: experimentation

This commit is contained in:
Robbbert 2020-07-23 00:18:52 +10:00
parent ff0ccff4b4
commit 998cd46ca4
3 changed files with 49 additions and 42 deletions

View File

@ -221,5 +221,5 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1976, poly88, 0, 0, poly88, poly88, poly88_state, empty_init, "PolyMorphic Systems", "Poly-88", 0 )
COMP( 1977, poly8813, poly88, 0, poly8813, poly88, poly88_state, empty_init, "PolyMorphic Systems", "Poly-8813", MACHINE_NOT_WORKING )
COMP( 1976, poly88, 0, 0, poly88, poly88, poly88_state, empty_init, "PolyMorphic Systems", "Poly-88", MACHINE_SUPPORTS_SAVE )
COMP( 1977, poly8813, poly88, 0, poly8813, poly88, poly88_state, empty_init, "PolyMorphic Systems", "Poly-8813", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -2,19 +2,22 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
Mannesmann Kienzle System 9002 Terminal
Mannesmann Kienzle System 9002 Terminal
2017-08-17 Skeleton driver.
2017-08-17 Skeleton driver.
Chips used:
Siemens SAB8085A-P
NEC D8251AFC * 2
NEC D4016C-3 * 4 + 2
ST M2764A-4F1 * 4
HD6845P
Chips used:
- Siemens SAB8085A-P
- NEC D8251AFC * 2
- NEC D4016C-3 * 4 + 2
- ST M2764A-4F1 * 4
- HD6845P
Chargen is missing.
Both uarts are programmed as synchronous. A conversion box is needed
to talk with RS-232.
Seems a chargen is missing.
If write to the 6845 is enabled, MAME freezes after 1 or 2 seconds.
****************************************************************************/
@ -35,6 +38,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_vram(*this, "videoram")
, m_palette(*this, "palette")
, m_p_chargen(*this, "chargen")
{ }
void sys9002(machine_config &config);
@ -44,10 +48,12 @@ private:
void io_map(address_map &map);
void mem_map(address_map &map);
u8 port11_r();
required_device<cpu_device> m_maincpu;
required_shared_ptr<uint8_t> m_vram;
required_device<palette_device> m_palette;
required_region_ptr<u8> m_p_chargen;
};
@ -57,20 +63,28 @@ void sys9002_state::mem_map(address_map &map)
map(0x0000, 0x7fff).rom(); // 4 * 4K ROM
map(0x8000, 0x9fff).ram(); // 4 * 2k RAM
map(0xa000, 0xa7ff).ram().share("videoram"); // 2k RAM
map(0xc000, 0xc07f).ram(); // ??
map(0xc000, 0xc7ff).ram(); // attributes??
map(0xe000, 0xefff).ram(); // ??
}
void sys9002_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
//map(0x04, 0x04).rw("crtc", FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); // left commented out as mame freezes after about 2 seconds
//map(0x05, 0x05).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x04, 0x04).rw("crtc", FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); // left commented out as mame freezes after about 2 seconds
map(0x05, 0x05).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x08, 0x09).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x11, 0x11).nopr(); // continuous read
map(0x10, 0x11).r(FUNC(sys9002_state::port11_r)); //nopr(); // continuous read
map(0x1c, 0x1d).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write));
}
u8 sys9002_state::port11_r()
{
static u8 data = 0;
data += 0x08;
return data;
}
/* Input ports */
static INPUT_PORTS_START( sys9002 )
INPUT_PORTS_END
@ -85,10 +99,10 @@ MC6845_UPDATE_ROW( sys9002_state::crtc_update_row )
for (x = 0; x < x_count; x++)
{
mem = (ma + x) & 0x7ff;
chr = m_vram[mem];
chr = m_vram[mem] & 0x7f;
/* get pattern of pixels for that character scanline */
gfx = chr; //gfx = m_p_chargen[(chr<<4) | ra] ^ ((x == cursor_x) ? 0xff : 0);
gfx = m_p_chargen[(chr<<4) | ra] ^ ((x == cursor_x) ? 0xff : 0);
/* Display a scanline of a character (8 pixels) */
*p++ = pens[BIT(gfx, 7)];
@ -103,24 +117,6 @@ MC6845_UPDATE_ROW( sys9002_state::crtc_update_row )
}
static DEVICE_INPUT_DEFAULTS_START( uart1 )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_ODD )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
DEVICE_INPUT_DEFAULTS_END
static DEVICE_INPUT_DEFAULTS_START( uart2 )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 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_EVEN )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
DEVICE_INPUT_DEFAULTS_END
void sys9002_state::sys9002(machine_config &config)
{
/* basic machine hardware */
@ -135,7 +131,7 @@ void sys9002_state::sys9002(machine_config &config)
screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
screen.set_size(32*8, 32*8);
screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
//GFXDECODE(config, "gfxdecode", m_palette, gfx_mx2178);
//GFXDECODE(config, "gfxdecode", m_palette, gfx_sys9002);
PALETTE(config, m_palette, palette_device::MONOCHROME);
/* Devices */
@ -145,13 +141,13 @@ void sys9002_state::sys9002(machine_config &config)
crtc.set_char_width(8);
crtc.set_update_row_callback(FUNC(sys9002_state::crtc_update_row));
clock_device &uart_clock(CLOCK(config, "uart_clock", 614400));
clock_device &uart_clock(CLOCK(config, "uart_clock", 9600));
uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc));
uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc));
i8251_device &uart1(I8251(config, "uart1", 0)); // 7 bits even parity, x64
i8251_device &uart1(I8251(config, "uart1", 0)); // sync
uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd));
uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr));
uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts));
@ -160,9 +156,8 @@ void sys9002_state::sys9002(machine_config &config)
rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd));
rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr));
rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts));
rs232a.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(uart1));
i8251_device &uart2(I8251(config, "uart2", 0)); // enabled for transmit only, 8 bits odd parity, x64
i8251_device &uart2(I8251(config, "uart2", 0)); // sync
uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd));
uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr));
uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts));
@ -172,7 +167,6 @@ void sys9002_state::sys9002(machine_config &config)
rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd));
rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr));
rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts));
rs232b.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(uart2));
}
/* ROM definition */
@ -182,6 +176,9 @@ ROM_START( sys9002 )
ROM_LOAD( "55-041.bin", 0x2000, 0x2000, CRC(0f89fe81) SHA1(2dc8de7dabaf11a150cfd34460c5b47612cf5e61))
ROM_LOAD( "55-042.bin", 0x4000, 0x2000, CRC(e6fbc837) SHA1(fc11f6a6927709552bedf06b9eb0dc66e9a81264))
ROM_LOAD( "55-048.bin", 0x6000, 0x2000, CRC(879ef945) SHA1(a54fc01ac26a3cd05f6d1e1139d6d99198556575))
ROM_REGION( 0x0800, "chargen", 0 ) // chargen not dumped, using one from mbee for now
ROM_LOAD("charrom.bin", 0x0000, 0x0800, BAD_DUMP CRC(b149737b) SHA1(a3cd4f5d0d3c71137cd1f0f650db83333a2e3597) )
ROM_END
/* Driver */

View File

@ -178,6 +178,16 @@ WRITE_LINE_MEMBER(poly88_state::cassette_clock_w)
void poly88_state::machine_start()
{
m_onboard_ram = make_unique_clear<u8[]>(0x200);
save_pointer(NAME(m_onboard_ram), 0x200);
save_item(NAME(m_int_vector));
save_item(NAME(m_dtr));
save_item(NAME(m_rts));
save_item(NAME(m_txd));
save_item(NAME(m_rxd));
save_item(NAME(m_cassold));
save_item(NAME(m_casspol));
save_item(NAME(m_cass_data));
save_item(NAME(m_onboard_disable));
}
void poly88_state::machine_reset()