This specification describes the math device of the Bedrock computer system.
Ports
Port | Name | Description | Read | Write |
---|---|---|---|---|
0x20 |
x coordinate | Horizontal coordinate. | ✓ | ✓ |
0x21 |
grouped | grouped | ✓ | ✓ |
0x22 |
y coordinate | Vertical coordinate. | ✓ | ✓ |
0x23 |
grouped | grouped | ✓ | ✓ |
0x24 |
r coordinate | Radial coordinate. | ✓ | ✓ |
0x25 |
grouped | grouped | ✓ | ✓ |
0x26 |
t coordinate | Angular coordinate. | ✓ | ✓ |
0x27 |
grouped | grouped | ✓ | ✓ |
0x28 |
Product | Product of multiplication. | ✓ | ✗ |
0x29 |
grouped | grouped | ✓ | ✗ |
0x2A |
grouped | grouped | ✓ | ✗ |
0x2B |
grouped | grouped | ✓ | ✗ |
0x2C |
Quotient | Quotient of division. | ✓ | ✗ |
0x2D |
grouped | grouped | ✓ | ✗ |
0x2E |
Remainder | Remainder of division. | ✓ | ✗ |
0x2F |
grouped | grouped | ✓ | ✗ |
x coordinate
Reading from this port group will return the x coordinate of the polar point after conversion to the cartesian coordinate system. If the coordinate exceeds the range of a signed 16-bit integer, the value returned will be zero.
Writing to this port group will set the x coordinate of the cartesian point to the value written.
y coordinate
Reading from this port group will return the y coordinate of the polar point after conversion to the cartesian coordinate system. If the coordinate exceeds the range of a signed 16-bit integer, the value returned will be zero.
Writing to this port group will set the y coordinate of the cartesian point to the value written.
r coordinate
Reading from this port group will return the r coordinate of the cartesian point after conversion to the polar coordinate system.
Writing to this port group will set the r coordinate of the polar point to the value written.
t coordinate
Reading from this port group will return the t coordinate of the cartesian point after conversion to the polar coordinate system.
Writing to this port group will set the t coordinate of the polar point to the value written.
Product
Reading from this port group will return the product of the multiplication of the x operand by the y operand.
Quotient
Reading from this port group will return the quotient of the division of the x operand by the y operand. If the y operand is zero, the value zero will be returned.
Remainder
Reading from this port group will return the remainder of the division of the x operand by the y operand. If the y operand is zero, the value zero will be returned.
Data structures
Cartesian point
The cartesian point is a pair of signed 16-bit coordinates representing a two-dimensional point in the cartesian coordinate system. The x coordinate represents the signed distance from the origin along the horizontal axis, and the y coordinate represents the signed distance from the origin along the vertical axis. The initial value of each coordinate is zero.
Polar point
The polar point is a pair of unsigned 16-bit coordinates representing a two-dimensional point in the polar coordinate system. The r coordinate represents the unsigned distance from the origin, and the t coordinate represents the angle counterclockwise around the origin from the positive horizontal axis. The angle unit is 1/65536 of a full turn. The initial value of each coordinate is zero.
x operand
The x operand is the x coordinate of the cartesian point interpreted as an unsigned 16-bit value.
y operand
The y operand is the y coordinate of the cartesian point interpreted as an unsigned 16-bit value.
Implementation
Coordinate conversion
The x coordinate of the polar point is calculated by taking the signed floor of cos(\frac{2 \pi t}{65536}) \times r, where the cosine function takes an angle in radians.
The y coordinate of the polar point is calculated by taking the signed floor of sin(\frac{2 \pi t}{65536}) \times r, where the sine function takes an angle in radians.
The r coordinate of the cartesian point is calculated by taking the unsigned floor of \sqrt{x^2 + y^2}.
The t coordinate of the cartesian point is calculated by taking the unsigned floor of atan2(y,x) \times \frac{65536}{2\pi}.
Wake
This device will never send a wake request to the system device.