Jump to content
Sign in to follow this  
Andrew Davie

Using MAC for multiple table generation (e.g., LO/HI)

Recommended Posts

I posted this elsewhere before remembering we have a group for this.

I recently "discovered" a neat way to use macros to define tables of related items.

For example, a LO/HI table can be defined like this...

    .byte {1}PositionalValue_PAWN
    .byte {1}PositionalValue_PAWN
    .byte {1}PositionalValue_KNIGHT
    .byte {1}PositionalValue_BISHOP
    .byte {1}PositionalValue_ROOK
    .byte {1}PositionalValue_QUEEN
    .byte {1}PositionalValue_KING_MIDGAME




You can pass the name of a macro to a macro, and the macro you pass will be evaluated (eventually).

This means you can do stuff like this...


    MAC LO
    .byte <{1}
    MAC HI
    .byte >{1}
    MAC SP
    .byte {2}

    {1} Func1, 10
    {1} Func2, 20
    {1} Func3, 2

LoTable TAB LO
HiTable TAB HI
SpeedTable TAB SP


A walkthrough:

LoTable defines a label.
It calls the macro TAB, passing it the parameter "LO"

The macro replaces all the {1} on each line with "LO", which the become calls to the macro "LO" with two parameters

The LO macro puts the low byte of the 1st parameter.

For all lines in the TAB macro.

So, the last three lines define three separate tables, one for low bytes, one for high bytes, and one for "speed" just to show as an example.

Perhaps we could document these "tricks" somehow in a DASM tips'n'tricks or addendum to the manual?

Personally I think this one is pretty useful, as it prevents you getting the values in the different tables out of order - you only need to define the "contents" once inside the TAB macro, instead of three times, in three tables.


  • Like 3

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Create New...