mirror of
https://github.com/pfusik/xasm.git
synced 2024-06-07 11:29:32 +00:00
xasm 2.4.
This commit is contained in:
parent
a7279f7ea6
commit
af437b3eaa
134
xasm.asm
134
xasm.asm
|
@ -18,8 +18,9 @@ ENDIF
|
||||||
|
|
||||||
l_icl = 1024
|
l_icl = 1024
|
||||||
l_org = 4096
|
l_org = 4096
|
||||||
|
l_def = 1024
|
||||||
IFDEF EXE
|
IFDEF EXE
|
||||||
l_lab = 54000
|
l_lab = 53000
|
||||||
ELSE
|
ELSE
|
||||||
l_lab = 48000
|
l_lab = 48000
|
||||||
ENDIF
|
ENDIF
|
||||||
|
@ -82,25 +83,28 @@ b_repl = 13
|
||||||
m_repl = 2000h
|
m_repl = 2000h
|
||||||
b_ski2 = 14
|
b_ski2 = 14
|
||||||
m_ski2 = 4000h
|
m_ski2 = 4000h
|
||||||
|
b_def = 15
|
||||||
|
m_def = 8000h
|
||||||
|
|
||||||
;[swits]
|
;[swits]
|
||||||
m_swc = 1
|
m_swc = 1
|
||||||
m_swe = 2
|
m_swd = 2
|
||||||
m_swi = 4
|
m_swe = 4
|
||||||
m_swl = 8
|
m_swi = 8
|
||||||
b_swn = 4
|
m_swl = 10h
|
||||||
m_swn = 10h
|
b_swn = 5
|
||||||
m_swo = 20h
|
m_swn = 20h
|
||||||
m_swp = 40h
|
m_swo = 40h
|
||||||
m_swq = 80h
|
m_swp = 80h
|
||||||
m_sws = 100h
|
m_swq = 100h
|
||||||
m_swt = 200h
|
m_sws = 200h
|
||||||
m_swu = 400h
|
m_swt = 400h
|
||||||
|
m_swu = 800h
|
||||||
|
|
||||||
;[flist]
|
;[flist]
|
||||||
m_lsti = 4
|
m_lsti = 8
|
||||||
m_lstl = 8
|
m_lstl = 10h
|
||||||
m_lsto = 10h
|
m_lsto = 20h
|
||||||
m_lsts = m_lsto+m_lstl+m_lsti
|
m_lsts = m_lsto+m_lstl+m_lsti
|
||||||
|
|
||||||
nhand = -1 ;null handle
|
nhand = -1 ;null handle
|
||||||
|
@ -248,6 +252,7 @@ lstnam db 128 dup(?)
|
||||||
tabnam db 128 dup(?)
|
tabnam db 128 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_def db l_def dup(?)
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
;*****************************
|
;*****************************
|
||||||
|
@ -318,26 +323,43 @@ usg: print hello ; usage - instrukcja
|
||||||
popt1: lodsb
|
popt1: lodsb
|
||||||
and al, 0dfh ; mala litera -> duza
|
and al, 0dfh ; mala litera -> duza
|
||||||
mov di, offset swilet
|
mov di, offset swilet
|
||||||
mov cx, 11
|
mov cx, 12
|
||||||
repne scasb
|
repne scasb
|
||||||
jne usg ; nie ma takiego switcha
|
jne usg ; nie ma takiego switcha
|
||||||
bts [swits], cx ; sprawdz bit i ustaw
|
bts [swits], cx ; sprawdz bit i ustaw
|
||||||
jc usg ; juz byl taki
|
jnc popt2
|
||||||
mov di, offset lstnam
|
cmp al, 'D' ; tylko /d dozwolone kilka razy
|
||||||
|
jne usg
|
||||||
|
popt2: mov di, offset lstnam
|
||||||
cmp al, 'L'
|
cmp al, 'L'
|
||||||
je popt2
|
je popt4
|
||||||
mov di, offset tabnam
|
mov di, offset tabnam
|
||||||
cmp al, 'T'
|
cmp al, 'T'
|
||||||
je popt2
|
je popt4
|
||||||
cmp al, 'O'
|
|
||||||
jne parg1 ; switch bez parametru
|
|
||||||
cmp [byte si], ':' ; /O wymaga ':'
|
|
||||||
jne usg
|
|
||||||
mov di, offset objnam
|
mov di, offset objnam
|
||||||
popt2: lodsb
|
cmp al, 'O'
|
||||||
|
je popt3
|
||||||
|
cmp al, 'D'
|
||||||
|
jne parg1
|
||||||
|
mov di, [defen]
|
||||||
|
popt3: cmp [byte si], ':' ; /O i /D wymagaja ':'
|
||||||
|
jne usg
|
||||||
|
popt4: mov ah, al
|
||||||
|
lodsb
|
||||||
cmp al, ':'
|
cmp al, ':'
|
||||||
jne parg0
|
jne parg0
|
||||||
call clfna ; pobierz nazwe
|
call clfna ; pobierz nazwe
|
||||||
|
cmp ah, 'D'
|
||||||
|
jne parg0
|
||||||
|
; mov [byte di], 0
|
||||||
|
lea cx, [di-3]
|
||||||
|
sub cx, [defen]
|
||||||
|
jbe usg
|
||||||
|
xchg di, [defen]
|
||||||
|
inc di
|
||||||
|
mov al, '='
|
||||||
|
repne scasb
|
||||||
|
jne usg
|
||||||
jmp parg0
|
jmp parg0
|
||||||
|
|
||||||
pargx:
|
pargx:
|
||||||
|
@ -444,6 +466,7 @@ noswe: btr [swits], b_swn
|
||||||
noswn: mov bp, offset var
|
noswn: mov bp, offset var
|
||||||
|
|
||||||
npass: mov [orgvec], offset t_org-2
|
npass: mov [orgvec], offset t_org-2
|
||||||
|
mov [defvec], offset t_def
|
||||||
mov di, [fslen]
|
mov di, [fslen]
|
||||||
|
|
||||||
opfile: call fopen
|
opfile: call fopen
|
||||||
|
@ -460,12 +483,35 @@ opfile: call fopen
|
||||||
call prline
|
call prline
|
||||||
dos 4c00h
|
dos 4c00h
|
||||||
|
|
||||||
main: mov bx, [iclen]
|
main: mov di, offset line
|
||||||
|
mov si, [defvec]
|
||||||
|
cmp si, [defen]
|
||||||
|
jae nodef
|
||||||
|
mdef1: movsb
|
||||||
|
cmp [byte si], '='
|
||||||
|
jne mdef1
|
||||||
|
inc si
|
||||||
|
mov eax, 'uqe '
|
||||||
|
stosd
|
||||||
|
stosb
|
||||||
|
mdef2: movsb
|
||||||
|
cmp [byte si], 0
|
||||||
|
jne mdef2
|
||||||
|
inc si
|
||||||
|
mov [defvec], si
|
||||||
|
setfl m_def
|
||||||
|
inc [(icl t_icl).line]
|
||||||
|
jmp syntax
|
||||||
|
nodef:
|
||||||
|
btr [flags], b_def
|
||||||
|
jnc ndef1
|
||||||
|
mov [(icl t_icl).line], 0
|
||||||
|
mov [srcen], 0
|
||||||
|
ndef1: mov bx, [iclen]
|
||||||
mov bx, [(icl bx).prev]
|
mov bx, [(icl bx).prev]
|
||||||
test [(icl bx).flags], m_eofl
|
test [(icl bx).flags], m_eofl
|
||||||
jnz filend ; czy byl juz koniec pliku ?
|
jnz filend ; czy byl juz koniec pliku ?
|
||||||
|
; ... nie - omin ewentualny LF
|
||||||
mov di, offset line ; ... nie - omin ewentualny LF
|
|
||||||
call fread1
|
call fread1
|
||||||
jz filend
|
jz filend
|
||||||
cmp [line], 0ah
|
cmp [line], 0ah
|
||||||
|
@ -770,15 +816,21 @@ msgenv: call prline
|
||||||
prenvt: mov si, offset envtxt
|
prenvt: mov si, offset envtxt
|
||||||
jmp prline
|
jmp prline
|
||||||
|
|
||||||
|
gname: mov di, [(icl bx).prev]
|
||||||
|
mov dx, offset clitxt
|
||||||
|
mov cx, clitxl
|
||||||
|
testfl m_def
|
||||||
|
jnz gnamex
|
||||||
|
lea cx, [bx-1]
|
||||||
|
lea dx, [(icl di).nam]
|
||||||
|
sub cx, dx
|
||||||
|
gnamex: ret
|
||||||
|
|
||||||
prname: mov bx, [iclen]
|
prname: mov bx, [iclen]
|
||||||
cmp bx, offset t_icl
|
cmp bx, offset t_icl
|
||||||
jna skiret
|
jna skiret
|
||||||
mov di, [(icl bx).prev]
|
call gname
|
||||||
push di
|
push di
|
||||||
lea dx, [(icl di).nam]
|
|
||||||
; mov [byte bx-1], '$'
|
|
||||||
lea cx, [bx-1]
|
|
||||||
sub cx, dx
|
|
||||||
mov [envnam], dx
|
mov [envnam], dx
|
||||||
sub bx, dx
|
sub bx, dx
|
||||||
mov [envlen], bx
|
mov [envlen], bx
|
||||||
|
@ -1162,11 +1214,7 @@ lsrc1: mov dx, offset srctxt
|
||||||
mov cx, offset srctxl
|
mov cx, offset srctxl
|
||||||
call putlad ; komunikat o nowym source'u
|
call putlad ; komunikat o nowym source'u
|
||||||
mov bx, [iclen]
|
mov bx, [iclen]
|
||||||
mov cx, bx
|
call gname
|
||||||
mov bx, [(icl bx).prev]
|
|
||||||
lea dx, [(icl bx).nam]
|
|
||||||
stc
|
|
||||||
sbb cx, dx
|
|
||||||
call putlad ; nazwa
|
call putlad ; nazwa
|
||||||
call plseol
|
call plseol
|
||||||
nlsrc:
|
nlsrc:
|
||||||
|
@ -2863,9 +2911,9 @@ optvec dw optl0,optl1,opth0,opth1,opto0,opto1
|
||||||
cndtxt dd 'DNE','TFI','ILE','SLE','FIE'
|
cndtxt dd 'DNE','TFI','ILE','SLE','FIE'
|
||||||
cndvec dw pofend,0,p_ift,0,p_eli,0,p_els,0,p_eif
|
cndvec dw pofend,0,p_ift,0,p_eli,0,p_els,0,p_eif
|
||||||
|
|
||||||
swilet db 'UTSQPONLIEC'
|
swilet db 'UTSQPONLIEDC'
|
||||||
|
|
||||||
hello db 'X-Assembler 2.4.-2'
|
hello db 'X-Assembler 2.4'
|
||||||
ifdef SET_WIN_TITLE
|
ifdef SET_WIN_TITLE
|
||||||
titfin db 0
|
titfin db 0
|
||||||
else
|
else
|
||||||
|
@ -2875,7 +2923,7 @@ titfin db 0
|
||||||
hellen = $-hello
|
hellen = $-hello
|
||||||
usgtxt db "Syntax: XASM source [options]",eol
|
usgtxt db "Syntax: XASM source [options]",eol
|
||||||
db "/c Include false conditionals in listing",eol
|
db "/c Include false conditionals in listing",eol
|
||||||
; db "/d:label=value Define a label",eol
|
db "/d:label=value Define a label",eol
|
||||||
db "/e Set environment variables ERRFILE and ERRLINE",eol
|
db "/e Set environment variables ERRFILE and ERRLINE",eol
|
||||||
db "/i Don't list included files",eol
|
db "/i Don't list included files",eol
|
||||||
db "/l[:filename] Generate listing",eol
|
db "/l[:filename] Generate listing",eol
|
||||||
|
@ -2955,6 +3003,8 @@ e_mopco db 'Missing ''}''',cr
|
||||||
e_pair db 'Can''t pair this directive',cr
|
e_pair db 'Can''t pair this directive',cr
|
||||||
e_skit db 'Can''t skip over it',cr
|
e_skit db 'Can''t skip over it',cr
|
||||||
e_repa db 'No instruction to repeat',cr
|
e_repa db 'No instruction to repeat',cr
|
||||||
|
clitxt db 'command line'
|
||||||
|
clitxl = $-clitxt
|
||||||
|
|
||||||
exitcod dw 4c00h
|
exitcod dw 4c00h
|
||||||
ohand dw nhand
|
ohand dw nhand
|
||||||
|
@ -2965,6 +3015,7 @@ lines dd 0
|
||||||
bytes dd 0
|
bytes dd 0
|
||||||
srcen dw 0
|
srcen dw 0
|
||||||
iclen dw t_icl
|
iclen dw t_icl
|
||||||
|
defen dw t_def
|
||||||
laben dw t_lab
|
laben dw t_lab
|
||||||
pslab dw t_lab
|
pslab dw t_lab
|
||||||
elflag dd 1
|
elflag dd 1
|
||||||
|
@ -2986,6 +3037,7 @@ inslen dw ?
|
||||||
origin dw ?
|
origin dw ?
|
||||||
curorg dw ?
|
curorg dw ?
|
||||||
orgvec dw ?
|
orgvec dw ?
|
||||||
|
defvec dw ?
|
||||||
reporg dw ?
|
reporg dw ?
|
||||||
eolpos dw ?
|
eolpos dw ?
|
||||||
lstidx dw ?
|
lstidx dw ?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user