たなしょのメモ

日々勉強していることをつらつらと

2020-05-01から1ヶ月間の記事一覧

OS作成奮闘記day30

キー入力をするためのAPIを作成します。 console.c void console_task(struct SHEET *sheet, unsigned int memtotal) { struct TASK *task = task_now(); struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; int i, fifobuf[128], *fat = (int *) memm…

OS作成奮闘記day29

本では23日目になりました。 まずはmallocを作ってみます。 console.c int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax) { int ds_base = *((int *) 0xfe8); struct TASK *task = task_now(); struct CONSOLE *cons =…

OS作成奮闘記day28

アプリを強制終了させるように改造してみましょう。 Makefile bug2.bim : bug2.obj Makefile $(OBJ2BIM) @$(RULEFILE) out:bug2.bim map:bug2.map bug2.obj bug2.hrb : bug2.bim Makefile $(BIM2HRB) bug2.bim bug2.hrb 0 bug3.bim : bug3.obj Makefile $(OB…

OS作成奮闘記day27

本で22日目に突入です。 OSを攻撃してみてさらに改善できる場所を探してみましょう。 Makefile crack3.hrb : crack3.nas Makefile $(NASK) crack3.nas crack3.hrb crack3.lst crack4.hrb : crack4.nas Makefile $(NASK) crack4.nas crack4.hrb crack4.lst cr…

OS作成奮闘記day26

さらにOSのセキュリティを強化したいと思います。 bootpack.h void load_tr(int tr); void asm_inthandler0d(void); naskfunc.nas GLOBAL _memtest_sub GLOBAL _farjmp, _farcall GLOBAL _asm_hrb_api, _start_app EXTERN _inthandler20, _inthandler21 EXTE…

OS作成奮闘記day25

本では21日目に突入しました。 文字列表示APIを作成します。 console.c int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline) { struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; struct FILEINFO *finfo; struct SEGMENT_DESCRIPTOR *gdt =…

OS作成奮闘記day24

1文字表示させるAPIを作っていきます。 naskfunk.nas GLOBAL _io_hlt, _io_cli, _io_sti, _io_stihlt GLOBAL _io_in8, _io_in16, _io_in32 GLOBAL _io_out8, _io_out16, _io_out32 GLOBAL _io_load_eflags, _io_store_eflags GLOBAL _load_gdtr, _load_idtr …

OS作成奮闘記day23

bootpack.cがながくなりすぎてしまったのでソースの整理します。 bootpack.h /* window.c */ void make_window8(unsigned char *buf, int xsize, int ysize, char *title, char act); void putfonts8_asc_sht(struct SHEET *sht, int x, int y, int c, int b…

OS作成奮闘記day22

memコマンドを実装したいと思います。 bootpack.c void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; struct SHTCTL *shtctl; char s[40]; struct FIFO32 fifo, keycmd; int fifobuf[128], keycmd_buf[32]; int mx, my, i,…

OS作成奮闘記day21

コンソール画面のカーソルを点滅させてみます。 bootpack.c void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; struct SHTCTL *shtctl; char s[40]; struct FIFO32 fifo, keycmd; int fifobuf[128], keycmd_buf[32]; int m…

OS作成奮闘記day20

本書ではday17にはいりました。 アイドルタスクを作るところから始めたいと思います。 mtask.c void task_idle(void) { for (;;) { io_hlt(); } } struct TASK *task_init(struct MEMMAN *memman) { int i; struct TASK *task, *idle; struct SEGMENT_DESCRI…

OS作成奮闘記day19

引き続き処理のスピードを上げていきます。 fifo.c int fifo32_put(struct FIFO32 *fifo, int data) /* FIFOへデータを送り込んで蓄える */ { if (fifo->free == 0) { /* 空きがなくてあふれた */ fifo->flags |= FLAGS_OVERRUN; return -1; } fifo->buf[fif…

OS作成奮闘記day18

マルチタスクにスリープ機能をつけてみたいと思います。 bootpack.h /* fifo.c */ struct FIFO32 { int *buf; int p, q, size, free, flags; struct TASK *task; }; void fifo32_init(struct FIFO32 *fifo, int size, int *buf, struct TASK *task); int fif…

OS作成奮闘記day17

さらにマルチタスクを進化をさせようと思います。 bootpack.h /* mtask.c */ extern struct TIMER *mt_timer; void mt_init(void); void mt_taskswitch(void); mtask.c /* マルチタスク関係 */ #include "bootpack.h" struct TIMER *mt_timer; int mt_tr; vo…

OS作成奮闘記day16

今回はタスクBに一回切り替えた後またタスクAに切り替える処理を作ります。 bootpack.h void taskswitch3(void); naskfunc.nas GLOBAL _taskswitch3, _taskswitch4 _taskswitch3: ; void taskswitch3(void); JMP 3*8:0 RET bootpack.c void task_b_main(void…

OS作成奮闘記day15

今回も過去のソースコードを使っての動作検証です。 今回はharib10hのソースコードをしようしています。 bootpack.h /* timer.c */ #define MAX_TIMER 500 struct TIMER { struct TIMER *next; unsigned int timeout, flags; struct FIFO32 *fifo; int data;…

OS作成奮闘記day14

割り込み処理をさらに短くしていきます。 線形リストを作成します。 bootpack.h struct TIMER { struct TIMER *next; unsigned int timeout, flags; struct FIFO32 *fifo; int data; }; struct TIMERCTL { unsigned int count, next, using; struct TIMER *t…

OS作成奮闘記day13

本でも13日目に突入しました。 今回は文字列表示を簡単にしてbootpack.cのソースコードを簡単にします。 bootpack.c void putfonts8_asc_sht(struct SHEET *sht, int x, int y, int c, int b, char *s, int l); void HariMain(void) { struct BOOTINFO *binf…

OS作成奮闘記day12

さらにチラチラしないように改造したいと思います。 sheets.c /* マウスやウィンドウの重ね合わせ処理 */ #include "bootpack.h" #define SHEET_USE 1 struct SHTCTL *shtctl_init(struct MEMMAN *memman, unsigned char *vram, int xsize, int ysize) { str…

OS作成奮闘記day11

ウィンドウを出してみたいと思います。 bootpack.c void make_window8(unsigned char *buf, int xsize, int ysize, char *title); void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], keybuf[32], mousebuf[128…

OS作成奮闘記day10

今日はソースコードを少し簡略化してみたいと思います。 bootpack.h /* sheet.c */ #define MAX_SHEETS 256 struct SHEET { unsigned char *buf; int bxsize, bysize, vx0, vy0, col_inv, height, flags; struct SHTCTL *ctl; }; struct SHTCTL { unsigned c…

OS作成奮闘記day9

9日目です。 前回最後に画面が真っ暗になってしまった件ですが、解決することができました。 理由はmemory.cに誤字があったことが理由でした。 しょうもない理由でした。書き直したmemory.cがこちらになります。 memory.c /* メモリ関係 */ #include "bootpa…

OS作成奮闘記day8

開発初めて8日目になりました。 1週間立ちましたね。 今日はマウスカーソルを動かすところから作っていきたいと思います。 bootpack.c void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256], keybuf…

OS作成奮闘記day7

さらにマウスカーソルを動かす準備をしていきます。 PICの初期化を実施します。 int.c #include "bootpack.h" void init_pic(void) /* Initialize pic */ { io_out8(PIC0_IMR, 0xff ); io_out8(PIC1_IMR, 0xff ); io_out8(PIC0_ICW1, 0x11 ); io_out8(PIC0_I…

OS作成奮闘記day6

割り込み命令を作るために、GDT/IDTから作成していきます。 bootpack.c struct SEGMENT_DESCRIPTOR { short limit_low, base_low; char base_mid, access_right; char limit_high, base_high; }; struct GATE_DESCRIPTOR { short offset_low, selector; char…

OS作成奮闘記day5

文字を出力させるためにbootpack.cを修正ます。 今回はAを出します。 void io_hlt(void); void io_cli(void); void io_out8(int port, int data); int io_load_eflags(void); void io_store_eflags(int eflags); void init_palette(void); void set_palette(…