1
0
mirror of https://github.com/pfusik/xasm.git synced 2024-06-07 11:29:32 +00:00

X-Assembler 1.5.

This commit is contained in:
Piotr Fusik 1998-09-06 18:05:14 +02:00
parent ed65c4f163
commit 8acc5c528f

567
xasm.asm
View File

@ -31,42 +31,68 @@ val dw ?
nam db ? nam db ?
ENDS ENDS
STRUC movt
cod db ?
vec dw ?
ENDS
m_pass = 80h
m_eofl = 40h
eol equ 13,10 eol equ 13,10
eot equ 13,10,'$' eot equ 13,10,'$'
MACRO lda _rg
xchg ax, _rg ;shorter than 'mov ax, _rg'
ENDM
MACRO sta _rg MACRO sta _rg
xchg _rg, ax ;shorter than 'mov _rg, ax' xchg _rg, ax ;shorter than 'mov _rg, ax'
ENDM ENDM
MACRO dos _func MACRO dos _func
IFNB <_func> IFNB <_func>
IF _func and 0ff00h IF _func and 0ff00h
mov ax, _func mov ax, _func
ELSE ELSE
mov ah, _func mov ah, _func
ENDIF ENDIF
ENDIF ENDIF
int 21h int 21h
ENDM ENDM
MACRO file _func, _errtx MACRO file _func, _errtx
mov bp, offset _errtx mov bp, offset _errtx
IF _func and 0ff00h IF _func and 0ff00h
mov ax, _func mov ax, _func
ELSE ELSE
mov ah, _func mov ah, _func
ENDIF ENDIF
call xdisk call xdisk
ENDM ENDM
MACRO print _text MACRO print _text
IFNB <_text> IFNB <_text>
mov dx, offset _text mov dx, offset _text
ENDIF ENDIF
dos 9 dos 9
ENDM ENDM
MACRO error _err
push offset _err
jmp errln
ENDM
MACRO jpass1 _dest
test [flags], m_pass
jz _dest
ENDM
MACRO jpass2 _dest
test [flags], m_pass
jnz _dest
ENDM
MACRO cmd _oper MACRO cmd _oper
_tp SUBSTR <_oper>, 4, 2 _tp SUBSTR <_oper>, 4, 2
_tp CATSTR <0>, &_tp, <h> _tp CATSTR <0>, &_tp, <h>
@ -116,7 +142,7 @@ adex2: mov [byte di-1], '.'
stosd stosd
lvex2: call fopen lvex2: call fopen
main: test [eoflag], 0ffh main: test [flags], m_eofl
jnz filend jnz filend
mov bx, [iclen] mov bx, [iclen]
mov bx, [(icl bx).prev] mov bx, [(icl bx).prev]
@ -136,7 +162,7 @@ gline1: cmp di, offset line+255
jne gline1 jne gline1
jmp syntax jmp syntax
eof: inc [eoflag] eof: or [flags], m_eofl
mov [word di], 0a0dh mov [word di], 0a0dh
syntax: mov si, offset line syntax: mov si, offset line
@ -161,8 +187,7 @@ syntax: mov si, offset line
mov [pslaben], bx mov [pslaben], bx
inc [labvec] ;1 inc [labvec] ;1
jmp s_cmd jmp s_cmd
ltwice: mov ax, offset e_twice ltwice: error e_twice
jmp panica
asilab: push si asilab: push si
mov si, offset tlabel mov si, offset tlabel
mov di, [laben] mov di, [laben]
@ -220,17 +245,15 @@ sfcmd3: shr bx, 1
ja sfcmd1 ja sfcmd1
mov bl, 0 mov bl, 0
je sfcmd1 je sfcmd1
mov ax, offset e_inst error e_inst
jmp panica
filend: mov [eoflag], 0 filend: and [flags], not m_eofl
call fclose call fclose
cmp bx, offset t_icl cmp bx, offset t_icl
ja main ja main
cmp [pass], 1 jpass2 fin
jnb fin
inc [pass] or [flags], m_pass
call putorg call putorg
call ldname call ldname
mov si, di mov si, di
@ -268,50 +291,73 @@ fin: mov bx, [ohand]
mov eax, [bytes] mov eax, [bytes]
call pridec call pridec
print byttxt print byttxt
dos 4c00h mov ax, [exitcod]
dos
tmlab: mov ax, offset e_tlab tmlab: error e_tlab
jmp panica
linlon: mov ax, offset e_long linlon: push offset e_long
; Obsluga bledow jmp erron
panica: mov [errad], ax
panic: cmp [errad], offset lislin ; ERROR
jb panifn errln: call ppline
mov si, offset line-1 erron: call prname
prilin: inc si print errtxt
mov dl, [si] pop si
dos 2 call prline
cmp [byte si], 0ah dos 4c02h
jne prilin
panifn: mov bx, [iclen] ; WARNING
warln: call ppline
waron: call prname
print wartxt
pop ax
pop si
push ax
mov [byte exitcod], 1
jmp prline
prname: mov bx, [iclen]
cmp bx, offset t_icl cmp bx, offset t_icl
jna eronly jna prnamx
mov di, [(icl bx).prev] mov di, [(icl bx).prev]
push di push di
lea dx, [(icl di).nam] lea dx, [(icl di).nam]
mov [byte bx-1], ' ' mov [byte bx-1], '$'
mov [word bx], '$('
print print
mov dl, ' '
dos 2
mov dl, '('
dos 2
pop bx pop bx
mov eax, [(icl bx).line] mov eax, [(icl bx).line]
call pridec call pridec
mov dl, ')' mov dl, ')'
dos 2 dos 2
eronly: print errtxt mov dl, ' '
mov dx, [errad] dos 2
print prnamx: ret
dos 4c02h
; I/O ppline: mov si, offset line
xdisk: mov [errad], bp prline: mov dl, [si]
dos dos 2
jc panic inc si
cmp [byte si-1], 0ah
jne prline
ret ret
fopen: mov ax, offset e_icl ; I/O
cmp di, offset t_icl+l_icl-2 xdisk: push bp
jnb panica dos
jc erron
pop bp
ret
icler: push offset e_icl
jmp erron
fopen: cmp di, offset t_icl+l_icl-2
jnb icler
mov bx, [iclen] mov bx, [iclen]
mov [(icl bx).line], 0 mov [(icl bx).line], 0
lea dx, [(icl bx).nam] lea dx, [(icl bx).nam]
@ -344,8 +390,7 @@ putwor: push ax
pop ax pop ax
mov al, ah mov al, ah
putbyt: mov cx, 1 putbyt: mov cx, 1
cmp [pass], cl jpass1 putx
jb putx
mov [oper], al mov [oper], al
mov dx, offset oper mov dx, offset oper
mov bx, [ohand] mov bx, [ohand]
@ -384,16 +429,30 @@ pride1: cdq
print print
ret ret
; Zapisuje hex AX od [DI]
phword: push ax
mov al, ah
call phbyte
pop ax
phbyte: push ax
shr al, 4
call phdig
pop ax
and al, 0fh
phdig: cmp al, 10
sbb al, 69h
das
stosb
ret
; Pobiera znak (eol=error) ; Pobiera znak (eol=error)
get: lodsb get: lodsb
cmp al, 0dh cmp al, 0dh
je uneol je uneol
ret ret
uneol: mov ax, offset e_uneol uneol: error e_uneol
jmp panica
ilchar: mov ax, offset e_char ilchar: error e_char
jmp panica
; Omija spacje i tabulatory ; Omija spacje i tabulatory
spaces: call get spaces: call get
@ -401,8 +460,7 @@ spaces: call get
je space1 je space1
cmp al, 9 cmp al, 9
je space1 je space1
mov ax, offset e_spac error e_spac
jmp panica
space1: call get space1: call get
cmp al, ' ' cmp al, ' '
je space1 je space1
@ -419,8 +477,7 @@ linend: lodsb
je rstret je rstret
cmp al, 9 cmp al, 9
je rstret je rstret
mov ax, offset e_xtra error e_xtra
jmp panica
; Czyta nazwe pliku ; Czyta nazwe pliku
rfname: call spaces rfname: call spaces
@ -444,8 +501,7 @@ rstr1: call get
sub cx, dx sub cx, dx
jnz rstret jnz rstret
strer: mov ax, offset e_str strer: error e_str
jmp panica
; Przepisuje etykiete do tlabel, szuka w t_lab ; Przepisuje etykiete do tlabel, szuka w t_lab
; na wyjsciu: dx-dlugosc etykiety ; na wyjsciu: dx-dlugosc etykiety
@ -498,7 +554,7 @@ getval: 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 value: mov [val], 0
mov [undef], 0 mov [ukp1], 0
lodsb lodsb
cmp al, '-' cmp al, '-'
je valuem je valuem
@ -506,15 +562,15 @@ value: mov [val], 0
mov al, '+' mov al, '+'
valuem: mov [oper], al valuem: mov [oper], al
xor dx, dx
mov ch, -1
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 bx, 16 mov bx, 16
cmp al, '$' cmp al, '$'
je rdnum3 je rdnum3
@ -527,8 +583,8 @@ valuem: mov [oper], al
cmp al, '9' cmp al, '9'
ja vlabel ja vlabel
rdnum1: cmp al, 'A' rdnum1: cmp al, '9'
jb rdnum2 jbe rdnum2
and al, 0dfh and al, 0dfh
cmp al, 'A' cmp al, 'A'
jb value0 jb value0
@ -549,13 +605,12 @@ rdnum3: lodsb
vlabel: dec si vlabel: dec si
call rlabel call rlabel
jnc vlabkn jnc vlabkn
cmp [pass], 1 jpass1 vlabun
jb vlabun
jmp unknow jmp unknow
vlabkn: mov dx, [(lab bx).val] vlabkn: mov dx, [(lab bx).val]
cmp bx, [pslaben] cmp bx, [pslaben]
jbe value1 jbe value1
vlabun: mov [undef], 0ffh vlabun: mov [ukp1], 0ffh
jmp value1 jmp value1
valchr: call get valchr: call get
@ -564,7 +619,7 @@ valchr: call get
lodsb lodsb
cmp al, "'" cmp al, "'"
jne strer jne strer
valch1: movzx dx, al valch1: mov dl, al
lodsb lodsb
cmp al, "'" cmp al, "'"
jne strer jne strer
@ -582,11 +637,11 @@ valreg: call get
add al, 0d0h add al, 0d0h
mov ah, al mov ah, al
call get call get
cmp al, 'A' cmp al, '9'
jb valre1 jbe valre1
and al, 0dfh and al, 0dfh
cmp al, 'A' cmp al, 'A'
jb valre1 jb ilchar
add al, '0'+10-'A' add al, '0'+10-'A'
valre1: sub al, '0' valre1: sub al, '0'
cmp al, 0fh cmp al, 0fh
@ -614,23 +669,22 @@ value2: add [val], dx
cmp al, '-' cmp al, '-'
je valuem je valuem
dec si dec si
add [undef], 1 mov al, 1
cmp al, [ukp1]
ret ret
toobig: mov ax, offset e_nbig toobig: error e_nbig
jmp panica
; Pobiera operand rozkazu i rozpoznaje tryb adresowania ; Pobiera operand rozkazu i rozpoznaje tryb adresowania
getadr: call spaces getadr: call spaces
lodsb lodsb
xor dl, dl xor dx, dx
cmp al, '@' cmp al, '@'
je getadx je getadx
push 0ffh
inc dx inc dx
cmp al, '#' cmp al, '#'
je getad1 je getad1
mov dl, 10 mov dl, 4
cmp al, '<' cmp al, '<'
je getad1 je getad1
inc dx inc dx
@ -642,45 +696,56 @@ getadr: call spaces
dec si dec si
lodsw lodsw
and al, 0dfh and al, 0dfh
xor dx, dx mov dl, 2
cmp ax, ':Z'
je getad0
dec dx
cmp ax, ':A' cmp ax, ':A'
je getad0 je getad1
inc dx
cmp ax, ':Z'
je getad1
dec si dec si
dec si dec si
jmp getad9 xor dx, dx
getad0: pop ax
push dx
getad9: mov dl, 2
getad1: mov [amod], dl getad1: push dx
call value call value
mov al, [byte high val]
jnc getad2
sbb al, al sbb al, al
jnz getad2
mov al, [byte high val]
getad2: pop dx getad2: pop dx
and al, dl
or al, dh
mov dl, [amod]
cmp dl, 1
je getart
cmp dl, 10
jnb getalh
cmp dl, 8 cmp dl, 8
je getaid jae getaid
cmp dl, 4
jae getalh
cmp dl, 1
je getadx
ja getad3
cmp al, 1 cmp al, 1
adc dl, 0 adc dl, 2
lodsw getad3: lodsw
and ah, 0dfh and ah, 0dfh
mov bl, 2
cmp ax, 'X,' cmp ax, 'X,'
je getaxi je getabi
mov bl, 4
cmp ax, 'Y,' cmp ax, 'Y,'
je getayi je getabi
dec si dec si
dec si dec si
jmp getadx jmp getadx
getabi: add dl, bl
getaxt: lodsb
cmp al, '+'
je getabx
inc bx
cmp al, '-'
je getabx
dec si
jmp getadx
getabx: mov dh, bl
getadx: lda dx
mov [word amod], ax
ret
getalh: mov bx, offset val getalh: mov bx, offset val
je getal1 je getal1
inc bx inc bx
@ -688,31 +753,34 @@ getal1: movzx ax, [bx]
mov [val], ax mov [val], ax
mov dl, 1 mov dl, 1
jmp getadx jmp getadx
getaid: lodsb getaid: lodsb
cmp al, ',' cmp al, ','
je getaix je getaix
cmp al, ')' cmp al, ')'
jne mbrack jne mbrack
lodsw lodsw
mov dx, 709h
cmp ax, '0,'
je getadx
xor dh, dh
mov bl, 4
and ah, 0dfh and ah, 0dfh
cmp ax, 'Y,' cmp ax, 'Y,'
je getaiy je getaxt
mov dl, 10 inc dx
dec si dec si
dec si dec si
jmp getadx jmp getadx
getaix: lodsw getaix: lodsw
mov dh, 6
cmp ax, ')0'
je getadx
xor dh, dh
and al, 0dfh and al, 0dfh
cmp ax, ')X' cmp ax, ')X'
je getart je getadx
jmp ilchar jmp ilchar
getayi: inc dx
inc dx
getaxi: inc dx
getaiy: inc dx
getadx: mov [amod], dl
getart: mov al, [amod]
putret: ret
p_imp = savbyt p_imp = savbyt
@ -724,23 +792,28 @@ p_ads: call getadr
je p_as1 je p_as1
mov al, 0e0h mov al, 0e0h
p_as1: mov [cod], al p_as1: mov [cod], al
mov al, [amod]
jmp p_ac1 jmp p_ac1
p_acc: call getadr p_acc: call getadr
p_ac1: cmp al, 7 p_ac1: mov ax, [word amod]
cmp al, 7
jne acc1 jne acc1
dec ax dec [amod]
mov [amod], al acc1: cmp ah, 6
acc1: mov bx, offset acctab jb acc3
mov ax, 0a2h
je acc2
mov al, 0a0h
acc2: call savwor
acc3: mov al, [amod]
mov bx, offset acctab
xlat xlat
test al, al test al, al
jz ilamod jz ilamod
or al, [cod] or al, [cod]
cmp al, 89h cmp al, 89h
jne putcmd jne putsfx
ilamod: mov ax, offset e_amod ilamod: error e_amod
jmp panica
p_srt: call getadr p_srt: call getadr
cmp al, 6 cmp al, 6
@ -754,7 +827,13 @@ p_srt: call getadr
je ilamod je ilamod
cmp al, 0e0h cmp al, 0e0h
je ilamod je ilamod
jmp putcmd putsfx: call putcmd
mov al, [amod+1]
mov bx, offset sfxtab
xlat
test al, al
jnz savbyt
putret: ret
p_inw: call getadr p_inw: call getadr
cmp al, 6 cmp al, 6
@ -772,9 +851,10 @@ p_inw: call getadr
dec ah dec ah
p_iw1: call savwor p_iw1: call savwor
pop ax pop ax
jmp putcmd jmp putsfx
p_ldi: call getadr p_ldi: call getadr
p_ld1: mov al, [amod]
cmp al, 1 cmp al, 1
jb ilamod jb ilamod
cmp al, 4 cmp al, 4
@ -787,6 +867,8 @@ p_ldi: call getadr
ldi1: mov bx, offset lditab ldi1: mov bx, offset lditab
xlat xlat
putcod: or al, [cod] putcod: or al, [cod]
jmp putsfx
putcmd: call savbyt putcmd: call savbyt
mov al, [amod] mov al, [amod]
mov bx, offset lentab mov bx, offset lentab
@ -795,17 +877,17 @@ putcmd: call savbyt
jb putret jb putret
mov ax, [val] mov ax, [val]
jne savwor jne savwor
cmp [pass], 1 jpass1 putcm1
jb putcm1
test ah, ah test ah, ah
jnz toobig jnz toobig
putcm1: jmp savbyt putcm1: jmp savbyt
p_sti: call getadr p_sti: call getadr
p_st1: mov al, [amod]
cmp al, 2 cmp al, 2
jb ilamod jb ilamod
je cod8
cmp al, 3 cmp al, 3
jb cod8
je cod0 je cod0
and al, 0feh and al, 0feh
xor al, [cod] xor al, [cod]
@ -831,8 +913,7 @@ p_cpi: call getadr
jmp putcod jmp putcod
p_bra: call getadr p_bra: call getadr
cmp [pass], 1 jpass1 bra1
jb bra1
mov ax, [val] mov ax, [val]
sub ax, [origin] sub ax, [origin]
add ax, 7eh add ax, 7eh
@ -845,8 +926,14 @@ bra1: call savbyt
mov al, [byte val] mov al, [byte val]
jmp savbyt jmp savbyt
toofar: mov ax, offset e_bra toofar: cmp ax, 8080h
jmp panica jae toofa1
sub ax, 0ffh
neg ax
toofa1: neg ax
mov di, offset brange
call phword
error e_bra
p_jsr: call getadr p_jsr: call getadr
mov al, 20h mov al, 20h
@ -868,17 +955,111 @@ p_juc: call getadr
jmp p_jp1 jmp p_jp1
p_jmp: call getadr p_jmp: call getadr
p_jp1: mov al, 6ch p_jp1: cmp [amod], 10
cmp [amod], 10 je chkbug
je putcmd jpass1 p_jpu
mov al, 4ch cmp [cod], 4ch
je p_jpu
mov ax, [val]
sub ax, [origin]
add ax, 80h
test ah, ah
jnz p_jpu
push si
push offset w_bras
call warln
pop si
p_jpu: mov al, 4ch
p_abs: and [amod], 0feh p_abs: and [amod], 0feh
cmp [amod], 2 cmp [amod], 2
jne ilamod je p_jpp
jmp putcmd jmp ilamod
chkbug: jpass1 p_jid
cmp [byte val], 0ffh
jne p_jid
push si
push offset w_bugjp
call warln
pop si
p_jid: mov al, 6ch
p_jpp: jmp putcmd
p_opt: mov ax, offset e_opt getops: call getadr
jmp panica mov di, offset op1
call stop
push [word ukp1]
call getadr
pop [word ukp1]
mov [tempsi], si
mov di, offset op2
call stop
movzx bx, [cod]
add bx, offset movtab
ldop1: mov si, offset op1
ldop: lodsw
mov [val], ax
lodsw
mov [word amod], ax
ret
stop: mov ax, [val]
stosw
mov ax, [word amod]
stosw
ret
mcall1: mov al, [(movt bx).cod]
mov [cod], al
push bx
call [(movt bx).vec]
pop bx
ret
mcall2: mov al, [(movt bx+3).cod]
mov [cod], al
push bx
call [(movt bx+3).vec]
pop bx
ret
p_mvs: call getops
call mcall1
mov si, offset op2
call ldop
p_mvx: call mcall2
mov si, [tempsi]
ret
p_mws: call getops
mov ax, [word amod]
cmp ax, 8
jae ilamod
cmp al, 1
jne p_mw1
mov [byte high val], 0
p_mw1: call mcall1
mov si, offset op2
call ldop
cmp [word amod], 8
jae ilamod
call mcall2
call ldop1
cmp [amod], 1
je p_mwi
inc [val]
jmp p_mw2
p_mwi: movzx ax, [byte high val]
cmp [ukp1], ah ;0
jnz p_mwh
cmp al, [byte val]
je p_mw3
p_mwh: mov [val], ax
p_mw2: call mcall1
p_mw3: mov si, offset op2
call ldop
inc [val]
jmp p_mvx
p_opt: error e_opt
p_equ: mov di, [labvec] p_equ: mov di, [labvec]
cmp di, 1 cmp di, 1
@ -888,8 +1069,7 @@ p_equ: mov di, [labvec]
call getval call getval
mov di, [labvec] mov di, [labvec]
jnc equ1 jnc equ1
cmp [pass], 1 jpass1 lbund
jb lbund
equ1: mov ax, [val] equ1: mov ax, [val]
stosw stosw
equret: ret equret: ret
@ -898,13 +1078,11 @@ lbund: lea ax, [di-2]
mov [laben], ax mov [laben], ax
ret ret
nolabl: mov ax, offset e_label nolabl: error e_label
jmp panica
p_org: call getval p_org: call getval
jc unknow jc unknow
p_org1: cmp [pass], 1 p_org1: jpass2 org1
jnb org1
call putorg call putorg
stc stc
org1: mov ax, [val] org1: mov ax, [val]
@ -928,8 +1106,7 @@ putorg: mov bx, [orgvec]
mov [bx], ax mov [bx], ax
ret ret
tmorgs: mov ax, offset e_orgs tmorgs: error e_orgs
jmp panica
p_rui: mov ah, 2 p_rui: mov ah, 2
mov [val], ax mov [val], ax
@ -945,8 +1122,7 @@ valuco: call value
jne badsin jne badsin
mov ax, [val] mov ax, [val]
ret ret
badsin: mov ax, offset e_sin badsin: error e_sin
jmp panica
p_dta: call spaces p_dta: call spaces
dta1: call get dta1: call get
@ -1014,19 +1190,18 @@ presin: finit
faddp st(1), st faddp st(1), st
fidiv [sinsiz] fidiv [sinsiz]
gensin: fild [sinmin] gensin: fild [sinmin]
inc [sinmin]
fmul st, st(1) fmul st, st(1)
fsin fsin
fimul [sinamp] fimul [sinamp]
fistp [val] fistp [val]
inc [sinmin]
mov ax, [sinadd] mov ax, [sinadd]
add [val], ax add [val], ax
jmp dtasto jmp dtasto
dtansi: sub si, 4 dtansi: sub si, 4
call value call value
dtasto: cmp [pass], 1 dtasto: jpass1 dtan3
jb dtan3
mov al, [cod] mov al, [cod]
cmp al, 'B' cmp al, 'B'
je dtanb je dtanb
@ -1063,11 +1238,9 @@ dtanx: mov ax, [sinmin]
cmp al, ')' cmp al, ')'
je dtanxt je dtanxt
mbrack: mov ax, offset e_brack mbrack: error e_brack
jmp panica
unknow: mov ax, offset e_uknow unknow: error e_uknow
jmp panica
dtat1: mov di, offset tlabel dtat1: mov di, offset tlabel
call rstr call rstr
@ -1118,8 +1291,7 @@ p_in1: mov cx, 256
mov bx, [iclen] mov bx, [iclen]
mov bx, [(icl bx).prev] mov bx, [(icl bx).prev]
add [(icl bx).line], eax add [(icl bx).line], eax
cmp [pass], 1 jpass1 p_in1
jb p_in1
add [bytes], eax add [bytes], eax
sta cx sta cx
mov bx, [ohand] mov bx, [ohand]
@ -1141,6 +1313,12 @@ acctab db 0,9,0dh,5,1dh,15h,19h,19h,1,11h,0
srttab db 0ah,0,0eh,6,1eh,16h srttab db 0ah,0,0eh,6,1eh,16h
lditab db 0,0,0ch,4,1ch,14h,1ch,14h lditab db 0,0,0ch,4,1ch,14h,1ch,14h
inwtab db 0eeh,0e6h,0feh,0f6h inwtab db 0eeh,0e6h,0feh,0f6h
; pseudo-adr modes: 2-X+ 3-X- 4-Y+ 5-Y- 6-,0) 7-),0
sfxtab db 0,0,0e8h,0cah,0c8h,088h,0,0
movtab movt <0a0h,p_ac1>,<080h,p_ac1>
movt <0a2h,p_ld1>,<086h,p_st1>
movt <0a0h,p_ld1>,<084h,p_st1>
comtab: cmd ADC60p_acc comtab: cmd ADC60p_acc
cmd ADD18p_ads cmd ADD18p_ads
@ -1191,6 +1369,12 @@ comtab: cmd ADC60p_acc
cmd LDXa2p_ldi cmd LDXa2p_ldi
cmd LDYa0p_ldi cmd LDYa0p_ldi
cmd LSR40p_srt cmd LSR40p_srt
cmd MVA00p_mvs
cmd MVX06p_mvs
cmd MVY0cp_mvs
cmd MWA00p_mws
cmd MWX06p_mws
cmd MWY0cp_mws
cmd NOPeap_imp cmd NOPeap_imp
cmd OPT00p_opt cmd OPT00p_opt
cmd ORA00p_acc cmd ORA00p_acc
@ -1220,39 +1404,43 @@ comtab: cmd ADC60p_acc
cmd TYA98p_imp cmd TYA98p_imp
comend: comend:
hello db 'X-Assembler 1.4 by Fox/Taquart',eot hello db 'X-Assembler 1.5 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
byttxt db ' bytes written',eot byttxt db ' bytes written',eot
dectxt db 10 dup(' '),'$' dectxt db 10 dup(' '),'$'
errtxt db ' ERROR: $' wartxt db 'WARNING: $'
e_open db 'Can''t open file',eot w_bugjp db 'Buggy indirect jump',eol
e_read db 'Disk read error',eot w_bras db 'Branch would be sufficient',eol
e_creat db 'Can''t write destination',eot errtxt db 'ERROR: $'
e_writ db 'Disk write error',eot e_open db 'Can''t open file',eol
e_icl db 'Too many files nested',eot e_read db 'Disk read error',eol
e_long db 'Line too long',eot e_creat db 'Can''t write destination',eol
lislin: e_writ db 'Disk write error',eol
e_uneol db 'Unexpected eol',eot e_icl db 'Too many files nested',eol
e_char db 'Illegal character',eot e_long db 'Line too long',eol
e_twice db 'Label declared twice',eot e_uneol db 'Unexpected eol',eol
e_inst db 'Illegal instruction',eot e_char db 'Illegal character',eol
e_nbig db 'Number too big',eot e_twice db 'Label declared twice',eol
e_uknow db 'Unknown value',eot e_inst db 'Illegal instruction',eol
e_xtra db 'Extra characters on line',eot e_nbig db 'Number too big',eol
e_label db 'Label name required',eot e_uknow db 'Unknown value',eol
e_str db 'String error',eot e_xtra db 'Extra characters on line',eol
e_orgs db 'Too many ORGs',eot e_label db 'Label name required',eol
e_brack db 'Need parenthesis',eot e_str db 'String error',eol
e_tlab db 'Too many labels',eot e_orgs db 'Too many ORGs',eol
e_amod db 'Illegal adressing mode',eot e_brack db 'Need parenthesis',eol
e_bra db 'Branch too far',eot e_tlab db 'Too many labels',eol
e_sin db 'Bad or missing sinus parameter',eot e_amod db 'Illegal adressing mode',eol
e_spac db 'Space expected',eot e_bra db 'Branch out of range by $'
e_opt db 'OPT directive not supported',eot brange db ' bytes',eol
e_sin db 'Bad or missing sinus parameter',eol
e_spac db 'Space expected',eol
e_opt db 'OPT directive not supported',eol
pass db 0 exitcod dw 4c00h
flags db 0
lines dd 0 lines dd 0
bytes dd 0 bytes dd 0
iclen dw t_icl iclen dw t_icl
@ -1260,22 +1448,23 @@ laben dw t_lab
p1laben dw 0 p1laben dw 0
pslaben dw -1 pslaben dw -1
orgvec dw t_org orgvec dw t_org
eoflag db 0
sinmin dw 1 sinmin dw 1
sinmax dw 0 sinmax dw 0
sinadd dw ? sinadd dw ?
sinamp dw ? sinamp dw ?
sinsiz dw ? sinsiz dw ?
ohand dw ? ohand dw ?
errad dw ?
val dw ? val dw ?
amod db ?,?
ukp1 db ?,?
oper db ? oper db ?
cod db ? cod db ?
amod db ?
origin dw ? origin dw ?
undef db ?
labvec dw ? labvec dw ?
fnad dw ? fnad dw ?
tempsi dw ?
op1 dw ?,?
op2 dw ?,?
line db 258 dup(?) line db 258 dup(?)
tlabel db 256 dup(?) tlabel db 256 dup(?)