5.4 KiB
5.4 KiB
Disk 1 Macros: The Required Collection
Disk 1: REQUIRED contains three main macro files, unlike most disks which only contain a single macro file. They are as follows:
- MAC.REQUIRED.ASM
- Contains all of the Macros required by the rest of the library collection. This must always be included in the main program. This also contains emulation macros for a select number of 65C02 instructions, if limited to a 6502 instruction set.
- MAC.ALIAS.8080.ASM
- These are aliases for some instructions in the 8080 instruction set. Note that these may not work exactly like the 8080 versions, and are considered works-in-progress.
- MAC.ALIAS.Z80.ASM
- These are aliases for some instructions in the Z80 instruction set. Like with the previous alias file, these are works-in-progress.
Be sure to consult the detailed reference for Disk 1: The Required Library for further explanation of how the macros work, their source code, and an explanation of the source code of any subroutines the macros may rely upon.
MAC.REQUIRED.ASM
MACRO | DEPENDENCY | PARAMETERS | ACTION | DESTROYS | CYCLES | BYTES |
---|---|---|---|---|---|---|
_AXLIT |
none | ]1 = memory address | Determine if address sent is direct or indirect and parse accordingly in registers. .A = address low byte .X = address high byte |
NZ | 8 | 6 |
_AXSTR |
_AXLIT |
]1 = memory address | Determine if literal string or address is sent and parse accordingly. .A = address low byte .X = address high byte |
NZ | 11 | 9+ |
_ISLIT |
none | ]1 = memory address | Determine if address sent is direct or indirect and parse accordingly onto the stack .A = address low byte .X = address high byte |
NZ | 14 | 8 |
_ISSTR |
_ISLIT |
]1 = memory address | Determine if parameter is a literal string or address and parse address accordingly to the stack. .A = address low byte .X = address high byte |
NZ | 13 or 8 | 10+ or 6 |
_MLIT |
none | ]1 = memory address ]2 = destination ZP address |
Determine if address sent is direct or indirect and parse accordingly to zero page .A = address low byte .X = address high byte |
NZ | 16 | 12 |
_MSTR |
_ISLIT |
]1 = memory address ]2 = destination ZP address |
Determine if parameter passed is a literal string and parse address accordingly to the zero page .A address low byte .X = address high byte |
NZ | 15 or 8 | 14+ or 6 |
_PRN |
__P |
]1 = string to print | Print a literal string to the screen. | NZCV | 161+ | 9+ |
_WAIT |
__w |
none | Loop until a button is pressed. .A = keypress value |
NZ | 14+ | 10 |
BEEP |
none | ]1 = length of beep | Make beeping sound | NZC | 108+ | 15 |
CLRHI |
none | none | high nibble of .A cleared | NZC | 10 | 6 |
DUMP |
_AXLIT ;__DUMP |
]1 = memory address ]2 = number of bytes to dump |
Dump a region of memory to the screen .A = number of bytes displayed |
NZCV | 811+ | 16 |
GBIT |
none | ]1 = byte to check ]2 = bit mask |
Get bit from .A at specified location in byte. .A = 0 or 1 |
NZ | 14 | 15 |
MAC.ALIAS.8080.ASM
MACRO | DEPENDENCIES | PARAMETERS | ACTION | CYCLES | BYTE |
---|---|---|---|---|---|
CALL |
none | label to JSR to |
mimics JSR instruction |
6 | 3 |
RET |
none | none | mimics RTS instruction |
6 | 1 |
JA |
none | label to JMP to |
JMP if .A > CMP |
14 | 9 |
JAE |
none | label to JMP to |
JMP if .A >= CMP |
8 | 4 |
JB |
none | label to JMP to |
JMP if .A < CMP |
8 | 4 |
JBE |
none | label to JMP to |
JMP if .A <= CMP |
1 | 6 |
JC |
none | label to JMP to |
JMP if .C = 1 |
8 | 4 |
JE |
none | label to JMP to |
JMP if EQUAL |
8 | 4 |
JG |
none | label to JMP to |
JA |
11 | 9 |
JGE |
none | label to JMP to |
JAE |
8 | 4 |
JL |
none | label to JMP to |
JB |
8 | 4 |
JLE |
none | label to JMP to |
JBE |
11 | 6 |
JNC |
none | label to JMP to |
JMP if .C = 0 |
8 | 4 |
JNE |
none | label to JMP to |
JMP if NOT EQUAL |
8 | 4 |
JZ |
none | label to JMP to |
JMP if .Z = 1 |
8 | 4 |
JNZ |
none | label to JMP to |
JMP if .Z = 0 |
8 | 4 |
JS |
none | label to JMP to |
JMP if SIGNED |
8 | 4 |
JNS |
none | label to JMP to |
JMP if NOT SIGNED |
8 | 4 |
JO |
none | label to JMP to |
JMP if OVERFLOW = 1 |
8 | 4 |
JNO |
none | label to JMP to |
JMP if OVERFLOW = 0 |
8 | 4 |
ANC |
none | ]1 = first addend ]2 = second addend |
Add No Carry (ADD in 8080) | 12 | 8 |
SNC |
none | ]1 = Minuend ]2 = Subtrahend |
Subtract No Carry (SUB in 8080) | 12 | 8 |
PUSHA |
none | none | Push All Registers | 30 | 14 |
PULLA |
none | none | Pull All Registers | 19 | 24 |
POPA |
none | none | PULLA |
19 | 24 |
MAC.ALIAS.Z80.ASM
MACRO | DEPENDENCIES | PARAMETERS | ACTION | CYCLES | BYTE |
---|---|---|---|---|---|
CPL |
none | none | Invert bits in .A | 2 | 2 |
JP |
none | label to JMP to |
JMP equivalent |
5 | 1 |
LD |
none | ???? | move value from source to destination (non-operational) | ? | ? |
POP |
none | none | PLA equivalent |
4 | 1 |
SCF |
none | none | SEC equivalent |
2 | 1 |