Jump to content
IGNORED

Using the Ti-99 expansion port


Recommended Posts

Hello,

I'm currently going to school for engineering and our section has to build a massive Rube Goldberg machine. So I figured I could inject some retro goodness into it by having a a TI-99/4a(I acquired one locally for cheap) control an RC car. So I need to know a few things. I'm currently thinking that the easiest thing to do would be to get the TI-99 to generate signals through the expansion port that could then be translated by an Arduino controller. So where should my group start for programming using the serial port? Second, what kind of connector exactly do I need to hook into the TI-99's edge connector expansion port?

 

EDIT:Mean expansion port, not serial connection

Edited by Videogamecollector123
  • Like 1
Link to comment
Share on other sites

Hello,

I'm currently going to school for engineering and our section has to build a massive Rube Goldberg machine. So I figured I could inject some retro goodness into it by having a a TI-99/4a(I acquired one locally for cheap) control an RC car. So I need to know a few things. I'm currently thinking that the easiest thing to do would be to get the TI-99 to generate signals through the serial port that could then be translated by an Arduino controller. So where should my group start for programming using the serial port? Second, what kind of connector exactly do I need to hook into the TI-99's edge connector serial port?

Awesome idea to get some retro action with the TI 8).

 

The bus on the side of the TI is an expansion port, not the RS-232 itself. There are a few options to get serial connection, but the nanoPEB will probably be the cheapest way to go ;). You could try and find a stand alone RS232 expansion, but I'd bet that would be hard to find. The most expensive option is the PEB expansion box with RS-232 card.

Edited by RobertLM78
Link to comment
Share on other sites

Would it be possible to use the expansion port? I kinda envisioned building a new sidecar unit to house this expansion. We have a circuit board printing service(top and bottom only and no silk screen, but it's free for me) and assuming I can get this off the ground, it might even be possible for me to 3d print a case for it.

Edited by Videogamecollector123
Link to comment
Share on other sites

This would definitely fit the description of the Rube Goldberg :)

My thoughts exactly :D. I'm not really familiar with Basic or Assembly language, not sure which one it would be best to write the TI-99's program in. I am in the process of learning Basic at least. All it really needs to do is a splash screen of my schools logo, then send off the chain of commands to be transmitted(there are several computer science people in my section that can handle the arduino side of things).

Edited by Videogamecollector123
  • Like 1
Link to comment
Share on other sites

If you're willing and able to take the console apart and do some soldering, I'd do this by piggybacking a TMS9901 IC on top of the one already in the console - quite an easy job. This will give you a dozen or so input/output pins that are individually programmable and that you can connect to the Arduino (is the Arduino compatible with 5V TTL logic levels?). You've then got to be able to program it: TI BASIC and Extended BASIC won't be any use as they don't support the required level of hardware control. There are two other versions of BASIC though that would do it, and I suspect one of (all of?) the versions of Forth would do it as well, plus of course assembly. To run any of these, you'll need 32K RAM plus storage - a CF7/NanoPEB device would provide both of these.

 

If you want further elaboration, let me know.

 

Stuart.

Link to comment
Share on other sites

Another idea is to get a CF7 - the version with the parallel port (so the device is 32K RAM, virtual floppies and a parallel port all rolled into one). The parallel port will give you 8 digital outputs plus a strobe, which might be enough for your needs. You can control it by just printing specific bytes to the 'printer'.

 

Stuart.

Link to comment
Share on other sites

So, why is it not possible for me to write a program in Assembly(In an emulator), put it on a cartridge or tape, and have it run natively on the TI-99 as any program that could utilize a peripheral could do? Just curious, but I will look into getting one of those CF7/NanoPEB devices.

Edited by Videogamecollector123
Link to comment
Share on other sites

You could certainly do a lot of it in an emulator if you so wished. You'd have trouble I think trying to get an assembly program from an emulation environment to a real console using a (cassette) tape, but going the cartridge route is a definite possibility - some cartridge boards which take an EPROM were produced quite recently and you could probably get hold of one. Your program would need a header on it so that the program can be run from the TI master title screen - that's quite easy to do.

 

Not sure how much you know about the TI-99 architecture but be aware that with the bare console there's only 256 bytes (yes, bytes) of CPU RAM available, and it knows absolutely nothing about any peripherals. All the peripheral 'device drivers' are in ROM in the peripherals themselves. A CF7/NanoPEB will give you an extra 32K RAM to play with, virtual floppies (which you can transfer to/from an emulation environment) and a parallel or serial port device. You could use this if you wish with a program you've loaded into a cartridge.

 

Also, there's a PC utility developed by the user Tursi that will take a picture (your school logo for example) and convert it into the data needed to load into video RAM to display it on the TI.

Link to comment
Share on other sites

A mini memory cartridge might be a solution as well, it comes with it's own 4kb of battery packed RAM, so you can write reasonably large assembly programs on that, and actually store it on the cart without the need for flashing your own EPROMs, or lugging around a cassette player or set of disk drives.

 

The nanopeb/CF7 is probably easier to get though, but you will still need an Editor/Assembler or Extended Basic cart (instead of the mini memory cartridge) to run your own assembly code. Then again, Extended Basic and Editor/Assembler are much easier to find than mini memory cartridges, I think...

Link to comment
Share on other sites

Although I am loath to say this, a bare TI console is difficult to do anything fancy with. A Vic 20 would be a better option for something along this line, since the User Port is completely accesible by the user (hence the name) and is very easy to handle with poke/peek from Basic.

 

The TI is my first love, but it may not be the right tool for this job unless you are willing to add extra hardware and possibly get into assembly language.

 

http://www.hardwarebook.info/VIC-20_User_I/O

Link to comment
Share on other sites

Although I am loath to say this, a bare TI console is difficult to do anything fancy with. A Vic 20 would be a better option for something along this line, since the User Port is completely accesible by the user (hence the name) and is very easy to handle with poke/peek from Basic.

 

The TI is my first love, but it may not be the right tool for this job unless you are willing to add extra hardware and possibly get into assembly language.

 

http://www.hardwarebook.info/VIC-20_User_I/O

If it's possible to do it on the Vic-20 without extra hardware, I'd rather use that. I asked about the TI-99 primarily because I managed to pick one up around my school for cheap.

Link to comment
Share on other sites

If you are going to build your own side-car for the 99/4A, then you can do anything you want. *Loading* your program is a different matter and depends on what your requirements will be. The nice thing about the 99/4A is that it will definitely make you jump through some hoops, so it is actually well suited for a Rube Goldberg machine.

 

The biggest problem with the 99/4A is that without an expansion unit and disk drive you are limited in how you can load software, basically you only have the cassette port. The ROM BASIC does not have any facility to load or run assembly programs so to do that you would also need the XB (Extended BASIC), MiniMemory, or E/A (Editor/Assembler) cartridge.

 

However, making your own cartridge is not such a big deal and would give you a very fast and easy way to load and run your code. It all depends on how much engineering you want to do and how much you want to learn about the 99/4A.

 

These are are few options, from simplest to most elaborate:

 

1. Use ROM BASIC, load from cassette and send signals to your Adruino via the audio out. Come up with some sort of low-speed encoding (dots and dashes), or use different frequency to mean different things.

 

2. Build your own RAM expansion and memory-mapped I/O for the side port. This would not really be very hard. The edge connector is pretty standard and should not take you long to figure out the physical requirements with a pair of calipers. With your own RAM you would have more working space, and the memory-mapped I/O would give you simple communication with the outside. You would need XB or the E/A cart to load a program from cassette that loads your assembly program (again from cassette).

 

3. Same as #2, but make your own cartridge board (again very simple especially since you can make your own boards) and populate it with an EEPROM or similar parallel flash-based memory, or maybe even a microcontroller. This cartridge would hold your assembly program and simply load from the Master Title Screen when you select the cartridge. Just like in #2, your assembly could communicate out via the side-port memory-mapped I/O that you built.

 

4. Build your own cartridge board and use that for both the program storage and the memory mapped I/O.

 

If all your are doing is taking input from the 99/4A keyboard and sending something to an Arduino, your code is going to be very minimal anyway. You can probably skip any RAM expansion and just use a EEPROM for code and memory-mapped I/O (because it is easy).

 

Programming the 9900 is pretty easy if you are familiar with assembly in general. It is heavily based on the DEC-11, so it has some additional historic throw-backs. You would code on an emulator and assemble with asm994a (or use the E/A on an emulator). Write your binary program to your EEPROM or whatever, and stick/load it in the 99/4A. Heh, our "normal" processes are very Rube Goldberg without doing anything special. ;-)

  • Like 2
Link to comment
Share on other sites

If you are going to build your own side-car for the 99/4A, then you can do anything you want. *Loading* your program is a different matter and depends on what your requirements will be. The nice thing about the 99/4A is that it will definitely make you jump through some hoops, so it is actually well suited for a Rube Goldberg machine.

 

The biggest problem with the 99/4A is that without an expansion unit and disk drive you are limited in how you can load software, basically you only have the cassette port. The ROM BASIC does not have any facility to load or run assembly programs so to do that you would also need the XB (Extended BASIC), MiniMemory, or E/A (Editor/Assembler) cartridge.

 

However, making your own cartridge is not such a big deal and would give you a very fast and easy way to load and run your code. It all depends on how much engineering you want to do and how much you want to learn about the 99/4A.

 

These are are few options, from simplest to most elaborate:

 

1. Use ROM BASIC, load from cassette and send signals to your Adruino via the audio out. Come up with some sort of low-speed encoding (dots and dashes), or use different frequency to mean different things.

 

2. Build your own RAM expansion and memory-mapped I/O for the side port. This would not really be very hard. The edge connector is pretty standard and should not take you long to figure out the physical requirements with a pair of calipers. With your own RAM you would have more working space, and the memory-mapped I/O would give you simple communication with the outside. You would need XB or the E/A cart to load a program from cassette that loads your assembly program (again from cassette).

 

3. Same as #2, but make your own cartridge board (again very simple especially since you can make your own boards) and populate it with an EEPROM or similar parallel flash-based memory, or maybe even a microcontroller. This cartridge would hold your assembly program and simply load from the Master Title Screen when you select the cartridge. Just like in #2, your assembly could communicate out via the side-port memory-mapped I/O that you built.

 

4. Build your own cartridge board and use that for both the program storage and the memory mapped I/O.

 

If all your are doing is taking input from the 99/4A keyboard and sending something to an Arduino, your code is going to be very minimal anyway. You can probably skip any RAM expansion and just use a EEPROM for code and memory-mapped I/O (because it is easy).

 

Programming the 9900 is pretty easy if you are familiar with assembly in general. It is heavily based on the DEC-11, so it has some additional historic throw-backs. You would code on an emulator and assemble with asm994a (or use the E/A on an emulator). Write your binary program to your EEPROM or whatever, and stick/load it in the 99/4A. Heh, our "normal" processes are very Rube Goldberg without doing anything special. ;-)

#1 sounds good, for audio out do you just mean the cable that would normally hook into a tape deck's microphone input?

Link to comment
Share on other sites

No, you would use the 5-pin DIN on the back of the console which outputs the composite video and separate audio. You can use the BASIC "CALL SOUND" instruction to generate any tones and durations you would need. You can't control the cassette interface via BASIC, other than to save or load a program (or data I suppose).

  • Like 2
Link to comment
Share on other sites

Yeah, one thing the VIC-20 or Commodore 64 has over the TI is the user port (two bi-directional eight-pin registers available) are directly accessible via the built-in BASIC POKE command.

 

I like the idea of using sound to control the device. There is some complexity for you!

  • Like 1
Link to comment
Share on other sites

The audio out certainly fits the challenge, and will be easier for your Arduino to make sense of than trying to keep up with the bus signalling on the side port. :) plus, cool points for making it work and it works from plain old TI BASIC. You might still track down a MiniMemory cart if you can, since you can load/save small BASIC programs from it faster than cassette. (cassette takes about 4 minutes to load a 12k program). That said, if you need a full-page splash screen, that might take more memory than the MiniMemory can save. ( <4k) ;)

 

You don't have access to sprites in BASIC, but you have 127(?) redefinable characters, and 15 colors, so you can do quite a bit with that. The converter that you got from me doesn't do BASIC screens, though, only full-on bitmap, which needs assembly language support to access. Just do it the old fashioned way with graph paper - how complicated is the logo? :)

Link to comment
Share on other sites

You do have a means of doing serial without much more then the console--you could build a Joytalk interface using the stock console and some control software.

 

On the splash screen--you can redefine the display characters to build a full-screen logo (note that each character tile on the screen would be limited to two colors).

 

Lastly--you could do an awful lot using one of the 512K cartridge boards, as it has an ATMEL1284 on board already programmed to act as an interface device to the TI--and the SIO and other special control pins are all available and brought out to connectors on the board. I might be able to spare one of my bare boards for this (I did the layout for the 512K board, Tursi programmed the ATMEL1284, and Acadiel tested the ROM side functionality).

Link to comment
Share on other sites

The audio out certainly fits the challenge, and will be easier for your Arduino to make sense of than trying to keep up with the bus signalling on the side port. :) plus, cool points for making it work and it works from plain old TI BASIC. You might still track down a MiniMemory cart if you can, since you can load/save small BASIC programs from it faster than cassette. (cassette takes about 4 minutes to load a 12k program). That said, if you need a full-page splash screen, that might take more memory than the MiniMemory can save. ( <4k) ;)

 

You don't have access to sprites in BASIC, but you have 127(?) redefinable characters, and 15 colors, so you can do quite a bit with that. The converter that you got from me doesn't do BASIC screens, though, only full-on bitmap, which needs assembly language support to access. Just do it the old fashioned way with graph paper - how complicated is the logo? :)

Well I just need two colors, blue and yellow for my school's logo. Though the logo can just be one character and I can set the background to the other. So when you say 127 redfinable characters, how big of a grid does that work out to be?

Link to comment
Share on other sites

I found the grapefruit utility to convert images into a BASIC, however I noticed from a quick test that the image isn't centered using the code grapefruit provides. Is there anyway to do center it? Here's the last part of the code, if you need the rest, I'll post it.

6200 REM TEST OF CHARACTER DEFINITIONS
6210 CALL CLEAR
6220 FOR C=0 TO 7
6230 FOR L=0 TO 15
6240 CALL HCHAR(L+1,C+1,32+L*8+C)
6250 NEXT L
6260 NEXT C
6270 GOTO 6270
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...