FMSORG = $700 FMSZPG = $43 IOCBORG = $340 LMASK = 3 DCBORG = $300 DHADR = $E453 EOL = $9B DEVTAB = $31A ZICB = $20 LMADR = $2E7 DUPINIT = $1540 STAK = $102 OSBTM = $DF DSKTIM = $246 TIMOUT = 15 ORG IOCBORG IOCB ICHID: ORG *+1 ICDNO: ORG *+1 ICCOM: ORG *+1 ICSTA: ORG *+1 ICBAL: ORG *+1 ICBAH: ORG *+1 ICPUT: ORG *+2 ICBLL: ORG *+1 ICBLH: ORG *+1 ICAUX1: ORG *+1 ICAUX2: ORG *+1 ICAUX3: ORG *+1 ICAUX4: ORG *+1 ICAUX5: ORG *+1 ICAUX6: ORG *+1 ICLEN = *-IOCB ORG *+ICLEN*7 ICOIN = $01 ICOOUT = $02 ICIO = $03 ICGBR = $04 ICGRT = $05 ICGBC = $06 ICGTC = $07 ICPBR = $08 ICPTR = $09 ICPBC = $0A ICPTC = $0B ICCLOSE = $0C ICSTAT = $0D ICDDC = $0E ICMAX = $0E ICFREE = $0F ICSOK = $01 ICSTR = $02 ICSEOF = $03 ICSBRK = $80 ICSDNR = $81 ICSNED = $82 ICSDER = $83 ICSIVC = $84 ICSNOP = $85 ICSIVN = $86 ICSWPC = $87 ICDNOZ = ICDNO-IOCB+ZICB ICBLLZ = ICBLL-IOCB+ZICB ICBLHZ = ICBLH-IOCB+ZICB ICBALZ = ICBAL-IOCB+ZICB ICBAHZ = ICBAH-IOCB+ZICB ICCOMZ = ICCOM-IOCB+ZICB ICPUTZ = ICPUT-IOCB+ZICB ORG DCBORG DCB DCBSBI: ORG *+1 DCBDRV: ORG *+1 DCBCMD: ORG *+1 DCBSTA: ORG *+1 DCBBUF: ORG *+2 DCBTO: ORG *+2 DCBCNT: ORG *+2 DCBSEC: ORG *+2 DCBCRS = 'R DCBCWS = 'W DCBCST = 'S DCBCFD = '! DCBSOK = $01 DCBDNR = $81 DCBCNR = $82 DCBDER = $83 DCBIVC = $84 DCBWPR = $87 ORG FMSZPG ZBUFP: ORG *+2 ZDRVA: ORG *+2 ZSBA: ORG *+2 ERRNO: ORG *+1 ORG FMSORG BFLG: .BYTE 0 BRCNT: .BYTE 3 BLDADR: .WORD FMSORG BINTADR: .WORD DUPINIT BCONT: JMP XBCONT SABYTE: .BYTE 3 DRVBYT: .BYTE 01 SAFBFW: .BYTE 0 SASA: .BYTE 01 .BYTE $15 DFSFLG: .BYTE 0 DFLINK: .BYTE 0,0 BLDISP: .BYTE 125 DFLADR: .BYTE $CB .BYTE 07 XBCONT LDY DFSFLG BEQ BFAIL LDA DFLADR STA ZBUFP STA DCBBUF LDA DFLADR+1 STA ZBUFP+1 STA DCBBUF+1 LDA DFLINK+1 LDY DFLINK XBC1: CLC LDX DFSFLG JSR BSIO BMI BFAIL LDY BLDISP LDA (ZBUFP),Y AND #LMASK PHA INY ORA (ZBUFP),Y BEQ BGOOD LDA (ZBUFP),Y TAY JSR INCBA PLA JMP XBC1 BFAIL: LDA #$C0 BNE XBRTN BGOOD: PLA XBRTN: ASL A TAY RTS INCBA: CLC LDA ZBUFP ADC BLDISP STA DCBBUF STA ZBUFP LDA ZBUFP+1 ADC #$00 STA DCBBUF+1 STA ZBUFP+1 RTS BSIO = * STA DCBSEC+1 STY DCBSEC BSIOR: LDA #DCBCRS LDY #$40 BCC DSIO1 LDA #DCBCWS LDY #$80 DSIO1 STA DCBCMD STY DCBSTA LDA #$31 LDY #TIMOUT DSIO2 STA DCBSBI STY DCBTO LDA #$03 STA RETRY LDA #$00 LDY #$80 DEX BEQ DSIO3 LDA #$01 LDY #$00 STA DCBCNT+1 DSIO3: STY DCBCNT DSIO4 JSR $E459 BPL DSIO5 DEC RETRY BMI DSIO5 LDX #$40 LDA #DCBCRS CMP DCBCMD BEQ STRTYP LDA #DCBCFD CMP DCBCMD BEQ STRTYP LDX #$80 STRTYP: STX DCBSTA JMP DSIO4 DSIO5: LDX CURFCB LDA DCBSTA RTS DFMSDH .WORD DFMOPN-1 .WORD DFMCLS-1 .WORD DFMGET-1 .WORD DFMPUT-1 .WORD DFMSTA-1 .WORD DFMDDC-1 ORG $07E0 DINIT = * LDA SASA STA ZBUFP LDA SASA+1 STA ZBUFP+1 LDA DRVBYT STA TEMP1 LDX #$07 DIA: STX TEMP2 ASL TEMP1 BCS DIHAVE LDA #$00 STA DRVTBL,X STA DBUFAL,X STA DBUFAH,X BEQ DIDDEC DIHAVE LDA #$00 STA (ZBUFP),Y INX STX DCBDRV LDA #DCBCST STA DCBCMD JSR DHADR LDY #$02 LDA $02EA AND #$20 BNE DI256 DEY DI256: TYA LDX TEMP2 STA DRVTBL,X LDA ZBUFP STA DBUFAL,X LDA ZBUFP+1 STA DBUFAH,X JSR DINCBP DEY BEQ DIDDEC JSR DINCBP DIDDEC: DEX BPL DIA LDY SABYTE LDX #$00 DINXTS: LDA #$00 DEY BPL DISETS TYA DISETS: STA SECTBL,X TYA BMI DISNI LDA ZBUFP STA SABUFL,X LDA ZBUFP+1 STA SABUFH,X JSR DINCBP DISNI: INX CPX #$10 BNE DINXTS LDA ZBUFP STA LMADR LDA ZBUFP+1 STA LMADR+1 JMP CLRFCB DINCBP: CLC LDA ZBUFP ADC #$80 STA ZBUFP LDA ZBUFP+1 ADC #$00 STA ZBUFP+1 RTS CLRFCB = * LDY #$7F LDA #$00 CFCBX: STA FCB,Y DEY BNE CFCBX LDY #$00 ADI1: LDA Y BEQ ADI2 CMP #'D BEQ ADI2 INY INY INY CPY #$1E BNE ADI1 BRK ADI2: LDA #'D STA DEVTAB,Y LDA #DFMSDH&255 STA DEVTAB+1,Y LDA #DFMSDH/256 STA DEVTAB+2,Y RTS DFMOPN: JSR SETUP JSR FNDCODE LDA ICAUX1,X STA FCBOTC,X AND #OPDIR BEQ OPN1 JMP LISTDIR OPN1: JSR SFDIR PHP LDA FCBOTC,X CMP #OPIN BEQ DFOIN CMP #OPOUT BEQ DFOOUT CMP #OPIN+OPOUT BEQ DFOUPD CMP #OPOUT+OPAPND BEQ DFOAPN JMP ERDVDC DFOIN = * PLP BCS OPNER1 BCC DFOUI DFOUPD = * PLP BCS OPNER1 JSR TSTLOCK DFOUI = * JSR DFRDSU JMP GREAT OPNER1: JMP ERFNF DFOAPN = * PLP BCS OPNER1 LDY CDIRD LDA FILDIR+DFDFL1,Y AND #DFDNLD BEQ APOER JSR TSTLOCK JSR OPVTOC JSR GETSECTOR STA FCBSSN+1,X LDA FCBLSN,X STA FCBSSN,X JMP DHFOX2 APOER: JMP ERAPO DFOOUT = * PLP BCS DFOX1 JSR XDEL0 LDY CDIRD JMP OPN1A DFOX1 = * LDA DHOLES BMI OPNER2 STA CDIRS JSR RDDIR LDA DHOLED STA CDIRD LDA DHFNUM STA SFNUM JSR OPVTOC LDY CDIRD LDX #$0A LDA #$20 OPN1B: STA FILDIR+DFDPFN,Y INY DEX BPL OPN1B LDX CURFCB OPN1A = * JSR GETSECTOR LDY CDIRD STA FILDIR+DFDSSN+1,Y LDA FCBLSN,X STA FILDIR+DFDSSN,Y LDA #DFDINU+DFDOUT+DFDNLD STA FILDIR+DFDFL1,Y LDA #$00 STA FILDIR+DFDCNT+1,Y STA FILDIR+DFDCNT,Y LDX #$00 OPN2: LDA FNAME,X CMP #'? BEQ OPN2A STA FILDIR+DFDPFN,Y OPN2A = * INY INX CPX #$0B BCC OPN2 LDX CURFCB JSR WRTDIR DHFOX2 = * JSR SETFCB JSR WRTN6 OPN3: LDA #FCBFAS STA FCBFLG,X JSR TSTDOS BNE DHFOX3 JMP WRTDOS DHFOX3 = * JMP GREAT OPNER2: JSR ERDFULL SETFCB = * LDA #$00 STA FCBFLG,X OPNF1: LDA SFNUM ASL A ASL A STA FCBFNO,X LDA #$00 STA FCBDLN,X STA FCBCNT,X STA FCBCNT+1,X RTS DFRDSU: JSR SETFCB LDY CDIRD LDA DFDFL1+FILDIR,Y AND #DFDNLD STA FCBSLT,X LDA FILD+DFDSSN,Y STA FCBLSN,X LDA FILDIR+DFDSSN+1,Y STA FCBLSN+1,X JSR RDNSO RTS DFMPUT STA SVDBYT LDA ICDNO,X STA ICDNO-IOCB+ZICB JSR SETUP LDY ENTSTK LDA STAK,Y CMP #OSBTM BCS FRMCIO LDA #$00 STA ICCOMZ FRMCIO: LDA FCBOTC,X AND #OPOUT BEQ PUTER LDY FCBDLN,X TYA CMP FCBMLN,X BCC PUT1 JSR WRTNXS BCS PEOF JSR WTBUR LDY #$00 BCS PUT1 LDA (ICBALZ),Y STA SVDBYT PUT1: INC FCBDLN,X LDA SVDBYT STA (ZSBA),Y LDA #FCBFSM ORA FCBFLG,X STA FCBFLG,X JMP GREAT PUTER: JMP ERDVDC PEOF: JMP ERREOF WTBUR: LDA FCBFLG,X BPL NOBURST BMI TBURST RTBUR: LDA #$00 TBURST: STA BURTYP LDA ICCOMZ AND #$02 BEQ NOBURST JSR TBLEN BCS NOBURST LDA ICBALZ STA ZSBA LDA ICBAHZ STA ZSBA+1 NXTBUR: LDA BURTYP BMI WRBUR JSR RDNXTS BCC BBINC BCS BUREOF NOBURST SEC RTS WRBUR: LDA DRVMDL STA FCBDLN,X TAY LDA (ZSBA),Y STA SVD1 INY LDA (ZSBA),Y STA SVD2 INY LDA (ZSBA),Y STA SVD3 JSR WRTNXS LDY DRVMDL LDA SVD1 STA (ZSBA),Y INY LDA SVD2 STA (ZSBA),Y INY LDA SVD3 STA (ZSBA),Y BBINC: CLC LDA ZSBA ADC FCBMLN,X STA ZSBA LDA ZSBA+1 ADC #$00 STA ZSBA+1 SEC LDA ICBLLZ SBC FCBMLN,X STA ICBLLZ LDA ICBLHZ SBC #$00 NOP STA ICBLHZ JSR TBLEN BCC NXTBUR BUREOF = * LDA ZSBA STA ICBALZ LDA ZSBA+1 STA ICBAHZ LDY FCBBUF,X DEY JSR SSBA BURST: CLC RTS TBLEN = * LDA DRVTYP CMP #$01 BNE TBL256 LDA ICBLLZ BMI BURST TBL256: LDA ICBLHZ BNE BURST SEC RTS DFMGET = * JSR SETUP LDA FCBOTC,X FDSCHAR AND #OPDIR BEQ GET1 JMP GDCHAR GET1: LDA FCBDLN,X CMP FCBMLN,X BCC GET2 JSR RTBUR JSR RDNXTS BCC GET1 GEOF = * JMP ERREOF GET2: TAY LDA (ZSBA),Y STA SVDBYT INY TYA STA FCBDLN,X EFLOOK = * LDY FCBLEN,X BNE GET3 LDY FCBLSN+1,X BNE GET3 CMP FCBMLN,X BCC GET3 LDA #$03 JMP RETURN GET3: JMP GREAT DFMSTA JSR SETUP JSR FNDCODE JSR SFDIR BCS SFNF JSR TSTLOCK JMP GREAT SFNF: JMP ERFNF DFMCLS JSR SETUP LDA FCBOTC,X AND #OPOUT BEQ CLDONE ROL FCBFLG,X BCC CLUPDT JSR WRTLSEC JSR RRDIR LDA FCBCNT+1,X PHA LDA FCBCNT,X PHA LDA FCBOTC,X AND #OPAPND BEQ CLOUT JSR DFRDSU APP1: JSR RDNXTS BCC APP1 LDA FCBSSN,X STA FCBLSN,X LDA FCBSSN+1,X STA FCBLSN+1,X JSR WRTN2 CLOUT: LDY CDIRD CLC PLA ADC FILDIR+DFDCNT,Y STA FILDIR+DFDCNT,Y PLA ADC FILDIR+DFDCNT+1,Y STA FILDIR+DFDCNT+1,Y LDA #DFDINU+DFDNLD STA FILDIR+DFDFL1,Y JSR WRTDIR JSR WRTVTOC CLDONE: LDA #$00 STA FCBOTC,X JMP FGREAT CLUPDT = * ROL FCBFLG,X BCC CLDONE JSR WRCSIO JMP CLDONE RRDIR = * LDA FCBFNO,X LSR A LSR A STA SFNUM JSR FNSHFT STA CDIRS JSR FNSHFT JSR FNSHF1 ASL A STA CDIRD JMP RDDIR FNSHFT: LDA #$00 FNSHF1: LDY #$03 FNSHF2: ASL FCBFNO,X ROL A DEY BNE FNSHF2 RTS DFMDDC JSR SETUP LDA ICCOM,X CMP #254 BEQ XFV CMP #MAXDDC BCS DVDCER SEC SBC #$20 BCC DVDCER ASL A TAY LDA DVDCVT,Y PHA LDA DVDCVT+1,Y PHA RTS DVDCVT .DBYTE XRENAME-1 .DBYTE XDELETE-1 .DBYTE DVDCER-1 .DBYTE XLOCK-1 .DBYTE XUNLOCK-1 .DBYTE XPOINT-1 .DBYTE XNOTE-1 MAXDDC = $27 DVDCER: JMP ERDVDC XFV: JMP XFORMAT XRENAME JSR FNDCODE STY TEMP2 JSR SFDIR BCC XRN1 JMP ERFNF XRN1: JSR TSTLOCK JSR TSTDOS BNE XRN1A JSR DELDOS XRN1A: LDY TEMP2 JSR FNDCNX JSR TSTDOS BNE XRN1B LDY CDIRD LDA FILDIR+DFDSSN+1,Y PHA LDA FILDIR+DFDSSN,Y TAY PLA JSR SETDSO XRN1B: LDX #0 LDY CDIRD XRN2: LDA FNAME,X CMP #'? BEQ XRN3 STA FILDIR+DFDPFN,Y XRN3: INY INX CPX #$0B BCC XRN2 LDX CURFCB JSR WRTDIR JSR FNDCODE JSR CSFDIR BCC XRN1 JMP FGREAT XDELETE JSR FNDCODE JSR SFDIR BCS DFNF XDELX = * JSR XDEL0 JSR TSTDOS BNE XDELY JSR DELDOS XDELY XDEL3: JSR WRTDIR JSR CSFDIR BCC XDELX JSR WRTVTOC JMP FGREAT XDEL0: JSR OPVTOC XDEL1: LDY CDIRD JSR TSTLOCK LDA #DFDEDE STA FILDIR+DFDFL1,Y JSR DFRDSU JMP XDEL2A XDEL2: JSR RDNXTS BCS XDEL4 XDEL2A = * JSR FRESECT JMP XDEL2 XDEL4 = * LDY #DVDWRQ LDA #$FF STA (ZDRVA),Y RTS DFNF: JMP ERFNF XLOCK LDA #DFDLOC STA TEMP4 BNE XLCOM XUNLOCK LDA #0 STA TEMP4 XLCOM: JSR FNDCODE JSR SFDIR BCC XLC1 JMP ERFNF XLC1: LDY CDIRD LDA FILDIR+DFDFL1,Y AND #$DF ORA TEMP4 STA FILDIR+DFDFL1,Y JSR WRTDIR JSR CSFDIR BCC XLC1 JMP FGREAT TSTLOCK LDY CDIRD LDA FILDIR+DFDFL1,Y AND #DFDLOC BNE TLF RTS TLF: JMP ERFLOCK XPOINT LDA FCBFLG,X BMI PERR1 LDA ICAUX4,X CMP FCBCSN+1,X BNE XP1 LDA ICAUX3,X CMP FCBCSN,X BEQ XP2 XP1: LDA FCBFLG,X BEQ XP1A JSR WRCSIO LDA #0 STA FCBFLG,X XP1A = * LDA ICAUX4,X STA FCBLSN+1,X LDA ICAUX3,X STA FCBLSN,X JSR RDNSO BCS XPERR XP2: LDA ICAUX5,X CMP FCBMLN,X BCC XP3 BEQ XP3 XPERR = * JMP ERRPDL XP3: STA FCBDLN,X JMP GREAT PERR1: JMP ERRPOT XNOTE LDA FCBDLN,X STA ICAUX5,X LDA FCBCSN,X STA ICAUX3,X LDA FCBCSN+1,X STA ICAUX4,X JMP GREAT XFORMAT LDA ZSBA+1 STA DCBBUF+1 LDA ZSBA STA DCBBUF LDA #DCBCFD STA DCBCMD LDA #$40 STA DCBSTA LDX DRVTYP LDA #$31 LDY DSKTIM JSR DSIO2 BPL XF0 CPY #$90 BNE XFERR TSTFMT = * LDY #0 LDA (ZSBA),Y CMP #$FF BNE XFBAD INY LDA (ZSBA),Y CMP #$FF BEQ XFERR XFBAD: JMP ERDBAD XFERR: JMP RETURN XF0 LDA #0 TAY XF1: STA (ZDRVA),Y INY BPL XF1 LDY #0 LDA #2 STA (ZDRVA),Y INY LDA #$C3 STA (ZDRVA),Y INY INY STA (ZDRVA),Y LDA #2 DEY STA (ZDRVA),Y INY INY STA (ZDRVA),Y LDY #DVDSMP LDA #$FF XF2: STA (ZDRVA),Y INY CPY #DVDSMP+90 BNE XF2 LDA #$0F LDY #DVDSMP STA (ZDRVA),Y LDY #DVDSMP+45 LDA #0 STA (ZDRVA),Y INY LDA #$7F STA (ZDRVA),Y JSR WRTVTOC LDA #0 TAY XF3: STA FILDIR,Y INY BPL XF3 LDA #7 STA CDIRS XF4: JSR WRTDIR DEC CDIRS BPL XF4 JSR DELDOS JMP FGREAT LISTDIR LDA #0 STA TEMP4 JSR SFDIR BCC LDENT1 BCS LDCNT GDCHAR BIT TEMP4 BMI LDDONE LDY TEMP4 LDA (ZSBA),Y STA SVDBYT INC TEMP4 CMP #EOL BNE GDCRTN CPY #17 BCS LDENT LDA #$80 STA TEMP4 GDCRTN: JMP GREAT LDENT: LDA #0 STA TEMP4 JSR CSFDIR BCS LDCNT LDENT1 JSR FDENT JMP GREAT LDCNT: JSR RDVTOC LDY #DVDNSA+1 LDA (ZDRVA),Y PHA DEY LDA (ZDRVA),Y TAY PLA JSR CVDX LDY #3 LDX #FSCML-1 MVFSCM: LDA FSCM,X STA (ZSBA),Y INY DEX BPL MVFSCM JSR CVDY LDA #0 STA TEMP4 JMP FGREAT LDDONE JMP ERREOF FSCM: .BYTE "SROTCES EERF " FSCML = *-FSCM FDENT LDY #0 LDA #$20 STA (ZSBA),Y LDX CDIRD LDA FILDIR+DFDFL1,X AND #DFDLOC BEQ LD1 LDA #'* STA (ZSBA),Y LD1: INY LDA #$20 STA (ZSBA),Y INY LD2: LDA FILDIR+DFDPFN,X STA (ZSBA),Y INX INY CPY #13 BCC LD2 LDA #$20 STA (ZSBA),Y INY STY TEMP4 LDX CDIRD LDY FILDIR+DFDCNT,X LDA FILDIR+DFDCNT+1,X CVDX LDX #100 JSR CVDIGIT LDX #10 JSR CVDIGIT TYA JSR STDIGIT LDY #17 CVDY: LDA #EOL STA (ZSBA),Y LDY #0 STY TEMP4 RTS CVDIGIT: STX TEMP3 LDX #$FF CVD1: STA TEMP2 STY TEMP1 INX SEC LDA TEMP1 SBC TEMP3 TAY LDA TEMP2 SBC #0 BCS CVD1 TXA STDIGIT ORA #$30 LDY TEMP4 STA (ZSBA),Y INC TEMP4 LDA TEMP2 LDY TEMP1 RTS FNDCODE LDA ICBAL,X STA ZBUFP LDA ICBAH,X STA ZBUFP+1 LDY #2 FD0A: LDA (ZBUFP),Y DEY BMI FNDERR CMP #': FD0B BNE FD0A INY FNDCNX LDX #11 LDA #$20 FD0: STA FNAME,X DEX BPL FD0 LDX #0 STX EXTSW FD1: INY LDA (ZBUFP),Y CMP #'* BNE FD3 FD2: LDA #'? JSR FDSCHAR BCC FD2 BPL FD1 BMI FDEND FD3: CMP #'. BNE FD4 BIT EXTSW BMI FDEND LDX #8 ROR EXTSW BCC FD1 FD4: CMP #'? BEQ FD6 CMP #'A BCC FD5 CMP #$5B BCC FD6 FD5: CPX #0 BEQ FNDERR CMP #$30 BCC FDEND CMP #$3A BCS FDEND FD6: JSR FDSCHAR JMP FD1 FDEND: LDX CURFCB RTS FNDERR: JMP ERRFN CPX #8 BCC FDSC2 BEQ FDSC1 CPX #12 BCC FDSC2 RTS FDSC1: BIT EXTSW BMI FDSC2 RTS FDSC2: STA FNAME,X INX CLC RTS SFDIR LDA #$FF STA DHOLES STA CDIRS STA SFNUM LDA #$70 STA CDIRD CSFDIR INC SFNUM CLC LDA CDIRD ADC #DFDELN BPL SFD2 INC CDIRS LDA #8 CMP CDIRS BCC SFD1 BEQ SDRTN SFD1: JSR RDDIR LDA #0 SFD2: STA CDIRD TAY LDA FILDIR+DFDFL1,Y BEQ SFDSH BMI SFDSH AND #DFDOUT BNE CSFDIR LDX #0 SFD3: LDA FNAME,X CMP #'? BEQ SFD4 CMP FILDIR+DFDPFN,Y BNE CSFDIR SFD4: INX INY CPX #11 BNE SFD3 CLC BCC SDRTN SFDSH LDA DHOLES BPL SFDSH1 LDA CDIRS STA DHOLES LDA CDIRD STA DHOLED LDA SFNUM STA DHFNUM SFDSH1: LDA FILDIR+DFDFL1,Y BMI CSFDIR SEC SDRTN: LDX CURFCB RTS WRTNXS LDA FCBFLG,X BMI WRTN1 ASL A BPL WRU1 ASL A STA FCBFLG,X JSR WRCSIO BMI WRNERR WRU1: JMP RDNXTS WRTN1: JSR GETSECTOR WRTLSEC: LDA FCBDLN,X WRTLS1: LDY DRVLBT STA (ZSBA),Y WRTN2: LDA FCBLSN+1,X ORA FCBFNO,X LDY DRVMDL STA (ZSBA),Y INY LDA FCBLSN,X STA (ZSBA),Y JSR WRCSIO BPL WRTN5 WRNERR: LDA DCBSTA STA TEMP4 LDA #0 STA FCBOTC,X LDA TEMP4 JMP RETURN WRTN5 INC FCBCNT,X BNE WRTN6 INC FCBCNT+1,X WRTN6 JSR MVLSN LDA #0 STA FCBLSN,X STA FCBLSN+1,X STA FCBDLN,X LDA DRVMDL STA FCBMLN,X CLC RTS WRCSIO: SEC RWCSIO: LDA FCBCSN+1,X LDY FCBCSN,X JMP DSIO MVLSN: LDA FCBLSN,X STA FCBCSN,X LDA FCBLSN+1,X STA FCBCSN+1,X RTS RDNXTS LDA FCBFLG,X BEQ RDNSO JMP WRTNXS RDNSO = * LDA FCBLSN,X ORA FCBLSN+1,X BNE RDNS1 SEC RTS RDNS1: JSR MVLSN CLC JSR RWCSIO BMI RDIOER LDY DRVMDL LDA (ZSBA),Y AND #$FC CMP FCBFNO,X BNE RDFNMM LDA (ZSBA),Y AND #$03 STA FCBLSN+1,X INY LDA (ZSBA),Y STA FCBLSN,X INY LDA (ZSBA),Y PHA LDA FCBSLT,Y BNE RDNS3 PLA BMI RDNS2 LDA #125 RDNS2: AND #$7F PHA RDNS3: PLA STA FCBMLN,X LDA #0 STA FCBDLN,X CLC RTS RDIOER: JSR ERRIO RDFNMM = * LDA ICCOM,X CMP #$21 BEQ RDDELE JSR ERFNMM RDDELE: SEC RTS RDDIR: CLC BCC DIRIO WRTDIR: SEC DIRIO: PHP LDA #FILDIR/256 STA DCBBUF+1 LDA #FILDIR&255 STA DCBBUF CLC LDA CDIRS ADC #$69 TAY LDA #1 ADC #0 JMP DSYSIO RDVTOC LDY #DVDWRQ LDA (ZDRVA),Y BEQ RDVGO RTS RDVGO: CLC BCC VTIO WRTVTOC WRVTOC: LDY #DVDWRQ LDA #0 STA (ZDRVA),Y SEC VTIO: PHP LDA ZDRVA+1 STA DCBBUF+1 LDA ZDRVA STA DCBBUF LDY #$68 LDA #1 DSYSIO PLP DSYSIA LDX DRVTYP JSR BSIO BMI DSIOER RTS DSIOER: CMP #DCBDER BEQ DEAD JMP ERRIO DEAD: JMP ERRSYS OPVTOC JSR RDVTOC JMP WRTVTOC FRESECT LDA FCBCSN,X ORA FCBCSN+1,X BEQ FSRTS LDA #0 LDY #3 FS1: LSR FCBCSN+1,X ROR FCBCSN,X ROR A DEY BNE FS1 LDY #5 FS2: ROR A DEY BNE FS2 TAY LDA #0 SEC FS3: ROR A DEY BPL FS3 PHA LDA FCBCSN,X ADC #DVDSMP TAY PLA ORA (ZDRVA),Y STA (ZDRVA),Y LDY #DVDNSA LDA (ZDRVA),Y CLC ADC #1 STA (ZDRVA),Y INY LDA (ZDRVA),Y ADC #0 STA (ZDRVA),Y FSRTS = * RTS GETSECTOR LDY #DVDSMP-1 GS1: INY CPY #90+DVDSMP BCS GSERR LDA (ZDRVA),Y BEQ GS1 STY TEMP1 PHA SEC LDY #DVDNSA LDA (ZDRVA),Y SBC #1 STA (ZDRVA),Y INY LDA (ZDRVA),Y SBC #0 STA (ZDRVA),Y INY LDA #$FF STA (ZDRVA),Y PLA LDY #$FF GS2: INY ASL A BCC GS2 STY TEMP2 GS3: LSR A DEY BPL GS3 LDY TEMP1 STA (ZDRVA),Y SEC LDA TEMP1 SBC #DVDSMP LDY #0 STY TEMP1 GS4: ASL A ROL TEMP1 INY CPY #3 BCC GS4 CLC ADC TEMP2 STA FCBLSN,X LDA TEMP1 ADC #0 STA FCBLSN+1,X RTS GSERR: JMP ERRNSA SETUP: LDA #$9F STA ERRNO STX CURFCB TSX INX INX STX ENTSTK LDX CURFCB LDY ICDNOZ STY DCBDRV DEY LDA DBUFAL,Y STA ZDRVA LDA DBUFAH,Y STA ZDRVA+1 LDA DRVTBL,Y BEQ DERR1 STA DRVTYP TAY LDA DRVMDL,Y STA DRVMDL LDA DRVLBT,Y STA DRVLBT LDY FCBBUF,X DEY BPL SSBA LDY #0 GSB1: LDA SECTBL,Y BEQ GSB4 GSB2: INY CPY #$10 BCC GSB1 GSB3: JMP ERRNSB GSB4: LDA DRVTYP LSR A BCS GSB5 INY CPY #16 BCS GSB3 LDA SECTBL,Y BNE GSB2 DEY LDA #$80 STA SECTBL+1,Y GSB5: LDA #$80 STA SECTBL,Y TYA STA FCBBUF,X INC FCBBUF,X SSBA: LDA SABUFL,Y STA ZSBA LDA SABUFH,Y STA ZSBA+1 RTS DERR1: JMP ERRDNO FRESBUF = * LDY FCBBUF,X BEQ FSBR DEY LDA #0 STA FCBBUF,X STA SECTBL,Y LDA DRVTYP LSR A BCS FSBR LSR A STA SECTBL+1,Y FSBR: RTS DSIO PHA LDA ZSBA STA DCBBUF LDA ZSBA+1 STA DCBBUF+1 PLA LDX DRVTYP JSR BSIO RTS WRTDOS LDY FCBCSN,X LDA FCBCSN+1,X JSR SETDSO JSR WD0 JMP GREAT DELDOS LDA #0 DD1 STA DFSFLG WRTSCO LDA #FMSORG/256 STA DCBBUF+1 LDA #FMSORG&255 STA DCBBUF LDA #0 STA DCBSEC STA DCBSEC+1 WRNBS: INC DCBSEC LDX #1 SEC JSR BSIOR CLC LDA DCBBUF ADC #128 STA DCBBUF LDA DCBBUF+1 ADC #0 STA DCBBUF+1 LDA DCBSEC CMP BRCNT BNE WRNBS RTS SETDSO: STY DFLINK STA DFLINK+1 LDA DRVTYP STA DFSFLG LDY DRVMDL STY BLDISP BNE DD1 WD0: LDA DFLADR STA ZBUFP LDA DFLADR+1 STA ZBUFP+1 WD1: LDY #0 WD2: LDA (ZBUFP),Y STA (ZSBA),Y INY CPY DRVMDL BCC WD2 TYA STA FCBDLN,X JSR INCBA CMP SASA+1 BCC WD3 BNE WD4 LDA ZBUFP CMP SASA BCC WD3 BNE WD4 WD3: JSR WRTNXS JMP WD1 WD4: RTS TSTDOS LDY #11 TDF1: LDA FNAME-1,Y CMP DFN-1,Y BNE TDFR DEY BNE TDF1 TDFR: RTS DFN: .BYTE "DOS SYS" ERDBAD: INC ERRNO ERAPO: INC ERRNO ERRPOT: INC ERRNO ERFNF: INC ERRNO ERDFULL: INC ERRNO ERDVDC: INC ERRNO ERFLOCK: INC ERRNO ERRPDL: INC ERRNO ERRFN: INC ERRNO ERFNMM: INC ERRNO ERRSYS: INC ERRNO ERRNSA: INC ERRNO ERRNSB: INC ERRNO ERRDNO: INC ERRNO LDA ERRNO RETURN: LDX CURFCB STA ICSTA,X LDX ENTSTK TXS LDX CURFCB TAY LDA SVDBYT RTS ERRIO: LDA DCBSTA BMI RETURN FGREAT: LDX CURFCB JSR FRESBUF GREAT: LDA #01 BNE RETURN ERREOF: LDA #$88 BMI RETURN DRVMDL: .BYTE 0 .BYTE 125 .BYTE 253 DRVLBT: .BYTE 0 .BYTE 127 .BYTE 255 DRVTYP: ORG *+1 RETRY: ORG *+1 ENTSTK: ORG *+1 CURFCB: ORG *+1 DHOLES: ORG *+1 DHOLED: ORG *+1 DHFNUM: ORG *+1 CDIRD: ORG *+1 CDIRS: ORG *+1 SFNUM: ORG *+1 SVDBYT: ORG *+1 SVD1: ORG *+1 SVD2: ORG *+1 SVD3: ORG *+1 EXTSW TEMP1: ORG *+1 TEMP2: ORG *+1 TEMP3: ORG *+1 TEMP4: ORG *+1 BURTYP: ORG *+1 DRVTBL: ORG *+8 SECTBL: ORG *+16 DBUFAL: ORG *+8 DBUFAH: ORG *+8 SABUFL: ORG *+16 SABUFH: ORG *+16 FNAME: ORG *+12 AFNAME: ORG *+12 MDRV: ORG *+1 Z = * ORG $1381 FCB FCBFNO: ORG *+1 FCBOTC: ORG *+1 ORG *+1 FCBSLT: ORG *+1 FCBFLG: ORG *+1 FCBMLN: ORG *+1 FCBDLN: ORG *+1 FCBBUF: ORG *+1 FCBCSN: ORG *+2 FCBLSN: ORG *+2 FCBSSN: ORG *+2 FCBCRS FCBCNT: ORG *+2 FCBLEN = *-FCB ORG FCBLEN*7+* OPIN = $04 OPOUT = $08 OPDIR = $02 OPAPND = $01 FCBFAS = $80 FCBFSM = $40 DFDFL1 = 0 DFDCNT = 1 DFDSSN = 3 DFDPFN = 5 DFDXFN = 13 DFDELN = 16 DFDEUU = 0 DFDEDE = $80 DFDINU = $40 DFDOUT = $01 DFDLOC = $20 DFDNLD = $02 FILDIR: ORG *+256 DVDTCD = 0 DVDMSN = 1 DVDNSA = 3 DVDWRQ = 5 DVDSMP = 10 ENDFMS = * END