Long standing assembler bugs fixed, new path system. Make compatibility update.

This commit is contained in:
Anachronaut
2026-08-14 16:53:28 -04:00
parent 94b3a7af28
commit 638b68b25c
32 changed files with 1002 additions and 273 deletions
+74
View File
@@ -0,0 +1,74 @@
; Tests address tables written down by the assembler.
;
; Naming a label in the Data Segment places its two byte address there. That is
; what lets a program lay down a table of addresses ahead of time and walk it
; with LDD, rather than having to build the table at run time with STD.
;
; The label after the table also checks that the assembler counts those two
; bytes when it works out the addresses of everything that follows.
;
; Correct output is:
; one
; two
; three
; AFTER
#Program
start:
SETD.0 Table
INIB 0d3 ; Three entries in the table.
nextEntry:
LDD.1.0 ; DP1 becomes the address held in this table slot.
CALL printDP1
DPUP.0 0d02 ; Step DP0 over the two byte slot.
DECB
BRB tableDone
BRI nextEntry
tableDone:
; Anything placed after the table has to be where the assembler said it was.
SETD.2 After
CALL printDP2
HALT
printDP1:
LDA.1
BRA print1Done
OUTA 0x00
INCD.1
BRI printDP1
print1Done:
INIA 0x0A
OUTA 0x00
RET
printDP2:
LDA.2
BRA print2Done
OUTA 0x00
INCD.2
BRI printDP2
print2Done:
INIA 0x0A
OUTA 0x00
RET
#Data
One:
"one"
Two:
"two"
Three:
"three"
; The table. Each of these names becomes the two byte address of that string.
Table:
One
Two
Three
After:
"AFTER"