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.
1088 lines
17 KiB
1088 lines
17 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
|
|
|
|
|
|
BC EQU 0
|
|
DE EQU 2
|
|
HL EQU 4
|
|
IX EQU 4
|
|
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
|
|
|
|
|
|
jmp around$bandata
|
|
argv dw prog,dat,prod,orig,ser,myname,0
|
|
prog db 'FINDFILE.COM$'
|
|
date
|
|
serial
|
|
product
|
|
originator
|
|
oriname
|
|
uuid db '107CDD27-2E4D-4340-A324-BEB13054E67B$'
|
|
around$bandata:
|
|
|
|
|
|
crtinit
|
|
crtclr
|
|
crtlc 1,1
|
|
sbanner argv
|
|
; version wrnmsg,errmsg
|
|
|
|
lda 80h
|
|
cpi 0
|
|
jnz no$usage
|
|
print crlf
|
|
printf 'usage - findfile <filename>'
|
|
jmp all$done
|
|
no$usage:
|
|
|
|
|
|
memcpy work$fcb,PRIFCB,32
|
|
|
|
printf 'Finding: '
|
|
memcpy PRIFCB,work$fcb,16
|
|
|
|
mvi a,'$'
|
|
sta PRIFCB+9
|
|
print PRIFCB+1
|
|
conout '.'
|
|
memcpy PRIFCB,work$fcb,16
|
|
mvi a,'$'
|
|
sta PRIFCB+12
|
|
print PRIFCB+9
|
|
print crlf
|
|
|
|
ffhaslu
|
|
cpi TRUE
|
|
jz do$lu
|
|
memcpy PRIFCB,work$fcb,32
|
|
mvi c,FOPEN
|
|
lxi d,PRIFCB
|
|
call BDOS
|
|
cpi 255
|
|
jnz single$true
|
|
jmp all$done
|
|
single$true:
|
|
printf 'Found'
|
|
jmp all$done
|
|
|
|
do$lu:
|
|
ffgetlu
|
|
sta entry$lu
|
|
;
|
|
ffnumlu
|
|
sta lu$cnt
|
|
;
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
printf ' Logical Units Detected'
|
|
print crlf
|
|
|
|
mvi a,0
|
|
sta lu$num
|
|
loop:
|
|
printf 'Scanning Logical Unit '
|
|
lda lu$num
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
conout ' '
|
|
|
|
; set the Logical Unit
|
|
lda lu$num
|
|
ffsetlu
|
|
|
|
; test for the target file
|
|
memcpy PRIFCB,work$fcb,32
|
|
mvi c,FOPEN
|
|
lxi d,PRIFCB
|
|
call BDOS
|
|
sta retcode
|
|
|
|
lda retcode
|
|
cpi 255
|
|
jz not$yet
|
|
conout CR
|
|
prfilnam PRIFCB
|
|
printf ' '
|
|
printf 'Found on Logical Unit '
|
|
lda lu$num
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
conout ','
|
|
conout '('
|
|
lda drv$num
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi b,0
|
|
call BISETTRK
|
|
lxi b,11
|
|
call BISETSEC
|
|
lxi b,buffer
|
|
call BISETDMA
|
|
call BIREAD
|
|
|
|
mvi a,'$'
|
|
sta buffer+128-8-1
|
|
print buffer+128-8-1-16
|
|
conout ')'
|
|
|
|
mvi c,FCLOSE
|
|
lxi d,PRIFCB
|
|
call BDOS
|
|
conout LF
|
|
not$yet:
|
|
conout CR
|
|
|
|
; Check for key hit interrupt scan
|
|
mvi c,11 ; get console status
|
|
caLL BDOS
|
|
cpi 0
|
|
jz nyok ; jump if no key hit
|
|
jmp abort ; gracefully exit loop
|
|
nyok:
|
|
|
|
|
|
lda lu$num
|
|
inr a
|
|
sta lu$num
|
|
;
|
|
lda lu$cnt
|
|
dcr a
|
|
sta lu$cnt
|
|
cpi 0
|
|
jnz loop
|
|
|
|
printf ' '
|
|
|
|
abort: conout cr
|
|
printf 'Scan Completed '
|
|
|
|
all$done:
|
|
lda entry$lu
|
|
ffsetlu
|
|
|
|
mvi c,RESET$DRIVE ; call to logout drive
|
|
lxi d,0ffh
|
|
call BDOS
|
|
|
|
do$end
|
|
|
|
|
|
wrnmsg db 'By the way, this program is newer than the BIOS$'
|
|
|
|
errmsg db 'Sorry, this program requires a newer BIOS$'
|
|
|
|
crlf db CR,LF
|
|
term db '$'
|
|
|
|
drv$num ds 1 ; drive code of current drive
|
|
lu$cnt ds 1 ; number of slices on drive
|
|
lu$num ds 1 ; slice index
|
|
entry$lu ds 1
|
|
retcode ds 1
|
|
|
|
work$fcb ds 64
|
|
buffer ds 80h
|
|
|
|
|
|
end start
|
|
|