/demos/trunk/astro/rock.c |
---|
17,8 → 17,6 |
int kill_rock; |
rock_pos rocks[ROCK_NMAX]; |
extern PID shutdown_task_PID; |
void draw_rock(int x, int y, int r, int c) |
{ |
sem_wait(&mx_grf); |
272,7 → 270,7 |
pid_RC = task_create("RockCreator", rock_creator, &ms, NULL); |
if (pid_RC == NIL) { |
sys_shutdown_message("Could not create task <RockCreator>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} else |
task_activate(pid_RC); |
/demos/trunk/astro/asteroid.h |
---|
16,9 → 16,6 |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include <drivers/shark_pci26.h> |
#include <drivers/shark_linuxc26.h> |
#include <drivers/shark_input26.h> |
#include <drivers/shark_keyb26.h> |
#include <drivers/shark_fb26.h> |
/demos/trunk/astro/initfile.c |
---|
20,6 → 20,14 |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include <drivers/shark_linuxc26.h> |
#include <drivers/shark_pci26.h> |
#include <drivers/shark_input26.h> |
#include <drivers/shark_keyb26.h> |
#include <drivers/shark_fb26.h> |
#define FRAME_BUFFER_DEVICE 0 |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
31,6 → 39,14 |
#define INTDRIVE_T 10000 |
#define INTDRIVE_FLAG 0 |
void call_shutdown_task(void *arg); |
int device_drivers_init(); |
int device_drivers_close(); |
void set_shutdown_task(); |
TASK shutdown_task_body(void *arg); |
PID shutdown_task_PID = -1; |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
48,11 → 64,104 |
TASK __init__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
HARTPORT_init(); |
HARTPORT_init(); |
__call_main__(mb); |
set_shutdown_task(); |
return (void *)0; |
device_drivers_init(); |
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN); |
__call_main__(mb); |
return (void *)0; |
} |
void set_shutdown_task() { |
NRT_TASK_MODEL nrt; |
nrt_task_default_model(nrt); |
nrt_task_def_system(nrt); |
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL); |
if (shutdown_task_PID == NIL) { |
sys_shutdown_message("Error: Cannot create shutdown task\n"); |
sys_end(); |
} |
} |
int device_drivers_init() { |
int res; |
KEYB_PARMS kparms = BASE_KEYB; |
LINUXC26_register_module(); |
PCI26_init(); |
INPUT26_init(); |
keyb_def_ctrlC(kparms, NULL); |
KEYB26_init(&kparms); |
FB26_init(); |
res = FB26_open(FRAME_BUFFER_DEVICE); |
if (res) { |
cprintf("Error: Cannot open graphical mode\n"); |
KEYB26_close(); |
INPUT26_close(); |
sys_end(); |
} |
FB26_use_grx(FRAME_BUFFER_DEVICE); |
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16"); |
return 0; |
} |
int device_drivers_close() { |
FB26_close(FRAME_BUFFER_DEVICE); |
KEYB26_close(); |
INPUT26_close(); |
return 0; |
} |
#define SHUTDOWN_TIMEOUT_SEC 3 |
void call_shutdown_task(void *arg) |
{ |
struct timespec t; |
sys_gettime(&t); |
t.tv_sec += SHUTDOWN_TIMEOUT_SEC; |
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */ |
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0); |
task_activate(shutdown_task_PID); |
} |
TASK shutdown_task_body(void *arg) { |
device_drivers_close(); |
sys_shutdown_message("-- S.Ha.R.K. Closed --\n"); |
sys_abort_shutdown(0); |
return NULL; |
} |
/demos/trunk/astro/astro.c |
---|
24,8 → 24,6 |
rock_ini rock_new; |
extern PID shutdown_task_PID; |
TASK shot(int i) |
{ |
int x, y; /* shot graphic position */ |
374,7 → 372,7 |
pid = task_create("Astro", astro, &ms, NULL); |
if (pid == NIL) { |
sys_shutdown_message("Could not create task <astro>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} else |
task_activate(pid); |
387,7 → 385,7 |
pid = task_create("Taken", look, &mp, NULL); |
if (pid == NIL) { |
sys_shutdown_message("Could not create task <Taken>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} else |
task_activate(pid); |
403,7 → 401,7 |
pid_TL = task_create("TurnLeft", turn, &mp, NULL); |
if (pid_TL == NIL) { |
sys_shutdown_message("Could not create task <Turn L>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} |
418,7 → 416,7 |
pid_TR = task_create("TurnRight", turn, &mp, NULL); |
if (pid_TR == NIL) { |
sys_shutdown_message("Could not create task <Turn R>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} |
433,7 → 431,7 |
pid_SU = task_create("SpeedUP", speed, &mp, NULL); |
if (pid_SU == NIL) { |
sys_shutdown_message("Could not create task <Speed UP>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} |
448,7 → 446,7 |
pid_SD = task_create("SpeedDOWN", speed, &mp, NULL); |
if (pid_SD == NIL) { |
sys_shutdown_message("Could not create task <Speed DOWN>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} |
463,7 → 461,7 |
pid_SZ = task_create("SpeedZERO", speed, &mp, NULL); |
if (pid_SZ == NIL) { |
sys_shutdown_message("Could not create task <Speed ZERO>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} |
475,7 → 473,7 |
pid = task_create("MoveAstro", move, &mp, NULL); |
if (pid == NIL) { |
sys_shutdown_message("Could not create task <MoveAstro>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} else |
task_activate(pid); |
492,7 → 490,7 |
pid_FL = task_create("FlipAstro", turn, &mp, NULL); |
if (pid_FL == NIL) { |
sys_shutdown_message("Could not create task <Flip Astro>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} |
#endif |
/demos/trunk/astro/asteroid.c |
---|
16,8 → 16,6 |
sem_t mx_mat, mx_grf, mx_pos, mx_vel, mx_xy, mx_rk, mx_rn; /* mutex semaphores */ |
sem_t mx_st_nrg, mx_st_scr, mx_st_kil, mx_st_liv; /* mutex semaphores */ |
PID shutdown_task_PID = -1; |
double dist_xy(int x1, int y1, int x2, int y2) |
{ |
double dst; |
65,82 → 63,15 |
void end_func(KEY_EVT *k) { |
task_activate(shutdown_task_PID); |
} |
int device_drivers_close() { |
FB26_close(FRAME_BUFFER_DEVICE); |
KEYB26_close(); |
INPUT26_close(); |
return 0; |
} |
int device_drivers_init() { |
KEYB_PARMS kparms = BASE_KEYB; |
LINUXC26_register_module(); |
PCI26_init(); |
INPUT26_init(); |
keyb_def_ctrlC(kparms, NULL); |
KEYB26_init(&kparms); |
FB26_init(); |
FB26_open(FRAME_BUFFER_DEVICE); |
FB26_use_grx(FRAME_BUFFER_DEVICE); |
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16"); |
return 0; |
} |
TASK shutdown_task_body(void *arg) { |
device_drivers_close(); |
sys_shutdown_message("-- S.Ha.R.K. Closed --\n"); |
sys_end(); |
return NULL; |
} |
void set_shutdown_task() { |
NRT_TASK_MODEL nrt; |
nrt_task_default_model(nrt); |
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL); |
if (shutdown_task_PID == NIL) { |
sys_shutdown_message("Error: Cannot create shutdown task\n"); |
sys_end(); |
} |
} |
int main(int argc, char **argv) |
{ |
KEY_EVT k; |
TIME seme; |
set_shutdown_task(); |
device_drivers_init(); |
k.flag = CNTR_BIT; |
k.scan = KEY_C; |
k.ascii = 'c'; |
/demos/trunk/astro/stat.c |
---|
19,8 → 19,6 |
int lives; /* current player lives */ |
int crash; /* astro vs. rock */ |
extern PID shutdown_task_PID; |
TASK stat_write() |
{ |
char st[20]; |
131,7 → 129,7 |
pid = task_create("StatWrite", stat_write, &ms, NULL); |
if (pid == NIL) { |
sys_shutdown_message("Could not create task <StatWrite>\n"); |
task_activate(shutdown_task_PID); |
sys_end(); |
return; |
} else |
task_activate(pid); |