home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ZSYS
/
SIMTEL20
/
SYSLIB
/
SLIB1.LBR
/
SDIR01.Z80
< prev
next >
Wrap
Text File
|
2000-06-30
|
2KB
|
61 lines
;
; SYSLIB Module Name: SDIR01
; Author: Richard Conn
; Part of SYSLIB3 SDIR Series
; SYSLIB Version Number: 3.6
; Module Version Number: 1.5
public dbuffer
MACLIB SDIRHDR.LIB
EXT DPARAMS
;*
;* THIS ROUTINE ACCEPTS A BASE ADDRESS FOR THE DYNAMIC BUFFERS
;* REQUIRED, DETERMINES HOW MUCH SPACE IS REQUIRED FOR THE BUFFERS,
;* AND SETS THE ORDER PTR TO PT TO THE FIRST AND DIRBUF TO PT TO
;* THE SECOND (ORDER SPACE = DIRMAX*2 AND DIRBUF = DIRMAX * ESIZE)
;* ON INPUT, HL PTS TO AVAILABLE BASE
;* ON OUTPUT, HL PTS TO DIRBUF
;* A=0 AND ZERO FLAG SET IF CCP OVERRUN
;*
DBUFFER:
PUSH DE ; SAVE DE
PUSH BC ; SAVE BC
LD (ORDER),HL ; PT TO ORDER TABLE
CALL DPARAMS ; GET PARAMETERS
LD HL,(DIRMAX) ; NUMBER OF ENTRIES IN DIR
EX DE,HL ; ... IN DE
LD HL,(ORDER) ; ADD TO ORDER BASE
ADD HL,DE ; *1
CALL MEMCHK ; CHECK FOR WITHIN RANGE
ADD HL,DE ; HL PTS TO DIRBUF
CALL MEMCHK ; CHECK FOR WITHIN RANGE
LD (DIRBUF),HL ; SET PTR AND HL PTS TO DIRECTORY BUFFER
POP BC ; RESTORE BC
POP DE ; RESTORE DE
XOR A ; OK
DEC A ; SET FLAGS (NZ)
RET
MEMCHK:
PUSH HL ; SAVE REGS
PUSH DE
EX DE,HL ; NEXT ADDRESS IN DE
LD HL,(BDOS+1) ; GET ADDRESS OF BDOS
LD A,D ; CHECK FOR PAGE OVERRUN
CP H
JP NC,MEMORUN ; OVERRUN IF D>=H
POP DE
POP HL
RET
MEMORUN:
POP DE ; RESTORE
POP HL
XOR A ; RETURN 0
POP BC ; CLEAR STACK
POP BC ; RESTORE BC
RET
END