我認爲我知道Python足以編程一個基本的chip8仿真器,但似乎我錯了。Python - 字節讀/寫和按位與
我基本上有問題來讀/寫字節和內存。 在程序的某個點上,我需要讀取一個變量,我已經從一個文件中讀取了一個字節並存儲在一個列表中。 這是我從文件中讀取:
byte = rom.read(1)
memory.append(byte)
while byte:
byte = rom.read(1)
memory.append(byte)
rom.close()
在程序的某一點,我需要從內存中的字節,並將其與0x80的某些數字(提取單位)移位,所以我使用:
for i in range(h):
p = ord(memory[addressI + i])
for j in range(8):
if(p & (0x80 >>j)) != 0:
...
它正常工作了一段時間,但後來我得到這個錯誤無處:
(...)p = ord(memory[addressI + i])
TypeError: ord() expected string of length 1, but int found
如果我根本就沒有用ORD funcion我得到這個錯誤,因爲EXPEC特德:
TypeError: unsupported operand type(s) for &: 'str' and 'int'
我想我是因爲在我的存儲值的BCD存儲在內存中的程序某些時候得到這個錯誤。我想它取代了以前存儲的int類型的字節類型。
data = registers[sNum>>8]
memory[addressI] = data/100
memory[addressI + 1] = (data/10) % 10
memory[addressI + 2] = data % 10
可能的解決方案是: 1 - 妥善保存在列表中的單字節計算,「模仿」的chip8內存INT 2 - 使用功能或一個奇蹟,而不是ORD()即得到什麼該數據是並將其作爲單個字節存儲
任何幫助,將不勝感激。順便說一下,我使用的是windows,並在Python 2.7.2和3.2.2中測試了這段代碼。
「你做錯了」 - 首先,請使用蟒蛇陣列而不是列表中的內存來保存你的數據。數組被命名爲「陣」標準庫模塊中 – jsbueno 2012-02-01 17:27:52
嘛,你自己找出問題所在,並提出有效的解決方案,所以我不知道你的問題是什麼。我會做的只是將數字存儲在內存列表/數組中。 – interjay 2012-02-01 17:30:20
@jsbueno嗯,我想我會試試看。 – 2012-02-01 18:47:11