rem: memset((void *)sFrameBuffer, 0, gKernelArgs.frame_buffer.physical_buffer.size);
context: platform_switch_to_logo(void){	// in debug mode, we'll never show the logo	if ((platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT) != 0)		return;	if (!sVesaCompatible || sMode == NULL)		// no logo for now...		return;	if (!sModeChosen)		get_mode_from_settings();	if (vesa_set_mode(sMode->mode) != B_OK)		return;	gKernelArgs.frame_buffer.enabled = 1;	struct vbe_mode_info modeInfo;	if (vesa_get_mode_info(sMode->mode, &modeInfo) != B_OK) {		platform_switch_to_text_mode();		return;	}	addr_t lastBase = gKernelArgs.frame_buffer.physical_buffer.start;	int32 bytesPerPixel = (modeInfo.bits_per_pixel + 7) / 8;	gKernelArgs.frame_buffer.width = modeInfo.width;	gKernelArgs.frame_buffer.height = modeInfo.height;	gKernelArgs.frame_buffer.depth = modeInfo.bits_per_pixel;	gKernelArgs.frame_buffer.physical_buffer.size = gKernelArgs.frame_buffer.width		* gKernelArgs.frame_buffer.height * bytesPerPixel;	gKernelArgs.frame_buffer.physical_buffer.start = modeInfo.physical_base;	// ToDo: we assume that physical base is constant through the different resolutions	// ToDo: this is broken - if the newly chosen video mode is larger than the old one	//	the boot loader will crash while trying to access unmapped memory	if (lastBase == 0) {		// the graphics memory has not been mapped yet!		sFrameBuffer = mmu_map_physical_memory(modeInfo.physical_base,							gKernelArgs.frame_buffer.physical_buffer.size, 0x03);	}	// clear the video memory	// ToDo: this shouldn't be necessary on real hardware (and Bochs), but	//	at least booting with Qemu looks ugly when this is missing	memset((void *)sFrameBuffer, 0, gKernelArgs.frame_buffer.physical_buffer.size);	if (vesa_set_palette((const uint8 *)kPalette, 0, 256) != B_OK)		dprintf("set palette failed!\n");#if 0	uint8 *bits = (uint8 *)gKernelArgs.fb.mapping.start;	uint32 bytesPerRow = gKernelArgs.fb.x_size;	for (int32 y = 10; y < 30; y++) {		for (int32 i = 0; i < 256; i++) {			bits[y * bytesPerRow + i * 3] = i;			bits[y * bytesPerRow + i * 3 + 1] = i;			bits[y * bytesPerRow + i * 3 + 2] = i;		}	}#endif	// ToDo: this is a temporary hack!	addr_t start = sFrameBuffer + gKernelArgs.frame_buffer.width		* (gKernelArgs.frame_buffer.height - kHeight - 60)		* bytesPerPixel + gKernelArgs.frame_buffer.width - kWidth - 40;	for (int32 i = 0; i < kHeight; i++) {		memcpy((void *)(start + gKernelArgs.frame_buffer.width * i),			&kImageData[i * kWidth], kWidth);	}}