CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

ソース移植(4)

アドレスエラーの発生原因が判明しました。
コマンドラインを処理するサブルーチンTSTCはパラメータを呼び元にデータを直接書いてサブルーチン側でスタックポインタでアクセスするというテクニックを使っていますが次のように記述すると第2パラメータの値がおかしなことになっています
40307番地のデータは本来ラベルPR2-アドレスのテンポラリ値=4030E-40307=07になるはすですが06になっています。

 

そのままAS68Kでアセンブル
0402FE  383C000B      PRINT   MOVE    #11,D4          D4 = number of print spaces
040302  610008F4              BSR.L   TSTC            if null list and ":"
040306  3A06                  DC.B    ':',PR2-*       
040308  610009C4              BSR.L   CRLF            give CR-LF and continue
04030C  6098                  BRA     RUNSML          execution on the same line
04030E  610008E8      PR2     BSR.L   TSTC            if null list and <CR>

 

どうもこれはアセンブラのバグというか仕様みたいです。2行に分けて書けば問題なし
データ文修正後
0402FE  383C000B      PRINT   MOVE    #11,D4          D4 = number of print spaces
040302  610008F4              BSR.L   TSTC            if null list and ":"
040306  3A                    DC.B    ':'             
040307  07                    DC.B    PR2-*           
040308  610009C4              BSR.L   CRLF            give CR-LF and continue
04030C  6098                  BRA     RUNSML          execution on the same line
04030E  610008E8      PR2     BSR.L   TSTC            if null list and <CR>