OSと言えばコレでしょ!CP/Mスレ ver.4
Z80でTCP/IPって、どんな用途に使うんだろう・・・? ちょっと高いけど大きめのRJ-45コネクタで、CPU側からはシリアルポートに見えるようなものもあるのに?? SDのドライバも存在するからTCP/IPがあってもいいと思うけど。 sharpランゲージシリーズのCP/M買ったけどほとんど使わなかったw OSと別に言語買わないといけなくて、しかもPascalがディスク待ちばかりで萎えた。 前スレにも出てきたが、このサイトはテンプレに入れてもいいんじゃないかな。 The Unofficial CP/M Web site h ttp://www.cpm.z80.de/ >>6 何年後かわからんが、次スイ建てるひとはよろしくやってくれると俺は信じる! 来年中には次スレ建つとは思うけど。 最初のスレは埋まるのに12年かかったのを思うと 書き込みが多くなったんだな。 CP/Mに対するニーズが増えたのか、CP/Mを知ってる人が増えたのか、 それともCP/Mスレの住民が暇になっただけか。 趣味じゃなく、今もCP/Mを使って仕事してる人がいたらすごい CP/MクローンのMS-Dosの子孫のwindosを使わず仕事してる奴いるの?実質CP/Mじゃん フォルダ使わずにすべてのファイルをルートに置いてたら認めよう GEMとかGSXといったグラフィクス環境で実現されてた CP/Mとかの昔モノが絶えたからじゃない? 地方の市が栄えているのと同じ理由。 市の人口が増えてるんで栄えてると思いきや、その周辺が滅びて住人が市に移動してる感じ 私たち日本人の、日本国憲法を改正しましょう。 総ム省の、『憲法改正國民投票法』、でググって みてください。拡散も含め、お願い致します。 憲法とか関係ないから。 こんな過疎板までやって楽しいの? つか、CP/Mを個人で買ったのがどんだけいるのかと。 TurboPascal目的\やSharpランゲージシリーズ(どちらも後期)以外では多くないんじゃ…って思う。 日本では39000円くらいしたかな 8bitパソコンが出る前はCP/Mを個人で買う人はマニアくらいのもんだな 既に動いているCP/Mマシンが無いと別マシン用のCP/Mを作れなかった 自分は会社のマシンを休み時間に使わせてもらった “当然”自分では買ってないw パソコンショップでバイトしてたとき、客先行ってちょっと 様子見てくれって言われて。 MS-DOSかと思っていじったらCP/M-86で驚いた。よく似てた。 昭和の話。 パクリだしな コンピュータ関係の著作権が緩かった古き良き時代 TP(TurboPascal) サザンパシフィックとマイクロソフトどっちが良かったんだろ? なんか雑誌でもめてるって記事見た記憶がある。遠い昔だけど SPLとMSAが雑誌で揉めたのはTPではなくてTCだろ。 環境によっては 0038H をハードウェア割り込みに使ってたりするので そういう場合は要パッチ >DDT 0038H(RST7)ってメモリが無い場所へ暴走したときのトラップに使ってたかも >>30 情報あんがと。 CP/Mのエミュ環境作りだして、CP/M Playerを移植しようかと思ったんだけど8ビットPCエミュの上に作ったほうがよさげだね。 正月、どうせ暇だしほかにやることないから頑張ってみるかな。 RST 38H = FFHだから、メモリが存在しない番地を実行しようとしたときは都合がいい vectorでソース付きでZ80エミュ公開してる人のをいくつか見たけどC言語で書かれてるのが多いね・・・ CP/Mってファイルエントリーが144ででかいファイルがあるとファイル数が減るみた いな事書いてあったけどこれってディスクを丸ごと144等分してて一定のサイズを超 えると次ファイルまで潰れるってことですかね 小さいファイルを大量に扱う場合はまとめるためのアーカイバが必要とか思ったり (x68kに無圧縮のアーカイバが付属してて何のためにあるのか疑問だったけど 開発初期はCP/Mファイルシステムだったのかしら Cで使う.libなんてのも中身はarだし、リソースの少なかった昔の環境では無駄はあまりないよ >>38 たしか、 どのセクタにデータが書かれているかの情報がファイルエントリー内にあって、 大きいファイルになると足りなくなって別のエントリーを使うような感じ。だったはず。 >>38 1つの管理領域(extent)で16KBまでの管理ができる 24KBくらいのプログラムを読み込むときはFDDのシーク音が トン トン トン ギーコ トン トン というような感じだった ギーコで2個目のextentをアクセスしている >>38 ちょっと違うかな。 それはFAT12ファイルシステムの話。 エントリの最大数は112だったような?(細かい数字は失念) FAT12を採用してる限り、CP/Mに限らずどのOSでも同じだったはず。 あと2Dとか2DDなど、メディアの種類によってもエントリ数が違ったような… CP/MはFATではない ディレクトリエントリに直接FATみたいなデータがあって大きいファイルはディレクトリエントリを複数使う 1エントリー16kで等分されてるんですか小さいファイルでも16k消費するみたいな 工夫でなんとかなるから無駄とは思わないし直感的に分かりやすいですね 武田さんところのCPMPlayerをVCからBCC/GCCに移植したんだが元ソース読みづらいし 元々Windows環境のためかutils関数群がWindows依存で困る。 raspi上で動かせるよう目指したが、関数依存で他の環境に移植できず止まってる >Windows依存で困る それをなんとかするのが移植でしょうに 今時のPCは99%Windowsなんだから困る奴のほうがゴミ技術者だろ Windows向けに書いてるのにWindowsに依存するなとかw 素人プログラマかよw そういうバカに限ってマックを使いたがるのは何でだぜ? LinuxにCP/Mエミュぐらいいろいろあるだろうに移植しなくても コンソールアプリのわりには、Windowsに依存してるよね。 まー、エスケープシーケンスの処理とか入ってると思うと仕方ないかなー、ともおもう。 一体この子は何を言ってるんだw 大多数の人、市場はCP/M→DOS→Windowsって進んだんだよw Linuxが安定したのがつい最近、ここ10年だということを知らないのさ。 Linaxが安定したのがつい最近ならMaicrosoftはいつ安定するんだい?いまだに毎月アップデートしてるけど Linuxが安定ねぇ。 カーネルは20年ぐらい前から安定動作してるけどXより上は今でも不安定っちゃ不安定だろ。 ひところよりはましになってるけど。 CP/MプレイヤーをJavaで書き換えてる俺より先にGCCに書き換えちゃった人が出てきたみたいだ。 正月に手を付けたけどなかなか気が向かなくて、ちょっとずつやってるんでトータルでまだ5日分ぐらいかな? でも夏休みまでには終わりそうだ(今年の夏休みとは言ってないw Java屋はなんでもJavaで置き換えようと必死だけど需要ないよね。 冷蔵庫の閉め忘れをセンサーで検出する機能のようなものであるとハードと連携しないとうまくいかないからエミュレーターでI/Oポートが利用できないと難しいが CP/Mで動くBMI計算とか簡単なお薬り検索データベースとか簡単な健康用アプリ作ればjavaでも需要はあるかもね 高齢だからな Javaで書いてるのはAndroidのソフト作るための勉強だよ。 完全に趣味だからのんびりやってる。 50すぎてからJavaに手を出したけど、なかなか面白い言語だよねJava。 googleはJavaパクリ訴訟で負けたから、これからのandroidはkotlinの時代なのに 今更JABAとかこの板らしくて微笑ましいじゃないかw 8(オレオ)も9(パイ)もAOSP見たら中はJavaだったし、AndroidStudioもコトリンと言いつつJavaみたいだったけど? コンパイラの名前が違うぐらいじゃねーのか? OS本体の話ではなくアプリ作成だろう既に50%超えてるらしいよコトリン 古都リンってなんや? アンドロイドのせいで やっとJAVA一色の世界がやってきたのかと思ったのにちがうのか >>51 Linuxで動くsimhというエミュレーターがいろいろなハードウェアに対応してるね vax780やPDP-11にも対応してて4.2BSDや4.3BSD、Version7 UNIXなど昔のUNIXも走る その中でAltairZ80というのがあってこれがAltair 8800のエミュレーターで8080だけでなくZ80にも対応してる simh、AltairZ80でGoogleで検索するとCP/Mを動かしてる人のページがいろいろ出てくる あと、simhはWindows上のCygwinでもコンパイルして動作する ttps://schorn.ch/altair.html ここにsimhのWindows版やMac版のバイナリがある CP/Mのディスクイメージもここにある Linuxならsimhを自分でビルドした方がいい Raspberry PIでやってる人もいるね >>72 文字コードのマルチバイト系は動作するのかね? >>74 文字コードのマルチバイト系は動作するのかの? なんとかキー入力とテキスト表示が実装できたぞJava版(になると良いな)CP/M Player。 CPUと仮想マシン部分が別物になってしまってるけど・・・ 今も昔もみんなJVM入れたがらないから使ってもらえないぞ。 Java版CP/Mplayerは自習用だから公開するつもりはないよ。 ここは公衆便所の壁だろw チラシの裏の方が数段格上だ チラ裏なら他人様に一切迷惑をかけたりはしないからなw >チラシの裏 おまえんちで閉じてろ=他人の目にさらすな って意味だと思ったが、今は違うのか 過疎スレなんだからCP/M関連なら何書いてもいいと思うが 現時点でCP/Mはフリー配布ってことになってるのかしら >>89 ライセンスはSCO子会社のLineoが持っている(らしい) Lineoの許諾を受けたUnofficialなサイトからダウンロード可能 自分で使う分には実質フリーだと思っていいのでは Unofficial CP/M pageのFAQにも書いてある 年末にZ80伝説が出るけど、やっぱり自分で作る人増えるのかな? Z80はまだ手に入るよね するとプログラム作る上でCP/Mエミュレータとフリーで配布されてるソフトが役に立ちそうだね 6502や8080だと命令数が少なくて実装作業は楽なのだがZ80や6809になると命令数が 16bitのように増えるので個人レベルで楽しむのはかなり大変な作業になると思う。 オープンソースのソフトがあると便利だね。 CP/M(1.4)は当時38000円だったかな (Lifeboat?) BIOSは自分のマシンに合わせてASMソースレベルでカスタマイズが必要 それには既に稼働している別のCP/Mマシンが必要だった 8080伝説にCP/Mはアメリカでは75ドルで売られてたと書かれてたような 1ドル250円として計算しても19000円くらいか アメリカでは安かったので爆発的に普及 日本とアメリカではずいぶんと事情が違ってたんだろうね >>95 MAC? …Appleはデジタルリサーチから権利買ったんだろうか? >>96 8080、Z80用のマクロアセンブラ。MAC80.COMだったかな。 自分はずっとM80使ってたけど、 ネット上に有ったCP/MをPC-8801に移植する際に 付属のセクターデブロッキングのソースがMACでしかアセンブル出来なかった。 昔のASMソースにはMAC専用のマクロが書かれている場合もあるようだ。 関係ないけどAppleIIにはz80拡張ボードがあってCP/Mが使えた >>95 シンボリックデバッガってこの時代からあったのか >>98 MicrosoftのSoftCardでしょ。Z80カードとCP/Mのセット 単体としては世界で最も売れたCP/Mだったらしいね >>100 WikipediaのSoftCardの項目に The SoftCard was developed by Tim Paterson of Seattle Computer Products (SCP). と書かれてるね MS-DOSの元となったQDOSを開発したのがSCPのTim Patersonだから このときの付き合いがきっかけでMS-DOSが誕生したのかな? ちなみにマイクロソフトはQDOSの件でTim Patersonに訴訟を起こされて和解してるんだよね Java版CP/MプレイヤーをAndroidに移植完了!って自分のサイトにひっそりとおいておいたらダウンロードしていった奇特な奴がいたw サーチエンジンのクロウラーかなぁ? 多分それ。 うちも誰も来ない個人ホームページ(死語)を放置してあるけど 1日2〜3のアクセスがある。 昔ドスパラにCPMの詰合せがCD5枚組とかで売っていたから購入しとけば良かった。 そんなに入れるものあるのか? ウォールナッツクリークのCP/M CD-ROMでも、一枚で随分余裕があったぞ。 PC−98版のCP/Mってでてたのね。ジャンクで見つけた。 DOSが一般化する前はCP/M86も結構使われていたような V30で8080エミュレーション使う話じゃないのか。 CP/M86 は初代9801とほぼ同時に出荷。82年末。MS-DOSは翌年春。 9801用にはシングルユーザ・マルチタスク版のコンカレントCP/M86もあった。 といってもせいぜいプリンタをバックグラウンドで動かす程度しかできなかったけど。 さらに98用ではなかったっと思うけどマルチユーザ版のMP/M86もあった。 ホスト機のシリアルに文字端末を1ー2台程度つなげて複数人で使えるというもの。 ノンプリエンティブで初期8086が非力なのでお待たさせ感いっぱいで重かったです。 VM2@v30の8080エミュ利用のナンチャッテCP/Mは実際に商品として売られていたです。 83-88年?くらいまではC-BUSなz80基板のカノープスのplus80が人気で 横浜のサザンパシフィックの64180基板とか、類似のCP/Mエミュも売られていた。 ま、それらもDOS用のクロス環境の充実とともにサチュレートしちゃいましたが。 >>115 98用CP/M86は、ディスクが一万円でマニュアルが1.5万円だったんだよな。 DiskBasicで使ってたけど、アセンブラが欲しかったんでCP/M86のディスクだけ買って CP/MでアセンブルしてオブジェクトファイルをBASIC側で読むプログラム作って BASIC+機械語で使ってたわ。 >>115 >それらもDOS用のクロス環境の充実とともに たしかに、DOS版PROASM-II が出てから、98+Z80カードのCP/Mエミュとはいえ、 CP/MのバッチファイルでM80でアセンブルするのが面倒くさくなったな。 DOS版ならMakeもつかえるし。 海外でZedRipperというFPGAでマルチコア16個のZ80マシンを設計した人がいる様子。 CP/MがホストでCP/NOSがクライアント? http://www.chrisfenton.com/the-zedripper-part-1/ インターコネクトにリングバス使ってるのが堅実でいいね クロスバーで16ノードとか個人だと手に余りそうだし X1 turboZ用にCP/Mとhitech C買ってC言語勉強した想い出。 320kb RAMボードも買って無音コンパイルがすげー速くて感動したっけ。 CP/M Version3(CP/M Plus)はZ80でなくi8080やi8085でもよかったんだね。 非バンクメモリ版とバンクメモリ版(最大16バンク)があり、 最大16台のストレージ(A:〜P:)を扱える。 CP/Mのアプリは80桁欲しい。 ビルゲイツがV9938に80桁を求めたのもそれ。 >>116 文豪の件は雑誌にもあったはず、プロセッサかザBasic。 本当かな?とショップで文豪の特殊キー押したりしたあの頃。 雑誌THE BASICで知った。 文豪mini5は何かのキーを押しながら電源入れると CP/Mが立ちあがったと記憶。 FDDは3.5インチ2DD 640KB 8セクタ/トラック。だったと思う。 80/88用CP/MとMBASIC.COMの正規品を購入して CP/Mが立ち上がってる文豪にCOMファイルをシリアル転送。 ただし、エディターは行数変更の必要あり、フォーマットは 文豪の文書ディスクフォーマット機能を使ったかな。 旅行先に持って行ったりした。まだ、ノートPCが高価な頃。 640KB(2DD)のメディアで80トラックだとすると1セクタが512バイトの計算になるかな? その種の源流辿りということなら、CP/MはDECのPDP-8,PDP11というミニコン系列の OSのRT-11、OS/8、TOPS-10あたりまで辿れる。PIPコマンドや論理デバイスの扱い などモロにDEC系。というのもキルダールがDEC使いでCP/Mの記述言語PL/MはPDP-8上で 8080の命令語エミュレータを書いた上で開発されたという経緯。依頼主はインテル。さらに 聞くところによれば日立がインテルからPL/Mのソースライセンスを買ってPL/M68Kを ポーティングしそれを元にDRIがPL/M68Kが。ということらしい。 英語圏ではビジネスアプリも売れたからCP/Mマシンの需要が高かったけど、日本だと開発ツールくらいしか需要がなかった。 >>130 えっ!? ソフトはハードの付録でしょ? ちょっと気が付いたんだが CP/Mで扱えるディスクの最大サイズが8MB、 今Windows10が扱えるパーティションの最小サイズが8MB なにか関連でもあったりするかなぁ? 特にないと思うけどCP/Mのドライブをwin10で読めるなら面白いかもね Wordstarファイルのサルベージが出来るとか 叔父が入院したときにもう使わなくなるだろうからと CP/Mplus一式をくれたんだ… もうワードマスター付きだったから ヒーロー? >>132 一応OSBORNEについて調べてみたよ。ようつべ?に 8bit guysシリーズのビデオで〜Demonstration and Reviewというのがあり、ひととおり動いているところが見れる。 CP/Mは60Kのシステムらしい。”1”の後継機も2種類紹介されていた・・・ CP/M-86 2D のシステムFD を CP/M-86 2HD のシステムFD に コンバートするには如何やったら 正解なの? CP/Mは88/C1で2HDのFDDやHDD起動できたんですかね? X1のCP/Mはエスケイプシーケンスで画面制御できるみたいだが、PC88用は動かない? CP/Mのbdosコール使ってワイルドカードでのファイル探索のプログラムを作ってみたいのだが、たかがDIRと同じ機能を実現しようとして難儀してます。 コールの順番とかあるのでしょうか。 エロい人教えてください。 CCPソースのDIRコマンドのところ見たらそのものずばりのような気が 2.2のOS2CCP.ASMのdirect:のラベルのところ見たら、なんやかやサブルーチンで最終的に jmp bdosになる >>141 FCBが36バイト単位だと勘違いしてました。 C言語のヘッダー見て勘違いしてました。 BDOSコールしたバッファみたら32バイト単位でした。 お騒がせしました。 CP/Mでプログラム終了時にCCP読みに行くのを止める方法ありますかね。 Warmbootに飛ばしても読み出すみたいなので。 >>144 Worm bootに飛ばすとCCPをリロードするのは定番ですね (^^ 5番のBDOSコール実行で実現できます。 LD C,0 JP 0005H >>145 コールドブートの方は試してませんでした。 やってみまーす。 >>144 スタックを少ししか使わないアプリなら RETで戻れるんじゃなかったっけ? SPを自領域に設定する場合は、 CPPのSP値を覚えておいてアプリ終了直前にそのSPに戻してからRET CP/M-80のHDD限界は、128Byte管理で、65536管理の8MByteになるのでしょうか? >5番のBDOSコール実行で実現できます。 すまん、まちがったので念のため。 Cに0を設定しているので「0番のBDOSコール」と書くべきだった。 >>147 なるほどたしかに、C9(RET)のコードで始まる.COMを作成した場合、 実行するとそのままプロンプトが出る。 >>148 自分の考え方(論)です。 DPB(Disk Parameter Block)というメディア・ドライブの仕様より トラック、セクタの数がいずれも1バイトで示されているから。 セクタのサイズ(論理)は128バイト固定。 それぞれ最大値を入れて計算してみてね。 最近思うのだが、16ビットのCP/M-86がMS-DOSの前に破れ去ったのは ゲーリー・キルドールの「進取の無さ」が原因かなと思う。 CP/M-80で一応成功したので、あくせくしなくたって一生遊んで暮らせる 金が手に入ったのだから。 CP/M の構造的な改革に手を出す気なんて無かったんだろうな。 CP/M-86でも、ディスク入れ替えたら^cは必要だったの? >>153 ただね、CP/M の あのディレクトリ・ファイル構造が如何にも 前時代的だったというか、一過性の造りとしか思えない... ディレクトリエントリ内にFATに相当するテーブルも持っていて、それが16バイトしかないから、 16クラスタを超えたら同じ名前のディレクトリエントリをもう1つ作って続番を増やすってやつね。 >>151 奥さんの爪が長かったから、と聞いておる CP/Mは値段がねぇ シャープランゲージシリーズが出るまでは、PCメーカーからは安価なのがなかった。 サードパーティ製は知らん。 当時中学生〜高校生でとにかくカネが無かったので レンタルソフト屋でコピーして使ってた… レンタル屋のデモ機でメディアコンバートまでして持ってくるという図々しさ クラスの奴らには、ただでさえ乏しい小遣いでゲームをコピーしてこない「使えない奴」呼ばわりまでされる始末 PC買い替えたとき友人からコピーソフト入カセットテープもらっただーよ。 反射神経ゼロなんで遊べなかったが(´・ω・`) そういえばCP/Mってカセットテープをストレージに使えたっけ? 全然記憶にない(汗; EPSONならそんな仕様だったか FM-8,7系はROMのBIOS解析するとその機能があった記憶が PC系は全部自己開発だろ >>161 X1のCP/MならCMT.COMってのがあり、 CP/MとBASIC間でデータ交換ができたんだ・・・ >>161 CP/M自体のサポートは無いけど遊びでディジタルカセット(TEAC MT-2)をドライブに仕立てたことがあった FD的に「フォーマット」してトラック・セクタに対応したブロックにR/Wする カセット片面で100KBくらいしか入らなかったかな ディレクトリ管理領域とデータ領域とが何十メートルも離れてたりw (FDでは数センチ程度) カセットテープにはMOUNT REMOVEがいるなんて完全に忘れていたが考えてみれば当然か 昔の人はすごいと思う VMwareでCP/M-86が動くね ASM86も入ってるのでアセンブラプログラミングでもきるよ ttp://www.z80.eu/blog/index.php?entry=entry120807-180000 ttp://www.z80.eu/downloads/cpm86fl2.zip iPadでエミュで610円はお高いカモだが。まあ全部入り簡便なので。 iAltairHD pretends to be a MITS Altair 8800 computer and gives you a glimpse how old operating systems like CP/M 2 have felt. It is fully loaded with software but please note that the system is completely self contained and this means that you cannot remotely add any code. If you want to play a classic text based adventure game such as Zork, talk to Eliza, play Startrek, do a little bit of WordStar or create a little program in Basic or TurboPascal, iAltairHD is for you. The iAltairHD computer supports - 8080, Z80 and 8086 CPU - Basic VT100 terminal emulation for full screen editors and games - CPU speed throttling for classic terminal games - Dropbox integration for disk backup The following software is included: - Altair Basic (4k and 8k) and Altair DOS - CP/M 2 with Basic, Pascal MT+, Prolog, TurboPascal, WordStar, VEDIT screen editor, Multiplan, dBASE II, a collection of classic Basic games and text based adventures - CP/M 3 with the possibility to exchange data between CP/M 2 and CP/M 3 - CP/M 86 with VEDIT and Pascal MT+ 86 - MS-DOS 1.25 with Basic-86 and Perfect Writer https://apps.apple.com/jp/app/ialtairhd/id413875670 >>168 のCP/M-86でAztec C 3.2dが走ったよ ダウンロードファイル https://pastebin.com/TeeWWEfs cpm86fl2.zipのfloppy.flpでVMwareで起動できます vmwareイメージからcp/m-86イメージに変換 cpm86cnv blank_disk_vmware01.flp blank_disk_cpm01.flp vmw-to-cpmt cp/m-86イメージからvmwareイメージに変換 cpm86cnv blank_disk_cpm01.flp blank_disk_vmware01.flp cpmt-to-vmw cp/m-86のイメージにバイナリファイルをコピー cpmcp -f cpm86-144feat convert_disk_cpm01.flp cc.cmd 0:cc.cmd cp/m-86のイメージにテキストファイルをコピー(改行文字をCRLFにしてから変換する) cpmcp -t -f cpm86-144feat convert_disk_cpm01.flp hogehoge.c 0:hogehoge.c Aztec Cのイメージディスク作成方法 cpm86fl2.zipの中のfloppy.flpをコピーして消せるファイルはすべて消してbland_disk_vmware.flpを作りました floppy.flpの中のファイルを消さないと容量的に厳しいようでイメージの中のファイルが壊れました こんな感じでイメージファイルを作りました https://pastebin.com/uDPv0N43 作成されたaztec_c.flpがVMware用のAztec Cのイメージファイルです 作成したaztec_c.cpm.flp、aztec_c.flpは容量的にこれ以上ファイルを詰め込むと イメージの変換時に壊れるようなのでHDDにコピーするなどして使ってください 続き VMwareでCP/M-86でHDDを使う方法 1.仮想マシン起動時にF2を押してVMWareのBIOSを起動する 2.上のメニューのMain画面でPrimary Masterを選択してEnter 3.Type:をUserにする 4.Cylinders:を615にする 5.Heads:を4にする 6.Sectors:を17にする 7.Maximum Capacityが21MBになってることを確認する 8.Multi-Sector Transfers:を16 Sectorsにする 9.LBA Mode Control:をDisabledにする 10.32bit I/O:をDisabledにする 11.Transfer Mode:をStandardにする 12.ESCを押してPrimary Master画面を抜ける 13.F10を押すか上のメニューのEXITにカーソルを合わせてExit Saving Changesを選択してEnter 14.Aドライブにcpm86fl2.zipの中のfloppy.flpを入れてフロッピーから起動する 15.B:ドライブがHDDになっていればOK b: stat dsk: で確認できる pip b:=a:*.* でAドライブの中のファイルをすべてBドライブにコピーできる 続き コンパイル方法 cc exmpl.c ln exmpl.o c.lib アセンブラ出力が必要な場合 cc -a exmpl.c as exmpl.asm ln exmpl.o c.lib 浮動小数点演算を使う場合はm.libもリンクする cc exmpl.c ln exmpl.o m.lib c.lib インクルードファイルのドライブを指定する場合は-iオプションでドライブを指定する (例ではBドライブがインクルードファイルの置かれてる場所) cc -ib: exmpl.c ln exmpl.o m.lib c.lib 続き 書き忘れましたがHDDのフォーマットはHDMAINT.CMDで行います 1.コマンドラインから HDMAINT と入力して起動します 2.F1を押します 3.F6を押します 4.F10を押します 5.Enter partition size:と聞かれるので再度、F10を押します 6.F2を押して2048を選択し、F4を押してwillを選択してF10を押します 7.Creation of CP/M volume completeと出たらF9を押します 8.cpm86fl2.zipの中のfloppy.flpをAドライブに入れてF9を押して再起動します コマンドラインで a: a:stat dsk: と入力して認識してるか確認してください a:pip b:=a:*.* でAドライブの中のファイルをすべてBドライブにコピーできます 確認はコマンドラインで b: a:stat dsk: でした cpmcp.exeを他のの場所にをコピーするときは 同じ場所にdiskdefsも一緒にコピーしてください CP/M-86の使い方はこれを見てください ttp://www.cpm.z80.de/randyfiles/DRI/CPM-86_Users_Guide.pdf 簡単な使い方はこんな感じです eraやpipはMS-DOSと同じようにワイルドカードが使えます era hogehoge.txt hogehoge.txtを削除 pip b:hagehage=a:hogehoge.txt Aドライブのhogehoge.txtをBドライブにhagehage.txtという名前でコピー pip b:=a:hogehoge.txt Aドライブのhogehoge.txtをBドライブにコピー type hogehoge.txt hogehoge.txtを画面に出力 submit hoge.sub hoge.subという名前のバッチファイルを実行する 画面出力はCTRL+Sで止まります再開もCTRL+Sです 最後にフロッピーディスクを入れ替えたらCTRL+Cを押して ディレクトリ情報の更新を必ずしてください CP/M86は1981年の暮れに、DRIのオリジナルターゲットの構成で走らせた。 インテル純正のマルチバス基板 iSBC86/12A(cpu+64KB)+iSBC064(64kb) iSBC208(FDC)。CP/M86は青山の青学会館近くのマンションの一室に オフィスを開設したばかりのMSA(マイクロソフトアソシエイツ)で入手。 空便で今初便が届いたよと連絡を受けて青山に取りに行った。自作PCのように 全てインテル純正の基板と筐体、電源を組み上げて、8インチFDDを接続。 空輸便のオリジナルフロッピー入れて起動。改造無し。一発起動成功でした。 CP/M機を製造販売していた三鷹の某D社の課長に電話入れたら、ウチは もうすでに動いていますよ。DRIとは直接取引していますから。ってね マウント取られちゃったよw この世にIBM-PCも9801も存在していなかった1981年。大昔の話ですなあ。 cpm86cnv.zipの中のCPM86CNV.Cのビルドは Visual Studio Community 2019で行う場合は Visual Studio Community 2019のインストールで 「C++によるデスクトップ環境」を選択してインストールします インストールしたらWindowsを一度再起動します 再起動したら、Developer Command Prompt for VS 2019を起動します cdコマンドでCPM86CNV.Cを保存したディレクトリにカレントディレクトリを移動します 例えばc:\Users\username1\DocumentsにCPM86CNV.Cを保存した場合は cd c:\Users\username1\Documents になります カレントディレクトリを移動したら cl cpm86cnv.c と入力すればcpm86cmv.exeができます Visual Studio Community 2019のインストールは https://www.visualstudio.com/ja/dev-essentials/ にアクセスして「今すぐ参加またはアクセス」をクリックします (Microsoftアカウントが必要になります) 簡単な使い方と簡単なアセンブラのプログラミングと ラインエディタのEDの使い方が載ってます CP/M−86について ttps://libir.josai.ac.jp/il/user_contents/02/G0000284repository/pdf/JOS-KJ00000589197.pdf CP/M86のエディタって相変わらずCP式のやつだったんだ CP/M86やCP/M68Kでもテキストファイル末尾に0x1aは必要だったんですか? http://www.brackeen.com/vga/ ここにVGAの320x200の256色表示のC言語でのプログラミングの方法が載ってるね CP/M-86版のAztec C 3.2d用にとりあえず、pixel.cを移植してみました CP/M-86版のAztec C 3.2dはメモリモデルにsmallモデルしか使えないようなので VGAのメモリアクセスにはAztec C 3.2dの組み込み関数のpokebを使ってます CP/M-86 Aztec C 3.2d VGA TEST pixel.c https://pastebin.com/iNnP3t6P コンパイル方法は cc pixel.c ln pixel.o m.lib c.lib です Bドライブをカレントディレクトリにしてコンパイルする時に インクルードファイルがBドライブにある場合は cc -ib: pixel.c ln pixel.o m.lib c.lib になります >>184 にアップしたプログラムで時間計測の部分にミスがありました 修正版をアップします CP/M-86 Aztec C 3.2d VGA TEST pixel.c https://pastebin.com/JV0sDqR2 また、lines.cも移植してみました CP/M-86 Aztec C 3.2d VGA TEST lines.c https://pastebin.com/ShmSSnec コンパイル方法は cc lines.c ln lines.o m.lib c.lib です Bドライブをカレントディレクトリにしてコンパイルする時に インクルードファイルがBドライブにある場合は cc -ib: lines.c ln lines.o m.lib c.lib になります 上のCP/M-86でAztec C Ver 3.2dを使う方法がわかりにくいと思われるので CP/M-86でAztec C Ver 3.2dを使う方法をまとめてみました VMware PlayerのCP/M-86上でAztec C Ver3.2dを使う方法 https://pastebin.com/0zpmybh7 こちらのVGAの320x200の256色画面のC言語によるプログラミングのサンプルプログラムを CP/M-86のAztec C 3.2dに移植してみました 256-Color VGA Programming in C http://www.brackeen.com/vga/ ここのこれらのプログラムを移植しました pixel.c lines.c rect.c circle.c bitmap.c palette.c unchain.c modes.c mouse.cはマウスが使えないので移植してません 5chはたくさんのURLを一度に貼れないのでこちらに各ソースコードのURLを貼ってあります https://pastebin.com/tGGgYmGQ 続き コンパイル方法は8つのプログラムどれも一緒です コンパイル方法は cc pixel.c ln pixel.o m.lib c.lib です Bドライブをカレントディレクトリにしてコンパイルする時に インクルードファイルがBドライブにある場合はccで-iオプションで-ib:のように指定します cc -ib: pixel.c ln pixel.o m.lib c.lib になります PC-9801Fを買ったとき、N88diskBASIC環境でアセンブラがなかったから CP/M86のディスクだけ買ってきた。 (ディスク1万円、マニュアル1.5万円でNECは売ってたんだよね) で、CP/M86のアセンブラ使ってプログラム作っては、DiskBasic側で読み込んで BASIC+機械語の形で動かしてた。 CP/M86が動くx86系CPUって、どれが最後なんだろ? リアルモードがある奴ならCP/M86は動きそうな気はするけどFD付かないマザボでも動くんだろうか? vmware上でなら、ryzenでも動いた。実機では試してないけど。 uefiのみになってBIOS互換モード廃止されたM/BならCPU自体は対応できても起動できなくなるのでは? いちおうBIOS対応してても動作が酷くて実用にならないようなのもあるしな MS-DOSにはさすがに自己書き換えコードは入ってないかな? どうだろうね。masmの教科書で、任意のソフト割り込みをかけるマクロがint21→バイナリでcd 21だけど、この21を書き換えることで任意の割り込みをかけるようなマクロの記載があったから、そのまま使っていれば自己書き換えするはず >>199 マクロならコンパイルした後は変わらないのでは? Cのマクロならね。 masmだからそのまま展開されます。 ソースを書き換えるマクロじゃなくてコードを書き換えるマクロが展開されるならCでもアセンブラでもコード書き換えは出来るか コードセグメントのアドレスさえ手に入れられる言語で、8086のようにコードセグメントでも書き込みができるCPUなら わかんねぇわかんねぇって思いながら、ずっと俺のこと考えてな ・CP/M68Kを98に移植する。I/O雑誌 工学社 1986年8月号 (234ページ参照) ------------------------------------------------------------------ https://archive.org/details/Io19868/page/n235/mode/2up ------------------------------------------------------------------ ハード構成: PC-9801本体 + PC-9801-16(68000ポード) + PC-9801-17(68000専用メモリポード) ソフト構成: CP/M-86(OS) + CPM400.SR など ・CP/M-68K バージョン 1.2 バイナリファイル ------------------------------------------------------------------ http://www.cpm.z80.de/download/68kv1_2.zip ------------------------------------------------------------------ 「68kv1_2.zip」を解凍し、「DISK」フォルダの中にある「CPM400.SR」「CPMLIB」「LO68.REL」 「RELOC.REL」ファイルが既に入っています。 バイナリエディタで「SREAD.CMD」「L68K.CMD」「HI68.CMD」バイナリファイルを編集しますが、 そのまま実行できないので、以下のようにCMDベッターを作成する必要があります。 [1]「SREAD.CMD」CMDベッターファイル内容は次のとおり。 ------------------------------------------------------------------ 0000 01 27 00 00 00 27 00 00 ・・・・・・・・・00 0010 00 00 00 00 00 00 00 00 ・・・・・・・・・00 0180 B8 00 00 2E A3 3C 02 B8 ・・・・・・・・・BA ------------------------------------------------------------------ ※ PC-9801-16(68000ポード)が無くても「CPM400.SRO」ファイル出力可能です。 [2]「L68K.CMD」CMDベッターファイル内容は次のとおり。 ------------------------------------------------------------------ 0000 01 31 00 00 00 31 00 00 ・・・・・・・・・00 0010 00 00 00 00 00 00 00 00 ・・・・・・・・・00 0180 BB CA 02 E8 1F 00 B8 00 ・・・・・・・・・41 ------------------------------------------------------------------ [3]「HI68.CMD」CMDベッターファイル内容は次のとおり。 ------------------------------------------------------------------ 0000 01 34 00 00 00 34 00 00 ・・・・・・・・・00 0010 00 00 00 00 00 00 00 00 ・・・・・・・・・00 0180 BB E5 02 E8 0E 00 B8 00 ・・・・・・・・・30 ------------------------------------------------------------------ 「SREAD.CMD」「L68K.CMD」「HI68.CMD」バイナリファイルを編集した後、 できれば、MS-DOS上で逆アセンブルして、「CSEG」「ORG 100H」を追加し、 プログラムを編集してからCP/M-86上でASM86コマンドでアセンブルして、 GENCMDコマンドで「CMD」実行形式ブログラムを出力しておけば良いです。 「SREAD.CMD」バイナリファイルの中に一部の逆アセンブルできない部分がありますが、 しかたなく、DW命令でバイナリデータ([例] DW 2EA3H)を直接編集しておくと良いです。 GENCMDコマンドで「CMD」実行形式ブログラムを出力した後、ちょっと面倒ですが、 バイナリエディタで「A3 2E」<->「2E A3」を逆変換して修正する必要があります。 それは2バイトのチェックサム値っぽいではないか?と推測されますが。 ・バイナリエディタ MEDIT ------------------------------------------------------------------ https://www.vector.co.jp/soft/dos/util/se020725.html ------------------------------------------------------------------ ・マルチプル機械語エディター EDIX (チェックサム機能付き) ------------------------------------------------------------------ https://www.vector.co.jp/soft/dos/util/se000796.html ------------------------------------------------------------------ PC-9801用で68000ボードっていうと勝山システムのKSB-2が圧倒的に 安かったからな CPU乗っ取り形じゃなくてI/Oや表示は本体のCPUにやらせてCP/M-86と CP/M-68Kが98側とボード側で同時に動く変態ボードだった。 L68K.CMD からL68D.CMD(デバッグ用)にコピーして、 0239アドレスに下記の5バイト分を書き換える。 ------------------------------ 0239 F4 E9 FC FF FA 0239 B1 00 CD E0 00 ------------------------------ HI68.CMDからHI68D.CMD(デバッグ用)にコピーして、 0254アドレスに下記の5バイト分を書き換える。 ------------------------------ 0254 F4 E9 FC FF FA 0254 B1 00 CD E0 00 ------------------------------ CP/M-68Kが起動できない場合、上記のデバッグプログラムを作成しておけば、 デバッグプログラムを実行後、DDT86コマンドでメモリダンプを参照できます。 A>DDT86 -D1000:0400 (CPM400.SROメモリダンプが表示されるはず) -D1000:6000 (BIOS68Kメモリダンプが表示されるはず) 68000ボードの0番地のアドレス設定値(スイッチ2G2)と クロック周波数(スイッチ2G3)を取得するプログラムを 作成してみました。 ------------------------------------------ BDOS EQU 0E0h CR EQU 0DH LF EQU 0AH cseg org 100h in al,9Fh and ax,0Fh cmp al,0Ch jnz LBL1 mov cl,9 mov dx,offset OK1 int BDOS jmp LBL5 LBL1: cmp al,0Dh jnz LBL2 mov cl,9 mov dx,offset OK2 int BDOS jmp LBL5 LBL2: cmp al,0Eh jnz LBL3 mov cl,9 mov dx,offset OK3 int BDOS jmp LBL5 LBL3: cmp al,0Fh jnz LBL4 mov cl,9 mov dx,offset OK4 int BDOS jmp LBL5 LBL4: mov cl,9 mov dx,offset NG int BDOS LBL5: mov cl,00h int BDOS dseg org 100h OK1 db CR,LF db 'PC-9801-16 Board 5MHz + 10000h SET OK!!' db CR,LF,'$' OK2 db CR,LF db 'PC-9801-16 Board 5MHz + 20000h SET OK!!' db CR,LF,'$' OK3 db CR,LF db 'PC-9801-16 Board 8MHz + 10000h SET OK!!' db CR,LF,'$' OK4 db CR,LF db 'PC-9801-16 Board 8MHz + 20000h SET OK!!' db CR,LF,'$' NG db CR,LF db 'PC-9801-16 Board no Found!!' db CR,LF,'$' end ------------------------------------------ 現時点では、CP/M-68Kが起動できない原因はまだわかりませんが、 下記のように、スタートアドレス設定が必要とか、スタックをセットし、 INITへジャンプする必要があると思いますけど。 L68K,HI68プログラム(後半)にスタックプログラム(PUSH,POP,IRETなど)が既に入っていますが、 何も実行されない状態で、CP/M-68Kが起動できないみたいですが。 例えば、L68KのCMDベッターにスタートアドレスとか、04のスタックアドレスをセットするとか。 もしくはSR400.MAPファイルを正しく編集するとか。 逆アセンブラで(L68K),HI68プログラムに6F01,(6F06)アドレスが記載されてあり、 INITへジャンプするための作業領域?とか、チェックサム値?をセットするとか? ●SREAD 「スタートアドレスとチェックサムはすべて省略しています」と記載されてありますけど、 スタートアドレスをどのように設定するのがよくわからず、 CMDベッターにスタートアドレスを入れるとか、まだ不明ですが。 [参考文献] https://archive.org/details/Io19837/page/n321/mode/2up [表1 CP/M-68K 移植手順] (I/O雑誌 1983年7月号 319ページ参照) -------------------------------------------------------------------------------- @他のシステムもしくは68KモニタなどでBIOSを作成する。 ASフォーマット・ローダーを作成し、SR400.SYSまたはSR128K.SYSファイルを メモリにロードする(BDOSとCCPのみのファイル)。 B@で作成したBIOSをロードする。 CAでロードしたプログラムの頭($400,$15000)から実行する(スタックをセットし、INITへジャンプする)。 注)BIOS作成時のCP/Mのエントリ・ポイントの変更点 ------------------------------------------------- INIT:SR400 $5F96 ,SR128K $19B96 SR400 $4F4 ,SR128K $150F4 ------------------------------------------------- ●CCP,BDOS,BIOSはどこにあってもかまいません。 -------------------------------------------------------------------------------- [参考文献] プロセッサ 1985年11月号 技術評論社(54〜64ページ参照) https://www.suruga-ya.jp/product/detail/ZSARU6973 その内容にPC-9801-16 ボードの機能概要とMS-DOS上で動作する サポートソフト(NEC製)の概要が記載されてあります。 PC-9801-16 メモリマップとメモリ動作概要とIN,OUT命令(I/Oポート)しかなく、 サポートソフトの概要を読んでも使いものになりません。 おう、阪神が西武をこてんぱんにして日本一になった年だな ----------- : : CALL SUBR RET ----↓----- : : JMP SUBR ----↓----- : : SUBR: ----------- ----------- : : CALL SUBR RET ----↓----- : : SUBR: ----↓----- : : JMP SUBR ・・・BIOSをCCPとBDOSに接ぎますが、このとき_ccpと_initの2つの アドレスだけはリンクしなければなりません。 リンカならすぐにできる、この作業も手で書き加えなければなりません。 SR400.SYSの$4F96は、4EF900000000になっています。 4EF9は絶対アドレス・ジャンプで、この次の部分を _initのアドレスに改めることによりリンクできます。 _ccpは$4F9Cなので、BIOS中の_ccpをこのアドレスにします。 BIOSとのリンクが終わったシステムは、CCPとBDOSの先頭アドレスから 実行を開始することにより、CP/M68Kが走り始めます。 このとき、ディスクが少し動いて何もメッセージもなく、 いきなり、A>のプロンプトが表われ、CP/M68Kが動きます。 このときからCP/M68Kの全ての機能が働きます。 とマイコンピュータNO.12 (徹底特殊 MC68000とCP/M68K)雑誌 (135ページ)に記載してありました。 CPM400.MAPの中身を覗いてみたら、 _ccp(4B8)と_init(6000)アドレスが入っていました。 ----------------------------------------------- _ccp 4B8 global text cpm 400 global text _bdos 4C6 global text _init 6000 equ global abs ----------------------------------------------- DDT.68Kを起動してから「-R BIOS68K」を入力し、 BIOS68Kプログラムを逆アセンブラで覗いてみました。 ----------------------------------------------- movea.l #6F01,A1 : jmp $4B8 : movea.l #6F06,A0 : movea.l #6F80,A1 : movea.l #6F80,A2 ----------------------------------------------- 上記の6F01と6F06と4B8アドレスが見つかっており、 BIOS68Kプログラムを書き換える必要はないですが、 CP/M86のCMDヘッダ側(04)でスタック領域を確保しておかないと CP/M68Kが起動できないのではないかと思うけど? 例外(動作保証なし)ですが、「SREAD」CMDベッターを編集してみて、 それを実行してみたら、SR400.SROが勝手に出力されました。 ------------------------------------------------------------------ 0000 01 18 40 00 00 18 40 00 00 02 C0 0B 00 00 C0 0B 0010 00 00 00 00 00 00 00 00 ・・・・・・・・・・・00 0080 B8 00 00 2E A3 3C 02 B8 ・・・・・・・・・・・BA ------------------------------------------------------------------ 上記のアドレス0180ではなく、0080でした。半年前だけど、 DSEGセグメント(02)を用いて、プログラム実行を試してみました。 再度、BIOS68Kプログラムを逆アセンブラで覗いてみたら、 なぜ、stop命令が入っていたかわからないですが。 ---------------------------- move.b D0,$600000 stop #$2000 clr.l D0 ---------------------------- >>228 ありがとうございます。_intが既にわかっていたけど、 CP/M68K(英語版)の68ページを参照し、 _ccpが記載してあるけど、_intが見つからなかった。 http://www.bitsavers.org/pdf/digitalResearch/cpm-68k/CPM-68K_System_Guide_Jan83.pdf 166ページに前回(NO.11)の訂正と補足が記載してありますけど、 次回NO.13に訂正箇所が記載してあるかどうか確認すると良いですが。 マイコンピュータNO.14 入門特集8086 アセンブリ・プログラミング103ページを参照し、 プログラム本体はコード領域に、メモリはデータ領域に 指定して用いましたが、さらにスタックを用いるときは、 それをスタック領域に、また繰り返し転送、比較を行うときには、 予備領域を用います。これらのいくつかの領域を用いるときは、 それぞれの区分名がどの領域に属するものであるかを、 すべてASSUME命令で指定しておきます。 例えば、CSEG、DSEG、SSEGをそれぞれコード、データ、 スタック領域に指定するには、 ASSUME CS:CSEG ASSUME DS:DSEG ASSUME SS:SSEG ASSUME ES:NOTHING のように書きます。 1つのASSUME命令の処理対象に、いくつかの領域指定を 同時に行うことができます。このときはそれらを ,(カンマ)で 区切って並べておきます。例えば、 上の例は、 ASSUME CS:CSEG , ASSUME DS:DSEG ASSUME SS:SSEG , ASSUME ES:NOTHING と書きます。 >>212 あぁ勝山さん元気かなぁ?独特の雰囲気のエンジニアだった 最近になってPlus初めて使った。 リブートなしってこんなに快適だったのかと https://archive.org/details/Io198610/page/n239/mode/2up I/O雑誌 1986年10月号239ページに 「86年8月号に掲載されたCP/M68Kを98に 移植するの記事中、BIOS.Oが抜けていました。 必要な方はI/O編集部まで書面にて連絡してください」 と記載されてありました。 read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる