Kernel 0.9.1 : DHGR Driver, BitBLT, mouse pointer, Off Screen Driver

This commit is contained in:
Rémy GIBERT 2017-11-28 17:32:38 +01:00
parent 2a14a04de4
commit 834d6b5054
9 changed files with 410 additions and 85 deletions

Binary file not shown.

Binary file not shown.

View File

@ -11,48 +11,12 @@ AUTO 6
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
.INB /A2OSX.BUILD/INC/XY.MOUSE.I
.INB /A2OSX.BUILD/INC/LIBGUI.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
* .EQ $0678
* .EQ $06F8
MOUSESTSx .EQ $0778
MOUSESTSx.DOWN .EQ %10000000
MOUSESTSx.LDOWN .EQ %01000000
MOUSESTSx.MOVED .EQ %00100000
MOUSESTSx.INTVBL .EQ %00001000
MOUSESTSx.INTBUT .EQ %00000100
MOUSESTSx.INTMOVE .EQ %00000010
MOUSEMODx .EQ $07F8
MOUSEMODx.INTVBL .EQ %00001000
MOUSEMODx.INTBUT .EQ %00000100
MOUSEMODx.INTMOVE .EQ %00000010
MOUSEMODx.ACTIVE .EQ %00000001
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
@ -168,30 +132,13 @@ READBLOCK >STYA ZPTmpPtr1
ldx DEVSLOT0n
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 & previously up
bcc .1
lda #EVENT.MOUSEUP
bra .2
.1 lda #EVENT.MOUSEDOWN
.2 sta (ZPTmpPtr1)
.3 lda MOUSESTSx,x
and #MOUSESTSx.MOVED
beq .4
beq .1
lda (ZPTmpPtr1)
ora #EVENT.MOUSEMOVE
lda #S.MOUSE.S.MOVE
sta (ZPTmpPtr1)
.4 ldy #1
ldy #S.MOUSE.X1
lda MOUSEXLOx,x
sta (ZPTmpPtr1),y
@ -208,12 +155,75 @@ READBLOCK >STYA ZPTmpPtr1
lda MOUSEYHIx,x
sta (ZPTmpPtr1),y
plp
stz bDblClick Reset DblClick flag
.1 lda MOUSESTSx,x
and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:down & previously down
asl if CS, down & previously up
bcc .2
lda #S.MOUSE.S.DOWN
ora (ZPTmpPtr1)
sta (ZPTmpPtr1) button has been pressed, start drag...
lda MOUSEXLOx,x
sta SrcDrag
iny
lda MOUSEXHIx,x
sta SrcDrag+1
iny
lda MOUSEYLOx,x
sta SrcDrag+2
iny
lda MOUSEYHIx,x
sta SrcDrag+3
bra .8
.2 lda #S.MOUSE.S.UP CC: up, previously down
tay
ora (ZPTmpPtr1)
sta (ZPTmpPtr1)
tya
bne .4 no move...click!
lda #S.MOUSE.S.CLK
bit bDblClick
beq .3
lda #S.MOUSE.S.DCLK
lda #1
sta bDblClick
.3 dec bDblClick
ora (ZPTmpPtr1)
sta (ZPTmpPtr1)
bra .8
.4 lda #S.MOUSE.S.DRAG
ora (ZPTmpPtr1)
sta (ZPTmpPtr1)
ldy #S.MOUSE.X2
.5 lda SrcDrag-S.MOUSE.X2,y
sta (ZPTmpPtr1),y
iny
cpy #S.MOUSE.X2+4
bne .5
.8 plp
lda (ZPTmpPtr1)
beq .9
clc
rts
@ -308,6 +318,8 @@ DRV.CS.END
DEVSLOT0n .BS 1
DEVSLOTn0 .BS 1
DEVSLOTCn .BS 1
bDblClick .BS 1
SrcDrag .BS 4
*--------------------------------------
DEVSTAT .DA #0
.DA #0,#0,#0 size
@ -315,7 +327,8 @@ DEVSTAT .DA #0
.BS 2
.DA #S.DSTAT.T.XY
.DA #0
.DA $0900
.DA #0
.DA #91
*--------------------------------------
MAN
SAVE /A2OSX.SRC/DRV/MOUSE.DRV.S

View File

@ -6,6 +6,14 @@ AUTO 6
.LIST OFF
.OP 65C02
*--------------------------------------
LIBGUI.InitGUI.A .EQ 4
LIBGUI.CloseGUI .EQ 6
LIBGUI.Draw .EQ 8
LIBGUI.SetCursor.A .EQ 10
LIBGUI.SetCursorPos .EQ 12
LIBGUI.HideCursor .EQ 14
LIBGUI.ShowCursor .EQ 16
*--------------------------------------
S.CB.CMD .EQ 0
S.CB.CMD.SETPIXEL .EQ 0
S.CB.CMD.GETPIXEL .EQ 2
@ -63,25 +71,30 @@ S.CUR.HotPointX .EQ 0
S.CUR.HotPointY .EQ 1
S.CUR.BM .EQ 2
*--------------------------------------
S.BM.F .EQ 0
S.BM.F .EQ 0
S.BM.F.BBP1 .EQ %00000001
S.BM.F.BBP2 .EQ %00000010
S.BM.F.BBP4 .EQ %00000100
S.BM.F.BBP8 .EQ %00001000
S.BM.RowBytes .EQ 1
S.BM.W .EQ 2
S.BM.H .EQ 4
S.BM.MASK.OFS .EQ 6
S.BM.RowBytes .EQ 1
S.BM.W .EQ 2
S.BM.H .EQ 4
S.BM.MASK.OFS .EQ 6
*
S.BM .EQ 8
S.BM .EQ 8
*--------------------------------------
LIBGUI.InitGUI.A .EQ 4
LIBGUI.CloseGUI .EQ 6
LIBGUI.Draw .EQ 8
LIBGUI.SetCursor.A .EQ 10
LIBGUI.SetCursorPos .EQ 12
LIBGUI.HideCursor .EQ 14
LIBGUI.ShowCursor .EQ 16
S.MOUSE.S .EQ 0
S.MOUSE.S.UP .EQ %00000001
S.MOUSE.S.DOWN .EQ %00000010
S.MOUSE.S.MOVE .EQ %00000100
S.MOUSE.S.DRAG .EQ %00001000
S.MOUSE.S.CLK .EQ %00010000
S.MOUSE.S.DCLK .EQ %00100000
S.MOUSE.X1 .EQ 1
S.MOUSE.Y1 .EQ 3
S.MOUSE.X2 .EQ 5
S.MOUSE.Y2 .EQ 7
S.MOUSE .EQ 9
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/INC/LIBGUI.I

42
INC/XY.MOUSE.I.txt Normal file
View File

@ -0,0 +1,42 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* //c Mouse Port, IIe Mouse Card
*--------------------------------------
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
* .EQ $0678
* .EQ $06F8
MOUSESTSx .EQ $0778
MOUSESTSx.DOWN .EQ %10000000
MOUSESTSx.LDOWN .EQ %01000000
MOUSESTSx.MOVED .EQ %00100000
MOUSESTSx.INTVBL .EQ %00001000
MOUSESTSx.INTBUT .EQ %00000100
MOUSESTSx.INTMOVE .EQ %00000010
MOUSEMODx .EQ $07F8
MOUSEMODx.INTVBL .EQ %00001000
MOUSEMODx.INTBUT .EQ %00000100
MOUSEMODx.INTMOVE .EQ %00000010
MOUSEMODx.ACTIVE .EQ %00000001
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/INC/XY.MOUSE.I

View File

@ -129,7 +129,7 @@ ShowCursor
rts
*--------------------------------------
* In: Control Block
* hDC
* CMD
* OP
* MODE
* COLOR

View File

@ -14,14 +14,14 @@
Kernel 0.9.1 stable enough to resume building.
+ KM.APPLETALK module not crashing anymore
(Undocummented AtInit function, had to go further in official ATINIT dissaembly)
(Undocummented AtInit function, had to go further in official ATINIT disassembly)
+ Improved Command Line editing and history.
(SUPPR key is emulated with Ctrl-X using //e keyboard)
+ New DevMgr enumeration stratey, now including /RAM and other virtual Block Devices
+ Math API (Hacked from APLLESOFT ROM ;-)
+ Math API (Hacked from APPLESOFT ROM ;-)
+ CSH Script engine in progress within Shell (In progress)

View File

@ -73,8 +73,8 @@ CS.INIT >LDYA L.MSG.INIT
>SYSCALL GetDevByName.YA
bcc .20
inc DEVNAME.MOUSE+4
lda DEVNAME.MOUSE+4
inc DEVNAME.MOUSE+3
lda DEVNAME.MOUSE+3
cmp #'8'
bne .11
beq .21 No mouse found, skip mouse init
@ -136,7 +136,7 @@ CS.RUN lda A2osX.ASCREEN GUI screen active ?
bcs .4 go check KB
lda MouseData
bit #4 mouse move
bit #S.MOUSE.S.MOVE
beq .1
lda MouseData+1
@ -161,10 +161,10 @@ CS.RUN lda A2osX.ASCREEN GUI screen active ?
>PUSHW L.SetPixel.CB
>LIBCALL hLIBGUI,LIBGUI.Draw
clc
rts
.1 bit #$20
lda MouseData
.1 bit #S.MOUSE.S.DOWN
beq .4
jsr Destop.Paint
@ -285,7 +285,7 @@ hLIBGUI .BS 1
hDevGFX .BS 1
hDevMouse .BS 1
MouseClamp .BS 8
MouseData .BS 5
MouseData .BS S.MOUSE
*--------------------------------------
Rect.CB .DA #S.CB.CMD.FILLRECT
.DA #S.CB.OP.SET

257
SBIN/GUIOSD.S.txt Normal file
View File

@ -0,0 +1,257 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/SBIN/GUIOSD
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/PRODOS.I
.INB /A2OSX.BUILD/INC/IO.I
.INB /A2OSX.BUILD/INC/LIBGUI.I
*--------------------------------------
A1L .EQ $3C
A2L .EQ $3E
A4L .EQ $42
MoveAux .EQ $C311
XFer .EQ $C314
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #0 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
.DA 0
*--------------------------------------
CS.INIT
lda #0
sec
rts
*--------------------------------------
CS.RUN clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
CS.END
*--------------------------------------
.PH $0C00
*--------------------------------------
ZPCmdPtr .EQ ZPDRV
ZPDestBMPtr .EQ ZPDRV+2
*--------------------------------------
* YA =Ptr to S.CB in MAIN****
* X = DestBM hMem
*--------------------------------------
GUIOSD >STYA A1L Src Start Address (MAIN)
pha
tya
clc
adc #S.CB
sta A2L Src End Address (MAIN)
pla
adc /S.CB
sta A2L+1
>LDYA CB.Cache
>STYA A4L Dst Address (AUX)
sec Main To Aux
jsr MoveAux
txa
ldx #SYS.GetMemPtr.A Get AUX Stock Object
jsr $E000 with GetMem
>STYA ZPDestBMPtr
ldx #0
.1 lda (ZPDestBMPtr)
sta DestBM.Cache,x
inc ZPDestBMPtr
bne .2
inc ZPDestBMPtr+1
.2 inx
cpx #S.BM
bne .1
ldx CB.Cache+S.CB.CMD
jmp (J.Cmds,x)
*--------------------------------------
J.Cmds .DA SETPIXEL
.DA GETPIXEL
.DA HLINE
.DA VLINE
.DA FILLRECT
.DA BITBLT
.DA GETRECTBUFSIZE
*--------------------------------------
SETPIXEL >LDYA CB.Cache+S.CB.Y1
ldx DestBM.Cache+S.BM.RowBytes
jsr YAMultX
pha
tya
clc
adc ZPDestBMPtr
sta ZPDestBMPtr
pla
adc ZPDestBMPtr+1
sta ZPDestBMPtr+1
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16
bne SETPIXEL.C16
SETPIXEL.MONO lda CB.Cache+S.CB.X1
pha
and #$7 MOD 7
tax
pla
lsr CB.Cache+S.CB.X1
ror
lsr CB.Cache+S.CB.X1
ror
lsr CB.Cache+S.CB.X1
ror
clc
adc ZPDestBMPtr
sta ZPDestBMPtr
lda CB.Cache+S.CB.X1
adc ZPDestBMPtr+1
sta ZPDestBMPtr+1
lda CB.Cache+S.CB.OP
* cmp #S.CB.OP.XOR
beq SETPIXEL.MONO.XOR
lda CB.Cache+S.CB.COLOR
bne SETPIXEL.MONO.WHITE
SETPIXEL.MONO.BLACK
lda (ZPDestBMPtr)
and Mono.NMasks,x
sta (ZPDestBMPtr)
rts
SETPIXEL.MONO.WHITE
lda (ZPDestBMPtr)
ora Mono.Masks,x
sta (ZPDestBMPtr)
rts
SETPIXEL.MONO.XOR
lda (ZPDestBMPtr)
eor Mono.Masks,x
sta (ZPDestBMPtr)
rts
SETPIXEL.C16
*--------------------------------------
GETPIXEL
*--------------------------------------
HLINE
*--------------------------------------
VLINE
*--------------------------------------
FILLRECT
*--------------------------------------
BITBLT
*--------------------------------------
GETRECTBUFSIZE
*--------------------------------------
*--------------------------------------
* IN:
* Y,A = num1 (16)
* X = num2 (8)
* OUT:
* Y,A = (Y,A) * X
*--------------------------------------
YAMultX stx GBYTE
sty GWORD
sta GWORD+1
ldy #0 Result LO
tya Result HI
bra .3
.1 pha
tya
clc
adc GWORD
tay
pla
adc GWORD+1
.2 asl GWORD
rol GWORD+1
.3 lsr GBYTE
bcs .1
bne .2
rts
*--------------------------------------
Mono.NMasks .DA #%11111110
.DA #%11111101
.DA #%11111011
.DA #%11110111
.DA #%11101111
.DA #%11011111
.DA #%10111111
.DA #%01111111
*--------------------------------------
Mono.Masks .DA #%00000001
.DA #%00000010
.DA #%00000100
.DA #%00001000
.DA #%00010000
.DA #%00100000
.DA #%01000000
.DA #%10000000
*--------------------------------------
CB.Cache .BS S.CB
DestBM.Cache .BS S.BM
GBYTE .BS 1
GWORD .BS 2
*--------------------------------------
.EP
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/GUIOSD
ASM