summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/apricot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/apricot.cpp')
-rw-r--r--src/mame/drivers/apricot.cpp64
1 files changed, 22 insertions, 42 deletions
diff --git a/src/mame/drivers/apricot.cpp b/src/mame/drivers/apricot.cpp
index eb7d91650a4..bf693bdcc69 100644
--- a/src/mame/drivers/apricot.cpp
+++ b/src/mame/drivers/apricot.cpp
@@ -4,7 +4,9 @@
ACT Apricot PC/Xi
- - Error 29 (timer failed)
+ TODO:
+ - External RS232 data transfers to the Apricot are usually garbage (but
+ sending to an external target works fine)
- Dump of the keyboard MCU ROM needed (can be dumped using test mode)
***************************************************************************/
@@ -16,6 +18,7 @@
#include "machine/i8255.h"
#include "machine/pic8259.h"
#include "machine/z80dart.h"
+#include "machine/74153.h"
#include "machine/wd_fdc.h"
#include "video/mc6845.h"
#include "sound/sn76496.h"
@@ -25,6 +28,7 @@
#include "bus/rs232/rs232.h"
#include "bus/apricot/expansion/expansion.h"
#include "bus/apricot/keyboard/keyboard.h"
+#include "softlist.h"
//**************************************************************************
@@ -51,8 +55,6 @@ public:
m_floppy1(*this, "ic68:1"),
m_palette(*this, "palette"),
m_screen_buffer(*this, "screen_buffer"),
- m_data_selector_dtr(1),
- m_data_selector_rts(1),
m_video_mode(0),
m_display_on(1),
m_display_enabled(0),
@@ -69,8 +71,6 @@ public:
DECLARE_WRITE8_MEMBER(i8255_portb_w);
DECLARE_READ8_MEMBER(i8255_portc_r);
DECLARE_WRITE8_MEMBER(i8255_portc_w);
- DECLARE_WRITE_LINE_MEMBER(timer_out1);
- DECLARE_WRITE_LINE_MEMBER(timer_out2);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_READ8_MEMBER(sio_da_r);
DECLARE_READ8_MEMBER(sio_ca_r);
@@ -82,9 +82,6 @@ public:
DECLARE_WRITE_LINE_MEMBER(apricot_hd6845_de) { m_display_enabled = state; };
- DECLARE_WRITE_LINE_MEMBER(data_selector_dtr_w) { m_data_selector_dtr = state; };
- DECLARE_WRITE_LINE_MEMBER(data_selector_rts_w) { m_data_selector_rts = state; };
-
MC6845_UPDATE_ROW(crtc_update_row);
uint32_t screen_update_apricot(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -108,9 +105,6 @@ private:
required_device<palette_device> m_palette;
required_shared_ptr<uint16_t> m_screen_buffer;
- int m_data_selector_dtr;
- int m_data_selector_rts;
-
bool m_video_mode;
bool m_display_on;
@@ -201,27 +195,6 @@ WRITE8_MEMBER( apricot_state::i8255_portc_w )
// schematic page 294 says pc6 outputs to centronics pin 15, which is unused
}
-WRITE_LINE_MEMBER( apricot_state::timer_out1 )
-{
- // receive clock via timer 1
- if (m_data_selector_rts == 0 && m_data_selector_dtr == 0)
- m_sio->rxca_w(state);
-}
-
-WRITE_LINE_MEMBER( apricot_state::timer_out2 )
-{
- // transmit clock via timer 2
- if (m_data_selector_rts == 0 && m_data_selector_dtr == 0)
- m_sio->txca_w(state);
-
- // transmit and receive clock via timer 2
- if (m_data_selector_rts == 1 && m_data_selector_dtr == 0)
- {
- m_sio->txca_w(state);
- m_sio->rxca_w(state);
- }
-}
-
READ8_MEMBER( apricot_state::sio_da_r )
{
if (m_bus_locked)
@@ -311,7 +284,7 @@ MC6845_UPDATE_ROW( apricot_state::crtc_update_row )
for (int x = 0; x <= 10; x++)
{
int color = fill ? 1 : BIT(data, x);
- if (BIT(code, 15)) color = !color; // reverse?
+ color ^= BIT(code, 15); // reverse?
bitmap.pix32(y, x + i*10) = pen[color ? 1 + BIT(code, 14) : 0];
}
}
@@ -425,9 +398,15 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_PIT8253_CLK0(XTAL_4MHz / 16)
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("ic31", pic8259_device, ir6_w))
MCFG_PIT8253_CLK1(XTAL_4MHz / 2)
- MCFG_PIT8253_OUT1_HANDLER(WRITELINE(apricot_state, timer_out1))
+ MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("ic14", ttl153_device, i0a_w))
MCFG_PIT8253_CLK2(XTAL_4MHz / 2)
- MCFG_PIT8253_OUT2_HANDLER(WRITELINE(apricot_state, timer_out2))
+ MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("ic14", ttl153_device, i0b_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("ic14", ttl153_device, i2a_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("ic14", ttl153_device, i2b_w))
+
+ MCFG_TTL153_ADD("ic14")
+ MCFG_TTL153_ZA_CB(DEVWRITELINE("ic15", z80sio0_device, rxca_w))
+ MCFG_TTL153_ZB_CB(DEVWRITELINE("ic15", z80sio0_device, txca_w))
MCFG_Z80SIO0_ADD("ic15", XTAL_15MHz / 6, 0, 0, XTAL_4MHz / 16, XTAL_4MHz / 16)
MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
@@ -435,18 +414,17 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_Z80DART_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
MCFG_Z80DART_OUT_WRDYA_CB(DEVWRITELINE("ic71", i8089_device, drq2_w))
MCFG_Z80DART_OUT_TXDB_CB(DEVWRITELINE("kbd", apricot_keyboard_bus_device, out_w))
- MCFG_Z80DART_OUT_DTRB_CB(WRITELINE(apricot_state, data_selector_dtr_w))
- MCFG_Z80DART_OUT_RTSB_CB(WRITELINE(apricot_state, data_selector_rts_w))
+ MCFG_Z80DART_OUT_DTRB_CB(DEVWRITELINE("ic14", ttl153_device, s0_w))
+ MCFG_Z80DART_OUT_RTSB_CB(DEVWRITELINE("ic14", ttl153_device, s1_w))
MCFG_Z80DART_OUT_INT_CB(DEVWRITELINE("ic31", pic8259_device, ir5_w))
// rs232 port
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, nullptr)
-// note: missing a receive clock callback to support external clock mode
-// (m_data_selector_rts == 1 and m_data_selector_dtr == 0)
+ // note: missing a receive clock callback to support external clock mode (i1 to 153)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ic15", z80sio0_device, rxa_w))
MCFG_RS232_DCD_HANDLER(DEVWRITELINE("ic15", z80sio0_device, dcda_w))
MCFG_RS232_DSR_HANDLER(DEVWRITELINE("ic15", z80sio0_device, synca_w))
- MCFG_RS232_CTS_HANDLER(DEVWRITELINE("ic15", z80sio0_device, ctsa_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("ic15", z80sio0_device, ctsa_w)) MCFG_DEVCB_XOR(1)
// keyboard
MCFG_APRICOT_KEYBOARD_INTERFACE_ADD("kbd", "hle")
@@ -471,6 +449,8 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_FLOPPY_DRIVE_ADD("ic68:0", apricot_floppies, "d32w", apricot_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("ic68:1", apricot_floppies, "d32w", apricot_state::floppy_formats)
+ MCFG_SOFTWARE_LIST_ADD("flop_list", "apricot_flop")
+
// expansion bus
MCFG_EXPANSION_ADD("exp", "ic91")
MCFG_EXPANSION_IOP_ADD("ic71")
@@ -504,5 +484,5 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, apricot, 0, 0, apricot, 0, driver_device, 0, "ACT", "Apricot PC", MACHINE_NOT_WORKING )
-COMP( 1984, apricotxi, apricot, 0, apricotxi, 0, driver_device, 0, "ACT", "Apricot Xi", MACHINE_NOT_WORKING )
+COMP( 1983, apricot, 0, 0, apricot, 0, driver_device, 0, "ACT", "Apricot PC", 0 )
+COMP( 1984, apricotxi, apricot, 0, apricotxi, 0, driver_device, 0, "ACT", "Apricot Xi", 0 )