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 | | |
| .FIN | conditional end| S-C, A2osX | Working | | |
| .HS | Hex String storage | S-C, A2osX | Working | `HS FE1A78` delimiter allowed : `HS 00.11,22` | |
| .HX | Hex Nibble storage | S-C, A2osX | Working | `HX EFA187` delimiter allowed : `HS 00.11,22` | |
| .IN,.INB,.INBx | INline source | S-C, A2osX | Working | `.INB MYFILE` | `.IN` inlines full text, `.INB` inlines 1 block at a time during assembly |
| .LI,.LIST | | S-C, A2osX | Working | `.LIST ON/OFF CON/COFF MON/MOFF XON/XOFF` | |
| .MA | MAcro deffinition | S-C, A2osX | Working | `.MA >MYMACRO` | |

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, middle"></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="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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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
*--------------------------------------
STMT.CPStmt.NEW >LDA.G CC.CPSID+1
jsr CC.Push
bcs .99
>LDA.G CC.CPSID
jsr CC.Push
bcs .99
lda LocalPtr Locals
STMT.CPStmt.NEW lda LocalPtr Locals
jsr CC.Push
bcs .99
@ -216,24 +208,7 @@ STMT.NewCPS00 lda #0
jsr CC.Push
bcs STMT.NewCPS.RTS
STMT.NewCPS jsr STMT.NewCPSID
bcs .99
lda #'*'
>SYSCALL putchar
>LEA.G CC.CPSPFX+2
>SYSCALL puts
* >DEBUG
>LDA.G CC.CPSPFX+3
jsr CC.Push
bcs .99
>LDA.G CC.CPSPFX+2
jsr CC.Push
bcs .99
lda LocalPtr Locals
STMT.NewCPS lda LocalPtr Locals
jsr CC.Push
bcs .99
@ -276,121 +251,6 @@ STMT.SetCPSType jsr CORE.GetNCharNBNL
sec
.99 rts
*--------------------------------------
STMT.NewLabelA pha
lda CStackPtr
jsr STMT.GetCPSIDA
* lda #'+'
* >SYSCALL putchar
* pla
* pha
* >SYSCALL putchar
* >LEA.G CC.CPSPFX+1
* >SYSCALL puts
* >DEBUG
pla
jmp SYM.NewA
*--------------------------------------
STMT.GetLabelA pha
lda CStackPtr
jsr STMT.GetCPSIDA
* lda #'?'
* >SYSCALL putchar
* pla
* pha
* >SYSCALL putchar
* >LEA.G CC.CPSPFX+1
* >SYSCALL puts
* >DEBUG
pla
jmp SYM.LookupA
*--------------------------------------
STMT.LookupLabelA
pha
ldy CStackPtr
sty ArgIndex
lda ArgIndex
beq .9
.1 jsr STMT.GetCPSIDA
* lda #'!'
* >SYSCALL putchar
* pla
* pha
* >SYSCALL putchar
* >LEA.G CC.CPSPFX+1
* >SYSCALL puts
* >DEBUG
pla
pha
jsr SYM.LookupA
bcc .8
lda ArgIndex
clc
adc #CPS
sta ArgIndex
bne .1
.9 lda #E.NOKEY
plx
* sec
rts
.8 pla
* clc
rts
*--------------------------------------
STMT.GetCPSIDA clc
adc #CPS.CPSID
tay
lda (ZPCCStack),y
pha
iny
lda (ZPCCStack),y
ply
>STYA.G CC.CPSPFX+2
rts
*--------------------------------------
STMT.NewCPSID >LDYA.G CC.CPSID
>STYA.G CC.CPSPFX+2
>LDA.G CC.CPSID+1
inc
cmp #'Z'+1
bne .1
dey CC.CPSID
lda (pData),y
inc
cmp #'Z'+1
beq .9
sta (pData),y
lda #'A'
iny CC.CPSID+1
.1 sta (pData),y
clc
rts
.9 lda #E.OOH
* sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.stmt
LOAD usr/src/bin/cc.s

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -35,21 +35,21 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
sta LOAD.ArgCnt A = ARGC
lda #8
jsr CORE.StkCheck
jsr STK.Check
bcs .9
>LDYA ZPInputBuf
jsr CORE.StkPushYA
jsr STK.PushYA
jsr CORE.StkPushInputBufPtr
jsr STK.PushInputBufPtr
ldy #S.PS.ARGC
lda (pPS),y
jsr CORE.StkPush old ARGC
jsr STK.Push old ARGC
ldy #S.PS.hARGV
lda (pPS),y
jsr CORE.StkPush old hARGV
jsr STK.Push old hARGV
ldy #S.PS.ARGC
lda LOAD.ArgCnt new ARGC
@ -61,7 +61,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
sta (pPS),y new hARGV
lda LOAD.hCode new code
jsr CORE.StkPush
jsr STK.Push
* lda LOAD.hCode
>SYSCALL GetMemPtr
>STYA ZPInputBuf
@ -95,7 +95,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
* set hStdIn = hStdOut
* set hStdOut = Std
*--------------------------------------
CORE.Run.EOF jsr CORE.StkPull
CORE.Run.EOF jsr STK.Pull
bcs *
cmp #$C0+C.. check CALL . CL context
beq .1
@ -198,7 +198,7 @@ CORE.Run.4 >LDYA L.CMD internal command ?
.41 stx CORE.IntCmd
jsr CORE.SkipCharsA
.42 jsr CORE.StkGet
.42 jsr STK.Get
bcs CORE.Run.5 no particular context, exec...
tax
@ -794,191 +794,6 @@ CORE.SListGetData
>SYSCALL SListGetData X = hMem
rts
*--------------------------------------
* Stack
*--------------------------------------
CORE.StkPopCtx jsr CORE.StkPull
CORE.StkPopCtxA and #$3F
cmp #C.IF
beq .8 IF : Nothing
ldx #2
cmp #C.WHILE WHILE : One Ptr = 2 bytes
beq CORE.StkPopX
cmp #C.SWITCH SWITCH : hValue
beq .2
ldx #1
cmp #C.CASE CASE : C.CASE + hValue
beq .1
cmp #C.FOR
beq .3
cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
bne .9
.1 jsr CORE.StkPopX
.2 jsr CORE.StkPullFree
.8 clc
rts
.3 jsr CORE.StkPull Get FOR sub cmd
beq .4 FOR List
jsr CORE.StkPullFree hVARNAME
jsr CORE.StkPullFClose hFILE/hPIPE
ldx #2 CmdPtr
jmp CORE.StkPopX
.4 jsr CORE.StkPullFree hVARNAME
jsr CORE.StkPullFClose hFILE/hPIPE
ldx #4 ListPtr,CmdPtr
jmp CORE.StkPopX
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
CORE.StkPopX lda (pData)
.1 dec
dex
bne .1
sta (pData)
clc
rts
*--------------------------------------
CORE.StkCheck sec
adc (pData) StackPtr
cmp #CORE.STACK.MAX
bcc .8
lda #E.STKOVERFLOW
* sec
.8 rts
*--------------------------------------
CORE.StkPushYAX phx
jsr CORE.StkPushYA
bcc CORE.StkPush.1
plx
rts
*--------------------------------------
CORE.StkPushInputBufPtr
>LDYA ZPInputBufPtr
*--------------------------------------
CORE.StkPushYA phy
jsr CORE.StkPush
bcc CORE.StkPush.1
plx
rts
*--------------------------------------
CORE.PushVarName
>LDYA ZPVarNamePtr
>SYSCALL StrDup
bcs CORE.StkPush.RTS
txa
*--------------------------------------
CORE.StkPush pha
CORE.StkPush.1 lda (pData) StackPtr
inc
cmp #CORE.STACK.MAX
bcs .9
sta (pData) StackPtr
tay
pla
sta (pData),y
* clc
rts
.9 pla
lda #E.STKOVERFLOW
* sec
CORE.StkPush.RTS
rts
*--------------------------------------
CORE.StkGetCtx jsr CORE.StkGet
tax
bcs .1 no context...
cmp #$C0+C.. in a call...
beq .1 CS
cmp #$C0+C.CALL
beq .1 CS
cmp #$C0+C.CLEXEC
beq .1 CS
and #$80 get current..
lsr becomes parent
bra .8
.1 lda #$40 ...set Parent = true
.8 sta CORE.TestResult
txa
rts
*--------------------------------------
CORE.StkPullInputBufPtr
jsr CORE.StkPull
bcs .9
sta ZPInputBufPtr
jsr CORE.StkPull
bcs .9
sta ZPInputBufPtr+1
.9 rts
*--------------------------------------
CORE.StkPullFClose
jsr CORE.StkPull
>SYSCALL FClose
rts
*--------------------------------------
CORE.StkPullFree
jsr CORE.StkPull
>SYSCALL FreeMem
rts
*--------------------------------------
CORE.StkPull jsr CORE.StkGet
bcs .9
dey
pha
tya
sta (pData) StackPtr
pla
.9 rts
*--------------------------------------
CORE.StkGet lda (pData) StackPtr
beq .9
tay
lda (pData),y
clc
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/sh.s.core
LOAD usr/src/bin/sh.s

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,6 +4,9 @@ NEW
PTR.T .BS 1
PTR.bVisible .BS 1
PTR.Pos .BS S.POINT
PTR.Rect .BS S.Rect
PTR.SaveBuf .BS 64
* .BS 3*14 3 bytes (16pix possibly shifted 0-6) x 14 lines max
*--------------------------------------
PTR.HotPoints .DA #0,#0 PTR.T.ARROW
.DA #6,#6 PTR.T.MOVE
@ -20,8 +23,6 @@ PTR.HotPoints .DA #0,#0 PTR.T.ARROW
.DA #8,#7 PTR.Wait5
.DA #8,#7 PTR.Wait6
*--------------------------------------
PTR.SaveBuf .BS 64 16*4
*--------------------------------------
PTR.Arrow .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
@ -56,32 +57,32 @@ PTR.Arrow.MASK .DA %111.11111100
*--------------------------------------
PTR.Move .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
.DA 12 W
.DA 11 H
.DA PTR.Move.MASK-PTR.Move
.DA %000.00100000
.DA %000.01010000
.DA %000.10001000
.DA %001.00000100
.DA %010.00000010
.DA %100.00000001
.DA %010.00000010
.DA %001.00000100
.DA %000.10001000
.DA %000.01010000
.DA %000.00100000
.DA %0000.001000000
.DA %0000.010100000
.DA %0000.100010000
.DA %0001.111111000
.DA %0010.100010100
.DA %0100.100010010
.DA %0010.100010100
.DA %0001.111111000
.DA %0000.100010000
.DA %0000.010100000
.DA %0000.001000000
PTR.Move.MASK
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %111.11111111
.DA %1111.100011111
.DA %1111.000001111
.DA %1110.000000111
.DA %1100.000000011
.DA %1000.000000001
.DA %0000.000000000
.DA %1000.000000001
.DA %1100.000000011
.DA %1110.000000111
.DA %1111.000001111
.DA %1111.100011111
*--------------------------------------
PTR.ResizeX .DA #S.BM.F.BBP1
.DA #2 RowBytes

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
AUTO 3,1
*--------------------------------------
BM.Get
*--------------------------------------
*--------------------------------------
BM.YA2CB.cache >STYA ZPBMPtr
>STYA CB.Cache+S.CB.SrcPtr
lda #S.CB.CMD.BITBLT
sta CB.Cache+S.CB.CMD
lda #S.CB.OP.MASK+S.CB.OP.ORA
sta CB.Cache+S.CB.OP
ldx #S.CB.M.MONO
lda (ZPBMPtr) #S.BM.F
cmp #S.BM.F.BBP4
bne .1
lda #S.CB.OP.COLOR
tsb CB.Cache+S.CB.OP
lda CB.Cache+S.CB.X1
and PREFS.BestViewedX
sta CB.Cache+S.CB.X1
ldx #S.CB.M.C16
.1 stx CB.Cache+S.CB.M
jsr CB.ResetSrcXY
ldy #S.BM.W+3
ldx #3
.2 lda (ZPBMPtr),y
sta CB.Cache+S.CB.SrcW,x
dey
dex
bpl .2
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.bm

View File

@ -5,9 +5,9 @@ NEW
*--------------------------------------
BUT.New lda #S.OBJ.T.BUT
jsr OBJ.New
bcs .9
* bcs .9
* >STYA ZPObjPtr
phx hOBJ
ldy #S.OBJ.Y1
jsr OBJ.PullWordAtY
@ -15,6 +15,9 @@ BUT.New lda #S.OBJ.T.BUT
ldy #S.OBJ.X1
jsr OBJ.PullWordAtY
ldy #S.BUT.ID
jsr OBJ.PullWordAtY
ldy #S.BUT.KEYMOD
jsr OBJ.PullWordAtY
@ -74,7 +77,7 @@ BUT.New lda #S.OBJ.T.BUT
adc DX+1
sta DX+1
.3 lda #PREFS.XSeparator
.3 lda PREFS.XSeparator
asl
* clc
adc DX
@ -85,26 +88,95 @@ BUT.New lda #S.OBJ.T.BUT
iny
sta (ZPObjPtr),y
.5
.5 lda SYSFON.Hp2
ldy #S.OBJ.H
sta (ZPObjPtr),y
>LDYA ZPObjPtr
jsr OBJ.SetX2Y2
.8 clc
.8 jsr WND.AddChild.I
pla hOBJ
clc
rts
.9 >POP 14
.9 >POP 16
rts
*--------------------------------------
BUT.Enter
*--------------------------------------
BUT.Draw
BUT.Enter ldy #S.OBJ.S
lda (ZPObjPtr),y
bpl BUT.Paint
.8 clc
rts
*--------------------------------------
BUT.Leave ldy #S.OBJ.S
lda (ZPObjPtr),y
bpl .8
bit #S.BUT.F.NOLEAVE
beq BUT.Paint
.8 clc
rts
*--------------------------------------
BUT.Close
clc
rts
*--------------------------------------
BUT.Paint eor #S.BUT.S.SELECTED
sta (ZPObjPtr),y
jsr WND.GetInnerInClip
BUT.fPaint jsr CB.GetBuf
bcs .9
ldx #1
jsr DRAW.BordersAtX
ldx #C.WHITE
ldy #S.OBJ.S
lda (ZPObjPtr),y
bpl .1
* and #S.BUT.S.SELECTED
* beq .1
ldx #C.BLACK
.1 txa
jsr CB.FillRectMonoA
jsr CB.GetObjX1Y1X2Y2
jsr CB.Cache2CBBufG
ldy #S.BUT.pTEXT
jsr OBJ.GetPropAtY
ldx hSYSFON
jsr FON.GetTextSize
jsr CB.SrcWCenterH
jsr CB.IncY1
ldy #S.BUT.pTEXT
jsr OBJ.GetPropAtY
ldx hSYSFON
jsr DRAW.YAText
.8 jmp CB.FlushBuf
.9 rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.but
LOAD usr/src/lib/libgui.s

View File

@ -1,27 +1,6 @@
NEW
AUTO 3,1
*--------------------------------------
CB.InitCacheA sta CB.Cache+S.CB.CMD
ldx #S.CB-1
.1 stz CB.Cache,x
dex
bne .1
rts
*--------------------------------------
CB.GetInCache >STYA .1+1
ldx #S.CB-1
.1 lda $ffff,x SELF MODIFIED
sta CB.Cache,x
dex
bpl .1
rts
*--------------------------------------
CB.GetWndYCacheX
lda (ZPWNDPtr),y
sta CB.Cache,x
@ -30,6 +9,32 @@ CB.GetWndYCacheX
sta CB.Cache+1,x
rts
*--------------------------------------
CB.SwapX1X2 ldx CB.Cache+S.CB.X1
ldy CB.Cache+S.CB.X1+1
lda CB.Cache+S.CB.X2
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X2+1
sta CB.Cache+S.CB.X1+1
stx CB.Cache+S.CB.X2
sty CB.Cache+S.CB.X2+1
rts
*--------------------------------------
CB.SwapY1Y2 ldx CB.Cache+S.CB.Y1
ldy CB.Cache+S.CB.Y1+1
lda CB.Cache+S.CB.Y2
sta CB.Cache+S.CB.Y1
lda CB.Cache+S.CB.Y2+1
sta CB.Cache+S.CB.Y1+1
stx CB.Cache+S.CB.Y2
sty CB.Cache+S.CB.Y2+1
rts
*--------------------------------------
CB.BorderLineH lda #S.CB.CMD.HLINE
sta CB.Cache+S.CB.CMD
lda #S.CB.OP.SET
@ -53,12 +58,115 @@ CB.FillRectMonoA
sta CB.Cache+S.CB.M
rts
*--------------------------------------
CB.PullY2X2Y1X1 ldx #7
bra CB.PullX
CB.PullY1X1 ldx #3
CB.PullX >PULLA
sta CB.Cache+S.CB.X1-1,x
>PULLA
sta CB.Cache+S.CB.X1,x
dex
dex
bpl CB.PullX
rts
**--------------------------------------
CB.X2ToX1 ldy CB.Cache+S.CB.X2
lda CB.Cache+S.CB.X2+1
sty CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1+1
rts
*--------------------------------------
CB.AddA2X1 clc
adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1
bcc .1
inc CB.Cache+S.CB.X1+1
.1 rts
*--------------------------------------
CB.IncY1 inc CB.Cache+S.CB.Y1
bne .1
inc CB.Cache+S.CB.Y1+1
.1 rts
*--------------------------------------
CB.DecY2 lda CB.Cache+S.CB.Y2
bne .1
dec CB.Cache+S.CB.Y2+1
.1 dec CB.Cache+S.CB.Y2
rts
*--------------------------------------
CB.GetObjX1Y1 ldy #S.OBJ.X1+3
ldx #3
bra CB.GetObjXY
*--------------------------------------
CB.GetObjX1Y1X2Y2
ldy #S.OBJ.X1+7
ldx #7
CB.GetObjXY lda (ZPObjPtr),y
sta CB.Cache+S.CB.X1,x
dey
dex
bpl CB.GetObjXY
rts
*--------------------------------------
CB.GetObjSrcWH ldy #S.OBJ.W+3 W,H
ldx #3
.1 lda (ZPObjPtr),y
sta CB.Cache+S.CB.SrcW,x
dey
dex
bpl .1
rts
*--------------------------------------
CB.ResetSrcXY ldx #4
.1 stz CB.Cache+S.CB.SrcX-1,x
dex
bne .1
rts
*--------------------------------------
CB.SrcWCenterH ldy #S.OBJ.W
lda (ZPObjPtr),y
sec
sbc CB.Cache+S.CB.SrcW
pha
iny
lda (ZPObjPtr),y
sbc CB.Cache+S.CB.SrcW+1
lsr
tax
pla
ror
clc
adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1
txa
adc CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X1+1
rts
*--------------------------------------
CB.GetBuf clc
ldx hCBBuf
bne .9
>LDYAI 512
>LDYAI 1024
>SYSCALL2 GetMem
bcs .9
@ -67,82 +175,86 @@ CB.GetBuf clc
.9 rts
*--------------------------------------
CB.Cache2CBBuf
lda CB.Cache
CB.Cache2CBBufG jsr CB.ToGlobal
*--------------------------------------
CB.Cache2CBBuf lda CB.Cache
lsr
tax
ldy CB.CmdLen-1,x
ldx #0
.1 lda CB.Cache,x
sta (ZPCBBufPtr)
inc ZPCBBufPtr
bne .2
inc ZPCBBufPtr+1
.2 inx
.1 lda CB.Cache,y
sta (ZPCBBufPtr),y
dey
bpl .1
rts
*--------------------------------------
* Y,A = Target Object
*--------------------------------------
CB.FlushBufToYA jsr CLIP.GetRect
lda hCBBuf
beq .8
lda #0
sta (ZPCBBufPtr)
lda hCBBuf
>SYSCALL2 GetMemPtr
>STYA ZPCBBufPtr
jsr PTR.Disable
*--------------------------------------
.2 lda (ZPCBBufPtr)
beq .7
>LDYA ZPCBBufPtr
jsr CB.GetInCache A = CB.CMD
cmp #S.CB.CMD.DRAWTEXT2
bne .4
lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
jsr CB.GFXWrite
bcs .9
jsr CLIP.CB.Cache
bcs .3
jsr CB.GFXWrite
.3 lda CB.Cache+S.CB.SrcPtr
>SYSCALL2 FreeStkObj
bra .5
.4 jsr CLIP.CB.Cache
bcs .5
jsr CB.GFXWrite
.5 lda (ZPCBBufPtr) Get Cmd
CB.BufNext lda (ZPCBBufPtr) Get Cmd
lsr
tax
lda CB.CmdLen-1,x
sec +1
adc ZPCBBufPtr
sta ZPCBBufPtr
bcc .2
bcc .1
inc ZPCBBufPtr+1
bra .2
.1 rts
*--------------------------------------
* CLIP.Rect = Target Object
*--------------------------------------
CB.Write jsr PTR.Disable
jsr CB.GFXWriteClip
.8 jmp PTR.Enable
*--------------------------------------
* Y,A = Target Object
*--------------------------------------
CB.FlushBufToYA jsr CLIP.GetRect
CB.FlushBuf ldx hCBBuf
beq .8
jsr PTR.Disable
lda #0
sta (ZPCBBufPtr)
lda hCBBuf
>SYSCALL2 GetMemPtr
>STYA ZPCBBufPtr
*--------------------------------------
.1 lda (ZPCBBufPtr) Get Cmd
beq .7
lsr
tax
ldy CB.CmdLen-1,x
.2 lda (ZPCBBufPtr),y
sta CB.Cache,y
dey
bpl .2
* lda (ZPCBBufPtr) A = CB.CMD
cmp #S.CB.CMD.DRAWTEXT2
bne .4
lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
ldx #0 Select CB.Cache
jsr CB.GFXWriteX Direct Write (no clip)
bcs .9
jsr CB.GFXWriteClip
lda CB.Cache+S.CB.SrcPtr
>SYSCALL2 FreeStkObj
bra .5
*--------------------------------------
.4 jsr CB.GFXWriteClip
.5 jsr CB.BufNext
bra .1
.7 lda hCBBuf
stz hCBBuf
@ -153,55 +265,13 @@ CB.FlushBufToYA jsr CLIP.GetRect
.8 clc
.9 rts
*--------------------------------------
CB.GFXWritePtr jsr PTR.Disable
jsr CB.GFXWrite
jmp PTR.Enable
*--------------------------------------
CB.GFXWrite >PUSHB WND.Screen+S.OBJ.hPARENT
>PUSHBI IOCTL.WRITE
>PUSHW L.CB.Cache
>SYSCALL2 IOCTL
rts
*--------------------------------------
CB.SetX2Y2 lda CB.Cache+S.CB.SrcW
clc
adc CB.Cache+S.CB.X1
pha
CB.ToGlobal lda ZPWNDPtr
ldx ZPWNDPtr+1
lda CB.Cache+S.CB.SrcW+1
adc CB.Cache+S.CB.X1+1
tax
pla
bne .2
.1 sta ZPPtr1
stx ZPPtr1+1
dex
.2 dec
sta CB.Cache+S.CB.X2
stx CB.Cache+S.CB.X2+1
lda CB.Cache+S.CB.SrcH
clc
adc CB.Cache+S.CB.Y1
pha
lda CB.Cache+S.CB.SrcH+1
adc CB.Cache+S.CB.Y1+1
tax
pla
bne .3
dex
.3 dec
sta CB.Cache+S.CB.Y2
stx CB.Cache+S.CB.Y2+1
rts
*--------------------------------------
CB.ToGlobal >STYA ZPPtr1
.1 ldy #S.OBJ.X1
ldy #S.WND.InnerX1
ldx #S.CB.X1
jsr CB.AddPtr1YtoCBX
@ -209,7 +279,7 @@ CB.ToGlobal >STYA ZPPtr1
ldx #S.CB.Y1
jsr CB.AddPtr1YtoCBX
ldy #S.OBJ.X1
ldy #S.WND.InnerX1
ldx #S.CB.X2
jsr CB.AddPtr1YtoCBX
@ -224,9 +294,6 @@ CB.ToGlobal >STYA ZPPtr1
tax
dey
lda (ZPPtr1),y
sta ZPPtr1
stx ZPPtr1+1
bra .1
.8 clc
@ -243,6 +310,21 @@ CB.AddPtr1YtoCBX
sta CB.Cache+1,x
rts
*--------------------------------------
* CB.Cache -> CLIP.Cache
*--------------------------------------
CB.GFXWriteClip jsr CLIP.CB.Cache
bcs CB.GFXWrite.9
CB.GFXWrite ldx #2 Select CLIP.Cache
*--------------------------------------
* X=0:CB.Cache, X=2:CLIP.Cache
*--------------------------------------
CB.GFXWriteX >PUSHB WND.Screen+S.OBJ.hPARENT
>PUSHBI IOCTL.WRITE
>PUSHW L.CB.Cache,x
>SYSCALL2 IOCTL
CB.GFXWrite.9 rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.cb
LOAD usr/src/lib/libgui.s

View File

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

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

View File

@ -15,10 +15,8 @@ FON.Init >LDYA L.SYSX7
* ldy #S.FON.PixH
* >SYSCALL2 GetStkObjProp
lda #7
dec
sta SYSFON.Hm1
inc
sta SYSFON.H
inc
sta SYSFON.Hp1
@ -34,12 +32,152 @@ FON.Init >LDYA L.SYSX7
>SYSCALL LoadStkObj
rts
*--------------------------------------
FON.GetTextSize >STYA CB.CACHE+S.CB.TxtPtr
stx CB.CACHE+S.CB.hFont
FON.GetTextSize >STYA CB.Cache+S.CB.TxtPtr
stx CB.Cache+S.CB.hFont
lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD
sta CB.CACHE+S.CB.CMD
jmp CB.GFXWrite
sta CB.Cache+S.CB.CMD
ldx #0 Select CB.Cache
jmp CB.GFXWriteX
*--------------------------------------
FON.GetTextSize2
>STYA ZPPtr1
stx CB.Cache+S.CB.hFont
lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
jsr FON.GetBuf
bcs .9
stz DX
stz DX+1
stz DY
stz DY+1
.1 jsr FON.GetLine
beq .8
ldx #0 Select CB.Cache
jsr CB.GFXWriteX
ldx CB.Cache+S.CB.SrcW
cpx DX
lda CB.Cache+S.CB.SrcW+1
tay
sbc DX+1
bcc .2
stx DX
sty DX+1
.2 lda CB.Cache+S.CB.SrcH
clc
adc DY
sta DY
lda CB.Cache+S.CB.SrcH+1
adc DY+1
sta DY+1
lda (ZPPtr1)
bne .1
.8 >LDYA ZPPtr2
>SYSCALL2 Free
.9 rts
*--------------------------------------
FON.DrawText2 >STYA ZPPtr1
stx CB.Cache+S.CB.hFont
lda #S.CB.OP.XOR
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
jsr CB.ResetSrcXY
jsr FON.GetBuf
bcs .9
jsr PTR.Disable
* >DEBUG
.1 jsr FON.GetLine
beq .8
lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
ldx #0
jsr CB.GFXWriteX
bcs .9
* ldx #0
* jsr CB.GFXWriteX Clip
jsr CB.GFXWriteClip
lda CB.Cache+S.CB.SrcPtr
>SYSCALL2 FreeStkObj
lda CB.Cache+S.CB.SrcH
clc
adc CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y1
bcc .1
inc CB.Cache+S.CB.Y1+1
bra .1
.8 >LDYA ZPPtr2
>SYSCALL2 Free
jmp PTR.Enable
.9 rts
*--------------------------------------
FON.GetBuf >LDYAI 256
>SYSCALL2 GetMem
bcs .9
>STYA ZPPtr2
>STYA CB.Cache+S.CB.TxtPtr
.9 rts
*--------------------------------------
FON.GetLine ldy #0
.1 lda (ZPPtr1)
beq .8
.2 cmp #C.SPACE
bcs .3
eor #C.CR
beq .7
bne .4
.3 sta (ZPPtr2),y
iny
.4 inc ZPPtr1
bne .1
inc ZPPtr1+1
bra .1
.7 inc ZPPtr1
bne .8
inc ZPPtr1+1
.8 sta (ZPPtr2),y
tya set Z flag
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.fon

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

View File

@ -1,23 +1,23 @@
NEW
AUTO 3,1
*--------------------------------------
* idButton MsgBox(pTITLE, pTEXT, pBM, idButtons)
* guiNewWnd(sFlags, iX1, iY1, iW, iH)
* MsgBox(pTITLE, pBM, pTEXT, idButtons)
*--------------------------------------
MBOX.MsgBox >LDYAI 360
>STYA IE
>LDYAI 80
>LDYAI 70
>STYA INE
lda WND.Desktop+S.OBJ.W
sec
sbc IE
and #$F8
sta DX
lda WND.Desktop+S.OBJ.W+1
sbc IE+1
lsr
lsr
sta DX+1
ror DX
@ -27,7 +27,7 @@ MBOX.MsgBox >LDYAI 360
sta DY
lda WND.Desktop+S.OBJ.H+1
sbc INE+1
lsr
lsr
sta DY+1
ror DY
@ -38,13 +38,14 @@ MBOX.MsgBox >LDYAI 360
>PUSHW INE
jsr WND.New
bcs .9
pha
sta WND.hWND
jsr OBJ.GetHWNDA for childs later....
ldy #S.WND.BGCOLOR
lda #C.WHITE
sta (ZPObjPtr),y
ldy #6
lda (pStack),y
tax
@ -52,51 +53,93 @@ MBOX.MsgBox >LDYAI 360
lda (pStack),y
ldy #S.WND.pTITLE
jsr OBJ.SetAXAtY
pla
jsr WND.Show
bcs .9
ldy #2 pBM
ldy #4 pBM
lda (pStack),y
tax
sta ZPBMPtr+1
dey
lda (pStack),y
jsr MBOX.DrawBM
sta ZPBMPtr
lda #16
sta DX
stz DX+1
lda #20
sta DY
stz DY+1
jsr BITMAP.New.I
bcs .9
ldy #2 pTEXT
lda (pStack),y
sta ZPPtr1+1
dey
lda (pStack),y
sta ZPPtr1
lda #60
sta DX
* stz DX+1
* lda #30
* sta DY
* stz DY+1
jsr LABEL.New.I
bcs .9
jsr MBOX.AddButtons
bcs .9
.8 lda WND.hWND
jsr WND.Show
.9 >POP 7
rts
*--------------------------------------
MBOX.DrawBM cpx #0
bne .1
MBOX.AddButtons lda #360-5-60
sta D
lda /360-5-60
sta D+1
tax
>LDYA L.BMs,x
stz IY
.1 lda (pStack)
beq .8
.1 >STYA ZPBMPtr
lsr
sta (pStack)
bcc .7
jsr CB.GetBuf
jsr MBOX.AddButton
bcs .9
lda #28
sta CB.Cache+S.CB.X1
stz CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.Y1
stz CB.Cache+S.CB.Y1+1
jsr DRAW.BM
* >DEBUG
* >LDYA ZPWNDPtr
>LDYA L.WND.Desktop
jmp CB.FlushBufToYA
lda D
sec
sbc #55
sta D
bcs .7
.9 rts
dec D+1
.7 inc IY
inc IY
bra .1
.8 clc
.9 rts
*--------------------------------------
MBOX.AddButton >PUSHB WND.hWND
>PUSHBI 0 flags
>PUSHWI 50 w
>PUSHWZ pIcon
ldx IY
>PUSHW L.BUT.Labels,x pText
>PUSHWZ keymod/key
>PUSHWZ id
>PUSHW D X
>PUSHWI 45 Y
jmp BUT.New
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.mbox

View File

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

View File

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

View File

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

View File

@ -30,6 +30,18 @@ OBJ.New pha
.9 rts
*--------------------------------------
OBJ.Enter lda (ZPObjPtr)
tax
jmp (J.OBJ.Enter,x)
*--------------------------------------
OBJ.Leave lda (ZPObjPtr)
tax
jmp (J.OBJ.Leave,x)
*--------------------------------------
OBJ.Paint lda (ZPObjPtr)
tax
jmp (J.OBJ.fPaintX,x)
*--------------------------------------
* hOBJ, Prop8, Value16
*--------------------------------------
OBJ.SetProp ldy #3
@ -85,19 +97,29 @@ OBJ.GetPropAtY lda (ZPObjPtr),y
rts
*--------------------------------------
OBJ.SetDXDYX1Y1 ldx #3
ldy #S.OBJ.X1+3
.1 lda DX,x
sta (ZPObjPtr),y
dey
dex
bpl .1
rts
*--------------------------------------
OBJ.SetX2Y2 >STYA ZPPtr1
ldy #S.OBJ.W
ldy #S.OBJ.W+1
lda (ZPPtr1),y
clc
sbc #0
pha
iny
lda (ZPPtr1),y
sbc #0
tax
pla
dey
lda (ZPPtr1),y
bne .1
dex
.1 dec
clc
ldy #S.OBJ.X1
adc (ZPPtr1),y
@ -110,18 +132,18 @@ OBJ.SetX2Y2 >STYA ZPPtr1
dey
pla
sta (ZPPtr1),y
ldy #S.OBJ.H
*--------------------------------------
ldy #S.OBJ.H+1
lda (ZPPtr1),y
clc
sbc #0
pha
iny
lda (ZPPtr1),y
sbc #0
tax
dey
lda (ZPPtr1),y
bne .2
dex
.2 dec
pla
clc
ldy #S.OBJ.Y1
adc (ZPPtr1),y
@ -131,13 +153,25 @@ OBJ.SetX2Y2 >STYA ZPPtr1
adc (ZPPtr1),y
ldy #S.OBJ.Y2+1
sta (ZPPtr1),y
tax
dey
pla
sta (ZPPtr1),y A,X = Y2
sta (ZPPtr1),y
rts
*--------------------------------------
OBJ.GetPtr lda (ZPObjPtr),y
pha
iny
lda (ZPObjPtr),y
beq .1
ply
rts
.1 plx
>LDYA L.BMs,x
rts
*--------------------------------------
OBJ.SetAXAtY sta (ZPObjPtr),y
iny
txa
@ -162,6 +196,19 @@ OBJ.GetHWNDA >SYSCALL2 GetMemPtr
OBJ.DrawBorders >STYA ZPObjPtr
stx IY
ldy #S.OBJ.F
lda (ZPObjPtr),y
* and #S.OBJ.F.BORDER
* bne .1
bmi .1
clc
.9 rts
.1 jsr CB.GetBuf
bcs .9
jsr CB.BorderLineH
ldy #S.OBJ.X1
@ -247,9 +294,19 @@ OBJ.DrawBorders >STYA ZPObjPtr
sta CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+1
jmp CB.Cache2CBBuf
jsr CB.Cache2CBBuf
jmp CB.FlushBuf
*-------------------------------------
OBJ.GetNext ldy #S.OBJ.pNext
lda (ZPObjPtr),y
tax
iny
lda (ZPObjPtr),y
stx ZPObjPtr
sta ZPObjPtr+1
ora ZPObjPtr
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.obj

View File

@ -12,7 +12,7 @@ PTR.Update lda PTR.T
lda #PTR.T.WAIT
*--------------------------------------
* Set X2,Y2,SrcPtr
* Set SrcPtr, SrcW, SrcH
*--------------------------------------
PTR.Set sta PTR.T
@ -26,61 +26,37 @@ PTR.Set sta PTR.T
sta CB.PTR+S.CB.SrcPtr+1
sta ZPPtr1+1
ldy #S.BM.W
lda (ZPPtr1),y
sta CB.PTR+S.CB.SrcW
clc
adc CB.PTR+S.CB.X1
pha
iny
lda (ZPPtr1),y
sta CB.PTR+S.CB.SrcW+1
adc CB.PTR+S.CB.X1+1
tax
pla
bne .2
ldy #S.BM.W+3
ldx #3
.1 lda (ZPPtr1),y
sta CB.PTR+S.CB.SrcW,x
dey
dex
.2 dec
sta CB.PTR+S.CB.X2
stx CB.PTR+S.CB.X2+1
iny S.BM.H
lda (ZPPtr1),y
sta CB.PTR+S.CB.SrcH
clc
adc CB.PTR+S.CB.Y1
pha
iny
lda (ZPPtr1),y
sta CB.PTR+S.CB.SrcH+1
adc CB.PTR+S.CB.Y1+1
tax
pla
bne .3
dex
.3 dec
sta CB.PTR+S.CB.Y2
stx CB.PTR+S.CB.Y2+1
bra PTR.Enable
PTR.Set.RTS rts
*--------------------------------------
* Set DestX,DestY
*--------------------------------------
PTR.SetPos >PULLW ZPPtr1
lda PTR.bVisible
bpl .1
jsr PTR.Hide.I
bra PTR.Enable
PTR.Set.RTS rts
*--------------------------------------
PTR.SetRect >STYA ZPPtr1
jsr PTR.Disable
sec
ror PTR.T
ldy #7
.1 lda (ZPPtr1),y
sta PTR.Rect,y
dey
bpl .1
bra PTR.Enable
*--------------------------------------
* SetPos DestX,DestY
*--------------------------------------
PTR.SetPos >PULLW ZPPtr1
jsr PTR.Disable
.1 ldy #S.POINT-1
@ -91,13 +67,13 @@ PTR.SetPos >PULLW ZPPtr1
*--------------------------------------
PTR.Enable bit PTR.bVisible
bmi PTR.Show.I
clc
rts
*--------------------------------------
PTR.Disable bit PTR.bVisible
bmi PTR.Hide.I
PTR.Disable.8 clc
rts
*--------------------------------------
@ -106,7 +82,12 @@ PTR.Hide lda PTR.bVisible
stz PTR.bVisible
*--------------------------------------
PTR.Hide.I lda #S.CB.OP.RESTORE
PTR.Hide.I bit PTR.T
bpl .1
jmp PTR.ShowRect.I
.1 lda #S.CB.OP.RESTORE
bra PTR.Draw.I
*--------------------------------------
PTR.Show lda PTR.bVisible
@ -115,7 +96,11 @@ PTR.Show lda PTR.bVisible
dec PTR.bVisible
*--------------------------------------
PTR.Show.I ldx PTR.T
lda PTR.Pos+S.POINT.X
bpl .10
jmp PTR.ShowRect.I
.10 lda PTR.Pos+S.POINT.X
sec
sbc PTR.HotPoints,x
sta CB.PTR+S.CB.X1
@ -133,23 +118,83 @@ PTR.Show.I ldx PTR.T
sbc #0
sta CB.PTR+S.CB.Y1+1
lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
*--------------------------------------
PTR.Draw.I sta CB.PTR+S.CB.OP
>LDYA L.WND.Screen
jsr CLIP.GetRect
ldx CB.PTR+S.CB.SrcW+1
lda CB.PTR+S.CB.SrcW
bne .1
* >LDYA L.CB.PTR
* jsr CB.GetInCache
* jsr CLIP.CB.Cache
dex
.1 dec
clc
adc CB.PTR+S.CB.X1
sta CB.PTR+S.CB.X2
txa
adc CB.PTR+S.CB.X1+1
sta CB.PTR+S.CB.X2+1
ldx CB.PTR+S.CB.SrcH+1
lda CB.PTR+S.CB.SrcH
bne .2
dex
.2 dec
clc
adc CB.PTR+S.CB.Y1
sta CB.PTR+S.CB.Y2
txa
adc CB.PTR+S.CB.Y1+1
sta CB.PTR+S.CB.Y2+1
lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
*--------------------------------------
PTR.Draw.I sta CB.PTR+S.CB.OP
ldx #S.CB
.1 lda CB.PTR-1,x
sta CLIP.Cache-1,x
dex
bne .1
* ldx #0 select CLIP.Sreen
jsr CLIP.BitBltX
bcs .8
jsr CB.GFXWrite
.8 clc
rts
*--------------------------------------
PTR.ShowRect.I lda #S.CB.CMD.HLINE
sta CLIP.Cache+S.CB.CMD
lda #S.CB.OP.XOR
sta CLIP.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CLIP.Cache+S.CB.M
lda #C.WHITE
sta CLIP.Cache+S.CB.COLOR
>DEBUG
ldx #5 X1,Y1,X2
.1 lda PTR.Rect+S.RECT.X1,x
sta CLIP.Cache+S.CB.X1,x
dex
bpl .1
jsr .7
>LDYA PTR.Rect+S.RECT.Y2
>STYA CLIP.Cache+S.CB.Y1
.7
* ldx #0 select CLIP.Sreen
* jsr CLIP.HLine
* bcs .8
>PUSHB WND.Screen+S.OBJ.hPARENT
>PUSHBI IOCTL.WRITE
>PUSHW L.CB.PTR
>SYSCALL2 IOCTL
jsr CB.GFXWrite
.8 clc

View File

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

View File

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

View File

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

View File

@ -15,8 +15,6 @@ NEW
*--------------------------------------
WND.MAX .EQ 64
MENU.MAX .EQ 4
MENU.LMargin .EQ 7
MENU.RMargin .EQ 8
*--------------------------------------
.MA SWAP16
lda ]1
@ -82,12 +80,12 @@ MENU.RMargin .EQ 8
ZPObjPtr .BS 2
ZPRECTPtr .BS 2
ZPWNDPtr .BS 2
ZPMENUPtr .BS 2
ZPBMPtr .BS 2
ZPCBBufPtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
TmpW .BS 2
DX .BS 2
DY .BS 2
@ -152,8 +150,8 @@ L.MouseClamp .DA MouseClamp
L.MSG .DA MSG
L.MSG.XY .DA MSG+S.MSG.X1
L.CB.PTR .DA CB.PTR
L.CLIP.Rect .DA CLIP.Rect
L.CB.Cache .DA CB.Cache
L.CB.Cache .DA CB.Cache CB.GFXWrite
.DA CLIP.Cache CB.GFXWrite
L.WND.Screen .DA WND.Screen
L.WND.Desktop .DA WND.Desktop
L.WND.SysBar .DA WND.SysBar
@ -178,6 +176,13 @@ L.BM.Up .DA BM.Up
L.BM.Down .DA BM.Down
L.BM.Info .DA BM.Info
*--------------------------------------
L.BUT.Labels .DA BUT.L.OK
.DA BUT.L.CANCEL
.DA BUT.L.RETRY
.DA BUT.L.IGNORE
.DA BUT.L.YES
.DA BUT.L.NO
*--------------------------------------
L.PTR.SaveBuf .DA PTR.SaveBuf
L.Cursors .DA PTR.Arrow
.DA PTR.Move
@ -205,6 +210,30 @@ J.Clip .DA CLIP.Point SETPIXEL
.DA CLIP.Text GETTEXTSIZE
.DA CLIP.Line DRAWLINE
.DA CLIP.BitBlt DRAWTEXT2
*--------------------------------------
J.OBJ.Enter .DA WND.Enter
.DA MBAR.Enter
.DA MENU.Enter
.DA BUT.Enter
.DA TEXT.Enter
.DA BITMAP.Enter
.DA LABEL.Enter
*--------------------------------------
J.OBJ.Leave .DA WND.Leave
.DA MBAR.Leave
.DA MENU.Leave
.DA BUT.Leave
.DA TEXT.Leave
.DA BITMAP.Leave
.DA LABEL.Leave
*--------------------------------------
J.OBJ.fPaintX .DA WND.fPaint
.DA $FFFF MBAR
.DA $FFFF MENU
.DA BUT.fPaint
.DA TEXT.fPaint
.DA BITMAP.fPaint
.DA LABEL.fPaint
.DA 0
*--------------------------------------
LIB.LOAD lda LibCount
@ -219,14 +248,14 @@ LIB.LOAD lda LibCount
jsr FON.Init
bcs .9
jsr WND.Setup
lda hDevMouse
beq .1
jsr MOU.Setup
.1 jsr WND.Setup
lda #PTR.T.ARROW
.1 lda #PTR.T.ARROW
jsr PTR.Set
jsr PTR.Show
@ -273,6 +302,32 @@ SkipStrZPtr1 ldy #$ff
.8 rts
*--------------------------------------
SkipAPtr2 clc
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr2+1
.8 rts
*--------------------------------------
SkipStrZPtr2 ldy #$ff
.1 iny
lda (ZPPtr2),y
bne .1
tya
sec \0
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr1+2
.8 rts
*--------------------------------------
.INB usr/src/lib/libgui.s.bitmap
.INB usr/src/lib/libgui.s.bm
.INB usr/src/lib/libgui.s.but
.INB usr/src/lib/libgui.s.cb
@ -280,13 +335,14 @@ SkipStrZPtr1 ldy #$ff
.INB usr/src/lib/libgui.s.cur
.INB usr/src/lib/libgui.s.draw
.INB usr/src/lib/libgui.s.fon
.INB usr/src/lib/libgui.s.label
.INB usr/src/lib/libgui.s.mbar
.INB usr/src/lib/libgui.s.mbox
.INB usr/src/lib/libgui.s.menu
.INB usr/src/lib/libgui.s.mou
.INB usr/src/lib/libgui.s.msg
.INB usr/src/lib/libgui.s.obj
.INB usr/src/lib/libgui.s.pat
* .INB usr/src/lib/libgui.s.pat
.INB usr/src/lib/libgui.s.ptr
.INB usr/src/lib/libgui.s.sysbar
.INB usr/src/lib/libgui.s.text
@ -312,7 +368,16 @@ OBJ.SizeOf .DA S.WND
.DA 0
.DA 0
.DA S.BUT
* .DA S.TEXT
.DA S.TEXT
.DA S.BITMAP
.DA S.LABEL
*--------------------------------------
BUT.L.OK .AZ "Ok"
BUT.L.CANCEL .AZ "Cancel"
BUT.L.RETRY .AZ "Retry"
BUT.L.IGNORE .AZ "Ignore"
BUT.L.YES .AZ "Yes"
BUT.L.NO .AZ "No"
*--------------------------------------
CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL
.DA #S.CB.Y1+1 GETPIXEL
@ -336,7 +401,6 @@ PAT.Buf .BS 1 S.BM.F
IOCTL .BS S.IOCTL
DCB.GFX .BS S.DCB.GFX
*--------------------------------------
MouseClamp .BS 8
MSG .BS S.MSG
*--------------------------------------
CB.PTR .DA #S.CB.CMD.BITBLT
@ -345,8 +409,10 @@ CB.PTR .DA #S.CB.CMD.BITBLT
.DA #0
.BS S.CB-4
*--------------------------------------
CLIP.Rect .BS S.RECT
CB.Cache .BS S.CB
CB.Cache .BS S.CB CB.GFXWrite:
CLIP.Cache .BS S.CB ,x select Cache
CLIP.Screen .BS S.RECT CLIP.BitBltX:
CLIP.Rect .BS S.RECT ,x select clipping region
*--------------------------------------
MENU.Stack.Owner .BS 1
MENU.Stack.Idx .BS 1
@ -448,11 +514,13 @@ KEYMOD.S.OA .EQ *-KEYMOD.S
KEYMOD.S.CA .EQ *-KEYMOD.S
.DA #02,#'-',#0
*--------------------------------------
MouseClamp .EQ * MOU.Setup
TEXTBUF .BS 16 for composing HotKey strings
*--------------------------------------
PREFS.BestViewedX .DA #$FC
PREFS.MBarXMargin .DA #5
PREFS.XSeparator .DA #6
PREFS.nBestViewedX .DA #$03
PREFS.XMargin .DA #4
PREFS.XSeparator .DA #4
*
PREFS.MenuColor .DA #C.WHITE
PREFS.SysBarColor .DA #C.WHITE

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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)
*--------------------------------------
MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.F
LOAD USR/SRC/PRODOS.203/PRODOS.S
SAVE usr/src/prodos.203/prodos.s.xdos.f
LOAD usr/src/prodos.203/prodos.s
ASM

View File

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

View File

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

View File

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

View File

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

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

View File

@ -11,8 +11,8 @@ int main(int argc, char *argv[])
20,20,200,100);
guiSetProp(hWND, WND_P_pTITLE, "Libgui C API");
guiSetProp(hWND, WND_P_pSTATUS, "Status bar");
guiSetProp(hWND, WND_P_BGCOLOR, pC_WHITE);
guiSetProp(hWND, WND_P_BGCOLOR, C_WHITE);
guiSetProp(hWND, WND_P_pPTR, PTR_T_CROSS);
guiShowWnd(hWND);
do {

View File

@ -92,9 +92,9 @@ CS.RUN >SLEEP
rts
*--------------------------------------
CS.RUN.MsgBox >PUSHW L.ABOUT.T
>PUSHW L.ABOUT.M
>PUSHWI BM.ID.INFO
>PUSHBI BUT.ID.OK
>PUSHWI BM.ID.INFO
>PUSHW L.ABOUT.M
>PUSHBI 63 BUT.ID.OK
>LIBCALL hLIBGUI,LIBGUI.MBOX.MsgBox
rts
*--------------------------------------
@ -118,7 +118,9 @@ CS.END
LIBGUI .AZ "libgui"
hLIBGUI .BS 1
ABOUT.T .AZ "About GUI"
ABOUT.M .AZ "MsgBox message."
ABOUT.M .CS "MsgBox demo with all possible buttons.\r\n"
.CS "...Line 2...\r\n"
.CZ "...Line 3.\r\n"
GUITEST1 .AZ "${ROOT}root/asmtest/testgui"
GUITEST2 .AZ "${ROOT}root/ctest/testgui"
*--------------------------------------

View File

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

View File

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