Nintendo 1504166 Programming Manual - Page 167

Multiple Calls, If System Call occurs during User interrupt processing, the System Call

Page 167 highlights

AGB Programming Manual AGB System Calls 17.1.2 Multiple Calls 1) When an argument is required for the system call used, after reading to the registers, R0-R3, call the monitor ROM system call with the "SWI". 2) Save the registers, SPSR_svc (formerly CPSR), R12, LR_svc (formerly PC) to the system call stack with the monitor ROM. 03007F00 USR Stack 03007FA0 SP_usr IRQ Stack SP_irq 03007FE0 SVC Stack 4 WORDS SP_svc 03007F00 03007FA0 3) Switch from CPU mode to system mode. The status of the IRQ Disable Flag prior to the call is kept in System ROM. The previous conditions will be continued. 4) Save the R2 and LR_usr registers to the user stack. Other registers will be saved with each system call. 03007F00 Usr Stack LR_usr R2 Save with each System Call SP_usr 03007FA0 03007F00 IRQ Stack SP_irq 03007FE0 03007FA0 5) Interrupt occurs while executing system call. SVC Stack 4 WORDS SP_svc 03007F00 USR Stack LR_usr R2 Save with each System Call SP_usr 03007FA0 03007F00 IRQ Stack 6 WORDS SP_irq 03007FE0 03007FA0 SVC Stack 4 WORDS SP_svc 6) User interrupt processing is done. (You can reference the cause of the interrupt with the IF Register.) The CPU mode is changed to System Mode (User Mode with privilege) in order to solve the problem with stacks (to reference interrupt processing). 03007F00 USR Stack LR_usr R2 Save with each System Call User Interrupt Processing SP_usr 03007FA0 03007F00 IRQ Stack 6 WORDS SP_irq 03007FE0 03007FA0 SVC Stack 4 WORDS SP_svc àIf System Call occurs during User interrupt processing, the System Call is called using Multiple Calls. ©1999 - 2001 Nintendo of America Inc. 167 D.C.N. AGB-06-0001-002B4

  • 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
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171

AGB Programming Manual
AGB System Calls
©1999 - 2001 Nintendo of America Inc.
167
D.C.N. AGB-06-0001-002B4
17.1.2 Multiple Calls
1) When an argument is required for the system call used, after reading to
the registers, R0-R3, call the monitor ROM system call with the
“SWI<Number>”.
2) Save the registers, SPSR_svc (formerly CPSR), R12, LR_svc (formerly
PC) to the system call stack with the monitor ROM.
SP_usr
SP_irq
03007FA0
03007F00
03007F00
IRQ Stack
SVC Stack
USR Stack
4 WORDS
03007FE0
03007FA0
SP_svc
3) Switch from CPU mode to system mode.
The status of the IRQ Disable
Flag prior to the call is kept in System ROM.
The previous conditions will
be continued.
4) Save the R2 and LR_usr registers to the user stack.
Other registers will
be saved with each system call.
LR_usr
SP_irq
SP_usr
Save with each
System Call
03007FA0
03007F00
03007F00
IRQ Stack
SVC Stack
Usr Stack
4 WORDS
03007FE0
03007FA0
R2
SP_svc
5) Interrupt occurs while executing system call.
LR_usr
SP_usr
6 WORDS
Save with each
System Call
03007FA0
03007F00
03007F00
IRQ Stack
SVC Stack
USR Stack
4 WORDS
03007FE0
03007FA0
R2
SP_irq
SP_svc
6) User interrupt processing is done. (You can reference the cause of the
interrupt with the IF Register.)
The CPU mode is changed to System Mode
(User Mode with privilege) in order to solve the problem with stacks (to
reference interrupt processing).
LR_usr
SP_usr
6 WORDS
03007FA0
03007F00
IRQ Stack
SVC Stack
USR Stack
4 WORDS
03007FE0
03007FA0
User Interrupt
Processing
Save with each
System Call
03007F00
R2
SP_irq
SP_svc
°
If System Call occurs during User interrupt processing, the System Call
is called using Multiple Calls.