mirror of https://github.com/marketideas/qasm.git
318 lines
8.6 KiB
ArmAsm
318 lines
8.6 KiB
ArmAsm
mx %00
|
|
omfprint equ 0
|
|
|
|
maxlinklab equ $4000 ;8192 linker lables
|
|
maxfiles equ 100 ;maximum link files
|
|
maxsegs equ 256
|
|
|
|
namelen equ 10 ;length of segment names
|
|
|
|
syntax equ $01+$80
|
|
doserror equ $02+$80
|
|
mismatch equ $5C
|
|
|
|
badasmcmd equ $04
|
|
badcmd equ $06+$80
|
|
badlable equ $07
|
|
outofmem equ $08+$80
|
|
undeflable equ $09
|
|
badoperand equ $0a
|
|
badrelative equ $0b
|
|
symfull equ $0c+$80
|
|
baddictionary equ $0d+$80
|
|
badexternal equ $0e
|
|
extnotzp equ $0f
|
|
maxsegments equ $10
|
|
relfull equ $11+$80
|
|
dupentry equ $12
|
|
maxfileserr equ $13+$80
|
|
onesave equ $14+$80
|
|
badvalue equ $15+$80
|
|
badalignop equ $16
|
|
jmptblfull equ $17+$80
|
|
baddsop equ $18+$80
|
|
constraint equ $19+$80
|
|
notresolved equ $20
|
|
illegalcmd equ $21+$80
|
|
filetoolarge equ $22
|
|
nesterror equ $23+$80
|
|
forwardref equ $24
|
|
badopchar equ $25
|
|
evaltoocomplex equ $26
|
|
duplable equ $27
|
|
|
|
*** label bit flags (used in linker)
|
|
|
|
linkgeqbit = %0100_0000_0000_0000
|
|
linkequbit = %0010_0000_0000_0000
|
|
linkequ1bit = %0001_0000_0000_0000
|
|
linkentrybit = %0000_1000_0000_0000
|
|
linkabsbit = %0000_0100_0000_0000
|
|
linkusedbit = %0000_0010_0000_0000
|
|
linkequvalid = %0000_0001_0000_0000
|
|
linkentused = %0000_0000_1000_0000
|
|
|
|
*** label bit flags (used in assembler) ***
|
|
|
|
localbit = %0000_0000_0000_0001
|
|
variablebit = %0000_0000_0000_0010
|
|
macrobit = %0000_0000_0000_0100
|
|
equatebit = %0000_0000_0000_1000
|
|
externalbit = %0000_0000_0001_0000
|
|
macvarbit = %0000_0000_0010_0000
|
|
linkerbit = %0001_0000_0000_0000
|
|
usedbit = %0010_0000_0000_0000
|
|
entrybit = %0100_0000_0000_0000
|
|
absolutebit = %1000_0000_0000_0000
|
|
|
|
|
|
|
|
|
|
**** Segment Record Offsets ****
|
|
dum $00
|
|
kindfield ds 2
|
|
alignfield ds 4
|
|
dsfield ds 4
|
|
orgfield ds 4
|
|
dend
|
|
|
|
do doexpress
|
|
**** ExpressLoad equates ****
|
|
|
|
emaxsegments equ 12 ;only allow 12 segments in EXPRESS
|
|
|
|
notomf equ $8001
|
|
notomf2 equ $8002
|
|
toomanysegs equ $8003
|
|
alreadyexpressed equ $8004
|
|
badsegnum equ $8005
|
|
badomfrec equ $8006
|
|
invalidexphdr equ $8007
|
|
|
|
dum $00
|
|
oldsegnum ds 2
|
|
newsegnum ds 2
|
|
ekind ds 2
|
|
fileoffset ds 4
|
|
newfileoffset ds 4
|
|
headerlen ds 2
|
|
enamelen ds 2
|
|
processed ds 2
|
|
slcsize ds 4
|
|
srelocsize ds 4
|
|
dend
|
|
fin
|
|
|
|
**** DP storage ****
|
|
dum $00
|
|
zpage ds 4
|
|
labstr ds 16 ;Lable STR that we are working on
|
|
labnum ds 2 ;REC num of current lable
|
|
lableft ds 2 ;B-Tree Structures
|
|
labright ds 2
|
|
labprev ds 2
|
|
lablocal ds 2 ;REC of Local Lable Tree
|
|
labtype ds 2 ;Type of Label
|
|
labval ds 4 ;EQU value of Lable
|
|
foundlable ds 32 ;lable REC returned from FINDLABLE
|
|
globlab ds 2 ;REC of Current Global Lable
|
|
myvalue ds 4
|
|
lvalue ds 4
|
|
caseflag ds 2
|
|
lableptr ds 4
|
|
lableptr1 ds 4
|
|
nextlableptr ds 4
|
|
asmnextlable ds 4
|
|
lasmptr ds 4
|
|
lasmptr1 ds 4
|
|
cptr ds 4
|
|
cptr1 ds 4
|
|
clength ds 4
|
|
|
|
tempptr ds 4
|
|
tempptr1 ds 4
|
|
tempptr2 ds 4
|
|
segmentptr ds 4
|
|
relptr ds 4
|
|
|
|
filehandle ds 4
|
|
filelen ds 4
|
|
fileptr ds 4
|
|
flen ds 4
|
|
dirptr ds 4
|
|
dirct ds 2
|
|
linkaddress ds 4
|
|
lineptr ds 4
|
|
jmpptr ds 4
|
|
jmphdl ds 4
|
|
subtype ds 4
|
|
|
|
modeflag ds 2
|
|
doflag = %0000_0000_1000_0000
|
|
|
|
do doexpress
|
|
*** Express DP ***
|
|
seghdrhdl ds 4
|
|
seghdrptr ds 4
|
|
segdatahdl ds 4
|
|
segdataptr ds 4
|
|
exphdl ds 4
|
|
expptr ds 4
|
|
fin
|
|
|
|
xreg ds 4 ;variables used by EVAL
|
|
yreg ds 4
|
|
val ds 4
|
|
xrel ds 2
|
|
yrel ds 2
|
|
zrel ds 2
|
|
op ds 2
|
|
top ds 2
|
|
deczp ds 2
|
|
|
|
workspace ds 16
|
|
|
|
lst
|
|
here = *
|
|
lst off
|
|
err */$100
|
|
dend
|
|
|
|
|
|
asmpath ds 130,0
|
|
rezpath ds 130,0
|
|
|
|
loadid ds 2
|
|
|
|
do doexpress
|
|
currentseg ds 2
|
|
currentseghdr ds 2
|
|
numsegments ds 2
|
|
lcsize ds 4
|
|
relocsize ds 4
|
|
expsize ds 4
|
|
remapseg ds 2
|
|
expoffset ds 4
|
|
filemark ds 4
|
|
fin
|
|
|
|
rellength ds 4
|
|
interseg ds 2
|
|
reloffset ds 4
|
|
passnum ds 2
|
|
omfoff1 ds 2
|
|
omfoff2 ds 2
|
|
omfshift ds 2
|
|
omfbytes ds 2
|
|
omfcode ds 2
|
|
omflength ds 2
|
|
linenum ds 2
|
|
maxsegnum ds 2
|
|
message ds 2
|
|
domask ds 2
|
|
dolevel ds 2
|
|
|
|
|
|
orgval ds 4
|
|
adrval ds 4
|
|
globalhdl ds 4
|
|
segmenthdl ds 4
|
|
lnkflag ds 2
|
|
lablect ds 2
|
|
asmlablect ds 2
|
|
cancelflag ds 2
|
|
totalerrs ds 2
|
|
linkversion ds 2
|
|
omfversion ds 2
|
|
verchg ds 2
|
|
lkvchg ds 2
|
|
zipflag ds 2
|
|
notfound ds 2
|
|
opflag ds 2
|
|
shiftct ds 2
|
|
savcount ds 2
|
|
lableused ds 2
|
|
noshift ds 4
|
|
compresshdl ds 4
|
|
outfileopen ds 2
|
|
objok ds 2
|
|
linktype ds 2
|
|
totalbytes ds 4
|
|
omfok ds 2
|
|
bankorg ds 2 ;used to set segment load bank
|
|
jmplength ds 2
|
|
dynamic ds 2
|
|
extseg ds 2
|
|
quicklink ds 2
|
|
|
|
linksymhdl ds 4
|
|
linksymtbl ds 4
|
|
linksymnum ds 2
|
|
linknextlbl ds 4
|
|
|
|
|
|
opmask ds 2 ;EVAL variables
|
|
number ds 2
|
|
bracevalid ds 2
|
|
estack ds 2
|
|
evallevel ds 2
|
|
evalrelok ds 2
|
|
offset ds 2
|
|
*shiftct ds 2
|
|
|
|
|
|
errlable ds 16,0
|
|
errpos ds 2
|
|
|
|
newlable ds 18,0
|
|
|
|
segheader
|
|
bytecnt ds 4
|
|
resspc ds 4,0
|
|
seglength ds 4
|
|
lablen dw namelen*256
|
|
numlen hex 04
|
|
version hex 02
|
|
banksize adrl $10000
|
|
kind dw $1000
|
|
ds 2,0
|
|
org adrl $00
|
|
align adrl $00
|
|
numsex hex 00
|
|
hex 00
|
|
segnum ds 2
|
|
entry adrl $00
|
|
dispname dw 44
|
|
disdata dw 54+namelen
|
|
loadname ds namelen
|
|
segname ds namelen
|
|
lconst hex f2
|
|
lcbytes hex 00000000
|
|
|
|
seghdrlen dw lconst-segheader
|
|
|
|
|
|
omfheader1
|
|
blkcount ds 4
|
|
resspc1 ds 4
|
|
seglength1 ds 4
|
|
kind1 hex 00
|
|
lablen1 dfb namelen
|
|
numlen1 dfb 4
|
|
version1 dfb 1
|
|
banksize1 adrl $10000
|
|
adrl $00
|
|
org1 adrl $00
|
|
align1 adrl $00
|
|
numsex1 dfb 0
|
|
lcbank dfb 0
|
|
segnum1 dw 0
|
|
entry1 adrl 0
|
|
dispname1 ds namelen*2+4
|
|
lconst1 hex f200000000
|
|
|
|
seghdrlen1 dw lconst1-omfheader1
|
|
|
|
extrabytes ds 2
|
|
|