A2osX/.Docs/KERNEL.md
2018-06-18 10:44:02 +02:00

14 KiB

*** Auto generated by docgen.cmd ***

GetArg

ASM

In:
A = argument index.
Out:
CC : success
Y,A = PTR To Arg[A]
CS : Out Of Bound

FileSearch

Search a file in the provided PATH list
And return, if found, the full path to it.

C

int filesearch ( char * filename, char * searchpath, char * fullpath, stat * filestat);

ASM

In:
>PUSHWI filestat
>PUSHWI fullpath
>PUSHWI searchpath
>LDYAI filename
Out:
CC : success
DstBuf = FilePath
DstStat = S.STAT
CS : not found

GetDevByID.A

In:
A = DevID
Out:
CC = OK, CS = ERROR
Y,A = DEVSLOT
note: X Unmodified

GetDevByName.YA

In:
Y,A = Ptr to device name (C-String)
Out:
CC = OK, CS = ERROR
X = DEVID
Y,A = DEVSLOT

GetDevStatus.A

In:
A = DevID
Out:
Y,A = S.DSTAT

IOCTL

C

int ioctl ( short int id, short int op, void *param);

ASM

In:
PUSHWI param
lda #op
ldy id
>SYSCALL IOCTL
Out:
Y,A = ...

OpenDir.YA

In:
Y,A = PATH (C-String)
Out:
CC : success
A = hDIR
CS : error
A = EC

ReadDir.A

In:
A = hDIR
Out:
CC : success
X = hDIRENT
Y,A = PTR to S.DIRENT
CS : error
A = EC
note : A = 0 means no more entry

CloseDir.A

In:
A = hDIR
Out:
none, always succeed.

ExpandStr

In:
Y,A = PTR to String to Expand (C-String)
Out:
X = hMem to Expanded String (C-String)
Y,A = PTR to Expanded String

PutEnv.YA

In:
Y,A = PTR to String NAME=VALUE (C-String)
Out:

SetEnv

In:
PUSHW = PTR To Value (PSTR)
PUSHW = PTR To Name (PSTR)
Out:

GetEnv.YA

In:
Y,A = PTR to NAME (PSTR)
Out:
CC : Y,A = PTR to VALUE (PSTR)
CS : not found

UnsetEnv.YA

In:
Y,A = PTR To Name (PSTR)
Out:

LoadTxtFile.YA

Load TXT a file in memory (with ending 0)
In:
Y,A = File Path
Out:
Y,A = File Length (without ending 0)
X = hMem of Loaded File

LoadFile

Load a file in memory
In:
PUSHW = AUXTYPE (Handled by....
PUSHB = TYPE ...
PUSHB = MODE ...
PUSHW = PATH ...FOpen)
Out:
Y,A = File Length
X = hMem of Loaded File

ChTyp

In:
PUSHB = TYPE
PUSHW = PATH

ChMod

In:
PUSHW = UID
PUSHW = PATH

ChOwn

In:
PUSHW = UID
PUSHW = PATH

ChGrp

In:
PUSHW = GID
PUSHW = PATH

FAdd,FSub,FMult,FDiv,FPwr

Return X+Y, X-Y, X*Y, X/Y, X^Y
In:
PUSHF = X (Float)
PUSHF = Y (Float)
Out:
On stack (Float)

Log,Sqr,Exp,Cos,Sin,Tan,ATan

Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
In:
PUSHF = X (Float)
Out:
On stack (Float)

Float

Return 'floated' long
In:
PUSHL = X (long)
Out:
On stack (Float)

LRIntF

Return Float rounded into a long
In:
PUSHF = X (Float)
Out:
On stack (long)

GetMem0

In:
Y,A = Size Requested
Out:
CC : success
YA = PTR to Mem (ZERO Initialised)

  • X = hMem
    CS :
    A = EC

GetMem

In:
Y,A = Size Requested
Out:
CC : success
YA = PTR to Mem (Uninitialised)

  • X = hMem
    CS :
    A = EC

FreeMem

In:
A = hMem To Free
Out:
none.
(X,Y unmodified)

GetMemPtr

In:
A = hMem
Out:
Y,A = PTR to MemBlock
(X unmodified)

GetMemByID

In:
A = hMem
Out:
Y,A = ZPMemMgrSPtr = PTR to S.MEM
X unmodified

NewStr

Create a new copy of this C-String
In:
Y,A = Ptr to source C-String
Out:
CC : success
Y,A = PTR to String
X = hMem (PSTR)
CS : error
A = SYS error code

SListGetByID

In:
PUSHB = hSList
PUSHW = KeyID
PUSHW = Data Ptr
PUSHW = Key Ptr
Out:
X,Y = Next KeyID

SListUpdateByID

In:
PUSHB = hSList
PUSHW = KeyID
PUSHW = Data Ptr
Out:
A = Key Length
X,Y = KeyID

SListAdd

In:
PUSHB = hSList
PUSHW = Key Ptr
PUSHW = Data Ptr
Out:
A = Key Length
X,Y = KeyID

SListLookup

In:
PUSHB = hSList
PUSHW = Key Ptr
PUSHW = Data Ptr
Out:
A = Key Length
X,Y = KeyID

SListNew

In:
Out:
A=hSList

SListFree

In:
A=hSList
Out:

GetStkObjProp

In:
A = hObject (AUX Memory)
Y = Property Index
Out:
Y,A = Property Value

NewStkObj

In:
Y,A = Size Requested
Out:
CC : success
YA = PTR to Mem (Uninitialised)

  • X = hMem
    CS :
    A = EC

FreeStkObj

In:
A = hMem To Free (AUX Memory)
Out:
none.
(X,Y unmodified)

LoadStkObj

Load a file in AUX memory (Stock Objects)
In:
PUSHW = AUXTYPE (Handled by....
PUSHB = TYPE ...
PUSHB = MODE ...
PUSHW = PATH ...FOpen)
Out:
Y,A = File Length
X = hMem of Loaded Object in AUX mem

ExecPSNewEnv.YA

ExecPS.YA (Blocking Parent PID)

CreatePSNewEnv.YA

CreatePS.YA (Non Blocking)

In:
Y,A = PTR To Cmd Line
Out:
A = Child PSID

GetMemStat.YA

In:
Y,A = Ptr to 24 bytes buffer
Out:
Buffer filled with memory stats

GetPSStatus.A

In:
A = PID
Out:
A = Status Byte

GetPSStat.YA

In:
Y,A = Ptr to 24 bytes buffer
Out:
Buffer filled with PS stats

Stat

Return information about a file
In:
PUSHW = PTR to S.STAT buffer
PUSHW = PTR to Filename (C-String)
Out:

MKDir.YA

In:
Y,A = DIR name
Out:
CC : success
CS : error
A = EC

MkNod.YA

return a hFile for a given Device Name
In:
Y,A=DevName
Out:
CC = OK, CS = ERROR
A = hFILE

MKFIFO

return a hFILE to a new FIFO
In:
Out:
CC = OK, CS = ERROR
A = hFILE

FPutC

Print A (char) to hFILE

C

int fputc ( int character, hFILE stream );

ASM

In:
Y : character
A : stream
Out:
CC = success

PutChar

C

int putchar ( int character );

ASM

Print A (char) to StdOut
In:
A : char to print
Out:
CC = success

PutS

Write Str to StdOut, appends '\r\n'

C

int puts ( const char * str );
In:
Y,A : CPtr
Out:
CC = success

FPutS

Write Str to FILE

C

int fputs ( const char * str, hFILE stream );
In:
PUSHB : hFILE
Y,A: str
Out:
CC = success

PrintF/SPrintF/FPrintF

Prints C-Style String

C

int printf ( const char * format, ... );
int sprintf ( char * str, const char * format, ... );
int fprintf ( hFILE stream, const char * format, ... );

ASM

In:
PrintF : (example is for printing Y,A as integer : format="Y,A= %I", 2 bytes)
>PUSHYA
>PUSHBI 2
>LDYAI format
>SYSCALL printf
SPrintF :
>PUSHYA
>PUSHBI 2
>PUSHWI format
>LDYAI str
>SYSCALL sprintf
FPrintF :
>PUSHYA
>PUSHBI 2
>PUSHWI format
lda hFILE
>SYSCALL fprintf
Out:
CC : success, Y,A = bytes sent
CS : error, A = code from Output
Specifiers :

  • %b : pull 1 byte to Print BIN
  • %B : pull 2 bytes 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
  • %n : pull 1 byte to Print low Nibble HEX
  • %N : pull 1 byte to Print high Nibble HEX
  • %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)
  • \\ : Print \
  • \% : Print %

Modifiers for len and padding :

  • %d : '9' '12'
  • %2d : ' 9' '12'
  • %02d : '09' '12'
  • %11s : 'ABCDEFGH '
  • %011s : 'ABCDEFGH000'
  • %2f : '3.14'

GetChar

Get char from StdIn
In:
none.
Out:
CC = success
A = char

GetC

Get char from Node

C

int getc ( FILE * stream );

ASM

In:
A = hNODE
Out:
CC = success
A = char

SScanF

Read formatted data from string

C

int sscanf ( const char * s, const char * format, ...);

ASM

In:
>PUSHBI Argument Byte count
>PUSHWI format

  • %i : short int
  • %d : byte
  • %I : int
  • %D : word
  • %L : long int
  • %U : dword
  • %h : HEX byte
  • %H : HEX word

>LDYA s
Out:
Y,A = Number of arguments filled.

FOpen

Open a file
In:
PUSHW = AUXTYPE
PUSHB = TYPE
PUSHB = MODE
SYS.FOpen.R : if R and exists -> ERROR
SYS.FOpen.W : if W and exists -> CREATE
SYS.FOpen.A : Append
SYS.FOpen.T : Open/Append in Text mode
SYS.FOpen.X : Create if not exists
PUSHW = PATH (PSTR)
Out:
CC : A = hFILE
CS : A = EC

FClose.A

Close a file
In:
A = hFILE
Out:

FRead

int fread ( void * ptr, int count, FILE * stream );
Read bytes from file
In:
PUSHW = Dest Ptr
PUSHW = Bytes To Read
PUSHB = hFILE
Out:
Y,A = Bytes Read

FWrite

int fwrite ( const void * ptr, int count, FILE * stream );
Write bytes to file
In:
PUSHW = Src Ptr
PUSHW = Bytes To Write
PUSHB = hFILE

Out:

Y,A = Bytes Written

FFlush.A

In:
A = hFILE

FSeek

Set the file-position indicator for hFILE
In:
PUSHW = Ptr to Offset (DWORD)
PUSHB = From
PUSHB = hFILE

FEOF.A

Test the end-of-file indicator for hFILE
In:
A = hFILE
Out:
CC :
A=0 EOF
A =0 NOT EOF
CS :

FTell

Return the current value of the file-position indicator
In:
PUSHW = Ptr to Offset (DWORD)
PUSHB = hFILE
Out:
Offset = Offset

Remove.YA

Rename

Rename a file
In:
PUSHW = New Name
PUSHW = Old Name
Out:

StrToF

Convert String to 40 bits Float

C

float strtof (const char* str, char** endptr);

ASM

In:
>PUSHWI EndPtr
>LDYA str
Out:
On stack (float)

AToF

Convert String to 40 bits Float

C

float atof (const char* str);

ASM

In:
>LDYA str
Out:
On stack (float)

StrToL/StrToUL

Convert String to 32 bits (unsigned) int

C

long strtol (const char* str, char** endptr, int base);
unsigned long strtoul (const char* str, char** endptr, int base);

ASM

In:
>PUSHB Base
>PUSHWI EndPtr
>LDYA str
Out:
On stack (long)

AToL

Convert String to 32 bits int

C

long atol ( const char * str );

ASM

In:
>LDYA str
Out:
On stack (long)

AToI.YA

C

int atoi ( const char * str );

ASM

In:
>LDYA str
Out:
Y,A = Int

RealPath.YA

Return the canonicalized absolute pathname
In:
Y,A = Ptr to Relative Filename (C-String)
Out:
CC : success
Y,A = Ptr to Full Path (C-String)
X = hMem of Full Path
CS : A = Error Code

StrLen

Returns Length of C-String

C

char * strcat ( char * destination, const char * source );

ASM

In:
Y,A = Ptr to CSTR
Out:
Y,A = String length

StrCat

Concatenate strings

C

char * strcat ( char * destination, const char * source );

ASM

In:
>PUSHWI source
>LDYAI destination
>SYSCALL strcat
Out:
Y,A = destination

StrCpy

Copy string

C

char * strcpy ( char * destination, const char * source );

ASM

In:
>PUSHWI source
>LDYAI destination
>SYSCALL strcpy
Out:
Y,A = destination

StrMatch

Compare a String against pattern
In:
PUSHW = PTR to Pattern (e.g. '*test?.txt')
PUSHW = PTR to Src String
Out:
CC : match
CS : no match

StrUpr/StrLwr

Convert string to UPPERCASE/lowercase
In:
Y,A = PTR to String (CSTR)
Out:
Uppercased/lowercased String in Buffer

StrCmp

Compare 2 strings
In:
PUSHW = Ptr to String1 (CSTR)
PUSHW = Ptr to String2 (CSTR)
Out:
DST = SRC

StrICmp

Compare 2 strings
In:
PUSHW = Ptr to String1 (CSTR)
PUSHW = Ptr to String2 (CSTR)
Out:
CC, Y,A=0
CS, Y,A > 0 or < 0

Time

Get System Time in Buffer

C

time_t time (time_t* timer);

##ASM
In:
Y,A = PTR to S.TIME
Out:
S.TIME filled with System date/time

PTime2Time

Convert ProDOS Time To S.TIME

C

time_t time (long ptime, time_t* timer);

##ASM
In :
PUSHW = Dst PTR To S.TIME
PUSHW = Src PTR to ProDOS DATE/TIME (DWORD)
Out:

CTime2Time

Convert CTIME to S.TIME
In:
PUSHW = Dst PTR To S.TIME
PUSHW = Src CTIME DWORD

StrFTime

C

Convert S.TIME struct to CSTR
size_t strftime (char* ptr, size_t maxsize, const char* format, const struct tm* timeptr );

ASM

In:
PUSHW = Dst PTR To CSTR Buf
PUSHW = Src PTR To Format String

  • %a : Abbreviated weekday name : Thu
  • %A : Full weekday name : Thursday
  • %b : Abbreviated month name : Aug
  • %B : Full month name : August
  • %d : Day of the month, zero-padded (01-31)
  • %H : Hour in 24h format (00-23) 14
  • %I : Hour in 12h format (01-12) 02
  • %m : Month as a decimal number (01-12) 08
  • %M : Minute (00-59) 55
  • %p : AM or PM designation PM
  • %S : Second (00-61) 02
  • %w : Weekday as a decimal number with Sunday as 0 (0-6)
  • %y : Year, last two digits (00-99)
  • %Y : Year four digits 2001

PUSHW = Src PTR To S.Time
Out:
none. always succeed.