CC stuff, new LIBTUI, some .h to complete....

This commit is contained in:
burniouf 2022-09-04 22:12:49 +02:00
parent fdd4c69416
commit 037fc870a5
41 changed files with 1657 additions and 1031 deletions

View File

@ -3,11 +3,22 @@
## Copyright
Copyright 2015 - 2020, Remy Gibert and the A2osX contributors.
# D2TrkFmt16s
Write a track (16 sectors)
PUSHB DSSS0000
PUSHB VolNum
PUSHB HeadNum (0,1)
PUSHB TrackNum
## RETURN VALUE
CC : success
CS : A = Error
# D2TrkRead16s
Write a track (16 sectors)
PUSHB = DSSS0000
PUSHB = TrackNum * 4 : 0->136+
PUSHW = Ptr to 16*256 buffer
PUSHB DSSS0000
PUSHB TrackNum
PUSHW Ptr to 16*256 buffer
## RETURN VALUE
CC : success, A = VolNum
@ -15,10 +26,9 @@ Write a track (16 sectors)
# D2TrkWrite16s
Write a track (16 sectors)
PUSHB = DSSS0000
PUSHB = VolNum
PUSHB = HeadNum (0,1)
PUSHB = TrackNum * 4 : 0->136+
PUSHB DSSS0000
PUSHB VolNum
PUSHB TrackNum
PUSHW = Ptr to 16*256 buffer
## RETURN VALUE

46
.Docs/LIBTUI.md Normal file
View File

@ -0,0 +1,46 @@
*** Auto generated by docgen.cmd ***
## Copyright
Copyright 2015 - 2020, Remy Gibert and the A2osX contributors.
# tuiInit
Initialize screen & create a new context
## C
`short int hCTX tuiInit();`
## ASM
`>LIBCALL hLIBTUI,LIBTUI.Init`
## RETURN VALUE
CC = success, A = hCTX
# tuiClose
destroy context and all sub objects
## C
`void fastcall tuiClose(short int hCTX);`
## ASM
`lda hCTX`
`>LIBCALL hLIBTUI,LIBTUI.Close`
## RETURN VALUE
CC = success
## License
A2osX is licensed under the GNU General Public License.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
The full A2osX license can be found **[Here](../LICENSE)**.
*** End of Auto generated file ***

Binary file not shown.

Binary file not shown.

View File

@ -9,7 +9,7 @@ for /f %%a in ('copy /Z "%~f0" nul') do set "CR=%%a"
mode con:cols=80 lines=24
cls
echo Apple //e
echo Apple //e
set /a c=0
@ -25,6 +25,11 @@ set SRCDIR=%~dp0..\LIB
set FILTER=LIBBLKDEV.S*.txt
Call :SCAN
set DOCFILE=%~dp0..\.Docs\LIBTUI.md
set SRCDIR=%~dp0..\LIB
set FILTER=LIBTUI.S*.txt
Call :SCAN
set DOCFILE=%~dp0..\.Docs\LIBGUI.md
set SRCDIR=%~dp0..\LIB
set FILTER=LIBGUI.S*.txt

View File

@ -22,7 +22,7 @@ CODE.Init stz ZPCCConst
sta (pData),y
clc
.9 rts
.99 rts
*--------------------------------------
CODE.Quit >LDA.G CC.hOutFile
beq .8
@ -59,13 +59,7 @@ CODE.PUSHAXI pha
pla
*--------------------------------------
CODE.PUSHI pha
lda #$A9 LDA #imm
jsr CODE.EmitByte
bcs CODE.LDAXI.RTS
pla
jsr CODE.EmitByte
CODE.PUSHI jsr CODE.LDAI
bcs CODE.LDAXI.RTS
bra CODE.PUSHA
@ -153,25 +147,13 @@ CODE.INCPSTACK lda #$E6 INC zp
lda #pStack
bra CODE.EmitByte
*--------------------------------------
CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR .....
txa
jsr CODE.EmitByte
tya
bra CODE.EmitByte
*--------------------------------------
CODE.SYSCALL jsr CODE.LDXI
bcs .9
lda #$20 JSR
jsr CODE.EmitByte
bcs .9
lda #A2osX.SYSCALL
jsr CODE.EmitByte
bcs .9
lda /A2osX.SYSCALL
bra CODE.EmitByte
ldx #A2osX.SYSCALL
ldy /A2osX.SYSCALL
bra CODE.TOABSYX
.9 rts
*--------------------------------------
@ -179,14 +161,40 @@ CODE.FPUCALL jsr CODE.LDXI
bcs .9
lda #$20 JSR
ldx #A2osX.FPUCALL
ldy /A2osX.FPUCALL
bra CODE.TOABSYX
.9 rts
*--------------------------------------
CODE.LIBCALL jsr CODE.LDXI
bcs .9
tya
dec
dec
dec
asl
asl
clc
adc #PCC.PH.JMPLIBs
tax
lda #0
adc /PCC.PH.JMPLIBs
tay
lda #$20 JSR
bra CODE.TOABSYX
.9 rts
*--------------------------------------
CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR .....
bcs .9
txa
jsr CODE.EmitByte
bcs .9
lda #A2osX.FPUCALL
jsr CODE.EmitByte
bcs .9
lda /A2osX.FPUCALL
tya
bra CODE.EmitByte
.9 rts
@ -256,6 +264,41 @@ CODE.EmitDATA clc
.8 rts CC/CS from fputc
*--------------------------------------
CODE.EmitTail jsr CODE.DSSelect
bcs .99
stz ArgIndex
.1 lda ArgIndex
>CMP.G LibCount
beq .8
clc
adc #hLibNs
tay
lda (pData),y
pha
>PUSHB.G CC.hOutFile
pla
>SYSCALL ArgV
>PUSHYA
>SYSCALL fputs
bcs .99
jsr .8
bcs .99
inc ArgIndex
bra .1
.8 >PUSHB.G CC.hOutFile
lda #0
>PUSHA
>SYSCALL fputc
.99 rts
*--------------------------------------
CODE.CSSelect clc
bit bPass2
bpl .8
@ -281,10 +324,10 @@ CODE.DSSelect clc
>PUSHWZ
lda ZPCCConst
clc
adc PCC.FH+PCC.FH.IDATA
adc PCC.FH+PCC.FH.CONST
tay
lda ZPCCConst+1
adc PCC.FH+PCC.FH.IDATA+1
adc PCC.FH+PCC.FH.CONST+1
sec
sbc #$20

View File

@ -1,7 +1,7 @@
NEW
AUTO 3,1
*--------------------------------------
CC.CORE.Init >SYSCALL SListNew
CORE.Init >SYSCALL SListNew
bcs .9
>STA.G CC.hDefines
@ -40,8 +40,8 @@ CC.CORE.Init >SYSCALL SListNew
* clc
.9 rts
*--------------------------------------
CC.CORE.Quit jsr CC.FIO.FClose
bne CC.CORE.Quit
CORE.Quit jsr CC.FIO.FClose
bne CORE.Quit
ldy ScopeIdx
beq .1
@ -74,7 +74,8 @@ CC.CORE.Quit jsr CC.FIO.FClose
>LDA.G CC.hSymBuf
jsr .7
jsr CC.SYM.LookupFreeAll
.5 jsr CC.SYM.LookupFree
bcc .5
>LDA.G CC.hStack
@ -185,73 +186,6 @@ CC.CompileStmt >LDYA L.CC.KW
sec
.9 rts
*--------------------------------------
CC.CORE.SetVar stz ExpState
jsr CC.EXP.POSTOPS var++, var[0]... ?
bcs .99
ldx StmtPreOp
jsr CC.EXP.PREOPS apply ++var, ....
bcs .99
jsr CC.GetCharNB
bcs .90
jsr CC.IsEndArg var++; or ++var; ?
bcc .8
jsr CC.LookupAOP var=, var+= ... ?
bcs .90
cpx #0 TOTO : all AOPS
bne *
lda ExpState
bmi .90 VonStack
asl
bmi .7 AinPTR
asl
bmi .6 AonStack
jsr CC.EXP.GetAddr1
bcc .7
rts
.6 >LDYA L.PCC.PopAddr1
jsr CODE.EmitPCC
bcs .99
.7 ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha
lda (ZPLookupSymPtr)
tay
pla get expected T/Q
jsr CC.EXP.Eval
bcs .99
jsr CC.EXP.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
bcs .99
>LDYA L.PCC.SetValue
jmp CODE.EmitPCC
.8 clc
rts
.90 lda #E.CSYN
sec
.99 rts
**--------------------------------------
CC.Comments jsr CC.GetNextChar TODO : /* ... */
cmp #'/'
bne .90
@ -567,6 +501,36 @@ CC.CheckCharNB cmp #C.SPACE
clc
.9 rts
*--------------------------------------
CC.GetNextCharEsc
jsr CC.GetNextChar
bcs .9
cmp #'\'
bne .8
jsr CC.GetNextChar
bcs .8
ldx #CC.EscChars.Cnt-1
.1 cmp CC.EscChars,x
beq .6
dex
bpl .1
sec
rts
.6 lda CC.EscCodes,x
bit .9
clc
rts
.8 clc
clv
.9 rts
*--------------------------------------
CC.GetNextChar inc ZPLineBufPtr
bne CC.GetChar
@ -608,6 +572,9 @@ CC.IsEndArg cmp #']'
cmp #';'
beq .8
cmp #':'
beq .8
cmp #')'
beq .8

View File

@ -48,7 +48,8 @@ CC.DECL jsr CC.TYPE.Decl
jsr CC.SYM.GetAddr1
bcs .9
jsr CC.SYM.SetValue Y,A = T/Q, Set value to this var
jsr CC.SYM.GetTypeInYA Y,A = T/Q
jsr CC.SYM.PopValue Set value to this var
.29 bcs .9
.28 jsr CC.SYM.Store
@ -69,8 +70,12 @@ CC.SCSPEC.AUTO
CC.SCSPEC.REGISTER
CC.SCSPEC.STATIC
CC.SCSPEC.EXTERN
.98 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.SCSPEC.TYPEDEF
>DEBUG
.98 lda #E.CSYN
sec

View File

@ -1,150 +0,0 @@
NEW
AUTO 3,1
*--------------------------------------
CC.BOPS.bMUL
CC.BOPS.cMUL
inc pStack
clc
rts
*--------------------------------------
CC.BOPS.bDIV
CC.BOPS.cDIV
inc pStack
clc
rts
*--------------------------------------
CC.BOPS.bMOD
CC.BOPS.cMOD
inc pStack
clc
rts
*--------------------------------------
CC.BOPS.ADD clc
>PULLA
adc (pStack)
sta (pStack)
clc
rts
*--------------------------------------
CC.BOPS.SUB sec
ldy #1
lda (pStack),y
sbc (pStack)
sta (pStack),y
inc pStack
clc
rts
*--------------------------------------
CC.BOPS.SHL >PULLA
tax
beq .8
lda (pStack)
.1 asl
dex
bne .1
sta (pStack)
.8 rts
*--------------------------------------
CC.BOPS.SHR >PULLA
tax
beq .8
lda (pStack)
.1 lsr
dex
bne .1
sta (pStack)
.8 rts
*--------------------------------------
CC.BOPS.L >PULLA
cmp (pStack)
bcc .8
lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
rts
*--------------------------------------
CC.BOPS.G >PULLA
cmp (pStack)
beq .1
bcs .8
.1 lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
rts
*--------------------------------------
CC.BOPS.LE >PULLA
cmp (pStack)
bcc .8
beq .8
lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
rts
*--------------------------------------
CC.BOPS.GE >PULLA
cmp (pStack)
bcs .8
lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
rts
*--------------------------------------
CC.BOPS.EQ >PULLA
cmp (pStack)
beq .8
lda #0
sta (pStack)
.8 rts
*--------------------------------------
CC.BOPS.NE >PULLA
eor (pStack)
sta (pStack)
rts
*--------------------------------------
CC.BOPS.LAND
CC.BOPS.AND >PULLA
and (pStack)
sta (pStack)
rts
*--------------------------------------
CC.BOPS.LOR
CC.BOPS.OR >PULLA
ora (pStack)
sta (pStack)
rts
*--------------------------------------
CC.BOPS.EOR >PULLA
eor (pStack)
sta (pStack)
rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.exec
LOAD usr/src/bin/cc.s
ASM

View File

@ -111,19 +111,27 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q
.22 jsr CC.IsDigit10 number ?
bcs .24
ldy ZPPtr2
ldy ZPPtr2 T
bne .23
ldy #SYM.T.SINT
sty ZPPtr2
stz ZPPtr2+1
stz ZPPtr2+1 Q
.23 jsr CC.EXP.GetNum
bcs .29
bra .30
*--------------------------------------
.24 cmp #'"' String literal
.24 cmp #'''
bne .25
jsr CC.EXP.GetChar
bcs .29
bra .30
.25 cmp #'"' String literal
bne CC.EXP.Eval.ESYN
jsr CC.EXP.AddConstCharP
@ -132,7 +140,7 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q
.30 jsr CC.GetCharNB
bcs CC.EXP.Eval.ESYN
.31 jsr CC.IsEndArg , ; ) ?
.31 jsr CC.IsEndArg , ; ) ? :
bcc CC.EXP.Eval.End
jsr CC.IsOPChar
@ -267,55 +275,6 @@ CC.EXP.BOPS bit #SYM.Q.PPPOINTER
clc
rts
*--------------------------------------
CC.EXP.AddConstCharP
lda ZPCCConst
ldx ZPCCConst+1
jsr CODE.LDAXI
bcs .99
>LDYA L.PCC.PushIAddr
jsr CODE.EmitPCC
bcs .99
jsr CODE.DSSelect
bcs .99
ldy #0
.1 jsr CC.GetNextChar
bcs .9
* TODO : add support for \ to next line
cmp #C.CR
beq .9
cmp #'"'
beq .2
jsr CODE.EmitData
bcs .99
iny
bra .1
.2 lda #0
jsr CODE.EmitData
bcs .99
jsr CODE.CSSelect
bcs .99
jsr CC.GetNextChar Skip "
clc
rts
.9 lda #E.ESYN
sec
.99 rts
*--------------------------------------
CC.EXP.IntConst >PUSHW ZPLineBufPtr
>PUSHWI ZPLineBufPtr
>PUSHBI 10
@ -336,14 +295,14 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT
beq .11
lda #E.TMISMATCH
.90 lda #E.TMISMATCH
* sec
rts
.11 >PUSHW ZPLineBufPtr
>PUSHWI ZPLineBufPtr
>SYSCALL StrToF
* bcs .9
* bcs .99
ldy #4
@ -368,7 +327,7 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT
.2 >SYSCALL StrToL
.3 bcs .9
.3 bcs .99
ldy #1 anticipate 2 bytes if *
lda ZPPtr2+1
@ -388,7 +347,89 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT
>POP 4
* clc
.9 rts
.99 rts
*--------------------------------------
* https://riptutorial.com/c/example/16255/character-literals
* 'c', '\n', '\123', '\xAB'
*--------------------------------------
CC.EXP.GetChar ldy ZPPtr2+1
bne .9
lda ZPPtr2
cmp #SYM.T.UCHAR
beq .1
cmp #SYM.T.SCHAR
bne .9
.1 jsr CC.GetNextCharEsc
bcs .9
jsr CODE.PUSHI
bcs .99
jsr CC.GetNextChar
bcs .9
cmp #'''
bne .9
jsr CC.GetNextCharNB skip '
clc
rts
.9 lda #E.ESYN
sec
.99 rts
*--------------------------------------
CC.EXP.AddConstCharP
lda ZPCCConst
ldx ZPCCConst+1
jsr CODE.LDAXI
bcs .99
>LDYA L.PCC.PushIAddr
jsr CODE.EmitPCC
bcs .99
jsr CODE.DSSelect
bcs .99
.1 jsr CC.GetNextCharEsc
bcs .9
bvs .2 ESCaped
* TODO : add support for \ to next line
cmp #C.CR
beq .9
cmp #'"'
beq .3
.2 jsr CODE.EmitData
bcs .99
bra .1
.3 jsr CC.GetNextCharNBNL Skip "
bcs .8
cmp #'"'
beq .1
.8 lda #0
jsr CODE.EmitData
bcs .99
jmp CODE.CSSelect
.9 lda #E.ESYN
sec
.99 rts
*--------------------------------------
* ZPPtr2 = expected T/Q
* ZPPtr3+1 = PREOPS
@ -424,40 +465,8 @@ CC.EXP.GetVar stz ExpState
.7 jsr CC.EXP.PushValue
bcs .99
.8 lda ZPPtr2 target T
beq .3
.8 jmp CC.SYM.LookupCheckTQ
cmp #SYM.T.VOID
beq .2
lda (ZPLookupSymPtr) SYM.T
cmp #SYM.T.VOID
beq .2
cmp ZPPtr2 T
bne .9
.2 lda ZPPtr2+1 Q
ldy #SYM.Q
cmp (ZPLookupSymPtr),y
bne .9
clc
rts
.3 lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T
ldy #SYM.Q
lda (ZPLookupSymPtr),y
sta ZPPtr2+1 Q
clc
rts
.9 lda #E.TMISMATCH
sec
.99 rts
*--------------------------------------
* POSTOPS
@ -559,17 +568,76 @@ CC.EXP.postdec lda ExpState
sec
.99 rts
*--------------------------------------
CC.EXP.array ldy #SYM.Q
CC.EXP.Idx ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY
beq .39
ldy #SYM.Def
bit #SYM.Q.AAARRAY
bne CC.EXP.array
and #SYM.Q.PPPOINTER
cmp #SYM.Q.POINTER
bne .98
lda (ZPLookupSymPtr),y
eor #SYM.Q.POINTER+SYM.Q.ARRAY
sta (ZPLookupSymPtr),y convert from *type to type[]
jsr CC.EXP.GetAddr2
bcs .99
>LDYA L.PCC.PushDeref2
jsr CODE.EmitPCC
bcs .99
jsr CC.EXP.array.getIdx ...int16 on stack...
bcs .99
jsr CC.EXP.GetSymSizeOfInAXC
cmp #1
bne .1
cpx #0
beq .2 sizeof=1, no MUL required
.1 jsr CODE.PUSHAXI ...sizeof on stack...
bcs .99
ldx #FPU.wMUL
jsr CODE.FPUCALL ...sizeof*int16...
bcs .99
.2 ldx #FPU.wAdd
jsr CODE.FPUCALL ...add to base address
bcs .99
jsr CC.GetCharNB
bcs .97
cmp #']'
bne .97
jsr CC.GetNextCharNB skip ']'
lda #ExpState.AonStack
sta ExpState
clc
rts
.97 lda #E.ESYN
sec
rts
.98 lda #E.TMISMATCH
sec
.99 rts
*--------------------------------------
CC.EXP.array ldy #SYM.Def
lda (ZPLookupSymPtr),y
iny
ora (ZPLookupSymPtr),y
beq .1
* jsr CODE.DEBUG
jsr CC.EXP.PushAddr array[int]...
bcc .2
@ -581,7 +649,7 @@ CC.EXP.array ldy #SYM.Q
>LDYA L.PCC.PushDeref2
jsr CODE.EmitPCC
bcs .9
.2 jsr CC.EXP.array.getIdx ...int16 on stack...
bcs .9
@ -589,11 +657,11 @@ CC.EXP.array ldy #SYM.Q
jsr CODE.PUSHAXI ...sizeof on stack...
bcs .9
ldx #FPU.iMUL
ldx #FPU.wMUL
jsr CODE.FPUCALL ...sizeof*int16...
bcs .9
ldx #FPU.iAdd
ldx #FPU.wAdd
jsr CODE.FPUCALL ...add to base address
bcs .9
@ -621,17 +689,17 @@ CC.EXP.array ldy #SYM.Q
lda (ZPLookupSymPtr),y
jsr CODE.PUSHAXI [][SIZE] on stack
ldx #FPU.iMUL
ldx #FPU.wMUL
jsr CODE.FPUCALL [][SIZE] * int16 on stack
jsr CC.EXP.GetSymSizeOfInAXC
jsr CODE.PUSHAXI ...sizeof on stack...
bcs .9
ldx #FPU.iMUL
ldx #FPU.wMUL
jsr CODE.FPUCALL ...sizeof*int16...
ldx #FPU.iAdd
ldx #FPU.wAdd
jsr CODE.FPUCALL ...add to base address
bcs .9
@ -698,10 +766,12 @@ CC.EXP.PREOPS bmi .8
*--------------------------------------
CC.EXP.Ref ldy #SYM.Q
lda (ZPLookupSymPtr),y
clc
adc #SYM.Q.POINTER
bcs .9 more than ***
and #%11001111
sta (ZPLookupSymPtr),y
bit ExpState
@ -906,10 +976,21 @@ CC.EXP.PushValue
jsr CC.EXP.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
bne .1
>LDYA L.PCC.PushValue1
jmp CODE.EmitPCC
.1 cpy #1
bne .2
>LDYA L.PCC.PushValue2
jmp CODE.EmitPCC
.2 jsr CODE.LDYI
bcs .99
>LDYA L.PCC.PushValue
>LDYA L.PCC.PushValueY
jmp CODE.EmitPCC
.99 rts

View File

@ -165,9 +165,6 @@ CC.F.Def.END >LDYA L.PCC.LEAVE
jsr CODE.EmitPCC
bcs .9
jsr CC.Pop T
jsr CC.Pop Q
jsr CC.SYM.FreeScope
stz LocalPtr back to global
@ -208,33 +205,11 @@ CC.F.CallRetV sec
jsr CODE.nAddLocal
.20 jsr CC.GetNextCharNB skip '('
bcs .10
bcs .90
ldy #SYM.Q
* >DEBUG
lda ZPPtr2 expected T
bne .1
lda (ZPLookupSymPtr) no check required
sta ZPPtr2
lda (ZPLookupSymPtr),y
and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL
bra .2
.1 cmp #SYM.T.VOID
beq .11
cmp (ZPLookupSymPtr)
bne .91
.11 lda (ZPLookupSymPtr),y
and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL
cmp ZPPtr2+1 expected Q
bne .91
jsr CC.SYM.LookupCheckTQ
bcs .93
*--------------------------------------
.2 sta ZPPtr2+1
stz ZPPtr1 Reset VARIADIC byte count
lda #SYM.Def
@ -274,12 +249,12 @@ CC.F.CallRetV sec
.5 jsr CC.GetCharNB
.10 bcs .90
bcs .90
cmp #','
bne .6
jsr CC.GetNextCharNB Skip ','
jsr CC.GetNextCharNBNL Skip ','
jsr CC.F.GetTQ
bne .3 Another ARG....
@ -310,9 +285,6 @@ CC.F.CallRetV sec
bra .93
.90 lda #E.CSYN
bra .92
.91 lda #E.TMISMATCH
.92 sec
@ -375,8 +347,8 @@ CC.F.Call2 ldy #SYM.Q
.5
ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
cmp #3
bcs .8 not a SYS/FPU call...Ret value on stack
cmp #3+LIBS.MAX
bcs .8 not a SYS/FPU/LIB call...Ret value on stack
>LDYA ZPPtr2 function T/Q
jsr CC.TYPE.SizeOf
@ -419,7 +391,12 @@ CC.F.Call3 ldy #SYM.Addr+1
jmp CODE.FPUCALL
.2 lda #$EA NOP
.2 cpy #3+LIBS.MAX
bcs .3
jmp CODE.LIBCALL
.3 lda #$EA NOP
jsr CODE.EmitByte
bcs .99

View File

@ -1,6 +1,62 @@
NEW
AUTO 3,1
*--------------------------------------
CC.FIO.LoadLIB.o
>LDA.G LibCount
cmp #LIBS.MAX
bne .1
lda #E.OOH
sec
.9 rts
.1 clc
adc #hLibNs
tay
lda ArgIndex
sta (pData),y
>PUSHW L.ENV.LIB
>PUSHW pData >PUSHEA.G PathBuf
>SYSCALL GetEnv
bcs .9
>PUSHW pData
lda ArgIndex
>SYSCALL ArgV
>PUSHYA
>SYSCALL strcat
>PUSHW pData
>PUSHW L.LIB.O
>SYSCALL strcat
>PUSHW L.MSG.READING
>PUSHW pData
>PUSHBI 2
>SYSCALL PrintF
>PUSHW pData
>PUSHBI O.RDONLY
>PUSHBI S.FI.T.BIN
>PUSHWZ Aux type
>SYSCALL loadfile
bcs .99
>LDA.G LibCount
clc
adc #hLibOs
tay
txa
sta (pData),y
>INC.G LibCount
clc
.99 rts
*--------------------------------------
CC.FIO.FOpen1st >LDA.G CC.InFileArg
>SYSCALL ArgV
@ -100,7 +156,30 @@ CC.FIO.FClose >LDA.G hFilePtr
.8 rts
*--------------------------------------
CC.FIO.FCreate >LDA.G CC.OutFileArg
CC.FIO.FCreate lda ZPCCCode+1
sta PCC.FH+PCC.FH.CONST+1
sec
sbc #$20
sta PCC.FH+PCC.FH.CSSIZE+1
lda ZPCCCode
sta PCC.FH+PCC.FH.CSSIZE
sta PCC.FH+PCC.FH.CONST
clc
adc ZPCCConst
sta PCC.FH+PCC.FH.LIBS
lda ZPCCCode+1
adc ZPCCConst+1
sta PCC.FH+PCC.FH.LIBS+1
lda ZPCCData
sta PCC.FH+PCC.FH.DSSIZE
lda ZPCCData+1
sta PCC.FH+PCC.FH.DSSIZE+1
>LDA.G CC.OutFileArg
>SYSCALL ArgV
>STYA ZPPtr1

View File

@ -3,7 +3,7 @@ NEW
*--------------------------------------
* Built in Keywords
*--------------------------------------
CC.KW.IF jsr CC.KW.BEGIN
CC.KW.IF jsr CC.KW.BEGIN00
bcs .99
jsr CC.GetCharNB
@ -96,7 +96,7 @@ CC.KW.ELSE.END lda #'X' define EXIT Label
clv pop context
.99 rts
*--------------------------------------
CC.KW.WHILE jsr CC.KW.BEGIN
CC.KW.WHILE jsr CC.KW.BEGIN00
bcs .99
lda #'C' define CONT Label
@ -153,7 +153,7 @@ CC.KW.WHILE.END lda #'C'
.99 rts
*--------------------------------------
CC.KW.DO jsr CC.KW.BEGIN
CC.KW.DO jsr CC.KW.BEGIN00
bcs .99
lda #'C' define CONT Label
@ -233,7 +233,7 @@ CC.KW.FOR jsr CC.GetCharNB
cmp #'('
bne .29
jsr CC.KW.BEGIN
jsr CC.KW.BEGIN00
bcs .29
jsr CC.GetNextCharNB skip '('
@ -340,12 +340,123 @@ CC.KW.FOR.END lda #$60
.99 rts
*--------------------------------------
CC.KW.SWITCH
CC.KW.CASE
CC.KW.DEFAULT
lda #E.CSYN
CC.KW.SWITCH jsr CC.GetCharNB
bcs .98
cmp #'('
bne .98
jsr CC.GetNextCharNB
bcs .98
jsr CC.EXP.Eval00 Any var type
bcs .99 Y,A=T/Q
tax
bne .97
cpy #SYM.T.UCHAR
bcc .97
cpy #SYM.T.FLOAT
bcs .97
phy
tya
jsr CC.Push push integral type
ply
bcs .99
lda CC.TYPESIZE-1,y
jsr CC.Push push SizeOf(type)
bcs .99
jsr CC.KW.BEGIN
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .98
jmp CC.KW.STMT
.97 lda #E.TMISMATCH
sec
rts
.98 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.SWITCH.END
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
.99 rts
*--------------------------------------
CC.KW.CASE ldy CStackPtr
beq .9
iny skip ; or }
lda (ZPCCStack),y
cmp #10 SWITCH ??
bne .9
lda CStackPtr
clc
adc #7
tay
lda (ZPCCStack),y type
tay
lda #0 for integral type
jsr CC.EXP.Eval
bcs .99
jsr CC.GetCharNB
bcs .9
cmp #':'
bne .9
jsr CC.GetNextCharNB skip ':'
clc
rts
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.DEFAULT ldy CStackPtr
beq .9
iny skip ; or }
lda (ZPCCStack),y
cmp #10 SWITCH ??
bne .9
jsr CC.GetCharNB
bcs .9
cmp #':'
bne .9
jsr CC.GetNextCharNB skip ':'
clc
rts
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.BREAK lda #'B'
@ -375,8 +486,6 @@ CC.KW.RETURN ldy CStackPtr
beq .9
.1 iny skip ; or }
beq .9
lda (ZPCCStack),y
bmi .7 f()
@ -457,6 +566,19 @@ CC.KW.STRUCT >ENTER 4
.99 >LEAVE
rts
*--------------------------------------
CC.KW.UNION
CC.KW.ENUM
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.BEGIN00 lda #0
jsr CC.Push no T/Q
bcs CC.KW.BEGIN.RTS
jsr CC.Push
bcs CC.KW.BEGIN.RTS
CC.KW.BEGIN jsr CC.SYM.NewCPSID
bcs .99
@ -479,7 +601,8 @@ CC.KW.BEGIN jsr CC.SYM.NewCPSID
>LDA.G CC.CmdSave
jmp CC.Push
.99 rts
.99
CC.KW.BEGIN.RTS rts
*--------------------------------------
CC.KW.STMT jsr CC.GetNextCharNBNL
bcs .9
@ -558,6 +681,9 @@ CC.KW.LookupLabel
lda (ZPCCStack),y
iny
iny
iny
sty ArgIndex
ply

View File

@ -24,7 +24,7 @@ CC.Link >LDYA L.MSG.LINKING
>PUSHWI $ffff All
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .9
bcs .99
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
@ -32,74 +32,124 @@ CC.Link >LDYA L.MSG.LINKING
ora (ZPSymBufPtr),y
bne .6
jsr CC.Link.LIBC
bcc .6
jsr CC.Link.Dump
lda #E.FUNDEF
sec
bra .9
jsr CC.Link.Lookup
bcs .9
jsr CC.Link.Update
bcs .99
.6 >LDA.G bTrace
bpl .7
jsr CC.Link.Dump
bcs .9
bcs .99
.7 >LDYA ZPPtr2
jmp .1
.8 clc
rts
.9 rts
.9 jsr CC.Link.Dump
lda #E.FUNDEF
sec
.99 rts
*--------------------------------------
* Input : pData = Symbol
*--------------------------------------
CC.Link.LIBC >LDYA L.CC.LIBC
CC.Link.Lookup >LDYA L.CC.SYSCALL
jsr CC.Link.LookupYA
ldx #1
bcc .99
>LDYA L.CC.FPUCALL
jsr CC.Link.LookupYA
ldx #2
bcc .99
>LDA.G LibCount
* sec
beq .99
lda #0
sta ArgIndex
clc
.1 adc #hLibOs
tay
lda (pData),y
>SYSCALL GetMemPtr
jsr CC.Link.LookupYA
bcs .2
ldx ArgIndex
inx
inx
inx
rts
.2 inc ArgIndex
lda ArgIndex
>CMP.G LibCount
bcc .1
.99 rts
*--------------------------------------
CC.Link.LookupYA
>STYA ZPLookupPtr
ldy #$ff
.10 iny
.1 iny
lda (pData),y
bne .10
bne .1
phy Symbol Len
tya
tax Symbol Len
ldx #0
.1 lda (ZPLookupPtr)
.2 lda (ZPLookupPtr)
beq .9 Ending 0, not found....
pla
pha Get Back Len
txa Get Back Len
cmp (ZPLookupPtr) Same Len ?
bne .4
tay
.2 lda (ZPLookupPtr),y
.3 lda (ZPLookupPtr),y
dey
cmp (pData),y
bne .4
tya
bne .2
bne .3
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol
tay
iny
lda (ZPLookupPtr),y get fID
clc
rts
ldy #2 Skip LEN
lda (ZPLookupPtr),y
pha
dey
lda (ZPLookupPtr),y
ply
.4 lda (ZPLookupPtr)
inc
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol\ID
bra .2
jsr CC.SYM.SetAddrYA
plx
.9 sec
rts
*--------------------------------------
* A=ID X=SYS|FPU|LIB
*--------------------------------------
CC.Link.Update ldy #SYM.Addr
sta (ZPSymBufPtr),y
iny
txa
sta (ZPSymBufPtr),y
>PUSHB.G CC.hScopes
>PUSHW ZPPtr1 SymID
@ -110,20 +160,6 @@ CC.Link.LIBC >LDYA L.CC.LIBC
>PUSHA
>SYSCALL SListSetData
rts
.4 inx
inx
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\definition
bra .1
.9 plx
sec
rts
*--------------------------------------
CC.Link.Dump >PUSHW L.MSG.LINKING2

View File

@ -7,16 +7,16 @@ ZS.RT.Ptr1 .EQ ZPBIN
ZS.RT.Ptr2 .EQ ZPBIN+2
*--------------------------------------
PCC.FH .PH $2000
PCC.FH.2000 cld
PCC.FH.ORG cld
jmp (PCC.FH.JMP,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
PCC.FH.CSSIZE .EQ *-PCC.FH.2000
.DA $FFFF * Code Size (without Constants)
PCC.FH.DSSIZE .EQ *-PCC.FH.2000
.DA $FFFF * Data Size
PCC.FH.CSSIZE .EQ *-PCC.FH.ORG
.DA $FFFF Code Size (without Constants)
PCC.FH.DSSIZE .EQ *-PCC.FH.ORG
.DA $FFFF Data Size
.DA #256 Stack Size
.DA #4 ZP Size
.DA 0
@ -25,15 +25,83 @@ PCC.FH.JMP .DA PCC.FH.INIT
.DA PCC.FH.RUN
.DA PCC.FH.DOEVENT
.DA PCC.FH.QUIT
PCC.FH.IDATA .EQ *-PCC.FH.2000
PCC.FH.CONST .EQ *-PCC.FH.ORG
.DA $FFFF
PCC.FH.LIBS .EQ *-PCC.FH.ORG
.DA $FFFF
.DA 0
PCC.FH.INIT
* TODO : LoadLib code
PCC.FH.QUIT
* TODO : UnloadLib code
PCC.FH.DOEVENT clc
PCC.FH.INIT >LDYA PCC.FH.ORG+PCC.FH.LIBS
>STYA ZS.RT.Ptr1
ldx #0
.1 lda (ZS.RT.Ptr1)
beq .8
phx
>LDYA ZS.RT.Ptr1
>SYSCALL LoadLib
plx
bcs .9
sta PCC.PH.hLIBs,x
phx
>SYSCALL GetMemPtr
plx
>STYA PCC.PH.JMPLIBs+1,x
inx
inx
inx
inx
ldy #0
.2 iny
lda (ZS.RT.Ptr1),y
bne .2
tya
sec
adc ZS.RT.Ptr1
sta ZS.RT.Ptr1
bcc .1
inc ZS.RT.Ptr1+1
bra .1
.8 clc
.9 rts
PCC.FH.QUIT ldx #12
.1 lda PCC.PH.hLIBs,x
beq .2
phx
>SYSCALL UnloadLib
plx
.2 dex
dex
dex
dex
bpl .1
clc
rts
PCC.PH.hLIBs .DA #0
PCC.PH.JMPLIBs jmp $FFFF
.DA #0
jmp $FFFF
.DA #0
jmp $FFFF
.DA #0
jmp $FFFF
PCC.FH.DOEVENT sec do not discard TIMER event
rts
* int main(int argc, char *argv[]) ;
@ -66,17 +134,20 @@ PCC.FH.RUN lda #0
jsr PCC.FH.CS Execute INIT code
>PUSHWZ returned int=0
lda #0
>PUSHA returned int=0
>PUSHA
>PUSHA int ARGC (hi byte)
ldy #S.PS.ARGC
lda (pPS),y
>PUSHA int ARGC
>PUSHA int ARGC (lo byte)
>PUSHW pData *char[] ARGV
* >DEBUG
PCC.FH.MAIN .EQ *-PCC.FH.2000+1
jsr $FFFF * jsr main
PCC.FH.MAIN .EQ *-PCC.FH.ORG+1
jsr $FFFF jsr main
>PULLA
inc pStack pull returned int
sec
@ -213,12 +284,12 @@ PCC.PushLAddrL.L .EQ *-PCC.PushLAddrL
*--------------------------------------
PCC.PushIAddr .DA #PCC.PushIAddr.L
clc
adc PCC.FH.2000+PCC.FH.IDATA
adc PCC.FH.ORG+PCC.FH.CONST
dec pStack
>PUSHA
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
adc PCC.FH.ORG+PCC.FH.CONST+1
ldy #1
sta (pStack),y
@ -248,10 +319,10 @@ PCC.GetLAddr1.L .EQ *-PCC.GetLAddr1
*--------------------------------------
PCC.GetIAddr1 .DA #PCC.GetIAddr1.L
clc
adc PCC.FH.2000+PCC.FH.IDATA
adc PCC.FH.ORG+PCC.FH.CONST
sta ZS.RT.Ptr1
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
adc PCC.FH.ORG+PCC.FH.CONST+1
sta ZS.RT.Ptr1+1
PCC.GetIAddr1.L .EQ *-PCC.GetIAddr1
@ -274,13 +345,32 @@ PCC.PopAddr1 .DA #PCC.PopAddr1.L
PCC.PopAddr1.L .EQ *-PCC.PopAddr1
*--------------------------------------
PCC.SetValue .DA #PCC.SetValue.L
.1 lda (pStack),y
PCC.PopValue1 .DA #PCC.PopValue1.L
>PULLA
sta (ZS.RT.Ptr1)
PCC.PopValue1.L .EQ *-PCC.PopValue1
*--------------------------------------
PCC.PopValue2 .DA #PCC.PopValue2.L
>PULLA
sta (ZS.RT.Ptr1)
>PULLA
ldy #1
sta (ZS.RT.Ptr1),y
dey
PCC.PopValue2.L .EQ *-PCC.PopValue2
*--------------------------------------
PCC.PopValueX .DA #PCC.PopValueX.L
ldy #0
.1 >PULLA
sta (ZS.RT.Ptr1),y
iny
dex
bpl .1
PCC.SetValue.L .EQ *-PCC.SetValue
PCC.PopValueX.L .EQ *-PCC.PopValueX
*--------------------------------------
PCC.GetLAddr2 .DA #PCC.GetLAddr2.L
clc
@ -293,10 +383,10 @@ PCC.GetLAddr2.L .EQ *-PCC.GetLAddr2
*--------------------------------------
PCC.GetIAddr2 .DA #PCC.GetIAddr2.L
clc
adc PCC.FH.2000+PCC.FH.IDATA
adc PCC.FH.ORG+PCC.FH.CONST
sta ZS.RT.Ptr2
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
adc PCC.FH.ORG+PCC.FH.CONST+1
sta ZS.RT.Ptr2+1
PCC.GetIAddr2.L .EQ *-PCC.GetIAddr2
@ -337,14 +427,31 @@ PCC.PushDeref2 .DA #PCC.PushDeref2.L
PCC.PushDeref2.L .EQ *-PCC.PushDeref2
*--------------------------------------
PCC.PushValue .DA #PCC.PushValue.L
PCC.PushValue1 .DA #PCC.PushValue1.L
lda (ZS.RT.Ptr2)
>PUSHA
PCC.PushValue1.L .EQ *-PCC.PushValue1
*--------------------------------------
PCC.PushValue2 .DA #PCC.PushValue2.L
ldy #1
lda (ZS.RT.Ptr2),y
>PUSHA
lda (ZS.RT.Ptr2)
>PUSHA
PCC.PushValue2.L .EQ *-PCC.PushValue2
*--------------------------------------
PCC.PushValueY .DA #PCC.PushValueY.L
.1 lda (ZS.RT.Ptr2),y
>PUSHA
dey
bpl .1
PCC.PushValue.L .EQ *-PCC.PushValue
PCC.PushValueY.L .EQ *-PCC.PushValueY
*--------------------------------------
PCC.Inc1 .DA #PCC.Inc1.L
lda (ZS.RT.Ptr2)
@ -433,7 +540,33 @@ PCC.Dec4 .DA #PCC.Dec4.L
PCC.Dec4.L .EQ *-PCC.Dec4
*--------------------------------------
PCC.BOPS.bMUL
PCC.BOPS.bMUL .DA #PCC.BOPS.bMUL.L
ldx #0 result
>PULLA
tay b2
.1 tya
beq .8
lsr
tay
bcc .2
clc
txa
adc (pStack) b1
tax
.2 lda (pStack) b1*2
asl
sta (pStack)
bne .1
.8 txa
sta (pStack)
PCC.BOPS.bMUL.L .EQ *-PCC.BOPS.bMUL
*--------------------------------------
PCC.BOPS.cMUL
*--------------------------------------

View File

@ -28,7 +28,7 @@ CC.STMT jsr CC.GetCharNB
jmp CC.SYM.LookupFree
.60 jsr CC.CORE.SetVar
.60 jsr STMT.SetVar
bcs .99
jmp CC.SYM.LookupFree
@ -36,6 +36,68 @@ CC.STMT jsr CC.GetCharNB
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
STMT.SetVar stz ExpState
jsr CC.EXP.POSTOPS var++, var[0]... ?
bcs .99
ldx StmtPreOp
jsr CC.EXP.PREOPS apply ++var, ....
bcs .99
jsr CC.GetCharNB
bcs .90
jsr CC.IsEndArg var++; or ++var; ?
bcc .8
jsr CC.LookupAOP var=, var+= ... ?
bcs .90
cpx #0 TOTO : all AOPS
bne *
lda ExpState
bmi .90 VonStack
asl
bmi .7 AinPTR
asl
bmi .6 AonStack
jsr CC.EXP.GetAddr1
bcc .7
rts
.6 >LDYA L.PCC.PopAddr1
jsr CODE.EmitPCC
bcs .99
.7 ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha
lda (ZPLookupSymPtr)
tay
pla get expected T/Q
jsr CC.EXP.Eval
bcs .99
jmp CC.SYM.PopValue
.8 clc
rts
.90 lda #E.CSYN
sec
.99 rts
*--------------------------------------
*--------------------------------------
* X = KW.ID
*--------------------------------------
@ -73,7 +135,7 @@ CC.STMT.Stmt.END
beq .8
cmp #';' must be ';' on stack....
bra CC.STMT.CPStmt.POP
bra CC.STMT.POP
.8 clc
@ -85,8 +147,8 @@ CC.STMT.CPStmt.END
bcs CC.STMT.Stmt.RTS
cmp #'}' must be '}' on stack....
CC.STMT.CPStmt.POP
bne .98
CC.STMT.POP bne .98
iny
lda (ZPCCStack),y
@ -98,7 +160,7 @@ CC.STMT.CPStmt.POP
lda CStackPtr
* clc
adc #5
adc #7
sta CStackPtr
jsr CC.Pop Locals

View File

@ -613,53 +613,72 @@ CC.SYM.LookupFree
.99 rts
*--------------------------------------
CC.SYM.LookupFreeAll
* ZPPtr2 = expected T/Q
* ZPLookupSymPtr
*--------------------------------------
CC.SYM.LookupCheckTQ
lda ZPPtr2 target T
bne .1
.1 jsr CC.SYM.LookupFree
bcc .1
lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T
ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #$F8 ignore VOLATILE|FUNC|FASTCALL
sta ZPPtr2+1 Q
clc
rts
.1 cmp #SYM.T.VOID
beq .2
lda (ZPLookupSymPtr) SYM.T
cmp #SYM.T.VOID
beq .2
cmp ZPPtr2 T
bne .9
.2 lda ZPPtr2+1 Q
ldy #SYM.Q
eor (ZPLookupSymPtr),y
and #$F8 ignore VOLATILE|FUNC|FASTCALL
bne .9
clc
rts
.9 lda #E.TMISMATCH
sec
.99 rts
*--------------------------------------
* on RT stack : Addr,value
*--------------------------------------
CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
CC.SYM.PopValue jsr CC.SYM.GetYASizeOfInAXC
tax
dex
bne .1
>LDYA L.PCC.PopValue1
jmp CODE.EmitPCC
.1 cpx #1
bne .2
>LDYA L.PCC.PopValue2
jmp CODE.EmitPCC
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.SetValue
>LDYA L.PCC.PopValueX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
* in : Y,A = T/Q
* out : CC
* CS, A = E.TMISMATCH
*--------------------------------------
CC.SYM.CheckTypeYA.OLD
pha
tya
cmp (ZPSymBufPtr)
bne .9
pla
ldy #SYM.Q
eor (ZPSymBufPtr),y
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
bne .9
clc
rts
.9 pla
lda #E.TMISMATCH
sec
rts
*--------------------------------------
* out : Y,A = T/Q
*--------------------------------------
CC.SYM.GetTypeInYA
@ -671,16 +690,6 @@ CC.SYM.GetTypeInYA
pla
rts
*--------------------------------------
* in : Y,A = T/Q
*--------------------------------------
CC.SYM.SetTypeYA.OLD
phy
ldy #SYM.Q
sta (ZPSymBufPtr),y
pla
sta (ZPSymBufPtr)
rts
*--------------------------------------
* out : A,X,C = size
*--------------------------------------
CC.SYM.GetSymSizeOfInAXC

View File

@ -11,6 +11,7 @@ NEW
.INB inc/mli.e.i
*--------------------------------------
FILES.MAX .EQ 4
LIBS.MAX .EQ 4
SCOPE.MAX .EQ 16
LOOKUP.MAX .EQ 16
*--------------------------------------
@ -23,6 +24,9 @@ SYM.T.SINT .EQ 5
SYM.T.ULONG .EQ 6
SYM.T.SLONG .EQ 7
SYM.T.FLOAT .EQ 8
SYM.T.STRUCT .EQ 9
SYM.T.UNION .EQ 10
SYM.T.ENUM .EQ 11
SYM.T.VARIADIC .EQ $FF
SYM.Q .EQ 1
SYM.Q.POINTER .EQ %01000000
@ -50,6 +54,12 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ....
*
SYM .EQ 10
*--------------------------------------
STRUCTF.T .EQ 0
STRUCTF.Q .EQ 1
STRUCTF.BitOfs .EQ 2
STRUCTF.BitWidth .EQ 3
STRUCTF.Name .EQ 4
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
@ -120,6 +130,8 @@ L.MSG.ERROR .DA MSG.ERROR
L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.NOMAIN .DA MSG.NOMAIN
L.ENV.INCLUDE .DA ENV.INCLUDE
L.ENV.LIB .DA ENV.LIB
L.LIB.O .DA LIB.O
*--------------------------------------
L.CC.AOPS .DA CC.AOPS
L.CC.PREOPS .DA CC.PREOPS
@ -134,7 +146,7 @@ J.CC.PREOPS .DA CC.EXP.Ref
L.CC.POSTOPS .DA CC.POSTOPS
J.CC.POSTOPS .DA CC.EXP.postinc
.DA CC.EXP.postdec
.DA CC.EXP.array
.DA CC.EXP.idx
.DA CC.EXP.Struct
.DA CC.EXP.pStruct
L.CC.BOPS .DA CC.BOPS
@ -164,12 +176,15 @@ J.CC.KW .DA CC.KW.IF
*--------------------------------------
.DA CC.KW.SIZEOF
.DA CC.KW.STRUCT
.DA CC.KW.UNION
.DA CC.KW.ENUM
*--------------------------------------
J.CC.KW.END .DA CC.KW.IF.END
.DA CC.KW.WHILE.END
.DA CC.KW.ELSE.END
.DA CC.KW.DO.END
.DA CC.KW.FOR.END
.DA CC.KW.SWITCH.END
*--------------------------------------
J.CC.SCSPEC .DA CC.SCSPEC.AUTO
.DA CC.SCSPEC.REGISTER
@ -194,7 +209,8 @@ J.CC.STYPES .DA CC.TYPE.SCHAR
.DA CC.TYPE.SLONG
*--------------------------------------
L.CC.MAIN .DA CC.MAIN
L.CC.LIBC .DA CC.LIBC
L.CC.SYSCALL .DA CC.SYSCALL
L.CC.FPUCALL .DA CC.FPUCALL
L.PCC.FH .DA PCC.FH
*--------------------------------------
L.PCC.DEBUG .DA PCC.DEBUG
@ -217,14 +233,18 @@ L.PCC.GetLAddr1 .DA PCC.GetLAddr1
L.PCC.GetIAddr1 .DA PCC.GetIAddr1
L.PCC.GetUAddr1 .DA PCC.GetUAddr1
L.PCC.PopAddr1 .DA PCC.PopAddr1
L.PCC.SetValue .DA PCC.SetValue
L.PCC.PopValue1 .DA PCC.PopValue1
L.PCC.PopValue2 .DA PCC.PopValue2
L.PCC.PopValueX .DA PCC.PopValueX
L.PCC.GetLAddr2 .DA PCC.GetLAddr2
L.PCC.GetIAddr2 .DA PCC.GetIAddr2
L.PCC.GetUAddr2 .DA PCC.GetUAddr2
L.PCC.PopAddr2 .DA PCC.PopAddr2
L.PCC.Deref2 .DA PCC.Deref2
L.PCC.PushDeref2 .DA PCC.PushDeref2
L.PCC.PushValue .DA PCC.PushValue
L.PCC.PushValue1 .DA PCC.PushValue1
L.PCC.PushValue2 .DA PCC.PushValue2
L.PCC.PushValueY .DA PCC.PushValueY
L.PCC.Inc1 .DA PCC.Inc1
L.PCC.Inc2 .DA PCC.Inc2
L.PCC.Inc4 .DA PCC.Inc4
@ -304,10 +324,11 @@ CS.RUN >PUSHW L.MSG.GREETINGS
jsr CS.RUN.ARGS
bcs CS.INIT.RTS
jsr CC.CORE.Init
jsr CORE.Init
bcs CS.INIT.RTS
jsr CODE.Init
bcs CS.INIT.RTS
jsr CC.FIO.FOpen1st
bcs CS.INIT.RTS
@ -344,6 +365,9 @@ CS.RUN.CLOOP jsr CC.CompileFile
cmp #MLI.E.EOF
bne .9
jsr CODE.EmitTail
bcs .9
jsr CC.FIO.FClose
bne .2
@ -371,6 +395,7 @@ CS.RUN.ARGS inc ArgIndex
ldy #1
lda (ZPPtr1),y
beq .90
ldx #OptionVars-OptionList-1
@ -382,7 +407,21 @@ CS.RUN.ARGS inc ArgIndex
bra .90
.2 ldy OptionVars,x
.2 cpx #4
bcc .3
inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .90
jsr CC.FIO.LoadLIB.o
bcc CS.RUN.ARGS
rts
.3 ldy OptionVars,x
lda #$ff
sta (pData),y
bra CS.RUN.ARGS
@ -422,9 +461,22 @@ CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr CODE.Quit
jsr CC.CORE.Quit
jsr CORE.Quit
.1 >LDA.G LibCount
beq .6
dec
sta (pData),y
>LDA.G hLineBuf
clc
adc #hLibOs
tay
lda (pData),y
>SYSCALL FreeMem
bra .1
.6 >LDA.G hLineBuf
beq .8
>SYSCALL FreeMem
@ -540,29 +592,14 @@ PrintErrorMsg >LDA.G CC.hDefineBuf
>SYSCALL FPrintF
rts
*--------------------------------------
PrintSummary lda ZPCCCode+1
sta PCC.FH+PCC.FH.IDATA+1
PrintSummary >PUSHW L.MSG.SUMMARY
lda ZPCCCode+1
sec
sbc #$20
sta PCC.FH+PCC.FH.CSSIZE+1
lda ZPCCCode
sta PCC.FH+PCC.FH.CSSIZE
sta PCC.FH+PCC.FH.IDATA
>PUSHW L.MSG.SUMMARY
>PUSHW PCC.FH+PCC.FH.CSSIZE
>PUSHA
>PUSHB ZPCCCode
>PUSHW ZPCCConst
lda ZPCCData+1
>PUSHA
sta PCC.FH+PCC.FH.DSSIZE+1
lda ZPCCData
>PUSHA
sta PCC.FH+PCC.FH.DSSIZE
>PUSHW ZPCCData
>PUSHBI 6
>SYSCALL PrintF
* >DEBUG
@ -588,8 +625,8 @@ CS.END
MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n"
MSG.USAGE .AS "Usage : CC <option> srcfile.c dstfile\r\n"
.AS " -D : Debug Mode\r\n"
.AS " -T : Trace On"
.AZ "\r\n"
.AS " -T : Trace On\r\n"
.AZ " -L Libname1 -O Libname2 ...\r\n"
MSG.READING .AZ "*** Reading file: %s\r\n"
MSG.LINKING .AZ "*** Linking..."
MSG.LINKING2 .AZ "*** %H:%18s T/Q=%h/%h, SC=%h, Def=%h, SizeOf=%H, @=%H\r\n"
@ -599,14 +636,21 @@ MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
MSG.TRACE .AZ "%5D> %s\r\n"
MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
MSG.ERROR .AZ " %s^\r\n"
MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n"
MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, Const size=%5D, uData size=%5D\r\n"
MSG.NOMAIN .AZ "*** No 'main()' function defined."
*--------------------------------------
OptionList .AS "DdTt"
OptionList .AS "DdTtLl"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
ENV.INCLUDE .AZ "INCLUDE"
ENV.LIB .AZ "LIB"
LIB.O .AZ ".o"
*--------------------------------------
CC.EscChars .AS "abefnrtv"
.HS 5C27223F
CC.EscChars.Cnt .EQ *-CC.EscChars
CC.EscCodes .HS 07081B0C0A0D090B
.HS 5C27223F
*--------------------------------------
CC.OPChars .AS "!~+-*/%=&|^<>["
CC.OPChars.Cnt .EQ *-CC.OPChars
@ -695,6 +739,8 @@ CC.KW >PSTR "if"
>PSTR "return"
>PSTR "sizeof"
>PSTR "struct"
>PSTR "union"
>PSTR "enum"
.HS 00
CC.KW2.IF >PSTR "else"
.HS 00
@ -732,282 +778,283 @@ 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.LIBC >PSTR "chtyp"
.DA #2,#1,#SYS.ChTyp
CC.SYSCALL >PSTR "chtyp"
.DA #SYS.ChTyp
>PSTR "chmod"
.DA #2,#1,#SYS.ChMod
.DA #SYS.ChMod
>PSTR "fstat"
.DA #2,#1,#SYS.FStat
.DA #SYS.FStat
>PSTR "stat"
.DA #2,#1,#SYS.Stat
.DA #SYS.Stat
>PSTR "mkdir"
.DA #2,#1,#SYS.MKDir
.DA #SYS.MKDir
>PSTR "mknod"
.DA #2,#1,#SYS.MKNod
.DA #SYS.MKNod
>PSTR "mkfifo"
.DA #2,#1,#SYS.MKFIFO
.DA #SYS.MKFIFO
>PSTR "pipe"
.DA #2,#1,#SYS.Pipe
.DA #SYS.Pipe
>PSTR "opendir"
.DA #2,#1,#SYS.OpenDir
.DA #SYS.OpenDir
>PSTR "readdir"
.DA #2,#1,#SYS.ReadDir
.DA #SYS.ReadDir
>PSTR "closedir"
.DA #2,#1,#SYS.CloseDir
.DA #SYS.CloseDir
>PSTR "open"
.DA #2,#1,#SYS.Open
.DA #SYS.Open
>PSTR "close"
.DA #2,#1,#SYS.Close
.DA #SYS.Close
>PSTR "read"
.DA #2,#1,#SYS.Read
.DA #SYS.Read
>PSTR "write"
.DA #2,#1,#SYS.Write
.DA #SYS.Write
>PSTR "chown"
.DA #2,#1,#SYS.ChOwn
.DA #SYS.ChOwn
>PSTR "fputc"
.DA #2,#1,#SYS.FPutC
.DA #SYS.FPutC
>PSTR "putchar"
.DA #2,#1,#SYS.PutChar
.DA #SYS.PutChar
>PSTR "getc"
.DA #2,#1,#SYS.GetC
.DA #SYS.GetC
>PSTR "getchar"
.DA #2,#1,#SYS.GetChar
.DA #SYS.GetChar
>PSTR "fputs"
.DA #2,#1,#SYS.FPutS
.DA #SYS.FPutS
>PSTR "puts"
.DA #2,#1,#SYS.PutS
.DA #SYS.PutS
>PSTR "fgets"
.DA #2,#1,#SYS.FGetS
.DA #SYS.FGetS
>PSTR "ungetc"
.DA #2,#1,#SYS.UngetC
.DA #SYS.UngetC
>PSTR "fopen"
.DA #2,#1,#SYS.FOpen
.DA #SYS.FOpen
>PSTR "fclose"
.DA #2,#1,#SYS.FClose
.DA #SYS.FClose
>PSTR "fread"
.DA #2,#1,#SYS.FRead
.DA #SYS.FRead
>PSTR "fwrite"
.DA #2,#1,#SYS.FWrite
.DA #SYS.FWrite
>PSTR "fflush"
.DA #2,#1,#SYS.FFlush
.DA #SYS.FFlush
>PSTR "fseek"
.DA #2,#1,#SYS.FSeek
.DA #SYS.FSeek
>PSTR "ftell"
.DA #2,#1,#SYS.FTell
.DA #SYS.FTell
>PSTR "feof"
.DA #2,#1,#SYS.FEOF
.DA #SYS.FEOF
>PSTR "remove"
.DA #2,#1,#SYS.Remove
.DA #SYS.Remove
>PSTR "rename"
.DA #2,#1,#SYS.Rename
.DA #SYS.Rename
>PSTR "printf"
.DA #2,#1,#SYS.PrintF
.DA #SYS.PrintF
>PSTR "fprintf"
.DA #2,#1,#SYS.FPrintF
.DA #SYS.FPrintF
>PSTR "sprintf"
.DA #2,#1,#SYS.SPrintF
.DA #SYS.SPrintF
>PSTR "scanf"
.DA #2,#1,#SYS.ScanF
.DA #SYS.ScanF
>PSTR "fscanf"
.DA #2,#1,#SYS.FScanF
.DA #SYS.FScanF
>PSTR "sscanf"
.DA #2,#1,#SYS.SScanF
.DA #SYS.SScanF
* >PSTR "$50"
* .DA #2,#1,#0
* .DA #0
* >PSTR "$52"
* .DA #2,#1,#0
* .DA #0
* >PSTR "$54"
* .DA #2,#1,#0
* .DA #0
* >PSTR "$56"
* .DA #2,#1,#0
* .DA #0
* >PSTR "$58"
* .DA #2,#1,#0
* .DA #0
* >PSTR "$5A"
* .DA #2,#1,#0
* .DA #0
* >PSTR "$5C"
* .DA #2,#1,#0
* .DA #0
>PSTR "setattr"
.DA #2,#1,#SYS.SetAttr
.DA #SYS.SetAttr
* >PSTR "mount"
* .DA #2,#1,#0
* .DA #0
* >PSTR "umount"
* .DA #2,#1,#0
* .DA #0
* >PSTR "online"
* .DA #2,#1,#0
* .DA #0
* >PSTR "getstkobj"
* .DA #2,#1,#0
* .DA #0
* >PSTR "shift"
* .DA #2,#1,#0
* .DA #0
* >PSTR "argv"
* .DA #2,#1,#0
* .DA #0
* >PSTR "argvDup"
* .DA #2,#1,#0
* .DA #0
* >PSTR "geterrmsg"
* .DA #2,#1,#0
* .DA #0
>PSTR "atof"
.DA #2,#1,#SYS.AToF
.DA #SYS.AToF
>PSTR "atoi"
.DA #2,#1,#SYS.AToI
.DA #SYS.AToI
>PSTR "atol"
.DA #2,#1,#SYS.AToL
.DA #SYS.AToL
>PSTR "strtof"
.DA #2,#1,#SYS.StrToF
.DA #SYS.StrToF
>PSTR "strtol"
.DA #2,#1,#SYS.StrToL
.DA #SYS.StrToL
>PSTR "strtoul"
.DA #2,#1,#SYS.StrToUL
.DA #SYS.StrToUL
>PSTR "realpath"
.DA #2,#1,#SYS.RealPath
.DA #SYS.RealPath
>PSTR "expand"
.DA #2,#1,#SYS.Expand
.DA #SYS.Expand
>PSTR "strlen"
.DA #2,#1,#SYS.StrLen
.DA #SYS.StrLen
>PSTR "strcpy"
.DA #2,#1,#SYS.StrCpy
.DA #SYS.StrCpy
>PSTR "strcat"
.DA #2,#1,#SYS.StrCat
.DA #SYS.StrCat
>PSTR "strdup"
.DA #2,#1,#SYS.StrDup
.DA #SYS.StrDup
>PSTR "strupr"
.DA #2,#1,#SYS.StrUpr
.DA #SYS.StrUpr
>PSTR "strlwr"
.DA #2,#1,#SYS.StrLwr
.DA #SYS.StrLwr
>PSTR "strcmp"
.DA #2,#1,#SYS.StrCmp
.DA #SYS.StrCmp
>PSTR "strcasecmp"
.DA #2,#1,#SYS.StrCaseCmp
.DA #SYS.StrCaseCmp
* >PSTR "getdevbyname"
* .DA #2,#1,#0
* .DA #0
* >PSTR "getdevstatus"
* .DA #2,#1,#0
* .DA #0
* >PSTR "mkdev"
* .DA #2,#1,#0
* .DA #0
* >PSTR "ioctl"
* .DA #2,#1,#0
* .DA #0
* >PSTR "loadlib"
* .DA #2,#1,#0
* .DA #0
* >PSTR "unloadlib"
* .DA #2,#1,#0
* .DA #0
* >PSTR "loaddrv"
* .DA #2,#1,#0
* .DA #0
* >PSTR "insdrv"
* .DA #2,#1,#0
* .DA #0
>PSTR "execl"
.DA #2,#1,#SYS.ExecL
.DA #SYS.ExecL
* >PSTR "execv"
* .DA #2,#1,#0
* .DA #0
>PSTR "fork"
.DA #2,#1,#SYS.Fork
.DA #SYS.Fork
>PSTR "kill"
.DA #2,#1,#SYS.Kill
.DA #SYS.Kill
* >PSTR "loadfile"
* .DA #2,#1,#0
* .DA #0
* >PSTR "loadtxtfile"
* .DA #2,#1,#0
* .DA #0
* >PSTR "filesearch"
* .DA #2,#1,#0
* .DA #0
* >PSTR "getmemstat"
* .DA #2,#1,#0
* .DA #0
* >PSTR "strvnew"
* .DA #2,#1,#0
* .DA #0
* >PSTR "strvset"
* .DA #2,#1,#0
* .DA #0
* >PSTR "strvget"
* .DA #2,#1,#0
* .DA #0
* >PSTR "strvfree"
* .DA #2,#1,#0
* .DA #0
>PSTR "putenv"
.DA #2,#1,#SYS.PutEnv
.DA #SYS.PutEnv
>PSTR "setenv"
.DA #2,#1,#SYS.SetEnv
.DA #SYS.SetEnv
>PSTR "getenv"
.DA #2,#1,#SYS.GetEnv
.DA #SYS.GetEnv
>PSTR "unsetenv"
.DA #2,#1,#SYS.UnsetEnv
.DA #SYS.UnsetEnv
>PSTR "time"
.DA #2,#1,#SYS.Time
.DA #SYS.Time
>PSTR "strftime"
.DA #2,#1,#SYS.StrFTime
.DA #SYS.StrFTime
* >PSTR "ptime2time"
* .DA #2,#1,#0
* .DA #0
>PSTR "ctime2time"
.DA #2,#1,#SYS.CTime2Time
.DA #SYS.CTime2Time
>PSTR "md5"
.DA #2,#1,#SYS.MD5
.DA #SYS.MD5
>PSTR "md5init"
.DA #2,#1,#SYS.MD5Init
.DA #SYS.MD5Init
>PSTR "md5update"
.DA #2,#1,#SYS.MD5Update
.DA #SYS.MD5Update
>PSTR "md5finalize"
.DA #2,#1,#SYS.MD5Finalize
.DA #SYS.MD5Finalize
>PSTR "getpwuid"
.DA #2,#1,#SYS.GetPWUID
.DA #SYS.GetPWUID
>PSTR "getpwname"
.DA #2,#1,#SYS.GetPWName
.DA #SYS.GetPWName
>PSTR "putpw"
.DA #2,#1,#SYS.PutPW
.DA #SYS.PutPW
>PSTR "getgrpgid"
.DA #2,#1,#SYS.GetGRGID
.DA #SYS.GetGRGID
>PSTR "getgrpname"
.DA #2,#1,#SYS.GetGRName
.DA #SYS.GetGRName
>PSTR "putgr"
.DA #2,#1,#SYS.PutGR
.DA #SYS.PutGR
* >PSTR "opensession"
* .DA #2,#1,#0
* .DA #0
* >PSTR "closesession"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistgetdata"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistadddata"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistsetdata"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistgetbyid"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistnewkey"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistlookup"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistfree"
* .DA #2,#1,#0
* .DA #0
* >PSTR "slistnew"
* .DA #2,#1,#0
* .DA #0
>PSTR "malloc"
.DA #2,#1,#SYS.GetMem
.DA #SYS.GetMem
>PSTR "realloc"
.DA #2,#1,#SYS.Realloc
.DA #SYS.Realloc
* >PSTR "getmemptr"
* .DA #2,#1,#0
* .DA #0
>PSTR "free"
.DA #2,#1,#SYS.FreeMem
.DA #SYS.FreeMem
* >PSTR "newstkobj"
* .DA #2,#1,#0
* .DA #0
* >PSTR "loadstkobj"
* .DA #2,#1,#0
* .DA #0
* >PSTR "getstkobjptr"
* .DA #2,#1,#0
* .DA #0
* >PSTR "freestkobj"
* .DA #2,#1,#0
* .DA #0
.DA #0
*--------------------------------------
>PSTR "pwr"
.DA #2,#2,#FPU.PWR
CC.FPUCALL >PSTR "pwr"
.DA #FPU.PWR
>PSTR "log"
.DA #2,#2,#FPU.LOG
.DA #FPU.LOG
>PSTR "sqr"
.DA #2,#2,#FPU.SQR
.DA #FPU.SQR
>PSTR "exp"
.DA #2,#2,#FPU.EXP
.DA #FPU.EXP
>PSTR "cos"
.DA #2,#2,#FPU.COS
.DA #FPU.COS
>PSTR "sin"
.DA #2,#2,#FPU.SIN
.DA #FPU.SIN
>PSTR "tan"
.DA #2,#2,#FPU.TAN
.DA #FPU.TAN
>PSTR "atan"
.DA #2,#2,#FPU.ATAN
.DA #FPU.ATAN
>PSTR "lrintf"
.DA #2,#2,#FPU.QINT
.HS 00
.DA #FPU.QINT
.DA #0
*--------------------------------------
.INB usr/src/bin/cc.s.pcc
*--------------------------------------
@ -1019,6 +1066,10 @@ PathBuf .BS MLI.MAXPATH+1
bDebug .BS 1
bTrace .BS 1
LibCount .BS 1
hLibNs .BS LIBS.MAX
hLibOs .BS LIBS.MAX
CC.InFileArg .BS 1
CC.OutFileArg .BS 1
CC.hOutFile .BS 1

View File

@ -133,8 +133,7 @@ CS.RUN.RTS rts
*--------------------------------------
CS.SCRN.Init >PUSHB hCTX hParent
>PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus
lda #S.OBJ.T.SCRN
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewScrn
bcs .9
sta hSCRN
@ -169,10 +168,11 @@ CS.TBOX1.Init >LDYAI 1024
>PUSHBI 44 W
>PUSHBI 20 H
>PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus
>PUSHB.G TBOX1.hBuf
>LDA.G TBOX1.hBuf
>SYSCALL GetMemPtr
>PUSHYA
>PUSHWI 1024
lda #S.OBJ.T.TBOX
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewTBox
bcs .9
sta hTBOX1
@ -197,16 +197,14 @@ CS.LBOX1.Init >PUSHB hSCRN hParent
>PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder
>PUSHW L.LBOX1.List
>PUSHEA.G LBOX1.Var
lda #S.OBJ.T.LBOX
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewLBox
rts
*--------------------------------------
CS.TLINE.Init >PUSHB hSCRN hParent
>PUSHBI 50 X1
>PUSHBI 11 Y1
>PUSHW L.LABEL.Label
lda #S.OBJ.T.LABEL
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewLabel
bcs .9
>PUSHB hSCRN hParent
@ -214,9 +212,8 @@ CS.TLINE.Init >PUSHB hSCRN hParent
>PUSHBI 12 Y1
>PUSHBI 25 W
>PUSHEA.G TLINE.Buf
>PUSHBI 65 Len
lda #S.OBJ.T.TLINE
>LIBCALL hLIBTUI,LIBTUI.New
>PUSHWI 65 Len
>LIBCALL hLIBTUI,LIBTUI.NewTLine
.9 rts
*--------------------------------------
@ -227,8 +224,7 @@ CS.RADIO.Init >PUSHB hSCRN hParent
>PUSHBI 0
>PUSHW L.RADIO1.List
>PUSHEA.G RADIO1.Var
lda #S.OBJ.T.RADIO
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewRadio
rts
*--------------------------------------
CS.CBOX.Init >PUSHB hSCRN hParent
@ -238,8 +234,7 @@ CS.CBOX.Init >PUSHB hSCRN hParent
>PUSHBI 0
>PUSHW L.CBOX1.Label
>PUSHEA.G CBOX1.Var
lda #S.OBJ.T.CBOX
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewCBox
rts
*--------------------------------------
CS.BUT.Init >PUSHB hSCRN hParent
@ -248,18 +243,16 @@ CS.BUT.Init >PUSHB hSCRN hParent
>PUSHBI 19 Ctrl-S
>PUSHBI EV.SAVE
>PUSHW L.BUTS.Label
lda #S.OBJ.T.BUT
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewBut
bcs .9
>PUSHB hSCRN hParent
>PUSHBI 65 X1
>PUSHBI 20 Y1
>PUSHBI 17 Ctrl-Q
>PUSHBI EV.QUIT
>PUSHW L.BUTQ.Label
lda #S.OBJ.T.BUT
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewBut
.9
CS.BUT.Init.RTS rts
*--------------------------------------
@ -267,8 +260,7 @@ CS.RUN.DLGSAVE >PUSHB hCTX hParent
>PUSHBI 70 W
>PUSHBI 11 H
>PUSHW L.DLGS.Title
lda #S.OBJ.T.DLG
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewDlg
bcs CS.BUT.Init.RTS
sta hDLGS
@ -279,8 +271,7 @@ CS.RUN.DLGSAVE >PUSHB hCTX hParent
>PUSHBI C.CR
>PUSHBI EV.OK
>PUSHW L.BUT.OK
lda #S.OBJ.T.BUT
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewBut
bcs .9
sta ZPPtr1
@ -291,8 +282,7 @@ CS.RUN.DLGSAVE >PUSHB hCTX hParent
>PUSHBI 3 Ctrl-C
>PUSHBI EV.CANCEL
>PUSHW L.BUT.Cancel
lda #S.OBJ.T.BUT
>LIBCALL hLIBTUI,LIBTUI.New
>LIBCALL hLIBTUI,LIBTUI.NewBut
bcs .9
lda hDLGS
@ -370,30 +360,45 @@ SCRN.Status .AZ "Status bar..."
TBOX1.Title .AZ "Text Box Title"
TBOX1.Status .AZ "Text Box Status"
*--------------------------------------
LBOX1.List .AZ "Item 1"
.AZ "Item 2"
.AZ "Item 3"
.AZ "Item 4"
.AZ "Item 5"
.AZ "Item 6 very long line"
.AZ "Item 7"
.AZ "Item 8"
.AZ "Item 9"
.AZ "Item 10"
.AZ "Item 11"
.AZ "Item 12"
.AZ "Item 13"
.AZ "Item 14 last one"
LBOX1.List .AS "Item 1"
.DA #C.CR
.AS "Item 2"
.DA #C.CR
.AS "Item 3"
.DA #C.CR
.AS "Item 4"
.DA #C.CR
.AS "Item 5"
.DA #C.CR
.AS "Item 6 very long line"
.DA #C.CR
.AS "Item 7"
.DA #C.CR
.AS "Item 8"
.DA #C.CR
.AS "Item 9"
.DA #C.CR
.AS "Item 10"
.DA #C.CR
.AS "Item 11"
.DA #C.CR
.AS "Item 12"
.DA #C.CR
.AS "Item 13"
.DA #C.CR
.AS "Item 14 last one"
.DA #0
*--------------------------------------
LABEL.Label .AZ "This is a label."
*--------------------------------------
RADIO1.List .DA #C.ESC
.AZ "[91mRed"
.AS "[91mRed"
.DA #C.CR
.DA #C.ESC
.AZ "[92mGreen"
.AS "[92mGreen"
.DA #C.CR
.DA #C.ESC
.AZ "[96mBlue"
.AS "[96mBlue"
.DA #0
*--------------------------------------
CBOX1.Label .AZ "Check Me"

View File

@ -1,10 +1,10 @@
NEW
AUTO 3,1
*--------------------------------------
IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 75 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 52 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 32 ProDOS.FX initial
IO.D2.SeekTimeR .EQ 55 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 55 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 55 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 25 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*--------------------------------------
IO.D2.Ph0Off .EQ $C080

View File

@ -3,15 +3,23 @@ NEW
*--------------------------------------
LIBTUI.Init .EQ 4
LIBTUI.Close .EQ 6
LIBTUI.New .EQ 8
LIBTUI.Exec .EQ 10
LIBTUI.Destroy .EQ 12
LIBTUI.Run .EQ 14
LIBTUI.Draw .EQ 16
LIBTUI.GetProp .EQ 18
LIBTUI.SetProp .EQ 20
LIBTUI.Activate .EQ 22
LIBTUI.Deactivate .EQ 24
LIBTUI.NewScrn .EQ 8
LIBTUI.NewDlg .EQ 10
LIBTUI.NewLabel .EQ 12
LIBTUI.NewTLine .EQ 14
LIBTUI.NewTBox .EQ 16
LIBTUI.NewLBox .EQ 18
LIBTUI.NewCBox .EQ 20
LIBTUI.NewBut .EQ 22
LIBTUI.NewRadio .EQ 24
LIBTUI.Exec .EQ 26
LIBTUI.Destroy .EQ 28
LIBTUI.Run .EQ 30
LIBTUI.Draw .EQ 32
LIBTUI.GetProp .EQ 34
LIBTUI.SetProp .EQ 36
LIBTUI.Activate .EQ 38
LIBTUI.Deactivate .EQ 40
*--------------------------------------
S.CTX.hSCRN .EQ 0
S.CTX.hClipBrd .EQ 1
@ -47,6 +55,7 @@ S.OBJ.F.bCursor .EQ %00000001
S.OBJ.S .EQ 2
S.OBJ.S.bActive .EQ %10000000
S.OBJ.S.bDisabled .EQ %01000000
S.OBJ.S.bHasChilds .EQ %00100000
S.OBJ.S.bCurOn .EQ %00000001
S.OBJ.hParent .EQ 3
S.OBJ.X1 .EQ 4
@ -63,9 +72,11 @@ S.OBJ.InnerH .EQ 13
S.OBJ.CurX .EQ 14
S.OBJ.CurY .EQ 15
*--------------------------------------
S.OBJ.pTITLE .EQ 16
S.OBJ.pMENU .EQ 18
S.OBJ.pSTATUS .EQ 20
S.OBJ.pTitle .EQ 16
S.OBJ.pMenu .EQ 18
S.OBJ.pStatus .EQ 20
S.OBJ.pBuf .EQ 22
S.OBJ.BufSize .EQ 24
*
*--------------------------------------
S.OBJ.Childs .EQ 32
@ -80,33 +91,27 @@ S.LABEL.pLabel .EQ S.OBJ+0
*
S.LABEL .EQ S.OBJ+2
*--------------------------------------
S.TLINE.pBuf .EQ S.OBJ+0
S.TLINE.Ptr .EQ S.OBJ+2
S.TLINE.Len .EQ S.OBJ+3
S.TLINE.MaxLen .EQ S.OBJ+4
S.TLINE.HScroll .EQ S.OBJ+5
S.TLINE.Ptr .EQ S.OBJ
S.TLINE.Len .EQ S.OBJ+1
S.TLINE.HScroll .EQ S.OBJ+2
*
S.TLINE .EQ S.OBJ+6
S.TLINE .EQ S.OBJ+3
*--------------------------------------
S.TBOX.hBuf .EQ S.OBJ+0
S.TBOX.DocX .EQ S.OBJ
S.TBOX.DocY .EQ S.OBJ+2
S.TBOX.HScroll .EQ S.OBJ+4
S.TBOX.VScroll .EQ S.OBJ+6
S.TBOX.BufPtr .EQ S.OBJ+8
S.TBOX.BufCnt .EQ S.OBJ+10
S.TBOX.SelBegin .EQ S.OBJ+12
S.TBOX.SelEnd .EQ S.OBJ+14
S.TBOX.bSelect .EQ S.OBJ+16
*
S.TBOX.BufSize .EQ S.OBJ+2
S.TBOX.DocX .EQ S.OBJ+4
S.TBOX.DocY .EQ S.OBJ+6
S.TBOX.HScroll .EQ S.OBJ+8
S.TBOX.VScroll .EQ S.OBJ+10
S.TBOX.BufPtr .EQ S.OBJ+12
S.TBOX.BufCnt .EQ S.OBJ+14
S.TBOX.SelBegin .EQ S.OBJ+16
S.TBOX.SelEnd .EQ S.OBJ+18
S.TBOX.bSelect .EQ S.OBJ+20
*
S.TBOX .EQ S.OBJ+21
S.TBOX .EQ S.OBJ+17
*--------------------------------------
S.LBOX.Idx .EQ S.OBJ+0
S.LBOX.VScroll .EQ S.OBJ+1
S.LBOX.pList .EQ S.OBJ+2
S.LBOX.pVar .EQ S.OBJ+4
S.LBOX.pVar .EQ S.OBJ+2
*
S.LBOX .EQ S.OBJ+6
*--------------------------------------
@ -125,11 +130,10 @@ S.BUT .EQ S.OBJ+4
*--------------------------------------
S.RADIO.HotKey .EQ S.OBJ+0
S.RADIO.EV .EQ S.OBJ+1
S.RADIO.pList .EQ S.OBJ+2
S.RADIO.pVar .EQ S.OBJ+4
S.RADIO.Idx .EQ S.OBJ+6
S.RADIO.pVar .EQ S.OBJ+2
S.RADIO.Idx .EQ S.OBJ+4
*
S.RADIO .EQ S.OBJ+8
S.RADIO .EQ S.OBJ+6
*--------------------------------------
EV.RESIZE .EQ $80
EV.QUIT .EQ $81

31
INCLUDE/SYS/stat.h.txt Normal file
View File

@ -0,0 +1,31 @@
NEW
AUTO 3,1
struct stat {
mode_t st_mode
dev_t st_dev
uid_t st_uid
gid_t st_gid
ino_t st_ino
nlink_t st_nlink
off_t st_size
//dev_t st_rdev
time_t st_atime
time_t st_mtime
time_t st_ctime
blkcnt_t st_blocks
blksize_t st_blksize
short int st_P_type
int st_P_auxtype
short int st_P_slot
short int st_P_drive
short int st_P_devstatus
short int st_P_devcnflct
short int se_P_fsid
short int st_P_access
short int st_P_SPARE
};
MAN
TEXT include/sys/stat.h

7
INCLUDE/SYS/types.h.txt Normal file
View File

@ -0,0 +1,7 @@
NEW
AUTO 3,1
typedef short int dev_t;
MAN
TEXT include/sys/types.h

View File

@ -1,12 +1,55 @@
NEW
AUTO 3,1
short int tuiInit();
int fastcall tuiClose(short int);
#define T_SCRN 0
#define T_DLG 2
#define T_LABEL 4
#define T_TLINE 6
#define T_TBOX 8
#define T_LBOX 10
#define T_CBOX 12
#define T_BUT 14
#define T_RADIO 16
short int tuiNew(short int,...);
short int tuiRun(short int);
short int tuiClose(short int);
#define F_bTitle 128
#define F_bMenu 64
#define F_bStatus 32
#define F_bHBorder 16
#define F_bVBorder 8
#define F_bHScroll 4
#define F_bVScroll 2
#define F_bCursor 1
#define P_pTitle 16
#define P_pMenu 18
#define P_pStatus 20
#define P_pBuf 22
#define P_wBufSize 24
#define EV_RESIZE 128
#define EV_QUIT 129
short int tuiInit();
void fastcall tuiClose(short int);
short int tuiNewScrn(short int,short int);
short int tuiNewDlg(short int,short int,short int, char*);
short int tuiNewLabel(short int,short int,short int, char*);
short int tuiNewTLine(short int,short int,short int,short int, char*, int);
short int tuiNewTBox(short int,short int,short int,short int,short int,short int,char*,int);
short int tuiNewLBox(short int,short int,short int,short int,short int,short int,char*,void*);
short int tuiNewCBox(short int,short int,short int,short int,short int,char*,void*);
short int tuiNewBut(short int,short int,short int,short int,short int,char*);
short int tuiNewRadio(short int,short int,short int,short int,short int,char*,void*);
short int fastcall tuiExec(short int);
void fastcall tuiDestroy(short int);
short int fastcall tuiRun(short int);
void fastcall tuiDraw(short int);
void* tuiGetProp(short int,short int);
void tuiSetProp(short int,short int,void*);
void fastcall tuiActivate(short int);
void fastcall tuiDeactivate(short int);
MAN
TEXT include/libtui.h
TEXT include/libtui.h

23
INCLUDE/time.h.txt Normal file
View File

@ -0,0 +1,23 @@
NEW
AUTO 3,1
typedef unsigned long time_t;
struct tm {
short int tm_cent;
short int tm_year;
short int tm_mon;
short int tm_mday;
short int tm_hour;
short int tm_min;
short int tm_sec;
short int tm_wday;
// short int tm_yday;
// short int tm_isdst;
};
time_t time(time_t *);
MAN
TEXT include/time.h

View File

@ -97,16 +97,12 @@ D2.MoveHead >PULLB D2.TargetQTrack
>PULLB D2.CurrentQTrack
>PULLB D2.DrvSlt
jsr D2.CheckDiskII
bcs .9
bcs .99
php
sei
jsr D2.MoveHead.SEI
plp
clc
.9 rts
D2.MoveHead.SEI lda D2.CurrentQTrack
lda D2.CurrentQTrack
bit #1 A = Current QT
beq .2 we are on 0/4 or 2/4 track
@ -179,8 +175,10 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
lda IO.D2.Ph0Off,x
.10 jsr D2.Wait25600usec
rts
plp
clc
.99 rts
*--------------------------------------
D2.SeekPhOnY and #6
ora D2.Slotn0

54
LIB/LIBTUI.O.S .txt Normal file
View File

@ -0,0 +1,54 @@
NEW
AUTO 3,1
.LIST OFF
.OR $0
.TF lib/libtui.o
*--------------------------------------
.INB inc/macros.i
.INB inc/libtui.i
*--------------------------------------
>PSTR "tuiInit"
.DA #LIBTUI.Init
>PSTR "tuiClose"
.DA #LIBTUI.Close
>PSTR "tuiNewScrn"
.DA #LIBTUI.NewScrn
>PSTR "tuiNewDlg"
.DA #LIBTUI.NewDlg
>PSTR "tuiNewLabel"
.DA #LIBTUI.NewLabel
>PSTR "tuiNewTLine"
.DA #LIBTUI.NewTLine
>PSTR "tuiNewTBox"
.DA #LIBTUI.NewTBox
>PSTR "tuiNewLBox"
.DA #LIBTUI.NewLBox
>PSTR "tuiNewCBox"
.DA #LIBTUI.NewCBox
>PSTR "tuiNewBut"
.DA #LIBTUI.NewBut
>PSTR "tuiNewRadio"
.DA #LIBTUI.NewRadio
>PSTR "tuiExec"
.DA #LIBTUI.Exec
>PSTR "tuiDestroy"
.DA #LIBTUI.Destroy
>PSTR "tuiRun"
.DA #LIBTUI.Run
>PSTR "tuiDraw"
.DA #LIBTUI.Draw
>PSTR "tuiGetProp"
.DA #LIBTUI.GetProp
>PSTR "tuiSetProp"
.DA #LIBTUI.SetProp
>PSTR "tuiActivate"
.DA #LIBTUI.Activate
>PSTR "tuiDeactivate"
.DA #LIBTUI.Deactivate
.DA #0
*--------------------------------------
MAN
SAVE usr/src/lib/libtui.o.s
ASM

View File

@ -4,7 +4,8 @@ NEW
*--------------------------------------
* BUT.New hParent,X1,Y1,HK,EV,pLabel 7
*--------------------------------------
BUT.New jsr OBJ.Create a = Class
BUT.New lda #S.OBJ.T.BUT
jsr OBJ.Create
bcs .9
ldy #S.BUT.pLabel
@ -38,7 +39,12 @@ BUT.New jsr OBJ.Create a = Class
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
jsr OBJ.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 7

View File

@ -4,7 +4,8 @@ NEW
*--------------------------------------
* CBOX.New hParent,X1,Y1,HK,EV,pLabel,pVar 9
*--------------------------------------
CBOX.New jsr OBJ.Create a = Class
CBOX.New lda #S.OBJ.T.CBOX
jsr OBJ.Create
bcs .9
ldy #S.CBOX.pVar
@ -44,11 +45,16 @@ CBOX.New jsr OBJ.Create a = Class
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
jsr OBJ.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 9
rts
.99 rts
*--------------------------------------
CBOX.Destroy clc
rts

View File

@ -1,7 +1,16 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
*/--------------------------------------
* # tuiInit
* Initialize screen & create a new context
* ## C
* `short int hCTX tuiInit();`
* ## ASM
* `>LIBCALL hLIBTUI,LIBTUI.Init`
* ## RETURN VALUE
* CC = success, A = hCTX
*\--------------------------------------
CTX.Init >LDYA L.SEQ.INIT
jsr CTX.fputs
bcs .99
@ -66,7 +75,17 @@ CTX.Init >LDYA L.SEQ.INIT
sec
rts
*--------------------------------------
*/--------------------------------------
* # tuiClose
* destroy context
* ## C
* `void fastcall tuiClose(short int hCTX);`
* ## ASM
* `lda hCTX`
* `>LIBCALL hLIBTUI,LIBTUI.Close`
* ## RETURN VALUE
* CC = success
*\--------------------------------------
CTX.Close >SYSCALL2 FreeMem
>LDYA L.SEQ.CLOSE

View File

@ -4,7 +4,8 @@ NEW
*--------------------------------------
* DLG.New hParent,W,H,pTitle 5
*--------------------------------------
DLG.New jsr OBJ.Create A = Class
DLG.New lda #S.OBJ.T.DLG
jsr OBJ.Create
bcs .9
ldy #S.OBJ.pTitle
@ -41,7 +42,11 @@ DLG.New jsr OBJ.Create A = Class
ldy #S.OBJ.Y1
sta (ZPObjPtr),y
jmp OBJ.SetX2Y2
jsr OBJ.SetX2Y2
lda hObj
* clc
rts
.9 >POP 5
rts

View File

@ -4,7 +4,8 @@ NEW
*--------------------------------------
* LABEL.New hParent,X1,Y1,pLabel 5
*--------------------------------------
LABEL.New jsr OBJ.Create A = Class
LABEL.New lda #S.OBJ.T.LABEL
jsr OBJ.Create
bcs .9
ldy #S.OBJ.S
@ -20,10 +21,15 @@ LABEL.New jsr OBJ.Create A = Class
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
jsr OBJ.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 5
rts
.99 rts
*--------------------------------------
LABEL.Draw ldy #S.LABEL.pLabel
lda (ZPObjPtr),y

View File

@ -55,17 +55,17 @@ LB.SetColor >PUSHW ZPLineBufPtr
>PUSHBI 2
jmp LB.PrintF
*--------------------------------------
LB.YAOut ldx #0
*--------------------------------------
LB.YAOutX >STYA ZPPtr1 X = MaxLen
LB.Ptr1OutEscMaxX
ldy #0
ldy #$ff
.1 lda (ZPPtr1),y
beq .8
.1 iny
lda (ZPPtr1),y
cmp #C.CR
beq .8
jsr LB.COut
iny
dex
bne .1

View File

@ -4,13 +4,14 @@ NEW
*--------------------------------------
* LBOX.New hParent,X1,Y1,W,H,F,pList,pVar 10
*--------------------------------------
LBOX.New jsr OBJ.Create A = Class
LBOX.New lda #S.OBJ.T.LBOX
jsr OBJ.Create
bcs .9
ldy #S.LBOX.pVar
jsr OBJ.PullWordY
ldy #S.LBOX.pList
ldy #S.OBJ.pBuf
jsr OBJ.PullWordY
>PULLA
@ -21,11 +22,16 @@ LBOX.New jsr OBJ.Create A = Class
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
jsr OBJ.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 10
rts
.99 rts
*--------------------------------------
LBOX.Destroy
clc
@ -44,7 +50,7 @@ LBOX.Run ldy #S.OBJ.S
inc
tax
ldy #S.LBOX.pList
ldy #S.OBJ.pBuf
jsr OBJ.GetLineXAtY
bcs .8
@ -108,7 +114,7 @@ LBOX.Draw ldy #S.LBOX.VScroll
adc (pStack) Relative Y
tax
ldy #S.LBOX.pList
ldy #S.OBJ.pBuf
jsr OBJ.GetLineXAtY
bcs .5
@ -128,24 +134,13 @@ LBOX.Draw ldy #S.LBOX.VScroll
lda (ZPObjPtr),y
tax
ldy #0
.2 lda (ZPPtr1),y
beq .3
jsr LB.COut
iny
dex
bne .2
.3 txa
jsr LB.Ptr1OutEscMaxX
txa
beq .8
bra .6
bne .6
.5 ldy #S.OBJ.InnerW
lda (ZPObjPtr),y
tax
.6 lda #C.SPACE

View File

@ -2,9 +2,6 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
OBJ.New tax
jmp (J.ObjNew,x)
*--------------------------------------
OBJ.Create pha Type
tax
@ -31,7 +28,6 @@ OBJ.Create pha Type
dey
bne .1
lda hObj
* clc
rts
@ -39,6 +35,11 @@ OBJ.Create pha Type
.9 plx
rts
*--------------------------------------
OBJ.PullBuf ldy #S.OBJ.BufSize
jsr OBJ.PullWordY
ldy #S.OBJ.pBuf
*--------------------------------------
OBJ.PullWordY >PULLA
sta (ZPObjPtr),y
tax
@ -90,9 +91,13 @@ OBJ.Insert >SYSCALL2 GetMemPtr A = hParent
rts
.2 lda hObj
sta (ZPPtr2),y
ldy #S.OBJ.S
lda (ZPPtr2),y
ora #S.OBJ.S.bHasChilds
sta (ZPPtr2),y
ldy #S.OBJ.InnerX
lda (ZPPtr2),y
@ -181,9 +186,7 @@ OBJ.SetX2Y2 ldy #S.OBJ.X1
dec
sta (ZPObjPtr),y
.8 lda hOBJ
clc
.8 clc
rts
*--------------------------------------
.7 lda (ZPObjPtr),y S.OBJ.X1/Y1
@ -220,8 +223,6 @@ OBJ.SetX2Y2 ldy #S.OBJ.X1
OBJ.Exec >PUSHA hOBJ
jsr LIB.GetOBJ
ldy #S.OBJ.hParent
lda (ZPObjPtr),y
jsr LIB.GetCTX
.1 jsr CTX.GetC
@ -359,13 +360,19 @@ OBJ.Run ldx ZPObjPtr
OBJ.Draw >PUSHA hObj
jsr OBJ.Draw.Top
bcs .9
bcs .99
jsr OBJ.Draw.Body
bcs .9
bcs .99
jsr OBJ.Draw.Bottom
bcs .9
bcs .99
ldy #S.OBJ.S
lda (ZPObjPtr),y
and #S.OBJ.S.bHasChilds
* clc
beq .99
lda #S.OBJ.Childs
>PUSHA
@ -380,7 +387,7 @@ OBJ.Draw >PUSHA hObj
beq .7
jsr OBJ.Draw
bcs .99
bcs .98
.7 lda (pStack)
inc
@ -390,9 +397,9 @@ OBJ.Draw >PUSHA hObj
clc
.99 inc pStack
.98 inc pStack
.9 inc pStack
.99 inc pStack
OBJ.Draw.RTS rts
*--------------------------------------
@ -436,7 +443,7 @@ OBJ.Draw.Top lda (pStack)
lda (ZPObjPtr),y
tax
ldy #S.OBJ.pTITLE
ldy #S.OBJ.pTitle
lda (ZPObjPtr),y
sta ZPPtr1
iny
@ -698,6 +705,7 @@ OBJ.GetProp ldy #1 hObj
*--------------------------------------
OBJ.SetProp ldy #3 hObj
lda (pStack),y
jsr LIB.GetOBJ
ldy #2
@ -892,6 +900,14 @@ OBJ.DecWordAtY clc
sta (ZPObjPtr),y
rts
*--------------------------------------
OBJ.GetBuf ldy #S.OBJ.pBuf
lda (ZPObjPtr),y
sta ZPPtr1
iny
lda (ZPObjPtr),y
sta ZPPtr1+1
rts
*--------------------------------------
OBJ.GetLineXAtY lda (ZPObjPtr),y
sta ZPPtr1
iny
@ -912,10 +928,15 @@ OBJ.GetLineXAtY lda (ZPObjPtr),y
.4 iny
lda (ZPPtr1),y
clc
beq .5
cmp #C.CR
bne .4
tya
sec
* sec
.5 tya
adc ZPPtr1
sta ZPPtr1
bcc .1

View File

@ -4,13 +4,14 @@ NEW
*--------------------------------------
* RADIO.New hParent,X1,Y1,HK,EV,pList,pVar 9
*--------------------------------------
RADIO.New jsr OBJ.Create A = Class
RADIO.New lda #S.OBJ.T.RADIO
jsr OBJ.Create
bcs .9
ldy #S.RADIO.pVar
jsr OBJ.PullWordY
ldy #S.RADIO.pList
ldy #S.OBJ.pBuf
jsr OBJ.PullWordY
stx ZPPtr1
sta ZPPtr1+1
@ -26,13 +27,20 @@ RADIO.New jsr OBJ.Create A = Class
ldx #0
.1 ldy #$ff
.2 iny
lda (ZPPtr1),y
clc
beq .20
cmp #C.CR
bne .2
tya
sec
* sec
.20 tya
beq .5 empty line
adc ZPPtr1
sta ZPPtr1
bcc .3
@ -40,11 +48,8 @@ RADIO.New jsr OBJ.Create A = Class
inc ZPPtr1+1
.3 tya
inc
inc
inc
inc
inc
clc
adc #5 room for " ( ) "
ldy #S.OBJ.W
cmp (ZPObjPtr),y
bcc .4
@ -56,13 +61,18 @@ RADIO.New jsr OBJ.Create A = Class
lda (ZPPtr1)
bne .1
ldy #S.OBJ.H
.5 ldy #S.OBJ.H
txa
sta (ZPObjPtr),y
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
jsr OBJ.Insert
bcs .9
lda hObj
* clc
rts
.9 >POP 9
@ -143,7 +153,7 @@ RADIO.Run ldy #S.OBJ.S
RADIO.Draw lda (pStack) Relative Y
tax
ldy #S.RADIO.pList
ldy #S.OBJ.pBuf
jsr OBJ.GetLineXAtY
bcs .8
@ -211,27 +221,12 @@ RADIO.Draw lda (pStack) Relative Y
dex
dex
ldy #0
.2 lda (ZPPtr1),y
beq .3
jsr LB.COut
iny
dex
bne .2
jsr LB.Ptr1OutEscMaxX
.3 txa
beq .8
bra .6
.5 ldy #S.OBJ.InnerW
lda (ZPObjPtr),y
tax
.6 lda #C.SPACE
lda #C.SPACE
.7 jsr LB.COut
dex

View File

@ -4,7 +4,8 @@ NEW
*--------------------------------------
* SCRN.New hCTX,F 2
*--------------------------------------
SCRN.New jsr OBJ.Create A = Class
SCRN.New lda #S.OBJ.T.SCRN
jsr OBJ.Create
bcs .9
>PULLA
@ -28,7 +29,11 @@ SCRN.New jsr OBJ.Create A = Class
ldy #S.OBJ.H
sta (ZPObjPtr),y
jmp OBJ.SetX2Y2
jsr OBJ.SetX2Y2
lda hObj
* clc
rts
.9 >POP 2
rts

View File

@ -2,17 +2,13 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* TBOX.New hParent,X1,Y1,W,H,F,hBuf,BufSize 9
* TBOX.New hParent,X1,Y1,W,H,F,pBuf,BufSize 10
*--------------------------------------
TBOX.New jsr OBJ.Create A = Class
TBOX.New lda #S.OBJ.T.TBOX
jsr OBJ.Create
bcs .9
ldy #S.TBOX.BufSize
jsr OBJ.PullWordY
>PULLA
ldy #S.TBOX.hBuf
sta (ZPObjPtr),y
jsr OBJ.PullBuf
>PULLA
ora #S.OBJ.F.bCursor
@ -23,11 +19,16 @@ TBOX.New jsr OBJ.Create A = Class
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
.9 >POP 9
jsr OBJ.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 10
.99 rts
*--------------------------------------
TBOX.Destroy clc
rts
@ -433,18 +434,15 @@ TBOX.Activate
TBOX.Deactivate clc
rts
*--------------------------------------
TBOX.GetBuf ldy #S.TBOX.hBuf
lda (ZPObjPtr),y
>SYSCALL2 GetMemPtr
>STYA ZPPtr1
TBOX.GetBuf jsr OBJ.GetBuf
pha
tya
ldy #S.TBOX.BufPtr
lda ZPPtr1
clc
adc (ZPObjPtr),y
sta ZPPtr2
pla
lda ZPPtr1+1
iny
adc (ZPObjPtr),y
sta ZPPtr2+1
@ -463,10 +461,7 @@ TBOX.GetCurlineInAX
TBOX.GetLineAX stx TempW
sta TempW+1 Req Line Num
ldy #S.TBOX.hBuf
lda (ZPObjPtr),y
>SYSCALL2 GetMemPtr
>STYA ZPPtr1
jsr OBJ.GetBuf get pBuf in ZPPtr1
stz TempI Current Line Num
stz TempI+1
@ -577,12 +572,12 @@ TBOX.GetLineLenInAXC
*--------------------------------------
TBOX.ToBuf1 ldy #S.TBOX.BufCnt
lda (ZPObjPtr),y
ldy #S.TBOX.BufSize
ldy #S.OBJ.BufSize
cmp (ZPObjPtr),y
ldy #S.TBOX.BufCnt+1
lda (ZPObjPtr),y
ldy #S.TBOX.BufSize+1
ldy #S.OBJ.BufSize+1
sbc (ZPObjPtr),y
bcs .9

View File

@ -2,19 +2,13 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* TLINE.New hParent,X1,Y1,W,pBuf,MaxLen 7
* TLINE.New hParent,X1,Y1,W,pBuf,MaxLen 8
*--------------------------------------
TLINE.New jsr OBJ.Create A = Class
TLINE.New lda #S.OBJ.T.TLINE
jsr OBJ.Create
bcs .9
>PULLA
ldy #S.TLINE.MaxLen
sta (ZPObjPtr),y
ldy #S.TLINE.pBuf
jsr OBJ.PullWordY
stx ZPPtr1
sta ZPPtr1+1
jsr OBJ.PullBuf
ldy #S.OBJ.F
lda #S.OBJ.F.bHScroll+S.OBJ.F.bCursor
@ -33,11 +27,16 @@ TLINE.New jsr OBJ.Create A = Class
jsr OBJ.PullY1X1hParent
jmp OBJ.Insert
jsr OBJ.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 7
rts
.99 rts
*--------------------------------------
TLINE.Destroy clc
rts
@ -46,7 +45,7 @@ TLINE.Run ldy #S.OBJ.S
lda (ZPObjPtr),y
bpl .9 S.OBJ.S.bActive
jsr TLINE.GetBuf
jsr OBJ.GetBuf
lda (pStack) Event
cmp #C.DEL
@ -65,7 +64,7 @@ TLINE.Run ldy #S.OBJ.S
sec
rts
*--------------------------------------
.2 ldy #S.TLINE.MaxLen
.2 ldy #S.OBJ.BufSize
lda (ZPObjPtr),y
ldy #S.TLINE.Len
@ -160,7 +159,7 @@ TLINE.RUN.DEL ldy #S.TLINE.Ptr
.8 clc
rts
*--------------------------------------
TLINE.Draw jsr TLINE.GetBuf
TLINE.Draw jsr OBJ.GetBuf
ldx #C.SPACE
@ -226,14 +225,6 @@ TLINE.Activate
TLINE.Deactivate
jmp OBJ.Draw.Body
*--------------------------------------
TLINE.GetBuf ldy #S.TLINE.pBuf
lda (ZPObjPtr),y
sta ZPPtr1
iny
lda (ZPObjPtr),y
sta ZPPtr1+1
rts
*--------------------------------------
TLINE.GetLineChar
lda (ZPPtr1)
beq .8

View File

@ -52,17 +52,7 @@ CS.START cld
.DA CTX.Init
.DA CTX.Close
*--------------------------------------
.DA OBJ.New
.DA OBJ.Exec
.DA OBJ.Destroy
.DA OBJ.Run
.DA OBJ.Draw
.DA OBJ.GetProp
.DA OBJ.SetProp
.DA OBJ.Activate
.DA OBJ.Deactivate
*--------------------------------------
J.ObjNew .DA SCRN.New
.DA SCRN.New
.DA DLG.New
.DA LABEL.New
.DA TLINE.New
@ -71,6 +61,14 @@ J.ObjNew .DA SCRN.New
.DA CBOX.New
.DA BUT.New
.DA RADIO.New
.DA OBJ.Exec
.DA OBJ.Destroy
.DA OBJ.Run
.DA OBJ.Draw
.DA OBJ.GetProp
.DA OBJ.SetProp
.DA OBJ.Activate
.DA OBJ.Deactivate
*--------------------------------------
J.ObjDestroy .DA SCRN.Destroy
.DA DLG.Destroy
@ -187,9 +185,21 @@ LIB.UNLOAD dec LibCnt
.8 clc
rts
*--------------------------------------
LIB.GetCTX >SYSCALL2 GetMemPtr
LIB.GetCTX ldy #S.OBJ.hParent
lda (ZPObjPtr),y
.1 >SYSCALL2 GetMemPtr
>STYA ZPCtxPtr
rts
lda (ZPCtxPtr)
* cmp #S.OBJ.T.SCRN
beq .8
ldy #S.OBJ.hParent
lda (ZPCtxPtr),y
bra .1
.8 rts
*--------------------------------------
LIB.GetOBJ >SYSCALL2 GetMemPtr
>STYA ZPObjPtr

View File

@ -1,73 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF lib/string.o
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
*--------------------------------------
.DA #0 KERNEL
*--------------------------------------
>PSTR "strlen"
.DA CODE.strlen
>PSTR "strcat"
.DA CODE.strcat
>PSTR "strcpy"
.DA CODE.strcpy
>PSTR "strdup"
.DA CODE.strdup
>PSTR "strupr"
.DA CODE.strupr
>PSTR "strlwr"
.DA CODE.strlwr
>PSTR "strcmp"
.DA CODE.strcmp
>PSTR "strcasecmp"
.DA CODE.strcasecmp
.DA 0
*--------------------------------------
CODE.strlen .DA #CODE.strlen.L
>SYSCALL strlen
CODE.strlen.L .EQ *-CODE.strlen
rts
*--------------------------------------
CODE.strcat .DA #CODE.strcat.L
>SYSCALL strcat
CODE.strcat.L .EQ *-CODE.strcat
rts
*--------------------------------------
CODE.strcpy .DA #CODE.strcpy.L
>SYSCALL strcpy
CODE.strcpy.L .EQ *-CODE.strcpy
rts
*--------------------------------------
CODE.strdup .DA #CODE.strdup.L
>SYSCALL strdup
CODE.strdup.L .EQ *-CODE.strdup
rts
*--------------------------------------
CODE.strupr .DA #CODE.strupr.L
>SYSCALL strupr
CODE.strupr.L .EQ *-CODE.strupr
rts
*--------------------------------------
CODE.strlwr .DA #CODE.strlwr.L
>SYSCALL strlwr
CODE.strlwr.L .EQ *-CODE.strlwr
rts
*--------------------------------------
CODE.strcmp .DA #CODE.strcmp.L
>SYSCALL strcmp
CODE.strcmp.L .EQ *-CODE.strcmp
rts
*--------------------------------------
CODE.strcasecmp .DA #CODE.strcasecmp.L
>SYSCALL strcasecmp
CODE.strcasecmp.L .EQ *-CODE.strcasecmp
rts
*--------------------------------------
MAN
SAVE usr/src/lib/string.o.s
ASM