Implementing FORTH On My 6502 Computer - Export
Implementing FORTH On My 6502 Computer - Export
on my 6502 computer
● Enjoy!
● Learn something new
○ 6502 assembly
○ FORTH internals
○ Eventually learn some FORTH
● Make my 6502 computer usable
My 6502 computer Clock ACIA
Data bus
● WDC 65c02s
● 1.8432 MHz crystal oscillator (clock)
● 32KB EEPROM, 16KB SRAM 6502 RAM ROM
Addr bus
● 6551 ACIA (serial port) ← User interface
● 6522 VIA (Versatile Interface Adapter) ≈ GPIO
● 20x4 LCD display
● No keyboard, no VGA display
ROM
A computer... in need of some software
Around that time (April 2021) is when I then discovered the FORTH language
6502 basics*
● 8 bits registers:
○ A: Accumulator: general purpose, ALU
○ X, Y: indexes, used in addressing modes
○ S: Stack pointer ($01xx)
○ P: processor flags
● PC: program counter (16 bits)
ENTER EXIT
Data Stack
● The Data Stack is build using Zero Page. It starts
at the top of ZP (just below the FORTH registers
W, IP, G1 and G2), and grows downwards.
● Two Registers:
○ IP: (next) Instruction Pointer
○ W: (current) Word Address
● Routines:
● NEXT
● ENTER (“COLON” in my implementation)
● EXIT (“SEMI” in my implementation)
Inner Interpreter - NEXT
● NEXT does 3 things:
○ (IP) --> W IP: (next) Instruction Pointer
○ IP+2 --> IP W: (current) Word Address
○ JMP (W)
NEXT:
; (IP) --> W
LDA (IP) ← Zero page indirect (unindexed)
STA W
LDY #1
LDA (IP),y ← Zero page indirect indexed with Y
STA W+1
; IP+2 --> IP
CLC
LDA IP
ADC #2
STA IP
BCC @skip
INC IP+1 ENTER EXIT
@skip:
JMP (W) ← Absolute indirect Dictionary representation of “,”
Inner Interpreter - ENTER
W
defword "ENTER",,
; push IP to Return Stack
LDA IP+1 ; HI ← I use the HW stack
PHA
LDA IP ; LO as FORTH return stack
PHA
; W+3 --> IP
; (Code at W was a JMP)
CLC
ENTER EXIT
LDA W
ADC #3 IP ← W+3
STA IP
LDA W+1
ADC #0
STA IP+1
JMP NEXT Jump to NEXT
Inner Interpreter - EXIT
defword "EXIT",,
; POP IP from Return Stack
PLA
← I use the HW stack for
STA IP
PLA FORTH return stack
STA IP+1
; JMP NEXT
JMP NEXT ← Jump to NEXT
(My) Development Methodology
My site: https://adumont.github.io/
My FORTH:
● Alex FORTH for 6502 Breadboard Computer
○ Test it in your browser (py65 emulation)
Twitter: @adumont
Thank you!