summaryrefslogtreecommitdiff
path: root/system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC
diff options
context:
space:
mode:
Diffstat (limited to 'system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC')
-rw-r--r--system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC339
1 files changed, 339 insertions, 0 deletions
diff --git a/system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC b/system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC
new file mode 100644
index 0000000..281713a
--- /dev/null
+++ b/system/shard-z80-ruc-64180/1.5/src/EBOOT.MAC
@@ -0,0 +1,339 @@
+ 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
+ \ No newline at end of file