• 締切済み

DOS BIOSビデオモードの設定

DOS上で画面を80×25から80×50変更するプログラムを作成したいのですが、INIT10hのレジスタに何を設定するればいいのか教えていただけないでしょうか?int86やint86xを使って説明していただけると助かります。

みんなの回答

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

参考になりそうなページを貼ってみます。 INT 10 - VIDEO - SET VIDEO MODE http://www.delorie.com/djgpp/doc/rbinter/id/74/0.html Values for video mode: http://www.delorie.com/djgpp/doc/rbinter/it/10/0.html

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

「コマンドプロンプトのショートカットを作成してプロパティ-レイアウトを設定する」では駄目なのですか?

TatsCat
質問者

お礼

返信方法を間違えてしまい誠にすみません。 回答ありがとうございます。 説明不足で誠にすみません。プログラムは、USBブートでMS-DOSが起動した状態で動作させます。その状態でプロパティ-レイアウトの設定が出来るのでしょうか? 以下はビデオモードの設定を読み込んでいるものですが、流用してモードを80×50に変更したいと考えております。 void far *CRT_GetTextVramAddress( void )/* 疑似ビデオ・バッファ アドレス の取得*/ { union REGS regs; struct SREGS segs; int VideoMode; /* ビデオ・モード */ regs.h.ah = 0x0f; /* ビデオ情報の取得 */ int86( 0x10, &regs, &regs ); VideoMode = regs.h.al & 0x7f; /* ビデオ・モード */ if ( VideoMode == 0x03 ) { /* ビデオ・モード == 3 ? */ segs.es = 0xb800; regs.x.di = 0; /* es:di = b800:0000 */ } else if ( VideoMode == 0x70 ) { /* ビデオ・モード == 70h ? */ segs.es = regs.x.di = 0; /* es:di = 0000:0000 */ } else return( NULL ); regs.h.ah = 0xfe; /* 疑似ビデオ・バッファ アドレス の取得(日本語テキストモードの擬似テキストバッファアドレス) */ int86x( 0x10, &regs, &regs, &segs ); return( MK_FP( segs.es, regs.x.di ) ); }

TatsCat
質問者

補足

回答ありがとうございます。 説明不足で誠にすみません。プログラムは、USBブートでMS-DOSが起動した状態で動作させます。その状態でプロパティ-レイアウトの設定が出来るのでしょうか? 以下はビデオモードの設定を読み込んでいるものですが、流用してモードを80×50に変更したいと考えております。 void far *CRT_GetTextVramAddress( void )/* 疑似ビデオ・バッファ アドレス の取得*/ { union REGS regs; struct SREGS segs; int VideoMode; /* ビデオ・モード */ regs.h.ah = 0x0f; /* ビデオ情報の取得 */ int86( 0x10, &regs, &regs ); VideoMode = regs.h.al & 0x7f; /* ビデオ・モード */ if ( VideoMode == 0x03 ) { /* ビデオ・モード == 3 ? */ segs.es = 0xb800; regs.x.di = 0; /* es:di = b800:0000 */ } else if ( VideoMode == 0x70 ) { /* ビデオ・モード == 70h ? */ segs.es = regs.x.di = 0; /* es:di = 0000:0000 */ } else return( NULL ); regs.h.ah = 0xfe; /* 疑似ビデオ・バッファ アドレス の取得(日本語テキストモードの擬似テキストバッファアドレス) */ int86x( 0x10, &regs, &regs, &segs ); return( MK_FP( segs.es, regs.x.di ) ); }

関連するQ&A

  • VBからDOS画面に表示されている文字を読み取りたい

    どなたかご存知の方教えてください。 あるプログラムがDOS画面で処理され正常に処理されたら「正常に処理されました。何かKEYを押してください」とDOSの画面で止まってしまいます。これに対応して予め起動したプログラムからこのDOS画面に向けて改行KEYなどを送って先に進めることは出来る様になったのです。 ですが、エラー時の対応が出来ず困っています。 そのDOSで処理するプログラムはエラーの時、ログの出力などは無いようで、ただ画面に「エラーが発生しました。xxxxが原因です。何かKEYを押すと終了します」と表示して停止します。 このDOS画面に表示されたメッセージを読み取って処理を継続するかどうかを判断したいのですが、どの様にすればよいのでしょうか? そのプログラムはメーカ作成のもので、こちらから変更依頼しても受け入れられるようなものではありません。 WindowsXpSP2でVB(ver6.0)による開発です。 WIN32のAPI使用でも結構です。 よろしくお願いいたします。

  • 通常使うプリンターの設定変更をDOS?命令で

    プリンターの設定変更画面ではなく、DOS命令のような、BATファイル実行で、 通常使うプリンター設定を変更したい。

  • dos.hについて

    今、私の使っているパソコンはOSがwindowsXPで、コンパイラはBorlandBCCです。 大学の図書館で借りた、かなり古いと思われる(平成4年に第1刷発行で、この本自体は平成5年の第4刷発行)c言語のプログラムの本を読んでいるのですが、その中のグラフィックを扱う部分で、 <dos.h> のヘッダの中に outp() outport() int86() の定義がされている とあるのですが、本に書いてある通りにコーディングしてみても<dos.h>をインクルードしても、これらの関数は定義されていないみたいなんです。 これは本が古すぎて、現在は変わっているからなんでしょうか? また、変わっているなら、これらの関数は、現在はどんな関数と置き換わっているんですか? ちなみに、私はOSに関しての知識はそれ程持ち合わせてはおりませんので。 こんな私に誰かご教授お願いいたします。

  • x64のレジスター設定について

    電源を入れたときにユーザ選択画面が表示されないまま起動が完了します。 起動時の動作を決めるレジスターの設定が必要なのでしょうが、x86と同じではだめのようです。 x64では、どのように設定すれば良いのか教えてください。或いはレジスター設定のマニュアルが有れば知りたいのですが・・・

  • 暗号利用モードの実装

    C言語でAESのEBCモードを実装しようとしています。 unsigned char key[32]; int w[60]; int data[NB]; int nk; int nr; int data2[32]; int Cipher(int *); int invCipher(int *); void encryptEBC(int *,int n); void decryptEBC(int *,int n); main(){ unsigned char keys[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; unsigned char iv[]={0xcb,0x70,0x05,0x9e,0x27,0x2f,0x4e,0xd2, 0xd0,0xbe,0x0b,0x06,0xbf,0x16,0xec,0x5a}; unsigned char init2[]={'1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0', '1','2','3','4','5','6','7','8','9','0',0x0a}; int isize = sizeof(init2)/sizeof(init2[0]); int dsize2 = sizeof(data2)/sizeof(data2[0]); printf("%d,%d\n",isize,dsize2); FILE *fp; char *fname = "test.txt"; unsigned char init[16]; int i = 0; int c; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } while( (c = fgetc( fp )) != EOF ){ init[i] = c; i = i+1; } fclose( fp ); memcpy(key,keys,16); nk = 4; nr = nk + 6; KeyExpansion(key); memcpy(data,init,16); memcpy(data2,init2,isize); datadump("PLAINTEXT: ",data,16); datadump("KEY: ",key,16); Cipher(data); datadump("Cipher: ",data,16); invCipher(data); datadump("invCipher: ",data,16); printf("\n"); datadump("PLAINTEXT: ",data2,dsize2); encryptEBC(data2,dsize2); datadump("EBCCipher: ",data2,dsize2); decryptEBC(data2,dsize2); datadump("invCipher: ",data2,dsize2); printf("\n"); return 0; } void encryptEBC(int data[],int dsize){ int tmp[16]; int i,j,k; printf("aiu%d\n",dsize); KeyExpansion(key); for (i = 0; i < dsize; i += 16) { memcpy(tmp,&data[i],16); Cipher(tmp); memcpy(&data[i],tmp,16); } } void decryptEBC(int data[],int dsize){ int tmp[16]; int i,j,k; printf("eo%d\n",dsize); KeyExpansion(key); for (i = 0; i < dsize; i += 16) { memcpy(tmp,&data[i],16); invCipher(tmp); memcpy(&data[i],tmp,16); } } このようなプログラムでとりあえず2ブロック分の暗号化、復号を行おうと思っているのですが、1ブロック目しか行えません。 どなたかどこが悪いのかご教授いただけないでしょうか?

  • dosプログラムのショートカットが作れません

    Win7(64ビット版) で昔作成したdosプログラムを実行したいのですが、うまく実行できません。 XPモードはインストールしてありません。 検索したところ、ショートカットを作成し、[別メモリ領域で実行する] チェック ボックスをオンにすればよいとの記事を見つけました。 http://technet.microsoft.com/ja-jp/windows/gg410655 そこで、ショートカットを作成しようとしたところでつまづいています。 ショートカットの作成方法 あるいは、DOSプログラムの実行方法をお教えください。 質問が前後しますが、XPモードをインストールしないとDOSプログラムの実行は無理なのでしょうか? なお実行したいDOSプログラムは、標準入力のデータを処理して標準出力に出す、いわゆるフィルタープログラムです。 100行程度のプログラムなので、最悪、Win7環境で再コンパイルして、Win7用のプログラムを作って対応しますが、可能ならDOSプログラムをそのまま使いたいと思っています。

  • BIOS設定画面

    ノートパソコン東芝G8/X20PDEW2の取扱説明書をなくしてしまいBIOS設定画面の出し方がわかりません。 ご指導お願いします

  • Bios設定変更後画面が映らない

    はじめて質問するので至らぬ点もあるかと思いますが よろしくお願いします。 Sotec PCstationA4200AVRにてPCIにビデオカードを増設し BIOSの設定を変更したところ画面が映らなくなったのですがなんとか元に戻す方法はないでしょうか? 変更した箇所は以下の三つです System share memory sizeを16MB→4MBに変更 AGP Auto CaribrationをEnabled→Disabledに変更 Init Display FirstをAGP→PCI slot onlyに変更 どれを変更したのが悪かったのかもお教えいただけるとうれしいです。 それではよろしくお願いします。 なにか足りない点がありましたら追記いたします。

  • BIOS設定について

    FF Benchでスコアーが2400しかでません。 いろいろ調べてみた結果、AGP周りのBIOS設定が悪いことが分かりましたが 設定を変更しても速くなりません。 多分、設定が間違っていると思うので、最適な設定を教えてください。 環境は Aopen AK77-8X MAX Athlon 1800XP+ GeForce4Ti4200 8X DDR PC2100 512MB よろしくお願いします

  • 【DOSコマンド】バックグラウンドでの実行

    お世話になります。 Windows環境にて、DOSのコマンドから、とあるプログラムを起動したいと考えております。 例えば、『c:\hidemaru.exe (改行) exit;』 という感じで。しかし、このままではプログラムを実行中はDOS画面が起動したままになってしまいます。 そこでプログラムは起動し、DOS画面は閉じる、といった書き方をご存知の方はいらっしゃいますでしょうか? よろしくお願いいたします。

専門家に質問してみよう