Table of Contents Previous topic Next topic
ASSEMBLER DIRECTIVES->Other Assembler Directives->SETDP
SETDP Set Direct Page
The direct page addressing mode can be used to access any page within the target machines memory space.
The actual page that is accessed depends upon the contents of the microprocessor's direct page register. This is initially zero but can be changed at any time to any page value between $00 and $FF. To set the direct page register to $14, use for instance the assembler instructions:
LDA #$14
TFR A,DP
After these instructions, the direct page addressing mode will access memory between $1400 and $14FF.
In order for the assembler to be able to translate an assembler instruction into the direct page addressing mode it needs to know the contents of the direct page register. The SETDP directive gives the assembler this information.
Unless otherwise directed, the assembler assumes that this page is the zero page (ie page $0000 to $00FF). However, if this direct page register has been set to say $14 as above, then the assembler directive:
SETDP $14
should also be used. The assembler can then when appropriate generate direct page addressing instructions for all addresses which evaluate to between $1400 and $14FF.
The general format for the directive is:
SETDP <expression> <comment>
where, for an absolute section, <expression> evaluates to a one byte value which specifies the page number that has been loaded into the direct page register.
For direct page addressing to be used in a relocatable section, the section must have type 'INPAGE'. The expression in the operand following SETDP should then evaluate to a section name.
The following example illustrates the use of SETDP for a relocatable section. 1 0000 section extendedpage,data
2 0000 exdata1 rmb $20
3 0000 section directpage,data,inpage
4 0000 dpdata1 rmb $20
5 0000 section example,code
6 0000 86 00 lda #directpage
7 0002 1F 8B tfr a,dp
8 0004 setdp directpage
9 0004 96 03 lda dpdata1+3
10 0006 B6 00 03 lda exdata1+3
The value of SETDP is set to zero at the beginning of assembly and is reset to zero at the beginning of pass 2.