canon_s80.cpp: added hardware info and trojaned internal HD6301 ROM for canonts3 [Guru]

This commit is contained in:
Ivan Vangelista 2021-05-22 10:13:34 +02:00
parent 022e70fea6
commit 1f460d4e5b

View File

@ -10,9 +10,142 @@
*
* known issues:
* - memory-map is uncertain
* - maincpu clock is guessed
* - maincpu clock was only verified for canonts3, but it's probably the same for canons80
* - still lacks description of the keyboard inputs
* - as well as a "paper" device to plot the output of the dot matrix print head
*************************************************************************************
Canon Typestar 3 Electronic Typewriter, Canon 1989/1990.
Hardware info by Guru
Last updated: 21st May 2021
---------------------------
This is an electronic typewriter made by Canon.
It uses a thermal printing process with ribbon cartridges containing a coil
of plastic tape coated with black 'ink' that is fused onto the paper via
heat from the thermal print-head.
The LCD has an alpha-numeric 15 character display with full editing capability and
some other areas that show fixed functions and operation modes.
It appears to be functionally identical to the Canon S80 Electronic Typewriter.
PCB Layout
----------
CANON NH1-0275-04
|------------------------------------------|
|CN1 CN2 CN6 |
| PIEZO VR2 FUSE(3A) DC|
| T1719A |
| CN3 CN4 M5233 M54523P SW1|
| CN5 |
| LC3518 |
| MB64H192 HD63A01X0P NH4-0268.IC6 VR1|
| 6MHz |
|------------------------------------------|
Notes:
CN1 - Head left-travel end-of-stroke switch connector (2 wires)
On power-up the head moves left to touch this switch then moves right about 1 inch then stops.
CN2 - Multi-pin flat cable for carriage power and data
CN3 - Multi-pin flat cable for LCD
CN4/CN5 - Multi-pin flat cables for keyboard
CN6 - Connector for battery power input (6V via 4x 1.5V D-Cells). There are 3 wires so
the CPU can detect when the battery is low and give the user a warning about it.
VR1 - Print darkness adjustment pot
VR2 - Piezo volume adjustment pot
PIEZO - Piezo speaker/beeper
LC3518 - Sanyo LC3518BL-15 2kb x8-bit SRAM, equivalent to 6116
NH4-0268.IC6 - Toshiba TC53257P 32kb x8-bit mask ROM marked 'NH4-0268' at location IC6
The ROM supports all characters in English, German, French, Spanish and Italian languages.
HD63A01X0P - Hitachi HD63A01X0P micro-controller with 4kb x8-bit internal mask ROM. Clock input 6MHz.
HD63A01 has an on-chip divide-by-4 clock divider so the MCU runs at 1.5MHz internally.
MCU is marked with a Canon part number 'NH4-0021' at location IC5.
The internal ROM was trojan-dumped using the undocumented test mode.
T1719A - Toshiba T1719A. Datasheet not available. This is most likely the keyboard and LCD
controller and probably made exclusively for Canon.
MB64H192 - Fujitsu MB64H192. Datasheet not available. This is most likely the carriage
motor controller and probably made exclusively for Canon.
M5233 - Mitsubishi M5233 Dual Comparitor, equivalent to LM4558
M54523P - Mitsubishi M54523P 7-Unit 500mA Darlington Transistor Array with clamp diode
DC - 6V DC power input 5.5mm barrel jack
SW1 - Power on/off switch
Keyboard Layout
---------------
Keyboard is made by Matsushita
Part#: NS5-0594
|--------------------------------------------------------------------------------|
|MARGIN KB |---------------------| L/MARGIN R/MARGIN|
|RELEASE | LCD | VR |
| MODE | | TABSET TABCLR |
| |---------------------| |
| ! @ # $ % Yen & * ( ) _ + <- -> |
|+- 1 2 3 4 5 6 7 8 9 0 - = |
| 1/4 |
| TAB Q W E R T Y U I O P 1/2 BS |
| |
| : "[ |
| LOCK A S D F G H J K L ; '] |
| RETURN|
| ?3 |
| SHIFT Z X C V B N M , . /2 SHIFT |
| |
| REPEAT SPACE RELOC CODE|
|--------------------------------------------------------------------------------|
Notes:
In the diagram above not all characters are shown due to being special or
international characters that are not available on US keyboards, however every
character used in the languages included in the ROM are available from this keyboard.
There are several keys with up to 4 different characters on them. They are
accessed by holding the key modifier SHIFT and KB keys.
KB is used to select the characters on the left side of a key or the right side
of a key. On the LCD fixed lower display, it will show I or II denoting either
the left (I) or right (II) side of the key is active. When typing a key the lower
character is normally active and the upper character is accessed by holding SHIFT.
VR2 - LCD brightness adjustment pot
MODE KEY FUNCTIONS (* = power-on default)
---------|---------------------------------------------------
* MODE + | +- Sets line spacing mode to 1
MODE + | 1 Sets line spacing mode to 1 1/2
MODE + | 2 Sets line spacing mode to 2
MODE + | 3 Sets typing mode to C (character by character printing like a mechanical typewriter, characters do not appear on the LCD)
* MODE + | 4 Sets typing mode to L (line printing, characters show on LCD and can be edited, then printed as one line by pressing RETURN)
* MODE + | 5 Sets printing mode to normal print
MODE + | 6 Sets printing mode to double-width print
MODE + | 7 Sets printing mode to underlined print
MODE + | 9 Sets manual carriage return mode
* MODE + | 0 Sets automatic carriage return mode
MODE + | = Sets justified text mode
MODE + | Q Moves the carriage while using the display for manual carriage positioning (for example typing in columns etc)
* MODE + | <- Sets typestyle mode to A (COURIER 10)
MODE + | -> Sets typestyle mode to B (CUBIC PS)
MODE + | Z Sets/cancels shading print mode. A 2nd menu will appear showing 4 shading modes that are selected by pressing numbers 1 - 4
---------|---------------------------------------------------
CODE KEY FUNCTIONS
---------|---------------------------------------------------
CODE + | 1 Sets centering between margins
CODE + | 2 Sets centering between tabs
CODE + | 4 Executes right margin alignment
CODE + | 5 Sets/clears indent position
CODE + | 6 Executes decimal tab
CODE + | 0 Executes automatic paper feed (i.e. loads paper to a fixed start position automatically)
CODE + | TABSET Sets decimal tab
CODE + | TAB Confirms decimal tab position
CODE + |TAB+TABCLR Clears specific decimal tab
CODE + | TABCLR Clears all tabs and decimal tabs
CODE + | = Executes permanent hyphen
CODE + | B Executes permanent space
CODE + | SPACE Executes controlled carriage movement
CODE + | RETURN Returns carriage without line feed
CODE + | D Prints a demo on the paper
---------|---------------------------------------------------
*************************************************************************************
*/
#include "emu.h"
@ -60,7 +193,7 @@ void canons80_state::canons80_map(address_map &map)
void canons80_state::canons80(machine_config &config)
{
// basic machine hardware
hd6301x0_cpu_device &maincpu(HD6301X0(config, "maincpu", 5000000)); // hd63a01xop 5 MHz guessed: TODO: check on PCB
hd6301x0_cpu_device &maincpu(HD6301X0(config, "maincpu", 6_MHz_XTAL)); // hd63a01xop
maincpu.set_addrmap(AS_PROGRAM, &canons80_state::canons80_map);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
@ -96,15 +229,8 @@ ROM_END
ROM_START( canonts3 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "hd63a1x0p.bin", 0x0000, 0x1000, NO_DUMP )
ROM_FILL( 0xfec, 1, 0xbf )
ROM_FILL( 0xfed, 1, 0xf2 )
ROM_FILL( 0xff4, 1, 0xbf )
ROM_FILL( 0xff5, 1, 0xf5 )
ROM_FILL( 0xffa, 1, 0xbf )
ROM_FILL( 0xffb, 1, 0xf8 )
ROM_FILL( 0xffe, 1, 0xbf )
ROM_FILL( 0xfff, 1, 0xfb )
// every 0x100 range was read via trojan 7 times, but reads weren't totally consistent. This was reconstructed by taking the most consistent reads for each byte.
ROM_LOAD( "nh4-0021.ic5", 0x0000, 0x1000, BAD_DUMP CRC(b859b7d4) SHA1(3a5a80b1b8040fe0b13c0fb52b93f738a06eff16) )
ROM_REGION( 0x8000, "external", 0 )
ROM_LOAD( "nh4-0268.ic6", 0x0000, 0x8000, CRC(bbdd9f74) SHA1(347fa0d37f4df0c175ff1d7feb634f681739804f) )