MACよ、君は正しかった。 ― 2018年04月19日 19:53
Super AKI-80に搭載したモニタ-ープログラムは、Digital ReserchのMACを使ってアセンブルしていました。 ROMにプログラムを焼く時は、秋月電子で購入した、Leaper-3(パラレルポートで使用するタイプ)を使っています。 MACでアセンブルしたままのHEXファイルだと、ライターにファイルを読み込む時に、いつもエラーになります。 ファイルを見てみると、最後のレコードに問題があるのがわかりました。最後のレコードがいつも、
:0000000000になってしまいます。正しくは、EOFを示す
:00010000FFになるはずなのですが。理由が分からないし、時間もなかったので、エデイターで、毎回、書き直していました。
今日、MACのマニュアル"CP/M MACRO ASSEMBLER LANGUAGE AND APPLICATIONS GUIDE (Revision of Novenver 1980)"に掲載されているサンプルプログラムを 眺めていて、何か違うなと。サンプルプログラムは、下記のようになっています。
org 100h ;transient program area bdos equ 0005h ;bdos entry point wchar equ 2 ;write character function ;enter with ccp's return address in the stack ;write a single character(?) and return mvi C,wchar ;write character function mvi e,'?' ;character to write call bdos ;rwrite character ret ;return to the cpp end 100h ;start address is 100hEND文に開始アドレスが書いてあります。これをアセンブルして出来上がったHEXファイルは、
:080100000E021E3FCD0500C9EF :00010000FFと、正しくEOFレコードを書き出しています。
END文から開始アドレスを削除してアセンブルすると、
:080100000E021E3FCD0500C9EF :0000000000見事、これまでの状態が再現されました。ここでした。END文に開始アドレスを付けるのが正解でした。
「MACよ、君は間違っていなかった。 間違っていたのは、わたしの方だった。」とつぶやきながら、納得しました。
マニュアルを疎かにしてはいけないと、肝に銘じた一件でした。
最近のコメント