mirror of https://github.com/wwarthen/RomWBW.git
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
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
|
|
|