NEW AUTO 3,1 *-------------------------------------- * DRV.DiskII * X = IOCTL * Y,A = PTR to S.IOCTL *-------------------------------------- DRV.DiskII cld cpx #IOCTL.FORMAT bcs DRV.RamDrive.9 >STYA pIOCTL jmp (.1,x) .1 .DA DRV.DiskII.S .DA DRV.BLK READ .DA DRV.BLK WRITE *-------------------------------------- DRV.DiskII.S >LDYAI DRV.DiskII.DIB jmp DRV.STATUS.YA *-------------------------------------- DRV.DiskII.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .DA 280 .DA #0 .PS "Disk ][ 5.25" .BS 4 .DA #S.DIB.T.DISKII .DA #0 .DA K.VER *-------------------------------------- * DRV.RamDrive * X = IOCTL * Y,A = PTR to S.IOCTL *-------------------------------------- DRV.RamDrive cld cpx #IOCTL.CONTROL bcs DRV.RamDrive.9 >STYA pIOCTL jmp (.1,x) .1 .DA DRV.RamDrive.S .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT DRV.RamDrive.9 jmp A2osX.BadCall *-------------------------------------- DRV.RamDrive.S jsr DRV.Blk bcs .9 stx DRV.RamDrive.DIB+S.DIB.SIZE sty DRV.RamDrive.DIB+S.DIB.SIZE+1 >LDYAI DRV.RamDrive.DIB jmp DRV.STATUS.YA .9 rts *-------------------------------------- DRV.RamDrive.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .BS 3 .PS "ProDOS /RAM Disk" .DA #S.DIB.T.RAM .DA #0 .DA K.VER *-------------------------------------- * DRV.BlkDev * X = IOCTL * Y,A = PTR to S.IOCTL *-------------------------------------- DRV.BlkDev cld cpx #IOCTL.CONTROL bcs DRV.RamDrive.9 >STYA pIOCTL jmp (.1,x) .1 .DA DRV.BlkDev.S .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT *-------------------------------------- DRV.BlkDev.S jsr DRV.Blk bcs .9 stx DRV.BlkDev.DIB+S.DIB.SIZE sty DRV.BlkDev.DIB+S.DIB.SIZE+1 >LDYAI DRV.BlkDev.DIB jmp DRV.STATUS.YA .9 rts *-------------------------------------- DRV.BlkDev.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .BS 3 .PS "ProDOS Block Dev" .DA #S.DIB.T.PRODOS .DA #0 .DA K.VER *-------------------------------------- * IOCTL to BLK protocol converter * in : pIOCTL *-------------------------------------- DRV.BLK txa lsr sta DRV.BLK.P CMD ldy #S.FD.DEV.DEVID Drive 1, or 2 lda (pFD),y dec O or 1 lsr in Carry php ldy #S.FD.DEV.BUSID lda (pFD),y asl asl asl asl asl plp ror DSSS0000 sta DRV.BLK.P+1 UNITNUM ldx #3 ldy #S.IOCTL.BUFPTR+3 .1 lda (pIOCTL),y BUF,BLKNUM sta DRV.BLK.P+2,x dey dex bpl .1 ldy #S.FD.DEV.BUSPTR lda (pFD),y sta .3+1 iny lda (pFD),y sta .3+2 jsr GO.ProDOS ldx #5 .2 lda DRV.BLK.P,x sta DRV.BLK.Cmd,x dex bpl .2 .3 jsr $ffff SELF MODIFIED jsr GO.A2osX rts DRV.BLK.P .BS 6 *-------------------------------------- * Smartport Driver *-------------------------------------- DRV.SmartPort cld >STYA pIOCTL >STYA .3 smartport Params txa lsr sta .2 tax lda DRV.SmartPort.Cnt,x sta (pIOCTL) S.IOCTL.CNT ldy #S.FD.DEV.DEVID lda (pFD),y ldy #S.IOCTL.UNITNUM sta (pIOCTL),y ldy #S.FD.DEV.BUSPTR lda (pFD),y sta .1+1 iny lda (pFD),y sta .1+2 jsr GO.ProDOS Remapped SP .1 jsr $ffff .2 .BS 1 .3 .BS 2 jsr GO.A2osX rts DRV.SmartPort.Cnt .HS 03030301030101010404 *-------------------------------------- * NULL DEVICE * - OPEN,WRITE,CLOSE always succeed. * - READ returns EOF. *-------------------------------------- DRV.NULL cld >STYA pIOCTL txa beq DRV.NULL.S jmp (.1-12,x) *-------------------------------------- .1 * .DA DRV.NULL.STATUS * .DA A2osX.BADCALL READBLOCK * .DA A2osX.BADCALL WRITEBLOCK * .DA A2osX.BADCALL FORMAT * .DA A2osX.BADCALL CONTROL * .DA A2osX.BADCALL INIT .DA DRV.CLCRTS OPEN .DA DRV.CLCRTS CLOSE .DA DRV.NULL.R .DA DRV.CLCRTS WRITE *-------------------------------------- DRV.NULL.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED .DA #0,#0,#0 .PS "NULL Device" .BS 5 .DA #S.DIB.T.CHAR .DA #0 .DA K.VER *-------------------------------------- DRV.NULL.S >LDYAI DRV.NULL.DIB *-------------------------------------- DRV.STATUS.YA >STYA .2+1 ldy #S.IOCTL.S lda (pIOCTL),y beq .1 cmp #S.IOCTL.S.GETDIB bne .9 ldx #S.DIB-1 .HS 2C bit abs .1 ldx #3 ldy #S.IOCTL.BUFPTR lda (pIOCTL),y sta .3+1 iny lda (pIOCTL),y sta .3+2 .2 lda $ffff,x SELF MODIFIED .3 sta $ffff,x SELF MODIFIED dex bpl .2 clc rts .9 lda #MLI.E.BADCTL sec rts *-------------------------------------- DRV.NULL.R ldx #C.EOF ldy #S.IOCTL.BYTECNT lda #1 sta (pIOCTL),y iny dec sta (pIOCTL),y ldy #S.IOCTL.BUFPTR lda (pIOCTL),y sta .1+1 iny lda (pIOCTL),y sta .1+2 .1 stx $ffff SELF MODIFIED *-------------------------------------- DRV.CLCRTS clc rts *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.drv LOAD usr/src/sys/kernel.s ASM