summaryrefslogtreecommitdiff
path: root/intro.ms
diff options
context:
space:
mode:
Diffstat (limited to 'intro.ms')
-rw-r--r--intro.ms202
1 files changed, 202 insertions, 0 deletions
diff --git a/intro.ms b/intro.ms
new file mode 100644
index 0000000..dd12a16
--- /dev/null
+++ b/intro.ms
@@ -0,0 +1,202 @@
+\" Start of the introduction.
+.NH
+.XN Introduction
+.LP
+Sux
+(Pronounced "sucks")
+is a new, 64-bit CISC instruction-set architecture,
+(ISA)
+that was designed to be very simple,
+and easy to understand.
+Our goals in creating Sux include:
+.IP \[bu] 2
+A 100% totally free
+(as in freedom)
+ISA that both respects your freedoms,
+and does not allow anyone to make proprietary versions of it.
+.IP \[bu] 2
+An ISA that is suitable for implementing in hardware,
+not just emulation,
+or binary translation.
+.IP \[bu] 2
+An ISA that is very simple,
+both at the assembly language level,
+and at the hardware level.
+.IP \[bu] 2
+An ISA that can be implemented with as
+low a transistor count as possible,
+and therefore, very cheap to produce.
+.IP \[bu] 2
+An ISA that can actually be understood by any programmer,
+and is actually possible to write assembly language programs in.
+.IP \[bu] 2
+An ISA that is very memory efficient.
+.IP \[bu] 2
+An ISA that is extremely fast,
+and allows for an insane number of cores.
+.IP \[bu] 2
+An ISA that does not require uneeded bloat,
+just to make it "faster".
+.IP \[bu] 2
+An ISA that a hobbiest can use.
+.IP \[bu] 2
+An ISA that is easy to design a
+computer architecture arround.
+.FS
+We called the Instruction Set,
+Sux because it is meant to be very suckless,
+or suxless, although, that is not
+what Sux is short for.
+.FE
+.FS
+It was also named after a preposed x86 based CPU,
+which would have been called, Sux86less.
+.FE
+.FS
+It was never made because we deemed x86,
+too bloated for are purposes.
+.FE
+.FS
+It is also meant to be a joke on RISC-V,
+in the sense that, like RISC-V,
+Sux is small, and simple,
+but unlike RISC-V,
+Sux is more hobbiest oriented,
+rather than being more academic oriented.
+.FE
+.LP
+The Sux ISA does contain documentation for a reference platform,
+but the main details of the ISA are not specific to the reference platform.
+.\" End of the introduction.
+.
+.bp +1
+.\" Start of the terminolgy.
+.NH 2
+.XN Sux Hardware Platform Terminolgy
+.LP
+A Sux hardware platform can contain one,
+or more Sux compatible cores along with other supporting cores including,
+non-Sux compatible cores, MMUs, device controllers, and much more.
+.LP
+A component is dubbed a \fIcore\fP if it is a turing complete CPU.
+A Sux compatible core might support multiple threads, or diet cores,
+and are used in the same way as a standard core.
+.LP
+A Sux core might have have extra instruction set extensions, or a \fIcoprocessor\fP.
+We use the term \fIcoprocessor\fP to refer to any type of external device that
+offloads some processing from the main core.
+.LP
+The system-level organization of a Sux hardware platform can range from a single-core
+microcontroller, to a 128 core, 1024 thread CPU, or microcontroller, to a multi-CPU
+server node. But also even a system-on-a-chip configuration.
+.LP
+We'll be using both \fI$\fP to denote a hexadecimal
+value, and \fI%\fP to denote a binary value.
+.\" End of the terminolgy.
+.
+.bp +1
+.\" Start of the vectors.
+.NH 2
+.XN Sux Interrupt Vectors
+.LP
+The way execution is started in a Sux core, is very similar to older 8 bit ISAs,
+in that it uses vectors to denote where it should start executing code for some
+type of interrupt.
+.LP
+By default, if there are multiple Sux cores, and each core has multiple threads,
+it will start the first thread, of the first core, and then read one of those
+vectors.
+.LP
+Figure 1 shows the layout of the vectors for a Sux core.
+.TS
+tab(;) allbox;
+lb lb
+l l.
+Address;Name
+T{
+$FF50-$FF57
+.br
+$FF58-$FF5F
+.br
+$FF60-$FF67
+.br
+$FF60-$FF6F
+.br
+$FF70-$FF77
+.br
+$FF70-$FF7F
+.br
+$FF80-$FF87
+T};Thread Vector
+T{
+$FF90-$FF97
+T};\[*m]DCROM Vector
+T{
+$FFA0-FFA7
+T};IRQ Vector
+T{
+$FFC0-$FFC7
+T};Reset Vector
+T{
+$FFE0-FFE7
+T};BRK Vector
+.TE
+Figure 1: The vectors of Sux.
+
+.LP
+All Sux threads can have their execution be suspended by a
+wait-for-interrupt, or \fCWAI\fP instuction.
+.\" End of the vectors
+.
+.bp +1
+.\" Start of the overview.
+.NH 2
+.XN Sux ISA Overview
+.LP
+The Sux ISA is defined as a base integer ISA, which is required
+to be present in any implementation, plus any optional extensions to the base ISA.
+The base ISA is very similar to MOS Technology's 6502 ISA, except that it
+has a 64 bit data bus, 64 bit address bus, supports multiple threads,
+multiple cores, and much more.
+.LP
+Sux has been designed to make using external hardware, very easy to implement.
+Sux has also been designed to make customizing, very easy, by having a
+Microdecode ROM, or \[*m]DCROM for short. The \[*m]DCROM is covered in more detail
+later on.
+.LP
+Beyond the base ISA, we deem it unnecessary to add any extra opcodes, or
+insturctions to it, and as such, will be unchanged, from this point on.
+There will still be other extensions, but those will not be accessed in the
+manner as the base ISA.
+.\" End of the overview.
+.
+.bp +1
+.\" Start of the address space.
+.NH 2
+.XN Memory
+.LP
+A Sux thread has a byte-addressable address space of 2\*[{]64\*[}]
+bytes for all memory accesses. A \fIword\fP of memory is defined as
+16 bits (2 bytes), a \fIdoubleword\fP of memory is defined as
+32 bits (4 bytes), and a \fIquadword\fP of memory is defined as 64 bits (8 bytes).
+The address space is circular, so that the byte at address 2\*[{]64\*[}]-1
+is adjacent to the byte at address zero. Accordingly, memory address computations
+done by the hardware ignore overflow, and instead wrap arround modulo 2\*[{]64\*[}].
+.LP
+The mapping of hardware resources, is determined by the
+architecture of the hardware. These addresses may either
+(a) be open bus, (b) contain main memory, (c) be vacant,
+or (d) contain one, or more I/O devices. Reading, and writing
+to I/O devices may have visible side effects, but accessing
+main memory cannot. While you could have an architecture that
+only accesses I/O, it is usually expected that some of the
+address space will be main memory.
+.LP
+When a Sux platform has multiple threads, unless an MMU is used,
+the entire address space must be shared with all threads.
+.LP
+Executing each Sux machine instruction, most of the time
+requires one memory access, but sometimes it might require
+two memory accesses. These instructions are divided into
+multiple addressing modes.
+.\" End of the address space.