mirror of https://github.com/A2osX/A2osX.git
Kernel 0.94
This commit is contained in:
parent
10732cb5ce
commit
fe193891d1
404
.Docs/KERNEL.md
404
.Docs/KERNEL.md
|
@ -30,8 +30,8 @@ Expand String and convert to StrV List
|
|||
short int arg2argv(char* args, char* argv[])
|
||||
|
||||
## ASM
|
||||
`>PUSHW args`
|
||||
`>PUSHW argv`
|
||||
`>LDYA args`
|
||||
`>SYSCALL Arg2ArgV`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -82,11 +82,11 @@ X = hDev
|
|||
# GetDevStatus
|
||||
|
||||
## C
|
||||
`int getdevstatus(short int DevID, S.DIB* dstat);`
|
||||
`int getdevstatus(short int DevID, S.DIB *dstat);`
|
||||
|
||||
## ASM
|
||||
`>PUSHWI S.DIB`
|
||||
`lda DevID`
|
||||
`PUSHB DevID`
|
||||
`>PUSHW S.DIB`
|
||||
`>SYSCALL GetDevStatus`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -95,23 +95,37 @@ X = hDev
|
|||
Create a hDEV
|
||||
|
||||
## C
|
||||
`hDEV mkdev (S.FD * fd, const char *devname)`
|
||||
`hDEV mkdev (S.FD *fd, const char *devname)`
|
||||
|
||||
## ASM
|
||||
`>PUSHW fd`
|
||||
`>PUSHW devname`
|
||||
`>LDYA fd`
|
||||
`>SYSCALL mkdev
|
||||
|
||||
## RETURN VALUE
|
||||
A = hDEV
|
||||
|
||||
# IOCTL
|
||||
|
||||
## C
|
||||
`int ioctl(short int DevID, int request, void * param );`
|
||||
|
||||
## ASM
|
||||
`>PUSHB hDEV`
|
||||
`>PUSHB request`
|
||||
`>PUSHW param`
|
||||
`>SYSCALL IOCTL`
|
||||
|
||||
## RETURN VALUE
|
||||
Y,A = ...
|
||||
|
||||
# OpenDir
|
||||
|
||||
## C
|
||||
`int hDIR opendir (const char * dirpath);`
|
||||
|
||||
## ASM
|
||||
`>LDYA dirpath`
|
||||
`>PUSHW dirpath`
|
||||
`>SYSCALL opendir`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -150,25 +164,10 @@ Create a hDEV
|
|||
## RETURN VALUE
|
||||
none, always succeed.
|
||||
|
||||
# Expand
|
||||
|
||||
## C
|
||||
`char *expand(const char *str, char *expanded);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW str`
|
||||
`>PUSHW expanded`
|
||||
`>SYSCALL expand`
|
||||
|
||||
## RETURN VALUE
|
||||
Y,A = PTR to Expanded String
|
||||
X = hMem to Expanded String (C-String)
|
||||
|
||||
# SetEnv
|
||||
Change or add an environment variable
|
||||
|
||||
## C
|
||||
## C / CSH
|
||||
`int setenv(const char *name, const char *value);`
|
||||
|
||||
## ASM
|
||||
|
@ -183,7 +182,7 @@ Change or add an environment variable
|
|||
searches the environment list to find the environment variable name,
|
||||
and returns a pointer to the corresponding value string.
|
||||
|
||||
## C
|
||||
## C / CSH
|
||||
`char *getenv(const char *name, char *value);`
|
||||
|
||||
## ASM
|
||||
|
@ -199,7 +198,7 @@ and returns a pointer to the corresponding value string.
|
|||
# PutEnv
|
||||
Change or add an environment variable, string is 'NAME=VALUE'
|
||||
|
||||
## C
|
||||
## C / CSH
|
||||
`int putenv(char *string);`
|
||||
|
||||
## ASM
|
||||
|
@ -212,7 +211,7 @@ Change or add an environment variable, string is 'NAME=VALUE'
|
|||
# UnsetEnv
|
||||
Remove an environment variable
|
||||
|
||||
## C
|
||||
## C / CSH
|
||||
`int unsetenv(const char *name);`
|
||||
|
||||
## ASM
|
||||
|
@ -222,37 +221,13 @@ Remove an environment variable
|
|||
|
||||
## RETURN VALUE
|
||||
|
||||
# ChTyp
|
||||
Change The type of a ProDOS File
|
||||
|
||||
## C
|
||||
`int chtyp(const char *filepath, const char filetype);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHBI filetype`
|
||||
`>LDYA filepath`
|
||||
`>SYSCALL chtyp`
|
||||
|
||||
## RETURN VALUE
|
||||
|
||||
# ChOwn
|
||||
**In:**
|
||||
PUSHW = mod
|
||||
PUSHW = PATH
|
||||
|
||||
# ChGrp
|
||||
**In:**
|
||||
PUSHW = GID
|
||||
PUSHW = PATH
|
||||
|
||||
# Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32
|
||||
Return X+Y, X-Y, X*Y, X/Y, X mod Y....
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHF X (long)`
|
||||
`>PUSHF Y (long)`
|
||||
`>PUSHL X (long)`
|
||||
`>PUSHL Y (long)`
|
||||
`>FPU add32`
|
||||
`...`
|
||||
|
||||
|
@ -323,20 +298,6 @@ Return float rounded into a long
|
|||
## RETURN VALUE
|
||||
On stack (long)
|
||||
|
||||
# IOCTL
|
||||
|
||||
## C
|
||||
`int ioctl(short int DevID, int request, void * param );`
|
||||
|
||||
## ASM
|
||||
`PUSHWI param`
|
||||
`PUSHBI request`
|
||||
`lda hDEV`
|
||||
`>SYSCALL IOCTL`
|
||||
|
||||
## RETURN VALUE
|
||||
Y,A = ...
|
||||
|
||||
## MD5
|
||||
Return MD5 Hash for input String
|
||||
|
||||
|
@ -439,10 +400,10 @@ Y,A = PTR to MemBlock
|
|||
|
||||
# LoadStkObj
|
||||
Load a file in AUX memory (Stock Objects)
|
||||
PUSHW = AUXTYPE (Handled by....
|
||||
PUSHB = TYPE ...
|
||||
PUSHW = PATH (Handled by....
|
||||
PUSHB = MODE ...
|
||||
LDYA = PATH ...FOpen)
|
||||
PUSHB = TYPE ...
|
||||
PUSHW = AUXTYPE ...FOpen)
|
||||
|
||||
## RETURN VALUE
|
||||
Y,A = File Length
|
||||
|
@ -465,8 +426,8 @@ Load a file in AUX memory (Stock Objects)
|
|||
|
||||
# ExecL
|
||||
|
||||
## C
|
||||
`int execl(const char* cmdline, short int flags);`
|
||||
## C / CSH
|
||||
`int execl(const char *cmdline, short int flags);`
|
||||
|
||||
## ASM
|
||||
`>PUSHW cmdline`
|
||||
|
@ -478,12 +439,12 @@ A = Child PSID
|
|||
|
||||
# ExecV
|
||||
|
||||
## C
|
||||
## C / CSH
|
||||
`int execv(const char* argv[], short int flags);`
|
||||
|
||||
## ASM
|
||||
`>PUSHW argv`
|
||||
`>PUSHB flags`
|
||||
`>LDYA argv`
|
||||
`>SYSCALL execv`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -492,7 +453,7 @@ A = Child PSID
|
|||
# Fork
|
||||
|
||||
## C
|
||||
`short nt fork();`
|
||||
`short int fork();`
|
||||
|
||||
## ASM
|
||||
`>SYSCALL fork`
|
||||
|
@ -696,6 +657,20 @@ A=hSList
|
|||
|
||||
## RETURN VALUE
|
||||
|
||||
# ChTyp
|
||||
Change The type of a ProDOS File
|
||||
|
||||
## C
|
||||
`int chtyp(const char *filepath, short int filetype);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW filepath`
|
||||
`>PUSHB filetype`
|
||||
`>SYSCALL chtyp`
|
||||
|
||||
## RETURN VALUE
|
||||
|
||||
# Stat
|
||||
Return information about a file
|
||||
|
||||
|
@ -704,8 +679,8 @@ Return information about a file
|
|||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW pathname`
|
||||
`>PUSHW statbuf`
|
||||
`>LDYA pathname`
|
||||
`>SYSCALL stat`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -718,8 +693,8 @@ create a directory
|
|||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW pathname`
|
||||
`>PUSHW mode`
|
||||
`>LDYA pathname`
|
||||
`>SYSCALL mkdir`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -832,78 +807,6 @@ Write Str to hFILE
|
|||
## RETURN VALUE
|
||||
CC = success
|
||||
|
||||
# PrintF (BLOCKING)
|
||||
|
||||
# FPrintF (BLOCKING)
|
||||
|
||||
# SPrintF
|
||||
Prints C-Style String
|
||||
|
||||
## C
|
||||
`int printf ( const char * format, ... );`
|
||||
`int fprintf ( hFILE stream, const char * format, ... );`
|
||||
`int sprintf ( char * str, const char * format, ... );`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes)
|
||||
`>PUSHYA` #I
|
||||
`>PUSHBI 2` #bytecount
|
||||
`...`
|
||||
`>LDYAI format`
|
||||
`>SYSCALL printf`
|
||||
FPrintF :
|
||||
`>PUSHYA` #I
|
||||
`>PUSHBI 2` #bytecount
|
||||
`...`
|
||||
`>PUSHWI format`
|
||||
`lda hFILE`
|
||||
`>SYSCALL fprintf`
|
||||
SPrintF :
|
||||
`>PUSHYA` #I
|
||||
`>PUSHBI 2` #bytecount
|
||||
`...`
|
||||
`>PUSHWI format`
|
||||
`>LDYAI str`
|
||||
`>SYSCALL sprintf`
|
||||
|
||||
## RETURN VALUE
|
||||
CC : success, Y,A = bytes sent
|
||||
CS : error, A = code from Output
|
||||
Specifiers :
|
||||
+ %b : pull 1 byte to Print BIN
|
||||
+ %d : pull 1 byte unsigned DEC 0..255
|
||||
+ %D : pull 2 bytes unsigned DEC 0..65535
|
||||
+ %u : pull 4 bytes long unsigned DEC 0..4294967295
|
||||
+ %e : pull 5 Bytes float (-)1.23456789e+12
|
||||
+ %f : pull 5 Bytes float (-)3.1415
|
||||
+ %h : pull 1 byte to Print HEX
|
||||
+ %H : pull 2 bytes to Print HEX
|
||||
+ %i : pull 1 byte to Print signed DEC -128..127
|
||||
+ %I : pull 2 bytes to Print signed DEC -32768..32767
|
||||
+ %L : pull 4 bytes signed DEC -2147483648..2147483647
|
||||
+ %s : pull 2 bytes ptr to C-Style String
|
||||
+ %S : pull 2 bytes ptr to P-Style String
|
||||
+ \b : Print 'BS' (08)
|
||||
+ \e : Print 'ESC' ($1B,27)
|
||||
+ \f : Print 'FF' ($0C,12)
|
||||
+ \n : Print 'LF' ($0A,10)
|
||||
+ \r : Print 'CR' ($0D,13)
|
||||
+ \t : Print 'TAB' ($09,09)
|
||||
+ \v : Print 'VT' ($0B,11)
|
||||
+ \xHH : Print byte with hexadecimal value HH (1 to 2 digits)
|
||||
+ \\\\ : Print \
|
||||
+ \\% : Print %
|
||||
|
||||
Modifiers for len and padding :
|
||||
+ %d : '9' '12'
|
||||
+ %2d : ' 9' '12'
|
||||
+ %02d : '09' '12'
|
||||
+ %11s : 'ABCDEFGH '
|
||||
+ %011s : 'ABCDEFGH000'
|
||||
+ %2f : '3.14'
|
||||
|
||||
|
||||
# fgets (BLOCKING)
|
||||
read bytes from stream into the array
|
||||
pointed to by s, until n-1 bytes are read, or a <newline> is read and
|
||||
|
@ -953,52 +856,24 @@ Get char from Node
|
|||
CC = success
|
||||
A = char
|
||||
|
||||
# SScanF
|
||||
Read formatted data from string
|
||||
|
||||
## C
|
||||
`int sscanf ( const char * s, const char * format, ... );`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW ptr`
|
||||
`...`
|
||||
`>PUSHBI bytecount`
|
||||
`>PUSHWI format`
|
||||
+ %i : short int
|
||||
+ %d : byte
|
||||
+ %I : int
|
||||
+ %D : word
|
||||
+ %L : long int
|
||||
+ %U : dword
|
||||
+ %h : HEX byte
|
||||
+ %H : HEX word
|
||||
+ %s : string
|
||||
|
||||
TODO : %10s
|
||||
`>LDYA s`
|
||||
`>SYSCALL sscanf`
|
||||
|
||||
## RETURN VALUE
|
||||
A = Number of arguments filled.
|
||||
|
||||
# FOpen
|
||||
Open a file
|
||||
|
||||
## C
|
||||
`hFILE fopen ( const char * filename, short int flags, short int ftype, int auxtype );`
|
||||
`short int fopen ( const char *filename, short int flags, short int ftype, int auxtype );`
|
||||
**In:**
|
||||
|
||||
## ASM
|
||||
`>PUSHWI auxtype`
|
||||
`>PUSHBI ftype`
|
||||
`>PUSHBI flags`
|
||||
`>PUSHW filename`
|
||||
`>PUSHB flags`
|
||||
+ O.RDONLY : if R and exists -> ERROR
|
||||
+ O.WRONLY : if W and exists -> CREATE
|
||||
+ O.TRUNC : Reset Size To 0
|
||||
+ O.APPEND : Append
|
||||
+ O.TEXT : Open/Append in Text mode
|
||||
+ O.CREATE : Create if not exists
|
||||
`>PUSHB ftype`
|
||||
`>PUSHW auxtype`
|
||||
TODO: replace flags/ftype/auxtype with mode="w+,t=TYP,x=AUXTYPE"
|
||||
+ r = O_RDONLY
|
||||
+ r+ = O_RDWR
|
||||
|
@ -1008,7 +883,6 @@ TODO: replace flags/ftype/auxtype with mode="w+,t=TYP,x=AUXTYPE"
|
|||
+ a+ = O_RDWR | O_CREAT | O_APPEND
|
||||
+ ,t=123 or t=$ff or t=TXT
|
||||
+ ,x=12345 or x=$ffff
|
||||
`>LDYAI filename`
|
||||
|
||||
## RETURN VALUE
|
||||
CC : A = hFILE
|
||||
|
@ -1121,7 +995,7 @@ int remove(const char *pathname);
|
|||
|
||||
## ASM
|
||||
**In:**
|
||||
`>LDYA pathname`
|
||||
`>PUSHW pathname`
|
||||
`>SYSCALL remove`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -1134,12 +1008,134 @@ Rename a file
|
|||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW oldpath`
|
||||
`>PUSHW newpath`
|
||||
`>LDYA oldpath`
|
||||
`>SYSCALL rename`
|
||||
|
||||
## RETURN VALUE
|
||||
|
||||
# PrintF (BLOCKING)
|
||||
|
||||
# FPrintF (BLOCKING)
|
||||
|
||||
# SPrintF
|
||||
Prints C-Style String
|
||||
|
||||
## C
|
||||
`int printf ( const char *format, ... );`
|
||||
`int fprintf ( short int stream, const char *format, ... );`
|
||||
`int sprintf ( char *str, const char *format, ... );`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes)
|
||||
`>PUSHW format`
|
||||
`>PUSHW i`
|
||||
`...`
|
||||
`>PUSHBI 2` #bytecount
|
||||
`>SYSCALL printf`
|
||||
FPrintF :
|
||||
`>PUSHB hFILE`
|
||||
`>PUSHW format`
|
||||
`>PUSHW i`
|
||||
`...`
|
||||
`>PUSHBI 2` #bytecount
|
||||
`>SYSCALL fprintf`
|
||||
SPrintF :
|
||||
`>PUSHW str`
|
||||
`>PUSHW format`
|
||||
`>PUSHW i`
|
||||
`...`
|
||||
`>PUSHBI 2` #bytecount
|
||||
`>SYSCALL sprintf`
|
||||
|
||||
## RETURN VALUE
|
||||
CC : success, Y,A = bytes sent
|
||||
CS : error, A = code from Output
|
||||
Specifiers :
|
||||
+ %b : pull 1 byte to Print BIN
|
||||
+ %d : pull 1 byte unsigned DEC 0..255
|
||||
+ %D : pull 2 bytes unsigned DEC 0..65535
|
||||
+ %u : pull 4 bytes long unsigned DEC 0..4294967295
|
||||
+ %e : pull 5 Bytes float (-)1.23456789e+12
|
||||
+ %f : pull 5 Bytes float (-)3.1415
|
||||
+ %h : pull 1 byte to Print HEX
|
||||
+ %H : pull 2 bytes to Print HEX
|
||||
+ %i : pull 1 byte to Print signed DEC -128..127
|
||||
+ %I : pull 2 bytes to Print signed DEC -32768..32767
|
||||
+ %L : pull 4 bytes signed DEC -2147483648..2147483647
|
||||
+ %s : pull 2 bytes ptr to C-Style String
|
||||
+ %S : pull 2 bytes ptr to P-Style String
|
||||
+ \b : Print 'BS' (08)
|
||||
+ \e : Print 'ESC' ($1B,27)
|
||||
+ \f : Print 'FF' ($0C,12)
|
||||
+ \n : Print 'LF' ($0A,10)
|
||||
+ \r : Print 'CR' ($0D,13)
|
||||
+ \t : Print 'TAB' ($09,09)
|
||||
+ \v : Print 'VT' ($0B,11)
|
||||
+ \xHH : Print byte with hexadecimal value HH (1 to 2 digits)
|
||||
+ \\\\ : Print \
|
||||
+ \\% : Print %
|
||||
|
||||
Modifiers for len and padding :
|
||||
+ %d : '9' '12'
|
||||
+ %2d : ' 9' '12'
|
||||
+ %02d : '09' '12'
|
||||
+ %11s : 'ABCDEFGH '
|
||||
+ %011s : 'ABCDEFGH000'
|
||||
+ %2f : '3.14'
|
||||
|
||||
|
||||
# ScanF (BLOCKING)
|
||||
|
||||
# FScanF (BLOCKING)
|
||||
|
||||
# SScanF
|
||||
Read formatted data from string
|
||||
|
||||
## C
|
||||
`int scanf(const char *format, ...);`
|
||||
`int fscanf(short int stream, const char *format, ...);`
|
||||
`int sscanf ( const char *s, const char *format, ... );`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
ScanF :
|
||||
`>PUSHW format`
|
||||
`>PUSHW ptr`
|
||||
`...`
|
||||
`>PUSHB bytecount`
|
||||
`>SYSCALL scanf`
|
||||
FScanF :
|
||||
`>PUSHB stream`
|
||||
`>PUSHW format`
|
||||
`>PUSHW ptr`
|
||||
`...`
|
||||
`>PUSHB bytecount`
|
||||
`>SYSCALL fscanf`
|
||||
SScanF :
|
||||
`>PUSHW s`
|
||||
`>PUSHW format`
|
||||
`>PUSHW ptr`
|
||||
`...`
|
||||
`>PUSHB bytecount`
|
||||
`>SYSCALL sscanf`
|
||||
Specifiers :
|
||||
+ %i : short int
|
||||
+ %d : byte
|
||||
+ %I : int
|
||||
+ %D : word
|
||||
+ %L : long int
|
||||
+ %U : dword
|
||||
+ %h : HEX byte
|
||||
+ %H : HEX word
|
||||
+ %s : string
|
||||
|
||||
TODO : %10s
|
||||
|
||||
## RETURN VALUE
|
||||
A = Number of arguments filled.
|
||||
|
||||
# strtof
|
||||
Convert String to 40 bits Float
|
||||
|
||||
|
@ -1178,9 +1174,9 @@ Convert String to 32 bits (unsigned) int
|
|||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW str`
|
||||
`>PUSHW EndPtr`
|
||||
`>PUSHB Base`
|
||||
`>PUSHWI EndPtr`
|
||||
`>LDYAI str`
|
||||
`>SYSCALL strtol`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -1217,13 +1213,13 @@ Convert String to 16 bits int
|
|||
# RealPath
|
||||
Return the canonicalized absolute pathname
|
||||
|
||||
## C
|
||||
`unsigned short int realpath (const char* str, char *resolvedpath);`
|
||||
## C / CSH
|
||||
`char *realpath(const char *path, char *resolvedpath);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHWI resolvedpath`
|
||||
`>LDYA str`
|
||||
`>PUSHW path`
|
||||
`>PUSHW resolvedpath`
|
||||
`>SYSCALL realpath`
|
||||
|
||||
## RETURN VALUE
|
||||
|
@ -1232,6 +1228,20 @@ CC : success
|
|||
X = hMem of Full Path
|
||||
CS : A = Error Code
|
||||
|
||||
# Expand
|
||||
|
||||
## C
|
||||
`char *expand(const char *str, char *expanded);`
|
||||
|
||||
## ASM
|
||||
`>PUSHW str`
|
||||
`>PUSHW expanded`
|
||||
`>SYSCALL expand`
|
||||
|
||||
## RETURN VALUE
|
||||
Y,A = PTR to Expanded String
|
||||
X = hMem to Expanded String (C-String)
|
||||
|
||||
# StrLen
|
||||
Returns Length of C-String
|
||||
|
||||
|
@ -1440,6 +1450,20 @@ Convert S.TIME struct to CSTR
|
|||
|
||||
## RETURN VALUE
|
||||
|
||||
# ChOwn
|
||||
|
||||
## C
|
||||
`short int chown(const char *pathname, short int owner, short int group);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`>PUSHW pathname`
|
||||
`>PUSHB owner`
|
||||
`>PUSHB group`
|
||||
`>SYSCALL chown`
|
||||
|
||||
## RETURN VALUE
|
||||
|
||||
# open
|
||||
|
||||
## C
|
||||
|
|
Binary file not shown.
|
@ -260,8 +260,8 @@ Ctrl.CR lda #C.CR
|
|||
>INCW.G FileY
|
||||
|
||||
>STZ.G CurX
|
||||
>LDA.G CurY
|
||||
|
||||
>LDA.G CurY
|
||||
>CMP.G ViewPortHm1
|
||||
bne .1
|
||||
|
||||
|
@ -276,13 +276,13 @@ Ctrl.CR lda #C.CR
|
|||
>PUSHW LineBufPtr
|
||||
>PUSHW L.SEQ.SCROLLCURDN
|
||||
|
||||
>LDA.G ScreenH
|
||||
dec
|
||||
>PUSHA
|
||||
>LDA.G CurY
|
||||
inc
|
||||
inc
|
||||
>PUSHA
|
||||
>LDA.G ScreenH
|
||||
dec
|
||||
>PUSHA
|
||||
>PUSHBI 2
|
||||
jsr SCRN.LineBufSprintf
|
||||
.99 bcs .9
|
||||
|
|
|
@ -88,8 +88,9 @@ DumpDev >LDYA L.MSG0
|
|||
dey
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
>PUSHB Index
|
||||
>PUSHEA.G DEV.DIB
|
||||
lda Index
|
||||
>SYSCALL GetDevStatus
|
||||
bcc .6
|
||||
|
||||
|
|
|
@ -3,13 +3,10 @@ NEW
|
|||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/MEM
|
||||
.TF bin/mem
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
*--------------------------------------
|
||||
PAGELEN .EQ 22
|
||||
FOOTERLEN .EQ 8
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR ZPBIN
|
||||
|
|
|
@ -15,7 +15,7 @@ NEW
|
|||
ZS.START
|
||||
ArgIndex .BS 1
|
||||
ArgFile .BS 1
|
||||
ZPPTR1 .BS 2
|
||||
ZPPtr1 .BS 2
|
||||
|
||||
bFormatStr .BS 1
|
||||
|
||||
|
@ -66,8 +66,8 @@ CS.RUN
|
|||
jsr CS.RUN.CheckOpt
|
||||
bcc .1
|
||||
|
||||
.99 >PUSHBI 0
|
||||
>LDYA L.MSG.USAGE
|
||||
.99 >PUSHW L.MSG.USAGE
|
||||
>PUSHBI 0
|
||||
>SYSCALL printf
|
||||
lda #E.SYN
|
||||
sec
|
||||
|
@ -80,12 +80,12 @@ CS.RUN
|
|||
sta ArgFile
|
||||
bra .1
|
||||
|
||||
.3 ldx ArgFile
|
||||
.3 lda ArgFile
|
||||
beq .99
|
||||
|
||||
>PUSHW pData
|
||||
txa
|
||||
>SYSCALL ArgV
|
||||
>PUSHYA
|
||||
>PUSHW pData
|
||||
>SYSCALL Stat
|
||||
bcs .9
|
||||
|
||||
|
@ -104,26 +104,27 @@ CS.RUN.DUMP lda ArgFile
|
|||
>SYSCALL Realpath
|
||||
bcs CS.RUN.RTS
|
||||
|
||||
>STYA ZPPtr1
|
||||
phx
|
||||
>PUSHYA
|
||||
>PUSHW L.MSG.Filename
|
||||
>PUSHW ZPPtr1
|
||||
>PUSHBI 2
|
||||
>LDYA L.MSG.Filename
|
||||
>SYSCALL printf
|
||||
pla
|
||||
>SYSCALL freemem
|
||||
|
||||
jsr Mod2CSTR
|
||||
>PUSHW L.MSG.Mode
|
||||
>PUSHEA.G MOD
|
||||
>PUSHBI 2
|
||||
>LDYA L.MSG.Mode
|
||||
>SYSCALL printf
|
||||
|
||||
>PUSHL.G StatBuf+S.STAT.BLOCKS
|
||||
>PUSHL.G StatBuf+S.STAT.SIZE
|
||||
>PUSHW.G StatBuf+S.STAT.GID
|
||||
>PUSHW L.MSG.UIDGIDSIZE
|
||||
>PUSHW.G StatBuf+S.STAT.UID
|
||||
>PUSHW.G StatBuf+S.STAT.GID
|
||||
>PUSHL.G StatBuf+S.STAT.SIZE
|
||||
>PUSHL.G StatBuf+S.STAT.BLOCKS
|
||||
>PUSHBI 12
|
||||
>LDYA L.MSG.UIDGIDSIZE
|
||||
>SYSCALL printf
|
||||
|
||||
jsr CS.RUN.PrintAMCTime
|
||||
|
@ -205,11 +206,11 @@ CS.RUN.PrintAMCTime
|
|||
>PUSHEA.G StatBuf+S.STAT.CTIME
|
||||
>SYSCALL StrFTime
|
||||
|
||||
.8 >PUSHEA.G TIME.Create
|
||||
.8 >PUSHW L.MSG.AMCTimes
|
||||
>PUSHEA.G TIME.Create
|
||||
>PUSHEA.G TIME.Mod
|
||||
>PUSHEA.G TIME.Access
|
||||
>PUSHBI 6
|
||||
>LDYA L.MSG.AMCTimes
|
||||
>SYSCALL printf
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -268,9 +269,9 @@ MSG.UIDGIDSIZE .AS "UID : %10D\r\n"
|
|||
.AS "GID : %10D\r\n"
|
||||
.AS "Size : %10u\r\n"
|
||||
.AZ "Blocks : %10u\r\n"
|
||||
MSG.AMCTimes .AS "Accessed : %s\r\n"
|
||||
MSG.AMCTimes .AS "Created : %s\r\n"
|
||||
.AS "Modified : %s\r\n"
|
||||
.AZ "Created : %s\r\n"
|
||||
.AZ "Accessed : %s\r\n"
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
|
|
|
@ -163,7 +163,7 @@ SEEK.CUR .EQ $01
|
|||
SEEK.END .EQ $02
|
||||
*--------------------------------------
|
||||
* A2osX.SYSCALL Functions Indexes
|
||||
*--------------------------------------
|
||||
*--------------------------------------D1
|
||||
* STAT
|
||||
SYS.ChTyp .EQ $00
|
||||
SYS.ChMod .EQ $02
|
||||
|
@ -182,8 +182,7 @@ SYS.Open .EQ $16
|
|||
SYS.Close .EQ $18
|
||||
SYS.Read .EQ $1A
|
||||
SYS.Write .EQ $1C
|
||||
* IO
|
||||
SYS.IOCTL .EQ $1E
|
||||
* .EQ $1E
|
||||
* STDIO
|
||||
SYS.FPutC .EQ $20
|
||||
SYS.PutChar .EQ $22
|
||||
|
@ -207,19 +206,20 @@ SYS.Remove .EQ $40
|
|||
SYS.Rename .EQ $42
|
||||
* .EQ $44
|
||||
* .EQ $46
|
||||
* DEV
|
||||
* .EQ $48
|
||||
SYS.GetDevByName .EQ $4A
|
||||
SYS.GetDevStatus .EQ $4C
|
||||
SYS.MKDev .EQ $4E
|
||||
* STDIO2
|
||||
* .EQ $50
|
||||
SYS.PrintF .EQ $48
|
||||
SYS.FPrintF .EQ $4A
|
||||
SYS.SPrintF .EQ $4C
|
||||
SYS.ScanF .EQ $4E
|
||||
|
||||
SYS.FScanF .EQ $50
|
||||
SYS.SScanF .EQ $52
|
||||
* .EQ $54
|
||||
* .EQ $56
|
||||
SYS.PrintF .EQ $58
|
||||
SYS.SPrintF .EQ $5A
|
||||
SYS.FPrintF .EQ $5C
|
||||
|
||||
* .EQ $58
|
||||
* .EQ $5A
|
||||
* .EQ $5C
|
||||
* .EQ $5E
|
||||
|
||||
* .EQ $60
|
||||
|
@ -231,7 +231,7 @@ SYS.FPrintF .EQ $5C
|
|||
* .EQ $6A
|
||||
* .EQ $6C
|
||||
* .EQ $6E
|
||||
*--------------------------------------
|
||||
*--------------------------------------D2
|
||||
* STDLIB
|
||||
SYS.AToF .EQ $70
|
||||
SYS.AToI .EQ $72
|
||||
|
@ -250,11 +250,11 @@ SYS.StrUpr .EQ $88
|
|||
SYS.StrLwr .EQ $8A
|
||||
SYS.StrCmp .EQ $8C
|
||||
SYS.StrCaseCmp .EQ $8E
|
||||
|
||||
* .EQ $90
|
||||
* .EQ $92
|
||||
* .EQ $94
|
||||
* .EQ $96
|
||||
* DEV
|
||||
SYS.GetDevByName .EQ $90
|
||||
SYS.GetDevStatus .EQ $92
|
||||
SYS.MKDev .EQ $94
|
||||
SYS.IOCTL .EQ $96
|
||||
* BIN
|
||||
SYS.LoadLib .EQ $98
|
||||
SYS.UnloadLib .EQ $9A
|
||||
|
@ -274,7 +274,7 @@ SYS.Shift .EQ $B0
|
|||
SYS.ArgV .EQ $B2
|
||||
SYS.ArgVDup .EQ $B4
|
||||
* .EQ $B6
|
||||
*--------------------------------------
|
||||
*--------------------------------------E0/AUX
|
||||
* ENV / ENVX
|
||||
SYS.PutEnv .EQ $B8
|
||||
SYS.SetEnv .EQ $BA
|
||||
|
@ -300,7 +300,7 @@ SYS.StrVShift .EQ $D8
|
|||
SYS.StrVGet .EQ $DA
|
||||
SYS.StrVAdd .EQ $DC
|
||||
* .EQ $DE
|
||||
*--------------------------------------
|
||||
*--------------------------------------E0
|
||||
* MEM
|
||||
SYS.GetMem .EQ $E0
|
||||
SYS.Realloc .EQ $E2
|
||||
|
|
|
@ -95,11 +95,11 @@ CORE.Events jsr CORE.GetEvents
|
|||
|
||||
cmp DevMgr.ASCREEN Same as active screen...nothing to do
|
||||
beq .8
|
||||
pha
|
||||
>PUSHWZ Param
|
||||
|
||||
>PUSHA
|
||||
>PUSHBI IOCTL.CONTROL request
|
||||
pla
|
||||
jsr K.IOCTL
|
||||
>PUSHWZ Param
|
||||
>SYSCALL2 IOCTL
|
||||
.8 jmp CORE.Run
|
||||
*--------------------------------------
|
||||
CORE.UpdateParentPS
|
||||
|
@ -393,6 +393,16 @@ CORE.PSResume sei
|
|||
inc IRQ.InKernel
|
||||
rti
|
||||
*--------------------------------------
|
||||
CORE.VBLState .BS 1
|
||||
CORE.IRQMode .BS 1
|
||||
CORE.TickPerSec .BS 1
|
||||
CORE.TickPer10t .BS 1
|
||||
CORE.TickSec .BS 1
|
||||
CORE.Tick10t .BS 1
|
||||
CORE.CPUStatCnt .DA #100
|
||||
CORE.LastPSID .DA #0
|
||||
CORE.FSID .BS 1
|
||||
*--------------------------------------
|
||||
CORE.EvtIndex .BS 1
|
||||
CORE.EvtCount .BS 1
|
||||
*--------------------------------------
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
AUXPIPE .EQ 1
|
||||
*--------------------------------------
|
||||
ZPKERNEL .EQ $0
|
||||
*--------------------------------------
|
||||
ZPPtr1 .EQ ZPKERNEL
|
||||
|
|
|
@ -47,46 +47,38 @@ K.GetDev.9 rts
|
|||
*/--------------------------------------
|
||||
* # GetDevStatus
|
||||
* ## C
|
||||
* `int getdevstatus(short int DevID, S.DIB* dstat);`
|
||||
* `int getdevstatus(short int DevID, S.DIB *dstat);`
|
||||
* ## ASM
|
||||
* `>PUSHWI S.DIB`
|
||||
* `lda DevID`
|
||||
* `PUSHB DevID`
|
||||
* `>PUSHW S.DIB`
|
||||
* `>SYSCALL GetDevStatus`
|
||||
* ## RETURN VALUE
|
||||
*\--------------------------------------
|
||||
K.GetDevStatus tax
|
||||
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
|
||||
|
||||
K.GetDevStatus >PULLW K.S.IOCTL+S.IOCTL.BUFPTR
|
||||
>PULLA
|
||||
tax
|
||||
|
||||
lda Dev.Table,x
|
||||
beq K.GetDev.NODEV
|
||||
ldy Dev.Table-1,x
|
||||
>STYA pFD
|
||||
|
||||
lda #S.IOCTL.STATCODE.GETDIB
|
||||
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
|
||||
ldx #IOCTL.STATUS
|
||||
jmp (pDrv)
|
||||
jmp SHARED.GetDevStatus
|
||||
*/--------------------------------------
|
||||
* # MKDev
|
||||
* Create a hDEV
|
||||
* ## C
|
||||
* `hDEV mkdev (S.FD * fd, const char *devname)`
|
||||
* `hDEV mkdev (S.FD *fd, const char *devname)`
|
||||
* ## ASM
|
||||
* `>PUSHW fd`
|
||||
* `>PUSHW devname`
|
||||
* `>LDYA fd`
|
||||
* `>SYSCALL mkdev
|
||||
* ## RETURN VALUE
|
||||
* A = hDEV
|
||||
*\--------------------------------------
|
||||
K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name
|
||||
K.MKDev >PULLW ZPPtr2 ptr2=name
|
||||
>PULLW ZPPtr1 ptr1=fd
|
||||
|
||||
ldx DevMgr.DevIdx
|
||||
cpx #K.DEV.MAX*2+1
|
||||
|
@ -135,7 +127,7 @@ K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name
|
|||
>STYA K.S.IOCTL+S.IOCTL.BUFPTR
|
||||
|
||||
lda #S.IOCTL.STATCODE.STATUS
|
||||
jsr K.GetDevStatus.I
|
||||
jsr SHARED.GetDevStatus
|
||||
bcs .99
|
||||
|
||||
lda K.IOBuf Get Status byte
|
||||
|
@ -156,23 +148,55 @@ K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name
|
|||
* sec
|
||||
.99 rts
|
||||
|
||||
.7 ldy #S.FD.DEV.DRVPTR
|
||||
lda (pFD),y
|
||||
sta ZPPtr1
|
||||
iny
|
||||
lda (pFD),y
|
||||
sta ZPPtr1+1
|
||||
ldy #IOCTL.IRQ+4
|
||||
lda (ZPPtr1),y
|
||||
.7 ldy #IOCTL.IRQ+4
|
||||
lda (pDRV),y
|
||||
sta IRQ.Vectors,x
|
||||
iny
|
||||
lda (ZPPtr1),y
|
||||
lda (pDRV),y
|
||||
sta IRQ.Vectors+1,x
|
||||
|
||||
.8 lda DevMgr.DevIdx
|
||||
inc DevMgr.DevIdx
|
||||
inc DevMgr.DevIdx
|
||||
* clc
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # IOCTL
|
||||
* ## C
|
||||
* `int ioctl(short int DevID, int request, void * param );`
|
||||
* ## ASM
|
||||
* `>PUSHB hDEV`
|
||||
* `>PUSHB request`
|
||||
* `>PUSHW param`
|
||||
* `>SYSCALL IOCTL`
|
||||
* ## RETURN VALUE
|
||||
* Y,A = ...
|
||||
*\--------------------------------------
|
||||
K.IOCTL ldy #3 hDev
|
||||
lda (pStack),y
|
||||
tax
|
||||
|
||||
lda Dev.Table,x
|
||||
beq .9
|
||||
|
||||
ldy Dev.Table-1,x
|
||||
>STYA pFD
|
||||
|
||||
jsr SHARED.GetPDrv
|
||||
|
||||
ldy #2 request
|
||||
lda (pStack),y
|
||||
tax
|
||||
|
||||
>PULLYA param
|
||||
inc pStack
|
||||
inc pStack
|
||||
|
||||
jmp (pDrv)
|
||||
|
||||
.9 sec
|
||||
lda #MLI.E.NODEV
|
||||
>RET 4
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/SYS/KERNEL.S.DEV
|
||||
|
|
|
@ -80,41 +80,24 @@ K.ReadDir.ROOT
|
|||
ldy #S.FD.DIR.FC did we already returned something ?
|
||||
lda (pFD),y
|
||||
bne K.ReadDir.NoMore
|
||||
|
||||
stz K.MLI.PARAMS+1 All Volumes
|
||||
>LDYAI K.Buf256
|
||||
>STYA K.MLI.PARAMS+2
|
||||
>STYA ZPPtr2
|
||||
>MLICALL MLIONLINE
|
||||
bcs K.ReadDir.RTS
|
||||
* pass #1 compute BufSize.....
|
||||
lda #1 +1 for Ending 0
|
||||
sta K.ReadDir.BufSize
|
||||
stz K.ReadDir.BufSize+1
|
||||
stz K.ReadDir.EC
|
||||
ldy #0
|
||||
|
||||
.1 lda (ZPPtr2),y
|
||||
and #$0F
|
||||
beq .2
|
||||
inc K.ReadDir.EC increase entry count
|
||||
sec Add Filelen +1
|
||||
adc #S.STAT will ends with CC
|
||||
adc K.ReadDir.BufSize
|
||||
sta K.ReadDir.BufSize
|
||||
bcc .2
|
||||
inc K.ReadDir.BufSize+1
|
||||
|
||||
.2 tya
|
||||
clc
|
||||
adc #16
|
||||
tay
|
||||
bcc .1 loop until 256 bytes scanned
|
||||
* pass #2 Fill Buffer...
|
||||
jsr K.ReadDir.GetBuf
|
||||
>LDYAI 16*16+16*S.STAT+1 16 (Vols+Stat) + \0
|
||||
jsr K.ReadDir.GetBufYA
|
||||
bcs K.ReadDir.RTS
|
||||
.3 lda (ZPPtr2)
|
||||
|
||||
lda #16
|
||||
sta K.ReadDir.EC
|
||||
|
||||
.1 lda (ZPPtr2)
|
||||
and #$0F
|
||||
beq .88
|
||||
beq .6
|
||||
|
||||
tax
|
||||
inc
|
||||
|
@ -122,19 +105,21 @@ K.ReadDir.ROOT
|
|||
lda #'/'
|
||||
sta K.MLI.PATH+1
|
||||
ldy #1
|
||||
.4 lda (ZPPtr2),y
|
||||
|
||||
.2 lda (ZPPtr2),y
|
||||
sta K.MLI.PATH+1,y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
iny
|
||||
dex
|
||||
bne .4
|
||||
bne .2
|
||||
|
||||
txa Add ending 0 for C String
|
||||
jsr K.ReadDir.AddToBuf
|
||||
|
||||
jsr SHARED.ClrStat
|
||||
lda (ZPPtr2)
|
||||
|
||||
asl DRIVE in Carry
|
||||
asl DRIVE in Carry
|
||||
pha
|
||||
lda #0
|
||||
rol
|
||||
|
@ -153,25 +138,29 @@ K.ReadDir.ROOT
|
|||
>MLICALL MLIGETFILEINFO
|
||||
sta K.S.STAT+S.STAT.P.DEVSTATUS
|
||||
|
||||
bcs .80
|
||||
bcs .3
|
||||
|
||||
>LDYA K.MLI.PARAMS+5 AUXTYPE=TOTAL BLOCKS
|
||||
>STYA K.S.STAT+S.STAT.P.DEVBLOCKS
|
||||
>LDYA K.MLI.PARAMS+8
|
||||
>STYA K.S.STAT+S.STAT.BLOCKS
|
||||
.80 jsr K.ReadDir.ADDSTAT
|
||||
|
||||
dec K.ReadDir.EC
|
||||
beq .5
|
||||
.88 lda ZPPtr2
|
||||
.3 jsr K.ReadDir.AddStat
|
||||
|
||||
.6 lda ZPPtr2
|
||||
clc
|
||||
adc #16
|
||||
sta ZPPtr2
|
||||
bcc .3
|
||||
bcc .7
|
||||
inc ZPPtr2+1
|
||||
bra .3
|
||||
|
||||
.7 dec K.ReadDir.EC
|
||||
bne .1
|
||||
|
||||
* lda #0 done by S.MEM.F.INIT0
|
||||
* sta (ZPPtr4) Ending 0
|
||||
.5 ldy #S.FD.DIR.FC
|
||||
|
||||
ldy #S.FD.DIR.FC
|
||||
lda #16
|
||||
sta (pFD),y Flag that we returned somthing for next time
|
||||
jmp K.ReadDir.EXIT
|
||||
|
@ -309,29 +298,23 @@ K.ReadDir.DIR2 jsr K.ReadDir.GetBuf
|
|||
bne .2
|
||||
|
||||
jsr K.ReadDir.ADD.
|
||||
bra .6
|
||||
bra .4
|
||||
|
||||
.2 cmp #$E0 Dir Header ?
|
||||
bne .3
|
||||
|
||||
jsr K.ReadDir.ADD.
|
||||
jsr SHARED.DirEnt2Stat
|
||||
jsr K.ReadDir.AddStat
|
||||
jsr K.ReadDir.ADD..
|
||||
bra .6
|
||||
bra .4
|
||||
|
||||
.3 jsr K.ReadDir.AddFNToBuf
|
||||
jsr SHARED.ClrStat
|
||||
|
||||
.4 jsr SHARED.DirEnt2Stat
|
||||
jsr K.ReadDir.AddStat
|
||||
|
||||
lda (ZPPtr3)
|
||||
and #$F0
|
||||
cmp #$D0 Directory ?
|
||||
bne .5
|
||||
|
||||
jsr K.ReadDir.ADDD
|
||||
bra .6
|
||||
|
||||
.5 jsr K.ReadDir.ADDF
|
||||
|
||||
.6 lda K.ReadDir.EC decrease global counter...
|
||||
lda K.ReadDir.EC decrease global counter...
|
||||
sec
|
||||
sbc #1
|
||||
sta K.ReadDir.EC
|
||||
|
@ -380,6 +363,7 @@ K.ReadDir.CLN pha
|
|||
*--------------------------------------
|
||||
K.ReadDir.GetBuf
|
||||
>LDYA K.ReadDir.BufSize Get a BufSize bytes buffer for storing results
|
||||
K.ReadDir.GetBufYA
|
||||
jsr K.GetMem0 make sure 0 filled
|
||||
bcs .9
|
||||
stx K.ReadDir.EXIT+1
|
||||
|
@ -397,80 +381,7 @@ K.ReadDir.ADD..
|
|||
bne .1
|
||||
|
||||
txa
|
||||
jsr K.ReadDir.AddToBuf Add Ending 0
|
||||
jsr SHARED.ClrStat
|
||||
* ldy #$25 total_blocks
|
||||
* lda (ZPPtr3),y
|
||||
* sta K.S.STAT+S.STAT.BLOCKS
|
||||
* iny
|
||||
* lda (ZPPtr3),y
|
||||
* sta K.S.STAT+S.STAT.BLOCKS+1
|
||||
*--------------------------------------
|
||||
K.ReadDir.ADDD lda #$0F
|
||||
sta K.S.STAT+S.STAT.P.TYPE
|
||||
|
||||
lda /S.STAT.MODE.DIR
|
||||
sta K.S.STAT+S.STAT.MODE+1
|
||||
bra K.ReadDir.AddAccess
|
||||
*--------------------------------------
|
||||
K.ReadDir.ADDF
|
||||
* lda /S.STAT.MODE.REG 0
|
||||
* sta K.S.STAT+S.STAT.MODE+1
|
||||
ldx #ADDF.DST-ADDF.SRC
|
||||
|
||||
.1 ldy ADDF.SRC-1,x
|
||||
lda (ZPPtr3),y
|
||||
ldy ADDF.DST-1,x
|
||||
sta K.S.STAT,y
|
||||
dex
|
||||
bne .1
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddAccess
|
||||
lda CORE.FSID
|
||||
sta K.S.STAT+S.STAT.FSID
|
||||
|
||||
ldy #$1E ProDOS Access
|
||||
lda (ZPPtr3),y
|
||||
|
||||
jsr SHARED.Stat.Access2Mode
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddTime
|
||||
lda #$18 creation Date/time
|
||||
clc
|
||||
adc ZPPtr3
|
||||
tay
|
||||
lda ZPPtr3+1
|
||||
adc #0
|
||||
>PUSHYA
|
||||
>PUSHWI K.S.STAT+S.STAT.CTIME
|
||||
>SYSCALL2 PTime2Time
|
||||
|
||||
lda #$21 mod Date/time
|
||||
clc
|
||||
adc ZPPtr3
|
||||
tay
|
||||
lda ZPPtr3+1
|
||||
adc #0
|
||||
>PUSHYA
|
||||
>PUSHWI K.S.STAT+S.STAT.MTIME
|
||||
>SYSCALL2 PTime2Time
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddStat
|
||||
ldy #0
|
||||
|
||||
.1 lda K.S.STAT,y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
iny
|
||||
cpy #S.STAT
|
||||
bne .1
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
ADDF.SRC .HS 1013141516171f20
|
||||
ADDF.DST .DA #S.STAT.P.TYPE
|
||||
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
|
||||
.DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2
|
||||
.DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
|
||||
jmp K.ReadDir.AddToBuf Add Ending 0
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddFNToBuf
|
||||
ldy #$1C version/min_version for lowercase bitmap
|
||||
|
@ -528,6 +439,17 @@ K.ReadDir.AddToBuf
|
|||
bne .8
|
||||
inc ZPPtr4+1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddStat
|
||||
ldy #0
|
||||
|
||||
.1 lda K.S.STAT,y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
iny
|
||||
cpy #S.STAT
|
||||
bne .1
|
||||
|
||||
rts
|
||||
*/-------------------------------------
|
||||
* # CloseDir
|
||||
* ## C
|
||||
|
|
|
@ -167,19 +167,21 @@ GP.AtkCall.INC inc IRQ.InKernel
|
|||
* Return X+Y, X-Y, X*Y, X/Y, X mod Y....
|
||||
* ## ASM
|
||||
* **In:**
|
||||
* `>PUSHF X (long)`
|
||||
* `>PUSHF Y (long)`
|
||||
* `>PUSHL X (long)`
|
||||
* `>PUSHL Y (long)`
|
||||
* `>FPU add32`
|
||||
* `...`
|
||||
* ## RETURN VALUE
|
||||
* On stack (long)
|
||||
*\--------------------------------------
|
||||
GP.FpuCall dec IRQ.InKernel
|
||||
jsr .1
|
||||
cpx #FPU.FADD
|
||||
bcs .1
|
||||
|
||||
jsr MATH32 INT32, direct JMP
|
||||
bra GP.AtkCall.INC
|
||||
.1 cpx #FPU.FADD
|
||||
bcc GP.RomCall.JmpX INT32, direct JMP
|
||||
phx
|
||||
|
||||
.1 phx
|
||||
jsr GP.SetFAC Get float from stack
|
||||
plx
|
||||
cpx #FPU.PWR+1
|
||||
|
@ -238,7 +240,9 @@ GP.RomCall phx
|
|||
stx .8+1
|
||||
bit RROMBNK1
|
||||
plx
|
||||
|
||||
jsr GP.RomCall.JmpX
|
||||
|
||||
.8 ldx #$ff
|
||||
bit $C000,x
|
||||
bit $C000,x
|
||||
|
@ -300,20 +304,11 @@ GP.lrintf jsr GP.SetFAC
|
|||
|
||||
rts
|
||||
*--------------------------------------
|
||||
GP.RomCall.JmpX jmp (.1,x)
|
||||
.1 .DA GP.ADD32
|
||||
.DA GP.SUB32
|
||||
.DA GP.UMUL32
|
||||
.DA GP.IMUL32
|
||||
.DA GP.UDIV32
|
||||
.DA GP.IDIV32
|
||||
.DA GP.UMOD32
|
||||
.DA GP.IMOD32
|
||||
.DA GP.UCMP32
|
||||
.DA GP.ICMP32
|
||||
GP.RomCall.JmpX jmp (.1-FPU.FADD,x)
|
||||
*--------------------------------------
|
||||
* http://www.txbobsc.com/scsc/scdocumentor/E7A0.html
|
||||
|
||||
.DA $E7C1 FADDT
|
||||
*--------------------------------------
|
||||
.1 .DA $E7C1 FADDT
|
||||
.DA $E7AA FSUBT
|
||||
.DA $E987 FMULTT.1
|
||||
.DA $EA6B FDIVT+2
|
||||
|
@ -428,16 +423,6 @@ GP.IrqH.Exit stz IRQ.SkipA2osX reset flag
|
|||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CORE.VBLState .BS 1
|
||||
CORE.IRQMode .BS 1
|
||||
CORE.TickPerSec .BS 1
|
||||
CORE.TickPer10t .BS 1
|
||||
CORE.TickSec .BS 1
|
||||
CORE.Tick10t .BS 1
|
||||
CORE.CPUStatCnt .DA #100
|
||||
CORE.LastPSID .DA #0
|
||||
CORE.FSID .BS 1
|
||||
*--------------------------------------
|
||||
IRQ.InKernel .BS 1
|
||||
IRQ.InLib .BS 1
|
||||
IRQ.SkipA2osX .BS 1
|
||||
|
|
|
@ -109,8 +109,8 @@ Kernel.Init3 sta SETALTZP
|
|||
>STYA pStack
|
||||
sta pLocal+1
|
||||
|
||||
>PUSHWI FD.NULL
|
||||
>PUSHWI FD.NULL.NAME
|
||||
>LDYAI FD.NULL
|
||||
>SYSCALL2 MKDev
|
||||
|
||||
jsr SysScrInit
|
||||
|
@ -118,7 +118,7 @@ Kernel.Init3 sta SETALTZP
|
|||
>PUSHWI DEV.CONSOLE
|
||||
>PUSHBI O.RDWR
|
||||
>PUSHBI S.FI.T.TXT
|
||||
>PUSHWZ Aux type
|
||||
>PUSHWZ Aux type
|
||||
>SYSCALL2 fopen
|
||||
bcs *
|
||||
|
||||
|
@ -307,9 +307,9 @@ SysScrInit >LDYAI Mem.XHiMem
|
|||
|
||||
jsr SysScrInit.TTYPtrs
|
||||
|
||||
>PUSHWI FD.TTY
|
||||
>PUSHWI FD.CONSOLE.NAME
|
||||
>LDYAI FD.TTY
|
||||
|
||||
|
||||
>SYSCALL2 MKDev
|
||||
bcs .9
|
||||
|
||||
|
@ -319,8 +319,9 @@ SysScrInit >LDYAI Mem.XHiMem
|
|||
inc FD.TTY+S.FD.DEV.DEVID
|
||||
inc FD.TTY.NAME+3
|
||||
jsr SysScrInit.TTYPtrs
|
||||
|
||||
>PUSHWI FD.TTY
|
||||
>PUSHWI FD.TTY.NAME
|
||||
>LDYAI FD.TTY
|
||||
>SYSCALL2 MKDev
|
||||
plx
|
||||
bcs .9
|
||||
|
@ -754,8 +755,8 @@ DevMgrInit.AddBDev
|
|||
>PUSHBI 6
|
||||
>SYSCALL2 printf
|
||||
|
||||
>PUSHWI FD.BDEV
|
||||
>PUSHWI FD.BDEV.NAME
|
||||
>LDYAI FD.BDEV
|
||||
>SYSCALL2 MKDev
|
||||
DevMgrInit.AddBDev.RTS
|
||||
rts
|
||||
|
|
|
@ -33,10 +33,10 @@ IO.WRITE.REG ldx #MLIWRITE
|
|||
.9 rts
|
||||
*--------------------------------------
|
||||
IO.OPEN.CDEV
|
||||
IO.OPEN.BDEV jsr K.IOCTL.GetPDrv
|
||||
IO.OPEN.BDEV jsr SHARED.GetPDrv
|
||||
ldx #IOCTL.OPEN
|
||||
lda IO.hDev
|
||||
jsr K.IOCTL.pDrvJmp
|
||||
jsr SHARED.pDrvJmp
|
||||
bcs .9
|
||||
|
||||
lda IO.hDev
|
||||
|
@ -55,9 +55,9 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE
|
|||
|
||||
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
|
||||
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
|
||||
jsr K.IOCTL.GetPDRV
|
||||
jsr SHARED.GetPDRV
|
||||
>LDYAI K.S.IOCTL
|
||||
jsr K.IOCTL.pDrvJmp
|
||||
jsr SHARED.pDrvJmp
|
||||
bcs .9
|
||||
>LDYA K.S.IOCTL+S.IOCTL.BYTECNT
|
||||
|
||||
|
@ -91,41 +91,6 @@ IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE
|
|||
>STYA .1+1
|
||||
lda IO.hFD
|
||||
.1 jmp $FFFF SELF MODIFIED
|
||||
*/--------------------------------------
|
||||
* # IOCTL
|
||||
* ## C
|
||||
* `int ioctl(short int DevID, int request, void * param );`
|
||||
* ## ASM
|
||||
* `PUSHWI param`
|
||||
* `PUSHBI request`
|
||||
* `lda hDEV`
|
||||
* `>SYSCALL IOCTL`
|
||||
* ## RETURN VALUE
|
||||
* Y,A = ...
|
||||
*\--------------------------------------
|
||||
K.IOCTL tax
|
||||
lda Dev.Table,x
|
||||
beq K.IOCTL.9
|
||||
|
||||
ldy Dev.Table-1,x
|
||||
>STYA pFD
|
||||
jsr K.IOCTL.GetPDrv
|
||||
>PULLA
|
||||
tax request
|
||||
>PULLYA param
|
||||
|
||||
K.IOCTL.pDrvJmp jmp (pDrv)
|
||||
K.IOCTL.9 sec
|
||||
lda #MLI.E.NODEV
|
||||
>RET 3
|
||||
*--------------------------------------
|
||||
K.IOCTL.GetPDrv ldy #S.FD.DEV.DRVPTR
|
||||
lda (pFD),y
|
||||
sta pDRV
|
||||
iny
|
||||
lda (pFD),y
|
||||
sta pDRV+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
IO.EOF.REG >MLICALL MLIGETMARK
|
||||
bcs .9
|
||||
|
@ -153,7 +118,7 @@ IO.EOF.REG >MLICALL MLIGETMARK
|
|||
.9 rts
|
||||
*--------------------------------------
|
||||
IO.EOF.CDEV lda #S.IOCTL.STATCODE.EOF
|
||||
jmp K.GetDevStatus.I
|
||||
jmp SHARED.GetDevStatus
|
||||
*--------------------------------------
|
||||
* X = 0 > REG
|
||||
* X = 1 > DIR
|
||||
|
@ -227,8 +192,6 @@ IO.CLOSE.NOD ldx #2
|
|||
* sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
IO.DEV.FIFO .AS "/dev/fifo"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/SYS/KERNEL.S.IO
|
||||
LOAD USR/SRC/SYS/KERNEL.S
|
||||
|
|
|
@ -21,7 +21,7 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
|
|||
.DA K.Close
|
||||
.DA K.Read
|
||||
.DA K.Write
|
||||
.DA K.IOCTL
|
||||
.DA 0
|
||||
|
||||
.DA K.FPutC $20 : STDIO
|
||||
.DA K.PutChar
|
||||
|
@ -45,18 +45,18 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
|
|||
.DA K.Rename
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA K.PrintF
|
||||
.DA K.FPrintF
|
||||
.DA K.SPrintF
|
||||
.DA 0
|
||||
.DA K.GetDevByName DEV
|
||||
.DA K.GetDevStatus
|
||||
.DA K.MKDev
|
||||
|
||||
.DA 0 $50
|
||||
.DA K.ScanF $50
|
||||
.DA K.FScanF
|
||||
.DA K.SScanF
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA K.PrintF
|
||||
.DA K.SPrintF
|
||||
.DA K.FPrintF
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
.DA 0 $60
|
||||
|
@ -88,10 +88,10 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
|
|||
.DA K.StrCmp
|
||||
.DA K.StrCaseCmp
|
||||
|
||||
.DA 0 $90
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA K.GetDevByName $90 : DEV
|
||||
.DA K.GetDevStatus
|
||||
.DA K.MKDev
|
||||
.DA K.IOCTL
|
||||
.DA K.LoadLib BIN
|
||||
.DA K.UnloadLib
|
||||
.DA K.LoadDrv
|
||||
|
|
|
@ -1,11 +1,23 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
GP.ADD32 clc
|
||||
MATH32 jmp (.1,x)
|
||||
.1 .DA MATH32.ADD32
|
||||
.DA MATH32.SUB32
|
||||
.DA MATH32.UMUL32
|
||||
.DA MATH32.IMUL32
|
||||
.DA MATH32.UDIV32
|
||||
.DA MATH32.IDIV32
|
||||
.DA MATH32.UMOD32
|
||||
.DA MATH32.IMOD32
|
||||
.DA MATH32.UCMP32
|
||||
.DA MATH32.ICMP32
|
||||
*--------------------------------------
|
||||
MATH32.ADD32 clc
|
||||
.HS B0 BCS
|
||||
GP.SUB32 sec
|
||||
MATH32.SUB32 sec
|
||||
php
|
||||
jsr GP.PopACC32
|
||||
jsr MATH32.PopACC32
|
||||
|
||||
ldy #0
|
||||
ldx #3
|
||||
|
@ -23,16 +35,18 @@ GP.SUB32 sec
|
|||
iny
|
||||
dex
|
||||
bpl .2
|
||||
GP.SUB32.RTS rts
|
||||
|
||||
MATH32.SUB32.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Returns:
|
||||
* ff X < Y
|
||||
* 0 X = Y
|
||||
* 1 X > Y
|
||||
*--------------------------------------
|
||||
GP.UCMP32
|
||||
GP.ICMP32 jsr GP.SUB32
|
||||
jsr GP.PopACC32 A = ACC32+3 (sign)
|
||||
MATH32.UCMP32
|
||||
MATH32.ICMP32 jsr MATH32.SUB32
|
||||
jsr MATH32.PopACC32 A = ACC32+3 (sign)
|
||||
tay
|
||||
bmi .2
|
||||
|
||||
|
@ -46,50 +60,50 @@ GP.ICMP32 jsr GP.SUB32
|
|||
.2 lda #$ff
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
GP.UMUL32 clc
|
||||
MATH32.UMUL32 clc
|
||||
.HS B0 BCS
|
||||
GP.IMUL32 sec
|
||||
MATH32.IMUL32 sec
|
||||
|
||||
php
|
||||
jsr GP.MULDIVMOD.COMMON
|
||||
jsr MATH32.MULDIVMOD.COMMON
|
||||
jsr MATH.MUL32
|
||||
|
||||
plp
|
||||
bcc GP.SUB32.RTS
|
||||
GP.RETURN.ITMP
|
||||
bcc MATH32.SUB32.RTS
|
||||
MATH32.RETURN.ITMP
|
||||
lda ACC32.Sign
|
||||
eor ARG32.Sign
|
||||
bpl GP.PutTMP32
|
||||
bra GP.PutNotTMP32
|
||||
bpl MATH32.PutTMP32
|
||||
bra MATH32.PutNotTMP32
|
||||
*--------------------------------------
|
||||
GP.UDIV32 clc
|
||||
MATH32.UDIV32 clc
|
||||
.HS B0 BCS
|
||||
GP.IDIV32 sec
|
||||
MATH32.IDIV32 sec
|
||||
clv
|
||||
bra GP.DIVMOD
|
||||
GP.UMOD32 clc
|
||||
bra MATH32.DIVMOD
|
||||
MATH32.UMOD32 clc
|
||||
.HS B0 BCS
|
||||
GP.IMOD32 sec
|
||||
bit GP.SUB32.RTS $60
|
||||
MATH32.IMOD32 sec
|
||||
bit MATH32.SUB32.RTS $60
|
||||
|
||||
GP.DIVMOD php
|
||||
jsr GP.MULDIVMOD.COMMON
|
||||
MATH32.DIVMOD php
|
||||
jsr MATH32.MULDIVMOD.COMMON
|
||||
jsr MATH.DIVMOD32
|
||||
|
||||
plp
|
||||
bcc .3 unsigned
|
||||
bvs GP.RETURN.ITMP IMOD
|
||||
bvs MATH32.RETURN.ITMP IMOD
|
||||
lda ACC32.Sign IDIV
|
||||
eor ARG32.Sign
|
||||
bpl GP.PutARG32
|
||||
bra GP.PutNotARG32
|
||||
bpl MATH32.PutARG32
|
||||
bra MATH32.PutNotARG32
|
||||
|
||||
.3 bvs GP.PutARG32 DIV
|
||||
.3 bvs MATH32.PutARG32 DIV
|
||||
*--------------------------------------
|
||||
GP.PutTMP32 lda #TMP32 MOD
|
||||
MATH32.PutTMP32 lda #TMP32 MOD
|
||||
.HS 2C BIT ABS
|
||||
*--------------------------------------
|
||||
GP.PutARG32 lda #ARG32
|
||||
MATH32.PutARG32 lda #ARG32
|
||||
sta .1+1
|
||||
ldy #3
|
||||
.1 lda $ff,y SELF MODIFIED
|
||||
|
@ -99,10 +113,12 @@ GP.PutARG32 lda #ARG32
|
|||
|
||||
rts
|
||||
*--------------------------------------
|
||||
GP.PutNotTMP32 lda #TMP32
|
||||
MATH32.PutNotTMP32
|
||||
lda #TMP32
|
||||
.HS 2C BIT ABS
|
||||
*--------------------------------------
|
||||
GP.PutNotARG32 lda #ARG32
|
||||
MATH32.PutNotARG32
|
||||
lda #ARG32
|
||||
sta .1+1
|
||||
ldy #0
|
||||
ldx #3
|
||||
|
@ -117,7 +133,7 @@ GP.PutNotARG32 lda #ARG32
|
|||
bpl .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
GP.PopACC32 ldy #0
|
||||
MATH32.PopACC32 ldy #0
|
||||
|
||||
.1 lda (pStack)
|
||||
inc pStack
|
||||
|
@ -128,7 +144,7 @@ GP.PopACC32 ldy #0
|
|||
sta ACC32.Sign
|
||||
rts
|
||||
*--------------------------------------
|
||||
GP.GetARG32 ldy #0
|
||||
MATH32.GetARG32 ldy #0
|
||||
|
||||
.1 lda (pStack),y
|
||||
sta ARG32,y
|
||||
|
@ -138,14 +154,15 @@ GP.GetARG32 ldy #0
|
|||
|
||||
sta ARG32.Sign
|
||||
|
||||
GP.GetARG32.RTS rts
|
||||
MATH32.GetARG32.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
GP.MULDIVMOD.COMMON
|
||||
MATH32.MULDIVMOD.COMMON
|
||||
php
|
||||
jsr GP.PopACC32
|
||||
jsr GP.GetARG32
|
||||
jsr MATH32.PopACC32
|
||||
jsr MATH32.GetARG32
|
||||
plp
|
||||
bcc GP.GetARG32.RTS
|
||||
bcc MATH32.GetARG32.RTS
|
||||
jsr MATH.ACC32ABS
|
||||
jmp MATH.ARG32ABS
|
||||
*--------------------------------------
|
||||
|
|
|
@ -323,18 +323,18 @@ MEM.Init0 phx
|
|||
*\--------------------------------------
|
||||
K.FreeMem.MSG .AZ "FreeMem:hMem=$%h,PID=%d\r\n"
|
||||
*--------------------------------------
|
||||
K.FreeMem.ERR phx
|
||||
phy hMem n Y
|
||||
K.FreeMem.ERR >PUSHWI K.FreeMem.MSG
|
||||
|
||||
tya hMem n Y
|
||||
>PUSHA
|
||||
|
||||
ldy #S.PS.PID
|
||||
lda (pPS),y
|
||||
>PUSHA
|
||||
pla
|
||||
>PUSHA
|
||||
>PUSHBI 2
|
||||
>LDYAI K.FreeMem.MSG
|
||||
.1 ldx #SYS.printf
|
||||
jsr K.SYSCALL2
|
||||
plx
|
||||
|
||||
.1 >SYSCALL2 printf
|
||||
|
||||
lda #E.INVH
|
||||
* >DEBUG
|
||||
sec
|
||||
|
@ -344,17 +344,21 @@ K.FreeMem tay
|
|||
beq K.FreeMem.ERR Slot=0, reserved by Kernel
|
||||
cmp Mem.LastSlot
|
||||
bcc .10
|
||||
|
||||
bne K.FreeMem.ERR
|
||||
|
||||
.10 jsr MEM.GetMemByID X,Y unmodified
|
||||
lda (ZPMemMgrSPtr) In use ?
|
||||
bpl K.FreeMem.ERR
|
||||
|
||||
jsr MEM.DecRefCnt only one left ?
|
||||
bne .8 no, must be a code segment loaded several times
|
||||
|
||||
lda (ZPMemMgrSPtr)
|
||||
and #S.MEM.F.CODE CS: Any BINPATH to discard ?
|
||||
sta (ZPMemMgrSPtr) Mark as FREE
|
||||
beq .1
|
||||
|
||||
ldy #S.MEM.BIN
|
||||
lda (ZPMemMgrSPtr),y
|
||||
jsr MEM.GetMemByID X unmodified
|
||||
|
@ -364,16 +368,19 @@ K.FreeMem tay
|
|||
sta (ZPMemMgrSPtr)
|
||||
.1 lda Mem.LastSlot
|
||||
beq .8
|
||||
|
||||
jsr MEM.GetMemByID X unmodified
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .8 used, exit
|
||||
|
||||
.2 dec Mem.LastSlot free! get previous....
|
||||
beq .80 empty list: go set Mem.Free=Mem.HiMem
|
||||
|
||||
lda Mem.LastSlot
|
||||
jsr MEM.GetMemByID X unmodified
|
||||
lda (ZPMemMgrSPtr)
|
||||
bpl .2 free again! loop
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y set Mem.Free...
|
||||
sta Mem.Free
|
||||
|
@ -549,7 +556,8 @@ MEM.Dup jsr K.GetMemPtr
|
|||
|
||||
.8 txa
|
||||
* clc
|
||||
.9 rts
|
||||
.9
|
||||
MEM.Dup.RTS rts
|
||||
*--------------------------------------
|
||||
MEM.CopyToMain clc
|
||||
.HS B0 BCS
|
||||
|
@ -561,7 +569,7 @@ MEM.MoveToMain sec
|
|||
sta CLRREADAUX Make sure MAIN !!!!
|
||||
sta CLRWRITEAUX
|
||||
jsr K.GetMem
|
||||
bcs .9
|
||||
bcs MEM.Dup.RTS
|
||||
|
||||
stx .8+1 Save MAIN hMem
|
||||
>STYA A4L Save MAIN Ptr
|
||||
|
@ -582,8 +590,6 @@ MEM.MoveToMain sec
|
|||
.8 ldx #$ff Returns MAIN hMem
|
||||
txa
|
||||
jmp K.GetMemPtr Y,A = Ptr
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
MEM.MoveToAux stx .1+1 Save MAIN hMem
|
||||
>STYA A2L Save LEN to move
|
||||
|
|
|
@ -29,12 +29,9 @@ IO.CLOSE.PIPE ldy #S.FD.PIPE.S
|
|||
ldy #S.FD.PIPE.hMem
|
||||
lda (pFD),y
|
||||
beq .2
|
||||
.DO AUXPIPE=1
|
||||
ldx #SYS.FreeStkObj
|
||||
jsr K.SYSCALL2
|
||||
.ELSE
|
||||
jsr K.FreeMem
|
||||
.FIN
|
||||
|
||||
>SYSCALL2 FreeStkObj
|
||||
|
||||
.2 lda IO.hFD
|
||||
jmp K.FreeMem
|
||||
*--------------------------------------
|
||||
|
@ -76,9 +73,8 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S
|
|||
lda (pFD),y
|
||||
tay
|
||||
|
||||
.DO AUXPIPE=1
|
||||
sta SETWRITEAUX
|
||||
.FIN
|
||||
|
||||
.1 inx
|
||||
bne .2
|
||||
|
||||
|
@ -105,9 +101,9 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S
|
|||
lda IO.PIPE.BASEH Pipe Buffer Base
|
||||
sta IO.PIPE.DSTBUF+1
|
||||
bra .1
|
||||
.8 .DO AUXPIPE=1
|
||||
sta CLRWRITEAUX
|
||||
.FIN
|
||||
|
||||
.8 sta CLRWRITEAUX
|
||||
|
||||
tya
|
||||
ldy #S.FD.PIPE.Head
|
||||
sta (pFD),y
|
||||
|
@ -173,9 +169,8 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1
|
|||
ldy #S.FD.PIPE.Tail
|
||||
lda (pFD),y
|
||||
tay
|
||||
.DO AUXPIPE=1
|
||||
|
||||
sta SETREADAUX
|
||||
.FIN
|
||||
|
||||
.1 inx
|
||||
bne .2
|
||||
|
@ -203,10 +198,8 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1
|
|||
sta IO.PIPE.SRCBUF+1 Restore Pipe Buf base
|
||||
bra .1
|
||||
|
||||
.8 .DO AUXPIPE=1
|
||||
sta CLRREADAUX
|
||||
.FIN
|
||||
|
||||
.8 sta CLRREADAUX
|
||||
|
||||
tya
|
||||
ldy #S.FD.PIPE.Tail
|
||||
sta (pFD),y
|
||||
|
@ -233,13 +226,9 @@ IO.PIPE.GET.BUF lda (pFD),y
|
|||
|
||||
ldy #S.FD.PIPE.hMem
|
||||
lda (pFD),y
|
||||
|
||||
>SYSCALL2 GetStkObjPtr
|
||||
|
||||
.DO AUXPIPE=1
|
||||
ldx #SYS.GetStkObjPtr
|
||||
jsr K.SYSCALL2
|
||||
.ELSE
|
||||
jsr K.GetMemPtr get src buf
|
||||
.FIN
|
||||
sta IO.PIPE.BASEH Pipe Buffer Base
|
||||
* clc
|
||||
adc IO.PIPE.BUFH
|
||||
|
|
|
@ -1,6 +1,28 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
SHARED.GetDevStatus
|
||||
sta K.S.IOCTL+S.IOCTL.STATCODE
|
||||
|
||||
ldy #S.FD.DEV.DEVID
|
||||
lda (pFD),y
|
||||
sta K.S.IOCTL+S.IOCTL.UNITNUM
|
||||
|
||||
jsr SHARED.GetPDrv
|
||||
|
||||
>LDYAI K.S.IOCTL
|
||||
ldx #IOCTL.STATUS
|
||||
*--------------------------------------
|
||||
SHARED.pDrvJmp jmp (pDrv)
|
||||
*--------------------------------------
|
||||
SHARED.GetPDrv ldy #S.FD.DEV.DRVPTR
|
||||
lda (pFD),y
|
||||
sta pDRV
|
||||
iny
|
||||
lda (pFD),y
|
||||
sta pDRV+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.GetKeyCharY
|
||||
sta CLRREADAUX
|
||||
lda (ZPSListDataPtr),y
|
||||
|
|
|
@ -216,7 +216,7 @@ K.MKFIFO >STYA ZPPtr1 pathname buffer
|
|||
bcs K.Stat.Store.RTS
|
||||
|
||||
ldy #0
|
||||
.1 lda IO.DEV.FIFO,y
|
||||
.1 lda DEV.FIFO,y
|
||||
sta (ZPPtr1),y
|
||||
iny
|
||||
cpy #9
|
||||
|
@ -287,17 +287,15 @@ K.MkNod.I ldx #2
|
|||
*\--------------------------------------
|
||||
K.Pipe sta .1+1 SIZE HI
|
||||
|
||||
.DO AUXPIPE=1
|
||||
ldx #SYS.NewStkObj
|
||||
jsr K.SYSCALL2.AUX Buffer in AUX mem
|
||||
.ELSE
|
||||
jsr K.GetMem
|
||||
.FIN
|
||||
>SYSCALL2 NewStkObj
|
||||
bcs .99
|
||||
|
||||
stx .8+1 save PIPE buffer
|
||||
|
||||
ldx #2
|
||||
jsr IO.MkFD
|
||||
bcs .9
|
||||
|
||||
.1 lda #$ff SELF MODIFIED
|
||||
ldy #S.FD.PIPE.Free+1
|
||||
sta (pFD),y
|
||||
|
@ -312,12 +310,9 @@ K.Pipe sta .1+1 SIZE HI
|
|||
rts
|
||||
.9 pha save error code
|
||||
lda .8+1 get back PIPE buffer
|
||||
.DO AUXPIPE=1
|
||||
ldx #SYS.FreeStkObj
|
||||
jsr K.SYSCALL2.AUX
|
||||
.ELSE
|
||||
jsr K.FreeMem
|
||||
.FIN
|
||||
|
||||
>SYSCALL2 FreeStkObj
|
||||
|
||||
pla
|
||||
sec
|
||||
.99
|
||||
|
@ -331,36 +326,69 @@ SHARED.Stat.I jsr SHARED.ClrStat
|
|||
lda K.MLI.PARAMS+S.FI.A
|
||||
jsr SHARED.Stat.Access2Mode
|
||||
|
||||
ldx #SHARED.Stat.DST-SHARED.Stat.SRC
|
||||
ldx #SHARED.GFI.Cnt
|
||||
|
||||
.3 ldy SHARED.Stat.SRC-1,x
|
||||
.3 ldy SHARED.GFI.Src-1,x
|
||||
lda K.MLI.PARAMS,y
|
||||
ldy SHARED.Stat.DST-1,x
|
||||
ldy SHARED.Stat.Dst-1,x
|
||||
sta K.S.STAT,y
|
||||
dex
|
||||
bne .3
|
||||
|
||||
>PUSHWI K.MLI.PARAMS+S.FI.CDATE
|
||||
>PUSHWI K.S.STAT+S.STAT.CTIME
|
||||
>SYSCALL2 PTime2Time BANK2
|
||||
>LDYAI K.MLI.PARAMS+S.FI.CDATE
|
||||
ldx #S.STAT.CTIME
|
||||
jsr SHARED.PTime2StatYAX
|
||||
|
||||
>PUSHWI K.MLI.PARAMS+S.FI.MDATE
|
||||
>PUSHWI K.S.STAT+S.STAT.MTIME
|
||||
>SYSCALL2 PTime2Time BANK2
|
||||
>LDYAI K.MLI.PARAMS+S.FI.MDATE
|
||||
ldx #S.STAT.MTIME
|
||||
jmp SHARED.PTime2StatYAX
|
||||
*--------------------------------------
|
||||
SHARED.GFI2Stat
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.DirEnt2Stat
|
||||
jsr SHARED.ClrStat
|
||||
|
||||
lda (ZPPtr3)
|
||||
and #$F0
|
||||
cmp #$D0 Directory ?
|
||||
bne .1
|
||||
|
||||
* clc
|
||||
* rts
|
||||
lda /S.STAT.MODE.DIR
|
||||
sta K.S.STAT+S.STAT.MODE+1
|
||||
|
||||
.1 ldx #SHARED.DirEnt.Cnt
|
||||
|
||||
.2 ldy SHARED.DirEnt.Src-1,x
|
||||
lda (ZPPtr3),y
|
||||
ldy SHARED.Stat.Dst-1,x
|
||||
sta K.S.STAT,y
|
||||
dex
|
||||
bne .2
|
||||
|
||||
ldy #$1E ProDOS Access
|
||||
lda (ZPPtr3),y
|
||||
|
||||
jsr SHARED.Stat.Access2Mode
|
||||
|
||||
lda #$18 creation Date/time
|
||||
ldx #S.STAT.CTIME
|
||||
jsr SHARED.PTime2StatAX
|
||||
|
||||
lda #$21 mod Date/time
|
||||
ldx #S.STAT.MTIME
|
||||
jmp SHARED.PTime2StatAX
|
||||
*--------------------------------------
|
||||
SHARED.ClrStat ldx #S.STAT-1
|
||||
|
||||
.1 stz K.S.STAT,x
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda CORE.FSID
|
||||
sta K.S.STAT+S.STAT.FSID
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -397,12 +425,36 @@ SHARED.Stat.Access2Mode
|
|||
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.Stat.SRC .DA #S.FI.T
|
||||
.DA #S.FI.AUXTYPE,#S.FI.AUXTYPE+1
|
||||
SHARED.PTime2StatAX
|
||||
clc
|
||||
adc ZPPtr3
|
||||
tay
|
||||
lda ZPPtr3+1
|
||||
adc #0
|
||||
SHARED.PTime2StatYAX
|
||||
>PUSHYA
|
||||
|
||||
txa
|
||||
clc
|
||||
adc #K.S.STAT
|
||||
tay
|
||||
lda /K.S.STAT
|
||||
adc #0
|
||||
>PUSHYA
|
||||
>SYSCALL2 PTime2Time
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1
|
||||
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
|
||||
SHARED.Stat.DST .DA #S.STAT.P.TYPE
|
||||
.DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
|
||||
SHARED.GFI.Cnt .EQ *-SHARED.GFI.Src
|
||||
*--------------------------------------
|
||||
SHARED.DirEnt.Src
|
||||
.HS 10.1f20.1314.151617
|
||||
SHARED.DirEnt.Cnt .EQ *-SHARED.DirEnt.Src
|
||||
*--------------------------------------
|
||||
SHARED.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
|
||||
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
|
||||
.DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/SYS/KERNEL.S.STAT
|
||||
|
|
|
@ -6,9 +6,9 @@ NEW
|
|||
* # SPrintF
|
||||
* Prints C-Style String
|
||||
* ## C
|
||||
* `int printf ( const char * format, ... );`
|
||||
* `int fprintf ( hFILE stream, const char * format, ... );`
|
||||
* `int sprintf ( char * str, const char * format, ... );`
|
||||
* `int printf ( const char *format, ... );`
|
||||
* `int fprintf ( short int stream, const char *format, ... );`
|
||||
* `int sprintf ( char *str, const char *format, ... );`
|
||||
* ## ASM
|
||||
* **In:**
|
||||
* PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes)
|
||||
|
@ -75,35 +75,17 @@ PrintF.hFILE .BS 1
|
|||
K.PrintF.PadL .EQ FAC+5
|
||||
K.PrintF.PadC .EQ ARG.SIGN
|
||||
*--------------------------------------
|
||||
K.PrintF >LDYAI K.IOBuf
|
||||
>STYA pIOBuf
|
||||
ldy #S.PS.hStdOut
|
||||
K.PrintF ldy #S.PS.hStdOut
|
||||
lda (pPs),y
|
||||
sta PrintF.hFILE
|
||||
|
||||
lda (pStack) Bytecount
|
||||
inc
|
||||
tay
|
||||
|
||||
lda (pStack),y format LO
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (pStack),y format HI
|
||||
sta ZPPtr2+1
|
||||
clc
|
||||
jsr STDIO.GetFormat
|
||||
|
||||
bra K.PrintF.1
|
||||
*--------------------------------------
|
||||
K.FPrintf >LDYAI K.IOBuf
|
||||
>STYA pIOBuf
|
||||
lda (pStack) Bytecount
|
||||
inc
|
||||
tay
|
||||
|
||||
lda (pStack),y format LO
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (pStack),y format HI
|
||||
sta ZPPtr2+1
|
||||
K.FPrintf clc
|
||||
jsr STDIO.GetFormat
|
||||
|
||||
iny
|
||||
lda (pStack),y hFILE
|
||||
|
@ -112,22 +94,9 @@ K.FPrintf >LDYAI K.IOBuf
|
|||
bra K.PrintF.1
|
||||
*--------------------------------------
|
||||
K.SPrintf stz PrintF.hFILE
|
||||
lda (pStack) Bytecount
|
||||
inc
|
||||
tay
|
||||
|
||||
lda (pStack),y format LO
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (pStack),y format HI
|
||||
sta ZPPtr2+1
|
||||
|
||||
iny
|
||||
lda (pStack),y str LO
|
||||
sta pIOBuf
|
||||
iny
|
||||
lda (pStack),y str HI
|
||||
sta pIOBuf+1
|
||||
|
||||
sec Format & buffer
|
||||
jsr STDIO.GetFormat
|
||||
*--------------------------------------
|
||||
K.PrintF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
|
||||
|
||||
|
@ -436,27 +405,38 @@ PrintF.COut phy
|
|||
.9 lda #E.BUF
|
||||
sec
|
||||
PrintF.COut.RTS rts
|
||||
*--------------------------------------
|
||||
K.PrintF.GetFormat
|
||||
lda (pStack)
|
||||
sta ZPPtr2
|
||||
ldy #1
|
||||
lda (pStack),y
|
||||
sta ZPPtr2+1
|
||||
lda pStack
|
||||
inc
|
||||
inc
|
||||
sta pLocal
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # ScanF (BLOCKING)
|
||||
* # FScanF (BLOCKING)
|
||||
* # SScanF
|
||||
* Read formatted data from string
|
||||
* ## C
|
||||
* `int scanf(const char *format, ...);`
|
||||
* `int fscanf(short int stream, const char *format, ...);`
|
||||
* `int sscanf ( const char *s, const char *format, ... );`
|
||||
* ## ASM
|
||||
* **In:**
|
||||
* ScanF :
|
||||
* `>PUSHW format`
|
||||
* `>PUSHW ptr`
|
||||
* `...`
|
||||
* `>PUSHB bytecount`
|
||||
* `>SYSCALL scanf`
|
||||
* FScanF :
|
||||
* `>PUSHB stream`
|
||||
* `>PUSHW format`
|
||||
* `>PUSHW ptr`
|
||||
* `...`
|
||||
* `>PUSHB bytecount`
|
||||
* `>SYSCALL fscanf`
|
||||
* SScanF :
|
||||
* `>PUSHW s`
|
||||
* `>PUSHW format`
|
||||
* `>PUSHW ptr`
|
||||
* `...`
|
||||
* `>PUSHB bytecount`
|
||||
* `>SYSCALL sscanf`
|
||||
* Specifiers :
|
||||
* + %i : short int
|
||||
* + %d : byte
|
||||
* + %I : int
|
||||
|
@ -467,31 +447,33 @@ K.PrintF.GetFormat
|
|||
* + %H : HEX word
|
||||
* + %s : string
|
||||
* TODO : %10s
|
||||
* `>PUSHW ptr`
|
||||
* `...`
|
||||
* `>PUSHB bytecount`
|
||||
* `>SYSCALL sscanf`
|
||||
* ## RETURN VALUE
|
||||
* A = Number of arguments filled.
|
||||
*\--------------------------------------
|
||||
K.SScanF lda (pStack) Bytecount
|
||||
inc
|
||||
tay
|
||||
K.ScanF ldy #S.PS.hStdIn
|
||||
lda (pPs),y
|
||||
sta PrintF.hFILE
|
||||
|
||||
clc
|
||||
jsr STDIO.GetFormat
|
||||
|
||||
lda (pStack),y format LO
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (pStack),y format HI
|
||||
sta ZPPtr2+1
|
||||
bra K.SScanF.1
|
||||
*--------------------------------------
|
||||
K.FScanF clc
|
||||
jsr STDIO.GetFormat
|
||||
|
||||
iny
|
||||
lda (pStack),y str LO
|
||||
sta ZPPtr1
|
||||
iny
|
||||
lda (pStack),y str HI
|
||||
sta ZPPtr1+1
|
||||
lda (pStack),y hFILE
|
||||
sta PrintF.hFILE
|
||||
|
||||
sty PrintF.Exit.Cnt+1 Total bytes to POP
|
||||
bra K.SScanF.1
|
||||
*--------------------------------------
|
||||
K.SScanF stz PrintF.hFILE
|
||||
|
||||
sec Format & buffer
|
||||
jsr STDIO.GetFormat
|
||||
*--------------------------------------
|
||||
K.SScanF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
|
||||
|
||||
.1 jsr SHARED.GetCharPtr2 End Of format?
|
||||
beq .8
|
||||
|
@ -633,6 +615,32 @@ PrintF.LocalGetByte
|
|||
PrintF.LocalGetByte.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
STDIO.GetFormat bcs .1
|
||||
|
||||
>LDYAI K.IOBuf
|
||||
>STYA pIOBuf
|
||||
|
||||
.1 lda (pStack) Bytecount
|
||||
inc
|
||||
tay
|
||||
|
||||
lda (pStack),y format LO
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (pStack),y format HI
|
||||
sta ZPPtr2+1
|
||||
|
||||
bcc .8
|
||||
|
||||
iny
|
||||
lda (pStack),y str LO
|
||||
sta pIOBuf
|
||||
iny
|
||||
lda (pStack),y str HI
|
||||
sta pIOBuf+1
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/SYS/KERNEL.S.STDIO2
|
||||
LOAD USR/SRC/SYS/KERNEL.S
|
||||
|
|
|
@ -50,7 +50,7 @@ UNISTD.Open ldx #5 /DEV/
|
|||
bcs IO.OPEN.REG
|
||||
|
||||
.1 lda K.MLI.PATH,x
|
||||
cmp IO.DEV.FIFO-1,x
|
||||
cmp DEV.FIFO-1,x
|
||||
bne IO.OPEN.REG
|
||||
dex
|
||||
bne .1
|
||||
|
@ -59,7 +59,7 @@ UNISTD.Open ldx #5 /DEV/
|
|||
*--------------------------------------
|
||||
>LDYAI K.MLI.PATH+6 skip $/DEV/
|
||||
|
||||
jsr K.GetDevByName
|
||||
>SYSCALL2 GetDevByName
|
||||
bcc .7
|
||||
ldx #2
|
||||
.10 lda Nod.Table.hPath-2,x
|
||||
|
@ -187,6 +187,7 @@ UNISTD.Close lda (pFD) #S.FD.T
|
|||
* CS: A = EC
|
||||
*\--------------------------------------
|
||||
K.Read jsr UNISTD.GetPFD
|
||||
|
||||
UNISTD.Read lda (pFD) #S.FD.T
|
||||
tax
|
||||
jmp (.1,x)
|
||||
|
@ -231,6 +232,8 @@ UNISTD.GetPFD sta IO.hFD
|
|||
>STYA pFD
|
||||
rts
|
||||
*--------------------------------------
|
||||
DEV.FIFO .AS "/dev/fifo" STAT,UNISTD
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/SYS/KERNEL.S.UNISTD
|
||||
LOAD USR/SRC/SYS/KERNEL.S
|
||||
|
|
|
@ -71,10 +71,9 @@ A2osX.D1.B .PH $D000
|
|||
.INB USR/SRC/SYS/KERNEL.S.STAT
|
||||
.INB USR/SRC/SYS/KERNEL.S.DIRENT
|
||||
.INB USR/SRC/SYS/KERNEL.S.UNISTD
|
||||
.INB USR/SRC/SYS/KERNEL.S.IO
|
||||
.INB USR/SRC/SYS/KERNEL.S.STDIO
|
||||
.INB USR/SRC/SYS/KERNEL.S.STDIO2
|
||||
.INB USR/SRC/SYS/KERNEL.S.DEV
|
||||
.INB USR/SRC/SYS/KERNEL.S.PFT
|
||||
.EP
|
||||
A2osX.D1.S .EQ *-A2osX.D1.B
|
||||
|
||||
|
@ -85,6 +84,7 @@ A2osX.D2.B .PH $D000
|
|||
.DA #RRAMWRAMBNK2
|
||||
.INB USR/SRC/SYS/KERNEL.S.STDLIB
|
||||
.INB USR/SRC/SYS/KERNEL.S.STRING
|
||||
.INB USR/SRC/SYS/KERNEL.S.DEV
|
||||
.INB USR/SRC/SYS/KERNEL.S.BIN
|
||||
.INB USR/SRC/SYS/KERNEL.S.PS
|
||||
.INB USR/SRC/SYS/KERNEL.S.ARG
|
||||
|
@ -108,8 +108,8 @@ A2osX.E0.B .PH $E000
|
|||
.INB USR/SRC/SYS/KERNEL.S.STRV
|
||||
.INB USR/SRC/SYS/KERNEL.S.MEM
|
||||
* go to A2osX.D1
|
||||
.INB USR/SRC/SYS/KERNEL.S.IO
|
||||
.INB USR/SRC/SYS/KERNEL.S.PIPE
|
||||
.INB USR/SRC/SYS/KERNEL.S.PFT
|
||||
|
||||
DevMgr.Timer .BS 1
|
||||
DevMgr.ASCREEN .BS 1
|
||||
|
|
Loading…
Reference in New Issue