MACよ、君は正しかった。2018年04月19日 19:53

ROMライター Leaper-3

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 100h
END文に開始アドレスが書いてあります。これをアセンブルして出来上がったHEXファイルは、
          :080100000E021E3FCD0500C9EF
          :00010000FF
と、正しくEOFレコードを書き出しています。

END文から開始アドレスを削除してアセンブルすると、

          :080100000E021E3FCD0500C9EF
          :0000000000
見事、これまでの状態が再現されました。ここでした。END文に開始アドレスを付けるのが正解でした。

「MACよ、君は間違っていなかった。 間違っていたのは、わたしの方だった。」とつぶやきながら、納得しました。

マニュアルを疎かにしてはいけないと、肝に銘じた一件でした。