A2osX/DRV/MOUSE.DRV.S.txt
2015-03-23 08:28:03 +01:00

272 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF DRV/MOUSE.DRV
*--------------------------------------
.INB INC/MACROS.I
.INB INC/IO.I
.INB INC/A2OSX.I
*--------------------------------------
ZPGoMouse .EQ ZPDRV
ZPTmpPtr1 .EQ ZPDRV+2
*--------------------------------------
EVENT.MOUSEUP .EQ %00000001
EVENT.MOUSEDOWN .EQ %00000010
EVENT.MOUSEMOVE .EQ %00000100
EVENT.MOUSEDRAG .EQ %00001000
EVENT.MOUSECLK .EQ %00010000
EVENT.MOUSEDCLK .EQ %00100000
*--------------------------------------
SETMOUSE .EQ $12 Sets mouse mode
SERVEMOUSE .EQ $13 Services mouse interrupt
READMOUSE .EQ $14 Reads mouse position
CLEARMOUSE .EQ $15 Clears mouse position to 0 (for delta mode)
POSMOUSE .EQ $16 Sets mouse position to a user-defined pos
CLAMPMOUSE .EQ $17 Sets mouse bounds in a window
HOMEMOUSE .EQ $18 Sets mouse to upper-left corner of clamp win
INITMOUSE .EQ $19 Resets mouse clamps to default values,sets mouse position to 0,0
LOCLAMPLO .EQ $0478 low byte of low clamp.
HICLAMPLO .EQ $04F8 low byte of high clamp.
LOCLAMPHI .EQ $0578 high byte of low clamp.
HICLAMPHI .EQ $05F8 high byte of high clamp.
MOUSEXLOx .EQ $0478
MOUSEYLOx .EQ $04F8
MOUSEXHIx .EQ $0578
MOUSEYHIx .EQ $05F8
MOUSESTSx .EQ $0778
MOUSESTSx.DOWN .EQ %10000000
MOUSESTSx.LDOWN .EQ %01000000
MOUSESTSx.MOVED .EQ %00100000
*--------------------------------------
* Main DRV entry point
* input :
* X = CMD
* 0 : OPEN
* 2 : GETEVENT
* 4 : OUT
* 6 : CLOSE
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA OPEN
.DA GETEVENT
.DA OUT
.DA CLOSE
.DA 0 end or relocation
.DA CS.END-CS.START
*--------------------------------------
OPEN stz ZPTmpPtr1
lda #$C1
sta ZPTmpPtr1+1
.1 ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .10
.3 inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1
cmp #$C8
bne .1
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
sec
rts
.10 lda ZPTmpPtr1+1
and #$0F
sta DEVSLOT0n
pha
ora #$30
sta DEVNAME+4
pla
ora #$C0
sta DEVSLOTCn
asl
asl
asl
asl
sta DEVSLOTn0
ldx #0
ldy #S.DEV.NAME
.4 lda DEVNAME,x
sta (pDevContext),y
cpx DEVNAME
beq .5
inx
iny
bne .4
.5 bit RROMBNK2 Renable ROM to allow MOUSE II firmware
php to read IIe ROM ID bytes
sei
lda RD80STORE
pha
sta CLR80STORE
lda #1 Enable, Polling mode
ldy #SETMOUSE
jsr GOMOUSE
ldy #INITMOUSE Reset
jsr GOMOUSE
stz LOCLAMPLO
stz LOCLAMPHI
lda #559
sta HICLAMPLO
lda /559
sta HICLAMPHI
lda #0 set X
ldy #CLAMPMOUSE
jsr GOMOUSE
stz LOCLAMPLO
stz LOCLAMPHI
lda #191
sta HICLAMPLO
lda /191
sta HICLAMPHI
lda #1 set Y
ldy #CLAMPMOUSE
jsr GOMOUSE
ldy #HOMEMOUSE
jsr GOMOUSE
pla
bpl .6
sta SET80STORE
.6 plp
lda #S.DEV.F.MOUSE+S.DEV.F.EVENT
sta (pDevContext)
clc
rts
*--------------------------------------
GETEVENT >PULLW pEvent
php
sei
lda RD80STORE
pha
sta CLR80STORE
ldy #READMOUSE
jsr GOMOUSE
ldx DEVSLOT0n
ldy #S.EVT.DATALO
lda MOUSESTSx,x
and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .3 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .3 no button state change:down & previously down
asl if CS, down & previoulsy up
bcc .1
lda #EVENT.MOUSEUP
bra .2
.1 lda #EVENT.MOUSEDOWN
.2 sta (pEvent),y
.3 lda MOUSESTSx,x
and #MOUSESTSx.MOVED
beq .4
lda (pEvent),y
ora #EVENT.MOUSEMOVE
sta (pEvent),y
ldy #S.EVT.DATAW1
lda MOUSEXLOx,x
sta (pEvent),y
iny
lda MOUSEXHIx,x
sta (pEvent),y
iny
lda MOUSEYLOx,x
sta (pEvent),y
iny
lda MOUSEYHIx,x
sta (pEvent),y
.4 pla
bpl .5
sta SET80STORE
.5 plp
ldy #S.EVT.DATALO
lda (pEvent),y
beq .9
lda #S.EVT.F.MOUSE
sta (pEvent)
clc
rts
.9 sec A=0 : no event
rts
*--------------------------------------
OUT clc
rts
*--------------------------------------
CLOSE php
sei
lda #0 Disable
ldy #SETMOUSE
jsr GOMOUSE
plp
clc
rts
*--------------------------------------
GOMOUSE pha
stz ZPGoMouse
ldx DEVSLOTCn
stx ZPGoMouse+1
lda (ZPGoMouse),y
sta ZPGoMouse
ldy DEVSLOTn0
pla
jmp (ZPGoMouse)
*--------------------------------------
CS.END
DEVSIG.Offset .HS 05070B0CFB
DEVSIG.Value .HS 38180120D6
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
DEVNAME >PSTRING "MOU0"
DEVSLOT0n .BS 1
DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1
*--------------------------------------
MAN
SAVE DRV/MOUSE.DRV.S
ASM