Windows上でJWASM(フリーのMASM6互換アセンブラ)と98エミュを使ってのプログラム作成に関するエトセトラ。また、PC-98プログラミング関係の書籍紹介とか自作ソフトの進捗とかも。

文字表示をお手軽に行う場合、エスケープシーケンスを含む文字列をah=9のint21hで表示、という横着をすることがあります。
で、その一部の文字の色だけを随時変えたい場合、再度書き換えるのは処理が重かったり面倒なので、T-VRAMのアトリビュートエリアに設定を出力すると楽です。
(こいこいのconfigでマウスと組み合わせて使う処理とかの時使ってます。)

詳しい設定はプログラマーズBible辺りを見ていただけばいいですが、エスケープシーケンスとX,Y位置の設定方法がちょっと違うのでメモ書き。
エスケープシーケンスの場合、1Bh,"[16;47H" はX=47文字目、Y=16行目にカーソル移動、というエスケープシーケンスです。(色々種類がありますが、MS-DOS関連書籍なら大抵載っています。)

さて、この位置に対応するT-VRAMアドレスを考えると、書籍ではセグメントを0A000h(文字)か0A2000h(文字色とか)にしてオフセット=X*2+Y*160、と書かれています。
しかし、ちょっと考えればわかりますが、このXとYは0から開始しているのに対し、エスケープシーケンスの方は1から開始です。
ということで上記の表示位置からN文字表示した場合、15*160+47*2のオフセットから書き込めばOKということになります。
ふつうは文字表示もT-VRAMに直接書き込むのでしょうが、横着をしたい場合にはこんな手もあるよということで。

Menu

管理人/副管理人のみ編集できます