+mizapf Posted February 3, 2015 Share Posted February 3, 2015 Following the reports on Stuart's web browser, people again suggested to use an old TI console and put a Raspberry PI inside. As I already said, at least MESS won't really run well on a Raspi, at least with its current performance, but faster models seem to come soon. I got another idea that should be perfectly feasible: What about using the TI console as a USB keyboard? Remove everything inside except for the keyboard Attach the keyboard lines to the digital inputs of a microcontroller; I suppose an Arduino should be enough, don't need a full Raspi You would then connect the TI console to the USB port of the PC, where it shows up as a keyboard Does anyone know more about how to make an Arduino pretend to be a USB device, particularly a keyboard? 1 Quote Link to comment Share on other sites More sharing options...
UKRetrogamer Posted February 3, 2015 Share Posted February 3, 2015 Following the reports on Stuart's web browser, people again suggested to use an old TI console and put a Raspberry PI inside. As I already said, at least MESS won't really run well on a Raspi, at least with its current performance, but faster models seem to come soon. The Raspberry Pi 2 was released just yesterday. Now with a quad core CPU and twice the RAM. Wonder if this will improve matters? Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 3, 2015 Author Share Posted February 3, 2015 I just recently tried to compile and run MESS on my Raspberry Pi (1), but I'm still stuck with a segfault from the audio system. It took 93368 seconds (!) to compile - my PC does the same in about 500 secs. Quote Link to comment Share on other sites More sharing options...
UKRetrogamer Posted February 3, 2015 Share Posted February 3, 2015 I've seen cross-compilation instructions somewhere online. Maybe that would improve compile-times? Let's face it, the Pi isn't supposed to be in competition with a full-fledged PC (though Microsoft are supposedly offering Windows 10 for free on the Pi). Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 3, 2015 Author Share Posted February 3, 2015 Sure, this was also intended to learn more about the capabilities. I see people talking about the Raspberry Pi as if it could replace their desktop PC, but it is really far, far behind. If I succeed in getting the current MESS to run on the Raspi, I'll do a benchmark to see how fast it goes. At this point I can already see the intro screen (system description), but when you press a key to enter the TI emulation, it bails out. However, this is already a first impression on the speed - you have to type "OK" at the beginning, and you need to hold down O and K for at least one second. I think the problem is with the X server. I should try to build the SDL lib without X so that it runs directly on the framebuffer. ---- Concerning my above idea, I just found that the Arduino Micro has 20 I/O pins which would be enough to connect the TI keyboard and the Joystick port. Could be possible ... Quote Link to comment Share on other sites More sharing options...
briantw Posted February 4, 2015 Share Posted February 4, 2015 (edited) Here's a completely different way of doing it, which won't require opening the TI at all. It requires a little piece of hardware to plug into the side of the console, with a bit of code running at >4000 to hijack the console as soon as you turn it on. Once the code residing in the external hardware takes over, it will just run a keyscan routine and output the keystrokes via USB. It's more complicated, but doesn't require opening the console, and it was a method used by the Triton TurboXT bridge box to get the TI to act as a PC keyboard, back in the day. Edited February 4, 2015 by briantw Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 4, 2015 Author Share Posted February 4, 2015 Well, I already ordered an Arduino Micro, and I still have my old TI console, so I guess I'll just try and see how far I can get . The Arduino may be powered by the USB interface, so I would not even need a separate power supply. Also, I don't have to make sure the console is still in working condition (has not seen power for 25 years ...) Quote Link to comment Share on other sites More sharing options...
briantw Posted February 4, 2015 Share Posted February 4, 2015 The Arduino Micro will definitely do the trick! 20 digital I/Os and HID still leaves you with 5 I/O pins for other stuff Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 11, 2015 Author Share Posted February 11, 2015 OK, that was easier than expected... :-) http://www.mizapf.de/ti99/tikeyboard.mp4 (35 MiB) This is the Arduino sketch: int column = 0; int value[] = { 0, 0, 0, 0, 0, 0, 0 }; int inputpin[] = { A0, A1, A2, A3, A4, A5, 11, 12 }; char key[] = { 'p', '0', 'a', ';', '/', '1', 'q', 'z', 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 'y', '6', 'g', 'h', 'n', '5', 't', 'b', 0xB0, 0x00, 0x81, ' ', '=', 0x82, 0x80, 0x00, 'O', '9', 's', 'l', '.', '2', 'w', 'x', 'i', '8', 'd', 'k', ',', '3', 'e', 'c', 'u', '7', 'f', 'j', 'm', '4', 'r', 'v' }; void setup() { /* Problem: We need open collector outputs. This can be achieved by switching to input mode. */ for (int i=0; i < 7; i++) { pinMode(i, INPUT_PULLUP); digitalWrite(i, HIGH); } for (int j=0; j < 8; j++) { pinMode(inputpin[j], INPUT_PULLUP); digitalWrite(inputpin[j], HIGH); /* Activate pullup. */ } // Kill switch pinMode(10, INPUT_PULLUP); digitalWrite(10, HIGH); column = 0; if (digitalRead(10)==LOW) { Keyboard.begin(); } } void loop() { /* The "kill switch" is a recommendation for all sketches for Arduino emulating a keyboard, because when there is a bug you can at least stop it from messing with our input. */ if (digitalRead(10)==LOW) { for (int i=0; i < 7; i++) { if (i==column) { /* Pull down line */ pinMode(i, OUTPUT); digitalWrite(i, LOW); } else { /* Pull up line, but do not output +5V -> open collector */ pinMode(i, INPUT_PULLUP); digitalWrite(i, HIGH); } } int newvalue = 0; int oldvalue = value[column]; for (int j=0; j < 8; j++) { newvalue <<= 1; if (digitalRead(inputpin[j]) == HIGH) { if ((oldvalue & 0x80) != 0x00) { /* Sends the break code */ Keyboard.release(key[column*8 + j]); } } else { newvalue |= 1; if ((oldvalue & 0x80) == 0x00) { /* Sends the make code */ Keyboard.press(key[column*8 + j]); } } oldvalue <<= 1; } value[column] = newvalue; column++; if (column>=7) column = 0; /* Have a little break */ delay(1); } else { /* Input disabled */ delay(1000); } } 2 Quote Link to comment Share on other sites More sharing options...
UKRetrogamer Posted February 11, 2015 Share Posted February 11, 2015 (edited) Looks like someone has this all figured out (though I'm not keen on his choice of description. "Upcycled"). https://www.etsy.com/uk/listing/181223834/texas-instruments-ti994a-usb-keyboard?ref=shop_home_active_5 Edited February 11, 2015 by UKRetrogamer Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 11, 2015 Author Share Posted February 11, 2015 More than €200? Oh my, seems as if I'm going to spoil his business with the Arduino. Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted February 11, 2015 Share Posted February 11, 2015 Here's a completely different way of doing it, which won't require opening the TI at all. It requires a little piece of hardware to plug into the side of the console, with a bit of code running at >4000 to hijack the console as soon as you turn it on. Once the code residing in the external hardware takes over, it will just run a keyscan routine and output the keystrokes via USB. It's more complicated, but doesn't require opening the console, and it was a method used by the Triton TurboXT bridge box to get the TI to act as a PC keyboard, back in the day. heck i have a TurboXT box 1 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted February 12, 2015 Share Posted February 12, 2015 I have one of those too, Arcadeshopper! It was one of the hardest items for me to find one of (it comes up for auction even less often than 99/8s do). 1 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 12, 2015 Author Share Posted February 12, 2015 Here's a picture of the breadboard setup - should not be too difficult to put on a PCB. 2 Quote Link to comment Share on other sites More sharing options...
Tursi Posted February 12, 2015 Share Posted February 12, 2015 I did a PS/2 one years ago, but I cheated and used a KeyWarrior (which was also fairly expensive at $50, but at least less than the one above). Cool that you got a modern interface going! (And released it!) 1 Quote Link to comment Share on other sites More sharing options...
ralphb Posted February 25, 2015 Share Posted February 25, 2015 There's a similar design using a Teensy controller here, but I like your Arduino solution much better! It's something I've been wanting to do for over a year now ... maybe I can get some friends to set something up for Arduino Day. Quote Link to comment Share on other sites More sharing options...
+mizapf Posted February 26, 2015 Author Share Posted February 26, 2015 OK then, here's the next evolutionary step: 3 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted August 22, 2019 Author Share Posted August 22, 2019 Resurrecting my old thread ... four more years have passed. The existing solution could be improved; the USB cable dangling out of the console bothered me a little. So I thought the proper way would be a USB socket where I could plug in a USB cable. The problem was, however, that USB sockets are typically available for soldering on a PCB; so the challenge was to somehow get it mounted into the chassis so that it would not be pushed out the first time I plugged a cable into it. My initial idea was to use hot glue; I soldered two small pieces of PCB below the socket to increase the surface. While looking for a suitable location - I wanted to have it on the backside - I suddenly found am even better solution. There is a protruding piece of plastic for the screw from the bottom, and I noticed that it was close enough to give support for the socket. I wedged another piece of PCB between the plastic piece and the socket's backside, and then another idea: Stick the containment of the Arduino PCB with double-adhesive tape so close to the backside that it provides the counterpart for the holding PCB. Seems to work. Sometimes you just have to start trying ... 2 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted August 22, 2019 Share Posted August 22, 2019 (edited) I have also seen USB splitter cables that end in a screw-on socket that would also be perfectly suitable for the case mount--but the other end of the cable like this that I have is for plugging into a PC motherboard. I'll have to look to see if a variant that goes from a standard USB connector to this type of USB socket exists. . .here's one that is a double cable, but it would do the trick. It is a bit long though. Here's a shorter single USB 3 type cable that does the same thing. Edited August 22, 2019 by Ksarul 1 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted August 22, 2019 Author Share Posted August 22, 2019 That would indeed be a nicer solution, but both cables you showed are in the wrong direction. You would need a A-A cable to connect it to a PC USB port. Such cables are available, but they violate the USB specification that says that the A plug goes towards the USB host. Quote Link to comment Share on other sites More sharing options...
retiredqwest Posted August 22, 2019 Share Posted August 22, 2019 http://www.frontx.com/ is a company that makes various types of ports for internal and external configurations. The USB ports are mounted on a small piece of plastic and using the internal connector you might be able to use them. Quote Link to comment Share on other sites More sharing options...
Mehridian Sanders Posted December 2, 2019 Share Posted December 2, 2019 On 8/22/2019 at 10:59 AM, mizapf said: Resurrecting my old thread ... four more years have passed. The existing solution could be improved; the USB cable dangling out of the console bothered me a little. So I thought the proper way would be a USB socket where I could plug in a USB cable. The problem was, however, that USB sockets are typically available for soldering on a PCB; so the challenge was to somehow get it mounted into the chassis so that it would not be pushed out the first time I plugged a cable into it. My initial idea was to use hot glue; I soldered two small pieces of PCB below the socket to increase the surface. While looking for a suitable location - I wanted to have it on the backside - I suddenly found am even better solution. There is a protruding piece of plastic for the screw from the bottom, and I noticed that it was close enough to give support for the socket. I wedged another piece of PCB between the plastic piece and the socket's backside, and then another idea: Stick the containment of the Arduino PCB with double-adhesive tape so close to the backside that it provides the counterpart for the holding PCB. Seems to work. Sometimes you just have to start trying ... I was going to do this with meplers solution of the Teensy 2.0++ ... I didn't know Kaal had already done the coding for the Teensy 2.0. hours of processing code to find out someone had already done it successfully *facepalm*. Well I would like to take your thread a small step further. An output Toggle switch. Toggle the output either to the TI Mainboard or to the USB output. Preserve the Awesome Solid State and allow it to interface with the new. Maybe even allow for a Dvorak Keyboard. Just throwing some food for thought. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.