Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-04-10 19:17:40 +02:00
parent 63486817ca
commit ee7a7b07a4
21 changed files with 562 additions and 519 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -95,16 +95,6 @@ CODE.FPRINTL ldx #0
rts
*--------------------------------------
CODE.FPRINTCR ldx #0
.1 lda CCODE.FPRINTCR,x
jsr CODE.EmitByte
inx
cpx #CCODE.FPRINTCR.LEN
bne .1
rts
*--------------------------------------
CODE.FPUCALL lda #$A2 LDX #imm
jsr CODE.EmitByte
txa
@ -116,6 +106,16 @@ CODE.FPUCALL lda #$A2 LDX #imm
lda /A2osX.FPUCALL
bra CODE.EmitByte
*--------------------------------------
CODE.FPRINTCRLF ldx #C.CR
jsr CODE.PutChar
ldx #C.LF
*--------------------------------------
CODE.PutChar lda #$A9 LDA #imm
jsr CODE.EmitByte
txa
jsr CODE.EmitByte
ldx #SYS.PutChar
*--------------------------------------
CODE.SYSCALL lda #$A2 LDX #imm
jsr CODE.EmitByte
txa

View File

@ -78,7 +78,7 @@ CORE.Compile jsr CORE.GetChar
beq .80 Comment: skip line...
cmp #C.CR
beq .81 Blank line...
beq .88 EOL
jsr CORE.CheckCharNB
bcs .1 CS=SPACE -> go check VAR or KW
@ -94,6 +94,8 @@ CORE.Compile jsr CORE.GetChar
.1 jsr CORE.GetNextCharNB skip SPACE(s) or ":"
bcs .99
cmp #C.CR
beq .88 EOL
jsr CORE.IsLetter
bcs .90
@ -124,15 +126,15 @@ CORE.Compile jsr CORE.GetChar
.8 jsr CORE.GetCharNB
bcs .99
jsr CORE.IsEndInst
bcc .90
cmp #':'
beq .1
clc
cmp #C.CR
bne .90
.81 jmp CORE.GetNextChar skip char
.88 clc
jmp CORE.GetNextChar skip char
.80 jmp CORE.SkipLine
@ -161,11 +163,11 @@ CORE.Run lda #$60 RTS
sta ZPPtr2
lda ZPPtr1+1
sbc ZPCodeBufPtr
sta ZPPtr1+2
sbc ZPCodeBufPtr+1
sta ZPPtr2+1
>PUSHW L.MSG.RUN
>PUSHW ZPPtr1
>PUSHW ZPPtr2
>PUSHBI 2
>SYSCALL PrintF
* >DEBUG
@ -356,7 +358,10 @@ CORE.IsAOPSChar ldx #0
* clc
rts
*--------------------------------------
CORE.IsEndExp cmp #','
CORE.IsEndExp cmp #')'
beq CORE.ToUpperCase.RTS
cmp #','
beq CORE.ToUpperCase.RTS
cmp #';'

View File

@ -5,48 +5,120 @@ NEW
* In: A = current CHAR
* Out: CC, longint on stack
*--------------------------------------
EXP.Eval ldx #$FF
stx EXP.AOPS1
stx EXP.AOPS2
EXP.Eval lda EXP.AOPS
pha
.10 jsr CORE.IsLetter
bcc .1 FN or VAR
jsr CORE.IsDigit10
bcs .9
jsr EXP.Int32
lda #$FF
>PUSHA Previous OP = none
*--------------------------------------
.10 jsr CORE.GetCharNB
bcs .39
.11 cmp #'('
bne .20
jsr CORE.GetNextCharNB skip (
bcs .90
jsr EXP.Eval
bcs .99
bra .5
jsr CORE.GetCharNB
bcs .90
cmp #')'
bne .90
jsr CORE.GetNextCharNB skip )
bra .41
*--------------------------------------
.1 >LDYA L.ACOS.FN
.20 jsr CORE.IsLetter
bcs .30 FN or VAR
>LDYA L.ACOS.FN
jsr CORE.Lookup
bcs .3
bcs .21
jsr EXP.FNjmpX
bcs .99
bra .40
bra .5
*--------------------------------------
.3 jsr EXP.VARLookup
.21 jsr EXP.VARLookup
bcs .99
>LDYA EXP.ADDR
jsr CODE.PUSHfYA
*--------------------------------------
.5 jsr CORE.GetCharNB
bcs .7
jsr CORE.IsEndExp
bcs .7
bra .40
*--------------------------------------
.30 jsr CORE.IsDigit10
.39 bcs .90
jsr EXP.Int32
bcs .99
*--------------------------------------
.40 jsr CORE.GetCharNB
.41 bcs .80
.50 jsr CORE.IsEndExp
bcs .80
jsr CORE.IsAOPSChar + - * /
bcc .6
jsr EXP.GetOP
bcs .90
stx EXP.AOPS
.61 lda (pStack) get op context
bmi .62 no prev op, go get arg2
cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2
bcc .62
inc pStack prev op has precedence
tax
jsr EXP.OPjmpX go compute (arg1 op1 arg2)
.62 lda EXP.AOPS we must compute arg2 op2 arg3 before
>PUSHA
.63 jsr CORE.GetNextCharNB
bcc .11
bcs .90
*--------------------------------------
.80 >PULLA
tax
bmi .88 nothing to do
jsr EXP.OPjmpX
bra .80
.90 lda #E.ESYN
.99 tay Save Err code
>PULLA
tax
bpl .99
sec
.HS 90 BCC
.88 clc
pla
sta EXP.AOPS
tya
rts
*--------------------------------------
EXP.FNjmpX jmp (J.ACOS.FN,x)
EXP.OPjmpX jmp (J.ACOS.AOPS,x)
*--------------------------------------
EXP.GetOP jsr CORE.IsAOPSChar + - * /
bcc .9
>LDYA L.ACOS.AOPS MOD
jsr CORE.Lookup
@ -56,33 +128,8 @@ EXP.Eval ldx #$FF
* clc
adc #ACOS.AOPSChars.Cnt*2
tax
lda EXP.AOPS1
bmi .6
cpx EXP.AOPS1
.6 stx EXP.AOPS1
jsr CORE.GetNextCharNB
bcs .9
jmp .10
.7 ldx EXP.AOPS1
bmi .8
jsr EXP.AOPSjmpX
.8 clc
rts
.9 lda #E.CSYN
.99 rts
*--------------------------------------
EXP.FNjmpX jmp (J.ACOS.FN,x)
EXP.AOPSjmpX jmp (J.ACOS.AOPS,x)
.9 rts
*--------------------------------------
EXP.Int32 >PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr

View File

@ -18,30 +18,42 @@ KW.FLAG
KW.FOR
KW.FREE
KW.GET
KW.GOSUB
clc
lda #E.CSYN
sec
rts
*--------------------------------------
KW.GOTO jsr CORE.GetNextCharNB
KW.GOSUB sec
.HS 90 CLC
*--------------------------------------
KW.GOTO clc
php
jsr CORE.GetNextCharNB
bcs .90
>LDA.G hLabels
jsr CORE.GetAddr
bcs .99
plp
lda #$4C JMP abs
jsr CODE.EmitByte
bcc .1
lda #$20 JSR abs
.1 jsr CODE.EmitByte
lda ZPADDR
jsr CODE.EmitByte
lda ZPADDR+1
jsr CODE.EmitByte
clc
rts
jmp CODE.EmitByte
.90 lda #E.CSYN
.99 plp
sec
.99 rts
rts
*--------------------------------------
KW.HOME
KW.IF
@ -63,7 +75,8 @@ KW.OPEN
KW.POKE
KW.POP
KW.POSITION
clc
lda #E.CSYN
sec
rts
*--------------------------------------
KW.PRINT stz hOut reset to hStdOut
@ -73,14 +86,14 @@ KW.PRINT stz hOut reset to hStdOut
* lda (pPS),y
* sta hOut Default to screen
sec
ror bFlag put ending CR
.10 jsr CORE.GetNextCharNB
bcs .8
jsr CORE.IsEndInst
.11 jsr CORE.IsEndInst
bcs .8
stz bFlag put ending CR
cmp #'"'
bne .5
@ -131,23 +144,23 @@ KW.PRINT stz hOut reset to hStdOut
cmp #','
bne .71
* TODO : CR ? or not CR ?
tax
jsr CODE.PutChar
bra .10 go skip
.71 cmp #';'
bne .90
* TODO : PRINT ; ? or not ?
dec bFlag suppress ending CR
jsr CORE.GetNextCharNB skip ;
stz bFlag
bcc .11
.8 bit bFlag
bpl .80
bmi .80
jsr CODE.FPRINTCR
jsr CODE.FPRINTCRLF
.80 clc
rts
@ -162,7 +175,15 @@ KW.RAM
KW.RAM2
KW.READ
KW.READY
KW.RETURN
lda #E.CSYN
sec
rts
*--------------------------------------
KW.RETURN lda #$60 RTS
clc
jmp CODE.EmitByte
*--------------------------------------
KW.REWIND
KW.RIPCO
KW.SET
@ -174,7 +195,8 @@ KW.UPDATE
KW.USE
KW.WHENd
KW.WRITE
clc
lda #E.CSYN
sec
rts
*--------------------------------------
MAN

View File

@ -5,9 +5,10 @@ NEW
.OR $2000
.TF bin/acos
*--------------------------------------
CODESEG .EQ 1024
CODESEG .EQ 4096
CONSTSEG .EQ 1024
DATASEG .EQ 256
EXP.DEPTH.MAX .EQ 16
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
@ -38,10 +39,8 @@ ArgIndex .BS 1
bFlag .BS 1
EXP.ADDR .BS 2
EXP.AOPS1 .BS 1
EXP.AOPS2 .BS 1
EXP.AOPS .BS 1
EXP.DEPTH .BS 1
.BS 1
ZS.END .ED
*--------------------------------------
@ -55,7 +54,7 @@ CS.START cld
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #256 Stack Size
.DA #128 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
@ -448,17 +447,11 @@ CCODE.FPRINTL >PUSHW L.MSG.INT32
>PUSHA
dex
bne .1
>PUSHBI 4
>SYSCALL PrintF
>POP 4 Discard long on stack
CCODE.FPRINTL.LEN .EQ *-CCODE.FPRINTL
*--------------------------------------
CCODE.FPRINTCR >PUSHW L.MSG.ECHOCRLF
>PUSHBI 0
>SYSCALL PrintF
CCODE.FPRINTCR.LEN .EQ *-CCODE.FPRINTCR
*--------------------------------------
*--------------------------------------
.INB usr/src/bin/acos.s.code
.INB usr/src/bin/acos.s.core
@ -478,7 +471,7 @@ MSG.ECHOCRLF .AZ "\r\n"
MSG.COMPILING .AZ "Compiling : %s...\r\n"
MSG.DEBUG .AZ "pStack=%H CodePtr=%H\r\n"
MSG.ERR .AZ "-^\r\nLine #%D:"
MSG.RUN .AZ "Success, Code size = %d Bytes\r\nExecuting...\r\n"
MSG.RUN .AZ "Success, Code size = %D Bytes\r\nExecuting...\r\n"
MSG.STR .AZ "%s"
MSG.INT32 .AZ "%L"
*--------------------------------------

View File

@ -1,38 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
PathBuf .BS 65
hFileBuf .BS 1
CSH.BufPtrSave .BS 2
CSH.CmdSave .BS 1
CSH.LookupOpt .BS 1
CSH.hDefines .BS 1
CSH.hSymbols .BS 1
CSH.hTags .BS 1
CSH.hCode .BS 1
CSH.CodePtr .BS 2
CSH.hConst .BS 1
CSH.ConstPtr .BS 2
CSH.hData .BS 1
CSH.DataPtr .BS 2
CSH.hStack .BS 1
CSH.StackPtr .BS 1
CSH.SaveInclude .BS 2
CSH.SaveDefine .BS 2
CSH.VarDef .BS 6
*--------------------------------------
MAN
SAVE usr/src/bin/csh.d
LOAD usr/src/bin/csh.s
ASM

View File

@ -1,23 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CSH.E.SYNTAX .EQ $C0
CSH.E.STACKERR .EQ $C2
CSH.E.SOVERFLW .EQ $C3
*E.NOWHILE .EQ $C4
*E.NOFOR .EQ $C5
*E.NOIF .EQ $C6
CSH.E.UNEXPEOF .EQ $C8
CSH.E.UNDEF .EQ $C9
CSH.E.INVDIR .EQ $CA
*
CSH.E.NOVERFLW .EQ $D0
CSH.E.TMISMATCH .EQ $D1
CSH.E.OOM .EQ $D2
CSH.E.DUP .EQ $D3
*--------------------------------------
MAN
SAVE usr/src/bin/csh.e
LOAD usr/src/bin/csh.s
ASM

View File

@ -1,206 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CSH.T.VOID .EQ 0
CSH.T.SCHAR .EQ 1
CSH.T.SINT .EQ 2
CSH.T.SLONG .EQ 3
CSH.T.FLOAT .EQ 4
CSH.T.UCHAR .EQ 5
CSH.T.UINT .EQ 6
CSH.T.ULONG .EQ 7
CSH.T.VARIADIC .EQ $FF
*--------------------------------------
CSH.Q.POINTER .EQ %01000000
CSH.Q.PPOINTER .EQ %10000000
CSH.Q.PPPOINTER .EQ %11000000
CSH.Q.PCONST .EQ %00100000
CSH.Q.CONST .EQ %00010000
CSH.Q.FUNC .EQ %00001000
*--------------------------------------
CSH.OPChars .AS "!~+-*/%=&|^<>"
CSH.OPChars.Cnt .EQ *-CSH.OPChars
*--------------------------------------
* Pre Operators: + - ! ~ ++ --
*--------------------------------------
CSH.PREOPS >PSTR "+"
>PSTR "-"
>PSTR "!"
>PSTR "~"
*--------------------------------------
* Post Operators: ++ --
*--------------------------------------
CSH.POSTOPS >PSTR "++"
>PSTR "--"
.HS 00
*--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*--------------------------------------
CSH.AOPS >PSTR "="
>PSTR "+="
>PSTR "-="
>PSTR "*="
>PSTR "/="
>PSTR "%="
>PSTR "<<="
>PSTR ">>="
>PSTR "&="
>PSTR "^="
>PSTR "!="
.HS 00
*-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / %
* Arithmetic Operators: + -
* Shift Operators: << >>
* Relational Operators: < > >= < >= == !=
* Bitwise Operators: & | ^ ~
* Logical Operators: && ||
*--------------------------------------
CSH.BOPS >PSTR "+"
>PSTR "-"
>PSTR "*"
>PSTR "/"
>PSTR "%"
>PSTR "<<"
>PSTR ">>"
>PSTR "<"
>PSTR ">"
>PSTR "<="
>PSTR ">="
>PSTR "=="
>PSTR "!="
>PSTR "&"
>PSTR "|"
>PSTR "^"
>PSTR "&&"
>PSTR "||"
.HS 00
*--------------------------------------
* Reserved Directives:
*--------------------------------------
CSH.DIRS >PSTR "define"
>PSTR "include"
.HS 00
*--------------------------------------
* Reserved Keywords:
*--------------------------------------
CSH.KW >PSTR "if"
>PSTR "while"
>PSTR "else"
>PSTR "do"
>PSTR "for"
>PSTR "switch"
>PSTR "case"
>PSTR "break"
>PSTR "continue"
>PSTR "sizeof"
>PSTR "typedef"
>PSTR "struct"
CSH.MTYPES >PSTR "const" ALL
>PSTR "signed" char,int,long
>PSTR "unsigned" char,int,long
>PSTR "short" int
CSH.TYPES >PSTR "void"
>PSTR "char"
>PSTR "int"
>PSTR "long"
>PSTR "float"
.HS 00
*--------------------------------------
CSH.FTYPES >PSTR "fastcall"
* .HS 00
*--------------------------------------
CSH.TYPESIZE .HS 0001020405010204
*--------------------------------------
CSH.FN
* float cos ( float x );
>PSTR "log"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "sqr"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "exp"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "cos"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "sin"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "tan"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "atan"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
* char getchar ( void );
>PSTR "getchar"
.DA #CSH.T.UCHAR returned value
.DA #0
* int puts ( const char * str );
>PSTR "puts"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* int execl(const char* cmdline, short int flags);
>PSTR "execl"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.T.UCHAR
.DA #0
* int printf ( const char * format, ... );
>PSTR "printf"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.T.VARIADIC
.DA #0
* int putenv(const char *string);
>PSTR "putenv"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* int setenv(const char *name, const char *value);
>PSTR "setenv"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* char *getenv(const char *name, char *value);
>PSTR "getenv"
.DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* int unsetenv(const char *name);
>PSTR "unsetenv"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* void md5 (const char* str, char* digest);
>PSTR "md5"
.DA #CSH.T.VOID
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* void * malloc ( int size );
>PSTR "malloc"
.DA #CSH.Q.POINTER+CSH.T.VOID returned value
.DA #CSH.T.SINT
.DA #0
*--------------------------------------
.DA #0
*--------------------------------------
MAN
SAVE usr/src/bin/csh.i
LOAD usr/src/bin/csh.s
ASM

View File

@ -1,109 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
L.CSH.BOPS .DA CSH.BOPS
J.CSH.BOPS .DA CSH.BOPS.ADD
.DA CSH.BOPS.SUB
.DA CSH.BOPS.MUL
.DA CSH.BOPS.DIV
.DA CSH.BOPS.MOD
.DA CSH.BOPS.SHL
.DA CSH.BOPS.SHR
.DA CSH.BOPS.L
.DA CSH.BOPS.G
.DA CSH.BOPS.LE
.DA CSH.BOPS.GE
.DA CSH.BOPS.EQ
.DA CSH.BOPS.NE
.DA CSH.BOPS.AND
.DA CSH.BOPS.OR
.DA CSH.BOPS.EOR
.DA CSH.BOPS.LAND
.DA CSH.BOPS.LOR
J.CSH.BOPS.ADDt .DA CSH.TMISMATCH
.DA CSH.BOPS.ADDi8
.DA CSH.BOPS.ADDi16
.DA CSH.BOPS.ADDi32
.DA CSH.BOPS.ADDu8
.DA CSH.BOPS.ADDu16
.DA CSH.BOPS.ADDu32
.DA CSH.BOPS.ADDf
J.CSH.BOPS.SUBt .DA CSH.TMISMATCH
.DA CSH.BOPS.SUBi8
.DA CSH.BOPS.SUBi16
.DA CSH.BOPS.SUBi32
.DA CSH.BOPS.SUBu8
.DA CSH.BOPS.SUBu16
.DA CSH.BOPS.SUBu32
.DA CSH.BOPS.SUBf
J.CSH.BOPS.SHLt .DA CSH.TMISMATCH
.DA CSH.BOPS.SHL8
.DA CSH.BOPS.SHL16
.DA CSH.BOPS.SHL32
.DA CSH.BOPS.SHL8
.DA CSH.BOPS.SHL16
.DA CSH.BOPS.SHL32
.DA CSH.TMISMATCH
L.CSH.FN .DA CSH.FN
L.CSH.DIRS .DA CSH.DIRS
L.CSH.KW .DA CSH.KW
L.CSH.MTYPES .DA CSH.MTYPES
L.CSH.TYPES .DA CSH.TYPES
L.CSH.FTYPES .DA CSH.FTYPES
J.CSH.DIRS .DA CSH.DIR.DEFINE
.DA CSH.DIR.INCLUDE
J.CSH.KW .DA CSH.IF
.DA CSH.WHILE
.DA CSH.ELSE
.DA CSH.DO
.DA CSH.FOR
.DA CSH.SWITCH
.DA CSH.CASE
.DA CSH.BREAK
.DA CSH.CONTINUE
.DA CSH.SIZEOF
*--------------------------------------
.DA CSH.TYPEDEF
.DA CSH.STRUCT
*--------------------------------------
J.CSH.MTYPES .DA CSH.CONST
.DA CSH.SIGNED
.DA CSH.UNSIGNED
.DA CSH.SHORT
J.CSH.TYPES .DA CSH.VOID
.DA CSH.CHAR
.DA CSH.INT
.DA CSH.LONG
.DA CSH.FLOAT
J.CSH.UTYPES .DA CSH.UCHAR
.DA CSH.UINT
.DA CSH.ULONG
J.CSH.STYPES .DA CSH.SCHAR
.DA CSH.SINT
.DA CSH.SLONG
J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END
*--------------------------------------
J.CSH.EXEC .DA EXEC.log
.DA EXEC.sqr
.DA EXEC.exp
.DA EXEC.cos
.DA EXEC.sin
.DA EXEC.tan
.DA EXEC.atan
.DA EXEC.getchar
.DA EXEC.puts
.DA EXEC.execl
.DA EXEC.printf
.DA EXEC.putenv
.DA EXEC.setenv
.DA EXEC.getenv
.DA EXEC.unsetenv
.DA EXEC.MD5
.DA EXEC.malloc
*--------------------------------------
MAN
SAVE usr/src/bin/csh.r
LOAD usr/src/bin/csh.s
ASM

View File

@ -10,7 +10,20 @@ NEW
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
.INB usr/src/bin/csh.e
CSH.E.SYNTAX .EQ $C0
CSH.E.STACKERR .EQ $C2
CSH.E.SOVERFLW .EQ $C3
*E.NOWHILE .EQ $C4
*E.NOFOR .EQ $C5
*E.NOIF .EQ $C6
CSH.E.UNEXPEOF .EQ $C8
CSH.E.UNDEF .EQ $C9
CSH.E.INVDIR .EQ $CA
*
CSH.E.NOVERFLW .EQ $D0
CSH.E.TMISMATCH .EQ $D1
CSH.E.OOM .EQ $D2
CSH.E.DUP .EQ $D3
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
@ -72,7 +85,106 @@ L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.ERR .DA MSG.ERR
L.ENV.INCLUDE .DA ENV.INCLUDE
.INB usr/src/bin/csh.r
L.CSH.BOPS .DA CSH.BOPS
J.CSH.BOPS .DA CSH.BOPS.ADD
.DA CSH.BOPS.SUB
.DA CSH.BOPS.MUL
.DA CSH.BOPS.DIV
.DA CSH.BOPS.MOD
.DA CSH.BOPS.SHL
.DA CSH.BOPS.SHR
.DA CSH.BOPS.L
.DA CSH.BOPS.G
.DA CSH.BOPS.LE
.DA CSH.BOPS.GE
.DA CSH.BOPS.EQ
.DA CSH.BOPS.NE
.DA CSH.BOPS.AND
.DA CSH.BOPS.OR
.DA CSH.BOPS.EOR
.DA CSH.BOPS.LAND
.DA CSH.BOPS.LOR
J.CSH.BOPS.ADDt .DA CSH.TMISMATCH
.DA CSH.BOPS.ADDi8
.DA CSH.BOPS.ADDi16
.DA CSH.BOPS.ADDi32
.DA CSH.BOPS.ADDu8
.DA CSH.BOPS.ADDu16
.DA CSH.BOPS.ADDu32
.DA CSH.BOPS.ADDf
J.CSH.BOPS.SUBt .DA CSH.TMISMATCH
.DA CSH.BOPS.SUBi8
.DA CSH.BOPS.SUBi16
.DA CSH.BOPS.SUBi32
.DA CSH.BOPS.SUBu8
.DA CSH.BOPS.SUBu16
.DA CSH.BOPS.SUBu32
.DA CSH.BOPS.SUBf
J.CSH.BOPS.SHLt .DA CSH.TMISMATCH
.DA CSH.BOPS.SHL8
.DA CSH.BOPS.SHL16
.DA CSH.BOPS.SHL32
.DA CSH.BOPS.SHL8
.DA CSH.BOPS.SHL16
.DA CSH.BOPS.SHL32
.DA CSH.TMISMATCH
L.CSH.FN .DA CSH.FN
L.CSH.DIRS .DA CSH.DIRS
L.CSH.KW .DA CSH.KW
L.CSH.MTYPES .DA CSH.MTYPES
L.CSH.TYPES .DA CSH.TYPES
L.CSH.FTYPES .DA CSH.FTYPES
J.CSH.DIRS .DA CSH.DIR.DEFINE
.DA CSH.DIR.INCLUDE
J.CSH.KW .DA CSH.IF
.DA CSH.WHILE
.DA CSH.ELSE
.DA CSH.DO
.DA CSH.FOR
.DA CSH.SWITCH
.DA CSH.CASE
.DA CSH.BREAK
.DA CSH.CONTINUE
.DA CSH.SIZEOF
*--------------------------------------
.DA CSH.TYPEDEF
.DA CSH.STRUCT
*--------------------------------------
J.CSH.MTYPES .DA CSH.CONST
.DA CSH.SIGNED
.DA CSH.UNSIGNED
.DA CSH.SHORT
J.CSH.TYPES .DA CSH.VOID
.DA CSH.CHAR
.DA CSH.INT
.DA CSH.LONG
.DA CSH.FLOAT
J.CSH.UTYPES .DA CSH.UCHAR
.DA CSH.UINT
.DA CSH.ULONG
J.CSH.STYPES .DA CSH.SCHAR
.DA CSH.SINT
.DA CSH.SLONG
J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END
*--------------------------------------
J.CSH.EXEC .DA EXEC.log
.DA EXEC.sqr
.DA EXEC.exp
.DA EXEC.cos
.DA EXEC.sin
.DA EXEC.tan
.DA EXEC.atan
.DA EXEC.getchar
.DA EXEC.puts
.DA EXEC.execl
.DA EXEC.printf
.DA EXEC.putenv
.DA EXEC.setenv
.DA EXEC.getenv
.DA EXEC.unsetenv
.DA EXEC.MD5
.DA EXEC.malloc
.DA 0
*--------------------------------------
* Called once at process creation
@ -337,15 +449,241 @@ ENV.INCLUDE .AZ "INCLUDE"
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
.INB usr/src/bin/csh.i
*--------------------------------------
CSH.T.VOID .EQ 0
CSH.T.SCHAR .EQ 1
CSH.T.SINT .EQ 2
CSH.T.SLONG .EQ 3
CSH.T.FLOAT .EQ 4
CSH.T.UCHAR .EQ 5
CSH.T.UINT .EQ 6
CSH.T.ULONG .EQ 7
CSH.T.VARIADIC .EQ $FF
*--------------------------------------
CSH.Q.POINTER .EQ %01000000
CSH.Q.PPOINTER .EQ %10000000
CSH.Q.PPPOINTER .EQ %11000000
CSH.Q.PCONST .EQ %00100000
CSH.Q.CONST .EQ %00010000
CSH.Q.FUNC .EQ %00001000
*--------------------------------------
CSH.OPChars .AS "!~+-*/%=&|^<>"
CSH.OPChars.Cnt .EQ *-CSH.OPChars
*--------------------------------------
* Pre Operators: + - ! ~ ++ --
*--------------------------------------
CSH.PREOPS >PSTR "+"
>PSTR "-"
>PSTR "!"
>PSTR "~"
*--------------------------------------
* Post Operators: ++ --
*--------------------------------------
CSH.POSTOPS >PSTR "++"
>PSTR "--"
.HS 00
*--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*--------------------------------------
CSH.AOPS >PSTR "="
>PSTR "+="
>PSTR "-="
>PSTR "*="
>PSTR "/="
>PSTR "%="
>PSTR "<<="
>PSTR ">>="
>PSTR "&="
>PSTR "^="
>PSTR "!="
.HS 00
*-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / %
* Arithmetic Operators: + -
* Shift Operators: << >>
* Relational Operators: < > >= < >= == !=
* Bitwise Operators: & | ^ ~
* Logical Operators: && ||
*--------------------------------------
CSH.BOPS >PSTR "+"
>PSTR "-"
>PSTR "*"
>PSTR "/"
>PSTR "%"
>PSTR "<<"
>PSTR ">>"
>PSTR "<"
>PSTR ">"
>PSTR "<="
>PSTR ">="
>PSTR "=="
>PSTR "!="
>PSTR "&"
>PSTR "|"
>PSTR "^"
>PSTR "&&"
>PSTR "||"
.HS 00
*--------------------------------------
* Reserved Directives:
*--------------------------------------
CSH.DIRS >PSTR "define"
>PSTR "include"
.HS 00
*--------------------------------------
* Reserved Keywords:
*--------------------------------------
CSH.KW >PSTR "if"
>PSTR "while"
>PSTR "else"
>PSTR "do"
>PSTR "for"
>PSTR "switch"
>PSTR "case"
>PSTR "break"
>PSTR "continue"
>PSTR "sizeof"
>PSTR "typedef"
>PSTR "struct"
CSH.MTYPES >PSTR "const" ALL
>PSTR "signed" char,int,long
>PSTR "unsigned" char,int,long
>PSTR "short" int
CSH.TYPES >PSTR "void"
>PSTR "char"
>PSTR "int"
>PSTR "long"
>PSTR "float"
.HS 00
*--------------------------------------
CSH.FTYPES >PSTR "fastcall"
* .HS 00
*--------------------------------------
CSH.TYPESIZE .HS 0001020405010204
*--------------------------------------
CSH.FN
* float cos ( float x );
>PSTR "log"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "sqr"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "exp"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "cos"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "sin"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "tan"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
>PSTR "atan"
.DA #CSH.T.FLOAT returned value
.DA #CSH.T.FLOAT
.DA #0
* char getchar ( void );
>PSTR "getchar"
.DA #CSH.T.UCHAR returned value
.DA #0
* int puts ( const char * str );
>PSTR "puts"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* int execl(const char* cmdline, short int flags);
>PSTR "execl"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.T.UCHAR
.DA #0
* int printf ( const char * format, ... );
>PSTR "printf"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.T.VARIADIC
.DA #0
* int putenv(const char *string);
>PSTR "putenv"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* int setenv(const char *name, const char *value);
>PSTR "setenv"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* char *getenv(const char *name, char *value);
>PSTR "getenv"
.DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* int unsetenv(const char *name);
>PSTR "unsetenv"
.DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* void md5 (const char* str, char* digest);
>PSTR "md5"
.DA #CSH.T.VOID
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #0
* void * malloc ( int size );
>PSTR "malloc"
.DA #CSH.Q.POINTER+CSH.T.VOID returned value
.DA #CSH.T.SINT
.DA #0
*--------------------------------------
.DA #0
*--------------------------------------
.DUMMY
.OR 0
DS.START .INB usr/src/bin/csh.d
DS.START
PathBuf .BS 65
hFileBuf .BS 1
CSH.BufPtrSave .BS 2
CSH.CmdSave .BS 1
CSH.LookupOpt .BS 1
CSH.hDefines .BS 1
CSH.hSymbols .BS 1
CSH.hTags .BS 1
CSH.hCode .BS 1
CSH.CodePtr .BS 2
CSH.hConst .BS 1
CSH.ConstPtr .BS 2
CSH.hData .BS 1
CSH.DataPtr .BS 2
CSH.hStack .BS 1
CSH.StackPtr .BS 1
CSH.SaveInclude .BS 2
CSH.SaveDefine .BS 2
CSH.VarDef .BS 6
bDebug .BS 1
bTrace .BS 1
DS.END
.ED
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/csh.s

View File

@ -83,8 +83,8 @@ CS.RUN ldy #S.PS.ARGC
>SYSCALL SScanF
bcs .9
>PUSHB.G PID
>PUSHB.G Signal
>LDA.G PID
>SYSCALL Kill
bcs .99
lda #0

View File

@ -121,8 +121,8 @@ CS.RUN lda #DEFAULT.TIMEOUT
jsr CS.RUN.DEV
jsr CS.RUN.SYS
>PUSHBI 1
* lda #1 INITD
>PUSHBI 1 INITD
>PUSHA SIGNAL
>SYSCALL Kill
lda #0
@ -242,10 +242,10 @@ CS.RUN.KILL >PUSHW L.MSG.PS
>PUSHBI 3
>SYSCALL PrintF
>PUSHBI 1
ldy #S.PS.PID
lda (ZPPtr1),y
>PUSHA
>PUSHBI 1 SIG
>SYSCALL Kill
rts
*--------------------------------------

View File

@ -4,7 +4,7 @@ NEW
IO.D2.SeekTimeR .EQ 48 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 68 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 68 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 48 ProDOS.FX initial
IO.D2.SeekTimeP .EQ 68 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*--------------------------------------
IO.D2.Ph0Off .EQ $C080

View File

@ -760,11 +760,12 @@ XRW.DEBUG sta CLRPAGE2
ldx #$24
lda XRW.ReqTrack
jsr .6
jsr XRW.DEBUG.PBYTEx
lda XRW.ReqSector
.6 pha
XRW.DEBUG.PBYTEx
pha
lsr
lsr
lsr
@ -783,6 +784,12 @@ XRW.DEBUG sta CLRPAGE2
.8 sta $700,x
inx
rts
XRW.DEBUG2 ldx #$1E
lda XRW.AddrField.V
jsr XRW.DEBUG.PBYTEx
lda XRW.AddrField.T
bra XRW.DEBUG.PBYTEx
.FIN
*--------------------------------------
* data tables

View File

@ -399,7 +399,7 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
bit IO.D2.ReadMode,x (4)
lda #$FF (2)
nop (2)
* nop (2)
sta IO.D2.WriteMode,x (5) goto write mode
ora IO.D2.WShift,x (4)
@ -693,7 +693,11 @@ XRW.TrackSelect lda #2
rts
.4 ldx XRW.UnitIndex
.4 .DO XRWDBG=1
jsr XRW.DEBUG2
.FIN
ldx XRW.UnitIndex
lda XRW.AddrField.V
cmp #194
bcc .5

View File

@ -55,7 +55,6 @@ CORE.Run ldx #1
.5 cmp #S.PS.S.QUIT
bne .7
>PUSHBI 2
ldy #S.PS.PID
lda (pPS),y
cmp #1 INITD ?
@ -63,7 +62,9 @@ CORE.Run ldx #1
jmp CORE.Quit
.6 >SYSCALL2 Kill
.6 >PUSHA PID
>PUSHBI 2 SIG
>SYSCALL2 Kill
bra .8
.7 jsr CORE.PSLeave Save ZP & Ptrs

View File

@ -864,7 +864,7 @@ IrqMgrInit >LDYAI MSG.IRQ
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.IIGS.Off
>STYA CORE.Quit+1
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.IIGS
bra .8
@ -886,7 +886,7 @@ IrqMgrInit >LDYAI MSG.IRQ
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.TCLOCK.Off
>STYA CORE.Quit+1
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.CLOCK
bra .8
@ -912,7 +912,7 @@ IrqMgrInit >LDYAI MSG.IRQ
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.MOUSE.Off
>STYA CORE.Quit+1
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.MOUSE
bra .8

View File

@ -58,8 +58,8 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
bcc .8 or K.IOBuf= 0, K.Buf256=/.../BINFILE
.90 pha save error code
>PUSHBI 2
lda .8+1
>PUSHB .8+1 PID
>PUSHBI 2 SIG
jsr K.Kill
pla get back error code
sec
@ -304,8 +304,8 @@ PS.CreateChild ldx #0
rts
.9 pha
>PUSHBI 2
lda CORE.LastPSID
>PUSHB CORE.LastPSID
>PUSHBI 2 SIG
jsr K.Kill
pla
sec
@ -652,23 +652,25 @@ PS.AddYAp12ArgSize
* ## C
* `int kill(short int pid, short int sig);`
* ## ASM
* `>PUSHB pid`
* `>PUSHB sig`
* `lda pid`
* `>SYSCALL kill`
* ## RETURN VALUE
* A = Child PSID
*\--------------------------------------
K.Kill.PID .BS 1
*--------------------------------------
K.Kill cmp #0
beq .99 CS
K.Kill >PULLB .10+1 SIG
>PULLA PID
cmp #0
beq .9 CS
sta K.Kill.PID
jsr CORE.GetPSByID
bcs .99
>STYA ZPPtr1
>PULLA
.10 lda #$ff SELF MODIFIED
cmp #2+1
bcs .9
@ -682,8 +684,7 @@ K.Kill cmp #0
.9 lda #E.SYN
* sec
rts
.99 >RET 1
.99 rts
*--------------------------------------
K.Kill.1 lda (ZPPtr1)
and #S.PS.F.SLEEP^$FF
@ -888,21 +889,22 @@ K.FileSearch >PULLW .4+1 DstStat
stz PS.Find.98+1
jsr PS.Find
bcs K.FileSearch.RTS
bcs .9
ldx #$ff
.1 inx
lda K.Buf256,x
.2 sta $ffff,x Self Modified
bne .1
ldx #S.STAT-1
.3 lda K.S.STAT,x
.4 sta $ffff,x Self Modified
dex
bpl .3
* clc
K.FileSearch.RTS
rts
.9 rts
*--------------------------------------
PS.Find.CWD >STYA PS.Find.4+1 filename to find
ldy #S.PS.hCWD
@ -925,7 +927,7 @@ PS.Find.PATH ldx #4
>PUSHW PS.VARS,x
>PUSHWI 0 allocate...
>SYSCALL2 GetEnv get value for Search Path
bcs K.FileSearch.RTS
bcs PS.Find.RTS
>STYA PS.Find.2+1
stx PS.Find.98+1
@ -974,7 +976,7 @@ PS.Find.5 >LDYAI K.Buf256
jsr PS.Find.98 Discard Expanded hSrch list
clc
rts
PS.Find.RTS rts
PS.Find.98 lda #$ff SELF MODIFIED : Discard Search list
beq .1