1ChipMSX クロック追加及びWait回路調整2016年08月11日 00:00

前項のクロック追加及びWait回路調整のソース修正箇所
元ソースはHRA! 氏の1chipMSX改 開発最新版(2008/07/12 24:27)

この修正により、DIP-SW6の意味が変わり
ON->クロック3.58MHzと10.72MHzで切り替え
OFF->クロック3.58MHzと7.16MHzで切り替え
初期値は両方とも3.58MHz設定、F12で切り替えとなる。

7.16MHz時、スロットアクセス時のWaitは1クロックでも良いのだけれど、16MBカートリッジを使用する際、2クロック入れているとなぜか内蔵メモリと外部メモリのアクセス速度がほぼ同等(3.58MHz対比で内部:165.31%と外部:164.82%)となるので2クロックとしてみた。
※ちなみに1クロックだと3.58MHz対比で内部:190.16%と外部:164.82%だった。増設メモリは速度限界?

また、Wait回路だけど16M増設メモリをスロットにさしていると正常に動作しなかった(CPUに対してWait発行しても無視されてた)ので回路の切り離しを行って確実にWaitが発行されるよう修正した。
想像だけど、WaitはCPUからカセットまで直結しているのでカセット内のプルアップとFPGA内のWait回路が競合してWait回路側で論理値0に落としても電圧下がらないんだと思われる。


クロックモード追加&Wait回路調整

one_chip_msx_board\emsx_top.vhd
511行目辺り(追加)

                   ↓
	SIGNAL CPU_WAIT		: STD_LOGIC;


604行目
				IF( CLKMODE = '0' )THEN
					FF_CLKSEL <= FF_CLKMODE;
				ELSE
					FF_CLKSEL <= NOT FF_CLKMODE;
				END IF;
                   ↓
--				IF( CLKMODE = '0' )THEN
					FF_CLKSEL <= FF_CLKMODE;
--				ELSE
--					FF_CLKSEL <= NOT FF_CLKMODE;
--				END IF;

614行目
	PCPUCLK <=	CPUCLK		WHEN( FF_CLKSEL = '0' )ELSE
				CLKDIV(0);
                   ↓
	PCPUCLK <=	CPUCLK		WHEN( FF_CLKSEL = '0' )ELSE	--:3.58MHz
				CLKDIV(0)	WHEN( CLKMODE = '1' AND FF_CLKSEL = '1' ) ELSE	--DIP_SW6=ON:10.72MHz
				CLKDIV3(1);								--DIP_SW6=OFF:7.16MHz


765行目
			COUNT		:= (OTHERS => '0');
			PSLTWAIT_N	<= 'Z';
		ELSIF (PSLTCLK'EVENT AND PSLTCLK = '1') THEN

			IF (PSLTMERQ_N = '0' AND JSLTMERQ_N = '1') THEN
				IF( FF_CLKSEL = '1' )THEN
					COUNT := "0010";
				END IF;
			ELSIF (PSLTIORQ_N = '0' AND JSLTIORQ_N = '1') THEN
				IF( FF_CLKSEL = '1' )THEN
					COUNT := "0011";
				END IF;
                   ↓
			COUNT		:= (OTHERS => '0');
			CPU_WAIT	<= '1';
		ELSIF (PSLTCLK'EVENT AND PSLTCLK = '1') THEN

			IF (PSLTMERQ_N = '0' AND JSLTMERQ_N = '1') THEN
				IF( CLKMODE = '1' AND FF_CLKSEL = '1' )THEN
					COUNT := "0010";
				ELSIF ( CLKMODE = '0' AND FF_CLKSEL = '1' ) THEN
					COUNT := "0010";
				END IF;
			ELSIF (PSLTIORQ_N = '0' AND JSLTIORQ_N = '1') THEN
				IF( CLKMODE = '1' AND FF_CLKSEL = '1' )THEN
					COUNT := "0011";
				ELSIF ( CLKMODE = '0' AND FF_CLKSEL = '1' ) THEN
					COUNT := "0010";
				END IF;

781行目
			IF (CPUM1_N = '0' AND ICPUM1_N = '1') THEN
				PSLTWAIT_N <= '0';
			ELSIF (COUNT /= "0000") THEN
				PSLTWAIT_N <= '0';
			ELSIF (FF_CLKSEL = '1' AND OPLLREQ = '1' AND OPLLACK = '0') THEN
				PSLTWAIT_N <= '0';
			ELSIF (ERMREQ = '1' AND ADR(15 DOWNTO 13) = "010" AND MMCACT = '1') THEN
				PSLTWAIT_N <= '0';
			ELSIF (SDPAUS = '1') THEN
				PSLTWAIT_N <= '0';
			ELSE
				PSLTWAIT_N <= 'Z';
			END IF;
                   ↓
			IF (CPUM1_N = '0' AND ICPUM1_N = '1') THEN
				CPU_WAIT <= '0';
			ELSIF (COUNT /= "0000") THEN
				CPU_WAIT <= '0';
			ELSIF (FF_CLKSEL = '1' AND OPLLREQ = '1' AND OPLLACK = '0') THEN
				CPU_WAIT <= '0';
			ELSIF (ERMREQ = '1' AND ADR(15 DOWNTO 13) = "010" AND MMCACT = '1') THEN
				CPU_WAIT <= '0';
			ELSIF (SDPAUS = '1') THEN
				CPU_WAIT <= '0';
			ELSE
				CPU_WAIT <= PSLTWAIT_N;
			END IF;

1344行目
		WAIT_N		=> PSLTWAIT_N,
                   ↓
		WAIT_N		=> CPU_WAIT,

コメント

_ れふてぃ ― 2016年12月12日 23:37

こんばんは~。
MAD研究所非公認出張所にてたまにお見かけしてこちらに来てみました。1ChipMSXについていじってみたいけどVHDLの敷居が高く、コンパイル程度は出来ても改変まではなかなか手を出せずにいます。
某パッチ当ての権威の方に1ChipMSXのDISKROMを128kBに出来ないかと聞かれたのですが、私の知識ではさっぱり分からず、お力を借りられればと思い書き込みさせて頂きました。
emsx_top.vhdを書き換えればなんとかなりそうだとは思うのですが・・・どのようにすれば良いかご教授頂けませんでしょうか。
師走で忙しいと思いますので、ご都合がつかなければこの書き込みは無視してく頂いて大丈夫です(^-^)
よろしくお願い致します。

_ ゆうくん ― 2016年12月15日 00:11

ども、初めまして。
れふてぃさんのページ、よく参考にさせていただいてます!

ところで、ご質問の

>某パッチ当ての権威の方に1ChipMSXのDISKROMを128kBに出来ないかと聞かれたのですが、
>私の知識ではさっぱり分からず、お力を借りられればと思い書き込みさせて頂きました。

の件ですが、ちょっと難しいのかな、と思います。

128KのDISKROMってことですが、64K超えているので直接スロットに割り当て出来ないですよね?
とりあえず私の認識では
・1ChipMSXのDISKROM(SLOT3-2に割り当てられているDOS2ROM)は通常のDISKROMではなく、実態はDOSROMにパッチを当てたと思われるMEGASDのROM
・=1ChipMSXは内部的にMEGASD(megasd.vhd)を内蔵
・上記からノーマルのDISKROMはそのままの1ChipMSXでは動作しない

って感じかと思います。(勘違いあるかもしれませんが…)

128KBのDISKBIOSがどの様なものかはわかりませんが、理屈上MEGASDの代わりにそれに合致するデバイスを内部増設すれば動く、のかな?

_ ゆうくん ― 2016年12月15日 23:26

パッチ当ての権威の方のページを参照して何をしようとしているのか大体把握しました。
そんなに難しく考えなくてもいいのかな?

とりあえず、BIOSのロードされるメモリ位置をずらして
Nextor-2.0.4.StandaloneASCII8.rom(128K)+KANJIROM(128K)+MAIN.ROM(32K)+SUBROM(16KB)+FMBIOS(16K)という構成のBIOSをSDから読み込ませたところ
NextorBASICが起動するところまでは確認できました。

もっともこの状態では1ChipMSXのSDCARDが使えないのでNextorOS起動までは確認できていません。

こんな感じでいいんでしょうか?

取り敢えず、テストに使ったファームとソースの差分(HRA氏の開発最新版(2008/07/12 24:27)ベースです)あげておきますので参考にしてください。

BIOS結合は1ChipMSX標準と変えているので前述の順序で。

_ ゆうくん ― 2016年12月15日 23:52

URL付け忘れてました。
とりあえずこんな感じでどうでしょう?
使えるといいのですが…

_ ゆうくん ― 2016年12月16日 20:10

追加で情報を…

上で書いたNextor-2.0.4.StandaloneASCII8.rom(128K)+KANJIROM(128K)+MAIN.ROM(32K)+SUBROM(16KB)+FMBIOS(16K)
の構成のBIOSで起動したNextorBasicでCALL FDISK実行したらPartitionningToolのメニュー出ました。
PartitionningToolのメニューはバンクA-B(80KB~)とのことなので、64KB以上の部分もきちんと読み込めている?

あ、あと少なくともHRA!氏の改造ファームではSDからBIOS読ますときはファイル名関係ないみたいです。
それどころか、Windowsでファイル削除しても普通にBIOS読み込みます。
セクタ直接見てるんでしょうね。

ですので、いろいろ試すときは一度0埋めした大きなファイル書き込むの推奨で。

今回みたいな順番変えたBIOSとかサイズ違いのBIOSを入れ替えてテストする場合、前の書き込みが影響する場合があります。
※テストしてる間、それで一度はまりかけました。どう考えても起動しないはずのBIOSで普通に起動してしまうとか…

_ れふてぃ ― 2016年12月17日 00:59

こんばんは、ご連絡が遅くなり申し訳ありません。
DISK.ROMは64kBですが、ページ1にアロケイト?されるはずなので、メガロムコントローラっぽい制御はしているのだろうと考えていました。
と、返事を書こうとしているうちにあっという間に作られてしまって・・・ありがとうございます。明日、早速テストしてみます。
確認したらまたご報告します。

BIOS読み込みの件もありがとうございます。変な動作をすることがあった気がしたので、恐らくそれなのでしょう。隠し機能なだけに色々謎が・・・まぁ、それも面白いのですが。

_ れふてぃ ― 2016年12月19日 00:14

こんばんは、またまた遅くなり申し訳ありません。

何故かこちらの1chipMSX(純正)がうまく動かず試行錯誤中です。
#1 HRAさんのオリジナル:起動OK(SD不使用)
#2 頂いたテスト用POF + SD(テストDISKROM+MSX2P ROMs):起動せず。
#3 頂いたテスト用POF + SD(テストDISKROM+MSX2 ROMs):起動せず。
#4 頂いたテスト用POF + SD(MSXDOS2.ROM+64kB Dummy +MSX2 ROMs):起動せず。
となって、う~む、と・・・。
SDカード(64MB)が悪いのかと思いSDアソシエーションのフォーマットツールでフォーマットもしてみたのですが。

1ChipMSXをいじるのはちょっと久しぶりなので何か抜けているのかも・・・ちょっと頭を冷やしてもう一度やってみます。

_ ゆうくん ― 2016年12月19日 07:32

>何故かこちらの1chipMSX(純正)がうまく動かず試行錯誤中です。

あれれ?
こっちが何かミスしてるのかな?

とりあえず、こっちでテストに使ったBIOSアップしてリンクをメールしときました。

またこちらでも確認してみます。

_ ゆうくん ― 2016年12月21日 20:18

OKEI様
れふてぃさんよりこちら参照して下さっているとのことでコメントします。
れふてぃさんにお渡しした検証用のファーム(BIOS内蔵)とテスト用のファーム一式アップしました。

よろしければお使いください。

_ OKEI ― 2016年12月21日 21:27

こんばんは。

ファーム一式いただきました。
明日ゆっくりテストさせて頂きます。

_ ゆうくん ― 2016年12月22日 00:07

受け取っていただけたようなので検証ファーム一式は一旦公開停止しました。
また必要な時は遠慮なくお声がけください。

_ OKEI ― 2016年12月22日 20:12

頂いたファーム、試してみたのですが問題が・・・
何故か画面が表示されません。
使っている1chipMSXはアソシエーションの製品版、SONYの液晶モニタにVGA出力端子でつないでいます。

HRAさんのPOFファイルは2008/5/11版は起動しますが、2008/7/12版は起動しません。でも頂いたファームはHRAさんのソースを書き換えたのではないんですよね。

emsx_top_dos128.pofは画面が表示されないだけで動いています。
filesなんて入力するとSD/MMCランプが点滅します。
画面が表示されればとVGAをあきらめてSで繋いだら今度は画面が流れてしまって、DIPスイッチを切り替えれば良いのかな?

もう少し試行錯誤してみます。

_ ゆうくん ― 2016年12月22日 21:04

>HRAさんのPOFファイルは2008/5/11版は起動しますが、2008/7/12版は起動しません。
>でも頂いたファームはHRAさんのソースを書き換えたのではないんですよね。
すみません、その2008/7/12版ベースになります。

>画面が表示されればとVGAをあきらめてSで繋いだら今度は画面が流れてしまって、
>DIPスイッチを切り替えれば良いのかな?
とりあえず、PrintScreenキーで出力モードきり帰れたと思いますので試してみていただけますか?

また、2008/5/11版なら動作するとのことですので、そちらベースのDISKROM拡張版を作成しています。
コード修正は終わっているので何パターンか動作確認したらまたここにアップしますね。

う~ん、やっぱりオリジナルの1ChipMSX手に入れ損ねたのが痛いなぁ…

_ ゆうくん ― 2016年12月22日 23:44

OKEIさん
2008/5/11版ベースの改造ファーム、こちらでの確認できましたのでアップしました。
これで安定してくれるといいのですが…

ちなみにこちらの環境は
M.A.D.さんのところの評価ボード+LCD-8000V
モニタ出力は31KHzモード、DIPは10001000
にて起動確認行っています。

_ ゆうくん ― 2016年12月23日 00:37

評価用ファーム、ちょっと作り直しました。
今まで
Nextor-2.0.4.StandaloneASCII8.rom
を使っていたのですが
Nextor-2.0.4.MegaFlashSDSCC.rom
を組み込んだ版も作成してみました。
前の書き込みのファームにファイル追加したものになります。

_ OKEI ― 2016年12月23日 20:34

ゆうくんさん、仕事が速いですね。
2008/5/11版ベースのファームは無事に起動できました。
MSXの規格を超えた内蔵DiskROM 128kb、それをあっという間に作ってしまうのですから凄いです。ありがとうございました。

NEXTORが起動して感激なのですが、少し問題が残っています。
1.初めにSDカードを入れておかないとドライブを確保しない。
2.初めに入れるSDは2GB以下のカードじゃないとダメ。

1はNEXTORにパッチを当てれば解決できそう。
2に関しては1chipMSXのソース?を書き換えないとダメそう。
起動時にSDカードが入っていたらBIOSの有無を確かめるんですよね。その時のSDカードアクセスがSDHCに対応していません。
たぶん。
当時はSDHCなんて無かった?

3連休が終わったら色々やってみます。

_ ゆうくん ― 2016年12月24日 12:08

>2008/5/11版ベースのファームは無事に起動できました。
動いたようで何よりです。

>2.初めに入れるSDは2GB以下のカードじゃないとダメ。
こちらは、iplrom.vhdに含まれてるROMイメージが処理してるはずなんですけど、HRAさんのページの解析結果によるとDOSを介さず直接FAT見てるみたいなんですよね。
HRAさんのソースの中にはROMイメージを逆アセンブルしたものもあって、それをざっと読むとブートセクタからパラメータ直接読んで(BPB_RsvdSecCnt、BPB_RootEntCnt、BPB_NumFATs、BPB_FATSz16辺り? よくわからない…)BIOSファイルの読み取り位置決定とやっているようです。
で、先頭が’AB’だったらBIOSと判定と。

SDHC(というか、パーティション切っているドライブの場合)その読み取り位置決定がうまく動いていないんだと思います。

と、予想は立てたんですけど、ROMイメージ相手だとどこをどういじればいいのか判らず…

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
答えは「MSX」です。

コメント:

トラックバック

このエントリのトラックバックURL: http://miyako.asablo.jp/blog/2016/08/10/8149472/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。