+ Note: We are slowly migrating from our wiki to this site for all SAP1Emu documentation. Click the link above to go the wiki if you cannot find answers here.
+
+ 8-Bit describes the bus-width of a CPU, meaning that it can transfer 8 bits of data in a single operation.
+ This means our CPU can only use 8 bits of data to make up one instruction.
+
+ Now, you might think that with 8 ones and zeros we could have 256 different instructions/operations, and you would be half right.
+ In addition to the instruction, our CPU will need some data to use in that instruction.
+ The SAP1 Computer accomplishes this by reserving the first 4 bits for the instruction and the last 4 bits for the data / instruction parameter.
+
+
+ Note: The first 4 bits are called the Upper Nibble and the last 4 bits are called the Lower Nibble.
+
+
+
+ So if we were to look at an instruction in Machine Language (ones and zeros) entering the CPU we might see something like this:
+
+ 0001 1010
+
+
+ In the above example, 0001 would be the instruction and 1010 would the the data / instruction parameter.
+
+
+
+
+ Knowing that we have only 4 bits to store our instruction, we can say that our SAP1 Computer can only use 16, or 24 instructions.
+ This is because we only have 4 ones and zeros to represent our instruction (0000, 0001, 0010, ..., 1110, 1111).
+
+
+
One-to-One Compiling
+
+ In the above example, a complete instruction is listed as 0001 1010. This type of Machine Language code is not very easy to program with
+ because it requires the programmer to remember what all the ones and zeros mean.
+ To help programmers write code, most Machine Languages are accompanied by an One-To-One Assembly Language, in this case, the SAP1Emu Project supports three.
+
+
+
+
+ A One-to-One language means there is some human-readable code that directly maps to the Machine Language. If we were to write the above code in SAP1Emu Assembly Language,
+ it would look like this:
+
+ ADD 0xA
+
+
+ In the above example, 0xA is the Hex value for 10 in decimal. The 0x prefix denotes a hex-number.
+
+
+@*
+ Below are lists the three different Instruction Sets, or Assmebly Languages, that the SAP1Emu Emulator supports.
+ If an instruction, or OpCode, is followed by a 0xH, that means H can be replaced by any
+ valid hex digit (0 - F).
+
+ If a OpCode is follwed by a 0x0, that means the Lower Nibble is not used and its value does not matter.
+
+
+ Note, you can only use instructions from one instruction set at a time. They cannot be mixed.
+
+ The SAP1Emu Emulator supports one marco, the ... macro.
+ Since each program needs example 16 lines of code, the ... macro will fill in the
+ extra lines in your program with 0x0 0x0's. This will be covered in more detail in the next section.
+
+ Below is an example of the ... macro in use.
+
+
+
+
Before the macro-expansion
+ @Html.TextArea("8Bit_P3_Example_Left", null, new { rows = "20", cols = "80", @class = "codebox", id = "8Bit_P3_Example_Left" })
+
+
+
After the macro-expansion
+ @Html.TextArea("8Bit_P3_Example_Right", null, new { rows = "20", cols = "80", @class = "codebox", id = "8Bit_P3_Example_Right" })
+
+
+
+ As you can see, the ... macro filled the empty space with 0x0 0x0's until the program
+ has 16 lines of code.
+
+ It is also important to note that the macro is executed by the Parser, not the Emulator.
+ This means the Emulator will never see the macro. Instead it will only see the 0x0 0x0's left behind
+ by the Parser.
+
+
+
+
Comments
+
+ A comment is a line of code that is not executed. They are stripped out by the Parser, so they never reach the Emulator.
+ Due to the difficulty in reading Assembly-like code, comments should be used to help you remember what your code does.
+
+ The SAP1Emu uses Bash-Style comments utilizing the #. Anything that comes after a # is
+ not treated as code. Comments can take up their own line or come after code.
+
+ Below is an example of comments in use.
+
+
+
+
Before comments are stripped out
+ @Html.TextArea("8Bit_P3_Example_Comment_Left", null, new { rows = "20", cols = "80", @class = "codebox", id = "8Bit_P3_Example_Comment_Left" })
+
+
+
After comments are stripped out
+ @Html.TextArea("8Bit_P3_Example_Comment_Right", null, new { rows = "20", cols = "80", @class = "codebox", id = "8Bit_P3_Example_Comment_Right" })
+
+ Below are list of the three different Instruction Sets, or Assembly Langueges, and the related binary equivalents to their instructions.
+
+ Unless you are progamming your physical SAP1 Computer or trying to perform a step-by-step debug of a SAP1Emu Program, knowing the
+ binary translations is not crucial. It is more important to know of their existence so you can reference them if needed.
+
+ If you see that an OpCode is followed by a 0xH, that means H can be replaced by any
+ valid hex digit (0 - F). Likewise, if you see a binary half-word with bbbb, that means bbbb can be replaced by any
+ valid binary digit (0 or 1).
+
+
+ Note, you can only use instructions from one instruction set at a time. They cannot be mixed.
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/Views/Docs/_DocNav.cshtml b/SAP1EMU.GUI/Views/Docs/_DocNav.cshtml
new file mode 100644
index 00000000..4dfa7486
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Docs/_DocNav.cshtml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
The SAP1 Computer
+
+
+
+ Explore the architecture and design of the SAP1 Computer.
+
+
+
+
+
+
+
+
+
Modern Computing
+
+
+
+ How are 8-Bit Computers similar and different from out modern computers?
+
+
+
+
+
+
+
+
+
Learning Resources
+
+
+
+ Find other great learning resources.
+
+
+
+
+
+
+
+
+
8-Bit Programming
+
+
+
+ Write your first program and learn about different Instruction Sets.
+
+
+
+
+
+
+
+
+
Low-Level Languages
+
+
+
+ Learn the basics of low level languages, like ARM, and how they relate to 8-Bit Computers.
+
+
+
+
+
+
+
+
+
High-Level Languages
+
+
+
+ Learn the basics of how high level languages work and why developers prefer them over low level languages.
+
+
+
+
+
+
+
+
+
SAP1Emu CLI
+
+
+
+ Prefer to user our command line interface?
+
+
+
+
+
+
+
+
+
SAP1Emu API
+
+
+
+ Want to integrate your app directly to our API?
+
+
+
+
+
+
+
+
+
SAP1Emu Library
+
+
+
+ Want to use our C# .Net Core Library?
+
+
+
+
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/Views/Docs/_EightBitProgramming_TOC.cshtml b/SAP1EMU.GUI/Views/Docs/_EightBitProgramming_TOC.cshtml
new file mode 100644
index 00000000..af3ce784
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Docs/_EightBitProgramming_TOC.cshtml
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/Views/Docs/_InstructionSets.cshtml b/SAP1EMU.GUI/Views/Docs/_InstructionSets.cshtml
new file mode 100644
index 00000000..e23285d0
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Docs/_InstructionSets.cshtml
@@ -0,0 +1,208 @@
+
+ Adds the value of RAM[0xH] to the value stored in the A Register
+ and stores the result in the A Register.
+
+ Side Effects
+
+ Can set the Carry Flag or the Zero Flag.
+
+
+
+
SUB
+
SUB 0xH
+
+ Subtracts the value of RAM[0xH] from the value stored in the A Register
+ and stores the result in the A Register.
+
+ Side Effects
+
+ Can set the Underflow Flag or the Zero Flag.
+
+
+
+
STA
+
STA 0xH
+
+ Stores the value of the A Register into RAM[0xH].
+
+ Warning
+
+ This can overwrite code stored in RAM and cause an infinite loop or other undefined behavior.
+
+
+
+
JMP
+
JMP 0xH
+
+ Performs an unconditional jump to the specified address.
+
+
+
+
JEQ
+
JEQ 0xH
+
+ Performs a jump to the specified address if the value of the A Register is equal to zero.
+
+
+
+
JNQ
+
JNQ 0xH
+
+ Performs a jump to the specified address if the value of the A Register is NOT equal to zero.
+
+
+
+
JLT
+
JLT 0xH
+
+ Performs a jump to the specified address if the value of the A Register is less than zero.
+
+ If the first bit of the value in the A Register is non-zero, it will treat it as a negitive
+ number for the purpose of this OpCode.
+
+
+
+
JGT
+
JGT 0xH
+
+ Performs a jump to the specified address if the value of the A Register is greater than zero.
+
+ If the value in the A Register is non-zero but the first bit of the A Register is zero, it will treat it as a positive
+ number for the purpose of this OpCode.
+
+
+
+
JIC
+
JIC 0xH
+
+ Performs a jump to the specified address if the Carry Flag is set.
+
+
+
+
OUT
+
OUT 0x0
+
+ Stores the value of the A Register in the Output Register.
+
+
+
+
HLT
+
HLT 0x0
+
+ Halts the program execution.
+
+
+
+
NOP
+
NOP 0x0
+
+ A no-operation instruction.
+
+ Must come after a HLT instruction.
+
+ Also, see the ... macro.
+
+
+
+
+
+
+
+
+
+
OpCode
+
Usage
+
Description
+
+
+
+
+
LDA
+
LDA 0xH
+
Loads the value of RAM[0xH] into the A Register.
+
+
+
ADD
+
ADD 0xH
+
+ Adds the value of RAM[0xH] to the value stored in the A Register
+ and stores the result in the A Register.
+
+ Side Effects
+
+ Can set the Carry Flag or the Zero Flag.
+
+
+
+
SUB
+
SUB 0xH
+
+ Subtracts the value of RAM[0xH] from the value stored in the A Register
+ and stores the result in the A Register.
+
+ Side Effects
+
+ Can set the Underflow Flag or the Zero Flag.
+
+
+
+
OUT
+
OUT 0x0
+
+ Stores the value of the A Register in the Output Register.
+
+
+
+
HLT
+
HLT 0x0
+
+ Halts the program execution.
+
+
+
+
+
+
+
+ Documentation Coming Soon
+
+
+
+
+
+
diff --git a/SAP1EMU.GUI/Views/Docs/_InstructionSetsBinary.cshtml b/SAP1EMU.GUI/Views/Docs/_InstructionSetsBinary.cshtml
new file mode 100644
index 00000000..beed541c
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Docs/_InstructionSetsBinary.cshtml
@@ -0,0 +1,144 @@
+
+ The SAP1Emu Project is an open-source suite of tools designed for students and educators teaching
+ introductory courses in Computer Architecture or Digital Electronics.
+ It emulates the SAP1 Computer from Digital Computer Electronics by Malvino and Brown.
+
+ This website provides an easy interface to the SAP1Emu API and Engine.
+ Also, the Engine CLI and Libary is also availble for download from the GitHub Repo.
+
+
+
+
+
About the Author
+
+
+
+ My name is Bob Baker and I am a Software Engineer mostly focusing on C#/.NET Core and C++.
+
+
+ Before becoming a Profesional Developer, I worked at Saddleback College as a Teacher's Assistant for the Intro to Computer Architecture and Machine Language Lab (CS1C).
+ As a TA I assisted many students in the building and debugging of SAP1 Computers.
+ During this time I found that, while there are a few software solutions to assist students; most were "half-baked", were no longer supported, or did not follow
+ the specification outlined by Malvino.
+
+
+ In the middle of Spring 2020, Saddleback had to shutdown due to the SARS-CoV-2 Pandemic and many students could not finish their final assignment for the course.
+ To help with that challange, I started this project and it has grown since then.
+
+
+ If you have any questions, my details are on my GitHub. Please feel free to reach out.
+
+
+
+
+
Contribute to this Project
+
+ I am always looking for help with this project. Check out the GitHub Issues Page or send me a Pull Request. If it benifits the project, I'd love to add it in.
+
+
+ Click here for a list of all Project Contributors.
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/Views/Home/Privacy.cshtml b/SAP1EMU.GUI/Views/Home/Privacy.cshtml
new file mode 100644
index 00000000..9f0ef1f1
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Home/Privacy.cshtml
@@ -0,0 +1,13 @@
+@{
+ ViewData["Title"] = "Privacy Policy";
+}
+
@ViewData["Title"]
+
+
+ This site is still in beta.
+ We don't sell, give away, or transfer any user-data to anyone for any reason.
+
+
+ Any user-data will be used for internal site inprovements for the purposes of this beta.
+ This policy is subject to change in the future.
+
diff --git a/SAP1EMU.WebApp/Views/Shared/Error.cshtml b/SAP1EMU.GUI/Views/Shared/Error.cshtml
similarity index 100%
rename from SAP1EMU.WebApp/Views/Shared/Error.cshtml
rename to SAP1EMU.GUI/Views/Shared/Error.cshtml
diff --git a/SAP1EMU.GUI/Views/Shared/_CookieConsentPartial.cshtml b/SAP1EMU.GUI/Views/Shared/_CookieConsentPartial.cshtml
new file mode 100644
index 00000000..916924c0
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Shared/_CookieConsentPartial.cshtml
@@ -0,0 +1,25 @@
+@using Microsoft.AspNetCore.Http.Features
+
+@{
+ var consentFeature = Context.Features.Get();
+ var showBanner = !consentFeature?.CanTrack ?? false;
+ var cookieString = consentFeature?.CreateConsentCookie();
+}
+
+@if (showBanner)
+{
+
+ We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn More.
+
+
+
+}
\ No newline at end of file
diff --git a/SAP1EMU.GUI/Views/Shared/_Favicons.cshtml b/SAP1EMU.GUI/Views/Shared/_Favicons.cshtml
new file mode 100644
index 00000000..3b1a4930
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Shared/_Favicons.cshtml
@@ -0,0 +1,6 @@
+
+
+
+@**@
+
+@**@
\ No newline at end of file
diff --git a/SAP1EMU.GUI/Views/Shared/_GitHubProfilePartial.cshtml b/SAP1EMU.GUI/Views/Shared/_GitHubProfilePartial.cshtml
new file mode 100644
index 00000000..651f72fc
--- /dev/null
+++ b/SAP1EMU.GUI/Views/Shared/_GitHubProfilePartial.cshtml
@@ -0,0 +1,28 @@
+@model GitHubProfileModel
+
+
+
+
@RenderBody()
@@ -49,7 +65,7 @@
diff --git a/SAP1EMU.WebApp/Views/Shared/_ValidationScriptsPartial.cshtml b/SAP1EMU.GUI/Views/Shared/_ValidationScriptsPartial.cshtml
similarity index 100%
rename from SAP1EMU.WebApp/Views/Shared/_ValidationScriptsPartial.cshtml
rename to SAP1EMU.GUI/Views/Shared/_ValidationScriptsPartial.cshtml
diff --git a/SAP1EMU.GUI/Views/_ViewImports.cshtml b/SAP1EMU.GUI/Views/_ViewImports.cshtml
new file mode 100644
index 00000000..8c529219
--- /dev/null
+++ b/SAP1EMU.GUI/Views/_ViewImports.cshtml
@@ -0,0 +1,3 @@
+@using SAP1EMU.GUI
+@using SAP1EMU.GUI.Models
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diff --git a/SAP1EMU.WebApp/Views/_ViewStart.cshtml b/SAP1EMU.GUI/Views/_ViewStart.cshtml
similarity index 100%
rename from SAP1EMU.WebApp/Views/_ViewStart.cshtml
rename to SAP1EMU.GUI/Views/_ViewStart.cshtml
diff --git a/SAP1EMU.GUI/appsettings.json b/SAP1EMU.GUI/appsettings.json
new file mode 100644
index 00000000..34be7b9b
--- /dev/null
+++ b/SAP1EMU.GUI/appsettings.json
@@ -0,0 +1,11 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Warning"
+ }
+ },
+ "ConnectionStrings": {
+ "DefaultConnection": "",
+ "sap1emu_db_conn_string": "Server=localhost;Database=master;Trusted_Connection=True;"
+ }
+}
\ No newline at end of file
diff --git a/SAP1EMU.GUI/docuFile.json b/SAP1EMU.GUI/docuFile.json
new file mode 100644
index 00000000..d177980a
--- /dev/null
+++ b/SAP1EMU.GUI/docuFile.json
@@ -0,0 +1,3 @@
+{
+
+}
diff --git a/SAP1EMU.GUI/wwwroot/css/site.css b/SAP1EMU.GUI/wwwroot/css/site.css
new file mode 100644
index 00000000..a19a4a16
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/css/site.css
@@ -0,0 +1,173 @@
+/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+for details on configuring this project to bundle and minify static web assets. */
+
+a.navbar-brand {
+ white-space: normal;
+ text-align: center;
+ word-break: break-all;
+}
+
+/* Provide sufficient contrast against white background */
+a {
+ color: #0366d6;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #1b6ec2;
+ border-color: #1861ac;
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+ color: #fff;
+ background-color: #1b6ec2;
+ border-color: #1861ac;
+}
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+ font-size: 14px;
+}
+
+@media (min-width: 768px) {
+ html {
+ font-size: 16px;
+ }
+}
+
+.border-top {
+ border-top: 1px solid #e5e5e5;
+}
+
+.border-bottom {
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.box-shadow {
+ box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
+}
+
+button.accept-policy {
+ font-size: 1rem;
+ line-height: inherit;
+}
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+ position: relative;
+ min-height: 100%;
+}
+
+body {
+ /* Margin bottom by footer height */
+ margin-bottom: 60px;
+}
+
+.footer {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ white-space: nowrap;
+ line-height: 60px; /* Vertically center the text there */
+}
+
+/* For Columns in Pages*/
+.column3 {
+ float: left;
+ width: 32%;
+ border: 1px solid #a39898;
+ padding: 8px;
+ margin: 5px;
+}
+
+.column2 {
+ float: left;
+ width: 49%;
+ border: 1px solid #a39898;
+ padding: 8px;
+ margin: 5px;
+}
+
+.column1 {
+ float: left;
+ width: 99%;
+ border: 1px solid #a39898;
+ padding: 8px;
+ margin: 5px;
+}
+
+/* Clear floats after the columns */
+.row:after {
+ margin: auto;
+ width: 100%;
+ content: "";
+ display: table;
+ clear: both;
+ align-content: center;
+ align-items: center;
+}
+
+.assembler-out {
+}
+
+.vbox_sap {
+ display: flex;
+ flex-direction: column;
+}
+
+.hbox_sap {
+ display: flex;
+ flex-direction: row;
+}
+
+ .hbox_sap > * {
+ margin: 5px;
+ }
+
+.profile-pic {
+ max-width: 50%;
+}
+
+.sap1-grid {
+ display: grid;
+ grid-template-columns: 35% 30% 35%;
+ grid-template-rows: 20% 20% 20% 20% 20%;
+}
+
+ .sap1-grid > div {
+ /* border: 2px solid black;
+
+ background-color: grey;
+ margin: 2px;
+ justify-self: stretch;
+ min-height: 48px;*/
+ max-height: 70px;
+ }
+
+.sap1-grid-span {
+ justify-content: center;
+ /* grid-column-start: 2;
+ grid-column-end: 2;
+ grid-row-start: 1;
+ grid-row-end: span 5;
+
+ justify-self: stretch;
+ text-align: center;
+ max-height: none;*/
+}
+
+.flags-box {
+ /* border: 2px solid black;
+ background-color: grey;
+ margin: 2px;*/
+}
+
+.input-disabled-correct-background:disabled {
+ background: white;
+}
+
+.tstate-width-correction {
+ max-width: 70px;
+}
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/api.svg b/SAP1EMU.GUI/wwwroot/img/Docs/api.svg
new file mode 100644
index 00000000..908edf5f
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/api.svg
@@ -0,0 +1,8 @@
+
+
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/asm.svg b/SAP1EMU.GUI/wwwroot/img/Docs/asm.svg
new file mode 100644
index 00000000..ab81fe4c
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/asm.svg
@@ -0,0 +1,32 @@
+
+
+
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/cli.svg b/SAP1EMU.GUI/wwwroot/img/Docs/cli.svg
new file mode 100644
index 00000000..3ba4b611
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/cli.svg
@@ -0,0 +1,3 @@
+
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/code.svg b/SAP1EMU.GUI/wwwroot/img/Docs/code.svg
new file mode 100644
index 00000000..9e4a639c
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/cpp.svg b/SAP1EMU.GUI/wwwroot/img/Docs/cpp.svg
new file mode 100644
index 00000000..5e117077
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/cpp.svg
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/cpu.svg b/SAP1EMU.GUI/wwwroot/img/Docs/cpu.svg
new file mode 100644
index 00000000..0e9c2c81
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/cpu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/learn.svg b/SAP1EMU.GUI/wwwroot/img/Docs/learn.svg
new file mode 100644
index 00000000..22ad259c
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/learn.svg
@@ -0,0 +1,27 @@
+
+
+
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/modern-computer.svg b/SAP1EMU.GUI/wwwroot/img/Docs/modern-computer.svg
new file mode 100644
index 00000000..5f198823
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/modern-computer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/Docs/netcore.svg b/SAP1EMU.GUI/wwwroot/img/Docs/netcore.svg
new file mode 100644
index 00000000..43a66f8c
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/Docs/netcore.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.WebApp/wwwroot/img/github-profile.png b/SAP1EMU.GUI/wwwroot/img/github-profile.png
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/img/github-profile.png
rename to SAP1EMU.GUI/wwwroot/img/github-profile.png
diff --git a/SAP1EMU.GUI/wwwroot/img/pause-24px.svg b/SAP1EMU.GUI/wwwroot/img/pause-24px.svg
new file mode 100644
index 00000000..63a1c461
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/pause-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/play_arrow-24px.svg b/SAP1EMU.GUI/wwwroot/img/play_arrow-24px.svg
new file mode 100644
index 00000000..fe2e5786
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/play_arrow-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/replay-24px.svg b/SAP1EMU.GUI/wwwroot/img/replay-24px.svg
new file mode 100644
index 00000000..a923269c
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/replay-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/sap1-logo.png b/SAP1EMU.GUI/wwwroot/img/sap1-logo.png
new file mode 100644
index 00000000..f4c341ac
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/img/sap1-logo.png differ
diff --git a/SAP1EMU.GUI/wwwroot/img/skip_next-24px.svg b/SAP1EMU.GUI/wwwroot/img/skip_next-24px.svg
new file mode 100644
index 00000000..25b78bb8
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/skip_next-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/skip_previous-24px.svg b/SAP1EMU.GUI/wwwroot/img/skip_previous-24px.svg
new file mode 100644
index 00000000..fe2bd534
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/skip_previous-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/img/speed-24px.svg b/SAP1EMU.GUI/wwwroot/img/speed-24px.svg
new file mode 100644
index 00000000..ac9e2c2d
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/img/speed-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/LICENSE b/SAP1EMU.GUI/wwwroot/js/CodeMirror/LICENSE
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/LICENSE
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/LICENSE
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/lib/codemirror.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/lib/codemirror.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/lib/codemirror.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/lib/codemirror.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/lib/codemirror.js b/SAP1EMU.GUI/wwwroot/js/CodeMirror/lib/codemirror.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/lib/codemirror.js
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/lib/codemirror.js
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/clike/clike.js b/SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/clike/clike.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/clike/clike.js
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/clike/clike.js
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/gas/gas_sap1.js b/SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/gas/gas_sap1.js
similarity index 99%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/gas/gas_sap1.js
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/gas/gas_sap1.js
index e339339a..af6762c4 100644
--- a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/gas/gas_sap1.js
+++ b/SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/gas/gas_sap1.js
@@ -45,6 +45,7 @@
registers.add = "variable-3";
registers.sub = "variable-3";
registers.sta = "variable-3";
+ registers.ldi = "variable-3";
// The Value Regerenced Instructions
registers.jmp = "keyword";
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/meta.js b/SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/meta.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/mode/meta.js
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/mode/meta.js
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/3024-day.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/3024-day.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/3024-day.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/3024-day.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/3024-night.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/3024-night.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/3024-night.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/3024-night.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/abcdef.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/abcdef.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/abcdef.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/abcdef.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ambiance-mobile.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ambiance-mobile.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ambiance-mobile.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ambiance-mobile.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ambiance.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ambiance.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ambiance.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ambiance.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ayu-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ayu-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ayu-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ayu-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ayu-mirage.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ayu-mirage.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ayu-mirage.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ayu-mirage.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/base16-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/base16-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/base16-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/base16-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/base16-light.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/base16-light.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/base16-light.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/base16-light.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/bespin.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/bespin.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/bespin.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/bespin.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/blackboard.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/blackboard.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/blackboard.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/blackboard.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/cobalt.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/cobalt.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/cobalt.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/cobalt.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/colorforth.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/colorforth.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/colorforth.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/colorforth.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/darcula.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/darcula.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/darcula.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/darcula.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/dracula.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/dracula.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/dracula.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/dracula.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/duotone-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/duotone-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/duotone-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/duotone-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/duotone-light.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/duotone-light.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/duotone-light.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/duotone-light.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/eclipse.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/eclipse.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/eclipse.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/eclipse.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/elegant.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/elegant.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/elegant.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/elegant.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/erlang-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/erlang-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/erlang-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/erlang-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/gruvbox-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/gruvbox-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/gruvbox-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/gruvbox-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/hopscotch.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/hopscotch.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/hopscotch.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/hopscotch.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/icecoder.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/icecoder.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/icecoder.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/icecoder.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/idea.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/idea.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/idea.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/idea.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/isotope.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/isotope.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/isotope.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/isotope.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/lesser-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/lesser-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/lesser-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/lesser-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/liquibyte.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/liquibyte.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/liquibyte.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/liquibyte.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/lucario.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/lucario.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/lucario.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/lucario.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material-darker.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material-darker.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material-darker.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material-darker.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material-ocean.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material-ocean.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material-ocean.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material-ocean.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material-palenight.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material-palenight.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material-palenight.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material-palenight.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/material.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/material.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/mbo.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/mbo.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/mbo.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/mbo.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/mdn-like.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/mdn-like.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/mdn-like.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/mdn-like.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/midnight.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/midnight.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/midnight.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/midnight.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/monokai.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/monokai.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/monokai.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/monokai.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/moxer.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/moxer.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/moxer.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/moxer.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/neat.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/neat.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/neat.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/neat.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/neo.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/neo.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/neo.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/neo.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/night.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/night.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/night.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/night.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/nord.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/nord.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/nord.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/nord.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/oceanic-next.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/oceanic-next.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/oceanic-next.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/oceanic-next.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/panda-syntax.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/panda-syntax.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/panda-syntax.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/panda-syntax.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/paraiso-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/paraiso-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/paraiso-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/paraiso-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/paraiso-light.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/paraiso-light.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/paraiso-light.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/paraiso-light.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/pastel-on-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/pastel-on-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/pastel-on-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/pastel-on-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/railscasts.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/railscasts.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/railscasts.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/railscasts.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/rubyblue.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/rubyblue.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/rubyblue.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/rubyblue.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/seti.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/seti.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/seti.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/seti.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/shadowfox.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/shadowfox.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/shadowfox.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/shadowfox.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/solarized.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/solarized.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/solarized.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/solarized.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ssms.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ssms.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ssms.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ssms.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/the-matrix.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/the-matrix.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/the-matrix.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/the-matrix.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/tomorrow-night-bright.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/tomorrow-night-bright.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/tomorrow-night-bright.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/tomorrow-night-bright.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/tomorrow-night-eighties.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/tomorrow-night-eighties.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/tomorrow-night-eighties.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/tomorrow-night-eighties.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ttcn.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ttcn.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/ttcn.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/ttcn.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/twilight.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/twilight.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/twilight.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/twilight.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/vibrant-ink.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/vibrant-ink.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/vibrant-ink.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/vibrant-ink.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/xq-dark.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/xq-dark.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/xq-dark.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/xq-dark.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/xq-light.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/xq-light.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/xq-light.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/xq-light.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/yeti.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/yeti.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/yeti.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/yeti.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/yonce.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/yonce.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/yonce.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/yonce.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/zenburn.css b/SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/zenburn.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/CodeMirror/theme/zenburn.css
rename to SAP1EMU.GUI/wwwroot/js/CodeMirror/theme/zenburn.css
diff --git a/SAP1EMU.WebApp/wwwroot/js/Views/AboutView.js b/SAP1EMU.GUI/wwwroot/js/Views/AboutView.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/Views/AboutView.js
rename to SAP1EMU.GUI/wwwroot/js/Views/AboutView.js
diff --git a/SAP1EMU.WebApp/wwwroot/js/Views/AssemblerView.js b/SAP1EMU.GUI/wwwroot/js/Views/AssemblerView.js
similarity index 76%
rename from SAP1EMU.WebApp/wwwroot/js/Views/AssemblerView.js
rename to SAP1EMU.GUI/wwwroot/js/Views/AssemblerView.js
index c1ef2c21..c5963ea7 100644
--- a/SAP1EMU.WebApp/wwwroot/js/Views/AssemblerView.js
+++ b/SAP1EMU.GUI/wwwroot/js/Views/AssemblerView.js
@@ -73,22 +73,28 @@ function AssembleCode() {
-function openFromFile() {
- // Send Request to ASP.NET
- const { ipcRenderer } = require("electron");
- ipcRenderer.send("open-from-file-asm");
-
- // Receive code back from ASP.NET
- ipcRenderer.once("code-from-file-asm",
- (sender, asm_code) => {
- asm_editor.setValue(asm_code);
- }
- );
+//function openFromFile() {
+// // Send Request to ASP.NET
+// const { ipcRenderer } = require("electron");
+// ipcRenderer.send("open-from-file-asm");
+
+// // Receive code back from ASP.NET
+// ipcRenderer.once("code-from-file-asm",
+// (sender, asm_code) => {
+// asm_editor.setValue(asm_code);
+// }
+// );
+
+//}
+
+//function saveToFile() {
+// // Send Request to ASP.NET
+// const { ipcRenderer } = require("electron");
+// ipcRenderer.send("save-to-file-asm", bin_editor.getValue());
+//}
+
+function getFromFile() {
+ readFromFile(".s,.asm", asm_editor, "assembler-out");
}
-function saveToFile() {
- // Send Request to ASP.NET
- const { ipcRenderer } = require("electron");
- ipcRenderer.send("save-to-file-asm", bin_editor.getValue());
-}
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/js/Views/Docs/8BitDocs.js b/SAP1EMU.GUI/wwwroot/js/Views/Docs/8BitDocs.js
new file mode 100644
index 00000000..c3a572e3
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/js/Views/Docs/8BitDocs.js
@@ -0,0 +1,50 @@
+// These are global so they presist throught the page lifetime
+var EightBit_P3_Example_Left;
+var EightBit_P3_Example_Right;
+var EightBit_P3_Example_Comment_Left;
+var EightBit_P3_Example_Comment_Right;
+
+window.onload = function () {
+ // Setup Code Editor Boxes
+
+ // Macro Example
+ EightBit_P3_Example_Left = CodeMirror.fromTextArea(document.getElementById("8Bit_P3_Example_Left"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: { name: "gas_sap1", architecture: "x86" },
+ readOnly: true,
+ });
+
+ EightBit_P3_Example_Right = CodeMirror.fromTextArea(document.getElementById("8Bit_P3_Example_Right"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: { name: "gas_sap1", architecture: "x86" },
+ readOnly: true,
+ });
+
+
+ // Comments Example
+ EightBit_P3_Example_Comment_Left = CodeMirror.fromTextArea(document.getElementById("8Bit_P3_Example_Comment_Left"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: { name: "gas_sap1", architecture: "x86" },
+ readOnly: true,
+ });
+
+ EightBit_P3_Example_Comment_Right = CodeMirror.fromTextArea(document.getElementById("8Bit_P3_Example_Comment_Right"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: { name: "gas_sap1", architecture: "x86" },
+ readOnly: true,
+ });
+
+ // Macro Example
+ EightBit_P3_Example_Left.setValue("LDA 0xF\nADD 0xE\nOUT 0x0\nHLT 0x0\n...\n0x7 0x1\n0xF 0xE");
+ EightBit_P3_Example_Right.setValue("LDA 0xF\nADD 0xE\nOUT 0x0\nHLT 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x7 0x1\n0xF 0xE");
+
+ // Comments Example
+ EightBit_P3_Example_Comment_Left.setValue("LDA 0xF\nADD 0xE # A = A + RAM[14]\nJIC 0x4 # if Carry==1, exit loop\nJMP 0x1 # JMP to ADD 0xE\nOUT 0x0\nHLT 0x0\n...\n# Data Section:\n0x0 0x1 # 1\n0xF 0xD # 253");
+ EightBit_P3_Example_Comment_Right.setValue("LDA 0xF\nADD 0xE\nJIC 0x4\nJMP 0x1\nOUT 0x0\nHLT 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x0\n0x0 0x1\n0xF 0xD");
+
+
+}
\ No newline at end of file
diff --git a/SAP1EMU.GUI/wwwroot/js/Views/EmulatorView.js b/SAP1EMU.GUI/wwwroot/js/Views/EmulatorView.js
new file mode 100644
index 00000000..db36ec8e
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/js/Views/EmulatorView.js
@@ -0,0 +1,280 @@
+var asm_editor;
+var ram_dump;
+var frame_stack;
+var interval_slider;
+var interval_time = 500;
+//var playerInstance;
+
+window.onload = function () {
+ interval_slider = document.getElementById("formControlRange");
+
+ asm_editor = CodeMirror.fromTextArea(document.getElementById("asm_code"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: { name: "gas_sap1", architecture: "x86" },
+ });
+
+ ram_dump = CodeMirror.fromTextArea(document.getElementById("ram_dump"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: { name: "gas_sap1", architecture: "x86" },
+ readOnly: true,
+ firstLineNumber: 0,
+ lineNumberFormatter: function (line) { return "0x" + line.toString(16).toLocaleUpperCase(); },
+ });
+
+ initRam();
+ initBoard();
+ setControlButtonsDisabled(true);
+
+
+ // Setup ComboBox
+ $.ajax({
+ url: "../api/Assembler/supported_sets",
+ type: "GET",
+ success: function (data) {
+ var selectDOM = document.getElementById("langs");
+ var options = data;
+
+ for (var i = 0; i < options.length; i++) {
+ var opt = options[i];
+
+ var elem = document.createElement("option");
+ elem.text = opt;
+ elem.value = opt;
+
+ selectDOM.add(elem);
+ }
+ },
+ error: function (request, status, error) {
+ alert("SAP1EMU ERROR: JSON CONFIG FILE ERROR:\n" + request.responseText);
+ }
+ });
+
+}
+
+function initBoard() {
+ $('#pc-block').html("0000");
+ $('#wbus-block').html("0000 0000");
+ $('#areg-block').html("0000 0000");
+ $('#mar-block').html("0000");
+ $('#alu-block').html("0000 0000");
+ $('#ram-block').html("0000 0000");
+ $('#breg-block').html("0000 0000");
+ $('#ireg-block').html("0000 0000");
+ $('#oreg-block').html("0000 0000");
+ $('#seq-block').html("0011 1110 0011 11");
+ $('#dis-block').html("0");
+ $('#carryFlagBox').html("0");
+ $('#underflowFlagBox').html("0");
+}
+
+function updateBoard(frame) {
+ $('#pc-block').html(frame.pc);
+ $('#wbus-block').html(frame.wBus.match(/.{1,4}/g).join(' '));
+ $('#areg-block').html(frame.aReg.match(/.{1,4}/g).join(' '));
+ $('#mar-block').html(frame.mReg.match(/.{1,4}/g).join(' '));
+ $('#alu-block').html(frame.alu.match(/.{1,4}/g).join(' '));
+ $('#ram-block').html(frame.raM_Reg.match(/.{1,4}/g).join(' '));
+ $('#breg-block').html(frame.bReg.match(/.{1,4}/g).join(' '));
+ $('#ireg-block').html(frame.iReg.match(/.{1,4}/g).join(' '));
+ $('#oreg-block').html(frame.oReg.match(/.{1,4}/g).join(' '));
+ $('#seq-block').html(frame.seq.substring(0, 14).match(/.{1,4}/g).join(' ')); // TODO This substring should be handled at the API level, not the UI level
+ $('#carryFlagBox').val(frame.overflow_Flag);
+ $('#underflowFlagBox').val(frame.underflow_Flag);
+
+ var posVal = parseInt(frame.oReg, 2);
+ var negVal = posVal;
+
+ if (posVal > 127) {
+ negVal = (-1) * (256 - posVal);
+ }
+ var displayString = "" + posVal;
+ if (negVal < 0) {
+ displayString += " " + negVal;
+ }
+
+ $('#dis-block').html(displayString);
+}
+
+function initRam() {
+ // Init RAM Box
+ var ram_string = "";
+
+ for (var i = 0; i < 15; i++) {
+ ram_string += "0000 0000\n";
+ }
+ ram_string += "0000 0000";
+ ram_dump.setValue(ram_string);
+}
+
+function loadRam(ram) {
+ var tempString = "";
+ for (var i = 0; i < 16; i++) {
+ tempString += ram[i].substring(0, 4);
+ tempString += " ";
+ tempString += ram[i].substring(4, 8);
+ if (i < 15) {
+ tempString += "\n";
+ }
+ }
+ ram_dump.setValue(tempString);
+}
+
+function LoadIntoRAM() {
+ var asm_code = asm_editor.getValue().split('\n');
+ var langChoice = document.getElementById("langs").value;
+
+ jsonData = JSON.stringify({ CodeList: asm_code, SetName: langChoice });
+ //console.log(jsonData);
+
+ $.ajax({
+ url: "../api/Emulator",
+ type: "POST",
+ contentType: 'application/json; charset=UTF-8',
+ data: jsonData,
+ success: function (data) {
+ $('#emulator-out').html(' '); // clear the error msg box
+
+ frame_stack = data;
+ first_frame = frame_stack[0];
+
+ //console.log(frame_stack);
+ //console.log(frame_stack.length);
+
+ loadRam(first_frame.ram);
+
+ return data;
+ },
+ error: function (request, status, error) {
+ initRam();
+ $('#emulator-out').html(request.responseText);
+ }
+ });
+
+
+
+ setControlButtonsDisabled(false);
+}
+
+var job_id = null;
+var justPaused = false;
+function play_button_onclick() {
+ if (job_id == null) {
+ $("#play-pause-img").attr("src", "/img/pause-24px.svg");
+ job_id = setInterval(frame_advance, interval_time);
+
+ // Disable back and next
+ $("#back-button").prop('disabled', true);
+ $("#next-button").prop('disabled', true);
+ }
+ else {
+ justPaused = true;
+ clearInterval(job_id);
+ job_id = null;
+ $("#play-pause-img").attr("src", "/img/play_arrow-24px.svg");
+
+ // Enable back and next
+ $("#back-button").prop('disabled', false);
+ $("#next-button").prop('disabled', false);
+ }
+}
+
+function back_button_onclick() {
+ frame_reverse();
+}
+
+function next_button_onclick() {
+ frame_advance();
+}
+
+function reset_button_onclick() {
+ current_frame = 0;
+ updateBoard(frame_stack[current_frame]);
+ loadRam(frame_stack[current_frame].ram);
+ $("#instruction-box").text(frame_stack[current_frame].instruction);
+ $("#tstate-box").val('T' + frame_stack[current_frame].tState);
+ updateProgressBar(current_frame, frame_stack.length);
+}
+
+
+
+var current_frame = 0;
+function frame_advance() {
+ if (current_frame < frame_stack.length - 1) {
+ current_frame++;
+ updateBoard(frame_stack[current_frame]);
+ loadRam(frame_stack[current_frame].ram);
+ $("#instruction-box").text(frame_stack[current_frame].instruction);
+ $("#tstate-box").val('T' + frame_stack[current_frame].tState);
+
+ // Update Progress Bar
+ updateProgressBar(current_frame, frame_stack.length);
+ }
+ else {
+ $('#frameProgressBar').css("width", "100%");
+ clearInterval(job_id);
+ job_id = null;
+
+
+ }
+
+ //console.log(frame_stack[current_frame]);
+}
+
+function frame_reverse() {
+ if (justPaused) {
+ current_frame--;
+ justPaused = false;
+ }
+ if (current_frame > 0) {
+ current_frame--;
+ updateBoard(frame_stack[current_frame]);
+ loadRam(frame_stack[current_frame].ram);
+ $("#instruction-box").text(frame_stack[current_frame].instruction);
+ $("#tstate-box").val('T' + frame_stack[current_frame].tState);
+
+ // Update Progress Bar
+ updateProgressBar(current_frame, frame_stack.length);
+ }
+}
+
+function getFromFile() {
+ readFromFile(".s,.asm", asm_editor, "emulator-out");
+}
+
+function setControlButtonsDisabled(isDisabled) {
+ $("#back-button").prop('disabled', isDisabled);
+ $("#play-pause-button").prop('disabled', isDisabled);
+ $("#next-button").prop('disabled', isDisabled);
+ $("#reset-button").prop('disabled', isDisabled);
+}
+
+
+function updateProgressBar(currentFrame, frameStackLength) {
+
+ if (currentFrame == frameStackLength - 1) {
+ $('#frameProgressBar').css("width", "100%");
+ }
+ else {
+ var frameProgress = (current_frame / frame_stack.length) * 100;
+ $('#frameProgressBar').css("width", frameProgress + "%");
+ }
+}
+
+function changeIntervalTiming(value) {
+
+ // keep the time from getting too long
+ if (value <= .250) {
+ value = .250;
+ }
+ interval_time = (1 / value) * 500;
+
+ // If we currently have a job in process meaning the code is executing then
+ // clear it and change the interval time and start again
+ if (job_id != null) {
+ clearInterval(job_id);
+ job_id = setInterval(frame_advance, interval_time);
+ }
+}
+
diff --git a/SAP1EMU.WebApp/wwwroot/js/Views/_LayoutView.js b/SAP1EMU.GUI/wwwroot/js/Views/_LayoutView.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/js/Views/_LayoutView.js
rename to SAP1EMU.GUI/wwwroot/js/Views/_LayoutView.js
diff --git a/SAP1EMU.GUI/wwwroot/js/site.js b/SAP1EMU.GUI/wwwroot/js/site.js
new file mode 100644
index 00000000..6313c884
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/js/site.js
@@ -0,0 +1,31 @@
+// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+// for details on configuring this project to bundle and minify static web assets.
+
+// Write your JavaScript code.
+
+function readFromFile(type, codeMirror, errorBoxID) {
+ var input = document.createElement('input');
+ input.type = 'file';
+ input.accept = type;
+ input.onchange = e => {
+ var file = e.target.files[0];
+
+ // Read the file contents
+ var reader = new FileReader();
+ reader.readAsText(file, 'UTF-8');
+
+ // Send contents to CodeMiror Box
+ reader.onload = readerEvent => {
+ content = readerEvent.target.result;
+ codeMirror.setValue(content);
+ }
+
+ reader.onerror = readerEvent => {
+ $("#" + errorBoxID).setValue(readerEvent.target.error);
+ }
+
+ }
+ input.click();
+}
+
+
diff --git a/SAP1EMU.GUI/wwwroot/lib/android-chrome-192x192.png b/SAP1EMU.GUI/wwwroot/lib/android-chrome-192x192.png
new file mode 100644
index 00000000..dfed6d4e
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/lib/android-chrome-192x192.png differ
diff --git a/SAP1EMU.GUI/wwwroot/lib/android-chrome-512x512.png b/SAP1EMU.GUI/wwwroot/lib/android-chrome-512x512.png
new file mode 100644
index 00000000..b3dd943e
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/lib/android-chrome-512x512.png differ
diff --git a/SAP1EMU.GUI/wwwroot/lib/apple-touch-icon.png b/SAP1EMU.GUI/wwwroot/lib/apple-touch-icon.png
new file mode 100644
index 00000000..1398cf68
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/lib/apple-touch-icon.png differ
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/LICENSE b/SAP1EMU.GUI/wwwroot/lib/bootstrap/LICENSE
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/LICENSE
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/LICENSE
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.css
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map b/SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
rename to SAP1EMU.GUI/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
diff --git a/SAP1EMU.GUI/wwwroot/lib/favicon-16x16.png b/SAP1EMU.GUI/wwwroot/lib/favicon-16x16.png
new file mode 100644
index 00000000..014e9b80
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/lib/favicon-16x16.png differ
diff --git a/SAP1EMU.GUI/wwwroot/lib/favicon-32x32.png b/SAP1EMU.GUI/wwwroot/lib/favicon-32x32.png
new file mode 100644
index 00000000..69789c16
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/lib/favicon-32x32.png differ
diff --git a/SAP1EMU.GUI/wwwroot/lib/favicon.ico b/SAP1EMU.GUI/wwwroot/lib/favicon.ico
new file mode 100644
index 00000000..b15b459a
Binary files /dev/null and b/SAP1EMU.GUI/wwwroot/lib/favicon.ico differ
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/LICENSE.txt b/SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/LICENSE.txt
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/LICENSE.txt
rename to SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/LICENSE.txt
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/README.md b/SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/README.md
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/README.md
rename to SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/README.md
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.js b/SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.min.js b/SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.min.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/package.json b/SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/package.json
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-ajax-unobtrusive/package.json
rename to SAP1EMU.GUI/wwwroot/lib/jquery-ajax-unobtrusive/package.json
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt b/SAP1EMU.GUI/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js b/SAP1EMU.GUI/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js b/SAP1EMU.GUI/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation/LICENSE.md b/SAP1EMU.GUI/wwwroot/lib/jquery-validation/LICENSE.md
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation/LICENSE.md
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation/LICENSE.md
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/additional-methods.js b/SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/additional-methods.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/additional-methods.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/additional-methods.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/additional-methods.min.js b/SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/jquery.validate.js b/SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/jquery.validate.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/jquery.validate.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/jquery.validate.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js b/SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery/LICENSE.txt b/SAP1EMU.GUI/wwwroot/lib/jquery/LICENSE.txt
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery/LICENSE.txt
rename to SAP1EMU.GUI/wwwroot/lib/jquery/LICENSE.txt
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery/dist/jquery.js b/SAP1EMU.GUI/wwwroot/lib/jquery/dist/jquery.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery/dist/jquery.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery/dist/jquery.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery/dist/jquery.min.js b/SAP1EMU.GUI/wwwroot/lib/jquery/dist/jquery.min.js
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery/dist/jquery.min.js
rename to SAP1EMU.GUI/wwwroot/lib/jquery/dist/jquery.min.js
diff --git a/SAP1EMU.WebApp/wwwroot/lib/jquery/dist/jquery.min.map b/SAP1EMU.GUI/wwwroot/lib/jquery/dist/jquery.min.map
similarity index 100%
rename from SAP1EMU.WebApp/wwwroot/lib/jquery/dist/jquery.min.map
rename to SAP1EMU.GUI/wwwroot/lib/jquery/dist/jquery.min.map
diff --git a/SAP1EMU.GUI/wwwroot/lib/site.webmanifest b/SAP1EMU.GUI/wwwroot/lib/site.webmanifest
new file mode 100644
index 00000000..240873b9
--- /dev/null
+++ b/SAP1EMU.GUI/wwwroot/lib/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/lib/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/lib/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
\ No newline at end of file
diff --git a/SAP1EMU.Lib.Test/ComponentTests/ControllerTest.cs b/SAP1EMU.Lib.Test/ComponentTests/ControllerTest.cs
index 449e24d7..e36c4c5b 100644
--- a/SAP1EMU.Lib.Test/ComponentTests/ControllerTest.cs
+++ b/SAP1EMU.Lib.Test/ComponentTests/ControllerTest.cs
@@ -9,9 +9,19 @@ namespace SAP1EMU.Lib.Test.ComponentTests
[TestClass]
public class ControllerTest
{
+ private InstructionSet GetInstructionSet()
+ {
+ string InstructionSetName = "SAP1Emu";
+ return OpCodeLoader.GetSet(InstructionSetName);
+ }
+
+
+
[TestMethod]
public void TestControlWordTableInit()
{
+ SEQ.Instance().Load(GetInstructionSet());
+
const int INT_COUNT = 6;
const int T_STATE_COUNT = 6;
string[] INSTRUCTIONS = new string[6]{ "0000", "0001", "0010", "0011", "1110", "1111" };
diff --git a/SAP1EMU.Lib.Test/ComponentTests/PubSub_ClockTest.cs b/SAP1EMU.Lib.Test/ComponentTests/PubSub_ClockTest.cs
index 8f217b2c..b42a6aaf 100644
--- a/SAP1EMU.Lib.Test/ComponentTests/PubSub_ClockTest.cs
+++ b/SAP1EMU.Lib.Test/ComponentTests/PubSub_ClockTest.cs
@@ -10,6 +10,12 @@ namespace SAP1EMU.Lib.Test.ComponentTests
[TestClass]
public class PubSub_ClockTest
{
+ private InstructionSet GetInstructionSet()
+ {
+ string InstructionSetName = "SAP1Emu";
+ return OpCodeLoader.GetSet(InstructionSetName);
+ }
+
[TestMethod]
public void TestSubscribe()
@@ -33,6 +39,8 @@ public void TestSubscribe()
MReg mreg = new MReg(ref ram);
SEQ seq = SEQ.Instance();
+ seq.Load(GetInstructionSet());
+
Wbus.Instance().Value = "00000000";
Flags.Instance().Clear();
@@ -44,6 +52,8 @@ public void TestSubscribe()
pc.Subscribe(clock);
alu.Subscribe(clock); // ALU must come after A and B
ram.Subscribe(clock);
+
+
}
catch (Exception e)
{
@@ -61,7 +71,7 @@ public void TestUpdate()
TicTok tictok = new TicTok();
- tictok.Init(); ;
+ tictok.Init();
AReg areg = new AReg();
BReg breg = new BReg();
@@ -73,6 +83,8 @@ public void TestUpdate()
ALU alu = new ALU(ref areg, ref breg);
MReg mreg = new MReg(ref ram);
SEQ seq = SEQ.Instance();
+ seq.Load(GetInstructionSet());
+
Wbus.Instance().Value = "00000000";
Flags.Instance().Clear();
@@ -86,6 +98,7 @@ public void TestUpdate()
alu.Subscribe(clock); // ALU must come after A and B
ram.Subscribe(clock);
+ clock.IsEnabled = true;
for (int i = 0; i < 500; i++)
{
@@ -120,6 +133,8 @@ public void TestUnsubscribe()
ALU alu = new ALU(ref areg, ref breg);
MReg mreg = new MReg(ref ram);
SEQ seq = SEQ.Instance();
+ seq.Load(GetInstructionSet());
+
Wbus.Instance().Value = "00000000";
Flags.Instance().Clear();
diff --git a/SAP1EMU.Lib.Test/DecoderTest.cs b/SAP1EMU.Lib.Test/DecoderTest.cs
new file mode 100644
index 00000000..25a3013a
--- /dev/null
+++ b/SAP1EMU.Lib.Test/DecoderTest.cs
@@ -0,0 +1,44 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace SAP1EMU.Lib.Test
+{
+ [TestClass]
+
+ public class DecoderTest
+ {
+
+ IDecoder _decoder = new InstructionDecoder();
+ [TestMethod]
+ [DataRow("LDA", "0000", "SAP1Emu")]
+ [DataRow("ADD", "0001", "SAP1Emu")]
+ [DataRow("SUB", "0010", "SAP1Emu")]
+ [DataRow("STA", "0011", "SAP1Emu")]
+ [DataRow("JMP", "0100", "SAP1Emu")]
+ [DataRow("JEQ", "0101", "SAP1Emu")]
+
+ [DataRow("LDA", "0000", "Malvino")]
+ [DataRow("ADD", "0001", "Malvino")]
+ [DataRow("SUB", "0010", "Malvino")]
+ [DataRow("OUT", "1110", "Malvino")]
+ [DataRow("HLT", "1111", "Malvino")]
+ [DataRow("???", "0101", "Malvino")] // Should not exist in Malvio
+
+
+ [DataRow("NOP", "0000", "BenEater")]
+ [DataRow("LDA", "0001", "BenEater")]
+ [DataRow("ADD", "0010", "BenEater")]
+ [DataRow("SUB", "0011", "BenEater")]
+ [DataRow("STA", "0100", "BenEater")]
+ [DataRow("LDI", "0101", "BenEater")]
+ [DataRow("OUT", "1110", "BenEater")]
+ [DataRow("HLT", "1111", "BenEater")]
+
+ public void TestDecode(string OpCode, string BinCode, string SetName)
+ {
+ Assert.AreEqual(OpCode, _decoder.Decode(BinCode, SetName));
+ }
+ }
+}
diff --git a/SAP1EMU.Lib.Test/FrameTest.cs b/SAP1EMU.Lib.Test/FrameTest.cs
index 0481795d..7574ac10 100644
--- a/SAP1EMU.Lib.Test/FrameTest.cs
+++ b/SAP1EMU.Lib.Test/FrameTest.cs
@@ -10,6 +10,7 @@ namespace SAP1EMU.Lib.Test
[TestClass]
public class FrameTest
{
+ IDecoder _decoder = new InstructionDecoder();
[TestMethod]
public void TestToString()
{
@@ -35,7 +36,7 @@ public void TestToString()
- Frame frame = new Frame(ireg.ToString(), TState, areg, breg, ireg, mreg, oreg, pc, alu, ram.RAMDump(), ram, seq, Wbus.Instance().ToString());
+ Frame frame = new Frame(ireg.ToString(), TState, areg, breg, ireg, mreg, oreg, pc, alu, ram.RAMDump(), ram, seq, Wbus.Instance().ToString(), Flags.Instance(), _decoder);
_ = frame.ToString();
_ = frame.OutputRegister();
diff --git a/SAP1EMU.Lib.Test/SAP1EMU.Lib.Test.csproj b/SAP1EMU.Lib.Test/SAP1EMU.Lib.Test.csproj
index 0786b2bf..3555f911 100644
--- a/SAP1EMU.Lib.Test/SAP1EMU.Lib.Test.csproj
+++ b/SAP1EMU.Lib.Test/SAP1EMU.Lib.Test.csproj
@@ -13,9 +13,14 @@
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/SAP1EMU.Lib/Components/RAM.cs b/SAP1EMU.Lib/Components/RAM.cs
index 104ebc60..c839986a 100644
--- a/SAP1EMU.Lib/Components/RAM.cs
+++ b/SAP1EMU.Lib/Components/RAM.cs
@@ -118,5 +118,11 @@ public override string ToString()
{
return RAM_Register_Content;
}
+
+ public string ToString_Frame_Use()
+ {
+ return (String.IsNullOrEmpty(this.RAM_Register_Content) ? "00000000" : this.RAM_Register_Content);
+ }
+
}
}
diff --git a/SAP1EMU.Lib/Components/SEQ.cs b/SAP1EMU.Lib/Components/SEQ.cs
index 10292647..4901db09 100644
--- a/SAP1EMU.Lib/Components/SEQ.cs
+++ b/SAP1EMU.Lib/Components/SEQ.cs
@@ -19,7 +19,7 @@ public class SEQ
///
/// The control word storage location for all registers and components
///
- /// CP EP LM_ CE_ LI_ EI_ LA_ EA SU EU LB_ LO_ | LR_ LP_
+ /// CP EP LM_ CE_ LI_ EI_ LA_ EA SU EU LB_ LO_ | LR_ LP_ | 0bXXX (Jump Code)
///
///
public string ControlWord { get; private set; }
@@ -71,6 +71,7 @@ public void Load(InstructionSet iset)
ControlTable.Add(HashKey(i + 1, instruction.BinCode), instruction.MicroCode[i]);
}
}
+ _instance.ControlWord = ControlTable[HashKey(6,"1111")]; // sets the default to a NOP
}
@@ -84,9 +85,11 @@ public static SEQ Instance()
if (_instance == null)
{
_instance = new SEQ();
- _instance.ControlWord = "001111100011";
+ //_instance.ControlWord = "001111100011";
+ // TODO - this wasnt enough chars bc the words got longer, I fixed by addding _instance.ControlWord = ControlTable[0]; abouve
+ // not a greate fix, but it works
}
-
+
return _instance;
}
diff --git a/SAP1EMU.Lib/Frame.cs b/SAP1EMU.Lib/Frame.cs
index 886a44b6..c10632ec 100644
--- a/SAP1EMU.Lib/Frame.cs
+++ b/SAP1EMU.Lib/Frame.cs
@@ -10,56 +10,72 @@ namespace SAP1EMU.Lib
{
public class Frame
{
- public string Instruction { get; private set; } = "????";
+ public string Instruction { get; private set; } = "???";
public int TState { get; private set; } = 0;
- public string AReg { get; private set; } = "????";
- public string BReg { get; private set; } = "????";
- public string IReg { get; private set; } = "????";
- public string IRegShort { get; private set; } = "????";
- public string MReg { get; private set; } = "????";
- public string OReg { get; private set; } = "????";
- public string PC { get; private set; } = "????";
- public string ALU { get; private set; } = "????";
- public string SEQ { get; private set; } = "????";
- public string WBus { get; private set; } = "????";
- public string RAM_Reg { get; private set; } = "?????";
+ public string AReg { get; private set; } = "0000 0000";
+ public string BReg { get; private set; } = "0000 0000";
+ public string IReg { get; private set; } = "0000 0000";
+ public string IRegShort { get; private set; } = "0000 0000";
+ public string MReg { get; private set; } = "0000 0000";
+ public string OReg { get; private set; } = "0000 0000";
+ public string PC { get; private set; } = "0000";
+ public string ALU { get; private set; } = "0000 0000";
+ public string SEQ { get; private set; } = "0000 0000";
+ public string WBus { get; private set; } = "0000 0000";
+ public string RAM_Reg { get; private set; } = "0000 0000";
+ public string Overflow_Flag { get; private set; } = "0";
+ public string Underflow_Flag { get; private set; } = "0";
public List RAM { get; private set; } // The reason this is here is that the RAM might change if a STA simular command is issued.
- public Frame(string instruction, int TState, AReg areg, BReg breg, IReg ireg, MReg mreg, OReg oreg, PC pc, ALU alu, List ramContents, RAM ram, SEQ seq, string wbus_string)
+ public Frame(string instruction, int TState, AReg areg, BReg breg, IReg ireg, MReg mreg, OReg oreg, PC pc, ALU alu, List ramContents, RAM ram, SEQ seq, string wbus_string, Flags flags, IDecoder decoder, string SetName = "SAP1EMU")
{
this.RAM = new List();
this.TState = TState;
- this.AReg = areg.ToString();
- this.BReg = breg.ToString();
+ this.AReg = areg.ToString_Frame_Use();
+ this.BReg = breg.ToString_Frame_Use();
this.IRegShort = ireg.ToString();
this.IReg = ireg.ToString_Frame_Use(); // The real ToString() is in use with a substring in it. This is needed for proper operation
- this.MReg = mreg.ToString();
- this.OReg = oreg.ToString();
+ this.MReg = mreg.ToString_Frame_Use();
+ this.OReg = oreg.ToString_Frame_Use();
this.PC = pc.ToString().Substring(4, 4);
this.ALU = alu.ToString();
this.WBus = wbus_string;
+ this.Overflow_Flag = flags.Overflow.ToString();
+ this.Underflow_Flag = flags.Underflow.ToString();
+
foreach(string s in ramContents)
{
RAM.Add(s);
}
-
this.SEQ = seq.ToString();
this.WBus = wbus_string; // I didnt want to mess with the Singleton in the frame, so the value will just be passed as a string
- this.RAM_Reg = ram.ToString();
+ this.RAM_Reg = ram.ToString_Frame_Use();
if (instruction.Length == 0)
{
- this.IReg = "????";
+ this.IReg = "???";
}
+
+ if(TState > 3)
+ {
+ //Instruction = OpCodeLoader.DecodeInstruction(IReg.Substring(0, 4), SetName); // TODO this is really inifeciant. Should prob make a service and inject it
+ Instruction = decoder.Decode(IReg.Substring(0, 4), SetName);
+ }
+ else
+ {
+ Instruction = "???";
+
+ }
}
// TODO - Repleace with something in the LIB OpCodeLoader
+ // TODO - is the still used? I think I replaced this somewhere else in the code
private string InstuctionDecode(string BinInstruction, int TState)
{
List KnownInstructions = new List { "LDA", "ADD", "SUB", "STA", "JMP", "JEQ", "", "", "", "JIC", "", "", "", "", "OUT", "HLT" };
diff --git a/SAP1EMU.Lib/IDecoder.cs b/SAP1EMU.Lib/IDecoder.cs
new file mode 100644
index 00000000..96f482b0
--- /dev/null
+++ b/SAP1EMU.Lib/IDecoder.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace SAP1EMU.Lib
+{
+ public interface IDecoder
+ {
+ public string Decode(string binCode, string setName);
+ }
+}
diff --git a/SAP1EMU.Lib/InstructionDecoder.cs b/SAP1EMU.Lib/InstructionDecoder.cs
new file mode 100644
index 00000000..9d895588
--- /dev/null
+++ b/SAP1EMU.Lib/InstructionDecoder.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text.Json;
+
+namespace SAP1EMU.Lib
+{
+ public class InstructionDecoder : IDecoder
+ {
+ Dictionary _instructions = new Dictionary();
+ string _filename = "InstructionSets.json";
+ public InstructionDecoder()
+ {
+ string json = File.ReadAllText(_filename);
+ List sets = JsonSerializer.Deserialize>(json);
+
+ foreach(InstructionSet iset in sets)
+ {
+ foreach(Instruction i in iset.instructions)
+ {
+ _instructions.Add((i.BinCode, iset.SetName).GetHashCode(), i.OpCode);
+ }
+ }
+ }
+
+ public string Decode(string binCode, string setName)
+ {
+ try
+ {
+ return _instructions[(binCode, setName).GetHashCode()];
+ }
+ catch(Exception)
+ {
+ return "???";
+ }
+ }
+ }
+}
diff --git a/SAP1EMU.Lib/InstructionSets.json b/SAP1EMU.Lib/InstructionSets.json
index b0aa7331..990253cc 100644
--- a/SAP1EMU.Lib/InstructionSets.json
+++ b/SAP1EMU.Lib/InstructionSets.json
@@ -58,7 +58,7 @@
"01011110001111000",
"10111110001111000",
"00100110001111000",
- "00111010001100000",
+ "00111010001110000",
"00111110001111000",
"00111110001111000"
]
@@ -70,7 +70,7 @@
"01011110001111001",
"10111110001111001",
"00100110001111001",
- "00111010001100001",
+ "00111010001110001",
"00111110001111001",
"00111110001111001"
]
@@ -82,7 +82,7 @@
"01011110001111010",
"10111110001111010",
"00100110001111010",
- "00111010001100010",
+ "00111010001110010",
"00111110001111010",
"00111110001111010"
]
@@ -94,7 +94,7 @@
"01011110001111011",
"10111110001111011",
"00100110001111011",
- "00111010001100011",
+ "00111010001110011",
"00111110001111011",
"00111110001111011"
]
@@ -106,7 +106,7 @@
"01011110001111100",
"10111110001111100",
"00100110001111100",
- "00111010001100100",
+ "00111010001110100",
"00111110001111100",
"00111110001111100"
]
@@ -118,7 +118,7 @@
"01011110001111101",
"10111110001111101",
"00100110001111101",
- "00111010001100101",
+ "00111010001110101",
"00111110001111101",
"00111110001111101"
]
@@ -286,7 +286,7 @@
"01011110001111000",
"10111110001111000",
"00100110001111000",
- "00111110001111000",
+ "00111000001111000",
"00111110001111000",
"00111110001111000"
]
@@ -298,7 +298,7 @@
"01011110001111000",
"10111110001111000",
"00100110001111000",
- "00111010001100000",
+ "00111010001110000",
"00111110001111000",
"00111110001111000"
]
@@ -310,7 +310,7 @@
"01011110001111010",
"10111110001111010",
"00100110001111010",
- "00111010001100010",
+ "00111010001110010",
"00111110001111010",
"00111110001111010"
]
@@ -322,7 +322,7 @@
"01011110001111001",
"10111110001111001",
"00100110001111001",
- "00111010001100001",
+ "00111010001110001",
"00111110001111001",
"00111110001111001"
]
diff --git a/SAP1EMU.Lib/OpCodeLoader.cs b/SAP1EMU.Lib/OpCodeLoader.cs
index d2c88c58..78e1f2fd 100644
--- a/SAP1EMU.Lib/OpCodeLoader.cs
+++ b/SAP1EMU.Lib/OpCodeLoader.cs
@@ -80,5 +80,41 @@ public static List GetISetNames()
return names;
}
+
+ // Replaced by IDecoder
+ //public static string DecodeInstruction(string InstructionBin, string SetName = "SAP1EMU")
+ //{
+ // string json;
+ // try
+ // {
+ // json = File.ReadAllText(jsonFile);
+ // }
+ // catch (Exception e)
+ // {
+ // throw new Exception($"SAP1EMU: Error reading Instruction Set File: \"{jsonFile}\" ", e);
+ // }
+
+
+ // List sets;
+ // try
+ // {
+ // sets = JsonSerializer.Deserialize>(json);
+ // }
+ // catch (Exception e)
+ // {
+ // throw new Exception($"SAP1EMU: Error reading Instruction Set File: \"{SetName}\", Invalid JSON", e);
+ // }
+
+ // InstructionSet setChoice = sets.Find(x => x.SetName.ToLower().Equals(SetName.ToLower()));
+
+ // if (setChoice == null || string.IsNullOrEmpty(setChoice.SetName))
+ // {
+ // throw new Exception($"SAP1EMU: Instruction Set \"{SetName}\" does not exist");
+ // }
+
+ // string Instruction = setChoice.instructions.Find(x => x.BinCode == InstructionBin).OpCode;
+ // return Instruction;
+ //}
+
}
}
diff --git a/SAP1EMU.Lib/Registers/AReg.cs b/SAP1EMU.Lib/Registers/AReg.cs
index b60ffce3..a501d25d 100644
--- a/SAP1EMU.Lib/Registers/AReg.cs
+++ b/SAP1EMU.Lib/Registers/AReg.cs
@@ -73,5 +73,10 @@ public override string ToString()
{
return this.RegContent;
}
+ public string ToString_Frame_Use()
+ {
+ return (String.IsNullOrEmpty(this.RegContent) ? "00000000" : this.RegContent);
+ }
+
}
}
diff --git a/SAP1EMU.Lib/Registers/BReg.cs b/SAP1EMU.Lib/Registers/BReg.cs
index acddc046..d4065299 100644
--- a/SAP1EMU.Lib/Registers/BReg.cs
+++ b/SAP1EMU.Lib/Registers/BReg.cs
@@ -61,5 +61,10 @@ public override string ToString()
{
return this.RegContent;
}
+
+ public string ToString_Frame_Use()
+ {
+ return (String.IsNullOrEmpty(this.RegContent) ? "00000000" : this.RegContent);
+ }
}
}
diff --git a/SAP1EMU.Lib/Registers/IReg.cs b/SAP1EMU.Lib/Registers/IReg.cs
index 77648257..dc511ce3 100644
--- a/SAP1EMU.Lib/Registers/IReg.cs
+++ b/SAP1EMU.Lib/Registers/IReg.cs
@@ -21,7 +21,7 @@ private void Exec(TicTok tictok)
if (cw[5] == '0' & tictok.ClockState == TicTok.State.Tic)
{
// Send A to the WBus
- Wbus.Instance().Value = RegContent;
+ Wbus.Instance().Value = "0000" + RegContent.Substring(4,4); //Instruction register only outputs the least significant bits to the WBus
}
// Active Low, Pull on Tok
@@ -32,14 +32,14 @@ private void Exec(TicTok tictok)
}
///
- /// For the real ToString, use the ToString_Fram_use() method
+ /// For the real ToString, use the ToString_Frame_use() method
///
- ///
+ ///
public override string ToString()
{
// I dont know this this is the best place to put this substring command, but it is needed
// Currently,
- return RegContent.Substring(0,4);
+ return RegContent.Substring(0, 4);
}
#region IObserver Region
private IDisposable unsubscriber;
@@ -72,14 +72,13 @@ public virtual void Unsubscribe()
#endregion
- public string ToString_Frame_Use()
+ public string ToString_Frame_Use()
{
- return this.RegContent;
+ return (String.IsNullOrEmpty(this.RegContent) ? "0000 0000" : this.RegContent);
}
- }
-
+ }
}
diff --git a/SAP1EMU.Lib/Registers/MReg.cs b/SAP1EMU.Lib/Registers/MReg.cs
index 79f9c8d1..d08d39c8 100644
--- a/SAP1EMU.Lib/Registers/MReg.cs
+++ b/SAP1EMU.Lib/Registers/MReg.cs
@@ -64,11 +64,14 @@ public virtual void Unsubscribe()
}
#endregion
-
-
public override string ToString()
{
- return RegContent;
+ return this.RegContent;
+ }
+
+ public string ToString_Frame_Use()
+ {
+ return (String.IsNullOrEmpty(this.RegContent) ? "0000 0000" : this.RegContent);
}
}
diff --git a/SAP1EMU.Lib/Registers/OReg.cs b/SAP1EMU.Lib/Registers/OReg.cs
index 16e34818..d6fb411c 100644
--- a/SAP1EMU.Lib/Registers/OReg.cs
+++ b/SAP1EMU.Lib/Registers/OReg.cs
@@ -52,11 +52,14 @@ public virtual void Unsubscribe()
unsubscriber.Dispose();
}
#endregion
-
-
public override string ToString()
{
return this.RegContent;
}
+
+ public string ToString_Frame_Use()
+ {
+ return (String.IsNullOrEmpty(this.RegContent) ? "00000000" : this.RegContent);
+ }
}
}
diff --git a/SAP1EMU.WebApp/Controllers/HomeController.cs b/SAP1EMU.WebApp/Controllers/HomeController.cs
deleted file mode 100644
index 1f6036f6..00000000
--- a/SAP1EMU.WebApp/Controllers/HomeController.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Threading.Tasks;
-using ElectronNET.API;
-using ElectronNET.API.Entities;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-using SAP1EMU.WebApp.Models;
-
-namespace SAP1EMU.WebApp.Controllers
-{
- public class HomeController : Controller
- {
- private readonly ILogger _logger;
- public HomeController(ILogger logger)
- {
- _logger = logger;
- }
-
- public IActionResult Index()
- {
-
- if (HybridSupport.IsElectronActive)
- {
- // Must remvoe EL's before adding new ones or else duplicate EL's will be created
- Electron.IpcMain.RemoveAllListeners("open-wiki");
-
- Electron.IpcMain.On("open-wiki", async (args) =>
- {
- await Electron.Shell.OpenExternalAsync("https://github.com/rbaker26/SAP1EMU/wiki");
- });
- }
-
- return View();
- }
- public IActionResult About()
- {
- if (HybridSupport.IsElectronActive)
- {
- // Must remvoe EL's before adding new ones or else duplicate EL's will be created
- Electron.IpcMain.RemoveAllListeners("open-github-profile");
- Electron.IpcMain.RemoveAllListeners("open-ben-eater");
-
- Electron.IpcMain.On("open-github-profile", async (args) =>
- {
- await Electron.Shell.OpenExternalAsync("https://github.com/rbaker26/");
- });
- Electron.IpcMain.On("open-ben-eater", async (args) =>
- {
- await Electron.Shell.OpenExternalAsync("https://eater.net/");
- });
-
- }
- return View();
- }
- public IActionResult Emulator()
- {
- return View();
- }
- public IActionResult Assembler()
- {
- if (HybridSupport.IsElectronActive)
- {
- Electron.IpcMain.RemoveAllListeners("open-from-file-asm");
-
- Electron.IpcMain.On("open-from-file-asm", async (args) =>
- {
- var mainWindow = Electron.WindowManager.BrowserWindows.First();
- var options = new OpenDialogOptions {
- Title = "Open SAP1Emu Assembly Code",
- Filters = new FileFilter[] {
- new FileFilter
- {
- Name = "SAP1Emu Assembly",
- Extensions = new string[] {"s"}
- }
- },
- Properties = new OpenDialogProperty[] {
- OpenDialogProperty.openFile,
- }
- };
- string[] files = await Electron.Dialog.ShowOpenDialogAsync(mainWindow, options);
-
- string code = "";
- if (files.Length != 0)
- {
- if(!string.IsNullOrEmpty(files[0]))
- {
- code = System.IO.File.ReadAllText(files[0]);
- }
- }
-
- Electron.IpcMain.Send(mainWindow, "code-from-file-asm", code);
-
- });
-
-
- Electron.IpcMain.On("save-to-file-asm", async (args) =>
- {
- var mainWindow = Electron.WindowManager.BrowserWindows.First();
- var options = new SaveDialogOptions {
- Title = "Save SAP1Emu Binary Code",
- Filters = new FileFilter[] {
- new FileFilter {
- Name = "SAP1Emu Binary",
- Extensions = new string[] {"b"}
- }
- }
- };
-
- var path = await Electron.Dialog.ShowSaveDialogAsync(mainWindow, options);
-
- if(!string.IsNullOrEmpty(path))
- {
- string contents = (string)args;
- System.IO.File.WriteAllText(path, contents);
- }
-
- });
- }
- return View();
- }
-
- public IActionResult Privacy()
- {
- return View();
- }
-
- [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
- public IActionResult Error()
- {
- return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
- }
- }
-}
diff --git a/SAP1EMU.WebApp/Properties/launchSettings.json b/SAP1EMU.WebApp/Properties/launchSettings.json
deleted file mode 100644
index f316d54d..00000000
--- a/SAP1EMU.WebApp/Properties/launchSettings.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "iisSettings": {
- "windowsAuthentication": false,
- "anonymousAuthentication": true,
- "iisExpress": {
- "applicationUrl": "http://localhost:53979",
- "sslPort": 0
- }
- },
- "profiles": {
- "Electron.NET App": {
- "commandName": "Executable",
- "executablePath": "electronize",
- "commandLineArgs": "start",
- "workingDirectory": "."
- },
- "IIS Express": {
- "commandName": "IISExpress",
- "launchBrowser": true,
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- }
- },
- "SAP1EMU.WebApp": {
- "commandName": "Project",
- "launchBrowser": true,
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- },
- "applicationUrl": "http://localhost:5000"
- }
- }
-}
\ No newline at end of file
diff --git a/SAP1EMU.WebApp/Startup.cs b/SAP1EMU.WebApp/Startup.cs
deleted file mode 100644
index 2b4afa5f..00000000
--- a/SAP1EMU.WebApp/Startup.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using ElectronNET.API;
-
-namespace SAP1EMU.WebApp
-{
- public class Startup
- {
- public Startup(IConfiguration configuration)
- {
- Configuration = configuration;
- }
-
- public IConfiguration Configuration { get; }
-
- // This method gets called by the runtime. Use this method to add services to the container.
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddControllersWithViews();
- }
-
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- else
- {
- app.UseExceptionHandler("/Home/Error");
- }
- app.UseStaticFiles();
-
- app.UseRouting();
-
- app.UseAuthorization();
-
- app.UseEndpoints(endpoints =>
- {
- endpoints.MapControllerRoute(
- name: "default",
- pattern: "{controller=Home}/{action=Index}/{id?}");
- });
- Task.Run(async () => await Electron.WindowManager.CreateWindowAsync());
- }
- }
-}
diff --git a/SAP1EMU.WebApp/Views/Home/About.cshtml b/SAP1EMU.WebApp/Views/Home/About.cshtml
deleted file mode 100644
index 0cba12c5..00000000
--- a/SAP1EMU.WebApp/Views/Home/About.cshtml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-@{
- ViewData["Title"] = "About";
-}
-
-
About
-
-
About the Project
-
- The SAP1Emu Project is an open-source suite of tools designed for students and educators teaching introductory courses in Computer Architecture or Digital Electronics.
- It emulates the SAP1 computer from Digital Computer Electronics by Malvino and Brown.
-
- This Project is designed to assist in the building and programing of a SAP1 Computer.
- Ben Eater has a great series of videos detailing building the SAP1 computer in a breadboard setup.
- This project compliments Ben Eater's videos by allowing the student access to step-by-step debugging of an emulated SAP1 Computer.
-
- Students can compare the output of their SAP1 to the output of the SAP1Emu Emulator.
- This can be done on a step-by-step basis by setting breakpoints and single-stepping the Emulator through their program.
-
- This Project is free and open-souce.
-
- For more info, please see the license on the Project's Github page.
-
- Please also visit Ben Eater's Website to learn more about his project.
-
-
-
-
About the Author
-
Who am I?
-
- My name is Bob Baker and, at the time of writing, I am a Computer Science Student at Saddleback College in Orange County, California.
-
- The majority of my programming focus is on C++ and C# with an emphasis on ASP.NET Core.
- I have worked with other languages like Java, SQL, and Python, but mostly for academic projects.
-
- Checkout my Github Profile for more about me or for my contact info.
-
-
Why this project?
-
- At Saddleback College, I worked as a Teachers Assistant in the Intro to Computer Architecture and Machine Language Lab
- where I assisted students in the building and debugging of SAP1 Computers.
- I found that, while there are a few software solutions to assist students; most were "half-baked", were no longer supported, or did not follow
- the specification outline by Malvino.
-
- For these reasons, I decided to create the SAP1Emu Project.
-
- This app, if downloaded from github.com/rbaker26/SAP1EMU, contains no telemetry or analytics, nor does it collect any user data, system data or network data.
- It does not connect to any server, service, API, database or IP Address.
-
- If you downloaded this app from any other source, including repository forks, I cannot guarantee any of the above.
- Please only download this app from the only approved repository, github.com/rbaker26/SAP1EMU/releases.
-