100%
sord_m5_mmsd M5_MemMapperSD view
Description

Imported from GitHub: DNMIAN/SORD_M5_MMSD · commit 07a19c7 · license MIT

Description

SORD m5でROM/RAMメモリマッパー、SDの読み書きを実装します

README

SORD m5 メモリマッパー (+SD)

05

注意
・m5 Jr.に挿せるかは検証できていません。
・純正電源で動作するかは確認できていません。(外部電源入力は可能)

  1. 概要

本ハードウェアは、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)を備えています。

  1. 製作について

組み立て以外に、EPROM書き込みが必要です。

また、MSX_SDのドキュメントも必ず読みましょう。
MSX_SDはArduinoスケッチ書き込みが必要です。

  1. 基板、部品リスト

回路図とガーバーデータは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

01 02 04

  1. ジャンパー設定

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

03

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との競合回避))

  1. Arduinoスケッチについて

MSXM5_SD.inoファイルを使用してください。
MSX_SD.inoにm5処理を追加しているので、そのままMSXでも動作します。

  1. ROMについて

メモリマッパーに実装するROMは、4Mbit(M27C4001, AM27C040, W27E040など), 2Mbit, 1Mbit等の
32ピンDIPパッケージが使用可能です。(容量が少ない場合は、サイズ毎にページ内容がミラーされます)

MSX_SD上のROMは使用しません。m5のみで使用なら実装する必要はありません。

  1. マッパーセグメントの切替について

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」を試して見ましょう。

  1. MSX_SD上のSDアクセスについて

ハード的な仕様はオリジナルのままです。
MSX_SDで使うSDカードは8GB以下が望ましいとの記載がありました。

SDアクセス(+マッパー切替)については、BASIC-I,BASIC-G用の簡易プログラムを作りました。
(yanatakaさんのPC-8001_SDを参考にしています。)
使い方は、ソースコードの先頭にあるコメントを参照してください。
なお、SD読み書き時のエラーチェックはしていません、容量不足などには注意ください。

  1. プログラムとか

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へ実装用)

  1. ライセンスとか

This project is licensed under the MIT License, see the LICENSE.txt file for details

Comments
Sign in to comment

No comments yet. Be the first to ask about this board.