mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
ibm6580: patch out video timing tests, move "Memory Record" button to keyboard (#9158)
This commit is contained in:
parent
2be02d9622
commit
0274763955
@ -9,7 +9,7 @@ disks. It could have up to 224k of ram. Consists of:
|
|||||||
Electronics Module 6580
|
Electronics Module 6580
|
||||||
Display 3300
|
Display 3300
|
||||||
Keyboard 5330 [a "beamspring"-type]
|
Keyboard 5330 [a "beamspring"-type]
|
||||||
Dual Diskette Unit 6360
|
Diskette Unit 6360
|
||||||
Optional:
|
Optional:
|
||||||
Printers: 5215, 5218, 5228
|
Printers: 5215, 5218, 5228
|
||||||
Printer Sharing feature
|
Printer Sharing feature
|
||||||
@ -18,7 +18,8 @@ Optional:
|
|||||||
66-line display and adapter (800x1056 px, 8x16 character cell)
|
66-line display and adapter (800x1056 px, 8x16 character cell)
|
||||||
|
|
||||||
|
|
||||||
All chips have IBM part numbers on them. F.e. on system board:
|
All chips have IBM part numbers on them. F.e. on system board:
|
||||||
|
|
||||||
8493077 - 8086
|
8493077 - 8086
|
||||||
4178619 - 8251A
|
4178619 - 8251A
|
||||||
4178617 - 8257-5
|
4178617 - 8257-5
|
||||||
@ -27,7 +28,14 @@ All chips have IBM part numbers on them. F.e. on system board:
|
|||||||
4178625 - 8253-5
|
4178625 - 8253-5
|
||||||
|
|
||||||
|
|
||||||
IRQ levels per PSM p. 6-5
|
Useful parts of PSM Feb83 (document / PDF page numbers):
|
||||||
|
|
||||||
|
- 6-3/87 -- bus buffers ... separate ... into four sections during BAT
|
||||||
|
- 6-5/89 -- irq levels
|
||||||
|
- 6-6/90 -- timer tick is 50ms
|
||||||
|
|
||||||
|
IRQ levels:
|
||||||
|
|
||||||
0 incoming data for printer sharing/3277 DE
|
0 incoming data for printer sharing/3277 DE
|
||||||
1 transfer data to commo data link
|
1 transfer data to commo data link
|
||||||
2 printer and mag card data xfer
|
2 printer and mag card data xfer
|
||||||
@ -36,10 +44,11 @@ IRQ levels per PSM p. 6-5
|
|||||||
5 (not in use)
|
5 (not in use)
|
||||||
6 software timer [50 ms period]
|
6 software timer [50 ms period]
|
||||||
7 error on commo data link
|
7 error on commo data link
|
||||||
nmi "or when a dump switch operation is initiated" ["memory record" button]
|
NMI "when a dump switch operation is initiated" ["memory record" button]
|
||||||
|
|
||||||
|
|
||||||
To do:
|
To do:
|
||||||
|
|
||||||
- verify all frequency sources, document ROM revisions
|
- verify all frequency sources, document ROM revisions
|
||||||
- memory size options
|
- memory size options
|
||||||
- bus errors, interrupts
|
- bus errors, interrupts
|
||||||
@ -47,13 +56,12 @@ To do:
|
|||||||
- 92-key keyboard variant, keyboard click/beep, keyboard layouts
|
- 92-key keyboard variant, keyboard click/beep, keyboard layouts
|
||||||
|
|
||||||
- 25-line video board (instant scroll, sub/superscripts, graphics mode)
|
- 25-line video board (instant scroll, sub/superscripts, graphics mode)
|
||||||
- 66-line video board
|
- 66-line video board (apparently requires 'new' ROM)
|
||||||
|
|
||||||
- either emulate floppy board, or complete its HLE (drive select, etc.)
|
- floppy adapter board, single and double density floppies
|
||||||
- add support for 8" drives with no track 0 sensor
|
|
||||||
(recalibrate command is expected to return 0x70 in ST0)
|
|
||||||
- double density floppies
|
|
||||||
- "memory record" (system dump) generation to floppies
|
- "memory record" (system dump) generation to floppies
|
||||||
|
- printer
|
||||||
|
- speaker
|
||||||
|
|
||||||
- pass BAT with no errors (Basic Assurance Test)
|
- pass BAT with no errors (Basic Assurance Test)
|
||||||
- pass RNA with no errors (Resident Non-Automatic Test)
|
- pass RNA with no errors (Resident Non-Automatic Test)
|
||||||
@ -79,6 +87,64 @@ Displaywriter System Manual S544-2023-0 (?) -- mentioned in US patents 4648071 a
|
|||||||
"IBM Displaywriter System Printer Guide," Order No. S544-0861-2, Copyright 1980.
|
"IBM Displaywriter System Printer Guide," Order No. S544-0861-2, Copyright 1980.
|
||||||
"Displaywriter System Product Support Manual," Order No. S241-6248-1, Copyright 1980
|
"Displaywriter System Product Support Manual," Order No. S241-6248-1, Copyright 1980
|
||||||
|
|
||||||
|
|
||||||
|
Notes on floppy drive:
|
||||||
|
|
||||||
|
Diskette Unit 6360 models -010, -011 have Type 1D (SS/SD) drives;
|
||||||
|
models -020, -021 -- Type 2D (DS/DD). Each drive has "file control card".
|
||||||
|
|
||||||
|
|
||||||
|
Useful parts of PSM Feb83 (pdf page numbers):
|
||||||
|
|
||||||
|
- 6-7/91 -- brief description
|
||||||
|
- 7-14..20/116..122 -- more detailed description
|
||||||
|
- 8-13/161 -- S1 (internal diskette signal cable), system board side
|
||||||
|
- 8-16/164 -- 5 (internal diskette signal cable), panel side
|
||||||
|
- 8-32/180 -- B1 (diskette signal cable), diskette adapter side
|
||||||
|
- 9-10..12/202..204 -- description of RNA tests
|
||||||
|
|
||||||
|
|
||||||
|
S1 connector has more signals than B1. Only these are present in B1:
|
||||||
|
|
||||||
|
Address Bit 1-4 -- from host
|
||||||
|
Data Bus Bit 0-7 -- bidirectional
|
||||||
|
Interrupt 4 -- to host
|
||||||
|
I/O Read -- from host
|
||||||
|
I/O Write -- from host
|
||||||
|
DMA Request -- to host
|
||||||
|
DMA Acknowledge -- from host
|
||||||
|
Terminal Count -- from host
|
||||||
|
Interface Ready -- to host
|
||||||
|
Diskette Select -- from host
|
||||||
|
|
||||||
|
|
||||||
|
Signals between adapter board and file control cards:
|
||||||
|
|
||||||
|
from/to 765:
|
||||||
|
|
||||||
|
write data, inner tracks, write gate, erase gate ->
|
||||||
|
write/erase enable, file data <-
|
||||||
|
|
||||||
|
from/to MCU:
|
||||||
|
|
||||||
|
drive present -> ground
|
||||||
|
diskette sense <- always ground on 1D; 2D disk index hole sends +5V
|
||||||
|
head engage ->
|
||||||
|
index (1.5 to 3.0 ms pulse) <-
|
||||||
|
select head, switch filter (2D drive) ->
|
||||||
|
|
||||||
|
|
||||||
|
RNA test L performs in the following sequence:
|
||||||
|
|
||||||
|
1. PORs the Diskette Adapter Cards
|
||||||
|
2. Samples the Diskette Index Pulse
|
||||||
|
3. Checks the Drive Set Ready Signal
|
||||||
|
4. Engages the Read/Write Head
|
||||||
|
5. Checks the Write/Erase Enable Line (This ensures the system will not write on the customer's diskette.)
|
||||||
|
6. Reads the Track ID
|
||||||
|
7. Disengages the Head.
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -147,7 +213,6 @@ public:
|
|||||||
, m_fdc(*this, UPD765_TAG)
|
, m_fdc(*this, UPD765_TAG)
|
||||||
, m_flop(*this, UPD765_TAG ":%u", 0U)
|
, m_flop(*this, UPD765_TAG ":%u", 0U)
|
||||||
, m_p_chargen(*this, "chargen")
|
, m_p_chargen(*this, "chargen")
|
||||||
, m_io_dump(*this, "DUMP")
|
|
||||||
, m_leds(*this, "led%u", 5U)
|
, m_leds(*this, "led%u", 5U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
@ -156,7 +221,6 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
virtual void video_start() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void pic_latch_w(uint16_t data);
|
void pic_latch_w(uint16_t data);
|
||||||
@ -197,7 +261,7 @@ private:
|
|||||||
|
|
||||||
uint16_t m_gate;
|
uint16_t m_gate;
|
||||||
uint8_t m_p40, m_p4a, m_p50, m_e000;
|
uint8_t m_p40, m_p4a, m_p50, m_e000;
|
||||||
uint8_t m_kb_data, m_ppi_c;
|
uint8_t m_kb_data, m_ppi_c, m_led_state;
|
||||||
bool m_kb_data_bit, m_kb_strobe, m_kb_clock;
|
bool m_kb_data_bit, m_kb_strobe, m_kb_clock;
|
||||||
|
|
||||||
util::fifo<uint8_t, 4> m_floppy_mcu_sr, m_floppy_mcu_cr;
|
util::fifo<uint8_t, 4> m_floppy_mcu_sr, m_floppy_mcu_cr;
|
||||||
@ -222,7 +286,6 @@ private:
|
|||||||
required_device<upd765a_device> m_fdc;
|
required_device<upd765a_device> m_fdc;
|
||||||
required_device_array<floppy_connector, 2> m_flop;
|
required_device_array<floppy_connector, 2> m_flop;
|
||||||
required_region_ptr<u8> m_p_chargen;
|
required_region_ptr<u8> m_p_chargen;
|
||||||
required_ioport m_io_dump;
|
|
||||||
output_finder<4> m_leds;
|
output_finder<4> m_leds;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -334,9 +397,13 @@ void ibm6580_state::video_w(offs_t offset, uint8_t data)
|
|||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
|
// some kind of gate
|
||||||
case 2:
|
case 2:
|
||||||
// some kind of gate
|
m_e000 = true;
|
||||||
m_e000 = data;
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
m_e000 = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -348,12 +415,13 @@ uint8_t ibm6580_state::video_r(offs_t offset)
|
|||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
case 8:
|
case 8:
|
||||||
data = 1; // 25-line video board ID. 66-line is 0x40.
|
// 25-line video board ID. 66-line is 0x40.
|
||||||
data |= (m_screen->hblank() ? 8 : 0);
|
data = 1;
|
||||||
data |= (m_screen->vblank() ? 4 : 0);
|
// pure guesswork. 0x20 cannot be zero when 0x10 is zero. 0x2 is unknown, may be vsync.
|
||||||
// pure guesswork. 0x2, 0x10 and 0x20 are unknown video signals.
|
data |= (m_screen->hblank() ? 4 : 0);
|
||||||
// 0x20 cannot be zero when 0x10 is zero.
|
data |= (m_screen->vblank() ? 8 : 0);
|
||||||
data |= ((m_screen->vpos() < 2) ? 2 : 0);
|
data |= ((m_screen->frame_number() & 1) ? 6 : 0);
|
||||||
|
data |= ((m_screen->vpos() > 196) ? 0x80 : 0);
|
||||||
if (m_e000) {
|
if (m_e000) {
|
||||||
data |= (m_screen->vblank() ? 0x20 : 0);
|
data |= (m_screen->vblank() ? 0x20 : 0);
|
||||||
data |= (m_screen->vblank() ? 0 : 0x10);
|
data |= (m_screen->vblank() ? 0 : 0x10);
|
||||||
@ -372,8 +440,7 @@ WRITE_LINE_MEMBER(ibm6580_state::vblank_w)
|
|||||||
// if (state)
|
// if (state)
|
||||||
// m_pic8259->ir6_w(state);
|
// m_pic8259->ir6_w(state);
|
||||||
|
|
||||||
if (m_io_dump->read())
|
m_p40 |= m_kbd->memory_record_r();
|
||||||
m_p40 |= 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ibm6580_state::pic_latch_w(uint16_t data)
|
void ibm6580_state::pic_latch_w(uint16_t data)
|
||||||
@ -413,6 +480,12 @@ void ibm6580_state::led_w(uint8_t data)
|
|||||||
if (data & 0xf)
|
if (data & 0xf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (data == m_led_state)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_led_state = data;
|
||||||
|
|
||||||
|
#ifdef VERBOSE
|
||||||
switch (data >> 4)
|
switch (data >> 4)
|
||||||
{
|
{
|
||||||
case 0x1:
|
case 0x1:
|
||||||
@ -463,6 +536,7 @@ void ibm6580_state::led_w(uint8_t data)
|
|||||||
// printf ("LED 0x%08x: unknown\n", data);
|
// printf ("LED 0x%08x: unknown\n", data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ibm6580_state::ppi_c_w(uint8_t data)
|
void ibm6580_state::ppi_c_w(uint8_t data)
|
||||||
@ -781,13 +855,6 @@ void ibm6580_state::ibm6580_io(address_map &map)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Input ports */
|
|
||||||
static INPUT_PORTS_START( ibm6580 )
|
|
||||||
PORT_START("DUMP")
|
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Memory Record") PORT_CODE(KEYCODE_PRTSCR) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR))
|
|
||||||
INPUT_PORTS_END
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t ibm6580_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
uint32_t ibm6580_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
uint16_t sy=0,ma=25;
|
uint16_t sy=0,ma=25;
|
||||||
@ -857,7 +924,7 @@ uint32_t ibm6580_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
|
|||||||
if (attr & 0x20)
|
if (attr & 0x20)
|
||||||
ca |= (ra < 13) ? ra + 3 : 0;
|
ca |= (ra < 13) ? ra + 3 : 0;
|
||||||
// subscript
|
// subscript
|
||||||
if (attr & 0x20)
|
if (attr & 0x40)
|
||||||
ca |= (ra > 2) ? ra - 3 : 0;
|
ca |= (ra > 2) ? ra - 3 : 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -901,14 +968,16 @@ void ibm6580_state::machine_start()
|
|||||||
{
|
{
|
||||||
m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
|
m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
|
||||||
|
|
||||||
m_fdc->set_rate(500000); // XXX workaround
|
m_fdc->set_rate(500000); // FIXME: workaround
|
||||||
|
|
||||||
m_leds.resolve();
|
m_leds.resolve();
|
||||||
|
|
||||||
|
memset(m_p_videoram, 0x0, 0x1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ibm6580_state::machine_reset()
|
void ibm6580_state::machine_reset()
|
||||||
{
|
{
|
||||||
m_p40 = m_p4a = m_p50 = m_gate = m_e000 = m_ppi_c = m_floppy_sr = 0;
|
m_p40 = m_p4a = m_p50 = m_gate = m_e000 = m_ppi_c = m_floppy_sr = m_led_state = 0;
|
||||||
m_kb_data_bit = false;
|
m_kb_data_bit = false;
|
||||||
m_kb_clock = false;
|
m_kb_clock = false;
|
||||||
m_kb_strobe = true;
|
m_kb_strobe = true;
|
||||||
@ -917,8 +986,7 @@ void ibm6580_state::machine_reset()
|
|||||||
|
|
||||||
m_pit8253->set_clockin(0, 0.0);
|
m_pit8253->set_clockin(0, 0.0);
|
||||||
|
|
||||||
if (m_io_dump->read())
|
m_p40 |= m_kbd->memory_record_r();
|
||||||
m_p40 |= 4;
|
|
||||||
|
|
||||||
m_flop[0]->get_device()->mon_w(!m_flop[0]->get_device()->exists());
|
m_flop[0]->get_device()->mon_w(!m_flop[0]->get_device()->exists());
|
||||||
m_flop[1]->get_device()->mon_w(!m_flop[1]->get_device()->exists());
|
m_flop[1]->get_device()->mon_w(!m_flop[1]->get_device()->exists());
|
||||||
@ -928,11 +996,6 @@ void ibm6580_state::machine_reset()
|
|||||||
m_floppy_mcu_cr_fifo = 0;
|
m_floppy_mcu_cr_fifo = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ibm6580_state::video_start()
|
|
||||||
{
|
|
||||||
memset(m_p_videoram, 0x0, 0x1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dw_floppies(device_slot_interface &device)
|
static void dw_floppies(device_slot_interface &device)
|
||||||
{
|
{
|
||||||
device.option_add("8sssd", IBM_6360);
|
device.option_add("8sssd", IBM_6360);
|
||||||
@ -971,6 +1034,7 @@ void ibm6580_state::ibm6580(machine_config &config)
|
|||||||
m_ppi8255->tri_pc_callback().set_constant(0);
|
m_ppi8255->tri_pc_callback().set_constant(0);
|
||||||
|
|
||||||
PIT8253(config, m_pit8253, 0);
|
PIT8253(config, m_pit8253, 0);
|
||||||
|
m_pit8253->out_handler<0>().set([this] (int state) { m_p40 = (m_p40 & ~1) | state; });
|
||||||
|
|
||||||
DW_KEYBOARD(config, m_kbd, 0);
|
DW_KEYBOARD(config, m_kbd, 0);
|
||||||
m_kbd->out_data_handler().set(FUNC(ibm6580_state::kb_data_w));
|
m_kbd->out_data_handler().set(FUNC(ibm6580_state::kb_data_w));
|
||||||
@ -1028,6 +1092,19 @@ ROM_START( ibm6580 )
|
|||||||
ROMX_LOAD("8493823_8k.bin", 0x0001, 0x2000, CRC(aa5524c0) SHA1(9938f2a82828b17966cb0be7fdbf73803c1f10d3), ROM_SKIP(1) | ROM_BIOS(0))
|
ROMX_LOAD("8493823_8k.bin", 0x0001, 0x2000, CRC(aa5524c0) SHA1(9938f2a82828b17966cb0be7fdbf73803c1f10d3), ROM_SKIP(1) | ROM_BIOS(0))
|
||||||
ROMX_LOAD("8493822_8k.bin", 0x0000, 0x2000, CRC(90e7e73a) SHA1(d3ee7a4d2cb8f4920b5d95e8c7f4fef06599d24e), ROM_SKIP(1) | ROM_BIOS(0))
|
ROMX_LOAD("8493822_8k.bin", 0x0000, 0x2000, CRC(90e7e73a) SHA1(d3ee7a4d2cb8f4920b5d95e8c7f4fef06599d24e), ROM_SKIP(1) | ROM_BIOS(0))
|
||||||
|
|
||||||
|
// disable halts in video test
|
||||||
|
ROM_FILL(0x501,1,0x90)
|
||||||
|
ROM_FILL(0x51b,1,0x90)
|
||||||
|
ROM_FILL(0x52f,1,0x90)
|
||||||
|
ROM_FILL(0x587,1,0x90)
|
||||||
|
ROM_FILL(0x5a0,1,0x90)
|
||||||
|
ROM_FILL(0x5a6,1,0x90)
|
||||||
|
ROM_FILL(0x5f4,1,0x90)
|
||||||
|
ROM_FILL(0x609,1,0x90)
|
||||||
|
|
||||||
|
// disable rom checksum halt
|
||||||
|
ROM_FILL(0x2027,1,0x01)
|
||||||
|
|
||||||
ROM_SYSTEM_BIOS(1, "new", "new bios - 1983?")
|
ROM_SYSTEM_BIOS(1, "new", "new bios - 1983?")
|
||||||
// was downloaded via DDT86
|
// was downloaded via DDT86
|
||||||
ROMX_LOAD( "dwrom16kb.bin", 0x0000, 0x4000, BAD_DUMP CRC(ced87929) SHA1(907a46f288809bc93a1f59f3fbef18bd44be42d9), ROM_BIOS(1))
|
ROMX_LOAD( "dwrom16kb.bin", 0x0000, 0x4000, BAD_DUMP CRC(ced87929) SHA1(907a46f288809bc93a1f59f3fbef18bd44be42d9), ROM_BIOS(1))
|
||||||
@ -1038,5 +1115,5 @@ ROM_END
|
|||||||
|
|
||||||
/* Driver */
|
/* Driver */
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||||
COMP( 1980, ibm6580, 0, 0, ibm6580, ibm6580, ibm6580_state, empty_init, "IBM", "IBM 6580 Displaywriter", MACHINE_IS_SKELETON)
|
COMP( 1980, ibm6580, 0, 0, ibm6580, 0, ibm6580_state, empty_init, "IBM", "IBM 6580 Displaywriter", MACHINE_IS_SKELETON)
|
||||||
|
@ -169,6 +169,9 @@ INPUT_PORTS_START( dw_keyboard )
|
|||||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Reqst")
|
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Reqst")
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||||
|
|
||||||
|
PORT_START("MR")
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Memory Record") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
@ -180,6 +183,7 @@ ioport_constructor dw_keyboard_device::device_input_ports() const
|
|||||||
dw_keyboard_device::dw_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
dw_keyboard_device::dw_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: device_t(mconfig, DW_KEYBOARD, tag, owner, clock)
|
: device_t(mconfig, DW_KEYBOARD, tag, owner, clock)
|
||||||
, m_kbd(*this, "COL.%u", 0)
|
, m_kbd(*this, "COL.%u", 0)
|
||||||
|
, m_mr(*this, "MR")
|
||||||
, m_out_data(*this)
|
, m_out_data(*this)
|
||||||
, m_out_clock(*this)
|
, m_out_clock(*this)
|
||||||
, m_out_strobe(*this)
|
, m_out_strobe(*this)
|
||||||
|
@ -16,6 +16,8 @@ public:
|
|||||||
auto out_clock_handler() { return m_out_clock.bind(); }
|
auto out_clock_handler() { return m_out_clock.bind(); }
|
||||||
auto out_strobe_handler() { return m_out_strobe.bind(); }
|
auto out_strobe_handler() { return m_out_strobe.bind(); }
|
||||||
|
|
||||||
|
int memory_record_r() { return m_mr->read(); }
|
||||||
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(reset_w);
|
DECLARE_WRITE_LINE_MEMBER(reset_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(ack_w);
|
DECLARE_WRITE_LINE_MEMBER(ack_w);
|
||||||
|
|
||||||
@ -33,6 +35,7 @@ private:
|
|||||||
int m_keylatch, m_ack;
|
int m_keylatch, m_ack;
|
||||||
|
|
||||||
required_ioport_array<12> m_kbd;
|
required_ioport_array<12> m_kbd;
|
||||||
|
required_ioport m_mr;
|
||||||
devcb_write_line m_out_data;
|
devcb_write_line m_out_data;
|
||||||
devcb_write_line m_out_clock;
|
devcb_write_line m_out_clock;
|
||||||
devcb_write_line m_out_strobe;
|
devcb_write_line m_out_strobe;
|
||||||
|
Loading…
Reference in New Issue
Block a user