37 lines
1003 B
Python
37 lines
1003 B
Python
![]() |
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
def get_value(b:bytearray):
|
||
|
ret=0
|
||
|
for i,item in enumerate(b):
|
||
|
ret|=item<<(8*i)
|
||
|
return ret
|
||
|
|
||
|
def set_value(b:bytearray,value:int):
|
||
|
for i in range(len(b)):
|
||
|
b[i]=(value>>(8*i))&0xff
|
||
|
|
||
|
|
||
|
class cpu(object):
|
||
|
def __init__(self,rom_addr:int,rom_size:int,mem_addr:int,mem_size:int) -> None:
|
||
|
self.rom_addr=rom_addr
|
||
|
self.rom=bytearray(rom_size)
|
||
|
self.mem_addr=mem_addr
|
||
|
self.mem=bytearray(mem_size)
|
||
|
def get_value(self,addr:int,size:int):
|
||
|
if not (size in [1,2,4,8]):
|
||
|
raise Exception(f"CPU 异常 因为地址未对齐 {size}")
|
||
|
if(addr>=self.rom_addr) and (addr<self.rom_addr+len(self.rom)):
|
||
|
return get_value(self.rom[addr-self.rom_addr,addr-self.rom_addr+size])
|
||
|
def set_value(self,addr:int,size:int,value:int):
|
||
|
if not (size in [1,2,4,8]):
|
||
|
raise Exception(f"CPU 异常 因为地址未对齐 {size}")
|
||
|
if(addr>=self.rom_addr) and (addr<self.rom_addr+len(self.rom)):
|
||
|
set_value(self.rom[addr-self.rom_addr,addr-self.rom_addr+size],value)
|
||
|
|
||
|
|
||
|
|
||
|
|