Imported from GitHub: DNMIAN/SORD_M5_MMSD · commit 07a19c7 · license MIT
Description
SORD m5でROM/RAMメモリマッパー、SDの読み書きを実装します
README
SORD m5 メモリマッパー (+SD)

注意
・m5 Jr.に挿せるかは検証できていません。
・純正電源で動作するかは確認できていません。(外部電源入力は可能)
- 概要
本ハードウェアは、SORD m5(および互換PC)に、ROMを512Kバイト、RAMを512Kバイトを拡張する装置です。
各メモリは16Kバイト単位のセグメントに分割され、ROM32ページ、RAM32ページとして管理します。
CPUのメモリ空間64Kバイトを16Kバイト単位で4分割し、CPU空間0~3とします。
それぞれのCPU空間について、任意のページを対応させることができます。
(いわゆるMSXのメモリマッパーです)
また、yanatakaさんのMSX_SD ver1.6 (https://github.com/yanataka60/MSX_SD) を使用することを目的とした、
MSXカートリッジI/F(以降、MSX-I/F)を備えています。
- 製作について
組み立て以外に、EPROM書き込みが必要です。
また、MSX_SDのドキュメントも必ず読みましょう。
MSX_SDはArduinoスケッチ書き込みが必要です。
- 基板、部品リスト
回路図とガーバーデータはKiCad7.0で作成しています。
動作確認をした部品リストを、以下に示します。
74HCをLSにした場合、動作しない可能性があります。
U1,U2 : 74LS670 x2
U3 : 74HC244
U4 : HM628512ALP-7
U5 : 512Kx8bit以下 DIP32 EPROM(M27C4001-10F1,W27C010-70で確認)
U6 : 74HC20
U7 : 74HC00
U8 : 74HC30
U9 : 74HC139
CON : カードエッジコネクタ 2x25P 2.54mm
C1~C9 : 積層セラミックコンデンサ 50V 0.1uF x9
C10 : 電解コンデンサ 16V 100uF
RN1 : 集合抵抗 6素子 10kΩ
R1 : 抵抗 10kΩ
SW1,SW2 : タクトスイッチ TVDP17-050B-D x2
EX5V : ピンヘッダ 1x2P 2.54mm
EX12V,GND : ピンヘッダ 1x3P 2.54mm
EXIO,A4~A7 : ピンヘッダ 1x3P 2.54mm x5
ICソケット : DIP32(U5用)
ジャンパーピン : 2.54mm(EX5V,EXIO,A4~A7用) x6
MSX_SD ver1.6 : 基板は公開されているガーバーから作成
U1 : 74HC02
U2 : 74HC138
U3 : W27C512-45Z(後半32KBを使用) ※MSXで動作確認時に使用
U4 : uPD8255AC-5
U5 : Arduino Pro Mini 328 5V 16MHz(ピンヘッダ付属)
J3 : MicroSD Card Adapter
C1~C4 : 積層セラミックコンデンサ 50V 0.1uF x4
C5 : 電解コンデンサ 16V 100uF
D1 : ダイオード 1N4148
ピンヘッダ : 1x2P 2.54mm(Arduino A4,A5用)
ICソケット : DIP28(U3用)
microSDカード : 2GB

- ジャンパー設定
基板上にあるジャンパーついての説明です。
EXIO,A4~A7ジャンパーは●側をショート、EX5V-5Vもショートしてください。(計6箇所)

EXIO : MSX-I/Fの/IORQを、選択(/EXIOA or /EXIOB)します。m5は7xHを使用するので/EXIOBを設定します。
A4~A7 : アドレスバスA4~A7を選択します(H or L)、これは使用するMSXカートリッジの仕様に強制的に合わせるものです。MSX_SDのIOポートは、38H~3BHなので、A7L, A6L, A5H, A4Hを設定します。
EX5V : MSX-I/Fの5V供給を選択します。5Vとショートでm5から供給です。外部供給する場合、ジャンパーを外して、EX5V側へ5Vを接続します。
5V : m5供給の5Vです。
EX12V : MSX_SDでは使用しません。ジャンパーはしないでください。MSX-I/Fに±12Vが必要な場合は、それぞれのピンから外部供給できます。
GND : 外部供給時のGNDを接続します。
m5カートリッジバスの/IORQは、6xHアクセスで/EXIOA、7xHアクセスで/EXIOBがアサートされます。
アドレスをそのままMSX-I/Fに出力した場合、MSXカートリッジは60H~7FHまでのIO機器しか使用できません。
MSX_SDは38H~3BHを使用します。
上位4bitを3(0011b)に固定することで、m5での78Hアクセスを、MSX-I/Fでは38Hアクセスに見せかけます。
この仕組みを使用して、他のIOカートリッジを動作させることができるかもしれません。
(MSX-MUSICの7CH,7DHを、6CH,6DHでアクセスするなど(メモリマッパー7CH~7FHとの競合回避))
- Arduinoスケッチについて
MSXM5_SD.inoファイルを使用してください。
MSX_SD.inoにm5処理を追加しているので、そのままMSXでも動作します。
- ROMについて
メモリマッパーに実装するROMは、4Mbit(M27C4001, AM27C040, W27E040など), 2Mbit, 1Mbit等の
32ピンDIPパッケージが使用可能です。(容量が少ない場合は、サイズ毎にページ内容がミラーされます)
MSX_SD上のROMは使用しません。m5のみで使用なら実装する必要はありません。
- マッパーセグメントの切替について
CPU空間0~3の対応は、マッパーセグメント選択レジスタによって決められます。
マッパーセグメント選択レジスタは、I/Oアドレスの7CH番地から7FH番地までの4バイトです。
レジスタ値は00H~1FHでROM, 20H~3FHでRAMを選択します。
電源投入後の初期値は、全レジスタ値ともに不定のため、マッパーセグメント選択レジスタに書き込むまでは
強制的に無効(全レジスタ値=00H扱い)する機能を実装しています。
このため、ROMの0ページに適切な初期化処理を配置するのが良いでしょう。
また、m5のハードウェア制約により、ページ0の0000H~1FFFHはIPLROM、ページ1の7000~7FFFHは内蔵RAMに固定されます。
m5のブートシーケンスは、詳細は書きませんが、起動時に2000Hから 02 xx yy zz vv のコードがあれば、vvzzを呼び出します。
vvzzから復帰後、yyxxを呼び出しますが、復帰しないプログラムならyyxxを設定する必要はありません。
よって、ページ0の2000Hからマッパー初期化処理を配置することになります。
しかし、実行中のコードがあるページを切り替えると、コードがすり替わってしまい想定外の動作となるため、
別ページで切替処理を実行する必要があります。
電源投入時は全ページ0となっているため、2000Hからのコードは、6000H, A000H, E000Hでもアクセスすることができます。
これを利用して、例えばAxxxHへ分岐して、そこでページ0のマッパー設定を行うと良いように見えますが、これは間違いです。
前述にある「強制的に無効」する機能は、マッパーレジスタに書き込みを行うことで、解除されます。
よって、解除された瞬間に、不定レジスタ値でページが切り替わってしまう可能性があります。
これを回避するため、最初はページ0のレジスタ値を0に更新します。
その後、ページ1,2,3のレジスタ値についても適切に更新しておくのが良いでしょう。
なお、「強制的に無効」する機能は、リセットでは有効になりません。
マッパーレジスタ値も、リセットでは変化しません。
「強制的に無効」する機能を有効にしたい(=ページ0から実行)場合は、ボード上の「MAP Disable」ボタンを一度押してください。
押した瞬間に動作しますので、その後、RESETボタンも押して再起動するのが良いでしょう。
電源投入時は、(ほぼ)有効になると思いますが、起動しない場合は「MAP Disable」+「RESET」を試して見ましょう。
- MSX_SD上のSDアクセスについて
ハード的な仕様はオリジナルのままです。
MSX_SDで使うSDカードは8GB以下が望ましいとの記載がありました。
SDアクセス(+マッパー切替)については、BASIC-I,BASIC-G用の簡易プログラムを作りました。
(yanatakaさんのPC-8001_SDを参考にしています。)
使い方は、ソースコードの先頭にあるコメントを参照してください。
なお、SD読み書き時のエラーチェックはしていません、容量不足などには注意ください。
- プログラムとか
MSXM5_SD.ino : MSX_SDのArduinoスケッチ
EXT_ROM_M5.s : SDアクセス(+マッパー切替) ソースコード
EXT_ROM_M5_G.ROM : BASIC-G用のRAWファイル(6000H~6FFFHへ実装用)
EXT_ROM_M5_I.ROM : BASIC-I用のRAWファイル(6000H~6FFFHへ実装用)
BOOT_SAMPLE.s : ブート サンプルソースコード
BOOT_SAMPLE.rom : RAWファイル(2000H~2FFFHへ実装用)
BOOT_SEL.s : ブートセレクターソースコード
BOOT_SEL.rom : RAWファイル(2000H~2FFFHへ実装用)
- ライセンスとか
This project is licensed under the MIT License, see the LICENSE.txt file for details
No comments yet. Be the first to ask about this board.