home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
mbug
/
mbug144.arc
/
ZSWP14.LBR
/
ZSWP14.MZC
/
ZSWP14.MAC
Wrap
Text File
|
1979-12-31
|
72KB
|
5,800 lines
.z80
title Z80 TURBO Sweep
page 60,132
.COMMENT %
* * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ORIGINAL COPYRIGHT, Dave Rand, Edmonton, Alberta *
* * * * * * * * * * * * * * * * * * * * * * * * * * * *
Z80 SWEEP version numbering starting at 1.00
Update history
--------------
v1.40
17-7-87 - Changed format back to original so main menu is presented on startup.
- Changed to spacebar for advance one line & CR for paging: (V) option.
- Replaced decimal input routine for user level (shorter).
- Added tests for CP/M 3.x & Turbodos to allow correct file size
& disk space display. Now tests for MP/M, CP/M 2.x, CP/M 3.x
and Turbodos. [gcb]
v1.30
Feb 87 This first release of ZSWP (Z80SWEEP) is courtesy of Ian Branch, who
responded following a plea to fix the RST 38 problem in NSWP 2.07.
As usual, many programmers are terrible at documenting their work,
so this explanatory note is added by a happy user and non-programmer.
It is being released back into the Public Domain from whence it came.
Though the original author of NSWP, Dave Rand was not consulted, we
hope that improvements which follow the release of this (poorly)
documented Source Code will be taken in the spirit in which they
were done. This code will assemble with M80 and Z8A.
Bugs in NSWP v2.07 which have been fixed in ZSWP v1.30:
1. Did not restore RST 38 vector on exit.
2. Several code faults were spotted and rectified. Their effects are unknown.
Rick Millicer, c/o SCUA RBBS (03) 497-3435. Melbourne Australia.
%
vers_date macro
db 'ZSWP v1.40' ;set version & date for signon
db ' (Z80 Turbo SWEEP) Aug 87'
db cr,lf,lf,tab
db 'Derived from SWEEP (c) 1983,4 Dave Rand,'
db ' Edmonton, Alberta.'
endm
aseg
org 100h
.phase 0100h
bdos equ 005h
bdos_adr equ 006h
bell equ 007h
bs equ 008h
tab equ 009h
lf equ 00ah
cr equ 00dh
esc equ 01bh
rst_vec equ 038h
fcb1 equ 05ch
fcb2 equ 06ch
operand_1 equ 065h
operand_2 equ 075h
dma_addr equ 080h
alv_vect equ 30e0h
fil_bfr_addr equ 30e2h
l30e4 equ 30e4h
l30e7 equ 30e7h
l30f1 equ 30f1h
l3d94 equ 3d94h
l4000 equ 4000h
lff76 equ 0ff76h
lff80 equ 0ff80h
lfff6 equ 0fff6h
new_stk equ 3d87h
ram_top_ofse equ 0f780h
;
start:
jp begin
db 'NLINES>'
nlines:
db 18h
db 'CLS>'
cls_str:
db 1,01ah,0,0,0,0,0,0
db 'INVON>'
inv_on:
db 2,esc,')',0,0,0,0
db 'INVOF>'
inv_off:
db 2,esc,'(',0,0,0,0
;
begin:
ld hl,0
add hl,sp
ld (stk_sav),hl
ld sp,new_stk
ld hl,rst_vec
ld de,rst_sav
ld bc,3
ldir
ld hl,(bdos_adr)
ld a,0c3h
ld (rst_vec),a
ld (rst_vec+1),hl
ld de,ram_top_ofse
add hl,de
ld (ram_top_adr),hl
ld c,19h ;get default drive number
rst 38h
ld (def_drive),a
ld (cur_drv),a
ld c,' '
ld e,0ffh ;get default user
rst 38h
ld (def_usr),a
ld (cur_user),a
xor a
ld (mpm_flag),a
ld c,12 ;get operating system type
rst 38h
ld a,h
cp 0
jr z,is_cpm
ld (mpm_flag),a
ld c,45 ;set error mode (mpm only)
ld e,0feh
rst 38h
is_cpm:
ld hl,fcb1+1
ld de,l2ebb
ld bc,11
ldir
ld a,'?'
ld (de),a
inc de
ld (de),a
inc de
ld (de),a
inc de
ld (de),a
ld hl,0ffffh
ld (total_files),hl
ld (fil_cntr),hl
call l1edc
ld hl,dma_addr
ld e,(hl)
ld d,0
add hl,de
inc hl
ld (hl),0
inc hl
ld (hl),0
ld hl,81h
jp l074d
rst_drvs:
ld c,13 ;reset all drives
rst 38h
call pnt_title
ld de,main_menu
call cons_op_strg ;show main menu at start
call l1d72
call in_lin_prnt
;
db tab,'Drive ',0
;
ld a,(cur_drv)
add a,'A'
call prnt_a_char
ld a,(cur_user)
inc a
jp nz,l0212
ld a,'*'
call prnt_a_char
ld a,'?'
jp l0220
l0212:
dec a
push af
ld e,a
call l175f
pop af
ld l,a
ld h,0
call l1c53
xor a
l0220:
ld (l2eba),a
call in_lin_prnt
;
db ':',0
;
ld hl,l2ebb
push hl
call l155d
call in_lin_prnt
;
db ' ',0
;
ld hl,0ffffh
ld (total_files),hl
inc hl
ld (free_space),hl
ld (used_space),hl
call get_dsk_fspc
ld hl,new_stk
ld de,l2eba
call l138a
ld a,l
or h
dec hl
jp z,l0268
l0254:
inc hl
ld (total_files),hl
call l1a21
call l1a65
call l1b32
ld hl,(l2e16)
dec hl
ld (total_files),hl
l0268:
push hl
call l02f8
pop hl
inc hl
call get_nxt_fcb
ld (l2e1e),hl
ld hl,0
ld (fil_cntr),hl
ld (blk_siz_tagd),hl
ld (k_siz_tagd),hl
disp_fname:
ld sp,new_stk
ld a,(cur_user)
ld (l2e3a),a
call bds_sel_dsk
ld hl,(total_files)
inc hl
ld a,l
or h
jp nz,fil_found
call in_lin_prnt
;
db cr,lf,cr,lf,'No files found. (X/L/S)?',0
;
call get_key
cp 'X'
jp z,exit
cp 'L'
jp z,get_new_drv
cp 'S'
jp z,get_drv_spc
jp disp_fname
fil_found:
call cr_lf
ld hl,(fil_cntr)
call get_nxt_fcb
call l1564
call get_key
ld b,a
ld hl,disp_fname
push hl
ld hl,cmd_tbl
l02d2:
ld a,(hl)
or a
ret z
cp b
inc hl
jr z,l02df
inc hl
inc hl
jr l02d2
l02df:
ld e,(hl)
inc hl
ld d,(hl)
push de
ret
;
; #################### EXIT TO OPERATING SYSTEM ###############
;
exit:
ld a,(def_drive)
ld e,a
ld c,14 ;select drive
rst 38h
ld a,(def_usr)
ld e,a
call l175f
;Restoration of restart vectors necessary for Sorcerer + SCUAMON
; which uses RST 38 for its break point routines. May be needed for
; other applications and should have been done in NSWP v2.07.
ld hl,rst_sav ;restore
ld de,rst_vec ;original
ld bc,3 ;restart 38
ldir ;vector
stk_sav equ $+1
ld sp,0
ret
l02f8:
push hl
call l1bd9
ld hl,(used_space)
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db 'K in ',0
;
pop hl
inc hl
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db ' files. ',0
;
ld hl,(free_space)
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db 'K free.',lf,0
;
ret
;
; ####################### MAIN COMMAND TABLE ###############
;
cmd_tbl:
db ' '
dw forward
db cr
dw forward
db 'B'
dw back_up
db 'X'
dw exit
db 'S'
dw get_drv_spc
db 'D'
dw delete
db 'T'
dw tag
db 'U'
dw un_tag
db 'V'
dw view
db 'P'
dw print
db 'E'
dw erase
db 'L'
dw get_new_drv
db 'C'
dw copy
db 'M'
dw mult_funct
db 'A'
dw retag
db 'R'
dw rename
db 'F'
dw find
db 'W'
dw wildcard
db 'Y'
dw atributes
db '?'
dw menu1
db 'Q'
dw sq_usq
db 0
;
; ##################### FORWARD ONE ENTRY #############
;
forward:
ld de,(fil_cntr)
inc de
ld (fil_cntr),de
ld hl,(total_files)
call cmp_hl_de
jp nc,disp_fname
ld hl,0
ld (fil_cntr),hl
call cr_lf
jp disp_fname
;
; ################### BACK UP A FILE ########################
;
back_up:
ld hl,(fil_cntr)
ld a,h
or l
dec hl
ld (fil_cntr),hl
jp nz,disp_fname
call cr_lf
ld hl,(total_files)
ld (fil_cntr),hl
jp disp_fname
get_drv_spc:
call in_lin_prnt
;
db ' Which drive? ',0
;
call get_chr_strg
l03c0:
ld a,(cmd_strg_dat)
cp 'A'
l03c5:
jp c,disp_fname
cp 'Q'
jp nc,disp_fname
push af
ld c,13 ;reset all drives
rst 38h
ld a,(cur_drv)
ld b,a
pop af
sub 'A'
ld (cur_drv),a
push bc
push af
call cr_lf
call l1d72
call get_dsk_fspc
l03e8:
call cr_lf
ld hl,(free_space)
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db 'K remaining on drive ',0
;
pop af
add a,'A'
call prnt_a_char
ld a,':'
call prnt_a_char
call cr_lf
pop bc
ld a,b
ld (cur_drv),a
call l1d72
jp disp_fname
;
; ################### SET FILE ATTRIBUTES ###################
;
atributes:
call in_lin_prnt
;
db ' Which flags (1-4,R,S,A)? ',0
;
call get_chr_strg
ld hl,dummy_fname
ld b,0bh
;
;clear dummy file name
;
clear_loop:
ld (hl),0
inc hl
djnz clear_loop
ld hl,cmd_strg_cnt
ld a,(hl)
or a
jp z,disp_fname
inc hl
ld (l2e3e),hl
l045f:
ld hl,(l2e3e)
ex de,hl
call l1ed2
ex de,hl
inc hl
ld (l2e3e),hl
or a
jp z,l048a
ld hl,atrib_mask
ld de,dummy_fname
ld b,11
l0477:
cp (hl)
jp z,l0484
inc hl
inc de
djnz l0477
jp l045f
l0484:
ld a,80h
ld (de),a
jp l045f
l048a:
ld a,2
jp l09d6
;
atrib_mask:
db '1234zzzzRSA' ;file attribute mask
;
; ####################### DELETE A FILE #######################
;
delete:
call in_lin_prnt
;
db ' Delete file? ',0
;
call get_key
cp 'Y'
jp nz,disp_fname
ld hl,(fil_cntr)
call l04be
jp disp_fname
l04be:
call get_nxt_fcb
push hl
call dec_tagd_siz
pop hl
push hl
ld de,fcb1+1
xor a
ld (fcb1),a
ld bc,11
ldir
push hl
push de
pop hl
inc de
ld bc,22
ld (hl),0
ldir
ld e,0ffh
call l175f
ld e,a
pop hl
push de
ld e,(hl)
call l175f
ld a,(operand_1)
and 80h
jp z,l0521
call in_lin_prnt
;
db ' R/O. Delete? ',7,0
;
call get_key
cp 'Y'
jp z,l0511
pop de
pop hl
ret
l0511:
ld a,(operand_1)
and 7fh
ld (operand_1),a
ld de,fcb1
ld c,30 ;set file attributes
rst 38h
l0521:
ld de,fcb1
ld c,19 ;delete file
rst 38h
pop de
call l175f
ld de,(total_files)
ld hl,(fil_cntr)
ld a,e
sub l
ld l,a
ld a,d
sbc a,h
ld h,a
add hl,hl
add hl,hl
add hl,hl
add hl,hl
push hl
pop bc
pop hl
push hl
ld de,16
add hl,de
pop de
ld a,b
or c
jp z,l0556
l054c:
ld a,(hl)
ld (de),a
inc hl
inc de
dec bc
ld a,b
or c
jp nz,l054c
l0556:
ld de,(total_files)
dec de
ld (total_files),de
ld hl,(fil_cntr)
call cmp_hl_de
ret c
ret z
dec hl
ld (fil_cntr),hl
ret
;
; ##################### ERASE FILES - TAGGED OR UNTAGGED #####
;
erase:
call in_lin_prnt
;
db cr,lf,'Erase Tagged or Untagged files (T/U)? ',0
;
call get_key
cp 'T'
jp z,chk_tag
cp 'U'
jp nz,disp_fname
chk_tag:
cp 'T'
ld a,1
jp z,set_t_u_flg
xor a
set_t_u_flg:
ld (tag_utag_flg),a
prmpt_yn:
call in_lin_prnt
;
db cr,lf,'Do you wish to be prompted (Y/N/A)? ',0
;
call get_key
cp 3
jp z,disp_fname
cp 'A'
jp z,disp_fname
cp 'N'
jp z,l05f5
cp 'Y'
ld a,1
jp nz,prmpt_yn
jp set_prmpt_fl
l05f5:
xor a
set_prmpt_fl:
ld (prompt_flag),a
ld hl,0
l05fc:
push hl
ld (fil_cntr),hl
call get_nxt_fcb
push hl
call inc_hl_12
ld a,(hl)
and 1
ld b,a
ld a,(tag_utag_flg)
cp b
pop hl
jp nz,l0666
push hl
call in_lin_prnt
;
db cr,lf,'Deleting ---> ',0
;
pop hl
call l151a
ld a,(prompt_flag)
or a
jp z,del_file
prompt:
call in_lin_prnt
;
db ' Delete (Y/N/A)? ',0
;
call get_key
cp 'A'
jp z,del_abort
cp 'Y'
jp nz,l0666
del_file:
call l16e6
jp z,l0683
pop hl
push hl
call l04be
pop hl
jp l0668
l0666:
pop hl
inc hl
l0668:
ex de,hl
ld hl,(total_files)
inc hl
ld a,l
or h
jp z,del_abort
dec hl
call cmp_hl_de
ex de,hl
jp nc,l05fc
del_abort:
ld hl,0
ld (fil_cntr),hl
jp disp_fname
l0683:
ld hl,0
ld (fil_cntr),hl
jp l0b9c
sum_tagd_siz:
ld a,(hl)
ld (hl),1
cp 1
jp z,pnt_tgd_siz
inc hl
call l1cec
push hl
ld hl,(k_siz_tagd)
add hl,de
ld (k_siz_tagd),hl
pop hl
ex de,hl
ld hl,(blk_siz_tagd)
add hl,de
ld (blk_siz_tagd),hl
pnt_tgd_siz:
ld hl,(blk_siz_tagd)
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db 'K (',0
;
ld hl,(k_siz_tagd)
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db 'K)',0
;
ret
;
; ################### TAG A FILE ##########################
;
tag:
call tagd_files
ld hl,(fil_cntr)
call get_nxt_fcb
call inc_hl_12
call sum_tagd_siz
jp forward
tagd_files:
call in_lin_prnt
;
db ' Tagged files = ',0
;
ret
;
; #################### UN-TAG A FILE ########################
;
un_tag:
call tagd_files
ld hl,(fil_cntr)
call get_nxt_fcb
call dec_tagd_siz
call pnt_tgd_siz
jp forward
dec_tagd_siz:
call inc_hl_12
ld a,(hl)
ld (hl),0
cp 1
ret nz
push hl
inc hl
call l1cec
push hl
ld hl,(k_siz_tagd)
call l107e
ld (k_siz_tagd),hl
pop de
ld hl,(blk_siz_tagd)
call l107e
ld (blk_siz_tagd),hl
pop hl
ret
get_new_drv:
call in_lin_prnt
;
db ' New drive/user/mask? ',0
;
call get_chr_strg
ld hl,cmd_strg_cnt
ld a,(hl)
or a
jp z,disp_fname
l074d:
inc hl
ld (l2e3e),hl
push hl
call l1dd2
ld a,(fcb1)
or a
jp nz,l0760
ld a,(cur_drv)
inc a
l0760:
dec a
ld (cur_drv),a
ld a,(new_user)
cp 0ffh
pop hl
jp nz,l0779
inc hl
ld a,(hl)
cp '*'
ld a,0ffh
jp z,l0779
ld a,(cur_user)
l0779:
ld (cur_user),a
ld a,(fcb1+1)
cp ' '
jp nz,l0791
ld hl,fcb1+1
ld de,05eh
ld bc,10
ld (hl),'?'
ldir
l0791:
ld hl,fcb1
ld de,l2eba
ld bc,12
ldir
call cr_lf
call cr_lf
jp rst_drvs
l07a5:
push hl
xor a
ld (verif_flag),a
check_verify:
ld a,(hl)
or a
jp z,l07b8
cp 'V'
inc hl
jp nz,check_verify
ld (verif_flag),a
l07b8:
pop hl
ret
l07ba:
call in_lin_prnt
;
db cr,lf,'Illegal drive code.',0
;
jp disp_fname
l07d6:
call l07a5
ld a,(cur_user)
ld (new_user),a
ld a,(cur_drv)
ld (new_drive),a
ld a,(hl)
cp '0'
jp c,l07ba
cp ':'
jp c,l0806
cp 'A'
jp c,l07ba
cp 'Q'
jp nc,l07ba
sub 'A'
ld (new_drive),a
inc hl ;get next char
ld a,(hl)
cp ':'
ret z
or a ;nothing is ok too
ret z
l0806:
cp '*' ;all users ?
jp z,l083a
cp '0' ;valid digit?
ret c
cp ':' ;valid digit?
ret nc
sub '0' ;convert to units & save 1st digit in b
ld b,a
inc hl ;get 2nd digit
ld a,(hl)
cp ':' ;end?
jr z,singl_digit
or a ;nothing is end too?
jr z,singl_digit
cp '0' ;valid digit?
jr c,singl_digit
cp ':'
jr nc,singl_digit
sub '0' ;convert to units & hold 2nd digit
push af
ld a,b
add a,a
add a,a
add a,b
add a,a ;a is x10
ld b,a ;hold 10's in b
pop af
add a,b
cp 20h
ret nc
ld (new_user),a ;save user number
ret
singl_digit:
ld a,b
ld (new_user),a
ret
l083a:
ld a,0ffh
ld (new_user),a
ret
get_chr_strg:
ld de,chr_strg_bfr
ld c,10 ;console input line
rst 38h
ld hl,cmd_strg_cnt
push hl
ld e,(hl)
inc hl
ld d,0
add hl,de
ld (hl),0
inc hl
ld (hl),b
pop hl
l0856:
inc hl
ld a,(hl)
or a
ret z
call l1d69
ld (hl),a
jp l0856
l0861:
call in_lin_prnt
;
db ' To which drive/user? ',0
;
call get_chr_strg
ld hl,cmd_strg_cnt
ld a,(hl)
or a
jp z,disp_fname
push hl
ld c,13 ;reset all drives
rst 38h
call l1d72
pop hl
inc hl
call l07d6
ld a,(cmd_save)
or a
ret nz
l0899:
ld a,(l2e3a)
ld b,a
ld a,(new_user)
cp 0ffh
jp z,l08a7
cp b
ret nz
l08a7:
ld a,(new_drive)
ld b,a
ld a,(cur_drv)
cp b
ret nz
call in_lin_prnt
;
db cr,lf,'Can''t copy to same drive and user.',0
;
jp disp_fname
;
; ###################### SINGLE FILE COPY ####################
;
copy:
ld hl,(fil_cntr)
call get_nxt_fcb
push hl
xor a
ld (new_fil_fcb),a
ld de,new_fil_nam
ld bc,11
ldir
ld a,(hl)
ld (l2e3a),a
call in_lin_prnt
;
db ' Copy to (filespec)? ',0
;
call get_chr_strg
call cr_lf
ld hl,cmd_strg_cnt
ld a,(hl)
or a
jp z,disp_fname
inc hl
ld (l2e3e),hl
call l1dd2
ld hl,(l2e3e)
call l07a5
ld a,(fcb1+1)
cp ' '
jp nz,l093e
ld hl,new_fil_nam
ld de,fcb1+1
ld b,0bh
l0934:
ld a,(hl)
and 7fh
ld (de),a
inc hl
inc de
djnz l0934
l093e:
ld a,(fcb1)
dec a
ld (new_drive),a
ld hl,new_fil_nam
ld de,fcb1+1
call l114e
jp nz,l0954
call l0899
l0954:
ld hl,fcb1+1
ld de,new_fil_nam
ld b,11
l095c:
ld a,(de)
and 80h
or (hl)
ld (hl),a
inc hl
inc de
djnz l095c
ld hl,fcb1
ld de,int_fcb
ld bc,12
ldir
ld a,(cur_drv)
ld b,a
ld a,(new_drive)
cp b
jp z,l0985
ld c,13 ;reset all drives
rst 38h
call l1d72
l0985:
pop hl
call l0dfb
jp disp_fname
;
; ##################### SQ/USQ OR REVERSE FILES ############
;
sq_usq:
call in_lin_prnt
;
db cr,lf,' Squeeze, Unsqueeze or Reverse (S,U,R)? ',0
;
call get_key
ld (l2e01),a
cp 'S'
jp z,val_sq_opt
cp 'U'
jp z,val_sq_opt
cp 'R'
jp nz,disp_fname
val_sq_opt:
ld a,1
jp l09d6
;
; ################# MULTI-FILE FUNCTION ####################
;
mult_funct:
xor a
l09d6:
ld (cmd_save),a
push af
call cr_lf
ld a,(cur_user)
ld (l2e3a),a
pop af
cp 2
jp z,l09ec
call l0861
l09ec:
ld hl,0
l09ef:
push hl
call get_nxt_fcb
push hl
call inc_hl_12
ld a,(hl)
cp 1
dec hl
ld b,(hl)
pop hl
jp nz,l0b83
push hl
ld a,b
ld (l2e3a),a
ld a,(cmd_save)
or a
jp nz,l0a4f
ld a,(cur_drv)
ld b,a
ld a,(new_drive)
cp b
jp nz,l0a4f
ld a,(l2e3a)
ld b,a
ld a,(new_user)
cp b
jp nz,l0a4f
call in_lin_prnt
;
db cr,lf,'Skipping, same drive & user --> ',0
;
pop hl
call l151a
jp l0b83
l0a4f:
ld a,(cmd_save)
cp 1
jp z,l0a73
cp 2
jp z,l0a8a
call in_lin_prnt
;
db cr,lf,'Copying --> ',0
;
jp l0a9e
l0a73:
call in_lin_prnt
;
db cr,lf,'SQ/USQ --> ',0
;
jp l0a9e
l0a8a:
call in_lin_prnt
;
db cr,lf,'Changing --> ',0
;
l0a9e:
pop hl
push hl
call l151a
ld a,(cmd_save)
cp 2
jr z,atrib_loop
call in_lin_prnt
;
db ' to ',0
;
jp l0b29
atrib_loop:
call in_lin_prnt
;
db ' attributes ',0
;
ld hl,dummy_fname
ld de,l0b09
ld b,4
l0abb:
ld a,(hl)
or a
call nz,l0aea
inc hl
inc de
inc de
inc de
djnz l0abb
ld hl,ext_1
ld de,l0b15
ld a,(hl)
or a
call z,l0b01
ld de,l0b1a
ld b,3
l0ad8:
ld a,(hl)
or a
call nz,l0b01
inc hl
inc de
inc de
inc de
inc de
inc de
djnz l0ad8
jp l0b65
l0aea:
push hl
push de
push bc
ld b,3
l0aef:
ex de,hl
l0af0:
ld a,(hl)
push hl
push bc
call prnt_a_char
pop bc
pop hl
inc hl
djnz l0af0
pop bc
pop de
pop hl
ret
l0b01:
push hl
push de
push bc
ld b,5
jp l0aef
l0b09:
db ' 1 '
db ' 2 '
db ' 3 '
db ' 4 '
l0b15:
db ' R/W '
l0b1a:
db ' R/O '
db ' SYS '
db ' ARC '
l0b29:
ld a,(new_drive)
add a,'A'
call prnt_a_char
ld a,(new_user)
cp 0ffh
jp nz,l0b3c
ld a,(l2e3a)
l0b3c:
ld l,a
ld h,0
cp 0ah
ld c,1
jp c,l0b47
inc c
l0b47:
call pnt_hl_in_dec
ld a,':'
call prnt_a_char
ld a,(verif_flag)
or a
jp z,l0b65
call in_lin_prnt
;
db ' with CRC ',0
;
l0b65:
pop hl
push hl
ld a,(cmd_save)
cp 1
jp z,l0b7a
cp 2
jp z,l0bb4
call l0e01
jp l0b7d
l0b7a:
call l0c7a
l0b7d:
pop hl
call dec_tagd_siz
ld (hl),2
l0b83:
call l16e6
jp z,l0b9c
pop de
inc de
ld hl,(total_files)
call cmp_hl_de
ex de,hl
jp nc,l09ef
call cr_lf
jp l0bb1
l0b9c:
call in_lin_prnt
;
db cr,lf,'--- Aborted ---',0
;
l0bb1:
jp disp_fname
l0bb4:
push hl
ld de,new_fil_fcb
xor a
ld (de),a
inc de
ld bc,11
ldir
ld a,(hl)
push af
push de
pop hl
inc de
ld (hl),0
ld bc,22
ldir
pop af
ld (l2e3a),a
call bds_sel_dsk
ld hl,new_fil_nam
ld de,dummy_fname
ld b,0bh
l0bdb:
ld a,(hl)
and 7fh
ld (hl),a
ld a,(de)
or (hl)
ld (hl),a
inc hl
inc de
djnz l0bdb
ld de,new_fil_fcb
ld c,30 ;set file attrubutes
rst 38h
ld hl,new_fil_nam
pop de
ld bc,11
ldir
jp l0b7d
;
; ##################### RETAG 'TAGGED' FILES #################
;
retag:
ld hl,0
l0bff:
push hl
call get_nxt_fcb
push hl
call inc_hl_12
ld a,(hl)
cp 2
jp nz,l0c33
call in_lin_prnt
;
db cr,lf,'Retagging --> ',0
;
pop hl
push hl
call l151a
ld a,' '
call prnt_a_char
pop hl
call inc_hl_12
call sum_tagd_siz
push hl
l0c33:
pop hl
pop de
inc de
ld hl,(total_files)
call cmp_hl_de
ex de,hl
jp nc,l0bff
jp disp_fname
l0c44:
call l220f
or a
ret nz
push af
push de
push hl
call in_lin_prnt
;
db '(',0
;
l0c51:
pop hl
push hl
l0c53:
ld a,(hl)
inc hl
or a
jp z,l0c61
push hl
call prnt_a_char
pop hl
jp l0c53
l0c61:
call in_lin_prnt
;
db ')',0
;
pop hl
pop de
pop af
ret
l0c6a:
ld a,(hl)
cp ' '
push hl
push bc
call nz,prnt_a_char
pop bc
pop hl
inc hl
djnz l0c6a
ret
l0c7a:
ld (l2e02),hl
call l1706
call l0db5
ex de,hl
ld hl,(l2e1e)
ld (l2e22),hl
ld hl,(l2e02)
jp nz,l0df3
ex de,hl
ld de,lff76
call cmp_hl_de
jp nz,l0cad
ld hl,(l2e02)
ld a,(l2e01)
cp 'U'
jp z,l0d24
cp 'R'
jp z,l0d24
jp l0df3
l0cad:
ld hl,(l2e02)
ld a,(l2e01)
cp 'R'
jp z,l0cbd
cp 'U'
jp z,l0df3
l0cbd:
ld hl,l30f1
call l2382
or a
jr z,sqz_able
call in_lin_prnt
db cr,lf,bell,"Squeezed file not shorter than original."
db cr,lf,"Squeeze anyway (Y/N)? ",0
call get_key
cp 'Y'
sqz_able:
ld hl,(l2e02)
jp nz,l0df3
call l1830
ld hl,new_fil_fcb
ld de,int_fcb
ld bc,12
ld (hl),0
ldir
ld hl,ext_1
ld a,(hl)
and 7fh
cp ' '
jp nz,l0cea
ld (hl),'Q'
inc hl
ld (hl),'Q'
l0cea:
inc hl
ld (hl),'Q'
call in_lin_prnt
;
db ' (',0
;
l0cf2:
ld hl,dummy_fname
ld b,8
call l0c6a
push hl
ld a,'.'
call prnt_a_char
pop hl
ld b,3
call l0c6a
call in_lin_prnt
;
db ')',0
;
call l1773
ld hl,(l2e02)
call l1706
ld hl,new_fil_fcb
call l2798
call l18eb
call l187d
call l1830
ret
l0d24:
ld hl,l30f1
call l0c44
or a
jp z,l0d43
call in_lin_prnt
;
db ' Not a Squeeze file.',0
;
ret
l0d43:
ld (l2e3e),hl
ex de,hl
ld (l2e42),hl
ld a,(new_user)
push af
call l1dc2
pop af
ld (new_user),a
ld hl,fcb1
ld de,int_fcb
ld (hl),0
ld bc,12
ldir
call l1773
ld hl,0
l0d68:
push hl
call l22dc
pop hl
jp nz,l0d7c
ld e,a
ld d,0
add hl,de
push hl
call l18ce
pop hl
jp l0d68
l0d7c:
ex de,hl
ld hl,(l2e42)
call cmp_hl_de
push af
call l18eb
call l187d
call l1830
pop af
ret z
call in_lin_prnt
;
db cr,lf,'ERROR - Checksum error in file ',0
;
ret
l0db5:
call l196e
ret nz
push af
call l196e
ld h,a
pop af
ld l,a
cp a
ret
l0dc2:
call l0db5
ret z
call in_lin_prnt
;
db cr,lf,'Premature EOF on file... aborted.',0
;
jp disp_fname
pop hl
or a
ret
l0df3:
push hl
call l1830
pop hl
jp l0e01
l0dfb:
call l1706
jp l0e2a
l0e01:
ld a,(new_drive)
ld b,a
ld a,(cur_drv)
cp b
jp nz,l0e18
ld a,(l2e3a)
ld b,a
ld a,(new_user)
cp 0ffh
ret z
cp b
ret z
l0e18:
call l1706
ld hl,new_fil_fcb
ld de,int_fcb
ld bc,12
ldir
xor a
ld (int_fcb),a
l0e2a:
ld hl,0
ld (l2e40),hl
call l1773
call bds_sel_dsk
ld hl,(l2e1e)
ld (l2e35),hl
ld a,(mpm_flag)
or a
jp nz,l0e96
l0e43:
push hl
ex de,hl
ld c,26 ;set file buffer address
rst 38h
ld de,new_fil_fcb
ld c,20 ;sequential read
rst 38h
pop hl
or a
jp nz,l0e6c
ld de,dma_addr
add hl,de
ld (l2e35),hl
ex de,hl
ld hl,(ram_top_adr)
call cmp_hl_de
ex de,hl
call c,l0fba
jp l0e43
l0e6c:
call l0fba
call l187d
call l1830
call l0f0c
ret
l0e79:
ld b,7
l0e7b:
xor a
rr h
rr l
djnz l0e7b
ret
l0e87:
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ret
;
; mpm record count
;
l0e8f:
ld e,1
ld c,44 ;mpm set record count
jp bdos
;
l0e96:
ld de,(l2e1e)
push de
ld hl,(ram_top_adr)
call l107e
call l0e79
pop de
l0ea5:
push hl
ld a,h
or a
jp nz,l0eb1
ld a,l
cp 80h
jp c,l0eb3
l0eb1:
ld l,80h
l0eb3:
ld h,0
push hl
push de
ld e,l
ld c,44 ;mpm set record count
rst 38h
pop de
push de
ld c,26 ;set file buffer address
rst 38h
ld de,new_fil_fcb
ld c,20 ;sequential read
rst 38h
or a
jp nz,l0ef0
pop de
pop hl
call l0e87
add hl,de
ld (l2e35),hl
ex de,hl
pop hl
ld bc,lff80
add hl,bc
ld a,h
and 80h
jp nz,l0eea
ld a,h
or l
jp nz,l0ea5
l0eea:
call l0fba
jp l0e96
l0ef0:
push af
push hl
call l0e8f
pop hl
pop af
cp 0ffh
jp z,disp_fname
pop de
ld l,h
ld h,0
call l0e87
add hl,de
ld (l2e35),hl
pop de
pop hl
jp l0e6c
l0f0c:
ld a,(verif_flag)
or a
ret z
call in_lin_prnt
;
db 'Verifying --> ',0
;
call l1752
ld hl,l2e7a
ld de,l2e7b
ld bc,21
ld (hl),0
ldir
ld de,int_fcb
ld c,15 ;open existing file
rst 38h
inc a
jp nz,l0f59
call in_lin_prnt
;
db ' Can''t open file!',0
;
jp disp_fname
l0f59:
ld de,dma_addr
ld c,26 ;set file buffer address
rst 38h
ld hl,(l2e40)
ld (l2e09),hl
ld hl,0
ld (l2e40),hl
l0f6d:
ld c,20 ;sequential read
ld de,int_fcb
rst 38h
or a
jp nz,l0f85
ld hl,dma_addr
ld de,0100h
call l1f07
jp l0f6d
l0f85:
call l186d
ld de,(l2e09)
ld hl,(l2e40)
call cmp_hl_de
jp z,l0fad
call in_lin_prnt
;
db 'CRC verify error!',0
;
jp disp_fname
l0fad:
call in_lin_prnt
;
db 'file ok.',0
;
ret
l0fba:
ld de,(l2e35)
ld hl,(l2e1e)
call cmp_hl_de
ret z
call l1f07
call l1752
ld hl,(l2e1e)
ld a,(mpm_flag)
or a
jp nz,l1002
l0fd5:
push hl
ex de,hl
ld c,26 ;set file buffer address
rst 38h
ld de,int_fcb
ld c,21 ;sequential write
rst 38h
pop hl
or a
jp nz,dsk_ful_msg
ld de,dma_addr
add hl,de
ld de,(l2e35)
call cmp_hl_de
jp nz,l0fd5
l0ff8:
call bds_sel_dsk
ld hl,(l2e1e)
ld (l2e35),hl
ret
l1002:
ld de,(l2e1e)
push de
ld hl,(l2e35)
call l107e
call l0e79
pop de
l1011:
push hl
push de
ld a,h
or a
jp nz,l101e
ld a,l
cp 80h
jp c,l1020
l101e:
ld l,80h
l1020:
ld e,l
ld c,44 ;mpm set record count
rst 38h
pop de
push de
ld c,26 ;set file buffer address
rst 38h
ld de,int_fcb
ld c,21 ;sequential write
rst 38h
or a
jp nz,l1056
pop de
pop hl
ex de,hl
ld bc,l4000
add hl,bc
ex de,hl
ld bc,lff80
add hl,bc
ld a,h
and 80h
jp nz,l1050
ld a,h
or l
jp nz,l1011
l1050:
call l0e8f
jp l0ff8
l1056:
call l0e8f
dsk_ful_msg:
call in_lin_prnt
;
db cr,lf,'Destination disk full.',0
;
call l1830
call l1857
jp disp_fname
l107e:
ld a,l
sub e
ld l,a
ld a,h
sbc a,d
ld h,a
ret
;
; ################### FIND A FILE ###########################
;
find:
call in_lin_prnt
;
db ' Find what ? ',0
;
call get_chr_strg
ld hl,cmd_strg_dat
ld (l2e3e),hl
call l1dc2
ld hl,fcb1+1
ld a,(hl)
cp ' '
jp z,disp_fname
ld b,0bh
l10ad:
ld a,(hl)
cp ' '
jp nz,l10b5
ld (hl),'?'
l10b5:
inc hl
djnz l10ad
call in_lin_prnt
;
db cr,lf,0
;
ld hl,0ffffh
call l112f
jp nz,disp_fname
ld (fil_cntr),hl
jp disp_fname
;
; ##################### WILDCARD FUNCTION ####################
;
wildcard:
call in_lin_prnt
;
db ' Tag what? ',0
;
call get_chr_strg
ld hl,cmd_strg_dat
ld (l2e3e),hl
call l1dc2
ld hl,fcb1+1
ld a,(hl)
cp ' '
jp z,disp_fname
call in_lin_prnt
;
db cr,lf,0
;
ld hl,0ffffh
l10fd:
call l112f
jp nz,disp_fname
push hl
call in_lin_prnt
;
db cr,lf,'Tagging --> ',0
;
pop hl
push hl
call get_nxt_fcb
push hl
call l151a
ld a,' '
call prnt_a_char
pop hl
call inc_hl_12
call sum_tagd_siz
pop hl
jp l10fd
l112f:
inc hl
ex de,hl
ld hl,(total_files)
call cmp_hl_de
jp c,l114a
ex de,hl
push hl
call get_nxt_fcb
ld de,fcb1+1
call l114e
pop hl
ret z
jp l112f
l114a:
ld a,1
or a
ret
l114e:
ld b,0bh
ex de,hl
l1151:
ld a,(hl)
cp '?'
jp z,l115c
ld a,(de)
and 7fh
cp (hl)
ret nz
l115c:
inc hl
inc de
djnz l1151
ret
;
; #################### RENAME FUNCTION ########################
;
rename:
ld hl,(fil_cntr)
call get_nxt_fcb
ld de,11
add hl,de
ld a,(hl)
ld (l2e3a),a
call in_lin_prnt
;
db ' New name, or *? ',0
;
call get_chr_strg
ld hl,cmd_strg_dat
ld (l2e3e),hl
ld hl,fcb2
push hl
call l1dd5
pop hl
inc hl
ld a,(hl)
cp ' '
jp z,disp_fname
ld b,11
l11a1:
cp '?'
jp z,l13f6
inc hl
djnz l11a1
ld a,(new_user)
cp 0ffh
jp nz,l11b6
ld a,(l2e3a)
l11b6:
ld (hl),a
ld hl,(fil_cntr)
call get_nxt_fcb
call l11f9
cp '.'
jp nz,l11cd
ld c,13 ;reset all drives
rst 38h
call l1d72
l11cd:
ld hl,(fil_cntr)
push hl
ld hl,(total_files)
inc hl
ld (total_files),hl
call l1a65
call l1b32
ld de,(l2e16)
dec de
ld (total_files),de
pop hl
ld (fil_cntr),hl
call cmp_hl_de
jp c,disp_fname
ld hl,0
ld (fil_cntr),hl
jp disp_fname
l11f9:
push hl
ld a,(cur_drv)
ld (new_drive),a
ld de,fcb1
xor a
ld (fcb1),a
inc de
ld bc,0bh
ldir
ld b,4
xor a
l1210:
ld (de),a
inc de
djnz l1210
call bds_sel_dsk
ld a,(operand_1)
and 80h
jp z,l1239
ld a,(operand_1)
and 7fh
ld (operand_1),a
ld a,(operand_2)
and 7fh
ld (operand_2),a
ld de,fcb1
ld c,30 ;set file attributes
rst 38h
l1239:
ld a,(new_user)
cp 0ffh
ld e,a
ld a,(l2e3a)
jp nz,l1246
ld e,a
l1246:
call l175f
ld hl,fcb2+1
ld de,new_fil_nam
ld bc,11
ldir
xor a
ld (new_fil_fcb),a
call l16f9
ld de,new_fil_fcb
ld hl,(l2e1e)
call l138a
ld a,l
or h
jp z,l1292
call in_lin_prnt
;
db cr,lf,'Destination file exists!',0
;
ld c,13 ;reset all drives
rst 38h
call l1d72
jp disp_fname
l1292:
ld a,(new_user)
cp 0ffh
jp z,l12a2
ld b,a
ld a,(l2e3a)
cp b
jp nz,l12ca
l12a2:
ld a,(l2e3a)
ld e,a
call l175f
ld e,0ffh
call l175f
push af
ld de,fcb1
ld c,23 ;rename file
rst 38h
pop af
ld e,a
call l175f
xor a
l12bd:
pop de
push af
ld hl,fcb2+1
ld bc,12
ldir
pop af
cp a
ret
l12ca:
ld a,(l2e3a)
ld e,a
call l175f
ld hl,fcb1
ld de,new_fil_fcb
ld bc,0ch
ldir
call l16f9
xor a
ld (new_fil_fcb),a
ld a,'?'
ld (l2e54),a
ld hl,(l2e1e)
ld de,new_fil_fcb
call l138a
ld a,l
or h
jp z,l12bd
ld (l2e09),hl
call l16f9
ld de,new_fil_fcb
ld c,19 ;delete file
rst 38h
call l1752
ld hl,fcb2+1
ld de,new_fil_nam
ld bc,11
ldir
call l16f9
ld de,new_fil_fcb
ld c,19 ;delete file
rst 38h
ld hl,0
l1320:
push hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ex de,hl
ld hl,(l2e1e)
add hl,de
ld de,12
add hl,de
push hl
ld de,l2e54
ld bc,4
ldir
ld c,22 ;make new file
ld de,new_fil_fcb
rst 38h
inc a
jp z,dir_ful_msg
pop hl
ld de,l2e54
ld bc,14h
ldir
ld a,(l2e56)
and 7fh
ld (l2e56),a
ld c,16 ;close output file
ld de,new_fil_fcb
rst 38h
ld hl,(l2e09)
dec hl
ld (l2e09),hl
ld a,l
or h
pop hl
inc hl
jp nz,l1320
ld a,'.'
jp l12bd
;
dir_ful_msg:
call in_lin_prnt
;
db cr,lf,cr,lf,'Directory full.',0
;
jp disp_fname
l138a:
push hl
push de
ld c,26 ;set file buffer address
ld de,dma_addr
rst 38h
pop de
push de
ld c,17 ;search for first file
rst 38h
inc a
pop de
pop hl
ld bc,0
jp nz,l13a8
ld hl,0
ret
l13a8:
push de
push bc
push hl
dec a
add a,a
add a,a
add a,a
add a,a
add a,a
ld hl,dma_addr
add a,l
ld l,a
pop de
ld bc,' '
ldir
push de
inc d
ld hl,(ram_top_adr)
call cmp_hl_de
jp nc,l13de
call in_lin_prnt
;
db cr,lf,bell,bell,'OUT OF MEMORY?',0
;
jp 0
l13de:
pop de
push de
pop hl
pop bc
inc bc
pop de
push de
push bc
push hl
ld c,18 ;search for next file
rst 38h
inc a
pop hl
pop bc
pop de
jp nz,l13a8
ld l,c
ld h,b
ret
l13f6:
call in_lin_prnt
;
db cr,lf,cr,lf,'Old name? ',0
;
call get_chr_strg
ld hl,cmd_strg_dat
ld (l2e3e),hl
ld hl,l2e94
call l1dd5
ld a,(l2e95)
cp ' '
jp z,disp_fname
ld a,(new_user)
ld (tag_utag_flg),a
call in_lin_prnt
;
db cr,lf,'New name? ',0
;
call get_chr_strg
ld hl,cmd_strg_dat
ld (l2e3e),hl
ld hl,int_fcb
call l1dd5
ld a,(dummy_fname)
cp ' '
jp z,disp_fname
call cr_lf
ld hl,0
l1452:
push hl
call get_nxt_fcb
push hl
ld de,l2e95
call l14c5
jp nz,l14a2
call in_lin_prnt
;
db cr,lf,'Renaming --> ',0
;
pop hl
push hl
call l151a
pop hl
push hl
ld de,0bh
add hl,de
ld a,(hl)
ld (l2e3a),a
call in_lin_prnt
;
db ' to ',0
;
l148a:
pop hl
push hl
call l14f2
ld hl,fcb2+1
call l151a
pop hl
call l11f9
ld b,a
ld a,(l14b4)
or b
ld (l14b4),a
push hl
l14a2:
pop hl
pop de
inc de
ld hl,(total_files)
call cmp_hl_de
ex de,hl
jp nc,l1452
call cr_lf
l14b4 equ $+1
ld a,0
cp '.'
jp nz,l11cd
ld c,13 ;reset all drives
rst 38h
call l1d72
jp l11cd
l14c5:
ld a,(hl)
cp 0e5h
jp z,l14ef
push hl
ld bc,0bh
add hl,bc
ld b,(hl)
pop hl
ld a,(tag_utag_flg)
cp 0ffh
jp z,l14dc
cp b
ret nz
l14dc:
ld a,(de)
cp '?'
jp z,l14e8
ld b,a
ld a,7fh
and (hl)
cp b
ret nz
l14e8:
inc hl
inc de
dec c
jp nz,l14dc
ret
l14ef:
xor a
cpl
ret
l14f2:
ld de,dummy_fname
ld bc,fcb2+1
ld a,0bh
l14fa:
push af
l14fb:
ld a,(de)
cp '?'
jp nz,l1504
ld a,(hl)
and 7fh
l1504:
ld (bc),a
inc hl
inc de
inc bc
pop af
dec a
jp nz,l14fa
ld a,(new_user)
cp 0ffh
jp nz,l1518
ld a,(l2e3a)
l1518:
ld (bc),a
ret
l151a:
push hl
ld a,(cur_drv)
add a,'A'
call prnt_a_char
pop hl
push hl
ld de,0bh
add hl,de
ld l,(hl)
ld h,0
ld a,l
cp lf
ld c,1
jp c,l1535
inc c
l1535:
push bc
call pnt_hl_in_dec
ld a,':'
call prnt_a_char
pop bc
ld a,c
cp 2
jp z,l154a
ld a,' '
call prnt_a_char
l154a:
ld b,8
pop hl
call l15a7
push hl
ld a,'.'
call prnt_a_char
pop hl
ld b,3
call l15a7
ret
l155d:
pop de
pop hl
push de
push hl
jp l154a
l1564:
push hl
ld hl,(fil_cntr)
inc hl
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db '. ',0
;
pop hl
call l151a
inc hl
ld a,(hl)
push af
inc hl
push hl
ld a,' '
call prnt_a_char
pop hl
call l1cec
ld c,4
call pnt_hl_in_dec
call in_lin_prnt
;
db 'K :',0
;
pop af
or a
ld c,' '
jp z,l15a2
cp 1
ld c,'*'
jp z,l15a2
ld c,'#'
l15a2:
ld a,c
call prnt_a_char
ret
l15a7:
push bc
push hl
ld a,(hl)
call prnt_a_char
pop hl
pop bc
dec b
inc hl
jp nz,l15a7
ret
;
; ############### SEND A FILE TO PRINTER ##############
print:
call cr_lf
ld a,5
ld (l2e3d),a
jp l1610
; ############### VIEW A FILE ON THE CONSOLE ##########
view:
call cr_lf
xor a
ld (l2e3d),a
inc a
ld (lin_cntr),a
l15cb:
ld hl,cls_str
call pnt_2_zero
call in_lin_prnt
;
db 'Press X to abort, SP to advance a line, CR to advance a page.'
db cr,lf,0
;
ld a,2
l1610:
ld (bdos_func),a
ld hl,(fil_cntr)
call get_nxt_fcb
call l1706 ;open the wanted file
call l0dc2 ;read the file
ld de,lff76
call cmp_hl_de
ld hl,l196e
jp nz,l1644
ld hl,(l2e1e)
ld (l2e22),hl
ld hl,l30f1
call l0c44 ;check if squeezed
or a
jp nz,l1644
call cr_lf
ld hl,l22dc
jp l164c
l1644:
push hl
ld hl,(l2e1e)
ld (l2e22),hl
pop hl
l164c:
ld (l1662),hl
l164f:
call dir_cons_ip
and 05fh
cp 'X'
jp z,end_view
cp 3
jp z,end_view
cp 13h
jp z,new_vw_page
l1662 equ $+1
call l196e
jp nz,end_view
cp 1ah
jp z,end_view
and 7fh
cp 1fh
jp nz,l1675
ld a,'-'
l1675:
ld e,a
cp cr
jp nz,l1682
ld a,(lin_cntr)
inc a
ld (lin_cntr),a
l1682:
cp tab
jr nz,l1682a
ld a,(bdos_func)
cp 5
jr nz,l1682a
ld b,7
ld c,5
ld e,' '
l1682b:
push bc
push de
rst 38h
pop de
pop bc
djnz l1682b
l1682a:
ld a,(bdos_func)
ld c,a
rst 38h
ld a,(l2e3d)
or a
jp nz,l164f
ld a,(lin_cntr)
ld b,a
ld a,(nlines)
cp b
jp nz,l164f
call l16de
cp ' ' ;check if a Space first
jp z,dn_1_line
and 05fh ;convert other i/p to upper
cp 'X'
jp z,end_view
cp 3
jp z,end_view
xor a
ld (lin_cntr),a
jp l164f
dn_1_line:
ld a,(lin_cntr)
dec a
ld (lin_cntr),a
jp l164f
end_view:
call l1830
jp disp_fname
new_vw_page:
call l16de
jp l164f
cons_status:
ld c,11 ;console status check
rst 38h
or a
ret z
get_key:
ld c,1 ;console input byte
rst 38h
jp l1d69
l16de:
loop1: call dir_cons_ip
or a
jp z,loop1
ret
l16e6:
call cons_status
cp 3
ret z
call l1d69
cp 'X'
ret
dir_cons_ip:
ld e,0ffh
ld c,6 ;direct console i/o
jp bdos
l16f9:
ld hl,l2e54
ld de,l2e55
ld bc,20
ld (hl),0
ldir
ret
l1706:
ld de,new_fil_fcb
xor a
ld (new_fil_fcb),a
inc de
ld bc,11
ldir
ld a,(hl)
push af
call l16f9
pop af
ld (l2e3a),a
call bds_sel_dsk
ld hl,(l2e1e)
ld (l2e22),hl
ld (l2e20),hl
ld de,new_fil_fcb
ld c,15 ;open file
rst 38h
inc a
ret nz
call in_lin_prnt
;
db cr,lf,'Can''t open file!',0
;
jp disp_fname
ld e,0ffh
call l175f
ld e,a
ret
l1752:
ld a,(new_drive)
ld e,a
ld c,14 ;select drive
rst 38h
ld a,(new_user)
l175e:
ld e,a
l175f:
ld c,32 ;get/set user code
jp bdos
bds_sel_dsk:
ld a,(cur_drv)
ld e,a
ld c,14 ;select drive
rst 38h
ld a,(l2e3a)
jp l175e
l1773:
ld hl,(l2e1e)
ld de,1400h
add hl,de
ld (l2e26),hl
ld (l2e24),hl
ld de,1000h
add hl,de
ld (l2e28),hl
call l1752
call l1822
ld de,int_fcb
push de
ld c,15 ;open file
rst 38h
inc a
jp z,l17c2
pop de
push de
ld c,16 ;close file
rst 38h
ld a,(ext_1)
and 80h
jp z,l17bb
ld a,(ext_1)
and 7fh
ld (ext_1),a
call l1822
pop de
push de
ld c,30 ;set file attributes
rst 38h
l17bb:
pop de
push de
ld c,19 ;delete file
rst 38h
l17c2:
ld hl,ext_1
push hl
ld de,l2e45
ld bc,3
ldir
pop hl
ld (hl),'$'
inc hl
ld (hl),'$'
inc hl
ld (hl),'$'
pop de
push de
ld c,8
l17db:
ld a,(de)
and 7fh
ld (de),a
inc de
dec c
jp nz,l17db
call l1822
pop de
push de
ld c,19 ;delete file
rst 38h
call l1822
pop de
ld c,22 ;make new file
rst 38h
inc a
ret nz
call in_lin_prnt
;
db cr,lf,'Destination disk directory full.',0
;
jp disp_fname
l1822:
ld hl,l2e7a
ld de,l2e7b
ld bc,16h
ld (hl),0
ldir
ret
l1830:
call bds_sel_dsk
ld de,new_fil_fcb
ld c,16 ;close output file
rst 38h
inc a
ret nz
l183d:
call in_lin_prnt
;
db cr,lf,'Can''t close file!',0
;
jp disp_fname
l1857:
call l1752
ld de,int_fcb
push de
ld c,16 ;close output file
rst 38h
call l1822
pop de
ld c,19 ;delete file
rst 38h
ret
l186d:
call l1752
ld de,int_fcb
ld c,16 ;close output file
rst 38h
inc a
jp z,l183d
ret
l187d:
call l186d
call l1822
ld hl,int_fcb
ld de,l2e7e
ld bc,10h
ldir
ld hl,l2e45
ld de,l2e87
ld bc,3
ldir
ld de,int_fcb
ld c,23 ;rename file
rst 38h
inc a
jp z,l183d
ld hl,l2e45
ld de,ext_1
ld bc,3
ldir
ld a,(l2e51)
and 80h
ld b,a
ld a,(ext_1)
or b
ld (ext_1),a
ld a,(ext_3)
and 7fh
ld (ext_3),a
ld de,int_fcb
ld c,30 ;set file attributes
rst 38h
ret
l18ce:
ld de,(l2e28)
ld hl,(l2e24)
ld b,a
call cmp_hl_de
ld a,b
jp z,l18e3
ld (hl),a
inc hl
ld (l2e24),hl
ret
l18e3:
push af
call l18eb
pop af
jp l18ce
l18eb:
ld de,(l2e24)
ld hl,(l2e26)
call cmp_hl_de
ret z
push hl
call l1752
pop hl
ld a,(mpm_flag)
or a
jp nz,l192c
l1902:
push hl
ex de,hl
ld c,26 ;set file buffer address
rst 38h
ld de,int_fcb
ld c,21 ;sequential write
rst 38h
or a
jp nz,dsk_ful_msg
pop hl
ld de,dma_addr
add hl,de
ld de,(l2e24)
call cmp_hl_de
jp c,l1902
l1925:
ld hl,(l2e26)
ld (l2e24),hl
ret
l192c:
ld de,(l2e26)
push de
ld hl,(l2e24)
call l107e
ld a,l
and 7fh
push af
call l0e79
pop af
jp z,l1943
inc hl
l1943:
ld a,h
or a
jp nz,l194e
ld a,l
cp 80h
jp c,l1950
l194e:
ld l,80h
; mpm-2 function
l1950:
ld e,l
ld c,44 ;set record count
rst 38h
pop de
ld c,26 ;set file buffer address
rst 38h
ld de,int_fcb
ld c,21 ;sequential write
rst 38h
or a
jp nz,l1056
call l0e8f
jp l1925
l196e:
ld de,(l2e20)
ld hl,(l2e22)
call cmp_hl_de
jp z,l1982
ld a,(hl)
inc hl
ld (l2e22),hl
cp a
ret
l1982:
call bds_sel_dsk
ld hl,(l2e1e)
ld (l2e22),hl
ld (l2e20),hl
ld b,' '
ld a,(mpm_flag)
or a
jp nz,l19cc
l1997:
push bc
ex de,hl
ld c,26 ;set file buffer address
rst 38h
ld de,new_fil_fcb
ld c,20 ;sequential read
rst 38h
pop bc
or a
jp nz,l19bc
ld hl,(l2e20)
ld de,dma_addr
add hl,de
ld (l2e20),hl
djnz l1997
jp l196e
l19bc:
ld de,(l2e22)
ld hl,(l2e20)
call cmp_hl_de
jp nz,l196e
xor a
dec a
ret
; mpm-2 function
l19cc:
ld e,20h
ld c,44 ;set record count
rst 38h
ld hl,(l2e22)
ex de,hl
ld c,26 ;set file buffer address
rst 38h
ld de,new_fil_fcb
ld c,20 ;sequential read
rst 38h
or a
jp nz,l19f8
call l0e8f
ld hl,(l2e22)
ld de,1000h
add hl,de
ld (l2e20),hl
jp l196e
l19f8:
push af
push hl
call l0e8f
pop hl
pop af
cp 0ffh
jp z,disp_fname
ld l,h
ld h,0
call l0e87
ld de,(l2e22)
add hl,de
ld (l2e20),hl
jp l19bc
l1a15:
ld hl,(total_files)
push hl
pop bc
ld hl,new_stk
ld de,new_stk
ret
l1a21:
call l1a15
l1a24:
ld a,(hl)
cp 20h
jp nc,l1a56
push hl
push af
inc hl
push bc
ld bc,11
ldir
pop bc
pop af
ld (de),a
ld a,(hl)
push af
inc hl
inc de
xor a
ld (de),a
inc hl
inc de
ld a,(hl)
ld (de),a
inc de
pop af
ld (de),a
inc de
inc hl
ld a,(hl)
ld (de),a
inc de
pop hl
l1a49:
push de
ld de,20h
add hl,de
pop de
dec bc
ld a,b
or c
jp nz,l1a24
ret
l1a56:
push bc
ld b,10h
ld a,0e5h
l1a5b:
ld (de),a
inc de
djnz l1a5b
pop bc
jp l1a49
l1a65:
ld hl,(total_files)
ld (l2e1a),hl
dec hl
ld a,h
or l
ret z
l1a6f:
ld hl,(l2e1a)
ld a,h
or l
ret z
xor a
ld a,h
rra
ld h,a
ld a,l
rra
ld l,a
ld (l2e1a),hl
or h
jp nz,l1a84
inc hl
l1a84:
ld (l2e1c),hl
ex de,hl
ld hl,(total_files)
dec hl
ld a,l
sub e
ld l,a
ld a,h
sbc a,d
ld h,a
ld (l2e16),hl
ld hl,0
ld (l2e14),hl
l1a9b:
ld hl,(l2e14)
ld (fil_cntr),hl
l1aa1:
ld de,(fil_cntr)
ld hl,(l2e1c)
add hl,de
ld (l2e18),hl
call l1ae6
jp z,l1ad2
jp c,l1ad2
call l1b17
ld de,(l2e1c)
ld hl,(fil_cntr)
ld a,l
sub e
ld l,a
ld a,h
sbc a,d
ld h,a
ld (fil_cntr),hl
jp m,l1ad2
or l
jp z,l1ad2
jp l1aa1
l1ad2:
ld de,(l2e14)
inc de
ld (l2e14),de
ld hl,(l2e16)
call cmp_hl_de
jp c,l1a6f
jp l1a9b
l1ae6:
ld hl,(fil_cntr)
call get_nxt_fcb
ld (l2e0e),hl
push hl
ld hl,(l2e18)
call get_nxt_fcb
ld (l2e10),hl
pop de
ld b,0bh
l1afc:
ld a,(hl)
and 7fh
ld c,a
ld a,(de)
and 7fh
cp c
ret nz
inc hl
inc de
djnz l1afc
ld b,5
l1b0d:
ld a,(de)
cp (hl)
ret nz
inc hl
inc de
djnz l1b0d
ret
l1b17:
ld de,(l2e0e)
ld hl,(l2e10)
ld c,10h
l1b20:
ld b,(hl)
ld a,(de)
ld (hl),a
ld a,b
ld (de),a
inc de
inc hl
dec c
jp nz,l1b20
ret
cmp_hl_de:
ld a,h
cp d
ret nz
ld a,l
cp e
ret
l1b32:
ld hl,0
ld (fil_cntr),hl
ld (l2e16),hl
inc hl
ld (l2e14),hl
ld hl,(total_files)
ld (l2e09),hl
l1b45:
call l1b7f
jp z,l1b51
call l1b9f
call z,l1b68
l1b51:
ld hl,(l2e14)
ld (fil_cntr),hl
inc hl
ld (l2e14),hl
ld hl,(l2e09)
dec hl
ld (l2e09),hl
ld a,h
or l
jp nz,l1b45
ret
l1b68:
ld hl,(l2e16)
call get_nxt_fcb
ex de,hl
ld hl,(l2e0e)
ld bc,10h
ldir
ld hl,(l2e16)
inc hl
ld (l2e16),hl
ret
l1b7f:
ld hl,(fil_cntr)
call get_nxt_fcb
ld (l2e0e),hl
push hl
ld hl,(l2e14)
call get_nxt_fcb
ld (l2e10),hl
pop de
ld b,0ch
l1b95:
ld a,(de)
cp (hl)
ret nz
inc hl
inc de
djnz l1b95
ret
l1b9f:
ld hl,(l2e0e)
ld a,(hl)
cp 0e5h
jp z,l1bd7
push hl
ld de,11
add hl,de
ld b,(hl)
pop hl
ld de,l2ebb
ld c,11
ld a,b
cp 20h
jp nc,l1bd7
ld a,(cur_user)
cp 0ffh
jp z,l1bc4
cp b
ret nz
l1bc4:
ld a,(de)
cp '?'
jp z,l1bd0
ld b,a
ld a,7fh
and (hl)
cp b
ret nz
l1bd0:
inc hl
inc de
dec c
jp nz,l1bc4
ret
l1bd7:
or a
ret
l1bd9:
ld hl,0
ld (used_space),hl
ld hl,(total_files)
inc hl
ld a,l
or h
ret z
push hl
pop bc
ld hl,l3d94
ld de,10h
l1bee:
push hl
push de
push bc
call l1cec
ld de,(used_space)
add hl,de
ld (used_space),hl
pop bc
pop de
pop hl
add hl,de
dec bc
ld a,b
or c
jp nz,l1bee
ret
pnt_hl_in_dec:
push hl
ld de,2710h
call cmp_hl_de
jp c,l1c16
ld d,5
jp l1c3f
l1c16:
ld de,l03e8
call cmp_hl_de
jp c,l1c24
ld d,4
jp l1c3f
l1c24:
ld de,64h
call cmp_hl_de
jp c,l1c32
ld d,3
jp l1c3f
l1c32:
ld a,l
cp lf
jp c,l1c3d
ld d,2
jp l1c3f
l1c3d:
ld d,1
l1c3f:
ld a,c
sub d
jp z,l1c52
jp c,l1c52
l1c47:
push af
ld a,' '
call prnt_a_char
pop af
dec a
jp nz,l1c47
l1c52:
pop hl
l1c53:
push af
push bc
push de
push hl
ld bc,lfff6
ld de,0ffffh
l1c5d:
add hl,bc
inc de
jp c,l1c5d
ld bc,lf
add hl,bc
ex de,hl
ld a,h
or l
call nz,l1c53
ld a,e
add a,'0'
call prnt_a_char
pop hl
pop de
pop bc
pop af
ret
;
; get disk free space
;
get_dsk_fspc:
ld c,12 ;get system identification
rst 38h
ld a,h ;mpm if h=1
cp 0 ;test for cp/m
jp nz,mpm_dsk_fspc ; if not, jump
ld a,l ;cpm2.2 if l=22h
cp 30h ;test if cpm3.x or turbodos
jp nc,mpm_dsk_fspc ;these also use bdos diskspace call
ld hl,(l30e7)
inc hl
push hl
pop bc
push hl
ld hl,(alv_vect)
ld de,0
l1c8f:
ld a,(hl)
push hl
ld l,8
l1c93:
rla
jp nc,l1c98
inc de
l1c98:
ld h,a
dec bc
ld a,b
or c
jp z,l1ca9
ld a,h
dec l
jp nz,l1c93
pop hl
inc hl
jp l1c8f
l1ca9:
pop hl
pop hl
ld a,l
sub e
ld l,a
ld a,h
sbc a,d
ld h,a
ld a,(l2e2a)
or a
l1cb5:
jp z,l1cbd
add hl,hl
dec a
jp l1cb5
l1cbd:
ld (free_space),hl
ret
mpm_dsk_fspc:
ld de,dma_addr
ld c,26 ;set file buffer address
rst 38h
ld a,(cur_drv)
ld e,a
ld c,46 ;mpm get disk free space
rst 38h
ld hl,(dma_addr)
ld a,(dma_addr+2)
ld b,a
ld c,3
l1cdb:
or a
ld a,b
rra
ld b,a
ld a,h
rra
ld h,a
ld a,l
rra
ld l,a
dec c
jp nz,l1cdb
jp l1cbd
l1cec:
ld d,0
ld e,(hl)
ex de,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ex de,hl
inc hl
ld a,(hl)
push hl
ld h,0
ld l,a
add hl,de
add hl,hl
add hl,hl
add hl,hl
add hl,hl
pop de
inc de
ld a,(de)
rrca
rrca
rrca
push af
and 1fh
add a,l
ld l,a
jp nc,l1d10
inc h
l1d10:
pop af
and 0e0h
jp z,l1d17
inc hl
l1d17:
push hl
pop de
ld a,(l2e2a)
or a
ret z
cp 1
jp z,l1d5a
cp 2
jp z,l1d4b
cp 3
jp z,l1d3c
ld a,l
and 0fh
ret z
push de
ld a,0f0h
and l
ld l,a
ld de,10h
add hl,de
pop de
ret
l1d3c:
ld a,l
and 7
ret z
push de
ld de,8
add hl,de
ld a,l
and 0f8h
ld l,a
pop de
ret
l1d4b:
ld a,l
and 3
ret z
ld a,l
and 0fch
ld l,a
push de
ld de,4
add hl,de
pop de
ret
l1d5a:
ld a,l
and 1
ret z
inc hl
ret
l1d69:
cp 61h
ret c
cp 7bh
ret nc
and 5fh
ret
l1d72:
ld a,(cur_drv)
ld e,a
ld c,14 ;select drive
rst 38h
inc a
jp z,disp_fname
ld c,31 ;get disk parameters
rst 38h
ld de,fil_bfr_addr
ld bc,0fh
ldir
ld a,(l30e4)
sub a,3
ld (l2e2a),a
ld c,27 ;get allocation vector
rst 38h
ld (alv_vect),hl
ret
menu1:
ld hl,cls_str
call pnt_2_zero
jr menu2
menu:
ld de,title_msg
call cons_op_strg
menu2:
ld de,main_menu
call cons_op_strg
call tab_it
ld hl,(total_files)
call l02f8
call cr_lf
call tab_it
call tagd_files
call pnt_tgd_siz
call cr_lf
ret
pnt_title:
ld hl,cls_str
call pnt_2_zero
ld de,title_msg
jp cons_op_strg
l1dc2:
ld hl,(l2e3e)
ex de,hl
call l1ed2
ld hl,fcb1
xor a
ld (hl),a
dec a
jp l1e4c
l1dd2:
ld hl,fcb1
l1dd5:
push hl
ld hl,(l2e3e)
ex de,hl
call l1ed2
pop hl
ld a,(cur_drv)
inc a
ld b,a
ld c,0ffh
ld a,(de)
or a
jp z,l1e2d
push de
cp '0'
jp c,l1df5
cp ':'
jp c,l1e08
l1df5:
sbc a,'@'
ld b,a
inc de
ld a,(de)
cp ':'
jp z,l1e37
or a
jp z,l1e37
cp '*'
jp z,l1e0b
l1e08:
sub '0'
ld c,a
l1e0b:
inc de
ld a,(de)
cp ':'
jp z,l1e37
and a
jr z,l1e37
ld a,c
add a,a
add a,a
add a,c
add a,a
ld c,a
;
ld a,(de)
sub '0'
add a,c
ld c,a
inc de
ld a,(de)
cp ':'
jr z,l1e37
or a
jr z,l1e37
l1e2c:
pop de
l1e2d:
ld a,(cur_drv)
inc a
ld (hl),a
ld a,0ffh
jp l1e4c
l1e37:
ld a,b
cp 17
jp nc,l1e2c
ld a,c
cp 0ffh
jp z,l1e48
cp 32
jr nc,l1e2c
l1e48:
pop af
ld (hl),b
inc de
ld a,c
l1e4c:
ld (new_user),a
ld b,8
l1e51:
call chk_delims
jp z,l1e72
inc hl
cp '*'
jp nz,l1e62
ld (hl),'?'
jp l1e64
l1e62:
ld (hl),a
inc de
l1e64:
djnz l1e51
l1e68:
call chk_delims
jp z,l1e79
inc de
jp l1e68
l1e72:
inc hl
ld (hl),' '
djnz l1e72
l1e79:
ld b,3
cp '.'
jp nz,l1ea2
inc de
l1e81:
call chk_delims
jp z,l1ea2
inc hl
cp '*'
jp nz,l1e92
ld (hl),'?'
jp l1e94
l1e92:
ld (hl),a
inc de
l1e94:
djnz l1e81
l1e98:
call chk_delims
jp z,l1ea9
inc de
jp l1e98
l1ea2:
inc hl
ld (hl),' '
djnz l1ea2
l1ea9:
ld b,3
l1eab:
inc hl
ld (hl),0
djnz l1eab
ex de,hl
ld (l2e3e),hl
ret
chk_delims:
ld a,(de)
or a
ret z
cp ' '
ret z
cp '='
ret z
cp 5fh
ret z
cp '.'
ret z
cp ':'
ret z
cp ';'
ret z
cp '<'
ret z
cp '>'
ret
l1ed2:
ld a,(de)
or a
ret z
cp ' '
ret nz
inc de
jp l1ed2
l1edc:
ld hl,l2ee0
ld c,0
l1ee1:
ex de,hl
ld hl,0
ld a,c
push bc
ld b,8
xor h
ld h,a
l1eeb:
add hl,hl
jp nc,l1ef7
ld a,10h
xor h
ld h,a
ld a,'!'
xor l
ld l,a
l1ef7:
djnz l1eeb
pop bc
ex de,hl
ld (hl),d
inc h
ld (hl),e
dec h
inc hl
inc c
jp nz,l1ee1
ret
l1f07:
ld a,(verif_flag)
or a
ret z
l1f0c:
ld a,(hl)
call l1f18
inc hl
call cmp_hl_de
jp nz,l1f0c
ret
l1f18:
push bc
push hl
push de
ld hl,(l2e40)
ex de,hl
ld b,0
xor d
ld c,a
ld hl,l2ee0
add hl,bc
ld a,(hl)
xor e
ld d,a
inc h
ld e,(hl)
ld (l2e40),de
pop de
pop hl
pop bc
ret
inc_hl_12:
ld de,0ch
add hl,de
ret
tab_it:
call in_lin_prnt
db tab,tab,0
ret
cr_lf:
call in_lin_prnt
db cr,lf,0
ret
in_lin_prnt:
pop hl
ld a,(hl)
or a
inc hl
push hl
ret z
call prnt_a_char
jp in_lin_prnt
cons_op_strg:
ld c,9 ;console output string
jp bdos
prnt_a_char:
ld e,a
and 80h
ld a,e
jp z,l1f64
push af
call set_inv_on
pop af
call l1f64
call set_inv_off
ret
l1f64:
and 7fh
ld e,a
ld c,2 ;console output byte
jp bdos
;
set_inv_on:
ld hl,inv_on
jr pnt_2_zero
set_inv_off:
ld hl,inv_off
pnt_2_zero:
ld a,(hl)
inc hl
or a
ret z
ld b,a
l1f7a:
push hl
push bc
ld a,(hl)
call l1f64
pop bc
pop hl
inc hl
djnz l1f7a
ret
get_nxt_fcb:
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ld de,new_stk
add hl,de
ret
;
l220f:
ld de,10h
ld (l2378),hl
add hl,de
ld (l237a),hl
ld hl,0
add hl,sp
ld (l228d),hl
call l2363
ld de,lff76
call cmp_hl_de
ld a,1
ret nz
xor a
ld (l2374),a
ld (l2377),a
call l2363
ld (l237e),hl
ld hl,(l2378)
l223c:
push hl
call l196e
pop hl
push af
call l229d
ld b,a
pop af
ld (hl),b
inc hl
jp nz,l228c
or a
jp nz,l223c
call l2363
ld (l2380),hl
ld de,0102h
call cmp_hl_de
jp c,l2263
ld a,2
or a
ret
l2263:
ld de,(l237a)
l2268:
ld (l237c),hl
ld a,h
or l
jp z,l2293
push de
call l2363
pop de
ex de,hl
ld (hl),e
inc hl
ld (hl),d
inc hl
push hl
call l2363
ex de,hl
pop hl
ld (hl),e
inc hl
ld (hl),d
inc hl
ex de,hl
ld hl,(l237c)
dec hl
jp l2268
l228c:
l228d equ $+1
ld sp,0
ld a,3
or a
ret
l2293:
ld hl,(l2378)
ld de,(l237e)
xor a
ret
l229d:
cp 'a'
ret c
cp '{'
ret nc
and 5fh
ret
;
; ####################### USQ section #######################
;
l22dc:
ld hl,0
add hl,sp
ld (l228d),hl
ld a,(l2377)
or a
jp z,l22f3
dec a
ld (l2377),a
ld a,(l2376)
cp a
ret
l22f3:
call l2315
cp 90h
jp nz,l2310
call l2315
or a
jp nz,l2306
ld a,90h
cp a
ret
l2306:
dec a
dec a
ld (l2377),a
ld a,(l2376)
cp a
ret
l2310:
ld (l2376),a
cp a
ret
l2315:
ld de,0
ld a,(l2375)
ld c,a
l231c:
ld a,(l2374)
or a
jp nz,l232e
push de
call l196e
jp nz,l228c
pop de
ld c,a
ld a,8
l232e:
dec a
ld (l2374),a
ld a,c
rrca
ld c,a
ld hl,(l237a)
jp nc,l233d
inc hl
inc hl
l233d:
add hl,de
add hl,de
add hl,de
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
ld a,d
and 80h
jp z,l231c
ld a,c
ld (l2375),a
ld a,d
cp 0feh
ld a,1ah
jp z,l235a
ld a,e
cpl
cp a
ret
l235a:
pop hl
or a
ret
l2363:
call l196e
jp nz,l228c
push af
call l196e
jp nz,l228c
ld h,a
pop af
ld l,a
ret
;
l2382:
ld a,0ffh
ld (l2be8),a
ld (l2c42),hl
ld hl,0
add hl,sp
ld (l2c82),hl
ld sp,l2c82
ld hl,(l2c42)
ld a,l
and 0fch
ld l,a
ld a,4
call l2b8d
ld (l2be9),hl
ld de,0400h
add hl,de
ld (l2c3e),hl
ld de,0400h
add hl,de
ld (l2c40),hl
call l2b26
xor a
ld (l2bee),a
call l2b57
jp nz,l23c3
ld a,2
jp l2790
l23c3:
ld de,lff76
call cmp_hl_de
jp nz,l23d1
ld a,1
jp l2790
l23d1:
ld a,l
ld (l2bed),a
push hl
call l2b08
pop hl
ld a,h
jp l23e4
l23de:
call l2b63
jp z,l243f
l23e4:
ld hl,l2bed
cp (hl)
jp z,l2419
inc hl
inc (hl)
dec (hl)
jp z,l2436
push af
ld a,(hl)
ld (hl),0
cp 3
jp nc,l240a
ld b,a
dec hl
ld a,(hl)
l23fd:
push af
call l2b08
pop af
djnz l23fd
pop af
jp l2436
l240a:
push af
ld a,90h
call l2b11
pop af
inc a
call l2b11
pop af
jp l2436
l2419:
cp 90h
jp z,l2436
inc hl
inc (hl)
ld a,(hl)
cp 0ffh
jp nz,l23de
push hl
ld a,90h
call l2b11
pop hl
ld a,(hl)
ld (hl),0
call l2b11
ld a,(l2bed)
l2436:
ld (l2bed),a
call l2b08
jp l23de
l243f:
ld a,(l2bee)
or a
jp z,l2451
push af
ld a,90h
call l2b11
pop af
inc a
call l2b11
l2451:
ld b,0
ld hl,(l2c3e)
l2456:
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld c,(hl)
inc hl
ld a,d
or e
or c
jp nz,l246c
inc hl
djnz l2456
ld a,2
jp l2790
l246c:
dec b
ld a,(hl)
push hl
ld hl,(l2c40)
ld (hl),a
inc hl
ld (hl),e
inc hl
ld (hl),d
inc hl
ld (hl),c
inc hl
ld (l2bfb),hl
pop hl
ld a,1
ld (l2bef),a
inc hl
l2484:
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld c,(hl)
inc hl
ld a,(hl)
inc hl
ld (l2c3c),a
ld a,e
or d
or c
jp z,l24f3
push hl
push bc
ld a,(l2bef)
ld b,a
ld hl,(l2c40)
inc hl
l249f:
push hl
call l2bae
jp c,l24b6
pop hl
inc hl
inc hl
inc hl
inc hl
djnz l249f
ld a,c
ld (l2c3d),a
jp l24d2
l24b6:
ld hl,(l2bfb)
ld a,c
ld (l2c3d),a
pop bc
push bc
dec bc
ld a,l
sub c
ld c,a
ld a,h
sbc a,b
ld b,a
push de
ld d,h
ld e,l
inc de
inc de
inc de
dec hl
lddr
pop de
pop hl
l24d2:
dec hl
pop bc
ld a,(l2c3c)
ld (hl),a
inc hl
ld (hl),e
inc hl
ld (hl),d
inc hl
ld a,(l2c3d)
ld (hl),a
ld hl,(l2bfb)
inc hl
inc hl
inc hl
inc hl
ld (l2bfb),hl
ld a,(l2bef)
inc a
ld (l2bef),a
pop hl
l24f3:
djnz l2484
ld a,(l2bef)
ld hl,l2a82
ld b,7
or a
jp z,l2515
l2503:
inc (hl)
dec (hl)
jp nz,l250c
cp (hl)
jp nz,l2510
l250c:
cp (hl)
jp nc,l2515
l2510:
inc hl
djnz l2503
l2515:
inc b
inc b
inc b
ld hl,l2a81
ld (hl),b
xor a
ld (l2c37),a
ld (l2c38),a
l2523:
call l2a6c
xor a
ld h,a
ld (l2bee),a
ld (l2bfa),a
inc a
ld l,a
ld (l2bed),a
ld (l2bf8),hl
inc a
ld (l2bf4),a
ld hl,(l2be9)
ld (l2bf6),hl
ld hl,0
ld (l2c0b),hl
ld (l2c0d),hl
ld hl,l2c24
ld de,l2c25
ld bc,10h
ld (hl),0
ldir
ld a,(l2c37)
or a
jp nz,l258d
l255e:
call l2a54
jp z,l2654
call l2aa5
jp z,l25c5
ld b,a
ld a,(l2bed)
cp c
jp z,l257a
l2572:
call l290d
inc a
cp c
jp nz,l2572
l257a:
ld a,(l2bf4)
cp 1
jp z,l25ca
ld hl,l2bee
inc (hl)
ld a,b
call l2993
jp l255e
l258d:
call l2a54
jp z,l2654
ld b,a
l2594:
ld hl,l2bed
ld a,(l2a81)
cp (hl)
jp c,l25c6
ld a,(hl)
ld hl,l2c13
call l2b8d
ld a,(l2bee)
cp (hl)
jp nz,l25b2
call l290d
jp l2594
l25b2:
ld a,(l2bf4)
cp 1
jp z,l25ca
ld hl,l2bee
inc (hl)
ld a,b
call l2993
jp l258d
l25c5:
ld b,a
l25c6:
push bc
jp l25ce
l25ca:
push bc
l25cb:
call l290d
l25ce:
ld hl,l2bf0
ld a,(hl)
cp 0feh
jp c,l25e2
ld a,(l2bed)
cp 7
ld a,(hl)
jp nc,l25e2
ld a,0fdh
l25e2:
inc a
inc a
ld b,a
ld a,(l2bf4)
add a,a
sub b
jp nc,l2622
ld a,(l2bf4)
or a
rla
jp nc,l25fa
rra
rra
jp l2602
l25fa:
rra
call l2aed
or a
jp z,l25cb
l2602:
ld (l2bf5),a
pop bc
jp l2610
l2609:
call l2a54
jp z,l2654
ld b,a
l2610:
ld hl,l2bee
inc (hl)
ld a,(l2bf5)
cp (hl)
jp c,l25ca
ld a,b
call l2993
jp l2609
l2622:
ld (l2bf5),a
pop bc
jp l2630
l2629:
call l2a54
jp z,l2654
ld b,a
l2630:
ld hl,l2bee
inc (hl)
ld a,(l2bf5)
cp (hl)
ld a,b
jp c,l2642
call l2993
jp l2629
l2642:
call l290d
jp l264e
l2648:
call l2a54
jp z,l2654
l264e:
call l2993
jp l2648
l2654:
ld a,(l2c38)
or a
push af
call nz,l2a39
pop af
jp nz,l272f
ld a,(l2c37)
or a
jp nz,l2691
ld hl,l2c0b
ld de,l2c0f
ld bc,4
ldir
ld hl,l2c24
ld de,l2c13
ld bc,11h
ldir
ld a,(l2be2)
dec a
ld (l2c35),a
ld a,0ffh
ld (l2c37),a
ld (l2c39),a
jp l2709
l2691:
ld a,0ffh
ld (l2c39),a
ld hl,l2c0b
ld de,l2c0f
ld b,4
call l2bbb
jp c,l26d2
l26a4:
xor a
ld (l2c39),a
l26a8:
ld hl,l2c13
ld a,(l2c35)
call l2b8d
ld a,(l2c3a)
ld c,(hl)
ld (hl),a
ld a,(l2c36)
cpl
inc a
cp 0ffh
jp z,l2709
ld b,a
ld a,(l2c3b)
sub c
cp 2
jp nc,l2709
inc (hl)
ld a,b
ld (l2c36),a
jp l26f3
l26d2:
ld hl,l2c24
ld de,l2c13
ld bc,11h
ldir
l26de:
ld hl,l2c13
ld a,(l2c35)
call l2b8d
ld a,(hl)
ld (l2c3a),a
ld a,(l2c36)
add a,(hl)
jp m,l26a8
ld (hl),a
l26f3:
ld a,(l2c39)
or a
jp z,l2523
ld hl,l2c0b
ld de,l2c0f
ld bc,4
ldir
jp l2523
l2709:
ld a,0ffh
ld (l2c36),a
ld a,(l2a81)
ld hl,l2c35
inc (hl)
cp (hl)
jp nc,l2721
ld a,0ffh
ld (l2c38),a
jp l2523
l2721:
ld a,(hl)
ld hl,l2c13
call l2b8d
ld a,(hl)
ld (l2c3b),a
jp l26de
l272f:
ld hl,l2c0b
ld bc,0403h
call l2c84
xor a
ld (l2be8),a
ld hl,(l2bf8)
add hl,hl
add hl,hl
ld a,0fh
call l2b8d
ld de,l2c0b
ld (l2c02),hl
ld hl,0
ld (l2c04),hl
ld hl,l2c02
ld b,4
call l2b92
ex de,hl
ld a,(hl)
or 7fh
ld (hl),a
ex de,hl
ld (hl),1
push hl
inc hl
xor a
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
pop hl
ld b,4
call l2b92
ex de,hl
ld bc,0407h
call l2c84
ld hl,l2bff
ld bc,0307h
call l2c84
ld de,(l2bff)
ld hl,(l2c0b)
call cmp_hl_de
ld a,3
jp nc,l2790
xor a
l2790:
ld hl,(l2c82)
ld sp,hl
ld hl,(l2c0b)
ret
l2798:
ld a,(l2be8)
or a
jp z,l27a1
xor a
ret
l27a1:
ld (l2c44),hl
ld hl,0
add hl,sp
ld (l2c82),hl
ld sp,l2c82
ld hl,lff76
call l28fe
ld hl,(l2bfd)
call l28fe
ex de,hl
ld hl,0
call l2ba1
ld (l2bfd),hl
ld hl,(l2c44)
inc hl
ld b,8
l27ca:
ld a,(hl)
cp ' '
jp z,l27d8
call l2903
inc hl
djnz l27ca
l27d8:
ld a,'.'
call l2903
ld a,b
call l2b8d
ld b,3
l27e3:
ld a,(hl)
cp ' '
jp z,l27f1
call l2903
inc hl
djnz l27e3
l27f1:
xor a
call l2903
ld hl,(l2bf8)
call l28fe
add hl,hl
add hl,hl
ex de,hl
ld hl,(l2be9)
l2801:
ld a,(hl)
call l2903
inc hl
dec de
ld a,d
or e
jp nz,l2801
xor a
ld (l2bec),a
ld (l2bee),a
ld a,8
ld (l2beb),a
call l2b63
jp l2876
l281e:
call l2b63
jp z,l287f
ld hl,l2bed
cp (hl)
jp z,l2859
inc hl
inc (hl)
dec (hl)
jp z,l2876
push af
ld a,(hl)
ld (hl),0
cp 3
jp nc,l284a
ld b,a
dec hl
ld a,(hl)
l283d:
push af
call l28c5
pop af
djnz l283d
pop af
jp l2876
l284a:
push af
ld a,90h
call l28ce
pop af
inc a
call l28ce
pop af
jp l2876
l2859:
cp 90h
jp z,l2876
inc hl
inc (hl)
ld a,(hl)
cp 0ffh
jp nz,l281e
push hl
ld a,90h
call l28ce
pop hl
ld a,(hl)
ld (hl),0
call l28ce
ld a,(l2bed)
l2876:
ld (l2bed),a
call l28c5
jp l281e
l287f:
ld a,(l2bee)
or a
jp z,l2891
push af
ld a,90h
call l28ce
pop af
inc a
call l28ce
l2891:
ld a,0ffh
call l2b81
inc hl
inc hl
inc hl
call l28d3
ld a,(l2beb)
cp 8
jp z,l28b0
ld b,a
ld a,(l2bec)
l28a8:
rra
djnz l28a8
call l2903
l28b0:
ld a,0ffh
ld (l2be8),a
ld hl,(l2bfd)
ld a,h
or l
ld a,1
jp nz,l28c0
xor a
l28c0:
ld hl,(l2c82)
ld sp,hl
ret
l28c5:
cp 90h
jp nz,l28ce
call l28ce
xor a
l28ce:
push bc
call l2b81
pop bc
l28d3:
push bc
ld b,(hl)
inc hl
ld e,(hl)
inc hl
ld d,(hl)
ld a,(l2beb)
ld c,a
l28dd:
ld a,e
rla
ld e,a
ld a,d
rla
ld d,a
ld a,(l2bec)
rra
dec c
jp nz,l28f1
call l2903
ld c,8
xor a
l28f1:
ld (l2bec),a
djnz l28dd
ld a,c
ld (l2beb),a
pop bc
ret
l28fe:
ld a,l
call l2903
ld a,h
l2903:
push bc
push de
push hl
call l18ce
pop hl
pop de
pop bc
ret
l290d:
push af
push bc
ld a,(l2c38)
or a
jp z,l2949
ld a,(l2bf4)
ld de,(l2bf8)
ld hl,(l2bf6)
ld b,a
ld a,(l2bfa)
ld c,a
l2925:
ld (hl),e
inc hl
ld (hl),d
inc hl
ld a,l
and 2
jp nz,l2930
inc c
l2930:
inc de
ld a,d
or a
jp z,l293a
cp e
jp z,l2960
l293a:
djnz l2925
ld (l2bf6),hl
ex de,hl
ld (l2bf8),hl
ld a,c
ld (l2bfa),a
l2949:
ld hl,l2bed
inc (hl)
ld a,(hl)
cp 11h
jp nc,l2960
xor a
ld (l2bee),a
ld hl,l2bf4
ld a,(hl)
add a,a
ld (hl),a
pop bc
pop af
ret
l2960:
pop bc
pop af
pop hl
ld a,(l2a81)
dec a
ld b,a
jp nz,l2970
ld a,4
jp p,l2790
l2970:
ld a,(l2c38)
or a
jp nz,l297e
ld a,(l2c37)
or a
jp nz,l26a4
l297e:
ld hl,l2a81
ld (hl),b
ld a,(l2c38)
or a
jp z,l2523
xor a
ld (l2c38),a
ld (l2c37),a
jp l2523
l2993:
push af
call l2b81
l2997:
ld a,(l2bed)
ld (hl),a
inc hl
push hl
ld hl,(l2bf2)
dec hl
ld (l2c07),a
ld de,l2c05
ld bc,3
xor a
ld (de),a
dec de
lddr
ld hl,0
ld (l2c08),hl
ld (l2c09),hl
ld b,4
ld de,l2c07
ld hl,l2c02
call l2d65
ld de,l2c0b
ld hl,l2c02
ld b,4
call l2b92
ld a,(l2bed)
ld hl,l2c24
call l2b8d
inc (hl)
ld hl,l2bf4
dec (hl)
ld a,(l2c38)
or a
jp nz,l29e7
pop hl
pop af
ret
l29e7:
ld hl,(l2bf6)
ld de,0
ld (hl),0ffh
ld a,(l2bfa)
ld c,a
l29f3:
ld a,l
and 2
jp z,l29fa
scf
l29fa:
ld a,d
rra
ld d,a
ld a,e
rra
ld e,a
ld a,(hl)
cp 3
jp c,l2a1f
ld b,c
l2a07:
dec hl
ld a,(hl)
dec hl
push af
ld a,l
and 2
jp z,l2a12
dec c
l2a12:
pop af
or a
jp nz,l2a07
ld a,(hl)
cp b
jp z,l29f3
jp l2a07
l2a1f:
pop hl
ld (hl),e
inc hl
ld (hl),d
ld hl,(l2bf6)
pop af
cpl
ld (hl),a
inc hl
ld (hl),0ffh
inc hl
ld (l2bf6),hl
ld a,l
and 2
ret nz
ld hl,l2bfa
inc (hl)
ret
l2a39:
ld a,0ffh
call l2b81
inc hl
inc hl
inc hl
push hl
ld hl,l2a49
ex (sp),hl
call l2997
l2a49:
ld hl,(l2bf6)
ld a,0feh
dec hl
ld (hl),a
dec hl
inc a
ld (hl),a
ret
l2a54:
ld hl,(l2bf0)
ld a,l
or h
ret z
dec hl
ld (l2bf0),hl
ld hl,(l2bf2)
ld a,(hl)
inc hl
ld d,h
ld e,l
inc hl
inc hl
inc hl
ld (l2bf2),hl
ret
l2a6c:
ld a,(l2bef)
ld l,a
ld h,0
or a
jp nz,l2a77
inc h
l2a77:
ld (l2bf0),hl
ld hl,(l2c40)
ld (l2bf2),hl
ret
l2a81:
db 00h
l2a82:
db 80h,40h,20h,10h,08h,04h,02h
l2a89:
db 0ffh,0ffh
db 000h,30h
db 000h,18h
db 000h,0ch
db 000h,06h
db 000h,03h
db 080h,01h
db 0c0h,00h
db 060h,00h
db 030h,00h
db 018h,00h
db 00ch,00h
db 006h,00h
db 003h,00h
l2aa5:
push af
call l2ad4
ld de,(l2c02)
ld c,1
ld hl,l2a89
ld a,(l2a81)
ld b,a
l2ab6:
ld a,(hl)
inc hl
push hl
ld h,(hl)
ld l,a
call l2ba1
pop hl
jp c,l2acd
inc c
inc hl
djnz l2ab6
pop af
ld b,a
xor a
ld a,b
ret
l2acd:
pop af
or a
ret nz
dec a
ld a,0
ret
l2ad4:
ex de,hl
ld de,l2c02
push de
xor a
ld (de),a
inc de
ld (de),a
inc de
ld bc,3
ldir
pop hl
ld de,l2be3
ld b,5
jp l2ca4
l2aed:
ld b,0
l2aef:
sub 3
jp c,l2af8
inc b
jp l2aef
l2af8:
ld a,b
ret
l2afa:
ld hl,l2be3
inc (hl)
ret nz
inc hl
inc (hl)
ret nz
inc hl
inc (hl)
ret nz
inc hl
inc (hl)
ret
l2b08:
cp 90h
jp nz,l2b11
call l2b11
xor a
l2b11:
call l2afa
ld l,a
ld h,0
add hl,hl
add hl,hl
ld de,(l2c3e)
add hl,de
inc (hl)
ret nz
inc hl
inc (hl)
ret nz
inc hl
inc (hl)
ret
l2b26:
xor a
ld b,a
ld c,a
ld hl,(l2c3e)
l2b2c:
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),c
inc hl
inc c
djnz l2b2c
ld hl,l2be3
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
inc hl
ld hl,l2be3
ld de,l2bff
ld bc,4
ldir
ld hl,0
ld (l2bfd),hl
ret
l2b57:
call l2b63
ret z
ld l,a
push hl
call l2b63
pop hl
ld h,a
ret
l2b63:
call l196e
jp z,l2b6b
cp a
ret
l2b6b:
push af
ld hl,(l2bfd)
call l2b8d
ld (l2bfd),hl
pop af
ld hl,l2bff
inc (hl)
ret nz
inc hl
inc (hl)
ret nz
inc hl
inc (hl)
ret
l2b81:
ld hl,(l2c3e)
ld b,a
call l2b8d
ld a,b
call l2b8d
ld a,b
l2b8d:
add a,l
ld l,a
ret nc
inc h
ret
l2b92:
push hl
push de
or a
l2b95:
ld a,(de)
adc a,(hl)
ld (de),a
inc de
inc hl
djnz l2b95
pop de
pop hl
ret
l2ba1:
ld a,l
sub e
ld l,a
ld a,h
sbc a,d
ld h,a
ret
l2bae:
inc hl
inc hl
ld a,(hl)
cp c
ret nz
dec hl
ld a,(hl)
cp d
ret nz
dec hl
ld a,(hl)
cp e
ret
l2bbb:
ld c,b
ld b,0
add hl,bc
ex de,hl
add hl,bc
l2bc1:
dec hl
dec de
ld a,(de)
cp (hl)
ret nz
dec c
jp nz,l2bc1
cp (hl)
ret
;
l2c84:
ld a,c
or a
ret z
ld a,b
or a
ret z
ld e,b
ld d,0
add hl,de
dec hl
or a
l2c90:
push af
ld b,a
ld e,l
ld d,h
l2c94:
rr (hl)
dec hl
djnz l2c94
ld l,e
ld h,d
pop af
dec c
jp nz,l2c90
ret
l2ca4:
ld a,b
or a
jp z,l2d47
ld (l2d4c),hl
ld (l2d4e),de
ld c,b
ld l,c
ld h,0
add hl,hl
add hl,hl
add hl,hl
inc hl
ld (l2d54),hl
ld hl,l2d57
ld de,l2d5e
ld b,c
xor a
l2cc3:
ld (hl),a
ld (de),a
inc hl
inc de
djnz l2cc3
ld hl,l2d57
ld (l2d50),hl
ld hl,l2d5e
ld (l2d52),hl
ld hl,(l2d4e)
ld b,c
xor a
l2cdc:
or (hl)
inc hl
djnz l2cdc
or a
jp z,l2d43
or a
l2ce7:
ld b,c
ld hl,(l2d4c)
l2ceb:
rl (hl)
inc hl
djnz l2ceb
ld hl,l2d54
dec (hl)
jp nz,l2cff
inc hl
dec (hl)
jp m,l2d47
l2cff:
ld hl,(l2d50)
ld b,c
l2d03:
rl (hl)
inc hl
djnz l2d03
push bc
ld a,c
ld (l2d56),a
ld hl,(l2d52)
ld b,h
ld c,l
ld de,(l2d50)
ld hl,(l2d4e)
or a
l2d1d:
ld a,(de)
sbc a,(hl)
ld (bc),a
inc hl
inc de
inc bc
ld a,(l2d56)
dec a
ld (l2d56),a
jp nz,l2d1d
pop bc
ccf
jp nc,l2ce7
ld de,(l2d50)
ld hl,(l2d52)
ld (l2d50),hl
ex de,hl
ld (l2d52),hl
jp l2ce7
l2d43:
scf
jr l2d48
l2d47:
or a
l2d48:
ld hl,(l2d50)
ret
;
l2d65:
ld a,b
or a
ret z
ld c,b
ld b,0
add hl,bc
ex de,hl
ld (l2dcd),hl
ld hl,l2dcf
add hl,bc
ld (l2dcb),hl
ld l,c
ld h,b
add hl,hl
add hl,hl
add hl,hl
inc hl
ld (l2dc9),hl
ld b,c
ld hl,l2dcf
l2d84:
ld (hl),0
inc hl
djnz l2d84
or a
l2d8c:
ld b,c
ld hl,(l2dcb)
l2d90:
dec hl
rr (hl)
djnz l2d90
ld l,e
ld h,d
ld b,c
l2d9b:
dec hl
rr (hl)
djnz l2d9b
jp nc,l2dba
push de
ld de,(l2dcd)
ld hl,l2dcf
ld b,c
or a
l2db0:
ld a,(de)
adc a,(hl)
ld (hl),a
inc de
inc hl
djnz l2db0
pop de
l2dba:
ld hl,l2dc9
dec (hl)
jp nz,l2d8c
inc hl
inc (hl)
dec (hl)
ret z
dec (hl)
jp l2d8c
;
title_msg:
db tab,tab ;'Z80 Turbo SWEEP '
vers_date
db cr,lf,lf,'$'
main_menu:
db TAB,TAB,TAB,'C O M M A N D M E N U'
db cr,lf,lf
db TAB,'A - Retag files | B - Back one file'
db cr,lf
db TAB,'C - Copy file | D - Delete file'
db cr,lf
db tab,'E - Erase T/U files | F - Find file'
db cr,lf
db tab,'L - Log new disk/user | M - Mass file copy'
db cr,lf
db tab,'P - Print file | Q - Squeeze/Unsqueeze tagged files'
db cr,lf
db tab,'R - Rename file(s) | S - Check remaining space'
db cr,lf
db tab,'T - Tag file for mass | U - Untag file'
db cr,lf
db tab,'V - View file | W - Wildcard tag of files'
db cr,lf
db tab,'X - Exit to CP/M | Y - Set file attributes.'
db cr,lf
db tab,'? - Display this help | cr, sp - Forward one file'
db cr,lf,lf,lf,'$'
;
chr_strg_bfr:
db 12h
cmd_strg_cnt:
db 0
cmd_strg_dat:
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;
rst_sav:
ds 3 ;save address for possible rst address
l2374: db 0
l2375: db 0
l2376: db 0
l2377: db 0
l2378: dw 0
l237a: dw 0
l237c: dw 0
l237e: dw 0
l2380: dw 0
;
l2be2: db 4
l2be3: db 0,0,0,0,0
l2be8: db 0ffh
l2be9: dw 0
l2beb: db 0
l2bec: db 0
l2bed: db 0
l2bee: db 0
l2bef: db 0
l2bf0: dw 0
l2bf2: dw 0
l2bf4: db 0
l2bf5: db 0
l2bf6: dw 0
l2bf8: dw 0
l2bfa: db 0
l2bfb: dw 0
l2bfd: dw 0
l2bff: db 0,0,0
l2c02: dw 0
l2c04: db 0
l2c05: dw 0
l2c07: db 0
l2c08: db 0
l2c09: dw 0
l2c0b: dw 0
l2c0d: dw 0
l2c0f: db 0,0,0,0
l2c13: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
l2c24: db 0
l2c25: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
l2c35: db 0
l2c36: db 0
l2c37: db 0
l2c38: db 0
l2c39: db 0
l2c3a: db 0
l2c3b: db 0
l2c3c: db 0
l2c3d: db 0
l2c3e: dw 0
l2c40: dw 0
l2c42: dw 0
l2c44: db 0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0
l2c82: dw 0
;
l2d4c: dw 0
l2d4e: dw 0
l2d50: dw 0
l2d52: dw 0
l2d54: db 0,0
l2d56: db 0
l2d57: db 0,0,0,0,0,0,0
l2d5e: db 0,0,0,0,0,0,0
;
l2dc9: dw 0
l2dcb: dw 0
l2dcd: dw 0
l2dcf: db 0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0
mpm_flag:
db 0
l2e01: db 0
l2e02: dw 0
verif_flag:
db 0
def_drive:
db 0
cur_drv:
db 0
def_usr:
db 0
cur_user:
db 0
l2e09: dw 0
total_files:
dw 0
tag_utag_flg:
db 0
l2e0e: db 0
db 0
l2e10: dw 0
fil_cntr:
dw 0
l2e14: dw 0
l2e16: dw 0
l2e18: dw 0
l2e1a: dw 0
l2e1c: dw 0
l2e1e: dw 0
l2e20: dw 0
l2e22: dw 0
l2e24: dw 0
l2e26: dw 0
l2e28: dw 0
l2e2a: db 0
free_space:
dw 0
used_space:
dw 0
blk_siz_tagd:
dw 0
k_siz_tagd:
dw 0
lin_cntr:
db 0
prompt_flag:
db 0
l2e35: dw 0
ram_top_adr:
dw 0
new_drive:
db 0
l2e3a: db 0
new_user:
db 0
bdos_func:
db 0
l2e3d: db 0
l2e3e: dw 0
l2e40: dw 0
l2e42: dw 0
cmd_save:
db 0
l2e45: dw 0
db 0
new_fil_fcb:
db 0
new_fil_nam:
db 0,0,0,0,0,0,0,0
l2e51: db 0,0,0
l2e54: db 0
l2e55: db 0
l2e56: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
int_fcb:
db 0
dummy_fname:
db 0,0,0,0,0,0,0,0
ext_1: db 0
ext_2: db 0
ext_3: db 0
l2e7a: db 0
l2e7b: db 0,0,0
l2e7e: db 0,0,0,0,0,0,0,0,0
l2e87: db 0,0,0,0,0,0,0,0,0,0,0,0,0
l2e94: db 0
l2e95: db 0,0,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,0,0,0
l2eba: db 0
l2ebb: db 0,0,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,0,0,0
l2ee0: db 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,0
;
.dephase
;
end