Skip to the content
2 layers99.9 × 95 mmPC-8001mk2 SD, the printed circuit board in 3D

PC-8001mk2でSD-CARDからCMT形式ファイルのロード、セーブ機能を実現するものです。

Size
99.9 × 95 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
44
Pads
199
Tracks, vias
462, 13
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
15 Aug 2022
Updated
30 Aug 2025

Overview

PC-8001mk2 SD is an open-source printed circuit board by yanataka60, from the yanataka60/PC-8001mk2_SD repository on GitHub, published under the MIT licence. It is a 2-layer board of 99.9 × 95 mm with 15 parts on 44 nets, routed with 462 tracks and 13 vias.

It is built around the 74LS04PC and 74LS30PC. Its parts include 4 capacitors, 4 ICs and 3 connectors. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

2

README

README.md

PC-8001mk2にSD-CARDからCMT形式ファイルのロード、セーブ機能

PC-8001mk2_SD

 PC-8001mk2でSD-CARDからCMT形式ファイルのロード、セーブ機能を実現するものです。

(2023.4.24追記)PC-8001mk2SRでは、Nモード、N80モードで動作しますが、N80SRモードでは動作しないとの報告がありました。

 CMTからの読み込み実行に数分掛かっていたゲームも数十秒で実行できます。

 PC-8001mk2_SD基板は、PC-8001mk2拡張スロットに挿入し、SDアクセスプログラムを書き込んだROMを本体内拡張ROMソケットに挿入して使います。

 なお、Arduino、ROMへ書き込むための機器が別途必要となります。

回路図

 KiCadフォルダ内のPC-8001mk2_SD.pdfを参照してください。

回路図

PC-8001mk2_SD

部品

番号品名数量備考
J2、J3のいずれか
J2Micro_SD_Card_Kit1秋月電子通商 AE-microSD-LLCNV (注1)
J3MicroSD Card Adapter1Arduino等に使われる5V電源に対応したもの
U174LS041
U274LS301
U382551
U4Arduino_Pro_Mini_5V1Atmega328版を使用 168版は不可。(注2)
C1電解コンデンサ 16v100uF1
C2-C4積層セラミックコンデンサ 0.1uF3
2764/28C64相当品1本体内拡張ROMソケットに挿入
ピンヘッダ2Pin分Arduino_Pro_MiniにはA4、A5用のピンヘッダが付いていないため別途調達が必要です 秋月電子通商 PH-1x40SGなど
ピンソケット(任意)26Pin分Arduino_Pro_Miniを取り外し可能としたい場合に調達します 秋月電子通商 FHU-1x42SGなど

   注1)秋月電子通商 AE-microSD-LLCNVのJ1ジャンパはショートしてください。

   注2)Arduino Pro MiniはA4、A5ピンも使っています。

MicroSD Card Adapterを使う(Rev1.1)

J3に取り付けます。

MicroSD Card Adapterについているピンヘッダを除去してハンダ付けするのが一番確実ですが、J3の穴にMicroSD Card Adapterをぴったりと押しつけ、裏から多めにハンダを流し込むことでハンダ付けをする方法もあります。なお、この方法の時にはしっかりハンダ付けが出来たかテスターで導通を確認しておいた方が安心です。

ハンダ付けに自信のない方はJ2の秋月電子通商 AE-microSD-LLCNVをお使いください。AE-microSD-LLCNVならパワーLED、アクセスLEDが付いています。

MicroSD Card Adapter1

MicroSD Card Adapter2

MicroSD Card Adapter3

MicroSD Card Adapter4

MicroSD Card Adapterを使う(Rev1.0)

以下のピン番号を参考に変換基板等繋ぎ方は適宜対応してください。

AE-microSD-LLCNVピン番号MicroSD Card Adapterピン番号信号名
125V
41GND
55SCK
63MISO
74MOSI
86CS

MicroSD Card Adapter

ROMへの書込み

 Z80フォルダ内のEXT_ROM_SHIFT_OFF.bin、EXT_ROM_SHIFT_ON.bin、EXT_ROM_SHIFT_OFF.bin又はEXT_ROM_SHIFT_ON.binをROMライター(TL866II Plus等)を使って2764又は28C64に書き込み、本体内拡張ROMソケットに装着します。

 拡張ROMを本体内拡張ROMソケットに装着しますのでPC-8001mk2_SDを使いたくない時に拡張ROMを外すのは非常に面倒です。

 そこでSHIFTキー(又はAキー)を押しながら電源ON又はリセットすることでソフトウェア的に動作を切り替えられるようにしています。

 四つの違いは、以下のとおりです。

2023.6.3追記
従来SHIFTキーによりON、OFFを切り替えていましたが、CTRLキーを押しながら電源ON又はリセットで行うNモードとN80モードの切り替えとの併用に問題があるとの指摘がありました。
FDD等を使うことがなくON、OFFを切り替えることがほぼない方は従来のSHIFTキー方式で不都合は無いと思いますが、ON、OFFを切り替えることがある方はAキー方式をお使いください。

 ●EXT_ROM_SHIFT_OFF.bin(通常PC-8001mk2_SDを使いたい人向け)

  ・普通に電源ON又はリセットする -> PC-8001mk2_SDを使う。

  ・SHIFTキーを押しながら電源ON又はリセットする -> PC-8001mk2_SDを切り離す。

 ●EXT_ROM_PRESS_A_OFF.bin(通常PC-8001mk2_SDを使いたい人向け)

  ・普通に電源ON又はリセットする -> PC-8001mk2_SDを使う。

  ・Aキーを押しながら電源ON又はリセットする -> PC-8001mk2_SDを切り離す。

 ●EXT_ROM_SHIFT_ON.bin(通常PC-8001mk2_SDを使わない人向け)

  ・普通に電源ON又はリセットする -> PC-8001mk2_SDを切り離す。

  ・SHIFTキーを押しながら電源ON又はリセットする -> PC-8001mk2_SDを使う。

 ●EXT_ROM_PRESS_A_ON.bin(通常PC-8001mk2_SDを使わない人向け)

  ・普通に電源ON又はリセットする -> PC-8001mk2_SDを切り離す。

  ・Aキーを押しながら電源ON又はリセットする -> PC-8001mk2_SDを使う。

 ソースはPC-8001_SDリポジトリ、Z80フォルダ内のEXT_ROM.sに統合されています。

 アッセンブルするときは、53行をコメントアウトし、56行のセミコロン (;)を削除してください。

 また、四つを切り替えるためには126行から125行までを必要な行についてセミコロン (;)を削除し不必要な行にセミコロン (;)をつけてコメントアウトします。

2023.7.9追記
FDDを繋いでいない時は問題ないのですが、FDDを繋ぐとEXT_ROM_SHIFT_OFF.bin、EXT_ROM_PRESS_A_OFF.binが正常に動作しない時があります。
Nモードでは正常に動作しますので問題ありません。
N80モードでN80 DISK BASICを起動したとき、「How many files?」と聞かれますが、この数字を入力し、RETURNを押した直後にSHIFTキー又は、Aキーのチェックが行われるため、数字を入力するためにSHIFTキー又は、Aキーを押さずにRETURNを押すとSDが有効なまま起動してしまう。
対策としては、
1.「How many files?」と聞かれてもSHIFTキー又は、Aキーを離さずにRETURNを押して起動させる。
2.N80 DISK BASIC起動後に次の対策プログラムをSDからロード、実行する。

「N80 DISK BASIC REPAIR」フォルダにあるN80 DISK BASIC REPAIR.cmtをSDにコピーしておいてください。

N80モードでN80 DISK BASICを起動します。SHIFTキー又は、Aキーを押しながら起動する必要はありません。

N80 Disk BASICが起動したらHow many filesに値を入力します。

OKが表示されたら「files N80」で検索し、見つかった「N80 DISK BASIC REPAIR.cmt」をロード、実行します。

これでDISK BASICが正常に利用できます。

N80 DISK BASIC REPAIR.cmtプログラム

  10 POKE &HF139,&HFF

  20 POKE &HF13A,&HD6

  30 POKE &HF14B,&H4C

  40 POKE &HF14C,&HD7

  50 POKE &HF14E,&H2

  60 POKE &HF14F,&HDC

  70 POKE &HF142,&HE7

  80 POKE &HF143,&HD6

  90 NEW

注)N80 DISK BASICに複数のバージョンが存在する場合にはジャンプ先が異なる場合があるかもしれません。正常に動作しない場合には、「How many files?」と聞かれてもSHIFTキー又は、Aキーを離さずにRETURNを押して起動させた後、上述アドレスのジャンプ先アドレスデータを確認してみてください。

PC-8001mk2へ拡張ROMの取付

 本体を裏返して6か所のネジを外します。

mk2_EXTROM1

 4か所のネジを外して拡張スロットボックスを外します。

mk2_EXTROM2

 空きICソケットがあるのでPC-8001mk2_SD用拡張ROMを取り付けます。ICの向きは左下がPin1になります。向きを間違えたまま電源を入れるとROMが壊れますので注意してください。

mk2_EXTROM2

mk2_EXTROM2

 拡張スロットボックス、ケースを元に戻して終了です。

なお、拡張スロットボックスが上手くはまっていないままPC-8001mk2の電源を入れると暴走するそうです。きちんと嵌っているか確認してください。

PC-8001mk2SRへ拡張ROMの取付

注)PC-8001mk2SRでは、Nモード、N80モードではPC-8001mk2_SDが使えますが、N80SRモードでは使えません。

 本体を裏返して3か所のネジを外します。

mk2SR_EXTROM1

 上カバーの後部を持ち上げます。

mk2SR_EXTROM2

 上カバーを前にずらすとカバーのツメが外れます。

mk2SR_EXTROM3

 空きICソケットがあるのでPC-8001mk2_SD用拡張ROMを取り付けます。ICの向きは左下がPin1になります。向きを間違えたまま電源を入れるとROMが壊れますので注意してください。

mk2SR_EXTROM4

mk2SR_EXTROM5

 カバーを戻してからPC-8001mk_SD基板を拡張スロットに挿しますが、この段階で挿しても大丈夫です。

mk2SR_EXTROM6

 ケースを元に戻して終了です。

Arduinoプログラム

 PC-8001_SDと全く同じものを使用しています。

 PC-8001_SDでソケットを使用して差込式にしているのであればそのままPC-8001mk2_SDに差して使えます。

 Arduino IDEを使ってPC-8001_SDリポジトリ、Arduinoフォルダ、PC-8001_SDフォルダ内PC-8001_SD.inoを書き込みます。

 SdFatライブラリを使用しているのでArduino IDEメニューのライブラリの管理からライブラリマネージャを立ち上げて「SdFat」をインストールしてください。

 「SdFat」で検索すれば見つかります。「SdFat」と「SdFat - Adafruit Fork」が見つかりますが「SdFat」のほうを使っています。

注)Arduinoを基板に直付けしている場合、Arduinoプログラムを書き込むときは、拡張スロットから取り出し、74LS04を外したうえで書き込んでください。

拡張スロットへの挿入

そのまま挿入する場合

 横幅が短くスロットのガイドレールに届きませんので厚さ5mm程度のゴム足などをつけて挿入します。

 試作基板ではカードエッジ部分の幅が足りず、挿入の仕方によっては電源がショートしてしまうことが危険がありましたが、公開に当たって幅を修正しています。

Slot1

補助板をつけスロットのガイドレールを利用する場合

 基板の左右に補助板を取り付ければスロットのガイドレールに沿って挿入することができるようになります。

本体後ろから見て右側に取り付ける補助版のサイズ(画像右側)

 84mm(奥行)×65mm(幅)×1.6mm(厚さ)

本体後ろから見て左側に取り付ける補助版のサイズ(画像左側)

 84mm(奥行)×55mm(幅)×1.6mm(厚さ)

画像では不用となった基板をカットしてセロテープで仮止めしています。

Slot2 Slot3

SD-CARD

 仕様はPC-8001_SDと同じです。

 出来れば8GB以下のSDカードを用意してください。

 ArduinoのSdFatライブラリは、SD規格(最大2GB)、SDHC規格(2GB~32GB)に対応していますが、SDXC規格(32GB~2TB)には対応していません。

 また、SDHC規格のSDカードであっても32GB、16GBは相性により動作しないものがあるようです。

 FAT16又はFAT32が認識できます。NTFSは認識できません。

 ルートに置かれた拡張子が「.CMT」のCMT形式ファイルのみ認識できます。(CMT形式以外のファイル、フォルダも表示されますがLOAD実行の対象になりません)

 CMT形式であれば複数のCMTファイルを一つのファイルとしてまとめてあっても認識します。

 例)

  BASIC+機械語             -> LOAD "DOSファイル名"[CR]、MON[CR]、L[CR]

  機械語+機械語            -> MON[CR]、 L DOSファイル名[CR]、L[CR]

  オートラン機能ファイル+BASIC     -> MON[CR]、L DOSファイル名[CR](以下オートラン)

  オートラン機能ファイル+BASIC+機械語 -> MON[CR]、L DOSファイル名[CR](以下オートラン)

  オートラン機能ファイル+機械語+機械語 -> MON[CR]、L DOSファイル名[CR](以下オートラン)

  など

 ファイル名は「.CMT」を含めて31文字まで、ただし半角カタカナ、及び一部の記号はArduinoが認識しないので使えません。パソコンでファイル名を付けるときはアルファベット、数字および空白でファイル名をつけてください。

使い方

 仕様はPC-8001_SDと同じです。

 PC-8001mk2_SD使用の有無はSHIFTキーを押しながら電源ON又はRESET又はAキーを押しながら電源ON又はRESETすることで切り替えてください。

BASICコマンド

FILES[CR]又はFILES "文字列"[CR]

FILES[CR]とするとSD-CARDルートディレクトリにあるファイルの一覧を表示します。

FILES "文字列"[CR]とするとSD-CARDルートディレクトリにあるその文字列から始まるファイルの一覧を表示します。

20件表示したところで指示待ちになるので打ち切るならESC又は↑を入力すると打ち切られ、Bキーで前の16件に戻ります。それ以外のキーで次の16件を表示します。

 行頭に「LOAD "」を付加して表示してあるので実行したいファイルにカーソルキーを合わせて[CR]キーを押すだけでLOAD可能です。

 表示される順番は、登録順となりファイル名アルファベッド順などのソートした順で表示することはできません。

参考

 FILES "文字列"[CR]とする場合、基本的にはダブルコーテーションが無くても機能しますが、数字で始まるファイル名の場合ダブルコーテーションが無いと検索できません。

 × FILES 3

 ○ FILES "3"

LOAD "DOSファイル名"[CR]

指定したDOSフィル名のBASICプログラムをSD-CARDからLOADします。

ファイル名の前に"(ダブルコーテーション)は必須ですが、ファイル名の後ろに"(ダブルコーテーション)は有っても無くても構いません。

ファイル名の最後の「.CMT」も有っても無くても構いません。

 例)

  LOAD "TEST" -> DOSファイル名「TEST.CMT」を読み込みます。

  LOAD "TEST.BAS" -> DOSファイル名「TEST.BAS.CMT」を読み込みます。

  LOAD "TEST.BAS.CMT" -> DOSファイル名「TEST.BAS.CMT」を読み込みます。

参考

 基本的にはDOSファイル名をダブルコーテーションで括らなくても機能しますが、数字で始まるファイル名の場合ダブルコーテーションが無いとLOADできません。

 NOT FIND FILEと表示されます。

 × LOAD 3D MAZE

 ○ LOAD "3D MAZE"

LOAD ""[CR](※多段ロードファイルの2段目以降のみ有効)

直前に読み込まれたDOSファイルが多段ロード用に複数のCMTファイルが連結されており、2段目以降がBASICプログラムであった時のみ有効に動作し、BASICプログラムをSD-CARDからLOADします。

SAVE "DOSファイル名"[CR]

BASICプログラムを指定したDOSフィル名でSD-CARDに上書きSAVEします。

ファイル名の省略は出来ません。

ファイル名の前に"(ダブルコーテーション)は必須ですが、ファイル名の後ろに"(ダブルコーテーション)は有っても無くても構いません。

ファイル名の最後の「.CMT」も有っても無くても構いません。

指定したDOSファイル名の最初の6文字がCMT形式の中に保存されるファイル名として使われます。

BASICプログラムであることを識別するために「.BAS」を付けることを推奨します。

 例)

  SAVE "TEST" -> 「TEST.CMT」で保存される。

  SAVE "TEST.BAS" -> 「TEST.BAS.CMT」で保存される。

参考

 基本的にはDOSファイル名をダブルコーテーションで括らなくても機能しますが、数字で始まるファイル名の場合ダブルコーテーションが無いとSAVEできません。

 SD-CARD INITIALIZE ERRORと表示されます。

KILL DOSファイル名[CR]

指定したDOSフィル名がSD-CARDに存在すればSD-CARDから削除します。

ファイル名の最後に「.CMT」も指定してもしなくても構いません。

参考

 基本的にはDOSファイル名をダブルコーテーションで括らなくても機能しますが、数字で始まるファイル名の場合ダブルコーテーションが無いとKILLできません。

 NOT FIND FILEと表示されます。

 × KILL 3D MAZE

 ○ KILL "3D MAZE"

MONITORコマンド

F[CR]又はF 文字列[CR]

文字列を入力せずにF[CR]のみ入力するとSD-CARDルートディレクトリにあるファイルの一覧を表示します。

文字列を付けて入力すればSD-CARDルートディレクトリにあるその文字列から始まるファイルの一覧を表示します。

20件表示したところで指示待ちになるので打ち切るならESC又は↑を入力すると打ち切られ、Bキーで前の16件に戻ります。それ以外のキーで次の16件を表示します。

 行頭に「*L 」を付加して表示してあるので実行したいファイルにカーソルキーを合わせて[CR]キーを押すだけでLOAD可能です。

 表示される順番は、登録順となりファイル名アルファベッド順などのソートした順で表示することはできません。

例)

  F[CR]

  F S[CR]

  F SP[CR]

L DOSファイル名[CR]

指定したDOSフィル名の機械語プログラムをSD-CARDからLOADします。

ファイル名の最後の「.CMT」は有っても無くても構いません。

 例)

  L TEST -> DOSファイル名「TEST.CMT」を読み込みます。

  L TEST.BIN -> DOSファイル名「TEST.BIN.CMT」を読み込みます。

  L TEST.BIN.CMT -> DOSファイル名「TEST.BIN.CMT」を読み込みます。

L[CR](※多段ロードファイルの2段目以降のみ有効)

直前に読み込まれたDOSファイルが多段ロード用に複数のCMTファイルが連結されており、2段目以降が機械語プログラムであった時のみ有効に動作し、機械語プログラムをSD-CARDからLOADします。

W 16進数4桁 16進数4桁 DOSファイル名[CR]

1番目の16進数4桁が表すアドレスから2番目の16進数4桁が表すアドレスまでを指定したDOSファイル名でSD-CARDに機械語として上書き保存します。

ファイル名の最後に「.CMT」を指定してもしなくても構いません。

またWの後ろや各パラメータ間に空白が有っても無くても構いません。

機械語プログラムであることを識別するために「.BIN」等を付けることを推奨します。

 例)

  W 0000 001F TEST ->   0000番地から001F番地までをDOSファイル名「TEST.CMT」で保存する。

  W 0000 001F TEST.BIN -> 0000番地から001F番地までをDOSファイル名「TEST.BIN.CMT」で保存する。

G 16進数4桁[CR]

16進数4桁が表すアドレスにジャンプします。

Gの後ろに空白があっても無くても構いません。

B[CR]

BASICに復帰します。MONITORでのコマンド入力をスクリーンエディタにしたため、CTRL+Bが機能しないので代替コマンドです。

CTRL+Cと動作は同じです。

CTRL+C

BASICに復帰します。MONITORでのコマンド入力をスクリーンエディタにしたため、CTRL+Bが機能しないので代替コマンドです。

B[CR]と動作は同じです。

S 16進数4桁 {16進数2桁}の繰り返し[CR]

PC-8001のメモリに16進数4桁が表すアドレスから16進数2桁が表すデータを書き込みます。

[CR]で改行すると有効な16進数2桁データを書き込んだ後、次に書き込みとなるアドレスを表示しますので続きの16進数2桁のデータを入力して[CR]で改行します。

アドレス表示の次に16進数2桁のデータを入力せずに[CR]を押すと終了します。

Sの後ろ、アドレス、データの区切りに空白が有っても無くても構いません。

例)

以下の例はすべて同じ結果となります。

 SA0001122334455

 SA000 11 22 33 44 55

 S A000 1122334455

 S A0001122334455

 S A000 1122 3344 55

D 16進数4桁[CR]

16進数4桁が表すアドレスからPC-8001のメモリの内容を128Byteを一画面として表示します。

一画面表示したところで「NEXT:ANY BACK:B BREAK:ESC」と表示して指示待ちとなるのでBで前の128Byteを表示、ESCで中止、それ以外のキーで次の128Byteの表示となります。

一画面表示している途中でもESCでいつでも中止できます。

ファンクションキーを利用したオートラン機能

ファンクションキーを利用したオートラン機能に対応していますが、一部オリジナルと異なる点があります。

そこでオートラン機能ファイルをロードする時にPC-8001mk2_SDの仕様に自動変換する機能を付けました。(2022.8.21実装)

以下の修正点についてオートラン機能ファイルをロードする時に自動的に修正ロードされますのでオートラン機能ファイルを修正する必要はありません。当然、修正してあっても機能します。

自動で修正される点

 1 CTRL+BではMONITORからBASICへ復帰できません。CTRL+Cに修正されます。

 2 SD-CARDからのBASICプログラムをLOADするコマンドは「LOAD」で、1本のCMTファイルとなっていればファイル名を指定する必要もありませんので「CLOAD"ファイル名"」は「LOAD""」に修正されます。

操作上の注意

 「SD-CARD INITIALIZE ERROR」と表示されたときは、SD-CARDをいったん抜き再挿入したうえでArduinoをリセットしてください。

 SD-CARDにアクセスしていない時に電源が入ったままで SD-CARDを抜いた後、再挿入しSD-CARDにアクセスすると「SD-CARD INITIALIZE ERROR」となる場合があります。再挿入した場合にはSD-CARDにアクセスする前にArduinoを必ずリセットしてください。

 SD-CARDの抜き差しは電源を切った状態で行うほうがより確実です。

 (2024.3.10) SD-CARDにアクセスしていない時に電源が入ったままでSD-CARDを抜くと再度SD-CARDを挿入してもSD-CARDにアクセスできない問題を解消しました。(Arduinoを最新版に書き換えてください)

 再度SD-CARDを挿入した後、FILES、LOAD、SAVE等でSD-CARDに3回ほどアクセスすれば復旧します。

New CITY HEROをSDから読み込み実行するための修正

 PC-8001mk2_SDを使うことで内藤 時浩さんが頒布されているNew CITY HEROをPC-8001mk2実機で手軽に遊べるようになりますが、New CITY HEROは機械語の多段ロード方式で2段目のプログラム内にCMTからの読み込みルーチンをコールしている箇所がありますので、そこをSDから読み込むためのコール先に修正する必要があります。

 修正箇所、修正内容はPC-8001_SD用の修正と全く同じですのでPC-8001_SD用にNew CITY HEROを修正してあればそのまま実行することができます。

修正手順

 New CITY HEROのCMT形式ファイルに次の手順で修正を行いPC-8001mk2_SD用のCMT形式ファイルを作り、SD-CARDに保存してください。

2023.6.10 DumpListEditorのPatch File機能で作る方法に修正しました。

1 頒布していただいたNew City HeroのCMTファイルをbugfire2009さんの「DumpListEditor」にDrag&Dropする

2 表示される3つのBINファイルをうち、2番目のBINファイルを「マシン語入力に送る」を押す

3 「CD F3 0B」を検索して「00 00 00」に修正(1箇所)

4 「9E 5F」を検索して「06 60」に修正(14箇所)

5 v1.1.1の場合、「9E 5F」の検索では13箇所しか見つからないので「CD 9E」で検索し、「9E」を「06」に次行最初の「5F」を「60」に修正(1箇所)

6 修正が終わったら「ファイル整理画面にPaste」を押す

7 ファイル整理画面に戻ったことを確認し、「cmt書出し」を押してPC-8001_SD対応済cmtファイルとして保存する

 1 頒布していただいたNew City HeroのCMTファイルをbugfire2009さんの「DumpListEditor」にDrag&Dropする

 2 「BASIC入力」タブをクリックして言語「Patch File」を選択する。

 3 表示されているPathc File Sampleをすべて削除し、次の15行に入れ替える。

/CD,F3,0B/=00,00,00

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

/CD,9E,5F/=CD,06,60

 4 「ファイル整理画面にPaste」を押す。

 5 ファイル整理画面に「PATCH.patch」というファイルが追加される。ファイルの位置はどこにあっても可。

 6 「cmt書出し」を押してPC-8001_SD対応済cmtファイルとして保存する。

DumpListEditor動画作成機で作られたCMTファイルへの対応

 DumpListEditor動画作成機で作られたCMTファイルのうち、「Chain(cmt出力時のみ)」をチェックして作られたプログラムはCMTルーチンをコールしますので修正が必要となります。

セミグラ作成機&動画作成機

https://bugfire2009.ojaru.jp/semigra/

で紹介されているきらびぃさん作成の

「メガCD版シルフィードのデモをPC8001で再生してみたフル版(修正版)」

「PC8001でBad Apple全編をcmt化」

の二つがこの機能を使っていますのでPC-8001mk2_SDで再生するにはパッチ当てが必要になりますが、N80モードでは「メガCD版シルフィードのデモをPC8001で再生してみたフル版(修正版)」は途中で止まってしまいます。Nモードでは最後まで再生出来たので「Chain(cmt出力時のみ)」をチェックして作られたファイルのPC-8001mk2_SDでの再生は現時点でNモードでのみ可能と考えてください。(CMTであればN80モードでも再生出来てます。)

 この二つのファイルの具体的な修正方法は、PC-8001_SDのREADME.mdを参照してください。

SDアクセスサービスルーチン

 「プログラム側からファイル名を指定してSDから読み込む」機能と「プログラム側からファイル名を指定してSDへ書き込む」機能を追加しました。

 この機能を活用するには、この機能に対応したアプリケーションプログラムが必要となります。

 以下にサービスルーチンの仕様とエントリポイントを公開します。

エントリポイント名前用途
600FROPENREAD FILE OPEN

 HL <- DOS_FILENAME先頭アドレス

 HLレジスタが示すDOS_FILENAMEで読み込み用ファイルをオープン

 DOS_FILENAMEは31文字まで、最後に00Hをつけること。

 フラグレジスタ以外のレジスタは変化しない。

 正常終了 CF=0、異常終了 CF=1

エントリポイント名前用途
6006D_5F9E5F9EH代替

 読み出されたデータ -> A

 読み込み用としてOPENしているファイルから1BYTE読み出し

エントリポイント名前用途
6009H_5F3A5F3AH代替

 読み出しオープンされているファイルから機械語フォーマットで保存されている機械語を読み出す。

 WORK AREA:FF3D~FF3E メモリ書き込み開始アドレス

 正常終了 CF=0、異常終了 CF=1

エントリポイント名前用途
600CMONHOT5C66H代替

 Gコマンドで実行する機械語プログラムからモニタに戻るときには、ここへのジャンプを指定。

 オートラン機能が実行中であれば継続して実行される。

エントリポイント名前用途
6012WAOPENWRITE FILE APPEND OPEN

 HL <- DOS_FILENAME先頭アドレス

 HLレジスタが示すDOS_FILENAMEで追加書き込み用としてファイルをオープン

 DOS_FILENAMEは31文字まで、最後に00Hをつけること。

 フラグレジスタ以外のレジスタは変化しない。

 正常終了 CF=0、異常終了 CF=1

エントリポイント名前用途
601BWNOPENWRITE FILE NEW OPEN

 HL <- DOS_FILENAME先頭アドレス

 HLレジスタが示すDOS_FILENAMEで書き込み用として新たにファイルをオープン。同名のDOS_FILENAMEのファイルがある場合は削除したのちにオープンする。

 DOS_FILENAMEは31文字まで、最後に00Hをつけること。

 フラグレジスタ以外のレジスタは変化しない。

 正常終了 CF=0、異常終了 CF=1

エントリポイント名前用途
6018D_5F2F5F2FH代替

 A <- 書き込みデータ

 書込み用でオープンされているファイルにAレジスタのデータを追加書込みする。

 フラグレジスタ以外のレジスタは変化しない。

 正常終了 CF=0、異常終了 CF=1

エントリポイント名前用途
6015D_5ED95ED9H代替

 HL <- 書き込み開始アドレス

 DE <- 書き込み終了アドレス

 書込み用でオープンされているファイルに書き込み開始アドレスから書き込み終了アドレスまでのメモリ内容を機械語フォーマットで書出し、クローズする。

 WORK AREA:FF3D~FF3E 書き込み開始アドレス

       FF3F~FF40 書き込み終了アドレス

 正常終了 CF=0、異常終了 CF=1

エントリポイント名前用途
601EWCLOSEWRITE FILE CLOSE

 書込み用ファイルをクローズする。

 フラグレジスタ以外のレジスタは変化しない。

 正常終了 CF=0、異常終了 CF=1

SDアクセスサービスルーチンのテスト用プログラム

 SDアクセスサービスルーチンのテストと使い方のサンプルとしてPC-8001_SDリポジトリ、Z80フォルダ内SD Access service routine Testフォルダにテストプログラムを置きました。

 「sd_test.BIN.CMT」と「SD_TEST2.BIN.CMT」の二つをSDカードにコピーしてモニタ Lコマンドで「sd_test.BIN.CMT」を読み込み実行してください。

 画面に01からFFまで表示した後、「SD TEST OK」と表示して終了します。

 SDカードには「SD_WRITE_READ_TEST.DAT」と「SD_WRT_DIRECT_TEST.BIN.CMT」の二つのファイルが出来上がっているはずです。

 「SD_WRITE_READ_TEST.DAT」は510Byteのファイルサイズで01からFF、FFから01までのデータが格納されているはずです。

 「SD_WRT_DIRECT_TEST.BIN.CMT」は161ByteのファイルサイズでA000h~A096hまでのメモリ内容を機械語フォーマットのcmtとして保存した内容となっているはずです。

謝辞

 基板の作成に当たり以下のデータを使わせていただきました。ありがとうございました。

 Arduino Pro Mini

  https://github.com/g200kg/kicad-lib-arduino

 AE-microSD-LLCNV

  https://github.com/kuninet/PC-8001-SD-8kRAM

 New CITY HEROの修正点を公開することを快く承諾してくださった内藤 時浩様、ありがとうございました。

 NBASICのコマンド追加に当たっては、ちくらっぺ様のSD-DOSがとても参考になりました。ありがとうございました。

  https://github.com/chiqlappe/SD-DOS

 PC-8001mk2SRでの動作確認をなつさんに行っていただきました。ありがとうございました。

 スタック領域を破壊し正常にロードが出来ない機械語プログラムの事例について情報を提供してくださった久保ちゃん様、ありがとうございました。

 SHIFTキーによるON、OFFの切り替えは、CTRLキーを押しながら電源ON又はリセットで行うNモードとN80モードの切り替えとの併用に問題があると指摘していただいた内藤 時浩@NAITOTokihiro様、ありがとうございました。

追記

2022.8.18

 DumpListEditorの動画作成機機能で作成されたcmtファイルについて追記しました。

2022.8.21

 MONITOR Lコマンドで読み込み時にオートラン機能ファイルであればCTRL+B、CLOADをSD用に書き換えるようにした

2022.9.25

 MicroSD Card Adapter用の端子を付加し、基板をRev1.1に更新。

2022.11.7

 部品リストに2764が落ちていたので追加。

2023.4.24

 PC-8001mk2SRでの動作状況を追記しました。

2023.5.30

 E800h以降までロードする機械語プログラムをロードするとスタック領域を破壊してしまうことに対処。

2023.6.3

 SD機能のON、OFFにAキー方式を追加。

2023.6.10

 SDアクセスサービスルーチンを追加、エントリポイントを公開。5F3AH代替ルーチンを見直し。

2023.6.25

 拡張ROMの取付方法を追記しました。

2023.7.9

 N80モードでN80 DISK BASICを使うときの対策を追加しました。

2023.9.11

 PC-8001 N-BASIC V1.0の場合、MONITORに入ることでPC-8001_SDの初期化が行われるように拡張ROM用ソースコードを修正したため、今後アセンブルし直したときに該当コードが含まれるようになりますが、N-BASIC 1.0の時のみ有効になるのでPC-8001mk2_SDに影響はありません。

2023.10.5

 ファイル名長さの仕様を訂正

  誤)「.CMT」を除いて32文字 正)「.CMT」を含めて31文字

2024.1.15

 SDカードは8GB以下が望ましいことを追記。

2024.3.12

 電源が入ったままでSD-CARDを抜くと再度SD-CARDを挿入してもSD-CARDにアクセスできない問題を解消した。

2024.9.6

 最新のEXT-ROMであるにも関わらず内藤様のXeGraderで「SD drive of newer detected.」と判定できないバクを修正

2024.9.11

 サービスルーチンでの使用ワークエリアを追記

2025.8.30

 サービスルーチンで解説していなかった600Ch(MONHOT)の解説を追加。

Parts

15
QtyValueFootprintReferences
4MountingHole_3.2mm_M3MountingHole:MountingHole_3.2mm_M3MH1, MH2, MH3, MH4
30.1uFCapacitor_THT:C_Rect_L4.0mm_W2.5mm_P2.50mmC2, C3, C4
1100uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC1
174LS04Package_DIP:DIP-14_W7.62mm_LongPadsU1
174LS30Package_DIP:DIP-14_W7.62mm_LongPadsU2
18255Package_DIP:DIP-40_W15.24mm_LongPadsU3
1Arduino_Pro_Mini_5VKicad2-2:Arduino_Pro_MiniU4
1Conn_02x36_Row_Letter_Firstpc8001mk2:BUS_PC8001MK2J1
1MicroSD Card AdapterConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ3
1Micro_SD_Card_KitKicad2-2:AE-microSD-LLCNVJ2

Similar boards

  • 2 layers49.6 × 78.3 mmOdyssey, the printed circuit board in 3D

    Odyssey

    jotego/jtcores

    FPGA cores compatible with multiple arcade game machines and KiCAD schematics of arcade games. Working on MiSTer FPGA/Analogue Pocket

    24 parts346GPL-3.0
  • 4 layers243.8 × 170.2 mmHEC1, the printed circuit board in 3D

    HEC1

    Andy18650/HEC-Model-Z1

    A Z80 computer with protected mode support

    126 parts36GPL-3.0
  • 2 layers100 × 100 mmMZ80K SD, the printed circuit board in 3D

    MZ80K SD

    yanataka60/MZ80K_SD

    MZ-80KシリーズでSD-CARDからのアプリケーション起動、BASICなどのアプリケーションからSD-CARDへのロード、セーブを実現するものです

    25 parts28MIT
  • 2 layers100 × 100 mmPC-8001 SD, the printed circuit board in 3D

    PC-8001 SD

    yanataka60/PC-8001_SD

    PC-8001でSD-CARDからCMT形式ファイルのロード、セーブ機能を実現するものです。

    23 parts28MIT
  • 2 layers100 × 100 mmMZ2000 SD, the printed circuit board in 3D

    MZ2000 SD

    yanataka60/MZ-2000_SD

    MZ-80B、MZ-2000、MZ-2200でSD-CARDからのアプリケーション起動、BASICなどのアプリケーションからSD-CARDへのロード、セーブを実現するものです。

    30 parts16MIT
  • 2 layers100 × 100 mmFM-7 SD, the printed circuit board in 3D

    FM-7 SD

    yanataka60/FM-7_SD

    FM-8、FM-7、FM-77シリーズでSD-CARDからロード、セーブ機能を実現するものです。

    21 parts14MIT
  • 2 layers98.3 × 107.1 mmCoco9511pak, the printed circuit board in 3D

    Coco9511pak

    barberd/coco9511pak

    This board is a cartridge for the Tandy Radio Shack TRS-80 Color Computer (CoCo), an 8 bit computer produced between 1980 and 1991. It provides an Arithmetic Processor Unit (APU), the AMD 9511, to the CoCo.

    44 parts13GPL-3.0
  • 2 layers79 × 100 mmPC-6001mk2 SD, the printed circuit board in 3D

    PC-6001mk2 SD

    yanataka60/PC-6001mk2_SD

    PC-6001mk2の MODE1~MODE4でSD-CARDからロード、セーブ機能を実現するものです。

    17 parts11MIT

Questions

How big is the PC-8001mk2 SD PCB?

It measures 99.9 × 95 mm and has 2 copper layers, 1.6 mm thick.

What parts does the PC-8001mk2 SD use?

15 parts, built around the 74LS04PC and 74LS30PC. 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 PC-8001mk2 SD KiCad files?

From the yanataka60/PC-8001mk2_SD repository on GitHub, at the commit this page was made from: the board is Kicad/PC-8001mk2_SD.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the PC-8001mk2 SD 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).