歓迎光臨
"eSCV" - EPOCH Super Cassette Vision emulator for Win32
"eSCV" is EPOCH Super Cassette Vision Emulator for Win32.
This software is under GNU GENERAL PUBLIC LICENSE.
This software requires Windows 2000/XP/Vista/7.
Download: Jump to Common Source Code Project
uPD7801 tiny disassembler (11/19/2005) may have some bugs
uPD7801 opecodes table (11/19/2005)
eSCV 謎WIPページ
一応、恒例の謎日記
ハードウェア解析資料はこちらです
おまけでスタースピーダーのデモ動画 (8206KB)
Enri's Home PAGE
スーパーカセットビジョンの解析に精力的に取り組まれています。
もうもう、お世話になりっぱなしです。
2014/12/29
ステートセーブに対応しました。
2011/1/16
kazz様から頂いた、サウンド関係のパッチを取り込みました。
(ありがとうございます>kazz様)
サウンドコマンドを発行してからINT1が発生するまでの間に、新たなコマンドが書き込まれても、
これを無視するようにしました。
これによって、マイナー2049の音楽が流れるようになっています。
また、ノイズコマンドについて、従来は1ノイズ+1矩形波として実装されていましたが、
これを1ノイズ+3矩形波としました。
ウィリーレーサーの効果音や、ネビュラのモアイの登場音、パンチボーイの敵が孵化した後の音など、
様々な音が鳴るようになっています。
2006/12/7
コモンソースコードプロジェクトに則った再実装を行いました。
仮想マシンには特に変更ありませんが、Win32側で録音機能などが追加されています。
2006/6/14
ルパン3世でサイレンの音が鳴っていなかった問題を修正しました。
ノイズコマンドのフォーマットは $01,$80/$e0,WN波長,WN音量,矩形波波長,矩形波減衰,?,矩形波音量,?,? ですが、
WN音量=矩形波音量=0の場合、6番目のパラメータを波長として矩形波が出力されるようです。
ただ単純な矩形波という訳でもなく、波長に8が指定される場合は濁った音となります。(ピーポーのピーの部分)
この波形がどう生成されるか判らなかったため、サンプリングした波形を配列として組み込んでいます。
その他、画面の描画やイベント駆動の処理の高速化を図りました。
体感できるほどではないですが、多少は軽くなっているかもしれません。
またメニュー中の、最近使ったファイルの更新処理を弄っています。
2006/4/14
テキスト画面の、テキストとグラフィックの領域判定を修正しました。
最近のEnriさんの解析結果を取り込んだものです。
従来はソフト毎のパッチで対応していたのが、汎用的な処理で正しく表示できるようになりました。
これで画面表示周りはほぼ完璧になったかと思います。
明日も早朝から出張なので、取り敢えずバイナリとソースだけアップしておきます。
2006/3/13
将棋入門が動作するようになりました。
32KB+8KB ROMだと思っていたのですが、実際は32KB ROM+8KB SRAMだったようです。
これはBASIC入門などと同じですが、バッテリーバックアップされない点が異なっています。
そりゃあ、128bytes程度の内部RAMだけで、将棋の思考ルーチン実装できる訳ないんだから。
もっと早く気が付くべきでした。
スーパーサンスーピューター、スタースピーダーのテキストの表示範囲の不具合を修正しました。
黒板やゴンドラの背景、タイム表示などが正常に表示されるようになっています。
先日のPCMの修正の結果、スタースピーダーに不具合が発生していましたので、これも修正しています。
PCM周りはソフト毎に叩き方が変わってますので、ちゃんと全ソフトでチェックしないといけませんね、反省。
2006/3/10
スプライトのマスク機能の修正を行いました。
ルパン3世の扉の開閉や、エレベータファイトのスクロール時の表示の乱れが修正されています。
スプライトの属性として、上から何ライン表示しないという設定があります。
これに8以上の値を指定した場合、下側に連結したスプライトにも影響するようです。
(従来下側のスプライトは全ライン表示するようになっていました)
ワイワイモンスターランドのPCM対策の結果、ルパン3世などでポーズ時に暴走するようになってしまいました。
このため、再度PC3でのコマンド中止の処理を修正しています。
同時に、長いPCM再生中のポーズの処理につていも部分的に対策を行いました。
数字キーについて、フルキー以外に10キーの入力も受け付けるように修正しました。
私自身はノートがメインなので、全然この問題に気付いていませんでした(苦笑)
2006/3/8
ワイワイモンスターランドで、PCM再生時にフリーズする場合がある問題を修正しました。
PCMコマンド送出中にPC3が入力された場合、コマンドを中止する場合としない場合があるようです。
DAAのキャリーフラグ、lxi, mviのL0, L1フラグの処理を修正しました。
乱闘プロレスで、あっという間に体力が0になってしまう問題が解決しています。
2006/2/2
パレットの再調整を行いました。
11番の色は肌色としてよく使用されるのですが、これが濃い赤紫になっていました。
(まあ実際、私のテレビではそんな感じですが…)
流石にこれはちょっとあんまりだろうということで、元の薄い赤紫に戻しています。
ノイズの再生機能を実装しました。
ノイズは、矩形波と周期ノイズ(ホワイトノイズ?)から構成されています。
矩形波についてはそれっぽく鳴っているのですが、周期ノイズの方はまだまだ調査が必要そうです。
サウンドの実装が完了すれば、これで全機能が一通り実装されたことになります。
本格的に開発を開始してから丁度3ヶ月。
まだ動かない一部ソフトの調査が残っていますが、漸くゴールが見えてきましたね。
2006/1/29
PC5, PC6を使用してバンク切り替えを行うゲームに対応しました。
ワイワイモンスターランド、乱闘プロレス、ポールポジションII、ドラゴンボールが該当します。
なお、ドラゴンボールについてはPC5を使用せず、PC6のみでバンク切り替えを行います。
但し、乱闘プロレスは勝手に体力が激減して、すぐに試合が終わってしまう不具合が発生しています。
ワイワイモンスターランドは大体動作しますが、デモなどでPCM再生の不具合からフリーズすることがあり。
ドラゴンボール、ポールポジションIIは、こちらではまだタイトル画面も出ていません。
端子部が痛んでいますので、正しく吸い出せていない可能性ありです。
という訳で、対応ソフトはまだちゃんと動作していなかったりします(苦笑)
現在、サウンド周りの改良を集中して進めています。
PCM再生については、連続してPCMデータを出力した場合の処理を修正しました。
例えばスタースピーダーで、レース開始直後のPCMが正常に再生されるようになっています。
また、ワイワイモンスターランドに合わせて、PCMデータの終端の処理を微調整しています。
演奏コマンドのフォーマットは「$02 音色 分周比 音量」なのですが、この音色パラメータをサポートしました。
原則としては、bit7-5が波形選択、bit4-0がデチューンとなります。
各音色の波形については、ベーシック入門を使用して実機で再生した波形を加工して組み込みました。
サウンドの基準クロック値や、デチューンによる周波数の変動についても、実記の波形を解析して決定しています。
これで、通常のBGMについては、ほぼ実機どおりの音が再生されるようになったのではないかと思います。
ノイズについても、同じような手法で解析、再現できないか検討中です。
ウィンドウで2倍表示、または640x480フルスクリーン時に、画面を横に1.5倍で表示するようにしました。
これで大体実機と同程度のアスペクト比になっているのではないかと思います。
但し、1倍表示、または320x240フルスクリーン時は、従来どおり1:1で表示するようになっています。
これは、ドット幅が広くなったり狭くなったりして、些か見苦しいと感じたからです。
また、実機調査のついでに、パレットの色の再調整を行いました。
これが正しい色合いか判りませんが、少なくとも私のテレビではこんな風に映っています。
後は細かいところで、熱血カンフーロードで画面上にゴミスプライトが表示される問題の対策を行っています。
これは面倒だったので、パッチで無理やりスプライトの表示範囲外にしています。
2006/1/25
スプライトの上下・左右分割の判定処理を修正しました。
また、分割時のY方向の連結フラグの処理を修正しました。
サッカーでボールが2重に表示される、ラインが途切れるなどの問題が修正されています。
ルパン3世でも、例えば最終面の壁が正しく表示されるようになっています。
これで、今度こそスプライト絡みの問題はOK…の筈なんですが。
2006/1/24
ここ数日でEnriさんが解析された、スプライトの2色モードをサポートしました。
また、スプライト連結時に同じパターンを表示する場合の処理をサポートしました。
これで、エレベーターファイトでキャラや扉などが多色表示されるようになりました。
また、マッピーなどでも屋敷が正しく表示できるようになっています。
スプライトを上下・左右に分割して表示する処理をサポートしました。
(まだ条件が不明瞭なので、ソフト毎に判定処理を分けています)
これで、ルパン3世で蝙蝠や蛇、銭型のとっつぁんが正しく表示されるようになりました。
また、熱血カンフーロードで頭部がちゃんと左右を向くようになっています。
まだ多少怪しいところもありますが、表示の問題はこれで大体解決ついたかと思います。
後の課題は、まだ吸い出せていないソフト類とサウンドですね。
特に効果音の調査がまだ全然進んでいませんので頑張らないと。
2006/1/20
pcmコマンドのデータ終端処理の挙動を修正しました。
熱血カンフーロードで、時折pcm再生が乱れる問題が解決しています。
upd7801コアの、シリアルi/oの処理を修正しました。
mov a,sやmov s,aではシフトレジスタの読み書きのみ行い、通信はsioで8発クロック発生した際に行います。
実際にシリアルi/oを使っているソフトはなさそうですので、動作には特に影響ありません。
また、サウンド周りのコードが混乱してきましたので、整理を行いました。
upd1771のi/oおよび波形生成処理部と、サウンドバッファの更新管理部にクラスを分けています。
これも実装レベルの修正で、動作には特に影響ありません。
今回は音周りの修正がメインなので、スクリーンショットは無しです。
2006/1/18
マッピーおよびスタースピーダーがフリーズする問題を解決しました。
これで、現状で吸い出せているソフトで動作しないのは将棋入門だけです。
マッピーの方は、サウンドチップがデータを受け取った際のACK信号出力のタイミングの問題でした。
CALL先でサウンドデータにデータを出力して、RETする前にACK信号で割り込みが発生。
その結果スタックが溢れてデータ破壊が起きていたのが原因です。
スタースピーダーは、任意長PCMデータの出力中のACK信号待ちで無限ループしていました。
サウンドチップ側で、任意長PCMと熱血カンフーロードの固定長PCMと、何れでも受け付けるように修正しました。
また、PC3(サウンドチップのリセット信号)として、MCのbit3を0にしてSAK信号を出力する処理をサポートしました。
テキスト画面とスプライト画面の合成時に、X方向に2ドットのずれがありました。
ドラゴンスレイヤー(ブロック画面の青い床と、スプライトのマップチップ)を参考に、ずれを調整しています。
ウィリーレーサーで、カーブのチップがずれる問題なんかも解決しているかと思います。
2006/1/17
UPD7801のINR/INRW/DCR/DCRW命令のキャリーフラグの処理を修正しました。
ベーシック入門でスプライト命令実行時にオーバーフローエラーが発生する不具合が修正されたり、
バルダーダッシュで画面スクロールがうまくいかない不具合が修正されたり、
マイナー2049erでゲーム画面が正常に表示されない不具合が修正されたり、
エレベーターファイトでミス後の再開時にキャラが配置されない不具合が修正されたり、
スーパーサッカーで試合が始まらない不具合が修正されたり、
スーパーベースボールで打球や送球がどこまででも飛んでいく不具合が修正されたり、
スーパー麻雀で逆さ向きの牌の下半分が化ける不具合が修正されたり、
なんだか色々なソフトが動作するようになっています。
まだちゃんと吸い出せていないドラゴンボール、ポールポジション、ワイワイモンスターランド、乱闘プロレスと、
途中でフリーズしてしまうスタースピーダー、マッピー、将棋入門以外のソフトは、
画面化けの程度の差はあれど、一応はそれなりにプレイすることは出来るようです。
また、PCM再生機能をサポートしました。
熱血カンフーロードで確認した限りでは、512bytesの1bit PCMのようです。
これ以外の対応ソフトがまだ吸い出せていないので、他のソフトで不具合が発生する可能性があります。
2006/1/16
32KB ROM+32KB ROMタイプのバンク切り替えをサポートしました。
ドラえもん、スカイキッドなどがこのタイプに該当します。
ポールポジション、乱闘プロレスは更にまた異なるタイプのようですが、詳細はまだ不明です。
ドラゴンスレイヤー、ポップ&チップス、ウィリーレーサーについて、テキストの範囲判定に問題がありました。
これらのソフトのみ他のソフトと挙動が異なるようなので、暫定的にパッチで対応しています。
Enriさんのご指摘により、スプライトの色番号が0の場合は透明とするようにしました。
例えばアストロウォーズにおいて、タイトルロゴが消えずに残る不具合が解決しています。
また、スプライトを重ねて表示する際に、表示する順番を逆転しました。
X方向にスプライト連結時、同じパターンを表示する場合があるようです。
まだ細かい条件が不明なので、試しにエレベータファイトのみそこそこ表示されるようにしてみました。
後日、詳しい条件が判明したらパッチを廃止します。
ベーシック入門。昨日の更新の時点で動作していたんですが、折角なので貼っておきます。
これが動くようになったんだから、レトロPCの眷属ということで如何でしょう、とアピールしてみたり(笑)
2006/1/14
テキスト画面のセミグラフィックをサポートしました。
4x4,単色で描画することができるモードで、8x8,2色のブロックと排他で利用します。
スーパーベースボールのタイトル画面や、ミルキープリンセスのバイオリズムの表示などで使われています。
テキスト画面について、テキストの背景色をサポートしました。
熱血カンフーロードでは、画面上部で水色の背景に黒字でスコアを表示しています。
(ルパン3世なんかでも同じような使われ方をしています)
これらのテキスト画面は、Enriさんのここ最近の解析結果に基いています、多謝多謝。
また、32KB ROM+8KB ROM/SRAMタイプのバンク切り替えを正式にサポートしました。
熱血カンフーロードでは、8KB ROMに音楽データが格納されているようです。
バッテリーバックアップSRAMの場合は、ROMイメージにヘッダを追加する必要があります。
その他、引き続きCPUのニーモニックの見直し作業を行っています。
そろそろ問題ない筈なんですが、まだ実際の動作では怪しい動作がちらほら、うーむ。
2005/12/31
CPUの各ニーモニックの再確認を行っています。
マッピーなど今まで動作しなかったものが、ゲーム画面が出るようになりました。
途中でフリーズするところを見ると、まだまだ問題があるようです。
スプライト周りはまだまだ謎の機能が多いです。
スプライトを上下だけでなく左右に分割することが出来るようなのですが、条件がまだよく判りません。
2005/12/17
スプライト周りの調査中です。
16x16単色のスプライトを、4枚連結して32x32にする、または4枚重ねることができます。
スーパー麻雀など、これらの使い方が混在している場合に対応しました。
アストロウォーズやエレベータファイトなど、12/13のスクリーンショットと比較してみてください。
スプライト番号のMSBに1が指定されている場合の描画に仮対応しました。
16x16の上下を半分にして、どちらかだけを表示するみたいです。
ルパン三世の1面で、蝙蝠が羽ばたくのが何となく表示できるようになっています。
ただこの実装だと、流れてくる水が正しく表示できないんだよなあ。
その他、PCのb5の処理を修正しました。
MOV PC,Aなどで値を明示的に変更する他に、MCのb5を0にしてIO/~Mの値が出力される場合にも対応しています。
どうやらスタースピーダーでそういう操作をしているようです。
2005/12/13
CPUコアにでっかい虫がいました。
なんでこんなオオボケぶっこいてんだ俺orz
CPUコアを修正した結果、更に幾つかのソフトが動作するようになりました。
コミックサーカス辺りは、そろそろ普通に遊べそうです。
次辺り、スプライト画面の化けを何とかしたいですね。
エレベータファイト。
子供の頃プレイして、こんな面白いゲームがこの世にあるのかと思いました。
個人的に、スーパーカセットビジョンでいちおし。
バルダーダッシュ。
10面辺りだったかな、蝶に追い掛け回される面が妙にトラウマになってます。
2005/12/10
テキスト周りの実装を進めています。
$20-$7fの文字フォントを、BIOSから取得するように変更しました。
また、テキスト画面とスプライト画面の位置関係を再調整しています。
ブロック画面はまだ仮実装。
ルパン3世のゲーム画面で、背景に色が付いているのがそれです。
テキスト画面の一部領域を8x8のブロックとして表示する機能ですが、またテキストとの切り替え条件がはっきりしていません。
こちらはコミックサーカス。
テキストとブロックの表示が一部乱れてしまっています。
その他、サウンドの実装を開始しました。
効果音の鳴らし方がまだよく判っていませんが、BGM位は鳴るようになっています。
という訳で、今のところまともに動作しているのは風船デモだけ。
ポーズ音が鳴るようになったし、これだけは完全動作と言ってもいいのかな?
2005/11/24
一部のゲームについては、画面が化けながらも何となく動作するようになりました。
スクリーンショットは、ルパン三世のタイトルと、ミス時の画面です。
実質Enriさんおよび333さん向けですが、参考程度にリリースしておきます。
コーディングを始めてからだと、思ったより早かったかな。
2005/11/23
スプライトの実装実験中です。
2005/11/22
大体のソースが揃ってきましたので、ビルドして実験してみました。
取り敢えずCPUが回って、タイトル画面が出るところまで。
画面生成はまだテキスト画面のみの簡易実装です。
一歩前進、いえっふー。
各仕様については、Enriさん&333さんの解析内容に全面的に頼らせて頂いています。
いつも有難う御座います。
2005/11/19
IC collectionの小松様から、UPD7801Gの資料を頂きました。
その資料を元に、命令表や逆アセンブラの修正をしています。
そろそろ、CPUやその他のソースを書き殴り始めています。
今月中にはCPUが回るところまで行きたいですね。
2005/11/6
ディスアセンブラを修正しました。
JREのアドレス計算が間違ってたようです。
先日作成した吸出し回路、無事動作しました。
手持ちのカートリッジを片っ端から吸い出してます。
ベーシック入門が手に入りました。
RX-78のときと同じく、ビデオキャプチャ方式でCPU内蔵ROMの吸出しにも成功しています。
SRAMカートリッジは、取り敢えず作成保留。
2005/11/4
本格的に作業開始しましたよ、ということで。
uPD7801のディスアセンブラ、および吸出し回路試作をしています。
吸出し回路、試作1号。
SRAMカートリッジ(作成予定)の書き込みにも対応しています。
出来る限り錫めっき線を使おうとして、かえって歪な代物に(苦笑)
動作確認は週末にでも。