Return to Menu

= DUO ADEPT DESCRIPTION =

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:

[opcode] [argument 1?] [argument 2?] [argument 3?]

The opcode is divided into the following sections:

[1 bit: does the command modify RAM?]
[3 bits: destination of operation OR which operation to execute]
[1 bit: does the command accept 2 or 3 arguments?]
[3 bits: which arguments should be substituted by data in RAM address?]

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:

[lines] [6 pre-equalizing pulses] [6 long pulses] [6 post-equalizing pulses]

There are 263 lines total. Only 240 lines are visible; the first 23 lines are blank. Each line contains the following signals:

[horizontal sync pulse] [back porch] [video data] [front porch]

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 = = MACHINE COMMANDS =

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

Return to the Ostracod Pond