Method: MicroCisc::Vm::Device#write_mem

Defined in:
lib/micro_cisc/vm/device.rb

#write_mem(source_device_id, address, value) ⇒ Object



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