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

V30用ソフトとは?

そこそこ古い型のPC98には8086をNECが高速にして拡張までしてしまったμPD70116、通称V30というCPUが載っています。
独自に拡張してしまった為にの286以降とは拡張された機械語が指す命令が異なり、結果として互換性に欠陥があるということで有名です。
今回はそんなV30用プログラムは作れるか、と言うことを軽く試してみました。
実機は持ってないので、V30もエミュレートしているらしいnp2がテスト環境です。

必要なもの

the Macroassembler AS
V30プログラマーズリファレンスかそれに類する資料

the Macroassembler ASについて

the Macroassembler ASはいろいろなCPUに対応したアセンブラです。
V30にも対応していますが、COMプログラムしか作れない、MASMと一部互換性がない、日本語の解説が少ない、などの難点があります。
(Z80にも対応しているので、PC88用のソフトも作れそうです。beep音プログラムは作れました。)
MASMとの一番の違いはmov si,offset test がmov si,testで書かなければいけない、と言う所でしょう。
他にもSEGなど便利な演算子類が使えなかったり自分でセグメントとか初期化をする必要があったりとか、色々面倒なのでPC98用ソフトを作る、と言う観点では全くオススメできません。
V30を速い8086として使えば互換性問題も起きませんし、無難ですし、JWASM使えますし。
しかし、V30専用プログラム、という響にロマンを感じる人もいるかもしれませんので、強引に使ってみました。

「TEST」を表示するサンプル

以下のコードをV30.txtに入力して下さい。
※wikiの都合で抜いていますが、「start:」と「TX」以外の行はタブを入れて下さい。
セグメント周りのちょっとした所以外は基本的にはMASMのx86用と同じです。
ただ、ah=09hでint 21hを呼ぶ際にset1というV30の命令を使ってahを09にしています。
この変更でV30用プログラムになり、np2のVMモードでは動きますが、VXモードやT98などでは正常に動きません。

SEGMENT code
org 100h
ASSUME DS:data,CS:code,ES:data
start:
mov ax,cs
mov ds,ax

mov dx, TX
mov ax,0
mov cl,0
set1 ah,cl
mov cl,3
set1 ah,cl
int 21h

mov ah,4Ch
int 21h

TX db "TEST$"

END start

アセンブルの仕方

the Macroassembler ASのbinフォルダから以下の物を作業フォルダにコピーするか、パスを通しておくかして下さい。
as.msg asw.exe cmdarg.msg ioerrs.msg p2bin.exe p2bin.msg tools.msg

⊆,飽焚爾瞭睛討離謄ストファイルを作成し、拡張子を変えて.batファイルを作成しましょう。
asw V30.txt -CPU V30
p2bin V30.p V30.com -r $-$
pause

作った.batをクリックして作業完了です。

aswがアセンブラ本体で、-CPU以下でCPUを指定できます。(-CPU Z80でZ80になったりします)
p2binは.comファイルを作成します。
単純に作ると32KBのファイルになってしまいますが、-r $-$で必要な範囲のみのファイルになります。

ディスクイメージに入れて実行すればTESTの文字が表示されるはずです。

その他注意

the Macroassembler ASのSEGMENT関係は付属のドキュメントを読んで頂くとして、とりあえずの注意点を。
V30ではCRL1 rr,num、というような基本の書式の他に、CLR1 CYでフラグクリア、という別のオペランド数の書式がある事があります。
で、フラグをクリアしたりセットても大丈夫だろうと無駄に特殊版を使おうとした所、アセンブラが認識してくれませんでした。
他にもこういうバグっぽい所がある可能性があるので、the Macroassembler ASを使う場合には注意した方が良いと思います。


今回はなかなか誰得な記事だったのではと思いますが、根本的にこのwikiとか親サイトとかって誰得追求の場ですから、と言い訳をしておきます。

Menu

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