(MESS) cat.c: Canon Cat now has working sound [Lord Nightmare, R. Belmont]

(MESS) cat.c: Updated swyft related notes/comments from tracing [Lord Nightmare]
This commit is contained in:
Jonathan Gevaryahu 2014-02-27 04:51:33 +00:00
parent 7cd03e1c0c
commit 12ca48c3c1

View File

@ -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<speaker_sound_device> m_speaker;
optional_device<speaker_sound_device> m_speaker;
optional_shared_ptr<UINT16> m_svram;
optional_shared_ptr<UINT16> m_p_cat_videoram;
optional_shared_ptr<UINT8> 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)