/* Authored RAM program through the production dirty-RAM CPU and GPU service. * The declared 11-instruction synthetic ROM prologue has no device work except * cache-control/SR setup and costs55 clocks. This fixture begins at its RAM * entry, with those explicit prologue results; it is not a BIOS/retail test. */ #include "cpu_state.h" #include "dirty_ram_interp.h" #include "psx_icache.h" #include "psx_cyc.h" #include "source_gpu_runtime.h" #include "gpu.h" #include "gpu_render.h" #include "timers.h" #include "interrupts.h" #include "dma.h" #include #include #include extern CPUState *debug_cpu_ptr; extern void memory_init(const char *); extern uint8_t *memory_get_ram_ptr(void); extern void memory_set_sr_ptr(const uint32_t *); extern void psx_write_word(uint32_t,uint32_t); extern uint32_t psx_read_word(uint32_t); extern void psx_write_half(uint32_t,uint16_t); extern uint16_t psx_read_half(uint32_t); extern void psx_write_byte(uint32_t,uint8_t); extern uint8_t psx_read_byte(uint32_t); static uint32_t labels[128],label_count,seen,observed; static CPUState cpu; extern uint32_t __real_gpu_read_gpustat(void); uint32_t __wrap_gpu_read_gpustat(void) { SourceGPUCommandProjection s;source_gpu_runtime_copy(0,&s); uint32_t value=__real_gpu_read_gpustat(); printf("gpustat %llu %08x %d %u %u %llu\n",(unsigned long long)psx_get_cycle_count(),value,s.budget,s.phase,s.count,(unsigned long long)s.last_update); return value; } static void trace(uint32_t pc) { assert(++observed<200000); if(observed<20)printf("trace %08x %llu\n",pc,(unsigned long long)psx_get_cycle_count()); for(unsigned i=0;i