• Please review our updated Terms and Rules here

The case of the Spark printer and the missing firmware?

btb

Experienced Member
Joined
Nov 2, 2021
Messages
95
I'm trying to repair this old terminal (https://forum.vcfed.org/index.php?t...s-204-portable-terminal.1233019/#post-1234318) and at the moment I'm working on its integrated printer and interface board.
The printer is labelled internally as a Matsushita EUY-5EL8002. Miraculously I found this documentation (pages 17-34): https://archive.org/details/Matsushita-EUY-2EElectrostaticPrinterApplicationManualOCR
So I now know it's an "electrosensitive" (spark) printer, 80 columns, 7x5 dot matrix.

There is an interface circuit described there as well, but the board I have is quite different, seems like probably Telcon designed it?
My board has just three main chips on it:
The processor, an MC6802, the PIA, an MC6821, and a 1K ROM, the 2758. This board only speaks to the rest of the terminal hardware through the PIA

Anyway, the mystery here is, where is the program that this 6802 is running? I dumped the ROM and am I wrong or does it not look like 6800 code at all? I am pretty sure it is a character ROM but I haven't figured out the format yet.

I believe some 6800-series chips have an onboard PROM, but the 6802 isn't supposed to be one of them, right? Is it plausible that this printer gets its firmware streamed to it over the PIA from the terminal's main processor? I even made a schematic to try to figure it out.

Also, if anyone has any idea where I can get 5-inch wide rolls of electrosensitive ("metalized" / "aluminized" / etc) printer paper, please let me know!

Here's what's on the ROM. It's just these 256 bytes, which is repeated twice, and the rest is blank:
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000020 ff 7f 7f 6b 5b 5c 4f 7f 63 7f 6b 77 7f 77 7f 1f |...k[\O.c.kw.w..| 00000030 41 7f 1d 5d 67 58 43 1e 49 79 7f 7f 77 7f 7f 7d |A..]gXC.Iy..w..}| 00000040 41 01 00 41 3e 00 00 41 00 7f 5f 00 00 00 00 41 |A..A>..A.._....A| 00000050 00 41 00 39 7e 40 60 00 1c 78 1e 7f 1f 7f 7b 77 |.A.9~@`..x....{w| 00000060 7f 78 00 55 6c 31 7f 5c 7f 77 77 27 77 1f 6f 2e |.x.Ul1.\.ww'w.o.| 00000070 3d 2e 3e 6b 3a 35 6e 36 36 49 24 6b 6b 3e 7e 3e |=.>k:5n66I$kk>~>| 00000080 76 36 3e 00 36 76 3e 77 3e 3f 77 3f 7d 79 3e 76 |v6>.6v>w>?w?}y>v| 00000090 3e 76 36 7e 3f 5f 5f 6b 77 2e 00 6f 3e 7d 77 20 |>v6~?__kw..o>}w | 000000a0 7f 6b 00 77 26 74 3e 3e 41 41 47 77 1f 77 36 00 |.k.w&t>>AAGw.w6.| 000000b0 36 36 6d 3a 36 76 36 36 49 44 5d 6b 5d 2e 22 76 |66m:6v66ID]k]."v| 000000c0 36 3e 3e 36 76 3e 77 00 3e 6b 3f 73 77 3e 76 2e |6>>6v>w.>k?sw>v.| 000000d0 66 36 00 3f 3f 67 77 0f 36 3e 77 3e 00 77 7f 78 |f6.??gw.6>w>.w.x| 000000e0 00 55 1b 59 78 7f 5c 77 77 7f 77 7f 7b 3a 3f 36 |.U.Yx.\ww.w.{:?6| 000000f0 36 00 3a 36 7a 36 56 7f 7f 3e 6b 6b 76 2a 76 36 |6.:6z6V..>kkv*v6|


IMG_4825 copy.jpegIMG_4824 copy.jpegIMG_4826 copy.jpgprinter.png
 
I think you're going to have a tough time finding the paper, but FWIW, it's called "Teledeltos paper". I see single sheets being offered, but no continuous rolls. Maybe you can find some old stock paper for the Sinclair ZX printer, but 40 years after its introduction, I'm not optimistic.
 
Yeah, I've actually found just a few different sized rolls of it on ebay and elsewhere, but of course they're expensive and all the wrong size
 
Here's what's on the ROM. It's just these 256 bytes, which is repeated twice, and the rest is blank:
Even if it was the character ROM, it wouldn't be enough data. Please have a second try with dumping the data. I never even had heard of this MM2758Q and downloaded the datasheet. Pin 19 has a special function. Not being at home I cannot check if my programmers can handle this IC. If not, I would try to read it as a 2716.
 
This terminal has three of them (NatSemi MM2758Q-A), and I have had difficulty with them for sure. I set the minipro to 2716 but it seemingly can't cope with it, as subsequent reads are never identical. I figured out an arduino sketch to do it and that actually seemed to work well for the other two, which are the character ROM for the CRT (just bitmapped pixels, looks perfect), and an encoder ROM for the keyboard (it's mostly ASCII so that seems correct but not 100% sure yet).

I will give it another try though, seems like a good idea.
According to the datasheet, https://drive.google.com/file/d/15u310Z5ySS_i8MtV7tFiKqRBr9oR5sId/view?usp=sharing
Pin 19 is supposed to just be grounded on the -A variant, and it is on the main pcb and the keyboard pcb, so I was surprised to see it being used as A10 here. I'd better try dumping it with Pin 19 high, maybe that's the secret here!
 
No luck so far with that, pin 19 high just results in the exact same content.
 
One thing you can do is writing a little programs that does nothing else then flip one of the outputs of the 6821 every second. Use a 2716 and store the resulting BIN in the lower half of it. If the rest of the circuit is OK then you should see it flip when using a voltmeter. Or maybe there is already a LED somewhere? If it flips, you can assume that the original 2758 most probably is bad. If not..... At least your parts have been placed in sockets.
 
That sounds like it should be doable. flipping PA7 should make the motor start and stop...
 
Getting back to this project finally. I had some luck with other EPROMs by building a new arduino-based reader, and I decided to give this one another try. I got a little more data than in the OP but it still looked like junk. Then went for broke again and flipped pin 19 to high, and voila, code!
Code:
00000000  8e 00 7f 7f 00 00 86 ff  97 80 c6 05 d7 81 97 80  |.......?..?.?...|
00000010  c6 80 86 3e 96 80 8d 41  bd fc f2 96 80 8d 26 4f  |?..>...A???...&O|
00000020  bd fd 18 7c 00 00 26 f7  ce f8 21 df 01 ce 00 05  |??.|..&???!?.?..|
00000030  df 03 8d 41 bd fc f2 c6  80 d7 82 86 3e 97 83 7f  |?..A????.?..>...|
00000040  00 82 7e fc cd 5f 96 80  37 bd fc ea 33 96 81 49  |..~??_..7???3..I|
00000050  25 f4 5d 27 01 39 5c 20  ed 86 7f 97 80 ce 25 00  |%?]'.9\ ?....?%.|
00000060  09 26 fd 39 86 ff 97 80  39 c6 15 37 5f 5a 26 fd  |.&?9.?..9?.7_Z&?|
00000070  33 5a 26 f7 39 86 20 ce  00 05 a7 00 08 8c 00 56  |3Z&?9. ?..?....V|
00000080  26 f8 39 ce 00 05 df 03  de 03 a6 00 08 8c 00 56  |&?9?..?.?.?....V|
00000090  27 e3 df 03 97 02 81 20  26 05 bd fd 2b 20 e9 bd  |'??.... &.??+ ?|
000000a0  fc fe 20 e4 c6 36 d7 83  c6 3e d7 83 39 96 83 49  |?? ??6?.?>?.9..I|
000000b0  24 fb 8d f0 96 82 43 84  7f de 03 81 05 27 31 81  |$?.?..C..?...'1.|
000000c0  1f 23 0a a7 00 08 df 03  8c 00 55 26 e0 86 80 97  |.#.?..?...U&?...|
000000d0  82 bd fc 59 bd fc 45 bd  fc 83 ce 00 05 df 03 bd  |.??Y??E??.?..?.?|
000000e0  fc 69 bd fc 64 7f 00 82  20 c3 c6 e0 5a 26 fd 39  |?i??d... ???Z&?9|
000000f0  20 bb c6 02 ce 00 00 08  26 fd 5a 26 f7 39 de 01  | ??.?...&?Z&?9?.|
00000100  86 7f 8d 14 8d 12 a6 00  8d 0e a6 3f 8d 0a a6 7e  |......?...??..?~|
00000110  8d 06 a6 bd 8d 02 a6 fc  d6 81 59 24 fb 97 80 c6  |..??..???.Y$?..?|
00000120  20 5a 26 fd c6 7f d7 80  d6 80 39 86 7f c6 08 5a  | Z&??.?.?.9..?.Z|
00000130  27 f8 37 8d e3 33 20 f7  ff ff ff ff ff ff ff ff  |'?7.?3 ?????????|
00000140  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |????????????????|
*
000003f0  ff ff ff ff ff ff ff ff  fc 00 fc 00 fc 00 fc 00  |?????????.?.?.?.|
00000400

very weird that it's active with ARef high, as it's clearly marked MM2758A -Screen Shot 2022-09-05 at 4.37.20 AM.png

Also, at some point I also realized A10/ARef would have to go high just to read the reset vector so there was really no other way it would work.
 
I've read that 2758 chips are really just faulty 2716s with one half disabled. But now I think they aren't disabled, just marked A or B and the address line still works. And what Telcon did here is abuse one and use the "bad" half because the circuit was designed for a 2716 and that's where the code had to be.
 
Same with 8Kb DRAMs back in the day. You could take an Intel 2109, and if your system wasn't too fussy, use it as a 16Kb part (which it really is).
 
  • Like
Reactions: btb
Here's the (hopefully uncorrupted) lower 1k of the EPROM. It's not code, but after starting to disassemble the code in the upper half, I think this may actually be the character data. probably only uppercase letters, numbers and a handful of punctuation.

Code:
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |????????????????|
*
00000020  ff 7f 7f 6b 5b 5c 4f 7f  63 7f 6b 77 7f 77 7f 1f  |?..k[\O.c.kw.w..|
00000030  41 7f 1d 5d 67 58 43 1e  49 79 7f 7f 77 7f 7f 7d  |A..]gXC.Iy..w..}|
00000040  41 01 00 41 3e 00 00 41  00 7f 5f 00 00 00 00 41  |A..A>..A.._....A|
00000050  00 41 00 39 7e 40 60 00  1c 78 1e 7f 1f 7f 7b 77  |.A.9~@`..x....{w|
00000060  7f 78 00 55 6c 31 7f 5c  7f 77 77 27 77 1f 6f 2e  |.x.Ul1.\.ww'w.o.|
00000070  3d 2e 3e 6b 3a 35 6e 36  36 49 24 6b 6b 3e 7e 3e  |=.>k:5n66I$kk>~>|
00000080  76 36 3e 00 36 76 3e 77  3e 3f 77 3f 7d 79 3e 76  |v6>.6v>w>?w?}y>v|
00000090  3e 76 36 7e 3f 5f 5f 6b  77 2e 00 6f 3e 7d 77 20  |>v6~?__kw..o>}w |
000000a0  7f 6b 00 77 26 74 3e 3e  41 41 47 77 1f 77 36 00  |.k.w&t>>AAGw.w6.|
000000b0  36 36 6d 3a 36 76 36 36  49 44 5d 6b 5d 2e 22 76  |66m:6v66ID]k]."v|
000000c0  36 3e 3e 36 76 3e 77 00  3e 6b 3f 73 77 3e 76 2e  |6>>6v>w.>k?sw>v.|
000000d0  66 36 00 3f 3f 67 77 0f  36 3e 77 3e 00 77 7f 78  |f6.??gw.6>w>.w.x|
000000e0  00 55 1b 59 78 7f 5c 77  77 7f 77 7f 7b 3a 3f 36  |.U.Yx.\ww.w.{:?6|
000000f0  36 00 3a 36 7a 36 56 7f  7f 3e 6b 6b 76 2a 76 36  |6.:6z6V..>kkv*v6|
00000100  3e 5d 3e 7e 2e 77 3e 40  5d 3f 7d 4f 3e 76 5e 56  |>]>~.w>@]?}O>v^V|
00000110  36 7e 3f 5f 5f 6b 77 3a  3e 7b 00 7d 77 7f 7f 6b  |6~?__kw:>{.}w..k|
00000120  6d 1d 2f 7f 7f 63 6b 77  7f 77 7f 7c 41 7f 39 49  |m./..ckw.w.|A.9I|
00000130  6f 46 4f 7c 49 61 7f 7f  7f 7f 77 79 61 01 49 5d  |oFO|Ia....wya.I]|
00000140  63 3e 7e 4d 00 7f 7e 3e  3f 00 00 41 79 21 39 4e  |c>~M..~>?..Ay!9N|
00000150  7e 40 60 00 1c 78 3c 7f  7c 7f 7b 77 ff ff ff ff  |~@`..x<.|.{w????|
00000160  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |????????????????|
*
00000400
 
Yep! it's seven heads, dot matrix, so the pixels are stored as groups of columns.
So if we want to print a "G":
Its first column is at its ASCII offset, 0x47: 0x41, or 01000001
For column two, jump ahead 63 bytes to 0x86: 0x3e, or 00111110
For column three, jump ahead 63 bytes to 0xc5: 0x3e, or 00111110
For column four, jump ahead 63 bytes to 0x104: 0x2e, or 00101110
For column five, jump ahead 63 bytes to 0x143: 0x4d, or 01001101

bit 7 is not used (or rather, it's the signal for the printer's motor to advance), and the signals to the print heads are inverted, so here's the actual 5x7 character that prints:
Code:
 ***
*   *
* 
* 
*  **
*   *
 ***

nice!
 
Last edited:
Back
Top