SBC8080(CPUボード+SUBボード)でmicroPASCAL80が走りました
4月27日のブログで、SBC8080でGAME80が動作したと報告しましたが、それを見てくださったskyriverさんが、CP/M80上でGAME80インタプリタだけでなく、コンパイラも走らせました。それを参考にして、私のSBC8080でもコンパイラを走らせることができました。
GAMEIIIは68系で使用していましたが、アセンブラよりも手軽にコンピュータを自由にあやつれるのはとても魅力的ですが、プログラムの可読性がいまいちだなと思うのは私だけでしょうか。(私が慣れることができなかっただけ?)その頃はUCSD PASCALにあこがれていましたね。
GAMEIIIより1年半ほど後に、丸山定信さんによりASCII誌(1980年1月号)にmicroPASCAL80が発表された時は、68系の私はうらやましくてただ指を銜えて見ているだけでした。
ようやく11月号に河崎道明さんによってmicroPASCAL68が発表され、当然私も5KB近いバイナリを頑張って入力しました。今でも、私の自作6802基板で動いています。
今回、SBC8080基板を製作し、GAME80が動いたので、当時あこがれていたmicroPASCAL80も走らせてみることにしました。
丸山さんの発表ではソースリストも掲載されていたのでアドレス変更も含めて楽勝だと思ったのですが、当時の放電プリンタの文字には悩まされましたね。
動くことは動くのですが、変数の代入ができないという変な状況に悩まされましたが、何回も見直した結果、ソースの入力間違いが一文字あるのをようやく見つけ、それを訂正して無事に動作しました。
ということで、GAME80インタプリタ, GAME80コンパイラ, microPASCAL80の3つをSBC8080SUBボード上のROMに入れ、モニタから自作のLoadコマンドで選択・実行する形で仕上げました。
(1)GAME80インタプリタ 元がソースでなくバイナリなのでそのままのアドレス8600hからのバイナリファイルをROMの7800hからに収めるようにHEXファイルに変換します。→ GAME80-7800.hex
(2)GAME80コンパイラ 元はGAME80のプログラムですからGAME80インタプリタの動作中に読み込めばよいのですが、その手間を省くために、予めメモリ中の保存形式に変換してROMに収めておき、メモリのA000hからに転送します。ROMの6000hからに収めるようにHEXファイルに変換します。保存形式への変換は前回のブログで公開した
[5月25日訂正]変換用のプログラムはCvtMotHexBin.exeではなくChglno.exeです。
(3)microPASCAL80インタプリタ 元がソースですのでオリジナルの2000hからの開始アドレスを8000hに変えてアセンブルします。できたバイナリをROMの4800hからに収めるようにHEXファイルに変換します。→ MPas80-4800.hex
(4)Loader ソースは7F00hからですので、そのままアセンブルしてHEXファイルに変換します。 → LOADER.hex
(保存形式への変換、HEX形式への変換には前回のブログで公開した自作のChglno.exe, CvtMotHexBin.exeを使っています。)
ROM中の配置図 |
[5月16日訂正]上図中のGAME80インタプリタとGAME80コンパイラの位置が入れ替わっています。正しくは、コンパイラが6000hからで、インタプリタが7800hからです。
これら4つのHEXファイルを、SBC8080のdatapck中のPTBEXSA.HEXファイルの後ろにつけてROM用ファイルの出来上がりです。
各ファイルの変更点をまとめておきます。
(1)GAME80 4月27日公開の「SBC8080でGAME80がようやく動作しました」に書いた通りです。
(2)GAME80C skyriverさんのブログにありますような変更・修正を加えます。
(3)MPas80 以下に変更・追加部分を示します。
オリジナル
2792 32D9 CDC003 BREAK: CALL PLIN
2793 32DC FE03 CPI 03H
2794 32DE C0 RNZ
2795 32DF C30320 JMP START2
2796 ;
2797 32E2 CDB903 GETCH: CALL GETCHR
2798 32E5 CAE232 JZ GETCH
2799 32E8 C3DC32 JMP BREAK+3
変更・追加部分
2793 92D9 CDFA92 BREAK: CALL PLIN
2794 92DC FE03 CPI 03H
2795 92DE C0 RNZ
2796 92DF C30380 JMP START2
2797 ;
2798 92E2 CDF792 GETCH: CALL GETCHR
2799 ; JZ GETCH
2800 92E5 00 NOP
2801 92E6 00 NOP
2802 92E7 00 NOP
2803 92E8 C3DC92 JMP BREAK+3
2804
2805 ;++++++++++++++++++++++++++++++++++++++
2806 ;* I/O ROUTINE
2807
2808 92EB F5 PUTCHR: PUSH PSW
2809 92EC DB01 PUT0 IN 01H
2810 92EE E601 ANI 01H
2811 92F0 CAEC92 JZ PUT0
2812 92F3 F1 POP PSW
2813 92F4 D300 OUT 00H
2814 92F6 C9 RET
2815
2816 92F7 C37C00 GETCHR: JMP 007CH
2817
2818 92FA 3E00 PLIN: MVI A,00H
2819 92FC C9 RET
(1),(2),(4)のいずれも、入力ルーチンはモニタ内のルーチンを使用しています。
下の画像は、起動・動作の様子です。例として入力したプログラムはmicroPASCAL68の記事中の階乗の計算プログラムです。
起動・動作画面 |
これで68基板と同様にGAMEとmicroPASCALという2つの言語が使えるようになりましたので、8080の機械語に触れずにSBC8080で遊ぶことができそうです。
(1)GAME80のバイナリとHEXファイル
(2)GAME80Cのメモリ保存形式に変換したものとそのHEXファイル
(3)MPas80のバイナリとそのHEXファイル
(4)LoaderのソースとバイナリのHEXファイル
と、これらを1つにまとめたものをOneDriveに上げておきます。
今となっては、誰でもが普通に高級言語が使えますので、GAMEやMicroPascalにそれ程の魅力は感じられないかとは思いますが、40年近く前に、信じられないぐらい機能的には貧弱なコンピュータ上でこれらの言語が動いていたことを思い返すと、感無量です。
こんにちは
返信削除microPASCAL80をCP/M-80でも動かしてみました。
私はmicroPASCAL80を使ったことが無いのでCP/M上で問題なく動いているか細かくは確認できていません^^;
CP/M-80環境であれば、他のPASCALやCが使えるので今回はここまでにしようと思います。
下記はアセンブルと起動のログです。オープニングメッセージがコマンド入力行を上書きしてしまうので'*'を2個減らして先頭にCR,LFを追加しました。
b>a:m80 =mpas80/l
No Fatal error(s)
b>a:l80 mpas80,mpas80/e/n
Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft
Data 0100 1431 < 4913>
44297 Bytes Free
[0000 1431 20]
b>mpas80
** MICRO PASCAL ** VER 2.2
READY.
>B
WRITE("HELLO",/).
>G/
HELLO
READY.
>
skyriverさんは言語を作れる方なので、このmicroPASCALにはさほど魅力を感じられないと思いますね。私は以前のブログにも書きましたが、いつかは言語を作りたいと昔から思っており、丸山さんの記事中の構文図を見て、これを元にして自分のPASCAL言語を作りたいと思った記憶がありますので、思い入れがあります。(今となっては、特に使い易いというわけではないのですが。)情けないことに、コンパイラの本を何冊読んでも良く分からないことが多く、未だに作れません。
削除skyriverさんのpicleインタプリタとコンパイラをpicに書き込んで使ってみているところです。このような言語が作れるなんてとても羨ましいです。さらに、このpicleがCP/Mのシステム作りに役立っているなんて本当にスゴイです。
私はCP/M-68Kを走らせてみたいのですが、CP/Mの経験がないので、まずCP/M-80を動かしてから68Kをと思っていますので、skyriverさんのCP/Mシステムを2つとも真似させていただこうと思っています。よろしくお願いいたします。
はじめまして
返信削除microPASCAL80がとても良くて感激しました(作者とOld68fun様とskyriver様に感謝します)
Old68fun様とskyriver様の書き込みを参考に私もmicroPASCAL80をCP/M-80で動かしました
CP/M版ではファイルのロード・セーブができます
このCP/M版へのbsdiffの差分ファイルを公開します
ダウンロード
https://ux.getuploader.com/nana4/download/4
パッチの当て方
>bspatch MPAS80.bin MPAS80C.COM MPAS80.bsdiff
ブログを見ていただきましてありがとうございます。
削除私は68系の人間なので80系はほとんど全く分からないのですが、skyriverさんや他の方々のブログなどを頼りに何とか動作させることができています。
公開された差分ファイルを早速ダウンロードさせていただきました。これから(四苦八苦しながら?)動かしてみたいと思います。ありがとうございました。