System information
; COMBINED GETSYS AND PUTSYS PROGRAMS FROM
; SEC 6.4
;
; START THE PROGRAMS AT THE BASE OF THE TPA
0100 ORG 0100H
0014 = MSIZE EQU 20 ;SIZE OF CP/M IN KBYTES
;"BIAS" IS THE AMOUNT TO ADD TO ADDRESSES FOR > 20K
; (REFERRED TO AS"B" THROUGHOUT THE TEXT)
0000 = BIAS EQU (MSIZE-20)*1024
3400 = CCP EQU 3400H+BIAS
3C00 = BDOS EQU CCP+0800H
4A00 = BIOS EQU CCP+1600H
; GETSYS PROGRAMS TRACKS 0 AND 1 TO MEMORY AT 3880H + BIAS
; REGISTER USAGE
; A (SCRATCH REGISTER)
; B TRACK COUNT (0...76)
; C SECTOR COUNT (1...26)
; D,E (SCRATCH REGISTER PAIR)
; H,L LOAD ADDRESS
; SP SET TO TRACK ADDRESS
GSTART: ;START OF GETSYS
0100 318033 LXI SP,CCP-0080H ;CONVENIENT PLACE
0103 218033 LXI H,CCP-0080H;SET INITIAL LOAD
0106 0600 MVI B,0 ;START WITH TRACK
RD$TRK: ;READ NEXT TRACK
0108 0E01 MVI C,1 ;EACH TRACK START
RD$SEC:
010A CD0003 CALL READ$SEC ;GET THE NEXT SECTOR
010D 118000 LXI D,128 ;OFFSET BY ONE SECTOR
0110 19 DAD D ; (HL=HL+128)
0111 0C INR C ;NEXT SECTOR
0112 79 MOV A,C ;FETCH SECTOR NUMBER
0113 FE1B CPI 27 ;AND SEE IF LAST
0115 DA0A01 JC RDSEC ;<, DO ONE MORE
;ARRIVE HERE AT END OF TRACK, MOVE TO NEXT TRACK
0118 04 INR B ;TRACK = TRACK+1
0119 78 MOV A,B ;CHECK FOR LAST
011A FE02 CPI 2 ;TRACK = 2 ?
011C DA0801 JC RD$TRK ;<, DO ANOTHER
Appendix B : A Sekletal CBIOS CP/M Operating System Manual
C-1