Skip to the content
2 layers99.4 × 99.6 mmM5 MemMapperSD, the printed circuit board in 3D

M5 MemMapperSD

DNMIAN/SORD_M5_MMSD3

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

Size
99.4 × 99.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
36
Nets
112
Pads
337
Tracks, vias
1,556, 131
Pours
13
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
29 Jun 2024
Updated
9 Mar 2025

Overview

M5 MemMapperSD is an open-source printed circuit board by DNMIAN, from the DNMIAN/SORD_M5_MMSD repository on GitHub, published under the MIT licence. It is a 2-layer board of 99.4 × 99.6 mm with 36 parts on 112 nets, routed with 1,556 tracks and 131 vias.

It is built around the 74HC244D, 74LS670 and 74HC00D, with the 74HC139D, 74HC20D and 74HC30S among its other parts. Its parts include 10 capacitors, 9 ICs, 2 connectors, 2 switches and 1 resistor.

Main components

7

README

README.md

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

Parts

36
QtyValueFootprintReferences
9104Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC1, C2, C3, C4, C5, C6, C7, C8, C9
274LS670Package_DIP:DIP-16_W7.62mmU1, U2
2MountingHoleMountingHole:MountingHole_4.5mmH1, H2
1100uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC10
110kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1
110kResistor_THT:R_Array_SIP7RN1
127C040Package_DIP:DIP-32_W15.24mmU5
174HC00Package_DIP:DIP-14_W7.62mmU7
174HC139Package_DIP:DIP-16_W7.62mmU9
174HC20Package_DIP:DIP-14_W7.62mmU6
174HC244Package_DIP:DIP-20_W7.62mmU3
174HC30Package_DIP:DIP-14_W7.62mmU8
1A4Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP4
1A5Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP5
1A6Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP6
1A7Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP7
1EX12VConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2
1EX5VConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1
1EXIOConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP3
1GNDTestPoint:TestPoint_THTPad_2.0x2.0mm_Drill1.0mmTP2
1HM628512Package_DIP:DIP-32_W15.24mmU4
1M5cardedgem5lib:M5cardedgeCON1
1MAPm5lib:SW_PUSH_6mm_H4.3mm_2pinSW2
1MSXcardedgem5lib:50_pin_edge_femaleCON2
1RESETm5lib:SW_PUSH_6mm_H4.3mm_2pinSW1
1TestPoint_2PoleCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmTP1

Similar boards

  • 2 layers177.8 × 130.8 mmDurango, the printed circuit board in 3D

    Durango

    zuiko21/minimOS

    Scalable OS for 6502/65816

    159 parts23MIT
  • 2 layersCES, the printed circuit board in 3D

    CES

    erickpires/CES-PCB

    170 partsMIT
  • 2 layers106.7 × 139.7 mmTransistorfet computie 68k SMT, the printed circuit board in 3D

    Transistorfet computie 68k SMT

    punkfab/pcb-corpus

    235 real KiCad boards from open-source hardware repositories, prepared as a placement and routing benchmark

    68 parts1
  • 2 layers180 × 67.5 mmNEW KANJI ROM, the printed circuit board in 3D

    NEW KANJI ROM

    bml3mk5/S1KanjiRomJIS2

    JIS Level 2 Kanji ROM Card for HITACHI MB-S1

    61 parts
  • 4 layers184.2 × 169.5 mmSB mini II, the printed circuit board in 3D

    SB mini II

    simonboak/SB-mini-II

    A homebrewed Apple II clone

    97 parts76MIT
  • 4 layers177 × 152.1 mmAvboard tht2, the printed circuit board in 3D

    Avboard tht2

    clydeshaffer/gametank

    design files for the gametank hardware implementation

    139 parts150
  • 2 layers100 × 100 mmStack, the printed circuit board in 3D

    Stack

    imihajlow/ccpu

    A 8-bit computer made of 74xx series logic gates and memory ICs.

    79 parts145

Questions

How big is the M5 MemMapperSD PCB?

It measures 99.4 × 99.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the M5 MemMapperSD use?

36 parts, built around the 74HC244D, 74LS670, 74HC00D and 74HC139D. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the M5 MemMapperSD KiCad files?

From the DNMIAN/SORD_M5_MMSD repository on GitHub, at the commit this page was made from: the board is KiCad/M5_MemMapperSD.kicad_pcb and its schematic KiCad/M5_MemMapperSD.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the M5 MemMapperSD design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).