Well, I've come up with a cheap method of adding a serial EEPROM to a cart. Albert's F8/F6/F4 board should be easily adaptable to the purpose. The EEPROM may be accessed much faster than the EEPROM in a MemCard/Atarivox--a rate of 298kbps. Indeed, it's 33% faster than even 4A50's EEPROM access which is itself quite impressive for a 6502.
Code to access the EEPROM must be stored in a pair of adjacent banks; 0 and 1 are recommended, but 2 and 3, 4 and 5, or 6 and 7 could be used if desired.
Although I'm more interested in 2600 development than 7800 development, I've had an idea for a POKEY alternative for 7800 developers. My intention would be to release an open-source framework that other developers could build upon if desired.
The GADGETT (Great Audio Doesn't Get Easier Than This) would be an 8-pin DIP Cypress microcontroller which would be programmed with a small bootloader and would attach to a few pins on the 7800 bus. The part in question costs $2.50 in quantity 100 and
This is an extension of my brick-buster kernel demo, with some collision-detection code added. As you move your player left and right, the program will highlight the bricks you're over on rows 1, 3, and 5. The collision-detect code is presently a bit too slow to be practical (though it does manage to run three times in vblank, which would be barely enough to allow for three balls bouncing, the timing is really very tight). The technique is nonetheless interesting and may be useful elsewhere.E
A year ago, I created a kernel to display 13 characters per line, each of which could independently be one of two colors. Rather a neat trick, but it required a bunch of straight-line code. The only way to change the contents of a line of text was to modify the code that displayed it. On a SuperCharger, that could work, though displaying eight lines of text would use up most of the RAM; I dismissed the kernel as an interesting curiosity.
Discussions of Sudoku led me to wonder whether the
Here's a sample of what might be possible under Chimera. There's supposed to be another column of data (8 pixels wide) in the left-side red area, but the timing's not quite right so the sprite doesn't show up on a real system (it does under Z26, but Z26 has other problems; besides, what really matters is what a real machine does).
This demo runs under straight F4 banking; the only practical way to animate stuff on the screen would be to use Chimera to patch over a thousand load-immediate in
I haven't gone into much detail elsewhere about the 4A50 cart and some of the techniques it uses, but since people may find it interesting I'll discuss it here.The heart of the cartridge is a Xilinx CPLD. This device has 36 macrocells connected to 32 I/O pins. While it's a step up from the 22V10 used in Al's bankswitch carts, it's still very cheap as such devices go.Another key to the cartridge is a 14.31818Mhz oscillator. Although many RAM-plus carts get by with some simple RC circuitry for
Atari paddles jitter. This is a consequence of a design which makes the wiper resistance part of the measurement. There's another way to read a potentiometer which works better: put a fixed voltage on the pot and measure the voltage at the wiper. Although severe grunge can still cause slight jitter, it will generally be on the order of 2-3 degrees--far less than in the normal design.In addition to the jitter problem, Atari paddles are time-consuming to read. Because measurements take many mi
Here's a little animation routine that would be quite suitable for use as a title screen in a banked game (this demo is just under 3K and would probably take about 2-2.5K if written more efficiently). The technique I use here has some limitations, but allows some magic unlike anything the 2600 has seen before.
A text logo scrolls up like the Star Wars opening crawl, scrolling off the top of the screen.
The logo then zooms out from the center of the screen, then shrinks diagonally to the cent
The Atari 2600's HMOVE circuitry is, to put it mildly, interesting. I was just examining the schematics for it earlier today and figured out a trick that might be useful for some applications, most notably kernels in the style of Homestar Runner or Ruby Runner which move some sprites left and right by eight pixels on alternate scan lines.
The "classic" approach, invented by David Crane almost 30 years ago, was to only move sprites by seven pixels instead of eight and then shift the data byt
New Year--maybe time for a new blogI've been doing 6502 coding for many years, having started with a VIC-20 many years ago. It wasn't until I had my Commodore 64 that I started trying to figure how to really "push the envelope", though looking at what people have done since I moved on to the PC makes my efforts seem puny by comparison (I did, by myself, figure out how to scroll sprites into the left and right borders, though).To this day, I take great pride in figuring out efficient ways to cod
Haven't posted in awhile, but I've been working on some things.
-1- Paddle fixer. Simple little circuit that should allow paddles to work beautifully even when dirty.
-2- EEPROM enhancement for AA cart.
-3- Ruby Runner
-4- The 4A50 programmer. My current programmer works, but it only runs under DOS (ugh). So I'm working on a version that will connect via serial port and run under Windows (easily adaptable for Linux/Macintosh/whatever).
-5- EEPROM emulation for Z26 (I'll of
This is some very rough test code for a 13-character text display with Chimera.
(edit)Removed a vestigial 'include' and a couple of vestigial macro invocations.
My next little project is called BTP2. I've got the data tables designed, but still need to come up with the code to drive them. It's somewhat related to a recent thread. So now you have to speculate what crazy idea I might be thinking of.
Clues:
Stereo, 15.75KHz
46 cycles/scan line
Any guesses?
Here's a kernel demo which might be useful for the game Archon. For demo purposes it can run as either 3F bankswitching (use the -g11 switch in Z26) or as 4A50. A banking file is included for Cuttle Cart 2 users.
The basis game engine on Ruby Runner is now functional. The rubies and stones now fall, and can even slide sideways. They sometimes slide when they shouldn't, but I should be able to fix that. My original design intention had been to use the LSB of each character code to indicate whether the character was "slippery", but some temp character codes generated for moving items have the bit set when they shouldn't, which messes things up. I think I'll have to simply use a lookup table to allow ea
Well, I've got the logic worked out for a "universal" PLD for the AtariAge/CPUWIZ boards using an Atmel ATF750B. The chip is pin-compatible with the 20V8/22V10 which is handy. In a lot of ways I'm not too keen about the design of the chip or the software, though.
The chip is basically positioned as a 22V10 superset. Each output pin (there are ten) has the same set of product terms as on a 22V10, but they're split into two groups. One group feeds a flipflop; the other group feeds, either
Here's a demo of an RPG kernel which should be quite practical in a 4A50 cart or maybe even the SuperCharger. It would require self-modifying code, but not obscene amounts (256 bytes per row, so 2.25K for a nine-row display); a SuperCharger implimentation would probably be reasonable also.The kernel supports a 9x9 display of 8x16-pixel characters with eight pseudocolors at 30Hz flicker (each character can contain two real colors, and they can be blended if desired). The graphics here aren't th
Here's a little demo of an RPG kernel on the Supercharger. It includes source, so you can see how to set things up for a 6K game. Note that I did not bother putting in correct checksums, so Stella will probably squawk.Note that this kernel has some considerable room for improvement. Some comments:-1- This kernel does three playfield stores per scan line. Using reflected playfield mode, and using separate playfield data for even and odd frames, this could be reduced to two. This would also e
Cory Maye, a man who was on death row for having shot an intruder who happened to be a police officer, has bee moved off death row. I've read some of the trial and hearing transcripts of the case, and it sure seems like some prosecutors are more concerned in convictions than in justice.
At trial, Cory Maye testified that he was awakened by the sound of someone bashing at his door, went to the bedroom, got a pistol, and got down on the floor watching the doorway. When door was breached, Cor
BTP2 music sounds even better than expected when I put in some real music. I need to put in some real logic for music handling so I can sustain notes (and not use 16 bytes per beat!) but this clip shows the full five octave range of BTP2 with a recognizable tune.
Here's a demo of an even better RPG kernel. This one shows a scrolling (control with joystick) 10x8 window into a 32x24 world. The demo requires a SuperCharger (if running Stella, ignore the checksum messages) but the plan is to do the thing in 4A50 once an emulator is available (parts of the code will be much nicer, and things like animated water will be freebies).Note that there is no restriction on tile placement; the game flickers at 30Hz, but in exchange for tolerating 30Hz flicker you ge
It's been awhile since I've posted about the 4A50 cart, so many people may be thinking it's been abandoned. It actually still is a work in progress, despite some "shiny object syndrome" that resulted in things like Strat-O-Gems.I worked awhile ago with Chad Schell to produce some VHDL for 4A50 and unfortunately did not have time then to diagnose it other than to determine that something didn't work. Hopefully within the next few days I'll be able to diagnose exactly what it IS doing and take t
Reading a paddle on the 2600 is a pain. Reading all four paddles on the 2600 is an even bigger pain. I think I've come up with an approach that will mitigate things somewhat. This technique requires knowing the magic index value for the current scan line; these values go "0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 4" etc. corresponding to what bit in a gray code should be flipped. If the magic index value for a scan line is known, reading all four paddles takes 26 cycles; if it's not known, it takes 32 c
I've just been feeling like doing minikernels lately. I don't know why. Maybe 'cos they offer a nice quick challenge.My latest minikernel was an effort to try doing the Warlords shields and kings all with player sprites, so as to free up missiles for additional fireballs. Turns out I forgot that NUSIZx affects missiles as well as players (grrr...) but the code is still somewhat interesting as it manages a single-line kernel with two 16-pixel-wide kings on the same scan line as two movable shi