Kernel 0.9.1 : GUI API & Driver

This commit is contained in:
Rémy GIBERT 2017-11-14 17:57:34 +01:00
parent 8ffd177fb2
commit 0cb5d401f7
15 changed files with 314 additions and 335 deletions

Binary file not shown.

Binary file not shown.

View File

@ -17,20 +17,11 @@ AUTO 6
* 16 : SrcPtr * 16 : SrcPtr
* 18 : DstPtr * 18 : DstPtr
*-------------------------------------- *--------------------------------------
BITBLT >STYA ZPBase BITBLT
ldy #S.CB.DstPtr+1
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.BLT SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.RECT
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
ASM ASM

View File

@ -7,95 +7,59 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* HLINE X1,X2 at Y1 * HLINE X1,X2 at Y1
*-------------------------------------- *--------------------------------------
HLINE >STYA ZPBase HLINE lda CB.Cache+S.CB.MODE
ldy #S.CB.X2+1
.1 lda (ZPBase),y cmp #S.CB.MODE.MONO
sta CB.Cache,y bne HLINE.C16
dey
bpl .1 HLINE.MONO >LDYA CB.Cache+S.CB.X1
jsr LBUF.SetBounds1YA
HLINE.I lda CB.Cache+S.CB.MODE >LDYA CB.Cache+S.CB.X2
jsr LBUF.SetBounds2YA
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16 bit #S.CB.MODE.C16
bne HLINE.C16 bne HLINE.C16
HLINE.MONO lda CB.Cache+S.CB.X2 Count=X2-X1 lda CB.Cache+S.CB.COLOR
sec beq .1
sbc CB.Cache+S.CB.X1
sta ZPCount
tay
lda CB.Cache+S.CB.X2+1 lda #%01111111
sbc CB.Cache+S.CB.X1+1
sta ZPCount+1
tax
jsr DIVMOD7YX
ldy CB.Cache+S.CB.X1 .1 ldy LBUF.C1
ldx CB.Cache+S.CB.X1+1
jsr DIVMOD7YX A=X1 DIV 7, X=MOD 7
.2 pha
pha save X DIV 7 and LBUF.AND,y
lsr sta LBUF.ORA,y
pla
iny
cpy LBUF.C2
bcs .2
ldy CB.Cache+S.CB.Y1 ldy CB.Cache+S.CB.Y1
clc jmp LBUF.DrawAtY
adc BASEL,y setup line Base Ptr (A=Col)
sta ZPBase HLINE.C16 lda CB.Cache+S.CB.X1
lda BASEH,y and #%11111100
sta ZPBase+1
ply
lda COL.BANK,y
tay tay
sta $c000,y lda CB.Cache+S.CB.X1+1
jsr LBUF.SetBounds1YA
lda CB.Cache+S.CB.X2
and #%11111100
tay
lda CB.Cache+S.CB.X2+1
jsr LBUF.SetBounds2YA
HLINE.C16
rts
*--------------------------------------
HLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
lda DIV7.lo,x
sta .1+1
lda DIV7.hi,x
sta .1+2
lda MOD7.lo,x
sta .2+1
lda MOD7.hi,x
sta .2+2
lda DIV7.BASE,x
ldx CB.Cache+S.CB.X1
clc
.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
sta XDIV7
.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7
sta XMOD7
rts rts
*-------------------------------------- *--------------------------------------
* VLINE Y1,Y2 at X1 * VLINE Y1,Y2 at X1
*-------------------------------------- *--------------------------------------
VLINE >STYA ZPBase VLINE lda CB.Cache+S.CB.OP
ldy #S.CB.Y2
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
sta SET80STORE
lda CB.Cache+S.CB.OP
beq VLINE.OP0 beq VLINE.OP0
VLINE.XOR jsr VLINE.DIVMOD7 VLINE.XOR jsr VLINE.DIVMOD7
@ -122,7 +86,6 @@ VLINE.XOR jsr VLINE.DIVMOD7
bcc .1 bcc .1
beq .1 beq .1
sta CLR80STORE
rts rts
VLINE.OP0 lda CB.Cache+S.CB.MODE VLINE.OP0 lda CB.Cache+S.CB.MODE
@ -159,7 +122,6 @@ VLINE.MONO jsr VLINE.DIVMOD7
bcc .2 bcc .2
beq .2 beq .2
sta CLR80STORE
rts rts
VLINE.C16 lda CB.Cache+S.CB.X1 VLINE.C16 lda CB.Cache+S.CB.X1
@ -248,8 +210,7 @@ VLINE.C16 lda CB.Cache+S.CB.X1
ora GBYTE ora GBYTE
sta (ZPBase) sta (ZPBase)
.13 sta CLR80STORE .13 rts
rts
*-------------------------------------- *--------------------------------------
VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte.... VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte....
@ -283,6 +244,6 @@ VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte....
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LIN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LINE
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
ASM ASM

View File

@ -13,16 +13,7 @@ AUTO 6
* 4 : SrcX1 * 4 : SrcX1
* 6 : SrcY1 * 6 : SrcY1
*-------------------------------------- *--------------------------------------
SETPIXEL >STYA ZPBase SETPIXEL lda CB.Cache+S.CB.MODE
ldy #S.CB.Y1 Skip S.CB.Y1+1.....always 0
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
sta SET80STORE
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16 bit #S.CB.MODE.C16
bne SETPIXEL.C16 bne SETPIXEL.C16
@ -66,7 +57,6 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
eor Mono.Masks,y y = mod 7 eor Mono.Masks,y y = mod 7
sta (ZPBase) sta (ZPBase)
sta CLR80STORE
rts rts
.5 lda (ZPBase) .5 lda (ZPBase)
@ -75,13 +65,11 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
and Mono.NMasks,y includes And $7F for mono and Mono.NMasks,y includes And $7F for mono
sta (ZPBase) sta (ZPBase)
sta CLR80STORE
rts rts
.6 and #$7F switch back this byte to mono .6 and #$7F switch back this byte to mono
ora Mono.Masks,y ora Mono.Masks,y
sta (ZPBase) sta (ZPBase)
sta CLR80STORE
rts rts
SETPIXEL.C16 lda CB.Cache+S.CB.X1 SETPIXEL.C16 lda CB.Cache+S.CB.X1
@ -170,8 +158,7 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1
ora GBYTE ora GBYTE
sta (ZPBase) sta (ZPBase)
.13 sta CLR80STORE .13 rts
rts
*-------------------------------------- *--------------------------------------
* GETPIXEL * GETPIXEL
*-------------------------------------- *--------------------------------------

30
DRV/DHGR.DRV.S.RECT.txt Normal file
View File

@ -0,0 +1,30 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* FILLRECT
* 2 : Mode
* 3 : Color
* 4 : SrcX1
* 6 : SrcY1
* 8 : SrcX2
* 10 : SrcY2
*--------------------------------------
FILLRECT
.2 jsr HLINE
lda CB.Cache+S.CB.Y1
cmp CB.Cache+S.CB.Y2
beq .8
inc CB.Cache+S.CB.Y1
bra .2
.8 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.BLT
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
ASM

View File

@ -11,12 +11,14 @@ AUTO 6
.INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/IO.I
.INB /A2OSX.BUILD/INC/LIBGFX.I .INB /A2OSX.BUILD/INC/LIBGUI.I
*-------------------------------------- *--------------------------------------
ZPBase .EQ ZPDRV ZPCmdPtr .EQ ZPDRV
ZPCount .EQ ZPDRV+2 ZPBase .EQ ZPDRV+2
ZPCountCol .EQ ZPDRV+4
ZPCountMod .EQ ZPDRV+5
ZPCount .EQ ZPDRV+4
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
@ -39,90 +41,9 @@ L.MSG.DETECT .DA MSG.DETECT
Dev.Detect >LDYA L.MSG.DETECT Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL PrintF.YA >SYSCALL PrintF.YA
ldx #0
.1 txa
stz Shift0.hi,x
asl
rol Shift0.hi,x
lsr
sta Shift0.lo,x
inx
bpl .1
ldx #0
.2 lda Shift0.hi,x
sta Shift1.hi,x
lda Shift0.lo,x
asl
asl
rol Shift1.hi,x
lsr
sta Shift1.lo,x
inx
bpl .2
ldx #0
.3 lda Shift1.hi,x
sta Shift2.hi,x
lda Shift1.lo,x
asl
asl
rol Shift2.hi,x
lsr
sta Shift2.lo,x
inx
bpl .3
ldx #0
.4 lda Shift2.hi,x
sta Shift3.hi,x
lda Shift2.lo,x
asl
asl
rol Shift3.hi,x
lsr
sta Shift3.lo,x
inx
bpl .4
ldx #0
.5 lda Shift3.hi,x
sta Shift4.hi,x
lda Shift3.lo,x
asl
asl
rol Shift4.hi,x
lsr
sta Shift4.lo,x
inx
bpl .5
ldx #0
.6 lda Shift4.hi,x
sta Shift5.hi,x
lda Shift4.lo,x
asl
asl
rol Shift5.hi,x
lsr
sta Shift5.lo,x
inx
bpl .6
ldx #0
.7 lda Shift5.hi,x
sta Shift6.hi,x
lda Shift5.lo,x
asl
asl
rol Shift6.hi,x
lsr
sta Shift6.lo,x
inx
bpl .7
clc clc
rts rts
*--------------------------------------
CS.END CS.END
MSG.DETECT >CSTR "Apple IIe/IIc DHGR Driver.\r\n" MSG.DETECT >CSTR "Apple IIe/IIc DHGR Driver.\r\n"
*-------------------------------------- *--------------------------------------
@ -132,7 +53,7 @@ DEV.HEADER cld
jmp (DRV.CS.START,x) jmp (DRV.CS.START,x)
.DA #0 .DA #0
.BS 6 .BS 6
DEV.HEADER.NAME >PSTR "GFX" DEV.HEADER.NAME >CSTR "GFX"
.BS 1 .BS 1
*-------------------------------------- *--------------------------------------
* Driver Code * Driver Code
@ -146,31 +67,26 @@ DRV.CS.START .DA STATUS
.DA OPEN .DA OPEN
.DA CLOSE .DA CLOSE
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA A2osX.BADCALL .DA WRITE
.DA A2osX.BADCALL .DA A2osX.BADCALL
*-------------------------------------- *--------------------------------------
.DA SETPIXEL J.Cmds .DA SETPIXEL
.DA GETPIXEL .DA GETPIXEL
.DA HLINE .DA HLINE
.DA VLINE .DA VLINE
.DA FILLRECT .DA FILLRECT
.DA BITBLT .DA BITBLT
*-------------------------------------- *--------------------------------------
L.STAT .DA STAT L.DSTAT .DA DSTAT
L.DIV7.0 .DA DIV7.0 L.DIV7.0 .DA DIV7.0
.DA DIV7.256 .DA DIV7.256
.DA DIV7.512 .DA DIV7.512
L.MOD7.0 .DA MOD7.0 L.MOD7.0 .DA MOD7.0
.DA MOD7.256 .DA MOD7.256
.DA MOD7.512 .DA MOD7.512
L.Shift0.Lo .DA Shift0.lo
L.Shift0.Hi .DA Shift0.hi
L.DIVMOD7Y0 .DA DIVMOD7Y0
.DA DIVMOD7Y1
.DA DIVMOD7Y2
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
STATUS >LDYA L.STAT STATUS >LDYA L.DSTAT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -196,20 +112,6 @@ OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A
cpx #3 cpx #3
bne .1 bne .1
ldx #7
lda L.Shift0.Lo+1
.10 sta Shiftlo.hi,x
inc
dex
bne .10
ldx #7
lda L.Shift0.hi+1
.11 sta Shifthi.hi,x
inc
dex
bne .11
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
@ -238,44 +140,109 @@ CONTROL sta CLRTEXT
CLOSE clc CLOSE clc
rts rts
*-------------------------------------- *--------------------------------------
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX WRITE >STYA ZPCmdPtr
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.LIN
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT
*--------------------------------------
* FILLRECT
* 2 : Mode
* 3 : Color
* 4 : SrcX1
* 6 : SrcY1
* 8 : SrcX2
* 10 : SrcY2
*--------------------------------------
FILLRECT >STYA ZPBase
ldy #S.CB.Y2
.1 lda (ZPBase),y sta SET80STORE
lda (ZPCmdPtr)
.1 tax
ldy CB.CmdLen,x
.2 lda (ZPBase),y
sta CB.Cache,y sta CB.Cache,y
dey dey
bpl .1 bpl .2
.2 jsr HLINE.I
lda CB.Cache+S.CB.Y1
cmp CB.Cache+S.CB.Y2
beq .8
inc CB.Cache+S.CB.Y1 lda CB.CmdLen,x
bra .2 clc
adc ZPCmdPtr
sta ZPCmdPtr
bcc .3
inc ZPCmdPtr+1
.3 jsr .10
lda (ZPCmdPtr)
bne .1
sta CLR80STORE
.8 clc
rts
.10 jmp (J.Cmds,x)
*--------------------------------------
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT
*--------------------------------------
LBUF.SetBounds1YA
jsr DIVMOD7YA A=DIV, X=MOD
sta LBUF.C1
tay
lda Mono.Head,x
sta LBUF.AND,y
rts
*--------------------------------------
LBUF.SetBounds2YA
jsr DIVMOD7YA
cmp LBUF.C1 A=DIV, X=MOD
beq .2
sta LBUF.C2
tay
lda Mono.Tail,x
sta LBUF.AND,y
lda #0
.1 dey
cpy LBUF.C1
beq .8
sta LBUF.AND,y
bra .1
.2 and LBUF.C1
sta LBUF.C2
tay
lda Mono.Tail,x
sta LBUF.AND,y
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
LBUF.DrawAtY lda BASEL,y setup line Base Ptr
sta ZPBase
lda BASEH,y
sta ZPBase+1
ldy LBUF.C1 y C1->C2
.1 ldx COL.BANK,y
sta $C000,x
lda (ZPBase),y
and LBUF.AND,y
ora LBUF.ORA,y
sta (ZPBase),y
iny
cpy LBUF.C2
bcs .1
rts
*--------------------------------------
* IN: * IN:
* Y = LO * Y = LO
* X = HI * A = HI
* OUT: * OUT:
* A = DIV * A = DIV
* X = MOD * X = MOD
*-------------------------------------- *--------------------------------------
DIVMOD7YX jmp (L.DIVMOD7Y0,x) DIVMOD7YA dec
bne DIVMOD7Y2
beq DIVMOD7Y1
DIVMOD7Y0 lda DIV7.0,y DIVMOD7Y0 lda DIV7.0,y
ldx MOD7.0,y ldx MOD7.0,y
@ -294,39 +261,34 @@ DIVMOD7Y2 lda DIV7.512,y
rts rts
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
*--------------------------------------
Shift0.lo .BS 128
Shift0.hi .BS 128
Shift1.lo .BS 128
Shift1.hi .BS 128
Shift2.lo .BS 128
Shift2.hi .BS 128
Shift3.lo .BS 128
Shift3.hi .BS 128
Shift4.lo .BS 128
Shift4.hi .BS 128
Shift5.lo .BS 128
Shift5.hi .BS 128
Shift6.lo .BS 128
Shift6.hi .BS 128
*-------------------------------------- *--------------------------------------
.INB /A2OSX.SRC/DRV/DHGR.DRV.T .INB /A2OSX.SRC/DRV/DHGR.DRV.T
*-------------------------------------- *--------------------------------------
CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
.DA S.CB.Y1+1 GETPIXEL
.DA S.CB.X2+1 HLINE
.DA S.CB.X2+1 VLINE
.DA S.CB.Y2+1 FILLRECT
.DA S.CB.DstPtr+1 BITBLT
*--------------------------------------
CB.Cache .BS S.CB
*--------------------------------------
DIV7.lo .BS 3 DIV7.lo .BS 3
DIV7.hi .BS 3 DIV7.hi .BS 3
MOD7.lo .BS 3 MOD7.lo .BS 3
MOD7.hi .BS 3 MOD7.hi .BS 3
Shiftlo.hi .BS 7
Shifthi.hi .BS 7
*-------------------------------------- *--------------------------------------
CB.Cache .BS S.CB LBUF.C1 .BS 1
LBUF.C2 .BS 1
LBUF.ORA .BS 80
LBUF.AND .BS 80
*-------------------------------------- *--------------------------------------
XDIV7 .BS 1 XDIV7 .BS 1
XMOD7 .BS 1 XMOD7 .BS 1
XCOL7 .BS 1 XCOL7 .BS 1
GBYTE .BS 1 GBYTE .BS 1
*-------------------------------------- *--------------------------------------
STAT .DA #0 DSTAT .DA #0
.DA #0,#0,#0 .DA #0,#0,#0
>PSTR "Apple II DHGR" >PSTR "Apple II DHGR"
.BS 3 .BS 3
@ -338,9 +300,6 @@ DEVSTAT.MODES .DA #S.CB.MODE.MONO+S.CB.MODE.C16
DEVSTAT.W .DA 560 X.SIZE DEVSTAT.W .DA 560 X.SIZE
DEVSTAT.H .DA 192 Y.SIZE DEVSTAT.H .DA 192 Y.SIZE
*-------------------------------------- *--------------------------------------
DRV.SIZE .EQ *-DRV.CS.START
*--------------------------------------
.LIST OFF
MAN MAN
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S SAVE /A2OSX.SRC/DRV/DHGR.DRV.S
ASM ASM

View File

@ -21,21 +21,21 @@ Mono.Masks .DA #%00000001
.DA #%00100000 .DA #%00100000
.DA #%01000000 .DA #%01000000
*-------------------------------------- *--------------------------------------
Mono.Head .DA #%01111111 Mono.Head .DA #%10000000
.DA #%01111110 .DA #%10000001
.DA #%01111100 .DA #%10000011
.DA #%01111000 .DA #%10000111
.DA #%01110000 .DA #%10001111
.DA #%01100000 .DA #%10011111
.DA #%01000000 .DA #%10111111
*-------------------------------------- *--------------------------------------
Mono.Tail .DA #%00000001 Mono.Tail .DA #%11111110
.DA #%00000011 .DA #%11111100
.DA #%00000111 .DA #%11111000
.DA #%00001111 .DA #%11110000
.DA #%00011111 .DA #%11100000
.DA #%00111111 .DA #%11000000
.DA #%01111111 .DA #%10000000
*-------------------------------------- *--------------------------------------
* bits to "and" to reset color of pixel (0 means nothing to do) * bits to "and" to reset color of pixel (0 means nothing to do)
* 4 bytes * 7 mods * 4 bytes * 7 mods

View File

@ -313,15 +313,6 @@ DEVMGR.READ .EQ 16
DEVMGR.WRITE .EQ 18 DEVMGR.WRITE .EQ 18
DEVMGR.IRQ .EQ 20 DEVMGR.IRQ .EQ 20
*-------------------------------------- *--------------------------------------
* 'GFX' Class Driver Functions
*--------------------------------------
DEVMGR.GFX.SETPIXEL .EQ 22
DEVMGR.GFX.GETPIXEL .EQ 24
DEVMGR.GFX.HLINE .EQ 26
DEVMGR.GFX.VLINE .EQ 28
DEVMGR.GFX.FILLRECT .EQ 30
DEVMGR.GFX.BITBLT .EQ 32
*--------------------------------------
S.DSTAT.S .EQ 0 S.DSTAT.S .EQ 0
S.DSTAT.S.BLOCK .EQ %10000000 S.DSTAT.S.BLOCK .EQ %10000000
S.DSTAT.S.WRITE .EQ %01000000 S.DSTAT.S.WRITE .EQ %01000000

View File

@ -67,4 +67,4 @@ LIBGFX.ShowCursor .EQ 14
LIBGFX.DrawLine .EQ 16 LIBGFX.DrawLine .EQ 16
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/INC/LIBGFX.I SAVE /A2OSX.BUILD/INC/LIBGUI.I

View File

@ -434,5 +434,5 @@ PAT.Arrow .DA #S.BM.F.BBP1
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/LIB/LIBGFX.S SAVE /A2OSX.SRC/LIB/LIBGUI.S
ASM ASM

View File

@ -6,12 +6,12 @@ AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF /A2OSX.BUILD/SBIN/DESKTOP .TF /A2OSX.BUILD/SBIN/GUI
*-------------------------------------- *--------------------------------------
.INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/IO.I
.INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBGFX.I .INB /A2OSX.BUILD/INC/LIBGUI.I
*-------------------------------------- *--------------------------------------
ZPPtr1 .EQ ZPBIN ZPPtr1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
@ -249,7 +249,7 @@ GoDevMouse jmp $ffff
CS.END CS.END
DEVNAME.GFX >PSTR "GFX" DEVNAME.GFX >PSTR "GFX"
DEVNAME.MOUSE >PSTR "MOU1" DEVNAME.MOUSE >PSTR "MOU1"
LIBGFX >PSTR "libgfx.o" LIBGFX >PSTR "libgui.o"
MSG.INIT >CSTR "DESKTOP:Init...\r\n" MSG.INIT >CSTR "DESKTOP:Init...\r\n"
hLibGFX .BS 1 hLibGFX .BS 1
hDevGFX .BS 1 hDevGFX .BS 1
@ -318,5 +318,5 @@ DrawLine6.CB .BS 1 hDC
.DA 84 .DA 84
.DA 191 .DA 191
MAN MAN
SAVE /A2OSX.SRC/SBIN/DESKTOP.S SAVE /A2OSX.SRC/SBIN/GUI.S
ASM ASM

View File

@ -85,8 +85,8 @@ CSH.TSIZE .HS 0001020401020405 00,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT....
* int printf ( const char * format, ... ); * int printf ( const char * format, ... );
CSH.FN >PSTR "printf" CSH.FN >PSTR "printf"
.DA #CSH.T.INT returned value .DA #CSH.T.INT returned value
.DA #CSH.Q.CONST+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER1
.DA #CSH.Q.POINTER .DA #CSH.T.CHAR
.DA #CSH.T.VARIADIC .DA #CSH.T.VARIADIC
.DA #0 .DA #0
* float cos ( float x ); * float cos ( float x );

View File

@ -13,10 +13,11 @@ CSH.E.DUP .EQ $7B
CSH.E.UNDEF .EQ $7A CSH.E.UNDEF .EQ $7A
CSH.E.TMISMATCH .EQ $79 CSH.E.TMISMATCH .EQ $79
CSH.Q.POINTER .EQ %10000000 CSH.Q.CONST .EQ %11000000
CSH.Q.CONST .EQ %01000000 CSH.Q.ARRAY .EQ %10001100 max 3 bounds
CSH.Q.ARRAY .EQ %11000000 CSH.Q.POINTER1 .EQ %10000001 max 3 depth
CSH.Q.POINTER2 .EQ %10000010
CSH.Q.POINTER3 .EQ %10000011
CSH.T.CHAR .EQ 1 CSH.T.CHAR .EQ 1
CSH.T.INT .EQ 2 CSH.T.INT .EQ 2
CSH.T.LONG .EQ 3 CSH.T.LONG .EQ 3
@ -224,7 +225,7 @@ CSH.IF jsr CSH.GetCharNB
jsr CSH.GetNextCharNB Skip '{' jsr CSH.GetNextCharNB Skip '{'
bcs .99 bcs .99
>LDA.G CSH.CmdSave Push "IF" or "WHILE" >LDA.G CSH.CmdSave get back Token ("IF" or "WHILE")
tax tax
jsr CSH.Keyword.start jsr CSH.Keyword.start
bcs .99 bcs .99
@ -263,7 +264,7 @@ CSH.IF jsr CSH.GetCharNB
CSH.Keyword.Start CSH.Keyword.Start
jmp (J.CSH.KW.START,x) jmp (J.CSH.KW.START,x)
*-------------------------------------- *--------------------------------------
CSH.IF.START jmp CSH.Push CSH.IF.START jmp CSH.Push Push "IF" Token
*-------------------------------------- *--------------------------------------
CSH.WHILE.START pha CSH.WHILE.START pha
>LDA.G CSH.BufPtrSave+1 WHILE : push loop address... >LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
@ -271,7 +272,7 @@ CSH.WHILE.START pha
>LDA.G CSH.BufPtrSave >LDA.G CSH.BufPtrSave
jsr CSH.Push jsr CSH.Push
pla pla
jmp CSH.Push jmp CSH.Push Push "WHILE" Token
*-------------------------------------- *--------------------------------------
CSH.IF.END jsr CSH.GetNextChar just skip ending '}' CSH.IF.END jsr CSH.GetNextChar just skip ending '}'
clc clc
@ -339,7 +340,6 @@ CSH.CHAR lda #CSH.T.CHAR
CSH.UCHAR lda #CSH.T.CHAR CSH.UCHAR lda #CSH.T.CHAR
bra CSH.TYPE bra CSH.TYPE
CSH.INT lda #CSH.T.INT CSH.INT lda #CSH.T.INT
>DEBUG
bra CSH.TYPE bra CSH.TYPE
CSH.UINT lda #CSH.T.INT CSH.UINT lda #CSH.T.INT
bra CSH.TYPE bra CSH.TYPE
@ -403,6 +403,75 @@ CSH.TYPE >STA.G CSH.ACCT
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CSH.FnEval jsr CSH.GetCharNB
bcs .9
cmp #'('
bne .9
lda (ZPPtr1) Get Return value Type
>CMP.G CSH.ACCT Match with ACC ?
bne .99
jsr CSH.PushACCT Save Acc & T on stack
.1 inc ZPPtr1 advance to arg list type
bne .2
inc ZPPtr1+1
.2 lda (ZPPtr1)
beq .7 end of list, go check no more
jsr CSH.ExpEval
bcs .90
lda (ZPPtr1)
cmp #CSH.T.VARIADIC
beq .3
>CMP.G CSH.ACCT Match with ACC ?
bne .99
.3
lda (ZPPtr1)
cmp #CSH.T.VARIADIC
bne .5
.4 jsr CSH.GetNextCharNB
cmp #','
bne .7
jsr CSH.GetNextCharNB
bra .2
.5 inc ZPPtr1 advance to next arg
beq .7
inc ZPPtr1+1
lda (ZPPtr1)
bne .4
.7 jsr CSH.GetNextCharNB
bcs .9
cmp #')'
bne .9
* TO DO : Execute
jsr CSH.GetNextCharNB Skip )
clc
rts
.9 lda #CSH.E.SYNTAX
sec
.90 rts
.99 lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
CSH.ExpEval jsr CSH.ZeroACC CSH.ExpEval jsr CSH.ZeroACC
dec A=0 dec A=0
>STA.G CSH.EXPBOP1 >STA.G CSH.EXPBOP1
@ -488,36 +557,6 @@ CSH.ExpEval jsr CSH.ZeroACC
.80 clc .80 clc
rts rts
*-------------------------------------- *--------------------------------------
CSH.FnEval jsr CSH.GetCharNB
bcs .9
cmp #'('
bne .9
lda (ZPPtr1)
>CMP.G CSH.ACCT
bne .99
* TODO : eval params
.7 jsr CSH.GetNextCharNB
bcs .9
cmp #')'
bne .9
clc
rts
.9 lda #CSH.E.SYNTAX
sec
rts
.99 lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
CSH.SavePtr >LDYA ZPCSHBufPtr CSH.SavePtr >LDYA ZPCSHBufPtr
>STYA.G CSH.BufPtrSave >STYA.G CSH.BufPtrSave
rts rts
@ -897,7 +936,25 @@ CSH.BOPS.SUB >LDA.G CSH.ACCT
rts rts
CSH.BOPS.MUL CSH.BOPS.MUL
CSH.BOPS.DIV clc
rts
CSH.BOPS.DIV >LDA.G CSH.ACCT
cmp #CSH.T.FLOAT
beq .8
clc
rts
.8 >PUSHEA.G CSH.ACC
>PUSHEA.G CSH.ARG
>LEA.G CSH.ACC
>SYSCALL FDIV
rts
CSH.BOPS.MOD CSH.BOPS.MOD
CSH.BOPS.SHL CSH.BOPS.SHL
CSH.BOPS.SHR CSH.BOPS.SHR
@ -919,6 +976,9 @@ CSH.BOPS.LOR
*-------------------------------------- *--------------------------------------
* Stack * Stack
*-------------------------------------- *--------------------------------------
CSH.PushACCT
CSH.Push pha CSH.Push pha
>LDA.G CSH.StackPtr >LDA.G CSH.StackPtr
inc inc

View File

@ -35,7 +35,7 @@ CS.START cld
.DA CS.END-CS.START CS .DA CS.END-CS.START CS
.DA DS.END-DS.START DS .DA DS.END-DS.START DS
.DA #64 SS .DA #64 SS
.DA #16 ZP .DA #0 ZP (256)
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -94,6 +94,7 @@ J.CSH.BOPS .DA CSH.BOPS.ADD
.DA CSH.BOPS.LOR .DA CSH.BOPS.LOR
L.CSH.FN .DA CSH.FN L.CSH.FN .DA CSH.FN
L.CSH.KW .DA CSH.KW L.CSH.KW .DA CSH.KW
L.CSH.STYPES .DA CSH.STYPES
J.CSH.KW .DA CSH.IF J.CSH.KW .DA CSH.IF
.DA CSH.WHILE .DA CSH.WHILE
.DA CSH.ELSE .DA CSH.ELSE
@ -106,7 +107,6 @@ J.CSH.KW .DA CSH.IF
.DA CSH.FLOAT .DA CSH.FLOAT
.DA CSH.SIGNED .DA CSH.SIGNED
.DA CSH.UNSIGNED .DA CSH.UNSIGNED
L.CSH.STYPES .DA CSH.STYPES
J.CSH.STYPES .DA CSH.CHAR J.CSH.STYPES .DA CSH.CHAR
.DA CSH.INT .DA CSH.INT
.DA CSH.LONG .DA CSH.LONG