http://www.ninerpedia.org/api.php?action=feedcontributions&user=Retroclouds&feedformat=atomNinerpedia - User contributions [en]2024-03-28T10:44:59ZUser contributionsMediaWiki 1.37.1http://www.ninerpedia.org/index.php?title=Spectra2&diff=47402Spectra22010-09-25T08:31:12Z<p>Retroclouds: /* Configuration register (R12) */</p>
<hr />
<div>== Overview ==<br />
<br />
The last few days I've been working on a second version of my TMS9900 arcade game library, called SPECTRA<sup>2</sup>.<br />
<br />
Compared to the original SPECTRA<sup>1</sup> library I wrote in 2009, I'm taking a different approach this time.<br />
I see the library as a miniature operating system for running games. It will help the processing of input (joystick, keyboard) and output (video, sound and speech). A core concept is the use of timers for running multiple tasks.<br />
Ofcourse it will also include some utility functions that help in the communication with the VDP, setting up timers etc.<br />
<br />
Therefore I have decided that I won't be including many super duper high-level VDP tricks in the library.<br />
Why? Because I think such high-level routines put a lot of restrictions on the programmer.<br />
What I like about assembly language is that -as a programmer- you have full control. So I don't want my library to put too many constraints on the programmer. Instead it should offer a basic structure, help master basic functions and leave the game programmer the freedom to do what he needs to do; concentrate on the game.<br />
<br />
The goal is to implement a runtime that doesn't take more than 2 kilobytes of ROM space and that is able to handle sound, speech, keyboard & joystick pulling, VDP communication, timers and sprite movement. <br />
Also RAM requirements are very moderate. The target platform is an unexpanded TI-99/4A which means we only have 256 bytes of scratch-pad memory to our disposal.<br />
<br />
'''If you want to learn more about the original SPECTRA<sup>1</sup> manual, then please check [http://spectra99.sourceforge.net/SPECTRA_reference_manual.pdf here].'''<br />
<br />
<br />
Below are the key features I have in mind for SPECTRA<sup>2</sup>:<br />
<br />
<br />
* '''Stack usage'''<br />
:No need to save all registers. A lot of pushes/pops can be avoided by defining certain registers as "temporary" registers. This saves CPU cycles, memory and ROM space.<br />
<br />
<br />
* '''Scratch-pad memory layout'''<br />
:Taking a byte oriented approach where possible for saving on scratch pad memory. A small memory area is reserved for self modifying code that is used to optimize loops and writes to/from VDP, bank-switch trampoline code, etc.<br />
<br />
<br />
* '''Task scheduler'''<br />
:Reduced memory usage for timers. Now use 4 bytes instead of 8 bytes for a timer slot. It's also possible to have multiple timer tables and the scheduler itself offers some more possibilities. The task scheduler is at the core of the library and plays an important role as a lot of functionality will depend on it.<br />
<br />
<br />
* '''Support for bank-switching'''<br />
<br />
<br />
* '''Support for using "Monitor" OS routines and disk+file I/O support'''<br />
<br />
<br />
* '''Consistent function labels, parameter passing, etc.'''<br />
<br />
== Scratch-pad memory layout ==<br />
The main focus of the library is to support games that run from the cartridge space on a bare TI-99/4A console. In that case we only have 256 bytes of CPU RAM (scratch-pad memory) to our disposal. If you think about it as a mini-os, then it's clear it also needs some memory for its own. I've set the limit (including register workspace) to 64 bytes. That is 25% of the available memory. We're currently using 50 bytes. Is that a good value? I don't know, we'll find out soon enough.<br />
<br />
Nonetheless, I guess that the memory layout pretty much has stabilized now. At least for a basic installation.<br />
By that I mean that each game or program using spectra2 must use the range >8300 - >8333 as described.<br />
I call this range "memory area 1".<br />
<br />
There might be a small "memory area 2" in the future. This setting will be controlled by one of the flags in (D).<br />
Reason for that is that some of the routines may require some additional pointers for doing some stuff.<br />
However this area will be optional and depends on the features you use.<br />
<br />
[[Image:spectra2_scrpad_memlayout_190910.png|600px|scratch-pad memory layout]]<br />
<br />
=== Register workspace ===<br />
That's obvious right? On the TMS9900 CPU we need a workspace in memory to hold the 16 registers.<br />
<br />
<br />
=== Address of timer table ===<br />
We can now have multiple timer tables and the timer table can also be relocated. This offers more flexibility compared to the original SPECTRA<sup>1</sup> implementation where we only had a fixed address.<br />
<br />
<br />
=== Address of sound table ===<br />
The built-in sound player will be compatible with the ISR sound format. The tune can either be in VDP memory or ROM/RAM.<br />
This is controlled by one of the bits in the mini-os status field<br />
<br />
<br />
=== Cursor YX position ===<br />
This is new in spectra[sup]2[/sup]. We'll have some functions you can use to put tiles & text at specific coordinates <br />
without you having to calculate each individual position. <br />
<br />
<br />
=== Virtual game keyboard flags or keycodes ===<br />
Already had the concept of a virtual game keyboard in SPECTRA[sup]1[/sup]. <br />
The idea is that we have a keyboard (including mapping to joysticks) and each bit represents a game key. <br />
Most likely there will be an additional keyboard scan routine that can hold the typed key and a status flag.<br />
<br />
<br />
=== Loop code + return from stack ===<br />
This is new in SPECTRA<sup>2</sup>. It contains some machine code that is copied from ROM on library startup. We can easily modify the machine code during runtime by overwriting some of the opcodes.<br />
<br />
Below is the code that is copied on startup:<br />
<pre><br />
* ; Tight loop<br />
DATA >0000 ; \ M3LOOP: opcode+operands set by caller<br />
DATA >0606 ; | DEC R6 (TMP2)<br />
DATA >16FD ; / JNE M3LOOP<br />
DATA >045B ; / B *R11<br />
* ; Return from stack<br />
DATA >C2FD ; \ M3POPR: MOV *RSTACK+,R11<br />
DATA >045B ; / B *R11<br />
</pre><br />
<br />
I'll be going into detail once I covered register usage. What I can say is that -among others- the tight loop is used for reading/writing to the VDP. The "return from stack" code is there for speed reasons and because I want to implement some kind of routine for calling subroutines accross 8K banks. By fiddling with the "return from stack" code, subroutines could become bank-aware.<br />
<br />
<br />
== Scratch-pad memory layout for GPL usage ==<br />
<br />
In order to use the provided GPLLNK routine, you'll have to setup memory in a certain way.<br />
The below table shows what memory locations have a GPL specific usage.<br />
<br />
[[Image:spectra2_scrpad_memlayout_for_gpl_draft_1.png|600px|scratch-pad memory layout when using GPL]]<br />
<br />
== Register usage ==<br />
<br />
So let's talk registers now. Below you find the overview on how the registers will be used in SPECTRA<sup>2</sup>.<br />
<br />
<b>!important!</b><br />
There is a comprehensive set of equates available for addressing all of the below registers. It is strongly advised you use these equates where possible.<br />
It'll allow register reorganization without you having to modify your program big time.<br />
There are also equates available for accessing the high/low bytes of any of the mentioned registers.<br />
<br />
<br />
=== General purpose registers (R0-R3) ===<br />
You can use these registers in your subroutines, but if you change any of these registers you'll have to push them on the stack first.<br />
Ofcourse upon subroutine exit you'll have to pop the old values of the stack. There are subroutines to help you with that.<br />
If your subroutine is called as a timer, then R0-R2 will contain information that identifies the slot, target tick count, etc.<br />
Hence the requirement for pushing/popping if you change R0-R2.<br />
Also R0-R3 are the registers to use if you are going to implement nested subroutines.<br />
<br />
<br />
=== Temporary registers (R4-R7) ===<br />
These registers can be used for storing temporary values. You have to consider that they likely will be overwritten if you<br />
call any of the spectra2 routines. So, it's a good idea to store register values on the stack or in R0-R3 before<br />
calling a routine.<br />
Please use the TMP0..TMP3 equates instead of R4-R7. The registers may be reorganized at a later time. But you are safe if you use TMP0..TMP3<br />
<br />
<br />
=== Stack pointer (R8) ===<br />
Pointer to both subroutine return stack and data stack. The stack pointer is set by the SPECTRA<sup>2</sup> initialisation routine.<br />
For debugging purposes you could set the data stack equate to another register, e.g. R7<br />
<br />
<br />
=== Address of return routine (R9) ===<br />
The address is is set by the spectra2 initialisation routine. It points to the M3POPR machine code in scratch-pad memory.<br />
For exiting a nested subroutine a <b>"B *R9"</b> is to be used.<br />
Benefit: opcode size is only 2 bytes instead of 6 bytes when using <b>"B @>xxxx"</b>. Will also be used when a return accross ROM memory banks is required.<br />
<br />
<br />
=== Highest slot in use & internal counter for timers (R10) ===<br />
The high byte of R10 keeps track of the highest slot used in the timer table.<br />
The low byte of R10 is the timer tick counter and is updated every 1/50th or 1/60th of a second.<br />
<br />
<br />
=== Subroutine return address (R11) ===<br />
Same use as in Editor/Assembler. Contains the return address when doing "BL xxxx"<br />
<br />
<br />
=== Configuration register (R12) ===<br />
Flags for controlling and checking various features of the SPECTRA2 library and your TI-99/4A console.<br />
<br />
=== Copy of VDP status register and internal counter for sound list (R13) ===<br />
The high byte of R13 contains a copy of the VDP status register. This byte is automatically updated by the timer manager.<br />
The low byte of R13 contains an internal counter used by the sound player.<br />
<br />
<br />
=== Copy of VDP register #0 and VDP register #1 (R14) ===<br />
This is new in spectra2. In SPECTRA1 a copy of the values in VDP write-only registers 0-7 was present in scratch-pad RAM.<br />
To save memory, this feature was rejected in SPECTRA2. It's now returning but only for VDP write-only registers 0-1 as these control<br />
most of the features of the VDP.<br />
<br />
<br />
=== VDP write address (R15) ===<br />
Contains the address of the VDP data window. The address is set by the SPECTRA<sup>2</sup> initialisation routine.<br />
This register is heavily used by the built-in functions responsible for VDP communication.</div>Retrocloudshttp://www.ninerpedia.org/index.php?title=File:Spectra2_scrpad_memlayout_for_gpl_draft_1.png&diff=47398File:Spectra2 scrpad memlayout for gpl draft 1.png2010-09-25T08:09:10Z<p>Retroclouds: Scratch-pad memory layout when using GPL</p>
<hr />
<div>Scratch-pad memory layout when using GPL</div>Retrocloudshttp://www.ninerpedia.org/index.php?title=File:Spectra2_scrpad_memlayout_190910.png&diff=47395File:Spectra2 scrpad memlayout 190910.png2010-09-25T07:54:20Z<p>Retroclouds: </p>
<hr />
<div></div>Retrocloudshttp://www.ninerpedia.org/index.php?title=Recent_developments&diff=47370Recent developments2010-08-29T09:33:33Z<p>Retroclouds: /* spectra2 */</p>
<hr />
<div>== Computer Role-Playing Game ==<br />
<br />
Adam Haase has been currently crafting a CRPG (Computer Role-Playing Game) using the original TI-99/4a hardware. He is using a special piece of hardware that has a PIO port and uses a CF card which not only acts as a disk drive, but also a 32k memory expansion and replaces the connection to the Peripheral Expansion Box.<br />
<br />
Adam's current blog regarding the progress on his CRPG can be found here: http://www.adamantyr.com/crpg/<br />
<br />
== Assembler for 990 Mini Computer ==<br />
<br />
While not a 99/4a developer, Dave Pitts worked as an Engineer for Texas Instruments, developing the operating system and assembler for the 990 Mini-Computer.<br />
<br />
His assembler runs on the PC and is excellent for assembling (using the "-m 4" option) 99/4a assembler code. The resulting output is a text file (which would be DV/80 on the TI) containing the tagged object code that can be loaded using Editor/Assembler Option #3.<br />
<br />
The output file, however, can be copied into a "\DSK1" folder that can be easily read by Classic99 without conversion.<br />
<br />
== TiDir ==<br />
<br />
Fred has written an excellent utility named TiDir that allows people to create V9T9 formatted disk images and copy files between PC99 and V9T9 formatted disks to new ones. One can also extract files and copy them to a PC folder.<br />
<br />
I also believe that he is responsible for the Ti994W Emulator. It can be found on the [[Emulators]] page.<br />
<br />
Rumor has it, there is a version which can take PC files and convert them into a 99/4a format for use on a disk image with most popular emulators.<br />
<br />
<br />
== Pitfall! ==<br />
<br />
[http://en.wikipedia.org/wiki/Pitfall! Pitfall!] is a jump & run game released by Activision for popular 80's game consoles like Atari 2600 and Colecovision.<br />
<br />
From 2008 until 2010 a version for the TI-99/4A was written by retroclouds.<br />
It got released as both disk version and a 32K bank-switched ROM command module.<br />
<br />
The source code and binaries were released in 2010. You can get it [http://www.atariage.com/forums/topic/158467-pitfall-binaries-and-source-code here]. <br />
<br />
<br />
A limited run of cartridges was made available in 2010. These were based on the popular Jon Guidry boards.<br />
The cartridge came with a label and sported a 32K (4x8) bank-switched ROM. This version can even run on the unexpanded TI-99/4A. <br />
<br />
[[Image:Pitfall_cartridges.jpeg]]<br />
<br />
== spectra2 ==<br />
<br />
spectra2 is a library in TMS9900 assembly language for writing arcade games running on an unexpanded TI-99/4A console.<br />
The library will support sprites, speech & sound. <br />
<br />
The documentation wiki pages can be found [[Spectra2|here]].<br />
<br />
Check the [http://www.atariage.com/forums/topic/167619-spectra2-development-thread/page__view__findpost__p__2072599 development thread] for discussing future enhancements.</div>Retrocloudshttp://www.ninerpedia.org/index.php?title=File:Pitfall_cartridges.jpeg&diff=47367File:Pitfall cartridges.jpeg2010-08-29T09:20:52Z<p>Retroclouds: First batch of Pitfall! cartridges</p>
<hr />
<div>First batch of Pitfall! cartridges</div>Retrocloudshttp://www.ninerpedia.org/index.php?title=File:Spectra2_scrpad_memlayout.png&diff=47360File:Spectra2 scrpad memlayout.png2010-08-29T08:38:49Z<p>Retroclouds: Scratchpad memory layout</p>
<hr />
<div>Scratchpad memory layout</div>Retrocloudshttp://www.ninerpedia.org/index.php?title=Development_resources&diff=47125Development resources2010-01-31T19:20:13Z<p>Retroclouds: /* Utilities */</p>
<hr />
<div>'''This original version of this [http://www.atariage.com/forums/topic/153704-ti-994a-development-resources/ page] is located at the Atariage game programming subgroup.'''<br />
<br />
This page gives an overview of resources that may be useful if you intend to write software for the TI-99/4A.<br />
<br />
<font color="red"><br />
'''If you are the owner of one of the programs or sites and do not want it posted, please let me know and it will be removed immediately.'''<br /><br />
'''Also if you think a reference to an important development resource is missing, then please let me know and I'll be happy to add to the list.'''<br /><br />
</font><br />
<br />
Below is an overview of most of the development resources for the Texas Instruments TI-99/4A Home Computer:<br />
<br />
== Emulators ==<br />
<br />
* [http://www.harmlesslion.com/software/Classic99 classic99]<br />
: Windows-based emulator including TI-99 ROMs under license from Texas Instruments<br />
: Debugger, memory heatmap, OS file support, support for 128K bank-switch carts, possibility to record AVI movie (no sound).<br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
* [http://www.mess.org MESS]<br />
: Multiple system emulator that supports the TI-99/4, TI-99/4A, TI-99/8, and Geneve.<br />
: Emulates more than 400 systems. Requires ROMs from the original systems. Features debugger, most accurate emulation, support for 64K bank-switch carts, possibility to record AVI movie with sound.<br />
: Also see the [[MESS]] section in ninerpedia.<br />
: Status: <font color="darkgreen">'''Still under active development'''</font> <br />
<br />
* [http://www.99er.net/win994a.shtml Win994a]<br />
: Windows-based emulator of the TI-99/4a<br />
: Good TMS9900 cross-assembler included. No debugger.<br />
: Status: <font color="darkgreen">'''Updated version released in 2009'''</font><br />
<br />
* [http://members.ziggo.nl/fgkaal/Software/sw_ti994w.html#ti994w Ti994w]<br />
: Windows based emulator with 80 column support<br />
: Status: <font color="darkgreen">'''Still under active development'''</font> <br />
<br />
* [http://www.mrousseau.org/programs/ti99sim/ TI-99/Sim]<br />
: Linux-based software simulation of the TI-99/4A<br />
: Status: <font color="red">'''Stalled'''</font><br />
<br />
* [http://pw2.netcom.com/~mjmw/ PC99]<br />
: Commercial DOS-based emulator licensed by Texas Instruments to sell ROMs<br />
: Status: <font color="red">'''Stalled'''</font><br />
<br />
== Programming languages ==<br />
<br />
* [http://www.99er.net/win994a.shtml Winasm99]<br />
: Windows based TMS9900 cross assembler with GUI and ability to build 8K cartridge roms.<br />
: Is part of the Win994a emulator.<br />
: Status: <font color="darkgreen">'''Updated version released in 2009'''</font><br />
<br />
* [http://ftp.whtech.com/emulators/v9t9/v9t9src.zip TIasm]<br />
: TMS9900 cross assembler TIasm will build 8K console (>0000) or cartridge (>6000) rom.<br />
: Is part of the V9T9 emulator package. Source is included.<br />
: Status: <font color="red">'''Stalled'''</font><br />
<br />
== Programming libraries ==<br />
<br />
* [http://spectra99.sourceforge.net SPECTRA]<br />
: Library in assembly language for programming Arcade Games. <br />
: Includes routines for handling tiles, sprites, sound & task scheduler. Documentation included. <br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
* [http://pagesperso-orange.fr/gtello/mlc_e.htm My Little Compiler]<br />
: Library for using assembler-like language & routines from Extended Basic.<br />
: Great for putting more power in Extended Basic programs. <br />
: Demo Pong game and documentation included.<br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
== Utilities ==<br />
<br />
'''1. Cartridge tools'''<br />
<br />
* [http://www.harmlesslion.com/cgi-bin/onesoft.cgi?96 MakeCart]<br />
: Convert almost any E/A#5 program memory image to a GROM cartridge for emulation.<br />
: A version that will convert a E/A#5 program image to ROM cartridge is planned.<br />
: Note that you need 32K memory expansion for running the E/A#5 program stored in the cartridge image.<br />
: Status: <font color="darkgreen">'''Still under active development'''</font> <br />
<br />
<br />
<br />
'''2. File transfer'''<br />
<br />
* [http://members.ziggo.nl/fgkaal/Software/sw_ti99dir.html#tidir TI99Dir]<br />
: TI99 filemanager for windows. Great for transferring disk images to the TI-99/4A. <br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
* [http://ftp.whtech.com/pc%20utilities/TI99-PC%203.2.1.%20Password%20%27TI99%27.rar TI99-PC]<br />
: The Windows software TI99-PC will read, write, format, catalog, copy and convert<br />
: TI-99/4A floppy disks on a PC. You will be able to transfer your real TI floppy disks<br />
: from/to the TI-99/4A.<br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
<br />
<br />
'''3. Sound and speech'''<br />
<br />
* [http://www.kontechs.de/product?name=mod2psg Mod2PSG2]<br />
: Music tracker for the SN76489 sound chip running on Windows.<br />
: With the help of Tursi's [http://www.harmlesslion.com/cgi-bin/onesoft.cgi?107| ePSGMOD player] you can play <br />
: the composed tunes on the TI-99/4A.<br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
* [http://ftp.whtech.com/pc%20utilities/qboxpro.zip QBOX Pro]<br />
: QBOX Pro is the windows software that converts WAV files to LPC speech data for playback on the TI-99/4A speech synsthesizer. <br />
: This is a 16bit windows application but it still runs in Windows 2000/XP/Vista. It does require the BWCC.DLL library.<br />
: Status: <font color="red">'''Stalled'''</font><br />
<br />
<br />
<br />
'''4. Graphics'''<br />
<br />
* [http://sometimes.99er.net/grapefruit.zip Grapefruit]<br />
: This utility for Windows lets you convert graphics to text (programming language data statements) to be included<br />
: in your programs (basic, extended basic or assembler).<br />
: Supports double sized sprites. Includes code to demo character or sprite design. Includes 14 charactersets/examples to<br />
: work with. Has a built-in character editor, but still the idea is to work with your graphics in your favourite graphic<br />
: package (eg. Photoshop). Turn on an 8x8 grid in your graphic software to assist you.<br />
<br />
: This utility needs the .NET framework available for free at [http://www.microsoft.com/downloads Microsoft].<br />
: Status: <font color="darkgreen">'''Still under active development'''</font><br />
<br />
== Tech manuals ==<br />
<br />
* [http://ftp.whtech.com/datasheets%20and%20manuals/99-4A%20Computer/99-4A%20User%20Reference%20Guide.pdf Texas Instruments TI-99/4A user reference guide] <sup>PDF</sup><br />
: The official user reference guide with details how to setup and connect your TI-99/4A.<br />
: Includes intrudction on the TI-BASIC programming language.<br />
<br />
* [http://ftp.whtech.com/programming/Extended%20Basic/TI%20Extended%20Basic%20-%20Linked.pdf Extended Basic reference manual] <sup>PDF</sup><br />
: The official extended basic manual, explaining the 40 new or expanded commands, sprites, etc.<br />
<br />
* [http://mainbyte.com/ti99/basic/basic2.asp Extended Basic online reference] <sup>web</sup><br />
: Online manual with command lookup functionality.<br />
<br />
* [http://ftp.whtech.com/programming/Assembler/Editor%20Assembler%20manual/Editor_Assembler_Manual.pdf Editor/Assembler reference manual] <sup>PDF</sup> (84 MiB)<br />
: The official Editor/Assembler reference manual. Note that this is not a tutorial for beginners.<br />
: Still, it's an essential manual when writing assembler for the TI-99/4A.<br />
<br />
* [http://www.retroclouds.de/thisandthat/vdppg.pdf VDP Programmer's guide] <sup>PDF</sup><br />
: The official programmer'a guide for the TMS9918A and its variants. The [http://en.wikipedia.org/wiki/TMS9918 9918A] is the Video Display Processor<br />
: chip used in the TI-99/4A and several other home computers + game consoles of that era.<br />
<br />
* [http://www.retroclouds.de/thisandthat/rom_command_module_v2.pdf Guide for ROM command module] <sup>PDF</sup><br />
: Description on how to write software that runs from cartridge ROM.<br />
<br />
* [http://www.ti99hof.org/Bios/HeinerMartin/tiintern.pdf TI Intern] <sup>PDF</sup><br />
: Details on "Monitor", the OS of the TI-99/4A. Disassembly of console ROM/GROMS and GPL interpreter.<br />
: Has details on interrupt routine, utility subprograms, basic interpreter, etc.<br />
<br />
== Tech tutorials ==<br />
<br />
* [http://www.retroclouds.de/thisandthat/bank-switching_tutorial.pdf Building a multi-bank ROM image] <sup>PDF</sup><br />
: New tutorial on compiling a 32K bank-switched cartridge ROM image.<br />
<br />
* [http://www.youtube.com/watch?v=ZxJJtwOvNSA Tape to Disk to PC file Transfer] <sup>video</sup><br />
: Video tutorial on file transfer from the TI to the PC using a serial connection cable.<br />
<br />
* [http://www.youtube.com/watch?v=wVDE-6TtmFQ Speech tutorial] <sup>video</sup><br />
: Video tutorial on how to use QBOX Pro to convert a 8kHz mono WAV file to [http://en.wikipedia.org/wiki/Linear_predictive_coding LPC] speech data<br />
: for playback on the TI-99/4A with the [http://www.mainbyte.com/ti99/hardware/speech.html speech synthesizer] device. It shows how to embedd<br />
: the LPC byte stream into your own assembly language program.<br />
<br />
== Tech web sites ==<br />
<br />
* [http://en.wikipedia.org/wiki/TI-99/4A TI-99/4A @ wikipedia]<br />
: Introduction and basics of Texas Instruments TI-99/4A Home Computer. <br />
<br />
* [http://www.nouspikel.com/ti99 Thierry Nouspikel's Tech Pages]<br />
: Probably the best TI hardware and software tech page.<br />
<br />
* [http://www.mainbyte.com/ti99 Mainbyte's home of the TI-99/4A]<br />
: Very good tech site with many detailed pictures and reference area.<br />
: Includes various projects for upgrading your TI-99/4A, e.g. build a supercart cartridge.<br />
<br />
* [http://www.hexbus.com Jon's hexbus page]<br />
: Several hardware projects including pictures. Home of the 64K bank-switched cartridge project.<br />
<br />
== List groups ==<br />
<br />
* [http://tech.groups.yahoo.com/group/ti99-4a/ YAHOO! TI-99/4A list group 1]<br />
* [http://tech.groups.yahoo.com/group/ti994a/ YAHOO! TI-994A list group 2]<br />
* [http://tech.groups.yahoo.com/group/swpb/ YAHOO! TMS9900 programming list group]<br />
<br />
: The above list groups are currently the main meeting point for the TI-99/4A community. <br /><br />
: '''Search and you will find. Ask and you will get answers.'''<br /><br />
: Registration is required for posting.<br />
<br />
* [news:comp.sys.ti comp.sys.ti], covering all TI devices, including calculators<br />
<br />
<br />
== Repositories ==<br />
<br />
* [http://tigameshelf.net/ TI-99/4A Game Shelf]<br />
<br />
: Provides a gallery of interesting games with images of the opening screen as well as an<br />
: in-play snapshot, along with a brief review tested on a real TI 99/4A system. Hardware<br />
: requirements are also listed. Has many good Extended Basic games.<br />
<br />
* [http://ftp.whtech.com/ WHTech]<br />
: WHTech is the primary archive - though it's a bit overwhelming. <br />
: But pretty much all software, hardware docs, etc, are available there. <br />
: It's undergoing a reorganization at the moment to hopefully make it more useful.<br />
<br />
* [http://99er.net 99er.net]<br />
: Site with useful file archive and forum functionality.<br />
<br />
== Other web resources ==<br />
<br />
* [http://www.atariage.com/forums/forum/119-ti-994a-programming/ TI-99/4A game programming subgroup at Atariage]<br />
: Here the focus is on programming games for the TI-99/4A<br />
<br />
* [http://www.atariage.com/forums/forum/116-classic-computing/ Classic computers subgroup at Atariage]<br />
: Has occasional topics related to the TI-99/4A</div>Retroclouds