CP/M移植(2)
2024.02.16
とにかくBIOSのソースが曲がりなりにも参照できたのは助かった。これを元にして、修正を加えていった。
ただ、2004年の段階でバイナリから逆アセンブルしてソースを再現することもしていた。なぜかというと、移植後にうまく動かない事があり、疑義が生じたので他機種のBIOSの中身を確認してみたかったから。
結局それは読み込むセクター番号が間違っていただけで(わかるまでにはずいぶん回り道をしたが)、修正したら直った。
MZ-2000の場合、テキストVRAMがD000H~DFFFHになる。画面アクセス時、メインRAMの一部を切り換えてVRAMにしてからアクセスする。
従って、そのアドレス範囲にそのプログラムが存在すれば当然暴走してしまう。
そのため画面表示ルーチンをBIOSの終わりの方に置き、アセンブル後にこれらのルーチンがE000H以降に配置されているか、LSTファイルを確認していた。
画面関係のBIOSはMZ-2000用として全部自作した。
基本的にVRAMへの切り換えと、指定したアドレスへの書込だけだから難しくない。
・画面モードの切り換え(80x25)
・画面クリア
・1文字表示
・コントロールコードの処理(それぞれのコードに対する処理も)
・アドレスの計算(表示位置とVRAMアドレス)
・画面スクロールアップ
・Y座標からVRAMアドレスを求める
・カーソル表示
(カーソルを表示する前に、表示位置にあった文字を保存しておく。カーソル移動した時に、元そこにあった文字を書き戻す)
FDDの読み書きルーチンは、印象としては難しく感じるが、すでに原型があったので意外とラクだった。
ただ、X1用なのでMB8877、MZ-2000はMB8876という違いがあり、データバスの論理が反転している。そこで、FDCとのI/O命令のところにCPLを追加していった。
当然I/Oアドレスも実機に合わせて変更した。
単純な書き換えだけではなく、それぞれが何の動作をしているか、FDCのマニュアルを見ながら理解しコメントを書き加えていった。
結局あとでうまく動かない時に、細かく見直す必要があったから、そのようにしておいて正解だった。
調べる都度、データシートを開いて見るよりも、最初からソースにレジスタのビットの割り付けとか機能をコメントとして書いておくと便利。
ただ、2004年の段階でバイナリから逆アセンブルしてソースを再現することもしていた。なぜかというと、移植後にうまく動かない事があり、疑義が生じたので他機種のBIOSの中身を確認してみたかったから。
結局それは読み込むセクター番号が間違っていただけで(わかるまでにはずいぶん回り道をしたが)、修正したら直った。
MZ-2000の場合、テキストVRAMがD000H~DFFFHになる。画面アクセス時、メインRAMの一部を切り換えてVRAMにしてからアクセスする。
従って、そのアドレス範囲にそのプログラムが存在すれば当然暴走してしまう。
そのため画面表示ルーチンをBIOSの終わりの方に置き、アセンブル後にこれらのルーチンがE000H以降に配置されているか、LSTファイルを確認していた。
画面関係のBIOSはMZ-2000用として全部自作した。
基本的にVRAMへの切り換えと、指定したアドレスへの書込だけだから難しくない。
・画面モードの切り換え(80x25)
・画面クリア
・1文字表示
・コントロールコードの処理(それぞれのコードに対する処理も)
・アドレスの計算(表示位置とVRAMアドレス)
・画面スクロールアップ
・Y座標からVRAMアドレスを求める
・カーソル表示
(カーソルを表示する前に、表示位置にあった文字を保存しておく。カーソル移動した時に、元そこにあった文字を書き戻す)
FDDの読み書きルーチンは、印象としては難しく感じるが、すでに原型があったので意外とラクだった。
ただ、X1用なのでMB8877、MZ-2000はMB8876という違いがあり、データバスの論理が反転している。そこで、FDCとのI/O命令のところにCPLを追加していった。
当然I/Oアドレスも実機に合わせて変更した。
単純な書き換えだけではなく、それぞれが何の動作をしているか、FDCのマニュアルを見ながら理解しコメントを書き加えていった。
結局あとでうまく動かない時に、細かく見直す必要があったから、そのようにしておいて正解だった。
調べる都度、データシートを開いて見るよりも、最初からソースにレジスタのビットの割り付けとか機能をコメントとして書いておくと便利。
CP/M移植(1)
2024.02.15
2004年頃にMZ-2000へのCP/M移植をした話は、すでに自分のサイトで書いた。ちょっと久しぶりに思い出してみる。
最初に取り組んだのは高校生の頃で、昭和の末期だった。
図書館から借りてきた本によると、CP/Mは移植できるようだ。その程度の知識からのスタートだった。
ちょうど親戚からもらったMZ-2000が有り、64KB RAM空間だからCP/Mを動かすのにはちょうど良い。
そして当時は、開発ツールがないからハンドアセンブルしかなかった。Z80の命令表を下敷きに入れて持ち歩き、それを見ながらニーモニックをマシン語へ変換していく。
良く出てくる命令は、前に使った部分から書き写せば良いし、やっているうちに覚えてしまい、今でも覚えている。
ある番地から別の番地へのブロック転送は、21 00 00 11 00 80 01 00 20 ED B0 C9 とか。
こんな事に脳の記憶容量を浪費しているなんて。
ハンドアセンブルから脱却しないと、ある程度の規模のプログラムを作るのは非常に効率が悪い。とにかく開発ツールが欲しかった。CP/M上でM80を動かしたかった。
CP/Mはどこから持ってくるかと考えて、いけない事だがPC-8001用とX1用をどこからか入手した。
これを元にして、基本的にはBIOSをMZ-2000用に作れば良い。フロッピーからロードする手段は、また別に必要になる。
PC-8001用やX1用のフロッピーは、MZ-2000で直接読み出す事はできない。直接、というのはたとえばBASICでFILESとやればファイル名のリストが出てきてLOADできるとか、そんなレベルの話。こんなふうに簡単にはできないということ。
とりあえずセクターダンプでは中身をのぞくことができた。但し、FDCの違いによってバスの論理が逆転しているから(MZ-2000はMB8876、他の機種はMB8877など)、論理反転して読み込んでみた。
何番のセクターからどこまでがどのファイルか、なんてのは当時わからなかったから、とにかくひとつずつ読み込んでみて、たぶんここからここまでかな、この分があのファイルじゃないだろうか、と推測していた。
ダンプしていくとテキストファイルだと文字が見えてきて、どうやらこれはBIOSのソースだなと把握することができた。
こうして抽出したテキストをファイル化して、ソースを別のPC上に再現したのは2004年の話。
高校生の当時は、紙にプリントして、うーんと考えるばかり。どこをどう直したら良いんだ?しかもハンドアセンブルで全体を・・・? まだまだ実力が足りなかった。
2004年に取り組んだ時には、別のPC上でソースをアセンブルできる環境があったから、とにかく仕事が進んだ。
ん? 開発環境があるなら今更MZに移植しなくても? (まあ、いいじゃないですか)
最初は1文字入力と出力をシリアル通信に割り当てて、WindowsのPCから通信してCP/Mを動かしていた。そのうちにMZの画面に文字表示できるように作っていったっけ。キーボード入力は作るのが面倒くさくて結局作ってない。
フロッピーから直接CP/M本体を読み込んでブートする方法は最初自分でできなかったから、考えたのはBASICからBLOADすることだった。
とにかくBASIC上で、RAMの空いたところにCP/Mのファイルを読み込んでいき、そこで修正をかけたものをBSAVEして保存すれば!
ちょうど良いことにCP/Mの存在するアドレスとBASICのワークエリアとは干渉しない。
一部だぶったっけ。もう忘れたが、とにかく最初BASICが起動し、それからCP/MをBLOADして、CP/Mへジャンプしたら後はCP/Mだけが動く世界。
最初に取り組んだのは高校生の頃で、昭和の末期だった。
図書館から借りてきた本によると、CP/Mは移植できるようだ。その程度の知識からのスタートだった。
ちょうど親戚からもらったMZ-2000が有り、64KB RAM空間だからCP/Mを動かすのにはちょうど良い。
そして当時は、開発ツールがないからハンドアセンブルしかなかった。Z80の命令表を下敷きに入れて持ち歩き、それを見ながらニーモニックをマシン語へ変換していく。
良く出てくる命令は、前に使った部分から書き写せば良いし、やっているうちに覚えてしまい、今でも覚えている。
ある番地から別の番地へのブロック転送は、21 00 00 11 00 80 01 00 20 ED B0 C9 とか。
こんな事に脳の記憶容量を浪費しているなんて。
ハンドアセンブルから脱却しないと、ある程度の規模のプログラムを作るのは非常に効率が悪い。とにかく開発ツールが欲しかった。CP/M上でM80を動かしたかった。
CP/Mはどこから持ってくるかと考えて、いけない事だがPC-8001用とX1用をどこからか入手した。
これを元にして、基本的にはBIOSをMZ-2000用に作れば良い。フロッピーからロードする手段は、また別に必要になる。
PC-8001用やX1用のフロッピーは、MZ-2000で直接読み出す事はできない。直接、というのはたとえばBASICでFILESとやればファイル名のリストが出てきてLOADできるとか、そんなレベルの話。こんなふうに簡単にはできないということ。
とりあえずセクターダンプでは中身をのぞくことができた。但し、FDCの違いによってバスの論理が逆転しているから(MZ-2000はMB8876、他の機種はMB8877など)、論理反転して読み込んでみた。
何番のセクターからどこまでがどのファイルか、なんてのは当時わからなかったから、とにかくひとつずつ読み込んでみて、たぶんここからここまでかな、この分があのファイルじゃないだろうか、と推測していた。
ダンプしていくとテキストファイルだと文字が見えてきて、どうやらこれはBIOSのソースだなと把握することができた。
こうして抽出したテキストをファイル化して、ソースを別のPC上に再現したのは2004年の話。
高校生の当時は、紙にプリントして、うーんと考えるばかり。どこをどう直したら良いんだ?しかもハンドアセンブルで全体を・・・? まだまだ実力が足りなかった。
2004年に取り組んだ時には、別のPC上でソースをアセンブルできる環境があったから、とにかく仕事が進んだ。
ん? 開発環境があるなら今更MZに移植しなくても? (まあ、いいじゃないですか)
最初は1文字入力と出力をシリアル通信に割り当てて、WindowsのPCから通信してCP/Mを動かしていた。そのうちにMZの画面に文字表示できるように作っていったっけ。キーボード入力は作るのが面倒くさくて結局作ってない。
フロッピーから直接CP/M本体を読み込んでブートする方法は最初自分でできなかったから、考えたのはBASICからBLOADすることだった。
とにかくBASIC上で、RAMの空いたところにCP/Mのファイルを読み込んでいき、そこで修正をかけたものをBSAVEして保存すれば!
ちょうど良いことにCP/Mの存在するアドレスとBASICのワークエリアとは干渉しない。
一部だぶったっけ。もう忘れたが、とにかく最初BASICが起動し、それからCP/MをBLOADして、CP/Mへジャンプしたら後はCP/Mだけが動く世界。
非常用電源
2024.02.12
ポータブル電源は、まだ手が出ません。何と言っても安全性が気になります。リチウムイオン電池の発火事故が怖くて。
それに電池の特性では長期保存時に半分程度の充電にしておかなければなりません。満充電だと寿命が縮みます。その管理も厄介です。
使いたい時に容量半分だとどうなのかと思うし・・・
そこで個人的には鉛バッテリーなのかな、やっぱり、と考えています。

(写真は一例)
カーバッテリー同様に、常時満充電を維持することが基本になっています。
UPSも未だに鉛バッテリーが良く使われています。
浮動充電(常時弱い電流で補充電)を行っていれば、いざという時に満充電で使えます。
欠点は重いことです。なにしろ鉛ですから・・・
これと安価なインバータを組み合わせる。さすがに冷蔵庫まで動かそうとは思いませんが、身の回りの照明とか通信手段に利用できれば。
そしてUSB機器の充電ができるようにすることです。
それに電池の特性では長期保存時に半分程度の充電にしておかなければなりません。満充電だと寿命が縮みます。その管理も厄介です。
使いたい時に容量半分だとどうなのかと思うし・・・
そこで個人的には鉛バッテリーなのかな、やっぱり、と考えています。

(写真は一例)
カーバッテリー同様に、常時満充電を維持することが基本になっています。
UPSも未だに鉛バッテリーが良く使われています。
浮動充電(常時弱い電流で補充電)を行っていれば、いざという時に満充電で使えます。
欠点は重いことです。なにしろ鉛ですから・・・
これと安価なインバータを組み合わせる。さすがに冷蔵庫まで動かそうとは思いませんが、身の回りの照明とか通信手段に利用できれば。
そしてUSB機器の充電ができるようにすることです。
回覧とメール
2024.02.12
社会に出たのは30年以上前、無我夢中で走ってきたらいつの間にかという感じである。
最初に勤めた怪社では、職場で色々な回覧が回ってきていた。
当時は電子メールどころか、個人ごとのPCは無かった。
部品表や図面などはほとんど手書きで、PCは数台しか無く、CADはもっと少なく、それらをみんなで共有していた。共有というか早い者勝ちで、自分のような下っ端の若造はおこぼれで使える程度だったのである。
CADを長時間占有していると、早くどけとか圧力をかけられる。
余談だが、
そんな状態だったので、仕事上の必要か、業務効率化のために個人でPCを買って怪社に持ち込んでいた人がいた。
ある日、総務部の人たちが回ってきて、会社の備品を総点検しているという。確認の済んだ物にはラベルが貼られていった。
とにかく手当たり次第に見てはラベルを貼り付けていったが、その中で、個人PCまで会社の備品としてラベルが貼られてしまっていた。本人、総務部に電話して事情を説明していたが、そもそも買った記録も何も確認せずに、現状に対して単純作業をしていたのは問題だろう。なんていい加減な、と言われても仕方がない。
そのうちに、係長以上にはノートPCが支給された。下っ端の若造の自分には回ってくるはずもなく、自分でジャンクのラップトップを買って持ち込んだりした。
その係長以上のPCも、係長や課長は白黒液晶の98ノート、部長だけカラー液晶の98ノートというヒエラルキーだった。
いまではカラー液晶なんか当たり前なんだが、当時は白黒液晶の方が多かったし、カラーは高価な機種だった。白黒というか青白みたいな液晶もあった。
回覧の話に戻るが、
全員に周知すべき連絡事項とか、新製品のカタログなどが回覧されてきていた。
添付された紙切れには全員の名前とチェック欄があり、閲覧が済んだらマークを入れて、まだ見ていない人へ回す。
病気で休んだり、出張で留守にした後は大変で、自分の机上は回覧が山積みになっていた。これらの処理がまた面倒くさかった。
それに、こんなふうに誰かのところで停まっていると情報伝達の遅れで不都合も生じないかと思う。出勤している人の中で全部回してしまったほうがよくなかったか。
まあ、みんな面倒だから適当に回したんだろうけど、効率も何も考えていなかった。
そして、一番最後の人がその回覧物をどうするかというのも課題だった。ゴミ箱へ入れるのか、所定のファイルに綴じるのか。最後の人に押し付けられてしまう。
いまの時代ならメールに資料を添付して関係者にCCまたはBCCで送れば一瞬で済むしゴミも出ない。保存もフォルダに入れておけば済む。
振り返ってみると、なんとも無駄な事をしていたのだが、当時はそれが当たり前だったから仕方がない。
最初に勤めた怪社では、職場で色々な回覧が回ってきていた。
当時は電子メールどころか、個人ごとのPCは無かった。
部品表や図面などはほとんど手書きで、PCは数台しか無く、CADはもっと少なく、それらをみんなで共有していた。共有というか早い者勝ちで、自分のような下っ端の若造はおこぼれで使える程度だったのである。
CADを長時間占有していると、早くどけとか圧力をかけられる。
余談だが、
そんな状態だったので、仕事上の必要か、業務効率化のために個人でPCを買って怪社に持ち込んでいた人がいた。
ある日、総務部の人たちが回ってきて、会社の備品を総点検しているという。確認の済んだ物にはラベルが貼られていった。
とにかく手当たり次第に見てはラベルを貼り付けていったが、その中で、個人PCまで会社の備品としてラベルが貼られてしまっていた。本人、総務部に電話して事情を説明していたが、そもそも買った記録も何も確認せずに、現状に対して単純作業をしていたのは問題だろう。なんていい加減な、と言われても仕方がない。
そのうちに、係長以上にはノートPCが支給された。下っ端の若造の自分には回ってくるはずもなく、自分でジャンクのラップトップを買って持ち込んだりした。
その係長以上のPCも、係長や課長は白黒液晶の98ノート、部長だけカラー液晶の98ノートというヒエラルキーだった。
いまではカラー液晶なんか当たり前なんだが、当時は白黒液晶の方が多かったし、カラーは高価な機種だった。白黒というか青白みたいな液晶もあった。
回覧の話に戻るが、
全員に周知すべき連絡事項とか、新製品のカタログなどが回覧されてきていた。
添付された紙切れには全員の名前とチェック欄があり、閲覧が済んだらマークを入れて、まだ見ていない人へ回す。
病気で休んだり、出張で留守にした後は大変で、自分の机上は回覧が山積みになっていた。これらの処理がまた面倒くさかった。
それに、こんなふうに誰かのところで停まっていると情報伝達の遅れで不都合も生じないかと思う。出勤している人の中で全部回してしまったほうがよくなかったか。
まあ、みんな面倒だから適当に回したんだろうけど、効率も何も考えていなかった。
そして、一番最後の人がその回覧物をどうするかというのも課題だった。ゴミ箱へ入れるのか、所定のファイルに綴じるのか。最後の人に押し付けられてしまう。
いまの時代ならメールに資料を添付して関係者にCCまたはBCCで送れば一瞬で済むしゴミも出ない。保存もフォルダに入れておけば済む。
振り返ってみると、なんとも無駄な事をしていたのだが、当時はそれが当たり前だったから仕方がない。
チューブを使い切る
2024.02.11
小学生の頃、ある時に目覚めたのだが、
それまでは絵の具や歯磨きのチューブを適当に使っていた。
押さえてやれば中身が出てくる。ただそれだけだと思っていた。
残り少なくなると、どうにかして買わずに済ませたくなる。
そこで、鉛筆で押さえながらチューブをしごいて、あるいは鉛筆を転がすようにして中身を先端に向かって寄せ集めた。
そうするとチューブの中身のない部分はキレイに真っ平らになる。その姿がじつに美しく見えた。全く無駄がない。
ここで目覚めて、とりあえず絵の具の全部のチューブをそのようにしてペッタンコにした。
当時は金属製のチューブだった。(材質は知らないけど鉛?アルミ?)
とにかく、常にペッタンコになるように保守した。
次に歯磨きチューブをしごいてみたが、柔らかい樹脂のチューブなので元に戻ってしまいがちだった。いまいち「美しくない」
それから接着剤のセメダインCとかボンドG-17のチューブをしごいて美しくした。
ところが・・・そうやって強引に中身を押し込んだせいか、圧力が高まった状態になった。チューブのキャップをとると、中身がニョロニョロ出てくる。
わあ、こぼれるこぼれる・・・タラリーと垂れて、始末に負えなくなる。中身が出てくることなんてこれっぽっちも考えてなかった、あの頃。
それまでは絵の具や歯磨きのチューブを適当に使っていた。
押さえてやれば中身が出てくる。ただそれだけだと思っていた。
残り少なくなると、どうにかして買わずに済ませたくなる。
そこで、鉛筆で押さえながらチューブをしごいて、あるいは鉛筆を転がすようにして中身を先端に向かって寄せ集めた。
そうするとチューブの中身のない部分はキレイに真っ平らになる。その姿がじつに美しく見えた。全く無駄がない。
ここで目覚めて、とりあえず絵の具の全部のチューブをそのようにしてペッタンコにした。
当時は金属製のチューブだった。(材質は知らないけど鉛?アルミ?)
とにかく、常にペッタンコになるように保守した。
次に歯磨きチューブをしごいてみたが、柔らかい樹脂のチューブなので元に戻ってしまいがちだった。いまいち「美しくない」
それから接着剤のセメダインCとかボンドG-17のチューブをしごいて美しくした。
ところが・・・そうやって強引に中身を押し込んだせいか、圧力が高まった状態になった。チューブのキャップをとると、中身がニョロニョロ出てくる。
わあ、こぼれるこぼれる・・・タラリーと垂れて、始末に負えなくなる。中身が出てくることなんてこれっぽっちも考えてなかった、あの頃。