PR#3 PREFIX /A2OSX.BUILD LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- * 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.DEVSTAT >STYA K.S.PORTCALL+2 lda #3 sta K.S.PORTCALL+4 jsr A2osX.PrtDrv.Go bcs .9 >LDYAI K.S.DEVSTAT .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.S.PORTCALL rts *-------------------------------------- A2osX.PrtDrv.GetParam >STYA ZPDRV Get Ptr To ParamList jsr A2osX.Blk.GetCmdAndDev ldy #7 .1 lda (ZPDRV),y sta K.S.PORTCALL+2,y dey bpl .1 rts *-------------------------------------- A2osX.PrtDrv.GetDev txa lsr sta A2osX.PrtDrv.Go.Cmd tax lda A2osX.PrtDrv.Cnt,x sta K.S.PORTCALL ldy #S.DEV.DEVID lda (pDev),y sta K.S.PORTCALL+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.DEVSTAT.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.DEVSTAT.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 php phy pha lda DevMgr.SYS.BASEL,x sta ZPDRV lda DevMgr.SYS.BASEH,x sta ZPDRV+1 tya lsr tay bcs .2 sta SETWRITEAUX .2 pla sta (ZPDRV),y sta CLRWRITEAUX ply plp 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