Working on more kernel support.
This commit is contained in:
parent
fb8a2415c2
commit
616e6602a3
6 changed files with 55 additions and 13 deletions
|
@ -29,7 +29,7 @@ void dirtest(void) {
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *dirent;
|
struct dirent *dirent;
|
||||||
|
|
||||||
//textPrint("Starting directory test.\n");
|
textPrint("Starting directory test.\n");
|
||||||
|
|
||||||
if ((dir = opendir("0:"))) {
|
if ((dir = opendir("0:"))) {
|
||||||
//textPrint("Directory opened.\n");
|
//textPrint("Directory opened.\n");
|
||||||
|
@ -71,7 +71,12 @@ int main(void) {
|
||||||
f256Init();
|
f256Init();
|
||||||
|
|
||||||
//dirtest();
|
//dirtest();
|
||||||
printf("Int = %d\n", sizeof(int));
|
|
||||||
|
while(true) {
|
||||||
|
kernelCall(Clock.GetTime);
|
||||||
|
textGotoXY(0, 0);
|
||||||
|
printf("%d.%d ", kernelEventData.clock.seconds, kernelEventData.clock.centis);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ struct call { // Mount at $ff00
|
||||||
long vectors816_2; // 12 bytes skipped here.
|
long vectors816_2; // 12 bytes skipped here.
|
||||||
long vectors816_3;
|
long vectors816_3;
|
||||||
long SetTimer; //
|
long SetTimer; //
|
||||||
} Config;
|
} Clock;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Kernel Call Arguments; mount at $f0
|
// Kernel Call Arguments; mount at $f0
|
||||||
|
@ -310,6 +310,8 @@ struct events {
|
||||||
uint16_t EOF;
|
uint16_t EOF;
|
||||||
uint16_t CLOSED;
|
uint16_t CLOSED;
|
||||||
uint16_t ERROR;
|
uint16_t ERROR;
|
||||||
|
uint16_t CREATED;
|
||||||
|
uint16_t DELETED;
|
||||||
} directory;
|
} directory;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
@ -317,6 +319,10 @@ struct events {
|
||||||
uint16_t UDP;
|
uint16_t UDP;
|
||||||
} net;
|
} net;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint16_t EXPIRED;
|
||||||
|
} timer;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
uint16_t TICK;
|
uint16_t TICK;
|
||||||
} clock;
|
} clock;
|
||||||
|
@ -402,6 +408,23 @@ struct event_dir_t {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct event_clock_t {
|
||||||
|
uint8_t century;
|
||||||
|
uint8_t year;
|
||||||
|
uint8_t month;
|
||||||
|
uint8_t day;
|
||||||
|
uint8_t hours;
|
||||||
|
uint8_t minutes;
|
||||||
|
uint8_t seconds;
|
||||||
|
uint8_t centis;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct event_timer_t {
|
||||||
|
uint8_t units;
|
||||||
|
uint8_t absolute;
|
||||||
|
uint8_t cookie;
|
||||||
|
};
|
||||||
|
|
||||||
struct event_t {
|
struct event_t {
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
uint8_t buf; // kernel's buf page ID
|
uint8_t buf; // kernel's buf page ID
|
||||||
|
@ -412,6 +435,9 @@ struct event_t {
|
||||||
struct event_game_t game;
|
struct event_game_t game;
|
||||||
struct event_file_t file;
|
struct event_file_t file;
|
||||||
struct event_dir_t directory;
|
struct event_dir_t directory;
|
||||||
|
//struct event_net_t net;
|
||||||
|
struct event_clock_t clock;
|
||||||
|
struct event_timer_t timer;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,9 @@ void f256Init(void) {
|
||||||
spriteReset();
|
spriteReset();
|
||||||
fileReset();
|
fileReset();
|
||||||
|
|
||||||
randomSeed(0); //***TODO*** Use clock or something.
|
//***TODO*** The clock stuff doesn't actually work.
|
||||||
|
kernelCall(Clock.GetTime);
|
||||||
|
randomSeed(kernelEventData.clock.centis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,8 @@ typedef unsigned char bool;
|
||||||
#define VKY_TS6_SQUARE (VKY_TS6_ADDR_H+1)
|
#define VKY_TS6_SQUARE (VKY_TS6_ADDR_H+1)
|
||||||
#define VKY_TS7_SQUARE (VKY_TS7_ADDR_H+1)
|
#define VKY_TS7_SQUARE (VKY_TS7_ADDR_H+1)
|
||||||
|
|
||||||
|
#define VIRQ 0xfffe
|
||||||
|
|
||||||
#define JOY_UP 1
|
#define JOY_UP 1
|
||||||
#define JOY_DOWN 2
|
#define JOY_DOWN 2
|
||||||
#define JOY_LEFT 4
|
#define JOY_LEFT 4
|
||||||
|
@ -151,6 +153,9 @@ typedef struct colorS {
|
||||||
#define SET_BIT(x, pos) (x |= (1U << pos))
|
#define SET_BIT(x, pos) (x |= (1U << pos))
|
||||||
|
|
||||||
|
|
||||||
|
extern byte SOF;
|
||||||
|
|
||||||
|
|
||||||
void f256Init(void);
|
void f256Init(void);
|
||||||
byte FAR_PEEK(uint32_t address);
|
byte FAR_PEEK(uint32_t address);
|
||||||
void FAR_POKE(uint32_t address, byte value);
|
void FAR_POKE(uint32_t address, byte value);
|
||||||
|
|
|
@ -54,6 +54,10 @@ int16_t fileUnlink(char *name);
|
||||||
int16_t fileWrite(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t *fd);
|
int16_t fileWrite(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t *fd);
|
||||||
|
|
||||||
|
|
||||||
|
// mkdir
|
||||||
|
// rmdir
|
||||||
|
|
||||||
|
|
||||||
#define _DE_ISREG(t) (t == 0)
|
#define _DE_ISREG(t) (t == 0)
|
||||||
#define _DE_ISDIR(t) (t == 1)
|
#define _DE_ISDIR(t) (t == 1)
|
||||||
#define _DE_ISLBL(t) (t == 2)
|
#define _DE_ISLBL(t) (t == 2)
|
||||||
|
|
|
@ -38,16 +38,16 @@ extern "C"
|
||||||
#define kernelEvent(member) (size_t)(&((struct events *)0)->member)
|
#define kernelEvent(member) (size_t)(&((struct events *)0)->member)
|
||||||
#define kernelVector(member) (size_t)(&((struct call *)0xff00)->member)
|
#define kernelVector(member) (size_t)(&((struct call *)0xff00)->member)
|
||||||
#define kernelCall(fn) \
|
#define kernelCall(fn) \
|
||||||
({ asm( \
|
({ char ret; asm( \
|
||||||
"jsr %[addy] \n" \
|
"jsr %[addy] \n" \
|
||||||
"sta (%[ret]) \n" \
|
"sta (%[ret]) \n" \
|
||||||
"lda #0 \n" \
|
"lda #0 \n" \
|
||||||
"ror a \n" \
|
"ror a \n" \
|
||||||
"sta (%[err]) \n" \
|
"sta (%[err]) \n" \
|
||||||
: [err] "=m"(kernelError), [ret] "=m"(kernelReturn) \
|
: [err] "=m"(kernelError), [ret] "=m"(ret) \
|
||||||
: [addy] "i"(kernelVector(fn)) \
|
: [addy] "i"(kernelVector(fn)) \
|
||||||
: "a", "c", "v"); \
|
: "a", "c", "v"); \
|
||||||
kernelReturn; })
|
ret; })
|
||||||
/*
|
/*
|
||||||
asm (
|
asm (
|
||||||
".text\n"
|
".text\n"
|
||||||
|
|
Loading…
Add table
Reference in a new issue