carangil
Experienced Member
Over the last 13 months or so, I've been working sporatically on a homebrew 8-bit build. I finally got all my hardware to play nice with each other. I need to put it in a box and put up picture online, but these are the current specs:
It took forever to get things to play nice. Some keyboards didn't work Typing glitched the screen. Sound garbled the keyboard. Reading the sd card blanks the screen. Ugh. Technically reading the sd card still blanks 10 pixel rows of the screen: If I'm playing music from the card (like for the background of a game or something), I can live with 10 lines being blank. It is much better then the zx81's tape loader!
The AVR has the limitation of not running instructions from RAM. Flash only. But it also has self-programming ability, and you can delete and reprogram single pages as needed. There are some loaders that reflash the whole thing from ram/sdcard, and even though you can do this 10's of thousands of times, I don't want to wear the chip excessively. So for the OS, I'm thinking:
- 20 mhz AVR atmega 644 cpu (20 mips, 64k flash, 4k ram)
- 128k external sram in two banks of 64k
- vga output, 64 colors at 256x240 or 512x240
- sd card (tested with 1gb card, theroetical to 4gb, no sdhc support)
- rs232 tested at 115kbps
- 8-bit pcm audio, ~ 10khz
- ps/2 keyboard
It took forever to get things to play nice. Some keyboards didn't work Typing glitched the screen. Sound garbled the keyboard. Reading the sd card blanks the screen. Ugh. Technically reading the sd card still blanks 10 pixel rows of the screen: If I'm playing music from the card (like for the background of a game or something), I can live with 10 lines being blank. It is much better then the zx81's tape loader!
The AVR has the limitation of not running instructions from RAM. Flash only. But it also has self-programming ability, and you can delete and reprogram single pages as needed. There are some loaders that reflash the whole thing from ram/sdcard, and even though you can do this 10's of thousands of times, I don't want to wear the chip excessively. So for the OS, I'm thinking:
- all critical (disk, sprite graphics, comm) in native code flash
- VM interpreter for user programs. Runs them from ram.
- User programs could install a small native-code routines in an unused pages of flash memory. The OS will track what routines are installed and where.
- I hope that over time, the need to install native-code pages will diminish (as I figure out what common things need to be done fast), and many new programs can be written without wearing the flash at all.