3

6502 エミュレーターに関する私の作業は継続中です。組み込みプロセッサ エミュレーションで、0x1000 から始まる配列に 6502 バイナリ ファイルをロードする必要があるという問題に遭遇しました。

もちろん、ファイルの読み込みは簡単です。しかし、オフセット部分はそうではありません。Cなら簡単にできます。

現在使用しているファイルをロードするためのコードは次のとおりです。

  def loadbinary(filename)
    @prog = File.open(filen, "rb") { |io| io.read }
    @imagesize = @prog.size
  end

ロードが 0x1000 でロードされる場合、前のスペースは空である可能性があります (0x1000 の前)。

何か案は?

興味深い人のために、これは私がGitHubに持っている6502.rbプロジェクト用です

ありがとう。

4

2 に答える 2

2

おそらく、エミュレートするアドレス指定可能な RAM のサイズであるnバイトの配列を割り当てる必要があります。nそこから、ファイルから読み取ったデータを「RAM」に保存し始めることができます。

これは私が始めるものです:

def loadbinary(filename)
  @prog = File.read(filename, 'rb')
  @imagesize = @prog.bytesize
end

RAM_SIZE = 1024 * 64
RAM = Array.new(RAM_SIZE)

loadbinary('/path/to/foo')
RAM[0x1000, @imagesize] = @prog.bytes.to_a

String.size注:マルチバイト文字が許可されているため、文字列の長さを取得するために を使用することはできません。代わりに、バイト数を取得するには、が必要です。これは、ドキュメントbytesizeによると次のとおりです。

str の長さをバイト単位で返します。

同様に、マルチバイト文字も使用できるため、 を@prog使用して配列に変換することはできません。split('')代わりに、バイトを取得して配列に変換できます。unpackまたはを使用して実行できますbytes.to_a

于 2012-12-25T05:05:41.257 に答える
0

私の知る限り、できません。文字列の配列io.readを返します。既存の配列には書き込みません。

最初に配列に読み込み、次に別の配列にスプライシングするという回避策を実行する必要があります。何かのようなもの

progimage = io.read.bytes.to_a
image[start, progimage.size] = progimage

幸いなことに、現在 Ruby を実行しているほとんどのシステムは、C64 よりもいくらか多くのメモリと CPU パワーを備えているため、追加の配列を使用してもそれほど問題にはなりません。

于 2012-12-25T03:19:46.947 に答える