mirror of
https://github.com/pfusik/xasm.git
synced 2024-06-07 11:29:32 +00:00
X-Assembler 1.1.
This commit is contained in:
parent
08f8df9f7d
commit
a8c91ef7ef
248
xasm.asm
248
xasm.asm
|
@ -166,7 +166,7 @@ gline1: cmp di, offset line+255
|
||||||
jmp syntax
|
jmp syntax
|
||||||
|
|
||||||
eof: inc [eoflag]
|
eof: inc [eoflag]
|
||||||
mov [word di+1], 0a0dh
|
mov [word di], 0a0dh
|
||||||
|
|
||||||
syntax: mov si, offset line
|
syntax: mov si, offset line
|
||||||
|
|
||||||
|
@ -211,14 +211,24 @@ asilab: push si
|
||||||
stosw
|
stosw
|
||||||
pop si
|
pop si
|
||||||
|
|
||||||
s_cmd: call spaces
|
s_cmd: lodsb
|
||||||
|
cmp al, ' '
|
||||||
|
je s_cmd
|
||||||
|
cmp al, 9
|
||||||
|
je s_cmd
|
||||||
|
cmp al, 0dh
|
||||||
|
jne s_cmd1
|
||||||
|
cmp [byte high labvec], 0
|
||||||
|
je main
|
||||||
|
jmp uneol
|
||||||
|
s_cmd1: dec si
|
||||||
lodsw
|
lodsw
|
||||||
and ax, 0dfdfh
|
and ax, 0dfdfh
|
||||||
mov dx, ax
|
sta dx
|
||||||
lodsb
|
lodsb
|
||||||
and al, 0dfh
|
and al, 0dfh
|
||||||
mov di, offset comtab
|
mov di, offset comtab
|
||||||
mov bx, 32*6
|
mov bx, 64*6
|
||||||
sfcmd1: mov ah, al
|
sfcmd1: mov ah, al
|
||||||
mov cx, dx
|
mov cx, dx
|
||||||
sub ah, [di+bx+2]
|
sub ah, [di+bx+2]
|
||||||
|
@ -232,15 +242,8 @@ sfcmd1: mov ah, al
|
||||||
mov al, [di+bx+3]
|
mov al, [di+bx+3]
|
||||||
mov [cod], al
|
mov [cod], al
|
||||||
call [word di+4+bx]
|
call [word di+4+bx]
|
||||||
lodsb
|
call linend
|
||||||
cmp al, 0dh
|
jmp main
|
||||||
je main
|
|
||||||
cmp al, ' '
|
|
||||||
je main
|
|
||||||
cmp al, 9
|
|
||||||
je main
|
|
||||||
mov ax, offset e_xtra
|
|
||||||
jmp panica
|
|
||||||
|
|
||||||
sfcmd2: add di, bx
|
sfcmd2: add di, bx
|
||||||
cmp di, offset comend
|
cmp di, offset comend
|
||||||
|
@ -254,12 +257,6 @@ sfcmd3: shr bx, 1
|
||||||
mov ax, offset e_inst
|
mov ax, offset e_inst
|
||||||
jmp panica
|
jmp panica
|
||||||
|
|
||||||
uneol: mov ax, offset e_uneol
|
|
||||||
jmp panica
|
|
||||||
|
|
||||||
ilchar: mov ax, offset e_char
|
|
||||||
jmp panica
|
|
||||||
|
|
||||||
filend: mov [eoflag], 0
|
filend: mov [eoflag], 0
|
||||||
cmp [pass], 1
|
cmp [pass], 1
|
||||||
jnb noforg
|
jnb noforg
|
||||||
|
@ -354,25 +351,50 @@ pride1: cdq
|
||||||
print
|
print
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; Omija spacje i tabulatory
|
; Pobiera znak (eol=error)
|
||||||
spaces: lodsb
|
get: lodsb
|
||||||
cmp al, ' '
|
|
||||||
je spaces
|
|
||||||
cmp al, 9
|
|
||||||
je spaces
|
|
||||||
cmp al, 0dh
|
cmp al, 0dh
|
||||||
je uneol
|
je uneol
|
||||||
|
ret
|
||||||
|
uneol: mov ax, offset e_uneol
|
||||||
|
jmp panica
|
||||||
|
|
||||||
|
ilchar: mov ax, offset e_char
|
||||||
|
jmp panica
|
||||||
|
|
||||||
|
; Omija spacje i tabulatory
|
||||||
|
spaces: call get
|
||||||
|
cmp al, ' '
|
||||||
|
je space1
|
||||||
|
cmp al, 9
|
||||||
|
je space1
|
||||||
|
mov ax, offset e_spac
|
||||||
|
jmp panica
|
||||||
|
space1: call get
|
||||||
|
cmp al, ' '
|
||||||
|
je space1
|
||||||
|
cmp al, 9
|
||||||
|
je space1
|
||||||
dec si
|
dec si
|
||||||
rstret: ret
|
rstret: ret
|
||||||
|
|
||||||
|
; Stwierdza blad, jesli nie spacja, tab i eol
|
||||||
|
linend: lodsb
|
||||||
|
cmp al, 0dh
|
||||||
|
je rstret
|
||||||
|
cmp al, ' '
|
||||||
|
je rstret
|
||||||
|
cmp al, 9
|
||||||
|
je rstret
|
||||||
|
mov ax, offset e_xtra
|
||||||
|
jmp panica
|
||||||
|
|
||||||
; Czyta lancuch i zapisuje do [di]
|
; Czyta lancuch i zapisuje do [di]
|
||||||
rstr: lodsb
|
rstr: call get
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
jne strer
|
jne strer
|
||||||
push di
|
push di
|
||||||
rstr1: lodsb
|
rstr1: call get
|
||||||
cmp al, 0dh
|
|
||||||
je uneol
|
|
||||||
stosb
|
stosb
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
jne rstr1
|
jne rstr1
|
||||||
|
@ -380,7 +402,9 @@ rstr1: lodsb
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
je rstr1
|
je rstr1
|
||||||
dec si
|
dec si
|
||||||
lea cx, [di-1]
|
dec di
|
||||||
|
mov [byte di], 0
|
||||||
|
mov cx, di
|
||||||
pop di
|
pop di
|
||||||
sub cx, di
|
sub cx, di
|
||||||
jnz rstret
|
jnz rstret
|
||||||
|
@ -448,13 +472,13 @@ value: mov [val], 0
|
||||||
valuem: mov [oper], al
|
valuem: mov [oper], al
|
||||||
xor dx, dx
|
xor dx, dx
|
||||||
mov ch, -1
|
mov ch, -1
|
||||||
lodsb
|
call get
|
||||||
cmp al, 0dh
|
|
||||||
je uneol
|
|
||||||
cmp al, '*'
|
cmp al, '*'
|
||||||
je valorg
|
je valorg
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
je valchr
|
je valchr
|
||||||
|
cmp al, '^'
|
||||||
|
je valreg
|
||||||
mov bx, 16
|
mov bx, 16
|
||||||
cmp al, '$'
|
cmp al, '$'
|
||||||
je rdnum3
|
je rdnum3
|
||||||
|
@ -498,9 +522,7 @@ vlabkn: mov dx, [bx+2]
|
||||||
vlabun: mov [undef], 0ffh
|
vlabun: mov [undef], 0ffh
|
||||||
jmp value1
|
jmp value1
|
||||||
|
|
||||||
valchr: lodsb
|
valchr: call get
|
||||||
cmp al, 0dh
|
|
||||||
je uneol
|
|
||||||
cmp al, "'"
|
cmp al, "'"
|
||||||
jne valch1
|
jne valch1
|
||||||
lodsb
|
lodsb
|
||||||
|
@ -516,6 +538,29 @@ valch1: movzx dx, al
|
||||||
xor dl, 80h
|
xor dl, 80h
|
||||||
jmp value1
|
jmp value1
|
||||||
|
|
||||||
|
valreg: call get
|
||||||
|
cmp al, '4'
|
||||||
|
ja ilchar
|
||||||
|
sub al, '0'
|
||||||
|
jb ilchar
|
||||||
|
add al, 0d0h
|
||||||
|
mov ah, al
|
||||||
|
call get
|
||||||
|
cmp al, 'A'
|
||||||
|
jb valre1
|
||||||
|
and al, 0dfh
|
||||||
|
cmp al, 'A'
|
||||||
|
jb valre1
|
||||||
|
add al, '0'+10-'A'
|
||||||
|
valre1: sub al, '0'
|
||||||
|
cmp al, 0fh
|
||||||
|
ja ilchar
|
||||||
|
cmp ah, 0d1h
|
||||||
|
jne valre2
|
||||||
|
sub ax, 0f0h
|
||||||
|
valre2: sta dx
|
||||||
|
jmp value1
|
||||||
|
|
||||||
valorg: mov dx, [origin]
|
valorg: mov dx, [origin]
|
||||||
jmp value1
|
jmp value1
|
||||||
|
|
||||||
|
@ -617,8 +662,19 @@ putret: ret
|
||||||
|
|
||||||
p_imp = savbyt
|
p_imp = savbyt
|
||||||
|
|
||||||
|
p_ads: call getadr
|
||||||
|
mov al, [cod]
|
||||||
|
call savbyt
|
||||||
|
mov al, 60h
|
||||||
|
cmp [cod], 18h
|
||||||
|
je p_as1
|
||||||
|
mov al, 0e0h
|
||||||
|
p_as1: mov [cod], al
|
||||||
|
mov al, [amod]
|
||||||
|
jmp p_ac1
|
||||||
|
|
||||||
p_acc: call getadr
|
p_acc: call getadr
|
||||||
cmp al, 7
|
p_ac1: cmp al, 7
|
||||||
jne acc1
|
jne acc1
|
||||||
dec ax
|
dec ax
|
||||||
mov [amod], al
|
mov [amod], al
|
||||||
|
@ -721,12 +777,8 @@ toofar: mov ax, offset e_bra
|
||||||
jmp panica
|
jmp panica
|
||||||
|
|
||||||
p_jsr: call getadr
|
p_jsr: call getadr
|
||||||
and al, 0feh
|
|
||||||
mov [amod], al
|
|
||||||
cmp al, 2
|
|
||||||
jne ilamod
|
|
||||||
mov al, 20h
|
mov al, 20h
|
||||||
jmp putcmd
|
jmp p_abs
|
||||||
|
|
||||||
p_bit: call getadr
|
p_bit: call getadr
|
||||||
cmp al, 2
|
cmp al, 2
|
||||||
|
@ -737,14 +789,20 @@ p_bit: call getadr
|
||||||
mov al, 24h
|
mov al, 24h
|
||||||
jmp putcmd
|
jmp putcmd
|
||||||
|
|
||||||
|
p_juc: call getadr
|
||||||
|
mov al, [cod]
|
||||||
|
mov ah, 3
|
||||||
|
call savwor
|
||||||
|
jmp p_jp1
|
||||||
|
|
||||||
p_jmp: call getadr
|
p_jmp: call getadr
|
||||||
cmp al, 10
|
cmp al, 10
|
||||||
mov al, 6ch
|
mov al, 6ch
|
||||||
je putcmd
|
je putcmd
|
||||||
and [amod], 0feh
|
p_jp1: mov al, 4ch
|
||||||
|
p_abs: and [amod], 0feh
|
||||||
cmp [amod], 2
|
cmp [amod], 2
|
||||||
jne ilamod
|
jne ilamod
|
||||||
mov al, 4ch
|
|
||||||
jmp putcmd
|
jmp putcmd
|
||||||
|
|
||||||
p_opt: call getval
|
p_opt: call getval
|
||||||
|
@ -805,10 +863,18 @@ putorg: mov bx, [orgvec]
|
||||||
tmorgs: mov ax, offset e_orgs
|
tmorgs: mov ax, offset e_orgs
|
||||||
jmp panica
|
jmp panica
|
||||||
|
|
||||||
|
valuco: call value
|
||||||
|
jc unknow
|
||||||
|
call get
|
||||||
|
cmp al, ','
|
||||||
|
jne badsin
|
||||||
|
mov ax, [val]
|
||||||
|
ret
|
||||||
|
badsin: mov ax, offset e_sin
|
||||||
|
jmp panica
|
||||||
|
|
||||||
p_dta: call spaces
|
p_dta: call spaces
|
||||||
dta1: lodsb
|
dta1: call get
|
||||||
cmp al, 0dh
|
|
||||||
je uneol
|
|
||||||
and al, 0dfh
|
and al, 0dfh
|
||||||
mov [cod], al
|
mov [cod], al
|
||||||
cmp al, 'A'
|
cmp al, 'A'
|
||||||
|
@ -829,9 +895,65 @@ dtan1: lodsb
|
||||||
cmp al, '('
|
cmp al, '('
|
||||||
jne mbrack
|
jne mbrack
|
||||||
|
|
||||||
dtan2: call value
|
dtan2: lodsd
|
||||||
|
and eax, 0ffdfdfdfh
|
||||||
|
cmp eax, '(NIS'
|
||||||
|
jne dtansi
|
||||||
|
call valuco
|
||||||
|
mov [sinadd], ax
|
||||||
|
call valuco
|
||||||
|
mov [sinamp], ax
|
||||||
|
call value
|
||||||
|
jc unknow
|
||||||
|
mov ax, [val]
|
||||||
|
test ax, ax
|
||||||
|
js badsin
|
||||||
|
jz badsin
|
||||||
|
mov [sinsiz], ax
|
||||||
|
mov [sinmin], 0
|
||||||
|
dec ax
|
||||||
|
mov [sinmax], ax
|
||||||
|
call get
|
||||||
|
cmp al, ')'
|
||||||
|
je presin
|
||||||
|
cmp al, ','
|
||||||
|
jne badsin
|
||||||
|
call valuco
|
||||||
|
test ax, ax
|
||||||
|
js badsin
|
||||||
|
mov [sinmin], ax
|
||||||
|
call value
|
||||||
|
jc unknow
|
||||||
|
mov ax, [val]
|
||||||
|
test ax, ax
|
||||||
|
js badsin
|
||||||
|
cmp ax, [sinmin]
|
||||||
|
jb badsin
|
||||||
|
mov [sinmax], ax
|
||||||
|
lodsb
|
||||||
|
cmp al, ')'
|
||||||
|
jne mbrack
|
||||||
|
presin: finit
|
||||||
|
fldpi
|
||||||
|
fld st
|
||||||
|
faddp st(1), st
|
||||||
|
fild [sinsiz]
|
||||||
|
fdivp st(1), st
|
||||||
|
gensin: fild [sinmin]
|
||||||
|
inc [sinmin]
|
||||||
|
fmul st, st(1)
|
||||||
|
fsin
|
||||||
|
fild [sinamp]
|
||||||
|
fmulp st(1), st
|
||||||
|
fistp [val]
|
||||||
|
mov ax, [sinadd]
|
||||||
|
add [val], ax
|
||||||
|
jmp dtasto
|
||||||
|
|
||||||
|
dtansi: sub si, 4
|
||||||
|
call value
|
||||||
jc dtan3
|
jc dtan3
|
||||||
cmp [pass], 1
|
dtasto: cmp [pass], 1
|
||||||
jb dtan4
|
jb dtan4
|
||||||
mov al, [cod]
|
mov al, [cod]
|
||||||
cmp al, 'B'
|
cmp al, 'B'
|
||||||
|
@ -863,7 +985,10 @@ dtan3: cmp [pass], 1
|
||||||
dtan4: cmp [cod], 'A'+1
|
dtan4: cmp [cod], 'A'+1
|
||||||
adc [origin], 1
|
adc [origin], 1
|
||||||
|
|
||||||
dtanx: lodsb
|
dtanx: mov ax, [sinmin]
|
||||||
|
cmp ax, [sinmax]
|
||||||
|
jbe gensin
|
||||||
|
lodsb
|
||||||
cmp al, ','
|
cmp al, ','
|
||||||
je dtan2
|
je dtan2
|
||||||
cmp al, ')'
|
cmp al, ')'
|
||||||
|
@ -910,10 +1035,12 @@ dtanxt: lodsb
|
||||||
p_icl: call spaces
|
p_icl: call spaces
|
||||||
mov di, offset fname
|
mov di, offset fname
|
||||||
call rstr
|
call rstr
|
||||||
mov [byte di], 0
|
pop ax
|
||||||
|
call linend
|
||||||
jmp opfile
|
jmp opfile
|
||||||
|
|
||||||
p_end: pop ax
|
p_end: pop ax
|
||||||
|
call linend
|
||||||
jmp filend
|
jmp filend
|
||||||
|
|
||||||
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
|
||||||
|
@ -922,6 +1049,7 @@ 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
|
||||||
|
|
||||||
comtab: cmd ADC60p_acc
|
comtab: cmd ADC60p_acc
|
||||||
|
cmd ADD18p_ads
|
||||||
cmd AND20p_acc
|
cmd AND20p_acc
|
||||||
cmd ASL00p_srt
|
cmd ASL00p_srt
|
||||||
cmd BCC90p_bra
|
cmd BCC90p_bra
|
||||||
|
@ -952,8 +1080,16 @@ comtab: cmd ADC60p_acc
|
||||||
cmd INCe0p_srt
|
cmd INCe0p_srt
|
||||||
cmd INXe8p_imp
|
cmd INXe8p_imp
|
||||||
cmd INYc8p_imp
|
cmd INYc8p_imp
|
||||||
|
cmd JCCb0p_juc
|
||||||
|
cmd JCS90p_juc
|
||||||
|
cmd JEQd0p_juc
|
||||||
|
cmd JMI10p_juc
|
||||||
cmd JMP4cp_jmp
|
cmd JMP4cp_jmp
|
||||||
|
cmd JNEf0p_juc
|
||||||
|
cmd JPL30p_juc
|
||||||
cmd JSR20p_jsr
|
cmd JSR20p_jsr
|
||||||
|
cmd JVC70p_juc
|
||||||
|
cmd JVS50p_juc
|
||||||
cmd LDAa0p_acc
|
cmd LDAa0p_acc
|
||||||
cmd LDXa2p_ldi
|
cmd LDXa2p_ldi
|
||||||
cmd LDYa0p_ldi
|
cmd LDYa0p_ldi
|
||||||
|
@ -977,6 +1113,7 @@ comtab: cmd ADC60p_acc
|
||||||
cmd STA80p_acc
|
cmd STA80p_acc
|
||||||
cmd STX86p_sti
|
cmd STX86p_sti
|
||||||
cmd STY84p_sti
|
cmd STY84p_sti
|
||||||
|
cmd SUB38p_ads
|
||||||
cmd TAXaap_imp
|
cmd TAXaap_imp
|
||||||
cmd TAYa8p_imp
|
cmd TAYa8p_imp
|
||||||
cmd TSXbap_imp
|
cmd TSXbap_imp
|
||||||
|
@ -985,7 +1122,7 @@ comtab: cmd ADC60p_acc
|
||||||
cmd TYA98p_imp
|
cmd TYA98p_imp
|
||||||
comend:
|
comend:
|
||||||
|
|
||||||
hello db 'X-Assembler 1.0 by Fox/Taquart',eot
|
hello db 'X-Assembler 1.1 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 'Destination will have the same name and .COM extension.',eot
|
db 'Destination will have the same name and .COM extension.',eot
|
||||||
lintxt db ' lines assembled',eot
|
lintxt db ' lines assembled',eot
|
||||||
|
@ -1013,6 +1150,8 @@ e_brack db 'Missing bracket',eot
|
||||||
e_tlab db 'Too many labels',eot
|
e_tlab db 'Too many labels',eot
|
||||||
e_amod db 'Illegal adressing mode',eot
|
e_amod db 'Illegal adressing mode',eot
|
||||||
e_bra db 'Branch too far',eot
|
e_bra db 'Branch too far',eot
|
||||||
|
e_sin db 'Bad or missing sinus parameter',eot
|
||||||
|
e_spac db 'Space expected',eot
|
||||||
|
|
||||||
pass dw 0
|
pass dw 0
|
||||||
lines dd 0
|
lines dd 0
|
||||||
|
@ -1023,6 +1162,11 @@ p1laben dw 0
|
||||||
pslaben dw -1
|
pslaben dw -1
|
||||||
orgvec dw t_org
|
orgvec dw t_org
|
||||||
eoflag db 0
|
eoflag db 0
|
||||||
|
sinmin dw 1
|
||||||
|
sinmax dw 0
|
||||||
|
sinadd dw ?
|
||||||
|
sinamp dw ?
|
||||||
|
sinsiz dw ?
|
||||||
ohand dw ?
|
ohand dw ?
|
||||||
errad dw ?
|
errad dw ?
|
||||||
val dw ?
|
val dw ?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user