アセンブルしたHEXファイルをRAMへ転送し実行させると
オープニングメッセージとプロンプトまで表示されます。
その後BASICステートメントを打ち込んでLISTやRUNさせようとすると
68000システムのバスエラー例外が発生してモニタへ戻ってしまいます。
オープニングメッセージとプロンプトまで表示されます。
その後BASICステートメントを打ち込んでLISTやRUNさせようとすると
68000システムのバスエラー例外が発生してモニタへ戻ってしまいます。
モニタのトレースやブレーク機能で各コマンドへの分岐処理を調べると
本来のラベルに分岐していません。
原因は分岐するアドレスの処理を16bitのワードで処理をしているためでした。
オリジナルのソースがメモリ容量が32kB程度のMPUボードをターゲットにしており
分岐処理が絶対アドレスでも16bitに収まってしまうためにこれでも良かったのですが
今回のシステムではRAMのロケーションからして256kBを超えているので32bitで
アドレス計算しないと間に合いません
本来のラベルに分岐していません。
原因は分岐するアドレスの処理を16bitのワードで処理をしているためでした。
オリジナルのソースがメモリ容量が32kB程度のMPUボードをターゲットにしており
分岐処理が絶対アドレスでも16bitに収まってしまうためにこれでも良かったのですが
今回のシステムではRAMのロケーションからして256kBを超えているので32bitで
アドレス計算しないと間に合いません
そのため飛び先テーブルやアドレス算出処理をロングワードで書き直しました
* Execution address tables: 000A58 0B44 TAB1.1 DC.W LIST Direct commands 000A5A 0D80 DC.W LOAD 000A5C 0AE6 DC.W NEW 000A5E 0AF8 DC.W RUN 000A60 0DDE DC.W SAVE 000A62 0C8C TAB2.1 DC.W NEXT Direct / statement 000A64 0D70 DC.W LET 000A66 0CDC DC.W IF 000A68 0B30 DC.W GOTO : : ↓ * Execution address tables: 04017E 000402CE TAB1_1 DC.L LIST Direct commands 040182 00040568 DC.L LOAD 040186 00040260 DC.L NEW 04018A 00040276 DC.L RUN 04018E 000405D2 DC.L SAVE 040192 0004044A TAB2_1 DC.L NEXT Direct / statement 040196 00040558 DC.L LET 04019A 000404B0 DC.L IF 04019E 000402BA DC.L GOTO : :