A2osX/BIN/CSH.S.CORE.txt

927 lines
15 KiB
Plaintext
Raw Normal View History

NEW
2019-06-28 15:15:58 +00:00
AUTO 3,1
2020-07-31 14:46:11 +00:00
.LIST OFF
2016-08-17 06:25:58 +00:00
*--------------------------------------
2019-08-26 06:29:18 +00:00
CSH.Init >SYSCALL SListNew
bcs .9
2020-01-23 14:48:22 +00:00
2020-02-21 16:31:46 +00:00
>STA.G CSH.hDefines
2020-01-23 14:48:22 +00:00
2020-01-25 18:56:36 +00:00
>SYSCALL SListNew
bcs .9
2020-02-21 16:31:46 +00:00
>STA.G CSH.hTags
2020-07-31 14:46:11 +00:00
2020-02-21 16:31:46 +00:00
>SYSCALL SListNew
bcs .9
2020-01-25 18:56:36 +00:00
2020-02-21 16:31:46 +00:00
>STA.G CSH.hSymbols
2020-07-31 14:46:11 +00:00
>LDYAI 256
2018-07-13 14:38:24 +00:00
>SYSCALL GetMem
bcs .9
2020-01-23 14:48:22 +00:00
2020-08-02 12:19:43 +00:00
>STYA ZPCSHCode
txa
>STA.G CSH.hCode
>LDYAI 256
>SYSCALL GetMem
bcs .9
2019-02-13 16:20:44 +00:00
>STYA ZPCSHConst
txa
2019-02-13 16:20:44 +00:00
>STA.G CSH.hConst
>LDYAI 256
2018-07-13 14:38:24 +00:00
>SYSCALL GetMem
bcs .9
2020-01-23 14:48:22 +00:00
2020-02-19 16:42:05 +00:00
>STYA ZPCSHData
txa
>STA.G CSH.hData
>LDYAI 256
>SYSCALL GetMem
bcs .9
2019-02-13 16:20:44 +00:00
>STYA ZPCSHStack
txa
>STA.G CSH.hStack
2020-01-23 14:48:22 +00:00
2020-01-25 18:56:36 +00:00
lda #0
2019-02-13 16:20:44 +00:00
>STA.G CSH.ConstPtr
>STA.G CSH.StackPtr
* clc
.9 rts
*--------------------------------------
2019-08-26 06:29:18 +00:00
CSH.Quit >LDA.G CSH.hSymbols
2020-01-23 14:48:22 +00:00
beq .1
2020-07-31 14:46:11 +00:00
2020-02-18 15:34:56 +00:00
>PUSHA
2019-08-26 06:29:18 +00:00
>SYSCALL SListFree
2018-10-16 15:48:03 +00:00
2020-02-21 16:31:46 +00:00
.1 >LDA.G CSH.hTags
2020-01-25 18:56:36 +00:00
beq .2
2020-07-31 14:46:11 +00:00
2020-02-18 15:34:56 +00:00
>PUSHA
2020-01-25 18:56:36 +00:00
>SYSCALL SListFree
2020-02-21 16:31:46 +00:00
.2 >LDA.G CSH.hDefines
beq .3
2020-07-31 14:46:11 +00:00
2020-02-21 16:31:46 +00:00
>PUSHA
>SYSCALL SListFree
2020-08-26 15:25:58 +00:00
.3 >LDA.G hIncludeBuf
beq .4
>SYSCALL FClose
.4 lda ZPhMacro
2020-01-26 19:36:49 +00:00
jsr .7
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
>LDA.G hFileBuf
2019-08-26 06:29:18 +00:00
jsr .7
>LDA.G CSH.hStack
jsr .7
2020-01-23 14:48:22 +00:00
2020-02-19 16:42:05 +00:00
>LDA.G CSH.hData
jsr .7
2019-08-26 06:29:18 +00:00
>LDA.G CSH.hConst
2020-08-02 12:19:43 +00:00
jsr .7
>LDA.G CSH.hCode
2020-07-31 14:46:11 +00:00
2019-08-26 06:29:18 +00:00
.7 beq CSH.Quit.RTS
2018-10-16 15:48:03 +00:00
>SYSCALL FreeMem
2019-02-13 16:20:44 +00:00
CSH.Quit.RTS rts
2018-10-16 15:48:03 +00:00
*--------------------------------------
2018-11-10 14:30:09 +00:00
CSH.Run jsr CSH.GetCharNB
2019-02-13 16:20:44 +00:00
bcs CSH.Quit.RTS
2019-10-03 06:25:27 +00:00
2020-01-25 18:56:36 +00:00
CSH.Run.1 cmp #C.CR empty line....
beq .2
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
cmp #'/'
2019-08-28 15:21:42 +00:00
bne .3 comments ...
2020-01-25 18:56:36 +00:00
jmp CSH.COMMENTS
2019-08-28 15:21:42 +00:00
.2 jmp CSH.GetNextChar Skip CR and exit
2020-01-25 18:56:36 +00:00
.3 cmp #'#' directive ?
2019-08-28 15:21:42 +00:00
bne .4
2020-02-19 16:42:05 +00:00
jmp CSH.DIR
2020-01-25 18:56:36 +00:00
.4 cmp #'}' End of block ?
bne .40
jsr CSH.CheckStack must be something on stack....
bcs .9
2019-09-05 15:49:05 +00:00
jsr CSH.GetNextCharNB Skip '}'
jsr CSH.Pop was expected....
jsr CSH.Pop get stacked Cmd...
tax
2020-01-25 18:56:36 +00:00
jmp (J.CSH.KW.END,x)
.40 jsr CSH.IsLetter
2019-08-28 15:21:42 +00:00
bcc .5
bra .99 error, todo : PREOPS ++ --.....
2020-01-25 18:56:36 +00:00
2019-09-05 06:43:09 +00:00
.5 jsr CSH.SavePtr Save Ptr, in case of while,for....
>LDYA L.CSH.KW
jsr CSH.LookupID
2019-08-28 15:21:42 +00:00
bcs .6 not an internal CSH keyword....
2020-02-18 15:34:56 +00:00
2019-08-27 15:13:00 +00:00
jsr CSH.KW.JMP
bcs .9
2019-08-28 15:21:42 +00:00
bra .8
2019-08-28 15:21:42 +00:00
.6 jsr CSH.GetVar
bcs .7
2019-02-13 16:20:44 +00:00
2019-09-03 15:35:13 +00:00
>STYA ZPVarID
2020-02-21 13:24:16 +00:00
jsr CSH.GetVarDef Get Type & ptr...
bcs .9
2020-07-31 14:46:11 +00:00
jsr CSH.GetCharNB
bcs .9
2020-01-25 18:56:36 +00:00
2019-09-06 12:50:27 +00:00
cmp #'=' TODO: all AOPS
bne .99
2020-01-25 18:56:36 +00:00
2019-08-27 15:13:00 +00:00
jsr CSH.GetNextChar Skip =
bcs .99
2020-01-25 18:56:36 +00:00
2020-02-21 13:24:16 +00:00
lda ZPVarType
jsr CSH.ExpEval
bcs .9
2019-09-06 12:50:27 +00:00
2020-02-19 16:42:05 +00:00
jsr CSH.SetVarValueFromStack X = Exp Type
bcs .9
2020-01-25 18:56:36 +00:00
jsr CSH.GetChar
cmp #';'
2020-01-25 18:56:36 +00:00
beq .8
.99 lda #CSH.E.SYNTAX
sec
.9 rts
2020-01-23 14:48:22 +00:00
2019-08-28 15:21:42 +00:00
.7 lda #0 no return value type check required
2019-09-02 06:09:28 +00:00
jsr CSH.fCall
2019-02-13 16:20:44 +00:00
bcs .9
2019-08-26 06:29:18 +00:00
2020-02-21 16:31:46 +00:00
jsr CSH.GetVarSize X = returned value type
2020-08-02 12:19:43 +00:00
clc A = Sizeof CC to ignore Pointer hMem
2020-01-23 14:48:22 +00:00
adc pStack
sta pStack Discard value on stack
2019-08-28 15:21:42 +00:00
.8 jsr CSH.GetNextCharNB Skip ;
2019-08-27 15:13:00 +00:00
bcs .9
2020-01-25 18:56:36 +00:00
2019-08-27 15:13:00 +00:00
cmp #C.CR
2019-09-03 15:35:13 +00:00
beq .80
2020-01-25 18:56:36 +00:00
2019-09-03 15:35:13 +00:00
jmp CSH.Run.1
2020-07-31 14:46:11 +00:00
2019-09-03 15:35:13 +00:00
.80 jmp CSH.GetNextChar Skip CR
2020-01-25 18:56:36 +00:00
*--------------------------------------
CSH.COMMENTS jsr CSH.GetNextChar
cmp #'/'
bne .90
jmp CSH.SkipLine skip line.....
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
.90 lda #CSH.E.SYNTAX
sec
2020-01-25 18:56:36 +00:00
rts
*--------------------------------------
2020-02-19 16:42:05 +00:00
CSH.DIR jsr CSH.GetNextCharNB
2020-01-25 18:56:36 +00:00
bcs .99
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
cmp #'!' #!/bin/csh
bne .1
2020-07-31 14:46:11 +00:00
jmp CSH.SkipLine
2020-01-25 18:56:36 +00:00
.1 >LDYA L.CSH.DIRS
jsr CSH.LookupID
bcs .91
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
jmp (J.CSH.DIRS,x)
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
.91 lda #CSH.E.INVDIR
sec
.99 rts
*--------------------------------------
CSH.DIR.DEFINE jsr CSH.CheckSpace
bcs .99
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
jsr CSH.IsLetter
bcs .90
2020-07-31 14:46:11 +00:00
2020-02-23 20:01:48 +00:00
>LDA.G CSH.hDefines
jsr CSH.NewKey
2020-01-25 18:56:36 +00:00
bcs .99
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
>STYA ZPVarID
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
jsr CSH.CheckSpace
bcs .99
2020-01-26 19:36:49 +00:00
ldy #$ff
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
.1 iny
lda (ZPFileBufPtr),y
beq .2
cmp #C.CR
bne .1
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
dey
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
.2 iny
2020-02-18 15:34:56 +00:00
phy
2020-07-31 14:46:11 +00:00
2020-02-18 15:34:56 +00:00
>PUSHB.G CSH.hDefines
>PUSHW ZPVarID
>PUSHW ZPFileBufPtr
2020-07-31 14:46:11 +00:00
2020-02-18 15:34:56 +00:00
ply
2020-08-26 15:25:58 +00:00
lda #0
2020-01-26 19:36:49 +00:00
>PUSHYA DataLen
2020-01-25 18:56:36 +00:00
>SYSCALL SListAddData
bcs .99
2020-07-31 14:46:11 +00:00
2020-08-26 15:25:58 +00:00
jmp CSH.SkipLine
2020-07-31 14:46:11 +00:00
.90 lda #CSH.E.SYNTAX
sec
.99 rts
*--------------------------------------
2020-08-02 12:19:43 +00:00
CSH.DIR.INCLUDE >STZ.G PathBuf
jsr CSH.CheckSpace
2020-07-31 14:46:11 +00:00
bcs .99
cmp #'"'
beq .1
cmp #'<'
2020-08-02 12:19:43 +00:00
bne .90
2020-07-31 14:46:11 +00:00
2020-08-02 12:19:43 +00:00
>PUSHW L.ENV.INCLUDE
>PUSHEA.G PathBuf
2020-08-19 19:39:43 +00:00
>SYSCALL GetEnv
2020-08-02 12:19:43 +00:00
2020-07-31 14:46:11 +00:00
lda #'>'
2020-08-02 12:19:43 +00:00
.1 sta ArgIndex
2020-08-02 12:19:43 +00:00
ldy #PathBuf
2019-09-03 15:35:13 +00:00
2020-08-02 12:19:43 +00:00
.2 lda (pData),y
beq .3
iny
bra .2
.3 jsr CSH.GetNextChar
beq .90
cmp ArgIndex
2020-02-19 16:42:05 +00:00
beq .8
2019-09-03 15:35:13 +00:00
2020-08-02 12:19:43 +00:00
sta (pData),y
iny
cpy #64
bne .3
2020-03-11 16:41:45 +00:00
2019-08-26 06:29:18 +00:00
.90 lda #CSH.E.SYNTAX
sec
.99 rts
2019-09-06 12:50:27 +00:00
2020-08-02 12:19:43 +00:00
.8 jsr CSH.GetNextChar skip " or >
2020-02-21 13:24:16 +00:00
2020-08-26 15:25:58 +00:00
>LDA.G hIncludeBuf
bne .90
2020-08-27 06:30:03 +00:00
>LDYA pData
jsr CS.RUN.LoadFile
2020-08-26 15:25:58 +00:00
bcs .99
>STA.G hIncludeBuf
rts
*--------------------------------------
2020-08-02 12:19:43 +00:00
CSH.SkipLine jsr CSH.GetNextChar
2019-02-13 16:20:44 +00:00
bcs .9
cmp #C.CR
2020-08-02 12:19:43 +00:00
bne CSH.SkipLine
2019-02-13 16:20:44 +00:00
clc
2020-08-02 12:19:43 +00:00
.9 rts
2019-02-13 16:20:44 +00:00
*--------------------------------------
2018-11-10 14:30:09 +00:00
CSH.SavePtr >LDYA ZPFileBufPtr
>STYA.G CSH.BufPtrSave
rts
*--------------------------------------
CSH.LookupFN sec
.HS 90 BCC
CSH.LookupID clc
>STYA ZPPtr1
ror
>STA.G CSH.LookupOpt
jsr CSH.GetIDLen
bra CSH.Lookup
CSH.LookupOP >STYA ZPPtr1
>STZ.G CSH.LookupOpt
jsr CSH.GetOPLen
CSH.Lookup phy Y = len
ldx #0
.1 lda (ZPPtr1)
beq .9 Ending 0, not found....
pla
pha Get Back Len
cmp (ZPPtr1) Same Len ?
bne .4
tay
.2 lda (ZPPtr1),y
.3 dey
2018-11-10 14:30:09 +00:00
cmp (ZPFileBufPtr),y
bne .4
tya
bne .2
pla Found keyword...
clc
2018-11-10 14:30:09 +00:00
adc ZPFileBufPtr ..advance Ptr to char after it..
sta ZPFileBufPtr
bcc .31
2018-11-10 14:30:09 +00:00
inc ZPFileBufPtr+1
.31 lda ZPPtr1
sec
adc (ZPPtr1)
2019-08-26 06:29:18 +00:00
tay
2019-02-13 16:20:44 +00:00
lda ZPPtr1+1
adc #0
2019-08-26 06:29:18 +00:00
clc Y,A = F() def, X = F() index
.8 rts
.4 inx
inx
2019-08-26 06:29:18 +00:00
lda (ZPPtr1)
jsr CSH.ZPPtr1AddAp1
>LDA.G CSH.LookupOpt
bpl .1
2020-07-31 14:46:11 +00:00
2020-01-24 14:21:08 +00:00
ldy #$0 Start at Y=1 for VOID func()
.6 iny
lda (ZPPtr1),y
bne .6
2020-07-31 14:46:11 +00:00
tya
2019-08-26 06:29:18 +00:00
jsr CSH.ZPPtr1AddAp1
bra .1
2020-07-31 14:46:11 +00:00
.9 pla
sec
rts
*--------------------------------------
2020-01-24 14:21:08 +00:00
CSH.ZPPtr1Next inc ZPPtr1
bne .8
inc ZPPtr1+1
2020-07-31 14:46:11 +00:00
.8 rts
2020-01-24 14:21:08 +00:00
*--------------------------------------
2019-02-13 16:20:44 +00:00
CSH.ZPPtr1AddAp1
sec
2020-07-31 14:46:11 +00:00
adc ZPPtr1
2019-02-13 16:20:44 +00:00
sta ZPPtr1
bcc .1
inc ZPPtr1+1
.1 rts
*--------------------------------------
2019-09-04 15:35:50 +00:00
* Input : ZPFileBufPtr
2020-02-20 16:54:51 +00:00
* Output : Y,A = VarID
*--------------------------------------
2020-08-02 12:19:43 +00:00
CSH.AddSymbol >LDA.G CSH.hSymbols
2020-02-19 16:42:05 +00:00
jsr CSH.NewKey
bcs .9
2020-01-25 18:56:36 +00:00
2020-02-20 07:41:52 +00:00
>STYA ZPVarID
2020-02-19 16:42:05 +00:00
ldx ZPVarType
2020-08-02 12:19:43 +00:00
jsr CSH.GetVarSize CS if pointer
2020-02-19 16:42:05 +00:00
sta ZPVarSizeOf
2020-08-02 12:19:43 +00:00
* clc / sec
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
lda ZPCSHData
sta ZPVarDataPtr
adc ZPVarSizeOf
sta ZPCSHData
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
lda ZPCSHData+1
sta ZPVarDataPtr+1
adc ZPVarSizeOf+1
sta ZPCSHData+1
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
>LDA.G CSH.DataPtr
clc
adc ZPVarSizeOf
sta (pData),y
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
bcs .99
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
>PUSHB.G CSH.hSymbols
>PUSHW ZPVarID
>PUSHWI ZPVarDef
>PUSHWI 6
>SYSCALL SListAddData
.9 rts
2020-02-20 07:41:52 +00:00
.99 lda #CSH.E.OOM
.HS 2C BIT ABS
2020-02-19 16:42:05 +00:00
CSH.TMISMATCH lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
2020-08-02 12:19:43 +00:00
CSH.AddFunction lda #CSH.Q.FUNC
tsb ZPVarType
jsr CSH.GetNextCharNB Skip (
bcs .9
.1 cmp #')'
beq .5
>LDYA L.CSH.TYPES
jsr CSH.LookupID
bcs .9
.5 jsr CSH.GetNextCharNB Skip )
jsr CSH.SkipLine
clc
rts
.9 lda #CSH.E.SYNTAX
sec
.99 rts
*--------------------------------------
2020-02-19 16:42:05 +00:00
CSH.NewKey >PUSHA
2020-01-25 18:56:36 +00:00
>PUSHW ZPFileBufPtr
2019-08-26 06:29:18 +00:00
>SYSCALL SListNewKey
bcs .9
2020-02-18 15:34:56 +00:00
2020-02-20 16:54:51 +00:00
pha
2019-08-26 06:29:18 +00:00
txa
* clc
adc ZPFileBufPtr
sta ZPFileBufPtr
bcc .1
2020-07-31 14:46:11 +00:00
2019-08-26 06:29:18 +00:00
inc ZPFileBufPtr+1
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
.1 clc
2020-02-20 16:54:51 +00:00
pla
2019-09-03 15:35:13 +00:00
.9 rts
*--------------------------------------
2020-02-19 16:42:05 +00:00
* X=Type
2019-09-03 15:35:13 +00:00
*--------------------------------------
2019-09-04 15:35:50 +00:00
CSH.SetVarValueFromStack
2020-02-19 16:42:05 +00:00
cpx ZPVarType X = type
bne .99
2019-08-26 06:29:18 +00:00
2020-02-19 16:42:05 +00:00
ldy #0
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
.1 lda (pStack)
sta (ZPVarDataPtr),y
inc pStack
2019-09-03 15:35:13 +00:00
iny
2020-02-19 16:42:05 +00:00
cpy ZPVarSizeOf
2019-09-03 15:35:13 +00:00
bne .1
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
clc
2019-09-03 15:35:13 +00:00
rts
2020-07-31 14:46:11 +00:00
2020-02-19 16:42:05 +00:00
.99 lda #CSH.E.TMISMATCH
sec
2019-10-03 06:25:27 +00:00
rts
*--------------------------------------
2020-02-18 15:34:56 +00:00
CSH.GetDefine >PUSHB.G CSH.hDefines
2020-01-26 19:36:49 +00:00
jsr CSH.Get
bcs .9
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
pha
2020-02-18 15:34:56 +00:00
phy
>PUSHB.G CSH.hDefines
ply
2020-01-26 19:36:49 +00:00
pla
>PUSHYA KeyID
2020-02-18 15:34:56 +00:00
>PUSHWZ Allocate..
>PUSHWZ len = 0 (string mode)
>PUSHWZ From Start
2020-01-26 19:36:49 +00:00
>SYSCALL SListGetData
2020-07-31 14:46:11 +00:00
bcs .9
2020-01-26 19:36:49 +00:00
stx ZPhMacro
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
lda ZPFileBufPtr
sta ZPFileBufPtrBak
lda ZPFileBufPtr+1
sta ZPFileBufPtrBak+1
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
txa
2020-02-28 07:21:46 +00:00
>SYSCALL GetMemPtr
2020-01-26 19:36:49 +00:00
>STYA ZPFileBufPtr
2020-07-31 14:46:11 +00:00
.9 rts
2020-01-26 19:36:49 +00:00
*--------------------------------------
2020-02-18 15:34:56 +00:00
CSH.GetVar >PUSHB.G CSH.hSymbols
2020-07-31 14:46:11 +00:00
2020-02-18 15:34:56 +00:00
CSH.Get >PUSHW ZPFileBufPtr
>SYSCALL SListLookup
2019-08-26 06:29:18 +00:00
bcs .9
2019-09-03 15:35:13 +00:00
pha
2019-08-26 06:29:18 +00:00
txa
* clc
adc ZPFileBufPtr
sta ZPFileBufPtr
bcc .1
inc ZPFileBufPtr+1
2019-08-26 15:27:28 +00:00
clc
2019-09-03 15:35:13 +00:00
.1 pla Y,A = VarID
.9 rts
2019-08-26 15:27:28 +00:00
*--------------------------------------
2020-02-21 13:24:16 +00:00
CSH.GetVarDef phy
pha
>PUSHB.G CSH.hSymbols
2020-07-31 14:46:11 +00:00
2020-02-21 13:24:16 +00:00
pla
>PUSHA
pla
>PUSHA KeyID
>PUSHWI ZPVarDef
>PUSHWI 6 6 bytes
>PUSHWI 0 From Start
>SYSCALL SListGetData
rts
*--------------------------------------
2020-02-19 16:42:05 +00:00
* Input :
* X=Var Type (or 0)
* YA=VarID
* Output : Stack, X = Var Type
2019-08-26 15:27:28 +00:00
*--------------------------------------
2019-09-04 15:35:50 +00:00
CSH.GetVarValueOnStack
2020-02-19 16:42:05 +00:00
phx
2020-02-18 15:34:56 +00:00
phy
2020-02-19 16:42:05 +00:00
pha
2020-02-18 15:34:56 +00:00
>PUSHB.G CSH.hSymbols
2020-07-31 14:46:11 +00:00
2019-09-03 15:35:13 +00:00
pla
2020-02-19 16:42:05 +00:00
>PUSHA
pla
>PUSHA KeyID
2020-02-18 15:34:56 +00:00
2020-02-20 16:54:51 +00:00
>PUSHEA.G CSH.VarDef
2020-02-18 15:34:56 +00:00
>PUSHWI 6 6 bytes
>PUSHWI 0 From Start
2019-08-26 15:27:28 +00:00
>SYSCALL SListGetData
2020-02-19 16:42:05 +00:00
plx
2019-09-03 15:35:13 +00:00
bcs .9
2019-08-28 15:21:42 +00:00
2020-02-19 16:42:05 +00:00
txa
2020-01-23 14:48:22 +00:00
beq .1 any type
2020-07-31 14:46:11 +00:00
2020-02-20 16:54:51 +00:00
>CMP.G CSH.VarDef Type
2020-01-23 14:48:22 +00:00
beq .2
2020-07-31 14:46:11 +00:00
2020-01-23 14:48:22 +00:00
and #CSH.Q.PPPOINTER
beq .99 not pointer....mismatch
2020-07-31 14:46:11 +00:00
2020-02-20 16:54:51 +00:00
>EOR.G CSH.VarDef
2020-01-23 14:48:22 +00:00
and #CSH.Q.PPPOINTER
bne .99 compare only pointer depth
2020-07-31 14:46:11 +00:00
2020-02-20 16:54:51 +00:00
.1 >LDA.G CSH.VarDef
2019-09-03 15:35:13 +00:00
beq *
2020-02-20 16:54:51 +00:00
.2 tax
2020-02-21 16:31:46 +00:00
jsr CSH.GetVarSize
2020-02-20 16:54:51 +00:00
pha
2020-02-19 16:42:05 +00:00
2020-02-20 16:54:51 +00:00
>LDA.G CSH.VarDef+4
sta ZPPtr3
iny
lda (pData),y
sta ZPPtr3+1
2020-07-31 14:46:11 +00:00
ply
2020-02-19 16:42:05 +00:00
.3 dey
2020-02-20 16:54:51 +00:00
lda (ZPPtr3),y
2019-08-26 15:27:28 +00:00
>PUSHA
2020-02-19 16:42:05 +00:00
tya
2020-01-23 14:48:22 +00:00
bne .3
2020-02-20 16:54:51 +00:00
>LDA.G CSH.VarDef
tax
2019-09-02 06:09:28 +00:00
clc X = Var Type
2019-09-05 15:49:05 +00:00
.9 rts
2019-08-28 15:21:42 +00:00
2020-02-19 16:42:05 +00:00
.99 lda #CSH.E.TMISMATCH
2019-08-26 15:27:28 +00:00
sec
2019-09-05 15:49:05 +00:00
rts
*--------------------------------------
2019-08-29 15:49:03 +00:00
* Input : Value on Stack, X = Var Type
* Output : CC = true, CS = false
*--------------------------------------
2019-09-05 15:49:05 +00:00
CSH.IsValue0 cpx #CSH.T.FLOAT
2019-08-29 15:49:03 +00:00
bcc .1 char,int,long
2020-02-19 16:42:05 +00:00
2019-09-02 06:09:28 +00:00
ldy CSH.TYPESIZE,x
2020-02-19 16:42:05 +00:00
lda (ZPVarDataPtr),y
bne .9
2020-07-31 14:46:11 +00:00
.8 clc
rts
2020-07-31 14:46:11 +00:00
2020-02-21 16:31:46 +00:00
.1 jsr CSH.GetVarSize
tax
2019-09-05 06:43:09 +00:00
lda #0
2019-09-05 06:43:09 +00:00
.2 ora (pStack)
inc pStack
dex
bne .2
2020-07-31 14:46:11 +00:00
tax
beq .8
2020-07-31 14:46:11 +00:00
.9 sec
rts
*--------------------------------------
* Stack
*--------------------------------------
2019-09-05 06:43:09 +00:00
CSH.CheckStack tax
>LDA.G CSH.StackPtr
beq .9
2020-01-23 14:48:22 +00:00
2019-09-05 06:43:09 +00:00
tay
txa
cmp (ZPCSHStack),y
bne .9
2020-01-23 14:48:22 +00:00
2019-09-05 06:43:09 +00:00
clc
rts
2020-07-31 14:46:11 +00:00
2019-09-05 06:43:09 +00:00
.9 lda #CSH.E.SYNTAX
sec
rts
*--------------------------------------
CSH.Push pha
>LDA.G CSH.StackPtr
2020-01-23 14:48:22 +00:00
dec
beq .9
sta (pData),y
tay
pla
sta (ZPCSHStack),y
clc
rts
2020-07-31 14:46:11 +00:00
.9 pla
lda #CSH.E.SOVERFLW
sec
rts
*--------------------------------------
CSH.Pop >LDA.G CSH.StackPtr
beq .9
2020-07-31 14:46:11 +00:00
pha
2020-01-23 14:48:22 +00:00
inc
sta (pData),y
2020-01-23 14:48:22 +00:00
ply
lda (ZPCSHStack),y
clc
rts
2020-01-23 14:48:22 +00:00
.9 lda #CSH.E.STACKERR
sec
2019-10-03 06:25:27 +00:00
rts
*--------------------------------------
* CHAR related Subs.....
*--------------------------------------
CSH.GetOPLen ldy #0
.1 iny
2018-11-10 14:30:09 +00:00
lda (ZPFileBufPtr),y
beq .8
jsr CSH.IsOPChar
bcc .1
.8 tya
rts
*--------------------------------------
CSH.GetIDLen ldy #0
.1 iny
2018-11-10 14:30:09 +00:00
lda (ZPFileBufPtr),y
beq .8
jsr CSH.IsLetterOrDigit
bcc .1
.8 tya
rts
*--------------------------------------
2019-09-05 15:49:05 +00:00
CSH.SkipStatement
clc
rts
*--------------------------------------
CSH.SkipBlock ldy #0 not in "", TOTO:skip comments
ldx #1 starting with 1 '{' for now....
2019-09-05 06:43:09 +00:00
.1 jsr CSH.GetNextCharNB
bcs .9
cmp #'{'
bne .2
2019-09-05 15:49:05 +00:00
tya
bmi .1
2019-09-05 06:43:09 +00:00
inx
bra .1
.2 cmp #'}'
2019-09-05 15:49:05 +00:00
bne .3
tya
bmi .1
2019-09-05 06:43:09 +00:00
dex
bne .1
2019-09-06 12:50:27 +00:00
clc
rts
2019-09-05 15:49:05 +00:00
.3 cmp #'"'
bne .1
tya
eor #$ff
tay
bra .1
2019-09-05 06:43:09 +00:00
jmp CSH.GetNextCharNB skip '}'
2019-10-03 06:25:27 +00:00
.9 rts
2019-09-05 06:43:09 +00:00
*--------------------------------------
CSH.GetCharNB jsr CSH.GetChar
bcs CSH.GetNextCharNB.RTS
jsr CSH.CheckCharNB
2020-07-31 14:46:11 +00:00
bcc CSH.GetNextCharNB.RTS
*--------------------------------------
CSH.GetNextCharNB
jsr CSH.GetNextChar
bcs CSH.GetNextCharNB.RTS
jsr CSH.CheckCharNB
bcs CSH.GetNextCharNB
CSH.GetNextCharNB.RTS
rts
*--------------------------------------
2020-01-25 18:56:36 +00:00
CSH.CheckSpace jsr CSH.GetChar
bcs .90
cmp #C.SPACE
bne .90
jsr CSH.GetNextCharNB
bcc CSH.GetNextCharNB.RTS
2020-07-31 14:46:11 +00:00
2020-01-25 18:56:36 +00:00
.90 lda #CSH.E.SYNTAX
sec
rts
*--------------------------------------
2018-11-10 14:30:09 +00:00
CSH.CheckCharNB cmp #C.SPACE
beq .9
2018-11-10 14:30:09 +00:00
cmp #C.LF
beq .9
2018-11-10 14:30:09 +00:00
cmp #C.TAB
beq .9
clc
2019-10-03 06:25:27 +00:00
.9 rts
*--------------------------------------
2018-11-10 14:30:09 +00:00
CSH.GetNextChar inc ZPFileBufPtr
bne CSH.GetChar
2018-11-10 14:30:09 +00:00
inc ZPFileBufPtr+1
*--------------------------------------
2018-11-10 14:30:09 +00:00
CSH.GetChar lda (ZPFileBufPtr)
2020-01-26 19:36:49 +00:00
bne .8
lda ZPhMacro
beq .9
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
stz ZPhMacro
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
phx
phy
2020-02-28 07:21:46 +00:00
>SYSCALL FreeMem
2020-01-26 19:36:49 +00:00
ply
plx
lda ZPFileBufPtrBak
sta ZPFileBufPtr
2020-07-31 14:46:11 +00:00
2020-01-26 19:36:49 +00:00
lda ZPFileBufPtrBak+1
sta ZPFileBufPtr+1
bra CSH.GetChar
.8 clc
rts
2020-01-26 19:36:49 +00:00
.9 lda #MLI.E.EOF
sec
rts
*---------------------------------------
2019-02-07 16:52:25 +00:00
CSH.IsOPChar ldx #CSH.OPChars.Cnt-1
.1 cmp CSH.OPChars,x
beq .8
dex
bpl .1
sec
rts
.8 clc
2019-10-03 06:25:27 +00:00
rts
*---------------------------------------
CSH.IsLetterOrDigit
jsr CSH.IsDigit10
bcc CSH.IsLetterRTS
*---------------------------------------
CSH.IsLetter cmp #'_'
bne .1
clc
rts
.1 cmp #'A'
bcc .9
cmp #'Z'+1
bcc CSH.IsLetterRTS
cmp #'a'
bcc .9
cmp #'z'+1
rts CC if lowercase
.9 sec
2019-10-03 06:25:27 +00:00
CSH.IsLetterRTS rts
*---------------------------------------
CSH.IsDigit10 cmp #'0'
bcc .9
cmp #'9'+1
rts cc if ok, cs if not
.9 sec
rts
2016-08-17 06:25:58 +00:00
*--------------------------------------
2019-09-03 15:35:13 +00:00
* in : X = type, out : X = type, A = size
*--------------------------------------
2020-02-21 16:31:46 +00:00
CSH.GetVarSize txa
2019-09-02 06:09:28 +00:00
and #CSH.Q.PPPOINTER
bne .2
2020-07-31 14:46:11 +00:00
2019-09-02 06:09:28 +00:00
txa
and #$f
2019-09-03 15:35:13 +00:00
phx
tax
lda CSH.TYPESIZE,x
plx
2020-08-02 12:19:43 +00:00
clc
2019-09-02 06:09:28 +00:00
rts
2020-01-23 14:48:22 +00:00
2020-08-02 12:19:43 +00:00
.2 sec +1 for hMem Storage
lda #2
2019-09-02 06:09:28 +00:00
rts
*--------------------------------------
2016-08-17 06:25:58 +00:00
MAN
2020-07-31 14:46:11 +00:00
SAVE usr/src/bin/csh.s.core
LOAD usr/src/bin/csh.s
2016-08-17 06:25:58 +00:00
ASM