OVR works
This commit is contained in:
		
							
								
								
									
										15
									
								
								src/luaapi.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/luaapi.c
									
									
									
									
									
								
							@@ -1249,5 +1249,20 @@ void callLuaScanline(tic_mem* memory, s32 row)
 | 
			
		||||
 | 
			
		||||
void callLuaOverlap(tic_mem* memory)
 | 
			
		||||
{
 | 
			
		||||
	tic_machine* machine = (tic_machine*)memory;
 | 
			
		||||
	lua_State* lua = machine->lua;
 | 
			
		||||
 | 
			
		||||
	if (lua)
 | 
			
		||||
	{
 | 
			
		||||
		static const char* OverlapFunc = "overlap";
 | 
			
		||||
 | 
			
		||||
		lua_getglobal(lua, OverlapFunc);
 | 
			
		||||
		if(lua_isfunction(lua, -1)) 
 | 
			
		||||
		{
 | 
			
		||||
			if(lua_pcall(lua, 0, 0, 0) != LUA_OK)
 | 
			
		||||
				machine->data->error(machine->data->data, lua_tostring(lua, -1));
 | 
			
		||||
		}
 | 
			
		||||
		else lua_pop(lua, 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								src/tic.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								src/tic.c
									
									
									
									
									
								
							@@ -158,10 +158,10 @@ static void overlapPixel(tic_mem* tic, s32 x, s32 y, u8 color)
 | 
			
		||||
{
 | 
			
		||||
	tic_machine* machine = (tic_machine*)tic;
 | 
			
		||||
	
 | 
			
		||||
	enum {Top = (TIC80_FULLHEIGHT-TIC80_HEIGHT)/2, Bottom = Top};
 | 
			
		||||
	enum {Left = (TIC80_FULLWIDTH-TIC80_WIDTH)/2, Right = Left};
 | 
			
		||||
	enum {Top = (TIC80_FULLHEIGHT-TIC80_HEIGHT)/2};
 | 
			
		||||
	enum {Left = (TIC80_FULLWIDTH-TIC80_WIDTH)/2};
 | 
			
		||||
 | 
			
		||||
	tic->screen[x + Left + (y + Top) * TIC80_FULLWIDTH] = machine->state.overlapPalette[tic_tool_peek4(tic->ram.vram.mapping, color & 0xf)];
 | 
			
		||||
	tic->screen[x + y * TIC80_FULLWIDTH + (Left + Top * TIC80_FULLWIDTH)] = machine->state.overlapPalette[tic_tool_peek4(tic->ram.vram.mapping, color & 0xf)];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void setPixel(tic_machine* machine, s32 x, s32 y, u8 color)
 | 
			
		||||
@@ -1181,6 +1181,8 @@ static void api_tick_start(tic_mem* memory, const tic_sound* src)
 | 
			
		||||
		if(prevDown && prevDown == down) (*hold)++;
 | 
			
		||||
		else *hold = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	machine->state.pixel = dmaPixel;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void api_tick_end(tic_mem* memory)
 | 
			
		||||
@@ -1204,6 +1206,26 @@ static void api_tick_end(tic_mem* memory)
 | 
			
		||||
	
 | 
			
		||||
	blip_end_frame(machine->blip, EndTime);
 | 
			
		||||
	blip_read_samples(machine->blip, machine->memory.samples.buffer, machine->samplerate / TIC_FRAMERATE);
 | 
			
		||||
 | 
			
		||||
	machine->state.pixel = overlapPixel;
 | 
			
		||||
 | 
			
		||||
	// temporary palette blit
 | 
			
		||||
	{
 | 
			
		||||
		u32* pal = machine->state.overlapPalette;
 | 
			
		||||
 | 
			
		||||
		const u8* src = memory->cart.palette.data;
 | 
			
		||||
 | 
			
		||||
		memset(pal, 0xff, TIC_PALETTE_SIZE);
 | 
			
		||||
 | 
			
		||||
		u8* dst = (u8*)pal;
 | 
			
		||||
		const u8* end = src + sizeof(tic_palette);
 | 
			
		||||
 | 
			
		||||
		enum{RGB = sizeof(tic_rgb)};
 | 
			
		||||
 | 
			
		||||
		for(; src != end; dst++, src+=RGB)
 | 
			
		||||
			for(s32 j = 0; j < RGB; j++)
 | 
			
		||||
				*dst++ = *(src+(RGB-1)-j);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1751,9 +1773,7 @@ static void api_blit(tic_mem* tic, tic_scanline scanline, tic_overlap overlap)
 | 
			
		||||
	memset4(&out[(TIC80_FULLHEIGHT-Bottom) * TIC80_FULLWIDTH], pal[tic->ram.vram.vars.border], TIC80_FULLWIDTH*Bottom);
 | 
			
		||||
 | 
			
		||||
	if(overlap)
 | 
			
		||||
	{
 | 
			
		||||
		overlap(tic);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void initApi(tic_api* api)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user