ushicow

Apple II やその関連コンピュータ用のハード・ソフトを作っています。

ushicow

Apple II やその関連コンピュータ用のハード・ソフトを作っています。

マガジン

  • Tang Nano 9K で Apple II を再現する

    Apple II をより詳しく知るために、FPGA に実装してみます。

最近の記事

  • 固定された記事

Tang Nano 9K で Apple II を再現する(1)クロック生成

FPGA での Apple II の実装はいくつかありますが、自分でもやってみます。 Apple II の回路を、SystemVerilog で愚直に書き下すことにします。 参考文献として、The Apple II Circuit Description を使います。 第三章 Clock Generator and Horizontal Timing 14.31818 MHz のマスタークロックから、以下のクロックを生成します。 COLOR REF (3.58MHz)

    • Tang Nano 9K で Apple II を再現する(17)ローレゾモード

      第八章 The Video Display ローレゾモードの動作を確認します。 $800 - $BFF に $92 を書き込み、テキストモード OFF ($C050)、ミックスモード OFF ($C052)、PAGE2 ON ($C055) に設定し、信号を取り込みます。 *800:92 *801<800.BFFM*C050*C052*C055 画面左端のブランキング信号 C14-6 が LOW になるタイミングで、ビデオアドレスが画面右端に対応するスクリーンメモリに更

      • Tang Nano 9K で Apple II を再現する(16)ハイレゾモード

        第八章 The Video Display ハイレゾモードの動作を確認します。 $2000 - $3FFF に $13 を書き込み、ハイレゾモードを ON ($C057)、ミックスモードを OFF ($C052)、テキストモードを OFF ($C050) にして、信号を取り込みます。 *2000:13*2001<2000.3FFFM *C057*C050*C052 画面左端のブランキング信号 C14-6 が LOW になるタイミングで、ビデオアドレスが画面右端に対応する

        • Tang Nano 9K で Apple II を再現する(15)テキストモード

          第八章 The Video Display テキストモードの動作を確認します。 画面右端にノーマルモードで A を表示し、信号を取り込みます。 画面左端のブランキング信号 C14-6 が LOW になるタイミングで、テキストアドレスが 000 となります。 RAM から、文字 A に対応するコード $C1 が読み込まれます。 キャラクタージェネレータから縦位置(VA、VB、VC)対応したビットパターンが出力され、シフトレジスタ A3 に読み込まれます。 A3 CLO

        • 固定された記事

        Tang Nano 9K で Apple II を再現する(1)クロック生成

        • Tang Nano 9K で Apple II を再現する(17)ローレゾモード

        • Tang Nano 9K で Apple II を再現する(16)ハイレゾモード

        • Tang Nano 9K で Apple II を再現する(15)テキストモード

        マガジン

        • Tang Nano 9K で Apple II を再現する
          17本

        記事

          Tang Nano 9K で Apple II を再現する(14)ビデオディスプレイ

          第八章 The Video Display 回路図 C-16 と C-20 を video_generator.sv として実装します。 `default_nettype nonemodule a2_video_generator ( input wire clk_14m, input wire clk_7m, input wire clk_7m_n, input wire ldps_n, input wire ld194, input

          Tang Nano 9K で Apple II を再現する(14)ビデオディスプレイ

          Tang Nano 9K で Apple II を再現する(13)ゲーム I/O

          第七章 On-Board I/O ゲームスイッチ SW0、SW1、SW2 は、抵抗で 5V を 3.3V に分圧し Tang Nano 9K の入力ポートに接続します。 ゲームパドル入力 PDL0、PDL1、DPL2、PDL3 は、タイマー IC で抵抗値に比例してパルス幅を変化させます。4 回路の 558 は入手困難なため、2 回路の 556 を二つ使いました。 アナンシエータ AN0、AN1、AN2、AN3 およびゲームユーティリティストローブ出力 /STB は、直

          Tang Nano 9K で Apple II を再現する(13)ゲーム I/O

          Tang Nano 9K で Apple II を再現する(12)カセットテープ & スピーカー

          第七章 On-Board I/O カセットテープ出力 data_out は、抵抗により 3.3V から 32mV に分圧します。 カセットテープ入力 data_in は、外付けのオペアンプによりデジタル化します。 オペアンプは、単電源で使える LM358N を使いました。ゼロクロス検出器として動作します。 LTspice でのシミュレーション結果を示します。 スピーカーは、圧電スピーカーを直接 Tang Nano 9K の出力ポートにつなぎました。 参考文献 オペア

          Tang Nano 9K で Apple II を再現する(12)カセットテープ & スピーカー

          Tang Nano 9K で Apple II を再現する(11)キーボード

          第七章 On-Board I/O USB シリアルをパラレル信号に変換する Arduino プログラム A2Keyboard.ino を作成します。 Arduino の D2 - D8 ピンに Apple II Keyboard B1 - B7 を、D9 ピンに STROBE 信号を割り当てました。 リセットキーは、Tang Nano の S2 (Pin 3) を割り当てました。 // Serial to Apple II keyboard#define b1_pin 2

          Tang Nano 9K で Apple II を再現する(11)キーボード

          Tang Nano 9K で Apple II を再現する(10)内蔵入出力

          第六章 The 6502 and System Bus 回路図 C-12 と C-13 を onboard_io.sv として実装します。 `default_nettype nonemodule on_board_io ( input wire [15:0] ad, input wire ph0, input wire h12_15, output wire text_mode, output wire mix_mode, output

          Tang Nano 9K で Apple II を再現する(10)内蔵入出力

          Tang Nano 9K で Apple II を再現する(9)拡張スロット

          第六章 The 6502 and System Bus 回路図 C-11 を peripheral_io.sv として実装します。 `default_nettype nonemodule peripheral_io( input wire [15:0] ad, input wire ph0, input wire f12_15, output wire h12_15, output wire [7:0] iosel_n, output

          Tang Nano 9K で Apple II を再現する(9)拡張スロット

          Tang Nano 9K で Apple II を再現する(8)ROM

          第六章 The 6502 and System Bus Apple II の ROM は、最大 6 個の 2K バイトマスク ROM 9316B で構成され、12K バイトのスペースを使用します。 Tang Nano 9K の BSRAM は、2K バイト単位で 26 個のブロックが使用できます。RAM 用に24 ブロック使うと、残り 2 ブロック(4K バイト)しかありません。そのため、F0 と F8 ROM を SSRAM(ROM16)、E0 と E8 を BSRAM(

          Tang Nano 9K で Apple II を再現する(8)ROM

          Tang Nano 9K で Apple II を再現する(7)6502

          第六章 The 6502 and System Bus 6502 マイクロプロセッサの FPGA での実装はいくつかありますが、Verilog 6502 を使わせてもらうことにしました。 トランジスタレベルでの解析結果をもとに、半自動で Velrilog のコードに置き換えたとのことです。 回路図 C-9 を microprocessor.sv として実装します。 `default_nettype nonemodule microprocessor ( outp

          Tang Nano 9K で Apple II を再現する(7)6502

          Tang Nano 9K で Apple II を再現する(6) アドレスマルチプレクサ

          第五章 The Memory System 後半 Apple II では、φ0 で、6502 と Video のアドレスを切り替えて共有しています。 アドレスの下位 14 ビットは、AX 信号で二つの 7 ビットアドレスに分割され、4116 の ROW と COLUMN アドレスになります。 /RAS の立ち下がりで ROW アドレスが、/CAS の立ち下がりで COLUMN アドレスが確定します。 回路図 C-5 と C-6 を memory_address.sv

          Tang Nano 9K で Apple II を再現する(6) アドレスマルチプレクサ

          Tang Nano 9K で Apple II を再現する(5) メモリアレイ

          第五章 The Memory System 前半 4116 DRAM を dram.sv として実装します。ロジックで組みたいところですが、フリップフロップが足りないので、BSRAM を使います。 `default_nettype nonemodule dram ( input wire clk, input wire [6:0] a, input wire wr_n, input wire [7:0] din, input wire ras

          Tang Nano 9K で Apple II を再現する(5) メモリアレイ

          Tang Nano 9K で Apple II を再現する(4)ビデオタイミング

          第四章 Video Timing 後半 回路図 C-20 のビデオ信号生成部を video_generator.sv として実装します。 `default_nettype nonemodule a2_video_generator ( input wire color_ref_n, input wire text_mode, input wire h2, input wire h3, input wire h4, input wire

          Tang Nano 9K で Apple II を再現する(4)ビデオタイミング

          Tang Nano 9K で Apple II を再現する(3)垂直タイミング

          第四章 Video Timing 前半 回路図 C-3 の残りの垂直信号生成部を video_address.sv に加えます。 第二回で示したコードには、74LS161 の RC 信号に誤りがあったので修正してあります。 `default_nettype nonemodule a2_video_address ( input wire ldps_n, output wire h0, output wire h1, output wire h2,

          Tang Nano 9K で Apple II を再現する(3)垂直タイミング