/packages/libndsfpc/src/nds/system.inc
https://github.com/slibre/freepascal · Pascal · 305 lines · 212 code · 66 blank · 27 comment · 0 complexity · 02bb1faf775b5eeb3379eb7b498994a7 MD5 · raw file
- {$ifdef NDS_INTERFACE}
- const
- REG_DISPSTAT : pcuint16 = pointer($04000004);
-
- type
- DISP_BITS = cint;
- const
- DISP_IN_VBLANK : DISP_BITS = (1 shl 0);
- DISP_IN_HBLANK : DISP_BITS = (1 shl 1);
- DISP_YTRIGGERED : DISP_BITS = (1 shl 2);
- DISP_VBLANK_IRQ : DISP_BITS = (1 shl 3);
- DISP_HBLANK_IRQ : DISP_BITS = (1 shl 4);
- DISP_YTRIGGER_IRQ : DISP_BITS = (1 shl 5);
- REG_VCOUNT : pcuint16 = pointer($04000006);
- HALT_CR : pcuint16 = pointer($04000300);
- REG_POWERCNT : pcuint16 = pointer($04000304);
- REG_DSIMODE : pcuint32 = pointer($04004000);
- procedure SetYtrigger(Yvalue: cint); inline;
- const
- PM_ARM9_DIRECT = (1 shl 16);
- type
- PM_Bits = cint;
- const
- PM_SOUND_AMP : PM_Bits = (1 shl 0);
- PM_SOUND_MUTE : PM_Bits = (1 shl 1);
- PM_BACKLIGHT_BOTTOM : PM_Bits = (1 shl 2);
- PM_BACKLIGHT_TOP : PM_Bits = (1 shl 3);
- PM_SYSTEM_PWR : PM_Bits = (1 shl 6);
- POWER_LCD : PM_Bits = PM_ARM9_DIRECT or (1 shl 0);
- POWER_2D_A : PM_Bits = PM_ARM9_DIRECT or (1 shl 1);
- POWER_MATRIX : PM_Bits = PM_ARM9_DIRECT or (1 shl 2);
- POWER_3D_CORE : PM_Bits = PM_ARM9_DIRECT or (1 shl 3);
- POWER_2D_B : PM_Bits = PM_ARM9_DIRECT or (1 shl 9);
- POWER_SWAP_LCDS: PM_Bits = PM_ARM9_DIRECT or (1 shl 15);
- // POWER_ALL_2D : PM_Bits = PM_ARM9_DIRECT or POWER_LCD or POWER_2D_A or POWER_2D_B;
- POWER_ALL_2D : PM_Bits = (1 shl 16) or (1 shl 0) or (1 shl 1) or (1 shl 9);
- // POWER_ALL : PM_Bits = PM_ARM9_DIRECT or POWER_ALL_2D or POWER_3D_CORE or POWER_MATRIX;
- POWER_ALL : PM_Bits = (1 shl 16) or (1 shl 0) or (1 shl 1) or (1 shl 9) or (1 shl 3) or (1 shl 2);
- //procedure SystemSleep(); cdecl; external;
- procedure ledBlink(bm: cint); cdecl; external;
- {$ifdef ARM9}
- procedure SystemSleep(); cdecl; external;
- procedure powerOn(bits: cint); cdecl; external;
- procedure powerOff(bits: cint); cdecl; external;
- procedure systemMsgHandler(bytes: cint; user_data: pointer); cdecl; external;
- procedure systemValueHandler(value: cuint32; data: pointer); cdecl; external;
- procedure lcdSwap(); inline;
- procedure lcdMainOnTop(); inline;
- procedure lcdMainOnBottom(); inline;
- procedure systemShutDown(); inline;
- function getBatteryLevel(): cuint32; cdecl; external;
- procedure setVectorBase(highVector: cint); cdecl; external;
- type
- sysVectors_t = packed record
- reset: cuint32;
- undefined: cuint32;
- swi: cuint32;
- prefetch_abort: cuint32;
- data_abort: cuint32;
- fiq: cuint32;
- end;
- sysVectors = sysVectors_t;
- PsysVectors = ^sysVectors;
- var
- SystemVectors: sysVectors; cvar; external;
- //void setSDcallback(void(*callback)(int));
- procedure setSDcallback(callback: pointer); cdecl; external; // ??
- // Helper functions for heap size
- //! returns current start of heap space
- function getHeapStart(): pcuint8; cdecl; external;
- //! returns current end of heap space
- function getHeapEnd(): pcuint8; cdecl; external;
- //! returns current heap limit
- function getHeapLimit(): pcuint8; cdecl; external;
- {$endif ARM9}
- {$ifdef ARM7}
- type
- ARM7_power = cint;
- const
- POWER_SOUND : ARM7_power = (1 shl 0);
- PM_CONTROL_REG : ARM7_power = 0;
- PM_BATTERY_REG : ARM7_power = 1;
- PM_AMPLIFIER_REG : ARM7_power = 2;
- PM_READ_REGISTER : ARM7_power = (1 shl 7);
- PM_AMP_OFFSET : ARM7_power = 2;
- PM_GAIN_OFFSET : ARM7_power = 3;
- PM_BACKLIGHT_LEVEL : ARM7_power = 4;
- PM_GAIN_20 : ARM7_power = 0;
- PM_GAIN_40 : ARM7_power = 1;
- PM_GAIN_80 : ARM7_power = 2;
- PM_GAIN_160 : ARM7_power = 3;
- PM_AMP_ON : ARM7_power = 1;
- PM_AMP_OFF : ARM7_power = 0;
- function PM_LED_CONTROL(m: cint): cint; inline;
- procedure installSystemFIFO(); cdecl; external;
- procedure systemSleep(); cdecl; external;
- function sleepEnabled(): cint; cdecl; external;
- function writePowerManagement(reg, command: cint): cint; cdecl; external;
- function readPowerManagement(reg: cint): cint; inline;
- procedure powerOn(bits: cint); inline;
- procedure powerOff(bits: cint); inline;
- procedure readUserSettings(); cdecl; external;
- procedure systemShutDown(); cdecl; external;
- {$endif ARM7}
- type
- BACKLIGHT_LEVELS = cint;
- const
- BACKLIGHT_LOW : BACKLIGHT_LEVELS = 0;
- BACKLIGHT_MED : BACKLIGHT_LEVELS = 1;
- BACKLIGHT_HIGH : BACKLIGHT_LEVELS = 2;
- BACKLIGHT_MAX : BACKLIGHT_LEVELS = 3;
- type
- tPERSONAL_DATA = bitpacked record
- RESERVED0: array [0..1] of cuint8;
-
- theme: cuint8;
- birthMonth: cuint8;
- birthDay: cuint8;
-
- RESERVED1: array [0..0] of cuint8;
-
- name: array [0..9] of cint16;
- nameLen: cuint16;
-
- message: array [0..25] of cint16;
- messageLen: cuint16;
-
- alarmHour: cuint8;
- alarmMinute: cuint8;
-
- RESERVED2: array [0..3] of cuint8;
-
- calX1: cuint16;
- calY1: cuint16;
- calX1px: cuint8;
- calY1px: cuint8;
-
- calX2: cuint16;
- calY2: cuint16;
- calX2px: cuint8;
- calY2px: cuint8;
-
-
- _user_data: packed record
- language: 0..3;
- gbaScreen: 0..1;
- defaultBrightness: 0..2;
- autoMode: 0..1;
- RESERVED5: 0..2;
- settingsLost: 0..1;
- RESERVED6: 0..6;
- end;
- RESERVED3: cuint16;
- rtcOffset: cuint32;
- RESERVED4: cuint32;
- end;
- PERSONAL_DATA = tPERSONAL_DATA;
- PPERSONAL_DATA = ^tPERSONAL_DATA;
- const
- PersonalData : PPERSONAL_DATA = pointer($2FFFC80);
- type
- RTCtime = packed record
- year: cuint8; // add 2000 to get 4 digit year
- month: cuint8; // 1 to 12
- day: cuint8; // 1 to (days in month)
- weekday: cuint8; // day of week
- hours: cuint8; // 0 to 11 for AM, 52 to 63 for PM
- minutes: cuint8; // 0 to 59
- seconds: cuint8; // 0 to 59
- // padding: cuint8;
- end;
- const
- ARGV_MAGIC = $5f617267;
- type
- ppcchar = ^pcchar;
- __argv = record
- argvMagic: cint; // argv magic number, set to 0x5f617267 ('_arg') if valid
- commandLine: pcchar; // base address of command line, set of null terminated strings
- length: cint; // total length of command line
- argc: integer;
- argv: ppcchar;
- dummy: cint; // internal use
- host: cuint32; // internal use, host ip for dslink
- end;
- Targv = __argv;
- Pargv = ^Targv;
- const
- __system_argv: Pargv = pointer($02FFFE70);
- const
- BOOTSIG = $62757473746F6F62; // ULL?
- type
- __bootstub = packed record // packed ?
- bootsig: cuint64;
- arm9reboot: VoidFn;
- arm7reboot: VoidFn;
- bootsize: cuint32;
- end;
- {$ifdef ARM9}
- //procedure memCached(address: pointer); cdecl; external;
- function memCached(address: pointer): pointer; cdecl; external;
- //procedure memUncached(address: pointer); cdecl; external;
- function memUncached(address: pointer): pointer; cdecl; external;
- procedure resetARM7(address: cuint32); cdecl; external;
- {$endif ARM9}
- {$ifdef ARM7}
- procedure resetARM9(address: cuint32); cdecl; external;
- {$endif ARM7}
- {$endif NDS_INTERFACE}
- {$ifdef NDS_IMPLEMENTATION}
- procedure SetYtrigger(Yvalue: cint); inline;
- begin
- REG_DISPSTAT^ := (REG_DISPSTAT^ and $007F ) or (Yvalue shl 8) or (( Yvalue and $100 ) shr 1);
- end;
- {$ifdef ARM9}
- procedure lcdSwap(); inline;
- begin
- REG_POWERCNT^ := REG_POWERCNT^ xor POWER_SWAP_LCDS;
- end;
- procedure lcdMainOnTop(); inline;
- begin
- REG_POWERCNT^ := REG_POWERCNT^ or cint(POWER_SWAP_LCDS);
- end;
- procedure lcdMainOnBottom(); inline;
- begin
- REG_POWERCNT^ := REG_POWERCNT^ and (not cint(POWER_SWAP_LCDS));
- end;
- procedure systemShutDown(); inline;
- begin
- powerOn(PM_SYSTEM_PWR);
- end;
- {$endif ARM9}
- {$ifdef ARM7}
- function PM_LED_CONTROL(m: cint): cint; inline;
- begin
- result := (m) shl 4;
- end;
- function readPowerManagement(reg: cint): cint; inline;
- begin
- result := writePowerManagement(reg or PM_READ_REGISTER, 0);
- end;
- procedure powerOn(bits: cint); inline;
- begin
- REG_POWERCNT^ := REG_POWERCNT^ or bits;
- end;
- procedure powerOff(bits: cint); inline;
- begin
- REG_POWERCNT^ := REG_POWERCNT^ and not bits;
- end;
- {$endif ARM7}
- {$endif NDS_IMPLEMENTATION}