A2osX/DRV/CONSOLE.DRV.S.txt

332 lines
6.1 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
2015-03-14 21:48:35 +00:00
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
2015-06-03 18:30:57 +00:00
.TF /A2OSX.BOOT/DRV/CONSOLE.DRV
2015-03-14 21:48:35 +00:00
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/IO.I
*--------------------------------------
2015-06-03 18:30:57 +00:00
CURSOR.BLINK.SPEED .EQ 2
*--------------------------------------
2015-03-14 21:48:35 +00:00
ZPBASL1 .EQ ZPDRV
ZPBASL2 .EQ ZPDRV+2
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
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
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* Relocation Table
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
L.MSG.DETECT .DA MSG.DETECT
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL SYS.PSTROutYA
2015-06-03 18:30:57 +00:00
lda A2osX.SCREENS
ora #A2osX.SCREENS.C
sta A2osX.SCREENS
clc
rts
CS.END
MSG.DETECT >PSTRING "Apple IIe/IIc 80 Col Driver.\n"
2015-06-03 18:30:57 +00:00
*--------------------------------------
* 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
2015-03-14 21:48:35 +00:00
.DA GETEVENT
2015-06-03 18:30:57 +00:00
.DA COUT
2015-03-14 21:48:35 +00:00
.DA CLOSE
.DA GETINFO
2015-06-03 18:30:57 +00:00
.DA IRQ
L.DEVINFO .DA DEVINFO
2015-03-14 21:48:35 +00:00
.DA 0 end or relocation
*--------------------------------------
OPEN stz CURON
lda #$80
sta INVFLG
jsr HOME
lda #A2osX.SCREENS.C
>SYSCALL SYS.ScreenSelectA
2015-03-14 21:48:35 +00:00
clc
rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
GETEVENT lda A2osX.TIMER16
2015-03-14 21:48:35 +00:00
and #CURSOR.BLINK.SPEED
eor CURON
2015-10-19 20:35:00 +00:00
beq .1
2015-03-14 21:48:35 +00:00
jsr CURBLNK
2015-10-19 20:35:00 +00:00
.1 lda A2osX.ASCREEN
2015-10-19 20:35:00 +00:00
and #A2osX.SCREENS.C is screen active?
beq .9
>SYSCALL SYS.GetKeyboardEvent
bcs .9
rts
2015-03-14 21:48:35 +00:00
.9 lda #0 Error = no event
sec
rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
COUT jsr COUT1
2015-03-14 21:48:35 +00:00
clc
rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
CLOSE
* lda A2osX.SCREENS
* and #$FF^A2osX.SCREENS.C
* sta A2osX.SCREENS
2015-03-14 21:48:35 +00:00
clc
rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
GETINFO >LDYA L.DEVINFO
IRQ clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
COUT1 pha
jsr CUROFF
pla
cmp #32
bcs .80 regular char
cmp #8
2015-03-14 21:48:35 +00:00
bne .2
ldx CH
beq .10
dec CH
bra .12
.10 ldy CV
bne .11
rts
.11 lda #79
sta CH
dec CV
2015-06-03 18:30:57 +00:00
.12 lda #$20
ora INVFLG
2015-03-14 21:48:35 +00:00
ldx CH
ldy CV
jsr SetCharAtXY
rts
.2 cmp #12
bne .3
jmp HOME
.3 cmp #13
2015-03-14 21:48:35 +00:00
beq CROUT
rts
.80 ora INVFLG
2015-03-14 21:48:35 +00:00
ldx CH
ldy CV
jsr SetCharAtXY
FSOUT ldx CH
cpx #79
beq CROUT1
inc CH
rts
*--------------------------------------
CROUT jsr CLREOL
2015-06-03 18:30:57 +00:00
*--------------------------------------
2015-03-14 21:48:35 +00:00
CROUT1 stz CH
ldy CV
cpy #23
beq SCROLL.UP
inc CV
rts
2015-06-03 18:30:57 +00:00
*--------------------------------------
2015-03-14 21:48:35 +00:00
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
2015-03-14 21:48:35 +00:00
.2 lda (ZPBASL2),y
sta (ZPBASL1),y
dey
bpl .2
ldy #39
sta CLRWRITEAUX
sta CLRREADAUX
2015-03-14 21:48:35 +00:00
.3 lda (ZPBASL2),y
sta (ZPBASL1),y
dey
bpl .3
cpx #23
bne .1
*--------------------------------------
CLREOL ldx CH
.1 phx
ldy CV
2015-06-03 18:30:57 +00:00
lda #$20
ora INVFLG
2015-03-14 21:48:35 +00:00
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
2015-03-14 21:48:35 +00:00
ldy #39
2015-03-14 21:48:35 +00:00
.2 sta (ZPBASL1),y
dey
bpl .2
sta CLRWRITEAUX
sta CLRREADAUX
2015-03-14 21:48:35 +00:00
ldy #39
.3 sta (ZPBASL1),y
dey
bpl .3
dex
bpl .1
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
CUROFF lda CURON
beq CUREXIT.RTS
2015-06-03 18:30:57 +00:00
CURBLNK lda A2osX.ASCREEN
2015-03-14 21:48:35 +00:00
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
2015-03-14 21:48:35 +00:00
sta ZPBASL1
lda BASEH,y
sta ZPBASL1+1
pla
sta (ZPBASL1)
sta CLRWRITEAUX
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
GetCharAtXY txa
2015-03-14 21:48:35 +00:00
lsr
bcs .1
sta SETREADAUX
.1 clc
adc BASEL,y
2015-03-14 21:48:35 +00:00
sta ZPBASL1
lda BASEH,y
sta ZPBASL1+1
lda (ZPBASL1)
sta CLRREADAUX
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
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
2015-03-14 21:48:35 +00:00
CH .BS 1
CV .BS 1
INVFLG .BS 1
CURON .BS 1
CURCHAR .BS 1
2015-06-03 18:30:57 +00:00
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
.DA #80
.DA #24
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
SAVE DRV/CONSOLE.DRV.S
ASM