CP/M Operating System Manual
Appendix D
The MDS-800 Cold Start Loader for CP/M 2
NOTE
This appendix consists of a cross-reference listing
generated by the XREF utility from the results of
assembly with MAC. The original source file used to
generate this listing is available
here.
1 TITLE 'mds cold start loader at 3000h'
2 ;
3 ; MDS-800 COLD START LOADER FOR CP/M 2.0
4 ;
5 ; VERSION 2.0 AUGUST, 1979
6 ;
7 0000 = FALSE EQU 0
8 FFFF = TRUE EQU NOT FALSE
9 0000 = TESTING EQU FALSE ;IF TRUE, THEN GO TO MON80 ON ERRORS
10 ;
11 IF TESTING
12 BIAS EQU 03400H
13 ENDIF
14 IF NOT TESTING
15 0000 = BIAS EQU 0000H
16 ENDIF
17 0000 = CPMB EQU BIAS ;BASE OF DOS LOAD
18 0806 = BDOS EQU 806H+BIAS ;ENTRY TO DOS FOR CALLS
19 1880 = BDOSE EQU 1880H+BIAS ;END OF DOS LOAD
20 1600 = BOOT EQU 1600H+BIAS ;COLD START ENTRY POINT
21 1603 = RBOOT EQU BOOT+3 ;WARM START ENTRY POINT
22 ;
23 3000 ORG 03000H ;LOADED DOWN FROM HARDWARE BOOT AT 3000H
24 ;
25 1880 = BDOSL EQU BDOSE-CPMB
26 0002 = NTRKS EQU 2 ;NUMBER OF TRACKS TO READ
27 0031 = BDOSS EQU BDOSL/128 ;NUMBER OF SECTORS IN DOS
28 0019 = BDOSO EQU 25 ;NUMBER OF BDOS SECTORS ON TRACK 0
29 0018 = BDOS1 EQU BDOSS-BDOSO ;NUMBER OF SECTORS ON TRACK 1
30 ;
31 F800 = MON80 EQU 0F800H ;INTEL MONITOR BASE
32 FF0F = RMON80 EQU 0FF0FH ;RESTART LOCATION FOR MON80
33 0078 = BASE EQU 078H ;'BASE' USED BY CONTROLLER
34 0079 = RTYPE EQU BASE+1 ;RESULT TYPE
35 007B = RBYTE EQU BASE+3 ;RESULT BYTE
36 007F = RESET EQU BASE+7 ;RESET CONTROLLER
37 ;
38 ;
39 0078 = DSTAT EQU BASE ;DISK STATUS PORT
40 0079 = ILOW EQU BASE+1 ;LOW IOPB ADDRESS
41 007A = IHIGH EQU BASE+2 ;HIGH IOPB ADDRESS
42 00FF = BSW EQU 0FFH ;BOOT SWITCH
43 0003 = RECAL EQU 3H ;RECALIBRATE SELECTED DRIVE
44 0004 = READF EQU 4H ;DISK READ FUNCTION
45 0100 = STACK EQU 100H ;USE END OF BOOT FOR STACK
46 ;
47 RSTART:
48 3000 310001 LXI SP,STACK; ;IN CASE OF CALL TO MON80
49 ; CLEAR DISK STATUS
50 3003 DB79 IN RTYPE
51 3005 DB7B IN RBYTE
52 ; CHECK IF BOOT SWITCH IS OFF
53 COLDSTART:
54 3007 DBFF IN BSW
55 3009 E602 ANI 02H ;SWITCH ON?
56 300B C20730 JNZ COLDSTART
57 ; CLEAR THE CONTROLLER
58 300E D37F OUT RESET ;LOGIC CLEARED
59 ;
60 ;
61 3010 0602 MVI B,NTRKS ;NUMBER OF TRACKS TO READ
62 3012 214230 LXI H,IOPBO
63 ;
64 START:
65 ;
66 ; READ FIRST/NEXT TRACK INTO CPMB
67 3015 7D MOV A,L
68 3016 D379 OUT ILOW
69 3018 7C MOV A,H
70 3019 D37A OUT IHIGH
71 301B DB78 WAITO: IN DSTAT
72 301D E604 ANI 4
73 301F CA1B30 JZ WAITO
74 ;
75 ; CHECK DISK STATUS
76 3022 DB79 IN RTYPE
77 3024 E603 ANI 11B
78 3026 FE02 CPI 2
79 ;
80 IF TESTING
81 CNC RMON80 ;GO TO MONITOR IF 11 OR 10
82 ENDIF
83 IF NOT TESTING
84 3028 D20030 JNC RSTART ;RETRY THE LOAD
85 ENDIF
86 ;
87 302B DB7B IN RBYTE ;I/O COMPLETE, CHECK STATUS
88 ; IF NOT READY, THEN GO TO MON80
89 302D 17 RAL
90 302E DC0FFF CC RMON80 ;NOT READY BIT SET
91 3031 1F RAR ;RESTORE
92 3032 E61E ANI 11110B ;OVERRUN/ADDR ERR/SEEK/CRC/XXXX
93 ;
94 IF TESTING
95 CNZ RMON80 ;GO TO MONITOR
96 ENDIF
97 IF NOT TESTING
98 3034 C20030 JNZ RSTART ;RETRY THE LOAD
99 ENDIF
100 ;
101 ;
102 3037 110700 LXI D,IOPBL ;LENGTH OF IOPB
103 303A 19 DAD D ;ADDRESSING NEXT IOPB
104 303B 05 DCR B ;COUNT DOWN TRACKS
105 303C C21530 JNZ START
106 ;
107 ;
108 ; JMP TO BOOT TO PRINT INITIAL MESSAGE, AND SET UP JMPS
109 303F C30016 JMP BOOT
110 ;
111 ; PARAMETER BLOCKS
112 3042 80 IOPBO: DB 80H ;IOCW, NO UPDATE
113 3043 04 DB READF ;READ FUNCTION
114 3044 19 DB BDOSO ;*SECTORS TO READ ON TRACK 0
115 3045 00 DB 0 ;TRACK 0
116 3046 02 DB 2 ;START WITH SECTOR 2 ON TRACK 0
117 3047 0000 DW CPMB ;START AT BASE OF BDOS
118 0007 = IOPBL EQU $-IOPBO
119 ;
120 3049 80 IOPB1: DB 80H
121 304A 04 DB READF
122 304B 18 DB BDOS1 ;SECTORS TO READ ON TRACK 1
123 304C 01 DB 1 ;TRACK 1
124 304D 01 DB 1 ;SECTOR 1
125 304E 800C DW CPMB+BDOSO*128 ;BASE OF SECOND READ
126 ;
127 3050 END
BASE 0078 33# 34 35 36 39 40 41
BDOS 0806 18#
BDOS1 0018 29# 122
BDOSE 1880 19# 25
BDOSL 1880 25# 27
BDOSO 0019 28# 29 114 125
BDOSS 0031 27# 29
BIAS 0000 12# 15# 17 18 19 20
BOOT 1600 20# 21 109
BSW 00FF 42# 54
COLDSTART 3007 53# 56
CPMB 0000 17# 25 117 125
DSTAT 0078 39# 71
FALSE 0000 7# 8 9
IHIGH 007A 41# 70
ILOW 0079 40# 68
IOPB1 3049 120#
IOPBL 0007 102 118#
IOPBO 3042 62 112# 118
MON80 F800 31#
NTRKS 0002 26# 61
RBOOT 1603 21#
RBYTE 007B 35# 51 87
READF 0004 44# 113 121
RECAL 0003 43#
RESET 007F 36# 58
RMON80 FF0F 32# 81 90 95
RSTART 3000 47# 84 98
RTYPE 0079 34# 50 76
STACK 0100 45# 48
START 3015 64# 105
TESTING 0000 9# 11 14 80 83 94 97
TRUE FFFF 8#
WAITO 301B 71# 73
Back to title page
     Next