A2osX/SBIN/GUIOSD.S.txt

433 lines
8.1 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/SBIN/GUI/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
2017-12-14 16:25:03 +00:00
ZPFontPtr .EQ ZPDRV+4
ZPCharPtr .EQ ZPDRV+6
*--------------------------------------
* 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
beq .1
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
* S.CB.X1 : SrcX1 in bitmap/mask
* S.CB.Y1 : SrcY1
* S.CB.SrcW : width
* S.CB.SrcH : height
* S.CB.DstX : Destination X (screen)
* S.CB.DstY : Destination Y (screen)
* S.CB.SrcPtr : pointer to S.BM
* S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr
* S.CB.DstPtr : pointer to Save Buffer
*--------------------------------------
BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
bne BITBLT.1
tya
GO.GetMemPtr.A
BITBLT.1 >STYA ZPSrcBMDataPtr
*--------------------------------------
2017-12-14 16:25:03 +00:00
* In:
* S.CB.SrcW
* S.CB.SrcH
* Out:
* S.CB.DstPtr : Buffer Size (in bytes)
*--------------------------------------
GETRECTBUFSIZE
*--------------------------------------
* In:
* S.CB.S.CB.FONT : hFont
* S.CB.SrcPtr : Ptr to Text
* S.CB.DstPtr : Buffer Size (in bytes)
*--------------------------------------
DRAWTEXT lda CB.Cache+S.CB.FONT
GO.GetMemPtr.A
>STYA ZPFontPtr
ldy #S.FON-1
.1 lda (ZPFontPtr),y
sta FON.Cache,y
dey
bpl .1
lda ZPFontPtr
clc
adc #S.FON
sta ZPFontPtr
bcc .2
inc ZPFontPtr+1
.2 >LDYA CB.Cache+S.CB.SrcPtr
>STYA TXTPTR
lda S.BM.F.BBP1
sta DestBM.Cache+S.BM.F
stz DestBM.Cache+S.BM.W
stz DestBM.Cache+S.BM.W+1
lda FON.Cache+S.FON.PixH
sta DestBM.Cache+S.BM.H
stz DestBM.Cache+S.BM.H+1
.3 jsr TXTPTR.GetNext
beq .4
jsr FON.GetChar
lda (ZPCharPtr) Get Char PixelW
sec
adc DestBM.Cache+S.BM.W
sta DestBM.Cache+S.BM.W
bcc .3
inc DestBM.Cache+S.BM.W+1
bra .3
.4 jsr BM.Create
bcs .9
.9 rts
*--------------------------------------
FON.GetChar cmp FON.Cache+S.FON.Last
bcc .1
bne .2
.1 sec
sbc FON.Cache+S.FON.First
bcs .3
.2 lda FON.Cache+S.FON.Default
.3 asl
php
clc
adc ZPFontPtr
sta ZPCharPtr
adc ZPFontPtr+1
sta ZPCharPtr+1
plp
bcc .8
inc ZPCharPtr+1
.8 rts
*--------------------------------------
BM.Create lda DestBM.Cache+S.BM.W
ldx DestBM.Cache+S.BM.W+1
bit #7
beq .1
and #7
clc
adc #8
bcc .1
inx
.1 sta DestBM.Cache+S.BM.RowBytes
txa
lsr
ror DestBM.Cache+S.BM.RowBytes
lsr
ror DestBM.Cache+S.BM.RowBytes
lsr
ror DestBM.Cache+S.BM.RowBytes
>LDYA DestBM.Cache+S.BM.H
ldx DestBM.Cache+S.BM.RowBytes
jsr YAMultX
pha
tya
clc
adc #S.BM
tay
pla
adc /S.BM
jsr GO.GetMem.YA
bcs .9
>STYA ZPDestBMPtr
ldy #S.BM-1
.2 lda DestBM.Cache,y
sta (ZPDestBMPtr),y
dey
bpl .2
clc
.9 rts
*--------------------------------------
* to move in LC or ZP/STK
*--------------------------------------
TXTPTR.GetNext sta CLRREADAUX
lda (TXTPTR)
sta SETREADAUX
beq .9
inc TXTPTR
bne .9
inc TXTPTR+1
.9 rts
*--------------------------------------
* 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
*--------------------------------------
GO.GetMem.YA ldx #SYS.GetMem.YA
.HS 2C BIT ABS
GO.GetMemPtr.A ldx #SYS.GetMemPtr.A
GO.Kernel jmp ($E000,x)
*--------------------------------------
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
FON.Cache .BS S.FON
DestBM.Cache .BS S.BM
GBYTE .BS 1
GWORD .BS 2
*--------------------------------------
.EP
GUIOSD.END .EQ *
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/GUIOSD
ASM