| nedoPC project
| nedoPC group
| nedoPC forums
|
ShaOS-ZX test
s004_v0_.zip (13K) - TAP ÄÌÑ ZX Ó ÉÓÈÏÄÎÉËÏÍ
éÓÈÏÄÎÉË ÓËÏÎ×ÅÒÔÉÒÏ×ÁÎ × ZMAC ÓÏ×ÍÅÓÔÉÍÙÊ ÆÏÒÍÁÔ ÉÚ RASM ËÏÄÁ 1998 ÇÏÄÁ
; **************************************************
; * S004_0.A - Operation System for microcomputers *
; * S004.0-ZX (c) Jan 1997 - Jun 1998 Shabarshin A.*
; **************************************************
; C:/ --------> #0000
; C:/SYSTEM --> #0800
; C:/BATCH ---> #1000
; RUN #D000
org #cc00
_sp_beg equ #fe00
_vector equ #cc00
_mem1 equ #7000
_mem2 equ #cc00
_blo1 equ #e200
_card equ #e000
_size equ 256
_cmd equ #ce00
_mcmd equ 32
_env equ #ce20
_men equ 480
_gbit equ 1
_mgx equ 256
_mgy equ 192
_mtx equ 32
_mty equ 22
_screen equ #e400
_flag_d equ #cda0
_flag_v equ #cda1
_flag_a equ #cda2
_flag_s equ #cda3
_flag_p equ #cda4
_system equ #0800
;_HLH EQU #CCEF
_util equ #e800
beg: jp rst_
err: jp err_
mmr: jp mmr_
mmf: jp mmf_
mma: jp mma_
; òáúòåûåîù ìé ðòåòù÷áîéñ (#00-N,#FF-Y)
fei db 0
vrs: ld a,0
ret
sav: jp sav_
vrf: jp vrf_
loa: jp loa_
typ: ld a,#02
ret
db 0
com: jp com_
con: jp con_
cog: jp cog_
bee: jp bee_
sou: jp sou_
db 0
ire: jp ire_
ird: jp ird_
ira: jp ira_
h3d: jp h3d_
pri: jp pri_
; îïíåò õóôòïêóô÷á
nuu db 0
h3r: jp h3r_
h3w: jp h3w_
joy: jp joy_
key: jp key_
cls: jp cls_
; óôáòûéê áäòåó ÷ H003
nr2 db 0
scr: jp scr_
gcr: jp gcr_
wri: jp wri_
rea: jp rea_
inp: jp inp_
; ôéð ëìá÷éáôõòù
kbd db 0
wst: jp wst_
hex: jp hex_
crr: jp crr_
s2l: jp s2l_
sum: jp sum_
db 0
fop: jp fop_
foa: jp foa_
fsy: jp fsy_
fsh: jp fsh_
fbm: jp fbm_
; ðïóìåäîéê éóðïìøúï÷áîîùê éäåîôéæéëáôïò
fid db 2
spx: jp spx_
gpx: jp gpx_
mgr: jp mgr_
fds: jp fds_
fll: jp fll_
db 0
bat: jp bat_
pux: jp pux_
gux: jp gux_
bas: jp bas_
ovl: jp ovl_
; îïíåò ðïäçòõöåîîïçï ï÷åòìåñ
nov db 0
chd: jp chd_
len: jp len_
cpy: jp cpy_
cat: jp cat_
fnd: jp fnd_
db 0
cpr: jp cpr_
nln: jp nln_
fpd: jp fop_d
pch: jp putch
rol: jp rol_
db 0
d1h: jp d1h_
d2h: jp d2h_
d4h: jp d4h_
d2s: jp d2s_
d4s: jp d4s_
db 0
emu: jp test_em
mem: jp mem_
mmc: jp mmc_
env: jp env_
grb: jp grb_
db 0
xgr: jp xgr_
xfi: jp xfi_
xwi: jp xwi_
xma: jp xma_
xad: jp xad_
hlh db 0
hlr: jp hlr_
hll: jp hll_
whl: jp whl_
jp ret_
jp ret_
db 0
; óéóôåíîùå ðåòåíåîîùå
hndl0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl1 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl2 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl3 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl4 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl5 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl6 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
hndl7 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
adram dw 0
acmd dw 0
aenv dw 0
atbl dw 0
nb db 0
gbit db 1
mgx dw _mgx
mgy dw _mgy
mtx db _mtx
mty db _mty
amem dw 0
mcom db 0
ncom db 0
menv dw 0
nnid dw 0
nid dw 0
dw 0
stmp db 0,0,0,0
flags db #ff,0,0,#ff,0
db 0,0,0,0,0,0,0,0,0,0,0
fnbuf db 0,0,0,0,0,0,0,0
fex db 0,0,0
fat db 0
fa0 db 0
fa1 db 0
fa2 db 0
fa3 db 0
cdir db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
disk_a db 0
disk_b db 0
disk_c db 0
disk_d db 0
disk_e db 0
disk_f db 0
disk_g db 0
disk_h db 0
db 0,0,0,0,0,0,0,0
nd db 0
ct db 0
cc db 0
cr db 0
cs db 4
cb db 0
db 0
disk db 0
cptr db 0,0,0,0
mem1 dw 0
mem2 dw 0
hdbuf db 0,0,0,0,0,0,0,0
hdext db 0
hdlen dw 0
hdadr dw 0
hdatr db 0
hdcrc dw 0
; ïâìáóôø ëïí.óôòïëé é ðåòåíåîîùè ïëòõöåîéñ
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ini_: jp init
copyr db "S004.0-ZX "
db #7f
db "1997 SHABARSHIN A",0
ext db " "
db "BAT"
db "SYS"
db "COM"
db "EXE"
db "OVL"
db "BAS"
db "LIB"
db "RDL"
db "PLG"
db "ASM"
db "BAK"
db "CPP"
db "DAT"
db "TXT"
db "$$$"
errmsg db "ERROR",0
rword1 db "C:/"
rword2 db "SYSTEM"
rword3 db "BATCH"
rword4 db "AUTO",0
db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
db #ff,#ff,#ff,#ff,#ff,#ff,#ff
db #ff,#ff,#ff,#ff,#ff,#ff,#ff
; ################################################################
; # #
; # $ZX KERNEL.COM #
; # #
; ################################################################
; èïìïäîùê ðåòåúáðõóë
rst_: ld sp,_sp_beg
rst_1: ld a,(_flag_p)
cp #ff
jp nz,rst_2
ld a,#9a
out (#7f),a
ld a,#00
out (#5f),a
; ïâîõìåîéå äåóëòéðôïòï÷
rst_2: ld c,8
ld a,0
ld hl,hndl0
ld de,#0010
rst_3: ld (hl),a
add hl,de
dec c
jp nz,rst_3
ret
;$ZX äòáê÷åò H003
; ֏:
; B - îïíåò õóôòïêóô÷á
; C - îïíåò òåçéóôòá
; A - äáîîùå (äìñ úáðéóé)
; ÷ùè:
; A - äáîîùå (ðòïþéôáîîùå)
; C - äáîîùå ó ðïòôá "ó"
; FLAG-C - úáîñôïóôø õóôòïêóô÷á
;H3D_: NOP
; NOP
; NOP
h3d_: di
push de
push hl
ld d,a
ld a,(fei)
or a
jp nz,h3_1
ld a,0
ld (adram),a
jp h3_2
h3_1: ld a,#fb
ld (adram),a
h3_2: ld a,#98
out (#7f),a
; ðåòåäáþá îïíåòá õóôòïêóô÷á ÷ òåçéóôò 7
ld a,b
out (#3f),a
ld a,#0e
out (#5f),a
inc a
out (#5f),a
dec a
out (#5f),a
; ðòï÷åòëá úáîñôïóôé õóôòïêóô÷á
in a,(#5f)
rla
jp c,h3_ee
; ðòï÷åòëá îïíåòá òåçéóôòá
ld a,c
cp 3
jp z,h3_r
cp 5
jp z,h3_r
; úáðéóø óï óôòïâïí
ld a,d
out (#3f),a
ld a,c
rlca
out (#5f),a
inc a
out (#5f),a
dec a
out (#5f),a
jp h3_e
; þôåîéå âåú óôòïâá
h3_r: ld a,#9a
out (#7f),a
ld a,c
rlca
out (#5f),a
in a,(#3f)
ld d,a
ld a,#98
out (#7f),a
ld a,d
h3_e: in a,(#5f)
ld c,a
rla
ld a,d
h3_ee: pop hl
pop de
jp adram
; òáúòåûåîéå ðòåòù÷áîéê
ire_: push af
ld a,#ff
ld (fei),a
pop af
ei
ret
; úáðòåýåîéå ðòåòù÷áîéê
ird_: di
push af
ld a,#00
ld (fei),a
pop af
ret
; òáúòåûåîù ìé ðòåòù÷áîéñ
; | CALL IRA
; | JZ YES
ira_: ld a,(fei)
cp #ff
ret
; äïóôõð ë ëáòôå ðáíñôé
; ÷è: HL - áäòåó âáêôá ðáíñôé
; ÷ùè: HL - áäòåó âáêôá ëáòôù
; A - óïïô÷åôóô÷õàýéê ëïä
mem_: push de
ld e,h
ld d,0
ld hl,(amem)
add hl,de
ld a,(hl)
pop de
ret
; ïðåòáãéé ó ðáíñôøà þåòåú ëáòôõ
; ÷è: HL - îáþáìøîùê áäòåó âáêôá
; DE - äìéîá âìïëá
; A - #00-ïó÷ïâïäéôø, éîáþå ëïä ðòïãåóóá
; ÷ùè: éúíåîåîéå ÷ ëáòôå ðáíñôé
mmc_: push af
push bc
push de
push hl
push hl
ld b,a
call mem
ex (sp),hl
add hl,de
dec hl
call mem
ex de,hl
pop hl
; hl - áäòåó îáþáìá ÷ ëáòôå
; de - áäòåó ëïîãá ÷ ëáòôå
mmc_1: ld (hl),b
ld a,h
cp d
jp nz,mmc_2
ld a,l
cp e
jp z,mmc_3
mmc_2: inc hl
jp mmc_1
mmc_3: pop hl
pop de
pop bc
pop af
ret
; ðòåäóôá÷éôø HL ÷ ðáòáçòáæáè (HL=HL/16)
; ÷è: HL - óìï÷ï
; _HLH - óôáòûéê âáêô
; ÷ùè: HL - óä÷éîõôïå óìï÷ï
hlr_: push af
ld a,l
and #f0
rrca
rrca
rrca
rrca
ld l,a
ld a,h
and #0f
rlca
rlca
rlca
rlca
or l
ld l,a
ld a,h
and #f0
rrca
rrca
rrca
rrca
ld h,a
ld a,(hlh)
and #0f
rlca
rlca
rlca
rlca
or h
ld h,a
pop af
ret
; ðòåïâòáúï÷áôø ðáòáçòáæù HL (HL=HL*16)
; ÷è: HL - óìï÷ï
; ÷ùè: HL - óä÷éîõôïå óìï÷ï
; _HLH - óôáòûéê âáêô
hll_: push af
ld a,h
and #f0
rrca
rrca
rrca
rrca
ld (hlh),a
ld a,h
and #0f
rlca
rlca
rlca
rlca
ld h,a
ld a,l
and #f0
rrca
rrca
rrca
rrca
or h
ld h,a
ld a,l
and #0f
rlca
rlca
rlca
rlca
ld l,a
pop af
ret
; ÷ù÷ïä óïïâýåîéñ ïâ ïûéâëå
; A - îïíåò ïûéâëé
err_: pop de
push af
call nln
ld hl,errmsg
call wst
ld c,#20
ld a,c
call wri
pop af
add a,#30
call wri
ld a,c
call wri
ld a,#28
call wri
ld a,d
call hex
ld a,e
call hex
ld a,#29
call wri
call nln
call nln
call bee
; MVI_A, #FF
; CALL KEY
; JMP RES
jp cpr
; PUSH_D
; RET
; ÷ùäåìéôø ïâìáóôø ðáíñôé
; ÷è: DE - òáúíåò ôòåâõåíïçï âìïëá ðáíñôé
; A - ëïä ðòïãåóóá-úáè÷áôþéëá
; ÷ùè: HL - áäòåó (0000 - åóìé îåõäáþá)
; FLAG_C - õóðåûîïóôø (JNC ERROR)
mmr_: push bc
push de
push af
ld a,e
and a
jp z,mmr_1
inc d
mmr_1: ld b,d
ld hl,(amem)
ex de,hl
ld hl,#ffff
call mem
mmr_2: ld c,b
mmr_3: ld a,(hl)
and a
jp nz,mmr_8
dec c
jp z,mmr_7
ld a,h
cp d
jp nz,mmr_4
ld a,l
cp e
jp z,mmr_9
mmr_4: dec hl
jp mmr_3
mmr_8: dec hl
jp mmr_2
; õäáþîï
mmr_7: pop af
ld h,l
ld l,0
pop de
call mmc
pop bc
scf
ret
; îå õäáþîï
mmr_9: ld hl,0
pop af
scf
ccf
pop de
pop bc
ret
; ïó÷ïâïäéôø ïâìáóôø ðáíñôé
; ÷è: HL - áäòåó îáþáìá ïó÷ïâïöäáåíïçï âìïëá ðáíñôé
; ÷ùè: A - ëïä ðòïãåóóá-÷ìáäåìøãá âìïëá
mmf_: push hl
call mem
and a
jp z,mmf_9
cp #ff
jp z,mmf_9
mmf_1: ld (hl),0
inc hl
cp (hl)
jp z,mmf_1
mmf_9: pop hl
ret
; õúîáôø ó÷ïâïäîá ìé ïâìáóôø ðáíñôé
; ÷è: HL - áäòåó îáþáìá âìïëá ðáíñôé
; DE - äìéîá âìïëá ðáíñôé
; ÷ùè: FLAG_Z - úáîñôïóôø (JZ BUSY)
mma_: push de
push hl
push hl
call mem
ex (sp),hl
add hl,de
dec hl
call mem
ex de,hl
pop hl
; hl - áäòåó îáþáìá ÷ ëáòôå
; de - áäòåó ëïîãá ÷ ëáòôå
mma_1: ld a,(hl)
and a
jp nz,mma_9
ld a,h
cp d
jp nz,mma_2
ld a,l
cp e
jp z,mma_3
mma_2: inc hl
jp mma_1
mma_3: xor a
mma_9: pop hl
pop de
ret
sav_:
vrf_:
loa_:
;$ZX óéóôåíîùê âéðåò
bee_: push hl
push de
push bc
push af
ld hl,407
ld de,200
call #03b5
pop af
pop bc
pop de
pop hl
ret
sou_:
;$ZX ïðòïóéôø äöïêóôéë ("ëåíðóôïî")
; ÷ùè: A - 5 íì.âéô
joy_: in a,(#1f)
and #1f
ret
;$ZX ïðòïóéôø ëìá÷éáôõòõ
; ֏:
; A - #00-îå ïöéäáôø, #FF-ïöéäáôø
; ÷ùè:
; A - #00-ëìá÷éûá îå îáöáôá, éîáþå ëïä
key_: push bc
push de
push hl
push af
key_0: ld a,#fe
in a,(#fe)
and 1
ld b,a
ld a,#7f
in a,(#fe)
and 2
ld c,a
or b
jp nz,key_1
; îáöáôù é cs é ss
ld d,#fe
jp key_e
key_1: ld a,b
or a
jp nz,key_2
ld hl,ktab_cs
jp key_4
key_2: ld a,c
or a
jp nz,key_3
ld hl,ktab_ss
jp key_4
key_3: ld hl,ktab
key_4: ld bc,#0005
ld e,#ff
key0: ld a,#fe
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key1: ld a,#fd
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key2: ld a,#fb
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key3: ld a,#f7
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key4: ld a,#ef
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key5: ld a,#df
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key6: ld a,#bf
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
add hl,bc
key7: ld a,#7f
ld d,a
in a,(#fe)
call key_f0
cp e
jp nz,key_10
; îå îáûìé îáöáôùè ëìá÷éû
pop af
push af
cp #ff
jp z,key_0
ld d,0
jp key_e
; îáûìé îáöáôõà ëìá÷éûõ
key_10: ld c,a
ld b,0
add hl,bc
ld d,(hl)
pop af
push af
cp #ff
jp nz,key_e
key_11: ld a,0
call key
or a
jp nz,key_11
key_e: pop af
ld a,d
pop hl
pop de
pop bc
ret
;$ZX îáêôé ðåò÷ùê îõìø ÷ A
; ÷è: A - âáêô ó ëìá÷éáôõòù
; D - áäòåó âìïëá ëìá÷éáôõòù
; ÷ùè: A - îïíåò ðåò÷ïçï îõìñ
key_f0: push de
push bc
ld b,d
ld e,0
ld d,a
key_f1: ld a,d
and 1
jp z,key_ff
key_f2: ld a,d
rrca
ld d,a
inc e
ld a,5
cp e
jp nz,key_f1
ld e,#ff
key_ff: ld a,b
cp #fe
jp nz,key_f3
ld a,e
cp 0
jp z,key_f2
key_f3: cp #7f
jp nz,key_f4
ld a,e
cp 1
jp z,key_f2
key_f4: ld a,e
pop bc
pop de
ret
; ôáâìéãá òáóëìáäëé ëìá÷éáôõòù
ktab db 0,"ZXCV"
db "ASDFG"
db "QWERT"
db "12345"
db "09876"
db "POIUY"
db #0d,"LKJH"
db #20,0,"MNB"
ktab_cs db 0,"zxcv"
db "asdfg"
db "qwert"
db #f1,#f2,#f3,#f4,#fb
db #08,#f0,#fa,#f8,#f9
db "poiuy"
db #0e,"lkjh"
db #ff,#fe,"mnb"
ktab_ss db #fe,#3a,#60,#3f,#2f
db #7e,#7c,#5c,#7b,#7d
db #09,#fc,#fd,#3c,#3e
db #21,#40,#23,#24,#25
db #5f,#29,#28,#27,#26
db #22,#3b,#7f,#5d,#5b
db #0f,#3d,#2b,#2d,#5e
db #f7,#00,#2e,#2c,#2a
;$ZX ðòïóôï ðïóôá÷éôø óéí÷ïì îá üëòáî
; ÷è: á - ëïä óéí÷ïìá
putch: push hl
push de
push bc
push af
ld a,2
call #1601
; at row,col
ld a,#16
rst #10
ld a,(cr)
rst #10
ld a,(cc)
rst #10
; ink color
ld a,#10
rst #10
ld a,(cs)
rst #10
; paper color
ld a,#11
rst #10
ld a,(cb)
rst #10
call getscr
pop af
push af
ld (hl),a
rst #10
pop af
pop bc
pop de
pop hl
ret
;$ZX ÷åòîõôø óéí÷ïì éú ôåëõýåê ðïúéãéé
; ÷ùè:
; A - ëïä óéí÷ïìá
; D - ã÷åô óéí÷ïìá
; E - ã÷åô æïîá
rea_: push hl
call getscr
ld a,(hl)
push af
ld de,#8f00
add hl,de
ld a,(hl)
add a,#07
ld d,a
ld a,(hl)
add a,#38
ld e,a
pop af
pop hl
ret
;$ZX ÷åòîõôø áäòåó ôåëõýåçï óéí÷ïìá
getscr: push af
push de
ld a,(cc)
ld l,a
ld a,(cr)
and #18
rrca
rrca
rrca
ld h,a
ld a,(cr)
and #07
rlca
rlca
rlca
rlca
rlca
or l
ld l,a
ld de,_screen
add hl,de
pop de
pop af
ret
spx_:
gpx_:
;$ZX óä÷éç üëòáîá
rol_: push af
push hl
push de
ld a,(cc)
ld d,a
ld a,(cr)
ld e,a
push de
ld a,0
ld (cc),a
ld (cr),a
ld de,_mtx
ld a,(mty)
ld c,a
dec c
rol_0: ld a,(mtx)
ld b,a
rol_1: call getscr
add hl,de
ld a,(hl)
call wri
dec b
jp nz,rol_1
dec c
jp nz,rol_0
ld a,(mtx)
ld c,a
dec c
rol_3: ld a,#20
call wri
dec c
jp nz,rol_3
call pch
pop de
ld a,e
cp 0
jp z,rol_2
dec a
rol_2: ld (cr),a
ld a,d
ld (cc),a
pop de
pop hl
pop af
ret
;$ZX éîéãéáìéúáãéñ óéóôåíù
init: ld sp,_sp_beg
call rst_1
; õóôáîï÷ëá adram
ld hl,adram
ld (hl),#00
inc hl
ld (hl),#c9
; ðåòåîïó "VECTOR.DAT"
ld a,(_flag_v)
cp #ff
jp nz,init01
ld b,0
ld c,2
ld a,#20
; CALL _H003
ld c,1
ld a,#08
; CALL _H003
ld d,#10
ld hl,_vector
init02: ld a,d
ld c,0
; CALL _H003
ld c,4
; CALL _H003
ld (hl),a
inc hl
inc d
ld a,d
cp #ff
jp nz,init02
; éîéãéáìéúáãéñ ðáíñôé
init01: ld hl,_mem1
ld (mem1),hl
ld hl,_mem2
ld (mem2),hl
ld hl,_blo1
ld (atbl),hl
ld hl,_card
ld (amem),hl
ld de,_size
ld a,0
call fll
ld hl,0
ld (nnid),hl
ld (nid),hl
ld a,h
ld (nb),a
; éîéãéáìéúáãéñ ëáòôù ðáíñôé
ex de,hl
ld hl,(mem1)
ex de,hl
ld a,#ff
call mmc
ld hl,(mem2)
ex de,hl
ld hl,0
ld a,l
sub e
ld l,a
ld a,h
sbc a,d
ld h,a
ex de,hl
ld a,#ff
call mmc
; õóôáîï÷ëá ëõòóïòá
ld a,1
ld (ct),a
ld a,0
ld (cc),a
ld (cr),a
ld (cb),a
ld a,4
ld (cs),a
; õóôáîï÷ëá íáëóéíáìøîïçï òáúòåûåîéñ
ld a,_gbit
ld (gbit),a
ld hl,_mgx
ld (mgx),hl
ld hl,_mgy
ld (mgy),hl
ld a,_mtx
ld (mtx),a
ld a,_mty
ld (mty),a
; õóôáîï÷ëá áäòåóá ëïí.óôòïëé
ld hl,_cmd
ld (acmd),hl
ld a,_mcmd
ld (mcom),a
ld a,0
ld (ncom),a
; éîéãéáìéúáãéñ ïâìáóôé ðåòåíåîîùè ïëòõöåîéñ
ld hl,_env
ld (aenv),hl
ld hl,_men
ld (menv),hl
ld hl,(aenv)
ld (hl),0
inc hl
ld (hl),0
; éîéãéáìéúáãéñ âõæåòá ðïéóëá
ld a,0
ld (fnbuf),a
; õóôáîï÷ëá ôéðá ûòéæôá kbd
ld a,0
ld (kbd),a
; éîéãéáìéúáãéñ äéóëï÷ïê óéóôåíù
ld a,(_flag_d)
cp #ff
jp nz,init10
; õóôáîï÷ëá äéóëï÷
ld c,8
ld hl,disk_a
ld b,0
init03: ld (hl),b
inc b
inc hl
dec c
jp nz,init03
; äéóë á - ram
ld a,#a0
ld (disk_a),a
; äéóë c - rom
ld a,#92
ld (disk_c),a
; ëïìéþåóô÷ï äéóëï÷ ÷ óéóôåíå
ld a,2
ld (nd),a
; õóôáîï÷ëá äéóëá c: ôåëõýéí
ld hl,cdir
ld (hl),'C'
inc hl
ld (hl),#3a
inc hl
ld (hl),'/'
inc hl
ld a,0
ld (hl),a
ld c,a
ld hl,cptr
ld (hl),c
inc hl
ld (hl),c
inc hl
ld (hl),#20
inc hl
ld (hl),c
ld a,#02
ld (disk),a
; òáúòåûåîéå ðòåòù÷áîéê
init10: call ire
; úáðõóë "AUTO.BAT"
ld a,(_flag_a)
cp #ff
jp nz,init04
ld hl,rword4
; åóìé <> îåô, âõäåô ïûéâëá !!!
call bat
; ïþéóôëá üëòáîá é ÷ù÷ïä óôòïëé
init04: ld a,(_flag_s)
cp #ff
jp nz,init06
ld a,1
ld b,0
ld c,b
ld e,b
ld d,4
call scr
call cls
ld hl,copyr
call wst
call nln
call nln
db 0,0
init06: call cpr
; ################################################################
; # #
; # STD.OVL #
; # #
; ################################################################
; ðáëåôîïå þôåîéå éú H003
; ֏:
; A - éíñ äéóëá
; HL - áäòåó âõæåòá ÷ ïúõ
; DE - áäòåó îáþáìá âìïëá
; BC - äìéîá âìïëá
; åóìé A=FF, ôï ïâòáýåîéå ë äòõçïíõ õóôò.
; NUU - îïíåò õóôòïêóô÷á
; NR2 - óôáòûéê áäòåó
; ÷ùè: úáðïìîåîéå âõæåòá
h3r_: di
push bc
push de
push hl
push af
cp #ff
jp z,h3r_f
; äéóëé
push bc
call fpd
ld a,c
pop bc
rlca
rlca
rlca
rlca
ld (nr2),a
ld a,1
ld (nuu),a
; îå äéóëé
h3r_f: push bc
ld a,(nuu)
ld b,a
ld c,2
ld a,(nr2)
call h3d
pop bc
h3r_0: push bc
ld a,(nuu)
ld b,a
ld c,1
ld a,d
call h3d
ld c,0
ld a,e
call h3d
ld c,4
call h3d
ld (hl),a
inc hl
inc de
pop bc
dec bc
ld a,b
or c
jp nz,h3r_0
call ira
jp nz,h3r_e
ei
h3r_e: pop af
pop hl
pop de
pop bc
ret
; ðáëåôîáñ úáðéóø ÷ H003
; ֏:
; A - éíñ äéóëá
; HL - áäòåó âìïëá ÷ ïúõ
; DE - áäòåó îáþáìá ÷ H003
; BC - äìéîá âìïëá
; åóìé A=FF, ôï ïâòáýåîéå ë äòõçïíõ õóôò.
; NUU - îïíåò õóôòïêóô÷á
; NR2 - óôáòûéê áäòåó
; ÷ùè: úáðéóø ÷ H003
h3w_: di
push bc
push de
push hl
push af
cp #ff
jp z,h3w_f
; äéóëé
push bc
call fpd
ld a,c
pop bc
rlca
rlca
rlca
rlca
ld (nr2),a
ld a,1
ld (nuu),a
; îå äéóëé
h3w_f: push bc
ld a,(nuu)
ld b,a
ld c,2
ld a,(nr2)
call h3d
pop bc
h3w_0: push bc
ld a,(nuu)
ld b,a
ld c,1
ld a,d
call h3d
ld c,0
ld a,e
call h3d
ld c,3
ld a,(hl)
call h3d
inc hl
inc de
pop bc
dec bc
ld a,b
or c
jp nz,h3w_0
call ira
jp nz,h3w_e
ei
h3w_e: pop af
pop hl
pop de
pop bc
ret
; ÷ùðïìîéôø óôòïëõ ëáë ëïíáîäîõà
; ÷è: HL - áäòåó óôòïëé
com_: ld a,(hl)
; ðòï÷åòëá îá ðõóôõà óôòïëõ
cp 0
jp z,com_e
; ðòï÷åòëá îá ôåóô
cp '#'
jp nz,com_0
call test_em
jp com_e
; ðòï÷åòëá îá ÷ùèïä äìñ üíõìñôïòá
com_0: cp '^'
jp nz,com_1
halt
; ðòï÷åòëá îá ÷ùèïä äìñ zx
com_1: cp '%'
jp nz,com_2
pop hl
pop hl
jp com_e
; ðòï÷åòëá îá óíåîõ äéóëï÷
com_2: inc hl
ld a,(hl)
cp #3a
jp nz,com_2_
dec hl
ld d,(hl)
; d - new disk
ld a,(cdir)
cp d
jp z,com_e
ld a,d
call fpd
xor a
ld hl,cptr
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),c
ld hl,cdir
ld (hl),d
inc hl
ld (hl),#3a
inc hl
ld (hl),#5c
inc hl
ld (hl),0
jp com_e
com_2_: dec hl
ex de,hl
ld hl,(acmd)
ld a,0
call cpy
; a = 0
call cog
ld hl,fnbuf
push hl
ld b,#20
com_3: ex de,hl
ld a,(hl)
ex de,hl
or a
jp z,com_4
cp b
jp z,com_4
ld (hl),a
inc hl
inc de
jp com_3
com_4: ld (hl),0
pop hl
push hl
; ðïéóë ÷ ôåëõýåí ëáôáìïçå
com_4_: ld a,#11
call fop
jp nc,com_40
ld d,a
; ðòï÷åòëá îá .com
com_41: ld a,(hdext)
cp 3
jp z,com_5
xor a
call fop
jp c,com_41
; ðïéóë ÷ ëáôáìïçå c:/system
com_40: pop hl
push hl
call fsy
jp nc,com_er
ld d,a
com_5: pop hl
ld bc,#0010
ld hl,(fa0)
add hl,bc
ld a,d
ex de,hl
ld hl,(hdlen)
call hll
ld b,h
ld c,l
ld hl,(hdadr)
call h3r
jp (hl)
com_er: ld a,5
call err
com_e: ret
; ðïäóþéôáôø ëïìéþåóô÷ï óìï÷ ÷ óôòïëå
; ֏:
; HL - áäòåó óôòïëé
; ÷ùè:
; A - ëïìéþåóô÷ï óìï÷
con_: push hl
push bc
ld c,0
ld b,#20
con_1: ld a,(hl)
or a
jp z,con_e
cp b
jp nz,con_ns
inc hl
jp con_1
con_ns: inc c
con_2: ld a,(hl)
or a
jp z,con_e
cp b
jp z,con_1
inc hl
ld a,h
or l
jp nz,con_2
con_e: ld a,c
pop bc
pop hl
ret
; ÷åòîõôø õëáúáôåìø îá N-ïå óìï÷ï ÷ óôòïëå
; ֏:
; HL - áäòåó óôòïëé
; A - îïíåò óìï÷á (0-ðåò÷ïå)
; ÷ùè:
; DE - õëáúáôåìø îá óìï÷ï
cog_: push af
push hl
push bc
ld c,a
ld b,#20
cog_1: ld a,(hl)
cp b
jp nz,cog_ns
inc hl
jp cog_1
cog_ns: ld a,c
or a
jp z,cog_e
dec c
cog_2: ld a,(hl)
cp b
jp z,cog_1
inc hl
ld a,h
or l
jp z,cog_e
jp cog_2
cog_e: ld d,h
ld e,l
pop bc
pop hl
pop af
ret
; ÷ù÷ïä óéí÷ïìá îá ðòéîôåò
; ÷è: A - ÷ù÷ïäéíùê óéí÷ïì
; ÷ùè: FLAG-C - ïûéâëá
pri_: push bc
ld b,0
ld c,4
call h3d
pop bc
ret
; ïþéóôéôø üëòáî
cls_: push af
push hl
ld a,0
ld (cc),a
ld (cr),a
ld a,(mty)
ld l,a
cls_0: ld a,(mtx)
ld h,a
ld a,l
cp 1
jp nz,cls_1
dec h
cls_1: ld a,#20
call wri
dec h
jp nz,cls_1
dec l
jp nz,cls_0
ld a,#20
call pch
ld a,0
ld (cc),a
ld (cr),a
pop hl
pop af
ret
; õóôáîï÷éôø áôòéâõôù ëõòóïòá
; ֏:
; A - ÷éä (00-îå÷éä. 01-ðïäþ. 02-ðòñíïõç.)
; B - óôïìâåã (X)
; C - óôòïëá (Y)
; D - ã÷åô óéí÷ïìá
; E - ã÷åô æïîá
scr_: push hl
ld (ct),a
ld a,b
ld (cc),a
ld a,c
ld (cr),a
ld a,d
ld (cs),a
ld a,e
ld (cb),a
pop hl
ret
; ðïìõþéôø áôòéâõôù ëõòóïòá
; ÷ùè:
; A - ÷éä (00-îå÷éä. 01-ðïäþ. 02-ðòñíïõç.)
; B - óôïìâåã (X)
; C - óôòïëá (Y)
; D - ã÷åô óéí÷ïìá
; E - ã÷åô æïîá
gcr_: push hl
ld a,(cc)
ld b,a
ld a,(cr)
ld c,a
ld a,(cs)
ld d,a
ld a,(cb)
ld e,a
ld a,(ct)
pop hl
ret
; ÷ù÷åóôé óéí÷ïì ÷ ôåëõýõà ðïúéãéà
; ÷è: á - ëïä óéí÷ïìá
wri_: call pch
call crr
ret
; óôòïëï÷ùê òåäáëôïò
; ÷è: HL - òåäáëôéòõåíáñ óôòïëá
inp_: push af
push bc
push de
push hl
ld de,0
or a
jp nz,inp_0
ld c,16
ld b,'*'
jp inp_00
inp_0: ld c,a
ld b,0
inp_00: push hl
inp_01: add hl,de
ld a,(hl)
or a
jp z,inp_e0
inc de
pop hl
push hl
jp inp_01
inp_e0: ld (hl),#20
inc hl
ld (hl),#00
pop hl
inc e
ld a,e
cp c
jp c,inp_02
jp inp_03
inp_02: ld a,d
or a
jp z,inp_11
ld d,#00
inp_03: ld e,c
dec e
inp_11: jp inp_rr
inp_1: ld a,#ff
call key
; óôòåìëá ÷ðòá÷ï
cp #fa
jp nz,inp_2
inc d
ld a,d
cp e
jp c,inp_rr
; CMP_C
; JNZ INP_RR
dec d
jp inp_1
; óôòåìëá ÷ìå÷ï
inp_2: cp #fb
jp nz,inp_3
ld a,d
or a
jp z,inp_1
dec d
jp inp_rr
; óôåòåôø
inp_3: cp #08
jp nz,inp_4
ld a,d
or a
jp z,inp_1
dec e
dec d
ld a,d
push hl
push de
ld e,d
ld d,0
add hl,de
inp_31: inc hl
ld a,(hl)
dec hl
ld (hl),a
inc hl
dec e
cp c
jp nz,inp_31
pop de
pop hl
jp inp_rr
; ÷÷åóôé
inp_4: cp #0d
jp z,inp_en
; ÷ù÷åóôé óéí÷ïì
cp #20
jp c,inp_1
cp #80
jp nc,inp_1
push af
inc e
ld a,e
cp c
jp nz,inp_5
dec e
pop af
jp inp_1
inp_5: pop af
push hl
push de
push af
ld a,d
ld d,0
ld e,c
dec e
dec e
add hl,de
ld d,a
inp_6: ld a,(hl)
inc hl
ld (hl),a
dec hl
dec hl
ld a,e
dec e
cp d
jp nz,inp_6
pop af
inc hl
ld (hl),a
pop de
pop hl
inc d
inp_rr: call inp_re
jp inp_1
inp_en: ld d,#ff
call inp_re
ld d,0
add hl,de
dec hl
ld (hl),0
pop hl
pop de
pop bc
pop af
ret
; ðåòåòéóï÷áôø
inp_re: push hl
ld a,(cc)
push af
ld a,(cr)
push af
ld a,0
inp_r1: cp d
jp nz,inp_r2
push af
ld a,(cs)
push af
ld a,(cb)
ld (cs),a
pop af
ld (cb),a
ld a,b
or a
jp nz,inp_p1
ld a,(hl)
jp inp_w1
inp_p1: ld a,b
inp_w1: call wri
ld a,(cs)
push af
ld a,(cb)
ld (cs),a
pop af
ld (cb),a
pop af
jp inp_r3
inp_r2: push af
ld a,b
or a
jp nz,inp_p2
ld a,(hl)
jp inp_w2
inp_p2: ld a,b
inp_w2: call wri
pop af
inp_r3: inc hl
inc a
cp e
jp nz,inp_r1
ld a,#20
call wri
pop af
ld (cr),a
pop af
ld (cc),a
pop hl
ret
; ÷ù÷åóôé óôòïëõ ÷ ôåëõýõà ðïúéãéà
wst_: push af
wst_1: ld a,(hl)
cp 0
jp z,wst_0
cp #0a
jp nz,wst_3
call nln
jp wst_2
wst_3: call wri
wst_2: inc hl
jp wst_1
wst_0: pop af
ret
; ÷ù÷åóôé âáêô ÷ 16-ïí ÷éäå
; ÷è: á - âáêô
hex_: push af
push de
call d1h
ld a,d
call wri
ld a,e
call wri
pop de
pop af
ret
; óä÷éîõôø ëõòóïò ÷ðòá÷ï
crr_: push af
push hl
ld a,(mtx)
ld h,a
ld a,(cc)
inc a
cp h
jp z,crr_eq
ld (cc),a
jp crr_en
crr_eq: call nln
crr_en: pop hl
pop af
ret
s2l_:
sum_:
; ïðåòáãéé ó æáêìáíé
; ֏:
; A - îïíåò æõîëãéé
; ...
; ÷ùè:
; ...
fop_: cp #00
jp nz,fop_01
; ðï÷ôïòîùê ðïéóë
ld a,(fa3)
call fpd
cp 3
jp c,fop_00
xor a
jp foa
fop_00: or a
jp z,fop000
ld h,0
jp fop_fn
fop_01: cp #01
jp nz,fop_1
; æïòíáôéòï÷áîéå äéóëá d (a,b,...)
ld a,d
call fpd
cp 3
jp c,fop_02
ld a,#01
jp foa
fop_02: or a
jp z,fop001
jp fop_er
ret
fop_1: cp #20
jp nc,fop_2
; ôåëõýéê äéóë (1*)
push af
ld a,(cdir)
call fpd
cp 3
jp c,fop_10
pop af
jp foa
fop01_: pop af
jp fop010
fop_10: or a
jp z,fop01_
pop af
cp #10
jp nz,fop_11
ret
fop_11: cp #11
jp nz,fop_12
; ðïéóë æáêìá ÷ ôåë.
fop_fn: call fnf_
fop_cc: cp #ff
scf
jp nz,fo11_1
ccf
fo11_1: ret
fop_12:
ret
fop_2: cp #30
jp nc,fop_3
; äåóëòéðôïò d (2*)
push af
push de
push hl
ld hl,hndl0
ld a,d
rlca
rlca
rlca
rlca
ld e,a
ld d,0
add hl,de
ld a,(hl)
or a
jp z,fop_er
ld e,5
add hl,de
ld a,(hl)
pop hl
pop de
call fpd
cp 3
jp c,fop_20
pop af
jp foa
fop02_: pop af
jp fop020
fop_20: or a
jp z,fop02_
pop af
ret
fop_3: cp #40
jp nc,fop_er
; ðõôø hl (3*)
push af
ld a,(hl)
call fpd
cp 3
jp c,fop_30
pop af
jp foa
fop_30: or a
jp z,fop_e2
pop af
ret
fop_e2: pop af
fop_er: ld a,7
call err
ret
; éú éíåîé äéóëá ðïìõþéôø A->B,C (FPD)
;
fop_d: push de
push hl
sub 'A'
ld e,a
ld d,#00
ld hl,disk_a
add hl,de
ld a,(hl)
rla
jp c,fop_d1
ld a,7
call err
ret
fop_d1: and #e0
rlca
rlca
rlca
ld b,a
ld a,(hl)
and #0f
ld c,a
ld a,b
pop hl
pop de
ret
; MAIN ROM
fop010:
fop020:
fop000:
fop001:
; áìøôåòîáôé÷îùå ïðåòáãéé ó æáêìáíé
; ֏:
; A - îïíåò æõîëãéé
; B - éäåîôéæéëáôïò äéóëá
; C - äïðïìîéôåìøîùê éäåîôéæéëáôïò
; ...
; ÷ùè:
; ...
foa_: ld a,7
call err
ret
; ðïéóë æáêìá ÷ ðïäëáôáìïçå C:/SYSTEM
; ֏:
; HL - õë. îá éíñ æáêìá
; ÷ùè:
; A - éíñ äéóëá
; HL - áäòåó ÷ ðáòáçòáæáè
; FLAG-C=1 - æáêì îáêäåî
fsy_: ld a,h
or a
jp z,fop_fn
push de
ex de,hl
ld hl,fnbuf
xor a
call cpy
ld de,_system
ld a,'C'
ld (fa3),a
call fnf_1
pop de
jp fop_cc
; ðïéóë æáêìá îá ë÷áúéäéóëáè (ôåë.)
; ֏:
; HL - áäòåó óôòïëé (åóìé H=0-ðï÷ôïòîùê)
; ÷ùè:
; A - äéóë (FF-æáêì îå îáêäåî)
; HL - áäòåó ÷ ðáòáçòáæáè
fnf_: ld a,h
or a
jp z,fnf_nx
ld a,0
ex de,hl
ld hl,fnbuf
call cpy
ld hl,(cptr)
ex de,hl
ld a,(cdir)
ld (fa3),a
; _fa3 - éíñ äéóëá
; _fnbuf - ûáâìïî äìñ ðïéóëá
; de - ôåëõýéê õëáúáôåìø îá æáêì
fnf_1: ld hl,hdbuf
ld a,(fa3)
ld bc,#0010
call h3r
ld a,(hl)
cp #ee
jp z,fnf_ot
cp #ff
jp z,fnf_en
push de
ld de,fnbuf
call fsh
jp z,fnf_ee
; üôïô æáêì îå ðïäèïäéô
fnf_2: ld hl,(hdlen)
inc hl
call hll
ld b,h
ld c,l
pop de
ex de,hl
add hl,bc
ex de,hl
jp fnf_1
; ïô÷åô÷éôåìø |ee|nn|nn|
fnf_ot: push hl
inc hl
ld e,(hl)
inc hl
ld d,(hl)
pop hl
jp fnf_1
; ÷ ôåëõýåí ëáôáìïçå æáêìá îåô
fnf_en: ld a,#ff
ret
; æáêì îáêäåî
fnf_ee: pop hl
ld (fa0),hl
xor a
ld (hlh),a
call hlr
ld a,(fa3)
ret
; next search
fnf_nx: ld hl,(fa0)
ex de,hl
ld hl,hdbuf
ld a,(fa3)
ld bc,#0010
call h3r
push de
jp fnf_2
mgr_:
fds_:
; úáðïìîåîéå ðáíñôé âáêôïí
; ֏:
; A - âáêô-ûáâìïî
; HL - îáþáìøîùê áäòåó
; DE - äìéîá úáðïìîñåíïçï âìïëá
; ÷ùè:
; éúíåîåîéñ ÷ ïúõ
fll_: push hl
push de
push af
fll0: pop af
ld (hl),a
inc hl
dec de
push af
ld a,d
or e
jp nz,fll0
pop af
pop de
pop hl
ret
bat_:
; ÷åòîõôø îïíåò ðï óôòïëå òáóûéòåîéñ
; ֏:
; HL - áäòåó óôòïëé
; ÷ùè:
; A - îïíåò
pux_: push de
push hl
xor a
ex de,hl
ld hl,stmp
pux_1: call gux
push af
ld a,0
call chd
jp z,pux_ee
pop af
inc a
; a íåîøûå 16
cp 16
jp c,pux_1
ld a,(de)
jp pux_e
pux_ee: pop af
pux_e: pop hl
pop de
ret
; ÷åòîõôø óôòïëõ òáóûéòåîéñ ðï îïíåòõ
; ֏:
; A - îïíåò
; HL - áäòåó âõæåòá óôòïëé
; ÷ùè:
; úáðéóø óôòïëé ÷ âõæåò
gux_: push hl
push de
push af
; a âïìøûå éìé òá÷åî 16
cp 16
jp nc,gux_1
ld de,ext
gux_2: or a
jp z,gux_3
inc de
inc de
inc de
dec a
jp gux_2
gux_3: ld a,(de)
ld (hl),a
inc hl
inc de
ld a,(de)
ld (hl),a
inc hl
inc de
ld a,(de)
ld (hl),a
inc hl
ld (hl),0
jp gux_e
gux_1: ld (hl),a
inc hl
ld (hl),0
gux_e: pop af
pop de
pop hl
ret
bas_:
ovl_:
; óòá÷îåîéå óôòïë
; ֏:
; A - ôåòíéîáìøîùê óéí÷ïì (éìé FF-äìéîá ÷ BC)
; HL - áäòåó ïäîïê óôòïëé
; DE - áäòåó äòõçïê óôòïëé
; BE - (åóìé A=FF) äìéîá óôòïë
; ÷ùè:
; A - FF-íåîøûå, 0-òá÷îá, 1-âïìøûå
; FLAG-Z - 1-åóìé òá÷îù
chd_: push bc
push de
push hl
cp #ff
jp z,chd_bc
ld b,a
chd_1: ld a,(hl)
cp b
jp z,chd_k
ex de,hl
cp (hl)
ex de,hl
inc hl
inc de
; ðåòåèïä åóìé íåîøûå
chd_pp: jp c,chd_me
jp z,chd_1
jp chd_bo
chd_k: ex de,hl
cp (hl)
jp z,chd_ee
jp chd_pp
chd_bc: ld a,b
or c
jp z,chd_ee
ld a,(hl)
ex de,hl
cp (hl)
ex de,hl
inc hl
inc de
dec bc
jp c,chd_me
jp z,chd_bc
chd_bo: sub a
inc a
jp chd_e
chd_ee: sub a
jp chd_e
chd_me: sub a
dec a
chd_e: pop hl
pop de
pop bc
ret
; ðïäóþÒô äìéîù óôòïëé
; ֏:
; A - ôåòíéîáìøîùê óéí÷ïì
; HL - áäòåó óôòïëé
; ÷ùè:
; BC - äìéîá óôòïëé âåú ôåòíéîáìøîïçï óéí÷.
len_: push af
push de
push hl
ld d,a
ld bc,0
len_1: ld a,(hl)
cp d
jp z,len_e
inc hl
inc bc
ld a,b
or c
jp z,len_e
jp len_1
len_e: pop hl
pop de
pop af
ret
; ëïðéòï÷áîéå óôòïë
; ֏:
; A - ôåòíéîáìøîùê óéí÷ïì (éìé FF-äìéîá ÷ BC)
; HL - áäòåó ëïðéòï÷áîéñ
; DE - áäòåó ëïðéòõåíïê óôòïëé
; BC - (åóìé A=FF) äìéîá óôòïë
cpy_: push bc
push de
push hl
push af
ld a,h
cp d
jp nz,cpy_1
ld a,l
cp e
jp z,cpy_e
cpy_1: pop af
push af
cp #ff
jp z,cpy_bc
ld b,a
cpy_2: ex de,hl
ld a,(hl)
ex de,hl
cp b
jp z,cpy_t
ld (hl),a
inc hl
inc de
ld a,l
or h
; ïûéâëá - ôåòíéîáìøîïçï óéí÷ïìá îåô ÷ óôòïëå
jp z,cpy_e
jp cpy_2
cpy_t: ld (hl),0
jp cpy_e
cpy_bc: ld a,b
or c
jp z,cpy_t
ex de,hl
ld a,(hl)
ex de,hl
ld (hl),a
inc hl
inc de
dec bc
jp cpy_bc
cpy_e: pop af
pop hl
pop de
pop bc
ret
; óëìåé÷áîéå óôòïë
; ֏:
; A - ôåòíéîáìøîùê óéí÷ïì (éìé FF-äìéîá ÷ BC)
; HL - áäòåó óôòïëé-ðòéÒíîéëá
; DE - áäòåó óôòïëé-éóôïþîéëá
; BC - (åóìé A=FF) äìéîá óôòïë
cat_: push bc
push de
push hl
push af
cp #ff
jp z,cat_bc
ld b,a
cat_1: ld a,(hl)
cp b
jp z,cat_2
inc hl
ld a,h
or l
; ïûéâëá - ôåòíéîáìøîïçï óéí÷ïìá îåô ÷ óôòïëå
jp z,cat_e
jp cat_1
cat_2: ld a,b
call cpy
jp cat_e
cat_bc: push bc
cat_3: inc hl
dec bc
ld a,b
or c
jp nz,cat_3
pop bc
ld a,#ff
call cpy
cat_e: pop af
pop hl
pop de
pop bc
ret
; îáèïöäåîéå ðïäóôòïëé ÷ óôòïëå
; ֏:
; HL - áäòåó óôòïëé
; BC - äìéîá óôòïëé
; DE - áäòåó éóëïíïê ðïäóôòïëé
; A - äìéîá ðïäóôòïëé
; ÷ùè:
; HL - áäòåó îáêäåîîïê ðïäóôòïëé
; FLAG-C=1 - ðïäóôòïëá îå îáêäåîá
fnd_: ld a,#0b
call err
ret
; úáðõóë ëïíáîäîïçï ðòïãåóóïòá
; (ðïäðòïçòáííá âåú ÷ùèïäá !!!)
cpr_: ld hl,cdir
call wst
ld a,'>'
call wri
ld hl,(acmd)
ld (hl),0
; íáëó. äìéîá ëïí.óôòïëé
ld a,(mcom)
call inp
call nln
call com
jp cpr_
; ðåòå÷ïä óôòïëé
nln_: push af
push hl
ld a,(mty)
ld h,a
ld a,(cr)
inc a
cp h
jp z,nln_eq
ld (cr),a
jp nln_en
nln_eq: ld (cr),a
call rol
nln_en: ld a,0
ld (cc),a
pop hl
pop af
ret
; óòá÷îåîéå óôòïëé ó ûáâìïîïí
; ֏:
; HL - óôòïëá
; DE - ûáâìïî
; ÷ùè: FLAG-Z=1 åóìé òá÷îù
fsh_: push hl
push de
chd_f_: ex de,hl
ld a,(hl)
ex de,hl
cp '*'
jp z,chd_f1
cp (hl)
jp nz,chd_f2
cp 0
jp z,chd_f1
inc hl
inc de
jp chd_f_
chd_f2: sub a
inc a
jp chd_f0
chd_f1: sub a
chd_f0: pop de
pop hl
ret
fbm_:
ret
; A ÷ 1 HEX ÷ A
; ֏: A
; ÷ùè: A
d0h: and #0f
add a,#30
cp #3a
ret c
add a,#07
ret
; âáêô á ÷ HEX -> DE
; ֏: A
; ÷ùè: DE
d1h_: push af
push bc
push hl
ld b,a
call d0h
ld e,a
ld a,b
rrca
rrca
rrca
rrca
call d0h
ld d,a
pop hl
pop bc
pop af
ret
; BC ÷ HEX -> (HL)
; ÷è: BC, HL-áäòåó óôòïëé
; ÷ùè: éúíåîåîéñ ðï HL
; HL-õëáúù÷áåô îá óì.óéí÷ïì
d2h_: push af
push de
push bc
ld a,b
call d1h
ld (hl),d
inc hl
ld (hl),e
inc hl
ld a,c
call d1h
ld (hl),d
inc hl
ld (hl),e
inc hl
ld (hl),0
pop bc
pop de
pop af
ret
; BCDE ÷ HEX -> (HL)
; ÷è: BC,DE, HL-áäòåó óôòïëé
; ÷ùè: éúíåîåîéñ ðï HL
; HL-õëáúù÷áåô îá óì.óéí÷ïì
d4h_: push af
push de
push bc
call d2h
push de
pop bc
call d2h
pop bc
pop de
pop af
ret
; ðåòå÷ïä BC ÷ äåóñôéþîõà úáðéóø
; ֏:
; BC - óìï÷ï äìñ ðåòå÷ïäá
; HL - áäòåó âõæåòîïê óôòïëé
; ÷ùè:
; éúíåîåîéå ÷ âõæåòîïê óôòïëå
d2s_: push af
push bc
push de
push hl
ex de,hl
; -10.000
ld hl,#d8f0
ld (stmp),hl
call d2s_s
; -1.000
ld hl,#fc18
ld (stmp),hl
call d2s_s
; -100
ld hl,#ff9c
ld (stmp),hl
call d2s_s
; -10
ld hl,#fff6
ld (stmp),hl
call d2s_s
; -1
ld hl,#ffff
ld (stmp),hl
call d2s_s
ex de,hl
ld (hl),0
pop hl
push hl
xor a
ld c,a
d2s_2: ld a,(hl)
or a
jp z,d2s_4
cp '0'
jp nz,d2s_3
ld a,c
or a
jp nz,d2s_3
ld (hl),#20
inc hl
jp d2s_2
d2s_3: inc hl
inc c
jp d2s_2
d2s_4: pop hl
pop de
pop bc
pop af
ret
d2s_s: xor a
push bc
d2s_1: ld hl,(stmp)
pop bc
push bc
add hl,bc
ld c,a
ld a,h
or a
jp m,d2s_1m
pop af
inc c
ld a,c
ld b,h
ld c,l
push bc
jp d2s_1
d2s_1m: ld a,c
pop bc
ex de,hl
add a,'0'
d2s_1w: ld (hl),a
inc hl
ex de,hl
ret
d4s_:
; ÷ù÷åóôé HL îá üëòáî ÷ HEX ÷éäå
; ÷è: HL - óìï÷ï
; ÷ùè: ÷ù÷ïä îá üëòáî ÷ HEX ÷éäå
whl_: push af
ld a,h
call hex
ld a,l
call hex
pop af
ret
grb_:
env_:
xgr_:
xfi_:
xwi_:
xma_:
xad_:
ret_: ret
; ôåóô üíõìñôïòá
test_em:
push hl
ld hl,test_s
call wst
call nln
ld de,300
ld a,#aa
call mmr
call whl
call nln
ld de,100
ld a,#bb
call mmr
call whl
call nln
push hl
ld de,512
ld a,#cc
call mmr
call whl
call nln
pop hl
call mmf
call hex
call nln
pop hl
ret
test_u: call _util
pop hl
ret
test_s db "SHABARSHIN A.A.",0
test_sh db "DIR",0
test_sy db "YES",0
test_sn db "NO",0
^ ÷×ÅÒÈ
|