You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

175 lines
9.0 KiB

.pl 51
.nf
.bp 1
.ft D-%
Appendix D
The Microcomputer Development System-800 Cold Start Loader for CP/M 2
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 0078 = dstat equ base ;disk status port
39 0079 = ilow equ base+1 ;low iopb address
40 007a = ihigh equ base+2 ;high iopb address
41 00ff = bsw equ 0ffh ;boot switch
42 0003 = recal equ 3h ;recalibrate selected drive
43 0004 = readf equ 4h ;disk read function
44 0100 = stack equ 100h ;use end of boot for stack
45 ;
46 rstart:
47 3000 310001 lxi sp,stack; ;in case of call to mon80
48 ; clear disk status
49 3003 db79 in rtype
50 3005 db7b in rbyte
51 ; check if boot switch if off
52 coldstart:
53 3007 dbff in bsw
54 3009 e602 ani 02h ;switch on?
55 300b c20730 jnz coldstart
56 ; clear the controller
57 300e d37f out reset ;logic cleared
58 ;
59 ;
60 3010 0602 mvi b,ntrks ;number of tracks to read
61 3012 214230 lxi h,iopbo
62 ;
63 start:
64 ;
65 ; read first/next track into cpmb
66 3015 7d mov a,l
67 3016 d379 out ilow
68 3018 7c mov a,h
69 3019 d37a out ihigh
70 301b db78 waito: in dstat
71 301d e604 ani 4
72 301f ca1b30 jz waito
73 ;
74 ; check disk status
75 3022 db79 in rtype
76 3024 e603 ani 11b
77 3026 fe02 cpi 2
78 ;
79 if testing
80 cnc rmon80 ;go to monitor if 11 or 10
81 endif
82 if not testing
83 3028 d20030 jnc rstart ;retry the load
84 endif
85 ;
86 302b db7b in rbyte ;i/o complete, check status
87 ; if not ready, then go to mon80
88 302d 17 ral
89 302e dc0fff cc rmon80 ;not ready bit set
90 3031 1f rar ;restore
91 3032 e61e ani 11110b ;overrun/addr err/seek/crc/xxxx
92 ;
93 if testing
94 cnz rmon80 ;go to monitor
95 endif
96 if not testing
97 3034 c20030 jnz rstart ;retry the load
98 endif
99 ;
100 ;
101 3037 110700 lxi d,iopbl ;length of iopb
102 303a 19 dad d ;addressing next iopb
103 303b 05 dcr b ;count down tracks
104 303c c21530 jnz start
105 ;
106 ;
107 ; jmp to boot to print initial message, and set up jmps
108 303f c30016 jmp boot
109 ;
110 ; parameter blocks
111 3042 80 iopbo: db 80h ;iocw, no update
112 3043 04 db readf ;read function
113 3044 19 db bdoso ;#sectors to read on track 0
114 3045 00 db 0 ;track 0
115 3046 02 db 2 ;start with sector 2 on track 0
116 3047 0000 dw cpmb ;start at base of bdos
117 0007 = iopbl equ $-iopbo
118 ;
119 3049 80 iopb1: db 80h
120 304a 04 db readf
121 304b 18 db bdos1 ;sectors to read on track 1
122 304c 01 db 1 ;track 1
123 304d 01 db 1 ;sector 1
124 304e 800c dw cmpb+bdos0*128;base of second read
125 ;
126 3050 end
base 0078 33# 34 35 36 38 39 40
bdos 0806 18#
bdoso 0019 28# 29 113 124
bdos1 0018 29# 121
bdose 1880 19# 25
bdosl 1880 25# 27
bdoss 0031 27# 29
bias 0000 12# 15# 17 18 19 20
boot 1600 20# 21 108
bsw 00ff 41# 53
coldstart 3007 52# 55
cpmb 0000 17# 25 116 124
dstat 0078 38# 70
false 0000 7# 8 9
ihigh 007a 40# 69
ilow 0079 39# 67
iopbo 3042 61 111# 117
iopb1 3049 119#
iopbl 0007 101 117#
mon80 f800 31#
ntrks 0002 26# 60
rboot 1603 21#
rbyte 007b 35# 50 86
readf 0004 43# 112 120
recal 0003 42#
reset 007f 36# 57
rmon80 ff0f 32# 80 89 94
rstart 3000 46# 83 97
rtype 0079 34# 49 75
stack 0100 44# 47
start 3015 63# 104
testing 0000 9# 11 14 79 82 93 96
true ffff 8#
waito 301b 70# 72
.nx appe