https://github.com/setun-90/ESER-32 Skip to content Toggle navigation Sign up * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code + Explore + All features + Documentation + GitHub Skills + Blog * Solutions + For + Enterprise + Teams + Startups + Education + By Solution + CI/CD & Automation + DevOps + DevSecOps + Case Studies + Customer Stories + Resources * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles + Repositories + Topics + Trending + Collections * Pricing [ ] * # In this repository All GitHub | Jump to | * No suggested jump to results * # In this repository All GitHub | Jump to | * # In this user All GitHub | Jump to | * # In this repository All GitHub | Jump to | Sign in Sign up {{ message }} setun-90 / ESER-32 Public * Notifications * Fork 0 * Star 5 Virtual ESER-32 Implementation / Zuse Elektra Emulator License MIT license 5 stars 0 forks Star Notifications * Code * Issues 0 * Pull requests 0 * Actions * Projects 0 * Security * Insights More * Code * Issues * Pull requests * Actions * Projects * Security * Insights setun-90/ESER-32 This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. master Switch branches/tags [ ] Branches Tags Could not load branches Nothing to show {{ refName }} default View all branches Could not load tags Nothing to show {{ refName }} default View all tags Name already in use A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? Cancel Create 1 branch 0 tags Code * Local * Codespaces * Clone HTTPS GitHub CLI [https://github.com/s] Use Git or checkout with SVN using the web URL. [gh repo clone setun-] Work fast with our official CLI. Learn more. * Open with GitHub Desktop * Download ZIP Sign In Required Please sign in to use Codespaces. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching Xcode If nothing happens, download Xcode and try again. Launching Visual Studio Code Your codespace will open once ready. There was a problem preparing your codespace, please try again. Latest commit @setun-90 setun-90 Link for easier navigation to relevant info ... f2ca8ca Mar 21, 2023 Link for easier navigation to relevant info f2ca8ca Git stats * 269 commits Files Permalink Failed to load latest commit information. Type Name Latest commit message Commit time doc include prf src CMakeLists.txt LICENSE README.md View code [ ] Zuse Elektra emulator Status Running Commands Responses Building Systems CMake single-configuration backends (Make/NMake/MinGW, Ninja) CMake multi-configuration backends (MSBuild, Xcode) Visual Studio debugging notes Dependencies Targets Testing Documentation Contributing Further information Background README.md Zuse Elektra emulator The Zuse Elektra is a system family from Zuse Geratebau implementing the ESER/OSER architecture (a fictionalized version of the real-life ESER; see below). Released in 1964, it has diversified into a line of mainframes, superminis, workstations and servers. The English Electric Electra is a licensed clone. This emulator emulates a 32-bit Zuse Elektra. Status * Memory is verified; all specified features work, but some implementation features need to be frozen (such as cache sizing and replacement algorithms). * Channel units are in progress; tests and devices still need to be written. + The Datei device needs a decent ESER test program. * Processing units are in progress; tests need to be written and some aspects need to be frozen, such as cache sizes. * The console needs to be expanded with commands for device control. Running Run it as: ${PATH}/zuse ${Config_File_Path} ${Device_Plugin_Directory} The config file specifies the following: * the amount of RAM in 4K pages; * the units, in the format k t [ p ], where + k is the type of unit (r for processing, d for channel); + t is the interrupt port address, in hex; + p are the parameters for each unit. Channel units in turn take the basename of a device plugin (either a .so on POSIX or a .dll on Windows) as the first parameter of p. If loading proceeds without errors, you will reach the operator's console: >> _ Commands * g: prints the highest physical address. * l $n $a: prints n bytes located at address a. * s $a $w: writes w to address a. * e: lists active interrupt port physical addresses. * an $a: powers on the unit whose interrupt port address is a. * ab $a: powers off the unit whose interrupt port address is a. Responses * : No error. * :: : Notice. * !! : Error. * ?? : Bad command. Building Systems CMake is used to simplify cross-platform building; nevertheless, some platform-specific adaptations are employed to simplify the process itself. There are three main supported build types: Release, RelWithDebInfo or Debug. In particular, don't forget to add appropriate flags for your CPU in the CXXFLAGS environment variable, mainly for alignment. For example, one might use the following on the Intel i7-8565U: $ CXXFLAGS="-falign-functions=64 -falign-jumps=64:40:16 -Wa,-mbranches-within-32B-boundaries" while the following gives the best results on the i7-1195G7: $ CXXFLAGS="-falign-functions=64 -falign-jumps=64" CMake single-configuration backends (Make/NMake/MinGW, Ninja) Create the directory $type corresponding to the build type. $ mkdir $type $ cd $type $ CXXFLAGS="$specific_flags" cmake .. -DCMAKE_BUILD_TYPE=$type $ cmake --build . -j$n CMake multi-configuration backends (MSBuild, Xcode) $ mkdir out $ cd out $ cmake .. $ cmake --build . --config $type Visual Studio debugging notes Visual Studio debugging is experimental. In particular, passing the required arguments to programs properly under debugging is to still be figured out, as they must be launched from the IDE. For Visual Studio with MSBuild: 1. Run the CMake generation (3rd) step; 2. Open out\ESER-32.sln in Visual Studio; 3. Locate the relevant project in the Solution Explorer and right-click on it; 4. Select Properties (bottom) in the drop-down menu; 5. Select Configuration Properties > Debugging in the left pane; 6. Fill in the Command Arguments field. For Visual Studio with Ninja, a CMakePresets.json is being considered. In the mean time: 1. Open the local repository folder in Visual Studio; 2. Wait for Visual Studio to generate the Ninja build files; 3. Select the relevant target as startup item in the Select Startup Item dropdown; 4. Go to Main Menu > Debug > Debug and Launch Configuration for ; 5. Add the following line to each relevant target of launch.vs.json or launch.json: "args": args Where args is as follows: + for durchgangeinheit.exe: ["..\\lib\\prufung.dll"]; + for zuse.exe: ["..\\..\\..\\..\\src\\beispiel.conf", "..\\lib \\"] Dependencies The emulator is written in C++11, but a C++20-compatible compiler is recommended for increased performance. Targets * zuse: the emulator binary; * gerate: the device binaries; * prf/*: the individual tests. + speicher: tests memory, physical and virtual; + durchgangeinheit: tests channels and some essential devices (in progress); + recheneinheit: tests CPUs (in progress). Install targets are being considered. Testing The test order is: 1. prf/speicher; 2. prf/durchgangeinheit ${Test_Device_Plugin}; 3. prf/recheneinheit; 4. all device tests. The test is successful if it returns normally, i.e. doesn't call terminate after throwing an exception or doesn't segfault. The tests can be run under gdb for debugging. Documentation The principal documentation are the PDFs in doc/: * 32.pdf: The ESER-32 specification, in English; * de_32.pdf / ae_32.pdf: The original texts of the ESER-32 specification, in German and Ard English; * 64.pdf: The ESER-64 specification, in English; * de_64.pdf / ae_64.pdf: The original texts of the ESER-64 specification, in German and Ard English. Contributing If you wish to provide a new device, just create a folder named $ {Device_Name} in src/gerat/ with a CMakeLists.txt file containing at least the following: cmake_minimum_required(VERSION 3.18) project(${Device_Name} CXX) add_library(${Device_Name} MODULE ${Sources} ) target_link_libraries(${Device_Name} PRIVATE kern ) compile_options(${Device_Name}) add_dependencies(zuse ${Device_Name}) Further information Visit #ESER on Libera for any questions (9:00-23:00 UTC+1); you will need to be registered to join. Background This emulator is the union of two projects: 1. An example of a paged architecture with capability-based addressing, which I discovered in 2020 and wanted to do as the subject for my PhD, but never found the tutor for; and 2. A Prussian computer system in an alternate history of Earth centered around the formation of Russia in the Bronze Age, the survival of the Roman Empire, an alternate technological ecosystem and a lack of consumerism and liberalism. I do not have any shorter summary. About Virtual ESER-32 Implementation / Zuse Elektra Emulator Resources Readme License MIT license Stars 5 stars Watchers 2 watching Forks 0 forks Releases No releases published Packages 0 No packages published Languages * C++ 92.1% * CMake 5.1% * C 2.8% Footer (c) 2023 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact GitHub * Pricing * API * Training * Blog * About You can't perform that action at this time. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.