S-OS Sword

  • 投稿日:
  • by
  • カテゴリ:

その昔、Z80ベースのPCで、共通のシステムを作るという試みがあったんですよ。CP/Mのような重厚長大なものではなく、SharpのMZシリーズをベースとしたシステム。ソフトバンクパブリッシングの Oh! MZに掲載されていた、S-OSです。

MZシリーズ以外でも、BIOSに相当する部分を実走すれば動いたので、X1やらPC-8001/8801やら様々な機種に移植され、単一バイナリで、どの機種でもアプリが走るという夢のような環境が実現しました。

システムそのものは、システムコールというかジャンプテーブル+BIOSの実装という体で、プロセス管理やメモリ管理のための機能などなく、また、行儀の悪いプログラムがあろうことかジャンプテーブルを書き換えて勝手なコトをしたりとやりたい放題なものでした。

ただ、妙にアセンブラを中心とした開発環境が整っていて、数多くのアプリが発表されたり、作られたり、またアセンブラの勉強をこれでした、というような人を多数輩出することとなりました。

当時、PC-8801mkIIを使っていたわたしも、ご多分に漏れず、夢中になってダンプリストを入力しては動かし、掲載されたソースをいじっては遊ぶというような状況でした。PC-8801mkIIユーザなのに、Oh!MZやOh!Xを買ってたわけです。

そんな、S-OSのエミュレータが、Linux上でも動くらしいというのを今更見かけて、トライしてみました。Cygwin用のソースを単に、configure & makeするだけなんですけれどね。

いや、ま、あっさり動きました。おまけに、カレントディレクトリがQドライブ(Quick Disk)に見えるという至れり尽くせり具合で、早速あれこれ動かして、、、みたのですが、フォントがなかったり、あと、アプリの操作説明などがなかったりで、殆ど何も出来ませんでしたとさ。もう思い出せないんだよね、アセンブラとかもどうやってソース入力して、どうやってアセンブリして、どうやって、それをリンクして実行形式にしてたかとかさ。

SmallCなら動かせるかとトライしてみたら、どうも、SmallCは一部のジャンプテーブルを書き換える様子。Linux版は、ジャンプテーブルの大半を、HALT命令+番号+C9というセットで置き換えていて、HALTでZ80シミュレータから戻ってきたら、番号をみて、Cで書かれたサービスを実行して、システムに戻る(=C9 -- RET命令を実行する)という風になっているので、ジャンプテーブルの行き先部だけ書き換えられると、HALTの後ろが書き換わって動かなくなってしまうということだけ判りました。とりま、書き換えられたっぽかったら、PCをその宛先に置き換えて、シミュレータへ返すという風に書き換えてみたんですが、うまく動きませんでした。まあ、そんなわけで、ただ動いているというだけのモノが手に入ったんですが、さて、これどうしたものか?

(S-OSについてはこちらにまとまった情報があります。)