2012年01月02日

Visual C++ 2010 Expressへの移行

Visual C++ 6.0 から Visual C++ 2010 Expressへ移行。

直接 VC++ 2010で.dswを開こうとすると、.dspの変換で失敗する。このため、一旦VC++ 2008 で.dswを開いてプロジェクト形式を変換して.slnファイルを生成させ、その後にVC++ 2010で.slnを開く。

ビルドで生成されるexeのファイル名がプロジェクト名(np2)になっているため変更する。プロジェクトの以下の設定を変更する。
構成プロパティ>全般>ターゲット名

以下のとおり変更

vaeg (構成 Releaseの場合)
vaegd (構成 Debugの場合)

DirectX SDK については、最新のJune 2010 についてはddraw.libが廃止されており、VAEGのビルドには利用できない。ひとつ前のFebruary 2010を使う。プロジェクトの以下の設定でDirectX SDKの所在を指定する。

構成プロパティ>VC++ディレクトリ>ライブラリディレクトリ
構成プロパティ>VC++ディレクトリ>インクルードディレクトリ


nasmについては、最新の場合、nasmw.exeが無く、変わりにnasm.exeがある。プロジェクトの設定を変更してnasmw.exeを参照している部分をnasm.exeに変更すれば動くかもしれない。今回は、以前から使っている古いnasm(nasmw.exe)をそのまま利用。

win9x\np2.rc はビルドでエラーとなる。次のとおり変更。
次をコメントアウト

//#include "afxres.h"


その直後に追加
#include
#define IDC_STATIC -1


根拠については未確認。以下を参考にした。
http://ttssh2.sourceforge.jp/manual/ja/reference/develop.txt
posted by Shinra at 23:24| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2008年05月03日

SCSI 4

test unit ready
inquiry
read capacity
mode sense (page=4)
read extended
read extended ←ここまで動いた
request sense
posted by Shinra at 23:25| Comment(1) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2008年04月14日

SCSI 3

reset
select without atn
transfer (command: test unit ready)
transfer (status)
transfer (message)
negate
select without atn
transfer (command: inquiry)
transfer (data)
transfer (status)
transfer (message)
negate
select without atn
transfer (command: read capacity)
transfer (data)
transfer (status)
transfer (message)
negate
select without atn ←ここまで動いた
transfer (command: mode sense)


> フェーズの遷移先もどう決まるのかわからない。

イニシエータ(PC)とターゲット(HDD)との接続が確立した後は、
ターゲットがフェーズも切断も決めるらしい。

selectコマンドは、接続が確立したらCPUに割り込み。
その後、ターゲットからコマンド転送要求があって、割り込み。

transfer infoコマンドは、送信が終わって、ターゲットがフェーズを
次に移して最初にターゲットからREQが来たときにCPUに割り込み。
ただし、message-in フェーズでのtransfer infoコマンドは、
送信が終わったらCPUに割り込み。

イニシエータとターゲット間の通信は、ターゲットがREQを、イニシエータがACKを制御して、REQ上げる->ACK上げる->REQ下げる->ACK下げるで1バイト転送する。よって、データ転送は、転送方向がどちらであれ、ターゲットが開始する。

フェーズは、その他4本の制御線(I/O, C/D, MSG, SEL)で決定され、SEL(接続要求)を除いた3本はターゲットが制御する。フェーズの遷移は、これら3本の値をターゲットが決めた上でREQを上げることによって、イニシエータに通知される(のだろう)。

なんとなくすっきり。
posted by Shinra at 22:38| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2008年04月13日

SCSI 2

> そこまで甘くはないらしい。

PCPLUS.SYSが割り込みを2回期待しているところで、1回しか
発生していない。1回目はSCSIコントローラがコマンド実行を
終了したことによる割り込み。

np2のソースに

ret = scsicmd_select(id);
if (ret & 0x80) {
scsiintr(0x11);
// で retはどーやって割り込みさせるの?

というコメントがあって、割り込みが必要なのにまだ実装できて
いないということを理解。

2回目はHDDからコマンド要求を受信することを契機に発生する割り
込み、らしい。SCSIはHDD側が処理を駆動する仕組みになっている?


np2としては、通常はBIOSレベルでエミュレートしていて、
ハード(SCSIコントローラ)のエミュレーションの処理もあるけれど、
普段は使われていないようだ。

ということで、いろいろ足りなさそうに見える。

CQ出版の書籍と、WD33C93のデータシートと、undocumented 9801とを
眺めてはみたものの、CPU-SCSIコントローラ 間のやりとり、
SCSIコントローラ-HDD間のやりとりのどちらもピンとこない。
返すべきステータスコードと割り込みの発生回数がわからない。
フェーズの遷移先もどう決まるのかわからない。

とりあえずPCPLUS.SYS+SCHD.SYSが動けばいいので、それらの
コードもみながら考えてみることに。

reset
select without atn
transfer (command: test unit ready)
transfer (status)
transfer (message)
negate
select without atn
transfer (command: inquiry)
transfer (data)
transfer (status)
transfer (message)
negate
select without atn ← ここまで動いた
transfer (command: read capacity)


posted by Shinra at 17:53| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2008年04月06日

r080406公開

r080406を公開しました。

主な変更点
・SASI 20Mを利用可能に
・全角キーとして漢字キーを使用

WindowsのALT(右)はこれまでVAの全角キーにマッピングされて
いましたが、GRPHキーに変更しています。

posted by Shinra at 19:30| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

SCSI 1

とりあえずSCSIインタフェースをVAのIOポートに接続。
割り込み番号がIRQ 9でSASIと衝突しているため、IRQ 6に変更。
DMAのチャンネルは・・・DMA転送は実装されていないっぽい。

PCPLUS.SYSは・・・DMAを使う場合はSETDMA.COMで明示的に
設定するので、ということは、DMAなしでも大丈夫そう。

これで動作する・・・?
SCHD.SYSの組み込み中に無限ループ。

そこまで甘くはないらしい。
posted by Shinra at 19:27| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

SASI 4


> 同時に、DSKPRMADR(0077:000B/000C, Disk parameter tableへのポインタ)も
> 設定している。そのテーブルの値から判断すると、
>
>
>タイプ DSKTYPE テクマニの説明 シリンダ ヘッド セクタ
>-------+---------+-------------+--------+------+-------
>0 0 5MB 153 4 33
>1 1 10MB 310 4 33
>4 2 20MB 308 8 33
>6 3 40MB 615 8 33

よくよくテクマニを読んでみると、パラメータも2セットあって、
HDCに送っているのと、BIOSへの入力値チェックや論理セクタ番号
を求めるのに使っているのとで違うようだ。
上記は後者であって、タイプ4の場合にHDCに送っているシリンダ数、ヘッド数はそれぞれ615と4。

緑電子のSASIインタフェース内のROMも確認してみたが同様のテーブルを持っており、タイプ4の場合にシリンダ数、ヘッド数はそれぞれ615と4のように見える。(テーブルの存在まで確認し、どう使われるかまでは未確認。)

>615/4/33→タイプ3
>310/8/33→タイプ4
この修正は取り消し。

new diskで20MBのHDIを作成した場合のシリンダ数、ヘッド数を変更。

posted by Shinra at 19:19| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2008年03月27日

SASI 3

kazさんからご報告をいただいた、20MのSASIドライブが利用できない件。

ポート82Hから、SASI インタフェースボードのディップスイッチの値が読み出せる。

bit7-6: VAのHDD BIOSでは参照していない
bit5-3: 2台目のタイプ
bit2-0: 1台目のタイプ

タイプとしてHDD BIOSが認識するのは、0,1,4,6。
これを読み取って、BIOSのワークエリア DSKTYPE (0077:0009/000A)に
値を設定している


タイプ DSKTYPE テクマニの説明
-------+---------+----------
0 0 5MB
1 1 10MB
4 2 20MB
6 3 40MB


同時に、DSKPRMADR(0077:000B/000C, Disk parameter tableへのポインタ)も
設定している。そのテーブルの値から判断すると、


タイプ DSKTYPE テクマニの説明 シリンダ ヘッド セクタ
-------+---------+-------------+--------+------+-------
0 0 5MB 153 4 33
1 1 10MB 310 4 33
4 2 20MB 308 8 33
6 3 40MB 615 8 33

# テクマニp173 40MBのヘッドの値は間違っている

np2のnew diskで20MBのHDIを作成した場合、310/8/33の設定で作成する。この設定はファイルに記録されており、np2はこの設定から
タイプを求めているが、310/8/33の場合にタイプ3と判断する。
HDD BIOSはこれを認識できないので、PC-Engineから20M SASIを参照できなかった。

615/4/33→タイプ3
310/8/33→タイプ4

に修正。
HDFORMでフォーマットできることは確認。


sasi20m.PNG

# 98側からでもちゃんと認識できるんだろうか・・・

posted by Shinra at 00:50| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2008年01月14日

ROM読み込み状態の確認

動作確認用に頻繁にROMを入れ替えていると、
今どれを使っているかわからなくなったりしたので、
About画面に、ROMがVA1かVA2/3かを表示。

合わせて、各.ROMファイルが読み込み済みかどうかも
表示。
about.png
posted by Shinra at 16:13| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年11月18日

開発支援機能

ALT(右)キーを押している間高速実行する(No Waitかつ1/16 frame)機能を追加。VA-EG上でプログラムをコンパイルしているときにALT(右)を押していれば待ち時間が短縮できる。

Console Windowのちらつきを防止。


EditなどのコントロールをWindows APIで操作する方法について、MSDNのどこにまとまって書いてあるのかが、ようやくわかった。
http://msdn2.microsoft.com/en-us/library/bb773173.aspx
ブックマークしたからいいけれど、トップレベルからだとどうしてもたどり着けない・・・
描画の制御やメッセージ伝達の仕組みなどのまとまった説明もあって、
ようやく入口にたどり着けた感じ。
今まで日本語のMSDNを探していたのがだめだったようで。観念して英語読むしかなさそう。

コントロールにどのスタイルを適用するとどうなるかとか、どのメッセージを送るとどうなるかとかを確認するのに、Control Spyというツールがあるらしい。これは便利。
http://msdn2.microsoft.com/en-us/library/bb773165.aspx


大量のログ出力をEditコントロールで高速表示させたかったのだが、いろいろ試行錯誤した結果、無理という結論に。

posted by Shinra at 11:10| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年09月11日

CAPS/カナ

CAPS/カナキーのロック状態は以下の場合に保持されなかった。
1) VA-EGを終了した場合
2) リセットした場合

1)を解決したくて、まあ終了前にキーの状態を読み取ってiniに保存すればOKだろうと思っていたら、そんなに単純ではなかった。というか、キーボード実装周りのバグや未実装部分が露見した。
2)は、気づいていなかったが(汗)、原因はnp2のエミュレートするキーボードが、CAPS/カナをソフトウェア制御するタイプで、VAとは違うからだろうと思ったが、そうではなかった。

バグの内容
a) ポート197h (キーボード制御)の実装ミス
- モードコマンドとオペレーションコマンドを切り替えるbitの意味を逆に解釈していた。
- そもそも、モードコマンドとオペレーションコマンドの切り替えに使うbitの値が、テクマニと、VAのROM内プログラムが出力するのとで、違う。
⇒ RESETコマンドを発行しようとしても無視されていた
b) ポート190h 未実装
BIOSは、ここのbit0の値で、電源投入かリセットかを区別し、電源投入時に限ってキーボードにRESETコマンドを発行する。ここが未実装なために、キーボードにRESETコマンドを発行しようとしていなかった。
c) VAリセット時にキーマップをクリアしていた。
⇒ リセット前の状態が保存されない。

正しい動作は、おそらく、
・CAPS on/offの度にキーボードからVAにデータを送信、VA内でキーマップに反映
・電源投入時は、RESETコマンドを送信することにより、CAPSの状態に応じてonまたはoffのデータがキーボードからVAに送信され、VA内でキーマップに反映
・リセット時は、RESETコマンドは送信されないし、キーマップも前の状態を保つ。

CAPSのon/offをiniに保存して、VA-EG起動時に反映しただけでは実際のキー入力には反映されなかった。a),b)の問題で、CAPSの状態がキーマップに反映されなかったから。

これらを修正。iniへの保存も実装。
posted by Shinra at 00:39| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

全角キー3

[全角/半角]キーをVAの全角キーとして使えるように修正。

WM_KEYDOWN: wParam = f4 lParam & 0x01000000 = 00
または
WM_KEYDOWN: wParam = f3 lParam & 0x01000000 = 00
を受け取ったらキーon、それから一定時間ったらキーoff。

[全角/半角]キーを押しっぱなしだとどうなるかというと、
Windows側でキーリピートして、WM_KEYDOWNが連続して
発生するので(*1)、VA側のキーマップ(ポート00h-0Eh)から見ても
押しっぱなしに見える。ただ、キーを押してからキーリピートが
始まるまでの間に、キーがoffになった状態が発生する。
・・・実害ないだろう。

(*1) wParamはf4,f3が交互に出るのかと思ったら必ずしも
そうではないようで、規則性が見つからない。謎。


デフォルトのキー割り当てを変更。
・[全角/半角]→全角
・[右Alt]→GRPH
[右Alt]は、GRPH,全角,テンキーカンマ、テンキー=のいずれかの
キーを割り当てられるようにした。
posted by Shinra at 00:15| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年09月06日

全角キー2

> なので、VAで全角キーの代わりに変換キーでかな漢字変換の
> on/offをできるようにするプログラムを作成中。

公開しました。ソース付き。

http://www.pc88.gr.jp/forum/viewtopic.php?t=308


実現方法

全角/半角の切り替えに使うキーの判定処理はROM内にあるため、
この判定の書き換えは不可。
そこで、JFP BIOSがキーボードBIOSから取得するキーをすり替
える。JFP BIOSからキーボードBIOSはINTでなくFAR CALLで呼ば
れる。呼び出し先アドレスは、キーボードBIOSのワーク00AB:01DA
に書かれているので(テクマニ参照)、ここを書き換えればフック
できる。JFP BIOSのワークを参照して現在の変換状態をみて、
変換中でなければ、キーボードBIOSが変換キーのコードを
返したときに全角キーにすり替えてJFP BIOSに返す。



余談

マニュアルでかな漢字変換時の各キーの機能を確認したら、
再変換機能があってびっくり。全角モード時にSHIFT+6, SHIFT+4で
範囲選択すると入力済みのひらがなを再変換できる。

# 多分、VA2/3, VA+91のみの機能

一度読んで忘れてしまったのか、今初めて気づいたのか。

昔、Windows+IMEに再変換機能があって、おーっ、と思った記憶は
あるのだけれど、VAにもちゃんとあったとは。



> これができたとして、Windowsで[全角/半角]でIMEを制御している
> 人は、VA-EGでも[全角/半角]でかな漢字変換を制御したいよという
> 話も出てくるかどうか。

Windowsの[全角/半角]キーを使わなかったのは、キーを離したことが
検出できないから(イベントが発生しない: http://88va.seesaa.net/article/2090363.html )

M88が[全角/半角]を全角キーとして使っていそうだったのでソースを
見たところ、onから一定時間経ったら自動的にoffになるようにして
いた。
・・・
確かに、それで十分だわ。全角キーを押しっぱなしにして使うソフト
なんてないだろうし。
posted by Shinra at 23:33| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

全角キー

# エミュレータとは直接関係ないけれど

私はWindowsでは[変換]キーでIMEのON/OFFができるようにカスタマイズして使っている。一方、VA-EGでは全角キーの働きをするのは右[Alt]だ。VA-EGとWindowsを行ったりきたりすると、必ず間違える。Windowsで間違って[Alt]を押してメニューがアクティブになったりして混乱する。

なので、VAで全角キーの代わりに変換キーでかな漢字変換のon/offをできるようにするプログラムを作成中。


これができたとして、Windowsで[全角/半角]でIMEを制御している人は、VA-EGでも[全角/半角]でかな漢字変換を制御したいよという話も出てくるかどうか。


先日ノートパソコンでVA-EGを動かしていて、全角に切り替えようとしたら右[Alt]がない。そういえばそうだった・・・


やっぱり右[Alt]に全角キーを割り当てるのは、いろいろイマイチなのかも。
posted by Shinra at 02:24| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年04月22日

r070422公開

r070422を公開しました。
あわせて、GETROMVA (VAEGTOOL) r070422を公開しました。

バージョンアップボードのエミュレーションに対応しました。これを利用する場合、GETROMVA r070422で、バージョンアップボードのROMイメージを作成する必要があります。またEmulate - Config で機種としてPC-88VA1を選択し、Device - Version Up Boardをチェックする必要があります。

その他、マウス、CPUで細かい修正があります。
posted by Shinra at 19:42| Comment(1) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

バージョンアップボード8

バージョンアップボード対応の仕上げ。

・ポートFF2h のビットアサイン修正:bit6はROMエリア0のバンク指定
・バージョンアップボード無効時はバージョンアップボードのメモリをメモリ空間から切り離し
・ConfigでVA2選択時はメニューからバージョンアップボードの選択を不可に
・ついでに。ConfigでVA選択時は、メニューから98専用の機能は選択不可に。また、逆に98選択時はVA専用の機能は選択不可に。
・ヘルプ修正

posted by Shinra at 19:39| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年04月14日

ドキュメントまわり 2

ヘルプを少しいじる
・スタイルの変更
・導入方法の説明の見直し
・機能仕様が98のままだったのでVAを追加
これだけで一日終わった・・・

機能仕様の記載はVAの拡張機器の型番を確認したりスペックを確認したり、VAと98で記載項目をあわせるために98のカタログも確認したりで意外に手間がかかった。
# VAの場合はSGPの話がカタログの表にも載っているのに、
# 98の場合はGDCが表に載ってなかったりとか。

表示可能文字種が98と違うのだけれど・・・記載内容合っているんだろうか・・・
posted by Shinra at 23:43| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年04月04日

バージョンアップボード7

> ROMエリア1 バンク0Fh
>  ポートFF2h bit7-4=00h バージョンアップボードROM10
>           01h バージョンアップボードROM11

# 正確にはbit7-4ではなく、bit7,5,4のようだ。
# ひょっとしてbit6はROMエリア0のバンク切り替えに関係している?

これに対応。
PLAY文でハングも解消。

釜房一号さんの調査結果も合わせて考えると、
バージョンアップボードにもV1/V2モード用のROMが搭載されている
らしく、音色に関する何かをV1/V2モード用のROMからコピーしていると推測される。

ちなみに、ROMを比較してみると、

VA2/3のROM11 = VupボードのROM11 ≠ VA1のROM11

ただし、VA1のROM11で異なるのは1バイトだけ。

Vupボード搭載時は、V1/V2モード時に使用されるROMも
Vupボード上のROM11になるのだろうか?


posted by Shinra at 21:52| Comment(7) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年03月31日

バージョンアップボード6

バージョンアップボード有効時、
V3 BASICでPLAY文を実行するとハングするということで、
釜房一号さんがいろいろ調べてくださったところ、
ROM1エリアも、バージョンアップボード内でさらに
バンク切り替えしていることが判明。

確かに、BASIC起動時、STOPM命令実行時に、
ポートFF2hのbit7-4に1を出力している。
(正確には、MUSIC BIOSのAH=09hで、だそうだ。)

ROMエリア1 バンク0Fh
 ポートFF2h bit7-4=00h バージョンアップボードROM10
          01h バージョンアップボードROM11


ROM取得のためGETROMVA改造中。
posted by Shinra at 23:01| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2007年03月25日

バージョンアップボード5

> メモリライトはまた後日。
実装。

この時点で辞書ROMがないので、ほとんど漢字変換はできない
のだけれど、「この事」「その事」など一部は変換可能だった。
バージョンアップボードで追加されたバックアップRAMに
ソノコト、コノコトといった文字列が見えたので試してみた
のだ。


釜房一号さんが調査してくださったところによると、

システムメモリエリアバンクバンク0Fh
 ポートFF3h bit3-0=0Ch 辞書ROM1
          0Dh 辞書ROM2

ということなので、実装。

漢字変換もOK。

Debug Utilityも改良して、バージョンアップボードのバンク
指定を可能に。

debugutil_addr.PNG

バージョンアップボードと無関係だが、いままでDebug Utility
でIOバンクメモリとシステムメモリエリアバンク9(フォントの
一部とバックアップメモリ)が未対応だったので対応。

posted by Shinra at 18:47| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。