Skip to content

Instantly share code, notes, and snippets.

@zarutian
Created August 13, 2013 02:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zarutian/ce73740cc4591d4c6724 to your computer and use it in GitHub Desktop.
Save zarutian/ce73740cc4591d4c6724 to your computer and use it in GitHub Desktop.
Some prelimnary drafts of DCPU devices for 0x10c
Some DCPU devices specs
Note! These are only preliminary drafts! Subject to change without any notice!
My manifacturer ID is 0x5A52544E (ZRTN in ascii, which is just a shortening of Zarutian)
Please give me some ideas how I could backronym it to something in-game backstory plausable.
And I have many more in my draft file.
-Zarutian
Copyleft: Zarutian
License: Creative Commons BY-SA and use at your own risk. No warranty implied nor explicted.
E-mail: zarutian@gmail.com
OpenPGP fingerprint: C8AA DDDB A46B 9220 AEFD 1CF9 C054 B038 9607 B2EE
================================================================================
Super Capacitor Energy Storage
MANI-ID: 0x5A52544E
HW-ID: 0x53434553 (SCES in ascii)
version: 0x0001
when interupted in treats DCPU register A contents as command code, whose are:
0x0001 B C X Y -- returns status of the device
B is kilo Watt hours stored upper word
C is kilo Watt hours stored lower word
X is kilo Watts being fed into the device
Y is kilo Watts being drained from the device
0x0002 B C X -- interupt DCPU with message B when C,X kilo Watt hours have been stored/drained
0x0003 B -- allow/disallow the device being fed (0x0000=disallow/0xFFFF=allow)
0x0004 B -- allow/disallow the device being drained (0x0000=disallow/0xFFFF=allow)
Warning! Explodes violently if overloaded!
================================================================================
Relieable Power Routing Box
MANI-ID: 0x5A52544E
HW-ID: 0x52505242 (RPRB)
version: 0x0001
This device has 16 power connectors (four on each side besides top and bottom)
which can be hooked up to any device requiring or providing power, or other RPRBses.
Internally it is made up of 4x4 configurable connection cells that connect the connectors
on the edges to each other controled by the configurations of the cells.
Each port has its manual on/off switch.
On the top of the device is a 4x4 multicolour LED indicator display. One LED corrisponding to
a cell. On the right side of that are six buttons.
when interupted in treats DCPU register A contents as command code, whose are:
0x0001 B C X -- get the current power flowing through conductor B
C is the upper word of the the watts number
X is the lower word of the the watts number
The watts number is signed (2's compl). Positive means the connector is pushing
power into the box while negative means that the connector is pull power out of the box.
0x0002 B C X Y Z -- highmark interupt set&enabled (current power of conductor B is higher than C..X )
0x0003 B C X Y Z -- lowmark interupt set&enabled (current power of conductor B is lower than C..X )
If a mark is crossed then cell Y is reconfigured (see below) and DCPU interupted
with interupt message Z if Z is not 0x0000.
0x0004 B C X Y Z -- get highmark interupt info
0x0005 B C X Y Z -- get lowmark interupt info
0x0006 B -- get configuration of cell B
0x0007 B -- set configuration of cell B
B is both the configuration and cell identifier and is as follows:
6 (Right most bit is bit 0, counts towards left)
| Bit 0 corrisponds to 0 on the diagram to the left
+-0-+-1-+ Bit 1 - || - || - || 1 || - || - || - || - || -
| 2 | Bit 2 - || - || - || 2 || - || - || - || - || -
-9-+-3-/---+-7- Bit 3 - || - || - || 3 || - || - || - || - || -
| | | Bit 4 - || - || - || 4 || - || - || - || - || -
+-4-+-5-+ Bit 5 - || - || - || 5 || - || - || - || - || -
| Bit 6 - || - || - || 6 || - || - || - || - || -
8 Bit 7 - || - || - || 7 || - || - || - || - || -
Bit 8 - || - || - || 8 || - || - || - || - || -
Bit 9 - || - || - || 9 || - || - || - || - || -
Bits B+A is the LED indicator code
00 LED turned off
01 LED is red
10 LED is green
11 LED is blue
Bits F+E+D+C selects the cell in question
0x0008 B C X Y Z I -- get buttons configurations
0x0009 B C X Y Z I -- set buttons configurations
B is the configuration for the topmost one
C is the configuration for next in line
X is the configuration of the next in line
Y is the configuration of the next in line
Z is the configuration of the second to last one
I is the configuraiton of the last one
When a button is pressed then its configuration replaces configuration of that cell.
Conductors:
0x0000 - 1st external connector on northface
0x0001 - 2nd
0x0002 - 3rd
0x0003 - 4th
0x0004 - 1st external connector on eastface
0x0005 - 2nd
0x0006 - 3rd
0x0007 - 4th
0x0008 - 1st external connector on southface
0x0009 - 2nd
0x000A - 3rd
0x000B - 4th
0x000C - 1st external connector on westface
0x000D - 2nd
0x000E - 3rd
0x000F - 4th
================================================================================
Cheap Ion Drive Unit
MANI-ID: 0x5A52544E
HW-ID: 0x67494455 (CIDU in ascii)
version: 0x0001
Has one extra memory access port (see SVMM and PEMM)
when interupted in treats DCPU register A contents as command code, whose are:
0x0001 B C X -- change thrusts and angles of drive
0x0002 B C X -- get current thrusts and angles of drive
B is engine thrust in Newton meters. Unsigned
C is left/right rotation of nozzle (0 - 180 degrees in fixed point) Unsigned
X is up/down rotation of nozzle (0 - 180 degrees in fixed point) Unsigned
0x0003 B C X Y -- start thrust sequence
B is address in memory where start of thrust sequence is found
C is memory select (0x0000 = DCPU memory, 0x0001 = extra memory access port)
X is length of thrust sequnce in thrust change commands (4 words)
Y is DCPU interupt message when thrust sequence is done
thrust change command:
1st word: engine thrust in Newton meters, Unsigned.
2nd word: is left/rotation of nozzle (0 - 180 degrees in fixed point) Unsigned
3rd word: is up/down rotation of nozzle (0 - 180 degrees in fixed point) Unsigned
4th word: delay in millisec 'til next thrust change command
Do not overload! (That is, do not feed too much power to it.)
================================================================================
ForceShield Reinforcing Generator
MANI-ID: 0x5A52544E
HW-ID: 0x46535247 (FSRG in ascii)
Version: 0x0001
This device when placed against a bulkhead reinforces aforesaid bulkhead with energy.
That energy is drawn from the power input of the device, which can be hooked to the ships
generator(s), via RPRBs or direct power line linkage.
It has an extra memory access slot meant for SVMM or PEMM
When interupted it treats DCPU register A contents as command code, whose are:
0x0001 B C -- get current reinforcement frequency
0x0002 B C -- set current reinforcement frequency
0x0003 B C -- get current reinforcement amplitude
0x0004 B C -- set current reinforcement applitude
0x0005 B C -- get current reinforcement phase
0x0006 B C -- set current reinforcement phase
B is the upper word
C is the lower word
0x0007 B C X Y -- set reinforcement frequency pattern, upper word
0x0008 B C X Y -- set reinforcement frequency pattern, lower word
0x0009 B C X Y -- set reinforcement amplitude pattern, upper word
0x000A B C X Y -- set reinforcement amplitude pattern, lower word
0x000B B C X Y -- set reinforcement phase pattern, upper word
0x000C B C X Y -- set reinforcement pahse pattern, lower word
B is memory slot select (0x0000=DCPU mem, 0x0001=Extra mem slot)
C is the starting address of the pattern in that memory
X is the length of the pattern in words
Y is the DCPU interupt message when one scan through of the pattern is done
Uses the DCPU cpu clock/ticker/pulser to advance the patterns onwards
================================================================================
Distance Radar/Lidar Sensor
MANI-ID: 0x5A52544E
HW-ID: 0x44524C53 (DRLS in ascii)
version: 0x0001
has two extra memory access ports A and B
when interupted in treats DCPU register A contents as command code, whose are:
0x0001 Reset device
0x0002 B C X Y - configure scan pattern
B is starting address in memory
C is memory select (0x0000=DCPU memory, 0x0001=extra memory access port A, 0x0002=port B)
X is length of scan pattern in scan commands (4 words)
Y is the interupt DCPU message when one scan pattern is done
0x0003 B C X Y - configure scan data destination
B is starting address in memory
C is memory select (0x0000=DCPU memory, 0x0001=extra memory access port A, 0x0002=port B)
X is length of scan data in scan samples (4 words)
Y is the interupt DCPU message when one scan data block is done
0x0004 B start/stop scanning (start B=0xFFFF, stop B=0x0000)
scan command/sample:
1st word: rotation along mount
2nd word: azimuth
3rd word: pulse strength (transmit when command/return when sample)
4th word: delay in millisec
when scanning both scan pattern and scan data are repeated until scanning is turned off
================================================================================
Simple Inertia Guidance Sensor
MANI-ID: 0x5A52544E
HW-ID: 0x53494753 (SIGS in ascii)
version: 0x0001
has one extra memory access port meant for a SVMM or PEMM
when interupted in treats DCPU register A contents as command code, whose are:
0x0001 Reset device
0x0002 B C X Y Z I J read position and orientation
B is the signed distance along x axis in meters since last reset
C is the signed distance along y axis in meters since last reset
X is the signed distance along z axis in meters since last reset
Y is the signed x part of the orientation quaternion since last reset
Z is the signed y part of the orientation quaternion since last reset
I is the signed z part of the orientation quaternion since last reset
J is the w part of the orientation quaternion since last reset
0x0003 B C X Y Z I J read velocity and rotation
B is the signed speed along x axis in meters per second since last reset
C is the signed speed along y axis in meters per second since last reset
X is the signed speed along z axis in meters per second since last reset
Y is the signed x part of the rotation quaternion since last reset
Z is the signed y part of the rotation quaternion since last reset
I is the signed z part of the rotation quaternion since last reset
J is the w part of the rotation quaternion since last reset
the rotation quaternion is added to the orientation every second to get current attitude
0x0004 B C X Y Z configure streaming & interupt
B is DCPU interupt message used when one buffer is done (0x0000 disable streaming and interupt)
C is memory select (0x0000=DCPU memory or 0x0001=extra memory access port)
X is start address in attached memory
Y is buffer length in samples (each sample takes 16 words)
Z is sample rate (samples per minute)
Samples are of form:
1st word: the signed distance along x axis in meters since last reset
2nd word: the signed distance along y axis in meters since last reset
3rd word: the signed distance along z axis in meters since last reset
4th word: the signed speed along x axis in meters per second since last reset
5th word: the signed speed along y axis in meters per second since last reset
6th word: the signed speed along z axis in meters per second since last reset
7th word: the signed x part of the orientation quaternion since last reset
8th word: the signed y part of the orientation quaternion since last reset
9th word: the signed z part of the orientation quaternion since last reset
Ath word: the w part of the orientation quaternion since last reset
Bth word: the signed x part of the rotation quaternion since last reset
Cth word: the signed y part of the rotation quaternion since last reset
Dth word: the signed z part of the rotation quaternion since last reset
Eth word: the w part of the rotation quaternion since last reset
Fth word: the nr sample since last reset, upper word
10th word: the nr sample since last reset, lower word
================================================================================
Simple Volatile Memory Module
MANI-ID: 0x5A52544E
HW-ID: 0x53564D4D (SVMM in ascii)
version: 0x0002
The device is extra 64K words of memory for the DCPU.
It has four memory ports, one attaches to the DCPU the others three can be connected to
the extra memory port of other devices.
When interupted it treats the contents of DCPU register A as a command code, whose are:
0x0001 B C -- Read the word at address B in the device memory into C
0x0002 B C -- Write word C at address B into the device memory
0x0003 B C X Y -- Bulk transfer, asynchronus, device to DCPU
0x0004 B C X Y -- Bulk transfer, asynchronus, DCPU to device
B is starting address in the device memory
C is starting address in the DCPU memory
X is the number of words being transfered
Y is the interupt message when done
It takes X many cycles to move X many words, meanwhile the DCPU runs at full speed.
0x0005 B C X -- Bulk transfer, synchronus, device to DCPU
0x0006 B C X -- Bulk transfer, synchronus, DCPU to device
B is starting address in the device memory
C is starting address in the DCPU memory
X is the number of words being transfered
Halts the DCPU for X many cycles while the transfer takes place
Only one bulk transfer per device can be in progress at any given time.
================================================================================
Persistant Electronic Memory Module
MANI-ID: 0x5A52544E
HW-ID: 0x50454D4D (PEMM in ascii)
version: 0x0003
When the module recieves interupts from the DCPU it is attached to it expects
an operation code in the DCPU's register A.
The device, like the SVMM has three extra memory access ports compatible with devices that are
compatible with SVMM memory access ports.
The device keeps it memory contents even unpowered.
The device has 64K words of capacity.
Operation code
0x0001 B C - Read the contents of PEMM at address given in register B into register C
0x0002 B C - Write the contents of register into PEMM at address given in register B
0x0003 B C X Y -- Bulk transfer, device to DCPU
0x0004 B C X Y -- Bulk transfer, DCPU to device
B is starting address in the device memory
C is starting address in the DCPU memory
X is the number of words being transfered
Y is the interupt message when done
it takes X many cycles to move X many words, meanwhile the DCPU runs at full speed
0x0005 B C X -- Bulk transfer, synchronus, device to DCPU
0x0006 B C Y -- Bulk transfer, synchronus, DCPU to device
B is starting address in the device memory
C is starting address in the DCPU memory
X is the number of words being transfered
Halts the DCPU for X many cycles while the transfer takes place
0x0007 B -- Enable write protection
B is write protection key address in the modules memory
All writes and transfers to are ignored though the transfers still interupt the DCPU
when done.
0x0008 B -- Disable write protection
B is the key from above
only one bulk transfer per device can be in progress at any given time.
================================================================================
Firmware loader (Compatible)
MANI-ID: 0x00000000
HW-ID: 0x46574C44 (FWLD in ascii)
version: 0x0001
This device is a small externally reprogrammble flash memory module intended to
keep boot up firmware.
when interupted, it treats DCPU register A contents as command code which is:
0x0000 B -- copy firmware contents to DCPU memory starting at address B
halts the DCPU for 512 cycles meanwhile.
These are rather cheap an plentiful (each DCPU should come with at least 5 spare)
When the DCPU is powered on it HWI the device at 0x0000 before it does anything else.
(See SirCmpwn's firmware proposal)
================================================================================
Firmware Programmer (Compatible)
MANI-ID: 0x00000000
HW-ID: 0x46575047 (FWPG in ascii)
version: 0x0001
This device takes an firmware loader module in its programmer slot.
when interupted, it treats DCPU register A contents as command code, whose are:
0x0000 B -- copy the firmware loader module contents into DCPU memory at address B
halts the DCPU for 512 cycles meanwhile.
0x0001 B C -- read word at address B in firmware loader module memory into C
0x0002 B C -- write word C to address B in firmware loader module memory
Though it is possible to use this device as a pass through (if the device is at 0x0000)
to the FWLD it contains when booting the DCPU, it is not really recommended.
================================================================================
More to come!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment