; ; Resident MDUP code ; ; INITIALIZE MYDOS INTERFACE ; INIT LDA #HIGH[DUPENT] STA DOSVEC+1 LDA #LOW[DUPENT] STA DOSVEC ; LDA #0 STA FNAME LDA #$20 BIT STATE BNE CKMDOS ;IF WARM START CHECK FOR DUP LOADED ; ; COLD START CODE ; STA STATE ;SET MODE TO WARMSTART LDX #$10 JSR SOPEN ;RUN AUTORUN.SYS FILE DB 6 DB 39 DW AFN BMI CLOSX JSR CLOSX JMP (RUNAD) ; ; CLOSE IOCBS 10 AND 20 ; CLOSX JSR CLOS20 CLOS10 LDX #$10 ;CLOSE IOCB 10 DB $2C ;SKIP 2 BYTES CLOS20 LDX #$20 ;CLOSE IOCB 20 CLOS2 LDA #CLOSE ;CLOSE ANY IOCB SCMD STA ICMD,X JMP CIOV ; DBUF10 LDX #$10 DEFBUF STA IBUF,X TYA STA IBUF+1,X CKMDOS RTS ; ; Moved AUTORUN.SYS filename here so SUPERARC will not think ; this is >=4.3 DOS ; AFN DB 'D1:AUTORUN.SYS',$9B ; ; OPEN FILE ; ; CALLING SEQUENCE: ; JSR SOPEN ; DB AUX ; DB CMD ; DW BUFFER ADDRESS ; SOPEN SEC DB $A9 ;LDA #IMM OPCODE ; ; DO A READ/WRITE TYPE I/O REQUEST ; ; CALLING SEQUENCE: ; JSR DOIO ; DB IOCBNO ; DW BUFFER LENGTH ; DB CMD ; DW BUFFER ADDRESS ; DOIO CLC PLA STA RAMLO PLA STA RAMLO+1 LDY #1 LDA (RAMLO),Y BCC DOIO1 STA IAUX,X BCS XTRCB DOIO1 TAX INY LDA (RAMLO),Y STA ILEN,X INY LDA (RAMLO),Y STA ILEN+1,X XTRCB INY LDA (RAMLO),Y STA ICMD,X INY LDA (RAMLO),Y STA IBUF,X INY LDA (RAMLO),Y STA IBUF+1,X TYA CLC ADC RAMLO TAY LDA #0 ADC RAMLO+1 PHA TYA PHA JMP CIOV ;DO I/O REQUEST ; ; IF NO DUP.SYS, INCREMENT DRIVE NO. ; RETRYOS INC DUPSYS+1 LDA DUPSYS+1 AND #$0F CMP #9 BCC RTYOSV BNE GOTO1 CMP RAMDKU BEQ RTYOSV GOTO1 LDA #'1' STA DUPSYS+1 RTYOSV TAX LDA DKTYPE-'1',X BEQ RETRYOS BNE NOWMS ; ; LOAD PROGRAM FUNCTION ; LDFILE JSR LDMEM LDX #$10 JSR TOVECT ;LOAD PROGRAM OR GO TO IT DB $2C ;SKIP THE LDY #1 INSTRUCTION ; ;************************************* ; ; STANDARD EXIT POINT FOR PROGRAMS ; ;************************************* ; ; RESTORE DOS/DUP INIT VECTOR ; DUPENT LDY #1 SAVERR STY CBSAV BIT STATE BVS GODOS BPL NOWMS JSR CLOS10 JSR SOPEN DB $08 ;WRITE MEM.SAV FILE DB OPEN DW NMSAV BMI NOWMS JSR DOIO DB $10 DW MSLEN DB PUTCHR DW MSBASE NOWMS JSR CLOS10 JSR SOPEN ;GET DUP.SYS INTO MEMORY DB $06 DB 39 DW DUPSYS BMI RETRYOS LDA DOSINI STA INISAV LDA DOSINI+1 STA INISAV+1 GODOS JSR CLOSX JMP DOSOS ;THEN START IT UP ; ; SAVE MEMORY SUBROUTINE: WRITE FILE BODY, INIT AND RUN VECTORS ; WDR JSR LDMEM ;LOAD MEM.SAV IF NEED BE WDR1 LDX #$10 ;WRITE TEXT TO DISK FILE JSR CIOV WRERRO BMI SAVERR LDX #LOW[INITAD] JSR WRVEC LDX #LOW[RUNAD] JSR WRVEC BIT STATE BVS GODOS BVC NOWMS ; WRVEC LSR TEMP ;WRITE THIS 6-BYTE VECTOR? BCC RTS2 ;IF NOT, JUST RETURN STX VECTOR LDA INITAD&$FF00,X STA VECTOR+4 INX LDA INITAD&$FF00,X STA VECTOR+5 LDA #HIGH[INITAD] STA VECTOR+1 STA VECTOR+3 ;(X,A)=MIDDLE WORD STX VECTOR+2 WR6BYT JSR DOIO DB $10 DW 6 DB PUTCHR DW VECTOR BMI WRERRO RTS2 RTS ; ; RUN AT ADDRESS ; TOVECT JMP (VECTOR) ;TO 'RUN AT' ADDRESS ; ; LOAD MEM.SAV IF NEED BE ; LDMEM BIT STATE ;LOAD MEM.SAV? BPL NOLDMS ; LDX #$20 JSR SOPEN DB $04 DB OPEN DW NMSAV BMI NOLDMS ; JSR DOIO DB $20 DW MSLEN DB GETCHR DW MSBASE ; NOLDMS JMP CLOS20 ; NMSAV DB 'D1:MEM.SAV',$9B EC DB 'E:' DUPSYS DB 'D1:DUP.SYS',$9B OPT DB 0 DUPFLAG DB 0 ;DUP RESIDENT = $80 INISAV DW MDINIT CBSAV DB 0 ;ERROR CODE FROM PROG EXECUTED FNAME DB 0 DS 39 ;ALLOW FOR 40 CHAR DEF DIR ; RESEND DS $300 ;ALLOW FOR THREE FILE BUFFERS DRIVERS DS $800 ;ALLOW 2K FOR RESIDENT CODE