aboutsummaryrefslogtreecommitdiff
path: root/octedit
diff options
context:
space:
mode:
Diffstat (limited to 'octedit')
-rw-r--r--octedit/Makefile22
-rw-r--r--octedit/main.s18
-rw-r--r--octedit/octedit.s34
-rw-r--r--octedit/pico_persist.ld13
-rw-r--r--octedit/uart.s33
5 files changed, 120 insertions, 0 deletions
diff --git a/octedit/Makefile b/octedit/Makefile
new file mode 100644
index 0000000..26601c8
--- /dev/null
+++ b/octedit/Makefile
@@ -0,0 +1,22 @@
+all: build
+
+build: octedit.uf2
+
+octedit.uf2: octedit.elf
+ ../elf/elf2uf2 octedit.elf octedit.uf2
+
+objects = uart.o main.o octedit.o
+
+octedit.elf: $(objects)
+ arm-none-eabi-ld -T pico_persist.ld -o octedit.elf $(objects) ../setup/setup.so
+ ./checksum_pico_elf.py octedit.elf
+
+$(objects): %.o: %.s
+ arm-none-eabi-as -o $@ $<
+
+clean:
+ rm octedit.elf octedit.uf2 *.o
+
+flash: octedit.uf2
+ [ -h /dev/disk/by-label/RPI-RP2 ] || sleep 3s
+ cat octedit.uf2 > /dev/disk/by-label/RPI-RP2
diff --git a/octedit/main.s b/octedit/main.s
new file mode 100644
index 0000000..6c471ec
--- /dev/null
+++ b/octedit/main.s
@@ -0,0 +1,18 @@
+.syntax unified
+.cpu cortex-m0plus
+.thumb
+
+.section .entry, "ax"
+
+.type main, %function
+.global main
+
+main:
+ bl start_xosc
+ bl setup_clocks
+ bl setup_gpio
+ bl setup_uart
+ b octedit
+
+.section .stage_2_crc
+.word 0x00000000
diff --git a/octedit/octedit.s b/octedit/octedit.s
new file mode 100644
index 0000000..9445fd8
--- /dev/null
+++ b/octedit/octedit.s
@@ -0,0 +1,34 @@
+.syntax unified
+.cpu cortex-m0plus
+.thumb
+
+.equ SRAM_BASE, 0x20000000
+
+.type octedit, %function
+.global octedit
+
+octedit:
+ ldr r6, =SRAM_BASE
+ adds r5, r6, 1
+10:
+ movs r4, 0
+20:
+ bl uart_recv
+ cmp r0, '\r
+ beq 30f
+ cmp r0, 'G
+ beq 40f
+ bl uart_send
+ subs r0, '0
+ lsls r4, 3
+ adds r4, r0
+ b 20b
+30:
+ bl uart_send
+ movs r0, '\n
+ bl uart_send
+ strh r4, [r6]
+ adds r6, 2
+ b 10b
+40:
+ bx r5
diff --git a/octedit/pico_persist.ld b/octedit/pico_persist.ld
new file mode 100644
index 0000000..9c37aba
--- /dev/null
+++ b/octedit/pico_persist.ld
@@ -0,0 +1,13 @@
+MEMORY {
+ FLASH(rx) : ORIGIN = 0x10000000, LENGTH = 2M
+ SRAM(rx) : ORIGIN = 0x20041f00, LENGTH = 256
+}
+
+SECTIONS {
+ .text : {
+ *(.entry);
+ *(.text);
+ . = 252;
+ *(.stage_2_crc);
+ } >SRAM AT>FLASH
+}
diff --git a/octedit/uart.s b/octedit/uart.s
new file mode 100644
index 0000000..e79cbdc
--- /dev/null
+++ b/octedit/uart.s
@@ -0,0 +1,33 @@
+.syntax unified
+.cpu cortex-m0plus
+.thumb
+
+.equ UART0_BASE, 0x40034000
+.equ UARTDR_OFST, 0x00
+.equ UARTFR_OFST, 0x18
+
+.type uart_send, %function
+.global uart_send
+
+uart_send:
+ ldr r1, =UART0_BASE
+ movs r3, 0b1 << 5 // TX FIFO full
+1:
+ ldr r2, [r1, UARTFR_OFST]
+ tst r2, r3
+ bne 1b
+ strb r0, [r1, UARTDR_OFST]
+ bx lr
+
+.type uart_recv, %function
+.global uart_recv
+
+uart_recv:
+ ldr r1, =UART0_BASE
+ movs r3, 0b1 << 4 // RX FIFO empty
+1:
+ ldr r2, [r1, UARTFR_OFST]
+ tst r2, r3
+ bne 1b
+ ldrb r0, [r1, UARTDR_OFST]
+ bx lr