6#ifndef __LIBDRAGON_N64SYS_H
7#define __LIBDRAGON_N64SYS_H
41#define RCP_FREQUENCY (__boot_consoletype ? 96000000 : 62500000)
46#define CPU_FREQUENCY (__boot_consoletype ? 144000000 : 93750000)
51#define KSEG0_START_ADDR ((void*)0x80000000)
61#define UncachedAddr(_addr) ((void *)(((unsigned long)(_addr))|0x20000000))
71#define UncachedShortAddr(_addr) ((short *)(((unsigned long)(_addr))|0x20000000))
81#define UncachedUShortAddr(_addr) ((unsigned short *)(((unsigned long)(_addr))|0x20000000))
91#define UncachedLongAddr(_addr) ((long *)(((unsigned long)(_addr))|0x20000000))
101#define UncachedULongAddr(_addr) ((unsigned long *)(((unsigned long)(_addr))|0x20000000))
111#define CachedAddr(_addr) ((void *)(((unsigned long)(_addr))&~0x20000000))
121#define PhysicalAddr(_addr) ({ \
122 const volatile void *_addrp = (_addr); \
123 (((unsigned long)(_addrp))&~0xE0000000); \
138#define HEAP_START_ADDR ((void*)__bss_end)
147#define MEMORY_BARRIER() asm volatile ("" : : : "memory")
168#define TICKS_READ() C0_COUNT()
175#define TICKS_PER_SECOND (CPU_FREQUENCY/2)
183#define TICKS_DISTANCE(from, to) ((int32_t)((uint32_t)(to) - (uint32_t)(from)))
186#define TICKS_SINCE(t0) TICKS_DISTANCE(t0, TICKS_READ())
200#define TICKS_BEFORE(t1, t2) ({ TICKS_DISTANCE(t1, t2) > 0; })
205#define TICKS_FROM_MS(val) (((val) * (TICKS_PER_SECOND / 1000)))
210#define TICKS_FROM_US(val) (((val) * (8 * TICKS_PER_SECOND / 1000000) / 8))
215#define TICKS_TO_US(val) (((val) * 8 / (8 * TICKS_PER_SECOND / 1000000)))
220#define TICKS_TO_MS(val) (((val) / (TICKS_PER_SECOND / 1000)))
306#define data_cache_hit_invalidate(addr_, sz_) ({ \
307 void *addr = (addr_); unsigned long sz = (sz_); \
308 assert(((uint32_t)addr % 16) == 0 && (sz % 16) == 0); \
309 __data_cache_hit_invalidate(addr, sz); \
501__attribute__((deprecated(
"use get_ticks instead")))
502static inline volatile
unsigned long read_count(
void) {
510__attribute__((deprecated(
"querying CIC type is not supported")))
511static inline
int sys_get_boot_cic() {
return 6102; }
512__attribute__((deprecated(
"cannot set CIC type at runtime, but this is not required anymore")))
513static inline
void sys_set_boot_cic(
int bc) {}
uint64_t get_ticks_us(void)
Read the number of microseconds since system startup.
Definition n64sys.c:157
void data_cache_index_writeback_invalidate(volatile void *, unsigned long)
Force a data cache index writeback invalidate over a memory region.
Definition n64sys.c:63
reset_type_t
Reset types.
Definition n64sys.h:483
bool is_memory_expanded()
Is expansion pak in use.
Definition n64sys.c:132
void wait_ms(unsigned long wait_ms)
Spin wait until the number of milliseconds have elapsed.
Definition n64sys.c:173
uint64_t get_ticks(void)
Read the number of ticks since system startup.
Definition n64sys.c:148
void inst_cache_invalidate_all(void)
Force an instruction cache invalidate over whole memory.
Definition n64sys.c:89
int get_memory_size()
Get amount of available memory.
Definition n64sys.c:127
reset_type_t sys_reset_type(void)
Get reset type.
Definition n64sys.c:143
tv_type_t get_tv_type()
Is system NTSC/PAL/MPAL.
Definition n64sys.c:138
char __rom_end[]
Symbol at the end of code, data, and sdata (set by the linker)
bool sys_bbplayer(void)
Return true if we are running on a iQue player.
Definition n64sys.h:228
void __data_cache_hit_invalidate(volatile void *addr, unsigned long length)
Underlying implementation of data_cache_hit_invalidate.
Definition n64sys.c:53
tv_type_t
Type of TV video output.
Definition n64sys.h:467
void inst_cache_hit_writeback(volatile const void *, unsigned long)
Force an instruction cache writeback over a memory region.
Definition n64sys.c:74
void data_cache_hit_writeback(volatile const void *, unsigned long)
Force a data cache writeback over a memory region.
Definition n64sys.c:47
void * malloc_uncached_aligned(int align, size_t size)
Allocate a buffer that will be accessed as uncached memory, specifying alignment.
Definition n64sys.c:100
void data_cache_writeback_invalidate_all(void)
Force a data cache writeback invalidate over whole memory.
Definition n64sys.c:68
void inst_cache_hit_invalidate(volatile void *, unsigned long)
Force an instruction cache invalidate over a memory region.
Definition n64sys.c:79
void data_cache_hit_writeback_invalidate(volatile void *, unsigned long)
Force a data cache writeback invalidate over a memory region.
Definition n64sys.c:58
char __bss_end[]
Symbol at the end of code, data, sdata, and bss (set by the linker)
void free_uncached(void *buf)
Free an uncached memory buffer.
Definition n64sys.c:122
void inst_cache_index_invalidate(volatile void *, unsigned long)
Force an instruction cache index invalidate over a memory region.
Definition n64sys.c:84
char __libdragon_text_start[]
Symbol at the start of code (start of ROM contents after header)
uint64_t get_ticks_ms(void)
Read the number of millisecounds since system startup.
Definition n64sys.c:162
void wait_ticks(unsigned long wait)
Spin wait until the number of ticks have elapsed.
Definition n64sys.c:167
void * malloc_uncached(size_t size)
Allocate a buffer that will be accessed as uncached memory.
Definition n64sys.c:95
@ RESET_COLD
Cold reset (power on)
Definition n64sys.h:484
@ RESET_WARM
Warm reset (reset button)
Definition n64sys.h:485
@ TV_MPAL
Video output is M-PAL.
Definition n64sys.h:470
@ TV_PAL
Video output is PAL.
Definition n64sys.h:468
@ TV_NTSC
Video output is NTSC.
Definition n64sys.h:469
int __boot_consoletype
Console type as detected by IPL3.
Definition n64sys.c:22
int wait(int *status)
Wait for a child process.
Definition system.c:1130