雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
5: 2007-01-28 (日) 20:34:42 ソース バックアップ No.5 を復元して編集 現: 2024-01-06 (土) 22:39:09 ソース 編集
Line 20: Line 20:
 io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */  io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */
 fifo32_init(&keycmd, 32, keycmd_buf, 0);  fifo32_init(&keycmd, 32, keycmd_buf, 0);
 + 
 //DMAの初期化  //DMAの初期化
 io_out8(0x00d6, 0xc0); /* マスタのch0をカスケードモードに */  io_out8(0x00d6, 0xc0); /* マスタのch0をカスケードモードに */
 io_out8(0x00c0, 0x00); /* スレーブのDMAを許可 */  io_out8(0x00c0, 0x00); /* スレーブのDMAを許可 */
 io_out8(0x000a, 0x06); /* マスタのch2のDMAをマスク */  io_out8(0x000a, 0x06); /* マスタのch2のDMAをマスク */
 + 
 memtotal = memtest(0x00400000, 0xbfffffff);  memtotal = memtest(0x00400000, 0xbfffffff);
Line 46: Line 46:
    *((int *) 0x0fe4) = (int) shtctl;     *((int *) 0x0fe4) = (int) shtctl;
    task_a->langmode = 0;     task_a->langmode = 0;
 + 
    /*fdタスク実験部*/     /*fdタスク実験部*/
    task_fdctl  = task_alloc();     task_fdctl  = task_alloc();
Line 59: Line 59:
    task_run(task_fdctl,2,2);     task_run(task_fdctl,2,2);
    /*=============================*/     /*=============================*/
 + 
    /* sht_back */     /* sht_back */
    sht_back  = sheet_alloc(shtctl);     sht_back  = sheet_alloc(shtctl);
Line 67: Line 67:
 void task_fdctl_main(){  void task_fdctl_main(){
 + 
   struct FIFO32 fifo_fd;    struct FIFO32 fifo_fd;
  struct TIMER *timer_1s;   struct TIMER *timer_1s;
  int i = 0;   int i = 0;
  int fifost, fifobuf[128];   int fifost, fifobuf[128];
 + 
    fifo32_init(&fifo_fd, 128, fifobuf, 0);     fifo32_init(&fifo_fd, 128, fifobuf, 0);
    timer_1s = timer_alloc();     timer_1s = timer_alloc();
    timer_init(timer_1s, &fifo_fd, 100);     timer_init(timer_1s, &fifo_fd, 100);
    timer_settime(timer_1s, 100);     timer_settime(timer_1s, 100);
 + 
     struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;      struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;
   unsigned char s[8];    unsigned char s[8];
 + 
     for(;;){      for(;;){
 + 
       io_cli();        io_cli();
       fifost = fifo32_get(&fifo_fd);        fifost = fifo32_get(&fifo_fd);
     if ( fifost = 100){      if ( fifost = 100){
        i = i++;;         i = i++;;
 + 
       sprintf(s, "%02X",i);        sprintf(s, "%02X",i);
       boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 31, 31);        boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 31, 31);
Line 93: Line 93:
    timer_settime(timer_1s, 100);     timer_settime(timer_1s, 100);
     }      }
 + 
     io_sti();      io_sti();
     }      }
Line 137: Line 137:
 {  {
   int cc,hh,ss;        /*物理セクタ格納用*/    int cc,hh,ss;        /*物理セクタ格納用*/
 + 
   if( r_sec > 2879 ){    if( r_sec > 2879 ){
       return -1;        return -1;
     }      }
 + 
   ss = r_sec % 18 +1;          /* 論理セクタを物理セクタに変換*/    ss = r_sec % 18 +1;          /* 論理セクタを物理セクタに変換*/
   hh = (r_sec / 18) % 2;    hh = (r_sec / 18) % 2;
   cc = (r_sec / 18) /2 / 80;    cc = (r_sec / 18) /2 / 80;
 + 
   /*データリード: [1] [セクタ番号] [セクタ数] [番地] [FIFO32*] [データ]*/    /*データリード: [1] [セクタ番号] [セクタ数] [番地] [FIFO32*] [データ]*/
   io_cli();    io_cli();
Line 154: Line 154:
   fifo32_put(fd_ctl_task->fifo,data);    fifo32_put(fd_ctl_task->fifo,data);
   io_sti();    io_sti();
 + 
   return;    return;
 }  }
Line 164: Line 164:
-・・・だめだ。これではHariMainはtask_fdctlを知っているが、呼び出したタスク(コンソールタスク)はこれを知らない。やっぱ、グローバル関数化かなぁ・・・ -・・・だめだ。これではHariMainはtask_fdctlを知っているが、呼び出したタスク(コンソールタスク)はこれを知らない。やっぱ、グローバル関数化かなぁ・・・
 +
 +
 +うーん。そうか。とにかくFDタスクに変数としてFIFOを渡さないといけないのかな???
 +FDタスクはタスクだから、とにかく一度でも動かないと初期化も定義もしないわけだし・・・
 +
 +んんん? まてよ? こういうことかな???
 +-まず、メインルーチンであるHariMain内であるFIFO(じゃ、FIFO_Aとする)を定義。
 +-同じくそれをHariMain内で初期化。HariMain内ではごく普通に扱えるFIFOが1個できる。
 +-FDタスクを初期化。しかし、例の方法で「パラメータ」を渡せるタイプのタスクにする。(task_fd_main(int *FIFO)とか
 +-FDタスクを走らせる(task_run)する前に、この*fifo を FIFO_Aに当て込む。(例のスタックを使うというおかしな方法で渡す)
 +-HariMain側では、単にFIFO_Aにputすれば、それがFDタスクへの指令になる
 +-fd_task内でもこのタスクを読みこんでループ動作から分岐して作業を行う