#X;save#d:MDUP1.M65 MYDOS module9X; Copyright 1984, Charles Marslett, Wordmark SystemsX;(IX; Permission is granted by the author for any use whatsoever of this2HX; code, so long as this notice remains in the source code, and so<LX; long as the source to this routine, however modified or unmodified,F.X; is made available for a nominal cost.PX;ZX; DEFINED VALUESdX;n CRx EOFX; OPEN GETREC GETCHR PUTCHR CLOSE RENAME DELETE! LOCK# UNLOCK$ FORMATX;X; ROM AND RAM ADDRESSESX;CARTSTX;" AUDF1,AUDCTL6 SKRES @ SERIN JSEROUT T IRQEN^ SKCTLh PBCTLrX;|FASCII؆ IFPِEDITRV DSKIOS CIOVV SIOVYSETVBV\CIOINVnX; WARMST DOSVEC  DOSINI  POKMSK BRKKEY RAMLOX; DUNITZ!& DCMDZ"0 DBUFZ$: DLENZ(D DAUX1Z*N DAUX2Z+X DAUX3Z,bX;l LMARGNRv RMARGNSX; FR0Ԕ VECTORԞ HDBUF֨ BUFADڲ BUFLENܼ FNPTR TEMP TEMP2X; INBUFFX;VSERIN VIMIRQ CDTMV3CDTMF3* SHFLOK* RUNAD4INITAD>MEMTOPH MEMLOR$DVSTAT;;SYSTEM STATUS BUFFER\X;fDDEVICp DUNITz DCMD DSTAT DBUFDTIMEO DLEN DAUX HATABSX; IOCB@ ICDNOA ICMDB ISTATC IBUFD ILENH IAUXJX;X; FMS ENTRY POINTS$X;. FILES 8(RAMDKU ;;LOC OF RAM DISK DRIVE NOBDFUNIT L BSIORiV WRCMDy`DKTYPEjDRVDEFtFMINIT~ HDTAB  STATEMDINITWOTDCB% 1CONFIGR/ ;;CONFIGURE DRIVE SUBROUTINE ENTRYMAPBUF X; X;OTHERS IN THE MDUP.M65 FILEX;X; ! RESEND;;START OF FREE MEMORYX;^;;patch into dos here !INIT;;DUP INIT ENTRY POINTX;X; PROGRAM AREA(X;2 ORIGIN<X;F X; INITIALIZE MYDOS INTERFACEPX;ZINITQ>DUPENTdPDOSVECnQ>DUPENTx PDOSVECX;Q> PFNAMEQ>  *STATE/HCKMDOS;;IF WARM START CHECK FOR DUP LOADEDX;X; COLD START CODEX;!PSTATE;;SET MODE TO WARMSTART$> SOPEN;;RUN AUTORUN.SYS FILE  ' AFN GCLOSX" CLOSX, !@RUNAD:6X;@X; CLOSE IOCBS 10 AND 20JX;TCLOSX CLOS20^CLOS10$>;;CLOSE IOCB 10h ,;;SKIP 2 BYTESrCLOS20$> ;;CLOSE IOCB 20|!CLOS2Q>CLOSE;;CLOSE ANY IOCBSCMDPICMD9 !CIOVX;DBUF10$>DEFBUFPIBUF9C PIBUF9 CKMDOS:X;AFN AD1:AUTORUN.SYSA=CX; Moved AUTORUN FN so SUPERARC will not think this is >=4.3 DOSX;X; OPEN FILEX;X; CALLING SEQUENCE:X; JSR SOPEN&X; DB AUX0X; DB CMD:X; DW BUFFER ADDRESSDX;N SOPEN;X ;;LDA #IMM OPCODEbX;l&X; DO A READ/WRITE TYPE I/O REQUESTvX;X; CALLING SEQUENCE:X; JSR DOIOX; DB IOCBNOX; DW BUFFER LENGTHX; DB CMDX; DW BUFFER ADDRESSX; DOIO,7 PRAMLO7 PRAMLO%> Q@RAMLO7  DDOIO1 PIAUX9  EXTRCB* DOIO1>43> Q@RAMLO7H PILEN9R3\ Q@RAMLO7f PILEN9p XTRCB3z Q@RAMLO7 PICMD93 Q@RAMLO7 PIBUF93 Q@RAMLO7 PIBUF9C, ORAMLO?Q> ORAMLO 5 C 5$ !CIOV;;DO I/O REQUEST. X;8 (X; IF NO DUP.SYS, INCREMENT DRIVE NO.B X;L RETRYOS#DUPSYSV QDUPSYS` M>j R> t DRTYOSV~ HGOTO1 RRAMDKU FRTYOSV GOTO1Q> 1 PDUPSYS RTYOSV> QDKTYPE 19 FRETRYOS HNOWMS X; X; LOAD PROGRAM FUNCTION X; LDFILE LDMEM $> % TOVECT;;LOAD PROGRAM OR GO TO IT  ,;;skip the LDY #1 X;( *X;*************************************2 X;< (X; STANDARD EXIT POINT FOR PROGRAMSF X;P *X;*************************************Z X;d !X; RESTORE DOS/DUP INIT VECTORn X;x DUPENT%> SAVERR'CBSAV *STATE KGODOS INOWMS CLOS10 SOPEN  ;;WRITE MEM.SAV FILE OPEN NMSAV GNOWMS DOIO   MSLEN PUTCHR MSBASE NOWMS CLOS10" # SOPEN;;GET DUP.SYS INTO MEMORY,  6  '@ DUPSYSJ GRETRYOST QDOSINI^ PINISAVh QDOSINIr PINISAV| GODOS CLOSX !DOSOS;;THEN START IT UP X; X; X; RUN AT ADDRESS X; )TOVECT!@VECTOR:;;TO 'RUN AT' ADDRESS X; X; LOAD MEM.SAV IF NEED BE X; LDMEM*STATE;;LOAD MEM.SAV? INOLDMS X; $>  SOPEN   OPEN& NMSAV0 GNOLDMS: X;D DOION   X MSLENb GETCHRl MSBASEv X; NOLDMS!CLOS20 X; NMSAV AD1:MEM.SAVA= EC AE:A DUPSYS AD1:DUP.SYSA= OPT  "DUPFLAG ;;DUP RESIDENT = $80 INISAV FMINIT +CBSAV ;;ERROR CODE FROM PROG EXECUTED FNAME  !';;ALLOW FOR 40 CHAR DEF DIR X; (RESEND;;ALLOW FOR 3 FILE BUFFERS +DRIVERS;;ALLOW 2K FOR RESIDENT CODE MSBASE  X;