2022.07.21 あれから18年
長らく更新が無かったこのページですが気が向いたのでちょっとだけ。
久しぶりにPHC-25のプログラムをVisualStudio2019でビルドしてみたらビルドできました。
画面はCreateDIBSection、サウンドはDirectSoundを使っている程度で難しいことはしていないのでなので問題なさそう。
2022年になってPHC-25のゲームを作っている方を見つけてしまったのでそのゲームがエミュレータで動作しないか格闘中です。
http://inufuto.web.fc2.com/8bit/
こちらにいぬふとさんが作ったゲームがあります。いろんな機種のゲームがあってすごい!
PHC-25版はwavファイルでの配布になっていて私が作ったエミュレータでは読み込みできません。
久しぶりに触ってみるか…テープ部分はぱっと見ても全然わからないですね…。
2009.05.25 日記どころか3年記ですね(笑)
カウンタが壊れていたので直しました。
最後に更新してから3年以上経っていました。
2008年までは体を壊したり解雇になったりして散々でしたが
今年は何かいいことあればいいなと思います。
2005.11.12 日記どころか年記ですね(笑)
すこし時間があったので PHC-25 の仕様について書いてみました。
間違っている所や書き足りないところもあるかもしれませんが
今後少しずつでも直していこうと思っています。
よろしくおねがいします。
2004.10.23 家庭用テレビのにじみを利用した中間色表示
PC6001V の掲示板で Hashi さんに家庭用テレビのにじみの原理について教えていただきました。
PC-6001 では、SCREEN 4 の白黒モード (COLOR ,,2) で
X 軸方向に連続でドットを打つと白、
X 軸方向(の偶数)に1ドットおきに打つと緑、
X 軸方向(の奇数)に1ドットおきに打つと赤、
になるとの事でした。図で書くと下のようになるとの事、
\0 1 (それぞれ偶数、奇数の位置)
0 ■□← 緑
1 □■← 赤
2 □□← 白
3 ■■← 黒
で、早速 PHC-25 でも同じことをやってみました。
上記のプログラムを打ち込んで、RUN。
COLOR ,,1 の場合は左の画面の色に、COLOR ,,2 の場合は右の画面の色になりました。
PHC-25 の場合は、緑、赤ではなく水色、赤に変化するようです。
で、早速、エミュレータにも組み込んでみました。それが以下の画面です。
COLOR ,,1 の場合、左がにじみを再現しない画面、右がにじみを再現した画面。
COLOR ,,2 の場合、左がにじみを再現しない画面、右がにじみを再現した画面。
とりあえず、それっぽく再現できるようになったので Ver.1.01 として公開します。
よろしくお願いいたします。
2004.6.28 PHC-25 の中身
PHC-25 の中身の写真を公開しました。
私はハードウェアにはかなり疎いので説明のしようが無いところが
多々ありました。間違っているところや補足事項などがありましたら
お知らせください。よろしくお願いします。
2004.6.14 公開しました
なんとか、ドキュメント類が揃ったので公開に踏み切りました。
なにか問題がありましたらご連絡ください。
すぐに対処いたします。よろしくお願いいたします。
2004.6.13 そろそろ公開か ?
なんとか、公開できるように頑張ったのですが、
説明書や ROM ファイルの作成方法などのドキュメントが
いろいろと必要になってしまい間に合いませんでした。
近いうちに作成して実行ファイル、ソースファイルを
公開します。もうすこしお待ちください。
あと、勝手に使っているファイルの許可も取らないといけないだろうし(^^;
エミュレータの進捗はというと、
ジョイスティック、フルスクリーンモード、
設定ファイルの書き出し、読み込み、に対応しました。
Windows98 での動作を調べた所、フルスクリーンモードから
ウインドウモードに戻った時に画面内からウインドウが
消えてしまうと言うバグがあったのですが、
それも修正しました。
GetWindowPlacement 関数でウインドウの座標をとる時に
WINDOWPLACEMENT 構造体の length メンバに sizeof( WINDOWPLACEMENT ) を
入れていないと Windows2000/XP では、正常な値が帰ってくるのに
Windows98 ではデタラメな値が帰ってきました。
これが原因だったようです。
2004.6.12 たどたどしいながらも
PLAY 文での演奏がたどたどしいながらも聞ける程度の音になりました。
おかしくなっていた原因は 2 つあって、
・DI 命令の後、割り込み要因がなくても必ず割り込みが起きていた。
・割込み禁止で割り込みが起きなかった場合も割り込みが起きた事として処理していた。
と言うことでした。ケアレスミスばかりです。(^^;
とりあえず、こんな感じで聞こえます。
メリーさんのひつじ
むすんでひらいて
2004.6.11 音や画面更新などタイミング関係は難しいですね・・・
更新が遅れました。ごめんなさい。
ここ数日の間、タイミング関係ではまっていてプログラムが
全く進んでいませんでした・・・。
でも、やっと、なんとか音が途切れず再生されるようになりました。
しかしながら、1 度目の PLAY は正常に再生されるのですが、
2 度目以降はテンポがおかしくなってしまいます。
今のところ原因不明。全く判りません・・・。
それと、60FPS 近く出てもいい高速な環境で 30FPS 程度になってしまう
という問題があったのですが、それは、timeBeginPeriod で
タイマの精度を設定していなかったからということが判明。
設定したらちゃんと 60FPS 近く出るようになりました。
とりあえず、メニューから音量の指定とバッファ長の指定を
選択できるようにして、画面更新速度にかかわらず、
内部では 60 FPS の速さを維持するようにしました。
それと、プリンタに印字したものをテキストファイルへ書き出す機能を実装しました。
次はジョイスティックとフルスクリーンモードも実装したいなぁ・・・。
2004.6.2(2) コスモキャノン
わたしが唯一持っている PHC-25 の解説本、
はじめてみようプログラミング BASIC 入門 ホップ・ステップ・ジャンプ
の「コスモキャノン」を打ち込んでみました。
中型の UFO をコスモキャノンでやっつけるゲームです。
UFO が下に着いてしまうと占領されてしまいます。
説明にはなぜ中型なのかは自分の目で確かめてくださいと書いてありましたが
UFO の表示は POKE 文で行っていてプログラムからはすぐにわかりませんでした。
私が小学 2 年生の頃に生まれて初めて遊んだシューティングゲームです(^^)
これを超えるシューティングゲームは数えるほどしかありません。(自分的に・・・(笑))
2004.6.2 CSAVE/CLOAD その後
正常にテープが読めました(^^)
リモート端子をチェックしてテープの制御を監視していたのですが、
ファイル名を表示した後、一瞬、リモート信号が切れていて
その時に、テープの巻き戻しと同じ状態になってしまい
本来、プログラムデータを読み込むべき所で再度ファイル名を
読んでしまっていました。治ってよかった。
画面の下に、テープの状態 (Ready/Loading/Saving) と、
カウンタ (左がロード時、右がセーブ時) 、そして
かなキーの状態を表示するようにしました。
テープの状態を表示してみた時に、リモート端子が切れてる事に気がついたんです。
次はサウンドかぁ。これは、本当に難しそうだなぁ・・・。
そういや、ひらがなとカタカナの変換は CTRL + A だと言う事をすっかり忘れてましたよ(笑)
2004.6.1 CSAVE/CLOAD など
なんとかテープのセーブ、ロード関係を実装してみました。
ついでにウインドウの大きさも変更できるようにしました。
見ての通りロード自体はできるのですが、1 行目がおかしくなってしまっています。
うむむ、良くわからない・・・・。実機から録音した WAVE ファイルを手動で
1 ビットずつ変換して比較するしかなさそうです・・・・(泣)
2004.5.31 SCREEN 3/4
上記のようなプログラムを各グラフィックモードで実行してみました。
このように、なんとか、グラフィック画面が表示されるようになりました。
次はテープ読み書きの実装だと思うのですが、これはさすがに全く見当もつかない状態です。
なにをどうすればよいのやら・・・・。それと、音の出力にも対応していないので
それもどうしたもんか・・・。
2004.5.30 SCREEN 2
実機から ROM を取り出し続けること 5 時間・・・・。
何度もテープに記録して WAV に変換して変換失敗の末、
何十回目だったろうか、やっと、チェックサムが合いました。
これで、ROM ファイルのせいで変な動きをすることはなくなるはず・・・・。
あれれ ? 今までちょっと触ると止まっていたのがウソみたいに動作しはじめました(嬉)
調子に乗って、テキスト画面のアトリビュートとセミグラフィックモードを搭載。
カーソルも表示されるようになりました。なんだか、かなり良い感じです(^^)
2004.5.29 チェックサム
実機と取り出した ROM ファイルでチェックサムを比べてみた結果、
メモリ(2048 バイト毎) | 取り出した BIOS | PHC-25 実機 | 比較 |
0000h ~ | 3082 | 2909 | × |
0800h ~ | 49522 | 49522 | ○ |
1000h ~ | 55102 | 55102 | ○ |
1800h ~ | 40741 | 40870 | × |
2000h ~ | 50377 | 49509 | × |
2800h ~ | 65390 | 64577 | × |
3000h ~ | 40858 | 40858 | ○ |
3800h ~ | 6789 | 6789 | ○ |
4000h ~ | 59735 | 59735 | ○ |
4800h ~ | 18093 | 18093 | ○ |
5000h ~ | 64728 | 64728 | ○ |
5800h ~ | 5520 | 5294 | × |
と言うわけで、かなり違っている事が判明しました・・・。
これじゃあ、動かないわけですよね・・・・。
2004.5.28(2) キーボードから打ち込みできる !?
とうとう、キーボードから文字を打ち込めるようになりました(嬉)
しかも、なぜか改行もするようになりました。
問題点は以下の通り、(1) で (3) を CALL しているのですが、
(3) は (2) のサブルーチンの中途半端な場所なのでそれ以降の処理が
ハングアップしているという感じでした。
(1) 割り込み処理の一部
:
LD E,H ;1C02 5C
INC A ;1C03 3C
CALL 04A3Bh ;1C04 CD 3B 4A
LABEL1: LD HL,LABEL2 ;1C07 21 00 00
LD (0F926h),HL ;1C0A 22 26 F9
:
※CALL 04A3Bh 以降で変な動きになっているような気がする・・
(2) 4A37h ~のサブルーチン
RET ;4A36 C9
LABEL3: PUSH AF ;4A37 F5
OUT (0C1h),A ;4A38 D3 C1
IN A,(0C1h) ;4A3A DB C1
LD D,A ;4A3C 57
:
RET ;4A45 C9
(3) 4A3Bh ~のサブルーチン、実際は (2) のサブルーチンの OUT 命令の途中
POP BC ;4A3B C1
LD D,A ;4A3C 57
:
そこで、かなり悩んだ結果、(1) の CALL 04A3Bh を
CALL 04A37h に書き換えてみると動作しました。
・・・そう、ROM のイメージファイルが正常に作成できていなかったのです・・・。
しかも割り込みルーチン内だったので全く動かなくなっていたのです。
ということは、他の場所もおかしい可能性があるということですね・・・。
もう一度、実機から ROM データを取り出してみる必要がありそうです・・・。
キーボードが利くようになって、むちゃくちゃ嬉しいです。
でも、今度は打ち込んだプログラムが変になってしまってます・・・・(^^;
結果的には、ハードウェア割り込みは垂直帰線割り込みのみで
キーボード割り込みは必要ありませんでした。
2004.5.28 割り込み・・は鬼門かも・・
:
IN A, (040h)
AND 010h
JR Z, LABEL
HALT
LABEL: LD B, (HL)
:
こんな部分を見つけました。これは、I/O ポート 040h の値を読んで
Bit4 の値が 0 だったら通過、そうじゃなかったら
HALT するというものです。で、I/O ポート 040h を読み込んだ時の
Bit4 は、垂直同期信号の出力です。このビットが 0 だったら
通過するのならば、多分 0 の場合は、垂直帰線期間中だと予測できます。
で、HALT して、割り込みを待っているのだとすると、
垂直帰線割り込みをハードウェア側で起こしているんじゃないかと予測できます。
もし、キーボード割り込みも同時に起こしてしまうと、
都合が悪いような気がします。
ということを踏まえて割り込み関係の処理をいろいろと変更したのですが
画面の表示は前よりもまともになったものの
(実はキーを押さないと画面が更新されなかった(^^;)
キーボードが全く効かなくなってしまいました。
しかも、Z80 の割り込みを完全に誤解していて、今までの実装だと
割込み禁止の状態でも割り込みをかけまくっていました(^^;
う~ん、道のりはまだまだ遠そうです・・・。
2004.5.27 メモリ修正
とりあえず、ROM の部分に書き込みできないように変更して、
さらに、空領域の部分を書き込み不可にして、
その部分を読み込んだら FFh を返すようにしてみました。
すると、空きメモリサイズを正しく返すようになりました。
BASIC 自身は 8000-BFFF のメモリも認識できる作りになっていて
32KB まで対応みたいですね。物理的に増設できるのかは不明ですが・・・。
めがきらさん
からたくさん資料をいただいたのですが、
水平同期信号と垂直同期信号の処理で
詰まってしまいちょっと止まってしまっています。(^^;
とりあえず、テキストモードで文字が打てる程度までは
持って行きたいんですけどねぇ。
現在、ハードウェア割り込みは、キーボードを押した時、
離した時の 2 つの要因で起きるようにしているのですが
もしかしたら、これが根本的に違うのかも・・ ??
キーボード割り込みではなく垂直帰線割り込みを
起こさないといけないのかもしれません・・・。
または、両方かな・・・ ??
とりあえず、画面と CPU の同期を作らないと先に進まなさそうです。
2004.5.21 キーボード修正
キーボードが効かないのでソースをよく見たらキースキャンのみ実装していて
I/O ポートに反映していませんでした(^^; I/O ポートからキーボードの
状態を読み取れるようにしたら、上記のような画面が出るようになりました。
しかし、なぜ、改行しないのかな・・? あと、メモリも 30649 バイトもあるし・・。
まだまだ、おかしい所だらけです・・・。
2004.5.20 エミュレーターっぽい ??
EmuZ-2500
の武田さんが作成した
CP/M Player for Win32 のソースから Z80 部分を拝借して、
M88 の cisc さんが作成した fmgen 008 の PSG 部分をくっつけて
キーボードとテキスト表示をくっつけてみた所、ここまで画面が出ました(^^;
いゃあ、自分の作った所なんて微々たるもんなのですが、ちゃんと画面に
表示されると嬉しいものですね。・・・しかしながら、ここまで画面は出るものの
ここでハングアップしてしまいます。まず、ビデオコントローラーの
仕様を調べないと進まないですね・・・。
2004.5.19 I/O ポート
久しぶりの更新・・・どうせだれも見ていないので、ゆっくりやっていきます。
まず、Z80 のエミュレータで PHC-25 の ROM コードを実行してみると、
40h, 0C0h, 0C1h に OUT している事が分かりました。そこで実機を使って
テキトーに OUT してみると以下のようにハードウェアに割り当てられていることが分かりました。
ポート番号 | 入出力方向 | ハードウェア |
040h | OUT | ビデオコントローラー |
0C0h ~ 0C1h | OUT | PSG |
また、ROM コードを読んでみると IM 1 があったので割り込みモードは 1 になっているようです。Z80 の割り込みモード 1 は簡単で割り込みが起きるとアドレス 0038h から実行されます。そこで、Z80 のエミュレータでアドレス 0038h から実行してみました。すると 80h ~ 88h を IN して、40h も IN していました。要するに 40h と 80h ~ 88h の I/O ポートに割り当てられているハードウェアは割り込みを使っているということです。まず、80h ~ 88h をテキトーに IN してみるとキーボードを押す事によって変化していました。なので、80h 88h はキーボード情報だという事が分かりました。また、40h は出力時の動作を考えるとビデオコントローラーのステータス情報かなにかだと予想されます。
ポート番号 | 入出力方向 | ハードウェア |
040h | IN | ビデオコントローラー |
080h ~ 088h | IN | キーボード |
今のところ分かっているのはこれくらい。
なんだか、20h ~ も怪しいのですが、まったく意味不明です・・・・。他にあるとしたらプリンタかなぁ・・・。
2004.4.16 PHC-25 本体とシンセサイザーに使われている IC
■PHC-25 本体
NEC の Z80A 互換の CPU D780C-1 です。
ビデオコントローラー M5C6847P-1 です。
■シンセサイザー
いわゆる PSG です。矩形波 3 和音 + ノイズを発声できます。
以上が PHC-25 に使われている主な IC です。
PC-6001 と全く同じものが使われています。
しかし、PHC-25 にはサブ CPU がありません。
また、8255 などの IC も使われていません。
PSG が外付けなのも手伝ってか PC-6001 よりも
シンプルにまとまっているような気がします。
2004.4.10 テープイメージファイルからバイナリファイル抽出
テープイメージファイルからバイナリファイル抽出するプログラムを作ってみました。下のコマンドプロンプト画面が抽出時の様子です。
>p6_phc25 rom1.p6 rom1.bin [Enter]
を実行すると rom1.bin が作成されたことが分かると思います。
下は rom1.bin の先頭部分です。なんとか ROM イメージ取得成功 !!
[0000] C3 9D 0B 3F 20 00 F7 DF C3 E7 14 68 67 C3 56 27 |6D| テ..? ..゚テ..hgテV'
[0010] C3 94 05 60 E0 E0 60 17 C3 29 20 00 E0 F1 1F 2F |1E| テ...珥..テ) .瑰./
[0020] C3 2A 20 23 77 C9 AF 4F C3 39 20 AE FD 1A B7 20 |26| テ* #wノッOテ9 ョ..キ
[0030] C3 72 20 FD C5 06 05 4E C3 C9 1B 55 73 65 72 20 |D6| テr .ナ..Nテノ.User
[0040] 4D 65 6D 6F 72 79 20 00 20 42 79 74 65 73 0D 0A |D7| Memory . Bytes..
[0050] 00 53 63 72 65 65 6E 20 3F 20 00 50 48 43 2D 32 |19| .Screen ? .PHC-2
[0060] 35 20 53 41 4E 59 4F 20 42 41 53 49 43 20 56 2E |05| 5 SANYO BASIC V.
[0070] 31 2E 31 0D 0A 00 DE 18 B7 07 29 1A 53 28 17 0A |3A| 1.1...゙.キ.).S(..
[0080] 3F 24 5B 0A F9 27 ED 08 BA 08 71 09 A8 18 D8 08 |B9| ?$[..'..コ.q.ィ.リ.
[0090] 2E 09 4D 28 D4 18 E2 27 54 09 6C 29 6E 26 EE 27 |3C| ..M(ヤ..'T.l)n&.'
[00A0] 73 29 1C 19 DB 28 D6 28 5E 19 F7 3F 37 3E 57 3E |89| s)..ロ(ヨ(^..?7.W.
[00B0] 22 3C A3 3A 1C 42 71 42 74 41 AA 41 FF 43 58 47 |CD| ".」:.BqBtAェA.CXG
[00C0] 6D 10 8E 49 1D 4C 37 0F C3 0F 3D 18 63 48 6A 48 |87| m.鯖.L7.テ.=.cHjH
[00D0] 88 43 5A 46 E1 05 42 31 34 31 48 31 83 1A 83 27 |E9| ・ZF..B141H1...'
[00E0] 75 27 70 27 6B 27 2D 33 66 28 17 32 BD 31 DF 32 |FB| u'p'k'-3f(.2ス1゚2
[00F0] E8 32 6E 33 7D 27 C5 34 2B 26 8C 35 DF 34 CB 34 |7C| .2n3}'ナ4+&.5゚4ヒ4
[0100] D1 34 5B 35 44 35 13 35 65 3E 62 27 C8 49 E5 49 |C1| ム4[5D5.5e.b'ネI薨
[0110] A4 27 2B 26 2B 26 62 F3 2B 62 00 2E 68 65 2C 68 |DE| 、'+&+&b.+b..he,h
[0120] C4 2C 72 77 32 4A 30 27 48 2D 27 20 69 6E 20 00 |5F| ト,rw2J0'H-' in .
[0130] 52 65 61 64 79 0D 0A 00 42 72 65 61 6B 00 4E 65 |A4| Ready...Break.Ne
[0140] 78 74 20 77 2F 6F 20 66 6F 72 00 53 79 6E 74 61 |97| xt w/o for.Synta
[0150] 78 20 65 72 72 6F 72 00 52 65 74 75 72 6E 20 77 |D9| x error.Return w
:
以下続く
こちらから実行ファイルとソースファイルがダウンロードできます。Visual C++ 6.0 で作りました。
2004.4.8 P6DatRec を使ってみる
ものは試しと言う事で PC-6001 でセーブしたデータの wav ファイルから
PC-6001 のエミュレータ用のテープイメージファイルに変換するツールを
探してみた所、森川浩氏の web ページにて P6DatRec が公開されていました。
使用方法などは README.TXT を読んでください。とは言っても wav ファイルを
ドラッグ & ドロップするだけです。
以下は前回 2004.3.31 SSAVE で作った wav ファイルを P6DatRec で
変換したファイルの一部です。
[0000] FF EA EA EA EA EA EA EA EA EA EA 52 4F 4D 31 00 |42| ...........ROM1.
[0010] 00 FF 3C 3C 3C 3C 3C 3C 60 03 03 00 00 00 0F F0 |CC| ................
[0020] 00 01 00 00 02 00 00 03 00 00 01 10 01 10 00 00 |28| ................
[0030] 01 01 01 01 20 00 00 60 20 00 FF FF 3C 3C 3C 3C |92| .... ... .......
[0040] 3C 3C C3 9D 0B 3F 20 00 F7 DF C3 E7 14 68 67 C3 |68| ..テ..? ..゚テ..hgテ
[0050] 56 27 C3 94 05 60 E0 E0 60 17 C3 29 20 00 E0 F1 |4D| V'テ...珥..テ) .瑰
[0060] 1F 2F C3 2A 20 23 77 C9 AF 4F C3 39 20 AE FD 1A |9D| ./テ* #wノッOテ9 ョ..
[0070] B7 20 C3 72 20 FD C5 06 05 4E C3 C9 1B 55 73 65 |1B| キ テr .ナ..Nテノ.Use
[0080] 72 20 4D 65 6D 6F 72 79 20 00 20 42 79 74 65 73 |52| r Memory . Bytes
[0090] 0D 0A 00 53 63 72 65 65 6E 20 3F 20 00 50 48 43 |D1| ...Screen ? .PHC
[00A0] 2D 32 35 20 53 41 4E 59 4F 20 42 41 53 49 43 20 |E0| -25 SANYO BASIC
[00B0] 56 2E 31 2E 31 0D 0A 00 DE 18 B7 07 29 1A 53 28 |9D| V.1.1...゙.キ.).S(
[00C0] 17 0A FF 3C 3C 3C 3C 3C 3C 3F 24 5B 0A F9 27 ED |5D| .........?$[..'.
[00D0] 08 BA 08 71 09 A8 18 D8 08 2E 09 4D 28 D4 18 E2 |5E| .コ.q.ィ.リ...M(ヤ..
[00E0] 27 54 09 6C 29 6E 26 EE 27 73 29 1C 19 DB 28 D6 |6C| 'T.l)n&.'s)..ロ(ヨ
[00F0] 28 5E 19 F7 3F 37 3E 57 3E 22 3C A3 3A 1C 42 71 |E9| (^..?7.W.".」:.Bq
[0100] 42 74 41 AA 41 FF 43 58 47 6D 10 8E 49 1D 4C 37 |B7| BtAェA.CXGm.鯖.L7
[0110] 0F C3 0F 3D 18 63 48 6A 48 88 43 5A 46 E1 05 42 |26| .テ.=.cHjH・ZF..B
[0120] 31 34 31 48 31 83 1A 83 27 75 27 70 27 6B 27 2D |48| 141H1...'u'p'k'-
[0130] 33 66 28 17 32 BD 31 DF 32 E8 32 6E 33 7D 27 C5 |2D| 3f(.2ス1゚2.2n3}'ナ
[0140] 34 2B 26 8C 35 DF 34 CB 34 FF 3C 3C 3C 3C 3C 3C |BF| 4+&.5゚4ヒ4.......
[0150] D1 34 5B 35 44 35 13 35 65 3E 62 27 C8 49 E5 49 |C1| ム4[5D5.5e.b'ネI薨
:
以下続く
おお、BASIC のメッセージらしきものが見えますね。
0000h ~ 003Bh まではファイル名とヘッダデータのようですが、いまいち良くわかりません・・・。
実機の ROM と比較してみると水色の部分がバイナリデータのようです。
なので、2 つ目以降の 3Ch が 6 つ並んでいる赤い部分の次の 128 バイトを抜き取ってくっつけると実際のバイナリデータに
なるという事ですね。
これでなんとか実機からデータを持ってこれそうですね。バイナリデータだけ抜き取るコンバータ作らないとなぁ・・・。
2004.4.2 フォント ROM
2004.3.29 に簡単なメモリマップを書きましたが、
その中の「5000-5FFF フォント」を検証してみようと思います。
上のプログラムを実行すると
このように表示されます。
これを見てみると分かるように、フォントの縦の隙間が微妙に空いています。
そう、実はフォントは 8x16 の大きさで ROM に入っているのです。
テキスト画面では、そのうち、8x12 の部分を表示して使っているようです。
2004.4.1 記録されたテープの中身
とりあえず、PHC-25 で記録されたテープを WAV 形式で取り込み
波形を見てみました。すると、ぱっと見た感じでは
FSK 方式と呼ばれるデジタル変調方式を採用しているみたいです。
これが、その波形の一部です。
FSK 方式は、大きな波が 0 を示し、小さな波が 2 つで 1 を示します。
小さな波が必ず 2 つ 1 組になっている事からも分かります。
PC-6001 も同じ形式で録音しているはずなので、もしかしたら
エミュレータ用のテープイメージ作成プログラムが使えるかもしれません。
まず、PC-6001 についても調べた方が良さそうだなぁ。
互換性は無いとはいえかなりの点で似ている所があるようですから・・・・。
2004.3.31 SSAVE
いろいろ調べてみると PHC-25 には SSAVE という命令がある事が分かりました。
これは、今表示されている画面をそのままテープに保存するというもの。
PC-6001 には無い命令の一つだと思います。
つまり、VRAM 6KB 分が丸ごとテープに保存されます。
そう、これです !! こういうのを探していたんです !!
で、今度はこんなプログラムを作ってみました。
10 SCREEN 4,1,1:CLS
20 FOR I=0 TO 3
30 FOR J=0 TO 6*1024-1
40 POKE &H6000+J,PEEK(I*1024*6+J)
50 NEXT
60 SSAVE "ROM"+RIGHT$(STR$(I),1)
70 NEXT
これは、ROM を 6KB に分割して 4 回に分けて VRAM に転送しテープに保存するプログラムです。
できました !! これで、BASIC やフォント ROM をテープに保存できました。
保存時間も 6KB につき 1 分 30 秒くらい、前回と比べてかなり早く保存できました。
さぁ、次はこれをなんとかして Windows に読み込みたいですね。
2004.3.30 SAVE ?
とりあえず、PHC-25 から Windows パソコンにデータを転送する手段を考えてみました。
PC-6001 の場合は RS-232C という選択肢がある上に、上位機種になると
フロッピィディスクも搭載しています。しかし、PHC シリーズは PHC-25 以降
MSX となってしまい上位機種が出ていません。しかも、RS-232C も無いです・・・。
そうすると、やはり、テープでの転送しかありません。そこで、調べてみると
SAVE 命令は BASIC のプログラムをセーブするためにしか使えないみたいです。
なので、バイナリデータの保存には使えなさそう・・・。
で、もっと調べてみると
PRINT #-1, n
がテープに書き込めるようなのでそれで以下のようなプログラムを作ってみました。
10 CLEAR 550
20 AD=&H0000
30 FOR I=0 TO 1024*24-1 STEP 128
40 D$=""
50 FOR J=0 TO 127
50 D$=D$+CHR$(PEEK(AD+J))
60 NEXT
70 PRINT #-1,D$
80 AD=AD+128
90 NEXT
で、早速、テープを入れて RUN !!
すると、90 分テープの片面を使い切ってしまい全部セーブできませんでした。
これではちょっと、遅すぎるかも・・・。音を聞いてると 128 バイト書き込むのに
14 秒ぐらいかかってる・・・。
う~ん、もっと考えないとなぁ・・・。
2004.3.29 PHC-25 仕様
いま判っている PHC-25 の仕様を書きます。
■本体
Z80 4MHz
ROM 24KB
RAM 16KB
VRAM 6KB
■メモリマップ
0000-4FFF BASICインタープリタ
5000-5FFF フォント
6000-77FF VRAM (6KB)
7800-7FFF 空領域
8000-BFFF 空領域
C000-FFFF RAM (16KB)
以上がすべてです。
ようするに何も判らないのです・・・。
マニュアルが無いのでこれ以上詳しいことが全く判りません。
なんとかしたいのですが、ROM を逆アセンブルするしかないかなぁ・・・。
しかし、PHC-25 から Windows にデータを転送する手段も無いので
今のところ手のうちようがありません。
PC-6001 のテープイメージ作成用のプログラムを何とかそのまま使えないかなぁ・・・。
まぁ、気長に調べることにしよう・・・。
2004.3.28 ごあいさつ
とりあえず Sanyo の昔のパソコン PHC-25 についてのページを作ってみました。
PHC-25 は PC-6001 互換機と言われているらしいけど、
実は BASIC コマンド、本体機能が似ているだけで互換性がありません。
PC-6001 で SAVE したプログラムは PHC-25 では読めませんし、その逆も同じです。
また、BASIC のコマンドにも互換性の無いものがあります。
私が小学生の頃に PC-6001 版の「はるみのゲームライブラリ」のカセットを
父に買ってもらったのですが、PHC-25 では読み込むことができず苦い思いをしたことがあります。
また、「こんにちはマイコン」の 2 巻のスカッシュテニスゲームも PHC-25 には
SCREEN 関数が無いため動作しませんでした。
VRAM を直接 PEEK で読み込めばいいと知ったのはかなり後でした。
と、まあ、私が小学 2 年生の頃の話です(笑)
この、PHC-25 がどのようなマシンだったか、
最近妙に知りたくなりいろいろ資料を集めていたのですがほとんどありません。
しかし、この度、なんとか PHC-25 本体を手に入れることができました。
なんと、専用シンセサイザ(PSG、別売)付きです。(嬉)
懐かしいこのパソコンをいろいろと調べてこのページに記していこうと思っています。
また、このパソコンに付いて何か情報がありましたら教えてください。
よろしくお願いします。
トップページに戻る