2021-01-21 13:40:28 +01:00
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml"><head>
|
|
|
|
<title>.</title>
|
|
|
|
<style type="text/css">
|
|
|
|
|
|
|
|
* { color: #000; background: #fff; max-width: 700px; }
|
|
|
|
tt, pre { background: #dedede; color: #111; font-family: monospace;
|
|
|
|
white-space: pre; display: block; width: 100%; }
|
|
|
|
.indentedcode { margin-left: 2em; margin-right: 2em; }
|
|
|
|
.codeblock {
|
|
|
|
background: #dedede; color: #111; font-family: monospace;
|
|
|
|
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
|
|
|
padding: 7px;
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
|
|
|
|
.indentedlist { margin-left: 2em; color: #000; }
|
|
|
|
|
|
|
|
span { white-space: pre; }
|
|
|
|
.text { color: #000; white-space: pre; background: #dedede; }
|
|
|
|
.colon { color: #000; background: #dedede; }
|
|
|
|
.note { color: #000; background: #dedede; }
|
|
|
|
.str { color: #000; text-decoration: underline; background: #dedede; }
|
|
|
|
.num { color: #000; background: #dedede; font-weight: bold; font-style: italic; }
|
|
|
|
.fnum { color: #000; font-weight: bold; background: #dedede; }
|
|
|
|
.ptr { color: #000; font-weight: bold; background: #dedede; }
|
|
|
|
.fetch { color: #000; font-style: italic; background: #dedede; }
|
|
|
|
.store { color: #000; font-style: italic; background: #dedede; }
|
|
|
|
.char { color: #000; background: #dedede; }
|
|
|
|
.inst { color: #000; background: #dedede; }
|
|
|
|
.defer { color: #000; background: #dedede; }
|
|
|
|
.imm { color: #000; font-weight: bold; background: #dedede; }
|
|
|
|
.prim { color: #000; font-weight: bolder; background: #dedede; }
|
|
|
|
|
|
|
|
.tt { white-space: pre; font-family: monospace; background: #dedede; }
|
|
|
|
|
|
|
|
.h1, .h2, .h3, .h4 { white-space: normal; }
|
|
|
|
.h1 { font-size: 125%; }
|
|
|
|
.h2 { font-size: 120%; }
|
|
|
|
.h3 { font-size: 115%; }
|
|
|
|
.h4 { font-size: 110%; }
|
|
|
|
.hr { display: block; height: 2px; background: #000000; }
|
|
|
|
</style>
|
|
|
|
</head><body>
|
2022-06-03 12:41:52 +02:00
|
|
|
<p><br/><br/>
|
2021-05-17 19:04:42 +02:00
|
|
|
The actual Retro language is stored as a memory image for Nga.
|
2021-01-21 13:40:28 +01:00
|
|
|
<br/><br/>
|
|
|
|
<span class="h2">Format</span>
|
|
|
|
<br/><br/>
|
|
|
|
The image file is a flat, linear sequence of signed 32-bit
|
|
|
|
values. Each value is stored in little endian format. The
|
|
|
|
size is not fixed. An interface should check when loading to
|
|
|
|
ensure that the physical image is not larger than the emulated
|
|
|
|
memory.
|
|
|
|
<br/><br/>
|
|
|
|
<span class="h2">Header</span>
|
|
|
|
<br/><br/>
|
|
|
|
The image will start with two cells. The first is a liju....
|
|
|
|
instruction, the second is the target address for the jump.
|
|
|
|
This serves to skip over the rest of the data and reach the
|
|
|
|
actual entry point.
|
|
|
|
<br/><br/>
|
|
|
|
This is followed by a pointer to the most recent dictionary
|
|
|
|
header, a pointer to the next free address in memory, and
|
2021-05-17 19:04:42 +02:00
|
|
|
then the Retro version number.
|
2021-01-21 13:40:28 +01:00
|
|
|
<br/><br/>
|
|
|
|
<tt class='indentedcode'>| Offset | Contains |</tt>
|
|
|
|
<tt class='indentedcode'>| ------ | --------------------------- |</tt>
|
|
|
|
<tt class='indentedcode'>| 0 | lit call nop nop |</tt>
|
|
|
|
<tt class='indentedcode'>| 1 | Pointer to main entry point |</tt>
|
|
|
|
<tt class='indentedcode'>| 2 | Dictionary |</tt>
|
|
|
|
<tt class='indentedcode'>| 3 | Heap |</tt>
|
2021-05-17 19:04:42 +02:00
|
|
|
<tt class='indentedcode'>| 4 | Retro version |</tt>
|
2021-01-21 13:40:28 +01:00
|
|
|
<br/><br/>
|
|
|
|
The actual code starts after this header.
|
|
|
|
<br/><br/>
|
|
|
|
The version number is the year and month. As an example,
|
|
|
|
the 12.2019.6 release will have a version number of
|
|
|
|
<span class="tt">201906</span>.
|
|
|
|
<br/><br/>
|
|
|
|
<span class="h2">Layout</span>
|
|
|
|
<br/><br/>
|
|
|
|
Assuming an Nga built with 524287 cells of memory:
|
|
|
|
<br/><br/>
|
|
|
|
<tt class='indentedcode'>| RANGE | CONTAINS |</tt>
|
|
|
|
<tt class='indentedcode'>| --------------- | ---------------------------- |</tt>
|
2021-05-17 19:04:42 +02:00
|
|
|
<tt class='indentedcode'>| 0 - 1024 | Retro Core kernel |</tt>
|
2021-01-21 13:40:28 +01:00
|
|
|
<tt class='indentedcode'>| 1025 - 1535 | token input buffer |</tt>
|
|
|
|
<tt class='indentedcode'>| 1536 + | start of heap space |</tt>
|
|
|
|
<tt class='indentedcode'>| ............... | free memory for your use |</tt>
|
|
|
|
<tt class='indentedcode'>| 506879 | buffer for string evaluate |</tt>
|
|
|
|
<tt class='indentedcode'>| 507904 | temporary strings (32 * 512) |</tt>
|
|
|
|
<tt class='indentedcode'>| 524287 | end of memory |</tt>
|
|
|
|
<br/><br/>
|
|
|
|
The buffers at the end of memory will resize when specific
|
|
|
|
variables related to them are altered.
|
|
|
|
</p>
|
|
|
|
</body></html>
|