AppleIIAsm-Collection/documentation/AppleIIAsm Library Collection Technical Manual/0.6.1/9.0 Quick_Reference_D4_MAC.MATH.md

126 lines
7.8 KiB
Markdown
Raw Normal View History

# Disk 4: Basic Math and Pseudorandom Numbers
The Basic Math collection contains macros and subroutines dedicated to addition, subtraction, multiplication and division operations, as well as a 16-bit comparison routine and several macros for generating pseudorandom numbers. These are grouped into several macro files, as such:
- [MAC.D8BY.ASM](#mac.d8by.asm)
- This group contains macros that are used to divide an 8-bit number by a fixed constant between 2 and 10.
- [MAC.M8BY.ASM](#mac.m8by.asm)
- This group contains macros that are used to multiply an 8-bit number by a fixed constant between 2 and 10.
- [MAC.M16BY.ASM](#mac.m16by.asm)
- This group contains macros that are used to multiply a 16-bit number by a fixed constant between 2 and 10, as well as by 100.
- [MAC.MATH8.ASM](#mac.math8.asm)
- This group contains macros for adding, subtracting, multiplying and dividing 8-bit numbers.
- [MAC.MATH16.ASM](#mac.math16.asm)
- This group contains macros for adding, subtracting, multiplying and dividing 16-bit numbers. It also includes a macro for 16-bit comparison.
- [MAC.MATHRND.ASM](#mac.mathrnd.asm)
- This group contains macros for managing and generating pseudorandom numbers.
### MAC.D8BY.ASM
| MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
| -------- | ---------- | ---------- | ------------------------------- | -------- | ------ | ----- |
| `D8BY2` | none | none | Divide an 8-bit number by two | NZCV | 6 | 4 |
| `D8BY3` | none | none | Divide an 8-bit number by three | NZCV | 29 | 19 |
| `D8BY4` | none | none | Divide an 8-bit number by four | NZCV | 8 | 5 |
| `D8BY5` | none | none | Divide an 8-bit number by five | NZCV | 34 | 21 |
| `D8BY6` | none | none | Divide an 8-bit number by six | NZCV | 36 | 21 |
| `D8BY7` | none | none | Divide an 8-bit number by seven | NZCV | 33 | 19 |
| `D8BY8` | none | none | Divide an 8-bit number by eight | NZCV | 10 | 6 |
| `D8BY9` | none | none | Divide an 8-bit number by nine | NZCV | 36 | 21 |
| `D8BY10` | none | none | Divide an 8-bit number by ten | NZCV | 36 | 21 |
### MAC.M8BY.ASM
| MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
| -------- | ---------- | ---------- | --------------------------------- | -------- | ------ | ----- |
| `M8BY2` | none | none | Multiply an 8-bit number by two | NZCV | 6 | 4 |
| `M8BY3` | none | none | Multiply an 8-bit number by three | NZCV | 6 | 4 |
| `M8BY4` | none | none | Multiply an 8-bit number by four | NZCV | 8 | 5 |
| `M8BY5` | none | none | Multiply an 8-bit number by five | NZCV | 15 | 10 |
| `M8BY6` | none | none | Multiply an 8-bit number by six | NZCV | 15 | 10 |
| `M8BY7` | none | none | Multiply an 8-bit number by seven | NZCV | 33 | 20 |
| `M8BY8` | none | none | Multiply an 8-bit number by eight | NZCV | 10 | 6 |
| `M8BY9` | none | none | Multiply an 8-bit number by nine | NZCV | 18 | 11 |
| `M8BY10` | none | none | Multiply an 8-bit number by ten | NZCV | 18 | 11 |
### MAC.M16BY.ASM
| MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
| --------- | ---------- | ---------- | --------------------------------------- | -------- | ------ | ----- |
| `M16BY2` | none | none | Multiply a 16-bit number by two | NZCV | 20 | 13 |
| `M16BY3` | none | none | Multiply a 16-bit number by three | NZCV | 47 | 32 |
| `M16BY4` | none | none | Multiply a 16-bit number by four | NZCV | 37 | 24 |
| `M16BY5` | none | none | Multiply a 16-bit number by five | NZCV | 46 | 30 |
| `M16BY6` | none | none | Multiply a 16-bit number by six | NZCV | 58 | 38 |
| `M16BY7` | none | none | Multiply a 16-bit number by seven | NZCV | 72 | 47 |
| `M16BY8` | none | none | Multiply a 16-bit number by eight | NZCV | 34 | 21 |
| `M16BY9` | none | none | Multiply a 16-bit number by nine | NZCV | 62 | 36 |
| `M16BY10` | none | none | Multiply a 16-bit number by ten | NZCV | 66 | 39 |
| `M16BY1H` | none | none | Multiply a 16-bit number by one hundred | NZCV | 124 | 70 |
### MAC.MATH8.ASM
| MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
| ------ | ---------- | ------------------------------------------- | -------------------------------------- | -------- | ------ | ----- |
| `ADD8` | none | ]1 = number to add <br />]2 = number to add | Add two 8-bit numbers | NZCV | 21 | 15 |
| `SUB8` | none | ]1 = Minuend </br>]2 = Subtrahend | Subtract one 8-bit number from another | NZCV | 21 | 15 |
| `MUL8` | `MULTU8` | ]1 = Multiplicand<br />]2 = Multiplier | Multiply two 8-bit numbers | NZCV | 97 | 56 |
| `DIV8` | `DIVDU8` | ]1 = Dividend<br />]2 = Divisor | Divide one 8-bit number by another | NZCV | 75 | 43 |
### MAC.MATH16.ASM
| MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
| ------- | ---------- | ------------------------------------------------------------ | --------------------------------------- | -------- | ------ | ----- |
| `ADD16` | `ADDIT16` | ]1 = First number to add<br />]2 = Second number to add | Add two 16-bit numbers | NZCV | 78 | 51 |
| `SUB16` | `SUBT16` | ]1 = Minuend<br >]2 = Subtrahend | Subtract one 16-bit number from another | NZCV | 79 | 51 |
| `MUL16` | `MULTU16` | ]1 = Multiplier<br />]2 = Multiplicand | Multiply two 16-bit numbers | NZCV | 144 | 91 |
| `DIV16` | `DIVDU16` | ]1 = Dividend<br />]2 = Divisor | Divide one 16-bit number by another | NZCV | 133 | 81 |
| `CMP16` | `COMP16` | ]1 = First Comparison Number <br />]2 = Second Comparison Number | Compare one 16-bit number to another | NZCV | 100 | 53 |
### MAC.MATHRND.ASM
| MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
| -------- | ---------- | ------------------------------------- | --------------------------------------------------------- | -------- | ------ | ----- |
| `RNDEOR` | none | ]1 = Seed <br />]2 = EOR Index | Set the seed and magic number value | NZCV | 30 | 22 |
| `RNDMZ` | none | ]1 = Seed<br />]2 = EOR Magic Number | Set the seed and set the magic number index | NZCV | 56 | 35 |
| `RND8` | `RAND8` | none | Generate a value between 0 and 255 | NZCV | 51 | 30 |
| `RAND` | `RANDB` | ]1 = Low bounds<br />]2 = High bounds | Generate a value between a given low value and high value | NZCV | 263 | 171 |
| `RND16` | `RAND16` | none | Generate a value between 0 and 65,355 | NZCV | 101 | 63 |