next instruction working
but no clock yet
This commit is contained in:
parent
f5ece67233
commit
5d42da9d03
@ -2,10 +2,20 @@ class RegisterView
|
||||
|
||||
include React::Component
|
||||
required_param :interpreter
|
||||
define_state :registers
|
||||
|
||||
before_mount do
|
||||
interpreter.register_event(:register_changed, self)
|
||||
registers! interpreter.registers
|
||||
end
|
||||
|
||||
def register_changed reg , old , bl
|
||||
registers! interpreter.registers
|
||||
end
|
||||
|
||||
def render
|
||||
div :class => :row do
|
||||
interpreter.registers.each do |r , has|
|
||||
registers.each do |r , has|
|
||||
div :class => "col-md-1" do
|
||||
"#{r} : #{has}"
|
||||
end
|
||||
|
@ -12,22 +12,40 @@ class Interpreter
|
||||
@registers = Hash[(0...12).collect{|i| ["r#{i}" , "undefined"]}]
|
||||
end
|
||||
|
||||
def start block
|
||||
set_block block
|
||||
def start bl
|
||||
set_block bl
|
||||
end
|
||||
def set_block block
|
||||
return if @block == block
|
||||
|
||||
def set_block bl
|
||||
return if @block == bl
|
||||
raise "Error, nil block" unless bl
|
||||
old = @block
|
||||
@block = block
|
||||
trigger(:block_changed , old , block)
|
||||
set_instruction block.codes.first
|
||||
@block = bl
|
||||
trigger(:block_changed , old , bl)
|
||||
set_instruction bl.codes.first
|
||||
end
|
||||
|
||||
def set_instruction i
|
||||
return if @instruction == i
|
||||
raise "Error, nil instruction" unless i
|
||||
old = @instruction
|
||||
@instruction = i
|
||||
trigger(:instruction_changed, old , i)
|
||||
end
|
||||
|
||||
def get_register( reg )
|
||||
reg = reg.symbol if reg.is_a? Register::RegisterReference
|
||||
raise "Not a register #{reg}" unless Register::RegisterReference.look_like_reg(reg)
|
||||
@registers[reg]
|
||||
end
|
||||
|
||||
def set_register reg , val
|
||||
old = get_register( reg ) # also ensures format
|
||||
return if old === val
|
||||
@registers[reg] = val
|
||||
trigger(:register_changed, reg , old , val)
|
||||
end
|
||||
|
||||
def tick
|
||||
name = @instruction.class.name.split("::").last
|
||||
fetch = send "execute_#{name}"
|
||||
@ -40,4 +58,10 @@ class Interpreter
|
||||
set_block target
|
||||
false
|
||||
end
|
||||
def execute_LoadConstant
|
||||
to = @instruction.register
|
||||
value = @instruction.constant.object_id
|
||||
set_register( to , value )
|
||||
true
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user