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

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

PC-8001mk2でSD-CARDからCMT形式ファイルのロード、セーブ機能を実現するものです。
CMTからの読み込み実行に数分掛かっていたゲームも数十秒で実行できます。
PC-8001mk2_SD基板は、PC-8001mk2拡張スロットに挿入し、SDアクセスプログラムを書き込んだROMを本体内拡張ROMソケットに挿入して使います。
なお、Arduino、ROMへ書き込むための機器が別途必要となります。
KiCadフォルダ内のPC-8001mk2_SD.pdfを参照してください。

| 番号 | 品名 | 数量 | 備考 |
|---|---|---|---|
| J2、J3のいずれか | |||
| J2 | Micro_SD_Card_Kit | 1 | 秋月電子通商 AE-microSD-LLCNV (注1) |
| J3 | MicroSD Card Adapter | 1 | Arduino等に使われる5V電源に対応したもの |
| U1 | 74LS04 | 1 | |
| U2 | 74LS30 | 1 | |
| U3 | 8255 | 1 | |
| U4 | Arduino_Pro_Mini_5V | 1 | Atmega328版を使用 168版は不可。(注2) |
| C1 | 電解コンデンサ 16v100uF | 1 | |
| C2-C4 | 積層セラミックコンデンサ 0.1uF | 3 | |
| 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ピンも使っています。
J3に取り付けます。
MicroSD Card Adapterについているピンヘッダを除去してハンダ付けするのが一番確実ですが、J3の穴にMicroSD Card Adapterをぴったりと押しつけ、裏から多めにハンダを流し込むことでハンダ付けをする方法もあります。なお、この方法の時にはしっかりハンダ付けが出来たかテスターで導通を確認しておいた方が安心です。
ハンダ付けに自信のない方はJ2の秋月電子通商 AE-microSD-LLCNVをお使いください。AE-microSD-LLCNVならパワーLED、アクセスLEDが付いています。
以下のピン番号を参考に変換基板等繋ぎ方は適宜対応してください。
| AE-microSD-LLCNVピン番号 | MicroSD Card Adapterピン番号 | 信号名 |
|---|---|---|
| 1 | 2 | 5V |
| 4 | 1 | GND |
| 5 | 5 | SCK |
| 6 | 3 | MISO |
| 7 | 4 | MOSI |
| 8 | 6 | CS |
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又はリセットすることでソフトウェア的に動作を切り替えられるようにしています。
四つの違いは、以下のとおりです。
●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行までを必要な行についてセミコロン (;)を削除し不必要な行にセミコロン (;)をつけてコメントアウトします。
「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
本体を裏返して6か所のネジを外します。

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

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


拡張スロットボックス、ケースを元に戻して終了です。
本体を裏返して3か所のネジを外します。

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

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

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


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

ケースを元に戻して終了です。
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程度のゴム足などをつけて挿入します。
試作基板ではカードエッジ部分の幅が足りず、挿入の仕方によっては電源がショートしてしまうことが危険がありましたが、公開に当たって幅を修正しています。
基板の左右に補助板を取り付ければスロットのガイドレールに沿って挿入することができるようになります。
84mm(奥行)×65mm(幅)×1.6mm(厚さ)
84mm(奥行)×55mm(幅)×1.6mm(厚さ)
画像では不用となった基板をカットしてセロテープで仮止めしています。
仕様は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することで切り替えてください。
FILES[CR]とするとSD-CARDルートディレクトリにあるファイルの一覧を表示します。
FILES "文字列"[CR]とするとSD-CARDルートディレクトリにあるその文字列から始まるファイルの一覧を表示します。
20件表示したところで指示待ちになるので打ち切るならESC又は↑を入力すると打ち切られ、Bキーで前の16件に戻ります。それ以外のキーで次の16件を表示します。
行頭に「LOAD "」を付加して表示してあるので実行したいファイルにカーソルキーを合わせて[CR]キーを押すだけでLOAD可能です。
表示される順番は、登録順となりファイル名アルファベッド順などのソートした順で表示することはできません。
FILES "文字列"[CR]とする場合、基本的にはダブルコーテーションが無くても機能しますが、数字で始まるファイル名の場合ダブルコーテーションが無いと検索できません。
× FILES 3
○ FILES "3"
指定した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"
直前に読み込まれたDOSファイルが多段ロード用に複数のCMTファイルが連結されており、2段目以降がBASICプログラムであった時のみ有効に動作し、BASICプログラムをSD-CARDからLOADします。
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と表示されます。
指定したDOSフィル名がSD-CARDに存在すればSD-CARDから削除します。
ファイル名の最後に「.CMT」も指定してもしなくても構いません。
基本的にはDOSファイル名をダブルコーテーションで括らなくても機能しますが、数字で始まるファイル名の場合ダブルコーテーションが無いとKILLできません。
NOT FIND FILEと表示されます。
× KILL 3D MAZE
○ KILL "3D MAZE"
文字列を入力せずにF[CR]のみ入力するとSD-CARDルートディレクトリにあるファイルの一覧を表示します。
文字列を付けて入力すればSD-CARDルートディレクトリにあるその文字列から始まるファイルの一覧を表示します。
20件表示したところで指示待ちになるので打ち切るならESC又は↑を入力すると打ち切られ、Bキーで前の16件に戻ります。それ以外のキーで次の16件を表示します。
行頭に「*L 」を付加して表示してあるので実行したいファイルにカーソルキーを合わせて[CR]キーを押すだけでLOAD可能です。
表示される順番は、登録順となりファイル名アルファベッド順などのソートした順で表示することはできません。
F[CR]
F S[CR]
F SP[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」を読み込みます。
直前に読み込まれたDOSファイルが多段ロード用に複数のCMTファイルが連結されており、2段目以降が機械語プログラムであった時のみ有効に動作し、機械語プログラムをSD-CARDからLOADします。
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」で保存する。
16進数4桁が表すアドレスにジャンプします。
Gの後ろに空白があっても無くても構いません。
BASICに復帰します。MONITORでのコマンド入力をスクリーンエディタにしたため、CTRL+Bが機能しないので代替コマンドです。
CTRL+Cと動作は同じです。
BASICに復帰します。MONITORでのコマンド入力をスクリーンエディタにしたため、CTRL+Bが機能しないので代替コマンドです。
B[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
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回ほどアクセスすれば復旧します。
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に保存してください。
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ファイルのうち、「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へ書き込む」機能を追加しました。
以下にサービスルーチンの仕様とエントリポイントを公開します。
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 600F | ROPEN | READ FILE OPEN |
HL <- DOS_FILENAME先頭アドレス
HLレジスタが示すDOS_FILENAMEで読み込み用ファイルをオープン
DOS_FILENAMEは31文字まで、最後に00Hをつけること。
フラグレジスタ以外のレジスタは変化しない。
正常終了 CF=0、異常終了 CF=1
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 6006 | D_5F9E | 5F9EH代替 |
読み出されたデータ -> A
読み込み用としてOPENしているファイルから1BYTE読み出し
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 6009 | H_5F3A | 5F3AH代替 |
読み出しオープンされているファイルから機械語フォーマットで保存されている機械語を読み出す。
WORK AREA:FF3D~FF3E メモリ書き込み開始アドレス
正常終了 CF=0、異常終了 CF=1
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 600C | MONHOT | 5C66H代替 |
Gコマンドで実行する機械語プログラムからモニタに戻るときには、ここへのジャンプを指定。
オートラン機能が実行中であれば継続して実行される。
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 6012 | WAOPEN | WRITE FILE APPEND OPEN |
HL <- DOS_FILENAME先頭アドレス
HLレジスタが示すDOS_FILENAMEで追加書き込み用としてファイルをオープン
DOS_FILENAMEは31文字まで、最後に00Hをつけること。
フラグレジスタ以外のレジスタは変化しない。
正常終了 CF=0、異常終了 CF=1
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 601B | WNOPEN | WRITE FILE NEW OPEN |
HL <- DOS_FILENAME先頭アドレス
HLレジスタが示すDOS_FILENAMEで書き込み用として新たにファイルをオープン。同名のDOS_FILENAMEのファイルがある場合は削除したのちにオープンする。
DOS_FILENAMEは31文字まで、最後に00Hをつけること。
フラグレジスタ以外のレジスタは変化しない。
正常終了 CF=0、異常終了 CF=1
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 6018 | D_5F2F | 5F2FH代替 |
A <- 書き込みデータ
書込み用でオープンされているファイルにAレジスタのデータを追加書込みする。
フラグレジスタ以外のレジスタは変化しない。
正常終了 CF=0、異常終了 CF=1
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 6015 | D_5ED9 | 5ED9H代替 |
HL <- 書き込み開始アドレス
DE <- 書き込み終了アドレス
書込み用でオープンされているファイルに書き込み開始アドレスから書き込み終了アドレスまでのメモリ内容を機械語フォーマットで書出し、クローズする。
WORK AREA:FF3D~FF3E 書き込み開始アドレス
FF3F~FF40 書き込み終了アドレス
正常終了 CF=0、異常終了 CF=1
| エントリポイント | 名前 | 用途 |
|---|---|---|
| 601E | WCLOSE | WRITE FILE CLOSE |
書込み用ファイルをクローズする。
フラグレジスタ以外のレジスタは変化しない。
正常終了 CF=0、異常終了 CF=1
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)の解説を追加。
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | MountingHole_3.2mm_M3 | MountingHole:MountingHole_3.2mm_M3 | MH1, MH2, MH3, MH4 |
| 3 | 0.1uF | Capacitor_THT:C_Rect_L4.0mm_W2.5mm_P2.50mm | C2, C3, C4 |
| 1 | 100uF | Capacitor_THT:CP_Radial_D5.0mm_P2.50mm | C1 |
| 1 | 74LS04 | Package_DIP:DIP-14_W7.62mm_LongPads | U1 |
| 1 | 74LS30 | Package_DIP:DIP-14_W7.62mm_LongPads | U2 |
| 1 | 8255 | Package_DIP:DIP-40_W15.24mm_LongPads | U3 |
| 1 | Arduino_Pro_Mini_5V | Kicad2-2:Arduino_Pro_Mini | U4 |
| 1 | Conn_02x36_Row_Letter_First | pc8001mk2:BUS_PC8001MK2 | J1 |
| 1 | MicroSD Card Adapter | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J3 |
| 1 | Micro_SD_Card_Kit | Kicad2-2:AE-microSD-LLCNV | J2 |

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


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


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


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.

yanataka60/PC-6001mk2_SD
PC-6001mk2の MODE1~MODE4でSD-CARDからロード、セーブ機能を実現するものです。
It measures 99.9 × 95 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
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).