技術情報
mz700.vhd | ||||
│ | 各サブモジュール間の接続と、こまごました回路を含むトップモジュールです。 | |||
├ | T80s.vhd | |||
│ | ├ | T80.vhd | ||
│ | ├ | T80_ALU.vhd | ||
│ | ├ | T80_MCode.vhd | ||
│ | ├ | T80_Pack.vhd | ||
│ | └ | T80_Reg.vhd | ||
│ | OPENCORES で公開されているZ80互換IPコア、T80です。同期用ラッパーT80sを使っています。データバスの入出力が分かれており、このモジュールの外で双方向制御をしなくてすむのが楽でいいです。 | |||
├ | 8255.vhd | |||
│ | │ | インテル 8255 互換のモジュールです。周辺回路が決まっているため入出力方向設定など一部の機能を実装していません。 | ||
│ | └ | keymatrix.vhd | ||
│ | │ | PS/2キーボードからのキーコードをMZ-700のキーマトリクス状に並べたフリップフロップのON/OFFに変換します。AVRが処理するユーザI/F用に一部のキー入力を横取りしています。 | ||
│ | └ | ps2kb.vhd | ||
│ | PS/2キーボードからキーコードを受信するモジュールです。全く凝ってませんので、LEDの点灯とか一切やってません。Spartan-3時代のものとほとんど変わってません。 | |||
├ | 8253.vhd | |||
│ | ├ | counter0.vhd | ||
│ | ├ | counter1.vhd | ||
│ | └ | counter2.vhd | ||
│ | インテル8253互換のモジュールです。本物はあまりにモードが多くて実装がたいへんだったので、使用するモードのみに絞って実装しています。そのため、もしかするとうまく動かないプログラムがあるかもしれません。 | |||
├ | memsel.vhd | |||
│ | バンクメモリ制御レジスタと各メモリへのチップセレクト信号を生成するブロックです。 | |||
├ | ls367.vhd | |||
│ | 音楽再生のためのテンポ用クロック生成と、トーンジェネレータ(8253)動作制御を司るブロックです。水平ブランキング信号が必要な場合はここに追加することになります。 | |||
├ | sdram.vhd | |||
│ │ │ │ │ │ │ │ │ |
1chipMSXに搭載されている32MBの容量を持つSDRAMのコントロールを行います。SDRAMをアクセスするモジュールはこのモジュールを経由する必要があります。Z80などのプロセッサのアクセス速度に比べて桁違いに高速なので、複数のアクセスを調停してあたかもデュアルポートRAMのように振る舞えるようにしています。実際にはZ80とAVR-coreと画面出力モジュールとHAL研互換PCGモジュールがSDRAMを共有しており、コントローラもクアドラプル(4)ポートRAMとして動作します。どのポートもウェイトは必要ない設計になっています。 SDRAMは次の用途で使用されています。 ・Z80のメインRAM ・モニタROM ・CG-ROM ・HAL研互換PCG ・キャラクタVRAM ・MZ-1500互換PCG/グラフィックRAM ・AVR-coreの外部RAM(ワーク用) |
|||
├ | psio.vhd | |||
│ | ├ | avr_core.vhd | ||
│ | │ | ├ | AVR_Core_CompPack.vhd | |
│ | │ | ├ | SynthCtrlPack.vhd | |
│ | │ | ├ | AVRuCPackage.vhd | |
│ | │ | ├ | alu_avr.vhd | |
│ | │ | ├ | bit_processor.vhd | |
│ | │ | ├ | io_adr_dec.vhd | |
│ | │ | ├ | io_reg_file.vhd | |
│ | │ | ├ | pm_fetch_dec.vhd | |
│ | │ | └ | reg_file.vhd | |
│ | └ | avrrom.vhd | ||
│ | ├ | dpram8k.vhd | ||
│ | ├ | dpram4k.vhd | ||
│ | └ | rom.vhd | ||
│ | MZ-700単体では処理できないI/Oや周辺機器の模擬をするモジュールです。サブCPUとしてAVR-Coreを埋め込んで、SDカードアクセスとファイルシステムへのアクセス、コンフィグレーションPROMのアクセス、ユーザI/Fを担当させています。1chipMSXでの実装の要とも言えるモジュールになっているわけです。 AVR-coreはT80同様OPENCORESの成果物で、ATmega103相当のAVRとなっています。ここでは通常のAVRチップに含まれる周辺機能をほぼ全て取り去り、リセットでROMがすげ替わったりと好き放題してます。回路規模もコンパイル後のオブジェクトサイズも他のマイコンに比べてコンパクトであるというのが採用の理由です。 |
|||
├ | vgaout.vhd | |||
│ | ├ | dpram05k.vhd | ||
│ │ │ │ │ |
│ │ │ │ │ |
MZのVRAMからデータを拾って画面に表示するモジュールです。 まず出力できる画面は、1chipMSXの元々の仕様を踏襲する形で、15kHz規格のRGBディスプレイとコンポジット/Sビデオモニタに出力できるようにしました。切り替えは裏面のディップスイッチで行います。ディップスイッチの詳細はこちらを参照してください。 VRAMをSDRAMに設ける構造になっています。ついでに、いずれやる予定だったMZ-1500仕様のPCGやパレットも実装しています。実装のポイントは、一つのタイミングで取得すべきひとつの座標に割り当てられたデータを一度に取り出すことができるようVRAMなどをインターリーブ配置し、SDRAMからは2アドレスのデータを連続で出力させて最小限の時間でデータを揃えるようにしたところです。例えばひとつの座標にはVRAM1(MZ-700互換の文字コードを指す)、VRAM2(PCGのコードの一部)、アトリビュート1(MZ-700互換の色の割り付け)、アトリビュート2(PCGコードの残りとPCG表示許可など)があるのですが、これを連続した4アドレスに配置して、16bit×2データを取り出せば後の加工が楽になります。PCGも3プレーン分ありますので同様に並べて一度に取得します。CGROMのデータはPCGと同じ並びに置きますがPCGと同じアドレスではアクセスできないので別にアクセスします。とにかく、本来は別のメモリにあるものでも同じアドレスを指定してデータを取得するものはまとめられるというわけです。 SDRAMに3回アクセスしてようやく表示できるデータが揃うのですが、VGA表示での1文字(8ドット)分の時間では全く間に合わないので、バッファを用意してラインメモリとして使用するようにしています。このため、本物ではキャラクタ・PCG・背景色がプライオリティ設定に基づいて選択されながら出力しているところが、あらかじめバッファにプライオリティ込みで演算済みのデータを用意してしまうため、単純にデータを送り出すだけになっています。 |
||
│ | └ | vencode.vhd | ||
│ | 1chipMSX由来のコンポジットビデオエンコーダモジュールです。表示するドットの構成とエンコードアーキテクチャが合っていないので、解像度がかなり低くなっています。 | |||
├ | pll25.vhd | |||
│ | MegaWizardで作成したPLLモジュールです。21.47727MHzから25MHz(画面出力用)と85.9MHz(SDRAM用)を生成します。 | |||
├ | ckgen.vhd | |||
│ | 21.47727MHzから3.58MHzを生成します。 | |||
└ | pcg.vhd | |||
HAL研互換PCG機能をサポートするモジュールです。 |
![]() |
![]() |
![]() |
(C) Nibbles Lab. 2007