Actions

MDT9100

From Trammell Hudson's Projects

Motorola MDT

Several Motorola MDT-9100T "Mobile Data Terminals" came up on eBay and their retro-future design was too neat to pass up. The stylish housing combined with an aperture-less amber CRT looks like something slipped from the Fallout or BladeRunner universe into our own. Some of us at NYC Resistor bought them and are repurposing them.

Windows 3.1

Windows 3.1

The original system had an i386SX running Windows 3.1 in a locked-down kiosk mode that would only allow the radio application to run. phooky figured out how to get a DOS prompt and used the installed LapLink tool to transfer some 1990s demo scene programs to his. I wanted to make mine into a more modern computer, while preserving the amber CRT and keyboard.

Bios
Bios

The BIOS setup screen can be reached with the "HOME" key during the boot and is a nostalgia trip. "Boot Sector Virus Protection" is such a throw back. There is also a debug mode to get a command prompt by hitting Left-Shift + Alt during the mirror_c Scanning message (which might not be visible since the CRT takes some time to warm up).

Among the funny bits of trivia about the MDT-9100:

Although Motorola advertised the MDT-9100 as suitable for secure data communication, the standard version was in fact highly insecure [...] According to Motorola, a 'special code' was used, but the code appeared to be nothing more than plain ASCII. The data protcol was known as the MDT-4800 protocol and used bit-interleaving as a means to correct transmission errors, and to obscure the data stream. When hackers discovered the properties of the protocol, several PC programs appeared that allowed the general public to monitor police conversations with nothing more than a scanner, a PC and a simple interface

Powering the MDT9100

Power

There is a +12V connector on the bottom and the system draws about 1.7 amps when it is running. The shielded one on the terminal is ground, the unshielded is positive (this cable end would have the opposite, preventing accidental shorts to ground if the connector was unplugged). There is also a 12V connector on the back, but it is only for the radio and can be left disconnected. I think this two pole towing connector is the right one; I carefully used aligator clips.

BeagleBone Black setup

Now it runs Linux

In order to replace the i386 with a BeagleBone Black it was necessary to build an adapter board that plugs into the ribbon cable, deduce the VGA timings and write a Device Tree overlay (DTBO) to configure the LVDS framing for the special screen, and design a USB HID keyboard interface for the keyboard and function keys.

Beagle bone black adapter

My first version is built on a BBB Prototyping Cape board. I had the bright idea of using it upside down so that the Teensy and 0.1" headers were better aligned, but this was a mistake -- there are many pins that are not mirrored on the proto cape and this resulted in having to cut away quite a few of the header pins to avoid boot mode problems or worse.

This is a good candidate for a real PCB with a proper DAC for the video. Maybe later...

Ribbon cable

Ribbon cable

The i386 connects to the keyboard and CRT through a 0.1" 16x2 header. The +12V power and ground are doubled up on the right hand side.

Keyboard GND Caps lock LED
Col 9 Col 8
Col 7 Col 6
Col 5 Col 4
Col 3 Col 2
Col 1 Col 0
Row 0 Row 1
Row 2 Row 3   CRT  
Row 4 Row 5
Row 6 Row 7
Fn Col 10 Fn Col 11
Fn Col 12 CRT status LED (2.2K)
Monitor enable Send Lamp?
+12V
 !Hsync  !Vsync
GND

BeagleBone LVDS setup

Vertical blanking
Video timing

The video is 0-1 V analog on the coax cable and I probed the ribbon cables with the oscilloscope. the horizontal sync pulses are active-low, 31.4KHz and the vertical sync pulses are also active-low for two frames and every 60Hz. This directly matches VGA 640x480@60Hz (confirmed by tinyvga) with a 25.175 MHz dot clock.

Video test
Beagle bone black video output

Based on my previous success with using the BeagleBone Black to drive a MacSE monochrome CRT, I thought I could use the LVDS framing hardware to do the same for the MDT9100. This required revisiting the Device Tree hackery and dealing with the lack of documentation plus the unhelpful error messages from loading the DTB files. Here's the key part of the display-timings section of the MDT9100-TILCDC-00A0.dts file:

      display-timings {
           native-mode = <&timing0>;
           timing0: 640x480@60 {
                       hactive = <640>;
                       vactive = <480>;
                       hback-porch = <48>; // in pixels
                       hfront-porch = <16>; // in pixels
                       hsync-len = <96>; // in pixels
                       vback-porch = <33>; // in pixels
                       vfront-porch = <10>; // in pixels
                       vsync-len = <2>; // in lines
                       clock-frequency = <25200000>; // should be 25175000
                       hsync-active = <0x0>; // active low
                       vsync-active = <0x0>; // active low
                       linux,phandle = <0x4>;
                       phandle = <0x4>;
               };      
       };

There is something wrong with the clock-frequency field -- if it is set to the exact value for VGA the hardware outputs at 1Hz rather than 60Hz. No clue why that is happening, but the 25.2MHz is close enough for the non-multisync CRT.

R2r dac
Five bit r2r

Using a 5-bit R2R resistor ladder (similar to my first Vector display), the top bits of the green channel of the LCD output (LCD6-LCD10) can be merged into an analog value for feeding into the CRT. This *works*, although it isn't the most linear. Using the LCD15 pins were problematic -- there seems to be a problem with the BBB's boot mode pins that would cause a hang if the R2R ladder was installed at boot time. The green channel doesn't seem to have this problem.

CRT section

One of the units had a bad flyback transformer and finding a replacement transformer has been unsuccessful so far, so it might be replaced with an actual LCD. Until then this one has provided additional parts to the other units.

Keyboard interface

Keyboard layout

The qwerty section is on the left half of the ribbon cable, the function keys are on the CRT section. The function keys have not yet been mapped. Probing the twenty pins going to the qwerty section revealed a 10 column by 8 row matrix, with diodes on each key. Oddly the anodes of each diode connect to the rows, which requires pull-down resistors in the interface.. Pin 19 is the Caps Lock LED and pin 20 is the ground for the LED (but is otherwise unused).

The matrix layout is:

Row 0 1 2 3 4 5 6 7
Col 0 Esc Home Numlock PrtScr ScrLck Pause Insert ?
1 ? ? ? ? ? ? ? Enter
2 Main 1 2 3 4 5 6 7
3 8 9 0 - = Backspace Page Up Tab
4 Q W E R T Y U I
5 O P [ ] Page Down CapsLock A S
6 D F G H J K L  ;
7 " Left Shift Z X C V B N
8 M , . / Right Shift Up End Ctrl
9 Alt SPACE ~ \ Left Down Right ?
10  ?  ?  ?  ? F11 F8 F5 Emergency
11  ?  ?  ? F1 F12 F9 F6 F3
12  ?  ?  ? F2 Send F10 F7 F4


Six of the rows are shared with the function key section and @phooky mapped the additional five pins going to the CRT section (columns 10-12, the large emergency lamp, a smaller RED LED).

There is a row/matrix keyboard driver built with a Teensy 3.2 in the mdtkey.ino file that makes the keyboard and function keypad appear as if it is a normal USB HID keyboard.

Applications

Pipboy demo

Everyone compares it to the Fallout Pipboy, so I added a video playback of the Fallout 4 second screen app. The PypBoy 3000 software also runs on the BBB with the installation of the PyGame and a few other packages.

Yes it runs Doom

Running Doom is the modern definition of Turing equivalence and the prdoom packages install on the BBB with no problems.

OCP

If anyone has any Robocop "Omni Consumer Products" themed applications, let me know!

Radios

Motorola MDT

I haven't had time to hack on the radios at all. I'm assume they are serial connected of some sort, although even with my amateur-extra rating I'm not sure I can use them. If anyone wants to try them out, get in touch with me!

More info

Hackaday