mirror of
https://github.com/pfusik/xasm.git
synced 2024-06-07 11:29:32 +00:00
X-Assembler 1.7.
This commit is contained in:
parent
1a31c1ddd5
commit
5213b3a799
222
xasm.asm
222
xasm.asm
|
@ -43,6 +43,7 @@ vec dw ?
|
||||||
|
|
||||||
m_pass = 80h
|
m_pass = 80h
|
||||||
m_eofl = 40h
|
m_eofl = 40h
|
||||||
|
m_skip = 20h
|
||||||
|
|
||||||
eol equ 13,10
|
eol equ 13,10
|
||||||
eot equ 13,10,'$'
|
eot equ 13,10,'$'
|
||||||
|
@ -198,7 +199,40 @@ syntax: mov si, offset line
|
||||||
je main
|
je main
|
||||||
cmp al, '|'
|
cmp al, '|'
|
||||||
je main
|
je main
|
||||||
mov [labvec], 0
|
test [flags], m_skip
|
||||||
|
jz nskip
|
||||||
|
skip1: call get
|
||||||
|
cmp al, ' '
|
||||||
|
je skip2
|
||||||
|
cmp al, 9
|
||||||
|
jne skip1
|
||||||
|
skip2: call space1
|
||||||
|
push offset main
|
||||||
|
lodsd
|
||||||
|
and eax, 0dfdfdfh
|
||||||
|
cmp eax, 'TFI'
|
||||||
|
je skift
|
||||||
|
cmp eax, 'SLE'
|
||||||
|
je skels
|
||||||
|
cmp eax, 'DNE'
|
||||||
|
je filend
|
||||||
|
cmp eax, 'FIE'
|
||||||
|
jne skret
|
||||||
|
call p_eif
|
||||||
|
dec [sift]
|
||||||
|
jns skret
|
||||||
|
and [flags], not m_skip
|
||||||
|
inc [sift] ;0
|
||||||
|
skret: ret
|
||||||
|
skift: call shlelf
|
||||||
|
inc [sift]
|
||||||
|
ret
|
||||||
|
skels: call btself
|
||||||
|
cmp [sift], 0
|
||||||
|
jnz skret
|
||||||
|
jmp fliski
|
||||||
|
|
||||||
|
nskip: mov [labvec], 0
|
||||||
cmp al, ' '
|
cmp al, ' '
|
||||||
je s_cmd
|
je s_cmd
|
||||||
cmp al, 9
|
cmp al, 9
|
||||||
|
@ -282,6 +316,8 @@ filend: and [flags], not m_eofl
|
||||||
ja main
|
ja main
|
||||||
jpass2 fin
|
jpass2 fin
|
||||||
|
|
||||||
|
cmp [elflag], 1
|
||||||
|
jne miseif
|
||||||
or [flags], m_pass
|
or [flags], m_pass
|
||||||
call putorg
|
call putorg
|
||||||
call ldname
|
call ldname
|
||||||
|
@ -323,6 +359,9 @@ fin: mov bx, [ohand]
|
||||||
linlon: push offset e_long
|
linlon: push offset e_long
|
||||||
jmp erron
|
jmp erron
|
||||||
|
|
||||||
|
miseif: push offset e_meif
|
||||||
|
jmp erron
|
||||||
|
|
||||||
; ERROR
|
; ERROR
|
||||||
errln: call ppline
|
errln: call ppline
|
||||||
erron: call prname
|
erron: call prname
|
||||||
|
@ -510,14 +549,17 @@ rfname: call spaces
|
||||||
; Czyta lancuch i zapisuje do [di]
|
; Czyta lancuch i zapisuje do [di]
|
||||||
rstr: call get
|
rstr: call get
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
|
je rstr0
|
||||||
|
cmp al, '"'
|
||||||
jne strer
|
jne strer
|
||||||
mov dx, di
|
rstr0: mov dx, di
|
||||||
|
mov ah, al
|
||||||
rstr1: call get
|
rstr1: call get
|
||||||
stosb
|
stosb
|
||||||
cmp al, "'"
|
cmp al, ah
|
||||||
jne rstr1
|
jne rstr1
|
||||||
lodsb
|
lodsb
|
||||||
cmp al, "'"
|
cmp al, ah
|
||||||
je rstr1
|
je rstr1
|
||||||
dec si
|
dec si
|
||||||
mov [byte di-1], 0
|
mov [byte di-1], 0
|
||||||
|
@ -605,6 +647,8 @@ valuem: mov bl, al
|
||||||
je valorg
|
je valorg
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
je valchr
|
je valchr
|
||||||
|
cmp al, '"'
|
||||||
|
je valchr
|
||||||
cmp al, '^'
|
cmp al, '^'
|
||||||
je valreg
|
je valreg
|
||||||
mov bp, -1
|
mov bp, -1
|
||||||
|
@ -663,13 +707,14 @@ vlabkn: bt [word (lab bx).flags], b_sign
|
||||||
valorg: mov ax, [origin]
|
valorg: mov ax, [origin]
|
||||||
jmp value1
|
jmp value1
|
||||||
|
|
||||||
valchr: call get
|
valchr: mov dl, al
|
||||||
cmp al, "'"
|
call get
|
||||||
|
cmp al, dl
|
||||||
jne valch1
|
jne valch1
|
||||||
lodsb
|
lodsb
|
||||||
cmp al, "'"
|
cmp al, dl
|
||||||
jne strer
|
jne strer
|
||||||
valch1: cmp [byte si], "'"
|
valch1: cmp dl, [si]
|
||||||
jne strer
|
jne strer
|
||||||
inc si
|
inc si
|
||||||
cmp [byte si], '*'
|
cmp [byte si], '*'
|
||||||
|
@ -1350,6 +1395,8 @@ dta1: call get
|
||||||
je dtat1
|
je dtat1
|
||||||
cmp al, 'D'
|
cmp al, 'D'
|
||||||
je dtat1
|
je dtat1
|
||||||
|
cmp al, 'R'
|
||||||
|
je dtar1
|
||||||
jmp ilchar
|
jmp ilchar
|
||||||
|
|
||||||
dtan1: lodsb
|
dtan1: lodsb
|
||||||
|
@ -1480,6 +1527,129 @@ dtanxt: lodsb
|
||||||
dec si
|
dec si
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
dtar1: lodsb
|
||||||
|
cmp al, '('
|
||||||
|
jne mparen
|
||||||
|
dtar2: xor bx, bx
|
||||||
|
xor edx, edx
|
||||||
|
xor cx, cx
|
||||||
|
call getsgn
|
||||||
|
dreal1: call getdig
|
||||||
|
jnc dreal2
|
||||||
|
cmp al, '.'
|
||||||
|
je drealp
|
||||||
|
test bh, bh
|
||||||
|
jnz drealz
|
||||||
|
jmp ilchar
|
||||||
|
dreal2: mov bh, 1
|
||||||
|
test al, al
|
||||||
|
jz dreal1
|
||||||
|
dec cx
|
||||||
|
dreal3: inc cx
|
||||||
|
call putdig
|
||||||
|
call getdig
|
||||||
|
jnc dreal3
|
||||||
|
cmp al, '.'
|
||||||
|
je drealp
|
||||||
|
and al, 0dfh
|
||||||
|
cmp al, 'E'
|
||||||
|
jne drealf
|
||||||
|
dreale: call getsgn
|
||||||
|
call getdig
|
||||||
|
jc ilchar
|
||||||
|
mov ah, al
|
||||||
|
call getdig
|
||||||
|
jnc dreal4
|
||||||
|
shr ax, 8
|
||||||
|
dreal4: aad
|
||||||
|
add di, di
|
||||||
|
jnc drealn
|
||||||
|
neg ax
|
||||||
|
drealn: add cx, ax
|
||||||
|
jmp drealf
|
||||||
|
dreal5: test edx, edx
|
||||||
|
jnz dreal9
|
||||||
|
test bl, bl
|
||||||
|
jnz dreal9
|
||||||
|
dec cx
|
||||||
|
dreal9: call putdig
|
||||||
|
drealp: call getdig
|
||||||
|
jnc dreal5
|
||||||
|
and al, 0dfh
|
||||||
|
cmp al, 'E'
|
||||||
|
je dreale
|
||||||
|
drealf: test edx, edx
|
||||||
|
jnz drealx
|
||||||
|
test bl, bl
|
||||||
|
jnz drealx
|
||||||
|
drealz: xor ax, ax
|
||||||
|
xor edx, edx
|
||||||
|
jmp dreals
|
||||||
|
drealx: add cx, 80h
|
||||||
|
cmp cx, 20h
|
||||||
|
js drealz
|
||||||
|
cmp cx, 0e2h
|
||||||
|
jnb toobig
|
||||||
|
add di, di
|
||||||
|
rcr cl, 1
|
||||||
|
mov al, 10h
|
||||||
|
jc dreal7
|
||||||
|
cmp bl, al
|
||||||
|
mov al, 1
|
||||||
|
jb dreal7
|
||||||
|
shrd edx, ebx, 4
|
||||||
|
shr bl, 4
|
||||||
|
jmp dreal8
|
||||||
|
dreal6: shld ebx, edx, 4
|
||||||
|
shl edx, 4
|
||||||
|
dreal7: cmp bl, al
|
||||||
|
jb dreal6
|
||||||
|
dreal8: lda cx
|
||||||
|
mov ah, bl
|
||||||
|
dreals: rol edx, 16
|
||||||
|
push edx
|
||||||
|
call savwor
|
||||||
|
pop ax
|
||||||
|
xchg ah, al
|
||||||
|
call savwor
|
||||||
|
pop ax
|
||||||
|
xchg ah, al
|
||||||
|
call savwor
|
||||||
|
dec si
|
||||||
|
lodsb
|
||||||
|
cmp al, ','
|
||||||
|
je dtar2
|
||||||
|
cmp al, ')'
|
||||||
|
jne mparen
|
||||||
|
jmp dtanxt
|
||||||
|
|
||||||
|
putdig: cmp bl, 10h
|
||||||
|
jnb rlret
|
||||||
|
shld ebx, edx, 4
|
||||||
|
shl edx, 4
|
||||||
|
add dl, al
|
||||||
|
ret
|
||||||
|
|
||||||
|
getsgn: call get
|
||||||
|
cmp al, '-'
|
||||||
|
stc
|
||||||
|
je sgnret
|
||||||
|
cmp al, '+'
|
||||||
|
clc
|
||||||
|
je sgnret
|
||||||
|
dec si
|
||||||
|
sgnret: rcr di, 1
|
||||||
|
rlret: ret
|
||||||
|
|
||||||
|
getdig: call get
|
||||||
|
cmp al, '0'
|
||||||
|
jb rlret
|
||||||
|
cmp al, '9'+1
|
||||||
|
cmc
|
||||||
|
jb rlret
|
||||||
|
sub al, '0'
|
||||||
|
ret
|
||||||
|
|
||||||
p_icl: call rfname
|
p_icl: call rfname
|
||||||
pop ax
|
pop ax
|
||||||
call linend
|
call linend
|
||||||
|
@ -1512,6 +1682,31 @@ p_end: pop ax
|
||||||
call linend
|
call linend
|
||||||
jmp filend
|
jmp filend
|
||||||
|
|
||||||
|
shlelf: shl [elflag], 1
|
||||||
|
jnc cndret
|
||||||
|
error e_tmift
|
||||||
|
|
||||||
|
btself: bts [elflag], 0
|
||||||
|
jnc cndret
|
||||||
|
error e_eifex
|
||||||
|
|
||||||
|
p_ift: call spaval
|
||||||
|
jc unknow
|
||||||
|
call shlelf
|
||||||
|
test eax, eax
|
||||||
|
jz fliski
|
||||||
|
cndret: ret
|
||||||
|
|
||||||
|
p_els: cmp [elflag], 1
|
||||||
|
je misift
|
||||||
|
call btself
|
||||||
|
fliski: xor [flags], m_skip
|
||||||
|
ret
|
||||||
|
|
||||||
|
p_eif: shr [elflag], 1
|
||||||
|
jnz cndret
|
||||||
|
misift: error e_mift
|
||||||
|
|
||||||
; addressing modes:
|
; addressing modes:
|
||||||
; 0-@ 1-# 2-A 3-Z 4-A,X 5-Z,X 6-A,Y 7-Z,Y 8-(Z,X) 9-(Z),Y 10-(A)
|
; 0-@ 1-# 2-A 3-Z 4-A,X 5-Z,X 6-A,Y 7-Z,Y 8-(Z,X) 9-(Z),Y 10-(A)
|
||||||
lentab db 1,2,3,2,3,2,3,2,2,2,3
|
lentab db 1,2,3,2,3,2,3,2,2,2,3
|
||||||
|
@ -1551,11 +1746,14 @@ comtab: cmd ADC60p_acc
|
||||||
cmd DEXcap_imp
|
cmd DEXcap_imp
|
||||||
cmd DEY88p_imp
|
cmd DEY88p_imp
|
||||||
cmd DTA00p_dta
|
cmd DTA00p_dta
|
||||||
|
cmd EIF00p_eif
|
||||||
|
cmd ELS00p_els
|
||||||
cmd END00p_end
|
cmd END00p_end
|
||||||
cmd EOR40p_acc
|
cmd EOR40p_acc
|
||||||
cmd EQU00p_equ
|
cmd EQU00p_equ
|
||||||
cmd ERT00p_ert
|
cmd ERT00p_ert
|
||||||
cmd ICL00p_icl
|
cmd ICL00p_icl
|
||||||
|
cmd IFT00p_ift
|
||||||
cmd INCe0p_srt
|
cmd INCe0p_srt
|
||||||
cmd INIe2p_rui
|
cmd INIe2p_rui
|
||||||
cmd INS00p_ins
|
cmd INS00p_ins
|
||||||
|
@ -1637,7 +1835,7 @@ noper2 = ($-opert2)/2
|
||||||
opert1 db '+-*/%&|^=<>'
|
opert1 db '+-*/%&|^=<>'
|
||||||
noper1 = $-opert1
|
noper1 = $-opert1
|
||||||
|
|
||||||
hello db 'X-Assembler 1.6 by Fox/Taquart',eot
|
hello db 'X-Assembler 1.7 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
|
||||||
|
@ -1679,6 +1877,10 @@ e_fref db 'Illegal forward reference',eol
|
||||||
e_wpar db 'Use square brackets instead',eol
|
e_wpar db 'Use square brackets instead',eol
|
||||||
e_brack db 'Not matching brackets',eol
|
e_brack db 'Not matching brackets',eol
|
||||||
e_user db 'User error',eol
|
e_user db 'User error',eol
|
||||||
|
e_tmift db 'Too many IFTs nested',eol
|
||||||
|
e_eifex db 'EIF expected',eol
|
||||||
|
e_mift db 'Missing IFT',eol
|
||||||
|
e_meif db 'Missing EIF',eol
|
||||||
|
|
||||||
exitcod dw 4c00h
|
exitcod dw 4c00h
|
||||||
flags db 0
|
flags db 0
|
||||||
|
@ -1688,6 +1890,8 @@ iclen dw t_icl
|
||||||
laben dw t_lab-2
|
laben dw t_lab-2
|
||||||
pslab dw t_lab-2
|
pslab dw t_lab-2
|
||||||
orgvec dw t_org
|
orgvec dw t_org
|
||||||
|
sift dw 0
|
||||||
|
elflag dd 1
|
||||||
sinmin dw 1
|
sinmin dw 1
|
||||||
sinmax dw 0
|
sinmax dw 0
|
||||||
sinadd dw ?
|
sinadd dw ?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user