mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1552 lines
49 KiB
1552 lines
49 KiB
; findfile.asm 7/21/2012 dwg - added keystroke scan terminate
|
|
; findfile.asm 7/19/2012 dwg - for 2.0.0.0 B22
|
|
; findfile.asm 2/20.2012 dwg - add RESET$DISK before exit for ZDOS
|
|
; findfile.asm 2/17/2012 dwg - review for release 1.5.1.0
|
|
; findfile.asm 2/11/2012 dwg - make ident compliant
|
|
; findfile.asm 1/30/2012 dwg - use new do$start and do$end macros
|
|
; findfile.asm 1/22/2012 dwg - find a file on any slice
|
|
|
|
; Copyright (C) 2011-2012 Douglas Goodall Licensed under GPL Ver 3.
|
|
;
|
|
; This file is part of NuBiosDWG and is free software: you can
|
|
; redistribute it and/or modify it under the terms of the GNU
|
|
; General Public License as published by the Free Software Foundation,
|
|
; either version 3 of the License, or (at your option) any later version.
|
|
; This file is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with it. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
maclib portab
|
|
maclib globals
|
|
maclib stdlib
|
|
maclib cpmbios
|
|
maclib cpmbdos
|
|
maclib bioshdr
|
|
maclib printers
|
|
maclib banner
|
|
maclib terminal
|
|
maclib applvers
|
|
maclib version
|
|
; maclib ffhaslu
|
|
; maclib ffnumlu
|
|
; maclib ffsetlu
|
|
; maclib ffgetlu
|
|
; maclib z80
|
|
; maclib memory
|
|
; maclib cpmappl
|
|
; maclib identity
|
|
|
|
; identity.lib 2/19/2012 dwg - add ify macro
|
|
; identity.lib 2/17/2012 dwg - Program Identity Declarations
|
|
|
|
extrn x$ident
|
|
|
|
ident macro file1fcb
|
|
lxi h,file1fcb
|
|
call x$ident
|
|
endm
|
|
|
|
ify macro progname,bool
|
|
local done
|
|
local file
|
|
local fini
|
|
ident file
|
|
jmp fini
|
|
newfcb file,0,progname
|
|
fini: mvi a,bool
|
|
cpi TRUE
|
|
jnz done
|
|
conout CR
|
|
conout LF
|
|
done:
|
|
endm
|
|
|
|
|
|
identx macro file1fcb
|
|
local openok
|
|
local identend
|
|
|
|
local ldrive,lcolon,lname,ldot,lext,lterm
|
|
|
|
mvi c,FOPEN
|
|
lxi d,file1fcb
|
|
call BDOS
|
|
cpi 255
|
|
jnz openok
|
|
|
|
memcpy lname,file1fcb+1,8
|
|
mvi a,','
|
|
sta ldot
|
|
memcpy lext,file1fcb+9,3
|
|
mvi a,'$'
|
|
sta lterm
|
|
print lname
|
|
printf ' -- File Not Found'
|
|
jmp identend
|
|
openok:
|
|
|
|
mvi c,SETDMA
|
|
lxi d,buffer
|
|
call BDOS
|
|
|
|
mvi c,READSEQ
|
|
lxi d,file1fcb
|
|
call BDOS
|
|
|
|
mvi c,FCLOSE
|
|
lxi d,file1fcb
|
|
call BDOS
|
|
|
|
lxi d,d$prog
|
|
mvi c,9
|
|
call BDOS
|
|
|
|
conout ','
|
|
conout ' '
|
|
lda p$rmj
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
conout '.'
|
|
lda p$rmn
|
|
mov l,a
|
|
call pr$d$word
|
|
conout '.'
|
|
lda p$rup
|
|
mov l,a
|
|
call pr$d$word
|
|
conout '.'
|
|
lda p$rtp
|
|
mov l,a
|
|
call pr$d$word
|
|
conout ','
|
|
conout ' '
|
|
|
|
lda p$mon
|
|
mov l,a
|
|
call pr$d$word
|
|
conout '/'
|
|
lda p$day
|
|
mov l,a
|
|
call pr$d$word
|
|
conout '/'
|
|
lhld p$year
|
|
call pr$d$word
|
|
conout ','
|
|
conout ' '
|
|
|
|
lxi d,d$prod
|
|
mvi c,9
|
|
call BDOS
|
|
conout ','
|
|
conout ' '
|
|
|
|
lxi d,d$orig
|
|
mvi c,9
|
|
call BDOS
|
|
conout ','
|
|
conout ' '
|
|
|
|
lxi d,d$ser
|
|
mvi c,9
|
|
call BDOS
|
|
conout ','
|
|
conout ' '
|
|
|
|
lxi d,d$name
|
|
mvi c,9
|
|
call BDOS
|
|
jmp identend
|
|
|
|
ldrive ds 1
|
|
lcolon ds 1
|
|
lname ds 8
|
|
ldot ds 1
|
|
lext ds 3
|
|
lterm ds 1
|
|
|
|
identend:
|
|
endm
|
|
|
|
idata macro
|
|
jmp around$bandata
|
|
argv dw prog,dat,prod,orig,ser,myname,0
|
|
prog db 'IDENT.COM $'
|
|
date
|
|
serial
|
|
product
|
|
originator
|
|
oriname
|
|
uuid db '777A67C2-4A92-42D4-80FE-C96FD6483BD2$'
|
|
db 'buffer-->'
|
|
public buffer,p$start,p$hexrf,p$sig
|
|
public p$rmj,p$rmn,p$rup,p$rtp
|
|
public p$mon,p$day,p$year
|
|
buffer ds 1
|
|
p$start ds 2
|
|
p$hexrf ds 16
|
|
p$sig ds 2
|
|
p$rmj ds 1
|
|
p$rmn ds 1
|
|
p$rup ds 1
|
|
p$rtp ds 1
|
|
p$mon ds 1
|
|
p$day ds 1
|
|
p$year ds 2
|
|
p$argv ds 2
|
|
p$e5 ds 1
|
|
p$pr$st ds 2
|
|
p$code1 ds 3 ; begin: lxi h,0
|
|
p$code2 ds 1 ; dad sp
|
|
p$code3 ds 3 ; shld pre$stk
|
|
p$code4 ds 3 ; lxi sp,stack$top
|
|
p$code5 ds 1 ; nop
|
|
p$code6 ds 3 ; jmp around$bandata
|
|
p$prog ds 2 ; dw prog
|
|
p$dat ds 2 ; dw dat
|
|
p$prod ds 2 ; dw prod
|
|
p$orig ds 2 ; dw orig
|
|
p$ser ds 2 ; dw ser
|
|
p$nam ds 2 ; dw nam
|
|
p$term ds 2 ; dw 0
|
|
d$prog ds 8+1+3+1 ; db '12345678.123$'
|
|
d$date ds 2+1+2+1+4+1 ; db ' 2/11/2012$'
|
|
d$ser ds 6+1 ; db '654321$'
|
|
d$prod ds 5+1 ; db 'CPM80$'
|
|
d$orig ds 3+1 ; db 'DWG$'
|
|
d$name ds 1+7+1+1+1+1+7+1 ; db ' Douglas W. Goodall$'
|
|
d$uuid ds 37 ; unique user identification
|
|
d$term2 ds 1 ; can be set to zero or dollar sign
|
|
p$len equ $-buffer
|
|
p$rsvd ds 128-p$len
|
|
db '<--buffer'
|
|
crlf db CR,LF,'$'
|
|
around$bandata:
|
|
|
|
endm
|
|
|
|
; eof - identity.lib
|
|
|
|
|
|
|
|
; cpmappl.lib 2/10/2012 dwg - begin 1.6 development
|
|
; cpmappl.lib 2/04/2012 dwg - fix typo mov becomes mvi
|
|
; cpmappl.lib 2/ 2/2012 dwg - initial version
|
|
|
|
;
|
|
; Copyright (C) 2011-2012 Douglas Goodall Licensed under GPL Ver 3.
|
|
;
|
|
; This file is part of NuBiosDWG and is free software: you can
|
|
; redistribute it and/or modify it under the terms of the GNU
|
|
; General Public License as published by the Free Software Foundation,
|
|
; either version 3 of the License, or (at your option) any later version.
|
|
; This file is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with it. If not, see <http://www.gnu.org/licenses/>.
|
|
;
|
|
|
|
do$start macro
|
|
|
|
start: jmp begin
|
|
|
|
public hexref
|
|
hexref db '0123456789ABCDEF'
|
|
|
|
public id$sig,id$rmj,id$rmn,id$rup,id$rtp,id$mon,id$day,id$yr
|
|
id$sig db 'ID'
|
|
id$rmj db A$RMJ
|
|
id$rmn db A$RMN
|
|
id$rup db A$RUP
|
|
id$rtp db A$RTP
|
|
id$mon db A$MONTH
|
|
id$day db A$DAY
|
|
id$yr dw A$YEAR
|
|
id$argv dw argv
|
|
db 0e5h
|
|
|
|
|
|
public pre$stk
|
|
pre$stk ds 2
|
|
|
|
public begin
|
|
begin: lxi h,0
|
|
dad sp
|
|
shld pre$stk
|
|
lxi sp,stack$top
|
|
nop
|
|
endm
|
|
|
|
|
|
;---------------------------------
|
|
|
|
|
|
do$end macro
|
|
lhld pre$stk
|
|
sphl
|
|
|
|
mvi c,13
|
|
call BDOS
|
|
|
|
ret
|
|
ds stack$size
|
|
stack$top:
|
|
|
|
endm
|
|
|
|
movfcb macro destn,source
|
|
lxi d,destn
|
|
lxi h,source
|
|
lxi b,LENFCB
|
|
ldir
|
|
endm
|
|
|
|
copyfcb macro fcbname,source
|
|
local around
|
|
jmp around
|
|
fcbname ds 32
|
|
around:
|
|
endm
|
|
|
|
|
|
; memory.lib 2/17/2012 dwg - review for release 1.5.1.0
|
|
; memory.lib 2/11/2012 dwg - review for release 1.5
|
|
; memory.lib 2/04/2012 dwg - adjust for new macros
|
|
; memory.lib 1/13/2012 dwg - POSIX memcpy and memset
|
|
|
|
extrn x$memcpy
|
|
extrn x$memset
|
|
|
|
memcpy macro dst,src,siz
|
|
lxi d,dst ; load 1st positional parameter into reg
|
|
lxi h,src ; load 2nd positional parameter into reg
|
|
lxi b,siz ; load 3rd positional parameter into reg
|
|
call x$memcpy ; call actual routine in see memory.asm
|
|
endm
|
|
|
|
memset macro dst,data,siz
|
|
lxi h,dst ; load 1st positional parameter into reg
|
|
mvi a,data ; load 2nd positional parameter into reg
|
|
lxi b,siz ; load 3rd positional parameter into reg
|
|
call x$memset ; call actual routine in see memory.asm
|
|
endm
|
|
|
|
; eof - memory.lib
|
|
|
|
|
|
; @CHK MACRO USED FOR CHECKING 8 BIT DISPLACMENTS
|
|
;
|
|
@CHK MACRO ?DD ;; USED FOR CHECKING RANGE OF 8-BIT DISP.S
|
|
IF (?DD GT 7FH) AND (?DD LT 0FF80H)
|
|
'DISPLACEMENT RANGE ERROR - Z80 LIB'
|
|
ENDIF
|
|
ENDM
|
|
LDX MACRO ?R,?D
|
|
@CHK ?D
|
|
DB 0DDH,?R*8+46H,?D
|
|
ENDM
|
|
LDY MACRO ?R,?D
|
|
@CHK ?D
|
|
DB 0FDH,?R*8+46H,?D
|
|
ENDM
|
|
STX MACRO ?R,?D
|
|
@CHK ?D
|
|
DB 0DDH,70H+?R,?D
|
|
ENDM
|
|
STY MACRO ?R,?D
|
|
@CHK ?D
|
|
DB 0FDH,70H+?R,?D
|
|
ENDM
|
|
MVIX MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0DDH,36H,?D,?N
|
|
ENDM
|
|
MVIY MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0FDH,36H,?D,?N
|
|
ENDM
|
|
LDAI MACRO
|
|
DB 0EDH,57H
|
|
ENDM
|
|
LDAR MACRO
|
|
DB 0EDH,5FH
|
|
ENDM
|
|
STAI MACRO
|
|
DB 0EDH,47H
|
|
ENDM
|
|
STAR MACRO
|
|
DB 0EDH,4FH
|
|
ENDM
|
|
|
|
LXIX MACRO ?NNNN
|
|
DB 0DDH,21H
|
|
DW ?NNNN
|
|
ENDM
|
|
LXIY MACRO ?NNNN
|
|
DB 0FDH,21H
|
|
DW ?NNNN
|
|
ENDM
|
|
LDED MACRO ?NNNN
|
|
DB 0EDH,5BH
|
|
DW ?NNNN
|
|
ENDM
|
|
LBCD MACRO ?NNNN
|
|
DB 0EDH,4BH
|
|
DW ?NNNN
|
|
ENDM
|
|
LSPD MACRO ?NNNN
|
|
DB 0EDH,07BH
|
|
DW ?NNNN
|
|
ENDM
|
|
LIXD MACRO ?NNNN
|
|
DB 0DDH,2AH
|
|
DW ?NNNN
|
|
ENDM
|
|
LIYD MACRO ?NNNN
|
|
DB 0FDH,2AH
|
|
DW ?NNNN
|
|
ENDM
|
|
SBCD MACRO ?NNNN
|
|
DB 0EDH,43H
|
|
DW ?NNNN
|
|
ENDM
|
|
SDED MACRO ?NNNN
|
|
DB 0EDH,53H
|
|
DW ?NNNN
|
|
ENDM
|
|
SSPD MACRO ?NNNN
|
|
DB 0EDH,73H
|
|
DW ?NNNN
|
|
ENDM
|
|
SIXD MACRO ?NNNN
|
|
DB 0DDH,22H
|
|
DW ?NNNN
|
|
ENDM
|
|
SIYD MACRO ?NNNN
|
|
DB 0FDH,22H
|
|
DW ?NNNN
|
|
ENDM
|
|
SPIX MACRO
|
|
DB 0DDH,0F9H
|
|
ENDM
|
|
SPIY MACRO
|
|
DB 0FDH,0F9H
|
|
ENDM
|
|
PUSHIX MACRO
|
|
DB 0DDH,0E5H
|
|
ENDM
|
|
PUSHIY MACRO
|
|
DB 0FDH,0E5H
|
|
ENDM
|
|
POPIX MACRO
|
|
DB 0DDH,0E1H
|
|
ENDM
|
|
POPIY MACRO
|
|
DB 0FDH,0E1H
|
|
ENDM
|
|
EXAF MACRO
|
|
DB 08H
|
|
ENDM
|
|
EXX MACRO
|
|
DB 0D9H
|
|
ENDM
|
|
XTIX MACRO
|
|
DB 0DDH,0E3H
|
|
ENDM
|
|
XTIY MACRO
|
|
DB 0FDH,0E3H
|
|
ENDM
|
|
|
|
LDI MACRO
|
|
DB 0EDH,0A0H
|
|
ENDM
|
|
LDIR MACRO
|
|
DB 0EDH,0B0H
|
|
ENDM
|
|
LDD MACRO
|
|
DB 0EDH,0A8H
|
|
ENDM
|
|
LDDR MACRO
|
|
DB 0EDH,0B8H
|
|
ENDM
|
|
CCI MACRO
|
|
DB 0EDH,0A1H
|
|
ENDM
|
|
CCIR MACRO
|
|
DB 0EDH,0B1H
|
|
ENDM
|
|
CCD MACRO
|
|
DB 0EDH,0A9H
|
|
ENDM
|
|
CCDR MACRO
|
|
DB 0EDH,0B9H
|
|
ENDM
|
|
|
|
ADDX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,86H,?D
|
|
ENDM
|
|
ADDY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,86H,?D
|
|
ENDM
|
|
ADCX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,8EH,?D
|
|
ENDM
|
|
ADCY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,8EH,?D
|
|
ENDM
|
|
SUBX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,96H,?D
|
|
ENDM
|
|
SUBY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,96H,?D
|
|
ENDM
|
|
SBCX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,9EH,?D
|
|
ENDM
|
|
SBCY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,9EH,?D
|
|
ENDM
|
|
ANDX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,0A6H,?D
|
|
ENDM
|
|
ANDY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,0A6H,?D
|
|
ENDM
|
|
XORX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,0AEH,?D
|
|
ENDM
|
|
XORY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,0AEH,?D
|
|
ENDM
|
|
ORX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,0B6H,?D
|
|
ENDM
|
|
ORY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,0B6H,?D
|
|
ENDM
|
|
CMPX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,0BEH,?D
|
|
ENDM
|
|
CMPY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,0BEH,?D
|
|
ENDM
|
|
INRX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,34H,?D
|
|
ENDM
|
|
INRY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,34H,?D
|
|
ENDM
|
|
DCRX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH,035H,?D
|
|
ENDM
|
|
DCRY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH,35H,?D
|
|
ENDM
|
|
|
|
NEG MACRO
|
|
DB 0EDH,44H
|
|
ENDM
|
|
IM0 MACRO
|
|
DB 0EDH,46H
|
|
ENDM
|
|
IM1 MACRO
|
|
DB 0EDH,56H
|
|
ENDM
|
|
IM2 MACRO
|
|
DB 0EDH,5EH
|
|
ENDM
|
|
|
|
|
|
0000 = BC EQU 0
|
|
0002 = DE EQU 2
|
|
0004 = HL EQU 4
|
|
0004 = IX EQU 4
|
|
0004 = IY EQU 4
|
|
DADC MACRO ?R
|
|
DB 0EDH,?R*8+4AH
|
|
ENDM
|
|
DSBC MACRO ?R
|
|
DB 0EDH,?R*8+42H
|
|
ENDM
|
|
DADX MACRO ?R
|
|
DB 0DDH,?R*8+09H
|
|
ENDM
|
|
DADY MACRO ?R
|
|
DB 0FDH,?R*8+09H
|
|
ENDM
|
|
INXIX MACRO
|
|
DB 0DDH,23H
|
|
ENDM
|
|
INXIY MACRO
|
|
DB 0FDH,23H
|
|
ENDM
|
|
DCXIX MACRO
|
|
DB 0DDH,2BH
|
|
ENDM
|
|
DCXIY MACRO
|
|
DB 0FDH,2BH
|
|
ENDM
|
|
|
|
BIT MACRO ?N,?R
|
|
DB 0CBH,?N*8+?R+40H
|
|
ENDM
|
|
SETB MACRO ?N,?R
|
|
DB 0CBH,?N*8+?R+0C0H
|
|
ENDM
|
|
RES MACRO ?N,?R
|
|
DB 0CBH,?N*8+?R+80H
|
|
ENDM
|
|
|
|
BITX MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0DDH,0CBH,?D,?N*8+46H
|
|
ENDM
|
|
BITY MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0FDH,0CBH,?D,?N*8+46H
|
|
ENDM
|
|
SETX MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0DDH,0CBH,?D,?N*8+0C6H
|
|
ENDM
|
|
SETY MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0FDH,0CBH,?D,?N*8+0C6H
|
|
ENDM
|
|
RESX MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0DDH,0CBH,?D,?N*8+86H
|
|
ENDM
|
|
RESY MACRO ?N,?D
|
|
@CHK ?D
|
|
DB 0FDH,0CBH,?D,?N*8+86H
|
|
ENDM
|
|
|
|
JR MACRO ?N
|
|
DB 18H,?N-$-1
|
|
ENDM
|
|
JRC MACRO ?N
|
|
DB 38H,?N-$-1
|
|
ENDM
|
|
JRNC MACRO ?N
|
|
DB 30H,?N-$-1
|
|
ENDM
|
|
JRZ MACRO ?N
|
|
DB 28H,?N-$-1
|
|
ENDM
|
|
JRNZ MACRO ?N
|
|
DB 20H,?N-$-1
|
|
ENDM
|
|
DJNZ MACRO ?N
|
|
DB 10H,?N-$-1
|
|
ENDM
|
|
|
|
PCIX MACRO
|
|
DB 0DDH,0E9H
|
|
ENDM
|
|
PCIY MACRO
|
|
DB 0FDH,0E9H
|
|
ENDM
|
|
|
|
RETI MACRO
|
|
DB 0EDH,4DH
|
|
ENDM
|
|
RETN MACRO
|
|
DB 0EDH,45H
|
|
ENDM
|
|
|
|
INP MACRO ?R
|
|
DB 0EDH,?R*8+40H
|
|
ENDM
|
|
OUTP MACRO ?R
|
|
DB 0EDH,?R*8+41H
|
|
ENDM
|
|
INI MACRO
|
|
DB 0EDH,0A2H
|
|
ENDM
|
|
INIR MACRO
|
|
DB 0EDH,0B2H
|
|
ENDM
|
|
IND MACRO
|
|
DB 0EDH,0AAH
|
|
ENDM
|
|
INDR MACRO
|
|
DB 0EDH,0BAH
|
|
ENDM
|
|
OUTI MACRO
|
|
DB 0EDH,0A3H
|
|
ENDM
|
|
OUTIR MACRO
|
|
DB 0EDH,0B3H
|
|
ENDM
|
|
OUTD MACRO
|
|
DB 0EDH,0ABH
|
|
ENDM
|
|
OUTDR MACRO
|
|
DB 0EDH,0BBH
|
|
ENDM
|
|
|
|
|
|
RLCR MACRO ?R
|
|
DB 0CBH, 00H + ?R
|
|
ENDM
|
|
RLCX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 06H
|
|
ENDM
|
|
RLCY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 06H
|
|
ENDM
|
|
RALR MACRO ?R
|
|
DB 0CBH, 10H+?R
|
|
ENDM
|
|
RALX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 16H
|
|
ENDM
|
|
RALY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 16H
|
|
ENDM
|
|
RRCR MACRO ?R
|
|
DB 0CBH, 08H + ?R
|
|
ENDM
|
|
RRCX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 0EH
|
|
ENDM
|
|
RRCY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 0EH
|
|
ENDM
|
|
RARR MACRO ?R
|
|
DB 0CBH, 18H + ?R
|
|
ENDM
|
|
RARX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 1EH
|
|
ENDM
|
|
RARY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 1EH
|
|
ENDM
|
|
SLAR MACRO ?R
|
|
DB 0CBH, 20H + ?R
|
|
ENDM
|
|
SLAX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 26H
|
|
ENDM
|
|
SLAY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 26H
|
|
ENDM
|
|
SRAR MACRO ?R
|
|
DB 0CBH, 28H+?R
|
|
ENDM
|
|
SRAX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 2EH
|
|
ENDM
|
|
SRAY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 2EH
|
|
ENDM
|
|
SRLR MACRO ?R
|
|
DB 0CBH, 38H + ?R
|
|
ENDM
|
|
SRLX MACRO ?D
|
|
@CHK ?D
|
|
DB 0DDH, 0CBH, ?D, 3EH
|
|
ENDM
|
|
SRLY MACRO ?D
|
|
@CHK ?D
|
|
DB 0FDH, 0CBH, ?D, 3EH
|
|
ENDM
|
|
RLD MACRO
|
|
DB 0EDH, 6FH
|
|
ENDM
|
|
RRD MACRO
|
|
DB 0EDH, 67H
|
|
ENDM
|
|
|
|
; ffsetlu.lib 1/24/2012 dwg -
|
|
ffgetlu macro
|
|
mvi c,RETCURR
|
|
call BDOS
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi d,16+2
|
|
dad d
|
|
mov a,m
|
|
endm
|
|
; eof - ffsetlu
|
|
|
|
|
|
; ffsetlu.lib 2/12/2012 dwg - review for use in superfmt
|
|
; ffsetlu.lib 1/24/2012 dwg -
|
|
|
|
; enter with desired LU in A reg
|
|
ffsetlu macro
|
|
enter
|
|
push psw
|
|
mvi c,RETCURR
|
|
call BDOS
|
|
mov c,a
|
|
call BISELDSK ; uses c parameter (drive)
|
|
lxi d,16+2
|
|
dad d
|
|
pop psw
|
|
mov m,a ; put slice into CURRENT
|
|
mvi c,13
|
|
call BDOS
|
|
leave
|
|
endm
|
|
|
|
; eof - ffsetlu
|
|
|
|
|
|
; ffhaslu.lib 1/22/2012 dwg - macro to detect drive with logical unit support
|
|
|
|
ffhaslu macro
|
|
local ret$false,fini
|
|
mvi c,RETCURR
|
|
call BDOS
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi d,16 ; offset to end of DPH
|
|
dad d ; calc offset of 1st signature byte
|
|
mov a,m ; pick up first sig byte which s/b 'L'
|
|
cpi 'L'
|
|
jnz ret$false ; if it wasn't, indicate to caller no LU
|
|
inx h ; bump ptr to 2nd signature byte
|
|
mov a,m ; pick up second sig byte which s/b 'U'
|
|
cpi 'U'
|
|
jnz ret$false ; if it wasn't, indicate to caller no LU
|
|
mvi a,TRUE ; otherwise indicate presence of LU support
|
|
jmp fini ; finish up macro
|
|
ret$false:
|
|
mvi a,FALSE ; prepare negative response for caller
|
|
fini:
|
|
endm
|
|
|
|
|
|
|
|
; ffnumlu.lib 1/22/2012 dwg - macro to get number of logical units
|
|
|
|
ffnumlu macro
|
|
mvi c,RETCURR
|
|
call BDOS
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi d,16+2+2 ; offset to end of DPH
|
|
dad d ; calc offset of 1st signature byte
|
|
mov a,m
|
|
endm
|
|
|
|
; eof - ffnumlu.lib
|
|
|
|
|
|
|
|
prfilnam macro fcb
|
|
local fnbuf,fnext,prfnfini
|
|
memcpy fnbuf,fcb+1,8
|
|
memcpy fnext,fcb+9,3
|
|
|
|
lda fnext
|
|
ani 07fh
|
|
sta fnext
|
|
|
|
lda fnext+1
|
|
ani 07fh
|
|
sta fnext+1
|
|
|
|
lda fnext+2
|
|
ani 07fh
|
|
sta fnext+2
|
|
|
|
mvi c,9
|
|
lxi d,fnbuf
|
|
call BDOS
|
|
|
|
jmp prfnfini
|
|
|
|
fnbuf db 0,0,0,0,0,0,0,0
|
|
db '.'
|
|
fnext db 0,0,0,' $'
|
|
prfnfini:
|
|
endm
|
|
|
|
|
|
do$start
|
|
0000+C32200 START: JMP BEGIN
|
|
0003+3031323334HEXREF DB '0123456789ABCDEF'
|
|
0013+4944 ID$SIG DB 'ID'
|
|
0015+02 ID$RMJ DB A$RMJ
|
|
0016+05 ID$RMN DB A$RMN
|
|
0017+00 ID$RUP DB A$RUP
|
|
0018+01 ID$RTP DB A$RTP
|
|
0019+03 ID$MON DB A$MONTH
|
|
001A+1F ID$DAY DB A$DAY
|
|
001B+DD07 ID$YR DW A$YEAR
|
|
001D+3000 ID$ARGV DW ARGV
|
|
001F+E5 DB 0E5H
|
|
0020+ PRE$STK DS 2
|
|
0022+210000 BEGIN: LXI H,0
|
|
0025+39 DAD SP
|
|
0026+222000 SHLD PRE$STK
|
|
0029+31C006 LXI SP,STACK$TOP
|
|
002C+00 NOP
|
|
|
|
|
|
002D C3A000 jmp around$bandata
|
|
0030 3E004B005Dargv dw prog,dat,prod,orig,ser,myname,0
|
|
003E 46494E4446prog db 'FINDFILE.COM$'
|
|
date
|
|
004B+20332F3331DAT DB ' 3/31/2013$'
|
|
serial
|
|
0056+3635343332SER DB '654321$'
|
|
product
|
|
005D+43504D3830PROD DB 'CPM80$'
|
|
originator
|
|
0063+44574724 ORIG DB 'DWG$'
|
|
oriname
|
|
0067+20444F5547MYNAME DB ' DOUGLAS W GOODALL $'
|
|
007B 3130374344uuid db '107CDD27-2E4D-4340-A324-BEB13054E67B$'
|
|
around$bandata:
|
|
|
|
|
|
crtinit
|
|
00A0+F5 PUSH PSW
|
|
00A1+C5 PUSH B
|
|
00A2+D5 PUSH D
|
|
00A3+E5 PUSH H
|
|
00A4+CD0000 CALL XCRTINIT
|
|
00A7+E1 POP H
|
|
00A8+D1 POP D
|
|
00A9+C1 POP B
|
|
00AA+F1 POP PSW
|
|
crtclr
|
|
00AB+F5 PUSH PSW
|
|
00AC+C5 PUSH B
|
|
00AD+D5 PUSH D
|
|
00AE+E5 PUSH H
|
|
00AF+CD0000 CALL XCRTCLR ; CALL ACTUAL ROUTINE IN TERMINAL.ASM
|
|
00B2+E1 POP H
|
|
00B3+D1 POP D
|
|
00B4+C1 POP B
|
|
00B5+F1 POP PSW
|
|
crtlc 1,1
|
|
00B6+F5 PUSH PSW
|
|
00B7+C5 PUSH B
|
|
00B8+D5 PUSH D
|
|
00B9+E5 PUSH H
|
|
00BA+2601 MVI H,1 ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
00BC+2E01 MVI L,1 ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
00BE+CD0000 CALL XCRTLC ; CALL ACTUAL ROUTINE IN TERMINAL.ASM
|
|
00C1+E1 POP H
|
|
00C2+D1 POP D
|
|
00C3+C1 POP B
|
|
00C4+F1 POP PSW
|
|
sbanner argv
|
|
00C5+213000 LXI H,ARGV
|
|
00C8+CD0000 CALL X$SBANNER
|
|
; version wrnmsg,errmsg
|
|
|
|
00CB 3A8000 lda 80h
|
|
00CE FE00 cpi 0
|
|
00D0 C21501 jnz no$usage
|
|
print crlf
|
|
00D3+F5 PUSH PSW
|
|
00D4+C5 PUSH B
|
|
00D5+D5 PUSH D
|
|
00D6+E5 PUSH H
|
|
00D7+0E09 MVI C,PRINTSTR
|
|
00D9+111A07 LXI D,CRLF
|
|
00DC+CD0500 CALL BDOS
|
|
00DF+E1 POP H
|
|
00E0+D1 POP D
|
|
00E1+C1 POP B
|
|
00E2+F1 POP PSW
|
|
printf 'usage - findfile <filename>'
|
|
00E3+F5 PUSH PSW
|
|
00E4+C5 PUSH B
|
|
00E5+D5 PUSH D
|
|
00E6+E5 PUSH H
|
|
00E7+0E09 MVI C,PRINTSTR
|
|
00E9+11F600 LXI D,??0002
|
|
00EC+CD0500 CALL BDOS
|
|
00EF+E1 POP H
|
|
00F0+D1 POP D
|
|
00F1+C1 POP B
|
|
00F2+F1 POP PSW
|
|
00F3+C31201 JMP ??0001
|
|
00F6+7573616765??0002 DB 'usage - findfile <filename>'
|
|
0111+24 DB '$'
|
|
0112 C38E04 jmp all$done
|
|
no$usage:
|
|
|
|
|
|
memcpy work$fcb,PRIFCB,32
|
|
0115+112207 LXI D,WORK$FCB ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
0118+215C00 LXI H,PRIFCB ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
011B+012000 LXI B,32 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
011E+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
|
|
printf 'Finding: '
|
|
0121+F5 PUSH PSW
|
|
0122+C5 PUSH B
|
|
0123+D5 PUSH D
|
|
0124+E5 PUSH H
|
|
0125+0E09 MVI C,PRINTSTR
|
|
0127+113401 LXI D,??0004
|
|
012A+CD0500 CALL BDOS
|
|
012D+E1 POP H
|
|
012E+D1 POP D
|
|
012F+C1 POP B
|
|
0130+F1 POP PSW
|
|
0131+C33E01 JMP ??0003
|
|
0134+46696E6469??0004 DB 'Finding: '
|
|
013D+24 DB '$'
|
|
memcpy PRIFCB,work$fcb,16
|
|
013E+115C00 LXI D,PRIFCB ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
0141+212207 LXI H,WORK$FCB ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
0144+011000 LXI B,16 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
0147+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
|
|
014A 3E24 mvi a,'$'
|
|
014C 326500 sta PRIFCB+9
|
|
print PRIFCB+1
|
|
014F+F5 PUSH PSW
|
|
0150+C5 PUSH B
|
|
0151+D5 PUSH D
|
|
0152+E5 PUSH H
|
|
0153+0E09 MVI C,PRINTSTR
|
|
0155+115D00 LXI D,PRIFCB+1
|
|
0158+CD0500 CALL BDOS
|
|
015B+E1 POP H
|
|
015C+D1 POP D
|
|
015D+C1 POP B
|
|
015E+F1 POP PSW
|
|
conout '.'
|
|
015F+F5 PUSH PSW
|
|
0160+C5 PUSH B
|
|
0161+D5 PUSH D
|
|
0162+E5 PUSH H
|
|
0163+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
0165+1E2E MVI E,'.' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
0167+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
016A+E1 POP H
|
|
016B+D1 POP D
|
|
016C+C1 POP B
|
|
016D+F1 POP PSW
|
|
memcpy PRIFCB,work$fcb,16
|
|
016E+115C00 LXI D,PRIFCB ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
0171+212207 LXI H,WORK$FCB ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
0174+011000 LXI B,16 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
0177+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
017A 3E24 mvi a,'$'
|
|
017C 326800 sta PRIFCB+12
|
|
print PRIFCB+9
|
|
017F+F5 PUSH PSW
|
|
0180+C5 PUSH B
|
|
0181+D5 PUSH D
|
|
0182+E5 PUSH H
|
|
0183+0E09 MVI C,PRINTSTR
|
|
0185+116500 LXI D,PRIFCB+9
|
|
0188+CD0500 CALL BDOS
|
|
018B+E1 POP H
|
|
018C+D1 POP D
|
|
018D+C1 POP B
|
|
018E+F1 POP PSW
|
|
print crlf
|
|
018F+F5 PUSH PSW
|
|
0190+C5 PUSH B
|
|
0191+D5 PUSH D
|
|
0192+E5 PUSH H
|
|
0193+0E09 MVI C,PRINTSTR
|
|
0195+111A07 LXI D,CRLF
|
|
0198+CD0500 CALL BDOS
|
|
019B+E1 POP H
|
|
019C+D1 POP D
|
|
019D+C1 POP B
|
|
019E+F1 POP PSW
|
|
|
|
ffhaslu
|
|
019F+0E19 MVI C,RETCURR
|
|
01A1+CD0500 CALL BDOS
|
|
01A4+4F MOV C,A
|
|
01A5+CD1BE6 CALL BISELDSK
|
|
01A8+111000 LXI D,16 ; OFFSET TO END OF DPH
|
|
01AB+19 DAD D ; CALC OFFSET OF 1ST SIGNATURE BYTE
|
|
01AC+7E MOV A,M ; PICK UP FIRST SIG BYTE WHICH S/B 'L'
|
|
01AD+FE4C CPI 'L'
|
|
01AF+C2BE01 JNZ RET$FALSE ; IF IT WASN'T, INDICATE TO CALLER NO LU
|
|
01B2+23 INX H ; BUMP PTR TO 2ND SIGNATURE BYTE
|
|
01B3+7E MOV A,M ; PICK UP SECOND SIG BYTE WHICH S/B 'U'
|
|
01B4+FE55 CPI 'U'
|
|
01B6+C2BE01 JNZ RET$FALSE ; IF IT WASN'T, INDICATE TO CALLER NO LU
|
|
01B9+3E01 MVI A,TRUE ; OTHERWISE INDICATE PRESENCE OF LU SUPPORT
|
|
01BB+C3C001 JMP ??0006 ; FINISH UP MACRO
|
|
01BE+3E00 MVI A,FALSE ; PREPARE NEGATIVE RESPONSE FOR CALLER
|
|
01C0 FE01 cpi TRUE
|
|
01C2 CAFD01 jz do$lu
|
|
memcpy PRIFCB,work$fcb,32
|
|
01C5+115C00 LXI D,PRIFCB ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
01C8+212207 LXI H,WORK$FCB ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
01CB+012000 LXI B,32 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
01CE+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
01D1 0E0F mvi c,FOPEN
|
|
01D3 115C00 lxi d,PRIFCB
|
|
01D6 CD0500 call BDOS
|
|
01D9 FEFF cpi 255
|
|
01DB C2E101 jnz single$true
|
|
01DE C38E04 jmp all$done
|
|
single$true:
|
|
printf 'Found'
|
|
01E1+F5 PUSH PSW
|
|
01E2+C5 PUSH B
|
|
01E3+D5 PUSH D
|
|
01E4+E5 PUSH H
|
|
01E5+0E09 MVI C,PRINTSTR
|
|
01E7+11F401 LXI D,??0008
|
|
01EA+CD0500 CALL BDOS
|
|
01ED+E1 POP H
|
|
01EE+D1 POP D
|
|
01EF+C1 POP B
|
|
01F0+F1 POP PSW
|
|
01F1+C3FA01 JMP ??0007
|
|
01F4+466F756E64??0008 DB 'Found'
|
|
01F9+24 DB '$'
|
|
01FA C38E04 jmp all$done
|
|
|
|
do$lu:
|
|
ffgetlu
|
|
01FD+0E19 MVI C,RETCURR
|
|
01FF+CD0500 CALL BDOS
|
|
0202+4F MOV C,A
|
|
0203+CD1BE6 CALL BISELDSK
|
|
0206+111200 LXI D,16+2
|
|
0209+19 DAD D
|
|
020A+7E MOV A,M
|
|
020B 322007 sta entry$lu
|
|
;
|
|
ffnumlu
|
|
020E+0E19 MVI C,RETCURR
|
|
0210+CD0500 CALL BDOS
|
|
0213+4F MOV C,A
|
|
0214+CD1BE6 CALL BISELDSK
|
|
0217+111400 LXI D,16+2+2 ; OFFSET TO END OF DPH
|
|
021A+19 DAD D ; CALC OFFSET OF 1ST SIGNATURE BYTE
|
|
021B+7E MOV A,M
|
|
021C 321E07 sta lu$cnt
|
|
;
|
|
021F 6F mov l,a
|
|
0220 2600 mvi h,0
|
|
0222 CD0000 call pr$d$word
|
|
printf ' Logical Units Detected'
|
|
0225+F5 PUSH PSW
|
|
0226+C5 PUSH B
|
|
0227+D5 PUSH D
|
|
0228+E5 PUSH H
|
|
0229+0E09 MVI C,PRINTSTR
|
|
022B+113802 LXI D,??0010
|
|
022E+CD0500 CALL BDOS
|
|
0231+E1 POP H
|
|
0232+D1 POP D
|
|
0233+C1 POP B
|
|
0234+F1 POP PSW
|
|
0235+C35002 JMP ??0009
|
|
0238+204C6F6769??0010 DB ' Logical Units Detected'
|
|
024F+24 DB '$'
|
|
print crlf
|
|
0250+F5 PUSH PSW
|
|
0251+C5 PUSH B
|
|
0252+D5 PUSH D
|
|
0253+E5 PUSH H
|
|
0254+0E09 MVI C,PRINTSTR
|
|
0256+111A07 LXI D,CRLF
|
|
0259+CD0500 CALL BDOS
|
|
025C+E1 POP H
|
|
025D+D1 POP D
|
|
025E+C1 POP B
|
|
025F+F1 POP PSW
|
|
|
|
0260 3E00 mvi a,0
|
|
0262 321F07 sta lu$num
|
|
loop:
|
|
printf 'Scanning Logical Unit '
|
|
0265+F5 PUSH PSW
|
|
0266+C5 PUSH B
|
|
0267+D5 PUSH D
|
|
0268+E5 PUSH H
|
|
0269+0E09 MVI C,PRINTSTR
|
|
026B+117802 LXI D,??0012
|
|
026E+CD0500 CALL BDOS
|
|
0271+E1 POP H
|
|
0272+D1 POP D
|
|
0273+C1 POP B
|
|
0274+F1 POP PSW
|
|
0275+C38F02 JMP ??0011
|
|
0278+5363616E6E??0012 DB 'Scanning Logical Unit '
|
|
028E+24 DB '$'
|
|
028F 3A1F07 lda lu$num
|
|
0292 6F mov l,a
|
|
0293 2600 mvi h,0
|
|
0295 CD0000 call pr$d$word
|
|
conout ' '
|
|
0298+F5 PUSH PSW
|
|
0299+C5 PUSH B
|
|
029A+D5 PUSH D
|
|
029B+E5 PUSH H
|
|
029C+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
029E+1E20 MVI E,' ' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
02A0+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
02A3+E1 POP H
|
|
02A4+D1 POP D
|
|
02A5+C1 POP B
|
|
02A6+F1 POP PSW
|
|
|
|
; set the Logical Unit
|
|
02A7 3A1F07 lda lu$num
|
|
ffsetlu
|
|
02AA+F5 PUSH PSW
|
|
02AB+C5 PUSH B
|
|
02AC+D5 PUSH D
|
|
02AD+E5 PUSH H
|
|
02AE+F5 PUSH PSW
|
|
02AF+0E19 MVI C,RETCURR
|
|
02B1+CD0500 CALL BDOS
|
|
02B4+4F MOV C,A
|
|
02B5+CD1BE6 CALL BISELDSK ; USES C PARAMETER (DRIVE)
|
|
02B8+111200 LXI D,16+2
|
|
02BB+19 DAD D
|
|
02BC+F1 POP PSW
|
|
02BD+77 MOV M,A ; PUT SLICE INTO CURRENT
|
|
02BE+0E0D MVI C,13
|
|
02C0+CD0500 CALL BDOS
|
|
02C3+E1 POP H
|
|
02C4+D1 POP D
|
|
02C5+C1 POP B
|
|
02C6+F1 POP PSW
|
|
|
|
; test for the target file
|
|
memcpy PRIFCB,work$fcb,32
|
|
02C7+115C00 LXI D,PRIFCB ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
02CA+212207 LXI H,WORK$FCB ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
02CD+012000 LXI B,32 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
02D0+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
02D3 0E0F mvi c,FOPEN
|
|
02D5 115C00 lxi d,PRIFCB
|
|
02D8 CD0500 call BDOS
|
|
02DB 322107 sta retcode
|
|
|
|
02DE 3A2107 lda retcode
|
|
02E1 FEFF cpi 255
|
|
02E3 CAFB03 jz not$yet
|
|
conout CR
|
|
02E6+F5 PUSH PSW
|
|
02E7+C5 PUSH B
|
|
02E8+D5 PUSH D
|
|
02E9+E5 PUSH H
|
|
02EA+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
02EC+1E0D MVI E,CR ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
02EE+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
02F1+E1 POP H
|
|
02F2+D1 POP D
|
|
02F3+C1 POP B
|
|
02F4+F1 POP PSW
|
|
prfilnam PRIFCB
|
|
02F5+113003 LXI D,??0013 ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
02F8+215D00 LXI H,PRIFCB+1 ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
02FB+010800 LXI B,8 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
02FE+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
0301+113903 LXI D,??0014 ; LOAD 1ST POSITIONAL PARAMETER INTO REG
|
|
0304+216500 LXI H,PRIFCB+9 ; LOAD 2ND POSITIONAL PARAMETER INTO REG
|
|
0307+010300 LXI B,3 ; LOAD 3RD POSITIONAL PARAMETER INTO REG
|
|
030A+CD0000 CALL X$MEMCPY ; CALL ACTUAL ROUTINE IN SEE MEMORY.ASM
|
|
030D+3A3903 LDA ??0014
|
|
0310+E67F ANI 07FH
|
|
0312+323903 STA ??0014
|
|
0315+3A3A03 LDA ??0014+1
|
|
0318+E67F ANI 07FH
|
|
031A+323A03 STA ??0014+1
|
|
031D+3A3B03 LDA ??0014+2
|
|
0320+E67F ANI 07FH
|
|
0322+323B03 STA ??0014+2
|
|
0325+0E09 MVI C,9
|
|
0327+113003 LXI D,??0013
|
|
032A+CD0500 CALL BDOS
|
|
032D+C33E03 JMP ??0015
|
|
0330+0000000000??0013 DB 0,0,0,0,0,0,0,0
|
|
0338+2E DB '.'
|
|
0339+0000002024??0014 DB 0,0,0,' $'
|
|
printf ' '
|
|
033E+F5 PUSH PSW
|
|
033F+C5 PUSH B
|
|
0340+D5 PUSH D
|
|
0341+E5 PUSH H
|
|
0342+0E09 MVI C,PRINTSTR
|
|
0344+115103 LXI D,??0017
|
|
0347+CD0500 CALL BDOS
|
|
034A+E1 POP H
|
|
034B+D1 POP D
|
|
034C+C1 POP B
|
|
034D+F1 POP PSW
|
|
034E+C35303 JMP ??0016
|
|
0351+20 ??0017 DB ' '
|
|
0352+24 DB '$'
|
|
printf 'Found on Logical Unit '
|
|
0353+F5 PUSH PSW
|
|
0354+C5 PUSH B
|
|
0355+D5 PUSH D
|
|
0356+E5 PUSH H
|
|
0357+0E09 MVI C,PRINTSTR
|
|
0359+116603 LXI D,??0019
|
|
035C+CD0500 CALL BDOS
|
|
035F+E1 POP H
|
|
0360+D1 POP D
|
|
0361+C1 POP B
|
|
0362+F1 POP PSW
|
|
0363+C37D03 JMP ??0018
|
|
0366+466F756E64??0019 DB 'Found on Logical Unit '
|
|
037C+24 DB '$'
|
|
037D 3A1F07 lda lu$num
|
|
0380 6F mov l,a
|
|
0381 2600 mvi h,0
|
|
0383 CD0000 call pr$d$word
|
|
conout ','
|
|
0386+F5 PUSH PSW
|
|
0387+C5 PUSH B
|
|
0388+D5 PUSH D
|
|
0389+E5 PUSH H
|
|
038A+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
038C+1E2C MVI E,',' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
038E+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
0391+E1 POP H
|
|
0392+D1 POP D
|
|
0393+C1 POP B
|
|
0394+F1 POP PSW
|
|
conout '('
|
|
0395+F5 PUSH PSW
|
|
0396+C5 PUSH B
|
|
0397+D5 PUSH D
|
|
0398+E5 PUSH H
|
|
0399+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
039B+1E28 MVI E,'(' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
039D+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
03A0+E1 POP H
|
|
03A1+D1 POP D
|
|
03A2+C1 POP B
|
|
03A3+F1 POP PSW
|
|
03A4 3A1D07 lda drv$num
|
|
03A7 4F mov c,a
|
|
03A8 CD1BE6 call BISELDSK
|
|
03AB 010000 lxi b,0
|
|
03AE CD1EE6 call BISETTRK
|
|
03B1 010B00 lxi b,11
|
|
03B4 CD21E6 call BISETSEC
|
|
03B7 016207 lxi b,buffer
|
|
03BA CD24E6 call BISETDMA
|
|
03BD CD27E6 call BIREAD
|
|
|
|
03C0 3E24 mvi a,'$'
|
|
03C2 32D907 sta buffer+128-8-1
|
|
print buffer+128-8-1-16
|
|
03C5+F5 PUSH PSW
|
|
03C6+C5 PUSH B
|
|
03C7+D5 PUSH D
|
|
03C8+E5 PUSH H
|
|
03C9+0E09 MVI C,PRINTSTR
|
|
03CB+11C907 LXI D,BUFFER+128-8-1-16
|
|
03CE+CD0500 CALL BDOS
|
|
03D1+E1 POP H
|
|
03D2+D1 POP D
|
|
03D3+C1 POP B
|
|
03D4+F1 POP PSW
|
|
conout ')'
|
|
03D5+F5 PUSH PSW
|
|
03D6+C5 PUSH B
|
|
03D7+D5 PUSH D
|
|
03D8+E5 PUSH H
|
|
03D9+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
03DB+1E29 MVI E,')' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
03DD+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
03E0+E1 POP H
|
|
03E1+D1 POP D
|
|
03E2+C1 POP B
|
|
03E3+F1 POP PSW
|
|
|
|
03E4 0E10 mvi c,FCLOSE
|
|
03E6 115C00 lxi d,PRIFCB
|
|
03E9 CD0500 call BDOS
|
|
conout LF
|
|
03EC+F5 PUSH PSW
|
|
03ED+C5 PUSH B
|
|
03EE+D5 PUSH D
|
|
03EF+E5 PUSH H
|
|
03F0+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
03F2+1E0A MVI E,LF ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
03F4+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
03F7+E1 POP H
|
|
03F8+D1 POP D
|
|
03F9+C1 POP B
|
|
03FA+F1 POP PSW
|
|
not$yet:
|
|
conout CR
|
|
03FB+F5 PUSH PSW
|
|
03FC+C5 PUSH B
|
|
03FD+D5 PUSH D
|
|
03FE+E5 PUSH H
|
|
03FF+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
0401+1E0D MVI E,CR ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
0403+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
0406+E1 POP H
|
|
0407+D1 POP D
|
|
0408+C1 POP B
|
|
0409+F1 POP PSW
|
|
|
|
; Check for key hit interrupt scan
|
|
040A 0E0B mvi c,11 ; get console status
|
|
040C CD0500 caLL BDOS
|
|
040F FE00 cpi 0
|
|
0411 CA1704 jz nyok ; jump if no key hit
|
|
0414 C34D04 jmp abort ; gracefully exit loop
|
|
nyok:
|
|
|
|
|
|
0417 3A1F07 lda lu$num
|
|
041A 3C inr a
|
|
041B 321F07 sta lu$num
|
|
;
|
|
041E 3A1E07 lda lu$cnt
|
|
0421 3D dcr a
|
|
0422 321E07 sta lu$cnt
|
|
0425 FE00 cpi 0
|
|
0427 C26502 jnz loop
|
|
|
|
printf ' '
|
|
042A+F5 PUSH PSW
|
|
042B+C5 PUSH B
|
|
042C+D5 PUSH D
|
|
042D+E5 PUSH H
|
|
042E+0E09 MVI C,PRINTSTR
|
|
0430+113D04 LXI D,??0021
|
|
0433+CD0500 CALL BDOS
|
|
0436+E1 POP H
|
|
0437+D1 POP D
|
|
0438+C1 POP B
|
|
0439+F1 POP PSW
|
|
043A+C34D04 JMP ??0020
|
|
043D+2020202020??0021 DB ' '
|
|
044C+24 DB '$'
|
|
|
|
abort: conout cr
|
|
044D+F5 PUSH PSW
|
|
044E+C5 PUSH B
|
|
044F+D5 PUSH D
|
|
0450+E5 PUSH H
|
|
0451+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
|
|
0453+1E0D MVI E,CR ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
|
|
0455+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
|
|
0458+E1 POP H
|
|
0459+D1 POP D
|
|
045A+C1 POP B
|
|
045B+F1 POP PSW
|
|
printf 'Scan Completed '
|
|
045C+F5 PUSH PSW
|
|
045D+C5 PUSH B
|
|
045E+D5 PUSH D
|
|
045F+E5 PUSH H
|
|
0460+0E09 MVI C,PRINTSTR
|
|
0462+116F04 LXI D,??0023
|
|
0465+CD0500 CALL BDOS
|
|
0468+E1 POP H
|
|
0469+D1 POP D
|
|
046A+C1 POP B
|
|
046B+F1 POP PSW
|
|
046C+C38E04 JMP ??0022
|
|
046F+5363616E20??0023 DB 'Scan Completed '
|
|
048D+24 DB '$'
|
|
|
|
all$done:
|
|
048E 3A2007 lda entry$lu
|
|
ffsetlu
|
|
0491+F5 PUSH PSW
|
|
0492+C5 PUSH B
|
|
0493+D5 PUSH D
|
|
0494+E5 PUSH H
|
|
0495+F5 PUSH PSW
|
|
0496+0E19 MVI C,RETCURR
|
|
0498+CD0500 CALL BDOS
|
|
049B+4F MOV C,A
|
|
049C+CD1BE6 CALL BISELDSK ; USES C PARAMETER (DRIVE)
|
|
049F+111200 LXI D,16+2
|
|
04A2+19 DAD D
|
|
04A3+F1 POP PSW
|
|
04A4+77 MOV M,A ; PUT SLICE INTO CURRENT
|
|
04A5+0E0D MVI C,13
|
|
04A7+CD0500 CALL BDOS
|
|
04AA+E1 POP H
|
|
04AB+D1 POP D
|
|
04AC+C1 POP B
|
|
04AD+F1 POP PSW
|
|
|
|
04AE 0E25 mvi c,RESET$DRIVE ; call to logout drive
|
|
04B0 11FF00 lxi d,0ffh
|
|
04B3 CD0500 call BDOS
|
|
|
|
do$end
|
|
04B6+2A2000 LHLD PRE$STK
|
|
04B9+F9 SPHL
|
|
04BA+0E0D MVI C,13
|
|
04BC+CD0500 CALL BDOS
|
|
04BF+C9 RET
|
|
04C0+ DS STACK$SIZE
|
|
|
|
|
|
06C0 4279207468wrnmsg db 'By the way, this program is newer than the BIOS$'
|
|
|
|
06F0 536F727279errmsg db 'Sorry, this program requires a newer BIOS$'
|
|
|
|
071A 0D0A crlf db CR,LF
|
|
071C 24 term db '$'
|
|
|
|
071D drv$num ds 1 ; drive code of current drive
|
|
071E lu$cnt ds 1 ; number of slices on drive
|
|
071F lu$num ds 1 ; slice index
|
|
0720 entry$lu ds 1
|
|
0721 retcode ds 1
|
|
|
|
0722 work$fcb ds 64
|
|
0762 buffer ds 80h
|
|
|
|
|
|
07E2 end start
|
|
|