35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# Nuked-OPN2
							 | 
						||
| 
								 | 
							
								High accuracy Yamaha YM3438(OPN2) emulator.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The YM3438 is a CMOS variant of the YM2612 used in Sega MegaDrive(Genesis) and FM Towns.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Genesis Plus GX fork with this core integrated is available here: https://github.com/nukeykt/Genesis-Plus-GX
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Features:
							 | 
						||
| 
								 | 
							
								- Based on YM3438 die shot reverse engineering and thus provides very high emulation accuracy.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Cycle-accurate.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Undocumented registers/features emulation.
							 | 
						||
| 
								 | 
							
								- SSG-EG, CSM mode emulation.
							 | 
						||
| 
								 | 
							
								- Compatible with the YM2612.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# API documention
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								void OPN2_Reset(ym3438_t *chip) - Reset emulated chip
							 | 
						||
| 
								 | 
							
								void OPN2_Clock(ym3438_t *chip, Bit32s *buffer) - Advances emulated chip state by 1 internal clock(6 master clocks). Writes signed 9-bit MOL, MOR pin states to buffer. 
							 | 
						||
| 
								 | 
							
								void OPN2_Write(ym3438_t *chip, Bit32u port, Bit8u data) - Write 8-bit data to port.
							 | 
						||
| 
								 | 
							
								void OPN2_SetTestPin(ym3438_t *chip, Bit32u value) - Set TEST pin value.
							 | 
						||
| 
								 | 
							
								Bit32u OPN2_ReadTestPin(ym3438_t *chip) - Read TEST pin value.
							 | 
						||
| 
								 | 
							
								Bit32u OPN2_ReadIRQPin(ym3438_t *chip) - Read IRQ pin value.
							 | 
						||
| 
								 | 
							
								Bit8u OPN2_Read(ym3438_t *chip, Bit32u port) - Read chip status.
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Samples
							 | 
						||
| 
								 | 
							
								Sonic the Hedgehog:
							 | 
						||
| 
								 | 
							
								https://youtu.be/ImmKy_-pJ8g
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Sega CD BIOS v1.10:
							 | 
						||
| 
								 | 
							
								https://youtu.be/s-8ASMbtojQ
							 | 
						||
| 
								 | 
							
								
							 |