PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
timrman.h
Go to the documentation of this file.
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright (c) 2005 linuzappz <linuzappz@hotmail.com>
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
16#ifndef __TIMRMAN_H__
17#define __TIMRMAN_H__
18
19#include <types.h>
20#include <irx.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/* Documentation on the old module's SetTimerCompare() and SetTimerMode() functions is difficult because SCE had replaced them
27 with a single function within later SDK versions: SetupHardTimer().
28
29 source = counter input (see below).
30 size = counter width (either 16 or 32).
31 prescale = counter input scale (e.g. for a prescale of 256 with a SYSCLOCK (36.8MHz) source, 36864000/256=144 ticks per msec)
32
33 Mode bits:
34 Value Bit(s) Description
35 0x0001 1 Enable gate
36 0x0002 2 Gate count mode
37 0x0004 3 Gate count mode
38 0x0008 4 Reset on target
39 0x0010 5 Interrupt on target
40 0x0020 6 Interrupt on overflow
41 0x0040 7 ??? (Repeat?)
42 0x0080 8 ??? (Clears interrupt bit on assertion?)
43 0x0100 9 "uses hblank on counters 1 and 3, and PSXCLOCK on counter 0"
44 0x0200 10 1/8 prescale (counters 0-2 only)
45 0x0400 11 Interrupt (status)
46 0x0800 12 Target (status)
47 0x1000 13 Overflow (status)
48 0x2000 14 1/8 prescale (counters 3-5 only)
49 0x4000 15 1/16 prescale
50 0x6000 14+15 1/256 prescale
51
52 Sources:
53 TC_SYSCLOCK 1 36.864MHz (MIPS R3000A in 36.864MHz IOP mode)
54 TC_PIXEL 2 13.5MHz (Note: regardless of the actual screen mode)
55 TC_HLINE 4 NTSC 15.73426573KHz (858 pixel clock), PAL 15.625KHz (864 pixel clock)
56 TC_HOLD 8 ??? (The FPS2BIOS code has this value too, but it isn't documented by Sony)
57
58 Available timers:
59 Name Source(s) Gate signal Width Prescale Notes
60 ----------------------------------------------------------------------------------------
61 RTC0 SYSCLOCK|PIXEL|HOLD H-blank 16 1 In use by PADMAN
62 RTC1 SYSCLOCK|HLINE|HOLD V-blank 16 1 In use by PADMAN
63 RTC2 SYSCLOCK None 16 8
64 RTC3 SYSCLOCK|HLINE V-blank 32 1
65 RTC4 SYSCLOCK None 32 256
66 RTC5 SYSCLOCK None 32 256 */
67
68void *GetTimersTable();
69
70int AllocHardTimer(int source, int size, int prescale);
71int ReferHardTimer(int source, int size, int mode, int modemask);
72int FreeHardTimer(int timid);
73
74void SetTimerMode(int timid, int mode);
75
76u32 GetTimerStatus(int timid);
77
78void SetTimerCounter(int timid, u32 count);
79u32 GetTimerCounter(int timid);
80
81void SetTimerCompare(int timid, u32 compare);
82u32 GetTimerCompare(int timid);
83
84void SetHoldMode(int holdnum, int mode);
85u32 GetHoldMode(int holdnum);
86
87u32 GetHoldReg(int holdnum);
88
89int GetHardTimerIntrCode(int timid);
90
91// guessed name
92u32 GetTimerMode(int timid);
93u32 (*GetTimerReadFunc(int timid))();
94
95// clang-format off
96#define timrman_IMPORTS \
97 timrman_IMPORTS_start \
98 \
99 I_AllocHardTimer \
100 I_ReferHardTimer \
101 I_FreeHardTimer \
102 \
103 I_SetTimerMode \
104 \
105 I_GetTimerStatus \
106 \
107 I_SetTimerCounter \
108 I_GetTimerCounter \
109 \
110 I_SetTimerCompare \
111 I_GetTimerCompare \
112 \
113 I_SetHoldMode \
114 I_GetHoldMode \
115 \
116 I_GetHardTimerIntrCode \
117 \
118 timrman_IMPORTS_end END_IMPORT_TABLE
119// clang-format on
120
121#define timrman_IMPORTS_start DECLARE_IMPORT_TABLE(timrman, 1, 1)
122#define timrman_IMPORTS_end END_IMPORT_TABLE
123
124#define I_GetTimersTable DECLARE_IMPORT(3, GetTimersTable)
125#define I_AllocHardTimer DECLARE_IMPORT(4, AllocHardTimer)
126#define I_ReferHardTimer DECLARE_IMPORT(5, ReferHardTimer)
127#define I_FreeHardTimer DECLARE_IMPORT(6, FreeHardTimer)
128#define I_SetTimerMode DECLARE_IMPORT(7, SetTimerMode)
129#define I_GetTimerStatus DECLARE_IMPORT(8, GetTimerStatus)
130#define I_SetTimerCounter DECLARE_IMPORT(9, SetTimerCounter)
131#define I_GetTimerCounter DECLARE_IMPORT(10, GetTimerCounter)
132#define I_SetTimerCompare DECLARE_IMPORT(11, SetTimerCompare)
133#define I_GetTimerCompare DECLARE_IMPORT(12, GetTimerCompare)
134#define I_SetHoldMode DECLARE_IMPORT(13, SetHoldMode)
135#define I_GetHoldMode DECLARE_IMPORT(14, GetHoldMode)
136#define I_GetHoldReg DECLARE_IMPORT(15, GetHoldReg)
137#define I_GetHardTimerIntrCode DECLARE_IMPORT(16, GetHardTimerIntrCode)
138#define I_GetTimerMode DECLARE_IMPORT(17, GetTimerMode)
139#define I_GetTimerReadFunc DECLARE_IMPORT(18, GetTimerReadFunc)
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif /* __TIMRMAN_H__ */
u32 count
start sector of fragmented bd/file