| 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


Rambler's Top100
^ ÷×ÅÒÈ
©2002-2010 nedoPC.org