📄 interrupt.cod
字号:
; 205 : //
; 206 : else if (ulVic2Irq & INT2_RTC)
0017c e3150020 tst r5, #0x20
; 207 : {
; 208 : *VIC2_INTCLEAR = INT2_RTC;
00180 159f1180 ldrne r1, [pc, #0x180]
00184 13a00020 movne r0, #0x20
; 209 : retval = SYSINTR_RTC_ALARM;
00188 13a0600d movne r6, #0xD
0018c 15810000 strne r0, [r1]
00190 1a000059 bne |$L14016|
; 210 : }
; 211 :
; 212 : //
; 213 : // Check the DMA channels.
; 214 : //
; 215 : else if (ulVic1Irq & INT1_DMAM2P0 )
00194 e3140080 tst r4, #0x80
; 216 : {
; 217 : *VIC1_INTCLEAR = INT1_DMAM2P0;
00198 159f116c ldrne r1, [pc, #0x16C]
0019c 13a00080 movne r0, #0x80
; 218 : retval = SYSINTR_DMA0;
001a0 13a0601f movne r6, #0x1F
001a4 15810000 strne r0, [r1]
001a8 1a000053 bne |$L14016|
; 219 : }
; 220 : else if (ulVic1Irq & INT1_DMAM2P1 )
001ac e3140c01 tst r4, #1, 24
001b0 0a000004 beq |$L13974|
; 221 : {
; 222 : *VIC1_INTCLEAR = INT1_DMAM2P1;
001b4 e3a00c01 mov r0, #1, 24
001b8 |$L14233|
001b8 e59f114c ldr r1, [pc, #0x14C]
; 223 : retval = SYSINTR_DMA1;
001bc e3a06020 mov r6, #0x20
001c0 e5810000 str r0, [r1]
; 224 : }
; 225 : else if (ulVic1Irq & INT1_DMAM2P2 )
001c4 ea00004c b |$L14016|
001c8 |$L13974|
001c8 e3140c02 tst r4, #2, 24
; 226 : {
; 227 : *VIC1_INTCLEAR = INT1_DMAM2P2;
001cc 159f1138 ldrne r1, [pc, #0x138]
001d0 13a00c02 movne r0, #2, 24
; 228 : retval = SYSINTR_DMA2;
001d4 13a06021 movne r6, #0x21
001d8 15810000 strne r0, [r1]
001dc 1a000046 bne |$L14016|
; 229 : }
; 230 : else if (ulVic1Irq & INT1_DMAM2P3 )
001e0 e3140b01 tst r4, #1, 22
; 231 : {
; 232 : *VIC1_INTCLEAR = INT1_DMAM2P3;
001e4 159f1120 ldrne r1, [pc, #0x120]
001e8 13a00b01 movne r0, #1, 22
; 233 : retval = SYSINTR_DMA3;
001ec 13a06022 movne r6, #0x22
001f0 15810000 strne r0, [r1]
001f4 1a000040 bne |$L14016|
; 234 : }
; 235 : else if (ulVic1Irq & INT1_DMAM2P4 )
001f8 e3140b02 tst r4, #2, 22
; 236 : {
; 237 : *VIC1_INTCLEAR = INT1_DMAM2P4;
001fc 159f1108 ldrne r1, [pc, #0x108]
00200 13a00b02 movne r0, #2, 22
; 238 : retval = SYSINTR_DMA4;
00204 13a06023 movne r6, #0x23
00208 15810000 strne r0, [r1]
0020c 1a00003a bne |$L14016|
; 239 : }
; 240 : else if (ulVic1Irq & INT1_DMAM2P5 )
00210 e3140a01 tst r4, #1, 20
; 241 : {
; 242 : *VIC1_INTCLEAR = INT1_DMAM2P5;
00214 13a00a01 movne r0, #1, 20
00218 1affffe6 bne |$L14233|
; 243 : retval = SYSINTR_DMA1;
; 244 : }
; 245 : else if (ulVic1Irq & INT1_DMAM2P5 )
; 246 : {
; 247 : *VIC1_INTCLEAR = INT1_DMAM2P5;
; 248 : retval = SYSINTR_DMA5;
; 249 : }
; 250 : else if (ulVic1Irq & INT1_DMAM2P6 )
0021c e3140a02 tst r4, #2, 20
; 251 : {
; 252 : *VIC1_INTCLEAR = INT1_DMAM2P6;
00220 159f10e4 ldrne r1, [pc, #0xE4]
00224 13a00a02 movne r0, #2, 20
; 253 : retval = SYSINTR_DMA6;
00228 13a06025 movne r6, #0x25
0022c 15810000 strne r0, [r1]
00230 1a000031 bne |$L14016|
; 254 : }
; 255 : else if (ulVic1Irq & INT1_DMAM2P7 )
00234 e3140901 tst r4, #1, 18
; 256 : {
; 257 : *VIC1_INTCLEAR = INT1_DMAM2P7;
00238 159f10cc ldrne r1, [pc, #0xCC]
0023c 13a00901 movne r0, #1, 18
; 258 : retval = SYSINTR_DMA7;
00240 13a06026 movne r6, #0x26
00244 15810000 strne r0, [r1]
00248 1a00002b bne |$L14016|
; 259 : }
; 260 : else if (ulVic1Irq & INT1_DMAM2P8 )
0024c e3140902 tst r4, #2, 18
; 261 : {
; 262 : *VIC1_INTCLEAR = INT1_DMAM2P8;
00250 159f10b4 ldrne r1, [pc, #0xB4]
00254 13a00902 movne r0, #2, 18
; 263 : retval = SYSINTR_DMA8;
00258 13a06027 movne r6, #0x27
0025c 15810000 strne r0, [r1]
00260 1a000025 bne |$L14016|
; 264 : }
; 265 : else if (ulVic1Irq & INT1_DMAM2P9 )
00264 e3140801 tst r4, #1, 16
; 266 : {
; 267 : *VIC1_INTCLEAR = INT1_DMAM2P9;
00268 159f109c ldrne r1, [pc, #0x9C]
0026c 13a00801 movne r0, #1, 16
; 268 : retval = SYSINTR_DMA9;
00270 13a06028 movne r6, #0x28
00274 15810000 strne r0, [r1]
00278 1a00001f bne |$L14016|
; 269 : }
; 270 :
; 271 : //
; 272 : // Check to see if it is a touch pad interrupt.
; 273 : //
; 274 : else if (ulVic1Irq & INT1_TOUCH)
0027c e3140101 tst r4, #1, 2
; 275 : {
; 276 : *VIC1_INTCLEAR = INT1_TOUCH;
00280 159f1084 ldrne r1, [pc, #0x84]
00284 13a00101 movne r0, #1, 2
; 277 : retval = SYSINTR_TOUCH;
00288 13a06011 movne r6, #0x11
0028c 15810000 strne r0, [r1]
00290 1a000019 bne |$L14016|
; 278 : }
; 279 : //
; 280 : // See if it is timer 2 also used for the touch interface.
; 281 : //
; 282 : else if (ulVic1Irq & INT1_TIMER2)
00294 e3140020 tst r4, #0x20
; 283 : {
; 284 : *VIC1_INTCLEAR = INT1_TIMER2;
00298 159f106c ldrne r1, [pc, #0x6C]
0029c 13a00020 movne r0, #0x20
; 285 : retval = SYSINTR_TIMER2;
002a0 13a0601d movne r6, #0x1D
002a4 15810000 strne r0, [r1]
002a8 1a000013 bne |$L14016|
; 286 : }
; 287 : //
; 288 : // Check to see if it the IRDA interrupt.
; 289 : //
; 290 : else if (ulVic2Irq & INT2_IRDA )
002ac e3150040 tst r5, #0x40
; 291 : {
; 292 : *VIC2_INTCLEAR = INT2_IRDA;
002b0 159f1050 ldrne r1, [pc, #0x50]
002b4 13a00040 movne r0, #0x40
; 293 : retval = SYSINTR_IR;
002b8 13a06016 movne r6, #0x16
002bc 15810000 strne r0, [r1]
002c0 1a00000d bne |$L14016|
; 294 : }
; 295 : //
; 296 : // Check to see if it is the IDE interrupt.
; 297 : //
; 298 : else if (ulVic2Irq & INT2_EXT3)
002c4 e3150c01 tst r5, #1, 24
; 299 : {
; 300 : *VIC2_INTCLEAR = INT2_EXT3;
002c8 159f1038 ldrne r1, [pc, #0x38]
002cc 13a00c01 movne r0, #1, 24
; 301 : retval = SYSINTR_IDE;
002d0 13a06013 movne r6, #0x13
002d4 15810000 strne r0, [r1]
002d8 1a000007 bne |$L14016|
; 302 : }
; 303 : else if(ulVic2Irq & INT2_GPIO6)
002dc e3150802 tst r5, #2, 16
002e0 0a000005 beq |$L14016|
; 304 : {
; 305 : OEMWriteDebugByte('P') ;
002e4 e3a00050 mov r0, #0x50
002e8 eb000000 bl OEMWriteDebugByte
; 306 : *VIC2_INTCLEAR = INT2_EXT3;
002ec e59f3014 ldr r3, [pc, #0x14]
002f0 e3a00c01 mov r0, #1, 24
002f4 e5830000 str r0, [r3]
; 307 : // OEMEthISR();
; 308 : retval = SYSINTR_PCMCIA_LEVEL;
002f8 e3a06014 mov r6, #0x14
002fc |$L14016|
; 309 : }
; 310 : else
; 311 : {
; 312 : // OEMWriteDebugByte('U') ;
; 313 : // NKDbgPrintfW(L"U = 0x%x, 0x%x,0x%x, 0x%x, 0x%x, 0x%x\r\n", ulVic1Irq, ulVic2Irq, ulVic1Last,ulVic2Last,fPS2Int, ulDummyRead);
; 314 : }
; 315 :
; 316 : }
; 317 : // ulVic1Last = ulVic1Irq;
; 318 : // ulVic2Last = ulVic2Irq;
; 319 :
; 320 : return retval;
002fc e1a00006 mov r0, r6
; 321 : }
00300 e8bd40f0 ldmia sp!, {r4 - r7, lr}
00304 e12fff1e bx lr
00308 |$L14238|
00308 b00c0014 DCD 0xb00c0014
0030c b00b0014 DCD 0xb00b0014
00310 00000000 DCD |fPS2Int|
00314 00000000 DCD |fResumeFlag|
00318 00000000 DCD |wNumInterrupts|
0031c 00000000 DCD |dwIsrTime1|
00320 00000000 DCD |fIntrTime|
00324 b08a000c DCD 0xb08a000c
00328 00000000 DCD |gdwInterruptMask2|
0032c 00000000 DCD |fInterruptFlag|
00330 |$M14235|
ENDP ; |OEMInterruptHandler|
IMPORT |dwReschedTime|
IMPORT |CurMSec|
IMPORT |CurTicks|
IMPORT |dwReschedIncrement|
IMPORT |PProfileInterrupt|
IMPORT |dwIsrTime2|
IMPORT |dwIntrTimeCountdown|
IMPORT |dwIntrTimeCountdownRef|
00000 AREA |.text| { |TimerInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$TimerInterrupt|, PDATA, SELECTION=5, ASSOC=|.text| { |TimerInterrupt| } ; comdat associative
|$T14246| DCD |TimerInterrupt|
DCD 0x40005401
; Function compile flags: /Ogsy
00000 AREA |.text| { |TimerInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |TimerInterrupt| PROC
; 332 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M14244|
; 333 : DWORD retval = SYSINTR_NOP;
; 334 : // static int iCount = 0;
; 335 :
; 336 : //
; 337 : // update the tick count
; 338 : //
; 339 : CurTicks.QuadPart += dwReschedIncrement;
00004 e59f4140 ldr r4, [pc, #0x140]
00008 e59f0138 ldr r0, [pc, #0x138]
0000c e3a05000 mov r5, #0
00010 e5942000 ldr r2, [r4]
00014 e5901000 ldr r1, [r0]
00018 e5943004 ldr r3, [r4, #4]
0001c e0922001 adds r2, r2, r1
00020 e2a30000 adc r0, r3, #0
00024 e5842000 str r2, [r4]
00028 e5840004 str r0, [r4, #4]
; 340 :
; 341 : //
; 342 : // Print out a 1 every second. I want to make sure that we are getting ticks.
; 343 : //
; 344 : //if(iCount++ == 1000)
; 345 : //{
; 346 : // OEMWriteDebugByte('T') ;
; 347 : // iCount = 0;
; 348 : //}
; 349 :
; 350 :
; 351 : //
; 352 : // Call the profile ISR if it's enabled.
; 353 : //
; 354 : if (PProfileInterrupt)
0002c e59f0110 ldr r0, [pc, #0x110]
00030 e5901000 ldr r1, [r0]
00034 e3510000 cmp r1, #0
00038 0a000009 beq |$L14022|
; 355 : {
; 356 : retval = PProfileInterrupt();
0003c e1a0e00f mov lr, pc
00040 e12fff11 bx r1
00044 e1a05000 mov r5, r0
; 357 : if(retval == SYSINTR_RESCHED)
00048 e3550001 cmp r5, #1
0004c 1a000031 bne |$L14032|
; 358 : {
; 359 : //
; 360 : // Update the millisecond counter
; 361 : //
; 362 : CurMSec += RESCHED_PERIOD;
00050 e59f20d0 ldr r2, [pc, #0xD0]
00054 e5920000 ldr r0, [r2]
00058 e2801001 add r1, r0, #1
0005c e5821000 str r1, [r2]
; 363 : #if (CE_MAJOR_VER == 0x0003)
; 364 : DiffMSec += RESCHED_PERIOD;
; 365 : #endif
; 366 : }
; 367 : }
; 368 : else
00060 ea00002c b |$L14032|
00064 |$L14022|
; 369 : {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -