diff --git a/.Docs/ASM.md b/.Docs/ASM.md index dbaebcbc..3f8593a4 100644 --- a/.Docs/ASM.md +++ b/.Docs/ASM.md @@ -44,6 +44,7 @@ Table-driven, add your favorite CPU creating a new CPU asm.xxxx file. | .EQ | EQuate | S-C, A2osX | Working | | | | .FIN | conditional end| S-C, A2osX | Working | | | | .HS | Hex String storage | S-C, A2osX | Working | `HS FE1A78` delimiter allowed : `HS 00.11,22` | | +| .HX | Hex Nibble storage | S-C, A2osX | Working | `HX EFA187` delimiter allowed : `HS 00.11,22` | | | .IN,.INB,.INBx | INline source | S-C, A2osX | Working | `.INB MYFILE` | `.IN` inlines full text, `.INB` inlines 1 block at a time during assembly | | .LI,.LIST | | S-C, A2osX | Working | `.LIST ON/OFF CON/COFF MON/MOFF XON/XOFF` | | | .MA | MAcro deffinition | S-C, A2osX | Working | `.MA >MYMACRO` | | diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index a97f5498..0435f02e 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index e69de29b..24f6e0f2 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3381b172..06e57f95 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 e7e36844..ba0feee9 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po index d195693b..c39f3ce7 100644 Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ diff --git a/.Floppies/ProDOSFX.BOOTHD.woz b/.Floppies/ProDOSFX.BOOTHD.woz index f9b474e0..2f473a1f 100644 Binary files a/.Floppies/ProDOSFX.BOOTHD.woz and b/.Floppies/ProDOSFX.BOOTHD.woz differ diff --git a/.Tools/userDefineLang.xml b/.Tools/userDefineLang.xml index c19fc3b1..cd6bed44 100644 --- a/.Tools/userDefineLang.xml +++ b/.Tools/userDefineLang.xml @@ -24,7 +24,7 @@ - .BS .DA .AS .AT .AZ .EQ .MA .EM .OR .TF .LIST .HS .IN .INB .OP .TA .EM .PH .EP .DUMMY .ED .CS .CZ .PS + .BS .DA .AS .AT .AZ .EQ .MA .EM .OR .TF .LIST .HS .IN .INB .OP .TA .EM .PH .EP .DUMMY .ED .CS .CZ .PS .HX adc and asl bit brk clc cld cli clv cmp cpx cpy dec dex dey eor inc inx iny lda ldx ldy lsr nop ora rmb rol ror rti rts sbc sec sed sei smb sta stp stx sty stz tax tay trb tsb tsx txa txs tya wai $ % / # & ^ .1 .2 .3 .4 .5 .6 .7 .8 .9 diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index 064550dd..17cf2ab7 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -478,7 +478,13 @@ DIR.FI >LDA.G ASM.DO.StackPtr clc rts *--------------------------------------- -DIR.HS jsr SRC.GetNextCharNB +DIR.HS clc + .HS B0 BCS + +DIR.HX sec + ror DIR.Word + + jsr SRC.GetNextCharNB bcs .99 jsr SRC.IsDigit16 @@ -503,18 +509,24 @@ DIR.HS jsr SRC.GetNextCharNB jsr OUT.EmitByte bcc .5 rts +*--------------------------------------- +.3 bit DIR.Word + bmi .30 + + asl DIR.Byte + asl DIR.Byte + asl DIR.Byte + asl DIR.Byte + + bra .4 + +.30 asl + asl + asl + asl -.3 pha - lda DIR.Byte - asl - asl - asl - asl - sta DIR.Byte - pla - ora DIR.Byte - -.4 jsr OUT.EmitByte +.4 ora DIR.Byte + jsr OUT.EmitByte bcs .9 jsr SRC.GetNextChar diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index e67c4431..14fb2c8a 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -172,6 +172,7 @@ DIR.EL.ID .EQ *-J.DIRECTIVES DIR.FI.ID .EQ *-J.DIRECTIVES .DA DIR.FI .DA DIR.HS + .DA DIR.HX .DA DIR.IN .DA DIR.IN .DA DIR.IN @@ -488,6 +489,7 @@ T.DIRECTIVES .PS "AC" .PS "EQ" .PS "FIN" .PS "HS" + .PS "HX" .PS "IN" .PS "INB" .PS "INB1" diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt index 1095a86f..2606c282 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -12,15 +12,13 @@ CODE.Init stz ZPCCConst >LDYAI 20 char *ARGV[10] >STYA ZPCCData - lda #'_' - >STA.G CC.CPSPFX+1 - - lda #'A' - >STA.G CC.CPSID - - iny CC.CPSID+1 + >STZ.G CC.ScopeID + iny sta (pData),y + lda #'_' + >STA.G CC.Label + clc .99 rts *-------------------------------------- diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index 9f6c3741..d3eec60b 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -17,7 +17,9 @@ CORE.Init lda #SL._ >SYSCALL SListNew bcs .9 - >STA.G CC.hScopes + >STA.G CC.hSyms + + ldy #CC.ScopeIDs sty ScopeIdx >LDYAI 256 @@ -46,21 +48,11 @@ CORE.Init lda #SL._ CORE.Quit jsr FIO.FClose bne CORE.Quit - ldy ScopeIdx + >LDA.G CC.hSyms beq .1 -.10 lda (pData),y - >SYSCALL SListFree - ldy ScopeIdx - cpy #CC.hScopes - beq .1 - - dec ScopeIdx - dey - bra .10 - .1 >LDA.G CC.hTags beq .2 diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 76c5631a..55be9af4 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -105,15 +105,12 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual bcs .98 cmp #';' - beq .28 + beq .8 cmp #'{' bne .26 - - jsr CORE.GetNCharNB skip '{' - bcs .98 - - jmp SYM.StoreF + + jmp CORE.GetNCharNBNL Skip '{' *-------------------------------------- * Initializer *-------------------------------------- @@ -141,7 +138,7 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual cmp #';' bne .98 - clc +.8 clc rts .98 lda #E.CSYN diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index 7300505b..75d33827 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -1,19 +1,37 @@ NEW AUTO 3,1 *-------------------------------------- -F.Decl stz LocalPtr +F.Decl ldy #SYM.Q + lda (ZPSymBufPtr),y + ora #SYM.Q.FUNC + sta (ZPSymBufPtr),y + + and #$FC + sta ZPPtr2+1 - jsr CC.PushTQ push T/Q for RETURN + lda (ZPSymBufPtr) #SYM.T + sta ZPPtr2 T/Q for _RETURN_ + + stz LocalPtr + + jsr SYM.Store Store this f() with no prototype... bcs .99 - ldx #$80 CPStmt.fDef state - jsr STMT.CPStmt.NEW + jsr SCOPE.New bcs .99 - jsr SYM.NewScope + lda ZPPtr2+1 #SYM.Q + and #$F0 + bne .10 + + lda ZPPtr2 #SYM.T + cmp #SYM.T.VOID + beq .11 + +.10 jsr F.AddReturnVar bcs .99 - jsr CORE.GetNCharNBNL Skip ( +.11 jsr CORE.GetNCharNBNL Skip ( bcs .9 cmp #')' func() @@ -61,12 +79,10 @@ F.Decl stz LocalPtr cmp #';' bne .7 - jsr SYM.FreeScope discard local scope + jsr SYM.Update + bcs .99 - lda CStackPtr - clc - adc #CPS - sta CStackPtr discard this CPStmt + T/Q + jsr SCOPE.Close discard local scope stz LocalPtr reset for DEBUG Message @@ -75,8 +91,8 @@ F.Decl stz LocalPtr *-------------------------------------- .7 cmp #'{' bne .9 - - bit bInitCode +*-------------------------------------- +F.Def bit bInitCode bmi .8 dec bInitCode @@ -89,12 +105,17 @@ F.Decl stz LocalPtr .8 >LDYA ZPCCCode f() Code starts HERE jsr SYM.SetAddrYA + jsr SYM.Update + bcs .99 + lda LocalPtr jsr CODE.LDAI A = f() ARGS size bcs .99 >LDYA L.PCC.ENTER jmp CODE.EmitPCC Store f() Declaration / Start Definition + +.99 rts *-------------------------------------- F.DeclGetTQ lda (ZPLineBufPtr) cmp #'.' @@ -142,6 +163,23 @@ F.DeclGetTQ lda (ZPLineBufPtr) sec rts *-------------------------------------- +F.AddReturnVar ldx ZPLineBufPtr + phx + ldx ZPLineBufPtr+1 + phx + + >LDYA L.CC._RETURN_ + >STYA ZPLineBufPtr + + jsr F.NewArg + + plx + stx ZPLineBufPtr+1 + plx + stx ZPLineBufPtr + + rts +*-------------------------------------- F.NewArg >LDYA.G CC.SymID >STYA.G CC.SymIDSave @@ -151,10 +189,11 @@ F.NewArg >LDYA.G CC.SymID >LDYA ZPPtr2 ldx #SYM.SC.AUTO sec Reset Buffer +* >DEBUG jsr SYM.New bcs .9 - jsr SYM.StoreL Store f() Args in Local scope + jsr SYM.Store bcs .9 >LDA.G CC.hSymBuf @@ -170,10 +209,10 @@ F.Def.END >LDYA L.PCC.LEAVE jsr CODE.EmitPCC bcs .9 - jsr SYM.FreeScope + jsr SCOPE.Close stz LocalPtr back to global - + >DEBUG clv pop context clc .9 rts diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index fbdc94dd..6e6906e0 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -21,7 +21,7 @@ KW.IF jsr STMT.NewCPS00 jsr KW.TestZero Y,A=T/Q lda #'E' - jsr SYM.LookupA + jsr SYM.LookupLabelA bcs .99 lda #$4C emit JMP else @@ -51,14 +51,14 @@ KW.IF.END jsr CORE.GetCharNBNL bcc .2 .1 lda #'E' define ELSE Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 clv pop context rts *-------------------------------------- .2 lda #'X' - jsr SYM.LookupA + jsr SYM.LookupLabelA bcs .99 lda #$4C emit JMP exit @@ -66,7 +66,7 @@ KW.IF.END jsr CORE.GetCharNBNL bcs .99 lda #'E' define ELSE Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 lda #KW.ELSE.ID replace IF by ELSE keyword @@ -88,7 +88,7 @@ KW.ELSE lda #E.CSYN illegal rts *-------------------------------------- KW.ELSE.END lda #'X' define EXIT Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 clv pop context @@ -98,7 +98,7 @@ KW.WHILE jsr STMT.NewCPS00 bcs .99 lda #'C' define CONT Label - jsr SYM.NewA + jsr SYM.NewLabelA bcs .99 jsr CC.GetCharNB @@ -116,7 +116,7 @@ KW.WHILE jsr STMT.NewCPS00 jsr KW.TestZero lda #'B' - jsr SYM.LookupA + jsr SYM.LookupLabelA bcs .99 lda #$4C emit JMP break: @@ -140,7 +140,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP bcs .99 lda #'C' - jsr STMT.GetLabelA + jsr SYM.LookupLabelA bcs .99 lda #$4C @@ -148,7 +148,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP bcs .99 lda #'B' define BREAK Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 clv pop context @@ -159,7 +159,7 @@ KW.DO jsr STMT.NewCPS00 bcs .99 lda #'C' define CONT Label - jsr SYM.NewA + jsr SYM.NewLabelA bcs .99 jmp STMT.SetCPSType @@ -185,7 +185,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... jsr KW.TestnZero lda #'C' - jsr STMT.GetLabelA + jsr SYM.LookupLabelA bcs .99 lda #$4C emit JMP cont @@ -193,7 +193,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... bcs .99 lda #'B' define BREAK Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 jsr CC.GetCharNB @@ -265,7 +265,7 @@ KW.FOR jsr CC.GetCharNB bcs .9 *-------------------------------------- lda #'L' LOOP Label - jsr SYM.NewA + jsr SYM.NewLabelA bcs .99 jsr EXP.Eval00 get e2 @@ -275,14 +275,14 @@ KW.FOR jsr CC.GetCharNB bcs .99 lda #'B' - jsr SYM.LookupA + jsr SYM.LookupLabelA bcs .99 lda #$4C emit JMP break: jsr CODE.TOABSYX lda #'S' - jsr SYM.LookupA + jsr SYM.LookupLabelA bcs .99 lda #$20 emit JSR s: @@ -298,7 +298,7 @@ KW.FOR jsr CC.GetCharNB bcs .9 *-------------------------------------- lda #'C' CONT Label - jsr SYM.NewA + jsr SYM.NewLabelA bcs .99 jsr STMT.Get get s3 @@ -313,14 +313,14 @@ KW.FOR jsr CC.GetCharNB bne .9 lda #'L' - jsr SYM.LookupA + jsr SYM.LookupLabelA bcs .99 lda #$4C jsr CODE.TOABSYX emit JMP loop lda #'S' S Label - jsr SYM.NewA + jsr SYM.NewLabelA bcs .99 jmp STMT.SetCPSType @@ -335,7 +335,7 @@ KW.FOR.END lda #$60 bcs .99 lda #'B' define BREAK Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 clv pop context @@ -390,7 +390,7 @@ KW.SWITCH jsr CC.GetCharNB bne .98 lda #'J' - jsr STMT.LookupLabelA + jsr SYM.LookupLabelA bcs .99 lda #$4C emit JMP JmpTable @@ -409,7 +409,7 @@ KW.SWITCH jsr CC.GetCharNB KW.SWITCH.RTS rts *-------------------------------------- KW.SWITCH.END lda #'J' define JMP Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs KW.SWITCH.RTS lda CStackPtr @@ -470,7 +470,7 @@ KW.SWITCH.END lda #'J' define JMP Label bcs .99 lda #'D' - jsr STMT.LookupLabelA + jsr SYM.LookupLabelA bcs .3 lda #$4C emit JMP Default @@ -478,7 +478,7 @@ KW.SWITCH.END lda #'J' define JMP Label bcs .99 .3 lda #'B' define BREAK Label - jsr STMT.NewLabelA + jsr SYM.NewLabelA bcs .99 lda CStackPtr @@ -579,7 +579,7 @@ KW.DEFAULT ldy CStackPtr jsr CORE.GetNCharNB skip ':' lda #'D' define DEFAULT Label - jmp STMT.NewLabelA + jmp SYM.NewLabelA .9 lda #E.CSYN sec @@ -587,7 +587,7 @@ KW.DEFAULT ldy CStackPtr *-------------------------------------- KW.BREAK lda #'B' - jsr STMT.LookupLabelA + jsr SYM.LookupLabelA bcs .9 lda #$4C emit JMP break @@ -599,7 +599,7 @@ KW.BREAK lda #'B' *-------------------------------------- KW.CONTINUE lda #'C' - jsr STMT.LookupLabelA + jsr SYM.LookupLabelA bcs .9 lda #$4C emit JMP cont @@ -609,34 +609,29 @@ KW.CONTINUE lda #'C' sec rts *-------------------------------------- -KW.RETURN ldy CStackPtr - beq .9 +KW.RETURN ldx ZPLineBufPtr + phx + ldx ZPLineBufPtr+1 + phx -.1 lda (ZPCCStack),y CPS.KW - bmi .7 f() - - tya - clc - adc #CPS skip CPStmt (6 bytes) - tay - bcc .1 - -.9 lda #E.STACKERROR - sec -.99 rts - -.7 tya - clc - adc #CPS.T - tay - lda (ZPCCStack),y + >LDYA L.CC._RETURN_ + >STYA ZPLineBufPtr + + jsr SYM.Lookup + + plx + stx ZPLineBufPtr+1 + plx + stx ZPLineBufPtr + bcs .99 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y pha - - iny get CPS.Q - lda (ZPCCStack),y - - ply T + lda (ZPLookupSymPtr) SYM.T + tay + pla jsr EXP.Eval bcs .99 @@ -648,6 +643,8 @@ KW.RETURN ldy CStackPtr >LDYA L.PCC.LEAVE jmp CODE.EmitPCC + +.99 rts *-------------------------------------- KW.SIZEOF lda #E.CSYN diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt index 4e82c70a..34809017 100644 --- a/BIN/CC.S.LINK.txt +++ b/BIN/CC.S.LINK.txt @@ -8,8 +8,8 @@ CC.Link >LDYA L.MSG.LINKING lda #1 .1 >STYA ZPPtr1 SymID - - >PUSHB.G CC.hScopes +* >DEBUG + >PUSHB.G CC.hSyms >PUSHW ZPPtr1 SymID >PUSHW pData @@ -18,7 +18,7 @@ CC.Link >LDYA L.MSG.LINKING >STYA ZPPtr2 NextID - >PUSHB.G CC.hScopes + >PUSHB.G CC.hSyms >PUSHW ZPPtr1 SymID >PUSHW ZPSymBufPtr >PUSHWI $ffff All @@ -26,16 +26,21 @@ CC.Link >LDYA L.MSG.LINKING >SYSCALL SListGetData bcs .99 - ldy #SYM.SC + >LDA.G bTrace + bpl .2 + + jsr CC.Link.Dump + +.2 ldy #SYM.SC lda (ZPSymBufPtr),y cmp #SYM.SC.TYPEDEF - bcs .6 + bcs .7 ldy #SYM.Addr+1 lda (ZPSymBufPtr),y dey ora (ZPSymBufPtr),y - bne .6 + bne .7 jsr CC.Link.Lookup bcs .9 @@ -43,20 +48,18 @@ CC.Link >LDYA L.MSG.LINKING jsr CC.Link.Update bcs .99 -.6 >LDA.G bTrace - bpl .7 - - jsr CC.Link.Dump - bcs .99 - .7 >LDYA ZPPtr2 jmp .1 .8 clc rts -.9 jsr CC.Link.Dump - lda #E.FUNDEF +.9 >LDA.G bTrace + bmi .2 + + jsr CC.Link.Dump + +.90 lda #E.FUNDEF sec .99 rts *-------------------------------------- @@ -156,7 +159,7 @@ CC.Link.Update ldy #SYM.Addr txa sta (ZPSymBufPtr),y - >PUSHB.G CC.hScopes + >PUSHB.G CC.hSyms >PUSHW ZPPtr1 SymID >PUSHW ZPSymBufPtr >PUSHBI 0 @@ -212,7 +215,7 @@ CC.Link.Dump ldy #$ff rts *-------------------------------------- CC.Link.CheckMain - >PUSHB.G CC.hScopes + >PUSHB.G CC.hSyms >PUSHW L.CC.MAIN >PUSHWI 0 ScopeID >SYSCALL SListLookup @@ -220,7 +223,7 @@ CC.Link.CheckMain >STYA ZPPtr1 SymID - >PUSHB.G CC.hScopes + >PUSHB.G CC.hSyms >PUSHW ZPPtr1 SymID >PUSHW ZPSymBufPtr >PUSHWI 65535 all diff --git a/BIN/CC.S.SCOPE.txt b/BIN/CC.S.SCOPE.txt new file mode 100644 index 00000000..35e1c55d --- /dev/null +++ b/BIN/CC.S.SCOPE.txt @@ -0,0 +1,58 @@ +NEW + AUTO 3,1 +*-------------------------------------- +SCOPE.New ldy ScopeIdx + cpy #CC.ScopeIDs+SCOPE.MAX*2 + bcs .9 + + iny + iny + sty ScopeIdx + + >INCW.G CC.ScopeID + + >LDA.G CC.ScopeID + + ldy ScopeIdx + sta (pData),y + + >LDA.G CC.ScopeID+1 + + ldy ScopeIdx + iny + sta (pData),y + + dec bLocalScope + clc + rts + +.9 lda #E.OOH + sec +.99 rts +*-------------------------------------- +SCOPE.Close ldy ScopeIdx + cpy #CC.ScopeIDs + beq * + + dey + dey + sty ScopeIdx + + inc bLocalScope + + rts +*-------------------------------------- +SCOPE.Push ldy ScopeIdx + +SCOPE.PushY iny + lda (pData),y + >PUSHA + dey + lda (pData),y + >PUSHA + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.scope +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index 43eaf61f..d0dea203 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -139,15 +139,7 @@ STMT.Stmt.END ldy CStackPtr *-------------------------------------- * X = KW.ID *-------------------------------------- -STMT.CPStmt.NEW >LDA.G CC.CPSID+1 - jsr CC.Push - bcs .99 - - >LDA.G CC.CPSID - jsr CC.Push - bcs .99 - - lda LocalPtr Locals +STMT.CPStmt.NEW lda LocalPtr Locals jsr CC.Push bcs .99 @@ -216,24 +208,7 @@ STMT.NewCPS00 lda #0 jsr CC.Push bcs STMT.NewCPS.RTS -STMT.NewCPS jsr STMT.NewCPSID - bcs .99 - - lda #'*' - >SYSCALL putchar - >LEA.G CC.CPSPFX+2 - >SYSCALL puts -* >DEBUG - - >LDA.G CC.CPSPFX+3 - jsr CC.Push - bcs .99 - - >LDA.G CC.CPSPFX+2 - jsr CC.Push - bcs .99 - - lda LocalPtr Locals +STMT.NewCPS lda LocalPtr Locals jsr CC.Push bcs .99 @@ -276,121 +251,6 @@ STMT.SetCPSType jsr CORE.GetNCharNBNL sec .99 rts *-------------------------------------- -STMT.NewLabelA pha - - lda CStackPtr - jsr STMT.GetCPSIDA - -* lda #'+' -* >SYSCALL putchar -* pla -* pha -* >SYSCALL putchar -* >LEA.G CC.CPSPFX+1 -* >SYSCALL puts -* >DEBUG - - pla - jmp SYM.NewA -*-------------------------------------- -STMT.GetLabelA pha - - lda CStackPtr - jsr STMT.GetCPSIDA - -* lda #'?' -* >SYSCALL putchar -* pla -* pha -* >SYSCALL putchar -* >LEA.G CC.CPSPFX+1 -* >SYSCALL puts -* >DEBUG - - pla - jmp SYM.LookupA -*-------------------------------------- -STMT.LookupLabelA - pha - - ldy CStackPtr - sty ArgIndex - - lda ArgIndex - beq .9 - -.1 jsr STMT.GetCPSIDA - -* lda #'!' -* >SYSCALL putchar -* pla -* pha -* >SYSCALL putchar -* >LEA.G CC.CPSPFX+1 -* >SYSCALL puts -* >DEBUG - - pla - pha - jsr SYM.LookupA - bcc .8 - - lda ArgIndex - clc - adc #CPS - sta ArgIndex - bne .1 - -.9 lda #E.NOKEY - - plx -* sec - rts - -.8 pla -* clc - rts -*-------------------------------------- -STMT.GetCPSIDA clc - adc #CPS.CPSID - tay - - lda (ZPCCStack),y - pha - iny - lda (ZPCCStack),y - ply - >STYA.G CC.CPSPFX+2 - rts -*-------------------------------------- -STMT.NewCPSID >LDYA.G CC.CPSID - >STYA.G CC.CPSPFX+2 - - >LDA.G CC.CPSID+1 - inc - cmp #'Z'+1 - bne .1 - - dey CC.CPSID - lda (pData),y - inc - cmp #'Z'+1 - beq .9 - - sta (pData),y - - lda #'A' - iny CC.CPSID+1 - -.1 sta (pData),y - - clc - rts - -.9 lda #E.OOH -* sec - rts -*-------------------------------------- MAN SAVE usr/src/bin/cc.s.stmt LOAD usr/src/bin/cc.s diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index 9e37a1fa..41bb8975 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -12,12 +12,9 @@ SYM.New >STYA ZPPtr2 T/Q bit bPass2 bpl SYM.New.1 - bit bLocalScope - bmi SYM.New.1 - - >PUSHB.G CC.hScopes Global Scope + >PUSHB.G CC.hSyms >PUSHW ZPLineBufPtr - >PUSHWI 0 ScopeID + jsr SCOPE.Push >SYSCALL SListLookup bcs SYM.New.9 @@ -25,7 +22,7 @@ SYM.New >STYA ZPPtr2 T/Q jsr CC.SkipX X = KeyLen - >PUSHB.G CC.hScopes + >PUSHB.G CC.hSyms >PUSHW.G CC.SymID >PUSHW ZPSymBufPtr >PUSHWI 65535 all @@ -33,18 +30,22 @@ SYM.New >STYA ZPPtr2 T/Q >SYSCALL SListGetData bcc SYM.New.2 -SYM.New.9 rts Y,A = SymSize +SYM.New.9 rts *-------------------------------------- SYM.New.1 jsr SYM.BufInitYAXC set buf according C - ldy ScopeIdx - lda (pData),y - jsr SYM.NewKey + >PUSHB.G CC.hSyms + >PUSHW ZPLineBufPtr + jsr SCOPE.Push + >SYSCALL SListNewKey bcs SYM.New.9 >STYA.G CC.SymID Y,A = KeyID jsr CC.SkipX X = KeyLen + .DO DBG_SYM=1 + jsr SYM.DEBUG0 + .FIN *-------------------------------------- SYM.New.2 jsr CC.GetCharNB bcs .98 @@ -62,11 +63,6 @@ SYM.New.2 jsr CC.GetCharNB .1 cmp #'(' bne SYM.NewV - ldy #SYM.Q - lda #SYM.Q.FUNC - ora (ZPSymBufPtr),y - sta (ZPSymBufPtr),y - jmp F.Decl .98 lda #E.CSYN @@ -362,11 +358,7 @@ SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr >PUSHWI 0 ScopeID >SYSCALL SListNewKey - bcs .9 - - - -.9 rts Y,A = KeyID, X = KeyLen + rts Y,A = KeyID, X = KeyLen *-------------------------------------- SYM.Add0000 >LDYAI 0 *-------------------------------------- @@ -461,14 +453,14 @@ SYM.AddByte pha sec rts *-------------------------------------- -SYM.NewA bit bPass2 +SYM.NewLabelA bit bPass2 bmi .8 - >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... + >STA.G CC.Label+1 _A = "B"reak, "C"ontinue... - >PUSHB.G CC.hScopes Global Scope - >PUSHEA.G CC.CPSPFX - >PUSHWI 0 ScopeID + >PUSHB.G CC.hSyms + >PUSHEA.G CC.Label + jsr SCOPE.Push >SYSCALL SListNewKey bcs .99 @@ -498,104 +490,114 @@ SYM.NewA bit bPass2 >LDYA ZPCCCode jsr SYM.SetAddrYA - - >LDA.G CC.hScopes Global Scope - jmp SYM.Store.1 + .DO DBG_SYM=1 + jsr SYM.DEBUG0 + .FIN + jmp SYM.Store .8 clc .99 rts *-------------------------------------- -SYM.StoreF >LDA.G CC.hScopes - - bit bPass2 - bpl SYM.Store.1 - - clc - rts +SYM.Update sec + .HS 90 BCC *-------------------------------------- -SYM.Store bit bPass2 - bpl SYM.StoreL Store Global & Local at Pass 1 +SYM.Store clc + bit bPass2 + bmi .8 - bit bLocalScope Store Local at Pass 2 - bmi SYM.StoreL - clc - rts + php + .DO DBG_SYM=1 + bcc .10 -SYM.StoreL ldy ScopeIdx - lda (pData),y + jsr SYM.DEBUG1 -SYM.Store.1 >PUSHA + bra .11 + +.10 + jsr SYM.DEBUG2 + +.11 .FIN + >PUSHB.G CC.hSyms >PUSHW.G CC.SymID >PUSHW ZPSymBufPtr >PUSHBI 0 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.FUNC + bne .1 + ldy #SYM.DefSize lda (ZPSymBufPtr),y - >PUSHA + bra .2 + +.1 lda #SYM.F.MAX + +.2 >PUSHA + + plp + bcs .3 >SYSCALL SListAddData - - rts -*-------------------------------------- -SYM.NewScope ldy ScopeIdx - cpy #CC.hScopes+SCOPE.MAX - bcs .9 - - lda #SL._ - >SYSCALL SListNew - bcs .99 - - inc ScopeIdx - ldy ScopeIdx - sta (pData),y - - dec bLocalScope - clc rts -.9 lda #E.OOH - sec -.99 rts -*-------------------------------------- -SYM.FreeScope ldy ScopeIdx - cpy #CC.hScopes - beq * - - lda (pData),y - >SYSCALL SListFree - - dec ScopeIdx - inc bLocalScope +.3 >SYSCALL SListSetData + rts +.8 clc rts *-------------------------------------- SYM.Lookup >LDA.G CC.LookupIdx + cmp #CC.LookupIdx+LOOKUP.MAX beq .99 - >PUSHB ScopeIdx + >PUSHB.G CC.hSyms ...for SListGetData -.1 tay - lda (pData),y - jsr CC.SListLookup + lda ScopeIdx + +.1 pha + >PUSHB.G CC.hSyms + >PUSHW ZPLineBufPtr + ply + phy + jsr SCOPE.PushY + >SYSCALL SListLookup bcc .8 - lda (pstack) - cmp #CC.hScopes + pla + cmp #CC.ScopeIDs beq .9 dec - sta (pstack) + dec bra .1 -.9 inc pStack + +.99 lda #E.OOH +* sec + rts + +.9 inc pStack discard CC.hSyms lda #E.NOKEY sec rts -.8 inc pStack +.8 >PUSHA KeyID.HI + tya + >PUSHA KeyID.LO + + pla discard ScopeIdx + + jsr CC.SkipX + + >PUSHWZ allocate + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData >STYA.G CC.LookupSymSize @@ -610,12 +612,9 @@ SYM.Lookup >LDA.G CC.LookupIdx * clc rts - -.99 lda #E.OOH -* sec - rts *-------------------------------------- -SYM.LookupA bit bPass2 +SYM.LookupLabelA + bit bPass2 bmi .1 ldx #0 @@ -623,18 +622,39 @@ SYM.LookupA bit bPass2 clc rts -.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... +.1 >STA.G CC.Label+1 A = "B"reak, "C"ontinue... - >PUSHB.G CC.hScopes Global Scope - >PUSHEA.G CC.CPSPFX - >PUSHWI 0 ScopeID + >PUSHB.G CC.hSyms ...for SListGetData + + lda ScopeIdx + +.2 pha + >PUSHB.G CC.hSyms + >PUSHEA.G CC.Label + ply + phy + jsr SCOPE.PushY >SYSCALL SListLookup - bcs .99 + bcc .8 - >STYA.G CC.SymID Y,A = KeyID + pla + cmp #CC.ScopeIDs + beq .9 + + dec + dec + bra .2 + +.9 inc pStack discard CC.hSyms + + lda #E.NOKEY + sec + rts + +.8 >PUSHA KeyID.HI + tya + >PUSHA KeyID.LO - >PUSHB.G CC.hScopes - >PUSHW.G CC.SymID >PUSHW ZPSymBufPtr >PUSHWI 65535 all >PUSHWZ From Start @@ -850,6 +870,32 @@ SYM.SetAddrYA phy sta (ZPSymBufPtr),y rts +*-------------------------------------- + .DO DBG_SYM=1 +SYM.DEBUG0 >PUSHW L.MSG.DEBUG.SYM0 + >PUSHW.G CC.SymID + jsr SCOPE.Push + lda (ZPSymBufPtr) + >PUSHA + ldy #1 + lda (ZPSymBufPtr),y + >PUSHA + >PUSHBI 6 + >SYSCALL Printf + rts + +SYM.DEBUG1 >PUSHW L.MSG.DEBUG.SYM1 + >PUSHW.G CC.SymID + >PUSHBI 2 + >SYSCALL Printf + rts + +SYM.DEBUG2 >PUSHW L.MSG.DEBUG.SYM2 + >PUSHW.G CC.SymID + >PUSHBI 2 + >SYSCALL Printf + rts + .FIN *-------------------------------------- MAN SAVE usr/src/bin/cc.s.sym diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 8e5c2309..5719470f 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -10,6 +10,8 @@ NEW .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- +DBG_SYM .EQ 0 +*-------------------------------------- FILES.MAX .EQ 4 LIBS.MAX .EQ 4 SCOPE.MAX .EQ 16 @@ -46,15 +48,17 @@ SYM.SC.EXTERN .EQ 6 SYM.SC.TYPEDEF .EQ 8 SYM.SC.DEFINE .EQ 10 SYM.SC.TAG .EQ 12 -SYM.hSym .EQ 3 +* .EQ 3 SYM.SizeOf .EQ 4 SYM.Addr .EQ 6 SYM.BitO .EQ 8 SYM.BitW .EQ 9 SYM.DefSize .EQ 10 -SYM.Def .EQ 11 Funtions : fTQ,a1TQ,a2TQ.... +* +SYM.Def .EQ 12 Funtions : fTQ,a1TQ,a2TQ.... * SYM .EQ 14 +SYM.F.MAX .EQ 64 *-------------------------------------- SU.F.T .EQ 0 SU.F.Q .EQ 1 @@ -63,19 +67,20 @@ SU.F.BitO .EQ 4 SU.F.BitW .EQ 5 SU.F.Name .EQ 6 *-------------------------------------- -CPS.hMEM .EQ 7 switch/case -CPS.Ptr .EQ 6 +CPS.hMEM .EQ 5 switch/case +CPS.Ptr .EQ 4 -CPS.Q .EQ 7 f -CPS.T .EQ 6 +CPS.Q .EQ 5 f +CPS.T .EQ 4 -CPS.CPSID .EQ 4 CPS.LOCAL .EQ 3 CPS.STATE .EQ 2 CPS.TERM .EQ 1 CPS.KW .EQ 0 * -CPS .EQ 8 +CPS .EQ 6 +*-------------------------------------- + *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- @@ -141,6 +146,11 @@ L.MSG.LINKING .DA MSG.LINKING L.MSG.LINKING2 .DA MSG.LINKING2 L.MSG.GENERATING .DA MSG.GENERATING L.MSG.DEBUG .DA MSG.DEBUG + .DO DBG_SYM=1 +L.MSG.DEBUG.SYM0 .DA MSG.DEBUG.SYM0 +L.MSG.DEBUG.SYM1 .DA MSG.DEBUG.SYM1 +L.MSG.DEBUG.SYM2 .DA MSG.DEBUG.SYM2 + .FIN L.MSG.TRACE .DA MSG.TRACE L.MSG.RTSTK .DA MSG.RTSTK L.MSG.ERROR .DA MSG.ERROR @@ -233,6 +243,7 @@ J.CC.STYPES .DA TYPE.SCHAR .DA TYPE.SLONG *-------------------------------------- L.CC.MAIN .DA CC.MAIN +L.CC._RETURN_ .DA CC._RETURN_ L.CC.SYSCALL .DA CC.SYSCALL L.CC.FPUCALL .DA CC.FPUCALL *-------------------------------------- @@ -364,11 +375,11 @@ CS.RUN.CLOOP jsr CORE.CompileFile cmp #MLI.E.EOF bne .9 - +* bne .1 jsr FIO.FClose bne CS.RUN.CLOOP *-------------------------------------- - jsr PrintSummary +.1 jsr PrintSummary bcs .99 jsr CC.Link @@ -570,7 +581,8 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG lda ScopeIdx sec - sbc #CC.hScopes + sbc #CC.ScopeIDs + lsr >PUSHA >PUSHBI 15 @@ -637,16 +649,17 @@ PrintSummary >PUSHW L.MSG.SUMMARY *-------------------------------------- .INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.core - .INB usr/src/bin/cc.s.dir .INB usr/src/bin/cc.s.decl - .INB usr/src/bin/cc.s.stmt - .INB usr/src/bin/cc.s.kw - .INB usr/src/bin/cc.s.type - .INB usr/src/bin/cc.s.f + .INB usr/src/bin/cc.s.dir .INB usr/src/bin/cc.s.exp - .INB usr/src/bin/cc.s.sym - .INB usr/src/bin/cc.s.link + .INB usr/src/bin/cc.s.f .INB usr/src/bin/cc.s.fio + .INB usr/src/bin/cc.s.kw + .INB usr/src/bin/cc.s.link + .INB usr/src/bin/cc.s.scope + .INB usr/src/bin/cc.s.stmt + .INB usr/src/bin/cc.s.sym + .INB usr/src/bin/cc.s.type *-------------------------------------- CS.END *-------------------------------------- @@ -663,6 +676,11 @@ MSG.LINKING2 .CZ "*** %H:%H:%18s T/Q=%h/%h, SC=%h, Def=%h, SizeOf=%H, @=%H\r\n" MSG.GENERATING .CZ "*** Generating: %s\r\n" MSG.DEBUG .CS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n" .CZ " LSP=%h, CSP=%H:%h>%h:%h, ScopeIdx=%h\r\n" + .DO DBG_SYM=1 +MSG.DEBUG.SYM0 .CZ "New SymID=%H[%H],T=%h,Q=%h " +MSG.DEBUG.SYM1 .CZ "Upd SymID=%H\r\n" +MSG.DEBUG.SYM2 .CZ "Sto SymID=%H\r\n" + .FIN MSG.TRACE .CZ "%5D> %s\r\n" MSG.RTSTK .CZ "\r\n" MSG.ERROR .CZ " %s^\r\n" @@ -808,6 +826,7 @@ CC.TYPESIGN .HS 0000FF00FF00FFFF CC.MAIN .AZ "main" CC.MAIN.DEF .DA #SYM.T.SINT,#0,#SYM.T.SINT,#0,#SYM.T.UCHAR,#SYM.Q.PPOINTER,0 CC.MAIN.DEF.LEN .EQ *-CC.MAIN.DEF +CC._RETURN_ .AZ "_RETURN_;" *-------------------------------------- CC.SYSCALL .PS "chtyp" .DA #SYS.ChTyp @@ -1125,10 +1144,12 @@ CC.SaveDefine .BS 2 CC.hTags .BS 1 CC.hStack .BS 1 -CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals +CC.hSyms .BS 1 -CC.CPSID .BS 2 AA -CC.CPSPFX .BS 5 X_id\0 +CC.ScopeID .BS 2 +CC.ScopeIDs .BS 2+SCOPE.MAX*2 2 bytes Global+ MAX locals + +CC.Label .BS 3 _X\0 *-------------------------------------- CC.hSymBuf .BS 1 CC.SymID .BS 2 diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 01639b5a..4c62f8f4 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -32,19 +32,17 @@ BlkCnt .BS 2 TrkCnt .BS 1 Stepping .BS 1 VolNum .BS 1 -AltBB .BS 1 +bAltBB .BS 1 HeadCnt .BS 1 -TimeOut .BS 1 - CatSize .BS 1 CatBlkCnt .BS 1 bLL .BS 1 -bCustomBlkSize .BS 1 -bHighDensity .BS 1 -bExtraTrack .BS 1 -bDS .BS 1 bVerify .BS 1 +bCustomBlkSize .BS 1 + +TimeOut .BS 1 + ZS.END .ED *-------------------------------------- @@ -81,11 +79,19 @@ L.MSG.LLDISK2 .DA MSG.LLDISK2 L.MSG.VERIFY .DA MSG.VERIFY L.MSG.WRITECAT .DA MSG.WRITECAT L.FMT.BLANK .DA FMT.BLANK +J.Opts .DA CS.RUN.OptA + .DA CS.RUN.OptB + .DA CS.RUN.OptD + .DA CS.RUN.OptL + .DA CS.RUN.OptS + .DA CS.RUN.OptT + .DA CS.RUN.OptV .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBBLKDEV >SYSCALL LoadLib bcs .9 + sta hLIBBLKDEV .9 rts @@ -94,14 +100,17 @@ CS.RUN ldy #S.PS.ARGC lda (pPS),y beq .99 -.1 inc ArgIndex - lda ArgIndex - >SYSCALL ArgV - bcc .11 + ldx #6 - jmp .8 +.10 lda Disk2.Default,x + sta BlkCnt,x + dex + bpl .10 -.11 >STYA ZPPtr1 +.1 jsr CS.RUN.NextArg + bcs .8 + + >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .4 @@ -112,72 +121,53 @@ CS.RUN ldy #S.PS.ARGC cmp #'0' bcc .2 + cmp #'9'+1 bcs .2 + and #$0F sta CatSize -.10 bra .1 + bra .1 .2 jsr CS.RUN.CheckOpt bcs .99 - cpy #bCustomBlkSize - bne .1 - - inc ArgIndex - lda ArgIndex - >SYSCALL ArgV - bcs .99 - - >SYSCALL AToI - >STYA BlkCnt bra .1 -.99 >LDYA L.MSG.USAGE1 - >SYSCALL PutS - >LDYA L.MSG.USAGE2 - >SYSCALL Puts - lda #E.SYN - sec -.9 rts - .4 lda hDevID bne .5 Already have a dev...go get VolName - >LDYA ZPPtr1 - >SYSCALL GetDevByName - bcs .9 + jsr CS.RUN.GetDev + bcc .1 + + rts - stx hDevID - >STYA ZPPtrFD +.5 jsr CS.RUN.GetVolName + bcc .1 + + rts - >LDYA ZPPtr1 - >STYA ZPPtrDevName - bra .10 +.99 >LDYA L.MSG.USAGE1 + >SYSCALL PutS + >LDYA L.MSG.USAGE2 + >SYSCALL PutS -.5 ldy #$ff - -.6 iny - lda (ZPPtr1),y - sta (pData),y VolName - beq .10 - - cpy #16 - bcc .6 - bra .99 VolName too long + lda #E.SYN + sec +.9 rts .8 lda hDevID beq .99 *-------------------------------------- CS.RUN.Format jsr CS.RUN.GetDevDIB - bcs .99 + bcs .9 >PUSHW L.MSG.INIT >PUSHW ZPPtrDevName - >PUSHEA.G VolName + >PUSHW pData >PUSHEA.G VolName >PUSHBI 4 >SYSCALL PrintF - bcs .99 + bcs .9 jsr CS.RUN.GET.DSSS0000 @@ -194,8 +184,7 @@ CS.RUN.Format jsr CS.RUN.GetDevDIB bcs .9 jsr CS.RUN.WriteCat - -.99 bcs .9 + bcs .9 >LDYA L.MSG.OK >SYSCALL PutS @@ -221,10 +210,158 @@ CS.RUN.Format jsr CS.RUN.GetDevDIB sec rts *-------------------------------------- -CS.RUN.GetDevDIB - lda bCustomBlkSize - bmi .8 +CS.RUN.CheckOpt ldy #1 + lda (ZPPtr1),y + ldx #OptionList.Cnt-1 + +.2 cmp OptionList,x + beq .3 + + dex + bpl .2 + + sec + rts + +.3 txa + and #$fe + tax + jmp (J.Opts,x) +*-------------------------------------- +CS.RUN.OptA sec + ror bAltBB + + clc + rts +*-------------------------------------- +CS.RUN.OptB jsr CS.RUN.NextArg + bcs .9 + + >SYSCALL AToI + >STYA BlkCnt + + sec + ror bCustomBlkSize + + clc + +.9 rts +*-------------------------------------- +CS.RUN.OptD lda #2 + sta HeadCnt + + lda #$80 + tsb VolNum + + clc + rts +*-------------------------------------- +CS.RUN.OptV sec + ror bVerify +*-------------------------------------- +CS.RUN.OptL sec + ror bLL + + clc + rts +*-------------------------------------- +CS.RUN.OptS jsr CS.RUN.NextArg + bcs .99 + + >SYSCALL AToI + tax + bne .9 + + tya + beq .9 + + cmp #5 + bcs .99 + + sta Stepping + cmp #4 + beq .8 + + tsb VolNum + + sec + ror bAltBB + +.8 clc + rts + +.9 sec + +.99 rts +*-------------------------------------- +CS.RUN.OptT jsr CS.RUN.NextArg + bcs .99 + + >SYSCALL AToI + tax + bne .9 + + tya + beq .9 + + sta TrkCnt + + clc + rts + +.9 sec + +.99 rts +*-------------------------------------- +CS.RUN.NextArg inc ArgIndex + lda ArgIndex + >SYSCALL ArgV + rts +*-------------------------------------- +CS.RUN.GetDev >LDYA ZPPtr1 + >SYSCALL GetDevByName + bcs .9 + + stx hDevID + >STYA ZPPtrFD + + >LDYA ZPPtr1 + >STYA ZPPtrDevName + +.9 rts +*-------------------------------------- +CS.RUN.GetVolName + lda (pData) + bne .9 + + lda (ZPPtr1) + jsr CS.RUN.IsL + bcs .9 + + sta (pData) VolName + + ldy #0 + +.1 iny + lda (ZPPtr1),y + sta (pData),y +* clc + beq .8 \0 + + jsr CS.RUN.IsDOrL + bcs .9 + + cpy #16 + bcc .1 VolName too long ? + +.9 lda #E.SYN + + sec + +.8 rts +*-------------------------------------- +CS.RUN.GetDevDIB >LEA.G DIB >STYA.G IOCTL+S.IOCTL.BUFPTR @@ -237,6 +374,9 @@ CS.RUN.GetDevDIB >SYSCALL IOCTL bcs .9 + lda bCustomBlkSize + bmi .8 + >LDA.G DIB+S.DIB.SIZE tax iny @@ -277,37 +417,7 @@ CS.RUN.GET.DSSS0000 rts *-------------------------------------- -CS.RUN.LL >LDA.G DIB+S.DIB.T - cmp #S.DIB.T.DISKII - bne .1 - - lda #0 - bit bExtraTrack - bpl .10 - - ora #8 - -.10 bit bHighDensity - bpl .11 - - ora #16 - -.11 bit bDS - bpl .12 - - ora #32 - -.12 tay - ldx #0 - -.13 lda Disk2.Default,y - sta BlkCnt,x - iny - inx - cpx #7 - bne .13 - -.1 >PUSHW L.MSG.LL +CS.RUN.LL >PUSHW L.MSG.LL >PUSHW BlkCnt >PUSHBI 2 >SYSCALL PrintF @@ -596,10 +706,10 @@ CS.RUN.InitCat lda CatSize lda #4 sta CatSize -.1 >LDA.G VolName +.1 lda (pData) >LDA.G VolName bne .8 Volume name ok - >PUSHEA.G VolName + >PUSHW pData >PUSHEA.G VolName >PUSHW L.FMT.BLANK >PUSHW A2osX.TIMER16 >PUSHW A2osX.RANDOM16 @@ -642,18 +752,20 @@ CS.RUN.BuildCat jsr .7 jsr .7 - >PUSHEA.G VolName + >PUSHW pData >PUSHEA.G VolName >PUSHW.G IOCTL+S.IOCTL.BUFPTR >LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat .9 rts .7 >PUSHW BlkCnt >PUSHB CatSize - >PUSHB AltBB + >PUSHB bAltBB rts *-------------------------------------- -CS.RUN.WriteCat >LDYA L.MSG.WRITECAT - >SYSCALL PutS +CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT + >PUSHBI 0 + >SYSCALL PrintF + bcs .9 >STZ.G IOCTL+S.IOCTL.BLKNUM iny @@ -709,26 +821,6 @@ CS.QUIT lda hCatBuf .8 clc rts *-------------------------------------- -CS.RUN.CheckOpt ldy #1 - lda (ZPPtr1),y - - ldx #OptionVars-OptionList-1 - -.2 cmp OptionList,x - beq .3 - - dex - bpl .2 - - sec - rts - -.3 ldy OptionVars,x - ldx #$ff - stx 0,y - clc - rts -*-------------------------------------- CS.RUN.Wait sta TimeOut .1 jsr CS.RUN.CheckCtrlC @@ -764,6 +856,36 @@ CS.RUN.CheckCtrlC plx rts *-------------------------------------- +CS.RUN.IsDOrL cmp #'0' + bcc CS.RUN.IsL + + cmp #'9'+1 + bcc CS.RUN.IsL.RTS + +CS.RUN.IsL cmp #'_' + clc + beq CS.RUN.IsL.RTS + + cmp #'.' + clc + beq CS.RUN.IsL.RTS + + cmp #'A' + bcc CS.RUN.IsL.9 + + cmp #'Z'+1 + bcc CS.RUN.IsL.RTS + + cmp #'a' + bcc CS.RUN.IsL.9 + + cmp #'z'+1 + +CS.RUN.IsL.RTS rts + +CS.RUN.IsL.9 sec + rts +*-------------------------------------- CS.END *-------------------------------------- LIBBLKDEV .AZ "libblkdev" @@ -771,15 +893,15 @@ hLIBBLKDEV .BS 1 *-------------------------------------- MSG.USAGE1 .CS "Usage : FORMAT [VOL.NAME]\r\n" .CS " -L : Low-Level Format\r\n" - .CS "-L -V : Verify After LLF\r\n" - .CS " -B xxxx : Smrtprt, Override Device block size\r\n" - .CZ " -1-9 : Catalog Size (Blocks)\r\n" + .CS " -V : Verify After LLF\r\n" + .CS " -B xxxx : Volume size (blocks)\r\n" + .CZ " -1-9 : Catalog Size (blocks)" MSG.USAGE2 .CS "------- ProDOS.FX only ------\r\n" - .CS " -H : 35trk drives, High Density: 48 tracks, 384 Blocks\r\n" - .CS " -X : 40trk drives, 320 Blocks\r\n" - .CS "-H -X : 40trk drives, 432 Blocks\r\n" - .CS " -D : Rana Elite II 640 Blocks, 2 Sides\r\n" - .CZ "-H -D : Rana Elite III 1280 Blocks, 2 Sides\r\n" + .CS " -A : Alternate boot block\r\n" + .CS " -D : Dual sided\r\n" + .CS " -S x : Quarter track stepping\r\n" + .CZ " -T xxx : Track count\r\n" +*-------------------------------------- MSG.OK .CZ "[OK]" MSG.ERR .CS "[%h]" MSG.CRLF .CZ "\r\n" @@ -791,75 +913,15 @@ MSG.VERIFY .CZ "\rVerifying Head %d/Track %02d/Block %d (%05D)..." MSG.WRITECAT .CZ "Writing Catalog..." FMT.BLANK .CZ "BLANK%H%H" *-------------------------------------- -OptionList .AS "LlBbHhXxDdVv" -OptionVars .DA #bLL,#bLL,#bCustomBlkSize,#bCustomBlkSize - .DA #bHighDensity,#bHighDensity,#bExtraTrack,#bExtraTrack - .DA #bDS,#bDS - .DA #bVerify,#bVerify +OptionList .AS "AaBbDdLlSsTtVv" +OptionList.cnt .EQ *-OptionList *-------------------------------------- Disk2.Default .DA 280 BlkCnt .DA #35 TrkCnt .DA #4 Stepping .DA #$00 VolNum - .DA #0 AltBB + .DA #0 bAltBB .DA #1 HeadCnt - .BS 1 -*-------------------------------------- -Disk2.X .DA 320 BlkCnt - .DA #40 TrkCnt - .DA #4 Stepping - .DA #$00 VolNum - .DA #0 AltBB - .DA #1 HeadCnt - .BS 1 -*-------------------------------------- -Disk2.H .DA 384 BlkCnt - .DA #48 TrkCnt - .DA #3 Stepping - .DA #$03 VolNum - .DA #$80 AltBB - .DA #1 HeadCnt - .BS 1 -*-------------------------------------- -Disk2.HX .DA 432 BlkCnt - .DA #54 TrkCnt - .DA #3 Stepping - .DA #$03 VolNum - .DA #$80 AltBB - .DA #1 HeadCnt - .BS 1 -*-------------------------------------- RANA Elite 2 -Disk2.DefaultD .DA 640 BlkCnt - .DA #40 TrkCnt - .DA #4 Stepping - .DA #$84 VolNum - .DA #$80 AltBB - .DA #2 HeadCnt - .BS 1 -*-------------------------------------- -Disk2.XD .DA 640 BlkCnt - .DA #40 TrkCnt - .DA #4 Stepping - .DA #84 VolNum - .DA #$80 AltBB - .DA #2 HeadCnt - .BS 1 -*-------------------------------------- RANA Elite 3 -Disk2.HD .DA 1280 BlkCnt - .DA #80 TrkCnt - .DA #2 Stepping - .DA #$82 VolNum - .DA #$80 AltBB - .DA #2 HeadCnt - .BS 1 -*-------------------------------------- -Disk2.HXD .DA 1280 BlkCnt - .DA #80 TrkCnt - .DA #2 Stepping - .DA #$82 VolNum - .DA #$80 AltBB - .DA #2 HeadCnt - .BS 1 *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/LC.S.txt b/BIN/LC.S.txt index 8fc562e9..c9b10acf 100644 --- a/BIN/LC.S.txt +++ b/BIN/LC.S.txt @@ -196,9 +196,10 @@ CS.RUN.DIR lda (ZPFileName) >SYSCALL PrintF bcs .9 - >PUSHW ZPFullPath jsr CS.RUN.GetNewPath - >PUSHYA + + >PUSHW ZPFullPath + >PUSHW ZPNewPath >SYSCALL Rename jsr CS.RUN.CheckErr bcs .9 diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index ec62c92a..1eb79863 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -98,7 +98,7 @@ CMD..EXEC.YAX jsr CORE.Load.YAX Y,A = Args, X = Code bcs CMD.SHIFTA.RTS lda #$C0+C.. - jmp CORE.StkPush + jmp STK.Push CMD...9 jmp CMD.E.CSYN *-------------------------------------- @@ -189,6 +189,7 @@ CMD.CD.YA >PUSHYA beq .11 lda #MLI.E.INVPATH + .19 pha lda ZPTmpW >SYSCALL FreeMem @@ -607,7 +608,7 @@ CMD.REN lda (ZPArgVBufPtr) *-------------------------------------- CMD.FUNCTION lda (ZPArgVBufPtr) beq .9 - jsr CORE.StkGetCtx + jsr STK.GetCtx bcc .9 No context allowed >LDA.G hFunctions @@ -713,7 +714,7 @@ CMD.CALL jsr CMD.CALL.GETFUNC bcs CMD.CALL.RTS lda #$C0+C.CALL - jmp CORE.StkPush + jmp STK.Push *-------------------------------------- CMD.CALL.GETFUNC >LDA.G hFunctions @@ -738,7 +739,7 @@ CMD.EXIT lda (ZPArgVBufPtr) .1 ldy #S.PS.RC sta (pPS),y -.2 jsr CORE.StkPull Pull everything until CALL . CL... +.2 jsr STK.Pull Pull everything until CALL . CL... bcs .9 cmp #$C0+C.. in CALL, "." or CL context ? @@ -750,7 +751,7 @@ CMD.EXIT lda (ZPArgVBufPtr) cmp #$C0+C.CLEXEC beq .8 - jsr CORE.StkPopCtxA + jsr STK.PopCtxA bcc .2 rts @@ -761,25 +762,25 @@ CMD.EXIT lda (ZPArgVBufPtr) clc .9 rts *-------------------------------------- -CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer +CMD.EXIT.FILE jsr STK.PullFree Code buffer ldy #S.PS.hARGV lda (pPS),y >SYSCALL FreeMem ArgV buffer - jsr CORE.StkPull + jsr STK.Pull ldy #S.PS.hARGV sta (pPS),y - jsr CORE.StkPull + jsr STK.Pull ldy #S.PS.ARGC sta (pPS),y - jsr CORE.StkPullInputBufPtr + jsr STK.PullInputBufPtr - jsr CORE.StkPull + jsr STK.Pull sta ZPInputBuf - jsr CORE.StkPull + jsr STK.Pull sta ZPInputBuf+1 ldy #S.PS.RC @@ -788,19 +789,44 @@ CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer clc rts *-------------------------------------- -CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult +CMD.BREAK jsr STK.GetCtx Get context in CORE.TestResult bcs .9 + tax and #$3F - cmp #C.CASE - bne .9 - txa - bpl .8 - jsr CORE.StkPull remove C.CASE - jsr CORE.StkGet - and #$7F - sta (pData),y + cmp #C.CASE + bne .1 + + txa + bpl .8 already FALSE + + jsr STK.Pull remove C.CASE + jsr STK.Get get SWITCH + bra .7 +*-------------------------------------- +.1 cmp #C.IF + bne .2 + + sta (pData),y IF=false to skip until FI + + dey get parent context + beq .9 + + lda (pData),y + and #$3F + +.2 cmp #C.WHILE + beq .6 + +.3 cmp #C.FOR + bne .9 + +.6 lda (pData),y + +.7 and #%01111111 + sta (pData),y WHILE/FOR=false, Parent=unchanged + .8 clc rts @@ -809,41 +835,51 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult * stack-1 hVALUE * stack SWITCH TOKEN *-------------------------------------- -CMD.SWITCH jsr CORE.StkGetCtx +CMD.SWITCH jsr STK.GetCtx lda #2 - jsr CORE.StkCheck + jsr STK.Check bcs .9 + jsr EXP.GET bcs .9 + >SYSCALL StrDup bcs .9 txa - jsr CORE.StkPush Push EXP hVALUE + jsr STK.Push Push EXP hVALUE lda CORE.TestResult beq .1 + ora #$80 + .1 ora #C.SWITCH - jmp CORE.StkPush + jmp STK.Push + .9 rts *-------------------------------------- -CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult - +CMD.CASE jsr STK.GetCtx Get context in CORE.TestResult bcs .9 + tax and #$3F cmp #C.SWITCH beq .1 + cmp #C.CASE bne .9 + txa previous case was true ? bpl .10 + jsr EXP.GET skip expression bcs .9 + rts keep existing context -.10 jsr CORE.StkPull remove previous C.CASE + +.10 jsr STK.Pull remove previous C.CASE bra CMD.CASE .1 jsr EXP.GET @@ -862,13 +898,13 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult eor #$80 ora CORE.TestResult ora #C.CASE - jmp CORE.StkPush + jmp STK.Push .9 CMD.E.CSYN lda #E.CSYN sec rts *-------------------------------------- -CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult +CMD.DEFAULT jsr STK.GetCtx Get context in CORE.TestResult bcs CMD.E.CSYN and #$3F @@ -879,14 +915,14 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult cmp #C.CASE bne CMD.E.CSYN - jsr CORE.StkPull remove C.CASE + jsr STK.Pull remove C.CASE -.1 jsr CORE.StkGet +.1 jsr STK.Get and #$C0 ora #C.DEFAULT - jmp CORE.StkPush + jmp STK.Push *-------------------------------------- -CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult +CMD.END jsr STK.GetCtx Get context in CORE.TestResult bcs CMD.E.CSYN and #$3F @@ -900,9 +936,9 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult cmp #C.DEFAULT bne CMD.E.CSYN -.8 jmp CORE.StkPopCtx +.8 jmp STK.PopCtx *-------------------------------------- -CMD.FOR jsr CORE.StkGetCtx +CMD.FOR jsr STK.GetCtx lda (ZPArgVBufPtr) beq CMD.E.CSYN @@ -922,7 +958,7 @@ CMD.FOR jsr CORE.StkGetCtx beq CMD.E.CSYN lda #8 Make sure 8 bytes free on stack - jsr CORE.StkCheck + jsr STK.Check bcs FOR.FILE.9 lda (ZPArgVBufPtr) @@ -939,19 +975,19 @@ CMD.FOR.LIST >LDYA ZPArgVBufPtr phy pha - jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR + jsr STK.PushInputBufPtr Push CmdPtr AFTER FOR pla ply - jsr CORE.StkPushYAX Push listPtr,hList + jsr STK.PushYAX Push listPtr,hList jsr CORE.PushVarName Push hVARNAME lda #C.FOR.LIST - jsr CORE.StkPush + jsr STK.Push lda #C.FOR - jsr CORE.StkPush + jsr STK.Push jsr CMD.NEXT.LIST.TOKEN bcc CMD.FOR.LOOP @@ -981,18 +1017,18 @@ CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`" CMD.FOR.PUSH pha save hFILE/hPIPE - jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR + jsr STK.PushInputBufPtr Push CmdPtr AFTER FOR pla - jsr CORE.StkPush push hPIPE for read + jsr STK.Push push hPIPE for read jsr CORE.PushVarName Push hVARNAME * bcs FOR.FILE.9 lda #C.FOR.FILEEXEC - jsr CORE.StkPush + jsr STK.Push lda #C.FOR - jsr CORE.StkPush + jsr STK.Push jsr CMD.NEXT.LINE bcs FOR.FILE.9 @@ -1008,7 +1044,7 @@ CMD.FOR.LOOP ora CORE.TestResult * clc rts *-------------------------------------- -CMD.NEXT jsr CORE.StkGet Y = StkPtr +CMD.NEXT jsr STK.Get Y = StkPtr bcs .9 and #$3F @@ -1204,7 +1240,7 @@ CMD.NEXT.GetVarNamePtr rts *-------------------------------------- CMD.WHILE -CMD.IF jsr CORE.StkGetCtx +CMD.IF jsr STK.GetCtx bit #$40 Parent is true ? beq .3 @@ -1217,35 +1253,36 @@ CMD.IF jsr CORE.StkGetCtx bne .8 lda #3 - jsr CORE.StkCheck + jsr STK.Check bcs CMD.NEXT.LINE.RTS >LDYA ZPInputCmdPtr - jsr CORE.StkPushYA Push BEFORE WHILE/IF + jsr STK.PushYA Push BEFORE WHILE/IF .8 lda CORE.TestResult ora CORE.IntCmd - jmp CORE.StkPush + jmp STK.Push *-------------------------------------- -CMD.LOOP jsr CORE.StkPull +CMD.LOOP jsr STK.Pull bcs .9 tax and #$3F cmp #C.WHILE bne .9 + txa bmi .8 true, loop - jmp CORE.StkPopCtxA false, Discard loop Ptr + jmp STK.PopCtxA false, Discard loop Ptr -.8 jmp CORE.StkPullInputBufPtr +.8 jmp STK.PullInputBufPtr .9 lda #E.NOWHILE sec rts *-------------------------------------- -CMD.ELSE jsr CORE.StkGet +CMD.ELSE jsr STK.Get bcs .9 bit #$40 parent is true ? @@ -1255,9 +1292,11 @@ CMD.ELSE jsr CORE.StkGet and #$3F cmp #C.IF bne .9 + txa eor #$80 toggle and store at stack ptr sta (pData),y + .8 clc rts .9 @@ -1265,7 +1304,7 @@ CMD.ELSE.NOIF lda #E.NOIF sec rts *-------------------------------------- -CMD.FI jsr CORE.StkPull +CMD.FI jsr STK.Pull bcs CMD.ELSE.NOIF and #$3F diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 00ff7391..84db436f 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -35,21 +35,21 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute sta LOAD.ArgCnt A = ARGC lda #8 - jsr CORE.StkCheck + jsr STK.Check bcs .9 >LDYA ZPInputBuf - jsr CORE.StkPushYA + jsr STK.PushYA - jsr CORE.StkPushInputBufPtr + jsr STK.PushInputBufPtr ldy #S.PS.ARGC lda (pPS),y - jsr CORE.StkPush old ARGC + jsr STK.Push old ARGC ldy #S.PS.hARGV lda (pPS),y - jsr CORE.StkPush old hARGV + jsr STK.Push old hARGV ldy #S.PS.ARGC lda LOAD.ArgCnt new ARGC @@ -61,7 +61,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute sta (pPS),y new hARGV lda LOAD.hCode new code - jsr CORE.StkPush + jsr STK.Push * lda LOAD.hCode >SYSCALL GetMemPtr >STYA ZPInputBuf @@ -95,7 +95,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute * set hStdIn = hStdOut * set hStdOut = Std *-------------------------------------- -CORE.Run.EOF jsr CORE.StkPull +CORE.Run.EOF jsr STK.Pull bcs * cmp #$C0+C.. check CALL . CL context beq .1 @@ -198,7 +198,7 @@ CORE.Run.4 >LDYA L.CMD internal command ? .41 stx CORE.IntCmd jsr CORE.SkipCharsA -.42 jsr CORE.StkGet +.42 jsr STK.Get bcs CORE.Run.5 no particular context, exec... tax @@ -794,191 +794,6 @@ CORE.SListGetData >SYSCALL SListGetData X = hMem rts *-------------------------------------- -* Stack -*-------------------------------------- -CORE.StkPopCtx jsr CORE.StkPull - -CORE.StkPopCtxA and #$3F - cmp #C.IF - beq .8 IF : Nothing - - ldx #2 - cmp #C.WHILE WHILE : One Ptr = 2 bytes - beq CORE.StkPopX - - cmp #C.SWITCH SWITCH : hValue - beq .2 - - ldx #1 - cmp #C.CASE CASE : C.CASE + hValue - beq .1 - - cmp #C.FOR - beq .3 - - cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue - bne .9 - -.1 jsr CORE.StkPopX - -.2 jsr CORE.StkPullFree - -.8 clc - rts - -.3 jsr CORE.StkPull Get FOR sub cmd - beq .4 FOR List - - jsr CORE.StkPullFree hVARNAME - - jsr CORE.StkPullFClose hFILE/hPIPE - - ldx #2 CmdPtr - jmp CORE.StkPopX - -.4 jsr CORE.StkPullFree hVARNAME - - jsr CORE.StkPullFClose hFILE/hPIPE - - ldx #4 ListPtr,CmdPtr - jmp CORE.StkPopX - -.9 lda #E.STACKERROR - sec - rts -*-------------------------------------- -CORE.StkPopX lda (pData) -.1 dec - dex - bne .1 - - sta (pData) - - clc - rts -*-------------------------------------- -CORE.StkCheck sec - adc (pData) StackPtr - cmp #CORE.STACK.MAX - bcc .8 - - lda #E.STKOVERFLOW -* sec -.8 rts -*-------------------------------------- -CORE.StkPushYAX phx - jsr CORE.StkPushYA - bcc CORE.StkPush.1 - - plx - rts -*-------------------------------------- -CORE.StkPushInputBufPtr - >LDYA ZPInputBufPtr -*-------------------------------------- -CORE.StkPushYA phy - jsr CORE.StkPush - bcc CORE.StkPush.1 - - plx - rts -*-------------------------------------- -CORE.PushVarName - >LDYA ZPVarNamePtr - >SYSCALL StrDup - bcs CORE.StkPush.RTS - - txa -*-------------------------------------- -CORE.StkPush pha - -CORE.StkPush.1 lda (pData) StackPtr - inc - cmp #CORE.STACK.MAX - bcs .9 - - sta (pData) StackPtr - tay - pla - sta (pData),y -* clc - rts - -.9 pla - lda #E.STKOVERFLOW -* sec -CORE.StkPush.RTS - rts -*-------------------------------------- -CORE.StkGetCtx jsr CORE.StkGet - tax - bcs .1 no context... - - cmp #$C0+C.. in a call... - beq .1 CS - - cmp #$C0+C.CALL - beq .1 CS - - cmp #$C0+C.CLEXEC - beq .1 CS - - and #$80 get current.. - lsr becomes parent - bra .8 - -.1 lda #$40 ...set Parent = true - -.8 sta CORE.TestResult - - txa - rts -*-------------------------------------- -CORE.StkPullInputBufPtr - jsr CORE.StkPull - bcs .9 - - sta ZPInputBufPtr - jsr CORE.StkPull - bcs .9 - - sta ZPInputBufPtr+1 - -.9 rts -*-------------------------------------- -CORE.StkPullFClose - jsr CORE.StkPull - >SYSCALL FClose - rts -*-------------------------------------- -CORE.StkPullFree - jsr CORE.StkPull - >SYSCALL FreeMem - rts -*-------------------------------------- -CORE.StkPull jsr CORE.StkGet - bcs .9 - - dey - pha - tya - sta (pData) StackPtr - pla - -.9 rts -*-------------------------------------- -CORE.StkGet lda (pData) StackPtr - beq .9 - - tay - lda (pData),y - clc - rts - -.9 lda #E.STACKERROR - sec - rts -*-------------------------------------- MAN SAVE usr/src/bin/sh.s.core LOAD usr/src/bin/sh.s diff --git a/BIN/SH.S.STK.txt b/BIN/SH.S.STK.txt new file mode 100644 index 00000000..1887fb3a --- /dev/null +++ b/BIN/SH.S.STK.txt @@ -0,0 +1,188 @@ +NEW + AUTO 3,1 +*-------------------------------------- +STK.PopCtx jsr STK.Pull + +STK.PopCtxA and #$3F + cmp #C.IF + beq .8 IF : Nothing + + ldx #2 + cmp #C.WHILE WHILE : One Ptr = 2 bytes + beq STK.PopX + + cmp #C.SWITCH SWITCH : hValue + beq .2 + + ldx #1 + cmp #C.CASE CASE : C.CASE + hValue + beq .1 + + cmp #C.FOR + beq .3 + + cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue + bne .9 + +.1 jsr STK.PopX + +.2 jsr STK.PullFree + +.8 clc + rts + +.3 jsr STK.Pull Get FOR sub cmd + beq .4 FOR List + + jsr STK.PullFree hVARNAME + + jsr STK.PullFClose hFILE/hPIPE + + ldx #2 CmdPtr + jmp STK.PopX + +.4 jsr STK.PullFree hVARNAME + + jsr STK.PullFClose hFILE/hPIPE + + ldx #4 ListPtr,CmdPtr + jmp STK.PopX + +.9 lda #E.STACKERROR + sec + rts +*-------------------------------------- +STK.PopX lda (pData) +.1 dec + dex + bne .1 + + sta (pData) + + clc + rts +*-------------------------------------- +STK.Check sec + adc (pData) StackPtr + cmp #CORE.STACK.MAX + bcc .8 + + lda #E.STKOVERFLOW +* sec +.8 rts +*-------------------------------------- +STK.PushYAX phx + jsr STK.PushYA + bcc STK.Push.1 + + plx + rts +*-------------------------------------- +STK.PushInputBufPtr + >LDYA ZPInputBufPtr +*-------------------------------------- +STK.PushYA phy + jsr STK.Push + bcc STK.Push.1 + + plx + rts +*-------------------------------------- +CORE.PushVarName + >LDYA ZPVarNamePtr + >SYSCALL StrDup + bcs STK.Push.RTS + + txa +*-------------------------------------- +STK.Push pha + +STK.Push.1 lda (pData) StackPtr + inc + cmp #CORE.STACK.MAX + bcs .9 + + sta (pData) StackPtr + tay + pla + sta (pData),y +* clc + rts + +.9 pla + lda #E.STKOVERFLOW +* sec +STK.Push.RTS + rts +*-------------------------------------- +STK.GetCtx jsr STK.Get + tax + bcs .1 no context... + + cmp #$C0+C.. in a call... + beq .1 CS + + cmp #$C0+C.CALL + beq .1 CS + + cmp #$C0+C.CLEXEC + beq .1 CS + + and #$80 get current.. + lsr becomes parent + bra .8 + +.1 lda #$40 ...set Parent = true + +.8 sta CORE.TestResult + + txa + rts +*-------------------------------------- +STK.PullInputBufPtr + jsr STK.Pull + bcs .9 + + sta ZPInputBufPtr + jsr STK.Pull + bcs .9 + + sta ZPInputBufPtr+1 + +.9 rts +*-------------------------------------- +STK.PullFClose jsr STK.Pull + >SYSCALL FClose + rts +*-------------------------------------- +STK.PullFree jsr STK.Pull + >SYSCALL FreeMem + rts +*-------------------------------------- +STK.Pull jsr STK.Get + bcs .9 + + dey + pha + tya + sta (pData) StackPtr + pla + +.9 rts +*-------------------------------------- +STK.Get lda (pData) StackPtr + beq .9 + + tay + lda (pData),y + clc + rts + +.9 lda #E.STACKERROR + sec + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/sh.s.stk +LOAD usr/src/bin/sh.s +ASM diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index f5562f7d..1d118785 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -206,9 +206,9 @@ CS.INIT clc CS.RUN jsr CL.Init jsr CORE.Init - lda #0 - jsr GetArgV - >STYA.G SH +* lda #0 +* jsr GetArgV +* >STYA.G SH ldy #S.PS.ARGC lda (pPS),y @@ -397,7 +397,7 @@ CS.RUN.CMDLINE >SYSCALL StrDup bcs CS.RUN.CMDLINE.9 lda #$C0+C.CLEXEC - jsr CORE.StkPush + jsr STK.Push bra CS.RUN.LOOP.RUN @@ -439,7 +439,7 @@ CS.RUN.LOOP.END ldy #S.PS.RC and #bState.SET.E bne CS.RUN.LOOP.80 -.1 jsr CORE.StkGet +.1 jsr STK.Get cmp #$C0+C.CLEXEC beq .8 @@ -449,13 +449,13 @@ CS.RUN.LOOP.END ldy #S.PS.RC cmp #$C0+C.CALL in CALL ? beq .7 - jsr CORE.StkPopCtx + jsr STK.PopCtx bcc .1 .7 jsr IO.PrintBatchErrMsg bcs CS.RUN.LOOP.RTS - jsr CORE.StkPull + jsr STK.Pull jsr CMD.EXIT.FILE .8 jsr IO.PrintErrMsg @@ -601,11 +601,12 @@ PrintYANoCR >PUSHYA rts *-------------------------------------- .INB usr/src/bin/sh.s.cl - .INB usr/src/bin/sh.s.his - .INB usr/src/bin/sh.s.core - .INB usr/src/bin/sh.s.io .INB usr/src/bin/sh.s.cmd + .INB usr/src/bin/sh.s.core .INB usr/src/bin/sh.s.exp + .INB usr/src/bin/sh.s.his + .INB usr/src/bin/sh.s.io + .INB usr/src/bin/sh.s.stk *-------------------------------------- CS.END *-------------------------------------- @@ -737,7 +738,7 @@ CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr) PUSHD.STACK .BS PUSHD.STACK.MAX+1 CODE.STACK .BS CODE.STACK.MAX*7+1 -SH .BS 2 +*SH .BS 2 hAliases .BS 1 hFunctions .BS 1 diff --git a/BIN/UC.S.txt b/BIN/UC.S.txt index 9f7b666c..9b26a189 100644 --- a/BIN/UC.S.txt +++ b/BIN/UC.S.txt @@ -199,9 +199,10 @@ CS.RUN.DIR lda (ZPFileName) >SYSCALL PrintF bcs .9 - >PUSHW ZPFullPath jsr CS.RUN.GetNewPath - >PUSHYA + + >PUSHW ZPFullPath + >PUSHW ZPNewPath >SYSCALL Rename jsr CS.RUN.CheckErr bcs .9 diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt index 311caba4..a3f94387 100644 --- a/DRV/DHGR.DRV.S.LBUF.txt +++ b/DRV/DHGR.DRV.S.LBUF.txt @@ -1,11 +1,11 @@ NEW AUTO 3,1 *-------------------------------------- -LBUF.SetBounds1YA +LBUF.SetBounds1YA jsr DIVMOD7YA A=DIV, X=MOD sta LBUF.C1 - lda C1.MASK,x + lda C1.MASK,x sta LBUF.C1.MASK lda C1.DATA,x sta LBUF.C1.DATA @@ -14,21 +14,19 @@ LBUF.SetBounds1YA LBUF.SetBounds2YA jsr DIVMOD7YA A=DIV, X=MOD sta LBUF.C2 - cmp LBUF.C1 C1=C2, go combine in C1 + cmp LBUF.C1 beq .1 - + lda C2.MASK,x sta LBUF.C2.MASK lda C2.DATA,x sta LBUF.C2.DATA rts -.1 lda C1.MASK,x - ora C2.MASK,x - sta LBUF.C1.MASK - lda C1.DATA,x - ora C2.DATA,x - sta LBUF.C1.DATA +.1 lda C2.MASK,x C1=C2, go combine in C1 + tsb LBUF.C1.MASK + lda C2.DATA,x + tsb LBUF.C1.DATA rts *-------------------------------------- LBUF.DrawAtY lda BASEL,y setup line Base Ptr @@ -70,7 +68,7 @@ LBUF.DrawAtY.AND.SET inx cpx LBUF.C2 bcc .1 - + .2 >X2PageY lda (ZPBasePtr),y Get C2 @@ -83,7 +81,7 @@ LBUF.DrawAtY.AND.SET sta (ZPBasePtr),y update screen .8 rts -*-------------------------------------- +*-------------------------------------- LBUF.DrawAtY.XOR LBUF.DrawAtY.AND.XOR lda #$51 EOR (Indirect),Y @@ -92,33 +90,29 @@ LBUF.DrawAtY.AND.XOR LBUF.DrawAtY.ORA lda #$11 ORA (Indirect),Y LBUF.DrawAtY.XXX - sta .10+1 - sta .20+1 - sta .30+1 + sta .10 + sta .20 + sta .30 ldx LBUF.C1 x C1->C2 >X2PageY - lda (ZPBasePtr),y Get C1 - and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7 - sta ZPTmpByte - lda LBUF.DATA,x get DATA bits and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 - ora ZPTmpByte -.10 ora (ZPBasePtr),y + +.10 eor (ZPBasePtr),y sta (ZPBasePtr),y update screen inx cpx LBUF.C2 beq .2 C1=C2, go setup C2 - bcs .8 C1+1 > C2, we are done... + bcs .8 C1+1 > C2, we are done... .1 >X2PageY lda LBUF.DATA,x set all bytes between C1+1 & C2-1 -.20 ora (ZPBasePtr),y +.20 eor (ZPBasePtr),y sta (ZPBasePtr),y inx @@ -127,15 +121,11 @@ LBUF.DrawAtY.XXX .2 >X2PageY - lda (ZPBasePtr),y Get C2 - and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7 - sta ZPTmpByte - lda LBUF.DATA,x get DATA bits and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 - ora ZPTmpByte -.30 ora (ZPBasePtr),y - sta (ZPBasePtr),y update screen + +.30 eor (ZPBasePtr),y + sta (ZPBasePtr),y update screen .8 rts *-------------------------------------- @@ -146,51 +136,41 @@ LBUF.DrawAtY.AND.ORA lda LBUF.MASK,x get MASK bits ora LBUF.C1.MASK clear ONLY bits starting at X1 mod 7 - - cpx LBUF.C2 - bne .1 - - ora LBUF.C2.MASK special case : C1=C2 - and (ZPBasePtr),y + and (ZPBasePtr),y sta ZPTmpByte - - lda LBUF.DATA,x + + lda LBUF.DATA,x and LBUF.C1.DATA - and LBUF.C2.DATA - ora ZPTmpByte + ora ZPTmpByte sta (ZPBasePtr),y update screen - rts -.1 and (ZPBasePtr),y Clear screen at C1 - sta ZPTmpByte + inx + cpx LBUF.C2 + beq .2 C1=C2, go setup C2 - lda LBUF.DATA,x get DATA bits - and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 - ora ZPTmpByte ora with screen bits - - bra .3 + bcs .8 C1+1 > C2, we are done... -.2 >X2PageY +.1 >X2PageY lda (ZPBasePtr),y and LBUF.MASK,x ora LBUF.DATA,x set all bytes between C1+1 & C2-1 -.3 sta (ZPBasePtr),y update screen + sta (ZPBasePtr),y update screen inx cpx LBUF.C2 - bne .2 + bne .1 - >X2PageY +.2 >X2PageY lda LBUF.MASK,x get MASK bits ora LBUF.C2.MASK - and (ZPBasePtr),y + and (ZPBasePtr),y sta ZPTmpByte lda LBUF.DATA,x get DATA bits - and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 + and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 ora ZPTmpByte sta (ZPBasePtr),y update screen diff --git a/DRV/DHGR.DRV.S.OSD.txt b/DRV/DHGR.DRV.S.OSD.txt index adb39486..7bf4d233 100644 --- a/DRV/DHGR.DRV.S.OSD.txt +++ b/DRV/DHGR.DRV.S.OSD.txt @@ -478,11 +478,14 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W ldx DstBM.Cache+S.BM.W+1 bit #7 beq .1 + and #$F8 clc adc #8 bcc .1 + inx + .1 sta DstBM.Cache+S.BM.RowBytes txa @@ -509,12 +512,16 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W adc /S.BM >SYSCALL2 GetMem bcs .9 + >STYA ZPDstBMPtr + ldy #S.BM-1 + .2 lda DstBM.Cache,y sta (ZPDstBMPtr),y dey bpl .2 + lda ZPDstBMPtr * clc adc #S.BM @@ -524,6 +531,7 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W adc /S.BM sta ZPDstBMPtr+1 sta .4+2 + ldy #0 lda CBX.Cache+S.CB.OP @@ -531,16 +539,22 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W beq .3 lda #$ff + .3 inc ZPTmpPtr bne .4 + inc ZPTmpPtr+1 beq .8 + .4 sta $ffff,y iny bne .3 + inc .4+2 bra .3 + .8 txa hBM + clc .9 rts *-------------------------------------- diff --git a/DRV/MOUSE.DRV.S.txt b/DRV/MOUSE.DRV.S.txt index 467434be..d4ec7ffe 100644 --- a/DRV/MOUSE.DRV.S.txt +++ b/DRV/MOUSE.DRV.S.txt @@ -121,6 +121,7 @@ FD.DEV.NAME .AZ "mou1" *-------------------------------------- ZPIOCTL .EQ ZPDRV ZPBufPtr .EQ ZPDRV+2 +ZPState .EQ ZPDRV+4 *-------------------------------------- DRV.CS.START cld jmp (.1,x) @@ -225,7 +226,7 @@ EXIT1 jsr GOMOUSE *-------------------------------------- READ >STYA ZPBufPtr NON STANDARD - stz READ.S+1 Reset Flags + stz ZPState Reset Flags php sei @@ -255,7 +256,8 @@ READ >STYA ZPBufPtr NON STANDARD sta (ZPBufPtr),y lda #S.XY.S.MOVE - tsb READ.S+1 + tsb ZPState + stz bDblClick Reset DblClick flag .1 lda MOUSESTSx,x @@ -263,32 +265,41 @@ READ >STYA ZPBufPtr NON STANDARD beq .8 no button state change:up & previously up cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN - beq .8 no button state change:down & previously down + bne .10 - asl if CS, down & previously up - bcc .2 - - lda #S.XY.S.DOWN - tsb READ.S+1 button has been pressed, start drag... - - lda MOUSEXLOx,x - sta SrcDrag - lda MOUSEXHIx,x - sta SrcDrag+1 - lda MOUSEYLOx,x - sta SrcDrag+2 - lda MOUSEYHIx,x - sta SrcDrag+3 + lda ZPState no button state change:down & previously down + and #S.XY.S.MOVE + beq .8 + + sec + ror bDrag + + lda #S.XY.S.DRAGSTART + tsb ZPState bra .8 -.2 lda READ.S+1 - pha save move state - ora #S.XY.S.UP - sta READ.S+1 - pla get back move state - bne .4 no move...click! +.10 asl + bcc .2 if CC, up & previously down - lda #S.XY.S.CLK + lda #S.XY.S.DOWN if CS, down & previously up + tsb ZPState button has been pressed + + ldy #S.XY.X1+3 + +.11 lda (ZPBufPtr),y record pos if it is a drag start + sta SrcDrag-S.XY.X1,y + dey + bpl .11 + + bra .8 +*-------------------------------------- +.2 lda #S.XY.S.UP + tsb ZPState + + bit bDrag + bmi .4 + + lda #S.XY.S.CLK no move since down...click! bit bDblClick bpl .3 @@ -299,11 +310,11 @@ READ >STYA ZPBufPtr NON STANDARD .3 dec bDblClick - tsb READ.S+1 + tsb ZPState bra .8 - -.4 lda #S.XY.S.DRAGSTART - tsb READ.S+1 +*-------------------------------------- +.4 lda #S.XY.S.DRAGEND + tsb ZPState ldy #S.XY.X2+3 @@ -311,10 +322,12 @@ READ >STYA ZPBufPtr NON STANDARD sta (ZPBufPtr),y dey bpl .5 - + + stz bDrag +*-------------------------------------- .8 plp -READ.S lda #$ff SELF MODIFIED + lda ZPState beq .9 ldy #S.XY.S @@ -356,6 +369,7 @@ GOMOUSE.JMP jmp $C100 SELF MODIFIED DRV.CS.END DEVSLOT0n .BS 1 bDblClick .BS 1 +bDrag .BS 1 SrcDrag .BS 4 *-------------------------------------- DIB .DA #0 diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index 5ab55090..6f89357c 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -46,6 +46,9 @@ BM.ID.RIGHT .EQ 12 BM.ID.UP .EQ 14 BM.ID.DOWN .EQ 16 BM.ID.INFO .EQ 18 +BM.ID.QMARK .EQ 20 +BM.ID.EMARK .EQ 22 +BM.ID.ERROR .EQ 24 *-------------------------------------- BUT.ID.OK .EQ 1 BUT.ID.CANCEL .EQ 2 @@ -86,14 +89,6 @@ S.MSG.Y1 .EQ 8 S.MSG.X2 .EQ 10 S.MSG.Y2 .EQ 12 S.MSG.S .EQ 14 -S.MSG.S.UP .EQ %00000001 -S.MSG.S.DOWN .EQ %00000010 -S.MSG.S.MOVE .EQ %00000100 -S.MSG.S.DRAGSTART .EQ %00001000 -S.MSG.S.DRAGEND .EQ %00010000 -S.MSG.S.CLK .EQ %00100000 -S.MSG.S.DCLK .EQ %01000000 -* * S.MSG .EQ 16 *-------------------------------------- @@ -115,9 +110,12 @@ S.OBJ.T.MBAR .EQ 2 S.OBJ.T.MENU .EQ 4 S.OBJ.T.BUT .EQ 6 S.OBJ.T.TEXT .EQ 8 +S.OBJ.T.BITMAP .EQ 10 +S.OBJ.T.LABEL .EQ 12 S.OBJ.F .EQ 1 S.OBJ.F.BORDER .EQ %10000000 + S.OBJ.S .EQ 2 S.OBJ.S.VISIBLE .EQ %10000000 @@ -131,8 +129,8 @@ S.OBJ.X2 .EQ 12 S.OBJ.Y2 .EQ 14 S.OBJ.W .EQ 16 S.OBJ.H .EQ 18 -S.OBJ.pNEXT .EQ 20 -* +S.OBJ.pChilds .EQ 20 +S.OBJ.pNext .EQ 22 * S.OBJ .EQ 24 *-------------------------------------- @@ -149,7 +147,7 @@ S.WND.S.HASMBAR .EQ %00000010 S.WND.S.HASSBAR .EQ %00000100 S.WND.S.MAXIMIZED .EQ %00001000 S.WND.S.MINIMIZED .EQ %00010000 -S.WND.S.ACTIVE .EQ %01000000 +S.WND.S.ACTIVE .EQ %00100000 * S.WND.MinW .EQ S.OBJ S.WND.MinH .EQ S.OBJ+2 @@ -163,24 +161,24 @@ S.WND.hPTR .EQ S.OBJ+16 * * private * -S.WND.TitleX1 .EQ S.OBJ+18 -S.WND.TitleX2 .EQ S.OBJ+20 -* S.WND.TBarY1 .EQ S.OBJ.X1 -S.WND.TBarY2 .EQ S.OBJ+22 -S.WND.MBarY1 .EQ S.OBJ+24 -S.WND.MBarY2 .EQ S.OBJ+26 -S.WND.InnerY1 .EQ S.OBJ+28 -S.WND.InnerY2 .EQ S.OBJ+30 -S.WND.SBarY1 .EQ S.OBJ+32 -S.WND.InnerX2 .EQ S.OBJ+34 +S.WND.TBarY2 .EQ S.OBJ+20 +S.WND.MBarY1 .EQ S.OBJ+22 +S.WND.MBarY2 .EQ S.OBJ+24 +S.WND.SBarY1 .EQ S.OBJ+26 +* +S.WND.InnerX1 .EQ S.OBJ+28 +S.WND.InnerY1 .EQ S.OBJ+30 +S.WND.InnerX2 .EQ S.OBJ+32 +S.WND.InnerY2 .EQ S.OBJ+34 S.WND.InnerW .EQ S.OBJ+36 S.WND.InnerH .EQ S.OBJ+38 +* S.WND.DocW .EQ S.OBJ+40 S.WND.DocH .EQ S.OBJ+42 S.WND.DocX .EQ S.OBJ+44 S.WND.DocY .EQ S.OBJ+46 S.WND.fPaint .EQ S.OBJ+48 -S.WND.pChilds .EQ S.OBJ+50 +* * S.WND .EQ S.OBJ+52 *-------------------------------------- @@ -221,10 +219,11 @@ S.MITEM.ID .EQ 10 * S.MITEM .EQ 12 *-------------------------------------- -S.BUT.F.DISABLED .EQ %00000010 +*S.BUT.F.DISABLED .EQ %00000010 +S.BUT.F.NOLEAVE .EQ %00000010 S.BUT.F.NOSPACE .EQ %00000001 * -S.BUT.S.PUSHED .EQ %10000000 +S.BUT.S.SELECTED .EQ %10000000 * S.BUT.pICON .EQ S.OBJ S.BUT.pTEXT .EQ S.OBJ+2 @@ -234,14 +233,23 @@ S.BUT.ID .EQ S.OBJ+6 * S.BUT .EQ S.OBJ+8 *-------------------------------------- +S.LABEL.pTEXT .EQ S.OBJ +* +S.LABEL .EQ S.OBJ+2 +*-------------------------------------- S.TEXT.F.DISABLED .EQ %10000000 * S.TEXT.hBM .EQ S.OBJ S.TEXT.TEXTX .EQ S.OBJ+2 S.TEXT.TEXTY .EQ S.OBJ+4 S.TEXT.TEXTLEN .EQ S.OBJ+6 -S.TEXT.TEXT .EQ S.OBJ+8 -* ... +S.TEXT.pTEXT .EQ S.OBJ+8 +* +S.TEXT .EQ S.OBJ+10 +*-------------------------------------- +S.BITMAP.pBM .EQ S.OBJ+4 +* +S.BITMAP .EQ S.OBJ+6 *-------------------------------------- MAN SAVE inc/libgui.i diff --git a/INCLUDE/libgui.h.txt b/INCLUDE/libgui.h.txt index ddde21f7..423188fd 100644 --- a/INCLUDE/libgui.h.txt +++ b/INCLUDE/libgui.h.txt @@ -1,9 +1,8 @@ NEW AUTO 3,1 -#define C_BLACK 0 -#define C_WHITE 255 -#define pC_WHITE ((void *)255) +#define C_BLACK ((void *)0) +#define C_WHITE ((void *)255) #define PTR_T_ARROW 0 #define PTR_T_MOVE 2 @@ -11,7 +10,7 @@ NEW #define PTR_T_RESIZEY 6 #define PTR_T_RESIZEXY1 8 #define PTR_T_RESIZEXY2 10 -#define PTR_T_CROSS 12 +#define PTR_T_CROSS ((void *)12) #define PTR_T_TEXT 14 #define PTR_T_WAIT 16 diff --git a/LIB/LIBGUI.G.BM.txt b/LIB/LIBGUI.G.BM.txt index 86fd0411..c3aa468f 100644 --- a/LIB/LIBGUI.G.BM.txt +++ b/LIB/LIBGUI.G.BM.txt @@ -177,41 +177,63 @@ BM.Down.AND .DA #%1111111 .DA #%1110111 .DA #%1111111 *-------------------------------------- +BM.Checked .DA #S.BM.F.BBP1 + .DA #1 RowBytes + .DA 7 W + .DA 7 Y + .DA BM.Checked.AND-BM.Checked + + .DA #%0000000 + .DA #%0100000 + .DA #%0101000 + .DA #%0010000 + .DA #%0001000 + .DA #%0001000 + .DA #%0000000 + +BM.Checked.AND .DA #%1111111 + .DA #%1111111 + .DA #%1111111 + .DA #%1111111 + .DA #%1111111 + .DA #%1111111 + .DA #%1111111 +*-------------------------------------- BM.Info .DA #S.BM.F.BBP4 .DA #4 RowBytes - .DA 28 W + .DA 32 W .DA 14 H - .DA BM.INFO.AND-BM.INFO + .DA BM.Info.AND-BM.Info - .HS 00000000 - .HS 00000000 - .HS 00000000 - .HS 00000000 - .HS 0BBBBB00 - .HS 0BBBBB00 - .HS 0BBBBB00 - .HS 0BBBBB00 - .HS 0BBBBB00 - .HS 0BBBBB00 - .HS 00000000 - .HS 00000000 - .HS 00000000 - .HS 00000000 + .HX 00000000 + .HX 00022000 + .HX 00222200 + .HX 002FF200 + .HX 022FF220 + .HX 02222220 + .HX 02FFFF20 + .HX 022FF220 + .HX 022FF220 + .HX 02FFFF20 + .HX 00222200 + .HX 00222200 + .HX 00022000 + .HX 00000000 -BM.Info.AND .HS FFF0FFF0 - .HS FF000FF0 - .HS FF000FF0 - .HS F00000F0 - .HS F00000F0 - .HS 00000000 - .HS 00000000 - .HS 00000000 - .HS 00000000 - .HS F00000F0 - .HS F00000F0 - .HS FF0000F0 - .HS FF000FF0 - .HS FFF0FFF0 +BM.Info.AND .HX FFF00FFF + .HX FF0000FF + .HX F000000F + .HX F000000F + .HX 00000000 + .HX 00000000 + .HX 00000000 + .HX 00000000 + .HX 00000000 + .HX 00000000 + .HX F000000F + .HX F000000F + .HX FF0000FF + .HX FFF00FFF *-------------------------------------- MAN SAVE usr/src/lib/libgui.g.bm diff --git a/LIB/LIBGUI.G.FON.txt b/LIB/LIBGUI.G.FON.txt index 0d1bc7cc..b6c815d8 100644 --- a/LIB/LIBGUI.G.FON.txt +++ b/LIB/LIBGUI.G.FON.txt @@ -3,7 +3,6 @@ NEW *-------------------------------------- hSYSFON .BS 1 hSYSFONB .BS 1 -SYSFON.Hm1 .BS 1 SYSFON.H .BS 1 SYSFON.Hp1 .BS 1 SYSFON.Hp2 .BS 1 diff --git a/LIB/LIBGUI.G.PTR.txt b/LIB/LIBGUI.G.PTR.txt index 0fcc0edc..20f05e56 100644 --- a/LIB/LIBGUI.G.PTR.txt +++ b/LIB/LIBGUI.G.PTR.txt @@ -4,6 +4,9 @@ NEW PTR.T .BS 1 PTR.bVisible .BS 1 PTR.Pos .BS S.POINT +PTR.Rect .BS S.Rect +PTR.SaveBuf .BS 64 +* .BS 3*14 3 bytes (16pix possibly shifted 0-6) x 14 lines max *-------------------------------------- PTR.HotPoints .DA #0,#0 PTR.T.ARROW .DA #6,#6 PTR.T.MOVE @@ -20,8 +23,6 @@ PTR.HotPoints .DA #0,#0 PTR.T.ARROW .DA #8,#7 PTR.Wait5 .DA #8,#7 PTR.Wait6 *-------------------------------------- -PTR.SaveBuf .BS 64 16*4 -*-------------------------------------- PTR.Arrow .DA #S.BM.F.BBP1 .DA #2 RowBytes .DA 11 W @@ -56,32 +57,32 @@ PTR.Arrow.MASK .DA %111.11111100 *-------------------------------------- PTR.Move .DA #S.BM.F.BBP1 .DA #2 RowBytes - .DA 11 W + .DA 12 W .DA 11 H .DA PTR.Move.MASK-PTR.Move - .DA %000.00100000 - .DA %000.01010000 - .DA %000.10001000 - .DA %001.00000100 - .DA %010.00000010 - .DA %100.00000001 - .DA %010.00000010 - .DA %001.00000100 - .DA %000.10001000 - .DA %000.01010000 - .DA %000.00100000 + .DA %0000.001000000 + .DA %0000.010100000 + .DA %0000.100010000 + .DA %0001.111111000 + .DA %0010.100010100 + .DA %0100.100010010 + .DA %0010.100010100 + .DA %0001.111111000 + .DA %0000.100010000 + .DA %0000.010100000 + .DA %0000.001000000 PTR.Move.MASK - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 + .DA %1111.100011111 + .DA %1111.000001111 + .DA %1110.000000111 + .DA %1100.000000011 + .DA %1000.000000001 + .DA %0000.000000000 + .DA %1000.000000001 + .DA %1100.000000011 + .DA %1110.000000111 + .DA %1111.000001111 + .DA %1111.100011111 *-------------------------------------- PTR.ResizeX .DA #S.BM.F.BBP1 .DA #2 RowBytes diff --git a/LIB/LIBGUI.S.BITMAP.txt b/LIB/LIBGUI.S.BITMAP.txt new file mode 100644 index 00000000..1cf6ec49 --- /dev/null +++ b/LIB/LIBGUI.S.BITMAP.txt @@ -0,0 +1,52 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* NewBitmap (hWND, pBM, X, Y) +*-------------------------------------- +BITMAP.New >PULLW DY + >PULLW DX + >PULLW ZPBMPtr + jsr OBJ.PullHWND + +BITMAP.New.I lda #S.OBJ.T.BITMAP + jsr OBJ.New + bcs .9 ZPObjPtr + + phx hOBJ + + jsr OBJ.SetDXDYX1Y1 + + ldy #S.BITMAP.pBM + lda ZPBMPtr + sta (ZPObjPtr),y + iny + lda ZPBMPtr+1 + sta (ZPObjPtr),y + + pla hOBJ + jmp WND.AddChild.I + +.9 rts +*-------------------------------------- +BITMAP.Enter +BITMAP.Leave + clc + rts +*-------------------------------------- +* ZPWNDPtr +* ZPObjPtr +*-------------------------------------- +BITMAP.fPaint jsr CB.GetObjX1Y1 + + ldy #S.BITMAP.pBM + jsr OBJ.GetPtr + + jsr BM.YA2CB.cache + + jsr CB.ToGlobal + jmp CB.Write +*-------------------------------------- +MAN +SAVE usr/src/lib/libgui.s.bitmap +LOAD usr/src/lib/libgui.s +ASM diff --git a/LIB/LIBGUI.S.BM.txt b/LIB/LIBGUI.S.BM.txt index eadc7e18..57d4d634 100644 --- a/LIB/LIBGUI.S.BM.txt +++ b/LIB/LIBGUI.S.BM.txt @@ -1,9 +1,43 @@ NEW AUTO 3,1 *-------------------------------------- -BM.Get -*-------------------------------------- -*-------------------------------------- +BM.YA2CB.cache >STYA ZPBMPtr + >STYA CB.Cache+S.CB.SrcPtr + + lda #S.CB.CMD.BITBLT + sta CB.Cache+S.CB.CMD + + lda #S.CB.OP.MASK+S.CB.OP.ORA + sta CB.Cache+S.CB.OP + + ldx #S.CB.M.MONO + lda (ZPBMPtr) #S.BM.F + cmp #S.BM.F.BBP4 + bne .1 + + lda #S.CB.OP.COLOR + tsb CB.Cache+S.CB.OP + + lda CB.Cache+S.CB.X1 + and PREFS.BestViewedX + sta CB.Cache+S.CB.X1 + + ldx #S.CB.M.C16 + +.1 stx CB.Cache+S.CB.M + + jsr CB.ResetSrcXY + + ldy #S.BM.W+3 + ldx #3 + +.2 lda (ZPBMPtr),y + sta CB.Cache+S.CB.SrcW,x + dey + dex + bpl .2 + + rts *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.bm diff --git a/LIB/LIBGUI.S.BUT.txt b/LIB/LIBGUI.S.BUT.txt index cbf790d2..66dcb33d 100644 --- a/LIB/LIBGUI.S.BUT.txt +++ b/LIB/LIBGUI.S.BUT.txt @@ -5,9 +5,9 @@ NEW *-------------------------------------- BUT.New lda #S.OBJ.T.BUT jsr OBJ.New - bcs .9 +* bcs .9 -* >STYA ZPObjPtr + phx hOBJ ldy #S.OBJ.Y1 jsr OBJ.PullWordAtY @@ -15,6 +15,9 @@ BUT.New lda #S.OBJ.T.BUT ldy #S.OBJ.X1 jsr OBJ.PullWordAtY + ldy #S.BUT.ID + jsr OBJ.PullWordAtY + ldy #S.BUT.KEYMOD jsr OBJ.PullWordAtY @@ -74,7 +77,7 @@ BUT.New lda #S.OBJ.T.BUT adc DX+1 sta DX+1 -.3 lda #PREFS.XSeparator +.3 lda PREFS.XSeparator asl * clc adc DX @@ -85,26 +88,95 @@ BUT.New lda #S.OBJ.T.BUT iny sta (ZPObjPtr),y -.5 +.5 lda SYSFON.Hp2 + ldy #S.OBJ.H + sta (ZPObjPtr),y + + >LDYA ZPObjPtr + jsr OBJ.SetX2Y2 -.8 clc +.8 jsr WND.AddChild.I + + pla hOBJ + clc rts -.9 >POP 14 +.9 >POP 16 rts *-------------------------------------- -BUT.Enter -*-------------------------------------- -BUT.Draw +BUT.Enter ldy #S.OBJ.S + lda (ZPObjPtr),y + bpl BUT.Paint +.8 clc + rts +*-------------------------------------- +BUT.Leave ldy #S.OBJ.S + lda (ZPObjPtr),y + bpl .8 + + bit #S.BUT.F.NOLEAVE + beq BUT.Paint + +.8 clc + rts *-------------------------------------- BUT.Close clc rts *-------------------------------------- +BUT.Paint eor #S.BUT.S.SELECTED + sta (ZPObjPtr),y + + jsr WND.GetInnerInClip + +BUT.fPaint jsr CB.GetBuf + bcs .9 + + ldx #1 + jsr DRAW.BordersAtX + + ldx #C.WHITE + + ldy #S.OBJ.S + lda (ZPObjPtr),y + bpl .1 + +* and #S.BUT.S.SELECTED +* beq .1 + + ldx #C.BLACK + +.1 txa + jsr CB.FillRectMonoA + + jsr CB.GetObjX1Y1X2Y2 + + jsr CB.Cache2CBBufG + + ldy #S.BUT.pTEXT + jsr OBJ.GetPropAtY + ldx hSYSFON + jsr FON.GetTextSize + + jsr CB.SrcWCenterH + + jsr CB.IncY1 + + ldy #S.BUT.pTEXT + jsr OBJ.GetPropAtY + ldx hSYSFON + jsr DRAW.YAText + + + +.8 jmp CB.FlushBuf + +.9 rts +*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.but LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.CB.txt b/LIB/LIBGUI.S.CB.txt index 7378bc7e..1046092c 100644 --- a/LIB/LIBGUI.S.CB.txt +++ b/LIB/LIBGUI.S.CB.txt @@ -1,27 +1,6 @@ NEW AUTO 3,1 *-------------------------------------- -CB.InitCacheA sta CB.Cache+S.CB.CMD - - ldx #S.CB-1 - -.1 stz CB.Cache,x - dex - bne .1 - - rts -*-------------------------------------- -CB.GetInCache >STYA .1+1 - - ldx #S.CB-1 - -.1 lda $ffff,x SELF MODIFIED - sta CB.Cache,x - dex - bpl .1 - - rts -*-------------------------------------- CB.GetWndYCacheX lda (ZPWNDPtr),y sta CB.Cache,x @@ -30,6 +9,32 @@ CB.GetWndYCacheX sta CB.Cache+1,x rts *-------------------------------------- +CB.SwapX1X2 ldx CB.Cache+S.CB.X1 + ldy CB.Cache+S.CB.X1+1 + + lda CB.Cache+S.CB.X2 + sta CB.Cache+S.CB.X1 + lda CB.Cache+S.CB.X2+1 + sta CB.Cache+S.CB.X1+1 + + stx CB.Cache+S.CB.X2 + sty CB.Cache+S.CB.X2+1 + + rts +*-------------------------------------- +CB.SwapY1Y2 ldx CB.Cache+S.CB.Y1 + ldy CB.Cache+S.CB.Y1+1 + + lda CB.Cache+S.CB.Y2 + sta CB.Cache+S.CB.Y1 + lda CB.Cache+S.CB.Y2+1 + sta CB.Cache+S.CB.Y1+1 + + stx CB.Cache+S.CB.Y2 + sty CB.Cache+S.CB.Y2+1 + + rts +*-------------------------------------- CB.BorderLineH lda #S.CB.CMD.HLINE sta CB.Cache+S.CB.CMD lda #S.CB.OP.SET @@ -53,12 +58,115 @@ CB.FillRectMonoA sta CB.Cache+S.CB.M rts *-------------------------------------- +CB.PullY2X2Y1X1 ldx #7 + bra CB.PullX + +CB.PullY1X1 ldx #3 + +CB.PullX >PULLA + sta CB.Cache+S.CB.X1-1,x + >PULLA + sta CB.Cache+S.CB.X1,x + dex + dex + bpl CB.PullX + + rts +**-------------------------------------- +CB.X2ToX1 ldy CB.Cache+S.CB.X2 + lda CB.Cache+S.CB.X2+1 + sty CB.Cache+S.CB.X1 + sta CB.Cache+S.CB.X1+1 + rts +*-------------------------------------- +CB.AddA2X1 clc + adc CB.Cache+S.CB.X1 + sta CB.Cache+S.CB.X1 + bcc .1 + + inc CB.Cache+S.CB.X1+1 + +.1 rts +*-------------------------------------- +CB.IncY1 inc CB.Cache+S.CB.Y1 + bne .1 + + inc CB.Cache+S.CB.Y1+1 + +.1 rts +*-------------------------------------- +CB.DecY2 lda CB.Cache+S.CB.Y2 + bne .1 + + dec CB.Cache+S.CB.Y2+1 + +.1 dec CB.Cache+S.CB.Y2 + + rts +*-------------------------------------- +CB.GetObjX1Y1 ldy #S.OBJ.X1+3 + ldx #3 + bra CB.GetObjXY +*-------------------------------------- +CB.GetObjX1Y1X2Y2 + ldy #S.OBJ.X1+7 + ldx #7 + +CB.GetObjXY lda (ZPObjPtr),y + sta CB.Cache+S.CB.X1,x + dey + dex + bpl CB.GetObjXY + + rts +*-------------------------------------- +CB.GetObjSrcWH ldy #S.OBJ.W+3 W,H + ldx #3 + +.1 lda (ZPObjPtr),y + sta CB.Cache+S.CB.SrcW,x + dey + dex + bpl .1 + + rts +*-------------------------------------- +CB.ResetSrcXY ldx #4 + +.1 stz CB.Cache+S.CB.SrcX-1,x + dex + bne .1 + + rts +*-------------------------------------- +CB.SrcWCenterH ldy #S.OBJ.W + lda (ZPObjPtr),y + sec + sbc CB.Cache+S.CB.SrcW + pha + iny + lda (ZPObjPtr),y + sbc CB.Cache+S.CB.SrcW+1 + lsr + tax + pla + ror + clc + adc CB.Cache+S.CB.X1 + sta CB.Cache+S.CB.X1 + + txa + adc CB.Cache+S.CB.X1+1 + sta CB.Cache+S.CB.X1+1 + + rts +*-------------------------------------- CB.GetBuf clc ldx hCBBuf bne .9 - >LDYAI 512 + >LDYAI 1024 >SYSCALL2 GetMem bcs .9 @@ -67,82 +175,86 @@ CB.GetBuf clc .9 rts *-------------------------------------- -CB.Cache2CBBuf - lda CB.Cache +CB.Cache2CBBufG jsr CB.ToGlobal +*-------------------------------------- +CB.Cache2CBBuf lda CB.Cache lsr tax ldy CB.CmdLen-1,x - ldx #0 - -.1 lda CB.Cache,x - sta (ZPCBBufPtr) - inc ZPCBBufPtr - bne .2 - - inc ZPCBBufPtr+1 - -.2 inx +.1 lda CB.Cache,y + sta (ZPCBBufPtr),y dey bpl .1 - - rts *-------------------------------------- -* Y,A = Target Object -*-------------------------------------- -CB.FlushBufToYA jsr CLIP.GetRect - - lda hCBBuf - beq .8 - - lda #0 - sta (ZPCBBufPtr) - - lda hCBBuf - >SYSCALL2 GetMemPtr - >STYA ZPCBBufPtr - - jsr PTR.Disable -*-------------------------------------- -.2 lda (ZPCBBufPtr) - beq .7 - - >LDYA ZPCBBufPtr - jsr CB.GetInCache A = CB.CMD - - cmp #S.CB.CMD.DRAWTEXT2 - bne .4 - - lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD - sta CB.Cache+S.CB.CMD - jsr CB.GFXWrite - bcs .9 - - jsr CLIP.CB.Cache - bcs .3 - - jsr CB.GFXWrite - -.3 lda CB.Cache+S.CB.SrcPtr - >SYSCALL2 FreeStkObj - bra .5 - -.4 jsr CLIP.CB.Cache - bcs .5 - - jsr CB.GFXWrite - -.5 lda (ZPCBBufPtr) Get Cmd +CB.BufNext lda (ZPCBBufPtr) Get Cmd lsr tax lda CB.CmdLen-1,x sec +1 adc ZPCBBufPtr sta ZPCBBufPtr - bcc .2 + bcc .1 inc ZPCBBufPtr+1 - bra .2 + +.1 rts +*-------------------------------------- +* CLIP.Rect = Target Object +*-------------------------------------- +CB.Write jsr PTR.Disable + jsr CB.GFXWriteClip +.8 jmp PTR.Enable +*-------------------------------------- +* Y,A = Target Object +*-------------------------------------- +CB.FlushBufToYA jsr CLIP.GetRect + +CB.FlushBuf ldx hCBBuf + beq .8 + + jsr PTR.Disable + + lda #0 + sta (ZPCBBufPtr) + + lda hCBBuf + >SYSCALL2 GetMemPtr + >STYA ZPCBBufPtr +*-------------------------------------- +.1 lda (ZPCBBufPtr) Get Cmd + beq .7 + + lsr + tax + ldy CB.CmdLen-1,x + +.2 lda (ZPCBBufPtr),y + sta CB.Cache,y + dey + bpl .2 + +* lda (ZPCBBufPtr) A = CB.CMD + + cmp #S.CB.CMD.DRAWTEXT2 + bne .4 + + lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD + sta CB.Cache+S.CB.CMD + ldx #0 Select CB.Cache + jsr CB.GFXWriteX Direct Write (no clip) + bcs .9 + + jsr CB.GFXWriteClip + + lda CB.Cache+S.CB.SrcPtr + >SYSCALL2 FreeStkObj + bra .5 +*-------------------------------------- +.4 jsr CB.GFXWriteClip + +.5 jsr CB.BufNext + bra .1 .7 lda hCBBuf stz hCBBuf @@ -153,55 +265,13 @@ CB.FlushBufToYA jsr CLIP.GetRect .8 clc .9 rts *-------------------------------------- -CB.GFXWritePtr jsr PTR.Disable - jsr CB.GFXWrite - jmp PTR.Enable -*-------------------------------------- -CB.GFXWrite >PUSHB WND.Screen+S.OBJ.hPARENT - >PUSHBI IOCTL.WRITE - >PUSHW L.CB.Cache - >SYSCALL2 IOCTL - rts -*-------------------------------------- -CB.SetX2Y2 lda CB.Cache+S.CB.SrcW - clc - adc CB.Cache+S.CB.X1 - pha +CB.ToGlobal lda ZPWNDPtr + ldx ZPWNDPtr+1 - lda CB.Cache+S.CB.SrcW+1 - adc CB.Cache+S.CB.X1+1 - tax - pla - bne .2 +.1 sta ZPPtr1 + stx ZPPtr1+1 - dex - -.2 dec - sta CB.Cache+S.CB.X2 - stx CB.Cache+S.CB.X2+1 - - lda CB.Cache+S.CB.SrcH - - clc - adc CB.Cache+S.CB.Y1 - pha - - lda CB.Cache+S.CB.SrcH+1 - adc CB.Cache+S.CB.Y1+1 - tax - pla - bne .3 - - dex - -.3 dec - sta CB.Cache+S.CB.Y2 - stx CB.Cache+S.CB.Y2+1 - rts -*-------------------------------------- -CB.ToGlobal >STYA ZPPtr1 - -.1 ldy #S.OBJ.X1 + ldy #S.WND.InnerX1 ldx #S.CB.X1 jsr CB.AddPtr1YtoCBX @@ -209,7 +279,7 @@ CB.ToGlobal >STYA ZPPtr1 ldx #S.CB.Y1 jsr CB.AddPtr1YtoCBX - ldy #S.OBJ.X1 + ldy #S.WND.InnerX1 ldx #S.CB.X2 jsr CB.AddPtr1YtoCBX @@ -224,9 +294,6 @@ CB.ToGlobal >STYA ZPPtr1 tax dey lda (ZPPtr1),y - - sta ZPPtr1 - stx ZPPtr1+1 bra .1 .8 clc @@ -243,6 +310,21 @@ CB.AddPtr1YtoCBX sta CB.Cache+1,x rts *-------------------------------------- +* CB.Cache -> CLIP.Cache +*-------------------------------------- +CB.GFXWriteClip jsr CLIP.CB.Cache + bcs CB.GFXWrite.9 + +CB.GFXWrite ldx #2 Select CLIP.Cache +*-------------------------------------- +* X=0:CB.Cache, X=2:CLIP.Cache +*-------------------------------------- +CB.GFXWriteX >PUSHB WND.Screen+S.OBJ.hPARENT + >PUSHBI IOCTL.WRITE + >PUSHW L.CB.Cache,x + >SYSCALL2 IOCTL +CB.GFXWrite.9 rts +*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.cb LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.CLIP.txt b/LIB/LIBGUI.S.CLIP.txt index 2d620cb3..b7a01e11 100644 --- a/LIB/LIBGUI.S.CLIP.txt +++ b/LIB/LIBGUI.S.CLIP.txt @@ -1,15 +1,36 @@ NEW AUTO 3,1 *-------------------------------------- +CLIP.GetRect >STYA .1+1 + + ldy #S.OBJ.Y2+1 + ldx #7 + +.1 lda $ffff,y + sta CLIP.Rect,x + dey + dex + bpl .1 + + rts +*-------------------------------------- * CLIPPING Functions: * In: * Target Clipping Region in CLIP.Rect * YA = Control Block * Out: -* CC : CB.Cache clipped & visible -* CS : CB.Cache invisible +* CC : CLIP.Cache clipped & visible +* CS : CLIP.Cache invisible *-------------------------------------- -CLIP.CB.Cache lda CB.Cache+S.CB.CMD +CLIP.CB.Cache ldx #S.CB + +.1 lda CB.Cache-1,x + sta CLIP.Cache-1,x + dex + bne .1 + +* lda CB.Cache+S.CB.CMD + and #$7F remove S.CB.CMD.OSD tax jmp (J.CLIP-2,x) @@ -18,66 +39,68 @@ CLIP.Point clc rts *-------------------------------------- -CLIP.HLine >LDYA CB.Cache+S.CB.Y1 +CLIP.HLine >LDYA CLIP.Cache+S.CB.Y1 >SCMPYA CLIP.Rect+S.RECT.Y2 bpl .9 - >LDYA CB.Cache+S.CB.Y1 + >LDYA CLIP.Cache+S.CB.Y1 >SCMPYA CLIP.Rect+S.RECT.Y1 bmi .9 >LDYA CLIP.Rect+S.RECT.X1 - >STYAIFGTR CB.Cache+S.CB.X1 - + >STYAIFGTR CLIP.Cache+S.CB.X1 + >LDYA CLIP.Rect+S.RECT.X2 - >STYAIFLWR CB.Cache+S.CB.X2 + >STYAIFLWR CLIP.Cache+S.CB.X2 clc rts - + .9 sec rts *-------------------------------------- -CLIP.VLine >LDYA CB.Cache+S.CB.X1 +CLIP.VLine >LDYA CLIP.Cache+S.CB.X1 >SCMPYA CLIP.Rect+S.RECT.X2 bpl .9 - >LDYA CB.Cache+S.CB.X1 + >LDYA CLIP.Cache+S.CB.X1 >SCMPYA CLIP.Rect+S.RECT.X1 - bmi .9 - >LDYA CLIP.Rect+S.RECT.Y1 - >STYAIFGTR CB.Cache+S.CB.Y1 + bpl CLIP.Y1Y2 + +* bmi .9 - >LDYA CLIP.Rect+S.RECT.Y2 - >STYAIFLWR CB.Cache+S.CB.Y2 +* >LDYA CLIP.Rect+S.RECT.Y1 +* >STYAIFGTR CLIP.Cache+S.CB.Y1 - clc - rts +* >LDYA CLIP.Rect+S.RECT.Y2 +* >STYAIFLWR CLIP.Cache+S.CB.Y2 + +* clc +* rts .9 sec - rts + rts *-------------------------------------- CLIP.Rectangle jsr CLIP.Rect.Overlap - bcs .9 + bcs CLIP.Text.RTS >LDYA CLIP.Rect+S.RECT.X1 - >STYAIFGTR CB.Cache+S.CB.X1 + >STYAIFGTR CLIP.Cache+S.CB.X1 >LDYA CLIP.Rect+S.RECT.X2 - >STYAIFLWR CB.Cache+S.CB.X2 + >STYAIFLWR CLIP.Cache+S.CB.X2 - >LDYA CLIP.Rect+S.RECT.Y1 - >STYAIFGTR CB.Cache+S.CB.Y1 +CLIP.Y1Y2 >LDYA CLIP.Rect+S.RECT.Y1 + >STYAIFGTR CLIP.Cache+S.CB.Y1 >LDYA CLIP.Rect+S.RECT.Y2 - >STYAIFLWR CB.Cache+S.CB.Y2 + >STYAIFLWR CLIP.Cache+S.CB.Y2 - clc -.9 rts +* clc +* rts *-------------------------------------- -CLIP.Text - clc +CLIP.Text clc rts CLIP.Text.9 sec @@ -85,137 +108,146 @@ CLIP.Text.RTS rts *-------------------------------------- * BitBlt : *-------------------------------------- -CLIP.BitBlt jsr CB.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1 - +CLIP.BitBlt jsr CLIP.SetX2Y2 jsr CLIP.Rect.Overlap bcs CLIP.Text.RTS - lda CLIP.Rect+S.RECT.X1 - sec - sbc CB.Cache+S.CB.X1 - sta DX + ldx #S.RECT select CLIP.Rect - lda CLIP.Rect+S.RECT.X1+1 - sbc CB.Cache+S.CB.X1+1 - sta DX+1 +CLIP.BitBltX lda CLIP.Screen+S.RECT.X1,x + sec + sbc CLIP.Cache+S.CB.X1 + sta TmpW + + lda CLIP.Screen+S.RECT.X1+1,x + sbc CLIP.Cache+S.CB.X1+1 + sta TmpW+1 bvc .1 + eor #$80 + .1 bmi .2 - lda CB.Cache+S.CB.X1 + lda CLIP.Cache+S.CB.X1 clc - adc DX - sta CB.Cache+S.CB.X1 + adc TmpW + sta CLIP.Cache+S.CB.X1 - lda CB.Cache+S.CB.X1+1 - adc DX+1 - sta CB.Cache+S.CB.X1+1 + lda CLIP.Cache+S.CB.X1+1 + adc TmpW+1 + sta CLIP.Cache+S.CB.X1+1 - lda CB.Cache+S.CB.SrcX + lda CLIP.Cache+S.CB.SrcX clc - adc DX - sta CB.Cache+S.CB.SrcX + adc TmpW + sta CLIP.Cache+S.CB.SrcX - lda CB.Cache+S.CB.SrcX+1 - adc DX+1 - sta CB.Cache+S.CB.SrcX+1 + lda CLIP.Cache+S.CB.SrcX+1 + adc TmpW+1 + sta CLIP.Cache+S.CB.SrcX+1 - lda CB.Cache+S.CB.SrcW + lda CLIP.Cache+S.CB.SrcW sec - sbc DX - sta CB.Cache+S.CB.SrcW + sbc TmpW + sta CLIP.Cache+S.CB.SrcW - lda CB.Cache+S.CB.SrcW+1 - sbc DX+1 - sta CB.Cache+S.CB.SrcW+1 + lda CLIP.Cache+S.CB.SrcW+1 + sbc TmpW+1 + sta CLIP.Cache+S.CB.SrcW+1 bcc CLIP.Text.9 - -.2 lda CB.Cache+S.CB.X2 +*-------------------------------------- +.2 lda CLIP.Cache+S.CB.X2 sec - sbc CLIP.Rect+S.RECT.X2 - sta DX + sbc CLIP.Screen+S.RECT.X2,x + sta TmpW - lda CB.Cache+S.CB.X2+1 - sbc CLIP.Rect+S.RECT.X2+1 - sta DX+1 + lda CLIP.Cache+S.CB.X2+1 + sbc CLIP.Screen+S.RECT.X2+1,x + sta TmpW+1 bvc .3 + eor #$80 + .3 bmi .4 - lda CB.Cache+S.CB.SrcW + lda CLIP.Cache+S.CB.SrcW sec - sbc DX - sta CB.Cache+S.CB.SrcW + sbc TmpW + sta CLIP.Cache+S.CB.SrcW - lda CB.Cache+S.CB.SrcW+1 - sbc DX+1 - sta CB.Cache+S.CB.SrcW+1 + lda CLIP.Cache+S.CB.SrcW+1 + sbc TmpW+1 + sta CLIP.Cache+S.CB.SrcW+1 bcc .9 - -.4 lda CLIP.Rect+S.RECT.Y1 +*-------------------------------------- +.4 lda CLIP.Screen+S.RECT.Y1,x sec - sbc CB.Cache+S.CB.Y1 - sta DX + sbc CLIP.Cache+S.CB.Y1 + sta TmpW - lda CLIP.Rect+S.RECT.Y1+1 - sbc CB.Cache+S.CB.Y1+1 - sta DX+1 + lda CLIP.Screen+S.RECT.Y1+1,x + sbc CLIP.Cache+S.CB.Y1+1 + sta TmpW+1 bvc .5 + eor #$80 + .5 bmi .6 - lda CB.Cache+S.CB.Y1 + lda CLIP.Cache+S.CB.Y1 clc - adc DX - sta CB.Cache+S.CB.Y1 + adc TmpW + sta CLIP.Cache+S.CB.Y1 - lda CB.Cache+S.CB.Y1+1 - adc DX+1 - sta CB.Cache+S.CB.Y1+1 + lda CLIP.Cache+S.CB.Y1+1 + adc TmpW+1 + sta CLIP.Cache+S.CB.Y1+1 - lda CB.Cache+S.CB.SrcY + lda CLIP.Cache+S.CB.SrcY clc - adc DX - sta CB.Cache+S.CB.SrcY + adc TmpW + sta CLIP.Cache+S.CB.SrcY - lda CB.Cache+S.CB.SrcY+1 - adc DX+1 - sta CB.Cache+S.CB.SrcY+1 + lda CLIP.Cache+S.CB.SrcY+1 + adc TmpW+1 + sta CLIP.Cache+S.CB.SrcY+1 - lda CB.Cache+S.CB.SrcH + lda CLIP.Cache+S.CB.SrcH sec - sbc DX - sta CB.Cache+S.CB.SrcH + sbc TmpW + sta CLIP.Cache+S.CB.SrcH - lda CB.Cache+S.CB.SrcH+1 - sbc DX+1 - sta CB.Cache+S.CB.SrcH+1 + lda CLIP.Cache+S.CB.SrcH+1 + sbc TmpW+1 + sta CLIP.Cache+S.CB.SrcH+1 bcc .9 - -.6 lda CB.Cache+S.CB.Y2 +*-------------------------------------- +.6 lda CLIP.Cache+S.CB.Y2 sec - sbc CLIP.Rect+S.RECT.Y2 - sta DX + sbc CLIP.Screen+S.RECT.Y2,x + sta TmpW - lda CB.Cache+S.CB.Y2+1 - sbc CLIP.Rect+S.RECT.Y2+1 - sta DX+1 + lda CLIP.Cache+S.CB.Y2+1 + sbc CLIP.Screen+S.RECT.Y2+1,x + sta TmpW+1 bvc .7 + eor #$80 + .7 bmi .8 - lda CB.Cache+S.CB.SrcH + lda CLIP.Cache+S.CB.SrcH sec - sbc DX - sta CB.Cache+S.CB.SrcH + sbc TmpW + sta CLIP.Cache+S.CB.SrcH - lda CB.Cache+S.CB.SrcH+1 - sbc DX+1 - sta CB.Cache+S.CB.SrcH+1 + lda CLIP.Cache+S.CB.SrcH+1 + sbc TmpW+1 + sta CLIP.Cache+S.CB.SrcH+1 bcc .9 .8 clc -.99 rts + rts .9 sec rts @@ -309,12 +341,12 @@ CLIP.Line jsr CLIP.Line.EncodeP1 CLIP.Line.EncodeP1 ldy #0 - lda CB.Cache+S.CB.X1 - ldx CB.Cache+S.CB.X1+1 + lda CLIP.Cache+S.CB.X1 + ldx CLIP.Cache+S.CB.X1+1 jsr CLIP.Line.EncodeX.AX - lda CB.Cache+S.CB.Y1 - ldx CB.Cache+S.CB.Y1+1 + lda CLIP.Cache+S.CB.Y1 + ldx CLIP.Cache+S.CB.Y1+1 jsr CLIP.Line.EncodeY.AX sty CLIP.Line.P1 @@ -323,12 +355,12 @@ CLIP.Line.EncodeP1 CLIP.Line.EncodeP2 ldy #0 - lda CB.Cache+S.CB.X2 - ldx CB.Cache+S.CB.X2+1 + lda CLIP.Cache+S.CB.X2 + ldx CLIP.Cache+S.CB.X2+1 jsr CLIP.Line.EncodeX.AX - lda CB.Cache+S.CB.Y2 - ldx CB.Cache+S.CB.Y2+1 + lda CLIP.Cache+S.CB.Y2 + ldx CLIP.Cache+S.CB.Y2+1 jsr CLIP.Line.EncodeY.AX sty CLIP.Line.P2 @@ -340,11 +372,11 @@ CLIP.Line.EncodeX.AX bpl .1 pla - + tya ora #CLIP.Line.LEFT tay - + rts .1 pla @@ -379,20 +411,52 @@ CLIP.Line.EncodeY.AX .8 rts *-------------------------------------- +CLIP.SetX2Y2 ldx CLIP.Cache+S.CB.SrcW+1 + lda CLIP.Cache+S.CB.SrcW + bne .3 + + dex + +.3 dec + clc + adc CLIP.Cache+S.CB.X1 + sta CLIP.Cache+S.CB.X2 + + txa + adc CLIP.Cache+S.CB.X1+1 + sta CLIP.Cache+S.CB.X2+1 + + ldx CLIP.Cache+S.CB.SrcH+1 + lda CLIP.Cache+S.CB.SrcH + bne .4 + + dex + +.4 dec + clc + adc CLIP.Cache+S.CB.Y1 + sta CLIP.Cache+S.CB.Y2 + + txa + adc CLIP.Cache+S.CB.Y1+1 + sta CLIP.Cache+S.CB.Y2+1 + + rts +*-------------------------------------- CLIP.Rect.Overlap - >LDYA CB.Cache+S.CB.X1 + >LDYA CLIP.Cache+S.CB.X1 >SCMPYA CLIP.Rect+S.RECT.X2 bpl .9 - >LDYA CB.Cache+S.CB.X2 + >LDYA CLIP.Cache+S.CB.X2 >SCMPYA CLIP.Rect+S.RECT.X1 bmi .9 - >LDYA CB.Cache+S.CB.Y1 + >LDYA CLIP.Cache+S.CB.Y1 >SCMPYA CLIP.Rect+S.RECT.Y2 bpl .9 - >LDYA CB.Cache+S.CB.Y2 + >LDYA CLIP.Cache+S.CB.Y2 >SCMPYA CLIP.Rect+S.RECT.Y1 bmi .9 @@ -402,19 +466,6 @@ CLIP.Rect.Overlap .9 sec rts *-------------------------------------- -CLIP.GetRect >STYA .1+1 - - ldy #S.OBJ.Y2+1 - ldx #7 - -.1 lda $ffff,y - sta CLIP.Rect,x - dey - dex - bpl .1 - - rts -*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.clip LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.DRAW.txt b/LIB/LIBGUI.S.DRAW.txt index 4e411e02..f4c21999 100644 --- a/LIB/LIBGUI.S.DRAW.txt +++ b/LIB/LIBGUI.S.DRAW.txt @@ -3,13 +3,16 @@ NEW *-------------------------------------- * drawline(short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int X2) *-------------------------------------- -DRAW.Line jsr DRAW.PullY2X2Y1X1 +DRAW.Line jsr CB.PullY2X2Y1X1 >PULLB CB.Cache+S.CB.COLOR >PULLB CB.Cache+S.CB.OP - - jsr DRAW.PullInnerWND - + + jsr OBJ.PullHWND get dest window at ZPWNDPtr + jsr WND.GetInnerInClip + + jsr CB.ToGlobal + lda CB.Cache+S.CB.X2 sec sbc CB.Cache+S.CB.X1 @@ -23,7 +26,15 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1 ora DX bne .2 DX > 0... - lda #S.CB.CMD.VLINE DX=0 : VLINE Y1,Y2 At X1 + ldx CB.Cache+S.CB.Y2 + cpx CB.Cache+S.CB.Y1 + lda CB.Cache+S.CB.Y2+1 + sbc CB.Cache+S.CB.Y1+1 + bcs .17 + + >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2 + +.17 lda #S.CB.CMD.VLINE DX=0 : VLINE Y1,Y2 At X1 bra .20 *-------------------------------------- .1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2 @@ -51,10 +62,7 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1 .20 sta CB.Cache+S.CB.CMD - jsr CLIP.CB.Cache - bcs .8 - - jmp CB.GFXWrite + jmp CB.Write .8 clc rts @@ -63,7 +71,7 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1 lda #$ff sta IY set IY=-1 -.4 +.4 * jsr CLIP.Line * bcs .8 @@ -71,7 +79,8 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1 lda #S.CB.CMD.SETPIXEL sta CB.Cache+S.CB.CMD - jsr CB.GFXWrite + ldx #0 Select CB.Cache + jsr CB.GFXWriteX lda DX sec sbc DY @@ -107,7 +116,8 @@ DRAW.Line.IncXY lda DX DX=DY clc adc IY sta CB.Cache+S.CB.Y1 - jsr CB.GFXWrite + ldx #0 Select CB.Cache + jsr CB.GFXWriteX bra .1 .8 jmp PTR.Enable @@ -183,7 +193,8 @@ DRAW.Line.IncY lda DY clc adc IY sta CB.Cache+S.CB.Y1 - jsr CB.GFXWrite + ldx #0 Select CB.Cache + jsr CB.GFXWriteX bra .1 .8 jmp PTR.Enable @@ -261,112 +272,138 @@ DRAW.Line.IncX lda DX inc CB.Cache+S.CB.X1+1 -.6 jsr CB.GFXWrite +.6 ldx #0 Select CB.Cache + jsr CB.GFXWriteX bra .1 .8 jmp PTR.Enable *-------------------------------------- * fill (short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int Y2) *-------------------------------------- -DRAW.Fill jsr DRAW.PullY2X2Y1X1 +DRAW.Fill jsr CB.PullY2X2Y1X1 >PULLB CB.Cache+S.CB.COLOR >PULLB CB.Cache+S.CB.OP + + jsr OBJ.PullHWND get dest window at ZPWNDPtr + jsr WND.GetInnerInClip - jsr DRAW.PullInnerWND + jsr CB.ToGlobal lda #S.CB.CMD.FILLRECT sta CB.Cache+S.CB.CMD - jsr CLIP.CB.Cache - bcs .8 - - jmp CB.GFXWritePtr - -.8 clc - rts + jmp CB.Write *-------------------------------------- -* drawbitmap (short int hWND, short int OP, short int M, S.BM *bitmap, int X1, int Y1) +* drawBitmap (short int hWND, short int OP, short int M, S.BM *bitmap, int X1, int Y1) *-------------------------------------- -DRAW.BitMap lda #S.CB.CMD.BITBLT - jsr CB.InitCacheA - - jsr DRAW.PullY1X1 - +DRAW.BitMap jsr CB.PullY1X1 + >PULLW CB.Cache+S.CB.SrcPtr - + >PULLB CB.Cache+S.CB.M >PULLB CB.Cache+S.CB.OP - - jsr DRAW.PullInnerWND - - jsr CLIP.CB.Cache - bcs .8 - jmp CB.GFXWritePtr + jsr OBJ.PullHWND get dest window at ZPWNDPtr + jsr WND.GetInnerInClip + + jsr CB.ToGlobal -.8 clc - rts + lda #S.CB.CMD.BITBLT + sta CB.Cache+S.CB.CMD + + jsr CB.ResetSrcXY + + jmp CB.Write *-------------------------------------- * drawtext (short int hWND, short int OP, short int hFONT, int X1, int Y1, char *str) *-------------------------------------- -DRAW.Text lda #S.CB.CMD.DRAWTEXT2 - jsr CB.InitCacheA - - >PULLW CB.Cache+S.CB.TxtPtr - - jsr DRAW.PullY1X1 - +DRAW.Text >PULLW CB.Cache+S.CB.TxtPtr + + jsr CB.PullY1X1 + >PULLB CB.Cache+S.CB.hFont >PULLB CB.Cache+S.CB.OP - - jsr DRAW.PullInnerWND - - jsr CLIP.CB.Cache - bcs .8 - jmp CB.GFXWritePtr - -.8 clc - rts -*-------------------------------------- -DRAW.PullInnerWND jsr OBJ.PullHWND get dest window at ZPWNDPtr + jsr WND.GetInnerInClip + + jsr CB.ToGlobal - jsr DRAW.GetInnerWND get inners in CLIP.Rect + lda #S.CB.CMD.DRAWTEXT2 + sta CB.Cache+S.CB.CMD - >LDYA ZPWNDPtr - jmp CB.ToGlobal set CB.Cache to global coord. + jmp CB.Write *-------------------------------------- * private *-------------------------------------- -DRAW.xBM >LDYA L.BMs,x -DRAW.yaBM >STYA ZPBMPtr +DRAW.BordersAtX stx IY -DRAW.BM lda #S.CB.CMD.BITBLT + jsr CB.BorderLineH + + ldy #S.OBJ.X1 + + lda (ZPObjPtr),y + sec + sbc IY + sta CB.Cache+S.CB.X1 + iny + lda (ZPObjPtr),y + sbc #0 + sta CB.Cache+S.CB.X1+1 + + iny #S.OBJ.Y1 + + lda (ZPObjPtr),y + sec + sbc IY + sta CB.Cache+S.CB.Y1 + iny + lda (ZPObjPtr),y + sbc #0 + sta CB.Cache+S.CB.Y1+1 + + iny #S.OBJ.X2 + + lda (ZPObjPtr),y + clc + adc IY + sta CB.Cache+S.CB.X2 + iny + lda (ZPObjPtr),y + adc #0 + sta CB.Cache+S.CB.X2+1 top: X1,X2 at Y1 + + iny #S.OBJ.Y2 + + lda (ZPObjPtr),y + clc + adc IY + sta CB.Cache+S.CB.Y2 + iny + lda (ZPObjPtr),y + adc #0 + sta CB.Cache+S.CB.Y2+1 + + jsr CB.Cache2CBBufG + + jsr CB.SwapY1Y2 + + jsr CB.Cache2CBBuf bottom X1,X2 at Y2 + + lda #S.CB.CMD.VLINE sta CB.Cache+S.CB.CMD - lda #S.CB.OP.MASK+S.CB.OP.ORA+S.CB.OP.COLOR - sta CB.Cache+S.CB.OP + jsr CB.SwapY1Y2 + + jsr CB.Cache2CBBuf left Y1,Y2 at X1 - lda #S.CB.M.C16 - sta CB.Cache+S.CB.M - - 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 + jsr CB.SwapX1X2 + + jmp CB.Cache2CBBuf right X2,Y1,X2,Y2 +*-------------------------------------- +DRAW.xBM >LDYA L.BMs,x +DRAW.yaBM jsr BM.YA2CB.cache jmp CB.Cache2CBBuf *-------------------------------------- @@ -376,68 +413,16 @@ DRAW.YAText >STYA CB.Cache+S.CB.TxtPtr lda #S.CB.CMD.DRAWTEXT2 sta CB.Cache+S.CB.CMD - lda #0 - ror CS = inverse - eor #S.CB.OP.INVERSE - ora #S.CB.OP.SET - -* lda #S.CB.OP.XOR + lda #S.CB.OP.XOR sta CB.Cache+S.CB.OP lda #S.CB.M.MONO sta CB.Cache+S.CB.M + jsr CB.ResetSrcXY + jmp CB.Cache2CBBuf *-------------------------------------- -DRAW.PullY2X2Y1X1 - ldx #7 - bra DRAW.PullX - -DRAW.PullY1X1 ldx #3 - -DRAW.PullX >PULLA - sta CB.Cache+S.CB.X1-1,x - >PULLA - sta CB.Cache+S.CB.X1,x - dex - dex - bpl DRAW.PullX - - rts -*-------------------------------------- -DRAW.GetInnerWND - ldy #S.OBJ.X1 - - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.X1 - iny - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.X1+1 - - ldy #S.WND.InnerY1 - - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.Y1 - iny - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.Y1+1 - - ldy #S.WND.InnerX2 - - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.X2 - iny - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.X2+1 - - ldy #S.WND.InnerY2 - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.Y2 - iny - lda (ZPWNDPtr),y - sta CLIP.Rect+S.RECT.Y2+1 - rts -*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.draw LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.FON.txt b/LIB/LIBGUI.S.FON.txt index 7e2d36ad..3b97efcd 100644 --- a/LIB/LIBGUI.S.FON.txt +++ b/LIB/LIBGUI.S.FON.txt @@ -15,10 +15,8 @@ FON.Init >LDYA L.SYSX7 * ldy #S.FON.PixH * >SYSCALL2 GetStkObjProp + lda #7 - dec - sta SYSFON.Hm1 - inc sta SYSFON.H inc sta SYSFON.Hp1 @@ -34,12 +32,152 @@ FON.Init >LDYA L.SYSX7 >SYSCALL LoadStkObj rts *-------------------------------------- -FON.GetTextSize >STYA CB.CACHE+S.CB.TxtPtr - stx CB.CACHE+S.CB.hFont - +FON.GetTextSize >STYA CB.Cache+S.CB.TxtPtr + stx CB.Cache+S.CB.hFont + lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD - sta CB.CACHE+S.CB.CMD - jmp CB.GFXWrite + sta CB.Cache+S.CB.CMD + ldx #0 Select CB.Cache + jmp CB.GFXWriteX +*-------------------------------------- +FON.GetTextSize2 + >STYA ZPPtr1 + stx CB.Cache+S.CB.hFont + + lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD + sta CB.Cache+S.CB.CMD + + jsr FON.GetBuf + bcs .9 + + stz DX + stz DX+1 + stz DY + stz DY+1 + +.1 jsr FON.GetLine + beq .8 + + ldx #0 Select CB.Cache + jsr CB.GFXWriteX + + ldx CB.Cache+S.CB.SrcW + cpx DX + lda CB.Cache+S.CB.SrcW+1 + tay + sbc DX+1 + bcc .2 + + stx DX + sty DX+1 + +.2 lda CB.Cache+S.CB.SrcH + clc + adc DY + sta DY + + lda CB.Cache+S.CB.SrcH+1 + adc DY+1 + sta DY+1 + + lda (ZPPtr1) + bne .1 + +.8 >LDYA ZPPtr2 + >SYSCALL2 Free + +.9 rts +*-------------------------------------- +FON.DrawText2 >STYA ZPPtr1 + stx CB.Cache+S.CB.hFont + + lda #S.CB.OP.XOR + sta CB.Cache+S.CB.OP + + lda #S.CB.M.MONO + sta CB.Cache+S.CB.M + + jsr CB.ResetSrcXY + + jsr FON.GetBuf + bcs .9 + + jsr PTR.Disable +* >DEBUG +.1 jsr FON.GetLine + beq .8 + + lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD + sta CB.Cache+S.CB.CMD + + ldx #0 + jsr CB.GFXWriteX + bcs .9 + +* ldx #0 +* jsr CB.GFXWriteX Clip + + jsr CB.GFXWriteClip + + lda CB.Cache+S.CB.SrcPtr + >SYSCALL2 FreeStkObj + + lda CB.Cache+S.CB.SrcH + clc + adc CB.Cache+S.CB.Y1 + sta CB.Cache+S.CB.Y1 + bcc .1 + + inc CB.Cache+S.CB.Y1+1 + + bra .1 + +.8 >LDYA ZPPtr2 + >SYSCALL2 Free + + jmp PTR.Enable + +.9 rts +*-------------------------------------- +FON.GetBuf >LDYAI 256 + >SYSCALL2 GetMem + bcs .9 + + >STYA ZPPtr2 + >STYA CB.Cache+S.CB.TxtPtr + +.9 rts +*-------------------------------------- +FON.GetLine ldy #0 + +.1 lda (ZPPtr1) + beq .8 + +.2 cmp #C.SPACE + bcs .3 + + eor #C.CR + beq .7 + bne .4 + +.3 sta (ZPPtr2),y + iny + +.4 inc ZPPtr1 + bne .1 + + inc ZPPtr1+1 + bra .1 + +.7 inc ZPPtr1 + bne .8 + + inc ZPPtr1+1 + +.8 sta (ZPPtr2),y + tya set Z flag + + rts *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.fon diff --git a/LIB/LIBGUI.S.LABEL.txt b/LIB/LIBGUI.S.LABEL.txt new file mode 100644 index 00000000..03a3988d --- /dev/null +++ b/LIB/LIBGUI.S.LABEL.txt @@ -0,0 +1,80 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* NewLabel(HWND, pTEXT, wX, wY) +*-------------------------------------- +LABEL.New >PULLW DY + >PULLW DX + >PULLW ZPPtr1 + jsr OBJ.PullHWND + +LABEL.New.I lda #S.OBJ.T.LABEL + + jsr OBJ.New + bcs .9 + + phx hOBJ + + jsr OBJ.SetDXDYX1Y1 + + ldy #S.LABEL.pTEXT + lda ZPPtr1 + sta (ZPObjPtr),y + pha + iny + lda ZPPtr1+1 + sta (ZPObjPtr),y + ply + + ldx hSYSFON + jsr FON.GetTextSize2 + + ldx #3 + ldy #S.OBJ.W+3 + +.1 lda DX,x + sta (ZPObjPtr),y + dey + dex + bpl .1 + + >LDYA ZPObjPtr + jsr OBJ.SetX2Y2 + + jsr WND.AddChild.I + + pla hOBJ + + clc + +.9 rts +*-------------------------------------- +LABEL.Enter +LABEL.Leave clc + rts +*-------------------------------------- +LABEL.fPaint jsr CB.GetBuf + bcs .9 + + lda #C.WHITE + jsr CB.FillRectMonoA + + jsr CB.GetObjX1Y1X2Y2 + + jsr CB.Cache2CBBufG + + jsr CB.FlushBuf + + ldy #S.LABEL.pTEXT + jsr OBJ.GetPropAtY + ldx hSYSFON + jmp FON.DrawText2 + +.9 rts +*-------------------------------------- + +*-------------------------------------- +MAN +SAVE usr/src/lib/libgui.s.label +LOAD usr/src/lib/libgui.s +ASM diff --git a/LIB/LIBGUI.S.MBAR.txt b/LIB/LIBGUI.S.MBAR.txt index 4edb94bf..d414af1b 100644 --- a/LIB/LIBGUI.S.MBAR.txt +++ b/LIB/LIBGUI.S.MBAR.txt @@ -4,30 +4,27 @@ NEW * Y,A = MBAR definition *-------------------------------------- MBAR.New >STYA ZPPtr1 MBAR definition - >STYA ZPObjPtr for pass #2 + >STYA ZPPtr2 for pass #2 jsr MBAR.GetSize >SYSCALL2 GetMem bcs .9 - >STYA ZPMENUPtr + >STYA ZPObjPtr phx hMBAR lda #S.OBJ.T.MBAR - sta (ZPMENUPtr) S.OBJ.T + sta (ZPObjPtr) S.OBJ.T lda #0 ldy #S.MBAR.Items-1 -.1 sta (ZPMENUPtr),y +.1 sta (ZPObjPtr),y dey bne .1 - >LDYA ZPObjPtr - >STYA ZPPtr1 MENU definition - jsr MBAR.GetData pla hMBAR @@ -69,18 +66,13 @@ MBAR.GetSize lda #S.MBAR.Items+1 Ending\0 .8 >LDYA Counter rts *-------------------------------------- -* ZPPtr1 = defintion -* ZPMENUPtr = DstBuf +* ZPPtr2 = defintion +* ZPObjPtr = DstMBar +* ZPPtr1 = DstMBItem *-------------------------------------- -MBAR.GetData lda ZPMENUPtr - clc - adc #S.MBAR.Items - sta ZPMENUPtr - bcc .1 +MBAR.GetData jsr MBAR.GetMBItems - inc ZPMENUPtr+1 - -.1 lda (ZPPtr1) +.1 lda (ZPPtr2) beq .8 lda #S.MBITEM.T.SUBMENU @@ -89,11 +81,11 @@ MBAR.GetData lda ZPMENUPtr lda #0 S.MBITEM.S jsr MBAR.AddByte - >LDYA ZPPtr1 pTEXT + >LDYA ZPPtr2 pTEXT ldx hSYSFON jsr FON.GetTextSize - lda PREFS.MBarXMargin + lda PREFS.XMargin asl x2 clc adc CB.CACHE+S.CB.SrcW @@ -103,23 +95,23 @@ MBAR.GetData lda ZPMENUPtr adc CB.CACHE+S.CB.SrcW+1 jsr MBAR.AddWord S.MBITEM.W - >LDYA ZPPtr1 pTEXT + >LDYA ZPPtr2 pTEXT jsr MBAR.AddWord - jsr SkipStrZPtr1 skip "TEXT\0" + jsr SkipStrZPtr2 skip "TEXT\0" - lda (ZPPtr1) + lda (ZPPtr2) jsr MBAR.AddByte pMENU ldy #1 - lda (ZPPtr1),y + lda (ZPPtr2),y jsr MBAR.AddByte pMENU+1 lda #2 - jsr SkipAPtr1 stkip pMENU + jsr SkipAPtr2 stkip pMENU bra .1 -.8 sta (ZPMENUPtr) +.8 sta (ZPPtr1) rts *-------------------------------------- MBAR.AddWord pha @@ -128,11 +120,11 @@ MBAR.AddWord pha jsr MBAR.AddByte pla -MBAR.AddByte sta (ZPMENUPtr) - inc ZPMENUPtr +MBAR.AddByte sta (ZPPtr1) + inc ZPPtr1 bne .8 - inc ZPMENUPtr+1 + inc ZPPtr1+1 .8 rts *-------------------------------------- @@ -142,7 +134,7 @@ MBAR.AddByte sta (ZPMENUPtr) MBAR.Enter ldy #S.WND.pMBAR lda (ZPWNDPtr),y >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr pMBAR + >STYA ZPObjPtr pMBAR stz ZPPtr2 stz ZPPtr2+1 @@ -156,7 +148,7 @@ MBAR.Enter ldy #S.WND.pMBAR .1 lda (ZPPtr1) beq .3 - jsr MBAR.SetX2 + jsr MBAR.SetX2 set X2 = X1 + W - 1 lda MSG+S.MSG.X1 cmp CB.Cache+S.CB.X1 @@ -187,7 +179,11 @@ MBAR.Enter ldy #S.WND.pMBAR .8 clc .9 rts *-------------------------------------- -* ZPMENUPtr = MBAR +MBAR.Leave clc + rts +*-------------------------------------- +* ZPWNDPtr parent WND +* ZPObjPtr = MBAR * ZPPtr2 = Item to activate *-------------------------------------- MBAR.Reset stz ZPPtr2 @@ -207,8 +203,8 @@ MBAR.Set jsr MENU.DestroyAll .4 lda (ZPPtr1) beq .7 - jsr MBAR.SetX2 set X2 = X1 + W - + jsr MBAR.SetX2 set X2 = X1 + W - 1 + ldy #S.MBITEM.S lda (ZPPtr1),y bmi .5 @@ -235,8 +231,7 @@ MBAR.Set jsr MENU.DestroyAll .6 jsr MBAR.NextMBItem set X1 = X2 bra .4 -.7 >LDYA L.WND.Screen - jsr CB.FlushBufToYA +.7 jsr CB.FlushBuf bcs .9 >LDYA Counter @@ -266,18 +261,21 @@ MBAR.Set jsr MENU.DestroyAll * ZPWNDPtr = parent WND *-------------------------------------- MBAR.Draw >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr pMBAR + >STYA ZPObjPtr pMBAR ldy #S.OBJ.X1 ldx #S.CB.X1 jsr CB.GetWndYCacheX + jsr CB.GetBuf + bcs .9 + jsr MBAR.GetMBItems .1 lda (ZPPtr1) beq .8 - jsr MBAR.SetX2 set X2 = X1 + W + jsr MBAR.SetX2 set X2 = X1 + W - 1 jsr MBAR.DrawMBItem bcs .9 @@ -285,10 +283,7 @@ MBAR.Draw >SYSCALL2 GetMemPtr jsr MBAR.NextMBItem bra .1 -.8 lda CB.Cache+S.CB.X2 - sta CB.Cache+S.CB.X1 - lda CB.Cache+S.CB.X2+1 - sta CB.Cache+S.CB.X1+1 +.8 jsr CB.X2ToX1 ldy #S.OBJ.X2 ldx #S.CB.X2 @@ -299,7 +294,9 @@ MBAR.Draw >SYSCALL2 GetMemPtr lda PREFS.MBarColor jsr CB.FillRectMonoA - jmp CB.Cache2CBBuf + jsr CB.Cache2CBBuf + + jmp CB.FlushBuf .9 rts *-------------------------------------- @@ -318,22 +315,10 @@ MBAR.DrawMBItem ldy #S.MBITEM.S jsr CB.Cache2CBBuf - lda PREFS.MBarXMargin - clc - adc CB.Cache+S.CB.X1 - sta CB.Cache+S.CB.X1 - bcc .10 + lda PREFS.XMargin + jsr CB.AddA2X1 - inc CB.Cache+S.CB.X1+1 - -.10 inc CB.Cache+S.CB.Y1 - bne .11 - - inc CB.Cache+S.CB.Y1+1 - -.11 ldy #S.MBITEM.S - lda (ZPPtr1),y - asl + jsr CB.IncY1 ldy #S.MBITEM.pTEXT lda (ZPPtr1),y @@ -342,56 +327,52 @@ MBAR.DrawMBItem ldy #S.MBITEM.S lda (ZPPtr1),y ply ldx hSYSFON - jsr DRAW.YAText - - jmp CB.Cache2CBBuf + jmp DRAW.YAText *-------------------------------------- -MBAR.GetMBItems lda ZPMENUPtr +MBAR.GetMBItems lda ZPObjPtr clc adc #S.MBAR.Items sta ZPPtr1 - lda ZPMENUPtr+1 + lda ZPObjPtr+1 adc /S.MBAR.Items sta ZPPtr1+1 rts *-------------------------------------- -MBAR.NextMBItem lda CB.Cache+S.CB.X2 - sta CB.Cache+S.CB.X1 - lda CB.Cache+S.CB.X2+1 - sta CB.Cache+S.CB.X1+1 +MBAR.NextMBItem jsr CB.X2ToX1 lda #S.MBITEM jmp SkipAPtr1 *-------------------------------------- -MBAR.SetX2 lda CB.Cache+S.CB.X1 +MBAR.SetX2 ldy #S.MBITEM.W + lda (ZPPtr1),y clc - ldy #S.MBITEM.W - adc (ZPPtr1),y - sta CB.Cache+S.CB.X2 - - lda CB.Cache+S.CB.X1+1 + adc CB.Cache+S.CB.X1 + pha + iny - adc (ZPPtr1),y + lda (ZPPtr1),y + adc CB.Cache+S.CB.X1+1 + + ply + bne .1 + + dec + +.1 dey + + sty CB.Cache+S.CB.X2 sta CB.Cache+S.CB.X2+1 rts *-------------------------------------- MBAR.SetY1Y2 ldy #S.WND.MBarY1 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y1 - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y1+1 + ldx #S.CB.Y1 + jsr CB.GetWndYCacheX ldy #S.WND.MBarY2 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y2 - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y2+1 - - rts + ldx #S.CB.Y2 + jmp CB.GetWndYCacheX *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.mbar diff --git a/LIB/LIBGUI.S.MBOX.txt b/LIB/LIBGUI.S.MBOX.txt index 5a3101f5..9a41851d 100644 --- a/LIB/LIBGUI.S.MBOX.txt +++ b/LIB/LIBGUI.S.MBOX.txt @@ -1,23 +1,23 @@ NEW AUTO 3,1 *-------------------------------------- -* idButton MsgBox(pTITLE, pTEXT, pBM, idButtons) - -* guiNewWnd(sFlags, iX1, iY1, iW, iH) +* MsgBox(pTITLE, pBM, pTEXT, idButtons) *-------------------------------------- MBOX.MsgBox >LDYAI 360 >STYA IE - - >LDYAI 80 + + >LDYAI 70 >STYA INE - + lda WND.Desktop+S.OBJ.W sec sbc IE + and #$F8 sta DX + lda WND.Desktop+S.OBJ.W+1 sbc IE+1 - lsr + lsr sta DX+1 ror DX @@ -27,7 +27,7 @@ MBOX.MsgBox >LDYAI 360 sta DY lda WND.Desktop+S.OBJ.H+1 sbc INE+1 - lsr + lsr sta DY+1 ror DY @@ -38,13 +38,14 @@ MBOX.MsgBox >LDYAI 360 >PUSHW INE jsr WND.New bcs .9 - - pha - + + sta WND.hWND + jsr OBJ.GetHWNDA for childs later.... + ldy #S.WND.BGCOLOR lda #C.WHITE sta (ZPObjPtr),y - + ldy #6 lda (pStack),y tax @@ -52,51 +53,93 @@ MBOX.MsgBox >LDYAI 360 lda (pStack),y ldy #S.WND.pTITLE jsr OBJ.SetAXAtY - - pla - jsr WND.Show - bcs .9 - - ldy #2 pBM + ldy #4 pBM lda (pStack),y - tax + sta ZPBMPtr+1 dey lda (pStack),y - jsr MBOX.DrawBM - + sta ZPBMPtr + + lda #16 + sta DX + stz DX+1 + lda #20 + sta DY + stz DY+1 + jsr BITMAP.New.I + bcs .9 + ldy #2 pTEXT + lda (pStack),y + sta ZPPtr1+1 + dey + lda (pStack),y + sta ZPPtr1 + lda #60 + sta DX +* stz DX+1 +* lda #30 +* sta DY +* stz DY+1 + jsr LABEL.New.I + bcs .9 + + jsr MBOX.AddButtons + bcs .9 + +.8 lda WND.hWND + jsr WND.Show + .9 >POP 7 rts *-------------------------------------- -MBOX.DrawBM cpx #0 - bne .1 +MBOX.AddButtons lda #360-5-60 + sta D + lda /360-5-60 + sta D+1 - tax - >LDYA L.BMs,x + stz IY + +.1 lda (pStack) + beq .8 -.1 >STYA ZPBMPtr + lsr + sta (pStack) + bcc .7 - jsr CB.GetBuf + jsr MBOX.AddButton bcs .9 - lda #28 - sta CB.Cache+S.CB.X1 - stz CB.Cache+S.CB.X1+1 - sta CB.Cache+S.CB.Y1 - stz CB.Cache+S.CB.Y1+1 - - jsr DRAW.BM -* >DEBUG -* >LDYA ZPWNDPtr - >LDYA L.WND.Desktop - jmp CB.FlushBufToYA + lda D + sec + sbc #55 + sta D + bcs .7 -.9 rts + dec D+1 + +.7 inc IY + inc IY + bra .1 + +.8 clc +.9 rts *-------------------------------------- +MBOX.AddButton >PUSHB WND.hWND + >PUSHBI 0 flags + >PUSHWI 50 w + >PUSHWZ pIcon + ldx IY + >PUSHW L.BUT.Labels,x pText + >PUSHWZ keymod/key + >PUSHWZ id + >PUSHW D X + >PUSHWI 45 Y + jmp BUT.New *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.mbox diff --git a/LIB/LIBGUI.S.MENU.txt b/LIB/LIBGUI.S.MENU.txt index 37eabc5a..c32c2914 100644 --- a/LIB/LIBGUI.S.MENU.txt +++ b/LIB/LIBGUI.S.MENU.txt @@ -8,7 +8,7 @@ MENU.New >PULLW DY >PULLYA MENU.New.I >STYA ZPPtr1 MENU definition - >STYA ZPObjPtr for pass #2 + >STYA ZPPtr2 for pass #2 ldx MENU.Stack.Cnt cpx #MENU.MAX @@ -18,42 +18,31 @@ MENU.New.I >STYA ZPPtr1 MENU definition >SYSCALL2 GetMem bcs .99 - >STYA ZPMENUPtr + >STYA ZPObjPtr txa hMenu ldx MENU.Stack.Cnt sta MENU.Stack,x lda #S.OBJ.T.MENU - sta (ZPMENUPtr) S.OBJ.T + sta (ZPObjPtr) S.OBJ.T lda #0 ldy #S.MENU.Items-1 -.1 sta (ZPMENUPtr),y +.1 sta (ZPObjPtr),y dey bne .1 - ldx #3 - ldy #S.OBJ.X1+3 + lda #S.OBJ.F.BORDER + ldy #S.OBJ.F + sta (ZPObjPtr),y -.2 lda DX,x - sta (ZPMENUPtr),y - dey - dex - bpl .2 - - >LDYA ZPObjPtr - >STYA ZPPtr1 MENU definition + jsr OBJ.SetDXDYX1Y1 jsr MENU.GetData - ldx MENU.Stack.Cnt - lda MENU.Stack,x - >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr - jsr MENU.SetMenuSizePos ldx MENU.Stack.Cnt @@ -111,99 +100,88 @@ MENU.GetSize lda #S.MENU.Items+1 Ending\0 .8 >LDYA Counter rts *-------------------------------------- -* ZPPtr1 = defintion -* ZPMENUPtr = DstBuf +* ZPPtr2 = defintion +* ZPObjPtr = DstMenu +* ZPPtr1 = DstMItem *-------------------------------------- -MENU.GetData lda ZPMENUPtr - clc - adc #S.MENU.Items - sta ZPMENUPtr - bcc .1 +MENU.GetData jsr MENU.GetMItems - inc ZPMENUPtr+1 - -.1 lda (ZPPtr1) - sta (ZPMENUPtr) +.1 lda (ZPPtr2) + sta (ZPPtr1) beq .8 cmp #S.MITEM.T.SEP bne .2 - inc ZPPtr1 skip 1 byte + inc ZPPtr2 skip 1 byte bne .5 - inc ZPPtr1+1 + inc ZPPtr2+1 bra .5 *-------------------------------------- .2 cmp #S.MITEM.T.ITEM bne .3 ldy #1 T+ID+KEMOD+KEY+pICON+"text" - lda (ZPPtr1),y + lda (ZPPtr2),y ldy #S.MITEM.ID - sta (ZPMENUPtr),y + sta (ZPPtr1),y ldy #2 - lda (ZPPtr1),y + lda (ZPPtr2),y tax iny - lda (ZPPtr1),y + lda (ZPPtr2),y ldy #S.MITEM.KEYMOD+1 - sta (ZPMENUPtr),y + sta (ZPPtr1),y dey KEY txa - sta (ZPMENUPtr),y + sta (ZPPtr1),y lda #4 bra .4 skip 4 bytes *-------------------------------------- .3 ldy #1 skip T+pMENU+pICON+"text" - lda (ZPPtr1),y + lda (ZPPtr2),y tax iny - lda (ZPPtr1),y + lda (ZPPtr2),y ldy #S.MITEM.pMENU+1 - sta (ZPMENUPtr),y + sta (ZPPtr1),y dey txa - sta (ZPMENUPtr),y + sta (ZPPtr1),y lda #3 skip 3 bytes -.4 jsr SkipAPtr1 +.4 jsr SkipAPtr2 ldy #1 - lda (ZPPtr1),y + lda (ZPPtr2),y ldy #S.MITEM.pICON+1 - sta (ZPMENUPtr),y + sta (ZPPtr1),y dey - lda (ZPPtr1) - sta (ZPMENUPtr),y + lda (ZPPtr2) + sta (ZPPtr1),y lda #2 skip pICON - jsr SkipAPtr1 + jsr SkipAPtr2 ldy #S.MITEM.pTEXT - lda ZPPtr1 - sta (ZPMENUPtr),y + lda ZPPtr2 + sta (ZPPtr1),y iny - lda ZPPtr1+1 - sta (ZPMENUPtr),y + lda ZPPtr2+1 + sta (ZPPtr1),y - jsr SkipStrZPtr1 skip "TEXT\0" + jsr SkipStrZPtr2 skip "TEXT\0" ldy #S.MITEM.S lda #0 - sta (ZPMENUPtr),y + sta (ZPPtr1),y -.5 lda ZPMENUPtr - clc - adc #S.MITEM - sta ZPMENUPtr - bcc .1 - - inc ZPMENUPtr+1 +.5 jsr MENU.NextMItem bra .1 .8 clc @@ -234,15 +212,15 @@ MENU.SetMenuSizePos .2 jsr MENU.NextMItemDY bra .1 - -.3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu) +*-------------------------------------- +.3 lda #8+8 1px Border+7 (Checked) +7 (SubMenu)+1px Border clc adc IY Icon W sta DX stz DX+1 lda DX - sec 1px sep + clc adc IE Max Text W sta DX @@ -251,55 +229,56 @@ MENU.SetMenuSizePos sta DX+1 lda DX - sec 1px sep + clc adc INE Max Mod-Key W sta DX - bcc .4 - inc DX+1 + lda DX+1 + adc INE+1 + sta DX+1 -.4 ldy #S.OBJ.W - - sta (ZPMENUPtr),y + ldy #S.OBJ.W + lda DX + sta (ZPObjPtr),y iny lda DX+1 - sta (ZPMENUPtr),y + sta (ZPObjPtr),y iny #S.OBJ.H lda DY - sta (ZPMENUPtr),y + sta (ZPObjPtr),y iny lda DY+1 - sta (ZPMENUPtr),y + sta (ZPObjPtr),y ldy #S.MENU.iW lda IY - sta (ZPMENUPtr),y + sta (ZPObjPtr),y ldy #S.MENU.tW lda IE - sta (ZPMENUPtr),y + sta (ZPObjPtr),y iny lda IE+1 - sta (ZPMENUPtr),y + sta (ZPObjPtr),y - iny #S.MENU.kW + ldy #S.MENU.kW lda INE - sta (ZPMENUPtr),y + sta (ZPObjPtr),y iny lda INE+1 - sta (ZPMENUPtr),y - + sta (ZPObjPtr),y +*-------------------------------------- ldy #S.OBJ.Y1 lda DY clc - adc (ZPMENUPtr),y + adc (ZPObjPtr),y tax iny lda DY+1 - adc (ZPMENUPtr),y + adc (ZPObjPtr),y cpx WND.Screen+S.OBJ.H sbc WND.Screen+S.OBJ.H+1 @@ -307,18 +286,18 @@ MENU.SetMenuSizePos ldy #S.OBJ.Y1 - lda (ZPMENUPtr),y + lda (ZPObjPtr),y * sec sbc DY - sta (ZPMENUPtr),y + sta (ZPObjPtr),y iny - lda (ZPMENUPtr),y + lda (ZPObjPtr),y sbc DY+1 - sta (ZPMENUPtr),y + sta (ZPObjPtr),y -.5 >LDYA ZPMENUPtr +.5 >LDYA ZPObjPtr jmp OBJ.SetX2Y2 *-------------------------------------- MENU.GetMItemW ldy #S.MITEM.pICON @@ -327,7 +306,7 @@ MENU.GetMItemW ldy #S.MITEM.pICON ora (ZPPtr1),y beq .1 - lda #17 Reserve space for Icon W + 1px SEP + lda #20 Reserve space for Icon W + 4px SEP sta IY .1 jsr MENU.GetText @@ -351,7 +330,7 @@ MENU.GetMItemW ldy #S.MITEM.pICON jsr FON.GetTextSize ldx CB.Cache+S.CB.SrcW - cmp INE + cpx INE lda CB.Cache+S.CB.SrcW+1 sbc INE+1 bcc .8 @@ -362,38 +341,6 @@ MENU.GetMItemW ldy #S.MITEM.pICON .8 rts *-------------------------------------- -* 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 @@ -417,7 +364,12 @@ MENU.FindMItemByID .9 sec rts *-------------------------------------- -MENU.Enter jsr MENU.GetDXDY +* ZPObjPtr = Menu +*-------------------------------------- +MENU.Enter >LDYA L.WND.Screen + jsr CLIP.GetRect + + jsr MENU.GetDXDY stz D stz D+1 @@ -425,12 +377,12 @@ MENU.Enter jsr MENU.GetDXDY ldy #S.OBJ.X2 lda DX X1 clc - adc (ZPMENUPtr),y + adc (ZPObjPtr),y sta IE IE = X2 iny lda DX+1 - adc (ZPMENUPtr),y + adc (ZPObjPtr),y sta IE+1 jsr MENU.GetMItems @@ -443,7 +395,7 @@ MENU.Enter jsr MENU.GetDXDY lda DY Y1 clc - adc SYSFON.Hp2 + adc SYSFON.Hp1 sta INE INE = Y2 lda DY+1 adc #0 @@ -496,8 +448,11 @@ MENU.Enter jsr MENU.GetDXDY sta D+1 lda DY + sec + sbc #1 sta Counter lda DY+1 + sbc #0 sta Counter+1 bra .2 @@ -505,23 +460,25 @@ MENU.Enter jsr MENU.GetDXDY .8 clc .9 rts *-------------------------------------- -.4 >LDYA L.WND.Screen - jsr CB.FlushBufToYA - - lda D +.4 lda D ora D+1 beq .5 >PUSHW D pMENU - ldy #S.OBJ.X2+1 - lda (ZPMENUPtr),y + ldy #S.OBJ.X2 + lda (ZPObjPtr),y + clc + adc #1 + tax + iny + lda (ZPObjPtr),y + adc #0 >PUSHA - dey - lda (ZPMENUPtr),y + txa >PUSHA - >PUSHW Counter + >PUSHW Counter Y1 jsr MENU.New bcs .9 @@ -529,7 +486,7 @@ MENU.Enter jsr MENU.GetDXDY jmp MENU.Draw *-------------------------------------- .5 lda MSG+S.MSG.S - bit #S.MSG.S.CLK + bit #S.XY.S.CLK beq .8 lda #S.MSG.T.ID @@ -541,21 +498,52 @@ MENU.Enter jsr MENU.GetDXDY jmp MENU.DestroyAll *-------------------------------------- +MENU.Leave clc + rts +*-------------------------------------- * DrawMenu(hMENU) *-------------------------------------- MENU.Draw >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr + >STYA ZPObjPtr - jsr MENU.Save + >LDYA L.WND.Screen + jsr CLIP.GetRect + + lda #S.CB.CMD.GETRECTBUFSIZE + sta CB.Cache+S.CB.CMD + + jsr CB.GetObjX1Y1X2Y2 + + jsr CB.GFXWriteClip bcs .9 - jsr CB.GetBuf + >SYSCALL2 NewStkObj bcs .9 - >LDYA ZPMENUPtr + stx CB.Cache+S.CB.DstPtr + stz CB.Cache+S.CB.DstPtr+1 + + txa + ldy #S.MENU.hSAVEBUF + sta (ZPObjPtr),y + + lda #S.CB.CMD.BITBLT + sta CB.Cache+S.CB.CMD + + lda #S.CB.OP.SAVE + sta CB.Cache+S.CB.OP + + jsr CB.ResetSrcXY + + jsr CB.GetObjSrcWH + + jsr CB.Write + + >LDYA ZPObjPtr ldx #0 jsr OBJ.DrawBorders - + bcs .9 + jsr MENU.GetDXDY jsr MENU.GetMItems @@ -563,12 +551,13 @@ MENU.Draw >SYSCALL2 GetMemPtr .1 lda (ZPPtr1) beq .8 - jsr MENU.DrawMItem + jsr MENU.DrawMItemBuf + bcs .9 + jsr MENU.NextMItemDY bra .1 -.8 >LDYA L.WND.Screen - jmp CB.FlushBufToYA +.8 clc .9 rts *-------------------------------------- @@ -578,30 +567,28 @@ MENU.DrawMItemBuf jsr MENU.DrawMItem bcs .9 - - >LDYA L.WND.Screen - jmp CB.FlushBufToYA - + + jmp CB.FlushBuf + .9 rts *-------------------------------------- MENU.DrawMItem jsr MENU.ResetX1Y1X2 lda (ZPPtr1) cmp #S.MITEM.T.SEP - bne MENU.DrawMItem1 + bne .1 jsr CB.BorderLineH - jmp CB.Cache2CBBuf *-------------------------------------- -MENU.DrawMItem1 jsr MENU.IsSelected +.1 jsr MENU.IsSelected lda PREFS.MenuColor - bcc .15 + bcc .2 eor #$ff -.15 jsr CB.FillRectMonoA +.2 jsr CB.FillRectMonoA lda CB.Cache+S.CB.Y1 sec @@ -613,72 +600,57 @@ MENU.DrawMItem1 jsr MENU.IsSelected sta CB.Cache+S.CB.Y2+1 jsr CB.Cache2CBBuf *-------------------------------------- - inc CB.Cache+S.CB.Y1 Y1:1px margin - bne .12 + jsr CB.IncY1 Y1:1px margin - inc CB.Cache+S.CB.Y1+1 + lda #8 TODO : Checked + jsr CB.AddA2X1 -.12 lda CB.Cache+S.CB.X1 - clc - adc #MENU.LMargin TODO : Checked - sta CB.Cache+S.CB.X1 - bcc .11 - - inc CB.Cache+S.CB.X1+1 - -.11 jsr MENU.GetIcon - beq .2 + jsr MENU.GetIcon + beq .3 jsr DRAW.yaBM +*-------------------------------------- +.3 ldy #S.MENU.iW + lda (ZPObjPtr),y + jsr CB.AddA2X1 -.2 lda CB.Cache+S.CB.X1 - clc - ldy #S.MENU.iW - adc (ZPMENUPtr),y - sta CB.Cache+S.CB.X1 - bcc .21 - - inc CB.Cache+S.CB.X1+1 - -.21 jsr MENU.IsSelected jsr MENU.GetText ldx hSYSFON jsr DRAW.YAText - lda CB.Cache+S.CB.X1 - sec ldy #S.MENU.tW - adc (ZPMENUPtr),y + lda (ZPObjPtr),y + clc + adc CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1 - lda CB.Cache+S.CB.X1+1 - iny - adc (ZPMENUPtr),y - sta CB.Cache+S.CB.X1+1 + iny + lda (ZPObjPtr),y + adc CB.Cache+S.CB.X1+1 + sta CB.Cache+S.CB.X1+1 +*-------------------------------------- lda (ZPPtr1) cmp #S.MITEM.T.ITEM - bne .3 + bne .4 - jsr MENU.IsSelected jsr MENU.GetKeyString C untouched - beq .3 + beq .8 ldx hSYSFON - jsr DRAW.YAText - -.3 lda (ZPPtr1) - cmp #S.MITEM.T.SUBMENU + jmp DRAW.YAText +*-------------------------------------- +.4 cmp #S.MITEM.T.SUBMENU bne .8 - lda CB.Cache+S.CB.X1 - sec ldy #S.MENU.kW - adc (ZPMENUPtr),y + lda (ZPObjPtr),y + clc + adc CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1 - lda CB.Cache+S.CB.X1+1 iny - adc (ZPMENUPtr),y + lda (ZPObjPtr),y + adc CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X1+1 ldx #BM.ID.RIGHT @@ -775,73 +747,25 @@ MENU.GetKeyString .6 pla -.9 rts -*-------------------------------------- -MENU.Save jsr PTR.Disable - - lda #S.CB.CMD.GETRECTBUFSIZE - jsr CB.InitCacheA - - 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 - - >SYSCALL2 NewStkObj - bcs .9 - - stx CB.Cache+S.CB.DstPtr - - txa - ldy #S.MENU.hSAVEBUF - sta (ZPMENUPtr),y - - lda #S.CB.CMD.BITBLT - sta CB.Cache+S.CB.CMD - - 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 - - jmp PTR.Enable - .9 rts *-------------------------------------- MENU.GetDXDY ldy #S.OBJ.X1 - lda (ZPMENUPtr),y + lda (ZPObjPtr),y clc adc #1 sta DX iny - lda (ZPMENUPtr),y + lda (ZPObjPtr),y adc #0 sta DX+1 ldy #S.OBJ.Y1 - lda (ZPMENUPtr),y + lda (ZPObjPtr),y clc adc #1 sta DY iny - lda (ZPMENUPtr),y + lda (ZPObjPtr),y adc #0 sta DY+1 @@ -849,12 +773,12 @@ MENU.GetDXDY ldy #S.OBJ.X1 *-------------------------------------- MENU.ResetX1Y1X2 ldy #S.OBJ.X1 - lda (ZPMENUPtr),y + lda (ZPObjPtr),y clc adc #1 sta CB.Cache+S.CB.X1 iny - lda (ZPMENUPtr),y + lda (ZPObjPtr),y adc #0 sta CB.Cache+S.CB.X1+1 @@ -864,23 +788,23 @@ MENU.ResetX1Y1X2 sta CB.Cache+S.CB.Y1+1 ldy #S.OBJ.X2 - lda (ZPMENUPtr),y + lda (ZPObjPtr),y sec sbc #1 sta CB.Cache+S.CB.X2 iny - lda (ZPMENUPtr),y + lda (ZPObjPtr),y sbc #0 sta CB.Cache+S.CB.X2+1 rts *-------------------------------------- -MENU.GetMItems lda ZPMENUPtr +MENU.GetMItems lda ZPObjPtr clc adc #S.MENU.Items sta ZPPtr1 - lda ZPMENUPtr+1 + lda ZPObjPtr+1 adc /S.MENU.Items sta ZPPtr1+1 rts @@ -915,13 +839,18 @@ MENU.Destroy clc jsr PTR.Disable lda #S.CB.CMD.BITBLT - jsr CB.InitCacheA + sta CB.Cache+S.CB.CMD lda #S.CB.OP.RESTORE sta CB.Cache+S.CB.OP plp + lda ZPObjPtr+1 + pha + lda ZPObjPtr + pha + .2 php ldx MENU.Stack.Cnt @@ -929,33 +858,22 @@ MENU.Destroy clc >SYSCALL2 GetMemPtr >STYA ZPObjPtr - ldy #S.OBJ.X1 - ldx #0 + jsr CB.GetObjX1Y1X2Y2 -.3 lda (ZPObjPtr),y - sta CB.Cache+S.CB.X1,x - iny - inx - cpx #8 X1,Y1,X2,Y2 - bne .3 + jsr CB.ResetSrcXY - 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 + jsr CB.GetObjSrcWH ldy #S.MENU.hSAVEBUF lda (ZPObjPtr),y sta CB.Cache+S.CB.DstPtr + stz CB.Cache+S.CB.DstPtr+1 - jsr CB.GFXWrite + ldx #0 Select CB.Cache + jsr CB.GFXWriteX Direct Write (no clip) - lda CB.Cache+S.CB.DstPtr + ldy #S.MENU.hSAVEBUF + lda (ZPObjPtr),y >SYSCALL2 FreeStkObj ldx MENU.Stack.Cnt @@ -969,7 +887,12 @@ MENU.Destroy clc bne .2 -.7 jmp PTR.Enable +.7 pla + sta ZPObjPtr + pla + sta ZPObjPtr+1 + + jmp PTR.Enable .8 clc rts diff --git a/LIB/LIBGUI.S.MOU.txt b/LIB/LIBGUI.S.MOU.txt index ccd55589..1d4d896a 100644 --- a/LIB/LIBGUI.S.MOU.txt +++ b/LIB/LIBGUI.S.MOU.txt @@ -19,19 +19,24 @@ MOU.Init >PUSHW L.DEVNAME.MOUSE clc rts *-------------------------------------- -MOU.Setup lda DCB.GFX+S.DCB.GFX.W+1 +* make sure mouse X,Y always in Screen +*-------------------------------------- +MOU.Setup lda CLIP.Screen+S.RECT.X2+1 sta MouseClamp+3 lsr sta PTR.Pos+S.POINT.X+1 - lda DCB.GFX+S.DCB.GFX.W + + lda CLIP.Screen+S.RECT.X2 sta MouseClamp+2 ror sta PTR.Pos+S.POINT.X - lda DCB.GFX+S.DCB.GFX.H+1 + + lda CLIP.Screen+S.RECT.Y2+1 sta MouseClamp+7 lsr sta PTR.Pos+S.POINT.Y+1 - lda DCB.GFX+S.DCB.GFX.H + + lda CLIP.Screen+S.RECT.Y2 sta MouseClamp+6 ror sta PTR.Pos+S.POINT.Y @@ -68,25 +73,25 @@ MOU.CheckOverMenu lda MENU.Stack,x >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr - pha - tya - clc - adc #S.OBJ.X1 - tay - pla - adc /S.OBJ.X1 - jsr MOU.InRectYA + >STYA ZPObjPtr + + jsr MOU.InObj bcs .3 - jsr MENU.Enter + lda #PTR.T.ARROW + jsr PTR.Set - clc - rts + jmp MENU.Enter .3 ldx MENU.Stack.Idx bne .2 - + + lda MSG+S.MSG.S + bit #S.XY.S.CLK + beq .9 + + jsr MENU.DestroyAll + .9 sec rts *-------------------------------------- @@ -111,76 +116,71 @@ MOU.CheckOverWND lda WND.Stack-1,x jsr OBJ.GetHWNDA - ldy #S.OBJ.F - lda (ZPWNDPtr),y - and #S.OBJ.F.BORDER - beq .2 - jsr MOU.ChkWNDBorders - bcc .99 + bcc MOU.CheckOverSysBut.RTS -.2 lda ZPWNDPtr + lda ZPWNDPtr clc adc #S.OBJ.X1 tay lda ZPWNDPtr+1 - adc #0 - + adc /S.OBJ.X1 jsr MOU.InRectYA bcs .7 not over this WND lda MSG+S.MSG.S - bit #S.MSG.S.CLK - beq .22 + bit #S.XY.S.CLK + beq .2 jsr WND.Bring2Front -.22 ldy #S.WND.TBarY2 +.2 lda ZPWNDPtr + clc + adc #S.WND.InnerX1 + tay + lda ZPWNDPtr+1 + adc /S.WND.InnerX1 + jsr MOU.InRectYA + bcc .8 in Inner Space + + ldy #S.OBJ.S lda (ZPWNDPtr),y - cmp MSG+S.MSG.Y1 - iny - lda (ZPWNDPtr),y - sbc MSG+S.MSG.Y1+1 + and #S.WND.S.HASTBAR + beq .3 + + ldy #S.WND.TBarY2 + jsr MOU.WNDCmpY bcc .3 not in TBAR + jmp MOU.MoveWND - bra .5 - -.3 ldy #S.WND.MBarY2 - +.3 ldy #S.OBJ.S lda (ZPWNDPtr),y - cmp MSG+S.MSG.Y1 - iny - lda (ZPWNDPtr),y - sbc MSG+S.MSG.Y1+1 + and #S.WND.S.HASMBAR + beq .4 + + ldy #S.WND.MBarY2 + jsr MOU.WNDCmpY bcc .4 not in MBAR jsr MBAR.Enter bra .5 -.4 ldy #S.WND.SBarY1 +.4 ldy #S.OBJ.S + lda (ZPWNDPtr),y + and #S.WND.S.HASSBAR + beq .5 - lda (ZPWNDPtr),y - cmp MSG+S.MSG.Y1 - iny - lda (ZPWNDPtr),y - sbc MSG+S.MSG.Y1+1 - bcs .6 not in SBAR + ldy #S.WND.SBarY1 + jsr MOU.WNDCmpY + bcs .5 not in SBAR .5 lda #PTR.T.ARROW - jsr PTR.Set - clc - rts - -.6 lda #PTR.T.WAIT - jsr PTR.Set - - clc - rts +.6 jmp PTR.Set .7 ldx WND.Stack.Idx @@ -191,9 +191,63 @@ MOU.CheckOverWND jsr PTR.Set .9 sec + rts +*-------------------------------------- +.8 ldy #S.WND.hPTR + lda (ZPWNDPtr),y + jsr PTR.Set + + jsr MOU.ToLocal + + jsr MOU.ChkWNDChilds + bcc .99 + + clc .99 rts *-------------------------------------- +MOU.MoveWND lda MSG+S.MSG.S + bit #S.XY.S.DRAGSTART + beq .8 + + lda ZPWNDPtr + clc + adc #S.OBJ.X1 + tay + lda ZPWNDPtr+1 + adc /S.OBJ.X1 + + jmp PTR.SetRect + +.8 lda #PTR.T.MOVE + jmp PTR.Set +*-------------------------------------- +MOU.ChkWNDChilds + + jsr WND.GetChilds + beq .9 + +.1 jsr MOU.InObj + bcs .7 not over this Child + + jsr OBJ.Enter + bra .8 + +.7 jsr OBJ.Leave + +.8 jsr OBJ.GetNext + bne .1 + +.9 +MOU.ChkWNDChilds.9 + sec + rts +*-------------------------------------- MOU.ChkWNDBorders + ldy #S.OBJ.F + lda (ZPWNDPtr),y + and #S.OBJ.F.BORDER + beq MOU.ChkWNDChilds.9 + stz IY ldy #S.OBJ.X1 @@ -238,13 +292,13 @@ MOU.ChkWNDBorders lda (ZPWNDPtr),y clc adc #1 - eor MSG+S.MSG.X2 + eor MSG+S.MSG.X1 bne .5 iny lda (ZPWNDPtr),y adc #0 - eor MSG+S.MSG.X2+1 + eor MSG+S.MSG.X1+1 bne .5 lda IY @@ -260,13 +314,13 @@ MOU.ChkWNDBorders lda (ZPWNDPtr),y clc adc #1 - eor MSG+S.MSG.Y2 + eor MSG+S.MSG.Y1 bne .7 iny lda (ZPWNDPtr),y adc #0 - eor MSG+S.MSG.Y2+1 + eor MSG+S.MSG.Y1+1 bne .7 lda #PTR.T.RESIZEXY1 @@ -275,9 +329,16 @@ MOU.ChkWNDBorders .7 lda IY bne .6 - sec +.9 sec rts *-------------------------------------- +MOU.InObj lda ZPObjPtr + clc + adc #S.OBJ.X1 + tay + lda ZPObjPtr+1 + adc /S.OBJ.X1 +*-------------------------------------- MOU.InRectYA >STYA ZPRECTPtr ldy #S.RECT.X1 @@ -322,6 +383,41 @@ MOU.InRectYA >STYA ZPRECTPtr .9 sec .99 rts *-------------------------------------- +MOU.WNDCmpY lda (ZPWNDPtr),y + cmp MSG+S.MSG.Y1 + iny + lda (ZPWNDPtr),y + sbc MSG+S.MSG.Y1+1 + rts +*-------------------------------------- +MOU.ToLocal ldy #S.WND.InnerX1 + + lda MSG+S.MSG.X1 + sec + sbc (ZPWNDPtr),y + sta MSG+S.MSG.X1 + + iny + + lda MSG+S.MSG.X1+1 + sbc (ZPWNDPtr),y + sta MSG+S.MSG.X1+1 + + iny #S.WND.InnerY1 + + lda MSG+S.MSG.Y1 + sec + sbc (ZPWNDPtr),y + sta MSG+S.MSG.Y1 + + iny + + lda MSG+S.MSG.Y1+1 + sbc (ZPWNDPtr),y + sta MSG+S.MSG.Y1+1 + + rts +*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.mou LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.MSG.txt b/LIB/LIBGUI.S.MSG.txt index 49de1e7a..1b3d7aca 100644 --- a/LIB/LIBGUI.S.MSG.txt +++ b/LIB/LIBGUI.S.MSG.txt @@ -22,7 +22,7 @@ MSG.Get stz MSG+S.MSG.T sta MSG+S.MSG.T lda MSG+S.MSG.S - bit #S.MSG.S.MOVE + bit #S.XY.S.MOVE beq .2 >PUSHW L.MSG.XY @@ -30,7 +30,7 @@ MSG.Get stz MSG+S.MSG.T lda MSG+S.MSG.S -.2 bit #S.MSG.S.MOVE+S.MSG.S.CLK +.2 bit #S.XY.S.MOVE+S.XY.S.CLK beq .5 jsr MOU.CheckOverMenu diff --git a/LIB/LIBGUI.S.OBJ.txt b/LIB/LIBGUI.S.OBJ.txt index e58dbe94..4b85c2b2 100644 --- a/LIB/LIBGUI.S.OBJ.txt +++ b/LIB/LIBGUI.S.OBJ.txt @@ -30,6 +30,18 @@ OBJ.New pha .9 rts *-------------------------------------- +OBJ.Enter lda (ZPObjPtr) + tax + jmp (J.OBJ.Enter,x) +*-------------------------------------- +OBJ.Leave lda (ZPObjPtr) + tax + jmp (J.OBJ.Leave,x) +*-------------------------------------- +OBJ.Paint lda (ZPObjPtr) + tax + jmp (J.OBJ.fPaintX,x) +*-------------------------------------- * hOBJ, Prop8, Value16 *-------------------------------------- OBJ.SetProp ldy #3 @@ -85,19 +97,29 @@ OBJ.GetPropAtY lda (ZPObjPtr),y rts *-------------------------------------- +OBJ.SetDXDYX1Y1 ldx #3 + ldy #S.OBJ.X1+3 + +.1 lda DX,x + sta (ZPObjPtr),y + dey + dex + bpl .1 + + rts +*-------------------------------------- OBJ.SetX2Y2 >STYA ZPPtr1 - ldy #S.OBJ.W + ldy #S.OBJ.W+1 lda (ZPPtr1),y - clc - sbc #0 - pha - iny - lda (ZPPtr1),y - sbc #0 tax - - pla + dey + lda (ZPPtr1),y + bne .1 + + dex + +.1 dec clc ldy #S.OBJ.X1 adc (ZPPtr1),y @@ -110,18 +132,18 @@ OBJ.SetX2Y2 >STYA ZPPtr1 dey pla sta (ZPPtr1),y - - ldy #S.OBJ.H +*-------------------------------------- + ldy #S.OBJ.H+1 lda (ZPPtr1),y - clc - sbc #0 - pha - iny - lda (ZPPtr1),y - sbc #0 tax + dey + lda (ZPPtr1),y + bne .2 + + dex + +.2 dec - pla clc ldy #S.OBJ.Y1 adc (ZPPtr1),y @@ -131,13 +153,25 @@ OBJ.SetX2Y2 >STYA ZPPtr1 adc (ZPPtr1),y ldy #S.OBJ.Y2+1 sta (ZPPtr1),y - tax dey pla - sta (ZPPtr1),y A,X = Y2 + sta (ZPPtr1),y rts *-------------------------------------- +OBJ.GetPtr lda (ZPObjPtr),y + pha + iny + lda (ZPObjPtr),y + beq .1 + + ply + rts + +.1 plx + >LDYA L.BMs,x + rts +*-------------------------------------- OBJ.SetAXAtY sta (ZPObjPtr),y iny txa @@ -162,6 +196,19 @@ OBJ.GetHWNDA >SYSCALL2 GetMemPtr OBJ.DrawBorders >STYA ZPObjPtr stx IY + ldy #S.OBJ.F + lda (ZPObjPtr),y +* and #S.OBJ.F.BORDER +* bne .1 + + bmi .1 + + clc +.9 rts + +.1 jsr CB.GetBuf + bcs .9 + jsr CB.BorderLineH ldy #S.OBJ.X1 @@ -247,9 +294,19 @@ OBJ.DrawBorders >STYA ZPObjPtr sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+1 - jmp CB.Cache2CBBuf + jsr CB.Cache2CBBuf + + jmp CB.FlushBuf *------------------------------------- - +OBJ.GetNext ldy #S.OBJ.pNext + lda (ZPObjPtr),y + tax + iny + lda (ZPObjPtr),y + stx ZPObjPtr + sta ZPObjPtr+1 + ora ZPObjPtr + rts *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.obj diff --git a/LIB/LIBGUI.S.PTR.txt b/LIB/LIBGUI.S.PTR.txt index 6c74a6c4..a422f836 100644 --- a/LIB/LIBGUI.S.PTR.txt +++ b/LIB/LIBGUI.S.PTR.txt @@ -12,7 +12,7 @@ PTR.Update lda PTR.T lda #PTR.T.WAIT *-------------------------------------- -* Set X2,Y2,SrcPtr +* Set SrcPtr, SrcW, SrcH *-------------------------------------- PTR.Set sta PTR.T @@ -26,61 +26,37 @@ PTR.Set sta PTR.T sta CB.PTR+S.CB.SrcPtr+1 sta ZPPtr1+1 - ldy #S.BM.W - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcW - - clc - adc CB.PTR+S.CB.X1 - pha - - iny - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcW+1 - adc CB.PTR+S.CB.X1+1 - tax - pla - bne .2 + ldy #S.BM.W+3 + ldx #3 +.1 lda (ZPPtr1),y + sta CB.PTR+S.CB.SrcW,x + dey dex - -.2 dec - sta CB.PTR+S.CB.X2 - stx CB.PTR+S.CB.X2+1 - - iny S.BM.H - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcH - - clc - adc CB.PTR+S.CB.Y1 - pha - - iny - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcH+1 - adc CB.PTR+S.CB.Y1+1 - tax - pla - bne .3 - - dex - -.3 dec - sta CB.PTR+S.CB.Y2 - stx CB.PTR+S.CB.Y2+1 - - bra PTR.Enable - -PTR.Set.RTS rts -*-------------------------------------- -* Set DestX,DestY -*-------------------------------------- -PTR.SetPos >PULLW ZPPtr1 - lda PTR.bVisible bpl .1 - jsr PTR.Hide.I + bra PTR.Enable + +PTR.Set.RTS rts +*-------------------------------------- +PTR.SetRect >STYA ZPPtr1 + jsr PTR.Disable + sec + ror PTR.T + + ldy #7 + +.1 lda (ZPPtr1),y + sta PTR.Rect,y + dey + bpl .1 + + bra PTR.Enable +*-------------------------------------- +* SetPos DestX,DestY +*-------------------------------------- +PTR.SetPos >PULLW ZPPtr1 + jsr PTR.Disable .1 ldy #S.POINT-1 @@ -91,13 +67,13 @@ PTR.SetPos >PULLW ZPPtr1 *-------------------------------------- PTR.Enable bit PTR.bVisible bmi PTR.Show.I - + clc rts *-------------------------------------- PTR.Disable bit PTR.bVisible bmi PTR.Hide.I - + PTR.Disable.8 clc rts *-------------------------------------- @@ -106,7 +82,12 @@ PTR.Hide lda PTR.bVisible stz PTR.bVisible *-------------------------------------- -PTR.Hide.I lda #S.CB.OP.RESTORE +PTR.Hide.I bit PTR.T + bpl .1 + + jmp PTR.ShowRect.I + +.1 lda #S.CB.OP.RESTORE bra PTR.Draw.I *-------------------------------------- PTR.Show lda PTR.bVisible @@ -115,7 +96,11 @@ PTR.Show lda PTR.bVisible dec PTR.bVisible *-------------------------------------- PTR.Show.I ldx PTR.T - lda PTR.Pos+S.POINT.X + bpl .10 + + jmp PTR.ShowRect.I + +.10 lda PTR.Pos+S.POINT.X sec sbc PTR.HotPoints,x sta CB.PTR+S.CB.X1 @@ -133,23 +118,83 @@ PTR.Show.I ldx PTR.T sbc #0 sta CB.PTR+S.CB.Y1+1 - lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE -*-------------------------------------- -PTR.Draw.I sta CB.PTR+S.CB.OP - - >LDYA L.WND.Screen - jsr CLIP.GetRect + ldx CB.PTR+S.CB.SrcW+1 + lda CB.PTR+S.CB.SrcW + bne .1 -* >LDYA L.CB.PTR -* jsr CB.GetInCache - -* jsr CLIP.CB.Cache + dex + +.1 dec + clc + adc CB.PTR+S.CB.X1 + sta CB.PTR+S.CB.X2 + txa + adc CB.PTR+S.CB.X1+1 + sta CB.PTR+S.CB.X2+1 + + ldx CB.PTR+S.CB.SrcH+1 + lda CB.PTR+S.CB.SrcH + bne .2 + + dex + +.2 dec + clc + adc CB.PTR+S.CB.Y1 + sta CB.PTR+S.CB.Y2 + txa + adc CB.PTR+S.CB.Y1+1 + sta CB.PTR+S.CB.Y2+1 + + lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE +*-------------------------------------- +PTR.Draw.I sta CB.PTR+S.CB.OP + + ldx #S.CB + +.1 lda CB.PTR-1,x + sta CLIP.Cache-1,x + dex + bne .1 + +* ldx #0 select CLIP.Sreen + jsr CLIP.BitBltX + bcs .8 + + jsr CB.GFXWrite + +.8 clc + + rts +*-------------------------------------- +PTR.ShowRect.I lda #S.CB.CMD.HLINE + sta CLIP.Cache+S.CB.CMD + lda #S.CB.OP.XOR + sta CLIP.Cache+S.CB.OP + lda #S.CB.M.MONO + sta CLIP.Cache+S.CB.M + lda #C.WHITE + sta CLIP.Cache+S.CB.COLOR + >DEBUG + ldx #5 X1,Y1,X2 + +.1 lda PTR.Rect+S.RECT.X1,x + sta CLIP.Cache+S.CB.X1,x + dex + bpl .1 + + jsr .7 + + >LDYA PTR.Rect+S.RECT.Y2 + >STYA CLIP.Cache+S.CB.Y1 + + +.7 +* ldx #0 select CLIP.Sreen +* jsr CLIP.HLine * bcs .8 - - >PUSHB WND.Screen+S.OBJ.hPARENT - >PUSHBI IOCTL.WRITE - >PUSHW L.CB.PTR - >SYSCALL2 IOCTL + + jsr CB.GFXWrite .8 clc diff --git a/LIB/LIBGUI.S.SYSBAR.txt b/LIB/LIBGUI.S.SYSBAR.txt index 929dd38f..acd35cbd 100644 --- a/LIB/LIBGUI.S.SYSBAR.txt +++ b/LIB/LIBGUI.S.SYSBAR.txt @@ -3,10 +3,12 @@ NEW *-------------------------------------- SYSBUT.Enter bit WND.SYSBAR.bSysBut bmi .8 - + sec ror WND.SYSBAR.bSysBut + jsr MENU.DestroyAll + jsr CB.GetBuf bcs .9 @@ -18,6 +20,7 @@ SYSBUT.Enter bit WND.SYSBAR.bSysBut >PUSHW L.MENU.Sys >PUSHW WND.SysBar+S.OBJ.X1 >PUSHW WND.SysBar+S.OBJ.Y1 + jsr MENU.New bcs .9 @@ -37,7 +40,6 @@ SYSBUT.Leave bit WND.SYSBAR.bSysBut jsr SYSBAR.ShowSysBut >LDYA L.WND.SysBar - jmp CB.FlushBufToYA .8 clc @@ -53,7 +55,6 @@ SYSBAR.Show jsr CB.GetBuf jsr SYSBAR.ShowSysClk >LDYA L.WND.SysBar - jmp CB.FlushBufToYA .9 rts @@ -76,37 +77,18 @@ SYSBAR.ShowSysBut jsr CB.Cache2CBBuf - lda CB.Cache+S.CB.X1 - clc - adc #4 - sta CB.Cache+S.CB.X1 - lda CB.Cache+S.CB.X1+1 - adc #0 - sta CB.Cache+S.CB.X1+1 + lda #4 + jsr CB.AddA2X1 - inc CB.Cache+S.CB.Y1 - bne .30 + jsr CB.IncY1 - inc CB.Cache+S.CB.Y1+1 - -.30 ldx #BM.ID.APPLE + ldx #BM.ID.APPLE jsr DRAW.xBM - lda CB.Cache+S.CB.X1 - clc - adc #20 - sta CB.Cache+S.CB.X1 - lda CB.Cache+S.CB.X1+1 - adc #0 - sta CB.Cache+S.CB.X1+1 + lda #16+1 + jsr CB.AddA2X1 - inc CB.Cache+S.CB.Y1 - bne .31 - - inc CB.Cache+S.CB.Y1+1 - -.31 lda WND.SysBar.bSysBut - asl + jsr CB.IncY1 >LDYA L.WND.SysBar.2osX ldx hSYSFON @@ -129,14 +111,23 @@ SYSBAR.ShowSysClk lda PREFS.SysBarColor jsr CB.FillRectMonoA - ldx #S.RECT-1 + ldx #S.RECT -.1 lda RECT.SysClk,x - sta CB.Cache+S.CB.X1,x +.1 lda RECT.SysClk-1,x + sta CB.Cache+S.CB.X1-1,x dex - bpl .1 + bne .1 - jmp CB.Cache2CBBuf + jsr CB.Cache2CBBuf + + lda #1 + jsr CB.AddA2X1 + + jsr CB.IncY1 + + >LDYA L.WND.SysBar.Clk + ldx hSYSFON + jmp DRAW.YAText *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.sysbar diff --git a/LIB/LIBGUI.S.TEXT.txt b/LIB/LIBGUI.S.TEXT.txt index 10ef0209..491e12d9 100644 --- a/LIB/LIBGUI.S.TEXT.txt +++ b/LIB/LIBGUI.S.TEXT.txt @@ -4,7 +4,10 @@ NEW TEXT.New TEXT.Paint -TEXT.Close +TEXT.Enter +TEXT.Leave +*-------------------------------------- +TEXT.fPaint clc rts *-------------------------------------- diff --git a/LIB/LIBGUI.S.WND.txt b/LIB/LIBGUI.S.WND.txt index 591f9228..21b8deae 100644 --- a/LIB/LIBGUI.S.WND.txt +++ b/LIB/LIBGUI.S.WND.txt @@ -28,15 +28,23 @@ WND.Setup >STYA WND.Screen+S.OBJ.W >STYA WND.Desktop+S.OBJ.W >STYA WND.SysBar+S.OBJ.W + cpy #0 + bne .1 + + dec + +.1 dey + >STYA CLIP.Screen+S.RECT.X2 +*-------------------------------------- + lda DCB.GFX+S.DCB.GFX.H + sta WND.Screen+S.OBJ.H lda SYSFON.Hp2 sta WND.SysBar+S.OBJ.H lda DCB.GFX+S.DCB.GFX.H - sta WND.Screen+S.OBJ.H - sec - sbc WND.SysBar+S.OBJ.H + sbc SYSFON.Hp2 sta WND.Desktop+S.OBJ.H sta WND.SysBar+S.OBJ.Y1 @@ -44,15 +52,19 @@ WND.Setup sta RECT.SysWNDs+S.RECT.Y1 sta RECT.SysClk+S.RECT.Y1 - lda DCB.GFX+S.DCB.GFX.H - dec + clc + adc SYSFON.Hp1 + sta RECT.SysBut+S.RECT.Y2 sta RECT.SysWNDs+S.RECT.Y2 sta RECT.SysClk+S.RECT.Y2 + sta CLIP.Screen+S.RECT.Y2 >LDYA L.WND.Screen >STYA WND.Desktop+S.OBJ.hPARENT >STYA WND.SysBar+S.OBJ.hPARENT + +* >LDYA L.WND.Screen jsr OBJ.SetX2Y2 >LDYA L.WND.Desktop @@ -60,31 +72,32 @@ WND.Setup >LDYA L.WND.SysBar jsr OBJ.SetX2Y2 - +*-------------------------------------- >LDYA L.WND.SysBar.2osX ldx hSYSFON jsr FON.GetTextSize lda CB.Cache+S.CB.SrcW clc - adc #24 4 + BM width + 4 + adc #25 4 + BM width(16) + 1 + "2osX" + 4 sta RECT.SysBut+S.RECT.X2 sta RECT.SysWNDs+S.RECT.X1 - +*-------------------------------------- >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 + clc + adc #2 1 + "00:00" + 1 + sta CB.Cache+S.CB.SrcW lda DCB.GFX+S.DCB.GFX.W sec - sbc RECT.SysWNDs+S.RECT.X2 + sbc CB.Cache+S.CB.SrcW 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 @@ -94,7 +107,7 @@ WND.Setup clc sbc #0 sta RECT.SysClk+S.RECT.X2 - lda DCB.GFX+S.DCB.GFX.W + lda DCB.GFX+S.DCB.GFX.W+1 sbc #0 sta RECT.SysClk+S.RECT.X2+1 @@ -132,7 +145,7 @@ WND.New ldy WND.Stack.Top ldy #S.OBJ.W jsr OBJ.PullWordAtY - + ldy #S.OBJ.Y1 jsr OBJ.PullWordAtY @@ -175,6 +188,75 @@ WND.New ldy WND.Stack.Top rts *-------------------------------------- +WND.SetMBar >PULLW ZPPtr1 + + jsr OBJ.PullHWND + + >LDYA ZPPtr1 + jsr MBAR.New + bcs .9 + + ldy #S.WND.pMBAR + sta (ZPWNDPtr),y + +* clc + +.9 rts +*-------------------------------------- +WND.ClrStatus ldy #S.OBJ.S + eor #$ff + and (ZPWNDPtr),y + sta (ZPWNDPtr),y + rts +*-------------------------------------- +WND.SetStatus ldy #S.OBJ.S + ora (ZPWNDPtr),y + sta (ZPWNDPtr),y + rts +*-------------------------------------- +* ZPWNDPtr +* ZPObjPtr +*-------------------------------------- +WND.AddChild.I ldy #S.OBJ.pChilds + lda (ZPWNDPtr),y + sta ZPPtr1 + iny + lda (ZPWNDPtr),y + sta ZPPtr1+1 + ora ZPPtr1 + bne .1 + + lda ZPObjPtr+1 + sta (ZPWNDPtr),y + dey + lda ZPObjPtr + sta (ZPWNDPtr),y + clc + rts + +.1 ldy #S.OBJ.pNext + lda (ZPPtr1),y + tax + iny + ora (ZPPtr1),y + beq .2 + + lda (ZPPtr1),y + stx ZPPtr1 + sta ZPPtr1+1 + bra .1 + +.2 lda ZPObjPtr+1 + sta (ZPPtr1),y + dey + lda ZPObjPtr + sta (ZPPtr1),y + clc + rts +*-------------------------------------- +WND.Enter +WND.Leave +*-------------------------------------- WND.Destroy clc rts *-------------------------------------- @@ -206,6 +288,9 @@ WND.Bring2Front ldx WND.Stack.Idx *-------------------------------------- WND.Show sta WND.hWND + >LDYA L.WND.Desktop + jsr CLIP.GetRect + ldx WND.Stack.Top beq .1 @@ -215,37 +300,23 @@ WND.Show sta WND.hWND lda #S.WND.S.ACTIVE jsr WND.ClrStatus - jsr CB.GetBuf - bcs WND.Activate.RTS - jsr WND.DrawTitleBar - - >LDYA L.WND.Desktop - jsr CB.FlushBufToYA - lda WND.hWND +.1 lda WND.hWND ldx WND.Stack.Top -.1 sta WND.Stack,x + sta WND.Stack,x inc WND.Stack.Top *-------------------------------------- WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr - jsr OBJ.SetX2Y2 + jsr OBJ.SetX2Y2 jsr WND.ResetInnerW - - jsr CB.GetBuf - bcs WND.Activate.RTS lda #S.WND.S.ACTIVE jsr WND.SetStatus - ldy #S.OBJ.F - lda (ZPWNDPtr),y - and #S.OBJ.F.BORDER - beq .1 - >LDYA ZPWNDPtr ldx #1 jsr OBJ.DrawBorders @@ -256,7 +327,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr iny lda (ZPWNDPtr),y sta Counter+1 - + ldy #S.WND.pTITLE+1 lda (ZPWNDPtr),y bne .2 @@ -284,7 +355,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr ldy #S.WND.MBarY1 jsr WND.SetCounterAtY - + lda SYSFON.Hp1 jsr WND.Add2Counter @@ -297,10 +368,14 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr ldy #S.WND.pMBAR lda (ZPWNDPtr),y jsr MBAR.Draw + bcs .9 *-------------------------------------- -.4 ldy #S.WND.InnerY1 +.4 jsr CB.GetBuf + bcs .9 + + ldy #S.WND.InnerY1 jsr WND.SetCounterAtY - + ldy #S.WND.pSTATUS+1 lda (ZPWNDPtr),y beq .8 @@ -318,12 +393,12 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr lda (ZPWNDPtr),y sbc #0 sta (ZPWNDPtr),y - + inx bne .5 - + inc - + .5 ldy #S.WND.SBarY1+1 sta (ZPWNDPtr),y dey @@ -346,8 +421,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr sbc Counter+1 sta (ZPWNDPtr),y - >LDYA L.WND.Desktop - jsr CB.FlushBufToYA + jsr CB.FlushBuf lda WND.hWND pha @@ -355,21 +429,28 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr .9 rts *-------------------------------------- -WND.ResetInnerW ldy #S.OBJ.W - ldx #S.WND.InnerW +WND.ResetInnerW ldy #S.OBJ.X1 + ldx #S.WND.InnerX1 jsr .1 - ldy #S.OBJ.H - ldx #S.WND.InnerH - jsr .1 - + ldy #S.OBJ.Y1 + ldx #S.WND.InnerY1 + ldy #S.OBJ.X2 ldx #S.WND.InnerX2 jsr .1 ldy #S.OBJ.Y2 ldx #S.WND.InnerY2 - + jsr .1 + + ldy #S.OBJ.W + ldx #S.WND.InnerW + jsr .1 + + ldy #S.OBJ.H + ldx #S.WND.InnerH + .1 lda (ZPWNDPtr),y pha iny @@ -387,11 +468,11 @@ WND.Add2Counter clc adc Counter sta Counter bcc .8 - + inc Counter+1 - + .8 ldx Counter+1 - rts + rts *-------------------------------------- WND.SetCounterAtY lda Counter @@ -401,9 +482,13 @@ WND.SetAXAtY sta (ZPWNDPtr),y iny txa sta (ZPWNDPtr),y - rts + +WND.SetAXAtY.9 rts *-------------------------------------- WND.DrawTitleBar + jsr CB.GetBuf + bcs WND.SetAXAtY.9 + lda #S.CB.CMD.FILLRECT sta CB.Cache+S.CB.CMD @@ -448,13 +533,10 @@ WND.DrawTitleBar jsr CB.Cache2CBBuf - inc CB.Cache+S.CB.Y1 - bne .12 - - inc CB.Cache+S.CB.Y1+1 + jsr CB.IncY1 * TOP LEFT ICON -.12 ldy #S.WND.ICON+1 + ldy #S.WND.ICON+1 lda (ZPWNDPtr),y tax dey @@ -526,7 +608,7 @@ WND.DrawTitleBar ldx #BM.ID.CLOSE jsr DRAW.xBM -.8 clc +.8 jmp CB.FlushBuf .9 rts *-------------------------------------- @@ -541,7 +623,16 @@ WND.DrawTitleBarText ldx hSYSFON jsr FON.GetTextSize - ldy #S.OBJ.W + lda PREFS.XMargin + asl +* clc + adc CB.Cache+S.CB.SrcW + sta CB.Cache+S.CB.SrcW + bcc .1 + + inc CB.Cache+S.CB.SrcW+1 + +.1 ldy #S.OBJ.W lda (ZPWNDPtr),y sec sbc CB.Cache+S.CB.SrcW @@ -558,26 +649,53 @@ WND.DrawTitleBarText lda (ZPWNDPtr),y clc adc DX - and PREFS.BestViewedX +* and PREFS.BestViewedX + and #$f8 sta CB.Cache+S.CB.X1 - + tax + iny lda (ZPWNDPtr),y adc DX+1 sta CB.Cache+S.CB.X1+1 + pha + txa + + clc + adc CB.Cache+S.CB.SrcW +* ora PREFS.nBestViewedX + and #$f8 + sta CB.Cache+S.CB.X2 + + pla + adc CB.Cache+S.CB.SrcW+1 + sta CB.Cache+S.CB.X2+1 + + jsr CB.DecY2 + + lda #C.WHITE + jsr CB.FillRectMonoA + + jsr CB.Cache2CBBuf + + lda PREFS.XMargin + jsr CB.AddA2X1 + ldy #S.WND.pTITLE lda (ZPWNDPtr),y pha iny lda (ZPWNDPtr),y ply - + ldx hSYSFON - clc jmp DRAW.YAText *-------------------------------------- WND.DrawStatusBar + jsr CB.GetBuf + bcs .9 + jsr CB.BorderLineH ldy #S.OBJ.X1 @@ -594,12 +712,9 @@ WND.DrawStatusBar jsr CB.Cache2CBBuf - inc CB.Cache+S.CB.Y1 - bne .1 + jsr CB.IncY1 - inc CB.Cache+S.CB.Y1+1 - -.1 lda PREFS.SBarColor + lda PREFS.SBarColor jsr CB.FillRectMonoA ldy #S.OBJ.Y2 @@ -608,6 +723,9 @@ WND.DrawStatusBar jsr CB.Cache2CBBuf + lda #4 + jsr CB.AddA2X1 + ldy #S.WND.pSTATUS lda (ZPWNDPtr),y pha @@ -616,8 +734,11 @@ WND.DrawStatusBar ply ldx hSYSFON - clc - jmp DRAW.YAText + jsr DRAW.YAText + + jmp CB.FlushBuf + +.9 rts *-------------------------------------- WND.Paint pha hWND @@ -634,12 +755,39 @@ WND.Paint1 ldy #S.WND.fPaint jmp (ZPPtr1) *-------------------------------------- -WND.fPaint.RTS rts - WND.fPaint jsr OBJ.GetHWNDA + jsr WND.GetInnerInClip - jsr CB.GetBuf - bcs WND.fPaint.RTS + jsr WND.fPaint.BG + bcs .9 + + jsr WND.GetChilds + beq .8 + +.1 jsr OBJ.Paint + bcs .9 + + jsr OBJ.GetNext + bne .1 + +.8 clc + +.9 rts +*-------------------------------------- +WND.GetInnerInClip + ldy #S.WND.InnerX1+7 + ldx #7 + +.1 lda (ZPWNDPtr),y + sta CLIP.Rect+S.RECT.X1,x + dey + dex + bpl .1 + + rts +*-------------------------------------- +WND.fPaint.BG jsr CB.GetBuf + bcs .9 lda #S.CB.CMD.FILLRECT sta CB.Cache+S.CB.CMD @@ -654,34 +802,13 @@ WND.fPaint jsr OBJ.GetHWNDA lda (ZPWNDPtr),y sta CB.Cache+S.CB.COLOR - ldy #S.OBJ.X1 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X1 - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X1+1 - - ldy #S.WND.InnerY1 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y1 - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y1+1 - - ldy #S.WND.InnerX2 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X2 - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X2+1 - - ldy #S.WND.InnerY2 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y2 - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y2+1 + ldx #7 +.1 lda CLIP.Rect+S.RECT.X1,x + sta CB.Cache+S.CB.X1,x + dex + bpl .1 + jsr CB.Cache2CBBuf *-------------------------------------- ldy #S.WND.BGBM @@ -694,54 +821,33 @@ WND.fPaint jsr OBJ.GetHWNDA lda (ZPWNDPtr),y sta CB.Cache+S.CB.SrcPtr+1 - stz S.CB.SrcX - stz S.CB.SrcX+1 - - stz S.CB.SrcY - stz S.CB.SrcY+1 + jsr CB.ResetSrcXY ldy #S.WND.InnerW+3 ldx #3 -.1 lda (ZPWNDPtr),y +.2 lda (ZPWNDPtr),y sta CB.Cache+S.CB.SrcW,x dey dex - bpl .1 + bpl .2 lda #S.CB.CMD.BITBLT sta CB.Cache+S.CB.CMD jsr CB.Cache2CBBuf -.8 >LDYA L.WND.Desktop - - jmp CB.FlushBufToYA -*-------------------------------------- -WND.SetMBar >PULLW ZPPtr1 - - jsr OBJ.PullHWND - - >LDYA ZPPtr1 - jsr MBAR.New - bcs .9 - - ldy #S.WND.pMBAR - sta (ZPWNDPtr),y - -* clc +.8 jmp CB.FlushBuf .9 rts *-------------------------------------- -WND.ClrStatus ldy #S.OBJ.S - eor #$ff - and (ZPWNDPtr),y - sta (ZPWNDPtr),y - rts -*-------------------------------------- -WND.SetStatus ldy #S.OBJ.S - ora (ZPWNDPtr),y - sta (ZPWNDPtr),y +WND.GetChilds ldy #S.OBJ.pChilds + lda (ZPWNDPtr),y + sta ZPObjPtr + iny + lda (ZPWNDPtr),y + sta ZPObjPtr+1 + ora ZPObjPtr rts *-------------------------------------- MAN diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index e195066b..12d8e5f1 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -15,8 +15,6 @@ NEW *-------------------------------------- WND.MAX .EQ 64 MENU.MAX .EQ 4 -MENU.LMargin .EQ 7 -MENU.RMargin .EQ 8 *-------------------------------------- .MA SWAP16 lda ]1 @@ -82,12 +80,12 @@ MENU.RMargin .EQ 8 ZPObjPtr .BS 2 ZPRECTPtr .BS 2 ZPWNDPtr .BS 2 -ZPMENUPtr .BS 2 - ZPBMPtr .BS 2 + ZPCBBufPtr .BS 2 ZPPtr1 .BS 2 ZPPtr2 .BS 2 +TmpW .BS 2 DX .BS 2 DY .BS 2 @@ -152,8 +150,8 @@ L.MouseClamp .DA MouseClamp L.MSG .DA MSG L.MSG.XY .DA MSG+S.MSG.X1 L.CB.PTR .DA CB.PTR -L.CLIP.Rect .DA CLIP.Rect -L.CB.Cache .DA CB.Cache +L.CB.Cache .DA CB.Cache CB.GFXWrite + .DA CLIP.Cache CB.GFXWrite L.WND.Screen .DA WND.Screen L.WND.Desktop .DA WND.Desktop L.WND.SysBar .DA WND.SysBar @@ -178,6 +176,13 @@ L.BM.Up .DA BM.Up L.BM.Down .DA BM.Down L.BM.Info .DA BM.Info *-------------------------------------- +L.BUT.Labels .DA BUT.L.OK + .DA BUT.L.CANCEL + .DA BUT.L.RETRY + .DA BUT.L.IGNORE + .DA BUT.L.YES + .DA BUT.L.NO +*-------------------------------------- L.PTR.SaveBuf .DA PTR.SaveBuf L.Cursors .DA PTR.Arrow .DA PTR.Move @@ -205,6 +210,30 @@ J.Clip .DA CLIP.Point SETPIXEL .DA CLIP.Text GETTEXTSIZE .DA CLIP.Line DRAWLINE .DA CLIP.BitBlt DRAWTEXT2 +*-------------------------------------- +J.OBJ.Enter .DA WND.Enter + .DA MBAR.Enter + .DA MENU.Enter + .DA BUT.Enter + .DA TEXT.Enter + .DA BITMAP.Enter + .DA LABEL.Enter +*-------------------------------------- +J.OBJ.Leave .DA WND.Leave + .DA MBAR.Leave + .DA MENU.Leave + .DA BUT.Leave + .DA TEXT.Leave + .DA BITMAP.Leave + .DA LABEL.Leave +*-------------------------------------- +J.OBJ.fPaintX .DA WND.fPaint + .DA $FFFF MBAR + .DA $FFFF MENU + .DA BUT.fPaint + .DA TEXT.fPaint + .DA BITMAP.fPaint + .DA LABEL.fPaint .DA 0 *-------------------------------------- LIB.LOAD lda LibCount @@ -219,14 +248,14 @@ LIB.LOAD lda LibCount jsr FON.Init bcs .9 + jsr WND.Setup + lda hDevMouse beq .1 jsr MOU.Setup -.1 jsr WND.Setup - - lda #PTR.T.ARROW +.1 lda #PTR.T.ARROW jsr PTR.Set jsr PTR.Show @@ -273,6 +302,32 @@ SkipStrZPtr1 ldy #$ff .8 rts *-------------------------------------- +SkipAPtr2 clc + adc ZPPtr2 + sta ZPPtr2 + bcc .8 + + inc ZPPtr2+1 + +.8 rts +*-------------------------------------- +SkipStrZPtr2 ldy #$ff + +.1 iny + lda (ZPPtr2),y + bne .1 + + tya + sec \0 + adc ZPPtr2 + sta ZPPtr2 + bcc .8 + + inc ZPPtr1+2 + +.8 rts +*-------------------------------------- + .INB usr/src/lib/libgui.s.bitmap .INB usr/src/lib/libgui.s.bm .INB usr/src/lib/libgui.s.but .INB usr/src/lib/libgui.s.cb @@ -280,13 +335,14 @@ SkipStrZPtr1 ldy #$ff .INB usr/src/lib/libgui.s.cur .INB usr/src/lib/libgui.s.draw .INB usr/src/lib/libgui.s.fon + .INB usr/src/lib/libgui.s.label .INB usr/src/lib/libgui.s.mbar .INB usr/src/lib/libgui.s.mbox .INB usr/src/lib/libgui.s.menu .INB usr/src/lib/libgui.s.mou .INB usr/src/lib/libgui.s.msg .INB usr/src/lib/libgui.s.obj - .INB usr/src/lib/libgui.s.pat +* .INB usr/src/lib/libgui.s.pat .INB usr/src/lib/libgui.s.ptr .INB usr/src/lib/libgui.s.sysbar .INB usr/src/lib/libgui.s.text @@ -312,7 +368,16 @@ OBJ.SizeOf .DA S.WND .DA 0 .DA 0 .DA S.BUT -* .DA S.TEXT + .DA S.TEXT + .DA S.BITMAP + .DA S.LABEL +*-------------------------------------- +BUT.L.OK .AZ "Ok" +BUT.L.CANCEL .AZ "Cancel" +BUT.L.RETRY .AZ "Retry" +BUT.L.IGNORE .AZ "Ignore" +BUT.L.YES .AZ "Yes" +BUT.L.NO .AZ "No" *-------------------------------------- CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL .DA #S.CB.Y1+1 GETPIXEL @@ -336,7 +401,6 @@ PAT.Buf .BS 1 S.BM.F IOCTL .BS S.IOCTL DCB.GFX .BS S.DCB.GFX *-------------------------------------- -MouseClamp .BS 8 MSG .BS S.MSG *-------------------------------------- CB.PTR .DA #S.CB.CMD.BITBLT @@ -345,8 +409,10 @@ CB.PTR .DA #S.CB.CMD.BITBLT .DA #0 .BS S.CB-4 *-------------------------------------- -CLIP.Rect .BS S.RECT -CB.Cache .BS S.CB +CB.Cache .BS S.CB CB.GFXWrite: +CLIP.Cache .BS S.CB ,x select Cache +CLIP.Screen .BS S.RECT CLIP.BitBltX: +CLIP.Rect .BS S.RECT ,x select clipping region *-------------------------------------- MENU.Stack.Owner .BS 1 MENU.Stack.Idx .BS 1 @@ -448,11 +514,13 @@ KEYMOD.S.OA .EQ *-KEYMOD.S KEYMOD.S.CA .EQ *-KEYMOD.S .DA #02,#'-',#0 *-------------------------------------- +MouseClamp .EQ * MOU.Setup TEXTBUF .BS 16 for composing HotKey strings *-------------------------------------- PREFS.BestViewedX .DA #$FC -PREFS.MBarXMargin .DA #5 -PREFS.XSeparator .DA #6 +PREFS.nBestViewedX .DA #$03 +PREFS.XMargin .DA #4 +PREFS.XSeparator .DA #4 * PREFS.MenuColor .DA #C.WHITE PREFS.SysBarColor .DA #C.WHITE diff --git a/ProDOS.203/ProDOS.S.CCLK.txt b/ProDOS.203/ProDOS.S.CCLK.txt index a2d4fba3..1a4ca9c9 100644 --- a/ProDOS.203/ProDOS.S.CCLK.txt +++ b/ProDOS.203/ProDOS.S.CCLK.txt @@ -60,6 +60,6 @@ CCLK.END .EQ * end of obj cclock_0. .HS 000000 pad to page boundary *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.CCLK -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.cclk +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.GP.txt b/ProDOS.203/ProDOS.S.GP.txt index f086f00d..89d632b0 100644 --- a/ProDOS.203/ProDOS.S.GP.txt +++ b/ProDOS.203/ProDOS.S.GP.txt @@ -146,6 +146,6 @@ bnkbyt2 .DA #0 kversion .HS 23 represents release 2.0.3 *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.GP -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.gp +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.IRQ.txt b/ProDOS.203/ProDOS.S.IRQ.txt index ef51a767..b421d01a 100644 --- a/ProDOS.203/ProDOS.S.IRQ.txt +++ b/ProDOS.203/ProDOS.S.IRQ.txt @@ -63,6 +63,6 @@ irqv .DA lanirq irq handler * end of obj mli_3 *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.IRQ -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.irq +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.LDR.A.txt b/ProDOS.203/ProDOS.S.LDR.A.txt index 9bde84e5..eec39ac6 100644 --- a/ProDOS.203/ProDOS.S.LDR.A.txt +++ b/ProDOS.203/ProDOS.S.LDR.A.txt @@ -764,6 +764,6 @@ H2620 clc LDR.Test128.len .EQ *-LDR.Test128 *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.A -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.ldr.a +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.LDR.B.txt b/ProDOS.203/ProDOS.S.LDR.B.txt index a7ed17d2..4a26139d 100644 --- a/ProDOS.203/ProDOS.S.LDR.B.txt +++ b/ProDOS.203/ProDOS.S.LDR.B.txt @@ -944,6 +944,6 @@ RAM_1_END .EQ * end of /RAM installer MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.B -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.ldr.b +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.RAM.txt b/ProDOS.203/ProDOS.S.RAM.txt index 5c19e247..4e76a0a8 100644 --- a/ProDOS.203/ProDOS.S.RAM.txt +++ b/ProDOS.203/ProDOS.S.RAM.txt @@ -83,6 +83,6 @@ RAMDRV.END .EQ * .BS $FF9B-* fill to lanirq ($FF9B see note below) *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.ram +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.RAMX.txt b/ProDOS.203/ProDOS.S.RAMX.txt index 37ead827..10e17561 100644 --- a/ProDOS.203/ProDOS.S.RAMX.txt +++ b/ProDOS.203/ProDOS.S.RAMX.txt @@ -317,6 +317,6 @@ ex1 sta passit+1 also used by blockwrite * end of obj ram_0 *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.RAMX -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.ramx +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.SEL0.txt b/ProDOS.203/ProDOS.S.SEL0.txt index 360330ed..2b590996 100644 --- a/ProDOS.203/ProDOS.S.SEL0.txt +++ b/ProDOS.203/ProDOS.S.SEL0.txt @@ -292,6 +292,6 @@ dsp1pfx .DA #01 1 parameter * end of obj sel_0 *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL0 -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.sel0 +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.SEL1.txt b/ProDOS.203/ProDOS.S.SEL1.txt index 770d394c..43021ed0 100644 --- a/ProDOS.203/ProDOS.S.SEL1.txt +++ b/ProDOS.203/ProDOS.S.SEL1.txt @@ -400,6 +400,6 @@ rd_refn .HS 01 reference number dhdr_len .HS 00 directory header length (actually uses 2 bytes) *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL1 -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.sel1 +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.SEL2.txt b/ProDOS.203/ProDOS.S.SEL2.txt index 8adcb893..118407e5 100644 --- a/ProDOS.203/ProDOS.S.SEL2.txt +++ b/ProDOS.203/ProDOS.S.SEL2.txt @@ -435,6 +435,6 @@ button2 .DA #$0B .AS "Cancel: Esc" *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL2 -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.sel2 +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.TCLK.txt b/ProDOS.203/ProDOS.S.TCLK.txt index 50014b27..86843ffe 100644 --- a/ProDOS.203/ProDOS.S.TCLK.txt +++ b/ProDOS.203/ProDOS.S.TCLK.txt @@ -89,17 +89,17 @@ tdays .DA #$00 January * is the year which January 1st is Sunday, and so on backwards thru * the days of the week. -yradj .DA #$12 Monday +yradj .DA #$18 Monday .DA #$17 Sunday .DA #$16 Saturday - .DA #$15 Friday - .DA #$14 Thursday - .DA #$14 Wednesday - .DA #$13 Tuesday + .DA #$1B Friday + .DA #$1A Thursday + .DA #$19 Wednesday + .DA #$18 Tuesday TCLK.END .HS 000000 pad *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.TCLK -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.tclk +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XDOS.A.txt b/ProDOS.203/ProDOS.S.XDOS.A.txt index 30c00ef9..941c32dc 100644 --- a/ProDOS.203/ProDOS.S.XDOS.A.txt +++ b/ProDOS.203/ProDOS.S.XDOS.A.txt @@ -642,6 +642,6 @@ svdevn ldy namptr index to 1st byte of this entry. rts end of block file manager MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.A -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xdos.a +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XDOS.B.txt b/ProDOS.203/ProDOS.S.XDOS.B.txt index 1c5c7a49..ee8e5278 100644 --- a/ProDOS.203/ProDOS.S.XDOS.B.txt +++ b/ProDOS.203/ProDOS.S.XDOS.B.txt @@ -862,6 +862,6 @@ L3C0B tya lsr rts MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.B -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xdos.b +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XDOS.C.txt b/ProDOS.203/ProDOS.S.XDOS.C.txt index 8dec3932..5c40866b 100644 --- a/ProDOS.203/ProDOS.S.XDOS.C.txt +++ b/ProDOS.203/ProDOS.S.XDOS.C.txt @@ -723,6 +723,6 @@ L41C1 tya calc position of next fcb. MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.C -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xdos.c +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XDOS.D.txt b/ProDOS.203/ProDOS.S.XDOS.D.txt index c1542c07..225cca27 100644 --- a/ProDOS.203/ProDOS.S.XDOS.D.txt +++ b/ProDOS.203/ProDOS.S.XDOS.D.txt @@ -574,6 +574,6 @@ twrprot1 sta unitnum make the device status call rts carry is indeterminate. MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.D -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xdos.d +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XDOS.E.txt b/ProDOS.203/ProDOS.S.XDOS.E.txt index 3460785f..a281386e 100644 --- a/ProDOS.203/ProDOS.S.XDOS.E.txt +++ b/ProDOS.203/ProDOS.S.XDOS.E.txt @@ -602,6 +602,6 @@ L4B1A ldx #$00 rts MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.E -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xdos.e +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XDOS.F.txt b/ProDOS.203/ProDOS.S.XDOS.F.txt index e5472243..fa0312cf 100644 --- a/ProDOS.203/ProDOS.S.XDOS.F.txt +++ b/ProDOS.203/ProDOS.S.XDOS.F.txt @@ -759,6 +759,6 @@ delflag .HS 00 used by 'detree' to know if called from delete (destroy). cortflag .HS 00 cortland flag. 1 = Cortland system (must stay within page boundary) *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.F -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xdos.f +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.XRW.txt b/ProDOS.203/ProDOS.S.XRW.txt index 70276766..eb2174c9 100644 --- a/ProDOS.203/ProDOS.S.XRW.txt +++ b/ProDOS.203/ProDOS.S.XRW.txt @@ -878,6 +878,6 @@ spunit .HS 0000000000000000 ref pathbuf-$10smartport unit numbers * pathname buffer starts at this page boundary (pathbuf = $D700) *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S.XRW -LOAD USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s.xrw +LOAD usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.203/ProDOS.S.txt b/ProDOS.203/ProDOS.S.txt index e778f582..0af859ab 100644 --- a/ProDOS.203/ProDOS.S.txt +++ b/ProDOS.203/ProDOS.S.txt @@ -5,11 +5,11 @@ NEW .OR $2000 .TF PRODOS.203TC,TSYS *-------------------------------------- - .INB INC/ZP.I - .INB INC/IO.I - .INB INC/MONITOR.I - .INB INC/MLI.I - .INB INC/MLI.E.I + .INB inc/zp.i + .INB inc/io.i + .INB inc/monitor.i + .INB inc/mli.i + .INB inc/mli.e.i *-------------------------------------- MMStartUp .EQ $0202 NewHandle .EQ $0902 @@ -174,58 +174,58 @@ gbuf .EQ $DC00 general purpose 512 byte block buffer * $5D00 sel_1 enhanced quit code (Bird's Better Bye) * $6000 sel_2 GQuit dispatcher support *-------------------------------------- - .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.A - .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.B + .INB usr/src/prodos.203/prodos.s.ldr.a + .INB usr/src/prodos.203/prodos.s.ldr.b RAM .PH $FF00 - .INB USR/SRC/PRODOS.203/PRODOS.S.RAM + .INB usr/src/prodos.203/prodos.s.ram .EP IRQ .PH $FF9B - .INB USR/SRC/PRODOS.203/PRODOS.S.IRQ + .INB usr/src/prodos.203/prodos.s.irq .EP GP .PH $BF00 - .INB USR/SRC/PRODOS.203/PRODOS.S.GP + .INB usr/src/prodos.203/prodos.s.gp .EP TCLK .PH $D742 - .INB USR/SRC/PRODOS.203/PRODOS.S.TCLK + .INB usr/src/prodos.203/prodos.s.tclk .EP CCLK .PH $D742 - .INB USR/SRC/PRODOS.203/PRODOS.S.CCLK + .INB usr/src/prodos.203/prodos.s.cclk .EP XDOS .PH $DE00 - .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.A - .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.B - .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.C - .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.D - .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.E - .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.F + .INB usr/src/prodos.203/prodos.s.xdos.a + .INB usr/src/prodos.203/prodos.s.xdos.b + .INB usr/src/prodos.203/prodos.s.xdos.c + .INB usr/src/prodos.203/prodos.s.xdos.d + .INB usr/src/prodos.203/prodos.s.xdos.e + .INB usr/src/prodos.203/prodos.s.xdos.f .EP RAMX .PH $200 - .INB USR/SRC/PRODOS.203/PRODOS.S.RAMX + .INB usr/src/prodos.203/prodos.s.ramx .EP XRW .PH $D000 - .INB USR/SRC/PRODOS.203/PRODOS.S.XRW + .INB usr/src/prodos.203/prodos.s.xrw .EP SEL0 .PH $1000 - .INB USR/SRC/PRODOS.203/PRODOS.S.SEL0 + .INB usr/src/prodos.203/prodos.s.sel0 .EP SEL1 .PH $1000 - .INB USR/SRC/PRODOS.203/PRODOS.S.SEL1 + .INB usr/src/prodos.203/prodos.s.sel1 .EP SEL2 .PH $1000 - .INB USR/SRC/PRODOS.203/PRODOS.S.SEL2 + .INB usr/src/prodos.203/prodos.s.sel2 .EP *-------------------------------------- MAN -SAVE USR/SRC/PRODOS.203/PRODOS.S +SAVE usr/src/prodos.203/prodos.s ASM diff --git a/ProDOS.FX/ProDOS.S.CCLK.txt b/ProDOS.FX/ProDOS.S.CCLK.txt index 034e87e9..16195475 100644 --- a/ProDOS.FX/ProDOS.S.CCLK.txt +++ b/ProDOS.FX/ProDOS.S.CCLK.txt @@ -50,7 +50,10 @@ CCLK.START >SHORTMX 8 bit mode. rts savestate .HS 00 state of the state register *-------------------------------------- + .LIST ON CCLK.LEN .EQ *-CCLK.START + .LIST OFF +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.cclk LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.TCLK.txt b/ProDOS.FX/ProDOS.S.TCLK.txt index d18fcd2a..a92a464b 100644 --- a/ProDOS.FX/ProDOS.S.TCLK.txt +++ b/ProDOS.FX/ProDOS.S.TCLK.txt @@ -101,16 +101,19 @@ tdays .DA #$00 January * to the year in which January 1st falls on a Monday. The 2nd entry * is the year which January 1st is Sunday, and so on backwards thru * the days of the week. - -yradj .DA #$12 Monday +* https://calormen.com/tmp/proyear.html +* For 2022 - 2027: $18, $17, $16, $1B, $1A, $19, $18 +yradj .DA #$18 Monday .DA #$17 Sunday .DA #$16 Saturday - .DA #$15 Friday - .DA #$14 Thursday - .DA #$14 Wednesday - .DA #$13 Tuesday - + .DA #$1B Friday + .DA #$1A Thursday + .DA #$19 Wednesday + .DA #$18 Tuesday +*-------------------------------------- + .LIST ON TCLK.LEN .EQ *-TCLK.START + .LIST OFF *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.tclk diff --git a/ROOT/asmtest/TESTGUI.S.txt b/ROOT/asmtest/TESTGUI.S.txt index 2b8e521b..bcf8e584 100644 --- a/ROOT/asmtest/TESTGUI.S.txt +++ b/ROOT/asmtest/TESTGUI.S.txt @@ -112,6 +112,11 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F. * >PUSHW hLogo * >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp + >PUSHB hWND + >PUSHBI S.WND.hPTR + >PUSHWI PTR.T.WAIT + >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp + >PUSHB hWND >PUSHBI S.WND.pTITLE >PUSHW L.WND.TITLE @@ -201,7 +206,7 @@ WND.Test.1 >PUSHB hWND >PUSHBI C.BLACK C16.D.GREEN rts -WND.Test.2 >PUSHWI 250 +WND.Test.2 >PUSHWI 240 >PUSHWI 60 >LIBCALL hLIBGUI,LIBGUI.DRAW.Line rts diff --git a/ROOT/ctest/testgui.c..txt b/ROOT/ctest/testgui.c..txt index b5915f87..4fc36c24 100644 --- a/ROOT/ctest/testgui.c..txt +++ b/ROOT/ctest/testgui.c..txt @@ -11,8 +11,8 @@ int main(int argc, char *argv[]) 20,20,200,100); guiSetProp(hWND, WND_P_pTITLE, "Libgui C API"); guiSetProp(hWND, WND_P_pSTATUS, "Status bar"); - guiSetProp(hWND, WND_P_BGCOLOR, pC_WHITE); - + guiSetProp(hWND, WND_P_BGCOLOR, C_WHITE); + guiSetProp(hWND, WND_P_pPTR, PTR_T_CROSS); guiShowWnd(hWND); do { diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt index 47c5358a..14f14f8e 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/GUI.S.txt @@ -92,9 +92,9 @@ CS.RUN >SLEEP rts *-------------------------------------- CS.RUN.MsgBox >PUSHW L.ABOUT.T - >PUSHW L.ABOUT.M - >PUSHWI BM.ID.INFO - >PUSHBI BUT.ID.OK + >PUSHWI BM.ID.INFO + >PUSHW L.ABOUT.M + >PUSHBI 63 BUT.ID.OK >LIBCALL hLIBGUI,LIBGUI.MBOX.MsgBox rts *-------------------------------------- @@ -118,7 +118,9 @@ CS.END LIBGUI .AZ "libgui" hLIBGUI .BS 1 ABOUT.T .AZ "About GUI" -ABOUT.M .AZ "MsgBox message." +ABOUT.M .CS "MsgBox demo with all possible buttons.\r\n" + .CS "...Line 2...\r\n" + .CZ "...Line 3.\r\n" GUITEST1 .AZ "${ROOT}root/asmtest/testgui" GUITEST2 .AZ "${ROOT}root/ctest/testgui" *-------------------------------------- diff --git a/SCMASM.31/SCMASM.S.DIR1.txt b/SCMASM.31/SCMASM.S.DIR1.txt index 46ca8427..05ae614f 100644 --- a/SCMASM.31/SCMASM.S.DIR1.txt +++ b/SCMASM.31/SCMASM.S.DIR1.txt @@ -85,12 +85,12 @@ PSTA JSR EXPR.DEFINED GET EXPR VALUE *-------------------------------------- DIR1.PS jsr GNNB bcs .9 - + sta DLIM SAVE DELIMITER ldx #$ff ldy CHAR.PNTR - + .1 inx lda WBUF,Y and #$7F @@ -99,19 +99,19 @@ DIR1.PS jsr GNNB iny cmp DLIM bne .1 - + txa jsr EMIT - + .2 jsr GNC jsr EMIT dex bne .2 - + clc rts - -.9 jmp ERBA2 + +.9 jmp ERBA2 *-------------------------------------- DIR1.EscChars .AS "abefnrtv" .HS 5C27223F25 \'"?% @@ -132,10 +132,10 @@ DIR1.CS lda #0 *-------------------------------------- PSAZ jsr PSAS jmp EMIT.ZERO - + PSAT lda #$80 LAST BYTE HAS OPPOSITE BIT 7 .HS 2C ...SKIP OVER 2 BYTES - + PSAS lda #0 ALL BYTES GET SAME BIT 7 clc @@ -160,47 +160,47 @@ DIR1.String sta AT.HIBIT .15 sta DLIM SAVE DELIMITER jsr GNC.UC GET NEXT CHAR -.9 bcs ERBA2 END OF LINE IS BAD NEWS - + bcs .9 END OF LINE IS BAD NEWS + cmp DLIM CHK IF DELIMITER beq .4 YES, NO STRING IN BETWEEN - + .2 jsr GNC.UC GET NEXT CHAR - bcs ERBA2 END OF LINE IS BAD NEWS - + bcs .9 END OF LINE IS BAD NEWS + cmp DLIM CHK IF DELIMITER beq .3 YES, FINISH UP AND RETURN - + lda WBUF-2,Y ...NO, GET PREVIOUS CHAR bit BYTE bpl .27 - + cmp #'\' "\?" ? bne .27 jsr GNC.UC GET NEXT CHAR - bcs ERBA2 END OF LINE IS BAD NEWS + bcs .9 END OF LINE IS BAD NEWS lda WBUF-2,Y get "?" ldx #DIR1.EscChars.L-1 - + .20 cmp DIR1.EscChars,x beq .21 dex bpl .20 - bmi ERBA2 - + bmi .9 + .21 lda DIR1.EscCodes,x ldx WBUF-1,Y cpx DLIM beq .30 - + .27 ora AS.HIBIT MERGE WITH TOP BIT - jsr EMIT + jsr EMIT jmp .2 GO FOR ANOTHER ONE - + .3 lda WBUF-2,Y GET PREVIOUS CHAR .30 ora AS.HIBIT MERGE WITH SELECTED BIT 7 @@ -214,37 +214,102 @@ DIR1.String sta AT.HIBIT beq .1 .5 rts + +.9 jmp ERBA2 +*--------------------------------- +* .HX -- HEX DIGIT STRING +*--------------------------------- +PSHX jsr GNNB GET NEXT NON-BLANK CHAR + bcs ERBA2 END OF LINE + + jsr BACKUP.CHAR.PNTR + +.1 jsr PSHX.GetNibble + bcs .8 + +.2 sta SYM.VALUE + + jsr PSHX.GetNibble + bcs .7 + + asl + asl + asl + asl + ora SYM.VALUE + jsr EMIT + jsr PSHX.GetNibble + bcc .2 + + clc + rts + +.7 lda SYM.VALUE + jsr EMIT + +.8 rts +*--------------------------------- +PSHX.GetNibble +.1 jsr GNC.UC IGNORE CASE + beq .9 + + cmp #'.' ALLOW PERIODS + beq .1 ...BUT IGNORE THEM + + eor #$30 + cmp #$0A + bcc .3 ...0-9, TEXT VALIDITY + + adc #$88 ...MIGHT BE A...F + +.2 cmp #$FA + bcc .3 NOT A-F EITHER, RETURN CARRY CLEAR + + and #$0F TRIM HEX A...F + +.3 clc + rts + +.9 sec + rts *--------------------------------- * .HS -- HEX STRING *--------------------------------- -PSHS JSR GNNB GET NEXT NON-BLANK CHAR - BCS ERBA2 END OF LINE - JSR BACKUP.CHAR.PNTR - JSR TRY.HEX.STRING - BNE ERBA2 ...ERROR, BAD ADDRESS - RTS +PSHS jsr GNNB GET NEXT NON-BLANK CHAR + bcs ERBA2 END OF LINE + + jsr BACKUP.CHAR.PNTR + jsr TRY.HEX.STRING + bne ERBA2 ...ERROR, BAD ADDRESS + + rts *-------------------------------- -THX1 JSR HEX.DIGIT GET NEXT HEX DIGIT - BCC ERBA2 ERROR, ODD DIGITS - LDA SYM.VALUE GET CONVERTED VALUE - JSR EMIT -TRY.HEX.STRING -.1 JSR HEX.DIGIT - BCS THX1 - LDA CURRENT.CHAR - BEQ .2 ...END OF LINE - CMP #',' IF COMMA, GO GET MORE BYTES - BEQ .1 ...OKAY - CMP #' ' IF BLANK, VALID END OF STRING -.2 RTS +THX1 jsr HEX.DIGIT GET NEXT HEX DIGIT + bcc ERBA2 ERROR, ODD DIGITS + + lda SYM.VALUE GET CONVERTED VALUE + jsr EMIT *-------------------------------- -ERBA2 JMP ERBA ERROR: BAD ADDRESS -GT255ERR LDY #QER8 VALUE > 255 ERROR - .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES -NOLBLERR LDY #QER1 "NO LABEL" - .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES -UNDF LDY #QER6 "UNDEF" - JMP SOFT.ERROR +TRY.HEX.STRING jsr HEX.DIGIT + bcs THX1 + + lda CURRENT.CHAR + beq .2 ...END OF LINE + + cmp #',' IF COMMA, GO GET MORE BYTES + beq TRY.HEX.STRING ...OKAY + + cmp #' ' IF BLANK, VALID END OF STRING + +.2 rts +*-------------------------------- +ERBA2 jmp ERBA ERROR: BAD ADDRESS +GT255ERR ldy #QER8 VALUE > 255 ERROR + .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES +NOLBLERR ldy #QER1 "NO LABEL" + .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES +UNDF ldy #QER6 "UNDEF" + jmp SOFT.ERROR *--------------------------------- * .EQ -- EQUATE *--------------------------------- diff --git a/SCMASM.31/SCMASM.S.XTDIR.txt b/SCMASM.31/SCMASM.S.XTDIR.txt index 03b16a9f..d0ee3015 100644 --- a/SCMASM.31/SCMASM.S.XTDIR.txt +++ b/SCMASM.31/SCMASM.S.XTDIR.txt @@ -22,13 +22,14 @@ OPTBL.DIR >DIR A,C,DIR.AC ASCII STRING COMPRESSED >DIR D,A,PSDA DATA >DIR D,O,PSDO DO >DIR D,U,D.DUMMY DUMMY - >DIR E,D,D.END.DUMMY + >DIR E,D,D.END.DUMMY >DIR E,L,PSEL ELSE >DIR E,N,PSEN END OF SOURCE - >DIR E,P,D.END.PHASE + >DIR E,P,D.END.PHASE >DIR E,Q,PSEQ EQUATE >DIR F,I,PSFI FIN >DIR H,S,PSHS HEX STRING + >DIR H,X,PSHX HEX DIGIT STRING >DIR I,N,PSIN INCLUDE >DIR L,I,PSLI LIST ON,/ OFF >DIR M,A,PSMA MACRO