雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
1: 2007-01-30 (火) 08:58:04 ソース バックアップ No.1 を復元して編集
Line 1: Line 1:
 +すこしタスクについて復習したので、実装実験。
 +-まず、タスクを準備する。bootpac.cの先頭で
 +  struct TASK *task_a, *task,*task_fdctl;
 +-こんなことして、タスク task_fdctl を登録。
 +-次に、このタスクを実際に動かすため、各種設定&初期化。(task_aの初期化の後くらいに入れた)
 +               :
 +    task_a->langmode = 0;
 +
 +    /*fdタスク実験部*/
 +    task_fdctl  = task_alloc();
 +    task_fdctl->tss.esp = memman_alloc_4k(memman,64*1024)+64*1024;
 +    task_fdctl->tss.eip = ( int ) &task_fdctl_main;
 +    task_fdctl->tss.es = 1*8;
 +    task_fdctl->tss.cs = 2*8;
 +    task_fdctl->tss.ss = 1*8;
 +    task_fdctl->tss.ds = 1*8;
 +    task_fdctl->tss.fs = 1*8;
 +    task_fdctl->tss.gs = 1*8;
 +    task_run(task_fdctl,2,2);
 +       /*=============================*/
 +
 +    /* sht_back */
 +    sht_back  = sheet_alloc(shtctl);
 +                 :
 +
 +-次に、task_fdctl_main関数の内容を実装。(これはfd.cというファイルに割った)
 +
 + void task_fdctl_main(){
 +
 +  struct TIMER *timer;
 +  struct TASK *task = task_now();
 +  int i=0,fifost,fifobuf[128];
 +  char s[60];
 +
 +  fifo32_init(&task->fifo,128,fifobuf,task);
 +  timer = timer_alloc();
 +  timer_init(timer,&task->fifo,1);
 +  timer_settime(timer,100);
 +
 +  struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;
 +
 +     for(;;){
 +
 +
 +    io_cli();
 +       if (fifo32_status(&task->fifo) == 0){
 +         task_sleep(task);
 +         io_sti();
 +
 +           sprintf(s, "ST %d",fifo32_status(&task->fifo));
 +           boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*3, 63, 31);
 +           putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*3, COL8_FF00FF, s);
 +
 +
 +       }
 +       else {
 +         fifost = fifo32_get(&task->fifo);
 +
 +         io_sti();
 +         if (fifost = 1){
 +           sprintf(s, "Timer %d",fifost);
 +           boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*13, 63, 31);
 +           putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*13, COL8_FF00FF, s);
 +           timer_settime(timer,100);
 +         }
 +
 +         if (fifost >= 2){
 +           sprintf(s, "Other! %d",fifost);
 +           boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*16, 63, 31);
 +           putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*16, COL8_FF00FF, s);
 +
 +
 +         }
 +
 +
 +
 +
 +         }
 +       }
 + }