mirror of
https://github.com/A2osX/A2osX.git
synced 2024-12-27 18:30:51 +00:00
367 lines
6.4 KiB
Plaintext
367 lines
6.4 KiB
Plaintext
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/A2OSX.API.I
|
||
.INB INC/KERNEL.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.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
|
||
.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
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
GETEVENT lda A2osX.TIMER16
|
||
and #CURSOR.BLINK.SPEED
|
||
eor CURON
|
||
beq .1
|
||
jsr CURBLNK
|
||
|
||
.1 lda A2osX.SCREENS
|
||
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
|
||
|
||
lda RD80STORE
|
||
pha
|
||
|
||
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
|
||
jsr CLREOL
|
||
pla
|
||
bmi .8
|
||
sta CLR80STORE
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
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
|
||
|
||
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
|
||
bmi .8
|
||
sta CLR80STORE
|
||
|
||
.8 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
|
||
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)
|
||
txa
|
||
bmi .8
|
||
sta CLR80STORE
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
GetCharAtXY 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
|
||
|
||
lda (ZPBASL1)
|
||
|
||
plx
|
||
bmi .8
|
||
sta CLR80STORE
|
||
|
||
.8 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
|