Nintendo DMG-01 Manual - Page 63

Program Counter, Stack Pointer

Page 63 highlights

Game BoyTM CPU Manual 3.2.3. Program Counter 3.2.3. Program Counter On power up, the GameBoy Program Counter is initialized to $100 (100 hex) and the instruction found at this location in ROM is executed. The Program Counter from this point on is controlled, indirectly, by the program instructions themselves that were generated by the programmer of the ROM cart. 3.2.4. Stack Pointer A big key to understanding programming in assembly language on the GameBoy is understanding the concept of a stack pointer. A familiarity with assembly language for other processors helps greatly as the concepts are the same. The GameBoy Stack Pointer is used to keep track of the top of the "stack". The stack is used for saving variables, saving return addresses, passing arguments to subroutines, and various other uses that might be conceived by the individual programmer. The instructions CALL, PUSH, and RST all put information onto the stack. The instructions POP, RET, and RETI all take information off of the stack. (Interrupts put a return address on the stack and remove it at their completion as well.) As information is put onto the stack, the stack grows downward in RAM memory. As a result, the Stack Pointer should always be initialized at the highest location of RAM space that has been allocated for use by the stack. For instance, if a programmer wishes to locate the Stack Pointer at the top of low RAM space ($C000-$DFFF) he would set the Stack Pointer to $E000 using the by DP Page 63

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139

Game Boy
TM
CPU Manual
3.2.3. Program Counter
3.2.3.
Program Counter
On power up, the GameBoy Program Counter is
initialized to $100 (100 hex) and the instruction found
at this location in ROM is executed.
The Program Counter from this point on is controlled,
indirectly, by the program instructions themselves that
were generated by the programmer of the ROM cart.
3.2.4.
Stack Pointer
A big key to understanding programming in assembly
language on the GameBoy is understanding the concept of
a stack pointer. A familiarity with assembly language
for other processors helps greatly as the concepts are
the same.
The GameBoy Stack Pointer is used to keep track of the
top of the "stack". The stack is used for saving
variables, saving return addresses, passing arguments
to subroutines, and various other uses that might be
conceived by the individual programmer.
The instructions CALL, PUSH, and RST all put
information onto the stack. The instructions POP, RET,
and RETI all take information off of the stack.
(Interrupts put a return address on the stack and
remove it at their completion as well.)
As information is put onto the stack, the stack grows
downward in RAM memory. As a result, the Stack Pointer
should always be initialized at the highest location of
RAM space that has been allocated for use by the stack.
For instance, if a programmer wishes to locate the
Stack Pointer at the top of low RAM space ($C000-$DFFF)
he would set the Stack Pointer to $E000 using the
by DP
Page 63