Add an adlib command register to the gus
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1812
This commit is contained in:
		
							parent
							
								
									464bba5819
								
							
						
					
					
						commit
						f6938602bd
					
				
					 2 changed files with 10 additions and 11 deletions
				
			
		|  | @ -26,6 +26,7 @@ enum OPL_Mode { | |||
| 
 | ||||
| void OPL_Init(Section* sec,Bitu base,OPL_Mode mode,Bitu rate); | ||||
| void CMS_Init(Section* sec,Bitu base,Bitu rate); | ||||
| extern Bit8u adlib_commandreg; | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,7 +43,9 @@ static Bit8u dmatable[6] = { 3, 1, 5, 5, 6, 7 }; | |||
| 
 | ||||
| static Bit8u GUSRam[1024*1024]; // 1024K of GUS Ram
 | ||||
| 
 | ||||
| Bit32s AutoAmp=1024; | ||||
| static Bit32s AutoAmp=1024; | ||||
| 
 | ||||
| Bit8u adlib_commandreg; | ||||
| 
 | ||||
| struct GFGus { | ||||
| 	Bit8u gRegSelect; | ||||
|  | @ -62,16 +64,12 @@ struct GFGus { | |||
| 	Bit32s mupersamp; | ||||
| 	Bit32s muperchan; | ||||
| 
 | ||||
| 	 | ||||
| 	Bit8u timerReg; | ||||
| 	struct GusTimer { | ||||
| 		Bit16u bytetimer; | ||||
| 		Bit32s countdown; | ||||
| 		Bit32s setting; | ||||
| 		bool active; | ||||
| 	} timers[2]; | ||||
| 
 | ||||
| 
 | ||||
| 	Bit32u rate; | ||||
| 	Bit16u portbase; | ||||
| 	Bit16u dma1; | ||||
|  | @ -511,7 +509,7 @@ static void GUSReset(void) | |||
| { | ||||
| 	if((myGUS.gRegData & 0x1) == 0x1) { | ||||
| 		// Reset
 | ||||
| 		myGUS.timerReg = 85; | ||||
| 		adlib_commandreg = 85; | ||||
| 		memset(&myGUS.irq, 0, sizeof(myGUS.irq)); | ||||
| 	} | ||||
| 	if((myGUS.gRegData & 0x4) != 0) { | ||||
|  | @ -770,7 +768,6 @@ static void ExecuteGlobRegister(void) { | |||
| 
 | ||||
| 
 | ||||
| static Bitu read_gus(Bitu port,Bitu iolen) { | ||||
| 
 | ||||
| 	switch(port - GUS_BASE) { | ||||
| 	case 0x206: | ||||
| 		Bit8u temp; | ||||
|  | @ -788,13 +785,12 @@ static Bitu read_gus(Bitu port,Bitu iolen) { | |||
| 	case 0x208: | ||||
| 		Bit8u tmptime; | ||||
| 		tmptime = 0; | ||||
| 
 | ||||
| 		if(myGUS.irq.T1) tmptime |= (1 << 6); | ||||
| 		if(myGUS.irq.T2) tmptime |= (1 << 5); | ||||
| 		if((myGUS.irq.T1) || (myGUS.irq.T2)) tmptime |= (1 << 7); | ||||
| 		return tmptime; | ||||
| 	case 0x20a: | ||||
| 		return myGUS.timerReg; | ||||
| 		return adlib_commandreg; | ||||
| 	case 0x302: | ||||
| 		return (Bit8u)myGUS.gCurChannel; | ||||
| 	case 0x303: | ||||
|  | @ -825,12 +821,14 @@ static void write_gus(Bitu port,Bitu val,Bitu iolen) { | |||
| 		myGUS.mixControl = val; | ||||
| 		break; | ||||
| 	case 0x208: | ||||
| 		myGUS.timerReg = val; | ||||
| 		adlib_commandreg = val; | ||||
| 		break; | ||||
| 	case 0x209: | ||||
| //TODO adlib_commandreg should be 4 for this to work else it should just latch the value
 | ||||
| 		myGUS.timers[0].active = ((val & 0x1) > 0); | ||||
| 		myGUS.timers[1].active = ((val & 0x2) > 0); | ||||
| 		break; | ||||
| //TODO Check if 0x20a register is also available on the gus like on the interwave
 | ||||
| 	case 0x20b: | ||||
| 		if((myGUS.mixControl & 0x40) != 0) { | ||||
| 			// IRQ configuration
 | ||||
|  | @ -1025,7 +1023,7 @@ void GUS_Init(Section* sec) { | |||
| 	myGUS.irq2 = section->Get_int("irq2"); | ||||
| 	strcpy(&myGUS.ultradir[0], section->Get_string("ultradir")); | ||||
| 
 | ||||
| 	myGUS.timerReg = 85; | ||||
| 	adlib_commandreg = 85; | ||||
| 	myGUS.timers[0].active = false; | ||||
| 	myGUS.timers[1].active = false; | ||||
| 	 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue