ADDRESS SPACES
S3C8639/C863A/P863A/C8647/F8647
USING THE REGISTER POINTERS
Register pointers of RP0 and RP1 which are mapped to the addresses D6H and D7H in set 1, are used to select
two movable 8-byte working register slices in the register file. After a reset, they point to the working register
common area: RP0 points to the addresses C0H–C7H, and RP1 points to the addresses C8H–CFH.
You can change a register pointer value, by loading a new value to RP0 and/or RP1 using an SRP or LD
instruction (see Figures 2-6 and 2-7).
In working register addressing, you can only access those two 8-bit slices of the register file that are currently
pointed to by RP0 and RP1. You cannot use the register pointers to select a working register area in set 2, C0H–
FFH, because these locations can be accessed only with Indirect Register or Indexed addressing modes.
The 16-byte working register block selected usually consists of two contiguous 8-byte slices. As a general
programming guideline, we recommend that RP0 point to the "lower" slice and RP1 point to the "upper" slice (see
Figure 2-6). In some cases, it may be necessary to define working register areas in different (non-contiguous)
areas of the register file. In Figure 2-7, RP0 points to the "upper" slice and RP1 to the "lower" slice.
As a register pointer can point to either of the two 8-byte slices in the working register block, you can flexibly
define the working register area to support a variety of program requirements.
F PROGRAMMING TIP — Setting the Register Pointers
SRP
SRP1
SRP0
CLR
LD
#70H
#48H
#0A0H
RP0
RP1,#0F8H
; RP0 ← 70H, RP1 ← 78H
; RP0 ← no change, RP1 ← 48H
; RP0 ← A0H, RP1 ← no change
; RP0 ← 00H, RP1 ← no change
; RP0 ← no change, RP1 ← 0F8H
00001XXX
RP1
00000XXX
RP0
Register File
Contains 32
8-Byte Slices
8-Byte Slice
8-Byte Slice
FH (R15)
8H
7H
0H (R0)
16-byte
contiguous
working
register block
Figure 2-8. Contiguous 16-Byte Working Register Block
2-10