OK, so that last example was terrible.  Should have tested it first.
Here's a better one that shows more of how to use PBP statements in macro's.  It's also a little easier to see how the "self optimization" works. (this time I tested it)
	Code:
	<b>DEFINE  </b></font><b>LCDCOLS 16  </b><font color="#0000FF"><b><i>; can be 8, 16, 20, 24 or 40
                    ; but 20 is the only one that matters in this routine
</i></b></font><b>LCD_Row   </b><font color="#008000"><b>VAR BYTE </b></font><b>system
LCD_Col   </b><font color="#008000"><b>VAR BYTE </b></font><b>system
</b><font color="#008000"><b>ASM
    </b></font><font color="#000080">ifndef LCDCOLS
        #define LCDCOLS 16    </font><font color="#0000FF"><b><i>; Default to 16 Columns
    </i></b></font><font color="#000080">endif
MoveCursorExpanded = 0
</font><font color="#0000FF"><b><i>; --- Move cursor to new location ---(inputs are LCD_Row and LCD_Col)-----------
</i></b></font><font color="#000080">Expand_MoveCursor  macro
  local  OverCode
    goto      OverCode
MoveCursorExpanded = 1
MoveCursor
    if LCDCOLS == 20          </font><font color="#0000FF"><b><i>; if using a 4x20 display
        </i></b></font><font color="#008000"><b>ENDASM
            LOOKUP </b></font><b>LCD_Row</b>,[<b>$80</b>,<b>$80</b>,<b>$C0</b>,<b>$94</b>,<b>$D4</b>],<b>LCD_Row
        </b><font color="#008000"><b>ASM
    </b></font><font color="#000080">else                      </font><font color="#0000FF"><b><i>; if NOT using a 4x20 display
        </i></b></font><font color="#008000"><b>ENDASM
            LOOKUP </b></font><b>LCD_Row</b>,[<b>$80</b>,<b>$80</b>,<b>$C0</b>,<b>$90</b>,<b>$D0</b>],<b>LCD_Row
        </b><font color="#008000"><b>ASM
    </b></font><font color="#000080">endif
    </font><font color="#008000"><b>ENDASM
        </b></font><b>LCD_Row </b>= <b>LCD_Row </b>+ (<b>LCD_Col </b>- <b>1</b>)
        <font color="#008000"><b>LCDOUT </b></font><b>$FE</b>, <b>LCD_Row  </b><font color="#0000FF"><b><i>; Send the command
    </i></b></font><font color="#008000"><b>ASM
    </b></font><font color="#000080">return
OverCode
    endm
</font><font color="#0000FF"><b><i>; --- Move LCD cursor to  Row, Column using constants --------------------------
</i></b></font><font color="#000080">LCDCUR?C  macro  Row, Col
    if MoveCursorExpanded == 0
        Expand_MoveCursor
    endif
    MOVE?CB   Row, LCD_Row
    MOVE?CB   Col, LCD_Col
    L?CALL    MoveCursor
    endm
</font><font color="#0000FF"><b><i>; --- Move LCD cursor to  Row, Column using Byte variables ---------------------
</i></b></font><font color="#000080">LCDCUR?B  macro  Row, Col
    if MoveCursorExpanded == 0
        Expand_MoveCursor
    endif
    MOVE?BB   Row, LCD_Row
    MOVE?BB   Col, LCD_Col
    L?CALL    MoveCursor
    endm
</font><font color="#008000"><b>ENDASM
</b></font>
 Using them is still the same
	Code:
	<font color="#000080">@ LCDCUR?C 1,5          </font><font color="#0000FF"><b><i>; Move to Row1 Column5
  </i></b></font><font color="#008000"><b>LCDOUT </b></font><font color="#FF0000">"R1C5"         </font><font color="#0000FF"><b><i>; Display something
'-- OR --
</i></b></font><b>Row  </b><font color="#008000"><b>VAR BYTE  </b></font><b>system
Col  </b><font color="#008000"><b>VAR BYTE  </b></font><b>system
Row </b>= <b>2
Col </b>= <b>10
</b><font color="#000080">@ LCDCUR?B  Row, Col    </font><font color="#0000FF"><b><i>; Move to Row2 Column10
  </i></b></font><font color="#008000"><b>LCDOUT </b></font><font color="#FF0000">"R2C10"        </font><font color="#0000FF"><b><i>; Display something</i></b></font>
 
				
			
Bookmarks