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
/
SIMTEL
/
CPMUG
/
CPMUG006.ARK
/
PURGE.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
2KB
|
108 lines
MODIFIED EQU 0 ;CHANGE TO 1 WHEN CBIOS EQUATES SET OK
;PURGE - ROUTINE TO CLEAR UP A DIRECTORY
ORG 100H
;
;YOU MUST MODIFY THE SYSTEM EQUATES FOR DISK PHYSICAL I/O
;BEFORE RUNNING THIS SYSTEM. ALL YOU HAVE TO DO IS CHANGE
;'SYSSIZ' FOR YOUR SYSTEM, PROVIDING THE JMP TABLE FOR
;YOUR CBIOS IS 512 BYTES FROM THE END OF THE SYSTEM.
;
IF NOT MODIFIED
LXI D,ERRMSG
MVI C,PRINT
JMP BDOS
ERRMSG DB '++THIS PROGRAM HAS NOT BEEN MODIFIED',13,10
DB 'FOR YOUR CBIOS. EDIT PURGE.ASM AND'13,10
DB 'MAKE APPROPRIATE CHANGES TO THE EQUATES'
DB 10,13,'$'
ENDIF
CALL START
IDMSG DB 'PURGE 09/10/77',0DH,0AH,'$'
START POP D ;GET ID MESSGE
MVI C,PRINT
CALL BDOS ;PRINT ID
LDA FCB ;GET DISK (0, 1, 2)
ORA A ;USE LOGGED IN DISK?
JZ NOSET ;..YES
DCR A ;MAKE A=0, B=1
MOV C,A ;SEND IT IN C,
CALL SELDSK ;TO SELECT THE DISK
NOSET MVI C,2 ;GET TRACK 2
CALL SETTRK ;GO DO IT
MVI C,1 ;GET SECTOR
PURGE PUSH B ;SAVE SECTOR
CALL SETSEC ;SEEK TO IT
CALL RDSEC ;READ THE SECTOR
LXI H,80H ;POINT TO BUFFER
LXI D,32 ;DIRECTORY ENTRY LENGTH
CALL CHECK ;CHECK FIRST ENTRY
DAD D
CALL CHECK ;CHECK SECOND ENTRY
DAD D
CALL CHECK ;CHECK THIRD ENTRY
DAD D
CALL CHECK ;CHECK LAST ENTRY
CALL WRSEC ;WRITE IT BACK
;GET NEXT SECTOR
POP B ;GET SECTOR (IN C)
INR C
MOV A,C ;GET VALUE
CPI 17
JC PURGE ;LOOP UNTIL DONE
;PRINT NUMBER OF ENTRIES FIXED
LXI D,MSG
MVI C,PRINT
CALL BDOS
RET
;CHECK IF A DIRECTORY ENTRY (POINTED TO BY H,L)
; IS CORRECT (0 IF IN USE, E5 IF EMPTY)
; IF NOT, FORCE IT TO BE AN E5 (EMPTY)
CHECK MOV A,M ;GET CHAR
CPI 0E5H
RZ ;RET IF E5
ORA A
RZ ;RET IF IN USE
MVI M,0E5H ;CLEAR IT OUT
;BUMP COUNT OF CHANGED RECORDS
PUSH H
LXI H,MSG+1 ;POINT TO SECOND DIGIT
BUMP MOV A,M ;GET DIGIT
INR A ;INCREMENT IT
MOV M,A
CPI '9'+1 ;CARRY?
JC BUMPDN ;..NO, DONE
MVI M,'0'
DCX H
JMP BUMP
BUMPDN POP H
RET
;
MSG DB '00 ENTRIES PURGED$'
;
;BDOS/CBIOS EQUATES (VERSION 4)
;
RDCON EQU 1
WRCON EQU 2
PRINT EQU 9
OPEN EQU 15 ;0FFH=NOT FOUND
CLOSE EQU 16 ; " "
SRCHF EQU 17 ; " "
SRCHN EQU 18 ; " "
DELT EQU 19 ;NO RET CODE
READ EQU 20 ;0=OK, 1=EOF
WRITE EQU 21 ;0=OK, 1=ERR, 2=?, 0FFH=NO DIR SPC
MAKE EQU 22 ;0FFH=BAD
REN EQU 23 ;0FFH=BAD
STDMA EQU 26
BDOS EQU 5
FCB EQU 5CH
SYSSIZ EQU 24 ;SYSTEM SIZE
CBIOS EQU SYSSIZ*1024-512
SELDSK EQU CBIOS+1BH
SETTRK EQU SELDSK+3
SETSEC EQU SETTRK+3
SETDMA EQU SETSEC+3
RDSEC EQU SETDMA+3
WRSEC EQU RDSEC+3