Sunday, November 16, 2008

Introducing the blunder computer of the 80's - the SIC-20.

(And yes, I'm half-serious about building it. No promises. ;) )

Using various pieces of an atmega168/arduino, it should be possible to create a simple 8-bit basic with a 20x20 NTSC video output (hence getting the name)

Memory layout:

400 bytes - 20x20 display, ascii with block characters. (copy of the commodore font mebbe?) The timings involved here should give the AVR enough time to do other stuff.

64 bytes - variables A-Z plus reserved vars. As a concession to a slight bit of non-s**tyness, they're 16-bit signed.

x bytes - tokenized lines/commands. 16-bit wide so that any token doing anything can fit. The command is 5 bits, with one bit being a string/bit switch. (There will string<->int tokens working on the reserved vars) Variables are encoded as 5 bits - 0-32 with reserved words at the top, and each token can work on two operands. The line # itself is token #30, with 11-bit line #'s. #31 is a pass-through for single-operand instructions.

The token area is garbage collected when it fills up. Each new line entry is added at the end, and the interpreter goes from the end to the beginning so new versions of a line are implemented first. (Could this mean an "UNDO" command? Yes, until the next GC cycle. ;) )

y bytes - string area. GC works the same way the token area does. Strings are null-terminated with a one-byte trailer with the variable #. The strings themselves might even be stored in reverse. ;)

Peripherals:

- PS/2 keyboard (scanned at hblank?) and composite monitor output.

- Optionally VIC-20/C64 keyboard and composite monitor output. I think there are just enough ports.

- UART port with ANSI terminal support. By far faster then the NTSC+keyboard mode.

- Joysticks! DB-9 joystick ports supported. Paddle ports go to the DAC. You get 2 more paddle bits than most 8-bit systems!

- SD card slot. Enjoy the amazing anachronism of using state of the art 2GB SD cards. The earlier versions at the very least will just use it to save the 1K RAM area, so you get to use a whopping 64MB since you get 65,535 save slots.

No comments: