summaryrefslogtreecommitdiff
path: root/system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC
blob: bb365b41847f690141e651367511647289f410f0 (plain)
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