コード例 #1
0
int test_floppy_if()
{
	int ret;
	unsigned char sector[512];
	direct_access_status_sector * dass;

	dass=(direct_access_status_sector *)sector;

	last_setlbabase = 2;
	do
	{
		ret = setlbabase( last_setlbabase );
		if( ret != ERR_NO_ERROR )
			return ret;

		ret = readsector(0,sector,1);
		if( ret != ERR_NO_ERROR )
			return ret;

		#ifdef DEBUG
		dbg_printf("test_floppy_if : %.8X = %.8X ?\n",last_setlbabase,L_INDIAN(dass->lba_base));
		#endif

		if(last_setlbabase!=L_INDIAN(dass->lba_base))
		{
			return -ERR_LBA_CHANGE_FAILURE;
		}

		last_setlbabase--;
	}while(last_setlbabase);

	return ERR_NO_ERROR;
}
コード例 #2
0
ファイル: hxcfeda.c プロジェクト: mp-lee/HxCFloppyEmulator
/**
 * Callback function
 */
int hxc_media_read(unsigned long sector, unsigned char *buffer)
{
	_direct_access_status_sector * dass;

	dass= (_direct_access_status_sector *)buffer;

	gui_more_busy();

	if (_isEmulator) {
		Rwabs(0, buffer, 1, sector, 0);
	} else {
		do {
			if((sector-_last_setlbabase)>=8) {
				_setlbabase(sector);
			}

			if(!readsector(0,buffer,0)) {
				error("Read error");
			}
			_last_setlbabase=L_INDIAN(dass->lba_base);

			/* gui_printf(0,0,0,"BA: %08X %08X" ,L_INDIAN(dass->lba_base),sector);*/
		} while((sector-L_INDIAN(dass->lba_base))>=8);

		if(!readsector((sector-_last_setlbabase)+1,buffer,0)) {
			//gui_printf(0, 0, 0, "fsector=%d", (sector-_last_setlbabase)+1));
			fatal("Read error");
		}
	}

	gui_less_busy();

	return 1;
}
コード例 #3
0
int media_read(uint32 sector, uint8 *buffer, uint32 sector_count)
{
	int ret;
	uint32 i;
	direct_access_status_sector * dass;

	dass = (direct_access_status_sector *)buffer;

	#ifdef DEBUG
	dbg_printf("media_read sector : 0x%.8X, cnt : %d \n",sector,sector_count);
	#endif

	set_char_pos(&g_ui_ctx,g_ui_ctx.screen_txt_xsize - 1, 0);
	print_char(&g_ui_ctx, 10, INVERTED);

	for(i=0;i<sector_count;i++)
	{
		do
		{
			if((sector-last_setlbabase)>=8)
			{
				ret = setlbabase(sector);
				if( ret != ERR_NO_ERROR )
					return 0;
			}

			ret = readsector(0,buffer,0); 
			if( ret != ERR_NO_ERROR )
			{
				hxc_printf_box(&g_ui_ctx,"ERROR: Read ERROR ! fsector %d [Err %d]",(sector-last_setlbabase)+1,ret);

				return 0;
			}
			last_setlbabase = L_INDIAN(dass->lba_base);

		}while((sector-L_INDIAN(dass->lba_base))>=8);

		ret = readsector((unsigned char)((sector-last_setlbabase)+1),&buffer[i*512],0);
		if( ret != ERR_NO_ERROR )
		{
			hxc_printf_box(&g_ui_ctx,"ERROR: Read ERROR ! fsector %d [Err %d]",(sector-last_setlbabase)+1,ret);
			return 0;
		}

		sector++;

		#ifdef DEBUG
		print_hex_array(buffer,512);
		#endif
	}

	set_char_pos(&g_ui_ctx,g_ui_ctx.screen_txt_xsize - 1, 0);
	print_char(&g_ui_ctx, ' ', INVERTED);

	return 1;
}