質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

3249閲覧

VESA画面モードについて

退会済みユーザー

退会済みユーザー

総合スコア0

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2015/08/17 05:43

編集2015/08/17 12:26

原因わかりませんが、仮想OSの違いによって出力結果が全く違います。
どうやって直せるのか解説など宜しくお願いします。

【仮想OS】
Oracle VM VirtualBox
VMware Workstation

【現状】
※例え:画面モード 0x011B (1280x1024x32)
Oracle VM VirtualBoxの場合、表示部分は問題ないが、画面サイズの縦横が逆になっている
VMware Workstationの場合、画面サイズと表示が全く違う

【スクリーンショット】
Oracle VM VirtualBox
イメージ説明
VMware Workstaion
![イメージ説明

【一部ソース】
テストとして、色を適当に出力するようになっております。

Assembly

1 2CODE_DESC EQU 0x08 3DATA_DESC EQU 0x10 4VIDEO_MODE_NUM EQU 0x011B 5VGA_MODE EQU 0x0013 6 7VMODE EQU 0x0FE0 8COLOR EQU 0x0FE2 9MEMORY_MODEL EQU 0x0FE3 10SCRN_X EQU 0x0FE4 11SCRN_Y EQU 0x0FE6 12WINDOW_A_OFFSET EQU 0x0FE8 13WINDOW_B_OFFSET EQU 0x0FEA 14ONE_LINE_VRAM_BYTES EQU 0x0FEC 15VRAM EQU 0x0FF0 16VRAM_OUT_SCRN_OFFSET EQU 0x0FF4 17VRAM_OUT_SCRN_SIZE EQU 0x0FF8 18 19 20[BITS 16] 21 22ORG 0xC200 23 24JMP OS 25 26%include "VGA.inc" 27%include "GDT.inc" 28%include "A20.inc" 29 30OS: 31 CLI 32 ;初期化 33 XOR AX, AX 34 XOR BX, BX 35 XOR CX, CX 36 XOR DX, DX 37 MOV DS, AX 38 MOV ES, AX 39 MOV AX, 0x9000 ; スタックポインタを0x0009FFFFに設定する 40 MOV SS, AX 41 MOV SP, 0xFFFF 42 STI 43 ;VESA詳細取得 44 MOV AX, 0x9000 45 MOV ES, AX 46 MOV DI, 0 47 MOV AX, 0x4F00 48 INT 0x10 49 CMP AX, 0x004F 50 JNE .VGA 51 52 MOV AX,[ES:DI+4] 53 CMP AX, 0x0200 54 JB .VGA 55 56 ;VESA画面モード情報取得 57 MOV CX, VIDEO_MODE_NUM 58 MOV AX, 0x4F01 59 INT 0x10 60 CMP AX, 0x004F 61 JNE .VGA 62 63 ;VESA画面モード設定 64 MOV BX, VIDEO_MODE_NUM 65 MOV AX, 0x4F02 66 INT 0x10 67 68 ;画面モード情報保持 69 MOV SI, DI 70 MOV DX, VIDEO_MODE_NUM; 現在の画面モード 71 MOV WORD [VMODE], DX 72 MOV DX, WORD [ES:SI+0x08]; Window A 開始アドレス 73 MOV WORD [WINDOW_A_OFFSET], DX 74 MOV DX, WORD [ES:SI+0x0A]; Window B 開始アドレス 75 MOV WORD [WINDOW_B_OFFSET], DX 76 MOV DX, WORD [ES:SI+0x10]; 1ラインのVRAM上のバイト数 77 MOV WORD [ONE_LINE_VRAM_BYTES], DX 78 MOV DX, WORD [ES:SI+0x12]; X 解像度 79 MOV WORD [SCRN_X], DX 80 MOV DX, WORD [ES:SI+0x14]; Y 解像度 81 MOV WORD [SCRN_Y], DX 82 MOV DL, BYTE [ES:SI+0x19]; カラービット 83 MOV BYTE [COLOR], DL 84 MOV DL, BYTE [ES:SI+0x1B]; メモリモデル 0x00=テキスト 85 MOV BYTE [MEMORY_MODEL], DL; 0x01=CGAグラフィック 86 ; 0x02=Hercules グラフィック 87 ; 0x03=EGA 16 カラー 88 ; 0x04=Packed ピクセル (256パレット) 89 ; 0x05=チェーンなしの256カラーモード 90 ; 0x06=15bit, 16bit, 24bit ダイレクトカラー 91 ; 0x07=YUV 92 MOV EDX, DWORD [ES:SI+0x28]; VRAMベースアドレス 93 MOV DWORD [VRAM], EDX 94 MOV EDX, DWORD [ES:SI+0x2C]; 画面外の先頭VRAMオフセット 95 MOV DWORD [VRAM_OUT_SCRN_OFFSET], EDX 96 MOV DX, WORD [ES:SI+30]; 画面外のVRAMのサイズ(KB単位) 97 MOV WORD [VRAM_OUT_SCRN_SIZE], DX 98 99 JMP .VIDEO_After 100 101 ;VGA画面モード設定 102 .VGA: 103 CALL SET_VIDEO_VGA 104 105 ;画面モード情報保持 106 MOV WORD [VMODE], 0x0013;現在の画面モード 107 MOV WORD [SCRN_X], 320 108 MOV WORD [SCRN_Y], 200 109 MOV BYTE [COLOR], 8 110 MOV DWORD [VRAM], 0x000A0000 111 112 .VIDEO_After: 113 MOV AX, 0xF002 114 INT 0x16 115 CALL InstallGDT;GDT設定 116 CALL Enable_A20;A20以上有効 117 118 CLI 119 MOV EAX, CR0 120 OR EAX, 1 121 MOV CR0, EAX 122 JMP CODE_DESC:OS32 123 124fin: 125 HLT 126 JMP fin 127 128[BITS 32] 129 130OS32: 131 ;初期化 132 MOV AX, DATA_DESC; DATA_DESCには0x10が入っています 133 MOV SS, AX; 以下データセグメントセレクタを入れています 134 MOV ES, AX 135 MOV DS, AX 136 137 MOV ESP, 0x90000; スタックポインタも初期化します 138 139 XOR AX, AX 140 MOV FS, AX 141 MOV GS, AX 142 143 144 MOV EDX, DWORD [VRAM] 145 MOV EDI, EDX 146 XOR EAX, EAX 147 MOV ECX, EAX 148 MOV EDX, EAX 149 150 ;X*3+Y*(X*3), 3=RGB 0x00RRGGBB 151 152 MOV AX, WORD [SCRN_X] 153 MOV CX, 3 154 MUL CX 155 MOV CX, AX 156 157 MOV AX, WORD [SCRN_Y] 158 MUL CX 159 MOV CX, DX 160 SHL ECX, 16 161 MOV CX, AX 162 MOV EDX, ECX 163 164 XOR EAX, EAX 165 MOV ECX, EAX 166 MOV EAX, 0x00000000 167 168 .looper: 169 MOV DWORD [EDI+ECX], EAX 170 ADD ECX, 3 171 172 CMP ECX, EDX 173 JBE .looper 174 XOR ECX, ECX 175 ADD EAX, 273105 176 CMP EAX, 0x00FFFFFF 177 JBE .looper 178 XOR EAX, EAX 179 JMP .looper 180 181 JMP fin32 182 183fin32: 184 HLT 185 JMP fin32

汚いソースコードですが、どうか宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ビデオモードのサイズをより小さいの方にしたら、問題なくできました。
VMwareは32bit/24bitは何故か使えませんが、8bitモードにして、カラーパレットを設定したら、問題なくでました。回答してくれた方、自己解決してしまい申し訳ございません。

投稿2015/09/01 12:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VirtualBoxの方しか見つけられなかったですが、仮想OSの方にVESAの解像度は設定されていますか?

参考: 9.8. Advanced display configuration 9.8.1. Custom VESA resolutions

投稿2015/08/17 16:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問