Method: N65::DW#exec
- Defined in:
- lib/n65/directives/dw.rb
#exec(assembler) ⇒ Object
Execute on the assembler, now in this case value may
be a symbol that needs to be resolved, if so we return
a lambda which can be executed later, with the promise
that that symbol will have then be defined
This is a little complicated, I admit.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/n65/directives/dw.rb', line 44 def exec(assembler) promise = assembler.with_saved_state do |saved_assembler| value = saved_assembler.symbol_table.resolve_symbol(@value) bytes = [value & 0xFFFF].pack('S').bytes saved_assembler.write_memory(bytes) end ## Try to execute it now, or setup the promise to return case @value when Fixnum bytes = [@value & 0xFFFF].pack('S').bytes assembler.write_memory(bytes) when String begin promise.call rescue SymbolTable::UndefinedSymbol ## Must still advance PC before returning promise, so we'll write ## a place holder value of 0xDEAD assembler.write_memory([0xDE, 0xAD]) return promise end else fail("Uknown argument in .dw directive") end end |