PR#3 PREFIX /A2OSX.BUILD LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- * A2osX.DIIDrv * X = DEVMGR.cmd * Y,A = PTR to Params * pDev -> Dev Header AUX!!! * $42 Command Number * $43 Unit Number * $44-$45 Buffer Pointer * $46-$47 Block Number *-------------------------------------- A2osX.DIIDrv .DA A2osX.DIIDrv.S status .DA A2osX.DIIDrv.RW Read .DA A2osX.DIIDrv.RW Write .DA A2osX.BadCall Format .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall *-------------------------------------- A2osX.DIIDrv.S >LDYAI A2osx.DII.Stat clc rts *-------------------------------------- A2osX.DIIDrv.RW >STYA GO.RW.SrcDst+1 jsr A2osX.Blk.GetCmdAndDevAX jmp GO.DiskII.RW *-------------------------------------- A2osx.DII.Stat .DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ .DA 280 .DA #0 >PSTR "Disk II 5.25" .BS 4 .DA #S.DSTAT.T.DISKII .DA #0 .DA #0,#9 *-------------------------------------- * A2osX.RamDrv * X = DEVMGR.cmd * Y,A = PTR to Params * pDev -> Dev Header AUX!!! * $42 Command Number * $43 Unit Number * $44-$45 Buffer Pointer * $46-$47 Block Number *-------------------------------------- A2osX.RamDrv .DA A2osX.RamDrv.S status .DA A2osX.RamDrv.RW Read .DA A2osX.RamDrv.RW Write .DA A2osX.BadCall Format .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall *-------------------------------------- A2osX.RamDrv.S jsr A2osX.Blk.GetCmdAndDevAX jsr GO.RamDrv.S bcs .9 stx A2osx.RamDrv.Stat+S.DSTAT.SIZE sty A2osx.RamDrv.Stat+S.DSTAT.SIZE+1 >LDYAI A2osX.RamDrv.Stat clc .9 rts *-------------------------------------- A2osX.RamDrv.RW >STYA GO.RW.SrcDst+1 jsr A2osX.Blk.GetCmdAndDevAX jmp GO.RamDrv.RW *-------------------------------------- A2osx.RamDrv.Stat .DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ .BS 3 >PSTR "ProDOS /RAM Disk" .DA #S.DSTAT.T.RAM .DA #0 .DA #0,#9 *-------------------------------------- * A2osX.BlkDrv * X = DEVMGR.cmd * Y,A = PTR to Params * pDev -> Dev Header * $42 Command Number * $43 Unit Number * $44-$45 Buffer Pointer * $46-$47 Block Number *-------------------------------------- A2osX.BlkDrv .DA A2osX.BlkDrv.S status .DA A2osX.BlkDrv.RW .DA A2osX.BlkDrv.RW .DA A2osX.BlkDrv.F .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall *-------------------------------------- A2osX.BlkDrv.S jsr A2osX.Blk.GetCmdAndDev jsr A2osX.BlkDrv.Go bcs .9 stx A2osx.Blk.Stat+S.DSTAT.SIZE sty A2osx.Blk.Stat+S.DSTAT.SIZE+1 >LDYAI A2osX.Blk.Stat clc .9 rts *-------------------------------------- A2osX.BlkDrv.RW >STYA A2osX.Blk.GetParam.1+1 jsr A2osX.Blk.GetCmdAndDev jsr A2osX.Blk.GetParam bra A2osX.BlkDrv.Go *-------------------------------------- A2osX.BlkDrv.F jsr A2osX.Blk.GetCmdAndDev A2osX.BlkDrv.Go ldy #S.DEV.ROM.JMP lda (pDev),y sta .8+1 iny lda (pDev),y sta .8+2 .8 jmp $ffff *-------------------------------------- A2osX.Blk.GetParam ldy #3 A2osX.Blk.GetParam.1 lda $ffff,y Self Modified sta $44,y dey bpl A2osX.Blk.GetParam.1 rts *-------------------------------------- A2osX.Blk.GetCmdAndDev jsr A2osX.Blk.GetCmdAndDevAX stx $42 sta $43 rts A2osX.Blk.GetCmdAndDevAX txa lsr tax CMD ldy #S.DEV.DEVID Drive 1, or 2 lda (pDev),y dec O or 1 lsr in Carry php ldy #S.DEV.BUSID lda (pDev),y asl asl asl asl asl plp ror DSSS0000 rts *-------------------------------------- A2osX.Blk.Stat .DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ .BS 3 >PSTR "ProDOS Block Dev" .DA #S.DSTAT.T.PRODOS .DA #0 .DA #0,#9 *-------------------------------------- * Smartport Driver *-------------------------------------- A2osX.PrtDrv .DA A2osX.PrtDrv.S STATUS .DA A2osX.PrtDrv.P BR .DA A2osX.PrtDrv.P BW .DA A2osX.PrtDrv.NP FORMAT .DA A2osX.PrtDrv.P CONTROL .DA A2osX.PrtDrv.NP INIT .DA A2osX.PrtDrv.NP OPEN .DA A2osX.PrtDrv.NP CLOSE .DA A2osX.PrtDrv.P R .DA A2osX.PrtDrv.P W *-------------------------------------- A2osX.PrtDrv.S jsr A2osX.PrtDrv.GetDev >LDYAI K.S.DSTAT >STYA K.SP.PARAMS+2 lda #3 sta K.SP.PARAMS+4 jsr A2osX.PrtDrv.Go bcs .9 >LDYAI K.S.DSTAT .9 rts *-------------------------------------- A2osX.PrtDrv.P jsr A2osX.PrtDrv.GetParam bra A2osX.PrtDrv.Go A2osX.PrtDrv.NP jsr A2osX.PrtDrv.GetDev *-------------------------------------- A2osX.PrtDrv.Go ldy #S.DEV.ROM.JMP lda (pDev),y sta .8+1 iny lda (pDev),y sta .8+2 .8 jsr $ffff A2osX.PrtDrv.Go.Cmd .BS 1 .DA K.SP.PARAMS rts *-------------------------------------- A2osX.PrtDrv.GetParam >STYA ZPDRV Get Ptr To ParamList jsr A2osX.Blk.GetCmdAndDev ldy #7 .1 lda (ZPDRV),y sta K.SP.PARAMS+2,y dey bpl .1 rts *-------------------------------------- A2osX.PrtDrv.GetDev txa lsr sta A2osX.PrtDrv.Go.Cmd tax lda A2osX.PrtDrv.Cnt,x sta K.SP.PARAMS ldy #S.DEV.DEVID lda (pDev),y sta K.SP.PARAMS+1 rts A2osX.PrtDrv.Cnt .HS 03030301030101010404 *-------------------------------------- DevMgr.NUL.Code .DA .1 STATUS .DA A2osX.BADCALL READBLOCK .DA A2osX.BADCALL WRITEBLOCK .DA A2osX.BADCALL FORMAT .DA A2osX.BADCALL CONTROL .DA A2osX.BADCALL INIT .DA A2osX.BADCALL OPEN .DA A2osX.BADCALL CLOSE .DA A2osX.BADCALL READ .DA .8 WRITE .8 clc rts *-------------------------------------- .1 >LDYAI .2 clc rts *-------------------------------------- .2 .DA #S.DEV.S.WRITE+S.DEV.S.READ .DA #0,#0,#0 >PSTR "NULL DEVICE " .DA #S.DSTAT.T.CHAR .DA #0 .DA $0900 *-------------------------------------- DevMgr.SYS.Code .DA .1 STATUS .DA A2osX.BADCALL READBLOCK .DA A2osX.BADCALL WRITEBLOCK .DA A2osX.BADCALL FORMAT .DA DevMgr.SYS.Control .DA A2osX.BADCALL INIT .DA DevMgr.SYS.Open .DA A2osX.BADCALL CLOSE .DA DevMgr.SYS.Read .DA DevMgr.SYS.Write *-------------------------------------- .1 >LDYAI .2 clc rts *-------------------------------------- .2 .DA #S.DEV.S.WRITE+S.DEV.S.READ .DA #0,#0,#0 >PSTR "A2osX SYS Screen" .DA #S.DSTAT.T.CHAR .DA #0 .DA $0900 *-------------------------------------- DevMgr.SYS.Open stz DevMgr.SYS.CH stz DevMgr.SYS.CV ldx #0 ldy #0 .1 lda DevMgr.SYS.TITLE,y beq .2 jsr DevMgr.SYS.SetCharAtYX iny bne .1 .2 lda #$20 jsr DevMgr.SYS.SetCharAtYX iny cpy #80 bne .2 jsr DevMgr.SYS.Home lda #1 sta A2osX.SCRNDEVS+1 fall in Control *-------------------------------------- DevMgr.SYS.Control sta SETTEXT sta SETALTCHAR sta SET80DISP sta CLR80STORE sta SETPAGE2 lda #2 sta A2osX.ASCREEN clc rts *-------------------------------------- DevMgr.SYS.Read lda A2osX.ASCREEN cmp #2 is SYS active? bne .9 lda OPENAPPLE bmi .9 Open apple key, not for us... lda KBD bpl .9 sta KBDSTROBE and #$7F clc rts .9 lda #0 Error = no event sec rts *-------------------------------------- DevMgr.SYS.Write phx phy cmp #' ' bcc .1 ldy DevMgr.SYS.CH ldx DevMgr.SYS.CV ora #$80 jsr DevMgr.SYS.SetCharAtYX jsr DevMgr.SYS.FSOut bra .8 .1 cmp #10 bne .2 jsr DevMgr.SYS.LF bra .8 .2 cmp #13 bne .3 jsr DevMgr.SYS.CR bra .8 .3 ora #$20 jsr DevMgr.SYS.SetCharAtYX jsr DevMgr.SYS.FSOut .8 ply plx clc rts *-------------------------------------- DevMgr.SYS.FSOut lda DevMgr.SYS.CH cmp #79 bne .1 stz DevMgr.SYS.CH bra DevMgr.SYS.LF .1 inc DevMgr.SYS.CH rts *-------------------------------------- DevMgr.SYS.CR jsr DevMgr.SYS.ClrEOL stz DevMgr.SYS.CH rts *-------------------------------------- DevMgr.SYS.LF ldx DevMgr.SYS.CV cpx #23 beq DevMgr.SYS.Scroll inc DevMgr.SYS.CV rts *-------------------------------------- DevMgr.SYS.ClrEOL ldx DevMgr.SYS.CV lda #$A0 ldy DevMgr.SYS.CH .1 cpy #79 beq .2 jsr DevMgr.SYS.SetCharAtYX iny bne .1 .2 rts *-------------------------------------- DevMgr.SYS.Scroll ldx #1 .1 lda DevMgr.SYS.BASEL,x sta ZPDRV lda DevMgr.SYS.BASEH,x sta ZPDRV+1 inx lda DevMgr.SYS.BASEL,x sta ZPDRV+2 lda DevMgr.SYS.BASEH,x sta ZPDRV+3 php sei sta SETWRITEAUX sta SETREADAUX ldy #39 .2 lda (ZPDRV+2),y sta (ZPDRV),y dey bpl .2 sta CLRWRITEAUX sta CLRREADAUX plp ldy #39 .3 lda (ZPDRV+2),y sta (ZPDRV),y dey bpl .3 cpx #23 bne .1 Fall in ClrLineAtX for last line *-------------------------------------- DevMgr.SYS.ClrLineAtX lda DevMgr.SYS.BASEL,x sta ZPDRV lda DevMgr.SYS.BASEH,x sta ZPDRV+1 php sei lda #$A0 ldy #39 .1 sta SETWRITEAUX sta (ZPDRV),y sta CLRWRITEAUX sta (ZPDRV),y dey bpl .1 plp rts *-------------------------------------- DevMgr.SYS.Home ldx #23 .1 jsr DevMgr.SYS.ClrLineAtX dex bne .1 stz DevMgr.SYS.CH lda #1 sta DevMgr.SYS.CV rts *-------------------------------------- DevMgr.SYS.SetCharAtYX cmp #$40 bcc .1 cmp #$5F bcs .1 and #$3F .1 phy pha lda DevMgr.SYS.BASEL,x sta ZPDRV lda DevMgr.SYS.BASEH,x sta ZPDRV+1 tya lsr tay bcs .2 pla php sei sta SETWRITEAUX sta (ZPDRV),y sta CLRWRITEAUX plp ply rts .2 pla sta (ZPDRV),y ply rts *-------------------------------------- DevMgr.SYS.CH .BS 1 DevMgr.SYS.CV .BS 1 *-------------------------------------- DevMgr.SYS.TITLE >CSTR "A2osX System Screen" DevMgr.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 DevMgr.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B *-------------------------------------- DevMgr.FreeMem .EQ * MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.D01 LOAD /A2OSX.SRC/SYS/KERNEL.S ASM