ProDOS 203 / FX:TC mod for year 2022-2026

FORMAT: new switches & checks
SH:BREAK in FOR and WHILE
ASM / S-C MASM: new directives, CString support and .HX
LC / UC:bugfix
DHGR.DRV:bugfix
LIBGUI:wip
CC:wip
This commit is contained in:
burniouf 2022-12-07 08:02:29 +01:00
parent 8bd9dbd4e0
commit 9a7d20a7e1
80 changed files with 3350 additions and 2294 deletions

View File

@ -44,6 +44,7 @@ Table-driven, add your favorite CPU creating a new CPU asm.xxxx file.
| .EQ | EQuate | S-C, A2osX | Working | | | | .EQ | EQuate | S-C, A2osX | Working | | |
| .FIN | conditional end| 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` | | | .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 | | .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` | | | .LI,.LIST | | S-C, A2osX | Working | `.LIST ON/OFF CON/COFF MON/MOFF XON/XOFF` | |
| .MA | MAcro deffinition | S-C, A2osX | Working | `.MA >MYMACRO` | | | .MA | MAcro deffinition | S-C, A2osX | Working | `.MA >MYMACRO` | |

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -24,7 +24,7 @@
<Keywords name="Folders in comment, open"></Keywords> <Keywords name="Folders in comment, open"></Keywords>
<Keywords name="Folders in comment, middle"></Keywords> <Keywords name="Folders in comment, middle"></Keywords>
<Keywords name="Folders in comment, close"></Keywords> <Keywords name="Folders in comment, close"></Keywords>
<Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.AZ&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED&#x000D;&#x000A;.CS&#x000D;&#x000A;.CZ&#x000D;&#x000A;.PS</Keywords> <Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.AZ&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED&#x000D;&#x000A;.CS&#x000D;&#x000A;.CZ&#x000D;&#x000A;.PS&#x000D;&#x000A;.HX</Keywords>
<Keywords name="Keywords2">adc&#x000D;&#x000A;and&#x000D;&#x000A;asl&#x000D;&#x000A;bit&#x000D;&#x000A;brk&#x000D;&#x000A;clc&#x000D;&#x000A;cld&#x000D;&#x000A;cli&#x000D;&#x000A;clv&#x000D;&#x000A;cmp&#x000D;&#x000A;cpx&#x000D;&#x000A;cpy&#x000D;&#x000A;dec&#x000D;&#x000A;dex&#x000D;&#x000A;dey&#x000D;&#x000A;eor&#x000D;&#x000A;inc&#x000D;&#x000A;inx&#x000D;&#x000A;iny&#x000D;&#x000A;lda&#x000D;&#x000A;ldx&#x000D;&#x000A;ldy&#x000D;&#x000A;lsr&#x000D;&#x000A;nop&#x000D;&#x000A;ora&#x000D;&#x000A;rmb&#x000D;&#x000A;rol&#x000D;&#x000A;ror&#x000D;&#x000A;rti&#x000D;&#x000A;rts&#x000D;&#x000A;sbc&#x000D;&#x000A;sec&#x000D;&#x000A;sed&#x000D;&#x000A;sei&#x000D;&#x000A;smb&#x000D;&#x000A;sta&#x000D;&#x000A;stp&#x000D;&#x000A;stx&#x000D;&#x000A;sty&#x000D;&#x000A;stz&#x000D;&#x000A;tax&#x000D;&#x000A;tay&#x000D;&#x000A;trb&#x000D;&#x000A;tsb&#x000D;&#x000A;tsx&#x000D;&#x000A;txa&#x000D;&#x000A;txs&#x000D;&#x000A;tya&#x000D;&#x000A;wai</Keywords> <Keywords name="Keywords2">adc&#x000D;&#x000A;and&#x000D;&#x000A;asl&#x000D;&#x000A;bit&#x000D;&#x000A;brk&#x000D;&#x000A;clc&#x000D;&#x000A;cld&#x000D;&#x000A;cli&#x000D;&#x000A;clv&#x000D;&#x000A;cmp&#x000D;&#x000A;cpx&#x000D;&#x000A;cpy&#x000D;&#x000A;dec&#x000D;&#x000A;dex&#x000D;&#x000A;dey&#x000D;&#x000A;eor&#x000D;&#x000A;inc&#x000D;&#x000A;inx&#x000D;&#x000A;iny&#x000D;&#x000A;lda&#x000D;&#x000A;ldx&#x000D;&#x000A;ldy&#x000D;&#x000A;lsr&#x000D;&#x000A;nop&#x000D;&#x000A;ora&#x000D;&#x000A;rmb&#x000D;&#x000A;rol&#x000D;&#x000A;ror&#x000D;&#x000A;rti&#x000D;&#x000A;rts&#x000D;&#x000A;sbc&#x000D;&#x000A;sec&#x000D;&#x000A;sed&#x000D;&#x000A;sei&#x000D;&#x000A;smb&#x000D;&#x000A;sta&#x000D;&#x000A;stp&#x000D;&#x000A;stx&#x000D;&#x000A;sty&#x000D;&#x000A;stz&#x000D;&#x000A;tax&#x000D;&#x000A;tay&#x000D;&#x000A;trb&#x000D;&#x000A;tsb&#x000D;&#x000A;tsx&#x000D;&#x000A;txa&#x000D;&#x000A;txs&#x000D;&#x000A;tya&#x000D;&#x000A;wai</Keywords>
<Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;&#x000D;&#x000A;^</Keywords> <Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;&#x000D;&#x000A;^</Keywords>
<Keywords name="Keywords4">.1&#x000D;&#x000A;.2&#x000D;&#x000A;.3&#x000D;&#x000A;.4&#x000D;&#x000A;.5&#x000D;&#x000A;.6&#x000D;&#x000A;.7&#x000D;&#x000A;.8&#x000D;&#x000A;.9&#x000D;&#x000A;</Keywords> <Keywords name="Keywords4">.1&#x000D;&#x000A;.2&#x000D;&#x000A;.3&#x000D;&#x000A;.4&#x000D;&#x000A;.5&#x000D;&#x000A;.6&#x000D;&#x000A;.7&#x000D;&#x000A;.8&#x000D;&#x000A;.9&#x000D;&#x000A;</Keywords>

View File

@ -478,7 +478,13 @@ DIR.FI >LDA.G ASM.DO.StackPtr
clc clc
rts rts
*--------------------------------------- *---------------------------------------
DIR.HS jsr SRC.GetNextCharNB DIR.HS clc
.HS B0 BCS
DIR.HX sec
ror DIR.Word
jsr SRC.GetNextCharNB
bcs .99 bcs .99
jsr SRC.IsDigit16 jsr SRC.IsDigit16
@ -503,18 +509,24 @@ DIR.HS jsr SRC.GetNextCharNB
jsr OUT.EmitByte jsr OUT.EmitByte
bcc .5 bcc .5
rts 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 .4 ora DIR.Byte
lda DIR.Byte jsr OUT.EmitByte
asl
asl
asl
asl
sta DIR.Byte
pla
ora DIR.Byte
.4 jsr OUT.EmitByte
bcs .9 bcs .9
jsr SRC.GetNextChar jsr SRC.GetNextChar

View File

@ -172,6 +172,7 @@ DIR.EL.ID .EQ *-J.DIRECTIVES
DIR.FI.ID .EQ *-J.DIRECTIVES DIR.FI.ID .EQ *-J.DIRECTIVES
.DA DIR.FI .DA DIR.FI
.DA DIR.HS .DA DIR.HS
.DA DIR.HX
.DA DIR.IN .DA DIR.IN
.DA DIR.IN .DA DIR.IN
.DA DIR.IN .DA DIR.IN
@ -488,6 +489,7 @@ T.DIRECTIVES .PS "AC"
.PS "EQ" .PS "EQ"
.PS "FIN" .PS "FIN"
.PS "HS" .PS "HS"
.PS "HX"
.PS "IN" .PS "IN"
.PS "INB" .PS "INB"
.PS "INB1" .PS "INB1"

View File

@ -12,15 +12,13 @@ CODE.Init stz ZPCCConst
>LDYAI 20 char *ARGV[10] >LDYAI 20 char *ARGV[10]
>STYA ZPCCData >STYA ZPCCData
lda #'_' >STZ.G CC.ScopeID
>STA.G CC.CPSPFX+1 iny
lda #'A'
>STA.G CC.CPSID
iny CC.CPSID+1
sta (pData),y sta (pData),y
lda #'_'
>STA.G CC.Label
clc clc
.99 rts .99 rts
*-------------------------------------- *--------------------------------------

View File

@ -17,7 +17,9 @@ CORE.Init lda #SL._
>SYSCALL SListNew >SYSCALL SListNew
bcs .9 bcs .9
>STA.G CC.hScopes >STA.G CC.hSyms
ldy #CC.ScopeIDs
sty ScopeIdx sty ScopeIdx
>LDYAI 256 >LDYAI 256
@ -46,21 +48,11 @@ CORE.Init lda #SL._
CORE.Quit jsr FIO.FClose CORE.Quit jsr FIO.FClose
bne CORE.Quit bne CORE.Quit
ldy ScopeIdx >LDA.G CC.hSyms
beq .1 beq .1
.10 lda (pData),y
>SYSCALL SListFree >SYSCALL SListFree
ldy ScopeIdx
cpy #CC.hScopes
beq .1
dec ScopeIdx
dey
bra .10
.1 >LDA.G CC.hTags .1 >LDA.G CC.hTags
beq .2 beq .2

View File

@ -105,15 +105,12 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual
bcs .98 bcs .98
cmp #';' cmp #';'
beq .28 beq .8
cmp #'{' cmp #'{'
bne .26 bne .26
jsr CORE.GetNCharNB skip '{' jmp CORE.GetNCharNBNL Skip '{'
bcs .98
jmp SYM.StoreF
*-------------------------------------- *--------------------------------------
* Initializer * Initializer
*-------------------------------------- *--------------------------------------
@ -141,7 +138,7 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual
cmp #';' cmp #';'
bne .98 bne .98
clc .8 clc
rts rts
.98 lda #E.CSYN .98 lda #E.CSYN

View File

@ -1,19 +1,37 @@
NEW NEW
AUTO 3,1 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 bcs .99
ldx #$80 CPStmt.fDef state jsr SCOPE.New
jsr STMT.CPStmt.NEW
bcs .99 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 bcs .99
jsr CORE.GetNCharNBNL Skip ( .11 jsr CORE.GetNCharNBNL Skip (
bcs .9 bcs .9
cmp #')' func() cmp #')' func()
@ -61,12 +79,10 @@ F.Decl stz LocalPtr
cmp #';' cmp #';'
bne .7 bne .7
jsr SYM.FreeScope discard local scope jsr SYM.Update
bcs .99
lda CStackPtr jsr SCOPE.Close discard local scope
clc
adc #CPS
sta CStackPtr discard this CPStmt + T/Q
stz LocalPtr reset for DEBUG Message stz LocalPtr reset for DEBUG Message
@ -75,8 +91,8 @@ F.Decl stz LocalPtr
*-------------------------------------- *--------------------------------------
.7 cmp #'{' .7 cmp #'{'
bne .9 bne .9
*--------------------------------------
bit bInitCode F.Def bit bInitCode
bmi .8 bmi .8
dec bInitCode dec bInitCode
@ -89,12 +105,17 @@ F.Decl stz LocalPtr
.8 >LDYA ZPCCCode f() Code starts HERE .8 >LDYA ZPCCCode f() Code starts HERE
jsr SYM.SetAddrYA jsr SYM.SetAddrYA
jsr SYM.Update
bcs .99
lda LocalPtr lda LocalPtr
jsr CODE.LDAI A = f() ARGS size jsr CODE.LDAI A = f() ARGS size
bcs .99 bcs .99
>LDYA L.PCC.ENTER >LDYA L.PCC.ENTER
jmp CODE.EmitPCC Store f() Declaration / Start Definition jmp CODE.EmitPCC Store f() Declaration / Start Definition
.99 rts
*-------------------------------------- *--------------------------------------
F.DeclGetTQ lda (ZPLineBufPtr) F.DeclGetTQ lda (ZPLineBufPtr)
cmp #'.' cmp #'.'
@ -142,6 +163,23 @@ F.DeclGetTQ lda (ZPLineBufPtr)
sec sec
rts 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 F.NewArg >LDYA.G CC.SymID
>STYA.G CC.SymIDSave >STYA.G CC.SymIDSave
@ -151,10 +189,11 @@ F.NewArg >LDYA.G CC.SymID
>LDYA ZPPtr2 >LDYA ZPPtr2
ldx #SYM.SC.AUTO ldx #SYM.SC.AUTO
sec Reset Buffer sec Reset Buffer
* >DEBUG
jsr SYM.New jsr SYM.New
bcs .9 bcs .9
jsr SYM.StoreL Store f() Args in Local scope jsr SYM.Store
bcs .9 bcs .9
>LDA.G CC.hSymBuf >LDA.G CC.hSymBuf
@ -170,10 +209,10 @@ F.Def.END >LDYA L.PCC.LEAVE
jsr CODE.EmitPCC jsr CODE.EmitPCC
bcs .9 bcs .9
jsr SYM.FreeScope jsr SCOPE.Close
stz LocalPtr back to global stz LocalPtr back to global
>DEBUG
clv pop context clv pop context
clc clc
.9 rts .9 rts

View File

@ -21,7 +21,7 @@ KW.IF jsr STMT.NewCPS00
jsr KW.TestZero Y,A=T/Q jsr KW.TestZero Y,A=T/Q
lda #'E' lda #'E'
jsr SYM.LookupA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C emit JMP else lda #$4C emit JMP else
@ -51,14 +51,14 @@ KW.IF.END jsr CORE.GetCharNBNL
bcc .2 bcc .2
.1 lda #'E' define ELSE Label .1 lda #'E' define ELSE Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
clv pop context clv pop context
rts rts
*-------------------------------------- *--------------------------------------
.2 lda #'X' .2 lda #'X'
jsr SYM.LookupA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C emit JMP exit lda #$4C emit JMP exit
@ -66,7 +66,7 @@ KW.IF.END jsr CORE.GetCharNBNL
bcs .99 bcs .99
lda #'E' define ELSE Label lda #'E' define ELSE Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
lda #KW.ELSE.ID replace IF by ELSE keyword lda #KW.ELSE.ID replace IF by ELSE keyword
@ -88,7 +88,7 @@ KW.ELSE lda #E.CSYN illegal
rts rts
*-------------------------------------- *--------------------------------------
KW.ELSE.END lda #'X' define EXIT Label KW.ELSE.END lda #'X' define EXIT Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
clv pop context clv pop context
@ -98,7 +98,7 @@ KW.WHILE jsr STMT.NewCPS00
bcs .99 bcs .99
lda #'C' define CONT Label lda #'C' define CONT Label
jsr SYM.NewA jsr SYM.NewLabelA
bcs .99 bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
@ -116,7 +116,7 @@ KW.WHILE jsr STMT.NewCPS00
jsr KW.TestZero jsr KW.TestZero
lda #'B' lda #'B'
jsr SYM.LookupA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C emit JMP break: lda #$4C emit JMP break:
@ -140,7 +140,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP
bcs .99 bcs .99
lda #'C' lda #'C'
jsr STMT.GetLabelA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C lda #$4C
@ -148,7 +148,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP
bcs .99 bcs .99
lda #'B' define BREAK Label lda #'B' define BREAK Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
clv pop context clv pop context
@ -159,7 +159,7 @@ KW.DO jsr STMT.NewCPS00
bcs .99 bcs .99
lda #'C' define CONT Label lda #'C' define CONT Label
jsr SYM.NewA jsr SYM.NewLabelA
bcs .99 bcs .99
jmp STMT.SetCPSType jmp STMT.SetCPSType
@ -185,7 +185,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
jsr KW.TestnZero jsr KW.TestnZero
lda #'C' lda #'C'
jsr STMT.GetLabelA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C emit JMP cont lda #$4C emit JMP cont
@ -193,7 +193,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
bcs .99 bcs .99
lda #'B' define BREAK Label lda #'B' define BREAK Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
@ -265,7 +265,7 @@ KW.FOR jsr CC.GetCharNB
bcs .9 bcs .9
*-------------------------------------- *--------------------------------------
lda #'L' LOOP Label lda #'L' LOOP Label
jsr SYM.NewA jsr SYM.NewLabelA
bcs .99 bcs .99
jsr EXP.Eval00 get e2 jsr EXP.Eval00 get e2
@ -275,14 +275,14 @@ KW.FOR jsr CC.GetCharNB
bcs .99 bcs .99
lda #'B' lda #'B'
jsr SYM.LookupA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C emit JMP break: lda #$4C emit JMP break:
jsr CODE.TOABSYX jsr CODE.TOABSYX
lda #'S' lda #'S'
jsr SYM.LookupA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$20 emit JSR s: lda #$20 emit JSR s:
@ -298,7 +298,7 @@ KW.FOR jsr CC.GetCharNB
bcs .9 bcs .9
*-------------------------------------- *--------------------------------------
lda #'C' CONT Label lda #'C' CONT Label
jsr SYM.NewA jsr SYM.NewLabelA
bcs .99 bcs .99
jsr STMT.Get get s3 jsr STMT.Get get s3
@ -313,14 +313,14 @@ KW.FOR jsr CC.GetCharNB
bne .9 bne .9
lda #'L' lda #'L'
jsr SYM.LookupA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C lda #$4C
jsr CODE.TOABSYX emit JMP loop jsr CODE.TOABSYX emit JMP loop
lda #'S' S Label lda #'S' S Label
jsr SYM.NewA jsr SYM.NewLabelA
bcs .99 bcs .99
jmp STMT.SetCPSType jmp STMT.SetCPSType
@ -335,7 +335,7 @@ KW.FOR.END lda #$60
bcs .99 bcs .99
lda #'B' define BREAK Label lda #'B' define BREAK Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
clv pop context clv pop context
@ -390,7 +390,7 @@ KW.SWITCH jsr CC.GetCharNB
bne .98 bne .98
lda #'J' lda #'J'
jsr STMT.LookupLabelA jsr SYM.LookupLabelA
bcs .99 bcs .99
lda #$4C emit JMP JmpTable lda #$4C emit JMP JmpTable
@ -409,7 +409,7 @@ KW.SWITCH jsr CC.GetCharNB
KW.SWITCH.RTS rts KW.SWITCH.RTS rts
*-------------------------------------- *--------------------------------------
KW.SWITCH.END lda #'J' define JMP Label KW.SWITCH.END lda #'J' define JMP Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs KW.SWITCH.RTS bcs KW.SWITCH.RTS
lda CStackPtr lda CStackPtr
@ -470,7 +470,7 @@ KW.SWITCH.END lda #'J' define JMP Label
bcs .99 bcs .99
lda #'D' lda #'D'
jsr STMT.LookupLabelA jsr SYM.LookupLabelA
bcs .3 bcs .3
lda #$4C emit JMP Default lda #$4C emit JMP Default
@ -478,7 +478,7 @@ KW.SWITCH.END lda #'J' define JMP Label
bcs .99 bcs .99
.3 lda #'B' define BREAK Label .3 lda #'B' define BREAK Label
jsr STMT.NewLabelA jsr SYM.NewLabelA
bcs .99 bcs .99
lda CStackPtr lda CStackPtr
@ -579,7 +579,7 @@ KW.DEFAULT ldy CStackPtr
jsr CORE.GetNCharNB skip ':' jsr CORE.GetNCharNB skip ':'
lda #'D' define DEFAULT Label lda #'D' define DEFAULT Label
jmp STMT.NewLabelA jmp SYM.NewLabelA
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
@ -587,7 +587,7 @@ KW.DEFAULT ldy CStackPtr
*-------------------------------------- *--------------------------------------
KW.BREAK lda #'B' KW.BREAK lda #'B'
jsr STMT.LookupLabelA jsr SYM.LookupLabelA
bcs .9 bcs .9
lda #$4C emit JMP break lda #$4C emit JMP break
@ -599,7 +599,7 @@ KW.BREAK lda #'B'
*-------------------------------------- *--------------------------------------
KW.CONTINUE lda #'C' KW.CONTINUE lda #'C'
jsr STMT.LookupLabelA jsr SYM.LookupLabelA
bcs .9 bcs .9
lda #$4C emit JMP cont lda #$4C emit JMP cont
@ -609,34 +609,29 @@ KW.CONTINUE lda #'C'
sec sec
rts rts
*-------------------------------------- *--------------------------------------
KW.RETURN ldy CStackPtr KW.RETURN ldx ZPLineBufPtr
beq .9 phx
ldx ZPLineBufPtr+1
phx
.1 lda (ZPCCStack),y CPS.KW >LDYA L.CC._RETURN_
bmi .7 f() >STYA ZPLineBufPtr
tya jsr SYM.Lookup
clc
adc #CPS skip CPStmt (6 bytes) plx
tay stx ZPLineBufPtr+1
bcc .1 plx
stx ZPLineBufPtr
.9 lda #E.STACKERROR
sec
.99 rts
.7 tya
clc
adc #CPS.T
tay
lda (ZPCCStack),y
bcs .99
ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha pha
lda (ZPLookupSymPtr) SYM.T
iny get CPS.Q tay
lda (ZPCCStack),y pla
ply T
jsr EXP.Eval jsr EXP.Eval
bcs .99 bcs .99
@ -648,6 +643,8 @@ KW.RETURN ldy CStackPtr
>LDYA L.PCC.LEAVE >LDYA L.PCC.LEAVE
jmp CODE.EmitPCC jmp CODE.EmitPCC
.99 rts
*-------------------------------------- *--------------------------------------
KW.SIZEOF KW.SIZEOF
lda #E.CSYN lda #E.CSYN

View File

@ -8,8 +8,8 @@ CC.Link >LDYA L.MSG.LINKING
lda #1 lda #1
.1 >STYA ZPPtr1 SymID .1 >STYA ZPPtr1 SymID
* >DEBUG
>PUSHB.G CC.hScopes >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID >PUSHW ZPPtr1 SymID
>PUSHW pData >PUSHW pData
@ -18,7 +18,7 @@ CC.Link >LDYA L.MSG.LINKING
>STYA ZPPtr2 NextID >STYA ZPPtr2 NextID
>PUSHB.G CC.hScopes >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID >PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr >PUSHW ZPSymBufPtr
>PUSHWI $ffff All >PUSHWI $ffff All
@ -26,16 +26,21 @@ CC.Link >LDYA L.MSG.LINKING
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .99 bcs .99
ldy #SYM.SC >LDA.G bTrace
bpl .2
jsr CC.Link.Dump
.2 ldy #SYM.SC
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
cmp #SYM.SC.TYPEDEF cmp #SYM.SC.TYPEDEF
bcs .6 bcs .7
ldy #SYM.Addr+1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
dey dey
ora (ZPSymBufPtr),y ora (ZPSymBufPtr),y
bne .6 bne .7
jsr CC.Link.Lookup jsr CC.Link.Lookup
bcs .9 bcs .9
@ -43,20 +48,18 @@ CC.Link >LDYA L.MSG.LINKING
jsr CC.Link.Update jsr CC.Link.Update
bcs .99 bcs .99
.6 >LDA.G bTrace
bpl .7
jsr CC.Link.Dump
bcs .99
.7 >LDYA ZPPtr2 .7 >LDYA ZPPtr2
jmp .1 jmp .1
.8 clc .8 clc
rts rts
.9 jsr CC.Link.Dump .9 >LDA.G bTrace
lda #E.FUNDEF bmi .2
jsr CC.Link.Dump
.90 lda #E.FUNDEF
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
@ -156,7 +159,7 @@ CC.Link.Update ldy #SYM.Addr
txa txa
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
>PUSHB.G CC.hScopes >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID >PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr >PUSHW ZPSymBufPtr
>PUSHBI 0 >PUSHBI 0
@ -212,7 +215,7 @@ CC.Link.Dump ldy #$ff
rts rts
*-------------------------------------- *--------------------------------------
CC.Link.CheckMain CC.Link.CheckMain
>PUSHB.G CC.hScopes >PUSHB.G CC.hSyms
>PUSHW L.CC.MAIN >PUSHW L.CC.MAIN
>PUSHWI 0 ScopeID >PUSHWI 0 ScopeID
>SYSCALL SListLookup >SYSCALL SListLookup
@ -220,7 +223,7 @@ CC.Link.CheckMain
>STYA ZPPtr1 SymID >STYA ZPPtr1 SymID
>PUSHB.G CC.hScopes >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID >PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr >PUSHW ZPSymBufPtr
>PUSHWI 65535 all >PUSHWI 65535 all

58
BIN/CC.S.SCOPE.txt Normal file
View File

@ -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

View File

@ -139,15 +139,7 @@ STMT.Stmt.END ldy CStackPtr
*-------------------------------------- *--------------------------------------
* X = KW.ID * X = KW.ID
*-------------------------------------- *--------------------------------------
STMT.CPStmt.NEW >LDA.G CC.CPSID+1 STMT.CPStmt.NEW lda LocalPtr Locals
jsr CC.Push
bcs .99
>LDA.G CC.CPSID
jsr CC.Push
bcs .99
lda LocalPtr Locals
jsr CC.Push jsr CC.Push
bcs .99 bcs .99
@ -216,24 +208,7 @@ STMT.NewCPS00 lda #0
jsr CC.Push jsr CC.Push
bcs STMT.NewCPS.RTS bcs STMT.NewCPS.RTS
STMT.NewCPS jsr STMT.NewCPSID STMT.NewCPS lda LocalPtr Locals
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
jsr CC.Push jsr CC.Push
bcs .99 bcs .99
@ -276,121 +251,6 @@ STMT.SetCPSType jsr CORE.GetNCharNBNL
sec sec
.99 rts .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 MAN
SAVE usr/src/bin/cc.s.stmt SAVE usr/src/bin/cc.s.stmt
LOAD usr/src/bin/cc.s LOAD usr/src/bin/cc.s

View File

@ -12,12 +12,9 @@ SYM.New >STYA ZPPtr2 T/Q
bit bPass2 bit bPass2
bpl SYM.New.1 bpl SYM.New.1
bit bLocalScope >PUSHB.G CC.hSyms
bmi SYM.New.1
>PUSHB.G CC.hScopes Global Scope
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
>PUSHWI 0 ScopeID jsr SCOPE.Push
>SYSCALL SListLookup >SYSCALL SListLookup
bcs SYM.New.9 bcs SYM.New.9
@ -25,7 +22,7 @@ SYM.New >STYA ZPPtr2 T/Q
jsr CC.SkipX X = KeyLen jsr CC.SkipX X = KeyLen
>PUSHB.G CC.hScopes >PUSHB.G CC.hSyms
>PUSHW.G CC.SymID >PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr >PUSHW ZPSymBufPtr
>PUSHWI 65535 all >PUSHWI 65535 all
@ -33,18 +30,22 @@ SYM.New >STYA ZPPtr2 T/Q
>SYSCALL SListGetData >SYSCALL SListGetData
bcc SYM.New.2 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 SYM.New.1 jsr SYM.BufInitYAXC set buf according C
ldy ScopeIdx >PUSHB.G CC.hSyms
lda (pData),y >PUSHW ZPLineBufPtr
jsr SYM.NewKey jsr SCOPE.Push
>SYSCALL SListNewKey
bcs SYM.New.9 bcs SYM.New.9
>STYA.G CC.SymID Y,A = KeyID >STYA.G CC.SymID Y,A = KeyID
jsr CC.SkipX X = KeyLen jsr CC.SkipX X = KeyLen
.DO DBG_SYM=1
jsr SYM.DEBUG0
.FIN
*-------------------------------------- *--------------------------------------
SYM.New.2 jsr CC.GetCharNB SYM.New.2 jsr CC.GetCharNB
bcs .98 bcs .98
@ -62,11 +63,6 @@ SYM.New.2 jsr CC.GetCharNB
.1 cmp #'(' .1 cmp #'('
bne SYM.NewV bne SYM.NewV
ldy #SYM.Q
lda #SYM.Q.FUNC
ora (ZPSymBufPtr),y
sta (ZPSymBufPtr),y
jmp F.Decl jmp F.Decl
.98 lda #E.CSYN .98 lda #E.CSYN
@ -362,11 +358,7 @@ SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
>PUSHWI 0 ScopeID >PUSHWI 0 ScopeID
>SYSCALL SListNewKey >SYSCALL SListNewKey
bcs .9 rts Y,A = KeyID, X = KeyLen
.9 rts Y,A = KeyID, X = KeyLen
*-------------------------------------- *--------------------------------------
SYM.Add0000 >LDYAI 0 SYM.Add0000 >LDYAI 0
*-------------------------------------- *--------------------------------------
@ -461,14 +453,14 @@ SYM.AddByte pha
sec sec
rts rts
*-------------------------------------- *--------------------------------------
SYM.NewA bit bPass2 SYM.NewLabelA bit bPass2
bmi .8 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 >PUSHB.G CC.hSyms
>PUSHEA.G CC.CPSPFX >PUSHEA.G CC.Label
>PUSHWI 0 ScopeID jsr SCOPE.Push
>SYSCALL SListNewKey >SYSCALL SListNewKey
bcs .99 bcs .99
@ -498,104 +490,114 @@ SYM.NewA bit bPass2
>LDYA ZPCCCode >LDYA ZPCCCode
jsr SYM.SetAddrYA jsr SYM.SetAddrYA
.DO DBG_SYM=1
>LDA.G CC.hScopes Global Scope jsr SYM.DEBUG0
jmp SYM.Store.1 .FIN
jmp SYM.Store
.8 clc .8 clc
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
SYM.StoreF >LDA.G CC.hScopes SYM.Update sec
.HS 90 BCC
bit bPass2
bpl SYM.Store.1
clc
rts
*-------------------------------------- *--------------------------------------
SYM.Store bit bPass2 SYM.Store clc
bpl SYM.StoreL Store Global & Local at Pass 1 bit bPass2
bmi .8
bit bLocalScope Store Local at Pass 2
bmi SYM.StoreL
clc php
rts .DO DBG_SYM=1
bcc .10
SYM.StoreL ldy ScopeIdx jsr SYM.DEBUG1
lda (pData),y
SYM.Store.1 >PUSHA bra .11
.10
jsr SYM.DEBUG2
.11 .FIN
>PUSHB.G CC.hSyms
>PUSHW.G CC.SymID >PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr >PUSHW ZPSymBufPtr
>PUSHBI 0 >PUSHBI 0
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.FUNC
bne .1
ldy #SYM.DefSize ldy #SYM.DefSize
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
>PUSHA bra .2
.1 lda #SYM.F.MAX
.2 >PUSHA
plp
bcs .3
>SYSCALL SListAddData >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 rts
.9 lda #E.OOH .3 >SYSCALL SListSetData
sec rts
.99 rts
*--------------------------------------
SYM.FreeScope ldy ScopeIdx
cpy #CC.hScopes
beq *
lda (pData),y
>SYSCALL SListFree
dec ScopeIdx
inc bLocalScope
.8 clc
rts rts
*-------------------------------------- *--------------------------------------
SYM.Lookup >LDA.G CC.LookupIdx SYM.Lookup >LDA.G CC.LookupIdx
cmp #CC.LookupIdx+LOOKUP.MAX cmp #CC.LookupIdx+LOOKUP.MAX
beq .99 beq .99
>PUSHB ScopeIdx >PUSHB.G CC.hSyms ...for SListGetData
.1 tay lda ScopeIdx
lda (pData),y
jsr CC.SListLookup .1 pha
>PUSHB.G CC.hSyms
>PUSHW ZPLineBufPtr
ply
phy
jsr SCOPE.PushY
>SYSCALL SListLookup
bcc .8 bcc .8
lda (pstack) pla
cmp #CC.hScopes cmp #CC.ScopeIDs
beq .9 beq .9
dec dec
sta (pstack) dec
bra .1 bra .1
.9 inc pStack
.99 lda #E.OOH
* sec
rts
.9 inc pStack discard CC.hSyms
lda #E.NOKEY lda #E.NOKEY
sec sec
rts 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 >STYA.G CC.LookupSymSize
@ -610,12 +612,9 @@ SYM.Lookup >LDA.G CC.LookupIdx
* clc * clc
rts rts
.99 lda #E.OOH
* sec
rts
*-------------------------------------- *--------------------------------------
SYM.LookupA bit bPass2 SYM.LookupLabelA
bit bPass2
bmi .1 bmi .1
ldx #0 ldx #0
@ -623,18 +622,39 @@ SYM.LookupA bit bPass2
clc clc
rts 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 >PUSHB.G CC.hSyms ...for SListGetData
>PUSHEA.G CC.CPSPFX
>PUSHWI 0 ScopeID lda ScopeIdx
.2 pha
>PUSHB.G CC.hSyms
>PUSHEA.G CC.Label
ply
phy
jsr SCOPE.PushY
>SYSCALL SListLookup >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 >PUSHW ZPSymBufPtr
>PUSHWI 65535 all >PUSHWI 65535 all
>PUSHWZ From Start >PUSHWZ From Start
@ -850,6 +870,32 @@ SYM.SetAddrYA phy
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
rts 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 MAN
SAVE usr/src/bin/cc.s.sym SAVE usr/src/bin/cc.s.sym

View File

@ -10,6 +10,8 @@ NEW
.INB inc/mli.i .INB inc/mli.i
.INB inc/mli.e.i .INB inc/mli.e.i
*-------------------------------------- *--------------------------------------
DBG_SYM .EQ 0
*--------------------------------------
FILES.MAX .EQ 4 FILES.MAX .EQ 4
LIBS.MAX .EQ 4 LIBS.MAX .EQ 4
SCOPE.MAX .EQ 16 SCOPE.MAX .EQ 16
@ -46,15 +48,17 @@ SYM.SC.EXTERN .EQ 6
SYM.SC.TYPEDEF .EQ 8 SYM.SC.TYPEDEF .EQ 8
SYM.SC.DEFINE .EQ 10 SYM.SC.DEFINE .EQ 10
SYM.SC.TAG .EQ 12 SYM.SC.TAG .EQ 12
SYM.hSym .EQ 3 * .EQ 3
SYM.SizeOf .EQ 4 SYM.SizeOf .EQ 4
SYM.Addr .EQ 6 SYM.Addr .EQ 6
SYM.BitO .EQ 8 SYM.BitO .EQ 8
SYM.BitW .EQ 9 SYM.BitW .EQ 9
SYM.DefSize .EQ 10 SYM.DefSize .EQ 10
SYM.Def .EQ 11 Funtions : fTQ,a1TQ,a2TQ.... *
SYM.Def .EQ 12 Funtions : fTQ,a1TQ,a2TQ....
* *
SYM .EQ 14 SYM .EQ 14
SYM.F.MAX .EQ 64
*-------------------------------------- *--------------------------------------
SU.F.T .EQ 0 SU.F.T .EQ 0
SU.F.Q .EQ 1 SU.F.Q .EQ 1
@ -63,19 +67,20 @@ SU.F.BitO .EQ 4
SU.F.BitW .EQ 5 SU.F.BitW .EQ 5
SU.F.Name .EQ 6 SU.F.Name .EQ 6
*-------------------------------------- *--------------------------------------
CPS.hMEM .EQ 7 switch/case CPS.hMEM .EQ 5 switch/case
CPS.Ptr .EQ 6 CPS.Ptr .EQ 4
CPS.Q .EQ 7 f CPS.Q .EQ 5 f
CPS.T .EQ 6 CPS.T .EQ 4
CPS.CPSID .EQ 4
CPS.LOCAL .EQ 3 CPS.LOCAL .EQ 3
CPS.STATE .EQ 2 CPS.STATE .EQ 2
CPS.TERM .EQ 1 CPS.TERM .EQ 1
CPS.KW .EQ 0 CPS.KW .EQ 0
* *
CPS .EQ 8 CPS .EQ 6
*--------------------------------------
*-------------------------------------- *--------------------------------------
* Zero Page Segment, up to 32 bytes * 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.LINKING2 .DA MSG.LINKING2
L.MSG.GENERATING .DA MSG.GENERATING L.MSG.GENERATING .DA MSG.GENERATING
L.MSG.DEBUG .DA MSG.DEBUG 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.TRACE .DA MSG.TRACE
L.MSG.RTSTK .DA MSG.RTSTK L.MSG.RTSTK .DA MSG.RTSTK
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
@ -233,6 +243,7 @@ J.CC.STYPES .DA TYPE.SCHAR
.DA TYPE.SLONG .DA TYPE.SLONG
*-------------------------------------- *--------------------------------------
L.CC.MAIN .DA CC.MAIN L.CC.MAIN .DA CC.MAIN
L.CC._RETURN_ .DA CC._RETURN_
L.CC.SYSCALL .DA CC.SYSCALL L.CC.SYSCALL .DA CC.SYSCALL
L.CC.FPUCALL .DA CC.FPUCALL L.CC.FPUCALL .DA CC.FPUCALL
*-------------------------------------- *--------------------------------------
@ -364,11 +375,11 @@ CS.RUN.CLOOP jsr CORE.CompileFile
cmp #MLI.E.EOF cmp #MLI.E.EOF
bne .9 bne .9
* bne .1
jsr FIO.FClose jsr FIO.FClose
bne CS.RUN.CLOOP bne CS.RUN.CLOOP
*-------------------------------------- *--------------------------------------
jsr PrintSummary .1 jsr PrintSummary
bcs .99 bcs .99
jsr CC.Link jsr CC.Link
@ -570,7 +581,8 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG
lda ScopeIdx lda ScopeIdx
sec sec
sbc #CC.hScopes sbc #CC.ScopeIDs
lsr
>PUSHA >PUSHA
>PUSHBI 15 >PUSHBI 15
@ -637,16 +649,17 @@ PrintSummary >PUSHW L.MSG.SUMMARY
*-------------------------------------- *--------------------------------------
.INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.code
.INB usr/src/bin/cc.s.core .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.decl
.INB usr/src/bin/cc.s.stmt .INB usr/src/bin/cc.s.dir
.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.exp .INB usr/src/bin/cc.s.exp
.INB usr/src/bin/cc.s.sym .INB usr/src/bin/cc.s.f
.INB usr/src/bin/cc.s.link
.INB usr/src/bin/cc.s.fio .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 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.GENERATING .CZ "*** Generating: %s\r\n"
MSG.DEBUG .CS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\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" .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.TRACE .CZ "%5D> %s\r\n"
MSG.RTSTK .CZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n" MSG.RTSTK .CZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
MSG.ERROR .CZ " %s^\r\n" MSG.ERROR .CZ " %s^\r\n"
@ -808,6 +826,7 @@ CC.TYPESIGN .HS 0000FF00FF00FFFF
CC.MAIN .AZ "main" 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 .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.MAIN.DEF.LEN .EQ *-CC.MAIN.DEF
CC._RETURN_ .AZ "_RETURN_;"
*-------------------------------------- *--------------------------------------
CC.SYSCALL .PS "chtyp" CC.SYSCALL .PS "chtyp"
.DA #SYS.ChTyp .DA #SYS.ChTyp
@ -1125,10 +1144,12 @@ CC.SaveDefine .BS 2
CC.hTags .BS 1 CC.hTags .BS 1
CC.hStack .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.ScopeID .BS 2
CC.CPSPFX .BS 5 X_id\0 CC.ScopeIDs .BS 2+SCOPE.MAX*2 2 bytes Global+ MAX locals
CC.Label .BS 3 _X\0
*-------------------------------------- *--------------------------------------
CC.hSymBuf .BS 1 CC.hSymBuf .BS 1
CC.SymID .BS 2 CC.SymID .BS 2

View File

@ -32,19 +32,17 @@ BlkCnt .BS 2
TrkCnt .BS 1 TrkCnt .BS 1
Stepping .BS 1 Stepping .BS 1
VolNum .BS 1 VolNum .BS 1
AltBB .BS 1 bAltBB .BS 1
HeadCnt .BS 1 HeadCnt .BS 1
TimeOut .BS 1
CatSize .BS 1 CatSize .BS 1
CatBlkCnt .BS 1 CatBlkCnt .BS 1
bLL .BS 1 bLL .BS 1
bCustomBlkSize .BS 1
bHighDensity .BS 1
bExtraTrack .BS 1
bDS .BS 1
bVerify .BS 1 bVerify .BS 1
bCustomBlkSize .BS 1
TimeOut .BS 1
ZS.END ZS.END
.ED .ED
*-------------------------------------- *--------------------------------------
@ -81,11 +79,19 @@ L.MSG.LLDISK2 .DA MSG.LLDISK2
L.MSG.VERIFY .DA MSG.VERIFY L.MSG.VERIFY .DA MSG.VERIFY
L.MSG.WRITECAT .DA MSG.WRITECAT L.MSG.WRITECAT .DA MSG.WRITECAT
L.FMT.BLANK .DA FMT.BLANK 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 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBBLKDEV CS.INIT >LDYA L.LIBBLKDEV
>SYSCALL LoadLib >SYSCALL LoadLib
bcs .9 bcs .9
sta hLIBBLKDEV sta hLIBBLKDEV
.9 rts .9 rts
@ -94,14 +100,17 @@ CS.RUN ldy #S.PS.ARGC
lda (pPS),y lda (pPS),y
beq .99 beq .99
.1 inc ArgIndex ldx #6
lda ArgIndex
>SYSCALL ArgV
bcc .11
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) lda (ZPPtr1)
cmp #'-' cmp #'-'
bne .4 bne .4
@ -112,72 +121,53 @@ CS.RUN ldy #S.PS.ARGC
cmp #'0' cmp #'0'
bcc .2 bcc .2
cmp #'9'+1 cmp #'9'+1
bcs .2 bcs .2
and #$0F and #$0F
sta CatSize sta CatSize
.10 bra .1 bra .1
.2 jsr CS.RUN.CheckOpt .2 jsr CS.RUN.CheckOpt
bcs .99 bcs .99
cpy #bCustomBlkSize
bne .1
inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .99
>SYSCALL AToI
>STYA BlkCnt
bra .1 bra .1
.99 >LDYA L.MSG.USAGE1
>SYSCALL PutS
>LDYA L.MSG.USAGE2
>SYSCALL Puts
lda #E.SYN
sec
.9 rts
.4 lda hDevID .4 lda hDevID
bne .5 Already have a dev...go get VolName bne .5 Already have a dev...go get VolName
>LDYA ZPPtr1 jsr CS.RUN.GetDev
>SYSCALL GetDevByName bcc .1
bcs .9
rts
stx hDevID .5 jsr CS.RUN.GetVolName
>STYA ZPPtrFD bcc .1
rts
>LDYA ZPPtr1 .99 >LDYA L.MSG.USAGE1
>STYA ZPPtrDevName >SYSCALL PutS
bra .10 >LDYA L.MSG.USAGE2
>SYSCALL PutS
.5 ldy #$ff lda #E.SYN
sec
.6 iny .9 rts
lda (ZPPtr1),y
sta (pData),y VolName
beq .10
cpy #16
bcc .6
bra .99 VolName too long
.8 lda hDevID .8 lda hDevID
beq .99 beq .99
*-------------------------------------- *--------------------------------------
CS.RUN.Format jsr CS.RUN.GetDevDIB CS.RUN.Format jsr CS.RUN.GetDevDIB
bcs .99 bcs .9
>PUSHW L.MSG.INIT >PUSHW L.MSG.INIT
>PUSHW ZPPtrDevName >PUSHW ZPPtrDevName
>PUSHEA.G VolName >PUSHW pData >PUSHEA.G VolName
>PUSHBI 4 >PUSHBI 4
>SYSCALL PrintF >SYSCALL PrintF
bcs .99 bcs .9
jsr CS.RUN.GET.DSSS0000 jsr CS.RUN.GET.DSSS0000
@ -194,8 +184,7 @@ CS.RUN.Format jsr CS.RUN.GetDevDIB
bcs .9 bcs .9
jsr CS.RUN.WriteCat jsr CS.RUN.WriteCat
bcs .9
.99 bcs .9
>LDYA L.MSG.OK >LDYA L.MSG.OK
>SYSCALL PutS >SYSCALL PutS
@ -221,10 +210,158 @@ CS.RUN.Format jsr CS.RUN.GetDevDIB
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetDevDIB CS.RUN.CheckOpt ldy #1
lda bCustomBlkSize lda (ZPPtr1),y
bmi .8
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 >LEA.G DIB
>STYA.G IOCTL+S.IOCTL.BUFPTR >STYA.G IOCTL+S.IOCTL.BUFPTR
@ -237,6 +374,9 @@ CS.RUN.GetDevDIB
>SYSCALL IOCTL >SYSCALL IOCTL
bcs .9 bcs .9
lda bCustomBlkSize
bmi .8
>LDA.G DIB+S.DIB.SIZE >LDA.G DIB+S.DIB.SIZE
tax tax
iny iny
@ -277,37 +417,7 @@ CS.RUN.GET.DSSS0000
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.LL >LDA.G DIB+S.DIB.T CS.RUN.LL >PUSHW L.MSG.LL
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
>PUSHW BlkCnt >PUSHW BlkCnt
>PUSHBI 2 >PUSHBI 2
>SYSCALL PrintF >SYSCALL PrintF
@ -596,10 +706,10 @@ CS.RUN.InitCat lda CatSize
lda #4 lda #4
sta CatSize sta CatSize
.1 >LDA.G VolName .1 lda (pData) >LDA.G VolName
bne .8 Volume name ok bne .8 Volume name ok
>PUSHEA.G VolName >PUSHW pData >PUSHEA.G VolName
>PUSHW L.FMT.BLANK >PUSHW L.FMT.BLANK
>PUSHW A2osX.TIMER16 >PUSHW A2osX.TIMER16
>PUSHW A2osX.RANDOM16 >PUSHW A2osX.RANDOM16
@ -642,18 +752,20 @@ CS.RUN.BuildCat jsr .7
jsr .7 jsr .7
>PUSHEA.G VolName >PUSHW pData >PUSHEA.G VolName
>PUSHW.G IOCTL+S.IOCTL.BUFPTR >PUSHW.G IOCTL+S.IOCTL.BUFPTR
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat >LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts .9 rts
.7 >PUSHW BlkCnt .7 >PUSHW BlkCnt
>PUSHB CatSize >PUSHB CatSize
>PUSHB AltBB >PUSHB bAltBB
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.WriteCat >LDYA L.MSG.WRITECAT CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT
>SYSCALL PutS >PUSHBI 0
>SYSCALL PrintF
bcs .9
>STZ.G IOCTL+S.IOCTL.BLKNUM >STZ.G IOCTL+S.IOCTL.BLKNUM
iny iny
@ -709,26 +821,6 @@ CS.QUIT lda hCatBuf
.8 clc .8 clc
rts 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 CS.RUN.Wait sta TimeOut
.1 jsr CS.RUN.CheckCtrlC .1 jsr CS.RUN.CheckCtrlC
@ -764,6 +856,36 @@ CS.RUN.CheckCtrlC
plx plx
rts 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 CS.END
*-------------------------------------- *--------------------------------------
LIBBLKDEV .AZ "libblkdev" LIBBLKDEV .AZ "libblkdev"
@ -771,15 +893,15 @@ hLIBBLKDEV .BS 1
*-------------------------------------- *--------------------------------------
MSG.USAGE1 .CS "Usage : FORMAT <BLOCKDEV> [VOL.NAME]\r\n" MSG.USAGE1 .CS "Usage : FORMAT <BLOCKDEV> [VOL.NAME]\r\n"
.CS " -L : Low-Level Format\r\n" .CS " -L : Low-Level Format\r\n"
.CS "-L -V : Verify After LLF\r\n" .CS " -V : Verify After LLF\r\n"
.CS " -B xxxx : Smrtprt, Override Device block size\r\n" .CS " -B xxxx : Volume size (blocks)\r\n"
.CZ " -1-9 : Catalog Size (Blocks)\r\n" .CZ " -1-9 : Catalog Size (blocks)"
MSG.USAGE2 .CS "------- ProDOS.FX only ------\r\n" MSG.USAGE2 .CS "------- ProDOS.FX only ------\r\n"
.CS " -H : 35trk drives, High Density: 48 tracks, 384 Blocks\r\n" .CS " -A : Alternate boot block\r\n"
.CS " -X : 40trk drives, 320 Blocks\r\n" .CS " -D : Dual sided\r\n"
.CS "-H -X : 40trk drives, 432 Blocks\r\n" .CS " -S x : Quarter track stepping\r\n"
.CS " -D : Rana Elite II 640 Blocks, 2 Sides\r\n" .CZ " -T xxx : Track count\r\n"
.CZ "-H -D : Rana Elite III 1280 Blocks, 2 Sides\r\n" *--------------------------------------
MSG.OK .CZ "[OK]" MSG.OK .CZ "[OK]"
MSG.ERR .CS "[%h]" MSG.ERR .CS "[%h]"
MSG.CRLF .CZ "\r\n" 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..." MSG.WRITECAT .CZ "Writing Catalog..."
FMT.BLANK .CZ "BLANK%H%H" FMT.BLANK .CZ "BLANK%H%H"
*-------------------------------------- *--------------------------------------
OptionList .AS "LlBbHhXxDdVv" OptionList .AS "AaBbDdLlSsTtVv"
OptionVars .DA #bLL,#bLL,#bCustomBlkSize,#bCustomBlkSize OptionList.cnt .EQ *-OptionList
.DA #bHighDensity,#bHighDensity,#bExtraTrack,#bExtraTrack
.DA #bDS,#bDS
.DA #bVerify,#bVerify
*-------------------------------------- *--------------------------------------
Disk2.Default .DA 280 BlkCnt Disk2.Default .DA 280 BlkCnt
.DA #35 TrkCnt .DA #35 TrkCnt
.DA #4 Stepping .DA #4 Stepping
.DA #$00 VolNum .DA #$00 VolNum
.DA #0 AltBB .DA #0 bAltBB
.DA #1 HeadCnt .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 .DUMMY
.OR 0 .OR 0

View File

@ -196,9 +196,10 @@ CS.RUN.DIR lda (ZPFileName)
>SYSCALL PrintF >SYSCALL PrintF
bcs .9 bcs .9
>PUSHW ZPFullPath
jsr CS.RUN.GetNewPath jsr CS.RUN.GetNewPath
>PUSHYA
>PUSHW ZPFullPath
>PUSHW ZPNewPath
>SYSCALL Rename >SYSCALL Rename
jsr CS.RUN.CheckErr jsr CS.RUN.CheckErr
bcs .9 bcs .9

View File

@ -98,7 +98,7 @@ CMD..EXEC.YAX jsr CORE.Load.YAX Y,A = Args, X = Code
bcs CMD.SHIFTA.RTS bcs CMD.SHIFTA.RTS
lda #$C0+C.. lda #$C0+C..
jmp CORE.StkPush jmp STK.Push
CMD...9 jmp CMD.E.CSYN CMD...9 jmp CMD.E.CSYN
*-------------------------------------- *--------------------------------------
@ -189,6 +189,7 @@ CMD.CD.YA >PUSHYA
beq .11 beq .11
lda #MLI.E.INVPATH lda #MLI.E.INVPATH
.19 pha .19 pha
lda ZPTmpW lda ZPTmpW
>SYSCALL FreeMem >SYSCALL FreeMem
@ -607,7 +608,7 @@ CMD.REN lda (ZPArgVBufPtr)
*-------------------------------------- *--------------------------------------
CMD.FUNCTION lda (ZPArgVBufPtr) CMD.FUNCTION lda (ZPArgVBufPtr)
beq .9 beq .9
jsr CORE.StkGetCtx jsr STK.GetCtx
bcc .9 No context allowed bcc .9 No context allowed
>LDA.G hFunctions >LDA.G hFunctions
@ -713,7 +714,7 @@ CMD.CALL jsr CMD.CALL.GETFUNC
bcs CMD.CALL.RTS bcs CMD.CALL.RTS
lda #$C0+C.CALL lda #$C0+C.CALL
jmp CORE.StkPush jmp STK.Push
*-------------------------------------- *--------------------------------------
CMD.CALL.GETFUNC CMD.CALL.GETFUNC
>LDA.G hFunctions >LDA.G hFunctions
@ -738,7 +739,7 @@ CMD.EXIT lda (ZPArgVBufPtr)
.1 ldy #S.PS.RC .1 ldy #S.PS.RC
sta (pPS),y sta (pPS),y
.2 jsr CORE.StkPull Pull everything until CALL . CL... .2 jsr STK.Pull Pull everything until CALL . CL...
bcs .9 bcs .9
cmp #$C0+C.. in CALL, "." or CL context ? cmp #$C0+C.. in CALL, "." or CL context ?
@ -750,7 +751,7 @@ CMD.EXIT lda (ZPArgVBufPtr)
cmp #$C0+C.CLEXEC cmp #$C0+C.CLEXEC
beq .8 beq .8
jsr CORE.StkPopCtxA jsr STK.PopCtxA
bcc .2 bcc .2
rts rts
@ -761,25 +762,25 @@ CMD.EXIT lda (ZPArgVBufPtr)
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer CMD.EXIT.FILE jsr STK.PullFree Code buffer
ldy #S.PS.hARGV ldy #S.PS.hARGV
lda (pPS),y lda (pPS),y
>SYSCALL FreeMem ArgV buffer >SYSCALL FreeMem ArgV buffer
jsr CORE.StkPull jsr STK.Pull
ldy #S.PS.hARGV ldy #S.PS.hARGV
sta (pPS),y sta (pPS),y
jsr CORE.StkPull jsr STK.Pull
ldy #S.PS.ARGC ldy #S.PS.ARGC
sta (pPS),y sta (pPS),y
jsr CORE.StkPullInputBufPtr jsr STK.PullInputBufPtr
jsr CORE.StkPull jsr STK.Pull
sta ZPInputBuf sta ZPInputBuf
jsr CORE.StkPull jsr STK.Pull
sta ZPInputBuf+1 sta ZPInputBuf+1
ldy #S.PS.RC ldy #S.PS.RC
@ -788,19 +789,44 @@ CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult CMD.BREAK jsr STK.GetCtx Get context in CORE.TestResult
bcs .9 bcs .9
tax tax
and #$3F 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 .8 clc
rts rts
@ -809,41 +835,51 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult
* stack-1 hVALUE * stack-1 hVALUE
* stack SWITCH TOKEN * stack SWITCH TOKEN
*-------------------------------------- *--------------------------------------
CMD.SWITCH jsr CORE.StkGetCtx CMD.SWITCH jsr STK.GetCtx
lda #2 lda #2
jsr CORE.StkCheck jsr STK.Check
bcs .9 bcs .9
jsr EXP.GET jsr EXP.GET
bcs .9 bcs .9
>SYSCALL StrDup >SYSCALL StrDup
bcs .9 bcs .9
txa txa
jsr CORE.StkPush Push EXP hVALUE jsr STK.Push Push EXP hVALUE
lda CORE.TestResult lda CORE.TestResult
beq .1 beq .1
ora #$80 ora #$80
.1 ora #C.SWITCH .1 ora #C.SWITCH
jmp CORE.StkPush jmp STK.Push
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult CMD.CASE jsr STK.GetCtx Get context in CORE.TestResult
bcs .9 bcs .9
tax tax
and #$3F and #$3F
cmp #C.SWITCH cmp #C.SWITCH
beq .1 beq .1
cmp #C.CASE cmp #C.CASE
bne .9 bne .9
txa previous case was true ? txa previous case was true ?
bpl .10 bpl .10
jsr EXP.GET skip expression jsr EXP.GET skip expression
bcs .9 bcs .9
rts keep existing context rts keep existing context
.10 jsr CORE.StkPull remove previous C.CASE
.10 jsr STK.Pull remove previous C.CASE
bra CMD.CASE bra CMD.CASE
.1 jsr EXP.GET .1 jsr EXP.GET
@ -862,13 +898,13 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult
eor #$80 eor #$80
ora CORE.TestResult ora CORE.TestResult
ora #C.CASE ora #C.CASE
jmp CORE.StkPush jmp STK.Push
.9 .9
CMD.E.CSYN lda #E.CSYN CMD.E.CSYN lda #E.CSYN
sec sec
rts 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 bcs CMD.E.CSYN
and #$3F and #$3F
@ -879,14 +915,14 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
cmp #C.CASE cmp #C.CASE
bne CMD.E.CSYN 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 and #$C0
ora #C.DEFAULT 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 bcs CMD.E.CSYN
and #$3F and #$3F
@ -900,9 +936,9 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
cmp #C.DEFAULT cmp #C.DEFAULT
bne CMD.E.CSYN bne CMD.E.CSYN
.8 jmp CORE.StkPopCtx .8 jmp STK.PopCtx
*-------------------------------------- *--------------------------------------
CMD.FOR jsr CORE.StkGetCtx CMD.FOR jsr STK.GetCtx
lda (ZPArgVBufPtr) lda (ZPArgVBufPtr)
beq CMD.E.CSYN beq CMD.E.CSYN
@ -922,7 +958,7 @@ CMD.FOR jsr CORE.StkGetCtx
beq CMD.E.CSYN beq CMD.E.CSYN
lda #8 Make sure 8 bytes free on stack lda #8 Make sure 8 bytes free on stack
jsr CORE.StkCheck jsr STK.Check
bcs FOR.FILE.9 bcs FOR.FILE.9
lda (ZPArgVBufPtr) lda (ZPArgVBufPtr)
@ -939,19 +975,19 @@ CMD.FOR.LIST >LDYA ZPArgVBufPtr
phy phy
pha pha
jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR jsr STK.PushInputBufPtr Push CmdPtr AFTER FOR
pla pla
ply ply
jsr CORE.StkPushYAX Push listPtr,hList jsr STK.PushYAX Push listPtr,hList
jsr CORE.PushVarName Push hVARNAME jsr CORE.PushVarName Push hVARNAME
lda #C.FOR.LIST lda #C.FOR.LIST
jsr CORE.StkPush jsr STK.Push
lda #C.FOR lda #C.FOR
jsr CORE.StkPush jsr STK.Push
jsr CMD.NEXT.LIST.TOKEN jsr CMD.NEXT.LIST.TOKEN
bcc CMD.FOR.LOOP bcc CMD.FOR.LOOP
@ -981,18 +1017,18 @@ CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`"
CMD.FOR.PUSH pha save hFILE/hPIPE CMD.FOR.PUSH pha save hFILE/hPIPE
jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR jsr STK.PushInputBufPtr Push CmdPtr AFTER FOR
pla pla
jsr CORE.StkPush push hPIPE for read jsr STK.Push push hPIPE for read
jsr CORE.PushVarName Push hVARNAME jsr CORE.PushVarName Push hVARNAME
* bcs FOR.FILE.9 * bcs FOR.FILE.9
lda #C.FOR.FILEEXEC lda #C.FOR.FILEEXEC
jsr CORE.StkPush jsr STK.Push
lda #C.FOR lda #C.FOR
jsr CORE.StkPush jsr STK.Push
jsr CMD.NEXT.LINE jsr CMD.NEXT.LINE
bcs FOR.FILE.9 bcs FOR.FILE.9
@ -1008,7 +1044,7 @@ CMD.FOR.LOOP ora CORE.TestResult
* clc * clc
rts rts
*-------------------------------------- *--------------------------------------
CMD.NEXT jsr CORE.StkGet Y = StkPtr CMD.NEXT jsr STK.Get Y = StkPtr
bcs .9 bcs .9
and #$3F and #$3F
@ -1204,7 +1240,7 @@ CMD.NEXT.GetVarNamePtr
rts rts
*-------------------------------------- *--------------------------------------
CMD.WHILE CMD.WHILE
CMD.IF jsr CORE.StkGetCtx CMD.IF jsr STK.GetCtx
bit #$40 Parent is true ? bit #$40 Parent is true ?
beq .3 beq .3
@ -1217,35 +1253,36 @@ CMD.IF jsr CORE.StkGetCtx
bne .8 bne .8
lda #3 lda #3
jsr CORE.StkCheck jsr STK.Check
bcs CMD.NEXT.LINE.RTS bcs CMD.NEXT.LINE.RTS
>LDYA ZPInputCmdPtr >LDYA ZPInputCmdPtr
jsr CORE.StkPushYA Push BEFORE WHILE/IF jsr STK.PushYA Push BEFORE WHILE/IF
.8 lda CORE.TestResult .8 lda CORE.TestResult
ora CORE.IntCmd ora CORE.IntCmd
jmp CORE.StkPush jmp STK.Push
*-------------------------------------- *--------------------------------------
CMD.LOOP jsr CORE.StkPull CMD.LOOP jsr STK.Pull
bcs .9 bcs .9
tax tax
and #$3F and #$3F
cmp #C.WHILE cmp #C.WHILE
bne .9 bne .9
txa txa
bmi .8 true, loop 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 .9 lda #E.NOWHILE
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CMD.ELSE jsr CORE.StkGet CMD.ELSE jsr STK.Get
bcs .9 bcs .9
bit #$40 parent is true ? bit #$40 parent is true ?
@ -1255,9 +1292,11 @@ CMD.ELSE jsr CORE.StkGet
and #$3F and #$3F
cmp #C.IF cmp #C.IF
bne .9 bne .9
txa txa
eor #$80 toggle and store at stack ptr eor #$80 toggle and store at stack ptr
sta (pData),y sta (pData),y
.8 clc .8 clc
rts rts
.9 .9
@ -1265,7 +1304,7 @@ CMD.ELSE.NOIF lda #E.NOIF
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CMD.FI jsr CORE.StkPull CMD.FI jsr STK.Pull
bcs CMD.ELSE.NOIF bcs CMD.ELSE.NOIF
and #$3F and #$3F

View File

@ -35,21 +35,21 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
sta LOAD.ArgCnt A = ARGC sta LOAD.ArgCnt A = ARGC
lda #8 lda #8
jsr CORE.StkCheck jsr STK.Check
bcs .9 bcs .9
>LDYA ZPInputBuf >LDYA ZPInputBuf
jsr CORE.StkPushYA jsr STK.PushYA
jsr CORE.StkPushInputBufPtr jsr STK.PushInputBufPtr
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda (pPS),y lda (pPS),y
jsr CORE.StkPush old ARGC jsr STK.Push old ARGC
ldy #S.PS.hARGV ldy #S.PS.hARGV
lda (pPS),y lda (pPS),y
jsr CORE.StkPush old hARGV jsr STK.Push old hARGV
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda LOAD.ArgCnt new 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 sta (pPS),y new hARGV
lda LOAD.hCode new code lda LOAD.hCode new code
jsr CORE.StkPush jsr STK.Push
* lda LOAD.hCode * lda LOAD.hCode
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPInputBuf >STYA ZPInputBuf
@ -95,7 +95,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
* set hStdIn = hStdOut * set hStdIn = hStdOut
* set hStdOut = Std * set hStdOut = Std
*-------------------------------------- *--------------------------------------
CORE.Run.EOF jsr CORE.StkPull CORE.Run.EOF jsr STK.Pull
bcs * bcs *
cmp #$C0+C.. check CALL . CL context cmp #$C0+C.. check CALL . CL context
beq .1 beq .1
@ -198,7 +198,7 @@ CORE.Run.4 >LDYA L.CMD internal command ?
.41 stx CORE.IntCmd .41 stx CORE.IntCmd
jsr CORE.SkipCharsA jsr CORE.SkipCharsA
.42 jsr CORE.StkGet .42 jsr STK.Get
bcs CORE.Run.5 no particular context, exec... bcs CORE.Run.5 no particular context, exec...
tax tax
@ -794,191 +794,6 @@ CORE.SListGetData
>SYSCALL SListGetData X = hMem >SYSCALL SListGetData X = hMem
rts 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 MAN
SAVE usr/src/bin/sh.s.core SAVE usr/src/bin/sh.s.core
LOAD usr/src/bin/sh.s LOAD usr/src/bin/sh.s

188
BIN/SH.S.STK.txt Normal file
View File

@ -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

View File

@ -206,9 +206,9 @@ CS.INIT clc
CS.RUN jsr CL.Init CS.RUN jsr CL.Init
jsr CORE.Init jsr CORE.Init
lda #0 * lda #0
jsr GetArgV * jsr GetArgV
>STYA.G SH * >STYA.G SH
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda (pPS),y lda (pPS),y
@ -397,7 +397,7 @@ CS.RUN.CMDLINE >SYSCALL StrDup
bcs CS.RUN.CMDLINE.9 bcs CS.RUN.CMDLINE.9
lda #$C0+C.CLEXEC lda #$C0+C.CLEXEC
jsr CORE.StkPush jsr STK.Push
bra CS.RUN.LOOP.RUN bra CS.RUN.LOOP.RUN
@ -439,7 +439,7 @@ CS.RUN.LOOP.END ldy #S.PS.RC
and #bState.SET.E and #bState.SET.E
bne CS.RUN.LOOP.80 bne CS.RUN.LOOP.80
.1 jsr CORE.StkGet .1 jsr STK.Get
cmp #$C0+C.CLEXEC cmp #$C0+C.CLEXEC
beq .8 beq .8
@ -449,13 +449,13 @@ CS.RUN.LOOP.END ldy #S.PS.RC
cmp #$C0+C.CALL in CALL ? cmp #$C0+C.CALL in CALL ?
beq .7 beq .7
jsr CORE.StkPopCtx jsr STK.PopCtx
bcc .1 bcc .1
.7 jsr IO.PrintBatchErrMsg .7 jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS bcs CS.RUN.LOOP.RTS
jsr CORE.StkPull jsr STK.Pull
jsr CMD.EXIT.FILE jsr CMD.EXIT.FILE
.8 jsr IO.PrintErrMsg .8 jsr IO.PrintErrMsg
@ -601,11 +601,12 @@ PrintYANoCR >PUSHYA
rts rts
*-------------------------------------- *--------------------------------------
.INB usr/src/bin/sh.s.cl .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.cmd
.INB usr/src/bin/sh.s.core
.INB usr/src/bin/sh.s.exp .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 CS.END
*-------------------------------------- *--------------------------------------
@ -737,7 +738,7 @@ CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr)
PUSHD.STACK .BS PUSHD.STACK.MAX+1 PUSHD.STACK .BS PUSHD.STACK.MAX+1
CODE.STACK .BS CODE.STACK.MAX*7+1 CODE.STACK .BS CODE.STACK.MAX*7+1
SH .BS 2 *SH .BS 2
hAliases .BS 1 hAliases .BS 1
hFunctions .BS 1 hFunctions .BS 1

View File

@ -199,9 +199,10 @@ CS.RUN.DIR lda (ZPFileName)
>SYSCALL PrintF >SYSCALL PrintF
bcs .9 bcs .9
>PUSHW ZPFullPath
jsr CS.RUN.GetNewPath jsr CS.RUN.GetNewPath
>PUSHYA
>PUSHW ZPFullPath
>PUSHW ZPNewPath
>SYSCALL Rename >SYSCALL Rename
jsr CS.RUN.CheckErr jsr CS.RUN.CheckErr
bcs .9 bcs .9

View File

@ -1,11 +1,11 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
LBUF.SetBounds1YA LBUF.SetBounds1YA
jsr DIVMOD7YA A=DIV, X=MOD jsr DIVMOD7YA A=DIV, X=MOD
sta LBUF.C1 sta LBUF.C1
lda C1.MASK,x lda C1.MASK,x
sta LBUF.C1.MASK sta LBUF.C1.MASK
lda C1.DATA,x lda C1.DATA,x
sta LBUF.C1.DATA sta LBUF.C1.DATA
@ -14,21 +14,19 @@ LBUF.SetBounds1YA
LBUF.SetBounds2YA LBUF.SetBounds2YA
jsr DIVMOD7YA A=DIV, X=MOD jsr DIVMOD7YA A=DIV, X=MOD
sta LBUF.C2 sta LBUF.C2
cmp LBUF.C1 C1=C2, go combine in C1 cmp LBUF.C1
beq .1 beq .1
lda C2.MASK,x lda C2.MASK,x
sta LBUF.C2.MASK sta LBUF.C2.MASK
lda C2.DATA,x lda C2.DATA,x
sta LBUF.C2.DATA sta LBUF.C2.DATA
rts rts
.1 lda C1.MASK,x .1 lda C2.MASK,x C1=C2, go combine in C1
ora C2.MASK,x tsb LBUF.C1.MASK
sta LBUF.C1.MASK lda C2.DATA,x
lda C1.DATA,x tsb LBUF.C1.DATA
ora C2.DATA,x
sta LBUF.C1.DATA
rts rts
*-------------------------------------- *--------------------------------------
LBUF.DrawAtY lda BASEL,y setup line Base Ptr LBUF.DrawAtY lda BASEL,y setup line Base Ptr
@ -70,7 +68,7 @@ LBUF.DrawAtY.AND.SET
inx inx
cpx LBUF.C2 cpx LBUF.C2
bcc .1 bcc .1
.2 >X2PageY .2 >X2PageY
lda (ZPBasePtr),y Get C2 lda (ZPBasePtr),y Get C2
@ -83,7 +81,7 @@ LBUF.DrawAtY.AND.SET
sta (ZPBasePtr),y update screen sta (ZPBasePtr),y update screen
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
LBUF.DrawAtY.XOR LBUF.DrawAtY.XOR
LBUF.DrawAtY.AND.XOR LBUF.DrawAtY.AND.XOR
lda #$51 EOR (Indirect),Y lda #$51 EOR (Indirect),Y
@ -92,33 +90,29 @@ LBUF.DrawAtY.AND.XOR
LBUF.DrawAtY.ORA LBUF.DrawAtY.ORA
lda #$11 ORA (Indirect),Y lda #$11 ORA (Indirect),Y
LBUF.DrawAtY.XXX LBUF.DrawAtY.XXX
sta .10+1 sta .10
sta .20+1 sta .20
sta .30+1 sta .30
ldx LBUF.C1 x C1->C2 ldx LBUF.C1 x C1->C2
>X2PageY >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 lda LBUF.DATA,x get DATA bits
and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 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 sta (ZPBasePtr),y update screen
inx inx
cpx LBUF.C2 cpx LBUF.C2
beq .2 C1=C2, go setup 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 .1 >X2PageY
lda LBUF.DATA,x set all bytes between C1+1 & C2-1 lda LBUF.DATA,x set all bytes between C1+1 & C2-1
.20 ora (ZPBasePtr),y .20 eor (ZPBasePtr),y
sta (ZPBasePtr),y sta (ZPBasePtr),y
inx inx
@ -127,15 +121,11 @@ LBUF.DrawAtY.XXX
.2 >X2PageY .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 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
.30 ora (ZPBasePtr),y .30 eor (ZPBasePtr),y
sta (ZPBasePtr),y update screen sta (ZPBasePtr),y update screen
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
@ -146,51 +136,41 @@ LBUF.DrawAtY.AND.ORA
lda LBUF.MASK,x get MASK bits lda LBUF.MASK,x get MASK bits
ora LBUF.C1.MASK clear ONLY bits starting at X1 mod 7 ora LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
and (ZPBasePtr),y
cpx LBUF.C2
bne .1
ora LBUF.C2.MASK special case : C1=C2
and (ZPBasePtr),y
sta ZPTmpByte sta ZPTmpByte
lda LBUF.DATA,x lda LBUF.DATA,x
and LBUF.C1.DATA and LBUF.C1.DATA
and LBUF.C2.DATA ora ZPTmpByte
ora ZPTmpByte
sta (ZPBasePtr),y update screen sta (ZPBasePtr),y update screen
rts
.1 and (ZPBasePtr),y Clear screen at C1 inx
sta ZPTmpByte cpx LBUF.C2
beq .2 C1=C2, go setup C2
lda LBUF.DATA,x get DATA bits bcs .8 C1+1 > C2, we are done...
and LBUF.C1.DATA set ONLY bits starting at X1 mod 7
ora ZPTmpByte ora with screen bits
bra .3
.2 >X2PageY .1 >X2PageY
lda (ZPBasePtr),y lda (ZPBasePtr),y
and LBUF.MASK,x and LBUF.MASK,x
ora LBUF.DATA,x set all bytes between C1+1 & C2-1 ora LBUF.DATA,x set all bytes between C1+1 & C2-1
.3 sta (ZPBasePtr),y update screen sta (ZPBasePtr),y update screen
inx inx
cpx LBUF.C2 cpx LBUF.C2
bne .2 bne .1
>X2PageY .2 >X2PageY
lda LBUF.MASK,x get MASK bits lda LBUF.MASK,x get MASK bits
ora LBUF.C2.MASK ora LBUF.C2.MASK
and (ZPBasePtr),y and (ZPBasePtr),y
sta ZPTmpByte sta ZPTmpByte
lda LBUF.DATA,x get DATA bits 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 ora ZPTmpByte
sta (ZPBasePtr),y update screen sta (ZPBasePtr),y update screen

View File

@ -478,11 +478,14 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
ldx DstBM.Cache+S.BM.W+1 ldx DstBM.Cache+S.BM.W+1
bit #7 bit #7
beq .1 beq .1
and #$F8 and #$F8
clc clc
adc #8 adc #8
bcc .1 bcc .1
inx inx
.1 sta DstBM.Cache+S.BM.RowBytes .1 sta DstBM.Cache+S.BM.RowBytes
txa txa
@ -509,12 +512,16 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
adc /S.BM adc /S.BM
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .9 bcs .9
>STYA ZPDstBMPtr >STYA ZPDstBMPtr
ldy #S.BM-1 ldy #S.BM-1
.2 lda DstBM.Cache,y .2 lda DstBM.Cache,y
sta (ZPDstBMPtr),y sta (ZPDstBMPtr),y
dey dey
bpl .2 bpl .2
lda ZPDstBMPtr lda ZPDstBMPtr
* clc * clc
adc #S.BM adc #S.BM
@ -524,6 +531,7 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
adc /S.BM adc /S.BM
sta ZPDstBMPtr+1 sta ZPDstBMPtr+1
sta .4+2 sta .4+2
ldy #0 ldy #0
lda CBX.Cache+S.CB.OP lda CBX.Cache+S.CB.OP
@ -531,16 +539,22 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
beq .3 beq .3
lda #$ff lda #$ff
.3 inc ZPTmpPtr .3 inc ZPTmpPtr
bne .4 bne .4
inc ZPTmpPtr+1 inc ZPTmpPtr+1
beq .8 beq .8
.4 sta $ffff,y .4 sta $ffff,y
iny iny
bne .3 bne .3
inc .4+2 inc .4+2
bra .3 bra .3
.8 txa hBM .8 txa hBM
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------

View File

@ -121,6 +121,7 @@ FD.DEV.NAME .AZ "mou1"
*-------------------------------------- *--------------------------------------
ZPIOCTL .EQ ZPDRV ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2 ZPBufPtr .EQ ZPDRV+2
ZPState .EQ ZPDRV+4
*-------------------------------------- *--------------------------------------
DRV.CS.START cld DRV.CS.START cld
jmp (.1,x) jmp (.1,x)
@ -225,7 +226,7 @@ EXIT1 jsr GOMOUSE
*-------------------------------------- *--------------------------------------
READ >STYA ZPBufPtr NON STANDARD READ >STYA ZPBufPtr NON STANDARD
stz READ.S+1 Reset Flags stz ZPState Reset Flags
php php
sei sei
@ -255,7 +256,8 @@ READ >STYA ZPBufPtr NON STANDARD
sta (ZPBufPtr),y sta (ZPBufPtr),y
lda #S.XY.S.MOVE lda #S.XY.S.MOVE
tsb READ.S+1 tsb ZPState
stz bDblClick Reset DblClick flag stz bDblClick Reset DblClick flag
.1 lda MOUSESTSx,x .1 lda MOUSESTSx,x
@ -263,32 +265,41 @@ READ >STYA ZPBufPtr NON STANDARD
beq .8 no button state change:up & previously up beq .8 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:down & previously down bne .10
asl if CS, down & previously up lda ZPState no button state change:down & previously down
bcc .2 and #S.XY.S.MOVE
beq .8
lda #S.XY.S.DOWN
tsb READ.S+1 button has been pressed, start drag... sec
ror bDrag
lda MOUSEXLOx,x
sta SrcDrag lda #S.XY.S.DRAGSTART
lda MOUSEXHIx,x tsb ZPState
sta SrcDrag+1
lda MOUSEYLOx,x
sta SrcDrag+2
lda MOUSEYHIx,x
sta SrcDrag+3
bra .8 bra .8
.2 lda READ.S+1 .10 asl
pha save move state bcc .2 if CC, up & previously down
ora #S.XY.S.UP
sta READ.S+1
pla get back move state
bne .4 no move...click!
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 bit bDblClick
bpl .3 bpl .3
@ -299,11 +310,11 @@ READ >STYA ZPBufPtr NON STANDARD
.3 dec bDblClick .3 dec bDblClick
tsb READ.S+1 tsb ZPState
bra .8 bra .8
*--------------------------------------
.4 lda #S.XY.S.DRAGSTART .4 lda #S.XY.S.DRAGEND
tsb READ.S+1 tsb ZPState
ldy #S.XY.X2+3 ldy #S.XY.X2+3
@ -311,10 +322,12 @@ READ >STYA ZPBufPtr NON STANDARD
sta (ZPBufPtr),y sta (ZPBufPtr),y
dey dey
bpl .5 bpl .5
stz bDrag
*--------------------------------------
.8 plp .8 plp
READ.S lda #$ff SELF MODIFIED lda ZPState
beq .9 beq .9
ldy #S.XY.S ldy #S.XY.S
@ -356,6 +369,7 @@ GOMOUSE.JMP jmp $C100 SELF MODIFIED
DRV.CS.END DRV.CS.END
DEVSLOT0n .BS 1 DEVSLOT0n .BS 1
bDblClick .BS 1 bDblClick .BS 1
bDrag .BS 1
SrcDrag .BS 4 SrcDrag .BS 4
*-------------------------------------- *--------------------------------------
DIB .DA #0 DIB .DA #0

View File

@ -46,6 +46,9 @@ BM.ID.RIGHT .EQ 12
BM.ID.UP .EQ 14 BM.ID.UP .EQ 14
BM.ID.DOWN .EQ 16 BM.ID.DOWN .EQ 16
BM.ID.INFO .EQ 18 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.OK .EQ 1
BUT.ID.CANCEL .EQ 2 BUT.ID.CANCEL .EQ 2
@ -86,14 +89,6 @@ S.MSG.Y1 .EQ 8
S.MSG.X2 .EQ 10 S.MSG.X2 .EQ 10
S.MSG.Y2 .EQ 12 S.MSG.Y2 .EQ 12
S.MSG.S .EQ 14 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 S.MSG .EQ 16
*-------------------------------------- *--------------------------------------
@ -115,9 +110,12 @@ S.OBJ.T.MBAR .EQ 2
S.OBJ.T.MENU .EQ 4 S.OBJ.T.MENU .EQ 4
S.OBJ.T.BUT .EQ 6 S.OBJ.T.BUT .EQ 6
S.OBJ.T.TEXT .EQ 8 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 .EQ 1
S.OBJ.F.BORDER .EQ %10000000 S.OBJ.F.BORDER .EQ %10000000
S.OBJ.S .EQ 2 S.OBJ.S .EQ 2
S.OBJ.S.VISIBLE .EQ %10000000 S.OBJ.S.VISIBLE .EQ %10000000
@ -131,8 +129,8 @@ S.OBJ.X2 .EQ 12
S.OBJ.Y2 .EQ 14 S.OBJ.Y2 .EQ 14
S.OBJ.W .EQ 16 S.OBJ.W .EQ 16
S.OBJ.H .EQ 18 S.OBJ.H .EQ 18
S.OBJ.pNEXT .EQ 20 S.OBJ.pChilds .EQ 20
* S.OBJ.pNext .EQ 22
* *
S.OBJ .EQ 24 S.OBJ .EQ 24
*-------------------------------------- *--------------------------------------
@ -149,7 +147,7 @@ S.WND.S.HASMBAR .EQ %00000010
S.WND.S.HASSBAR .EQ %00000100 S.WND.S.HASSBAR .EQ %00000100
S.WND.S.MAXIMIZED .EQ %00001000 S.WND.S.MAXIMIZED .EQ %00001000
S.WND.S.MINIMIZED .EQ %00010000 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.MinW .EQ S.OBJ
S.WND.MinH .EQ S.OBJ+2 S.WND.MinH .EQ S.OBJ+2
@ -163,24 +161,24 @@ S.WND.hPTR .EQ S.OBJ+16
* *
* private * private
* *
S.WND.TitleX1 .EQ S.OBJ+18 S.WND.TBarY2 .EQ S.OBJ+20
S.WND.TitleX2 .EQ S.OBJ+20 S.WND.MBarY1 .EQ S.OBJ+22
* S.WND.TBarY1 .EQ S.OBJ.X1 S.WND.MBarY2 .EQ S.OBJ+24
S.WND.TBarY2 .EQ S.OBJ+22 S.WND.SBarY1 .EQ S.OBJ+26
S.WND.MBarY1 .EQ S.OBJ+24 *
S.WND.MBarY2 .EQ S.OBJ+26 S.WND.InnerX1 .EQ S.OBJ+28
S.WND.InnerY1 .EQ S.OBJ+28 S.WND.InnerY1 .EQ S.OBJ+30
S.WND.InnerY2 .EQ S.OBJ+30 S.WND.InnerX2 .EQ S.OBJ+32
S.WND.SBarY1 .EQ S.OBJ+32 S.WND.InnerY2 .EQ S.OBJ+34
S.WND.InnerX2 .EQ S.OBJ+34
S.WND.InnerW .EQ S.OBJ+36 S.WND.InnerW .EQ S.OBJ+36
S.WND.InnerH .EQ S.OBJ+38 S.WND.InnerH .EQ S.OBJ+38
*
S.WND.DocW .EQ S.OBJ+40 S.WND.DocW .EQ S.OBJ+40
S.WND.DocH .EQ S.OBJ+42 S.WND.DocH .EQ S.OBJ+42
S.WND.DocX .EQ S.OBJ+44 S.WND.DocX .EQ S.OBJ+44
S.WND.DocY .EQ S.OBJ+46 S.WND.DocY .EQ S.OBJ+46
S.WND.fPaint .EQ S.OBJ+48 S.WND.fPaint .EQ S.OBJ+48
S.WND.pChilds .EQ S.OBJ+50 *
* *
S.WND .EQ S.OBJ+52 S.WND .EQ S.OBJ+52
*-------------------------------------- *--------------------------------------
@ -221,10 +219,11 @@ S.MITEM.ID .EQ 10
* *
S.MITEM .EQ 12 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.F.NOSPACE .EQ %00000001
* *
S.BUT.S.PUSHED .EQ %10000000 S.BUT.S.SELECTED .EQ %10000000
* *
S.BUT.pICON .EQ S.OBJ S.BUT.pICON .EQ S.OBJ
S.BUT.pTEXT .EQ S.OBJ+2 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.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.F.DISABLED .EQ %10000000
* *
S.TEXT.hBM .EQ S.OBJ S.TEXT.hBM .EQ S.OBJ
S.TEXT.TEXTX .EQ S.OBJ+2 S.TEXT.TEXTX .EQ S.OBJ+2
S.TEXT.TEXTY .EQ S.OBJ+4 S.TEXT.TEXTY .EQ S.OBJ+4
S.TEXT.TEXTLEN .EQ S.OBJ+6 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 MAN
SAVE inc/libgui.i SAVE inc/libgui.i

View File

@ -1,9 +1,8 @@
NEW NEW
AUTO 3,1 AUTO 3,1
#define C_BLACK 0 #define C_BLACK ((void *)0)
#define C_WHITE 255 #define C_WHITE ((void *)255)
#define pC_WHITE ((void *)255)
#define PTR_T_ARROW 0 #define PTR_T_ARROW 0
#define PTR_T_MOVE 2 #define PTR_T_MOVE 2
@ -11,7 +10,7 @@ NEW
#define PTR_T_RESIZEY 6 #define PTR_T_RESIZEY 6
#define PTR_T_RESIZEXY1 8 #define PTR_T_RESIZEXY1 8
#define PTR_T_RESIZEXY2 10 #define PTR_T_RESIZEXY2 10
#define PTR_T_CROSS 12 #define PTR_T_CROSS ((void *)12)
#define PTR_T_TEXT 14 #define PTR_T_TEXT 14
#define PTR_T_WAIT 16 #define PTR_T_WAIT 16

View File

@ -177,41 +177,63 @@ BM.Down.AND .DA #%1111111
.DA #%1110111 .DA #%1110111
.DA #%1111111 .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 BM.Info .DA #S.BM.F.BBP4
.DA #4 RowBytes .DA #4 RowBytes
.DA 28 W .DA 32 W
.DA 14 H .DA 14 H
.DA BM.INFO.AND-BM.INFO .DA BM.Info.AND-BM.Info
.HS 00000000 .HX 00000000
.HS 00000000 .HX 00022000
.HS 00000000 .HX 00222200
.HS 00000000 .HX 002FF200
.HS 0BBBBB00 .HX 022FF220
.HS 0BBBBB00 .HX 02222220
.HS 0BBBBB00 .HX 02FFFF20
.HS 0BBBBB00 .HX 022FF220
.HS 0BBBBB00 .HX 022FF220
.HS 0BBBBB00 .HX 02FFFF20
.HS 00000000 .HX 00222200
.HS 00000000 .HX 00222200
.HS 00000000 .HX 00022000
.HS 00000000 .HX 00000000
BM.Info.AND .HS FFF0FFF0 BM.Info.AND .HX FFF00FFF
.HS FF000FF0 .HX FF0000FF
.HS FF000FF0 .HX F000000F
.HS F00000F0 .HX F000000F
.HS F00000F0 .HX 00000000
.HS 00000000 .HX 00000000
.HS 00000000 .HX 00000000
.HS 00000000 .HX 00000000
.HS 00000000 .HX 00000000
.HS F00000F0 .HX 00000000
.HS F00000F0 .HX F000000F
.HS FF0000F0 .HX F000000F
.HS FF000FF0 .HX FF0000FF
.HS FFF0FFF0 .HX FFF00FFF
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/lib/libgui.g.bm SAVE usr/src/lib/libgui.g.bm

View File

@ -3,7 +3,6 @@ NEW
*-------------------------------------- *--------------------------------------
hSYSFON .BS 1 hSYSFON .BS 1
hSYSFONB .BS 1 hSYSFONB .BS 1
SYSFON.Hm1 .BS 1
SYSFON.H .BS 1 SYSFON.H .BS 1
SYSFON.Hp1 .BS 1 SYSFON.Hp1 .BS 1
SYSFON.Hp2 .BS 1 SYSFON.Hp2 .BS 1

View File

@ -4,6 +4,9 @@ NEW
PTR.T .BS 1 PTR.T .BS 1
PTR.bVisible .BS 1 PTR.bVisible .BS 1
PTR.Pos .BS S.POINT 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 PTR.HotPoints .DA #0,#0 PTR.T.ARROW
.DA #6,#6 PTR.T.MOVE .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.Wait5
.DA #8,#7 PTR.Wait6 .DA #8,#7 PTR.Wait6
*-------------------------------------- *--------------------------------------
PTR.SaveBuf .BS 64 16*4
*--------------------------------------
PTR.Arrow .DA #S.BM.F.BBP1 PTR.Arrow .DA #S.BM.F.BBP1
.DA #2 RowBytes .DA #2 RowBytes
.DA 11 W .DA 11 W
@ -56,32 +57,32 @@ PTR.Arrow.MASK .DA %111.11111100
*-------------------------------------- *--------------------------------------
PTR.Move .DA #S.BM.F.BBP1 PTR.Move .DA #S.BM.F.BBP1
.DA #2 RowBytes .DA #2 RowBytes
.DA 11 W .DA 12 W
.DA 11 H .DA 11 H
.DA PTR.Move.MASK-PTR.Move .DA PTR.Move.MASK-PTR.Move
.DA %000.00100000 .DA %0000.001000000
.DA %000.01010000 .DA %0000.010100000
.DA %000.10001000 .DA %0000.100010000
.DA %001.00000100 .DA %0001.111111000
.DA %010.00000010 .DA %0010.100010100
.DA %100.00000001 .DA %0100.100010010
.DA %010.00000010 .DA %0010.100010100
.DA %001.00000100 .DA %0001.111111000
.DA %000.10001000 .DA %0000.100010000
.DA %000.01010000 .DA %0000.010100000
.DA %000.00100000 .DA %0000.001000000
PTR.Move.MASK PTR.Move.MASK
.DA %111.11111111 .DA %1111.100011111
.DA %111.11111111 .DA %1111.000001111
.DA %111.11111111 .DA %1110.000000111
.DA %111.11111111 .DA %1100.000000011
.DA %111.11111111 .DA %1000.000000001
.DA %111.11111111 .DA %0000.000000000
.DA %111.11111111 .DA %1000.000000001
.DA %111.11111111 .DA %1100.000000011
.DA %111.11111111 .DA %1110.000000111
.DA %111.11111111 .DA %1111.000001111
.DA %111.11111111 .DA %1111.100011111
*-------------------------------------- *--------------------------------------
PTR.ResizeX .DA #S.BM.F.BBP1 PTR.ResizeX .DA #S.BM.F.BBP1
.DA #2 RowBytes .DA #2 RowBytes

52
LIB/LIBGUI.S.BITMAP.txt Normal file
View File

@ -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

View File

@ -1,9 +1,43 @@
NEW NEW
AUTO 3,1 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 MAN
SAVE usr/src/lib/libgui.s.bm SAVE usr/src/lib/libgui.s.bm

View File

@ -5,9 +5,9 @@ NEW
*-------------------------------------- *--------------------------------------
BUT.New lda #S.OBJ.T.BUT BUT.New lda #S.OBJ.T.BUT
jsr OBJ.New jsr OBJ.New
bcs .9 * bcs .9
* >STYA ZPObjPtr phx hOBJ
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
jsr OBJ.PullWordAtY jsr OBJ.PullWordAtY
@ -15,6 +15,9 @@ BUT.New lda #S.OBJ.T.BUT
ldy #S.OBJ.X1 ldy #S.OBJ.X1
jsr OBJ.PullWordAtY jsr OBJ.PullWordAtY
ldy #S.BUT.ID
jsr OBJ.PullWordAtY
ldy #S.BUT.KEYMOD ldy #S.BUT.KEYMOD
jsr OBJ.PullWordAtY jsr OBJ.PullWordAtY
@ -74,7 +77,7 @@ BUT.New lda #S.OBJ.T.BUT
adc DX+1 adc DX+1
sta DX+1 sta DX+1
.3 lda #PREFS.XSeparator .3 lda PREFS.XSeparator
asl asl
* clc * clc
adc DX adc DX
@ -85,26 +88,95 @@ BUT.New lda #S.OBJ.T.BUT
iny iny
sta (ZPObjPtr),y 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 rts
.9 >POP 14 .9 >POP 16
rts rts
*-------------------------------------- *--------------------------------------
BUT.Enter BUT.Enter ldy #S.OBJ.S
*-------------------------------------- lda (ZPObjPtr),y
BUT.Draw 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 BUT.Close
clc clc
rts 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 MAN
SAVE usr/src/lib/libgui.s.but SAVE usr/src/lib/libgui.s.but
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -1,27 +1,6 @@
NEW NEW
AUTO 3,1 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 CB.GetWndYCacheX
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache,x sta CB.Cache,x
@ -30,6 +9,32 @@ CB.GetWndYCacheX
sta CB.Cache+1,x sta CB.Cache+1,x
rts 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 CB.BorderLineH lda #S.CB.CMD.HLINE
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
lda #S.CB.OP.SET lda #S.CB.OP.SET
@ -53,12 +58,115 @@ CB.FillRectMonoA
sta CB.Cache+S.CB.M sta CB.Cache+S.CB.M
rts 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 CB.GetBuf clc
ldx hCBBuf ldx hCBBuf
bne .9 bne .9
>LDYAI 512 >LDYAI 1024
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .9 bcs .9
@ -67,82 +175,86 @@ CB.GetBuf clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CB.Cache2CBBuf CB.Cache2CBBufG jsr CB.ToGlobal
lda CB.Cache *--------------------------------------
CB.Cache2CBBuf lda CB.Cache
lsr lsr
tax tax
ldy CB.CmdLen-1,x ldy CB.CmdLen-1,x
ldx #0 .1 lda CB.Cache,y
sta (ZPCBBufPtr),y
.1 lda CB.Cache,x
sta (ZPCBBufPtr)
inc ZPCBBufPtr
bne .2
inc ZPCBBufPtr+1
.2 inx
dey dey
bpl .1 bpl .1
rts
*-------------------------------------- *--------------------------------------
* Y,A = Target Object CB.BufNext lda (ZPCBBufPtr) Get Cmd
*--------------------------------------
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
lsr lsr
tax tax
lda CB.CmdLen-1,x lda CB.CmdLen-1,x
sec +1 sec +1
adc ZPCBBufPtr adc ZPCBBufPtr
sta ZPCBBufPtr sta ZPCBBufPtr
bcc .2 bcc .1
inc ZPCBBufPtr+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 .7 lda hCBBuf
stz hCBBuf stz hCBBuf
@ -153,55 +265,13 @@ CB.FlushBufToYA jsr CLIP.GetRect
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CB.GFXWritePtr jsr PTR.Disable CB.ToGlobal lda ZPWNDPtr
jsr CB.GFXWrite ldx ZPWNDPtr+1
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
lda CB.Cache+S.CB.SrcW+1 .1 sta ZPPtr1
adc CB.Cache+S.CB.X1+1 stx ZPPtr1+1
tax
pla
bne .2
dex ldy #S.WND.InnerX1
.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
ldx #S.CB.X1 ldx #S.CB.X1
jsr CB.AddPtr1YtoCBX jsr CB.AddPtr1YtoCBX
@ -209,7 +279,7 @@ CB.ToGlobal >STYA ZPPtr1
ldx #S.CB.Y1 ldx #S.CB.Y1
jsr CB.AddPtr1YtoCBX jsr CB.AddPtr1YtoCBX
ldy #S.OBJ.X1 ldy #S.WND.InnerX1
ldx #S.CB.X2 ldx #S.CB.X2
jsr CB.AddPtr1YtoCBX jsr CB.AddPtr1YtoCBX
@ -224,9 +294,6 @@ CB.ToGlobal >STYA ZPPtr1
tax tax
dey dey
lda (ZPPtr1),y lda (ZPPtr1),y
sta ZPPtr1
stx ZPPtr1+1
bra .1 bra .1
.8 clc .8 clc
@ -243,6 +310,21 @@ CB.AddPtr1YtoCBX
sta CB.Cache+1,x sta CB.Cache+1,x
rts 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 MAN
SAVE usr/src/lib/libgui.s.cb SAVE usr/src/lib/libgui.s.cb
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -1,15 +1,36 @@
NEW NEW
AUTO 3,1 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: * CLIPPING Functions:
* In: * In:
* Target Clipping Region in CLIP.Rect * Target Clipping Region in CLIP.Rect
* YA = Control Block * YA = Control Block
* Out: * Out:
* CC : CB.Cache clipped & visible * CC : CLIP.Cache clipped & visible
* CS : CB.Cache invisible * 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 and #$7F remove S.CB.CMD.OSD
tax tax
jmp (J.CLIP-2,x) jmp (J.CLIP-2,x)
@ -18,66 +39,68 @@ CLIP.Point
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CLIP.HLine >LDYA CB.Cache+S.CB.Y1 CLIP.HLine >LDYA CLIP.Cache+S.CB.Y1
>SCMPYA CLIP.Rect+S.RECT.Y2 >SCMPYA CLIP.Rect+S.RECT.Y2
bpl .9 bpl .9
>LDYA CB.Cache+S.CB.Y1 >LDYA CLIP.Cache+S.CB.Y1
>SCMPYA CLIP.Rect+S.RECT.Y1 >SCMPYA CLIP.Rect+S.RECT.Y1
bmi .9 bmi .9
>LDYA CLIP.Rect+S.RECT.X1 >LDYA CLIP.Rect+S.RECT.X1
>STYAIFGTR CB.Cache+S.CB.X1 >STYAIFGTR CLIP.Cache+S.CB.X1
>LDYA CLIP.Rect+S.RECT.X2 >LDYA CLIP.Rect+S.RECT.X2
>STYAIFLWR CB.Cache+S.CB.X2 >STYAIFLWR CLIP.Cache+S.CB.X2
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CLIP.VLine >LDYA CB.Cache+S.CB.X1 CLIP.VLine >LDYA CLIP.Cache+S.CB.X1
>SCMPYA CLIP.Rect+S.RECT.X2 >SCMPYA CLIP.Rect+S.RECT.X2
bpl .9 bpl .9
>LDYA CB.Cache+S.CB.X1 >LDYA CLIP.Cache+S.CB.X1
>SCMPYA CLIP.Rect+S.RECT.X1 >SCMPYA CLIP.Rect+S.RECT.X1
bmi .9
>LDYA CLIP.Rect+S.RECT.Y1 bpl CLIP.Y1Y2
>STYAIFGTR CB.Cache+S.CB.Y1
* bmi .9
>LDYA CLIP.Rect+S.RECT.Y2 * >LDYA CLIP.Rect+S.RECT.Y1
>STYAIFLWR CB.Cache+S.CB.Y2 * >STYAIFGTR CLIP.Cache+S.CB.Y1
clc * >LDYA CLIP.Rect+S.RECT.Y2
rts * >STYAIFLWR CLIP.Cache+S.CB.Y2
* clc
* rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CLIP.Rectangle jsr CLIP.Rect.Overlap CLIP.Rectangle jsr CLIP.Rect.Overlap
bcs .9 bcs CLIP.Text.RTS
>LDYA CLIP.Rect+S.RECT.X1 >LDYA CLIP.Rect+S.RECT.X1
>STYAIFGTR CB.Cache+S.CB.X1 >STYAIFGTR CLIP.Cache+S.CB.X1
>LDYA CLIP.Rect+S.RECT.X2 >LDYA CLIP.Rect+S.RECT.X2
>STYAIFLWR CB.Cache+S.CB.X2 >STYAIFLWR CLIP.Cache+S.CB.X2
>LDYA CLIP.Rect+S.RECT.Y1 CLIP.Y1Y2 >LDYA CLIP.Rect+S.RECT.Y1
>STYAIFGTR CB.Cache+S.CB.Y1 >STYAIFGTR CLIP.Cache+S.CB.Y1
>LDYA CLIP.Rect+S.RECT.Y2 >LDYA CLIP.Rect+S.RECT.Y2
>STYAIFLWR CB.Cache+S.CB.Y2 >STYAIFLWR CLIP.Cache+S.CB.Y2
clc * clc
.9 rts * rts
*-------------------------------------- *--------------------------------------
CLIP.Text CLIP.Text clc
clc
rts rts
CLIP.Text.9 sec CLIP.Text.9 sec
@ -85,137 +108,146 @@ CLIP.Text.RTS rts
*-------------------------------------- *--------------------------------------
* BitBlt : * BitBlt :
*-------------------------------------- *--------------------------------------
CLIP.BitBlt jsr CB.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1 CLIP.BitBlt jsr CLIP.SetX2Y2
jsr CLIP.Rect.Overlap jsr CLIP.Rect.Overlap
bcs CLIP.Text.RTS bcs CLIP.Text.RTS
lda CLIP.Rect+S.RECT.X1 ldx #S.RECT select CLIP.Rect
sec
sbc CB.Cache+S.CB.X1
sta DX
lda CLIP.Rect+S.RECT.X1+1 CLIP.BitBltX lda CLIP.Screen+S.RECT.X1,x
sbc CB.Cache+S.CB.X1+1 sec
sta DX+1 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 bvc .1
eor #$80 eor #$80
.1 bmi .2 .1 bmi .2
lda CB.Cache+S.CB.X1 lda CLIP.Cache+S.CB.X1
clc clc
adc DX adc TmpW
sta CB.Cache+S.CB.X1 sta CLIP.Cache+S.CB.X1
lda CB.Cache+S.CB.X1+1 lda CLIP.Cache+S.CB.X1+1
adc DX+1 adc TmpW+1
sta CB.Cache+S.CB.X1+1 sta CLIP.Cache+S.CB.X1+1
lda CB.Cache+S.CB.SrcX lda CLIP.Cache+S.CB.SrcX
clc clc
adc DX adc TmpW
sta CB.Cache+S.CB.SrcX sta CLIP.Cache+S.CB.SrcX
lda CB.Cache+S.CB.SrcX+1 lda CLIP.Cache+S.CB.SrcX+1
adc DX+1 adc TmpW+1
sta CB.Cache+S.CB.SrcX+1 sta CLIP.Cache+S.CB.SrcX+1
lda CB.Cache+S.CB.SrcW lda CLIP.Cache+S.CB.SrcW
sec sec
sbc DX sbc TmpW
sta CB.Cache+S.CB.SrcW sta CLIP.Cache+S.CB.SrcW
lda CB.Cache+S.CB.SrcW+1 lda CLIP.Cache+S.CB.SrcW+1
sbc DX+1 sbc TmpW+1
sta CB.Cache+S.CB.SrcW+1 sta CLIP.Cache+S.CB.SrcW+1
bcc CLIP.Text.9 bcc CLIP.Text.9
*--------------------------------------
.2 lda CB.Cache+S.CB.X2 .2 lda CLIP.Cache+S.CB.X2
sec sec
sbc CLIP.Rect+S.RECT.X2 sbc CLIP.Screen+S.RECT.X2,x
sta DX sta TmpW
lda CB.Cache+S.CB.X2+1 lda CLIP.Cache+S.CB.X2+1
sbc CLIP.Rect+S.RECT.X2+1 sbc CLIP.Screen+S.RECT.X2+1,x
sta DX+1 sta TmpW+1
bvc .3 bvc .3
eor #$80 eor #$80
.3 bmi .4 .3 bmi .4
lda CB.Cache+S.CB.SrcW lda CLIP.Cache+S.CB.SrcW
sec sec
sbc DX sbc TmpW
sta CB.Cache+S.CB.SrcW sta CLIP.Cache+S.CB.SrcW
lda CB.Cache+S.CB.SrcW+1 lda CLIP.Cache+S.CB.SrcW+1
sbc DX+1 sbc TmpW+1
sta CB.Cache+S.CB.SrcW+1 sta CLIP.Cache+S.CB.SrcW+1
bcc .9 bcc .9
*--------------------------------------
.4 lda CLIP.Rect+S.RECT.Y1 .4 lda CLIP.Screen+S.RECT.Y1,x
sec sec
sbc CB.Cache+S.CB.Y1 sbc CLIP.Cache+S.CB.Y1
sta DX sta TmpW
lda CLIP.Rect+S.RECT.Y1+1 lda CLIP.Screen+S.RECT.Y1+1,x
sbc CB.Cache+S.CB.Y1+1 sbc CLIP.Cache+S.CB.Y1+1
sta DX+1 sta TmpW+1
bvc .5 bvc .5
eor #$80 eor #$80
.5 bmi .6 .5 bmi .6
lda CB.Cache+S.CB.Y1 lda CLIP.Cache+S.CB.Y1
clc clc
adc DX adc TmpW
sta CB.Cache+S.CB.Y1 sta CLIP.Cache+S.CB.Y1
lda CB.Cache+S.CB.Y1+1 lda CLIP.Cache+S.CB.Y1+1
adc DX+1 adc TmpW+1
sta CB.Cache+S.CB.Y1+1 sta CLIP.Cache+S.CB.Y1+1
lda CB.Cache+S.CB.SrcY lda CLIP.Cache+S.CB.SrcY
clc clc
adc DX adc TmpW
sta CB.Cache+S.CB.SrcY sta CLIP.Cache+S.CB.SrcY
lda CB.Cache+S.CB.SrcY+1 lda CLIP.Cache+S.CB.SrcY+1
adc DX+1 adc TmpW+1
sta CB.Cache+S.CB.SrcY+1 sta CLIP.Cache+S.CB.SrcY+1
lda CB.Cache+S.CB.SrcH lda CLIP.Cache+S.CB.SrcH
sec sec
sbc DX sbc TmpW
sta CB.Cache+S.CB.SrcH sta CLIP.Cache+S.CB.SrcH
lda CB.Cache+S.CB.SrcH+1 lda CLIP.Cache+S.CB.SrcH+1
sbc DX+1 sbc TmpW+1
sta CB.Cache+S.CB.SrcH+1 sta CLIP.Cache+S.CB.SrcH+1
bcc .9 bcc .9
*--------------------------------------
.6 lda CB.Cache+S.CB.Y2 .6 lda CLIP.Cache+S.CB.Y2
sec sec
sbc CLIP.Rect+S.RECT.Y2 sbc CLIP.Screen+S.RECT.Y2,x
sta DX sta TmpW
lda CB.Cache+S.CB.Y2+1 lda CLIP.Cache+S.CB.Y2+1
sbc CLIP.Rect+S.RECT.Y2+1 sbc CLIP.Screen+S.RECT.Y2+1,x
sta DX+1 sta TmpW+1
bvc .7 bvc .7
eor #$80 eor #$80
.7 bmi .8 .7 bmi .8
lda CB.Cache+S.CB.SrcH lda CLIP.Cache+S.CB.SrcH
sec sec
sbc DX sbc TmpW
sta CB.Cache+S.CB.SrcH sta CLIP.Cache+S.CB.SrcH
lda CB.Cache+S.CB.SrcH+1 lda CLIP.Cache+S.CB.SrcH+1
sbc DX+1 sbc TmpW+1
sta CB.Cache+S.CB.SrcH+1 sta CLIP.Cache+S.CB.SrcH+1
bcc .9 bcc .9
.8 clc .8 clc
.99 rts rts
.9 sec .9 sec
rts rts
@ -309,12 +341,12 @@ CLIP.Line jsr CLIP.Line.EncodeP1
CLIP.Line.EncodeP1 CLIP.Line.EncodeP1
ldy #0 ldy #0
lda CB.Cache+S.CB.X1 lda CLIP.Cache+S.CB.X1
ldx CB.Cache+S.CB.X1+1 ldx CLIP.Cache+S.CB.X1+1
jsr CLIP.Line.EncodeX.AX jsr CLIP.Line.EncodeX.AX
lda CB.Cache+S.CB.Y1 lda CLIP.Cache+S.CB.Y1
ldx CB.Cache+S.CB.Y1+1 ldx CLIP.Cache+S.CB.Y1+1
jsr CLIP.Line.EncodeY.AX jsr CLIP.Line.EncodeY.AX
sty CLIP.Line.P1 sty CLIP.Line.P1
@ -323,12 +355,12 @@ CLIP.Line.EncodeP1
CLIP.Line.EncodeP2 CLIP.Line.EncodeP2
ldy #0 ldy #0
lda CB.Cache+S.CB.X2 lda CLIP.Cache+S.CB.X2
ldx CB.Cache+S.CB.X2+1 ldx CLIP.Cache+S.CB.X2+1
jsr CLIP.Line.EncodeX.AX jsr CLIP.Line.EncodeX.AX
lda CB.Cache+S.CB.Y2 lda CLIP.Cache+S.CB.Y2
ldx CB.Cache+S.CB.Y2+1 ldx CLIP.Cache+S.CB.Y2+1
jsr CLIP.Line.EncodeY.AX jsr CLIP.Line.EncodeY.AX
sty CLIP.Line.P2 sty CLIP.Line.P2
@ -340,11 +372,11 @@ CLIP.Line.EncodeX.AX
bpl .1 bpl .1
pla pla
tya tya
ora #CLIP.Line.LEFT ora #CLIP.Line.LEFT
tay tay
rts rts
.1 pla .1 pla
@ -379,20 +411,52 @@ CLIP.Line.EncodeY.AX
.8 rts .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 CLIP.Rect.Overlap
>LDYA CB.Cache+S.CB.X1 >LDYA CLIP.Cache+S.CB.X1
>SCMPYA CLIP.Rect+S.RECT.X2 >SCMPYA CLIP.Rect+S.RECT.X2
bpl .9 bpl .9
>LDYA CB.Cache+S.CB.X2 >LDYA CLIP.Cache+S.CB.X2
>SCMPYA CLIP.Rect+S.RECT.X1 >SCMPYA CLIP.Rect+S.RECT.X1
bmi .9 bmi .9
>LDYA CB.Cache+S.CB.Y1 >LDYA CLIP.Cache+S.CB.Y1
>SCMPYA CLIP.Rect+S.RECT.Y2 >SCMPYA CLIP.Rect+S.RECT.Y2
bpl .9 bpl .9
>LDYA CB.Cache+S.CB.Y2 >LDYA CLIP.Cache+S.CB.Y2
>SCMPYA CLIP.Rect+S.RECT.Y1 >SCMPYA CLIP.Rect+S.RECT.Y1
bmi .9 bmi .9
@ -402,19 +466,6 @@ CLIP.Rect.Overlap
.9 sec .9 sec
rts 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 MAN
SAVE usr/src/lib/libgui.s.clip SAVE usr/src/lib/libgui.s.clip
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -3,13 +3,16 @@ NEW
*-------------------------------------- *--------------------------------------
* drawline(short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int X2) * 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.COLOR
>PULLB CB.Cache+S.CB.OP >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 lda CB.Cache+S.CB.X2
sec sec
sbc CB.Cache+S.CB.X1 sbc CB.Cache+S.CB.X1
@ -23,7 +26,15 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
ora DX ora DX
bne .2 DX > 0... 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 bra .20
*-------------------------------------- *--------------------------------------
.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2 .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 .20 sta CB.Cache+S.CB.CMD
jsr CLIP.CB.Cache jmp CB.Write
bcs .8
jmp CB.GFXWrite
.8 clc .8 clc
rts rts
@ -63,7 +71,7 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
lda #$ff lda #$ff
sta IY set IY=-1 sta IY set IY=-1
.4 .4
* jsr CLIP.Line * jsr CLIP.Line
* bcs .8 * bcs .8
@ -71,7 +79,8 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
lda #S.CB.CMD.SETPIXEL lda #S.CB.CMD.SETPIXEL
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
jsr CB.GFXWrite ldx #0 Select CB.Cache
jsr CB.GFXWriteX
lda DX lda DX
sec sec
sbc DY sbc DY
@ -107,7 +116,8 @@ DRAW.Line.IncXY lda DX DX=DY
clc clc
adc IY adc IY
sta CB.Cache+S.CB.Y1 sta CB.Cache+S.CB.Y1
jsr CB.GFXWrite ldx #0 Select CB.Cache
jsr CB.GFXWriteX
bra .1 bra .1
.8 jmp PTR.Enable .8 jmp PTR.Enable
@ -183,7 +193,8 @@ DRAW.Line.IncY lda DY
clc clc
adc IY adc IY
sta CB.Cache+S.CB.Y1 sta CB.Cache+S.CB.Y1
jsr CB.GFXWrite ldx #0 Select CB.Cache
jsr CB.GFXWriteX
bra .1 bra .1
.8 jmp PTR.Enable .8 jmp PTR.Enable
@ -261,112 +272,138 @@ DRAW.Line.IncX lda DX
inc CB.Cache+S.CB.X1+1 inc CB.Cache+S.CB.X1+1
.6 jsr CB.GFXWrite .6 ldx #0 Select CB.Cache
jsr CB.GFXWriteX
bra .1 bra .1
.8 jmp PTR.Enable .8 jmp PTR.Enable
*-------------------------------------- *--------------------------------------
* fill (short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int Y2) * 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.COLOR
>PULLB CB.Cache+S.CB.OP >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 lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
jsr CLIP.CB.Cache jmp CB.Write
bcs .8
jmp CB.GFXWritePtr
.8 clc
rts
*-------------------------------------- *--------------------------------------
* 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 DRAW.BitMap jsr CB.PullY1X1
jsr CB.InitCacheA
jsr DRAW.PullY1X1
>PULLW CB.Cache+S.CB.SrcPtr >PULLW CB.Cache+S.CB.SrcPtr
>PULLB CB.Cache+S.CB.M >PULLB CB.Cache+S.CB.M
>PULLB CB.Cache+S.CB.OP >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 lda #S.CB.CMD.BITBLT
rts 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) * drawtext (short int hWND, short int OP, short int hFONT, int X1, int Y1, char *str)
*-------------------------------------- *--------------------------------------
DRAW.Text lda #S.CB.CMD.DRAWTEXT2 DRAW.Text >PULLW CB.Cache+S.CB.TxtPtr
jsr CB.InitCacheA
jsr CB.PullY1X1
>PULLW CB.Cache+S.CB.TxtPtr
jsr DRAW.PullY1X1
>PULLB CB.Cache+S.CB.hFont >PULLB CB.Cache+S.CB.hFont
>PULLB CB.Cache+S.CB.OP >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 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.Write
jmp CB.ToGlobal set CB.Cache to global coord.
*-------------------------------------- *--------------------------------------
* private * private
*-------------------------------------- *--------------------------------------
DRAW.xBM >LDYA L.BMs,x DRAW.BordersAtX stx IY
DRAW.yaBM >STYA ZPBMPtr
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 sta CB.Cache+S.CB.CMD
lda #S.CB.OP.MASK+S.CB.OP.ORA+S.CB.OP.COLOR jsr CB.SwapY1Y2
sta CB.Cache+S.CB.OP
jsr CB.Cache2CBBuf left Y1,Y2 at X1
lda #S.CB.M.C16 jsr CB.SwapX1X2
sta CB.Cache+S.CB.M
jmp CB.Cache2CBBuf right X2,Y1,X2,Y2
ldx #3 *--------------------------------------
DRAW.xBM >LDYA L.BMs,x
ldy #S.BM.W+3 DRAW.yaBM jsr BM.YA2CB.cache
.2 lda (ZPBMPtr),y
sta CB.Cache+S.CB.SrcW,x
dey
dex
bpl .2
lda ZPBMPtr
sta CB.Cache+S.CB.SrcPtr
lda ZPBMPtr+1
sta CB.Cache+S.CB.SrcPtr+1
jmp CB.Cache2CBBuf jmp CB.Cache2CBBuf
*-------------------------------------- *--------------------------------------
@ -376,68 +413,16 @@ DRAW.YAText >STYA CB.Cache+S.CB.TxtPtr
lda #S.CB.CMD.DRAWTEXT2 lda #S.CB.CMD.DRAWTEXT2
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
lda #0 lda #S.CB.OP.XOR
ror CS = inverse
eor #S.CB.OP.INVERSE
ora #S.CB.OP.SET
* lda #S.CB.OP.XOR
sta CB.Cache+S.CB.OP sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO lda #S.CB.M.MONO
sta CB.Cache+S.CB.M sta CB.Cache+S.CB.M
jsr CB.ResetSrcXY
jmp CB.Cache2CBBuf 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 MAN
SAVE usr/src/lib/libgui.s.draw SAVE usr/src/lib/libgui.s.draw
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -15,10 +15,8 @@ FON.Init >LDYA L.SYSX7
* ldy #S.FON.PixH * ldy #S.FON.PixH
* >SYSCALL2 GetStkObjProp * >SYSCALL2 GetStkObjProp
lda #7 lda #7
dec
sta SYSFON.Hm1
inc
sta SYSFON.H sta SYSFON.H
inc inc
sta SYSFON.Hp1 sta SYSFON.Hp1
@ -34,12 +32,152 @@ FON.Init >LDYA L.SYSX7
>SYSCALL LoadStkObj >SYSCALL LoadStkObj
rts rts
*-------------------------------------- *--------------------------------------
FON.GetTextSize >STYA CB.CACHE+S.CB.TxtPtr FON.GetTextSize >STYA CB.Cache+S.CB.TxtPtr
stx CB.CACHE+S.CB.hFont stx CB.Cache+S.CB.hFont
lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD
sta CB.CACHE+S.CB.CMD sta CB.Cache+S.CB.CMD
jmp CB.GFXWrite 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 MAN
SAVE usr/src/lib/libgui.s.fon SAVE usr/src/lib/libgui.s.fon

80
LIB/LIBGUI.S.LABEL.txt Normal file
View File

@ -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

View File

@ -4,30 +4,27 @@ NEW
* Y,A = MBAR definition * Y,A = MBAR definition
*-------------------------------------- *--------------------------------------
MBAR.New >STYA ZPPtr1 MBAR definition MBAR.New >STYA ZPPtr1 MBAR definition
>STYA ZPObjPtr for pass #2 >STYA ZPPtr2 for pass #2
jsr MBAR.GetSize jsr MBAR.GetSize
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .9 bcs .9
>STYA ZPMENUPtr >STYA ZPObjPtr
phx hMBAR phx hMBAR
lda #S.OBJ.T.MBAR lda #S.OBJ.T.MBAR
sta (ZPMENUPtr) S.OBJ.T sta (ZPObjPtr) S.OBJ.T
lda #0 lda #0
ldy #S.MBAR.Items-1 ldy #S.MBAR.Items-1
.1 sta (ZPMENUPtr),y .1 sta (ZPObjPtr),y
dey dey
bne .1 bne .1
>LDYA ZPObjPtr
>STYA ZPPtr1 MENU definition
jsr MBAR.GetData jsr MBAR.GetData
pla hMBAR pla hMBAR
@ -69,18 +66,13 @@ MBAR.GetSize lda #S.MBAR.Items+1 Ending\0
.8 >LDYA Counter .8 >LDYA Counter
rts rts
*-------------------------------------- *--------------------------------------
* ZPPtr1 = defintion * ZPPtr2 = defintion
* ZPMENUPtr = DstBuf * ZPObjPtr = DstMBar
* ZPPtr1 = DstMBItem
*-------------------------------------- *--------------------------------------
MBAR.GetData lda ZPMENUPtr MBAR.GetData jsr MBAR.GetMBItems
clc
adc #S.MBAR.Items
sta ZPMENUPtr
bcc .1
inc ZPMENUPtr+1 .1 lda (ZPPtr2)
.1 lda (ZPPtr1)
beq .8 beq .8
lda #S.MBITEM.T.SUBMENU lda #S.MBITEM.T.SUBMENU
@ -89,11 +81,11 @@ MBAR.GetData lda ZPMENUPtr
lda #0 S.MBITEM.S lda #0 S.MBITEM.S
jsr MBAR.AddByte jsr MBAR.AddByte
>LDYA ZPPtr1 pTEXT >LDYA ZPPtr2 pTEXT
ldx hSYSFON ldx hSYSFON
jsr FON.GetTextSize jsr FON.GetTextSize
lda PREFS.MBarXMargin lda PREFS.XMargin
asl x2 asl x2
clc clc
adc CB.CACHE+S.CB.SrcW adc CB.CACHE+S.CB.SrcW
@ -103,23 +95,23 @@ MBAR.GetData lda ZPMENUPtr
adc CB.CACHE+S.CB.SrcW+1 adc CB.CACHE+S.CB.SrcW+1
jsr MBAR.AddWord S.MBITEM.W jsr MBAR.AddWord S.MBITEM.W
>LDYA ZPPtr1 pTEXT >LDYA ZPPtr2 pTEXT
jsr MBAR.AddWord jsr MBAR.AddWord
jsr SkipStrZPtr1 skip "TEXT\0" jsr SkipStrZPtr2 skip "TEXT\0"
lda (ZPPtr1) lda (ZPPtr2)
jsr MBAR.AddByte pMENU jsr MBAR.AddByte pMENU
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr2),y
jsr MBAR.AddByte pMENU+1 jsr MBAR.AddByte pMENU+1
lda #2 lda #2
jsr SkipAPtr1 stkip pMENU jsr SkipAPtr2 stkip pMENU
bra .1 bra .1
.8 sta (ZPMENUPtr) .8 sta (ZPPtr1)
rts rts
*-------------------------------------- *--------------------------------------
MBAR.AddWord pha MBAR.AddWord pha
@ -128,11 +120,11 @@ MBAR.AddWord pha
jsr MBAR.AddByte jsr MBAR.AddByte
pla pla
MBAR.AddByte sta (ZPMENUPtr) MBAR.AddByte sta (ZPPtr1)
inc ZPMENUPtr inc ZPPtr1
bne .8 bne .8
inc ZPMENUPtr+1 inc ZPPtr1+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
@ -142,7 +134,7 @@ MBAR.AddByte sta (ZPMENUPtr)
MBAR.Enter ldy #S.WND.pMBAR MBAR.Enter ldy #S.WND.pMBAR
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr pMBAR >STYA ZPObjPtr pMBAR
stz ZPPtr2 stz ZPPtr2
stz ZPPtr2+1 stz ZPPtr2+1
@ -156,7 +148,7 @@ MBAR.Enter ldy #S.WND.pMBAR
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .3 beq .3
jsr MBAR.SetX2 jsr MBAR.SetX2 set X2 = X1 + W - 1
lda MSG+S.MSG.X1 lda MSG+S.MSG.X1
cmp CB.Cache+S.CB.X1 cmp CB.Cache+S.CB.X1
@ -187,7 +179,11 @@ MBAR.Enter ldy #S.WND.pMBAR
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* ZPMENUPtr = MBAR MBAR.Leave clc
rts
*--------------------------------------
* ZPWNDPtr parent WND
* ZPObjPtr = MBAR
* ZPPtr2 = Item to activate * ZPPtr2 = Item to activate
*-------------------------------------- *--------------------------------------
MBAR.Reset stz ZPPtr2 MBAR.Reset stz ZPPtr2
@ -207,8 +203,8 @@ MBAR.Set jsr MENU.DestroyAll
.4 lda (ZPPtr1) .4 lda (ZPPtr1)
beq .7 beq .7
jsr MBAR.SetX2 set X2 = X1 + W jsr MBAR.SetX2 set X2 = X1 + W - 1
ldy #S.MBITEM.S ldy #S.MBITEM.S
lda (ZPPtr1),y lda (ZPPtr1),y
bmi .5 bmi .5
@ -235,8 +231,7 @@ MBAR.Set jsr MENU.DestroyAll
.6 jsr MBAR.NextMBItem set X1 = X2 .6 jsr MBAR.NextMBItem set X1 = X2
bra .4 bra .4
.7 >LDYA L.WND.Screen .7 jsr CB.FlushBuf
jsr CB.FlushBufToYA
bcs .9 bcs .9
>LDYA Counter >LDYA Counter
@ -266,18 +261,21 @@ MBAR.Set jsr MENU.DestroyAll
* ZPWNDPtr = parent WND * ZPWNDPtr = parent WND
*-------------------------------------- *--------------------------------------
MBAR.Draw >SYSCALL2 GetMemPtr MBAR.Draw >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr pMBAR >STYA ZPObjPtr pMBAR
ldy #S.OBJ.X1 ldy #S.OBJ.X1
ldx #S.CB.X1 ldx #S.CB.X1
jsr CB.GetWndYCacheX jsr CB.GetWndYCacheX
jsr CB.GetBuf
bcs .9
jsr MBAR.GetMBItems jsr MBAR.GetMBItems
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .8 beq .8
jsr MBAR.SetX2 set X2 = X1 + W jsr MBAR.SetX2 set X2 = X1 + W - 1
jsr MBAR.DrawMBItem jsr MBAR.DrawMBItem
bcs .9 bcs .9
@ -285,10 +283,7 @@ MBAR.Draw >SYSCALL2 GetMemPtr
jsr MBAR.NextMBItem jsr MBAR.NextMBItem
bra .1 bra .1
.8 lda CB.Cache+S.CB.X2 .8 jsr CB.X2ToX1
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X2+1
sta CB.Cache+S.CB.X1+1
ldy #S.OBJ.X2 ldy #S.OBJ.X2
ldx #S.CB.X2 ldx #S.CB.X2
@ -299,7 +294,9 @@ MBAR.Draw >SYSCALL2 GetMemPtr
lda PREFS.MBarColor lda PREFS.MBarColor
jsr CB.FillRectMonoA jsr CB.FillRectMonoA
jmp CB.Cache2CBBuf jsr CB.Cache2CBBuf
jmp CB.FlushBuf
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -318,22 +315,10 @@ MBAR.DrawMBItem ldy #S.MBITEM.S
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
lda PREFS.MBarXMargin lda PREFS.XMargin
clc jsr CB.AddA2X1
adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1
bcc .10
inc CB.Cache+S.CB.X1+1 jsr CB.IncY1
.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
ldy #S.MBITEM.pTEXT ldy #S.MBITEM.pTEXT
lda (ZPPtr1),y lda (ZPPtr1),y
@ -342,56 +327,52 @@ MBAR.DrawMBItem ldy #S.MBITEM.S
lda (ZPPtr1),y lda (ZPPtr1),y
ply ply
ldx hSYSFON ldx hSYSFON
jsr DRAW.YAText jmp DRAW.YAText
jmp CB.Cache2CBBuf
*-------------------------------------- *--------------------------------------
MBAR.GetMBItems lda ZPMENUPtr MBAR.GetMBItems lda ZPObjPtr
clc clc
adc #S.MBAR.Items adc #S.MBAR.Items
sta ZPPtr1 sta ZPPtr1
lda ZPMENUPtr+1 lda ZPObjPtr+1
adc /S.MBAR.Items adc /S.MBAR.Items
sta ZPPtr1+1 sta ZPPtr1+1
rts rts
*-------------------------------------- *--------------------------------------
MBAR.NextMBItem lda CB.Cache+S.CB.X2 MBAR.NextMBItem jsr CB.X2ToX1
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X2+1
sta CB.Cache+S.CB.X1+1
lda #S.MBITEM lda #S.MBITEM
jmp SkipAPtr1 jmp SkipAPtr1
*-------------------------------------- *--------------------------------------
MBAR.SetX2 lda CB.Cache+S.CB.X1 MBAR.SetX2 ldy #S.MBITEM.W
lda (ZPPtr1),y
clc clc
ldy #S.MBITEM.W adc CB.Cache+S.CB.X1
adc (ZPPtr1),y pha
sta CB.Cache+S.CB.X2
lda CB.Cache+S.CB.X1+1
iny 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 sta CB.Cache+S.CB.X2+1
rts rts
*-------------------------------------- *--------------------------------------
MBAR.SetY1Y2 ldy #S.WND.MBarY1 MBAR.SetY1Y2 ldy #S.WND.MBarY1
lda (ZPWNDPtr),y ldx #S.CB.Y1
sta CB.Cache+S.CB.Y1 jsr CB.GetWndYCacheX
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1+1
ldy #S.WND.MBarY2 ldy #S.WND.MBarY2
lda (ZPWNDPtr),y ldx #S.CB.Y2
sta CB.Cache+S.CB.Y2 jmp CB.GetWndYCacheX
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y2+1
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/lib/libgui.s.mbar SAVE usr/src/lib/libgui.s.mbar

View File

@ -1,23 +1,23 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
* idButton MsgBox(pTITLE, pTEXT, pBM, idButtons) * MsgBox(pTITLE, pBM, pTEXT, idButtons)
* guiNewWnd(sFlags, iX1, iY1, iW, iH)
*-------------------------------------- *--------------------------------------
MBOX.MsgBox >LDYAI 360 MBOX.MsgBox >LDYAI 360
>STYA IE >STYA IE
>LDYAI 80 >LDYAI 70
>STYA INE >STYA INE
lda WND.Desktop+S.OBJ.W lda WND.Desktop+S.OBJ.W
sec sec
sbc IE sbc IE
and #$F8
sta DX sta DX
lda WND.Desktop+S.OBJ.W+1 lda WND.Desktop+S.OBJ.W+1
sbc IE+1 sbc IE+1
lsr lsr
sta DX+1 sta DX+1
ror DX ror DX
@ -27,7 +27,7 @@ MBOX.MsgBox >LDYAI 360
sta DY sta DY
lda WND.Desktop+S.OBJ.H+1 lda WND.Desktop+S.OBJ.H+1
sbc INE+1 sbc INE+1
lsr lsr
sta DY+1 sta DY+1
ror DY ror DY
@ -38,13 +38,14 @@ MBOX.MsgBox >LDYAI 360
>PUSHW INE >PUSHW INE
jsr WND.New jsr WND.New
bcs .9 bcs .9
pha sta WND.hWND
jsr OBJ.GetHWNDA for childs later....
ldy #S.WND.BGCOLOR ldy #S.WND.BGCOLOR
lda #C.WHITE lda #C.WHITE
sta (ZPObjPtr),y sta (ZPObjPtr),y
ldy #6 ldy #6
lda (pStack),y lda (pStack),y
tax tax
@ -52,51 +53,93 @@ MBOX.MsgBox >LDYAI 360
lda (pStack),y lda (pStack),y
ldy #S.WND.pTITLE ldy #S.WND.pTITLE
jsr OBJ.SetAXAtY jsr OBJ.SetAXAtY
pla
jsr WND.Show ldy #4 pBM
bcs .9
ldy #2 pBM
lda (pStack),y lda (pStack),y
tax sta ZPBMPtr+1
dey dey
lda (pStack),y 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 .9 >POP 7
rts rts
*-------------------------------------- *--------------------------------------
MBOX.DrawBM cpx #0 MBOX.AddButtons lda #360-5-60
bne .1 sta D
lda /360-5-60
sta D+1
tax stz IY
>LDYA L.BMs,x
.1 lda (pStack)
beq .8
.1 >STYA ZPBMPtr lsr
sta (pStack)
bcc .7
jsr CB.GetBuf jsr MBOX.AddButton
bcs .9 bcs .9
lda #28 lda D
sta CB.Cache+S.CB.X1 sec
stz CB.Cache+S.CB.X1+1 sbc #55
sta CB.Cache+S.CB.Y1 sta D
stz CB.Cache+S.CB.Y1+1 bcs .7
jsr DRAW.BM
* >DEBUG
* >LDYA ZPWNDPtr
>LDYA L.WND.Desktop
jmp CB.FlushBufToYA
.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 MAN
SAVE usr/src/lib/libgui.s.mbox SAVE usr/src/lib/libgui.s.mbox

View File

@ -8,7 +8,7 @@ MENU.New >PULLW DY
>PULLYA >PULLYA
MENU.New.I >STYA ZPPtr1 MENU definition MENU.New.I >STYA ZPPtr1 MENU definition
>STYA ZPObjPtr for pass #2 >STYA ZPPtr2 for pass #2
ldx MENU.Stack.Cnt ldx MENU.Stack.Cnt
cpx #MENU.MAX cpx #MENU.MAX
@ -18,42 +18,31 @@ MENU.New.I >STYA ZPPtr1 MENU definition
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .99 bcs .99
>STYA ZPMENUPtr >STYA ZPObjPtr
txa hMenu txa hMenu
ldx MENU.Stack.Cnt ldx MENU.Stack.Cnt
sta MENU.Stack,x sta MENU.Stack,x
lda #S.OBJ.T.MENU lda #S.OBJ.T.MENU
sta (ZPMENUPtr) S.OBJ.T sta (ZPObjPtr) S.OBJ.T
lda #0 lda #0
ldy #S.MENU.Items-1 ldy #S.MENU.Items-1
.1 sta (ZPMENUPtr),y .1 sta (ZPObjPtr),y
dey dey
bne .1 bne .1
ldx #3 lda #S.OBJ.F.BORDER
ldy #S.OBJ.X1+3 ldy #S.OBJ.F
sta (ZPObjPtr),y
.2 lda DX,x jsr OBJ.SetDXDYX1Y1
sta (ZPMENUPtr),y
dey
dex
bpl .2
>LDYA ZPObjPtr
>STYA ZPPtr1 MENU definition
jsr MENU.GetData jsr MENU.GetData
ldx MENU.Stack.Cnt
lda MENU.Stack,x
>SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
jsr MENU.SetMenuSizePos jsr MENU.SetMenuSizePos
ldx MENU.Stack.Cnt ldx MENU.Stack.Cnt
@ -111,99 +100,88 @@ MENU.GetSize lda #S.MENU.Items+1 Ending\0
.8 >LDYA Counter .8 >LDYA Counter
rts rts
*-------------------------------------- *--------------------------------------
* ZPPtr1 = defintion * ZPPtr2 = defintion
* ZPMENUPtr = DstBuf * ZPObjPtr = DstMenu
* ZPPtr1 = DstMItem
*-------------------------------------- *--------------------------------------
MENU.GetData lda ZPMENUPtr MENU.GetData jsr MENU.GetMItems
clc
adc #S.MENU.Items
sta ZPMENUPtr
bcc .1
inc ZPMENUPtr+1 .1 lda (ZPPtr2)
sta (ZPPtr1)
.1 lda (ZPPtr1)
sta (ZPMENUPtr)
beq .8 beq .8
cmp #S.MITEM.T.SEP cmp #S.MITEM.T.SEP
bne .2 bne .2
inc ZPPtr1 skip 1 byte inc ZPPtr2 skip 1 byte
bne .5 bne .5
inc ZPPtr1+1 inc ZPPtr2+1
bra .5 bra .5
*-------------------------------------- *--------------------------------------
.2 cmp #S.MITEM.T.ITEM .2 cmp #S.MITEM.T.ITEM
bne .3 bne .3
ldy #1 T+ID+KEMOD+KEY+pICON+"text" ldy #1 T+ID+KEMOD+KEY+pICON+"text"
lda (ZPPtr1),y lda (ZPPtr2),y
ldy #S.MITEM.ID ldy #S.MITEM.ID
sta (ZPMENUPtr),y sta (ZPPtr1),y
ldy #2 ldy #2
lda (ZPPtr1),y lda (ZPPtr2),y
tax tax
iny iny
lda (ZPPtr1),y lda (ZPPtr2),y
ldy #S.MITEM.KEYMOD+1 ldy #S.MITEM.KEYMOD+1
sta (ZPMENUPtr),y sta (ZPPtr1),y
dey KEY dey KEY
txa txa
sta (ZPMENUPtr),y sta (ZPPtr1),y
lda #4 lda #4
bra .4 skip 4 bytes bra .4 skip 4 bytes
*-------------------------------------- *--------------------------------------
.3 ldy #1 skip T+pMENU+pICON+"text" .3 ldy #1 skip T+pMENU+pICON+"text"
lda (ZPPtr1),y lda (ZPPtr2),y
tax tax
iny iny
lda (ZPPtr1),y lda (ZPPtr2),y
ldy #S.MITEM.pMENU+1 ldy #S.MITEM.pMENU+1
sta (ZPMENUPtr),y sta (ZPPtr1),y
dey dey
txa txa
sta (ZPMENUPtr),y sta (ZPPtr1),y
lda #3 skip 3 bytes lda #3 skip 3 bytes
.4 jsr SkipAPtr1 .4 jsr SkipAPtr2
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr2),y
ldy #S.MITEM.pICON+1 ldy #S.MITEM.pICON+1
sta (ZPMENUPtr),y sta (ZPPtr1),y
dey dey
lda (ZPPtr1) lda (ZPPtr2)
sta (ZPMENUPtr),y sta (ZPPtr1),y
lda #2 skip pICON lda #2 skip pICON
jsr SkipAPtr1 jsr SkipAPtr2
ldy #S.MITEM.pTEXT ldy #S.MITEM.pTEXT
lda ZPPtr1 lda ZPPtr2
sta (ZPMENUPtr),y sta (ZPPtr1),y
iny iny
lda ZPPtr1+1 lda ZPPtr2+1
sta (ZPMENUPtr),y sta (ZPPtr1),y
jsr SkipStrZPtr1 skip "TEXT\0" jsr SkipStrZPtr2 skip "TEXT\0"
ldy #S.MITEM.S ldy #S.MITEM.S
lda #0 lda #0
sta (ZPMENUPtr),y sta (ZPPtr1),y
.5 lda ZPMENUPtr .5 jsr MENU.NextMItem
clc
adc #S.MITEM
sta ZPMENUPtr
bcc .1
inc ZPMENUPtr+1
bra .1 bra .1
.8 clc .8 clc
@ -234,15 +212,15 @@ MENU.SetMenuSizePos
.2 jsr MENU.NextMItemDY .2 jsr MENU.NextMItemDY
bra .1 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 clc
adc IY Icon W adc IY Icon W
sta DX sta DX
stz DX+1 stz DX+1
lda DX lda DX
sec 1px sep clc
adc IE Max Text W adc IE Max Text W
sta DX sta DX
@ -251,55 +229,56 @@ MENU.SetMenuSizePos
sta DX+1 sta DX+1
lda DX lda DX
sec 1px sep clc
adc INE Max Mod-Key W adc INE Max Mod-Key W
sta DX sta DX
bcc .4
inc DX+1 lda DX+1
adc INE+1
sta DX+1
.4 ldy #S.OBJ.W ldy #S.OBJ.W
lda DX
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny iny
lda DX+1 lda DX+1
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny #S.OBJ.H iny #S.OBJ.H
lda DY lda DY
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny iny
lda DY+1 lda DY+1
sta (ZPMENUPtr),y sta (ZPObjPtr),y
ldy #S.MENU.iW ldy #S.MENU.iW
lda IY lda IY
sta (ZPMENUPtr),y sta (ZPObjPtr),y
ldy #S.MENU.tW ldy #S.MENU.tW
lda IE lda IE
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny iny
lda IE+1 lda IE+1
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny #S.MENU.kW ldy #S.MENU.kW
lda INE lda INE
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny iny
lda INE+1 lda INE+1
sta (ZPMENUPtr),y sta (ZPObjPtr),y
*--------------------------------------
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
lda DY lda DY
clc clc
adc (ZPMENUPtr),y adc (ZPObjPtr),y
tax tax
iny iny
lda DY+1 lda DY+1
adc (ZPMENUPtr),y adc (ZPObjPtr),y
cpx WND.Screen+S.OBJ.H cpx WND.Screen+S.OBJ.H
sbc WND.Screen+S.OBJ.H+1 sbc WND.Screen+S.OBJ.H+1
@ -307,18 +286,18 @@ MENU.SetMenuSizePos
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
lda (ZPMENUPtr),y lda (ZPObjPtr),y
* sec * sec
sbc DY sbc DY
sta (ZPMENUPtr),y sta (ZPObjPtr),y
iny iny
lda (ZPMENUPtr),y lda (ZPObjPtr),y
sbc DY+1 sbc DY+1
sta (ZPMENUPtr),y sta (ZPObjPtr),y
.5 >LDYA ZPMENUPtr .5 >LDYA ZPObjPtr
jmp OBJ.SetX2Y2 jmp OBJ.SetX2Y2
*-------------------------------------- *--------------------------------------
MENU.GetMItemW ldy #S.MITEM.pICON MENU.GetMItemW ldy #S.MITEM.pICON
@ -327,7 +306,7 @@ MENU.GetMItemW ldy #S.MITEM.pICON
ora (ZPPtr1),y ora (ZPPtr1),y
beq .1 beq .1
lda #17 Reserve space for Icon W + 1px SEP lda #20 Reserve space for Icon W + 4px SEP
sta IY sta IY
.1 jsr MENU.GetText .1 jsr MENU.GetText
@ -351,7 +330,7 @@ MENU.GetMItemW ldy #S.MITEM.pICON
jsr FON.GetTextSize jsr FON.GetTextSize
ldx CB.Cache+S.CB.SrcW ldx CB.Cache+S.CB.SrcW
cmp INE cpx INE
lda CB.Cache+S.CB.SrcW+1 lda CB.Cache+S.CB.SrcW+1
sbc INE+1 sbc INE+1
bcc .8 bcc .8
@ -362,38 +341,6 @@ MENU.GetMItemW ldy #S.MITEM.pICON
.8 rts .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 MENU.FindMItemByID
jsr MENU.GetMItems jsr MENU.GetMItems
@ -417,7 +364,12 @@ MENU.FindMItemByID
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
MENU.Enter jsr MENU.GetDXDY * ZPObjPtr = Menu
*--------------------------------------
MENU.Enter >LDYA L.WND.Screen
jsr CLIP.GetRect
jsr MENU.GetDXDY
stz D stz D
stz D+1 stz D+1
@ -425,12 +377,12 @@ MENU.Enter jsr MENU.GetDXDY
ldy #S.OBJ.X2 ldy #S.OBJ.X2
lda DX X1 lda DX X1
clc clc
adc (ZPMENUPtr),y adc (ZPObjPtr),y
sta IE IE = X2 sta IE IE = X2
iny iny
lda DX+1 lda DX+1
adc (ZPMENUPtr),y adc (ZPObjPtr),y
sta IE+1 sta IE+1
jsr MENU.GetMItems jsr MENU.GetMItems
@ -443,7 +395,7 @@ MENU.Enter jsr MENU.GetDXDY
lda DY Y1 lda DY Y1
clc clc
adc SYSFON.Hp2 adc SYSFON.Hp1
sta INE INE = Y2 sta INE INE = Y2
lda DY+1 lda DY+1
adc #0 adc #0
@ -496,8 +448,11 @@ MENU.Enter jsr MENU.GetDXDY
sta D+1 sta D+1
lda DY lda DY
sec
sbc #1
sta Counter sta Counter
lda DY+1 lda DY+1
sbc #0
sta Counter+1 sta Counter+1
bra .2 bra .2
@ -505,23 +460,25 @@ MENU.Enter jsr MENU.GetDXDY
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
.4 >LDYA L.WND.Screen .4 lda D
jsr CB.FlushBufToYA
lda D
ora D+1 ora D+1
beq .5 beq .5
>PUSHW D pMENU >PUSHW D pMENU
ldy #S.OBJ.X2+1 ldy #S.OBJ.X2
lda (ZPMENUPtr),y lda (ZPObjPtr),y
clc
adc #1
tax
iny
lda (ZPObjPtr),y
adc #0
>PUSHA >PUSHA
dey txa
lda (ZPMENUPtr),y
>PUSHA >PUSHA
>PUSHW Counter >PUSHW Counter Y1
jsr MENU.New jsr MENU.New
bcs .9 bcs .9
@ -529,7 +486,7 @@ MENU.Enter jsr MENU.GetDXDY
jmp MENU.Draw jmp MENU.Draw
*-------------------------------------- *--------------------------------------
.5 lda MSG+S.MSG.S .5 lda MSG+S.MSG.S
bit #S.MSG.S.CLK bit #S.XY.S.CLK
beq .8 beq .8
lda #S.MSG.T.ID lda #S.MSG.T.ID
@ -541,21 +498,52 @@ MENU.Enter jsr MENU.GetDXDY
jmp MENU.DestroyAll jmp MENU.DestroyAll
*-------------------------------------- *--------------------------------------
MENU.Leave clc
rts
*--------------------------------------
* DrawMenu(hMENU) * DrawMenu(hMENU)
*-------------------------------------- *--------------------------------------
MENU.Draw >SYSCALL2 GetMemPtr 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 bcs .9
jsr CB.GetBuf >SYSCALL2 NewStkObj
bcs .9 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 ldx #0
jsr OBJ.DrawBorders jsr OBJ.DrawBorders
bcs .9
jsr MENU.GetDXDY jsr MENU.GetDXDY
jsr MENU.GetMItems jsr MENU.GetMItems
@ -563,12 +551,13 @@ MENU.Draw >SYSCALL2 GetMemPtr
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .8 beq .8
jsr MENU.DrawMItem jsr MENU.DrawMItemBuf
bcs .9
jsr MENU.NextMItemDY jsr MENU.NextMItemDY
bra .1 bra .1
.8 >LDYA L.WND.Screen .8 clc
jmp CB.FlushBufToYA
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -578,30 +567,28 @@ MENU.DrawMItemBuf
jsr MENU.DrawMItem jsr MENU.DrawMItem
bcs .9 bcs .9
>LDYA L.WND.Screen jmp CB.FlushBuf
jmp CB.FlushBufToYA
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
MENU.DrawMItem jsr MENU.ResetX1Y1X2 MENU.DrawMItem jsr MENU.ResetX1Y1X2
lda (ZPPtr1) lda (ZPPtr1)
cmp #S.MITEM.T.SEP cmp #S.MITEM.T.SEP
bne MENU.DrawMItem1 bne .1
jsr CB.BorderLineH jsr CB.BorderLineH
jmp CB.Cache2CBBuf jmp CB.Cache2CBBuf
*-------------------------------------- *--------------------------------------
MENU.DrawMItem1 jsr MENU.IsSelected .1 jsr MENU.IsSelected
lda PREFS.MenuColor lda PREFS.MenuColor
bcc .15 bcc .2
eor #$ff eor #$ff
.15 jsr CB.FillRectMonoA .2 jsr CB.FillRectMonoA
lda CB.Cache+S.CB.Y1 lda CB.Cache+S.CB.Y1
sec sec
@ -613,72 +600,57 @@ MENU.DrawMItem1 jsr MENU.IsSelected
sta CB.Cache+S.CB.Y2+1 sta CB.Cache+S.CB.Y2+1
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
*-------------------------------------- *--------------------------------------
inc CB.Cache+S.CB.Y1 Y1:1px margin jsr CB.IncY1 Y1:1px margin
bne .12
inc CB.Cache+S.CB.Y1+1 lda #8 TODO : Checked
jsr CB.AddA2X1
.12 lda CB.Cache+S.CB.X1 jsr MENU.GetIcon
clc beq .3
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 DRAW.yaBM 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 jsr MENU.GetText
ldx hSYSFON ldx hSYSFON
jsr DRAW.YAText jsr DRAW.YAText
lda CB.Cache+S.CB.X1
sec
ldy #S.MENU.tW ldy #S.MENU.tW
adc (ZPMENUPtr),y lda (ZPObjPtr),y
clc
adc CB.Cache+S.CB.X1
sta 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) lda (ZPPtr1)
cmp #S.MITEM.T.ITEM cmp #S.MITEM.T.ITEM
bne .3 bne .4
jsr MENU.IsSelected
jsr MENU.GetKeyString C untouched jsr MENU.GetKeyString C untouched
beq .3 beq .8
ldx hSYSFON ldx hSYSFON
jsr DRAW.YAText jmp DRAW.YAText
*--------------------------------------
.3 lda (ZPPtr1) .4 cmp #S.MITEM.T.SUBMENU
cmp #S.MITEM.T.SUBMENU
bne .8 bne .8
lda CB.Cache+S.CB.X1
sec
ldy #S.MENU.kW ldy #S.MENU.kW
adc (ZPMENUPtr),y lda (ZPObjPtr),y
clc
adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X1+1
iny iny
adc (ZPMENUPtr),y lda (ZPObjPtr),y
adc CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X1+1
ldx #BM.ID.RIGHT ldx #BM.ID.RIGHT
@ -775,73 +747,25 @@ MENU.GetKeyString
.6 pla .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 .9 rts
*-------------------------------------- *--------------------------------------
MENU.GetDXDY ldy #S.OBJ.X1 MENU.GetDXDY ldy #S.OBJ.X1
lda (ZPMENUPtr),y lda (ZPObjPtr),y
clc clc
adc #1 adc #1
sta DX sta DX
iny iny
lda (ZPMENUPtr),y lda (ZPObjPtr),y
adc #0 adc #0
sta DX+1 sta DX+1
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
lda (ZPMENUPtr),y lda (ZPObjPtr),y
clc clc
adc #1 adc #1
sta DY sta DY
iny iny
lda (ZPMENUPtr),y lda (ZPObjPtr),y
adc #0 adc #0
sta DY+1 sta DY+1
@ -849,12 +773,12 @@ MENU.GetDXDY ldy #S.OBJ.X1
*-------------------------------------- *--------------------------------------
MENU.ResetX1Y1X2 MENU.ResetX1Y1X2
ldy #S.OBJ.X1 ldy #S.OBJ.X1
lda (ZPMENUPtr),y lda (ZPObjPtr),y
clc clc
adc #1 adc #1
sta CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1
iny iny
lda (ZPMENUPtr),y lda (ZPObjPtr),y
adc #0 adc #0
sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X1+1
@ -864,23 +788,23 @@ MENU.ResetX1Y1X2
sta CB.Cache+S.CB.Y1+1 sta CB.Cache+S.CB.Y1+1
ldy #S.OBJ.X2 ldy #S.OBJ.X2
lda (ZPMENUPtr),y lda (ZPObjPtr),y
sec sec
sbc #1 sbc #1
sta CB.Cache+S.CB.X2 sta CB.Cache+S.CB.X2
iny iny
lda (ZPMENUPtr),y lda (ZPObjPtr),y
sbc #0 sbc #0
sta CB.Cache+S.CB.X2+1 sta CB.Cache+S.CB.X2+1
rts rts
*-------------------------------------- *--------------------------------------
MENU.GetMItems lda ZPMENUPtr MENU.GetMItems lda ZPObjPtr
clc clc
adc #S.MENU.Items adc #S.MENU.Items
sta ZPPtr1 sta ZPPtr1
lda ZPMENUPtr+1 lda ZPObjPtr+1
adc /S.MENU.Items adc /S.MENU.Items
sta ZPPtr1+1 sta ZPPtr1+1
rts rts
@ -915,13 +839,18 @@ MENU.Destroy clc
jsr PTR.Disable jsr PTR.Disable
lda #S.CB.CMD.BITBLT lda #S.CB.CMD.BITBLT
jsr CB.InitCacheA sta CB.Cache+S.CB.CMD
lda #S.CB.OP.RESTORE lda #S.CB.OP.RESTORE
sta CB.Cache+S.CB.OP sta CB.Cache+S.CB.OP
plp plp
lda ZPObjPtr+1
pha
lda ZPObjPtr
pha
.2 php .2 php
ldx MENU.Stack.Cnt ldx MENU.Stack.Cnt
@ -929,33 +858,22 @@ MENU.Destroy clc
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPObjPtr >STYA ZPObjPtr
ldy #S.OBJ.X1 jsr CB.GetObjX1Y1X2Y2
ldx #0
.3 lda (ZPObjPtr),y jsr CB.ResetSrcXY
sta CB.Cache+S.CB.X1,x
iny
inx
cpx #8 X1,Y1,X2,Y2
bne .3
ldy #S.OBJ.W jsr CB.GetObjSrcWH
ldx #0
.4 lda (ZPObjPtr),y
sta CB.Cache+S.CB.SrcW,x
iny
inx
cpx #4 W,H
bne .4
ldy #S.MENU.hSAVEBUF ldy #S.MENU.hSAVEBUF
lda (ZPObjPtr),y lda (ZPObjPtr),y
sta CB.Cache+S.CB.DstPtr 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 >SYSCALL2 FreeStkObj
ldx MENU.Stack.Cnt ldx MENU.Stack.Cnt
@ -969,7 +887,12 @@ MENU.Destroy clc
bne .2 bne .2
.7 jmp PTR.Enable .7 pla
sta ZPObjPtr
pla
sta ZPObjPtr+1
jmp PTR.Enable
.8 clc .8 clc
rts rts

View File

@ -19,19 +19,24 @@ MOU.Init >PUSHW L.DEVNAME.MOUSE
clc clc
rts 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 sta MouseClamp+3
lsr lsr
sta PTR.Pos+S.POINT.X+1 sta PTR.Pos+S.POINT.X+1
lda DCB.GFX+S.DCB.GFX.W
lda CLIP.Screen+S.RECT.X2
sta MouseClamp+2 sta MouseClamp+2
ror ror
sta PTR.Pos+S.POINT.X sta PTR.Pos+S.POINT.X
lda DCB.GFX+S.DCB.GFX.H+1
lda CLIP.Screen+S.RECT.Y2+1
sta MouseClamp+7 sta MouseClamp+7
lsr lsr
sta PTR.Pos+S.POINT.Y+1 sta PTR.Pos+S.POINT.Y+1
lda DCB.GFX+S.DCB.GFX.H
lda CLIP.Screen+S.RECT.Y2
sta MouseClamp+6 sta MouseClamp+6
ror ror
sta PTR.Pos+S.POINT.Y sta PTR.Pos+S.POINT.Y
@ -68,25 +73,25 @@ MOU.CheckOverMenu
lda MENU.Stack,x lda MENU.Stack,x
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr >STYA ZPObjPtr
pha
tya jsr MOU.InObj
clc
adc #S.OBJ.X1
tay
pla
adc /S.OBJ.X1
jsr MOU.InRectYA
bcs .3 bcs .3
jsr MENU.Enter lda #PTR.T.ARROW
jsr PTR.Set
clc jmp MENU.Enter
rts
.3 ldx MENU.Stack.Idx .3 ldx MENU.Stack.Idx
bne .2 bne .2
lda MSG+S.MSG.S
bit #S.XY.S.CLK
beq .9
jsr MENU.DestroyAll
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
@ -111,76 +116,71 @@ MOU.CheckOverWND
lda WND.Stack-1,x lda WND.Stack-1,x
jsr OBJ.GetHWNDA jsr OBJ.GetHWNDA
ldy #S.OBJ.F
lda (ZPWNDPtr),y
and #S.OBJ.F.BORDER
beq .2
jsr MOU.ChkWNDBorders jsr MOU.ChkWNDBorders
bcc .99 bcc MOU.CheckOverSysBut.RTS
.2 lda ZPWNDPtr lda ZPWNDPtr
clc clc
adc #S.OBJ.X1 adc #S.OBJ.X1
tay tay
lda ZPWNDPtr+1 lda ZPWNDPtr+1
adc #0 adc /S.OBJ.X1
jsr MOU.InRectYA jsr MOU.InRectYA
bcs .7 not over this WND bcs .7 not over this WND
lda MSG+S.MSG.S lda MSG+S.MSG.S
bit #S.MSG.S.CLK bit #S.XY.S.CLK
beq .22 beq .2
jsr WND.Bring2Front 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 lda (ZPWNDPtr),y
cmp MSG+S.MSG.Y1 and #S.WND.S.HASTBAR
iny beq .3
lda (ZPWNDPtr),y
sbc MSG+S.MSG.Y1+1 ldy #S.WND.TBarY2
jsr MOU.WNDCmpY
bcc .3 not in TBAR bcc .3 not in TBAR
jmp MOU.MoveWND
bra .5 .3 ldy #S.OBJ.S
.3 ldy #S.WND.MBarY2
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
cmp MSG+S.MSG.Y1 and #S.WND.S.HASMBAR
iny beq .4
lda (ZPWNDPtr),y
sbc MSG+S.MSG.Y1+1 ldy #S.WND.MBarY2
jsr MOU.WNDCmpY
bcc .4 not in MBAR bcc .4 not in MBAR
jsr MBAR.Enter jsr MBAR.Enter
bra .5 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 ldy #S.WND.SBarY1
cmp MSG+S.MSG.Y1 jsr MOU.WNDCmpY
iny bcs .5 not in SBAR
lda (ZPWNDPtr),y
sbc MSG+S.MSG.Y1+1
bcs .6 not in SBAR
.5 lda #PTR.T.ARROW .5 lda #PTR.T.ARROW
jsr PTR.Set
clc
rts
.6 jmp PTR.Set
.6 lda #PTR.T.WAIT
jsr PTR.Set
clc
rts
.7 ldx WND.Stack.Idx .7 ldx WND.Stack.Idx
@ -191,9 +191,63 @@ MOU.CheckOverWND
jsr PTR.Set jsr PTR.Set
.9 sec .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 .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 MOU.ChkWNDBorders
ldy #S.OBJ.F
lda (ZPWNDPtr),y
and #S.OBJ.F.BORDER
beq MOU.ChkWNDChilds.9
stz IY stz IY
ldy #S.OBJ.X1 ldy #S.OBJ.X1
@ -238,13 +292,13 @@ MOU.ChkWNDBorders
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
clc clc
adc #1 adc #1
eor MSG+S.MSG.X2 eor MSG+S.MSG.X1
bne .5 bne .5
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
adc #0 adc #0
eor MSG+S.MSG.X2+1 eor MSG+S.MSG.X1+1
bne .5 bne .5
lda IY lda IY
@ -260,13 +314,13 @@ MOU.ChkWNDBorders
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
clc clc
adc #1 adc #1
eor MSG+S.MSG.Y2 eor MSG+S.MSG.Y1
bne .7 bne .7
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
adc #0 adc #0
eor MSG+S.MSG.Y2+1 eor MSG+S.MSG.Y1+1
bne .7 bne .7
lda #PTR.T.RESIZEXY1 lda #PTR.T.RESIZEXY1
@ -275,9 +329,16 @@ MOU.ChkWNDBorders
.7 lda IY .7 lda IY
bne .6 bne .6
sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
MOU.InObj lda ZPObjPtr
clc
adc #S.OBJ.X1
tay
lda ZPObjPtr+1
adc /S.OBJ.X1
*--------------------------------------
MOU.InRectYA >STYA ZPRECTPtr MOU.InRectYA >STYA ZPRECTPtr
ldy #S.RECT.X1 ldy #S.RECT.X1
@ -322,6 +383,41 @@ MOU.InRectYA >STYA ZPRECTPtr
.9 sec .9 sec
.99 rts .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 MAN
SAVE usr/src/lib/libgui.s.mou SAVE usr/src/lib/libgui.s.mou
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -22,7 +22,7 @@ MSG.Get stz MSG+S.MSG.T
sta MSG+S.MSG.T sta MSG+S.MSG.T
lda MSG+S.MSG.S lda MSG+S.MSG.S
bit #S.MSG.S.MOVE bit #S.XY.S.MOVE
beq .2 beq .2
>PUSHW L.MSG.XY >PUSHW L.MSG.XY
@ -30,7 +30,7 @@ MSG.Get stz MSG+S.MSG.T
lda MSG+S.MSG.S 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 beq .5
jsr MOU.CheckOverMenu jsr MOU.CheckOverMenu

View File

@ -30,6 +30,18 @@ OBJ.New pha
.9 rts .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 * hOBJ, Prop8, Value16
*-------------------------------------- *--------------------------------------
OBJ.SetProp ldy #3 OBJ.SetProp ldy #3
@ -85,19 +97,29 @@ OBJ.GetPropAtY lda (ZPObjPtr),y
rts 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 OBJ.SetX2Y2 >STYA ZPPtr1
ldy #S.OBJ.W ldy #S.OBJ.W+1
lda (ZPPtr1),y lda (ZPPtr1),y
clc
sbc #0
pha
iny
lda (ZPPtr1),y
sbc #0
tax tax
dey
pla lda (ZPPtr1),y
bne .1
dex
.1 dec
clc clc
ldy #S.OBJ.X1 ldy #S.OBJ.X1
adc (ZPPtr1),y adc (ZPPtr1),y
@ -110,18 +132,18 @@ OBJ.SetX2Y2 >STYA ZPPtr1
dey dey
pla pla
sta (ZPPtr1),y sta (ZPPtr1),y
*--------------------------------------
ldy #S.OBJ.H ldy #S.OBJ.H+1
lda (ZPPtr1),y lda (ZPPtr1),y
clc
sbc #0
pha
iny
lda (ZPPtr1),y
sbc #0
tax tax
dey
lda (ZPPtr1),y
bne .2
dex
.2 dec
pla
clc clc
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
adc (ZPPtr1),y adc (ZPPtr1),y
@ -131,13 +153,25 @@ OBJ.SetX2Y2 >STYA ZPPtr1
adc (ZPPtr1),y adc (ZPPtr1),y
ldy #S.OBJ.Y2+1 ldy #S.OBJ.Y2+1
sta (ZPPtr1),y sta (ZPPtr1),y
tax
dey dey
pla pla
sta (ZPPtr1),y A,X = Y2 sta (ZPPtr1),y
rts 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 OBJ.SetAXAtY sta (ZPObjPtr),y
iny iny
txa txa
@ -162,6 +196,19 @@ OBJ.GetHWNDA >SYSCALL2 GetMemPtr
OBJ.DrawBorders >STYA ZPObjPtr OBJ.DrawBorders >STYA ZPObjPtr
stx IY 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 jsr CB.BorderLineH
ldy #S.OBJ.X1 ldy #S.OBJ.X1
@ -247,9 +294,19 @@ OBJ.DrawBorders >STYA ZPObjPtr
sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+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 MAN
SAVE usr/src/lib/libgui.s.obj SAVE usr/src/lib/libgui.s.obj

View File

@ -12,7 +12,7 @@ PTR.Update lda PTR.T
lda #PTR.T.WAIT lda #PTR.T.WAIT
*-------------------------------------- *--------------------------------------
* Set X2,Y2,SrcPtr * Set SrcPtr, SrcW, SrcH
*-------------------------------------- *--------------------------------------
PTR.Set sta PTR.T PTR.Set sta PTR.T
@ -26,61 +26,37 @@ PTR.Set sta PTR.T
sta CB.PTR+S.CB.SrcPtr+1 sta CB.PTR+S.CB.SrcPtr+1
sta ZPPtr1+1 sta ZPPtr1+1
ldy #S.BM.W ldy #S.BM.W+3
lda (ZPPtr1),y ldx #3
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
.1 lda (ZPPtr1),y
sta CB.PTR+S.CB.SrcW,x
dey
dex 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 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 .1 ldy #S.POINT-1
@ -91,13 +67,13 @@ PTR.SetPos >PULLW ZPPtr1
*-------------------------------------- *--------------------------------------
PTR.Enable bit PTR.bVisible PTR.Enable bit PTR.bVisible
bmi PTR.Show.I bmi PTR.Show.I
clc clc
rts rts
*-------------------------------------- *--------------------------------------
PTR.Disable bit PTR.bVisible PTR.Disable bit PTR.bVisible
bmi PTR.Hide.I bmi PTR.Hide.I
PTR.Disable.8 clc PTR.Disable.8 clc
rts rts
*-------------------------------------- *--------------------------------------
@ -106,7 +82,12 @@ PTR.Hide lda PTR.bVisible
stz 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 bra PTR.Draw.I
*-------------------------------------- *--------------------------------------
PTR.Show lda PTR.bVisible PTR.Show lda PTR.bVisible
@ -115,7 +96,11 @@ PTR.Show lda PTR.bVisible
dec PTR.bVisible dec PTR.bVisible
*-------------------------------------- *--------------------------------------
PTR.Show.I ldx PTR.T 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 sec
sbc PTR.HotPoints,x sbc PTR.HotPoints,x
sta CB.PTR+S.CB.X1 sta CB.PTR+S.CB.X1
@ -133,23 +118,83 @@ PTR.Show.I ldx PTR.T
sbc #0 sbc #0
sta CB.PTR+S.CB.Y1+1 sta CB.PTR+S.CB.Y1+1
lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE ldx CB.PTR+S.CB.SrcW+1
*-------------------------------------- lda CB.PTR+S.CB.SrcW
PTR.Draw.I sta CB.PTR+S.CB.OP bne .1
>LDYA L.WND.Screen
jsr CLIP.GetRect
* >LDYA L.CB.PTR dex
* jsr CB.GetInCache
.1 dec
* jsr CLIP.CB.Cache 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 * bcs .8
>PUSHB WND.Screen+S.OBJ.hPARENT jsr CB.GFXWrite
>PUSHBI IOCTL.WRITE
>PUSHW L.CB.PTR
>SYSCALL2 IOCTL
.8 clc .8 clc

View File

@ -3,10 +3,12 @@ NEW
*-------------------------------------- *--------------------------------------
SYSBUT.Enter bit WND.SYSBAR.bSysBut SYSBUT.Enter bit WND.SYSBAR.bSysBut
bmi .8 bmi .8
sec sec
ror WND.SYSBAR.bSysBut ror WND.SYSBAR.bSysBut
jsr MENU.DestroyAll
jsr CB.GetBuf jsr CB.GetBuf
bcs .9 bcs .9
@ -18,6 +20,7 @@ SYSBUT.Enter bit WND.SYSBAR.bSysBut
>PUSHW L.MENU.Sys >PUSHW L.MENU.Sys
>PUSHW WND.SysBar+S.OBJ.X1 >PUSHW WND.SysBar+S.OBJ.X1
>PUSHW WND.SysBar+S.OBJ.Y1 >PUSHW WND.SysBar+S.OBJ.Y1
jsr MENU.New jsr MENU.New
bcs .9 bcs .9
@ -37,7 +40,6 @@ SYSBUT.Leave bit WND.SYSBAR.bSysBut
jsr SYSBAR.ShowSysBut jsr SYSBAR.ShowSysBut
>LDYA L.WND.SysBar >LDYA L.WND.SysBar
jmp CB.FlushBufToYA jmp CB.FlushBufToYA
.8 clc .8 clc
@ -53,7 +55,6 @@ SYSBAR.Show jsr CB.GetBuf
jsr SYSBAR.ShowSysClk jsr SYSBAR.ShowSysClk
>LDYA L.WND.SysBar >LDYA L.WND.SysBar
jmp CB.FlushBufToYA jmp CB.FlushBufToYA
.9 rts .9 rts
@ -76,37 +77,18 @@ SYSBAR.ShowSysBut
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
lda CB.Cache+S.CB.X1 lda #4
clc jsr CB.AddA2X1
adc #4
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X1+1
adc #0
sta CB.Cache+S.CB.X1+1
inc CB.Cache+S.CB.Y1 jsr CB.IncY1
bne .30
inc CB.Cache+S.CB.Y1+1 ldx #BM.ID.APPLE
.30 ldx #BM.ID.APPLE
jsr DRAW.xBM jsr DRAW.xBM
lda CB.Cache+S.CB.X1 lda #16+1
clc jsr CB.AddA2X1
adc #20
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X1+1
adc #0
sta CB.Cache+S.CB.X1+1
inc CB.Cache+S.CB.Y1 jsr CB.IncY1
bne .31
inc CB.Cache+S.CB.Y1+1
.31 lda WND.SysBar.bSysBut
asl
>LDYA L.WND.SysBar.2osX >LDYA L.WND.SysBar.2osX
ldx hSYSFON ldx hSYSFON
@ -129,14 +111,23 @@ SYSBAR.ShowSysClk
lda PREFS.SysBarColor lda PREFS.SysBarColor
jsr CB.FillRectMonoA jsr CB.FillRectMonoA
ldx #S.RECT-1 ldx #S.RECT
.1 lda RECT.SysClk,x .1 lda RECT.SysClk-1,x
sta CB.Cache+S.CB.X1,x sta CB.Cache+S.CB.X1-1,x
dex 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 MAN
SAVE usr/src/lib/libgui.s.sysbar SAVE usr/src/lib/libgui.s.sysbar

View File

@ -4,7 +4,10 @@ NEW
TEXT.New TEXT.New
TEXT.Paint TEXT.Paint
TEXT.Close TEXT.Enter
TEXT.Leave
*--------------------------------------
TEXT.fPaint
clc clc
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -28,15 +28,23 @@ WND.Setup
>STYA WND.Screen+S.OBJ.W >STYA WND.Screen+S.OBJ.W
>STYA WND.Desktop+S.OBJ.W >STYA WND.Desktop+S.OBJ.W
>STYA WND.SysBar+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 lda SYSFON.Hp2
sta WND.SysBar+S.OBJ.H sta WND.SysBar+S.OBJ.H
lda DCB.GFX+S.DCB.GFX.H lda DCB.GFX+S.DCB.GFX.H
sta WND.Screen+S.OBJ.H
sec sec
sbc WND.SysBar+S.OBJ.H sbc SYSFON.Hp2
sta WND.Desktop+S.OBJ.H sta WND.Desktop+S.OBJ.H
sta WND.SysBar+S.OBJ.Y1 sta WND.SysBar+S.OBJ.Y1
@ -44,15 +52,19 @@ WND.Setup
sta RECT.SysWNDs+S.RECT.Y1 sta RECT.SysWNDs+S.RECT.Y1
sta RECT.SysClk+S.RECT.Y1 sta RECT.SysClk+S.RECT.Y1
lda DCB.GFX+S.DCB.GFX.H clc
dec adc SYSFON.Hp1
sta RECT.SysBut+S.RECT.Y2 sta RECT.SysBut+S.RECT.Y2
sta RECT.SysWNDs+S.RECT.Y2 sta RECT.SysWNDs+S.RECT.Y2
sta RECT.SysClk+S.RECT.Y2 sta RECT.SysClk+S.RECT.Y2
sta CLIP.Screen+S.RECT.Y2
>LDYA L.WND.Screen >LDYA L.WND.Screen
>STYA WND.Desktop+S.OBJ.hPARENT >STYA WND.Desktop+S.OBJ.hPARENT
>STYA WND.SysBar+S.OBJ.hPARENT >STYA WND.SysBar+S.OBJ.hPARENT
* >LDYA L.WND.Screen
jsr OBJ.SetX2Y2 jsr OBJ.SetX2Y2
>LDYA L.WND.Desktop >LDYA L.WND.Desktop
@ -60,31 +72,32 @@ WND.Setup
>LDYA L.WND.SysBar >LDYA L.WND.SysBar
jsr OBJ.SetX2Y2 jsr OBJ.SetX2Y2
*--------------------------------------
>LDYA L.WND.SysBar.2osX >LDYA L.WND.SysBar.2osX
ldx hSYSFON ldx hSYSFON
jsr FON.GetTextSize jsr FON.GetTextSize
lda CB.Cache+S.CB.SrcW lda CB.Cache+S.CB.SrcW
clc clc
adc #24 4 + BM width + 4 adc #25 4 + BM width(16) + 1 + "2osX" + 4
sta RECT.SysBut+S.RECT.X2 sta RECT.SysBut+S.RECT.X2
sta RECT.SysWNDs+S.RECT.X1 sta RECT.SysWNDs+S.RECT.X1
*--------------------------------------
>LDYA L.WND.SysBar.Clk >LDYA L.WND.SysBar.Clk
ldx hSYSFON ldx hSYSFON
jsr FON.GetTextSize jsr FON.GetTextSize
lda CB.Cache+S.CB.SrcW lda CB.Cache+S.CB.SrcW
sec for sbc below clc
adc #8 4 + 00:00 + 4 adc #2 1 + "00:00" + 1
sta RECT.SysWNDs+S.RECT.X2 sta CB.Cache+S.CB.SrcW
lda DCB.GFX+S.DCB.GFX.W lda DCB.GFX+S.DCB.GFX.W
sec sec
sbc RECT.SysWNDs+S.RECT.X2 sbc CB.Cache+S.CB.SrcW
sta RECT.SysWNDs+S.RECT.X2 sta RECT.SysWNDs+S.RECT.X2
sta RECT.SysClk+S.RECT.X1 sta RECT.SysClk+S.RECT.X1
lda DCB.GFX+S.DCB.GFX.W+1 lda DCB.GFX+S.DCB.GFX.W+1
sbc #0 sbc #0
sta RECT.SysWNDs+S.RECT.X2+1 sta RECT.SysWNDs+S.RECT.X2+1
@ -94,7 +107,7 @@ WND.Setup
clc clc
sbc #0 sbc #0
sta RECT.SysClk+S.RECT.X2 sta RECT.SysClk+S.RECT.X2
lda DCB.GFX+S.DCB.GFX.W lda DCB.GFX+S.DCB.GFX.W+1
sbc #0 sbc #0
sta RECT.SysClk+S.RECT.X2+1 sta RECT.SysClk+S.RECT.X2+1
@ -132,7 +145,7 @@ WND.New ldy WND.Stack.Top
ldy #S.OBJ.W ldy #S.OBJ.W
jsr OBJ.PullWordAtY jsr OBJ.PullWordAtY
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
jsr OBJ.PullWordAtY jsr OBJ.PullWordAtY
@ -175,6 +188,75 @@ WND.New ldy WND.Stack.Top
rts 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 WND.Destroy clc
rts rts
*-------------------------------------- *--------------------------------------
@ -206,6 +288,9 @@ WND.Bring2Front ldx WND.Stack.Idx
*-------------------------------------- *--------------------------------------
WND.Show sta WND.hWND WND.Show sta WND.hWND
>LDYA L.WND.Desktop
jsr CLIP.GetRect
ldx WND.Stack.Top ldx WND.Stack.Top
beq .1 beq .1
@ -215,37 +300,23 @@ WND.Show sta WND.hWND
lda #S.WND.S.ACTIVE lda #S.WND.S.ACTIVE
jsr WND.ClrStatus jsr WND.ClrStatus
jsr CB.GetBuf
bcs WND.Activate.RTS
jsr WND.DrawTitleBar jsr WND.DrawTitleBar
>LDYA L.WND.Desktop
jsr CB.FlushBufToYA
lda WND.hWND .1 lda WND.hWND
ldx WND.Stack.Top ldx WND.Stack.Top
.1 sta WND.Stack,x sta WND.Stack,x
inc WND.Stack.Top inc WND.Stack.Top
*-------------------------------------- *--------------------------------------
WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
jsr OBJ.SetX2Y2 jsr OBJ.SetX2Y2
jsr WND.ResetInnerW jsr WND.ResetInnerW
jsr CB.GetBuf
bcs WND.Activate.RTS
lda #S.WND.S.ACTIVE lda #S.WND.S.ACTIVE
jsr WND.SetStatus jsr WND.SetStatus
ldy #S.OBJ.F
lda (ZPWNDPtr),y
and #S.OBJ.F.BORDER
beq .1
>LDYA ZPWNDPtr >LDYA ZPWNDPtr
ldx #1 ldx #1
jsr OBJ.DrawBorders jsr OBJ.DrawBorders
@ -256,7 +327,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta Counter+1 sta Counter+1
ldy #S.WND.pTITLE+1 ldy #S.WND.pTITLE+1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
bne .2 bne .2
@ -284,7 +355,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
ldy #S.WND.MBarY1 ldy #S.WND.MBarY1
jsr WND.SetCounterAtY jsr WND.SetCounterAtY
lda SYSFON.Hp1 lda SYSFON.Hp1
jsr WND.Add2Counter jsr WND.Add2Counter
@ -297,10 +368,14 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
ldy #S.WND.pMBAR ldy #S.WND.pMBAR
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
jsr MBAR.Draw jsr MBAR.Draw
bcs .9
*-------------------------------------- *--------------------------------------
.4 ldy #S.WND.InnerY1 .4 jsr CB.GetBuf
bcs .9
ldy #S.WND.InnerY1
jsr WND.SetCounterAtY jsr WND.SetCounterAtY
ldy #S.WND.pSTATUS+1 ldy #S.WND.pSTATUS+1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
beq .8 beq .8
@ -318,12 +393,12 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sbc #0 sbc #0
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
inx inx
bne .5 bne .5
inc inc
.5 ldy #S.WND.SBarY1+1 .5 ldy #S.WND.SBarY1+1
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
dey dey
@ -346,8 +421,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
sbc Counter+1 sbc Counter+1
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
>LDYA L.WND.Desktop jsr CB.FlushBuf
jsr CB.FlushBufToYA
lda WND.hWND lda WND.hWND
pha pha
@ -355,21 +429,28 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
WND.ResetInnerW ldy #S.OBJ.W WND.ResetInnerW ldy #S.OBJ.X1
ldx #S.WND.InnerW ldx #S.WND.InnerX1
jsr .1 jsr .1
ldy #S.OBJ.H ldy #S.OBJ.Y1
ldx #S.WND.InnerH ldx #S.WND.InnerY1
jsr .1
ldy #S.OBJ.X2 ldy #S.OBJ.X2
ldx #S.WND.InnerX2 ldx #S.WND.InnerX2
jsr .1 jsr .1
ldy #S.OBJ.Y2 ldy #S.OBJ.Y2
ldx #S.WND.InnerY2 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 .1 lda (ZPWNDPtr),y
pha pha
iny iny
@ -387,11 +468,11 @@ WND.Add2Counter clc
adc Counter adc Counter
sta Counter sta Counter
bcc .8 bcc .8
inc Counter+1 inc Counter+1
.8 ldx Counter+1 .8 ldx Counter+1
rts rts
*-------------------------------------- *--------------------------------------
WND.SetCounterAtY WND.SetCounterAtY
lda Counter lda Counter
@ -401,9 +482,13 @@ WND.SetAXAtY sta (ZPWNDPtr),y
iny iny
txa txa
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
rts
WND.SetAXAtY.9 rts
*-------------------------------------- *--------------------------------------
WND.DrawTitleBar WND.DrawTitleBar
jsr CB.GetBuf
bcs WND.SetAXAtY.9
lda #S.CB.CMD.FILLRECT lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
@ -448,13 +533,10 @@ WND.DrawTitleBar
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
inc CB.Cache+S.CB.Y1 jsr CB.IncY1
bne .12
inc CB.Cache+S.CB.Y1+1
* TOP LEFT ICON * TOP LEFT ICON
.12 ldy #S.WND.ICON+1 ldy #S.WND.ICON+1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
tax tax
dey dey
@ -526,7 +608,7 @@ WND.DrawTitleBar
ldx #BM.ID.CLOSE ldx #BM.ID.CLOSE
jsr DRAW.xBM jsr DRAW.xBM
.8 clc .8 jmp CB.FlushBuf
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -541,7 +623,16 @@ WND.DrawTitleBarText
ldx hSYSFON ldx hSYSFON
jsr FON.GetTextSize 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 lda (ZPWNDPtr),y
sec sec
sbc CB.Cache+S.CB.SrcW sbc CB.Cache+S.CB.SrcW
@ -558,26 +649,53 @@ WND.DrawTitleBarText
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
clc clc
adc DX adc DX
and PREFS.BestViewedX * and PREFS.BestViewedX
and #$f8
sta CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1
tax
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
adc DX+1 adc DX+1
sta CB.Cache+S.CB.X1+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 ldy #S.WND.pTITLE
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
pha pha
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
ply ply
ldx hSYSFON ldx hSYSFON
clc
jmp DRAW.YAText jmp DRAW.YAText
*-------------------------------------- *--------------------------------------
WND.DrawStatusBar WND.DrawStatusBar
jsr CB.GetBuf
bcs .9
jsr CB.BorderLineH jsr CB.BorderLineH
ldy #S.OBJ.X1 ldy #S.OBJ.X1
@ -594,12 +712,9 @@ WND.DrawStatusBar
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
inc CB.Cache+S.CB.Y1 jsr CB.IncY1
bne .1
inc CB.Cache+S.CB.Y1+1 lda PREFS.SBarColor
.1 lda PREFS.SBarColor
jsr CB.FillRectMonoA jsr CB.FillRectMonoA
ldy #S.OBJ.Y2 ldy #S.OBJ.Y2
@ -608,6 +723,9 @@ WND.DrawStatusBar
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
lda #4
jsr CB.AddA2X1
ldy #S.WND.pSTATUS ldy #S.WND.pSTATUS
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
pha pha
@ -616,8 +734,11 @@ WND.DrawStatusBar
ply ply
ldx hSYSFON ldx hSYSFON
clc jsr DRAW.YAText
jmp DRAW.YAText
jmp CB.FlushBuf
.9 rts
*-------------------------------------- *--------------------------------------
WND.Paint pha hWND WND.Paint pha hWND
@ -634,12 +755,39 @@ WND.Paint1 ldy #S.WND.fPaint
jmp (ZPPtr1) jmp (ZPPtr1)
*-------------------------------------- *--------------------------------------
WND.fPaint.RTS rts
WND.fPaint jsr OBJ.GetHWNDA WND.fPaint jsr OBJ.GetHWNDA
jsr WND.GetInnerInClip
jsr CB.GetBuf jsr WND.fPaint.BG
bcs WND.fPaint.RTS 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 lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
@ -654,34 +802,13 @@ WND.fPaint jsr OBJ.GetHWNDA
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache+S.CB.COLOR sta CB.Cache+S.CB.COLOR
ldy #S.OBJ.X1 ldx #7
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
.1 lda CLIP.Rect+S.RECT.X1,x
sta CB.Cache+S.CB.X1,x
dex
bpl .1
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
*-------------------------------------- *--------------------------------------
ldy #S.WND.BGBM ldy #S.WND.BGBM
@ -694,54 +821,33 @@ WND.fPaint jsr OBJ.GetHWNDA
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache+S.CB.SrcPtr+1 sta CB.Cache+S.CB.SrcPtr+1
stz S.CB.SrcX jsr CB.ResetSrcXY
stz S.CB.SrcX+1
stz S.CB.SrcY
stz S.CB.SrcY+1
ldy #S.WND.InnerW+3 ldy #S.WND.InnerW+3
ldx #3 ldx #3
.1 lda (ZPWNDPtr),y .2 lda (ZPWNDPtr),y
sta CB.Cache+S.CB.SrcW,x sta CB.Cache+S.CB.SrcW,x
dey dey
dex dex
bpl .1 bpl .2
lda #S.CB.CMD.BITBLT lda #S.CB.CMD.BITBLT
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
.8 >LDYA L.WND.Desktop .8 jmp CB.FlushBuf
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
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
WND.ClrStatus ldy #S.OBJ.S WND.GetChilds ldy #S.OBJ.pChilds
eor #$ff lda (ZPWNDPtr),y
and (ZPWNDPtr),y sta ZPObjPtr
sta (ZPWNDPtr),y iny
rts lda (ZPWNDPtr),y
*-------------------------------------- sta ZPObjPtr+1
WND.SetStatus ldy #S.OBJ.S ora ZPObjPtr
ora (ZPWNDPtr),y
sta (ZPWNDPtr),y
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -15,8 +15,6 @@ NEW
*-------------------------------------- *--------------------------------------
WND.MAX .EQ 64 WND.MAX .EQ 64
MENU.MAX .EQ 4 MENU.MAX .EQ 4
MENU.LMargin .EQ 7
MENU.RMargin .EQ 8
*-------------------------------------- *--------------------------------------
.MA SWAP16 .MA SWAP16
lda ]1 lda ]1
@ -82,12 +80,12 @@ MENU.RMargin .EQ 8
ZPObjPtr .BS 2 ZPObjPtr .BS 2
ZPRECTPtr .BS 2 ZPRECTPtr .BS 2
ZPWNDPtr .BS 2 ZPWNDPtr .BS 2
ZPMENUPtr .BS 2
ZPBMPtr .BS 2 ZPBMPtr .BS 2
ZPCBBufPtr .BS 2 ZPCBBufPtr .BS 2
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
TmpW .BS 2
DX .BS 2 DX .BS 2
DY .BS 2 DY .BS 2
@ -152,8 +150,8 @@ L.MouseClamp .DA MouseClamp
L.MSG .DA MSG L.MSG .DA MSG
L.MSG.XY .DA MSG+S.MSG.X1 L.MSG.XY .DA MSG+S.MSG.X1
L.CB.PTR .DA CB.PTR L.CB.PTR .DA CB.PTR
L.CLIP.Rect .DA CLIP.Rect L.CB.Cache .DA CB.Cache CB.GFXWrite
L.CB.Cache .DA CB.Cache .DA CLIP.Cache CB.GFXWrite
L.WND.Screen .DA WND.Screen L.WND.Screen .DA WND.Screen
L.WND.Desktop .DA WND.Desktop L.WND.Desktop .DA WND.Desktop
L.WND.SysBar .DA WND.SysBar L.WND.SysBar .DA WND.SysBar
@ -178,6 +176,13 @@ L.BM.Up .DA BM.Up
L.BM.Down .DA BM.Down L.BM.Down .DA BM.Down
L.BM.Info .DA BM.Info 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.PTR.SaveBuf .DA PTR.SaveBuf
L.Cursors .DA PTR.Arrow L.Cursors .DA PTR.Arrow
.DA PTR.Move .DA PTR.Move
@ -205,6 +210,30 @@ J.Clip .DA CLIP.Point SETPIXEL
.DA CLIP.Text GETTEXTSIZE .DA CLIP.Text GETTEXTSIZE
.DA CLIP.Line DRAWLINE .DA CLIP.Line DRAWLINE
.DA CLIP.BitBlt DRAWTEXT2 .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 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD lda LibCount LIB.LOAD lda LibCount
@ -219,14 +248,14 @@ LIB.LOAD lda LibCount
jsr FON.Init jsr FON.Init
bcs .9 bcs .9
jsr WND.Setup
lda hDevMouse lda hDevMouse
beq .1 beq .1
jsr MOU.Setup jsr MOU.Setup
.1 jsr WND.Setup .1 lda #PTR.T.ARROW
lda #PTR.T.ARROW
jsr PTR.Set jsr PTR.Set
jsr PTR.Show jsr PTR.Show
@ -273,6 +302,32 @@ SkipStrZPtr1 ldy #$ff
.8 rts .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.bm
.INB usr/src/lib/libgui.s.but .INB usr/src/lib/libgui.s.but
.INB usr/src/lib/libgui.s.cb .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.cur
.INB usr/src/lib/libgui.s.draw .INB usr/src/lib/libgui.s.draw
.INB usr/src/lib/libgui.s.fon .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.mbar
.INB usr/src/lib/libgui.s.mbox .INB usr/src/lib/libgui.s.mbox
.INB usr/src/lib/libgui.s.menu .INB usr/src/lib/libgui.s.menu
.INB usr/src/lib/libgui.s.mou .INB usr/src/lib/libgui.s.mou
.INB usr/src/lib/libgui.s.msg .INB usr/src/lib/libgui.s.msg
.INB usr/src/lib/libgui.s.obj .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.ptr
.INB usr/src/lib/libgui.s.sysbar .INB usr/src/lib/libgui.s.sysbar
.INB usr/src/lib/libgui.s.text .INB usr/src/lib/libgui.s.text
@ -312,7 +368,16 @@ OBJ.SizeOf .DA S.WND
.DA 0 .DA 0
.DA 0 .DA 0
.DA S.BUT .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 CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL
.DA #S.CB.Y1+1 GETPIXEL .DA #S.CB.Y1+1 GETPIXEL
@ -336,7 +401,6 @@ PAT.Buf .BS 1 S.BM.F
IOCTL .BS S.IOCTL IOCTL .BS S.IOCTL
DCB.GFX .BS S.DCB.GFX DCB.GFX .BS S.DCB.GFX
*-------------------------------------- *--------------------------------------
MouseClamp .BS 8
MSG .BS S.MSG MSG .BS S.MSG
*-------------------------------------- *--------------------------------------
CB.PTR .DA #S.CB.CMD.BITBLT CB.PTR .DA #S.CB.CMD.BITBLT
@ -345,8 +409,10 @@ CB.PTR .DA #S.CB.CMD.BITBLT
.DA #0 .DA #0
.BS S.CB-4 .BS S.CB-4
*-------------------------------------- *--------------------------------------
CLIP.Rect .BS S.RECT CB.Cache .BS S.CB CB.GFXWrite:
CB.Cache .BS S.CB 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.Owner .BS 1
MENU.Stack.Idx .BS 1 MENU.Stack.Idx .BS 1
@ -448,11 +514,13 @@ KEYMOD.S.OA .EQ *-KEYMOD.S
KEYMOD.S.CA .EQ *-KEYMOD.S KEYMOD.S.CA .EQ *-KEYMOD.S
.DA #02,#'-',#0 .DA #02,#'-',#0
*-------------------------------------- *--------------------------------------
MouseClamp .EQ * MOU.Setup
TEXTBUF .BS 16 for composing HotKey strings TEXTBUF .BS 16 for composing HotKey strings
*-------------------------------------- *--------------------------------------
PREFS.BestViewedX .DA #$FC PREFS.BestViewedX .DA #$FC
PREFS.MBarXMargin .DA #5 PREFS.nBestViewedX .DA #$03
PREFS.XSeparator .DA #6 PREFS.XMargin .DA #4
PREFS.XSeparator .DA #4
* *
PREFS.MenuColor .DA #C.WHITE PREFS.MenuColor .DA #C.WHITE
PREFS.SysBarColor .DA #C.WHITE PREFS.SysBarColor .DA #C.WHITE

View File

@ -60,6 +60,6 @@ CCLK.END .EQ * end of obj cclock_0.
.HS 000000 pad to page boundary .HS 000000 pad to page boundary
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.CCLK SAVE usr/src/prodos.203/prodos.s.cclk
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -146,6 +146,6 @@ bnkbyt2 .DA #0
kversion .HS 23 represents release 2.0.3 kversion .HS 23 represents release 2.0.3
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.GP SAVE usr/src/prodos.203/prodos.s.gp
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -63,6 +63,6 @@ irqv .DA lanirq irq handler
* end of obj mli_3 * end of obj mli_3
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.IRQ SAVE usr/src/prodos.203/prodos.s.irq
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -764,6 +764,6 @@ H2620 clc
LDR.Test128.len .EQ *-LDR.Test128 LDR.Test128.len .EQ *-LDR.Test128
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.A SAVE usr/src/prodos.203/prodos.s.ldr.a
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -944,6 +944,6 @@ RAM_1_END .EQ * end of /RAM installer
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.B SAVE usr/src/prodos.203/prodos.s.ldr.b
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -83,6 +83,6 @@ RAMDRV.END .EQ *
.BS $FF9B-* fill to lanirq ($FF9B see note below) .BS $FF9B-* fill to lanirq ($FF9B see note below)
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM SAVE usr/src/prodos.203/prodos.s.ram
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -317,6 +317,6 @@ ex1 sta passit+1 also used by blockwrite
* end of obj ram_0 * end of obj ram_0
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.RAMX SAVE usr/src/prodos.203/prodos.s.ramx
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -292,6 +292,6 @@ dsp1pfx .DA #01 1 parameter
* end of obj sel_0 * end of obj sel_0
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL0 SAVE usr/src/prodos.203/prodos.s.sel0
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -400,6 +400,6 @@ rd_refn .HS 01 reference number
dhdr_len .HS 00 directory header length (actually uses 2 bytes) dhdr_len .HS 00 directory header length (actually uses 2 bytes)
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL1 SAVE usr/src/prodos.203/prodos.s.sel1
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -435,6 +435,6 @@ button2 .DA #$0B
.AS "Cancel: Esc" .AS "Cancel: Esc"
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL2 SAVE usr/src/prodos.203/prodos.s.sel2
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -89,17 +89,17 @@ tdays .DA #$00 January
* is the year which January 1st is Sunday, and so on backwards thru * is the year which January 1st is Sunday, and so on backwards thru
* the days of the week. * the days of the week.
yradj .DA #$12 Monday yradj .DA #$18 Monday
.DA #$17 Sunday .DA #$17 Sunday
.DA #$16 Saturday .DA #$16 Saturday
.DA #$15 Friday .DA #$1B Friday
.DA #$14 Thursday .DA #$1A Thursday
.DA #$14 Wednesday .DA #$19 Wednesday
.DA #$13 Tuesday .DA #$18 Tuesday
TCLK.END .HS 000000 pad TCLK.END .HS 000000 pad
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.TCLK SAVE usr/src/prodos.203/prodos.s.tclk
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -642,6 +642,6 @@ svdevn ldy namptr index to 1st byte of this entry.
rts end of block file manager rts end of block file manager
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.A SAVE usr/src/prodos.203/prodos.s.xdos.a
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -862,6 +862,6 @@ L3C0B tya
lsr lsr
rts rts
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.B SAVE usr/src/prodos.203/prodos.s.xdos.b
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -723,6 +723,6 @@ L41C1 tya calc position of next fcb.
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.C SAVE usr/src/prodos.203/prodos.s.xdos.c
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -574,6 +574,6 @@ twrprot1 sta unitnum make the device status call
rts carry is indeterminate. rts carry is indeterminate.
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.D SAVE usr/src/prodos.203/prodos.s.xdos.d
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -602,6 +602,6 @@ L4B1A ldx #$00
rts rts
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.E SAVE usr/src/prodos.203/prodos.s.xdos.e
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -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) cortflag .HS 00 cortland flag. 1 = Cortland system (must stay within page boundary)
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.F SAVE usr/src/prodos.203/prodos.s.xdos.f
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -878,6 +878,6 @@ spunit .HS 0000000000000000 ref pathbuf-$10smartport unit numbers
* pathname buffer starts at this page boundary (pathbuf = $D700) * pathname buffer starts at this page boundary (pathbuf = $D700)
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XRW SAVE usr/src/prodos.203/prodos.s.xrw
LOAD USR/SRC/PRODOS.203/PRODOS.S LOAD usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -5,11 +5,11 @@ NEW
.OR $2000 .OR $2000
.TF PRODOS.203TC,TSYS .TF PRODOS.203TC,TSYS
*-------------------------------------- *--------------------------------------
.INB INC/ZP.I .INB inc/zp.i
.INB INC/IO.I .INB inc/io.i
.INB INC/MONITOR.I .INB inc/monitor.i
.INB INC/MLI.I .INB inc/mli.i
.INB INC/MLI.E.I .INB inc/mli.e.i
*-------------------------------------- *--------------------------------------
MMStartUp .EQ $0202 MMStartUp .EQ $0202
NewHandle .EQ $0902 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) * $5D00 sel_1 enhanced quit code (Bird's Better Bye)
* $6000 sel_2 GQuit dispatcher support * $6000 sel_2 GQuit dispatcher support
*-------------------------------------- *--------------------------------------
.INB USR/SRC/PRODOS.203/PRODOS.S.LDR.A .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.b
RAM .PH $FF00 RAM .PH $FF00
.INB USR/SRC/PRODOS.203/PRODOS.S.RAM .INB usr/src/prodos.203/prodos.s.ram
.EP .EP
IRQ .PH $FF9B IRQ .PH $FF9B
.INB USR/SRC/PRODOS.203/PRODOS.S.IRQ .INB usr/src/prodos.203/prodos.s.irq
.EP .EP
GP .PH $BF00 GP .PH $BF00
.INB USR/SRC/PRODOS.203/PRODOS.S.GP .INB usr/src/prodos.203/prodos.s.gp
.EP .EP
TCLK .PH $D742 TCLK .PH $D742
.INB USR/SRC/PRODOS.203/PRODOS.S.TCLK .INB usr/src/prodos.203/prodos.s.tclk
.EP .EP
CCLK .PH $D742 CCLK .PH $D742
.INB USR/SRC/PRODOS.203/PRODOS.S.CCLK .INB usr/src/prodos.203/prodos.s.cclk
.EP .EP
XDOS .PH $DE00 XDOS .PH $DE00
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.A .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.b
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.C .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.d
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.E .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.f
.EP .EP
RAMX .PH $200 RAMX .PH $200
.INB USR/SRC/PRODOS.203/PRODOS.S.RAMX .INB usr/src/prodos.203/prodos.s.ramx
.EP .EP
XRW .PH $D000 XRW .PH $D000
.INB USR/SRC/PRODOS.203/PRODOS.S.XRW .INB usr/src/prodos.203/prodos.s.xrw
.EP .EP
SEL0 .PH $1000 SEL0 .PH $1000
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL0 .INB usr/src/prodos.203/prodos.s.sel0
.EP .EP
SEL1 .PH $1000 SEL1 .PH $1000
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL1 .INB usr/src/prodos.203/prodos.s.sel1
.EP .EP
SEL2 .PH $1000 SEL2 .PH $1000
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL2 .INB usr/src/prodos.203/prodos.s.sel2
.EP .EP
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S SAVE usr/src/prodos.203/prodos.s
ASM ASM

View File

@ -50,7 +50,10 @@ CCLK.START >SHORTMX 8 bit mode.
rts rts
savestate .HS 00 state of the state register savestate .HS 00 state of the state register
*-------------------------------------- *--------------------------------------
.LIST ON
CCLK.LEN .EQ *-CCLK.START CCLK.LEN .EQ *-CCLK.START
.LIST OFF
*--------------------------------------
MAN MAN
SAVE usr/src/prodos.fx/prodos.s.cclk SAVE usr/src/prodos.fx/prodos.s.cclk
LOAD usr/src/prodos.fx/prodos.s LOAD usr/src/prodos.fx/prodos.s

View File

@ -101,16 +101,19 @@ tdays .DA #$00 January
* to the year in which January 1st falls on a Monday. The 2nd entry * 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 * is the year which January 1st is Sunday, and so on backwards thru
* the days of the week. * the days of the week.
* https://calormen.com/tmp/proyear.html
yradj .DA #$12 Monday * For 2022 - 2027: $18, $17, $16, $1B, $1A, $19, $18
yradj .DA #$18 Monday
.DA #$17 Sunday .DA #$17 Sunday
.DA #$16 Saturday .DA #$16 Saturday
.DA #$15 Friday .DA #$1B Friday
.DA #$14 Thursday .DA #$1A Thursday
.DA #$14 Wednesday .DA #$19 Wednesday
.DA #$13 Tuesday .DA #$18 Tuesday
*--------------------------------------
.LIST ON
TCLK.LEN .EQ *-TCLK.START TCLK.LEN .EQ *-TCLK.START
.LIST OFF
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/prodos.fx/prodos.s.tclk SAVE usr/src/prodos.fx/prodos.s.tclk

View File

@ -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 * >PUSHW hLogo
* >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp * >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp
>PUSHB hWND
>PUSHBI S.WND.hPTR
>PUSHWI PTR.T.WAIT
>LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp
>PUSHB hWND >PUSHB hWND
>PUSHBI S.WND.pTITLE >PUSHBI S.WND.pTITLE
>PUSHW L.WND.TITLE >PUSHW L.WND.TITLE
@ -201,7 +206,7 @@ WND.Test.1 >PUSHB hWND
>PUSHBI C.BLACK C16.D.GREEN >PUSHBI C.BLACK C16.D.GREEN
rts rts
WND.Test.2 >PUSHWI 250 WND.Test.2 >PUSHWI 240
>PUSHWI 60 >PUSHWI 60
>LIBCALL hLIBGUI,LIBGUI.DRAW.Line >LIBCALL hLIBGUI,LIBGUI.DRAW.Line
rts rts

View File

@ -11,8 +11,8 @@ int main(int argc, char *argv[])
20,20,200,100); 20,20,200,100);
guiSetProp(hWND, WND_P_pTITLE, "Libgui C API"); guiSetProp(hWND, WND_P_pTITLE, "Libgui C API");
guiSetProp(hWND, WND_P_pSTATUS, "Status bar"); 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); guiShowWnd(hWND);
do { do {

View File

@ -92,9 +92,9 @@ CS.RUN >SLEEP
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.MsgBox >PUSHW L.ABOUT.T CS.RUN.MsgBox >PUSHW L.ABOUT.T
>PUSHW L.ABOUT.M >PUSHWI BM.ID.INFO
>PUSHWI BM.ID.INFO >PUSHW L.ABOUT.M
>PUSHBI BUT.ID.OK >PUSHBI 63 BUT.ID.OK
>LIBCALL hLIBGUI,LIBGUI.MBOX.MsgBox >LIBCALL hLIBGUI,LIBGUI.MBOX.MsgBox
rts rts
*-------------------------------------- *--------------------------------------
@ -118,7 +118,9 @@ CS.END
LIBGUI .AZ "libgui" LIBGUI .AZ "libgui"
hLIBGUI .BS 1 hLIBGUI .BS 1
ABOUT.T .AZ "About GUI" 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" GUITEST1 .AZ "${ROOT}root/asmtest/testgui"
GUITEST2 .AZ "${ROOT}root/ctest/testgui" GUITEST2 .AZ "${ROOT}root/ctest/testgui"
*-------------------------------------- *--------------------------------------

View File

@ -85,12 +85,12 @@ PSTA JSR EXPR.DEFINED GET EXPR VALUE
*-------------------------------------- *--------------------------------------
DIR1.PS jsr GNNB DIR1.PS jsr GNNB
bcs .9 bcs .9
sta DLIM SAVE DELIMITER sta DLIM SAVE DELIMITER
ldx #$ff ldx #$ff
ldy CHAR.PNTR ldy CHAR.PNTR
.1 inx .1 inx
lda WBUF,Y lda WBUF,Y
and #$7F and #$7F
@ -99,19 +99,19 @@ DIR1.PS jsr GNNB
iny iny
cmp DLIM cmp DLIM
bne .1 bne .1
txa txa
jsr EMIT jsr EMIT
.2 jsr GNC .2 jsr GNC
jsr EMIT jsr EMIT
dex dex
bne .2 bne .2
clc clc
rts rts
.9 jmp ERBA2 .9 jmp ERBA2
*-------------------------------------- *--------------------------------------
DIR1.EscChars .AS "abefnrtv" DIR1.EscChars .AS "abefnrtv"
.HS 5C27223F25 \'"?% .HS 5C27223F25 \'"?%
@ -132,10 +132,10 @@ DIR1.CS lda #0
*-------------------------------------- *--------------------------------------
PSAZ jsr PSAS PSAZ jsr PSAS
jmp EMIT.ZERO jmp EMIT.ZERO
PSAT lda #$80 LAST BYTE HAS OPPOSITE BIT 7 PSAT lda #$80 LAST BYTE HAS OPPOSITE BIT 7
.HS 2C ...SKIP OVER 2 BYTES .HS 2C ...SKIP OVER 2 BYTES
PSAS lda #0 ALL BYTES GET SAME BIT 7 PSAS lda #0 ALL BYTES GET SAME BIT 7
clc clc
@ -160,47 +160,47 @@ DIR1.String sta AT.HIBIT
.15 sta DLIM SAVE DELIMITER .15 sta DLIM SAVE DELIMITER
jsr GNC.UC GET NEXT CHAR 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 cmp DLIM CHK IF DELIMITER
beq .4 YES, NO STRING IN BETWEEN beq .4 YES, NO STRING IN BETWEEN
.2 jsr GNC.UC GET NEXT CHAR .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 cmp DLIM CHK IF DELIMITER
beq .3 YES, FINISH UP AND RETURN beq .3 YES, FINISH UP AND RETURN
lda WBUF-2,Y ...NO, GET PREVIOUS CHAR lda WBUF-2,Y ...NO, GET PREVIOUS CHAR
bit BYTE bit BYTE
bpl .27 bpl .27
cmp #'\' "\?" ? cmp #'\' "\?" ?
bne .27 bne .27
jsr GNC.UC GET NEXT CHAR 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 "?" lda WBUF-2,Y get "?"
ldx #DIR1.EscChars.L-1 ldx #DIR1.EscChars.L-1
.20 cmp DIR1.EscChars,x .20 cmp DIR1.EscChars,x
beq .21 beq .21
dex dex
bpl .20 bpl .20
bmi ERBA2 bmi .9
.21 lda DIR1.EscCodes,x .21 lda DIR1.EscCodes,x
ldx WBUF-1,Y ldx WBUF-1,Y
cpx DLIM cpx DLIM
beq .30 beq .30
.27 ora AS.HIBIT MERGE WITH TOP BIT .27 ora AS.HIBIT MERGE WITH TOP BIT
jsr EMIT jsr EMIT
jmp .2 GO FOR ANOTHER ONE jmp .2 GO FOR ANOTHER ONE
.3 lda WBUF-2,Y GET PREVIOUS CHAR .3 lda WBUF-2,Y GET PREVIOUS CHAR
.30 ora AS.HIBIT MERGE WITH SELECTED BIT 7 .30 ora AS.HIBIT MERGE WITH SELECTED BIT 7
@ -214,37 +214,102 @@ DIR1.String sta AT.HIBIT
beq .1 beq .1
.5 rts .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 * .HS -- HEX STRING
*--------------------------------- *---------------------------------
PSHS JSR GNNB GET NEXT NON-BLANK CHAR PSHS jsr GNNB GET NEXT NON-BLANK CHAR
BCS ERBA2 END OF LINE bcs ERBA2 END OF LINE
JSR BACKUP.CHAR.PNTR
JSR TRY.HEX.STRING jsr BACKUP.CHAR.PNTR
BNE ERBA2 ...ERROR, BAD ADDRESS jsr TRY.HEX.STRING
RTS bne ERBA2 ...ERROR, BAD ADDRESS
rts
*-------------------------------- *--------------------------------
THX1 JSR HEX.DIGIT GET NEXT HEX DIGIT THX1 jsr HEX.DIGIT GET NEXT HEX DIGIT
BCC ERBA2 ERROR, ODD DIGITS bcc ERBA2 ERROR, ODD DIGITS
LDA SYM.VALUE GET CONVERTED VALUE
JSR EMIT lda SYM.VALUE GET CONVERTED VALUE
TRY.HEX.STRING jsr EMIT
.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
*-------------------------------- *--------------------------------
ERBA2 JMP ERBA ERROR: BAD ADDRESS TRY.HEX.STRING jsr HEX.DIGIT
GT255ERR LDY #QER8 VALUE > 255 ERROR bcs THX1
.HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
NOLBLERR LDY #QER1 "NO LABEL" lda CURRENT.CHAR
.HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES beq .2 ...END OF LINE
UNDF LDY #QER6 "UNDEF"
JMP SOFT.ERROR 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 * .EQ -- EQUATE
*--------------------------------- *---------------------------------

View File

@ -22,13 +22,14 @@ OPTBL.DIR >DIR A,C,DIR.AC ASCII STRING COMPRESSED
>DIR D,A,PSDA DATA >DIR D,A,PSDA DATA
>DIR D,O,PSDO DO >DIR D,O,PSDO DO
>DIR D,U,D.DUMMY DUMMY >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,L,PSEL ELSE
>DIR E,N,PSEN END OF SOURCE >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 E,Q,PSEQ EQUATE
>DIR F,I,PSFI FIN >DIR F,I,PSFI FIN
>DIR H,S,PSHS HEX STRING >DIR H,S,PSHS HEX STRING
>DIR H,X,PSHX HEX DIGIT STRING
>DIR I,N,PSIN INCLUDE >DIR I,N,PSIN INCLUDE
>DIR L,I,PSLI LIST ON,/ OFF >DIR L,I,PSLI LIST ON,/ OFF
>DIR M,A,PSMA MACRO >DIR M,A,PSMA MACRO