A simple line editor
Go to file
CrazyEttin e734757ee4 Version 1.1 2022-10-15 14:05:37 +03:00
.gitignore Initial commit 2022-08-12 22:40:46 +03:00
gidubba.asm tweak the code slightly 2022-10-14 20:19:00 +03:00
license.md Reword the readme slightly in Gidubba and convert the readme, license, and source code t a Gidubba-friendly format 2022-08-19 01:25:22 +03:00
readme.md Version 1.1 2022-10-15 14:05:37 +03:00


Gidubba v1.1

Gidubba (Sumerian for 'stylus') v1.1 is a simple line editor for the Thingamajig v2.x computer architecture. Its git repository can be found at https://ahti.space/git/crazyettin/Gidubba and that of Thingamajig at https://ahti.space/git/crazyettin/Thingamajig.

System Requirements

Gidubba requires at least 4 KiB of RAM. It uses an ASCII-compatible terminal with local echo at address FFFF, and optionally a character printer at address FFFE and a paper tape reader and punch or a cassette deck at FFFD. Do not be afraid to modify the code yourself if your setup requires it! (And if you do, apologies for the spaghetti.)


Texts are terminated by an end-of-file (^Z) and lines within them by a newline of a carriage return (^M) followed by a line feed (^J) (CRLF). Gidubba is able to read texts without an end-of-file or with different newline formatting (CR, LF, or LFCR) and convert them to its native format. The characters null (^@) and FF are reserved for indicating tape leaders and trailers and an empty tape reader respectively and cannot occur within a text. Note that the input buffer can store at most 256 characters, including the newline.


The commands are individual letters that can be followed by one or two arguments separated by a comma, all case-insensitive. The first argument is a line number between 0 and FFFF and the second a range of lines between 0 and FF. To append lines, insert them or set the mark to any line number after the text or to the shortcut hash (#); in other commands line numbers or parts of a range after the text are ignored and a hash is not recognised as a valid argument. Instead of a predetermined range a prompt to insert the next line appears automatically after the previous one has been committed.

Commands with a single argument:

  • I: Insert lines
  • M: Set the mark

Commands with two arguments:

  • C: Copy to the mark
  • D: Delete lines
  • L: List lines

Commands with no arguments:

  • P: Print
  • R: Read from the tape reader or cassette deck
  • W: Write to the tape punch or cassette deck

A delete (^?) discards the preceding character and outputs an underscore to the terminal. An escape (^[) discards the contents of the current command or line and outputs a backslash and a newline to the terminal. A carriage return (^M) or a line feed (^J) inputs a newline and commits the current command or line. An end-of-file (^Z) discards the current command and halts the computer or discards the current line and returns to the command prompt. At the end of the input buffer any input other than those described in this paragraph is ignored and an underscore is output to the terminal.

There are two kinds of error messages: a question mark (?) for an erroneous command and an exclamation mark (!) for lack of RAM.



  • Upgraded for Thingamajig v2.x architecture
  • Disallowed the use of characters null (^@) and FF in texts
  • Added the ability to read and convert non-native newline formats


  • Initial release