9#ifndef __LIBDRAGON_N64SYS_H
10#define __LIBDRAGON_N64SYS_H
44#define RCP_FREQUENCY (__boot_consoletype ? 96000000 : 62500000)
49#define CPU_FREQUENCY (__boot_consoletype ? 144000000 : 93750000)
54#define KSEG0_START_ADDR ((void*)0x80000000)
64#define UncachedAddr(_addr) ((void *)(((unsigned long)(_addr))|0x20000000))
74#define UncachedShortAddr(_addr) ((short *)(((unsigned long)(_addr))|0x20000000))
84#define UncachedUShortAddr(_addr) ((unsigned short *)(((unsigned long)(_addr))|0x20000000))
94#define UncachedLongAddr(_addr) ((long *)(((unsigned long)(_addr))|0x20000000))
104#define UncachedULongAddr(_addr) ((unsigned long *)(((unsigned long)(_addr))|0x20000000))
114#define CachedAddr(_addr) ((void *)(((unsigned long)(_addr))&~0x20000000))
124#define PhysicalAddr(_addr) ({ \
125 const volatile void *_addrp = (_addr); \
126 (((unsigned long)(_addrp))&~0xE0000000); \
141#define HEAP_START_ADDR ((void*)__bss_end)
150#define MEMORY_BARRIER() asm volatile ("" : : : "memory")
171#define TICKS_READ() C0_COUNT()
178#define TICKS_PER_SECOND (CPU_FREQUENCY/2)
186#define TICKS_DISTANCE(from, to) ((int32_t)((uint32_t)(to) - (uint32_t)(from)))
189#define TICKS_SINCE(t0) TICKS_DISTANCE(t0, TICKS_READ())
203#define TICKS_BEFORE(t1, t2) ({ TICKS_DISTANCE(t1, t2) > 0; })
208#define TICKS_FROM_MS(val) (((val) * (TICKS_PER_SECOND / 1000)))
213#define TICKS_FROM_US(val) (((val) * (8 * TICKS_PER_SECOND / 1000000) / 8))
218#define TICKS_TO_US(val) (((val) * 8 / (8 * TICKS_PER_SECOND / 1000000)))
223#define TICKS_TO_MS(val) (((val) / (TICKS_PER_SECOND / 1000)))
309#define data_cache_hit_invalidate(addr_, sz_) ({ \
310 void *addr = (addr_); unsigned long sz = (sz_); \
311 assert(((uint32_t)addr % 16) == 0 && (sz % 16) == 0); \
312 __data_cache_hit_invalidate(addr, sz); \
504__attribute__((deprecated(
"use get_ticks instead")))
505static inline volatile
unsigned long read_count(
void) {
513__attribute__((deprecated(
"querying CIC type is not supported")))
514static inline
int sys_get_boot_cic() {
return 6102; }
515__attribute__((deprecated(
"cannot set CIC type at runtime, but this is not required anymore")))
516static 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:159
void data_cache_index_writeback_invalidate(volatile void *, unsigned long)
Force a data cache index writeback invalidate over a memory region.
Definition n64sys.c:65
reset_type_t
Reset types.
Definition n64sys.h:486
bool is_memory_expanded()
Is expansion pak in use.
Definition n64sys.c:134
void wait_ms(unsigned long wait_ms)
Spin wait until the number of milliseconds have elapsed.
Definition n64sys.c:175
uint64_t get_ticks(void)
Read the number of ticks since system startup.
Definition n64sys.c:150
void inst_cache_invalidate_all(void)
Force an instruction cache invalidate over whole memory.
Definition n64sys.c:91
int get_memory_size()
Get amount of available memory.
Definition n64sys.c:129
reset_type_t sys_reset_type(void)
Get reset type.
Definition n64sys.c:145
tv_type_t get_tv_type()
Is system NTSC/PAL/MPAL.
Definition n64sys.c:140
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:231
void __data_cache_hit_invalidate(volatile void *addr, unsigned long length)
Underlying implementation of data_cache_hit_invalidate.
Definition n64sys.c:55
tv_type_t
Type of TV video output.
Definition n64sys.h:470
void inst_cache_hit_writeback(volatile const void *, unsigned long)
Force an instruction cache writeback over a memory region.
Definition n64sys.c:76
void data_cache_hit_writeback(volatile const void *, unsigned long)
Force a data cache writeback over a memory region.
Definition n64sys.c:49
void * malloc_uncached_aligned(int align, size_t size)
Allocate a buffer that will be accessed as uncached memory, specifying alignment.
Definition n64sys.c:102
void data_cache_writeback_invalidate_all(void)
Force a data cache writeback invalidate over whole memory.
Definition n64sys.c:70
void inst_cache_hit_invalidate(volatile void *, unsigned long)
Force an instruction cache invalidate over a memory region.
Definition n64sys.c:81
void data_cache_hit_writeback_invalidate(volatile void *, unsigned long)
Force a data cache writeback invalidate over a memory region.
Definition n64sys.c:60
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:124
void inst_cache_index_invalidate(volatile void *, unsigned long)
Force an instruction cache index invalidate over a memory region.
Definition n64sys.c:86
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:164
void wait_ticks(unsigned long wait)
Spin wait until the number of ticks have elapsed.
Definition n64sys.c:169
void * malloc_uncached(size_t size)
Allocate a buffer that will be accessed as uncached memory.
Definition n64sys.c:97
@ RESET_COLD
Cold reset (power on)
Definition n64sys.h:487
@ RESET_WARM
Warm reset (reset button)
Definition n64sys.h:488
@ TV_MPAL
Video output is M-PAL.
Definition n64sys.h:473
@ TV_PAL
Video output is PAL.
Definition n64sys.h:471
@ TV_NTSC
Video output is NTSC.
Definition n64sys.h:472
int __boot_consoletype
Console type as detected by IPL3.
Definition n64sys.c:24
int wait(int *status)
Wait for a child process.
Definition system.c:1131