1 Commits
main ... main

Author SHA1 Message Date
f9e2afcc5d archive notice 2025-10-07 15:45:13 -04:00
8 changed files with 39 additions and 105 deletions

View File

@@ -1,5 +1,13 @@
# chibi pc-09
## Archived!
This repo has been archived, and the different parts have been migrated to other repos.
The PCB for prototype 1 has been moved to https://gitea.ambersplace.net/chibi/pc09-prototype-1
The firmware has been moved to https://gitea.ambersplace.net/chibi/chibi-firmware
![Gitea last commit](https://img.shields.io/gitea/last-commit/amberisvibin/chibi-pc09?gitea_url=https%3A%2F%2Fgitea.ambersplace.net&style=for-the-badge&label=Last%20Gitea%20Commit)
![GitHub last commit](https://img.shields.io/github/last-commit/amberisvibin/chibi-pc09?style=for-the-badge&label=Last%20Github%20Commit)

View File

@@ -5,6 +5,3 @@
*.s19
map.txt
build/
# Build system generated files
src/version.s

View File

@@ -1,35 +1,29 @@
# Boot Firmware for CHIBI PC-09
This is the firmware for the CHIBI PC-09. In the future it will provide the
CHIBI with initialization code, a UART driver, some self test features.
TODO: Description of what the firmware does for the PC-09.
## Building the Firmware
Building the firmware from source requires [LWTOOLS](http://www.lwtools.ca/) for
building S-Records of the ROM, and `mot2bin` from
[F9DASM](https://github.com/Arakula/f9dasm) for building binary images. A GNU
Make makefile is provided for building on Linux.
### Using the Makefile
To generate an S-Record run:
You will need GNU `make`, and [`asm6809`](https://www.6809.org.uk/asm6809) to
build the firmware. Obtaining a working copy of `asm6809` could be difficult if
you aren't on Debian, Ubuntu, or Windows as instructions for building it are not
given on the `asm6809` website. Functional instructions for building from Git or
tarball are given here:
```sh
make generate
make boot.s19
```
To generate a binary run:
```sh
make generate
git clone https://www.6809.org.uk/git/asm6809.git
cd asm6809
./configure
make
sudo make install
```
The makefile also can clean up after itself:
From there all you should have to do to generate a `boot.bin` is:
```sh
make clean
git clone https://github.com/amberisvibin/chibi-pc09.git
cd chibi-pc09/code/boot
make
```
## Firmware Licensing

View File

@@ -1,33 +0,0 @@
#!/usr/bin/env sh
# Script to generate version information
# Current git tag
TAG="$(git describe --always --dirty --tags)"
DATE="$(date)"
# Output filename
OUTFILE='src/version.s'
sed -e "s/<TAG>/$TAG/g" -e "s/<DATE>/$DATE/g" <<EOF > "$OUTFILE"
; CHIBI PC-09 Prototype #1 Boot ROM -- Version Information
; Copyright (c) 2024-2025 Amber Zeller, Gale Faraday
; Licensed under MIT
; This file generated by genver.sh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Boot ROM Version & Build Information
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SECTION VERSION
EXPORT VERMSG
VERMSG
fcc "CHIBI PC-09 BOOT ROM <TAG>"
fcb \$0A
fcn "BUILT <DATE>"
EOF

View File

@@ -3,4 +3,3 @@ section SERIAL
section MEMTEST
section VECTORS high 100000
section VERSION high

View File

@@ -1,6 +1,6 @@
# Makefile for CHIBI PC-09 Firmware
.PHONY: generate all clean
.PHONY: all clean
.IGNORE: clean
.DEFAULT_GOAL := all
@@ -8,15 +8,13 @@
# Project Defaults & Folders
# ------------------------------------------------------------------------------
TARGET := boot
TARGREC := $(TARGET).s19
TARGROM := $(TARGET).bin
SRCDIR := src/
TARGET := boot
TARGROM := $(TARGET).bin
SRCDIR := src/
BUILDDIR := build/
GENS := $(SRCDIR)version.s
SRCS := $(wildcard $(SRCDIR)*.s)
OBJS := $(patsubst $(SRCDIR)%.s,$(BUILDDIR)%.o,$(SRCS))
INCS := $(wildcard $(SRCDIR)*.inc)
SRCS := $(wildcard $(SRCDIR)*.s)
OBJS := $(patsubst $(SRCDIR)%.s,$(BUILDDIR)%.o,$(SRCS))
INCS := $(wildcard $(SRCDIR)*.inc)
# ------------------------------------------------------------------------------
# Toolchain Definitions
@@ -24,7 +22,7 @@ INCS := $(wildcard $(SRCDIR)*.inc)
AS := lwasm
LD := lwlink
FIX := objcopy
FIX := mot2bin
ASFLAGS := -f obj
LDFLAGS := -f srec -m map.txt -s linkscript
@@ -36,11 +34,11 @@ LDFLAGS := -f srec -m map.txt -s linkscript
all: $(TARGROM)
# Fix srec into flashable bin file
$(TARGROM): $(TARGREC)
$(FIX) -I srec -O binary $< $@
$(TARGROM): $(TARGET).s19
$(FIX) -out $@ $<
# Link objects
$(TARGREC): $(OBJS)
$(TARGET).s19: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^
# Assemble objects
@@ -48,12 +46,7 @@ $(OBJS): $(BUILDDIR)%.o : $(SRCDIR)%.s
-@mkdir -p $(BUILDDIR)
$(AS) $(ASFLAGS) -o $@ $<
generate: $(GENS)
$(GENS):
./genver.sh
.IGNORE: clean
clean:
@echo 'Cleaning up intermediary files...'
@rm -rv $(TARGROM) $(TARGREC) map.txt $(BUILDDIR)
@rm -rv $(GENS)
@rm -rv $(TARGROM) $(TARGET).s19 map.txt $(BUILDDIR)

View File

@@ -15,16 +15,6 @@ UART_BASE EQU $7F00 ; UART Base Address
ROM_BASE EQU $8000 ; ROM Base Address and Entry Point
VECS_BASE EQU $FFF0 ; Vectors Base Address
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Stack Base Address and Size Information
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STACK_BOTTOM EQU $0100 ; Bottom address of system stack
STACK_DEPTH EQU $FF ; System stack's depth
STACK_TOP EQU STACK_BOTTOM+STACK_DEPTH ; Top address of system stack
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; UART Registers and Flags

View File

@@ -16,21 +16,8 @@
EXPORT RESET
RESET
CLRSTACK
; Initialize the system stack
lda #$00 ; Initialize A & X to zero out the stack
ldx #$0000
NEXT@
sta STACK_BOTTOM,x ; Write a zero and progress to the next byte
leax 1,x
cmpx #STACK_DEPTH ; See if we're at the top of the stack yet
blo NEXT@ ; Loop if we aren't at the end yet
lds #STACK_TOP ; Set S to top of newly cleared stack
SERINIT
; 8n1 Serial Enable DLAB
lda #UARTF_LCR_WLS|UARTF_LCR_DLAB
lda #UARTF_LCR_WLS | UARTF_LCR_DLAB
sta UART_LCR
; REVIEW: Potential endianness hiccough here
ldd #$0C00 ; Set divisor to 12 (9600 baud)
@@ -40,10 +27,9 @@ SERINIT
sta UART_LCR
lda #(UARTF_MCR_RTS) ; Enable Request-to-Send
sta UART_MCR
lda #'H ; send 'H'
lda #'H ; send 'H'
sta UART_BUFR
WAIT
WAIT@
sync ; Wait for interrupts
nop
bra WAIT
bra WAIT@