Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-08-26 08:29:18 +02:00
parent e868aa8f5b
commit 64e8b83244
15 changed files with 423 additions and 531 deletions

Binary file not shown.

Binary file not shown.

View File

@ -23,13 +23,9 @@ CSH.CmdSave .BS 1
CSH.ACCT .BS 1
CSH.ACC .BS 5
CSH.EXPBOP1 .BS 1
CSH.ARGT .BS 1
CSH.ARG .BS 5
CSH.EXPBOP2 .BS 1
CSH.LookupOpt .BS 1
*--------------------------------------
MAN

View File

@ -2,12 +2,25 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CSH.Q.CONST .EQ %10000000
CSH.Q.POINTER .EQ %00100000
CSH.Q.PPOINTER .EQ %01000000
CSH.Q.PPPOINTER .EQ %01100000
CSH.T.CHAR .EQ 1
CSH.T.INT .EQ 2
CSH.T.LONG .EQ 3
CSH.T.UCHAR .EQ 4
CSH.T.UINT .EQ 5
CSH.T.ULONG .EQ 6
CSH.T.FLOAT .EQ 7
CSH.T.VARIADIC .EQ $1F
*--------------------------------------
CSH.OPChars .AS "!~+-*/%=&|^&<>"
CSH.OPChars.Cnt .EQ *-CSH.OPChars
*--------------------------------------
* Pre Operators: + - ! ~ ++ --
*--------------------------------------
CSH.PREOOPS >PSTR "+"
CSH.PREOPS >PSTR "+"
>PSTR "-"
>PSTR "!"
>PSTR "~"
@ -32,7 +45,7 @@ CSH.AOPS >PSTR "="
>PSTR "^="
>PSTR "!="
.HS 00
*-- Binary ---- H to L prececence -----
*-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / %
* Arithmetic Operators: + -
* Shift Operators: << >>
@ -77,23 +90,19 @@ CSH.KW >PSTR "if"
CSH.STYPES >PSTR "char"
>PSTR "int"
>PSTR "long"
.HS 00
* .HS 00
CSH.TSIZE .HS 0001020401020405 00,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT....
*--------------------------------------
* int printf ( const char * format, ... );
CSH.FN >PSTR "printf"
.DA #CSH.T.INT returned value
.DA #CSH.Q.CONST
.DA #CSH.T.CHAR
.DA #CSH.Q.POINTER
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
.DA #CSH.T.VARIADIC
.DA #0
* int puts ( const char * str );
>PSTR "puts"
.DA #CSH.T.INT returned value
.DA #CSH.Q.CONST
.DA #CSH.T.CHAR
.DA #CSH.Q.POINTER
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
.DA #0
* float cos ( float x );
>PSTR "cos"
@ -104,6 +113,8 @@ CSH.FN >PSTR "printf"
>PSTR "getchar"
.DA #CSH.T.INT returned value
.DA #0
.DA #0
*--------------------------------------
MAN
SAVE USR/SRC/BIN/CSH.I

View File

@ -47,6 +47,11 @@ J.CSH.KW.START .DA CSH.IF.START
J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END
*--------------------------------------
J.CSH.EXEC .DA EXEC.printf
.DA EXEC.puts
.DA EXEC.cos
.DA EXEC.getchar
*--------------------------------------
MAN
SAVE USR/SRC/BIN/CSH.R
LOAD USR/SRC/BIN/CSH.S

View File

@ -2,22 +2,8 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CSH.Q.CONST .EQ %10000000
CSH.Q.POINTER .EQ %10000001
CSH.T.CHAR .EQ 1
CSH.T.INT .EQ 2
CSH.T.LONG .EQ 3
CSH.T.UCHAR .EQ 4
CSH.T.UINT .EQ 5
CSH.T.ULONG .EQ 6
CSH.T.FLOAT .EQ 7
CSH.T.VARIADIC .EQ $F
*--------------------------------------
CSH.Init >LDYAI 256
>SYSCALL GetMem0
CSH.Init >SYSCALL SListNew
bcs .9
>STYA ZPCSHSymbols
txa
>STA.G CSH.hSymbols
>LDYAI 256
@ -27,13 +13,6 @@ CSH.Init >LDYAI 256
txa
>STA.G CSH.hConst
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPCSHData
txa
>STA.G CSH.hData
>LDYAI 256
>SYSCALL GetMem
bcs .9
@ -42,33 +21,28 @@ CSH.Init >LDYAI 256
>STA.G CSH.hStack
lda #$0
>STA.G CSH.SymbolsPtr
>STA.G CSH.ConstPtr
>STA.G CSH.DataPtr
>STA.G CSH.StackPtr
sta (ZPCSHSymbols)
sta (ZPCSHConst)
sta (ZPCSHData)
sta (ZPCSHStack)
* clc
.9 rts
*--------------------------------------
CSH.Quit >LDA.G hFileBuf
beq .1
>SYSCALL FreeMem
CSH.Quit >LDA.G CSH.hSymbols
>SYSCALL SListFree
.1 >LDA.G CSH.hStack
beq .2
>SYSCALL FreeMem
>LDA.G hFileBuf
jsr .7
>LDA.G CSH.hStack
jsr .7
.2 >LDA.G CSH.hData
beq .3
>SYSCALL FreeMem
>LDA.G CSH.hConst
jsr .7
.3 >LDA.G CSH.hSymbols
beq CSH.Quit.RTS
.7 beq CSH.Quit.RTS
>SYSCALL FreeMem
CSH.Quit.RTS rts
@ -86,7 +60,7 @@ CSH.Run jsr CSH.GetCharNB
tax
jmp (J.CSH.KW.END,x)
.1 cmp #$0D
.1 cmp #C.CR
bne .2
jmp CSH.GetNextCharNB Skip CR and exit
@ -112,7 +86,7 @@ CSH.Run jsr CSH.GetCharNB
jmp (J.CSH.KW,x)
.4 jsr CSH.GetVar
.4 jsr CSH.GetVarValue
bcs .5
jsr CSH.GetCharNB
@ -135,14 +109,10 @@ CSH.Run jsr CSH.GetCharNB
jmp CSH.GetNextCharNB Skip ;
.5 >LDYA L.CSH.FN
jsr CSH.LookupFn
bcs .99
>STZ.G CSH.ACCT no retrun value type check required
jsr CSH.FnEval
.5 lda #0 no return value type check required
jsr CSH.FnEval X = function index
bcs .9
jmp CSH.GetNextCharNB Skip ;
.99 lda #CSH.E.SYNTAX
@ -159,6 +129,8 @@ CSH.Run jsr CSH.GetCharNB
clc
rts
*--------------------------------------
* Built in Keywords
*--------------------------------------
CSH.WHILE
CSH.IF jsr CSH.GetCharNB
bcs .9
@ -259,9 +231,11 @@ CSH.CONTINUE
sec
rts
*--------------------------------------
* Built in Types
*--------------------------------------
CSH.SIGNED jsr CSH.GetChar
bcs .9
cmp #' '
cmp #C.SPACE
bne .9
jsr CSH.GetNextCharNB
@ -280,7 +254,7 @@ CSH.SIGNED jsr CSH.GetChar
*--------------------------------------
CSH.UNSIGNED jsr CSH.GetChar
bcs .9
cmp #' '
cmp #C.SPACE
bne .9
jsr CSH.GetNextCharNB
@ -297,25 +271,27 @@ CSH.UNSIGNED jsr CSH.GetChar
sec
rts
*--------------------------------------
CSH.CHAR lda #CSH.T.CHAR
CSH.CHAR ldx #CSH.T.CHAR
bra CSH.TYPE
CSH.UCHAR lda #CSH.T.UCHAR
CSH.UCHAR ldx #CSH.T.UCHAR
bra CSH.TYPE
CSH.INT lda #CSH.T.INT
CSH.INT ldx #CSH.T.INT
bra CSH.TYPE
CSH.UINT lda #CSH.T.UINT
CSH.UINT ldx #CSH.T.UINT
bra CSH.TYPE
CSH.LONG lda #CSH.T.LONG
CSH.LONG ldx #CSH.T.LONG
bra CSH.TYPE
CSH.ULONG lda #CSH.T.ULONG
CSH.ULONG ldx #CSH.T.ULONG
bra CSH.TYPE
CSH.FLOAT lda #CSH.T.FLOAT
CSH.FLOAT ldx #CSH.T.FLOAT
CSH.TYPE >STA.G CSH.ACCT
CSH.TYPE stx ZPVarType
jsr CSH.GetChar
bcs .9
cmp #' '
cmp #C.SPACE
bne .9
jsr CSH.GetNextCharNB
@ -324,11 +300,11 @@ CSH.TYPE >STA.G CSH.ACCT
jsr CSH.IsLetter
bcs .9
jsr CSH.GetVar Already exists ?
bcc .90
txa VAR TYPE
jsr CSH.AddVar add with undefined value...
bcs .99 OOM or DUP
jsr CSH.AddVar No, add with undefined value...
bcs .99
>STYA ZPVarID
jsr CSH.GetCharNB
bcs .9
@ -341,6 +317,7 @@ CSH.TYPE >STA.G CSH.ACCT
jsr CSH.GetNextCharNB
bcs .9
lda ZPVarType
jsr CSH.ExpEval
bcs .99
@ -364,29 +341,134 @@ CSH.TYPE >STA.G CSH.ACCT
sec
.99 rts
*--------------------------------------
CSH.ExpEval jsr CSH.ZeroACC
* Input:
* ZPFileBufPtr, A = Expected type
* Output:
* CS, A = EC
* CC, A, Y,A or x bytes on Stack
*--------------------------------------
CSH.FnEval ldx ZPPtr1
phx
ldx ZPPtr1+1
phx
ldx ZPPtr2
phx
sta ZPPtr2 save Type
>LDYA L.CSH.FN
jsr CSH.LookupFn
phx X = function index
bcs .90
>STYA ZPPtr1 f() definition, starting at returned type
jsr CSH.GetCharNB
bcs .90
cmp #'('
bne .90
jsr CSH.GetNextCharNB skip '('
bcs .90
lda ZPPtr2 Expected type in 0, ignore
beq .1
cmp (ZPPtr1) Get Return value Type
bne .91
.1 inc ZPPtr1 advance to arg list type
bne .2
inc ZPPtr1+1
.2 lda (ZPPtr1) get type of next arg
beq .7 end of list, go check ending ')'
.3 eor #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0
beq .4
lda (ZPPtr1) get type again...
inc ZPPtr1
bne .4
inc ZPPtr1+1
.4 jsr CSH.ExpEval
bcs .9
lda (ZPPtr1) no more arg in fn definition
beq .7
.5 jsr CSH.GetCharNB
bcs .9
cmp #','
bne .90
jsr CSH.GetNextCharNB Skip ,
lda (ZPPtr1)
bne .3 Another ARG....
bra .9
.7 jsr CSH.GetCharNB
bcs .90
cmp #')'
bne .90
jsr CSH.GetNextCharNB Skip )
jsr .9
jmp (J.CSH.EXEC,x)
.90 lda #CSH.E.SYNTAX
.HS 2C BIT ABS
.91 lda #CSH.E.TMISMATCH
sec
.9 plx
stx ZPPtr2
plx
stx ZPPtr1+1
plx
stx ZPPtr1
plx
.99 rts
*--------------------------------------
* Input:
* ZPFileBufPtr, A = Expected type
* Output:
* CS, A = EC
* CC, A, Y,A or x bytes on Stack
*--------------------------------------
CSH.ExpEval ldx ZPPtr2
phx
ldx ZPPtr2+1 One local : BOP1
phx
sta ZPPtr2 save Type
jsr CSH.ZeroACC
.10 lda #$ff
>STA.G CSH.EXPBOP1 Reset BOP1
sta ZPPtr2+1 Reset BOP1
jsr CSH.GetCharNB
bcs .9
jsr CSH.IsLetter Fnc or Var ?
.20 jsr CSH.IsLetter Fnc or Var ?
bcs .2
jsr CSH.GetVar
jsr CSH.GetVarValue
bcs .1
jsr CSH.LoadACCFromVar
bcs .9
bra .11
.1 >LDYA L.CSH.FN
jsr CSH.LookupFn
bcs .9
jsr CSH.FnEval
.1 jsr CSH.FnEval X = function index
bcs .99
bra .11
@ -399,6 +481,8 @@ CSH.ExpEval jsr CSH.ZeroACC
.11 jsr CSH.GetCharNB
bcs .9
cmp #','
beq .8
cmp #')'
beq .8
cmp #';'
@ -411,19 +495,17 @@ CSH.ExpEval jsr CSH.ZeroACC
jsr CSH.LookupOP
bcs .9
>LDA.G CSH.EXPBOP1 previous OP...
lda ZPPtr2+1 previous OP...
bpl .5 go check precedence
txa
>STA.G CSH.EXPBOP1
stx ZPPtr2+1
jsr CSH.ACC2ARG
jsr CSH.GetCharNB
bcc .10 go check for an ARG
bcc .20 go check for an ARG
bra .9
.3 >DEBUG
cmp #'"' String litteral
.3 cmp #'"' String literal
bne .9
@ -434,13 +516,16 @@ CSH.ExpEval jsr CSH.ZeroACC
jmp .11
.9 lda #CSH.E.SYNTAX
.9 plx
stx ZPPtr2+1
plx
stx ZPPtr2
lda #CSH.E.SYNTAX
sec
.99 rts
.5 txa
>STA.G CSH.EXPBOP2
>CMP.G CSH.EXPBOP1
.5 cpx ZPPtr2+1
bcs .6
* new OP has precedence, stack ACC
@ -450,7 +535,7 @@ CSH.ExpEval jsr CSH.ZeroACC
jmp .10
* Old OP has precedence, compute ACC=ARG <BOP> ACC
.6 >LDA.G CSH.EXPBOP1
.6 lda ZPPtr2+1
jsr CSH.Compute
bcs .9
@ -458,12 +543,17 @@ CSH.ExpEval jsr CSH.ZeroACC
bcs .9
jmp .10
.8 >LDA.G CSH.EXPBOP1
.8 lda ZPPtr2+1
bmi .80
jmp CSH.Compute
.80 clc
.80 plx
stx ZPPtr2+1
plx
stx ZPPtr2
clc
rts
*--------------------------------------
CSH.AddContCharP
@ -483,12 +573,15 @@ CSH.AddContCharP
.2 lda #0
sta (ZPCSHConst),y
lda ZPCSHConst
pha
lda ZPCSHConst+1
pha
phy
tya
lda #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
>STA.G CSH.ACCT
>LDYA ZPCSHConst
>STYA.G CSH.ACC
pla
sec
adc ZPCSHConst
sta ZPCSHConst
@ -496,8 +589,8 @@ CSH.AddContCharP
inc ZPCSHConst+1
.3 pla
ply
.3 jsr CSH.GetNextCharNB Skip "
clc
rts
@ -505,77 +598,6 @@ CSH.AddContCharP
sec
rts
*--------------------------------------
CSH.FnEval jsr CSH.GetCharNB
bcs .9
cmp #'('
bne .9
>LDA.G CSH.ACCT Match with ACC ?
beq .10 ACC is VOID
cmp (ZPFnDefPtr) Get Return value Type
bne .99
.10 jsr CSH.GetNextCharNB skip '('
bcs .9
jsr CSH.PushACCT Save Acc & T on stack
.1 inc ZPFnDefPtr advance to arg list type
bne .2
inc ZPFnDefPtr+1
.2 lda (ZPFnDefPtr)
beq .7 end of list, go check no more
.20 jsr CSH.ExpEval
bcs .90
lda (ZPFnDefPtr)
cmp #CSH.T.VARIADIC
bne .3
bra *
.3 >CMP.G CSH.ACCT Match with ACC ?
bne .99
inc ZPFnDefPtr advance to next arg
bne .4
inc ZPFnDefPtr+1
.4 lda (ZPFnDefPtr) no more arg in fn definition
beq .7
jsr CSH.GetNextCharNB
bcs .9
cmp #','
bne .9
jsr CSH.GetNextCharNB
bra .20
.7 jsr CSH.GetCharNB
bcs .9
cmp #')'
bne .9
jsr CSH.GetNextCharNB Skip )
* TO DO : Execute
clc
rts
.9 lda #CSH.E.SYNTAX
sec
.90 rts
.99 lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
CSH.SavePtr >LDYA ZPFileBufPtr
>STYA.G CSH.BufPtrSave
rts
@ -632,25 +654,20 @@ CSH.Lookup phy Y = len
.31 lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPFnDefPtr
tay
lda ZPPtr1+1
adc #0
inc ZPFnDefPtr+1
clc
clc Y,A = F() def, X = F() index
.8 rts
.4 inx
inx
lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
bcc .5
inc ZPPtr1+1
lda (ZPPtr1)
jsr CSH.ZPPtr1AddAp1
.5 >LDA.G CSH.LookupOpt
>LDA.G CSH.LookupOpt
bpl .1
ldy #$ff
@ -659,11 +676,7 @@ CSH.Lookup phy Y = len
bne .6
tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
jsr CSH.ZPPtr1AddAp1
bra .1
.9 pla
@ -686,7 +699,7 @@ CSH.GetNumInACC >LDA.G CSH.ACCT
>LDYA ZPFileBufPtr
>SYSCALL StrToF
bcs .9
* bcs .9
>PULLF.G CSH.ACC
clc
rts
@ -728,162 +741,76 @@ CSH.ACC2ARG >LEA.G CSH.ACCT
rts
*--------------------------------------
* Vars...
* Input : ZPFileBufPtr, A = Var Type, Value on Stack
* Output : Y,A = ZPVarID
*--------------------------------------
CSH.AddVar jsr CSH.GetIDLen
sec
>ADC.G CSH.SymbolsPtr Enough room to store this symbol ?
bcs .99
adc #1 Add One Byte for storing Ptr to DATA
bcs .99 Out of Symbols space
>LDA.G CSH.DataPtr
pha
>LDA.G CSH.ACCT
tax
sec +1 for Type
adc CSH.TSIZE,x
bcs .98 Out of Data Space
CSH.AddVar sta ZPVarType
>LDA.G CSH.SymbolsPtr
pha
jsr CSH.GetIDLen
>PUSHW ZPFileBufPtr
>LDA.G CSH.hSymbols
>SYSCALL SListNewKey
bcs .9
ply
sta (ZPCSHSymbols),y
iny
jsr CSH.GetChar
.1 sta (ZPCSHSymbols),y Store this symbol....
iny
jsr CSH.GetNextChar
jsr CSH.IsLetterOrDigit
bcc .1
pla Get Back Data Ptr
pha
sta (ZPCSHSymbols),y
iny
tya
>STA.G CSH.SymbolsPtr Mark new end of Symbols
pla Get again Data Ptr
clc
adc ZPCSHData
sta ZPCSHValue
lda #0
adc ZPCSHData+1
sta ZPCSHValue+1
>LDA.G CSH.ACCT
sta (ZPCSHValue)
>STYA ZPVarID
txa
* clc
rts
.98 pla
.99 lda #CSH.E.OOM
sec
rts
*--------------------------------------
CSH.GetVar >LDYA ZPCSHSymbols
>STYA ZPPtr1
jsr CSH.GetIDLen
tax Save len
.1 lda (ZPPtr1)
beq .9
txa Get back len
cmp (ZPPtr1)
bne .3
tay
.2 lda (ZPPtr1),y
dey
cmp (ZPFileBufPtr),y
bne .3
tya
bne .2
lda (ZPPtr1)
inc
tay
lda (ZPPtr1),y Get Ptr to DATA
clc
adc ZPCSHData
sta ZPCSHValue
lda #0
adc ZPCSHData+1
sta ZPCSHValue+1
txa Get back len
clc
adc ZPFileBufPtr
sta ZPFileBufPtr
bcc .8
bcc .1
inc ZPFileBufPtr+1
.1 ldy #2
clc
.8 rts
.3 lda (ZPPtr1)
sec
adc ZPPtr1
sta ZPPtr1
bcc .4
inc ZPPtr1+1
.4 inc ZPPtr1 Skip Pointer to TYPE/DATA
bne .1
inc ZPPtr1+1
bra .1
.9 sec
rts
*--------------------------------------
CSH.LoadACCFromVar
>LDA.G CSH.ACCT
cmp (ZPCSHValue)
bne .9
lda ZPVarType
>PUSHA Push Var Type On stack...
and #CSH.Q.PPPOINTER
bne .2 Pointer, always 2 bytes
lda ZPVarType
and #$1f
tax
lda CSH.TSIZE,x
tax Byte count to transfer
>LEA.G CSH.ACC
>STYA ZPPtr1
ldy #1
ldy CSH.TSIZE,x
.1 lda (ZPCSHValue),y
sta (ZPPtr1)
inc ZPPtr1
bne .2
inc ZPPtr1+1
.2 iny +1 for Type
lda #0
.2 iny
dex
bne .1
>PUSHYA DataLen
>PUSHW pStack
>PUSHW ZPVarID
>LDA.G CSH.hSymbols
>SYSCALL SListAddData
bcs .9
clc
rts
>LDYA ZPVarType
.9 lda #CSH.E.TMISMATCH
sec
rts
.9 rts
*--------------------------------------
* Input : ZPFileBufPtr, A = Var Type
* Output : Value on Stack
*--------------------------------------
CSH.GetVarValue
sta ZPVarType
>PUSHW ZPFileBufPtr
>LDA.G CSH.hSymbols
>SYSCALL SListLookup
bcs .9
>STYA ZPVarID
txa
* clc
adc ZPFileBufPtr
sta ZPFileBufPtr
bcc .1
inc ZPFileBufPtr+1
.1
.9 rts
*--------------------------------------
CSH.StoreACCToVar
>LDA.G CSH.ACCT
@ -944,7 +871,6 @@ CSH.IsACC0 >LDA.G CSH.ACCT
rts
*--------------------------------------
CSH.Compute tax
jmp (J.CSH.BOPS,x)
*--------------------------------------
CSH.BOPS.ADD
@ -964,7 +890,7 @@ CSH.BOPS.SUB >LDA.G CSH.ACCT
.8 >PUSHF.G CSH.ACC
>PUSHF.G CSH.ARG
>SYSCALL FSUB
>FPU FSUB
bcs .9
>PULLF.G CSH.ACC
@ -983,11 +909,11 @@ CSH.BOPS.DIV >LDA.G CSH.ACCT
clc
rts
.8 >PUSHEA.G CSH.ACC
>PUSHEA.G CSH.ARG
>LEA.G CSH.ACC
>SYSCALL FDIV
.8 >PUSHF.G CSH.ACC
>PUSHF.G CSH.ARG
>FPU FDIV
>PULLF.G CSH.ACC
clc
rts
CSH.BOPS.MOD
CSH.BOPS.SHL
@ -1010,9 +936,6 @@ CSH.BOPS.LOR
*--------------------------------------
* Stack
*--------------------------------------
CSH.PushACCT
CSH.Push pha
>LDA.G CSH.StackPtr
inc
@ -1169,6 +1092,32 @@ CSH.IsDigit10 cmp #'0'
.9 sec
rts
*--------------------------------------
* EXEC
*--------------------------------------
EXEC.printf >LDYA.G CSH.ACC
>SYSCALL printf
bcs .9
>STYA.G CSH.ACC
.9 rts
*--------------------------------------
EXEC.puts >LDYA.G CSH.ACC
>SYSCALL puts
bcs .9
>STYA.G CSH.ACC
.9 rts
*--------------------------------------
EXEC.cos >FPU COS
>PULLF.G CSH.ACC
rts
*--------------------------------------
EXEC.getchar >SYSCALL getchar
>STA.G CSH.ACC
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/CSH.S.CORE
LOAD USR/SRC/BIN/CSH.S

View File

@ -17,18 +17,19 @@ NEW
.DUMMY
.OR ZPBIN
ZS.START
ZPFileBuf .BS 2
ZPFileBufPtr .BS 2
ZPCSHConst .BS 2
ZPCSHStack .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ZPFileBuf .BS 2
ZPFileBufPtr .BS 2
ZPFnDefPtr .BS 2
ZPCSHSymbols .BS 2
ZPCSHConst .BS 2
ZPCSHData .BS 2
ZPCSHValue .BS 2
ZPCSHStack .BS 2
ZPVarID .BS 2
ZPVarType .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -142,6 +143,7 @@ PrintErrMsg >LDYA ZPFileBuf
.2 lda (ZPPtr1)
beq .6 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
@ -208,6 +210,7 @@ CS.END
MSG.Greetings .AZ "\r\nCSH-Shell %d.%d\r\n\r\n"
MSG.ECHOCRLF .AZ "\r\n"
MSG.ERR .AZ "^\r\nLine #%D:"
*--------------------------------------
.INB USR/SRC/BIN/CSH.I
*--------------------------------------
.DUMMY

View File

@ -42,16 +42,14 @@ Prompt.Editor cmp #C.DEL
bcs .9
.8 clc
rts
.9 rts
.3 asl
tax
jmp (J.CTRL,x)
.9 rts
*--------------------------------------
Ctrl.DEL jsr BUF.ComputeCOffset
lda BUF.COffset
ora BUF.COffset+1 No Backspace possible
beq .8
@ -520,23 +518,21 @@ Ctrl.Z jsr BUF.ComputeCOffset
bcc Ctrl.Z.1
clc
rts
Ctrl.Z.RTS rts
Ctrl.Z.1 jsr BUF.DelCharAtCursor
bcs .9
bcs Ctrl.Z.RTS
cmp #C.CR did we DEL a CR ?
bne .1
jsr SCRN.UpdateMain
bcs .9
bcs Ctrl.Z.RTS
jmp SCRN.UpdateStatusBar
.1 jsr SCRN.UpdateCurrentLine
bcs .9
bcs Ctrl.Z.RTS
jmp SCRN.UpdateStatusBar
.9 rts
*--------------------------------------
Prompt.Help >STZ.G PromptMode

View File

@ -137,7 +137,7 @@ SCRN.UpdateLineAtALenY
ldx #0
tay
jsr GotoXY
bcs .9
bcs SCRN.UpdateMain.9
>LDYA LineBufPtr
>STYA ZPPTR1
@ -179,13 +179,19 @@ SCRN.UpdateLineAtALenY
jsr SCRN.ToggleSel
.5 lda (BufPtr)
jsr SCRN.ToLineBuf
cmp #'\'
beq .50
cmp #'%'
bne .51
.50 pha
lda #'\'
jsr SCRN.ToLineBuf
pla
.51 inc BufPtr
.51 jsr SCRN.ToLineBuf
inc BufPtr
bne .6
inc BufPtr+1

View File

@ -8,7 +8,8 @@ AUTO 4,1
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/MLI.E.I
.INB INC/KERNEL.I
.INB INC/LIBBLKDEV.I
*--------------------------------------
.DUMMY
@ -36,16 +37,18 @@ CS.START cld
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBBLKDEV .DA LIBBLKDEV
L.MSG.USAGE .DA MSG.USAGE
L.MSG.INIT .DA MSG.INIT
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
L.MSG.NOSIZE .DA MSG.NOSIZE
L.MSG.INIT .DA MSG.INIT
L.FMT.BLANK .DA FMT.BLANK
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.ARGC
@ -165,49 +168,13 @@ CS.RUN.InitCat >LDA.G CatSize
.1 >LDA.G VolName
bne .8 Volume name ok
ldx #$ff
ldy #VolName-1
.2 inx
iny
lda BLANK,x
sta (pData),y
bne .2
lda A2osX.TIMER16
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda A2osX.TIMER16+1
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda A2osX.RANDOM16
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda A2osX.RANDOM16+1
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda #0
sta (pData),y
>PUSHW A2osX.TIMER16
>PUSHW A2osX.RANDOM16
>PUSHBI 4
>PUSHW L.FMT.BLANK
>LEA.G VolName
>SYSCALL sprintf
rts
.8 clc
rts
@ -217,8 +184,21 @@ CS.RUN.BuildCat >PUSHEA.G DIB
>SYSCALL GetDevStatus
bcs .99
>PUSHEA.G VolName
>LDA.G DIB+S.DIB.SIZE
iny
ora (pData),y
bne .1
>PUSHBI 0
>LDYA L.MSG.NOSIZE
>SYSCALL printf
lda #MLI.E.IO
sec
rts
.1 >PUSHEA.G VolName
>PUSHW.G DIB+S.DIB.SIZE
>PUSHW ZPPtrDevName
@ -298,39 +278,22 @@ CS.QUIT >LDA.G hBuf
.8 clc
rts
*--------------------------------------
A2CharAX pha
lsr
lsr
lsr
lsr
ora #$30
cmp #'9'+1
bcc .1
adc #6
.1 tax
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .8
adc #6
.8 rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "Ll"
OptionVars .DA #bLL,#bLL
LIBBLKDEV .AZ "libblkdev"
hLIBBLKDEV .BS 1
*--------------------------------------
MSG.USAGE .AS "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n"
.AS " -L : Low-Level Format\r\n"
.AZ " -1-9 : Catalog Size (Blocks)\r\n"
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n"
MSG.NOSIZE .AZ "Unable to get media size."
MSG.INIT .AZ "Formatting %s (%D Blks),Volname:%s..."
FMT.BLANK .AZ "BLANK%H%H"
*--------------------------------------
LIBBLKDEV .AZ "libblkdev"
BLANK .AZ "BLANK"
hLIBBLKDEV .BS 1
OptionList >PSTR "Ll"
OptionVars .DA #bLL,#bLL
*--------------------------------------
.DUMMY
.OR 0

View File

@ -176,7 +176,10 @@ CS.RUN.DEV lda #E.BADPATH
sec
rts
*--------------------------------------
CS.RUN.DIR lda (ZPFileName)
CS.RUN.DIR >LDA.G bRecurse
bpl .8
lda (ZPFileName)
cmp #'.'
beq .8
@ -191,12 +194,8 @@ CS.RUN.DIR lda (ZPFileName)
jsr CS.RUN.CheckErr
>LDA.G bRecurse
bpl .8
>LDYA ZPFileName
jsr EnterSubDirYA
rts
jmp EnterSubDirYA
.8 clc
.9 rts

View File

@ -46,8 +46,7 @@ Dev.Detect >LDYA L.MSG.DETECT
cmp #MACHID.T.IIc
bne .1
lda #$80
sta DCB+S.DCB.GFX.S $80=//c
* stz DCB+S.DCB.GFX.S //c : 80c Mode
>LDYA L.MSG.DETECT.IIC
@ -82,6 +81,8 @@ Dev.Detect >LDYA L.MSG.DETECT
sta CLRPAGE2
sty $400 Set back Main $400
sta TXT16.OFF
plp
>LDYA L.MSG.DETECT.EVE
@ -124,7 +125,7 @@ Dev.Detect >LDYA L.MSG.DETECT
.9 rts
*--------------------------------------
ClrScr ldx #0
lda #0
txa lda #0
.1 ldy BASEL,x
sty ZPPtr
@ -155,9 +156,9 @@ ClrScr ldx #0
*--------------------------------------
CS.END
MSG.DETECT .AZ "Apple IIe/IIc DHGR Driver."
MSG.DETECT.IIC .AZ "Apple //c detected, Assuming 'Le Chat Mauve' Mode."
MSG.DETECT.EVE .AZ "'Le Chat Mauve EVE' Board Detected."
MSG.DETECT.80C .AZ "No Specific H/W Found, Assuming 80c Mode."
MSG.DETECT.IIC .AZ "Apple //c : 'LCM Feline/80c' Mode."
MSG.DETECT.EVE .AZ "Apple //e : 'LCM Eve' Board Detected."
MSG.DETECT.80C .AZ "No Specific H/W Found, 'Video7 80c' Mode."
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
@ -343,14 +344,14 @@ CONTROL lda DCB+S.DCB.GFX.DEVID NON STANDARD
sta A2osX.ASCREEN
ldy #0
bit DCB+S.DCB.GFX.S
bmi .1 //c,EVE mode
bpl .1 //c,EVE mode
ldy #CONTROL.LCM-CONTROL.80C
ldy #CONTROL.EVE-CONTROL.80C
.1 ldx CONTROL.SWTCHES,y
bmi .8 Ending $ff
.1 ldx CONTROL.80C,y
beq .8 Ending 0
sta $C000,x
@ -474,76 +475,34 @@ DRV.CS.END
*--------------------------------------
.INB USR/SRC/DRV/DHGR.DRV.G
*--------------------------------------
CONTROL.SWTCHES
* sta CLRTEXT
* sta CLRMIXED
* sta SETHIRES
* sta CLR80STORE
* sta CLRPAGE2
* sta SETIOUDIS
CONTROL.80C
* sta CLRMIXED STA $CO52 ;Full Screen
* sta SETHIRES STA $C057 ;HIRES
* sta CLRTEXT STA $C050 ;Graphics
* sta CLR80DISP STA $C00C ;80 Columns OFF
* sta SETDHIRES STA $C05E ;AN3 OFF
* sta CLRDHIRES STA $C05F ;AN3 ON
* sta SETDHIRES STA $C05E ;AN3 OFF
* sta CLRDHIRES STA $C05F ;AN3 ON
* sta SET80DISP STA $C00D ;80 Columns ON
* sta SETDHIRES STA $C05E ;AN3 OFF
* sta CLRDHIRES STA $C05F ;AN3 ON
* sta SETDHIRES STA $C05E ;AN3 OFF
CONTROL.80C .DA #SETIOUDIS
.DA #CLRTEXT
* .DA #CLRMIXED
.DA #SETHIRES
* .DA #CLR80STORE
* .DA #CLRPAGE2
.DA #SETIOUDIS
.DA #CLR80DISP
.DA #SETDHIRES
.DA #CLRDHIRES
.DA #SETDHIRES
.DA #CLRDHIRES
.DA #SET80DISP
.DA #SETDHIRES
.DA #CLRDHIRES
.DA #SETDHIRES
.DA #$FF
CONTROL.LCM
* sta CLRTEXT
* sta CLRPAGE2
* sta CLRMIXED
* sta SETHIRES
* sta CLRAN2
* sta CLR80DISP
* sta SETDHIRES
* sta CLRDHIRES
* sta SET80DISP
* sta SETDHIRES
* sta CLRDHIRES
* sta SETDHIRES
.DA #CLRTEXT
* .DA #CLRMIXED
.DA #SETHIRES
* .DA #CLR80STORE
* .DA #CLRPAGE2
.DA #SETIOUDIS
.DA #CLRAN2
.DA #CLR80DISP
.DA #SETDHIRES
.DA #CLRDHIRES
.DA #SETAN3
.DA #CLRAN3
.DA #SETAN3
.DA #CLRAN3
.DA #SET80DISP
.DA #SETDHIRES
.DA #CLRDHIRES
.DA #SETDHIRES
.DA #$ff
.DA #SETAN3
.DA #CLRAN3
.DA #SETAN3
.DA #0
CONTROL.EVE .DA #SETIOUDIS
.DA #CLRTEXT
.DA #SETHIRES
.DA #HR1.OFF
.DA #HR2.ON
.DA #HR3.ON
.DA #0
*--------------------------------------
Shift.L.LO .BS 6
Shift.L.HI .BS 6
@ -574,7 +533,7 @@ DIB .DA #0
*--------------------------------------
DCB .DA #S.DCB.T.GFX
.BS 1 DEV.ID
.BS 1 STATUS
.DA #0 S.DCB.GFX.S default to 0
.DA #S.CB.M.MONO+S.CB.M.C16 F
.DA 560 W
.DA 192 H

View File

@ -41,6 +41,7 @@ RD80DISP .EQ $C01F R
*TAPEOUT .EQ $C020 W
SPEAKER .EQ $C030 W, toggle speaker diaphragm
*STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
*RDVBLIIC .EQ $C05A R, VBL switch Status (IIc)
*EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version
@ -58,10 +59,11 @@ SETHIRES .EQ $C057 W
*SETAN1 .EQ $C05A W, Set annunciator-1 output to 0
*CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1
*SETAN2 .EQ $C05C W, Set annunciator-2 output to 0
CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
*SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
*CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
*CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
*DISVBLIIC .EQ $C05A W, Disable VBL switch (IIc)
*ENBVBLIIC .EQ $C05B W, Enable VBL switch (IIc)
SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires
CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
@ -11,16 +10,15 @@ AUTO 4,1
.INB INC/MLI.I
.INB INC/LIBBLKDEV.I
*--------------------------------------
* NIBBLE track len = $1A00 (6656) bytes:
*
* NIBBLE track len = $1A00 (6656) bytes
*--------------------------------------
GAP1 .EQ 48
GAP2 .EQ 6
GAP3 .EQ 27
*--------------------------------------
Status.PrvDrvOff .EQ $80 Waiting old drive stop spining
Status.DrvOn .EQ $81 Waiting target drive spin
Status.seek .EQ $82 target drive seeking
Status.PrvDrvOff .EQ $80 Waiting old drive stop spining
Status.DrvOn .EQ $81 Waiting target drive spin
Status.seek .EQ $82 target drive seeking
*--------------------------------------
D2Ph0Off .EQ $C080
D2Ph0On .EQ $C081
@ -32,6 +30,7 @@ D2Ph3Off .EQ $C086
D2Ph3On .EQ $C087
D2DrvOff .EQ $C088
D2DrvOn .EQ $C089
D2DrvSel1 .EQ $C08A
D2DrvSel2 .EQ $C08B

View File

@ -67,6 +67,10 @@ K.GetDevStatus tax
K.GetDevStatus.I
sta K.S.IOCTL+S.IOCTL.STATCODE
ldy #S.FD.DEV.DEVID
lda (pFD),y
sta K.S.IOCTL+S.IOCTL.UNITNUM
jsr K.IOCTL.GetPDrv
>LDYAI K.S.IOCTL