mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
(MESS) cat.c: further attempts to get printing working; it seems BUSY is never being de-asserted on init by the centronics core, so the cat code is reading the duart ip4 and waiting forever for busy to de-assert (which should make ip4 return 1 instead of 0). Not sure how to force it to think it isn't asserted. (n/w)
This commit is contained in:
parent
bc238e5289
commit
bd20546170
@ -228,6 +228,7 @@ J6: Phone connector, rj11 jack
|
||||
J7: Line connector, rj11 jack
|
||||
J8: 9-pin Video out/power in connector "CONN RECEPT 6POS .156 R/A PCB" plus "CONN RECEPT 3POS .156 R/A PCB" acting as one 9-pin connector
|
||||
(NC ? ? ? NC NC ? 12v 5v) (video, vsync, hsync and case/video-gnd are likely here)
|
||||
(the video pinout of the cat is: (Video Vsync Hsync SyncGnd PwrGnd PwrGnd +5v(VCC) +12v(VDD) -12v(VEE)) which is not the same as the swyft.
|
||||
J9: unpopulated DIL 40-pin straight connector for a ROM debug/expansion/RAM-shadow daughterboard
|
||||
the pins after pin 12 connect to that of the ROM-LO 27256 pinout counting pins 1,28,2,27,3,26,etc
|
||||
the ROM-HI rom has a different /HICE pin which is not connected to this connector
|
||||
@ -281,7 +282,9 @@ ToDo:
|
||||
data, though track 0 is just a disk "unique" identifier for the cat
|
||||
meaning 404480 usable bytes
|
||||
* (Once the floppy is working I'd declare the system working)
|
||||
- WIP: Centronics port (need to hook up prn_ack_ff and correctly invert centronics busy
|
||||
- WIP: Centronics port (not sure what is wrong right now, ip4 is never reading
|
||||
as high meaning nothing works; does our centronics implementation correctly
|
||||
assert BUSY at all?)
|
||||
- RS232C port and Modem "port" connected to the DUART's two ports
|
||||
- DTMF generator chip (connected to DUART 'user output' pins OP4,5,6,7)
|
||||
- WIP: Watchdog timer/powerfail at 0x85xxxx (watchdog NMI needs to actually
|
||||
@ -585,6 +588,25 @@ WRITE16_MEMBER( cat_state::cat_video_control_w )
|
||||
* 006080F4 , ( VST End of VSync 378 )
|
||||
* 00600120 , ( VSE End of Frame 400 )
|
||||
* 006581C0 , ( VOC Video Control Normal Syncs )
|
||||
* based on diagrams from https://archive.org/details/DTCJefRaskinDoc062
|
||||
* we can determine what at least some of these values do:
|
||||
* HORIZONTAL:
|
||||
* 0 is the first pixel output to the screen at the end of the frontporch
|
||||
* stuff is shifted to the screen here, and then zeroed for the backporch; manual claims backporch is 2 cycles, it is actually 7
|
||||
* HSS (89) is the horizontal count at which the HSYNC pin goes high
|
||||
* sync is active here for 7 cycles; manual claims 10 but is wrong
|
||||
* HST (96) is the horizontal count at which the HSYNC pin goes low
|
||||
* sync is inactive here for 7 cycles, manual claims 8 but is wrong?, this is the frontporch
|
||||
* HSE (104) is the horizontal count at which the horizontal counter is reset to 0 (so counts 0-103 then back to 0)
|
||||
*
|
||||
* VERTICAL:
|
||||
* 0 is the first vertical line displayed to screen
|
||||
* VDE (344) affects the number of lines that /LDPS is active for display of
|
||||
* VSS (362) is the vertical line at which the VSYNC pin goes high
|
||||
* VST (378) is the vertical line at which the VSYNC pin goes low
|
||||
* VSE (400) is the vertical line at which the vertical line count is reset to 0
|
||||
* VOC (0x1c0) controls the polarity and enabling of the sync signals in some unknown way
|
||||
* Suffice to say, whatever bit combination 0b00011100000x does, it enables both horiz and vert sync and both are positive
|
||||
*/
|
||||
#ifdef DEBUG_VIDEO_CONTROL_W
|
||||
static const char *const regDest[16] = { "VSE (End of frame)", "VST (End of VSync)", "VSS (Start of VSync)", "VDE (Active Lines)", "unknown 620xxx", "unknown 628xxx", "unknown 630xxx", "unknown 638xxx", "HSE (end of horizontal line)", "HST (end of HSync)", "HSS (HSync Start)", "VOC (Video Control)", "unknown 660xxx", "unknown 668xxx", "unknown 670xxx", "unknown 678xxx" };
|
||||
@ -641,6 +663,9 @@ WRITE16_MEMBER( cat_state::cat_printer_data_w )
|
||||
fprintf(stderr,"Write to Printer Data address %06X, data %04X\n", 0x800004+(offset<<1), data);
|
||||
#endif
|
||||
m_ctx_data_out->write(data>>8);
|
||||
m_ctx->write_strobe(1);
|
||||
m_ctx->write_strobe(0);
|
||||
m_ctx->write_strobe(1);
|
||||
}
|
||||
// 0x800006-0x800007: Floppy data register (called fd.dwr in the cat source code)
|
||||
READ16_MEMBER( cat_state::cat_floppy_data_r )
|
||||
@ -812,7 +837,7 @@ WRITE16_MEMBER( cat_state::cat_opr_w )
|
||||
* ??????\\-- Watchdog count? (counts upward? if this reaches <some unknown number greater than 2> the watchdog fires? writing bit 3 set to opr above resets this)
|
||||
*
|
||||
* FEDCBA98
|
||||
* |||||||\-- PFAIL state (1 = 5v detector near svram says power ok for saving; 0 = 5v detector shows power fail or unstable, hence do not write to svram!)
|
||||
* |||||||\-- PFAIL state (MB3771 comparator: 1: vcc = 5v; 0: vcc != 5v, hence do not write to svram!)
|
||||
* ||||||\--- (always 0?)
|
||||
* |||||\---- (always 0?)
|
||||
* ||||\----- (always 0?)
|
||||
@ -914,6 +939,7 @@ static ADDRESS_MAP_START(cat_mem, AS_PROGRAM, 16, cat_state)
|
||||
AM_RANGE(0x80000c, 0x80000d) AM_READ(cat_0080_r) AM_MIRROR(0x18FFE0) // Open bus?
|
||||
AM_RANGE(0x80000e, 0x80000f) AM_READWRITE(cat_battery_r,cat_printer_control_w) AM_MIRROR(0x18FFE0) // Centronics Printer Control, keyboard led and country code enable
|
||||
AM_RANGE(0x800010, 0x80001f) AM_READ(cat_0080_r) AM_MIRROR(0x18FFE0) // Open bus?
|
||||
//AM_RANGE(0x810000, 0x81001f) AM_DEVREADWRITE8("duartn68681", duartn68681_device, read, write, 0xff00 ) AM_MIRROR(0x18FFE0)
|
||||
AM_RANGE(0x810000, 0x81001f) AM_DEVREADWRITE8("duartn68681", duartn68681_device, read, write, 0xff ) AM_MIRROR(0x18FFE0)
|
||||
AM_RANGE(0x820000, 0x82003f) AM_READWRITE(cat_modem_r,cat_modem_w) AM_MIRROR(0x18FFC0) // AMI S35213 Modem Chip, all access is on bit 7
|
||||
AM_RANGE(0x830000, 0x830001) AM_READ(cat_6ms_counter_r) AM_MIRROR(0x18FFFE) // 16bit 6ms counter clocked by output of another 16bit counter clocked at 10mhz
|
||||
@ -978,7 +1004,7 @@ static INPUT_PORTS_START( cat )
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // totally unused
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
|
||||
|
||||
@ -990,12 +1016,12 @@ static INPUT_PORTS_START( cat )
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // totally unused
|
||||
|
||||
PORT_START("Y4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right USE FRONT") PORT_CODE(KEYCODE_RCONTROL)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_F2) // intl only: latin diaresis and latin !; norway, danish and finnish * and '; others
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
|
||||
@ -1013,22 +1039,22 @@ static INPUT_PORTS_START( cat )
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
|
||||
PORT_START("Y6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_F1) // intl only: latin inv ? and inv !; norway and danish ! and |; finnish <>; others
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left LEAP") PORT_CODE(KEYCODE_LALT)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('[')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // totally unused
|
||||
|
||||
PORT_START("Y7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Leap") PORT_CODE(KEYCODE_RALT)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Page") PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_PGDN)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift Lock") PORT_CODE(KEYCODE_CAPSLOCK)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase") PORT_CODE(KEYCODE_BACKSPACE)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // totally unused
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("UNDO") PORT_CODE(KEYCODE_BACKSLASH)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\xb1') PORT_CHAR('\xb0') // PORT_CHAR('\\') PORT_CHAR('~')
|
||||
INPUT_PORTS_END
|
||||
@ -1068,9 +1094,9 @@ IRQ_CALLBACK_MEMBER(cat_state::cat_int_ack)
|
||||
|
||||
MACHINE_START_MEMBER(cat_state,cat)
|
||||
{
|
||||
m_duart_ktobf_ff = 0; // reset doesnt touch this
|
||||
m_duart_ktobf_ff = 0; // reset doesn't touch this
|
||||
m_duart_prn_ack_prev_state = 1; // technically uninitialized
|
||||
m_duart_prn_ack_ff = 0; // reset doesnt touch this
|
||||
m_duart_prn_ack_ff = 0; // reset doesn't touch this
|
||||
m_6ms_counter = 0;
|
||||
m_wdt_counter = 0;
|
||||
m_video_enable = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user