diff --git a/src/mess/drivers/cat.c b/src/mess/drivers/cat.c index 9155a602d29..445d0bfdb3c 100644 --- a/src/mess/drivers/cat.c +++ b/src/mess/drivers/cat.c @@ -88,7 +88,7 @@ In MESS, to activate it as above: * when the Cat boots, type (without quotes) "Enable Forth Language" * hold left-alt(leap left) and type E n a, release left-alt (the left cursor is now at the first character) * simultaneously press both alt keys for a moment and release both (the whole "Enable Forth Language" line will be selected) -* press control(use front) and press backspace(ERASE) (If beeping actually worked the cat would beep here) +* press control(use front) and press backspace(ERASE) (The cat will beep here) * press control(use front), shift, and space (the cursor should stop blinking) * press enter and the forth "ok" prompt should appear. you can type 'page' and enter to clear the screen Optional further steps: @@ -178,7 +178,7 @@ Canon Cat: Crystals: X1: 19.968Mhz, used by GA2 (plus a PLL to multiply by 2?), and divide by 4 for cpuclk, divide by 8 for 2.5mhz and divide by 5.5 for 3.63mhz (is this - suposed to be divide by 6? there may not be a pll if it is...) + supposed to be divide by 6? there may not be a pll if it is...) X2: 3.579545Mhz, used by the DTMF generator chip AMI S2579 at IC40 X3: 2.4576Mhz, used by the modem chip AMI S35213 at IC37 @@ -215,9 +215,10 @@ J1: breakout of joystick, serial/rs232, hex-keypad, parallel port, and forth swi not all 60 pins are populated in the connector, only pins 1-6, 8, 13-15, 17-18, 23-30, 35-60 are present (traced partly by dwight) J2: unpopulated 8-pin sip header, serial/rs232-related? - (vcc ? ? ? ? ? ? gnd) + (vcc ? ? ? ? ? ? gnd) (random guess: txd, rxd, rts, cts, dsr, dtr, and one pin could be cd/ri though the modem circuit may do that separately?) J3: Floppy Connector - (standard DIL 34 pin 2-row rectangular connector for mini-shugart/pc floppy cable; pin 2 IS connected somewhere) + (standard DIL 34 pin 2-row rectangular connector for mini-shugart/pc floppy cable; pin 2 IS connected somewhere and ?probably? is used for /DISKCHANGE like on an Amiga, with pin 34 being /TRUEREADY?) + (as opposed to normal ibm pc 3.5" drives where pin 2 is unconnected or is /DENSITY *input to drive*, and pin 34 is /DISKCHANGE) J4: 18-pin sip header for keyboard ribbon cable (needs tracing to see the VIA hookup order) J5: locking-tab-type "CONN HEADER VERT 4POS .100 TIN" connector for supplying power @@ -237,7 +238,7 @@ J9: unpopulated DIL 40-pin straight connector for a ROM debug/expansion/RAM-shad (GND ? ? ? gnd ? vcc a12 a7 a6 a5 a4 a3 a2 a1 a0 d0 d1 d2 gnd) Jx: 4 pin on top side, 6 pin on bottom side edge ?debug? connector (doesn't have a Jx number) (trace me!) -B1: a cut-able trace on the pcb. Not cut, affects one of the pins on the unpopulated J9 connector only. +B1: a cuttable trace on the pcb. Not cut, affects one of the pins on the unpopulated J9 connector only. E1: jumper, unknown purpose, not set E2: jumper, unknown purpose, not set D13: LED @@ -365,6 +366,7 @@ ToDo: #include "machine/6850acia.h" #include "machine/6522via.h" #include "machine/nvram.h" +#include "sound/speaker.h" class cat_state : public driver_device { @@ -383,7 +385,7 @@ public: m_acia6850(*this, "acia6850"), m_via0(*this, "via6522_0"), m_via1(*this, "via6522_1"), - //m_speaker(*this, "speaker"), + m_speaker(*this, "speaker"), m_svram(*this, "svram"), // nvram m_p_cat_videoram(*this, "p_cat_vram"), m_p_swyft_videoram(*this, "p_swyft_vram"), @@ -407,7 +409,7 @@ public: DECLARE_WRITE_LINE_MEMBER(cat_duart_irq_handler); DECLARE_WRITE_LINE_MEMBER(cat_duart_txa); DECLARE_WRITE8_MEMBER(cat_duart_output); - //required_device m_speaker; + optional_device m_speaker; optional_shared_ptr m_svram; optional_shared_ptr m_p_cat_videoram; optional_shared_ptr m_p_swyft_videoram; @@ -1056,7 +1058,7 @@ UINT32 cat_state::screen_update_cat(screen_device &screen, bitmap_ind16 &bitmap, return 0; } -/* TODO: the duart is the only thing actually connected to the cpu IRQ pin +/* The duart is the only thing actually connected to the cpu IRQ pin * The KTOBF output of the gate array 2 (itself the terminal count output * of a 16-bit counter clocked at ~10mhz, hence 6.5536ms period) goes to a * d-latch and inputs on ip2 of the duart, causing the duart to fire an irq; @@ -1081,16 +1083,16 @@ WRITE_LINE_MEMBER(cat_state::cat_duart_txa) } /* mc68681 DUART Input pins: - * IP0: CTS [using the duart builtin hardware-CTS feature?] + * IP0: CTS [using the DUART builtin hardware-CTS feature?] * IP1: Centronics ACK (IP1 changes state 0->1 or 1->0 on the falling edge of /ACK using a d-latch) - * IP2: KTOBF (IP2 changes state 0->1 or 1->0 on the rising edge of KTOBF using a d-latch; KTOBF is a 6.5536ms-period squarewave generated by one of the gate arrays, i need to check with a scope to see whether it is a single spike/pulse every 6.5536ms or if from the gate array it inverts every 6.5536ms, documentation isn't 100% clear but I suspect the former) [uses the Delta IP2 state change detection feature to generate an interrupt; I'm not sure if IP2 is used as a counter clock source but given the beep frequency of the real unit i very much doubt it, 6.5536ms is too slow] + * IP2: KTOBF (IP2 changes state 0->1 or 1->0 on the rising edge of KTOBF using a d-latch; KTOBF is a 6.5536ms-period squarewave generated by one of the gate arrays, I need to check with a scope to see whether it is a single spike/pulse every 6.5536ms or if from the gate array it inverts every 6.5536ms, documentation isn't 100% clear but I suspect the former) [uses the Delta IP2 state change detection feature to generate an interrupt; I'm not sure if IP2 is used as a counter clock source but given the beep frequency of the real unit I very much doubt it, 6.5536ms is too slow] * IP3: RG ("ring" input) * IP4: Centronics BUSY * IP5: DSR */ /* mc68681 DUART Output pins: - * OP0: RTS [using the duart builtin hardware-RTS feature?] + * OP0: RTS [using the DUART builtin hardware-RTS feature?] * OP1: DTR * OP2: /TDCS (select/enable the S2579 DTMF tone generator chip) * OP3: speaker out [using the 'channel b 1X tx or rx clock output' or more likely the 'timer output' feature to generate a squarewave] @@ -1104,6 +1106,7 @@ WRITE8_MEMBER(cat_state::cat_duart_output) #ifdef DEBUG_DUART_OUTPUT_LINES fprintf(stderr,"Duart output io lines changed to: %02X\n", data); #endif + m_speaker->level_w((data >> 3) & 1); } static MACHINE_CONFIG_START( cat, cat_state ) @@ -1133,6 +1136,10 @@ static MACHINE_CONFIG_START( cat, cat_state ) MCFG_DUARTN68681_A_TX_CALLBACK(WRITELINE(cat_state, cat_duart_txa)) MCFG_DUARTN68681_OUTPORT_CALLBACK(WRITE8(cat_state, cat_duart_output)) + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MCFG_NVRAM_ADD_0FILL("nvram") MACHINE_CONFIG_END @@ -1498,6 +1505,39 @@ ROM_START( swyft ) ROMX_LOAD( "infoapp.lo.u30", 0x0000, 0x8000, CRC(52c1bd66) SHA1(b3266d72970f9d64d94d405965b694f5dcb23bca), ROM_BIOS(2)) ROMX_LOAD( "infoapp.hi.u31", 0x8000, 0x8000, CRC(83505015) SHA1(693c914819dd171114a8c408f399b56b470f6be0), ROM_BIOS(2)) ROM_REGION( 0x4000, "pals", ROMREGION_ERASEFF ) + /* Swyft PALs: + * The Swyft has four PALs, whose rough function can be derived from their names: + * TIMING - state machine for DRAM refresh/access; handles ras/cas and choosing whether the video out shifter or the 68k is accessing ram. also divides clock + * DECODE - address decoder for the 68008 + * VIDEO - state machine for the video shifter (and vblank/hblank?) + * DISK 3.5 - state machine for the floppy drive interface + */ + /* U9: Timing AMPAL16R4 + * + * input + * 76543210 + * |||||||\-- ? + * ||||||\--- ? + * |||||\---- ? + * ||||\----- ? + * |||\------ ? + * ||\------- ? + * |\-------- ? + * \--------- ? + * /CK ------ 15.8976mhz crystal and transistor oscillator + * /OE ------ ? + * + * output + * 76543210 + * |||||||\-- ? + * ||||||\--- ? + * |||||\-R-- ? + * ||||\--R-- ? + * |||\---R-- ? + * ||\----R-- ? + * |\-------- ? + * \--------- ? + */ ROM_LOAD( "timing_b.ampal16r4a.u9.jed", 0x0000, 0xb08, CRC(643e6e83) SHA1(7db167883f9d6cf385ce496d08976dc16fc3e2c3)) ROM_LOAD( "decode_e.ampal16l8.u20.jed", 0x1000, 0xb08, CRC(0b1dbd76) SHA1(08c144ad7a7bbdd53eefd271b2f6813f8b3b1594)) ROM_LOAD( "video_2b.ampal16r4.u25.jed", 0x2000, 0xb08, CRC(caf91148) SHA1(3f8ddcb512a1c05395c74ad9a6ba7b87027ce4ec)) @@ -1587,4 +1627,4 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT DEVICE INIT COMPANY FULLNAME FLAGS */ COMP( 1985, swyft,0, 0, swyft, swyft, driver_device, 0, "Information Applicance Inc", "Swyft", GAME_NOT_WORKING | GAME_NO_SOUND) -COMP( 1987, cat, swyft, 0, cat, cat, driver_device, 0, "Canon", "Cat", GAME_NOT_WORKING | GAME_NO_SOUND) +COMP( 1987, cat, swyft, 0, cat, cat, driver_device, 0, "Canon", "Cat", GAME_NOT_WORKING)