Giter VIP home page Giter VIP logo

i8080-js's Introduction

Intel 8080 (KR580VM80A) microprocessor in JavaScript

GitHub Action

This project is an implementation of the Intel 8080 microprocessor in JavaScript. This implementation passes successfully all tests for the KR580VM80 clone of Intel 8080 used in the i8080-core project. The emulator is independent from particular hardware. Memory and IO objects are passed as parameters to the constructor.

This implementation doesn't use JavaScript Typed Arrays, and also opcode decoding is implemented in a disassembler way.

It is tested in Chrome, Safari, Firefox, Opera, and a few standalone command line JavaScript interpreters.

This Intel 8080 engine powers the rk86-js emulator of the Radio-86RK microcomputer running at rk86.ru.

Build (Mac)

make

This command will generate a test web page and launch the current web browser (on Mac). This web will run 3 tests: TEST.COM, CPUTEST.COM, 8080PRE.COM.

When you open the JavaScript console in the browser, you should see the following:

Intel 8080/JS test
|||||||||||||||||||||||||||||||||
> RUNNING TEST
*********************************
File "TEST.COM" loaded, size 1793
OUTPUT: MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC VERSION 1.0  (C) 1980
OUTPUT:
OUTPUT: CPU IS OPERATIONAL
Jump to 0000 from 14f
|||||||||||||||||||||||||||||||||
> TEST TEST.COM succeed
|||||||||||||||||||||||||||||||||
> RUNNING TEST
*********************************
File "CPUTEST.COM" loaded, size 19200
OUTPUT:
OUTPUT: DIAGNOSTICS II V1.2 - CPU TEST
OUTPUT: COPYRIGHT (C) 1981 - SUPERSOFT ASSOCIATES
OUTPUT: ABCDEFGHIJKLMNOPQRSTUVWXYZ
OUTPUT: CPU IS 8080/8085
OUTPUT: BEGIN TIMING TEST
OUTPUT: END TIMING TEST
OUTPUT: CPU TESTS OK
OUTPUT:
Jump to 0000 from 3b25
|||||||||||||||||||||||||||||||||
> TEST CPUTEST.COM succeed
|||||||||||||||||||||||||||||||||
> RUNNING TEST
*********************************
File "8080PRE.COM" loaded, size 1024
OUTPUT: 8080 Preliminary tests complete
Jump to 0000 from 32f
|||||||||||||||||||||||||||||||||
> TEST 8080PRE.COM succeed

The main test 8080EX1.COM only runs when you use a standalone JavaScript interpreter because it may take longer, up to a few minutes.

Makefile has targets for run with Node, V8, Deno, Bun, SpiderMonkey (js) and JavaScriptCore (jsc).

Node, V8, Deno and SpiderMonkey on Mac can be installed via brew:

brew insrall node
brew install v8
brew install deno
brew install spidermonkey

bun.sh can be installed manually from https://bun.sh/.

JavaScriptCore (jsc) is usually installed on Mac automatically. The following command help to find the location of the executable:

find / -name jsc -type f 2>/dev/null

It may print something like:

/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc

Then it can be added to PATH.

The following commands run TEST.COM, CPUTEST.COM, 8080PRE.COM tests only similar to make run.

make run-node
make run-v8
make run-deno
make run-bun
make run-javascriptcore
make run-spidermonkey

The following command also runs the main test 8080EX1.COM. It may take a few minutes.

make run-node-ex1
make run-v8-ex1
make run-deno-ex1
make run-bun-ex1
make run-javascriptcore-ex1
make run-spidermonkey-ex1

Benchmark

Time to run all 4 tests (TEST.COM, CPUTEST.COM, 8080PRE.COM, 8080EX1.COM) on MacBook Pro (13-inch, M1, 2020).

Implementation Language JavaScript engine Version Time
i8080-core ANSI-C - - 0:16
i8080-js JavaScript node 21.1.0 1:27
i8080-js JavaScript v8 11.7.439.16 1:30
i8080-js JavaScript deno 1.39.1 1:25
i8080-js JavaScript bun 1.0.14 0:54
i8080-js JavaScript jsc 617.1.17 0:55
i8080-js JavaScript js 91.13.0.3 3:02
i8080-js JavaScript qjs 2023-12-09 52:56

Clearly, node/v8/deno demonstrate similar timing because they are based on V8.

bun and jsc are similar because they are JavaScriptCode.

js (SpiderMonkey) is on its own.

Using the emulator

An example of embedding the emulator can be found in the file i8080_test.js. You need to supply Memory and IO objects to the constructor of the I8080 class.

i8080-js's People

Contributors

begoon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.