System information
0090 217001 LXI H,UNASEC
0093 BE CMP M ;SEKSEC = UNASEC?
0094 C2AE00 JNZ ALLOC ;SKIP IF NOT
;
; MATCH, MOVE TO NEXT SECTOR FOR FUTURE REF
0097 34 INR M ;UNASEC = UNASEC+1
0098 7E MOV A,M ;END OF TRACK?
0099 FE50 CPI CPMSPT ;COUNT CP/M SECTORS
009B DAA700 JC NOOVF ;SKIP IF NO OVERFLOW
;
; OVERFLOW TO NEXT TRACK
009E 3600 MVI M,0 ;UNASEC = 0
00A0 2A6E01 LHLD UNATRK
00A3 23 INX H
00A4 226E01 SHLD UNATRK ;UNATRK = UNATRK+1
;
NOOVF:
;MATCH FOUND, MARK AS UNNECESSARY READ
00A7 AF XRA A ;0 TO ACCUMULATOR
00A8 327201 STA RSFLAG ;RSFLAG = 0
00AB C3B600 JMP RWOPER ;TO PERFORM THE WRITE
;
ALLOC:
;NOT AN UNALLOCATED RECORD, REQUIRES PRE-READ
00AE AF XRA A ;0 TO ACCUM
00AF 326C01 STA UNACNT ;UNACNT = 0
00B2 3C INR A ;1 TO ACCUM
00B3 327201 STA RSFLAG ;RSFLAG = 1
;
;*****************************************************
;* *
;* COMMON CODE FOR READ AND WRITE FOLLOWS *
;* *
;*****************************************************
RWOPER:
;ENTER HERE TO PERFORM THE READ/WRITE
00B6 AF XRA A ;ZERO TO ACCUM
00B7 327101 STA ERFLAG ;NO ERRORS (YET)
00BA 3A6401 LDA SEKSEC ;COMPUTE HOST SECTOR
REPT SECSHF
ORA A ;CARRY = 0
RAR ;SHIFT RIGHT
ENDM
00BD+B7 ORA A ;CARRY = 0
00BE+1F RAR ;SHIFT RIGHT
Appendix G : Blocking and Deblocking Algorithms CP/M Operating System Manual
G-5