目次
前
次
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
目次
前
次