Calligulan Assembly

From Esolang
Jump to navigation Jump to search

Calligulan Assembly is an esoteric programming language created by User:ArthroStar11 that is written entirely in Roman Numerals

Data Structure and Syntax

  • Commands and arguments in Calligulan Assembly are represented as roman numerals separated by newlines
    • capital letters represent the numerals we all know and love
    • the values of lower case letters are multiplied by 1000
  • data structure
    • hold cell (32-bit unsigned integer)
    • boolean cell (boolean value, duh)
    • variables [array of 30000, 1-index] (32-bit unsigned integer)

Command List

  • I (Label)
    • defines a label for goto statements, 30000 labels may be used (I - xxx) as specified in <line + 1>
  • II (go to)
    • jumps to the corresponding label as specified in <line + 1> if the boolean cell is true
  • III (less than)
    • sets the boolean cell to true if <variable[line + 1]> is less than <variable[line + 2]> else false
  • IV (equal to)
    • sets the boolean cell to true if <variable[line + 1]> is equal to <variable[line + 2]> else false
  • V (not)
    • inverts the boolean cell
  • VI (input)
    • takes console input as an ASCII character if <line + 1> == I
    • takes console input as a number if <line + 1> == II
    • stored in hold cell
  • VII (output)
    • outputs an ASCII character to the console if <line + 1> == I
    • outputs a number to the console if <line + 1> == II
    • printed from hold cell
  • VIII (store)
    • stores the value of the hold cell into the variable specified in <line + 1>
  • IX (retrieve)
    • retrieves value of the variable specified in <line + 1> and stores it in the hold cell
  • X (add)
    • hold cell = <variable[line + 1]> + <variable[line + 2]>
  • XI (subtract)
    • hold cell = <variable[line + 1]> - <variable[line + 2]>
  • XII (constant)
    • stores the number specified by <line + 1> into the hold cell

sample programs

print "HI"

XII
LXXII
VII
I
XII
LXXIII
VII
I

truth machine

VI
II
VIII
I
XII
I
VIII
II
I
I
III
I
II
V
IX
I
VII
II
II
I

print 99 to 0

XII
XCIX
VIII
I
XII
I
VIII
II
I
I
III
I
II
V
IX
I
VII
II
XI
I
II
VIII
I
II
I

Implementation

ArthroStar11's Interpreter (C++ source)