For experimentation I want to import or receive into Arduino the output data from a TMS1000 (1980s) data bus. For model train controller Hornby Zero1, and the bus sends data to receivers, for loco number, speed, direction etc. I have all the data structure etc) Is it feasible to import to Arduino, and export from the same Arduino back to the original bus. Just to see it working, and then later experiment with the data in the Arduino. What libraries would be best ? Thanks Charles Harris
You're not going to find any pre-built libraries for this task which is somewhat unusual but not at all impossible.
Basically all you need to do is to connect the TMS1000 address/data and strobe lines to Arduino inputs and write yourself some relatively simple code to detect the various TMS1000 bus states and capture them when they happen. In order to detect specific events as you have mentioned you will need to know more about the TMS1000 software that's running and what I/O devices that it's selecting. But again, that's all pretty straightforward.
Keep in mind, however, that you are going to have to perform level shifting on ALL the inputs from the TMS1000. This old TI chip was implemented using a PMOS (i.e. a predecessor to both NMOS and CMOS) and uses a NEGATIVE power supply instead of the more common today POSITIVE supply.
So rather than being powered by a +5V supply the way an Arduino is, the TMS1000 is powered by a -15V supply. In this case ground is still at 0V but Vdd is -15V. That means the I/O signals adhere to a different scheme as noted in the datasheet:
You can view the datasheet yourself at:
But what this means is that a LOW (i.e. Vil) is at -15V and a HIGH (i.e. Vih) is at 0V. You will need to translate these voltages so that you don't damage either the TMS1000 or the Arduino and you get the correct levels on the pins that you are watching.
The TMS1000 datasheet has some suggested circuits for interfacing to 74LSxx series parts (i.e. 5V logic) which will probably get you started. Note that the simplest method involves running the 5V logic with its VDD at 0V and it's "ground" at -5V. While this might seem odd, the Arduino will not know the difference as voltage is always relative.