My small subsite of 99er.net presents small demos programmed in assembler for use with the TI-99/4A Home Computer.

You can download a demo as a cartridge (typically one binary file) and almost instantaneously use it with a free emulator like MESS, Classic99 or Win994a.

All carts are available in this one zip file: carts.zip.

You are welcome to comments etc. My mail address is sometimes99er@hotmail.com.

Items on this non-commercial subsite are presented for reference, nostalgia and/or educational purposes only. Some graphic, code, music, sound, speech, text, font, design, brand, logo, name, idea etc. may not be of my own original creation. If you are an author or owner of an item reproduced on this subsite, and wish to be creditted or have it removed, please contact me.

Main rendezvous for TI-99/4A users: http://tech.groups.yahoo.com/group/ti99-4a

   

Titles Downloads Closeup snapshots Notes Remarks
Windy city
2008.05.03 -
2008.05.05
windyc.bin cart This is a tribute to the ChicagoTIUsersGroup’s-show (UStream.tv), which I hope to catch later today.

The demo draws a sign with a fat pen. Next this drawing is shown with only the controlpoints plotted. And finally the drawing is shown with the dots connected. After this the demo loops. Hitting QUIT at anytime resets the demo.

Technically it’s bitmap mode. There’s the plot routine from my Shapes demo, and then there’s a new line drawing routine. I plan for optimizing both routines, but for this demo with built-in delays (waiting for a frame after each dot/line) it works fine.

Just added a bit of color.

TrueType
2008.04.27
ti994a.ttf font This TrueType font shows off the characters available in TI Basic. The characters are also known as "small capital" and "lower case" character sets, though "lower case" is actually just even smaller capitals. The font can be used in wordprocessors, 3D packages and much more ...
Oh yeah
2008.04.15 -
2008.04.23
ohyc.bin cart This one will be based on games like Canyon Bomber, Air Attack, Blitz, City Bomber etc.

Even though we work in bitmap mode, we have to support the logo with a few double sized sprites. Take a closer look here. Actually we need 5 sprites for 5 of the 6 letters. Originally I had the letters aligned vertically, but then 5 sprites would have patterns stacked horizontal. The graphic chip only supports 4 sprites horizontal, hence I opted for some vertical adjustment of the letters. The letters now appear to jump up and down a bit, but then give room for the display of the 5th sprite.

A well known spaceship has been added.

The spaceship now moves across the screen and slides in and out of the border using the early clock attributes. The position and early clock for the 2 sprites are updated just after the start of vertical blank. MESS handles this fine. Classic99 occasionally displays the exhaust in front of the spaceship. Win994a apparently does not support early clock.

Oh, the E/A-manual (page 339 paragraph 2) is perhaps not too precise on this early clock matter: The last bit of the four most-significant bits in the fourth byte control the early clock of the sprite. A bit tricky, since it’s important to know if you have to look at the bits from the left or the right. Bottomline, Win994a uses another bit. If we look at the bits from the left, MESS and Classic99 uses the 1st bit as early clock, and Win994a uses the 4th. Apparently it’s fine with all the emulators if we use both bits at the same time.

Dripstones added.

Sudoku 2
2007.12.17 -
2008.04.20
sud2c.bin cart The idea was to produce a real life cartridge with manual and all. Here’s a link to the blog.
Manic Miner
2008.03.12
manic.bin cart Loading and title screen of the old blockbuster Manic Miner originally for the ZX Spectrum. Here’s a video at YouTube about the computer, the game and the author.
Daffy Duck
2008.02.26
daffc.bin cart Just a bit of diversion ...
Grapefruit
2006.12.02 -
2008.02.04
grapefruit.zip utility This utility for Windows lets you convert graphics to text (programming language data statements) to be included in your programs (basic, extended basic or assembler).

Supports double sized sprites. Includes code to demo character or sprite design. Includes examples to work with. Has a built-in character editor, but still the idea is to work with your graphics in your favourite graphic package (eg. Photoshop). Turn on an 8x8 grid in your graphic software to assist you.

This utility needs the .NET framework available for free at Microsoft.

Chestnut
2008.02.03
chestnut.zip utility This utility for Windows lets you rip and hack the graphics in the TI-99/4A.

The utility has 4 menu items. "Load GROM" rips the graphics from the file (often seen as 994agrom.bin). "Save image as" saves the graphics for you to change with your favourite graphic package (eg. Photoshop). "Load image" loads your changed graphics or loads one of the included graphic files, that I have prepared for you. "Update GROM" changes the graphics in the TI-99/4A (use the 994agrom.bin or a copy).

This utility needs the .NET framework available for free at Microsoft.

Streaky Bacon
2008.01.29
strec.bin cart Follow the on screen instructions ...
R5D4 blows a fuse
2008.01.08
R5D4c.bin
R5D4g.bin
cart This demo has two purposes. One is to use GROM. The other is to display bitmap pictures with high detail.

The cart detects if GROM is missing.

Two pictures are shown. Both pictures are original Star Wars photo releases.

Trichromatic
2008.01.02
tric.bin cart This one is trying to increase then number of colors from 15 to 120 by swicthing colors rapidly. The effect is not overwhelming on emulators, but might turn out nice on the real hardware with an old tube television. Win994a comes out on top, Classic99 follows and MESS is the one having most problems with the rapid changes to the SIT/colors - unless you go to the advanced properties and select sync to monitor refresh, then you get a steady screen.
Secret Scroll
2007.12.28
secrc.bin cart This one scrolls the entire screen one pixel once every frame.

Technically the demo scrolls the character set one pixel every frame (reading from ROM everytime). Also it uses double buffering: The screen image table (SIT) is switched between >1800 and >1C00 every 8th frame. The "backbuffer" is prepared with 1/8th of the screen (768 characters / 8 = 96 characters) every frame.

I have MESS and Win994a running the demo extremely smooth. Classic99 however is having some problems.

Use advanced properties in MESS to sync with monitor to get super smooth scroll.

Workaroundbench
2007.12.15
workc.bin cart Actually just a bit of exercise in sprite movement ...
Pictures
2007.12.13
pic1c.bin
pic2c.bin
cart Again I used C# to modify, convert and compress (RLE) to make a picture fit within an 8k cartridge. I will have to get better compression if I want pictures with greater detail to fit. There are two different demos.
Sonic Interlude
2007.10.28
sonic.bin
cart Yet another quickie just because I think it looks nice. Nothing much happens here, except for a bit of scrolling.

Use advanced properties in MESS to sync with monitor to get super smooth scroll.

Tic Tac
2007.10.03
ticc.bin
cart Press N for new game. Merely a test for a user interface.
Marbles
2007.09.27
marbc.bin
cart Some beautiful marbles with outline, spotlight and reflection. Press and hold joystick to go a bit faster.
Snake Plissken
2007.09.07
snakc.bin
cart Just paint all you can with the joystick !
Level code
2007.06.09
codec.bin
cart Yet another routine for my library. This time I want to let the user enter a code. This could be a code to let the user start at a certain level in a game cartridge without having to deal with any tape or disk operations. The input field(s) could of course have other purposes.

You may enter any digit, space and move the cursor forth and back. And as it says on the screen, hitting Enter will proceed – in this demo, it will just terminate.

Binary
2007.06.06
binc.bin
cart Yeah, the end of a trilogy ! This time I want to display a 16 bit register as binary (base 2). The individual bits are presented.

I’m using the routines for score, hexadecimal and then the new binary all in one. I’ve added a header and therefore there’s actually only 15 random values per screen. But then each random value is shown both as a score (using the odd system of decimal in steps of 5), hexadecimal and binary. Again, if you hold down the spacebar, you’ll get a new screen every frame.

Hexadecimal
2007.06.05
hexc.bin
cart Here’s another quickie for my library. This routine will probably only be used for debugging purposes. Take a register and show it on the screen in hexadecimal (base 16). If you do not know hexadecimal, take a tour on Google. You may recognise hexadecimals from working with graphics in TI Basic.

The benefits from using hexadecimal representation are:

  • Compact, a 16 bit register value shows up in only 4 screen locations
  • Patterns, the trained eye can recognise problems etc.
  • Fast, for any reason, it is faster than a routine doing decimals (base 10)
Hold down the spacebar to get a screen full per frame.
Know the score
2007.06.04
scorc.bin
cart Okay, so I’m building some sort of a library. This time I want a routine to take a value and show it on the screen. The value resides in a register and has 16 bits. This gives a range from 0 to 65,535. To make the range appear wider, I’ve decided to have the last digit take only the value of 0 and 5. This approach gives a range from 0 to 327,675 (65,535*5) in steps of 5, which to me looks nicer as a score in a game.

The demo produces 64 random 16 bit values and displays them. Then there is a small pause, before the process is repeated.

The trick in using this routine, is to "know the score" ... If I want to add 75 points to the score, I should actually only add 15 (75/5) to get the desired effect. If I would want to add an extra life, when the score gets to (or above) 20,000, I will have to compare the register (the score) with 4,000 (20,000/5).

One byte changed, and it will show values with leading zeroes, eg. 001234 instead of just 1234.

The Castle
2007.05.31
castc.bin
cart A few screenshots reproduced in an 8k cartridge. To my knowledge this one appeared on the Sega Game 1000, which used the same graphic chip.
Cockroach
2007.05.05 -
2007.05.14
cockrc.bin
cart Added a few soundeffects. The three emulators mentioned at the top sound rather different. Should however be valid soundlists.
Windows
2007.04.12
winc.bin
cart This one draws windows of different sizes to the screen.

Press "C" to clear the screen.
Press "N" to get a new window.
Press and hold "M" to get multiple windows.
Press "B" to clear screen and get two windows.

More fonts
2007.03.07
morefc.bin
cart Daniel Bienvenu has some 22 fonts on his ColecoVision website. There’s quite a few with lower case and "descenders". I’ve used a few of those in this demo.
Poisonous Prison
2006.12.28 -
2007.02.14
pri01c.bin
pri02c.bin
pri03c.bin
pri04c.bin
cart
speech
0.1 Preliminary title screen with speech.
0.2 New title screen, color cycling and playfield.
0.3 Yet another new title, and a "Star Wars" sweep.
0.4 And another title.
Shapes
2006.12.07
shapc.bin cart This time I wanted to plot pixels in full blown bitmap. I tested the bitmap layout. Constructed a plot routine. I know this routine is not optimized, but I made it quickly from scratch, and understand what’s happening. I know I should swap it with the one in the E/A-manual. My first intentions was plotting and clearing within a frame or so. Preferably some spinning sine waves. I was then looking for algorithms on the net for this. I then fell over this about producing circles. I tried to implement it, but it would only produce diamonds. I loosely scanned my code for errors. Thought about replacing the logic with some "homebrew" with acceleration on pixel speed like what I used in the "Heartbreak today" demo. Well, I continued my search on the net, and found this one. Now, I was getting squares and diamonds. Then I found this one. Now, I was getting curved edges. I fiddled around with some of the values, and ended up with this. There are some perfect circles there.
Lightbulbs
2006.11.01
lightc.bin cart
32kB
Wanted somekinda LED display. Implemented some commands with parameters. The commands are restart, wait, on, off, clear, frame, scroll, row and column. Then put up a small stream of commands. Well, this last part lacks in the department of design, and could have been much longer, but I wanted to move on to some other projects.
Title with fuel
2006.10.19
titlc.bin
tifuc.bin
cart A preliminary title screen for inspiration only. Then updated graphics for fuel and combined the two. Graphics at center removed.
Fuel of Parsec
2006.10.16
fuelc.bin cart Proposals for new fuel graphics in a tribute to Parsec.
Covergirl
2006.10.11
Removed

 

cart Reengineered a title screen for the TI.
Intruder
2006.09.24
intruc.bin cart Splash the title all over the place. I quickly and randomly place a 3 by 11 character title on the screen. 10 titles are put to the screen, and then the image is enabled. Then there is a pause for the user, and then the image is disabled. The screen is then cleared and the process starts over. Titles are only placed on an empty area of the screen. From time to time you might see a longer pause - it’s the random routine trying to find an empty area.
Television
2006.09.08
telec.bin cart Adjust your television.
Heartbreak today
2006.08.15
heartc.bin cart Pixels jumping out of the screen.
Maze
2006.06.05
mazec.bin cart Almost some amazing mazes
Asteroids
2006.05.06 -
2006.05.12
ast1c.bin
ast2c.bin
cart Some very initial graphics for another Atari VCS 2600 classic. Added some movement and spinning (use arrow keys).
Adventure
2006.04.26
advc.bin cart An Atari VCS 2600 classic.
Waters edge
2006.03.26
waterc.bin cart The sunshine and the ocean.
SqRxZ
2006.03.17
sqrxzc.bin cart Tried to put a GameBoy multicolored logo up in a masked bitmap.
Sudoku
2006.03.05
sudoc.bin cart This one uses the timer in the TMS9901. There are already different functionalities available here, and lastly I was caught up in pulling out soundlists from a few other cartridges.
Own up
2005.12.22
ownc.bin cart Merry Christmas and happy new year.
Randomizer
2005.12.20
randc.bin cart Just putting my random routine to a test.
Fingertips
2005.12.19
fingc.bin cart This is upon request. A demo that reads the joysticks and keyboard.
Halffull
2005.11.03
halfc.bin cart Snow is falling. Partly logo of the game Halflife from Sierra and Valve.
Ballroom Blitz
2005.09.28
ballc.bin cart Reflection of scroll.
Level headed
2005.08.08
levelc.bin cart Flashy.
Sixties man
2005.06.15 -
2005.08.12
six01c.bin
six02c.bin
six03c.bin
six04c.bin
six05c.bin
cart First shot at a racing game.
Fontsets
2005.05.23
fontsc.bin cart A slideshow of 21 marvellous fontsets. There are a few original designs and the rest are named by reference.
Lego
2005.04.30
legoc.bin cart Watch those beautiful bricks falling from out of nowhere.
Hellraiser
2005.04.16
hellrc.bin cart
32kB
Wanted to scroll some text one pixel per frame update. And then made a title screen for a snake game. Added a few graphics of snake, flowers and stones.
Poppa Joe
2005.03.24
poppac.bin cart 4 pictures (smurf) in 6 frames of animation (1,2,1,3,4,3). Added background.
Space invaders
2005.03.19
spa01c.bin cart Patterns 8x10 from Atari 2600. Added some explosions.
California nights
2005.02.27
califc.bin cart Just another quickie.
Turn it down
2005.02.08
turnc.bin cart
32kB
Found myself playing more than testing, so I think this will turn out nice someday. Characterset on splash from Atari 800.
No signal
2004.12.29
nosignc.bin cart Stupid idea, but quickly implemented. Then added sound.
Spin
2004.12.17
spinc.bin cart Again I used C# for converting 64x32-pixels image-files. 6 frames was used and are all visable at any given time.
Face
2004.12.04
facec.bin cart Used C# for converting a 256x192-pixel image-file (bmp) into 768 characters. If a byte is repeated to often, it’s compressed somewhat. The cartridge then decompresses before displaying in bitmap-mode. The image (monochrome) should take 6k (768 characters each with 8 bytes), but now takes less than 2k. The standard cartridge (8k) should then allow for 3 different fullscreen images.
Bitmap
2004.11.26
bitmapc.bin cart Tried the bitmap-mode before and failed. This time I spotted an error in the documentation. So I played around with the registers. Hold fire (or ctrl) to freeze the action.
Galaga
2004.11.25
galagac.bin cart This looked impressive on the Coleco, so I had to try it out.
Lunar Lander
2004.11.15
lunarc.bin cart Again the C# mentioned below for the logo. And then just had a little fun.
Action
2004.10.30
actionc.bin cart Then I used C# for converting a 64x32-pixel image-file (bmp) into 8 double-sized sprites. The landscape was done by hand.
Coleco
2004.09.22
colecoc.bin cart This time I used C# to extract and convert the graphical bits.
Commodore 64
2004.08.27
c64sc.bin cart Would like to try the text-mode. So I opted for a small emulation of the Commodore 64. You can move the cursor around and use enter - it will actually scroll the screen, when the cursor hits the bottom. The characterset had to be squeezed pixelwise from 8x8 to 6x8 - all of this done by hand.
Starfield
2004.07.23 -
2004.08.23
sf01c.bin
sf02c.bin
sf03c.bin
sf04c.bin
sf05c.bin
sf06c.bin
sf07c.bin
sf08c.bin
cart Got around to play with sound. There’s an independent sound of the laser, and in the background there’s a little tune. The original characterset is just shifted one pixel and masked making it appear fat. The O for both the letter and the digit has been replaced. Use the joystick (or ctrl and arrowkeys) to launch the laser and move the ship. Some handling of the score has been implemented. Plans for a nice background of flashing and moving stars. Test for one star has been done in Extended Basic.
Coke
2004.07.17
cokec.bin cart Wanted some more impressive graphics. Again the conversion from picture to code was made by hand. No action.
The Project
2004.07.12
projc.bin cart My first attempt. I wanted impressive graphics. So the logo was designed and converted by hand. The background is made up of only one single character and it scrolls. Never got around to make the background consist of more characters. Also the scroll should have gone in all directions. Perhaps someday.

 
For various reasons, my main TI-99/4A (PC) development environment consists of this cycle:

1) Text editor
2) Compiler
3) Emulator

I switch between these using Alt+Tabulator. The main purpose here is Assembler to Cartridge in split seconds.

The editor could very well have been Notepad, but it’s UltraEdit. I make changes and press CTRL+S to save.

The compiler is TIAsm. I’ve put this in a command file: TIAsm source.txt ax testc.bin. I then execute the command (compile) and watch for errors (can be done from and within UltraEdit). You will find TIAsm here: ftp://ftp.whtech.com/cross assemblers

The emulator is MESS. The cursor is already on my standard output cartridge, testc.bin, so I just press enter, hit 2 twice, and my work is up there. If I make changes to the source and compile, MESS will take the latest version of testc.bin.
 

 
I bought my TI-99/4A at Poulsens Boghandel, City 2, Denmark. It must have been 1982. Danish crowns 2495 ~ US dollars 440 ~ Euro 330.

Prior I had purchased TI-59 and PC100C (printer) also the Atari VCS 2600 and about 30 cartridges incl. the awful "Basic Programming". And then also a Sinclair ZX81 (Timex) with a 16K RAM Expansion. This is when I learned machinecode (Z80A).

Apart from using cassettes (tapes), I got a converter for Atari-type joysticks (US dollars 17) and TI Invaders. Later I had Speech Synthesizer, Parsec, Munch Man and Extended Basic. Then I got Mini Memory and went for a used 32K RAM Expansion (US dollars 265). And finally some cartridges like ZeroZap, Burgertime and Donkey Kong. I did some Mini Memory code for the store and got free cartridges.

Bought and skipped a VIC-20. Then I had a C64. When I got the Amiga 2000 (1986), I sold the C64, and gave away the TI to some neighbours (teachers) with 3 kids and no computer.

Rediscovered the TI-99 and used the V9T9 emulator for a few months. Later, in 2004, I found MESS and a few months later, I launched my subsite of 99er.net ...

   
 

 
Items on this non-commercial subsite are presented for reference, nostalgia and/or educational purposes only. Some graphic, code, music, sound, speech, text, font, design, brand, logo, name, idea etc. may not be of my own original creation. If you are an author or owner of an item reproduced on this subsite, and wish to be creditted or have it removed, please contact me.