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; }
/** * 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; }
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; }