# Malfunge

Jump to navigation
Jump to search

Malfunge is an esoteric programming language created by User:ArthroStar11 heavily inspired by Befunge and Malbolge

## Data Structure

The data structure of Malfunge is an array of 5 stacks of 32-bit signed integers each with a max size of 1000

## Playfield

Much like Befunge, Malfunge uses a playfield of fixed size. In the case of Malfunge the playfield is a 256 x 256 table of characters.

## Command List

### Flow Control

*Important note: for brevity this section will mention "h-cond" and "v-cond" these represent behaviors identical to Befunge's "_" and "|" respectively*

- Retroreflectors (<, >, ^, and <)
- if approaching from the concave side (i.e from the left with ">") will invert the direction of the program (i.e. left for ">")
- if approaching from the sloped sides (i.e from above or below with ">") will send the program in the direction of the point (identical to Befunge)
- if approaching from the pointed side (i.e from the right with ">") will perform a v-cond if retroreflector is pointing horizontally, h-cond otherwise

- Paddles (| and _)
- | will invert the direction if approaching from the left or right, performs an h-cond otherwise
- _ will invert the direction if approaching from above or below, performs a v-cond otherwise

- Mirrors (/ and \)
- will reflect the direction 90 degrees represented visually by the mirror (behaves identically to AsciiDots)

- Misc
- ? changes the direction randomly
- o skips the next command in the direction of the pointer

### Math

- numbers (0 to 9)
- pushes the corresponding number to the current stack

- Operators (P, M, T, D, and m)
- pops a then b off of the current stack then pushes b(op)a onto <(current stack + 1) % 5>
- P adds
- M subtracts
- T multiplies
- D divides
- m performs modulo

- pops a then b off of the current stack then pushes b(op)a onto <(current stack + 1) % 5>

### Stack Control

- S shifts to the next stack up
- s shifts to the next stack down

### I/0

* on current stack *

- user input
- , pushes user input as a character
- . pushes user input as an integer

- output
- ; pops value as a character and prints
- : pops value as an integer and prints

### Misc

- " toggles string mode (identical to Befunge)
- I pops a then b off the current stack then pushes 1 if b>a, pushes 0 otherwise
- i pops a off the current stack then pushes 1 if a == 0, pushes 0 otherwise
- d duplicates top value
- @ ends the program

## Sample Programs

**Hello World**

0"!dlrow olleh"o>d;v > < @

**Truth Machine**

.o>dd:v > < @

## Implementation

ArthroStar11's Interpreter (C source)