Re: [hatari-devel] WinUAE CPU core cycle-exact option impact for 68000 |
[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]
While trying to do some benchmarks for EmuTOS, i currently have a strange problem with cycle-exact mode. The attached program gives different results on my machine: 39 loops when cycle-exact is off, 30 when cycle-exact is on. It is a simple test that just does a vr_recfl() on the whole screen, running for 5 seconds. According to Christian, 39 is the correct value on real HW, and on his machine he gets the same result in Hatari, independent of the cycle-exact setting.
The tests were done with a current snapshot version of 256k EmuTOS. The behaviour is the same with current Hatari, and official 2.2.1 release. Any idea what is causing this? I also tried the windows version, but that just crashes with a segmentation fault in VirtualBox...
|
Attachment:
vrrecfl.prg
Description: application/wine-extension-prg
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <aes.h> #include <vdi.h> #include <tos.h> #include <ext.h> static _WORD xworkout[57]; _WORD vdi_handle; _WORD phys_handle; _WORD gl_wchar, gl_hchar; static GRECT screen; static MFDB screen_mfdb; int orig_mblit; int curr_mblit; void screen_init(void) { _WORD dummy; _WORD workin[11]; _WORD workout[57]; int i; _WORD pxy[4]; orig_mblit = curr_mblit = Blitmode(-1) & 1; phys_handle = graf_handle(&gl_wchar, &gl_hchar, &dummy, &dummy); wind_get(0, WF_WORKXYWH, &screen.g_x, &screen.g_y, &screen.g_w, &screen.g_h); wind_get(0, WF_CURRXYWH, &screen.g_x, &screen.g_y, &screen.g_w, &screen.g_h); vdi_handle = phys_handle; for (i = 0; i < 10; i++) workin[i] = 1; workin[10] = 2; v_opnvwk(workin, &vdi_handle, workout); vswr_mode(vdi_handle, MD_REPLACE); vst_color(vdi_handle, BLACK); vst_alignment(vdi_handle, 0, 5, &dummy, &dummy); vst_effects(vdi_handle, 0); vst_rotation(vdi_handle, 0); vsf_perimeter(vdi_handle, 0); vsf_interior(vdi_handle, FIS_SOLID); vsf_style(vdi_handle, 0); vsl_width(vdi_handle, 1); vsl_color(vdi_handle, BLACK); vsl_ends(vdi_handle, 0, 0); vsl_type(vdi_handle, SOLID); vsm_height(vdi_handle, 1); vsm_type(vdi_handle, 1); pxy[0] = screen.g_x; pxy[1] = screen.g_y; pxy[2] = screen.g_x + screen.g_w - 1; pxy[3] = screen.g_y + screen.g_h - 1; vs_clip(vdi_handle, 0, pxy); screen_mfdb.fd_w = screen.g_w; screen_mfdb.fd_h = screen.g_h; screen_mfdb.fd_wdwidth = screen.g_w >> 4; screen_mfdb.fd_nplanes = xworkout[4]; screen_mfdb.fd_stand = 0; screen_mfdb.fd_addr = 0; } void screen_exit(void) { if (vdi_handle > 0) { v_clsvwk(vdi_handle); vdi_handle = 0; } Blitmode(orig_mblit); form_dial(FMD_FINISH, screen.g_x, screen.g_y, screen.g_w, screen.g_h, screen.g_x, screen.g_y, screen.g_w, screen.g_h); } int main(void) { clock_t start, end; unsigned long loops; _WORD color; _WORD pxy[4]; char buf[100]; appl_init(); screen_init(); graf_mouse(BUSYBEE, NULL); wind_update(BEG_UPDATE); wind_update(BEG_MCTRL); graf_mouse(ARROW, NULL); graf_mouse(M_OFF, NULL); start = clock(); end = start + 5 * 200; loops = 0; color = 0; pxy[0] = 0; pxy[1] = 0; pxy[2] = screen.g_w - 1; pxy[3] = screen.g_h - 1; do { vsf_color(vdi_handle, color); vr_recfl(vdi_handle, pxy); loops++; color = (color + 1) & 0x0f; } while (clock() < end); wind_update(END_MCTRL); wind_update(END_UPDATE); screen_exit(); graf_mouse(M_ON, NULL); sprintf(buf, "[1][%lu loops|Blitter: %d][OK]", loops, curr_mblit); form_alert(1, buf); appl_exit(); return 0; }
[Log] sLogFileName = stderr sTraceFileName = stderr nTextLogLevel = 3 nAlertDlgLogLevel = 1 bConfirmQuit = FALSE bNatFeats = TRUE bConsoleWindow = FALSE [Debugger] nNumberBase = 10 nSymbolLines = -1 nMemdumpLines = -1 nDisasmLines = -1 nBacktraceLines = 0 nExceptionDebugMask = 515 nDisasmOptions = 15 bDisasmUAE = FALSE bMatchAllSymbols = FALSE bSymbolsAutoLoad = TRUE [Screen] nMonitorType = 1 nFrameSkips = 5 bFullScreen = FALSE bKeepResolution = TRUE bResizable = TRUE bAllowOverscan = FALSE nSpec512Threshold = 1 nForceBpp = 0 bAspectCorrect = TRUE bUseExtVdiResolutions = FALSE nVdiWidth = 1280 nVdiHeight = 960 nVdiColors = 2 bMouseWarp = TRUE bShowStatusbar = TRUE bShowDriveLed = FALSE bCrop = FALSE bForceMax = FALSE nMaxWidth = 1280 nMaxHeight = 960 bUseSdlRenderer = TRUE nRenderScaleQuality = 0 bUseVsync = FALSE bHostMouseSync = TRUE [Joystick0] nJoystickMode = 0 bEnableAutoFire = FALSE bEnableJumpOnFire2 = FALSE nJoyId = -1 kUp = Up kDown = Down kLeft = Left kRight = Right kFire = Right Ctrl [Joystick1] nJoystickMode = 1 bEnableAutoFire = FALSE bEnableJumpOnFire2 = FALSE nJoyId = 0 kUp = Up kDown = Down kLeft = Left kRight = Right kFire = Right Ctrl [Joystick2] nJoystickMode = 0 bEnableAutoFire = FALSE bEnableJumpOnFire2 = FALSE nJoyId = -1 kUp = Up kDown = Down kLeft = Left kRight = Right kFire = Right Ctrl [Joystick3] nJoystickMode = 0 bEnableAutoFire = FALSE bEnableJumpOnFire2 = FALSE nJoyId = -1 kUp = Up kDown = Down kLeft = Left kRight = Right kFire = Right Ctrl [Joystick4] nJoystickMode = 0 bEnableAutoFire = FALSE bEnableJumpOnFire2 = FALSE nJoyId = -1 kUp = Up kDown = Down kLeft = Left kRight = Right kFire = Right Ctrl [Joystick5] nJoystickMode = 0 bEnableAutoFire = FALSE bEnableJumpOnFire2 = FALSE nJoyId = -1 kUp = Up kDown = Down kLeft = Left kRight = Right kFire = Right Ctrl [Keyboard] bDisableKeyRepeat = FALSE nKeymapType = 2 szMappingFileName = /home/sebilla/.hatari/keymap.cfg [KeyShortcutsWithMod] kOptions = O kFullScreen = F kBorders = B kMouseMode = M kColdReset = C kWarmReset = R kScreenShot = G kBossKey = I kCursorEmu = J kFastForward = X kRecAnim = A kRecSound = Y kSound = S kPause = Pause kDebugger = kQuit = Q kLoadMem = L kSaveMem = K kInsertDiskA = D kSwitchJoy0 = F1 kSwitchJoy1 = F2 kSwitchPadA = F3 kSwitchPadB = F4 [KeyShortcutsWithoutMod] kOptions = Pause kFullScreen = kBorders = kMouseMode = kColdReset = kWarmReset = kScreenShot = kBossKey = kCursorEmu = kFastForward = kRecAnim = kRecSound = kSound = kPause = kDebugger = kQuit = kLoadMem = kSaveMem = kInsertDiskA = kSwitchJoy0 = kSwitchJoy1 = kSwitchPadA = kSwitchPadB = [Sound] bEnableMicrophone = TRUE bEnableSound = TRUE bEnableSoundSync = FALSE nPlaybackFreq = 44100 nSdlAudioBufferSize = 0 szYMCaptureFileName = /home/sebilla/.hatari/hatari.wav YmVolumeMixing = 2 [Memory] nMemorySize = 14336 nTTRamSize = 0 bAutoSave = FALSE szMemoryCaptureFileName = /home/sebilla/.hatari/hatari.sav szAutoSaveFileName = /home/sebilla/.hatari/auto.sav [Floppy] bAutoInsertDiskB = FALSE FastFloppy = FALSE EnableDriveA = TRUE DriveA_NumberOfHeads = 2 EnableDriveB = FALSE DriveB_NumberOfHeads = 2 nWriteProtection = 0 szDiskAZipPath = szDiskAFileName = /home/sebilla/.stonx/new_disk.st szDiskBZipPath = szDiskBFileName = szDiskImageDirectory = /home/sebilla/.stonx/ [HardDisk] nGemdosDrive = 0 bBootFromHardDisk = TRUE bUseHardDiskDirectory = TRUE szHardDiskDirectory = /home/sebilla/.hatari/drives nGemdosCase = 0 nWriteProtection = 0 bFilenameConversion = FALSE bGemdosHostTime = FALSE [ACSI] bUseDevice0 = FALSE sDeviceFile0 = /home/sebilla/.stonx/tos.dsk nBlockSize0 = 512 bUseDevice1 = FALSE sDeviceFile1 = /home/sebilla/atari/freemint.org/freemint nBlockSize1 = 512 bUseDevice2 = FALSE sDeviceFile2 = /home/sebilla/atari/freemint.org/freemint nBlockSize2 = 512 bUseDevice3 = FALSE sDeviceFile3 = /home/sebilla/atari/freemint.org/freemint nBlockSize3 = 512 bUseDevice4 = FALSE sDeviceFile4 = /home/sebilla/atari/freemint.org/freemint nBlockSize4 = 512 bUseDevice5 = FALSE sDeviceFile5 = /home/sebilla/atari/freemint.org/freemint nBlockSize5 = 512 bUseDevice6 = FALSE sDeviceFile6 = /home/sebilla/atari/freemint.org/freemint nBlockSize6 = 512 bUseDevice7 = FALSE sDeviceFile7 = /home/sebilla/atari/freemint.org/freemint nBlockSize7 = 512 [SCSI] bUseDevice0 = FALSE sDeviceFile0 = /home/sebilla/atari/freemint.org/freemint nBlockSize0 = 512 bUseDevice1 = FALSE sDeviceFile1 = /home/sebilla/atari/freemint.org/freemint nBlockSize1 = 512 bUseDevice2 = FALSE sDeviceFile2 = /home/sebilla/atari/freemint.org/freemint nBlockSize2 = 512 bUseDevice3 = FALSE sDeviceFile3 = /home/sebilla/atari/freemint.org/freemint nBlockSize3 = 512 bUseDevice4 = FALSE sDeviceFile4 = /home/sebilla/atari/freemint.org/freemint nBlockSize4 = 512 bUseDevice5 = FALSE sDeviceFile5 = /home/sebilla/atari/freemint.org/freemint nBlockSize5 = 512 bUseDevice6 = FALSE sDeviceFile6 = /home/sebilla/atari/freemint.org/freemint nBlockSize6 = 512 bUseDevice7 = FALSE sDeviceFile7 = /home/sebilla/atari/freemint.org/freemint nBlockSize7 = 512 [IDE] bUseDevice0 = FALSE nByteSwap0 = 2 sDeviceFile0 = /home/sebilla/.stonx/tos.dsk nBlockSize0 = 512 nDeviceType0 = 0 bUseDevice1 = FALSE nByteSwap1 = 2 sDeviceFile1 = /home/sebilla/atari/hatari-1.9.0 nBlockSize1 = 512 nDeviceType1 = 0 [ROM] szTosImageFileName = /home/sebilla/.hatari/etos256us.img bPatchTos = TRUE szCartridgeImageFileName = [LILO] Args = root=/dev/ram video=atafb:vga16 load_ramdisk=1 Kernel = /usr/local/share/hatari/vmlinuz Symbols = Ramdisk = /usr/local/share/hatari/initrd HaltOnReboot = TRUE KernelToFastRam = TRUE RamdiskToFastRam = TRUE [RS232] bEnableRS232 = FALSE szOutFileName = /dev/modem szInFileName = /dev/modem bEnableSccB = FALSE sSccBOutFileName = /dev/modem [Printer] bEnablePrinting = FALSE szPrintToFileName = /home/sebilla/.hatari/hatari.prn [Midi] bEnableMidi = FALSE sMidiInFileName = /dev/snd/midiC1D0 sMidiOutFileName = /dev/snd/midiC1D0 sMidiInPortName = Off sMidiOutPortName = Off [System] nCpuLevel = 0 nCpuFreq = 8 bCompatibleCpu = FALSE nModelType = 2 bBlitter = TRUE nDSPType = 0 bPatchTimerD = TRUE bFastBoot = TRUE bFastForward = FALSE bAddressSpace24 = TRUE bCycleExactCpu = TRUE n_FPUType = 0 bSoftFloatFPU = FALSE bMMU = FALSE VideoTiming = 3 [Video] AviRecordVcodec = 2 AviRecordFps = 0 AviRecordFile = /home/sebilla/.hatari/hatari.avi
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |