[1chipMSX]

[HDL] 緑LEDのナイトライダー風表示をやめて、右端のみ SD/MMCアクセスランプにする

emsx_top.vhd を修正する。
下記の部分で、赤が追加、青はコメントアウト(行頭に -- を付ける)。

----------------------------------------------------------------
-- Operation mode
----------------------------------------------------------------
 process(clk21m)

  variable seq : std_logic_vector(3 downto 0) := (others => '0');
  variable cnt : std_logic_vector(20 downto 0) := (others => '0');

 begin

  if (clk21m'event and clk21m = '1') then

   if (reset = '1') then
    SelfMode <= '1';        -- Operation mode : 0=slave, 1=master
    pLedPwr  <= seq(0);      -- Reset status, factory use
   else
    pLedPwr  <= '1';
--   pLedPwr  <= not MmcEna;    -- SD/MMC access lamp
   end if;

   if (seq(3 downto 1) = "000") then
    RstEna  <= '0';
   else
    RstEna  <= '1';
   end if;

   if (cnt = "000000000000000000000") then -- 21.48MHz / 2^21(approx:2M) => 10Hz
--    case seq is
--     when "0010" => pLed <= "000000Z1"; iDipLed(2) <= not pDip(2);
--     when "0011" => pLed <= "0000001Z"; iDipLed(1) <= not pDip(1);
--     when "0100" => pLed <= "000001Z0"; iDipLed(0) <= not pDip(0);
--     when "0101" => pLed <= "00001Z00"; iDipLed(1) <= not pDip(1);
--     when "0110" => pLed <= "0001Z000"; iDipLed(2) <= not pDip(2);
--     when "0111" => pLed <= "001Z0000"; iDipLed(3) <= not pDip(3);
--     when "1000" => pLed <= "01Z00000"; iDipLed(4) <= not pDip(4);
--     when "1001" => pLed <= "1Z000000"; iDipLed(5) <= not pDip(5);
--     when "1010" => pLed <= "Z1000000"; iDipLed(6) <= not pDip(6);
--     when "1011" => pLed <= "0Z100000"; iDipLed(7) <= not pDip(7);
--     when "1100" => pLed <= "00Z10000"; iDipLed(6) <= not pDip(6);
--     when "1101" => pLed <= "000Z1000"; iDipLed(5) <= not pDip(5);
--     when "1110" => pLed <= "0000Z100"; iDipLed(4) <= not pDip(4);
--     when "1111" => pLed <= "00000Z10"; iDipLed(3) <= not pDip(3);
--     when others => pLed <= "ZZZZZZZZ"; iDipLed  <= not pDip  ;
--    end case;
    iDipLed <= not pDip;
   end if;

   pLed  <= MmcEna & "0000000";

   if (cnt = "000000000000000000000") then
    if (seq = "1111") then
     seq := "0010";
    else
     seq := seq + 1;
    end if;
   end if;

   cnt := cnt + 1;

  end if;
 end process;

QuartusII がインストールされていれば、emsx_top.qpf をダブルクリックすることで統合環境が起動する。
QuartusII で Processing → Start Compilation (Pentium4-3EGHz なマシンで10分くらいかかる。気長に待つべし。)して、Error が出ないことを確認。
念のため、出来上がった emsx_top.pld ファイルの更新日時を確認しておく。
QuartusII で File → Convert Programming Files ... する。
出てきたダイアログで、Open Conversion Setup Data ... ボタンをクリックして、emsx_top.cof を開く。
Generate をクリックして emsx_top.pof ファイルを更新する。
コマンドプロンプトを起動して pof2pld.exe を使って emsx_top.pof を emsx_top.pld へ変換する。
念のため、バイナリエディッタで emsx_top.pld を開いてみて、ファイルの最後が 少しの 00 になってるのを確認する。
(Convert Programming Files ... 以降の作業を忘れると 大量の FF になってる。)
念のため、再度、出来上がった emsx_top.pld ファイルの更新日時を確認しておく。
emsx_top.pld と pldload.com と MSXDOS2.SYS, COMMAND2.COM 等を SDカードにコピーする。
1chipMSX に、その SDカードを挿入して起動し、A>set expert on する。
次に A>PLDLOAD EMSX_TOP.PLD する。
ドットがたくさん表示されてコマンドプロンプトに戻るまで、辛抱する。
ドット表示中に電源を切ったり、リセットしたりすると正常に起動しなくなるので注意すること。
間違えたファイルを書き込んでしまった場合も、落ち着いてコマンドプロンプトに戻るまで待ち、電源OFFやリセットせずに続けざまに正しいファイルを書き込み直せば復活できるはず。

※誤った PLD を書き込むと 1chipMSX が、MSXとして起動しなくなります。書き込みは各自の責任のもとで行ってください。
コンフィグROM の内容を誤って破壊してしまったとしても、誰も責任を取りません。くれぐれも慎重に。

[▲上へ]