Namco 163 refinements
This commit is contained in:
		
							parent
							
								
									c4fc797578
								
							
						
					
					
						commit
						075f758e4d
					
				|  | @ -29,6 +29,7 @@ furthermore, an `or reserved` indicates this field is always present, but is res | ||||||
| 
 | 
 | ||||||
| the format versions are: | the format versions are: | ||||||
| 
 | 
 | ||||||
|  | - 73: Furnace dev73 | ||||||
| - 72: Furnace dev72 | - 72: Furnace dev72 | ||||||
| - 71: Furnace dev71 | - 71: Furnace dev71 | ||||||
| - 70: Furnace dev70 | - 70: Furnace dev70 | ||||||
|  | @ -515,6 +516,14 @@ size | description | ||||||
|      | - 480 bytes |      | - 480 bytes | ||||||
|  2?? | note sample × 120 |  2?? | note sample × 120 | ||||||
|      | - 240 bytes |      | - 240 bytes | ||||||
|  |  --- | **Namco 163 data** (>=73) | ||||||
|  |   4  | initial waveform | ||||||
|  |   1  | wave position | ||||||
|  |   1  | wave length | ||||||
|  |   1  | wave mode: | ||||||
|  |      | - bit 1: update on change | ||||||
|  |      | - bit 0: load on playback | ||||||
|  |   1  | reserved | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| # wavetable | # wavetable | ||||||
|  |  | ||||||
|  | @ -42,8 +42,8 @@ | ||||||
| #define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock(); | #define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock(); | ||||||
| #define BUSY_END isBusy.unlock(); softLocked=false; | #define BUSY_END isBusy.unlock(); softLocked=false; | ||||||
| 
 | 
 | ||||||
| #define DIV_VERSION "dev72" | #define DIV_VERSION "dev73" | ||||||
| #define DIV_ENGINE_VERSION 72 | #define DIV_ENGINE_VERSION 73 | ||||||
| 
 | 
 | ||||||
| // for imports
 | // for imports
 | ||||||
| #define DIV_VERSION_MOD 0xff01 | #define DIV_VERSION_MOD 0xff01 | ||||||
|  |  | ||||||
|  | @ -387,6 +387,11 @@ void DivInstrument::putInsData(SafeWriter* w) { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // N163
 |   // N163
 | ||||||
|  |   w->writeI(n163.wave); | ||||||
|  |   w->writeC(n163.wavePos); | ||||||
|  |   w->writeC(n163.waveLen); | ||||||
|  |   w->writeC(n163.waveMode); | ||||||
|  |   w->writeC(0); // reserved
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { | DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { | ||||||
|  | @ -743,6 +748,13 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // N163
 |   // N163
 | ||||||
|  |   if (version>=73) { | ||||||
|  |     n163.wave=reader.readI(); | ||||||
|  |     n163.wavePos=(unsigned char)reader.readC(); | ||||||
|  |     n163.waveLen=(unsigned char)reader.readC(); | ||||||
|  |     n163.waveMode=(unsigned char)reader.readC(); | ||||||
|  |     reader.readC(); // reserved
 | ||||||
|  |   } | ||||||
|   return DIV_DATA_SUCCESS; |   return DIV_DATA_SUCCESS; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -392,8 +392,8 @@ struct DivInstrumentN163 { | ||||||
|   DivInstrumentN163(): |   DivInstrumentN163(): | ||||||
|     wave(-1), |     wave(-1), | ||||||
|     wavePos(0), |     wavePos(0), | ||||||
|     waveLen(0), |     waveLen(32), | ||||||
|     waveMode(0) {} |     waveMode(3) {} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct DivInstrument { | struct DivInstrument { | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ | ||||||
|     rWriteMask(0x78-(c<<3)+(a&7),v,m) \ |     rWriteMask(0x78-(c<<3)+(a&7),v,m) \ | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| #define CHIP_FREQBASE (15*65536) | #define CHIP_FREQBASE (15*32768) | ||||||
| 
 | 
 | ||||||
| const char* regCheatSheetN163[]={ | const char* regCheatSheetN163[]={ | ||||||
|   "FreqL7", "40", |   "FreqL7", "40", | ||||||
|  |  | ||||||
|  | @ -2043,19 +2043,16 @@ void FurnaceGUI::drawInsEdit() { | ||||||
|           } |           } | ||||||
|           ImGui::EndTabItem(); |           ImGui::EndTabItem(); | ||||||
|         } |         } | ||||||
|         if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("N163")) { |         if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("Namco 163")) { | ||||||
|           ImGui::Text("Initial waveform"); |           if (ImGui::InputInt("Waveform##WAVE",&ins->n163.wave,1,10)) { PARAMETER | ||||||
|           if (ImGui::InputInt("##WAVE",&ins->n163.wave,1,10)) { PARAMETER |  | ||||||
|             if (ins->n163.wave<0) ins->n163.wave=0; |             if (ins->n163.wave<0) ins->n163.wave=0; | ||||||
|             if (ins->n163.wave>=e->song.waveLen) ins->n163.wave=e->song.waveLen-1; |             if (ins->n163.wave>=e->song.waveLen) ins->n163.wave=e->song.waveLen-1; | ||||||
|           } |           } | ||||||
|           ImGui::Text("Initial waveform position in RAM"); |           if (ImGui::InputInt("Offset##WAVEPOS",&ins->n163.wavePos,1,16)) { PARAMETER | ||||||
|           if (ImGui::InputInt("##WAVEPOS",&ins->n163.wavePos,1,16)) { PARAMETER |  | ||||||
|             if (ins->n163.wavePos<0) ins->n163.wavePos=0; |             if (ins->n163.wavePos<0) ins->n163.wavePos=0; | ||||||
|             if (ins->n163.wavePos>255) ins->n163.wavePos=255; |             if (ins->n163.wavePos>255) ins->n163.wavePos=255; | ||||||
|           } |           } | ||||||
|           ImGui::Text("Initial waveform length in RAM"); |           if (ImGui::InputInt("Length##WAVELEN",&ins->n163.waveLen,4,16)) { PARAMETER | ||||||
|           if (ImGui::InputInt("##WAVELEN",&ins->n163.waveLen,4,16)) { PARAMETER |  | ||||||
|             if (ins->n163.waveLen<0) ins->n163.waveLen=0; |             if (ins->n163.waveLen<0) ins->n163.waveLen=0; | ||||||
|             if (ins->n163.waveLen>252) ins->n163.waveLen=252; |             if (ins->n163.waveLen>252) ins->n163.waveLen=252; | ||||||
|             ins->n163.waveLen&=0xfc; |             ins->n163.waveLen&=0xfc; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 tildearrow
						tildearrow