1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
|
TITLE EBOOT - Eumel Bootstrap Schreibprogramm
;
;****************************************************************
;
; E B O O T
;
; Version 1.3 - 29.12.1986
;
; Copyright (C) 1985 by R. Ellerbrake
;
;****************************************************************
;
INCLUDE HD64180.LIB
;
.LIST
;
BDOS EQU 5
EUMEL EQU 6 ;Volume Directory Typ
BOTLNG EQU 3FH ; Nicht 40H
BOTPA1 EQU 10H
BOTPA2 EQU 10H
DEFFCB EQU 5CH
;
EXTERNAL INITS, HDIO, FDIO, SCSIIO
GLOBAL EBOOT
;
CSEG
;
;****************************************************************
;
; Meldungen
;
STARTUP:
DEFB 0DH, 0AH
DEFM '**** E U M E L Harddisk Bootstrap Installationsprogramm ****'
DEFB 0DH, 0AH
DEFM ' Version 1.3 - 29.12.1986 - (C) by R. Ellerbrake (RUC)$'
;
NOBOOT:
DEFB 0DH, 0AH, 7
DEFM 'Datei EUMEL.COM nicht gefunden, leer oder fehlerhaft!$'
;
ERRSTR:
DEFB 0DH, 0AH, 7
DEFM 'Harddisk E/A Fehler: '
ERRNR: DEFM '00$'
;
ENDMSG:
DEFB 0DH, 0AH, 7
DEFM 'Kein (weiteres) EUMEL Volume vorhanden!$'
;
QSTR:
DEFB 0DH, 0AH
DEFM 'EUMEL Bootstrap Lader auf Harddisk Volume '
QSTRN:
DEFM ' $'
;
LSTR:
DEFB ' installieren (J/N): $'
;
ILLSTR:
DEFB 0DH, 0AH, 7
DEFM 'Unzulaessige Eingabe !!!$'
;
RDYSTR:
DEFB 0DH, 0AH
DEFM 'EUMEL Bootstraplader erfolgreich installiert.$'
;
;****************************************************************
;
EBOOT::
LD SP,STACK
;
LD DE,STARTUP
LD C,9
CALL BDOS
;
LD A,(DEFFCB)
LD DE,EUMELFI
LD (DE),A ;ggf. Drive aus Kommandozeile verwenden
LD C,15 ;Open File
CALL BDOS
INC A ;Fehler ?
JR NZ,FIOK ;Nein ->
;
ILLFI:
LD DE,NOBOOT ;Bootstrap Lader Datei nicht gefunden
LD C,9
CALL BDOS
JP 0
;
FIOK:
LD A,(EUMELFI+16) ;1. BLock vorhanden ?
AND A
JR Z,ILLFI ;Nein -> Fehler
;
CALL INITS
CALL INITS
;
; Warten bis Harddisk hochgelaufen ist
;
WRTHRD:
LD DE,TESTRD
LD BC,0
CALL SCSIIO
CP 4 ;Drive not Ready ?
JR Z,WRTHRD ;Ja -> warten
;
LD HL,DATAR
LD BC,PARBLK
LD A,0 ;Superdirectory lesen
LD DE,0
CALL HDIO
AND A
JR Z,SDOK
;
HDIOER:
LD DE,ERRNR ; Fehlernummer in A
CALL HEX1
LD DE,ERRSTR
LD C,9
CALL BDOS
JP 0
HEX1:
PUSH AF
RRCA
RRCA
RRCA
RRCA
CALL HEX2
POP AF
HEX2:
AND 0FH
CP 0AH
JR C,HEX3
ADD 7
HEX3:
ADD 30H
LD (DE),A
INC DE
RET
;
; 64180 Bootvolume mit EUMEL Kennung suchen
;
SDOK:
LD HL,DATAR
LD E,(HL) ;Byte 0 = Anfangsoffset
LD D,0 ;DE = Volume Eintrag Laenge
ADD HL,DE
LD A,(DATAR+20H) ;Volume Anzahl
LD B,A
;
SRCLOP:
PUSH HL
POP IX
LD A,(IX+23H) ;Directory Typ
CP EUMEL ;EUMEL Diretory ?
JR Z,ISEDIR ;Ja ->
;
NXVOL:
ADD HL,DE
DJNZ SRCLOP
;
; Alle Volumes durchsucht
;
LD DE,ENDMSG
LD C,9
CALL BDOS
JP 0
;
; EUMEL Volume gefunden
;
ISEDIR:
PUSH HL
PUSH DE
PUSH BC
PUSH IX
LD B,0
LD C,(IX+10H) ;Laenge des Volumenamens
LD DE,11H
ADD HL,DE ;auf Volumename
LD DE,QSTRN
LDIR
LD A,'$'
LD (DE),A ;Stringende eintragen
;
LD DE,QSTR
LD C,9
CALL BDOS ;anfragen
LD DE,LSTR
LD C,9
CALL BDOS
;
LD C,1 ;1 Zeichen einlesen
CALL BDOS
AND 05FH
;
CP 'Y' ;Ja ->
JR Z,PUTBOT
;
CP 'J' ;Ja ->
JR Z,PUTBOT
;
CP 'N' ;Nein ->
JR Z,NOBOT
;
; Falsche Eingabe: nochmal anfragen
;
LD DE,ILLSTR
LD C,9
CALL BDOS
;
POP IX
POP BC
POP DE
POP HL
JR ISEDIR
;
NOBOT:
POP IX
POP BC
POP DE
POP HL
JR NXVOL
;
; Bootstrap installieren
;
PUTBOT:
XOR A
LD HL,BOTBUF
LD (HL),A
LD DE,BOTBUF+1
LD B,BOTLNG
LD C,0
LDIR ; Bereich loeschen
LD HL,BOTBUF ;EUMEL Bootstrap Datei einlesen
LD B,BOTLNG*2 ;max. Recordanzahl
LD DE,EUMELFI
;
RDLOP:
PUSH BC
PUSH DE
LD C,26
EX DE,HL
PUSH DE
CALL BDOS ;DMA-Adresse setzen
POP HL
LD DE,128 ;und hochzaehlen
ADD HL,DE
POP DE
PUSH HL
PUSH DE
LD C,20 ;Read sequential
CALL BDOS ;Record lesen
POP DE
POP HL
POP BC
CP 1
JR Z,READY
DJNZ RDLOP ;Nicht fertig ->
;
; Bootstrap Lader im Speicher
;
READY:
POP IX
POP BC
POP DE
POP HL
LD (HL),40H ;EUMEL Bootkennung eintragen
LD (IX+20H),BOTPA1 ;EUMEL Bootparameter eintragen
LD (IX+21H),BOTPA2
LD (IX+22H),BOTLNG
INC HL
PUSH HL ;Bootvolume
;
LD HL,DATAR
LD BC,PARBLK
LD A,1 ;Superdirectory schreiben
LD DE,0
CALL HDIO
;
; Bootstrap Lader schreiben
;
LD HL,BOTBUF ;Datenbereich
LD DE,0 ;Blocknummer
;
WRLOP:
POP BC
PUSH BC
PUSH DE
PUSH HL
LD A,1
CALL HDIO
;
JP NZ,HDIOER
;
POP HL
LD DE,512 ;Adresse hochzaehlen
ADD HL,DE
POP DE
INC DE
LD A,E
CP BOTLNG/2 ;fertig ?
JR NZ,WRLOP ;Nein ->
;
POP BC
LD DE,RDYSTR
LD C,9
CALL BDOS
JP 0
;
;****************************************************************
;
EUMELFI:
DEFB 0 ;auf Default Drive
DEFM 'EUMEL COM'
DEFB 0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0,0
;
PARBLK:
DEFB 0,0,2,0
;
TESTRD:
DEFB 0,0,0,0,0,0 ;Test Ready
;
DEFS 200
STACK: DEFW 0
;
DATAR: DEFS 512
;
BOTBUF:
;
END
|