1
0
mirror of https://github.com/pfusik/xasm.git synced 2025-08-07 23:24:58 +00:00

X-Assembler 1.6.

This commit is contained in:
Piotr Fusik
1998-09-14 11:48:16 +02:00
parent 8acc5c528f
commit 1a31c1ddd5

572
xasm.asm
View File

@@ -6,11 +6,11 @@
CODESEG CODESEG
ORG 100h ORG 100h
start: start:
db 4096 dup(0) ;for packing db 5*1024 dup(0) ;for packing
l_icl = 1000 l_icl = 1000
l_org = 1000*2 l_org = 1000*2
l_lab = 50000 l_lab = 48000
STRUC com STRUC com
cod db ? cod db ?
@@ -28,6 +28,11 @@ nam db ?
STRUC lab STRUC lab
prev dw ? prev dw ?
val dw ? val dw ?
flags db ?
b_sign = 7
m_sign = 80h
m_lnus = 40h
m_ukp1 = 20h
nam db ? nam db ?
ENDS ENDS
@@ -42,12 +47,22 @@ m_eofl = 40h
eol equ 13,10 eol equ 13,10
eot equ 13,10,'$' eot equ 13,10,'$'
MACRO lda _rg MACRO lda _rg ;shorter than 'mov (e)ax, _rg'
xchg ax, _rg ;shorter than 'mov ax, _rg' _rge SUBSTR <_rg>, 1, 1
IFIDNI _rge, <e>
xchg eax, _rg
ELSE
xchg ax, _rg
ENDIF
ENDM ENDM
MACRO sta _rg MACRO sta _rg ;shorter than 'mov _rg, (e)ax'
xchg _rg, ax ;shorter than 'mov _rg, ax' _rge SUBSTR <_rg>, 1, 1
IFIDNI _rge, <e>
xchg _rg, eax
ELSE
xchg _rg, ax
ENDIF
ENDM ENDM
MACRO dos _func MACRO dos _func
@@ -105,6 +120,14 @@ _tp SUBSTR <_oper>, 6
dw _tp dw _tp
ENDM ENDM
MACRO opr _oper
_tp SUBSTR <_oper>, 1, 1
db _tp
_tp SUBSTR <_oper>, 2
_tp CATSTR <v_>, _tp
dw _tp
ENDM
;***************************** ;*****************************
print hello print hello
@@ -180,31 +203,37 @@ syntax: mov si, offset line
je s_cmd je s_cmd
cmp al, 9 cmp al, 9
je s_cmd je s_cmd
call rlabel jpass2 deflp2
jc asilab call flabel
cmp bx, [p1laben] jnc ltwice
jnb ltwice push si
mov [pslaben], bx
inc [labvec] ;1
jmp s_cmd
ltwice: error e_twice
asilab: push si
mov si, offset tlabel mov si, offset tlabel
mov di, [laben] mov di, [laben]
scasw
mov [labvec], di mov [labvec], di
scasw ;add di, 2
mov ax, [origin] mov ax, [origin]
stosw stosw
mov ax, di mov al, m_lnus
add ax, dx stosb
cmp ax, offset t_lab+l_lab
jnb tmlab
mov cx, dx mov cx, dx
rep movsb rep movsb
mov ax, di mov ax, di
cmp ax, offset t_lab+l_lab-5
jnb tmlab
xchg ax, [laben] xchg ax, [laben]
stosw stosw
pop si pop si
jmp s_cmd
ltwice: error e_twice
tmlab: error e_tlab
deflp2: call rlabel
mov ax, [pslab]
mov [labvec], ax
add ax, offset (lab).nam
add ax, dx
mov [pslab], ax
s_cmd: lodsb s_cmd: lodsb
cmp al, ' ' cmp al, ' '
@@ -277,9 +306,6 @@ adex1: mov [byte di-1], '.'
mov [orgvec], offset t_org mov [orgvec], offset t_org
xor ax, ax xor ax, ax
call pheadr call pheadr
mov ax, [laben]
mov [p1laben], ax
inc [pslaben] ;0
jmp begin jmp begin
fin: mov bx, [ohand] fin: mov bx, [ohand]
@@ -294,8 +320,6 @@ fin: mov bx, [ohand]
mov ax, [exitcod] mov ax, [exitcod]
dos dos
tmlab: error e_tlab
linlon: push offset e_long linlon: push offset e_long
jmp erron jmp erron
@@ -503,81 +527,95 @@ rstr1: call get
strer: error e_str strer: error e_str
; Przepisuje etykiete do tlabel, szuka w t_lab ; Przepisuje etykiete do tlabel (wyj: dx-dl.etykiety)
; na wyjsciu: dx-dlugosc etykiety
; C=0: znaleziona, bx=adres wpisu
; C=1: nie ma jej
rlabel: mov di, offset tlabel rlabel: mov di, offset tlabel
mov [byte di], 0 mov [byte di], 0
ldlab1: lodsb rlab1: lodsb
cmp al, '0' cmp al, '0'
jb sflab0 jb rlabx
cmp al, '9' cmp al, '9'
jbe ldlab2 jbe rlab2
cmp al, 'A' cmp al, 'A'
jb sflab0 jb rlabx
cmp al, 'Z' cmp al, 'Z'
jbe ldlab2 jbe rlab2
cmp al, '_' cmp al, '_'
je ldlab2 je rlab2
cmp al, 'a' cmp al, 'a'
jb sflab0 jb rlabx
cmp al, 'z' cmp al, 'z'
ja sflab0 ja rlabx
add al, 'A'-'a' add al, 'A'-'a'
ldlab2: stosb rlab2: stosb
jmp ldlab1 jmp rlab1
sflab0: mov dx, di rlabx: mov dx, di
mov di, offset tlabel mov di, offset tlabel
cmp [byte di], 'A' cmp [byte di], 'A'
jb ilchar jb ilchar
sub dx, di sub dx, di
dec si dec si
ret
; Czyta etykiete i szuka w t_lab
; wyj: dx-dlugosc etykiety
; C=0: znaleziona, bx=adres wpisu
; C=1: nie ma jej
flabel: call rlabel
push si push si
mov bx, [laben] mov bx, [laben]
sflab1: cmp bx, offset (lab t_lab).nam flab1: cmp bx, offset t_lab
jb sflabn jb flabx
lea cx, [bx-4] lea cx, [bx-5]
mov bx, [(lab bx).prev] mov bx, [(lab bx).prev]
sub cx, bx sub cx, bx
cmp cx, dx cmp cx, dx
jne sflab1 jne flab1
lea si, [(lab bx).nam] lea si, [(lab bx).nam]
mov di, offset tlabel mov di, offset tlabel
repe cmpsb repe cmpsb
jne sflab1 jne flab1
clc clc
sflabn: pop si flabx: pop si
ret ret
getval: call spaces wropar: error e_wpar
spaval: call spaces
; Czyta wyrazenie i zwraca jego wartosc w [val] ; Czyta wyrazenie i zwraca jego wartosc w [val]
; (C=1 wartosc nieokreslona w pass 1) ; (C=1 wartosc nieokreslona w pass 1)
value: mov [val], 0 getval: xor bx, bx
mov [ukp1], 0 mov [ukp1], bh
lodsb push bx
v_lop:
v_par1: inc bh
call get
cmp al, '['
je v_par1
cmp al, '('
je wropar
cmp al, '-' cmp al, '-'
je valuem je valuem
dec si dec si
mov al, '+' mov al, '+'
valuem: mov bl, al
valuem: mov [oper], al xor eax, eax
call get call get
cmp al, '*' cmp al, '*'
je valorg je valorg
xor dx, dx
cmp al, "'" cmp al, "'"
je valchr je valchr
cmp al, '^' cmp al, '^'
je valreg je valreg
mov ch, -1 mov bp, -1
mov bx, 16 xor edx, edx
mov ecx, 16
cmp al, '$' cmp al, '$'
je rdnum3 je rdnum3
mov bl, 2 mov cl, 2
cmp al, '%' cmp al, '%'
je rdnum3 je rdnum3
mov bl, 10 mov cl, 10
cmp al, '0' cmp al, '0'
jb ilchar jb ilchar
cmp al, '9' cmp al, '9'
@@ -590,27 +628,39 @@ rdnum1: cmp al, '9'
jb value0 jb value0
add al, '0'+10-'A' add al, '0'+10-'A'
rdnum2: sub al, '0' rdnum2: sub al, '0'
cmp al, bl cmp al, cl
jnb value0 jnb value0
movzx cx, al movzx ebp, al
mov ax, dx lda edx
mul bx mul ecx
add ax, cx add eax, ebp
adc dx, dx js toobig
adc edx, edx
jnz toobig jnz toobig
sta dx sta edx
rdnum3: lodsb rdnum3: lodsb
jmp rdnum1 jmp rdnum1
vlabel: dec si vlabel: push bx
call rlabel dec si
jnc vlabkn call flabel
jpass1 vlabun jnc vlabfn
jmp unknow jpass1 vlukp1
vlabkn: mov dx, [(lab bx).val] error e_undec
cmp bx, [pslaben] vlabfn: test [(lab bx).flags], m_ukp1
jbe value1 jz vlabkn
vlabun: mov [ukp1], 0ffh jpass1 vlukp1
cmp bx, [pslab]
jb vlukp1
error e_fref
vlukp1: mov [ukp1], 0ffh
vlabkn: bt [word (lab bx).flags], b_sign
sbb eax, eax
mov ax, [(lab bx).val]
pop bx
jmp value1
valorg: mov ax, [origin]
jmp value1 jmp value1
valchr: call get valchr: call get
@@ -619,14 +669,13 @@ valchr: call get
lodsb lodsb
cmp al, "'" cmp al, "'"
jne strer jne strer
valch1: mov dl, al valch1: cmp [byte si], "'"
lodsb
cmp al, "'"
jne strer jne strer
inc si
cmp [byte si], '*' cmp [byte si], '*'
jne value1 jne value1
inc si inc si
xor dl, 80h xor al, 80h
jmp value1 jmp value1
valreg: call get valreg: call get
@@ -647,49 +696,205 @@ valre1: sub al, '0'
cmp al, 0fh cmp al, 0fh
ja ilchar ja ilchar
cmp ah, 0d1h cmp ah, 0d1h
jne valre2 jne value1
sub ax, 0f0h sub ax, 0f0h
valre2: sta dx valre2: jmp value1
jmp value1
valorg: mov dx, [origin]
jmp value1
value0: dec si value0: dec si
test ch, ch test bp, bp
jnz ilchar js ilchar
value1: cmp [oper], '-' lda edx
value1: cmp bl, '-'
jne value2 jne value2
neg dx neg eax
value2: add [val], dx value2: push eax
v_par2: dec bh
js mbrack
lodsb lodsb
cmp al, '+' cmp al, ']'
je valuem je v_par2
cmp al, '-'
je valuem mov ah, [si]
mov di, offset opert2
mov cx, noper2
repne scasw
je foper2
mov cx, noper1
repne scasb
je foper1
test bh, bh
jnz mbrack
dec si dec si
mov al, 1 mov di, offset opert1
cmp al, [ukp1] foper1: sub di, offset opert1
jmp goper
foper2: inc si
sub di, offset opert2
shr di, 1
add di, noper1
goper: lea ax, [di+operpa]
add di, di
add di, ax
mov bl, [di]
mov bp, [di+1]
pop eax
v_com: pop cx
cmp cx, bx
jb v_xcm
pop ecx
xchg eax, ecx
pop dx
push offset v_com
push dx
ret
v_xcm: cmp bl, 1
jbe v_xit
push cx bp eax bx
jmp v_lop
v_xit: mov [dword val], eax
cmp [ukp1], 1
cmc
jc v_ret
cmp eax, 10000h
cmc
jnb v_ret
cmp eax, -0ffffh
jb orange
ret ret
brange: cmp eax, 100h
jb v_ret
cmp eax, -0ffh
jb orange
ret
spauns: call spaces
getuns: call getval
jc v_ret
test eax, eax
jns v_ret
orange: error e_range
mbrack: error e_brack
toobig: error e_nbig toobig: error e_nbig
v_add: add eax, ecx
jmp v_cov
v_sub: sub eax, ecx
v_cov: jno v_ret
oflow: error e_over
div0: error e_div0
v_mul: mov edx, ecx
xor ecx, eax
imul edx
test ecx, ecx
js v_mu1
test edx, edx
jnz oflow
test eax, eax
js oflow
ret
v_mu1: inc edx
jnz oflow
test eax, eax
jns oflow
ret
v_div: jecxz div0
cdq
idiv ecx
ret
v_mod: jecxz div0
cdq
idiv ecx
sta edx
v_ret: ret
v_sln: neg ecx
v_sal: test ecx, ecx
js v_srn
jz v_ret
cmp ecx, 20h
jb v_sl1
test eax, eax
jnz oflow
ret
v_sl1: add eax, eax
jo oflow
loop v_sl1
ret
v_srn: neg ecx
v_sar: test ecx, ecx
js v_sln
cmp ecx, 20h
jb v_sr1
mov cl, 1fh
v_sr1: sar eax, cl
ret
v_and: and eax, ecx
ret
v_or: or eax, ecx
ret
v_xor: xor eax, ecx
ret
v_equ: cmp eax, ecx
je v_one
v_zer: xor eax, eax
ret
v_one: mov eax, 1
ret
v_neq: cmp eax, ecx
jne v_one
jmp v_zer
v_les: cmp eax, ecx
jl v_one
jmp v_zer
v_grt: cmp eax, ecx
jg v_one
jmp v_zer
v_leq: cmp eax, ecx
jle v_one
jmp v_zer
v_geq: cmp eax, ecx
jge v_one
jmp v_zer
v_anl: jecxz v_zer
test eax, eax
jz v_ret
jmp v_one
v_orl: or eax, ecx
jz v_ret
jmp v_one
; Pobiera operand rozkazu i rozpoznaje tryb adresowania ; Pobiera operand rozkazu i rozpoznaje tryb adresowania
getadr: call spaces getadr: call spaces
lodsb lodsb
xor dx, dx xor dx, dx
cmp al, '@' cmp al, '@'
je getadx je getadx
inc dx
cmp al, '#' cmp al, '#'
je getad1 je getaim
mov dl, 4
cmp al, '<' cmp al, '<'
je getad1 je getaim
inc dx
cmp al, '>' cmp al, '>'
je getad1 je getaim
mov dl, 8 mov dl, 8
cmp al, '(' cmp al, '('
je getad1 je getad1
@@ -707,18 +912,15 @@ getadr: call spaces
xor dx, dx xor dx, dx
getad1: push dx getad1: push dx
call value call getuns
sbb al, al sbb al, al
jnz getad2 jnz getad2
mov al, [byte high val] mov al, [byte high val]
getad2: pop dx getad2: pop dx
cmp dl, 8 cmp dl, 8
jae getaid jae getaid
cmp dl, 4 cmp dl, 2
jae getalh jae getad3
cmp dl, 1
je getadx
ja getad3
cmp al, 1 cmp al, 1
adc dl, 2 adc dl, 2
getad3: lodsw getad3: lodsw
@@ -746,19 +948,23 @@ getadx: lda dx
mov [word amod], ax mov [word amod], ax
ret ret
getalh: mov bx, offset val getaim: cmp al, '<'
je getal1 pushf
inc bx call getval
getal1: movzx ax, [bx] popf
mov [val], ax jb getai2
mov dl, 1 je getai1
mov al, ah
getai1: movzx eax, al
mov [dword val], eax
getai2: mov dx, 1
jmp getadx jmp getadx
getaid: lodsb getaid: lodsb
cmp al, ',' cmp al, ','
je getaix je getaix
cmp al, ')' cmp al, ')'
jne mbrack jne mparen
lodsw lodsw
mov dx, 709h mov dx, 709h
cmp ax, '0,' cmp ax, '0,'
@@ -875,11 +1081,10 @@ putcmd: call savbyt
xlat xlat
cmp al, 2 cmp al, 2
jb putret jb putret
mov ax, [val] mov eax, [dword val]
jne savwor jne savwor
jpass1 putcm1 jpass1 putcm1
test ah, ah call brange
jnz toobig
putcm1: jmp savbyt putcm1: jmp savbyt
p_sti: call getadr p_sti: call getadr
@@ -931,7 +1136,7 @@ toofar: cmp ax, 8080h
sub ax, 0ffh sub ax, 0ffh
neg ax neg ax
toofa1: neg ax toofa1: neg ax
mov di, offset brange mov di, offset brout
call phword call phword
error e_bra error e_bra
@@ -996,13 +1201,13 @@ getops: call getadr
movzx bx, [cod] movzx bx, [cod]
add bx, offset movtab add bx, offset movtab
ldop1: mov si, offset op1 ldop1: mov si, offset op1
ldop: lodsw ldop: lodsd
mov [val], ax mov [dword val], eax
lodsw lodsw
mov [word amod], ax mov [word amod], ax
ret ret
stop: mov ax, [val] stop: mov eax, [dword val]
stosw stosd
mov ax, [word amod] mov ax, [word amod]
stosw stosw
ret ret
@@ -1036,6 +1241,7 @@ p_mws: call getops
cmp al, 1 cmp al, 1
jne p_mw1 jne p_mw1
mov [byte high val], 0 mov [byte high val], 0
mov [word val+2], 0
p_mw1: call mcall1 p_mw1: call mcall1
mov si, offset op2 mov si, offset op2
call ldop call ldop
@@ -1047,12 +1253,12 @@ p_mw1: call mcall1
je p_mwi je p_mwi
inc [val] inc [val]
jmp p_mw2 jmp p_mw2
p_mwi: movzx ax, [byte high val] p_mwi: movzx eax, [byte high val]
cmp [ukp1], ah ;0 cmp [ukp1], ah ;0
jnz p_mwh jnz p_mwh
cmp al, [byte val] cmp al, [byte val]
je p_mw3 je p_mw3
p_mwh: mov [val], ax p_mwh: mov [dword val], eax
p_mw2: call mcall1 p_mw2: call mcall1
p_mw3: mov si, offset op2 p_mw3: mov si, offset op2
call ldop call ldop
@@ -1061,26 +1267,30 @@ p_mw3: mov si, offset op2
p_opt: error e_opt p_opt: error e_opt
p_ert: call spaval
jpass1 equret
test eax, eax
jz equret
error e_user
p_equ: mov di, [labvec] p_equ: mov di, [labvec]
cmp di, 1 test di, di
jb nolabl jz nolabl
je equret mov [(lab di).val], 0
mov [word di], 0 and [(lab di).flags], not m_sign
call getval call spaval
mov di, [labvec] mov di, [labvec]
jnc equ1 jnc equ1
jpass1 lbund or [(lab di).flags], m_ukp1
equ1: mov ax, [val] equ1: mov [(lab di).val], ax
stosw test eax, eax
jns equret
or [(lab di).flags], m_sign
equret: ret equret: ret
lbund: lea ax, [di-2]
mov [laben], ax
ret
nolabl: error e_label nolabl: error e_label
p_org: call getval p_org: call spauns
jc unknow jc unknow
p_org1: jpass2 org1 p_org1: jpass2 org1
call putorg call putorg
@@ -1111,11 +1321,11 @@ tmorgs: error e_orgs
p_rui: mov ah, 2 p_rui: mov ah, 2
mov [val], ax mov [val], ax
call p_org1 call p_org1
call getval call spauns
mov ax, [val] mov ax, [val]
jmp savwor jmp savwor
valuco: call value valuco: call getval
jc unknow jc unknow
call get call get
cmp al, ',' cmp al, ','
@@ -1144,7 +1354,7 @@ dta1: call get
dtan1: lodsb dtan1: lodsb
cmp al, '(' cmp al, '('
jne mbrack jne mparen
dtan2: lodsd dtan2: lodsd
and eax, 0ffdfdfdfh and eax, 0ffdfdfdfh
@@ -1154,11 +1364,10 @@ dtan2: lodsd
mov [sinadd], ax mov [sinadd], ax
call valuco call valuco
mov [sinamp], ax mov [sinamp], ax
call value call getuns
jc unknow jc unknow
mov ax, [val] mov ax, [val]
test ax, ax test ax, ax
js badsin
jz badsin jz badsin
mov [sinsiz], ax mov [sinsiz], ax
mov [sinmin], 0 mov [sinmin], 0
@@ -1170,20 +1379,18 @@ dtan2: lodsd
cmp al, ',' cmp al, ','
jne badsin jne badsin
call valuco call valuco
test ax, ax test eax, eax
js badsin js badsin
mov [sinmin], ax mov [sinmin], ax
call value call getuns
jc unknow jc unknow
mov ax, [val] mov ax, [val]
test ax, ax
js badsin
cmp ax, [sinmin] cmp ax, [sinmin]
jb badsin jb badsin
mov [sinmax], ax mov [sinmax], ax
lodsb lodsb
cmp al, ')' cmp al, ')'
jne mbrack jne mparen
presin: finit presin: finit
fldpi fldpi
fld st fld st
@@ -1200,7 +1407,7 @@ gensin: fild [sinmin]
jmp dtasto jmp dtasto
dtansi: sub si, 4 dtansi: sub si, 4
call value call getval
dtasto: jpass1 dtan3 dtasto: jpass1 dtan3
mov al, [cod] mov al, [cod]
cmp al, 'B' cmp al, 'B'
@@ -1213,10 +1420,9 @@ dtasto: jpass1 dtan3
call savwor call savwor
jmp dtanx jmp dtanx
dtanb: mov ax, [val] dtanb: mov eax, [dword val]
test ah, ah call brange
jz dtans jmp dtans
jmp toobig
dtanl: mov al, [byte low val] dtanl: mov al, [byte low val]
jmp dtans jmp dtans
@@ -1238,7 +1444,7 @@ dtanx: mov ax, [sinmin]
cmp al, ')' cmp al, ')'
je dtanxt je dtanxt
mbrack: error e_brack mparen: error e_paren
unknow: error e_uknow unknow: error e_uknow
@@ -1348,6 +1554,7 @@ comtab: cmd ADC60p_acc
cmd END00p_end cmd END00p_end
cmd EOR40p_acc cmd EOR40p_acc
cmd EQU00p_equ cmd EQU00p_equ
cmd ERT00p_ert
cmd ICL00p_icl cmd ICL00p_icl
cmd INCe0p_srt cmd INCe0p_srt
cmd INIe2p_rui cmd INIe2p_rui
@@ -1404,7 +1611,33 @@ comtab: cmd ADC60p_acc
cmd TYA98p_imp cmd TYA98p_imp
comend: comend:
hello db 'X-Assembler 1.5 by Fox/Taquart',eot operpa: opr 1ret
opr 5add
opr 5sub
opr 6mul
opr 6div
opr 6mod
opr 6and
opr 5or
opr 5xor
opr 4equ
opr 4les
opr 4grt
opr 6sal
opr 6sar
opr 4leq
opr 4geq
opr 4neq
opr 4neq
opr 3anl
opr 2orl
opert2 db '<<>><=>=<>!=&&||'
noper2 = ($-opert2)/2
opert1 db '+-*/%&|^=<>'
noper1 = $-opert1
hello db 'X-Assembler 1.6 by Fox/Taquart',eot
usgtxt db 'Give a source filename. Default extension is .ASX.',eol usgtxt db 'Give a source filename. Default extension is .ASX.',eol
db 'Object file will be written with .COM extension.',eot db 'Object file will be written with .COM extension.',eot
lintxt db ' lines assembled',eot lintxt db ' lines assembled',eot
@@ -1425,28 +1658,35 @@ e_char db 'Illegal character',eol
e_twice db 'Label declared twice',eol e_twice db 'Label declared twice',eol
e_inst db 'Illegal instruction',eol e_inst db 'Illegal instruction',eol
e_nbig db 'Number too big',eol e_nbig db 'Number too big',eol
e_uknow db 'Unknown value',eol
e_xtra db 'Extra characters on line',eol e_xtra db 'Extra characters on line',eol
e_label db 'Label name required',eol e_label db 'Label name required',eol
e_str db 'String error',eol e_str db 'String error',eol
e_orgs db 'Too many ORGs',eol e_orgs db 'Too many ORGs',eol
e_brack db 'Need parenthesis',eol e_paren db 'Need parenthesis',eol
e_tlab db 'Too many labels',eol e_tlab db 'Too many labels',eol
e_amod db 'Illegal adressing mode',eol e_amod db 'Illegal addressing mode',eol
e_bra db 'Branch out of range by $' e_bra db 'Branch out of range by $'
brange db ' bytes',eol brout db ' bytes',eol
e_sin db 'Bad or missing sinus parameter',eol e_sin db 'Bad or missing sinus parameter',eol
e_spac db 'Space expected',eol e_spac db 'Space expected',eol
e_opt db 'OPT directive not supported',eol e_opt db 'OPT directive not supported',eol
e_over db 'Arithmetic overflow',eol
e_div0 db 'Divide by zero',eol
e_range db 'Value out of range',eol
e_uknow db 'Label not defined before',eol
e_undec db 'Undeclared label',eol
e_fref db 'Illegal forward reference',eol
e_wpar db 'Use square brackets instead',eol
e_brack db 'Not matching brackets',eol
e_user db 'User error',eol
exitcod dw 4c00h exitcod dw 4c00h
flags db 0 flags db 0
lines dd 0 lines dd 0
bytes dd 0 bytes dd 0
iclen dw t_icl iclen dw t_icl
laben dw t_lab laben dw t_lab-2
p1laben dw 0 pslab dw t_lab-2
pslaben dw -1
orgvec dw t_org orgvec dw t_org
sinmin dw 1 sinmin dw 1
sinmax dw 0 sinmax dw 0
@@ -1454,7 +1694,7 @@ sinadd dw ?
sinamp dw ? sinamp dw ?
sinsiz dw ? sinsiz dw ?
ohand dw ? ohand dw ?
val dw ? val dw ?,?
amod db ?,? amod db ?,?
ukp1 db ?,? ukp1 db ?,?
oper db ? oper db ?
@@ -1463,14 +1703,16 @@ origin dw ?
labvec dw ? labvec dw ?
fnad dw ? fnad dw ?
tempsi dw ? tempsi dw ?
op1 dw ?,? op1 dd ?
op2 dw ?,? dw ?
op2 dd ?
dw ?
line db 258 dup(?) line db 258 dup(?)
tlabel db 256 dup(?) tlabel db 256 dup(?)
t_icl db l_icl dup(?) t_icl db l_icl dup(?)
t_org db l_org dup(?) t_org db l_org dup(?)
t_lab db l_lab+4 dup(?) t_lab db l_lab dup(?)
ENDS ENDS
END start END start