From 087d1fe8d6512eb06fab45f8a6024aee4a5a299d Mon Sep 17 00:00:00 2001 From: lichx Date: Fri, 22 Nov 2024 22:33:18 +0800 Subject: [PATCH] =?UTF-8?q?[feature]=20=E6=9B=B4=E6=96=B0=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E9=80=9F=E5=BA=A6=E8=AE=BE=E7=BD=AE=EF=BC=8C=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E7=A0=81=E6=97=81=E5=A2=9E=E5=8A=A0asm=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=B8=83=E5=B1=80=20=E7=AD=89=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/error.png | Bin 0 -> 3890 bytes src/assets/ok.png | Bin 0 -> 3882 bytes src/assets/pause.png | Bin 0 -> 1841 bytes src/components/ControlPanel.vue | 106 +++++++++++++++++++++---- src/components/MachineCodeLayout.vue | 39 +++++++++- src/components/MemoryLayout.vue | 3 +- src/utils/Complier.ts | 3 +- src/utils/Runner.ts | 111 ++++++++++++++++++--------- 8 files changed, 210 insertions(+), 52 deletions(-) create mode 100644 src/assets/error.png create mode 100644 src/assets/ok.png create mode 100644 src/assets/pause.png diff --git a/src/assets/error.png b/src/assets/error.png new file mode 100644 index 0000000000000000000000000000000000000000..5365ce3da2549fcf2ac5fd1a9b0ce214a84886af GIT binary patch literal 3890 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 AkpKVy literal 0 HcmV?d00001 diff --git a/src/assets/ok.png b/src/assets/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..d12c49daf1b5d097a571c732d262d19ed28a22eb GIT binary patch literal 3882 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 literal 0 HcmV?d00001 diff --git a/src/assets/pause.png b/src/assets/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..4f55430f9bf7b529c5cac8b3499a2da68899c254 GIT binary patch literal 1841 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-ahlf$g=Yi(^Pd z+}qn1CyKa>xLnNiH((8(ka|eO=iuZpf!*>7nHTd?mwr2X?P2w+z}k2<^D4C+a{m+> z4s^5V*V0b7rEtljPe47>^pO;S{j;U zHf8khbaQaLw!^ZNgOSxT<)U11Z$s0X!s1r~Ok71L7TG?NVq}ec{OpP%i^!7+uGMEu znYcC`JG;`EL*s;E_qQ3@EFvkrvxD0O0wy?%y*0cJ6qYhy&ZoFQp z!y-@iz1Pp?*f#H1S?u-iYlZJyyxI5OzyJ8-&(i(5|9_Om#&74ZZEuucsqo$U!|&hm zKaW?lKmIA-Wq*J6(b8CXrD*v_ighgy_vN!zKKgKY3D>5V@f@r-Sw2vRk~ znx913d?Pa;3XRv)~uJ>tL9 z)&K07?r(cRn(s->46nVjJ!1W#FR%E2f|Rf4JN^HcBhX214^VD-= zj^-ztNk9!i)63R<`Uwoj$}Wi|2PZg6jA|bZI+Bu&-8RR4CJcKEpKX7=Yv2BlXRh_% z|Ni&o$BLSJRwaoyfCYqjU$1ph@9v4*iUu7GO*~O;tIq&S*3V^++?s*K;DXd0r)-$G ljPlj import {Runner, RunnerState} from "../utils/Runner.ts"; -import {inject} from "vue"; +import {inject, ref} from "vue"; import {Compiler} from "../utils/Complier.ts"; -let runner:Runner = inject("runner") as Runner; -console.log(runner); + +let runner: Runner = inject("runner") as Runner; let compiler = inject("compiler") as Compiler; +let info = ref("Ready"); +let speed = ref(20); +let ok = ref(true); +compiler.AddEventListener("CompileError", (errorType, e) => { + info.value = errorType + " " + (e.index + 1) + ": " + e.message; + ok.value = false; +}); +runner.AddEventListener("RunningError", (errorType, e) => { + // pc 指向下一条指令 所以这里不用+1 MachineCode 从0开始,所以需要-1 + info.value = errorType + " " + (e.index - 1) + ": " + e.message; + ok.value = false; +}); + + function compileCode() { runner.Stop(); compiler.CompileCode(); } + function startOrContinue() { - switch (runner.State) - { + switch (runner.State) { case RunnerState.Running: break; case RunnerState.Step: @@ -23,16 +37,22 @@ function startOrContinue() { break; } } + +function pause() { + runner.Pause(); +} + function step() { - if(compiler.CodeChanged) - { + if (compiler.CodeChanged) { compiler.CompileCode(); } runner.Step(); } + function stop() { runner.Stop(); } + function refresh() { runner.Refresh(); } @@ -40,10 +60,21 @@ function refresh() {