diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 284e069c..68315ff1 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index a8b88154..ea01e519 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index ef362260..37c05401 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -3,7 +3,7 @@ NEW *-------------------------------------- IO.D2.SeekTimeR .EQ 160 LIBBLKDEV Recalibration IO.D2.SeekTimeF .EQ 140 LIBBLKDEV Track Formatter -IO.D2.SeekTimeB .EQ 140 LIBBLKDEV Boot Block +IO.D2.SeekTimeB .EQ 95 LIBBLKDEV Boot Block IO.D2.SeekTimeP .EQ 75 ProDOS.FX initial IO.D2.SeekTimeI .EQ 20 ProDOS.FX increment -> until > 128 *-------------------------------------- diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index 99c80215..bfd2232a 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -123,10 +123,10 @@ S.WND.hCUR .EQ S.OBJ+16 S.WND.TitleX1 .EQ S.OBJ+18 S.WND.TitleX2 .EQ S.OBJ+20 S.WND.TBarY2 .EQ S.OBJ+22 -S.WND.MBarY1 .EQ S.OBJ+22 +S.WND.MBarY1 .EQ S.OBJ+22 S.WND.MBarY2 .EQ S.OBJ+24 -S.WND.InnerY1 .EQ S.OBJ+24 -S.WND.InnerY2 .EQ S.OBJ+26 +S.WND.InnerY1 .EQ S.OBJ+24 +S.WND.InnerY2 .EQ S.OBJ+26 S.WND.SBarY1 .EQ S.OBJ+26 S.WND.InnerW .EQ S.OBJ+28 S.WND.InnerH .EQ S.OBJ+30 @@ -152,8 +152,12 @@ S.MENU.pX1 .EQ S.OBJ+4 S.MENU.pY1 .EQ S.OBJ+6 S.MENU.pX2 .EQ S.OBJ+8 S.MENU.pY2 .EQ S.OBJ+10 +S.MENU.Selected .EQ S.OBJ+12 +S.MENU.tOffset .EQ S.OBJ+13 +S.MENU.kOffset .EQ S.OBJ+14 +S.MENU.rOffset .EQ S.OBJ+16 * -S.MENU .EQ S.OBJ+12 +S.MENU .EQ S.OBJ+18 *-------------------------------------- S.MITEM.NEXT .EQ 0 S.MITEM.F .EQ 1 diff --git a/LIB/LIBBLKDEV.S.BB.txt b/LIB/LIBBLKDEV.S.BB.txt index c8207ce8..120de97f 100644 --- a/LIB/LIBBLKDEV.S.BB.txt +++ b/LIB/LIBBLKDEV.S.BB.txt @@ -374,7 +374,7 @@ BB.Seek lda BB.HdrTrk get track we're on jsr BB.Wait jsr BB.PhasesOff - bcs BB.Read ALWAYS + bra BB.Read *-------------------------------------- BB.PhasesOff bit IO.D2.Ph0Off,x nop diff --git a/LIB/LIBGUI.G.BM.txt b/LIB/LIBGUI.G.BM.txt index 945f3ba4..422000e7 100644 --- a/LIB/LIBGUI.G.BM.txt +++ b/LIB/LIBGUI.G.BM.txt @@ -89,7 +89,27 @@ BM.Min.AND .HS FF0F .HS 0F0F .HS FF0F *-------------------------------------- -BM.Left +BM.Left .DA #S.BM.F.BBP1 + .DA #1 RowBytes + .DA 7 W + .DA 7 Y + .DA BM.Left.AND-BM.Left + + .DA #%0000000 + .DA #%0010000 + .DA #%0011000 + .DA #%0011100 + .DA #%0011000 + .DA #%0010000 + .DA #%0000000 + +BM.Left.AND .DA #%1001111 + .DA #%1000111 + .DA #%1000011 + .DA #%1000001 + .DA #%1000011 + .DA #%1000111 + .DA #%1001111 *-------------------------------------- BM.Right .DA #S.BM.F.BBP1 .DA #1 RowBytes @@ -113,9 +133,49 @@ BM.Right.AND .DA #%1111001 .DA #%1110001 .DA #%1111001 *-------------------------------------- -BM.Up +BM.Up .DA #S.BM.F.BBP1 + .DA #1 RowBytes + .DA 7 W + .DA 7 Y + .DA BM.Up.AND-BM.Up + + .DA #%0000000 + .DA #%0000000 + .DA #%0001000 + .DA #%0011100 + .DA #%0111110 + .DA #%0000000 + .DA #%0000000 + +BM.Up.AND .DA #%1111111 + .DA #%1110111 + .DA #%1100011 + .DA #%1000001 + .DA #%0000000 + .DA #%0000000 + .DA #%1111111 *-------------------------------------- -BM.Down +BM.Down .DA #S.BM.F.BBP1 + .DA #1 RowBytes + .DA 7 W + .DA 7 Y + .DA BM.Down.AND-BM.Down + + .DA #%0000000 + .DA #%0000000 + .DA #%0111110 + .DA #%0011100 + .DA #%0001000 + .DA #%0000000 + .DA #%0000000 + +BM.Down.AND .DA #%1111111 + .DA #%0000000 + .DA #%0000000 + .DA #%1000001 + .DA #%1100011 + .DA #%1110111 + .DA #%1111111 *-------------------------------------- MAN SAVE usr/src/lib/libgui.g.bm diff --git a/LIB/LIBGUI.S.DRAW.txt b/LIB/LIBGUI.S.DRAW.txt index c0addd90..eb1de3e9 100644 --- a/LIB/LIBGUI.S.DRAW.txt +++ b/LIB/LIBGUI.S.DRAW.txt @@ -272,6 +272,72 @@ DrawText clc *-------------------------------------- * *-------------------------------------- +DRAW.YABMAtDXDY >STYA ZPBMPtr Src BM + + lda #S.CB.CMD.BITBLT + jsr CB.InitCacheA + + lda #S.CB.OP.MASK+S.CB.OP.ORA+S.CB.OP.COLOR + sta CB.Cache+S.CB.OP + + lda #S.CB.M.C16 + sta CB.Cache+S.CB.M + + ldx #3 + +.1 lda DX,x + sta CB.Cache+S.CB.X1,x + dex + bpl .1 + + ldx #3 + + ldy #S.BM.W+3 + +.2 lda (ZPBMPtr),y + sta CB.Cache+S.CB.SrcW,x + dey + dex + bpl .2 + + lda ZPBMPtr + sta CB.Cache+S.CB.SrcPtr + + lda ZPBMPtr+1 + sta CB.Cache+S.CB.SrcPtr+1 + + jmp PutCBCache2CBBuf +*-------------------------------------- +DRAW.YATextAtDXDY + phx + jsr CB.ClearCache + >STYA CB.Cache+S.CB.TxtPtr + plx + stx CB.Cache+S.CB.hFont + + lda #S.CB.CMD.DRAWTEXT2 + sta CB.Cache+S.CB.CMD + + lda #0 + ror + eor #S.CB.OP.INVERSE + ora #S.CB.OP.SET + +* lda #S.CB.OP.XOR + sta CB.Cache+S.CB.OP + + lda #S.CB.M.MONO + sta CB.Cache+S.CB.M + + ldx #3 + +.1 lda DX,x DX,DY -> S.CB.X1,S.CB.Y1 + sta CB.Cache+S.CB.X1,x + dex + bpl .1 + + jmp PutCBCache2CBBuf +*-------------------------------------- DRAW.ToGlobal >LDYA ZPWNDPtr >STYA ZPPtr1 diff --git a/LIB/LIBGUI.S.MENU.txt b/LIB/LIBGUI.S.MENU.txt index 72b925dd..398fa24b 100644 --- a/LIB/LIBGUI.S.MENU.txt +++ b/LIB/LIBGUI.S.MENU.txt @@ -93,13 +93,18 @@ MENU.MBarInit >STYA ZPMENUPtr *-------------------------------------- MENU.New ldy MENU.Stack.Top cpy #MENU.MAX - bcs .90 + bcc .10 + jmp .90 - >LDYAI S.MENU +.10 >LDYAI S.MENU >SYSCALL2 getmem bcs .99 >STYA ZPMENUPtr + txa hMenu + + ldx MENU.Stack.Top + sta MENU.Stack,x lda #S.OBJ.T.MENU sta (ZPMENUPtr) S.OBJ.T @@ -119,7 +124,7 @@ MENU.New ldy MENU.Stack.Top iny sta (ZPMENUPtr),y - >PULLW ZPPtr1 + >PULLW ZPRECTPtr Parent RECT >PULLA ldy #S.OBJ.Y1 @@ -138,22 +143,24 @@ MENU.New ldy MENU.Stack.Top lda ZPMENUPtr clc adc #S.MENU.pX1 - sta ZPMENUPtr - bcc .2 + sta ZPPtr1 - inc ZPMENUPtr+1 + lda ZPMENUPtr+1 + adc /S.MENU.pX1 + sta ZPPtr1+1 -.2 ldy #S.RECT-1 + ldy #S.RECT-1 -.3 lda (ZPPtr1),y - sta (ZPMENUPtr),y +.3 lda (ZPRECTPtr),y + sta (ZPPtr1),y dey bpl .3 - txa hMenu + jsr MENU.SetMenuSizePos ldx MENU.Stack.Top - sta MENU.Stack,x + lda MENU.Stack,x + inc MENU.Stack.Top clc @@ -163,25 +170,132 @@ MENU.New ldy MENU.Stack.Top sec .99 >POP 8 MENU.New.RTS rts +*-------------------------------------- +* hMENU8, ItemID8, Prop8, Value16 +*-------------------------------------- +MENU.SetMItemProp + ldy #4 + lda (pStack),y hMENU + >SYSCALL2 GetMemPtr + >STYA ZPMENUPtr + + bra .7 + + jsr MENU.GetMItems + +.1 lda (ZPPtr1) + beq .8 + + ldy #S.MITEM.F + lda (ZPPtr1),y + cmp #S.MITEM.F.SEP + beq .2 + + ldy #S.MITEM.ID + lda (ZPPtr1),y + + ldy #3 ID8 + cmp (pStack),y + beq .7 + +.2 jsr MENU.NextMItem + bra .1 + +.7 ldy #2 Prop8 + lda (pStack),y + + tay + + >PULLA Value16 + sta (ZPPtr1),y + + iny + >PULLA + sta (ZPPtr1),y + +.8 >RET 3 * ---------------------------------------------- * |Icon ChkMrk "Menu Item" KEYMOD1-KEYMOD2-KEY>| * ---------------------------------------------- MENU.Show >SYSCALL2 GetMemPtr >STYA ZPMENUPtr - + + jsr MENU.Save + bcs .9 + jsr GetCBBuf - bcs MENU.New.RTS - - ldy #S.MENU.MITEMS - lda (ZPMENUPtr),y - sta ZPPtr1 - iny - lda (ZPMENUPtr),y - sta ZPPtr1+1 + bcs .9 - stz DX - stz DX+1 + jsr MENU.ShowBorders + + jsr MENU.GetMItems + jsr MENU.GetDYW + +.6 lda (ZPPtr1) + beq .8 + jsr MENU.GetDX + + jsr MENU.ShowMItem + jsr MENU.NextMItem + bra .6 + +.8 >LDYA L.WND.Screen + jmp DrawCBPtrToYA1 + +.9 rts +*-------------------------------------- +MENU.Enter jsr MENU.GetDX + jsr MENU.GetDYW + + lda Counter W + clc + adc DX + sta IE IE = X2 + + lda Counter+1 + adc DX+1 + sta IE+1 + + jsr MENU.GetMItems + +.1 lda (ZPPtr1) + beq .9 + + ldy #S.MITEM.F + lda (ZPPtr1),y + cmp #S.MITEM.F.SEP + beq .7 + + lda DY + sec + adc SYSFON.H + sta INE INE = Y2 + lda DY+1 + adc #0 + sta INE+1 + + >LDYAI DX + jsr MOU.InRectYA + bcs .7 + + ldy #S.MITEM.ID + lda (ZPPtr1),y + + ldy #S.MENU.Selected + sta (ZPMENUPtr),y + + jsr GetCBBuf + jsr MENU.ShowMItem1 + >LDYA L.WND.Screen + jmp DrawCBPtrToYA1 + +.7 jsr MENU.NextMItem + bra .1 + +.9 rts +*-------------------------------------- +MENU.SetMenuSizePos stz IY Icon Margin W stz IE Max Text W @@ -192,37 +306,25 @@ MENU.Show >SYSCALL2 GetMemPtr lda #2 2px Borders sta DY Menu H stz DY+1 + + jsr MENU.GetMItems .1 lda (ZPPtr1) beq .3 - jsr MENU.Show.GetW - - lda DY - clc - adc SYSFON.H - sta DY - bcc .2 - inc DY+1 - -.2 lda (ZPPtr1) - clc - adc ZPPtr1 - sta ZPPtr1 - bcc .1 - inc ZPPtr1+1 + jsr MENU.GetMItemW + jsr MENU.NextMItem bra .1 -.3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu) +.3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu) clc - adc IY + adc IY Icon W sta DX - bcc .30 - inc DX+1 + stz DX+1 -.30 lda DX + lda DX sec 1px sep - adc IE Text W + adc IE Max Text W sta DX lda DX+1 @@ -231,7 +333,7 @@ MENU.Show >SYSCALL2 GetMemPtr lda DX sec 1px sep - adc INE Mod-Key W + adc INE Max Mod-Key W sta DX bcc .4 @@ -247,18 +349,36 @@ MENU.Show >SYSCALL2 GetMemPtr lda DY sta (ZPMENUPtr),y - tax iny lda DY+1 sta (ZPMENUPtr),y - pha - txa + + ldy #S.MENU.tOffset + lda IY + sta (ZPMENUPtr),y + + iny #S.MENU.kOffset + lda IE + sta (ZPMENUPtr),y + iny + lda IE+1 + sta (ZPMENUPtr),y + + iny #S.MENU.rOffset + lda INE + sta (ZPMENUPtr),y + iny + lda INE+1 + sta (ZPMENUPtr),y + ldy #S.OBJ.Y1 + lda DY clc adc (ZPMENUPtr),y tax - pla + iny + lda DY+1 adc (ZPMENUPtr),y cpx WND.Screen+S.OBJ.H @@ -280,59 +400,13 @@ MENU.Show >SYSCALL2 GetMemPtr .5 >LDYA ZPMENUPtr jsr OBJ.SetX2Y2 - - jsr MENU.Save - bcs MENU.Show.RTS - - jsr MENU.Show.Borders - - ldy #S.MENU.MITEMS - lda (ZPMENUPtr),y - sta ZPPtr1 - iny - lda (ZPMENUPtr),y - sta ZPPtr1+1 - ldy #S.OBJ.Y1 - lda (ZPMENUPtr),y - clc - adc #1 - sta DY - iny - lda (ZPMENUPtr),y - adc #0 - sta DY+1 - -.6 lda (ZPPtr1) - beq .8 - - jsr MENU.Show.Item - - lda DY - clc - adc SYSFON.H - sta DY - bcc .7 - - inc DY+1 - -.7 lda (ZPPtr1) - clc - adc ZPPtr1 - sta ZPPtr1 - bcc .6 - inc ZPPtr1+1 - bra .6 - -.8 >LDYA L.WND.Screen - jmp DrawCBPtrToYA1 - -MENU.Show.RTS rts + rts *-------------------------------------- -MENU.Show.GetW ldy #S.MITEM.F +MENU.GetMItemW ldy #S.MITEM.F lda (ZPPtr1),y cmp #S.MITEM.F.SEP - beq MENU.Show.RTS + beq .8 ldy #S.MITEM.pICON lda (ZPPtr1),y @@ -371,151 +445,162 @@ MENU.Show.GetW ldy #S.MITEM.F .8 rts *-------------------------------------- -MENU.Show.Borders - lda #S.CB.CMD.FILLRECT - jsr PutA2CBBuf +MENU.ShowBorders + lda #S.CB.CMD.HLINE + jsr CB.InitCacheA + lda #S.CB.OP.SET - jsr PutA2CBBuf + sta CB.Cache+S.CB.OP lda #S.CB.M.MONO - jsr PutA2CBBuf - lda PREFS.MENUCOLOR - jsr PutA2CBBuf - ldy #S.OBJ.X1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.X2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y2 - jsr MENU.Show.Borders.Y - - lda #S.CB.CMD.HLINE TOP - jsr MENU.Show.Borders.H - ldy #S.OBJ.X1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.X2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y1 - jsr MENU.Show.Borders.Y - - lda #S.CB.CMD.VLINE LEFT - jsr MENU.Show.Borders.H - ldy #S.OBJ.X1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.X1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y2 - jsr MENU.Show.Borders.Y - - lda #S.CB.CMD.VLINE RIGHT - jsr MENU.Show.Borders.H - ldy #S.OBJ.X2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.X2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y2 - jsr MENU.Show.Borders.Y - - lda #S.CB.CMD.HLINE BOTTOM - jsr MENU.Show.Borders.H - ldy #S.OBJ.X1 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.X2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y2 - jmp MENU.Show.Borders.Y - -MENU.Show.Borders.H - jsr PutA2CBBuf - lda #S.CB.OP.SET - jsr PutA2CBBuf - lda #S.CB.M.MONO - jsr PutA2CBBuf + sta CB.Cache+S.CB.M lda PREFS.BORDERCOLOR - jmp PutA2CBBuf + sta CB.Cache+S.CB.COLOR -MENU.Show.Borders.Y + ldy #S.OBJ.X2+1 + ldx #5 + +.1 lda (ZPMENUPtr),y + sta CB.Cache+S.CB.X1,x + dey + dex + bpl .1 + + lda CB.Cache+S.CB.Y1 + sta CB.Cache+S.CB.Y2 + lda CB.Cache+S.CB.Y1+1 + sta CB.Cache+S.CB.Y2+1 top X1,Y1,X2,Y1 + + jsr PutCBCache2CBBuf + + ldy #S.OBJ.Y2 lda (ZPMENUPtr),y - jsr PutA2CBBuf + sta CB.Cache+S.CB.Y1 + sta CB.Cache+S.CB.Y2 iny lda (ZPMENUPtr),y - jmp PutA2CBBuf + sta CB.Cache+S.CB.Y1+1 + sta CB.Cache+S.CB.Y2+1 bottom X1,Y2,X2,Y2 + + jmp PutCBCache2CBBuf *-------------------------------------- -MENU.Show.Item ldy #S.MITEM.F +MENU.ShowMItem ldy #S.MITEM.F lda (ZPPtr1),y cmp #S.MITEM.F.SEP - bne .1 + bne MENU.ShowMItem1 lda #S.CB.CMD.HLINE - jsr PutA2CBBuf + jsr CB.InitCacheA + lda #S.CB.OP.SET - jsr PutA2CBBuf + sta CB.Cache+S.CB.OP lda #S.CB.M.MONO - jsr PutA2CBBuf + sta CB.Cache+S.CB.M lda PREFS.BORDERCOLOR - jsr PutA2CBBuf + sta CB.Cache+S.CB.COLOR - ldy #S.OBJ.X1 - jsr MENU.Show.Borders.Y - lda SYSFON.H - lsr + ldx #3 + +.1 lda DX,x + sta CB.Cache+S.CB.X1,x + dex + bpl .1 + + lda DX clc - adc DY - jsr PutA2CBBuf - lda DY+1 - adc #0 - jsr PutA2CBBuf - - ldy #S.OBJ.X2 - jsr MENU.Show.Borders.Y - ldy #S.OBJ.Y1 - jmp MENU.Show.Borders.Y + adc Counter + sta CB.Cache+S.CB.X2 + lda DX+1 + adc Counter+1 + sta CB.Cache+S.CB.X2+1 + jmp PutCBCache2CBBuf *-------------------------------------- -.1 ldy #S.OBJ.X1 +MENU.ShowMItem1 lda #S.CB.CMD.FILLRECT + jsr CB.InitCacheA + + lda #S.CB.OP.SET + sta CB.Cache+S.CB.OP + lda #S.CB.M.MONO + sta CB.Cache+S.CB.M + + ldy #S.MENU.Selected lda (ZPMENUPtr),y - sec +1px Border + ldx PREFS.MENUCOLOR + ldy #S.MITEM.ID + eor (ZPPtr1),y + bne .15 + + txa + eor #C.WHITE + tax + +.15 stx CB.Cache+S.CB.COLOR + + ldx #3 + +.10 lda DX,x + sta CB.Cache+S.CB.X1,x + dex + bpl .10 + + lda DX + clc + adc Counter + sta CB.Cache+S.CB.X2 + lda DX+1 + adc Counter+1 + sta CB.Cache+S.CB.X2+1 + + lda DY + sec + adc SYSFON.H + sta CB.Cache+S.CB.Y2 + lda DY+1 + adc #0 + sta CB.Cache+S.CB.Y2+1 + jsr PutCBCache2CBBuf + + inc DY + bne .12 + inc DY+1 + +.12 lda DX + + clc adc #MENU.LMargin TODO : Checked sta DX - iny - lda (ZPMENUPtr),y - adc #0 + bcc .11 sta DX+1 - jsr MENU.GetIcon +.11 jsr MENU.GetIcon beq .2 jsr DRAW.YABMAtDXDY .2 lda DX clc - adc IY Icon reserved W + ldy #S.MENU.tOffset + adc (ZPPtr1),y sta DX - lda DX+1 - adc #0 - sta DX+1 + bcc .21 - jsr MENU.GetText + inc DX+1 + +.21 jsr MENU.GetText ldx hSYSFON jsr DRAW.YATextAtDXDY lda DX sec - adc IE + ldy #S.MENU.tOffset + adc (ZPPtr1),y sta DX lda DX+1 - adc IE+1 + iny + adc (ZPPtr1),y sta DX+1 jsr MENU.GetKeyString @@ -531,17 +616,24 @@ MENU.Show.Item ldy #S.MITEM.F lda DX sec - adc INE + ldy #S.MENU.rOffset + adc (ZPPtr1),y sta DX lda DX+1 - adc IE+1 - sta DX+1 + iny + adc (ZPPtr1),y + sta DX+1 ldx #BM.ID.RIGHT >LDYA L.BMs,x jsr DRAW.YABMAtDXDY -.8 clc +.8 lda DY + bne .80 + dec DY+1 + +.80 dec DY + clc rts *-------------------------------------- MENU.GetIcon ldy #S.MITEM.pICON+1 @@ -586,10 +678,8 @@ MENU.GetKeyString .8 rts *-------------------------------------- -MENU.Save jsr CB.ClearCache - - lda #S.CB.CMD.GETRECTBUFSIZE - sta CB.Cache+S.CB.CMD +MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE + jsr CB.InitCacheA ldy #S.OBJ.X1 ldx #0 @@ -641,7 +731,12 @@ MENU.Destroy ldx MENU.Stack.Top >SYSCALL GetMemPtr >STYA ZPMENUPtr - jsr CB.ClearCache + bit CUR.bVisible + bpl .3 + + jsr HideCursor.I + +.3 jsr CB.ClearCache lda #S.CB.CMD.BITBLT sta CB.Cache+S.CB.CMD @@ -682,10 +777,100 @@ MENU.Destroy ldx MENU.Stack.Top lda MENU.Stack-1,x >SYSCALL2 FreeMem dec MENU.Stack.Top + + bit CUR.bVisible + bpl .8 + + jsr ShowCursor.I .8 clc rts *-------------------------------------- +MENU.GetDX ldy #S.OBJ.X1 + lda (ZPMENUPtr),y + clc + adc #1 + sta DX + iny + lda (ZPMENUPtr),y + adc #0 + sta DX+1 + rts +*-------------------------------------- +MENU.GetDYW ldy #S.OBJ.Y1 + lda (ZPMENUPtr),y + clc + adc #1 + sta DY + iny + lda (ZPMENUPtr),y + adc #0 + sta DY+1 + + ldy #S.OBJ.W + lda (ZPMENUPtr),y + sec + sbc #3 2Px border + correction from W + sta Counter + iny + lda (ZPMENUPtr),y + sbc #0 + sta Counter+1 + + rts +*-------------------------------------- +MENU.FindMItemByID + jsr MENU.GetMItems + +.1 lda (ZPPtr1) + beq .9 + + txa + ldy #S.MITEM.ID + cmp (ZPPtr1),y + beq .8 + + jsr MENU.NextMItem + bra .1 + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +MENU.GetMItems ldy #S.MENU.MITEMS + lda (ZPMENUPtr),y + sta ZPPtr1 + iny + lda (ZPMENUPtr),y + sta ZPPtr1+1 + rts +*-------------------------------------- +MENU.NextMItem ldy #S.MITEM.F + lda (ZPPtr1),y + sec + eor #S.MITEM.F.SEP + beq .1 + + lda SYSFON.Hp2 + clc + +.1 adc DY + sta DY + bcc .2 + + inc DY+1 + +.2 lda (ZPPtr1) + clc + adc ZPPtr1 + sta ZPPtr1 + bcc .8 + inc ZPPtr1+1 + +.8 rts +*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.menu LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.MOU.txt b/LIB/LIBGUI.S.MOU.txt index 4faa631d..c338af6a 100644 --- a/LIB/LIBGUI.S.MOU.txt +++ b/LIB/LIBGUI.S.MOU.txt @@ -1,8 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -MOU.Init -.1 >PUSHBI 0 +MOU.Init >PUSHBI 0 >LDYA L.DEVNAME.MOUSE >SYSCALL2 open bcc .2 @@ -10,8 +9,9 @@ MOU.Init inc DEVNAME.MOUSE+8 lda DEVNAME.MOUSE+8 cmp #'8' - bne .1 + bne MOU.Init +* sec rts .2 sta hDevMouse @@ -66,7 +66,7 @@ MOU.ReadMouse >PULLW ZPPtr1 bne .9 no, exit.... lda hDevMouse - beq .9 + beq .99 CS >PUSHA >PUSHBI IOCTL.READ @@ -86,42 +86,30 @@ MOU.ReadMouse >PULLW ZPPtr1 bit #S.MOUSE.S.MOVE beq .8 -.2 ldx MENU.Stack.Top - beq .3 - - lda MENU.Stack-1,x jsr MOU.CheckOverMenu bcc .8 - - jsr MENU.Destroy - - bra .2 - -.9 sec -.99 rts -.3 jsr MOU.CheckOverWND + jsr MOU.CheckOverSysBut bcc .8 -.4 lda WND.SysBar+S.OBJ.Y1 + jsr MOU.CheckOverWND + bcc .8 + rts - ldy #S.MOUSE.Y1 - cmp (ZPPtr1),y - lda WND.SysBar+S.OBJ.Y1+1 - iny - sbc (ZPPtr1),y - bcs .7 - - jmp SYSBAR.Enter - -.7 jmp SYSBAR.Leave - .8 clc rts + +.9 sec +.99 rts *-------------------------------------- MOU.CheckOverMenu +.1 ldx MENU.Stack.Top + beq .9 + + lda MENU.Stack-1,x + >SYSCALL GetMemPtr - >STYA ZPPtr1 + >STYA ZPMENUPtr pha tya clc @@ -130,17 +118,34 @@ MOU.CheckOverMenu pla adc /S.OBJ.X1 jsr MOU.InRectYA - bcc .8 + bcs .2 - lda ZPPtr1 + jmp MENU.Enter + +.2 lda ZPMENUPtr clc adc #S.MENU.pX1 tay - lda ZPPtr1+1 + lda ZPMENUPtr+1 adc /S.MENU.pX1 - jsr MOU.InRectYA -.8 rts + jsr MOU.InRectYA + bcc .8 + + jsr MENU.Destroy + + bra .1 + +.9 sec +.8 rts +*-------------------------------------- +MOU.CheckOverSysBut + >LDYA L.RECT.SysBut + jsr MOU.InRectYA + bcs .9 + jmp SYSBUT.Enter + +.9 jmp SYSBUT.Leave *-------------------------------------- MOU.CheckOverWND ldx WND.Stack.Top diff --git a/LIB/LIBGUI.S.SYSBAR.txt b/LIB/LIBGUI.S.SYSBAR.txt index cda35b15..d15a627c 100644 --- a/LIB/LIBGUI.S.SYSBAR.txt +++ b/LIB/LIBGUI.S.SYSBAR.txt @@ -1,47 +1,56 @@ NEW AUTO 3,1 *-------------------------------------- -SYSBAR.Enter ldy #S.MOUSE.X1 +SYSBUT.Enter ldy #S.MOUSE.X1 lda (ZPPtr1),y - cmp WND.SysBar.A2osX.X2 + cmp RECT.SysBut+S.RECT.X2 iny lda (ZPPtr1),y - sbc WND.SysBar.A2osX.X2+1 + sbc RECT.SysBut+S.RECT.X2+1 bcs .8 sec - ror WND.SYSBAR.bA2osX + ror WND.SYSBAR.bSysBut jsr GetCBBuf bcs .9 - jsr SYSBAR.Show.A2osX + jsr SYSBAR.ShowSysBut >LDYA L.WND.SysBar jsr DrawCBPtrToYA1 >PUSHW WND.SysBar+S.OBJ.X1 >PUSHW WND.SysBar+S.OBJ.Y1 - >PUSHW L.RECT.SysBut + >PUSHW L.RECT.SysBut Parent RECT >PUSHW L.MENU.Sys jsr MENU.New bcs .9 + sta hSysMenu + + >PUSHA hSysMenu + >PUSHBI 6 + >PUSHBI S.MITEM.pMENU + >PUSHW L.MENU.Sys.Settings + jsr MENU.SetMItemProp + + lda hSysMenu jsr MENU.Show .8 clc .9 rts *-------------------------------------- -SYSBAR.Leave bit WND.SYSBAR.bA2osX +SYSBUT.Leave bit WND.SYSBAR.bSysBut bpl .8 - stz WND.SYSBAR.bA2osX + stz WND.SYSBAR.bSysBut jsr GetCBBuf bcs .9 - jsr SYSBAR.Show.A2osX + jsr SYSBAR.ShowSysBut >LDYA L.WND.SysBar @@ -53,9 +62,11 @@ SYSBAR.Leave bit WND.SYSBAR.bA2osX SYSBAR.Show jsr GetCBBuf bcs .9 - jsr SYSBAR.Show.A2osX + jsr SYSBAR.ShowSysBut - jsr SYSBAR.Show.W + jsr SYSBAR.ShowSysWNDs + + jsr SYSBAR.ShowSysClk >LDYA L.WND.SysBar @@ -63,232 +74,115 @@ SYSBAR.Show jsr GetCBBuf .9 rts *-------------------------------------- -SYSBAR.Show.A2osX +SYSBAR.ShowSysBut lda #S.CB.CMD.FILLRECT - jsr PutA2CBBuf + jsr CB.InitCacheA lda #S.CB.OP.SET - jsr PutA2CBBuf + sta CB.Cache+S.CB.OP lda #S.CB.M.MONO - jsr PutA2CBBuf + sta CB.Cache+S.CB.M lda PREFS.SYSBARCOLOR - bit WND.SysBar.bA2osX + bit WND.SysBar.bSysBut bpl .1 eor #$ff -.1 jsr PutA2CBBuf +.1 sta CB.Cache+S.CB.COLOR - lda #0 X1 - jsr PutA2CBBuf - jsr PutA2CBBuf - - lda WND.SysBar+S.OBJ.Y1 - jsr PutA2CBBuf - lda WND.SysBar+S.OBJ.Y1+1 - jsr PutA2CBBuf - - lda WND.SysBar.A2osX.X2 - jsr PutA2CBBuf - lda WND.SysBar.A2osX.X2+1 - jsr PutA2CBBuf - - lda WND.SysBar+S.OBJ.Y2 - jsr PutA2CBBuf - lda WND.SysBar+S.OBJ.Y2+1 - jsr PutA2CBBuf + ldx #S.RECT-1 - lda WND.SysBar+S.OBJ.X1 +.2 lda RECT.SysBut,x + sta CB.Cache+S.CB.X1,x + dex + bpl .2 + + jsr PutCBCache2CBBuf + + lda RECT.SysBut+S.RECT.X1 clc adc #4 sta DX - lda WND.SysBar+S.OBJ.X1+1 + lda RECT.SysBut+S.RECT.X1+1 adc #0 sta DX+1 - lda WND.SysBar+S.OBJ.Y1 + lda RECT.SysBut+S.RECT.Y1 clc adc #1 sta DY - lda WND.SysBar+S.OBJ.Y1+1 + lda RECT.SysBut+S.RECT.Y1+1 adc #0 sta DY+1 >LDYA L.BM.Apple jsr DRAW.YABMAtDXDY - lda WND.SysBar+S.OBJ.X1 + lda RECT.SysBut+S.RECT.X1 clc adc #21 sta DX - lda WND.SysBar+S.OBJ.X1+1 + lda RECT.SysBut+S.RECT.X1+1 adc #0 sta DX+1 inc DY - bne .2 + bne .3 inc DY+1 -.2 lda WND.SysBar.bA2osX +.3 lda WND.SysBar.bSysBut asl >LDYA L.WND.SysBar.2osX ldx hSYSFON - jsr DRAW.YATextAtDXDY - - rts + jmp DRAW.YATextAtDXDY *-------------------------------------- -SYSBAR.Show.W lda #S.CB.CMD.FILLRECT - jsr PutA2CBBuf +SYSBAR.ShowSysWNDs + lda #S.CB.CMD.FILLRECT + jsr CB.InitCacheA lda #S.CB.OP.SET - jsr PutA2CBBuf + sta CB.Cache+S.CB.OP lda #S.CB.M.MONO - jsr PutA2CBBuf + sta CB.Cache+S.CB.M lda PREFS.SYSBARCOLOR - jsr PutA2CBBuf + sta CB.Cache+S.CB.COLOR - lda WND.SysBar.W.X1 - jsr PutA2CBBuf - lda WND.SysBar.W.X1+1 - jsr PutA2CBBuf + ldx #S.RECT-1 - lda WND.SysBar+S.OBJ.Y1 - jsr PutA2CBBuf - lda WND.SysBar+S.OBJ.Y1+1 - jsr PutA2CBBuf - - lda WND.SysBar.W.X2 - jsr PutA2CBBuf - lda WND.SysBar.W.X2+1 - jsr PutA2CBBuf - - lda WND.SysBar+S.OBJ.Y2 - jsr PutA2CBBuf - lda WND.SysBar+S.OBJ.Y2+1 - jmp PutA2CBBuf -*-------------------------------------- -DRAW.YABMAtDXDY >STYA ZPBMPtr Src BM - - lda #S.CB.CMD.BITBLT - jsr PutA2CBBuf - lda #S.CB.OP.MASK+S.CB.OP.ORA+S.CB.OP.COLOR - jsr PutA2CBBuf - lda #S.CB.M.C16 - jsr PutA2CBBuf - - lda #0 - jsr PutA2CBBuf - - ldx #4 - - ldy #0 - -.1 lda DX,y S.CB.X1,S.CB.Y1 - jsr PutA2CBBuf - iny +.1 lda RECT.SysWNDs,x + sta CB.Cache+S.CB.X1,x dex - bne .1 - - lda #0 S.CB.X2 - jsr PutA2CBBuf - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.Y2 - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.SrcX - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.SrcY - jsr PutA2CBBuf - - ldx #4 - - ldy #S.BM.W - -.2 lda (ZPBMPtr),y S.CB.SrcW,S.CB.SrcH - jsr PutA2CBBuf - iny - dex - bne .2 - - lda ZPBMPtr S.CB.SrcPtr - jsr PutA2CBBuf - - lda ZPBMPtr+1 - jsr PutA2CBBuf - - lda #0 S.CB.DstPtr - jsr PutA2CBBuf - jsr PutA2CBBuf - - rts -*-------------------------------------- -DRAW.YATextAtDXDY - pha Src Text - phy - - lda #S.CB.CMD.DRAWTEXT2 - jsr PutA2CBBuf + bpl .1 + + jmp PutCBCache2CBBuf +*-------------------------------------- +SYSBAR.ShowSysClk + lda #S.CB.CMD.FILLRECT + jsr CB.InitCacheA + + lda #S.CB.OP.SET + sta CB.Cache+S.CB.OP - lda #0 - ror - eor #$80 - ora #S.CB.OP.SET - -* lda #S.CB.OP.XOR - jsr PutA2CBBuf - lda #S.CB.M.MONO - jsr PutA2CBBuf - - txa - jsr PutA2CBBuf S.CB.hFont - - ldy #0 - ldx #4 - -.1 lda DX,y DX,DY -> S.CB.X1,S.CB.Y1 - jsr PutA2CBBuf - iny + sta CB.Cache+S.CB.M + + lda PREFS.SYSBARCOLOR + sta CB.Cache+S.CB.COLOR + + ldx #S.RECT-1 + +.1 lda RECT.SysClk,x + sta CB.Cache+S.CB.X1,x dex - bne .1 - - lda #0 - jsr PutA2CBBuf S.CB.X2 - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.Y2 - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.SrcX - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.SrcY - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.SrcW - jsr PutA2CBBuf + bpl .1 - jsr PutA2CBBuf S.CB.SrcH - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.SrcPtr - jsr PutA2CBBuf - - jsr PutA2CBBuf S.CB.DstPtr - jsr PutA2CBBuf - - pla - jsr PutA2CBBuf S.CB.TxtPtr - pla - jmp PutA2CBBuf + jmp PutCBCache2CBBuf *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.sysbar diff --git a/LIB/LIBGUI.S.WND.txt b/LIB/LIBGUI.S.WND.txt index dbfbaec1..c9f502c3 100644 --- a/LIB/LIBGUI.S.WND.txt +++ b/LIB/LIBGUI.S.WND.txt @@ -20,7 +20,9 @@ WND.Init >PUSHBI 0 .9 rts *-------------------------------------- -WND.Setup stz WND.Stack.Top +WND.Setup +* stz WND.Stack.Top +* stz MENU.Stack.Top >LDYA DCB.GFX+S.DCB.GFX.W >STYA WND.Screen+S.OBJ.W @@ -36,7 +38,17 @@ WND.Setup stz WND.Stack.Top sec sbc WND.SysBar+S.OBJ.H sta WND.Desktop+S.OBJ.H + sta WND.SysBar+S.OBJ.Y1 + sta RECT.SysBut+S.RECT.Y1 + sta RECT.SysWNDs+S.RECT.Y1 + sta RECT.SysClk+S.RECT.Y1 + + lda DCB.GFX+S.DCB.GFX.H + dec + sta RECT.SysBut+S.RECT.Y2 + sta RECT.SysWNDs+S.RECT.Y2 + sta RECT.SysClk+S.RECT.Y2 >LDYA L.WND.Screen >STYA WND.Desktop+S.OBJ.hPARENT @@ -56,15 +68,36 @@ WND.Setup stz WND.Stack.Top lda CB.Cache+S.CB.SrcW clc adc #24 4 + BM width + 4 - sta WND.SysBar.W.X1 + sta RECT.SysBut+S.RECT.X2 + sta RECT.SysWNDs+S.RECT.X1 - >LDYA L.WND.Screen+S.OBJ.X2 - >STYA WND.SysBar.W.X2 - - lda #CUR.T.ARROW - sta WND.Desktop+S.WND.hCUR - sta WND.SysBar+S.WND.hCUR + >LDYA L.WND.SysBar.Clk + ldx hSYSFON + jsr FON.GetTextSize + lda CB.Cache+S.CB.SrcW + sec for sbc below + adc #8 4 + 00:00 + 4 + sta RECT.SysWNDs+S.RECT.X2 + + lda DCB.GFX+S.DCB.GFX.W + sec + sbc RECT.SysWNDs+S.RECT.X2 + sta RECT.SysWNDs+S.RECT.X2 + sta RECT.SysClk+S.RECT.X1 + lda DCB.GFX+S.DCB.GFX.W+1 + sbc #0 + sta RECT.SysWNDs+S.RECT.X2+1 + sta RECT.SysClk+S.RECT.X1+1 + + lda DCB.GFX+S.DCB.GFX.W + sec + sbc #0 + sta RECT.SysClk+S.RECT.X2 + lda DCB.GFX+S.DCB.GFX.W + sbc #0 + sta RECT.SysClk+S.RECT.X2+1 + jsr SYSBAR.Show rts diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index 9c23abb6..9ddd9ce6 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -86,17 +86,18 @@ ZPBMPtr .BS 2 ZPRECTPtr .BS 2 ZPPtr1 .BS 2 -CLIP.Line.P1 .BS 1 -CLIP.Line.P2 .BS 1 DX .BS 2 DY .BS 2 -IY .BS 1 - IE .BS 2 -D .BS 2 INE .BS 2 + +D .BS 2 Counter .BS 2 +CLIP.Line.P1 .BS 1 +CLIP.Line.P2 .BS 1 +IY .BS 1 + hCBBuf .BS 1 ZPCBBufPtr .BS 2 @@ -149,10 +150,12 @@ L.WND.Screen .DA WND.Screen L.WND.Desktop .DA WND.Desktop L.WND.SysBar .DA WND.SysBar L.WND.SysBar.2osX .DA WND.SysBar.2osX +L.WND.SysBar.Clk .DA WND.SysBar.Clk L.RECT.SysBut .DA RECT.SysBut L.RECT.SysWNDs .DA RECT.SysWNDs L.RECT.SysClk .DA RECT.SysClk L.MENU.Sys .DA MENU.Sys +L.MENU.Sys.Settings .DA MENU.Sys.Settings *-------------------------------------- L.BMs .EQ *-2 L.BM.Apple .DA BM.Apple @@ -227,11 +230,13 @@ LIB.UNLOAD dec LibCount .8 clc rts *-------------------------------------- +CB.InitCacheA sta CB.Cache +*-------------------------------------- CB.ClearCache ldx #S.CB-1 .1 stz CB.Cache,x dex - bpl .1 + bne .1 rts *-------------------------------------- @@ -428,12 +433,9 @@ WND.Desktop .DA #S.OBJ.T.WND *-------------------------------------- WND.SysBar .DA #S.OBJ.T.WND .BS S.WND-1 -WND.SysBar.A2osX.X2 .EQ * -WND.SysBar.W.X1 .BS 2 -WND.SysBar.W.X2 .EQ * -WND.SysBar.Time.X1 .BS 2 -WND.SysBar.bA2osX .BS 1 WND.SysBar.2osX .AZ "2osX" +WND.SysBar.Clk .AZ "00:00" +WND.SysBar.bSysBut .BS 1 *-------------------------------------- RECT.SysBut .BS S.RECT *-------------------------------------- @@ -441,6 +443,7 @@ RECT.SysWNDs .BS S.RECT *-------------------------------------- RECT.SysClk .BS S.RECT *-------------------------------------- +hSysMenu .BS 1 MENU.Sys .1 .DA #.2-* next .DA #S.MITEM.F.ITEM F @@ -460,7 +463,7 @@ MENU.Sys .3 .DA #.4-* next .DA #S.MITEM.F.SUBMENU F .DA #0 S - .DA #0 ID + .DA #4 ID .DA 0 pICON .DA 0 pMENU .DA #0 @@ -469,7 +472,7 @@ MENU.Sys .4 .DA #.5-* next .DA #S.MITEM.F.SUBMENU F .DA #0 S - .DA #0 ID + .DA #6 ID .DA 0 pICON .DA 0 pMENU .DA #0 KEYSTR @@ -500,15 +503,40 @@ MENU.Sys .77 .AZ "Ctrl-R" .8 .DA #0 *-------------------------------------- +MENU.Sys.Settings +.1 .DA #.2-* next + .DA #S.MITEM.F.ITEM F + .DA #0 S + .DA #62 ID + .DA 0 pICON + .DA #0 + .DA #0 + .DA #0 KEYSTR + .AZ "Colors..." + +.2 .DA #.3-* next + .DA #S.MITEM.F.ITEM F + .DA #0 S + .DA #64 ID + .DA 0 pICON + .DA #0 + .DA #0 + .DA #0 KEYSTR + .AZ "SubItem2..." + +.3 .DA #0 +*-------------------------------------- PREFS.BESTVIEWEDX .DA #$FC +PREFS.bSYSBARTOP .DA #0 +PREFS.MBARXMARGIN .DA #5 PREFS.MENUCOLOR .DA #C.WHITE PREFS.SYSBARCOLOR .DA #C.WHITE -PREFS.MBARXMARGIN .DA #5 PREFS.BORDERCOLOR .DA #C.BLACK -PREFS.TBARCOLORA .DA #C16.D.BLUE -PREFS.TBARCOLORI .DA #C16.L.BLUE +PREFS.TBARCOLORA .DA #C16.L.BLUE +PREFS.TBARCOLORI .DA #C16.AQUA PREFS.MBARCOLOR .DA #C.WHITE PREFS.SBARCOLOR .DA #C.WHITE +PREFS.DESKTOPCOLOR .DA #C16.D.BLUE *-------------------------------------- MAN SAVE usr/src/lib/libgui.s