OS学習メモ8(30日OS自作入門8日目)
8日目、今度こそマウスを動かす。
ここまでやってきてマウスからのデータを受け取れるようになったので、あとはそれを解読し、それにあわせてカーソルを動かせばよいだけ。ここからは本に沿ってやっていく。
i = fifo8_get(&mousefifo); io_sti(); if (mdec->phase == 0) { if (i== 0xfa) { mdec->phase = 1; } return 0; } if (mdec->phase == 1) { mdec->buf[0] = i; mdec->phase = 2; return 0; } if (mdec->phase == 2) { mdec->buf[1] = i; mdec->phase = 3; return 0; } if (mdec->phase == 3) { mdec->buf[2] = i; mouse->phase=1 sprintf(s, "%02X %02X %02X", mouse_dbuf[0], mouse_dbuf[1], mouse_dbuf[2]); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 32 + 8 * 8 - 1, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); }
マウスからデータが3バイト送られてくるので3バイトたまった時点で画面に表示。
途中経過
こんな感じで解読はできた。
あとは表示部分を変えていく。
i = fifo8_get(&mousefifo); io_sti(); if (mouse_decode(&mdec, i) != 0) { //マウスを消す boxfill8(binfo->vram, binfo->scrnx, COL8_00FF00, mx, my, mx + 15, my + 15); mx += mdec.x; my += mdec.y; if (mx < 0) {mx = 0;} if (my < 0) {my = 0;} if (mx > binfo->scrnx - 16) {mx = binfo->scrnx - 16;} if (my > binfo->scrny - 16) {my = binfo->scrny - 16;} putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); //マウスを描く }
カーソルがあった位置に背景色を書き込んでマウスカーソルを消して再度カーソルを描くという内容(↓の画像ではなんとなく色を変えてみたのでお絵描きみたいになっている)
見て分かる通り、下側の部分もboxfill関数で作ったただの四角形なので、カーソルを持っていくと上書きされてしまう。この問題は10日目から直していく。
簡単だけどこの辺で。