Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-05-12 22:45:11 +02:00
parent 638e36f3a0
commit b232facc43
29 changed files with 335 additions and 289 deletions

Binary file not shown.

View File

@ -312,7 +312,7 @@ CS.RUN ldy #S.PS.hStdIn
jsr MAC.ReadLine
bcc .2
cmp #E.NODATA
cmp #E.EMPTYKEY
bne .9
>DEC.G MAC.Depth

View File

@ -19,6 +19,16 @@ PG.SIZE .EQ 23
ZS.START
ZPPTR1 .BS 2
ZPBufPtr .BS 2
ArgCount .BS 1
hFile .BS 1
LineCount .BS 1
LineNum .BS 2
bHelp .BS 1
bLineNum .BS 1
bPage .BS 1
bEscCodes .BS 1
ArgIndex .BS 1
hBuf .BS 1
ZS.END
.ED
*--------------------------------------
@ -32,7 +42,7 @@ CS.START cld
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
@ -54,7 +64,8 @@ CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 >INC.G ArgCount
.1 inc ArgCount
lda ArgCount
>SYSCALL ArgV
bcs .7
@ -86,7 +97,7 @@ CS.RUN
sta (pData),y
bra .1
.4 >LDA.G hFile
.4 lda hFile
bne .99
>LDYA ZPPtr1
@ -95,13 +106,14 @@ CS.RUN
bra .1 scan for any other args
.7 >LDA.G bHelp
.7 lda bHelp
beq .8
.71 jsr .99
lda #0
rts
.8 >LDA.G hFile
.8 lda hFile
bne .80
ldy #S.PS.hStdIn
@ -120,8 +132,7 @@ CS.RUN
bcs .9
>STYA ZPBufPtr
txa
>STA.G hBuf
stx hBuf
>PUSHBI 0
>LDYA L.MSG.Init
@ -130,11 +141,13 @@ CS.RUN
CS.RUN.LOOP jsr CS.RUN.GETLINE
bcs .9
.1 >INCW.G LineNum
.1 inc LineNum
bne .11
inc LineNum+1
>LDA.G LineCount
.11 lda LineCount
bne .2
>LDA.G bPage
lda bPage
beq .2
lda #C.FF
@ -142,11 +155,11 @@ CS.RUN.LOOP jsr CS.RUN.GETLINE
.2 jsr CS.RUN.PRINT
>INC.G LineCount
inc LineCount
lda LineCount
cmp #PG.SIZE
bne CS.RUN.LOOP
lda #0
sta (pData),y
stz LineCount
jsr CS.RUN.PAUSE
bcc CS.RUN.LOOP
@ -167,7 +180,7 @@ CS.RUN.OPEN pha
pla
>SYSCALL FOpen
bcs .9
>STA.G hFile
sta hFile
.9 rts
*--------------------------------------
@ -203,9 +216,11 @@ CS.RUN.PAUSE >PUSHBI 0
bra .90
.5 >INCW.G LineNum
jsr CS.RUN.PRINT
.5 inc LineNum
bne .6
inc LineNum+1
.6 jsr CS.RUN.PRINT
bra CS.RUN.PAUSE
@ -222,7 +237,7 @@ CS.RUN.ERASE >PUSHBI 0
>SYSCALL fprintf
rts
*--------------------------------------
CS.RUN.GETC >LDA.G hFILE
CS.RUN.GETC lda hFILE
bne .1
ldy #S.PS.hStdErr
@ -235,7 +250,7 @@ CS.RUN.GETC >LDA.G hFILE
*--------------------------------------
CS.RUN.GETLINE >PUSHWI 256
>PUSHW ZPBufPtr
>LDA.G hFile
lda hFile
bne .1
ldy #S.PS.hStdIn
@ -244,16 +259,16 @@ CS.RUN.GETLINE >PUSHWI 256
.1 >SYSCALL fgets
rts
*--------------------------------------
CS.RUN.PRINT >LDA.G bLineNum
CS.RUN.PRINT lda bLineNum
bpl .1
>PUSHW.G LineNum
>PUSHW LineNum
>PUSHBI 2
>LDYA L.MSG.NUMLINE
>SYSCALL printf
bcs .9
.1 >LDA.G bEscCodes
.1 lda bEscCodes
bmi .2
>LDYA ZPBufPtr
@ -270,12 +285,12 @@ CS.RUN.PRINT >LDA.G bLineNum
>SYSCALL printf
.9 rts
*--------------------------------------
CS.QUIT >LDA.G hBuf
CS.QUIT lda hBuf
beq .1
>SYSCALL FreeMem
.1 >LDA.G hFILE
.1 lda hFILE
beq .2
>SYSCALL FClose
@ -306,16 +321,6 @@ MSG.PauseErase .AZ "\r\e[2K"
.DUMMY
.OR 0
DS.START
ArgCount .BS 1
hFile .BS 1
LineCount .BS 1
LineNum .BS 2
bHelp .BS 1
bLineNum .BS 1
bPage .BS 1
bEscCodes .BS 1
ArgIndex .BS 1
hBuf .BS 1
DS.END
.ED
*--------------------------------------

View File

@ -59,7 +59,7 @@ IO.Reset.In >LDA.G IO.hIn
.8 clc
IO.Reset.In.RTS rts
*--------------------------------------
IO.Pipe.Out >LDYAI 256
IO.Pipe.Out >LDYAI 512
>SYSCALL pipe
bcs IO.Reset.In.RTS
>STA.G IO.hPipe

View File

@ -109,6 +109,7 @@ CS.START cld
*--------------------------------------
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.PROMPT .DA MSG.PROMPT
L.MSG.PROMPTCRLF .DA MSG.PROMPTCRLF
L.MSG.TRACE .DA MSG.TRACE
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.BATCHERR .DA MSG.BATCHERR
@ -339,7 +340,7 @@ CS.RUN.INTERACTIVE
bpl .1
>PUSHBI 0
>LDYA L.MSG.ECHOCRLF
>LDYA L.MSG.PROMPTCRLF
>SYSCALL printf
bcs .9
@ -581,7 +582,8 @@ ToUpperCase cmp #'a'
CS.END
*--------------------------------------
MSG.GREETINGS .AZ "\r\nA2osX-SH %d.%d\r\n\r\n"
MSG.PROMPT .AZ "\e[7h$ "
MSG.PROMPT .AZ "\e[7h$ " Enable Line Wrap
MSG.PROMPTCRLF .AZ "\e[7l\r\n" Disable Line Wrap
MSG.TRACE .AZ ">%s\r\n"
MSG.BATCHERR .AZ "^\r\nLine #%D:"
MSG.ERROR .AS "[$%h]:%S."

View File

@ -334,7 +334,7 @@ READ php
lda L91C96.2.IST,x
and #L91C96.2.IST.RCV
bne .1
lda #MLI.E.EOF
lda #E.NODATA
.9 plp
sec
@ -373,10 +373,10 @@ READ php
ply
>SYSCALL getmem
>SYSCALL2 getmem
bcs .9
>STYA ZPBufPtr
stx .8+1
phx
phy
ldy #S.IOCTL.BUFPTR+1
@ -415,7 +415,7 @@ READ php
.4 lda #L91C96.2.MMUCR.REMREL
sta L91C96.2.MMUCR,x
.8 lda #$ff hMem
.8 pla hMem
plp
clc
@ -464,7 +464,7 @@ WRITE php
dey
bne .2
lda #MLI.E.EOF
lda #E.NODATA
.9 plp
sec

View File

@ -374,7 +374,7 @@ READ php
and /PP.RxEvent.RxOK+PP.RxEvent.IA+PP.RxEvent.Brdcast+PP.RxEvent.Runt
bne .1
lda #MLI.E.EOF
lda #E.NODATA
.9 plp
sec
@ -400,7 +400,7 @@ READ php
pla
>SYSCALL getmem
>SYSCALL2 getmem
bcs .9
>STYA ZPBufPtr
@ -488,7 +488,7 @@ WRITE php
dey
bne .1
.9 lda #MLI.E.EOF
.9 lda #E.NODATA
plp
sec

View File

@ -387,7 +387,7 @@ READ php
ora W5100.DR,x LO
bne .1
lda #MLI.E.EOF
lda #E.NODATA
.9 plp
sec
@ -432,11 +432,11 @@ READ php
sty RXTX.Size
.FIN
>SYSCALL getmem
>SYSCALL2 getmem
bcs .9
>STYA ZPBufPtr
stx .8+1
phx
phy
ldy #S.IOCTL.BUFPTR+1
@ -529,7 +529,7 @@ READ php
lda #W5100.AR.S0.CR.RCVD
sta W5100.DR,x
.8 lda #$ff SELF MODIFIED hMem
pla hMem
plp
clc
@ -569,7 +569,7 @@ WRITE php
sbc RXTX.Size+1
bcs WRITE.1
lda #MLI.E.EOF
lda #E.NODATA
plp
sec

View File

@ -6,7 +6,7 @@ K.ENV.SIZE .EQ 256
*--------------------------------------
K.MEM.ALIGN .EQ 16
K.MEM.nALIGNm1 .EQ $F0
*K.MEM.ALIGN .EQ 64
*K.MEM.ALIGN .EQ 64
*K.MEM.nALIGNm1 .EQ $C0
*--------------------------------------
K.IRQDEV.MAX .EQ 4
@ -94,6 +94,8 @@ A2osX.SYSCALL2 .EQ $E200
* Kernel ERROR CODES : $60->$7F
* Lib ERROR CODES : $80->$BF
*--------------------------------------
E.NODATA .EQ $FF No Data
*--------------------------------------
E.OOM .EQ $7F Out Of Memory Error
E.OOH .EQ $7E Out Of Handle Error
E.INVH .EQ $7D Invalid Handle
@ -110,7 +112,7 @@ E.INUM .EQ $73 Invalid Numerical
E.NOKEY .EQ $6F Undefined Key
E.DUPKEY .EQ $6E Duplicate Key
E.NODATA .EQ $6D No Data
E.EMPTYKEY .EQ $6D No Data for this key
E.DATALEN .EQ $6C Data Length Mismatch
E.IPWDDB .EQ $68 Invalid PWD database
@ -129,6 +131,8 @@ C.VT .EQ 11
C.FF .EQ 12
C.CR .EQ 13
C.FS .EQ 21
C.S0 .EQ 24
C.S1 .EQ 25
C.ESC .EQ 27
C.SPACE .EQ 32
C.COLON .EQ 58

View File

@ -3,10 +3,12 @@ PREFIX
AUTO 4,1
*--------------------------------------
* https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/jb-dev/sysroot/usr/include/arpa/telnet.h
* https://web.maths.unsw.edu.au/~lafaye/CCM/internet/telnet.htm
*--------------------------------------
TCP.PORT.TELNET .EQ 23
*--------------------------------------
SE .EQ 240 $F0
DM .EQ 242 $F2
SB .EQ 250 $FA
SB.IS .EQ 0
SB.SEND .EQ 1

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000

View File

@ -404,9 +404,8 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen
jsr TCP.OUT.SendOptA
.8 lda #0
tay eof=true, exit with CC,Y,A = 0
clc
.8 lda #E.NODATA
sec
.99 rts
*--------------------------------------
* In:
@ -552,9 +551,8 @@ SKT.Write jsr SKT.PullhFDDataInPtrLen
bcs SKT.AddDataToSktOut
lda #0 Not enough room in Q,no data transfered
tay exit with CC,Y,A = 0
clc
lda #E.NODATA Not enough room in Q,no data transfered
sec
.99 rts
*--------------------------------------
* Src : ZPDataInPtr/ZPDataInLen

View File

@ -178,7 +178,7 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
>LDYA BIN.CmdLine
ldx #SYS.LoadFile
jsr K.SYSCALL.GoB BANK1!!!
jsr K.SYSCALL2.BANK BANK1!!!
bcs BIN.Load.Cleanup.RTS Error Loading file
stx BIN.hMem save hMem
@ -220,7 +220,7 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
>LDYA BIN.CmdLine get back bin path
ldx #SYS.strdup make a copy of this string
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .98
lda BIN.hMem Keep X=new string hMem

View File

@ -529,7 +529,7 @@ CORE.PSFree sta .10+1 Save PS ID
txa
ldx #SYS.fclose
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
.10 lda #$ff Self Modified

View File

@ -156,6 +156,8 @@ S.DCB.TTY.MODE .EQ 2
S.DCB.TTY.MODE.ESC .EQ 2
S.DCB.TTY.MODE.CSI .EQ 4
S.DCB.TTY.MODE.IAC .EQ 6
S.DCB.TTY.MODE.G0 .EQ 8
S.DCB.TTY.MODE.G1 .EQ 10
S.DCB.TTY.CH .EQ 3
S.DCB.TTY.CV .EQ 4
S.DCB.TTY.SCROLLTOP .EQ 5

View File

@ -579,8 +579,7 @@ K.ReadDir.ConvertTime
lda ZPPtr3+1
adc #0
ldx #SYS.PTime2Time BANK2
jsr K.SYSCALL.GoB
rts
jmp K.SYSCALL2.BANK
*/-------------------------------------
* # CloseDir
* ## C

View File

@ -119,7 +119,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
>LDYAI K.Buf256
ldx #SYS.StrDup
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .9
stx .88+1 save this as temp string, in case of recurse
@ -233,7 +233,7 @@ ENV.Search.YA >STYA .4+1
.5 >PUSHWI K.S.STAT
>LDYAI K.Buf256
ldx #SYS.stat
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .1 Failed...retry next path...
lda K.S.STAT+S.STAT.P.TYPE

View File

@ -129,7 +129,7 @@ GP.SysCall dec IRQ.InKernel
tay
pla
jsr K.SYSCALL.Go
jsr K.SYSCALL2
bcc .2 no error quit...
tax CS,A=0 ?

View File

@ -312,7 +312,7 @@ IO.CLOSE.NOD ldx #2
* sec
rts
*/--------------------------------------
* # read (BLOCKING)
* # read
* ## C
* `int read(hFD fd, void *buf, int count);`
* ## ASM
@ -342,7 +342,7 @@ IO.Read.I lda (pFD) #S.FD.T
.DA IO.READ.SSOCK
.DA IO.READ.PIPE
*/--------------------------------------
* # write (BLOCKING)
* # write
* ## C
* `int write(hFD fd, const void *buf, int count);`
* ## ASM
@ -389,40 +389,28 @@ IO.WRITE.REG ldx #MLIWRITE
>LDYA K.MLI.PARAMS+6
.9 rts
*--------------------------------------
* (pStack)+2 count
* (pStack)+0 buf
*--------------------------------------
IO.READ.CDEV ldx #IOCTL.READ
.HS 2C BIT ABS
*--------------------------------------
IO.WRITE.CDEV ldx #IOCTL.WRITE
ldy #3
.1 lda (pStack),y
sta K.S.IOCTL+S.IOCTL.BUFPTR,y
dey
bpl .1
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
jsr K.IOCTL.GetPDRV
>LDYAI K.S.IOCTL
jsr K.IOCTL.pDrvJmp
bcc .8
tay CS, A=0 ?
bne .9 no, I/O error
bcs .9
>LDYA K.S.IOCTL+S.IOCTL.BYTECNT
rts BLOCKING I/O
.8 >LDYA K.S.IOCTL+S.IOCTL.BYTECNT
.9 >RET 4
.9 rts
*--------------------------------------
IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE
.HS 2C BIT ABS
*--------------------------------------
IO.READ.SSOCK ldy #S.FD.SSOCK.READ
lda (pFD),y
tax Function Offset in LIB
@ -433,25 +421,7 @@ IO.READ.SSOCK ldy #S.FD.SSOCK.READ
lda IO.hFD
.1 jsr $FFFF SELF MODIFIED
bcs .9 I/O error
phy
ply
bne .9
tax
bne .9
dec pStack no data transfered, CC, Y,A = 0
dec pStack
dec pStack
dec pStack keep buf/count on stack
sec BLOCKING I/O
.9 rts
*--------------------------------------
* (pStack)+2 count
* (pStack)+0 buf
.1 jmp $FFFF SELF MODIFIED
*--------------------------------------
IO.READ.PIPE ldy #S.FD.PIPE.Used+1
@ -466,7 +436,7 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1
jmp IO.READ.PIPE.EOF Remote PS closed the Pipe
.11 jmp IO.READ.PIPE.BLK
.11 jmp IO.READ.PIPE.NODATA
.10 >PULLW .3+1 get buf
@ -506,6 +476,7 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1
sty .2+1
ldy #S.FD.PIPE.Tail+1
* clc
adc (pFD),y
sta .2+2
@ -591,13 +562,11 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1
IO.READ.PIPE.EOF
lda #MLI.E.EOF
.HS 2C BIT ABS
IO.READ.PIPE.NODATA
lda #E.NODATA
sec
>RET 4
IO.READ.PIPE.BLK
lda #0 BLOCKING I/O
sec
rts
>RET 4
*--------------------------------------
* (pStack)+2 count
* (pStack)+0 buf
@ -618,7 +587,7 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S
ldy #3
sbc (pStack),y
bcc IO.READ.PIPE.BLK not enough room in PIPE
bcc IO.READ.PIPE.NODATA not enough room in PIPE
ldy #S.FD.PIPE.Free+1
sta (pFD),y
@ -627,7 +596,7 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S
sta (pFD),y store new Free
>PULLW .2+1 get buf
>PULLA get cnt lo
sta .80+1
pha

View File

@ -417,10 +417,10 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA 0
.DA 0
*--------------------------------------
K.SYSCALL.Go bit K.SYSCALL.BANK,x Get Target BNK
K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK
bpl K.SYSCALL.JMP 0, E000, no BNK change
K.SYSCALL.GoB sta .7+1
K.SYSCALL2.BANK sta .7+1
lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
cmp K.SYSCALL.BANK,x
beq .7

View File

@ -273,7 +273,7 @@ K.FreeMem.ERR phx
>LDYAI K.FreeMem.MSG
.1 ldx #SYS.printf
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
plx
sec
@ -536,7 +536,7 @@ K.FreeStkObj ldx #SYS.FreeMem
* X = hMem of Loaded Object in AUX mem
*\--------------------------------------
K.LoadStkObj ldx #SYS.LoadTxtFile To get ending \0
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .99
sty .81+1

View File

@ -144,7 +144,7 @@ PS.CreateChild ldx #0
jsr K.GetMemPtr
ldx #SYS.StrDup
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .9
jsr PS.SetMemOwner Set Ownership
@ -230,7 +230,7 @@ PS.Load ldy #$ff
>PUSHWI K.S.STAT
>LDYA PS.ArgV found /, some path specified, no search
ldx #SYS.stat
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcc .6 REAL path in K.Buf256
.99 rts
@ -308,7 +308,7 @@ PS.Load.SCRIPT ldx #$ff
.5 >PUSHWI K.S.STAT
>LDYAI K.Buf256
ldx #SYS.stat
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs PS.Load.RTS
lda K.S.STAT+S.STAT.P.TYPE
@ -415,7 +415,7 @@ PS.LoadGetHeader
>PUSHBI O.RDONLY
>LDYAI K.IOBuf
ldx #SYS.fopen
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .9
sta .1+1
@ -423,13 +423,13 @@ PS.LoadGetHeader
>PUSHWI K.IOBuf+128
.1 lda #$ff SELF MODIFIED
ldx #SYS.fread
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
php
pha
lda .1+1
ldx #SYS.fclose
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
pla
plp
.9 rts

View File

@ -74,7 +74,7 @@ PWD.Store lda PWD.DBPtr
>PUSHBI O.WRONLY+O.CREATE
>LDYAI PWD.FILE
ldx #SYS.FOpen
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcc .1
pha
@ -91,7 +91,7 @@ PWD.Store lda PWD.DBPtr
>PUSHYA
lda .7+1
ldx #SYS.FWrite
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .2
jsr .7
@ -106,7 +106,7 @@ PWD.Store lda PWD.DBPtr
.7 lda #$ff
ldx #SYS.fclose
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
.8 lda #$ff
jsr K.freemem

View File

@ -82,7 +82,7 @@ SLIST.GetData jsr SLIST.Select
inc ZPSListDataLen+1
bra .2
.99 lda #E.NODATA
.99 lda #E.EMPTYKEY
sec
.9 rts

View File

@ -329,7 +329,7 @@ K.MkNod.I ldx #2
>LDYA ZPPtr1
ldx #SYS.StrDup
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .9
txa

View File

@ -1,16 +1,10 @@
NEW
PREFIX
AUTO 4,1
*--------------------------------------
*K.PrintF.PadL .BS 1
*K.PrintF.PadC .BS 1
*HEXBUF .BS 4
*BCDBUF .BS 5 5, enough to handle 10 digits (32bits)
AUTO 3,1
*--------------------------------------
HEXBUF .EQ FAC
K.PrintF.PadL .EQ FAC+4
K.PrintF.PadC .EQ FAC+5
BCDBUF .EQ ARG
BCDBUF .EQ ARG 5, enough to handle 10 digits (32bits)
HEXBUF.Signed .EQ ARG.SIGN
*/--------------------------------------
* # putchar (BLOCKING)
@ -29,14 +23,16 @@ K.PutChar >PUSHA character
ldy #S.PS.hStdOut
lda (pPs),y
jsr K.FPutC
bcc .8
tay
bne .8
>RET 1
.8 rts
bcc K.PutChar.RTS
tay E.NODATA
bpl K.PutChar.RTS
inc 0 = BLOCKING
K.PutChar.RET1 inc pStack
K.PutChar.RTS rts
*/--------------------------------------
* # fputc (BLOCKING)
* Print A (char) to hFILE
@ -50,22 +46,26 @@ K.PutChar >PUSHA character
* ## RETURN VALUE
* CC = success
*\--------------------------------------
* (pStack)+0 character
*--------------------------------------
K.FPutC jsr PFT.CheckNodeA
bcs .8
bcs K.PutChar.RET1
lda (pStack) character
sta K.IOBuf
ldy #1 write 1 byte
jsr K.FPutC.Y
bcc .8
tay
bne .8
lda #0
>PUSHA
inc write 1 byte
>PUSHA
>PUSHWI K.IOBuf buf
jsr IO.Write.I
bcc K.PutChar.RET1 pop char...
tay E.NODATA
bpl K.PutChar.RET1
inc 0 = BLOCKING
sec
rts
.8 >RET 1
*/--------------------------------------
* # puts (BLOCKING)
* Write Str to StdOut, appends '\r\n'
@ -78,36 +78,49 @@ K.FPutC jsr PFT.CheckNodeA
* ## RETURN VALUE
* CC = success
*\--------------------------------------
K.PutS >PUSHYA
K.PutS >STYA ZPPtr2
ldy #0
.1 lda (ZPPtr2),y
beq .2
sta K.IOBuf,y
iny
bne .1
.9 lda #E.BUF
sec
rts
.2 lda #C.CR
sta K.IOBuf,y
iny
beq .9
lda #C.LF
sta K.IOBuf,y
iny
beq .9
lda #0
sta K.IOBuf,y
>PUSHWI K.IOBuf
ldy #S.PS.hStdOut
lda (pPs),y
jsr K.FPutS
bcs K.PutS.RTS
lda #C.CR
sta K.IOBuf
lda #C.LF
sta K.IOBuf+1
ldy #2 write 2 bytes
K.FPutC.Y lda #0
>PUSHYA count
>PUSHWI K.IOBuf buf
jsr IO.Write.I
bcc K.PutS.RTS
bcc .99
tay
bne K.PutS.RTS
bpl .99
>RET 4 pop buf,count but keep char
K.PutS.RTS rts
inc 0 = BLOCKING
* sec
.99 rts
*/--------------------------------------
* # fputs (BLOCKING)
* Write Str to FILE
* Write Str to hFILE
* ## C
* `int fputs (hFILE stream, const char * str );`
* ## ASM
@ -121,23 +134,42 @@ K.PutS.RTS rts
K.FPutS jsr PFT.CheckNodeA set IO.hFD
bcs .9
>PULLYA Get String
>STYA ZPPtr2 Save Buffer
ldx #SYS.strlen Get String len in Y,A
jsr K.SYSCALL.GoB
lda (pStack)
sta ZPPtr2 Get String
ldy #1
lda (pStack),y
sta ZPPtr2+1
* ldy #0
dey
ldx #0
.1 lda (ZPPtr2),y
beq .2
iny
bne .1
inx
bra .1
.2 txa
>PUSHA push len HI
tya
>PUSHA push len LO
>PUSHW ZPPtr2
>PUSHYA push len
>PUSHW ZPPtr2 push buffer
jsr IO.Write.I
bcc .8
tay
bne .8
bpl .9
>RET 4
inc 0 = BLOCKING
.8 rts
.9 >RET 2
.9 >RET 2 pop str
*/--------------------------------------
* # PrintF (BLOCKING)
* # FPrintF (BLOCKING)
@ -361,9 +393,11 @@ K.PrintF.1 stz PrintF.Cnt
jsr K.FWrite
bcc .81
tay
bne .99
bpl .99
>RET 4
inc 0 = BLOCKING
* sec
rts
.80 lda #0 Writing to buffer, append \0
ldy PrintF.Cnt
@ -812,7 +846,7 @@ K.FGetS jsr PFT.CheckNodeA
bcs .9
lda (pFD)
bne K.FGetS.Special
bra K.FGetS.Special
* clc
lda (pStack)
@ -906,17 +940,17 @@ K.FGetS.Special lda (pStack)
.3 jsr K.GetC.I
bcc .2 another char...
.4 tay
bne .9 I/O error
bpl .9 I/O error
lda ZPPtr2
sta (pStack) s
lda ZPPtr2+1
ldy #1
sta (pStack),y s
lda ZPPtr1
eor #$ff
* sec
@ -929,11 +963,11 @@ K.FGetS.Special lda (pStack)
adc #0
iny
sta (pStack),y !(n+2)
lda #0 BLOCKING I/O
lda #0 BLOCKING
sec
rts
.8 lda #0
sta (ZPPtr2) terminate string
clc
@ -967,17 +1001,18 @@ K.GetChar ldy #S.PS.hStdIn
*\--------------------------------------
K.GetC jsr PFT.CheckNodeA
bcs K.GetC.RTS
K.GetC.I >PUSHWI 1
>PUSHWI K.IOBuf
jsr IO.READ.I
bcc .8
tay
bne K.GetC.RTS I/O error
>RET 4 BLOCKING I/O
bpl K.GetC.RTS I/O error
inc 0 = BLOCKING
rts
.8 lda K.IOBuf
K.GetC.RTS rts
@ -1008,7 +1043,7 @@ K.GetC.RTS rts
* A = Number of arguments filled.
*\--------------------------------------
K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format
stz .5+1 reset LStack Ptr
stz .80+1 rest Arg processed
@ -1017,18 +1052,18 @@ K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format
cmp #'%' Escape ?
beq .2
cmp #' ' Space ?
beq .12
cmp (ZPPtr2) Same char in string?
bne .9
inc ZPPtr2
bne .1
inc ZPPtr2+1
bra .1
.12 inc ZPPtr2 Space....
bne .14
inc ZPPtr2+1
@ -1036,28 +1071,28 @@ K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format
.14 cmp (ZPPtr2) another one ?
beq .12
bne .1
.2 jsr MEM.GetCharPtr1 Get specifier after %
beq .9 unexpected End of format after "%" ?
ldx #K.SScanFJMP-K.SScanFTBL-2
.3 cmp K.SScanFTBL,x
beq .4
dex
dex
bpl .3
.9 jsr .8
lda #MLI.E.EOF
sec
rts
.4 jsr .5
bcs .9 out of Ptr on stack
bra .1
.8 lda pStack
sec ByteCnt byte
adc (pStack) ... ByteCnt
@ -1069,12 +1104,12 @@ K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format
.5 lda #$FF SELF MODIFIED LStack Ptr
cmp (pStack)
beq .99 CS
tay
iny
lda (pStack),y
sta ZPPtr3
iny
lda (pStack),y
sta ZPPtr3+1 get VAR Ptr
@ -1110,11 +1145,11 @@ K.SScanF.H lda K.SScanFTBL+1,x Get VAR size
pha
jsr STDLIB.GetHex
K.SScanF.GetVAL jsr K.SScanF.Fwd Y=char count parsed
.1 ply get back VAL size
.2 lda STDLIB.32-1,y
dey
sta (ZPPtr3),y
@ -1134,7 +1169,7 @@ K.SScanF.S ldy #$ff
bne .1
.2 lda #0 add \0 to param ptr
sta (ZPPtr3),y
K.SScanF.Fwd tya Y=char count parsed
clc
adc ZPPtr2
@ -1185,7 +1220,7 @@ K.FOpen jsr PFT.CheckPathYA
jsr STDIO.NewHFile
bcc K.FClose.RTS
jmp IO.Open.ERR
K.FOpen.RET4 >RET 4
@ -1202,18 +1237,18 @@ K.FOpen.RET4 >RET 4
*\--------------------------------------
K.FClose jsr PFT.CheckNodeA
bcs K.FClose.RTS
sta .1+1 store hFile
jsr IO.Close.I
bcs K.FClose.RTS
.1 ldx #$ff SELF MODIFIED
stz OF.Table.hFD-1,x
lda OF.Table.hPath-1,x
beq K.FClose.RTS special files have no path
stz OF.Table.hPath-1,x
jmp K.FreeMem discard filename
@ -1234,8 +1269,16 @@ K.FClose.RTS rts
*\--------------------------------------
K.FRead jsr PFT.CheckNodeA
bcs K.FOpen.RET4
jmp IO.Read.I
jsr IO.Read.I
bcc .9
tay
bpl .9
inc 0 = BLOCKING
.9 rts
*/--------------------------------------
* # FWrite (BLOCKING)
* Write bytes to file
@ -1252,8 +1295,16 @@ K.FRead jsr PFT.CheckNodeA
*\--------------------------------------
K.FWrite jsr PFT.CheckNodeA
bcs K.FOpen.RET4
jmp IO.Write.I
jsr IO.Write.I
bcc .9
tay
bpl .9
inc 0 = BLOCKING
.9 rts
*/--------------------------------------
* # FFlush
* ## C
@ -1265,8 +1316,15 @@ K.FWrite jsr PFT.CheckNodeA
*\--------------------------------------
K.FFlush jsr PFT.CheckNodeA
bcs .9
lda (pFD)
bne STDIO.IOERR
>MLICALL MLIFLUSH
.9 rts
*--------------------------------------
STDIO.IOERR lda #MLI.E.IO
sec
rts
*/-------------------------------------
* # FSeek
* Set the file-position indicator for hFILE
@ -1281,18 +1339,18 @@ K.FFlush jsr PFT.CheckNodeA
*\-------------------------------------
K.FSeek jsr PFT.CheckNodeA
bcc .11
>RET 6
>RET 5
.11 >PULLA whence
tax
>PULLW ZPPtr1 offset LW
>PULLW ZPPtr2 offset HW
cpx #SEEK.END+1
bcs .98
jmp (.1,x)
.1 .DA .10
.DA .20
.DA .30
@ -1313,9 +1371,9 @@ K.FSeek jsr PFT.CheckNodeA
.8 ldy #0
ldx #3 3 bytes, 24 bits!!!
clc
.81 lda K.MLI.PARAMS+2,y
adc ZPPtr1,y
sta K.MLI.PARAMS+2,y
@ -1323,7 +1381,7 @@ K.FSeek jsr PFT.CheckNodeA
iny
dex
bne .81
bcs .99 Offset out of range!
.82 >MLICALL MLISETMARK
@ -1357,9 +1415,9 @@ K.FSeek jsr PFT.CheckNodeA
*\--------------------------------------
K.FEOF jsr PFT.CheckNodeA
bcs .9
jmp IO.EOF
.9 rts
*/--------------------------------------
* # FTell
@ -1377,17 +1435,17 @@ K.FTell jsr PFT.CheckNodeA
bcs .9
>MLICALL MLIGETMARK
bcs .9
lda #0
>PUSHA
ldy #2
.1 lda K.MLI.PARAMS+2,y
>PUSHA
dey
bpl .1
.9 rts
*/--------------------------------------
* # Remove
@ -1402,7 +1460,7 @@ K.FTell jsr PFT.CheckNodeA
*\--------------------------------------
K.Remove jsr PFT.CheckPathYA
bcs .9
>MLICALL MLIDESTROY
.9 rts
*/--------------------------------------
@ -1421,16 +1479,16 @@ K.Rename jsr PFT.CheckPathYA
bcs .9
>PULLW .1+1
ldy #0
.1 lda $ffff,y Self Modified
beq .8
iny
sta K.Buf256,y
cpy #MLI.MAXPATH
bne .1
.8 sty K.Buf256
>LDYAI K.Buf256
>STYA K.MLI.PARAMS+3
@ -1449,30 +1507,30 @@ STDIO.NewHFile sta .4+1 Store hFD
.1 lda OF.Table.hFD-1,x
beq .2
inx
cpx #K.OF.MAX+1
bne .1
lda #E.OOH
* sec
rts
.2 stx .3+1 Store hFILE
lda (pFD)
cmp #S.FD.T.CDEV
beq .20
cmp #S.FD.T.BDEV
bne .21
.20 lda #0 No hPath for DEV
bra .3
.21 >LDYAI K.buf256
ldx #SYS.strdup
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs .9
txa
@ -1483,14 +1541,10 @@ STDIO.NewHFile sta .4+1 Store hFD
sta OF.Table.hFD-1,x
txa hFILE
clc
.9 rts
*--------------------------------------
STDIO.IOERR lda #MLI.E.IO
sec
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.STDIO
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -315,7 +315,7 @@ STDLIB.realpath.I
ror .82+1
ldx #SYS.ExpandStr
jsr K.SYSCALL.GoB
jsr K.SYSCALL2.BANK
bcs STDLIB.32.RTS
>STYA ZPPtr1
@ -426,8 +426,7 @@ STDLIB.realpath.I
bpl .88
>LDYAI K.Buf256
ldx #SYS.StrDup BANK 2
jsr K.SYSCALL.GoB
rts
jmp K.SYSCALL2.BANK
.88 clc
rts

View File

@ -266,8 +266,8 @@ DRV.TERM.READ jsr DRV.TERM.GetIOCTLBufCntDCB
clc
rts
.9 lda #0 Error = char
sec
.9 lda #E.NODATA
* sec
rts
*--------------------------------------
DRV.TERM.WRITE jsr DRV.TERM.GetIOCTLBufCntDCB
@ -296,6 +296,8 @@ DRV.TERM.WRITE jsr DRV.TERM.GetIOCTLBufCntDCB
.DA DRV.TERM.ESC
.DA DRV.TERM.CSI
.DA DRV.TERM.IAC
.DA DRV.TERM.G0
.DA DRV.TERM.G1
*--------------------------------------
DRV.TERM.COUT lda (ZPBufPtr)
@ -332,9 +334,7 @@ DRV.TERM.COUT lda (ZPBufPtr)
.DA DRV.TERM.COUT.FS
.DA DRV.TERM.COUT.ESC
.8 ldy #S.DCB.TTY.bINVERSE
ora (ZPDCBPtr),y
jsr SetCharAtCurPos
.8 jsr SetCharAtCurPos
*--------------------------------------
DRV.TERM.COUT.FS
ldy #S.DCB.TTY.CH
@ -378,8 +378,6 @@ DRV.TERM.COUT.DEL
sta (ZPDCBPtr),y S.DCB.TTY.CH
.3 lda #$20
ldy #S.DCB.TTY.bINVERSE
ora (ZPDCBPtr),y
jmp SetCharAtCurPos
*--------------------------------------
DRV.TERM.COUT.FF
@ -438,6 +436,8 @@ DRV.TERM.ESC1 lda #0 y = #S.DCB.TTY.MODE
.4 .DA Scroll.Dn M
.DA Scroll.Up D
.DA RESET c
.DA G0 (
.DA G1 )
*--------------------------------------
DRV.TERM.CSI ldy #S.DCB.TTY.INBUFFER
lda (ZPDCBPtr),y
@ -453,9 +453,7 @@ DRV.TERM.CSI ldy #S.DCB.TTY.INBUFFER
cpy #S.DCB.TTY.INBUFFER.MAX-1 buffer full?
bne .8
lda #0
ldy #S.DCB.TTY.MODE
sta (ZPDCBPtr),y
jmp RESET.MODE
.8 clc
rts
@ -526,9 +524,7 @@ DRV.TERM.CSI.Exec
pha
lda #0
ldy #S.DCB.TTY.MODE
sta (ZPDCBPtr),y
jsr RESET.MODE
pla
@ -576,7 +572,9 @@ Csi.LWDisable clc
rts
*--------------------------------------
Csi.DispAttr ldx CsiParamCnt
beq .8
bne .1
jmp RESETATTR
.1 lda CsiParams-1,x
bne .2
@ -585,9 +583,9 @@ Csi.DispAttr ldx CsiParamCnt
bra .7
.2 eor #7
bne .8
bne .7
ldy #S.DCB.TTY.bINVERSE
.3 ldy #S.DCB.TTY.bINVERSE
sta (ZPDCBPtr),y
.7 dex
@ -676,7 +674,7 @@ Csi.Home lda CsiParamCnt
ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y
iny
iny S.DCB.TTY.CV
sta (ZPDCBPtr),y
clc
rts
@ -718,6 +716,11 @@ Csi.Home lda CsiParamCnt
Csi.Home.8 clc
rts
*--------------------------------------
DRV.TERM.G0
DRV.TERM.G1
jmp RESET.MODE
*--------------------------------------
DRV.TERM.IAC ldy #S.DCB.TTY.INBUFFER
lda (ZPDCBPtr),y
inc
@ -843,8 +846,7 @@ COUT.IAC.DONT
COUT.IAC.EXIT
*--------------------------------------
RESET.MODE lda #0
ldy #S.DCB.TTY.MODE
SET.MODE ldy #S.DCB.TTY.MODE
sta (ZPDCBPtr),y
clc
rts
@ -865,6 +867,12 @@ RESETATTR lda #$80
clc
rts
*--------------------------------------
G0 lda #S.DCB.TTY.MODE.G0
.HS 2C BIT ABS
*--------------------------------------
G1 lda #S.DCB.TTY.MODE.G1
bra SET.MODE
*--------------------------------------
ENQ ldx #0
.1 lda ENQ.String,x
@ -1263,7 +1271,7 @@ RESET.VALUES .DA #0 S.DCB.TTY.MODE
CtrlChars .HS 05080A0C0D151B
CtrlChars.Cnt .EQ *-CtrlChars
*--------------------------------------
EscCodes .AZ "MDc"
EscCodes .AZ "MDc()"
EscCodes.Cnt .EQ *-EscCodes
CsiCodes .AS "hlmnrKH"
CsiCodes.Cnt .EQ *-CsiCodes

View File

@ -167,7 +167,9 @@ SetCharAtCurPos.SCR
pla
bra SetCharAtY.SCR
SetCharAtCurPos pha
SetCharAtCurPos ldy #S.DCB.TTY.bINVERSE
ora (ZPDCBPtr),y
pha
ldy #S.DCB.TTY.CV
lda (ZPDCBPtr),y
tax
@ -226,6 +228,9 @@ GetCharAtCurPos ldy #S.DCB.TTY.CV
rts
*--------------------------------------
REMAP.95.126 .HS 404142434445464748494a4b4c4d4e4f
.HS 505152535455565758595a5b5c5d5e5f
*--------------------------------------
BUF.BASEL .DA #0
.DA #80
.DA #160