Telematico NMS3000 (celso.io)
åé¡: The Telematico NMS3000 (celso.io)
æ¥æ¬èªèš³
# ã¿ã€ãã«
The Telematico NMS3000 (celso.io)
# æ¬æ
The Telematico NMS3000
ãä¹ ãã¶ãã§ããä»åã¯ããæã«å ¥ããããªãã£ãã³ã³ãã¥ãŒã¿ãã·ãªãŒãºã®ç¶ããšããŠãæåéãæ°ã¶æãã®éãäœæ¥å°ã«æŸçœ®ãããå°ãæéã空ãã®ãåŸ ã£ãŠãããããžã§ã¯ãã«ã€ããŠã話ãããããšæããŸãããã®åã¯ãPhilips Telematico NMS3000ã§ãã
ãã®éºç©ãæã«å ¥ããŠäœæ¥ããããšæã£ãçç±ã¯ããã€ããããŸããã¢ãã ãX.25ãVideotexãšãã£ãã€ã³ã¿ãŒããã以åã®æä»£ã«ã¿ã€ã ã¹ãªãããããŠãããããšãä»çµã¿ãå®å šã«çè§£ã§ããã»ã©ã·ã³ãã«ã§ããããšããããŠãã€ã³ã¿ãŒãããäžã«ã»ãšãã©æ å ±ãååšããªãããšã§ããæåŸã®äžç¹ã¯ãèªåèªèº«ã§çºèŠããŠããããšã匷ããããããšãæå³ããŸããããããªãããæ²Œãã«ãããã¿ã€ããªãããããæé«ã«æ¥œããéšåã§ããããšã¯åãã£ãŠããã¯ãã§ãã
Videotexãšã¯äœã
ãåç¥ãªãæ¹ã®ããã«èª¬æãããšãVideotexã¯70幎代åé ã®ãã¬ãã§èŠãããTeletextèŠæ Œã®æµããæ±²ããã®ã§ãã€ã³ã¿ãŒããã以åã®åæã®åæ¹åé»åéä¿¡ã·ã¹ãã ã§ããæšæºçãªé»è©±åç·ãšã¢ãã ãåãã端æ«ãä»ããŠããŠãŒã¶ãŒãæ å ±ãµãŒãã¹ãšéä¿¡ã»çžäºäœçšããããšãå¯èœã«ããç»é¢äžã«ããã¹ããåæ©çãªã°ã©ãã£ãã¯ã¹ã衚瀺ããŸãããVideotexã¯ãGopherãšåæ§ã«ã€ã³ã¿ãŒãããã®å身ãšãããååšã§ãã
å€ãã®ãšãŒããã諞åœã«ã¯ãç¬èªã®çããªVideotexãµãŒãã¹ããããŸããããã©ã³ã¹ã«ã¯æåãªMinitelãããããããã«ãã¬ã«ã«ã¯ãçŸåšã¯äº¡ããªã£ãTelepacãæäŸãããµãŒãã¹ããããŸãããå¿ èŠãªNUAïŒNetwork User AddressïŒã®èªèšŒæ å ±ãããã°ãæšæºçãªãã€ã€ã«ã¢ããåç·ãŸãã¯X.25ãã±ããäº€ææ¥ç¶ãä»ããŠVideotexã«ã¢ã¯ã»ã¹ã§ããŸãããç§ãã¡ã®ããŒã«ã«ãµãŒãã¹ã§æãçŽ æŽãããã£ãã®ã¯ãåœéãµãŒãã¹ãžã®ããªããžæ©èœããã£ãããšã§ããã€ãŸãããã©ã³ã¹ã®Minitelãããã¯ãŒã¯ãžé£ã³ç§»ãããšãã§ããã®ã§ãã
ã€ã³ã¿ãŒããã以åã®æä»£ã倧åŠã®X.25æ¥ç¶ãïŒäžé©åã«ïŒå©çšããŠMinitelã«ã¢ã¯ã»ã¹ããç¹ã«åœæäººæ°ããã£ãããã«ãŒçšãã£ããã«ãŒã ãµãŒãã¹ã§ããQSDã«æ¥ç¶ããããšãé®®æã«èŠããŠããŸããã§ããããã®è©±ã¯ãŸãå¥ã®æ©äŒã«ããŸãããã
ããã¡ãªã¿ã«ãVideotextãã§ã¯ãªããVideotexãã§ãã
Telematicoãšã¯äœã
Telematicoã¯ãã€ã¿ãªã¢åžå Žåãã«ãååœã®VideotelãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã«ç¹å¥ã«èšèšãããã1988幎ã«çºå£²ãããå°çšã®Videotex端æ«ã§ãã
å éšä»æ§ã¯ä»¥äžã®éãã§ãïŒ
- Z80 CPUïŒãé©ç°çãªã3MHzé§åïŒ
- 32KBã®ROMãš4KBã®RAM
- ãŠãŒã¶ãŒèšå®ä¿åçšã®256ãã€ãã®EEPROM
- CEPT Videotex Level 1 ãããªãã³ãŒããŒ
- CCITT V.21ããã³V.23ïŒ1200/75 baudïŒå¯Ÿå¿ã®å èµã¢ãã
ã¢ãŒããã¯ãã£ã®é¢ã§ã¯ãTelematicoã¯MSX1èŠæ Œã«ç·©ããã«åºã¥ããŠããŸããPhilipsèªèº«ãå€ãã®MSXã³ã³ãã¥ãŒã¿ã補é ããŠããããã圌ãã¯MSXãé ã ãŸã§çç¥ããŠããŸãããããããããã¯å³å¯ã«ã¯MSXã§ã¯ãããŸãããåºæ¿äžã®ICã¯80幎代åŸåã®ããŒããŠã§ã¢ãšããŠã¯æšæºçãªãã®ã§ãããäžã€ã ã倧ããªäŸå€ããããŸããVideotexã®ãã³ãŒããšãããªçæãæ ãããCelintããšã©ãã«ä»ããããè¬ã®ç¬èªã®40ãã³ãããã§ããããã«ã€ããŠã¯åŸã»ã©è©³ãã説æããŸãã
ããŠã黿ºãå ¥ããŠã¿ãŸãããã
ã©ããã£ãŠé»æºãå ¥ããã°ããã®ãïŒ
åè¿°ã®éãããã®ç«¯æ«ã®ããã¥ã¡ã³ãã¯ãªã³ã©ã€ã³äžã«ã¯äºå®äžååšããŸãããåè·¯å³ã¯ãã¡ããããŠãŒã¶ãŒããã¥ã¢ã«ããèŠã€ãããŸããã§ãããããããå±ãããŠãããã¯ã±ãŒãã«ã黿ºã¢ããã¿ããªããæå°éã®æ§æã§ããã幞ããªããšã«ããã®ã³ãã¯ã¿å³ãæ²èŒãããŠãããŠã§ãããŒãžãäžã€èŠã€ãåºããŸããã
ãããããã§ç¬¬äžæ©ã§ãããããã¯æšæºçãª8ãã³ããã³4ãã³ã®DINã³ãã¯ã¿ãªã®ã§ãèªåã§ã±ãŒãã«ãäœãããšãã§ããŸãã
黿ºã«ã€ããŠã¯ãDC-DC PicoPSU-150-XT ATX黿ºãããžç«¯åã¢ããã¿ã«æ¥ç¶ããŠäœ¿çšããããšã«ããŸãããæšæºçãªATX黿ºã¯10Vã©ã€ã³ãåºåããªãããããã€ãªãŒãã2ã€çŽåã«ç¹ãã§ã12Vã¬ãŒã«ãçŽ10.6VãŸã§éå§ããŸãããããã§ç«¯æ«ã®èš±å®¹ç¯å²å ã«åãŸã£ãŠããã°ããã®ã§ããã
ãããªã«é¢ããŠã¯ãTelematicoã¯RGB + syncãåºåããŸããããã¯ç§ã®Retro Scaler 2xãšçžæ§ãè¯ããã¢ããã°ä¿¡å·ãã¢ããã¹ã±ãŒãªã³ã°ããŠãçŸä»£ã®ã¢ãã¿ãŒçšã®ã¯ãªãŒã³ãªHDMIã«å€æã§ããŸãã
ã¹ã€ãããå ¥ããåã®æåŸã®é£é¢ã¯ãããŒããŒããšã¡ã€ã³ããŒãã®æ¥ç¶æ¹æ³ã§ããåäœäžã«ã³ã³ããŒãã³ãããããŒãããããšãããšãåããã¹ããŒã¹ãã»ãšãã©ãããŸãããããã解決ããããã«ããžã£ã³ããŒã¯ã€ã€ãšéãããŒãã䜿ããŸãã£ãŠãæ¥é ã®å»¶é·ããŒãã¹ãäœæããŸããã
ããã§æºåãæŽã£ãã¯ãã§ãã
ã¹ã€ãããå ¥ããŸãããç»é¢ã«ã¯ã¯ã©ã·ãã¯ãªPhilipsã®ããŽãçŸããç¶ããŠã€ã¿ãªã¢èªã®ãã€ã€ã«ã¢ããé»è©±åž³ãšèšå®ã¡ãã¥ãŒã衚瀺ãããŸãããæåã§ãã
Telematicoããªã³ã©ã€ã³ã«ãã
次ã®è«ççãªã¹ãããã¯ã端æ«ãå¥ã®ã³ã³ãã¥ãŒã¿ã«æ¥ç¶ããããšã§ããçå±ã§ã¯ç°¡åããã«èãããŸãããå®éã«ã¯ããã¯ãããŸãããã·ãªã¢ã«ããŒãããã©ã¬ã«ããŒããæ¡åŒµãã¹ããããŸããããã®ãã·ã³ããããŒã¿ãåºãŠããå¯äžã®æ¹æ³ã¯ãã¢ãã ãšé»è©±åç·ãéãããšã ãã§ãã
ããã§ãèšç»ã¯ã·ã³ãã«ã§ããTelematicoã®å èµã¢ãã ããMacã«æ¥ç¶ããå®äŸ¡ãªStarTech補USBããŒããŠã§ã¢ã¢ãã ã«çŽæ¥ãªã³ã¯ããããç°¡åã§ãããïŒ
ãšããããããã¯ãããŸããã§ããã
2ã€ã®å€ãã¢ãã ãé»è©±ç·ã§ç¹ãã ã ãã§ãäºãã«éä¿¡ã§ãããšæåŸ ããŠã¯ãããŸãããã¢ãã ã¯ãæ¬ç©ã®çããé»è©±åç·ãæ¥ç¶ãããŠããããšãæåŸ ããŠããŸããå ·äœçã«ã¯ãå å ¥è ã«ãŒãïŒsubscriber loopïŒã«ç©ççã«é»å§ããããåè·¯ãæŽ»æ§åãããããã«ãåç·ã«çŽæµïŒéåžžã¯24Vãã48V DCçšåºŠïŒãæµããŠããå¿ èŠããããŸããã¢ããšã ã¯ãã®é»å§ãæ€ç¥ããããšã§ãããªãããã¯ïŒå話åšãäžããç¶æ ïŒãã§ããããšãèªèããå éšã®ããŒã¿åè·¯ãèµ·åãããŸãããã®é»å§ããªããšãã¢ãã ã¯åç·ãæ»ãã§ãããšå€æããåäœãæåŠããŠããŸããŸãã
äž¡æ¹ã®ããã€ã¹ãéšãããã«ãå€éšé»æºã䜿çšããŠãã®ãªãããã¯é»å§ãã·ãã¥ã¬ãŒããããã·ã³ãã«ãªåç·é»å§æ³šå ¥åè·¯ãäœæããŸããã
次ã«ãTelematicoäžã§åã«ã1ãããã€ã€ã«ããé»è©±åž³ãšã³ããªãäœæããŸããïŒå®éã®æ°åã¯éèŠã§ã¯ãããŸããããœãããŠã§ã¢ãããŒããŠã§ã¢ã®ãªã¬ãŒãããªã¬ãŒããŠãªãããã¯ç¶æ ã«ããå¿ èŠãããã ãã§ãïŒããããŠãæ¥ç¶ã¿ã€ããVideotelããã³V.23ïŒ1200/75 baudïŒã«èšå®ããŸããã
ãã¹ãã®æéã§ããMacã§minicomãèµ·åããã·ãªã¢ã«ããŒãã115200 bps 8N1ã«èšå®ãããŒã«ã«ãšã³ãŒãæå¹ã«ããæåã®ã¢ã³ã¹ã¢ã³ãã³ãïŒATAïŒãçºè¡ããŸãããåæã«ãTelematicoã«ãã€ã€ã«ããããæç€ºããŸããããªã¬ãŒãã1ããšããçªå·ããã€ã€ã«ããé³ãšãã¢ãã ã®ãã³ãã·ã§ã€ã¯é³ãèãããŸããæ°ç§åŸãç»é¢ã«ãCONNECTããšè¡šç€ºãããŸããã
minicomã§ãã¹ãæååãå ¥åããTelematicoã®ãã£ã¹ãã¬ã€ã«ãšã³ãŒããã¯ãããã確èªããŸããããããããabcdefgh0123456789ãã®ä»£ããã«ãæåãæ£ãã衚瀺ãããããæååãããããšãã£ãããã¡ããã¡ããªç¶æ ã«ãªããŸããã
ããã¯ééããªãããªãã£ã®äžäžèŽã ããšç§ã¯èããŸãããåœæã®VideotexãMinitelã·ã¹ãã ã®æšæºã¯ãçŸä»£ã®8N1ã§ã¯ãªãã7E1ïŒããŒã¿ããã7ãå¶æ°ããªãã£ãã¹ãããããã1ïŒã§ãããMacã®èšå®ã7E1ã«å€æŽããŸãããããã§ãæååããããŸãŸã§ããã¹ããããããã2ã«ãããã奿°ãã¿ãŒãããªãã£ãªãâŠâŠèããããããããçµã¿åããã詊ããŸããããããã¹ãã¯èªããªãç¶æ ã®ãŸãŸã§ããã
USBã¢ãã ã®èšå®ã®ããã§ããããïŒ ATSã¬ãžã¹ã¿ãããã£ãŠäœæéãè²»ãããŸããããã¢ãã ã¯ãã§ã«ãã£ãªã¢ãææïŒããã¯ïŒããŠããã®ã§ãæå³ããããŸããã§ãããminicomã®äœ¿çšãå®å šã«ãããçã®Tcl send/expectã¹ã¯ãªãããæžããsttyãã©ã°ãçŽæ¥æäœããŠã¿ãŸãããã©ããæ©èœããŸããã§ããã
ãœãããŠã§ã¢ã«ããæåãå«ããç§ã¯ãªã·ãã¹ã³ãŒããåãåºããMacããæåãéä¿¡ããªãããTelemã¢ãã ã®PCBäžã®ããžã¿ã«ããŒã¿ã©ã€ã³ãçŽæ¥ãããŒããå§ããŸããã
ãã®è¡ãè©°ãŸãã¯ãæ°é±éã«ããã£ãŠç¶ããŸãããåè·¯å³ããªãç¶æ ã§ãç²ç®çã«åºæ¿ããããã®ã¯æåãšã¯èšããŸããã
KiCadãåŠãã
ç§ã¯ããã®é害ããToDoãªã¹ãã®å€ãé ç®ãæ¶åããæ©äŒã«ããããšã«ããŸããããªãŒãã³ãœãŒã¹ã®PCBèšèšã¹ã€ãŒãã§ããKiCadãåŠã³ãåæã«TelematicoããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããŠããã®åè·¯å³ãäœæããããšã§ãã
åã¯ã€ããŸãããããã«ã¯èšå€§ãªæéãããããŸãããæ°ãåããªãã»ã©ã®å°éãã¹ããPCBãã¬ãŒã¹ã®è¿œè·¡ããããŠå€ãã®è©Šè¡é¯èª€ã䌎ããŸãããããããåæã«éåžžã«æ¥œããäœæ¥ã§ããããŸãããKiCadã¯ãæåã®åŠç¿æ²ç·ãä¹ãè¶ããã°ã䜿ãã®ã楜ãããªãããŒã«ã§ãããªã³ã©ã€ã³ã®ã³ãã¥ãØ©ãªãœãŒã¹ãçŽ æŽããããBlueskyã®ããããããŒã®äžäººããå©ããåŸãããšãã§ããŸããã
ãšããããšã§ãã€ãã«Philips Telematico NMS3000ã®åè·¯å³ã宿ããŸãããæ¢çŽ¢ãããæ¹ã¯ãå®å šãªKiCadã®ãœãŒã¹ã¯ãã¡ãã«ãããŸãããŸããé²èЧããããããã«ã€ã³ã¿ã©ã¯ãã£ããªHTMLçãå ¬éããŠããŸãã
ããã§ãä»çµã¿ãåãããã©ãããããŒãããã°ããã®ãã倿ããŸããã
ããã«ãEF9810 FSKã¢ãã ãããã®æ¥ç¶å³ããããŸãã
ãã·ã³ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããçŽ æŽãããå¯ç£ç©ã®äžã€ã¯ãROMã³ãŒããäžè¡ãèªãŸãã«ãã¢ãã¬ã¹ã©ã€ã³ãã©ã€ã³ãã³ãŒããI/Oããããšã©ã®ããã«çžäºäœçšããŠããããèŠãã ãã§ãã·ã¹ãã å šäœã®ã¡ã¢ãªããããå°ãåºããããã«ãªã£ãããšã§ãã
ããªãã£ã®è¬ã解決
æ°ããåè·¯å³ãæã«ãç§ã¯ã¹ã³ãŒããæ¥ç¶ããŸããã
åæïŒè±èªïŒã衚瀺
The Telematico NMS3000
Itâs been a while. This time, Iâm continuing the âcomputers that I never hadâ series to talk about a project that has been sitting on my bench for literally months, waiting for a little less busy times to complete: the Philips Telematico NMS3000.
There are a couple of reasons why I bought this relic to work on: it takes me right back to the pre-Internet days of modems, X.25, and Videotex; itâs simple enough that I actually stand a chance of fully understanding how it works; and it has near-zero information available on the Internet. That last part forces me to discover things on my own, which, if youâre the rabbit hole type, you know is the best part.
What is Videotex
For the uninitiated, Videotex followed the Teletext standard found on TVs in the early 70s and was an early, pre-Internet, two-way electronic communication system enabling users to communicate and interact with information services via standard telephone lines and a terminal with a modem, displaying text and rudimentary graphics on a screen. Videotex, like Gopher was a precursor of the Internet.
A lot of European countries had their own thriving Videotex services. France had the famous Minitel, and here in Portugal, we had a service provided by the now decease Telepac. We could access Videotex via a standard dial-up line or an X.25 packet-switched connection, provided we had the necessary NUA (Network User Address) credentials. The coolest part about our local service was that it provided a bridge to international servicesâmeaning we could jump to the French Minitel network.
I vividly remember (ab)using my universityâs X.25 connection in the pre-Internet days to access Minitel, specifically to get onto QSD, a somewhat popular hacker chatroom service. But those are stories for another day.
And yes, itâs Videotex, not Videotext.
What is the Telematico
The Telematico is a dedicated Videotex terminal launched in 1988, specifically tailored for the Italian market to access their Videotel service.
Under the hood, this terminal features:
- A Z80 CPU clocked at a âblazingâ 3MHz
- 32K of ROM and 4K of RAM
- A 256-byte EEPROM to save user configurations
- A CEPT Videotex Level 1 video decoder
- A built-in CCITT V.21 and V.23 (1200/75 baud) capable modem
Architecture-wise, the Telematico is loosely based on the MSX1 standardâa platform Philips knew inside and out because they manufactured plenty of MSX computers themselves. But itâs not really a MSX. The ICs on the board are standard fare for late-80s hardware, with one massive exception: a mysterious, proprietary 40-pin chip labeled âCelintâ that handles Videotex decoding and video generation. More on that in a bit.
Alright, letâs turn this thing on.
How do I even power this up?
Like I mentioned, documentation for this terminal is virtually nonexistent online. I couldnât find a user manual, let alone schematics, and the unit arrived bare-bonesâno cables, no power supply. Luckily, I stumbled onto a single webpage that included this connector diagram:
Well, itâs a start. These are standard 8-pin and 4-pin DIN connectors, which means I can actually build my own cables.
For power, I decided to use a DC-DC PicoPSU-150-XT ATX power supply mated to a screw-terminal adapter. Standard ATX power supplies donât output a 10V line, so I put two diodes in series to drop the 12V rail down to roughly 10.6V, which hopefully is within tolerance for the terminal.
As for video, the Telematico outputs RGB + sync. This works beautifully with my Retro Scaler 2x to upscale and convert the analog signal to clean HDMI for modern monitors.
One last hurdle before flip-the-switch time: the way that the keyboard is connected to the mainboard leaves almost zero maneuvering space if you want to probe components while the machine is running. To fix this, I hacked together a quick extension harness using a mess of jumper wires and blue tape.
I think weâre ready now.
I flipped the switch. The classic Philips logo materialized on the screen, followed immediately by the dialup phonebook and configuration menus in Italian. Success.
Bringing the Telematico online
The next logical step is connecting the terminal to another computer. This sounds simple on paper, but it obviously never is. There is no serial port, no parallel port, and no expansion bus. The only way data leaves this machine is through its modem and a telephone line.
So, the plan was simple: link the Telematicoâs internal modem directly to a cheap StarTech USB hardware modem hooked up to my Mac. Easy, right?
Wrong.
You canât just wire two old modems together with a phone cord and expect them to talk. Modems expect to see a real, live telephone line. Specifically, they require a direct current (usually around 24V to 48V DC) passing through the line to physically energize the subscriber loop. This is how the modem senses that it is âoff-hookâ and activates its internal data circuitry. Without that voltage, the modem assumes the line is dead and refuses to play along.
To trick both devices, I built a simple line voltage injector circuit using an external power supply to simulate that off-hook voltage:
Next, I created a phonebook entry on the Telematico that simply dials â1â (the actual digits donât matter; I just need the software to trigger the hardware relay to go off-hook) and set the connection type to Videotel and V.23 (1200/75 baud).
Time to test. I fired up minicom on my Mac, configured the serial port to 115200 bps 8N1, enabled local echo, and issued the manual answer command (ATA). Simultaneously, I told the Telematico to dial. I hear the relay dialing the number â1â and the modems handshaking. A few seconds later CONNECT shows on the screen.
I typed a test string into minicom to see it echo on the Telematicoâs display. But instead of abcdefgh0123456789, the terminal printed a garbled mess where some characters are right but others are not.
This is surely a parity mismatch, I thought. The standard back then for Videotex and Minitel systems was 7E1 (7 data bits, Even parity, 1 stop bit), not the modern 8N1. I reconfigured the Mac to 7E1. Same garbled mess. I tried two stop bits, odd parity, no parityâevery conceivable combination left the text unreadable.
Maybe it was my USB modem settings? I spent hours fiddling with ATS registers, but it made no sense because the modems were already successfully locked onto a carrier. I tried abandoning minicom
entirely, writing raw Tcl send/expect scripts and manipulating stty flags directly. Nothing worked.
Defeated by software, I pulled out the oscilloscope and started probing the digital data lines directly on the Telematicoâs PCB while sending characters from the Mac.
This impasse dragged on for week(end)s. Poking around a board blindly without a schematic isnât great.
I learned KiCad
I decided to use this roadblock to cross off an old item from my to-do list: learn KiCad, the open-source PCB design suite and while at it, reverse-engineer the Telematico and create its schematics.
I wonât lieâthis took an immense amount of time. It involved countless hours of continuity testing, tracing PCB traces, and plenty of trial and error. But it was loads of fun too. KiCad is a joy to use once you push past the initial learning curve, and the community resources online are awesome, I even got help from one of the devs on Bsky.
So yes, now the Philips Telematico NMS3000 finally has schematics. If you want to explore them, the complete KiCad sources are here, and Iâve also hosted an interactive HTML version for easy browsing.
Now I know how things work and I know what to probe.
Here are the EF9810 FSK Modem chip connections.
One of the nice side effects of reverse engineering the machine is that now I can deduce the systemâs entire memory map just by looking at how the address lines interact with the line decoders and the I/O chip, all without having to read a single line of the ROM code.
Parity conundrum, solved
Armed with the new schematics, I hooked up the scope again and tracked a single characterâs data stream all the way from the input pins of the modem chip to the data pins of the 8255 I/O controller. Hereâs what I discovered.
When sending the lowercase letter âaâ over a true 7E1 connection, you expect to see 10 bits serially: a 0
start bit, 7 data bits (1000011
in least-significant-bit order), an even parity bit (which should be 1
to make the total number of ones even), and a 1
stop bit.
Instead, the scope showed that the parity bit arriving at the terminal was always 0
, regardless of what character I sent.
The Mac was broadcasting data as if it were locked into 8N1, completely ignoring my 7E1 configurations. How is that possible?
As it turns out, macOSâs native AppleUSBACM serial driver has a bug: it defaults internally to 8 data bits (CS8) and completely ignores standard POSIX system calls to alter character size or inject hardware parity flags. It forces raw, 8-bit binary no-parity communication down the wire.
Had I plugged the USB modem into a Linux box or a Windows PC and it would have worked instantly. Kill me now.
Fortunately, the workaround is simple. We can calculate the parity bit in userland and pack the result into a raw 8-bit byte before sending it:
const evenParity = (b) => {
b &= 0x7f;
b ^= b >> 4;
b ^= b >> 2;
b ^= b >> 1;
return b & 1;
}
const to7E1 = (b) => {
const data = b & 0x7f;
const parity = evenParity(data);
return data | (parity << 7);
}
const encoded = Buffer.from("abcdefgh0123456789").map(to7E1);
await writeSerial(port, encoded);
No more garbled stuff.
I have good communications with the Telematico now.
A Videotex server, powered by Cloudflare Workers
Now that I have good communication between the Mac and the Telematico, I wanted to build a Videotex server that it could dial into and interact with.
I found the datasheet of the mysterious Celint Videotex decoder in a dark corner of the Internet, itâs actually a GEC Plessey MR9735 Teletext/Viewdata 625-Line Video Generator, and it gives me enough clues to get me started:
- 24 row x 40 character display.
- Support for ASCII and the oldest CEPT Level 1 Videotex (002 character set).
- Support for Viewdata attribute encoding (colors, flashing text, graphics mode).
Alright, I think I can work with this, hereâs what Iâm planning:
I roll up my sleeves and start coding. Well, half coding and half vibe-splopping, letâs be honest.
The backend runs entirely on Cloudflare Workers using a Durable Object to manage active client sessions, state machines, and real-time WebSocket connections. The server exchanges keystrokes, raw videodata frames, and other terminal control codes.
To make testing easier, I also built a browser-based companion client using Vite+React and the open-source package @techandsoftware/teletext that renders videotex pages as SVG.
You can actually try out the web version of the terminal at https://videotex.arkanoid.workers.dev/
The final piece of the puzzle is interfacing the server with the Telematico. For that I wrote the modem.ts script that connects to the Videotex server running on Workers over WebSocket on one side and my local RS-232 USB StarTech modem on the other. Once this proxy opens a Videotex session, it instructs the modem to answer a phone call using the âATAâ command. At the same time I manually instruct the Telematico to dial out if all goes well the connection is established.
Hereâs a video of an end-to-end session simulating what would happen IRL in the late 80s when youâd dial up a Videotex service.
Playing with the ROM
The Telematico has a 27C256 32K EPROM that holds the firmware (or should I say operating system?). I wanted to see what was inside, and more importantly, change it.
First I desoldered the original chip and installed a clean IC socket so I could swap chips easily moving forward.
Next up Iâm going to use my Retro Chip Tester Pro to dump the EPROM. I place it in the ZIF socket, select the 27256 EPROM option and a few seconds later I have a file with its content in it. You can find the image here.
Now for something fun I modified the binary image, translating the menu strings into English. But instead of burning a vintage, one-time-programmable EPROM, I opted for a modern alternative: the One ROM.
Designed by Piers Rocks, the One ROM is an incredible open-hardware project that uses a modern microcontroller to emulate classic 24-, 28-, 32-, and 40-pin legacy EPROMs.
But does it work with a Telematico? Letâs find out.
I had a few 24 and 28-pin One ROMs manufactured and shipped from PCBWay a few weeks ago.
So I burned my new English Telematico ROM image into the One ROM right from the browser using nothing but a USB-C cable and this Web app, and then put it in the PCB.
Then I turn on the machine and surprise, not only the One ROM works perfectly but I also have the first English Telematico NMS3000 in the world.
Hereâs the english version of the ROM.
Final words and ideas
Thatâs a wrap. You can find the KiCad schematics, the Videotex server and utilities, the ROM dumps and the IC datasheets in my NMS3000 GitHub repo.
Iâm going to give the terminal a well-deserved rest on the shelf for now, but I have future ideas:
- A USB keyboard adapter
- An RS-232 hardware bypass: Adding a physical serial port directly to the UART lines to bypass the internal modem entirely.
- Writing a native game and burning it in ROM: Itâs a pure Z80 system with RAM and (now) documented I/O maps. Writing a custom bare-metal game sounds like possible.
Hope you enjoyed this one.