old-computer-simulator

godot game
git clone git://git.evenfri.xyz/old-computer-simulator.git
Log | Files | Refs

commit 478e5216c3e15d2ac9c33bc5a7f43a912f3a1a7d
parent 89c4face0f0a6aaf827bfd147e71446b77c1fc57
Author: evenfri <evenfri256@gmail.com>
Date:   Fri, 21 Aug 2026 21:41:23 +0800

feat: executing instructions, registers, load program from binary, update ui, documentation

Diffstat:
Aaltair.bin | 2++
Mcomputer_interface.cs | 164+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Memulator.cs | 10++++++++--
Memulator/build.sh | 3++-
Memulator/emu.h | 38+++++++++++++++++++++++++++++++++++---
Memulator/emu.so | 0
Memulator/main.c | 106++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
Mmain.tscn | 784++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
Apaper.png | 0
Apaper.png.import | 40++++++++++++++++++++++++++++++++++++++++
Apaper_list.cs | 34++++++++++++++++++++++++++++++++++
Apaper_list.cs.uid | 1+
12 files changed, 858 insertions(+), 324 deletions(-)

diff --git a/altair.bin b/altair.bin @@ -0,0 +1 @@ +>Gv +\ No newline at end of file diff --git a/computer_interface.cs b/computer_interface.cs @@ -4,18 +4,26 @@ using static emulator; public partial class computer_interface : Node { -[Export] public Button[] button_bits; -[Export] public Button[] button_memory_bits; +const int INDEXES_BUTTON_DATA = 7; +const int INDEXES_BUTTON_ADDR = 15; + +[Export] public Button[] buttons; [Export] public Sprite2D[] lamp_current_instruction; [Export] public Sprite2D[] lamp_addr; [Export] public Color lamp_on = Colors.Red; [Export] public Color lamp_off = Colors.DarkGray; -[Export] public Button button_execute; -[Export] public Button button_write_byte; -[Export] public Button button_jmp_memory; +[Export] public Button button_off_on; +[Export] public Button button_stop; +[Export] public Button button_run; +[Export] public Button button_single_step; [Export] public Button button_examine; +[Export] public Button button_examine_next; +[Export] public Button button_deposit; +[Export] public Button button_deposit_next; +[Export] public Button button_reset; +[Export] public Button button_clear; IntPtr _emu; ushort curr_addr; @@ -24,14 +32,29 @@ bool worked = false; public override void _Ready() { _emu = emu_create(); - - button_execute.Pressed += execute; - button_write_byte.Pressed += write_byte; - button_jmp_memory.Pressed += jmp_memory; - button_examine.Pressed += examine; - - for (int i = 0; i < 16; i++) { - button_memory_bits[i].Pressed += memory_pressed; + /* + int r = emu_load_program(_emu, "altair.bin"); + if (r != 0) { + GD.Print("error to load program: altair.bin"); + } + */ + + if (button_run != null) button_run.Pressed += run_pressed; + if (button_stop != null) button_stop.Pressed += stop_pressed; + if (button_single_step != null) button_single_step.Pressed += single_step_pressed; + if (button_examine != null) button_examine.Pressed += examine_pressed; + if (button_examine_next != null) button_examine_next.Pressed += examine_next_pressed; + if (button_deposit != null) button_deposit.Pressed += deposit_pressed; + if (button_deposit_next != null) button_deposit_next.Pressed += deposit_next_pressed; + if (button_reset != null) button_reset.Pressed += reset_pressed; + if (button_clear != null) button_clear.Pressed += clear_pressed; + + if (buttons != null) { + for (int i = 0; i < buttons.Length; i++) { + if (buttons[i] != null) { + buttons[i].Pressed += bit_button_pressed; + } + } } update_lamps(); @@ -45,59 +68,115 @@ public override void _Notification(int what) { public override void _Process(double delta) { if (!worked) return; + int r = emu_step(_emu); if (r > 0) { worked = false; + return; } - GD.Print($"pc: {emu_get_pc(_emu)}"); + curr_addr = (ushort)emu_get_pc(_emu); + curr_instr = emu_mem_read(_emu, curr_addr); + + update_lamps(); + + byte reg_a = emu_get_reg(_emu, 0b111); + byte reg_b = emu_get_reg(_emu, 0b000); + byte reg_c = emu_get_reg(_emu, 0b001); + byte reg_d = emu_get_reg(_emu, 0b010); + GD.Print($"opcode=0x{curr_instr:X2}; pc=0x{curr_addr:X4}; a=0x{reg_a:X2}; b=0x{reg_b:X2}; c=0x{reg_c:X2}; d=0x{reg_d:X2}"); } void update_lamps() { - update_data_lamps(curr_instr); - update_addr_lamps(curr_addr); + update_data_lamps(curr_instr); + update_addr_lamps(curr_addr); } -void memory_pressed() { - byte b0 = assem_byte(button_memory_bits, 0); - byte b1 = assem_byte(button_memory_bits, 8); - curr_addr = (ushort)((b1 << 8) | b0); +ushort read_switches_addr() { + byte b0 = assem_byte(buttons, 0, 8); + byte b1 = assem_byte(buttons, 8, 8); + return (ushort)((b1 << 8) | b0); +} + +byte read_switches_data() { + return assem_byte(buttons, 0, INDEXES_BUTTON_DATA + 1); +} +void bit_button_pressed() { update_lamps(); } -void execute() { +void run_pressed() { worked = true; +} - emu_set_pc(_emu, 0); +void stop_pressed() { + worked = false; } -void write_byte() { - byte b = assem_byte(button_bits, 0); +void single_step_pressed() { + worked = false; + emu_step(_emu); + curr_addr = (ushort)emu_get_pc(_emu); + curr_instr = emu_mem_read(_emu, curr_addr); + update_lamps(); +} - curr_instr = b; - emu_mem_write(_emu, curr_addr, b); - curr_addr++; +void examine_pressed() { + worked = false; + curr_addr = read_switches_addr(); + emu_set_pc(_emu, curr_addr); + curr_instr = emu_mem_read(_emu, curr_addr); + update_lamps(); + + GD.Print($"Examine at 0x{curr_addr:X4}: 0x{curr_instr:X2}"); +} + +void examine_next_pressed() { + worked = false; + curr_addr++; + emu_set_pc(_emu, curr_addr); + curr_instr = emu_mem_read(_emu, curr_addr); + update_lamps(); + + GD.Print($"Examine Next at 0x{curr_addr:X4}: 0x{curr_instr:X2}"); +} + +void deposit_pressed() { + worked = false; + byte val = read_switches_data(); + + emu_mem_write(_emu, curr_addr, val); + curr_instr = val; update_lamps(); - GD.Print($"write byte 0x{b:x2} by 0x{curr_addr:x4}"); + GD.Print($"Deposit 0x{val:X2} at 0x{curr_addr:X4}"); } -void jmp_memory() { - byte b0 = assem_byte(button_memory_bits, 0); - byte b1 = assem_byte(button_memory_bits, 8); +void deposit_next_pressed() { + worked = false; + + curr_addr++; + emu_set_pc(_emu, curr_addr); + + byte val = read_switches_data(); + emu_mem_write(_emu, curr_addr, val); + curr_instr = val; + update_lamps(); - ushort r = (ushort)((b1 << 8) | b0); - curr_addr = r; - - GD.Print($"jump to 0x{curr_addr:x4}"); + GD.Print($"Deposit Next 0x{val:X2} at 0x{curr_addr:X4}"); } -void examine() { +void reset_pressed() { + worked = false; + emu_set_pc(_emu, 0); + curr_addr = 0; curr_instr = emu_mem_read(_emu, curr_addr); - update_lamps(); + update_lamps(); +} - GD.Print($"read byte 0x{curr_instr:x2} by 0x{curr_addr:x4}"); +void clear_pressed() { + update_lamps(); } void update_data_lamps(byte value) { @@ -114,10 +193,13 @@ void update_addr_lamps(ushort value) { } } -byte assem_byte(Button[] buttons, int offset) { +byte assem_byte(Button[] btns, int offset, int count = 8) { byte r = 0; - for (int i = 0; i < 8; i++) { - if (buttons[offset + i].ButtonPressed) { + if (btns == null) return r; + + for (int i = 0; i < count && i < 8; i++) { + int index = offset + i; + if (index < btns.Length && btns[index] != null && btns[index].ButtonPressed) { r |= (byte)(1 << i); } } diff --git a/emulator.cs b/emulator.cs @@ -9,6 +9,9 @@ const string lib_name = "emulator/emu.so"; public static extern IntPtr emu_create(); [DllImport(lib_name, CallingConvention = CallingConvention.Cdecl)] +public static extern int emu_load_program(IntPtr emu, [MarshalAs(UnmanagedType.LPStr)] string filename); + +[DllImport(lib_name, CallingConvention = CallingConvention.Cdecl)] public static extern void emu_destroy(IntPtr emu); [DllImport(lib_name, CallingConvention = CallingConvention.Cdecl)] @@ -21,9 +24,12 @@ public static extern void emu_set_pc(IntPtr emu, int pc); public static extern int emu_step(IntPtr emu); [DllImport(lib_name, CallingConvention = CallingConvention.Cdecl)] -public static extern void emu_mem_write(IntPtr emu, int addr, byte val); +public static extern void emu_mem_write(IntPtr emu, ushort addr, byte val); + +[DllImport(lib_name, CallingConvention = CallingConvention.Cdecl)] +public static extern byte emu_mem_read(IntPtr emu, ushort addr); [DllImport(lib_name, CallingConvention = CallingConvention.Cdecl)] -public static extern byte emu_mem_read(IntPtr emu, int addr); +public static extern byte emu_get_reg(IntPtr emu, byte c); } \ No newline at end of file diff --git a/emulator/build.sh b/emulator/build.sh @@ -1,3 +1,3 @@ #!/bin/sh -gcc -shared -fPIC -o emu.so main.c +gcc -Wall -Wextra -shared -fPIC -o emu.so main.c +\ No newline at end of file diff --git a/emulator/emu.h b/emulator/emu.h @@ -1,18 +1,50 @@ #ifndef emu_h #define emu_h +#include <stdlib.h> #include <stdint.h> +#include <string.h> +#include <stdio.h> -#define EXPORT +#define reg_a 0b111 +#define reg_b 0b000 +#define reg_c 0b001 +#define reg_d 0b010 +#define reg_e 0b011 +#define reg_h 0b100 +#define reg_l 0b101 +#define reg_m 0b110 + +#define op_n 0b00 +#define op_mv 0b01 +#define op_sum_a 0b10 +#define op_jmp 0b11 + +#if defined(__GNUC__) || defined(__clang__) + #define EXPORT __attribute__((visibility("default"))) +#else + #define EXPORT +#endif typedef struct emulator emulator; +typedef unsigned char byte; + +#ifdef __cplusplus +extern "C" { +#endif EXPORT emulator* emu_create(void); +EXPORT int emu_load_program(emulator *e, const char *filename); EXPORT void emu_destroy(emulator *e); EXPORT int emu_step(emulator *e); -EXPORT void emu_mem_write(emulator *e, uint16_t addr, unsigned char val); -EXPORT unsigned char emu_mem_read(emulator *e, uint16_t addr); +EXPORT void emu_mem_write(emulator *e, uint16_t addr, byte val); +EXPORT byte emu_mem_read(emulator *e, uint16_t addr); EXPORT int emu_get_pc(emulator *e); EXPORT void emu_set_pc(emulator *e, int pc); +EXPORT byte emu_get_reg(emulator *e, byte c); + +#ifdef __cplusplus +} +#endif #endif /* emu_h */ \ No newline at end of file diff --git a/emulator/emu.so b/emulator/emu.so Binary files differ. diff --git a/emulator/main.c b/emulator/main.c @@ -1,21 +1,55 @@ -#include <stdlib.h> -#include <stdint.h> -#include <string.h> #include "emu.h" -#define op_hlt 0x00 - struct emulator { - unsigned char memory[65536]; + byte memory[65536]; + byte a; + byte b; + byte c; + byte d; + byte e; + byte h; + byte l; int pc; }; +static void set_reg(emulator *e, byte c, byte val) { + switch (c) { + case reg_a: e->a = val; break; + case reg_b: e->b = val; break; + case reg_c: e->c = val; break; + case reg_d: e->d = val; break; + case reg_e: e->e = val; break; + case reg_h: e->h = val; break; + case reg_l: e->l = val; break; + case reg_m: + { + uint16_t hl = ((uint16_t)e->h << 8) | e->l; + e->memory[hl] = val; + break; + } + } +} + emulator* emu_create(void) { emulator* e = malloc(sizeof(emulator)); memset(e, 0, sizeof(emulator)); return e; } +int emu_load_program(emulator *e, const char *filename) { + FILE *f = fopen(filename, "rb"); + if (!f) return 1; + + size_t bytes_read = fread(e->memory, 1, sizeof(e->memory), f); + + fclose(f); + if (bytes_read == 0) { + return 1; + } + e->pc = 0; + return 0; +} + void emu_destroy(emulator *e) { free(e); } int emu_get_pc(emulator *e) { @@ -27,20 +61,65 @@ void emu_set_pc(emulator *e, int pc) { } int emu_step(emulator *e) { - unsigned int instr = e->memory[e->pc]; + byte instr = e->memory[e->pc]; - if (instr == op_hlt) { - return 1; + /* parse instr */ + byte part1 = (instr >> 6) & 0x03; /* 0b[00]000000 */ + byte dst = (instr >> 3) & 0x07; /* 0b00[000]000 */ + byte src = instr & 0x07; /* 0b00000[000] */ + + switch (part1) { + case op_mv: + /* instr = 0b01110110 hlt */ + if (dst == reg_m && src == reg_m) { + return 1; + } + set_reg(e, dst, emu_get_reg(e, src)); + e->pc++; + break; + case op_n: + if (src == 0b110) { + set_reg(e, dst, e->memory[e->pc+1]); + e->pc += 2; + } else { + e->pc++; + } + break; + case op_sum_a: + e->pc++; + break; + case op_jmp: + e->pc++; + break; + default: + return 1; } - e->pc++; return 0; } -void emu_mem_write(emulator *e, uint16_t addr, unsigned char val) { +void emu_mem_write(emulator *e, uint16_t addr, byte val) { e->memory[addr] = val; } -unsigned char emu_mem_read(emulator *e, uint16_t addr) { +byte emu_mem_read(emulator *e, uint16_t addr) { return e->memory[addr]; -} -\ No newline at end of file +} + +byte emu_get_reg(emulator *e, byte c) { + switch (c) { + case reg_a: return e->a; + case reg_b: return e->b; + case reg_c: return e->c; + case reg_d: return e->d; + case reg_e: return e->e; + case reg_h: return e->h; + case reg_l: return e->l; + case reg_m: + { + uint16_t hl = ((uint16_t)e->h << 8) | e->l; + return e->memory[hl]; + } + default: return 0; + } +} diff --git a/main.tscn b/main.tscn @@ -3,371 +3,629 @@ [ext_resource type="Texture2D" uid="uid://osbck513ghe3" path="res://computer.png" id="1_ig7tw"] [ext_resource type="Script" uid="uid://cgdypxcbuexde" path="res://computer_interface.cs" id="2_0xm2m"] [ext_resource type="Texture2D" uid="uid://bb5mof51kodyv" path="res://lamp.png" id="3_h2yge"] +[ext_resource type="Texture2D" uid="uid://blxdcjt4qu82c" path="res://paper.png" id="4_1bvp3"] +[ext_resource type="Script" uid="uid://b6lty8spdabbf" path="res://paper_list.cs" id="4_lquwl"] + +[sub_resource type="LabelSettings" id="LabelSettings_7mycd"] +font_size = 8 + +[sub_resource type="LabelSettings" id="LabelSettings_272bh"] +font_size = 8 + +[sub_resource type="LabelSettings" id="LabelSettings_5vw27"] +line_spacing = -8.0 +font_size = 9 + +[sub_resource type="LabelSettings" id="LabelSettings_1bvp3"] +line_spacing = -8.0 +font_size = 9 + +[sub_resource type="LabelSettings" id="LabelSettings_h2yge"] +line_spacing = -4.0 +font_size = 8 + +[sub_resource type="LabelSettings" id="LabelSettings_lquwl"] +line_spacing = -4.0 +font_size = 8 + +[sub_resource type="LabelSettings" id="LabelSettings_xpk6w"] +line_spacing = 0.0 +font_size = 8 + +[sub_resource type="LabelSettings" id="LabelSettings_kek77"] +line_spacing = 0.0 +font_size = 8 + +[sub_resource type="FontFile" id="FontFile_272bh"] +cache/0/variation_coordinates = {} +cache/0/face_index = 0 +cache/0/embolden = 0.0 +cache/0/transform = Transform2D(1, 0, 0, 1, 0, 0) +cache/0/spacing_top = 0 +cache/0/spacing_bottom = 0 +cache/0/spacing_space = 0 +cache/0/spacing_glyph = 0 +cache/0/baseline_offset = 0.0 +cache/0/16/0/ascent = 0.0 +cache/0/16/0/descent = 0.0 +cache/0/16/0/underline_position = 0.0 +cache/0/16/0/underline_thickness = 0.0 +cache/0/16/0/scale = 1.0 +cache/0/8/0/ascent = 0.0 +cache/0/8/0/descent = 0.0 +cache/0/8/0/underline_position = 0.0 +cache/0/8/0/underline_thickness = 0.0 +cache/0/8/0/scale = 1.0 + +[sub_resource type="LabelSettings" id="LabelSettings_a5vro"] +line_spacing = 0.0 +font = SubResource("FontFile_272bh") +font_size = 8 +font_color = Color(0, 0, 0, 1) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_a5vro"] +size = Vector2(206, 590) [node name="main" type="Node2D" unique_id=1804574269] [node name="cam" type="Camera2D" parent="." unique_id=1611617563] zoom = Vector2(1.5, 1.5) -[node name="computer" type="Sprite2D" parent="." unique_id=1267147980 node_paths=PackedStringArray("button_bits", "button_memory_bits", "lamp_current_instruction", "lamp_addr", "button_execute", "button_write_byte", "button_jmp_memory", "button_examine")] +[node name="computer" type="Sprite2D" parent="." unique_id=1267147980 node_paths=PackedStringArray("buttons", "lamp_current_instruction", "lamp_addr", "button_off_on", "button_stop", "button_run", "button_single_step", "button_examine", "button_examine_next", "button_deposit", "button_deposit_next", "button_reset", "button_clear")] position = Vector2(-355, -141) texture = ExtResource("1_ig7tw") centered = false script = ExtResource("2_0xm2m") -button_bits = [NodePath("data/buttons/bit-0"), NodePath("data/buttons/bit-1"), NodePath("data/buttons/bit-2"), NodePath("data/buttons/bit-3"), NodePath("data/buttons/bit-4"), NodePath("data/buttons/bit-5"), NodePath("data/buttons/bit-6"), NodePath("data/buttons/bit-7")] -button_memory_bits = [NodePath("addr/buttons/bit-0"), NodePath("addr/buttons/bit-1"), NodePath("addr/buttons/bit-2"), NodePath("addr/buttons/bit-3"), NodePath("addr/buttons/bit-4"), NodePath("addr/buttons/bit-5"), NodePath("addr/buttons/bit-6"), NodePath("addr/buttons/bit-7"), NodePath("addr/buttons/bit-8"), NodePath("addr/buttons/bit-9"), NodePath("addr/buttons/bit-10"), NodePath("addr/buttons/bit-11"), NodePath("addr/buttons/bit-12"), NodePath("addr/buttons/bit-13"), NodePath("addr/buttons/bit-14"), NodePath("addr/buttons/bit-15")] -lamp_current_instruction = [NodePath("data/lamps/lamp"), NodePath("data/lamps/lamp2"), NodePath("data/lamps/lamp3"), NodePath("data/lamps/lamp4"), NodePath("data/lamps/lamp5"), NodePath("data/lamps/lamp6"), NodePath("data/lamps/lamp7"), NodePath("data/lamps/lamp8")] -lamp_addr = [NodePath("addr/lamps/lamp"), NodePath("addr/lamps/lamp2"), NodePath("addr/lamps/lamp3"), NodePath("addr/lamps/lamp4"), NodePath("addr/lamps/lamp5"), NodePath("addr/lamps/lamp6"), NodePath("addr/lamps/lamp7"), NodePath("addr/lamps/lamp8"), NodePath("addr/lamps/lamp9"), NodePath("addr/lamps/lamp10"), NodePath("addr/lamps/lamp11"), NodePath("addr/lamps/lamp12"), NodePath("addr/lamps/lamp13"), NodePath("addr/lamps/lamp14"), NodePath("addr/lamps/lamp15"), NodePath("addr/lamps/lamp16")] -button_execute = NodePath("execute") -button_write_byte = NodePath("data/buttons/write") -button_jmp_memory = NodePath("addr/buttons/jmp") -button_examine = NodePath("data/lamps/examine") - -[node name="data" type="Node2D" parent="computer" unique_id=750574758] -position = Vector2(352, 173) - -[node name="buttons" type="Node2D" parent="computer/data" unique_id=969809626] -position = Vector2(-95, 39) - -[node name="bit-0" type="CheckButton" parent="computer/data/buttons" unique_id=928947275] -offset_right = 44.0 -offset_bottom = 24.0 -rotation = 4.712389 +buttons = [NodePath("buttons/0"), NodePath("buttons/1"), NodePath("buttons/2"), NodePath("buttons/3"), NodePath("buttons/4"), NodePath("buttons/5"), NodePath("buttons/6"), NodePath("buttons/7"), NodePath("buttons/8"), NodePath("buttons/9"), NodePath("buttons/10"), NodePath("buttons/11"), NodePath("buttons/12"), NodePath("buttons/13"), NodePath("buttons/14"), NodePath("buttons/15")] +lamp_current_instruction = [NodePath("lamps_data/0"), NodePath("lamps_data/1"), NodePath("lamps_data/2"), NodePath("lamps_data/3"), NodePath("lamps_data/4"), NodePath("lamps_data/5"), NodePath("lamps_data/6"), NodePath("lamps_data/7")] +lamp_addr = [NodePath("lamps_addr/0"), NodePath("lamps_addr/1"), NodePath("lamps_addr/2"), NodePath("lamps_addr/3"), NodePath("lamps_addr/4"), NodePath("lamps_addr/5"), NodePath("lamps_addr/6"), NodePath("lamps_addr/7"), NodePath("lamps_addr/8"), NodePath("lamps_addr/9"), NodePath("lamps_addr/10"), NodePath("lamps_addr/11"), NodePath("lamps_addr/12"), NodePath("lamps_addr/13"), NodePath("lamps_addr/14"), NodePath("lamps_addr/15")] +button_off_on = NodePath("control/on_off") +button_stop = NodePath("control/stop") +button_run = NodePath("control/run") +button_single_step = NodePath("control/s_step") +button_examine = NodePath("control/examine") +button_examine_next = NodePath("control/examine_n") +button_deposit = NodePath("control/deposit") +button_deposit_next = NodePath("control/deposit_n") +button_reset = NodePath("control/reset") +button_clear = NodePath("control/clr") + +[node name="lamps_data" type="Node2D" parent="computer" unique_id=2113274042] +position = Vector2(274, 51) + +[node name="0" type="Sprite2D" parent="computer/lamps_data" unique_id=208655575] +position = Vector2(261, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-1" type="CheckButton" parent="computer/data/buttons" unique_id=1497880795] -offset_left = 24.0 -offset_right = 68.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="1" type="Sprite2D" parent="computer/lamps_data" unique_id=1215730673] +position = Vector2(237, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-2" type="CheckButton" parent="computer/data/buttons" unique_id=1937568649] -offset_left = 48.0 -offset_right = 92.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="2" type="Sprite2D" parent="computer/lamps_data" unique_id=930259770] +position = Vector2(213, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-3" type="CheckButton" parent="computer/data/buttons" unique_id=789265495] -offset_left = 72.0 -offset_right = 116.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="3" type="Sprite2D" parent="computer/lamps_data" unique_id=519104149] +position = Vector2(189, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-4" type="CheckButton" parent="computer/data/buttons" unique_id=833821743] -offset_left = 96.0 -offset_right = 140.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="4" type="Sprite2D" parent="computer/lamps_data" unique_id=243385059] +position = Vector2(165, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-5" type="CheckButton" parent="computer/data/buttons" unique_id=1557534661] -offset_left = 120.0 -offset_right = 164.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="5" type="Sprite2D" parent="computer/lamps_data" unique_id=981124598] +position = Vector2(141, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-6" type="CheckButton" parent="computer/data/buttons" unique_id=1615780657] -offset_left = 144.0 -offset_right = 188.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="6" type="Sprite2D" parent="computer/lamps_data" unique_id=221933103] +position = Vector2(117, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-7" type="CheckButton" parent="computer/data/buttons" unique_id=787642520] -offset_left = 168.0 -offset_right = 212.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="7" type="Sprite2D" parent="computer/lamps_data" unique_id=1641223163] +position = Vector2(93, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="write" type="Button" parent="computer/data/buttons" unique_id=5392396] -offset_left = 192.0 -offset_top = -42.0 -offset_right = 208.0 -offset_bottom = -26.0 +[node name="lamps_addr" type="Node2D" parent="computer" unique_id=1734725300] +position = Vector2(274, 76) -[node name="text" type="Label" parent="computer/data/buttons/write" unique_id=917668259] -layout_mode = 0 -offset_left = 18.0 -offset_top = -6.0 -offset_right = 58.0 -offset_bottom = 17.0 -text = "write" +[node name="0" type="Sprite2D" parent="computer/lamps_addr" unique_id=1911411271] +position = Vector2(261, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="lamps" type="Node2D" parent="computer/data" unique_id=1993962898] -position = Vector2(0, -22) +[node name="1" type="Sprite2D" parent="computer/lamps_addr" unique_id=2009264748] +position = Vector2(237, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="lamp" type="Sprite2D" parent="computer/data/lamps" unique_id=691408274] -position = Vector2(-84, 8) +[node name="2" type="Sprite2D" parent="computer/lamps_addr" unique_id=307082814] +position = Vector2(213, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp2" type="Sprite2D" parent="computer/data/lamps" unique_id=1393453519] -position = Vector2(-60, 8) +[node name="3" type="Sprite2D" parent="computer/lamps_addr" unique_id=339122357] +position = Vector2(189, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp3" type="Sprite2D" parent="computer/data/lamps" unique_id=1888166272] -position = Vector2(-36, 8) +[node name="4" type="Sprite2D" parent="computer/lamps_addr" unique_id=1864714391] +position = Vector2(165, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp4" type="Sprite2D" parent="computer/data/lamps" unique_id=1421031255] -position = Vector2(-11, 8) +[node name="5" type="Sprite2D" parent="computer/lamps_addr" unique_id=140769146] +position = Vector2(141, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp5" type="Sprite2D" parent="computer/data/lamps" unique_id=1492744603] -position = Vector2(12, 8) +[node name="6" type="Sprite2D" parent="computer/lamps_addr" unique_id=1138734365] +position = Vector2(117, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp6" type="Sprite2D" parent="computer/data/lamps" unique_id=605179344] -position = Vector2(37, 8) +[node name="7" type="Sprite2D" parent="computer/lamps_addr" unique_id=1284145815] +position = Vector2(93, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp7" type="Sprite2D" parent="computer/data/lamps" unique_id=1033917715] -position = Vector2(61, 8) +[node name="8" type="Sprite2D" parent="computer/lamps_addr" unique_id=1370430321] +position = Vector2(69, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="lamp8" type="Sprite2D" parent="computer/data/lamps" unique_id=2000831074] -position = Vector2(85, 7) +[node name="9" type="Sprite2D" parent="computer/lamps_addr" unique_id=1368353718] +position = Vector2(45, 8) scale = Vector2(0.25, 0.25) texture = ExtResource("3_h2yge") -[node name="examine" type="Button" parent="computer/data/lamps" unique_id=1814681530] -offset_left = 97.0 -offset_right = 113.0 -offset_bottom = 16.0 +[node name="10" type="Sprite2D" parent="computer/lamps_addr" unique_id=95336119] +position = Vector2(21, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="text" type="Label" parent="computer/data/lamps/examine" unique_id=1029160794] -layout_mode = 0 -offset_left = 18.0 -offset_top = -5.0 -offset_right = 85.0 -offset_bottom = 18.0 -text = "examine" +[node name="11" type="Sprite2D" parent="computer/lamps_addr" unique_id=1761830216] +position = Vector2(-3, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="text" type="Label" parent="computer/data" unique_id=1336008430] -offset_left = -138.0 -offset_top = -13.0 -offset_right = -103.0 -offset_bottom = 10.0 -text = "data" +[node name="12" type="Sprite2D" parent="computer/lamps_addr" unique_id=446232673] +position = Vector2(-27, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="addr" type="Node2D" parent="computer" unique_id=1662363803] -position = Vector2(352, 104) +[node name="13" type="Sprite2D" parent="computer/lamps_addr" unique_id=1509287834] +position = Vector2(-51, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="buttons" type="Node2D" parent="computer/addr" unique_id=733435300] -position = Vector2(-189, 37) +[node name="14" type="Sprite2D" parent="computer/lamps_addr" unique_id=2063842413] +position = Vector2(-75, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-0" type="CheckButton" parent="computer/addr/buttons" unique_id=325488317] -offset_right = 44.0 -offset_bottom = 24.0 -rotation = 4.712389 +[node name="15" type="Sprite2D" parent="computer/lamps_addr" unique_id=301037469] +position = Vector2(-99, 8) +scale = Vector2(0.25, 0.25) +texture = ExtResource("3_h2yge") -[node name="bit-1" type="CheckButton" parent="computer/addr/buttons" unique_id=1336488479] -offset_left = 24.0 -offset_right = 68.0 +[node name="buttons" type="Node2D" parent="computer" unique_id=733435300] +position = Vector2(163, 137) + +[node name="0" type="CheckButton" parent="computer/buttons" unique_id=2129421308] +offset_left = 360.0 +offset_right = 404.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-2" type="CheckButton" parent="computer/addr/buttons" unique_id=695745454] -offset_left = 48.0 -offset_right = 92.0 +[node name="1" type="CheckButton" parent="computer/buttons" unique_id=862879246] +offset_left = 336.0 +offset_right = 380.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-3" type="CheckButton" parent="computer/addr/buttons" unique_id=1690503583] -offset_left = 72.0 -offset_right = 116.0 +[node name="2" type="CheckButton" parent="computer/buttons" unique_id=70508066] +offset_left = 312.0 +offset_right = 356.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-4" type="CheckButton" parent="computer/addr/buttons" unique_id=760018466] -offset_left = 96.0 -offset_right = 140.0 +[node name="3" type="CheckButton" parent="computer/buttons" unique_id=2099906965] +offset_left = 288.0 +offset_right = 332.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-5" type="CheckButton" parent="computer/addr/buttons" unique_id=1404060575] -offset_left = 120.0 -offset_right = 164.0 +[node name="4" type="CheckButton" parent="computer/buttons" unique_id=1943659506] +offset_left = 264.0 +offset_right = 308.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-6" type="CheckButton" parent="computer/addr/buttons" unique_id=313744853] -offset_left = 144.0 -offset_right = 188.0 +[node name="5" type="CheckButton" parent="computer/buttons" unique_id=2076865949] +offset_left = 240.0 +offset_right = 284.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-7" type="CheckButton" parent="computer/addr/buttons" unique_id=210349797] -offset_left = 168.0 -offset_right = 212.0 +[node name="6" type="CheckButton" parent="computer/buttons" unique_id=1421105136] +offset_left = 216.0 +offset_right = 260.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-8" type="CheckButton" parent="computer/addr/buttons" unique_id=1283918352] +[node name="7" type="CheckButton" parent="computer/buttons" unique_id=1283918352] offset_left = 192.0 offset_right = 236.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-9" type="CheckButton" parent="computer/addr/buttons" unique_id=1421105136] -offset_left = 216.0 -offset_right = 260.0 +[node name="8" type="CheckButton" parent="computer/buttons" unique_id=210349797] +offset_left = 168.0 +offset_right = 212.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-10" type="CheckButton" parent="computer/addr/buttons" unique_id=2076865949] -offset_left = 240.0 -offset_right = 284.0 +[node name="9" type="CheckButton" parent="computer/buttons" unique_id=313744853] +offset_left = 144.0 +offset_right = 188.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-11" type="CheckButton" parent="computer/addr/buttons" unique_id=1943659506] -offset_left = 264.0 -offset_right = 308.0 +[node name="10" type="CheckButton" parent="computer/buttons" unique_id=1404060575] +offset_left = 120.0 +offset_right = 164.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-12" type="CheckButton" parent="computer/addr/buttons" unique_id=2099906965] -offset_left = 288.0 -offset_right = 332.0 +[node name="11" type="CheckButton" parent="computer/buttons" unique_id=760018466] +offset_left = 96.0 +offset_right = 140.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-13" type="CheckButton" parent="computer/addr/buttons" unique_id=70508066] -offset_left = 312.0 -offset_right = 356.0 +[node name="12" type="CheckButton" parent="computer/buttons" unique_id=1690503583] +offset_left = 72.0 +offset_right = 116.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-14" type="CheckButton" parent="computer/addr/buttons" unique_id=862879246] -offset_left = 336.0 -offset_right = 380.0 +[node name="13" type="CheckButton" parent="computer/buttons" unique_id=695745454] +offset_left = 48.0 +offset_right = 92.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="bit-15" type="CheckButton" parent="computer/addr/buttons" unique_id=2129421308] -offset_left = 360.0 -offset_right = 404.0 +[node name="14" type="CheckButton" parent="computer/buttons" unique_id=1336488479] +offset_left = 24.0 +offset_right = 68.0 offset_bottom = 24.0 rotation = 4.712389 +mouse_filter = 1 -[node name="jmp" type="Button" parent="computer/addr/buttons" unique_id=137966172] -offset_left = 384.0 -offset_top = 29.0 -offset_right = 400.0 -offset_bottom = 45.0 - -[node name="text" type="Label" parent="computer/addr/buttons/jmp" unique_id=663994812] -layout_mode = 0 -offset_left = 18.0 -offset_top = -6.0 -offset_right = 58.0 -offset_bottom = 17.0 -text = "jump" - -[node name="lamps" type="Node2D" parent="computer/addr" unique_id=1734725300] -position = Vector2(-78, -22) - -[node name="lamp" type="Sprite2D" parent="computer/addr/lamps" unique_id=301037469] -position = Vector2(-99, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp2" type="Sprite2D" parent="computer/addr/lamps" unique_id=2063842413] -position = Vector2(-75, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp3" type="Sprite2D" parent="computer/addr/lamps" unique_id=1509287834] -position = Vector2(-51, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp4" type="Sprite2D" parent="computer/addr/lamps" unique_id=446232673] -position = Vector2(-27, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp5" type="Sprite2D" parent="computer/addr/lamps" unique_id=1761830216] -position = Vector2(-3, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp6" type="Sprite2D" parent="computer/addr/lamps" unique_id=95336119] -position = Vector2(21, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp7" type="Sprite2D" parent="computer/addr/lamps" unique_id=1368353718] -position = Vector2(45, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp8" type="Sprite2D" parent="computer/addr/lamps" unique_id=1370430321] -position = Vector2(69, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp9" type="Sprite2D" parent="computer/addr/lamps" unique_id=1284145815] -position = Vector2(93, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp10" type="Sprite2D" parent="computer/addr/lamps" unique_id=1138734365] -position = Vector2(117, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp11" type="Sprite2D" parent="computer/addr/lamps" unique_id=140769146] -position = Vector2(141, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp12" type="Sprite2D" parent="computer/addr/lamps" unique_id=1864714391] -position = Vector2(165, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") - -[node name="lamp13" type="Sprite2D" parent="computer/addr/lamps" unique_id=339122357] -position = Vector2(189, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") +[node name="15" type="CheckButton" parent="computer/buttons" unique_id=325488317] +offset_right = 44.0 +offset_bottom = 24.0 +rotation = 4.712389 +mouse_filter = 1 -[node name="lamp14" type="Sprite2D" parent="computer/addr/lamps" unique_id=307082814] -position = Vector2(213, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") +[node name="control" type="Node2D" parent="computer" unique_id=1094110876] +position = Vector2(355, 163) -[node name="lamp15" type="Sprite2D" parent="computer/addr/lamps" unique_id=2009264748] -position = Vector2(237, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") +[node name="on_off" type="CheckButton" parent="computer/control" unique_id=1276014139] +offset_left = -305.0 +offset_top = -12.999999 +offset_right = -261.0 +offset_bottom = 11.000001 +rotation = 1.5707964 +mouse_filter = 1 -[node name="lamp16" type="Sprite2D" parent="computer/addr/lamps" unique_id=1911411271] -position = Vector2(261, 8) -scale = Vector2(0.25, 0.25) -texture = ExtResource("3_h2yge") +[node name="off" type="Label" parent="computer/control/on_off" unique_id=887485295] +layout_mode = 0 +offset_left = -3.0 +offset_top = 19.000004 +offset_right = 27.0 +offset_bottom = 42.000008 +rotation = -1.5707964 +mouse_filter = 1 +text = "OFF" +label_settings = SubResource("LabelSettings_7mycd") + +[node name="on" type="Label" parent="computer/control/on_off" unique_id=965272764] +layout_mode = 0 +offset_left = 36.0 +offset_top = 18.0 +offset_right = 56.0 +offset_bottom = 41.0 +rotation = -1.5707964 +mouse_filter = 1 +text = "ON" +label_settings = SubResource("LabelSettings_272bh") + +[node name="stop" type="Button" parent="computer/control" unique_id=886115773] +offset_left = -188.0 +offset_top = -5.999999 +offset_right = -172.0 +offset_bottom = 10.000001 +mouse_filter = 1 + +[node name="text" type="Label" parent="computer/control/stop" unique_id=1984568674] +layout_mode = 0 +offset_left = -11.0 +offset_top = -12.0 +offset_right = 30.0 +offset_bottom = 11.0 +mouse_filter = 1 +text = "STOP" +label_settings = SubResource("LabelSettings_5vw27") +horizontal_alignment = 1 + +[node name="run" type="Button" parent="computer/control" unique_id=214883096] +offset_left = -188.0 +offset_top = 11.000001 +offset_right = -172.0 +offset_bottom = 27.0 +mouse_filter = 1 + +[node name="text" type="Label" parent="computer/control/run" unique_id=1347445060] +layout_mode = 0 +offset_left = -11.0 +offset_top = 13.0 +offset_right = 30.0 +offset_bottom = 36.0 +mouse_filter = 1 +text = "RUN" +label_settings = SubResource("LabelSettings_1bvp3") +horizontal_alignment = 1 + +[node name="s_step" type="Button" parent="computer/control" unique_id=1023167207] +offset_left = -133.0 +offset_top = 2.000001 +offset_right = -117.0 +offset_bottom = 18.0 +mouse_filter = 1 -[node name="text" type="Label" parent="computer/addr" unique_id=783362460] -offset_left = -247.0 -offset_top = -15.0 -offset_right = -186.0 -offset_bottom = 8.0 -text = "address" +[node name="text" type="Label" parent="computer/control/s_step" unique_id=822028633] +layout_mode = 0 +offset_left = -12.0 +offset_top = -19.0 +offset_right = 30.0 +offset_bottom = 7.0 +mouse_filter = 1 +text = "SINGLE +STEP" +label_settings = SubResource("LabelSettings_h2yge") +horizontal_alignment = 1 + +[node name="examine" type="Button" parent="computer/control" unique_id=296196073] +offset_left = -76.0 +offset_top = -5.999999 +offset_right = -60.0 +offset_bottom = 10.000001 +mouse_filter = 1 + +[node name="text" type="Label" parent="computer/control/examine" unique_id=1867917591] +layout_mode = 0 +offset_left = -17.0 +offset_top = -14.0 +offset_right = 36.0 +offset_bottom = 9.0 +mouse_filter = 1 +text = "EXAMINE" +label_settings = SubResource("LabelSettings_1bvp3") +horizontal_alignment = 1 + +[node name="examine_n" type="Button" parent="computer/control" unique_id=107187658] +offset_left = -76.0 +offset_top = 11.000001 +offset_right = -60.0 +offset_bottom = 27.0 +mouse_filter = 1 + +[node name="text" type="Label" parent="computer/control/examine_n" unique_id=551910634] +layout_mode = 0 +offset_left = -17.0 +offset_top = 12.0 +offset_right = 36.0 +offset_bottom = 46.0 +mouse_filter = 1 +text = "EXAMINE +NEXT" +label_settings = SubResource("LabelSettings_lquwl") +horizontal_alignment = 1 + +[node name="deposit" type="Button" parent="computer/control" unique_id=1692201661] +offset_left = -11.0 +offset_top = -5.999999 +offset_right = 5.0 +offset_bottom = 10.000001 +mouse_filter = 1 + +[node name="text" type="Label" parent="computer/control/deposit" unique_id=1183008914] +layout_mode = 0 +offset_left = -20.0 +offset_top = -13.0 +offset_right = 33.0 +offset_bottom = 10.0 +mouse_filter = 1 +text = "DEPOSIT" +label_settings = SubResource("LabelSettings_1bvp3") +horizontal_alignment = 1 + +[node name="deposit_n" type="Button" parent="computer/control" unique_id=845138324] +offset_left = -11.0 +offset_top = 11.000001 +offset_right = 5.0 +offset_bottom = 27.0 +mouse_filter = 1 + +[node name="text" type="Label" parent="computer/control/deposit_n" unique_id=926335548] +layout_mode = 0 +offset_left = -17.0 +offset_top = 12.0 +offset_right = 36.0 +offset_bottom = 46.0 +mouse_filter = 1 +text = "DEPOSIT +NEXT" +label_settings = SubResource("LabelSettings_lquwl") +horizontal_alignment = 1 + +[node name="reset" type="Button" parent="computer/control" unique_id=1280760691] +offset_left = 52.0 +offset_top = -5.999999 +offset_right = 68.0 +offset_bottom = 10.000001 +mouse_filter = 1 -[node name="execute" type="Button" parent="computer" unique_id=499234741] -offset_left = 547.0 -offset_top = 151.0 -offset_right = 563.0 -offset_bottom = 167.0 +[node name="text" type="Label" parent="computer/control/reset" unique_id=1297615840] +layout_mode = 0 +offset_left = -16.0 +offset_top = -12.0 +offset_right = 37.0 +offset_bottom = 11.0 +mouse_filter = 1 +text = "RESET" +label_settings = SubResource("LabelSettings_1bvp3") +horizontal_alignment = 1 + +[node name="clr" type="Button" parent="computer/control" unique_id=1324293289] +offset_left = 52.0 +offset_top = 11.000001 +offset_right = 68.0 +offset_bottom = 27.0 +mouse_filter = 1 -[node name="text" type="Label" parent="computer/execute" unique_id=548414139] +[node name="text" type="Label" parent="computer/control/clr" unique_id=2030335195] layout_mode = 0 -offset_left = 18.0 -offset_top = -5.0 -offset_right = 85.0 -offset_bottom = 18.0 -text = "execute" +offset_left = -19.0 +offset_top = 14.0 +offset_right = 34.0 +offset_bottom = 48.0 +mouse_filter = 1 +text = "CLR +" +label_settings = SubResource("LabelSettings_lquwl") +horizontal_alignment = 1 + +[node name="d0-7" type="Label" parent="computer" unique_id=731723272] +offset_left = 363.0 +offset_top = 42.0 +offset_right = 541.0 +offset_bottom = 65.0 +mouse_filter = 1 +text = "D7 D6 D5 D4 D3 D2 D1 D0" +label_settings = SubResource("LabelSettings_xpk6w") +horizontal_alignment = 1 + +[node name="a0-15" type="Label" parent="computer" unique_id=554604991] +offset_left = 165.0 +offset_top = 67.0 +offset_right = 534.0 +offset_bottom = 90.0 +mouse_filter = 1 +text = "A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0" +label_settings = SubResource("LabelSettings_kek77") +horizontal_alignment = 1 + +[node name="paper" type="Area2D" parent="." unique_id=1717261404] +z_index = 1 +position = Vector2(0, 349) +script = ExtResource("4_lquwl") +offset = -300.0 + +[node name="doc" type="Sprite2D" parent="paper" unique_id=1634288699] +texture = ExtResource("4_1bvp3") + +[node name="header" type="Label" parent="paper/doc" unique_id=2038232969] +offset_left = -99.0 +offset_top = -141.0 +offset_right = 101.0 +offset_bottom = -133.0 +mouse_filter = 1 +text = "DOCUMENTATION" +label_settings = SubResource("LabelSettings_a5vro") +horizontal_alignment = 1 + +[node name="system" type="Label" parent="paper/doc" unique_id=1094384802] +offset_left = -100.0 +offset_top = -133.0 +offset_right = 100.0 +offset_bottom = -109.0 +mouse_filter = 1 +text = "A0-15 - Address switchers +D0-7 - Data switchers +EXAMINE/NEXT - Change current address and show + data from memory by address +DEPOSIT/NEXT - Load data in memory by address +RESET - Set address to 0x0000" +label_settings = SubResource("LabelSettings_a5vro") + +[node name="registers" type="Label" parent="paper/doc" unique_id=1958491991] +offset_left = -100.0 +offset_top = -80.0 +offset_right = 100.0 +offset_bottom = -56.0 +mouse_filter = 1 +text = "NAME OPCODE + A 111 + B 000 + C 001 + D 010 + E 011 + H 100 + L 101 + M 110" +label_settings = SubResource("LabelSettings_a5vro") + +[node name="opcode" type="Label" parent="paper/doc" unique_id=720962544] +offset_left = -100.0 +offset_top = -8.0 +offset_right = 100.0 +offset_bottom = 16.0 +mouse_filter = 1 +text = "NAME OPCODE DESCRIPTION + MVI 00<dst>110 move immediate + MOV 01<dst><src> move register + HLT 01110110 halt machine +" +label_settings = SubResource("LabelSettings_a5vro") + +[node name="example program" type="Label" parent="paper/doc" unique_id=702865304] +offset_left = -100.0 +offset_top = 27.0 +offset_right = 100.0 +offset_bottom = 75.0 +mouse_filter = 1 +text = "Example program: + ADDR OPCODE ASM + 0000 00111110 MOV A + 0001 00001000 8 + 0002 01000111 MOV B, A + 0003 01110110 HLT" +label_settings = SubResource("LabelSettings_a5vro") + +[node name="collision" type="CollisionShape2D" parent="paper" unique_id=1149371540] +position = Vector2(0, 148.5) +shape = SubResource("RectangleShape2D_a5vro") diff --git a/paper.png b/paper.png Binary files differ. diff --git a/paper.png.import b/paper.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blxdcjt4qu82c" +path="res://.godot/imported/paper.png-7786f1cec57caf764293039fee58b648.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://paper.png" +dest_files=["res://.godot/imported/paper.png-7786f1cec57caf764293039fee58b648.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/paper_list.cs b/paper_list.cs @@ -0,0 +1,34 @@ +using Godot; + +public partial class paper_list : Area2D { + +[Export] public +float offset = 300f; +[Export] public +float speed = 5f; + +float init_y; +float target_y; + +public override void _Ready() { + init_y = Position.Y; + target_y = init_y; + + MouseEntered += on_enter; + MouseExited += on_exited; +} + +public override void _Process(double delta) { + float y = Mathf.Lerp(Position.Y, target_y, speed * (float)delta); + Position = new Vector2(Position.X, y); +} + +void on_enter() { + target_y = init_y + offset; +} + +void on_exited() { + target_y = init_y; +} + +} diff --git a/paper_list.cs.uid b/paper_list.cs.uid @@ -0,0 +1 @@ +uid://b6lty8spdabbf