[C] CP/M80 シミュレーターで懐かしの BDS-C を動かしてみた
先日、自宅の本棚を見ていたら、ちょっと古めのIT関連本が有ったので、写真を撮って SNS にアップしてみたところ、IT系の知人が結構懐かしがった。
Z80 や MC6809 のアセンブリ言語の話題から、BDS-C の話題になった。
私も色々思い出してきて、どんどん懐かしくなってきた。
BDS-C について
BDS-C は、BD Software 製の i8080/Z80 用のプログラミング言語 C のコンパイラーだ。CP/M80 上で使えた。
C のサブセットで、浮動小数点数を直接サポートしておらず、代わりに浮動小数点演算ライブラリを使うようになっていた。廉価版に α-C があり、当時の C の処理系としては安かった (はっきりとは覚えていないが、他が10万円クラスだったのが、α-C は数万円程度だった気がする)。
BDS-C を試してみよう
懐かしくなったので、BDS-C を動かしてみることにした。ちなみに、手元の環境は、Windows 8.1。
BDS-C は現在無償で公開されている。
このサイトで、BDS-C のコンパイラー (cc.com、cc2.com) やリンカー (clink.com)、そして、それらの CP/M80 用のアセンブリ言語のソースコード、ユーザー マニュアル等をダウンロードすることができる。
CP/M80 は手元にないので、シミュレーターを使うことにした。
SIMH Altair 8800 simulator
シミュレーターと CP/M、BDSーC のディスク イメージのダウンロード
CP/M のシミュレーター/エミュレーターは色々とあるようだが、Altair 8800 のシミュレーター SIMH Altair 8800 simulator を使うことにした。
Altair 8800 は、1974年に開発された世界初の個人向けコンピューターで、これ用の BASIC インタープリターをビル・ゲイツとポール・アレンが書いたのがマイクロソフトの始まりになったことで有名だ。
サイトではシミュレーター本体だけでなく、CP/M80 を含んだ BDS-C のディスク イメージもダウンロードすることができる。
-
サイト内の Executables and Sources
「Executable for PC with documentation」からシミュレーター本体をダウンロードすることができる。
-
サイト内の Programming Languages
「C」から CP/M Version 2.2 付きの BDS-C 1.60 をダウンロードすることができる。
尚、このサイトでは、他にもこのシミュレーター用の沢山のプログラミング言語の処理系や OS、アプリケーション、ゲーム等のディスク イメージをダウンロードできる。
シミュレーターと CP/M、BDSーC の起動
ダウンロードした二つの圧縮ファイル (altairz80.zip と bdsc.zip) を解凍して、一つのフォルダーに入れる。
ここでは、「C:\Altair 8800 simulator」というフォルダーを作成した。
中身は、次のようになった (コマンド プロンプト)。
Microsoft Windows [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved. C:\>cd C:\Altair 8800 simulator C:\Altair 8800 simulator>dir /b altairz80.exe altairz80_doc.pdf bdsC bdsc160.dsk bdsc160source.dsk cpm2.dsk i.dsk simh_doc.pdf simh_faq.pdf C:\Altair 8800 simulator>
シミュレーターを起動し、CP/M 付き BDS-C のディスク イメージを読み込み、CP/M を立ち上げてみよう。
コマンド プロンプトで、「altairz80 bdsC」と入力する。
画面は次のようになる (コマンド プロンプトの続き)。
C:\Altair 8800 simulator>altairz80 bdsC Altair 8800 (Z80) simulator V3.9-0 build 1625 (scp created Feb 10 2013 at 09:37: 45 with gcc 4.2.4) 64K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.23, 2 HD, 08-Oct-06) A> --------------- Altair 8800 (Z80) simulator V3.9-0 build 1625 (scp created Feb 10 2013 at 09:37: 45 with gcc 4.2.4) 64K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.23, 2 HD, 08-Oct-06)
通常のドライブ A の他に、BDS-C のドライブが二つ (B ドライブと C ドライブ) 追加されている。C ドライブには、CC.ASM 等 BDS-C 自体のソースコードが入っているようだ。
試しに、それぞれのドライブの中を見てみよう。
A>dir A: PIP COM : LS COM : XSUB COM : STAT COM A: GO COM : RSETSIMH MAC : SYSCOPY COM : XFORMAT COM A: SPEED COM : W COM : L80 COM : M80 COM A: WM HLP : WM COM : SUBMIT COM : FORMAT COM A: SYSCPM2 SUB : SYSCPM2Z SUB : DDTZ COM : DSKBOOT MAC A: EX MAC : EX8080 COM : ED COM : DDT COM A: LOAD COM : ASM COM : LU COM : MBASIC COM A: ELIZA BAS : DUMP COM : CREF80 COM : EXZ80DOC COM A: EXZ80ALL COM : EX SUB : UNERA COM : BOOT COM A: OTHELLO COM : WORM COM : LADDER DAT : LADDER COM A: ZSID COM : ZTRAN4 COM : SURVEY MAC : SHOWSEC COM A: BOOT MAC : HDSKBOOT MAC : TIMER MAC : UNERA MAC A: R COM : CFGCCP LIB : CFGCCPZ LIB : MOVER MAC A: CCP MAC : CCPZ MAC : USQ COM : MC SUB A: MCC SUB : MCCL SUB : RSETSIMH COM : CPU MAC A: TIMER COM : UNCR COM : SURVEY COM : CPU COM A: COPY COM : SID COM : LIB80 COM : CCPZ TXT A: ZAP COM : PRELIM MAC : PRELIM COM : BDOS MAC A: CBIOSX MAC : DIF COM : DO COM : BOOTGEN COM A>dir b: B: BDSCPAT Z80 : -READ ME : BDS LIB : CMODEM C B: C CCC : C SUB : CASM C : CASM SUB B: CC COM : CC2 COM : CCC ASM : CCONFIG C B: CCONFIG COM : CCONFIG H : CCONFIG2 C : CHARIO C B: CLIB COM : CLINK COM : CLOAD C : CRCKLST1 CRC B: DEFF CRL : DEFF2 CRL : DEFF2A CSM : DEFF2B CSM B: DEFF2C CSM : FILES DOC : L2 C : SOURCES LBR B: STDIO H : STDLIB1 C : STDLIB2 C : STDLIB3 C B: ZCASM LBR : -LBR NOT : BCD LBR : BDSCIO H B: BUGS DOC : CDEBUG LBR : CRCK COM : CRCK DOC B: CRCKLST2 CRC : DEFF15 CRL : LBREXT COM : LDIR COM B: LONG C : MCONFIG H : RED LBR : TARGET C B: UNCRUNCH COM : CASM CRL : CASM COM : CHARIO CRL B: L2 COM : CCV16PAT HEX : CLOAD COM : TAIL C B: CCV20PAT HEX : CMODEM H : CMODEM2 C : CP C B: DATE C : DIO C : DIO H : HARDWARE H B: LPR C : NDI C : NOBOOT C : RM C B: UCASE C : WILDEXP C A>dir c: C: A SUB : CC ASM : CC SUB : CC2 ASM C: CC2A ASM : CC2B ASM : CC2C ASM : CC2D ASM C: CC2E ASM : CC2L ASM : CC2SLR ASM : CCA ASM C: CCB ASM : CCC ASM : CCD ASM : CCL ASM C: CLINK ASM : CLINKA ASM : CLINKB ASM : CLINKL ASM C: LASM COM : NCC SUB : NCC2 SUB : NCC2S SUB C: NCC2Z SUB : NCCD SUB : NCCZ SUB : NCLINK SUB C: NZCLINK SUB : PUT BTM : README TXT : CHARIO C C: L2 C : STDIO H : CC COM : C CCC C: CLINK COM : DEFF CRL : CC2 COM : DEFF2 CRL C: L2 COM A>
B ドライブに、BDS-C のコンパイラー (CC.COM、CC2.COM) やリンカー (CLINK.COM) がある。ちなみに、A ドライブには、BDS-C で書かれたオセロゲーム (OTHELLO.COM) が入っている。
BDSーC で "Hello world!"
では、お約束の "Hello world!" をやってみよう。
CP/M で B ドライブに移動して、ライン エディターの「ed」 (CP/M が内蔵している テキスト エディターの一種) を立ち上げ、hello.c というファイル名で Hello world! と出力する C のプログラムを書く。
勿論、古い C の文法で書く必要がある。
A>b: B>ed hello.c NEW FILE : *i 1: #include <stdio.h> 2: 3: main() 4: { 5: puts("Hello world!"); 6: } 7: : *e B>
hello.c の中身を覗いてみる。書いた通りのソースコードになっているのが確認できる。
B>type hello.c #include <stdio.h> main() { puts("Hello world!"); } B>
では、BDS-C でコンパイルし、リンクしてみよう。コンパイルは cc、リンクは clink だ。
B>cc hello.c BD Software C Compiler v1.60 (part I) 36K elbowroom BD Software C Compiler v1.60 (part II) 33K to spare B>clink hello BD Software C Linker v1.60 Last code address: 0901 Externals start at 0902, occupy 0006 bytes, last byte at 0907 Top of memory: E405 Stack space: DAFE Writing output... 46K link space remaining B>
エラー無くコンパイルとリンクができたようだ。
実行ファイルが出来たことを確認しよう。
B>dir hello.* B: HELLO C : HELLO CRL : HELLO COM B>
問題ないようだ。
では、愈々実行だ。
B>hello Hello world! B>
無事 Hello world! と表示された。
めでたし、めでたし。
ディスカッション
コメント一覧
まだ、コメントがありません