The DUO Adept is an 8-bit TTL machine. Its input is a keyboard. The output is a black and white monitor and a speaker. An infancy front panel is used to enter initial software into the machine.
Machine code and all long-term data are stored in 64 KB of main memory. Commands follow this format:
The opcode is divided into the following sections:
There are only 256 bytes of RAM. When one of the last three bits in the opcode is set to one, the respective argument represents an 8 bit RAM address instead of an 8 bit value. The processor will find the data at that address in RAM and use it instead as the value of the argument.
About 6 KB VRAM is constantly dumped onto the black and white monitor. The resolution is 208 pixels by 240 pixels. The composite video signal consists of 4 "blocks" of signals:
There are 263 lines total. Only 240 lines are visible; the first 23 lines are blank. Each line contains the following signals:
Video data contains 208 pixels in each line. Signal times are below:
3 registers store musical notes to be generated: 2 square wave channels and 1 noise channel.
A 2 byte shift register accepts input from a PS/2 keyboard.
A 2 byte timer constantly counts up at a rate of 64 beats per second. The timer is used for creating regular program pacing and music tempo.
= MEMORY SPACES =The group of commands below do not modify RAM, so their first opcode bit is 1.
10000XXX: STM [number] [number] (set timer)
10001XXX: SMM [address] [address] [data] (set main memory)
10010XXX: SNT [channel] [note] (set note)
10011XXX: CGO [address] [address] [boolean value] (conditional goto; goto address if value is 0)
10101XXX: SVM [address] [address] [data] (set VRAM)
The following commands do modify RAM; hence their first opcode bit is 0. Note that the last argument is always a RAM destination address.
00000XXX: GVL [data] [destination] (get value)
00001XXX: GMM [address] [address] [destination] (get main memory)
00010XXX: GTM [which byte] [destination] (get timer)
00011XXX: GVM [address] [address] [destination] (get VRAM)
00100XXX: GIN [which byte] [destination] (get input)
00101XXX: ADD [number] [number] [destination] (add)
00111XXX: EQU [number] [number] [destination] (equal)
01001XXX: GRE [number] [number] [destination] (greater than)
01011XXX: BGT [byte] [which bit] [destination] (bit get)
01101XXX: BON [byte] [which bit] [destination] (bit on)
01111XXX: NOR [byte] [byte] [destination] (nor)
Return to Menu