*$who
 どこかで何かしている人。
 Linuxデスクトップ環境はKDE Plasma Desktopを気に入ってます。
 RustでOS書こうとしている人。
 進捗が出ない。
 *詳しくはここ
 https://mnas.info/blog
 - https://pg-mana.net/aboutme.html
 - https://pg-mana.net/blog
 *OS開発中に発見したこと
 **16bitでBIOS1字文字表示で文字色を変えたい
 helloosを少し改造
  ; hello-os
  ; TAB=4
 		ORG		0x7c00			; このプログラムがどこに読み込まれるのか
  ; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述
 		JMP		entry
 		DB		0x90
 		DB		"HELLOIPL"		; ブートセクタの名前を自由に書いてよい(8バイト)
 		DW		512				; 1セクタの大きさ(512にしなければいけない)
 		DB		1				; クラスタの大きさ(1セクタにしなければいけない)
 		DW		1				; FATがどこから始まるか(普通は1セクタ目からにする)
 		DB		2				; FATの個数(2にしなければいけない)
 		DW		224				; ルートディレクトリ領域の大きさ(普通は224エントリにする)
 		DW		2880			; このドライブの大きさ(2880セクタにしなければいけない)
 		DB		0xf0			; メディアのタイプ(0xf0にしなければいけない)
 		DW		9				; FAT領域の長さ(9セクタにしなければいけない)
 		DW		18				; 1トラックにいくつのセクタがあるか(18にしなければいけない)
 		DW		2				; ヘッドの数(2にしなければいけない)
 		DD		0				; パーティションを使ってないのでここは必ず0
 		DD		2880			; このドライブ大きさをもう一度書く
 		DB		0,0,0x29		; よくわからないけどこの値にしておくといいらしい
 		DD		0xffffffff		; たぶんボリュームシリアル番号
 		DB		"HELLO-OS   "	; ディスクの名前(11バイト)
 		DB		"FAT12   "		; フォーマットの名前(8バイト)
 		RESB	18				; とりあえず18バイトあけておく
  ; プログラム本体
  entry:
 		MOV		AX,0			; レジスタ初期化
 		MOV		SS,AX
 		MOV		SP,0x7c00
 		MOV		DS,AX
 		MOV		ES,AX
  colormode:
 		MOV		AX,0;念のため
 		MOV		AL,0x12
 		INT		0x10
  colorloop:
 		CMP		BL,255
 		JE		fin
 		ADD		BL,	1		; カラーコード
 		MOV		SI,msg
  putloop:
 		MOV		AL,[SI]
 		ADD		SI,1			; SIに1を足す                  
 		CMP		AL,0
 		JE		colorloop
 		MOV		AH,0x0e			; 一文字表示ファンクション
 		INT		0x10			; ビデオBIOS呼び出し
 		JMP		putloop
  fin:
 		HLT						; 何かあるまでCPUを停止させる
 		JMP		fin				; 無限ループ
  msg:
 		DB		"Hello!"
 		DB		0x09			; 改行
 		DB		0
 		RESB	0x7dfe-$	; 0x7dfeまでを0x00で埋める命令
 		DB		0x55, 0xaa
  ; 以下はブートセクタ以外の部分の記述
 		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
 		RESB	4600
 		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
 		RESB	1469432
 
 
 実行すると、いろんな色で「hello!」とでます。
 要はcolormodeで画面のモードを変えているのです。

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS