Simple SBC based on 65c02s
GPL-3.0 License
Homebrew 6502-based single-board computer with WiFi, built-in mechanical keyboard, uSD card adapter, I2C/SPI, EEPROM, & RTC.
Pull with git pull --recurse-submodules
.
+--------------+-------+------------------+------+------------------------------------------+
| RANGE | TYPE | ADDR | SIZE | Notes |
+--------------+-------+------------------+------+------------------------------------------+
| $0000..$0FFF | RAM | 0000------------ | 32 K | /EN = A15 |
| $1000..$1FFF | | 0001------------ | | $0000..$1000 - zeropage & video buffer |
| $2000..$2FFF | | 0010------------ | | $1000..$7FFF - programs from SD Card |
| $3000..$3FFF | | 0011------------ | | |
| $4000..$4FFF | | 0100------------ | | |
| $5000..$5FFF | | 0101------------ | | |
| $6000..$6FFF | | 0110------------ | | |
| $7000..$7FFF | | 0111------------ | | |
+--------------+-------+------------------+------+------------------------------------------+
| $8000..$8FFF | LOROM | 1000------------ | 16 K | /EN = NAND(A15, NAND(A14)) |
| $9000..$9FFF | | 1001------------ | | Contains OS ("MicroREPL") |
| $A000..$AFFF | | 1010------------ | | |
| $B000..$BFFF | | 1011------------ | | |
+--------------+-------+------------------+------+------------------------------------------+
| $C000..$CFFF | N/C | 1100------------ | 4 K | Unused, may add extra '138 with /GA=/A13 |
+--------------+-------+------------------+------+------------------------------------------+
| $D000..$DFFF | I/O | 1101------------ | 4 K | G = A12, /GA = A13, /GB = NAND(A15, A14) |
| | | 1101-000-------- | 256B | $D000..$D0FF - RAM banking register |
| | | 1101-001-------- | 256B | $D100..$D1FF - 6522 VIA |
| | | 1101-010-------- | 256B | $D200..$D2FF - 6551 ACIA |
| | | 1101-011-------- | 256B | $D300..$D3FF - T6963C LCD (240x64) |
+--------------+-------+------------------+------+------------------------------------------+
| $E000..$EFFF | HIROM | 1110------------ | 8 K | /EN = NAND(/NAND(A15, A14), A13) |
| $F000..$FFFF | | 1111------------ | | Contains Kernel ("Kore") |
+--------------+-------+------------------+------+------------------------------------------+
LOROM (10xx) || HIROM (111x):
/EN = A15 && (/A14 || (A14 && A13))
/EN = NAND(A15, /A14 || /NAND(A14, A13))
/EN = NAND(A15, NAND(A14, NAND(A14, A13)))
W65C02, 512 KB RAM (32KB visible to CPU, banked into 4 x 8 KB segments)
240x64 LCD display (T6963C)
Built-in mechanical PS/2 keyboard, powered by ATmega328P
Internet! Works through ESP-01
VIA W65C22N(6TPG-14)
Provides:
ACIA W65C51N(6TPG-14)n
Provides:
Note: I'm using NMOS-compatible versions of VIA & ACIA (N suffix) with open-drain /IRQ line. See http://archive.6502.org/datasheets/wdc_w65c22_sep_13_2010.pdf (page 25) for more details.
Address decoder & underclocking - ATF16V8B-15PU
Main crystal is 16 MHz, and the CPU runs at either 8 MHz or 2 MHz. Reason for this is that T6963C LCD can only operate on up to 2.75 MHz. So when CPU needs to acccess the LCD, ATF16V8 divides clock speed by 4, bringing it down to 2 MHz. This is done by implementing a 2-bit counter using registered outputs.
Memory banking: 74LS670
Entire RAM (first 32 KB) is divided into 4 x 8 KB segments. Each segment can use one of its own 16 banks. This allows to selectively bank parts of RAM in and out. Using a machine-tooled socket actually allows to connect JCO-8 or JCO-14 oscillators.
Traco Power TSR 1-2450 (drop-in replacement for 7805)
It runs much cooler than L7805 since it's a switching regulator. I use them a lot, although they are not as cheap as 7805.
V2.0 schematic:
Kernel code currently provides the following features:
galasm
as submodule)Playing snake, for example: