1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-12-27 19:30:04 +00:00
millfork/include/lunix.mfk
2020-03-31 21:43:36 +02:00

232 lines
6.1 KiB
Plaintext

#if not(LUNIX)
#warn lunix module should be only used on LUnix targets
#endif
const word lkf_jumptab = $200
byte relocation_offset @$1001
inline asm byte get_ipid() {
? lda 2
? rts
}
pointer tsp @4
pointer argv @$80
byte argc
inline asm byte get_pdmajor() {
? ldy #$25
? lda (tsp),y
? rts
}
inline asm byte get_pdminor() {
? ldy #$26
? lda (tsp),y
? rts
}
inline asm word get_pid() {
? ldy #$28
? lda (tsp),y
? tax
? dey
? lda (tsp),y
? rts
}
inline asm byte get_parent_ipid() {
? ldy #$29
? lda (tsp),y
? rts
}
byte errno
inline asm void set_errno_on_carry_return_a() {
? tax
? jmp set_errno_on_carry_return_x()
}
inline asm void set_errno_on_carry_return_x() {
? bcs _no_error
? lda #0
_no_error:
? sta errno
? txa
? rts
}
inline asm void set_errno_on_carry_return_nothing() {
? bcs _no_error
? lda #0
_no_error:
? sta errno
? rts
}
asm void set_zpsize(byte a) @lkf_jumptab + $0000 extern
asm void get_moduleif() @lkf_jumptab + $0002 extern // TODO
asm void _fopen(word ay, byte x) @lkf_jumptab + $0004 extern
asm byte fopen(word ay, byte x) {
? jsr _fopen
? jmp set_errno_on_carry_return_x
}
asm void _fopendir(word ay) @lkf_jumptab + $0006 extern
asm byte fopendir(word ay) {
? jsr _fopendir
? jmp set_errno_on_carry_return_x
}
asm void _fclose(byte x) @lkf_jumptab + $0008 extern
asm byte fclose(byte x) {
? jsr _fclose
? jmp set_errno_on_carry_return_nothing
}
asm byte _fgetc(byte x) @lkf_jumptab + $000a extern
asm byte fgetc(byte x) {
? jsr _fgetc
? jmp set_errno_on_carry_return_a
}
asm void _fputc(byte x, byte a) @lkf_jumptab + $000c extern
inline asm void fputc_blocking(byte x, byte a) {
? sec
? jmp _fputc
}
inline asm void fputc_nonblocking(byte x, byte a) {
? clc
? jmp _fputc
}
asm void _fcmd(word ay, byte x) @lkf_jumptab + $000e extern
asm byte fcmd(word ay, byte x) {
? jsr _fcmd
? jmp set_errno_on_carry_return_x
}
asm void _freaddir(word ay, byte x) @lkf_jumptab + $0010 extern
asm byte freaddir(word ay, byte x) {
? sec
? jsr _freaddir
? jmp set_errno_on_carry_return_a
}
asm word _fgetdevice(byte x) @lkf_jumptab + $0012 extern
asm word fgetdevice(byte x) {
? jsr _fgetdevice
? txa
? pha
? tya
? tax
? pla
? rts
}
asm void _strout(byte x) @lkf_jumptab + $0014 extern
macro asm void strout(word const string, byte x) {
? jsr _strout
bit string
? jsr set_errno_on_carry_return_nothing
}
asm void popen() @lkf_jumptab + $0016 extern // TODO
asm void ufd_open() @lkf_jumptab + $0018 extern // TODO
asm void _fdup(byte x) @lkf_jumptab + $001a extern
inline asm byte fdup(byte x) {
? jsr _fdup
? txa
? rts
}
asm void print_error() @lkf_jumptab + $001c extern // TODO
asm void suicerrout(byte a) @lkf_jumptab + $001e extern
asm void suicide(byte a) @lkf_jumptab + $0020 extern
asm void _palloc(byte a) @lkf_jumptab + $0022 extern
asm byte palloc(byte a) {
? jsr _palloc
? jmp set_errno_on_carry_return_x
}
asm void free(byte x) @lkf_jumptab + $0024 extern
asm void force_taskswitch() @lkf_jumptab + $0026 extern
asm void forkto() @lkf_jumptab + $0028 extern // TODO
asm void getipid() @lkf_jumptab + $002a extern // TODO
asm void signal() @lkf_jumptab + $002c extern // TODO
asm void sendsignal() @lkf_jumptab + $002e extern // TODO
asm void wait() @lkf_jumptab + $0030 extern // TODO
asm void sleep(word xy) @lkf_jumptab + $0032 extern
asm void _lock(byte x) @lkf_jumptab + $0034 extern
inline asm void lock(byte x) {
? clc
? jmp _lock
}
asm void unlock(byte x) @lkf_jumptab + $0036 extern
asm void suspend(word ax) @lkf_jumptab + $0038 extern
asm void hook_alert() @lkf_jumptab + $003a extern // TODO
asm void hook_irq() @lkf_jumptab + $003c extern // TODO
asm void hook_nmi() @lkf_jumptab + $003e extern // TODO
asm void panic() @lkf_jumptab + $0040 extern
asm void locktsw() @lkf_jumptab + $0042 extern
asm void unlocktsw() @lkf_jumptab + $0044 extern
asm void add_module() @lkf_jumptab + $0046 extern // TODO
asm void fix_module() @lkf_jumptab + $0048 extern // TODO
asm void mpalloc() @lkf_jumptab + $004a extern // TODO
asm void spalloc() @lkf_jumptab + $004c extern // TODO
asm void pfree() @lkf_jumptab + $004e extern // TODO
asm void mun_block() @lkf_jumptab + $0050 extern // TODO
asm void catcherr() @lkf_jumptab + $0052 extern // TODO
asm void printk(byte a) @lkf_jumptab + $0054 extern
asm void putchar(byte a) @lkf_jumptab + $0054 extern // alias
asm void hexout(byte a) @lkf_jumptab + $0056 extern
asm void disable_nmi() @lkf_jumptab + $0058 extern
asm void enable_nmi() @lkf_jumptab + $005a extern
asm void get_bitadr() @lkf_jumptab + $005c extern // TODO
asm void addtask() @lkf_jumptab + $005e extern // TODO
asm void get_smbptr() @lkf_jumptab + $0060 extern // TODO
asm void smb_alloc() @lkf_jumptab + $0062 extern // TODO
asm void smb_free() @lkf_jumptab + $0064 extern // TODO
asm void alloc_pfd() @lkf_jumptab + $0066 extern // TODO
asm void io_return() @lkf_jumptab + $0068 extern // TODO
asm void io_return_error() @lkf_jumptab + $006a extern // TODO
asm void ref_increment() @lkf_jumptab + $006c extern // TODO
asm void p_insert() @lkf_jumptab + $006e extern // TODO
asm void p_remove() @lkf_jumptab + $0070 extern // TODO
asm void _raw_alloc() @lkf_jumptab + $0072 extern // TODO
asm void exe_reloc() @lkf_jumptab + $0074 extern // TODO
asm void exe_test() @lkf_jumptab + $0076 extern // TODO
asm void init() @lkf_jumptab + $0078 extern // TODO
asm void keyb_joy0() @lkf_jumptab + $007a extern // TODO
asm void keyb_joy1() @lkf_jumptab + $007c extern // TODO
asm void keyb_scan() @lkf_jumptab + $007e extern // TODO
asm void keyb_stat() @lkf_jumptab + $0080 extern // TODO
asm byte random() @lkf_jumptab + $0082 extern
asm void srandom(word ay) @lkf_jumptab + $0084 extern
asm void getenv() @lkf_jumptab + $0086 extern // TODO
asm void setenv() @lkf_jumptab + $0088 extern // TODO
asm void loado65() @lkf_jumptab + $008a extern // TODO
asm byte __start() @$1006 {
? lda argv
? sta argc
? lda #0
? sta argv
lda #__zeropage_usage // TODO
jsr set_zpsize
jsr main
jsr suicide
}