diff options
| author | Jacques Comeaux <jacquesrcomeaux@protonmail.com> | 2024-07-20 01:08:03 -0500 | 
|---|---|---|
| committer | Jacques Comeaux <jacquesrcomeaux@protonmail.com> | 2024-07-20 01:08:03 -0500 | 
| commit | ce3ddfefd39e556f2dc81806fe8560455cf948b4 (patch) | |
| tree | b41f29be6f948f0423650b8345ea872bd064e79a /better_assembler | |
| parent | c4bd010cf5f55ff7d12e0b9c5cc69e871d590e2c (diff) | |
Add string functions for stage 3 editor
Diffstat (limited to 'better_assembler')
| -rw-r--r-- | better_assembler/Makefile | 8 | ||||
| -rw-r--r-- | better_assembler/data.as | 74 | ||||
| -rw-r--r-- | better_assembler/main.as | 11 | ||||
| -rw-r--r-- | better_assembler/slowcat.c | 11 | ||||
| -rw-r--r-- | better_assembler/string.as | 48 | 
5 files changed, 152 insertions, 0 deletions
| diff --git a/better_assembler/Makefile b/better_assembler/Makefile new file mode 100644 index 0000000..3f0c463 --- /dev/null +++ b/better_assembler/Makefile @@ -0,0 +1,8 @@ +DEVICE = /dev/ttyUSB0 + +objects = string.as data.as main.as + +.PHONY: serial +serial: $(objects) slowcat +	cat $(objects) | tr "\n" "\r" | ./slowcat | picocom -b 115200 -q $(DEVICE) +	@echo diff --git a/better_assembler/data.as b/better_assembler/data.as new file mode 100644 index 0000000..008c0d8 --- /dev/null +++ b/better_assembler/data.as @@ -0,0 +1,74 @@ +<0300 comma +Q   0475 03 +Q   0465 15 +Q   0065 01 +Q   0000 12 +<0308 equals +Q   0505 05 +Q   0405 25 +Q   0515 14 +Q   0050 15 +Q   0000 00 +<0312 lbrace +Q   0411 14 +Q   0405 22 +Q   0425 03 +Q   0050 15 +Q   0000 00 +<031C rbrace +Q   0411 22 +Q   0405 22 +Q   0425 03 +Q   0050 15 +Q   0000 00 +<0326 lbracket +Q   0411 14 +Q   0405 22 +Q   0455 03 +Q   0521 05 +Q   0050 15 +Q   0000 00 +<0332 rbracket +Q   0411 22 +Q   0405 22 +Q   0455 03 +Q   0521 05 +Q   0050 15 +Q   0000 00 +<033E directive +Q   0445 04 +Q   0425 22 +Q   0521 03 +Q   0531 11 +Q   0065 05 +Q   0000 12 +<034A register +Q   0425 22 +Q   0445 07 +Q   0521 23 +Q   0511 05 +Q   0050 15 +Q   0000 00 +<0356 label +Q   0405 14 +Q   0425 02 +Q   0065 14 +Q   0000 12 +<035E opcode +Q   0501 17 +Q   0475 03 +Q   0425 04 +Q   0050 15 +Q   0000 00 +<0368 number +Q   0525 16 +Q   0411 15 +Q   0511 05 +Q   0050 15 +Q   0000 00 +<372 string +Q   0521 23 +Q   0445 22 +Q   0435 16 +Q   0050 15 +Q   0000 00 diff --git a/better_assembler/main.as b/better_assembler/main.as new file mode 100644 index 0000000..28b5139 --- /dev/null +++ b/better_assembler/main.as @@ -0,0 +1,11 @@ +<0000 +LL      R4 3            load string address +DRF     R0 R4 +JIH     0000            print string +JIL     0174 +DRF     R0 R4 +JIH     0000            read string +JIL     0371 +JA      3770            infinite loop +Q       0014 00 +Q       0200 00 diff --git a/better_assembler/slowcat.c b/better_assembler/slowcat.c new file mode 100644 index 0000000..67725d4 --- /dev/null +++ b/better_assembler/slowcat.c @@ -0,0 +1,11 @@ +#include <unistd.h> +#include <stdint.h> + +int main() { +  uint8_t byte; +  while (read(STDIN_FILENO, &byte, 1)) { +    write(STDOUT_FILENO, &byte, 1); +    usleep(10000); +  } +  return 0; +} diff --git a/better_assembler/string.as b/better_assembler/string.as new file mode 100644 index 0000000..35f9248 --- /dev/null +++ b/better_assembler/string.as @@ -0,0 +1,48 @@ +<0100 putstr +register zero  : string offset +register one   : current character, uart status +register two   : tx fifo full bitmask +register three : uart zero base +LL      R3 5            load uart zero base +DI      R2 40           tx fifo full bitmask +LI5     R1 R3 6         get uart status +BT      R1 R2           check if ready to send +JN      374             loop if not ready +LBI     R1 R0 0         load one char from memory +BT      R1 R1           test byte +JE      2               done if zero +SBI     R1 R3 0         send one byte +AAI8    R0 1            increment string pointer +JA      3766            next char +JR      R14             jump to link register +Q       0400 00         uart zero base +Q       0400 03 +<0200 getstr +register zero  : string offset +register one   : current character, uart status +register two   : rx fifo empty bitmask +register three : uart zero base +LL      R3 12           load uart zero base +DI      R2 60           rx fifo empty or tx fifo full bitmask +LI5     R1 R3 6         get uart status +BT      R1 R2           check if ready to receive and transmit +JN      374             loop if not ready +LBI     R1 R3 0         get one char +SBI     R1 R3 0         echo the char +CI      R1 015          compare to carriage return +JE      2               done if equal +SBI     R1 R0 0         write one char to memory +AAI8    R0 1            increment string pointer +JA      3764            next char +DI      R1 000          null byte +SBI     R1 R0 0         store null byte +DI      R2 40           tx fifo full bitmask +LI5     R1 R3 6         get uart status +BT      R1 R2           check if ready to transmit +JN      374             loop if not ready +DI      R1 012          newline +SBI     R1 R3 0         send newline +JR      R14             jump to link register +Q       0000 00         alignment +Q       0400 00         uart zero base +Q       0400 03 | 
