PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/DRV/CONSOLE.DRV *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/IO.I *-------------------------------------- CURSOR.BLINK.SPEED .EQ 2 *-------------------------------------- ZPBASL1 .EQ ZPDRV ZPBASL2 .EQ ZPDRV+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp Dev.Detect cld,jmp abs=DRV .DA #$61 6502,Level 1 (65c02) .DA #1 DRV Layout Version 1 .DA 0 .DA CS.END-CS.START Code Length .DA DEV.HEADER-CS.START Device Header Offset .DA DRV.CS.START-CS.START Driver Code Offset .DA DRV.CS.END-DRV.CS.START Drv Code Length *-------------------------------------- * Relocation Table *-------------------------------------- L.MSG.DETECT .DA MSG.DETECT .DA 0 End Of Reloc Table *-------------------------------------- Dev.Detect >LDYA L.MSG.DETECT >SYSCALL SYS.PSTROutYA lda A2osX.SCREENS ora #A2osX.SCREENS.C sta A2osX.SCREENS clc rts CS.END MSG.DETECT >PSTRING "Apple IIe/IIc 80 Col Driver.\n" *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) .DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR >PSTRING "CON" NAME .HS 00 NAME must Be 5 bytes long .HS 00.00 .HS 00.00.00.00 *-------------------------------------- * Driver Code *-------------------------------------- DRV.CS.START .DA OPEN .DA GETEVENT .DA COUT .DA CLOSE .DA GETINFO .DA IRQ L.DEVINFO .DA DEVINFO .DA 0 end or relocation *-------------------------------------- OPEN stz CURON lda #$80 sta INVFLG jsr HOME lda #A2osX.SCREENS.C >SYSCALL SYS.ScreenSelectA clc rts *-------------------------------------- GETEVENT lda A2osX.TIMER16 and #CURSOR.BLINK.SPEED eor CURON beq .1 jsr CURBLNK .1 lda A2osX.ASCREEN and #A2osX.SCREENS.C is screen active? beq .9 >SYSCALL SYS.GetKeyboardEvent bcs .9 rts .9 lda #0 Error = no event sec rts *-------------------------------------- COUT jsr COUT1 clc rts *-------------------------------------- CLOSE * lda A2osX.SCREENS * and #$FF^A2osX.SCREENS.C * sta A2osX.SCREENS clc rts *-------------------------------------- GETINFO >LDYA L.DEVINFO IRQ clc rts *-------------------------------------- * PRIVATE *-------------------------------------- COUT1 pha jsr CUROFF pla cmp #32 bcs .80 regular char cmp #8 bne .2 ldx CH beq .10 dec CH bra .12 .10 ldy CV bne .11 rts .11 lda #79 sta CH dec CV .12 lda #$20 ora INVFLG ldx CH ldy CV jsr SetCharAtXY rts .2 cmp #12 bne .3 jmp HOME .3 cmp #13 beq CROUT rts .80 ora INVFLG ldx CH ldy CV jsr SetCharAtXY FSOUT ldx CH cpx #79 beq CROUT1 inc CH rts *-------------------------------------- CROUT jsr CLREOL *-------------------------------------- CROUT1 stz CH ldy CV cpy #23 beq SCROLL.UP inc CV rts *-------------------------------------- SCROLL.UP ldx #0 .1 lda BASEL,x sta ZPBASL1 lda BASEH,x sta ZPBASL1+1 inx lda BASEL,x sta ZPBASL2 lda BASEH,x sta ZPBASL2+1 ldy #39 sta SETWRITEAUX sta SETREADAUX .2 lda (ZPBASL2),y sta (ZPBASL1),y dey bpl .2 ldy #39 sta CLRWRITEAUX sta CLRREADAUX .3 lda (ZPBASL2),y sta (ZPBASL1),y dey bpl .3 cpx #23 bne .1 *-------------------------------------- CLREOL ldx CH .1 phx ldy CV lda #$20 ora INVFLG jsr SetCharAtXY plx inx cpx #80 bne .1 rts *-------------------------------------- HOME stz CH stz CV ldx #23 .1 lda BASEL,x sta ZPBASL1 lda BASEH,x sta ZPBASL1+1 lda #' ' ora INVFLG sta SETWRITEAUX sta SETREADAUX ldy #39 .2 sta (ZPBASL1),y dey bpl .2 sta CLRWRITEAUX sta CLRREADAUX ldy #39 .3 sta (ZPBASL1),y dey bpl .3 dex bpl .1 rts *-------------------------------------- CUROFF lda CURON beq CUREXIT.RTS CURBLNK lda A2osX.ASCREEN and #A2osX.SCREENS.C bne CURBLNK1 lda CURON bne CURBLNK.OFF rts do not Light if screen is not active CURBLNK1 lda CURON bne CURBLNK.OFF ldx CH ldy CV jsr GetCharAtXY sta CURCHAR ldx CH ldy CV lda #$20 jsr SetCharAtXY bra CUREXIT CURBLNK.OFF ldx CH ldy CV lda CURCHAR jsr SetCharAtXY CUREXIT lda CURON eor #CURSOR.BLINK.SPEED sta CURON CUREXIT.RTS rts *-------------------------------------- SetCharAtXY pha txa lsr bcs .1 sta SETWRITEAUX .1 clc adc BASEL,y sta ZPBASL1 lda BASEH,y sta ZPBASL1+1 pla sta (ZPBASL1) sta CLRWRITEAUX rts *-------------------------------------- GetCharAtXY txa lsr bcs .1 sta SETREADAUX .1 clc adc BASEL,y sta ZPBASL1 lda BASEH,y sta ZPBASL1+1 lda (ZPBASL1) sta CLRREADAUX rts *-------------------------------------- DRV.CS.END 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 BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07 CH .BS 1 CV .BS 1 INVFLG .BS 1 CURON .BS 1 CURCHAR .BS 1 DEVINFO .DA #S.DEVINFO.TYPE.CHAR .DA #80 .DA #24 *-------------------------------------- MAN SAVE DRV/CONSOLE.DRV.S ASM