.Z80 PAGE 64 ;******************************************************** ;* * ;* Mikroelektronik Muehlhausen * ;* * ;* MDSYSCC Vers. 1.0 * ;* * ;* Bearbeiter: K.-D. Kirves Stand: 28/03/90 * ;* * ;******************************************************** ; ; Dieses Programm dient zur Generierung des Betriebssystems ; MicroDOS fuer den KCc ; PUBLIC ENDE,BUFFER NMBDRV EQU 0EF53H ;ANZAHL LW ORIG. NMBDRVA EQU 3FC0H ; " AKTUELL DPB1 EQU 0F014H ;ORIG DPB1A EQU 4081H ;AKT DIFF EQU 0AF93H ;ORIG-AKT BUFFER EQU 0A00H ;AKT SYSTEM BDOSIN EQU 0CA60H ;EINTRITT IN BDOS-INITIALISIERUNG BDOSINA EQU 1ACDH ;BDOS-INIT AKT ; ; BDOS - Aufrufe ; STRIN EQU 10 OPENF EQU 15 SRCHFT EQU 17 SRCHNX EQU 18 READF EQU 20 ACTDRV EQU 25 SELDMA EQU 26 ; ; BIOS - Anspruenge ; SETDSK EQU 24 SETTRK EQU 27 SETSEC EQU 30 SETDMA EQU 33 WRSEC EQU 39 ; ASEG ORG 100H ; BDOS EQU 5 ; POS MACRO LINE,COLUMN DEFB 1BH DEFB LINE+84H DEFB COLUMN+87H ENDM ; LD SP,STACK LD C,25 CALL BDOS LD (AKTLW),A ;MERKEN AKT.LW JP START ; CI: PUSH HL PUSH DE PUSH BC LD C,1 CALL BDOS POP BC POP DE POP HL CP 03H JP Z,SYSTEM RET ; CO: PUSH HL PUSH DE PUSH BC PUSH AF LD C,2 CO0: LD E,A CO1: CALL BDOS POP AF CO2: POP BC POP DE POP HL RET ; LO: PUSH HL PUSH DE PUSH BC PUSH AF LD C,5 JR CO0 ; PSTR: PUSH HL PUSH DE PUSH BC PUSH AF LD C,9 JR CO1 ; PRTFNM: LD B,8 CALL PSTR1 LD A,2EH CALL CO LD B,3 PSTR1: LD A,(HL) INC HL CALL CO DJNZ PSTR1 RET ; START: LD A,0CH CALL CO LD DE,ULC CALL HSTARS LD DE,URC CALL VSTARS LD DE,ULC CALL VSTARS LD DE,LLC CALL HSTARS LD DE,NAMMSG CALL PSTR JP MENU ; VERMSG: POS 13,15 DEFM 'Falsche Betriebssystemversion ! ' DEFB '$' ; NAMMSG: POS 2,8 DEFM ' Mikroelektronik Muehlhausen ' POS 4,10 DEFM 'MicroDOS - Installation fuer KCc (28/03/90)' DEFB '$' ; HSTARS: CALL PSTR LD B,62 LD A,'*' HST1: CALL CO DJNZ HST1 RET ; VSTARS: CALL PSTR LD B,15 VST1: LD DE,VSTR CALL PSTR DJNZ VST1 RET VSTR: DEFB '*' DEFB 0AH DEFB 08H DEFB '$' ; ULC: POS 0,1 DEFB '$' URC: POS 0,62 DEFB '$' LLC: POS 15,1 DEFB '$' ; CLRSCR: LD B,58 LD DE,POSMSG CALL PSTR CLR1: LD A,20H CALL CO DJNZ CLR1 LD HL,LINE INC (HL) LD A,93H CP (HL) JR NZ,CLRSCR LD (HL),89H RET ; POSMSG: DEFB 1BH LINE: DEFB 89H DEFB 8AH DEFB '$' ; MENU: CALL CLRSCR LD DE,MENMSG CALL PSTR MENU1: CALL CI SUB 30H JR C,MENU1 CP 4 JR NC,MENU1 ADD A,A LD HL,MENTAB ADD A,L LD L,A ADD A,H SBC A,L LD H,A LD A,(HL) INC HL LD H,(HL) LD L,A LD DE,MENU PUSH DE JP (HL) ; MENTAB: DEFW SYSTEM DEFW INSDSK DEFW SYSGEN DEFW AKTIV ; MENMSG: POS 6,5 DEFB 'Funktionsauswahl: ' POS 8,10 DEFB '0 - System' POS 9,10 DEFB '1 - Einstellen Diskettenformate' POS 10,10 DEFB '2 - Beschreiben der Systemdiskette' pos 11,10 DEFB '3 - Aktivieren neues System' POS 6,23 DEFB '$' ; INSDSK: CALL CLRSCR LD DE,INSMSG CALL PSTR LD A,(NMBDRVA) DEC A LD B,A LD C,41H LD IX,DPB1A M0: INC C PUSH BC LD A,C LD (LOGMSG),A LD A,(IX+17) ; EOT CALL BINASC LD (EOTMSG),HL LD B,(IX+15) ; PSH INC B LD HL,40H M2: ADD HL,HL DJNZ M2 LD DE,NMSG CALL DECON LD A,(IX+19) ; NTR CALL BINASC LD (TRKMSG),HL LD HL,SIDMSG LD (HL),31H LD C,(IX+17) ; EOT LD B,(IX+16) ; PHM INC B LD A,C M3: ADD A,C DJNZ M3 CP (IX+0) ; SPT JR NC,M4 INC (HL) M4: LD A,(IX+13) ; OFF ADD A,30H LD (OFSMSG),A LD A,(IX+20) ; PHYS. DEVICE ADD A,30H LD (DEVMSG),A LD DE,LWMSG CALL PSTR LD DE,28 ADD IX,DE POP BC DJNZ M0 ; LD DE,AENMSG CALL PSTR INSD1: CALL CI AND 5FH CP 'J' JP Z,SELNMB CP 'N' RET Z JR INSD1 ; BINASC: LD L,2FH BINAS1: INC L SUB 10 JR NC,BINAS1 ADD A,3AH LD H,A RET ; DECON: LD BC,-1000 CALL DIVOUT LD BC,-100 CALL DIVOUT LD C,-10 CALL DIVOUT LD A,30H ADD A,L LD (DE),A RET DIVOUT: LD A,2FH DIVO1: ADD HL,BC INC A JR C,DIVO1 SBC HL,BC LD (DE),A INC DE RET ; INSMSG: POS 5,4 DEFB 'Laufwerk A: RAM-Disk ' POS 6,4 DEFB '$' ; LWMSG: DEFB 'Laufwerk [' DEVMSG: DEFB ' ] ' LOGMSG: DEFB 'B: ' EOTMSG: DEFB ' 9*' NMSG: DEFB ' 512*' TRKMSG: DEFB '80*' SIDMSG: DEFB '2, Offset ' OFSMSG: DEFB ' ' CRLFSP: DEFB 0DH,0AH,' * $' ; AENMSG: POS 14,12 DEFB ' Aenderungen (J/N) ? ' DEFB '$' ; SELNMB: CALL CLRSCR SLNMB1: LD DE,NMBMSG CALL PSTR CALL CI SUB 30H JR C,SLNMB1 CP 3 JR C,SLNMB1 CP 9 JR NC,SLNMB1 LD (NMBDRVA),A JP SELDSK ; NMBMSG: POS 6,5 DEFB 'Geben Sie die Anzahl der logischen Laufwerke an: ' DEFB 08H,24H ; SELDSK: CALL CLRSCR SLDSK1: LD DE,LUNMSG CALL PSTR CALL CI AND 5FH SUB 'B' JR C,SLDSK1 CP 7 JR NC,SLDSK1 ADD A,1 LD (LUN),A SLDSK2: LD DE,PUNMSG CALL PSTR CALL CI SUB '0' JR C,SLDSK2 CP 2 JR NC,SLDSK2 LD (PUN),A LD DE,TAB3 CALL PSTR SLDSK5: LD DE,SELMSG CALL PSTR CALL CI SUB '0' JR C,SLDSK5 CP 10 JR NC,SLDSK5 LD (FMT),A SELOFF: LD DE,OFFMSG CALL PSTR CALL CI SUB 30H JR C,SELOFF CP 5 JR NC,SELOFF LD (OFFSET),A LD A,(FMT) LD C,A ADD A,A LD D,0 LD E,A LD HL,PARTAB ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD A,D OR E PUSH DE ;->SELEKT. DPB LD A,(LUN) LD HL,DPB1A-28 LD DE,28 SLDSK7: ADD HL,DE DEC A JR NZ,SLDSK7 ; HL - AKT. DPB POP DE EX DE,HL LD BC,26 LDIR LD HL,-6 ADD HL,DE ;HL->OFFSET LD A,(PUN) LD (HL),A ;PHYS. LW LD DE,-7 ADD HL,DE LD A,(OFFSET) LD (HL),A LD DE,-13 ADD HL,DE ;SPT LD C,(HL) ; SEK/TRACK OR A JR Z,SLDSK9 ;OFFSET 0 -> PUSH HL LD HL,0 LD B,H OFFK: ADD HL,BC DEC A ; * SYSTEMSPUREN JR NZ,OFFK EX (SP),HL POP BC INC HL INC HL LD A,(HL) ; / BLOCKSHIFT OFFL: SRL B RR C DEC A JR NZ,OFFL INC HL INC HL INC HL ; +3 LD A,(HL) ; KAPAZITAET INC HL PUSH HL LD H,(HL) LD L,A OR A SBC HL,BC LD B,H LD C,L POP HL LD (HL),B DEC HL LD (HL),C ; SLDSK9: LD DE,REPMSG CALL PSTR CALL CI AND 5FH CP 'J' JP Z,SELDSK CP 'N' JR NZ,SLDSK9 RET ; ;starten neues System AKTIV: LD C,0 LD E,24 CALL BIOS LD DE,-52 ADD HL,DE LD B,(HL) INC HL LD C,(HL) LD HL,'cc' AND A SBC HL,BC JP Z,AKTIV1 BADVER: LD DE,VERMSG CALL PSTR CALL CI JP MENU ; AKTIV1: LD A,0CH CALL CO LD A,(NMBDRVA) LD (NMBDRV),A ; Neue Anzahl LD HL,DPB1A LD DE,DPB1 LD BC,196 ;28 BYTE *7 LW LDIR ; Umladen LD HL,BDOSINA LD DE,BDOSIN LD BC,256 LDIR JP BDOSIN ; LUNMSG: POS 6,5 DEFM 'Welches logische Laufwerk soll eingestellt werden ? ' DEFB 08H DEFB '$' ; PUNMSG: POS 7,5 DEFM 'Welche physische Einheit soll benutzt werden ? ' DEFB 08H DEFB '$' ; SELMSG: POS 13,12 DEFM ' Geben Sie die entsprechende Ziffer ein: ' DEFB 08H DEFB '$' ; OFFMSG: POS 14,12 DEFB 'Geben Sie die Anzahl der Systemspuren ein: ' DEFB 08H,24H ; FMTMSG: POS 6,5 DEFM 'Folgende Formate sind anwendbar: ' DEFB '$' ; TAB3: POS 8,7 DEFM '0 - 9 * 512 * 40 * 1' POS 9,7 DEFM '1 - 5 * 1024 * 40 * 1' POS 10,7 DEFM '2 - 9 * 512 * 40 * 2' POS 11,7 DEFM '3 - 16 * 256 * 80 * 1' POS 12,7 DEFM '4 - 5 * 1024 * 80 * 1' POS 8,34 DEFM '5 - 16 * 256 * 80 * 2' POS 9,34 DEFM '6 - 9 * 512 * 80 * 2' POS 10,34 DEFM '7 - 5 * 1024 * 80 * 2' POS 11,34 DEFM '8 - 9 * 512 * 40 * 1 D' POS 12,34 DEFM '9 - 9 * 512 * 40 * 1 S' DEFB '$' ; LUN: DEFB 0 PUN: DEFB 0 FMT: DEFB 0 OFFSET: DEFB 0 ; ; DISKETTEN - PARAMETER - BLOECKE ; PARTAB: DEFW PAR32,PAR33,PAR34,PAR35 DEFW PAR36,PAR37,PAR39,PAR38 DEFW PAR3A,PAR30 ; ; 9*512*40*1 ohne Track-Skip (AMSDOS) ; PAR32: DEFW 36 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 0 ; EXM DEFW 179 ; DSM DEFW 63 ; DRM DEFB 0C0H ; AL0 DEFB 00H ; AL1 DEFW 16 ; CKS DEFW 0 ; OFF ; DEFB 002H ; PSH DEFB 003H ; PSM DEFB 09H ; EOT DEFB 025H ; GAP DEFB 028H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0H ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 5*1024*40*1 ; PAR33: DEFW 40 ; SPT DEFB 3 ; BSH DEFB 7 ; BLM DEFB 0 ; EXM DEFW 199 ; DSM DEFW 63 ; DRM DEFB 0C0H ; AL0 DEFB 0 ; AL1 DEFW 16 ; CKS DEFW 0 ; OFF ; DEFB 003H ; PSH DEFB 007H ; PSM DEFB 005H ; EOT DEFB 025H ; GAP DEFB 028H ; NTR DEFB 000H ; PUN DEFB 053H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 9*512*40*2 ; PAR34: DEFW 72 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 160 ; DSM DEFW 63 ; DRM DEFB 0C0H ; AL0 DEFB 0 ; AL1 DEFW 16 ; CKS DEFW 0 ; OFF ; DEFB 002H ; PSH DEFB 003H ; PSM DEFB 009H ; EOT DEFB 025H ; GAP DEFB 028H ; NTR DEFB 000H ; PUN DEFB 053H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 16*256*80*1 ; PAR35: DEFW 32 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 146 ; DSM DEFW 63 ; DRM DEFB 80H ; AL0 DEFB 00H ; AL1 DEFW 16 ; CKS DEFW 3 ; OFF ; DEFB 001H ; PSH DEFB 001H ; PSM DEFB 010H ; EOT DEFB 025H ; GAP DEFB 050H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 5*1024*80*1 ; PAR36: DEFW 40 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 0 ; EXM DEFW 199 ; DSM DEFW 63 ; DRM DEFB 0C0H ; AL0 DEFB 0 ; AL1 DEFW 16 ; CKS DEFW 0 ; OFF ; DEFB 003H ; PSH DEFB 007H ; PSM DEFB 005H ; EOT DEFB 025H ; GAP DEFB 050H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 16*256*80*2 ; PAR37: DEFW 64 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 0 ; EXM DEFW 319 ; DSM DEFW 127 ; DRM DEFB 0C0H ; AL0 DEFB 0 ; AL1 DEFW 16 ; CKS DEFW 0 ; OFF ; DEFB 001H ; PSH DEFB 001H ; PSM DEFB 010H ; EOT DEFB 025H ; GAP DEFB 050H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 9*512*80*2 Blockgr. 4K (VORTEX) ; PAR39: DEFW 72 ; SPT DEFB 5 ; BSH DEFB 31 ; BLM DEFB 3 ; EXM DEFW 179 ; DSM DEFW 127 ; DRM DEFB 80H ; AL0 DEFB 00H ; AL1 DEFW 32 ; CKS DEFW 0 ; OFF ; DEFB 002H ; PSH DEFB 003H ; PSM DEFB 009H ; EOT DEFB 025H ; GAP DEFB 050H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 5*1024*80*2 ; PAR38: DEFW 80 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 0 ; EXM DEFW 399 ; DSM DEFW 127 ; DRM DEFB 0C0H ; AL0 DEFB 00H ; AL1 DEFW 16 ; CKS DEFW 0 ; OFF ; DEFB 003H ; PSH DEFB 007H ; PSM DEFB 005H ; EOT DEFB 025H ; GAP DEFB 050H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0 ; SEKOFF DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; 9 * 512 * 40 * 1 AMSDOS DATENFORMAT PAR3A: DEFW 24H ; SPT DB 3 ; BSH DB 7 ; BLM DB 0 ; EXM DW 179 ; DSM DW 3FH ; DRM DW 0C0H ; AL0 DW 10H ; CKS DW 2 ; OFF ; DEFB 2 ; PSH DEFB 3 ; PSM DEFB 9 ; EOT DEFB 02AH ; GAP DEFB 40 ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0C0H ; PRE DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; ; 9 * 512 * 40 * 1 AMSDOS CP/M-SYSTEMFORMAT PAR30: DEFW 24H ; SPT DB 3 ; BSH DB 7 ; BLM DB 0 ; EXM DW 179 ; DSM DW 3FH ; DRM DW 040H ; AL0 DW 10H ; CKS DW 2 ; OFF ; DEFB 2 ; PSH DEFB 3 ; PSM DEFB 9 ; EOT DEFB 02AH ; GAP DEFB 40 ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0C0H ; PRE DEFB 0FFH ; SRT DEFB 015H ; HLT DEFB 0FFH ; CUR ; SYSGEN: CALL CLRSCR ; SYS0: LD DE,SYSMSG CALL PSTR CALL CI AND 5FH SUB 41H JR C,SYSGEN JR Z,SYSGEN CP 8 JR NC,SYSGEN LD (LUN),A LD C,A LD E,SETDSK CALL BIOS LD A,H OR L JR Z,SYSGEN ; SYS3: LD HL,BUFFER LD (DMA),HL LD HL,0 LD (TRACK),HL LD (SECTOR),HL LD A,(LUN) LD C,A LD E,SETDSK CALL BIOS SYS4: LD BC,(TRACK) LD E,SETTRK CALL BIOS SYS5: LD BC,(DMA) LD E,SETDMA CALL BIOS LD BC,(SECTOR) INCRBC: LD E,SETSEC CALL BIOS LD E,WRSEC CALL BIOS OR A JP NZ,WRERR LD HL,(DMA) LD DE,80H ADD HL,DE LD (DMA),HL LD A,(SECTOR) INC A LD (SECTOR),A CP 80 ; 80 Sektoren pro Spur JR NZ,SYS5 LD A,0 LD (SECTOR),A LD A,(TRACK) INC A LD (TRACK),A CP 2 JR C,SYS4 RET ; SYSTEM: LD A,(AKTLW) LD C,A LD E,SETDSK CALL BIOS LD DE,ENDMSG CALL PSTR JP 0 ; WRERR: LD DE,ERRMSG JP PSTR ; SECTOR: DEFW 0 TRACK: DEFW 0 DMA: DEFW 0 AKTLW: DEFB 0 ; BIOS: LD HL,(1) LD D,0 ADD HL,DE JP (HL) ; SYSMSG: POS 6,3 DEFM ' Welches Laufwerk soll zur Generierung benutzt werden ? ' DEFB '$' ; CNFMSG: POS 13,39 DEFM 'Richtig (J/N) ? ' DEFB 08H DEFB '$' ; REPMSG: POS 14,12 DEFB ' Wiederholung (J/N) ? ' DEFB 08H DEFB '$' ; ERRMSG: POS 13,35 DEFM 'Schreibfehler !' DEFB '$' ; ENDMSG: DEFB 0CH DEFB '$' ; ENDE EQU $ ; DEFS 09FFH-$,0 ; STACK EQU 9000H ; END