mirror of
				https://github.com/N64Recomp/N64ModernRuntime.git
				synced 2025-10-30 08:02:29 +00:00 
			
		
		
		
	Fix unplugged controller memory writes, add some missing math routines, and slightly weaken DMA alignment requirements (#117)
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				validate / ubuntu (arm64, Debug) (push) Has been cancelled
				
			
		
			
				
	
				validate / ubuntu (arm64, Release) (push) Has been cancelled
				
			
		
			
				
	
				validate / ubuntu (x64, Debug) (push) Has been cancelled
				
			
		
			
				
	
				validate / ubuntu (x64, Release) (push) Has been cancelled
				
			
		
			
				
	
				validate / windows (x64, Debug) (push) Has been cancelled
				
			
		
			
				
	
				validate / windows (x64, Release) (push) Has been cancelled
				
			
		
			
				
	
				validate / macos (arm64, Debug) (push) Has been cancelled
				
			
		
			
				
	
				validate / macos (arm64, Release) (push) Has been cancelled
				
			
		
			
				
	
				validate / macos (x64, Debug) (push) Has been cancelled
				
			
		
			
				
	
				validate / macos (x64, Release) (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	validate / ubuntu (arm64, Debug) (push) Has been cancelled
				
			validate / ubuntu (arm64, Release) (push) Has been cancelled
				
			validate / ubuntu (x64, Debug) (push) Has been cancelled
				
			validate / ubuntu (x64, Release) (push) Has been cancelled
				
			validate / windows (x64, Debug) (push) Has been cancelled
				
			validate / windows (x64, Release) (push) Has been cancelled
				
			validate / macos (arm64, Debug) (push) Has been cancelled
				
			validate / macos (arm64, Release) (push) Has been cancelled
				
			validate / macos (x64, Debug) (push) Has been cancelled
				
			validate / macos (x64, Release) (push) Has been cancelled
				
			--------- Co-authored-by: LittleCube <littlecubehax@gmail.com>
This commit is contained in:
		
							parent
							
								
									94b30d7061
								
							
						
					
					
						commit
						ba2acaeb5c
					
				
					 3 changed files with 38 additions and 5 deletions
				
			
		|  | @ -50,10 +50,12 @@ extern "C" void osContGetReadData_recomp(uint8_t* rdram, recomp_context* ctx) { | ||||||
|     osContGetReadData(dummy_data); |     osContGetReadData(dummy_data); | ||||||
| 
 | 
 | ||||||
|     for (int controller = 0; controller < MAXCONTROLLERS; controller++) { |     for (int controller = 0; controller < MAXCONTROLLERS; controller++) { | ||||||
|         MEM_H(6 * controller + 0, data) = dummy_data[controller].button; |         if (dummy_data[controller].err_no == 0) { | ||||||
|         MEM_B(6 * controller + 2, data) = dummy_data[controller].stick_x; |             MEM_H(6 * controller + 0, data) = dummy_data[controller].button; | ||||||
|         MEM_B(6 * controller + 3, data) = dummy_data[controller].stick_y; |             MEM_B(6 * controller + 2, data) = dummy_data[controller].stick_x; | ||||||
|         MEM_B(6 * controller + 4, data) = dummy_data[controller].err_no; |             MEM_B(6 * controller + 3, data) = dummy_data[controller].stick_y; | ||||||
|  |             MEM_B(6 * controller + 4, data) = dummy_data[controller].err_no; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -80,3 +80,35 @@ extern "C" void __ull_to_f_recomp(uint8_t * rdram, recomp_context * ctx) { | ||||||
| 
 | 
 | ||||||
|     ctx->f0.fl = ret; |     ctx->f0.fl = ret; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | extern "C" void __ull_rshift_recomp(uint8_t * rdram, recomp_context * ctx) { | ||||||
|  |     uint64_t a = (ctx->r4 << 32) | ((ctx->r5 << 0) & 0xFFFFFFFFu); | ||||||
|  |     uint64_t b = (ctx->r6 << 32) | ((ctx->r7 << 0) & 0xFFFFFFFFu); | ||||||
|  |     uint64_t ret = a >> b; | ||||||
|  | 
 | ||||||
|  |     ctx->r2 = (int32_t)(ret >> 32); | ||||||
|  |     ctx->r3 = (int32_t)(ret >> 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | extern "C" void __ll_to_f_recomp(uint8_t * rdram, recomp_context * ctx) { | ||||||
|  |     int64_t a = (ctx->r4 << 32) | ((ctx->r5 << 0) & 0xFFFFFFFFu); | ||||||
|  |     float ret = (float)a; | ||||||
|  | 
 | ||||||
|  |     ctx->f0.fl = ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | extern "C" void __f_to_ll_recomp(uint8_t * rdram, recomp_context * ctx) { | ||||||
|  |     int64_t ret = (int64_t)ctx->f12.fl; | ||||||
|  | 
 | ||||||
|  |     ctx->r2 = (int32_t)(ret >> 32); | ||||||
|  |     ctx->r3 = (int32_t)(ret >> 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | extern "C" void __ll_lshift_recomp(uint8_t * rdram, recomp_context * ctx) { | ||||||
|  |     uint64_t a = (ctx->r4 << 32) | ((ctx->r5 << 0) & 0xFFFFFFFFu); | ||||||
|  |     uint64_t b = (ctx->r6 << 32) | ((ctx->r7 << 0) & 0xFFFFFFFFu); | ||||||
|  |     uint64_t ret = a << b; | ||||||
|  | 
 | ||||||
|  |     ctx->r2 = (int32_t)(ret >> 32); | ||||||
|  |     ctx->r3 = (int32_t)(ret >> 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -67,7 +67,6 @@ void recomp::do_rom_read(uint8_t* rdram, gpr ram_address, uint32_t physical_addr | ||||||
|     // TODO handle misaligned DMA
 |     // TODO handle misaligned DMA
 | ||||||
|     assert((physical_addr & 0x1) == 0 && "Only PI DMA from aligned ROM addresses is currently supported"); |     assert((physical_addr & 0x1) == 0 && "Only PI DMA from aligned ROM addresses is currently supported"); | ||||||
|     assert((ram_address & 0x7) == 0 && "Only PI DMA to aligned RDRAM addresses is currently supported"); |     assert((ram_address & 0x7) == 0 && "Only PI DMA to aligned RDRAM addresses is currently supported"); | ||||||
|     assert((num_bytes & 0x1) == 0 && "Only PI DMA with aligned sizes is currently supported"); |  | ||||||
|     uint8_t* rom_addr = rom.data() + physical_addr - recomp::rom_base; |     uint8_t* rom_addr = rom.data() + physical_addr - recomp::rom_base; | ||||||
|     for (size_t i = 0; i < num_bytes; i++) { |     for (size_t i = 0; i < num_bytes; i++) { | ||||||
|         MEM_B(i, ram_address) = *rom_addr; |         MEM_B(i, ram_address) = *rom_addr; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Wiseguy
						Wiseguy