128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/micro_cisc/vm/device.rb', line 128
def read_mem(source_device_id, address, force_local = false)
banked = banked?(address) && !force_local
device = (address >> 4)
if banked && source_device_id == @id && device < @devices.size
@devices[device].read_control(source_device_id, address & 0xF)
elsif banked && source_device_id == @id && device >= 256
device = (address >> 8)
if device < @devices.size
@devices[device].read_mem(source_device_id, address & 0xFF)
else
page = (address & 0xFF00) >> 8
@local_mem[page][address & 0xFF]
end
elsif !banked && source_device_id == @id
page = (address & 0xFF00) >> 8
@local_mem[page][address & 0xFF]
elsif source_device_id == @control_mem[2]
page = @control_mem[3] & 0xFF00
@local_mem[page][address * 0xFF]
end
end
|