75 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								  Custom GBA BIOS replacement
							 | 
						||
| 
								 | 
							
								  Copyright (c) 2002-2006 VBA Development Team
							 | 
						||
| 
								 | 
							
								  Copyright (c) 2006-2013 VBA-M Development Team
							 | 
						||
| 
								 | 
							
								  Copyright (c) 2013 Normmatt
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								  This program is free software; you can redistribute it and/or
							 | 
						||
| 
								 | 
							
								  modify it under the terms of the GNU General Public License
							 | 
						||
| 
								 | 
							
								  as published by the Free Software Foundation; either version 2
							 | 
						||
| 
								 | 
							
								  of the License, or (at your option) any later version.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  This program is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								  but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						||
| 
								 | 
							
								  GNU General Public License for more details.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  You should have received a copy of the GNU General Public License
							 | 
						||
| 
								 | 
							
								  along with this program; if not, write to the Free Software
							 | 
						||
| 
								 | 
							
								  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <tonc.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "logo_data.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static inline void CPUWriteHalfWord(u32 adr, u16 val)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									*(u16*)adr = val;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								static inline u16 CPUReadHalfWord(u32 adr)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return *(u16*)adr;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void memcpy_(u32 source, u32 dest, int count)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  // copy
							 | 
						||
| 
								 | 
							
								  while(count) {
							 | 
						||
| 
								 | 
							
								    CPUWriteHalfWord(dest, (source>0x0EFFFFFF ? 0x1CAD : CPUReadHalfWord(source)));
							 | 
						||
| 
								 | 
							
									dest += 2;
							 | 
						||
| 
								 | 
							
									source += 2;
							 | 
						||
| 
								 | 
							
								    count--;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern void swi_LZ77UnCompVram_(u32 source, u32 dest, int checkBios);
							 | 
						||
| 
								 | 
							
								extern void swi_RegisterRamReset(u32 flags);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*-----------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								DrawLogo
							 | 
						||
| 
								 | 
							
								  Draws a custom logo and pauses for a second or two.
							 | 
						||
| 
								 | 
							
								-----------------------------------------------------------------*/
							 | 
						||
| 
								 | 
							
								void DrawLogo() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Load palette
							 | 
						||
| 
								 | 
							
									memcpy_((u32)logo_dataPal, (u32)pal_bg_mem, logo_dataPalLen);
							 | 
						||
| 
								 | 
							
									// Load tiles into CBB 0
							 | 
						||
| 
								 | 
							
									swi_LZ77UnCompVram_((u32)logo_dataTiles, (u32)&tile_mem[0][0], 0);
							 | 
						||
| 
								 | 
							
									// Load map into SBB 30
							 | 
						||
| 
								 | 
							
									swi_LZ77UnCompVram_((u32)logo_dataMap, (u32)&se_mem[30][0], 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// set up BG0 for a 4bpp 64x32t map, using
							 | 
						||
| 
								 | 
							
									//   using charblock 0 and screenblock 31
							 | 
						||
| 
								 | 
							
									REG_BG0CNT= BG_CBB(0) | BG_SBB(30) | BG_4BPP | BG_REG_32x32;
							 | 
						||
| 
								 | 
							
									REG_DISPCNT= DCNT_MODE0 | DCNT_BG0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int countdown = 60*2;
							 | 
						||
| 
								 | 
							
									while(countdown--)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										vid_vsync();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									swi_RegisterRamReset(0xFF);
							 | 
						||
| 
								 | 
							
								}
							 |