前項のクロック追加及び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行目
セコメントをする