Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 50 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,69 @@
# Fungera: A two-dimensional evolution simulator

### Organism structure

- Main memory block
- Child memory block (optional)
- Instruction pointer
- Delta (direction)
- 4 general purpose registers
- A stack of 8 values

### Instruction set

| Symbol | Max ops | Description | Type |
|--------|---------|-------------------------------------------------|-------------|
| `.` | 0 | Template constructor | Template |
| `:` | 0 | Template constructor | Template |
| `a` | 0 | Register modifier | Register |
| `b` | 0 | Register modifier | Register |
| `c` | 0 | Register modifier | Register |
| `d` | 0 | Register modifier | Register |
| `^` | 0 | Direction modifier (up) | Direction |
| `v` | 0 | Direction modifier (down) | Direction |
| `>` | 0 | Direction modifier (right) | Direction |
| `<` | 0 | Direction modifier (left) | Direction |
| `x` | 0 | Operation modifier | Operation |
| `y` | 0 | Operation modifier | Operation |
| `&` | 2+ | Find template, put its address in register | Matching |
| `?` | 4 | If not zero | Conditional |
| `0` | 1 | Put [0, 0] vector into the register | Arithmetic |
| `1` | 1 | Put [1, 1] vector into the register | Arithmetic |
| `-` | 2 | Decrement value in register | Arithmetic |
| `+` | 2 | Increment value in register | Arithmetic |
| `~` | 3 | Subtract registers and store result in register | Arithmetic |
| `W` | 2 | Write instruction from register to address | Replication |
| `L` | 2 | Load instruction from address to register | Replication |
| `@` | 2 | Allocate child memory of size | Replication |
| `$` | 0 | Split child organism | Replication |
| `S` | 1 | Push value from register into the stack | Stack |
| `P` | 1 | Pop value of register into the stack | Stack |
| ------ | ------- | ----------------------------------------------- | ----------- |
| `.` | 0 | Template constructor | Template |
| `:` | 0 | Template constructor | Template |
| `a` | 0 | Register modifier | Register |
| `b` | 0 | Register modifier | Register |
| `c` | 0 | Register modifier | Register |
| `d` | 0 | Register modifier | Register |
| `^` | 0 | Direction modifier (up) | Direction |
| `v` | 0 | Direction modifier (down) | Direction |
| `>` | 0 | Direction modifier (right) | Direction |
| `<` | 0 | Direction modifier (left) | Direction |
| `x` | 0 | Operation modifier | Operation |
| `y` | 0 | Operation modifier | Operation |
| `&` | 2+ | Find template, put its address in register | Matching |
| `?` | 4 | If not zero | Conditional |
| `0` | 1 | Put [0, 0] vector into the register | Arithmetic |
| `1` | 1 | Put [1, 1] vector into the register | Arithmetic |
| `-` | 2 | Decrement value in register | Arithmetic |
| `+` | 2 | Increment value in register | Arithmetic |
| `~` | 3 | Subtract registers and store result in register | Arithmetic |
| `W` | 2 | Write instruction from register to address | Replication |
| `L` | 2 | Load instruction from address to register | Replication |
| `@` | 2 | Allocate child memory of size | Replication |
| `$` | 0 | Split child organism | Replication |
| `S` | 1 | Push value from register into the stack | Stack |
| `P` | 1 | Pop value of register into the stack | Stack |

### Running Fungera
Python 3.7 is required to run Fungera. Once it is installed, running Fungera is simple.

Python 3.7 is required to run Fungera. Once it is installed, running Fungera is simple.

```
python -m pip install -r requirements.txt
python fungera.py --name "Simulation 1"
```

### Install issues

In case of issues with "curses" library under windows 10, please use [this](https://stackoverflow.com/questions/32417379/what-is-needed-for-curses-in-python-3-4-on-windows7) approach. And than, install all dependencies from "requirements.txt" file manually (except "curses").
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In case of issues with "curses" library under windows 10, please use [this](https://stackoverflow.com/questions/32417379/what-is-needed-for-curses-in-python-3-4-on-windows7) approach. And than, install all dependencies from "requirements.txt" file manually (except "curses").
In case of issues with `curses` library under windows 10, please use [this](https://stackoverflow.com/questions/32417379/what-is-needed-for-curses-in-python-3-4-on-windows7) approach. And then, install all dependencies from "requirements.txt" file manually (except `curses`).


### TUI controls
| Key | Action |
|--------------------|-----------------------------------------------------|
| <kbd>space</kbd> | Start/pause simulation |

| Key | Action |
| ------------------ | -------------------------------- |
| <kbd>space</kbd> | Start/pause simulation |
| <kbd>c</kbd> | Advance 1 cycle (only if paused) |
| <kbd>&#8593;</kbd> | Move memory view up |
| <kbd>&#8595;</kbd> | Move memory view down |
| <kbd>&#8592;</kbd> | Move memory view left |
| <kbd>&#8594;</kbd> | Move memory view right |
| <kbd>d</kbd> | Select next organism |
| <kbd>a</kbd> | Select previous organism |
| <kbd>p</kbd> | Save simulation |
| <kbd>l</kbd> | Load last saved simulation |
| <kbd>m</kbd> | Toogle minimal mode |
| <kbd>&#8593;</kbd> | Move memory view up |
| <kbd>&#8595;</kbd> | Move memory view down |
| <kbd>&#8592;</kbd> | Move memory view left |
| <kbd>&#8594;</kbd> | Move memory view right |
| <kbd>d</kbd> | Select next organism |
| <kbd>a</kbd> | Select previous organism |
| <kbd>p</kbd> | Save simulation |
| <kbd>l</kbd> | Load last saved simulation |
| <kbd>m</kbd> | Toogle minimal mode |