.Z80 ;******************************************************** ;* * ;* VEB MIKROELEKTRONIK "W. PIECK" MUEHLHAUSEN * ;* * ;* CAOSDISK Vers. 1.1 * ;* * ;* Bearbeiter: K.-D. KIRVES Stand: 18/01/89 * ;* * ;******************************************************** ; ; Dieses Programm dient der Formatierung und Einrichtung ; von Disketten fuer die CAOS-Betriebsart auf dem KC 85 ; PUBLIC FORTH,FORTHI ; ASEG ORG 103H BDOS EQU 5 MTIME EQU 0F517H WARM EQU 0 SYS EQU 0C700H ; POS MACRO LINE,COLUMN DEFB 1BH DEFB LINE+84H DEFB COLUMN+87H ENDM ; LD SP,STACK JP START ; CI: PUSH HL PUSH DE PUSH BC LD C,1 CALL BDOS POP BC POP DE POP HL CP 03H JP Z,END RET ; CO: PUSH HL PUSH DE PUSH BC PUSH AF LD E,A LD C,2 CALL BDOS POP AF POP BC POP DE POP HL RET ; PSTR: PUSH HL PUSH DE PUSH BC PUSH AF LD C,9 CALL BDOS POP AF POP BC POP DE POP HL 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 LD C,0 LD E,24 CALL BIOS LD DE,-52 ADD HL,DE LD B,(HL) INC HL LD C,(HL) LD HL,'85' OR A SBC HL,BC JP Z,FORMAT BADVER: LD DE,VERMSG CALL PSTR CALL CI JP END ; NAMMSG: POS 2,4 DEFM 'VEB Mikroelektronik "Wilhelm Pieck Muehlhausen 18/01/89' POS 4,4 DEFM 'Einrichtung einer CAOS-Betriebsart Diskette V 1.2 ' DEFB '$' ; VERMSG: POS 13,15 DEFM 'Falsche Betriebssystemversion !' 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 '$' ; FORMAT: LD DE,LUNMSG CALL PSTR LD A,1 LD C,A LD E,24 CALL BIOS LD A,H OR L JR Z,FORMAT LD DE,10 ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD HL,20 ADD HL,DE LD A,0 LD (PUN),A INC HL LD A,(HL) AND 07H CP 03H JP NZ,BADVER LD (TYP),A FORM2: LD DE,FRMMSG CALL PSTR FORMA: LD DE,CNFMSG CALL PSTR CALL CI AND 5FH CP 'N' JR Z,END CP 'J' JR NZ,FORMA LD IX,FMTTAB LD DE,0 CALL INIT JR NZ,FORMB LD DE,OKMSG JR FORM7 ; FORMB: LD HL,RESBYT LD A,(HL) AND 3FH XOR 0C0H LD DE,NRDMSG JR Z,FORMC INC HL BIT 1,(HL) LD DE,ROMSG JR NZ,FORMC INC HL INC HL BIT 6,(HL) JR NZ,FORMC BIT 5,(HL) LD DE,NRDMSG JR Z,FORMC LD DE,BTRMSG FORMC: CALL PSTR END: CALL CI LD C,25 CALL BDOS LD C,A LD E,24 CALL BIOS LD DE,ENDMSG CALL PSTR JP 0 ; FORM7: CALL PSTR LD HL,1000H ;BOOTLOADER LD (ADR),HL LD HL,0 LD (WRTRK),HL LD (WRSEK),HL LD C,1 LD E,24 CALL BIOS ;SELDISK FORMD: LD BC,(WRTRK) LD E,1BH CALL BIOS ;SELTRACK FORME: LD BC,(ADR) LD E,21H CALL BIOS ;SETDMA LD BC,(WRSEK) LD E,1EH CALL BIOS ;SELSEKTOR LD E,27H CALL BIOS ;WRITE SEKTOR OR A CALL NZ,FORMF LD HL,(ADR) LD DE,128 ADD HL,DE LD (ADR),HL LD A,(WRSEK) INC A LD (WRSEK),A CP 50H JR NZ,FORME LD A,0 LD (WRSEK),A LD A,(WRTRK) INC A LD (WRTRK),A CP 2 JR C,FORMD ;BESPIELEN MIT 8 DATEIEN LD B,9 LD IX,DATADR DATWR3: PUSH BC ;ANZAHL -> LD DE,PFCB LD C,152 ;VORBETEITUNG FCB CALL BDOS LD (PFCB),HL ;NAECHSTER NAME LD HL,FCB+12 LD B,24 DATLP: LD M,0 ;LOESCHEN REST DES FCB INC HL DJNZ DATLP LD DE,FCB LD C,22 ;DATEI ERZEUGEN CALL BDOS INC A ;FEHLER ? JR Z,WRERMM ;SCHREIBFEHLER LD E,(IX) INC IX LD D,(IX) ;ANFANG INC IX LD L,(IX) LD H,(IX+1) ;ENDE AND A SBC HL,DE ;LAENGE SLA L RL H ;*2 LD A,L AND A JR Z,DATWR1 INC H DATWR1: LD B,H ;ANZAHL SEKTOREN DATWR2: PUSH BC ;SEKTOREN -> PUSH DE ;DMA LD C,26 CALL BDOS ;SET DMA LD DE,FCB LD C,21 ;SEQ. SCHREIBEN CALL BDOS AND A JR NZ,WRERMM ;->FEHLER POP DE ;DMA<- LD HL,80H ADD HL,DE EX DE,HL POP BC ;SEKTOREN<- DJNZ DATWR2 LD DE,FCB LD C,16 CALL BDOS ;CLOSE INC A JR Z,WRERMM ;FF->FEHLER POP BC ;DATEIEN<- DJNZ DATWR3 ;BESPIELEN BEENDET LD C,25 CALL BDOS ;ABFRAGE LW LD C,A LD E,18H CALL BIOS ;SELDISK LD DE,END1M CALL PSTR JP WARM ; FORMF: LD DE,WRERMM CALL PSTR JP FORMB ; WRERMM: POS 17,42 DEFM 'Schreibfehler !$' ; BIOS: LD D,0 LD HL,(1) ADD HL,DE JP (HL) ; BINASC: LD L,2FH BINAS1: INC L SUB 10 JR NC,BINAS1 ADD A,3AH LD H,A RET ;PARAMETERBLOCK PFCB: DEFW DATNAM ;NAME DEFW FCB ; DATEINAMEN DATNAM: DEFM 'B:DEP.COM ' DEFM 'B:FSAVE.KCC ' DEFM 'B:FLOAD.KCC ' DEFM 'B:SERVICE.KCC ' DEFM 'B:BASEX.KCC ' DEFM 'B:DEVEX.KCC ' DEFM 'B:TEXOREX.KCC ' DEFM 'B:FORTHEX.KCC ' DEFM 'B:INITIAL.SUB ' ;ADRESSEN DER DATEIEN DATADR: DEFW DEPLD DEFW FSALD DEFW FLOLD DEFW SERLD DEFW BASLD DEFW DEVLD DEFW TEXLD DEFW FORLD DEFW SUBLD DEFW ENDLD ; LUNMSG: POS 6,5 DEFM 'Formatierung und Bespielen erfolgt auf Laufwerk B ' DEFB 08H DEFB '$' ; FRMMSG: POS 7,5 DEFM 'Bitte Diskette in Laufwerk B einlegen ! ' DEFB '$' ; CHCMSG: POS 7,57 DEFB '$' ; TRKMSG: POS 13,5 DEFM 'Formatierte Spur: ' TRKNMB: DEFB '00' DEFB '$' ; ROMSG: POS 13,5 DEFM 'Diskette schreibgeschuetzt !' DEFB '$' ; NRDMSG: POS 13,5 DEFM 'Laufwerk nicht bereit ! ' DEFB '$' ; OKMSG: POS 13,5 DEFM 'Formatierung beendet ! ' DEFB '$' ; BTRMSG: POS 13,5 DEFM 'Defekte Spuren ! ' DEFB '$' ; CNFMSG: POS 13,35 DEFM ' Richtig (J/N) ? ' DEFB 08H DEFB '$' ; END1M: pos 17,12 DEFM 'Bespielen beendet ! ' DEFB '$' ; ENDMSG: DEFB 0CH POS 19,0 DEFB '$' ; TYP: DEFB 0 PUN: DEFB 0 ; FDC EQU 0F0H FDCS EQU FDC FDCD EQU FDC+1 FDCDR EQU FDC+2 FDCRI EQU FDC+4 FDCMT EQU FDC+6 FDCTC EQU FDC+8 PRDY EQU FDCRI ; BPREC EQU 4 BRDY EQU 5 ; T1200 EQU 72 ; INIT: PUSH DE LD A,D CALL BINASC LD (TRKNMB),HL LD DE,TRKMSG CALL PSTR POP DE PUSH DE CALL FORM POP DE RET NZ LD A,E OR A JR NZ,SIDE0 LD A,(IX+6) AND 07H CP 3 JR NZ,SIDE0 LD E,1 JR INIT ; SIDE0: LD E,0 INC D LD A,(IX+4) DEC A CP D JR NC,INIT XOR A RET ; ; set ID table ; FORM: PUSH DE LD A,(IX+3) ; GAP LD (FMTGAP),A LD A,(IX+0) ; PSH LD (FMTN),A LD B,A LD A,(IX+2) ; EOT LD (FMTEOT),A PUSH AF RLCA RLCA DEC A LD E,A LD D,0 LD HL,IDTAB ADD HL,DE POP AF POP DE ; SETID: LD (HL),B ; set N DEC HL LD (HL),A ; set sector DEC HL LD (HL),E ; set head DEC HL LD (HL),D ; set track DEC HL DEC A JR NZ,SETID ; FDFORM: LD A,D ; track LD (CYL),A LD A,E RLCA RLCA OR (IX+5) LD (DR),A ; unit/side LD (FMTDR),A CALL FDSEEK LD HL,RESBYT RET NZ ; seek error LD HL,IDTAB LD BC,0 PUSH BC PUSH HL DEFB 21H OUTI LD (FDIO),HL LD HL,FMTCMD LD B,6 DI CALL FDK2 ; command POP HL POP DE CALL FDRW2 ; write ID bytes RET Z ; o.k. RET ; ; recalibrate drive ; FDREC: LD BC,207H CALL FDCMD CALL FDS2 ; status RET Z LD BC,207H ; repeat, if 'EC' CALL FDCMD JR FDS2 ; ; seek track ; FDSEEK: LD A,(CYL) OR A JR Z,FDREC LD BC,30FH ; seek command CALL FDCMD FDS2: IN A,(FDCRI) BIT 6,A JR NZ,FDS2 ; seek not ready ; ; ; FDSNS: LD BC,108H ; sense command CALL FDCMD CALL FDNXT LD B,A LD (RESBYT),A ADD A,A RET Z ; command error CALL FDNXT LD A,B AND 0F0H CP 0C0H JR Z,FDS2 ; RDY changed XOR 20H ; seek o.k. RET ; ; send command ; FDCMD: PUSH BC CALL READY POP BC LD HL,CMD LD (HL),C FDK2: LD C,FDCD FDK4: IN A,(FDCS) AND 0C0H CP 80H JR NZ,FDK4 OUTI ; send parameter JR NZ,FDK4 RET ; ; get next result byte ; FDNXT: IN A,(FDCS) AND 0C0H CP 0C0H ; RQM ? JR NZ,FDNXT IN A,(FDCD) RET ; ; ; FDRW2: LD B,E LD C,FDCDR ; request port CALL FDCIO EI ; ; ; FDCRES: LD B,7 LD HL,RESBYT FDCR1: CALL FDNXT LD (HL),A INC HL DJNZ FDCR1 LD HL,RESBYT LD A,(HL) AND 0C0H RET ; FDCIO: IN A,(FDCRI) ADD A,A RET P JR C,FDCIO FDIO: INI JR NZ,FDCIO DEC D JR NZ,FDCIO OUT (FDCTC),A RET ; READY: LD A,(IX+5) ; drive # AND 3 LD B,80H INC A RDY1: RLC B DEC A JR NZ,RDY1 BIT 7,(IX+6) ; 8" ? JR Z,RDY2 SET 6,B RDY2: LD A,(CYL) CP (IX+7) ; precompensation ? JR NC,RDY3 SET BPREC,B ; without prec. RDY3: LD HL,MTIME-1 ; last drive LD A,(IX+5) ; drive # AND 3 CP (HL) LD (HL),A INC HL LD C,(HL) LD (HL),T1200 LD A,B OUT (FDCMT),A ; motor on JR NZ,RDY4 ; new drive LD A,C AND A JR NZ,RDY5 ; motor already on RDY4: LD A,T1200 SRL A SRL A CP (HL) JR C,RDY4 RDY5: LD A,(HL) AND A RET Z ; ERROR: drive not ready IN A,(PRDY) BIT BRDY,A JR Z,RDY5 LD (HL),T1200+T1200 RET ; ; format table ; MFS 1.6, 5*1024*80*2 ; FMTTAB: DEFB 003H ; PSH DEFB 007H ; PSM DEFB 005H ; EOT DEFB 074H ; GAP DEFB 050H ; NTR DEFB 000H ; PUN DEFB 043H ; TYP DEFB 0FFH ; PRE DEFB 0EFH ; SRT DEFB 014H ; HLT DEFB 0FFH ; CUR ; FMTCMD: DEFB 4DH ; format command FMTDR: DEFB 00H ; drive #, side FMTN: DEFB 03H ; sector length FMTEOT: DEFB 05H ; EOT FMTGAP: DEFB 20H ; GPL DEFB 0E5H ; filler byte ; CMD: DEFB 0 DR: DEFB 0 CYL: DEFB 0 HD: DEFB 0 RC: DEFB 0 NUM: DEFB 0 DEFB 0 DEFB 0 DEFB 0 ; RESBYT: DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 ; IDTAB: DEFS 256 ; DEFS 100H ; STACK: ; ADR: DEFW 0 ;AUSGABEADRESSE WRTRK: DEFW 0 ;SPUR WRSEK: DEFW 0 ;SEKTOR ; ;************************************************************** ;* * ;* KC 85 - Systemlader * ;* * ;************************************************************** ; DEFS 1000H-$,0 .PHASE 9000H ; DEFB 'SYXL' ; 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 (SECTC),A CALL DSEEK JR NZ,SYSERR LD HL,SYS LD BC,4096 ; 4K/TRACK CALL DRD ; 0/3...0/16 JR NZ,SYSERR LD A,1 LD (HEAD),A LD (SECTC),A LD A,4 LD (UNIT),A CALL DSEEK JR NZ,SYSERR LD HL,SYS+4096 LD BC,4096+1024 CALL DRD ; WHOLE TRACK 1 JR NZ,SYSERR XOR A LD (UNIT),A LD (HEAD),A INC A LD (SECTC),A LD (TRK),A CALL DSEEK JR NZ,SYSERR LD HL,SYS+8192+1024 LD BC,2048+1024 CALL DRD ; WHOLE TRACK 2 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 SECTC: DEFB 2 ; 1.SEC 3: CCP DEFB 3,5,25H,-1 ; N/EOT/GPL/DTL ; RSBYT: DEFS 7 ; RESULTBYTES: ST0/ST1/ST2/C/H/R/N ; .DEPHASE ; DEFS 4C00H-$ DEPLD EQU $ ;MICRODOS-PROGRAMM ZUR CAOS-BETRIEBSART ; 14.12.1988 .PHASE 100H STBT EQU 0FF80H ;STEUERBYTE FCODE EQU STBT+1 ;FEHLERCODE NAME EQU FCODE+1 ;NAME(.)TYP (12 BYTE) BASDT EQU NAME+12 SECT EQU 0FE80H ;SEKTORPUFFER FCB EQU 5CH ;STANDARD- FCB DMA EQU 80H ;STANDARD-DMA ;BITBELEGUNG ANF EQU 0 ;ANFORDERUNG WRITE EQU 1 ;SCHREIBEN =1 OPEN EQU 3 ;OPEN CLOSE EQU 6 ;CLOSE FLBIT EQU 7 ;FEHLERMITTEILUNG ;AUTO-RUN ;BIT 2,4,5 SPEZIELLE ANFORDERUNGEN RUNSW EQU 1DH ;RUN BIOSN EQU 0EE00H ; DEPTOP: LD HL,(6) DEC HL DEC HL LD SP,HL ;STACK ANS ENDE DES TPA LD DE,TEXT1 LD C,9 CALL BDOS LD E,1BH LD C,2 CALL BDOS LD E,5CH LD C,2 CALL BDOS ;BYE LD HL,NEWARM LD (BIOSN+4H),HL LD E,0FEH LD C,45 CALL BDOS ;FEHLERCODE-RUECKGABE LD C,14 LD E,01 ;LW B: CALL BDOS ;AUSWAHL LD C,37 LD DE,2 ;LW B: CALL BDOS ;DISK-RESET LD DE,DMA LD C,26 CALL BDOS ;STANDARD- DMA LD DE,LFDC ;FDC FUER INITIAL.UUU LD C,15 ;OPEN CALL BDOS CP 0FFH ;VORHANDEN ? JR Z,LINS1 ;->NEIN LD DE,LFDC LD C,20 ;SEQ. READ CALL BDOS INC A ;FEHLER ? JR Z,LINS1 ;->JA LD B,128 ;LAENGE LD DE,DMA ;QUELLE LD HL,SECT ;ZIEL LINS3: LD A,(DE) INC DE CP 0AH ;CUD ? JR Z,LINS2 ;->UEBERLESEN AND A ;0 ? JR Z,LINS2 ;->UEBERLESEN CP 3 ;ENDE ? JR NZ,LINS4 ;->NEIN XOR A ;ENDEKENNZEICHEN LINS4: LD (HL),A ;UMSPEICHERN INC HL LINS2: DJNZ LINS3 LD (HL),0 ;ENDEKENNZEICHEN LD A,48H ;JOB GELADEN JR MAIN1 ; LINS1: LD A,0C8H ;KEIN JOB MAIN1: LD (STBT),A ;MELDUNG AN START ; STEUERSCHLEIFE MAIN: LD HL,(6) DEC HL DEC HL LD SP,HL MAINL: LD A,(STBT) BIT ANF,A JR Z,MAINL ;KEINE ANFORDERUNG LD B,A BIT OPEN,A ;OPEN ? JR Z,MAIN0 PUSH BC LD C,37 ;RESET DISK LD DE,2 ;B: CALL BDOS POP BC MAIN0: LD A,B AND 34H ;SPEZIELLE ANF. ? JP NZ,SPEZ LD A,B BIT WRITE,A JP NZ,WRANF RDANF: BIT OPEN,A JR Z,NOPEN CALL UPOP LD HL,FCB+9 LD A,M ; CP ' ' ;KEIN TYP ? JR NZ,RDANF1 LD A,(POINT) AND A ;PUNKT EINGEGEBEN ? JR NZ,RDANF1 LD M,'K' ;DANN .KCC INC HL LD M,'C' INC HL LD M,'C' RDANF1: LD C,15 CALL BDOS ;OPEN CP 0FFH ;FEHLER ? JR NZ,N30 FEHLER: LD A,80H LD (STBT),A LD A,H ;FEHLERCODE LD (FCODE),A JP MAIN ; FEHLY1: LD H,77H JR FEHLER ; NOPEN: BIT CLOSE,A JR Z,N3 RDCLOS: LD C,16 ;CLOSE LD DE,FCB CALL BDOS CP 0FFH JP NZ,WR3 JR FEHLER ; N30: XOR A LD (FCB+32),A N3: LD DE,FCB LD C,20 CALL BDOS ;READ NEXT SECTOR CP 0FFH JR Z,FEHLER CP 1 LD H,81H JR Z,FEHLER LD HL,DMA LD DE,SECT LD BC,80H LDIR N4: LD A,0 LD (STBT),A JP MAIN ; WRANF: BIT OPEN,A JP Z,WNOPEN CALL UPOP JP C,FEHLY1 LD HL,FCB+9 ;TYP LD A,'C' CP M JR NZ,WRANF2 INC HL LD A,'O' CP M JR NZ,WRANF1 INC HL LD A,'M' CP M LD HL,FCB+9 JR Z,WRANF3 ;COM ->KCC JR WRANF1 ; WRANF2: LD A,' ' ; CP M ;KEIN TYP ? JR NZ,WRANF1 LD A,(POINT) AND A JR NZ,WRANF1 WRANF3: LD M,'K' INC HL LD M,'C' INC HL LD M,'C' ;DANN .KCC WRANF1: LD DE,FCB LD C,15 CALL BDOS ;VERSUCH EROEFFNEN CP 0FFH JR Z,WR1 ;NICHT VORH. LD DE,FCB LD C,19 CALL BDOS ;LOESCHEN DER DATEI CP 0FFH JP Z,FEHLER WR1: LD DE,FCB LD C,22 CALL BDOS ;ANLEGEN DATEI CP 0FFH JP Z,FEHLER WRLOP: LD HL,SECT WRLOP1: LD DE,DMA LD BC,80H LDIR LD DE,FCB LD C,21 CALL BDOS ;SEQ.SCHREIBEN CP 0FFH JP Z,FEHLER CP 1 JR NZ,WR2 LD H,81H JP FEHLER ; WR2: CP 2 JR NZ,WR3 LD H,82H JP FEHLER ; WR3: XOR A LD (STBT),A JP MAIN ; WNOPEN: BIT CLOSE,A JR Z,WRLOP WRB3: LD DE,FCB LD C,16 CALL BDOS ;CLOSE CP 0FFH JP Z,FEHLER JR WR3 ; TEXT1: DEFM ' DEP aktiviert ! (14/12/88)' DEFW 0A0DH DEFM '$' ; SPEZ: CP 34H JP NZ,SERV BIT WRITE,B JP Z,BASRD BIT OPEN,B JR Z,BWR1 CALL BUPOP ;DATEI LESEN JP C,FEHLY1 LD C,15 ;VERSUCH EROEFFNEN CALL BDOS CP 0FFH JP Z,NEWB LD DE,FCB LD C,19 CALL BDOS ;ERA CP 0FFH JP Z,FEHLER NEWB: LD DE,FCB LD C,22 ;ANLEGEN CALL BDOS CP 0FFH JP Z,FEHLER BWR1: LD A,(BASDT) LD HL,(ZEIGER) LD M,A LD A,(STBT) BIT CLOSE,A JR Z,BWR2 BIT 7,A JR Z,BWRCL LD M,RUNSW JR BWRCL ;CLOSE ; BWR2: INC HL LD (ZEIGER),HL LD A,L AND A JP NZ,WR3 LD HL,PUFFER LD (ZEIGER),HL JP WRLOP1 ; BWRCL: INC HL LD A,1AH ;EOT LD HL,PUFFER LD DE,DMA LD BC,80H LDIR LD DE,FCB LD C,21 CALL BDOS ;SEQ.SCHREIBEN CP 0FFH JP Z,FEHLER CP 1 JR NZ,WRB2 LD H,81H JP FEHLER ; WRB2: CP 2 JP NZ,WRB3 LD H,82H JP FEHLER ; BASRD: BIT CLOSE,B JP NZ,WR3 BIT OPEN,B JR Z,BARD1 CALL BUPOP LD C,15 ;EROEFFNEN LD DE,FCB CALL BDOS CP 0FFH JP Z,FEHLER XOR A LD (FCB+32),A BARD1: LD HL,(ZEIGER) LD A,L CP LOW(PUFFER) JR NZ,BARD2 LD DE,FCB LD C,20 ;READ CALL BDOS CP 0FFH BASRD6: JP Z,FEHLER CP 1 LD H,81H JR Z,BASRD6 LD HL,DMA LD DE,PUFFER LD BC,80H LDIR BARD2: LD HL,(ZEIGER) LD A,M LD (BASDT),A INC HL LD A,L AND A JR NZ,BARD4 LD HL,PUFFER BARD4: LD (ZEIGER),HL JP WR3 ; SERV: CP 4 JP Z,DIR CP 10H JP Z,ERA CP 20H JP Z,REN CP 14H JR Z,STAT CP 24H JP Z,SETRO CP 30H JP Z,SETWR JP MAIN STAT: LD DE,DMA LD C,26 CALL BDOS ;STANDARD DMA LD E,1 ;LW: B LD C,14 ;AUSWAHL LW CALL BDOS LD C,46 LD E,1 CALL BDOS ;FREIER PLATZ CP 0FFH JP Z,FEHLER LD HL,(DMA) SRL H RR L ;/2 SRL H RR L ;/4 SRL H RR L ;/8 =KBYTE LD A,2FH AND A LD DE,100 ST1: INC A SBC HL,DE JR NC,ST1 ADD HL,DE CP 30H LD B,1 JR NZ,ST2 LD A,20H DEC B ST2: LD (NAME),A AND A LD DE,10 LD A,2FH ST3: INC A SBC HL,DE JR NC,ST3 ADD HL,DE DEC B JR Z,ST4 CP 30H JR NZ,ST4 LD A,20H ST4: LD (NAME+1),A LD A,L ADD A,30H LD (NAME+2),A LD HL,STATXT LD DE,NAME+3 LD BC,17 LDIR JP N4 ; DIR: BIT 3,B ;OPEN ? JR Z,DIR1 LD HL,DIRPUF LD (PUFMER),HL LD HL,2 LD (TRKMER),HL LD L,H LD (SEKMER),HL LD BC,(TRKMER) LD E,1BH CALL BIOSD ;SELTRACK DIR2: LD BC,(PUFMER) LD E,21H ;SELDMA CALL BIOSD LD BC,(SEKMER) LD E,1EH ;SELSEKTOR CALL BIOSD LD E,24H ;READ SEKTOR CALL BIOSD LD H,A AND A JP NZ,FEHLER LD HL,(PUFMER) LD DE,80H ADD HL,DE LD (PUFMER),HL LD A,(SEKMER) INC A LD (SEKMER),A CP 32 JR NZ,DIR2 LD HL,DIRPUF LD (PUFMER),HL LD A,128 LD (SEKMER),A ; DIR1: LD B,3 LD HL,NAME DIR5: LD A,(SEKMER) AND A JR NZ,DIR3 LD A,4 LD (STBT),A JP MAIN ; DIR3: LD A,(SEKMER) DEC A LD (SEKMER),A LD IX,(PUFMER) LD A,(IX) OR (IX+12) ;><0 GELOESCHT ODER EXTENT JR Z,DIR4 LD DE,32 ADD IX,DE LD (PUFMER),IX JR DIR7 ; DIR4: INC IX LD C,11 DIR6: LD A,(IX) LD M,A INC IX INC HL DEC C JR NZ,DIR6 LD M,' ' INC HL LD DE,20 ADD IX,DE LD (PUFMER),IX DJNZ DIR7 DIR10: LD M,0DH INC HL LD M,0AH JP N4 ; DIR7: LD A,(SEKMER) AND A JR NZ,DIR3 DIR9: LD C,12 DIR8: LD M,20H INC HL DEC C JR NZ,DIR8 DJNZ DIR9 JR DIR10 ; ERA: CALL UPOP JP C,FEHLY1 LD C,19 ERA1: LD DE,FCB CALL BDOS CP 0FFH JP Z,FEHLER JP N4 ; REN: BIT 3,B ;OPEN JR Z,REN1 CALL UPOP LD HL,FCB LD DE,DIRPUF LD BC,16 LDIR JP N4 ; REN1: CALL UPOP LD HL,FCB LD DE,FCB+16 LD BC,16 LDIR LD HL,DIRPUF LD DE,FCB LD C,16 LDIR LD C,23 JR ERA1 ; ;SETZEN SCHREIBSCHUTZ SETRO: CALL UPOP LD HL,FCB+9 SET 7,M ;T1 GESETZT SETRO1: LD C,30 LD DE,FCB JP ERA1 ; ;AUFHEBEN SCHREIBSCHUTZ SETWR: CALL UPOP LD HL,FCB+9 RES 7,M ;T1=0 JR SETRO1 ; NEWARM: RET ; STATXT: DEFM ' kbyte free ! ' DEFW 0A0DH BUPOP: LD HL,PUFFER LD (ZEIGER),HL ;PUFFER EINRICHTEN UPOP: XOR A LD (POINT),A LD HL,FCB ; LD M,02 ;LW B: INC HL LD B,11 LD DE,NAME LD A,(DE) BIT 7,A JR NZ,BASNAM ;NAME AUS BASIC LD B,8 NLOOP: LD A,(DE) INC DE CP '.' JR Z,NP1 CP 20H JR NC,N1 LD A,20H N1: LD M,A INC HL DJNZ NLOOP NLOOP2: LD A,(DE) CP '.' JR NZ,NLOOP3 LD (POINT),A INC DE NLOOP3: LD B,3 NLOOP4: LD A,(DE) INC DE CP 20H JR NC,N41 LD A,20H N41: LD M,A INC HL DJNZ NLOOP4 NL3: LD B,22 NL2: LD M,0 ;BYTE12=0 INC HL DJNZ NL2 LD DE,FCB LD HL,FCB+1 LD B,11 NL0X: LD A,(HL) INC HL CP ' ' JR C,NLFEHL CP 7FH JR NC,NLFEHL DJNZ NL0X AND A RET ; NLFEHL: SCF RET ; NP1: LD M,' ' INC HL DJNZ NP1 LD (POINT),A JR NLOOP2 ; BASNAM: LD HL,FCB+9 LD B,3 NL1: LD A,(DE) AND 7FH LD M,A INC DE INC HL DJNZ NL1 LD HL,FCB+1 LD BC,8 EX DE,HL LDIR LD HL,FCB+12 JR NL3 ;BIOSAUFRUF E=NR*3 BIOSD: LD D,0 LD HL,(1) ADD HL,DE JP (HL) ; ZEIGER: DEFW DMA PUFMER: DEFS 2 TRKMER: DEFS 2 SEKMER: DEFS 2 POINT: DEFS 1 ; LFDC: DEFB 2 ;FDC FUER JOB-DATEI DEFM 'INITIAL UUU' DEFS 24,0 DIRPUF EQU $ PUFFER EQU 6080H ; .DEPHASE FSALD EQU $ .PHASE 0 ;FSAVE AAAA EEEE (SSSS) FUER KC-CAOS ; PROL EQU 7F7FH ;PROLOG CAOS DEVPRO EQU 0DDDDH ;PROLOG EDAS CAOS EQU 0F003H ARGN EQU 0B781H ARG1 EQU ARGN+1 ARG2 EQU ARG1+2 ; DEFM '270688' DEFS 10,0 DEFB 2 ;ARGN DEFW 0 ;ANFANG DEFW ENDE-ANFANS ;ENDE DEFW 0E000H ;NO START DEFS 128-$,0 ; ANFANS: DEFW PROL DEFM 'FSAVE' DEFB 1 FLOD11: LD A,(ARGN) CP 2 JR C,ERROR CALL CAOS DEFB 23H DEFM 'Name :' DEFB 0 CALL CAOS DEFB 17H ;INLIN LD HL,6 ADD HL,DE FSAVE: LD E,12 LD BC,82F3H ;NAME FL0: LD A,M OUT (C),A INC HL INC B DEC E JR NZ,FL0 LD HL,ARGN LD DE,0B0BH ;OPEN LD BC,91F2H ;DATEN FW0: OUTI INC B INC B DEC E JR NZ,FW0 LD BC,80F3H OUT (C),D FL1: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR NZ,FL1 BIT 7,A JR Z,FW2 FLERR: LD BC,81F3H IN A,(C) ;FEHLERCODE CALL CAOS DEFB 1CH ;AHEX ERROR: CALL CAOS DEFB 19H RET ; FW2: LD BC,81F2H BIT 3,D JR Z,FW9 LD HL,(ARG1) FW9: PUSH HL LD DE,(ARG2) AND A SBC HL,DE POP HL LD BC,81F2H LD DE,380H JR NC,FCL JR FW0 ; FCL: LD BC,80F3H LD A,43H ;CLOSE OUT (C),A FCL1: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR Z,FCL1 BIT 7,A JR NZ,FLERR RET ; ENDE EQU $ .DEPHASE FLOLD EQU $ .Z80 ;FLOAD OOOO FUER KC-CAOS ; ARGN EQU 0B781H ARG1 EQU ARGN+1 IRMON EQU 0F018H IRMOFF EQU IRMON+3 RCALL EQU 0F00FH ; .PHASE 0 DEFM '010688' DEFS 10,0 DEFB 2 DEFW 0 DEFW ENDEA-ANFAN ;ENDE DEFW 0E000H ;NO START DEFS 105,0 ; .DEPHASE .PHASE 0 NAMEB: DEFS 12,20H ;LEERZEICHEN CALL IRMON LD HL,NAMEB CALL RCALL DEFW FLOAD-IRMO1 IRMO1: CALL IRMOFF RET ; ANFAN: DEFW PROL DEFM 'FLOAD' DEFB 1 FLOAD1: CALL CAOS DEFB 23H DEFM 'Name :' DEFB 0 CALL CAOS DEFB 17H ;INLIN EX (SP),HL LD (0B797H),HL ;MERKEN RET EX (SP),HL LD HL,6 ADD HL,DE FLOAD: LD E,12 LD BC,82F3H FL0A: LD A,M OUT (C),A INC HL INC B DEC E JR NZ,FL0A LD A,9 ;OPEN LD B,80H OUT (C),A FL1A: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR NZ,FL1A BIT 7,A JR NZ,FLERRA LD BC,90F2H ;AB BYTE 17 IN A,(C) ;ARGN CP 2 JR C,FLER2A CP 10 JR NC,FLER2A INC B IN L,(C) ;ANFANG INC B IN H,(C) INC B IN E,(C) ;ENDE+1 INC B IN D,(C) CP 3 JR C,FL23 PUSH HL ;ANF-> INC B IN L,(C) INC B IN H,(C) ;START EX (SP),HL ;->START/ ANF<- FL23: PUSH AF LD A,(ARGN) AND A JR Z,FL2 LD BC,(ARG1) ADD HL,BC ;ANFANG+OFFSET POP AF JR C,FL24 EX (SP),HL ADD HL,BC ;START+OFFSET EX (SP),HL FL24: EX DE,HL ;HL=ENDE ADD HL,BC EX DE,HL PUSH AF FL2: POP AF FL26: LD A,1 ;READ LD BC,80F3H OUT (C),A ;B=0 FL4: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR NZ,FL4 BIT 7,A JR Z,FL25 FLERRA: LD BC,81F3H IN A,(C) ;FEHELERCODE CALL CAOS DEFB 1CH ;AHEX FLER2A: CALL CAOS DEFB 19H POP HL LD HL,(0B797H) JP (HL) ;=RET ; FL25: DEC C ;C=F2H FL21: INI INC B INC B PUSH HL SBC HL,DE POP HL RET NC LD A,B AND A JR NZ,FL21 JR FL26 ; DEFS 100H-$,0 ENDEA EQU $ .DEPHASE ; SERLD EQU $ ; SERVICE-PROGRAMM ZUR CAOS-BETRIEBSART ; FLOAD,FSAVE,DIR,STAT,REN,ERA,SETRO ; SETWR ; TOP EQU 0BE00H ; .PHASE 0 DEFM '211188' DEFS 10,0 DEFB 3 DEFW TOP DEFW ENDEB ;ENDE DEFW STARSV ;UMLADEROUTINE ->0D0H DEFS 105,0 ; .DEPHASE .PHASE TOP UPIN: CP 8 RET NC ADD A,A LD HL,UPTAB ADD A,L LD L,A LD A,M INC HL LD H,(HL) LD L,A JP (HL) ; TABELLE DER EINTRITTSPUNKTE UPTAB: DEFW FLX ;FLOAD 0 D8 DEFW FSX ;FSAVE 1 DB DEFW DIRX ;DIR 2 DE DEFW STATX ;STAT 3 E1 DEFW RENX ;RENAME 4 E4 DEFW SETRX ;SETWR 5 E7 DEFW SETWX ;SETRO 6 EA DEFW EREX ;ERASE 7 ED ; FLX: LD HL,0 ;UP 0 CALL FLOADA JR FLX1 ; DEFW PROL DEFM 'FLOAD' DEFB 1 CALL NAMIN FLX1: EX (SP),HL LD (0B797H),HL EX (SP),HL LD A,9 ;OPEN CALL WAIT JR NZ,FLERBX LD BC,90F2H ;AB BYTE 17 IN A,(C) ;ARGN CP 2 JR C,FLER2B CP 10 JR NC,FLER2B INC B IN L,(C) ;ANFANG INC B IN H,(C) INC B IN E,(C) ;ENDE+1 INC B IN D,(C) CP 3 JR C,FL23A PUSH HL ;ANF-> INC B IN L,(C) INC B IN H,(C) ;START EX (SP),HL ;START->STACK FL23A: PUSH AF LD A,(ARGN) AND A JR Z,FL2A LD BC,(ARG1) ADD HL,BC ;ANFANG+OFFSET POP AF JR C,FL24A EX (SP),HL ADD HL,BC ;START+OFFSET EX (SP),HL FL24A: EX DE,HL ;HL=ENDE ADD HL,BC EX DE,HL PUSH AF FL2A: POP AF FL26A: LD A,1 ;READ CALL WAIT JR Z,FL25A FLERBX: POP HL LD HL,(0B797H) PUSH HL FLERRB: LD BC,81F3H IN A,(C) ;FEHLERCODE CALL CAOS DEFB 1CH ;AHEX FLER2B: CALL CAOS DEFB 19H RET ; FL25A: DEC C ;C=F2H FL21A: INI INC B INC B PUSH HL SBC HL,DE POP HL RET NC ;-> ENDE LD A,B AND A JR NZ,FL21A JR FL26A ;NAECHSTER SEKTOR ; ;FSAVE AAAA EEEE (SSSS) FUER KC-CAOS ; FSX: LD HL,0 ;UP1 CALL FLOADA JR FSX1 ; ARG2 EQU ARG1+2 ; DEFW PROL DEFM 'FSAVE' DEFB 1 CALL NAMIN FSX1: LD A,(ARGN) CP 2 JR C,FLER2B LD HL,ARGN LD DE,0B0BH ;OPEN LD BC,91F2H ;DATEN FW0A: OUTI INC B INC B DEC E JR NZ,FW0A LD A,D CALL WAIT LD A,0 LD (ARGN),A JR Z,FW2A JP FLERRB ; FW2A: LD BC,81F2H BIT 3,D JR Z,FW9A LD HL,(ARG1) FW9A: PUSH HL LD DE,(ARG2) AND A SBC HL,DE POP HL LD BC,81F2H LD DE,380H JR NC,FCLA JR FW0A ; FCLA: LD A,43H ;CLOSE CALL WAIT JP NZ,FLERRB RET ; ;DIRECTORY-ANZEIGE ; DEFW DEVPRO DEFM 'DIR' DEFB 1 JR DL00 ; DEFW PROL DEFM 'DIR' DEFB 1 DIRX: ;UP2 DL00: LD A,0DH DL3: CALL WAIT JP NZ,FLERRB BIT 2,A RET NZ LD E,38 CALL OUTLOP LD A,5 JR DL3 ; ;STATUSANZEIGE DER DISKETTE ; DEFW PROL DEFM 'STAT' DEFB 1 STATX: LD A,15H ;UP3 CALL WAIT JP NZ,FLERRB LD E,20 OUTLOP: LD B,82H SL2: IN A,(C) INC B PUSH DE PUSH BC CALL CAOS DEFB 0 POP BC POP DE DEC E JR NZ,SL2 RET ; ; UMBENENNEN EINER DATEI DEFW PROL DEFM 'REN' DEFB 1 RENX: CALL NAMIN ;UP4 LD A,29H CALL WAIT CALL NAMIN LD A,21H RL3: CALL WAIT JP NZ,FLERRB RET ; ; LOESCHEN EINER DATEI DEFW PROL DEFM 'ERA' DEFB 1 EREX: CALL NAMIN ;UP7 LD A,11H JR RL3 ; ; SETZEN SCHREIBSCHUTZ DEFW PROL DEFM 'SETRO' DEFB 1 SETRX: CALL NAMIN ;UP5 LD A,25H JR RL3 ; ;AUFHEBEN SCHREIBSCHUTZ DEFW PROL DEFM 'SETWR' DEFB 1 SETWX: CALL NAMIN ;UP6 LD A,31H JR RL3 ;UNTERPROGRAMM NAMENSEINGABE UND UEBERGABE IN K RAM NAMIN: CALL CAOS DEFB 23H DEFM 'Name :' DEFB 0 CALL CAOS DEFB 17H ;INLIN LD HL,6 ADD HL,DE FLOADA: LD E,12 LD BC,82F3H FL0B: LD A,M OUT (C),A INC HL INC B DEC E JR NZ,FL0B LD B,80H RET ;UNTERPROGRAMM AUSGABE STEUERBYTE UND WARTEN WAIT: LD BC,80F3H OUT (C),A FL1B: PUSH BC LD A,1 CALL 0F003H DEFB 14H ;UP-WAIT POP BC IN A,(C) BIT 0,A JR NZ,FL1B BIT 7,A RET ; ;SELBSTSTARTROUTINE ZUM UMLADEN AUF ->D0H STARSV: LD HL,SERUM LD DE,0D8H LD BC,SEREND-SERUM LDIR RET ;SERUM SERUM: JPFL: LD A,0 DEFB 1 JPFS: LD A,1 DEFB 1 JPDIR: LD A,2 DEFB 1 JPSTAT: LD A,3 DEFB 1 JPREN: LD A,4 DEFB 1 JPRO: LD A,5 DEFB 1 JPWR: LD A,6 DEFB 1 JPERA: LD A,7 CALL 0F018H ;IRMON CALL 0BE00H ;UP-VERTEILER CALL 0F01BH RET ; SEREND: DEFS 0BFFFH-$,0 ENDEB EQU $ .DEPHASE BASLD EQU $ ;BASIC-SCHNITTSTELLE FUER FLOPPY ; SIDE3 EQU 0F3H BASDAT EQU 8EH SUTAB EQU 0B7B0H ;SYSTEMUNTERPROGRAMMTABELLE TABLN EQU 90H IOERR EQU 0B7C9H RBYTO EQU 70H ;BYTEAUSGABE RBYTI EQU 6EH ;BYTEEINGABE OPEN EQU 3 CLOSE EQU 6 RUNMD EQU 7 ; .PHASE 0 DEFM '270688' DEFS 10,0 DEFB 3 DEFW 200H DEFW 300H DEFW STARTX DEFS 105,0 .DEPHASE .PHASE 200H ; AUTORN: DEFB 0 ;=1 AUTO-RUN ; SUTA1: DEFW 0 ; OUT: LD BC,256*BASDAT+SIDE3 OUT (C),A ;DATENAUSGABE LD A,D ;STEUERWORT AND 48H OR 37H BIT OPEN,A CALL NZ,UPNAM BIT CLOSE,A JR Z,OUT1 LD B,A LD A,(AUTORN) AND A LD A,B JR Z,OUT1 SET RUNMD,A OUT1: LD B,STBT OUT (C),A OUT2: IN A,(C) BIT 0,A JR NZ,OUT2 BIT 7,A SET 0,(IX+8) ;TASTE RET Z ; BASERR: INC B IN A,(C) CALL CAOS DEFB 1CH LD HL,(IOERR) PUSH HL JP IRMOFF ; IN: LD A,D AND 48H OR 35H LD C,SIDE3 BIT OPEN,A CALL NZ,UPNAM LD B,STBT OUT (C),A IN1: IN A,(C) BIT 0,A JR NZ,IN1 BIT 7,A JR NZ,BASERR LD B,BASDAT IN A,(C) RET ; UPNAM: LD E,11 LD B,83H OUTLP: OUTI INC B INC B DEC E JR NZ,OUTLP RET ; ; NSUTA EQU $ ; STARTX: LD HL,CHANGE LD DE,150H LD BC,21H LDIR LD HL,(SUTAB) PUSH HL ;(SP)=SUTAB LD (SUTA1),HL LD DE,NSUTA LD (SUTAB),DE LD BC,TABLN LD HL,OUT EX (SP),HL ;HL=SUTAB ;/(SP)=OUT PUSH HL ;SUTAB->(SP) LD HL,IN EX (SP),HL ;HL=SUTAB ;/(sp)=IN JP 150H+START1-CHANGE ; CHANGE: CALL IRMON LD HL,(SUTA1) LD DE,(SUTAB) LD (SUTAB),HL LD (SUTA1),DE CALL IRMOFF RET ; START1: LDIR POP HL LD (NSUTA+RBYTI),HL POP HL LD (NSUTA+RBYTO),HL RET ; .DEPHASE DEVLD EQU $ ;* PROGRAMM ZUR CAOS-BETRIEBSART ZUM * ;* DEVELOPMENT-MODUL M027 * ; DEVPRL EQU 0DDDDH SIDE3 EQU 0F3H SIDE2 EQU 0F2H SECTOR EQU 80H TOPD EQU 0BC00H TABLN EQU 90H ; .PHASE 0 DEFM '141288' DEFS 10,0 DEFB 3 DEFW TOPD DEFW ENDEC DEFW INITDV DEFS 105,0 ; .DEPHASE .PHASE TOPD INITDV: LD HL,0 LD B,80H INI2: LD A,M CP 7FH INC HL JR Z,INI1 DJNZ INI2 JR INI3 ; INI1: LD M,0 INI3: LD HL,(SUTAB) LD (TABMER),HL LD DE,NEWTAB LD (SUTAB),DE LD BC,TABLN LDIR LD HL,MBOT LD (NEWTAB+2),HL LD HL,MBIN LD (NEWTAB+10),HL LD HL,ADTAB LD DE,NEWTAB+16 LD C,8 LDIR RET ; ;ADRESSTABELLE NEUER SYSTEMUNTERPROGRAMME ; ADTAB: DEFW ISRO DEFW CSRO DEFW ISRI DEFW CSRI ; ;UMSCHALTUNG KASSETTE ; DEFW DEVPRO DEFM 'TAPE' DEFB 1 JR TAPE0 ; DEFW PROL DEFM 'TAPE' DEFB 1 TAPE0: LD HL,(TABMER) TAPE1: LD (SUTAB),HL RET ; ;UMSCHALTUNG DISKETTE ; DEFW DEVPRO DEFM 'DISK' DEFB 1 JR DISK0 ; DEFW PROL DEFM 'DISK' DEFB 1 DISK0: LD HL,NEWTAB JR TAPE1 ; ;SYSTEMUNTERPROGRAMME ; OPEN WRITE ISRO: LD (IX+2),0 ;SEKTORZAEHLER LD L,(IX+5) ;PUFFER LOW LD H,(IX+6) ;PUFFER HIGH LD BC,SIDE3+(83H)*256 LD E,11 ISRO1: OUTI INC B INC B DEC E JR NZ,ISRO1 ;NAMEN EINTRAGEN LD D,0BH ;OPEN WRITE ISRO4: INC (IX+2) LD H,(IX+6) LD L,(IX+5) LD BC,SIDE2+(SECTOR+1)*256 LD E,128 ISRO3: OUTI INC B INC B DEC E JR NZ,ISRO3 ;SEKTOR UMSPEICHERN ISRO5: LD BC,STBT*256+SIDE3 OUT (C),D ISRO2: PUSH BC LD A,1 CALL 0F003H DEFB 14H ;WAIT POP BC IN A,(C) BIT 0,A JR NZ,ISRO2 AND A ;CY=0 BIT 7,A RET Z INC B IN A,(C) CALL CAOS DEFB 1CH ;A HEX CALL CAOS DEFB 19H ;ERROR SCF ;CY=1 RET ; ;WRITE BLOCK ; MBOT: LD D,3 JR ISRO4 ; ;CLOSE WRITE CSRO: CALL MBOT RET C LD D,43H LD (IX+5),0 LD (IX+6),0B7H ;PUFFER RUECKSTELLEN JR ISRO5 ; ; OPEN READ ISRI: LD (IX+2),0 ;SOLLBLOCK POP DE POP HL ;HL->NAME PUSH HL PUSH DE LD BC,SIDE3+(83H)*256 LD DE,90BH ;OPEN+NAMENSLAENGE ISRI1: OUTI ;NAMENSUEBERGABE INC B INC B DEC E JR NZ,ISRI1 PUSH DE JR MBIN2 ; MBIN: PUSH DE LD D,1 ;BLOCKREAD MBIN2: CALL ISRO5 ;LESEN BLOCK POP DE RET C PUSH DE PUSH HL PUSH AF LD L,(IX+5) LD H,(IX+6) ;PUFFERADRESSE LD BC,SIDE2+SECTOR*256 LD E,128 ISRI2: INI INC B INC B DEC E JR NZ,ISRI2 INC (IX+2) POP AF POP HL POP DE RET CSRI: CALL CAOS DEFB 2CH RET ; TABMER: DEFW 0 NEWTAB: DEFS 0BDFFH-$,0 ENDEC EQU $ .DEPHASE TEXLD EQU $ ;* TEXOR - PROGRAMM ZUR CAOS-BETRIEBSART * ;* LADEN,RETTEN,ANFUEGEN * TOPT EQU 0BC00H ; .PHASE 0 DEFM '130688' DEFS 10,0 DEFB 2 DEFW TOPT DEFW ENDET ;ENDE DEFW 0E000H ;NO START DEFS 105,0 ; .DEPHASE .PHASE TOPT DEFW PROL DEFM 'LADEN' DEFB 1 LD HL,200H LD (ARG1),HL LADEN1: CALL NAMINA LD A,9 ;OPEN OUT (C),A FL1C: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR NZ,FL1C BIT 7,A JR NZ,FLERRC LD BC,90F2H ;AB BYTE 17 IN A,(C) ;ARGN CP 2 JR NZ,FLERRC INC B IN L,(C) ;ANFANG INC B IN H,(C) INC B IN E,(C) ;ENDE+1 INC B IN D,(C) AND A EX DE,HL SBC HL,DE ;LAENGE LD DE,(ARG1) ADD HL,DE ;ENDE EX DE,HL LD HL,(ARG1) FL26B: LD A,1 ;READ LD BC,80F3H OUT (C),A ;B=0 FL4A: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR NZ,FL4A BIT 7,A JR Z,FL25B FLERRC: LD BC,81F3H IN A,(C) ;FEHELERCODE CALL CAOS DEFB 1CH ;AHEX FLER2C: CALL CAOS DEFB 19H RET ; FL25B: DEC C ;C=F2H FL21B: INI INC B INC B LD A,B AND A JR NZ,FL21B PUSH HL SBC HL,DE POP HL JR C,FL26B RET ;ENDE ; ; ANFUEGEN EINER DATEI ; DEFW PROL DEFM 'ANFUEGEN' DEFB 1 LD HL,200H ANLOP: LD A,M CP 0FFH JR Z,ANL1 INC HL LD A,80H CP H JR NZ,ANLOP ERRR: CALL CAOS DEFB 19H ;ENDE OHNE TEXT RET ; ANL1: XOR A LD M,A LD A,M AND A JR NZ,ERRR LD (ARG1),HL JP LADEN1 ; ; RETTEN ; DEFW PROL DEFM 'RETTEN' DEFB 1 CALL NAMINA LD HL,200H RET1: LD A,M CP 0FFH JR Z,RET2 INC HL LD A,80H CP H JR C,ERRR JR RET1 ; RET2: INC HL LD M,A INC HL LD M,A INC HL LD M,1AH INC HL LD (ARG2),HL LD HL,200H LD (ARG1),HL LD HL,ARGN LD M,2 LD DE,0B0BH ;OPEN LD BC,91F2H ;DATEN FW0B: OUTI INC B INC B DEC E JR NZ,FW0B LD BC,80F3H OUT (C),D FW1: PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR NZ,FW1 BIT 7,A JR Z,FW2B JP FLERRC ; FW2B: LD BC,81F2H BIT 3,D JR Z,FW9B LD HL,(ARG1) FW9B: PUSH HL LD DE,(ARG2) AND A SBC HL,DE POP HL LD BC,81F2H LD DE,380H JR NC,FCLB JR FW0B ; FCLB: LD BC,80F3H LD A,43H ;CLOSE OUT (C),A PUSH BC LD A,1 CALL 0F003H DEFB 14H POP BC IN A,(C) BIT 0,A JR Z,FCLB BIT 7,A JP NZ,FLERRC RET ; ; ;UNTERPROGRAMM NAMENSEINGABE UND UEBERGABE IN K RAM NAMINA: CALL CAOS DEFB 23H DEFM 'Name :' DEFB 0 CALL CAOS DEFB 17H ;INLIN LD HL,6 ADD HL,DE FLOADB: LD E,12 LD BC,82F3H FL0C: LD A,M OUT (C),A INC HL INC B DEC E JR NZ,FL0C LD B,80H RET ; DEFS 0BDFFH-$,0 ENDET EQU $ .DEPHASE FORLD EQU $ ; .PHASE 0 DEFM '300888' DEFS 10,0 DEFB 3 DEFW 200H DEFW ENDFO DEFW 06F0H DEFS 105,0 ; .DEPHASE FORTHI: .PHASE 200H FORTH EQU $ ;FORTHERWEITERUNG IN FORTH GESCHRIEBEN ; --> HIER EINFUEGEN DEFS 580H,0 ENDFO EQU $ .DEPHASE ;INITIAL.SUB - STARTDATEI SUBLD EQU $ DEFM 'B:' DEFW 0A0DH DEFM 'DEP' DEFW 0A0DH DEFW 1A1AH DEFS 117,1AH ENDLD EQU $ END