After a period of abstinence, I’d like to make a new start. In the mean time I’ve got back my first computer, the TI-99/4A.
http://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A Back in the early 80’s, I only had the bare console, the Extended BASIC Cartridge, and the Program Recorder. I learned BASIC programming on it.
By coincidence, I could get a console, which had defective RAM, for a fraction of the ongoing eBay prices. (they are pretty expensive here in Europe) It’s in an adorable condition.
In the 80’s, to use the system to its full potential you’d have to buy a Peripheral Expansion System. Now it’s possible to buy a small PCB which replaces the big and expensive PEB.
http://webpages.charter.net/nanopeb/Point of this story is, there is an extension, a replacement FPGA for the TMS9918A Video Display Processor, VDP. Of course it has a twist to the original TMS9918A, it has a standard 640 x 480 @ 60Hz VGA output. Aside from reproducing all the original functionality of the TMS9918A, the F18A has some nice extra features:
http://codehackcreate.com/archives/335640×480@60 analog VGA output
A binary compatible TMS9900-based GPU
Horizontal and vertical scroll registers with page support
All 32 sprites can be displayed on the same scan line
Removed the VDP “speed limit”, so you can’t over run reading or writing to it
80-column mode
64 programmable 12-bit color registers, which means a 4096 color palette
30-row mode (32×24 tiles or 32×30 tiles (256×240 resolution))
A real bitmap layer with up to 4 colors per pixel (2-bit color)
Enhanced attributes for tiles and sprites
Each sprite can set its own 8×8 or 16×16 size independently
Sprites can be “linked”
1-bit, 2-bit, and 3-bit color modes for tiles and sprites
A “fixed” tile map that allows individual tiles to not be affected by scrolling
Two 32-bit 100MHz counters, one dedicated to the GPU, the other for the host CPU
Two 32-bit 100MHz Linear Feedback Shift Register (LFSR) random number generators
Programmable horizontal scan line interrupt
No, I have no interest in helping to sell them.
However, I’m planning to buy one for my TI-99/4A, and one for my upcoming computer, MARC-3. As I’m learning the TMS9900 assembly language, I’d like to program some “applications” for both systems.
While both claim to be 16-bit CPU’s, the TMS9900 and the W65C816S are *REALLY* different beasts! To name a few things:
Code:
65816 <-> 9900
A, X, Y registers <-> 16 relocatable general purpose registers
little endean <-> big endean
short relative branches <-> long branches
long jumps <-> short relative jumps
7 = MSB <-> 0 = MSB
relocatable stack <-> no stack
Learning from the mistakes and experience of MARC-1 and MARC-2, I’d like MARC-3 to be a modular computer with a ground plane. Using 5V parts for the whole system. My motivation is pretty simple:
I want to have an experimental computer, making interfaces as I go. No doubt, the trade off will be speed, but I’m perfectly satisfied when it’s capable of running on 4 to 8MHz.
The basic system will consist of:
Code:
• CPU W65C816S
• RAM AS6C4008
• ‘ROM’ ATMEGA1284P
• GLUE LOGIC XC95108 PC84
• DUART SC28L92
Additional interfaces / features will consist of:
Code:
• SPI 65SPI XC9572 PC44
• RTC RV-3049-C2
• VGA Display F18A FPGA based Video Display Processor
• Keyboard & Mouse W65C22S
• 2x Joystick W65C22S
• Universal GPIO W65C22S
• Storage SPI Compact Flash Interface
• Synthesizer SID
• Sound samples MX7528JN
• Speech SP0256A-AL2
• MIDI SC26C92
• DMA Controller XC95288XL TQ144 CPLD (5V tolerant)
Of course these are a lot of peripherals, but that’s the beauty of having a modular system, I can expand as I please. Although the XC95288XL is a 3.3V device, it’s 5V tolerant. I’d probably try with pull up resistors, but that’s for later. And of course the key features are in the basic system, which will be build first.
The memory map will be the same as MARC-2, except for the SID, I’ll probably decode the SID to 54272, $D400, that’s the memory location of the first SID register in the Commodore 64. This way I have access to “High Voltage SID Collection” without having to convert the tunes.
Or I’ll make the base address selectable from $00BFxx to $00D400.
Code:
RAM: $000000-$00BEFF
I/O: $00BF00-$00BFFF
ROM: $00C000-$00FFFF
RAM: $010000-$07FFFF