Next Previous Contents

13. Macro packages

Using the .MACPACK directive, predefined macro packages may be included with just one command. Available macro packages are:

13.1 .MACPACK generic

This macro package defines macros that are useful in almost any program. Currently, two macros are defined:

        .macro  add     Arg
                adc     Arg

        .macro  sub     Arg
                sbc     Arg

13.2 .MACPACK longbranch

This macro package defines long conditional jumps. They are named like the short counterpart but with the 'b' replaced by a 'j'. Here is a sample definition for the "jeq" macro, the other macros are built using the same scheme:

        .macro  jeq     Target
                .if     .def(Target) .and ((*+2)-(Target) <= 127)
                beq     Target
                bne     *+5
                jmp     Target

All macros expand to a short branch, if the label is already defined (back jump) and is reachable with a short jump. Otherwise the macro expands to a conditional branch with the branch condition inverted, followed by an absolute jump to the actual branch target.

The package defines the following macros:

        jeq, jne, jmi, jpl, jcs, jcc, jvs, jvc

13.3 .MACPACK cbm

The cbm macro package will define a macro named scrcode. It takes a string as argument and places this string into memory translated into screen codes.

13.4 .MACPACK cpu

This macro package does not define any macros but constants used to examine the value read from the .CPU pseudo variable. For each supported CPU a constant similar to


is defined. These constants may be used to determine the exact type of the currently enabled CPU. In addition to that, for each CPU instruction set, another constant is defined:


The value read from the .CPU pseudo variable may be checked with .BITAND to determine if the currently enabled CPU supports a specific instruction set. For example the 65C02 supports all instructions of the 65SC02 CPU, so it has the CPU_ISET_65SC02 bit set in addition to its native CPU_ISET_65C02 bit. Using

        .if (.cpu .bitand CPU_ISET_65SC02)
                lda     (sp)
                ldy     #$00
                lda     (sp),y

it is possible to determine if the

                lda     (sp)

instruction is supported, which is the case for the 65SC02, 65C02 and 65816 CPUs (the latter two are upwards compatible to the 65SC02).

Next Previous Contents