Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stylesuxx/marsjs
mars in javascript
https://github.com/stylesuxx/marsjs
Last synced: about 1 month ago
JSON representation
mars in javascript
- Host: GitHub
- URL: https://github.com/stylesuxx/marsjs
- Owner: stylesuxx
- Created: 2015-04-01T20:22:20.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-04-13T19:31:30.000Z (over 9 years ago)
- Last Synced: 2023-03-13T08:15:45.764Z (over 1 year ago)
- Language: JavaScript
- Size: 266 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# marsjs 0.4.0
Core war **MARS** virtual computer (Memory Array Redcode Simulator) written in JavaScript and easily accessible through the browser implementing the extended ICWS'94 draft.**Live Demo**: http://stylesuxx.github.io/marsjs/
## Features
* debugging (single stepping through the code)
* Parser supports labels, variables and for's
* Available opcodes:
* **ADD** - add A to B, store result in B
* **CMP** - skip next instruction if A is equal to B
* **DIV** - divide B by A, store result in B if A > 0, else terminate
* **DJN** - decrement B, if B is non-zero, transfer execution to A
* **JMN** - transfer execution to A if B is non-zero
* **JMP** - transfer execution to A
* **JMZ** - transfer execution to A if B is zero
* **MOD** - divide B by A, store remainder in B if A > 0, else terminate
* **MOV** - move from A to B
* **MUL** - multiply A by B, store result in B
* **NOP** - no operation
* **SEQ** - alias for cmp
* **SLT** - skip next instruction if A is less than B
* **SNE** - skip next instruction if A is not equal to B
* **SPL** - split off process to A
* **SUB** - subtract A from B, store result in B
* Available opcode modifiers:
* **A** - Instructions read and write A-fields
* **B** - Instructions read and write B-fields
* **AB** - Instructions read the A-field of the A-instruction and the B-field of the B-instruction and write to B-fields
* **BA** - Instructions read the B-field of the A-instruction and the A-field of the B-instruction and write to A-fields
* **F** - Instructions read both A- and B-fields of the A- and B-instruction and write to both A- and B-fields (A to A and B to B)
* **X** - Instructions read both A- and B-fields of the the A- and B-instruction and write to both A- and B-fields exchanging fields (A to B and B to A)
* **I** - Instructions read and write entire instructions
* Available addressing modes:
* **\#** - immediate
* **$** - direct
* **\*** - indirect using A-field
* **@** - indirect using B-field
* **\{** - predecrement indirect using A-field
* **\}** - postincrement indirect using A-field
* **<** - predecrement indirect using B-field
* **\>** - postincrement indirect using B-field## Goals
* be compatible with the extended ICWS'94 draft## TODO's
* implement private variable space, LDP and STP opcodes
* Asserts for coresize, max length, max cycles, max processes, min distance
* Functionality for max processes
* Functionality for min distance
* Let the user set the cores properties## Building & Running
Clone the repository, install all needed modules and build the *app.js* filenpm install
grunt
Point your browser to the **index.html** and have fun.## Development
Run grunt with the *watch* parameter, so that *app.js* is build every time a change is detected in one of the js files.grunt watch
### References:
* http://www.koth.org/info/pmars-redcode-94.txt
* http://www.corewars.org/docs/94spec.html