Files
2026-09-19 20:21:47 +02:00

68 lines
2.5 KiB
Go

package sim
// Peripheral port numbers. Values are int32; positions are kilometres,
// velocities metres/second, angles milliradians, masses kilograms. Axes are
// right-handed with Z perpendicular to the ecliptic; azimuth is measured from
// +X towards +Y and elevation (pitch) up from the XY plane towards +Z.
const (
// System.
PortTick = 0x00 // in: tick within the current day
PortDay = 0x01 // in: day number
PortTicks = 0x02 // in: ticks per day
// Navigation (relative to the star).
PortPosX = 0x10
PortPosY = 0x11
PortPosZ = 0x12
PortVelX = 0x13
PortVelY = 0x14
PortVelZ = 0x15
// Engine.
PortThrottle = 0x20 // out: 0..1000 permille
PortAzimuth = 0x21 // out: thrust direction azimuth, milliradians
PortPitch = 0x22 // out: thrust direction elevation, milliradians
PortFuel = 0x23 // in: fuel kg
PortMass = 0x24 // in: total mass kg
// Scanner.
PortScanSelect = 0x30 // out: asteroid id to track (0 clears)
PortScanNearest = 0x31 // in: id of nearest asteroid
PortScanRelX = 0x32 // in: target position relative to ship, km
PortScanRelY = 0x33
PortScanRelZ = 0x34
PortScanRelVX = 0x35 // in: target velocity relative to ship, m/s
PortScanRelVY = 0x36
PortScanRelVZ = 0x37
PortScanDist = 0x38 // in: distance to target, km
PortScanOre = 0x40 // in: PortScanOre+ore = kg of ore remaining (8 ports)
// Mining laser and cargo hold.
PortMine = 0x50 // out: 1 to mine the selected asteroid, 0 to stop
PortCargo = 0x51 // in: total cargo kg
PortCargoCap = 0x52 // in: cargo capacity kg
PortCargoOre = 0x58 // in: PortCargoOre+ore = kg of ore carried (8 ports)
// Dropoff station.
PortStnRelX = 0x60 // in: station position relative to ship, km
PortStnRelY = 0x61
PortStnRelZ = 0x62
PortStnRelVX = 0x63 // in: station velocity relative to ship, m/s
PortStnRelVY = 0x64
PortStnRelVZ = 0x65
PortSell = 0x66 // out: 1 to sell all cargo (needs to be docked)
PortCredits = 0x67 // in: credits earned by this ship (saturating)
// Comms buffers live in RAM; these ports coordinate them.
PortUplinkNew = 0x70 // in: 1 if an uplink arrived this day; out: any value acknowledges
PortUplinkLen = 0x71 // in: uplink length in bytes
// Math coprocessor. Write operands, then read a result.
PortMathX = 0x80 // out
PortMathY = 0x81 // out
PortMathZ = 0x82 // out
PortMathAtan2 = 0x83 // in: atan2(y, x) in milliradians
PortMathHypot = 0x84 // in: sqrt(x*x + y*y)
PortMathNorm3 = 0x85 // in: sqrt(x*x + y*y + z*z)
)