目次

ROMデータ生成(Python)

 手元にはUVEPROMが多数あります。



 パラレルインタフェースのROMライターも
 手元にあります。




 ROMに転送するデータさえあれば、デイバスも
 装置も活用できます。

 Pythonのスクリプトで、バイナリーファイルを
 生成するとして、次のスクリプトを作成。

#!/usr/bin/env python3
# mkrom.py
rom = bytearray( [0xEA] * 32768 )

rom[0x7ffc] = 0x00
rom[0x7ffd] = 0x80

with open("rom.bin","wb") as out_file :
  out_file.write( rom );

 組込み関数bytearrayを使い、32768バイトの
 データを生成。
 2アドレスに、各々0x00、0x80を上書き。
 最後にバイナリーファイルとしてディスク
 に書き出しておきます。

 ROMに書き込むデータは、次の6502のプログラム
 に相当。

  .org $8000
reset:
  NOP
  NOP
  :
  NOP

  .org $FFFC
  .DB 00
  .DB 80

  .org $FFFE
  .DB EA
  .DB EA

  .end

 16バイト程度のコードであれば
 ハンドアセンブルで対応できる
 として、次のアセンブリ言語の
 コードを書いてみます。

  .org $8000
reset:
  LDA #$55
  STA #$00
  LDA #$AA
  STA #$00
  JMP #reset

  .org $FFFC
  .DB 00
  .DB 80

  .org $FFFE
  .DB EA
  .DB EA

  .end

 ハンドアセンブルした内容を
 用意すればよいので、次の
 コードでよいでしょう。

#!/usr/bin/env python3
# mkrom.py

rom = bytearray( [0xEA] * 32768 )

# code
rom[0] = 0xA5
rom[1] = 0x55
rom[2] = 0x85
rom[3] = 0x00
rom[4] = 0xA5
rom[5] = 0xAA
rom[6] = 0x85
rom[7] = 0x00
rom[8] = 0x4C
rom[9] = 0x00
rom[10] = 0x80

# vector
rom[0x7ffc] = 0x00
rom[0x7ffd] = 0x80

# store
with open("rom.bin","wb") as out_file :
  out_file.write( rom );

 スクリプトを作成しておけば、使い方は以下で充分。

python mkrom.py{enter}

 ファイルに保存した内容を確認するために
 次のスクリプトも用意しておきます。

#!/usr/bin/env python3
# dumprom.py

# get file context
with open("rom.bin","rb") as in_file :
  s = in_file.read();
#
last = int(32768/16)
for e in range(last) :
  # generate 1 line
  stmp = ''
  for i in range(16) :
    tmp = hex( s[e * 16 + i] )
    tmpx = tmp[2:]
    if len(tmpx) == 1 :
      tmpx = '0' + tmpx
    stmp = stmp + ' '+ tmpx
  # adjust address
  pad = ""
  adr = hex(16 * e).upper()
  if len(adr) == 3 :
    pad = "000"
  if len(adr) == 4 :
    pad = "00"
  if len(adr) == 5 :
    pad = "0"
  adr = adr[0:2] + pad + adr[2:]
  print( adr , stmp.upper() )

 スクリプトを作成すれば、I/Oリダイレクトで
 テキストファイルに出力します。

python dumprom.py > dumprom.txt{enter}

 テキストファイルから、必要な行を抽出すると
 次のようになります。

0X0000 A5 55 85 00 A5 AA 85 00 4C 00 80 EA EA EA EA EA
:
0X7FF0 EA EA EA EA EA EA EA EA EA EA EA EA 00 80 EA EA


目次

inserted by FC2 system