Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

メモ:「30日でできる!OS自作入門 」4日目

More than 1 year has passed since last update.

C言語からメモリ書き込み
アセンブリに write_mem8という関数を書いて Cから呼び出す形式

16bit モードではメモリインデックスは [CX], [SP]はできなかったが、32bit モードでは [ECX], [ESP] なども使えるとのこと。

EAX, ECX, EDXは自由に使える。

8086, 80186, 286 は 16bit CPU, 386, Pentium .. は 32bit CPU

A - 0xa0000 から 0xaffffに 15番目の色(白)を書くので真っ白が画面ができました。

B - 色を i & 0xff することによってシマシマの模様が出力できました。

スクリーンショット 2018-12-19 22.41.28.png

C は char *p; と宣言して直接書くやつ

D も p = (char*) 0xa0000; と宣言して *(p + i) = i & 0x0f; と書き換えてるだけ

E は p[i] = i & 0x0f; インデックスの使い方; p[i] は配列ではない、だたの表現の違い; a[2] も 2[a]も一緒

F は 16色のpalette の定義

CLI: Clear Interrupt Flag; STI: Set Interrupt Flag
EFLAGS: (15) _ NT IOPL(2) OF DF IF TF SF ZF _ AF _ PF _ CF (0)

C言語では Flags 周りのさわれない

IN/OUTはDeviceと電気信号を受けたり、送ったりするもの

io_in8 は IN AL, DX, in16 は IN AX, DX, in32は IN EAX, DX
io_out8 は OUT DX, AL, out16 は OUT DX, AX, out32 は OUT DX, EAX

PUSHFD: PUSH EFLAGS, POPFD: POP EFLAGS; EAX に FLAGS が入る
(Push Flags DWord, Flags を Stack に押し込む
PUSHFD: MOV EAX, EFLAGS 的な
POPFD: MOV EFLAGS, EAX 的な

G はボックスを作る
320の幅指定して、XとYなめて書き出してるだけ。

スクリーンショット 2018-12-20 1.36.46.png

H はWindowsっぽく四角いものいっぱい作ってるイメージだった

スクリーンショット 2018-12-20 1.40.42.png

達成感はめちゃある!

S-YOU
基本的には備忘録として書いています。 よく誤字脱字があるため、気になる方はご指摘頂けると幸いです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away