| 191 | } |
| 192 | |
| 193 | BOOL __OSReadROM(void* buffer, s32 length, s32 offset) |
| 194 | { |
| 195 | BOOL err; |
| 196 | u32 cmd; |
| 197 | |
| 198 | DCInvalidateRange(buffer, (u32)length); |
| 199 | |
| 200 | if (!EXILock(RTC_CHAN, RTC_DEV, 0)) |
| 201 | { |
| 202 | return FALSE; |
| 203 | } |
| 204 | if (!EXISelect(RTC_CHAN, RTC_DEV, RTC_FREQ)) |
| 205 | { |
| 206 | EXIUnlock(RTC_CHAN); |
| 207 | return FALSE; |
| 208 | } |
| 209 | |
| 210 | cmd = (u32)(offset << 6); |
| 211 | err = FALSE; |
| 212 | err |= !EXIImm(RTC_CHAN, &cmd, 4, 1, NULL); |
| 213 | err |= !EXISync(RTC_CHAN); |
| 214 | err |= !EXIDma(RTC_CHAN, buffer, length, 0, NULL); |
| 215 | err |= !EXISync(RTC_CHAN); |
| 216 | err |= !EXIDeselect(RTC_CHAN); |
| 217 | EXIUnlock(RTC_CHAN); |
| 218 | |
| 219 | return !err; |
| 220 | } |
| 221 | |
| 222 | inline OSSram* __OSLockSramHACK() |
| 223 | { |