たなしょのメモ

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

2020-01-01から1年間の記事一覧

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(…

OS作成奮闘記day4

今回は色をカラフルにしてあげるところからスタートします。C言語をゴリゴリ実装していくのでとても楽しみです。 bootpack.c 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…

ansibleについての勉強(環境構築)

業務で使うことになったので大急ぎで勉強してます。 まずは環境を構築をするところをから始めたいと思います。 (筆者の環境はcentosです) virtualenv導入 ansibleにはpython2.6か2.7のインストールが必須なので、virtualenvで疑似環境を作ってそこでansible…

OS作成奮闘記day3

アセンブラソースコードをいじりました。 ; hello-os ; TAB=4 ORG 0x7c00 ; FAT12 foramt floppy JMP entry DB 0x90 DB "HELLOTPL" DW 512 DB 1 DW 1 DB 2 DW 224 DW 2880 DB 0xf0 DW 9 DW 18 DW 2 DD 0 DD 2880 DB 0,0,0x29 DD 0xffffffff DB "HELLO-OS " D…

OS作成奮闘記day2

二日目もアセンブラを書くところからスタートです。 MOV命令やHLT命令などを詳しく学習しました。 以下はその際記載したソース ; hello-os ; TAB=4 ORG 0x7c00 ; FAT12 foramt floppy JMP entry DB 0x90 DB "HELLOTPL" DW 512 DB 1 DW 1 DB 2 DW 224 DW 2880…

OS作成奮闘記day1

今日から「30日でできる! OS自作入門」やっていきます。楽しみ! www.amazon.co.jp 前説を読んでやる気を高めました。 バイナリエディタをダウンロードしてきました。 ここはリンク切れなので、こっちでダウンロードできました。 フロッピーがなかったのでこ…

C - Distinct or Not

はじめに たなしょです。 C問題解けました。 やっぱり嬉しいですね 問題文 atcoder.jp 考え方 入力した数だけlong long型の配列を取得してデータを入れます。 int a; cin >> a; vector<ll> data(a); for (int i = 0; i < a; i++) { cin >> data[i]; } 昇順でソー</ll>…

B - I miss you...

はじめに たなしょです。 I miss you よく洋楽のタイトルでみますね。 問題文 atcoder.jp 考え方 入力されたstring型のサイズを取得して配列を作ります。 あとは文字列のサイズ分、配列に文字'x'を詰め込みます。 そして最後は文字列のサイズ分出力させてあ…

A - Remaining Balls

はじめに たなしょです。 最近現場でreact.jsを使ってフロントエンドを作っています。 なかなかに楽しいですね。 問題文 atcoder.jp 考え方 文字列3つと数値2つ(a,b)を入力させます。 1文字列目と3文字列目が一致してたらaをデクリメント。 2文字列目と3文…

C - Poll

はじめに たなしょです。 うーん。ほろ苦い敗戦です。 ここ最近C問題もクリアしてきただけに悔しいです。 問題文 atcoder.jp 考え方 連想配列を作成して連想配列に文字列を入れていきます。 map<string, int> m; int n; cin >> n; for (int i = 0; i < n; i++) { string s</string,>…

B - Papers, Please

はじめに たなしょです。 最近FGOにはまっています。 楽しいですね。 問題文 atcoder.jp 考え方 まず偶数の数をカウントして、次に3か5で割り切れる数をカウントをする。 for (int i = 0; i

A - Poor

はじめに たなしょです。 お久しぶりです!! 最近建ても楽しく仕事ができています! 問題文 atcoder.jp 考え方 a==bかつb==cのパターンと a==bまたはa==cまたはb==cのパターンと それ以外のパターンを記載してあげればOK。 if ((a == b) && (b == c)) { cou…