2017-04-19 9 views
1

返されたアセンブリルーチンの後にディスクのディレクトリリストを取得しようとしたときに?OUT OF MEMORY ERRORを取得していました。VICEエミュレータでPRGファイルを読み込んだ後のC64のメモリ不足エラー

私は例えば、ちょうど起こったかを理解するために、単純なルーチンを用意しました:

*=$c000 

lda #$00 
sta $d020 
rts 

そして、私のビルドスクリプトは次のとおりです。

C:\...\acme0.95.6win\acme.exe --outfile build\ROUTFILE --format cbm RSOURCEFILE 
C:\...\tools\WinVICE-2.4-x64\x64.exe build\ROUTFILE 

私はビルドスクリプトエミュレータはPRGをロードし実行すると、ファイル。それを実行しようとすると、私はBASICローダーを含まないので何も起こりません。それ以降も、ディレクトリリストを取得するには、LOAD "$",8を書き込んでください。私は?OUT OF MEMORY ERRORを得ています。上記のシナリオで何が間違っていますか? PRGファイルの


進ダンプは次のとおりです。

00 c0 a9 00 8d 20 d0 60 
+1

あなたはBASIC環境のメモリポインタを捨てているようです。一見すると、ビルドスクリプトは合理的ですが、 '$ C000'ロードアドレスを生成して尊重しなければなりません。結果のバイナリのHEXダンプを表示できますか? – doynax

+2

'、8,1'でロードし、' sys 49152'を使って実行する必要があります。おそらく、デフォルトの動作は基本的なプログラムに合わせて調整されます。 – Jester

+0

@Jesterエミュレータは自動的に '、8,1'で読み込まれ、問題は解決します。私は '、8'でローディングしようとしましたが問題はありませんでした。 – wizofwor

答えて

6

これは、コモドール64がどのようにプログラムをロードするかの単なるアーティファクトのように見えます。 LOADコマンドを使用してメモリに何かをロードすると、さまざまなBASICデータ領域の開始点と終了点のポインタが、ロードされたプログラムの直後のアドレスに設定されます。 $ C000でロードされた6バイトのプログラムの場合、これらのポインタは$ C006に設定されます。しかし、BASICメモリポインタの終わりは$ A000のままです。これにより、BASICのデータ領域へのポインタがBASICが使用できる最大アドレスよりも高いため、無効な状況が発生します。 BASICのメモリがなくなったように見えます。

通常これは問題ではありません。アセンブリープログラムは$ C000にしか読み込めません。プログラムをロードした後は、通常は最初にやることは、Jesterと同様にSYS 49152と入力してプログラムを実行します。プログラムをロードしてすぐに実行しないようにするには、Peter Koflerの回答にあるNEWコマンドを使用して無効なポインタ問題を修正することができます。コードを$ C000にロードしたまま有効なデフォルト状態にリセットする必要があります。改変されていない。

4

(doynaxが示唆するように)時々、メモリの高い領域にデータをロードした後、あなたのケースの$ C000で、メモリポインタが壊れています。

NEW 

を修正する必要があります。 (基本メモリポインタが読み込まれたファイルの最後に更新されます。$ A000の後にファイルが終了すると、基本メモリがなくなり、OUT OF MEMORY ERRORになります。)その後、$を読み込むことができます。あなたは基本的なコードがないので、それはどんな害もしません。

あなたが使用しているツールはわかりませんが、Jesterの言葉通り、ロードアドレスが尊重されるようにコードを8,1としてロードする必要があります。あなたが共有したコードは正しいです、それはロードアドレスである最初の2バイトとして00 C0で始まります。

load "$",8が成功し、ファイルがディスクにある場合は、,8,1をロードしてからsys 49152(0xC000)を試してみてください。

+0

「NEW」コマンドが機能しますが、なぜこの問題が発生しているのか理解できませんでした。 'load"ファイル "8.1"を書いて手動でファイルをロードすると、同じ問題が発生します。私が 'load "ファイルを書くとき、8は問題ありません。 – wizofwor

+0

@wizofwor LOAD FILEを書き込むと、ファイルは$ C000でメモリにロードされませんが、BASICメモリは$ 0801から開始されます。 'SYS2049'で起動する必要があります。これは、マシンプログラムがコードやデータの絶対アドレス指定を使用していないためにのみ動作します。 – BlackJack

関連する問題