summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2021-05-22 10:13:34 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2021-05-22 10:13:34 +0200
commit1f460d4e5bbf3a9d78d73ff72a23b60e04075b92 (patch)
treecf5644451efda243b379a45f3a70fb4cf6a09bde
parent022e70fea660fdfe435cb6a69532ec697c99f49c (diff)
canon_s80.cpp: added hardware info and trojaned internal HD6301 ROM for canonts3 [Guru]
-rw-r--r--src/mame/drivers/canon_s80.cpp148
1 files changed, 137 insertions, 11 deletions
diff --git a/src/mame/drivers/canon_s80.cpp b/src/mame/drivers/canon_s80.cpp
index f5af607ec17..6986186ac10 100644
--- a/src/mame/drivers/canon_s80.cpp
+++ b/src/mame/drivers/canon_s80.cpp
@@ -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) )