106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/micro_cisc/vm/device.rb', line 106
def write_mem(source_device_id, address, value)
banked = banked?(address)
device = (address >> 4)
if banked && source_device_id == @id && device < @devices.size
@devices[device].write_control(source_device_id, address & 0xF, value)
elsif banked && source_device_id == @id && device >= 256
device = (address >> 8)
if device < @devices.size
@devices[device].write_mem(source_device_id, address & 0xFF, value)
else
page = (address & 0xFF00) >> 8
@local_mem[page][address & 0xFF] = value
end
elsif !banked && source_device_id == @id
block = (address & 0xFF00) >> 8
@local_mem[block][address & 0xFF] = value
elsif source_device_id == @control_mem[2]
block = @control_mem[3]
@local_mem[block][address & 0xFF] = value if @local_mem[block]
end
end
|