.Z80 PAGE 64 ;******************************************************** ;* * ;* WILHELM - PIECK - UNIVERSITAET ROSTOCK * ;* Institut fuer sozialistische Wirtschaftsfuehrung * ;* EDV - Labor * ;* * ;* MSYSG85 Vers. 1.0 * ;* * ;* Bearbeiter: M. Ohlerich Stand: 26/10/88 * ;* K.-D. Kirves * ;******************************************************** ; ; Dieses Programm dient zur Generierung des Betriebssystems ; MicroDOS fuer den KC 85/3. ; PUBLIC INCRBC ; INITOP EQU 0C300H INIAK EQU INITOP-DIFF DIFF EQU 0AF00H ; PRTDRV EQU 0C3EFH-DIFF KOPDRV EQU 0C579H-DIFF NMBDRV EQU 0ED22H-DIFF DPH0 EQU 0ED4FH-DIFF DPB1 EQU 0EDE2H-DIFF ; MSYSIN EQU 0C335H ;EINTRITT IN INITKC85 ; 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,BUFFER 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 ; GSTR: PUSH HL PUSH DE PUSH BC PUSH AF LD DE,CONBUF LD C,STRIN 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 ; NAMMSG: POS 2,8 DEFM 'VEB Mikroelektronik "Wilhelm Pieck" Muehlhausen' POS 4,10 DEFM 'MicroDOS - Installation fuer KC 85 (29/11/88)' 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 6 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 SELPRT DEFW SELKOP DEFW SYSGEN DEFW AKTIV ; MENMSG: POS 6,5 DEFB 'Funktionsauswahl: ' POS 7,10 DEFB '0 - System' POS 8,10 DEFB '1 - Diskettenlaufwerke' POS 9,10 DEFB '2 - Druckertreiber' POS 10,10 DEFB '3 - Kopplungstreiber' POS 11,10 DEFB '4 - Beschreiben der Systemdiskette' pos 12,10 DEFB '5 - Aktivieren neues System' POS 6,23 DEFB '$' ; INSDSK: CALL CLRSCR LD DE,INSMSG CALL PSTR LD A,(NMBDRV) DEC A LD B,A LD C,41H LD IX,DPB1 M0: INC C PUSH BC LD A,C LD (LOGMSG),A LD A,(IX+21) ; TYP AND 03H LD HL,DRVLST-10 LD DE,14 M1: ADD HL,DE DEC A JR NZ,M1 LD DE,TPMSG LD BC,7 LDIR 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-Floppy' POS 6,4 DEFB '$' ; LWMSG: DEFB 'Laufwerk [' DEVMSG: DEFB ' ] ' LOGMSG: DEFB 'B: ' TPMSG: DEFB 'MFS 1.6 ' EOTMSG: DEFB ' 5*' NMSG: DEFB '1024*' TRKMSG: DEFB '80*' SIDMSG: DEFB '2, Offset ' OFSMSG: DEFB ' ' CRLFSP: DEFB 0DH,0AH,' * $' ; AENMSG: 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 (NMBDRV),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 0DFH SUB 'C' JR C,SLDSK1 CP 6 JR NC,SLDSK1 ADD A,2 LD (LUN),A SLDSK2: LD DE,PUNMSG CALL PSTR CALL CI SUB '0' JR C,SLDSK2 CP 4 JR NC,SLDSK2 LD (PUN),A SLDSK3: LD DE,TYPMSG CALL PSTR CALL CI SUB '1' JR C,SLDSK3 CP 3 JR NC,SLDSK3 INC A LD (TYP),A CALL CLRSCR LD DE,FMTMSG CALL PSTR LD A,(TYP) LD HL,FRMTAB-2 LD DE,2 SLDSK4: ADD HL,DE DEC A JR NZ,SLDSK4 LD E,(HL) INC HL LD D,(HL) CALL PSTR SLDSK5: LD DE,SELMSG CALL PSTR CALL CI SUB '1' JR C,SLDSK5 CP 8 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,(TYP) DEC A ADD A,A ADD A,A ADD A,A LD HL,FMT ADD A,(HL) 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 JR Z,SLDSK5 PUSH DE LD A,(LUN) LD HL,DPH0 LD DE,16 SLDSK7: ADD HL,DE DEC A JR NZ,SLDSK7 LD DE,0 SLDSK8: LD (HL),E INC HL LD (HL),D LD DE,9 ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD HL,-DIFF ADD HL,DE EX DE,HL POP HL PUSH HL PUSH DE LD DE,20 ADD HL,DE LD A,(PUN) LD (HL),A POP DE POP HL LD BC,26 LDIR LD HL,-13 ADD HL,DE ;HL->OFFSET 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 hl,1400h ld de,SYS ld bc,3700h DI ldir JP MSYSIN ; 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 '$' ; TYPMSG: POS 8,5 DEFM 'Welcher Laufwerkstyp wird verwendet ? ' POS 9,10 DRVLST: DEFM '1 - MFS 1.2' POS 10,10 DEFM '2 - MFS 1.4' POS 11,10 DEFM '3 - MFS 1.6' SELMSG: POS 13,12 DEFM ' Geben Sie die entsprechende Ziffer ein: ' DEFB 08H DEFB '$' ; OFFMSG: POS 13,12 DEFB 'Geben Sie die Anzahl der Systemspuren ein: ' DEFB 08H,24H ; FMTMSG: POS 6,5 DEFM 'Folgende Formate sind auf diesem Laufwerk anwendbar: ' DEFB '$' ; FRMTAB: DEFW TAB1,TAB2,TAB3 ; TAB1: POS 8,10 DEFM '1 - 16 * 256 * 40 * 1' POS 9,10 DEFM '2 - 8 * 512 * 40 * 1' POS 10,10 DEFM '3 - 5 * 1024 * 40 * 1' DEFB '$' ; TAB2: POS 8,10 DEFM '1 - 16 * 256 * 40 * 1' POS 9,10 DEFM '2 - 8 * 512 * 40 * 1' POS 10,10 DEFM '3 - 5 * 1024 * 40 * 1' POS 8,34 DEFM '4 - 16 * 256 * 80 * 1' POS 9,34 DEFM '5 - 5 * 1024 * 80 * 1' DEFB '$' ; TAB3: POS 8,7 DEFM '1 - 16 * 256 * 40 * 1' POS 9,7 DEFM '2 - 5 * 1024 * 40 * 1' POS 10,7 DEFM '3 - 8 * 512 * 40 * 2' POS 11,7 DEFM '4 - 16 * 256 * 80 * 1' POS 8,34 DEFM '5 - 5 * 1024 * 80 * 1' POS 9,34 DEFM '6 - 16 * 256 * 80 * 2' POS 10,34 DEFM '7 - 9 * 512 * 80 * 2' POS 11,34 DEFM '8 - 5 * 1024 * 80 * 2' DEFB '$' ; LUN: DEFB 0 PUN: DEFB 0 TYP: DEFB 0 FMT: DEFB 0 OFFSET: DEFB 0 ; ; DISKETTEN - PARAMETER - BLOECKE ; PARTAB: DEFW PAR12,PAR13,PAR14, 0 DEFW 0, 0, 0, 0 DEFW PAR22,PAR23,PAR24,PAR25 DEFW PAR26, 0, 0, 0 DEFW PAR32,PAR33,PAR34,PAR35 DEFW PAR36,PAR37,PAR39,PAR38 ; ; MFS 1.2, 16*256*40*1 ; PAR12: DEFW 32 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 73 ; 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 028H ; NTR DEFB 000H ; PUN DEFB 041H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.2, 8*512*40*1 ; PAR13: DEFW 32 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 73 ; DSM DEFW 63 ; DRM DEFB 80H ; AL0 DEFB 00H ; AL1 DEFW 16 ; CKS DEFW 3 ; OFF ; DEFB 002H ; PSH DEFB 003H ; PSM DEFB 008H ; EOT DEFB 025H ; GAP DEFB 028H ; NTR DEFB 000H ; PUN DEFB 041H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.2, 5*1024*40*1 ; PAR14: 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 041H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.4, 16*256*40*1 ; PAR22: DEFW 32 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 73 ; 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 028H ; NTR DEFB 000H ; PUN DEFB 052H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.4, 8*512*40*1 ; PAR23: DEFW 32 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 73 ; DSM DEFW 63 ; DRM DEFB 80H ; AL0 DEFB 00H ; AL1 DEFW 16 ; CKS DEFW 3 ; OFF ; DEFB 002H ; PSH DEFB 003H ; PSM DEFB 008H ; EOT DEFB 025H ; GAP DEFB 028H ; NTR DEFB 000H ; PUN DEFB 052H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.4, 5*1024*40*1 ; PAR24: 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 052H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.4, 16*256*80*1 ; PAR25: 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 042H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.4, 5*1024*80*1 ; PAR26: DEFW 40 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; 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 042H ; TYP DEFB 0FFH ; PRE DEFB 0BFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 16*256*40*1 ; PAR32: DEFW 32 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 1 ; EXM DEFW 73 ; 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 028H ; NTR DEFB 000H ; PUN DEFB 053H ; TYP DEFB 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 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 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 8*512*40*2 ; PAR34: DEFW 64 ; 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 008H ; EOT DEFB 025H ; GAP DEFB 028H ; NTR DEFB 000H ; PUN DEFB 053H ; TYP DEFB 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 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 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 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 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 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 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 9*512*80*2 ; PAR39: DEFW 72 ; SPT DEFB 4 ; BSH DEFB 15 ; BLM DEFB 0 ; EXM DEFW 359 ; DSM DEFW 127 ; DRM DEFB 0C0H ; AL0 DEFB 00H ; AL1 DEFW 16 ; 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 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; ; MFS 1.6, 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 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; SELPRT: CALL CLRSCR LD HL,FCB+9 LD (HL),'L' INC HL LD (HL),'S' INC HL LD (HL),'T' LD HL,PRTDRV LD (LADAD),HL LD A,3 LD (LADLG),A CALL LDFILE CALL CLRSCR LD DE,BAUDRT CALL PSTR BAUD1: LD DE,SELMSG CALL PSTR CALL CI SUB 30H RET Z JR C,BAUD1 CP 6 JR NC,BAUD1 ADD A,A LD HL,BAUDTB-2 ADD A,L LD L,A ADC A,H SUB L LD H,A LD A,(HL) INC HL LD (PRTDRV+5),A LD A,(HL) LD (PRTDRV+8),A RET ; LDFILE: XOR A LD (FILNUM),A LD DE,PSMSG CALL PSTR LD DE,80H LD C,SELDMA CALL BDOS LD C,SRCHFT DSPFIL: LD DE,FCB CALL BDOS CP 0FFH JR Z,SELECT ; LD HL,80H LD DE,32 TEST: OR A JR Z,NOADD ADD HL,DE DEC A JR TEST NOADD: INC HL PUSH HL LD A,(FILNUM) INC A LD (FILNUM),A CALL BINASC LD (NOFENT),HL LD DE,NOFENT CALL PSTR POP HL CALL PRTFNM LD DE,TRMNTR CALL PSTR LD A,(FILNUM) MODULO: SUB 3 JR NC,MODULO CP -3 JR NZ,LDC LD DE,CRLFSP CALL PSTR LDC: LD C,SRCHNX JR DSPFIL ; SELECT: LD A,(FILNUM) OR A POP DE RET Z PUSH DE LD DE,SELMSG CALL PSTR CALL GSTR LD DE,CONBUF+2 LD HL,0 SELCT1: LD A,(DE) INC DE SUB 30H JR C,SELCT2 CP 10 JR NC,SELCT2 ADD HL,HL LD B,H LD C,L ADD HL,HL ADD HL,HL ADD HL,BC ADD A,L LD L,A JR SELCT1 ; SELCT2: LD A,L OR A JR Z,SELECT LD HL,FILNUM INC (HL) CP (HL) JR NC,SELECT LD B,A LD C,SRCHFT SRCHFL: PUSH BC LD DE,FCB CALL BDOS POP BC LD C,SRCHNX DJNZ SRCHFL ; LD HL,80H LD DE,32 TEST2: OR A JR Z,LDFCB ADD HL,DE DEC A JR TEST2 ; LDFCB: INC HL LD DE,UFCB+1 LD BC,11 LDIR LD H,D LD L,E INC DE LD (HL),0 LD BC,23 LDIR ; OPEN: LD C,OPENF LD DE,UFCB CALL BDOS ; LD HL,(LADAD) LD A,(LADLG) LD B,A RDFILE: PUSH HL PUSH BC EX DE,HL LD C,SELDMA CALL BDOS LD DE,UFCB LD C,READF CALL BDOS POP BC POP HL LD DE,80H ADD HL,DE DJNZ RDFILE LD DE,80H LD C,SELDMA CALL BDOS RET ; LADAD: DEFW 0 LADLG: DEFB 0 ; BAUDTB: DEFB 05BH,44H DEFB 02EH,44H DEFB 017H,44H DEFB 0B6H,04H DEFB 05BH,04H ; BAUDRT: POS 6,5 DEFB 'Baudrateneinstellung:' POS 7,5 DEFB '0 - keine Aenderung' POS 8,5 DEFB '1 - 600 Bd' POS 9,5 DEFB '2 - 1200 Bd' POS 10,5 DEFB '3 - 2400 Bd' POS 11,5 DEFB '4 - 4800 Bd' POS 12,5 DEFB '5 - 9600 Bd$' ; FILNUM: DEFB 0 ; FCB: DEFB 0 DEFB '???????????' DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 ; UFCB: DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0 ; NOFENT: DEFB '00= $' ; TRMNTR: DEFB ' $' ; CONBUF: DEFB 2 CONCNT: DEFB 0 DEFW 0 DEFB 0 ; PSMSG: POS 6,4 DEFB '$' ; SELKOP: CALL CLRSCR LD HL,FCB+9 LD (HL),'K' INC HL LD (HL),'O' INC HL LD (HL),'P' LD HL,KOPDRV LD (LADAD),HL LD A,1 LD (LADLG),A CALL LDFILE CALL CLRSCR LD DE,KOPRT CALL PSTR BAUD2: LD DE,SELMSG CALL PSTR CALL CI SUB 30H RET Z JR C,BAUD2 CP 4 JR NC,BAUD2 LD HL,KOPTB-1 ADD A,L LD L,A ADC A,H SUB L LD H,A LD A,(HL) LD (KOPDRV+7),A RET ; KOPTB: DEFB 2EH,17H,01H ; KOPRT: POS 6,5 DEFB 'Baudrateneinstellung:' POS 8,5 DEFB '0 - keine Aenderung' POS 9,5 DEFB '1 - 1200 Bd' POS 10,5 DEFB '2 - 2400 Bd' POS 11,5 DEFB '3 - 54 kBd$' ; SYSGEN: CALL CLRSCR ; SYS0: LD DE,SYSMSG CALL PSTR CALL CI SUB 41H JR C,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: NOP ; evt. INC BC LD E,SETSEC CALL BIOS LD E,WRSEC CALL BIOS OR A CALL 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 C,25 CALL BDOS LD C,A LD E,24 CALL BIOS LD DE,ENDMSG CALL PSTR JP 0 ; WRERR: LD DE,ERRMSG JP PSTR ; SECTOR: DEFW 0 TRACK: DEFW 0 DMA: DEFW 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 13,12 DEFB ' Wiederholung (J/N) ? ' DEFB 08H DEFB '$' ; ERRMSG: POS 13,35 DEFM 'Schreibfehler ! ' DEFB '$' ; ENDMSG: DEFB 0CH DEFB '$' ; DEFS 01000H-$ ; BUFFER: ; ;************************************************************** ;* * ;* KC 85 - Systemlader * ;* * ;************************************************************** ; SYS EQU INITOP ; .PHASE 9000H ; DEFB 'SYSL' ; SIGNUM ; RETRY EQU 5 ; NUMBER OF REPEAT'S ; GETSYS: XOR A LD (UNIT),A ; BOOT-DEVICE ; LD B,RETRY SYSRTR: PUSH BC XOR A LD (TRK),A LD A,2 LD (SECT),A CALL DSEEK JR NZ,SYSERR LD HL,SYS LD BC,4096 ; Spur 0/Kopf 0: 4K CALL DRD ; 0/2...0/5 JR NZ,SYSERR LD A,1 LD (HEAD),A LD (SECT),A LD A,4 LD (UNIT),A CALL DSEEK JR NZ,SYSERR LD HL,SYS+4096 LD BC,5120 ; Spur 0/Kopf 1: 5K CALL DRD JR NZ,SYSERR XOR A LD (UNIT),A LD (HEAD),A INC A LD (SECT),A LD (TRK),A CALL DSEEK JR NZ,SYSERR LD HL,SYS+9216 LD BC,4096 ; Spur 1/Kopf 0: 4K CALL DRD JR NZ,SYSERR LD A,(UNIT) ; DRIVE JP SYS ; SYSERR: POP BC DJNZ SYSRTR ; RETRY XOR A OUT (DCMT),A ; MOT OFF LD BC,'SD' HALT defb 0e7h defb 00bh ; ; ============================================ ; FLOPPY DISK INTERFACE ROUTINES USING UPD 765 ; ============================================ ; DC EQU 0F0H DCS EQU DC; MAINSTATUS DCD EQU DC+1; DATA DCDR EQU DC+2; "DMA"-DATA-REG DCRI EQU DC+4; STATUS: DRQ/INT/RDY DCMT EQU DC+6; MOT ON DCTC EQU DC+8; DC Terminal-Count PRDY EQU DCRI BRDY EQU 5 ; ; **** SEEK TO TRACK **** ; *********************** ; DSEEK: LD BC,30FH ; SEEK CALL DCMD ; ; ; **** SENSE FDC-INT-STATUS ***** ; ******************************* ; DSNS: IN A,(DCS) AND 1FH ; BUSY ? RET Z ; NO SEEK RUNNING DS4: IN A,(DCRI) BIT 6,A JR NZ,DS4 LD BC,108H ; KOM=8 CALL DK2 ; SNS INT-STATUS CALL DNXT ; ST0 LD B,A ADD A,A RET Z ; CY=1: KOM-ERR CALL DNXT ; TRACK LD A,B AND 0F0H CP 0C0H JR Z,DS4 ; RDY CHANGED XOR 20H ; SEEK-END OK: Z=1 RET ; ; ; ; ****** COMMAND TO uPD 765 ************ ; COMMAND IN C, NUMBER OF BYTES IN B ; *************************************** ; DCMD: LD HL,UNIT ; KOM-PARAMETER-TAB ; DK2: IN A,(DCS) AND 0C0H CP 80H JR NZ,DK2 LD A,C OUT (DCD),A ; send command LD C,(HL) INC HL DJNZ DK2 ; NEXT CMD-BYTE RET ; ; ; ******* NEXT RESULTBYTE FROM FDC ****** ; DNXT: IN A,(DCS) AND 0C0H CP 0C0H ; RQM ? JR NZ,DNXT IN A,(DCD) RET ; ; ; ****** FETCH RESULTBYTES FROM FDC ******* ; CHECK FOR R/W ERRORS, IF OK ---> Z=1 ; ***************************************** ; DCRES: LD B,7 ; 7 RESULTS LD HL,RSBYT DCR1: CALL DNXT LD (HL),A INC HL DJNZ DCR1 LD A,(RSBYT) ; STATUS 0 AND 0C0H ; NORMAL TERMIN.:Z=1 RET ; ; ; ; **** READ SELECTED SECTOR **** ; DRD: PUSH BC PUSH HL LD BC,946H ; BYTES/CMD CALL DCMD POP HL ; BUFFER-ADR POP DE ; DATA LENGTH LD B,E LD C,DCDR ; REQ-PORT CALL DCIO CALL DCRES RET ; ; DCIO: IN A,(DCRI) ADD A,A ; /INT in S, /DRQ in CY RET P JR C,DCIO ; NO DRQ INI JR NZ,DCIO DEC D JR NZ,DCIO OUT (DCTC),A ; TERMINAL-COUNT RET ; ; ; ****** COMMAND TABLE FOR UPD 765 ****** ; **************************************** ; UNIT: DEFB 0 ; HEAD/UNIT TRK: DEFB 0 ; TRACK 0 HEAD: DEFB 0 ; HEAD 0 SECT: DEFB 2 ; 1.SEC 3: CCP DEFB 3,5,0EH,-1 ; N/EOT/GPL/DTL ; RSBYT: DEFS 7 ; RESULTBYTES: ST0/ST1/ST2/C/H/R/N ; .DEPHASE ; DEFS 1400H-$ ; END