A2osX/DRV/CONSOLE.DRV.S.txt

346 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
2015-06-03 18:30:57 +00:00
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I
2015-03-14 21:48:35 +00:00
.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.SysScrPPSTRYA
lda A2osX.SCREENS
ora #A2osX.SCREENS.C
sta A2osX.SCREENS
clc
rts
CS.END
MSG.DETECT >PSTRING "\nApple IIe/IIc 80 Col Driver."
*--------------------------------------
* 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
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
beq .9
jsr CURBLNK
.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
*--------------------------------------
2015-06-03 18:30:57 +00:00
COUT1 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 #13
beq CROUT
2015-06-03 18:30:57 +00:00
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
2015-06-03 18:30:57 +00:00
lda RD80STORE
pha
2015-03-14 21:48:35 +00:00
sta SET80STORE
.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 SETPAGE2
.2 lda (ZPBASL2),y
sta (ZPBASL1),y
dey
bpl .2
ldy #39
sta CLRPAGE2
.3 lda (ZPBASL2),y
sta (ZPBASL1),y
dey
bpl .3
cpx #23
bne .1
2015-06-03 18:30:57 +00:00
jsr CLREOL
pla
bmi .8
sta CLR80STORE
2015-03-14 21:48:35 +00:00
2015-06-03 18:30:57 +00:00
.8 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
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
lda RD80STORE
pha
sta SET80STORE
ldx #23
.1 lda BASEL,x
sta ZPBASL1
lda BASEH,x
sta ZPBASL1+1
lda #' '
ora INVFLG
sta CLRPAGE2
ldy #39
.2 sta (ZPBASL1),y
dey
bpl .2
sta SETPAGE2
ldy #39
.3 sta (ZPBASL1),y
dey
bpl .3
dex
bpl .1
pla
2015-06-03 18:30:57 +00:00
bmi .8
2015-03-14 21:48:35 +00:00
sta CLR80STORE
.8 rts
*--------------------------------------
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
lda RD80STORE
pha
sta SET80STORE
txa
lsr
bcc .1
clc
sta CLRPAGE2
bra .2
.1 sta SETPAGE2
.2 adc BASEL,y
sta ZPBASL1
lda BASEH,y
sta ZPBASL1+1
plx
pla
sta (ZPBASL1)
2015-06-03 18:30:57 +00:00
txa
bmi .8
2015-03-14 21:48:35 +00:00
sta CLR80STORE
2015-06-03 18:30:57 +00:00
.8 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
GetCharAtXY lda RD80STORE
pha
sta SET80STORE
2015-03-14 21:48:35 +00:00
txa
lsr
bcc .1
clc
sta CLRPAGE2
bra .2
.1 sta SETPAGE2
.2 adc BASEL,y
sta ZPBASL1
lda BASEH,y
sta ZPBASL1+1
lda (ZPBASL1)
plx
2015-06-03 18:30:57 +00:00
bmi .8
sta CLR80STORE
2015-06-03 18:30:57 +00:00
.8 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