xx; EMDOS 13.07.84; [nderungen : **** ab 6606; Last change : 17.09.84"; D O S&;0;4; COPYRIGHT (C) 1983 BY HELMUT EMMELMANN8;B;F; BENANW: MODUL ZUR AUSFUEHRUNG DERP; ANWEISUNGEN DES BENUTZERST;X; DAS MODUL BILDET GLE2!wICHZEITIG DEN STARTb; DES SYSTEMS UND BEGINNT DESHALB MIT DERf; BETRIEBSSYSTEMSCHNITTSTELEp;.Z80t;DDNASSYSx ORG #A000NL EQU #0DBS EQU #08FF EQU #0CESC EQU #1BIN EQU #62MRET EQU #5BINLIN EQU #63RLIN EQU #79TX1 "vEQU #6CTBCD2 EQU #67"TBCD3 EQU #66&PRS EQU #280ROUT EQU #304UOUT EQU #C778UIN EQU #C7ABURET EQU #2FFCURSOR EQU #C29PARGN EQU #C0BTARG1 EQU #C0CXARG2 EQU ARG1+2bARG3 EQU ARG2+2fARG4 EQU ARG3+2pARG5 EQU ARG4+2tMBUF DEFS 256xC#u;;SYSSTADS 0; JP BENMON ; START VOM MONITOR AUSMCALLS JP MCALL ; CALL SCHNITTST. ERMOEGL.;AUFRUF VON BENANW, PHEAS, LEAS, FILEEAS JP NASPHE ; NASSYS BEFEHLE ZUM DIREKTEN; DISKZUGRIFF JP BASIC ; BASIC EINSPRUNGPUNKT;;r$t";& JP PHEAS## ; SPURNG F. DIREKTE PHEASAUFR.0 DEFW DRVA## ; UM ALLE FORMATE ZUZUWEISEN4;8;B DEFM "EMDOS (C) 1983 BY HELMUT EMMELMANN"F;P;TFCBH DEFS 36 ; PUFFER FUER FILE-LINKSX; FREIE SEKTOREN TABELLEbFCBHLE EQU FCBH+2 ; LAENGE DER %sDATEIf;p;tBAM DEFS 33 ; 1+32 : 256 GROUPSx; DEFS 8 ;DEFS 128-$+SYSSTA;INVEK DEFW 0 ; INTERRUPT-VEKTOR;;BENMON LD SP,1000H CALL BENANW SCAL MRET;;"BENANW OR A& JR C,B100 ; -> KEIN KALTSTART0;4 RST PRS8 DEFB &rFF,NL,NLB DEFM " E M D O S - fuer NASCOM I,II"F DEFB NL,NLP DEFM " (C) 1983 BY HELMUT EMMELMANN"T DEFB NL,NL,0X LD A,37Hb LD (BENANW),Af XOR Ap CALL PHEASt;xB100 DEFS 0 RST PRS  DEFB "X-40H, DEFM "EMDOS " DEFB NL,0SOS,'qW LD HL,SO400 ; WIRD SPAETER IN CALL LD A,0C3H ; UMGEWANDELT LD (0C1DH),A LD HL,MCALLS LD (0C1EH),HL LD HL,FCBH" LD A,4& CALL LEAS0 SCAL INLIN ; ANWEISUNG EINLESEN4B110 LD A,(DE)8 CP "B INC DEF JR Z,B110P LD B,AT LDy(p A,(DE)X CP "b JR NZ,C100 ; KEIN KOMMANDOf LD A,Bp CP "Nt JR Z,B115x CP "M JR NZ,B120B115 LD A,1 CALL PHEAS RETB120 CP "D JP Z,DI000 ; DIRECTORY CP "F JP Z,F000 ; FORMAT FESTLEGEN CP "S JP Z,S000 ; SAVE" CP "E)o& JP Z,E000 ; DATEI LOESCHEN0 CP "L4 JP Z,L000 ; LOAD8 CP "RB JP Z,R000 ; READ CPMF CP "WP JP Z,W000 ; WRITE CPMT CP "BX JP Z,BA000 ; BASIC PROGRAMM ABSPEICHERNb CP "If JP Z,SI000 ; INPUT <- FILEp CP "Ot JP Z,SO000 ; OUTPUT -> FI*nLEx CP "C JP Z,K000 ; KOPIEREN LD A,41H;;ERROR PUSH AF RST PRS DEFB "X-40H,ESC DEFM "EMDOS-Error " DEFB 0 POP AF" SCAL TBCD2& RST PRS0 DEFB NL,04B100J1 JP B1008;B; KOMMANDO NUR DATEINAMEFC100 DEC DEP CALL FN0H+m00T JR C,ERRORX LD A,3b LD DE,-1f CALL FILEEAp JR C,ERRORt LD A,7x CALL FILEEA OR A JR Z,B100J1 DEC A RET Z DEC A JR NZ,C110 POP HL PUSH BC LD A,1 JP PHEAS"C110 DEC A& JR NZ,C1300 LD HL,B1004 PUSH HL8 P,lUSH BC ; LADEFUNKTION 2B LD A,1F JP PHEASPC130 SCAL "U ; LADEFUNKTION 4 (SUBMIT)T LD HL,SINX LD (0C7BH),HL ; AKTIVIERE EINGBERST ROUTINEb LD (SINP),BCf JR B100J1p;t; SUBMIT - INPUT-RST ROUTINExSIN LD HL,(SINP) INC HL LD (SINP),HLz-k DEC HL LD A,(HL) OR A SCF RET NZ SCAL 78H ; =NNIM OR A RET"SINP DEFW 0&;0; DIREKTORY ANZEIGEN4DI000 LD A,(DE)8 INC DEB CP "F JR Z,DI000P OR AT JR Z,DI100X SUB "AbDI100 LD C,Af LD A,"p RST ROUTt LD A,5x E.jCALL LEAS##DI200 LD A,6 CALL LEAS JR C,DI900 SCAL IN LD A,0 JR C,DI900 ; ABBRUCH DURCH TASTENDRUCK LD HL,MBUF DI210 PUSH HL LD A,(HL) OR A" JR NZ,DI400 ; GELOESCHTES FILE& EX DE,HL0 LD HL,154 ADD HL,DE8 BIT 7,(HL)B /i JR NZ,DI400F EX DE,HLP INC HLT LD B,8X DI220 LD A,(HL)b CP "f JR NZ,DI230p LD A,05FHt DI230 RST ROUTx INC HL DJNZ DI220 LD A,". RST ROUT LD B,3 DI240 LD A,(HL) OR A JR NZ,DI250DI250 RST ROUT INC HL DJNZ DI240"G0h RST PRS& DEFM " : "0 DEFB 04DI400 POP HL8 LD DE,32B ADD HL,DEF INC LP DEC LT JR NZ,DI210X JR DI200b;fDI900 OR Ap JP NZ,ERRORt RST PRSx DEFB BS,BS,03BH,NL,0 JP B100;;; I - ANWEISUNGSI000 CALL FN000 JP C,SERR1g LD A,8 CALL FILEEA LD HL,SI300 LD (UIN+1),HL" RET ; SYSTEM EXIT&; USER INPUT RST ROUTINE0SI300 LD (SPS),SP4 LD SP,STACK8 LD A,9B CALL FILEEAF JR C,SI310P CP "Z-40HT SCFX JR NZ,SI350bSI310 LD HL,URETf LD (UIN+1),HLp OR 2fAtSI350 LD SP,(SPS)x RET;; O - ANWEISUNGSO000 CALL FN000 JP C,SERR LD A,10 CALL FILEEA JP C,LERR LD A,0CDH LD (SOSW),A LD HL,SO300" LD (UOUT+1),HL& RET ; SYSTEM EXIT0; USER - OUTPUT RST ROUTINE4SO300 LD (SPS),SPs3e8 LD SP,STACKB PUSH AFF LD L,AP LD A,11T CALL FILEEAX CALL C,SO400b POP AFf JR SI350p;t;x; CLOSE (BEI FEHLER ODER EMDOSAUFRUF)SO400 LD HL,FN LD A,12 CALL FILEEA LD HL,URET LD (UOUT+1),HL LD A,21H LD (SOSW),A R4dET;SPS DEFW 0" DEFS 50&STACK DEFS 20;4;8; FORMATSTEUERANWEISUNGBF000 CALL FN000F JR C,LERRP SCAL RLINT LD A,45HX JR C,LERRb LD A,(FN)f SUB "Ap LD C,At LD HL,(ARG1)x LD A,5 CALL PHEAS JP C,ERRORB100J2 JP B100;5c;; FILE LADENL000 CALL FN000LERR JP C,ERROR SCAL RLINLERR1 LD A,42H" JR C,LERR& LD DE,-10 LD A,(ARGN)4 CP 28 CCFB JR C,LERR1F OR AP JR Z,L020T LD DE,(ARG1)XL020 LD HL,FNb LD A,3f CALL FILEEA ; S##p JR C,LERRt Lx6bD A,7x CALL FILEEA PUSH BC SCAL TX1 POP HL SCAL TBCD3L100 JR B100J2;S000 CALL FN000 JR C,LERR LD HL,0 LD (ARG3),HL" LD (ARG4),HL& SCAL RLIN0SERR1 LD A,43H4 RET C8 LD A,(ARGN)B CP 2F JR C,S060P;T; MEHR ALS 17a PARAM.X LD HL,(ARG1)b EX DE,HLf LD HL,(ARG2)p; HIER EINSPRUNG VON BA000 (BASIC SAVE)tS040 SBC HL,DEx EX DE,HL LD A,5 CALL FILEEA EX DE,HL LD HL,(ARG3) LD A,(ARG4) LD C,A LD A,6 CALL FILEEA LD A,(ARGN) CP 5" JR N8`Z,S050& LD DE,(ARG5)0S050 JR S1004S060 OR A8 JR NZ,SERR1B LD A,7F CALL FILEEAP LD A,DT OR EX JR Z,SERR1b EX DE,HLf; DE LadeadressepS100 LD HL,FNt LD A,4x CALL FILEEA LD HL,0 LD (ARG4),HL ; FUER TABULATESERR JP C,ERROR9_ JR L100;; BASIC PROGRAMM ABSPEICHERNBA000 CALL FN000 JR C,SERR ; FILENAMEN HOHLEN LD DE,10D6H LD HL,(10D6H)" LD A,1& LD (ARGN),A0 LD (ARG4),A4 JR S0408;B;FR000 LD A,1P JR R100TW000 LD A,2X;bR100 LD (R250+1),Af CA:^LL FN000p JR C,SERRt SCAL RLINxRERR1 LD A,44H JR C,SERR LD A,(ARGN) CP 2 JR NZ,RERR1 LD DE,(ARG1) LD BC,(ARG2)R250 LD A,1 LD HL,FN CALL FILEEARERR JR SERR";&;0; DATEIEN KOPIEREN4K000 LD A,(DE)8 INC DEB CP "F;] JR Z,K000 ; LEERZEICHEN UEBERLESENP LD (KDEDRV),A ; DESTINATION DRIVETK010 LD A,(DE)X INC DEb CP "f JR Z,K010 ; LEERZEICHENp LD (KSODRV),A ; SOURCE DRIVEt;x; KOPIERSCHLEIFEK100 LD A,(DE) INC DE CP " JR Z,K100<\ OR A JR Z,K100 CP "* JR Z,K100 CP ": JR Z,K100" CP 03BH& JR Z,K4000 INC A4 JR Z,K400 ; ALLES KOPIERT8;B DEC DEF; DE ZEIGT NUN AUF EINEN DATEINAMENP DEC DET LD A,"*X LD (DE),Ab INC DE ; ALS KOPIERKENNZEICHENf LD (=[CURSOR),DEp CALL FN000 ; DATEINAMEN UEBERNEHMENt PUSH DEx; LD HL,FNDRV LD A,(KSODRV) LD (HL),A ; LAUFWERK LD DE,1000H LD BC,8000H LD A,1 CALL FILEEA JR C,KERRP ; DATEI EINL. ; LD A,(FCBHLE)" RRCA& LD B,A0 RES 7,B4 E>Z AND 80H8 LD C,A ; LAENGE ->BCB LD HL,FNDRVF LD A,(KDEDRV)P LD (HL),AT LD DE,1000HX LD A,2b CALL FILEEAf JR C,KERRP ; SCHREIBENp ;t POP DEx JR K100 ; K400 OR A JR RERR KERRP POP DE JR RERR!;!;!;!; ERASE FILE?Y!E000 CALL FN000"! LD A,11&! CALL LEAS0! JR RERR4!;8!KSODRV DEFB 0B!KDEDRV DEFB 0F!;P!FN000 DEFS 0 ; FILENAMEN SPEICHERNT!FN010 LD A,(DE)X! INC DEb! CP "f! JR Z,FN010p! LD HL,FNt! LD B,14x!FN020 CP "_! JR Z,FN025! LD (HL),A! INC HL!{@XFN025 LD A,(DE)! INC DE" CP "" JR Z,FN030" DJNZ FN020"FN030 LD (HL),"" LD HL,FN"" RET&";0"FNDRV DEFM "A:"4"FN DEFS 158";B";F";P";*****************************************T";** SCHNITTSTELLE FUER EMDOS-AUFRUFE **X";** VON BENUAWTZERPROGRAMMEN **b";*****************************************f";p"; AUFRUFNUMMER IN At"; 0.....1FH BENANW-AUFRUFE (s.u)x"; 20H...3FH PHEAS-AUFRUFE+20H"; 40H...5FH LEAS-AUFRUFE+40H"; 60H...80H FILEEAS-AUFRUFE+60H";"MCABVLL SUB 60H" JP NC,FILEEA ; S### ADD A,20H# JP C,LEAS### ADD A,20H# JP C,PHEAS### ADD A,20H"# CCF&# RET C ; FALSCHE NUMMER0#;4#; NUMMER DES BENANW-CALLS IN A8# OR AB# JP Z,BENANWF# DEC AP# JR Z,BENINFT# SCFX# RETb#;f#;p#BENINF LD HLCU,MBUFt# LD DE,BAMx# RET#;#;#;#;*****************************************#;** DIREKTZUGRIFF VON NASSYS **$;*****************************************$;$;$; NASSYS BEFEHL$; E x106 A HL DE -> PHEAS"$;&$NASPHE LD A,(ARG2)JDT0$ LD HL,(ARG3)4$ LD DE,(ARG4)8$ CALL PHEASB$ SCAL MRETF$;P$;T$;*****************************************X$;** BASIC EINSPRUNGPUNKT **b$;*****************************************f$; DIE ADRESSE x109 MUSS NACH 1055Hp$; ES (BASIC SET BEFEHL)t$BASIC LD A,(HL)x$ CP ":$ JP NZ,0FF40H ; NORMALER SET$ PUSH HL$ PUSH DE$ PUSH BC$ CALL BENANW% POP BC% POP DE% POP HL% RET%;"%;END BENANW&%;0%;4%;8%;B%; L E A S - LOGISCHEN EIN- AUSGABESYSTEMF%;P%;T%; (JFRC) 1983 BY HELMUT EMMELMANNX%;b%;f%; LEAS - AUFRUFEp%; 0 INIT LEASt%; 1 OPR FILE ZUM LESEN EROEFFNENx%; 2 RDN HL. SEKTOR DES FILES LESEN%; 3 REWR HL. SEKTOR DES FILES ZURUECKSCH.%; 4 FCBA FCB ADRESSE AUF HL SETZEN%; 5 DII DIR. LESEFOLGGQE AUF ANFANG%; 6 DIN NAECHSTEN DIRECTORY SEKTOR LESEN%; 7 DIR DIRECTORY SEKTOR ZURUECKSCHREIBEN&; 8 OPW FILE ZUM SCHREIBEN EROEFFNEN&; 9 CLW SCHREIB-FILE ABSCHLIESSEN&; 10 WRN NAECHSTEN SEKTOR SCHREIBEN&; 11 ERA FILE LOESCHEN&;"&HP;.Z80&&LEAS OR A0& RET Z4& DEC A8& JR Z,OPRB& DEC AF& JR Z,RDNP& DEC AT& JR Z,REWRX& DEC Ab& JR Z,FCBAf& DEC Ap& JR Z,DIIt& DEC Ax& JR Z,DIN& DEC A& JR Z,DIR & DEC A& JP Z,OPW& DEC A' JP Z,CLW' DEC A' JP Z,WRN ' DEC A' JP IOZ,ERA"';&'DII LD A,C0' LD (DIDRV),A4' LD A,28' CALL PHEASB' RET CF' LD A,(HL)P' DEC AT' LD (DICUS),AX' INC Ab' INC HLf' ADD A,(HL)p' LD (DILS),At' RETx';'DIN LD HL,DICUS' INC (HL)' LD A,(DILS)' CP (HL)' JR Z,DIN8( LD L,(HL)( LDJN H,0( LD DE,MBUF( LD A,3( JP PHEAS"(DIN8 DEC (HL)&( XOR A0( SCF4( RET8(;B(DIR LD HL,DICUSF( LD L,(HL)P( LD H,0T( LD DE,MBUFX( LD A,4b( JP PHEASf(;p(DICUS DEFB 0t(DILS DEFB 0x(DIDRV DEFB 0(;(RDN PUSH DE( CALL RDNS( POP DE( RET^KM C) LD A,3) JP PHEAS##)REWR PUSH DE) CALL RDNS) POP DE") RET C&) LD A,40) JP PHEAS4)FCBA LD (FCB),HL8) RETB);F);P);T); HL FILENAMEX)OPR CALL FNLWb) RET Cf) LD HL,(FCB)p) LD (HL),Ct) INC HLx) INC HL) LD (HL),0) INC HL) LD (OPRLLH1),HL) LD (HL),255) LD B,320OPR5 INC HL0 LD (HL),00 DJNZ OPR5 0 CALL DII0OPR10 CALL DIN"0 JR C,OPR30&0 LD HL,MBUF00OPR15 CALL FNSEA40 OR A80 JR Z,OPR10 B0 DEC AF0 JR NZ,OPR40P0 LD DE,15T0 ADD HL,DEX0 LD DE,(FCB)b0 INC DEf0 INC DEMKp0 LD A,(DE)t0 ADD A,(HL)x0 LD (DE),A0 LD DE,(OPRH1)0 LD B,160 LD C,A0OPR20 INC HL0 LD A,(HL)1 LD (DE),A1 INC DE1 DJNZ OPR201 XOR A1 LD (DE),A"1 LD (OPRH1),DE&1 LD A,C01 CP 80H41 INC HL81 JR Z,OPR15 ; ZWEITE EXTENSION FOLGTB1 NJJR OPR35F1OPR30 OR AP1 SCFT1 RET NZ ; LESEFEHLERX1 LD HL,(OPRH1)b1 LD A,(HL)f1 OR Ap1 LD A,20Ht1 SCFx1 RET NZ1OPR35 OR A1 RET1OPR40 LD DE,321 ADD HL,DE1 JR OPR152;2OPRH1 DEFW 02;2;2;"2RDNS LD A,L&2 RRA02 RRA42 AND 1FH82 LDoOI B,LB2 LD HL,(FCB)F2 LD C,(HL)P2 ADD A,3T2 CALL DADAX2 LD L,(HL)b2 LD A,Lf2 LD H,0p2 ADD HL,HLt2 ADD HL,HLx2 OR A2 LD A,22H2 SCF2 RET Z ; FILEENDE2 LD A,B2 AND 33 CALL DADA3RDNS2 SET 7,H3 OR A3 RET3;"3;&3;03;43; FILE LOESgPHCHEN83ERA CALL FNLWB3 RET CF3 CALL DIIP3ERA10 CALL DINT3 JR C,ERA80X3 LD HL,MBUFb3ERA20 CALL FNSEAf3 DEC Ap3 JR NZ,ERA10t3 LD (HL),0E5Hx3 LD DE,163 ADD HL,DE3 PUSH HL3 CALL DIR3 POP HL3 RET C4 JR ERA204ERA80 OR A4 RET Z4 SCF4QG RET"4;&4;04;44; FILE ZUM SCHREIBEN EROEFFNEN HL FILEN84OPW CALL FNLWB4 RET CF4 LD HL,(FCB)P4 LD (HL),CT4 INC HLX4 INC HLb4 LD B,34f4OPW10 LD (HL),0p4 INC HLt4 DJNZ OPW10x4;4 CALL DII4 CALL BAMI4OPW20 CALL DIN4 JR C,OPW1004 LD HL,M+RFBUF5OPW30 CALL FNSEA5 CP 15 JR NZ,OPW505; FILE GEFUNDEN -> BAK FILE5 PUSH HL"5 LD DE,9&5 ADD HL,DE05 LD (HL),"B45 INC HL85 LD (HL),"AB5 INC HLF5 LD (HL),"KP5 LD DE,4T5 ADD HL,DEX5 LD A,(HL)b5 CP 80Hf5 JR Z,OPW60p5 INC HLt5 LD SEA,(HL)x5 LD (FSEK),A 5 JR OPW605OPW50 CP 25 JR NZ,OPW705; BAK-FILE GEFUNDEN - LOESCHEN5 PUSH HL6 LD (HL),0E5H6OPW60 CALL DIR6 POP HL6 RET C6 LD DE,32"6 ADD HL,DE&6 JR OPW3006OPW70 CALL BAMR46 JR OPW2086;B6OPW100 OR AF6 SCFP6TD RET NZT6 OR AX6 RETb6;f6;p6;t6; NAECHSTEN SEKTOR EINES FILES SCHREIBENx6; DE ADRESSE6WRN PUSH DE6 LD HL,(FCB)6 LD C,(HL)6 INC HL6 INC HL7 LD B,(HL)7 INC (HL)7 INC (HL)7 LD A,B ; LAENGE7;"7;********* 6-FEB-84&7 CP 25407 JR CUC,WRN05047 POP DE87 LD A,24HB7 SCFF7 RET ; ZU LANGP7;T7WRN050 RRAX7 RRAb7 RRAf7 AND 01FHp7 CALL DADAt7 INC HLx7 LD A,(HL)7 OR A7 JR Z,WRN1007 LD L,A7 LD H,07 ADD HL,HL8 ADD HL,HL8 LD A,B8 RRA8 AND 38 CALL DADA"8 POP DE&8 zVBJR WRN20008WRN100 LD A,B48 OR A88 JR Z,WRN110B8 DEC HLF8 LD A,(HL)P8 INC HLT8WRN110 PUSH HLX8 CALL BAMGb8 POP HLf8 POP DEp8 RET Ct8 LD (HL),Ax8 LD L,A8 LD H,08 ADD HL,HL8 ADD HL,HL8;8; HL SEKTORNUMMER DE ADRESSE9WRN200 SET 7,H9 sWALD A,49 JP PHEAS9;9; SCHREIBFILE ABSCHLIESSEN"9; HL FILENAME&9CLW CALL FNLW09 CALL DII49 LD A,0B7H89 LD (CLWEXT),A ; EXT. SCHALTER RUECKSETZENB9CLW20 CALL DINF9 JR C,CLW100P9 LD HL,MBUFT9CLW30 LD A,(HL)X9 CP 0E5Hb9 JR Z,CLW150f9 LD DE,32X@p9 ADD HL,DEt9CLW40 BIT 0,Hx9 JR Z,CLW309 JR CLW209;9;9CLW100 OR A9 SCF@ LD A,24H@ RET NZ@ RET ; DIR. VOLL@;@CLW150 LD (HL),0"@ INC HL ; USER&@ EX DE,HL0@ LD HL,(FNADR)4@ LD B,88@CLW160 LD A,(HL)B@ CP "F@ JR Z,CLW180P@ CP ".TY?@ JR Z,CLW180X@ LD (DE),Ab@ INC HLf@ INC DEp@ DJNZ CLW160t@ JR CLW190x@CLW180 LD A,"@ LD (DE),A@ INC DE@ DJNZ CLW180@;@CLW190 LD A,(HL)A CP ".A JR Z,CLW195A LD HL,DEFEXT-1ACLW195 LD B,3A INC HL"ACLW200 LD A,(HL)&A LD (DE),A0A I|Z>NC HL4A INC DE8A DJNZ CLW200BA EX DE,HLFA;PACLWEXT OR ATA JR C,CLW300XA LD (HL),0 ; EXT-NUMMERbA INC HLfA LD (HL),0 ; S1pA INC HLtA LD (HL),0 ; S2xA INC HLA LD DE,(FCB)A INC DEA INC DEA LD A,(DE)A BIT 7,AB JR Z,CLW220B LD A,80H <[= ; LAENGE =80H BEI FILE MITBCLW220 LD (HL),A ;EXTENSIONB INC HLB INC DE ; LAENGE"B LD BC,16&B EX DE,HL0B LDIR ; GROUP-ZEIGER UEBERTRAGEN4B OR A8B PUSH AFBB CALL DIRFB POP AFPB RET PTB; WENN KEINE EXTENSION RETXB;bB; BEIM NAECHSTEN MAL \ HL Startadresse C LadefunktionBR; 4 Save NAS-FileFR; HL Fname, FileheaderPR; 5 Setzen Fileheader 1TR; Hi/L Ladeadresse DE LaengeXR; 6 Setzen Fileheader 2bR; HL Startadresse C LadefunktionfR; 7 Fileheader bereitstellenpR; HL Ladeadresse DE LaengetR; BC Startadresse A LadefunktionxR; 8 Sequentielles Lesefile eroeffnenR; HL FilenameR; 9 Bj.yte lesenR; -> A bzw. FehlermeldungR; 10 Sequentielles Schreibfile eroeffnenR; HL FilenameS; 11 Byte schreiben (L)S; 12 Schreibfile abschliessenS; HL: FilenameS;S;"S;&S;0S;.Z804S;8S;ORG #A94EBSFILEEA DEC AFS JP Z,RF000PS DEC 2k-ATS JP Z,WF000XS DEC AbS JP Z,LN000fS DEC ApS JP Z,SN000tS DEC AxS JR Z,SFH1S DEC AS JR Z,SFH2S DEC AS JR Z,GFH S DEC AT JP Z,SLO000T DEC AT JP Z,SL000T DEC AT JP Z,SWO000"T DEC A&T JP Z,SW0000T DEC A4T JP Z,SWC0008T SCFBTl, RETFT;PT;TTSFH1 LD (FHLADR),HLXT LD (FHLEN),DEbT RETfTSFH2 LD (FHSADR),HLpT LD A,CtT LD (FHSFUN),AxT RETTGFH LD HL,(FHLADR)T LD DE,(FHLEN)T LD BC,(FHSADR)T LD A,(FHSFUN)T RETU;U;U;U; FILE LESENURF000 LD A,1"U CALL LEASP&U REm+T C0U LD HL,04U CALL RF1008U RET NCBU CP 22HFU SCFPU RET NZTU OR AXU RET ; FEHLER 22 - FILEENDE IGNORIERENbU;fURF100 LD A,BpU OR AtU RET ZxU LD A,2U CALL LEASPU RET CU INC HLU DEC BU INC DV JR RF100V;V;V;V; FILE SCHREIBEN"/n*VWF000 LD A,8&V CALL LEASP0V RET C4V LD (WFH1),HL ; FILENAMEN ADRESSE8V CALL WF100BV RET CFV BIT 7,CPV JR Z,WF050TV LD A,10XV CALL LEASPbV RET CfV LD HL,(FCB##)pV INC HLtV INC HLxV DEC (HL)VWF050 LD HL,(WFH1)V LD A,9 V JP LEASV;VWFo)H1 DEFW 0W;WWF100 LD A,BW OR AW RET ZW LD A,10"W CALL LEASP&W RET C0W INC D4W DEC B8W JR WF100BW;FWLEASP PUSH HLPW PUSH DETW PUSH BCXW CALL LEAS##bW POP BCfW POP DEpW POP HLtW RETxW;W;WLN000 LD A,1W CALL LEASPW RET CW LD 4p((LNH1),DEX LD DE,MBUF##X LD HL,0X LD A,2X CALL LEASX RET C"X LD HL,MBUF&X LD A,11H0X LD B,44XLN020 CP (HL)8X JR Z,LN030BX LD A,40HFX SCFPX RETTXLN030 ADD A,AXX INC HLbX DJNZ LN020fX LD DE,FHpX LD BC,FHLtX LDIRxX LD HL,(LNH1)X INCq' HX JR NZ,LN050X INC LX JR NZ,LN040X LD HL,(FHLADR)Y JR LN060YLN040 INC LY JR Z,LN200 ; DE=FFFE : NUR HEADER LESENYLN050 LD HL,(LNH1)Y; RICHTIGE LADEADRESSE IN HL"YLN060 PUSH HL&Y LD HL,(FHLEN)0Y LD DE,-256+164Y OR A8Y ADC HL,DEBY r&JR Z,LN070FY JR C,LN100PYLN070 LD BC,(FHLEN)TY LD A,BXY OR CbY JR Z,LN200fY LD HL,MBUF+16pY POP DEtY LDIRxY OR AY RETY;YLN100 POP DEY PUSH HLY LD HL,MBUF+16` LD BC,256-16` LDIR` POP BC ; RESTLICHE LAENGE` LD HL,1` CALL RF100"`s% RET C&` LD A,C0` OR A4` RET Z8` PUSH DEB` LD DE,MBUFF` LD A,2P` CALL LEASPT` POP DEX` RET Cb` LD HL,MBUFf` LDIRp`LN200 OR At` RETx`;`LNH1 DEFW 0`;`;`SN000 LD A,8` CALL LEASPa RET Ca LD (WFH1),HLa LD HL,MBUFa LD A,11Ha LD /t$B,4"aSN020 LD (HL),A&a INC HL0a ADD A,A4a DJNZ SN0208a PUSH DEBa EX DE,HLFa LD HL,FHPa LD BC,FHLTa LDIRXa POP HLba LD DE,MBUF+16fa LD BC,256-16pa LDIRta LD DE,MBUFxa LD A,10a CALL LEASPa RET Ca PUSH HLa LD HL,(FHLEN)a LD DE,-256+16u#b ADD HL,DEb DEC HLb INC Hb LD B,Hb POP DE"b CALL WF100&b RET C0b JP WF0504b;8b;Bb; SEQUENTIELLES LESEFILE EROEFFNENFbSLO000 LD A,1Pb CALL LEASTb LD HL,0FF00HXb LD (SLOP),HLbb RETfb;pb; BYTE LESENtbSL000 PUSH HLxb LD HL,SLOPb LD v"A,(HL)b OR Ab JR NZ,SL150b PUSH BCb PUSH DEc LD DE,MBUFc INC HLc INC (HL)c LD L,(HL)c LD H,0"c LD A,2&c CALL LEAS0c JR C,SL1604c POP DE8c POP BCBcSL150 LD HL,SLOPFc LD A,(HL)Pc INC (HL)Tc LD HL,MBUFXc LD L,Abc LD A,(HL)fc Ojw!R ApcSL160 POP HLtc RETxc;cSLOP DEFB 0cSLOSEK DEFB 0c;c; SCHREIBFILE EROEFFNENcSWO000 LD A,8d CALL LEASd RET Cd XOR Ad LD (SWOP),Ad RET"d;&d; BYTE SCHREIBEN0dSW000 EX DE,HL4d PUSH HL8d LD HL,SWOPBd LD A,(HL)Fd INC (HL)Pd LD H x L,MBUFTd LD L,AXd LD (HL),Ebd CP 255fd CCFpd JR NZ,SW210td PUSH BCxd LD DE,MBUFd LD A,10d CALL LEASd POP BCdSW210 POP DEd RETe;eSWOP DEFB 0e;e;e;"e; SCHREIBFILE ABSCHLIESSEN&eSWC000 PUSH HL0e LD L,"Z-40H4e CALL SW0008e PUSH yBCBe LD B,0FeSWC020 LD L,0Pe CALL SW000Te DJNZ SWC020Xe POP BCbe POP HLfe LD A,9pe JP LEASte;xe;eFH DEFS 0 ; FILEHEADER ZWISCHENSPEICHEReFHLADR DEFW 0eFHLEN DEFW 0eFHSADR DEFW 0eFHSFUN DEFB 0fFHL EQU 8fFHLSP DEFS 1 ;Platz f}r LDIR zin LN030****f;f;END FILEEASf;"f;-----------------------------------------&f;PHEAS-ANPASSUNG VER. 2.5 80-bus 4/5/6/840f;GUENTER BOEHM KARLSRUHE4f;nach 80-Bus Journal 10/838f;-----------------------------------------Bf;ORG #AB48 !;Anpass. an "N{SYS"FfPHEAS CALL IINIT ;**** I-Register !Pf OR ATf JP Z PINIT ;KARTE INITIIERENXf DEC Abf JP Z TSTHOM ;LAUFWERKTESTff DEC Apf JR Z, PSEL ;LAUFWERK SELEKTIERENtf DEC Axf JP Z PREAD ;SEKTOR LESENf DEC Af JP Z PWRITE;SEKTOR SCHREIBENf SCFf Rc|ETf;----------------------------------------gINTVEK DEFW FLPINT ;INTERRUPT TABELLEg;----------------------------------------gPSEL CALL TRKMEM ;TRACK SPEICHERNg LD A,Cg CP 3 ;max. Laufwerkszahl ****"g JR NC,FALWNR; **5}**&g LD (LWNR),A ;NEUES LAUFWERK0g OR A4g JR Z PSELA8g CP 1Bg JR Z PSELBFg CP 2Pg JR Z PSELCTg CP 3Xg JR Z PSELDbgFALWNR LD A,#17;****fg SCFpg RETtg;xgPSELA LD A ,#21 ; LAUFW. A DDg OUT (10H),Ag LD HL,DSBAg LD A,16 ;Sekt.g LD (SEKT),~Ag LD A,64h LD (SYS),Ah LD A,(TRACKA) ;GESPEICHERTE TRACKNRh OUT (FDCTRK),A;AKTUALISIERENh RETh;"h;&hPSELB LD A,#22 ; LAUFWERK B DD0h OUT (10H),A4h LD HL,DSBA ;gleiches Format wie Lw A8h LD A,16 ;Sekt.Bh LD (SEKT),AFh LD A,64Ph LD (SYS),ATh LD A,(TRACKB)Xh OUT (FDCTRK),Abh RETfh;phPSELC LD A,#31 ;Laufwerk A SDth OUT (#10),Axh LD HL,DSBBh LD A,10 ;Sekt.h LD (SEKT),Ah LD A,40h LD (SYS),Ah LD A,(TRACKC)i OUT (FDCTRK),Ai RETi;iPSELD LD A,#32 ;Laufwerk B SDi OUT (#10),A"i LD HL,DSBB&i LD A,10 ;Sekt.0i LD (SEKT),A4i LD A,408i LD (SYS),ABi LD A,(TRACKD)Fi OUT (FDCTRK),APi RETTi;XiDSBA DEFB 64;4 X SEKTORANZAHL (res.System)bi DEFB 8 ;8 Sekt. DIRECTORYfi DEFB 143 ;max.Gruppenanzahl-1pi;tiDSBB DEFB 40,8,87 ;NEUES FORMAT mc !xiSEKT DEFW 0 ;SEKTOREN PRO SPURiSYS DEFW 0 ;SEKT. FUER SYSTEMiTRACKA DEFB 0iTRACKB DEFB 0iTRACKC DEFB 0iTRACKD DEFB 0pLWNR DEFB 0p;pTSTHOM CALL HOME ;WARUM IST LAUFWERKp CALL CTDEL ;NICHT BEREIT?p CALL TRKMEM ;#TRACK0 AKTUALISIEREN"p IN A,(FDCSTA)&p BIT 2,A0p JR NZ NODISK4p LD A,#1F ;KEIN LAUFWERK8p JR TSTERRBpNODISK BIT 1,AFp JR Z NOTRDYPp LD A,#10 ;KEINE DISKETTETp JR TSTERRXpNOTRDY BIT 7,Abp RET Zfp LD A, #1AppTSTERR SCFtp RETxp;----------------P-------------------------pTRKMEM PUSH HL ;ROUTINE ZUM ABSPEICHERNp PUSH BC ;DES AKTUELLEN TRACKSp LD A,(LWNR)p LD B,Ap INC Bq LD HL,TRACKA-1qLOOP INC HLq DJNZ LOOP ;AKT. LAUFWERKq IN A,(FDCTRK)q LD (HL),A"q POP BC&q POP HL0q )RET4q;8q;-----------------------------------------BqPREAD PUSH BCFq PUSH HLPq CALL PSEEKTq PUSH DEXq POP HL ;BUFFERbq LD BC,#0502 ;2 X 5 RETRIESfqRRETRY CALL READpq OR Atq JR Z OKREADxq DJNZ RRETRYq DEC Cq JR Z OKREADq CALL HOMEq POP HL ;SEKTORNUMMERq PUSH HLr CALL PSEEKr PUSH DEr POP HL ;BUFFERr LD B,5 ;NOCH 5 RETRIESr JR RRETRY"rOKREAD POP HL&r POP BC0r OR A4r JR NZ RDERR8r RETBr;-----------------------------------------FrCTDEL PUSH AFPr PUSH BCTr LD B,4 ;1 sec Verz. bei 4 MHzXrDELAY4 LD C,250br CALL DELAYfr DJNZ DELAY4pr POP BCtr POP AFxr RETr;r;-----------------------------------------rRDERR LD A,11H;Lesefehlerr SCFr RETs;-----------------------------------------sPSEEK IN A,(FDCSTA)s BIT 7,A K;READY?s CALL NZ TSTHOMs JR NC PSE050"s POP HL ;RETURN ADDRESS&s POP HL ; "0s POP HL ; "4s RET8sPSE050 PUSH BCBs BIT 7,HFs JR Z PSE100 ;phys.=log. SektornummerPs RES 7,H ;Bit 7 r}cksetzenTs LD BC,(SYS) ;reserviert fuer SystemXs ADD HL,BC ;phys.=relat.+Anzahl Syst.Sekt.bsPSE100 PUSH DEfs LD DE,(SEKT);Sekt.pro Spurps LD A,0FFHts OR A ;Reset CarryxsPSE200 LD B,L ;Rests SBC HL,DE ;DIVISIONs INC A ;Ergebnis=Spurs JR NC PSE200s POP DEs CALL SEEKt LD A,Bt INC A ;Sekt.0-9=Sekt.1-10t POP BCt JP SETSEKt;-----------------------------------------"tPWRITE PUSH BC&t PUSH HL0t CALL PSEEK4t PUSH DE8t POP HL ;BUFFERBt LD B,10FtWRETRY CALL WRITEPt OR ATt JR Z OKWRITXt DJNZ WRETRYbtOKWRIT POP HLft POP BCpt OR Att JR NZ WTERRxt RETt;tWTERR BIT 6,A ;WRITE PROTECT?t LD A,#15t JR NZ WTERR1t LD A,#16uWTERR1 SCFu RETu;-----------------------------------------u;FDC CONTR. VER 1.7 19.11.83u;G.B|hm/H.Emmelmann"u;nach Routinen von Oberle/Zippel&uFDCCMD EQU 0 CH0uFDCTRK EQU 0DH4uFDCSEK EQU 0EH8uFDCDAT EQU 0FHBuFDCSTA EQU 0CHFu;PuPIOAD EQU 10HTuPIOAC EQU 11HXuPIOBD EQU 12HbuPIOBC EQU 13Hfu;puFHOME EQU 03 ;SPEED STEPPER MOTORtuFSEEK EQU 1BH;SPUR SUCHENxuFSEEKV EQU 1FH;SUCHEN MIT VERIFYuFREAD EQU 8C H ;SEKTOR LESENuFWRITE EQU 0ACH;SEKTOR SCHREIBENuFINT0 EQU 0D0H ;FDC R]CKSETZENuFWRTRK EQU 0F4H;GANZE SPUR SCHREIBENuFRDTRK EQU 0E4H;GANZE SPUR LESENv;-----------------------------------------v;vINIT DI ;PIOs u. FDC initiierenv LD A,0CFHv2 OUT (PIOAC),A ;CONTROLMODE"v LD A,0C0H&v OUT (PIOAC),A ;I/O Maske0v;4v LD A,0CFH8v OUT (PIOBC),A ;CONTROLMODEBv LD A,0F0HFv OUT (PIOBC),A ;I/O MaskePv;Tv LD A,0B7H ;INTERRUPT CONTROL MODEXv OUT (PIOAC),Abv LD A,7FHfv OUT (PIOAC),A ;MASKE:BIT7 macht Interr.pv;tv LD A,8 ;FDC R]CKSETZENxv OUT (PIOAD),Av LD C,1v CALL DELAYv LD A,28Hv OUT (PIOAD),Av LD A,FINT0w OUT (FDCCMD),Aw EX (SP),HLw EX (SP),HLw IN A,(FDCSTA)w LD HL,INTVEK ;*****"w LD A,H ;INTERR.VECTOR MSBs ;*&w LD I,A ;*0w LD A,L;LSB ;*****4w OUT (PIOAC),A8w LD A,21H ;LAUFWERKNUMMER HIER ABw OUT (PIOAD),AFw EIPw IM 2;INTERRUPT MODETw RETXw;-----------------------------------------bwHOME LD A,FHOMEfw OUT (FDCCMD),\Apw EItwHOMEW JR HOMEWxw IN A,(FDCSTA)w RETw;-----------------------------------------w; SEEK PARAMETER IN AwSEEK OUT (FDCDAT),A ;TRACK NUMBERw LD A,FSEEKx EIx OUT (FDCCMD),AxSEEKW JR SEEKWx IN A,(FDCSTA)x RET"x;------------------;----------------------&xSETSEK OUT (FDCSEK),A ;SEKTORNUMMER0x RET4x;-----------------------------------------8xREAD PUSH BCBx PUSH DEFx PUSH HLPx CALL SAV66Tx LD HL,NMIRXx CALL RE66HLbx POP HLfx LD C,FDCDATpx LD A,FREADtx PUSH HLxx EIx OUT (FDCCMD),AxREADW JR READWx IN A,(FDCSTA)x CALL RE66x POP HLy POP DEy POP BCy RETy;-----------------------------------------yWRITE PUSH BC"y PUSH DE&y PUSH HL0y CALL SAV664y LD HL,NMIW8y CALL RE66HLBy POP HLFy LD C,FDCDATPy LD A,FWZRITETy EIXy PUSH HLby OUT (FDCCMD),AfyWRITEW JR WRITEWpy IN A,(FDCSTA)ty CALL RE66xy POP HLy POP DEy POP BCy RETy;-----------------------------------------ySAV66 LD HL,66H ;RAMBEREICH 66H RETTEN LD DE,SAVE LD BC,4 LDIR RET; "RE66 LD HL,SAVE ;UND WIEDER HERSTELLEN&RE66HL LD DE,66H0 LD BC,44 LDIR8 RETB;-----------------------------------------FSAVE DEFS 4P;-----------------------------------------TNMIR INIX RETNbNMIW OUTIf RETNp;-----------------------------------------tDELAY PUSH HLx PUSH DE PUSH BCDELAY1 LD B,100DELAY2 RLA ADD HL,HL ADD HL,HL DEC B JP NZ,DELAY2 DEC C JP NZ,DELAY1 POP BC" POP DE& POP HL0 RET4;-----------------------------------------8; INTERRU!PTROUTINE AUSGELOEST VOM FDCB;FFLPINT PUSH AFP PUSH BCT PUSH HLX LD HL,6b ADD HL,SPf LD C,(HL)p INC HLt LD B,(HL)x LD A,(BC) CP 18H JR NZ,NOLOOP INC BC LD A,(BC) CP 0FEH JR NZ,NOLOOP INC BC LD (HL),B DEC HL2 LD (HL),C"NOLOOP POP HL& POP BC0 POP AF4 RETI8 EIB;-----------------------------------------FPINIT CALL INITP CALL TSTHOMT RETX;-----------------------------------------b;fIINIT PUSH HL ;****p PUSH AF ;*t DI ;falls andere Software,x LD HL,INTVEK ;die EMDOS aufruft, LD A,H ;Interupts benutzt LD I,A ;(z.B. CASMON ...) IM 2 EI POP AF POP HL ;* RET ;****;;DRVA## DEFS 0";&;END EMDOS0;  b