A2osX/LIB/LIBGUI.S.MENU.txt

1025 lines
16 KiB
Plaintext
Raw Normal View History

NEW
2019-07-30 08:57:25 +00:00
AUTO 3,1
*--------------------------------------
* NewMenu(pMENU, x, y)
2020-09-07 20:40:50 +00:00
*--------------------------------------
MENU.New >PULLW DY
>PULLW DX
>PULLYA
2022-10-27 06:20:09 +00:00
MENU.New.I >STYA ZPPtr1 MENU definition
2022-10-19 06:26:48 +00:00
>STYA ZPObjPtr for pass #2
2022-10-25 06:05:54 +00:00
ldx MENU.Stack.Cnt
cpx #MENU.MAX
beq .90
2020-10-13 15:54:55 +00:00
jsr MENU.GetSize
>SYSCALL2 GetMem
2020-10-15 15:19:13 +00:00
bcs .99
2020-10-09 06:02:45 +00:00
2022-10-19 06:26:48 +00:00
>STYA ZPMENUPtr
2020-10-20 06:01:04 +00:00
txa hMenu
ldx MENU.Stack.Cnt
2020-10-20 06:01:04 +00:00
sta MENU.Stack,x
2020-10-09 06:02:45 +00:00
lda #S.OBJ.T.MENU
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr) S.OBJ.T
2020-10-09 06:02:45 +00:00
lda #0
ldy #S.MENU.Items-1
2020-10-09 06:02:45 +00:00
2022-10-19 06:26:48 +00:00
.1 sta (ZPMENUPtr),y
2020-10-09 06:02:45 +00:00
dey
bne .1
2020-10-26 16:32:51 +00:00
ldx #3
ldy #S.OBJ.X1+3
2020-10-15 06:16:45 +00:00
.2 lda DX,x
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
2020-10-15 06:16:45 +00:00
dey
dex
bpl .2
2020-10-09 06:02:45 +00:00
2022-10-19 06:26:48 +00:00
>LDYA ZPObjPtr
>STYA ZPPtr1 MENU definition
jsr MENU.GetData
ldx MENU.Stack.Cnt
lda MENU.Stack,x
>SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
2020-10-20 06:01:04 +00:00
jsr MENU.SetMenuSizePos
2020-10-09 15:28:01 +00:00
ldx MENU.Stack.Cnt
2020-10-20 06:01:04 +00:00
lda MENU.Stack,x
inc MENU.Stack.Cnt
2020-10-13 15:54:55 +00:00
2020-10-15 15:19:13 +00:00
clc
2020-10-09 15:28:01 +00:00
rts
2020-10-13 15:54:55 +00:00
.90 lda #E.OOH
sec
2022-10-25 06:05:54 +00:00
.99
2020-10-09 15:28:01 +00:00
MENU.New.RTS rts
2020-10-20 06:01:04 +00:00
*--------------------------------------
* ZPPtr1 = defintion
2020-10-20 06:01:04 +00:00
*--------------------------------------
MENU.GetSize lda #S.MENU.Items+1 Ending\0
sta Counter
stz Counter+1
2022-10-25 06:05:54 +00:00
.1 lda (ZPPtr1)
beq .8
2020-10-20 06:01:04 +00:00
lda #S.MITEM
clc
adc Counter
sta Counter
bcc .2
2022-10-25 06:05:54 +00:00
inc Counter+1
2020-10-20 06:01:04 +00:00
.2 lda (ZPPtr1)
cmp #S.MITEM.T.SEP
bne .3
2022-10-25 06:05:54 +00:00
inc ZPPtr1
bne .1
2022-10-25 06:05:54 +00:00
inc ZPPtr1+1
bra .1
2022-10-25 06:05:54 +00:00
.3 cmp #S.MITEM.T.ITEM
bne .4
2020-10-26 16:32:51 +00:00
lda #6 T+ID+KEMOD+KEY+pICON+"TEXT"
bra .5
2020-10-20 06:01:04 +00:00
.4 lda #5 T+pMENU+pICON+"TEXT"
2020-10-20 06:01:04 +00:00
.5 jsr SkipAPtr1
jsr SkipStrZPtr1 skip "TEXT\0"
bra .1
2020-10-23 15:23:19 +00:00
.8 >LDYA Counter
rts
2020-10-22 06:08:25 +00:00
*--------------------------------------
* ZPPtr1 = defintion
2022-10-19 06:26:48 +00:00
* ZPMENUPtr = DstBuf
2020-10-20 06:01:04 +00:00
*--------------------------------------
2022-10-19 06:26:48 +00:00
MENU.GetData lda ZPMENUPtr
2020-10-20 06:01:04 +00:00
clc
2022-10-19 06:26:48 +00:00
adc #S.MENU.Items
sta ZPMENUPtr
bcc .1
2022-10-19 06:26:48 +00:00
inc ZPMENUPtr+1
2022-10-25 06:05:54 +00:00
2020-10-20 06:01:04 +00:00
.1 lda (ZPPtr1)
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr)
2020-10-22 06:08:25 +00:00
beq .8
2020-10-09 15:28:01 +00:00
cmp #S.MITEM.T.SEP
bne .2
2022-10-25 06:05:54 +00:00
inc ZPPtr1 skip 1 byte
2022-10-20 06:07:40 +00:00
bne .5
2022-10-25 06:05:54 +00:00
inc ZPPtr1+1
bra .5
*--------------------------------------
.2 cmp #S.MITEM.T.ITEM
bne .3
2022-10-25 06:05:54 +00:00
ldy #1 T+ID+KEMOD+KEY+pICON+"text"
2020-10-20 06:01:04 +00:00
lda (ZPPtr1),y
ldy #S.MITEM.ID
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
2020-10-26 16:32:51 +00:00
ldy #2
lda (ZPPtr1),y
2020-10-22 06:08:25 +00:00
tax
iny
2020-10-22 06:08:25 +00:00
lda (ZPPtr1),y
2022-10-25 06:05:54 +00:00
ldy #S.MITEM.KEYMOD+1
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
dey KEY
txa
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
2020-10-27 07:09:20 +00:00
lda #4
bra .4 skip 4 bytes
2022-10-25 06:05:54 +00:00
*--------------------------------------
.3 ldy #1 skip T+pMENU+pICON+"text"
lda (ZPPtr1),y
2020-10-23 15:23:19 +00:00
tax
iny
lda (ZPPtr1),y
2020-10-26 16:32:51 +00:00
2020-10-23 15:23:19 +00:00
ldy #S.MITEM.pMENU+1
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
2020-10-23 15:23:19 +00:00
dey
txa
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
lda #3 skip 3 bytes
2022-10-25 06:05:54 +00:00
.4 jsr SkipAPtr1
ldy #1
2020-10-23 15:23:19 +00:00
lda (ZPPtr1),y
ldy #S.MITEM.pICON+1
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
dey
lda (ZPPtr1)
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
2022-10-25 06:05:54 +00:00
lda #2 skip pICON
jsr SkipAPtr1
2022-10-25 06:05:54 +00:00
2022-10-20 06:07:40 +00:00
ldy #S.MITEM.pTEXT
lda ZPPtr1
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
iny
lda ZPPtr1+1
2022-10-19 06:26:48 +00:00
sta (ZPMENUPtr),y
2022-10-25 06:05:54 +00:00
jsr SkipStrZPtr1 skip "TEXT\0"
2020-10-26 16:32:51 +00:00
2022-10-19 06:26:48 +00:00
ldy #S.MITEM.S
lda #0
sta (ZPMENUPtr),y
2022-10-25 06:05:54 +00:00
2022-10-20 06:07:40 +00:00
.5 lda ZPMENUPtr
clc
adc #S.MITEM
2022-10-19 06:26:48 +00:00
sta ZPMENUPtr
bcc .1
2022-10-25 06:05:54 +00:00
2022-10-19 06:26:48 +00:00
inc ZPMENUPtr+1
bra .1
.8 clc
rts
2020-10-23 15:23:19 +00:00
*--------------------------------------
2020-10-20 06:01:04 +00:00
MENU.SetMenuSizePos
2020-10-09 15:28:01 +00:00
stz IY Icon Margin W
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
stz IE Max Text W
stz IE+1
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
stz INE Max Mod-Key W
2022-10-19 06:26:48 +00:00
stz INE+1
2020-10-09 15:28:01 +00:00
lda #2 2px Borders
sta DY Menu H
2020-10-09 06:02:45 +00:00
stz DY+1
2020-10-20 06:01:04 +00:00
jsr MENU.GetMItems
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
.1 lda (ZPPtr1)
beq .3
2020-10-12 06:04:19 +00:00
2022-10-19 06:26:48 +00:00
cmp #S.MITEM.T.SEP
beq .2
2020-10-20 06:01:04 +00:00
jsr MENU.GetMItemW
2022-10-19 06:26:48 +00:00
.2 jsr MENU.NextMItemDY
2020-10-09 15:28:01 +00:00
bra .1
2020-10-20 06:01:04 +00:00
.3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu)
2020-10-09 15:28:01 +00:00
clc
2020-10-20 06:01:04 +00:00
adc IY Icon W
2020-10-12 06:04:19 +00:00
sta DX
2020-10-20 06:01:04 +00:00
stz DX+1
2020-10-12 06:04:19 +00:00
2020-10-20 06:01:04 +00:00
lda DX
2020-10-12 06:04:19 +00:00
sec 1px sep
2020-10-20 06:01:04 +00:00
adc IE Max Text W
2020-10-09 15:28:01 +00:00
sta DX
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
lda DX+1
adc IE+1
sta DX+1
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
lda DX
2020-10-12 06:04:19 +00:00
sec 1px sep
2020-10-20 06:01:04 +00:00
adc INE Max Mod-Key W
2020-10-09 15:28:01 +00:00
sta DX
bcc .4
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
inc DX+1
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
.4 ldy #S.OBJ.W
2020-10-12 06:04:19 +00:00
sta (ZPMENUPtr),y
iny
lda DX+1
sta (ZPMENUPtr),y
iny #S.OBJ.H
lda DY
sta (ZPMENUPtr),y
iny
lda DY+1
sta (ZPMENUPtr),y
2020-10-26 16:32:51 +00:00
2020-10-20 09:38:48 +00:00
ldy #S.MENU.iW
2020-10-20 06:01:04 +00:00
lda IY
sta (ZPMENUPtr),y
2020-10-20 09:38:48 +00:00
2022-10-19 06:26:48 +00:00
ldy #S.MENU.tW
2020-10-20 06:01:04 +00:00
lda IE
sta (ZPMENUPtr),y
iny
lda IE+1
sta (ZPMENUPtr),y
2020-10-20 09:38:48 +00:00
iny #S.MENU.kW
2020-10-20 06:01:04 +00:00
lda INE
sta (ZPMENUPtr),y
iny
lda INE+1
sta (ZPMENUPtr),y
2020-10-12 06:04:19 +00:00
ldy #S.OBJ.Y1
2020-10-20 06:01:04 +00:00
lda DY
2020-10-09 15:28:01 +00:00
clc
2020-10-12 06:04:19 +00:00
adc (ZPMENUPtr),y
2020-10-09 15:28:01 +00:00
tax
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
iny
2020-10-20 06:01:04 +00:00
lda DY+1
2020-10-12 06:04:19 +00:00
adc (ZPMENUPtr),y
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
cpx WND.Screen+S.OBJ.H
sbc WND.Screen+S.OBJ.H+1
bcc .5
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
ldy #S.OBJ.Y1
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
lda (ZPMENUPtr),y
* sec
sbc DY
sta (ZPMENUPtr),y
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
iny
2020-10-26 16:32:51 +00:00
2020-10-09 15:28:01 +00:00
lda (ZPMENUPtr),y
sbc DY+1
sta (ZPMENUPtr),y
2020-10-09 06:02:45 +00:00
2020-10-12 06:04:19 +00:00
.5 >LDYA ZPMENUPtr
jsr OBJ.SetX2Y2
2020-10-09 06:02:45 +00:00
2020-10-20 06:01:04 +00:00
rts
2020-10-09 15:28:01 +00:00
*--------------------------------------
2022-10-19 06:26:48 +00:00
MENU.GetMItemW ldy #S.MITEM.pICON
2020-10-09 15:28:01 +00:00
lda (ZPPtr1),y
iny
ora (ZPPtr1),y
beq .1
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
lda #17 Reserve space for Icon W + 1px SEP
sta IY
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
.1 jsr MENU.GetText
2020-10-09 15:28:01 +00:00
ldx hSYSFON
jsr FON.GetTextSize
2020-10-12 06:04:19 +00:00
ldx CB.Cache+S.CB.SrcW
cpx IE
2020-10-09 15:28:01 +00:00
lda CB.Cache+S.CB.SrcW+1
sbc IE+1
bcc .2
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
stx IE Set Max text W
2020-10-09 15:28:01 +00:00
lda CB.Cache+S.CB.SrcW+1
sta IE+1
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
.2 jsr MENU.GetKeyString
bcs .8
2020-10-09 15:28:01 +00:00
ldx hSYSFON
jsr FON.GetTextSize
2020-10-26 16:32:51 +00:00
2022-10-19 06:26:48 +00:00
ldx CB.Cache+S.CB.SrcW
2020-10-12 06:04:19 +00:00
cmp INE
2022-10-19 06:26:48 +00:00
lda CB.Cache+S.CB.SrcW+1
sbc INE+1
2020-10-12 06:04:19 +00:00
bcc .8
2020-10-26 16:32:51 +00:00
2022-10-19 06:26:48 +00:00
stx INE set Max Mod-key W
lda CB.Cache+S.CB.SrcW+1
sta INE+1
2020-10-26 16:32:51 +00:00
.8 rts
2020-10-09 15:28:01 +00:00
*--------------------------------------
* hMENU8, ItemID8, Prop8, Value16
*--------------------------------------
MENU.SetMItemProp
ldy #4 hMENU
lda (pStack),y
>SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
ldy #3 ID8
lda (pStack),y
tax
jsr MENU.FindMItemByID
bcs .9
ldy #2 Prop8
lda (pStack),y
tay
>PULLA Value16
sta (ZPPtr1),y
iny
>PULLA
sta (ZPPtr1),y
* clc
.8 >POP 3
.9 rts
*--------------------------------------
MENU.FindMItemByID
jsr MENU.GetMItems
.1 lda (ZPPtr1)
beq .9
cmp #S.MITEM.T.SEP
beq .7
txa
ldy #S.MITEM.ID
cmp (ZPPtr1),y
beq .8
.7 jsr MENU.NextMItem
bra .1
.8 clc
rts
.9 sec
rts
*--------------------------------------
2022-10-25 06:05:54 +00:00
MENU.Enter jsr MENU.GetDXDY
stz D
stz D+1
ldy #S.OBJ.X2
lda DX X1
clc
adc (ZPMENUPtr),y
sta IE IE = X2
iny
lda DX+1
adc (ZPMENUPtr),y
sta IE+1
jsr MENU.GetMItems
.1 lda (ZPPtr1)
beq .4
cmp #S.MITEM.T.SEP
beq .2
lda DY Y1
2022-10-25 06:05:54 +00:00
clc
adc SYSFON.Hp2
sta INE INE = Y2
lda DY+1
adc #0
sta INE+1
>LDYAI DX X1,X2,Y1,Y2
jsr MOU.InRectYA
bcc .3
ldy #S.MITEM.S
lda (ZPPtr1),y
bpl .2
2022-10-25 06:05:54 +00:00
eor #S.MITEM.S.SELECTED
2022-10-20 06:07:40 +00:00
sta (ZPPtr1),y was selected before...
jsr CB.GetBuf
bcs .9
2022-10-25 06:05:54 +00:00
jsr MENU.DrawMItem
.2 jsr MENU.NextMItemDY
bra .1
2022-10-25 06:05:54 +00:00
*--------------------------------------
.3 ldy #S.MITEM.S
lda (ZPPtr1),y
2022-10-25 06:05:54 +00:00
bmi .5 already selected, nothing to do
eor #S.MITEM.S.SELECTED
sta (ZPPtr1),y
2022-10-25 06:05:54 +00:00
jsr CB.GetBuf
bcs .9
jsr MENU.DrawMItem
2022-10-25 06:05:54 +00:00
.30 ldx MENU.Stack.Idx
inx
cpx MENU.Stack.Cnt
beq .31
2022-10-25 06:05:54 +00:00
jsr MENU.Destroy
bra .30
2022-10-25 06:05:54 +00:00
.31 lda (ZPPtr1)
cmp #S.MITEM.T.SUBMENU
bne .2
2022-10-25 06:05:54 +00:00
ldy #S.MITEM.pMENU
lda (ZPPtr1),y
2022-10-25 06:05:54 +00:00
sta D
iny
lda (ZPPtr1),y
sta D+1
2022-10-25 06:05:54 +00:00
lda DY
sta Counter
lda DY+1
sta Counter+1
bra .2
*--------------------------------------
.8 clc
.9 rts
*--------------------------------------
2022-10-25 06:05:54 +00:00
.4 >LDYA L.WND.Screen
jsr CB.FlushBufToYA
2022-10-25 06:05:54 +00:00
lda D
ora D+1
beq .5
>PUSHW D pMENU
ldy #S.OBJ.X2+1
lda (ZPMENUPtr),y
>PUSHA
dey
2022-10-25 06:05:54 +00:00
lda (ZPMENUPtr),y
>PUSHA
2022-10-25 06:05:54 +00:00
>PUSHW Counter
jsr MENU.New
bcs .9
2022-10-25 06:05:54 +00:00
jmp MENU.Draw
*--------------------------------------
.5 lda MSG+S.MSG.S
bit #S.MSG.S.CLK
beq .8
lda #S.MSG.T.ID
sta MSG+S.MSG.T
2022-10-25 06:05:54 +00:00
ldy #S.MITEM.ID
lda (ZPPtr1),y
sta MSG+S.MSG.ID
jmp MENU.DestroyAll
*--------------------------------------
* DrawMenu(hMENU)
*--------------------------------------
MENU.Draw >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
2022-10-25 06:05:54 +00:00
jsr MENU.Save
bcs .9
jsr CB.GetBuf
bcs .9
2022-10-25 06:05:54 +00:00
>LDYA ZPMENUPtr
ldx #0
jsr OBJ.DrawBorders
2022-10-25 06:05:54 +00:00
jsr MENU.GetDXDY
jsr MENU.GetMItems
2022-10-19 06:26:48 +00:00
.1 lda (ZPPtr1)
beq .8
jsr MENU.DrawMItem
jsr MENU.NextMItemDY
2022-10-19 06:26:48 +00:00
bra .1
.8 >LDYA L.WND.Screen
2022-10-25 06:05:54 +00:00
jmp CB.FlushBufToYA
.9 rts
*--------------------------------------
2022-10-25 06:05:54 +00:00
MENU.DrawMItem jsr MENU.ResetX1Y1X2
2020-10-20 09:38:48 +00:00
2022-10-25 06:05:54 +00:00
lda (ZPPtr1)
cmp #S.MITEM.T.SEP
bne MENU.DrawMItem1
2020-10-26 16:32:51 +00:00
2022-10-27 15:14:06 +00:00
jsr CB.BorderLineH
2020-10-26 16:32:51 +00:00
jmp CB.Cache2CBBuf
2020-10-20 06:01:04 +00:00
*--------------------------------------
MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.CMD
2020-10-20 06:01:04 +00:00
lda #S.CB.OP.SET
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
2020-10-26 16:32:51 +00:00
2022-10-25 06:05:54 +00:00
ldx PREFS.MenuColor
2020-10-22 06:08:25 +00:00
jsr MENU.IsSelected
bcc .15
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
txa
eor #C.WHITE
tax
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
.15 stx CB.Cache+S.CB.COLOR
2020-10-26 16:32:51 +00:00
2022-10-25 06:05:54 +00:00
lda CB.Cache+S.CB.Y1
2020-10-20 06:01:04 +00:00
sec
adc SYSFON.H
sta CB.Cache+S.CB.Y2
2022-10-25 06:05:54 +00:00
lda CB.Cache+S.CB.Y1+1
2020-10-12 06:04:19 +00:00
adc #0
2020-10-20 06:01:04 +00:00
sta CB.Cache+S.CB.Y2+1
jsr CB.Cache2CBBuf
2022-10-19 15:23:41 +00:00
*--------------------------------------
inc CB.Cache+S.CB.Y1 Y1:1px margin
2020-10-20 06:01:04 +00:00
bne .12
2022-10-19 15:23:41 +00:00
inc CB.Cache+S.CB.Y1+1
2020-10-20 06:01:04 +00:00
2022-10-19 15:23:41 +00:00
.12 lda CB.Cache+S.CB.X1
2020-10-20 06:01:04 +00:00
clc
2020-10-13 15:54:55 +00:00
adc #MENU.LMargin TODO : Checked
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1
2020-10-20 06:01:04 +00:00
bcc .11
2022-10-19 15:23:41 +00:00
inc CB.Cache+S.CB.X1+1
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
.11 jsr MENU.GetIcon
2020-10-12 06:04:19 +00:00
beq .2
2020-10-26 16:32:51 +00:00
2022-10-19 15:23:41 +00:00
jsr DRAW.yaBM
2020-10-26 16:32:51 +00:00
2022-10-19 15:23:41 +00:00
.2 lda CB.Cache+S.CB.X1
2020-10-12 06:04:19 +00:00
clc
2020-10-20 09:38:48 +00:00
ldy #S.MENU.iW
adc (ZPMENUPtr),y
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1
2020-10-20 06:01:04 +00:00
bcc .21
2020-10-12 06:04:19 +00:00
2022-10-19 15:23:41 +00:00
inc CB.Cache+S.CB.X1+1
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
.21 jsr MENU.GetText
2020-10-12 06:04:19 +00:00
2020-10-22 06:08:25 +00:00
jsr MENU.IsSelected
2020-10-12 06:04:19 +00:00
ldx hSYSFON
2022-10-19 15:23:41 +00:00
jsr DRAW.YAText
2020-10-12 06:04:19 +00:00
2022-10-19 15:23:41 +00:00
lda CB.Cache+S.CB.X1
2020-10-12 06:04:19 +00:00
sec
2020-10-20 09:38:48 +00:00
ldy #S.MENU.tW
adc (ZPMENUPtr),y
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X1+1
2020-10-20 06:01:04 +00:00
iny
2020-10-20 09:38:48 +00:00
adc (ZPMENUPtr),y
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1+1
2020-10-12 06:04:19 +00:00
2022-10-19 15:23:41 +00:00
lda (ZPPtr1)
cmp #S.MITEM.T.ITEM
bne .3
2022-10-25 06:05:54 +00:00
2020-10-13 15:54:55 +00:00
jsr MENU.GetKeyString
bcs .3
2020-10-13 15:54:55 +00:00
2020-10-22 06:08:25 +00:00
jsr MENU.IsSelected
2020-10-12 06:04:19 +00:00
ldx hSYSFON
2022-10-19 15:23:41 +00:00
jsr DRAW.YAText
2020-10-26 16:32:51 +00:00
.3 lda (ZPPtr1)
cmp #S.MITEM.T.SUBMENU
2020-10-16 15:25:29 +00:00
bne .8
2020-10-12 06:04:19 +00:00
2022-10-19 15:23:41 +00:00
lda CB.Cache+S.CB.X1
2020-10-16 15:25:29 +00:00
sec
2020-10-20 09:38:48 +00:00
ldy #S.MENU.kW
adc (ZPMENUPtr),y
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1
2022-10-19 15:23:41 +00:00
lda CB.Cache+S.CB.X1+1
2020-10-20 06:01:04 +00:00
iny
2020-10-20 09:38:48 +00:00
adc (ZPMENUPtr),y
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1+1
2020-10-26 16:32:51 +00:00
2020-10-16 15:25:29 +00:00
ldx #BM.ID.RIGHT
2022-10-19 15:23:41 +00:00
jmp DRAW.xBM
2022-10-19 15:23:41 +00:00
.8 clc
2020-10-12 06:04:19 +00:00
rts
*--------------------------------------
MENU.GetIcon ldy #S.MITEM.pICON+1
lda (ZPPtr1),y
bne .1
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
dey
lda (ZPPtr1),y
beq .8
tax
ldy L.BMs,x
lda L.BMs+1,x NON ZERO
.8 rts
2020-10-26 16:32:51 +00:00
2020-10-12 06:04:19 +00:00
.1 pha
dey
lda (ZPPtr1),y
tay
pla NON ZERO
2020-10-26 16:32:51 +00:00
rts
2020-10-12 06:04:19 +00:00
*--------------------------------------
2020-10-22 06:08:25 +00:00
MENU.IsSelected phy
pha
2020-10-26 16:32:51 +00:00
ldy #S.MITEM.S
lda (ZPPtr1),y
asl
2020-10-26 16:32:51 +00:00
2020-10-22 06:08:25 +00:00
.9 pla
ply
rts
*--------------------------------------
MENU.GetText ldy #S.MITEM.pTEXT
2022-10-25 06:05:54 +00:00
lda (ZPPtr1),y
pha
iny
lda (ZPPtr1),y
ply
2020-10-12 06:04:19 +00:00
rts
*--------------------------------------
* ZPPtr1 = pMITEM
*--------------------------------------
2020-10-12 06:04:19 +00:00
MENU.GetKeyString
ldy #S.MITEM.KEY
2020-10-12 06:04:19 +00:00
lda (ZPPtr1),y
dey S.MITEM.KEYMOD
ora (ZPPtr1),y
beq .9
2020-10-12 06:04:19 +00:00
ldx #0
lda (ZPPtr1),y
beq .3
2022-10-25 06:05:54 +00:00
bit #KEYMOD.CTRL
beq .1
2022-10-25 06:05:54 +00:00
ldy #KEYMOD.S.CTRL
jsr .4
.1 bit #KEYMOD.OA
beq .2
ldy #KEYMOD.S.OA
jsr .4
.2 bit #KEYMOD.CA
beq .3
2022-10-25 06:05:54 +00:00
ldy #KEYMOD.S.CA
jsr .4
.3 ldy #S.MITEM.KEY
lda (ZPPtr1),y
sta TEXTBUF,x
stz TEXTBUF+1,x
>LDYA L.TEXTBUF
2020-10-13 15:54:55 +00:00
clc
rts
*--------------------------------------
.4 pha
2020-10-12 06:04:19 +00:00
.5 lda KEYMOD.S,y
sta TEXTBUF,x
beq .6
2022-10-25 06:05:54 +00:00
inx
iny
bra .5
.6 pla
rts
.9 sec
rts
2020-10-12 06:04:19 +00:00
*--------------------------------------
2020-10-20 06:01:04 +00:00
MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE
jsr CB.InitCacheA
2020-10-15 06:16:45 +00:00
ldy #S.OBJ.X1
ldx #0
.1 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.X1,x
iny
inx
cpx #8 X1,Y1,X2,Y2
bne .1
jsr CB.GFXWrite
2020-10-15 06:16:45 +00:00
2021-02-22 17:17:37 +00:00
>SYSCALL2 NewStkObj
2020-10-15 06:16:45 +00:00
bcs .9
2020-10-26 16:32:51 +00:00
2020-10-15 06:16:45 +00:00
stx CB.Cache+S.CB.DstPtr
txa
ldy #S.MENU.hSAVEBUF
sta (ZPMENUPtr),y
2020-10-26 16:32:51 +00:00
2020-10-15 06:16:45 +00:00
lda #S.CB.CMD.BITBLT
sta CB.Cache+S.CB.CMD
2020-10-26 16:32:51 +00:00
2020-10-15 06:16:45 +00:00
lda #S.CB.OP.SAVE
sta CB.Cache+S.CB.OP
ldy #S.OBJ.W
ldx #0
.2 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.SrcW,x
iny
inx
cpx #4 W,H
bne .2
jsr CB.GFXWrite
2020-10-12 06:04:19 +00:00
clc
2020-10-15 06:16:45 +00:00
2020-10-26 16:32:51 +00:00
.9 rts
2020-10-15 06:16:45 +00:00
*--------------------------------------
2022-10-25 06:05:54 +00:00
MENU.GetDXDY ldy #S.OBJ.X1
2022-10-19 15:23:41 +00:00
lda (ZPMENUPtr),y
clc
adc #1
sta DX
iny
lda (ZPMENUPtr),y
adc #0
sta DX+1
ldy #S.OBJ.Y1
2022-10-19 06:26:48 +00:00
lda (ZPMENUPtr),y
clc
adc #1
2022-10-19 15:23:41 +00:00
sta DY
2022-10-19 06:26:48 +00:00
iny
lda (ZPMENUPtr),y
adc #0
2022-10-19 15:23:41 +00:00
sta DY+1
2022-10-19 06:26:48 +00:00
2020-10-20 06:01:04 +00:00
rts
*--------------------------------------
2022-10-20 06:07:40 +00:00
MENU.ResetX1Y1X2
2022-10-25 06:05:54 +00:00
ldy #S.OBJ.X1
lda (ZPMENUPtr),y
2022-10-20 06:07:40 +00:00
clc
2022-10-25 06:05:54 +00:00
adc #1
sta CB.Cache+S.CB.X1
iny
lda (ZPMENUPtr),y
adc #0
2022-10-19 15:23:41 +00:00
sta CB.Cache+S.CB.X1+1
2022-10-25 06:05:54 +00:00
2022-10-20 06:07:40 +00:00
lda DY
sta CB.Cache+S.CB.Y1
lda DY+1
sta CB.Cache+S.CB.Y1+1
2020-10-26 16:32:51 +00:00
2022-10-25 06:05:54 +00:00
ldy #S.OBJ.X2
lda (ZPMENUPtr),y
sec
sbc #1
sta CB.Cache+S.CB.X2
iny
lda (ZPMENUPtr),y
sbc #0
sta CB.Cache+S.CB.X2+1
rts
*--------------------------------------
MENU.FindSelected
>LDYA ZPPtr1
>STYA D
jsr MENU.GetMItems
2022-10-25 06:05:54 +00:00
2020-10-20 06:01:04 +00:00
.1 lda (ZPPtr1)
beq .9
2020-10-26 16:32:51 +00:00
cmp #S.MITEM.T.SEP
beq .2
2020-10-26 16:32:51 +00:00
ldy #S.MITEM.S
lda (ZPPtr1),y
bmi .8
2020-10-26 16:32:51 +00:00
.2 jsr MENU.NextMItem
2020-10-20 06:01:04 +00:00
bra .1
2020-10-26 16:32:51 +00:00
2020-10-15 06:16:45 +00:00
.8 clc
2020-10-12 06:04:19 +00:00
rts
2022-10-25 06:05:54 +00:00
.9 >LDYA D
>STYA ZPPtr1
2022-10-25 06:05:54 +00:00
sec
2022-10-25 06:05:54 +00:00
rts
2020-10-20 06:01:04 +00:00
*--------------------------------------
MENU.GetMItems lda ZPMENUPtr
clc
adc #S.MENU.Items
2020-10-20 06:01:04 +00:00
sta ZPPtr1
lda ZPMENUPtr+1
adc /S.MENU.Items
2020-10-20 06:01:04 +00:00
sta ZPPtr1+1
rts
*--------------------------------------
MENU.NextMItemDY
lda (ZPPtr1)
2020-10-20 06:01:04 +00:00
sec
eor #S.MITEM.T.SEP
2020-10-20 06:01:04 +00:00
beq .1
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
lda SYSFON.Hp2
clc
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
.1 adc DY
sta DY
bcc MENU.NextMItem
2020-10-26 16:32:51 +00:00
2020-10-20 06:01:04 +00:00
inc DY+1
2020-10-26 16:32:51 +00:00
MENU.NextMItem lda #S.MITEM
jmp SkipAPtr1
2020-10-09 06:02:45 +00:00
*--------------------------------------
2022-10-25 06:05:54 +00:00
MENU.DestroyAll sec
.HS 90 BCC
MENU.Destroy clc
ldx MENU.Stack.Cnt
beq .8
php
bit PTR.bVisible
bpl .1
jsr PTR.Hide.I
.1 lda #S.CB.CMD.BITBLT
jsr CB.InitCacheA
lda #S.CB.OP.RESTORE
sta CB.Cache+S.CB.OP
plp
.2 php
ldx MENU.Stack.Cnt
lda MENU.Stack-1,x
>SYSCALL2 GetMemPtr
>STYA ZPObjPtr
ldy #S.OBJ.X1
ldx #0
.3 lda (ZPObjPtr),y
sta CB.Cache+S.CB.X1,x
iny
inx
cpx #8 X1,Y1,X2,Y2
bne .3
ldy #S.OBJ.W
ldx #0
.4 lda (ZPObjPtr),y
sta CB.Cache+S.CB.SrcW,x
iny
inx
cpx #4 W,H
bne .4
ldy #S.MENU.hSAVEBUF
lda (ZPObjPtr),y
sta CB.Cache+S.CB.DstPtr
jsr CB.GFXWrite
lda CB.Cache+S.CB.DstPtr
>SYSCALL2 FreeStkObj
ldx MENU.Stack.Cnt
lda MENU.Stack-1,x
>SYSCALL2 FreeMem
plp Destroy all ?
dec MENU.Stack.Cnt
bcc .7 no
bne .2
.7 bit PTR.bVisible
bpl .8
jmp PTR.Show.I
.8 clc
rts
*--------------------------------------
MAN
2020-06-30 15:32:23 +00:00
SAVE usr/src/lib/libgui.s.menu
LOAD usr/src/lib/libgui.s
ASM