Setting up project to build the different systems.
This commit is contained in:
54
scenes/coding/code_runner.gd
Normal file
54
scenes/coding/code_runner.gd
Normal file
@@ -0,0 +1,54 @@
|
||||
extends Node
|
||||
|
||||
@onready var code_editor := $%Code as CodeEdit
|
||||
@onready var memory := $%Memory as VBoxContainer
|
||||
@onready var memory_entry := load("res://memory_entry.tscn") as PackedScene
|
||||
var cobor_vm := CoborVirtualMachine.new()
|
||||
|
||||
func _ready() -> void:
|
||||
cobor_vm.set_registers(8,[])
|
||||
for i in range(8):
|
||||
var entry := memory_entry.instantiate() as Control
|
||||
(entry.get_node("address") as Label).text = "/" + str(i) + " = "
|
||||
(entry.get_node("value") as SpinBox).value = 0
|
||||
memory.add_child(entry)
|
||||
|
||||
func _tick() -> void:
|
||||
if code_editor.editable: return
|
||||
for line in code_editor.get_executing_lines():
|
||||
code_editor.set_line_as_executing(line, false)
|
||||
code_editor.set_line_as_executing(cobor_vm.get_program_counter(), true)
|
||||
var err := cobor_vm.run_step()
|
||||
if not err.is_empty():
|
||||
print(err);
|
||||
var registers := cobor_vm.get_registers()
|
||||
for i in range(8):
|
||||
var entry := memory.get_child(i) as Control
|
||||
(entry.get_node("value") as SpinBox).value = registers[i]
|
||||
|
||||
func _on_compile_button_pressed() -> void:
|
||||
var text := code_editor.text
|
||||
var errors := cobor_vm.parse_source_code(text)
|
||||
if errors.is_empty():
|
||||
print("Compiling Ok!")
|
||||
else:
|
||||
for error in errors:
|
||||
print(error)
|
||||
|
||||
func _on_stop_button_pressed() -> void:
|
||||
code_editor.editable = true
|
||||
$Timer.stop()
|
||||
cobor_vm.set_registers(8,[])
|
||||
|
||||
func _on_play_button_pressed() -> void:
|
||||
code_editor.editable = false
|
||||
_on_compile_button_pressed();
|
||||
$Timer.start()
|
||||
|
||||
func _on_pause_button_pressed() -> void:
|
||||
$Timer.stop()
|
||||
|
||||
|
||||
func _on_step_button_pressed() -> void:
|
||||
code_editor.editable = false
|
||||
_tick()
|
||||
Reference in New Issue
Block a user