📰 newsreader

twostopbits score 0.44 奜み 0.38 en

Telematico NMS3000 (celso.io)

原題: The Telematico NMS3000 (celso.io)

videotexphilips telematico nms3000retro computingmodemx.25hardware hackingminitelz80 cpu
原文 ↗

日本語蚳

# タむトル

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.

← 䞀芧に戻る