|
@@ -60,15 +60,20 @@ const
|
|
|
IRQ_IPC_SYNC : IRQ_MASK = (1 shl 16); (* IPC sync interrupt mask *)
|
|
|
IRQ_FIFO_EMPTY : IRQ_MASK = (1 shl 17); (* Send FIFO empty interrupt mask *)
|
|
|
IRQ_FIFO_NOT_EMPTY : IRQ_MASK = (1 shl 18); (* Receive FIFO empty interrupt mask *)
|
|
|
- IRQ_CARD : IRQ_MASK = (1 shl 19); (* interrupt mask *)
|
|
|
+ IRQ_CARD : IRQ_MASK = (1 shl 19); (* interrupt mask DS Card Slot *)
|
|
|
IRQ_CARD_LINE : IRQ_MASK = (1 shl 20); (* interrupt mask *)
|
|
|
IRQ_GEOMETRY_FIFO : IRQ_MASK = (1 shl 21); (* geometry FIFO interrupt mask *)
|
|
|
- IRQ_LID : IRQ_MASK = (1 shl 22); (* interrupt mask *)
|
|
|
+ IRQ_LID : IRQ_MASK = (1 shl 22); (* interrupt mask hinge *)
|
|
|
IRQ_SPI : IRQ_MASK = (1 shl 23); (* SPI interrupt mask *)
|
|
|
IRQ_WIFI : IRQ_MASK = (1 shl 24); (* WIFI interrupt mask (ARM7)*)
|
|
|
IRQ_ALL : IRQ_MASK = (not 0); //$FFFFFF ?
|
|
|
|
|
|
|
|
|
+type
|
|
|
+ IRQ_MASKSAUX = cuint;
|
|
|
+const
|
|
|
+ IRQ_POWER: IRQ_MASKSAUX = (1 shl 6); (* Power Button interrupt mask (DSi ARM7) *)
|
|
|
+
|
|
|
function IRQ_TIMER(n: cint): cint; inline;
|
|
|
|
|
|
const
|
|
@@ -77,9 +82,11 @@ const
|
|
|
|
|
|
|
|
|
const
|
|
|
- REG_IE : pcuint32 = pointer($04000210);
|
|
|
- REG_IF : pcuint32 = pointer($04000214);
|
|
|
- REG_IME : pcuint16 = pointer($04000208);
|
|
|
+ REG_IE : pcuint32 = pointer($04000210);
|
|
|
+ REG_AUXIE: pcuint32 = pointer($04000218);
|
|
|
+ REG_IF : pcuint32 = pointer($04000214);
|
|
|
+ REG_AUXIF: pcuint32 = pointer($0400021C);
|
|
|
+ REG_IME : pcuint32 = pointer($04000208);
|
|
|
|
|
|
type
|
|
|
IME_VALUE = integer;
|
|
@@ -89,7 +96,7 @@ const
|
|
|
|
|
|
|
|
|
type
|
|
|
- TVoidFunctionPointer = procedure of object;
|
|
|
+ TVoidFn = procedure of object;
|
|
|
|
|
|
var
|
|
|
// __irq_vector: array [0..0] of VoidFunctionPointer; cvar; external;
|
|
@@ -102,10 +109,11 @@ var
|
|
|
/// __irq_flags: pcuint32; cvar; external;
|
|
|
__irq_vector: Pointer; external name '__irq_vector';
|
|
|
__irq_flags: pcuint32; external name '__irq_flags';
|
|
|
+ __irq_flagsaux: pcuint32; external name '__irq_flagsaux';
|
|
|
|
|
|
|
|
|
-
|
|
|
-{$define VBLANK_INTR_WAIT_FLAGS := __irq_flags}
|
|
|
+{$define INTR_WAIT_FLAGS := __irq_flags}
|
|
|
+{$define INTR_WAIT_FLAGSAUX := __irq_flagsaux}
|
|
|
{$define IRQ_HANDLER := __irq_vector}
|
|
|
|
|
|
type
|
|
@@ -115,15 +123,20 @@ type
|
|
|
end;
|
|
|
|
|
|
procedure irqInit(); cdecl; external;
|
|
|
-procedure irqSet(irq: IRQ_MASK; handler: TVoidFunctionPointer); cdecl; external;
|
|
|
-procedure irqSet(irq: IRQ_MASK; handler: pointer); cdecl; external;
|
|
|
-procedure irqClear(irq: IRQ_MASK); cdecl; external;
|
|
|
-procedure irqInitHandler(handler: TVoidFunctionPointer); cdecl; external;
|
|
|
+procedure irqSet(irq: cuint32; handler: TVoidFn); cdecl; external;
|
|
|
+procedure irqSet(irq: cuint32; handler: pointer); cdecl; external;
|
|
|
+procedure irqSetAUX(irq: cuint32; handler: TVoidFn); cdecl; external;
|
|
|
+procedure irqSetAUX(irq: cuint32; handler: pointer); cdecl; external;
|
|
|
+procedure irqClear(irq: cuint32); cdecl; external;
|
|
|
+procedure irqClearAUX(irq: cuint32); cdecl; external;
|
|
|
+procedure irqInitHandler(handler: TVoidFn); cdecl; external;
|
|
|
procedure irqInitHandler(handler: pointer); cdecl; external;
|
|
|
procedure irqEnable(irq: cuint32); cdecl; external;
|
|
|
+procedure irqEnableAUX(irq: cuint32); cdecl; external;
|
|
|
procedure irqDisable(irq: cuint32); cdecl; external;
|
|
|
+procedure irqDisableAUX(irq: cuint32); cdecl; external;
|
|
|
|
|
|
-procedure swiIntrWait(waitForSet: cint; flags: cuint32); cdecl; external;
|
|
|
+procedure swiIntrWait(waitForSet: cuint32; flags: cuint32); cdecl; external;
|
|
|
procedure swiWaitForVBlank(); cdecl; external;
|
|
|
function enterCriticalSection(): cint; inline;
|
|
|
procedure leaveCriticalSection(oldIME: cint); inline;
|