Long standing assembler bugs fixed, new path system. Make compatibility update.
This commit is contained in:
@@ -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"
|
||||
Reference in New Issue
Block a user