From 5c4af1f78197eadda18e8282c4f7f1a579f89fa8 Mon Sep 17 00:00:00 2001 From: Anston Sorensen <61335841+Tennessene@users.noreply.github.com> Date: Fri, 18 Aug 2023 17:59:33 -0500 Subject: [PATCH 1/3] Fix deliberate thrown exception This was most likely for debugging, but I don't see a need for it. It doesn't seem good to throw deliberate exceptions anyway --- jdosbox/src/main/java/jdos/misc/Log.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/jdosbox/src/main/java/jdos/misc/Log.java b/jdosbox/src/main/java/jdos/misc/Log.java index e07651b4..b5431f5d 100644 --- a/jdosbox/src/main/java/jdos/misc/Log.java +++ b/jdosbox/src/main/java/jdos/misc/Log.java @@ -11,11 +11,6 @@ static public void log_msg(String msg) { } static public void exit(String msg) { System.out.print(msg); - try { - throw new Exception("Stacktrace"); - } catch (Exception e) { - e.printStackTrace(); - } Debug.close(); if (!Dosbox.applet) System.exit(0); From 7aee576b2401dcd51e8d370b4ccfd86dc982fd7c Mon Sep 17 00:00:00 2001 From: Anston Sorensen Date: Sat, 7 Oct 2023 19:30:00 -0500 Subject: [PATCH 2/3] Much Java optimization A lot was done to update and optimize the code --- .../java/jdos/host/FowardPCapEthernet.java | 106 +- .../src/main/java/jdos/host/PCapEthernet.java | 33 +- .../src/main/java/jdos/win/Console.java | 7 - jdosbox-win/src/main/java/jdos/win/Win.java | 14 +- .../main/java/jdos/win/builtin/Advapi32.java | 24 +- .../main/java/jdos/win/builtin/Crtdll.java | 6 +- .../java/jdos/win/builtin/HandlerBase.java | 19 +- .../src/main/java/jdos/win/builtin/Imm32.java | 2 +- .../src/main/java/jdos/win/builtin/Lz32.java | 30 +- .../main/java/jdos/win/builtin/Msvfw32.java | 2 +- .../main/java/jdos/win/builtin/Version.java | 18 +- .../main/java/jdos/win/builtin/WinAPI.java | 10 +- .../main/java/jdos/win/builtin/Wsock32.java | 2 +- .../java/jdos/win/builtin/directx/DInput.java | 2 +- .../java/jdos/win/builtin/directx/DSound.java | 2 +- .../java/jdos/win/builtin/directx/Dplayx.java | 10 +- .../java/jdos/win/builtin/directx/Guid.java | 22 +- .../win/builtin/directx/ddraw/DDBltFx.java | 48 +- .../win/builtin/directx/ddraw/DDColorKey.java | 4 +- .../builtin/directx/ddraw/DDPixelFormat.java | 16 +- .../builtin/directx/ddraw/DDSurfaceDesc.java | 32 +- .../builtin/directx/ddraw/IDirectDraw.java | 34 +- .../builtin/directx/ddraw/IDirectDraw7.java | 17 +- .../directx/ddraw/IDirectDrawClipper.java | 15 +- .../directx/ddraw/IDirectDrawPalette.java | 10 +- .../directx/ddraw/IDirectDrawSurface.java | 105 +- .../directx/ddraw/IDirectDrawSurface7.java | 29 +- .../win/builtin/directx/ddraw/IUnknown.java | 18 +- .../builtin/directx/dinput/DIDataFormat.java | 12 +- .../directx/dinput/DIObjectDataFormat.java | 10 +- .../builtin/directx/dinput/IDirectInput.java | 17 +- .../directx/dinput/IDirectInputDeviceA.java | 35 +- .../dinput/IDirectInputDeviceA_Mouse.java | 35 +- .../directx/dplay/IDirectPlayLobby.java | 31 +- .../win/builtin/directx/dsound/DSBCaps.java | 12 +- .../builtin/directx/dsound/DSBufferDesc.java | 8 +- .../win/builtin/directx/dsound/DSCaps.java | 4 +- .../win/builtin/directx/dsound/DSConvert.java | 132 +- .../win/builtin/directx/dsound/DSMixer.java | 71 +- .../builtin/directx/dsound/IDirectSound.java | 21 +- .../directx/dsound/IDirectSoundBuffer.java | 52 +- .../java/jdos/win/builtin/gdi32/Clipping.java | 9 +- .../java/jdos/win/builtin/gdi32/GdiObj.java | 8 +- .../java/jdos/win/builtin/gdi32/LOGBRUSH.java | 4 +- .../java/jdos/win/builtin/gdi32/Mapping.java | 5 +- .../jdos/win/builtin/gdi32/PaintingGDI.java | 17 +- .../jdos/win/builtin/gdi32/TEXTMETRIC.java | 42 +- .../jdos/win/builtin/gdi32/WinBitmap.java | 8 +- .../java/jdos/win/builtin/gdi32/WinBrush.java | 8 +- .../java/jdos/win/builtin/gdi32/WinDC.java | 43 +- .../builtin/gdi32/WinEnhancedMetaFile.java | 2 +- .../java/jdos/win/builtin/gdi32/WinFont.java | 16 +- .../java/jdos/win/builtin/gdi32/WinGDI.java | 2 +- .../jdos/win/builtin/gdi32/WinPalette.java | 4 +- .../java/jdos/win/builtin/gdi32/WinPen.java | 10 +- .../jdos/win/builtin/gdi32/WinRegion.java | 296 +- .../jdos/win/builtin/kernel32/FILETIME.java | 6 +- .../jdos/win/builtin/kernel32/KResource.java | 3 +- .../java/jdos/win/builtin/kernel32/KTime.java | 6 +- .../jdos/win/builtin/kernel32/Kernel32.java | 377 +- .../win/builtin/kernel32/StartupInfo.java | 6 +- .../java/jdos/win/builtin/kernel32/TIB.java | 8 +- .../win/builtin/kernel32/VirtualMemory.java | 4 +- .../jdos/win/builtin/kernel32/WaitGroup.java | 12 +- .../jdos/win/builtin/kernel32/WaitObject.java | 4 +- .../jdos/win/builtin/kernel32/WinEvent.java | 7 +- .../jdos/win/builtin/kernel32/WinProcess.java | 72 +- .../jdos/win/builtin/kernel32/WinThread.java | 36 +- .../jdos/win/builtin/user32/ButtonWindow.java | 582 ++- .../jdos/win/builtin/user32/CREATESTRUCT.java | 28 +- .../java/jdos/win/builtin/user32/Caret.java | 9 +- .../jdos/win/builtin/user32/Clipboard.java | 3 +- .../win/builtin/user32/DRAWITEMSTRUCT.java | 4 +- .../win/builtin/user32/DRAWTEXTPARAMS.java | 6 +- .../java/jdos/win/builtin/user32/DefDlg.java | 16 +- .../java/jdos/win/builtin/user32/DefWnd.java | 7 +- .../java/jdos/win/builtin/user32/Focus.java | 31 +- .../java/jdos/win/builtin/user32/Hook.java | 25 +- .../java/jdos/win/builtin/user32/Input.java | 48 +- .../java/jdos/win/builtin/user32/Message.java | 8 +- .../win/builtin/user32/NCCALCSIZE_PARAMS.java | 4 +- .../jdos/win/builtin/user32/NonClient.java | 26 +- .../jdos/win/builtin/user32/Painting.java | 47 +- .../jdos/win/builtin/user32/Resource.java | 3 +- .../jdos/win/builtin/user32/StaticWindow.java | 449 +- .../jdos/win/builtin/user32/SysParams.java | 4 +- .../java/jdos/win/builtin/user32/UiTools.java | 123 +- .../win/builtin/user32/WINDOWPLACEMENT.java | 6 +- .../jdos/win/builtin/user32/WINDOWPOS.java | 2 +- .../jdos/win/builtin/user32/WinClass.java | 18 +- .../jdos/win/builtin/user32/WinCursor.java | 12 +- .../jdos/win/builtin/user32/WinDialog.java | 11 +- .../java/jdos/win/builtin/user32/WinIcon.java | 5 +- .../java/jdos/win/builtin/user32/WinMenu.java | 10 +- .../java/jdos/win/builtin/user32/WinPos.java | 22 +- .../java/jdos/win/builtin/user32/WinText.java | 4 +- .../jdos/win/builtin/user32/WinWindow.java | 65 +- .../jdos/win/builtin/user32/Wsprintf.java | 56 +- .../java/jdos/win/builtin/winmm/MMCKINFO.java | 4 +- .../java/jdos/win/builtin/winmm/MMIOINFO.java | 6 +- .../java/jdos/win/builtin/winmm/MMTime.java | 18 +- .../java/jdos/win/builtin/winmm/Mmio.java | 233 +- .../jdos/win/builtin/winmm/PlaySound.java | 50 +- .../jdos/win/builtin/winmm/WAVEFORMATEX.java | 16 +- .../builtin/winmm/WAVEFORMATEXTENSIBLE.java | 2 +- .../java/jdos/win/builtin/winmm/WAVEHDR.java | 14 +- .../jdos/win/builtin/winmm/WAVEOUTCAPS.java | 2 +- .../java/jdos/win/builtin/winmm/Waveform.java | 24 +- .../java/jdos/win/builtin/winmm/WinMM.java | 4 +- .../java/jdos/win/builtin/winmm/WinMMIO.java | 4 +- .../java/jdos/win/controls/StaticWindow.java | 449 +- .../jdos/win/kernel/DescriptorTables.java | 16 +- .../main/java/jdos/win/kernel/Interrupts.java | 108 +- .../main/java/jdos/win/kernel/KernelHeap.java | 42 +- .../java/jdos/win/kernel/KernelMemory.java | 8 +- .../src/main/java/jdos/win/kernel/Timer.java | 14 +- .../java/jdos/win/kernel/VideoMemory.java | 2 +- .../java/jdos/win/kernel/WinCallback.java | 4 +- .../java/jdos/win/loader/BuiltinModule.java | 66 +- .../src/main/java/jdos/win/loader/Loader.java | 36 +- .../src/main/java/jdos/win/loader/Module.java | 2 +- .../java/jdos/win/loader/NativeModule.java | 66 +- .../java/jdos/win/loader/winpe/HeaderDOS.java | 4 +- .../winpe/HeaderImageExportDirectory.java | 4 +- .../winpe/HeaderImageImportDescriptor.java | 4 +- .../win/loader/winpe/HeaderImageOptional.java | 2 +- .../win/loader/winpe/HeaderImageSection.java | 2 +- .../java/jdos/win/loader/winpe/HeaderPE.java | 10 +- .../win/loader/winpe/LittleEndianFile.java | 26 +- .../main/java/jdos/win/system/JavaBitmap.java | 12 +- .../main/java/jdos/win/system/Scheduler.java | 14 +- .../main/java/jdos/win/system/StaticData.java | 22 +- .../jdos/win/system/WinCriticalException.java | 6 +- .../main/java/jdos/win/system/WinFatFile.java | 2 +- .../main/java/jdos/win/system/WinFile.java | 14 +- .../java/jdos/win/system/WinFileMapping.java | 14 +- .../java/jdos/win/system/WinFindFile.java | 6 +- .../main/java/jdos/win/system/WinHeap.java | 20 +- .../java/jdos/win/system/WinKeyboard.java | 328 +- .../src/main/java/jdos/win/system/WinMCI.java | 2 +- .../main/java/jdos/win/system/WinMidi.java | 10 +- .../main/java/jdos/win/system/WinMouse.java | 54 +- .../src/main/java/jdos/win/system/WinMsg.java | 10 +- .../main/java/jdos/win/system/WinMutex.java | 2 +- .../main/java/jdos/win/system/WinObject.java | 8 +- .../java/jdos/win/system/WinRegistry.java | 34 +- .../main/java/jdos/win/system/WinSystem.java | 2 +- .../main/java/jdos/win/system/WinTimer.java | 25 +- .../main/java/jdos/win/system/WinUser.java | 2 +- .../main/java/jdos/win/utils/FilePath.java | 71 +- .../src/main/java/jdos/win/utils/Heap.java | 34 +- .../java/jdos/win/utils/LittleEndian.java | 22 +- .../src/main/java/jdos/win/utils/Path.java | 4 +- .../src/main/java/jdos/win/utils/Pixel.java | 12 +- .../src/main/java/jdos/win/utils/Ptr.java | 2 +- .../main/java/jdos/win/utils/StringUtil.java | 30 +- .../main/java/jdos/win/utils/SystemTime.java | 2 +- .../src/main/java/jdos/win/utils/Unicode.java | 2 +- .../instructions/InstructionsTestCase.java | 192 +- .../java/jdos/cpu/instructions/testFPU.java | 88 +- .../java/jdos/cpu/instructions/testGrp2.java | 302 +- .../java/jdos/cpu/instructions/testGrp3.java | 166 +- .../jdos/cpu/instructions/testPrefix_66.java | 37 +- .../cpu/instructions/testPrefix_none.java | 762 ++-- .../test/java/jdos/win/kernel/testHeap.java | 51 +- .../src/test/java/jdos/win/util/testHeap.java | 36 +- .../java/javazoom/jl/decoder/BitReserve.java | 8 +- .../java/javazoom/jl/decoder/Bitstream.java | 78 +- .../javazoom/jl/decoder/BitstreamErrors.java | 14 +- .../main/java/javazoom/jl/decoder/Crc16.java | 2 +- .../java/javazoom/jl/decoder/Decoder.java | 36 +- .../javazoom/jl/decoder/DecoderErrors.java | 6 +- .../java/javazoom/jl/decoder/Equalizer.java | 29 +- .../javazoom/jl/decoder/FrameDecoder.java | 2 +- .../main/java/javazoom/jl/decoder/Header.java | 48 +- .../jl/decoder/InputStreamSource.java | 5 +- .../javazoom/jl/decoder/JavaLayerError.java | 2 +- .../javazoom/jl/decoder/JavaLayerErrors.java | 4 +- .../javazoom/jl/decoder/JavaLayerHook.java | 2 +- .../javazoom/jl/decoder/JavaLayerUtils.java | 14 +- .../javazoom/jl/decoder/LayerIDecoder.java | 35 +- .../javazoom/jl/decoder/LayerIIDecoder.java | 105 +- .../javazoom/jl/decoder/LayerIIIDecoder.java | 244 +- .../java/javazoom/jl/decoder/Obuffer.java | 2 +- .../javazoom/jl/decoder/OutputChannels.java | 7 +- .../javazoom/jl/decoder/SampleBuffer.java | 10 +- .../main/java/javazoom/jl/decoder/Source.java | 16 +- .../javazoom/jl/decoder/SynthesisFilter.java | 208 +- .../java/javazoom/jl/decoder/huffcodetab.java | 78 +- jdosbox/src/main/java/jdos/Dosbox.java | 91 +- jdosbox/src/main/java/jdos/cpu/CPU.java | 269 +- jdosbox/src/main/java/jdos/cpu/CPU_Regs.java | 20 +- jdosbox/src/main/java/jdos/cpu/Callback.java | 75 +- .../src/main/java/jdos/cpu/Core_dynamic.java | 6 +- jdosbox/src/main/java/jdos/cpu/Core_full.java | 9 +- .../src/main/java/jdos/cpu/Core_normal.java | 145 +- .../src/main/java/jdos/cpu/Core_prefetch.java | 7 +- .../src/main/java/jdos/cpu/Core_switch.java | 1924 ++++---- jdosbox/src/main/java/jdos/cpu/Flags.java | 30 +- .../src/main/java/jdos/cpu/Instructions.java | 44 +- jdosbox/src/main/java/jdos/cpu/Modrm.java | 190 +- jdosbox/src/main/java/jdos/cpu/Paging.java | 81 +- jdosbox/src/main/java/jdos/cpu/StringOp.java | 26 +- jdosbox/src/main/java/jdos/cpu/Table_ea.java | 6 +- .../java/jdos/cpu/core_dynamic/Cache.java | 4 +- .../cpu/core_dynamic/CacheBlockDynRec.java | 16 +- .../core_dynamic/CodePageHandlerDynRec.java | 7 +- .../java/jdos/cpu/core_dynamic/Compiler.java | 107 +- .../java/jdos/cpu/core_dynamic/Decode.java | 2 +- .../jdos/cpu/core_dynamic/DecodeBlock.java | 15 +- .../java/jdos/cpu/core_dynamic/Decoder.java | 56 +- .../jdos/cpu/core_dynamic/Decoder_basic.java | 5 +- .../main/java/jdos/cpu/core_dynamic/Eaa.java | 68 +- .../main/java/jdos/cpu/core_dynamic/Grp2.java | 828 +--- .../main/java/jdos/cpu/core_dynamic/Grp3.java | 458 +- .../java/jdos/cpu/core_dynamic/Helper.java | 5 +- .../java/jdos/cpu/core_dynamic/Inst1.java | 3204 ++----------- .../java/jdos/cpu/core_dynamic/Inst2.java | 1512 +------ .../java/jdos/cpu/core_dynamic/Inst3.java | 1589 +------ .../java/jdos/cpu/core_dynamic/Inst4.java | 853 +--- .../java/jdos/cpu/core_dynamic/InstFPU.java | 86 +- .../java/jdos/cpu/core_dynamic/Loader.java | 32 +- .../java/jdos/cpu/core_dynamic/Prefix_0f.java | 1762 ++++--- .../java/jdos/cpu/core_dynamic/Prefix_66.java | 2038 ++++----- .../jdos/cpu/core_dynamic/Prefix_66_0f.java | 1282 +++--- .../jdos/cpu/core_dynamic/Prefix_none.java | 4030 +++++++---------- .../java/jdos/cpu/core_dynamic/Strings.java | 39 +- .../java/jdos/cpu/core_normal/Prefix_0f.java | 1862 ++++---- .../java/jdos/cpu/core_normal/Prefix_66.java | 2258 ++++----- .../jdos/cpu/core_normal/Prefix_66_0f.java | 1610 +++---- .../jdos/cpu/core_normal/Prefix_helpers.java | 24 +- .../jdos/cpu/core_normal/Prefix_none.java | 4019 +++++++--------- .../java/jdos/cpu/core_switch/Decoder.java | 5 +- jdosbox/src/main/java/jdos/debug/Debug.java | 27 +- .../src/main/java/jdos/debug/Debug_gui.java | 15 +- .../java/jdos/dos/CDROM_Interface_Fake.java | 2 +- .../java/jdos/dos/CDROM_Interface_Image.java | 297 +- .../src/main/java/jdos/dos/CDRomImage.java | 4 +- .../main/java/jdos/dos/DOS_Drive_Cache.java | 98 +- jdosbox/src/main/java/jdos/dos/Dos.java | 145 +- .../main/java/jdos/dos/DosKeyboardLayout.java | 4 +- jdosbox/src/main/java/jdos/dos/DosMSCDEX.java | 383 +- jdosbox/src/main/java/jdos/dos/Dos_Block.java | 8 +- jdosbox/src/main/java/jdos/dos/Dos_Drive.java | 2 +- jdosbox/src/main/java/jdos/dos/Dos_FCB.java | 13 +- .../src/main/java/jdos/dos/Dos_InfoBlock.java | 6 +- jdosbox/src/main/java/jdos/dos/Dos_PSP.java | 24 +- .../main/java/jdos/dos/Dos_ParamBlock.java | 10 +- jdosbox/src/main/java/jdos/dos/Dos_cdrom.java | 42 +- .../src/main/java/jdos/dos/Dos_devices.java | 10 +- .../src/main/java/jdos/dos/Dos_execute.java | 68 +- jdosbox/src/main/java/jdos/dos/Dos_files.java | 170 +- jdosbox/src/main/java/jdos/dos/Dos_ioctl.java | 10 +- .../java/jdos/dos/Dos_keyboard_layout.java | 2 +- .../src/main/java/jdos/dos/Dos_memory.java | 42 +- jdosbox/src/main/java/jdos/dos/Dos_misc.java | 282 +- .../src/main/java/jdos/dos/Dos_programs.java | 649 +-- .../src/main/java/jdos/dos/Dos_system.java | 4 +- .../src/main/java/jdos/dos/Dos_tables.java | 14 +- .../src/main/java/jdos/dos/DriveManager.java | 15 +- jdosbox/src/main/java/jdos/dos/Drives.java | 54 +- .../main/java/jdos/dos/drives/Bootstrap.java | 6 +- .../main/java/jdos/dos/drives/Drive_fat.java | 103 +- .../main/java/jdos/dos/drives/Drive_iso.java | 42 +- .../java/jdos/dos/drives/Drive_local.java | 37 +- .../jdos/dos/drives/Drive_local_cdrom.java | 2 +- .../java/jdos/dos/drives/Drive_virtual.java | 7 +- .../main/java/jdos/dos/drives/Drive_zip.java | 35 +- .../main/java/jdos/dos/drives/PartTable.java | 28 +- jdosbox/src/main/java/jdos/fpu/FPU.java | 79 +- jdosbox/src/main/java/jdos/fpu/SoftFPU.java | 137 +- jdosbox/src/main/java/jdos/gui/Main.java | 41 +- .../src/main/java/jdos/gui/MainApplet.java | 49 +- jdosbox/src/main/java/jdos/gui/MainBase.java | 244 +- jdosbox/src/main/java/jdos/gui/MainFrame.java | 37 +- jdosbox/src/main/java/jdos/gui/Mapper.java | 4 +- jdosbox/src/main/java/jdos/gui/Midi.java | 64 +- jdosbox/src/main/java/jdos/gui/Render.java | 66 +- .../src/main/java/jdos/hardware/Adlib.java | 63 +- .../main/java/jdos/hardware/AudioLayer.java | 30 +- jdosbox/src/main/java/jdos/hardware/Cmos.java | 508 ++- jdosbox/src/main/java/jdos/hardware/DMA.java | 132 +- .../src/main/java/jdos/hardware/DbOPL.java | 121 +- .../src/main/java/jdos/hardware/Disney.java | 4 +- .../main/java/jdos/hardware/Gameblaster.java | 71 +- jdosbox/src/main/java/jdos/hardware/Gus.java | 151 +- .../src/main/java/jdos/hardware/Hardware.java | 8 +- jdosbox/src/main/java/jdos/hardware/IO.java | 14 +- jdosbox/src/main/java/jdos/hardware/IPX.java | 152 +- .../main/java/jdos/hardware/IPXServer.java | 10 +- .../main/java/jdos/hardware/IoHandler.java | 88 +- .../src/main/java/jdos/hardware/Joystick.java | 193 +- .../src/main/java/jdos/hardware/Keyboard.java | 648 ++- .../src/main/java/jdos/hardware/MPU401.java | 93 +- .../src/main/java/jdos/hardware/Memory.java | 167 +- .../src/main/java/jdos/hardware/Mixer.java | 114 +- .../src/main/java/jdos/hardware/NE2000.java | 292 +- .../main/java/jdos/hardware/PCSpeaker.java | 18 +- jdosbox/src/main/java/jdos/hardware/Pic.java | 219 +- .../src/main/java/jdos/hardware/SBlaster.java | 155 +- .../main/java/jdos/hardware/TandySound.java | 497 +- .../src/main/java/jdos/hardware/Timer.java | 155 +- jdosbox/src/main/java/jdos/hardware/VBE.java | 3 +- jdosbox/src/main/java/jdos/hardware/VGA.java | 126 +- .../src/main/java/jdos/hardware/VGA_attr.java | 338 +- .../src/main/java/jdos/hardware/VGA_crtc.java | 742 ++- .../src/main/java/jdos/hardware/VGA_dac.java | 184 +- .../src/main/java/jdos/hardware/VGA_draw.java | 98 +- .../src/main/java/jdos/hardware/VGA_gfx.java | 376 +- .../main/java/jdos/hardware/VGA_memory.java | 146 +- .../src/main/java/jdos/hardware/VGA_misc.java | 190 +- .../main/java/jdos/hardware/VGA_other.java | 712 ++- .../main/java/jdos/hardware/VGA_paradise.java | 270 +- .../src/main/java/jdos/hardware/VGA_s3.java | 961 ++-- .../src/main/java/jdos/hardware/VGA_seq.java | 219 +- .../main/java/jdos/hardware/VGA_tseng.java | 1162 +++-- .../src/main/java/jdos/hardware/VGA_xga.java | 534 ++- .../main/java/jdos/hardware/mame/Poly.java | 34 +- .../hardware/mame/RasterizerCompiler.java | 62 +- .../java/jdos/hardware/mame/VoodooCommon.java | 1236 +++-- .../mame/poly_draw_scanline_func.java | 2 +- .../java/jdos/hardware/mame/poly_extent.java | 2 +- .../java/jdos/hardware/mame/tmu_state.java | 10 +- .../src/main/java/jdos/hardware/pci/PCI.java | 219 +- .../java/jdos/hardware/pci/PCIHostBridge.java | 10 +- .../java/jdos/hardware/pci/PCI_Device.java | 14 +- .../jdos/hardware/pci/PCI_Memory_BAR.java | 2 +- .../main/java/jdos/hardware/qemu/Atapi.java | 902 ++-- .../main/java/jdos/hardware/qemu/Block.java | 108 +- .../main/java/jdos/hardware/qemu/Cirrus.java | 184 +- .../src/main/java/jdos/hardware/qemu/DMA.java | 24 +- .../java/jdos/hardware/qemu/DMAHelpers.java | 14 +- .../main/java/jdos/hardware/qemu/Floppy.java | 363 +- .../java/jdos/hardware/qemu/HdGeometry.java | 8 +- .../src/main/java/jdos/hardware/qemu/IDE.java | 297 +- .../main/java/jdos/hardware/qemu/IDEBus.java | 26 +- .../java/jdos/hardware/qemu/Internal.java | 38 +- .../java/jdos/hardware/qemu/MemoryRegion.java | 10 +- .../main/java/jdos/hardware/qemu/Qemu.java | 16 +- .../jdos/hardware/qemu/RawBlockDriver.java | 4 +- .../src/main/java/jdos/hardware/qemu/VGA.java | 98 +- .../jdos/hardware/qemu/VGACommonState.java | 40 +- .../java/jdos/hardware/serialport/Serial.java | 21 +- .../jdos/hardware/serialport/Serialports.java | 9 +- jdosbox/src/main/java/jdos/host/Ethernet.java | 8 +- jdosbox/src/main/java/jdos/host/RxFrame.java | 2 +- .../src/main/java/jdos/host/UserEthernet.java | 4 +- .../src/main/java/jdos/host/router/ARP.java | 6 +- .../src/main/java/jdos/host/router/BootP.java | 8 +- .../src/main/java/jdos/host/router/Ether.java | 4 +- .../main/java/jdos/host/router/EtherUtil.java | 4 +- jdosbox/src/main/java/jdos/ints/Bios.java | 109 +- .../src/main/java/jdos/ints/Bios_disk.java | 64 +- .../main/java/jdos/ints/Bios_keyboard.java | 25 +- jdosbox/src/main/java/jdos/ints/EMS.java | 182 +- jdosbox/src/main/java/jdos/ints/Int10.java | 70 +- .../src/main/java/jdos/ints/Int10_char.java | 6 +- .../src/main/java/jdos/ints/Int10_memory.java | 4 +- .../src/main/java/jdos/ints/Int10_misc.java | 2 +- .../src/main/java/jdos/ints/Int10_modes.java | 133 +- .../src/main/java/jdos/ints/Int10_pal.java | 2 +- .../main/java/jdos/ints/Int10_put_pixel.java | 6 +- .../src/main/java/jdos/ints/Int10_vesa.java | 41 +- .../java/jdos/ints/Int10_video_state.java | 20 +- .../main/java/jdos/ints/Int10_vptable.java | 4 +- jdosbox/src/main/java/jdos/ints/Mouse.java | 171 +- jdosbox/src/main/java/jdos/ints/XMS.java | 32 +- jdosbox/src/main/java/jdos/misc/Cross.java | 8 +- jdosbox/src/main/java/jdos/misc/Log.java | 4 +- jdosbox/src/main/java/jdos/misc/Msg.java | 18 +- jdosbox/src/main/java/jdos/misc/Program.java | 45 +- .../java/jdos/misc/setup/CommandLine.java | 29 +- .../src/main/java/jdos/misc/setup/Config.java | 38 +- .../src/main/java/jdos/misc/setup/Hex.java | 2 +- .../java/jdos/misc/setup/Module_base.java | 2 +- .../main/java/jdos/misc/setup/Prop_int.java | 8 +- .../java/jdos/misc/setup/Prop_multival.java | 14 +- .../jdos/misc/setup/Prop_multival_remain.java | 2 +- .../main/java/jdos/misc/setup/Prop_path.java | 4 +- .../java/jdos/misc/setup/Prop_string.java | 5 +- .../main/java/jdos/misc/setup/Property.java | 11 +- .../main/java/jdos/misc/setup/Section.java | 16 +- .../java/jdos/misc/setup/Section_prop.java | 2 +- .../src/main/java/jdos/misc/setup/Value.java | 7 +- jdosbox/src/main/java/jdos/sdl/GUI.java | 14 +- .../src/main/java/jdos/sdl/JavaMapper.java | 130 +- .../src/main/java/jdos/shell/BatchFile.java | 33 +- .../src/main/java/jdos/shell/Dos_shell.java | 1637 ++++--- .../src/main/java/jdos/shell/SHELL_Cmd.java | 8 +- jdosbox/src/main/java/jdos/shell/Shell.java | 43 +- .../src/main/java/jdos/util/FileHelper.java | 12 +- jdosbox/src/main/java/jdos/util/FileIO.java | 26 +- .../main/java/jdos/util/FileIOFactory.java | 67 +- .../main/java/jdos/util/HomeDirectory.java | 2 +- jdosbox/src/main/java/jdos/util/IntPtr.java | 4 +- jdosbox/src/main/java/jdos/util/LRUCache.java | 6 +- .../src/main/java/jdos/util/LongHelper.java | 2 +- .../src/main/java/jdos/util/MicroDouble.java | 51 +- .../src/main/java/jdos/util/MicroFloat.java | 8 +- jdosbox/src/main/java/jdos/util/Progress.java | 14 +- jdosbox/src/main/java/jdos/util/Ptr.java | 22 +- jdosbox/src/main/java/jdos/util/Record.java | 9 +- .../src/main/java/jdos/util/StringHelper.java | 170 +- jdosbox/src/main/java/jdos/util/UnZip.java | 20 +- 404 files changed, 25328 insertions(+), 34192 deletions(-) delete mode 100644 jdosbox-win/src/main/java/jdos/win/Console.java diff --git a/jdosbox-pcap/src/main/java/jdos/host/FowardPCapEthernet.java b/jdosbox-pcap/src/main/java/jdos/host/FowardPCapEthernet.java index ed2577cf..6d05d7be 100644 --- a/jdosbox-pcap/src/main/java/jdos/host/FowardPCapEthernet.java +++ b/jdosbox-pcap/src/main/java/jdos/host/FowardPCapEthernet.java @@ -1,6 +1,5 @@ package jdos.host; -import jdos.misc.Log; import jdos.misc.setup.Section_prop; import jdos.util.Ptr; import org.jnetpcap.Pcap; @@ -23,6 +22,7 @@ public void send(byte[] buffer, int offset, int len) { dos.writeInt(len); dos.write(buffer, offset, len); } catch (Exception e) { + throw new RuntimeException(e); } } static byte[] buffer = new byte[4096]; @@ -42,6 +42,7 @@ public void receive(RxFrame frame) { } } while (len>0); } catch (Exception e) { + throw new RuntimeException(e); } } @@ -50,11 +51,11 @@ public boolean open(Section_prop section, byte[] mac) { socket = new Socket(section.Get_string("pcaphost"), section.Get_int("pcapport")); dos = new DataOutputStream(socket.getOutputStream()); dis = new DataInputStream(socket.getInputStream()); - return true; + return false; } catch (Exception e) { e.printStackTrace(); } - return false; + return true; } public void close() { @@ -63,6 +64,7 @@ public void close() { dis.close(); socket.close(); } catch (Exception e) { + throw new RuntimeException(e); } socket = null; dis = null; @@ -78,71 +80,71 @@ static public void startServer(String nic, int port) { pcaptmp.close(); try { ServerSocket serverSocket = new ServerSocket(port); - Log.log_msg("Listening on port "+port+" for pcap forwarding. Hit q [ENTER] to quit"); + System.out.println("Listening on port "+port+" for pcap forwarding. Hit q [ENTER] to quit"); while (true) { - Thread exitThread = new Thread(new Runnable() { - public void run() { - while (true) { - try { - char c = (char)System.in.read(); - if (c == 'q') { - System.exit(0); - } - } catch (Exception e) { + Thread exitThread = new Thread(() -> { + while (true) { + try { + char c = (char)System.in.read(); + if (c == 'q') { + System.exit(0); } + } catch (Exception e) { + throw new RuntimeException(e); } } }); exitThread.start(); final Socket socket = serverSocket.accept(); final String address = socket.getInetAddress().toString(); - Log.log_msg(" Accepted connection from "+address); + System.out.println(" Accepted connection from "+address); final Pcap pcap = PCapEthernet.open(nic, true); - Thread serviceIn = new Thread(new Runnable() { - public void run() { - try { - DataInputStream dis = new DataInputStream(socket.getInputStream()); - byte[] buffer = new byte[4096]; - while (true) { - int len = dis.readInt(); - if (len<0) { - return; - } - if (len>buffer.length) { - buffer = new byte[len]; - } - dis.readFully(buffer, 0, len); - synchronized (pcap) { - pcap.sendPacket(buffer, 0, len); - } + Thread serviceIn = new Thread(() -> { + try { + DataInputStream dis = new DataInputStream(socket.getInputStream()); + byte[] buffer = new byte[4096]; + while (true) { + int len = dis.readInt(); + if (len<0) { + return; } - } catch (Exception e) { - Log.log_msg(" Dropped connection from "+address); - } finally { - try {pcap.close();} catch (Exception e1){} + if (len>buffer.length) { + buffer = new byte[len]; + } + dis.readFully(buffer, 0, len); + synchronized (pcap) { + pcap.sendPacket(buffer, 0, len); + } + } + } catch (Exception e) { + System.out.println(" Dropped connection from "+address); + } finally { + try {pcap.close();} catch (Exception e1) { + throw new RuntimeException(e1); } } }); serviceIn.start(); - Thread serviceOut = new Thread(new Runnable() { - public void run() { - try { - DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); - while (true) { - PcapHeader header = new PcapHeader(JMemory.POINTER); - JBuffer buffer = new JBuffer(JMemory.POINTER); - synchronized (pcap) { - while (pcap.nextEx(header, buffer) == Pcap.NEXT_EX_OK) { - byte[] data = buffer.getByteArray(0, header.hdr_len()); - dos.writeInt(data.length); - dos.write(data); - } + Thread serviceOut = new Thread(() -> { + try { + DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); + while (true) { + PcapHeader header = new PcapHeader(JMemory.POINTER); + JBuffer buffer = new JBuffer(JMemory.POINTER); + synchronized (pcap) { + while (pcap.nextEx(header, buffer) == Pcap.NEXT_EX_OK) { + byte[] data = buffer.getByteArray(0, header.hdr_len()); + dos.writeInt(data.length); + dos.write(data); } - Thread.sleep(10); } - } catch (Exception e) { - } finally { - try {pcap.close();} catch (Exception e1){} + Thread.sleep(10); + } + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + try {pcap.close();} catch (Exception e1) { + throw new RuntimeException(e1); } } }); diff --git a/jdosbox-pcap/src/main/java/jdos/host/PCapEthernet.java b/jdosbox-pcap/src/main/java/jdos/host/PCapEthernet.java index 64b48262..857b6e76 100644 --- a/jdosbox-pcap/src/main/java/jdos/host/PCapEthernet.java +++ b/jdosbox-pcap/src/main/java/jdos/host/PCapEthernet.java @@ -1,6 +1,5 @@ package jdos.host; -import jdos.misc.Log; import jdos.misc.setup.Section_prop; import jdos.util.Ptr; import jdos.util.StringHelper; @@ -37,32 +36,32 @@ public void close() { } public boolean open(Section_prop section, byte[] mac) { pcap = open(section.Get_string("realnic"), true); - return pcap!=null; + return pcap == null; } static public Pcap open(String realnicstring, boolean async) { try { ArrayList alldevs = new ArrayList(); // Will be filled with NICs StringBuilder errbuf = new StringBuilder(); // For any error msgs - /*************************************************************************** - * First get a list of devices on this system - **************************************************************************/ + /************************************************************************** + First get a list of devices on this system + */ int r = Pcap.findAllDevs(alldevs, errbuf); if (r == Pcap.NOT_OK || alldevs.isEmpty()) { - Log.log_msg("Cannot enumerate network interfaces: " + errbuf.toString()); + System.out.println("Cannot enumerate network interfaces: " + errbuf); return null; } if (realnicstring.equalsIgnoreCase("list")) { - int i = 0; - Log.log_msg("\nNetwork Interface List \n-----------------------------------"); + int i; + System.out.println("\nNetwork Interface List \n-----------------------------------"); for (i=0;i0;i--) { System.out.println(i); - try {Thread.sleep(1000);} catch (Exception e) {} + try {Thread.sleep(1000);} catch (Exception e) { + throw new RuntimeException(e); + } } throw new Dos_programs.RebootException(); } @@ -57,7 +59,7 @@ static public boolean run(Drive_fat drive, Drive_fat.fatFile fil, String path) FilePath.disks.put("C", drive); WinFile file = WinFile.createNoHandle(new FilePath(path), false, 0, 0); - if (!HeaderPE.fastCheckWinPE(file)) + if (HeaderPE.fastCheckWinPE(file)) return false; String name; String winPath = path.substring(0, path.lastIndexOf("\\")+1); @@ -78,8 +80,8 @@ static public boolean run(String path) { /*Bit8u*/char drive=(char)(Dos_files.DOS_GetDefaultDrive()+'A'); StringRef dir = new StringRef(); Dos_files.DOS_GetCurrentDir((short)0,dir); - String p = String.valueOf(drive)+":\\"; - if (dir.value.length()>0) { + String p = drive +":\\"; + if (!dir.value.isEmpty()) { p+=dir.value+"\\"; } String winPath = p; @@ -90,7 +92,7 @@ static public boolean run(String path) { WinFile file = null; try { file = WinFile.createNoHandle(new FilePath(path), false, 0, 0); - if (!HeaderPE.fastCheckWinPE(file)) + if (HeaderPE.fastCheckWinPE(file)) return false; } catch (Exception e) { return false; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/Advapi32.java b/jdosbox-win/src/main/java/jdos/win/builtin/Advapi32.java index 4a18e8fb..d6d1cbf1 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/Advapi32.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/Advapi32.java @@ -10,7 +10,7 @@ import jdos.win.system.WinSystem; public class Advapi32 extends BuiltinModule { - public class Sid { + public static class Sid { public static final int SIZE = 8; int psid; int Attributes; @@ -33,7 +33,7 @@ public Advapi32(Loader loader, int handle) { } // BOOL WINAPI AddAccessAllowedAce(PACL pAcl, DWORD dwAceRevision, DWORD AccessMask, PSID pSid) - private Callback.Handler AddAccessAllowedAce = new HandlerBase() { + private final Callback.Handler AddAccessAllowedAce = new HandlerBase() { public java.lang.String getName() { return "Advapi32.AddAccessAllowedAce"; } @@ -48,7 +48,7 @@ public void onCall() { }; // BOOL WINAPI AddAccessDeniedAce(PACL pAcl, DWORD dwAceRevision, DWORD AccessMask, PSID pSid) - private Callback.Handler AddAccessDeniedAce = new HandlerBase() { + private final Callback.Handler AddAccessDeniedAce = new HandlerBase() { public java.lang.String getName() { return "Advapi32.AddAccessDeniedAce"; } @@ -63,7 +63,7 @@ public void onCall() { }; // PVOID WINAPI FreeSid(PSID pSid) - private Callback.Handler FreeSid = new HandlerBase() { + private final Callback.Handler FreeSid = new HandlerBase() { public java.lang.String getName() { return "Advapi32.FreeSid"; } @@ -75,7 +75,7 @@ public void onCall() { }; // BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD dwSubAuthority0, DWORD dwSubAuthority1, DWORD dwSubAuthority2, DWORD dwSubAuthority3, DWORD dwSubAuthority4, DWORD dwSubAuthority5, DWORD dwSubAuthority6, DWORD dwSubAuthority7, PSID *pSid) - private Callback.Handler AllocateAndInitializeSid = new HandlerBase() { + private final Callback.Handler AllocateAndInitializeSid = new HandlerBase() { public java.lang.String getName() { return "Advapi32.AllocateAndInitializeSid"; } @@ -98,7 +98,7 @@ public void onCall() { }; // BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength) - private Callback.Handler GetTokenInformation = new HandlerBase() { + private final Callback.Handler GetTokenInformation = new HandlerBase() { public java.lang.String getName() { return "Advapi32.GetTokenInformation"; } @@ -125,7 +125,7 @@ public void onCall() { }; // BOOL WINAPI InitializeAcl(PACL pAcl, DWORD nAclLength, DWORD dwAclRevision) - private Callback.Handler InitializeAcl = new HandlerBase() { + private final Callback.Handler InitializeAcl = new HandlerBase() { public java.lang.String getName() { return "Advapi32.InitializeAcl"; } @@ -140,7 +140,7 @@ public void onCall() { }; // BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle) - private Callback.Handler OpenProcessToken = new HandlerBase() { + private final Callback.Handler OpenProcessToken = new HandlerBase() { public java.lang.String getName() { return "Advapi32.OpenProcessToken"; } @@ -160,7 +160,7 @@ public static int RegCloseKey(int hKey) { } // LONG WINAPI RegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition) - private Callback.Handler RegCreateKeyExA = new HandlerBase() { + private final Callback.Handler RegCreateKeyExA = new HandlerBase() { public java.lang.String getName() { return "Advapi32.RegCreateKeyExA"; } @@ -179,7 +179,7 @@ public void onCall() { }; // LONG WINAPI RegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult) - private Callback.Handler RegOpenKeyExA = new HandlerBase() { + private final Callback.Handler RegOpenKeyExA = new HandlerBase() { public java.lang.String getName() { return "Advapi32.RegOpenKeyExA"; } @@ -194,7 +194,7 @@ public void onCall() { }; // LONG WINAPI RegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData) - private Callback.Handler RegQueryValueExA = new HandlerBase() { + private final Callback.Handler RegQueryValueExA = new HandlerBase() { public java.lang.String getName() { return "Advapi32.RegQueryValueExA"; } @@ -210,7 +210,7 @@ public void onCall() { }; // LONG WINAPI RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData) - private Callback.Handler RegSetValueExA = new HandlerBase() { + private final Callback.Handler RegSetValueExA = new HandlerBase() { public java.lang.String getName() { return "Advapi32.RegSetValueExA"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/Crtdll.java b/jdosbox-win/src/main/java/jdos/win/builtin/Crtdll.java index 0da13590..eced0052 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/Crtdll.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/Crtdll.java @@ -11,7 +11,7 @@ import java.util.Random; public class Crtdll extends BuiltinModule { - int _acmdln_dll; + final int _acmdln_dll; public Crtdll(Loader loader, int handle) { super(loader, "Crtdll.dll", handle); @@ -69,7 +69,7 @@ public static void _initterm(int start, int end) { } } - private static Random random = new Random(); + private static final Random random = new Random(); public static int rand() { return random.nextInt() & 0x7FFF; @@ -82,6 +82,6 @@ public static int _strupr(int str) { } public static int toupper(int c) { - return (int)Character.toUpperCase((char)c); + return Character.toUpperCase((char)c); } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/HandlerBase.java b/jdosbox-win/src/main/java/jdos/win/builtin/HandlerBase.java index 7c0d245e..6493984a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/HandlerBase.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/HandlerBase.java @@ -3,7 +3,6 @@ import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.cpu.Callback; -import jdos.win.Console; import jdos.win.Win; import jdos.win.system.Scheduler; import jdos.win.system.WinSystem; @@ -55,26 +54,26 @@ public boolean preCall() { protected void notImplemented() { System.out.println(getName()+" not implemented yet."); - Console.out(getName() + " not implemented yet."); + System.out.println(getName() + " not implemented yet."); Win.exit(); } static public void dumpRegs() { System.out.print("eax="); - System.out.print(Long.toString(CPU_Regs.reg_eax.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_eax.dword & 0xFFFFFFFFL, 16)); System.out.print(" ecx="); - System.out.print(Long.toString(CPU_Regs.reg_ecx.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_ecx.dword & 0xFFFFFFFFL, 16)); System.out.print(" edx="); - System.out.print(Long.toString(CPU_Regs.reg_edx.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_edx.dword & 0xFFFFFFFFL, 16)); System.out.print(" ebx="); - System.out.print(Long.toString(CPU_Regs.reg_ebx.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_ebx.dword & 0xFFFFFFFFL, 16)); System.out.print(" esp="); - System.out.print(Long.toString(CPU_Regs.reg_esp.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_esp.dword & 0xFFFFFFFFL, 16)); System.out.print(" ebp="); - System.out.print(Long.toString(CPU_Regs.reg_ebp.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_ebp.dword & 0xFFFFFFFFL, 16)); System.out.print(" esi="); - System.out.print(Long.toString(CPU_Regs.reg_esi.dword & 0xFFFFFFFFl, 16)); + System.out.print(Long.toString(CPU_Regs.reg_esi.dword & 0xFFFFFFFFL, 16)); System.out.print(" edi="); - System.out.println(Long.toString(CPU_Regs.reg_edi.dword & 0xFFFFFFFFl, 16)); + System.out.println(Long.toString(CPU_Regs.reg_edi.dword & 0xFFFFFFFFL, 16)); } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/Imm32.java b/jdosbox-win/src/main/java/jdos/win/builtin/Imm32.java index 8a884b5f..b76c9411 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/Imm32.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/Imm32.java @@ -15,7 +15,7 @@ public Imm32(Loader loader, int handle) { } // HIMC ImmAssociateContext(HWND hWnd, HIMC hIMC) - private Callback.Handler ImmAssociateContext = new HandlerBase() { + private final Callback.Handler ImmAssociateContext = new HandlerBase() { public java.lang.String getName() { return "Imm32.ImmAssociateContext"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/Lz32.java b/jdosbox-win/src/main/java/jdos/win/builtin/Lz32.java index 06376f7a..f853f2e2 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/Lz32.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/Lz32.java @@ -48,7 +48,7 @@ public static int LZOpenFileA(int lpFileName, int lpReOpenBuf, int wStyle) { public static int LZRead(int hFile, int lpBuffer, int toRead) { WinObject obj = WinObject.getObject(hFile); if (obj instanceof WinFile) - return (int)((WinFile) obj).read(lpBuffer, toRead); + return ((WinFile) obj).read(lpBuffer, toRead); if (!(obj instanceof LZState)) return LZERROR_BADINHANDLE; LZState lzs = (LZState)obj; @@ -75,14 +75,14 @@ public static int LZRead(int hFile, int lpBuffer, int toRead) { lzs.curtabent = 0xFF0; } while (lzs.realcurrent0) { + while (!subBlock.isEmpty()) { int pos = subBlock.indexOf("\\"); if (pos>=0) { if (pos == 0) { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/WinAPI.java b/jdosbox-win/src/main/java/jdos/win/builtin/WinAPI.java index 6d483d98..5b9b48b5 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/WinAPI.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/WinAPI.java @@ -12,7 +12,7 @@ public class WinAPI extends Error { final static public boolean LOG_GDI = LOG; final static public boolean LOG_MM = false; final static public boolean MSGLOG = false; - static public int NULL = 0; + static public final int NULL = 0; static public void log(String s) { if (BuiltinModule.inPre) { @@ -1766,7 +1766,7 @@ static protected int getTempBuffer(int size) { static final public int WODM_OPEN = 5; static final public int WAVE_MAPPER = -1; - static final public int WAVERR_BADFORMAT = WAVERR_BASE + 0; /* unsupported wave format */ + static final public int WAVERR_BADFORMAT = WAVERR_BASE; /* unsupported wave format */ static final public int WAVERR_STILLPLAYING = WAVERR_BASE + 1; /* still something playing */ static final public int WAVERR_UNPREPARED = WAVERR_BASE + 2; /* header not prepared */ static final public int WAVERR_SYNC = WAVERR_BASE + 3; /* device is synchronous */ @@ -1846,7 +1846,7 @@ static protected int getTempBuffer(int size) { static final public int MMIO_CREATERIFF = 0x0020; /* mmioCreateChunk: make a LIST chunk */ static final public int MMIO_CREATELIST = 0x0040; /* mmioCreateChunk: make a RIFF chunk */ - static final public int mmioFOURCC(int ch0, int ch1, int ch2, int ch3) { + static public int mmioFOURCC(int ch0, int ch1, int ch2, int ch3) { return (ch0 & 0xFF) | ((ch1 & 0xFF) << 8) | ((ch2 & 0xFF) << 16) | ((ch3 & 0xFF) << 24); } static final public int FOURCC_RIFF = mmioFOURCC('R', 'I', 'F', 'F'); @@ -1981,8 +1981,8 @@ static public int sndAlias(int ch0, int ch1) { // * Internal * // ************ - public static int DF_END = 0x0001; - public static int DF_OWNERENABLED = 0x0002; + public static final int DF_END = 0x0001; + public static final int DF_OWNERENABLED = 0x0002; static final public int WAIT_SWITCH = 0xFFFF; static public final int NUM_SYS_COLORS = COLOR_MENUBAR+1; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/Wsock32.java b/jdosbox-win/src/main/java/jdos/win/builtin/Wsock32.java index 5f52ef1b..7f2d29ab 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/Wsock32.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/Wsock32.java @@ -43,7 +43,7 @@ public static int WSAStartup(int wVersionRequested, int lpWSAData) { StringUtil.strcpy(lpWSAData, "WinSock 2.0"); lpWSAData+=4; StringUtil.strcpy(lpWSAData, "Running"); lpWSAData+=4; writew(lpWSAData, 128); lpWSAData+=2; - writew(lpWSAData, 1024); lpWSAData+=2; + writew(lpWSAData, 1024); return 0; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/DInput.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/DInput.java index 693b4283..3f56b29a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/DInput.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/DInput.java @@ -16,7 +16,7 @@ public DInput(Loader loader, int handle) { } // HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter); - private Callback.Handler DirectInputCreateA = new HandlerBase() { + private final Callback.Handler DirectInputCreateA = new HandlerBase() { public String getName() { return "DInput.DirectInputCreateA"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/DSound.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/DSound.java index b02f883b..db25b6a1 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/DSound.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/DSound.java @@ -16,7 +16,7 @@ public DSound(Loader loader, int handle) { } // HRESULT DirectSoundCreate(LPCGUID lpGUID,LPDIRECTSOUND *ppDS,LPUNKNOWN pUnkOuter); - private Callback.Handler DirectSoundCreate = new HandlerBase() { + private final Callback.Handler DirectSoundCreate = new HandlerBase() { public String getName() { return "DSound.DirectSoundCreate"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/Dplayx.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/Dplayx.java index 543f55d2..2a18f803 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/Dplayx.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/Dplayx.java @@ -18,7 +18,7 @@ public Dplayx(Loader loader, int handle) { } // HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnkOuter ) - private Callback.Handler DirectPlayCreate = new HandlerBase() { + private final Callback.Handler DirectPlayCreate = new HandlerBase() { public String getName() { return "Dplayx.DirectPlayCreate"; } @@ -31,7 +31,7 @@ public void onCall() { }; // HRESULT WINAPI DirectPlayEnumerateA(LPDPENUMDPCALLBACKA lpEnumCallback, LPVOID lpContext); - private Callback.Handler DirectPlayEnumerateA = new HandlerBase() { + private final Callback.Handler DirectPlayEnumerateA = new HandlerBase() { public String getName() { return "Dplayx.DirectPlayEnumerateA"; } @@ -43,7 +43,7 @@ public void onCall() { }; // HRESULT WINAPI DirectPlayEnumerateW(LPDPENUMDPCALLBACKW lpEnumCallback, LPVOID lpContext); - private Callback.Handler DirectPlayEnumerateW = new HandlerBase() { + private final Callback.Handler DirectPlayEnumerateW = new HandlerBase() { public String getName() { return "Dplayx.DirectPlayEnumerateW"; } @@ -55,7 +55,7 @@ public void onCall() { }; // HRESULT WINAPI DirectPlayLobbyCreateA(LPGUID lpGUIDDSP, LPDIRECTPLAYLOBBYA *lplpDPL, IUnknown *lpUnk, LPVOID lpData, DWORD dwDataSize) - private Callback.Handler DirectPlayLobbyCreateA = new HandlerBase() { + private final Callback.Handler DirectPlayLobbyCreateA = new HandlerBase() { public String getName() { return "Dplayx.DirectPlayLobbyCreateA"; } @@ -72,7 +72,7 @@ public void onCall() { }; // HRESULT WINAPI DirectPlayLobbyCreateW( LPGUID lpGUIDDSP, LPDIRECTPLAYLOBBY *lplpDPL, IUnknown *lpUnk, LPVOID lpData, DWORD dwDataSize) - private Callback.Handler DirectPlayLobbyCreateW = new HandlerBase() { + private final Callback.Handler DirectPlayLobbyCreateW = new HandlerBase() { public String getName() { return "Dplayx.DirectPlayLobbyCreateW"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/Guid.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/Guid.java index 76e0e738..543b3856 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/Guid.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/Guid.java @@ -3,17 +3,17 @@ import jdos.hardware.Memory; public class Guid { - int i1; - int i2; - int i3; - int i4; - int i5; - int i6; - int i7; - int i8; - int i9; - int i10; - int i11; + final int i1; + final int i2; + final int i3; + final int i4; + final int i5; + final int i6; + final int i7; + final int i8; + final int i9; + final int i10; + final int i11; public Guid(int address) { i1 = Memory.mem_readd(address); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDBltFx.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDBltFx.java index 6b944bbf..ecf6b2b8 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDBltFx.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDBltFx.java @@ -3,36 +3,36 @@ import jdos.hardware.Memory; public class DDBltFx { - public int size; // size of structure - public int dwDDFX; // FX operations - public int dwROP; // Win32 raster operations - public int dwDDROP; // Raster operations new for DirectDraw - public int dwRotationAngle; // Rotation angle for blt - public int dwZBufferOpCode; // ZBuffer compares - public int dwZBufferLow; // Low limit of Z buffer - public int dwZBufferHigh; // High limit of Z buffer - public int dwZBufferBaseDest; // Destination base value - public int dwZDestConstBitDepth; // Bit depth used to specify Z constant for destination - public int dwZDestConst; // Constant to use as Z buffer for dest + public final int size; // size of structure + public final int dwDDFX; // FX operations + public final int dwROP; // Win32 raster operations + public final int dwDDROP; // Raster operations new for DirectDraw + public final int dwRotationAngle; // Rotation angle for blt + public final int dwZBufferOpCode; // ZBuffer compares + public final int dwZBufferLow; // Low limit of Z buffer + public final int dwZBufferHigh; // High limit of Z buffer + public final int dwZBufferBaseDest; // Destination base value + public final int dwZDestConstBitDepth; // Bit depth used to specify Z constant for destination + public final int dwZDestConst; // Constant to use as Z buffer for dest // Surface to use as Z buffer for dest - public int dwZSrcConstBitDepth; // Bit depth used to specify Z constant for source - public int dwZSrcConst; // Constant to use as Z buffer for src + public final int dwZSrcConstBitDepth; // Bit depth used to specify Z constant for source + public final int dwZSrcConst; // Constant to use as Z buffer for src // Surface to use as Z buffer for src - public int dwAlphaEdgeBlendBitDepth;// Bit depth used to specify constant for alpha edge blend - public int dwAlphaEdgeBlend; // Alpha for edge blending - public int dwReserved; - public int dwAlphaDestConstBitDepth;// Bit depth used to specify alpha constant for destination - public int dwAlphaDestConst; // Constant to use as Alpha Channel + public final int dwAlphaEdgeBlendBitDepth;// Bit depth used to specify constant for alpha edge blend + public final int dwAlphaEdgeBlend; // Alpha for edge blending + public final int dwReserved; + public final int dwAlphaDestConstBitDepth;// Bit depth used to specify alpha constant for destination + public final int dwAlphaDestConst; // Constant to use as Alpha Channel // Surface to use as Alpha Channel - public int dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source - public int dwAlphaSrcConst; // Constant to use as Alpha Channel + public final int dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source + public final int dwAlphaSrcConst; // Constant to use as Alpha Channel // Surface to use as Alpha Channel - public int dwFillColor; // color in RGB or Palettized + public final int dwFillColor; // color in RGB or Palettized // depth value for z-buffer // pixel val for RGBA or RGBZ // Surface to use as pattern - public DDColorKey ddckDestColorkey; // DestColorkey override - public DDColorKey ddckSrcColorkey; // DestColorkey override + public final DDColorKey ddckDestColorkey; // DestColorkey override + public final DDColorKey ddckSrcColorkey; // DestColorkey override public DDBltFx(int address) { size = Memory.mem_readd(address); address+=4; @@ -57,6 +57,6 @@ public DDBltFx(int address) { dwAlphaSrcConst = Memory.mem_readd(address); address+=4; dwFillColor = Memory.mem_readd(address); address+=4; ddckDestColorkey = new DDColorKey(address); address+=DDColorKey.SIZE; - ddckSrcColorkey = new DDColorKey(address); address+=DDColorKey.SIZE; + ddckSrcColorkey = new DDColorKey(address); } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDColorKey.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDColorKey.java index f68f5808..acc81a7e 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDColorKey.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDColorKey.java @@ -5,8 +5,8 @@ public class DDColorKey { public final static int SIZE = 8; - public int dwColorSpaceLowValue; // low boundary of color space that is to be treated as Color Key, inclusive - public int dwColorSpaceHighValue; // high boundary of color space that is to be treated as Color Key, inclusive + public final int dwColorSpaceLowValue; // low boundary of color space that is to be treated as Color Key, inclusive + public final int dwColorSpaceHighValue; // high boundary of color space that is to be treated as Color Key, inclusive public DDColorKey(int address) { dwColorSpaceLowValue = Memory.mem_readd(address); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDPixelFormat.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDPixelFormat.java index d41faaf0..331c7918 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDPixelFormat.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDPixelFormat.java @@ -24,19 +24,19 @@ public class DDPixelFormat { static public final int DDPF_BUMPDUDV = 0x00080000; // Bump map dUdV data in the pixel format is valid. public static final int SIZE = 0x20; - public int dwSize; /* 0: size of structure */ - public int dwFlags; /* 4: pixel format flags */ - public int dwFourCC; /* 8: (FOURCC code) */ + public final int dwSize; /* 0: size of structure */ + public final int dwFlags; /* 4: pixel format flags */ + public final int dwFourCC; /* 8: (FOURCC code) */ // union - public int dwRGBBitCount; /* C: how many bits per pixel or dwYUVBitCount or dwZBufferBitDepth or dwAlphaBitDepth or dwLuminanceBitCount or dwBumpBitCount*/ + public final int dwRGBBitCount; /* C: how many bits per pixel or dwYUVBitCount or dwZBufferBitDepth or dwAlphaBitDepth or dwLuminanceBitCount or dwBumpBitCount*/ // union - public int dwRBitMask; /* 10: mask for red bit or or dwYBitMask or dwStencilBitDepth or dwLuminanceBitMask or dwBumpDuBitMask */ + public final int dwRBitMask; /* 10: mask for red bit or or dwYBitMask or dwStencilBitDepth or dwLuminanceBitMask or dwBumpDuBitMask */ // union - public int dwGBitMask; /* 14: mask for green bits or dwUBitMask or dwZBitMask or dwBumpDvBitMask */ + public final int dwGBitMask; /* 14: mask for green bits or dwUBitMask or dwZBitMask or dwBumpDvBitMask */ // union - public int dwBBitMask; /* 18: mask for blue bits or dwVBitMask or dwStencilBitMask or dwBumpLuminanceBitMask*/ + public final int dwBBitMask; /* 18: mask for blue bits or dwVBitMask or dwStencilBitMask or dwBumpLuminanceBitMask*/ // union - public int dwRGBAlphaBitMask; /* 1C: mask for alpha channel or dwYUVAlphaBitMask or dwLuminanceAlphaBitMask or dwRGBZBitMask or dwYUVZBitMask*/ + public final int dwRGBAlphaBitMask; /* 1C: mask for alpha channel or dwYUVAlphaBitMask or dwLuminanceAlphaBitMask or dwRGBZBitMask or dwYUVZBitMask*/ public DDPixelFormat(int address) { dwSize = Memory.mem_readd(address); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDSurfaceDesc.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDSurfaceDesc.java index 5f72ae62..f3cd260e 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDSurfaceDesc.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/DDSurfaceDesc.java @@ -28,24 +28,24 @@ public class DDSurfaceDesc { static public final int DDSD_DEPTH = 0x00800000; static public final int DDSD_ALL = 0x00fff9ee; - public int dwSize; /* 0: size of the DDSURFACEDESC structure*/ - public int dwFlags; /* 4: determines what fields are valid*/ - public int dwHeight; /* 8: height of surface to be created*/ - public int dwWidth; /* C: width of input surface*/ + public final int dwSize; /* 0: size of the DDSURFACEDESC structure*/ + public final int dwFlags; /* 4: determines what fields are valid*/ + public final int dwHeight; /* 8: height of surface to be created*/ + public final int dwWidth; /* C: width of input surface*/ // union - public int lPitch; /* 10: distance to start of next line (return value only) or dwLinearSize*/ - public int dwBackBufferCount; /* 14: number of back buffers requested*/ + public final int lPitch; /* 10: distance to start of next line (return value only) or dwLinearSize*/ + public final int dwBackBufferCount; /* 14: number of back buffers requested*/ // union - public int dwMipMapCount; /* 18:number of mip-map levels requested or dwZBufferBitDepth or dwRefreshRate*/ - public int dwAlphaBitDepth; /* 1C:depth of alpha buffer requested*/ - public int dwReserved; /* 20:reserved*/ - public int lpSurface; /* 24:pointer to the associated surface memory*/ - public DDColorKey ddckCKDestOverlay; /* 28: CK for dest overlay use*/ - public DDColorKey ddckCKDestBlt; /* 30: CK for destination blt use*/ - public DDColorKey ddckCKSrcOverlay; /* 38: CK for source overlay use*/ - public DDColorKey ddckCKSrcBlt; /* 40: CK for source blt use*/ - public DDPixelFormat ddpfPixelFormat; /* 48: pixel format description of the surface*/ - public int ddsCaps; /* 68: direct draw surface caps */ + public final int dwMipMapCount; /* 18:number of mip-map levels requested or dwZBufferBitDepth or dwRefreshRate*/ + public final int dwAlphaBitDepth; /* 1C:depth of alpha buffer requested*/ + public final int dwReserved; /* 20:reserved*/ + public final int lpSurface; /* 24:pointer to the associated surface memory*/ + public final DDColorKey ddckCKDestOverlay; /* 28: CK for dest overlay use*/ + public final DDColorKey ddckCKDestBlt; /* 30: CK for destination blt use*/ + public final DDColorKey ddckCKSrcOverlay; /* 38: CK for source overlay use*/ + public final DDColorKey ddckCKSrcBlt; /* 40: CK for source blt use*/ + public final DDPixelFormat ddpfPixelFormat; /* 48: pixel format description of the surface*/ + public final int ddsCaps; /* 68: direct draw surface caps */ // DDSurfaceDesc2 // DDSCAPS2 diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw.java index ca0876b3..ab63dfac 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw.java @@ -54,11 +54,11 @@ static int addIDirectDraw(int address, boolean v7) { return address; } - static int FLAGS_CALLBACK2 = 0x00000001; - static int FLAGS_DESC2 = 0x00000002; - static int FLAGS_V7 = 0x00000004; + static final int FLAGS_CALLBACK2 = 0x00000001; + static final int FLAGS_DESC2 = 0x00000002; + static final int FLAGS_V7 = 0x00000004; - static int OFFSET_FLAGS = 0; + static final int OFFSET_FLAGS = 0; static final int OFFSET_PALETTE = 4; @@ -140,7 +140,7 @@ public static int DuplicateSurface(int This, int lpDDSurface, int lplpDupDDSurfa } - static private int[][] mode = new int[][] { + static private final int[][] mode = new int[][] { {320, 240, 8}, {320, 240, 16}, {320, 240, 32}, @@ -170,23 +170,23 @@ public static int EnumDisplayModes(int This, int dwFlags, int lpDDSurfaceDesc, i Memory.mem_writed(address, DDSurfaceDesc.SIZE); Memory.mem_writed(address+4, DDSurfaceDesc.DDSD_HEIGHT|DDSurfaceDesc.DDSD_WIDTH|DDSurfaceDesc.DDSD_PITCH|DDSurfaceDesc.DDSD_PIXELFORMAT); Memory.mem_writed(address+0x48, DDPixelFormat.SIZE); - for (int i=0;i>3)); - if (mode[i][2]>8) - Memory.mem_writed(address+0x48+4, DDPixelFormat.DDPF_RGB); + Memory.mem_writed(address + 8, ints[1]); + Memory.mem_writed(address + 12, ints[0]); + Memory.mem_writed(address + 16, ints[1] * (ints[1] >> 3)); + if (ints[2] > 8) + Memory.mem_writed(address + 0x48 + 4, DDPixelFormat.DDPF_RGB); else - Memory.mem_writed(address+0x48+4, DDPixelFormat.DDPF_RGB|DDPixelFormat.DDPF_PALETTEINDEXED8); - Memory.mem_writed(address+0x48+0xC, mode[i][2]); + Memory.mem_writed(address + 0x48 + 4, DDPixelFormat.DDPF_RGB | DDPixelFormat.DDPF_PALETTEINDEXED8); + Memory.mem_writed(address + 0x48 + 0xC, ints[2]); // :TODO: what about pixel formats? WinSystem.call(lpEnumModesCallback, address, lpContext); } @@ -324,7 +324,7 @@ public static int GetCaps(int This, int lpDDDriverCaps, int lpDDHELCaps) { Memory.mem_writed(lpDDDriverCaps, 0x02000000);lpDDDriverCaps+=4;// 40 dwVidMemFree Memory.mem_writed(lpDDDriverCaps, 0x00000020);lpDDDriverCaps+=4;// 44 dwMaxVisibleOverlays Memory.mem_writed(lpDDDriverCaps, 0x00000000);lpDDDriverCaps+=4;// 48 dwCurrVisibleOverlays - Memory.mem_writed(lpDDDriverCaps, 0x00000003);lpDDDriverCaps+=4;// 4C dwNumFourCCCodes + Memory.mem_writed(lpDDDriverCaps, 0x00000003); // Memory.mem_writed(lpDDDriverCaps, );lpDDDriverCaps+=4; // 50 dwAlignBoundarySrc // Memory.mem_writed(lpDDDriverCaps, );lpDDDriverCaps+=4; // 54 dwAlignSizeSrc // Memory.mem_writed(lpDDDriverCaps, );lpDDDriverCaps+=4; // 58 dwAlignBoundaryDest diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw7.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw7.java index 98f4a5ec..455e68c9 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw7.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDraw7.java @@ -5,7 +5,7 @@ import jdos.win.builtin.HandlerBase; public class IDirectDraw7 extends IUnknown { - private static int createVTable() { + private static void createVTable() { int address = allocateVTable("IDirectDraw7", IDirectDraw.VTABLE_SIZE+7); int result = address; address = IDirectDraw.addIDirectDraw(address, true); @@ -20,7 +20,6 @@ private static int createVTable() { /* added in v7 */ address = add(address, StartModeTest); address = add(address, EvaluateMode); - return result; } public static int create() { @@ -32,7 +31,7 @@ public static int create() { /* added in v2 */ // HRESULT GetAvailableVidMem(this, LPDDSCAPS2 lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) - static private Callback.Handler GetAvailableVidMem = new HandlerBase() { + static private final Callback.Handler GetAvailableVidMem = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.GetAvailableVidMem"; } @@ -47,7 +46,7 @@ public void onCall() { /* added in v4 */ // HRESULT GetSurfaceFromDC(this HDC hdc, LPDIRECTDRAWSURFACE7 *pSurf) - static private Callback.Handler GetSurfaceFromDC = new HandlerBase() { + static private final Callback.Handler GetSurfaceFromDC = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.GetSurfaceFromDC"; } @@ -60,7 +59,7 @@ public void onCall() { }; // HRESULT RestoreAllSurfaces(this) - static private Callback.Handler RestoreAllSurfaces = new HandlerBase() { + static private final Callback.Handler RestoreAllSurfaces = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.RestoreAllSurfaces"; } @@ -71,7 +70,7 @@ public void onCall() { }; // HRESULT TestCooperativeLevel(this) - static private Callback.Handler TestCooperativeLevel = new HandlerBase() { + static private final Callback.Handler TestCooperativeLevel = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.TestCooperativeLevel"; } @@ -81,7 +80,7 @@ public void onCall() { } }; // HRESULT GetDeviceIdentifier(this, LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags) - static private Callback.Handler GetDeviceIdentifier = new HandlerBase() { + static private final Callback.Handler GetDeviceIdentifier = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.GetDeviceIdentifier"; } @@ -95,7 +94,7 @@ public void onCall() { /* added in v7 */ // HRESULT StartModeTest(this, LPSIZE pModes, DWORD dwNumModes, DWORD dwFlags) - static private Callback.Handler StartModeTest = new HandlerBase() { + static private final Callback.Handler StartModeTest = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.StartModeTest"; } @@ -109,7 +108,7 @@ public void onCall() { }; // HRESULT EvaluateMode(this, DWORD dwFlags, DWORD *pTimeout) - static private Callback.Handler EvaluateMode = new HandlerBase() { + static private final Callback.Handler EvaluateMode = new HandlerBase() { public java.lang.String getName() { return "IDirectDraw7.EvaluateMode"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawClipper.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawClipper.java index 022953d1..69062c3a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawClipper.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawClipper.java @@ -17,8 +17,7 @@ public static int create() { int vtable = getVTable("IDirectDrawClipper"); if (vtable == 0) vtable = createVTable(); - int result = allocate(vtable, DATA_SIZE, 0); - return result; + return allocate(vtable, DATA_SIZE, 0); } static private int createVTable() { @@ -36,7 +35,7 @@ static private int createVTable() { } // HRESULT GetClipList(this, LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) - static private Callback.Handler GetClipList = new HandlerBase() { + static private final Callback.Handler GetClipList = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawClipper.GetClipList"; } @@ -50,7 +49,7 @@ public void onCall() { }; // HRESULT GetHWnd(this, HWND *lphWnd) - static private Callback.Handler GetHWnd = new HandlerBase() { + static private final Callback.Handler GetHWnd = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawClipper.GetHWnd"; } @@ -67,7 +66,7 @@ public void onCall() { }; // HRESULT Initialize(this, LPDIRECTDRAW lpDD, DWORD dwFlags) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawClipper.Initialize"; } @@ -80,7 +79,7 @@ public void onCall() { }; // HRESULT IsClipListChanged(this, BOOL *lpbChanged) - static private Callback.Handler IsClipListChanged = new HandlerBase() { + static private final Callback.Handler IsClipListChanged = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawClipper.IsClipListChanged"; } @@ -92,7 +91,7 @@ public void onCall() { }; // HRESULT SetClipList(this, LPRGNDATA lpClipList, DWORD dwFlags) - static private Callback.Handler SetClipList = new HandlerBase() { + static private final Callback.Handler SetClipList = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawClipper.SetClipList"; } @@ -105,7 +104,7 @@ public void onCall() { }; // HRESULT SetHWnd(this, DWORD dwFlags, HWND hWnd) - static private Callback.Handler SetHWnd = new HandlerBase() { + static private final Callback.Handler SetHWnd = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawClipper.SetHWnd"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawPalette.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawPalette.java index 9b78f34a..29c5d64f 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawPalette.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawPalette.java @@ -44,7 +44,7 @@ public static int createDefault() { for (int r = 0;r<256;r+=51) { for (int g = 0;r<256;r+=51) { for (int b = 0;r<256;r+=51) { - table[pos++] = (r<<16)|(g<<8)|b; + table[pos++] = (r<<16)|(0)|b; } } } @@ -90,7 +90,7 @@ static private int createVTable() { } // HRESULT GetCaps(this, LPDWORD lpdwCaps) - static private Callback.Handler GetCaps = new HandlerBase() { + static private final Callback.Handler GetCaps = new HandlerBase() { public String getName() { return "IDirectDrawPalette.GetCaps"; } @@ -107,7 +107,7 @@ public void onCall() { }; // HRESULT GetEntries(this, DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) - static private Callback.Handler GetEntries = new HandlerBase() { + static private final Callback.Handler GetEntries = new HandlerBase() { public String getName() { return "IDirectDrawPalette.GetEntries"; } @@ -125,7 +125,7 @@ public void onCall() { }; // HRESULT Initialize(this, LPDIRECTDRAW lpDD, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public String getName() { return "IDirectDrawPalette.Initialize"; } @@ -139,7 +139,7 @@ public void onCall() { }; // HRESULT SetEntries(this, DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) - static private Callback.Handler SetEntries = new HandlerBase() { + static private final Callback.Handler SetEntries = new HandlerBase() { public String getName() { return "IDirectDrawPalette.SetEntries"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface.java index 409721fb..bda2b821 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface.java @@ -5,7 +5,6 @@ import jdos.cpu.Callback; import jdos.gui.Main; import jdos.hardware.Memory; -import jdos.win.Console; import jdos.win.Win; import jdos.win.builtin.HandlerBase; import jdos.win.builtin.directx.DError; @@ -66,23 +65,23 @@ public class IDirectDrawSurface extends IUnknown { static final int DDCKEY_SRCBLT = 0x00000008; /* To be used as src for blt */ static final int DDCKEY_SRCOVERLAY = 0x00000010; /* To be used as src for CK overlays */ - static int FLAGS_CAPS2 = 0x00000001; - static int FLAGS_DESC2 = 0x00000002; - static int FLAGS_LOCKED = 0x00000004; + static final int FLAGS_CAPS2 = 0x00000001; + static final int FLAGS_DESC2 = 0x00000002; + static final int FLAGS_LOCKED = 0x00000004; - static int OFFSET_FLAGS = 0; - static int OFFSET_PALETTE = 4; - static int OFFSET_BACK_BUFFER = 8; - static int OFFSET_DC = 12; - static int OFFSET_IMAGE_CACHE = 16; - static int OFFSET_IMAGE_CACHE_TIME = 20; - static int OFFSET_DIRECT_DRAW = 24; - static int OFFSET_CLIPPER = 28; + static final int OFFSET_FLAGS = 0; + static final int OFFSET_PALETTE = 4; + static final int OFFSET_BACK_BUFFER = 8; + static final int OFFSET_DC = 12; + static final int OFFSET_IMAGE_CACHE = 16; + static final int OFFSET_IMAGE_CACHE_TIME = 20; + static final int OFFSET_DIRECT_DRAW = 24; + static final int OFFSET_CLIPPER = 28; // doesn't include description since that gets computed on the fly - static int DATA_SIZE = 32; + static final int DATA_SIZE = 32; - static int OFFSET_DESC = DATA_SIZE; + static final int OFFSET_DESC = DATA_SIZE; static public int lastPaletteChange = 0; @@ -154,7 +153,7 @@ public static int create(int pDirectDraw, int pDesc) { return create("IDirectDrawSurface", pDirectDraw, pDesc, 0); } - static private Callback.Handler CleanUp = new DirectCallback() { + static private final Callback.Handler CleanUp = new DirectCallback() { public java.lang.String getName() { return "IDirectDrawSurface.CleanUp"; } @@ -322,7 +321,7 @@ public static int create(String name, int pDirectDraw, int pDesc, int flags) { return result; } - static int VTABLE_COUNT = 33; + static final int VTABLE_COUNT = 33; static private int createVTable() { int address = allocateVTable("IDirectDrawSurface", VTABLE_COUNT); @@ -370,7 +369,7 @@ static int addIDirectDrawSurface(int address) { } // HRESULT AddAttachedSurface(this, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) - static private Callback.Handler AddAttachedSurface = new HandlerBase() { + static private final Callback.Handler AddAttachedSurface = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.AddAttachedSurface"; } @@ -382,7 +381,7 @@ public void onCall() { }; // HRESULT AddOverlayDirtyRect(this, LPRECT lpRect) - static private Callback.Handler AddOverlayDirtyRect = new HandlerBase() { + static private final Callback.Handler AddOverlayDirtyRect = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.AddOverlayDirtyRect"; } @@ -394,7 +393,7 @@ public void onCall() { }; // HRESULT Blt(this, LPRECT lpDestRect, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) - static private Callback.Handler Blt = new HandlerBase() { + static private final Callback.Handler Blt = new HandlerBase() { static public final int DDBLT_ALPHADEST = 0x00000001; static public final int DDBLT_ALPHADESTCONSTOVERRIDE = 0x00000002; static public final int DDBLT_ALPHADESTNEG = 0x00000004; @@ -487,7 +486,7 @@ public void onCall() { }; // HRESULT BltBatch(this, LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) - static private Callback.Handler BltBatch = new HandlerBase() { + static private final Callback.Handler BltBatch = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.BltBatch"; } @@ -501,7 +500,7 @@ public void onCall() { }; // HRESULT BltFast(this, DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) - static private Callback.Handler BltFast = new HandlerBase() { + static private final Callback.Handler BltFast = new HandlerBase() { static private final int DDBLTFAST_NOCOLORKEY = 0x00000000; static private final int DDBLTFAST_SRCCOLORKEY = 0x00000001; static private final int DDBLTFAST_DESTCOLORKEY = 0x00000002; @@ -547,7 +546,7 @@ public void onCall() { }; // HRESULT DeleteAttachedSurface(this, DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) - static private Callback.Handler DeleteAttachedSurface = new HandlerBase() { + static private final Callback.Handler DeleteAttachedSurface = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.DeleteAttachedSurface"; } @@ -560,7 +559,7 @@ public void onCall() { }; // HRESULT EnumAttachedSurfaces(this, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) - static private Callback.Handler EnumAttachedSurfaces = new HandlerBase() { + static private final Callback.Handler EnumAttachedSurfaces = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.EnumAttachedSurfaces"; } @@ -573,7 +572,7 @@ public void onCall() { }; // HRESULT EnumOverlayZOrders(this, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) - static private Callback.Handler EnumOverlayZOrders = new HandlerBase() { + static private final Callback.Handler EnumOverlayZOrders = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.EnumOverlayZOrders"; } @@ -587,7 +586,7 @@ public void onCall() { }; // HRESULT Flip(this, LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags) - static private Callback.Handler Flip = new HandlerBase() { + static private final Callback.Handler Flip = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.Flip"; } @@ -617,7 +616,7 @@ public void onCall() { }; // HRESULT GetAttachedSurface(this, LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE *lplpDDAttachedSurface) - static private Callback.Handler GetAttachedSurface = new HandlerBase() { + static private final Callback.Handler GetAttachedSurface = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetAttachedSurface"; } @@ -640,7 +639,7 @@ public void onCall() { }; // HRESULT GetBltStatus(this, DWORD dwFlags) - static private Callback.Handler GetBltStatus = new HandlerBase() { + static private final Callback.Handler GetBltStatus = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetBltStatus"; } @@ -652,7 +651,7 @@ public void onCall() { }; // HRESULT GetCaps(this, LPDDSCAPS lpDDSCaps) - static private Callback.Handler GetCaps = new HandlerBase() { + static private final Callback.Handler GetCaps = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetCaps"; } @@ -674,7 +673,7 @@ public void onCall() { }; // HRESULT GetClipper(this, LPDIRECTDRAWCLIPPER *lplpDDClipper) - static private Callback.Handler GetClipper = new HandlerBase() { + static private final Callback.Handler GetClipper = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetClipper"; } @@ -693,7 +692,7 @@ public void onCall() { }; // HRESULT GetColorKey(this, DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) - static private Callback.Handler GetColorKey = new HandlerBase() { + static private final Callback.Handler GetColorKey = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetColorKey"; } @@ -706,7 +705,7 @@ public void onCall() { }; // HRESULT GetDC(this, HDC *lphDC) - static private Callback.Handler GetDC = new HandlerBase() { + static private final Callback.Handler GetDC = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetDC"; } @@ -732,7 +731,7 @@ public void onCall() { }; // HRESULT GetFlipStatus(this, DWORD dwFlags) - static private Callback.Handler GetFlipStatus = new HandlerBase() { + static private final Callback.Handler GetFlipStatus = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetFlipStatus"; } @@ -744,7 +743,7 @@ public void onCall() { }; // HRESULT GetOverlayPosition(this, LPLONG lplX, LPLONG lplY) - static private Callback.Handler GetOverlayPosition = new HandlerBase() { + static private final Callback.Handler GetOverlayPosition = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetOverlayPosition"; } @@ -757,7 +756,7 @@ public void onCall() { }; // HRESULT GetPalette(this, LPDIRECTDRAWPALETTE *lplpDDPalette) - static private Callback.Handler GetPalette = new HandlerBase() { + static private final Callback.Handler GetPalette = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetPalette"; } @@ -769,7 +768,7 @@ public void onCall() { }; // HRESULT GetPixelFormat(this, LPDDPIXELFORMAT lpDDPixelFormat) - static private Callback.Handler GetPixelFormat = new HandlerBase() { + static private final Callback.Handler GetPixelFormat = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetPixelFormat"; } @@ -792,7 +791,7 @@ public void onCall() { }; // HRESULT GetSurfaceDesc(this, LPDDSURFACEDESC lpDDSurfaceDesc) - static private Callback.Handler GetSurfaceDesc = new HandlerBase() { + static private final Callback.Handler GetSurfaceDesc = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.GetSurfaceDesc"; } @@ -816,7 +815,7 @@ public void onCall() { }; // HRESULT Initialize(this, LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.Initialize"; } @@ -829,7 +828,7 @@ public void onCall() { }; // HRESULT IsLost(this) - static private Callback.Handler IsLost = new HandlerBase() { + static private final Callback.Handler IsLost = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.IsLost"; } @@ -840,7 +839,7 @@ public void onCall() { }; // HRESULT Lock(this, LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) - static private Callback.Handler Lock = new HandlerBase() { + static private final Callback.Handler Lock = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.Lock"; } @@ -852,19 +851,19 @@ public void onCall() { int hEvent = CPU.CPU_Pop32(); if ((dwFlags & DDLOCK_EVENT)!=0) { - Console.out(getName()+" flag DDLOCK_EVENT not implemented yet "); + System.out.println(getName()+" flag DDLOCK_EVENT not implemented yet "); notImplemented(); } if ((dwFlags & DDLOCK_NOSYSLOCK)!=0) { - Console.out(getName()+" flag DDLOCK_NOSYSLOCK not implemented yet "); + System.out.println(getName()+" flag DDLOCK_NOSYSLOCK not implemented yet "); notImplemented(); } if ((dwFlags & DDLOCK_NOOVERWRITE)!=0) { - Console.out(getName()+" flag DDLOCK_NOOVERWRITE not implemented yet "); + System.out.println(getName()+" flag DDLOCK_NOOVERWRITE not implemented yet "); notImplemented(); } if ((dwFlags & DDLOCK_DISCARDCONTENTS)!=0) { - Console.out(getName()+" flag DDLOCK_DISCARDCONTENTS not implemented yet "); + System.out.println(getName()+" flag DDLOCK_DISCARDCONTENTS not implemented yet "); notImplemented(); } if (lpDDSurfaceDesc == 0) { @@ -883,7 +882,7 @@ public void onCall() { }; // HRESULT ReleaseDC(this, HDC hDC) - static private Callback.Handler ReleaseDC = new HandlerBase() { + static private final Callback.Handler ReleaseDC = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.ReleaseDC"; } @@ -904,7 +903,7 @@ public void onCall() { }; // HRESULT Restore(this) - static private Callback.Handler Restore = new HandlerBase() { + static private final Callback.Handler Restore = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.Restore"; } @@ -916,7 +915,7 @@ public void onCall() { }; // HRESULT SetClipper(this, LPDIRECTDRAWCLIPPER lpDDClipper) - static private Callback.Handler SetClipper = new HandlerBase() { + static private final Callback.Handler SetClipper = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.SetClipper"; } @@ -930,7 +929,7 @@ public void onCall() { }; // HRESULT SetColorKey(this, DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) - static private Callback.Handler SetColorKey = new HandlerBase() { + static private final Callback.Handler SetColorKey = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.SetColorKey"; } @@ -989,7 +988,7 @@ public void onCall() { }; // HRESULT SetOverlayPosition(this, LONG lX, LONG lY) - static private Callback.Handler SetOverlayPosition = new HandlerBase() { + static private final Callback.Handler SetOverlayPosition = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.SetOverlayPosition"; } @@ -1002,7 +1001,7 @@ public void onCall() { }; // HRESULT SetPalette(this, LPDIRECTDRAWPALETTE lpDDPalette) - static private Callback.Handler SetPalette = new HandlerBase() { + static private final Callback.Handler SetPalette = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.SetPalette"; } @@ -1051,7 +1050,7 @@ public void onCall() { }; // HRESULT Unlock(this, LPVOID lpSurfaceData) - static private Callback.Handler Unlock = new HandlerBase() { + static private final Callback.Handler Unlock = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.Unlock"; } @@ -1066,7 +1065,7 @@ public void onCall() { }; // HRESULT UpdateOverlay(this, LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) - static private Callback.Handler UpdateOverlay = new HandlerBase() { + static private final Callback.Handler UpdateOverlay = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.UpdateOverlay"; } @@ -1082,7 +1081,7 @@ public void onCall() { }; // HRESULT UpdateOverlayDisplay(this, DWORD dwFlags) - static private Callback.Handler UpdateOverlayDisplay = new HandlerBase() { + static private final Callback.Handler UpdateOverlayDisplay = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.UpdateOverlayDisplay"; } @@ -1094,7 +1093,7 @@ public void onCall() { }; // HRESULT UpdateOverlayZOrder(this, DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSReference) - static private Callback.Handler UpdateOverlayZOrder = new HandlerBase() { + static private final Callback.Handler UpdateOverlayZOrder = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface.UpdateOverlayZOrder"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface7.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface7.java index ba7eb322..d191c895 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface7.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IDirectDrawSurface7.java @@ -12,7 +12,7 @@ public static int create(int pDirectDraw, int pDesc) { return IDirectDrawSurface.create("IDirectDrawSurface7", pDirectDraw, pDesc, IDirectDrawSurface.FLAGS_CAPS2 | IDirectDrawSurface.FLAGS_DESC2); } - static private int createVTable() { + static private void createVTable() { int address = allocateVTable("IDirectDrawSurface7", IDirectDrawSurface.VTABLE_COUNT+13); int result = address; address = IDirectDrawSurface.addIDirectDrawSurface(address); @@ -34,12 +34,11 @@ static private int createVTable() { address = add(address, GetPriority); address = add(address, SetLOD); address = add(address, GetLOD); - return result; } /* added in v2 */ // HRESULT GetDDInterface(this, LPVOID *lplpDD) - static private Callback.Handler GetDDInterface = new HandlerBase() { + static private final Callback.Handler GetDDInterface = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.GetDDInterface"; } @@ -51,7 +50,7 @@ public void onCall() { }; // HRESULT PageLock(this, DWORD dwFlags) - static private Callback.Handler PageLock = new HandlerBase() { + static private final Callback.Handler PageLock = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.PageLock"; } @@ -63,7 +62,7 @@ public void onCall() { }; // HRESULT PageUnlock(this, DWORD dwFlags) - static private Callback.Handler PageUnlock = new HandlerBase() { + static private final Callback.Handler PageUnlock = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.PageUnlock"; } @@ -76,7 +75,7 @@ public void onCall() { /* added in v3 */ // HRESULT SetSurfaceDesc(this, LPDDSURFACEDESC2 lpDDSD, DWORD dwFlags) - static private Callback.Handler SetSurfaceDesc = new HandlerBase() { + static private final Callback.Handler SetSurfaceDesc = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.SetSurfaceDesc"; } @@ -90,7 +89,7 @@ public void onCall() { /* added in v4 */ // HRESULT SetPrivateData(this, REFGUID tag, LPVOID pData, DWORD cbSize, DWORD dwFlags) - static private Callback.Handler SetPrivateData = new HandlerBase() { + static private final Callback.Handler SetPrivateData = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.SetPrivateData"; } @@ -105,7 +104,7 @@ public void onCall() { }; // HRESULT GetPrivateData(this, REFGUID tag, LPVOID pBuffer, LPDWORD pcbBufferSize) - static private Callback.Handler GetPrivateData = new HandlerBase() { + static private final Callback.Handler GetPrivateData = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.GetPrivateData"; } @@ -119,7 +118,7 @@ public void onCall() { }; // HRESULT FreePrivateData(this, REFGUID tag) - static private Callback.Handler FreePrivateData = new HandlerBase() { + static private final Callback.Handler FreePrivateData = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.FreePrivateData"; } @@ -131,7 +130,7 @@ public void onCall() { }; // HRESULT GetUniquenessValue(this, LPDWORD pValue) - static private Callback.Handler GetUniquenessValue = new HandlerBase() { + static private final Callback.Handler GetUniquenessValue = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.GetUniquenessValue"; } @@ -143,7 +142,7 @@ public void onCall() { }; // HRESULT ChangeUniquenessValue(this) - static private Callback.Handler ChangeUniquenessValue = new HandlerBase() { + static private final Callback.Handler ChangeUniquenessValue = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.ChangeUniquenessValue"; } @@ -155,7 +154,7 @@ public void onCall() { /* added in v7 */ // HRESULT SetPriority(this, DWORD prio) - static private Callback.Handler SetPriority = new HandlerBase() { + static private final Callback.Handler SetPriority = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.SetPriority"; } @@ -167,7 +166,7 @@ public void onCall() { }; // HRESULT GetPriority(this, LPDWORD prio) - static private Callback.Handler GetPriority = new HandlerBase() { + static private final Callback.Handler GetPriority = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.GetPriority"; } @@ -179,7 +178,7 @@ public void onCall() { }; // HRESULT SetLOD(this, DWORD lod) - static private Callback.Handler SetLOD = new HandlerBase() { + static private final Callback.Handler SetLOD = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.SetLOD"; } @@ -191,7 +190,7 @@ public void onCall() { }; // HRESULT GetLOD(this, LPDWORD lod) - static private Callback.Handler GetLOD = new HandlerBase() { + static private final Callback.Handler GetLOD = new HandlerBase() { public java.lang.String getName() { return "IDirectDrawSurface7.GetLOD"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IUnknown.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IUnknown.java index 9f2afd3d..e016efb3 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IUnknown.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/ddraw/IUnknown.java @@ -21,14 +21,14 @@ public class IUnknown extends WinAPI { static private final int OFFSET_CLEANUP = 8; static public final int OFFSET_DATA_START = 12; - static private Hashtable vtables = new Hashtable(); - static private Hashtable names = new Hashtable(); + static private final Hashtable vtables = new Hashtable(); + static private final Hashtable names = new Hashtable(); static protected int getVTable(String name) { Integer result = (Integer)vtables.get(name); if (result == null) return 0; - return result.intValue(); + return result; } static protected int getData(int This, int offset) { @@ -74,8 +74,8 @@ static protected int add(int address, Class c, String methodName, String[] param static protected int allocateVTable(String name, int functions) { int result = WinSystem.getCurrentProcess().heap.alloc((functions+3)*4, false); - vtables.put(name, new Integer(result)); - names.put(new Integer(result), name); + vtables.put(name, result); + names.put(result, name); return result; } @@ -100,7 +100,7 @@ static protected int addIUnknown(int address, Callback.Handler query) { } // HRESULT QueryInterface(this, REFIID riid, void** ppvObject) - static private Callback.Handler QueryInterface = new HandlerBase() { + static private final Callback.Handler QueryInterface = new HandlerBase() { public java.lang.String getName() { return "IUnknown.QueryInterface"; } @@ -123,7 +123,7 @@ static public int AddRef(int This) { } // ULONG AddRef(this) - static private Callback.Handler AddRef = new HandlerBase() { + static private final Callback.Handler AddRef = new HandlerBase() { public java.lang.String getName() { return "IUnknown.AddRef"; } @@ -135,7 +135,7 @@ public void onCall() { static public int Release(int This) { if (WinAPI.LOG) - System.out.println(names.get(new Integer(getVTable(This)))+".Release"); + System.out.println(names.get(getVTable(This))+".Release"); int refCount = getRefCount(This); refCount--; setRefCount(This, refCount); @@ -153,7 +153,7 @@ static public int Release(int This) { } // ULONG Release(this) - static private Callback.Handler Release = new HandlerBase() { + static private final Callback.Handler Release = new HandlerBase() { public java.lang.String getName() { return "IUnknown.Release"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIDataFormat.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIDataFormat.java index 3be0db9e..7db98027 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIDataFormat.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIDataFormat.java @@ -16,10 +16,10 @@ public DIDataFormat(int address) { address+=DIObjectDataFormat.SIZE; } } - public int dwSize; - public int dwObjSize; - public int dwFlags; - public int dwDataSize; - public int dwNumObjs; - public DIObjectDataFormat[] rgodf; + public final int dwSize; + public final int dwObjSize; + public final int dwFlags; + public final int dwDataSize; + public final int dwNumObjs; + public final DIObjectDataFormat[] rgodf; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIObjectDataFormat.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIObjectDataFormat.java index 3123a453..9cc1725b 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIObjectDataFormat.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/DIObjectDataFormat.java @@ -8,10 +8,10 @@ public DIObjectDataFormat(int address) { pGuid = Memory.mem_readd(address);address+=4; dwOfs = Memory.mem_readd(address);address+=4; dwType = Memory.mem_readd(address);address+=4; - dwFlags = Memory.mem_readd(address);address+=4; + dwFlags = Memory.mem_readd(address); } - public int pGuid; - public int dwOfs; - public int dwType; - public int dwFlags; + public final int pGuid; + public final int dwOfs; + public final int dwType; + public final int dwFlags; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInput.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInput.java index 43cc8866..e14779d9 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInput.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInput.java @@ -11,10 +11,10 @@ public class IDirectInput extends IUnknown { static final int VTABLE_SIZE = 5; - static int OFFSET_FLAGS = 0; + static final int OFFSET_FLAGS = 0; static final int DATA_SIZE = 4; - static Guid GUID_SysMouse = new Guid(0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + static final Guid GUID_SysMouse = new Guid(0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); static Guid GUID_SysKeyboard = new Guid(0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); static Guid GUID_Joystick = new Guid(0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); static Guid GUID_SysMouseEm = new Guid(0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); @@ -28,14 +28,13 @@ private static int createVTable() { return address; } - static int addIDirectSound(int address) { + static void addIDirectSound(int address) { address = addIUnknown(address); address = add(address, CreateDevice); address = add(address, EnumDevices); address = add(address, GetDeviceStatus); address = add(address, RunControlPanel); address = add(address, Initialize); - return address; } public static int create() { @@ -52,7 +51,7 @@ public static int create(String name, int flags) { } // HRESULT CreateDevice(this, REFGUID rguid, LPDIRECTINPUTDEVICEA * lplpDirectInputDevice, LPUNKNOWN) - static private Callback.Handler CreateDevice = new HandlerBase() { + static private final Callback.Handler CreateDevice = new HandlerBase() { public java.lang.String getName() { return "IDirectInput.CreateDevice"; } @@ -70,7 +69,7 @@ public void onCall() { }; // HRESULT EnumDevices(this, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) - static private Callback.Handler EnumDevices = new HandlerBase() { + static private final Callback.Handler EnumDevices = new HandlerBase() { public java.lang.String getName() { return "IDirectInput.EnumDevices"; } @@ -85,7 +84,7 @@ public void onCall() { }; // HRESULT GetDeviceStatus(this, REFGUID rguid) - static private Callback.Handler GetDeviceStatus = new HandlerBase() { + static private final Callback.Handler GetDeviceStatus = new HandlerBase() { public java.lang.String getName() { return "IDirectInput.GetDeviceStatus"; } @@ -97,7 +96,7 @@ public void onCall() { }; // HRESULT RunControlPanel(this, HWND hwndOwner, DWORD dwFlags) - static private Callback.Handler RunControlPanel = new HandlerBase() { + static private final Callback.Handler RunControlPanel = new HandlerBase() { public java.lang.String getName() { return "IDirectInput.RunControlPanel"; } @@ -110,7 +109,7 @@ public void onCall() { }; // HRESULT Initialize(this, HINSTANCE hinst, DWORD dwVersion) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectInput.Initialize"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA.java index 5a948c20..1c5a682a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA.java @@ -8,7 +8,7 @@ public class IDirectInputDeviceA extends IUnknown { static final int VTABLE_SIZE = 15; - static int OFFSET_FLAGS = 0; + static final int OFFSET_FLAGS = 0; static final int DATA_SIZE = 4; @@ -18,7 +18,7 @@ private static int createVTable() { return address; } - static int addIDirectSound(int address) { + static void addIDirectSound(int address) { address = addIUnknown(address); address = add(address, GetCapabilities); address = add(address, EnumObjects); @@ -35,7 +35,6 @@ static int addIDirectSound(int address) { address = add(address, GetDeviceInfo); address = add(address, RunControlPanel); address = add(address, Initialize); - return address; } public static int create() { @@ -52,7 +51,7 @@ public static int create(String name, int flags) { } // HRESULT GetCapabilities(this, LPDIDEVCAPS lpDIDevCaps) - static private Callback.Handler GetCapabilities = new HandlerBase() { + static private final Callback.Handler GetCapabilities = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.GetCapabilities"; } @@ -64,7 +63,7 @@ public void onCall() { }; // HRESULT EnumObjects(this, LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) - static private Callback.Handler EnumObjects = new HandlerBase() { + static private final Callback.Handler EnumObjects = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.EnumObjects"; } @@ -78,7 +77,7 @@ public void onCall() { }; // HRESULT GetProperty(this, REFGUID rguidProp, LPDIPROPHEADER pdiph) - static private Callback.Handler GetProperty = new HandlerBase() { + static private final Callback.Handler GetProperty = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.GetProperty"; } @@ -91,7 +90,7 @@ public void onCall() { }; // HRESULT SetProperty(this, REFGUID rguidProp, LPCDIPROPHEADER pdiph) - static private Callback.Handler SetProperty = new HandlerBase() { + static private final Callback.Handler SetProperty = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.SetProperty"; } @@ -104,7 +103,7 @@ public void onCall() { }; // HRESULT Acquire(this) - static private Callback.Handler Acquire = new HandlerBase() { + static private final Callback.Handler Acquire = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.Acquire"; } @@ -115,7 +114,7 @@ public void onCall() { }; // HRESULT Unacquire(this) - static private Callback.Handler Unacquire = new HandlerBase() { + static private final Callback.Handler Unacquire = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.Unacquire"; } @@ -126,7 +125,7 @@ public void onCall() { }; // HRESULT GetDeviceState(this, DWORD cbData, LPVOID lpvData) - static private Callback.Handler GetDeviceState = new HandlerBase() { + static private final Callback.Handler GetDeviceState = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.GetDeviceState"; } @@ -139,7 +138,7 @@ public void onCall() { }; // HRESULT GetDeviceData(this, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) - static private Callback.Handler GetDeviceData = new HandlerBase() { + static private final Callback.Handler GetDeviceData = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.GetDeviceData"; } @@ -154,7 +153,7 @@ public void onCall() { }; // HRESULT SetDataFormat(this, LPCDIDATAFORMAT lpdf) - static private Callback.Handler SetDataFormat = new HandlerBase() { + static private final Callback.Handler SetDataFormat = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.SetDataFormat"; } @@ -166,7 +165,7 @@ public void onCall() { }; // HRESULT SetEventNotification(this, HANDLE hEvent) - static private Callback.Handler SetEventNotification = new HandlerBase() { + static private final Callback.Handler SetEventNotification = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.SetEventNotification"; } @@ -178,7 +177,7 @@ public void onCall() { }; // HRESULT SetCooperativeLevel(this, HWND hwnd, DWORD dwFlags) - static private Callback.Handler SetCooperativeLevel = new HandlerBase() { + static private final Callback.Handler SetCooperativeLevel = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.SetCooperativeLevel"; } @@ -191,7 +190,7 @@ public void onCall() { }; // HRESULT GetObjectInfo(this, LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) - static private Callback.Handler GetObjectInfo = new HandlerBase() { + static private final Callback.Handler GetObjectInfo = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.GetObjectInfo"; } @@ -205,7 +204,7 @@ public void onCall() { }; // HRESULT GetDeviceInfo(this, LPDIDEVICEINSTANCEA pdidi) - static private Callback.Handler GetDeviceInfo = new HandlerBase() { + static private final Callback.Handler GetDeviceInfo = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.GetDeviceInfo"; } @@ -217,7 +216,7 @@ public void onCall() { }; // HRESULT RunControlPanel(this, HWND hwndOwner, DWORD dwFlags) - static private Callback.Handler RunControlPanel = new HandlerBase() { + static private final Callback.Handler RunControlPanel = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.RunControlPanel"; } @@ -230,7 +229,7 @@ public void onCall() { }; // HRESULT Initialize(this, HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA.Initialize"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA_Mouse.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA_Mouse.java index 5516bc28..9bbddbb8 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA_Mouse.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dinput/IDirectInputDeviceA_Mouse.java @@ -11,7 +11,7 @@ public class IDirectInputDeviceA_Mouse extends IUnknown { static final int VTABLE_SIZE = 15; - static int OFFSET_FLAGS = 0; + static final int OFFSET_FLAGS = 0; static final int DATA_SIZE = 4; @@ -21,7 +21,7 @@ private static int createVTable() { return address; } - static int addIDirectSound(int address) { + static void addIDirectSound(int address) { address = addIUnknown(address); address = add(address, GetCapabilities); address = add(address, EnumObjects); @@ -38,7 +38,6 @@ static int addIDirectSound(int address) { address = add(address, GetDeviceInfo); address = add(address, RunControlPanel); address = add(address, Initialize); - return address; } public static int create() { @@ -55,7 +54,7 @@ public static int create(String name, int flags) { } // HRESULT GetCapabilities(this, LPDIDEVCAPS lpDIDevCaps) - static private Callback.Handler GetCapabilities = new HandlerBase() { + static private final Callback.Handler GetCapabilities = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.GetCapabilities"; } @@ -67,7 +66,7 @@ public void onCall() { }; // HRESULT EnumObjects(this, LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) - static private Callback.Handler EnumObjects = new HandlerBase() { + static private final Callback.Handler EnumObjects = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.EnumObjects"; } @@ -81,7 +80,7 @@ public void onCall() { }; // HRESULT GetProperty(this, REFGUID rguidProp, LPDIPROPHEADER pdiph) - static private Callback.Handler GetProperty = new HandlerBase() { + static private final Callback.Handler GetProperty = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.GetProperty"; } @@ -94,7 +93,7 @@ public void onCall() { }; // HRESULT SetProperty(this, REFGUID rguidProp, LPCDIPROPHEADER pdiph) - static private Callback.Handler SetProperty = new HandlerBase() { + static private final Callback.Handler SetProperty = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.SetProperty"; } @@ -107,7 +106,7 @@ public void onCall() { }; // HRESULT Acquire(this) - static private Callback.Handler Acquire = new HandlerBase() { + static private final Callback.Handler Acquire = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.Acquire"; } @@ -118,7 +117,7 @@ public void onCall() { }; // HRESULT Unacquire(this) - static private Callback.Handler Unacquire = new HandlerBase() { + static private final Callback.Handler Unacquire = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.Unacquire"; } @@ -129,7 +128,7 @@ public void onCall() { }; // HRESULT GetDeviceState(this, DWORD cbData, LPVOID lpvData) - static private Callback.Handler GetDeviceState = new HandlerBase() { + static private final Callback.Handler GetDeviceState = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.GetDeviceState"; } @@ -145,7 +144,7 @@ public void onCall() { }; // HRESULT GetDeviceData(this, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) - static private Callback.Handler GetDeviceData = new HandlerBase() { + static private final Callback.Handler GetDeviceData = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.GetDeviceData"; } @@ -160,7 +159,7 @@ public void onCall() { }; // HRESULT SetDataFormat(this, LPCDIDATAFORMAT lpdf) - static private Callback.Handler SetDataFormat = new HandlerBase() { + static private final Callback.Handler SetDataFormat = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.SetDataFormat"; } @@ -173,7 +172,7 @@ public void onCall() { }; // HRESULT SetEventNotification(this, HANDLE hEvent) - static private Callback.Handler SetEventNotification = new HandlerBase() { + static private final Callback.Handler SetEventNotification = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.SetEventNotification"; } @@ -185,7 +184,7 @@ public void onCall() { }; // HRESULT SetCooperativeLevel(this, HWND hwnd, DWORD dwFlags) - static private Callback.Handler SetCooperativeLevel = new HandlerBase() { + static private final Callback.Handler SetCooperativeLevel = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.SetCooperativeLevel"; } @@ -198,7 +197,7 @@ public void onCall() { }; // HRESULT GetObjectInfo(this, LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) - static private Callback.Handler GetObjectInfo = new HandlerBase() { + static private final Callback.Handler GetObjectInfo = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.GetObjectInfo"; } @@ -212,7 +211,7 @@ public void onCall() { }; // HRESULT GetDeviceInfo(this, LPDIDEVICEINSTANCEA pdidi) - static private Callback.Handler GetDeviceInfo = new HandlerBase() { + static private final Callback.Handler GetDeviceInfo = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.GetDeviceInfo"; } @@ -224,7 +223,7 @@ public void onCall() { }; // HRESULT RunControlPanel(this, HWND hwndOwner, DWORD dwFlags) - static private Callback.Handler RunControlPanel = new HandlerBase() { + static private final Callback.Handler RunControlPanel = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.RunControlPanel"; } @@ -237,7 +236,7 @@ public void onCall() { }; // HRESULT Initialize(this, HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectInputDeviceA_Mouse.Initialize"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dplay/IDirectPlayLobby.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dplay/IDirectPlayLobby.java index 20ae4a4b..90d99942 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dplay/IDirectPlayLobby.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dplay/IDirectPlayLobby.java @@ -12,7 +12,7 @@ public class IDirectPlayLobby extends IUnknown { static final int VTABLE_SIZE = 10; - static int OFFSET_FLAGS = 0; + static final int OFFSET_FLAGS = 0; static final int DATA_SIZE = 4; static private final Guid v2 = new Guid(0x194c220, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); @@ -27,7 +27,7 @@ private static int createVTable() { return address; } - static int addIDirectPlayLobby(int address) { + static void addIDirectPlayLobby(int address) { address = addIUnknown(address, QueryInterface); address = add(address, Connect); address = add(address, CreateAddress); @@ -40,7 +40,6 @@ static int addIDirectPlayLobby(int address) { address = add(address, SetConnectionSettings); address = add(address, SetLobbyMessageEvent); address = add(address, CreateCompoundAddress); - return address; } public static int create() { @@ -56,7 +55,7 @@ public static int create(String name, int flags) { return address; } - static private Callback.Handler QueryInterface = new HandlerBase() { + static private final Callback.Handler QueryInterface = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.QueryInterface"; } @@ -75,7 +74,7 @@ public void onCall() { }; // HRESULT Connect(this, DWORD dwFlags, LPDIRECTPLAY2* lplpDP, IUnknown* pUnk) - static private Callback.Handler Connect = new HandlerBase() { + static private final Callback.Handler Connect = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.Connect"; } @@ -89,7 +88,7 @@ public void onCall() { }; // HRESULT CreateAddress(this, REFGUID guidSP, REFGUID guidDataType, LPCVOID lpData, DWORD dwDataSize, LPVOID lpAddress, LPDWORD lpdwAddressSize) - static private Callback.Handler CreateAddress = new HandlerBase() { + static private final Callback.Handler CreateAddress = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.CreateAddress"; } @@ -106,7 +105,7 @@ public void onCall() { }; // HRESULT EnumAddress(this, LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, LPCVOID lpAddress, DWORD dwAddressSize, LPVOID lpContext) - static private Callback.Handler EnumAddress = new HandlerBase() { + static private final Callback.Handler EnumAddress = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.EnumAddress"; } @@ -121,7 +120,7 @@ public void onCall() { }; // HRESULT EnumAddressTypes(this, LPDPLENUMADDRESSTYPESCALLBACK lpEnumAddressTypeCallback, REFGUID guidSP, LPVOID lpContext, DWORD dwFlags) - static private Callback.Handler EnumAddressTypes = new HandlerBase() { + static private final Callback.Handler EnumAddressTypes = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.EnumAddressTypes"; } @@ -136,7 +135,7 @@ public void onCall() { }; // HRESULT EnumLocalApplications(this, LPDPLENUMLOCALAPPLICATIONSCALLBACK lpEnumLocalAppCallback, LPVOID lpContext, DWORD dwFlags) - static private Callback.Handler EnumLocalApplications = new HandlerBase() { + static private final Callback.Handler EnumLocalApplications = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.EnumLocalApplications"; } @@ -150,7 +149,7 @@ public void onCall() { }; // HRESULT GetConnectionSettings(this, DWORD dwAppID, LPVOID lpData, LPDWORD lpdwDataSize) - static private Callback.Handler GetConnectionSettings = new HandlerBase() { + static private final Callback.Handler GetConnectionSettings = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.GetConnectionSettings"; } @@ -164,7 +163,7 @@ public void onCall() { }; // HRESULT ReceiveLobbyMessage(this, DWORD dwFlags, DWORD dwAppID, LPDWORD lpdwMessageFlags, LPVOID lpData, LPDWORD lpdwDataSize) - static private Callback.Handler ReceiveLobbyMessage = new HandlerBase() { + static private final Callback.Handler ReceiveLobbyMessage = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.ReceiveLobbyMessage"; } @@ -181,7 +180,7 @@ public void onCall() { }; // HRESULT RunApplication(this, DWORD dwFlags, LPDWORD lpdwAppID, LPDPLCONNECTION lpConn, HANDLE hReceiveEvent) - static private Callback.Handler RunApplication = new HandlerBase() { + static private final Callback.Handler RunApplication = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.RunApplication"; } @@ -196,7 +195,7 @@ public void onCall() { }; // HRESULT SendLobbyMessage(this, DWORD dwFlags, DWORD dwAppID, LPVOID lpData, DWORD dwDataSize) - static private Callback.Handler SendLobbyMessage = new HandlerBase() { + static private final Callback.Handler SendLobbyMessage = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.SendLobbyMessage"; } @@ -211,7 +210,7 @@ public void onCall() { }; // HRESULT SetConnectionSettings(this, DWORD dwFlags, DWORD dwAppID, LPDPLCONNECTION lpConn) - static private Callback.Handler SetConnectionSettings = new HandlerBase() { + static private final Callback.Handler SetConnectionSettings = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.SetConnectionSettings"; } @@ -225,7 +224,7 @@ public void onCall() { }; // HRESULT SetLobbyMessageEvent(this, DWORD dwFlags, DWORD dwAppID, HANDLE hReceiveEvent) - static private Callback.Handler SetLobbyMessageEvent = new HandlerBase() { + static private final Callback.Handler SetLobbyMessageEvent = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.SetLobbyMessageEvent"; } @@ -240,7 +239,7 @@ public void onCall() { /*** IDirectPlayLobby2 methods ***/ // HRESULT CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT lpElements, DWORD dwElementCount, LPVOID lpAddress, LPDWORD lpdwAddressSize) - static private Callback.Handler CreateCompoundAddress = new HandlerBase() { + static private final Callback.Handler CreateCompoundAddress = new HandlerBase() { public java.lang.String getName() { return "IDirectPlayLobby.CreateCompoundAddress"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBCaps.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBCaps.java index c13e1f2b..20fd0f07 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBCaps.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBCaps.java @@ -10,7 +10,7 @@ public DSBCaps(int address) { dwFlags = Memory.mem_readd(address);address+=4; dwBufferBytes = Memory.mem_readd(address);address+=4; dwUnlockTransferRate = Memory.mem_readd(address);address+=4; - dwPlayCpuOverhead = Memory.mem_readd(address);address+=4; + dwPlayCpuOverhead = Memory.mem_readd(address); } public static void write(int address, int flags, int len, int rate, int overhead) { @@ -21,9 +21,9 @@ public static void write(int address, int flags, int len, int rate, int overhead Memory.mem_writed(address, overhead); } - public int dwSize; - public int dwFlags; - public int dwBufferBytes; - public int dwUnlockTransferRate; - public int dwPlayCpuOverhead; + public final int dwSize; + public final int dwFlags; + public final int dwBufferBytes; + public final int dwUnlockTransferRate; + public final int dwPlayCpuOverhead; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBufferDesc.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBufferDesc.java index d99c0a1b..827f5e2c 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBufferDesc.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSBufferDesc.java @@ -34,9 +34,9 @@ public DSBufferDesc(int address) { lpwfxFormat = new WAVEFORMATEX(address); } - public int dwSize; - public int dwFlags; - public int dwBufferBytes; - public int dwReserved; + public final int dwSize; + public final int dwFlags; + public final int dwBufferBytes; + public final int dwReserved; public WAVEFORMATEX lpwfxFormat = null; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSCaps.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSCaps.java index 640ec4fe..898df676 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSCaps.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSCaps.java @@ -43,7 +43,7 @@ public DSCaps(int address) { dwUnlockTransferRateHwBuffers = Memory.mem_readd(address);address+=4; dwPlayCpuOverheadSwBuffers = Memory.mem_readd(address);address+=4; dwReserved1 = Memory.mem_readd(address);address+=4; - dwReserved2 = Memory.mem_readd(address);address+=4; + dwReserved2 = Memory.mem_readd(address); } public void write(int address) { @@ -70,7 +70,7 @@ public void write(int address) { Memory.mem_writed(address, dwUnlockTransferRateHwBuffers);address+=4; Memory.mem_writed(address, dwPlayCpuOverheadSwBuffers);address+=4; Memory.mem_writed(address, dwReserved1);address+=4; - Memory.mem_writed(address, dwReserved2);address+=4; + Memory.mem_writed(address, dwReserved2); } public int dwSize; public int dwFlags; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSConvert.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSConvert.java index 98101a7b..e442a55b 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSConvert.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSConvert.java @@ -16,97 +16,87 @@ static private void src_advance(IntRef src, int stride, IntRef count, IntRef fre { long adv = (freqAcc.value >>> DSOUND_FREQSHIFT); freqAcc.value &= (1 << DSOUND_FREQSHIFT) - 1; - src.value += adv * stride; - count.value -= adv; + src.value += (int) (adv * stride); + count.value -= (int) adv; } } - public static interface bitsconvertfunc { - public void call(int src, Ptr dst, int src_stride, int dst_stride, int count, int freqAcc, int adj); + public interface bitsconvertfunc { + void call(int src, Ptr dst, int src_stride, int dst_stride, int count, int freqAcc, int adj); } - static private bitsconvertfunc convert_8_to_16 = new bitsconvertfunc() { - public void call(int s, Ptr dst, int src_stride, int dst_stride, int c, int f, int adj) { - IntRef count = new IntRef(c); - IntRef src = new IntRef(s); - IntRef freqAcc = new IntRef(f); - ShortPtr dest16 = new ShortPtr(dst); - while (count.value > 0) - { - dest16.set(0, readb(src.value) * 257 - 32768); - dest16.inc(dst_stride>>1); - src_advance(src, src_stride, count, freqAcc, adj); - } + static private final bitsconvertfunc convert_8_to_16 = (s, dst, src_stride, dst_stride, c, f, adj) -> { + IntRef count = new IntRef(c); + IntRef src = new IntRef(s); + IntRef freqAcc = new IntRef(f); + ShortPtr dest16 = new ShortPtr(dst); + while (count.value > 0) + { + dest16.set(0, readb(src.value) * 257 - 32768); + dest16.inc(dst_stride>>1); + src_advance(src, src_stride, count, freqAcc, adj); } }; - static private bitsconvertfunc convert_16_to_16 = new bitsconvertfunc() { - public void call(int s, Ptr dst, int src_stride, int dst_stride, int c, int f, int adj) { - IntRef count = new IntRef(c); - IntRef src = new IntRef(s); - IntRef freqAcc = new IntRef(f); - ShortPtr dest = new ShortPtr(dst); - while (count.value > 0) - { - dest.set(readw(src.value)); - dest.inc(dst_stride>>1); - src_advance(src, src_stride, count, freqAcc, adj); - } + static private final bitsconvertfunc convert_16_to_16 = (s, dst, src_stride, dst_stride, c, f, adj) -> { + IntRef count = new IntRef(c); + IntRef src = new IntRef(s); + IntRef freqAcc = new IntRef(f); + ShortPtr dest = new ShortPtr(dst); + while (count.value > 0) + { + dest.set(readw(src.value)); + dest.inc(dst_stride>>1); + src_advance(src, src_stride, count, freqAcc, adj); } }; - static private bitsconvertfunc convert_24_to_16 = new bitsconvertfunc() { - public void call(int s, Ptr dst, int src_stride, int dst_stride, int c, int f, int adj) { - IntRef count = new IntRef(c); - IntRef src = new IntRef(s); - IntRef freqAcc = new IntRef(f); - ShortPtr dest16 = new ShortPtr(dst); + static private final bitsconvertfunc convert_24_to_16 = (s, dst, src_stride, dst_stride, c, f, adj) -> { + IntRef count = new IntRef(c); + IntRef src = new IntRef(s); + IntRef freqAcc = new IntRef(f); + ShortPtr dest16 = new ShortPtr(dst); - while (count.value > 0) - { - dest16.set(0, readw(src.value+1)); - dest16.inc(dst_stride>>1); - src_advance(src, src_stride, count, freqAcc, adj); - } + while (count.value > 0) + { + dest16.set(0, readw(src.value+1)); + dest16.inc(dst_stride>>1); + src_advance(src, src_stride, count, freqAcc, adj); } }; - static private bitsconvertfunc convert_32_to_16 = new bitsconvertfunc() { - public void call(int s, Ptr dst, int src_stride, int dst_stride, int c, int f, int adj) { - IntRef count = new IntRef(c); - IntRef src = new IntRef(s); - IntRef freqAcc = new IntRef(f); - ShortPtr dest16 = new ShortPtr(dst); + static private final bitsconvertfunc convert_32_to_16 = (s, dst, src_stride, dst_stride, c, f, adj) -> { + IntRef count = new IntRef(c); + IntRef src = new IntRef(s); + IntRef freqAcc = new IntRef(f); + ShortPtr dest16 = new ShortPtr(dst); - while (count.value > 0) - { - dest16.set(0, readw(src.value+2)); - dest16.inc(dst_stride>>1); - src_advance(src, src_stride, count, freqAcc, adj); - } + while (count.value > 0) + { + dest16.set(0, readw(src.value+2)); + dest16.inc(dst_stride>>1); + src_advance(src, src_stride, count, freqAcc, adj); } }; - static private bitsconvertfunc convert_ieee_32_to_16 = new bitsconvertfunc() { - public void call(int s, Ptr dst, int src_stride, int dst_stride, int c, int f, int adj) { - IntRef count = new IntRef(c); - IntRef src = new IntRef(s); - IntRef freqAcc = new IntRef(f); - ShortPtr dest16 = new ShortPtr(dst); + static private final bitsconvertfunc convert_ieee_32_to_16 = (s, dst, src_stride, dst_stride, c, f, adj) -> { + IntRef count = new IntRef(c); + IntRef src = new IntRef(s); + IntRef freqAcc = new IntRef(f); + ShortPtr dest16 = new ShortPtr(dst); - while (count.value > 0) - { - float v = Float.intBitsToFloat(readd(src.value)); // :TODO: is the endianness correct - warn("Need to verify correct endianness when converting floating point wave to 16-bit"); - if (v < -1.0f) - dest16.set(-32768); - else if (v > 1.0f) - dest16.set(32767); - else - dest16.set((short)(v * 32767.5f - 0.5f)); - dest16.inc(dst_stride>>1); - src_advance(src, src_stride, count, freqAcc, adj); - } + while (count.value > 0) + { + float v = Float.intBitsToFloat(readd(src.value)); // :TODO: is the endianness correct + warn("Need to verify correct endianness when converting floating point wave to 16-bit"); + if (v < -1.0f) + dest16.set(-32768); + else if (v > 1.0f) + dest16.set(32767); + else + dest16.set((short)(v * 32767.5f - 0.5f)); + dest16.inc(dst_stride>>1); + src_advance(src, src_stride, count, freqAcc, adj); } }; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSMixer.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSMixer.java index 3d3fce78..d8229b13 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSMixer.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/DSMixer.java @@ -27,11 +27,11 @@ public class DSMixer extends IDirectSoundBuffer { * unsampled frame (writepos), translating frequency (pitch), stereo/mono * and bits-per-sample so that it is ideal for the primary buffer. * Doesn't perform any mixing - this is a straight copy/convert operation. - * + *

* dsb = the secondary buffer * writepos = Starting position of changed buffer * len = number of bytes to resample from writepos - * + *

* NOTE: writepos + len <= buflen. When called by mixer, MixOne makes sure of this. */ static void DSOUND_MixToTemporary(IDirectSoundBuffer.Data dsb, int writepos, int len) @@ -44,7 +44,7 @@ static void DSOUND_MixToTemporary(IDirectSoundBuffer.Data dsb, int writepos, int int iAdvance = wfx.nBlockAlign; int oAdvance = DEVICE_BLOCK_ALIGN; - int freqAcc = 0, target_writepos = 0, overshot, maxlen; + int freqAcc = 0, target_writepos, overshot, maxlen; assert(writepos + len <= dsb.buflen); @@ -98,7 +98,7 @@ static void DSOUND_MixToTemporary(IDirectSoundBuffer.Data dsb, int writepos, int * Should be called when one of the following things occur: * - Primary buffer format is changed * - This buffer format (frequency) is changed - * + *

* After this, DSOUND_MixToTemporary(dsb, 0, dsb.buflen) should * be called to refill the temporary buffer with data. */ @@ -111,10 +111,7 @@ static void DSOUND_RecalcFormat(IDirectSoundBuffer.Data dsb) int pAlign = DEVICE_BLOCK_ALIGN; WAVEFORMATEXTENSIBLE pwfxe = dsb.wfxe(); - boolean ieee = false; - - if ((pwfxe.Format.wFormatTag == WAVE_FORMAT_IEEE_FLOAT) || (pwfxe.Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE && pwfxe.SubFormat.equals(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) - ieee = true; + boolean ieee = (pwfxe.Format.wFormatTag == WAVE_FORMAT_IEEE_FLOAT) || (pwfxe.Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE && pwfxe.SubFormat.equals(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)); /* calculate the 10ms write lead */ dsb.writelead=(dsb.freq / 100) * wfx.nBlockAlign; @@ -162,9 +159,9 @@ static private void cp_fields(IDirectSoundBuffer.Data dsb, int ibuf, Ptr obuf, i int ostep = DEVICE_BITS_PER_SAMEPLE / 8; if (DEVICE_CHANNELS == wfx.nChannels || - (DEVICE_CHANNELS == 2 && wfx.nChannels == 6) || - (DEVICE_CHANNELS == 8 && wfx.nChannels == 2) || - (DEVICE_CHANNELS == 6 && wfx.nChannels == 2)) { + (DEVICE_CHANNELS == 2 && wfx.nChannels == 6) || + (DEVICE_CHANNELS == 8 && wfx.nChannels == 2) || + (DEVICE_CHANNELS == 6 && wfx.nChannels == 2)) { dsb.convert.call(ibuf, obuf, istride, ostride, count, freqAcc, adj); if (DEVICE_CHANNELS == 2 || wfx.nChannels == 2) dsb.convert.call(ibuf + istep, new Ptr(obuf, ostep), istride, ostride, count, freqAcc, adj); @@ -196,9 +193,9 @@ static public void DSOUND_RecalcVolPan(DSVOLUMEPAN volpan) /* FIXME: dwPan{Left|Right}AmpFactor */ /* FIXME: use calculated vol and pan ampfactors */ - temp = (double) (volpan.lVolume - (volpan.lPan > 0 ? volpan.lPan : 0)); + temp = volpan.lVolume - (Math.max(volpan.lPan, 0)); volpan.dwTotalLeftAmpFactor = (int) (Math.pow(2.0, temp / 600.0) * 0xffff); - temp = (double) (volpan.lVolume + (volpan.lPan < 0 ? volpan.lPan : 0)); + temp = volpan.lVolume + (Math.min(volpan.lPan, 0)); volpan.dwTotalRightAmpFactor = (int) (Math.pow(2.0, temp / 600.0) * 0xffff); } @@ -211,8 +208,8 @@ static void DSOUND_MixerVol(IDirectSoundBuffer.Data dsb) int len = dsb.tmp_buffer_len; if (((flags & DSBufferDesc.DSBCAPS_CTRLPAN)==0 || (dsb.volpan.lPan == 0)) && - ((flags & DSBufferDesc.DSBCAPS_CTRLVOLUME)==0 || (dsb.volpan.lVolume == 0)) && - (flags & DSBufferDesc.DSBCAPS_CTRL3D)==0) + ((flags & DSBufferDesc.DSBCAPS_CTRLVOLUME)==0 || (dsb.volpan.lVolume == 0)) && + (flags & DSBufferDesc.DSBCAPS_CTRL3D)==0) return; /* Nothing to do */ if (DEVICE_CHANNELS != 1 && DEVICE_CHANNELS != 2) @@ -236,28 +233,28 @@ static void DSOUND_MixerVol(IDirectSoundBuffer.Data dsb) byte[] buffer = dsb.tmp_buffer; switch (DEVICE_BITS_PER_SAMEPLE) { - case 8: - /* 8-bit WAV is unsigned, but we need to operate */ - /* on signed data for this to work properly */ - for (int i = 0; i < len-1; i+=2) { - buffer[i] = (byte) ((((buffer[i] - 128) * vLeft) >> 16) + 128); - buffer[i] = (byte) ((((buffer[i] - 128) * vRight) >> 16) + 128); - } - if (len % 2 == 1 && DEVICE_CHANNELS == 1) - buffer[len-1] = (byte) ((((buffer[len-1] - 128) * vLeft) >> 16) + 128); - break; - case 16: - /* 16-bit WAV is signed -- much better */ - ShortPtr p = new ShortPtr(buffer, 0); - for (int i = 0; i < len-3; i += 4) { - p.set((p.get () * vLeft) >> 16); - p.inc(); - p.set((p.get () * vRight) >> 16); - p.inc(); - } - if (len % 4 == 2 && DEVICE_CHANNELS == 1) - p.set((p.get () * vLeft) >> 16); - break; + case 8: + /* 8-bit WAV is unsigned, but we need to operate */ + /* on signed data for this to work properly */ + for (int i = 0; i < len-1; i+=2) { + buffer[i] = (byte) ((((buffer[i] - 128) * vLeft) >> 16) + 128); + buffer[i] = (byte) ((((buffer[i] - 128) * vRight) >> 16) + 128); + } + if (len % 2 == 1 && DEVICE_CHANNELS == 1) + buffer[len-1] = (byte) ((((buffer[len-1] - 128) * vLeft) >> 16) + 128); + break; + case 16: + /* 16-bit WAV is signed -- much better */ + ShortPtr p = new ShortPtr(buffer, 0); + for (int i = 0; i < len-3; i += 4) { + p.set((p.get () * vLeft) >> 16); + p.inc(); + p.set((p.get () * vRight) >> 16); + p.inc(); + } + if (len % 4 == 2 && DEVICE_CHANNELS == 1) + p.set((p.get () * vLeft) >> 16); + break; } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSound.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSound.java index 9fbdfd6e..1aec8b53 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSound.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSound.java @@ -11,7 +11,7 @@ public class IDirectSound extends IUnknown { static final int VTABLE_SIZE = 8; - static int OFFSET_FLAGS = 0; + static final int OFFSET_FLAGS = 0; static final int DATA_SIZE = 4; @@ -21,7 +21,7 @@ private static int createVTable() { return address; } - static int addIDirectSound(int address) { + static void addIDirectSound(int address) { address = addIUnknown(address); address = add(address, CreateSoundBuffer); address = add(address, GetCaps); @@ -31,7 +31,6 @@ static int addIDirectSound(int address) { address = add(address, GetSpeakerConfig); address = add(address, SetSpeakerConfig); address = add(address, Initialize); - return address; } public static int create() { @@ -48,7 +47,7 @@ public static int create(String name, int flags) { } // HRESULT CreateSoundBuffer(this, LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) - static private Callback.Handler CreateSoundBuffer = new HandlerBase() { + static private final Callback.Handler CreateSoundBuffer = new HandlerBase() { public java.lang.String getName() { return "IDirectSound.CreateSoundBuffer"; } @@ -62,7 +61,7 @@ public void onCall() { }; // HRESULT GetCaps(this, LPDSCAPS lpDSCaps) - static private Callback.Handler GetCaps = new HandlerBase() { + static private final Callback.Handler GetCaps = new HandlerBase() { static final int DSCAPS_PRIMARYMONO = 0x00000001; static final int DSCAPS_PRIMARYSTEREO = 0x00000002; static final int DSCAPS_PRIMARY8BIT = 0x00000004; @@ -111,7 +110,7 @@ public void onCall() { }; // HRESULT DuplicateSoundBuffer(this, LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) - static private Callback.Handler DuplicateSoundBuffer = new HandlerBase() { + static private final Callback.Handler DuplicateSoundBuffer = new HandlerBase() { public java.lang.String getName() { return "IDirectSound.DuplicateSoundBuffer"; } @@ -124,7 +123,7 @@ public void onCall() { }; // HRESULT SetCooperativeLevel(this, HWND hwnd, DWORD dwLevel) - static private Callback.Handler SetCooperativeLevel = new HandlerBase() { + static private final Callback.Handler SetCooperativeLevel = new HandlerBase() { static final public int DSSCL_NORMAL = 1; static final public int DSSCL_PRIORITY = 2; static final public int DSSCL_EXCLUSIVE = 3; @@ -143,7 +142,7 @@ public void onCall() { }; // HRESULT Compact(this) - static private Callback.Handler Compact = new HandlerBase() { + static private final Callback.Handler Compact = new HandlerBase() { public java.lang.String getName() { return "IDirectSound.Compact"; } @@ -154,7 +153,7 @@ public void onCall() { }; // HRESULT GetSpeakerConfig(this, LPDWORD lpdwSpeakerConfig) - static private Callback.Handler GetSpeakerConfig = new HandlerBase() { + static private final Callback.Handler GetSpeakerConfig = new HandlerBase() { public java.lang.String getName() { return "IDirectSound.GetSpeakerConfig"; } @@ -166,7 +165,7 @@ public void onCall() { }; // HRESULT SetSpeakerConfig(this, DWORD dwSpeakerConfig) - static private Callback.Handler SetSpeakerConfig = new HandlerBase() { + static private final Callback.Handler SetSpeakerConfig = new HandlerBase() { public java.lang.String getName() { return "IDirectSound.SetSpeakerConfig"; } @@ -178,7 +177,7 @@ public void onCall() { }; // HRESULT Initialize(this, LPCGUID lpcGuid) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectSound.Initialize"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSoundBuffer.java b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSoundBuffer.java index b8615721..a129e0b3 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSoundBuffer.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/directx/dsound/IDirectSoundBuffer.java @@ -167,7 +167,7 @@ private static int createVTable() { return address; } - static int addIDirectSound(int address) { + static void addIDirectSound(int address) { address = addIUnknown(address); address = add(address, GetCaps); address = add(address, GetCurrentPosition); @@ -187,10 +187,9 @@ static int addIDirectSound(int address) { address = add(address, Stop); address = add(address, Unlock); address = add(address, Restore); - return address; } - static private Callback.Handler CleanUp = new DirectCallback() { + static private final Callback.Handler CleanUp = new DirectCallback() { public java.lang.String getName() { return "IDirectSoundBuffer.CleanUp"; } @@ -280,7 +279,7 @@ static public int getBufferBytes(int This) { } // HRESULT GetCaps(this, LPDSBCAPS lpDSBufferCaps) - static private Callback.Handler GetCaps = new HandlerBase() { + static private final Callback.Handler GetCaps = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.GetCaps"; } @@ -298,7 +297,7 @@ public void onCall() { }; // HRESULT GetCurrentPosition(this, LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) - static private Callback.Handler GetCurrentPosition = new HandlerBase() { + static private final Callback.Handler GetCurrentPosition = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.GetCurrentPosition"; } @@ -315,7 +314,7 @@ public void onCall() { }; // HRESULT GetFormat(this, LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) - static private Callback.Handler GetFormat = new HandlerBase() { + static private final Callback.Handler GetFormat = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.GetFormat"; } @@ -330,7 +329,7 @@ public void onCall() { }; // HRESULT GetVolume(this, LPLONG lplVolume) - static private Callback.Handler GetVolume = new HandlerBase() { + static private final Callback.Handler GetVolume = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.GetVolume"; } @@ -343,7 +342,7 @@ public void onCall() { }; // HRESULT GetPan(this, LPLONG lplpan) - static private Callback.Handler GetPan = new HandlerBase() { + static private final Callback.Handler GetPan = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.GetPan"; } @@ -356,7 +355,7 @@ public void onCall() { }; // HRESULT GetFrequency(this, LPDWORD lpdwFrequency) - static private Callback.Handler GetFrequency = new HandlerBase() { + static private final Callback.Handler GetFrequency = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.GetFrequency"; } @@ -373,7 +372,7 @@ public void onCall() { }; // HRESULT GetStatus(this, LPDWORD lpdwStatus) - static private Callback.Handler GetStatus = new HandlerBase() { + static private final Callback.Handler GetStatus = new HandlerBase() { static public final int DSBSTATUS_PLAYING = 0x00000001; static public final int DSBSTATUS_BUFFERLOST = 0x00000002; static public final int DSBSTATUS_LOOPING = 0x00000004; @@ -403,7 +402,7 @@ public void onCall() { }; // HRESULT Initialize(this, LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) - static private Callback.Handler Initialize = new HandlerBase() { + static private final Callback.Handler Initialize = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.Initialize"; } @@ -417,7 +416,7 @@ public void onCall() { }; // HRESULT Lock(this, DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) - static private Callback.Handler Lock = new HandlerBase() { + static private final Callback.Handler Lock = new HandlerBase() { static final int DSBLOCK_FROMWRITECURSOR = 0x00000001; static final int DSBLOCK_ENTIREBUFFER = 0x00000002; @@ -462,7 +461,7 @@ else if ((dwFlags & DSBLOCK_ENTIREBUFFER) != 0) }; // HRESULT Play(this, DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) - static private Callback.Handler Play = new HandlerBase() { + static private final Callback.Handler Play = new HandlerBase() { static public final int DSBPLAY_LOOPING = 0x00000001; static public final int DSBPLAY_LOCHARDWARE = 0x00000002; static public final int DSBPLAY_LOCSOFTWARE = 0x00000004; @@ -487,7 +486,7 @@ public void onCall() { }; // HRESULT SetCurrentPosition(this, DWORD dwNewPosition) - static private Callback.Handler SetCurrentPosition = new HandlerBase() { + static private final Callback.Handler SetCurrentPosition = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.SetCurrentPosition"; } @@ -502,7 +501,7 @@ public void onCall() { }; // HRESULT SetFormat(this, LPCWAVEFORMATEX lpcfxFormat) - static private Callback.Handler SetFormat = new HandlerBase() { + static private final Callback.Handler SetFormat = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.SetFormat"; } @@ -516,7 +515,7 @@ public void onCall() { }; // HRESULT SetVolume(this, LONG lVolume) - static private Callback.Handler SetVolume = new ReturnHandlerBase() { + static private final Callback.Handler SetVolume = new ReturnHandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.SetVolume"; } @@ -546,7 +545,7 @@ public int processReturn() { }; // HRESULT SetPan(this, LONG lPan) - static private Callback.Handler SetPan = new ReturnHandlerBase() { + static private final Callback.Handler SetPan = new ReturnHandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.SetPan"; } @@ -578,7 +577,7 @@ public int processReturn() { }; // HRESULT SetFrequency(this, DWORD dwFrequency) - static private Callback.Handler SetFrequency = new ReturnHandlerBase() { + static private final Callback.Handler SetFrequency = new ReturnHandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.SetFrequency"; } @@ -621,7 +620,7 @@ public int processReturn() { }; // HRESULT Stop(this) - static private Callback.Handler Stop = new HandlerBase() { + static private final Callback.Handler Stop = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.Stop"; } @@ -635,7 +634,7 @@ public void onCall() { }; // HRESULT Unlock(this, LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) - static private Callback.Handler Unlock = new ReturnHandlerBase() { + static private final Callback.Handler Unlock = new ReturnHandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.Unlock"; } @@ -667,7 +666,7 @@ public int processReturn() { }; // HRESULT Restore(this) - static private Callback.Handler Restore = new HandlerBase() { + static private final Callback.Handler Restore = new HandlerBase() { public java.lang.String getName() { return "IDirectSoundBuffer.Restore"; } @@ -686,7 +685,7 @@ public PlayThread(Data data) { open(); } - public boolean open() { + public void open() { try { AudioFormat af = new AudioFormat(DSMixer.DEVICE_SAMPLE_RATE, DSMixer.DEVICE_BITS_PER_SAMEPLE, DSMixer.DEVICE_CHANNELS, true, false); DataLine.Info info = new DataLine.Info(SourceDataLine.class, af); @@ -695,12 +694,10 @@ public boolean open() { line.start(); } catch (Exception e) { e.printStackTrace(); - return false; } - return true; } - WAVEFORMATEX format; + final WAVEFORMATEX format; SourceDataLine line; final Data data; boolean playing = false; @@ -760,7 +757,9 @@ public void run() { } while (loop && !stop); while (line.available() != LINE_SIZE) { - try {Thread.sleep(10);} catch (Exception e) {} + try {Thread.sleep(10);} catch (Exception e) { + throw new RuntimeException(e); + } } synchronized (mutex) { playing = false; @@ -769,6 +768,7 @@ public void run() { try { mutex.wait(); } catch (Exception e) { + throw new RuntimeException(e); } } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Clipping.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Clipping.java index 83642471..1866d000 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Clipping.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Clipping.java @@ -17,19 +17,18 @@ static public int GetClipRgn(int hdc, int hrgn) { } // int IntersectClipRect(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) - static public int IntersectClipRect(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { + static public void IntersectClipRect(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { WinDC dc = WinDC.get(hdc); if (dc == null) - return ERROR; + return; int rgn = WinRegion.CreateRectRgn(nLeftRect, nTopRect, nRightRect, nBottomRect); if (rgn == ERROR) - return ERROR; + return; if (dc.hClipRgn == 0) { dc.hClipRgn = rgn; - return SIMPLEREGION; + return; } int result = WinRegion.CombineRgn(dc.hClipRgn, dc.hClipRgn, rgn, RGN_AND); GdiObj.DeleteObject(rgn); - return result; } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/GdiObj.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/GdiObj.java index 04c26ed8..9424e5ea 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/GdiObj.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/GdiObj.java @@ -6,12 +6,11 @@ public class GdiObj extends WinAPI { // BOOL WINAPI DeleteObject( HGDIOBJ obj ) - static public int DeleteObject(int obj) { + static public void DeleteObject(int obj) { WinGDI gdi = WinGDI.getGDI(obj); if (gdi == null) - return FALSE; + return; gdi.close(); - return TRUE; } // DWORD GdiSetBatchLimit(DWORD dwLimit) @@ -63,8 +62,7 @@ static public int GetStockObject(int fnObject) { } // BOOL WINAPI UnrealizeObject( HGDIOBJ obj ) - static public int UnrealizeObject(int obj) { + static public void UnrealizeObject(int obj) { log("UnrealizeObject not implemented yet"); - return TRUE; } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/LOGBRUSH.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/LOGBRUSH.java index 2e3e9b41..0991f802 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/LOGBRUSH.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/LOGBRUSH.java @@ -11,13 +11,13 @@ public LOGBRUSH() { public LOGBRUSH(int address) { lbStyle = readd(address); address+=4; lbColor = readd(address); address+=4; - lbHatch = readd(address); address+=4; + lbHatch = readd(address); } public void write(int address) { writed(address, lbStyle);address+=4; writed(address, lbColor);address+=4; - writed(address, lbHatch);address+=4; + writed(address, lbHatch); } public int allocTemp() { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Mapping.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Mapping.java index 9227fd3e..48083d22 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Mapping.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/Mapping.java @@ -4,16 +4,15 @@ public class Mapping extends WinAPI { // BOOL OffsetViewportOrgEx(HDC hdc, int nXOffset, int nYOffset, LPPOINT lpPoint) - static public int OffsetViewportOrgEx(int hdc, int nXOffset, int nYOffset, int lpPoint) { + static public void OffsetViewportOrgEx(int hdc, int nXOffset, int nYOffset, int lpPoint) { WinDC dc = WinDC.get(hdc); if (dc == null) - return FALSE; + return; if (lpPoint != 0) { writed(lpPoint, dc.x-dc.clipX); writed(lpPoint+4, dc.y-dc.clipY); } dc.x+=nXOffset; dc.y+=nYOffset; - return TRUE; } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/PaintingGDI.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/PaintingGDI.java index cfb2ce05..1f0a1a1b 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/PaintingGDI.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/PaintingGDI.java @@ -10,10 +10,10 @@ public class PaintingGDI extends WinAPI { // BOOL LineTo(HDC hdc, int nXEnd, int nYEnd) - static public int LineTo(int hdc, int nXEnd, int nYEnd) { + static public void LineTo(int hdc, int nXEnd, int nYEnd) { WinDC dc = WinDC.get(hdc); if (dc == null) { - return FALSE; + return; } Graphics2D g = dc.getGraphics(); @@ -25,14 +25,13 @@ static public int LineTo(int hdc, int nXEnd, int nYEnd) { g.dispose(); if (dc.getImage() == StaticData.screen.getImage()) Main.drawImage(dc.getImage()); - return TRUE; } // BOOL MoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint) - static public int MoveToEx(int hdc, int X, int Y, int lpPoint) { + static public void MoveToEx(int hdc, int X, int Y, int lpPoint) { WinDC dc = WinDC.get(hdc); if (dc == null) { - return FALSE; + return; } if (lpPoint!=0) { WinPoint p = new WinPoint(dc.CursPosX, dc.CursPosY); @@ -40,17 +39,16 @@ static public int MoveToEx(int hdc, int X, int Y, int lpPoint) { } dc.CursPosX = X; dc.CursPosY = Y; - return TRUE; } // BOOL Polygon(HDC hdc, const POINT* lpPoints, int nCount) - static public int Polygon(int hdc, int lpPoints, int nCount) { + static public void Polygon(int hdc, int lpPoints, int nCount) { WinDC dc = WinDC.get(hdc); WinBrush brush = WinBrush.get(dc.hBrush); WinPen pen = WinPen.get(dc.hPen); - if (dc == null || brush == null || pen == null) { - return FALSE; + if (brush == null || pen == null) { + return; } int[] x = new int[nCount]; @@ -74,6 +72,5 @@ static public int Polygon(int hdc, int lpPoints, int nCount) { g.dispose(); if (dc.getImage() == StaticData.screen.getImage()) Main.drawImage(dc.getImage()); - return TRUE; } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/TEXTMETRIC.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/TEXTMETRIC.java index 9b86556c..b9ded4cc 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/TEXTMETRIC.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/TEXTMETRIC.java @@ -25,27 +25,27 @@ public TEXTMETRIC(int address) { tmUnderlined = readb(address);address+=1; tmStruckOut = readb(address);address+=1; tmPitchAndFamily = readb(address);address+=1; - tmCharSet = readb(address);address+=1; + tmCharSet = readb(address); } - public int tmHeight; - public int tmAscent; - public int tmDescent; - public int tmInternalLeading; - public int tmExternalLeading; - public int tmAveCharWidth; - public int tmMaxCharWidth; - public int tmWeight; - public int tmOverhang; - public int tmDigitizedAspectX; - public int tmDigitizedAspectY; - public int tmFirstChar; - public int tmLastChar; - public int tmDefaultChar; - public int tmBreakChar; - public int tmItalic; - public int tmUnderlined; - public int tmStruckOut; - public int tmPitchAndFamily; - public int tmCharSet; + public final int tmHeight; + public final int tmAscent; + public final int tmDescent; + public final int tmInternalLeading; + public final int tmExternalLeading; + public final int tmAveCharWidth; + public final int tmMaxCharWidth; + public final int tmWeight; + public final int tmOverhang; + public final int tmDigitizedAspectX; + public final int tmDigitizedAspectY; + public final int tmFirstChar; + public final int tmLastChar; + public final int tmDefaultChar; + public final int tmBreakChar; + public final int tmItalic; + public final int tmUnderlined; + public final int tmStruckOut; + public final int tmPitchAndFamily; + public final int tmCharSet; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBitmap.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBitmap.java index d87ea926..8794371f 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBitmap.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBitmap.java @@ -21,7 +21,7 @@ static public WinBitmap create(int width, int height, int bpp, int data, int[] p static public WinBitmap get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinBitmap)) + if (!(object instanceof WinBitmap)) return null; return (WinBitmap)object; } @@ -145,10 +145,8 @@ private void parseBitmap(int address, int iUsuage, int hPalette) { refPalette = WinPalette.get(hPalette).palette; if (biSizeImage == 0) { - if (bitCount<8) - biSizeImage = (((bitCount * width + 7) / 8 + 3) & ~3)* Math.abs(height); - else - biSizeImage = (((bitCount + 7) / 8 * width + 3) & ~3)* Math.abs(height); + if (bitCount<8) { + } } bits = address+40; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBrush.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBrush.java index 9f1346e0..3850bf40 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBrush.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinBrush.java @@ -13,7 +13,7 @@ static public WinBrush create(int style, int color, int hatch) { static public WinBrush get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinBrush)) + if (!(object instanceof WinBrush)) return null; return (WinBrush)object; } @@ -23,9 +23,9 @@ static public int CreateSolidBrush(int crColor) { return create(BS_SOLID, crColor, 0).handle; } - public int color; - public int style; - public int hatch; + public final int color; + public final int style; + public final int hatch; public WinBrush(int handle, int style, int color, int hatch) { super(handle); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinDC.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinDC.java index b1ba3101..8989f443 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinDC.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinDC.java @@ -18,10 +18,10 @@ import java.awt.image.BufferedImage; public class WinDC extends WinObject { - static WinFont defaultFont = WinFont.get(GdiObj.GetStockObject(DEVICE_DEFAULT_FONT)); - static WinPalette defaultPalette = WinPalette.create(JavaBitmap.getDefaultPalette()); - static WinPen defaultPen = WinPen.get(GdiObj.GetStockObject(BLACK_PEN)); - static WinBrush defaultBrush = WinBrush.get(GdiObj.GetStockObject(WHITE_BRUSH)); + static final WinFont defaultFont = WinFont.get(GdiObj.GetStockObject(DEVICE_DEFAULT_FONT)); + static final WinPalette defaultPalette = WinPalette.create(JavaBitmap.getDefaultPalette()); + static final WinPen defaultPen = WinPen.get(GdiObj.GetStockObject(BLACK_PEN)); + static final WinBrush defaultBrush = WinBrush.get(GdiObj.GetStockObject(WHITE_BRUSH)); static public WinDC create(JavaBitmap image, boolean owner) { return new WinDC(nextObjectId(), image, owner); @@ -33,7 +33,7 @@ static public WinDC create() { static public WinDC get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinDC)) + if (!(object instanceof WinDC)) return null; return (WinDC)object; } @@ -67,12 +67,11 @@ static public int CreateDCA(int driver, int device, int output, int initData) { } // BOOL DeleteDC(HDC hdc) - static public int DeleteDC(int hdc) { + static public void DeleteDC(int hdc) { WinDC dc = WinDC.get(hdc); if (dc == null) - return FALSE; + return; dc.close(); - return TRUE; } // BOOL ExtTextOut(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCTSTR lpString, UINT cbCount, const INT *lpDx) @@ -114,13 +113,14 @@ static public int ExtTextOut(int hdc, int X, int Y, int fuOptions, int lprc, Str } // int GetClipBox(HDC hdc, LPRECT lprc) - static public int GetClipBox(int hdc, int rect) { + static public void GetClipBox(int hdc, int rect) { WinDC dc = WinDC.get(hdc); - if (dc==null) return ERROR; - if (dc.hClipRgn != 0) - return WinRegion.GetRgnBox(dc.hClipRgn, rect); + if (dc==null) return; + if (dc.hClipRgn != 0) { + WinRegion.GetRgnBox(dc.hClipRgn, rect); + return; + } new WinRect(0, 0, dc.clipCx, dc.clipCy).write(rect); - return SIMPLEREGION; } // int GetDeviceCaps(HDC hdc, int nIndex) @@ -227,16 +227,15 @@ static public int RealizePalette(int hdc) { } // int SelectClipRgn(HDC hdc, HRGN hrgn) - static public int SelectClipRgn(int hdc, int hrgn) { + static public void SelectClipRgn(int hdc, int hrgn) { WinDC dc = WinDC.get(hdc); if (dc == null) - return 0; + return; if (hrgn == 0) { if (dc.hClipRgn != 0) WinRegion.get(dc.hClipRgn).close(); - return NULLREGION; } else { - return SelectObject(hdc, hrgn); + SelectObject(hdc, hrgn); } } @@ -348,11 +347,11 @@ static public int TextOut(int hdc, int x, int y, String text) { WinBitmap bitmap; - int bkColor = 0xFFFFFFFF; - int textColor = 0xFF000000; + int bkColor; + int textColor; int hFont; - boolean owner = false; - int hPalette = 0; + boolean owner; + int hPalette; int bkMode = OPAQUE; JavaBitmap image; int hBitmap; @@ -366,7 +365,7 @@ static public int TextOut(int hdc, int x, int y, String text) { public int clipX; public int clipY; int ROPmode=R2_COPYPEN; - float miterLimit = 10.0f; /* 10.0 is the default, from MSDN */ + final float miterLimit = 10.0f; /* 10.0 is the default, from MSDN */ public int CursPosX; public int CursPosY; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinEnhancedMetaFile.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinEnhancedMetaFile.java index db319533..d5188103 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinEnhancedMetaFile.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinEnhancedMetaFile.java @@ -9,7 +9,7 @@ static public WinEnhancedMetaFile create(int style, int color, int hatch) { static public WinEnhancedMetaFile get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinEnhancedMetaFile)) + if (!(object instanceof WinEnhancedMetaFile)) return null; return (WinEnhancedMetaFile)object; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinFont.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinFont.java index 888c7731..aa5575ed 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinFont.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinFont.java @@ -18,7 +18,7 @@ static public WinFont create(Font font) { static public WinFont get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinFont)) + if (!(object instanceof WinFont)) return null; return (WinFont)object; } @@ -199,11 +199,11 @@ static public int GetTextMetricsA(int hdc, int lptm) { Memory.mem_writeb(lptm, 0);lptm+=1; // tmUnderlined Memory.mem_writeb(lptm, 0);lptm+=1; // tmStruckOut Memory.mem_writeb(lptm, 0x06);lptm+=1; // tmPitchAndFamily TMPF_FIXED_PITCH=0x01 TMPF_VECTOR=0x02 TMPF_DEVICE=0x08 TMPF_TRUETYPE=0x04 - Memory.mem_writeb(lptm, 0);lptm+=1; // tmCharSet 0=ANSI_CHARSET + Memory.mem_writeb(lptm, 0); return WinAPI.TRUE; } - public Font font; + public final Font font; public WinFont(int id, Font font) { super(id); @@ -224,15 +224,15 @@ static public int WIN_TO_JAVA(int size) { /*********************************************************************** * GdiGetCharDimensions (GDI32.@) - * + *

* Gets the average width of the characters in the English alphabet. - * + *

* PARAMS * hdc [I] Handle to the device context to measure on. - * + *

* RETURNS * The average width of characters in the English alphabet. - * + *

* NOTES * This function is used by the dialog manager to get the size of a dialog * unit. It should also be used by other pieces of code that need to know @@ -240,7 +240,7 @@ static public int WIN_TO_JAVA(int size) { * window handle of the dialog. * Windows caches the font metrics from this function, but we don't and * there doesn't appear to be an immediate advantage to do so. - * + *

* SEE ALSO * GetTextExtentPointW, GetTextMetricsW, MapDialogRect. */ diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinGDI.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinGDI.java index a15c6874..3fa4c691 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinGDI.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinGDI.java @@ -5,7 +5,7 @@ public class WinGDI extends WinObject { static public WinGDI getGDI(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinGDI)) + if (!(object instanceof WinGDI)) return null; return (WinGDI)object; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPalette.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPalette.java index 7791c4bb..d130edc5 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPalette.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPalette.java @@ -11,7 +11,7 @@ static public WinPalette create(int[] palette) { static public WinPalette get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinPalette)) + if (!(object instanceof WinPalette)) return null; return (WinPalette)object; } @@ -78,7 +78,7 @@ static public int SetSystemPaletteUse(int hdc, int uUsage) { return SYSPAL_NOSTATIC; } - int[] palette; + final int[] palette; public WinPalette(int handle, int[] palette) { super(handle); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPen.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPen.java index ab8f61b0..5d0c1d03 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPen.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinPen.java @@ -13,7 +13,7 @@ static public WinPen create(int style, int width, int color) { static public WinPen get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinPen)) + if (!(object instanceof WinPen)) return null; return (WinPen) object; } @@ -69,7 +69,7 @@ static public int ExtCreatePen(int style, int width, int lplb, int style_count, for (i = 0; (i < style_count) && !has_neg; i++) { int s = readd(lpStyle + i * 4); - has_neg = has_neg || (s < 0); + has_neg = s < 0; all_zero = all_zero && (s == 0); } @@ -121,7 +121,7 @@ static public int ExtCreatePen(int style, int width, int lplb, int style_count, return penPtr.handle; } - public EXTLOGPEN logpen = new EXTLOGPEN(); + public final EXTLOGPEN logpen = new EXTLOGPEN(); public WinPen(int id) { super(id); @@ -132,8 +132,8 @@ public boolean setStroke(WinDC dc, Graphics2D g) { return false; } g.setPaint(new Color(0xFF000000 | Pixel.BGRtoRGB(logpen.elpColor))); - int cap = 0; - int join = 0; + int cap; + int join; float[] dash; float dashSize=3.0f*logpen.elpWidth; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinRegion.java b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinRegion.java index 478fb223..09fa11a8 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinRegion.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/gdi32/WinRegion.java @@ -17,19 +17,18 @@ static public WinRegion createNoHandle() { static public WinRegion get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinRegion)) + if (!(object instanceof WinRegion)) return null; return (WinRegion) object; } // INT WINAPI GetRgnBox( HRGN hrgn, LPRECT rect ) - static public int GetRgnBox(int hrgn, int pRect) { + static public void GetRgnBox(int hrgn, int pRect) { WinRegion obj = WinRegion.get(hrgn); if (obj != null) { obj.extents.write(pRect); - return obj.getType(); + obj.getType(); } - return ERROR; } // HRGN WINAPI CreateRectRgn(INT left, INT top, INT right, INT bottom) @@ -99,16 +98,16 @@ public int getType() { } } - public Vector rects = new Vector(); + public final Vector rects = new Vector<>(); public WinRect extents = new WinRect(); public boolean isEmpty() { - return rects.size() == 0; + return rects.isEmpty(); } public void offset(int x, int y) { for (int i = 0; i < rects.size(); i++) { - WinRect rect = (WinRect) rects.elementAt(i); + WinRect rect = rects.elementAt(i); rect.offset(x, y); } extents.offset(x, y); @@ -120,9 +119,9 @@ public void offset(int x, int y) { */ static public boolean intersect(WinRegion newReg, WinRegion reg1, WinRegion reg2) { /* check for trivial reject */ - if (reg1.rects.size() == 0 || reg2.rects.size() == 0 || !EXTENTCHECK(reg1.extents, reg2.extents)) + if (reg1.rects.isEmpty() || reg2.rects.isEmpty() || EXTENTCHECK(reg1.extents, reg2.extents)) newReg.rects.clear(); - else if (!region_op(newReg, reg1, reg2, intersect0, null, null)) return false; + else if (region_op(newReg, reg1, reg2, intersect0, null, null)) return false; /* * Can't alter newReg's extents before we call miRegionOp because @@ -145,7 +144,7 @@ static public boolean union(WinRegion newReg, WinRegion reg1, WinRegion reg2) { /* * Region 1 and 2 are the same or region 1 is empty */ - if (reg1 == reg2 || reg1.rects.size() == 0) { + if (reg1 == reg2 || reg1.rects.isEmpty()) { if (newReg != reg2) newReg.copy(reg2); return true; @@ -154,7 +153,7 @@ static public boolean union(WinRegion newReg, WinRegion reg1, WinRegion reg2) { /* * if nothing to union (region 2 empty) */ - if (reg2.rects.size() == 0) { + if (reg2.rects.isEmpty()) { if (newReg != reg1) newReg.copy(reg1); return true; @@ -180,7 +179,7 @@ static public boolean union(WinRegion newReg, WinRegion reg1, WinRegion reg2) { return true; } - if (!region_op(newReg, reg1, reg2, union0, unionNon0, unionNon0)) return false; + if (region_op(newReg, reg1, reg2, union0, unionNon0, unionNon0)) return false; newReg.calculateExtents(); return true; } @@ -193,21 +192,21 @@ static public boolean xor(WinRegion dr, WinRegion sra, WinRegion srb) { } static public boolean subtract(WinRegion dst, WinRegion src1, WinRegion src2) { - if (src1.rects.size() == 0 || src2.rects.size() == 0 || !EXTENTCHECK(src1.extents, src2.extents)) { + if (src1.rects.isEmpty() || src2.rects.isEmpty() || EXTENTCHECK(src1.extents, src2.extents)) { dst.copy(src1); return true; } - if (!region_op(dst, src1, src2, subtract_overlapping, subtract_non_overlapping, null)) return false; + if (region_op(dst, src1, src2, subtract_overlapping, subtract_non_overlapping, null)) return false; dst.calculateExtents(); return true; } - static private interface Overlapped { - public boolean call(WinRegion rg, Vector reg1, int r1, int r1Stop, Vector reg2, int r2, int r2Stop, int top, int bottom); + private interface Overlapped { + boolean call(WinRegion rg, Vector reg1, int r1, int r1Stop, Vector reg2, int r2, int r2Stop, int top, int bottom); } - static private interface NonOverlapped { - public boolean call(WinRegion rg, Vector r, int rStart, int rStop, int top, int bottom); + private interface NonOverlapped { + boolean call(WinRegion rg, Vector r, int rStart, int rStop, int top, int bottom); } static int left(Vector v, int pos) { @@ -238,41 +237,39 @@ static int bottom(Vector v, int pos) { * Side Effects: * Rectangles may be added to the region. */ - static private Overlapped intersect0 = new Overlapped() { - public boolean call(WinRegion pReg, Vector reg1, int r1, int r1End, Vector reg2, int r2, int r2End, int top, int bottom) { - int left, right; - - while ((r1 != r1End) && (r2 != r2End)) { - left = Math.max(left(reg1, r1), left(reg2, r2)); - right = Math.min(right(reg1, r1), right(reg2, r2)); - - /* - * If there's any overlap between the two rectangles, add that - * overlap to the new region. - * There's no need to check for subsumption because the only way - * such a need could arise is if some region has two rectangles - * right next to each other. Since that should never happen... - */ - if (left < right) { - pReg.rects.add(new WinRect(left, top, right, bottom)); - } + static private final Overlapped intersect0 = (pReg, reg1, r1, r1End, reg2, r2, r2End, top, bottom) -> { + int left, right; + + while ((r1 != r1End) && (r2 != r2End)) { + left = Math.max(left(reg1, r1), left(reg2, r2)); + right = Math.min(right(reg1, r1), right(reg2, r2)); + + /* + * If there's any overlap between the two rectangles, add that + * overlap to the new region. + * There's no need to check for subsumption because the only way + * such a need could arise is if some region has two rectangles + * right next to each other. Since that should never happen... + */ + if (left < right) { + pReg.rects.add(new WinRect(left, top, right, bottom)); + } - /* - * Need to advance the pointers. Shift the one that extends - * to the right the least, since the other still has a chance to - * overlap with that region's next rectangle, if you see what I mean. - */ - if (right(reg1, r1) < right(reg2, r2)) { - r1++; - } else if (right(reg2, r2) < right(reg1, r1)) { - r2++; - } else { - r1++; - r2++; - } + /* + * Need to advance the pointers. Shift the one that extends + * to the right the least, since the other still has a chance to + * overlap with that region's next rectangle, if you see what I mean. + */ + if (right(reg1, r1) < right(reg2, r2)) { + r1++; + } else if (right(reg2, r2) < right(reg1, r1)) { + r2++; + } else { + r1++; + r2++; } - return true; } + return true; }; /** @@ -290,14 +287,12 @@ public boolean call(WinRegion pReg, Vector reg1, int r1, int r1End, Vector reg2, * pReg->numRects is incremented and the final rectangles overwritten * with the rectangles we're passed. */ - static private NonOverlapped unionNon0 = new NonOverlapped() { - public boolean call(WinRegion pReg, Vector reg, int r, int rEnd, int top, int bottom) { - while (r != rEnd) { - pReg.rects.add(new WinRect(left(reg, r), top, right(reg, r), bottom)); - r++; - } - return true; + static private final NonOverlapped unionNon0 = (pReg, reg, r, rEnd, top, bottom) -> { + while (r != rEnd) { + pReg.rects.add(new WinRect(left(reg, r), top, right(reg, r), bottom)); + r++; } + return false; }; /** @@ -316,121 +311,115 @@ public boolean call(WinRegion pReg, Vector reg, int r, int rEnd, int top, int bo */ static private void MERGERECT(WinRegion pReg, Vector reg, int r, int top, int bottom) { int last = pReg.rects.size() - 1; - if (pReg.rects.size() != 0 && top(pReg.rects, last) == top && bottom(pReg.rects, last) == bottom && right(pReg.rects, last) >= left(reg, r)) { + if (!pReg.rects.isEmpty() && top(pReg.rects, last) == top && bottom(pReg.rects, last) == bottom && right(pReg.rects, last) >= left(reg, r)) { if (right(pReg.rects, last) < right(reg, r)) - ((WinRect) pReg.rects.elementAt(last)).right = right(reg, r); + pReg.rects.elementAt(last).right = right(reg, r); } else { pReg.rects.add(new WinRect(left(reg, r), top, right(reg, r), bottom)); } } - static private Overlapped union0 = new Overlapped() { - public boolean call(WinRegion pReg, Vector reg1, int r1, int r1End, Vector reg2, int r2, int r2End, int top, int bottom) { - while ((r1 != r1End) && (r2 != r2End)) { - if (left(reg1, r1) < left(reg2, r2)) { - MERGERECT(pReg, reg1, r1++, top, bottom); - } else { - MERGERECT(pReg, reg2, r2++, top, bottom); - } + static private final Overlapped union0 = (pReg, reg1, r1, r1End, reg2, r2, r2End, top, bottom) -> { + while ((r1 != r1End) && (r2 != r2End)) { + if (left(reg1, r1) < left(reg2, r2)) { + MERGERECT(pReg, reg1, r1++, top, bottom); + } else { + MERGERECT(pReg, reg2, r2++, top, bottom); } + } - if (r1 != r1End) { - do { - MERGERECT(pReg, reg1, r1++, top, bottom); - } while (r1 != r1End); - } else { - while (r2 != r2End) { - MERGERECT(pReg, reg2, r2++, top, bottom); - } + if (r1 != r1End) { + do { + MERGERECT(pReg, reg1, r1++, top, bottom); + } while (r1 != r1End); + } else { + while (r2 != r2End) { + MERGERECT(pReg, reg2, r2++, top, bottom); } - return true; } + return true; }; - static private NonOverlapped subtract_non_overlapping = new NonOverlapped() { - public boolean call(WinRegion rg, Vector reg, int r, int rEnd, int top, int bottom) { - while (r != rEnd) { - WinRect rect = new WinRect(); - rg.rects.add(rect); - rect.left = left(reg, r); - rect.top = top; - rect.right = right(reg, r); - rect.bottom = bottom; - r++; - } - return true; + static private final NonOverlapped subtract_non_overlapping = (rg, reg, r, rEnd, top, bottom) -> { + while (r != rEnd) { + WinRect rect = new WinRect(); + rg.rects.add(rect); + rect.left = left(reg, r); + rect.top = top; + rect.right = right(reg, r); + rect.bottom = bottom; + r++; } + return false; }; /* handle an overlapping band for subtract_region */ - static private Overlapped subtract_overlapping = new Overlapped() { - public boolean call(WinRegion rg, Vector reg1, int r1, int r1End, Vector reg2, int r2, int r2End, int top, int bottom) { - int left = left(reg1, r1); - - while ((r1 != r1End) && (r2 != r2End)) { - if (right(reg2, r2) <= left) r2++; - else if (left(reg2, r2) <= left) { - left = right(reg2, r2); - if (left >= right(reg1, r1)) { - r1++; - if (r1 != r1End) - left = left(reg1, r1); - } else r2++; - } else if (left(reg2, r2) < right(reg1, r1)) { - WinRect rect = new WinRect(); - rg.rects.add(rect); - rect.left = left; - rect.top = top; - rect.right = left(reg2, r2); - rect.bottom = bottom; - left = right(reg2, r2); - if (left >= right(reg1, r1)) { - r1++; - if (r1 != r1End) - left = left(reg1, r1); - } else r2++; - } else { - if (right(reg1, r1) > left) { - WinRect rect = new WinRect(); - rg.rects.add(rect); - rect.left = left; - rect.top = top; - rect.right = right(reg1, r1); - rect.bottom = bottom; - } + static private final Overlapped subtract_overlapping = (rg, reg1, r1, r1End, reg2, r2, r2End, top, bottom) -> { + int left = left(reg1, r1); + + while ((r1 != r1End) && (r2 != r2End)) { + if (right(reg2, r2) <= left) r2++; + else if (left(reg2, r2) <= left) { + left = right(reg2, r2); + if (left >= right(reg1, r1)) { r1++; - left = left(reg1, r1); - } - } - - while (r1 != r1End) { + if (r1 != r1End) + left = left(reg1, r1); + } else r2++; + } else if (left(reg2, r2) < right(reg1, r1)) { WinRect rect = new WinRect(); rg.rects.add(rect); rect.left = left; rect.top = top; - rect.right = right(reg1, r1); + rect.right = left(reg2, r2); rect.bottom = bottom; + left = right(reg2, r2); + if (left >= right(reg1, r1)) { + r1++; + if (r1 != r1End) + left = left(reg1, r1); + } else r2++; + } else { + if (right(reg1, r1) > left) { + WinRect rect = new WinRect(); + rg.rects.add(rect); + rect.left = left; + rect.top = top; + rect.right = right(reg1, r1); + rect.bottom = bottom; + } r1++; - if (r1 != r1End) left = left(reg1, r1); + left = left(reg1, r1); } - return true; } + + while (r1 != r1End) { + WinRect rect = new WinRect(); + rg.rects.add(rect); + rect.left = left; + rect.top = top; + rect.right = right(reg1, r1); + rect.bottom = bottom; + r1++; + if (r1 != r1End) left = left(reg1, r1); + } + return true; }; int getTop(int index) { - return ((WinRect) rects.elementAt(index)).top; + return rects.elementAt(index).top; } int getBottom(int index) { - return ((WinRect) rects.elementAt(index)).bottom; + return rects.elementAt(index).bottom; } int getLeft(int index) { - return ((WinRect) rects.elementAt(index)).left; + return rects.elementAt(index).left; } int getRight(int index) { - return ((WinRect) rects.elementAt(index)).right; + return rects.elementAt(index).right; } /* apply an operation to two regions */ @@ -447,10 +436,7 @@ static public boolean region_op(WinRegion newReg, WinRegion reg1, WinRegion reg2 newReg.rects.clear(); - if (reg1.extents.top < reg2.extents.top) - ybot = reg1.extents.top; - else - ybot = reg2.extents.top; + ybot = Math.min(reg1.extents.top, reg2.extents.top); prevBand = 0; @@ -467,7 +453,7 @@ static public boolean region_op(WinRegion newReg, WinRegion reg1, WinRegion reg2 top = Math.max(reg1.getTop(r1), ybot); bot = Math.min(reg1.getBottom(r1), reg2.getTop(r2)); if ((top != bot) && non_overlap1_func != null) { - if (!non_overlap1_func.call(newReg, reg1.rects, r1, r1BandEnd, top, bot)) return false; + if (non_overlap1_func.call(newReg, reg1.rects, r1, r1BandEnd, top, bot)) return true; } ytop = reg2.getTop(r2); } else if (reg2.getTop(r2) < reg1.getTop(r1)) { @@ -475,7 +461,7 @@ static public boolean region_op(WinRegion newReg, WinRegion reg1, WinRegion reg2 bot = Math.min(reg2.getBottom(r2), reg1.getTop(r1)); if ((top != bot) && non_overlap2_func != null) { - if (!non_overlap2_func.call(newReg, reg2.rects, r2, r2BandEnd, top, bot)) return false; + if (non_overlap2_func.call(newReg, reg2.rects, r2, r2BandEnd, top, bot)) return true; } ytop = reg1.getTop(r1); @@ -490,7 +476,7 @@ static public boolean region_op(WinRegion newReg, WinRegion reg1, WinRegion reg2 curBand = newReg.rects.size(); if (ybot > ytop) { if (!overlap_func.call(newReg, reg1.rects, r1, r1BandEnd, reg2.rects, r2, r2BandEnd, ytop, ybot)) - return false; + return true; } if (newReg.rects.size() != curBand) @@ -506,8 +492,8 @@ static public boolean region_op(WinRegion newReg, WinRegion reg1, WinRegion reg2 do { r1BandEnd = r1; while ((r1BandEnd < r1End) && (reg1.getTop(r1BandEnd) == reg1.getTop(r1))) r1BandEnd++; - if (!non_overlap1_func.call(newReg, reg1.rects, r1, r1BandEnd, Math.max(reg1.getTop(r1), ybot), reg1.getBottom(r1))) - return false; + if (non_overlap1_func.call(newReg, reg1.rects, r1, r1BandEnd, Math.max(reg1.getTop(r1), ybot), reg1.getBottom(r1))) + return true; r1 = r1BandEnd; } while (r1 != r1End); } @@ -515,15 +501,15 @@ static public boolean region_op(WinRegion newReg, WinRegion reg1, WinRegion reg2 do { r2BandEnd = r2; while ((r2BandEnd < r2End) && (reg2.getTop(r2BandEnd) == reg2.getTop(r2))) r2BandEnd++; - if (!non_overlap2_func.call(newReg, reg2.rects, r2, r2BandEnd, Math.max(reg2.getTop(r2), ybot), reg2.getBottom(r2))) - return false; + if (non_overlap2_func.call(newReg, reg2.rects, r2, r2BandEnd, Math.max(reg2.getTop(r2), ybot), reg2.getBottom(r2))) + return true; r2 = r2BandEnd; } while (r2 != r2End); } if (newReg.rects.size() != curBand) coalesce_region(newReg, prevBand, curBand); - return true; + return false; } /* attempt to merge the rects in the current band with those in the */ @@ -564,7 +550,7 @@ static private int coalesce_region(WinRegion reg, int prevStart, int curStart) { pPrevRect -= curNumRects; do { - ((WinRect) reg.rects.get(pPrevRect)).bottom = reg.getBottom(pCurRect); + reg.rects.get(pPrevRect).bottom = reg.getBottom(pCurRect); pPrevRect++; pCurRect++; curNumRects -= 1; @@ -572,7 +558,7 @@ static private int coalesce_region(WinRegion reg, int prevStart, int curStart) { if (pCurRect == pRegEnd) curStart = prevStart; else do { - ((WinRect) reg.rects.get(pPrevRect++)).copy((WinRect) reg.rects.get(pCurRect++)); + reg.rects.get(pPrevRect++).copy(reg.rects.get(pCurRect++)); } while (pCurRect != pRegEnd); while (size < reg.rects.size()) { @@ -585,15 +571,15 @@ static private int coalesce_region(WinRegion reg, int prevStart, int curStart) { /* recalculate the extents of a region */ private void calculateExtents() { - if (rects.size() == 0) { + if (rects.isEmpty()) { extents.left = 0; extents.top = 0; extents.right = 0; extents.bottom = 0; } else { - extents = ((WinRect) rects.elementAt(0)).copy(); + extents = rects.elementAt(0).copy(); for (int i = 1; i < rects.size(); i++) { - WinRect rect = (WinRect) rects.elementAt(i); + WinRect rect = rects.elementAt(i); if (rect.left < extents.left) extents.left = rect.left; if (rect.top < extents.top) extents.top = rect.top; if (rect.right > extents.right) extents.right = rect.right; @@ -603,7 +589,7 @@ private void calculateExtents() { } static private boolean EXTENTCHECK(WinRect r1, WinRect r2) { - return r1.right > r2.left && r1.left < r2.right && r1.bottom > r2.top && r1.top < r2.bottom; + return r1.right <= r2.left || r1.left >= r2.right || r1.bottom <= r2.top || r1.top >= r2.bottom; } public WinRegion copyNoHandle() { @@ -614,7 +600,7 @@ public WinRegion copyNoHandle() { public void copy(WinRegion rgn) { for (int i = 0; i < rects.size(); i++) { - rects.add(((WinRect) rgn.rects.elementAt(i)).copy()); + rects.add(rgn.rects.elementAt(i).copy()); } extents = rgn.extents.copy(); } @@ -626,6 +612,6 @@ public WinRegion copy() { } public String toString() { - return "REGION size="+rects.size()+(rects.size()>0?" rect(1)="+rects.elementAt(0).toString():""); + return "REGION size="+rects.size()+(!rects.isEmpty() ?" rect(1)="+rects.elementAt(0).toString():""); } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/FILETIME.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/FILETIME.java index cac28d5b..f965825a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/FILETIME.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/FILETIME.java @@ -5,9 +5,9 @@ public class FILETIME extends WinAPI { public FILETIME(int address) { dwLowDateTime = readd(address);address+=4; - dwHighDateTime = readd(address);address+=4; + dwHighDateTime = readd(address); } - public int dwLowDateTime; - public int dwHighDateTime; + public final int dwLowDateTime; + public final int dwHighDateTime; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KResource.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KResource.java index aeefd7c6..74280c0e 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KResource.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KResource.java @@ -8,8 +8,7 @@ public class KResource extends WinAPI { // BOOL WINAPI FreeResource(HGLOBAL hglbResource) - static public int FreeResource(int hglbResource) { - return TRUE; + static public void FreeResource(int hglbResource) { } // HRSRC WINAPI FindResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType) diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KTime.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KTime.java index a820ff69..c7fee395 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KTime.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/KTime.java @@ -13,10 +13,6 @@ static public int CompareFileTime(int lpFileTime1, int lpFileTime2) { return 1; if (x.dwHighDateTime < y.dwHighDateTime) return -1; - if (x.dwLowDateTime > y.dwLowDateTime) - return 1; - if (x.dwLowDateTime < y.dwLowDateTime) - return -1; - return 0; + return Integer.compare(x.dwLowDateTime, y.dwLowDateTime); } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/Kernel32.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/Kernel32.java index 39b5f657..41726531 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/Kernel32.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/Kernel32.java @@ -6,7 +6,6 @@ import jdos.cpu.Paging; import jdos.hardware.Memory; import jdos.util.IntRef; -import jdos.win.Console; import jdos.win.Win; import jdos.win.builtin.HandlerBase; import jdos.win.builtin.ReturnHandlerBase; @@ -217,7 +216,7 @@ public Kernel32(Loader loader, int handle) { } // int CompareString(LCID Locale, DWORD dwCmpFlags, LPCTSTR lpString1, int cchCount1, LPCTSTR lpString2, int cchCount2) - private Callback.Handler CompareStringA = new HandlerBase() { + private final Callback.Handler CompareStringA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.CompareStringA"; } @@ -259,7 +258,7 @@ else if (result > 0) }; // HANDLE WINAPI CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName) - private Callback.Handler CreateEventA = new HandlerBase() { + private final Callback.Handler CreateEventA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.CreateEventA"; } @@ -291,20 +290,20 @@ public void onCall() { }; // HANDLE WINAPI CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) - private Callback.Handler CreateFileA = new HandlerBase() { + private final Callback.Handler CreateFileA = new HandlerBase() { private boolean create(FilePath file) { try { if (!file.createNewFile()) { CPU_Regs.reg_eax.dword = WinAPI.INVALID_HANDLE_VALUE; Scheduler.getCurrentThread().setLastError(Error.ERROR_ACCESS_DENIED); - return false; + return true; } } catch (Exception e) { CPU_Regs.reg_eax.dword = WinAPI.INVALID_HANDLE_VALUE; Scheduler.getCurrentThread().setLastError(Error.ERROR_ACCESS_DENIED); - return false; + return true; } - return true; + return false; } public java.lang.String getName() { @@ -343,7 +342,7 @@ public void onCall() { thread.setLastError(Error.ERROR_FILE_EXISTS); return; } - if (!create(file)) { + if (create(file)) { return; } break; @@ -352,7 +351,7 @@ public void onCall() { thread.setLastError(Error.ERROR_ALREADY_EXISTS); file.delete(); } - if (!create(file)) { + if (create(file)) { return; } break; @@ -366,7 +365,7 @@ public void onCall() { case 4: // OPEN_ALWAYS if (file.exists()) thread.setLastError(Error.ERROR_ALREADY_EXISTS); - else if (!create(file)) { + else if (create(file)) { return; } break; @@ -376,7 +375,7 @@ else if (!create(file)) { CPU_Regs.reg_eax.dword = WinAPI.INVALID_HANDLE_VALUE; } file.delete(); - if (!create(file)) { + if (create(file)) { return; } break; @@ -392,7 +391,7 @@ else if (!create(file)) { }; // HANDLE WINAPI CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName) - private Callback.Handler CreateFileMappingA = new HandlerBase() { + private final Callback.Handler CreateFileMappingA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.CreateFileMappingA"; } @@ -424,7 +423,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = mapping.handle; } }; - private Callback.Handler CreateFileMappingW = new HandlerBase() { + private final Callback.Handler CreateFileMappingW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.CreateFileMappingW"; } @@ -440,7 +439,7 @@ public void onCall() { }; // HANDLE WINAPI CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName) - private Callback.Handler CreateMutexA = new HandlerBase() { + private final Callback.Handler CreateMutexA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.CreateMutexA"; } @@ -472,7 +471,7 @@ public void onCall() { } }; - private Callback.Handler CreateThreadCleanup = new HandlerBase() { + private final Callback.Handler CreateThreadCleanup = new HandlerBase() { public String getName() { return "Kernel32.CreateThread - Cleanup"; } @@ -486,7 +485,7 @@ public void onCall() { private long threadCleanup = 0; // HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId) - private Callback.Handler CreateThread = new HandlerBase() { + private final Callback.Handler CreateThread = new HandlerBase() { public java.lang.String getName() { return "Kernel32.CreateThread"; } @@ -527,18 +526,18 @@ public void onCall() { }; // void WINAPI DebugBreak(void) - private Callback.Handler DebugBreak = new HandlerBase() { + private final Callback.Handler DebugBreak = new HandlerBase() { public java.lang.String getName() { return "Kernel32.DebugBreak"; } public void onCall() { - Console.out("DebugBreak was called\n"); + System.out.println("DebugBreak was called\n"); Win.exit(); } }; // PVOID DecodePointer(PVOID Ptr) - static private Callback.Handler DecodePointer = new HandlerBase() { + static private final Callback.Handler DecodePointer = new HandlerBase() { public java.lang.String getName() { return "Kernel32.DecodePointer"; } @@ -548,7 +547,7 @@ public void onCall() { }; // void WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - static private Callback.Handler DeleteCriticalSection = new HandlerBase() { + static private final Callback.Handler DeleteCriticalSection = new HandlerBase() { public java.lang.String getName() { return "Kernel32.DeleteCriticalSection"; } @@ -558,7 +557,7 @@ public void onCall() { }; // BOOL WINAPI DeleteFile(LPCTSTR lpFileName) - static private Callback.Handler DeleteFileA = new HandlerBase() { + static private final Callback.Handler DeleteFileA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.DeleteFileA"; } @@ -587,7 +586,7 @@ public void onCall() { }; // BOOL WINAPI DisableThreadLibraryCalls(HMODULE hModule) - static private Callback.Handler DisableThreadLibraryCalls = new HandlerBase() { + static private final Callback.Handler DisableThreadLibraryCalls = new HandlerBase() { public java.lang.String getName() { return "Kernel32.DisableThreadLibraryCalls"; } @@ -603,10 +602,10 @@ public void onCall() { } } }; - static int pointerObfuscator = new Random().nextInt(); + static final int pointerObfuscator = new Random().nextInt(); // PVOID EncodePointer(PVOID Ptr) - static private Callback.Handler EncodePointer = new HandlerBase() { + static private final Callback.Handler EncodePointer = new HandlerBase() { public java.lang.String getName() { return "Kernel32.EncodePointer"; } @@ -616,7 +615,7 @@ public void onCall() { }; // void WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - private Callback.Handler EnterCriticalSection = new HandlerBase() { + private final Callback.Handler EnterCriticalSection = new HandlerBase() { public java.lang.String getName() { return "Kernel32.EnterCriticalSection"; } @@ -626,7 +625,7 @@ public void onCall() { }; // BOOL EnumSystemLocales(LOCALE_ENUMPROC lpLocaleEnumProc, DWORD dwFlags) - static private Callback.Handler EnumSystemLocalesA = new HandlerBase() { + static private final Callback.Handler EnumSystemLocalesA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.EnumSystemLocalesA"; } @@ -634,7 +633,7 @@ public void onCall() { notImplemented(); } }; - static private Callback.Handler EnumSystemLocalesW = new HandlerBase() { + static private final Callback.Handler EnumSystemLocalesW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.EnumSystemLocalesW"; } @@ -644,7 +643,7 @@ public void onCall() { }; // VOID WINAPI ExitProcess(UINT uExitCode) - private Callback.Handler ExitProcess = new HandlerBase() { + private final Callback.Handler ExitProcess = new HandlerBase() { public java.lang.String getName() { return "Kernel32.ExitProcess"; } @@ -660,7 +659,7 @@ public void onCall() { }; // VOID WINAPI ExitThread(DWORD dwExitCode) - private Callback.Handler ExitThread = new HandlerBase() { + private final Callback.Handler ExitThread = new HandlerBase() { public java.lang.String getName() { return "Kernel32.ExitThread"; } @@ -671,7 +670,7 @@ public void onCall() { }; // void WINAPI FatalAppExit(UINT uAction, LPCTSTR lpMessageText) - static private Callback.Handler FatalAppExitA = new HandlerBase() { + static private final Callback.Handler FatalAppExitA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FatalAppExitA"; } @@ -679,7 +678,7 @@ public void onCall() { notImplemented(); } }; - static private Callback.Handler FatalAppExitW = new HandlerBase() { + static private final Callback.Handler FatalAppExitW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FatalAppExitW"; } @@ -689,7 +688,7 @@ public void onCall() { }; // BOOL WINAPI FileTimeToLocalFileTime(const FILETIME *lpFileTime, LPFILETIME lpLocalFileTime) - private Callback.Handler FileTimeToLocalFileTime = new HandlerBase() { + private final Callback.Handler FileTimeToLocalFileTime = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FileTimeToLocalFileTime"; } @@ -697,13 +696,13 @@ public void onCall() { int lpFileTime = CPU.CPU_Pop32(); int lpLocalFileTime = CPU.CPU_Pop32(); long time = WinFile.readFileTime(lpFileTime); - time = time + TimeZone.getDefault().getRawOffset()*10; + time = time + TimeZone.getDefault().getRawOffset()* 10L; WinFile.writeFileTime(lpLocalFileTime, time); } }; // BOOL WINAPI FileTimeToSystemTime(const FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime) - static private Callback.Handler FileTimeToSystemTime = new HandlerBase() { + static private final Callback.Handler FileTimeToSystemTime = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FileTimeToSystemTime"; } @@ -721,7 +720,7 @@ public void onCall() { }; // BOOL WINAPI FindClose(HANDLE hFindFile) - static private Callback.Handler FindClose = new HandlerBase() { + static private final Callback.Handler FindClose = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FindClose"; } @@ -742,7 +741,7 @@ public void onCall() { }; // HANDLE WINAPI FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData) - private Callback.Handler FindFirstFileA = new HandlerBase() { + private final Callback.Handler FindFirstFileA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FindFirstFileA"; } @@ -797,7 +796,7 @@ public void onCall() { }; // BOOL WINAPI FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData) - static private Callback.Handler FindNextFileA = new HandlerBase() { + static private final Callback.Handler FindNextFileA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FindNextFileA"; } @@ -818,7 +817,7 @@ public void onCall() { }; // DWORD WINAPI FormatMessage(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments) - static private Callback.Handler FormatMessageA = new HandlerBase() { + static private final Callback.Handler FormatMessageA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FormatMessageA"; } @@ -840,14 +839,14 @@ public void onCall() { CPU_Regs.reg_eax.dword = msg.length(); } } else { - Console.out("FormatMessage currently only supports the FORMAT_MESSAGE_FROM_SYSTEM flags"); + System.out.println("FormatMessage currently only supports the FORMAT_MESSAGE_FROM_SYSTEM flags"); notImplemented(); } } }; // BOOL WINAPI FreeEnvironmentStrings(LPTCH lpszEnvironmentBlock) - static private Callback.Handler FreeEnvironmentStringsA = new HandlerBase() { + static private final Callback.Handler FreeEnvironmentStringsA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FreeEnvironmentStringsA"; } @@ -856,7 +855,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = WinAPI.TRUE; } }; - static private Callback.Handler FreeEnvironmentStringsW = new HandlerBase() { + static private final Callback.Handler FreeEnvironmentStringsW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FreeEnvironmentStringsW"; } @@ -867,7 +866,7 @@ public void onCall() { }; // BOOL WINAPI FreeLibrary(HMODULE hModule) - static private Callback.Handler FreeLibrary = new HandlerBase() { + static private final Callback.Handler FreeLibrary = new HandlerBase() { public java.lang.String getName() { return "Kernel32.FreeLibrary"; } @@ -885,7 +884,7 @@ public void onCall() { }; // UINT GetACP(void) - static private Callback.Handler GetACP = new HandlerBase() { + static private final Callback.Handler GetACP = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetACP"; } @@ -895,7 +894,7 @@ public void onCall() { }; // LPTSTR WINAPI GetCommandLine(void) - private Callback.Handler GetCommandLineA = new HandlerBase() { + private final Callback.Handler GetCommandLineA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetCommandLineA"; } @@ -903,7 +902,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = WinSystem.getCurrentProcess().getCommandLine(); } }; - private Callback.Handler GetCommandLineW = new HandlerBase() { + private final Callback.Handler GetCommandLineW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetCommandLineW"; } @@ -913,7 +912,7 @@ public void onCall() { }; // UINT WINAPI GetConsoleCP(void) - private Callback.Handler GetConsoleCP = new HandlerBase() { + private final Callback.Handler GetConsoleCP = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetConsoleCP"; } @@ -923,7 +922,7 @@ public void onCall() { }; // BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode) - private Callback.Handler GetConsoleMode = new HandlerBase() { + private final Callback.Handler GetConsoleMode = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetConsoleMode"; } @@ -933,7 +932,7 @@ public void onCall() { }; // UINT WINAPI GetConsoleOutputCP(void) - private Callback.Handler GetConsoleOutputCP = new HandlerBase() { + private final Callback.Handler GetConsoleOutputCP = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetConsoleOutputCP"; } @@ -951,7 +950,7 @@ public void onCall() { */ // BOOL GetCPInfo(UINT CodePage, LPCPINFO lpCPInfo) - private Callback.Handler GetCPInfo = new HandlerBase() { + private final Callback.Handler GetCPInfo = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetCPInfo"; } @@ -972,7 +971,7 @@ public void onCall() { }; // DWORD WINAPI GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer) - static private Callback.Handler GetCurrentDirectoryA = new HandlerBase() { + static private final Callback.Handler GetCurrentDirectoryA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetCurrentDirectoryA"; } @@ -992,7 +991,7 @@ public void onCall() { }; // HANDLE WINAPI GetCurrentProcess(void) - static private Callback.Handler GetCurrentProcess = new HandlerBase() { + static private final Callback.Handler GetCurrentProcess = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetCurrentProcess"; } @@ -1002,7 +1001,7 @@ public void onCall() { }; // DWORD WINAPI GetCurrentProcessId(void) - private Callback.Handler GetCurrentProcessId = new HandlerBase() { + private final Callback.Handler GetCurrentProcessId = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetCurrentProcessId"; } @@ -1012,7 +1011,7 @@ public void onCall() { }; // int GetDateFormat(LCID Locale, DWORD dwFlags, const SYSTEMTIME *lpDate, LPCTSTR lpFormat, LPTSTR lpDateStr, int cchDate) - static private Callback.Handler GetDateFormatA = new HandlerBase() { + static private final Callback.Handler GetDateFormatA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetDateFormatA"; } @@ -1020,7 +1019,7 @@ public void onCall() { notImplemented(); } }; - static private Callback.Handler GetDateFormatW = new HandlerBase() { + static private final Callback.Handler GetDateFormatW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetDateFormatW"; } @@ -1030,7 +1029,7 @@ public void onCall() { }; // BOOL WINAPI GetDiskFreeSpace(LPCTSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters) - static private Callback.Handler GetDiskFreeSpaceA = new HandlerBase() { + static private final Callback.Handler GetDiskFreeSpaceA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetDiskFreeSpaceA"; } @@ -1050,7 +1049,7 @@ public void onCall() { }; // UINT WINAPI GetDriveType(LPCTSTR lpRootPathName) - private Callback.Handler GetDriveTypeA = new HandlerBase() { + private final Callback.Handler GetDriveTypeA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetDriveTypeA"; } @@ -1072,7 +1071,7 @@ public void onCall() { }; // LPTCH WINAPI GetEnvironmentStrings(void) - private Callback.Handler GetEnvironmentStrings = new HandlerBase() { + private final Callback.Handler GetEnvironmentStrings = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetEnvironmentStrings"; } @@ -1080,7 +1079,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = WinSystem.getCurrentProcess().getEnvironment(); } }; - private Callback.Handler GetEnvironmentStringsA = new HandlerBase() { + private final Callback.Handler GetEnvironmentStringsA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetEnvironmentStringsA"; } @@ -1088,7 +1087,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = WinSystem.getCurrentProcess().getEnvironment(); } }; - private Callback.Handler GetEnvironmentStringsW = new HandlerBase() { + private final Callback.Handler GetEnvironmentStringsW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetEnvironmentStringsW"; } @@ -1098,7 +1097,7 @@ public void onCall() { }; // DWORD WINAPI GetFileAttributes(LPCTSTR lpFileName) - private Callback.Handler GetFileAttributesA = new HandlerBase() { + private final Callback.Handler GetFileAttributesA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetFileAttributesA"; } @@ -1124,7 +1123,7 @@ public void onCall() { }; // DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh) - private Callback.Handler GetFileSize = new HandlerBase() { + private final Callback.Handler GetFileSize = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetFileSize"; } @@ -1146,7 +1145,7 @@ public void onCall() { }; // DWORD WINAPI GetFileType(HANDLE hFile) - private Callback.Handler GetFileType = new HandlerBase() { + private final Callback.Handler GetFileType = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetFileType"; } @@ -1163,7 +1162,7 @@ public void onCall() { }; // int GetLocaleInfo(LCID Locale, LCTYPE LCType, LPTSTR lpLCData, int cchData) - static private Callback.Handler GetLocaleInfoA = new HandlerBase() { + static private final Callback.Handler GetLocaleInfoA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetLocaleInfoA"; } @@ -1171,7 +1170,7 @@ public void onCall() { notImplemented(); } }; - static private Callback.Handler GetLocaleInfoW = new HandlerBase() { + static private final Callback.Handler GetLocaleInfoW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetLocaleInfoW"; } @@ -1181,7 +1180,7 @@ public void onCall() { }; // void WINAPI GetLocalTime(LPSYSTEMTIME lpSystemTime) - private Callback.Handler GetLocalTime = new HandlerBase() { + private final Callback.Handler GetLocalTime = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetLocalTime"; } @@ -1192,7 +1191,7 @@ public void onCall() { }; //DWORD WINAPI GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize) - private Callback.Handler GetModuleFileNameA = new HandlerBase() { + private final Callback.Handler GetModuleFileNameA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetModuleFileNameA"; } @@ -1216,7 +1215,7 @@ public void onCall() { } } }; - private Callback.Handler GetModuleFileNameW = new HandlerBase() { + private final Callback.Handler GetModuleFileNameW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetModuleFileNameW"; } @@ -1242,7 +1241,7 @@ public void onCall() { }; // HMODULE WINAPI GetModuleHandle(LPCTSTR lpModuleName) - private Callback.Handler GetModuleHandleA = new HandlerBase() { + private final Callback.Handler GetModuleHandleA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetModuleHandleA"; } @@ -1258,7 +1257,7 @@ public void onCall() { } } }; - static private Callback.Handler GetModuleHandleW = new HandlerBase() { + static private final Callback.Handler GetModuleHandleW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetModuleHandleW"; } @@ -1268,7 +1267,7 @@ public void onCall() { }; // FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName) - private Callback.Handler GetProcAddress = new HandlerBase() { + private final Callback.Handler GetProcAddress = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetProcAddress"; } @@ -1282,7 +1281,7 @@ public void onCall() { }; // HANDLE WINAPI GetProcessHeap(void) - private Callback.Handler GetProcessHeap = new HandlerBase() { + private final Callback.Handler GetProcessHeap = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetProcessHeap"; } @@ -1314,7 +1313,7 @@ public void onCall() { } */ // VOID WINAPI GetStartupInfo(LPSTARTUPINFO lpStartupInfo) - private Callback.Handler GetStartupInfoA = new HandlerBase() { + private final Callback.Handler GetStartupInfoA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetStartupInfoA"; } @@ -1343,10 +1342,10 @@ public void onCall() { Memory.mem_writed(add, 0); add+=4; // lpReserved2 Memory.mem_writed(add, WinFile.STD_IN); add+=4; // hStdInput Memory.mem_writed(add, WinFile.STD_OUT); add+=4; // hStdOutput - Memory.mem_writed(add, WinFile.STD_ERROR); add+=4; // hStdError + Memory.mem_writed(add, WinFile.STD_ERROR); } }; - static private Callback.Handler GetStartupInfoW = new HandlerBase() { + static private final Callback.Handler GetStartupInfoW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetStartupInfoW"; } @@ -1356,7 +1355,7 @@ public void onCall() { }; // HANDLE WINAPI GetStdHandle(DWORD nStdHandle) - static private Callback.Handler GetStdHandle = new HandlerBase() { + static private final Callback.Handler GetStdHandle = new HandlerBase() { final int STD_INPUT_HANDLE = -10; final int STD_OUTPUT_HANDLE = -11; final int STD_ERROR_HANDLE = -12; @@ -1384,7 +1383,7 @@ public void onCall() { }; // BOOL GetStringTypeA(LCID Locale, DWORD dwInfoType, LPCSTR lpSrcStr, int cchSrc, LPWORD lpCharType) - static private Callback.Handler GetStringTypeA = new HandlerBase() { + static private final Callback.Handler GetStringTypeA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetStringTypeA"; } @@ -1394,7 +1393,7 @@ public void onCall() { }; // BOOL GetStringTypeW(DWORD dwInfoType, LPCWSTR lpSrcStr, int cchSrc, LPWORD lpCharType) - private Callback.Handler GetStringTypeW = new HandlerBase() { + private final Callback.Handler GetStringTypeW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetStringTypeW"; } @@ -1425,7 +1424,7 @@ public void onCall() { } break; case WinAPI.CT_CTYPE3: - Console.out(getName()+" flag CT_CTYPE3 not implemented yet"); + System.out.println(getName()+" flag CT_CTYPE3 not implemented yet"); notImplemented(); break; default: @@ -1452,7 +1451,7 @@ public void onCall() { */ // void WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo) - static private Callback.Handler GetSystemInfo = new HandlerBase() { + static private final Callback.Handler GetSystemInfo = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetSystemInfo"; } @@ -1473,7 +1472,7 @@ public void onCall() { }; // void WINAPI GetSystemTime(LPSYSTEMTIME lpSystemTime) - private Callback.Handler GetSystemTime = new HandlerBase() { + private final Callback.Handler GetSystemTime = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetSystemTime"; } @@ -1490,7 +1489,7 @@ public void onCall() { } */ // void WINAPI GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) - static private Callback.Handler GetSystemTimeAsFileTime = new HandlerBase() { + static private final Callback.Handler GetSystemTimeAsFileTime = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetSystemTimeAsFileTime"; } @@ -1502,7 +1501,7 @@ public void onCall() { }; // UINT WINAPI GetTempFileName(LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPTSTR lpTempFileName) - private Callback.Handler GetTempFileNameA = new ReturnHandlerBase() { + private final Callback.Handler GetTempFileNameA = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GetTempFileNameA"; } @@ -1531,7 +1530,7 @@ public int processReturn() { try { file.createNewFile(); } catch (Exception e) { - + throw new RuntimeException(e); } StringUtil.strcpy(lpTempFileName, name); return uUnique; @@ -1541,7 +1540,7 @@ public int processReturn() { }; // DWORD WINAPI GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer) - private Callback.Handler GetTempPathA = new ReturnHandlerBase() { + private final Callback.Handler GetTempPathA = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GetTempPathA"; } @@ -1554,7 +1553,7 @@ public int processReturn() { }; // DWORD WINAPI GetTickCount(void) - private Callback.Handler GetTickCount = new HandlerBase() { + private final Callback.Handler GetTickCount = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetTickCount"; } @@ -1564,7 +1563,7 @@ public void onCall() { }; // int GetTimeFormat(LCID Locale, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCTSTR lpFormat, LPTSTR lpTimeStr, int cchTime) - static private Callback.Handler GetTimeFormatA = new HandlerBase() { + static private final Callback.Handler GetTimeFormatA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetTimeFormatA"; } @@ -1572,7 +1571,7 @@ public void onCall() { notImplemented(); } }; - static private Callback.Handler GetTimeFormatW = new HandlerBase() { + static private final Callback.Handler GetTimeFormatW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetTimeFormatW"; } @@ -1582,7 +1581,7 @@ public void onCall() { }; // DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation); - static private Callback.Handler GetTimeZoneInformation = new HandlerBase() { + static private final Callback.Handler GetTimeZoneInformation = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetTimeZoneInformation"; } @@ -1601,7 +1600,7 @@ public void onCall() { }; // LCID GetUserDefaultLCID(void) - static private Callback.Handler GetUserDefaultLCID = new HandlerBase() { + static private final Callback.Handler GetUserDefaultLCID = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetUserDefaultLCID"; } @@ -1611,7 +1610,7 @@ public void onCall() { }; // DWORD WINAPI GetVersion(void) - static private Callback.Handler GetVersion = new HandlerBase() { + static private final Callback.Handler GetVersion = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetVersion"; } @@ -1646,7 +1645,7 @@ public void onCall() { */ // BOOL WINAPI GetVersionEx(LPOSVERSIONINFO lpVersionInfo) - static private Callback.Handler GetVersionExA = new HandlerBase() { + static private final Callback.Handler GetVersionExA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetVersionExA"; } @@ -1667,15 +1666,15 @@ public void onCall() { Memory.mem_writew(add, 0);add+=2; // wServicePackMinor Memory.mem_writew(add, 0);add+=2; // wSuiteMask Memory.mem_writeb(add, 1);add+=1; // wProductType - VER_NT_WORKSTATION - Memory.mem_writeb(add, 0);add+=1; // wReserved + Memory.mem_writeb(add, 0); } } else { - Console.out(getName()+" was passed an unexpected size of "+size); + System.out.println(getName()+" was passed an unexpected size of "+size); Win.exit(); } } }; - static private Callback.Handler GetVersionExW = new HandlerBase() { + static private final Callback.Handler GetVersionExW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetVersionExW"; } @@ -1685,7 +1684,7 @@ public void onCall() { }; // BOOL WINAPI GetVolumeInformation(LPCTSTR lpRootPathName, LPTSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPTSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize) - static private Callback.Handler GetVolumeInformationA = new HandlerBase() { + static private final Callback.Handler GetVolumeInformationA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetVolumeInformationA"; } @@ -1728,7 +1727,7 @@ public void onCall() { }; // UINT WINAPI GetWindowsDirectory(LPTSTR lpBuffer, UINT uSize) - static private Callback.Handler GetWindowsDirectoryA = new HandlerBase() { + static private final Callback.Handler GetWindowsDirectoryA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetWindowsDirectoryA"; } @@ -1739,7 +1738,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = WinAPI.WIN32_PATH.length()+1; } }; - static private Callback.Handler GetWindowsDirectoryW = new HandlerBase() { + static private final Callback.Handler GetWindowsDirectoryW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GetWindowsDirectoryW"; } @@ -1753,7 +1752,7 @@ public void onCall() { }; // HGLOBAL WINAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes) - static private Callback.Handler GlobalAlloc = new ReturnHandlerBase() { + static private final Callback.Handler GlobalAlloc = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalAlloc"; } @@ -1768,7 +1767,7 @@ public int processReturn() { }; // HGLOBAL WINAPI GlobalFree(HGLOBAL hMem) - static private Callback.Handler GlobalFree = new ReturnHandlerBase() { + static private final Callback.Handler GlobalFree = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalFree"; } @@ -1780,29 +1779,27 @@ public int processReturn() { }; // HGLOBAL WINAPI GlobalHandle(LPCVOID pMem) - static private Callback.Handler GlobalHandle = new ReturnHandlerBase() { + static private final Callback.Handler GlobalHandle = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalHandle"; } public int processReturn() { - int hMem = CPU.CPU_Pop32(); - return hMem; + return CPU.CPU_Pop32(); } }; // LPVOID WINAPI GlobalLock(HGLOBAL hMem) - static private Callback.Handler GlobalLock = new ReturnHandlerBase() { + static private final Callback.Handler GlobalLock = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalLock"; } public int processReturn() { - int hMem = CPU.CPU_Pop32(); - return hMem; + return CPU.CPU_Pop32(); } }; // HGLOBAL WINAPI GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes, UINT uFlags) - static private Callback.Handler GlobalReAlloc = new ReturnHandlerBase() { + static private final Callback.Handler GlobalReAlloc = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalReAlloc"; } @@ -1817,7 +1814,7 @@ public int processReturn() { }; // BOOL WINAPI GlobalUnlock(HGLOBAL hMem) - static private Callback.Handler GlobalUnlock = new ReturnHandlerBase() { + static private final Callback.Handler GlobalUnlock = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalUnlock"; } @@ -1828,7 +1825,7 @@ public int processReturn() { }; // void WINAPI GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer) - static private Callback.Handler GlobalMemoryStatus = new HandlerBase() { + static private final Callback.Handler GlobalMemoryStatus = new HandlerBase() { public java.lang.String getName() { return "Kernel32.GlobalMemoryStatus"; } @@ -1847,12 +1844,12 @@ public void onCall() { Memory.mem_writed(lpBuffer, physTotal); lpBuffer+=4; // dwTotalPageFile Memory.mem_writed(lpBuffer, physFree); lpBuffer+=4; // dwAvailPageFile Memory.mem_writed(lpBuffer, 2147483644); lpBuffer+=4; // dwTotalVirtual - Memory.mem_writed(lpBuffer, 2147483644-used.value*4096); lpBuffer+=4; // dwAvailVirtual + Memory.mem_writed(lpBuffer, 2147483644-used.value*4096); } }; // LPVOID WINAPI HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) - private Callback.Handler HeapAlloc = new HandlerBase() { + private final Callback.Handler HeapAlloc = new HandlerBase() { static final int HEAP_GENERATE_EXCEPTIONS = 0x00000004; static final int HEAP_NO_SERIALIZE = 0x00000001; static final int HEAP_ZERO_MEMORY = 0x00000008; @@ -1876,7 +1873,7 @@ public void onCall() { }; // HANDLE WINAPI HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) - private Callback.Handler HeapCreate = new HandlerBase() { + private final Callback.Handler HeapCreate = new HandlerBase() { public java.lang.String getName() { return "Kernel32.HeapCreate"; } @@ -1894,7 +1891,7 @@ public void onCall() { }; // BOOL WINAPI HeapDestroy(HANDLE hHeap) - static private Callback.Handler HeapDestroy = new HandlerBase() { + static private final Callback.Handler HeapDestroy = new HandlerBase() { public java.lang.String getName() { return "Kernel32.HeapDestroy"; } @@ -1904,7 +1901,7 @@ public void onCall() { }; // BOOL WINAPI HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) - private Callback.Handler HeapFree = new HandlerBase() { + private final Callback.Handler HeapFree = new HandlerBase() { public java.lang.String getName() { return "Kernel32.HeapFree"; } @@ -1917,7 +1914,7 @@ public void onCall() { }; //LPVOID WINAPI HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes) - static private Callback.Handler HeapReAlloc = new HandlerBase() { + static private final Callback.Handler HeapReAlloc = new HandlerBase() { public java.lang.String getName() { return "Kernel32.HeapReAlloc"; } @@ -1934,7 +1931,7 @@ public void onCall() { }; // SIZE_T WINAPI HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem) - static private Callback.Handler HeapSize = new HandlerBase() { + static private final Callback.Handler HeapSize = new HandlerBase() { public java.lang.String getName() { return "Kernel32.HeapSize"; } @@ -1947,7 +1944,7 @@ public void onCall() { }; // BOOL WINAPI HeapValidate(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem) - private Callback.Handler HeapValidate = new HandlerBase() { + private final Callback.Handler HeapValidate = new HandlerBase() { public java.lang.String getName() { return "Kernel32.HeapValidate"; } @@ -1960,7 +1957,7 @@ public void onCall() { }; // LONG WINAPI _hread( HFILE hFile, LPVOID buffer, LONG count) - private Callback.Handler _hread = new ReturnHandlerBase() { + private final Callback.Handler _hread = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32._hread"; } @@ -1978,7 +1975,7 @@ public int processReturn() { }; // void WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - private Callback.Handler InitializeCriticalSection = new HandlerBase() { + private final Callback.Handler InitializeCriticalSection = new HandlerBase() { public java.lang.String getName() { return "Kernel32.InitializeCriticalSection"; } @@ -1988,7 +1985,7 @@ public void onCall() { }; // BOOL WINAPI InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount) - private Callback.Handler InitializeCriticalSectionAndSpinCount = new HandlerBase() { + private final Callback.Handler InitializeCriticalSectionAndSpinCount = new HandlerBase() { public java.lang.String getName() { return "Kernel32.InitializeCriticalSectionAndSpinCount"; } @@ -2001,7 +1998,7 @@ public void onCall() { }; // LONG InterlockedDecrement(LONG volatile *Addend) - static private Callback.Handler InterlockedDecrement = new HandlerBase() { + static private final Callback.Handler InterlockedDecrement = new HandlerBase() { public java.lang.String getName() { return "Kernel32.InterlockedDecrement"; } @@ -2015,7 +2012,7 @@ public void onCall() { }; // LONG InterlockedExchange(LONG volatile *Target, LONG Value) - static private Callback.Handler InterlockedExchange = new ReturnHandlerBase() { + static private final Callback.Handler InterlockedExchange = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.InterlockedExchange"; } @@ -2029,7 +2026,7 @@ public int processReturn() { }; // LONG InterlockedIncrement(LONG volatile *Addend) - static private Callback.Handler InterlockedIncrement = new HandlerBase() { + static private final Callback.Handler InterlockedIncrement = new HandlerBase() { public java.lang.String getName() { return "Kernel32.InterlockedIncrement"; } @@ -2043,7 +2040,7 @@ public void onCall() { }; // BOOL WINAPI IsBadReadPtr(const VOID *lp, UINT_PTR ucb) - static private Callback.Handler IsBadReadPtr = new ReturnHandlerBase() { + static private final Callback.Handler IsBadReadPtr = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.IsBadReadPtr"; } @@ -2062,7 +2059,7 @@ public int processReturn() { return FALSE; } }; - static private Callback.Handler IsBadWritePtr = new ReturnHandlerBase() { + static private final Callback.Handler IsBadWritePtr = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32.IsBadWritePtr"; } @@ -2083,7 +2080,7 @@ public int processReturn() { }; // BOOL WINAPI IsDebuggerPresent(void) - static private Callback.Handler IsDebuggerPresent = new HandlerBase() { + static private final Callback.Handler IsDebuggerPresent = new HandlerBase() { public java.lang.String getName() { return "Kernel32.IsDebuggerPresent"; } @@ -2093,7 +2090,7 @@ public void onCall() { }; // BOOL IsValidCodePage(UINT CodePage) - static private Callback.Handler IsValidCodePage = new HandlerBase() { + static private final Callback.Handler IsValidCodePage = new HandlerBase() { public java.lang.String getName() { return "Kernel32.IsValidCodePage"; } @@ -2103,7 +2100,7 @@ public void onCall() { }; // BOOL IsValidLocale(LCID Locale, DWORD dwFlags) - static private Callback.Handler IsValidLocale = new HandlerBase() { + static private final Callback.Handler IsValidLocale = new HandlerBase() { public java.lang.String getName() { return "Kernel32.IsValidLocale"; } @@ -2115,7 +2112,7 @@ public void onCall() { // Direct port of Wine's function // // int LCMapString(LCID Locale, DWORD dwMapFlags, LPCTSTR lpSrcStr, int cchSrc, LPTSTR lpDestStr, int cchDest) - static private Callback.Handler LCMapStringA = new HandlerBase() { + static private final Callback.Handler LCMapStringA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.LCMapStringA"; } @@ -2123,7 +2120,7 @@ public void onCall() { notImplemented(); } }; - private Callback.Handler LCMapStringW = new HandlerBase() { + private final Callback.Handler LCMapStringW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.LCMapStringW"; } @@ -2168,14 +2165,10 @@ public void onCall() { if (srclen < 0) srclen = StringUtil.strlenW(src); - Console.out(getName()+" LCMAP_SORTKEY not implemented yet"); + System.out.println(getName()+" LCMAP_SORTKEY not implemented yet"); notImplemented(); // ret = wine_get_sortkey(flags, src, srclen, (char *)dst, dstlen); - if (ret == 0) { - Scheduler.getCurrentThread().setLastError(Error.ERROR_INSUFFICIENT_BUFFER); - } else { - ret++; - } + Scheduler.getCurrentThread().setLastError(Error.ERROR_INSUFFICIENT_BUFFER); CPU_Regs.reg_eax.dword = 0; return; } @@ -2265,7 +2258,7 @@ else if ((flags & Locale.LCMAP_LOWERCASE)!=0) }; // void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - private Callback.Handler LeaveCriticalSection = new HandlerBase() { + private final Callback.Handler LeaveCriticalSection = new HandlerBase() { public java.lang.String getName() { return "Kernel32.LeaveCriticalSection"; } @@ -2275,7 +2268,7 @@ public void onCall() { }; // HFILE WINAPI _lclose(HFILE hFile) - private Callback.Handler _lclose = new ReturnHandlerBase() { + private final Callback.Handler _lclose = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32._lclose"; } @@ -2292,7 +2285,7 @@ public int processReturn() { }; // LONG _llseek(HFile hFile, LONG lOffset, int nOrigin) - private Callback.Handler _llseek = new ReturnHandlerBase() { + private final Callback.Handler _llseek = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32._llseek"; } @@ -2311,7 +2304,7 @@ public int processReturn() { }; // UINT WINAPI _lread( HFILE handle, LPVOID buffer, UINT count ) - private Callback.Handler _lread = new ReturnHandlerBase() { + private final Callback.Handler _lread = new ReturnHandlerBase() { public java.lang.String getName() { return "Kernel32._lread"; } @@ -2329,7 +2322,7 @@ public int processReturn() { }; // HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName) - private Callback.Handler LoadLibraryA = new HandlerBase() { + private final Callback.Handler LoadLibraryA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.LoadLibraryA"; } @@ -2340,7 +2333,7 @@ public void onCall() { } }; - static private Callback.Handler LoadLibraryW = new HandlerBase() { + static private final Callback.Handler LoadLibraryW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.LoadLibraryW"; } @@ -2351,7 +2344,7 @@ public void onCall() { }; // LPTSTR WINAPI lstrcpy(LPTSTR lpString1, LPTSTR lpString2) - static private Callback.Handler lstrcpyA = new HandlerBase() { + static private final Callback.Handler lstrcpyA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.lstrcpyA"; } @@ -2364,7 +2357,7 @@ public void onCall() { }; // int WINAPI lstrlen(LPCTSTR lpString) - static private Callback.Handler lstrlenA = new HandlerBase() { + static private final Callback.Handler lstrlenA = new HandlerBase() { public java.lang.String getName() { return "Kernel32.lstrlenA"; } @@ -2373,7 +2366,7 @@ public void onCall() { CPU_Regs.reg_eax.dword = StringUtil.strlenA(lpString); } }; - static private Callback.Handler lstrlenW = new HandlerBase() { + static private final Callback.Handler lstrlenW = new HandlerBase() { public java.lang.String getName() { return "Kernel32.lstrlenW"; } @@ -2383,7 +2376,7 @@ public void onCall() { }; // LPVOID WINAPI MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap) - private Callback.Handler MapViewOfFile = new HandlerBase() { + private final Callback.Handler MapViewOfFile = new HandlerBase() { public java.lang.String getName() { return "Kernel32.MapViewOfFile"; } @@ -2404,7 +2397,7 @@ public void onCall() { }; // int MulDiv(int nNumber, int nNumerator, int nDenominator) - private Callback.Handler MulDiv = new HandlerBase() { + private final Callback.Handler MulDiv = new HandlerBase() { public java.lang.String getName() { return "Kernel32.MulDiv"; } @@ -2417,7 +2410,7 @@ public void onCall() { }; // int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar) - private Callback.Handler MultiByteToWideChar = new HandlerBase() { + private final Callback.Handler MultiByteToWideChar = new HandlerBase() { public java.lang.String getName() { return "Kernel32.MultiByteToWideChar"; } @@ -2444,23 +2437,22 @@ public void onCall() { Scheduler.getCurrentThread().setLastError(Error.ERROR_INVALID_PARAMETER); } else { CPU_Regs.reg_eax.dword = c.length+1; - for (int i=0;i objects = new Vector(); - public WinThread thread; + public final Vector objects = new Vector<>(); + public final WinThread thread; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WaitObject.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WaitObject.java index 88db1f0d..1f889a2d 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WaitObject.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WaitObject.java @@ -13,7 +13,7 @@ static public WaitObject create() { static public WaitObject getWait(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WaitObject)) + if (!(object instanceof WaitObject)) return null; return (WaitObject)object; } @@ -74,5 +74,5 @@ void get(WaitGroup group) { } public WinObject owner; - public Vector waiting = new Vector(); + public final Vector waiting = new Vector<>(); } \ No newline at end of file diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinEvent.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinEvent.java index 743107b1..6d2a018a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinEvent.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinEvent.java @@ -12,7 +12,7 @@ static public WinEvent create(String name, boolean manual, boolean set) { static public WinEvent get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinEvent)) + if (!(object instanceof WinEvent)) return null; return (WinEvent)object; } @@ -30,9 +30,8 @@ public int set() { return WinAPI.TRUE; } - public int pulse() { + public void pulse() { Win.panic("Event.pulse not implemented yet"); - return WinAPI.TRUE; } boolean isReady() { @@ -76,6 +75,6 @@ void get(WaitGroup group) { //} } - public boolean manual; + public final boolean manual; public boolean set; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinProcess.java b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinProcess.java index 5c0562ad..8341c8f2 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinProcess.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/kernel32/WinProcess.java @@ -2,7 +2,6 @@ import jdos.cpu.CPU_Regs; import jdos.hardware.Memory; -import jdos.win.Console; import jdos.win.Win; import jdos.win.builtin.WinAPI; import jdos.win.builtin.user32.*; @@ -38,17 +37,17 @@ static public WinProcess create(String path, String commandLine, Vector paths, S static public WinProcess get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinProcess)) + if (!(object instanceof WinProcess)) return null; return (WinProcess)object; } // BOOL WINAPI CloseHandle(HANDLE hObject) - static public int CloseHandle(int hObject) { + static public void CloseHandle(int hObject) { WinObject object = WinObject.getObject(hObject); if (object == null) { SetLastError(Error.ERROR_INVALID_HANDLE); - return FALSE; + return; } if (object instanceof WinProcess) { object.close(); @@ -67,13 +66,12 @@ static public int CloseHandle(int hObject) { } else { Win.panic("CloseHandle not implemented for type: "+object); } - return TRUE; } // BOOL WINAPI CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) static public int CreateProcessA(int lpApplicationName, int lpCommandLine, int lpProcessAttributes, int lpThreadAttributes, int bInheritHandles, int dwCreationFlags, int lpEnvironment, int lpCurrentDirectory, int lpStartupInfo, int lpProcessInformation) { - String name = null; - String cwd = null; + String name; + String cwd; String commandLine = ""; WinProcess currentProcess = WinSystem.getCurrentProcess(); @@ -98,7 +96,7 @@ static public int CreateProcessA(int lpApplicationName, int lpCommandLine, int l int pos = name.lastIndexOf("\\"); if (pos>=0) { if (!name.substring(0, pos+1).equalsIgnoreCase(cwd)) { - Console.out("***WARNING*** Creating process using full path where path is not current working directory. This may not work"); + System.out.println("***WARNING*** Creating process using full path where path is not current working directory. This may not work"); } name = name.substring(pos+1); } @@ -152,7 +150,6 @@ static public int WinExec(int lpCmdLine, int uCmdShow) { /* Give 30 seconds to the app to come up */ //if (wait_input_idle(readd(info), 30000 ) == WAIT_FAILED) // warn("WaitForInputIdle failed: Error "+WinThread.GetLastError()); - ret = 33; /* Close off the handles */ CloseHandle(readd(info+4)); CloseHandle(readd(info)); @@ -164,17 +161,17 @@ static public int WinExec(int lpCmdLine, int uCmdShow) { return 33; } - public static final long ADDRESS_HEAP_START = 0x0BA00000l; - public static final long ADDRESS_HEAP_END = 0x0FFFF000l; - public static final long ADDRESS_KHEAP_START = 0x90000000l; - public static final long ADDRESS_KHEAP_END = 0xA0000000l; - public static final long ADDRESS_STACK_START = 0x00100000l; - public static final long ADDRESS_STACK_END = 0x01000000l; - public static final long ADDRESS_CALLBACK_START = 0xA4000000l; - public static final long ADDRESS_CALLBACK_END = 0xA4010000l; - public static final long ADDRESS_EXTRA_START = 0xB0000000l; - public static final long ADDRESS_VIDEO_START = 0xE0000000l; - public static final long ADDRESS_VIDEO_BITMAP_START = 0xE8000000l; + public static final long ADDRESS_HEAP_START = 0x0BA00000L; + public static final long ADDRESS_HEAP_END = 0x0FFFF000L; + public static final long ADDRESS_KHEAP_START = 0x90000000L; + public static final long ADDRESS_KHEAP_END = 0xA0000000L; + public static final long ADDRESS_STACK_START = 0x00100000L; + public static final long ADDRESS_STACK_END = 0x01000000L; + public static final long ADDRESS_CALLBACK_START = 0xA4000000L; + public static final long ADDRESS_CALLBACK_END = 0xA4010000L; + public static final long ADDRESS_EXTRA_START = 0xB0000000L; + public static final long ADDRESS_VIDEO_START = 0xE0000000L; + public static final long ADDRESS_VIDEO_BITMAP_START = 0xE8000000L; private WinHeap winHeap; public KernelHeap heap; @@ -184,26 +181,26 @@ static public int WinExec(int lpCmdLine, int uCmdShow) { private int commandLineW = 0; private int envHandle = 0; private int envHandleW = 0; - public Hashtable env = new Hashtable(); + public final Hashtable env = new Hashtable(); public Loader loader; - public Vector threads = new Vector(); + public final Vector threads = new Vector(); private int[] temp = new int[10]; public int nextTempIndex = 0; public String currentWorkingDirectory; public Vector paths; - public boolean console = true; + public final boolean console = true; public NativeModule mainModule; - public int page_directory; - public KernelMemory kernelMemory; - public Heap addressSpace = new Heap(0x00100000l, 0xFFF00000l); - public Vector virtualMemory = new Vector(); - public Hashtable classNames = new Hashtable(); - public WinEvent readyForInput = WinEvent.create(null, true, false); + public final int page_directory; + public final KernelMemory kernelMemory; + public final Heap addressSpace = new Heap(0x00100000L, 0xFFF00000L); + public final Vector virtualMemory = new Vector<>(); + public final Hashtable classNames = new Hashtable<>(); + public final WinEvent readyForInput = WinEvent.create(null, true, false); public int tlsSize = 0; - public Vector freeTLS = new Vector(); + public final Vector freeTLS = new Vector<>(); public int mmTimerThreadEIP; - public Vector playSound = new Vector(); + public final Vector playSound = new Vector(); public WinProcess(int handle, KernelMemory memory, String workingDirectory) { super(handle); @@ -213,9 +210,8 @@ public WinProcess(int handle, KernelMemory memory, String workingDirectory) { } public VirtualMemory getVirtualMemory(long address) { - for (int i=0;i msgQueue = Collections.synchronizedList(new ArrayList()); // synchronized since the keyboard will post message from another thread - private List sendMsgQueue = new ArrayList(); - public Vector windows = new Vector(); - private Vector paintList = new Vector(); - private boolean quit = false; - private WinTimer timer = new WinTimer(0); + public final CpuState cpuState = new CpuState(); + private final KernelHeap stack; + private final int stackAddress; + private final int startAddress; + private final List msgQueue = Collections.synchronizedList(new ArrayList<>()); // synchronized since the keyboard will post message from another thread + private final List sendMsgQueue = new ArrayList(); + public final Vector windows = new Vector<>(); + private final Vector paintList = new Vector<>(); + private final boolean quit = false; + private final WinTimer timer = new WinTimer(0); public int priority = THREAD_PRIORITY_NORMAL; public BitSet keyState; public int msg_window; final private WinEvent msgReady = WinEvent.create(null, true, true); - private GuiThreadInfo guiInfo = new GuiThreadInfo(); + private final GuiThreadInfo guiInfo = new GuiThreadInfo(); public int waitTime; public int waitTimeStart; public int currentGetMessageTime = 0; public int currentGetMessagePos = 0; - public TIB tib; + public final TIB tib; public GuiThreadInfo GetGUIThreadInfo() { return guiInfo; } - private Callback.Handler startUp = new HandlerBase() { + private final Callback.Handler startUp = new HandlerBase() { public String getName() { return "WinThread.start"; } @@ -253,7 +253,7 @@ public int peekMessage(int msgAddress, int hWnd, int minMsg, int maxMsg, int wRe return getMessage(msgAddress, i, remove); } } - while (paintList.size() != 0) { + while (!paintList.isEmpty()) { int h; if (remove) h = paintList.remove(0); @@ -312,7 +312,7 @@ public int getNextMessage(int msgAddress, int hWnd, int minMsg, int maxMsg) { public WinMsg getLastMessage() { synchronized (msgQueue) { - if (msgQueue.size()!=0) + if (!msgQueue.isEmpty()) return msgQueue.get(msgQueue.size()-1); } return null; @@ -357,7 +357,7 @@ public WinProcess getProcess() { public int tlsAlloc() { WinProcess process = WinSystem.getCurrentProcess(); - if (process.freeTLS.size()>0) + if (!process.freeTLS.isEmpty()) return process.freeTLS.remove(0); return process.tlsSize++; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/ButtonWindow.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/ButtonWindow.java index 3b986199..4d4e0052 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/ButtonWindow.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/ButtonWindow.java @@ -25,7 +25,7 @@ static public void registerClass(WinProcess process) { process.classNames.put(winClass.className.toLowerCase(), winClass); } - static private Callback.Handler button_proc = new HandlerBase() { + static private final Callback.Handler button_proc = new HandlerBase() { public java.lang.String getName() { return "BUTTON.proc"; } @@ -74,8 +74,8 @@ static private void BUTTON_NOTIFY_PARENT(int hWnd, int code) { BST_UNCHECKED /* BS_OWNERDRAW */ }; - static private interface ButtonPaint { - public void paint(int hWnd, int hdc, int action); + private interface ButtonPaint { + void paint(int hWnd, int hdc, int action); } static private int checkBoxWidth = 0, checkBoxHeight = 0; @@ -157,7 +157,6 @@ static private int ButtonWndProc_common(int hWnd, int uMsg, int wParam, int lPar /* XP turns a BS_USERBUTTON into BS_PUSHBUTTON */ if (btn_type == BS_USERBUTTON) { - style = (style & ~BS_TYPEMASK) | BS_PUSHBUTTON; window.dwStyle &= ~BS_TYPEMASK; window.dwStyle |= BS_PUSHBUTTON; } @@ -166,15 +165,14 @@ static private int ButtonWndProc_common(int hWnd, int uMsg, int wParam, int lPar case WM_ERASEBKGND: if (btn_type == BS_OWNERDRAW) { - int hdc = wParam; int parent = WinWindow.GetParent(hWnd); if (parent == 0) parent = hWnd; - int hBrush = Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); + int hBrush = Message.SendMessageA(parent, WM_CTLCOLORBTN, wParam, hWnd); if (hBrush == 0) /* did the app forget to call defwindowproc ? */ - hBrush = DefWnd.DefWindowProcA(parent, WM_CTLCOLORBTN, hdc, hWnd); + hBrush = DefWnd.DefWindowProcA(parent, WM_CTLCOLORBTN, wParam, hWnd); int rc = getTempBuffer(WinRect.SIZE); WinPos.GetClientRect(hWnd, rc); - WinDC.FillRect(hdc, rc, hBrush); + WinDC.FillRect(wParam, rc, hBrush); } return 1; @@ -338,7 +336,6 @@ static private int ButtonWndProc_common(int hWnd, int uMsg, int wParam, int lPar break; case BM_SETSTYLE: - if ((wParam & BS_TYPEMASK) >= MAX_BTN_TYPE) break; btn_type = wParam & BS_TYPEMASK; window.dwStyle = (style & ~BS_TYPEMASK) | btn_type; /* Only redraw if lParam flag is set.*/ @@ -487,7 +484,7 @@ static private int BUTTON_CalcLabelRect(int hwnd, int hdc, WinRect rc) { switch (style & (BS_ICON | BS_BITMAP)) { case BS_TEXT: String text = get_button_text(hwnd); - if (text == null || text.length() == 0) { + if (text == null || text.isEmpty()) { rc.right = rc.left; rc.bottom = rc.top; return -1; @@ -576,10 +573,9 @@ static private int BUTTON_CalcLabelRect(int hwnd, int hdc, WinRect rc) { *

* Callback function used by DrawStateW function. */ - static public int BUTTON_DrawTextCallback(int hdc, int lp, int wp, int cx, int cy) { + static public void BUTTON_DrawTextCallback(int hdc, int lp, int wp, int cx, int cy) { WinRect rc = new WinRect(0, 0, cx, cy); WinText.DrawTextA(hdc, lp, -1, rc.allocTemp(), wp); - return TRUE; } @@ -613,7 +609,7 @@ static void BUTTON_DrawLabel(int hwnd, int hdc, int dtFlags, WinRect rc) { /* DST_COMPLEX -- is 0 */ lpOutputProc = -1; // special value, will call BUTTON_DrawTextCallback String text = get_button_text(hwnd); - if (text == null || text.length() == 0) + if (text == null || text.isEmpty()) return; lp = StringUtil.allocateA(text); wp = dtFlags; @@ -640,79 +636,77 @@ static void BUTTON_DrawLabel(int hwnd, int hdc, int dtFlags, WinRect rc) { * ******************************************************************* * Push Button Functions */ - static private ButtonPaint PB_Paint = new ButtonPaint() { - public void paint(int hWnd, int hdc, int action) { - WinRect rc = new WinRect(); - int state = get_button_state(hWnd); - int style = WinWindow.GetWindowLongA(hWnd, GWL_STYLE); - boolean pushedState = (state & BST_PUSHED) != 0; - - WinPos.WIN_GetClientRect(hWnd, rc); - - /* Send WM_CTLCOLOR to allow changing the font (the colors are fixed) */ - int hFont = get_button_font(hWnd); - if (hFont != 0) - WinDC.SelectObject(hdc, hFont); - int parent = WinWindow.GetParent(hWnd); - if (parent == 0) parent = hWnd; - Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); - - int hrgn = UiTools.set_control_clipping(hdc, rc); - - int hOldPen = WinDC.SelectObject(hdc, SysParams.GetSysColorPen(COLOR_WINDOWFRAME)); - int hOldBrush = WinDC.SelectObject(hdc, SysParams.GetSysColorBrush(COLOR_BTNFACE)); - int oldBkMode = WinDC.SetBkMode(hdc, TRANSPARENT); - - if (get_button_type(style) == BS_DEFPUSHBUTTON) { - if (action != ODA_FOCUS) - Painting.Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom); - rc.inflate(-1, -1); - } - try { - /* completely skip the drawing if only focus has changed */ - if (action != ODA_FOCUS) { - int uState = DFCS_BUTTONPUSH; - - if ((style & BS_FLAT) != 0) - uState |= DFCS_MONO; - else if (pushedState) { - if (get_button_type(style) == BS_DEFPUSHBUTTON) - uState |= DFCS_FLAT; - else - uState |= DFCS_PUSHED; - } - - if ((state & (BST_CHECKED | BST_INDETERMINATE)) != 0) - uState |= DFCS_CHECKED; + static private final ButtonPaint PB_Paint = (hWnd, hdc, action) -> { + WinRect rc = new WinRect(); + int state = get_button_state(hWnd); + int style = WinWindow.GetWindowLongA(hWnd, GWL_STYLE); + boolean pushedState = (state & BST_PUSHED) != 0; - UiTools.DrawFrameControl(hdc, rc.allocTemp(), DFC_BUTTON, uState); + WinPos.WIN_GetClientRect(hWnd, rc); - /* draw button label */ - WinRect r = new WinRect(rc); - int dtFlags = BUTTON_CalcLabelRect(hWnd, hdc, r); + /* Send WM_CTLCOLOR to allow changing the font (the colors are fixed) */ + int hFont = get_button_font(hWnd); + if (hFont != 0) + WinDC.SelectObject(hdc, hFont); + int parent = WinWindow.GetParent(hWnd); + if (parent == 0) parent = hWnd; + Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); - if (dtFlags == -1) - return; + int hrgn = UiTools.set_control_clipping(hdc, rc); - if (pushedState) - r.offset(1, 1); + int hOldPen = WinDC.SelectObject(hdc, SysParams.GetSysColorPen(COLOR_WINDOWFRAME)); + int hOldBrush = WinDC.SelectObject(hdc, SysParams.GetSysColorBrush(COLOR_BTNFACE)); + int oldBkMode = WinDC.SetBkMode(hdc, TRANSPARENT); - int oldTxtColor = WinDC.SetTextColor(hdc, SysParams.GetSysColor(COLOR_BTNTEXT)); - BUTTON_DrawLabel(hWnd, hdc, dtFlags, r); - WinDC.SetTextColor(hdc, oldTxtColor); - } - // draw_focus: - if (action == ODA_FOCUS || (state & BST_FOCUS) != 0) { - rc.inflate(-2, -2); - UiTools.DrawFocusRect(hdc, rc.allocTemp()); + if (get_button_type(style) == BS_DEFPUSHBUTTON) { + if (action != ODA_FOCUS) + Painting.Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom); + rc.inflate(-1, -1); + } + try { + /* completely skip the drawing if only focus has changed */ + if (action != ODA_FOCUS) { + int uState = DFCS_BUTTONPUSH; + + if ((style & BS_FLAT) != 0) + uState |= DFCS_MONO; + else if (pushedState) { + if (get_button_type(style) == BS_DEFPUSHBUTTON) + uState |= DFCS_FLAT; + else + uState |= DFCS_PUSHED; } - } finally { - WinDC.SelectObject(hdc, hOldPen); - WinDC.SelectObject(hdc, hOldBrush); - WinDC.SetBkMode(hdc, oldBkMode); - WinDC.SelectClipRgn(hdc, hrgn); - if (hrgn != 0) GdiObj.DeleteObject(hrgn); + + if ((state & (BST_CHECKED | BST_INDETERMINATE)) != 0) + uState |= DFCS_CHECKED; + + UiTools.DrawFrameControl(hdc, rc.allocTemp(), DFC_BUTTON, uState); + + /* draw button label */ + WinRect r = new WinRect(rc); + int dtFlags = BUTTON_CalcLabelRect(hWnd, hdc, r); + + if (dtFlags == -1) + return; + + if (pushedState) + r.offset(1, 1); + + int oldTxtColor = WinDC.SetTextColor(hdc, SysParams.GetSysColor(COLOR_BTNTEXT)); + BUTTON_DrawLabel(hWnd, hdc, dtFlags, r); + WinDC.SetTextColor(hdc, oldTxtColor); } + // draw_focus: + if (action == ODA_FOCUS || (state & BST_FOCUS) != 0) { + rc.inflate(-2, -2); + UiTools.DrawFocusRect(hdc, rc.allocTemp()); + } + } finally { + WinDC.SelectObject(hdc, hOldPen); + WinDC.SelectObject(hdc, hOldBrush); + WinDC.SetBkMode(hdc, oldBkMode); + WinDC.SelectClipRgn(hdc, hrgn); + if (hrgn != 0) GdiObj.DeleteObject(hrgn); } }; @@ -720,126 +714,124 @@ else if (pushedState) { * ******************************************************************* * Check Box & Radio Button Functions */ - static private ButtonPaint CB_Paint = new ButtonPaint() { - public void paint(int hWnd, int hdc, int action) { - int state = get_button_state(hWnd); - int style = WinWindow.GetWindowLongA(hWnd, GWL_STYLE); - - if ((style & BS_PUSHLIKE) != 0) { - PB_Paint.paint(hWnd, hdc, action); - return; - } - - WinRect client = new WinRect(); - WinPos.WIN_GetClientRect(hWnd, client); - WinRect rbox = new WinRect(client); - WinRect rtext = new WinRect(client); - int hFont = get_button_font(hWnd); - - if (hFont != 0) - WinDC.SelectObject(hdc, hFont); - - int parent = WinWindow.GetParent(hWnd); - if (parent == 0) - parent = hWnd; - int hBrush = Message.SendMessageA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); - if (hBrush == 0) /* did the app forget to call defwindowproc ? */ - hBrush = DefWnd.DefWindowProcA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); - int hrgn = UiTools.set_control_clipping(hdc, client); - - if ((style & BS_LEFTTEXT) != 0) { - /* magic +4 is what CTL3D expects */ - rtext.right -= checkBoxWidth + 4; - rbox.left = rbox.right - checkBoxWidth; - } else { - rtext.left += checkBoxWidth + 4; - rbox.right = checkBoxWidth; - } + static private final ButtonPaint CB_Paint = (hWnd, hdc, action) -> { + int state = get_button_state(hWnd); + int style = WinWindow.GetWindowLongA(hWnd, GWL_STYLE); - /* Since WM_ERASEBKGND does nothing, first prepare background */ - if (action == ODA_SELECT) - WinDC.FillRect(hdc, rbox.allocTemp(), hBrush); - if (action == ODA_DRAWENTIRE) - WinDC.FillRect(hdc, client.allocTemp(), hBrush); + if ((style & BS_PUSHLIKE) != 0) { + PB_Paint.paint(hWnd, hdc, action); + return; + } - /* Draw label */ - client.copy(rtext); - int dtFlags = BUTTON_CalcLabelRect(hWnd, hdc, rtext); + WinRect client = new WinRect(); + WinPos.WIN_GetClientRect(hWnd, client); + WinRect rbox = new WinRect(client); + WinRect rtext = new WinRect(client); + int hFont = get_button_font(hWnd); + + if (hFont != 0) + WinDC.SelectObject(hdc, hFont); + + int parent = WinWindow.GetParent(hWnd); + if (parent == 0) + parent = hWnd; + int hBrush = Message.SendMessageA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); + if (hBrush == 0) /* did the app forget to call defwindowproc ? */ + hBrush = DefWnd.DefWindowProcA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); + int hrgn = UiTools.set_control_clipping(hdc, client); + + if ((style & BS_LEFTTEXT) != 0) { + /* magic +4 is what CTL3D expects */ + rtext.right -= checkBoxWidth + 4; + rbox.left = rbox.right - checkBoxWidth; + } else { + rtext.left += checkBoxWidth + 4; + rbox.right = checkBoxWidth; + } - /* Only adjust rbox when rtext is valid */ - if (dtFlags != -1) { - rbox.top = rtext.top; - rbox.bottom = rtext.bottom; - } + /* Since WM_ERASEBKGND does nothing, first prepare background */ + if (action == ODA_SELECT) + WinDC.FillRect(hdc, rbox.allocTemp(), hBrush); + if (action == ODA_DRAWENTIRE) + WinDC.FillRect(hdc, client.allocTemp(), hBrush); - /* Draw the check-box bitmap */ - if (action == ODA_DRAWENTIRE || action == ODA_SELECT) { - int flags; + /* Draw label */ + client.copy(rtext); + int dtFlags = BUTTON_CalcLabelRect(hWnd, hdc, rtext); - if ((get_button_type(style) == BS_RADIOBUTTON) || (get_button_type(style) == BS_AUTORADIOBUTTON)) - flags = DFCS_BUTTONRADIO; - else if ((state & BST_INDETERMINATE) != 0) - flags = DFCS_BUTTON3STATE; - else - flags = DFCS_BUTTONCHECK; + /* Only adjust rbox when rtext is valid */ + if (dtFlags != -1) { + rbox.top = rtext.top; + rbox.bottom = rtext.bottom; + } - if ((state & (BST_CHECKED | BST_INDETERMINATE)) != 0) - flags |= DFCS_CHECKED; - if ((state & BST_PUSHED) != 0) - flags |= DFCS_PUSHED; - - if ((style & WS_DISABLED) != 0) - flags |= DFCS_INACTIVE; - - /* rbox must have the correct height */ - int delta = rbox.bottom - rbox.top - checkBoxHeight; - - if ((style & BS_TOP) != 0) { - if (delta > 0) { - rbox.bottom = rbox.top + checkBoxHeight; - } else { - rbox.top -= -delta / 2 + 1; - rbox.bottom = rbox.top + checkBoxHeight; - } - } else if ((style & BS_BOTTOM) != 0) { - if (delta > 0) { - rbox.top = rbox.bottom - checkBoxHeight; - } else { - rbox.bottom += -delta / 2 + 1; - rbox.top = rbox.bottom - checkBoxHeight; - } - } else { /* Default */ - if (delta > 0) { - int ofs = (delta / 2); - rbox.bottom -= ofs + 1; - rbox.top = rbox.bottom - checkBoxHeight; - } else if (delta < 0) { - int ofs = (-delta / 2); - rbox.top -= ofs + 1; - rbox.bottom = rbox.top + checkBoxHeight; - } + /* Draw the check-box bitmap */ + if (action == ODA_DRAWENTIRE || action == ODA_SELECT) { + int flags; + + if ((get_button_type(style) == BS_RADIOBUTTON) || (get_button_type(style) == BS_AUTORADIOBUTTON)) + flags = DFCS_BUTTONRADIO; + else if ((state & BST_INDETERMINATE) != 0) + flags = DFCS_BUTTON3STATE; + else + flags = DFCS_BUTTONCHECK; + + if ((state & (BST_CHECKED | BST_INDETERMINATE)) != 0) + flags |= DFCS_CHECKED; + if ((state & BST_PUSHED) != 0) + flags |= DFCS_PUSHED; + + if ((style & WS_DISABLED) != 0) + flags |= DFCS_INACTIVE; + + /* rbox must have the correct height */ + int delta = rbox.bottom - rbox.top - checkBoxHeight; + + if ((style & BS_TOP) != 0) { + if (delta > 0) { + rbox.bottom = rbox.top + checkBoxHeight; + } else { + rbox.top -= -delta / 2 + 1; + rbox.bottom = rbox.top + checkBoxHeight; + } + } else if ((style & BS_BOTTOM) != 0) { + if (delta > 0) { + rbox.top = rbox.bottom - checkBoxHeight; + } else { + rbox.bottom += -delta / 2 + 1; + rbox.top = rbox.bottom - checkBoxHeight; + } + } else { /* Default */ + if (delta > 0) { + int ofs = (delta / 2); + rbox.bottom -= ofs + 1; + rbox.top = rbox.bottom - checkBoxHeight; + } else if (delta < 0) { + int ofs = (-delta / 2); + rbox.top -= ofs + 1; + rbox.bottom = rbox.top + checkBoxHeight; } - - UiTools.DrawFrameControl(hdc, rbox.allocTemp(), DFC_BUTTON, flags); } - if (dtFlags == -1L) /* Noting to draw */ - return; + UiTools.DrawFrameControl(hdc, rbox.allocTemp(), DFC_BUTTON, flags); + } - if (action == ODA_DRAWENTIRE) - BUTTON_DrawLabel(hWnd, hdc, dtFlags, rtext); + if (dtFlags == -1L) /* Noting to draw */ + return; - /* ... and focus */ - if (action == ODA_FOCUS || (state & BST_FOCUS) != 0) { - rtext.left--; - rtext.right++; - rtext.intersect(rtext, client); - UiTools.DrawFocusRect(hdc, rtext.allocTemp()); - } - WinDC.SelectClipRgn(hdc, hrgn); - if (hrgn != 0) - GdiObj.DeleteObject(hrgn); + if (action == ODA_DRAWENTIRE) + BUTTON_DrawLabel(hWnd, hdc, dtFlags, rtext); + + /* ... and focus */ + if (action == ODA_FOCUS || (state & BST_FOCUS) != 0) { + rtext.left--; + rtext.right++; + rtext.intersect(rtext, client); + UiTools.DrawFocusRect(hdc, rtext.allocTemp()); } + WinDC.SelectClipRgn(hdc, hrgn); + if (hrgn != 0) + GdiObj.DeleteObject(hrgn); }; /** @@ -867,56 +859,54 @@ static private void BUTTON_CheckAutoRadioButton(int hwnd) { * Group Box Functions */ - static private ButtonPaint GB_Paint = new ButtonPaint() { - public void paint(int hWnd, int hdc, int action) { - int style = WinWindow.GetWindowLongA(hWnd, GWL_STYLE); - - int hFont = get_button_font(hWnd); - if (hFont != 0) - WinDC.SelectObject(hdc, hFont); - /* GroupBox acts like static control, so it sends CTLCOLORSTATIC */ - int parent = WinWindow.GetParent(hWnd); - if (parent == 0) - parent = hWnd; - int hbr = Message.SendMessageA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); - if (hbr == 0) /* did the app forget to call defwindowproc ? */ - hbr = DefWnd.DefWindowProcA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); - WinRect rc = new WinRect(); - WinPos.WIN_GetClientRect(hWnd, rc); - WinRect rcFrame = new WinRect(rc); - int hrgn = UiTools.set_control_clipping(hdc, rc); - - int pTm = getTempBuffer(TEXTMETRIC.SIZE); - WinFont.GetTextMetricsA(hdc, pTm); - TEXTMETRIC tm = new TEXTMETRIC(pTm); - - rcFrame.top += (tm.tmHeight / 2) - 1; - UiTools.DrawEdge(hdc, rcFrame.allocTemp(), EDGE_ETCHED, BF_RECT | ((style & BS_FLAT) != 0 ? BF_FLAT : 0)); - - rc.inflate(-7, 1); - int dtFlags = BUTTON_CalcLabelRect(hWnd, hdc, rc); - - if (dtFlags != -1) { - /* Because buttons have CS_PARENTDC class style, there is a chance - * that label will be drawn out of client rect. - * But Windows doesn't clip label's rect, so do I. - */ - - /* There is 1-pixel margin at the left, right, and bottom */ - rc.left--; - rc.right++; - rc.bottom++; - WinDC.FillRect(hdc, rc.allocTemp(), hbr); - rc.left++; - rc.right--; - rc.bottom--; - - BUTTON_DrawLabel(hWnd, hdc, dtFlags, rc); - } - WinDC.SelectClipRgn(hdc, hrgn); - if (hrgn != 0) - GdiObj.DeleteObject(hrgn); + static private final ButtonPaint GB_Paint = (hWnd, hdc, action) -> { + int style = WinWindow.GetWindowLongA(hWnd, GWL_STYLE); + + int hFont = get_button_font(hWnd); + if (hFont != 0) + WinDC.SelectObject(hdc, hFont); + /* GroupBox acts like static control, so it sends CTLCOLORSTATIC */ + int parent = WinWindow.GetParent(hWnd); + if (parent == 0) + parent = hWnd; + int hbr = Message.SendMessageA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); + if (hbr == 0) /* did the app forget to call defwindowproc ? */ + hbr = DefWnd.DefWindowProcA(parent, WM_CTLCOLORSTATIC, hdc, hWnd); + WinRect rc = new WinRect(); + WinPos.WIN_GetClientRect(hWnd, rc); + WinRect rcFrame = new WinRect(rc); + int hrgn = UiTools.set_control_clipping(hdc, rc); + + int pTm = getTempBuffer(TEXTMETRIC.SIZE); + WinFont.GetTextMetricsA(hdc, pTm); + TEXTMETRIC tm = new TEXTMETRIC(pTm); + + rcFrame.top += (tm.tmHeight / 2) - 1; + UiTools.DrawEdge(hdc, rcFrame.allocTemp(), EDGE_ETCHED, BF_RECT | ((style & BS_FLAT) != 0 ? BF_FLAT : 0)); + + rc.inflate(-7, 1); + int dtFlags = BUTTON_CalcLabelRect(hWnd, hdc, rc); + + if (dtFlags != -1) { + /* Because buttons have CS_PARENTDC class style, there is a chance + * that label will be drawn out of client rect. + * But Windows doesn't clip label's rect, so do I. + */ + + /* There is 1-pixel margin at the left, right, and bottom */ + rc.left--; + rc.right++; + rc.bottom++; + WinDC.FillRect(hdc, rc.allocTemp(), hbr); + rc.left++; + rc.right--; + rc.bottom--; + + BUTTON_DrawLabel(hWnd, hdc, dtFlags, rc); } + WinDC.SelectClipRgn(hdc, hrgn); + if (hrgn != 0) + GdiObj.DeleteObject(hrgn); }; @@ -925,41 +915,39 @@ public void paint(int hWnd, int hdc, int action) { * User Button Functions */ - static private ButtonPaint UB_Paint = new ButtonPaint() { - public void paint(int hWnd, int hdc, int action) { - int state = get_button_state(hWnd); + static private final ButtonPaint UB_Paint = (hWnd, hdc, action) -> { + int state = get_button_state(hWnd); - WinRect rc = new WinRect(); - WinPos.WIN_GetClientRect(hWnd, rc); + WinRect rc = new WinRect(); + WinPos.WIN_GetClientRect(hWnd, rc); - int hFont = get_button_font(hWnd); - if (hFont != 0) - WinDC.SelectObject(hdc, hFont); + int hFont = get_button_font(hWnd); + if (hFont != 0) + WinDC.SelectObject(hdc, hFont); - int parent = WinWindow.GetParent(hWnd); - if (parent == 0) - parent = hWnd; - int hBrush = Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); - if (hBrush == 0) /* did the app forget to call defwindowproc ? */ - hBrush = DefWnd.DefWindowProcA(parent, WM_CTLCOLORBTN, hdc, hWnd); + int parent = WinWindow.GetParent(hWnd); + if (parent == 0) + parent = hWnd; + int hBrush = Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); + if (hBrush == 0) /* did the app forget to call defwindowproc ? */ + hBrush = DefWnd.DefWindowProcA(parent, WM_CTLCOLORBTN, hdc, hWnd); - WinDC.FillRect(hdc, rc.allocTemp(), hBrush); - if (action == ODA_FOCUS || (state & BST_FOCUS) != 0) - UiTools.DrawFocusRect(hdc, rc.allocTemp()); + WinDC.FillRect(hdc, rc.allocTemp(), hBrush); + if (action == ODA_FOCUS || (state & BST_FOCUS) != 0) + UiTools.DrawFocusRect(hdc, rc.allocTemp()); - switch (action) { - case ODA_FOCUS: - BUTTON_NOTIFY_PARENT(hWnd, (state & BST_FOCUS) != 0 ? BN_SETFOCUS : BN_KILLFOCUS); - break; + switch (action) { + case ODA_FOCUS: + BUTTON_NOTIFY_PARENT(hWnd, (state & BST_FOCUS) != 0 ? BN_SETFOCUS : BN_KILLFOCUS); + break; - case ODA_SELECT: - BUTTON_NOTIFY_PARENT(hWnd, (state & BST_PUSHED) != 0 ? BN_HILITE : BN_UNHILITE); - break; + case ODA_SELECT: + BUTTON_NOTIFY_PARENT(hWnd, (state & BST_PUSHED) != 0 ? BN_HILITE : BN_UNHILITE); + break; - default: - BUTTON_NOTIFY_PARENT(hWnd, BN_PAINT); - break; - } + default: + BUTTON_NOTIFY_PARENT(hWnd, BN_PAINT); + break; } }; @@ -968,40 +956,38 @@ public void paint(int hWnd, int hdc, int action) { * ******************************************************************* * Ownerdrawn Button Functions */ - static private ButtonPaint OB_Paint = new ButtonPaint() { - public void paint(int hWnd, int hdc, int action) { - int state = get_button_state(hWnd); - DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT(); - int id = WinWindow.GetWindowLongA(hWnd, GWLP_ID); - - dis.CtlType = ODT_BUTTON; - dis.CtlID = id; - dis.itemID = 0; - dis.itemAction = action; - dis.itemState = ((state & BST_FOCUS) != 0 ? ODS_FOCUS : 0) | ((state & BST_PUSHED) != 0 ? ODS_SELECTED : 0) | (WinWindow.IsWindowEnabled(hWnd) != 0 ? 0 : ODS_DISABLED); - dis.hwndItem = hWnd; - dis.hDC = hdc; - dis.itemData = 0; - WinPos.WIN_GetClientRect(hWnd, dis.rcItem); - - int hFont = get_button_font(hWnd); - int hPrevFont = 0; - if (hFont != 0) - hPrevFont = WinDC.SelectObject(hdc, hFont); - int parent = WinWindow.GetParent(hWnd); - if (parent == 0) - parent = hWnd; - Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); - - int hrgn = UiTools.set_control_clipping(hdc, dis.rcItem); - - Message.SendMessageA(WinWindow.GetParent(hWnd), WM_DRAWITEM, id, dis.allocTemp()); - if (hPrevFont != 0) - WinDC.SelectObject(hdc, hPrevFont); - WinDC.SelectClipRgn(hdc, hrgn); - if (hrgn != 0) - GdiObj.DeleteObject(hrgn); - } + static private final ButtonPaint OB_Paint = (hWnd, hdc, action) -> { + int state = get_button_state(hWnd); + DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT(); + int id = WinWindow.GetWindowLongA(hWnd, GWLP_ID); + + dis.CtlType = ODT_BUTTON; + dis.CtlID = id; + dis.itemID = 0; + dis.itemAction = action; + dis.itemState = ((state & BST_FOCUS) != 0 ? ODS_FOCUS : 0) | ((state & BST_PUSHED) != 0 ? ODS_SELECTED : 0) | (WinWindow.IsWindowEnabled(hWnd) != 0 ? 0 : ODS_DISABLED); + dis.hwndItem = hWnd; + dis.hDC = hdc; + dis.itemData = 0; + WinPos.WIN_GetClientRect(hWnd, dis.rcItem); + + int hFont = get_button_font(hWnd); + int hPrevFont = 0; + if (hFont != 0) + hPrevFont = WinDC.SelectObject(hdc, hFont); + int parent = WinWindow.GetParent(hWnd); + if (parent == 0) + parent = hWnd; + Message.SendMessageA(parent, WM_CTLCOLORBTN, hdc, hWnd); + + int hrgn = UiTools.set_control_clipping(hdc, dis.rcItem); + + Message.SendMessageA(WinWindow.GetParent(hWnd), WM_DRAWITEM, id, dis.allocTemp()); + if (hPrevFont != 0) + WinDC.SelectObject(hdc, hPrevFont); + WinDC.SelectClipRgn(hdc, hrgn); + if (hrgn != 0) + GdiObj.DeleteObject(hrgn); }; static private final ButtonPaint[] btnPaintFunc = new ButtonPaint[] diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/CREATESTRUCT.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/CREATESTRUCT.java index bb12e39d..25a55ae3 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/CREATESTRUCT.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/CREATESTRUCT.java @@ -17,7 +17,7 @@ static public void write(int address, int lpCreateParams, int hInstance, int hMe writed(address, style); address+=4; writed(address, lpszName); address+=4; writed(address, lpszClass); address+=4; - writed(address, dwExStyle); address+=4; + writed(address, dwExStyle); } public CREATESTRUCT(int address) { @@ -32,18 +32,18 @@ public CREATESTRUCT(int address) { style = readd(address); address+=4; lpszName = readd(address); address+=4; lpszClass = readd(address); address+=4; - dwExStyle = readd(address); address+=4; + dwExStyle = readd(address); } - public int lpCreateParams; - public int hInstance; - public int hMenu; - public int hwndParent; - public int cy; - public int cx; - public int y; - public int x; - public int style; - public int lpszName; - public int lpszClass; - public int dwExStyle; + public final int lpCreateParams; + public final int hInstance; + public final int hMenu; + public final int hwndParent; + public final int cy; + public final int cx; + public final int y; + public final int x; + public final int style; + public final int lpszName; + public final int lpszClass; + public final int dwExStyle; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Caret.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Caret.java index 8048736e..2f0ad85a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Caret.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Caret.java @@ -4,17 +4,14 @@ public class Caret extends WinAPI { // BOOL WINAPI DestroyCaret(void); - static public int DestroyCaret() { - return TRUE; + static public void DestroyCaret() { } // BOOL WINAPI HideCaret( HWND hwnd ) - static public int HideCaret(int hwnd) { - return TRUE; + static public void HideCaret(int hwnd) { } // BOOL WINAPI ShowCaret(HWND hWnd) - static public int ShowCaret(int hWnd) { - return TRUE; + static public void ShowCaret(int hWnd) { } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Clipboard.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Clipboard.java index f5a1a3a5..b0af3cde 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Clipboard.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Clipboard.java @@ -6,7 +6,6 @@ static public int GetClipboardOwner() { return 0; } - static public boolean CLIPBOARD_ReleaseOwner() { - return true; + static public void CLIPBOARD_ReleaseOwner() { } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWITEMSTRUCT.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWITEMSTRUCT.java index 664d71cd..65c03fdc 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWITEMSTRUCT.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWITEMSTRUCT.java @@ -19,7 +19,7 @@ public void write(int address) { writed(address, hwndItem);address+=4; writed(address, hDC);address+=4; rcItem.write(address);address+=WinRect.SIZE; - writed(address, itemData);address+=4; + writed(address, itemData); } public int allocTemp() { int result = getTempBuffer(SIZE); @@ -34,6 +34,6 @@ public int allocTemp() { public int itemState; /* Item state (ODS_* flags from "winuser.h") */ public int hwndItem; /* Control window */ public int hDC; /* Device context to draw to */ - public WinRect rcItem; /* Position of the control in hDC */ + public final WinRect rcItem; /* Position of the control in hDC */ public int itemData; /* Extra data added by the application, if any */ } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWTEXTPARAMS.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWTEXTPARAMS.java index 06e94056..8f049f8c 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWTEXTPARAMS.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DRAWTEXTPARAMS.java @@ -14,7 +14,7 @@ public DRAWTEXTPARAMS(int address) { iTabLength = readd(address);address+=4; iLeftMargin = readd(address);address+=4; iRightMargin = readd(address);address+=4; - uiLengthDrawn = readd(address);address+=4; + uiLengthDrawn = readd(address); } public void write(int address) { @@ -22,7 +22,7 @@ public void write(int address) { writed(address, iTabLength); address+=4; writed(address, iLeftMargin); address+=4; writed(address, iRightMargin); address+=4; - writed(address, uiLengthDrawn); address+=4; + writed(address, uiLengthDrawn); } public int allocTemp() { @@ -31,7 +31,7 @@ public int allocTemp() { return p; } - public int cbSize; + public final int cbSize; public int iTabLength; public int iLeftMargin; public int iRightMargin; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefDlg.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefDlg.java index 3b13b1b3..89c98c9a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefDlg.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefDlg.java @@ -176,7 +176,7 @@ private static void DEFDLG_SetFocus(int hwndDlg, int hwndCtrl) { Focus.SetFocus(hwndCtrl); } - private static boolean DEFDLG_SetDefId(int hwndDlg, int wParam) { + private static void DEFDLG_SetDefId(int hwndDlg, int wParam) { int dlgcode = 0; int hwndOld; int hwndNew = WinDialog.GetDlgItem(hwndDlg, wParam); @@ -185,7 +185,7 @@ private static boolean DEFDLG_SetDefId(int hwndDlg, int wParam) { window.dlgInfo.idResult = wParam; if (hwndNew != 0 && ((dlgcode = Message.SendMessageA(hwndNew, WM_GETDLGCODE, 0, 0)) & (DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON)) == 0) - return false; /* Destination is not a push button */ + return; /* Destination is not a push button */ /* Make sure the old default control is a valid push button ID */ hwndOld = WinDialog.GetDlgItem(hwndDlg, old_id); @@ -198,7 +198,6 @@ private static boolean DEFDLG_SetDefId(int hwndDlg, int wParam) { if ((dlgcode & DLGC_UNDEFPUSHBUTTON) != 0) Message.SendMessageA(hwndNew, BM_SETSTYLE, BS_DEFPUSHBUTTON, TRUE); } - return true; } static public int DEFDLG_FindDefButton(int hwndDlg) { @@ -221,16 +220,16 @@ static public int DEFDLG_FindDefButton(int hwndDlg) { return hwndChild; } - private static boolean DEFDLG_SetDefButton(int hwndDlg, int hwndNew) { + private static void DEFDLG_SetDefButton(int hwndDlg, int hwndNew) { int dlgcode = 0; WinWindow window = WinWindow.get(hwndDlg); int hwndOld = WinDialog.GetDlgItem(hwndDlg, window.dlgInfo.idResult); if (hwndNew != 0 && ((dlgcode = Message.SendMessageA(hwndNew, WM_GETDLGCODE, 0, 0)) & (DLGC_UNDEFPUSHBUTTON | DLGC_DEFPUSHBUTTON)) == 0) { - /** - * Need to draw only default push button rectangle. - * Since the next control is not a push button, need to draw the push - * button rectangle for the default control. + /* + Need to draw only default push button rectangle. + Since the next control is not a push button, need to draw the push + button rectangle for the default control. */ hwndNew = hwndOld; dlgcode = Message.SendMessageA(hwndNew, WM_GETDLGCODE, 0, 0); @@ -246,6 +245,5 @@ private static boolean DEFDLG_SetDefButton(int hwndDlg, int hwndNew) { if ((dlgcode & DLGC_UNDEFPUSHBUTTON) != 0) Message.SendMessageA(hwndNew, BM_SETSTYLE, BS_DEFPUSHBUTTON, TRUE); } - return true; } } \ No newline at end of file diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefWnd.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefWnd.java index 43942d5f..cad74fe2 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefWnd.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/DefWnd.java @@ -62,7 +62,7 @@ static public int DefWindowProcA(int hWnd, int Msg, int wParam, int lParam) { /*********************************************************************** * DEFWND_DefWinProc - * + *

* Default window procedure for messages that are the same in Ansi and Unicode. */ private static int DEFWND_DefWinProc(int hwnd, int msg, int wParam, int lParam ) { @@ -261,7 +261,6 @@ private static int DEFWND_DefWinProc(int hwnd, int msg, int wParam, int lParam ) WinWindow window = WinWindow.get(hwnd); if (window == null) return 0; - int hdc = wParam; int hbr = WinClass.GetClassLongA(hwnd, GCLP_HBRBACKGROUND); if (hbr==0) return 0; int rect = getTempBuffer(WinRect.SIZE); @@ -269,9 +268,9 @@ private static int DEFWND_DefWinProc(int hwnd, int msg, int wParam, int lParam ) /* can't use GetClipBox with a parent DC or we fill the whole parent */ window.rectClient.write(rect); } else { - WinDC.GetClipBox(hdc, rect); + WinDC.GetClipBox(wParam, rect); } - WinDC.FillRect(hdc, rect, hbr); + WinDC.FillRect(wParam, rect, hbr); return 1; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Focus.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Focus.java index 1b4aac18..44c84629 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Focus.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Focus.java @@ -39,44 +39,44 @@ public static int SetActiveWindow(int hWnd) { } // HWND WINAPI SetFocus( HWND hwnd ) - public static int SetFocus(int hwnd) { + public static void SetFocus(int hwnd) { int hwndTop = hwnd; int previous = GetFocus(); if (hwnd != 0) { /* Check if we can set the focus to this window */ - if (hwnd == previous) return previous; /* nothing to do */ + if (hwnd == previous) return; /* nothing to do */ for (; ; ) { int parent; int style = WinWindow.GetWindowLongA(hwndTop, GWL_STYLE); - if ((style & (WS_MINIMIZE | WS_DISABLED)) != 0) return 0; + if ((style & (WS_MINIMIZE | WS_DISABLED)) != 0) return; parent = WinWindow.GetAncestor(hwndTop, GA_PARENT); if (parent == 0) { - if ((style & (WS_POPUP | WS_CHILD)) == WS_CHILD) return 0; + if ((style & (WS_POPUP | WS_CHILD)) == WS_CHILD) return; break; } - if (parent == WinThread.current().msg_window) return 0; + if (parent == WinThread.current().msg_window) return; hwndTop = parent; } /* call hooks */ - if (Hook.HOOK_CallHooks(WH_CBT, HCBT_SETFOCUS, hwnd, previous) != 0) return 0; + if (Hook.HOOK_CallHooks(WH_CBT, HCBT_SETFOCUS, hwnd, previous) != 0) return; /* activate hwndTop if needed. */ if (hwndTop != GetActiveWindow()) { - if (!set_active_window(hwndTop, null, false, false)) return 0; - if (WinWindow.IsWindow(hwnd)==0) return 0; /* Abort if window destroyed */ + if (!set_active_window(hwndTop, null, false, false)) return; + if (WinWindow.IsWindow(hwnd)==0) return; /* Abort if window destroyed */ /* Do not change focus if the window is no longer active */ - if (hwndTop != GetActiveWindow()) return 0; + if (hwndTop != GetActiveWindow()) return; } } else /* NULL hwnd passed in */ { - if (previous == 0) return 0; /* nothing to do */ - if (Hook.HOOK_CallHooks(WH_CBT, HCBT_SETFOCUS, 0, previous) != 0) return 0; + if (previous == 0) return; /* nothing to do */ + if (Hook.HOOK_CallHooks(WH_CBT, HCBT_SETFOCUS, 0, previous) != 0) return; } /* change focus and send messages */ - return set_focus_window(hwnd); + set_focus_window(hwnd); } // BOOL WINAPI SetForegroundWindow(HWND hWnd) @@ -87,18 +87,17 @@ static public int SetForegroundWindow(int hWnd) { return BOOL(set_active_window(hWnd, null, false, true)); } - static private int set_focus_window(int hwnd) { + static private void set_focus_window(int hwnd) { int previous = GetFocus(); - if (previous == hwnd) return previous; + if (previous == hwnd) return; Scheduler.getCurrentThread().GetGUIThreadInfo().hwndFocus = hwnd; if (previous != 0) { Message.SendMessageA(previous, WM_KILLFOCUS, hwnd, 0); - if (GetFocus() != hwnd) return previous; /* changed by the message */ + if (GetFocus() != hwnd) return; /* changed by the message */ } if (WinWindow.IsWindow(hwnd)!=0) { Message.SendMessageA(hwnd, WM_SETFOCUS, previous, 0); } - return previous; } static private boolean set_active_window(int hwnd, IntRef prev, boolean mouse, boolean focus) { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Hook.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Hook.java index 3023dce5..a1a97da6 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Hook.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Hook.java @@ -17,7 +17,7 @@ static public Hook create(int type, int threadId, int eip) { static public Hook get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof Hook)) + if (!(object instanceof Hook)) return null; return (Hook)object; } @@ -47,17 +47,12 @@ static public int SetWindowsHookExA(int idHook, int lpfn, int hMod, int dwThread } } else { /* system-global hook */ - if (dwThreadId == WH_KEYBOARD_LL || dwThreadId == WH_MOUSE_LL) hMod = 0; - else if (hMod==0) { - SetLastError(ERROR_HOOK_NEEDS_HMOD); - return 0; - } } if (idHook < WH_MIN || idHook > WH_MAX) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } - WinThread thread = null; + WinThread thread; if (dwThreadId != 0) { thread = WinThread.get(dwThreadId); if (thread == null) { @@ -72,11 +67,7 @@ else if (hMod==0) { Win.panic("Kernel32.SetWindowsHookExA does not support WH_KEYBOARD_LL or WH_MOUSE_LL yet"); } Hook hook = create(idHook, dwThreadId, lpfn); - Vector hooks = StaticData.hooks.get(idHook); - if (hooks == null) { - hooks = new Vector(); - StaticData.hooks.put(idHook, hooks); - } + Vector hooks = StaticData.hooks.computeIfAbsent(idHook, k -> new Vector<>()); hooks.add(hook); return hook.handle; } @@ -88,13 +79,13 @@ public Hook(int id, int type, int threadId, int eip) { this.eip = eip; } - public int type; - public int threadId; - public int eip; + public final int type; + public final int threadId; + public final int eip; static public int HOOK_CallHooks(int id, int code, int wparam, int lparam) { - Vector hooks = StaticData.hooks.get(id); - if (hooks != null && hooks.size()>0) { + Vector hooks = StaticData.hooks.get(id); + if (hooks != null && !hooks.isEmpty()) { Hook hook = (Hook)hooks.elementAt(0); StaticData.currentHookChain = hooks; StaticData.currentHookIndex = 0; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Input.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Input.java index e7acf3d1..5814b09b 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Input.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Input.java @@ -40,7 +40,7 @@ static public int GetKeyboardState(int lpKeyState) { return WinAPI.TRUE; } - static String[] keyNames = new String[] { + static final String[] keyNames = new String[] { null, "Esc", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Backspace", "Tab", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[", "]", "Enter", "Ctrl", "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", "'", "`", "Shift", "\\", "Z", "X", "C", "V", @@ -76,7 +76,7 @@ static public int GetKeyState(int nVirtKey) { } // values just captures from English XP - static short[] keyvscc2vk = new short[] { + static final short[] keyvscc2vk = new short[] { 0x0, 0x1b, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0xbd, 0xbb, 0x8, 0x9, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4f, 0x50, 0xdb, 0xdd, 0xd, 0x11, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0xba, 0xde, 0xc0, 0x10, 0xdc, 0x5a, 0x58, 0x43, 0x56, @@ -95,7 +95,7 @@ static public int GetKeyState(int nVirtKey) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; - static short[] keyvk2vsc = new short[] { + static final short[] keyvk2vsc = new short[] { 0x0, 0x0, 0x0, 0x46, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf, 0x0, 0x0, 0x4c, 0x1c, 0x0, 0x0, 0x2a, 0x1d, 0x38, 0x0, 0x3a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x39, 0x49, 0x51, 0x4f, 0x47, 0x4b, 0x48, 0x4d, 0x50, 0x0, 0x0, 0x0, 0x54, 0x52, 0x53, 0x63, @@ -114,7 +114,7 @@ static public int GetKeyState(int nVirtKey) { 0x0, 0x5b, 0x0, 0x5f, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x5d, 0x0, 0x62, 0x0, 0x0, 0x0, 0x0 }; - static short[] keyvk2char = new short[] { + static final short[] keyvk2char = new short[] { 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x8, 0x9, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -156,16 +156,14 @@ static public int MapVirtualKeyA(int uCode, int uMapType) { } // BOOL WINAPI ReleaseCapture(void) - static public int ReleaseCapture() { + static public void ReleaseCapture() { StaticData.mouseCapture = 0; - return TRUE; } // HWND WINAPI SetCapture(HWND hWnd) - static public int SetCapture(int hWnd) { + static public void SetCapture(int hWnd) { int result = StaticData.mouseCapture; StaticData.mouseCapture = hWnd; - return result; } // BOOL WINAPI SetCursorPos(int X, int Y) @@ -177,7 +175,7 @@ static public int SetCursorPos(int X, int Y) { // called from the cpu thread static public void processInput() { - while(StaticData.inputQueue.size()>0) { + while(!StaticData.inputQueue.isEmpty()) { Object msg = StaticData.inputQueue.remove(0); if (msg instanceof MouseInput) { MouseInput mouseMsg = (MouseInput)msg; @@ -195,9 +193,9 @@ public MouseInput(int msg, WinPoint pt, int wParam) { this.pt = pt.copy(); this.wParam = wParam; } - int msg; - WinPoint pt; - int wParam; + final int msg; + final WinPoint pt; + final int wParam; } static private class KeyboardInput { @@ -207,10 +205,10 @@ public KeyboardInput(int msg, int wParam, int lParam, BitSet keyState) { this.lParam = lParam; this.keyState = keyState; } - int msg; - int wParam; - int lParam; - BitSet keyState; + final int msg; + final int wParam; + final int lParam; + final BitSet keyState; } // called from java thread @@ -235,9 +233,9 @@ static private void handeKeyboardInput(int msg, int wParam, int lParam, BitSet k } static private void handeMouseInput(int msg, WinPoint pt, int wParam) { - WinWindow window = null; + WinWindow window; int hitTest = WinAPI.HTNOWHERE; - WinPoint relWinPt = null; + WinPoint relWinPt; if (StaticData.mouseCapture != 0) { window = WinWindow.get(StaticData.mouseCapture); @@ -259,22 +257,10 @@ static private void handeMouseInput(int msg, WinPoint pt, int wParam) { //hitTest = Message.SendMessageA(window.handle, WinAPI.WM_NCHITTEST, 0, WinAPI.MAKELONG(pt.x, pt.y)); } if (msg != WinWindow.WM_MOUSEWHEEL) { - if (hitTest != WinWindow.HTCLIENT) - msg += WinWindow.WM_NCMOUSEMOVE - WinWindow.WM_MOUSEMOVE; - else - window.screenToWindow(pt); + window.screenToWindow(pt); } // :TODO: double click? - if (hitTest == WinWindow.HTERROR || hitTest == WinWindow.HTNOWHERE) { - window.postMessage(WinWindow.WM_SETCURSOR, window.handle, hitTest | (msg >> 16)); - return; - } - - if (StaticData.mouseCapture == 0) { - // :TODO: WM_MOUSEACTIVATE - } - WinMsg m = window.getThread().getLastMessage(); if (m != null && m.message == WinWindow.WM_MOUSEMOVE && m.message == msg) { m.wParam = wParam; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Message.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Message.java index 8074a146..e1bd5817 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Message.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Message.java @@ -44,8 +44,7 @@ static public int GetMessageTime() { } // BOOL WINAPI MessageBeep(UINT uType) - static public int MessageBeep(int uType) { - return TRUE; + static public void MessageBeep(int uType) { } // BOOL WINAPI PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) @@ -54,13 +53,12 @@ static public int PeekMessageA(int lpMsg, int hWnd, int wMsgFilterMin, int wMsgF } // BOOL WINAPI PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) - static public int PostMessageA(int hWnd, int Msg, int wParam, int lParam) { + static public void PostMessageA(int hWnd, int Msg, int wParam, int lParam) { if (WinWindow.get(hWnd) == null) - return FALSE; + return; if (hWnd == 0xFFFF) Win.panic("Broadcast PostMessage not implemented yet"); Scheduler.getCurrentThread().postMessage(hWnd, Msg, wParam, lParam); - return TRUE; } // If the message is successfully registered, the return value is a message identifier in the range 0xC000 through 0xFFFF diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/NCCALCSIZE_PARAMS.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/NCCALCSIZE_PARAMS.java index 557607c1..7e5aa38a 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/NCCALCSIZE_PARAMS.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/NCCALCSIZE_PARAMS.java @@ -22,6 +22,6 @@ public int allocTemp() { return result; } - WinRect[] rgrc = new WinRect[3]; - int lppos; // PWINDOWPOS + final WinRect[] rgrc = new WinRect[3]; + final int lppos; // PWINDOWPOS } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/NonClient.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/NonClient.java index 4d09a656..75a62919 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/NonClient.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/NonClient.java @@ -4,16 +4,14 @@ public class NonClient extends WinAPI { // BOOL WINAPI AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) - static public int AdjustWindowRectEx(int lpRect, int dwStyle, int bMenu, int dwExStyle) { + static public void AdjustWindowRectEx(int lpRect, int dwStyle, int bMenu, int dwExStyle) { log("Faked"); - return TRUE; } - static public int NC_HandleNCPaint(int hwnd , int clip) { - return 0; + static public void NC_HandleNCPaint(int hwnd , int clip) { } - static public int NC_HandleSetCursor(int hwnd, int wParam, int lParam) { + static public void NC_HandleSetCursor(int hwnd, int wParam, int lParam) { switch((short)LOWORD(lParam)) { case HTERROR: @@ -28,29 +26,33 @@ static public int NC_HandleSetCursor(int hwnd, int wParam, int lParam) { int hCursor = WinClass.GetClassLongA(hwnd, GCL_HCURSOR); if (hCursor!=0) { WinCursor.SetCursor(hCursor); - return TRUE; + return; } - return FALSE; + return; } case HTLEFT: case HTRIGHT: - return WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZEWE)); + WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZEWE)); + return; case HTTOP: case HTBOTTOM: - return WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZENS)); + WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZENS)); + return; case HTTOPLEFT: case HTBOTTOMRIGHT: - return WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZENWSE)); + WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZENWSE)); + return; case HTTOPRIGHT: case HTBOTTOMLEFT: - return WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZENESW)); + WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_SIZENESW)); + return; } /* Default cursor: arrow */ - return WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_ARROW)); + WinCursor.SetCursor(WinCursor.LoadCursorA(0, IDC_ARROW)); } } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Painting.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Painting.java index c596b1a7..8afc125c 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Painting.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Painting.java @@ -41,18 +41,18 @@ static public int BeginPaint(int hwnd, int lps) { } // BOOL Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) - static public int Ellipse(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { + static public void Ellipse(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { WinDC dc = WinDC.get(hdc); if (dc == null) - return FALSE; + return; if (nLeftRect == nRightRect || nTopRect == nBottomRect) - return TRUE; + return; WinPen pen = WinPen.get(dc.hPen); WinBrush brush = WinBrush.get(dc.hBrush); if (pen == null || brush == null) - return FALSE; + return; Graphics2D graphics = dc.getGraphics(); Ellipse2D ellipse2D = new Ellipse2D.Float(dc.x+nLeftRect, dc.y+nTopRect, nRightRect-nLeftRect, nBottomRect-nTopRect); @@ -64,18 +64,16 @@ static public int Ellipse(int hdc, int nLeftRect, int nTopRect, int nRightRect, graphics.draw(ellipse2D); graphics.dispose(); - return TRUE; } // BOOL EndPaint(HWND hWnd, const PAINTSTRUCT *lpPaint) - static public int EndPaint(int hWnd, int lpPaint) { + static public void EndPaint(int hWnd, int lpPaint) { WinDC dc = WinDC.get(readd(lpPaint)); if (dc != null) dc.close(); Caret.ShowCaret(hWnd); Main.drawImage(StaticData.screen.getImage()); WinWindow.get(hWnd).validate(); - return TRUE; } // HDC WINAPI GetDC(HWND hwnd) @@ -115,31 +113,30 @@ static public int GetUpdateRgn(int hWnd, int hRgn, int bErase) { } // BOOL InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase) - static public int InvalidateRect(int hWnd, int lpRect, int bErase) { + static public void InvalidateRect(int hWnd, int lpRect, int bErase) { WinWindow window = WinWindow.get(hWnd); if (window == null) - return FALSE; // :TODO: invalidate all windows + return; // :TODO: invalidate all windows WinRect rect = null; if (lpRect != 0) { rect = new WinRect(lpRect); } window.invalidate(rect); - return TRUE; } // BOOL Pie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2) - static public int Pie(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int xstart, int ystart, int xend, int yend) { + static public void Pie(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int xstart, int ystart, int xend, int yend) { WinDC dc = WinDC.get(hdc); if (dc == null) - return FALSE; + return; if (nLeftRect == nRightRect || nTopRect == nBottomRect) - return TRUE; + return; WinPen pen = WinPen.get(dc.hPen); WinBrush brush = WinBrush.get(dc.hBrush); if (pen == null || brush == null) - return FALSE; + return; Graphics2D graphics = dc.getGraphics(); int width = nRightRect-nLeftRect; @@ -162,21 +159,20 @@ static public int Pie(int hdc, int nLeftRect, int nTopRect, int nRightRect, int graphics.dispose(); - return TRUE; } // BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) - static public int Rectangle(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { + static public void Rectangle(int hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { WinDC dc = WinDC.get(hdc); if (dc == null) - return FALSE; + return; if (nLeftRect == nRightRect || nTopRect == nBottomRect) - return TRUE; + return; WinPen pen = WinPen.get(dc.hPen); WinBrush brush = WinBrush.get(dc.hBrush); if (pen == null || brush == null) - return FALSE; + return; int width = nRightRect-nLeftRect-1; int height = nBottomRect-nTopRect-1; @@ -193,30 +189,27 @@ static public int Rectangle(int hdc, int nLeftRect, int nTopRect, int nRightRect graphics.dispose(); if (dc.getImage() == StaticData.screen.getImage()) Main.drawImage(dc.getImage()); - return TRUE; } // int ReleaseDC(HWND hWnd, HDC hDC) - static public int ReleaseDC(int hWnd, int hDC) { + static public void ReleaseDC(int hWnd, int hDC) { WinDC dc = WinDC.get(hDC); if (dc == null) - return 0; + return; if (dc.isScreen()) { Main.drawImage(dc.getImage()); } dc.close(); - return 1; } // BOOL RedrawWindow(HWND hWnd, const RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags) - static public int RedrawWindow(int hWnd, int lprcUpdate, int hrgnUpdate, int flags) { + static public void RedrawWindow(int hWnd, int lprcUpdate, int hrgnUpdate, int flags) { log("RedrawWindow faked"); if (hWnd == 0) hWnd = WinWindow.GetDesktopWindow(); WinWindow window = WinWindow.get(hWnd); - if (window == null) - return FALSE; - return TRUE; + if (window == null) { + } } // BOOL UpdateWindow(HWND hWnd) diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Resource.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Resource.java index 80890f50..6db110a8 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Resource.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Resource.java @@ -1,7 +1,6 @@ package jdos.win.builtin.user32; import jdos.hardware.Memory; -import jdos.win.Console; import jdos.win.Win; import jdos.win.builtin.WinAPI; import jdos.win.builtin.gdi32.WinBitmap; @@ -59,7 +58,7 @@ static public int LoadImageA(int hinst, int lpszName, int uType, int cxDesired, } } } else { - Console.out("LoadImage type=" + uType + " faked"); + System.out.println("LoadImage type=" + uType + " faked"); } return 0; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/StaticWindow.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/StaticWindow.java index aa46d1c3..ed23af46 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/StaticWindow.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/StaticWindow.java @@ -9,7 +9,6 @@ import jdos.win.builtin.kernel32.WinProcess; import jdos.win.kernel.WinCallback; import jdos.win.system.WinRect; -import jdos.win.utils.Ptr; import jdos.win.utils.StringUtil; public class StaticWindow extends WinAPI { @@ -24,7 +23,7 @@ static public void registerClass(WinProcess process) { process.classNames.put(winClass.className.toLowerCase(), winClass); } - static private Callback.Handler static_proc = new HandlerBase() { + static private final Callback.Handler static_proc = new HandlerBase() { public java.lang.String getName() { return "STATIC.proc"; } @@ -40,13 +39,13 @@ public void onCall() { static final private int HFONT_GWL_OFFSET = 0; static final private int HICON_GWL_OFFSET = 4; - static private interface StaticPaint { - public void paint(int hWnd, int hdc, int style); + private interface StaticPaint { + void paint(int hWnd, int hdc, int style); } /*********************************************************************** * STATIC_SetIcon - * + *

* Set the icon for an SS_ICON control. */ static private int STATIC_SetIcon(int hwnd, int hicon, int style ) { @@ -79,7 +78,7 @@ static private int STATIC_SetIcon(int hwnd, int hicon, int style ) { /*********************************************************************** * STATIC_SetBitmap - * + *

* Set the bitmap for an SS_BITMAP control. */ static private int STATIC_SetBitmap(int hwnd, int hBitmap, int style) { @@ -113,7 +112,7 @@ static private int STATIC_SetBitmap(int hwnd, int hBitmap, int style) { /*********************************************************************** * STATIC_SetEnhMetaFile - * + *

* Set the enhanced metafile for an SS_ENHMETAFILE control. */ static private int STATIC_SetEnhMetaFile(int hwnd, int hEnhMetaFile, int style) { @@ -128,7 +127,7 @@ static private int STATIC_SetEnhMetaFile(int hwnd, int hEnhMetaFile, int style) /*********************************************************************** * STATIC_GetImage - * + *

* Gets the bitmap for an SS_BITMAP control, the icon/cursor for an * SS_ICON control or the enhanced metafile for an SS_ENHMETAFILE control. */ @@ -153,7 +152,7 @@ static int STATIC_GetImage(int hwnd, int wParam, int style) { /*********************************************************************** * STATIC_LoadIconA - * + *

* Load the icon for an SS_ICON control. */ static int STATIC_LoadIconA(int hInstance, int name, int style) { @@ -203,7 +202,7 @@ static int STATIC_LoadIconA(int hInstance, int name, int style) { /*********************************************************************** * STATIC_TryPaintFcn - * + *

* Try to immediately paint the control. */ static private void STATIC_TryPaintFcn(int hwnd, int full_style) { @@ -236,7 +235,7 @@ static private int STATIC_SendWmCtlColorStatic(int hwnd, int hdc) { /*********************************************************************** * hasTextStyle - * + *

* Tests if the control displays text. */ static private boolean hasTextStyle(int style) { @@ -266,10 +265,6 @@ static private int StaticWndProc_common(int hwnd, int uMsg, int wParam, int lPar switch (uMsg) { case WM_CREATE: - if (style < 0L || style > SS_TYPEMASK) { - warn("Unknown style "+Ptr.toString(style)); - return -1; - } break; case WM_NCDESTROY: if (style == SS_ICON) { @@ -430,252 +425,238 @@ static private int StaticWndProc_common(int hwnd, int uMsg, int wParam, int lPar return 0; } - static private StaticPaint STATIC_PaintOwnerDrawfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT(); - int id = WinWindow.GetWindowLongA(hWnd, GWLP_ID); - - dis.CtlType = ODT_STATIC; - dis.CtlID = id; - dis.itemID = 0; - dis.itemAction = ODA_DRAWENTIRE; - dis.itemState = WinWindow.IsWindowEnabled(hWnd)!=0 ? 0 : ODS_DISABLED; - dis.hwndItem = hWnd; - dis.hDC = hdc; - dis.itemData = 0; - WinPos.WIN_GetClientRect(hWnd, dis.rcItem); - - int font = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); - int oldFont = 0; - if (font!=0) - oldFont = WinDC.SelectObject(hdc, font); - Message.SendMessageA(WinWindow.GetParent(hWnd), WM_CTLCOLORSTATIC, hdc, hWnd); - Message.SendMessageA(WinWindow.GetParent(hWnd), WM_DRAWITEM, id, dis.allocTemp()); - if (font!=0) - WinDC.SelectObject(hdc, oldFont); - } + static private final StaticPaint STATIC_PaintOwnerDrawfn = (hWnd, hdc, style) -> { + DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT(); + int id = WinWindow.GetWindowLongA(hWnd, GWLP_ID); + + dis.CtlType = ODT_STATIC; + dis.CtlID = id; + dis.itemID = 0; + dis.itemAction = ODA_DRAWENTIRE; + dis.itemState = WinWindow.IsWindowEnabled(hWnd)!=0 ? 0 : ODS_DISABLED; + dis.hwndItem = hWnd; + dis.hDC = hdc; + dis.itemData = 0; + WinPos.WIN_GetClientRect(hWnd, dis.rcItem); + + int font = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); + int oldFont = 0; + if (font!=0) + oldFont = WinDC.SelectObject(hdc, font); + Message.SendMessageA(WinWindow.GetParent(hWnd), WM_CTLCOLORSTATIC, hdc, hWnd); + Message.SendMessageA(WinWindow.GetParent(hWnd), WM_DRAWITEM, id, dis.allocTemp()); + if (font!=0) + WinDC.SelectObject(hdc, oldFont); }; - static private StaticPaint STATIC_PaintTextfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int format; - - WinWindow window = WinWindow.get(hWnd); - if (window == null) - return; - - switch (style & SS_TYPEMASK) - { - case SS_LEFT: - format = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK; - break; - case SS_CENTER: - format = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK; - break; - case SS_RIGHT: - format = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK; - break; - case SS_SIMPLE: - format = DT_LEFT | DT_SINGLELINE; - break; - case SS_LEFTNOWORDWRAP: - format = DT_LEFT | DT_EXPANDTABS; - break; - default: - return; - } + static private final StaticPaint STATIC_PaintTextfn = (hWnd, hdc, style) -> { + int format; - int rc = getTempBuffer(WinRect.SIZE); - WinPos.GetClientRect(hWnd, rc); - - if ((WinWindow.GetWindowLongA(hWnd, GWL_EXSTYLE) & WS_EX_RIGHT)!=0) - format = DT_RIGHT | (format & ~(DT_LEFT | DT_CENTER)); - - if ((style & SS_NOPREFIX)!=0) - format |= DT_NOPREFIX; - - if ((style & SS_TYPEMASK) != SS_SIMPLE) { - if ((style & SS_CENTERIMAGE)!=0) - format |= DT_SINGLELINE | DT_VCENTER; - if ((style & SS_EDITCONTROL)!=0) - format |= DT_EDITCONTROL; - if ((style & SS_ENDELLIPSIS)!=0) - format |= DT_SINGLELINE | DT_END_ELLIPSIS; - if ((style & SS_PATHELLIPSIS)!=0) - format |= DT_SINGLELINE | DT_PATH_ELLIPSIS; - if ((style & SS_WORDELLIPSIS)!=0) - format |= DT_SINGLELINE | DT_WORD_ELLIPSIS; - } - int hFont = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); - int hOldFont = 0; - if (hFont != 0) - hOldFont = WinDC.SelectObject(hdc, hFont); + WinWindow window = WinWindow.get(hWnd); + if (window == null) + return; - /* SS_SIMPLE controls: WM_CTLCOLORSTATIC is sent, but the returned - brush is not used */ - int hBrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + switch (style & SS_TYPEMASK) + { + case SS_LEFT: + format = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK; + break; + case SS_CENTER: + format = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK; + break; + case SS_RIGHT: + format = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK; + break; + case SS_SIMPLE: + format = DT_LEFT | DT_SINGLELINE; + break; + case SS_LEFTNOWORDWRAP: + format = DT_LEFT | DT_EXPANDTABS; + break; + default: + return; + } - if ((style & SS_TYPEMASK) != SS_SIMPLE) { - WinDC.FillRect(hdc, rc, hBrush); - if (WinWindow.IsWindowEnabled(hWnd)==0) - WinDC.SetTextColor(hdc, SysParams.GetSysColor(COLOR_GRAYTEXT)); - } + int rc = getTempBuffer(WinRect.SIZE); + WinPos.GetClientRect(hWnd, rc); + + if ((WinWindow.GetWindowLongA(hWnd, GWL_EXSTYLE) & WS_EX_RIGHT)!=0) + format = DT_RIGHT | (format & ~(DT_LEFT | DT_CENTER)); + + if ((style & SS_NOPREFIX)!=0) + format |= DT_NOPREFIX; + + if ((style & SS_TYPEMASK) != SS_SIMPLE) { + if ((style & SS_CENTERIMAGE)!=0) + format |= DT_SINGLELINE | DT_VCENTER; + if ((style & SS_EDITCONTROL)!=0) + format |= DT_EDITCONTROL; + if ((style & SS_ENDELLIPSIS)!=0) + format |= DT_SINGLELINE | DT_END_ELLIPSIS; + if ((style & SS_PATHELLIPSIS)!=0) + format |= DT_SINGLELINE | DT_PATH_ELLIPSIS; + if ((style & SS_WORDELLIPSIS)!=0) + format |= DT_SINGLELINE | DT_WORD_ELLIPSIS; + } + int hFont = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); + int hOldFont = 0; + if (hFont != 0) + hOldFont = WinDC.SelectObject(hdc, hFont); + + /* SS_SIMPLE controls: WM_CTLCOLORSTATIC is sent, but the returned + brush is not used */ + int hBrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + + if ((style & SS_TYPEMASK) != SS_SIMPLE) { + WinDC.FillRect(hdc, rc, hBrush); + if (WinWindow.IsWindowEnabled(hWnd)==0) + WinDC.SetTextColor(hdc, SysParams.GetSysColor(COLOR_GRAYTEXT)); + } - if (window.text.length()>0) { - if (((style & SS_TYPEMASK) == SS_SIMPLE) && (style & SS_NOPREFIX)!=0) { - /* Windows uses the faster ExtTextOut() to draw the text and - to paint the whole client rectangle with the text background - color. Reference: "Static Controls" by Kyle Marsh, 1992 */ - WinRect rect = new WinRect(rc); - WinDC.ExtTextOutA( hdc, rect.left, rect.top, ETO_CLIPPED | ETO_OPAQUE, rc, StringUtil.allocateTempA(window.text), window.text.length(), NULL ); - } else { - WinText.DrawTextA(hdc, StringUtil.allocateTempA(window.text), -1, rc, format); - } + if (!window.text.isEmpty()) { + if (((style & SS_TYPEMASK) == SS_SIMPLE) && (style & SS_NOPREFIX)!=0) { + /* Windows uses the faster ExtTextOut() to draw the text and + to paint the whole client rectangle with the text background + color. Reference: "Static Controls" by Kyle Marsh, 1992 */ + WinRect rect = new WinRect(rc); + WinDC.ExtTextOutA( hdc, rect.left, rect.top, ETO_CLIPPED | ETO_OPAQUE, rc, StringUtil.allocateTempA(window.text), window.text.length(), NULL ); + } else { + WinText.DrawTextA(hdc, StringUtil.allocateTempA(window.text), -1, rc, format); } - if (hFont!=0) - WinDC.SelectObject(hdc, hOldFont); } + if (hFont!=0) + WinDC.SelectObject(hdc, hOldFont); }; - static private StaticPaint STATIC_PaintRectfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); - int hBrush; + static private final StaticPaint STATIC_PaintRectfn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); + int hBrush; - WinPos.GetClientRect(hWnd, rc); + WinPos.GetClientRect(hWnd, rc); - /* FIXME: send WM_CTLCOLORSTATIC */ - switch (style & SS_TYPEMASK) - { - case SS_BLACKRECT: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); - WinDC.FillRect(hdc, rc, hBrush); - break; - case SS_GRAYRECT: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); - WinDC.FillRect(hdc, rc, hBrush); - break; - case SS_WHITERECT: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); - WinDC.FillRect(hdc, rc, hBrush); - break; - case SS_BLACKFRAME: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); - UiTools.FrameRect(hdc, rc, hBrush); - break; - case SS_GRAYFRAME: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); - UiTools.FrameRect(hdc, rc, hBrush); - break; - case SS_WHITEFRAME: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); - UiTools.FrameRect(hdc, rc, hBrush); - break; - default: - return; - } - GdiObj.DeleteObject(hBrush); + /* FIXME: send WM_CTLCOLORSTATIC */ + switch (style & SS_TYPEMASK) + { + case SS_BLACKRECT: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); + WinDC.FillRect(hdc, rc, hBrush); + break; + case SS_GRAYRECT: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); + WinDC.FillRect(hdc, rc, hBrush); + break; + case SS_WHITERECT: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); + WinDC.FillRect(hdc, rc, hBrush); + break; + case SS_BLACKFRAME: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); + UiTools.FrameRect(hdc, rc, hBrush); + break; + case SS_GRAYFRAME: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); + UiTools.FrameRect(hdc, rc, hBrush); + break; + case SS_WHITEFRAME: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); + UiTools.FrameRect(hdc, rc, hBrush); + break; + default: + return; } + GdiObj.DeleteObject(hBrush); }; - static private StaticPaint STATIC_PaintIconfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); - WinPos.GetClientRect(hWnd, rc); - int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); - int hIcon = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); - WinIcon icon = WinIcon.get(hIcon); - WinDC.FillRect(hdc, rc, hbrush); - if (icon != null) { - WinRect iconRect = new WinRect(); - WinRect rect = new WinRect(rc); - if ((style & SS_CENTERIMAGE)==0) - iconRect = rect; - else { - iconRect.left = (rect.right - rect.left) / 2 - icon.cx / 2; - iconRect.top = (rect.bottom - rect.top) / 2 - icon.cy / 2; - iconRect.right = iconRect.left + icon.cx; - iconRect.bottom = iconRect.top + icon.cy; - } - WinIcon.DrawIconEx(hdc, iconRect.left, iconRect.top, hIcon, iconRect.right - iconRect.left, iconRect.bottom - iconRect.top, 0, NULL, DI_NORMAL); + static private final StaticPaint STATIC_PaintIconfn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); + WinPos.GetClientRect(hWnd, rc); + int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + int hIcon = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); + WinIcon icon = WinIcon.get(hIcon); + WinDC.FillRect(hdc, rc, hbrush); + if (icon != null) { + WinRect iconRect = new WinRect(); + WinRect rect = new WinRect(rc); + if ((style & SS_CENTERIMAGE)==0) + iconRect = rect; + else { + iconRect.left = (rect.right - rect.left) / 2 - icon.cx / 2; + iconRect.top = (rect.bottom - rect.top) / 2 - icon.cy / 2; + iconRect.right = iconRect.left + icon.cx; + iconRect.bottom = iconRect.top + icon.cy; } + WinIcon.DrawIconEx(hdc, iconRect.left, iconRect.top, hIcon, iconRect.right - iconRect.left, iconRect.bottom - iconRect.top, 0, NULL, DI_NORMAL); } }; - static private StaticPaint STATIC_PaintBitmapfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - /* message is still sent, even if the returned brush is not used */ - int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); - int hBitmap = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); - WinBitmap bitmap = WinBitmap.get(hBitmap); - int hMemDC = 0; - if (bitmap != null) - hMemDC = WinDC.CreateCompatibleDC(hdc); - - if (hMemDC != 0) { - int oldbitmap = WinDC.SelectObject(hMemDC, hBitmap); - - /* Set the background color for monochrome bitmaps - to the color of the background brush */ - WinBrush brush = WinBrush.get(hbrush); - if (brush != null) { - if (brush.style == BS_SOLID) - WinDC.SetBkColor(hdc, brush.color); - } - WinRect rcClient = new WinRect(); - WinPos.WIN_GetClientRect(hWnd, rcClient); - - if ((style & SS_CENTERIMAGE)!=0) { - int x, y; - x = (rcClient.right - rcClient.left)/2 - bitmap.getWidth()/2; - y = (rcClient.bottom - rcClient.top)/2 - bitmap.getHeight()/2; - WinDC.FillRect(hdc, rcClient.allocTemp(), hbrush); - BitBlt.BitBlt(hdc, x, y, bitmap.getWidth(), bitmap.getHeight(), hMemDC, 0, 0, SRCCOPY); - } else { - BitBlt.StretchBlt(hdc, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hMemDC, 0, 0, bitmap.getWidth(), bitmap.getHeight(), SRCCOPY); - } - WinDC.SelectObject(hMemDC, oldbitmap); - WinDC.DeleteDC(hMemDC); + static private final StaticPaint STATIC_PaintBitmapfn = (hWnd, hdc, style) -> { + /* message is still sent, even if the returned brush is not used */ + int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + int hBitmap = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); + WinBitmap bitmap = WinBitmap.get(hBitmap); + int hMemDC = 0; + if (bitmap != null) + hMemDC = WinDC.CreateCompatibleDC(hdc); + + if (hMemDC != 0) { + int oldbitmap = WinDC.SelectObject(hMemDC, hBitmap); + + /* Set the background color for monochrome bitmaps + to the color of the background brush */ + WinBrush brush = WinBrush.get(hbrush); + if (brush != null) { + if (brush.style == BS_SOLID) + WinDC.SetBkColor(hdc, brush.color); } + WinRect rcClient = new WinRect(); + WinPos.WIN_GetClientRect(hWnd, rcClient); + + if ((style & SS_CENTERIMAGE)!=0) { + int x, y; + x = (rcClient.right - rcClient.left)/2 - bitmap.getWidth()/2; + y = (rcClient.bottom - rcClient.top)/2 - bitmap.getHeight()/2; + WinDC.FillRect(hdc, rcClient.allocTemp(), hbrush); + BitBlt.BitBlt(hdc, x, y, bitmap.getWidth(), bitmap.getHeight(), hMemDC, 0, 0, SRCCOPY); + } else { + BitBlt.StretchBlt(hdc, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hMemDC, 0, 0, bitmap.getWidth(), bitmap.getHeight(), SRCCOPY); + } + WinDC.SelectObject(hMemDC, oldbitmap); + WinDC.DeleteDC(hMemDC); } }; - static private StaticPaint STATIC_PaintEnhMetafn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); - WinPos.GetClientRect(hWnd, rc); - int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); - WinDC.FillRect(hdc, rc, hbrush); - int hEnhMetaFile = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); - WinEnhancedMetaFile mf = WinEnhancedMetaFile.get((hEnhMetaFile)); - if (mf != null) { - /* The control's current font is not selected into the - device context! */ - // :TODO: - log("STATIC metafile faked"); - // PlayEnhMetaFile(hdc, hEnhMetaFile, rc); - } + static private final StaticPaint STATIC_PaintEnhMetafn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); + WinPos.GetClientRect(hWnd, rc); + int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + WinDC.FillRect(hdc, rc, hbrush); + int hEnhMetaFile = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); + WinEnhancedMetaFile mf = WinEnhancedMetaFile.get((hEnhMetaFile)); + if (mf != null) { + /* The control's current font is not selected into the + device context! */ + // :TODO: + log("STATIC metafile faked"); + // PlayEnhMetaFile(hdc, hEnhMetaFile, rc); } }; - static private StaticPaint STATIC_PaintEtchedfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); + static private final StaticPaint STATIC_PaintEtchedfn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); - /* FIXME: sometimes (not always) sends WM_CTLCOLORSTATIC */ - WinPos.GetClientRect(hWnd, rc); - switch (style & SS_TYPEMASK) - { - case SS_ETCHEDHORZ: - UiTools.DrawEdge(hdc, rc, EDGE_ETCHED, BF_TOP | BF_BOTTOM); - break; - case SS_ETCHEDVERT: - UiTools.DrawEdge(hdc, rc, EDGE_ETCHED, BF_LEFT | BF_RIGHT); - break; - case SS_ETCHEDFRAME: - UiTools.DrawEdge(hdc, rc, EDGE_ETCHED, BF_RECT); - break; - } + /* FIXME: sometimes (not always) sends WM_CTLCOLORSTATIC */ + WinPos.GetClientRect(hWnd, rc); + switch (style & SS_TYPEMASK) + { + case SS_ETCHEDHORZ: + UiTools.DrawEdge(hdc, rc, EDGE_ETCHED, BF_TOP | BF_BOTTOM); + break; + case SS_ETCHEDVERT: + UiTools.DrawEdge(hdc, rc, EDGE_ETCHED, BF_LEFT | BF_RIGHT); + break; + case SS_ETCHEDFRAME: + UiTools.DrawEdge(hdc, rc, EDGE_ETCHED, BF_RECT); + break; } }; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/SysParams.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/SysParams.java index 02a9143a..2ebd8cc4 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/SysParams.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/SysParams.java @@ -304,8 +304,8 @@ public DefColor(String name, int color) { this.name = name; this.color = color; } - public String name; - public int color; + public final String name; + public final int color; } static public final DefColor[] DefSysColors = new DefColor[] { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/UiTools.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/UiTools.java index 553b8380..4b9fc7bd 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/UiTools.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/UiTools.java @@ -19,15 +19,16 @@ static public int CopyRect(int lprcDst, int lprcSrc) { } // BOOL DrawEdge(HDC hdc, LPRECT qrc, UINT edge, UINT grfFlags) - static public int DrawEdge(int hdc, int qrc, int edge, int grfFlags) { - if ((grfFlags & BF_DIAGONAL) != 0) - return UITOOLS95_DrawDiagEdge(hdc, qrc, edge, grfFlags); - else - return UITOOLS95_DrawRectEdge(hdc, qrc, edge, grfFlags); + static public void DrawEdge(int hdc, int qrc, int edge, int grfFlags) { + if ((grfFlags & BF_DIAGONAL) != 0) { + UITOOLS95_DrawDiagEdge(hdc, qrc, edge, grfFlags); + } else { + UITOOLS95_DrawRectEdge(hdc, qrc, edge, grfFlags); + } } // BOOL DrawFocusRect(HDC hDC, const RECT *lprc) - static public int DrawFocusRect(int hDC, int lprc) { + static public void DrawFocusRect(int hDC, int lprc) { LOGBRUSH lb = new LOGBRUSH(); int hOldBrush = WinDC.SelectObject(hDC, GdiObj.GetStockObject(NULL_BRUSH)); @@ -47,19 +48,19 @@ static public int DrawFocusRect(int hDC, int lprc) { GdiObj.DeleteObject(hNewPen); WinDC.SelectObject(hDC, hOldBrush); - return TRUE; } // BOOL DrawState(HDC hdc, HBRUSH hbr, DRAWSTATEPROC lpOutputFunc, LPARAM lData, WPARAM wData, int x, int y, int cx, int cy, UINT fuFlags) - static public int DrawStateA(int hdc, int hbr, int lpOutputFunc, int lData, int wData, int x, int y, int cx, int cy, int fuFlags) { - return UITOOLS_DrawState(hdc, hbr, lpOutputFunc, lData, wData, x, y, cx, cy, fuFlags, false); + static public void DrawStateA(int hdc, int hbr, int lpOutputFunc, int lData, int wData, int x, int y, int cx, int cy, int fuFlags) { + UITOOLS_DrawState(hdc, hbr, lpOutputFunc, lData, wData, x, y, cx, cy, fuFlags, false); } // BOOL DrawFrameControl(HDC hdc, LPRECT lprc, UINT uType, UINT uState) - static public int DrawFrameControl(int hdc, int rc, int uType, int uState) { + static public void DrawFrameControl(int hdc, int rc, int uType, int uState) { switch (uType) { case DFC_BUTTON: - return UITOOLS95_DrawFrameButton(hdc, rc, uState); + UITOOLS95_DrawFrameButton(hdc, rc, uState); + return; case DFC_CAPTION: //return UITOOLS95_DrawFrameCaption(hdc, rc, uState); case DFC_MENU: @@ -72,16 +73,15 @@ static public int DrawFrameControl(int hdc, int rc, int uType, int uState) { default: warn("DrawFrameControl: unknown type " + uType); } - return FALSE; } // INT WINAPI FrameRect( HDC hdc, const RECT *rect, HBRUSH hbrush ) - static public int FrameRect(int hdc, int rect, int hbrush) { + static public void FrameRect(int hdc, int rect, int hbrush) { WinRect r = new WinRect(rect); - if ((r.right <= r.left) || (r.bottom <= r.top)) return FALSE; + if ((r.right <= r.left) || (r.bottom <= r.top)) return; int prevBrush = WinDC.SelectObject(hdc, hbrush); - if (prevBrush == 0) return FALSE; + if (prevBrush == 0) return; WinDC.PatBlt(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY); WinDC.PatBlt(hdc, r.right - 1, r.top, 1, r.bottom - r.top, PATCOPY); @@ -89,7 +89,6 @@ static public int FrameRect(int hdc, int rect, int hbrush) { WinDC.PatBlt(hdc, r.left, r.bottom - 1, r.right - r.left, 1, PATCOPY); WinDC.SelectObject(hdc, prevBrush); - return TRUE; } // BOOL InflateRect(LPRECT lprc, int dx, int dy) @@ -171,42 +170,42 @@ static public int set_control_clipping(int hdc, WinRect rc) { return hrgn; } - static final private int LTInnerNormal[] = { + static final private int[] LTInnerNormal = { -1, -1, -1, -1, -1, COLOR_BTNHIGHLIGHT, COLOR_BTNHIGHLIGHT, -1, -1, COLOR_3DDKSHADOW, COLOR_3DDKSHADOW, -1, -1, -1, -1, -1 }; - static final private int LTOuterNormal[] = { + static final private int[] LTOuterNormal = { -1, COLOR_3DLIGHT, COLOR_BTNSHADOW, -1, COLOR_BTNHIGHLIGHT, COLOR_3DLIGHT, COLOR_BTNSHADOW, -1, COLOR_3DDKSHADOW, COLOR_3DLIGHT, COLOR_BTNSHADOW, -1, -1, COLOR_3DLIGHT, COLOR_BTNSHADOW, -1 }; - static final private int RBInnerNormal[] = { + static final private int[] RBInnerNormal = { -1, -1, -1, -1, -1, COLOR_BTNSHADOW, COLOR_BTNSHADOW, -1, -1, COLOR_3DLIGHT, COLOR_3DLIGHT, -1, -1, -1, -1, -1 }; - static final private int RBOuterNormal[] = { + static final private int[] RBOuterNormal = { -1, COLOR_3DDKSHADOW, COLOR_BTNHIGHLIGHT, -1, COLOR_BTNSHADOW, COLOR_3DDKSHADOW, COLOR_BTNHIGHLIGHT, -1, COLOR_3DLIGHT, COLOR_3DDKSHADOW, COLOR_BTNHIGHLIGHT, -1, -1, COLOR_3DDKSHADOW, COLOR_BTNHIGHLIGHT, -1 }; - static final private int LTInnerSoft[] = { + static final private int[] LTInnerSoft = { -1, -1, -1, -1, -1, COLOR_3DLIGHT, COLOR_3DLIGHT, -1, -1, COLOR_BTNSHADOW, COLOR_BTNSHADOW, -1, -1, -1, -1, -1 }; - static final private int LTOuterSoft[] = { + static final private int[] LTOuterSoft = { -1, COLOR_BTNHIGHLIGHT, COLOR_3DDKSHADOW, -1, COLOR_3DLIGHT, COLOR_BTNHIGHLIGHT, COLOR_3DDKSHADOW, -1, COLOR_BTNSHADOW, COLOR_BTNHIGHLIGHT, COLOR_3DDKSHADOW, -1, @@ -216,28 +215,28 @@ static public int set_control_clipping(int hdc, WinRect rc) { static final private int[] RBInnerSoft = RBInnerNormal; /* These are the same */ static final private int[] RBOuterSoft = RBOuterNormal; - static final private int LTRBOuterMono[] = { + static final private int[] LTRBOuterMono = { -1, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOW, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOW, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOW, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, COLOR_WINDOWFRAME, }; - static final private int LTRBInnerMono[] = { + static final private int[] LTRBInnerMono = { -1, -1, -1, -1, -1, COLOR_WINDOW, COLOR_WINDOW, COLOR_WINDOW, -1, COLOR_WINDOW, COLOR_WINDOW, COLOR_WINDOW, -1, COLOR_WINDOW, COLOR_WINDOW, COLOR_WINDOW, }; - static final private int LTRBOuterFlat[] = { + static final private int[] LTRBOuterFlat = { -1, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNFACE, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNFACE, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNFACE, COLOR_BTNSHADOW, COLOR_BTNSHADOW, COLOR_BTNSHADOW, }; - static final private int LTRBInnerFlat[] = { + static final private int[] LTRBInnerFlat = { -1, -1, -1, -1, -1, COLOR_BTNFACE, COLOR_BTNFACE, COLOR_BTNFACE, -1, COLOR_BTNFACE, COLOR_BTNFACE, COLOR_BTNFACE, @@ -254,7 +253,7 @@ static public int set_control_clipping(int hdc, WinRect rc) { *

* See also comments with UITOOLS_DrawRectEdge() */ - static private int UITOOLS95_DrawDiagEdge(int hdc, int prc, int uType, int uFlags) { + static private void UITOOLS95_DrawDiagEdge(int hdc, int prc, int uType, int uFlags) { WinPoint[] Points = new WinPoint[4]; for (int i = 0; i < Points.length; i++) Points[i] = new WinPoint(); int InnerI, OuterI; @@ -266,7 +265,7 @@ static private int UITOOLS95_DrawDiagEdge(int hdc, int prc, int uType, int uFlag WinRect rc = new WinRect(prc); int Width = rc.right - rc.left; int Height = rc.bottom - rc.top; - int SmallDiam = Width > Height ? Height : Width; + int SmallDiam = Math.min(Width, Height); int retval = BOOL(!(((uType & BDR_INNER) == BDR_INNER || (uType & BDR_OUTER) == BDR_OUTER) && (uFlags & (BF_FLAT | BF_MONO)) == 0)); int add = (LTRBInnerMono[uType & (BDR_INNER | BDR_OUTER)] != -1 ? 1 : 0) + (LTRBOuterMono[uType & (BDR_INNER | BDR_OUTER)] != -1 ? 1 : 0); @@ -471,7 +470,6 @@ static private int UITOOLS95_DrawDiagEdge(int hdc, int prc, int uType, int uFlag WinPoint p = new WinPoint(SavePoint); PaintingGDI.MoveToEx(hdc, p.x, p.y, NULL); - return retval; } /** @@ -549,7 +547,7 @@ static private int UITOOLS95_DrawDiagEdge(int hdc, int prc, int uType, int uFlag */ - static private int UITOOLS95_DrawRectEdge(int hdc, int rc, int uType, int uFlags) { + static private void UITOOLS95_DrawRectEdge(int hdc, int rc, int uType, int uFlags) { int LTInnerI, LTOuterI; int RBInnerI, RBOuterI; int LTInnerPen, LTOuterPen, RBInnerPen, RBOuterPen; @@ -659,7 +657,6 @@ static private int UITOOLS95_DrawRectEdge(int hdc, int rc, int uType, int uFlags WinDC.SelectObject(hdc, SavePen); WinPoint p = new WinPoint(SavePoint); PaintingGDI.MoveToEx(hdc, p.x, p.y, NULL); - return retval; } /** @@ -720,20 +717,20 @@ static private int UITOOLS_DrawStateJam(int hdc, int opcode, int func, int lp, i * ******************************************************************* * UITOOLS_DrawState() */ - static private int UITOOLS_DrawState(int hdc, int hbr, int func, int lp, int wp, int x, int y, int cx, int cy, int flags, boolean unicode) { + static private void UITOOLS_DrawState(int hdc, int hbr, int func, int lp, int wp, int x, int y, int cx, int cy, int flags, boolean unicode) { int dtflags = DT_NOCLIP; int opcode = flags & 0xf; int len = wp; if ((opcode == DST_TEXT || opcode == DST_PREFIXTEXT) && len == 0) { /* The string is '\0' terminated */ - if (lp == 0) return FALSE; + if (lp == 0) return; if (unicode) len = StringUtil.strlenW(lp); else len = StringUtil.strlenA(lp); } - int retval = 0; + int retval; /* Find out what size the image has if not given by caller */ if (cx == 0 || cy == 0) { WinSize s = new WinSize(); @@ -746,13 +743,13 @@ static private int UITOOLS_DrawState(int hdc, int hbr, int func, int lp, int wp, retval = WinFont.GetTextExtentPoint32W(hdc, lp, len, lpSize); else retval = WinFont.GetTextExtentPoint32A(hdc, lp, len, lpSize); - if (retval == 0) return FALSE; + if (retval == 0) return; break; } case DST_ICON: { WinIcon icon = WinIcon.get(lp); if (icon == null) - return FALSE; + return; s.cx = icon.cx; s.cy = icon.cy; break; @@ -760,13 +757,13 @@ static private int UITOOLS_DrawState(int hdc, int hbr, int func, int lp, int wp, case DST_BITMAP: { WinBitmap bitmap = WinBitmap.get(lp); if (bitmap == null) - return FALSE; + return; s.cx = bitmap.getWidth(); s.cy = bitmap.getHeight(); break; } case DST_COMPLEX: /* cx and cy must be set in this mode */ - return FALSE; + return; } if (cx == 0) cx = s.cx; @@ -786,32 +783,32 @@ static private int UITOOLS_DrawState(int hdc, int hbr, int func, int lp, int wp, /* For DSS_NORMAL we just jam in the image and return */ if ((flags & 0x7ff0) == DSS_NORMAL) { - return UITOOLS_DrawStateJam(hdc, opcode, func, lp, len, rc, dtflags, unicode); + UITOOLS_DrawStateJam(hdc, opcode, func, lp, len, rc, dtflags, unicode); + return; } /* For all other states we need to convert the image to B/W in a local bitmap */ /* before it is displayed */ int fg = WinDC.SetTextColor(hdc, RGB(0, 0, 0)); int bg = WinDC.SetBkColor(hdc, RGB(255, 255, 255)); - int hbm = NULL; + int hbm; int hbmsave = NULL; int hbrtmp = 0; int memdc = NULL; int hbsave = NULL; - retval = FALSE; /* assume failure */ /* From here on we must use "goto cleanup" when something goes wrong */ hbm = WinBitmap.CreateBitmap(cx, cy, 1, 32, NULL); try { - if (hbm == 0) return FALSE; + if (hbm == 0) return; memdc = WinDC.CreateCompatibleDC(hdc); - if (memdc == 0) return FALSE; + if (memdc == 0) return; hbmsave = WinDC.SelectObject(memdc, hbm); - if (hbmsave == 0) return FALSE; + if (hbmsave == 0) return; rc.left = rc.top = 0; rc.right = cx; rc.bottom = cy; - if (WinDC.FillRect(memdc, rc.allocTemp(), GdiObj.GetStockObject(WHITE_BRUSH)) == 0) return FALSE; + if (WinDC.FillRect(memdc, rc.allocTemp(), GdiObj.GetStockObject(WHITE_BRUSH)) == 0) return; WinDC.SetBkColor(memdc, RGB(255, 255, 255)); WinDC.SetTextColor(memdc, RGB(0, 0, 0)); int hfsave = WinDC.SelectObject(memdc, GdiObj.GetCurrentObject(hdc, OBJ_FONT)); @@ -819,18 +816,18 @@ static private int UITOOLS_DrawState(int hdc, int hbr, int func, int lp, int wp, /* DST_COMPLEX may draw text as well, * so we must be sure that correct font is selected */ - if (hfsave == 0 && (opcode <= DST_PREFIXTEXT)) return FALSE; + if (hfsave == 0 && (opcode <= DST_PREFIXTEXT)) return; int tmp = UITOOLS_DrawStateJam(memdc, opcode, func, lp, len, rc, dtflags, unicode); if (hfsave != 0) WinDC.SelectObject(memdc, hfsave); - if (tmp == 0) return FALSE; + if (tmp == 0) return; /* This state cause the image to be dithered */ if ((flags & DSS_UNION) != 0) { hbsave = WinDC.SelectObject(memdc, StaticData.SYSCOLOR_55AABrush); - if (hbsave == 0) return FALSE; + if (hbsave == 0) return; tmp = WinDC.PatBlt(memdc, 0, 0, cx, cy, 0x00FA0089); WinDC.SelectObject(memdc, hbsave); - if (tmp == 0) return FALSE; + if (tmp == 0) return; } if ((flags & DSS_DISABLED) != 0) @@ -840,10 +837,10 @@ else if ((flags & DSS_DEFAULT) != 0) /* Draw light or dark shadow */ if ((flags & (DSS_DISABLED | DSS_DEFAULT)) != 0) { - if (hbrtmp == 0) return FALSE; + if (hbrtmp == 0) return; hbsave = WinDC.SelectObject(hdc, hbrtmp); - if (hbsave == 0) return FALSE; - if (BitBlt.BitBlt(hdc, x + 1, y + 1, cx, cy, memdc, 0, 0, 0x00B8074A) == 0) return FALSE; + if (hbsave == 0) return; + if (BitBlt.BitBlt(hdc, x + 1, y + 1, cx, cy, memdc, 0, 0, 0x00B8074A) == 0) return; WinDC.SelectObject(hdc, hbsave); GdiObj.DeleteObject(hbrtmp); hbrtmp = 0; @@ -851,16 +848,16 @@ else if ((flags & DSS_DEFAULT) != 0) if ((flags & DSS_DISABLED) != 0) { hbr = hbrtmp = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); - if (hbrtmp == 0) return FALSE; + if (hbrtmp == 0) return; } else if (hbr == 0) { hbr = GdiObj.GetStockObject(BLACK_BRUSH); } hbsave = WinDC.SelectObject(hdc, hbr); - if (BitBlt.BitBlt(hdc, x, y, cx, cy, memdc, 0, 0, 0x00B8074A) == 0) return FALSE; + if (BitBlt.BitBlt(hdc, x, y, cx, cy, memdc, 0, 0, 0x00B8074A) == 0) { + } - return TRUE; /* We succeeded */ } finally { WinDC.SetTextColor(hdc, fg); WinDC.SetBkColor(hdc, bg); @@ -873,25 +870,27 @@ else if ((flags & DSS_DEFAULT) != 0) } } - static int UITOOLS95_DrawFrameButton(int hdc, int rc, int uState) { + static void UITOOLS95_DrawFrameButton(int hdc, int rc, int uState) { switch (uState & 0xff) { case DFCS_BUTTONPUSH: - return UITOOLS95_DFC_ButtonPush(hdc, rc, uState); + UITOOLS95_DFC_ButtonPush(hdc, rc, uState); + return; case DFCS_BUTTONCHECK: case DFCS_BUTTON3STATE: - return UITOOLS95_DFC_ButtonCheck(hdc, rc, uState); + UITOOLS95_DFC_ButtonCheck(hdc, rc, uState); + return; case DFCS_BUTTONRADIOIMAGE: case DFCS_BUTTONRADIOMASK: case DFCS_BUTTONRADIO: - return UITOOLS95_DFC_ButtonRadio(hdc, rc, uState); + UITOOLS95_DFC_ButtonRadio(hdc, rc, uState); + return; default: log("Invalid button state=0x" + Ptr.toString(uState)); } - return FALSE; } /** @@ -1023,7 +1022,7 @@ static int UITOOLS_MakeSquareRect(int s, WinRect dst) { WinRect src = new WinRect(s); int Width = src.width(); int Height = src.height(); - int SmallDiam = Width > Height ? Height : Width; + int SmallDiam = Math.min(Width, Height); dst.copy(src); @@ -1126,7 +1125,7 @@ else if ((uFlags & 0xff) == DFCS_BUTTONRADIOMASK) if ((uFlags & DFCS_CHECKED) != 0) { i = 6 * SmallDiam / 16; - i = i < 1 ? 1 : i; + i = Math.max(i, 1); myr.left = xc - i + i / 2; myr.right = xc + i / 2; myr.top = yc - i + i / 2; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPLACEMENT.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPLACEMENT.java index 8c1accea..f2603325 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPLACEMENT.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPLACEMENT.java @@ -18,10 +18,10 @@ public void write(int address) { rcNormalPosition.write(address); } - int length = SIZE; + final int length = SIZE; int flags; int showCmd; WinPoint ptMinPosition = new WinPoint(); - WinPoint ptMaxPosition = new WinPoint(); - WinRect rcNormalPosition = new WinRect(); + final WinPoint ptMaxPosition = new WinPoint(); + final WinRect rcNormalPosition = new WinRect(); } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPOS.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPOS.java index a3107291..757c8bb0 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPOS.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WINDOWPOS.java @@ -25,7 +25,7 @@ public void write(int address) { writed(address, y); address+=4; writed(address, cx); address+=4; writed(address, cy); address+=4; - writed(address, flags); address+=4; + writed(address, flags); } public int allocTemp() { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinClass.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinClass.java index f3a4517c..7c855d9e 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinClass.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinClass.java @@ -24,7 +24,7 @@ static public WinClass create(int id) { static public WinClass get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinClass)) + if (!(object instanceof WinClass)) return null; return (WinClass)object; } @@ -37,7 +37,7 @@ static public int GetClassInfoA(int hInstance, int lpClassName, int lpWndClass) winClass = WinClass.get(lpClassName); } else { String name = StringUtil.getString(lpClassName); - winClass = (WinClass)WinSystem.getCurrentProcess().classNames.get(name.toLowerCase()); + winClass = WinSystem.getCurrentProcess().classNames.get(name.toLowerCase()); } if (winClass == null) { SetLastError(Error.ERROR_CLASS_DOES_NOT_EXIST); @@ -53,7 +53,7 @@ static public int GetClassLongA(int hWnd, int nIndex) { if (window == null) return 0; if (nIndex>=0) { - Integer old = (Integer)window.winClass.extra.get(new Integer(nIndex)); + Integer old = (Integer)window.winClass.extra.get(nIndex); if (old != null) return old; return 0; @@ -119,10 +119,10 @@ static public int SetClassLongA(int hWnd, int nIndex, int dwNewLong) { if (window == null) return 0; if (nIndex>=0) { - Integer old = (Integer)window.winClass.extra.get(new Integer(nIndex)); - window.winClass.extra.put(new Integer(nIndex), new Integer(dwNewLong)); + Integer old = (Integer)window.winClass.extra.get(nIndex); + window.winClass.extra.put(nIndex, dwNewLong); if (old != null) - return old.intValue(); + return old; return 0; } int result = 0; @@ -269,7 +269,7 @@ public void write(int address) { writed(address, pMenuName);address+=4; if (pClassName == 0) pClassName = StringUtil.allocateA(className); - writed(address, pClassName);address+=4; + writed(address, pClassName); } public void onFree() { @@ -277,7 +277,7 @@ public void onFree() { } public WinDC dc; - public int id; + public final int id; public int style; public int eip; public int hInstance; @@ -290,5 +290,5 @@ public void onFree() { public int hIconSm; public int cbClsExtra; public int cbWndExtra; - private Hashtable extra = new Hashtable(); + private final Hashtable extra = new Hashtable(); } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinCursor.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinCursor.java index 4aaad820..0ff9def0 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinCursor.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinCursor.java @@ -22,8 +22,7 @@ public class WinCursor extends WinObject { static public WinCursor create(int instance, int name) { - WinCursor cursor = new WinCursor(nextObjectId(), instance, name); - return cursor; + return new WinCursor(nextObjectId(), instance, name); } static public WinCursor get(int handle) { @@ -31,7 +30,7 @@ static public WinCursor get(int handle) { if (object == null && (handle>=32512 && handle<=32651)) { object = new WinCursor(handle, 0, handle); } - if (object == null || !(object instanceof WinCursor)) + if (!(object instanceof WinCursor)) return null; return (WinCursor)object; } @@ -42,7 +41,7 @@ static public int LoadCursorA(int hInstance, int lpCursorName) { } // HCURSOR WINAPI SetCursor(HCURSOR hCursor) - static public int SetCursor(int hCursor) { + static public void SetCursor(int hCursor) { int result = StaticData.hCursor; StaticData.hCursor = hCursor; if (hCursor == 0) @@ -51,7 +50,6 @@ static public int SetCursor(int hCursor) { if (StaticData.showCursorCount>=0) Main.GFX_SetCursor(WinCursor.get(hCursor).cursor); } - return hCursor; } // int WINAPI ShowCursor(BOOL bShow) @@ -70,7 +68,7 @@ static public int ShowCursor(int bShow) { return StaticData.showCursorCount; } - static private Hashtable cursors = new Hashtable(); + static private final Hashtable cursors = new Hashtable(); Cursor cursor = null; @@ -119,7 +117,7 @@ static private BufferedImage loadCursor(LittleEndian is) { } static public Image[] loadCursorFromStream(InputStream input, Vector hotspots) { - byte[] buffer = null; + byte[] buffer; try { buffer = StreamHelper.readStream(input); } catch (Exception e) { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinDialog.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinDialog.java index 75eca80b..8fe017c2 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinDialog.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinDialog.java @@ -273,7 +273,7 @@ public static int GetDlgItem(int hwndDlg, int id) { WinWindow wnd = WinWindow.get(hwndDlg); if (wnd == null) return 0; - Iterator children = wnd.getChildren(); + Iterator children = wnd.getChildren(); while (children.hasNext()) { WinWindow child = (WinWindow) children.next(); if (WinWindow.GetWindowLongA(child.handle, GWL_ID) == id) @@ -762,19 +762,14 @@ static private int DIALOG_CreateIndirect(int hInst, int dlgTemplate, int owner, if (template.helpId != 0) window.helpContext = template.helpId; - if (unicode) { - // WinWindow.SetWindowLongW( hwnd, DWLP_DLGPROC, dlgProc ); - Win.panic("DIALOG_CreateIndirect unicode not implemented yet"); - } else { - WinWindow.SetWindowLongA(hwnd, DWLP_DLGPROC, dlgProc); - } + WinWindow.SetWindowLongA(hwnd, DWLP_DLGPROC, dlgProc); if (dlgProc != 0 && dlgInfo.hUserFont != 0) Message.SendMessageA(hwnd, WM_SETFONT, dlgInfo.hUserFont, 0); /* Create controls */ - if (DIALOG_CreateControls32(hwnd, dlgTemplate, template, hInst, unicode)) { + if (DIALOG_CreateControls32(hwnd, dlgTemplate, template, hInst, false)) { /* Send initialisation messages and set focus */ if (dlgProc != 0) { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinIcon.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinIcon.java index 0a002d70..7b77e0ff 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinIcon.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinIcon.java @@ -4,13 +4,12 @@ public class WinIcon extends WinObject { static public WinIcon create(int instance, int name) { - WinIcon icon = new WinIcon(nextObjectId()); - return icon; + return new WinIcon(nextObjectId()); } static public WinIcon get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinIcon)) + if (!(object instanceof WinIcon)) return null; return (WinIcon)object; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinMenu.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinMenu.java index b8631642..eed95857 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinMenu.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinMenu.java @@ -10,7 +10,7 @@ static public WinMenu create() { static public WinMenu get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinMenu)) + if (!(object instanceof WinMenu)) return null; return (WinMenu)object; } @@ -31,12 +31,11 @@ static public int CreatePopupMenu() { } // BOOL WINAPI DestroyMenu(HMENU hMenu) - static public int DestroyMenu(int hMenu) { + static public void DestroyMenu(int hMenu) { WinMenu menu = WinMenu.get(hMenu); if (menu == null) - return FALSE; + return; menu.close(); - return TRUE; } // BOOL WINAPI DrawMenuBar(HWND hWnd) @@ -50,8 +49,7 @@ static public int EnableMenuItem(int hMenu, int uIDEnableItem, int uEnable) { } // BOOL WINAPI EndMenu(void) - static public int EndMenu() { - return TRUE; + static public void EndMenu() { } // HMENU WINAPI GetMenu(HWND hWnd) diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinPos.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinPos.java index 8fecce64..9337e50d 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinPos.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinPos.java @@ -9,14 +9,13 @@ public class WinPos extends WinAPI { // BOOL ClientToScreen(HWND hWnd, LPPOINT lpPoint) - public static int ClientToScreen(int hWnd, int lpPoint) { + public static void ClientToScreen(int hWnd, int lpPoint) { WinWindow window = WinWindow.get(hWnd); if (window == null) - return FALSE; + return; WinPoint offset = window.getScreenOffset(); writed(lpPoint, readd(lpPoint)+offset.x); writed(lpPoint+4, readd(lpPoint+4)+offset.y); - return TRUE; } // BOOL WINAPI IsIconic(HWND hWnd) @@ -25,19 +24,15 @@ public static int IsIconic(int hWnd) { } // BOOL WINAPI GetClientRect(HWND hWnd, LPRECT lpRect) - public static int GetClientRect(int hWnd, int lpRect) { + public static void GetClientRect(int hWnd, int lpRect) { WinRect rect = new WinRect(); if (WinWindow.WIN_GetRectangles(hWnd, COORDS_CLIENT, null, rect)) { rect.write(lpRect); - return TRUE; } - return FALSE; } - public static int WIN_GetClientRect(int hWnd, WinRect rect) { + public static void WIN_GetClientRect(int hWnd, WinRect rect) { if (WinWindow.WIN_GetRectangles(hWnd, COORDS_CLIENT, null, rect)) { - return TRUE; } - return FALSE; } // BOOL WINAPI GetWindowPlacement(HWND hWnd, WINDOWPLACEMENT *lpwndpl) @@ -188,7 +183,7 @@ public static int SetWindowPos(int hWnd, int hWndInsertAfter, int X, int Y, int boolean zOrderChanged = false; if ((uFlags & SWP_NOZORDER)==0) { - int hParent = 0; + int hParent; if (window.parent != 0) hParent = window.parent ; else // if (window.owner == 0) @@ -279,7 +274,7 @@ else if ((uFlags & SWP_SHOWWINDOW)!=0) { } /* And last, send the WM_WINDOWPOSCHANGED message */ - if (geometryChanged || zOrderChanged) { + if (geometryChanged) { /* WM_WINDOWPOSCHANGED is sent even if SWP_NOSENDCHANGING is set and always contains final window position. */ @@ -393,7 +388,7 @@ public static int ShowWindow(int hWnd, int nCmdShow) { if (hWnd == hFocus) { Focus.SetFocus(parent); } - return BOOL(wasVisible); + return BOOL(true); } // if (IsIconic(hWnd)!=0) @@ -759,8 +754,7 @@ static private void WINPOS_GetMinMaxInfo(WinWindow wndPtr, WinPoint maxSize, Win // if (maxTrack) *maxTrack = MinMax.ptMaxTrackSize; } - static private boolean WINPOS_ShowIconTitle(WinWindow wndPtr, boolean bShow) { - return false; + static private void WINPOS_ShowIconTitle(WinWindow wndPtr, boolean bShow) { // if (!GetPropA( hwnd, "__wine_x11_managed" )) // { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinText.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinText.java index bab9e010..7e442dfc 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinText.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinText.java @@ -84,7 +84,7 @@ static public int DrawTextEx(int hdc, int lpchText, int i_count, int lpRect, int else lh = tm.tmHeight; - if (text.length() == 0) { + if (text.isEmpty()) { if ((flags & DT_CALCRECT) != 0) { rect.right = rect.left; if ((flags & DT_SINGLELINE) != 0) @@ -629,7 +629,7 @@ static void TEXT_PathEllipsify(int hdc, int str, int max_len, IntRef len_str, in int lastBkSlash = StringUtil.strrchr(str, BACK_SLASH); int lastFwdSlash = StringUtil.strrchr(str, FORWARD_SLASH); - int lastSlash = lastBkSlash > lastFwdSlash ? lastBkSlash : lastFwdSlash; + int lastSlash = Math.max(lastBkSlash, lastFwdSlash); if (lastSlash == 0) lastSlash = str; len_trailing = len_str.value - (lastSlash - str); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinWindow.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinWindow.java index d4bfd42e..57904989 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinWindow.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/WinWindow.java @@ -20,7 +20,7 @@ static public WinWindow create() { static public WinWindow get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinWindow)) + if (!(object instanceof WinWindow)) return null; return (WinWindow)object; } @@ -164,7 +164,7 @@ static public int CreateWindowExA(int dwExStyle, int lpClassName, int lpWindowNa // :TODO: min/max stuff } - wndPtr.rectWindow.set(cs.x, cs.y, +cs.x+cs.cx, cs.y+cs.cy); + wndPtr.rectWindow.set(cs.x, cs.y, cs.x +cs.cx, cs.y+cs.cy); System.out.println(wndPtr.handle+" "+wndPtr.rectWindow); wndPtr.rectClient=wndPtr.rectWindow.copy(); @@ -227,16 +227,16 @@ static public int CreateWindowExA(int dwExStyle, int lpClassName, int lpWindowNa } // BOOL WINAPI DestroyWindow(HWND hWnd) - public static int DestroyWindow(int hWnd) { + public static void DestroyWindow(int hWnd) { WinWindow window = WinWindow.get(hWnd); if (window == null) { - return FALSE; + return; } if (hWnd == GetDesktopWindow() || window.getThread().getProcess() != WinSystem.getCurrentProcess()) { SetLastError(ERROR_ACCESS_DENIED); - return FALSE; + return; } - if (Hook.HOOK_CallHooks(WH_CBT, HCBT_DESTROYWND, hWnd, 0)!=0) return FALSE; + if (Hook.HOOK_CallHooks(WH_CBT, HCBT_DESTROYWND, hWnd, 0)!=0) return; if (WinMenu.MENU_IsMenuActive() == hWnd) WinMenu.EndMenu(); @@ -251,7 +251,7 @@ public static int DestroyWindow(int hWnd) { /* FIXME: clean up palette - see "Internals" p.352 */ } - if (IsWindow(hWnd)==0) return TRUE; + if (IsWindow(hWnd)==0) return; /* Hide the window */ if ((GetWindowLongA(hWnd, GWL_STYLE ) & WS_VISIBLE)!=0) { @@ -262,7 +262,7 @@ public static int DestroyWindow(int hWnd) { WinPos.SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_HIDEWINDOW ); } - if (IsWindow(hWnd)==0) return TRUE; + if (IsWindow(hWnd)==0) return; /* Recursively destroy owned windows */ if (!is_child) @@ -288,21 +288,20 @@ public static int DestroyWindow(int hWnd) { /* Send destroy messages */ WIN_SendDestroyMsg(hWnd); - if (IsWindow(hWnd)==0) return TRUE; + if (IsWindow(hWnd)==0) return; if (Clipboard.GetClipboardOwner() == hWnd) Clipboard.CLIPBOARD_ReleaseOwner(); /* Destroy the window storage */ WIN_DestroyWindow(hWnd); - return TRUE; } // BOOL WINAPI EnableWindow(HWND hWnd, BOOL bEnable) - public static int EnableWindow(int hWnd, int bEnable) { + public static void EnableWindow(int hWnd, int bEnable) { if (hWnd == HWND_BROADCAST) { SetLastError(Error.ERROR_INVALID_PARAMETER); - return FALSE; + return; } boolean isDisabled = IsWindowEnabled(hWnd)==0; if (bEnable != 0 && isDisabled) { @@ -327,7 +326,6 @@ public static int EnableWindow(int hWnd, int bEnable) { Message.SendMessageA(hWnd, WM_ENABLE, FALSE, 0); } } - return BOOL(isDisabled); } // BOOL WINAPI EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) @@ -386,8 +384,8 @@ public static int FindWindowExA(int hwndParent, int hwndChildAfter, int lpszClas while (children.hasNext()) { WinWindow child = children.next(); if (hwndChildAfter != 0) { - if (child.handle == hwndChildAfter) - hwndChildAfter = 0; + if (child.handle == hwndChildAfter) { + } } else { if (winClass != null && child.winClass != winClass) continue; @@ -517,7 +515,7 @@ static public int GetWindow(int hwnd, int rel) { case GW_OWNER: return wndPtr.owner; case GW_CHILD: - if (wndPtr.children.size()==0) + if (wndPtr.children.isEmpty()) return 0; return wndPtr.children.getFirst().handle; } @@ -883,12 +881,12 @@ static private void WIN_SendDestroyMsg(int hwnd) { } } - static public int WIN_DestroyWindow(int hwnd) { + static public void WIN_DestroyWindow(int hwnd) { WinWindow window = WinWindow.get(hwnd); if (window == null) - return 0; + return; - while (window.children.size()>0) { + while (!window.children.isEmpty()) { WinWindow child = window.children.get(0); WIN_DestroyWindow(child.handle); } @@ -909,21 +907,20 @@ static public int WIN_DestroyWindow(int hwnd) { /* free resources associated with the window */ if (IsWindow(hwnd)==0) - return 0; + return; if ((window.dwStyle & (WS_CHILD | WS_POPUP)) != WS_CHILD) { if (window.wIDmenu!=0) WinMenu.DestroyMenu(window.wIDmenu); } if (window.hSysMenu!=0) WinMenu.DestroyMenu(window.hSysMenu); window.close(); - return 0; } private WinWindow(int id) { super(id); } - public WinTimer timer = new WinTimer(handle); + public final WinTimer timer = new WinTimer(handle); public WinRect rectWindow = new WinRect(); public WinRect rectClient = new WinRect(); @@ -945,12 +942,12 @@ private WinWindow(int id) { private int hIconSmall; public int hSysMenu; public int flags; - public WinPoint min_pos = new WinPoint(); - public WinPoint max_pos = new WinPoint(); - public WinRect normal_rect = new WinRect(0, 0, 640, 480); + public final WinPoint min_pos = new WinPoint(); + public final WinPoint max_pos = new WinPoint(); + public final WinRect normal_rect = new WinRect(0, 0, 640, 480); public DialogInfo dlgInfo = null; - private Hashtable extra = new Hashtable(); - public Hashtable props = new Hashtable(); + private final Hashtable extra = new Hashtable<>(); + public final Hashtable props = new Hashtable<>(); public int lastActivePopup; private WinDC dc; WinClass winClass; @@ -958,7 +955,7 @@ private WinWindow(int id) { public boolean isActive = false; public WinRect invalidationRect = null; - public LinkedList children = new LinkedList(); // first one is on top + public final LinkedList children = new LinkedList<>(); // first one is on top // Used by desktop public WinWindow(int id, WinClass winClass, String name) { @@ -1004,11 +1001,9 @@ public boolean needsPainting() { } public WinWindow findWindowFromPoint(int x, int y) { - Iterator i = children.iterator(); - while (i.hasNext()) { - WinWindow child = i.next(); - if ((child.dwStyle & WS_VISIBLE)!=0 && child.rectWindow.contains(x, y)) { - return child.findWindowFromPoint(x-child.rectWindow.left, y-child.rectWindow.top); + for (WinWindow child : children) { + if ((child.dwStyle & WS_VISIBLE) != 0 && child.rectWindow.contains(x, y)) { + return child.findWindowFromPoint(x - child.rectWindow.left, y - child.rectWindow.top); } } return this; @@ -1017,9 +1012,7 @@ public WinWindow findWindowFromPoint(int x, int y) { public int findWindow(String className, String windowName) { if (this.winClass.className.equals(className) || this.name.equals(windowName)) return getHandle(); - Iterator i = children.iterator(); - while (i.hasNext()) { - WinWindow child = i.next(); + for (WinWindow child : children) { int result = child.findWindow(className, windowName); if (result != 0) return result; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Wsprintf.java b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Wsprintf.java index 2129b0a0..1953d426 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/user32/Wsprintf.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/user32/Wsprintf.java @@ -15,9 +15,9 @@ static public int wsprintfA(int lpOut, int lpFmt) { static public String format(String format, boolean wide, int argIndex) { int pos = format.indexOf('%'); if (pos>=0) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); while (pos>=0) { - buffer.append(format.substring(0, pos)); + buffer.append(format, 0, pos); if (pos+10) { + if (!w.isEmpty()) { width = Integer.parseInt(w); } @@ -95,7 +95,7 @@ static public String format(String format, boolean wide, int argIndex) { return buffer.toString(); } } - if (p.length()>0) { + if (!p.isEmpty()) { precision = Integer.parseInt(p); } } @@ -129,9 +129,9 @@ static public String format(String format, boolean wide, int argIndex) { boolean negnumber = false; if (c == 'c') { if (shortValue || wide || longValue) - value = new Character((char) (CPU.CPU_Peek32(argIndex) & 0xFFFF) ).toString(); + value = Character.toString((char) (CPU.CPU_Peek32(argIndex) & 0xFFFF)); else - value = new Character((char) (CPU.CPU_Peek32(argIndex) & 0xFF) ).toString(); + value = Character.toString((char) (CPU.CPU_Peek32(argIndex) & 0xFF)); } else if (c == 's') { if (longValue || wide) value = new LittleEndianFile(CPU.CPU_Peek32(argIndex)).readCStringW(); @@ -151,11 +151,11 @@ static public String format(String format, boolean wide, int argIndex) { } } else if (c == 'x') { if (longValue) { - long l = (CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFl) | CPU.CPU_Peek32(argIndex+1) << 32l; + long l = (CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFL) | (long) CPU.CPU_Peek32(argIndex + 1); argIndex++; value = Long.toString(l, 16); } else { - value = Long.toString(CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFl, 16); + value = Long.toString(CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFL, 16); } negnumber = value.startsWith("-"); if (negnumber) @@ -169,11 +169,11 @@ static public String format(String format, boolean wide, int argIndex) { } } else if (c == 'X') { if (longValue) { - long l = (CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFl) | CPU.CPU_Peek32(argIndex+1) << 32l; + long l = (CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFL) | (long) CPU.CPU_Peek32(argIndex + 1); argIndex++; value = Long.toString(l, 16); } else { - value = Long.toString(CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFl, 16); + value = Long.toString(CPU.CPU_Peek32(argIndex) & 0xFFFFFFFFL, 16); } negnumber = value.startsWith("-"); if (negnumber) @@ -183,9 +183,11 @@ static public String format(String format, boolean wide, int argIndex) { continue; } if (precision>0) { - while (value.length()0) { - while (value.length()0) { - while (value.length()strPrfix.length()+value.length()) { + StringBuilder strPrfixBuilder = new StringBuilder(strPrfix); + StringBuilder valueBuilder = new StringBuilder(value); + while (width> strPrfixBuilder.length()+ valueBuilder.length()) { if (leftPadZero) { - strPrfix+="0"; + strPrfixBuilder.append("0"); } else if (leftJustify) { - value=value+" "; + valueBuilder.append(" "); } else { - strPrfix=" "+strPrfix; + strPrfixBuilder.insert(0, " "); } } + value = valueBuilder.toString(); + strPrfix = strPrfixBuilder.toString(); buffer.append(strPrfix); buffer.append(value); format = format.substring(++pos); diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMCKINFO.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMCKINFO.java index d6ba6f2f..fe011156 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMCKINFO.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMCKINFO.java @@ -17,7 +17,7 @@ public void write(int address) { writed(address, cksize); address+=4; writed(address, fccType); address+=4; writed(address, dwDataOffset); address+=4; - writed(address, dwFlags); address+=4; + writed(address, dwFlags); } public void read(int address) { @@ -25,7 +25,7 @@ public void read(int address) { cksize = readd(address);address+=4; fccType = readd(address);address+=4; dwDataOffset = readd(address);address+=4; - dwFlags = readd(address);address+=4; + dwFlags = readd(address); } public int allocTemp() { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMIOINFO.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMIOINFO.java index 81ccd17b..bac5f317 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMIOINFO.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMIOINFO.java @@ -28,7 +28,7 @@ public void write(int address) { writed(address, adwInfo[2]); address+=4; writed(address, dwReserved1); address+=4; writed(address, dwReserved2); address+=4; - writed(address, hmmio); address+=4; + writed(address, hmmio); } public void read(int address) { @@ -49,7 +49,7 @@ public void read(int address) { adwInfo[2] = readd(address);address+=4; dwReserved1 = readd(address);address+=4; dwReserved2 = readd(address);address+=4; - hmmio = readd(address);address+=4; + hmmio = readd(address); } public int allocTemp() { @@ -70,7 +70,7 @@ public int allocTemp() { public int pchEndWrite; public int lBufOffset; public int lDiskOffset; - public int[] adwInfo = new int[3]; + public final int[] adwInfo = new int[3]; public int dwReserved1; public int dwReserved2; public int hmmio; diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMTime.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMTime.java index 8ca4cff9..4e9b5980 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMTime.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/MMTime.java @@ -29,7 +29,7 @@ public class MMTime extends WinAPI { static final public int TIME_CALLBACK_EVENT_PULSE = 0x0020; /* callback is event - use PulseEvent */ static final public int TIME_KILL_SYNCHRONOUS = 0x0100; - static private Callback.Handler mmTimerThread = new HandlerBase() { + static private final Callback.Handler mmTimerThread = new HandlerBase() { public String getName() { return "mmTimerThread"; } @@ -61,11 +61,11 @@ public void onCall() { }; static private class MMTimer extends Thread { - int delay; - int callback; - int dwUser; - int flags; - int id; + final int delay; + final int callback; + final int dwUser; + final int flags; + final int id; final WinThread thread; boolean bExit = false; @@ -108,7 +108,9 @@ public void close() { public void run() { while(!bExit) { - try {sleep(delay);} catch (Exception e) {} + try {sleep(delay);} catch (Exception e) { + throw new RuntimeException(e); + } if (!bExit) { WinEvent event = WinEvent.get(callback); if (event == null) @@ -126,7 +128,7 @@ public void run() { } } - static private Hashtable timers = new Hashtable(); + static private final Hashtable timers = new Hashtable<>(); // MMRESULT timeBeginPeriod(UINT uPeriod) static public int timeBeginPeriod(int wPeriod) { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/Mmio.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/Mmio.java index f3880116..5f66d232 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/Mmio.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/Mmio.java @@ -431,16 +431,15 @@ static public int mmioSetInfo(int hmmio, int p, int uFlags) { return MMSYSERR_NOERROR; } - static public int mmioWrite(int hmmio, int pch, int cch) { + static public void mmioWrite(int hmmio, int pch, int cch) { WinMMIO wm = WinMMIO.get(hmmio); if (wm == null) - return -1; + return; int count; if (wm.info.cchBuffer != 0) { int bytesW = 0; - count = 0; while (cch != 0) { if (wm.info.pchNext != wm.info.pchEndWrite) { count = wm.info.pchEndWrite - wm.info.pchNext; @@ -469,12 +468,10 @@ static public int mmioWrite(int hmmio, int pch, int cch) { MMIO_GrabNextBuffer(wm, FALSE); } else break; } - count = bytesW; } else { count = wm.ioProc.proc(wm.info, MMIOM_WRITE, pch, cch); wm.info.lBufOffset = wm.info.lDiskOffset; } - return count; } /** @@ -508,21 +505,23 @@ static int MMIO_ParseExtA(int szFileName) { } static private int mmioStringToFOURCCA(String s) { - while (s.length() < 4) { - s = s + " "; + StringBuilder sBuilder = new StringBuilder(s); + while (sBuilder.length() < 4) { + sBuilder.append(" "); } + s = sBuilder.toString(); byte[] data = s.getBytes(); return mmioFOURCC(data[0], data[1], data[2], data[3]); } - static public interface IOProc { - public int proc(MMIOINFO lpmmioinfo, int uMessage, int lParam1, int lParam2); + public interface IOProc { + int proc(MMIOINFO lpmmioinfo, int uMessage, int lParam1, int lParam2); } - static private Hashtable defaultProcs = new Hashtable(); + static private final Hashtable defaultProcs = new Hashtable<>(); static private class CustomIOProc implements IOProc { - int pIOProc; + final int pIOProc; public CustomIOProc(int pIOProc) { this.pIOProc = pIOProc; @@ -536,128 +535,126 @@ public int proc(MMIOINFO lpmmioinfo, int uMessage, int lParam1, int lParam2) { } } - static private IOProc mmioDosIOProc = new IOProc() { - public int proc(MMIOINFO lpmmioinfo, int uMessage, int lParam1, int lParam2) { - int ret = MMSYSERR_NOERROR; - - switch (uMessage) { - case MMIOM_OPEN: { - /* Parameters: - * lParam1 = szFileName parameter from mmioOpen - * lParam2 = reserved - * Returns: zero on success, error code on error - * NOTE: lDiskOffset automatically set to zero - */ - int szFileName = lParam1; - - if ((lpmmioinfo.dwFlags & MMIO_GETTEMP) != 0) { - warn("MMIO_GETTEMP not implemented\n"); - return MMIOERR_CANNOTOPEN; - } - - /* if filename NULL, assume open file handle in adwInfo[0] */ - if (szFileName != 0) { - String name = StringUtil.getString(szFileName); - FilePath file = WinSystem.getCurrentProcess().getFile(name); - lpmmioinfo.adwInfo[0] = HFILE_ERROR; - if (file.exists()) { - try { - WinFile winFile = WinFile.create(file, false, 0, 0); - if (winFile != null) - lpmmioinfo.adwInfo[0] = winFile.handle; - } catch (Exception e) { - } - } - } - if (lpmmioinfo.adwInfo[0] == HFILE_ERROR) - return MMIOERR_FILENOTFOUND; + static private final IOProc mmioDosIOProc = (lpmmioinfo, uMessage, lParam1, lParam2) -> { + int ret = MMSYSERR_NOERROR; + + switch (uMessage) { + case MMIOM_OPEN: { + /* Parameters: + * lParam1 = szFileName parameter from mmioOpen + * lParam2 = reserved + * Returns: zero on success, error code on error + * NOTE: lDiskOffset automatically set to zero + */ + + if ((lpmmioinfo.dwFlags & MMIO_GETTEMP) != 0) { + warn("MMIO_GETTEMP not implemented\n"); + return MMIOERR_CANNOTOPEN; } - break; - case MMIOM_CLOSE: - /* Parameters: - * lParam1 = wFlags parameter from mmioClose - * lParam2 = unused - * Returns: zero on success, error code on error - */ - if ((lParam1 & MMIO_FHOPEN) == 0) { - WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); - if (file != null) { - file.close(); + /* if filename NULL, assume open file handle in adwInfo[0] */ + if (lParam1 != 0) { + String name = StringUtil.getString(lParam1); + FilePath file = WinSystem.getCurrentProcess().getFile(name); + lpmmioinfo.adwInfo[0] = HFILE_ERROR; + if (file.exists()) { + try { + WinFile winFile = WinFile.create(file, false, 0, 0); + if (winFile != null) + lpmmioinfo.adwInfo[0] = winFile.handle; + } catch (Exception e) { + throw new RuntimeException(e); } } - break; - - case MMIOM_READ: - /* Parameters: - * lParam1 = huge pointer to read buffer - * lParam2 = number of bytes to read - * Returns: number of bytes read, 0 for EOF, -1 for error (error code - * in wErrorRet) - */ - { - WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); - if (file != null) { - ret = file.read(lParam1, lParam2); - if (ret != -1) - lpmmioinfo.lDiskOffset += ret; - } } - break; - - case MMIOM_WRITE: - case MMIOM_WRITEFLUSH: - /* no internal buffering, so WRITEFLUSH handled same as WRITE */ - - /* Parameters: - * lParam1 = huge pointer to write buffer - * lParam2 = number of bytes to write - * Returns: number of bytes written, -1 for error (error code in - * wErrorRet) - */ - { + if (lpmmioinfo.adwInfo[0] == HFILE_ERROR) + return MMIOERR_FILENOTFOUND; + } + break; + + case MMIOM_CLOSE: + /* Parameters: + * lParam1 = wFlags parameter from mmioClose + * lParam2 = unused + * Returns: zero on success, error code on error + */ + if ((lParam1 & MMIO_FHOPEN) == 0) { WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); if (file != null) { - ret = file.write(lParam1, lParam2); - if (ret != -1) - lpmmioinfo.lDiskOffset += ret; + file.close(); } } break; - case MMIOM_SEEK: - /* Parameters: - * lParam1 = new position - * lParam2 = from whence to seek (SEEK_SET, SEEK_CUR, SEEK_END) - * Returns: new file postion, -1 on error - */ - { - WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); - if (file != null) { - ret = (int) file.seek(lParam1, lParam2); - if (ret != -1) - lpmmioinfo.lDiskOffset = ret; - } + case MMIOM_READ: + /* Parameters: + * lParam1 = huge pointer to read buffer + * lParam2 = number of bytes to read + * Returns: number of bytes read, 0 for EOF, -1 for error (error code + * in wErrorRet) + */ + { + WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); + if (file != null) { + ret = file.read(lParam1, lParam2); + if (ret != -1) + lpmmioinfo.lDiskOffset += ret; + } + } + break; + + case MMIOM_WRITE: + case MMIOM_WRITEFLUSH: + /* no internal buffering, so WRITEFLUSH handled same as WRITE */ + + /* Parameters: + * lParam1 = huge pointer to write buffer + * lParam2 = number of bytes to write + * Returns: number of bytes written, -1 for error (error code in + * wErrorRet) + */ + { + WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); + if (file != null) { + ret = file.write(lParam1, lParam2); + if (ret != -1) + lpmmioinfo.lDiskOffset += ret; + } + } + break; + + case MMIOM_SEEK: + /* Parameters: + * lParam1 = new position + * lParam2 = from whence to seek (SEEK_SET, SEEK_CUR, SEEK_END) + * Returns: new file postion, -1 on error + */ + { + WinFile file = WinFile.get(lpmmioinfo.adwInfo[0]); + if (file != null) { + ret = (int) file.seek(lParam1, lParam2); + if (ret != -1) + lpmmioinfo.lDiskOffset = ret; } - return ret; - - case MMIOM_RENAME: - /* Parameters: - * lParam1 = old name - * lParam2 = new name - * Returns: zero on success, non-zero on failure - */ - if (WinPath.MoveFileA(lParam1, lParam2) == 0) - ret = MMIOERR_FILENOTFOUND; - break; - - default: - warn("unexpected MMIO message " + uMessage); - return 0; } - return ret; + + case MMIOM_RENAME: + /* Parameters: + * lParam1 = old name + * lParam2 = new name + * Returns: zero on success, non-zero on failure + */ + if (WinPath.MoveFileA(lParam1, lParam2) == 0) + ret = MMIOERR_FILENOTFOUND; + break; + + default: + warn("unexpected MMIO message " + uMessage); + return 0; } + + return ret; }; static int MMIO_SetBuffer(WinMMIO wm, int pchBuffer, int cchBuffer, int uFlags) { diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/PlaySound.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/PlaySound.java index 3bf9916b..93ca76bd 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/PlaySound.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/PlaySound.java @@ -27,7 +27,7 @@ static private int MULTIMEDIA_PlaySound(int pszSound, int hmod, int fdwSound, bo Vector playSound = WinSystem.getCurrentProcess().playSound; /* SND_NOWAIT is ignored in w95/2k/xp. */ - if ((fdwSound & SND_NOSTOP)!=0 && playSound.size()!=0) + if ((fdwSound & SND_NOSTOP)!=0 && !playSound.isEmpty()) return FALSE; /* alloc internal structure, if we need to play something */ @@ -35,8 +35,8 @@ static private int MULTIMEDIA_PlaySound(int pszSound, int hmod, int fdwSound, bo ps = new ActivePlaySound(pszSound, hmod, fdwSound, bUnicode); } - for (int i=0;i buffers = new Vector(); - WAVEFORMATEX format; + final Vector buffers = new Vector<>(); + final WAVEFORMATEX format; boolean exit = false; SourceDataLine line; public void run() { while (!exit) { - while (buffers.size()>0) { + while (!buffers.isEmpty()) { WAVEHDR hdr = buffers.remove(0); line.write(hdr.data, 0, hdr.data.length); hdr.dwFlags &= ~WAVEHDR.WHDR_INQUEUE; @@ -80,8 +78,10 @@ public void run() { hdr.writeFlags(); } synchronized (buffers) { - if (buffers.size()==0 && !exit) - try {buffers.wait();} catch (Exception e){} + if (buffers.isEmpty() && !exit) + try {buffers.wait();} catch (Exception e) { + throw new RuntimeException(e); + } } } line.stop(); @@ -99,7 +99,9 @@ public static int waveOutClose(int hwo) { synchronized(obj.thread.buffers) { obj.thread.buffers.notify(); } - try {obj.thread.join();} catch (Exception e) {} + try {obj.thread.join();} catch (Exception e) { + throw new RuntimeException(e); + } obj.close(); return WinMM.MMSYSERR_NOERROR; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMM.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMM.java index 4e96c427..7b773da7 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMM.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMM.java @@ -55,7 +55,7 @@ public static int unknown() { // :TODO: This code can use a lot of work // MCIERROR mciSendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam) - private Callback.Handler mciSendCommandA = new HandlerBase() { + private final Callback.Handler mciSendCommandA = new HandlerBase() { static final private int MCI_OPEN_SHAREABLE = 0x00000100; static final private int MCI_OPEN_ELEMENT = 0x00000200; static final private int MCI_OPEN_ALIAS = 0x00000400; @@ -201,7 +201,7 @@ else if (deviceType.equalsIgnoreCase("cdaudio")) { }; // UINT mixerGetNumDevs(void) - private Callback.Handler mixerGetNumDevs = new HandlerBase() { + private final Callback.Handler mixerGetNumDevs = new HandlerBase() { public java.lang.String getName() { return "WinMM.mixerGetNumDevs"; } diff --git a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMMIO.java b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMMIO.java index 8711a57f..73eb208e 100644 --- a/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMMIO.java +++ b/jdosbox-win/src/main/java/jdos/win/builtin/winmm/WinMMIO.java @@ -9,7 +9,7 @@ static public WinMMIO create() { static public WinMMIO get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinMMIO)) + if (!(object instanceof WinMMIO)) return null; return (WinMMIO)object; } @@ -22,7 +22,7 @@ protected void onFree() { super.onFree(); } - public MMIOINFO info = new MMIOINFO(); + public final MMIOINFO info = new MMIOINFO(); public boolean bTmpIOProc; public Mmio.IOProc ioProc; public boolean bBufferLoaded; diff --git a/jdosbox-win/src/main/java/jdos/win/controls/StaticWindow.java b/jdosbox-win/src/main/java/jdos/win/controls/StaticWindow.java index 7884a51c..a41318c5 100644 --- a/jdosbox-win/src/main/java/jdos/win/controls/StaticWindow.java +++ b/jdosbox-win/src/main/java/jdos/win/controls/StaticWindow.java @@ -10,7 +10,6 @@ import jdos.win.builtin.user32.*; import jdos.win.kernel.WinCallback; import jdos.win.system.WinRect; -import jdos.win.utils.Ptr; import jdos.win.utils.StringUtil; public class StaticWindow extends WinAPI { @@ -26,7 +25,7 @@ static public void registerClass(WinProcess process) { } // LRESULT WINAPI SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) - static private Callback.Handler static_proc = new HandlerBase() { + static private final Callback.Handler static_proc = new HandlerBase() { public java.lang.String getName() { return "STATIC.proc"; } @@ -42,13 +41,13 @@ public void onCall() { static final private int HFONT_GWL_OFFSET = 0; static final private int HICON_GWL_OFFSET = 4; - static private interface StaticPaint { - public void paint(int hWnd, int hdc, int style); + private interface StaticPaint { + void paint(int hWnd, int hdc, int style); } /*********************************************************************** * STATIC_SetIcon - * + *

* Set the icon for an SS_ICON control. */ static private int STATIC_SetIcon(int hwnd, int hicon, int style ) { @@ -81,7 +80,7 @@ static private int STATIC_SetIcon(int hwnd, int hicon, int style ) { /*********************************************************************** * STATIC_SetBitmap - * + *

* Set the bitmap for an SS_BITMAP control. */ static private int STATIC_SetBitmap(int hwnd, int hBitmap, int style) { @@ -115,7 +114,7 @@ static private int STATIC_SetBitmap(int hwnd, int hBitmap, int style) { /*********************************************************************** * STATIC_SetEnhMetaFile - * + *

* Set the enhanced metafile for an SS_ENHMETAFILE control. */ static private int STATIC_SetEnhMetaFile(int hwnd, int hEnhMetaFile, int style) { @@ -130,7 +129,7 @@ static private int STATIC_SetEnhMetaFile(int hwnd, int hEnhMetaFile, int style) /*********************************************************************** * STATIC_GetImage - * + *

* Gets the bitmap for an SS_BITMAP control, the icon/cursor for an * SS_ICON control or the enhanced metafile for an SS_ENHMETAFILE control. */ @@ -155,7 +154,7 @@ static int STATIC_GetImage(int hwnd, int wParam, int style) { /*********************************************************************** * STATIC_LoadIconA - * + *

* Load the icon for an SS_ICON control. */ static int STATIC_LoadIconA(int hInstance, int name, int style) { @@ -205,7 +204,7 @@ static int STATIC_LoadIconA(int hInstance, int name, int style) { /*********************************************************************** * STATIC_TryPaintFcn - * + *

* Try to immediately paint the control. */ static private void STATIC_TryPaintFcn(int hwnd, int full_style) { @@ -238,7 +237,7 @@ static private int STATIC_SendWmCtlColorStatic(int hwnd, int hdc) { /*********************************************************************** * hasTextStyle - * + *

* Tests if the control displays text. */ static private boolean hasTextStyle(int style) { @@ -268,10 +267,6 @@ static private int StaticWndProc_common(int hwnd, int uMsg, int wParam, int lPar switch (uMsg) { case WM_CREATE: - if (style < 0L || style > SS_TYPEMASK) { - warn("Unknown style "+Ptr.toString(style)); - return -1; - } break; case WM_NCDESTROY: if (style == SS_ICON) { @@ -432,252 +427,238 @@ static private int StaticWndProc_common(int hwnd, int uMsg, int wParam, int lPar return 0; } - static private StaticPaint STATIC_PaintOwnerDrawfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT(); - int id = WinWindow.GetWindowLongA(hWnd, GWLP_ID); - - dis.CtlType = ODT_STATIC; - dis.CtlID = id; - dis.itemID = 0; - dis.itemAction = ODA_DRAWENTIRE; - dis.itemState = WinWindow.IsWindowEnabled(hWnd)!=0 ? 0 : ODS_DISABLED; - dis.hwndItem = hWnd; - dis.hDC = hdc; - dis.itemData = 0; - WinPos.WIN_GetClientRect(hWnd, dis.rcItem); - - int font = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); - int oldFont = 0; - if (font!=0) - oldFont = WinDC.SelectObject(hdc, font); - Message.SendMessageA(WinWindow.GetParent(hWnd), WM_CTLCOLORSTATIC, hdc, hWnd); - Message.SendMessageA(WinWindow.GetParent(hWnd), WM_DRAWITEM, id, dis.allocTemp()); - if (font!=0) - WinDC.SelectObject(hdc, oldFont); - } + static private final StaticPaint STATIC_PaintOwnerDrawfn = (hWnd, hdc, style) -> { + DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT(); + int id = WinWindow.GetWindowLongA(hWnd, GWLP_ID); + + dis.CtlType = ODT_STATIC; + dis.CtlID = id; + dis.itemID = 0; + dis.itemAction = ODA_DRAWENTIRE; + dis.itemState = WinWindow.IsWindowEnabled(hWnd)!=0 ? 0 : ODS_DISABLED; + dis.hwndItem = hWnd; + dis.hDC = hdc; + dis.itemData = 0; + WinPos.WIN_GetClientRect(hWnd, dis.rcItem); + + int font = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); + int oldFont = 0; + if (font!=0) + oldFont = WinDC.SelectObject(hdc, font); + Message.SendMessageA(WinWindow.GetParent(hWnd), WM_CTLCOLORSTATIC, hdc, hWnd); + Message.SendMessageA(WinWindow.GetParent(hWnd), WM_DRAWITEM, id, dis.allocTemp()); + if (font!=0) + WinDC.SelectObject(hdc, oldFont); }; - static private StaticPaint STATIC_PaintTextfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int format; - - WinWindow window = WinWindow.get(hWnd); - if (window == null) - return; - - switch (style & SS_TYPEMASK) - { - case SS_LEFT: - format = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK; - break; - case SS_CENTER: - format = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK; - break; - case SS_RIGHT: - format = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK; - break; - case SS_SIMPLE: - format = DT_LEFT | DT_SINGLELINE; - break; - case SS_LEFTNOWORDWRAP: - format = DT_LEFT | DT_EXPANDTABS; - break; - default: - return; - } + static private final StaticPaint STATIC_PaintTextfn = (hWnd, hdc, style) -> { + int format; - int rc = getTempBuffer(WinRect.SIZE); - WinPos.GetClientRect(hWnd, rc); - - if ((WinWindow.GetWindowLongA(hWnd, GWL_EXSTYLE) & WS_EX_RIGHT)!=0) - format = DT_RIGHT | (format & ~(DT_LEFT | DT_CENTER)); - - if ((style & SS_NOPREFIX)!=0) - format |= DT_NOPREFIX; - - if ((style & SS_TYPEMASK) != SS_SIMPLE) { - if ((style & SS_CENTERIMAGE)!=0) - format |= DT_SINGLELINE | DT_VCENTER; - if ((style & SS_EDITCONTROL)!=0) - format |= DT_EDITCONTROL; - if ((style & SS_ENDELLIPSIS)!=0) - format |= DT_SINGLELINE | DT_END_ELLIPSIS; - if ((style & SS_PATHELLIPSIS)!=0) - format |= DT_SINGLELINE | DT_PATH_ELLIPSIS; - if ((style & SS_WORDELLIPSIS)!=0) - format |= DT_SINGLELINE | DT_WORD_ELLIPSIS; - } - int hFont = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); - int hOldFont = 0; - if (hFont != 0) - hOldFont = WinDC.SelectObject(hdc, hFont); + WinWindow window = WinWindow.get(hWnd); + if (window == null) + return; - /* SS_SIMPLE controls: WM_CTLCOLORSTATIC is sent, but the returned - brush is not used */ - int hBrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + switch (style & SS_TYPEMASK) + { + case SS_LEFT: + format = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK; + break; + case SS_CENTER: + format = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK; + break; + case SS_RIGHT: + format = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK; + break; + case SS_SIMPLE: + format = DT_LEFT | DT_SINGLELINE; + break; + case SS_LEFTNOWORDWRAP: + format = DT_LEFT | DT_EXPANDTABS; + break; + default: + return; + } - if ((style & SS_TYPEMASK) != SS_SIMPLE) { - WinDC.FillRect(hdc, rc, hBrush); - if (WinWindow.IsWindowEnabled(hWnd)==0) - WinDC.SetTextColor(hdc, SysParams.GetSysColor(COLOR_GRAYTEXT)); - } + int rc = getTempBuffer(WinRect.SIZE); + WinPos.GetClientRect(hWnd, rc); + + if ((WinWindow.GetWindowLongA(hWnd, GWL_EXSTYLE) & WS_EX_RIGHT)!=0) + format = DT_RIGHT | (format & ~(DT_LEFT | DT_CENTER)); + + if ((style & SS_NOPREFIX)!=0) + format |= DT_NOPREFIX; + + if ((style & SS_TYPEMASK) != SS_SIMPLE) { + if ((style & SS_CENTERIMAGE)!=0) + format |= DT_SINGLELINE | DT_VCENTER; + if ((style & SS_EDITCONTROL)!=0) + format |= DT_EDITCONTROL; + if ((style & SS_ENDELLIPSIS)!=0) + format |= DT_SINGLELINE | DT_END_ELLIPSIS; + if ((style & SS_PATHELLIPSIS)!=0) + format |= DT_SINGLELINE | DT_PATH_ELLIPSIS; + if ((style & SS_WORDELLIPSIS)!=0) + format |= DT_SINGLELINE | DT_WORD_ELLIPSIS; + } + int hFont = WinWindow.GetWindowLongA(hWnd, HFONT_GWL_OFFSET); + int hOldFont = 0; + if (hFont != 0) + hOldFont = WinDC.SelectObject(hdc, hFont); + + /* SS_SIMPLE controls: WM_CTLCOLORSTATIC is sent, but the returned + brush is not used */ + int hBrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + + if ((style & SS_TYPEMASK) != SS_SIMPLE) { + WinDC.FillRect(hdc, rc, hBrush); + if (WinWindow.IsWindowEnabled(hWnd)==0) + WinDC.SetTextColor(hdc, SysParams.GetSysColor(COLOR_GRAYTEXT)); + } - if (window.text.length()>0) { - if (((style & SS_TYPEMASK) == SS_SIMPLE) && (style & SS_NOPREFIX)!=0) { - /* Windows uses the faster ExtTextOut() to draw the text and - to paint the whole client rectangle with the text background - color. Reference: "Static Controls" by Kyle Marsh, 1992 */ - WinRect rect = new WinRect(rc); - WinDC.ExtTextOutA( hdc, rect.left, rect.top, ETO_CLIPPED | ETO_OPAQUE, rc, StringUtil.allocateTempA(window.text), window.text.length(), NULL ); - } else { - WinText.DrawTextA(hdc, StringUtil.allocateTempA(window.text), -1, rc, format); - } + if (!window.text.isEmpty()) { + if (((style & SS_TYPEMASK) == SS_SIMPLE) && (style & SS_NOPREFIX)!=0) { + /* Windows uses the faster ExtTextOut() to draw the text and + to paint the whole client rectangle with the text background + color. Reference: "Static Controls" by Kyle Marsh, 1992 */ + WinRect rect = new WinRect(rc); + WinDC.ExtTextOutA( hdc, rect.left, rect.top, ETO_CLIPPED | ETO_OPAQUE, rc, StringUtil.allocateTempA(window.text), window.text.length(), NULL ); + } else { + WinText.DrawTextA(hdc, StringUtil.allocateTempA(window.text), -1, rc, format); } - if (hFont!=0) - WinDC.SelectObject(hdc, hOldFont); } + if (hFont!=0) + WinDC.SelectObject(hdc, hOldFont); }; - static private StaticPaint STATIC_PaintRectfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); - int hBrush; + static private final StaticPaint STATIC_PaintRectfn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); + int hBrush; - WinPos.GetClientRect(hWnd, rc); + WinPos.GetClientRect(hWnd, rc); - /* FIXME: send WM_CTLCOLORSTATIC */ - switch (style & SS_TYPEMASK) - { - case SS_BLACKRECT: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); - WinDC.FillRect(hdc, rc, hBrush); - break; - case SS_GRAYRECT: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); - WinDC.FillRect(hdc, rc, hBrush); - break; - case SS_WHITERECT: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); - WinDC.FillRect(hdc, rc, hBrush); - break; - case SS_BLACKFRAME: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); - UiTools.FrameRect(hdc, rc, hBrush); - break; - case SS_GRAYFRAME: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); - UiTools.FrameRect(hdc, rc, hBrush); - break; - case SS_WHITEFRAME: - hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); - UiTools.FrameRect(hdc, rc, hBrush); - break; - default: - return; - } - GdiObj.DeleteObject(hBrush); + /* FIXME: send WM_CTLCOLORSTATIC */ + switch (style & SS_TYPEMASK) + { + case SS_BLACKRECT: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); + WinDC.FillRect(hdc, rc, hBrush); + break; + case SS_GRAYRECT: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); + WinDC.FillRect(hdc, rc, hBrush); + break; + case SS_WHITERECT: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); + WinDC.FillRect(hdc, rc, hBrush); + break; + case SS_BLACKFRAME: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DDKSHADOW)); + UiTools.FrameRect(hdc, rc, hBrush); + break; + case SS_GRAYFRAME: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DSHADOW)); + UiTools.FrameRect(hdc, rc, hBrush); + break; + case SS_WHITEFRAME: + hBrush = WinBrush.CreateSolidBrush(SysParams.GetSysColor(COLOR_3DHIGHLIGHT)); + UiTools.FrameRect(hdc, rc, hBrush); + break; + default: + return; } + GdiObj.DeleteObject(hBrush); }; - static private StaticPaint STATIC_PaintIconfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); - WinPos.GetClientRect(hWnd, rc); - int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); - int hIcon = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); - WinIcon icon = WinIcon.get(hIcon); - WinDC.FillRect(hdc, rc, hbrush); - if (icon != null) { - WinRect iconRect = new WinRect(); - WinRect rect = new WinRect(rc); - if ((style & SS_CENTERIMAGE)==0) - iconRect = rect; - else { - iconRect.left = (rect.right - rect.left) / 2 - icon.cx / 2; - iconRect.top = (rect.bottom - rect.top) / 2 - icon.cy / 2; - iconRect.right = iconRect.left + icon.cx; - iconRect.bottom = iconRect.top + icon.cy; - } - WinIcon.DrawIconEx(hdc, iconRect.left, iconRect.top, hIcon, iconRect.right - iconRect.left, iconRect.bottom - iconRect.top, 0, NULL, DI_NORMAL); + static private final StaticPaint STATIC_PaintIconfn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); + WinPos.GetClientRect(hWnd, rc); + int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + int hIcon = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); + WinIcon icon = WinIcon.get(hIcon); + WinDC.FillRect(hdc, rc, hbrush); + if (icon != null) { + WinRect iconRect = new WinRect(); + WinRect rect = new WinRect(rc); + if ((style & SS_CENTERIMAGE)==0) + iconRect = rect; + else { + iconRect.left = (rect.right - rect.left) / 2 - icon.cx / 2; + iconRect.top = (rect.bottom - rect.top) / 2 - icon.cy / 2; + iconRect.right = iconRect.left + icon.cx; + iconRect.bottom = iconRect.top + icon.cy; } + WinIcon.DrawIconEx(hdc, iconRect.left, iconRect.top, hIcon, iconRect.right - iconRect.left, iconRect.bottom - iconRect.top, 0, NULL, DI_NORMAL); } }; - static private StaticPaint STATIC_PaintBitmapfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - /* message is still sent, even if the returned brush is not used */ - int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); - int hBitmap = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); - WinBitmap bitmap = WinBitmap.get(hBitmap); - int hMemDC = 0; - if (bitmap != null) - hMemDC = WinDC.CreateCompatibleDC(hdc); - - if (hMemDC != 0) { - int oldbitmap = WinDC.SelectObject(hMemDC, hBitmap); - - /* Set the background color for monochrome bitmaps - to the color of the background brush */ - WinBrush brush = WinBrush.get(hbrush); - if (brush != null) { - if (brush.style == BS_SOLID) - WinDC.SetBkColor(hdc, brush.color); - } - WinRect rcClient = new WinRect(); - WinPos.WIN_GetClientRect(hWnd, rcClient); - - if ((style & SS_CENTERIMAGE)!=0) { - int x, y; - x = (rcClient.right - rcClient.left)/2 - bitmap.getWidth()/2; - y = (rcClient.bottom - rcClient.top)/2 - bitmap.getHeight()/2; - WinDC.FillRect(hdc, rcClient.allocTemp(), hbrush); - BitBlt.BitBlt(hdc, x, y, bitmap.getWidth(), bitmap.getHeight(), hMemDC, 0, 0, SRCCOPY); - } else { - BitBlt.StretchBlt(hdc, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hMemDC, 0, 0, bitmap.getWidth(), bitmap.getHeight(), SRCCOPY); - } - WinDC.SelectObject(hMemDC, oldbitmap); - WinDC.DeleteDC(hMemDC); + static private final StaticPaint STATIC_PaintBitmapfn = (hWnd, hdc, style) -> { + /* message is still sent, even if the returned brush is not used */ + int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + int hBitmap = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); + WinBitmap bitmap = WinBitmap.get(hBitmap); + int hMemDC = 0; + if (bitmap != null) + hMemDC = WinDC.CreateCompatibleDC(hdc); + + if (hMemDC != 0) { + int oldbitmap = WinDC.SelectObject(hMemDC, hBitmap); + + /* Set the background color for monochrome bitmaps + to the color of the background brush */ + WinBrush brush = WinBrush.get(hbrush); + if (brush != null) { + if (brush.style == BS_SOLID) + WinDC.SetBkColor(hdc, brush.color); } + WinRect rcClient = new WinRect(); + WinPos.WIN_GetClientRect(hWnd, rcClient); + + if ((style & SS_CENTERIMAGE)!=0) { + int x, y; + x = (rcClient.right - rcClient.left)/2 - bitmap.getWidth()/2; + y = (rcClient.bottom - rcClient.top)/2 - bitmap.getHeight()/2; + WinDC.FillRect(hdc, rcClient.allocTemp(), hbrush); + BitBlt.BitBlt(hdc, x, y, bitmap.getWidth(), bitmap.getHeight(), hMemDC, 0, 0, SRCCOPY); + } else { + BitBlt.StretchBlt(hdc, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hMemDC, 0, 0, bitmap.getWidth(), bitmap.getHeight(), SRCCOPY); + } + WinDC.SelectObject(hMemDC, oldbitmap); + WinDC.DeleteDC(hMemDC); } }; - static private StaticPaint STATIC_PaintEnhMetafn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); - WinPos.GetClientRect(hWnd, rc); - int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); - WinDC.FillRect(hdc, rc, hbrush); - int hEnhMetaFile = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); - WinEnhancedMetaFile mf = WinEnhancedMetaFile.get((hEnhMetaFile)); - if (mf != null) { - /* The control's current font is not selected into the - device context! */ - // :TODO: - log("STATIC metafile faked"); - // PlayEnhMetaFile(hdc, hEnhMetaFile, rc); - } + static private final StaticPaint STATIC_PaintEnhMetafn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); + WinPos.GetClientRect(hWnd, rc); + int hbrush = STATIC_SendWmCtlColorStatic(hWnd, hdc); + WinDC.FillRect(hdc, rc, hbrush); + int hEnhMetaFile = WinWindow.GetWindowLongA(hWnd, HICON_GWL_OFFSET); + WinEnhancedMetaFile mf = WinEnhancedMetaFile.get((hEnhMetaFile)); + if (mf != null) { + /* The control's current font is not selected into the + device context! */ + // :TODO: + log("STATIC metafile faked"); + // PlayEnhMetaFile(hdc, hEnhMetaFile, rc); } }; - static private StaticPaint STATIC_PaintEtchedfn = new StaticPaint() { - public void paint(int hWnd, int hdc, int style) { - int rc = getTempBuffer(WinRect.SIZE); + static private final StaticPaint STATIC_PaintEtchedfn = (hWnd, hdc, style) -> { + int rc = getTempBuffer(WinRect.SIZE); - /* FIXME: sometimes (not always) sends WM_CTLCOLORSTATIC */ - WinPos.GetClientRect(hWnd, rc); - switch (style & SS_TYPEMASK) - { - case SS_ETCHEDHORZ: - UiTools.DrawEdge(hdc, rc, EDGE_ETCHED,BF_TOP|BF_BOTTOM); - break; - case SS_ETCHEDVERT: - UiTools.DrawEdge(hdc, rc, EDGE_ETCHED,BF_LEFT|BF_RIGHT); - break; - case SS_ETCHEDFRAME: - UiTools.DrawEdge (hdc, rc, EDGE_ETCHED, BF_RECT); - break; - } + /* FIXME: sometimes (not always) sends WM_CTLCOLORSTATIC */ + WinPos.GetClientRect(hWnd, rc); + switch (style & SS_TYPEMASK) + { + case SS_ETCHEDHORZ: + UiTools.DrawEdge(hdc, rc, EDGE_ETCHED,BF_TOP|BF_BOTTOM); + break; + case SS_ETCHEDVERT: + UiTools.DrawEdge(hdc, rc, EDGE_ETCHED,BF_LEFT|BF_RIGHT); + break; + case SS_ETCHEDFRAME: + UiTools.DrawEdge (hdc, rc, EDGE_ETCHED, BF_RECT); + break; } }; diff --git a/jdosbox-win/src/main/java/jdos/win/kernel/DescriptorTables.java b/jdosbox-win/src/main/java/jdos/win/kernel/DescriptorTables.java index 91233962..adf22712 100644 --- a/jdosbox-win/src/main/java/jdos/win/kernel/DescriptorTables.java +++ b/jdosbox-win/src/main/java/jdos/win/kernel/DescriptorTables.java @@ -28,7 +28,7 @@ static public gdt_entry_t alloc(int count, KernelMemory memory) { } public void limit_low(int index, int value) { - writew(index*SIZE+0, value); + writew(index * SIZE, value); } public void base_low(int index, int value) { writew(index*SIZE+2, value); @@ -89,7 +89,7 @@ public void clear() { Memory.mem_zero(ptr, count*SIZE); } public void base_lo(int index, int value) { - writew(index*SIZE+0, value); + writew(index * SIZE, value); } public void sel(int index, int value) { writew(index*SIZE+2, value); @@ -251,12 +251,12 @@ public void iomap_base(int value) { // Initialisation routine - zeroes all the interrupt service routines, // initialises the GDT and IDT. - gdt_entry_t gdt_entries; - gdt_ptr_t gdt_ptr; - idt_entry_t idt_entries; - idt_ptr_t idt_ptr; - tss_entry_t tss_entry; - Interrupts interrupts; + final gdt_entry_t gdt_entries; + final gdt_ptr_t gdt_ptr; + final idt_entry_t idt_entries; + final idt_ptr_t idt_ptr; + final tss_entry_t tss_entry; + final Interrupts interrupts; public DescriptorTables(Interrupts interrupts, KernelMemory memory) { gdt_entries = gdt_entry_t.alloc(6, memory); diff --git a/jdosbox-win/src/main/java/jdos/win/kernel/Interrupts.java b/jdosbox-win/src/main/java/jdos/win/kernel/Interrupts.java index 52166a02..4ab6c249 100644 --- a/jdosbox-win/src/main/java/jdos/win/kernel/Interrupts.java +++ b/jdosbox-win/src/main/java/jdos/win/kernel/Interrupts.java @@ -26,60 +26,60 @@ public class Interrupts { static final public int IRQ14 = 46; static final public int IRQ15 = 47; - public Callback.Handler[] interrupt_handlers; - - public int isr0; - public int isr1; - public int isr2; - public int isr3; - public int isr4; - public int isr5; - public int isr6; - public int isr7; - public int isr8; - public int isr9; - public int isr10; - public int isr11; - public int isr12; - public int isr13; - public int isr14; - public int isr15; - public int isr16; - public int isr17; - public int isr18; - public int isr19; - public int isr20; - public int isr21; - public int isr22; - public int isr23; - public int isr24; - public int isr25; - public int isr26; - public int isr27; - public int isr28; - public int isr29; - public int isr30; - public int isr31; - public int isr128; - - public int irq0; - public int irq1; - public int irq2; - public int irq3; - public int irq4; - public int irq5; - public int irq6; - public int irq7; - public int irq8; - public int irq9; - public int irq10; - public int irq11; - public int irq12; - public int irq13; - public int irq14; - public int irq15; - - Callback.Handler isrHandler = new Callback.Handler() { + public final Callback.Handler[] interrupt_handlers; + + public final int isr0; + public final int isr1; + public final int isr2; + public final int isr3; + public final int isr4; + public final int isr5; + public final int isr6; + public final int isr7; + public final int isr8; + public final int isr9; + public final int isr10; + public final int isr11; + public final int isr12; + public final int isr13; + public final int isr14; + public final int isr15; + public final int isr16; + public final int isr17; + public final int isr18; + public final int isr19; + public final int isr20; + public final int isr21; + public final int isr22; + public final int isr23; + public final int isr24; + public final int isr25; + public final int isr26; + public final int isr27; + public final int isr28; + public final int isr29; + public final int isr30; + public final int isr31; + public final int isr128; + + public final int irq0; + public final int irq1; + public final int irq2; + public final int irq3; + public final int irq4; + public final int irq5; + public final int irq6; + public final int irq7; + public final int irq8; + public final int irq9; + public final int irq10; + public final int irq11; + public final int irq12; + public final int irq13; + public final int irq14; + public final int irq15; + + final Callback.Handler isrHandler = new Callback.Handler() { public int call() { int index = CPU.CPU_Peek32(0); if (index>=IRQ0 && index { + while (true) { + HandlerBase.tick = true; + try {Thread.sleep(15);} catch (Exception e) { + throw new RuntimeException(e); } } - }; + }); thread.start(); } - Callback.Handler handler = new Callback.Handler() { + final Callback.Handler handler = new Callback.Handler() { int tickCount; public int call() { Scheduler.tick(); diff --git a/jdosbox-win/src/main/java/jdos/win/kernel/VideoMemory.java b/jdosbox-win/src/main/java/jdos/win/kernel/VideoMemory.java index 47285d66..81e4cbef 100644 --- a/jdosbox-win/src/main/java/jdos/win/kernel/VideoMemory.java +++ b/jdosbox-win/src/main/java/jdos/win/kernel/VideoMemory.java @@ -15,7 +15,7 @@ static public int mapVideoRAM(int amount) { int frame = WinSystem.memory.frames.length*32; long address = WinSystem.getCurrentProcess().addressSpace.getNextAddress(WinProcess.ADDRESS_VIDEO_START, amount, true); WinSystem.getCurrentProcess().addressSpace.alloc(address, amount); - frame += (address- WinProcess.ADDRESS_VIDEO_START + 0xFFF) >>> 12; + frame += (int) ((address- WinProcess.ADDRESS_VIDEO_START + 0xFFF) >>> 12); int directory = WinSystem.getCurrentProcess().page_directory; for (long i=address;i functions = new Hashtable(); - private String fileName; - private Hashtable registeredCallbacks = new Hashtable(); - public Loader loader; - private Hashtable ordinalToName = new Hashtable(); + private final Hashtable functions = new Hashtable<>(); + private final String fileName; + private final Hashtable registeredCallbacks = new Hashtable<>(); + public final Loader loader; + private final Hashtable ordinalToName = new Hashtable<>(); public BuiltinModule(Loader loader, String name, int handle) { super(handle); @@ -48,7 +48,7 @@ private static void printParam(Integer value, String desc, Integer[] fullArgs) { System.out.print(desc.substring(8)); System.out.print("="); if (IS_INTRESOURCE(value) || value==0) { - System.out.print(value.toString()); + System.out.print(value); } else { System.out.print(StringUtil.getString(value)); System.out.print("(0x"); @@ -59,7 +59,7 @@ private static void printParam(Integer value, String desc, Integer[] fullArgs) { System.out.print(desc.substring(9)); System.out.print("="); if (IS_INTRESOURCE(value) || value==0) { - System.out.print(value.toString()); + System.out.print(value); } else { System.out.print(StringUtil.getStringW(value)); System.out.print("(0x"); @@ -70,7 +70,7 @@ private static void printParam(Integer value, String desc, Integer[] fullArgs) { System.out.print(desc.substring(10)); System.out.print("="); if (IS_INTRESOURCE(value) || value==0) { - System.out.print(value.toString()); + System.out.print(value); } else { System.out.print(StringUtil.getString(value, fullArgs[Integer.parseInt(desc.substring(8, 9))])); System.out.print("(0x"); @@ -93,7 +93,7 @@ private static void printParam(Integer value, String desc, Integer[] fullArgs) { System.out.print("(INVALID)"); else { System.out.print("("); - System.out.print(brush.toString()); + System.out.print(brush); System.out.print(")"); } } else if (desc.startsWith("(MSG)")) { @@ -119,7 +119,7 @@ private static void printParam(Integer value, String desc, Integer[] fullArgs) { if (gdi == null) System.out.print("NULL"); else { - System.out.print(gdi.toString()); + System.out.print(gdi); } System.out.print(")"); } @@ -281,7 +281,7 @@ private static void postLog(String name, Integer result, String desc, Integer[] System.out.print(" "); printParam(result, desc, null); } else { - System.out.print(" result="+result.toString()); + System.out.print(" result="+ result); System.out.print("("); System.out.print(Ptr.toString(result)); System.out.print(")"); @@ -297,11 +297,11 @@ private static void postLog(String name, Integer result, String desc, Integer[] System.out.println(" time="+(System.currentTimeMillis()-startTime)); } public static class ReturnHandler extends ReturnHandlerBase { - Method method; - Integer[] args; - String name; - boolean pop; - String[] params; + final Method method; + final Integer[] args; + final String name; + final boolean pop; + final String[] params; public ReturnHandler(String name, Method method, boolean pop, String[] params) { this.method = method; @@ -321,9 +321,9 @@ public int processReturn() { try { if (LOG && params != null) preLog(name, args, params); - Integer result = (Integer)method.invoke(null, args); + Integer result = (Integer)method.invoke(null, (Object) args); if (LOG && params != null) - postLog(name, result, (params != null && params.length>args.length)?params[args.length]:null, args, params); + postLog(name, result, params.length>args.length ?params[args.length]:null, args, params); return result; } catch (Exception e) { e.printStackTrace(); @@ -338,13 +338,13 @@ public String getName() { } public static class NoReturnHandler extends HandlerBase { - Method method; - Integer[] args; - String name; - boolean pop; - String[] params; + final Method method; + final Integer[] args; + final String name; + final boolean pop; + final String[] params; - public NoReturnHandler(String name, Method method, boolean pop, String params[]) { + public NoReturnHandler(String name, Method method, boolean pop, String[] params) { this.method = method; args = new Integer[method.getParameterTypes().length]; this.name = name; @@ -362,7 +362,7 @@ public void onCall() { try { if (LOG && params != null) preLog(name, args, params); - method.invoke(null, args); + method.invoke(null, (Object) args); if (LOG && params != null) postLog(name, null, null, args, params); } catch (Exception e) { @@ -377,13 +377,13 @@ public String getName() { } private static class WaitReturnHandler extends HandlerBase { - Method method; - Integer[] args; - String name; - boolean pop; + final Method method; + final Integer[] args; + final String name; + final boolean pop; int eip; int esp; - String[] params; + final String[] params; public WaitReturnHandler(String name, Method method, boolean pop, String[] params) { this.method = method; @@ -410,7 +410,7 @@ public void onCall() { wait = false; if (LOG && params != null) preLog(name, args, params); - Integer result = (Integer)method.invoke(null, args); + Integer result = (Integer)method.invoke(null, (Object) args); if (wait) { if (LOG && params != null) { System.out.print(" THREAD PUT TO SLEEP, WILL TRY AGAIN LATER"); @@ -421,7 +421,7 @@ public void onCall() { Scheduler.wait(Scheduler.getCurrentThread()); } else { if (LOG && params != null) - postLog(name, result, (params != null && params.length>args.length)?params[args.length]:null, args, params); + postLog(name, result, params.length>args.length ?params[args.length]:null, args, params); CPU_Regs.reg_eax.dword = result; } } catch (Exception e) { @@ -579,7 +579,7 @@ public long findNameExport(long exportAddress, long exportsSize, String name, in } public long findOrdinalExport(long exportAddress, long exportsSize, int ordinal) { - String name = ordinalToName.get(new Integer(ordinal)); + String name = ordinalToName.get(ordinal); if (name != null) return getProcAddress(name, true); return 0; diff --git a/jdosbox-win/src/main/java/jdos/win/loader/Loader.java b/jdosbox-win/src/main/java/jdos/win/loader/Loader.java index 9fd52be9..a6221da9 100644 --- a/jdosbox-win/src/main/java/jdos/win/loader/Loader.java +++ b/jdosbox-win/src/main/java/jdos/win/loader/Loader.java @@ -5,7 +5,6 @@ import jdos.util.IntRef; import jdos.util.LongRef; import jdos.util.StringRef; -import jdos.win.Console; import jdos.win.Win; import jdos.win.builtin.*; import jdos.win.builtin.Msacm32.Msacm32; @@ -34,7 +33,7 @@ public class Loader { long nextFunctionAddress = WinProcess.ADDRESS_CALLBACK_START; - long maxFunctionAddress = WinProcess.ADDRESS_CALLBACK_END; + final long maxFunctionAddress = WinProcess.ADDRESS_CALLBACK_END; public int registerFunction(int cb) { if (nextFunctionAddress >= maxFunctionAddress) { @@ -46,14 +45,14 @@ public int registerFunction(int cb) { return (int) result; } - private Hashtable modulesByName = new Hashtable(); - private Hashtable modulesByHandle = new Hashtable(); - private Vector paths; + private final Hashtable modulesByName = new Hashtable(); + private final Hashtable modulesByHandle = new Hashtable(); + private final Vector paths; public NativeModule main = null; - private int page_directory; - private KernelHeap callbackHeap; + private final int page_directory; + private final KernelHeap callbackHeap; private int nextModuleHandle = 1; - private WinProcess process; + private final WinProcess process; public Loader(WinProcess process, KernelMemory memory, int page_directory, Vector paths) { this.paths = paths; @@ -111,7 +110,7 @@ private Module load_native_module(String name) { } // :TODO: reloc dll modulesByName.put(name.toLowerCase(), module); - modulesByHandle.put(new Integer(module.getHandle()), module); + modulesByHandle.put(module.getHandle(), module); if (resolveImports(module)) { if (main != module) { module.callDllMain(Module.DLL_PROCESS_ATTACH); @@ -119,7 +118,7 @@ private Module load_native_module(String name) { return module; } modulesByName.remove(name); - modulesByHandle.remove(new Integer(module.getHandle())); + modulesByHandle.remove(module.getHandle()); } } } catch (Exception e) { @@ -175,7 +174,7 @@ private Module load_builtin_module(String name) { } if (module != null) { modulesByName.put(name.toLowerCase(), module); - modulesByHandle.put(new Integer(module.getHandle()), module); + modulesByHandle.put(module.getHandle(), module); } return module; } @@ -185,7 +184,7 @@ public Module getModuleByName(String name) { } public Module getModuleByHandle(int handle) { - return (Module) modulesByHandle.get(new Integer(handle)); + return (Module) modulesByHandle.get(handle); } private Module internalLoadModule(String name) { @@ -201,14 +200,13 @@ public Module loadModule(String name) { String path = null; int pos = name.lastIndexOf("\\"); if (pos>=0) { - path = name.substring(0, pos+1); name = name.substring(pos+1); } // :TODO: currently we only support modules in the path return internalLoadModule(name); } - private boolean resolveImports(Module module) throws IOException { + private boolean resolveImports(Module module) { LongRef address = new LongRef(0); LongRef size = new LongRef(0); if (module.RtlImageDirectoryEntryToData(HeaderImageOptional.IMAGE_DIRECTORY_ENTRY_IMPORT, address, size)) { @@ -223,7 +221,7 @@ private boolean resolveImports(Module module) throws IOException { return true; } - private boolean importDll(Module module, HeaderImageImportDescriptor importDescriptor) throws IOException { + private boolean importDll(Module module, HeaderImageImportDescriptor importDescriptor) { String name = module.getVirtualString(importDescriptor.Name); System.out.println("ImportDll: " + name); Module import_module = loadModule(name); @@ -234,16 +232,16 @@ private boolean importDll(Module module, HeaderImageImportDescriptor importDescr LongRef exportAddress = new LongRef(0); LongRef exportSize = new LongRef(0); if (!import_module.RtlImageDirectoryEntryToData(HeaderImageOptional.IMAGE_DIRECTORY_ENTRY_EXPORT, exportAddress, exportSize)) { - Console.out(name + ": could not find exports.\n\n"); + System.out.println(name + ": could not find exports.\n\n"); return false; } long[] import_list = module.getImportList(importDescriptor); for (int i = 0; i < import_list.length; i++) { - if ((import_list[i] & 0x80000000l) != 0) { + if ((import_list[i] & 0x80000000L) != 0) { int ordinal = (int) import_list[i] & 0xFFFF; long thunk = import_module.findOrdinalExport(exportAddress.value, exportSize.value, ordinal); if (thunk == 0) { - Console.out("Could not find ordinal function " + ordinal + " in " + name + "\n"); + System.out.println("Could not find ordinal function " + ordinal + " in " + name + "\n"); return false; } else { module.writeThunk(importDescriptor, i, thunk); @@ -254,7 +252,7 @@ private boolean importDll(Module module, HeaderImageImportDescriptor importDescr module.getImportFunctionName(import_list[i], functionName, hint); long thunk = import_module.findNameExport(exportAddress.value, exportSize.value, functionName.value, hint.value); if (thunk == 0) { - Console.out("Could not find " + functionName.value + " in " + name + "\n"); + System.out.println("Could not find " + functionName.value + " in " + name + "\n"); return false; } else { module.writeThunk(importDescriptor, i, thunk); diff --git a/jdosbox-win/src/main/java/jdos/win/loader/Module.java b/jdosbox-win/src/main/java/jdos/win/loader/Module.java index 75b176be..ac5776d7 100644 --- a/jdosbox-win/src/main/java/jdos/win/loader/Module.java +++ b/jdosbox-win/src/main/java/jdos/win/loader/Module.java @@ -9,7 +9,7 @@ import java.util.Vector; public abstract class Module extends WinAPI { - private int handle; + private final int handle; public String name; protected boolean threadLibraryCalls = true; diff --git a/jdosbox-win/src/main/java/jdos/win/loader/NativeModule.java b/jdosbox-win/src/main/java/jdos/win/loader/NativeModule.java index 104d2d11..a66b32ef 100644 --- a/jdosbox-win/src/main/java/jdos/win/loader/NativeModule.java +++ b/jdosbox-win/src/main/java/jdos/win/loader/NativeModule.java @@ -23,11 +23,11 @@ import java.util.Vector; public class NativeModule extends Module { - public HeaderPE header = new HeaderPE(); + public final HeaderPE header = new HeaderPE(); private Path path; private KernelHeap heap; - private Loader loader; + private final Loader loader; private int baseAddress; private int resourceStartAddress; @@ -42,7 +42,7 @@ public String getFileName(boolean fullPath) { return name; } - static Callback.Handler DllMainReturn = new Callback.Handler() { + static final Callback.Handler DllMainReturn = new Callback.Handler() { public String getName() { return "DllMainReturn"; } @@ -60,7 +60,7 @@ public void callDllMain(int dwReason) { System.out.println(name+" has no DllMain"); } else { int esp = CPU_Regs.reg_esp.dword; - // This code helps debug DllMain by giving the same stack pointer + // This code helps debug DllMain by giving the same stack pointer // KernelHeap stack = new KernelHeap(WinSystem.memory, WinSystem.getCurrentProcess().page_directory, 0x100000, 0x140000, 0x140000, true, false); // stack.alloc(0x40000, false); // Memory.mem_zero(0x100000, 0x40000); @@ -183,26 +183,26 @@ public boolean load(WinProcess process, int page_directory, String name, Path pa case 0: // IMAGE_REL_BASED_ABSOLUTE break; case 1: // IMAGE_REL_BASED_HIGH - { - int s = Memory.mem_readw(page+offset); - s+=delta >>> 16; - Memory.mem_writew(page+offset, s); - } - break; + { + int s = Memory.mem_readw(page+offset); + s+=delta >>> 16; + Memory.mem_writew(page+offset, s); + } + break; case 2: // IMAGE_REL_BASED_LOW - { - int s = Memory.mem_readw(page+offset); - s+=delta & 0xFFFF; - Memory.mem_writew(page+offset, s); - } - break; + { + int s = Memory.mem_readw(page+offset); + s+=delta & 0xFFFF; + Memory.mem_writew(page+offset, s); + } + break; case 3: // IMAGE_REL_BASED_HIGHLOW - { - int s = Memory.mem_readd(page+offset); - s+=delta; - Memory.mem_writed(page+offset, s); - } - break; + { + int s = Memory.mem_readd(page+offset); + s+=delta; + Memory.mem_writed(page+offset, s); + } + break; default: Win.panic(name+"Unknown relocation type: "+type); } @@ -210,9 +210,9 @@ public boolean load(WinProcess process, int page_directory, String name, Path pa } } return true; - } catch (Exception e) { + } catch (Exception ignored) { } finally { - if (fis != null) try {fis.close();} catch (Exception e) {} + if (fis != null) try {fis.close();} catch (Exception ignored) {} } return false; } @@ -243,12 +243,12 @@ public ResourceDirectory(int address) { NumberOfNamedEntries = is.readUnsignedShort(); NumberOfIdEntries = is.readUnsignedShort(); } - public int Characteristics; - public int TimeDateStamp; - public int MajorVersion; - public int MinorVersion; - public int NumberOfNamedEntries; - public int NumberOfIdEntries; + public final int Characteristics; + public final int TimeDateStamp; + public final int MajorVersion; + public final int MinorVersion; + public final int NumberOfNamedEntries; + public final int NumberOfIdEntries; } public int getAddressOfResource(int type, int id) { return getAddressOfResource(type, id, null); @@ -338,7 +338,7 @@ private int getResourceById(int resourceAddress, int id, IntRef size) { } private int getResourceByCodePage(int resourceAddress, IntRef size) { - ResourceDirectory root = new ResourceDirectory(resourceAddress); + ResourceDirectory root = new ResourceDirectory(resourceAddress); int address = resourceAddress+ResourceDirectory.SIZE+root.NumberOfNamedEntries*8; int defaultOffset = 0; @@ -416,11 +416,11 @@ public long[] getImportList(HeaderImageImportDescriptor desc) { if (ord == 0) { break; } - importOrdinals.addElement(new Long(ord)); + importOrdinals.addElement(ord); } long[] result = new long[importOrdinals.size()]; for (int i=0;iavailable()) len=available(); Memory.mem_memcpy(b, off, address + pos, len); pos+=len; - return len; } - public final int read(byte b[]) { - return read(b, 0, b.length); + public final void read(byte[] b) { + read(b, 0, b.length); } public final int skipBytes(int n) { diff --git a/jdosbox-win/src/main/java/jdos/win/system/JavaBitmap.java b/jdosbox-win/src/main/java/jdos/win/system/JavaBitmap.java index 5e65cf62..0a9a5946 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/JavaBitmap.java +++ b/jdosbox-win/src/main/java/jdos/win/system/JavaBitmap.java @@ -92,7 +92,7 @@ public BufferedImage getImageColorKey(int colorKey) { colorKey = palette[colorKey]; if (colorKey != cachedColorKey) { if (bpp<=8) { - int[] p = (int[])palette.clone(); + int[] p = palette.clone(); for (int i=0;i threadMap = new Hashtable(); - private static long start = System.currentTimeMillis(); + private static final Hashtable threadMap = new Hashtable<>(); + private static final long start = System.currentTimeMillis(); // DirectX surface to force to the screen public static int monitor; @@ -85,7 +85,9 @@ static public void removeThread(WinThread thread) { Input.processInput(); if (first != null) break; - try {StaticData.inputQueueMutex.wait();} catch (Exception e){} + try {StaticData.inputQueueMutex.wait();} catch (Exception e) { + throw new RuntimeException(e); + } } } if (item == currentThread) { @@ -113,7 +115,7 @@ static public WinThread getCurrentThread() { // :TODO: run them in order of process to minimize page swapping static public void tick() { - if (threadMap.size() == 0) { + if (threadMap.isEmpty()) { return; } SchedulerItem next = currentThread.next; @@ -128,7 +130,9 @@ static public void tick() { break; } if (next == start) { - try {Thread.sleep(10);} catch (Exception e) {} + try {Thread.sleep(10);} catch (Exception e) { + throw new RuntimeException(e); + } tickCount = currentTickCount(); } next = next.next; diff --git a/jdosbox-win/src/main/java/jdos/win/system/StaticData.java b/jdosbox-win/src/main/java/jdos/win/system/StaticData.java index 0775793e..c90e3aca 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/StaticData.java +++ b/jdosbox-win/src/main/java/jdos/win/system/StaticData.java @@ -16,19 +16,19 @@ public class StaticData extends WinAPI { public static int mouseCapture; // HWND public static int foregroundWindow; // HWND public static int nextObjectId = 8200; - public static Hashtable objects = new Hashtable(); - public static Hashtable namedObjects = new Hashtable(); + public static final Hashtable objects = new Hashtable<>(); + public static final Hashtable namedObjects = new Hashtable<>(); public static WinPoint currentPos = new WinPoint(0, 0); - public static int[] SysColors = new int[NUM_SYS_COLORS]; - public static int[] SysColorBrushes = new int[NUM_SYS_COLORS]; - public static int[] SysColorPens = new int[NUM_SYS_COLORS]; + public static final int[] SysColors = new int[NUM_SYS_COLORS]; + public static final int[] SysColorBrushes = new int[NUM_SYS_COLORS]; + public static final int[] SysColorPens = new int[NUM_SYS_COLORS]; public static int SYSCOLOR_55AABrush; public static int[] stockObjects; public static WinUser user; public static JavaBitmap screen; - public static List inputQueue = Collections.synchronizedList(new LinkedList()); + public static final List inputQueue = Collections.synchronizedList(new LinkedList<>()); public static final Object inputQueueMutex = new Object(); public static int nextRegisteredMessage; public static Hashtable registeredMessages; @@ -70,9 +70,9 @@ static public void init() { stockObjects[DC_BRUSH] = WinBrush.CreateSolidBrush(RGB(255, 255, 255)); stockObjects[DC_PEN] = WinPen.CreatePen(PS_SOLID, 0, RGB(0, 0, 0)); - for (int i=0;i>(); - registeredMessages = new Hashtable(); + hooks = new Hashtable<>(); + registeredMessages = new Hashtable<>(); nextRegisteredMessage = 0xC000; hbitmapCheckBoxes = 0; top_popup = 0; diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinCriticalException.java b/jdosbox-win/src/main/java/jdos/win/system/WinCriticalException.java index 46f4a103..960fd9ed 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinCriticalException.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinCriticalException.java @@ -28,7 +28,7 @@ static public void initialize(int address, int spinCount) { Memory.mem_writed(address, 0); address+=4; Memory.mem_writed(address, 0); address+=4; Memory.mem_writed(address, 0); address+=4; - Memory.mem_writed(address, spinCount); address+=4; + Memory.mem_writed(address, spinCount); } static public void enter(int address) { @@ -66,8 +66,8 @@ static public void leave(int address) { Memory.mem_writed(address+8, recursionCount); } else { WaitObject object = WaitObject.getWait(Memory.mem_readd(address)); - if (object.waiting.size()>0) { - WaitGroup group = (WaitGroup)object.waiting.remove(0); + if (!object.waiting.isEmpty()) { + WaitGroup group = object.waiting.remove(0); Memory.mem_writed(address+12, group.thread.getHandle()); // set new owner Scheduler.addThread(group.thread, false); // wake up the waiting thread // leave recursion count at 1 diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinFatFile.java b/jdosbox-win/src/main/java/jdos/win/system/WinFatFile.java index 0b420c52..a6f1a222 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinFatFile.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinFatFile.java @@ -73,5 +73,5 @@ protected void onFree() { fatFile.Close(); } - private Drive_fat.fatFile fatFile = null; + private final Drive_fat.fatFile fatFile; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinFile.java b/jdosbox-win/src/main/java/jdos/win/system/WinFile.java index e9daae59..7791acb7 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinFile.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinFile.java @@ -22,7 +22,7 @@ static public WinFile createNoHandle(FilePath file, boolean write, int shareMode static public WinFile get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinFile)) + if (!(object instanceof WinFile)) return null; return (WinFile)object; } @@ -54,9 +54,7 @@ public WildCardFileFilter(String filter) { public boolean accept(File pathname) { String name = pathname.getName().toLowerCase(); - if (name.startsWith(begin) && name.endsWith(end)) - return true; - return false; + return name.startsWith(begin) && name.endsWith(end); } } public static final int STD_OUT = 1; @@ -92,7 +90,7 @@ public static void writeFileTime(int address, long time) { } public static long readFileTime(int address) { - return (Memory.mem_readd(address) & 0xFFFFFFFFl) | ((Memory.mem_readd(address+4) & 0xFFFFFFFFl) << 32); + return (Memory.mem_readd(address) & 0xFFFFFFFFL) | ((Memory.mem_readd(address+4) & 0xFFFFFFFFL) << 32); } public WinFile(int type, int handle) { @@ -114,8 +112,7 @@ public long size() { } try { return file.length(); - } catch (Exception e) { - } + } catch (Exception ignored) {} return 0; } @@ -201,11 +198,12 @@ protected void onFree() { try { file.close(); } catch (Exception e) { + throw new RuntimeException(e); } } private FilePath file = null; public int shareMode; public int attributes; - public int type; + public final int type; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinFileMapping.java b/jdosbox-win/src/main/java/jdos/win/system/WinFileMapping.java index 9960716b..50d3b5c4 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinFileMapping.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinFileMapping.java @@ -11,7 +11,7 @@ static public WinFileMapping create(int hFile, String name, long size) { static public WinFileMapping get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinFileMapping)) + if (!(object instanceof WinFileMapping)) return null; return (WinFileMapping)object; } @@ -37,7 +37,7 @@ public WinFileMapping(int fileHandle, String name, long size, int handle) { if (fileHandle == -1) { Memory.phys_zero(frames[i] << 12, 0x1000); } else if (i>0) { - int len = 0; + int len; len = file.read(buffer); Memory.phys_memcpy(frames[i] << 12, buffer, 0, len); } @@ -92,8 +92,8 @@ public void onFree() { if (WinAPI.LOG) { System.out.println("Freeing File Mapping: handle="+handle+" name="+name+" fileName="+fileName); } - for (int i=0;imaxSize) return 0; int result = heap.alloc(size, false); - allocs.put(new Integer(result), new Integer(size)); + allocs.put(result, size); return result; } public int realloc(int add, int size, boolean zero) { diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinKeyboard.java b/jdosbox-win/src/main/java/jdos/win/system/WinKeyboard.java index c503adbf..fa803b12 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinKeyboard.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinKeyboard.java @@ -11,7 +11,7 @@ import java.util.BitSet; public class WinKeyboard { - static public BitSet keyState = new BitSet(); + static public final BitSet keyState = new BitSet(); static public int win2java(int winVirtualKeyCode) { switch (winVirtualKeyCode) { @@ -130,183 +130,181 @@ static public int win2java(int winVirtualKeyCode) { return -1; } - static public Main.KeyboardHandler defaultKeyboardHandler = new Main.KeyboardHandler() { - public void handle(KeyEvent key) { - int result = 0; - int additional = 0; - boolean extended = false; + static public final Main.KeyboardHandler defaultKeyboardHandler = key -> { + int result = 0; + int additional = 0; + boolean extended = false; - switch (key.getKeyCode()) { - case KeyEvent.VK_ESCAPE:result=0x1B;break; - case KeyEvent.VK_NUMPAD1:result=0x61;break; - case KeyEvent.VK_1:result=0x31;break; - case KeyEvent.VK_NUMPAD2:result=0x62;break; - case KeyEvent.VK_2:result=0x32;break; - case KeyEvent.VK_NUMPAD3:result=0x63;break; - case KeyEvent.VK_3:result=0x33;break; - case KeyEvent.VK_NUMPAD4:result=0x64;break; - case KeyEvent.VK_4:result=0x34;break; - case KeyEvent.VK_NUMPAD5:result=0x65;break; - case KeyEvent.VK_5:result=0x35;break; - case KeyEvent.VK_NUMPAD6:result=0x66;break; - case KeyEvent.VK_6:result=0x36;break; - case KeyEvent.VK_NUMPAD7:result=0x67;break; - case KeyEvent.VK_7:result=0x37;break; - case KeyEvent.VK_NUMPAD8:result=0x68;break; - case KeyEvent.VK_8:result=0x38;break; - case KeyEvent.VK_NUMPAD9:result=0x69;break; - case KeyEvent.VK_9:result=0x39;break; - case KeyEvent.VK_NUMPAD0:result=0x60;break; - case KeyEvent.VK_0:result=0x30;break; - case KeyEvent.VK_SUBTRACT:result=0x6D;break; - case KeyEvent.VK_MINUS:result=0xBD;break; - case KeyEvent.VK_EQUALS:result=0xBB;break; - case KeyEvent.VK_BACK_SPACE:result=0x08;break; - case KeyEvent.VK_TAB:result=0x09;break; + switch (key.getKeyCode()) { + case KeyEvent.VK_ESCAPE:result=0x1B;break; + case KeyEvent.VK_NUMPAD1:result=0x61;break; + case KeyEvent.VK_1:result=0x31;break; + case KeyEvent.VK_NUMPAD2:result=0x62;break; + case KeyEvent.VK_2:result=0x32;break; + case KeyEvent.VK_NUMPAD3:result=0x63;break; + case KeyEvent.VK_3:result=0x33;break; + case KeyEvent.VK_NUMPAD4:result=0x64;break; + case KeyEvent.VK_4:result=0x34;break; + case KeyEvent.VK_NUMPAD5:result=0x65;break; + case KeyEvent.VK_5:result=0x35;break; + case KeyEvent.VK_NUMPAD6:result=0x66;break; + case KeyEvent.VK_6:result=0x36;break; + case KeyEvent.VK_NUMPAD7:result=0x67;break; + case KeyEvent.VK_7:result=0x37;break; + case KeyEvent.VK_NUMPAD8:result=0x68;break; + case KeyEvent.VK_8:result=0x38;break; + case KeyEvent.VK_NUMPAD9:result=0x69;break; + case KeyEvent.VK_9:result=0x39;break; + case KeyEvent.VK_NUMPAD0:result=0x60;break; + case KeyEvent.VK_0:result=0x30;break; + case KeyEvent.VK_SUBTRACT:result=0x6D;break; + case KeyEvent.VK_MINUS:result=0xBD;break; + case KeyEvent.VK_EQUALS:result=0xBB;break; + case KeyEvent.VK_BACK_SPACE:result=0x08;break; + case KeyEvent.VK_TAB:result=0x09;break; - case KeyEvent.VK_Q:result=0x51;break; - case KeyEvent.VK_W:result=0x57;break; - case KeyEvent.VK_E:result=0x45;break; - case KeyEvent.VK_R:result=0x52;break; - case KeyEvent.VK_T:result=0x54;break; - case KeyEvent.VK_Y:result=0x59;break; - case KeyEvent.VK_U:result=0x55;break; - case KeyEvent.VK_I:result=0x49;break; - case KeyEvent.VK_O:result=0x4F;break; - case KeyEvent.VK_P:result=0x50;break; + case KeyEvent.VK_Q:result=0x51;break; + case KeyEvent.VK_W:result=0x57;break; + case KeyEvent.VK_E:result=0x45;break; + case KeyEvent.VK_R:result=0x52;break; + case KeyEvent.VK_T:result=0x54;break; + case KeyEvent.VK_Y:result=0x59;break; + case KeyEvent.VK_U:result=0x55;break; + case KeyEvent.VK_I:result=0x49;break; + case KeyEvent.VK_O:result=0x4F;break; + case KeyEvent.VK_P:result=0x50;break; - case KeyEvent.VK_OPEN_BRACKET:result=0xDB;break; - case KeyEvent.VK_CLOSE_BRACKET:result=0xDD;break; - case KeyEvent.VK_ENTER:result=0x0D;break; - case KeyEvent.VK_CONTROL: - if (key.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT){ - additional = 0xA2; - extended = false; - } else { - additional = 0xA3; - extended = true; - } - result=0x11; - break; - case KeyEvent.VK_A:result=0x41;break; - case KeyEvent.VK_S:result=0x53;break; - case KeyEvent.VK_D:result=0x44;break; - case KeyEvent.VK_F:result=0x46;break; - case KeyEvent.VK_G:result=0x47;break; - case KeyEvent.VK_H:result=0x48;break; - case KeyEvent.VK_J:result=0x4A;break; - case KeyEvent.VK_K:result=0x4B;break; - case KeyEvent.VK_L:result=0x4C;break; + case KeyEvent.VK_OPEN_BRACKET:result=0xDB;break; + case KeyEvent.VK_CLOSE_BRACKET:result=0xDD;break; + case KeyEvent.VK_ENTER:result=0x0D;break; + case KeyEvent.VK_CONTROL: + if (key.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT){ + additional = 0xA2; + extended = false; + } else { + additional = 0xA3; + extended = true; + } + result=0x11; + break; + case KeyEvent.VK_A:result=0x41;break; + case KeyEvent.VK_S:result=0x53;break; + case KeyEvent.VK_D:result=0x44;break; + case KeyEvent.VK_F:result=0x46;break; + case KeyEvent.VK_G:result=0x47;break; + case KeyEvent.VK_H:result=0x48;break; + case KeyEvent.VK_J:result=0x4A;break; + case KeyEvent.VK_K:result=0x4B;break; + case KeyEvent.VK_L:result=0x4C;break; - case KeyEvent.VK_SEMICOLON:result=0xBA;break; - case KeyEvent.VK_QUOTE:result=0xDE;break; - case KeyEvent.VK_BACK_QUOTE:result=0xCE;break; - case KeyEvent.VK_SHIFT: - if (key.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT) { - extended = false; - additional = 0xA0; - } else { - extended = true; - additional = 0xA1; - } - result = 0x10; - break; - case KeyEvent.VK_BACK_SLASH:result=0xDC;break; - case KeyEvent.VK_Z:result=0x5A;break; - case KeyEvent.VK_X:result=0x58;break; - case KeyEvent.VK_C:result=0x43;break; - case KeyEvent.VK_V:result=0x56;break; - case KeyEvent.VK_B:result=0x42;break; - case KeyEvent.VK_N:result=0x4E;break; - case KeyEvent.VK_M:result=0x4D;break; + case KeyEvent.VK_SEMICOLON:result=0xBA;break; + case KeyEvent.VK_QUOTE:result=0xDE;break; + case KeyEvent.VK_BACK_QUOTE:result=0xCE;break; + case KeyEvent.VK_SHIFT: + if (key.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT) { + extended = false; + additional = 0xA0; + } else { + extended = true; + additional = 0xA1; + } + result = 0x10; + break; + case KeyEvent.VK_BACK_SLASH:result=0xDC;break; + case KeyEvent.VK_Z:result=0x5A;break; + case KeyEvent.VK_X:result=0x58;break; + case KeyEvent.VK_C:result=0x43;break; + case KeyEvent.VK_V:result=0x56;break; + case KeyEvent.VK_B:result=0x42;break; + case KeyEvent.VK_N:result=0x4E;break; + case KeyEvent.VK_M:result=0x4D;break; - case KeyEvent.VK_COMMA:result=0xBC;break; - case KeyEvent.VK_PERIOD:result=0xBE;break; - case KeyEvent.VK_DECIMAL:result=0x6E;break; - case KeyEvent.VK_SLASH:result=0xBF;break; - case KeyEvent.VK_MULTIPLY:result=0x6A;break; - case KeyEvent.VK_ALT: - if (key.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT) { - additional = 0xA4; - extended = false; - } else { - additional = 0xA5; - extended = true; - } - result=0x12; - break; - case KeyEvent.VK_SPACE:result=0x20;break; - case KeyEvent.VK_CAPS_LOCK:result=0x14;break; + case KeyEvent.VK_COMMA:result=0xBC;break; + case KeyEvent.VK_PERIOD:result=0xBE;break; + case KeyEvent.VK_DECIMAL:result=0x6E;break; + case KeyEvent.VK_SLASH:result=0xBF;break; + case KeyEvent.VK_MULTIPLY:result=0x6A;break; + case KeyEvent.VK_ALT: + if (key.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT) { + additional = 0xA4; + extended = false; + } else { + additional = 0xA5; + extended = true; + } + result=0x12; + break; + case KeyEvent.VK_SPACE:result=0x20;break; + case KeyEvent.VK_CAPS_LOCK:result=0x14;break; - case KeyEvent.VK_F1:result=0x70;break; - case KeyEvent.VK_F2:result=0x71;break; - case KeyEvent.VK_F3:result=0x72;break; - case KeyEvent.VK_F4:result=0x73;break; - case KeyEvent.VK_F5:result=0x74;break; - case KeyEvent.VK_F6:result=0x75;break; - case KeyEvent.VK_F7:result=0x76;break; - case KeyEvent.VK_F8:result=0x77;break; - case KeyEvent.VK_F9:result=0x78;break; - case KeyEvent.VK_F10:result=0x79;break; + case KeyEvent.VK_F1:result=0x70;break; + case KeyEvent.VK_F2:result=0x71;break; + case KeyEvent.VK_F3:result=0x72;break; + case KeyEvent.VK_F4:result=0x73;break; + case KeyEvent.VK_F5:result=0x74;break; + case KeyEvent.VK_F6:result=0x75;break; + case KeyEvent.VK_F7:result=0x76;break; + case KeyEvent.VK_F8:result=0x77;break; + case KeyEvent.VK_F9:result=0x78;break; + case KeyEvent.VK_F10:result=0x79;break; - case KeyEvent.VK_NUM_LOCK:result=0x90;break; - case KeyEvent.VK_SCROLL_LOCK:result=0x91;break; + case KeyEvent.VK_NUM_LOCK:result=0x90;break; + case KeyEvent.VK_SCROLL_LOCK:result=0x91;break; - case KeyEvent.VK_PLUS:break; + case KeyEvent.VK_PLUS:break; - case KeyEvent.VK_LESS:break; - case KeyEvent.VK_F11:result=0x7A;break; - case KeyEvent.VK_F12:result=0x7B;break; + case KeyEvent.VK_LESS:break; + case KeyEvent.VK_F11:result=0x7A;break; + case KeyEvent.VK_F12:result=0x7B;break; - //The Extended keys + //The Extended keys - case KeyEvent.VK_DIVIDE:result=0x6F;break; - case KeyEvent.VK_ADD:result=0x6B;break; - case KeyEvent.VK_HOME:result=0x24;break; - case KeyEvent.VK_UP:result=0x26;break; - case KeyEvent.VK_PAGE_UP:result=0x21;break; - case KeyEvent.VK_LEFT:result=0x25;break; - case KeyEvent.VK_RIGHT:result=0x27;break; - case KeyEvent.VK_END:result=0x23;break; - case KeyEvent.VK_DOWN:result=0x28;break; - case KeyEvent.VK_PAGE_DOWN:result=0x22;break; - case KeyEvent.VK_INSERT:result=0x2D;break; - case KeyEvent.VK_DELETE:result=0x2E;break; - case KeyEvent.VK_PAUSE:result=0x13;break; - case KeyEvent.VK_PRINTSCREEN:result=0x2C;break; - default: - if (Log.level<= LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_GUI, LogSeverities.LOG_WARN, "Unknown key code: "+key.getKeyCode()); - return; - } - if (result != 0) { - int repeatCount=1; - int oem=0; - int reserved = 0; - int contextCode = 0; - int previousState = 0; - int transitionState = 0; - int msg = 0; + case KeyEvent.VK_DIVIDE:result=0x6F;break; + case KeyEvent.VK_ADD:result=0x6B;break; + case KeyEvent.VK_HOME:result=0x24;break; + case KeyEvent.VK_UP:result=0x26;break; + case KeyEvent.VK_PAGE_UP:result=0x21;break; + case KeyEvent.VK_LEFT:result=0x25;break; + case KeyEvent.VK_RIGHT:result=0x27;break; + case KeyEvent.VK_END:result=0x23;break; + case KeyEvent.VK_DOWN:result=0x28;break; + case KeyEvent.VK_PAGE_DOWN:result=0x22;break; + case KeyEvent.VK_INSERT:result=0x2D;break; + case KeyEvent.VK_DELETE:result=0x2E;break; + case KeyEvent.VK_PAUSE:result=0x13;break; + case KeyEvent.VK_PRINTSCREEN:result=0x2C;break; + default: + Log.log(LogTypes.LOG_GUI, LogSeverities.LOG_WARN, "Unknown key code: "+key.getKeyCode()); + return; + } + if (result != 0) { + int repeatCount=1; + int oem=0; + int reserved = 0; + int contextCode = 0; + int previousState = 0; + int transitionState = 0; + int msg = 0; - if (key.getID() == KeyEvent.KEY_PRESSED) { - msg = WinWindow.WM_KEYDOWN; - transitionState = 0; // always 0 - if (keyState.get(result)) - return; - keyState.set(result); - if (additional != 0) - keyState.set(additional); - } else if (key.getID() == KeyEvent.KEY_RELEASED) { - msg = WinWindow.WM_KEYUP; - repeatCount=1; // repeat count is always 1 - previousState=1; // always 1 - transitionState=1; // always 1 - keyState.clear(result); - if (additional != 0) - keyState.clear(additional); - } - if (msg != 0) - Input.addKeyboardMsg(msg, result, repeatCount | (oem << 16) | (extended? 1<<24 : 0) | (contextCode << 29) | (previousState << 30) | (transitionState << 31), (BitSet)keyState.clone()); + if (key.getID() == KeyEvent.KEY_PRESSED) { + msg = WinWindow.WM_KEYDOWN; + transitionState = 0; // always 0 + if (keyState.get(result)) + return; + keyState.set(result); + if (additional != 0) + keyState.set(additional); + } else if (key.getID() == KeyEvent.KEY_RELEASED) { + msg = WinWindow.WM_KEYUP; + repeatCount=1; // repeat count is always 1 + previousState=1; // always 1 + transitionState=1; // always 1 + keyState.clear(result); + if (additional != 0) + keyState.clear(additional); } + if (msg != 0) + Input.addKeyboardMsg(msg, result, repeatCount | (0) | (extended? 1<<24 : 0) | (0) | (previousState << 30) | (transitionState << 31), (BitSet)keyState.clone()); } }; } \ No newline at end of file diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinMCI.java b/jdosbox-win/src/main/java/jdos/win/system/WinMCI.java index 023bae30..ee790f23 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinMCI.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinMCI.java @@ -10,7 +10,7 @@ abstract public class WinMCI extends WinObject { static public WinMCI getMCI(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinMCI)) + if (!(object instanceof WinMCI)) return null; return (WinMCI)object; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinMidi.java b/jdosbox-win/src/main/java/jdos/win/system/WinMidi.java index 283dd9d5..216c4583 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinMidi.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinMidi.java @@ -45,12 +45,10 @@ public boolean setFile(FilePath file) { sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.setSequence(sequence); - sequencer.addMetaEventListener(new MetaEventListener() { - public void meta(MetaMessage meta) { - if ( meta.getType() == 47 ) { - if (hWnd != 0) - sendNotification(MCI_NOTIFY_SUCCESSFUL); - } + sequencer.addMetaEventListener(meta -> { + if ( meta.getType() == 47 ) { + if (hWnd != 0) + sendNotification(MCI_NOTIFY_SUCCESSFUL); } }); return true; diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinMouse.java b/jdosbox-win/src/main/java/jdos/win/system/WinMouse.java index 018877e5..f0b89cbc 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinMouse.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinMouse.java @@ -7,37 +7,35 @@ import java.awt.event.MouseEvent; public class WinMouse { - static public Main.MouseHandler defaultMouseHandler = new Main.MouseHandler() { - public void handle(MouseEvent event) { - int msg = 0; - int wParam = 0; - WinPoint point = new WinPoint(event.getX(), event.getY()); + static public final Main.MouseHandler defaultMouseHandler = event -> { + int msg = 0; + int wParam = 0; + WinPoint point = new WinPoint(event.getX(), event.getY()); - if (event.getID() == MouseEvent.MOUSE_MOVED || event.getID() == MouseEvent.MOUSE_DRAGGED) { - msg = WinWindow.WM_MOUSEMOVE; - } else if (event.getID() == MouseEvent.MOUSE_PRESSED) { - if (event.getButton() == MouseEvent.BUTTON1) { - msg = WinWindow.WM_LBUTTONDOWN; - } else if (event.getButton() == MouseEvent.BUTTON2) { - msg = WinWindow.WM_MBUTTONDOWN; - } else if (event.getButton() == MouseEvent.BUTTON3) { - msg = WinWindow.WM_RBUTTONDOWN; - } - } else if (event.getID() == MouseEvent.MOUSE_RELEASED) { - if (event.getButton() == MouseEvent.BUTTON1) { - msg = WinWindow.WM_LBUTTONUP; - } else if (event.getButton() == MouseEvent.BUTTON2) { - msg = WinWindow.WM_MBUTTONUP; - } else if (event.getButton() == MouseEvent.BUTTON3) { - msg = WinWindow.WM_RBUTTONUP; - } + if (event.getID() == MouseEvent.MOUSE_MOVED || event.getID() == MouseEvent.MOUSE_DRAGGED) { + msg = WinWindow.WM_MOUSEMOVE; + } else if (event.getID() == MouseEvent.MOUSE_PRESSED) { + if (event.getButton() == MouseEvent.BUTTON1) { + msg = WinWindow.WM_LBUTTONDOWN; + } else if (event.getButton() == MouseEvent.BUTTON2) { + msg = WinWindow.WM_MBUTTONDOWN; + } else if (event.getButton() == MouseEvent.BUTTON3) { + msg = WinWindow.WM_RBUTTONDOWN; } - if (msg == 0) { - System.out.println("Unknown mouse message: "+event.toString()); - return; + } else if (event.getID() == MouseEvent.MOUSE_RELEASED) { + if (event.getButton() == MouseEvent.BUTTON1) { + msg = WinWindow.WM_LBUTTONUP; + } else if (event.getButton() == MouseEvent.BUTTON2) { + msg = WinWindow.WM_MBUTTONUP; + } else if (event.getButton() == MouseEvent.BUTTON3) { + msg = WinWindow.WM_RBUTTONUP; } - StaticData.currentPos = point.copy(); - Input.addMouseMsg(msg, point, wParam); } + if (msg == 0) { + System.out.println("Unknown mouse message: "+ event); + return; + } + StaticData.currentPos = point.copy(); + Input.addMouseMsg(msg, point, wParam); }; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinMsg.java b/jdosbox-win/src/main/java/jdos/win/system/WinMsg.java index 834da534..02a0d5ca 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinMsg.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinMsg.java @@ -25,11 +25,11 @@ public WinMsg(int hWnd, int message, int wParam, int lParam) { public BitSet keyState; public WinThread callingThread; public int sendResult; - public int hwnd; - public int message; + public final int hwnd; + public final int message; public int wParam; public int lParam; - public int time; - public int x; - public int y; + public final int time; + public final int x; + public final int y; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinMutex.java b/jdosbox-win/src/main/java/jdos/win/system/WinMutex.java index 4e5fdaa2..2acc2319 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinMutex.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinMutex.java @@ -9,7 +9,7 @@ static public WinMutex create(String name) { static public WinMutex get(int handle) { WinObject object = getObject(handle); - if (object == null || !(object instanceof WinMutex)) + if (!(object instanceof WinMutex)) return null; return (WinMutex)object; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinObject.java b/jdosbox-win/src/main/java/jdos/win/system/WinObject.java index 9e167c6b..7030928d 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinObject.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinObject.java @@ -12,7 +12,7 @@ static protected int nextObjectId() { } static public WinObject getObject(int handle) { - return StaticData.objects.get(new Integer(handle)); + return StaticData.objects.get(handle); } static public WinObject getNamedObject(String name) { return StaticData.namedObjects.get(name); @@ -25,7 +25,7 @@ public WinObject(String name, int handle) { if (StaticData.objects.put(handle, this) != null) { Win.panic("Object handle collision: handle="+handle); } - if (name != null && name.length()>0) + if (name != null && !name.isEmpty()) StaticData.namedObjects.put(name, this); open(); } @@ -53,7 +53,7 @@ public void close() { refCount--; if (refCount == 0) { StaticData.objects.remove(handle); - if (name != null && name.length()>0) + if (name != null && !name.isEmpty()) StaticData.namedObjects.remove(name); onFree(); } @@ -67,7 +67,7 @@ public void makePermanent() { } public String name; - public int handle; + public final int handle; private int refCount = 0; public Object data; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinRegistry.java b/jdosbox-win/src/main/java/jdos/win/system/WinRegistry.java index 235a98c2..4d465608 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinRegistry.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinRegistry.java @@ -29,18 +29,18 @@ public class WinRegistry { public static final int HKEY_CURRENT_CONFIG = 0x80000005; public static final int HKEY_DYN_DATA = 0x80000006; - private class Directory { + private static class Directory { public Directory(String name) { this.name = name; } - public String name; + public final String name; - public Hashtable children = new Hashtable(); - public Hashtable values = new Hashtable(); + public final Hashtable children = new Hashtable(); + public final Hashtable values = new Hashtable(); public Value defaultValue; } - private class Value { + private static class Value { public Value(int type, byte[] data) { this.type = type; this.data = data; @@ -54,8 +54,8 @@ public byte[] getData() { public byte[] data; } - private class HKey { - String[] parts; + private static class HKey { + final String[] parts; public HKey(String path) { parts = StringUtil.split(path, "\\"); @@ -69,11 +69,11 @@ public HKey(HKey parentKey, String path) { } } - private Hashtable hKeys = new Hashtable(); + private final Hashtable hKeys = new Hashtable(); - private Directory root = new Directory("root"); - private HKey currentUser = new HKey("HKEY_CURRENT_USER"); - private HKey localMachine = new HKey("HKEY_LOCAL_MACHINE"); + private final Directory root = new Directory("root"); + private final HKey currentUser = new HKey("HKEY_CURRENT_USER"); + private final HKey localMachine = new HKey("HKEY_LOCAL_MACHINE"); private int nextKey = 0x1000; private HKey getHKey(int hKey) { @@ -88,7 +88,7 @@ private HKey getHKey(int hKey) { return null; } } else { - return (HKey)hKeys.get(new Integer(hKey)); + return (HKey)hKeys.get(hKey); } } @@ -125,7 +125,7 @@ public int createKey(int hKey, int lpSubKey, int phkResult, int lpdwDisposition) } } int result = nextKey(); - hKeys.put(new Integer(result), key); + hKeys.put(result, key); if (phkResult != 0) { Memory.mem_writed(phkResult, result); } @@ -136,7 +136,7 @@ public int openKey(int hKey, int lpSubKey, int phkResult) { HKey key = new HKey(getHKey(hKey), new LittleEndianFile(lpSubKey).readCString()); if (getDirectory(key) != null) { int result = nextKey(); - hKeys.put(new Integer(result), key); + hKeys.put(result, key); return Error.ERROR_SUCCESS; } else { return Error.ERROR_BAD_PATHNAME; @@ -148,7 +148,7 @@ public int setValue(int hKey, int lpValue, int dwType , int lpData, int cbData) if (directory == null) { return Error.ERROR_BAD_PATHNAME; } - Value value = null; + Value value; if (lpValue == 0) value = directory.defaultValue; else @@ -176,14 +176,14 @@ public int getValue(int hKey, int lpValue, int lpType, int lpData, int lpcbData) if (directory == null) { return Error.ERROR_BAD_PATHNAME; } - Value value = null; + Value value; if (lpValue == 0) value = directory.defaultValue; else { String name = new LittleEndianFile(lpValue).readCString(); value = (Value)directory.values.get(name); if (value == null && name.equals("Game File Number")) { - value = new Value(4, new byte[]{1,0,0,0}); + value = new Value(4, new byte[]{1, 0, 0, 0}); directory.values.put("Game File Number", value); } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinSystem.java b/jdosbox-win/src/main/java/jdos/win/system/WinSystem.java index 06afc018..9ed00a7a 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinSystem.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinSystem.java @@ -87,7 +87,7 @@ static public int getTickCount() { return (int)(System.currentTimeMillis() - startTime); } - static private Callback.Handler returnCallback = new Callback.Handler() { + static private final Callback.Handler returnCallback = new Callback.Handler() { public String getName() { return "WinProc"; } diff --git a/jdosbox-win/src/main/java/jdos/win/system/WinTimer.java b/jdosbox-win/src/main/java/jdos/win/system/WinTimer.java index 664a5c6d..30162889 100644 --- a/jdosbox-win/src/main/java/jdos/win/system/WinTimer.java +++ b/jdosbox-win/src/main/java/jdos/win/system/WinTimer.java @@ -1,6 +1,5 @@ package jdos.win.system; -import jdos.win.builtin.WinAPI; import jdos.win.builtin.kernel32.WinThread; import jdos.win.builtin.user32.WinWindow; @@ -9,14 +8,14 @@ import java.util.Hashtable; public class WinTimer { - int hWnd; + final int hWnd; public WinTimer(int hWnd) { this.hWnd = hWnd; } - ArrayList itemsByTime = new ArrayList(); - Hashtable itemsById = new Hashtable(); + final ArrayList itemsByTime = new ArrayList<>(); + final Hashtable itemsById = new Hashtable<>(); static private class TimerItem implements Comparable { public TimerItem(int id, int eip, int elapse) { @@ -25,10 +24,10 @@ public TimerItem(int id, int eip, int elapse) { this.elapse = elapse; this.nextRun = WinSystem.getTickCount()+elapse; } - int id; - int eip; + final int id; + final int eip; int nextRun; - int elapse; + final int elapse; public int compareTo(Object o) { return nextRun - ((TimerItem)o).nextRun; @@ -58,24 +57,22 @@ public int addTimer(int time, int id, int timerProc) { return id; } - public int killTimer(int id) { - TimerItem item = (TimerItem)itemsById.remove(new Integer(id)); + public void killTimer(int id) { + TimerItem item = itemsById.remove(id); if (item != null) { itemsByTime.remove(item); - return WinAPI.TRUE; } - return WinAPI.FALSE; } public int getNextTimerTime() { - if (itemsByTime.size()>0) + if (!itemsByTime.isEmpty()) return itemsByTime.get(0).nextRun; return Integer.MAX_VALUE; } public boolean getNextTimerMsg(int msgAddress, int time, boolean reset) { - if (itemsByTime.size()>0) { - TimerItem item = (TimerItem)itemsByTime.get(0); + if (!itemsByTime.isEmpty()) { + TimerItem item = itemsByTime.get(0); if (item.nextRun disks = new Hashtable(); - static Set faked = new HashSet(); + static public final Hashtable disks = new Hashtable<>(); + static final Set faked = new HashSet<>(); static { faked.add("\\windows\\system32\\dsound.vxd"); @@ -124,10 +125,10 @@ public void close() { private FilePathInterface delagate; static private class FatPath implements FilePathInterface { - String fullPath; - String path; - Drive_fat drive; - DOS_File file; + final String fullPath; + final String path; + final Drive_fat drive; + final DOS_File file; long length = 0; public FatPath(Drive_fat drive, String path) { @@ -214,9 +215,9 @@ public String getAbsolutePath() { public InputStream getInputStream() { return new InputStream() { - byte[] buf = new byte[1]; + final byte[] buf = new byte[1]; - public int read() throws IOException { + public int read() { int result = FatPath.this.read(buf); if (result == 1) @@ -281,7 +282,7 @@ public void close() { } } static private class JavaPath implements FilePathInterface { - File file; + final File file; RandomAccessFile openFile; public boolean open(boolean write) { @@ -298,6 +299,7 @@ public void seek(long pos) { try { openFile.seek(pos); } catch (Exception e) { + throw new RuntimeException(e); } } } @@ -307,6 +309,7 @@ public void skipBytes(int count) { try { openFile.skipBytes(count); } catch (Exception e) { + throw new RuntimeException(e); } } } @@ -316,6 +319,7 @@ public long getFilePointer() { try { return openFile.getFilePointer(); } catch (Exception e) { + throw new RuntimeException(e); } } return 0; @@ -326,6 +330,7 @@ public int read(byte[] buffer) { try { return openFile.read(buffer); } catch (Exception e) { + throw new RuntimeException(e); } } return 0; @@ -336,6 +341,7 @@ public void write(byte[] buffer) { try { openFile.write(buffer); } catch (Exception e) { + throw new RuntimeException(e); } } } @@ -345,6 +351,7 @@ public void close() { try { openFile.close(); } catch (Exception e) { + throw new RuntimeException(e); } openFile = null; } @@ -411,34 +418,34 @@ public String getAbsolutePath() { public InputStream getInputStream() { try { - return new FileInputStream(file); + return Files.newInputStream(file.toPath()); } catch (Exception e) { return null; } } } - private static interface FilePathInterface { - public FilePath getParentFile(); - public boolean exists(); - public String getName(); - public boolean mkdirs(); - public boolean delete(); - public boolean createNewFile(); - public FilePath[] listFiles(FileFilter filter); - public long lastModified(); - public long length(); - public boolean isDirectory(); - public boolean renameTo(FilePath path); - public String getAbsolutePath(); - public InputStream getInputStream(); - - public boolean open(boolean write); - public void seek(long pos); - public void skipBytes(int count); - public long getFilePointer(); - public int read(byte[] buffer); - public void write(byte[] buffer); - public void close(); + private interface FilePathInterface { + FilePath getParentFile(); + boolean exists(); + String getName(); + boolean mkdirs(); + boolean delete(); + boolean createNewFile(); + FilePath[] listFiles(FileFilter filter); + long lastModified(); + long length(); + boolean isDirectory(); + boolean renameTo(FilePath path); + String getAbsolutePath(); + InputStream getInputStream(); + + boolean open(boolean write); + void seek(long pos); + void skipBytes(int count); + long getFilePointer(); + int read(byte[] buffer); + void write(byte[] buffer); + void close(); } } diff --git a/jdosbox-win/src/main/java/jdos/win/utils/Heap.java b/jdosbox-win/src/main/java/jdos/win/utils/Heap.java index 96a31974..222e7edb 100644 --- a/jdosbox-win/src/main/java/jdos/win/utils/Heap.java +++ b/jdosbox-win/src/main/java/jdos/win/utils/Heap.java @@ -6,19 +6,15 @@ public class Heap { static private final int SMALLEST_SIZE_FOR_SPLIT = 4; - private long start; - private long end; - private ArrayList itemsBySize = new ArrayList(); - private ArrayList itemsByAddress = new ArrayList(); - private Hashtable usedMemory = new Hashtable(); + private final long start; + private final long end; + private final ArrayList itemsBySize = new ArrayList(); + private final ArrayList itemsByAddress = new ArrayList(); + private final Hashtable usedMemory = new Hashtable(); private static class HeapItem implements Comparable { public int compareTo(Object o) { - if (((HeapItem)o).size == size) - return 0; - if (((HeapItem)o).size < size) - return -1; - return 1; + return Long.compare(((HeapItem) o).size, size); } public HeapItem(long address, long size) { @@ -32,7 +28,7 @@ public HeapItem(long address, long size) { public Heap(long start, long end) { this.start = start; this.end = end; - insertItem(new HeapItem(start & 0xFFFFFFFFl, end-start)); + insertItem(new HeapItem(start & 0xFFFFFFFFL, end-start)); } private int findIndexBySize(long key) { @@ -81,13 +77,13 @@ private void insertItem(HeapItem item) { } private HeapItem getLastItem() { - if (itemsByAddress.size()==0) + if (itemsByAddress.isEmpty()) return null; return (HeapItem)itemsByAddress.get(itemsByAddress.size()-1); } private HeapItem getLargestItem() { - if (itemsBySize.size() == 0) + if (itemsBySize.isEmpty()) return null; return (HeapItem)itemsBySize.get(itemsBySize.size()-1); } @@ -134,7 +130,7 @@ public long getNextAddress(long address, long size, boolean pageAlign) { } public long alloc(long address, long size) { - address&=0xFFFFFFFFl; + address&= 0xFFFFFFFFL; int index = findIndexByAddress(address); if (index<0) { HeapItem last = getLastItem(); @@ -144,7 +140,7 @@ public long alloc(long address, long size) { last.size = address - last.address; if (last.size != 0) insertItem(last); - usedMemory.put(new Long(address), new HeapItem(address, size)); + usedMemory.put(address, new HeapItem(address, size)); if (address+size=start) { insertItem(new HeapItem(oldAddress, address-oldAddress)); } @@ -212,15 +208,15 @@ public long alloc(long size, boolean pageAlign) { insertItem(newItem); item.size-=newSize; } - usedMemory.put(new Long(item.address), item); + usedMemory.put(item.address, item); return item.address; } public void free(int p1) { - long p = p1 & 0xFFFFFFFFl; + long p = p1 & 0xFFFFFFFFL; if (p == 0) return; - HeapItem item = (HeapItem)usedMemory.remove(new Long(p)); + HeapItem item = (HeapItem)usedMemory.remove(p); if (item == null) { System.out.println("Heap is corrupt, tried to free 0x"+Long.toString(p, 16)); System.exit(0); diff --git a/jdosbox-win/src/main/java/jdos/win/utils/LittleEndian.java b/jdosbox-win/src/main/java/jdos/win/utils/LittleEndian.java index d87fdfda..e349165b 100644 --- a/jdosbox-win/src/main/java/jdos/win/utils/LittleEndian.java +++ b/jdosbox-win/src/main/java/jdos/win/utils/LittleEndian.java @@ -1,7 +1,7 @@ package jdos.win.utils; public class LittleEndian { - byte[] buffer; + final byte[] buffer; int pos; public LittleEndian(byte[] buffer) { @@ -73,7 +73,7 @@ public final short readUnsignedByte() { } static public String readCString(byte[] buffer, int offset) { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); while (offset0) { char c = (char)buffer[offset++]; // :TODO: need to research converting according to 1252 if (c == 0) @@ -102,7 +102,7 @@ static public String readCString(byte[] buffer, int offset, int len) { } static public String readCStringW(byte[] buffer, int offset) { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); while (offset0) { char c = (char)readShort(buffer, offset); if (c == 0) @@ -125,23 +125,23 @@ static public String readCStringW(byte[] buffer, int offset, int len) { } return result.toString(); } - static public final short readShort(byte[] buffer, int offset) { + static public short readShort(byte[] buffer, int offset) { return (short)((buffer[offset] & 0xFF) | ((buffer[offset+1] & 0xFF) << 8)); } - static public final int readUnsignedShort(byte[] buffer, int offset) { + static public int readUnsignedShort(byte[] buffer, int offset) { return (buffer[offset] & 0xFF) | ((buffer[offset+1] & 0xFF) << 8); } - static public final int readInt(byte[] buffer, int offset) { + static public int readInt(byte[] buffer, int offset) { return (buffer[offset] & 0xFF) | ((buffer[offset+1] & 0xFF) << 8) | ((buffer[offset+2] & 0xFF) << 16) | ((buffer[offset+3] & 0xFF) << 24); } - static public final long readUnsignedInt(byte[] buffer, int offset) { - return readInt(buffer, offset) & 0xFFFFFFFFl; + static public long readUnsignedInt(byte[] buffer, int offset) { + return readInt(buffer, offset) & 0xFFFFFFFFL; } - static public final short readUnsignedByte(byte[] buffer, int offset) { + static public short readUnsignedByte(byte[] buffer, int offset) { return (short)(buffer[offset] & 0xFF); } } diff --git a/jdosbox-win/src/main/java/jdos/win/utils/Path.java b/jdosbox-win/src/main/java/jdos/win/utils/Path.java index 3effa3b8..e5edd7e5 100644 --- a/jdosbox-win/src/main/java/jdos/win/utils/Path.java +++ b/jdosbox-win/src/main/java/jdos/win/utils/Path.java @@ -5,6 +5,6 @@ public Path(String nativePath, String winPath) { this.nativePath = nativePath; this.winPath = winPath; } - public String nativePath; - public String winPath; + public final String nativePath; + public final String winPath; } diff --git a/jdosbox-win/src/main/java/jdos/win/utils/Pixel.java b/jdosbox-win/src/main/java/jdos/win/utils/Pixel.java index 854c03f1..e774eac0 100644 --- a/jdosbox-win/src/main/java/jdos/win/utils/Pixel.java +++ b/jdosbox-win/src/main/java/jdos/win/utils/Pixel.java @@ -29,9 +29,9 @@ public static BufferedImage makeColorTransparent(BufferedImage im, final Color c ImageFilter filter = new RGBImageFilter() { // the color we are looking for... Alpha bits are set to opaque - public int markerRGB = color.getRGB() | 0xFF000000; + public final int markerRGB = color.getRGB() | 0xFF000000; - public final int filterRGB(int x, int y, int rgb) { + public int filterRGB(int x, int y, int rgb) { if ((rgb | 0xFF000000) == markerRGB) { // Mark the alpha bits as zero - transparent return 0x00FFFFFF & rgb; @@ -54,7 +54,7 @@ static public BufferedImage flipVertically(BufferedImage image) { } static public BufferedImage createImage(byte[] bits, int bpp, boolean alpha, int[] srcPalette, int width, int height, boolean flip) { - IndexColorModel cm = null; + IndexColorModel cm; byte[] pixels = new byte[width * height]; int pitch = getPitch(width, bpp); BufferedImage image = null; @@ -123,9 +123,8 @@ else if (srcBpp == 4) else Win.panic("Currently only 24-bit, 16-bit, 8-bit and 4-bit bitmaps are supported"); WritableRaster raster = Raster.createWritableRaster(sampleModel, dataBuffer, null); - BufferedImage bi = new BufferedImage(sp, raster, false, null); // Main.drawImage(bi);try {Thread.sleep(1000*5);} catch (Exception e) {} - return bi; + return new BufferedImage(sp, raster, false, null); } catch (Exception e) { e.printStackTrace(); } @@ -144,9 +143,8 @@ else if (srcBpp == 4) DataBuffer dataBuffer = new DataBufferUShort(pixels, width*height); WritableRaster raster = Raster.createPackedRaster(dataBuffer, width, height, width, new int[]{0xF800, 0x07E0, 0x001F}, null); ColorModel colorModel = new DirectColorModel(16, 0xF800, 0x07E0, 0x001F); - BufferedImage bi = new BufferedImage(colorModel, raster, false, null); //Main.drawImage(bi);try {Thread.sleep(1000*60);} catch (Exception e) {} - return bi; + return new BufferedImage(colorModel, raster, false, null); } catch (Exception e) { e.printStackTrace(); } diff --git a/jdosbox-win/src/main/java/jdos/win/utils/Ptr.java b/jdosbox-win/src/main/java/jdos/win/utils/Ptr.java index 8c317c91..afb6a7f3 100644 --- a/jdosbox-win/src/main/java/jdos/win/utils/Ptr.java +++ b/jdosbox-win/src/main/java/jdos/win/utils/Ptr.java @@ -2,6 +2,6 @@ public class Ptr { static public String toString(int v) { - return Long.toString(v & 0xFFFFFFFFl, 16); + return Long.toString(v & 0xFFFFFFFFL, 16); } } diff --git a/jdosbox-win/src/main/java/jdos/win/utils/StringUtil.java b/jdosbox-win/src/main/java/jdos/win/utils/StringUtil.java index 982d8f66..7a871a05 100644 --- a/jdosbox-win/src/main/java/jdos/win/utils/StringUtil.java +++ b/jdosbox-win/src/main/java/jdos/win/utils/StringUtil.java @@ -8,7 +8,7 @@ public class StringUtil extends WinAPI { public static String[] split(final String input, String delimiter) { - if (input != null && input.length() > 0) { + if (input != null && !input.isEmpty()) { int index1 = 0; int index2 = input.indexOf(delimiter); Vector result = new Vector(); @@ -41,7 +41,7 @@ static public int strlenW(int str ) { } static public String getString(int address) { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); while (true) { char c = (char)Memory.mem_readb(address++); // :TODO: need to research converting according to 1252 if (c == 0) @@ -52,7 +52,7 @@ static public String getString(int address) { } static public String getStringW(int address) { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); while (true) { char c = (char)Memory.mem_readw(address); address+=2; @@ -66,7 +66,7 @@ static public String getStringW(int address) { static public String getString(int address, int count) { if (count == -1) return getString(address); - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); for (int i=0;ic2) return 1; - if (c1 == 0 && c1 == c2) { + if (c1 == 0) { return 0; } - if (c1 == 0) - return -1; - if (c2 == 0) - return 1; } } static public void strcpyW(int address, String value) { char[] c = value.toCharArray(); - for (int i=0;i>4); decoder.call(); - assertTrue(RAM.readbs(MEM_BASE_DS)==0); - assertTrue(RAM.readbs(MEM_BASE_SS)==(byte)0xAB); + assertEquals(0, RAM.readbs(MEM_BASE_DS)); + assertEquals(RAM.readbs(MEM_BASE_SS), (byte) 0xAB); RAM.writebs(MEM_BASE_SS, (byte)0); } //0x65 //SEG GS public void testSegGS() { - assertTrue(RAM.readbs(MEM_BASE_DS)==0); + assertEquals(0, RAM.readbs(MEM_BASE_DS)); newInstruction(0x88); pushIb((byte)0); CPU_Regs.reg_eax.dword(0xAB); decoder.call(); - assertTrue(RAM.readbs(MEM_BASE_DS)==(byte)0xAB); + assertEquals(RAM.readbs(MEM_BASE_DS), (byte) 0xAB); RAM.writebs(MEM_BASE_DS,(byte)0); newInstruction(0x65); @@ -1686,8 +1686,8 @@ public void testSegGS() { CPU_Regs.SegSet16GS(MEM_BASE_SS>>4); decoder.call(); - assertTrue(RAM.readbs(MEM_BASE_DS)==0); - assertTrue(RAM.readbs(MEM_BASE_SS)==(byte)0xAB); + assertEquals(0, RAM.readbs(MEM_BASE_DS)); + assertEquals(RAM.readbs(MEM_BASE_SS), (byte) 0xAB); RAM.writebs(MEM_BASE_SS, (byte)0); } @@ -1698,14 +1698,14 @@ public void testSegGS() { // 0x67 //Address Size Prefix public void testAddressSizePrefix() { - assertTrue(RAM.readbs(MEM_BASE_DS+0x10000)==0); + assertEquals(0, RAM.readbs(MEM_BASE_DS + 0x10000)); newInstruction(0x67); pushIb((byte)0x88); pushIb((byte)1); CPU_Regs.reg_ecx.dword(0x10000); CPU_Regs.reg_eax.dword(0xAB); decoder.call(); - assertTrue(RAM.readbs(MEM_BASE_DS+0x10000)==(byte)0xAB); + assertEquals(RAM.readbs(MEM_BASE_DS + 0x10000), (byte) 0xAB); RAM.writebs(MEM_BASE_DS+0x10000, (byte)0); } @@ -1717,9 +1717,9 @@ public void testPushIw() { pushIw((short)0xABCD); pushIw((short)0xEF01); // just make sure it doesn't read more decoder.call(); - assertTrue(CPU_Regs.reg_esp.dword==0xFE); - assertTrue(RAM.readw(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword)==0xABCD); - assertTrue(RAM.readd(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword)==0xABCD); + assertEquals(0xFE, CPU_Regs.reg_esp.dword); + assertEquals(0xABCD, RAM.readw(CPU_Regs.reg_ssPhys.dword + CPU_Regs.reg_esp.dword)); + assertEquals(0xABCD, RAM.readd(CPU_Regs.reg_ssPhys.dword + CPU_Regs.reg_esp.dword)); RAM.writew(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword, 0); } @@ -1731,25 +1731,25 @@ public void testImulGwEwIw() { pushIw((short)1000); CPU_Regs.reg_ecx.word(9); decoder.call(); - assertTrue(CPU_Regs.reg_eax.word()==9000); + assertEquals(9000, CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); newInstruction(0x69); pushIb((byte)0xC1); pushIw((short)-9); CPU_Regs.reg_ecx.word(1000); decoder.call(); - assertTrue((short)CPU_Regs.reg_eax.word()==-9000); + assertEquals(-9000, (short) CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); newInstruction(0x69); pushIb((byte)0xC1); pushIw((short)0x2); CPU_Regs.reg_ecx.word(0x8000); decoder.call(); - assertTrue((short)CPU_Regs.reg_eax.word()==0); + assertEquals(0, (short) CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -1758,9 +1758,9 @@ public void testImulGwEwIw() { pushIw((short)-384); RAM.writew(CPU_Regs.reg_dsPhys.dword, 20); decoder.call(); - assertTrue((short)CPU_Regs.reg_eax.word()==-7680); + assertEquals(-7680, (short) CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); RAM.writew(CPU_Regs.reg_dsPhys.dword, 0); } @@ -1773,8 +1773,8 @@ public void testPushIb() { pushIb((byte)-71); pushIw((short)0xEF01); // just make sure it doesn't read more decoder.call(); - assertTrue(CPU_Regs.reg_esp.dword==0xFE); - assertTrue((short)RAM.readw(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword)==-71); + assertEquals(0xFE, CPU_Regs.reg_esp.dword); + assertEquals(-71, (short) RAM.readw(CPU_Regs.reg_ssPhys.dword + CPU_Regs.reg_esp.dword)); RAM.writew(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword, 0); } @@ -1786,25 +1786,25 @@ public void testImulGwEwIb() { pushIb((byte)9); CPU_Regs.reg_ecx.word(1000); decoder.call(); - assertTrue(CPU_Regs.reg_eax.word()==9000); + assertEquals(9000, CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); newInstruction(0x6b); pushIb((byte)0xC1); pushIb((byte)-9); CPU_Regs.reg_ecx.word(1000); decoder.call(); - assertTrue((short)CPU_Regs.reg_eax.word()==-9000); + assertEquals(-9000, (short) CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); newInstruction(0x6b); pushIb((byte)0xC1); pushIb((byte)0x2); CPU_Regs.reg_ecx.word(0x8000); decoder.call(); - assertTrue((short)CPU_Regs.reg_eax.word()==0); + assertEquals(0, (short) CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -1813,9 +1813,9 @@ public void testImulGwEwIb() { pushIw((byte)-127); RAM.writew(CPU_Regs.reg_dsPhys.dword, -20); decoder.call(); - assertTrue((short)CPU_Regs.reg_eax.word()==2540); + assertEquals(2540, (short) CPU_Regs.reg_eax.word()); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); RAM.writew(CPU_Regs.reg_dsPhys.dword, 0); } @@ -1827,10 +1827,10 @@ public void testInsb() { CPU_Regs.reg_ecx.dword(1); CPU_Regs.reg_edi.dword(0); CPU_Regs.SegSet16ES(CPU_Regs.reg_dsVal.dword+0x100); - IoHandler.IO_ReadHandler handler = new IoHandler.IO_ReadHandler() {public int call(int port, int iolen) {return 0xAB;}}; + IoHandler.IO_ReadHandler handler = (port, iolen) -> 0xAB; IoHandler.IO_RegisterReadHandler(17000, handler, IoHandler.IO_MB); - decoder.call(); - assertTrue(RAM.readb(CPU_Regs.reg_esPhys.dword)==0xAB); + decoder.call(); + assertEquals(0xAB, RAM.readb(CPU_Regs.reg_esPhys.dword)); IoHandler.IO_FreeReadHandler(17000, IoHandler.IO_MB); RAM.writeb(CPU_Regs.reg_esPhys.dword,(short)0); } @@ -1843,10 +1843,10 @@ public void testInsw() { CPU_Regs.reg_ecx.dword(1); CPU_Regs.reg_edi.dword(0); CPU_Regs.SegSet16ES(CPU_Regs.reg_dsVal.dword+0x100); - IoHandler.IO_ReadHandler handler = new IoHandler.IO_ReadHandler() {public int call(int port, int iolen) {return 0xAB;}}; + IoHandler.IO_ReadHandler handler = (port, iolen) -> 0xAB; IoHandler.IO_RegisterReadHandler(17000, handler, IoHandler.IO_MW); decoder.call(); - assertTrue(RAM.readw(CPU_Regs.reg_esPhys.dword)==0xAB); + assertEquals(0xAB, RAM.readw(CPU_Regs.reg_esPhys.dword)); IoHandler.IO_FreeReadHandler(17000, IoHandler.IO_MW); RAM.writew(CPU_Regs.reg_esPhys.dword,0); } @@ -1860,11 +1860,11 @@ public void testOutsb() { CPU_Regs.reg_ecx.dword(1); CPU_Regs.reg_esi.dword(0); result = 0; - IoHandler.IO_WriteHandler handler = new IoHandler.IO_WriteHandler() {public void call(int port, int val, int iolen) {result=val;}}; + IoHandler.IO_WriteHandler handler = (port, val, iolen) -> result=val; IoHandler.IO_RegisterWriteHandler(17000, handler, IoHandler.IO_MB); RAM.writew(CPU_Regs.reg_dsPhys.dword, 0xABCD); decoder.call(); - assertTrue(result==0xCD); + assertEquals(0xCD, result); IoHandler.IO_FreeWriteHandler(17000, IoHandler.IO_MB); RAM.writew(CPU_Regs.reg_dsPhys.dword, 0); } @@ -1877,11 +1877,11 @@ public void testOutsw() { CPU_Regs.reg_ecx.dword(1); CPU_Regs.reg_esi.dword(0); result = 0; - IoHandler.IO_WriteHandler handler = new IoHandler.IO_WriteHandler() {public void call(int port, int val, int iolen) {result=val;}}; + IoHandler.IO_WriteHandler handler = (port, val, iolen) -> result=val; IoHandler.IO_RegisterWriteHandler(17000, handler, IoHandler.IO_MW); RAM.writed(CPU_Regs.reg_dsPhys.dword, 0xABCDEF01); decoder.call(); - assertTrue(result==0xEF01); + assertEquals(0xEF01, result); IoHandler.IO_FreeWriteHandler(17000, IoHandler.IO_MW); RAM.writed(CPU_Regs.reg_dsPhys.dword, 0); } @@ -1892,14 +1892,14 @@ private void doJump(int instruction, int flag, boolean cond) { CPU_Regs.SETFLAGBIT(flag, !cond); int eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); newInstruction(instruction); pushIb((byte)-32); CPU_Regs.SETFLAGBIT(flag, cond); eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); } private void doJumpOr(int instruction, int flag1, int flag2, boolean cond) { @@ -1909,40 +1909,40 @@ private void doJumpOr(int instruction, int flag1, int flag2, boolean cond) { CPU_Regs.SETFLAGBIT(flag2, !cond); int eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); if (cond) { newInstruction(instruction); pushIb((byte)-32); - CPU_Regs.SETFLAGBIT(flag1, !cond); - CPU_Regs.SETFLAGBIT(flag1, cond); + CPU_Regs.SETFLAGBIT(flag1, false); + CPU_Regs.SETFLAGBIT(flag1, true); eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); newInstruction(instruction); pushIb((byte)-32); - CPU_Regs.SETFLAGBIT(flag1, cond); - CPU_Regs.SETFLAGBIT(flag2, !cond); + CPU_Regs.SETFLAGBIT(flag1, true); + CPU_Regs.SETFLAGBIT(flag2, false); eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); } else { newInstruction(instruction); pushIb((byte)-32); - CPU_Regs.SETFLAGBIT(flag1, !cond); - CPU_Regs.SETFLAGBIT(flag1, cond); + CPU_Regs.SETFLAGBIT(flag1, true); + CPU_Regs.SETFLAGBIT(flag1, false); eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); newInstruction(instruction); pushIb((byte)-32); - CPU_Regs.SETFLAGBIT(flag1, cond); - CPU_Regs.SETFLAGBIT(flag2, !cond); + CPU_Regs.SETFLAGBIT(flag1, false); + CPU_Regs.SETFLAGBIT(flag2, true); eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); } newInstruction(instruction); @@ -1951,7 +1951,7 @@ private void doJumpOr(int instruction, int flag1, int flag2, boolean cond) { CPU_Regs.SETFLAGBIT(flag2, cond); eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); } private void doJumpEqual(int instruction, int flag1, int flag2, boolean cond) { @@ -1962,9 +1962,9 @@ private void doJumpEqual(int instruction, int flag1, int flag2, boolean cond) { int eip = CPU_Regs.reg_eip; decoder.call(); if (cond) - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); else - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); newInstruction(instruction); pushIb((byte)-32); @@ -1973,9 +1973,9 @@ private void doJumpEqual(int instruction, int flag1, int flag2, boolean cond) { eip = CPU_Regs.reg_eip; decoder.call(); if (cond) - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); else - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); newInstruction(instruction); pushIb((byte)-32); @@ -1984,9 +1984,9 @@ private void doJumpEqual(int instruction, int flag1, int flag2, boolean cond) { eip = CPU_Regs.reg_eip; decoder.call(); if (cond) - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); else - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); newInstruction(instruction); @@ -1996,9 +1996,9 @@ private void doJumpEqual(int instruction, int flag1, int flag2, boolean cond) { eip = CPU_Regs.reg_eip; decoder.call(); if (cond) - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); else - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); } // 0x70 @@ -2119,7 +2119,7 @@ public void testJle() { CPU_Regs.SETFLAGBIT(CPU_Regs.OF, true); int eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==((eip-32+2) & 0xFFFF)); + assertEquals(CPU_Regs.reg_eip, ((eip - 32 + 2) & 0xFFFF)); } // 0x7f @@ -2136,7 +2136,7 @@ public void testJnle() { CPU_Regs.SETFLAGBIT(CPU_Regs.OF, true); int eip = CPU_Regs.reg_eip; decoder.call(); - assertTrue(CPU_Regs.reg_eip==eip+2); + assertEquals(CPU_Regs.reg_eip, eip + 2); } // 0x80 @@ -2146,7 +2146,7 @@ public void testGroup1EbIb() { runRegsbi((byte)0x80, (byte)0, 1, (byte)2, 3); runRegbi((byte)0x80, 0, 1, -2, -1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbi((byte)0x80, 0, 0x80, 0x80, 0); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2162,7 +2162,7 @@ public void testGroup1EbIb() { // ADCB runRegsbi((byte)0x80, (byte)(2<<3), 1, (byte)2, 3); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbi((byte)0x80, 2<<3, 192, 128, 64); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2175,10 +2175,10 @@ public void testGroup1EbIb() { // SBBB runRegsbi((byte)0x80, (byte)(3<<3), 3, (byte)2, 1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbi((byte)0x80, 3<<3, 192, 128, 64); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbi((byte)0x80, 3<<3, 128, 192, -64); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2195,10 +2195,10 @@ public void testGroup1EbIb() { // SUBB runRegsbi((byte)0x80, (byte)(5<<3), 3, (byte)2, 1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbi((byte)0x80, 5<<3, 192, 128, 64); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbi((byte)0x80, 5<<3, 128, 192, -64); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2217,9 +2217,9 @@ public void testGroup1EbIb() { runRegbFlagsi((byte)0x80, 7<<3, 128, 192, -1); assertTrue(Flags.get_CF()); runRegbFlagsi((byte)0x80, 7<<3, 192, 128, 1); - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegbFlagsi((byte)0x80, 7<<3, 1, 1, 0); - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); } // 0x81 @@ -2229,7 +2229,7 @@ public void testGroup1EwIw() { runRegswi((byte)0x81, (byte)0, 1001, 2, 1003); runRegwi((byte)0x81, (byte)0, 1, -2, -1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwi((byte)0x81, (byte)0, 0x8000, 0x8000, 0); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2245,7 +2245,7 @@ public void testGroup1EwIw() { // ADC runRegswi((byte)0x81, 2<<3, 1, 2, 3); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwi((byte)0x81, 2<<3, 0xC000, 0x8000, 0x4000); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2258,10 +2258,10 @@ public void testGroup1EwIw() { // SBB runRegswi((byte)0x81, 3<<3, 3, 2, 1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwi((byte)0x81, 3<<3, 0xC000, 0x8000, 0x4000); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwi((byte)0x81, 3<<3, 0x8000, 0xC000, -0x4000); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2280,10 +2280,10 @@ public void testGroup1EwIw() { // SUB runRegswi((byte)0x81, 5<<3, 3, 2, 1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwi((byte)0x81, 5<<3, 0xC000, 0x8000, 0x4000); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwi((byte)0x81, 5<<3, 0x8000, 0xC000, -0x4000); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2302,9 +2302,9 @@ public void testGroup1EwIw() { runRegwFlagsi((byte)0x81, 7<<3, 0x8000, 0xC000, -1); assertTrue(Flags.get_CF()); runRegwFlagsi((byte)0x81, 7<<3, 0xC000, 0x8000, 1); - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwFlagsi((byte)0x81, 7<<3, 0x8000, 0x8000, 0); - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); } // 0x83 @@ -2314,7 +2314,7 @@ public void testGroup1EwIx() { runRegswix((byte)0x83, (byte)0, 1001, (byte)2, 1003); runRegwix((byte)0x83, (byte)0, 1, (byte)-2, -1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwix((byte)0x83, (byte)0, 0x80, (byte)0x80, 0); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2330,7 +2330,7 @@ public void testGroup1EwIx() { // ADC runRegswix((byte)0x83, 2<<3, 1, (byte)2, 3); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwix((byte)0x83, 2<<3, 0x00C0, (byte)0x80, 0x0040); // 0x00C0+0xFF80 if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2343,10 +2343,10 @@ public void testGroup1EwIx() { // SBB runRegswix((byte)0x83, 3<<3, 3, (byte)2, 1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwix((byte)0x83, 3<<3, 0xFFC0, (byte)0x80, 0x0040); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwix((byte)0x83, 3<<3, 0x0080, (byte)0xC0, 0x00C0); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2365,10 +2365,10 @@ public void testGroup1EwIx() { // SUB runRegswix((byte)0x83, 5<<3, 3, (byte)2, 1); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwix((byte)0x83, 5<<3, 0xC000, (byte)0x70, 0xBF90); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwix((byte)0x83, 5<<3, 0x8000, (byte)0xC0, 0x8040); if (!jdos.cpu.core_dynamic.Compiler.alwayUseFastVersion) assertTrue(Flags.get_CF()); @@ -2387,9 +2387,9 @@ public void testGroup1EwIx() { runRegwFlagsix((byte)0x83, 7<<3, 0x8000, (byte)0xC0, -1); assertTrue(Flags.get_CF()); runRegwFlagsix((byte)0x83, 7<<3, 0x7F00, (byte)0x7F, 1); - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); runRegwFlagsix((byte)0x83, 7<<3, 0xFF80, (byte)0x80, 0); - assertTrue(!Flags.get_CF()); + assertFalse(Flags.get_CF()); } // 0x84 @@ -2414,14 +2414,14 @@ public void testTestEbGb() { CPU_Regs.reg_eax.dword(0xFF); CPU_Regs.reg_ecx.dword(0x01); decoder.call(); - assertTrue(!Flags.get_ZF()); + assertFalse(Flags.get_ZF()); newInstruction(0x84); pushIb((byte)0xC5); CPU_Regs.reg_eax.dword(0xFF); CPU_Regs.reg_ecx.dword(0x0100); decoder.call(); - assertTrue(!Flags.get_ZF()); + assertFalse(Flags.get_ZF()); newInstruction(0x84); pushIb((byte)0xC1); @@ -2444,10 +2444,10 @@ public void testTestEbGb() { pushIb((byte)0); CPU_Regs.reg_eax.dword(0xF1); decoder.call(); - assertTrue(!Flags.get_ZF()); + assertFalse(Flags.get_ZF()); - assertTrue((byte)Memory.mem_readb(MEM_BASE_DS-1)==(byte)0xCD); - assertTrue((byte)Memory.mem_readb(MEM_BASE_DS+1)==(byte)0xCD); + assertEquals((byte) Memory.mem_readb(MEM_BASE_DS - 1), (byte) 0xCD); + assertEquals((byte) Memory.mem_readb(MEM_BASE_DS + 1), (byte) 0xCD); Memory.mem_writeb(MEM_BASE_DS-1, 0); Memory.mem_writeb(MEM_BASE_DS, 0); Memory.mem_writeb(MEM_BASE_DS+1, 0); @@ -2475,14 +2475,14 @@ public void testTestEwGw() { CPU_Regs.reg_eax.dword(0xFFFF); CPU_Regs.reg_ecx.dword(0x01); decoder.call(); - assertTrue(!Flags.get_ZF()); + assertFalse(Flags.get_ZF()); newInstruction(0x85); pushIb((byte)0xC5); CPU_Regs.reg_eax.dword(0xFFFF); CPU_Regs.reg_ebp.dword(0x0100); decoder.call(); - assertTrue(!Flags.get_ZF()); + assertFalse(Flags.get_ZF()); newInstruction(0x85); pushIb((byte)0xC1); @@ -2505,10 +2505,10 @@ public void testTestEwGw() { pushIb((byte)0); CPU_Regs.reg_eax.dword(0xF1); decoder.call(); - assertTrue(!Flags.get_ZF()); + assertFalse(Flags.get_ZF()); - assertTrue((short)Memory.mem_readw(MEM_BASE_DS-2)==(short)0xCDEF); - assertTrue((short)Memory.mem_readw(MEM_BASE_DS+2)==(short)0xCDEF); + assertEquals((short) Memory.mem_readw(MEM_BASE_DS - 2), (short) 0xCDEF); + assertEquals((short) Memory.mem_readw(MEM_BASE_DS + 2), (short) 0xCDEF); Memory.mem_writew(MEM_BASE_DS-2, 0); Memory.mem_writew(MEM_BASE_DS, 0); Memory.mem_writew(MEM_BASE_DS+2, 0); @@ -2565,7 +2565,7 @@ public void testMovEwSw() { pushIb((byte)0xC0); CPU_Regs.SegSet16ES(0x1234); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0x1234); + assertEquals(0x1234, CPU_Regs.reg_eax.dword); // newInstruction(0x8c); // pushIb((byte)(0xC0 + (1<<3) + 1)); @@ -2576,25 +2576,25 @@ public void testMovEwSw() { pushIb((byte)(0xC0 + (2<<3) + 2)); CPU_Regs.reg_ssVal.dword = 0x1234; decoder.call(); - assertTrue(CPU_Regs.reg_edx.dword==0x1234); + assertEquals(0x1234, CPU_Regs.reg_edx.dword); newInstruction(0x8c); pushIb((byte)(0xC0 + (3<<3) + 3)); CPU_Regs.reg_dsVal.dword = 0x1234; decoder.call(); - assertTrue(CPU_Regs.reg_ebx.dword==0x1234); + assertEquals(0x1234, CPU_Regs.reg_ebx.dword); newInstruction(0x8c); pushIb((byte)(0xC0 + (4<<3) + 4)); CPU_Regs.reg_fsVal.dword = 0x1234; decoder.call(); - assertTrue(CPU_Regs.reg_esp.dword==0x1234); + assertEquals(0x1234, CPU_Regs.reg_esp.dword); newInstruction(0x8c); pushIb((byte)(0xC0 + (5<<3) + 5)); CPU_Regs.reg_gsVal.dword = 0x1234; decoder.call(); - assertTrue(CPU_Regs.reg_ebp.dword==0x1234); + assertEquals(0x1234, CPU_Regs.reg_ebp.dword); newInstruction(0x8c); pushIb((byte)0x0); @@ -2603,7 +2603,7 @@ public void testMovEwSw() { Memory.mem_writew(MEM_BASE_DS+2, 0xCDCD); CPU_Regs.SegSet16ES(0x1234); decoder.call(); - assertTrue(Memory.mem_readw(MEM_BASE_DS)==0x1234); + assertEquals(0x1234, Memory.mem_readw(MEM_BASE_DS)); Memory.mem_writew(MEM_BASE_DS-2, 0); Memory.mem_writew(MEM_BASE_DS, 0); Memory.mem_writew(MEM_BASE_DS+2, 0); @@ -2617,16 +2617,16 @@ public void testLeaGw() { CPU_Regs.reg_esi.dword(0xFFF0); pushIb((byte)0x0); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xEF); + assertEquals(0xEF, CPU_Regs.reg_eax.dword); newInstruction(0x67); pushIb((byte)0x8d); CPU_Regs.reg_ebx.dword(0xFF); CPU_Regs.reg_esi.dword(0xFFF0); - CPU_Regs.reg_ecx.dword(0xABCDEF01); + CPU_Regs.reg_ecx.dword(0xffff_ffff_abcd_ef01L); pushIb((byte)0x1); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xEF01); + assertEquals(0xEF01, CPU_Regs.reg_eax.dword); } // 0x8e @@ -2636,31 +2636,31 @@ public void testMovSwEw() { pushIb((byte)0xC1); CPU_Regs.reg_ecx.dword(0xFFABCD); decoder.call(); - assertTrue(CPU_Regs.reg_esVal.dword == 0xABCD); + assertEquals(0xABCD, CPU_Regs.reg_esVal.dword); newInstruction(0x8e); pushIb((byte)(0xC2 + (2<<3))); CPU_Regs.reg_edx.dword(0xFFABCD); decoder.call(); - assertTrue(CPU_Regs.reg_ssVal.dword == 0xABCD); + assertEquals(0xABCD, CPU_Regs.reg_ssVal.dword); newInstruction(0x8e); pushIb((byte)(0xC3 + (3<<3))); CPU_Regs.reg_ebx.dword(0xFFABCD); decoder.call(); - assertTrue(CPU_Regs.reg_dsVal.dword == 0xABCD); + assertEquals(0xABCD, CPU_Regs.reg_dsVal.dword); newInstruction(0x8e); pushIb((byte)(0xC4 + (4<<3))); CPU_Regs.reg_esp.dword(0xFFABCD); decoder.call(); - assertTrue(CPU_Regs.reg_fsVal.dword == 0xABCD); + assertEquals(0xABCD, CPU_Regs.reg_fsVal.dword); newInstruction(0x8e); pushIb((byte)(0xC5 + (5<<3))); CPU_Regs.reg_ebp.dword(0xFFABCD); decoder.call(); - assertTrue(CPU_Regs.reg_gsVal.dword == 0xABCD); + assertEquals(0xABCD, CPU_Regs.reg_gsVal.dword); newInstruction(0x8e); pushIb((byte)0x0); @@ -2668,7 +2668,7 @@ public void testMovSwEw() { Memory.mem_writew(MEM_BASE_DS, 0xABCD); Memory.mem_writew(MEM_BASE_DS+2, 0xCDCD); decoder.call(); - assertTrue(CPU_Regs.reg_esVal.dword == 0xABCD); + assertEquals(0xABCD, CPU_Regs.reg_esVal.dword); Memory.mem_writew(MEM_BASE_DS-2, 0); Memory.mem_writew(MEM_BASE_DS, 0); Memory.mem_writew(MEM_BASE_DS+2, 0); @@ -2682,16 +2682,16 @@ public void testPopEw() { CPU_Regs.reg_esp.dword(0xFE); RAM.writew(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword, 0x89EF); decoder.call(); - assertTrue(CPU_Regs.reg_esp.dword==0x100); - assertTrue(CPU_Regs.reg_ebx.dword==0x89EF); + assertEquals(0x100, CPU_Regs.reg_esp.dword); + assertEquals(0x89EF, CPU_Regs.reg_ebx.dword); newInstruction(0x8f); pushIb((byte)0x0); CPU_Regs.reg_esp.dword(0xFE); RAM.writew(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.dword, 0x89EF); decoder.call(); - assertTrue(CPU_Regs.reg_esp.dword==0x100); - assertTrue(Memory.mem_readw(MEM_BASE_DS)==0x89EF); + assertEquals(0x100, CPU_Regs.reg_esp.dword); + assertEquals(0x89EF, Memory.mem_readw(MEM_BASE_DS)); } // 0x90 @@ -2701,77 +2701,77 @@ public void testPopEw() { //XCHG CX,AX public void testXchgCxAx() { newInstruction(0x91); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_ecx.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_ecx.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_ecx.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_ecx.dword); } // 0x92 //XCHG DX,AX public void testXchgDxAx() { newInstruction(0x92); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_edx.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_edx.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_edx.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_edx.dword); } // 0x93 //XCHG BX,AX public void testXchgBxAx() { newInstruction(0x93); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_ebx.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_ebx.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_ebx.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_ebx.dword); } // 0x94 //XCHG SP,AX public void testXchgSpAx() { newInstruction(0x94); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_esp.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_esp.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_esp.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_esp.dword); } // 0x95 //XCHG BP,AX public void testXchgBpAx() { newInstruction(0x95); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_ebp.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_ebp.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_ebp.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_ebp.dword); } // 0x96 //XCHG SI,AX public void testXchgSiAx() { newInstruction(0x96); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_esi.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_esi.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_esi.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_esi.dword); } // 0x97 //XCHG DI,AX public void testXchgDiAx() { newInstruction(0x97); - CPU_Regs.reg_eax.dword(0xAAAA1234); - CPU_Regs.reg_edi.dword(0xBBBB5678); + CPU_Regs.reg_eax.dword(0xffff_ffff_aaaa_1234L); + CPU_Regs.reg_edi.dword(0xffff_ffff_bbbb_5678L); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0xAAAA5678); - assertTrue(CPU_Regs.reg_edi.dword==0xBBBB1234); + assertEquals(0xAAAA5678, CPU_Regs.reg_eax.dword); + assertEquals(0xBBBB1234, CPU_Regs.reg_edi.dword); } // 0x98 @@ -2780,12 +2780,12 @@ public void testCbw() { newInstruction(0x98); CPU_Regs.reg_eax.dword(0x4444AB01); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0x44440001); + assertEquals(0x44440001, CPU_Regs.reg_eax.dword); newInstruction(0x98); CPU_Regs.reg_eax.dword(0x4444ABFE); decoder.call(); - assertTrue(CPU_Regs.reg_eax.dword==0x4444FFFE); + assertEquals(0x4444FFFE, CPU_Regs.reg_eax.dword); } // 0x99 @@ -2794,11 +2794,11 @@ public void testCwd() { newInstruction(0x99); CPU_Regs.reg_eax.dword(0xFFF); decoder.call(); - assertTrue(CPU_Regs.reg_edx.dword==0); + assertEquals(0, CPU_Regs.reg_edx.dword); newInstruction(0x99); CPU_Regs.reg_eax.dword(0xF000); decoder.call(); - assertTrue(CPU_Regs.reg_edx.dword==0xFFFF); + assertEquals(0xFFFF, CPU_Regs.reg_edx.dword); } } diff --git a/jdosbox-win/src/test/java/jdos/win/kernel/testHeap.java b/jdosbox-win/src/test/java/jdos/win/kernel/testHeap.java index 8bb31aa8..9b15decd 100644 --- a/jdosbox-win/src/test/java/jdos/win/kernel/testHeap.java +++ b/jdosbox-win/src/test/java/jdos/win/kernel/testHeap.java @@ -33,36 +33,37 @@ protected void setUp() throws Exception { } protected void tearDown() throws Exception { + super.tearDown(); Callback.inHandler = 0; } public void testInitialKernelHeap() { int p = memory.kmalloc(16); Memory.mem_writed(p, 0x12345678); - assertTrue(Memory.mem_readb(p+1)==0x56); + assertEquals(0x56, Memory.mem_readb(p + 1)); } public void testLargeAllocation() { int p = memory.kmalloc(1024*1024); Memory.mem_writed(p, 0xCDCDCDEF); - assertTrue(Memory.mem_readd(p) == 0xCDCDCDEF); + assertEquals(0xCDCDCDEF, Memory.mem_readd(p)); Memory.mem_writed(p+1024*1023, 0xABCDEF00); - assertTrue(Memory.mem_readd(p+1024*1023) == 0xABCDEF00); + assertEquals(0xABCDEF00, Memory.mem_readd(p + 1024 * 1023)); p = memory.kmalloc(16); Memory.mem_writed(p, 0xCDCDCDEF); - assertTrue(Memory.mem_readd(p) == 0xCDCDCDEF); + assertEquals(0xCDCDCDEF, Memory.mem_readd(p)); p = memory.kmalloc(1024*1024); Memory.mem_zero(p, 1024*1024); for (int i=0;i<1024*1024/4;i++) { - assertTrue(Memory.mem_readd(p+i*4)==0); + assertEquals(0, Memory.mem_readd(p + i * 4)); Memory.mem_writed(p+i*4, 0xABCDEF00); - assertTrue(Memory.mem_readd(p+i*4) == 0xABCDEF00); + assertEquals(0xABCDEF00, Memory.mem_readd(p + i * 4)); } } public void testPageFault() { CPU_Regs.reg_esp.dword = memory.kmalloc(1024)+1024; - final KernelHeap heap = new KernelHeap(memory, memory.kernel_directory, 0xD0000000, 0xD0001000, 0xD0002000, false, false); + final KernelHeap heap = new KernelHeap(memory, memory.kernel_directory, 0xffff_ffff_d000_0000L, 0xffff_ffff_d000_1000L, 0xffff_ffff_d000_2000L, false, false); Callback.Handler cb = new Callback.Handler() { public int call() { int p = heap.alloc(0x1004, false); @@ -77,26 +78,26 @@ public String getName() { Callback.inHandler = 1; // make it run the core in place rather than throw an exception interrupts.registerHandler(14, cb); Dosbox.DOSBOX_SetNormalLoop(); - assertTrue(Memory.mem_readd(0xD0001000)==0x98765432); + assertEquals(0x98765432, Memory.mem_readd(0xD0001000)); } public void testFree() { int p = memory.kmalloc(4); Memory.mem_writed(p, 0xEFEFEFEF); - assertTrue(Memory.mem_readd(p) == 0xEFEFEFEF); + assertEquals(0xEFEFEFEF, Memory.mem_readd(p)); memory.kfree(p); int p1 = memory.kmalloc(8); // this point merged back in with the hold - assertTrue(p1==p); + assertEquals(p1, p); int p3 = memory.kmalloc(8); memory.kfree(p1); int p4 = memory.kmalloc(16); // p1 should point to a empty 8 byte hold at the begging; assertTrue(p1!=p4); - assertTrue(p1==memory.kmalloc(8)); + assertEquals(p1, memory.kmalloc(8)); // all allocations fill up the begging of the memory - assertTrue(memory.heap.getFreeItemCount()==1); + assertEquals(1, memory.heap.getFreeItemCount()); int p5 = memory.kmalloc(5); int p6 = memory.kmalloc(6); int p7 = memory.kmalloc(7); @@ -105,41 +106,41 @@ public void testFree() { int p9 = memory.kmalloc(9); // none of the following free's will combine with current free space - assertTrue(memory.heap.getFreeItemCount()==1); + assertEquals(1, memory.heap.getFreeItemCount()); memory.kfree(p5); - assertTrue(memory.heap.getFreeItemCount()==2); + assertEquals(2, memory.heap.getFreeItemCount()); memory.kfree(p7); - assertTrue(memory.heap.getFreeItemCount()==3); + assertEquals(3, memory.heap.getFreeItemCount()); memory.kfree(p40k); - assertTrue(memory.heap.getFreeItemCount()==4); + assertEquals(4, memory.heap.getFreeItemCount()); // free the last one, it should combine with the previous free space memory.kfree(p9); - assertTrue(memory.heap.getFreeItemCount()==3); + assertEquals(3, memory.heap.getFreeItemCount()); // hole added to beginning memory.kfree(p1); - assertTrue(memory.heap.getFreeItemCount()==4); + assertEquals(4, memory.heap.getFreeItemCount()); // hole combines with begging memory.kfree(p3); - assertTrue(memory.heap.getFreeItemCount()==4); + assertEquals(4, memory.heap.getFreeItemCount()); // should eat up beginning hold int begin = memory.kmalloc(16); - assertTrue(memory.heap.getFreeItemCount()==3); - assertTrue(begin == p1); + assertEquals(3, memory.heap.getFreeItemCount()); + assertEquals(begin, p1); memory.kfree(begin); - assertTrue(memory.heap.getFreeItemCount()==4); + assertEquals(4, memory.heap.getFreeItemCount()); // combines with beginning and p5 memory.kfree(p4); - assertTrue(memory.heap.getFreeItemCount()==3); + assertEquals(3, memory.heap.getFreeItemCount()); memory.kfree(p6); - assertTrue(memory.heap.getFreeItemCount()==2); + assertEquals(2, memory.heap.getFreeItemCount()); memory.kfree(p8); - assertTrue(memory.heap.getFreeItemCount()==1); + assertEquals(1, memory.heap.getFreeItemCount()); } } diff --git a/jdosbox-win/src/test/java/jdos/win/util/testHeap.java b/jdosbox-win/src/test/java/jdos/win/util/testHeap.java index 0066c214..ced914a8 100644 --- a/jdosbox-win/src/test/java/jdos/win/util/testHeap.java +++ b/jdosbox-win/src/test/java/jdos/win/util/testHeap.java @@ -5,35 +5,35 @@ public class testHeap extends TestCase { public void testAlloc() { - Heap heap = new Heap(0x01000000l, 0xFFFF0000l); + Heap heap = new Heap(0x01000000L, 0xFFFF0000L); long a = heap.alloc(0x100, false); - assertTrue(a==0x01000000); + assertEquals(0x01000000, a); long b = heap.alloc(0x100, false); - assertTrue(b==0x01000100); + assertEquals(0x01000100, b); long c = heap.alloc(0x100, true); - assertTrue(c==0x01001000); + assertEquals(0x01001000, c); } public void testAllocAt() { - Heap heap = new Heap(0x01000000l, 0xFFFF0000l); + Heap heap = new Heap(0x01000000L, 0xFFFF0000L); long a = heap.alloc(0x40000000, 0x01000000); - assertTrue(a==0x40000000); - long b = heap.alloc(0xE0000000l, 0x01000000); - assertTrue(b==0xE0000000l); - long c = heap.alloc(0xE0001000l, 0x01000000); - assertTrue(c==0); - long d = heap.alloc(0x10000000l, 0x01000000); - assertTrue(d==0x10000000l); + assertEquals(0x40000000, a); + long b = heap.alloc(0xE0000000L, 0x01000000); + assertEquals(0xE0000000L, b); + long c = heap.alloc(0xE0001000L, 0x01000000); + assertEquals(0, c); + long d = heap.alloc(0x10000000L, 0x01000000); + assertEquals(0x10000000L, d); } public void testGetNext() { - Heap heap = new Heap(0x01000000l, 0xFFFF0000l); + Heap heap = new Heap(0x01000000L, 0xFFFF0000L); long a = heap.alloc(0x40000000, 0x01000000); - assertTrue(a==0x40000000); + assertEquals(0x40000000, a); long b = heap.alloc(0x42000000, 0x01000000); - assertTrue(b==0x42000000); - assertTrue(heap.getNextAddress(0x40000000, 0x00500000, false)==0x41000000); - assertTrue(heap.getNextAddress(0x40000000, 0x01000000, false)==0x41000000); - assertTrue(heap.getNextAddress(0x40000000, 0x01000001, false)==0x43000000); + assertEquals(0x42000000, b); + assertEquals(0x41000000, heap.getNextAddress(0x40000000, 0x00500000, false)); + assertEquals(0x41000000, heap.getNextAddress(0x40000000, 0x01000000, false)); + assertEquals(0x43000000, heap.getNextAddress(0x40000000, 0x01000001, false)); } } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/BitReserve.java b/jdosbox/src/main/java/javazoom/jl/decoder/BitReserve.java index a5d3056d..36501a27 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/BitReserve.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/BitReserve.java @@ -110,8 +110,8 @@ public int hgetbits(int N) - /** - * Read 1 bit from the bit stream. + /* + Read 1 bit from the bit stream. */ /* public int hget1bit_old() @@ -143,8 +143,8 @@ public int hget1bit() return val; } - /** - * Retrieves bits from the reserve. + /* + Retrieves bits from the reserve. */ /* public int readBits(int[] out, int len) diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/Bitstream.java b/jdosbox/src/main/java/javazoom/jl/decoder/Bitstream.java index cebbd5b0..860c8bd4 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/Bitstream.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/Bitstream.java @@ -45,7 +45,7 @@ /** * The Bistream class is responsible for parsing * an MPEG audio bitstream. - * + *

* REVIEW: much of the parsing currently occurs in the * various decoders. This should be moved into this class and associated * inner classes. @@ -56,13 +56,13 @@ public final class Bitstream implements BitstreamErrors * Synchronization control constant for the initial * synchronization to the start of a frame. */ - static byte INITIAL_SYNC = 0; + static final byte INITIAL_SYNC = 0; /** * Synchronization control constant for non-initial frame * synchronizations. */ - static byte STRICT_SYNC = 1; + static final byte STRICT_SYNC = 1; // max. 1730 bytes per frame: 144 * 384kbit/s / 32000 Hz + 2 Bytes CRC /** @@ -83,7 +83,7 @@ public final class Bitstream implements BitstreamErrors /** * The bytes read from the stream. */ - private byte[] frame_bytes = new byte[BUFFER_INT_SIZE*4]; + private final byte[] frame_bytes = new byte[BUFFER_INT_SIZE*4]; /** * Index into framebuffer where the next bits are @@ -113,7 +113,7 @@ public final class Bitstream implements BitstreamErrors //private int current_frame_number; //private int last_frame_number; - private final int bitmask[] = {0, // dummy + private final int[] bitmask = {0, // dummy 0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, @@ -124,13 +124,13 @@ public final class Bitstream implements BitstreamErrors private final Header header = new Header(); - private final byte syncbuf[] = new byte[4]; + private final byte[] syncbuf = new byte[4]; - private Crc16[] crc = new Crc16[1]; + private final Crc16[] crc = new Crc16[1]; private byte[] rawid3v2 = null; - private boolean firstframe = true; + private boolean firstframe; /** @@ -169,7 +169,7 @@ public int header_pos() */ private void loadID3v2(InputStream in) { - int size = -1; + int size; try { // Read ID3v2 header (10 bytes). @@ -177,8 +177,9 @@ private void loadID3v2(InputStream in) size = readID3v2Header(in); header_pos = size; } - catch (IOException e) - {} + catch (IOException e) { + throw new RuntimeException(e); + } finally { try @@ -186,8 +187,9 @@ private void loadID3v2(InputStream in) // Unread ID3v2 header (10 bytes). in.reset(); } - catch (IOException e) - {} + catch (IOException e) { + throw new RuntimeException(e); + } } // Load ID3v2 tags. try @@ -198,15 +200,15 @@ private void loadID3v2(InputStream in) in.read(rawid3v2,0,rawid3v2.length); } } - catch (IOException e) - {} + catch (IOException e) { + throw new RuntimeException(e); + } } /** * Parse ID3v2 tag header to find out size of ID3v2 frames. * @param in MP3 InputStream * @return size of ID3v2 frames + header - * @throws IOException * @author JavaZOOM */ private int readID3v2Header(InputStream in) throws IOException @@ -221,7 +223,7 @@ private int readID3v2Header(InputStream in) throws IOException int majorVersion = id3header[0]; int revision = id3header[1]; in.read(id3header,0,4); - size = (int) (id3header[0] << 21) + (id3header[1] << 14) + (id3header[2] << 7) + (id3header[3]); + size = (id3header[0] << 21) + (id3header[1] << 14) + (id3header[2] << 7) + (id3header[3]); } return (size+10); } @@ -235,15 +237,13 @@ public InputStream getRawID3v2() if (rawid3v2 == null) return null; else { - ByteArrayInputStream bain = new ByteArrayInputStream(rawid3v2); - return bain; + return new ByteArrayInputStream(rawid3v2); } } /** * Close the Bitstream. - * @throws BitstreamException - */ + */ public void close() throws BitstreamException { try @@ -268,7 +268,7 @@ public Header readFrame() throws BitstreamException { result = readNextFrame(); // E.B, Parse VBR (if any) first frame. - if (firstframe == true) + if (firstframe) { result.parseVBR(frame_bytes); firstframe = false; @@ -306,8 +306,7 @@ else if ((ex.getErrorCode()!=STREAM_EOF)) /** * Read next MP3 frame. * @return MP3 frame header. - * @throws BitstreamException - */ + */ private Header readNextFrame() throws BitstreamException { if (framesize == -1) @@ -320,8 +319,7 @@ private Header readNextFrame() throws BitstreamException /** * Read next MP3 frame. - * @throws BitstreamException - */ + */ private void nextFrame() throws BitstreamException { // entire frame is read by the header class. @@ -330,8 +328,7 @@ private void nextFrame() throws BitstreamException /** * Unreads the bytes read from the frame. - * @throws BitstreamException - */ + */ // REVIEW: add new error codes for this. public void unreadFrame() throws BitstreamException { @@ -365,15 +362,15 @@ public void closeFrame() public boolean isSyncCurrentPosition(int syncmode) throws BitstreamException { int read = readBytes(syncbuf, 0, 4); - int headerstring = ((syncbuf[0] << 24) & 0xFF000000) | ((syncbuf[1] << 16) & 0x00FF0000) | ((syncbuf[2] << 8) & 0x0000FF00) | ((syncbuf[3] << 0) & 0x000000FF); + int headerstring = ((syncbuf[0] << 24) & 0xFF000000) | ((syncbuf[1] << 16) & 0x00FF0000) | ((syncbuf[2] << 8) & 0x0000FF00) | ((syncbuf[3]) & 0x000000FF); try { source.unread(syncbuf, 0, read); } - catch (IOException ex) - { - } + catch (IOException ex) { + throw new RuntimeException(ex); + } boolean sync = false; switch (read) @@ -404,11 +401,11 @@ public int readCheckedBits(int n) return get_bits(n); } - protected BitstreamException newBitstreamException(int errorcode) + BitstreamException newBitstreamException(int errorcode) { return new BitstreamException(errorcode, null); } - protected BitstreamException newBitstreamException(int errorcode, Throwable throwable) + private BitstreamException newBitstreamException(int errorcode, Throwable throwable) { return new BitstreamException(errorcode, throwable); } @@ -429,7 +426,7 @@ int syncHeader(byte syncmode) throws BitstreamException if (bytesRead!=3) throw newBitstreamException(STREAM_EOF, null); - headerstring = ((syncbuf[0] << 16) & 0x00FF0000) | ((syncbuf[1] << 8) & 0x0000FF00) | ((syncbuf[2] << 0) & 0x000000FF); + headerstring = ((syncbuf[0] << 16) & 0x00FF0000) | ((syncbuf[1] << 8) & 0x0000FF00) | ((syncbuf[2]) & 0x000000FF); do { @@ -452,7 +449,7 @@ int syncHeader(byte syncmode) throws BitstreamException public boolean isSyncMark(int headerstring, int syncmode, int word) { - boolean sync = false; + boolean sync; if (syncmode == INITIAL_SYNC) { @@ -484,7 +481,7 @@ public boolean isSyncMark(int headerstring, int syncmode, int word) */ int read_frame_data(int bytesize) throws BitstreamException { - int numread = 0; + int numread; numread = readFully(frame_bytes, 0, bytesize); framesize = bytesize; wordpointer = -1; @@ -495,8 +492,7 @@ int read_frame_data(int bytesize) throws BitstreamException /** * Parses the data previously read with read_frame_data(). */ - void parse_frame() throws BitstreamException - { + void parse_frame() { // Convert Bytes read to int int b=0; byte[] byteread = frame_bytes; @@ -515,7 +511,7 @@ void parse_frame() throws BitstreamException for (int k=0;kDecoder instance with default * parameters. - * - * @param params The Params instance that describes - * the customizable aspects of the decoder. - */ + * + */ public Decoder(Params params0) { if (params0==null) params0 = DEFAULT_PARAMS; - + params = params0; Equalizer eq = params.getInitialEqualizerSettings(); @@ -126,8 +124,6 @@ public void setEqualizer(Equalizer eq) * Decodes one frame from an MPEG audio bitstream. * * @param header The header describing the frame to decode. - * @param bitstream The bistream that provides the bits for te body of the frame. - * * @return A SampleBuffer containing the decoded samples. */ public Obuffer decodeFrame(Header header, Bitstream stream) @@ -164,10 +160,8 @@ public void setOutputBuffer(Obuffer out) * Retrieves the sample frequency of the PCM samples output * by this decoder. This typically corresponds to the sample * rate encoded in the MPEG audio stream. - * - * @param the sample rate (in Hz) of the samples written to the - * output buffer when decoding. - */ + * + */ public int getOutputFrequency() { return outputFrequency; @@ -263,9 +257,7 @@ protected FrameDecoder retrieveDecoder(Header header, Bitstream stream, int laye return decoder; } - private void initialize(Header header) - throws DecoderException - { + private void initialize(Header header) { // REVIEW: allow customizable scale factor float scalefactor = 32700.0f; @@ -302,7 +294,7 @@ public static class Params implements Cloneable { private OutputChannels outputChannels = OutputChannels.BOTH; - private Equalizer equalizer = new Equalizer(); + private final Equalizer equalizer = new Equalizer(); public Params() { @@ -352,6 +344,6 @@ public Equalizer getInitialEqualizerSettings() return equalizer; } - }; + } } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/DecoderErrors.java b/jdosbox/src/main/java/javazoom/jl/decoder/DecoderErrors.java index dfa2f087..7fd8c19b 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/DecoderErrors.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/DecoderErrors.java @@ -30,16 +30,16 @@ public interface DecoderErrors extends JavaLayerErrors { - static public final int UNKNOWN_ERROR = DECODER_ERROR + 0; + int UNKNOWN_ERROR = DECODER_ERROR; /** * Layer not supported by the decoder. */ - static public final int UNSUPPORTED_LAYER = DECODER_ERROR + 1; + int UNSUPPORTED_LAYER = DECODER_ERROR + 1; /** * Illegal allocation in subband layer. Indicates a corrupt stream. */ - static public final int ILLEGAL_SUBBAND_ALLOCATION = DECODER_ERROR + 2; + int ILLEGAL_SUBBAND_ALLOCATION = DECODER_ERROR + 2; } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/Equalizer.java b/jdosbox/src/main/java/javazoom/jl/decoder/Equalizer.java index 57545a93..8182b097 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/Equalizer.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/Equalizer.java @@ -21,6 +21,8 @@ package javazoom.jl.decoder; +import java.util.Arrays; + /** * The Equalizer class can be used to specify * equalization settings for the MPEG audio decoder. @@ -74,7 +76,7 @@ public Equalizer(EQFunction eq) public void setFrom(float[] eq) { reset(); - int max = (eq.length > BANDS) ? BANDS : eq.length; + int max = Math.min(eq.length, BANDS); for (int i=0; i 1.0f) return 1.0f; - if (eq < -1.0f) - return -1.0f; - - return eq; - } + return Math.max(eq, -1.0f); + + } /** * Retrieves an array of floats whose values represent a @@ -182,7 +178,7 @@ private float limit(float eq) float[] getBandFactors() { float[] factors = new float[BANDS]; - for (int i=0, maxCount=BANDS; i= 3) && (chan /** * Parse frame to extract optionnal VBR frame. - * @param firstframe * @author E.B (javalayer@javazoom.net) */ void parseVBR(byte[] firstframe) throws BitstreamException { // Trying Xing header. String xing = "Xing"; - byte tmp[] = new byte[4]; - int offset = 0; + byte[] tmp = new byte[4]; + int offset; // Compute "Xing" offset depending on MPEG version and channels. if (h_version == MPEG1) { @@ -270,11 +268,11 @@ void parseVBR(byte[] firstframe) throws BitstreamException int length = 4; // Read flags. - byte flags[] = new byte[4]; + byte[] flags = new byte[4]; System.arraycopy(firstframe, offset + length, flags, 0, flags.length); length += flags.length; // Read number of frames (if available). - if ((flags[3] & (byte) (1 << 0)) != 0) + if ((flags[3] & (byte) (1)) != 0) { System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); h_vbr_frames = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; @@ -298,7 +296,6 @@ void parseVBR(byte[] firstframe) throws BitstreamException { System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); h_vbr_scale = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; - length += 4; } //System.out.println("VBR:"+xing+" Frames:"+ h_vbr_frames +" Size:"+h_vbr_bytes); } @@ -331,7 +328,6 @@ void parseVBR(byte[] firstframe) throws BitstreamException // Frames. System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); h_vbr_frames = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; - length += 4; //System.out.println("VBR:"+vbri+" Frames:"+ h_vbr_frames +" Size:"+h_vbr_bytes); // TOC // TODO @@ -379,8 +375,7 @@ void parseVBR(byte[] firstframe) throws BitstreamException */ public boolean checksums() { - if (h_protection_bit == 0) return true; - else return false; + return h_protection_bit == 0; } /** @@ -423,8 +418,7 @@ public boolean checksums() */ public boolean padding() { - if (h_padding_bit == 0) return false; - else return true; + return h_padding_bit != 0; } /** @@ -438,7 +432,7 @@ public boolean padding() public int mode_extension() { return h_mode_extension; } // E.B -> private to public - public static final int bitrates[][][] = { + public static final int[][][] bitrates = { {{0 /*free format*/, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 176000, 192000 ,224000, 256000, 0}, {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000, @@ -467,7 +461,7 @@ public boolean padding() * Calculate Frame size. * Calculates framesize in bytes excluding header size. */ - public int calculate_framesize() + public void calculate_framesize() { if (h_layer == 1) @@ -506,17 +500,15 @@ public int calculate_framesize() } } framesize -= 4; // subtract header size - return framesize; } /** * Returns the maximum number of frames in the stream. - * @param streamsize * @return number of frames */ public int max_number_of_frames(int streamsize) // E.B { - if (h_vbr == true) return h_vbr_frames; + if (h_vbr) return h_vbr_frames; else { if ((framesize + 4 - h_padding_bit) == 0) return 0; @@ -526,12 +518,11 @@ public int max_number_of_frames(int streamsize) // E.B /** * Returns the maximum number of frames in the stream. - * @param streamsize * @return number of frames */ public int min_number_of_frames(int streamsize) // E.B { - if (h_vbr == true) return h_vbr_frames; + if (h_vbr) return h_vbr_frames; else { if ((framesize + 5 - h_padding_bit) == 0) return 0; @@ -546,7 +537,7 @@ public int min_number_of_frames(int streamsize) // E.B */ public float ms_per_frame() // E.B { - if (h_vbr == true) + if (h_vbr) { double tpf = h_vbr_time_per_frame[layer()] / frequency(); if ((h_version == MPEG2_LSF) || (h_version == MPEG25_LSF)) tpf /= 2; @@ -554,7 +545,7 @@ public float ms_per_frame() // E.B } else { - float ms_per_frame_array[][] = {{8.707483f, 8.0f, 12.0f}, + float[][] ms_per_frame_array = {{8.707483f, 8.0f, 12.0f}, {26.12245f, 24.0f, 36.0f}, {26.12245f, 24.0f, 36.0f}}; return(ms_per_frame_array[h_layer-1][h_sample_frequency]); @@ -563,7 +554,6 @@ public float ms_per_frame() // E.B /** * Returns total ms. - * @param streamsize * @return total milliseconds */ public float total_ms(int streamsize) // E.B @@ -598,7 +588,7 @@ public String layer_string() } // E.B -> private to public - public static final String bitrate_str[][][] = { + public static final String[][][] bitrate_str = { {{"free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "176 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", @@ -645,9 +635,9 @@ public String layer_string() */ public String bitrate_string() { - if (h_vbr == true) + if (h_vbr) { - return Integer.toString(bitrate()/1000)+" kb/s"; + return bitrate() / 1000 +" kb/s"; } else return bitrate_str[h_version][h_layer - 1][h_bitrate_index]; } @@ -658,7 +648,7 @@ public String bitrate_string() */ public int bitrate() { - if (h_vbr == true) + if (h_vbr) { return ((int) ((h_vbr_bytes * 8) / (ms_per_frame() * h_vbr_frames)))*1000; } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/InputStreamSource.java b/jdosbox/src/main/java/javazoom/jl/decoder/InputStreamSource.java index 5c629470..f298c055 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/InputStreamSource.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/InputStreamSource.java @@ -25,7 +25,7 @@ /** * Work In Progress. - * + *

* An instance of InputStreamSource implements a * Source that provides data from an InputStream * . Seeking functionality is not supported. @@ -47,8 +47,7 @@ public InputStreamSource(InputStream in) public int read(byte[] b, int offs, int len) throws IOException { - int read = in.read(b, offs, len); - return read; + return in.read(b, offs, len); } public boolean willReadBlock() diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerError.java b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerError.java index d9910bcc..a6209624 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerError.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerError.java @@ -22,7 +22,7 @@ /** * Work in progress. - * + *

* API usage errors may be handled by throwing an instance of this * class, as per JMF 2.0. */ diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerErrors.java b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerErrors.java index 3b9c2ff9..ad4815ec 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerErrors.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerErrors.java @@ -29,12 +29,12 @@ public interface JavaLayerErrors * The first bitstream error code. See the {@link DecoderErrors DecoderErrors} * interface for other bitstream error codes. */ - static public final int BITSTREAM_ERROR = 0x100; + int BITSTREAM_ERROR = 0x100; /** * The first decoder error code. See the {@link DecoderErrors DecoderErrors} * interface for other decoder error codes. */ - static public final int DECODER_ERROR = 0x200; + int DECODER_ERROR = 0x200; } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerHook.java b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerHook.java index 35205943..df1dcf64 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerHook.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerHook.java @@ -32,5 +32,5 @@ public interface JavaLayerHook * Retrieves the named resource. This allows resources to be * obtained without specifying how they are retrieved. */ - public InputStream getResourceAsStream(String name); + InputStream getResourceAsStream(String name); } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerUtils.java b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerUtils.java index c9ce3838..d2da2a4a 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerUtils.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/JavaLayerUtils.java @@ -118,13 +118,13 @@ static public Object deserializeArray(InputStream in, Class elemType, int length Object obj = deserialize(in); - Class cls = obj.getClass(); + Class cls = obj.getClass(); if (!cls.isArray()) throw new InvalidObjectException("object is not an array"); - Class arrayElemType = cls.getComponentType(); + Class arrayElemType = cls.getComponentType(); if (arrayElemType!=elemType) throw new InvalidObjectException("unexpected array component type"); @@ -144,10 +144,8 @@ static public Object deserializeArrayResource(String name, Class elemType, int l InputStream str = getResourceAsStream(name); if (str==null) throw new IOException("unable to load resource '"+name+"'"); - - Object obj = deserializeArray(str, elemType, length); - - return obj; + + return deserializeArray(str, elemType, length); } static public void serialize(OutputStream out, Object obj) @@ -190,7 +188,7 @@ static synchronized public JavaLayerHook getHook() */ static synchronized public InputStream getResourceAsStream(String name) { - InputStream is = null; + InputStream is; if (hook!=null) { @@ -198,7 +196,7 @@ static synchronized public InputStream getResourceAsStream(String name) } else { - Class cls = JavaLayerUtils.class; + Class cls = JavaLayerUtils.class; is = cls.getResourceAsStream(name); } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/LayerIDecoder.java b/jdosbox/src/main/java/javazoom/jl/decoder/LayerIDecoder.java index fb936d2b..66e241c1 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/LayerIDecoder.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/LayerIDecoder.java @@ -40,7 +40,7 @@ class LayerIDecoder implements FrameDecoder protected int num_subbands; protected Subband[] subbands; - protected Crc16 crc = null; // new Crc16[1] to enable CRC checking. + protected final Crc16 crc; // new Crc16[1] to enable CRC checking. public LayerIDecoder() { @@ -154,7 +154,7 @@ static abstract class Subband * is illegal (to prevent segmentation faults) */ // Scalefactors for layer I and II, Annex 3-B.1 in ISO/IEC DIS 11172: - public static final float scalefactors[] = + public static final float[] scalefactors = { 2.00000000000000f, 1.58740105196820f, 1.25992104989487f, 1.00000000000000f, 0.79370052598410f, 0.62996052494744f, 0.50000000000000f, 0.39685026299205f, @@ -178,9 +178,9 @@ static abstract class Subband public abstract void read_scalefactor (Bitstream stream, Header header); public abstract boolean read_sampledata (Bitstream stream); public abstract boolean put_next_sample (int channels, SynthesisFilter filter1, SynthesisFilter filter2); - }; - - /** + } + + /** * Class for layer I subbands in single channel mode. * Used for single channel mode * and in derived class for intensity stereo mode @@ -189,7 +189,7 @@ static class SubbandLayer1 extends Subband { // Factors and offsets for sample requantization - public static final float table_factor[] = { + public static final float[] table_factor = { 0.0f, (1.0f/2.0f) * (4.0f/3.0f), (1.0f/4.0f) * (8.0f/7.0f), (1.0f/8.0f) * (16.0f/15.0f), (1.0f/16.0f) * (32.0f/31.0f), (1.0f/32.0f) * (64.0f/63.0f), (1.0f/64.0f) * (128.0f/127.0f), (1.0f/128.0f) * (256.0f/255.0f), (1.0f/256.0f) * (512.0f/511.0f), @@ -198,7 +198,7 @@ static class SubbandLayer1 extends Subband (1.0f/8192.0f) * (16384.0f/16383.0f), (1.0f/16384.0f) * (32768.0f/32767.0f) }; - public static final float table_offset[] = { + public static final float[] table_offset = { 0.0f, ((1.0f/2.0f)-1.0f) * (4.0f/3.0f), ((1.0f/4.0f)-1.0f) * (8.0f/7.0f), ((1.0f/8.0f)-1.0f) * (16.0f/15.0f), ((1.0f/16.0f)-1.0f) * (32.0f/31.0f), ((1.0f/32.0f)-1.0f) * (64.0f/63.0f), ((1.0f/64.0f)-1.0f) * (128.0f/127.0f), ((1.0f/128.0f)-1.0f) * (256.0f/255.0f), ((1.0f/256.0f)-1.0f) * (512.0f/511.0f), @@ -207,7 +207,7 @@ static class SubbandLayer1 extends Subband ((1.0f/8192.0f)-1.0f) * (16384.0f/16383.0f), ((1.0f/16384.0f)-1.0f) * (32768.0f/32767.0f) }; - protected int subbandnumber; + protected final int subbandnumber; protected int samplenumber; protected int allocation; protected float scalefactor; @@ -283,9 +283,9 @@ public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisF } return true; } - }; - - /** + } + + /** * Class for layer I subbands in joint stereo mode. */ static class SubbandLayer1IntensityStereo extends SubbandLayer1 @@ -356,9 +356,9 @@ else if (channels == OutputChannels.LEFT_CHANNEL) } return true; } - }; - - /** + } + + /** * Class for layer I subbands in stereo mode. */ static class SubbandLayer1Stereo extends SubbandLayer1 @@ -381,8 +381,7 @@ public SubbandLayer1Stereo(int subbandnumber) /** * */ - public void read_allocation (Bitstream stream, Header header, Crc16 crc) throws DecoderException - { + public void read_allocation (Bitstream stream, Header header, Crc16 crc) { allocation = stream.get_bits(4); channel2_allocation = stream.get_bits(4); if (crc != null) @@ -443,6 +442,6 @@ public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisF } return true; } - }; - + } + } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIDecoder.java b/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIDecoder.java index 7265b1f8..068ea16a 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIDecoder.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIDecoder.java @@ -76,7 +76,7 @@ static class SubbandLayer2 extends Subband { // this table contains 3 requantized samples for each legal codeword // when grouped in 5 bits, i.e. 3 quantizationsteps per sample - public static final float grouping_5bits[] = new float[] + public static final float[] grouping_5bits = new float[] { -2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f, 0.0f, -2.0f/3.0f, -2.0f/3.0f, @@ -109,7 +109,7 @@ static class SubbandLayer2 extends Subband // this table contains 3 requantized samples for each legal codeword // when grouped in 7 bits, i.e. 5 quantizationsteps per sample - public static final float grouping_7bits[] = new float[] + public static final float[] grouping_7bits = new float[] { -0.8f, -0.8f, -0.8f, -0.4f, -0.8f, -0.8f, 0.0f, -0.8f, -0.8f, 0.4f, -0.8f, -0.8f, 0.8f, -0.8f, -0.8f, -0.8f, -0.4f, -0.8f, -0.4f, -0.4f, -0.8f, 0.0f, -0.4f, -0.8f, 0.4f, -0.4f, -0.8f, 0.8f, -0.4f, -0.8f, @@ -140,7 +140,7 @@ static class SubbandLayer2 extends Subband // this table contains 3 requantized samples for each legal codeword // when grouped in 10 bits, i.e. 9 quantizationsteps per sample - public static final float grouping_10bits[] = + public static final float[] grouping_10bits = { -8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, 0.0f, -8.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, @@ -390,28 +390,28 @@ static class SubbandLayer2 extends Subband // data taken from ISO/IEC DIS 11172, Annexes 3-B.2[abcd] and 3-B.4: // subbands 0-2 in tables 3-B.2a and 2b: (index is allocation) - public static final int table_ab1_codelength[] = + public static final int[] table_ab1_codelength = // bits per codeword { 0, 5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; - public static final float table_ab1_groupingtables[][] = + public static final float[][] table_ab1_groupingtables = // pointer to sample grouping table, or NULL-pointer if ungrouped { null, grouping_5bits, null, null, null, null, null, null, null, null, null, null, null, null, null, null }; - public static final float table_ab1_factor[] = + public static final float[] table_ab1_factor = // factor for requantization: (real)sample * factor - 1.0 gives requantized sample { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f, 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, 1.0f/8192.0f, 1.0f/16384.0f, 1.0f/32768.0f }; - public static final float table_ab1_c[] = + public static final float[] table_ab1_c = // factor c for requantization from table 3-B.4 { 0.0f, 1.33333333333f, 1.14285714286f, 1.06666666666f, 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f, 1.00003051851f, 1.00001525902f }; - public static final float table_ab1_d[] = + public static final float[] table_ab1_d = // addend d for requantization from table 3-B.4 { 0.0f, 0.50000000000f, 0.25000000000f, 0.12500000000f, 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, 0.00195312500f, @@ -419,59 +419,59 @@ static class SubbandLayer2 extends Subband 0.00003051758f }; // subbands 3-... tables 3-B.2a and 2b: - public static final float[] table_ab234_groupingtables[] = + public static final float[][] table_ab234_groupingtables = { null, grouping_5bits, grouping_7bits, null, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null }; // subbands 3-10 in tables 3-B.2a and 2b: - public static final int table_ab2_codelength[] = + public static final int[] table_ab2_codelength = { 0, 5, 7, 3, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }; - public static final float table_ab2_factor[] = + public static final float[] table_ab2_factor = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f, 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, 1.0f/32768.0f }; - public static final float table_ab2_c[] = + public static final float[] table_ab2_c = { 0.0f, 1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f, 1.06666666666f, 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00001525902f }; - public static final float table_ab2_d[] = + public static final float[] table_ab2_d = { 0.0f, 0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f, 0.12500000000f, 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, 0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00003051758f }; // subbands 11-22 in tables 3-B.2a and 2b: - public static final int table_ab3_codelength[] = { 0, 5, 7, 3, 10, 4, 5, 16 }; - public static final float table_ab3_factor[] = + public static final int[] table_ab3_codelength = { 0, 5, 7, 3, 10, 4, 5, 16 }; + public static final float[] table_ab3_factor = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32768.0f }; - public static final float table_ab3_c[] = + public static final float[] table_ab3_c = { 0.0f, 1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f, 1.06666666666f, 1.03225806452f, 1.00001525902f }; - public static final float table_ab3_d[] = + public static final float[] table_ab3_d = { 0.0f, 0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f, 0.12500000000f, 0.06250000000f, 0.00003051758f }; // subbands 23-... in tables 3-B.2a and 2b: - public static final int table_ab4_codelength[] = { 0, 5, 7, 16 }; - public static final float table_ab4_factor[] = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/32768.0f }; - public static final float table_ab4_c[] = { 0.0f, 1.33333333333f, 1.60000000000f, 1.00001525902f }; - public static final float table_ab4_d[] = { 0.0f, 0.50000000000f, 0.50000000000f, 0.00003051758f }; + public static final int[] table_ab4_codelength = { 0, 5, 7, 16 }; + public static final float[] table_ab4_factor = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/32768.0f }; + public static final float[] table_ab4_c = { 0.0f, 1.33333333333f, 1.60000000000f, 1.00001525902f }; + public static final float[] table_ab4_d = { 0.0f, 0.50000000000f, 0.50000000000f, 0.00003051758f }; // subbands in tables 3-B.2c and 2d: - public static final int table_cd_codelength[] = + public static final int[] table_cd_codelength = { 0, 5, 7, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - public static final float table_cd_groupingtables[][] = + public static final float[][] table_cd_groupingtables = { null, grouping_5bits, grouping_7bits, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null, null }; - public static final float table_cd_factor[] = + public static final float[] table_cd_factor = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f, 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, 1.0f/8192.0f, 1.0f/16384.0f }; - public static final float table_cd_c[] = + public static final float[] table_cd_c = { 0.0f, 1.33333333333f, 1.60000000000f, 1.77777777777f, 1.06666666666f, 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f, 1.00003051851f }; - public static final float table_cd_d[] = + public static final float[] table_cd_d = { 0.0f, 0.50000000000f, 0.50000000000f, 0.50000000000f, 0.12500000000f, 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, 0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f, @@ -479,19 +479,19 @@ static class SubbandLayer2 extends Subband - protected int subbandnumber; + protected final int subbandnumber; protected int allocation; protected int scfsi; protected float scalefactor1, scalefactor2, scalefactor3; - protected int[] codelength = {0}; - protected float groupingtable[][] = new float[2][]; + protected final int[] codelength = {0}; + protected final float[][] groupingtable = new float[2][]; //protected float[][] groupingtable = {{0},{0}} ; - protected float[] factor = {0.0f}; + protected final float[] factor = {0.0f}; protected int groupnumber; protected int samplenumber; - protected float[] samples = new float[3]; - protected float[] c = {0}; - protected float[] d = {0}; + protected final float[] samples = new float[3]; + protected final float[] c = {0}; + protected final float[] d = {0}; /** * Constructor */ @@ -710,10 +710,7 @@ public boolean read_sampledata (Bitstream stream) } samplenumber = 0; - if (++groupnumber == 12) - return true; - else - return false; + return ++groupnumber == 12; } /** @@ -735,15 +732,12 @@ else if (groupnumber <= 8) sample *= scalefactor3; filter1.input_sample(sample, subbandnumber); } - - if (++samplenumber == 3) - return true; - else - return false; + + return ++samplenumber == 3; } - }; - - /** + } + + /** * Class for layer II subbands in joint stereo mode. */ static class SubbandLayer2IntensityStereo extends SubbandLayer2 @@ -880,15 +874,12 @@ else if (groupnumber <= 8) filter1.input_sample(sample, subbandnumber); } } - - if (++samplenumber == 3) - return true; - else - return false; + + return ++samplenumber == 3; } - }; + } - /** + /** * Class for layer II subbands in stereo mode. */ static class SubbandLayer2Stereo extends SubbandLayer2 @@ -897,12 +888,12 @@ static class SubbandLayer2Stereo extends SubbandLayer2 protected int channel2_scfsi; protected float channel2_scalefactor1, channel2_scalefactor2, channel2_scalefactor3; //protected boolean channel2_grouping; ???? Never used! - protected int[] channel2_codelength = {0}; + protected final int[] channel2_codelength = {0}; //protected float[][] channel2_groupingtable = {{0},{0}}; - protected float[] channel2_factor = {0}; - protected float[] channel2_samples; - protected float[] channel2_c = {0}; - protected float[] channel2_d = {0}; + protected final float[] channel2_factor = {0}; + protected final float[] channel2_samples; + protected final float[] channel2_c = {0}; + protected final float[] channel2_d = {0}; /** * Constructor diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIIDecoder.java b/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIIDecoder.java index 602badf0..c4703e63 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIIDecoder.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/LayerIIIDecoder.java @@ -43,37 +43,38 @@ final class LayerIIIDecoder implements FrameDecoder { final double d43 = (4.0/3.0); - public int[] scalefac_buffer; + public final int[] scalefac_buffer; // MDM: removed, as this wasn't being used. //private float CheckSumOut1d = 0.0f; private int CheckSumHuff = 0; - private int[] is_1d; - private float[][][] ro; - private float[][][] lr; - private float[] out_1d; - private float[][] prevblck; - private float[][] k; - private int[] nonzero; - private Bitstream stream; - private Header header; - private SynthesisFilter filter1, filter2; - private Obuffer buffer; - private int which_channels; + private final int[] is_1d; + private final float[][][] ro; + private final float[][][] lr; + private final float[] out_1d; + private final float[][] prevblck; + private final float[][] k; + private final int[] nonzero; + private final Bitstream stream; + private final Header header; + private final SynthesisFilter filter1; + private final SynthesisFilter filter2; + private final Obuffer buffer; + private final int which_channels; private BitReserve br; - private III_side_info_t si; + private final III_side_info_t si; - private temporaire2[] III_scalefac_t; - private temporaire2[] scalefac; + private final temporaire2[] III_scalefac_t; + private final temporaire2[] scalefac; // private III_scalefac_t scalefac; - private int max_gr; + private final int max_gr; private int frame_start; private int part2_start; - private int channels; - private int first_channel; - private int last_channel; - private int sfreq; + private final int channels; + private final int first_channel; + private final int last_channel; + private final int sfreq; /** @@ -145,7 +146,7 @@ public LayerIIIDecoder(Bitstream stream0, Header header0, // Sftable int[] ll0 = {0, 6, 11, 16, 21}; int[] ss0 = {0, 6, 12}; - sftable = new Sftable(ll0,ss0); + sftable = new Sftable(ll0, ss0); // END OF Sftable // scalefac_buffer @@ -225,8 +226,8 @@ public void decodeFrame() // subband samples are buffered and passed to the // SynthesisFilter in one go. - private float[] samples1 = new float[32]; - private float[] samples2 = new float[32]; + private final float[] samples1 = new float[32]; + private final float[] samples2 = new float[32]; public void decode() { @@ -350,9 +351,9 @@ public void decode() * Reads the side info from the stream, assuming the entire. * frame has been read already. * Mono : 136 bits (= 17 bytes) - * Stereo : 256 bits (= 32 bytes) + * Stereo : 256 bits (= 32 bytes) */ - private boolean get_side_info() + private void get_side_info() { int ch, gr; if (header.version() == Header.MPEG1) @@ -392,7 +393,7 @@ private boolean get_side_info() if (si.ch[ch].gr[gr].block_type == 0) { // Side info bad: block_type == 0 in split block - return false; + return; } else if (si.ch[ch].gr[gr].block_type == 2 && si.ch[ch].gr[gr].mixed_block_flag == 0) { si.ch[ch].gr[gr].region0_count = 8; @@ -445,7 +446,7 @@ private boolean get_side_info() if (si.ch[ch].gr[0].block_type == 0) { // Side info bad: block_type == 0 in split block - return false; + return; } else if (si.ch[ch].gr[0].block_type == 2 && si.ch[ch].gr[0].mixed_block_flag == 0) { si.ch[ch].gr[0].region0_count = 8; @@ -468,7 +469,6 @@ private boolean get_side_info() si.ch[ch].gr[0].count1table_select = stream.get_bits(1); } // for(ch=0; ch 0) xr_1d[quotien][reste] = g_gain * t_43[abv]; + if (is_1d[j] > 0) xr[quotien][reste] = g_gain * t_43[abv]; else { - if (-abv < t_43.length) xr_1d[quotien][reste] = -g_gain * t_43[-abv]; - else xr_1d[quotien][reste] = -g_gain * (float)Math.pow(-abv, d43); + if (-abv < t_43.length) xr[quotien][reste] = -g_gain * t_43[-abv]; + else xr[quotien][reste] = -g_gain * (float)Math.pow(-abv, d43); } } else { - if (is_1d[j] > 0) xr_1d[quotien][reste] = g_gain * (float)Math.pow(abv, d43); - else xr_1d[quotien][reste] = -g_gain * (float)Math.pow(-abv, d43); + if (is_1d[j] > 0) xr[quotien][reste] = g_gain * (float)Math.pow(abv, d43); + else xr[quotien][reste] = -g_gain * (float)Math.pow(-abv, d43); } } } @@ -923,7 +919,7 @@ private void dequantize_sample(float xr[][], int ch, int gr) { // Modif E.B 02/22/99 int reste = j % SSLIMIT; - int quotien = (int) ((j-reste)/SSLIMIT); + int quotien = (j-reste)/SSLIMIT; if (index == next_cb_boundary) { /* Adjust critical band boundary */ if ((gr_info.window_switching_flag != 0) && (gr_info.block_type == 2)) { @@ -977,9 +973,7 @@ private void dequantize_sample(float xr[][], int ch, int gr) // Do long/short dependent scaling operations - if ((gr_info.window_switching_flag !=0)&& - (((gr_info.block_type == 2) && (gr_info.mixed_block_flag == 0)) || - ((gr_info.block_type == 2) && (gr_info.mixed_block_flag!=0) && (j >= 36)) )) + if (gr_info.window_switching_flag != 0 && (gr_info.block_type == 2 && gr_info.mixed_block_flag == 0 || gr_info.block_type == 2 && j >= 36)) { t_index = (index - cb_begin) / cb_width; @@ -990,7 +984,7 @@ private void dequantize_sample(float xr[][], int ch, int gr) << gr_info.scalefac_scale; idx += (gr_info.subblock_gain[t_index] << 2); - xr_1d[quotien][reste] *= two_to_negative_half_pow[idx]; + xr[quotien][reste] *= two_to_negative_half_pow[idx]; } else { // LONG block types 0,1,3 & 1st 2 subbands of switched blocks /* xr[sb][ss] *= pow(2.0, -0.5 * (1.0+gr_info.scalefac_scale) @@ -1002,7 +996,7 @@ private void dequantize_sample(float xr[][], int ch, int gr) idx += pretab[cb]; idx = idx << gr_info.scalefac_scale; - xr_1d[quotien][reste] *= two_to_negative_half_pow[idx]; + xr[quotien][reste] *= two_to_negative_half_pow[idx]; } index++; } @@ -1011,28 +1005,26 @@ private void dequantize_sample(float xr[][], int ch, int gr) { // Modif E.B 02/22/99 int reste = j % SSLIMIT; - int quotien = (int) ((j-reste)/SSLIMIT); + int quotien = (j-reste)/SSLIMIT; if(reste < 0) reste = 0; if(quotien < 0) quotien = 0; - xr_1d[quotien][reste] = 0.0f; + xr[quotien][reste] = 0.0f; } - return; - } + } /** * */ - private void reorder(float xr[][], int ch, int gr) + private void reorder(float[][] xr, int ch, int gr) { gr_info_s gr_info = (si.ch[ch].gr[gr]); int freq, freq3; int index; int sfb, sfb_start, sfb_lines; int src_line, des_line; - float[][] xr_1d = xr; - if ((gr_info.window_switching_flag !=0) && (gr_info.block_type == 2)) { + if ((gr_info.window_switching_flag !=0) && (gr_info.block_type == 2)) { for(index=0; index<576; index++) out_1d[index] = 0.0f; @@ -1043,8 +1035,8 @@ private void reorder(float xr[][], int ch, int gr) { // Modif E.B 02/22/99 int reste = index % SSLIMIT; - int quotien = (int) ((index-reste)/SSLIMIT); - out_1d[index] = xr_1d[quotien][reste]; + int quotien = (index-reste)/SSLIMIT; + out_1d[index] = xr[quotien][reste]; } // REORDERING FOR REST SWITCHED SHORT /*for( sfb=3,sfb_start=sfBandIndex[sfreq].s[3], @@ -1067,23 +1059,23 @@ private void reorder(float xr[][], int ch, int gr) des_line = sfb_start3 + freq3; // Modif E.B 02/22/99 int reste = src_line % SSLIMIT; - int quotien = (int) ((src_line-reste)/SSLIMIT); + int quotien = (src_line-reste)/SSLIMIT; - out_1d[des_line] = xr_1d[quotien][reste]; + out_1d[des_line] = xr[quotien][reste]; src_line += sfb_lines; des_line++; reste = src_line % SSLIMIT; - quotien = (int) ((src_line-reste)/SSLIMIT); + quotien = (src_line-reste)/SSLIMIT; - out_1d[des_line] = xr_1d[quotien][reste]; + out_1d[des_line] = xr[quotien][reste]; src_line += sfb_lines; des_line++; reste = src_line % SSLIMIT; - quotien = (int) ((src_line-reste)/SSLIMIT); + quotien = (src_line-reste)/SSLIMIT; - out_1d[des_line] = xr_1d[quotien][reste]; + out_1d[des_line] = xr[quotien][reste]; } } @@ -1092,8 +1084,8 @@ private void reorder(float xr[][], int ch, int gr) { int j = reorder_table[sfreq][index]; int reste = j % SSLIMIT; - int quotien = (int) ((j-reste)/SSLIMIT); - out_1d[index] = xr_1d[quotien][reste]; + int quotien = (j-reste)/SSLIMIT; + out_1d[index] = xr[quotien][reste]; } } } @@ -1102,8 +1094,8 @@ private void reorder(float xr[][], int ch, int gr) { // Modif E.B 02/22/99 int reste = index % SSLIMIT; - int quotien = (int) ((index-reste)/SSLIMIT); - out_1d[index] = xr_1d[quotien][reste]; + int quotien = (index-reste)/SSLIMIT; + out_1d[index] = xr[quotien][reste]; } } } @@ -1112,8 +1104,8 @@ private void reorder(float xr[][], int ch, int gr) * */ - int[] is_pos = new int[576]; - float[] is_ratio = new float[576]; + final int[] is_pos = new int[576]; + final float[] is_ratio = new float[576]; private void stereo(int gr) { @@ -1222,7 +1214,7 @@ private void stereo(int gr) i++; } // for (; sb > 0 ... } - if (max_sfb <= 3) { + if (max_sfb == 3) { i = 2; ss = 17; sb = -1; @@ -1385,7 +1377,7 @@ else if (i_stereo) { lr[0][sb][ss] = ro[0][sb][ss] * k[0][i]; lr[1][sb][ss] = ro[0][sb][ss] * k[1][i]; } else { - lr[1][sb][ss] = ro[0][sb][ss] / (float) (1 + is_ratio[i]); + lr[1][sb][ss] = ro[0][sb][ss] / (1 + is_ratio[i]); lr[0][sb][ss] = lr[1][sb][ss] * is_ratio[i]; } } @@ -1410,7 +1402,7 @@ private void antialias(int ch, int gr) // with 8 butterflies between each pair if ((gr_info.window_switching_flag !=0) && (gr_info.block_type == 2) && - !(gr_info.mixed_block_flag != 0) ) + gr_info.mixed_block_flag == 0) return; if ((gr_info.window_switching_flag !=0) && (gr_info.mixed_block_flag != 0)&& @@ -1438,8 +1430,8 @@ private void antialias(int ch, int gr) // MDM: tsOutCopy and rawout do not need initializing, so the arrays // can be reused. - float[] tsOutCopy = new float[18]; - float[] rawout = new float[36]; + final float[] tsOutCopy = new float[18]; + final float[] rawout = new float[36]; private void hybrid(int ch, int gr) { @@ -1457,21 +1449,19 @@ private void hybrid(int ch, int gr) tsOut = out_1d; // Modif E.B 02/22/99 - for (int cc = 0;cc<18;cc++) - tsOutCopy[cc] = tsOut[cc+sb18]; + System.arraycopy(tsOut, sb18, tsOutCopy, 0, 18); inv_mdct(tsOutCopy, rawout, bt); - for (int cc = 0;cc<18;cc++) - tsOut[cc+sb18] = tsOutCopy[cc]; + System.arraycopy(tsOutCopy, 0, tsOut, sb18, 18); // Fin Modif // overlap addition prvblk = prevblck; - tsOut[0 + sb18] = rawout[0] + prvblk[ch][sb18 + 0]; - prvblk[ch][sb18 + 0] = rawout[18]; + tsOut[sb18] = rawout[0] + prvblk[ch][sb18]; + prvblk[ch][sb18] = rawout[18]; tsOut[1 + sb18] = rawout[1] + prvblk[ch][sb18 + 1]; prvblk[ch][sb18 + 1] = rawout[19]; tsOut[2 + sb18] = rawout[2] + prvblk[ch][sb18 + 2]; @@ -1536,7 +1526,7 @@ public void inv_mdct(float[] in, float[] out, int block_type) float tmpf_10, tmpf_11, tmpf_12, tmpf_13, tmpf_14, tmpf_15, tmpf_16, tmpf_17; tmpf_0 = tmpf_1 = tmpf_2 = tmpf_3 = tmpf_4 = tmpf_5 = tmpf_6 = tmpf_7 = tmpf_8 = tmpf_9 = - tmpf_10 = tmpf_11 = tmpf_12 = tmpf_13 = tmpf_14 = tmpf_15 = tmpf_16 = tmpf_17 = 0.0f; + tmpf_10 = tmpf_11 = tmpf_12 = tmpf_13 = tmpf_14 = tmpf_15 = tmpf_16 = 0.0f; @@ -1599,7 +1589,7 @@ public void inv_mdct(float[] in, float[] out, int block_type) // Begin 12 point IDCT // Input aliasing for 12 pt IDCT in[15+i] += in[12+i]; in[12+i] += in[9+i]; in[9+i] += in[6+i]; - in[6+i] += in[3+i]; in[3+i] += in[0+i]; + in[6+i] += in[3+i]; in[3+i] += in[i]; // Input aliasing on odd indices (for 6 point IDCT) in[15+i] += in[9+i]; in[9+i] += in[3+i]; @@ -1608,8 +1598,8 @@ public void inv_mdct(float[] in, float[] out, int block_type) float pp1, pp2, sum; pp2 = in[12+i] * 0.500000000f; pp1 = in[ 6+i] * 0.866025403f; - sum = in[0+i] + pp2; - tmpf_1 = in[0+i] - in[12+i]; + sum = in[i] + pp2; + tmpf_1 = in[i] - in[12+i]; tmpf_0 = sum + pp1; tmpf_2 = sum - pp1; @@ -1736,14 +1726,14 @@ public void inv_mdct(float[] in, float[] out, int block_type) // 9 point IDCT on odd indices // 5 points on odd indices (not realy an IDCT) - float i0 = in[0+1]+in[0+1]; + float i0 = in[1]+in[1]; float i0p12 = i0 + in[12+1]; tmp0o = i0p12 + in[4+1]*1.8793852415718f + in[8+1]*1.532088886238f + in[16+1]*0.34729635533386f; tmp1o = i0 + in[4+1] - in[8+1] - in[12+1] - in[12+1] - in[16+1]; tmp2o = i0p12 - in[4+1]*0.34729635533386f - in[8+1]*1.8793852415718f + in[16+1]*1.532088886238f; tmp3o = i0p12 - in[4+1]*1.532088886238f + in[8+1]*0.34729635533386f - in[16+1]*1.8793852415718f; - tmp4o = (in[0+1] - in[4+1] + in[8+1] - in[12+1] + in[16+1])*0.707106781f; // Twiddled + tmp4o = (in[1] - in[4+1] + in[8+1] - in[12+1] + in[16+1])*0.707106781f; // Twiddled // 4 points on even indices float i6_ = in[6+1]*1.732050808f; // Sqrt[3] @@ -1820,14 +1810,14 @@ public void inv_mdct(float[] in, float[] out, int block_type) // This may be adjusted for performance without any problems. //public static final int POW_TABLE_LIMIT=512; - /************************************************************/ + /*********************************************************/ /* L3TABLE */ /************************************************************/ static class SBI { - public int[] l; - public int[] s; + public final int[] l; + public final int[] s; public SBI() { @@ -1850,8 +1840,8 @@ static class gr_info_s public int window_switching_flag = 0; public int block_type = 0; public int mixed_block_flag = 0; - public int[] table_select; - public int[] subblock_gain; + public final int[] table_select; + public final int[] subblock_gain; public int region0_count = 0; public int region1_count = 0; public int preflag = 0; @@ -1870,8 +1860,8 @@ public gr_info_s() static class temporaire { - public int[] scfsi; - public gr_info_s[] gr; + public final int[] scfsi; + public final gr_info_s[] gr; /** * Dummy Constructor @@ -1890,7 +1880,7 @@ static class III_side_info_t public int main_data_begin = 0; public int private_bits = 0; - public temporaire[] ch; + public final temporaire[] ch; /** * Dummy Constructor */ @@ -1904,8 +1894,8 @@ public III_side_info_t() static class temporaire2 { - public int[] l; /* [cb] */ - public int[][] s; /* [window][cb] */ + public final int[] l; /* [cb] */ + public final int[][] s; /* [window][cb] */ /** * Dummy Constructor @@ -1928,18 +1918,18 @@ public temporaire2() // } //} - private static final int slen[][] = + private static final int[][] slen = { {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} }; - public static final int pretab[] = + public static final int[] pretab = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0}; - private SBI[] sfBandIndex; // Init in the constructor. + private final SBI[] sfBandIndex; // Init in the constructor. - public static final float two_to_negative_half_pow[] = + public static final float[] two_to_negative_half_pow = { 1.0000000000E+00f, 7.0710678119E-01f, 5.0000000000E-01f, 3.5355339059E-01f, 2.5000000000E-01f, 1.7677669530E-01f, 1.2500000000E-01f, 8.8388347648E-02f, 6.2500000000E-02f, 4.4194173824E-02f, 3.1250000000E-02f, 2.2097086912E-02f, @@ -1959,7 +1949,7 @@ public temporaire2() }; - public static final float t_43[] = create_t_43(); + public static final float[] t_43 = create_t_43(); static private float[] create_t_43() { @@ -1973,7 +1963,7 @@ static private float[] create_t_43() return t43; } - public static final float io[][] = + public static final float[][] io = { { 1.0000000000E+00f, 8.4089641526E-01f, 7.0710678119E-01f, 5.9460355751E-01f, 5.0000000001E-01f, 4.2044820763E-01f, 3.5355339060E-01f, 2.9730177876E-01f, @@ -1995,7 +1985,7 @@ static private float[] create_t_43() - public static final float TAN12[] = + public static final float[] TAN12 = { 0.0f, 0.26794919f, 0.57735027f, 1.0f, 1.73205081f, 3.73205081f, 9.9999999e10f, -3.73205081f, @@ -2080,7 +2070,7 @@ static private float[] create_t_43() 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }; */ - private static /*final*/ int reorder_table[][]/* = loadReorderTable()*/; // SZD: will be generated on demand + private static /*final*/ int[][] reorder_table/* = loadReorderTable()*/; // SZD: will be generated on demand /** * Loads the data for the reorder @@ -2099,9 +2089,9 @@ static private float[] create_t_43() } }*/ - static int[] reorder(int scalefac_band[]) { // SZD: converted from LAME + static int[] reorder(int[] scalefac_band) { // SZD: converted from LAME int j = 0; - int ix[] = new int[576]; + int[] ix = new int[576]; for(int sfb = 0; sfb < 13; sfb++) { int start = scalefac_band[sfb]; int end = scalefac_band[sfb + 1]; @@ -2333,35 +2323,35 @@ static int[] reorder(int scalefac_band[]) { // SZD: converted from LAME }; */ - private static final float cs[] = + private static final float[] cs = { 0.857492925712f, 0.881741997318f, 0.949628649103f, 0.983314592492f, 0.995517816065f, 0.999160558175f, 0.999899195243f, 0.999993155067f }; - private static final float ca[] = + private static final float[] ca = { -0.5144957554270f, -0.4717319685650f, -0.3133774542040f, -0.1819131996110f, -0.0945741925262f, -0.0409655828852f, -0.0141985685725f, -0.00369997467375f }; - /************************************************************/ + /*********************************************************/ /* END OF L3TABLE */ - /************************************************************/ + /*********************************************************/ - /************************************************************/ + /*********************************************************/ /* L3TYPE */ - /************************************************************/ + /*********************************************************/ - /***************************************************************/ + /************************************************************/ /* END OF L3TYPE */ - /***************************************************************/ + /************************************************************/ - /***************************************************************/ + /************************************************************/ /* INV_MDCT */ /***************************************************************/ - public static final float win[][] = + public static final float[][] win = { { -1.6141214951E-02f, -5.3603178919E-02f, -1.0070713296E-01f, -1.6280817573E-01f, -4.9999999679E-01f, -3.8388735032E-01f, -6.2061144372E-01f, -1.1659756083E+00f, @@ -2403,14 +2393,14 @@ static int[] reorder(int scalefac_band[]) { // SZD: converted from LAME -1.5350360518E-01f, -1.3758624925E-01f, -1.2103922149E-01f, -2.0710679058E-01f, -8.4752577594E-02f, -6.4157525656E-02f, -4.1131172614E-02f, -1.4790705759E-02f } }; - /***************************************************************/ + /************************************************************/ /* END OF INV_MDCT */ /***************************************************************/ - class Sftable + static class Sftable { - public int[] l; - public int[] s; + public final int[] l; + public final int[] s; public Sftable() { @@ -2425,9 +2415,9 @@ public Sftable(int[] thel, int[] thes) } } - public Sftable sftable; + public final Sftable sftable; - public static final int nr_of_sfb_block[][][] = + public static final int[][][] nr_of_sfb_block = {{{ 6, 5, 5, 5} , { 9, 9, 9, 9} , { 6, 9, 9, 9}}, {{ 6, 5, 7, 3} , { 9, 9,12, 6} , { 6, 9,12, 6}}, {{11,10, 0, 0} , {18,18, 0, 0} , {15,18, 0, 0}}, diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/Obuffer.java b/jdosbox/src/main/java/javazoom/jl/decoder/Obuffer.java index 45a71a9b..bb08be18 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/Obuffer.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/Obuffer.java @@ -63,7 +63,7 @@ public void appendSamples(int channel, float[] f) /** * Clip Sample to 16 Bits */ - private final short clip(float sample) + private short clip(float sample) { return ((sample > 32767.0f) ? 32767 : ((sample < -32768.0f) ? -32768 : diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/OutputChannels.java b/jdosbox/src/main/java/javazoom/jl/decoder/OutputChannels.java index 58c8310d..559ecbb7 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/OutputChannels.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/OutputChannels.java @@ -24,7 +24,7 @@ /** * A Type-safe representation of the the supported output channel * constants. - * + *

* This class is immutable and, hence, is thread safe. * * @author Mat McGowan 12/12/99 @@ -59,7 +59,7 @@ public class OutputChannels public static final OutputChannels DOWNMIX = new OutputChannels(DOWNMIX_CHANNELS); - private /*final*/ int outputChannels; + private final /*final*/ int outputChannels; /** * Creates an OutputChannels instance @@ -117,8 +117,7 @@ public int getChannelsOutputCode() */ public int getChannelCount() { - int count = (outputChannels==BOTH_CHANNELS) ? 2 : 1; - return count; + return (outputChannels==BOTH_CHANNELS) ? 2 : 1; } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/SampleBuffer.java b/jdosbox/src/main/java/javazoom/jl/decoder/SampleBuffer.java index ba4bfa06..bb668808 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/SampleBuffer.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/SampleBuffer.java @@ -31,10 +31,10 @@ */ public class SampleBuffer extends Obuffer { - private short[] buffer; - private int[] bufferp; - private int channels; - private int frequency; + private final short[] buffer; + private final int[] bufferp; + private final int channels; + private final int frequency; /** * Constructor @@ -90,7 +90,7 @@ public void appendSamples(int channel, float[] f) { fs = f[i++]; fs = (fs>32767.0f ? 32767.0f - : (fs < -32767.0f ? -32767.0f : fs)); + : (Math.max(fs, -32767.0f))); s = (short)fs; buffer[pos] = s; diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/Source.java b/jdosbox/src/main/java/javazoom/jl/decoder/Source.java index 9d6a5d73..8884ef32 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/Source.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/Source.java @@ -23,27 +23,27 @@ /** * Work in progress. - * + *

* Class to describe a seekable data source. * */ public interface Source { - public static final long LENGTH_UNKNOWN = -1; + long LENGTH_UNKNOWN = -1; - public int read(byte[] b, int offs, int len) + int read(byte[] b, int offs, int len) throws IOException; - public boolean willReadBlock(); + boolean willReadBlock(); - public boolean isSeekable(); + boolean isSeekable(); - public long length(); + long length(); - public long tell(); + long tell(); - public long seek(long pos); + long seek(long pos); } diff --git a/jdosbox/src/main/java/javazoom/jl/decoder/SynthesisFilter.java b/jdosbox/src/main/java/javazoom/jl/decoder/SynthesisFilter.java index 581ab03c..95aebb03 100644 --- a/jdosbox/src/main/java/javazoom/jl/decoder/SynthesisFilter.java +++ b/jdosbox/src/main/java/javazoom/jl/decoder/SynthesisFilter.java @@ -39,17 +39,17 @@ */ final class SynthesisFilter { - private float[] v1; - private float[] v2; + private final float[] v1; + private final float[] v2; private float[] actual_v; // v1 or v2 private int actual_write_pos; // 0-15 - private float[] samples; // 32 new subband samples - private int channel; - private float scalefactor; + private final float[] samples; // 32 new subband samples + private final int channel; + private final float scalefactor; private float[] eq; - /** - * Quality value for controlling CPU usage/quality tradeoff. + /* + Quality value for controlling CPU usage/quality tradeoff. */ /* private int quality; @@ -197,7 +197,7 @@ private void compute_new_v() new_v0 = new_v1 = new_v2 = new_v3 = new_v4 = new_v5 = new_v6 = new_v7 = new_v8 = new_v9 = new_v10 = new_v11 = new_v12 = new_v13 = new_v14 = new_v15 = new_v16 = new_v17 = new_v18 = new_v19 = new_v20 = new_v21 = new_v22 = new_v23 = new_v24 = new_v25 = new_v26 = new_v27 = new_v28 = new_v29 = - new_v30 = new_v31 = 0.0f; + new_v30 = 0.0f; // float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3 @@ -447,11 +447,11 @@ private void compute_new_v() // insert V[0-15] (== new_v[0-15]) into actual v: // float[] x2 = actual_v + actual_write_pos; - float dest[] = actual_v; + float[] dest = actual_v; int pos = actual_write_pos; - dest[0 + pos] = new_v0; + dest[pos] = new_v0; dest[16 + pos] = new_v1; dest[32 + pos] = new_v2; dest[48 + pos] = new_v3; @@ -491,7 +491,7 @@ private void compute_new_v() // insert V[32] (== -new_v[0]) into other v: dest = (actual_v==v1) ? v2 : v1; - dest[0 + pos] = -new_v0; + dest[pos] = -new_v0; // insert V[33-48] (== new_v[16-31]) into other v: dest[16 + pos] = new_v16; dest[32 + pos] = new_v17; @@ -808,7 +808,7 @@ private void compute_new_v_old() // float[] x2 = actual_v + actual_write_pos; float[] dest = actual_v; - dest[0 + actual_write_pos] = x1[0]; + dest[actual_write_pos] = x1[0]; dest[16 + actual_write_pos] = x1[1]; dest[32 + actual_write_pos] = x1[2]; dest[48 + actual_write_pos] = x1[3]; @@ -853,22 +853,21 @@ private void compute_new_v_old() * Compute PCM Samples. */ - private float[] _tmpOut = new float[32]; + private final float[] _tmpOut = new float[32]; private void compute_pcm_samples0(Obuffer buffer) { final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) { float pcm_sample; final float[] dp = d16[i]; - pcm_sample = (float)(((vp[0 + dvp] * dp[0]) + + pcm_sample = ((vp[dvp] * dp[0]) + (vp[15 + dvp] * dp[1]) + (vp[14 + dvp] * dp[2]) + (vp[13 + dvp] * dp[3]) + @@ -884,9 +883,9 @@ private void compute_pcm_samples0(Obuffer buffer) (vp[3 + dvp] * dp[13]) + (vp[2 + dvp] * dp[14]) + (vp[1 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -905,8 +904,8 @@ private void compute_pcm_samples1(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[1 + dvp] * dp[0]) + - (vp[0 + dvp] * dp[1]) + + pcm_sample = ((vp[1 + dvp] * dp[0]) + + (vp[dvp] * dp[1]) + (vp[15 + dvp] * dp[2]) + (vp[14 + dvp] * dp[3]) + (vp[13 + dvp] * dp[4]) + @@ -921,7 +920,7 @@ private void compute_pcm_samples1(Obuffer buffer) (vp[4 + dvp] * dp[13]) + (vp[3 + dvp] * dp[14]) + (vp[2 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; tmpOut[i] = pcm_sample; @@ -933,8 +932,7 @@ private void compute_pcm_samples2(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -942,9 +940,9 @@ private void compute_pcm_samples2(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[2 + dvp] * dp[0]) + + pcm_sample = ((vp[2 + dvp] * dp[0]) + (vp[1 + dvp] * dp[1]) + - (vp[0 + dvp] * dp[2]) + + (vp[dvp] * dp[2]) + (vp[15 + dvp] * dp[3]) + (vp[14 + dvp] * dp[4]) + (vp[13 + dvp] * dp[5]) + @@ -958,9 +956,9 @@ private void compute_pcm_samples2(Obuffer buffer) (vp[5 + dvp] * dp[13]) + (vp[4 + dvp] * dp[14]) + (vp[3 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -972,8 +970,7 @@ private void compute_pcm_samples3(Obuffer buffer) int idx = 0; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -981,10 +978,10 @@ private void compute_pcm_samples3(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[3 + dvp] * dp[0]) + + pcm_sample = ((vp[3 + dvp] * dp[0]) + (vp[2 + dvp] * dp[1]) + (vp[1 + dvp] * dp[2]) + - (vp[0 + dvp] * dp[3]) + + (vp[dvp] * dp[3]) + (vp[15 + dvp] * dp[4]) + (vp[14 + dvp] * dp[5]) + (vp[13 + dvp] * dp[6]) + @@ -997,9 +994,9 @@ private void compute_pcm_samples3(Obuffer buffer) (vp[6 + dvp] * dp[13]) + (vp[5 + dvp] * dp[14]) + (vp[4 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1010,8 +1007,7 @@ private void compute_pcm_samples4(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1019,11 +1015,11 @@ private void compute_pcm_samples4(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[4 + dvp] * dp[0]) + + pcm_sample = ((vp[4 + dvp] * dp[0]) + (vp[3 + dvp] * dp[1]) + (vp[2 + dvp] * dp[2]) + (vp[1 + dvp] * dp[3]) + - (vp[0 + dvp] * dp[4]) + + (vp[dvp] * dp[4]) + (vp[15 + dvp] * dp[5]) + (vp[14 + dvp] * dp[6]) + (vp[13 + dvp] * dp[7]) + @@ -1035,9 +1031,9 @@ private void compute_pcm_samples4(Obuffer buffer) (vp[7 + dvp] * dp[13]) + (vp[6 + dvp] * dp[14]) + (vp[5 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1048,8 +1044,7 @@ private void compute_pcm_samples5(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1057,12 +1052,12 @@ private void compute_pcm_samples5(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[5 + dvp] * dp[0]) + + pcm_sample = ((vp[5 + dvp] * dp[0]) + (vp[4 + dvp] * dp[1]) + (vp[3 + dvp] * dp[2]) + (vp[2 + dvp] * dp[3]) + (vp[1 + dvp] * dp[4]) + - (vp[0 + dvp] * dp[5]) + + (vp[dvp] * dp[5]) + (vp[15 + dvp] * dp[6]) + (vp[14 + dvp] * dp[7]) + (vp[13 + dvp] * dp[8]) + @@ -1073,9 +1068,9 @@ private void compute_pcm_samples5(Obuffer buffer) (vp[8 + dvp] * dp[13]) + (vp[7 + dvp] * dp[14]) + (vp[6 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1085,8 +1080,7 @@ private void compute_pcm_samples6(Obuffer buffer) { final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1094,13 +1088,13 @@ private void compute_pcm_samples6(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[6 + dvp] * dp[0]) + + pcm_sample = ((vp[6 + dvp] * dp[0]) + (vp[5 + dvp] * dp[1]) + (vp[4 + dvp] * dp[2]) + (vp[3 + dvp] * dp[3]) + (vp[2 + dvp] * dp[4]) + (vp[1 + dvp] * dp[5]) + - (vp[0 + dvp] * dp[6]) + + (vp[dvp] * dp[6]) + (vp[15 + dvp] * dp[7]) + (vp[14 + dvp] * dp[8]) + (vp[13 + dvp] * dp[9]) + @@ -1110,9 +1104,9 @@ private void compute_pcm_samples6(Obuffer buffer) (vp[9 + dvp] * dp[13]) + (vp[8 + dvp] * dp[14]) + (vp[7 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1123,8 +1117,7 @@ private void compute_pcm_samples7(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1132,14 +1125,14 @@ private void compute_pcm_samples7(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[7 + dvp] * dp[0]) + + pcm_sample = ((vp[7 + dvp] * dp[0]) + (vp[6 + dvp] * dp[1]) + (vp[5 + dvp] * dp[2]) + (vp[4 + dvp] * dp[3]) + (vp[3 + dvp] * dp[4]) + (vp[2 + dvp] * dp[5]) + (vp[1 + dvp] * dp[6]) + - (vp[0 + dvp] * dp[7]) + + (vp[dvp] * dp[7]) + (vp[15 + dvp] * dp[8]) + (vp[14 + dvp] * dp[9]) + (vp[13 + dvp] * dp[10]) + @@ -1148,9 +1141,9 @@ private void compute_pcm_samples7(Obuffer buffer) (vp[10 + dvp] * dp[13]) + (vp[9 + dvp] * dp[14]) + (vp[8 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1160,8 +1153,7 @@ private void compute_pcm_samples8(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1169,7 +1161,7 @@ private void compute_pcm_samples8(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[8 + dvp] * dp[0]) + + pcm_sample = ((vp[8 + dvp] * dp[0]) + (vp[7 + dvp] * dp[1]) + (vp[6 + dvp] * dp[2]) + (vp[5 + dvp] * dp[3]) + @@ -1177,7 +1169,7 @@ private void compute_pcm_samples8(Obuffer buffer) (vp[3 + dvp] * dp[5]) + (vp[2 + dvp] * dp[6]) + (vp[1 + dvp] * dp[7]) + - (vp[0 + dvp] * dp[8]) + + (vp[dvp] * dp[8]) + (vp[15 + dvp] * dp[9]) + (vp[14 + dvp] * dp[10]) + (vp[13 + dvp] * dp[11]) + @@ -1185,9 +1177,9 @@ private void compute_pcm_samples8(Obuffer buffer) (vp[11 + dvp] * dp[13]) + (vp[10 + dvp] * dp[14]) + (vp[9 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1198,8 +1190,7 @@ private void compute_pcm_samples9(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1207,7 +1198,7 @@ private void compute_pcm_samples9(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[9 + dvp] * dp[0]) + + pcm_sample = ((vp[9 + dvp] * dp[0]) + (vp[8 + dvp] * dp[1]) + (vp[7 + dvp] * dp[2]) + (vp[6 + dvp] * dp[3]) + @@ -1216,16 +1207,16 @@ private void compute_pcm_samples9(Obuffer buffer) (vp[3 + dvp] * dp[6]) + (vp[2 + dvp] * dp[7]) + (vp[1 + dvp] * dp[8]) + - (vp[0 + dvp] * dp[9]) + + (vp[dvp] * dp[9]) + (vp[15 + dvp] * dp[10]) + (vp[14 + dvp] * dp[11]) + (vp[13 + dvp] * dp[12]) + (vp[12 + dvp] * dp[13]) + (vp[11 + dvp] * dp[14]) + (vp[10 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1235,8 +1226,7 @@ private void compute_pcm_samples10(Obuffer buffer) { final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1244,7 +1234,7 @@ private void compute_pcm_samples10(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[10 + dvp] * dp[0]) + + pcm_sample = ((vp[10 + dvp] * dp[0]) + (vp[9 + dvp] * dp[1]) + (vp[8 + dvp] * dp[2]) + (vp[7 + dvp] * dp[3]) + @@ -1254,15 +1244,15 @@ private void compute_pcm_samples10(Obuffer buffer) (vp[3 + dvp] * dp[7]) + (vp[2 + dvp] * dp[8]) + (vp[1 + dvp] * dp[9]) + - (vp[0 + dvp] * dp[10]) + + (vp[dvp] * dp[10]) + (vp[15 + dvp] * dp[11]) + (vp[14 + dvp] * dp[12]) + (vp[13 + dvp] * dp[13]) + (vp[12 + dvp] * dp[14]) + (vp[11 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1272,8 +1262,7 @@ private void compute_pcm_samples11(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1281,7 +1270,7 @@ private void compute_pcm_samples11(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[11 + dvp] * dp[0]) + + pcm_sample = ((vp[11 + dvp] * dp[0]) + (vp[10 + dvp] * dp[1]) + (vp[9 + dvp] * dp[2]) + (vp[8 + dvp] * dp[3]) + @@ -1292,14 +1281,14 @@ private void compute_pcm_samples11(Obuffer buffer) (vp[3 + dvp] * dp[8]) + (vp[2 + dvp] * dp[9]) + (vp[1 + dvp] * dp[10]) + - (vp[0 + dvp] * dp[11]) + + (vp[dvp] * dp[11]) + (vp[15 + dvp] * dp[12]) + (vp[14 + dvp] * dp[13]) + (vp[13 + dvp] * dp[14]) + (vp[12 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1308,8 +1297,7 @@ private void compute_pcm_samples12(Obuffer buffer) { final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1317,7 +1305,7 @@ private void compute_pcm_samples12(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[12 + dvp] * dp[0]) + + pcm_sample = ((vp[12 + dvp] * dp[0]) + (vp[11 + dvp] * dp[1]) + (vp[10 + dvp] * dp[2]) + (vp[9 + dvp] * dp[3]) + @@ -1329,13 +1317,13 @@ private void compute_pcm_samples12(Obuffer buffer) (vp[3 + dvp] * dp[9]) + (vp[2 + dvp] * dp[10]) + (vp[1 + dvp] * dp[11]) + - (vp[0 + dvp] * dp[12]) + + (vp[dvp] * dp[12]) + (vp[15 + dvp] * dp[13]) + (vp[14 + dvp] * dp[14]) + (vp[13 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1345,8 +1333,7 @@ private void compute_pcm_samples13(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1354,7 +1341,7 @@ private void compute_pcm_samples13(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[13 + dvp] * dp[0]) + + pcm_sample = ((vp[13 + dvp] * dp[0]) + (vp[12 + dvp] * dp[1]) + (vp[11 + dvp] * dp[2]) + (vp[10 + dvp] * dp[3]) + @@ -1367,12 +1354,12 @@ private void compute_pcm_samples13(Obuffer buffer) (vp[3 + dvp] * dp[10]) + (vp[2 + dvp] * dp[11]) + (vp[1 + dvp] * dp[12]) + - (vp[0 + dvp] * dp[13]) + + (vp[dvp] * dp[13]) + (vp[15 + dvp] * dp[14]) + (vp[14 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1382,8 +1369,7 @@ private void compute_pcm_samples14(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) @@ -1391,7 +1377,7 @@ private void compute_pcm_samples14(Obuffer buffer) final float[] dp = d16[i]; float pcm_sample; - pcm_sample = (float)(((vp[14 + dvp] * dp[0]) + + pcm_sample = ((vp[14 + dvp] * dp[0]) + (vp[13 + dvp] * dp[1]) + (vp[12 + dvp] * dp[2]) + (vp[11 + dvp] * dp[3]) + @@ -1405,11 +1391,11 @@ private void compute_pcm_samples14(Obuffer buffer) (vp[3 + dvp] * dp[11]) + (vp[2 + dvp] * dp[12]) + (vp[1 + dvp] * dp[13]) + - (vp[0 + dvp] * dp[14]) + + (vp[dvp] * dp[14]) + (vp[15 + dvp] * dp[15]) - ) * scalefactor); + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for @@ -1419,15 +1405,14 @@ private void compute_pcm_samples15(Obuffer buffer) final float[] vp = actual_v; //int inc = v_inc; - final float[] tmpOut = _tmpOut; - int dvp =0; + int dvp =0; // fat chance of having this loop unroll for( int i=0; i<32; i++) { float pcm_sample; - final float dp[] = d16[i]; - pcm_sample = (float)(((vp[15 + dvp] * dp[0]) + + final float[] dp = d16[i]; + pcm_sample = ((vp[15 + dvp] * dp[0]) + (vp[14 + dvp] * dp[1]) + (vp[13 + dvp] * dp[2]) + (vp[12 + dvp] * dp[3]) + @@ -1442,10 +1427,10 @@ private void compute_pcm_samples15(Obuffer buffer) (vp[3 + dvp] * dp[12]) + (vp[2 + dvp] * dp[13]) + (vp[1 + dvp] * dp[14]) + - (vp[0 + dvp] * dp[15]) - ) * scalefactor); + (vp[dvp] * dp[15]) + ) * scalefactor; - tmpOut[i] = pcm_sample; + _tmpOut[i] = pcm_sample; dvp += 16; } // for } @@ -1600,14 +1585,14 @@ public void calculate_pcm_samples(Obuffer buffer) // as in Annex 3-B.3 of the ISO/IEC DIS 11172-3 // private float d[] = {0.000000000, -4.000442505}; - private static float d[] = null; + private static float[] d = null; /** * d[] split into subarrays of length 16. This provides for * more faster access by allowing a block of 16 to be addressed * with constant offset. **/ - private static float d16[][] = null; + private static float[][] d16 = null; /** * Loads the data for the d[] from the resource SFd.ser. @@ -1617,7 +1602,7 @@ static private float[] load_d() { try { - Class elemType = Float.TYPE; + Class elemType = Float.TYPE; Object o = JavaLayerUtils.deserializeArrayResource("sfd.ser", elemType, 512); return (float[])o; } @@ -1671,10 +1656,7 @@ static private float[] subArray(final float[] array, final int offs, int len) len = 0; float[] subarray = new float[len]; - for (int i=0; i>> 4; y[0] = h.val[point][1] & 0xf; - error = 0; - break; + break; } // hget1bit() is called thousands of times, and so needs to be @@ -552,7 +551,6 @@ public static int huffman_decoder(huffcodetab h, int[] x, int[] y, int[] v, int[ if (y[0] != 0) if (br.hget1bit() != 0) y[0] = -y[0]; } - return error; } public static void inithuff() diff --git a/jdosbox/src/main/java/jdos/Dosbox.java b/jdosbox/src/main/java/jdos/Dosbox.java index e8f110e1..d24a2cdd 100644 --- a/jdosbox/src/main/java/jdos/Dosbox.java +++ b/jdosbox/src/main/java/jdos/Dosbox.java @@ -30,8 +30,8 @@ public class Dosbox { static public boolean allPrivileges = true; - static private interface LoopHandler { - public /*Bitu*/int call(); + private interface LoopHandler { + /*Bitu*/int call(); } public static boolean applet = false; public static Config control; @@ -59,7 +59,7 @@ static public boolean IS_VGA_ARCH() { return (machine==MachineType.MCH_VGA); } - static private LoopHandler Normal_Loop = new LoopHandler() { + static private final LoopHandler Normal_Loop = new LoopHandler() { public /*Bitu*/int call() { /*Bits*/int ret; while (true) { @@ -113,7 +113,7 @@ static public boolean IS_VGA_ARCH() { if (ticksNew > ticksLast) { ticksRemain = ticksNew-ticksLast; ticksLast = ticksNew; - ticksDone += ticksRemain; + ticksDone += (int) ticksRemain; if ( ticksRemain > 20 ) { ticksRemain = 20; } @@ -124,7 +124,8 @@ static public boolean IS_VGA_ARCH() { /* ratio we are aiming for is around 90% usage*/ /*Bit32s*/int ratio = (int)((ticksScheduled * (CPU.CPU_CyclePercUsed*90*1024/100/100)) / ticksDone); /*Bit32s*/int new_cmax = CPU.CPU_CycleMax; - /*Bit64s*/long cproc = (/*Bit64s*/long)CPU.CPU_CycleMax * (/*Bit64s*/long)ticksScheduled; + /*Bit64s*//*Bit64s*/ + long cproc = (/*Bit64s*/long)CPU.CPU_CycleMax * ticksScheduled; if (cproc > 0) { /* ignore the cycles added due to the io delay code in order to have smoother auto cycle adjustments */ @@ -174,7 +175,7 @@ static public boolean IS_VGA_ARCH() { } else { ticksAdded = 0; Main.Delay(1); - ticksDone -= Main.GetTicks() - ticksNew; + ticksDone -= (int) (Main.GetTicks() - ticksNew); if (ticksDone < 0) ticksDone = 0; } @@ -217,10 +218,10 @@ static public void DOSBOX_RunMachine(){ } static private boolean autoadjust = false; - static private Mapper.MAPPER_Handler DOSBOX_UnlockSpeed = new Mapper.MAPPER_Handler() { + static private final Mapper.MAPPER_Handler DOSBOX_UnlockSpeed = new Mapper.MAPPER_Handler() { public void call(boolean pressed) { if (pressed) { - Log.log_msg("Fast Forward ON"); + System.out.println("Fast Forward ON"); ticksLocked = true; if (CPU.CPU_CycleAutoAdjust) { autoadjust = true; @@ -229,7 +230,7 @@ public void call(boolean pressed) { if (CPU.CPU_CycleMax<1000) CPU.CPU_CycleMax=1000; } } else { - Log.log_msg("Fast Forward OFF"); + System.out.println("Fast Forward OFF"); ticksLocked = false; if (autoadjust) { autoadjust = false; @@ -239,7 +240,7 @@ public void call(boolean pressed) { } }; - private static Section.SectionFunction DOSBOX_RealInit = new Section.SectionFunction() { + private static final Section.SectionFunction DOSBOX_RealInit = new Section.SectionFunction() { public void call(Section sec) { System.out.println("DOSBOX_RealInit"); Section_prop section=(Section_prop)sec; @@ -264,22 +265,54 @@ public void call(Section sec) { Int10.int10 = new Int10.Int10Data(); Int10.int10.vesa_nolfb = false; Int10.int10.vesa_oldvbe = false; - if (mtype.equals("cga")) { machine = MachineType.MCH_CGA; } - else if (mtype.equals("tandy")) { machine = MachineType.MCH_TANDY; } - else if (mtype.equals("pcjr")) { machine = MachineType.MCH_PCJR; } - else if (mtype.equals("hercules")) { machine = MachineType.MCH_HERC; } - else if (mtype.equals("ega")) { machine = MachineType.MCH_EGA; } - // else if (mtype.equals("vga") { svgaCard = SVGA_S3Trio; } - else if (mtype.equals("svga_s3")) { svgaCard = SVGACards.SVGA_S3Trio; } - else if (mtype.equals("vesa_nolfb")) { svgaCard = SVGACards.SVGA_S3Trio; Int10.int10.vesa_nolfb = true;} - else if (mtype.equals("vesa_oldvbe")) { svgaCard = SVGACards.SVGA_S3Trio; Int10.int10.vesa_oldvbe = true;} - else if (mtype.equals("svga_et4000")) { svgaCard = SVGACards.SVGA_TsengET4K; } - else if (mtype.equals("svga_et3000")) { svgaCard = SVGACards.SVGA_TsengET3K; } - // else if (mtype.equals("vga_pvga1a") { svgaCard = SVGA_ParadisePVGA1A; } - else if (mtype.equals("svga_paradise")) { svgaCard = SVGACards.SVGA_ParadisePVGA1A; } - else if (mtype.equals("vgaonly")) { svgaCard = SVGACards.SVGA_None; } - else if (mtype.equals("vgastd")) { svgaCard = SVGACards.SVGA_QEMU; } - else Log.exit("DOSBOX:Unknown machine type "+mtype); + switch (mtype) { + case "cga": + machine = MachineType.MCH_CGA; + break; + case "tandy": + machine = MachineType.MCH_TANDY; + break; + case "pcjr": + machine = MachineType.MCH_PCJR; + break; + case "hercules": + machine = MachineType.MCH_HERC; + break; + case "ega": + machine = MachineType.MCH_EGA; + break; + // else if (mtype.equals("vga") { svgaCard = SVGA_S3Trio; } + case "svga_s3": + svgaCard = SVGACards.SVGA_S3Trio; + break; + case "vesa_nolfb": + svgaCard = SVGACards.SVGA_S3Trio; + Int10.int10.vesa_nolfb = true; + break; + case "vesa_oldvbe": + svgaCard = SVGACards.SVGA_S3Trio; + Int10.int10.vesa_oldvbe = true; + break; + case "svga_et4000": + svgaCard = SVGACards.SVGA_TsengET4K; + break; + case "svga_et3000": + svgaCard = SVGACards.SVGA_TsengET3K; + break; + // else if (mtype.equals("vga_pvga1a") { svgaCard = SVGA_ParadisePVGA1A; } + case "svga_paradise": + svgaCard = SVGACards.SVGA_ParadisePVGA1A; + break; + case "vgaonly": + svgaCard = SVGACards.SVGA_None; + break; + case "vgastd": + svgaCard = SVGACards.SVGA_QEMU; + break; + default: + Log.exit("DOSBOX:Unknown machine type " + mtype); + break; + } if (svgaCard != SVGACards.SVGA_QEMU) VGA.VGA_Init(); } @@ -395,7 +428,7 @@ else if (Render.RENDER_USE_ADVANCED_SCALERS>0) Pstring.Set_values(scalers); - String force[] = { "", "forced" }; + String[] force = { "", "forced" }; Pstring = Pmulti.GetSection().Add_string("force",Property.Changeable.Always,""); Pstring.Set_values(force); @@ -761,7 +794,7 @@ else if (Render.RENDER_USE_ADVANCED_SCALERS>0) " this has to be changed. Modify the last three number blocks.\n" + " I.e. AC:DE:48:88:99:AB.\n" + "realnic -- Specifies which of your network interfaces is used.\n" + - " Write \'list\' here to see the list of devices in the\n" + + " Write 'list' here to see the list of devices in the\n" + " Status Window. Then make your choice and put either the\n" + " interface number (2 or something) or a part of your adapters\n" + " name, e.g. VIA here.\n" @@ -795,7 +828,7 @@ else if (Render.RENDER_USE_ADVANCED_SCALERS>0) "I.e. AC:DE:48:88:99:AB."); Pstring = secprop.Add_string("realnic", Property.Changeable.WhenIdle,"list"); Pstring.Set_help("Specifies which of your network interfaces is used.\n" + - "Write \'list\' here to see the list of devices in the\n" + + "Write 'list' here to see the list of devices in the\n" + "Status Window. Then make your choice and put either the\n" + "interface number (2 or something) or a part of your adapters\n" + "name, e.g. VIA here. This option is used for mode=\"pcap\""); diff --git a/jdosbox/src/main/java/jdos/cpu/CPU.java b/jdosbox/src/main/java/jdos/cpu/CPU.java index 2138dd47..884cd683 100644 --- a/jdosbox/src/main/java/jdos/cpu/CPU.java +++ b/jdosbox/src/main/java/jdos/cpu/CPU.java @@ -31,8 +31,8 @@ public class CPU extends Module_base { public static final int CPU_ARCHTYPE_PENTIUM=0x50; public static final int CPU_ARCHTYPE_PENTIUM_PRO=0x55; - public static interface CPU_Decoder { - public /*Bits*/int call(); + public interface CPU_Decoder { + /*Bits*/int call(); } public static final int CPU_INT_SOFTWARE=0x1; @@ -312,22 +312,22 @@ public int offset_16_31() { static private final int TSS_32_ldt_offset = 96; static public class Descriptor { - final public class Descriptor_union { - S_Descriptor seg = new S_Descriptor(); - G_Descriptor gate = new G_Descriptor(); - final public void setType(int type) { - seg.fill &= ~(0x1Fl << 40); + static final public class Descriptor_union { + final S_Descriptor seg = new S_Descriptor(); + final G_Descriptor gate = new G_Descriptor(); + public void setType(int type) { + seg.fill &= ~(0x1FL << 40); seg.fill |= ((long)type << 40); gate.fill = seg.fill; } - final public int getType() { + public int getType() { return (int)((seg.fill >> 40) & 0x1F); } - final public void fill(long l) { + public void fill(long l) { seg.fill = l; gate.fill = l; } - final public int get_fill(int index) { + public int get_fill(int index) { if (index == 0) { return (int)seg.fill; } else { @@ -337,7 +337,7 @@ final public int get_fill(int index) { } final public void Load(/*PhysPt*/int address) { cpu.mpl=0; - saved.fill((Memory.mem_readd(address) & 0xFFFFFFFFl) | (long)Memory.mem_readd(address + 4) << 32); + saved.fill((Memory.mem_readd(address) & 0xFFFFFFFFL) | (long)Memory.mem_readd(address + 4) << 32); cpu.mpl=3; } @@ -352,7 +352,7 @@ final public void Save(/*PhysPt*/int address) { return (saved.seg.base_24_31()<<24) | (saved.seg.base_16_23()<<16) | saved.seg.base_0_15(); } final public /*Bitu*/long GetLimit () { - /*Bitu*/long limit = (saved.seg.limit_16_19()<<16) | saved.seg.limit_0_15(); + /*Bitu*/long limit = ((long) saved.seg.limit_16_19() <<16) | saved.seg.limit_0_15(); if (saved.seg.g() != 0) { limit = (limit<<12) | 0xFFF; } return limit; @@ -415,16 +415,14 @@ public boolean GetDescriptor(/*Bitu*/int selector, Descriptor desc) { return true; } } - public boolean SetDescriptor(/*Bitu*/int selector, Descriptor desc) { + public void SetDescriptor(/*Bitu*/int selector, Descriptor desc) { /*Bitu*/int address=selector & ~7; if ((selector & 4) != 0) { - if (address>=ldt_limit) return false; + if (address>=ldt_limit) return; desc.Save(ldt_base+address); - return true; } else { - if (address>=table_limit) return false; + if (address>=table_limit) return; desc.Save(table_base+address); - return true; } } public /*Bitu*/int SLDT() { @@ -453,13 +451,13 @@ public boolean LLDT(/*Bitu*/int value) { } final private static class TSS_Descriptor extends Descriptor { - final public /*Bitu*/int IsBusy() { + public /*Bitu*/int IsBusy() { return saved.seg.type() & 2; } - final public /*Bitu*/int Is386() { + public /*Bitu*/int Is386() { return saved.seg.type() & 8; } - final void SetBusy(boolean busy) { + void SetBusy(boolean busy) { if (busy) { saved.setType(saved.getType()|2); } else { @@ -476,22 +474,22 @@ final static public class CPUBlock { public boolean pmode; /* Is Protected mode enabled */ final public GDTDescriptorTable gdt = new GDTDescriptorTable(); final public DescriptorTable idt = new DescriptorTable(); - final public class Stack { + static final public class Stack { public /*Bitu*/int mask, notmask; public boolean big; } final public Stack stack = new Stack(); - final public class Code { + static final public class Code { public boolean big; } final public Code code = new Code(); - final public class Hlt { + static final public class Hlt { public /*Bitu*/int cs; public int eip; public CPU_Decoder old_decoder; } final public Hlt hlt = new Hlt(); - final public class Exception { + static final public class Exception { public /*Bitu*/int which, error; } final public Exception exception = new Exception(); @@ -676,7 +674,7 @@ static public boolean CPU_PUSHF(/*Bitu*/boolean use32) { return false; } - static Descriptor desc_temp_1 = new Descriptor(); + static final Descriptor desc_temp_1 = new Descriptor(); static private void CPU_CheckSegments() { boolean needs_invalidation=false; @@ -725,19 +723,19 @@ final static private class TaskStateSegment { public TaskStateSegment() { valid=false; } - final public boolean IsValid() { + public boolean IsValid() { return valid; } - final /*Bitu*/int Get_back() { + /*Bitu*/int Get_back() { cpu.mpl=0; /*Bit16u*/int backlink=Memory.mem_readw(base); cpu.mpl=3; return backlink; } - final void SaveSelector() { + void SaveSelector() { cpu.gdt.SetDescriptor(selector,desc); } - final void Get_SSx_ESPx( /*Bitu*/int level, /*Bitu*/IntRef _ss, /*Bitu*/IntRef _esp) { + void Get_SSx_ESPx( /*Bitu*/int level, /*Bitu*/IntRef _ss, /*Bitu*/IntRef _esp) { cpu.mpl=0; if (is386 != 0) { /*PhysPt*/int where=base+TSS_32_esp0_offset+level*8; @@ -750,7 +748,7 @@ final void Get_SSx_ESPx( /*Bitu*/int level, /*Bitu*/IntRef _ss, /*Bitu*/IntRef _ } cpu.mpl=3; } - final boolean SetSelector( /*Bitu*/int new_sel) { + boolean SetSelector( /*Bitu*/int new_sel) { valid=false; if ((new_sel & 0xfffc)==0) { selector=0; @@ -776,7 +774,7 @@ final boolean SetSelector( /*Bitu*/int new_sel) { is386=desc.Is386(); return true; } - TSS_Descriptor desc = new TSS_Descriptor(); + final TSS_Descriptor desc = new TSS_Descriptor(); /*Bitu*/int selector; /*PhysPt*/int base; /*Bitu*/long limit; @@ -794,7 +792,7 @@ static final class TSwitchType { static private final TaskStateSegment new_tss_temp=new TaskStateSegment(); static private final Descriptor cs_desc_temp = new Descriptor(); - static private boolean CPU_SwitchTask( /*Bitu*/int new_tss_selector,int tstype, /*Bitu*/int old_eip) { + static private void CPU_SwitchTask( /*Bitu*/int new_tss_selector, int tstype, /*Bitu*/int old_eip) { Flags.FillFlags(); if (!new_tss_temp.SetSelector(new_tss_selector)) @@ -930,7 +928,7 @@ static private boolean CPU_SwitchTask( /*Bitu*/int new_tss_selector,int tstype, } /* Load the new selectors */ if ((CPU_Regs.flags & CPU_Regs.VM) != 0) { - CPU_Regs.SegSet16CS((int)new_cs); + CPU_Regs.SegSet16CS(new_cs); cpu.code.big=false; CPU_SetCPL(3); //We don't have segment caches so this will do } else { @@ -938,8 +936,8 @@ static private boolean CPU_SwitchTask( /*Bitu*/int new_tss_selector,int tstype, if (new_ldt!=0) CPU_LLDT(new_ldt); /* Load the new CS*/ - CPU_SetCPL((int)(new_cs & 3)); - if (!cpu.gdt.GetDescriptor((int)new_cs,cs_desc_temp)) + CPU_SetCPL(new_cs & 3); + if (!cpu.gdt.GetDescriptor(new_cs,cs_desc_temp)) Log.exit("Task switch with CS beyond limits"); if (cs_desc_temp.saved.seg.p()==0) Log.exit("Task switch with non present code-segment"); @@ -964,18 +962,17 @@ static private boolean CPU_SwitchTask( /*Bitu*/int new_tss_selector,int tstype, Log.exit("Task switch CS Type "+cs_desc_temp.Type()); } } - CPU_SetSegGeneralES((int)new_es); - CPU_SetSegGeneralSS((int)new_ss); - CPU_SetSegGeneralDS((int)new_ds); - CPU_SetSegGeneralFS((int)new_fs); - CPU_SetSegGeneralGS((int)new_gs); + CPU_SetSegGeneralES(new_es); + CPU_SetSegGeneralSS(new_ss); + CPU_SetSegGeneralDS(new_ds); + CPU_SetSegGeneralFS(new_fs); + CPU_SetSegGeneralGS(new_gs); if (!cpu_tss.SetSelector(new_tss_selector)) { if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_NORMAL, "TaskSwitch: set tss selector "+Integer.toString(new_tss_selector, 16)+" failed"); } // cpu_tss.desc.SetBusy(true); // cpu_tss.SaveSelector(); // LOG_MSG("Task CPL %X CS:%X IP:%X SS:%X SP:%X eflags %x",cpu.cpl,SegValue(cs),reg_eip,SegValue(ss),reg_esp,reg_flags); - return true; } static boolean doexception(int port) { @@ -1157,7 +1154,7 @@ static private void CPU_Interrupt(/*Bitu*/int num, /*Bitu*/int type, /*Bitu*/int cpu.stack.big=false; cpu.stack.mask=0xffff; cpu.stack.notmask=0xffff0000; - CPU_Regs.reg_esp.word((int)(n_esp_1.value & 0xffff)); + CPU_Regs.reg_esp.word(n_esp_1.value & 0xffff); } CPU_SetCPL(cs_dpl); @@ -1470,7 +1467,7 @@ static public void CPU_IRET(boolean use32, /*Bitu*/int oldeip) { cpu.stack.big=false; cpu.stack.mask=0xffff; cpu.stack.notmask=0xffff0000; - CPU_Regs.reg_esp.word((int)(n_esp & 0xffffl)); + CPU_Regs.reg_esp.word((int)(n_esp & 0xffffL)); } // borland extender, zrdx @@ -1721,7 +1718,7 @@ public static void CPU_CALL(boolean use32, /*Bitu*/int selector, /*Bitu*/int off cpu.stack.big=false; cpu.stack.mask=0xffff; cpu.stack.notmask=0xffff0000; - CPU_Regs.reg_esp.word((int)(n_esp_4.value & 0xffffl)); + CPU_Regs.reg_esp.word((int)(n_esp_4.value & 0xffffL)); } CPU_SetCPL(n_cs_desc_4.DPL()); @@ -2101,7 +2098,7 @@ static public void CPU_SET_CRX( /*Bitu*/int cr, /*Bitu*/int value) { Main.GFX_SetTitle(CPU_CyclePercUsed,-1,false); if(!printed_cycles_auto_info) { printed_cycles_auto_info = true; - Log.log_msg("DOSBox switched to max cycles, because of the setting: cycles=auto. If the game runs too fast try a fixed cycles amount in DOSBox's options."); + System.out.println("DOSBox switched to max cycles, because of the setting: cycles=auto. If the game runs too fast try a fixed cycles amount in DOSBox's options."); } } else { Main.GFX_SetTitle(-1,-1,false); @@ -2115,7 +2112,7 @@ static public void CPU_SET_CRX( /*Bitu*/int cr, /*Bitu*/int value) { CPU_AutoDetermineMode<<=CPU_AUTODETERMINE_SHIFT; } else { cpu.pmode=false; - if ((value & CR0_PAGING)!=0) Log.log_msg("Paging requested without PE=1"); + if ((value & CR0_PAGING)!=0) System.out.println("Paging requested without PE=1"); Paging.PAGING_Enable(false); if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"Real mode"); } @@ -2290,7 +2287,7 @@ public static boolean CPU_LMSW( /*Bitu*/int word) { if (cpu.pmode && (cpu.cpl>0)) return CPU_PrepareException(EXCEPTION_GP,0); word&=0xf; if ((cpu.cr0 & 1)!=0) word|=1; - word|=(cpu.cr0&0xfffffff0l); + word|= (int) (cpu.cr0& 0xfffffff0L); CPU_SET_CRX(0,word); return false; } @@ -2911,54 +2908,50 @@ static public void CPU_ENTER(boolean use32, /*Bitu*/int bytes, /*Bitu*/int level CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & cpu.stack.notmask)|(sp_index & cpu.stack.mask); } - final static private Mapper.MAPPER_Handler CPU_CycleIncrease = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (!pressed) return; - if (CPU_CycleAutoAdjust) { - CPU_CyclePercUsed+=5; - if (CPU_CyclePercUsed>105) CPU_CyclePercUsed=105; - Log.log_msg("CPU speed: max "+CPU_CyclePercUsed+" percent."); - Main.GFX_SetTitle(CPU_CyclePercUsed,-1,false); + final static private Mapper.MAPPER_Handler CPU_CycleIncrease = pressed -> { + if (!pressed) return; + if (CPU_CycleAutoAdjust) { + CPU_CyclePercUsed+=5; + if (CPU_CyclePercUsed>105) CPU_CyclePercUsed=105; + System.out.println("CPU speed: max "+CPU_CyclePercUsed+" percent."); + Main.GFX_SetTitle(CPU_CyclePercUsed,-1,false); + } else { + /*Bit32s*/int old_cycles=CPU_CycleMax; + if (CPU_CycleUp < 100) { + CPU_CycleMax = (/*Bit32s*/int)(CPU_CycleMax * (1 + (float)CPU_CycleUp / 100.0)); } else { - /*Bit32s*/int old_cycles=CPU_CycleMax; - if (CPU_CycleUp < 100) { - CPU_CycleMax = (/*Bit32s*/int)(CPU_CycleMax * (1 + (float)CPU_CycleUp / 100.0)); - } else { - CPU_CycleMax = (CPU_CycleMax + CPU_CycleUp); - } - - CPU_CycleLeft=0;CPU_Cycles=0; - if (CPU_CycleMax==old_cycles) CPU_CycleMax++; - if(CPU_CycleMax > 15000 ) - Log.log_msg("CPU speed: fixed "+CPU_CycleMax+" cycles. If you need more than 20000, try core=dynamic in DOSBox's options."); - else - Log.log_msg("CPU speed: fixed "+CPU_CycleMax+" cycles."); - Main.GFX_SetTitle(CPU_CycleMax,-1,false); + CPU_CycleMax = (CPU_CycleMax + CPU_CycleUp); } + + CPU_CycleLeft=0;CPU_Cycles=0; + if (CPU_CycleMax==old_cycles) CPU_CycleMax++; + if(CPU_CycleMax > 15000 ) + System.out.println("CPU speed: fixed "+CPU_CycleMax+" cycles. If you need more than 20000, try core=dynamic in DOSBox's options."); + else + System.out.println("CPU speed: fixed "+CPU_CycleMax+" cycles."); + Main.GFX_SetTitle(CPU_CycleMax,-1,false); } }; - final static private Mapper.MAPPER_Handler CPU_CycleDecrease = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (!pressed) return; - if (CPU_CycleAutoAdjust) { - CPU_CyclePercUsed-=5; - if (CPU_CyclePercUsed<=0) CPU_CyclePercUsed=1; - if(CPU_CyclePercUsed <=70) - Log.log_msg("CPU speed: max "+CPU_CyclePercUsed+" percent. If the game runs too fast, try a fixed cycles amount in DOSBox's options."); - else - Log.log_msg("CPU speed: max "+CPU_CyclePercUsed+" percent."); - Main.GFX_SetTitle(CPU_CyclePercUsed,-1,false); + final static private Mapper.MAPPER_Handler CPU_CycleDecrease = pressed -> { + if (!pressed) return; + if (CPU_CycleAutoAdjust) { + CPU_CyclePercUsed-=5; + if (CPU_CyclePercUsed<=0) CPU_CyclePercUsed=1; + if(CPU_CyclePercUsed <=70) + System.out.println("CPU speed: max "+CPU_CyclePercUsed+" percent. If the game runs too fast, try a fixed cycles amount in DOSBox's options."); + else + System.out.println("CPU speed: max "+CPU_CyclePercUsed+" percent."); + Main.GFX_SetTitle(CPU_CyclePercUsed,-1,false); + } else { + if (CPU_CycleDown < 100) { + CPU_CycleMax = (/*Bit32s*/int)(CPU_CycleMax / (1 + (float)CPU_CycleDown / 100.0)); } else { - if (CPU_CycleDown < 100) { - CPU_CycleMax = (/*Bit32s*/int)(CPU_CycleMax / (1 + (float)CPU_CycleDown / 100.0)); - } else { - CPU_CycleMax = (CPU_CycleMax - CPU_CycleDown); - } - CPU_CycleLeft=0;CPU_Cycles=0; - if (CPU_CycleMax <= 0) CPU_CycleMax=1; - Log.log_msg("CPU speed: fixed "+CPU_CycleMax+" cycles."); - Main.GFX_SetTitle(CPU_CycleMax,-1,false); + CPU_CycleMax = (CPU_CycleMax - CPU_CycleDown); } + CPU_CycleLeft=0;CPU_Cycles=0; + if (CPU_CycleMax <= 0) CPU_CycleMax=1; + System.out.println("CPU speed: fixed "+CPU_CycleMax+" cycles."); + Main.GFX_SetTitle(CPU_CycleMax,-1,false); } }; @@ -2982,20 +2975,20 @@ void CPU_Reset_AutoAdjust() { Dosbox.ticksScheduled = 0; } - private static Hashtable msrs = new Hashtable(); + private static final Hashtable msrs = new Hashtable<>(); public static long readMSR(int index) { - Integer i = new Integer(index); + Integer i = index; Long result = msrs.get(i); if (result != null) { - return result.longValue(); + return result; } return 0; } public static void writeMSR(int index, long value) { - Integer i = new Integer(index); - msrs.put(i, new Long(value)); + Integer i = index; + msrs.put(i, value); } private static boolean inited = false; static public void initialize() { @@ -3081,6 +3074,7 @@ public boolean Change_Config(Section newconfig){ int percval=Integer.parseInt(str.substring(0, str.length()-1)); if ((percval>0) && (percval<=105)) CPU_CyclePercUsed=percval; } catch (Exception e) { + throw new RuntimeException(e); } } else if (str.equals("limit")) { cmdnum++; @@ -3089,6 +3083,7 @@ public boolean Change_Config(Section newconfig){ int cyclimit=Integer.parseInt(str); if (cyclimit>0) CPU_CycleLimit=cyclimit; } catch (Exception e) { + throw new RuntimeException(e); } } } @@ -3107,6 +3102,7 @@ public boolean Change_Config(Section newconfig){ int percval=Integer.parseInt(str.substring(0, str.length()-1)); if ((percval>0) && (percval<=105)) CPU_CyclePercUsed=percval; } catch (Exception e) { + throw new RuntimeException(e); } } else if (str.equals("limit")) { cmdnum++; @@ -3115,6 +3111,7 @@ public boolean Change_Config(Section newconfig){ int cyclimit=Integer.parseInt(str); if (cyclimit>0) CPU_CycleLimit=cyclimit; } catch (Exception e) { + throw new RuntimeException(e); } } } else { @@ -3125,19 +3122,23 @@ public boolean Change_Config(Section newconfig){ CPU_OldCycleMax=rmdval; } } catch (Exception e) { + throw new RuntimeException(e); } } } } } else if(type.equals("fixed")) { str = cmd.FindCommand(1); - try {CPU_CycleMax=Integer.parseInt(str);} catch (Exception e){} + try {CPU_CycleMax=Integer.parseInt(str);} catch (Exception e) { + throw new RuntimeException(e); + } } else { - int rmdval=0; + int rmdval; try { rmdval = Integer.parseInt(type); if(rmdval!=0) CPU_CycleMax=rmdval; } catch (Exception e) { + throw new RuntimeException(e); } } CPU_CycleAutoAdjust=false; @@ -3166,40 +3167,48 @@ public boolean Change_Config(Section newconfig){ CPU_ArchitectureType = CPU_ARCHTYPE_MIXED; String cputype = section.Get_string("cputype"); - if (cputype.equals("auto")) { - CPU_ArchitectureType = CPU_ARCHTYPE_MIXED; - } else if (cputype.equals("386")) { - CPU_ArchitectureType = CPU_ARCHTYPE_386; - } else if (cputype.equals("386_prefetch")) { - CPU_ArchitectureType = CPU_ARCHTYPE_386; - if (core.equals("normal")) { - cpudecoder=Core_prefetch.CPU_Core_Prefetch_Run; - CPU_PrefetchQueueSize = 16; - } else if (core.equals("auto")) { - cpudecoder=Core_prefetch.CPU_Core_Prefetch_Run; - CPU_PrefetchQueueSize = 16; - CPU_AutoDetermineMode&=(~CPU_AUTODETERMINE_CORE); - } else { - Log.exit("prefetch queue emulation requires the normal core setting."); - } - } else if (cputype.equals("486")) { - CPU_ArchitectureType = CPU_ARCHTYPE_486NEW; - } else if (cputype.equals("486_prefetch")) { - CPU_ArchitectureType = CPU_ARCHTYPE_486NEW; - if (core.equals("normal")) { - cpudecoder=Core_prefetch.CPU_Core_Prefetch_Run; - CPU_PrefetchQueueSize = 32; - } else if (core.equals("auto")) { - cpudecoder=Core_prefetch.CPU_Core_Prefetch_Run; - CPU_PrefetchQueueSize = 32; - CPU_AutoDetermineMode&=(~CPU_AUTODETERMINE_CORE); - } else { - Log.exit("prefetch queue emulation requires the normal core setting."); - } - } else if (cputype.equals("pentium")) { - CPU_ArchitectureType = CPU_ARCHTYPE_PENTIUM; - } else if (cputype.equals("p6")) { - CPU_ArchitectureType = CPU_ARCHTYPE_PENTIUM_PRO; + switch (cputype) { + case "auto": + CPU_ArchitectureType = CPU_ARCHTYPE_MIXED; + break; + case "386": + CPU_ArchitectureType = CPU_ARCHTYPE_386; + break; + case "386_prefetch": + CPU_ArchitectureType = CPU_ARCHTYPE_386; + if (core.equals("normal")) { + cpudecoder = Core_prefetch.CPU_Core_Prefetch_Run; + CPU_PrefetchQueueSize = 16; + } else if (core.equals("auto")) { + cpudecoder = Core_prefetch.CPU_Core_Prefetch_Run; + CPU_PrefetchQueueSize = 16; + CPU_AutoDetermineMode &= (~CPU_AUTODETERMINE_CORE); + } else { + Log.exit("prefetch queue emulation requires the normal core setting."); + } + break; + case "486": + CPU_ArchitectureType = CPU_ARCHTYPE_486NEW; + break; + case "486_prefetch": + CPU_ArchitectureType = CPU_ARCHTYPE_486NEW; + if (core.equals("normal")) { + cpudecoder = Core_prefetch.CPU_Core_Prefetch_Run; + CPU_PrefetchQueueSize = 32; + } else if (core.equals("auto")) { + cpudecoder = Core_prefetch.CPU_Core_Prefetch_Run; + CPU_PrefetchQueueSize = 32; + CPU_AutoDetermineMode &= (~CPU_AUTODETERMINE_CORE); + } else { + Log.exit("prefetch queue emulation requires the normal core setting."); + } + break; + case "pentium": + CPU_ArchitectureType = CPU_ARCHTYPE_PENTIUM; + break; + case "p6": + CPU_ArchitectureType = CPU_ARCHTYPE_PENTIUM_PRO; + break; } if (CPU_ArchitectureType>=CPU_ARCHTYPE_486NEW) CPU_extflags_toggle=(CPU_Regs.ID|CPU_Regs.AC); diff --git a/jdosbox/src/main/java/jdos/cpu/CPU_Regs.java b/jdosbox/src/main/java/jdos/cpu/CPU_Regs.java index f2b79105..8dbc3d2a 100644 --- a/jdosbox/src/main/java/jdos/cpu/CPU_Regs.java +++ b/jdosbox/src/main/java/jdos/cpu/CPU_Regs.java @@ -126,13 +126,13 @@ public Reg(String name) { this.name = name; this.fullName32 = "CPU_Regs.reg_"+name+".dword"; this.name16 = name.substring(1); - this.name8 = this.name16.substring(0, 1)+"l"; + this.name8 = this.name16.charAt(0)+"l"; } public Reg(Reg parent) { this.parent = parent; this.name = parent.name; - this.name8 = parent.name16.substring(0, 1)+"h"; + this.name8 = parent.name16.charAt(0)+"h"; this.name16 = parent.name16; } @@ -164,29 +164,29 @@ public int get8() { else return parent.high(); } - final public void dword(long l) { + public void dword(long l) { dword = (int)l; } - final public void word_dec() { + public void word_dec() { word(word()-1); } - final public int word() { + public int word() { return dword & 0xFFFF; } - final public void word(int value) { + public void word(int value) { dword = (value & 0xFFFF) | (dword & 0xFFFF0000); } - final public int low() { + public int low() { return dword & 0xff; } - final public void low(int value) { + public void low(int value) { dword = (value & 0xFF) | (dword & 0xFFFFFF00); } - final public int high() { + public int high() { return (dword >> 8) & 0xff; } - final public void high(int value) { + public void high(int value) { dword = ((value & 0xFF) << 8) | (dword & 0xFFFF00FF); } public int dword; diff --git a/jdosbox/src/main/java/jdos/cpu/Callback.java b/jdosbox/src/main/java/jdos/cpu/Callback.java index 5598fd39..a8916747 100644 --- a/jdosbox/src/main/java/jdos/cpu/Callback.java +++ b/jdosbox/src/main/java/jdos/cpu/Callback.java @@ -9,9 +9,9 @@ public class Callback { static public int inHandler=0; - static public interface Handler { - public /*Bitu*/int call(); - public String getName(); + public interface Handler { + /*Bitu*/int call(); + String getName(); } static public final int CB_RETN=0; @@ -46,7 +46,7 @@ static public interface Handler { static public final int CBRET_STOP=1; static public Handler[] CallBack_Handlers = new Handler[CB_MAX]; - static public String[] CallBack_Description = new String[CB_MAX]; + static public final String[] CallBack_Description = new String[CB_MAX]; public static /*RealPt*/int CALLBACK_RealPointer(/*Bitu*/int callback) { return Memory.RealMake(CB_SEG,(CB_SOFFSET+callback*CB_SIZE)); @@ -78,7 +78,7 @@ private static void CALLBACK_DeAllocate(/*Bitu*/int in) { CallBack_Handlers[in]=illegal_handler; } - private static Handler illegal_handler = new Handler() { + private static final Handler illegal_handler = new Handler() { public /*Bitu*/int call() { Log.exit("Illegal CallBack Called"); return 1; @@ -109,16 +109,16 @@ public static void CALLBACK_Idle() { private static final int SETUP = 1; private static final int SETUPAT = 2; private int m_type = NONE; - private class VectorHandler { + private static class VectorHandler { /*RealPt*/int old_vector; /*Bit8u*/ int interrupt; boolean installed = false; } - private VectorHandler vectorhandler = new VectorHandler(); + private final VectorHandler vectorhandler = new VectorHandler(); public Callback() { } - static private Handler default_handler = new Handler() { + static private final Handler default_handler = new Handler() { public /*Bitu*/int call() { if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"Illegal Unhandled Interrupt Called "+Integer.toString(CPU.lastint,16)); return CBRET_NONE; @@ -128,7 +128,7 @@ public String getName() { } }; - static private Handler stop_handler = new Handler() { + static private final Handler stop_handler = new Handler() { public /*Bitu*/int call() { return CBRET_STOP; } @@ -194,7 +194,7 @@ public static String CALLBACK_GetDescription(/*Bitu*/int nr) { return CALLBACK_SetupExtra(callback, type, lphysAddress, true); } public static /*Bitu*/int CALLBACK_SetupExtra(/*Bitu*/int callback, /*Bitu*/int type, /*PhysPt*/int lphysAddress, boolean use_cb/*=true*/) { - int physAddress = (int)lphysAddress; + int physAddress = lphysAddress; if (callback>=CB_MAX) return 0; switch (type) { @@ -505,12 +505,11 @@ public static String CALLBACK_GetDescription(/*Bitu*/int nr) { return 0; } - public static boolean CALLBACK_Setup(/*Bitu*/int callback,Handler handler,/*Bitu*/int type,String descr) { - if (callback>=CB_MAX) return false; - CALLBACK_SetupExtra(callback,type,CALLBACK_PhysPointer(callback)+0,(handler!=null)); + public static void CALLBACK_Setup(/*Bitu*/int callback, Handler handler,/*Bitu*/int type, String descr) { + if (callback>=CB_MAX) return; + CALLBACK_SetupExtra(callback,type, CALLBACK_PhysPointer(callback),(handler!=null)); CallBack_Handlers[callback]=handler; CALLBACK_SetDescription(callback,descr); - return true; } public static /*Bitu*/int CALLBACK_Setup(/*Bitu*/int callback,Handler handler,/*Bitu*/int type,/*PhysPt*/int addr,String descr) { @@ -525,7 +524,7 @@ public static boolean CALLBACK_Setup(/*Bitu*/int callback,Handler handler,/*Bitu public static void CALLBACK_RemoveSetup(/*Bitu*/int callback) { for (/*Bitu*/int i = 0;i < CB_SIZE;i++) { - Memory.phys_writeb((int)(CALLBACK_PhysPointer(callback)+i),0x00); + Memory.phys_writeb(CALLBACK_PhysPointer(callback)+i,0x00); } } @@ -594,7 +593,7 @@ public void Set_RealVec(/*Bit8u*/int vec){ } else Log.exit ("double usage of vector handler"); } - public static Section.SectionFunction CALLBACK_Init = new Section.SectionFunction() { + public static final Section.SectionFunction CALLBACK_Init = new Section.SectionFunction() { public void call(Section section) { /*Bitu*/int i; for (i=0;i Core_normal.CPU_Core_Normal_Run.call(); public static void CPU_Core_Full_Init() { diff --git a/jdosbox/src/main/java/jdos/cpu/Core_normal.java b/jdosbox/src/main/java/jdos/cpu/Core_normal.java index 1c696c01..d9b486bd 100644 --- a/jdosbox/src/main/java/jdos/cpu/Core_normal.java +++ b/jdosbox/src/main/java/jdos/cpu/Core_normal.java @@ -6,7 +6,6 @@ import jdos.misc.setup.Config; import jdos.types.LogSeverities; import jdos.types.LogTypes; -import jdos.util.Record; public class Core_normal extends Prefix_66_0f { public static boolean log = false; @@ -65,25 +64,25 @@ public static void loadState(State state) { }; public static int count=1; - public static CPU.CPU_Decoder CPU_Core_Normal_Run = new CPU.CPU_Decoder() { - public /*Bits*/int call() { - //System.out.println("CPU_Core_Normal_Run"); - while (CPU.CPU_Cycles-->0) { - // inlined - //LOADIP(); - cseip=CPU_Regs.reg_csPhys.dword+CPU_Regs.reg_eip; - if (CPU.cpu.code.big) { - opcode_index=0x200; - prefixes=1; - EA16 = false; - } else { - opcode_index=0; - prefixes=0; - EA16 = true; - } - base_ds=CPU_Regs.reg_dsPhys.dword; - base_ss=CPU_Regs.reg_ssPhys.dword; - base_val_ds=ds; + /*Bits*/ + public static final CPU.CPU_Decoder CPU_Core_Normal_Run = () -> { + //System.out.println("CPU_Core_Normal_Run"); + while (CPU.CPU_Cycles-->0) { + // inlined + //LOADIP(); + cseip=CPU_Regs.reg_csPhys.dword+CPU_Regs.reg_eip; + if (CPU.cpu.code.big) { + opcode_index=0x200; + prefixes=1; + EA16 = false; + } else { + opcode_index=0; + prefixes=0; + EA16 = true; + } + base_ds=CPU_Regs.reg_dsPhys.dword; + base_ss=CPU_Regs.reg_ssPhys.dword; + base_val_ds=ds; // if (Config.C_DEBUG) { // if (Config.C_HEAVY_DEBUG) { // if (Debug.DEBUG_HeavyIsBreakpoint()) { @@ -93,15 +92,15 @@ public static void loadState(State state) { // } // Debug.cycle_count++; // } - //restart_opcode: - while (true) { - int c = opcode_index+Fetchb(); - if ((prefixes & PREFIX_LOCK)!=0) { - if (Core.isInvalidLock(c & ~0x200)) { - CPU.CPU_Exception(6,0); - } - prefixes&=~PREFIX_LOCK;// only check the prefix once + //restart_opcode: + while (true) { + int c = opcode_index+Fetchb(); + if ((prefixes & PREFIX_LOCK)!=0) { + if (Core.isInvalidLock(c & ~0x200)) { + CPU.CPU_Exception(6,0); } + prefixes&=~PREFIX_LOCK;// only check the prefix once + } // last = c; // if (Config.DEBUG_LOG) // Debug.start(Debug.TYPE_CPU, c); @@ -114,65 +113,63 @@ public static void loadState(State state) { // int ii = 0; // } // } - int result = ops[c].call(); - if (result != HANDLED) { - if (result == CONTINUE) { - break; - } else if (result == RETURN) { - return returnValue; - } else if (result == RESTART) { - continue; - } else if (result == CBRET_NONE) { - return Callback.CBRET_NONE; - } else if (result == DECODE_END) { - SAVEIP(); - Flags.FillFlags(); - return Callback.CBRET_NONE; - } else if (result == NOT_HANDLED || result == ILLEGAL_OPCODE) { - if (Config.C_DEBUG) - { - /*Bitu*/int len=GETIP()-reg_eip; - LOADIP(); - if (len>16) len=16; - StringBuffer tempcode=new StringBuffer(); - for (;len>0;len--) { - tempcode.append(Integer.toHexString(Memory.mem_readb(cseip++))); - } + int result = ops[c].call(); + if (result != HANDLED) { + if (result == CONTINUE) { + break; + } else if (result == RETURN) { + return returnValue; + } else if (result == RESTART) { + continue; + } else if (result == CBRET_NONE) { + return Callback.CBRET_NONE; + } else if (result == DECODE_END) { + SAVEIP(); + Flags.FillFlags(); + return Callback.CBRET_NONE; + } else if (result == NOT_HANDLED || result == ILLEGAL_OPCODE) { + if (Config.C_DEBUG) + { + /*Bitu*/int len=GETIP()-reg_eip; + LOADIP(); + if (len>16) len=16; + StringBuilder tempcode=new StringBuilder(); + for (;len>0;len--) { + tempcode.append(Integer.toHexString(Memory.mem_readb(cseip++))); } - if (Log.level<=LogSeverities.LOG_NORMAL) - Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_NORMAL,"Illegal/Unhandled opcode "+Integer.toHexString(c)); - CPU.CPU_Exception(6,0); - break; } + if (Log.level<=LogSeverities.LOG_NORMAL) + Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_NORMAL,"Illegal/Unhandled opcode "+Integer.toHexString(c)); + CPU.CPU_Exception(6,0); + break; } + } // } finally { // if (Config.DEBUG_LOG) // Debug.stop(Debug.TYPE_CPU, c); // } - // inlined - // SAVEIP(); - CPU_Regs.reg_eip=cseip- CPU_Regs.reg_csPhys.dword; - break; - } + // inlined + // SAVEIP(); + CPU_Regs.reg_eip=cseip- CPU_Regs.reg_csPhys.dword; + break; } - Flags.FillFlags(); - return Callback.CBRET_NONE; } + Flags.FillFlags(); + return Callback.CBRET_NONE; }; - public static CPU.CPU_Decoder CPU_Core_Normal_Trap_Run = new CPU.CPU_Decoder() { - public /*Bits*/int call() { - /*Bits*/int oldCycles = CPU.CPU_Cycles; - CPU.CPU_Cycles = 1; - CPU.cpu.trap_skip = false; + /*Bits*/ + public static final CPU.CPU_Decoder CPU_Core_Normal_Trap_Run = () -> { + /*Bits*/int oldCycles = CPU.CPU_Cycles; + CPU.CPU_Cycles = 1; + CPU.cpu.trap_skip = false; - /*Bits*/int ret=CPU_Core_Normal_Run.call(); - if (!CPU.cpu.trap_skip) CPU.CPU_HW_Interrupt(1); - CPU.CPU_Cycles = oldCycles-1; - CPU.cpudecoder = CPU_Core_Normal_Run; - return ret; - } + /*Bits*/int ret=CPU_Core_Normal_Run.call(); + if (!CPU.cpu.trap_skip) CPU.CPU_HW_Interrupt(1); + CPU.CPU_Cycles = oldCycles-1; + CPU.cpudecoder = CPU_Core_Normal_Run; + return ret; }; public static void CPU_Core_Normal_Init() { diff --git a/jdosbox/src/main/java/jdos/cpu/Core_prefetch.java b/jdosbox/src/main/java/jdos/cpu/Core_prefetch.java index 461d5071..153f51b6 100644 --- a/jdosbox/src/main/java/jdos/cpu/Core_prefetch.java +++ b/jdosbox/src/main/java/jdos/cpu/Core_prefetch.java @@ -1,9 +1,6 @@ package jdos.cpu; public class Core_prefetch { - public static CPU.CPU_Decoder CPU_Core_Prefetch_Run = new CPU.CPU_Decoder() { - public /*Bits*/int call() { - return 0; - } - }; + /*Bits*/ + public static final CPU.CPU_Decoder CPU_Core_Prefetch_Run = () -> 0; } diff --git a/jdosbox/src/main/java/jdos/cpu/Core_switch.java b/jdosbox/src/main/java/jdos/cpu/Core_switch.java index ee1eaeb6..47d7066e 100644 --- a/jdosbox/src/main/java/jdos/cpu/Core_switch.java +++ b/jdosbox/src/main/java/jdos/cpu/Core_switch.java @@ -19,7 +19,6 @@ import jdos.hardware.IO; import jdos.hardware.Memory; import jdos.hardware.Pic; -import jdos.util.Record; public class Core_switch extends CPU_Regs { static public final int CACHE_MAXSIZE = 4096*2; @@ -68,7 +67,7 @@ static public void CPU_Core_Switch_Cache_Close() { }; private static CacheBlockDynRec LinkBlocks(CacheBlockDynRec running, /*BlockReturn*/int ret) { - CacheBlockDynRec block=null; + CacheBlockDynRec block; // the last instruction was a control flow modifying instruction /*Bitu*/int temp_ip=CPU_Regs.reg_csPhys.dword+reg_eip; Paging.PageHandler handler = Paging.get_tlb_readhandler(temp_ip); @@ -76,7 +75,7 @@ private static CacheBlockDynRec LinkBlocks(CacheBlockDynRec running, /*BlockRetu CodePageHandlerDynRec temp_handler=(CodePageHandlerDynRec)handler; if ((temp_handler.flags & Paging.PFLAG_HASCODE)!=0) { // see if the target is an already translated block - block=temp_handler.FindCacheBlock((int)(temp_ip & 4095)); + block=temp_handler.FindCacheBlock(temp_ip & 4095); if (block==null) return null; // found it, link the current block to @@ -155,7 +154,7 @@ private static CacheBlockDynRec jump16(CacheBlockDynRec block, boolean COND, int } private static CacheBlockDynRec jump32(CacheBlockDynRec block, boolean COND, int offset, int eip_count) { if (COND) { - reg_eip+=+offset+eip_count; + reg_eip+= offset +eip_count; CacheBlockDynRec next = block.link1.to; if (next == null) @@ -176,57 +175,57 @@ private static CacheBlockDynRec jump32(CacheBlockDynRec block, boolean COND, int } public static int count=1; - public static final CPU.CPU_Decoder CPU_Core_Switch_Run = new CPU.CPU_Decoder() { - public /*Bits*/int call() { - while (CPU.CPU_Cycles>0) { - // Determine the linear address of CS:EIP - /*PhysPt*/int ip_point=CPU_Regs.reg_csPhys.dword + reg_eip; - - Paging.PageHandler handler=Paging.get_tlb_readhandler(ip_point); - CodePageHandlerDynRec chandler=null; - int page_ip_point = ip_point & 4095; - - if (handler != null && handler instanceof CodePageHandlerDynRec) - chandler = (CodePageHandlerDynRec)handler; - if (chandler == null) { - // see if the current page is present and contains code - chandler = Decoder_basic.MakeCodePage(ip_point); - } - // page doesn't contain code or is special - if (chandler==null) - return Core_normal.CPU_Core_Normal_Run.call(); - - // find correct Dynamic Block to run - CacheBlockDynRec block=chandler.FindCacheBlock(page_ip_point); - if (block==null) { - // no block found, thus translate the instruction stream - // unless the instruction is known to be modified - if (chandler.invalidation_map==null || (chandler.invalidation_map.p[page_ip_point]<4)) { - // translate up to 32 instructions - block = Decoder.CreateCacheBlock(chandler, ip_point, instruction_count); - } else { - // let the normal core handle this instruction to avoid zero-sized blocks - /*Bitu*/int old_cycles=CPU.CPU_Cycles; - CPU.CPU_Cycles=1; - /*Bits*/int nc_retcode=Core_normal.CPU_Core_Normal_Run.call(); - if (nc_retcode==0) { - CPU.CPU_Cycles=old_cycles-1; - continue; - } - CPU.CPU_CycleLeft+=old_cycles; - return nc_retcode; + /*Bits*/ + public static final CPU.CPU_Decoder CPU_Core_Switch_Run = () -> { + while (CPU.CPU_Cycles>0) { + // Determine the linear address of CS:EIP + /*PhysPt*/int ip_point=CPU_Regs.reg_csPhys.dword + reg_eip; + + Paging.PageHandler handler=Paging.get_tlb_readhandler(ip_point); + CodePageHandlerDynRec chandler=null; + int page_ip_point = ip_point & 4095; + + if (handler instanceof CodePageHandlerDynRec) + chandler = (CodePageHandlerDynRec)handler; + if (chandler == null) { + // see if the current page is present and contains code + chandler = Decoder_basic.MakeCodePage(ip_point); + } + // page doesn't contain code or is special + if (chandler==null) + return Core_normal.CPU_Core_Normal_Run.call(); + + // find correct Dynamic Block to run + CacheBlockDynRec block=chandler.FindCacheBlock(page_ip_point); + if (block==null) { + // no block found, thus translate the instruction stream + // unless the instruction is known to be modified + if (chandler.invalidation_map==null || (chandler.invalidation_map.p[page_ip_point]<4)) { + // translate up to 32 instructions + block = Decoder.CreateCacheBlock(chandler, ip_point, instruction_count); + } else { + // let the normal core handle this instruction to avoid zero-sized blocks + /*Bitu*/int old_cycles=CPU.CPU_Cycles; + CPU.CPU_Cycles=1; + /*Bits*/int nc_retcode=Core_normal.CPU_Core_Normal_Run.call(); + if (nc_retcode==0) { + CPU.CPU_Cycles=old_cycles-1; + continue; } + CPU.CPU_CycleLeft+=old_cycles; + return nc_retcode; } + } - //run_block: - int eaa; - int tmp; - long tmpl; - int tmp2; - boolean cf; - while (block!=null && CPU.CPU_Cycles>0) { - CPU.CPU_Cycles-=block.inst.length; - for (SwitchBlock b : block.inst) { + //run_block: + int eaa; + int tmp; + long tmpl; + int tmp2; + boolean cf; + while (block!=null && CPU.CPU_Cycles>0) { + CPU.CPU_Cycles-=block.inst.length; + for (SwitchBlock b : block.inst) { // Record.op(b.opCode); // if (count>0) { // System.out.println(String.format("%d %06x:%08x %3s %-8s EAX=%08x ECX=%08x EDX=%08x EBX=%08x ESP=%08x EBP=%08x ESI=%08x EDI=%08x FLAGS=%04x", count, CPU_Regs.reg_csVal.dword, CPU_Regs.reg_eip, Integer.toHexString(b.opCode), (Core_normal.desc.length > b.opCode ? " " + Core_normal.desc[b.opCode] : ""), CPU_Regs.reg_eax.dword, CPU_Regs.reg_ecx.dword, CPU_Regs.reg_edx.dword, CPU_Regs.reg_ebx.dword, CPU_Regs.reg_esp.dword, CPU_Regs.reg_ebp.dword, CPU_Regs.reg_esi.dword, CPU_Regs.reg_edi.dword, CPU_Regs.flags)); @@ -236,950 +235,949 @@ private static CacheBlockDynRec jump32(CacheBlockDynRec block, boolean COND, int // } // } - switch (b.instruction) { - case ADD_R8: b.r1.set8(Instructions.ADDB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case ADD_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADDB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case ADD_R8_R8: b.r1.set8(Instructions.ADDB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case ADD_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADDB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case ADD_R8_E8: b.r1.set8(Instructions.ADDB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case ADD_R16: b.r1.word(Instructions.ADDW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case ADD_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADDW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case ADD_R16_R16: b.r1.word(Instructions.ADDW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case ADD_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADDW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case ADD_R16_E16: b.r1.word(Instructions.ADDW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case ADD_R32: b.r1.dword=Instructions.ADDD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case ADD_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADDD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case ADD_R32_R32: b.r1.dword=Instructions.ADDD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case ADD_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADDD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case ADD_R32_E32: b.r1.dword=Instructions.ADDD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case OR_R8: b.r1.set8(Instructions.ORB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case OR_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ORB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case OR_R8_R8: b.r1.set8(Instructions.ORB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case OR_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ORB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case OR_R8_E8: b.r1.set8(Instructions.ORB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case OR_R16: b.r1.word(Instructions.ORW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case OR_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ORW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case OR_R16_R16: b.r1.word(Instructions.ORW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case OR_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ORW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case OR_R16_E16: b.r1.word(Instructions.ORW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case OR_R32: b.r1.dword=Instructions.ORD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case OR_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ORD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case OR_R32_R32: b.r1.dword=Instructions.ORD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case OR_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ORD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case OR_R32_E32: b.r1.dword=Instructions.ORD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case ADC_R8: b.r1.set8(Instructions.ADCB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case ADC_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADCB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case ADC_R8_R8: b.r1.set8(Instructions.ADCB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case ADC_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADCB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case ADC_R8_E8: b.r1.set8(Instructions.ADCB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case ADC_R16: b.r1.word(Instructions.ADCW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case ADC_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADCW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case ADC_R16_R16: b.r1.word(Instructions.ADCW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case ADC_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADCW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case ADC_R16_E16: b.r1.word(Instructions.ADCW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case ADC_R32: b.r1.dword=Instructions.ADCD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case ADC_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADCD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case ADC_R32_R32: b.r1.dword=Instructions.ADCD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case ADC_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADCD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case ADC_R32_E32: b.r1.dword=Instructions.ADCD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case SBB_R8: b.r1.set8(Instructions.SBBB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case SBB_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SBBB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case SBB_R8_R8: b.r1.set8(Instructions.SBBB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case SBB_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SBBB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case SBB_R8_E8: b.r1.set8(Instructions.SBBB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case SBB_R16: b.r1.word(Instructions.SBBW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case SBB_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SBBW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case SBB_R16_R16: b.r1.word(Instructions.SBBW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case SBB_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SBBW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case SBB_R16_E16: b.r1.word(Instructions.SBBW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case SBB_R32: b.r1.dword=Instructions.SBBD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case SBB_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SBBD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case SBB_R32_R32: b.r1.dword=Instructions.SBBD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case SBB_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SBBD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case SBB_R32_E32: b.r1.dword=Instructions.SBBD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case AND_R8: b.r1.set8(Instructions.ANDB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case AND_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ANDB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case AND_R8_R8: b.r1.set8(Instructions.ANDB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case AND_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ANDB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case AND_R8_E8: b.r1.set8(Instructions.ANDB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case AND_R16: b.r1.word(Instructions.ANDW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case AND_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ANDW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case AND_R16_R16: b.r1.word(Instructions.ANDW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case AND_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ANDW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case AND_R16_E16: b.r1.word(Instructions.ANDW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case AND_R32: b.r1.dword=Instructions.ANDD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case AND_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ANDD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case AND_R32_R32: b.r1.dword=Instructions.ANDD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case AND_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ANDD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case AND_R32_E32: b.r1.dword=Instructions.ANDD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case SUB_R8: b.r1.set8(Instructions.SUBB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case SUB_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SUBB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case SUB_R8_R8: b.r1.set8(Instructions.SUBB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case SUB_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SUBB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case SUB_R8_E8: b.r1.set8(Instructions.SUBB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case SUB_R16: b.r1.word(Instructions.SUBW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case SUB_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SUBW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case SUB_R16_R16: b.r1.word(Instructions.SUBW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case SUB_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SUBW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case SUB_R16_E16: b.r1.word(Instructions.SUBW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case SUB_R32: b.r1.dword=Instructions.SUBD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case SUB_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SUBD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case SUB_R32_R32: b.r1.dword=Instructions.SUBD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case SUB_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SUBD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case SUB_R32_E32: b.r1.dword=Instructions.SUBD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case XOR_R8: b.r1.set8(Instructions.XORB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; - case XOR_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.XORB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case XOR_R8_R8: b.r1.set8(Instructions.XORB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; - case XOR_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.XORB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; - case XOR_R8_E8: b.r1.set8(Instructions.XORB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; - - case XOR_R16: b.r1.word(Instructions.XORW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; - case XOR_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.XORW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case XOR_R16_R16: b.r1.word(Instructions.XORW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; - case XOR_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.XORW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; - case XOR_R16_E16: b.r1.word(Instructions.XORW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; - - case XOR_R32: b.r1.dword=Instructions.XORD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case XOR_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.XORD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case XOR_R32_R32: b.r1.dword=Instructions.XORD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case XOR_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.XORD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; - case XOR_R32_E32: b.r1.dword=Instructions.XORD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case CMP_R8: Instructions.CMPB(b.value, b.r1.get8()); reg_eip+=b.eipCount;continue; - case CMP_E8: Instructions.CMPB(b.value, Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; - case CMP_R8_R8: Instructions.CMPB(b.r2.get8(), b.r1.get8()); reg_eip+=b.eipCount;continue; - case CMP_E8_R8: Instructions.CMPB(b.r1.get8(), Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; - case CMP_R8_E8: Instructions.CMPB(Memory.mem_readb(eaSlow(b)), b.r1.get8()); reg_eip+=b.eipCount;continue; - - case CMP_R16: Instructions.CMPW(b.value, b.r1.word()); reg_eip+=b.eipCount;continue; - case CMP_E16: Instructions.CMPW(b.value, Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; - case CMP_R16_R16: Instructions.CMPW(b.r2.word(), b.r1.word()); reg_eip+=b.eipCount;continue; - case CMP_E16_R16: Instructions.CMPW(b.r1.word(), Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; - case CMP_R16_E16: Instructions.CMPW(Memory.mem_readw(eaSlow(b)), b.r1.word()); reg_eip+=b.eipCount;continue; - - case CMP_R32: Instructions.CMPD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case CMP_E32: Instructions.CMPD(b.value, Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; - case CMP_R32_R32: Instructions.CMPD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case CMP_E32_R32: Instructions.CMPD(b.r1.dword, Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; - case CMP_R32_E32: Instructions.CMPD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case PUSH16_ES: CPU.CPU_Push16(CPU_Regs.reg_esVal.dword); reg_eip+=b.eipCount;continue; - case POP16_ES: if (CPU.CPU_PopSegES(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH16_CS: CPU.CPU_Push16(CPU_Regs.reg_csVal.dword); reg_eip+=b.eipCount;continue; - case PUSH16_SS: CPU.CPU_Push16(CPU_Regs.reg_ssVal.dword); reg_eip+=b.eipCount;continue; - case POP16_SS: if (CPU.CPU_PopSegSS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH16_DS: CPU.CPU_Push16(CPU_Regs.reg_dsVal.dword); reg_eip+=b.eipCount;continue; - case POP16_DS: if (CPU.CPU_PopSegDS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH16_FS: CPU.CPU_Push16(CPU_Regs.reg_fsVal.dword); reg_eip+=b.eipCount;continue; - case POP16_FS: if (CPU.CPU_PopSegFS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH16_GS: CPU.CPU_Push16(CPU_Regs.reg_gsVal.dword); reg_eip+=b.eipCount;continue; - case POP16_GS: if (CPU.CPU_PopSegGS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - - case PUSH32_ES: CPU.CPU_Push32(CPU_Regs.reg_esVal.dword); reg_eip+=b.eipCount;continue; - case POP32_ES: if (CPU.CPU_PopSegES(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH32_CS: CPU.CPU_Push32(CPU_Regs.reg_csVal.dword); reg_eip+=b.eipCount;continue; - case PUSH32_SS: CPU.CPU_Push32(CPU_Regs.reg_ssVal.dword); reg_eip+=b.eipCount;continue; - case POP32_SS: if (CPU.CPU_PopSegSS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH32_DS: CPU.CPU_Push32(CPU_Regs.reg_dsVal.dword); reg_eip+=b.eipCount;continue; - case POP32_DS: if (CPU.CPU_PopSegDS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH32_FS: CPU.CPU_Push32(CPU_Regs.reg_fsVal.dword); reg_eip+=b.eipCount;continue; - case POP32_FS: if (CPU.CPU_PopSegFS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - case PUSH32_GS: CPU.CPU_Push32(CPU_Regs.reg_gsVal.dword); reg_eip+=b.eipCount;continue; - case POP32_GS: if (CPU.CPU_PopSegGS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} - - case NOP: reg_eip+=b.eipCount;continue; - case DAA: Instructions.DAA(); reg_eip+=b.eipCount;continue; - case DAS: Instructions.DAS(); reg_eip+=b.eipCount;continue; - case AAA: Instructions.AAA(); reg_eip+=b.eipCount;continue; - case AAS: Instructions.AAS(); reg_eip+=b.eipCount;continue; - - case INC_R8: b.r1.set8(Instructions.INCB(b.r1.get8())); reg_eip+=b.eipCount;continue; - case INC_R16: b.r1.word(Instructions.INCW(b.r1.word())); reg_eip+=b.eipCount;continue; - case INC_R32: b.r1.dword=Instructions.INCD(b.r1.dword); reg_eip+=b.eipCount;continue; - case DEC_R8: b.r1.set8(Instructions.DECB(b.r1.get8())); reg_eip+=b.eipCount;continue; - case DEC_R16: b.r1.word(Instructions.DECW(b.r1.word())); reg_eip+=b.eipCount;continue; - case DEC_R32: b.r1.dword=Instructions.DECD(b.r1.dword); reg_eip+=b.eipCount;continue; - - case PUSH16: CPU.CPU_Push16(b.value); reg_eip+=b.eipCount;continue; - case PUSH16_R16: CPU.CPU_Push16(b.r1.word()); reg_eip+=b.eipCount;continue; - case PUSH16_E16: CPU.CPU_Push16(Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; - case PUSH32: CPU.CPU_Push32(b.value); reg_eip+=b.eipCount;continue; - case PUSH32_R32: CPU.CPU_Push32(b.r1.dword); reg_eip+=b.eipCount;continue; - case PUSH32_E32: CPU.CPU_Push32(Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; - - case POP16_R16: b.r1.word(CPU.CPU_Pop16()); reg_eip+=b.eipCount;continue; - case POP16_E16: Memory.mem_writew(eaSlow(b), CPU.CPU_Pop16()); reg_eip+=b.eipCount;continue; - case POP32_R32: b.r1.dword=CPU.CPU_Pop32(); reg_eip+=b.eipCount;continue; - case POP32_E32: Memory.mem_writed(eaSlow(b), CPU.CPU_Pop32()); reg_eip+=b.eipCount;continue; - - case PUSH16A: { - /*Bit16u*/int old_sp=reg_esp.word(); - int esp = reg_esp.dword; - esp = CPU.CPU_Push16(esp, reg_eax.word()); - esp = CPU.CPU_Push16(esp, reg_ecx.word()); - esp = CPU.CPU_Push16(esp, reg_edx.word()); - esp = CPU.CPU_Push16(esp, reg_ebx.word()); - esp = CPU.CPU_Push16(esp, old_sp); - esp = CPU.CPU_Push16(esp, reg_ebp.word()); - esp = CPU.CPU_Push16(esp, reg_esi.word()); - esp = CPU.CPU_Push16(esp, reg_edi.word()); - // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant - reg_esp.word(esp); - reg_eip+=b.eipCount; - continue; - } - case POP16A: - reg_edi.word(CPU.CPU_Peek16(0));reg_esi.word(CPU.CPU_Peek16(1));reg_ebp.word(CPU.CPU_Peek16(2));//Don't save SP - reg_ebx.word(CPU.CPU_Peek16(4));reg_edx.word(CPU.CPU_Peek16(5));reg_ecx.word(CPU.CPU_Peek16(6));reg_eax.word(CPU.CPU_Peek16(7)); - CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|((CPU_Regs.reg_esp.dword+16) & CPU.cpu.stack.mask); - reg_eip+=b.eipCount; - continue; - case PUSH32A: { - /*Bit16u*/int old_sp=reg_esp.dword; - int esp = reg_esp.dword; - esp = CPU.CPU_Push32(esp, reg_eax.dword); - esp = CPU.CPU_Push32(esp, reg_ecx.dword); - esp = CPU.CPU_Push32(esp, reg_edx.dword); - esp = CPU.CPU_Push32(esp, reg_ebx.dword); - esp = CPU.CPU_Push32(esp, old_sp); - esp = CPU.CPU_Push32(esp, reg_ebp.dword); - esp = CPU.CPU_Push32(esp, reg_esi.dword); - esp = CPU.CPU_Push32(esp, reg_edi.dword); - // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant - reg_esp.dword=esp; - reg_eip+=b.eipCount; - continue; - } - case POP32A: - reg_edi.dword=CPU.CPU_Peek32(0);reg_esi.dword=CPU.CPU_Peek32(1);reg_ebp.dword=CPU.CPU_Peek32(2);//Don't save SP - reg_ebx.dword=CPU.CPU_Peek32(4);reg_edx.dword=CPU.CPU_Peek32(5);reg_ecx.dword=CPU.CPU_Peek32(6);reg_eax.dword=CPU.CPU_Peek32(7); - CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|((CPU_Regs.reg_esp.dword+16) & CPU.cpu.stack.mask); - reg_eip+=b.eipCount; - continue; - - case BOUND16: { - eaa = eaSlow(b); - short bound_min = (short) Memory.mem_readw(eaa); - short bound_max = (short) Memory.mem_readw(eaa + 2); - short value = (short) b.r1.word(); - if ((value < bound_min) || (value > bound_max)) { - CPU.CPU_Exception(5); - block = null; - break; - } - reg_eip+=b.eipCount; - continue; - } - case BOUND32: { - eaa=eaSlow(b); - int bound_min=Memory.mem_readd(eaa); - int bound_max=Memory.mem_readd(eaa + 4); - int rmrd = b.r1.dword; - if (rmrd < bound_min || rmrd > bound_max) { - CPU.CPU_Exception(5); - block = null; - break; - } - reg_eip+=b.eipCount; - continue; - } - case ARPL_R16_R16: - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) { - CPU.CPU_Exception(6,0); - block = null; - break; - } - b.r1.word(CPU.CPU_ARPL(b.r1.word(), b.r2.word())); - reg_eip+=b.eipCount; - continue; - case ARPL_R16_E16: { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) { - CPU.CPU_Exception(6,0); - block = null; - break; - } - eaa=eaSlow(b); - Memory.mem_writew(eaa,CPU.CPU_ARPL(Memory.mem_readw(eaa),b.r1.word())); - reg_eip+=b.eipCount; - continue; - } - case ARPL_R32_R32: - if (((CPU.cpu.pmode) && (CPU_Regs.flags & CPU_Regs.VM)!=0) || (!CPU.cpu.pmode)) { - CPU.CPU_Exception(6,0); - block = null; - break; - } - b.r1.dword=CPU.CPU_ARPL(b.r1.dword, b.r2.word()); - reg_eip+=b.eipCount; - continue; - case ARPL_R32_E32: { - if (((CPU.cpu.pmode) && (CPU_Regs.flags & CPU_Regs.VM)!=0) || (!CPU.cpu.pmode)) { - CPU.CPU_Exception(6,0); - block = null; - break; - } - eaa=eaSlow(b); - Memory.mem_writed(eaa,CPU.CPU_ARPL(Memory.mem_readd(eaa),b.r1.word())); - reg_eip+=b.eipCount; - continue; + switch (b.instruction) { + case ADD_R8: b.r1.set8(Instructions.ADDB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case ADD_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADDB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case ADD_R8_R8: b.r1.set8(Instructions.ADDB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case ADD_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADDB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case ADD_R8_E8: b.r1.set8(Instructions.ADDB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case ADD_R16: b.r1.word(Instructions.ADDW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case ADD_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADDW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case ADD_R16_R16: b.r1.word(Instructions.ADDW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case ADD_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADDW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case ADD_R16_E16: b.r1.word(Instructions.ADDW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case ADD_R32: b.r1.dword=Instructions.ADDD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case ADD_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADDD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case ADD_R32_R32: b.r1.dword=Instructions.ADDD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case ADD_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADDD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case ADD_R32_E32: b.r1.dword=Instructions.ADDD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case OR_R8: b.r1.set8(Instructions.ORB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case OR_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ORB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case OR_R8_R8: b.r1.set8(Instructions.ORB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case OR_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ORB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case OR_R8_E8: b.r1.set8(Instructions.ORB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case OR_R16: b.r1.word(Instructions.ORW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case OR_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ORW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case OR_R16_R16: b.r1.word(Instructions.ORW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case OR_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ORW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case OR_R16_E16: b.r1.word(Instructions.ORW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case OR_R32: b.r1.dword=Instructions.ORD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case OR_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ORD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case OR_R32_R32: b.r1.dword=Instructions.ORD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case OR_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ORD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case OR_R32_E32: b.r1.dword=Instructions.ORD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case ADC_R8: b.r1.set8(Instructions.ADCB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case ADC_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADCB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case ADC_R8_R8: b.r1.set8(Instructions.ADCB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case ADC_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ADCB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case ADC_R8_E8: b.r1.set8(Instructions.ADCB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case ADC_R16: b.r1.word(Instructions.ADCW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case ADC_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADCW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case ADC_R16_R16: b.r1.word(Instructions.ADCW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case ADC_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ADCW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case ADC_R16_E16: b.r1.word(Instructions.ADCW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case ADC_R32: b.r1.dword=Instructions.ADCD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case ADC_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADCD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case ADC_R32_R32: b.r1.dword=Instructions.ADCD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case ADC_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ADCD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case ADC_R32_E32: b.r1.dword=Instructions.ADCD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case SBB_R8: b.r1.set8(Instructions.SBBB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case SBB_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SBBB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case SBB_R8_R8: b.r1.set8(Instructions.SBBB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case SBB_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SBBB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case SBB_R8_E8: b.r1.set8(Instructions.SBBB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case SBB_R16: b.r1.word(Instructions.SBBW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case SBB_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SBBW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case SBB_R16_R16: b.r1.word(Instructions.SBBW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case SBB_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SBBW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case SBB_R16_E16: b.r1.word(Instructions.SBBW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case SBB_R32: b.r1.dword=Instructions.SBBD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case SBB_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SBBD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case SBB_R32_R32: b.r1.dword=Instructions.SBBD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case SBB_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SBBD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case SBB_R32_E32: b.r1.dword=Instructions.SBBD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case AND_R8: b.r1.set8(Instructions.ANDB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case AND_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ANDB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case AND_R8_R8: b.r1.set8(Instructions.ANDB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case AND_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.ANDB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case AND_R8_E8: b.r1.set8(Instructions.ANDB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case AND_R16: b.r1.word(Instructions.ANDW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case AND_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ANDW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case AND_R16_R16: b.r1.word(Instructions.ANDW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case AND_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.ANDW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case AND_R16_E16: b.r1.word(Instructions.ANDW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case AND_R32: b.r1.dword=Instructions.ANDD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case AND_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ANDD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case AND_R32_R32: b.r1.dword=Instructions.ANDD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case AND_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.ANDD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case AND_R32_E32: b.r1.dword=Instructions.ANDD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case SUB_R8: b.r1.set8(Instructions.SUBB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case SUB_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SUBB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case SUB_R8_R8: b.r1.set8(Instructions.SUBB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case SUB_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.SUBB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case SUB_R8_E8: b.r1.set8(Instructions.SUBB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case SUB_R16: b.r1.word(Instructions.SUBW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case SUB_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SUBW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case SUB_R16_R16: b.r1.word(Instructions.SUBW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case SUB_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.SUBW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case SUB_R16_E16: b.r1.word(Instructions.SUBW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case SUB_R32: b.r1.dword=Instructions.SUBD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case SUB_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SUBD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case SUB_R32_R32: b.r1.dword=Instructions.SUBD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case SUB_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.SUBD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case SUB_R32_E32: b.r1.dword=Instructions.SUBD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case XOR_R8: b.r1.set8(Instructions.XORB(b.value, b.r1.get8())); reg_eip+=b.eipCount;continue; + case XOR_E8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.XORB(b.value, Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case XOR_R8_R8: b.r1.set8(Instructions.XORB(b.r2.get8(), b.r1.get8())); reg_eip+=b.eipCount;continue; + case XOR_E8_R8: eaa = eaSlow(b); Memory.mem_writeb(eaa, Instructions.XORB(b.r1.get8(), Memory.mem_readb(eaa))); reg_eip+=b.eipCount;continue; + case XOR_R8_E8: b.r1.set8(Instructions.XORB(Memory.mem_readb(eaSlow(b)), b.r1.get8())); reg_eip+=b.eipCount;continue; + + case XOR_R16: b.r1.word(Instructions.XORW(b.value, b.r1.word())); reg_eip+=b.eipCount;continue; + case XOR_E16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.XORW(b.value, Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case XOR_R16_R16: b.r1.word(Instructions.XORW(b.r2.word(), b.r1.word())); reg_eip+=b.eipCount;continue; + case XOR_E16_R16: eaa = eaSlow(b); Memory.mem_writew(eaa, Instructions.XORW(b.r1.word(), Memory.mem_readw(eaa))); reg_eip+=b.eipCount;continue; + case XOR_R16_E16: b.r1.word(Instructions.XORW(Memory.mem_readw(eaSlow(b)), b.r1.word())); reg_eip+=b.eipCount;continue; + + case XOR_R32: b.r1.dword=Instructions.XORD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case XOR_E32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.XORD(b.value, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case XOR_R32_R32: b.r1.dword=Instructions.XORD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case XOR_E32_R32: eaa = eaSlow(b); Memory.mem_writed(eaa, Instructions.XORD(b.r1.dword, Memory.mem_readd(eaa))); reg_eip+=b.eipCount;continue; + case XOR_R32_E32: b.r1.dword=Instructions.XORD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case CMP_R8: Instructions.CMPB(b.value, b.r1.get8()); reg_eip+=b.eipCount;continue; + case CMP_E8: Instructions.CMPB(b.value, Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; + case CMP_R8_R8: Instructions.CMPB(b.r2.get8(), b.r1.get8()); reg_eip+=b.eipCount;continue; + case CMP_E8_R8: Instructions.CMPB(b.r1.get8(), Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; + case CMP_R8_E8: Instructions.CMPB(Memory.mem_readb(eaSlow(b)), b.r1.get8()); reg_eip+=b.eipCount;continue; + + case CMP_R16: Instructions.CMPW(b.value, b.r1.word()); reg_eip+=b.eipCount;continue; + case CMP_E16: Instructions.CMPW(b.value, Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; + case CMP_R16_R16: Instructions.CMPW(b.r2.word(), b.r1.word()); reg_eip+=b.eipCount;continue; + case CMP_E16_R16: Instructions.CMPW(b.r1.word(), Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; + case CMP_R16_E16: Instructions.CMPW(Memory.mem_readw(eaSlow(b)), b.r1.word()); reg_eip+=b.eipCount;continue; + + case CMP_R32: Instructions.CMPD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case CMP_E32: Instructions.CMPD(b.value, Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; + case CMP_R32_R32: Instructions.CMPD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case CMP_E32_R32: Instructions.CMPD(b.r1.dword, Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; + case CMP_R32_E32: Instructions.CMPD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case PUSH16_ES: CPU.CPU_Push16(CPU_Regs.reg_esVal.dword); reg_eip+=b.eipCount;continue; + case POP16_ES: if (CPU.CPU_PopSegES(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH16_CS: CPU.CPU_Push16(CPU_Regs.reg_csVal.dword); reg_eip+=b.eipCount;continue; + case PUSH16_SS: CPU.CPU_Push16(CPU_Regs.reg_ssVal.dword); reg_eip+=b.eipCount;continue; + case POP16_SS: if (CPU.CPU_PopSegSS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH16_DS: CPU.CPU_Push16(CPU_Regs.reg_dsVal.dword); reg_eip+=b.eipCount;continue; + case POP16_DS: if (CPU.CPU_PopSegDS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH16_FS: CPU.CPU_Push16(CPU_Regs.reg_fsVal.dword); reg_eip+=b.eipCount;continue; + case POP16_FS: if (CPU.CPU_PopSegFS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH16_GS: CPU.CPU_Push16(CPU_Regs.reg_gsVal.dword); reg_eip+=b.eipCount;continue; + case POP16_GS: if (CPU.CPU_PopSegGS(false)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + + case PUSH32_ES: CPU.CPU_Push32(CPU_Regs.reg_esVal.dword); reg_eip+=b.eipCount;continue; + case POP32_ES: if (CPU.CPU_PopSegES(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH32_CS: CPU.CPU_Push32(CPU_Regs.reg_csVal.dword); reg_eip+=b.eipCount;continue; + case PUSH32_SS: CPU.CPU_Push32(CPU_Regs.reg_ssVal.dword); reg_eip+=b.eipCount;continue; + case POP32_SS: if (CPU.CPU_PopSegSS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH32_DS: CPU.CPU_Push32(CPU_Regs.reg_dsVal.dword); reg_eip+=b.eipCount;continue; + case POP32_DS: if (CPU.CPU_PopSegDS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH32_FS: CPU.CPU_Push32(CPU_Regs.reg_fsVal.dword); reg_eip+=b.eipCount;continue; + case POP32_FS: if (CPU.CPU_PopSegFS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + case PUSH32_GS: CPU.CPU_Push32(CPU_Regs.reg_gsVal.dword); reg_eip+=b.eipCount;continue; + case POP32_GS: if (CPU.CPU_PopSegGS(true)) {RUNEXCEPTION(); block=null; break;} else {reg_eip+=b.eipCount;continue;} + + case NOP: reg_eip+=b.eipCount;continue; + case DAA: Instructions.DAA(); reg_eip+=b.eipCount;continue; + case DAS: Instructions.DAS(); reg_eip+=b.eipCount;continue; + case AAA: Instructions.AAA(); reg_eip+=b.eipCount;continue; + case AAS: Instructions.AAS(); reg_eip+=b.eipCount;continue; + + case INC_R8: b.r1.set8(Instructions.INCB(b.r1.get8())); reg_eip+=b.eipCount;continue; + case INC_R16: b.r1.word(Instructions.INCW(b.r1.word())); reg_eip+=b.eipCount;continue; + case INC_R32: b.r1.dword=Instructions.INCD(b.r1.dword); reg_eip+=b.eipCount;continue; + case DEC_R8: b.r1.set8(Instructions.DECB(b.r1.get8())); reg_eip+=b.eipCount;continue; + case DEC_R16: b.r1.word(Instructions.DECW(b.r1.word())); reg_eip+=b.eipCount;continue; + case DEC_R32: b.r1.dword=Instructions.DECD(b.r1.dword); reg_eip+=b.eipCount;continue; + + case PUSH16: CPU.CPU_Push16(b.value); reg_eip+=b.eipCount;continue; + case PUSH16_R16: CPU.CPU_Push16(b.r1.word()); reg_eip+=b.eipCount;continue; + case PUSH16_E16: CPU.CPU_Push16(Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; + case PUSH32: CPU.CPU_Push32(b.value); reg_eip+=b.eipCount;continue; + case PUSH32_R32: CPU.CPU_Push32(b.r1.dword); reg_eip+=b.eipCount;continue; + case PUSH32_E32: CPU.CPU_Push32(Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; + + case POP16_R16: b.r1.word(CPU.CPU_Pop16()); reg_eip+=b.eipCount;continue; + case POP16_E16: Memory.mem_writew(eaSlow(b), CPU.CPU_Pop16()); reg_eip+=b.eipCount;continue; + case POP32_R32: b.r1.dword=CPU.CPU_Pop32(); reg_eip+=b.eipCount;continue; + case POP32_E32: Memory.mem_writed(eaSlow(b), CPU.CPU_Pop32()); reg_eip+=b.eipCount;continue; + + case PUSH16A: { + /*Bit16u*/int old_sp=reg_esp.word(); + int esp = reg_esp.dword; + esp = CPU.CPU_Push16(esp, reg_eax.word()); + esp = CPU.CPU_Push16(esp, reg_ecx.word()); + esp = CPU.CPU_Push16(esp, reg_edx.word()); + esp = CPU.CPU_Push16(esp, reg_ebx.word()); + esp = CPU.CPU_Push16(esp, old_sp); + esp = CPU.CPU_Push16(esp, reg_ebp.word()); + esp = CPU.CPU_Push16(esp, reg_esi.word()); + esp = CPU.CPU_Push16(esp, reg_edi.word()); + // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant + reg_esp.word(esp); + reg_eip+=b.eipCount; + continue; + } + case POP16A: + reg_edi.word(CPU.CPU_Peek16(0));reg_esi.word(CPU.CPU_Peek16(1));reg_ebp.word(CPU.CPU_Peek16(2));//Don't save SP + reg_ebx.word(CPU.CPU_Peek16(4));reg_edx.word(CPU.CPU_Peek16(5));reg_ecx.word(CPU.CPU_Peek16(6));reg_eax.word(CPU.CPU_Peek16(7)); + CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|((CPU_Regs.reg_esp.dword+16) & CPU.cpu.stack.mask); + reg_eip+=b.eipCount; + continue; + case PUSH32A: { + /*Bit16u*/int old_sp=reg_esp.dword; + int esp = reg_esp.dword; + esp = CPU.CPU_Push32(esp, reg_eax.dword); + esp = CPU.CPU_Push32(esp, reg_ecx.dword); + esp = CPU.CPU_Push32(esp, reg_edx.dword); + esp = CPU.CPU_Push32(esp, reg_ebx.dword); + esp = CPU.CPU_Push32(esp, old_sp); + esp = CPU.CPU_Push32(esp, reg_ebp.dword); + esp = CPU.CPU_Push32(esp, reg_esi.dword); + esp = CPU.CPU_Push32(esp, reg_edi.dword); + // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant + reg_esp.dword=esp; + reg_eip+=b.eipCount; + continue; + } + case POP32A: + reg_edi.dword=CPU.CPU_Peek32(0);reg_esi.dword=CPU.CPU_Peek32(1);reg_ebp.dword=CPU.CPU_Peek32(2);//Don't save SP + reg_ebx.dword=CPU.CPU_Peek32(4);reg_edx.dword=CPU.CPU_Peek32(5);reg_ecx.dword=CPU.CPU_Peek32(6);reg_eax.dword=CPU.CPU_Peek32(7); + CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|((CPU_Regs.reg_esp.dword+16) & CPU.cpu.stack.mask); + reg_eip+=b.eipCount; + continue; + + case BOUND16: { + eaa = eaSlow(b); + short bound_min = (short) Memory.mem_readw(eaa); + short bound_max = (short) Memory.mem_readw(eaa + 2); + short value = (short) b.r1.word(); + if ((value < bound_min) || (value > bound_max)) { + CPU.CPU_Exception(5); + block = null; + break; } - case IMUL_R16_R16: b.r2.word(Instructions.DIMULW(b.r1.word(), b.value)); reg_eip+=b.eipCount; continue; - case IMUL_R16_E16: b.r1.word(Instructions.DIMULW(Memory.mem_readw(eaSlow(b)), b.value)); reg_eip+=b.eipCount; continue; - - case STRING_EXCEPTION: { - if (CPU.CPU_IO_Exception(reg_edx.word(), b.eaa_sib)) { - RUNEXCEPTION(); - block = null; - break; - } - Core.rep_zero = b.zero; - Core.base_ds = b.eaa_segPhys.dword; - StringOp.DoString(b.eaa_const, b.value); - reg_eip+=b.eipCount; - continue; + reg_eip+=b.eipCount; + continue; + } + case BOUND32: { + eaa=eaSlow(b); + int bound_min=Memory.mem_readd(eaa); + int bound_max=Memory.mem_readd(eaa + 4); + int rmrd = b.r1.dword; + if (rmrd < bound_min || rmrd > bound_max) { + CPU.CPU_Exception(5); + block = null; + break; } - case STRING: { - Core.rep_zero = b.zero; - Core.base_ds = b.eaa_segPhys.dword; - StringOp.DoString(b.eaa_const, b.value); - reg_eip+=b.eipCount; - continue; + reg_eip+=b.eipCount; + continue; + } + case ARPL_R16_R16: + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) { + CPU.CPU_Exception(6,0); + block = null; + break; } - case JUMP16_JO: block = jump16(block, Flags.TFLG_O(), b.value, b.eipCount); break; - case JUMP16_NJO: block = jump16(block, Flags.TFLG_NO(), b.value, b.eipCount); break; - case JUMP16_B: block = jump16(block, Flags.TFLG_B(), b.value, b.eipCount); break; - case JUMP16_NB: block = jump16(block, Flags.TFLG_NB(), b.value, b.eipCount); break; - case JUMP16_Z: block = jump16(block, Flags.TFLG_Z(), b.value, b.eipCount); break; - case JUMP16_NZ: block = jump16(block, Flags.TFLG_NZ(), b.value, b.eipCount); break; - case JUMP16_BE: block = jump16(block, Flags.TFLG_BE(), b.value, b.eipCount); break; - case JUMP16_NBE: block = jump16(block, Flags.TFLG_NBE(), b.value, b.eipCount); break; - case JUMP16_S: block = jump16(block, Flags.TFLG_S(), b.value, b.eipCount); break; - case JUMP16_NS: block = jump16(block, Flags.TFLG_NS(), b.value, b.eipCount); break; - case JUMP16_P: block = jump16(block, Flags.TFLG_P(), b.value, b.eipCount); break; - case JUMP16_NP: block = jump16(block, Flags.TFLG_NP(), b.value, b.eipCount); break; - case JUMP16_L: block = jump16(block, Flags.TFLG_L(), b.value, b.eipCount); break; - case JUMP16_NL: block = jump16(block, Flags.TFLG_NL(), b.value, b.eipCount); break; - case JUMP16_LE: block = jump16(block, Flags.TFLG_LE(), b.value, b.eipCount); break; - case JUMP16_NLE: block = jump16(block, Flags.TFLG_NLE(), b.value, b.eipCount); break; - - case TEST_R8: Instructions.TESTB(b.value, b.r1.get8()); reg_eip+=b.eipCount;continue; - case TEST_E8: Instructions.TESTB(b.value, Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; - case TEST_R8_R8: Instructions.TESTB(b.r2.get8(), b.r1.get8()); reg_eip+=b.eipCount;continue; - case TEST_E8_R8: Instructions.TESTB(Memory.mem_readb(eaSlow(b)), b.r1.get8()); reg_eip+=b.eipCount;continue; - - case TEST_R16: Instructions.TESTW(b.value, b.r1.word()); reg_eip+=b.eipCount;continue; - case TEST_E16: Instructions.TESTW(b.value, Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; - case TEST_R16_R16: Instructions.TESTW(b.r2.word(), b.r1.word()); reg_eip+=b.eipCount;continue; - case TEST_E16_R16: Instructions.TESTW(Memory.mem_readw(eaSlow(b)), b.r1.word()); reg_eip+=b.eipCount;continue; - - case TEST_R32: Instructions.TESTD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; - case TEST_E32: Instructions.TESTD(b.value, Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; - case TEST_R32_R32: Instructions.TESTD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; - case TEST_E32_R32: Instructions.TESTD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; - - case XCHG_R8_R8: tmp=b.r1.get8();b.r1.set8(b.r2.get8());b.r2.set8(tmp); reg_eip+=b.eipCount;continue; - case XCHG_E8_R8: eaa=eaSlow(b);tmp=b.r1.get8();b.r1.set8(Memory.mem_readb(eaa));Memory.mem_writeb(eaa, tmp); reg_eip+=b.eipCount;continue; - case XCHG_R16_R16: tmp=b.r1.word();b.r1.word(b.r2.word());b.r2.word(tmp); reg_eip+=b.eipCount;continue; - case XCHG_E16_R16: eaa=eaSlow(b);tmp=b.r1.word();b.r1.word(Memory.mem_readw(eaa));Memory.mem_writew(eaa, tmp); reg_eip+=b.eipCount;continue; - case XCHG_R32_R32: tmp=b.r1.dword;b.r1.dword=b.r2.dword;b.r2.dword=tmp; reg_eip+=b.eipCount;continue; - case XCHG_E32_R32: eaa=eaSlow(b);tmp=b.r1.dword;b.r1.dword=Memory.mem_readd(eaa);Memory.mem_writed(eaa, tmp); reg_eip+=b.eipCount;continue; - - case MOV_R8: b.r1.set8(b.value); reg_eip+=b.eipCount;continue; - case MOV_E8: Memory.mem_writeb(eaSlow(b), b.value); reg_eip+=b.eipCount;continue; - case MOV_R8_R8: b.r1.set8(b.r2.get8()); reg_eip+=b.eipCount;continue; - case MOV_E8_R8: Memory.mem_writeb(eaSlow(b), b.r1.get8()); reg_eip+=b.eipCount;continue; - case MOV_R8_E8: b.r1.set8(Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; - case MOV_E8_R8_RM5: if (RM5(b)) {block=null;break;} Memory.mem_writeb(eaSlow(b), b.r1.get8()); reg_eip+=b.eipCount;continue; - case MOV_R16: b.r1.word(b.value); reg_eip+=b.eipCount;continue; - case MOV_E16: Memory.mem_writew(eaSlow(b), b.value); reg_eip+=b.eipCount;continue; - case MOV_R16_R16: b.r1.word(b.r2.word()); reg_eip+=b.eipCount;continue; - case MOV_E16_R16: Memory.mem_writew(eaSlow(b), b.r1.word()); reg_eip+=b.eipCount;continue; - case MOV_R16_E16: b.r1.word(Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; - - case MOV_R32: b.r1.dword = b.value; reg_eip+=b.eipCount;continue; - case MOV_E32: Memory.mem_writed(eaSlow(b), b.value); reg_eip+=b.eipCount;continue; - case MOV_R32_R32: b.r1.dword=b.r2.dword; reg_eip+=b.eipCount;continue; - case MOV_E32_R32: Memory.mem_writed(eaSlow(b), b.r1.dword); reg_eip+=b.eipCount;continue; - case MOV_R32_E32: b.r1.dword=Memory.mem_readd(eaSlow(b)); reg_eip+=b.eipCount;continue; - - case ILLEGAL: CPU.CPU_Exception(6,0); block = null; break; - case LEA_R16: b.r1.word(eaSlow(b)); reg_eip+=b.eipCount;continue; - case LEA_R32: b.r1.dword=eaSlow(b); reg_eip+=b.eipCount;continue; - - case MOV_ES_R16: if (CPU.CPU_SetSegGeneralES(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_ES_E16: if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_SS_R16: if (CPU.CPU_SetSegGeneralSS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_SS_E16: if (CPU.CPU_SetSegGeneralSS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_DS_R16: if (CPU.CPU_SetSegGeneralDS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_DS_E16: if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_FS_R16: if (CPU.CPU_SetSegGeneralFS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_FS_E16: if (CPU.CPU_SetSegGeneralFS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_GS_R16: if (CPU.CPU_SetSegGeneralGS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - case MOV_GS_E16: if (CPU.CPU_SetSegGeneralGS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; - - case CBW: reg_eax.word((byte)reg_eax.low()); reg_eip+=b.eipCount;continue; - case CWD: if ((reg_eax.word() & 0x8000)!=0) reg_edx.word(0xffff);else reg_edx.word(0); reg_eip+=b.eipCount;continue; - - case CALL16_AP: - Flags.FillFlags(); - CPU.CPU_CALL(false,b.eaa_const,b.value,(reg_eip+b.eipCount) & 0xFFFF); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } + b.r1.word(CPU.CPU_ARPL(b.r1.word(), b.r2.word())); + reg_eip+=b.eipCount; + continue; + case ARPL_R16_E16: { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) { + CPU.CPU_Exception(6,0); block = null; break; - case CALL16_EP: - Flags.FillFlags(); - eaa = eaSlow(b); - CPU.CPU_CALL(false,Memory.mem_readw(eaa+2),Memory.mem_readw(eaa),(reg_eip+b.eipCount) & 0xFFFF); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } + } + eaa=eaSlow(b); + Memory.mem_writew(eaa,CPU.CPU_ARPL(Memory.mem_readw(eaa),b.r1.word())); + reg_eip+=b.eipCount; + continue; + } + case ARPL_R32_R32: + if (!CPU.cpu.pmode || (CPU_Regs.flags & CPU_Regs.VM) != 0) { + CPU.CPU_Exception(6,0); block = null; break; - case CALL32_AP: - Flags.FillFlags(); - CPU.CPU_CALL(true,b.eaa_const,b.value,reg_eip+b.eipCount); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } + } + b.r1.dword=CPU.CPU_ARPL(b.r1.dword, b.r2.word()); + reg_eip+=b.eipCount; + continue; + case ARPL_R32_E32: { + if (!CPU.cpu.pmode || (CPU_Regs.flags & CPU_Regs.VM) != 0) { + CPU.CPU_Exception(6,0); block = null; break; - case CALL32_EP: - Flags.FillFlags(); - eaa = eaSlow(b); - CPU.CPU_CALL(false,Memory.mem_readw(eaa+4),Memory.mem_readd(eaa),reg_eip+b.eipCount); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } + } + eaa=eaSlow(b); + Memory.mem_writed(eaa,CPU.CPU_ARPL(Memory.mem_readd(eaa),b.r1.word())); + reg_eip+=b.eipCount; + continue; + } + case IMUL_R16_R16: b.r2.word(Instructions.DIMULW(b.r1.word(), b.value)); reg_eip+=b.eipCount; continue; + case IMUL_R16_E16: b.r1.word(Instructions.DIMULW(Memory.mem_readw(eaSlow(b)), b.value)); reg_eip+=b.eipCount; continue; + + case STRING_EXCEPTION: { + if (CPU.CPU_IO_Exception(reg_edx.word(), b.eaa_sib)) { + RUNEXCEPTION(); block = null; break; - case PUSHF: if (CPU.CPU_PUSHF(!b.eaa16)) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount; continue; - case POPF: - if (CPU.CPU_POPF(!b.eaa16)) {RUNEXCEPTION(); block=null; break;} - reg_eip+=b.eipCount; - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return Callback.CBRET_NONE; - continue; - case SAHF:Flags.SETFLAGSb(reg_eax.high());reg_eip+=b.eipCount;continue; - case LAHF:Flags.FillFlags();reg_eax.high(CPU_Regs.flags&0xff);reg_eip+=b.eipCount;continue; - case MOV_AL_0b: reg_eax.low(Memory.mem_readb(b.eaa_segPhys.dword+b.value));reg_eip+=b.eipCount;continue; - case MOV_0b_AL: Memory.mem_writeb(b.eaa_segPhys.dword+b.value,reg_eax.low());reg_eip+=b.eipCount;continue; - case MOV_AX_0w: reg_eax.word(Memory.mem_readw(b.eaa_segPhys.dword+b.value));reg_eip+=b.eipCount;continue; - case MOV_0w_AX: Memory.mem_writew(b.eaa_segPhys.dword+b.value,reg_eax.word());reg_eip+=b.eipCount;continue; - case MOVSB16: Strings.Movsb16.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSB16r: Strings.Movsb16r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSB32: Strings.Movsb32.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSB32r: Strings.Movsb32r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSW16: Strings.Movsw16.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSW16r: Strings.Movsw16r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSW32: Strings.Movsw32.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSW32r: Strings.Movsw32r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - - case ROLB_0_flags: { - int value = b.r1.get8(); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 7)) != 0); - reg_eip += b.eipCount; - continue; } - case ROLB_E8_0_flags: { - int value = Memory.mem_readb(eaSlow(b)); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 7)) != 0); - reg_eip += b.eipCount; - continue; + Core.rep_zero = b.zero; + Core.base_ds = b.eaa_segPhys.dword; + StringOp.DoString(b.eaa_const, b.value); + reg_eip+=b.eipCount; + continue; + } + case STRING: { + Core.rep_zero = b.zero; + Core.base_ds = b.eaa_segPhys.dword; + StringOp.DoString(b.eaa_const, b.value); + reg_eip+=b.eipCount; + continue; + } + case JUMP16_JO: block = jump16(block, Flags.TFLG_O(), b.value, b.eipCount); break; + case JUMP16_NJO: block = jump16(block, Flags.TFLG_NO(), b.value, b.eipCount); break; + case JUMP16_B: block = jump16(block, Flags.TFLG_B(), b.value, b.eipCount); break; + case JUMP16_NB: block = jump16(block, Flags.TFLG_NB(), b.value, b.eipCount); break; + case JUMP16_Z: block = jump16(block, Flags.TFLG_Z(), b.value, b.eipCount); break; + case JUMP16_NZ: block = jump16(block, Flags.TFLG_NZ(), b.value, b.eipCount); break; + case JUMP16_BE: block = jump16(block, Flags.TFLG_BE(), b.value, b.eipCount); break; + case JUMP16_NBE: block = jump16(block, Flags.TFLG_NBE(), b.value, b.eipCount); break; + case JUMP16_S: block = jump16(block, Flags.TFLG_S(), b.value, b.eipCount); break; + case JUMP16_NS: block = jump16(block, Flags.TFLG_NS(), b.value, b.eipCount); break; + case JUMP16_P: block = jump16(block, Flags.TFLG_P(), b.value, b.eipCount); break; + case JUMP16_NP: block = jump16(block, Flags.TFLG_NP(), b.value, b.eipCount); break; + case JUMP16_L: block = jump16(block, Flags.TFLG_L(), b.value, b.eipCount); break; + case JUMP16_NL: block = jump16(block, Flags.TFLG_NL(), b.value, b.eipCount); break; + case JUMP16_LE: block = jump16(block, Flags.TFLG_LE(), b.value, b.eipCount); break; + case JUMP16_NLE: block = jump16(block, Flags.TFLG_NLE(), b.value, b.eipCount); break; + + case TEST_R8: Instructions.TESTB(b.value, b.r1.get8()); reg_eip+=b.eipCount;continue; + case TEST_E8: Instructions.TESTB(b.value, Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; + case TEST_R8_R8: Instructions.TESTB(b.r2.get8(), b.r1.get8()); reg_eip+=b.eipCount;continue; + case TEST_E8_R8: Instructions.TESTB(Memory.mem_readb(eaSlow(b)), b.r1.get8()); reg_eip+=b.eipCount;continue; + + case TEST_R16: Instructions.TESTW(b.value, b.r1.word()); reg_eip+=b.eipCount;continue; + case TEST_E16: Instructions.TESTW(b.value, Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; + case TEST_R16_R16: Instructions.TESTW(b.r2.word(), b.r1.word()); reg_eip+=b.eipCount;continue; + case TEST_E16_R16: Instructions.TESTW(Memory.mem_readw(eaSlow(b)), b.r1.word()); reg_eip+=b.eipCount;continue; + + case TEST_R32: Instructions.TESTD(b.value, b.r1.dword); reg_eip+=b.eipCount;continue; + case TEST_E32: Instructions.TESTD(b.value, Memory.mem_readd(eaSlow(b))); reg_eip+=b.eipCount;continue; + case TEST_R32_R32: Instructions.TESTD(b.r2.dword, b.r1.dword); reg_eip+=b.eipCount;continue; + case TEST_E32_R32: Instructions.TESTD(Memory.mem_readd(eaSlow(b)), b.r1.dword); reg_eip+=b.eipCount;continue; + + case XCHG_R8_R8: tmp=b.r1.get8();b.r1.set8(b.r2.get8());b.r2.set8(tmp); reg_eip+=b.eipCount;continue; + case XCHG_E8_R8: eaa=eaSlow(b);tmp=b.r1.get8();b.r1.set8(Memory.mem_readb(eaa));Memory.mem_writeb(eaa, tmp); reg_eip+=b.eipCount;continue; + case XCHG_R16_R16: tmp=b.r1.word();b.r1.word(b.r2.word());b.r2.word(tmp); reg_eip+=b.eipCount;continue; + case XCHG_E16_R16: eaa=eaSlow(b);tmp=b.r1.word();b.r1.word(Memory.mem_readw(eaa));Memory.mem_writew(eaa, tmp); reg_eip+=b.eipCount;continue; + case XCHG_R32_R32: tmp=b.r1.dword;b.r1.dword=b.r2.dword;b.r2.dword=tmp; reg_eip+=b.eipCount;continue; + case XCHG_E32_R32: eaa=eaSlow(b);tmp=b.r1.dword;b.r1.dword=Memory.mem_readd(eaa);Memory.mem_writed(eaa, tmp); reg_eip+=b.eipCount;continue; + + case MOV_R8: b.r1.set8(b.value); reg_eip+=b.eipCount;continue; + case MOV_E8: Memory.mem_writeb(eaSlow(b), b.value); reg_eip+=b.eipCount;continue; + case MOV_R8_R8: b.r1.set8(b.r2.get8()); reg_eip+=b.eipCount;continue; + case MOV_E8_R8: Memory.mem_writeb(eaSlow(b), b.r1.get8()); reg_eip+=b.eipCount;continue; + case MOV_R8_E8: b.r1.set8(Memory.mem_readb(eaSlow(b))); reg_eip+=b.eipCount;continue; + case MOV_E8_R8_RM5: if (RM5(b)) {block=null;break;} Memory.mem_writeb(eaSlow(b), b.r1.get8()); reg_eip+=b.eipCount;continue; + case MOV_R16: b.r1.word(b.value); reg_eip+=b.eipCount;continue; + case MOV_E16: Memory.mem_writew(eaSlow(b), b.value); reg_eip+=b.eipCount;continue; + case MOV_R16_R16: b.r1.word(b.r2.word()); reg_eip+=b.eipCount;continue; + case MOV_E16_R16: Memory.mem_writew(eaSlow(b), b.r1.word()); reg_eip+=b.eipCount;continue; + case MOV_R16_E16: b.r1.word(Memory.mem_readw(eaSlow(b))); reg_eip+=b.eipCount;continue; + + case MOV_R32: b.r1.dword = b.value; reg_eip+=b.eipCount;continue; + case MOV_E32: Memory.mem_writed(eaSlow(b), b.value); reg_eip+=b.eipCount;continue; + case MOV_R32_R32: b.r1.dword=b.r2.dword; reg_eip+=b.eipCount;continue; + case MOV_E32_R32: Memory.mem_writed(eaSlow(b), b.r1.dword); reg_eip+=b.eipCount;continue; + case MOV_R32_E32: b.r1.dword=Memory.mem_readd(eaSlow(b)); reg_eip+=b.eipCount;continue; + + case ILLEGAL: CPU.CPU_Exception(6,0); block = null; break; + case LEA_R16: b.r1.word(eaSlow(b)); reg_eip+=b.eipCount;continue; + case LEA_R32: b.r1.dword=eaSlow(b); reg_eip+=b.eipCount;continue; + + case MOV_ES_R16: if (CPU.CPU_SetSegGeneralES(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_ES_E16: if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_SS_R16: if (CPU.CPU_SetSegGeneralSS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_SS_E16: if (CPU.CPU_SetSegGeneralSS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_DS_R16: if (CPU.CPU_SetSegGeneralDS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_DS_E16: if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_FS_R16: if (CPU.CPU_SetSegGeneralFS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_FS_E16: if (CPU.CPU_SetSegGeneralFS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_GS_R16: if (CPU.CPU_SetSegGeneralGS(b.r1.word())) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + case MOV_GS_E16: if (CPU.CPU_SetSegGeneralGS(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount;continue; + + case CBW: reg_eax.word((byte)reg_eax.low()); reg_eip+=b.eipCount;continue; + case CWD: if ((reg_eax.word() & 0x8000)!=0) reg_edx.word(0xffff);else reg_edx.word(0); reg_eip+=b.eipCount;continue; + + case CALL16_AP: + Flags.FillFlags(); + CPU.CPU_CALL(false,b.eaa_const,b.value,(reg_eip+b.eipCount) & 0xFFFF); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; + } + block = null; + break; + case CALL16_EP: + Flags.FillFlags(); + eaa = eaSlow(b); + CPU.CPU_CALL(false,Memory.mem_readw(eaa+2),Memory.mem_readw(eaa),(reg_eip+b.eipCount) & 0xFFFF); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; + } + block = null; + break; + case CALL32_AP: + Flags.FillFlags(); + CPU.CPU_CALL(true,b.eaa_const,b.value,reg_eip+b.eipCount); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; + } + block = null; + break; + case CALL32_EP: + Flags.FillFlags(); + eaa = eaSlow(b); + CPU.CPU_CALL(false,Memory.mem_readw(eaa+4),Memory.mem_readd(eaa),reg_eip+b.eipCount); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; } + block = null; + break; + case PUSHF: if (CPU.CPU_PUSHF(!b.eaa16)) {RUNEXCEPTION(); block=null; break;} reg_eip+=b.eipCount; continue; + case POPF: + if (CPU.CPU_POPF(!b.eaa16)) {RUNEXCEPTION(); block=null; break;} + reg_eip+=b.eipCount; + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; + } + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return Callback.CBRET_NONE; + continue; + case SAHF:Flags.SETFLAGSb(reg_eax.high());reg_eip+=b.eipCount;continue; + case LAHF:Flags.FillFlags();reg_eax.high(CPU_Regs.flags&0xff);reg_eip+=b.eipCount;continue; + case MOV_AL_0b: reg_eax.low(Memory.mem_readb(b.eaa_segPhys.dword+b.value));reg_eip+=b.eipCount;continue; + case MOV_0b_AL: Memory.mem_writeb(b.eaa_segPhys.dword+b.value,reg_eax.low());reg_eip+=b.eipCount;continue; + case MOV_AX_0w: reg_eax.word(Memory.mem_readw(b.eaa_segPhys.dword+b.value));reg_eip+=b.eipCount;continue; + case MOV_0w_AX: Memory.mem_writew(b.eaa_segPhys.dword+b.value,reg_eax.word());reg_eip+=b.eipCount;continue; + case MOVSB16: Strings.Movsb16.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSB16r: Strings.Movsb16r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSB32: Strings.Movsb32.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSB32r: Strings.Movsb32r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSW16: Strings.Movsw16.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSW16r: Strings.Movsw16r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSW32: Strings.Movsw32.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSW32r: Strings.Movsw32r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + + case ROLB_0_flags: { + int value = b.r1.get8(); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 7)) != 0); + reg_eip += b.eipCount; + continue; + } + case ROLB_E8_0_flags: { + int value = Memory.mem_readb(eaSlow(b)); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 7)) != 0); + reg_eip += b.eipCount; + continue; + } - case ROLB_R8: b.r1.set8(Instructions.do_ROLB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case ROLB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_ROLB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + case ROLB_R8: b.r1.set8(Instructions.do_ROLB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case ROLB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_ROLB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; - case RORB_0_flags: { - int value = b.r1.get8(); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>7)!=0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>7) ^ ((value>>>6) & 1))!=0); - reg_eip += b.eipCount; - continue; - } - case RORB_E8_0_flags: { - int value = Memory.mem_readb(eaSlow(b)); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>7)!=0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>7) ^ ((value>>>6) & 1))!=0); - reg_eip += b.eipCount; - continue; + case RORB_0_flags: { + int value = b.r1.get8(); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>7)!=0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>7) ^ ((value>>>6) & 1))!=0); + reg_eip += b.eipCount; + continue; + } + case RORB_E8_0_flags: { + int value = Memory.mem_readb(eaSlow(b)); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>7)!=0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>7) ^ ((value>>>6) & 1))!=0); + reg_eip += b.eipCount; + continue; + } + + // (Eb >>> Ib) | (Eb << (8-Ib)) + case RORB_R8: b.r1.set8(Instructions.do_RORB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case RORB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RORB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + + // (Eb << Ib) |(cf << (Ib-1)) | (Eb >>> (9-Ib)); + case RCLB_R8: b.r1.set8(Instructions.do_RCLB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case RCLB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCLB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + + // (Eb >>> Ib) | (cf << (8-Ib)) | (Eb << (9-Ib)) + case RCRB_R8: b.r1.set8(Instructions.do_RCRB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case RCRB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCRB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + + // Eb << Ib + case SHLB_R8: b.r1.set8(Instructions.do_SHLB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case SHLB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHLB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + + // Eb >>> Ib + case SHRB_R8: b.r1.set8(Instructions.do_SHRB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case SHRB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHRB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + + // Eb >> Ib + case SARB_R8: b.r1.set8(Instructions.do_SARB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; + case SARB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SARB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + + case ROLW_0_flags: { + int value = b.r1.word(); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 15)) != 0); + reg_eip += b.eipCount; + continue; + } + case ROLW_E16_0_flags: { + int value = Memory.mem_readw(eaSlow(b)); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 15)) != 0); + reg_eip += b.eipCount; + continue; + } + + // (Ew << Ib) | (Ew >>> (16-Ib) + case ROLW_R16: b.r1.word(Instructions.do_ROLW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case ROLW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_ROLW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + case RORW_0_flags: { + int value = b.r1.word(); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>15)!=0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>15) ^ ((value>>>14) & 1))!=0); + reg_eip += b.eipCount; + continue; + } + case RORW_E16_0_flags: { + int value = Memory.mem_readw(eaSlow(b)); + FillFlagsNoCFOF(); + CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>15)!=0); + CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>15) ^ ((value>>>14) & 1))!=0); + reg_eip += b.eipCount; + continue; + } + + // (Ew >>> Ib) | (Ew << (16-Ib)) + case RORW_R16: b.r1.word(Instructions.do_RORW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case RORW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RORW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + // (Ew << Ib) |(cf << (Ib-1)) | (Ew >>> (17-Ib)); + case RCLW_R16: b.r1.word(Instructions.do_RCLW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case RCLW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCLW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + // (Ew >>> Ib) | (cf << (16-Ib)) | (Ew << (17-Ib)) + case RCRW_R16: b.r1.word(Instructions.do_RCRW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case RCRW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCRW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + // Ew << Ib + case SHLW_R16: b.r1.word(Instructions.do_SHLW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case SHLW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHLW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + // Ew >>> Ib + case SHRW_R16: b.r1.word(Instructions.do_SHRW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case SHRW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHRW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + // Ew >> Ib + case SARW_R16: b.r1.word(Instructions.do_SARW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; + case SARW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SARW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; + + case RETN16_Iw: reg_eip=CPU.CPU_Pop16(); reg_esp.dword+=b.value; block=null; break; + case RETN16: reg_eip=CPU.CPU_Pop16(); block=null; break; + + case LES16: eaa=eaSlow(b);tmp=Memory.mem_readw(eaa);if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+2))) {RUNEXCEPTION(); block=null; break;} b.r1.word(tmp);reg_eip += b.eipCount;continue; + case LES32: eaa=eaSlow(b);tmp=Memory.mem_readd(eaa);if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+2))) {RUNEXCEPTION(); block=null; break;} b.r1.dword=tmp;reg_eip += b.eipCount;continue; + + case LDS16: eaa=eaSlow(b);tmp=Memory.mem_readw(eaa);if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa + 2))) {RUNEXCEPTION(); block=null; break;} b.r1.word(tmp);reg_eip += b.eipCount;continue; + case LDS32: eaa=eaSlow(b);tmp=Memory.mem_readd(eaa);if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa + 2))) {RUNEXCEPTION(); block=null; break;} b.r1.dword=tmp;reg_eip += b.eipCount;continue; + + case ENTER: CPU.CPU_ENTER(!b.eaa16,b.value,b.eaa_const);reg_eip += b.eipCount;continue; + case LEAVE16:reg_esp.dword&=CPU.cpu.stack.notmask;reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask);reg_ebp.word(CPU.CPU_Pop16());reg_eip += b.eipCount;continue; + case RETF_Iw:Flags.FillFlags();CPU.CPU_RET(!b.eaa16,b.value,reg_eip+b.eipCount);block=null;break; + case INT3:CPU.CPU_SW_Interrupt_NoIOPLCheck(3,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;break; + case INTIb:CPU.CPU_SW_Interrupt(b.value,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;break; + case INTO:if (Flags.get_OF()) {CPU.CPU_SW_Interrupt(4,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;}break; + case IRET: + CPU.CPU_IRET(!b.eaa16, reg_eip+b.eipCount); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; } + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return Callback.CBRET_NONE; + block=null; + break; - // (Eb >>> Ib) | (Eb << (8-Ib)) - case RORB_R8: b.r1.set8(Instructions.do_RORB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case RORB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RORB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + // (Eb << Ib) | (Eb >>> (8-Ib) + case ROLB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_ROLB(b.r1.get8(), tmp2)) b.r1.set8(Instructions.do_ROLB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; + case ROLB_E8_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readb(eaa); if (Instructions.valid_ROLB(tmp, tmp2)) Memory.mem_writeb(eaa, Instructions.do_ROLB(tmp2, tmp));reg_eip += b.eipCount;continue; + + // (Eb >>> Ib) | (Eb << (8-Ib)) + case RORB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RORB(b.r1.get8(), tmp2)) b.r1.set8(Instructions.do_RORB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; + case RORB_E8_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readb(eaa); if (Instructions.valid_RORB(tmp, tmp2)) Memory.mem_writeb(eaa, Instructions.do_RORB(tmp2, tmp));reg_eip += b.eipCount;continue; // (Eb << Ib) |(cf << (Ib-1)) | (Eb >>> (9-Ib)); - case RCLB_R8: b.r1.set8(Instructions.do_RCLB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case RCLB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCLB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + case RCLB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLB(tmp2)) b.r1.set8(Instructions.do_RCLB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; + case RCLB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCLB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; // (Eb >>> Ib) | (cf << (8-Ib)) | (Eb << (9-Ib)) - case RCRB_R8: b.r1.set8(Instructions.do_RCRB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case RCRB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCRB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + case RCRB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRB(tmp2)) b.r1.set8(Instructions.do_RCRB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; + case RCRB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCRB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; // Eb << Ib - case SHLB_R8: b.r1.set8(Instructions.do_SHLB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case SHLB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHLB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + case SHLB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLB(tmp2)) {b.r1.set8(Instructions.do_SHLB(tmp2, b.r1.get8()));}reg_eip += b.eipCount;continue; + case SHLB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHLB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; // Eb >>> Ib - case SHRB_R8: b.r1.set8(Instructions.do_SHRB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case SHRB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHRB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; + case SHRB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRB(tmp2)) {b.r1.set8(Instructions.do_SHRB(tmp2, b.r1.get8()));}reg_eip += b.eipCount;continue; + case SHRB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHRB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; // Eb >> Ib - case SARB_R8: b.r1.set8(Instructions.do_SARB(b.value, b.r1.get8()));reg_eip += b.eipCount;continue; - case SARB_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SARB(b.value, Memory.mem_readb(eaa)));reg_eip += b.eipCount;continue; - - case ROLW_0_flags: { - int value = b.r1.word(); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 15)) != 0); - reg_eip += b.eipCount; - continue; - } - case ROLW_E16_0_flags: { - int value = Memory.mem_readw(eaSlow(b)); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF, (value & 1) != 0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF, ((value & 1) ^ (value >>> 15)) != 0); - reg_eip += b.eipCount; - continue; + case SARB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARB(tmp2)) {b.r1.set8(Instructions.do_SARB(tmp2, b.r1.get8()));}reg_eip += b.eipCount;continue; + case SARB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SARB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; + + // (Ew << CL) | (Ew >>> (16-CL) + case ROLW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_ROLW(b.r1.word(), tmp2)) b.r1.word(Instructions.do_ROLW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; + case ROLW_E16_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readw(eaa); if (Instructions.valid_ROLW(tmp, tmp2)) Memory.mem_writew(eaa, Instructions.do_ROLW(tmp2, tmp));reg_eip += b.eipCount;continue; + + // (Ew >>> CL) | (Ew << (16-CL)) + case RORW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RORW(b.r1.word(), tmp2)) b.r1.word(Instructions.do_RORW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; + case RORW_E16_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readw(eaa); if (Instructions.valid_RORW(tmp, tmp2)) Memory.mem_writew(eaa, Instructions.do_RORW(tmp2, tmp));reg_eip += b.eipCount;continue; + + // (Ew << CL) |(cf << (CL-1)) | (Ew >>> (17-CL)); + case RCLW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLW(tmp2)) b.r1.word(Instructions.do_RCLW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; + case RCLW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCLW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; + + // (Ew >>> CL) | (cf << (16-CL)) | (Ew << (17-CL)) + case RCRW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRW(tmp2)) b.r1.word(Instructions.do_RCRW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; + case RCRW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCRW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; + + // Ew << CL + case SHLW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLW(tmp2)) {b.r1.word(Instructions.do_SHLW(tmp2, b.r1.word()));}reg_eip += b.eipCount;continue; + case SHLW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHLW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; + + // Ew >>> CL + case SHRW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRW(tmp2)) {b.r1.word(Instructions.do_SHRW(tmp2, b.r1.word()));}reg_eip += b.eipCount;continue; + case SHRW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHRW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; + + // Ew >> CL + case SARW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARW(tmp2)) {b.r1.word(Instructions.do_SARW(tmp2, b.r1.word()));}reg_eip += b.eipCount;continue; + case SARW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SARW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; + + case AAM: if (Instructions.AAM(b.value)) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case AAD: Instructions.AAD(b.value); reg_eip += b.eipCount;continue; + case SALC: reg_eax.low(Flags.get_CF() ? 0xFF : 0); reg_eip += b.eipCount;continue; + case XLAT16: reg_eax.low(Memory.mem_readb(b.eaa_segPhys.dword+((reg_ebx.word()+reg_eax.low()) & 0xFFFF))); reg_eip += b.eipCount;continue; + case XLAT32: reg_eax.low(Memory.mem_readb(b.eaa_segPhys.dword+(reg_ebx.dword+reg_eax.low()))); reg_eip += b.eipCount;continue; + case LOOPNZ16_CX: reg_ecx.word(reg_ecx.word()-1);block = jump16(block, reg_ecx.word()!=0 && !Flags.get_ZF(), b.value, b.eipCount);break; + case LOOPNZ16_ECX: reg_ecx.dword--;block = jump16(block, reg_ecx.dword!=0 && !Flags.get_ZF(), b.value, b.eipCount);break; + case LOOPZ16_CX: reg_ecx.word(reg_ecx.word()-1);block = jump16(block, reg_ecx.word()!=0 && Flags.get_ZF(), b.value, b.eipCount);break; + case LOOPZ16_ECX: reg_ecx.dword--;block = jump16(block, reg_ecx.dword!=0 && Flags.get_ZF(), b.value, b.eipCount);break; + case LOOP16_CX: reg_ecx.word(reg_ecx.word()-1);block = jump16(block, reg_ecx.word()!=0, b.value, b.eipCount);break; + case LOOP16_ECX: reg_ecx.dword--;block = jump16(block, reg_ecx.dword!=0, b.value, b.eipCount);break; + case JCXZ16_CX: block = jump16(block, reg_ecx.word()==0, b.value, b.eipCount);break; + case JCXZ16_ECX: block = jump16(block, reg_ecx.dword==0, b.value, b.eipCount);break; + case LOOPNZ32_CX: reg_ecx.word(reg_ecx.word()-1);block = jump32(block, reg_ecx.word() != 0 && !Flags.get_ZF(), b.value, b.eipCount);break; + case LOOPNZ32_ECX: reg_ecx.dword--;block = jump32(block, reg_ecx.dword != 0 && !Flags.get_ZF(), b.value, b.eipCount);break; + case LOOPZ32_CX: reg_ecx.word(reg_ecx.word()-1);block = jump32(block, reg_ecx.word() != 0 && Flags.get_ZF(), b.value, b.eipCount);break; + case LOOPZ32_ECX: reg_ecx.dword--;block = jump32(block, reg_ecx.dword != 0 && Flags.get_ZF(), b.value, b.eipCount);break; + case LOOP32_CX: reg_ecx.word(reg_ecx.word()-1);block = jump32(block, reg_ecx.word() != 0, b.value, b.eipCount);break; + case LOOP32_ECX: reg_ecx.dword--;block = jump32(block, reg_ecx.dword != 0, b.value, b.eipCount);break; + case JCXZ32_CX: block = jump32(block, reg_ecx.word() == 0, b.value, b.eipCount);break; + case JCXZ32_ECX: block = jump32(block, reg_ecx.dword == 0, b.value, b.eipCount);break; + case IN_AL_Ib:if (CPU.CPU_IO_Exception(b.value,1)) {RUNEXCEPTION();block=null;break;} reg_eax.low(IO.IO_ReadB(b.value));reg_eip += b.eipCount;continue; + case IN_AX_Ib:if (CPU.CPU_IO_Exception(b.value,2)) {RUNEXCEPTION();block=null;break;} reg_eax.word(IO.IO_ReadW(b.value));reg_eip += b.eipCount;continue; + case IN_EAX_Ib:if (CPU.CPU_IO_Exception(b.value,4)) {RUNEXCEPTION();block=null;break;} reg_eax.dword=IO.IO_ReadD(b.value);reg_eip += b.eipCount;continue; + case OUT_Ib_AL:if (CPU.CPU_IO_Exception(b.value,1)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteB(b.value,reg_eax.low());reg_eip += b.eipCount;continue; + case OUT_Ib_AX:if (CPU.CPU_IO_Exception(b.value,2)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteW(b.value, reg_eax.word());reg_eip += b.eipCount;continue; + case OUT_Ib_EAX:if (CPU.CPU_IO_Exception(b.value,4)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteD(b.value, reg_eax.dword);reg_eip += b.eipCount;continue; + case CALL16_Jw:CPU.CPU_Push16(reg_eip+b.eipCount);reg_ip(reg_eip+b.eipCount+b.value); block=link1(block); break; + case CALL32_Jd:CPU.CPU_Push32(reg_eip + b.eipCount);reg_eip+=b.eipCount+b.value; block=link1(block); break; + case JMP16:reg_ip(reg_eip+b.eipCount+b.value); block=link1(block); break; + case JMP32:reg_eip+=b.eipCount+b.value; block=link1(block); break; + case JMP_AP: + Flags.FillFlags(); + CPU.CPU_JMP(!b.eaa16,b.eaa_const,b.value,reg_eip+b.eipCount); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; } - - // (Ew << Ib) | (Ew >>> (16-Ib) - case ROLW_R16: b.r1.word(Instructions.do_ROLW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case ROLW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_ROLW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - case RORW_0_flags: { - int value = b.r1.word(); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>15)!=0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>15) ^ ((value>>>14) & 1))!=0); - reg_eip += b.eipCount; - continue; + block=null; + break; + case JMP16_EP: + Flags.FillFlags(); + eaa=eaSlow(b); + CPU.CPU_JMP(false,Memory.mem_readw(eaa+2),Memory.mem_readw(eaa),reg_eip+b.eipCount); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; } - case RORW_E16_0_flags: { - int value = Memory.mem_readw(eaSlow(b)); - FillFlagsNoCFOF(); - CPU_Regs.SETFLAGBIT(CPU_Regs.CF,(value>>15)!=0); - CPU_Regs.SETFLAGBIT(CPU_Regs.OF,((value>>15) ^ ((value>>>14) & 1))!=0); - reg_eip += b.eipCount; - continue; + block=null; + break; + case JMP32_EP: + Flags.FillFlags(); + eaa=eaSlow(b); + CPU.CPU_JMP(false,Memory.mem_readw(eaa+4),Memory.mem_readd(eaa),reg_eip+b.eipCount); + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=CPU_Core_Switch_Trap_Run; + return Callback.CBRET_NONE; } - - // (Ew >>> Ib) | (Ew << (16-Ib)) - case RORW_R16: b.r1.word(Instructions.do_RORW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case RORW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RORW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - // (Ew << Ib) |(cf << (Ib-1)) | (Ew >>> (17-Ib)); - case RCLW_R16: b.r1.word(Instructions.do_RCLW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case RCLW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCLW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - // (Ew >>> Ib) | (cf << (16-Ib)) | (Ew << (17-Ib)) - case RCRW_R16: b.r1.word(Instructions.do_RCRW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case RCRW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCRW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - // Ew << Ib - case SHLW_R16: b.r1.word(Instructions.do_SHLW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case SHLW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHLW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - // Ew >>> Ib - case SHRW_R16: b.r1.word(Instructions.do_SHRW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case SHRW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHRW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - // Ew >> Ib - case SARW_R16: b.r1.word(Instructions.do_SARW(b.value, b.r1.word()));reg_eip += b.eipCount;continue; - case SARW_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SARW(b.value, Memory.mem_readw(eaa)));reg_eip += b.eipCount;continue; - - case RETN16_Iw: reg_eip=CPU.CPU_Pop16(); reg_esp.dword+=b.value; block=null; break; - case RETN16: reg_eip=CPU.CPU_Pop16(); block=null; break; - - case LES16: eaa=eaSlow(b);tmp=Memory.mem_readw(eaa);if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+2))) {RUNEXCEPTION(); block=null; break;} b.r1.word(tmp);reg_eip += b.eipCount;continue; - case LES32: eaa=eaSlow(b);tmp=Memory.mem_readd(eaa);if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+2))) {RUNEXCEPTION(); block=null; break;} b.r1.dword=tmp;reg_eip += b.eipCount;continue; - - case LDS16: eaa=eaSlow(b);tmp=Memory.mem_readw(eaa);if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa + 2))) {RUNEXCEPTION(); block=null; break;} b.r1.word(tmp);reg_eip += b.eipCount;continue; - case LDS32: eaa=eaSlow(b);tmp=Memory.mem_readd(eaa);if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa + 2))) {RUNEXCEPTION(); block=null; break;} b.r1.dword=tmp;reg_eip += b.eipCount;continue; - - case ENTER: CPU.CPU_ENTER(!b.eaa16,b.value,b.eaa_const);reg_eip += b.eipCount;continue; - case LEAVE16:reg_esp.dword&=CPU.cpu.stack.notmask;reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask);reg_ebp.word(CPU.CPU_Pop16());reg_eip += b.eipCount;continue; - case RETF_Iw:Flags.FillFlags();CPU.CPU_RET(!b.eaa16,b.value,reg_eip+b.eipCount);block=null;break; - case INT3:CPU.CPU_SW_Interrupt_NoIOPLCheck(3,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;break; - case INTIb:CPU.CPU_SW_Interrupt(b.value,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;break; - case INTO:if (Flags.get_OF()) {CPU.CPU_SW_Interrupt(4,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;}break; - case IRET: - CPU.CPU_IRET(!b.eaa16, reg_eip+b.eipCount); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return Callback.CBRET_NONE; - block=null; - break; - - // (Eb << Ib) | (Eb >>> (8-Ib) - case ROLB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_ROLB(b.r1.get8(), tmp2)) b.r1.set8(Instructions.do_ROLB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; - case ROLB_E8_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readb(eaa); if (Instructions.valid_ROLB(tmp, tmp2)) Memory.mem_writeb(eaa, Instructions.do_ROLB(tmp2, tmp));reg_eip += b.eipCount;continue; - - // (Eb >>> Ib) | (Eb << (8-Ib)) - case RORB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RORB(b.r1.get8(), tmp2)) b.r1.set8(Instructions.do_RORB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; - case RORB_E8_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readb(eaa); if (Instructions.valid_RORB(tmp, tmp2)) Memory.mem_writeb(eaa, Instructions.do_RORB(tmp2, tmp));reg_eip += b.eipCount;continue; - - // (Eb << Ib) |(cf << (Ib-1)) | (Eb >>> (9-Ib)); - case RCLB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLB(tmp2)) b.r1.set8(Instructions.do_RCLB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; - case RCLB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCLB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; - - // (Eb >>> Ib) | (cf << (8-Ib)) | (Eb << (9-Ib)) - case RCRB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRB(tmp2)) b.r1.set8(Instructions.do_RCRB(tmp2, b.r1.get8()));reg_eip += b.eipCount;continue; - case RCRB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_RCRB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; - - // Eb << Ib - case SHLB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLB(tmp2)) {b.r1.set8(Instructions.do_SHLB(tmp2, b.r1.get8()));}reg_eip += b.eipCount;continue; - case SHLB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHLB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; - - // Eb >>> Ib - case SHRB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRB(tmp2)) {b.r1.set8(Instructions.do_SHRB(tmp2, b.r1.get8()));}reg_eip += b.eipCount;continue; - case SHRB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SHRB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; - - // Eb >> Ib - case SARB_R8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARB(tmp2)) {b.r1.set8(Instructions.do_SARB(tmp2, b.r1.get8()));}reg_eip += b.eipCount;continue; - case SARB_E8_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARB(tmp2)) {eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.do_SARB(tmp2, Memory.mem_readb(eaa)));}reg_eip += b.eipCount;continue; - - // (Ew << CL) | (Ew >>> (16-CL) - case ROLW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_ROLW(b.r1.word(), tmp2)) b.r1.word(Instructions.do_ROLW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; - case ROLW_E16_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readw(eaa); if (Instructions.valid_ROLW(tmp, tmp2)) Memory.mem_writew(eaa, Instructions.do_ROLW(tmp2, tmp));reg_eip += b.eipCount;continue; - - // (Ew >>> CL) | (Ew << (16-CL)) - case RORW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RORW(b.r1.word(), tmp2)) b.r1.word(Instructions.do_RORW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; - case RORW_E16_CL: tmp2=(reg_ecx.dword & 0x1f); eaa=eaSlow(b); tmp=Memory.mem_readw(eaa); if (Instructions.valid_RORW(tmp, tmp2)) Memory.mem_writew(eaa, Instructions.do_RORW(tmp2, tmp));reg_eip += b.eipCount;continue; - - // (Ew << CL) |(cf << (CL-1)) | (Ew >>> (17-CL)); - case RCLW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLW(tmp2)) b.r1.word(Instructions.do_RCLW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; - case RCLW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCLW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCLW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; - - // (Ew >>> CL) | (cf << (16-CL)) | (Ew << (17-CL)) - case RCRW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRW(tmp2)) b.r1.word(Instructions.do_RCRW(tmp2, b.r1.word()));reg_eip += b.eipCount;continue; - case RCRW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_RCRW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_RCRW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; - - // Ew << CL - case SHLW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLW(tmp2)) {b.r1.word(Instructions.do_SHLW(tmp2, b.r1.word()));}reg_eip += b.eipCount;continue; - case SHLW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHLW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHLW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; - - // Ew >>> CL - case SHRW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRW(tmp2)) {b.r1.word(Instructions.do_SHRW(tmp2, b.r1.word()));}reg_eip += b.eipCount;continue; - case SHRW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SHRW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SHRW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; - - // Ew >> CL - case SARW_R16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARW(tmp2)) {b.r1.word(Instructions.do_SARW(tmp2, b.r1.word()));}reg_eip += b.eipCount;continue; - case SARW_E16_CL: tmp2=(reg_ecx.dword & 0x1f);if (Instructions.valid_SARW(tmp2)) {eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.do_SARW(tmp2, Memory.mem_readw(eaa)));}reg_eip += b.eipCount;continue; - - case AAM: if (!Instructions.AAM(b.value)) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case AAD: Instructions.AAD(b.value); reg_eip += b.eipCount;continue; - case SALC: reg_eax.low(Flags.get_CF() ? 0xFF : 0); reg_eip += b.eipCount;continue; - case XLAT16: reg_eax.low(Memory.mem_readb(b.eaa_segPhys.dword+((reg_ebx.word()+reg_eax.low()) & 0xFFFF))); reg_eip += b.eipCount;continue; - case XLAT32: reg_eax.low(Memory.mem_readb(b.eaa_segPhys.dword+(reg_ebx.dword+reg_eax.low()))); reg_eip += b.eipCount;continue; - case LOOPNZ16_CX: reg_ecx.word(reg_ecx.word()-1);block = jump16(block, reg_ecx.word()!=0 && !Flags.get_ZF(), b.value, b.eipCount);break; - case LOOPNZ16_ECX: reg_ecx.dword--;block = jump16(block, reg_ecx.dword!=0 && !Flags.get_ZF(), b.value, b.eipCount);break; - case LOOPZ16_CX: reg_ecx.word(reg_ecx.word()-1);block = jump16(block, reg_ecx.word()!=0 && Flags.get_ZF(), b.value, b.eipCount);break; - case LOOPZ16_ECX: reg_ecx.dword--;block = jump16(block, reg_ecx.dword!=0 && Flags.get_ZF(), b.value, b.eipCount);break; - case LOOP16_CX: reg_ecx.word(reg_ecx.word()-1);block = jump16(block, reg_ecx.word()!=0, b.value, b.eipCount);break; - case LOOP16_ECX: reg_ecx.dword--;block = jump16(block, reg_ecx.dword!=0, b.value, b.eipCount);break; - case JCXZ16_CX: block = jump16(block, reg_ecx.word()==0, b.value, b.eipCount);break; - case JCXZ16_ECX: block = jump16(block, reg_ecx.dword==0, b.value, b.eipCount);break; - case LOOPNZ32_CX: reg_ecx.word(reg_ecx.word()-1);block = jump32(block, reg_ecx.word() != 0 && !Flags.get_ZF(), b.value, b.eipCount);break; - case LOOPNZ32_ECX: reg_ecx.dword--;block = jump32(block, reg_ecx.dword != 0 && !Flags.get_ZF(), b.value, b.eipCount);break; - case LOOPZ32_CX: reg_ecx.word(reg_ecx.word()-1);block = jump32(block, reg_ecx.word() != 0 && Flags.get_ZF(), b.value, b.eipCount);break; - case LOOPZ32_ECX: reg_ecx.dword--;block = jump32(block, reg_ecx.dword != 0 && Flags.get_ZF(), b.value, b.eipCount);break; - case LOOP32_CX: reg_ecx.word(reg_ecx.word()-1);block = jump32(block, reg_ecx.word() != 0, b.value, b.eipCount);break; - case LOOP32_ECX: reg_ecx.dword--;block = jump32(block, reg_ecx.dword != 0, b.value, b.eipCount);break; - case JCXZ32_CX: block = jump32(block, reg_ecx.word() == 0, b.value, b.eipCount);break; - case JCXZ32_ECX: block = jump32(block, reg_ecx.dword == 0, b.value, b.eipCount);break; - case IN_AL_Ib:if (CPU.CPU_IO_Exception(b.value,1)) {RUNEXCEPTION();block=null;break;} reg_eax.low(IO.IO_ReadB(b.value));reg_eip += b.eipCount;continue; - case IN_AX_Ib:if (CPU.CPU_IO_Exception(b.value,2)) {RUNEXCEPTION();block=null;break;} reg_eax.word(IO.IO_ReadW(b.value));reg_eip += b.eipCount;continue; - case IN_EAX_Ib:if (CPU.CPU_IO_Exception(b.value,4)) {RUNEXCEPTION();block=null;break;} reg_eax.dword=IO.IO_ReadD(b.value);reg_eip += b.eipCount;continue; - case OUT_Ib_AL:if (CPU.CPU_IO_Exception(b.value,1)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteB(b.value,reg_eax.low());reg_eip += b.eipCount;continue; - case OUT_Ib_AX:if (CPU.CPU_IO_Exception(b.value,2)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteW(b.value, reg_eax.word());reg_eip += b.eipCount;continue; - case OUT_Ib_EAX:if (CPU.CPU_IO_Exception(b.value,4)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteD(b.value, reg_eax.dword);reg_eip += b.eipCount;continue; - case CALL16_Jw:CPU.CPU_Push16(reg_eip+b.eipCount);reg_ip(reg_eip+b.eipCount+b.value); block=link1(block); break; - case CALL32_Jd:CPU.CPU_Push32(reg_eip + b.eipCount);reg_eip+=b.eipCount+b.value; block=link1(block); break; - case JMP16:reg_ip(reg_eip+b.eipCount+b.value); block=link1(block); break; - case JMP32:reg_eip+=b.eipCount+b.value; block=link1(block); break; - case JMP_AP: - Flags.FillFlags(); - CPU.CPU_JMP(!b.eaa16,b.eaa_const,b.value,reg_eip+b.eipCount); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } - block=null; - break; - case JMP16_EP: - Flags.FillFlags(); - eaa=eaSlow(b); - CPU.CPU_JMP(false,Memory.mem_readw(eaa+2),Memory.mem_readw(eaa),reg_eip+b.eipCount); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } - block=null; - break; - case JMP32_EP: - Flags.FillFlags(); - eaa=eaSlow(b); - CPU.CPU_JMP(false,Memory.mem_readw(eaa+4),Memory.mem_readd(eaa),reg_eip+b.eipCount); - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=CPU_Core_Switch_Trap_Run; - return Callback.CBRET_NONE; - } - block=null; - break; - case IN_AL_DX:if (CPU.CPU_IO_Exception(reg_edx.word(),1)) {RUNEXCEPTION();block=null;break;} reg_eax.low(IO.IO_ReadB(reg_edx.word()));reg_eip += b.eipCount;continue; - case IN_AX_DX:if (CPU.CPU_IO_Exception(reg_edx.word(),2)) {RUNEXCEPTION();block=null;break;} reg_eax.word(IO.IO_ReadW(reg_edx.word()));reg_eip += b.eipCount;continue; - case IN_EAX_DX:if (CPU.CPU_IO_Exception(reg_edx.word(),4)) {RUNEXCEPTION();block=null;break;} reg_eax.dword=IO.IO_ReadD(reg_edx.word());reg_eip += b.eipCount;continue; - case OUT_DX_AL:if (CPU.CPU_IO_Exception(reg_edx.word(),1)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteB(reg_edx.word(),reg_eax.low());reg_eip += b.eipCount;continue; - case OUT_DX_AX:if (CPU.CPU_IO_Exception(reg_edx.word(),2)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteW(reg_edx.word(),reg_eax.word());reg_eip += b.eipCount;continue; - case OUT_DX_EAX:if (CPU.CPU_IO_Exception(reg_edx.word(),4)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteD(reg_edx.word(), reg_eax.dword);reg_eip += b.eipCount;continue; - case ICEBP:CPU.CPU_SW_Interrupt_NoIOPLCheck(1,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;break; - case HLT: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}Flags.FillFlags();CPU.CPU_HLT(reg_eip+b.eipCount);return Callback.CBRET_NONE; - case CMC: Flags.FillFlags(); SETFLAGBIT(CF,(CPU_Regs.flags & CPU_Regs.CF)==0);reg_eip += b.eipCount;continue; - case NOT_R8: b.r1.set8(~b.r1.get8());reg_eip+=b.eipCount;continue; - case NOT_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, ~Memory.mem_readb(eaa));reg_eip+=b.eipCount;continue; - case NOT_R16: b.r1.word(~b.r1.word());reg_eip+=b.eipCount;continue; - case NOT_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, ~Memory.mem_readw(eaa));reg_eip+=b.eipCount;continue; - case NOT_R32: b.r1.dword=~b.r1.dword;reg_eip+=b.eipCount;continue; - case NOT_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, ~Memory.mem_readd(eaa));reg_eip+=b.eipCount;continue; - - case NEG_R8: b.r1.set8(Instructions.Negb(b.r1.get8()));reg_eip+=b.eipCount;continue; - case NEG_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.Negb(Memory.mem_readb(eaa)));reg_eip+=b.eipCount;continue; - case NEG_R16: b.r1.word(Instructions.Negw(b.r1.word()));reg_eip+=b.eipCount;continue; - case NEG_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.Negw(Memory.mem_readw(eaa)));reg_eip+=b.eipCount;continue; - case NEG_R32: b.r1.dword=Instructions.Negd(b.r1.dword);reg_eip+=b.eipCount;continue; - case NEG_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.Negd(Memory.mem_readd(eaa)));reg_eip+=b.eipCount;continue; - - case MUL_R8: Instructions.MULB(b.r1.get8());reg_eip+=b.eipCount;continue; - case MUL_E8: Instructions.MULB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; - case MUL_R16: Instructions.MULW(b.r1.word());reg_eip+=b.eipCount;continue; - case MUL_E16: Instructions.MULW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; - case MUL_R32: Instructions.MULD(b.r1.dword);reg_eip+=b.eipCount;continue; - case MUL_E32: Instructions.MULD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; - - case IMUL_R8: Instructions.IMULB(b.r1.get8());reg_eip+=b.eipCount;continue; - case IMUL_E8: Instructions.IMULB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; - case IMUL_R16: Instructions.IMULW(b.r1.word());reg_eip+=b.eipCount;continue; - case IMUL_E16: Instructions.IMULW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; - case IMUL_R32: Instructions.IMULD(b.r1.dword);reg_eip+=b.eipCount;continue; - case IMUL_E32: Instructions.IMULD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; - - case DIV_R8: Instructions.DIVB(b.r1.get8());reg_eip+=b.eipCount;continue; - case DIV_E8: Instructions.DIVB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; - case DIV_R16: Instructions.DIVW(b.r1.word());reg_eip+=b.eipCount;continue; - case DIV_E16: Instructions.DIVW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; - case DIV_R32: Instructions.DIVD(b.r1.dword);reg_eip+=b.eipCount;continue; - case DIV_E32: Instructions.DIVD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; - - case IDIV_R8: Instructions.IDIVB(b.r1.get8());reg_eip+=b.eipCount;continue; - case IDIV_E8: Instructions.IDIVB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; - case IDIV_R16: Instructions.IDIVW(b.r1.word());reg_eip+=b.eipCount;continue; - case IDIV_E16: Instructions.IDIVW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; - case IDIV_R32: Instructions.IDIVD(b.r1.dword);reg_eip+=b.eipCount;continue; - case IDIV_E32: Instructions.IDIVD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; - - case CLC:Flags.FillFlags();SETFLAGBIT(CF,false);reg_eip+=b.eipCount;continue; - case STC:Flags.FillFlags();SETFLAGBIT(CF,true);reg_eip+=b.eipCount;continue; - case CLI:if (CPU.CPU_CLI()) {RUNEXCEPTION();block=null;break;}reg_eip+=b.eipCount;continue; - case STI:if (CPU.CPU_STI()) {RUNEXCEPTION();block=null;break;}reg_eip+=b.eipCount;if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) {Flags.FillFlags();return Callback.CBRET_NONE;} continue; - case CLD:SETFLAGBIT(DF,false); CPU.cpu.direction=1;reg_eip+=b.eipCount;continue; - case STD:SETFLAGBIT(DF,true); CPU.cpu.direction=-1;reg_eip+=b.eipCount;continue; - - case INC_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.INCB(Memory.mem_readb(eaa)));reg_eip+=b.eipCount;continue; - case INC_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.INCW(Memory.mem_readw(eaa)));reg_eip+=b.eipCount;continue; - case INC_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.INCD(Memory.mem_readd(eaa)));reg_eip+=b.eipCount;continue; - - case DEC_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.DECB(Memory.mem_readb(eaa)));reg_eip+=b.eipCount;continue; - case DEC_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.DECW(Memory.mem_readw(eaa)));reg_eip+=b.eipCount;continue; - case DEC_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.DECD(Memory.mem_readd(eaa)));reg_eip+=b.eipCount;continue; - case CALLBACK: reg_eip+=b.eipCount; return b.value; - case CALL16_R16: tmp = reg_eip+b.eipCount; CPU.CPU_Push16(tmp);reg_eip=b.r1.word();block=null;break; - case CALL16_E16: tmp = reg_eip+b.eipCount; tmp2=Memory.mem_readw(eaSlow(b));CPU.CPU_Push16(tmp);reg_eip=tmp2;block=null;break; - case CALL32_R16: tmp = reg_eip+b.eipCount; CPU.CPU_Push32(tmp);reg_eip=b.r1.word();block=null;break; - case CALL32_E16: tmp = reg_eip+b.eipCount; tmp2=Memory.mem_readd(eaSlow(b));CPU.CPU_Push32(tmp);reg_eip=tmp2;block=null;break; - case CALL16_EP_E16: eaa=eaSlow(b);CPU.CPU_CALL(false, Memory.mem_readw(eaa+2), Memory.mem_readw(eaa), reg_eip+b.eipCount);block=null;break; - case CALL32_EP_E32: eaa=eaSlow(b);CPU.CPU_CALL(true, Memory.mem_readw(eaa+4), Memory.mem_readd(eaa), reg_eip+b.eipCount);block=null;break; - case JMP16_R16: reg_eip=b.r1.word();block=null;break; - case JMP16_E16: reg_eip=Memory.mem_readw(eaSlow(b));block=null;break; - case JMP32_R32: reg_eip=b.r1.dword;block=null;break; - case JMP32_E32: reg_eip=Memory.mem_readd(eaSlow(b));block=null;break; - - case IMUL_R32_R32: b.r2.dword=Instructions.DIMULD(b.r1.dword, b.value); reg_eip+=b.eipCount; continue; - case IMUL_R32_E32: b.r1.dword=Instructions.DIMULD(Memory.mem_readd(eaSlow(b)), b.value); reg_eip+=b.eipCount; continue; - - case JUMP32_JO: block = jump32(block, Flags.TFLG_O(), b.value, b.eipCount); break; - case JUMP32_NJO: block = jump32(block, Flags.TFLG_NO(), b.value, b.eipCount); break; - case JUMP32_B: block = jump32(block, Flags.TFLG_B(), b.value, b.eipCount); break; - case JUMP32_NB: block = jump32(block, Flags.TFLG_NB(), b.value, b.eipCount); break; - case JUMP32_Z: block = jump32(block, Flags.TFLG_Z(), b.value, b.eipCount); break; - case JUMP32_NZ: block = jump32(block, Flags.TFLG_NZ(), b.value, b.eipCount); break; - case JUMP32_BE: block = jump32(block, Flags.TFLG_BE(), b.value, b.eipCount); break; - case JUMP32_NBE: block = jump32(block, Flags.TFLG_NBE(), b.value, b.eipCount); break; - case JUMP32_S: block = jump32(block, Flags.TFLG_S(), b.value, b.eipCount); break; - case JUMP32_NS: block = jump32(block, Flags.TFLG_NS(), b.value, b.eipCount); break; - case JUMP32_P: block = jump32(block, Flags.TFLG_P(), b.value, b.eipCount); break; - case JUMP32_NP: block = jump32(block, Flags.TFLG_NP(), b.value, b.eipCount); break; - case JUMP32_L: block = jump32(block, Flags.TFLG_L(), b.value, b.eipCount); break; - case JUMP32_NL: block = jump32(block, Flags.TFLG_NL(), b.value, b.eipCount); break; - case JUMP32_LE: block = jump32(block, Flags.TFLG_LE(), b.value, b.eipCount); break; - case JUMP32_NLE: block = jump32(block, Flags.TFLG_NLE(), b.value, b.eipCount); break; - case CBWE: reg_eax.dword=(short)reg_eax.word();reg_eip+=b.eipCount; continue; - case CDQ: if ((reg_eax.dword & 0x80000000)!=0) reg_edx.dword=0xffffffff; else reg_edx.dword=0;reg_eip+=b.eipCount; continue; - case MOV_EAX_0d: reg_eax.dword=Memory.mem_readd(b.eaa_segPhys.dword+b.value);reg_eip+=b.eipCount;continue; - case MOV_0d_EAX: Memory.mem_writed(b.eaa_segPhys.dword+b.value,reg_eax.dword);reg_eip+=b.eipCount;continue; - case MOVSD16: Strings.Movsd16.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSD16r: Strings.Movsd16r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSD32: Strings.Movsd32.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - case MOVSD32r: Strings.Movsd32r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; - - // (Ew << Ib) | (Ew >>> (32-Ib) - case ROLD_R32: b.r1.dword=Instructions.ROLD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case ROLD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.ROLD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // (Ew >>> Ib) | (Ew << (32-Ib)) - case RORD_R32: b.r1.dword=Instructions.RORD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case RORD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RORD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // (Ew << Ib) |(cf << (Ib-1)) | (Ew >>> (33-Ib)); - case RCLD_R32: b.r1.dword=Instructions.RCLD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case RCLD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCLD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // (Ew >>> Ib) | (cf << (32-Ib)) | (Ew << (33-Ib)) - case RCRD_R32: b.r1.dword=Instructions.RCRD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case RCRD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCRD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // Ew << Ib - case SHLD_R32: b.r1.dword=Instructions.SHLD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case SHLD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHLD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // Ew >>> Ib - case SHRD_R32: b.r1.dword=Instructions.SHRD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case SHRD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHRD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // Ew >> Ib - case SARD_R32: b.r1.dword=Instructions.SARD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; - case SARD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SARD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; - - // (Ew << CL) | (Ew >>> (32-CL) - case ROLD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.ROLD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case ROLD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b); tmp=Memory.mem_readd(eaa); Memory.mem_writed(eaa, Instructions.ROLD(tmp2, tmp));}reg_eip += b.eipCount;continue; - - // (Ew >>> CL) | (Ew << (32-CL)) - case RORD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.RORD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case RORD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b); tmp=Memory.mem_readd(eaa); Memory.mem_writed(eaa, Instructions.RORD(tmp2, tmp));}reg_eip += b.eipCount;continue; - - // (Ew << CL) |(cf << (CL-1)) | (Ew >>> (33-CL)); - case RCLD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.RCLD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case RCLD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCLD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; - - // (Ew >>> CL) | (cf << (32-CL)) | (Ew << (33-CL)) - case RCRD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.RCRD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case RCRD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCRD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; - - // Ew << CL - case SHLD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.SHLD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case SHLD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHLD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; - - // Ew >>> CL - case SHRD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.SHRD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case SHRD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHRD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; - - // Ew >> CL - case SARD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.SARD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; - case SARD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SARD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; - - case RETN32_Iw: reg_eip=CPU.CPU_Pop32(); reg_esp.dword+=b.value; block=null; break; - case RETN32: reg_eip=CPU.CPU_Pop32(); block=null; break; - case LEAVE32:reg_esp.dword&=CPU.cpu.stack.notmask;reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask);reg_ebp.dword=CPU.CPU_Pop32();reg_eip += b.eipCount;continue; - case SLDT_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} b.r1.word(CPU.CPU_SLDT());reg_eip += b.eipCount;continue; - case SLDT_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} Memory.mem_writew(eaSlow(b), CPU.CPU_SLDT());reg_eip += b.eipCount;continue; - case STR_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} b.r1.word(CPU.CPU_STR());reg_eip += b.eipCount;continue; - case STR_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} Memory.mem_writew(eaSlow(b), CPU.CPU_STR());reg_eip += b.eipCount;continue; - case LLDT_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LLDT(b.r1.word())) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case LLDT_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LLDT(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case LTR_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LTR(b.r1.word())) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case LTR_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LTR(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case VERR_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERR(b.r1.word());reg_eip += b.eipCount;continue; - case VERR_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERR(Memory.mem_readw(eaSlow(b)));reg_eip += b.eipCount;continue; - case VERW_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERW(b.r1.word());reg_eip += b.eipCount;continue; - case VERW_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERW(Memory.mem_readw(eaSlow(b)));reg_eip += b.eipCount;continue; - case SGDT: eaa=eaSlow(b); Memory.mem_writew(eaa,CPU.CPU_SGDT_limit()); Memory.mem_writed(eaa+2,CPU.CPU_SGDT_base());reg_eip += b.eipCount;continue; - case SIDT: eaa=eaSlow(b); Memory.mem_writew(eaa,CPU.CPU_SIDT_limit()); Memory.mem_writed(eaa+2,CPU.CPU_SIDT_base());reg_eip += b.eipCount;continue; - case LGDT16: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LGDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2) & 0xFFFFFF);reg_eip += b.eipCount;continue; - case LGDT32: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LGDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2));reg_eip += b.eipCount;continue; - case LIDT16: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LIDT(Memory.mem_readw(eaa), Memory.mem_readd(eaa + 2) & 0xFFFFFF);reg_eip += b.eipCount;continue; - case LIDT32: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LIDT(Memory.mem_readw(eaa), Memory.mem_readd(eaa + 2));reg_eip += b.eipCount;continue; - case SMSW_E16: Memory.mem_writew(eaSlow(b),CPU.CPU_SMSW() & 0xFFFF);reg_eip += b.eipCount;continue; - case LMSW_E16: if (CPU.CPU_LMSW(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case INVLPG: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} Paging.PAGING_ClearTLB();reg_eip += b.eipCount;continue; - case LGDT_R: - case LIDT_R: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} CPU.CPU_Exception(6,0); block = null; break; - case SMSW_R16: b.r1.word(CPU.CPU_SMSW() & 0xFFFF);reg_eip += b.eipCount;continue; - case LMSW_R16: if (CPU.CPU_LMSW(b.r1.word())) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; - case SMSW_R32: b.r1.dword=CPU.CPU_SMSW();reg_eip += b.eipCount;continue; - - case FPU0_normal: FPU.FPU_ESC0_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU0_ea: FPU.FPU_ESC0_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU1_normal: FPU.FPU_ESC1_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU1_ea: FPU.FPU_ESC1_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU2_normal: FPU.FPU_ESC2_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU2_ea: FPU.FPU_ESC2_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU3_normal: FPU.FPU_ESC3_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU3_ea: FPU.FPU_ESC3_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU4_normal: FPU.FPU_ESC4_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU4_ea: FPU.FPU_ESC4_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU5_normal: FPU.FPU_ESC5_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU5_ea: FPU.FPU_ESC5_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU6_normal: FPU.FPU_ESC6_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU6_ea: FPU.FPU_ESC6_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case FPU7_normal: FPU.FPU_ESC7_Normal(b.value);reg_eip += b.eipCount;continue; - case FPU7_ea: FPU.FPU_ESC7_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; - case MODIFIED: tmp = ModifiedDecode.call();if (tmp==Constants.BR_CallBack) {Flags.FillFlags(); return Data.callback; } block=null;break; - } - break; + block=null; + break; + case IN_AL_DX:if (CPU.CPU_IO_Exception(reg_edx.word(),1)) {RUNEXCEPTION();block=null;break;} reg_eax.low(IO.IO_ReadB(reg_edx.word()));reg_eip += b.eipCount;continue; + case IN_AX_DX:if (CPU.CPU_IO_Exception(reg_edx.word(),2)) {RUNEXCEPTION();block=null;break;} reg_eax.word(IO.IO_ReadW(reg_edx.word()));reg_eip += b.eipCount;continue; + case IN_EAX_DX:if (CPU.CPU_IO_Exception(reg_edx.word(),4)) {RUNEXCEPTION();block=null;break;} reg_eax.dword=IO.IO_ReadD(reg_edx.word());reg_eip += b.eipCount;continue; + case OUT_DX_AL:if (CPU.CPU_IO_Exception(reg_edx.word(),1)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteB(reg_edx.word(),reg_eax.low());reg_eip += b.eipCount;continue; + case OUT_DX_AX:if (CPU.CPU_IO_Exception(reg_edx.word(),2)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteW(reg_edx.word(),reg_eax.word());reg_eip += b.eipCount;continue; + case OUT_DX_EAX:if (CPU.CPU_IO_Exception(reg_edx.word(),4)) {RUNEXCEPTION();block=null;break;} IO.IO_WriteD(reg_edx.word(), reg_eax.dword);reg_eip += b.eipCount;continue; + case ICEBP:CPU.CPU_SW_Interrupt_NoIOPLCheck(1,reg_eip+b.eipCount);CPU.cpu.trap_skip=true;block=null;break; + case HLT: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}Flags.FillFlags();CPU.CPU_HLT(reg_eip+b.eipCount);return Callback.CBRET_NONE; + case CMC: Flags.FillFlags(); SETFLAGBIT(CF,(CPU_Regs.flags & CPU_Regs.CF)==0);reg_eip += b.eipCount;continue; + case NOT_R8: b.r1.set8(~b.r1.get8());reg_eip+=b.eipCount;continue; + case NOT_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, ~Memory.mem_readb(eaa));reg_eip+=b.eipCount;continue; + case NOT_R16: b.r1.word(~b.r1.word());reg_eip+=b.eipCount;continue; + case NOT_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, ~Memory.mem_readw(eaa));reg_eip+=b.eipCount;continue; + case NOT_R32: b.r1.dword=~b.r1.dword;reg_eip+=b.eipCount;continue; + case NOT_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, ~Memory.mem_readd(eaa));reg_eip+=b.eipCount;continue; + + case NEG_R8: b.r1.set8(Instructions.Negb(b.r1.get8()));reg_eip+=b.eipCount;continue; + case NEG_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.Negb(Memory.mem_readb(eaa)));reg_eip+=b.eipCount;continue; + case NEG_R16: b.r1.word(Instructions.Negw(b.r1.word()));reg_eip+=b.eipCount;continue; + case NEG_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.Negw(Memory.mem_readw(eaa)));reg_eip+=b.eipCount;continue; + case NEG_R32: b.r1.dword=Instructions.Negd(b.r1.dword);reg_eip+=b.eipCount;continue; + case NEG_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.Negd(Memory.mem_readd(eaa)));reg_eip+=b.eipCount;continue; + + case MUL_R8: Instructions.MULB(b.r1.get8());reg_eip+=b.eipCount;continue; + case MUL_E8: Instructions.MULB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; + case MUL_R16: Instructions.MULW(b.r1.word());reg_eip+=b.eipCount;continue; + case MUL_E16: Instructions.MULW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; + case MUL_R32: Instructions.MULD(b.r1.dword);reg_eip+=b.eipCount;continue; + case MUL_E32: Instructions.MULD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; + + case IMUL_R8: Instructions.IMULB(b.r1.get8());reg_eip+=b.eipCount;continue; + case IMUL_E8: Instructions.IMULB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; + case IMUL_R16: Instructions.IMULW(b.r1.word());reg_eip+=b.eipCount;continue; + case IMUL_E16: Instructions.IMULW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; + case IMUL_R32: Instructions.IMULD(b.r1.dword);reg_eip+=b.eipCount;continue; + case IMUL_E32: Instructions.IMULD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; + + case DIV_R8: Instructions.DIVB(b.r1.get8());reg_eip+=b.eipCount;continue; + case DIV_E8: Instructions.DIVB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; + case DIV_R16: Instructions.DIVW(b.r1.word());reg_eip+=b.eipCount;continue; + case DIV_E16: Instructions.DIVW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; + case DIV_R32: Instructions.DIVD(b.r1.dword);reg_eip+=b.eipCount;continue; + case DIV_E32: Instructions.DIVD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; + + case IDIV_R8: Instructions.IDIVB(b.r1.get8());reg_eip+=b.eipCount;continue; + case IDIV_E8: Instructions.IDIVB(Memory.mem_readb(eaSlow(b)));reg_eip+=b.eipCount;continue; + case IDIV_R16: Instructions.IDIVW(b.r1.word());reg_eip+=b.eipCount;continue; + case IDIV_E16: Instructions.IDIVW(Memory.mem_readw(eaSlow(b)));reg_eip+=b.eipCount;continue; + case IDIV_R32: Instructions.IDIVD(b.r1.dword);reg_eip+=b.eipCount;continue; + case IDIV_E32: Instructions.IDIVD(Memory.mem_readd(eaSlow(b)));reg_eip+=b.eipCount;continue; + + case CLC:Flags.FillFlags();SETFLAGBIT(CF,false);reg_eip+=b.eipCount;continue; + case STC:Flags.FillFlags();SETFLAGBIT(CF,true);reg_eip+=b.eipCount;continue; + case CLI:if (CPU.CPU_CLI()) {RUNEXCEPTION();block=null;break;}reg_eip+=b.eipCount;continue; + case STI:if (CPU.CPU_STI()) {RUNEXCEPTION();block=null;break;}reg_eip+=b.eipCount;if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) {Flags.FillFlags();return Callback.CBRET_NONE;} continue; + case CLD:SETFLAGBIT(DF,false); CPU.cpu.direction=1;reg_eip+=b.eipCount;continue; + case STD:SETFLAGBIT(DF,true); CPU.cpu.direction=-1;reg_eip+=b.eipCount;continue; + + case INC_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.INCB(Memory.mem_readb(eaa)));reg_eip+=b.eipCount;continue; + case INC_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.INCW(Memory.mem_readw(eaa)));reg_eip+=b.eipCount;continue; + case INC_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.INCD(Memory.mem_readd(eaa)));reg_eip+=b.eipCount;continue; + + case DEC_E8: eaa=eaSlow(b);Memory.mem_writeb(eaa, Instructions.DECB(Memory.mem_readb(eaa)));reg_eip+=b.eipCount;continue; + case DEC_E16: eaa=eaSlow(b);Memory.mem_writew(eaa, Instructions.DECW(Memory.mem_readw(eaa)));reg_eip+=b.eipCount;continue; + case DEC_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.DECD(Memory.mem_readd(eaa)));reg_eip+=b.eipCount;continue; + case CALLBACK: reg_eip+=b.eipCount; return b.value; + case CALL16_R16: tmp = reg_eip+b.eipCount; CPU.CPU_Push16(tmp);reg_eip=b.r1.word();block=null;break; + case CALL16_E16: tmp = reg_eip+b.eipCount; tmp2=Memory.mem_readw(eaSlow(b));CPU.CPU_Push16(tmp);reg_eip=tmp2;block=null;break; + case CALL32_R16: tmp = reg_eip+b.eipCount; CPU.CPU_Push32(tmp);reg_eip=b.r1.word();block=null;break; + case CALL32_E16: tmp = reg_eip+b.eipCount; tmp2=Memory.mem_readd(eaSlow(b));CPU.CPU_Push32(tmp);reg_eip=tmp2;block=null;break; + case CALL16_EP_E16: eaa=eaSlow(b);CPU.CPU_CALL(false, Memory.mem_readw(eaa+2), Memory.mem_readw(eaa), reg_eip+b.eipCount);block=null;break; + case CALL32_EP_E32: eaa=eaSlow(b);CPU.CPU_CALL(true, Memory.mem_readw(eaa+4), Memory.mem_readd(eaa), reg_eip+b.eipCount);block=null;break; + case JMP16_R16: reg_eip=b.r1.word();block=null;break; + case JMP16_E16: reg_eip=Memory.mem_readw(eaSlow(b));block=null;break; + case JMP32_R32: reg_eip=b.r1.dword;block=null;break; + case JMP32_E32: reg_eip=Memory.mem_readd(eaSlow(b));block=null;break; + + case IMUL_R32_R32: b.r2.dword=Instructions.DIMULD(b.r1.dword, b.value); reg_eip+=b.eipCount; continue; + case IMUL_R32_E32: b.r1.dword=Instructions.DIMULD(Memory.mem_readd(eaSlow(b)), b.value); reg_eip+=b.eipCount; continue; + + case JUMP32_JO: block = jump32(block, Flags.TFLG_O(), b.value, b.eipCount); break; + case JUMP32_NJO: block = jump32(block, Flags.TFLG_NO(), b.value, b.eipCount); break; + case JUMP32_B: block = jump32(block, Flags.TFLG_B(), b.value, b.eipCount); break; + case JUMP32_NB: block = jump32(block, Flags.TFLG_NB(), b.value, b.eipCount); break; + case JUMP32_Z: block = jump32(block, Flags.TFLG_Z(), b.value, b.eipCount); break; + case JUMP32_NZ: block = jump32(block, Flags.TFLG_NZ(), b.value, b.eipCount); break; + case JUMP32_BE: block = jump32(block, Flags.TFLG_BE(), b.value, b.eipCount); break; + case JUMP32_NBE: block = jump32(block, Flags.TFLG_NBE(), b.value, b.eipCount); break; + case JUMP32_S: block = jump32(block, Flags.TFLG_S(), b.value, b.eipCount); break; + case JUMP32_NS: block = jump32(block, Flags.TFLG_NS(), b.value, b.eipCount); break; + case JUMP32_P: block = jump32(block, Flags.TFLG_P(), b.value, b.eipCount); break; + case JUMP32_NP: block = jump32(block, Flags.TFLG_NP(), b.value, b.eipCount); break; + case JUMP32_L: block = jump32(block, Flags.TFLG_L(), b.value, b.eipCount); break; + case JUMP32_NL: block = jump32(block, Flags.TFLG_NL(), b.value, b.eipCount); break; + case JUMP32_LE: block = jump32(block, Flags.TFLG_LE(), b.value, b.eipCount); break; + case JUMP32_NLE: block = jump32(block, Flags.TFLG_NLE(), b.value, b.eipCount); break; + case CBWE: reg_eax.dword=(short)reg_eax.word();reg_eip+=b.eipCount; continue; + case CDQ: if ((reg_eax.dword & 0x80000000)!=0) reg_edx.dword=0xffffffff; else reg_edx.dword=0;reg_eip+=b.eipCount; continue; + case MOV_EAX_0d: reg_eax.dword=Memory.mem_readd(b.eaa_segPhys.dword+b.value);reg_eip+=b.eipCount;continue; + case MOV_0d_EAX: Memory.mem_writed(b.eaa_segPhys.dword+b.value,reg_eax.dword);reg_eip+=b.eipCount;continue; + case MOVSD16: Strings.Movsd16.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSD16r: Strings.Movsd16r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSD32: Strings.Movsd32.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + case MOVSD32r: Strings.Movsd32r.doString(b.eaa_segPhys.dword);reg_eip+=b.eipCount;continue; + + // (Ew << Ib) | (Ew >>> (32-Ib) + case ROLD_R32: b.r1.dword=Instructions.ROLD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case ROLD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.ROLD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // (Ew >>> Ib) | (Ew << (32-Ib)) + case RORD_R32: b.r1.dword=Instructions.RORD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case RORD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RORD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // (Ew << Ib) |(cf << (Ib-1)) | (Ew >>> (33-Ib)); + case RCLD_R32: b.r1.dword=Instructions.RCLD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case RCLD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCLD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // (Ew >>> Ib) | (cf << (32-Ib)) | (Ew << (33-Ib)) + case RCRD_R32: b.r1.dword=Instructions.RCRD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case RCRD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCRD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // Ew << Ib + case SHLD_R32: b.r1.dword=Instructions.SHLD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case SHLD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHLD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // Ew >>> Ib + case SHRD_R32: b.r1.dword=Instructions.SHRD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case SHRD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHRD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // Ew >> Ib + case SARD_R32: b.r1.dword=Instructions.SARD(b.value, b.r1.dword);reg_eip += b.eipCount;continue; + case SARD_E32: eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SARD(b.value, Memory.mem_readd(eaa)));reg_eip += b.eipCount;continue; + + // (Ew << CL) | (Ew >>> (32-CL) + case ROLD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.ROLD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case ROLD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b); tmp=Memory.mem_readd(eaa); Memory.mem_writed(eaa, Instructions.ROLD(tmp2, tmp));}reg_eip += b.eipCount;continue; + + // (Ew >>> CL) | (Ew << (32-CL)) + case RORD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.RORD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case RORD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b); tmp=Memory.mem_readd(eaa); Memory.mem_writed(eaa, Instructions.RORD(tmp2, tmp));}reg_eip += b.eipCount;continue; + + // (Ew << CL) |(cf << (CL-1)) | (Ew >>> (33-CL)); + case RCLD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.RCLD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case RCLD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCLD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; + + // (Ew >>> CL) | (cf << (32-CL)) | (Ew << (33-CL)) + case RCRD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.RCRD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case RCRD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.RCRD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; + + // Ew << CL + case SHLD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.SHLD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case SHLD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHLD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; + + // Ew >>> CL + case SHRD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.SHRD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case SHRD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SHRD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; + + // Ew >> CL + case SARD_R32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {b.r1.dword=Instructions.SARD(tmp2, b.r1.dword);}reg_eip += b.eipCount;continue; + case SARD_E32_CL: tmp2=(reg_ecx.dword & 0x1f); if (tmp2!=0) {eaa=eaSlow(b);Memory.mem_writed(eaa, Instructions.SARD(tmp2, Memory.mem_readd(eaa)));}reg_eip += b.eipCount;continue; + + case RETN32_Iw: reg_eip=CPU.CPU_Pop32(); reg_esp.dword+=b.value; block=null; break; + case RETN32: reg_eip=CPU.CPU_Pop32(); block=null; break; + case LEAVE32:reg_esp.dword&=CPU.cpu.stack.notmask;reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask);reg_ebp.dword=CPU.CPU_Pop32();reg_eip += b.eipCount;continue; + case SLDT_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} b.r1.word(CPU.CPU_SLDT());reg_eip += b.eipCount;continue; + case SLDT_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} Memory.mem_writew(eaSlow(b), CPU.CPU_SLDT());reg_eip += b.eipCount;continue; + case STR_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} b.r1.word(CPU.CPU_STR());reg_eip += b.eipCount;continue; + case STR_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} Memory.mem_writew(eaSlow(b), CPU.CPU_STR());reg_eip += b.eipCount;continue; + case LLDT_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LLDT(b.r1.word())) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case LLDT_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LLDT(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case LTR_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LTR(b.r1.word())) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case LTR_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}if (CPU.CPU_LTR(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case VERR_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERR(b.r1.word());reg_eip += b.eipCount;continue; + case VERR_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERR(Memory.mem_readw(eaSlow(b)));reg_eip += b.eipCount;continue; + case VERW_R16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERW(b.r1.word());reg_eip += b.eipCount;continue; + case VERW_E16: if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) {CPU.CPU_Exception(6,0); block = null; break;} if (CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;}CPU.CPU_VERW(Memory.mem_readw(eaSlow(b)));reg_eip += b.eipCount;continue; + case SGDT: eaa=eaSlow(b); Memory.mem_writew(eaa,CPU.CPU_SGDT_limit()); Memory.mem_writed(eaa+2,CPU.CPU_SGDT_base());reg_eip += b.eipCount;continue; + case SIDT: eaa=eaSlow(b); Memory.mem_writew(eaa,CPU.CPU_SIDT_limit()); Memory.mem_writed(eaa+2,CPU.CPU_SIDT_base());reg_eip += b.eipCount;continue; + case LGDT16: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LGDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2) & 0xFFFFFF);reg_eip += b.eipCount;continue; + case LGDT32: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LGDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2));reg_eip += b.eipCount;continue; + case LIDT16: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LIDT(Memory.mem_readw(eaa), Memory.mem_readd(eaa + 2) & 0xFFFFFF);reg_eip += b.eipCount;continue; + case LIDT32: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} eaa=eaSlow(b); CPU.CPU_LIDT(Memory.mem_readw(eaa), Memory.mem_readd(eaa + 2));reg_eip += b.eipCount;continue; + case SMSW_E16: Memory.mem_writew(eaSlow(b),CPU.CPU_SMSW() & 0xFFFF);reg_eip += b.eipCount;continue; + case LMSW_E16: if (CPU.CPU_LMSW(Memory.mem_readw(eaSlow(b)))) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case INVLPG: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} Paging.PAGING_ClearTLB();reg_eip += b.eipCount;continue; + case LGDT_R: + case LIDT_R: if (CPU.cpu.pmode && CPU.cpu.cpl!=0) {CPU.CPU_Exception(CPU.EXCEPTION_GP);block=null;break;} CPU.CPU_Exception(6,0); block = null; break; + case SMSW_R16: b.r1.word(CPU.CPU_SMSW() & 0xFFFF);reg_eip += b.eipCount;continue; + case LMSW_R16: if (CPU.CPU_LMSW(b.r1.word())) {RUNEXCEPTION();block=null;break;}reg_eip += b.eipCount;continue; + case SMSW_R32: b.r1.dword=CPU.CPU_SMSW();reg_eip += b.eipCount;continue; + + case FPU0_normal: FPU.FPU_ESC0_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU0_ea: FPU.FPU_ESC0_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU1_normal: FPU.FPU_ESC1_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU1_ea: FPU.FPU_ESC1_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU2_normal: FPU.FPU_ESC2_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU2_ea: FPU.FPU_ESC2_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU3_normal: FPU.FPU_ESC3_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU3_ea: FPU.FPU_ESC3_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU4_normal: FPU.FPU_ESC4_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU4_ea: FPU.FPU_ESC4_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU5_normal: FPU.FPU_ESC5_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU5_ea: FPU.FPU_ESC5_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU6_normal: FPU.FPU_ESC6_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU6_ea: FPU.FPU_ESC6_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case FPU7_normal: FPU.FPU_ESC7_Normal(b.value);reg_eip += b.eipCount;continue; + case FPU7_ea: FPU.FPU_ESC7_EA(b.value,eaSlow(b));reg_eip += b.eipCount;continue; + case MODIFIED: tmp = ModifiedDecode.call();if (tmp==Constants.BR_CallBack) {Flags.FillFlags(); return Data.callback; } block=null;break; } + break; } } - Flags.FillFlags(); - return Callback.CBRET_NONE; } + Flags.FillFlags(); + return Callback.CBRET_NONE; }; } diff --git a/jdosbox/src/main/java/jdos/cpu/Flags.java b/jdosbox/src/main/java/jdos/cpu/Flags.java index 54fbf9db..2c6cb00c 100644 --- a/jdosbox/src/main/java/jdos/cpu/Flags.java +++ b/jdosbox/src/main/java/jdos/cpu/Flags.java @@ -2,7 +2,7 @@ public class Flags { // needs to come before creating LazyFlags - static public GetFlags t_UNKNOWN = new GetFlags() { + static public final GetFlags t_UNKNOWN = new GetFlags() { public boolean CF() {return CPU_Regs.GETFLAG(CPU_Regs.CF)!=0;} public boolean AF() {return CPU_Regs.GETFLAG(CPU_Regs.AF) != 0;} public boolean ZF() {return CPU_Regs.GETFLAG(CPU_Regs.ZF) != 0;} @@ -119,12 +119,12 @@ static public void LoadAF() { CPU_Regs.SETFLAGBIT(CPU_Regs.AF,get_AF()); } - static public interface GetFlags { - public boolean CF(); - public boolean AF(); - public boolean ZF(); - public boolean SF(); - public boolean OF(); + public interface GetFlags { + boolean CF(); + boolean AF(); + boolean ZF(); + boolean SF(); + boolean OF(); } final static public GetFlags t_INCb = new GetFlags() { @@ -171,7 +171,7 @@ static public interface GetFlags { public boolean CF() {return CPU_Regs.GETFLAG(CPU_Regs.CF)!=0;} public boolean AF() {return (lf_resd() & 0x0f) == 0x0f;} public boolean ZF() {return (lf_resd()==0);} - public boolean SF() {return (lf_resd()&0x80000000l)!= 0;} + public boolean SF() {return (lf_resd()& 0x80000000L)!= 0;} public boolean OF() {return (lf_resd() == 0x7fffffff);} }; @@ -192,7 +192,7 @@ static public interface GetFlags { }; final static public GetFlags t_ADDd = new GetFlags() { - public boolean CF() {return ((lf_resd() & 0xFFFFFFFFl)<(lf_var1d() & 0xFFFFFFFFl));} + public boolean CF() {return ((lf_resd() & 0xFFFFFFFFL)<(lf_var1d() & 0xFFFFFFFFL));} public boolean AF() {return (((lf_var1d() ^ lf_var2d()) ^ lf_resd()) & 0x10) != 0;} public boolean ZF() {return (lf_resd()==0);} public boolean SF() {return (lf_resd()&0x80000000)!= 0;} @@ -216,7 +216,7 @@ static public interface GetFlags { }; final static public GetFlags t_ADCd = new GetFlags() { - public boolean CF() {return ((lf_resd() & 0xFFFFFFFFl) < (lf_var1d() & 0xFFFFFFFFl)) || (oldcf && (lf_resd() == lf_var1d()));} + public boolean CF() {return ((lf_resd() & 0xFFFFFFFFL) < (lf_var1d() & 0xFFFFFFFFL)) || (oldcf && (lf_resd() == lf_var1d()));} public boolean AF() {return (((lf_var1d() ^ lf_var2d()) ^ lf_resd()) & 0x10) != 0;} public boolean ZF() {return (lf_resd()==0);} public boolean SF() {return (lf_resd()&0x80000000)!= 0;} @@ -336,7 +336,7 @@ static public interface GetFlags { }; final static public GetFlags t_SUBd = new GetFlags() { - public boolean CF() {return ((lf_var1d() & 0xFFFFFFFFl)<(lf_var2d() & 0xFFFFFFFFl));} + public boolean CF() {return ((lf_var1d() & 0xFFFFFFFFL)<(lf_var2d() & 0xFFFFFFFFL));} public boolean AF() {return (((lf_var1d() ^ lf_var2d()) ^ lf_resd()) & 0x10) != 0;} public boolean ZF() {return (lf_resd()==0);} public boolean SF() {return (lf_resd()&0x80000000)!= 0;} @@ -360,7 +360,7 @@ static public interface GetFlags { }; final static public GetFlags t_CMPd = new GetFlags() { - public boolean CF() {return ((lf_var1d() & 0xFFFFFFFFl)<(lf_var2d() & 0xFFFFFFFFl));} + public boolean CF() {return ((lf_var1d() & 0xFFFFFFFFL)<(lf_var2d() & 0xFFFFFFFFL));} public boolean AF() {return (((lf_var1d() ^ lf_var2d()) ^ lf_resd()) & 0x10) != 0;} public boolean ZF() {return (lf_resd()==0);} public boolean SF() {return (lf_resd()&0x80000000)!= 0;} @@ -384,7 +384,7 @@ static public interface GetFlags { }; final static public GetFlags t_SBBd = new GetFlags() { - public boolean CF() {return ((lf_var1d() & 0xFFFFFFFFl) < (lf_resd() & 0xFFFFFFFFl)) || (oldcf && (lf_var2d()==0xffffffff));} + public boolean CF() {return ((lf_var1d() & 0xFFFFFFFFL) < (lf_resd() & 0xFFFFFFFFL)) || (oldcf && (lf_var2d()==0xffffffff));} public boolean AF() {return (((lf_var1d() ^ lf_var2d()) ^ lf_resd()) & 0x10) != 0;} public boolean ZF() {return (lf_resd()==0);} public boolean SF() {return (lf_resd()&0x80000000)!= 0;} @@ -444,7 +444,7 @@ static public interface GetFlags { public boolean AF() {return (lf_var2d() & 0x1f) != 0;} public boolean ZF() {return (lf_resd()==0);} public boolean SF() {return (lf_resd()&0x80000000)!= 0;} - public boolean OF() {return (lf_var2b()&0x1f)==1 && (lf_var1d() & 0xFFFFFFFFl) > 0x80000000l;} + public boolean OF() {return (lf_var2b()&0x1f)==1 && (lf_var1d() & 0xFFFFFFFFL) > 0x80000000L;} }; final static public GetFlags t_SARb = new GetFlags() { @@ -565,7 +565,7 @@ static public boolean get_OF() { return type.OF(); } - public static int[] parity_lookup = new int[] { + public static final int[] parity_lookup = new int[] { CPU_Regs.PF, 0, 0, CPU_Regs.PF, 0, CPU_Regs.PF, CPU_Regs.PF, 0, 0, CPU_Regs.PF, CPU_Regs.PF, 0, CPU_Regs.PF, 0, 0, CPU_Regs.PF, 0, CPU_Regs.PF, CPU_Regs.PF, 0, CPU_Regs.PF, 0, 0, CPU_Regs.PF, CPU_Regs.PF, 0, 0, CPU_Regs.PF, 0, CPU_Regs.PF, CPU_Regs.PF, 0, 0, CPU_Regs.PF, CPU_Regs.PF, 0, CPU_Regs.PF, 0, 0, CPU_Regs.PF, CPU_Regs.PF, 0, 0, CPU_Regs.PF, 0, CPU_Regs.PF, CPU_Regs.PF, 0, diff --git a/jdosbox/src/main/java/jdos/cpu/Instructions.java b/jdosbox/src/main/java/jdos/cpu/Instructions.java index 77d5430d..f47ec199 100644 --- a/jdosbox/src/main/java/jdos/cpu/Instructions.java +++ b/jdosbox/src/main/java/jdos/cpu/Instructions.java @@ -4,18 +4,18 @@ import jdos.util.OverflowException; public class Instructions extends Table_ea { - static public interface loadb { - public int call(); + public interface loadb { + int call(); } - static public interface saveb { - public void call(int value); + public interface saveb { + void call(int value); } - static public interface loadw { - public int call(); + public interface loadw { + int call(); } - static public interface savew { - public void call(int value); + public interface savew { + void call(int value); } static public int ADDB(int op2, int l) { @@ -417,7 +417,8 @@ static public boolean valid_RCLB(int op2) { } static public int do_RCLB(int op2, int l) { - /*Bit8u*/int cf=(/*Bit8u*/int)FillFlags()&0x1; + /*Bit8u*//*Bit8u*/ + int cf= FillFlags() &0x1; lf_var1b(l); lf_var2b(op2%9); lf_resb((lf_var1b() << lf_var2b()) | @@ -437,7 +438,8 @@ static public boolean valid_RCLW(int op2) { return (op2%17)!=0; } static public int do_RCLW(int op2, int l) { - /*Bit16u*/int cf=(/*Bit16u*/int)FillFlags()&0x1; + /*Bit16u*//*Bit16u*/ + int cf= FillFlags() &0x1; lf_var1w(l); lf_var2b(op2%17); lf_resw((lf_var1w() << lf_var2b()) | @@ -756,10 +758,10 @@ static public boolean AAM(int op1) { CPU_Regs.SETFLAGBIT(CPU_Regs.OF,false); CPU_Regs.SETFLAGBIT(CPU_Regs.AF,false); type=t_UNKNOWN; - return true; + return false; } else { CPU.CPU_PrepareException(0, 0); - return false; + return true; } } @@ -803,7 +805,7 @@ static public void MULW(int l) { } static public void MULD(int l) { - /*Bit64u*/long tempu=(CPU_Regs.reg_eax.dword & 0xFFFFFFFFl)*(l & 0xFFFFFFFFl); + /*Bit64u*/long tempu=(CPU_Regs.reg_eax.dword & 0xFFFFFFFFL)*(l & 0xFFFFFFFFL); CPU_Regs.reg_eax.dword=(int)tempu; CPU_Regs.reg_edx.dword=(int)(tempu >> 32); FillFlagsNoCFOF(); @@ -855,7 +857,7 @@ static public boolean DIVD(int val) { CPU.CPU_PrepareException(0, 0); return false; } - /*Bit64u*/long num=(((long)CPU_Regs.reg_edx.dword)<<32)|(CPU_Regs.reg_eax.dword & 0xFFFFFFFFl); + /*Bit64u*/long num=(((long)CPU_Regs.reg_edx.dword)<<32)|(CPU_Regs.reg_eax.dword & 0xFFFFFFFFL); try { /*Bit64u*/long quo= LongHelper.divideLongByInt(num,val); CPU_Regs.reg_edx.dword=(int)(quo >> 32); @@ -909,10 +911,10 @@ static public boolean IDIVD(int val) { CPU.CPU_PrepareException(0, 0); return false; } - /*Bit64s*/long num=(((long)CPU_Regs.reg_edx.dword)<<32)|(CPU_Regs.reg_eax.dword & 0xFFFFFFFFl); + /*Bit64s*/long num=(((long)CPU_Regs.reg_edx.dword)<<32)|(CPU_Regs.reg_eax.dword & 0xFFFFFFFFL); /*Bit64s*/long quo=num/val; /*Bit32s*/int rem=(/*Bit32s*/int)(num % val); - /*Bit32s*/int quo32s=(/*Bit32s*/int)(quo&0xffffffffl); + /*Bit32s*/int quo32s=(/*Bit32s*/int)(quo& 0xffffffffL); if (quo!=(/*Bit64s*/long)quo32s) { CPU.CPU_PrepareException(0, 0); return false; @@ -1010,7 +1012,7 @@ static public int do_DSHLW(int op2,int op3, int l) { lf_var2b(val); var1=(l<<16)|op2; long tempd=(long)var1 << lf_var2b(); - if (lf_var2b()>16) tempd |= (op2 << (lf_var2b() - 16)); + if (lf_var2b()>16) tempd |= ((long) op2 << (lf_var2b() - 16)); lf_resw((int)(tempd >>> 16)); type=t_DSHLw; return lf_resw(); @@ -1031,7 +1033,7 @@ static public int do_DSHRW(int op2,int op3, int l) { lf_var2b(val); var1=(op2<<16)|l; /*Bit32u*/long tempd=var1 >>> lf_var2b(); - if (lf_var2b()>16) tempd |= (op2 << (32-lf_var2b() )); + if (lf_var2b()>16) tempd |= ((long) op2 << (32-lf_var2b() )); lf_resw((/*Bit16u*/int)(tempd)); type=t_DSHRw; return lf_resw(); @@ -1052,21 +1054,21 @@ static public int BSWAPD(int op1) { static public int Negd(int op1) { Flags.type=Flags.t_NEGd; var1 = op1; - res = 0 - op1; + res = -op1; return res; } static public int Negb(int op1) { Flags.type=Flags.t_NEGb; Flags.lf_var1b(op1); - Flags.lf_resb(0-Flags.lf_var1b()); + Flags.lf_resb(-Flags.lf_var1b()); return Flags.lf_resb(); } static public int Negw(int op1) { Flags.type=Flags.t_NEGw; Flags.lf_var1w(op1); - Flags.lf_resw(0-Flags.lf_var1w()); + Flags.lf_resw(-Flags.lf_var1w()); return Flags.lf_resw(); } } diff --git a/jdosbox/src/main/java/jdos/cpu/Modrm.java b/jdosbox/src/main/java/jdos/cpu/Modrm.java index 8eb316c5..5f7be742 100644 --- a/jdosbox/src/main/java/jdos/cpu/Modrm.java +++ b/jdosbox/src/main/java/jdos/cpu/Modrm.java @@ -1,79 +1,79 @@ package jdos.cpu; public class Modrm { - static public interface Getrb_interface { - public int get(); - public void set(int value); + public interface Getrb_interface { + int get(); + void set(int value); } static final private Getrb_interface al = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_eax.low(value); } - final public int get() { + public int get() { return CPU_Regs.reg_eax.low(); } }; static final private Getrb_interface cl = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_ecx.low(value); } - final public int get() { + public int get() { return CPU_Regs.reg_ecx.low(); } }; static final private Getrb_interface dl = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_edx.low(value); } - final public int get() { + public int get() { return CPU_Regs.reg_edx.low(); } }; static final private Getrb_interface bl = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_ebx.low(value); } - final public int get() { + public int get() { return CPU_Regs.reg_ebx.low(); } }; static final private Getrb_interface ah = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_eax.high(value); } - final public int get() { + public int get() { return CPU_Regs.reg_eax.high(); } }; static final private Getrb_interface ch = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_ecx.high(value); } - final public int get() { + public int get() { return CPU_Regs.reg_ecx.high(); } }; static final private Getrb_interface dh = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_edx.high(value); } - final public int get() { + public int get() { return CPU_Regs.reg_edx.high(); } }; static final private Getrb_interface bh = new Getrb_interface() { - final public void set(int value) { + public void set(int value) { CPU_Regs.reg_ebx.high(value); } - final public int get() { + public int get() { return CPU_Regs.reg_ebx.high(); } }; @@ -210,9 +210,9 @@ final public int get() { // } // } - static public interface Getrd_interface { - public long get(); - public void set(long value); + public interface Getrd_interface { + long get(); + void set(long value); } static final public CPU_Regs.Reg[] Getrd = new CPU_Regs.Reg[] { @@ -422,8 +422,8 @@ static public interface Getrd_interface { CPU_Regs.reg_eax, CPU_Regs.reg_ecx, CPU_Regs.reg_edx, CPU_Regs.reg_ebx, CPU_Regs.reg_esp, CPU_Regs.reg_ebp, CPU_Regs.reg_esi, CPU_Regs.reg_edi }; - static public interface Move { - public void call(); + public interface Move { + void call(); } // static final public Move[] earb_to_rb = new Move[] { @@ -524,77 +524,77 @@ static public interface Move { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - new Move() {final public void call() { /*CPU_Regs.reg_eax.dword = CPU_Regs.reg_eax.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_eax.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_ecx.dword = CPU_Regs.reg_ecx.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ecx.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_edx.dword = CPU_Regs.reg_edx.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edx.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_ebx.dword = CPU_Regs.reg_ebx.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebx.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_esp.dword = CPU_Regs.reg_esp.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esp.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_ebp.dword = CPU_Regs.reg_ebp.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_ebp.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_esi.dword = CPU_Regs.reg_esi.dword;*/ }}, - new Move() {final public void call() { CPU_Regs.reg_esi.dword=CPU_Regs.reg_edi.dword; }}, - - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_eax.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_ecx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_edx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_ebx.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_esp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_ebp.dword; }}, - new Move() {final public void call() { CPU_Regs.reg_edi.dword=CPU_Regs.reg_esi.dword; }}, - new Move() {final public void call() { /*CPU_Regs.reg_edi.dword = CPU_Regs.reg_edi.dword;*/ }}, + () -> { /*CPU_Regs.reg_eax.dword = CPU_Regs.reg_eax.dword;*/ }, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_ecx.dword, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_edx.dword, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_ebx.dword, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_esp.dword, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_ebp.dword, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_esi.dword, + () -> CPU_Regs.reg_eax.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_eax.dword, + () -> { /*CPU_Regs.reg_ecx.dword = CPU_Regs.reg_ecx.dword;*/ }, + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_edx.dword, + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_ebx.dword, + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_esp.dword, + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_ebp.dword, + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_esi.dword, + () -> CPU_Regs.reg_ecx.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_eax.dword, + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_ecx.dword, + () -> { /*CPU_Regs.reg_edx.dword = CPU_Regs.reg_edx.dword;*/ }, + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_ebx.dword, + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_esp.dword, + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_ebp.dword, + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_esi.dword, + () -> CPU_Regs.reg_edx.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_eax.dword, + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_ecx.dword, + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_edx.dword, + () -> { /*CPU_Regs.reg_ebx.dword = CPU_Regs.reg_ebx.dword;*/ }, + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_esp.dword, + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_ebp.dword, + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_esi.dword, + () -> CPU_Regs.reg_ebx.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_eax.dword, + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_ecx.dword, + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_edx.dword, + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_ebx.dword, + () -> { /*CPU_Regs.reg_esp.dword = CPU_Regs.reg_esp.dword;*/ }, + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_ebp.dword, + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_esi.dword, + () -> CPU_Regs.reg_esp.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_eax.dword, + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_ecx.dword, + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_edx.dword, + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_ebx.dword, + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_esp.dword, + () -> { /*CPU_Regs.reg_ebp.dword = CPU_Regs.reg_ebp.dword;*/ }, + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_esi.dword, + () -> CPU_Regs.reg_ebp.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_eax.dword, + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_ecx.dword, + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_edx.dword, + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_ebx.dword, + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_esp.dword, + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_ebp.dword, + () -> { /*CPU_Regs.reg_esi.dword = CPU_Regs.reg_esi.dword;*/ }, + () -> CPU_Regs.reg_esi.dword=CPU_Regs.reg_edi.dword, + + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_eax.dword, + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_ecx.dword, + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_edx.dword, + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_ebx.dword, + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_esp.dword, + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_ebp.dword, + () -> CPU_Regs.reg_edi.dword=CPU_Regs.reg_esi.dword, + () -> { /*CPU_Regs.reg_edi.dword = CPU_Regs.reg_edi.dword;*/ }, }; // static public void GetEArd(short index, long value) { // /* 12 lines of 16*0 should give nice errors when used */ diff --git a/jdosbox/src/main/java/jdos/cpu/Paging.java b/jdosbox/src/main/java/jdos/cpu/Paging.java index fcd8e9a9..2d011077 100644 --- a/jdosbox/src/main/java/jdos/cpu/Paging.java +++ b/jdosbox/src/main/java/jdos/cpu/Paging.java @@ -48,13 +48,13 @@ static public class PageHandler { } public /*Bitu*/int readw(/*PhysPt*/int addr) { - int result = readb(addr + 0); + int result = readb(addr); result |= (readb(addr + 1) << 8); return result; } public /*Bitu*/int readd(/*PhysPt*/int addr) { - int result = readb(addr + 0); + int result = readb(addr); result |= (readb(addr + 1) << 8); result |= (readb(addr + 2) << 16); result |= (readb(addr + 3) << 24); @@ -66,12 +66,12 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { } public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { - writeb(addr + 0, (val)); + writeb(addr, (val)); writeb(addr + 1, (val >> 8)); } public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { - writeb(addr + 0, (val)); + writeb(addr, (val)); writeb(addr + 1, (val >> 8)); writeb(addr + 2, (val >> 16)); writeb(addr + 3, (val >> 24)); @@ -135,7 +135,7 @@ public void load(int value) { block.base = (value >>> 12) & 0xFFFFF; } - X86_PageEntryBlock block = new X86_PageEntryBlock(); + final X86_PageEntryBlock block = new X86_PageEntryBlock(); } static public /*Bitu*/ int cr3; @@ -147,7 +147,7 @@ static public class Base { public /*PhysPt*/ int addr; } - static public Base base = new Base(); + static public final Base base = new Base(); static final public /*HostPt*/ int[] read = new int[TLB_SIZE]; static final public /*HostPt*/ int[] write = new int[TLB_SIZE]; @@ -158,8 +158,8 @@ static public class Base { static public class Links { public /*Bitu*/ int used; - public /*Bit32u*/ boolean[] global = new boolean[PAGING_LINKS]; - public /*Bit32u*/ int[] entries = new int[PAGING_LINKS]; + public final /*Bit32u*/ boolean[] global = new boolean[PAGING_LINKS]; + public final /*Bit32u*/ int[] entries = new int[PAGING_LINKS]; public void removeNonGlobal() { int lastUsed = -1; for (int i=0;i>> 12; /*Bit32u*/ int ppage = phys_page[lin_page] & PHYSPAGE_ADDR; - PageHandler handler = Memory.MEM_GetPageHandler(ppage); - return handler; + return Memory.MEM_GetPageHandler(ppage); } private boolean hack_check(/*PhysPt*/int addr) { @@ -697,14 +694,13 @@ private boolean hack_check(/*PhysPt*/int addr) { int old_attirbs = phys_page[addr >>> 12] >> 30; X86PageEntry dir_entry = new X86PageEntry(), table_entry = new X86PageEntry(); - dir_entry.load((int) Memory.phys_readd(GetPageDirectoryEntryAddr(addr))); + dir_entry.load(Memory.phys_readd(GetPageDirectoryEntryAddr(addr))); if (dir_entry.block.p == 0) return false; - table_entry.load((int) Memory.phys_readd(GetPageTableEntryAddr(addr, dir_entry))); + table_entry.load(Memory.phys_readd(GetPageTableEntryAddr(addr, dir_entry))); if (table_entry.block.p == 0) return false; /*Bitu*/ int result = translate_array[((dir_entry.load() << 1) & 0xc) | ((table_entry.load() >> 1) & 0x3)]; - if (result != old_attirbs) return true; - return false; + return result != old_attirbs; } void Exception(/*PhysPt*/int addr, boolean writing, boolean checked) { @@ -734,7 +730,7 @@ void Exception(/*PhysPt*/int addr, boolean writing, boolean checked) { int ppage = phys_page[lin_page] & PHYSPAGE_ADDR; PageHandler handler = Memory.MEM_GetPageHandler(ppage); if ((handler.flags & PFLAG_READABLE) != 0) { - return RAM.readb(handler.GetHostReadPt(ppage) + (int) (addr & 0xfff)); + return RAM.readb(handler.GetHostReadPt(ppage) + (addr & 0xfff)); } else { return handler.readb(addr); } @@ -747,7 +743,7 @@ void Exception(/*PhysPt*/int addr, boolean writing, boolean checked) { int ppage = phys_page[lin_page] & PHYSPAGE_ADDR; PageHandler handler = Memory.MEM_GetPageHandler(ppage); if ((handler.flags & PFLAG_READABLE) != 0) { - return RAM.readw((int) (handler.GetHostReadPt(ppage) + (addr & 0xfff))); + return RAM.readw(handler.GetHostReadPt(ppage) + (addr & 0xfff)); } else { return handler.readw(addr); } @@ -760,7 +756,7 @@ void Exception(/*PhysPt*/int addr, boolean writing, boolean checked) { int ppage = phys_page[lin_page] & PHYSPAGE_ADDR; PageHandler handler = Memory.MEM_GetPageHandler(ppage); if ((handler.flags & PFLAG_READABLE) != 0) { - return RAM.readd((int) (handler.GetHostReadPt(ppage) + (addr & 0xfff))); + return RAM.readd(handler.GetHostReadPt(ppage) + (addr & 0xfff)); } else { return handler.readd(addr); } @@ -773,7 +769,7 @@ void writeb_through(/*PhysPt*/int addr, /*Bitu*/int val) { int ppage = phys_page[lin_page] & PHYSPAGE_ADDR; PageHandler handler = Memory.MEM_GetPageHandler(ppage); if ((handler.flags & PFLAG_WRITEABLE) != 0) { - RAM.writeb((int) (handler.GetHostWritePt(ppage) + (addr & 0xfff)), val); + RAM.writeb(handler.GetHostWritePt(ppage) + (addr & 0xfff), val); } else { handler.writeb(addr, val); } @@ -786,7 +782,7 @@ void writew_through(/*PhysPt*/int addr, /*Bitu*/int val) { int ppage = phys_page[lin_page] & PHYSPAGE_ADDR; PageHandler handler = Memory.MEM_GetPageHandler(ppage); if ((handler.flags & PFLAG_WRITEABLE) != 0) { - RAM.writew((int) (handler.GetHostWritePt(ppage) + (addr & 0xfff)), val); + RAM.writew(handler.GetHostWritePt(ppage) + (addr & 0xfff), val); } else { handler.writew(addr, val); } @@ -801,7 +797,7 @@ void writed_through(/*PhysPt*/int addr, /*Bitu*/int val) { if ((handler.flags & PFLAG_WRITEABLE) != 0) { RAM.writed((handler.GetHostWritePt(ppage) + (addr & 0xfff)), val); } else { - handler.writed(addr, (int) val); + handler.writed(addr, val); } } @@ -849,7 +845,7 @@ public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { return; } if (hack_check(addr)) { - //Log.log_msg("Page attributes modified without clear"); + //System.out.println("Page attributes modified without clear"); PAGING_ClearTLB(); Memory.mem_writew(addr, val); return; @@ -902,7 +898,7 @@ public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { Memory.mem_writed(addr, val); } - boolean InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) { + void InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) { /*Bitu*/ int lin_page = lin_addr >>> 12; /*Bitu*/ @@ -911,7 +907,7 @@ boolean InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) //initpage_retry: while (true) { X86PageEntry dir_entry = new X86PageEntry(), table_entry = new X86PageEntry(); - boolean isUser = (((CPU.cpu.cpl & CPU.cpu.mpl)==3)? true:false); + boolean isUser = ((CPU.cpu.cpl & CPU.cpu.mpl) == 3); // Read the paging stuff, throw not present exceptions if needed // and find out how the page should be mapped @@ -922,7 +918,7 @@ boolean InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) // table pointer is not present, do a page fault PAGING_NewPageFault(lin_addr, dirEntryAddr, prepare_only, (writing? 2:0) | (isUser? 4:0)); - if (prepare_only) return true; + if (prepare_only) return; else continue; //goto initpage_retry; // TODO maybe E_Exit after a few loops } /*PhysPt*/int tableEntryAddr = GetPageTableEntryAddr(lin_addr, dir_entry); @@ -939,7 +935,7 @@ boolean InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) // physpage pointer is not present, do a page fault PAGING_NewPageFault(lin_addr, tableEntryAddr, prepare_only, (writing? 2:0) | (isUser? 4:0)); - if (prepare_only) return true; + if (prepare_only) return; else continue; //goto initpage_retry; } //PrintPageInfo("INI",lin_addr,writing,prepare_only); @@ -956,7 +952,7 @@ boolean InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) // bit0 - protection violation, bit1 - writing, bit2 - user mode PAGING_NewPageFault(lin_addr, tableEntryAddr, prepare_only, 1 | (writing? 2:0) | (isUser? 4:0)); - if (prepare_only) return true; + if (prepare_only) return; else continue; //goto initpage_retry; // unlikely to happen? } @@ -993,7 +989,6 @@ boolean InitPage(/*PhysPt*/int lin_addr, boolean writing, boolean prepare_only) else phys_page = lin_page; PAGING_LinkPage(lin_page, phys_page); } - return false; } } @@ -1005,10 +1000,10 @@ static public boolean PAGING_MakePhysPage(/*Bitu*/IntRef page) { /*Bitu*/ int t_index = page.value & 0x3ff; X86PageEntry table = new X86PageEntry(); - table.load((int) (Memory.phys_readd((base.page << 12) + d_index * 4))); + table.load(Memory.phys_readd((base.page << 12) + d_index * 4)); if (table.block.p == 0) return false; X86PageEntry entry = new X86PageEntry(); - entry.load((int) (Memory.phys_readd((table.block.base << 12) + t_index * 4))); + entry.load(Memory.phys_readd((table.block.base << 12) + t_index * 4)); if (entry.block.p == 0) return false; page.value = entry.block.base; } else { @@ -1018,9 +1013,9 @@ static public boolean PAGING_MakePhysPage(/*Bitu*/IntRef page) { return true; } - static NewInitPageHandler init_page_handler = new NewInitPageHandler(); - static ExceptionPageHandler exception_handler = new ExceptionPageHandler(); - static PageFoilHandler foiling_handler = new PageFoilHandler(); + static final NewInitPageHandler init_page_handler = new NewInitPageHandler(); + static final ExceptionPageHandler exception_handler = new ExceptionPageHandler(); + static final PageFoilHandler foiling_handler = new PageFoilHandler(); static public /*Bitu*/int PAGING_GetDirBase() { return cr3; @@ -1368,13 +1363,11 @@ public Paging(Section configuration) { pf_queue.used = 0; } - public static Section.SectionFunction PAGING_ShutDown = new Section.SectionFunction() { - public void call(Section section) { - //paging = null; - } + public static final Section.SectionFunction PAGING_ShutDown = section -> { + //paging = null; }; - public static Section.SectionFunction PAGING_Init = new Section.SectionFunction() { + public static final Section.SectionFunction PAGING_Init = new Section.SectionFunction() { public void call(Section section) { test = new Paging(section); if (section != null) diff --git a/jdosbox/src/main/java/jdos/cpu/StringOp.java b/jdosbox/src/main/java/jdos/cpu/StringOp.java index f44b1aad..9affdf9a 100644 --- a/jdosbox/src/main/java/jdos/cpu/StringOp.java +++ b/jdosbox/src/main/java/jdos/cpu/StringOp.java @@ -216,7 +216,7 @@ static public void DoString16(int prefixes, int type) { case R_SCASB: { /*Bit8u*/int val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val2=Memory.mem_readb(di_base+reg_edi.word()); reg_edi.word(reg_edi.word()+add_index); @@ -229,7 +229,7 @@ static public void DoString16(int prefixes, int type) { case R_SCASW: { add_index<<=1;/*Bit16u*/int val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val2=Memory.mem_readw(di_base+reg_edi.word()); reg_edi.word(reg_edi.word()+add_index); @@ -242,7 +242,7 @@ static public void DoString16(int prefixes, int type) { case R_SCASD: { add_index<<=2;/*Bit32u*/int val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val2=Memory.mem_readd(di_base + reg_edi.word()); reg_edi.word(reg_edi.word()+add_index); @@ -255,7 +255,7 @@ static public void DoString16(int prefixes, int type) { case R_CMPSB: { /*Bit8u*/int val1=0,val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val1=Memory.mem_readb(si_base+reg_esi.word()); val2=Memory.mem_readb(di_base+reg_edi.word()); @@ -270,7 +270,7 @@ static public void DoString16(int prefixes, int type) { case R_CMPSW: { add_index<<=1;/*Bit16u*/int val1=0,val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val1=Memory.mem_readw(si_base+reg_esi.word()); val2=Memory.mem_readw(di_base+reg_edi.word()); @@ -285,7 +285,7 @@ static public void DoString16(int prefixes, int type) { case R_CMPSD: { add_index<<=2;/*Bit32u*/int val1=0,val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val1=Memory.mem_readd(si_base + reg_esi.word()); val2=Memory.mem_readd(di_base + reg_edi.word()); @@ -311,7 +311,7 @@ static public void DoString32(int prefixes, int type) { si_base=base_ds; di_base=CPU_Regs.reg_esPhys.dword; - count=reg_ecx.dword & 0xFFFFFFFFl; + count=reg_ecx.dword & 0xFFFFFFFFL; if ((prefixes & PREFIX_REP)==0) { count=1; } else { @@ -469,7 +469,7 @@ static public void DoString32(int prefixes, int type) { case R_SCASB: { /*Bit8u*/int val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val2=Memory.mem_readb(di_base+reg_edi.dword); reg_edi.dword+=add_index; @@ -482,7 +482,7 @@ static public void DoString32(int prefixes, int type) { case R_SCASW: { add_index<<=1;/*Bit16u*/int val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val2=Memory.mem_readw(di_base+reg_edi.dword); reg_edi.dword+=add_index; @@ -495,7 +495,7 @@ static public void DoString32(int prefixes, int type) { case R_SCASD: { add_index<<=2;/*Bit32u*/int val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val2=Memory.mem_readd(di_base + reg_edi.dword); reg_edi.dword+=add_index; @@ -508,7 +508,7 @@ static public void DoString32(int prefixes, int type) { case R_CMPSB: { /*Bit8u*/int val1=0,val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val1=Memory.mem_readb(si_base+reg_esi.dword); val2=Memory.mem_readb(di_base+reg_edi.dword); @@ -523,7 +523,7 @@ static public void DoString32(int prefixes, int type) { case R_CMPSW: { add_index<<=1;/*Bit16u*/int val1=0,val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val1=Memory.mem_readw(si_base+reg_esi.dword); val2=Memory.mem_readw(di_base+reg_edi.dword); @@ -538,7 +538,7 @@ static public void DoString32(int prefixes, int type) { case R_CMPSD: { add_index<<=2;/*Bit32u*/int val1=0,val2=0; - for (;count>0;) { + while (count>0) { count--;CPU.CPU_Cycles--; val1=Memory.mem_readd(si_base + reg_esi.dword); val2=Memory.mem_readd(di_base + reg_edi.dword); diff --git a/jdosbox/src/main/java/jdos/cpu/Table_ea.java b/jdosbox/src/main/java/jdos/cpu/Table_ea.java index caf7425a..cecf4879 100644 --- a/jdosbox/src/main/java/jdos/cpu/Table_ea.java +++ b/jdosbox/src/main/java/jdos/cpu/Table_ea.java @@ -2,8 +2,8 @@ public class Table_ea extends Core { //typedef PhysPt (*EA_LookupHandler)(void); - static public interface GetEAHandler { - public /*PhysPt*/int call(); + public interface GetEAHandler { + /*PhysPt*/int call(); } static public boolean EA16 = true; @@ -130,7 +130,7 @@ static public int getEaa(int rm) { base+=reg_ebx.dword << (sib >> 6); break; case 4: - base+=SIBZero << (sib >> 6); + base+= (int) (SIBZero << (sib >> 6)); break; case 5: base+=reg_ebp.dword << (sib >> 6); diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Cache.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Cache.java index 5080305c..69f7575f 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Cache.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Cache.java @@ -6,13 +6,13 @@ public static class Block { public CacheBlockDynRec active; // the current cache block public CacheBlockDynRec free; // pointer to the free list } - public Block block = new Block(); + public final Block block = new Block(); /*Bit8u*/int pos; // position in the cache block CodePageHandlerDynRec free_pages; // pointer to the free list CodePageHandlerDynRec used_pages; // pointer to the list of used pages CodePageHandlerDynRec last_page; // the last used page - public static Cache cache = new Cache(); + public static final Cache cache = new Cache(); public static boolean cache_initialized = false; diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/CacheBlockDynRec.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/CacheBlockDynRec.java index 96ba4a7d..a7ef5020 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/CacheBlockDynRec.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/CacheBlockDynRec.java @@ -37,7 +37,7 @@ public void Clear() { } if (link[ind].to!=null && link[ind].to!=this) { link[ind].to.link[ind].from.remove(this); - if (link[ind].to.link[ind].from.size()==0) { + if (link[ind].to.link[ind].from.isEmpty()) { link[ind].to.link[ind].from = null; } link[ind].to = null; @@ -70,11 +70,11 @@ public void LinkTo(/*Bitu*/int index, CacheBlockDynRec toblock) { toblock.link[index].from = new Vector(); toblock.link[index].from.add(this); // remember who links me } - public class Page { + public static class Page { public int start,end; // where in the page is the original code public CodePageHandlerDynRec handler; // page containing this code } - public Page page = new Page(); + public final Page page = new Page(); static public class _Cache { public CacheBlockDynRec next; @@ -84,20 +84,20 @@ static public class _Cache { public /*Bit16u*/int maskstart; public /*Bit16u*/int masklen; } - public _Cache cache = new _Cache(); + public final _Cache cache = new _Cache(); static public class _Hash { /*Bitu*/int index; CacheBlockDynRec next; } - public _Hash hash = new _Hash(); + public final _Hash hash = new _Hash(); static public class _Link { public CacheBlockDynRec to; // this block can transfer control to the to-block public Vector from = new Vector(); // the from-block can transfer control to this block } - public _Link[] link = new _Link[2]; - public _Link link1; - public _Link link2; + public final _Link[] link = new _Link[2]; + public final _Link link1; + public final _Link link2; CacheBlockDynRec crossblock; public Op code; public SwitchBlock[] inst; // micro instructions used by Core_switch diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/CodePageHandlerDynRec.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/CodePageHandlerDynRec.java index a397f43b..6a7f4604 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/CodePageHandlerDynRec.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/CodePageHandlerDynRec.java @@ -1,6 +1,5 @@ package jdos.cpu.core_dynamic; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.cpu.Core_dynamic; import jdos.cpu.Paging; @@ -118,7 +117,7 @@ public void writew(/*PhysPt*/int address,/*Bitu*/int val){ } public void writed(/*PhysPt*/int address,/*Bitu*/int val){ int addr = (address & 4095); - if (RAM.readd(hostmem + addr)==(val & 0xFFFFFFFF)) return; + if (RAM.readd(hostmem + addr)==(val)) return; RAM.writed(hostmem + addr, val); // see if there's code where we are writing to if (write_map.readd(addr)==0) { @@ -247,14 +246,14 @@ public CacheBlockDynRec FindCacheBlock(/*Bitu*/int start) { } // the write map, there are write_map[i] cache blocks that cover the byte at address i - public /*Bit8u*/Ptr write_map=new Ptr(4096); + public final /*Bit8u*/Ptr write_map=new Ptr(4096); public /*Bit8u*/ Ptr invalidation_map; CodePageHandlerDynRec next, prev; // page linking private Paging.PageHandler old_pagehandler; // hash map to quickly find the cache blocks in this page - private CacheBlockDynRec[] hash_map = new CacheBlockDynRec[1+ Core_dynamic.DYN_PAGE_HASH]; + private final CacheBlockDynRec[] hash_map = new CacheBlockDynRec[1+ Core_dynamic.DYN_PAGE_HASH]; private /*Bitu*/int active_blocks; // the number of cache blocks in this page private /*Bitu*/int active_count; // delaying parameter to not immediately release a page diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Compiler.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Compiler.java index 0c74699f..4558cefb 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Compiler.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Compiler.java @@ -26,7 +26,7 @@ public class Compiler extends Helper { static final private boolean inlineFlags = true; static final private boolean cacheSegments = true; - private static Thread[] compilerThread = null; + private static Thread[] compilerThread; private static final LinkedList compilerQueue = new LinkedList(); // :TODO: update CMPXCHG to update flags like in normal core @@ -38,42 +38,40 @@ public class Compiler extends Helper { static { compilerThread = new Thread[processorCount]; for (int i = 0; i < compilerThread.length; i++) { - compilerThread[i] = new Thread(new Runnable() { - public void run() { - try { - while (true) { - DecodeBlock nextBlock = null; - synchronized (compilerQueue) { - if (compilerQueue.isEmpty()) - compilerQueue.wait(); - if (!compilerQueue.isEmpty()) - nextBlock = (DecodeBlock) compilerQueue.pop(); - } - if (nextBlock == null) { - break; - } - if (nextBlock.active) { - Op result = do_compile(nextBlock); - if (result != null) { - //nextBlock.op = nextBlock.next; - // In Doom, bypassing the DecodeBlock call and instead having Core_dynamic call - // the compiled code directly led to a nice increase in performance (10% at the time - // of testing). Keep in mind self modified code detection is not enabled within - // the compiled code, hopefully by having the code run in the dynamic core 100-1000 - // times before being marked as needing compiling will weed out all the blocks - // that modify themselves. - // - // Do not set nextBlock.parent.code on this thread, because depending on the timing - // on the machine it is being run on, it may result in weird behavior. - nextBlock.compiledOp = result; - } + compilerThread[i] = new Thread(() -> { + try { + while (true) { + DecodeBlock nextBlock = null; + synchronized (compilerQueue) { + if (compilerQueue.isEmpty()) + compilerQueue.wait(); + if (!compilerQueue.isEmpty()) + nextBlock = (DecodeBlock) compilerQueue.pop(); + } + if (nextBlock == null) { + break; + } + if (nextBlock.active) { + Op result = do_compile(nextBlock); + if (result != null) { + //nextBlock.op = nextBlock.next; + // In Doom, bypassing the DecodeBlock call and instead having Core_dynamic call + // the compiled code directly led to a nice increase in performance (10% at the time + // of testing). Keep in mind self modified code detection is not enabled within + // the compiled code, hopefully by having the code run in the dynamic core 100-1000 + // times before being marked as needing compiling will weed out all the blocks + // that modify themselves. + // + // Do not set nextBlock.parent.code on this thread, because depending on the timing + // on the machine it is being run on, it may result in weird behavior. + nextBlock.compiledOp = result; } } - } catch (Exception e) { - e.printStackTrace(); } - System.out.println("Compiler thread has exited"); + } catch (Exception e) { + e.printStackTrace(); } + System.out.println("Compiler thread has exited"); }); compilerThread[i].start(); } @@ -91,11 +89,12 @@ static private byte[] getOpCode(int start, int len) { static public void compile(DecodeBlock block) { if (block == null) { - for (int i = 0; i < compilerThread.length; i++) - try { - compilerThread[i].join(); - } catch (Exception e) { - } + for (Thread thread : compilerThread) + try { + thread.join(); + } catch (Exception e) { + throw new RuntimeException(e); + } return; } synchronized (compilerQueue) { @@ -135,7 +134,7 @@ static private boolean isDec(Op op) { static final boolean combineMemoryAccessEIP = false; // less than 1% improvement static public class Seg { - private StringBuilder method; + private final StringBuilder method; private String ds; private boolean defaultDS; @@ -295,7 +294,7 @@ static public Op do_compile(Op op) { } if (testLocalVariableAccess) method.append("{"); - method.append("/*" + Integer.toHexString(op.c) + "*/"); + method.append("/*").append(Integer.toHexString(op.c)).append("*/"); if (op.gets()!=0) method.append("/* Uses Flags */"); int shouldSet = 0; @@ -507,7 +506,7 @@ static String nameGet8(Reg reg) { static void nameGet8(Reg reg, StringBuilder method) { if (reg.getParent()==null && reg.getName()==null) - method.append(String.valueOf(reg.dword)); + method.append(reg.dword); else { method.append("CPU_Regs.reg_"); if (reg.getParent()==null) { @@ -526,7 +525,7 @@ static String nameGet16(Reg reg) { static void nameGet16(Reg reg, StringBuilder method) { if (reg.getName()==null) - method.append(String.valueOf(reg.dword)); + method.append(reg.dword); else { method.append("CPU_Regs.reg_"); method.append(reg.getName()); @@ -541,7 +540,7 @@ static String nameGet32(Reg reg) { static void nameGet32(Reg reg, StringBuilder method) { if (reg.getName() == null) - method.append(String.valueOf(reg.dword)); + method.append(reg.dword); else { method.append("CPU_Regs.reg_"); method.append(reg.getName()); @@ -7382,8 +7381,8 @@ else if (op instanceof Inst2.ConditionalMov_nle_mem) return true; } - static private ClassPool pool = ClassPool.getDefault(); - static java.security.MessageDigest md; + static private final ClassPool pool = ClassPool.getDefault(); + static final java.security.MessageDigest md; static { pool.importPackage("jdos.cpu.core_dynamic"); @@ -7394,7 +7393,7 @@ else if (op instanceof Inst2.ConditionalMov_nle_mem) pool.importPackage("jdos.cpu.core_normal"); pool.importPackage("jdos.cpu.core_share"); pool.insertClassPath(new ClassPath() { - public InputStream openClassfile(String s) throws NotFoundException { + public InputStream openClassfile(String s) { if (s.startsWith("jdos.")) { s = "/" + s.replace('.', '/') + ".class"; return Dosbox.class.getResourceAsStream(s.substring(6)); @@ -7416,7 +7415,7 @@ public void close() { try { md = java.security.MessageDigest.getInstance("MD5"); } catch (Exception e) { - + throw new RuntimeException(e); } } @@ -7432,7 +7431,7 @@ static private Op compileMethod(Op op, StringBuilder method, boolean jump) { if (!jump) method.append("return Constants.BR_Normal;"); method.append("}"); - CtMethod m = CtNewMethod.make("public int call() {" + method.toString(), codeBlock); + CtMethod m = CtNewMethod.make("public int call() {" + method, codeBlock); codeBlock.addMethod(m); Op o = op; @@ -7455,7 +7454,7 @@ static private Op compileMethod(Op op, StringBuilder method, boolean jump) { // Create second copy of Compiler class inside custom classloader as "neighbour". // CtClass.toClass(neighbour) does not cause illegal reflective access in JDK17. - Class clazz = codeBlock.toClass(cl.loadClass(Compiler.class.getName())); + Class clazz = codeBlock.toClass(cl.loadClass(Compiler.class.getName())); Op compiledCode = (Op) clazz.newInstance(); codeBlock.detach(); if (saveClasses) { @@ -7488,11 +7487,9 @@ static private Op compileMethod(Op op, StringBuilder method, boolean jump) { return null; } - final public static Section.SectionFunction Compiler_Init = new Section.SectionFunction() { - public void call(Section newconfig) { - Section_prop section=(Section_prop)newconfig; - DecodeBlock.compileThreshold = section.Get_int("threshold"); - min_block_size = section.Get_int("min_block_size"); - } + final public static Section.SectionFunction Compiler_Init = newconfig -> { + Section_prop section=(Section_prop)newconfig; + DecodeBlock.compileThreshold = section.Get_int("threshold"); + min_block_size = section.Get_int("min_block_size"); }; } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decode.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decode.java index 9525bb5b..a18b4872 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decode.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decode.java @@ -1,5 +1,5 @@ package jdos.cpu.core_dynamic; public interface Decode { - public int call(Op prev); + int call(Op prev); } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/DecodeBlock.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/DecodeBlock.java index 90d68cbe..d7236bef 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/DecodeBlock.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/DecodeBlock.java @@ -11,22 +11,17 @@ final public class DecodeBlock extends Op { public Op op; - public boolean active = true; - public int codeStart; - public int codeLen; + public final boolean active = true; + public final int codeStart; + public final int codeLen; public int runCount = 0; static public int compileThreshold = 0; public static boolean smc = false; private boolean compiled = false; - public CacheBlockDynRec parent; + public final CacheBlockDynRec parent; public Op compiledOp = null; - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - static private byte[] getOpCode(int start, int len) { byte[] opCode = new byte[len]; int src = Paging.getDirectIndexRO(start); @@ -52,7 +47,7 @@ public DecodeBlock(CacheBlockDynRec parent, Op op, int start, int len) { } } } - final public int call() { + public int call() { if (Compiler.ENABLED) { runCount++; if (runCount==compileThreshold && !compiled && Dosbox.allPrivileges) { diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decoder.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decoder.java index 320eb75b..43f251ea 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decoder.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Decoder.java @@ -8,27 +8,23 @@ import jdos.misc.Log; import jdos.misc.setup.Config; +import java.util.Arrays; + public class Decoder extends Inst1 { public static final Decode[] ops = new Decode[1024]; static { - Decode not_handled = new Decode() { - public int call(Op prev) { - prev.next = new Op() { - public int call() { - CPU.CPU_Exception(6,0); - return Constants.BR_Jump; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - }; - return RESULT_JUMP; - } + Decode not_handled = prev -> { + prev.next = new Op() { + public int call() { + CPU.CPU_Exception(6,0); + return Constants.BR_Jump; + } + public boolean throwsException() {return true;} + }; + return RESULT_JUMP; }; - for (int i=0;i>>12; phys_page.value=lin_page; // find the physical page that the linear page is mapped to if (!Paging.PAGING_MakePhysPage(phys_page)) { - Log.log_msg("DYNREC:Can't find physpage for lin addr "+Integer.toString(lin_addr, 16)); + System.out.println("DYNREC:Can't find physpage for lin addr "+Integer.toString(lin_addr, 16)); return null; } // find a free CodePage diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Eaa.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Eaa.java index 8d58fcc9..db7d49d4 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Eaa.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Eaa.java @@ -22,7 +22,7 @@ final static public class EA_16_05_n extends EaaBase { public /*PhysPt*/int call() { return Core.base_ds+(reg_edi.word()); } } final static public class EA_16_06_n extends EaaBase { - int i; + final int i; public EA_16_06_n() { i = decode_fetchw(); } @@ -33,56 +33,56 @@ final static public class EA_16_07_n extends EaaBase { } final static public class EA_16_40_n extends EaaBase { - int i; + final int i; public EA_16_40_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_ebx.word()+(/*Bit16s*/short)reg_esi.word()+i) & 0xFFFF); } } final static public class EA_16_41_n extends EaaBase { - int i; + final int i; public EA_16_41_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_ebx.word()+(/*Bit16s*/short)reg_edi.word()+i) & 0xFFFF); } } final static public class EA_16_42_n extends EaaBase { - int i; + final int i; public EA_16_42_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ss+((reg_ebp.word()+(/*Bit16s*/short)reg_esi.word()+i) & 0xFFFF); } } final static public class EA_16_43_n extends EaaBase { - int i; + final int i; public EA_16_43_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ss+((reg_ebp.word()+(/*Bit16s*/short)reg_edi.word()+i) & 0xFFFF); } } final static public class EA_16_44_n extends EaaBase { - int i; + final int i; public EA_16_44_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_esi.word()+i) & 0xFFFF); } } final static public class EA_16_45_n extends EaaBase { - int i; + final int i; public EA_16_45_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_edi.word()+i) & 0xFFFF); } } final static public class EA_16_46_n extends EaaBase { - int i; + final int i; public EA_16_46_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return Core.base_ss+((reg_ebp.word()+i) & 0xFFFF); } } final static public class EA_16_47_n extends EaaBase { - int i; + final int i; public EA_16_47_n() { i = decode_fetchbs(); } @@ -90,56 +90,56 @@ public EA_16_47_n() { } final static public class EA_16_80_n extends EaaBase { - int i; + final int i; public EA_16_80_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_ebx.word()+(/*Bit16s*/short)reg_esi.word()+i) & 0xFFFF); } } final static public class EA_16_81_n extends EaaBase { - int i; + final int i; public EA_16_81_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_ebx.word()+(/*Bit16s*/short)reg_edi.word()+i) & 0xFFFF); } } final static public class EA_16_82_n extends EaaBase { - int i; + final int i; public EA_16_82_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ss+((reg_ebp.word()+(/*Bit16s*/short)reg_esi.word()+i) & 0xFFFF); } } final static public class EA_16_83_n extends EaaBase { - int i; + final int i; public EA_16_83_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ss+((reg_ebp.word()+(/*Bit16s*/short)reg_edi.word()+i) & 0xFFFF); } } final static public class EA_16_84_n extends EaaBase { - int i; + final int i; public EA_16_84_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_esi.word()+i) & 0xFFFF); } } final static public class EA_16_85_n extends EaaBase { - int i; + final int i; public EA_16_85_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ds+((reg_edi.word()+i) & 0xFFFF); } } final static public class EA_16_86_n extends EaaBase { - int i; + final int i; public EA_16_86_n() { i = decode_fetchws(); } public /*PhysPt*/int call() { return Core.base_ss+((reg_ebp.word()+i) & 0xFFFF); } } final static public class EA_16_87_n extends EaaBase { - int i; + final int i; public EA_16_87_n() { i = decode_fetchws(); } @@ -225,7 +225,7 @@ public EA_32_04_n() { } } final static public class EA_32_05_n extends EaaBase { - int i; + final int i; public EA_32_05_n() { i = decode_fetchd(); } @@ -239,35 +239,35 @@ final static public class EA_32_07_n extends EaaBase { } final static public class EA_32_40_n extends EaaBase { - int i; + final int i; public EA_32_40_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_eax.dword+i); } } final static public class EA_32_41_n extends EaaBase { - int i; + final int i; public EA_32_41_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_ecx.dword+i); } } final static public class EA_32_42_n extends EaaBase { - int i; + final int i; public EA_32_42_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_edx.dword+i); } } final static public class EA_32_43_n extends EaaBase { - int i; + final int i; public EA_32_43_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_ebx.dword+i); } } final static public class EA_32_44_n extends EaaBase { - int i; + final int i; boolean ds; Reg reg; @@ -335,21 +335,21 @@ public EA_32_44_n() { } } final static public class EA_32_45_n extends EaaBase { - int i; + final int i; public EA_32_45_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return (Core.base_ss+reg_ebp.dword+i); } } final static public class EA_32_46_n extends EaaBase { - int i; + final int i; public EA_32_46_n() { i = decode_fetchbs(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_esi.dword+i); } } final static public class EA_32_47_n extends EaaBase { - int i; + final int i; public EA_32_47_n() { i = decode_fetchbs(); } @@ -357,35 +357,35 @@ public EA_32_47_n() { } final static public class EA_32_80_n extends EaaBase { - int i; + final int i; public EA_32_80_n() { i = decode_fetchds(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_eax.dword+i); } } final static public class EA_32_81_n extends EaaBase { - int i; + final int i; public EA_32_81_n() { i = decode_fetchds(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_ecx.dword+i); } } final static public class EA_32_82_n extends EaaBase { - int i; + final int i; public EA_32_82_n() { i = decode_fetchds(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_edx.dword+i); } } final static public class EA_32_83_n extends EaaBase { - int i; + final int i; public EA_32_83_n() { i = decode_fetchds(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_ebx.dword+i); } } final static public class EA_32_84_n extends EaaBase { - int i; + final int i; boolean ds; Reg reg; @@ -453,21 +453,21 @@ public EA_32_84_n() { } } final static public class EA_32_85_n extends EaaBase { - int i; + final int i; public EA_32_85_n() { i = decode_fetchds(); } public /*PhysPt*/int call() { return (Core.base_ss+reg_ebp.dword+i); } } final static public class EA_32_86_n extends EaaBase { - int i; + final int i; public EA_32_86_n() { i = decode_fetchds(); } public /*PhysPt*/int call() { return (Core.base_ds+reg_esi.dword+i); } } final static public class EA_32_87_n extends EaaBase { - int i; + final int i; public EA_32_87_n() { i = decode_fetchds(); } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp2.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp2.java index 954b0ec8..0f215b57 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp2.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp2.java @@ -6,8 +6,8 @@ public class Grp2 extends Helper { static public class ROLB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public ROLB_reg(int rm, int val) { this.val=val; @@ -25,20 +25,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROL "+earb.getName8()+", "+val;} } static public class RORB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public RORB_reg(int rm, int val) { this.val=val; @@ -56,20 +48,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROR "+earb.getName8()+", "+val;} } static public class RCLB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public RCLB_reg(int rm, int val) { this.val=val; @@ -91,16 +75,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCL "+earb.getName8()+", "+val;} } static public class RCRB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public RCRB_reg(int rm, int val) { this.val=val; @@ -122,16 +102,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCR "+earb.getName8()+", "+val;} } static public class SHLB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public SHLB_reg(int rm, int val) { this.val=val; @@ -149,21 +125,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHL "+earb.getName8()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHLB;} } static public class SHRB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public SHRB_reg(int rm, int val) { this.val=val; @@ -181,21 +149,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHR "+earb.getName8()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHRB;} } static public class SARB_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public SARB_reg(int rm, int val) { this.val=val; @@ -213,21 +173,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAR "+earb.getName8()+", "+val;} public int getFlagType() {return FLAG_TYPE_SARB;} } static public class ROLB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public ROLB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -246,20 +198,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROL "+get_eaa.description8()+", "+val;} } static public class RORB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RORB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -279,20 +225,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROR "+get_eaa.description8()+", "+val;} } static public class RCLB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RCLB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -316,16 +256,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCL "+get_eaa.description8()+", "+val;} } static public class RCRB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RCRB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -349,16 +287,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCR "+get_eaa.description8()+", "+val;} } static public class SHLB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SHLB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -378,21 +314,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHL "+get_eaa.description8()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHLB;} } static public class SHRB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SHRB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -411,21 +341,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHR "+get_eaa.description8()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHRB;} } static public class SARB_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SARB_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -444,21 +368,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SAR "+get_eaa.description8()+", "+val;} public int getFlagType() {return FLAG_TYPE_SARB;} } static public class ROLW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public ROLW_reg(int rm, int val) { this.val = val; @@ -476,20 +394,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROL "+earw.getName16()+", "+val;} } static public class RORW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public RORW_reg(int rm, int val) { this.val = val; @@ -507,20 +417,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROR "+earw.getName16()+", "+val;} } static public class RCLW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public RCLW_reg(int rm, int val) { this.val = val; @@ -542,16 +444,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCL "+earw.getName16()+", "+val;} } static public class RCRW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public RCRW_reg(int rm, int val) { this.val = val; @@ -573,16 +471,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCR "+earw.getName16()+", "+val;} } static public class SHLW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public SHLW_reg(int rm, int val) { this.val = val; @@ -600,21 +494,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHL "+earw.getName16()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHLW;} } static public class SHRW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public SHRW_reg(int rm, int val) { this.val = val; @@ -632,21 +518,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHR "+earw.getName16()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHRW;} } static public class SARW_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public SARW_reg(int rm, int val) { this.val = val; @@ -664,21 +542,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAR "+earw.getName16()+", "+val;} public int getFlagType() {return FLAG_TYPE_SARW;} } static public class ROLW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public ROLW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -697,20 +567,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROL "+get_eaa.description16()+", "+val;} } static public class RORW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RORW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -729,20 +593,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROR "+get_eaa.description16()+", "+val;} } static public class RCLW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RCLW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -765,16 +623,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCL "+get_eaa.description16()+", "+val;} } static public class RCRW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RCRW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -797,16 +653,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCR "+get_eaa.description16()+", "+val;} } static public class SHLW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SHLW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -825,21 +679,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHL "+get_eaa.description16()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHLW;} } static public class SHRW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SHRW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -858,21 +706,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHR "+get_eaa.description16()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHRW;} } static public class SARW_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SARW_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -891,20 +733,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SAR "+get_eaa.description16()+", "+val;} public int getFlagType() {return FLAG_TYPE_SARW;} } static public class ROLB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public ROLB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -921,19 +757,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROL "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RORB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public RORB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -950,19 +778,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROR "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCLB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public RCLB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -983,15 +803,11 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCL "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCRB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public RCRB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -1012,15 +828,11 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCR "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class SHLB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public SHLB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -1037,20 +849,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHL "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHLB;} } static public class SHRB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public SHRB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -1067,20 +871,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHR "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHRB;} } static public class SARB_reg_cl extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public SARB_reg_cl(int rm) { earb = Mod.eb(rm); @@ -1097,20 +893,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAR "+earb.getName8()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SARB;} } static public class ROLB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public ROLB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1129,19 +917,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROL "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RORB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RORB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1160,19 +942,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROR "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCLB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RCLB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1195,15 +971,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCL "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCRB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RCRB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1226,15 +1000,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCR "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} } static public class SHLB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SHLB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1253,20 +1025,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHL "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHLB;} } static public class SHRB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SHRB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1285,20 +1051,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHR "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHRB;} } static public class SARB_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SARB_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1317,20 +1077,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SAR "+get_eaa.description8()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SARB;} } static public class ROLW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public ROLW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1347,19 +1101,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROL "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RORW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public RORW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1376,19 +1122,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROR "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCLW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public RCLW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1409,15 +1147,11 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCL "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCRW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public RCRW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1439,15 +1173,11 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCR "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class SHLW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public SHLW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1464,20 +1194,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHL "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHLW;} } static public class SHRW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public SHRW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1494,20 +1216,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHR "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHRW;} } static public class SARW_reg_cl extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public SARW_reg_cl(int rm) { earw = Mod.ew(rm); @@ -1524,20 +1238,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAR "+earw.getName16()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SARW;} } static public class ROLW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public ROLW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1556,19 +1262,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROL "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RORW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RORW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1587,19 +1287,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROR "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCLW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RCLW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1622,15 +1316,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCL "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCRW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RCRW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1653,15 +1345,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCR "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} } static public class SHLW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SHLW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1680,20 +1370,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHL "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHLW;} } static public class SHRW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SHRW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1712,20 +1396,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHR "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHRW;} } static public class SARW_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SARW_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -1744,21 +1422,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SAR "+get_eaa.description16()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SARW;} } static public class ROLD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public ROLD_reg(int rm, int val) { this.val = val; @@ -1775,20 +1447,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROL "+eard.getName()+", "+val;} } static public class RORD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public RORD_reg(int rm, int val) { this.val = val; @@ -1805,20 +1469,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROR "+eard.getName()+", "+val;} } static public class RCLD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public RCLD_reg(int rm, int val) { this.val = val; @@ -1839,16 +1495,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCL "+eard.getName()+", "+val;} } static public class RCRD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public RCRD_reg(int rm, int val) { this.val = val; @@ -1869,16 +1521,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCR "+eard.getName()+", "+val;} } static public class SHLD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public SHLD_reg(int rm, int val) { this.val = val; @@ -1894,21 +1542,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHL "+eard.getName()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHLD;} } static public class SHRD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public SHRD_reg(int rm, int val) { this.val = val; @@ -1924,21 +1564,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHR "+eard.getName()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHRD;} } static public class SARD_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public SARD_reg(int rm, int val) { this.val = val; @@ -1954,21 +1586,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAR "+eard.getName()+", "+val;} public int getFlagType() {return FLAG_TYPE_SARD;} } static public class ROLD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public ROLD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -1985,20 +1609,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROL "+get_eaa.description32()+", "+val;} } static public class RORD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RORD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -2015,20 +1633,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROR "+get_eaa.description32()+", "+val;} } static public class RCLD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RCLD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -2049,16 +1661,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCL "+get_eaa.description32()+", "+val;} } static public class RCRD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public RCRD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -2079,16 +1689,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCR "+get_eaa.description32()+", "+val;} } static public class SHLD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SHLD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -2105,21 +1713,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHL "+get_eaa.description32()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHLD;} } static public class SHRD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SHRD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -2136,21 +1738,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHR "+get_eaa.description32()+", "+val;} public int getFlagType() {return FLAG_TYPE_SHRD;} } static public class SARD_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public SARD_mem(EaaBase get_eaa, int val) { this.get_eaa = get_eaa; @@ -2167,20 +1763,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SAR "+get_eaa.description32()+", "+val;} public int getFlagType() {return FLAG_TYPE_SARD;} } static public class ROLD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public ROLD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2197,19 +1787,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROL "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RORD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public RORD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2226,19 +1808,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ROR "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCLD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public RCLD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2259,15 +1833,11 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCL "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCRD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public RCRD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2289,15 +1859,11 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "RCR "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} } static public class SHLD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public SHLD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2314,20 +1880,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHL "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHLD;} } static public class SHRD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public SHRD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2344,20 +1902,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SHR "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHRD;} } static public class SARD_reg_cl extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public SARD_reg_cl(int rm) { eard = Mod.ed(rm); @@ -2374,20 +1924,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAR "+eard.getName()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SARD;} } static public class ROLD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public ROLD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2406,19 +1948,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROL "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RORD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RORD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2437,19 +1973,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ROR "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCLD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RCLD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2472,15 +2002,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCL "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} } static public class RCRD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public RCRD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2503,15 +2031,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "RCR "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} } static public class SHLD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SHLD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2530,20 +2056,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHL "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHLD;} } static public class SHRD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SHRD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2562,20 +2082,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SHR "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SHRD;} } static public class SARD_mem_cl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SARD_mem_cl(EaaBase get_eaa) { this.get_eaa = get_eaa; @@ -2594,14 +2108,8 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SAR "+get_eaa.description32()+", "+CPU_Regs.reg_ecx.getName8();} public int getFlagType() {return FLAG_TYPE_SARD;} } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp3.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp3.java index 44cfbe46..a6e484f9 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp3.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Grp3.java @@ -7,8 +7,8 @@ public class Grp3 extends Helper { static public class Testb_reg extends Op { - int val; - CPU_Regs.Reg earb; + final int val; + final CPU_Regs.Reg earb; public Testb_reg(int rm) { this.val=decode_fetchb(); @@ -25,21 +25,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+earb.getName8()+", 0x"+Integer.toHexString(val);} public int getFlagType() {return FLAG_TYPE_TESTB;} } static public class Testb_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public Testb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -57,20 +49,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "TEST "+get_eaa.description8()+", 0x"+Integer.toHexString(val);} public int getFlagType() {return FLAG_TYPE_TESTB;} } static public class NotEb_reg extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public NotEb_reg(int rm) { earb = Mod.eb(rm); @@ -81,23 +67,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NOT "+earb.getName8();} } static public class NotEb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public NotEb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -109,23 +83,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "NOT "+get_eaa.description8();} } static public class NegEb_reg extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public NegEb_reg(int rm) { earb = Mod.eb(rm); @@ -134,7 +98,7 @@ public NegEb_reg(int rm) { public int call() { Flags.type=Flags.t_NEGb; Flags.lf_var1b(earb.get8()); - Flags.lf_resb(0-Flags.lf_var1b()); + Flags.lf_resb(-Flags.lf_var1b()); earb.set8(Flags.lf_resb()); CPU_Regs.reg_eip+=eip_count;return next.call(); } @@ -143,20 +107,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NEG "+earb.getName8();} public int getFlagType() {return FLAG_TYPE_NEGB;} } static public class NegEb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public NegEb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -166,7 +122,7 @@ public int call() { Flags.type=Flags.t_NEGb; int eaa = get_eaa.call(); Flags.lf_var1b(Memory.mem_readb(eaa)); - Flags.lf_resb(0-Flags.lf_var1b()); + Flags.lf_resb(-Flags.lf_var1b()); Memory.mem_writeb(eaa,Flags.lf_resb()); CPU_Regs.reg_eip+=eip_count;return next.call(); } @@ -175,20 +131,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "NEG "+get_eaa.description8();} public int getFlagType() {return FLAG_TYPE_NEGB;} } static public class MulAlEb_reg extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public MulAlEb_reg(int rm) { earb = Mod.eb(rm); @@ -203,19 +153,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MUL "+CPU_Regs.reg_eax.getName8()+", "+earb.getName8();} } static public class MulAlEb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MulAlEb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -231,19 +173,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MUL "+CPU_Regs.reg_eax.getName8()+", "+get_eaa.description8();} } static public class IMulAlEb_reg extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public IMulAlEb_reg(int rm) { earb = Mod.eb(rm); @@ -258,19 +194,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+CPU_Regs.reg_eax.getName8()+", "+earb.getName8();} } static public class IMulAlEb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public IMulAlEb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -286,19 +214,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MUL "+CPU_Regs.reg_eax.getName8()+", "+get_eaa.description8();} } static public class DivAlEb_reg extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public DivAlEb_reg(int rm) { earb = Mod.eb(rm); @@ -314,19 +236,13 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DIV "+CPU_Regs.reg_eax.getName8()+", "+earb.getName8();} } static public class DivAlEb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public DivAlEb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -343,19 +259,14 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DIV "+CPU_Regs.reg_eax.getName8()+", "+get_eaa.description8();} } static public class IDivAlEb_reg extends Op { - CPU_Regs.Reg earb; + final CPU_Regs.Reg earb; public IDivAlEb_reg(int rm) { earb = Mod.eb(rm); @@ -371,19 +282,13 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IDIV "+CPU_Regs.reg_eax.getName8()+", "+earb.getName8();} } static public class IDivAlEb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public IDivAlEb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -400,20 +305,15 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IDIV "+CPU_Regs.reg_eax.getName8()+", "+get_eaa.description8();} } static public class Testw_reg extends Op { - int val; - CPU_Regs.Reg earw; + final int val; + final CPU_Regs.Reg earw; public Testw_reg(int rm) { this.val=decode_fetchw(); @@ -430,21 +330,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+earw.getName16()+", 0x"+Integer.toHexString(val);} public int getFlagType() {return FLAG_TYPE_TESTW;} } static public class Testw_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public Testw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -462,20 +354,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "TEST "+get_eaa.description32()+", 0x"+Integer.toHexString(val);} public int getFlagType() {return FLAG_TYPE_TESTW;} } static public class NotEw_reg extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public NotEw_reg(int rm) { earw = Mod.ew(rm); @@ -486,23 +372,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NOT "+earw.getName16();} } static public class NotEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public NotEw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -514,23 +388,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "NOT "+get_eaa.description16();} } static public class NegEw_reg extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public NegEw_reg(int rm) { earw = Mod.ew(rm); @@ -539,7 +403,7 @@ public NegEw_reg(int rm) { public int call() { Flags.type=Flags.t_NEGw; Flags.lf_var1w(earw.word()); - Flags.lf_resw(0-Flags.lf_var1w()); + Flags.lf_resw(-Flags.lf_var1w()); earw.word(Flags.lf_resw()); CPU_Regs.reg_eip+=eip_count;return next.call(); } @@ -548,20 +412,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NEG "+earw.getName16();} public int getFlagType() {return FLAG_TYPE_NEGW;} } static public class NegEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public NegEw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -571,7 +427,7 @@ public int call() { Flags.type=Flags.t_NEGw; int eaa = get_eaa.call(); Flags.lf_var1w(Memory.mem_readw(eaa)); - Flags.lf_resw(0-Flags.lf_var1w()); + Flags.lf_resw(-Flags.lf_var1w()); Memory.mem_writew(eaa,Flags.lf_resw()); CPU_Regs.reg_eip+=eip_count;return next.call(); } @@ -580,20 +436,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "NEG "+get_eaa.description16();} public int getFlagType() {return FLAG_TYPE_NEGW;} } static public class MulAxEw_reg extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public MulAxEw_reg(int rm) { earw = Mod.ew(rm); @@ -608,19 +458,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MUL "+CPU_Regs.reg_eax.getName16()+", "+earw.getName16();} } static public class MulAxEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MulAxEw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -636,19 +478,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MUL "+CPU_Regs.reg_eax.getName16()+", "+get_eaa.description16();} } static public class IMulAxEw_reg extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public IMulAxEw_reg(int rm) { earw = Mod.ew(rm); @@ -663,19 +499,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+CPU_Regs.reg_eax.getName16()+", "+earw.getName16();} } static public class IMulAxEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public IMulAxEw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -691,19 +519,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IMUL "+CPU_Regs.reg_eax.getName16()+", "+get_eaa.description16();} } static public class DivAxEw_reg extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public DivAxEw_reg(int rm) { earw = Mod.ew(rm); @@ -719,19 +541,13 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DIV "+CPU_Regs.reg_eax.getName16()+", "+earw.getName16();} } static public class DivAxEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public DivAxEw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -748,19 +564,14 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DIV "+CPU_Regs.reg_eax.getName16()+", "+get_eaa.description16();} } static public class IDivAxEw_reg extends Op { - CPU_Regs.Reg earw; + final CPU_Regs.Reg earw; public IDivAxEw_reg(int rm) { earw = Mod.ew(rm); @@ -776,19 +587,13 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IDIV "+CPU_Regs.reg_eax.getName16()+", "+earw.getName16();} } static public class IDivAxEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public IDivAxEw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -805,20 +610,15 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IDIV "+CPU_Regs.reg_eax.getName16()+", "+get_eaa.description16();} } static public class Testd_reg extends Op { - int val; - CPU_Regs.Reg eard; + final int val; + final CPU_Regs.Reg eard; public Testd_reg(int rm) { val= decode_fetchd(); @@ -835,21 +635,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+eard.getName()+", 0x"+Integer.toHexString(val);} public int getFlagType() {return FLAG_TYPE_TESTD;} } static public class Testd_mem extends Op { - int val; - EaaBase get_eaa; + final int val; + final EaaBase get_eaa; public Testd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -867,20 +659,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "TEST "+get_eaa.description32()+", 0x"+Integer.toHexString(val);} public int getFlagType() {return FLAG_TYPE_TESTD;} } static public class NotEd_reg extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public NotEd_reg(int rm) { eard = Mod.ed(rm); @@ -891,23 +677,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NOT "+eard.getName();} } static public class NotEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public NotEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -919,23 +693,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "NOT "+get_eaa.description32();} } static public class NegEd_reg extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public NegEd_reg(int rm) { eard = Mod.ed(rm); @@ -950,20 +714,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NEG "+eard.getName();} public int getFlagType() {return FLAG_TYPE_NEGD;} } static public class NegEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public NegEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -979,20 +735,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "NEG "+get_eaa.description32();} public int getFlagType() {return FLAG_TYPE_NEGD;} } static public class MulAxEd_reg extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public MulAxEd_reg(int rm) { eard = Mod.ed(rm); @@ -1007,19 +757,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MUL "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+eard.getName();} } static public class MulAxEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MulAxEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -1035,19 +777,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MUL "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+get_eaa.description32();} } static public class IMulAxEd_reg extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public IMulAxEd_reg(int rm) { eard = Mod.ed(rm); @@ -1062,19 +798,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+eard.getName();} } static public class IMulAxEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public IMulAxEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -1090,19 +818,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF | CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MUL "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+get_eaa.description32();} } static public class DivAxEd_reg extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public DivAxEd_reg(int rm) { eard = Mod.ed(rm); @@ -1118,19 +840,13 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DIV "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+eard.getName();} } static public class DivAxEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public DivAxEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -1147,19 +863,14 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DIV "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+get_eaa.description32();} } static public class IDivAxEd_reg extends Op { - CPU_Regs.Reg eard; + final CPU_Regs.Reg eard; public IDivAxEd_reg(int rm) { eard = Mod.ed(rm); @@ -1175,19 +886,13 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IDIV "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+eard.getName();} } static public class IDivAxEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public IDivAxEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -1204,14 +909,9 @@ public int sets() { return 0; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IDIV "+CPU_Regs.reg_eax.getName()+" "+CPU_Regs.reg_edx.getName()+", "+get_eaa.description32();} } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Helper.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Helper.java index 8869c429..13fd9301 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Helper.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Helper.java @@ -1,7 +1,6 @@ package jdos.cpu.core_dynamic; import jdos.cpu.CPU_Regs; -import jdos.cpu.PageFaultException; import jdos.hardware.Memory; import jdos.hardware.RAM; import jdos.misc.Log; @@ -12,7 +11,7 @@ public class Helper extends CPU_Regs { static protected int prefixes = 0; static protected int opcode_index = 0; - static protected final long[] AddrMaskTable={0x0000ffffl,0xffffffffl}; + static protected final long[] AddrMaskTable={0x0000ffffL, 0xffffffffL}; static protected final int[] AddrMaskTable1={0x0000ffff,0xffffffff}; protected static final int OPCODE_NONE=0x000; @@ -108,7 +107,7 @@ static public int decode_fetchd() { /*Bit32u*/int val=decode_fetchb(); val|=decode_fetchb() << 8; val|=decode_fetchb() << 16; - val|=(long)decode_fetchb() << 24; + val|= (int) ((long)decode_fetchb() << 24); return val; /* Advance to the next page */ } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst1.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst1.java index 6847ab63..3f1c23b9 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst1.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst1.java @@ -13,8 +13,8 @@ public class Inst1 extends Helper { final static public class Addb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Addb_reg(Reg e, Reg g) { this.e = e; @@ -30,21 +30,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class AddEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AddEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -60,21 +52,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class AddGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AddGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -90,21 +76,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class Addw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Addw_reg(Reg e, Reg g) { this.e = e; @@ -120,21 +100,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class AddEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AddEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -150,21 +122,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class AddGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AddGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -180,20 +146,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class AddAlIb extends Op { - int i; + final int i; public AddAlIb(int i) { this.i = i; @@ -207,20 +167,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class AddAxIw extends Op { - int i; + final int i; public AddAxIw(int i) { this.i = i; @@ -234,21 +186,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class Orb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Orb_reg(Reg e, Reg g) { this.e = e; @@ -265,21 +209,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ORB;} } final static public class OrEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public OrEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -296,21 +232,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ORB;} } final static public class OrGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public OrGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -327,21 +257,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_ORB;} } final static public class Orw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Orw_reg(Reg e, Reg g) { this.e = e; @@ -358,20 +282,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ORW;} } final static public class OrEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public OrEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -388,21 +305,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ORW;} } final static public class OrGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public OrGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -419,20 +330,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_ORW;} } final static public class OrAlIb extends Op { - int i; + final int i; public OrAlIb(int i) { this.i = i; @@ -447,20 +352,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_ORB;} } final static public class OrAxIw extends Op { - int i; + final int i; public OrAxIw(int i) { this.i = i; @@ -475,21 +372,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_ORW;} } final static public class Adcb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Adcb_reg(Reg e, Reg g) { this.e = e; @@ -509,17 +398,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ADCB;} } final static public class AdcEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AdcEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -539,17 +424,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ADCB;} } final static public class AdcGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AdcGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -569,17 +452,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_ADCB;} } final static public class Adcw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Adcw_reg(Reg e, Reg g) { this.e = e; @@ -599,17 +480,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ADCW;} } final static public class AdcEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AdcEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -629,17 +506,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ADCW;} } final static public class AdcGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AdcGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -659,16 +534,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_ADCW;} } final static public class AdcAlIb extends Op { - int i; + final int i; public AdcAlIb(int i) { this.i = i; @@ -686,16 +559,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_ADCB;} } final static public class AdcAxIw extends Op { - int i; + final int i; public AdcAxIw(int i) { this.i = i; @@ -713,17 +582,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_ADCW;} } final static public class Sbbb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Sbbb_reg(Reg e, Reg g) { this.e = e; @@ -743,17 +608,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_SBBB;} } final static public class SbbEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public SbbEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -773,17 +634,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_SBBB;} } final static public class SbbGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public SbbGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -803,17 +662,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_SBBB;} } final static public class Sbbw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Sbbw_reg(Reg e, Reg g) { this.e = e; @@ -833,17 +690,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_SBBW;} } final static public class SbbEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public SbbEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -863,17 +716,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_SBBW;} } final static public class SbbGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public SbbGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -893,16 +744,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_SBBW;} } final static public class SbbAlIb extends Op { - int i; + final int i; public SbbAlIb(int i) { this.i = i; @@ -920,16 +769,12 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_SBBB;} } final static public class SbbAxIw extends Op { - int i; + final int i; public SbbAxIw(int i) { this.i = i; @@ -947,17 +792,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_SBBW;} } final static public class Andb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Andb_reg(Reg e, Reg g) { this.e = e; @@ -974,21 +815,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ANDB;} } final static public class AndEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AndEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -1005,21 +838,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_ANDB;} } final static public class AndGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AndGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -1036,21 +863,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_ANDB;} } final static public class Andw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Andw_reg(Reg e, Reg g) { this.e = e; @@ -1067,21 +888,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ANDW;} } final static public class AndEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AndEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -1098,21 +911,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_ANDW;} } final static public class AndGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AndGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -1129,20 +936,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_ANDW;} } final static public class AndAlIb extends Op { - int i; + final int i; public AndAlIb(int i) { this.i = i; @@ -1157,20 +958,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_ANDB;} } final static public class AndAxIw extends Op { - int i; + final int i; public AndAxIw(int i) { this.i = i; @@ -1185,21 +978,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_ANDW;} } final static public class Subb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Subb_reg(Reg e, Reg g) { this.e = e; @@ -1215,21 +1000,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_SUBB;} } final static public class SubEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public SubEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -1245,21 +1022,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_SUBB;} } final static public class SubGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public SubGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -1275,21 +1046,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_SUBB;} } final static public class Subw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Subw_reg(Reg e, Reg g) { this.e = e; @@ -1305,21 +1070,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_SUBW;} } final static public class SubEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public SubEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -1335,21 +1092,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_SUBW;} } final static public class SubGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public SubGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -1365,20 +1116,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_SUBW;} } final static public class SubAlIb extends Op { - int i; + final int i; public SubAlIb(int i) { this.i = i; @@ -1392,20 +1137,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_SUBB;} } final static public class SubAxIw extends Op { - int i; + final int i; public SubAxIw(int i) { this.i = i; @@ -1419,21 +1156,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_SUBW;} } final static public class Xorb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Xorb_reg(Reg e, Reg g) { this.e = e; @@ -1450,21 +1179,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_XORB;} } final static public class XorEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public XorEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -1481,21 +1202,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_XORB;} } final static public class XorGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public XorGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -1512,21 +1227,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_XORB;} } final static public class Xorw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Xorw_reg(Reg e, Reg g) { this.e = e; @@ -1543,21 +1252,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_XORW;} } final static public class XorEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public XorEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -1574,21 +1275,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_XORW;} } final static public class XorGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public XorGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -1605,20 +1300,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_XORW;} } final static public class XorAlIb extends Op { - int i; + final int i; public XorAlIb(int i) { this.i = i; @@ -1633,20 +1322,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_XORB;} } final static public class XorAxIw extends Op { - int i; + final int i; public XorAxIw(int i) { this.i = i; @@ -1661,21 +1342,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_XORW;} } final static public class Cmpb_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Cmpb_reg(Reg e, Reg g) { this.e = e; @@ -1691,21 +1364,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+e.getName8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_CMPB;} } final static public class CmpEbGb_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public CmpEbGb_mem(EaaBase e, Reg g) { this.e = e; @@ -1721,21 +1386,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+e.description8()+", "+g.getName8();} public int getFlagType() {return FLAG_TYPE_CMPB;} } final static public class CmpGbEb_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public CmpGbEb_mem(Reg e, EaaBase g) { this.e = e; @@ -1751,21 +1410,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+e.getName8()+", "+g.description8();} public int getFlagType() {return FLAG_TYPE_CMPB;} } final static public class Cmpw_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Cmpw_reg(Reg e, Reg g) { this.e = e; @@ -1781,21 +1434,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+e.getName16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_CMPW;} } final static public class CmpEwGw_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public CmpEwGw_mem(EaaBase e, Reg g) { this.e = e; @@ -1811,21 +1456,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+e.description16()+", "+g.getName16();} public int getFlagType() {return FLAG_TYPE_CMPW;} } final static public class CmpGwEw_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public CmpGwEw_mem(Reg e, EaaBase g) { this.e = e; @@ -1841,20 +1480,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+e.getName16()+", "+g.description16();} public int getFlagType() {return FLAG_TYPE_CMPW;} } final static public class CmpAlIb extends Op { - int i; + final int i; public CmpAlIb(int i) { this.i = i; @@ -1868,20 +1501,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+CPU_Regs.reg_eax.getName8()+", "+i;} public int getFlagType() {return FLAG_TYPE_CMPB;} } final static public class CmpAxIw extends Op { - int i; + final int i; public CmpAxIw(int i) { this.i = i; @@ -1895,14 +1520,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+CPU_Regs.reg_eax.getName16()+", "+i;} public int getFlagType() {return FLAG_TYPE_CMPW;} } @@ -1913,18 +1530,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH ES";} } @@ -1934,18 +1541,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return ES|FROM_STACK;} public String description() {return "POP ES";} } @@ -1956,18 +1554,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH CS";} } @@ -1977,18 +1565,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH SS";} } @@ -1999,18 +1577,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return SS|FROM_STACK;} public String description() {return "POP SS";} } @@ -2021,18 +1590,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH DS";} } @@ -2044,18 +1603,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return DS|FROM_STACK;} public String description() {return "POP DS";} } @@ -2066,18 +1616,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SEG ES";} } @@ -2087,18 +1625,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SEG CS";} } @@ -2108,18 +1634,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SEG SS";} } @@ -2129,18 +1643,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SEG DS";} } @@ -2150,18 +1652,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SEG FS";} } @@ -2171,18 +1661,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SEG GS";} } @@ -2201,10 +1679,6 @@ public int gets() { return CPU_Regs.AF | CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "DAA";} } @@ -2222,10 +1696,6 @@ public int gets() { return CPU_Regs.AF | CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "DAS";} } @@ -2243,10 +1713,6 @@ public int gets() { return CPU_Regs.AF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AAA";} } @@ -2264,15 +1730,11 @@ public int gets() { return CPU_Regs.AF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AAS";} } final static public class Incw extends Op { - Reg reg; + final Reg reg; public Incw(Reg reg) { this.reg = reg; @@ -2292,20 +1754,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "INC "+reg.getName16();} public int getFlagType() {return FLAG_TYPE_INCW;} } final static public class Decw extends Op { - Reg reg; + final Reg reg; public Decw(Reg reg) { this.reg = reg; @@ -2325,20 +1779,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "DEC "+reg.getName16();} public int getFlagType() {return FLAG_TYPE_DECW;} } final static public class Pushw extends Op { - Reg reg; + final Reg reg; public Pushw(Reg reg) { this.reg = reg; @@ -2349,23 +1795,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+reg.getName16();} } final static public class Popw extends Op { - Reg reg; + final Reg reg; public Popw(Reg reg) { this.reg = reg; @@ -2376,26 +1812,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POP "+reg.getName16();} } final static public class DoStringException extends Op { - int type; - int width; - int prefixes; - boolean rep_zero; + final int type; + final int width; + final int prefixes; + final boolean rep_zero; public DoStringException(int type, int width) { this.type = type; @@ -2411,25 +1837,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return StringOp.description(type)+" prefix=0x"+Integer.toHexString(prefixes);} } final static public class DoString extends Op { - int type; - int prefixes; - boolean rep_zero; + final int type; + final int prefixes; + final boolean rep_zero; public DoString(int type) { this.prefixes = Helper.prefixes; @@ -2446,14 +1863,9 @@ public int sets() { return 0; // :TODO: what about cmp } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return StringOp.description(type)+" prefix=0x"+Integer.toHexString(prefixes);} } @@ -2474,18 +1886,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSHA";} } @@ -2496,24 +1898,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POPA";} } final static public class Bound extends Op { - Reg reg; - EaaBase get_eaa; + final Reg reg; + final EaaBase get_eaa; public Bound() { int rm=decode_fetchb(); reg = Mod.gw(rm); @@ -2530,24 +1922,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "BOUND "+reg.getName16()+", "+get_eaa.description16();} } final static public class ArplEwRw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public ArplEwRw_reg(int rm) { earw = Mod.ew(rm); @@ -2566,21 +1949,14 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ARPL "+earw.getName16()+", "+rw.getName16();} } final static public class ArplEwRw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public ArplEwRw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2600,20 +1976,15 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ARPL "+get_eaa.description16()+", "+rw.getName16();} } final static public class Push16 extends Op { - int value; + final int value; public Push16(int value) { this.value = value; @@ -2624,25 +1995,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSHw "+value;} } final static public class IMULGwEwIw_reg extends Op { - int op3; - Reg rw; - Reg earw; + final int op3; + final Reg rw; + final Reg earw; public IMULGwEwIw_reg(int rm) { op3 = decode_fetchws(); @@ -2659,21 +2020,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+rw.getName16()+", "+earw.getName16()+", "+op3;} } final static public class IMULGwEwIw_mem extends Op { - int op3; - Reg rw; - EaaBase get_eaa; + final int op3; + final Reg rw; + final EaaBase get_eaa; public IMULGwEwIw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2691,21 +2044,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IMUL "+rw.getName16()+", "+get_eaa.description16()+", "+op3;} } final static public class IMULGwEwIb_reg extends Op { - int op3; - Reg rw; - Reg earw; + final int op3; + final Reg rw; + final Reg earw; public IMULGwEwIb_reg(int rm) { op3 = decode_fetchbs(); @@ -2722,21 +2069,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+rw.getName16()+", "+earw.getName16()+", "+op3;} } final static public class IMULGwEwIb_mem extends Op { - int op3; - Reg rw; - EaaBase get_eaa; + final int op3; + final Reg rw; + final EaaBase get_eaa; public IMULGwEwIb_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2754,19 +2093,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IMUL "+rw.getName16()+", "+get_eaa.description16()+", "+op3;} } static abstract public class JumpCond16_b extends Op { - int offset; + final int offset; public JumpCond16_b() { offset = decode_fetchbs(); } @@ -2780,8 +2113,6 @@ final protected int jump(boolean COND) { return Constants.BR_Link2; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} } @@ -2791,10 +2122,6 @@ public int call() { return jump(Flags.TFLG_O()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -2806,10 +2133,6 @@ public int call() { return jump(Flags.TFLG_NO()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -2821,10 +2144,6 @@ public int call() { return jump(Flags.TFLG_B()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -2836,10 +2155,6 @@ public int call() { return jump(Flags.TFLG_NB()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -2851,10 +2166,6 @@ public int call() { return jump(Flags.TFLG_Z()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -2866,10 +2177,6 @@ public int call() { return jump(Flags.TFLG_NZ()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -2881,10 +2188,6 @@ public int call() { return jump(Flags.TFLG_BE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -2896,10 +2199,6 @@ public int call() { return jump(Flags.TFLG_NBE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -2911,10 +2210,6 @@ public int call() { return jump(Flags.TFLG_S()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -2926,10 +2221,6 @@ public int call() { return jump(Flags.TFLG_NS()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -2941,10 +2232,6 @@ public int call() { return jump(Flags.TFLG_P()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -2956,10 +2243,6 @@ public int call() { return jump(Flags.TFLG_NP()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -2971,10 +2254,6 @@ public int call() { return jump(Flags.TFLG_L()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -2986,10 +2265,6 @@ public int call() { return jump(Flags.TFLG_NL()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -3001,10 +2276,6 @@ public int call() { return jump(Flags.TFLG_LE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -3016,10 +2287,6 @@ public int call() { return jump(Flags.TFLG_NLE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -3027,8 +2294,8 @@ public int gets() { } final static public class GrplEbIb_reg_add extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_add(int rm) { earb = Mod.eb(rm); @@ -3044,21 +2311,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class GrplEbIb_reg_or extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_or(int rm) { earb = Mod.eb(rm); @@ -3075,21 +2334,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ORB;} } final static public class GrplEbIb_reg_adc extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_adc(int rm) { earb = Mod.eb(rm); @@ -3109,17 +2360,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADCB;} } final static public class GrplEbIb_reg_sbb extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_sbb(int rm) { earb = Mod.eb(rm); @@ -3139,17 +2386,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SBBB;} } final static public class GrplEbIb_reg_and extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_and(int rm) { earb = Mod.eb(rm); @@ -3166,21 +2409,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ANDB;} } final static public class GrplEbIb_reg_sub extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_sub(int rm) { earb = Mod.eb(rm); @@ -3196,21 +2431,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SUBB;} } final static public class GrplEbIb_reg_xor extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_xor(int rm) { earb = Mod.eb(rm); @@ -3227,21 +2454,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_XORB;} } final static public class GrplEbIb_reg_cmp extends Op { - Reg earb; - int ib; + final Reg earb; + final int ib; public GrplEbIb_reg_cmp(int rm) { earb = Mod.eb(rm); @@ -3257,21 +2476,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+earb.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_CMPB;} } final static public class GrplEbIb_mem_add extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_add(int rm) { get_eaa= Mod.getEaa(rm); @@ -3288,21 +2499,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class GrplEbIb_mem_or extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_or(int rm) { get_eaa= Mod.getEaa(rm); @@ -3320,21 +2525,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ORB;} } final static public class GrplEbIb_mem_adc extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_adc(int rm) { get_eaa= Mod.getEaa(rm); @@ -3355,17 +2554,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADCB;} } final static public class GrplEbIb_mem_sbb extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_sbb(int rm) { get_eaa= Mod.getEaa(rm); @@ -3386,17 +2583,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SBBB;} } final static public class GrplEbIb_mem_and extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_and(int rm) { get_eaa= Mod.getEaa(rm); @@ -3414,21 +2609,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ANDB;} } final static public class GrplEbIb_mem_sub extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_sub(int rm) { get_eaa= Mod.getEaa(rm); @@ -3445,21 +2634,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SUBB;} } final static public class GrplEbIb_mem_xor extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_xor(int rm) { get_eaa= Mod.getEaa(rm); @@ -3477,21 +2660,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_XORB;} } final static public class GrplEbIb_mem_cmp extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEbIb_mem_cmp(int rm) { get_eaa= Mod.getEaa(rm); @@ -3508,21 +2685,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+get_eaa.description8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_CMPB;} } final static public class GrplEwIw_reg_add extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_add(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3541,21 +2712,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class GrplEwIw_reg_or extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_or(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3575,21 +2738,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ORW;} } final static public class GrplEwIw_reg_adc extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_adc(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3612,17 +2767,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADCW;} } final static public class GrplEwIw_reg_sbb extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_sbb(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3645,17 +2796,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SBBW;} } final static public class GrplEwIw_reg_and extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_and(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3675,21 +2822,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ANDW;} } final static public class GrplEwIw_reg_sub extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_sub(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3708,21 +2847,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SUBW;} } final static public class GrplEwIw_reg_xor extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_xor(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3742,21 +2873,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_XORW;} } final static public class GrplEwIw_reg_cmp extends Op { - Reg earw; - int ib; + final Reg earw; + final int ib; public GrplEwIw_reg_cmp(int rm, boolean signed) { earw = Mod.ew(rm); @@ -3775,21 +2898,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+earw.getName16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_CMPW;} } final static public class GrplEwIw_mem_add extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_add(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -3809,21 +2924,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class GrplEwIw_mem_or extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_or(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -3844,21 +2953,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ORW;} } final static public class GrplEwIw_mem_adc extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_adc(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -3882,17 +2985,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADCW;} } final static public class GrplEwIw_mem_sbb extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_sbb(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -3916,17 +3017,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SBBW;} } final static public class GrplEwIw_mem_and extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_and(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -3947,21 +3046,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ANDW;} } final static public class GrplEwIw_mem_sub extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_sub(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -3981,21 +3074,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SUBW;} } final static public class GrplEwIw_mem_xor extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_xor(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -4016,21 +3103,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_XORW;} } final static public class GrplEwIw_mem_cmp extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEwIw_mem_cmp(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -4050,21 +3131,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+get_eaa.description16()+", "+ib;} public int getFlagType() {return FLAG_TYPE_CMPW;} } final static public class TestEbGb_reg extends Op { - Reg rb; - Reg earb; + final Reg rb; + final Reg earb; public TestEbGb_reg(int rm) { rb = Mod.gb(rm); @@ -4081,21 +3156,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+earb.getName8()+", "+rb.getName8();} public int getFlagType() {return FLAG_TYPE_TESTB;} } final static public class TestEbGb_mem extends Op { - Reg rb; - EaaBase get_eaa; + final Reg rb; + final EaaBase get_eaa; public TestEbGb_mem(int rm) { rb = Mod.gb(rm); @@ -4113,21 +3180,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "TEST "+get_eaa.description8()+", "+rb.getName8();} public int getFlagType() {return FLAG_TYPE_TESTB;} } final static public class TestEwGw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public TestEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -4144,21 +3205,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+earw.getName16()+", "+rw.getName16();} public int getFlagType() {return FLAG_TYPE_TESTW;} } final static public class TestEwGw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public TestEwGw_mem(int rm) { rw = Mod.gw(rm); @@ -4176,21 +3229,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "TEST "+get_eaa.description16()+", "+rw.getName16();} public int getFlagType() {return FLAG_TYPE_TESTW;} } final static public class XchgEbGb_reg extends Op { - Reg rb; - Reg earb; + final Reg rb; + final Reg earb; public XchgEbGb_reg(int rm) { rb = Mod.gb(rm); @@ -4204,24 +3251,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XCHG "+earb.getName8()+", "+rb.getName8();} } final static public class XchgEbGb_mem extends Op { - Reg rb; - EaaBase get_eaa; + final Reg rb; + final EaaBase get_eaa; public XchgEbGb_mem(int rm) { rb = Mod.gb(rm); get_eaa= Mod.getEaa(rm); @@ -4236,24 +3271,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XCHG "+get_eaa.description8()+", "+rb.getName8();} } final static public class XchgEwGw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public XchgEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -4267,24 +3292,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XCHG "+earw.getName16()+", "+rw.getName16();} } final static public class XchgEwGw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public XchgEwGw_mem(int rm) { rw = Mod.gw(rm); get_eaa= Mod.getEaa(rm); @@ -4299,24 +3312,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XCHG "+get_eaa.description16()+", "+rw.getName16();} } final static public class MovEbGb_reg extends Op { - Reg rb; - Reg earb; + final Reg rb; + final Reg earb; public MovEbGb_reg(int rm) { rb = Mod.gb(rm); @@ -4328,24 +3331,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earb.getName8()+", "+rb.getName8();} } final static public class MovEbGb_mem extends Op { - Reg rb; - EaaBase get_eaa; + final Reg rb; + final EaaBase get_eaa; public MovEbGb_mem(int rm) { rb = Mod.gb(rm); get_eaa= Mod.getEaa(rm); @@ -4357,26 +3348,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description8()+", "+rb.getName8();} } static final CPU.Descriptor desc=new CPU.Descriptor(); final static public class MovEbGb_mem_5 extends Op { - Reg rb; - EaaBase get_eaa; + final Reg rb; + final EaaBase get_eaa; public MovEbGb_mem_5(int rm) { rb = Mod.gb(rm); get_eaa= Mod.getEaa(rm); @@ -4395,24 +3376,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description8()+", "+rb.getName8();} } final static public class MovEwGw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public MovEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -4424,24 +3396,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", "+rw.getName16();} } final static public class MovEwGw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public MovEwGw_mem(int rm) { rw = Mod.gw(rm); get_eaa= Mod.getEaa(rm); @@ -4453,24 +3413,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", "+rw.getName16();} } final static public class MovGbEb_reg extends Op { - Reg rb; - Reg earb; + final Reg rb; + final Reg earb; public MovGbEb_reg(int rm) { rb = Mod.gb(rm); @@ -4482,24 +3432,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+rb.getName8()+", "+earb.getName8();} } final static public class MovGbEb_mem extends Op { - Reg rb; - EaaBase get_eaa; + final Reg rb; + final EaaBase get_eaa; public MovGbEb_mem(int rm) { rb = Mod.gb(rm); get_eaa= Mod.getEaa(rm); @@ -4511,24 +3449,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+rb.getName8()+", "+get_eaa.description8();} } final static public class MovGwEw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public MovGwEw_reg(int rm) { rw = Mod.gw(rm); @@ -4540,24 +3468,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+rw.getName16()+", "+earw.getName16();} } final static public class MovGwEw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public MovGwEw_mem(int rm) { rw = Mod.gw(rm); get_eaa= Mod.getEaa(rm); @@ -4569,23 +3485,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+rw.getName16()+", "+get_eaa.description16();} } final static public class MovEwEs_reg extends Op { - Reg earw; + final Reg earw; public MovEwEs_reg(int rm) { earw = Mod.ew(rm); } @@ -4595,23 +3501,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", ES";} } final static public class MovEwEs_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEwEs_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -4622,23 +3516,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", ES";} } final static public class MovEwCs_reg extends Op { - Reg earw; + final Reg earw; public MovEwCs_reg(int rm) { earw = Mod.ew(rm); } @@ -4648,23 +3532,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", CS";} } final static public class MovEwCs_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEwCs_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -4675,23 +3547,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", CS";} } final static public class MovEwSs_reg extends Op { - Reg earw; + final Reg earw; public MovEwSs_reg(int rm) { earw = Mod.ew(rm); } @@ -4701,23 +3563,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", SS";} } final static public class MovEwSs_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEwSs_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -4728,23 +3578,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", SS";} } final static public class MovEwDs_reg extends Op { - Reg earw; + final Reg earw; public MovEwDs_reg(int rm) { earw = Mod.ew(rm); } @@ -4754,23 +3594,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", DS";} } final static public class MovEwDs_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEwDs_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -4781,23 +3609,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", DS";} } final static public class MovEwFs_reg extends Op { - Reg earw; + final Reg earw; public MovEwFs_reg(int rm) { earw = Mod.ew(rm); } @@ -4807,23 +3625,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", FS";} } final static public class MovEwFs_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEwFs_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -4834,23 +3640,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", FS";} } final static public class MovEwGs_reg extends Op { - Reg earw; + final Reg earw; public MovEwGs_reg(int rm) { earw = Mod.ew(rm); } @@ -4860,23 +3656,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+earw.getName16()+", GS";} } final static public class MovEwGs_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEwGs_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -4887,18 +3671,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", GS";} } @@ -4906,7 +3680,7 @@ final static public class Illegal extends Op { String msg; public Illegal(String msg) { this.msg = msg; - if (msg == null || msg.length()==0) + if (msg == null || msg.isEmpty()) this.msg = "Illegal Instruction"; } @@ -4915,25 +3689,14 @@ public int call() { return Constants.BR_Illegal; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "Illegal";} } final static public class LeaGw_16 extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public LeaGw_16(int rm) { rw = Mod.gw(rm); @@ -4952,24 +3715,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "LEA "+rw.getName16()+", "+get_eaa.descriptionZero();} } final static public class LeaGw_32 extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public LeaGw_32(int rm) { rw = Mod.gw(rm); @@ -4988,23 +3739,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "LEA "+rw.getName16()+", "+get_eaa.descriptionZero();} } final static public class MovEsEw_reg extends Op { - Reg earw; + final Reg earw; public MovEsEw_reg(int rm) { earw = Mod.ew(rm); } @@ -5014,24 +3753,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return ES|FROM_REG;} public String description() {return "MOV ES, "+earw.getName16();} } final static public class MovEsEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovEsEw_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -5042,24 +3772,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return ES|FROM_MEMORY;} public String description() {return "MOV ES, "+get_eaa.description16();} } final static public class MovSsEw_reg extends Op { - Reg earw; + final Reg earw; public MovSsEw_reg(int rm) { earw = Mod.ew(rm); } @@ -5070,24 +3791,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return SS|FROM_REG;} public String description() {return "MOV SS, "+earw.getName16();} } final static public class MovSsEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovSsEw_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -5099,24 +3811,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return SS|FROM_MEMORY;} public String description() {return "MOV SS, "+get_eaa.description16();} } final static public class MovDsEw_reg extends Op { - Reg earw; + final Reg earw; public MovDsEw_reg(int rm) { earw = Mod.ew(rm); } @@ -5128,24 +3831,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return DS|FROM_REG;} public String description() {return "MOV DS, "+earw.getName16();} } final static public class MovDsEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovDsEw_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -5158,24 +3852,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return DS|FROM_MEMORY;} public String description() {return "MOV DS, "+get_eaa.description16();} } final static public class MovFsEw_reg extends Op { - Reg earw; + final Reg earw; public MovFsEw_reg(int rm) { earw = Mod.ew(rm); } @@ -5185,24 +3870,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return FS|FROM_REG;} public String description() {return "MOV FS, "+earw.getName16();} } final static public class MovFsEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovFsEw_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -5213,24 +3889,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return FS|FROM_MEMORY;} public String description() {return "MOV FS, "+get_eaa.description16();} } final static public class MovGsEw_reg extends Op { - Reg earw; + final Reg earw; public MovGsEw_reg(int rm) { earw = Mod.ew(rm); } @@ -5240,24 +3907,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return GS|FROM_REG;} public String description() {return "MOV GS, "+earw.getName16();} } final static public class MovGsEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public MovGsEw_mem(int rm) { get_eaa= Mod.getEaa(rm); } @@ -5268,24 +3926,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return GS|FROM_MEMORY;} public String description() {return "MOV GS, "+get_eaa.description16();} } final static public class PopEw_reg extends Op { - Reg earw; + final Reg earw; public PopEw_reg(int rm) { earw = Mod.ew(rm); @@ -5296,23 +3945,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POP "+earw.getName16();} } final static public class PopEw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public PopEw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -5325,18 +3964,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POP "+get_eaa.description16();} } @@ -5345,23 +3974,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "NOOP";} } final static public class XchgAx extends Op { - Reg reg; + final Reg reg; public XchgAx(Reg reg) { this.reg = reg; @@ -5374,24 +3991,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XCHG "+reg.getName16()+", "+CPU_Regs.reg_eax.getName16();} } final static public class CallAp extends Op { - int newcs; - int newip; + final int newcs; + final int newip; public CallAp(int newcs, int newip) { this.newcs = newcs; @@ -5410,18 +4015,13 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CALL "+Integer.toHexString(newcs)+":"+Integer.toHexString(newip);} } @@ -5431,10 +4031,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - // Pushes flags public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; @@ -5442,8 +4038,7 @@ public int gets() { public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSHF";} } @@ -5466,10 +4061,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} @@ -5488,14 +4079,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SAHF";} } @@ -5506,24 +4089,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - // OF is not included public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.PF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "LAHF";} } abstract static public class GetEADirect extends Op { - int value; + final int value; public GetEADirect() { if ((prefixes & Core.PREFIX_ADDR)!=0) { @@ -5540,18 +4115,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+CPU_Regs.reg_eax.getName8()+", 0x"+Integer.toHexString(Core.base_ds+value);} } @@ -5562,18 +4127,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+CPU_Regs.reg_eax.getName16()+", 0x"+Integer.toHexString(Core.base_ds+value);} } @@ -5584,18 +4139,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+"0x"+Integer.toHexString(Core.base_ds+value)+", "+CPU_Regs.reg_eax.getName8();} } @@ -5606,23 +4151,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+"0x"+Integer.toHexString(Core.base_ds+value)+", "+CPU_Regs.reg_eax.getName16();} } final static public class TestAlIb extends Op { - int ib; + final int ib; public TestAlIb() { ib = decode_fetchb(); } @@ -5636,20 +4171,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+CPU_Regs.reg_eax.getName8()+", "+ib;} public int getFlagType() {return FLAG_TYPE_TESTB;} } final static public class TestAxIw extends Op { - int iw; + final int iw; public TestAxIw() { iw = decode_fetchw(); } @@ -5663,21 +4190,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+CPU_Regs.reg_eax.getName16()+", "+iw;} public int getFlagType() {return FLAG_TYPE_TESTW;} } final static public class MovIb extends Op { - int ib; - Reg reg; + final int ib; + final Reg reg; public MovIb(Reg reg) { ib = decode_fetchb(); this.reg = reg; @@ -5687,24 +4206,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+reg.getName8()+", "+ib;} } final static public class MovIb_mem extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public MovIb_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -5717,24 +4224,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description8()+", "+ib;} } final static public class MovIw extends Op { - int ib; - Reg reg; + final int ib; + final Reg reg; public MovIw(Reg reg) { ib = decode_fetchw(); @@ -5745,24 +4242,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+reg.getName16()+", "+ib;} } final static public class MovIw_mem extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public MovIw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -5775,23 +4260,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description16()+", "+ib;} } final static public class RetnIw extends Op { - int offset; + final int offset; public RetnIw() { offset = decode_fetchw(); @@ -5803,17 +4278,8 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "RETN "+offset;} } @@ -5824,24 +4290,15 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "RETN";} } final static public class Les extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public Les(int rm) { get_eaa= Mod.getEaa(rm); @@ -5856,25 +4313,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return ES|FROM_MEMORY;} public String description() {return "LES "+rw.getName16()+", "+get_eaa.description16();} } final static public class Lds extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public Lds(int rm) { get_eaa= Mod.getEaa(rm); @@ -5891,25 +4339,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return DS|FROM_MEMORY;} public String description() {return "LDS "+rw.getName16()+", "+get_eaa.description16();} } final static public class EnterIwIb extends Op { - int bytes; - int level; + final int bytes; + final int level; public EnterIwIb() { bytes=decode_fetchw(); @@ -5921,18 +4360,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ENTER "+bytes+", "+level;} } @@ -5944,23 +4373,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LEAVE";} } final static public class RetfIw extends Op { - int words; + final int words; public RetfIw() { words = decode_fetchw(); @@ -5971,17 +4390,13 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "RETF "+words;} } @@ -5993,17 +4408,13 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "RETF";} } @@ -6016,23 +4427,15 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} - public boolean setsEip() {return false;} + public String description() {return "INT3";} } final static public class IntIb extends Op { - int num; + final int num; public IntIb() { num = decode_fetchb(); @@ -6045,18 +4448,10 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} - public boolean setsEip() {return false;} + public String description() {return "INT "+num;} } @@ -6071,10 +4466,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -6082,7 +4473,7 @@ public int gets() { public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} - public boolean setsEip() {return false;} + public String description() {return "INT0";} } @@ -6100,28 +4491,20 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} - public boolean setsEip() {return false;} + public String description() {return "IRET";} } final static public class AamIb extends Op { - int ib; + final int ib; public AamIb() { ib=decode_fetchb(); } public int call() { - if (!Instructions.AAM(ib)) return RUNEXCEPTION(); + if (Instructions.AAM(ib)) return RUNEXCEPTION(); CPU_Regs.reg_eip+=eip_count;return next.call(); } @@ -6129,19 +4512,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - public boolean throwsException() {return ib==0;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AAM "+ib;} } final static public class AadIb extends Op { - int ib; + final int ib; public AadIb() { ib=decode_fetchb(); @@ -6156,14 +4533,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AAD "+ib;} } @@ -6177,14 +4546,6 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SALC";} } @@ -6194,18 +4555,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XLAT";} } @@ -6215,23 +4566,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XLAT";} } final static public class FPU0_normal extends Op { - int rm; + final int rm; public FPU0_normal(int rm) { this.rm = rm; @@ -6242,24 +4583,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU0";} } final static public class FPU0_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU0_ea(int rm) { this.rm = rm; @@ -6271,23 +4600,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU0";} } final static public class FPU1_normal extends Op { - int rm; + final int rm; public FPU1_normal(int rm) { this.rm = rm; @@ -6298,24 +4617,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU1";} } final static public class FPU1_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU1_ea(int rm) { this.rm = rm; @@ -6327,23 +4634,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU1";} } final static public class FPU2_normal extends Op { - int rm; + final int rm; public FPU2_normal(int rm) { this.rm = rm; @@ -6354,24 +4651,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU2";} } final static public class FPU2_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU2_ea(int rm) { this.rm = rm; @@ -6383,23 +4668,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU2";} } final static public class FPU3_normal extends Op { - int rm; + final int rm; public FPU3_normal(int rm) { this.rm = rm; @@ -6410,24 +4685,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU3";} } final static public class FPU3_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU3_ea(int rm) { this.rm = rm; @@ -6439,24 +4702,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU3";} } final static public class FPU4_normal extends Op { - int rm; + final int rm; public FPU4_normal(int rm) { this.rm = rm; @@ -6467,24 +4721,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU4";} } final static public class FPU4_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU4_ea(int rm) { this.rm = rm; @@ -6496,23 +4738,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU4";} } final static public class FPU5_normal extends Op { - int rm; + final int rm; public FPU5_normal(int rm) { this.rm = rm; @@ -6523,24 +4755,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU5";} } final static public class FPU5_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU5_ea(int rm) { this.rm = rm; @@ -6552,23 +4772,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU5";} } final static public class FPU6_normal extends Op { - int rm; + final int rm; public FPU6_normal(int rm) { this.rm = rm; @@ -6579,24 +4789,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU6";} } final static public class FPU6_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU6_ea(int rm) { this.rm = rm; @@ -6608,23 +4806,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU6";} } final static public class FPU7_normal extends Op { - int rm; + final int rm; public FPU7_normal(int rm) { this.rm = rm; @@ -6635,24 +4823,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "FPU7";} } final static public class FPU7_ea extends Op { - int rm; - EaaBase get_eaa; + final int rm; + final EaaBase get_eaa; public FPU7_ea(int rm) { this.rm = rm; @@ -6664,18 +4840,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "FPU7";} } @@ -6685,10 +4851,6 @@ public int call() { return jump(reg_ecx.dword!=0 && !Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -6701,10 +4863,6 @@ public int call() { return jump(reg_ecx.word()!=0 && !Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -6717,10 +4875,6 @@ public int call() { return jump(reg_ecx.dword!=0 && Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -6733,10 +4887,6 @@ public int call() { return jump(reg_ecx.word()!=0 && Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -6749,13 +4899,6 @@ public int call() { return jump(reg_ecx.dword!=0); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } public String description() {return "LOOP";} } @@ -6765,18 +4908,11 @@ public int call() { return jump(reg_ecx.word()!=0); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } public String description() {return "LOOP";} } final static public class Jcxz extends JumpCond16_b { - int mask; + final int mask; public Jcxz(int mask) { this.mask = mask; } @@ -6784,18 +4920,11 @@ public int call() { return jump((reg_ecx.dword & mask)==0); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } public String description() {return "JCXZ";} } final static public class InAlIb extends Op { - int port; + final int port; public InAlIb() { port=decode_fetchb(); @@ -6807,23 +4936,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName8()+" 0x"+Integer.toHexString(port);} } final static public class InAxIb extends Op { - int port; + final int port; public InAxIb() { port=decode_fetchb(); @@ -6835,23 +4955,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName16()+" 0x"+Integer.toHexString(port);} } final static public class OutAlIb extends Op { - int port; + final int port; public OutAlIb() { port=decode_fetchb(); @@ -6863,23 +4974,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OUT "+CPU_Regs.reg_eax.getName8()+" 0x"+Integer.toHexString(port);} } final static public class OutAxIb extends Op { - int port; + final int port; public OutAxIb() { port=decode_fetchb(); @@ -6891,23 +4993,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName16()+" 0x"+Integer.toHexString(port);} } final static public class CallJw extends Op { - int addip; + final int addip; public CallJw() { addip=decode_fetchws(); @@ -6919,15 +5012,6 @@ public int call() { return Constants.BR_Link1; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} @@ -6935,7 +5019,7 @@ public int gets() { } final static public class JmpJw extends Op { - int addip; + final int addip; public JmpJw() { addip=decode_fetchws(); @@ -6946,24 +5030,14 @@ public int call() { return Constants.BR_Link1; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return "JMP "+addip;} } final static public class JmpAp extends Op { - int newip; - int newcs; + final int newip; + final int newcs; public JmpAp() { newip=decode_fetchw(); @@ -6982,10 +5056,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -6998,7 +5068,7 @@ public int gets() { } final static public class JmpJb extends Op { - int addip; + final int addip; public JmpJb() { addip=decode_fetchbs(); @@ -7009,16 +5079,6 @@ public int call() { return Constants.BR_Link1; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return "JMP "+addip;} @@ -7031,18 +5091,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName8()+", "+CPU_Regs.reg_edx.getName16();} } @@ -7053,18 +5104,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName16()+", "+CPU_Regs.reg_edx.getName16();} } @@ -7075,18 +5117,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OUT "+CPU_Regs.reg_eax.getName8()+", "+CPU_Regs.reg_edx.getName16();} } @@ -7097,18 +5130,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OUT "+CPU_Regs.reg_eax.getName16()+", "+CPU_Regs.reg_edx.getName16();} } @@ -7120,18 +5144,10 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} - public boolean setsEip() {return false;} + public String description() {return "ICEBP";} } @@ -7143,18 +5159,14 @@ public int call() { return CB_NONE(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} + public boolean usesEip() {return true;} - public boolean setsEip() {return false;} + public String description() {return "HLT";} } @@ -7173,10 +5185,6 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMC";} } @@ -7191,14 +5199,6 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CLC";} } @@ -7213,14 +5213,6 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "STC";} } @@ -7230,18 +5222,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CLI";} } @@ -7253,16 +5235,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} + public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return "STI";} @@ -7275,18 +5249,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CLD";} } @@ -7297,23 +5259,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "STD";} } final static public class Incb_reg extends Op { - Reg reg; + final Reg reg; public Incb_reg(int rm) { reg = Mod.eb(rm); @@ -7329,20 +5279,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "INC "+reg.getName8();} public int getFlagType() {return FLAG_TYPE_INCB;} } final static public class Incb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Incb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7359,20 +5301,14 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "INC "+get_eaa.description8();} public int getFlagType() {return FLAG_TYPE_INCB;} } final static public class Decb_reg extends Op { - Reg reg; + final Reg reg; public Decb_reg(int rm) { reg = Mod.eb(rm); @@ -7388,20 +5324,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "DEC "+reg.getName8();} public int getFlagType() {return FLAG_TYPE_DECB;} } final static public class Decb_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Decb_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7418,20 +5346,14 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DEC "+get_eaa.description8();} public int getFlagType() {return FLAG_TYPE_DECB;} } final static public class Callback extends Op { - int val; + final int val; public Callback(int val) { this.val = val; @@ -7448,19 +5370,13 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return "Callback "+val;} } final static public class Incw_reg extends Op { - Reg reg; + final Reg reg; public Incw_reg(int rm) { reg = Mod.ew(rm); @@ -7476,20 +5392,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "INC "+reg.getName16();} public int getFlagType() {return FLAG_TYPE_INCW;} } final static public class Incw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Incw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7506,20 +5414,14 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "INC "+get_eaa.description16();} public int getFlagType() {return FLAG_TYPE_INCW;} } final static public class Decw_reg extends Op { - Reg reg; + final Reg reg; public Decw_reg(int rm) { reg = Mod.ew(rm); @@ -7535,20 +5437,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "DEC "+reg.getName16();} public int getFlagType() {return FLAG_TYPE_DECW;} } final static public class Decw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Decw_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7565,20 +5459,14 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DEC "+get_eaa.description16();} public int getFlagType() {return FLAG_TYPE_DECW;} } final static public class CallEv_reg extends Op { - Reg earw; + final Reg earw; public CallEv_reg(int rm) { earw = Mod.ew(rm); @@ -7591,15 +5479,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} @@ -7607,7 +5486,7 @@ public int gets() { } final static public class CallEv_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public CallEv_mem(int rm) { this.get_eaa = Mod.getEaa(rm); } @@ -7620,15 +5499,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} @@ -7636,7 +5506,7 @@ public int gets() { } final static public class CallEp extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public CallEp(int rm) { this.get_eaa = Mod.getEaa(rm); } @@ -7655,10 +5525,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -7671,7 +5537,7 @@ public int gets() { } final static public class JmpEv_reg extends Op { - Reg earw; + final Reg earw; public JmpEv_reg(int rm) { earw = Mod.ew(rm); @@ -7681,23 +5547,12 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} public boolean setsEip() {return true;} public String description() {return "JMP "+earw.getName16();} } final static public class JmpEv_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public JmpEv_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7709,23 +5564,14 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "JMP "+get_eaa.description16();} } final static public class JmpEp extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public JmpEp(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7746,10 +5592,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -7762,7 +5604,7 @@ public int gets() { } final static public class PushEv_reg extends Op { - Reg earw; + final Reg earw; public PushEv_reg(int rm) { earw = Mod.ew(rm); @@ -7773,23 +5615,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+earw.getName16();} } final static public class PushEv_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public PushEv_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -7801,18 +5633,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+get_eaa.description16();} } @@ -7822,18 +5644,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CBW";} } @@ -7843,18 +5653,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CWD";} } @@ -7863,18 +5661,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "WAIT";} } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst2.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst2.java index dac4211e..7eeea761 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst2.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst2.java @@ -7,7 +7,7 @@ public class Inst2 extends Helper { final static public class Sldt_reg extends Op { - Reg earw; + final Reg earw; public Sldt_reg(int rm) { earw = Mod.ew(rm); @@ -19,23 +19,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Sldt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Sldt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -48,23 +36,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Str_reg extends Op { - Reg earw; + final Reg earw; public Str_reg(int rm) { earw = Mod.ew(rm); @@ -76,23 +54,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Str_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Str_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -105,23 +71,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lldt_reg extends Op { - Reg earw; + final Reg earw; public Lldt_reg(int rm) { earw = Mod.ew(rm); @@ -134,23 +90,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lldt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Lldt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -164,23 +110,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Ltr_reg extends Op { - Reg earw; + final Reg earw; public Ltr_reg(int rm) { earw = Mod.ew(rm); @@ -193,23 +129,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Ltr_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Ltr_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -223,23 +149,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Verr_reg extends Op { - Reg earw; + final Reg earw; public Verr_reg(int rm) { earw = Mod.ew(rm); @@ -255,19 +171,13 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Verr_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Verr_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -284,19 +194,13 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Verw_reg extends Op { - Reg earw; + final Reg earw; public Verw_reg(int rm) { earw = Mod.ew(rm); @@ -312,19 +216,13 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Verw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Verw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -341,19 +239,13 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Sgdt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Sgdt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -366,22 +258,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Sidt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Sidt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -394,22 +275,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lgdt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Lgdt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -424,22 +294,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lidt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Lidt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -454,22 +314,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Smsw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Smsw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -481,22 +331,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lmsw_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Lmsw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -509,18 +348,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Invlpg extends Op { @@ -530,18 +359,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lgdt_reg extends Op { @@ -550,19 +369,8 @@ public int call() { return Constants.BR_Illegal; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lidt_reg extends Op { @@ -571,23 +379,12 @@ public int call() { return Constants.BR_Illegal; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Smsw_reg extends Op { - Reg earw; + final Reg earw; public Smsw_reg(int rm) { earw = Mod.ew(rm); @@ -598,22 +395,10 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Lmsw_reg extends Op { - Reg earw; + final Reg earw; public Lmsw_reg(int rm) { earw = Mod.ew(rm); @@ -624,23 +409,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LarGwEw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public LarGwEw_reg(int rm) { earw = Mod.ew(rm); rw = Mod.gw(rm); @@ -656,20 +430,14 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LarGwEw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public LarGwEw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -687,20 +455,14 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LslGwEw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public LslGwEw_reg(int rm) { earw = Mod.ew(rm); @@ -717,20 +479,14 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LslGwEw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public LslGwEw_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -748,15 +504,9 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Clts extends Op { @@ -766,18 +516,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Invd extends Op { @@ -786,23 +525,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovRdCr extends Op { - Reg eard; - int which; + final Reg eard; + final int which; public MovRdCr(int rm) { eard = Mod.ed(rm); @@ -814,23 +542,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovRdDr extends Op { - Reg eard; - int which; + final Reg eard; + final int which; public MovRdDr(int rm) { eard = Mod.ed(rm); @@ -842,24 +559,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV Rd,DRx "+eard.getName()+"=DRX["+which+"]";} } final static public class MovCrRd extends Op { - Reg eard; - int which; + final Reg eard; + final int which; public MovCrRd(int rm) { eard = Mod.ed(rm); @@ -871,24 +578,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV CRx,Rd CR["+which+"]="+eard.dword;} } final static public class MovDrRd extends Op { - Reg eard; - int which; + final Reg eard; + final int which; public MovDrRd(int rm) { eard = Mod.ed(rm); @@ -900,23 +597,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovRdTr extends Op { - Reg eard; - int which; + final Reg eard; + final int which; public MovRdTr(int rm) { eard = Mod.ed(rm); @@ -928,23 +614,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovTrRd extends Op { - Reg eard; - int which; + final Reg eard; + final int which; public MovTrRd(int rm) { eard = Mod.ed(rm); @@ -956,18 +631,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Rdtsc extends Op { @@ -975,27 +639,14 @@ public int call() { /* Use a fixed number when in auto cycles mode as else the reported value changes constantly */ /*Bit64s*/long tsc=(/*Bit64s*/long)(Pic.PIC_FullIndex()*(double) (CPU.CPU_CycleAutoAdjust?70000:CPU.CPU_CycleMax)); reg_edx.dword=(int)(tsc>>>32); - reg_eax.dword=(int)(tsc&0xffffffffl); + reg_eax.dword=(int)(tsc& 0xffffffffL); CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean returnsIllegal() {return false;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } static abstract public class JumpCond16_w extends Op { - int offset; + final int offset; public JumpCond16_w() { offset = decode_fetchws(); } @@ -1008,8 +659,6 @@ final protected int jump(boolean COND) { return Constants.BR_Link2; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} } @@ -1019,10 +668,6 @@ public int call() { return jump(Flags.TFLG_O()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -1033,10 +678,6 @@ public int call() { return jump(Flags.TFLG_NO()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -1047,10 +688,6 @@ public int call() { return jump(Flags.TFLG_B()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -1061,10 +698,6 @@ public int call() { return jump(Flags.TFLG_NB()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -1075,10 +708,6 @@ public int call() { return jump(Flags.TFLG_Z()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -1089,10 +718,6 @@ public int call() { return jump(Flags.TFLG_NZ()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -1103,10 +728,6 @@ public int call() { return jump(Flags.TFLG_BE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -1117,10 +738,6 @@ public int call() { return jump(Flags.TFLG_NBE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -1131,10 +748,6 @@ public int call() { return jump(Flags.TFLG_S()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -1145,10 +758,6 @@ public int call() { return jump(Flags.TFLG_NS()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -1159,10 +768,6 @@ public int call() { return jump(Flags.TFLG_P()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -1173,10 +778,6 @@ public int call() { return jump(Flags.TFLG_NP()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -1187,10 +788,6 @@ public int call() { return jump(Flags.TFLG_L()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -1201,10 +798,6 @@ public int call() { return jump(Flags.TFLG_NL()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -1215,10 +808,6 @@ public int call() { return jump(Flags.TFLG_LE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -1229,17 +818,13 @@ public int call() { return jump(Flags.TFLG_NLE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } } final static public class SETcc_reg_o extends Op { - Reg earb; + final Reg earb; public SETcc_reg_o(int rm) { earb = Mod.eb(rm); @@ -1249,22 +834,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_o extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_o(int rm) { get_eaa= Mod.getEaa(rm); @@ -1275,22 +852,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_no extends Op { - Reg earb; + final Reg earb; public SETcc_reg_no(int rm) { earb = Mod.eb(rm); @@ -1301,22 +871,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_no extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_no(int rm) { get_eaa= Mod.getEaa(rm); @@ -1328,22 +890,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_b extends Op { - Reg earb; + final Reg earb; public SETcc_reg_b(int rm) { earb = Mod.eb(rm); @@ -1354,22 +909,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_b extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_b(int rm) { get_eaa= Mod.getEaa(rm); @@ -1381,22 +928,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_nb extends Op { - Reg earb; + final Reg earb; public SETcc_reg_nb(int rm) { earb = Mod.eb(rm); @@ -1407,22 +947,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_nb extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_nb(int rm) { get_eaa= Mod.getEaa(rm); @@ -1434,22 +966,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_z extends Op { - Reg earb; + final Reg earb; public SETcc_reg_z(int rm) { earb = Mod.eb(rm); @@ -1460,22 +985,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_z extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_z(int rm) { get_eaa= Mod.getEaa(rm); @@ -1487,22 +1004,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_nz extends Op { - Reg earb; + final Reg earb; public SETcc_reg_nz(int rm) { earb = Mod.eb(rm); @@ -1513,22 +1023,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_nz extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_nz(int rm) { get_eaa= Mod.getEaa(rm); @@ -1540,22 +1042,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_be extends Op { - Reg earb; + final Reg earb; public SETcc_reg_be(int rm) { earb = Mod.eb(rm); @@ -1566,22 +1061,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF | CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_be extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_be(int rm) { get_eaa= Mod.getEaa(rm); @@ -1593,22 +1080,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF | CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_nbe extends Op { - Reg earb; + final Reg earb; public SETcc_reg_nbe(int rm) { earb = Mod.eb(rm); @@ -1619,22 +1099,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF | CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_nbe extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_nbe(int rm) { get_eaa= Mod.getEaa(rm); @@ -1646,22 +1118,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF | CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_s extends Op { - Reg earb; + final Reg earb; public SETcc_reg_s(int rm) { earb = Mod.eb(rm); @@ -1672,22 +1137,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_s extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_s(int rm) { get_eaa= Mod.getEaa(rm); @@ -1699,22 +1156,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_ns extends Op { - Reg earb; + final Reg earb; public SETcc_reg_ns(int rm) { earb = Mod.eb(rm); @@ -1725,22 +1175,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_ns extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_ns(int rm) { get_eaa= Mod.getEaa(rm); @@ -1752,22 +1194,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_p extends Op { - Reg earb; + final Reg earb; public SETcc_reg_p(int rm) { earb = Mod.eb(rm); @@ -1777,22 +1212,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_p extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_p(int rm) { get_eaa= Mod.getEaa(rm); @@ -1800,26 +1227,19 @@ public SETcc_mem_p(int rm) { public int call() { int eaa=get_eaa.call(); - Memory.mem_writeb(eaa, (Flags.TFLG_P()) ? 1 : 0); - CPU_Regs.reg_eip+=eip_count;return next.call(); - } - - public int sets() { - return 0; + Memory.mem_writeb(eaa, (Flags.TFLG_P()) ? 1 : 0); + CPU_Regs.reg_eip+=eip_count;return next.call(); } public int gets() { return CPU_Regs.PF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_np extends Op { - Reg earb; + final Reg earb; public SETcc_reg_np(int rm) { earb = Mod.eb(rm); @@ -1830,22 +1250,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_np extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_np(int rm) { get_eaa= Mod.getEaa(rm); @@ -1857,22 +1269,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_l extends Op { - Reg earb; + final Reg earb; public SETcc_reg_l(int rm) { earb = Mod.eb(rm); @@ -1883,22 +1288,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_l extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_l(int rm) { get_eaa= Mod.getEaa(rm); @@ -1910,22 +1307,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_nl extends Op { - Reg earb; + final Reg earb; public SETcc_reg_nl(int rm) { earb = Mod.eb(rm); @@ -1936,22 +1326,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_nl extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_nl(int rm) { get_eaa= Mod.getEaa(rm); @@ -1963,22 +1345,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_le extends Op { - Reg earb; + final Reg earb; public SETcc_reg_le(int rm) { earb = Mod.eb(rm); @@ -1989,22 +1364,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_le extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_le(int rm) { get_eaa= Mod.getEaa(rm); @@ -2016,22 +1383,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_reg_nle extends Op { - Reg earb; + final Reg earb; public SETcc_reg_nle(int rm) { earb = Mod.eb(rm); @@ -2042,22 +1402,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class SETcc_mem_nle extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public SETcc_mem_nle(int rm) { get_eaa= Mod.getEaa(rm); @@ -2069,18 +1421,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class PushFS extends Op { @@ -2089,18 +1434,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class PopFS extends Op { @@ -2109,18 +1443,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return FS|FROM_STACK;} } @@ -2130,25 +1455,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean returnsIllegal() {return false;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEwGw_reg extends Op { int mask; - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public BtEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -2165,20 +1477,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEwGw_mem extends Op { int mask; - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public BtEwGw_mem(int rm) { rw = Mod.gw(rm); @@ -2198,20 +1502,13 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ShldEwGwIb_reg extends Op { - int op3; - Reg rw; - Reg earw; + final int op3; + final Reg rw; + final Reg earw; public ShldEwGwIb_reg(int rm, Reg earw, int op3) { rw = Mod.gw(rm); @@ -2229,21 +1526,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHLW;} } final static public class ShldEwGwIb_mem extends Op { - Reg rw; - EaaBase get_eaa; - int op3; + final Reg rw; + final EaaBase get_eaa; + final int op3; public ShldEwGwIb_mem(int rm, EaaBase get_eaa, int op3) { rw = Mod.gw(rm); @@ -2262,20 +1551,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHLW;} } final static public class ShldEwGwCl_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public ShldEwGwCl_reg(int rm) { rw = Mod.gw(rm); @@ -2293,20 +1576,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHLW;} } final static public class ShldEwGwCl_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public ShldEwGwCl_mem(int rm) { rw = Mod.gw(rm); @@ -2326,14 +1601,8 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHLW;} } @@ -2343,18 +1612,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class PopGS extends Op { @@ -2363,24 +1621,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return GS|FROM_STACK;} } final static public class BtsEwGw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public BtsEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -2398,19 +1646,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtsEwGw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public BtsEwGw_mem(int rm) { rw = Mod.gw(rm); @@ -2432,20 +1672,13 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ShrdEwGwIb_reg extends Op { - int op3; - Reg rw; - Reg earw; + final int op3; + final Reg rw; + final Reg earw; public ShrdEwGwIb_reg(int rm, Reg earw, int op3) { rw = Mod.gw(rm); @@ -2463,21 +1696,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHRW;} } final static public class ShrdEwGwIb_mem extends Op { - Reg rw; - EaaBase get_eaa; - int op3; + final Reg rw; + final EaaBase get_eaa; + final int op3; public ShrdEwGwIb_mem(int rm, EaaBase get_eaa, int op3) { rw = Mod.gw(rm); @@ -2496,20 +1721,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHRW;} } final static public class ShrdEwGwCl_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public ShrdEwGwCl_reg(int rm) { rw = Mod.gw(rm); @@ -2527,20 +1746,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHRW;} } final static public class ShrdEwGwCl_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public ShrdEwGwCl_mem(int rm) { rw = Mod.gw(rm); @@ -2559,20 +1770,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHRW;} } final static public class ImulGwEw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public ImulGwEw_reg(int rm) { rw = Mod.gw(rm); @@ -2588,19 +1793,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ImulGwEw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public ImulGwEw_mem(int rm) { rw = Mod.gw(rm); @@ -2617,19 +1814,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class CmpxchgEbGb_reg extends Op { - Reg rb; - Reg earb; + final Reg rb; + final Reg earb; public CmpxchgEbGb_reg(int rm) { rb = Mod.gb(rm); @@ -2653,19 +1843,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class CmpxchgEbGb_mem extends Op { - Reg rb; - EaaBase get_eaa; + final Reg rb; + final EaaBase get_eaa; public CmpxchgEbGb_mem(int rm) { rb = Mod.gb(rm); @@ -2692,19 +1874,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class CmpxchgEwGw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public CmpxchgEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -2728,19 +1903,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class CmpxchgEwGw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public CmpxchgEwGw_mem(int rm) { rw = Mod.gw(rm); @@ -2767,19 +1934,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LssEw extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public LssEw(int rm) { rw = Mod.gw(rm); @@ -2793,24 +1953,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return SS|FROM_MEMORY;} } final static public class BtrEwGw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public BtrEwGw_reg(int rm) { rw = Mod.gw(rm); @@ -2829,19 +1980,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtrEwGw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public BtrEwGw_mem(int rm) { rw = Mod.gw(rm); @@ -2863,19 +2006,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LfsEw extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public LfsEw(int rm) { rw = Mod.gw(rm); @@ -2889,24 +2025,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return FS|FROM_MEMORY;} } final static public class LgsEw extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public LgsEw(int rm) { rw = Mod.gw(rm); @@ -2920,24 +2047,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return GS|FROM_MEMORY;} } final static public class MovzxGwEb_reg extends Op { - Reg rw; - Reg earb; + final Reg rw; + final Reg earb; public MovzxGwEb_reg(int rm) { rw = Mod.gw(rm); @@ -2949,23 +2067,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovzxGwEb_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public MovzxGwEb_mem(int rm) { rw = Mod.gw(rm); @@ -2978,23 +2084,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovzxGwEw_reg extends Op { - Reg rw; - Reg earw; + final Reg rw; + final Reg earw; public MovzxGwEw_reg(int rm) { rw = Mod.gw(rm); @@ -3006,23 +2101,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovzxGwEw_mem extends Op { - Reg rw; - EaaBase get_eaa; + final Reg rw; + final EaaBase get_eaa; public MovzxGwEw_mem(int rm) { rw = Mod.gw(rm); @@ -3035,23 +2118,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEwIb_reg extends Op { - Reg earw; - int mask; + final Reg earw; + final int mask; public BtEwIb_reg(int rm) { earw = Mod.ew(rm); @@ -3068,19 +2140,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtsEwIb_reg extends Op { - Reg earw; - int mask; + final Reg earw; + final int mask; public BtsEwIb_reg(int rm) { earw = Mod.ew(rm); @@ -3098,19 +2162,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtrEwIb_reg extends Op { - Reg earw; - int mask; + final Reg earw; + final int mask; public BtrEwIb_reg(int rm) { earw = Mod.ew(rm); @@ -3128,19 +2184,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEwIb_reg extends Op { - Reg earw; - int mask; + final Reg earw; + final int mask; public BtcEwIb_reg(int rm) { earw = Mod.ew(rm); @@ -3158,19 +2206,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEwIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtEwIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3189,19 +2229,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtsEwIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtsEwIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3221,19 +2254,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtrEwIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtrEwIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3253,19 +2279,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEwIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtcEwIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3285,19 +2304,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEwGw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public BtcEwGw_reg(int rm) { earw = Mod.ew(rm); @@ -3316,19 +2328,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEwGw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public BtcEwGw_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3350,19 +2354,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsfGwEw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public BsfGwEw_reg(int rm) { earw = Mod.ew(rm); @@ -3388,19 +2385,11 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsfGwEw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public BsfGwEw_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3427,19 +2416,12 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsrGwEw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public BsrGwEw_reg(int rm) { earw = Mod.ew(rm); @@ -3465,19 +2447,11 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsrGwEw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public BsrGwEw_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3504,19 +2478,12 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovsxGwEb_reg extends Op { - Reg earb; - Reg rw; + final Reg earb; + final Reg rw; public MovsxGwEb_reg(int rm) { earb = Mod.eb(rm); @@ -3528,23 +2495,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovsxGwEb_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public MovsxGwEb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3557,22 +2512,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class XaddGbEb_reg extends Op { - Reg earb; - Reg rb; + final Reg earb; + final Reg rb; public XaddGbEb_reg(int rm) { earb = Mod.eb(rm); @@ -3591,20 +2536,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class XaddGbEb_mem extends Op { - EaaBase get_eaa; - Reg rb; + final EaaBase get_eaa; + final Reg rb; public XaddGbEb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3625,20 +2562,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_ADDB;} } final static public class XaddGwEw_reg extends Op { - Reg earw; - Reg rw; + final Reg earw; + final Reg rw; public XaddGwEw_reg(int rm) { earw = Mod.ew(rm); @@ -3657,20 +2588,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class XaddGwEw_mem extends Op { - EaaBase get_eaa; - Reg rw; + final EaaBase get_eaa; + final Reg rw; public XaddGwEw_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3691,19 +2614,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_ADDW;} } final static public class Bswapw extends Op { - Reg reg; + final Reg reg; public Bswapw(Reg reg) { this.reg = reg; @@ -3714,34 +2631,17 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } static abstract public class ConditionalMov_reg extends Op { - Reg ew; - Reg gw; + final Reg ew; + final Reg gw; public ConditionalMov_reg(int rm) { ew = Mod.ew(rm); gw = Mod.gw(rm); } - public int sets() {return 0;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ConditionalMov_o_reg extends ConditionalMov_reg { @@ -3953,20 +2853,16 @@ public int call() { } static abstract public class ConditionalMov_mem extends Op { - EaaBase get_eaa; - Reg gw; + final EaaBase get_eaa; + final Reg gw; public ConditionalMov_mem(int rm) { get_eaa= Mod.getEaa(rm); gw = Mod.gw(rm); } - public int sets() {return 0;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - } + public boolean accessesMemory() {return true;} + } final static public class ConditionalMov_o_mem extends ConditionalMov_mem { public ConditionalMov_o_mem(int rm) { diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst3.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst3.java index a2aabdf8..1a6a79fa 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst3.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst3.java @@ -8,8 +8,8 @@ public class Inst3 extends Helper { final static public class Addd_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Addd_reg(Reg e, Reg g) { this.e = e; @@ -25,21 +25,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class AddEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AddEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -56,21 +48,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class AddGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AddGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -87,20 +73,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class AddEaxId extends Op { - int i; + final int i; public AddEaxId() { i = decode_fetchd(); @@ -115,14 +95,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_ADDD;} } @@ -133,18 +105,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH ES";} } @@ -154,25 +116,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return ES|FROM_STACK;} public String description() {return "POP ES";} } final static public class Ord_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Ord_reg(Reg e, Reg g) { this.e = e; @@ -189,21 +142,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ORD;} } final static public class OrEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public OrEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -221,21 +166,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ORD;} } final static public class OrGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public OrGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -253,20 +192,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_ORD;} } final static public class OrEaxId extends Op { - int i; + final int i; public OrEaxId() { i = decode_fetchd(); @@ -282,14 +215,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_ORD;} } @@ -300,24 +225,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH CS";} } final static public class Adcd_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Adcd_reg(Reg e, Reg g) { this.e = e; @@ -337,17 +252,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ADCD;} } final static public class AdcEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AdcEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -368,17 +279,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ADCD;} } final static public class AdcGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AdcGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -399,16 +308,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_ADCD;} } final static public class AdcEaxId extends Op { - int i; + final int i; public AdcEaxId() { i = decode_fetchd(); @@ -427,10 +334,6 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_ADCD;} } @@ -441,18 +344,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH SS";} } @@ -463,25 +356,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return SS|FROM_STACK;} public String description() {return "POP SS";} } final static public class Sbbd_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Sbbd_reg(Reg e, Reg g) { this.e = e; @@ -501,17 +385,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_SBBD;} } final static public class SbbEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public SbbEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -532,17 +412,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_SBBD;} } final static public class SbbGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public SbbGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -563,16 +441,14 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_SBBD;} } final static public class SbbEaxId extends Op { - int i; + final int i; public SbbEaxId() { i = decode_fetchd(); @@ -591,10 +467,6 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_SBBD;} } @@ -605,18 +477,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH DS";} } @@ -628,25 +490,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return DS|FROM_STACK;} public String description() {return "POP DS";} } final static public class Andd_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Andd_reg(Reg e, Reg g) { this.e = e; @@ -663,21 +516,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ANDD;} } final static public class AndEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public AndEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -695,21 +540,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_ANDD;} } final static public class AndGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public AndGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -727,20 +566,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_ANDD;} } final static public class AndEaxId extends Op { - int i; + final int i; public AndEaxId() { i = decode_fetchd(); @@ -756,21 +589,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_ANDD;} } final static public class Subd_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Subd_reg(Reg e, Reg g) { this.e = e; @@ -786,21 +611,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_SUBD;} } final static public class SubEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public SubEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -817,21 +634,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_SUBD;} } final static public class SubGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public SubGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -848,20 +659,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_SUBD;} } final static public class SubEaxId extends Op { - int i; + final int i; public SubEaxId() { i = decode_fetchd(); @@ -876,21 +681,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_SUBD;} } final static public class Xord_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Xord_reg(Reg e, Reg g) { this.e = e; @@ -907,21 +704,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_XORD;} } final static public class XorEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public XorEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -939,21 +728,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_XORD;} } final static public class XorGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public XorGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -971,20 +754,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_XORD;} } final static public class XorEaxId extends Op { - int i; + final int i; public XorEaxId() { i = decode_fetchd(); @@ -1000,21 +777,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_XORD;} } final static public class Cmpd_reg extends Op { - Reg e; - Reg g; + final Reg e; + final Reg g; public Cmpd_reg(Reg e, Reg g) { this.e = e; @@ -1030,21 +799,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+e.getName()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_CMPD;} } final static public class CmpEdGd_mem extends Op { - EaaBase e; - Reg g; + final EaaBase e; + final Reg g; public CmpEdGd_mem(EaaBase e, Reg g) { this.e = e; @@ -1061,21 +822,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+e.description32()+", "+g.getName();} public int getFlagType() {return FLAG_TYPE_CMPD;} } final static public class CmpGdEd_mem extends Op { - EaaBase g; - Reg e; + final EaaBase g; + final Reg e; public CmpGdEd_mem(Reg e, EaaBase g) { this.e = e; @@ -1092,20 +847,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+e.getName()+", "+g.description32();} public int getFlagType() {return FLAG_TYPE_CMPD;} } final static public class CmpEaxId extends Op { - int i; + final int i; public CmpEaxId() { i = decode_fetchd(); @@ -1120,20 +869,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+CPU_Regs.reg_eax.getName()+", "+i;} public int getFlagType() {return FLAG_TYPE_CMPD;} } final static public class Incd_reg extends Op { - Reg reg; + final Reg reg; public Incd_reg(Reg reg) { this.reg = reg; @@ -1149,20 +890,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "INC "+reg.getName();} public int getFlagType() {return FLAG_TYPE_INCD;} } final static public class Incd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Incd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -1179,20 +912,14 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "INC "+get_eaa.description32();} public int getFlagType() {return FLAG_TYPE_INCD;} } final static public class Decd_reg extends Op { - Reg reg; + final Reg reg; public Decd_reg(Reg reg) { this.reg = reg; @@ -1208,20 +935,12 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "DEC "+reg.getName();} public int getFlagType() {return FLAG_TYPE_DECD;} } final static public class Decd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Decd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -1238,20 +957,14 @@ public int sets() { return CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "DEC "+get_eaa.description32();} public int getFlagType() {return FLAG_TYPE_DECD;} } final static public class Push32_reg extends Op { - Reg reg; + final Reg reg; public Push32_reg(Reg reg) { this.reg = reg; @@ -1262,23 +975,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+reg.getName();} } final static public class Pop32_reg extends Op { - Reg reg; + final Reg reg; public Pop32_reg(Reg reg) { this.reg = reg; @@ -1289,18 +992,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POP "+reg.getName();} } @@ -1321,18 +1014,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSHA";} } @@ -1348,24 +1031,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POPA";} } final static public class BoundEd extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public BoundEd() { int rm = decode_fetchb(); @@ -1385,24 +1058,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "BOUND "+rd.getName()+", "+get_eaa.description32();} } final static public class ArplEdRd_reg extends Op { - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public ArplEdRd_reg(int rm) { rd = Mod.gd(rm); @@ -1410,7 +1074,7 @@ public ArplEdRd_reg(int rm) { } public int call() { - if (((CPU.cpu.pmode) && (CPU_Regs.flags & CPU_Regs.VM)!=0) || (!CPU.cpu.pmode)) return Constants.BR_Illegal; + if (!CPU.cpu.pmode || (CPU_Regs.flags & CPU_Regs.VM) != 0) return Constants.BR_Illegal; eard.dword = CPU.CPU_ARPL(eard.dword, rd.word()); CPU_Regs.reg_eip+=eip_count;return next.call(); } @@ -1419,27 +1083,21 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ARPL "+eard.getName()+", "+rd.getName();} } final static public class ArplEdRd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public ArplEdRd_mem(int rm) { get_eaa = Mod.getEaa(rm); rd = Mod.gd(rm); } public int call() { - if (((CPU.cpu.pmode) && (CPU_Regs.flags & CPU_Regs.VM)!=0) || (!CPU.cpu.pmode)) return Constants.BR_Illegal; + if (!CPU.cpu.pmode || (CPU_Regs.flags & CPU_Regs.VM) != 0) return Constants.BR_Illegal; int eaa=get_eaa.call(); int value = Memory.mem_readw(eaa); value = CPU.CPU_ARPL(value, rd.word()); @@ -1452,19 +1110,15 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ARPL "+get_eaa.description32()+", "+rd.getName();} } final static public class PushId extends Op { - int id; + final int id; public PushId() { id = decode_fetchd(); @@ -1474,25 +1128,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+id;} } final static public class ImulGdEdId_reg extends Op { - Reg eard; - Reg rd; - int op3; + final Reg eard; + final Reg rd; + final int op3; public ImulGdEdId_reg(int rm) { eard = Mod.ed(rm); @@ -1509,21 +1153,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+rd.getName()+", "+eard.getName()+", "+op3;} } final static public class ImulGdEdId_mem extends Op { - EaaBase get_eaa; - Reg rd; - int op3; + final EaaBase get_eaa; + final Reg rd; + final int op3; public ImulGdEdId_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1541,19 +1177,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IMUL "+rd.getName()+", "+get_eaa.description32()+", "+op3;} } final static public class PushIb extends Op { - int id; + final int id; public PushIb() { id = decode_fetchbs(); @@ -1563,25 +1193,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+id;} } final static public class ImulGdEdIb_reg extends Op { - Reg eard; - Reg rd; - int op3; + final Reg eard; + final Reg rd; + final int op3; public ImulGdEdIb_reg(int rm) { eard = Mod.ed(rm); @@ -1598,21 +1218,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "IMUL "+rd.getName()+", "+eard.getName()+", "+op3;} } final static public class ImulGdEdIb_mem extends Op { - EaaBase get_eaa; - Reg rd; - int op3; + final EaaBase get_eaa; + final Reg rd; + final int op3; public ImulGdEdIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1630,19 +1242,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IMUL "+rd.getName()+", "+get_eaa.description32()+", "+op3;} } static abstract public class JumpCond32_b extends Op { - int offset; + final int offset; public JumpCond32_b() { offset = decode_fetchbs(); } @@ -1656,8 +1262,6 @@ final protected int jump(boolean COND) { return Constants.BR_Link2; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return " off="+offset;} @@ -1668,10 +1272,6 @@ public int call() { return jump(Flags.TFLG_O()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -1683,10 +1283,6 @@ public int call() { return jump(Flags.TFLG_NO()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -1698,10 +1294,6 @@ public int call() { return jump(Flags.TFLG_B()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -1713,10 +1305,6 @@ public int call() { return jump(Flags.TFLG_NB()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -1728,10 +1316,6 @@ public int call() { return jump(Flags.TFLG_Z()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -1743,10 +1327,6 @@ public int call() { return jump(Flags.TFLG_NZ()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -1758,10 +1338,6 @@ public int call() { return jump(Flags.TFLG_BE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -1773,10 +1349,6 @@ public int call() { return jump(Flags.TFLG_NBE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -1788,10 +1360,6 @@ public int call() { return jump(Flags.TFLG_S()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -1803,10 +1371,6 @@ public int call() { return jump(Flags.TFLG_NS()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -1818,10 +1382,6 @@ public int call() { return jump(Flags.TFLG_P()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -1833,10 +1393,6 @@ public int call() { return jump(Flags.TFLG_NP()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -1848,10 +1404,6 @@ public int call() { return jump(Flags.TFLG_L()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -1863,10 +1415,6 @@ public int call() { return jump(Flags.TFLG_NL()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -1878,10 +1426,6 @@ public int call() { return jump(Flags.TFLG_LE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -1893,10 +1437,6 @@ public int call() { return jump(Flags.TFLG_NLE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -1904,8 +1444,8 @@ public int gets() { } final static public class GrplEdId_reg_add extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_add(int rm, boolean signed) { eard = Mod.ed(rm); @@ -1924,21 +1464,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADD "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class GrplEdId_reg_or extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_or(int rm, boolean signed) { eard = Mod.ed(rm); @@ -1958,21 +1490,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "OR "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ORD;} } final static public class GrplEdId_reg_adc extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_adc(int rm, boolean signed) { eard = Mod.ed(rm); @@ -1995,17 +1519,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "ADC "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADCD;} } final static public class GrplEdId_reg_sbb extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_sbb(int rm, boolean signed) { eard = Mod.ed(rm); @@ -2028,17 +1548,13 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SBB "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SBBD;} } final static public class GrplEdId_reg_and extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_and(int rm, boolean signed) { eard = Mod.ed(rm); @@ -2057,21 +1573,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "AND "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ANDD;} } final static public class GrplEdId_reg_sub extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_sub(int rm, boolean signed) { eard = Mod.ed(rm); @@ -2090,21 +1598,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SUB "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SUBD;} } final static public class GrplEdId_reg_xor extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_xor(int rm, boolean signed) { eard = Mod.ed(rm); @@ -2124,21 +1624,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XOR "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_XORD;} } final static public class GrplEdId_reg_cmp extends Op { - Reg eard; - int ib; + final Reg eard; + final int ib; public GrplEdId_reg_cmp(int rm, boolean signed) { eard = Mod.ed(rm); @@ -2157,21 +1649,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CMP "+eard.getName()+", "+ib;} public int getFlagType() {return FLAG_TYPE_CMPD;} } final static public class GrplEdId_mem_add extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_add(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2191,21 +1675,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADD "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class GrplEdId_mem_or extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_or(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2225,21 +1703,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OR "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ORD;} } final static public class GrplEdId_mem_adc extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_adc(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2263,17 +1735,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ADC "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ADCD;} } final static public class GrplEdId_mem_sbb extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_sbb(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2297,17 +1767,15 @@ public int gets() { return CPU_Regs.CF; } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SBB "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SBBD;} } final static public class GrplEdId_mem_and extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_and(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2328,21 +1796,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "AND "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_ANDD;} } final static public class GrplEdId_mem_sub extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_sub(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2362,21 +1824,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "SUB "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_SUBD;} } final static public class GrplEdId_mem_xor extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_xor(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2397,21 +1853,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XOR "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_XORD;} } final static public class GrplEdId_mem_cmp extends Op { - int ib; - EaaBase get_eaa; + final int ib; + final EaaBase get_eaa; public GrplEdId_mem_cmp(int rm, boolean signed) { get_eaa= Mod.getEaa(rm); @@ -2431,21 +1881,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "CMP "+get_eaa.description32()+", "+ib;} public int getFlagType() {return FLAG_TYPE_CMPD;} } final static public class TestEdGd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public TestEdGd_reg(int rm) { eard = Mod.ed(rm); @@ -2462,21 +1906,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+eard.getName()+", "+rd.getName();} public int getFlagType() {return FLAG_TYPE_TESTD;} } final static public class TestEdGd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public TestEdGd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2494,21 +1930,15 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "TEST "+get_eaa.description32()+", "+rd.getName();} public int getFlagType() {return FLAG_TYPE_TESTD;} } final static public class XchgEdGd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public XchgEdGd_reg(int rm) { eard = Mod.ed(rm); @@ -2522,24 +1952,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XCHG "+eard.getName()+", "+rd.getName();} } final static public class XchgEdGd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public XchgEdGd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2555,24 +1973,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "XCHG "+get_eaa.description32()+", "+rd.getName();} } final static public class MovEdGd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public MovEdGd_reg(int rm) { eard = Mod.ed(rm); @@ -2584,24 +1992,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", "+rd.getName();} } final static public class MovEdGd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public MovEdGd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2614,24 +2010,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description32()+", "+rd.getName();} } final static public class MovGdEd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public MovGdEd_reg(int rm) { eard = Mod.ed(rm); @@ -2643,24 +2029,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+rd.getName()+", "+eard.getName();} } final static public class MovGdEd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public MovGdEd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2673,23 +2047,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+rd.getName()+", "+get_eaa.description32();} } final static public class MovEdEs_reg extends Op { - Reg eard; + final Reg eard; public MovEdEs_reg(int rm) { eard = Mod.ed(rm); @@ -2700,23 +2064,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", ES";} } final static public class MovEdCs_reg extends Op { - Reg eard; + final Reg eard; public MovEdCs_reg(int rm) { eard = Mod.ed(rm); @@ -2727,23 +2079,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", CS";} } final static public class MovEdSs_reg extends Op { - Reg eard; + final Reg eard; public MovEdSs_reg(int rm) { eard = Mod.ed(rm); @@ -2754,23 +2094,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", SS";} } final static public class MovEdDs_reg extends Op { - Reg eard; + final Reg eard; public MovEdDs_reg(int rm) { eard = Mod.ed(rm); @@ -2781,23 +2109,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", DS";} } final static public class MovEdFs_reg extends Op { - Reg eard; + final Reg eard; public MovEdFs_reg(int rm) { eard = Mod.ed(rm); @@ -2808,23 +2124,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", FS";} } final static public class MovEdGs_reg extends Op { - Reg eard; + final Reg eard; public MovEdGs_reg(int rm) { eard = Mod.ed(rm); @@ -2835,24 +2139,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+eard.getName()+", GS";} } final static public class LeaGd_16 extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public LeaGd_16(int rm) { rd = Mod.gd(rm); @@ -2869,24 +2161,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "LEA "+rd.getName()+", "+get_eaa.descriptionZero();} } final static public class LeaGd_32 extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public LeaGd_32(int rm) { rd = Mod.gd(rm); @@ -2904,23 +2184,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "LEA "+rd.getName()+", "+get_eaa.descriptionZero();} } final static public class PopEd_reg extends Op { - Reg eard; + final Reg eard; public PopEd_reg(int rm) { eard = Mod.ed(rm); @@ -2931,23 +2199,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POP "+eard.getName();} } final static public class PopEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public PopEd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -2959,23 +2217,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "POP "+get_eaa.description32();} } final static public class XchgEax extends Op { - Reg reg; + final Reg reg; public XchgEax(Reg reg) { this.reg = reg; @@ -2988,18 +2236,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "XCHG "+CPU_Regs.reg_eax.getName()+", "+reg.getName();} } @@ -3009,18 +2245,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CWDE";} } @@ -3031,24 +2255,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "CDQ";} } final static public class CallFarAp extends Op { - int newcs; - int newip; + final int newcs; + final int newip; public CallFarAp(int newcs, int newip) { this.newcs = newcs; @@ -3068,10 +2280,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -3089,10 +2297,6 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - // Pushes flags public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; @@ -3100,8 +2304,7 @@ public int gets() { public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSHF";} } @@ -3124,10 +2327,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} @@ -3142,19 +2341,9 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } + public boolean accessesMemory() {return true;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - public String description() {return "MOV "+CPU_Regs.reg_eax.getName()+", @0x"+Integer.toHexString(Core.base_ds+value);} + public String description() {return "MOV "+CPU_Regs.reg_eax.getName()+", @0x"+Integer.toHexString(Core.base_ds+value);} } final static public class MovOdEax extends Inst1.GetEADirect { @@ -3164,23 +2353,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV 0x"+Integer.toHexString(Core.base_ds+value)+", "+CPU_Regs.reg_eax.getName();} } final static public class TestEaxId extends Op { - int id; + final int id; public TestEaxId() { id = decode_fetchd(); @@ -3196,21 +2375,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "TEST "+CPU_Regs.reg_eax.getName()+", "+id;} public int getFlagType() {return FLAG_TYPE_TESTD;} } final static public class MovId extends Op { - int id; - Reg reg; + final int id; + final Reg reg; public MovId(Reg reg) { id = decode_fetchd(); @@ -3222,24 +2393,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "MOV "+reg.getName()+", "+id;} } final static public class MovId_mem extends Op { - int id; - EaaBase get_eaa; + final int id; + final EaaBase get_eaa; public MovId_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -3252,23 +2411,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "MOV "+get_eaa.description32()+", "+id;} } final static public class Retn32Iw extends Op { - int offset; + final int offset; public Retn32Iw() { offset = decode_fetchw(); @@ -3280,17 +2429,8 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "RETN "+offset;} } @@ -3301,24 +2441,15 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "RETN";} } final static public class Les32 extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public Les32(int rm) { get_eaa= Mod.getEaa(rm); @@ -3333,25 +2464,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return ES|FROM_MEMORY;} public String description() {return "LES "+rd.getName()+", "+get_eaa.description32();} } final static public class Lds32 extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public Lds32(int rm) { get_eaa= Mod.getEaa(rm); @@ -3369,25 +2491,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return DS|FROM_MEMORY;} public String description() {return "LDS "+rd.getName()+", "+get_eaa.description32();} } final static public class Enter32IwIb extends Op { - int bytes; - int level; + final int bytes; + final int level; public Enter32IwIb() { bytes=decode_fetchw(); @@ -3399,18 +2512,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "ENTER "+bytes+", "+level;} } @@ -3422,23 +2525,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LEAVE";} } final static public class Retf32Iw extends Op { - int words; + final int words; public Retf32Iw() { words = decode_fetchw(); } @@ -3448,10 +2541,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -3470,10 +2559,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -3504,10 +2589,6 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} @@ -3521,10 +2602,6 @@ public int call() { return jump(reg_ecx.dword!=0 && !Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -3537,10 +2614,6 @@ public int call() { return jump(reg_ecx.word()!=0 && !Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -3553,10 +2626,6 @@ public int call() { return jump(reg_ecx.dword!=0 && Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -3569,10 +2638,6 @@ public int call() { return jump(reg_ecx.word()!=0 && Flags.get_ZF()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -3585,13 +2650,6 @@ public int call() { return jump(reg_ecx.dword!=0); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } public String description() {return "LOOP";} } @@ -3601,18 +2659,11 @@ public int call() { return jump(reg_ecx.word()!=0); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } public String description() {return "LOOP";} } final static public class Jcxz extends JumpCond32_b { - int mask; + final int mask; public Jcxz(int mask) { this.mask = mask; @@ -3622,18 +2673,11 @@ public int call() { return jump((reg_ecx.dword & mask)==0); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } public String description() {return "JCXZ";} } final static public class InEaxIb extends Op { - int port; + final int port; public InEaxIb() { port=decode_fetchb(); @@ -3645,23 +2689,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName()+", 0x"+Integer.toHexString(port);} } final static public class OutEaxIb extends Op { - int port; + final int port; public OutEaxIb() { port=decode_fetchb(); @@ -3673,23 +2708,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OUT "+CPU_Regs.reg_eax.getName()+", 0x"+Integer.toHexString(port);} } final static public class CallJd extends Op { - long addip; + final long addip; public CallJd() { addip=decode_fetchds(); @@ -3697,19 +2723,10 @@ public CallJd() { public int call() { CPU.CPU_Push32(reg_eip+eip_count); - reg_eip+=addip+eip_count; + reg_eip+= (int) (addip+eip_count); return Constants.BR_Link1; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} @@ -3717,35 +2734,25 @@ public int gets() { } final static public class JmpJd extends Op { - long addip; + final long addip; public JmpJd() { addip=decode_fetchds(); } public int call() { - reg_eip+=eip_count+addip; + reg_eip+= (int) (eip_count+addip); return Constants.BR_Link1; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return "JMP "+addip;} } final static public class JmpAd extends Op { - int newip; - int newcs; + final int newip; + final int newcs; public JmpAd() { newip= decode_fetchd(); newcs=decode_fetchw(); @@ -3762,10 +2769,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -3778,7 +2781,7 @@ public int gets() { } final static public class JmpJb extends Op { - int addip; + final int addip; public JmpJb() { addip=decode_fetchbs(); @@ -3789,16 +2792,6 @@ public int call() { return Constants.BR_Link1; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return "JMP "+addip;} @@ -3810,18 +2803,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "IN "+CPU_Regs.reg_eax.getName()+", "+CPU_Regs.reg_edx.getName();} } @@ -3831,23 +2814,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "OUT "+CPU_Regs.reg_eax.getName()+", "+CPU_Regs.reg_edx.getName();} } final static public class CallNearEd_reg extends Op { - Reg eard; + final Reg eard; public CallNearEd_reg(int rm) { eard = Mod.ed(rm); @@ -3860,15 +2833,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} @@ -3876,7 +2840,7 @@ public int gets() { } final static public class CallNearEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public CallNearEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3890,15 +2854,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} public boolean usesEip() {return true;} public boolean setsEip() {return true;} @@ -3906,7 +2861,7 @@ public int gets() { } final static public class CallFarEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public CallFarEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3926,10 +2881,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -3942,7 +2893,7 @@ public int gets() { } final static public class JmpNearEd_reg extends Op { - Reg eard; + final Reg eard; public JmpNearEd_reg(int rm) { eard = Mod.ed(rm); @@ -3953,23 +2904,12 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} public boolean setsEip() {return true;} public String description() {return "JMP NEAR "+eard.getName();} } final static public class JmpNearEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public JmpNearEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -3981,23 +2921,14 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} + public boolean setsEip() {return true;} public String description() {return "JMP NEAR "+get_eaa.description32();} } final static public class JmpFarEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public JmpFarEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -4018,10 +2949,6 @@ public int call() { return Constants.BR_Jump; } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; // :TODO: is this FillFlags necessary } @@ -4034,7 +2961,7 @@ public int gets() { } final static public class PushEd_reg extends Op { - Reg eard; + final Reg eard; public PushEd_reg(int rm) { eard = Mod.ed(rm); @@ -4045,23 +2972,13 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+eard.getName();} } final static public class PushEd_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public PushEd_mem(int rm) { this.get_eaa = Mod.getEaa(rm); @@ -4073,18 +2990,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH "+get_eaa.description32();} } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst4.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst4.java index 272b3ef9..5700d149 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst4.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Inst4.java @@ -6,7 +6,7 @@ public class Inst4 extends Helper { final static public class Lgdt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Lgdt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -21,23 +21,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LGDT "+get_eaa.description32();} } final static public class Lidt_mem extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public Lidt_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -52,23 +43,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LIDT "+get_eaa.description32();} } final static public class Smsw_reg extends Op { - Reg eard; + final Reg eard; public Smsw_reg(int rm) { eard = Mod.ed(rm); @@ -79,23 +61,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public String description() {return "SMSW "+eard.getName();} } final static public class Lmsw_reg extends Op { - Reg eard; + final Reg eard; public Lmsw_reg(int rm) { eard = Mod.ed(rm); @@ -106,24 +76,14 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LMSW "+eard.getName();} } final static public class LarGdEd_reg extends Op { - Reg earw; - Reg rd; + final Reg earw; + final Reg rd; public LarGdEd_reg(int rm) { earw = Mod.ew(rm); @@ -140,21 +100,16 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LAR "+rd.getName() + ", "+earw.getName16();} } final static public class LarGdEd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public LarGdEd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -172,21 +127,16 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LAR "+rd.getName() + ", "+get_eaa.description16();} } final static public class LslGdEd_reg extends Op { - Reg earw; - Reg rd; + final Reg earw; + final Reg rd; public LslGdEd_reg(int rm) { earw = Mod.ew(rm); @@ -203,21 +153,16 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LSL "+rd.getName() + ", "+earw.getName16();} } final static public class LslGdEd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public LslGdEd_mem(int rm) { get_eaa= Mod.getEaa(rm); @@ -235,20 +180,15 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - public boolean returnsIllegal() {return true;} - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "LAR "+rd.getName() + ", "+get_eaa.description16();} } static abstract public class JumpCond32_d extends Op { - int offset; + final int offset; public JumpCond32_d() { offset = decode_fetchds(); @@ -263,9 +203,7 @@ final protected int jump(boolean COND) { return Constants.BR_Link2; } - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return true;} + public boolean usesEip() {return true;} public boolean setsEip() {return true;} public String description() {return " off="+offset;} } @@ -275,10 +213,6 @@ public int call() { return jump(Flags.TFLG_O()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -290,10 +224,6 @@ public int call() { return jump(Flags.TFLG_NO()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.OF; } @@ -305,10 +235,6 @@ public int call() { return jump(Flags.TFLG_B()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -320,10 +246,6 @@ public int call() { return jump(Flags.TFLG_NB()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF; } @@ -335,10 +257,6 @@ public int call() { return jump(Flags.TFLG_Z()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -350,10 +268,6 @@ public int call() { return jump(Flags.TFLG_NZ()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.ZF; } @@ -365,10 +279,6 @@ public int call() { return jump(Flags.TFLG_BE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -380,10 +290,6 @@ public int call() { return jump(Flags.TFLG_NBE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.CF | CPU_Regs.ZF; } @@ -395,10 +301,6 @@ public int call() { return jump(Flags.TFLG_S()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -410,10 +312,6 @@ public int call() { return jump(Flags.TFLG_NS()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF; } @@ -425,10 +323,6 @@ public int call() { return jump(Flags.TFLG_P()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -440,10 +334,6 @@ public int call() { return jump(Flags.TFLG_NP()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.PF; } @@ -455,10 +345,6 @@ public int call() { return jump(Flags.TFLG_L()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -470,10 +356,6 @@ public int call() { return jump(Flags.TFLG_NL()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF; } @@ -485,10 +367,6 @@ public int call() { return jump(Flags.TFLG_LE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -500,10 +378,6 @@ public int call() { return jump(Flags.TFLG_NLE()); } - public int sets() { - return 0; - } - public int gets() { return CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.ZF; } @@ -516,18 +390,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public String description() {return "PUSH FS";} } @@ -537,26 +401,17 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return FS|FROM_STACK;} public String description() {return "POP FS";} } final static public class BtEdGd_reg extends Op { int mask; - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public BtEdGd_reg(int rm) { rd = Mod.gd(rm); @@ -574,20 +429,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEdGd_mem extends Op { int mask; - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public BtEdGd_mem(int rm) { rd = Mod.gd(rm); @@ -608,20 +455,13 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ShldEdGdIb_reg extends Op { - int op3; - Reg rd; - Reg eard; + final int op3; + final Reg rd; + final Reg eard; public ShldEdGdIb_reg(int rm) { rd = Mod.gd(rm); @@ -639,21 +479,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHLD;} } final static public class ShldEdGdIb_mem extends Op { - Reg rd; - EaaBase get_eaa; - int op3; + final Reg rd; + final EaaBase get_eaa; + final int op3; public ShldEdGdIb_mem(int rm) { rd = Mod.gd(rm); @@ -672,20 +504,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHLD;} } final static public class ShldEdGdCl_reg extends Op { - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public ShldEdGdCl_reg(int rm) { rd = Mod.gd(rm); @@ -704,20 +530,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHLD;} } final static public class ShldEdGdCl_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public ShldEdGdCl_mem(int rm) { rd = Mod.gd(rm); @@ -738,14 +556,8 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHLD;} } @@ -755,18 +567,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class PopGS extends Op { @@ -775,25 +576,16 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return GS|FROM_STACK;} } final static public class BtsEdGd_reg extends Op { int mask; - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public BtsEdGd_reg(int rm) { rd = Mod.gd(rm); @@ -812,20 +604,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtsEdGd_mem extends Op { int mask; - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public BtsEdGd_mem(int rm) { rd = Mod.gd(rm); @@ -847,20 +631,13 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ShrdEdGdIb_reg extends Op { - int op3; - Reg rd; - Reg eard; + final int op3; + final Reg rd; + final Reg eard; public ShrdEdGdIb_reg(int rm) { rd = Mod.gd(rm); @@ -878,21 +655,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHRD;} } final static public class ShrdEdGdIb_mem extends Op { - Reg rd; - EaaBase get_eaa; - int op3; + final Reg rd; + final EaaBase get_eaa; + final int op3; public ShrdEdGdIb_mem(int rm) { rd = Mod.gd(rm); @@ -911,20 +680,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHRD;} } final static public class ShrdEdGdCl_reg extends Op { - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public ShrdEdGdCl_reg(int rm) { rd = Mod.gd(rm); @@ -943,20 +706,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_DSHRD;} } final static public class ShrdEdGdCl_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public ShrdEdGdCl_mem(int rm) { rd = Mod.gd(rm); @@ -977,20 +732,14 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF | CPU_Regs.MAYBE; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_DSHRD;} } final static public class ImulGdEd_reg extends Op { - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public ImulGdEd_reg(int rm) { rd = Mod.gd(rm); @@ -1006,19 +755,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ImulGdEd_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public ImulGdEd_mem(int rm) { rd = Mod.gd(rm); @@ -1035,19 +776,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.OF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class CmpxchgEdGd_reg extends Op { - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public CmpxchgEdGd_reg(int rm) { rd = Mod.gd(rm); @@ -1071,19 +805,11 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class CmpxchgEdGd_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public CmpxchgEdGd_mem(int rm) { rd = Mod.gd(rm); @@ -1110,19 +836,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LssEd extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public LssEd(int rm) { rd = Mod.gd(rm); @@ -1139,24 +858,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return SS|FROM_MEMORY;} } final static public class BtrEdGd_reg extends Op { - Reg rd; - Reg eard; + final Reg rd; + final Reg eard; public BtrEdGd_reg(int rm) { rd = Mod.gd(rm); @@ -1175,19 +885,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtrEdGd_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public BtrEdGd_mem(int rm) { rd = Mod.gd(rm); @@ -1209,19 +911,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class LfsEd extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public LfsEd(int rm) { rd = Mod.gd(rm); @@ -1235,24 +930,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return FS|FROM_MEMORY;} } final static public class LgsEd extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public LgsEd(int rm) { rd = Mod.gd(rm); @@ -1266,24 +952,15 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - public boolean throwsException() {return true;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int setsSeg() {return GS|FROM_MEMORY;} } final static public class MovzxGdEb_reg extends Op { - Reg rd; - Reg earb; + final Reg rd; + final Reg earb; public MovzxGdEb_reg(int rm) { rd = Mod.gd(rm); @@ -1295,23 +972,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovzxGdEb_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public MovzxGdEb_mem(int rm) { rd = Mod.gd(rm); @@ -1324,23 +989,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovzxGdEw_reg extends Op { - Reg rd; - Reg earw; + final Reg rd; + final Reg earw; public MovzxGdEw_reg(int rm) { rd = Mod.gd(rm); @@ -1352,23 +1006,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovzxGdEw_mem extends Op { - Reg rd; - EaaBase get_eaa; + final Reg rd; + final EaaBase get_eaa; public MovzxGdEw_mem(int rm) { rd = Mod.gd(rm); @@ -1381,23 +1023,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEdIb_reg extends Op { - Reg eard; - int mask; + final Reg eard; + final int mask; public BtEdIb_reg(int rm) { eard = Mod.ed(rm); @@ -1414,19 +1045,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtsEdIb_reg extends Op { - Reg eard; - int mask; + final Reg eard; + final int mask; public BtsEdIb_reg(int rm) { eard = Mod.ed(rm); @@ -1444,19 +1067,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtrEdIb_reg extends Op { - Reg eard; - int mask; + final Reg eard; + final int mask; public BtrEdIb_reg(int rm) { eard = Mod.ed(rm); @@ -1474,19 +1089,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEdIb_reg extends Op { - Reg eard; - int mask; + final Reg eard; + final int mask; public BtcEdIb_reg(int rm) { eard = Mod.ed(rm); @@ -1505,19 +1112,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtEdIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtEdIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1536,19 +1135,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtsEdIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtsEdIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1568,19 +1160,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtrEdIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtrEdIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1600,19 +1185,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEdIb_mem extends Op { - EaaBase get_eaa; - int mask; + final EaaBase get_eaa; + final int mask; public BtcEdIb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1634,19 +1212,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEdGd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public BtcEdGd_reg(int rm) { eard = Mod.ed(rm); @@ -1665,19 +1236,11 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BtcEdGd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public BtcEdGd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1698,19 +1261,12 @@ public int sets() { return CPU_Regs.CF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsfGdEd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public BsfGdEd_reg(int rm) { eard = Mod.ed(rm); @@ -1735,19 +1291,11 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsfGdEd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public BsfGdEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1773,19 +1321,12 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsrGdEd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public BsrGdEd_reg(int rm) { eard = Mod.ed(rm); @@ -1810,19 +1351,11 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class BsrGdEd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public BsrGdEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1848,19 +1381,12 @@ public int sets() { return CPU_Regs.ZF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovsxGdEb_reg extends Op { - Reg earb; - Reg rd; + final Reg earb; + final Reg rd; public MovsxGdEb_reg(int rm) { earb = Mod.eb(rm); @@ -1872,23 +1398,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovsxGdEb_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public MovsxGdEb_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1901,23 +1415,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovsxGdEw_reg extends Op { - Reg earw; - Reg rd; + final Reg earw; + final Reg rd; public MovsxGdEw_reg(int rm) { earw = Mod.ew(rm); @@ -1929,23 +1432,11 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class MovsxGdEw_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public MovsxGdEw_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -1958,23 +1449,12 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class XaddGdEd_reg extends Op { - Reg eard; - Reg rd; + final Reg eard; + final Reg rd; public XaddGdEd_reg(int rm) { eard = Mod.ed(rm); @@ -1993,20 +1473,12 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class XaddGdEd_mem extends Op { - EaaBase get_eaa; - Reg rd; + final EaaBase get_eaa; + final Reg rd; public XaddGdEd_mem(int rm) { get_eaa = Mod.getEaa(rm); @@ -2027,19 +1499,13 @@ public int sets() { return CPU_Regs.CF | CPU_Regs.AF | CPU_Regs.ZF | CPU_Regs.SF | CPU_Regs.OF | CPU_Regs.PF; } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int getFlagType() {return FLAG_TYPE_ADDD;} } final static public class Bswapd extends Op { - Reg reg; + final Reg reg; public Bswapd(Reg reg) { this.reg = reg; @@ -2050,34 +1516,17 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } static abstract public class ConditionalMov_reg extends Op { - Reg ed; - Reg gd; + final Reg ed; + final Reg gd; public ConditionalMov_reg(int rm) { ed = Mod.ed(rm); gd = Mod.gd(rm); } - public int sets() {return 0;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class ConditionalMov_o_reg extends ConditionalMov_reg { @@ -2289,20 +1738,16 @@ public int call() { } static abstract public class ConditionalMov_mem extends Op { - EaaBase get_eaa; - Reg gd; + final EaaBase get_eaa; + final Reg gd; public ConditionalMov_mem(int rm) { get_eaa= Mod.getEaa(rm); gd = Mod.gd(rm); } - public int sets() {return 0;} - public boolean throwsException() {return false;} - public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - } + public boolean accessesMemory() {return true;} + } final static public class ConditionalMov_o_mem extends ConditionalMov_mem { public ConditionalMov_o_mem(int rm) { @@ -2529,7 +1974,7 @@ public int call() { } final static public class CompareExchange8B extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public CompareExchange8B(int rm) { get_eaa= Mod.getEaa(rm); @@ -2538,7 +1983,7 @@ public CompareExchange8B(int rm) { public int call() { long value1 = ((CPU_Regs.reg_edx.dword & 0xffffffffL) << 32) | (CPU_Regs.reg_eax.dword & 0xffffffffL); int eaa = get_eaa.call(); - long value2 = (Memory.mem_readd(eaa) & 0xffffffffl) | ((Memory.mem_readd(eaa+4) & 0xffffffffl) << 32); + long value2 = (Memory.mem_readd(eaa) & 0xffffffffL) | ((Memory.mem_readd(eaa+4) & 0xffffffffL) << 32); Flags.FillFlags(); if (value1==value2) { CPU_Regs.SETFLAGBIT(CPU_Regs.ZF, true); @@ -2552,14 +1997,8 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public int gets() { - return 0; - } - - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} + public int sets() {return CPU_Regs.ZF;} public String description() {return "CMPXCHG8B " + get_eaa.description32();} } @@ -2574,25 +2013,15 @@ public int call() { } public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - public int sets() {return 0;} - public int gets() {return 0;} } final static public class WriteMSR extends Op { public int call() { if (CPU.cpu.cpl != 0) return EXCEPTION(CPU.EXCEPTION_GP); - CPU.writeMSR(CPU_Regs.reg_ecx.dword, ((CPU_Regs.reg_edx.dword & 0xFFFFFFFFl) << 32) | (CPU_Regs.reg_eax.dword & 0xFFFFFFFFl)); + CPU.writeMSR(CPU_Regs.reg_ecx.dword, ((CPU_Regs.reg_edx.dword & 0xFFFFFFFFL) << 32) | (CPU_Regs.reg_eax.dword & 0xFFFFFFFFL)); CPU_Regs.reg_eip+=eip_count;return next.call(); } public boolean throwsException() {return true;} - public boolean accessesMemory() {return false;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} - public int sets() {return 0;} - public int gets() {return 0;} } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/InstFPU.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/InstFPU.java index c1ffe2b8..31268c5a 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/InstFPU.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/InstFPU.java @@ -6,67 +6,25 @@ public class InstFPU { abstract static protected class FpuOpEA extends Op { - EaaBase get_eaa; + final EaaBase get_eaa; public FpuOpEA(int rm) { get_eaa = Mod.getEaa(rm); } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() { - return false; - } - public boolean accessesMemory() { return true; } - public boolean usesEip() { - return false; - } - - public boolean setsEip() { - return false; - } } abstract static protected class FpuOpNormal extends Op { - int rm; + final int rm; public FpuOpNormal(int rm) { this.rm = rm; } - public int sets() { - return 0; - } - - public int gets() { - return 0; - } - - public boolean throwsException() { - return false; - } - - public boolean accessesMemory() { - return false; - } - - public boolean usesEip() { - return false; - } - - public boolean setsEip() { - return false; - } } final static public class FADD_SINGLE_REAL extends FpuOpEA { @@ -102,7 +60,7 @@ public String description() { } final static public class FCOM_SINGLE_REAL extends FpuOpEA { - boolean pop; + final boolean pop; public FCOM_SINGLE_REAL(int rm, boolean pop) { super(rm); @@ -217,7 +175,7 @@ public String description() { } final static public class FCOM_STi extends FpuOpNormal { - boolean pop; + final boolean pop; public FCOM_STi(int rm, boolean pop) { super(rm); @@ -316,7 +274,7 @@ public String description() { } final static public class FST_SINGLE_REAL extends FpuOpEA { - boolean pop; + final boolean pop; public FST_SINGLE_REAL(int rm, boolean pop) { super(rm); @@ -447,7 +405,7 @@ public String description() { } final static public class FST_STi extends FpuOpNormal { - boolean pop; + final boolean pop; public FST_STi(int rm, boolean pop) { super(rm); @@ -722,7 +680,7 @@ public String description() { } final static public class FPREM extends FpuOpNormal { - boolean bRoundNearest; + final boolean bRoundNearest; public FPREM(boolean bRoundNearest) { super(0); @@ -917,7 +875,7 @@ public String description() { } final static public class FICOM_DWORD_INTEGER extends FpuOpEA { - boolean pop; + final boolean pop; public FICOM_DWORD_INTEGER(int rm, boolean pop) { super(rm); @@ -1112,7 +1070,7 @@ public String description() { } final static public class FIST_DWORD_INTEGER extends FpuOpEA { - boolean pop; + final boolean pop; public FIST_DWORD_INTEGER(int rm, boolean pop) { super(rm); @@ -1259,7 +1217,7 @@ public String description() { } final static public class FUCOMI_ST0_STj extends FpuOpNormal { - boolean pop; + final boolean pop; public FUCOMI_ST0_STj(int rm, boolean pop) { super(0); @@ -1278,7 +1236,7 @@ public String description() { } final static public class FCOMI_ST0_STj extends FpuOpNormal { - boolean pop; + final boolean pop; public FCOMI_ST0_STj(int rm, boolean pop) { super(0); @@ -1329,7 +1287,7 @@ public String description() { } final static public class FCOM_DOUBLE_REAL extends FpuOpEA { - boolean pop; + final boolean pop; public FCOM_DOUBLE_REAL(int rm, boolean pop) { super(rm); @@ -1412,7 +1370,7 @@ public String description() { } final static public class FADD_STi_ST0 extends FpuOpNormal { - boolean pop; + final boolean pop; public FADD_STi_ST0(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1430,7 +1388,7 @@ public String description() { } final static public class FMUL_STi_ST0 extends FpuOpNormal { - boolean pop; + final boolean pop; public FMUL_STi_ST0(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1448,7 +1406,7 @@ public String description() { } final static public class FSUBR_STi_ST0 extends FpuOpNormal { - boolean pop; + final boolean pop; public FSUBR_STi_ST0(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1466,7 +1424,7 @@ public String description() { } final static public class FSUB_STi_ST0 extends FpuOpNormal { - boolean pop; + final boolean pop; public FSUB_STi_ST0(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1484,7 +1442,7 @@ public String description() { } final static public class FDIVR_STi_ST0 extends FpuOpNormal { - boolean pop; + final boolean pop; public FDIVR_STi_ST0(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1502,7 +1460,7 @@ public String description() { } final static public class FDIV_STi_ST0 extends FpuOpNormal { - boolean pop; + final boolean pop; public FDIV_STi_ST0(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1552,7 +1510,7 @@ public String description() { } final static public class FST_DOUBLE_REAL extends FpuOpEA { - boolean pop; + final boolean pop; public FST_DOUBLE_REAL(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1634,7 +1592,7 @@ public String description() { } final static public class FUCOM_STi extends FpuOpNormal { - boolean pop; + final boolean pop; public FUCOM_STi(int rm, boolean pop) { super(rm); this.pop = pop; @@ -1684,7 +1642,7 @@ public String description() { } final static public class FICOM_WORD_INTEGER extends FpuOpEA { - boolean pop; + final boolean pop; public FICOM_WORD_INTEGER(int rm, boolean pop) { super(rm); @@ -1815,7 +1773,7 @@ public String description() { } final static public class FIST_WORD_INTEGER extends FpuOpEA { - boolean pop; + final boolean pop; public FIST_WORD_INTEGER(int rm, boolean pop) { super(rm); diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Loader.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Loader.java index d28006dd..de4c9ff6 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Loader.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Loader.java @@ -4,6 +4,8 @@ import jdos.hardware.mame.RasterizerCompiler; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Arrays; import java.util.Hashtable; import java.util.Vector; @@ -19,11 +21,11 @@ public SaveItem(String name, byte[] byteCode, int start, byte[] opCode, String s this.source = source; this.start = start; } - String source; - String name; - byte[] byteCode; - byte[] opCode; - int start; + final String source; + final String name; + final byte[] byteCode; + final byte[] opCode; + final int start; } private static class Item { String name; @@ -31,15 +33,15 @@ private static class Item { int start; } - private static Vector savedItems = new Vector(); + private static final Vector savedItems = new Vector(); - private static Hashtable items = new Hashtable(); + private static final Hashtable items = new Hashtable(); private static boolean initialized = false; public static boolean isLoaded() { if (!initialized) init(); - return items.size()!=0; + return !items.isEmpty(); } private static void init() { initialized = true; @@ -55,7 +57,7 @@ private static void init() { int len = dis.readInt(); item.opCodes = new byte[len]; dis.readFully(item.opCodes); - Integer key = new Integer(item.start); + Integer key = item.start; Vector bucket = (Vector)items.get(key); if (bucket == null) { bucket = new Vector(); @@ -67,11 +69,13 @@ private static void init() { } catch (Exception e) { e.printStackTrace(); } - try {dis.close();} catch (Exception e) {} + try {dis.close();} catch (Exception e) { + throw new RuntimeException(e); + } } } public static Op load(int start, byte[] opCodes) { - Integer key = new Integer(start); + Integer key = start; Vector bucket = (Vector)items.get(key); if (bucket != null) { for (int i=0;i>3)&7; + ops[0x100] = prev -> { + int rm = decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* SLDT */ + if (rm>=0xC0) + prev.next = new Inst2.Sldt_reg(rm); + else + prev.next = new Inst2.Sldt_mem(rm); + break; + case 0x01: /* STR */ + if (rm>=0xC0) + prev.next = new Inst2.Str_reg(rm); + else + prev.next = new Inst2.Str_mem(rm); + break; + case 0x02: + if (rm>=0xC0) + prev.next = new Inst2.Lldt_reg(rm); + else + prev.next = new Inst2.Lldt_mem(rm); + break; + case 0x03: + if (rm>=0xC0) + prev.next = new Inst2.Ltr_reg(rm); + else + prev.next = new Inst2.Ltr_mem(rm); + break; + case 0x04: + if (rm>=0xC0) + prev.next = new Inst2.Verr_reg(rm); + else + prev.next = new Inst2.Verr_mem(rm); + break; + case 0x05: + if (rm>=0xC0) + prev.next = new Inst2.Verw_reg(rm); + else + prev.next = new Inst2.Verw_mem(rm); + break; + default: + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } + return RESULT_HANDLED; + }; + + /* Group 7 Ew */ + ops[0x101] = prev -> { + int rm = decode_fetchb(); + int which=(rm>>3)&7; + if (rm < 0xc0) { switch (which) { - case 0x00: /* SLDT */ - if (rm>=0xC0) - prev.next = new Inst2.Sldt_reg(rm); - else - prev.next = new Inst2.Sldt_mem(rm); + case 0x00: /* SGDT */ + prev.next = new Inst2.Sgdt_mem(rm); + break; + case 0x01: /* SIDT */ + prev.next = new Inst2.Sidt_mem(rm); + break; + case 0x02: /* LGDT */ + prev.next = new Inst2.Lgdt_mem(rm); + break; + case 0x03: /* LIDT */ + prev.next = new Inst2.Lidt_mem(rm); break; - case 0x01: /* STR */ - if (rm>=0xC0) - prev.next = new Inst2.Str_reg(rm); - else - prev.next = new Inst2.Str_mem(rm); + case 0x04: /* SMSW */ + prev.next = new Inst2.Smsw_mem(rm); break; - case 0x02: - if (rm>=0xC0) - prev.next = new Inst2.Lldt_reg(rm); - else - prev.next = new Inst2.Lldt_mem(rm); + case 0x06: /* LMSW */ + prev.next = new Inst2.Lmsw_mem(rm); break; - case 0x03: - if (rm>=0xC0) - prev.next = new Inst2.Ltr_reg(rm); - else - prev.next = new Inst2.Ltr_mem(rm); + case 0x07: /* INVLPG */ + prev.next = new Inst2.Invlpg(); break; - case 0x04: - if (rm>=0xC0) - prev.next = new Inst2.Verr_reg(rm); - else - prev.next = new Inst2.Verr_mem(rm); + } + } else { + switch (which) { + case 0x02: /* LGDT */ + prev.next = new Inst2.Lgdt_reg(); + break; + case 0x03: /* LIDT */ + prev.next = new Inst2.Lidt_reg(); + break; + case 0x04: /* SMSW */ + prev.next = new Inst2.Smsw_reg(rm); break; - case 0x05: - if (rm>=0xC0) - prev.next = new Inst2.Verw_reg(rm); - else - prev.next = new Inst2.Verw_mem(rm); + case 0x06: /* LMSW */ + prev.next = new Inst2.Lmsw_reg(rm); break; default: prev.next = new Inst1.Illegal(""); return RESULT_JUMP; } - return RESULT_HANDLED; - } - }; - - /* Group 7 Ew */ - ops[0x101] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - int which=(rm>>3)&7; - if (rm < 0xc0) { - switch (which) { - case 0x00: /* SGDT */ - prev.next = new Inst2.Sgdt_mem(rm); - break; - case 0x01: /* SIDT */ - prev.next = new Inst2.Sidt_mem(rm); - break; - case 0x02: /* LGDT */ - prev.next = new Inst2.Lgdt_mem(rm); - break; - case 0x03: /* LIDT */ - prev.next = new Inst2.Lidt_mem(rm); - break; - case 0x04: /* SMSW */ - prev.next = new Inst2.Smsw_mem(rm); - break; - case 0x06: /* LMSW */ - prev.next = new Inst2.Lmsw_mem(rm); - break; - case 0x07: /* INVLPG */ - prev.next = new Inst2.Invlpg(); - break; - } - } else { - switch (which) { - case 0x02: /* LGDT */ - prev.next = new Inst2.Lgdt_reg(); - break; - case 0x03: /* LIDT */ - prev.next = new Inst2.Lidt_reg(); - break; - case 0x04: /* SMSW */ - prev.next = new Inst2.Smsw_reg(rm); - break; - case 0x06: /* LMSW */ - prev.next = new Inst2.Lmsw_reg(rm); - break; - default: - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } - } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* LAR Gw,Ew */ - ops[0x102] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst2.LarGwEw_reg(rm); - } else { - prev.next = new Inst2.LarGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x102] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.LarGwEw_reg(rm); + } else { + prev.next = new Inst2.LarGwEw_mem(rm); } + return RESULT_HANDLED; }; /* LSL Gw,Ew */ - ops[0x103] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst2.LslGwEw_reg(rm); - } else { - prev.next = new Inst2.LslGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x103] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.LslGwEw_reg(rm); + } else { + prev.next = new Inst2.LslGwEw_mem(rm); } + return RESULT_HANDLED; }; /* CLTS */ - ops[0x106] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.Clts(); - return RESULT_HANDLED; - } + ops[0x106] = prev -> { + prev.next = new Inst2.Clts(); + return RESULT_HANDLED; }; ops[0x306] = ops[0x106]; /* INVD */ - ops[0x108] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Invd(); - return RESULT_HANDLED; - } + ops[0x108] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Invd(); + return RESULT_HANDLED; } }; ops[0x308] = ops[0x108]; @@ -168,1256 +156,1074 @@ final public int call(Op prev) { Intel 64 and IA-32 Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z, Two-byte Opcode Map AMD architecture maps 3DNow! PREFETCH instructions here */ - ops[0x10D] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Noop(); - return RESULT_HANDLED; - } + ops[0x10D] = prev -> { + prev.next = new Inst1.Noop(); + return RESULT_HANDLED; }; /* MOV Rd.CRx */ - ops[0x120] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm < 0xc0 ) { - int which=(rm >> 3) & 7; - rm |= 0xc0; - if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); - } - prev.next = new Inst2.MovRdCr(rm); - return RESULT_HANDLED; + ops[0x120] = prev -> { + int rm=decode_fetchb(); + if (rm < 0xc0 ) { + int which=(rm >> 3) & 7; + rm |= 0xc0; + if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); } + prev.next = new Inst2.MovRdCr(rm); + return RESULT_HANDLED; }; ops[0x320] = ops[0x120]; /* MOV Rd,DRx */ - ops[0x121] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm < 0xc0 ) { - int which=(rm >> 3) & 7; - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,DR"+which+" with non-register"); - } - prev.next = new Inst2.MovRdDr(rm); - return RESULT_HANDLED; + ops[0x121] = prev -> { + int rm=decode_fetchb(); + if (rm < 0xc0 ) { + int which=(rm >> 3) & 7; + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,DR"+which+" with non-register"); } + prev.next = new Inst2.MovRdDr(rm); + return RESULT_HANDLED; }; ops[0x321] = ops[0x121]; /* MOV CRx,Rd */ - ops[0x122] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm < 0xc0 ) { - int which=(rm >> 3) & 7; - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); - } - prev.next = new Inst2.MovCrRd(rm); - return RESULT_HANDLED; + ops[0x122] = prev -> { + int rm=decode_fetchb(); + if (rm < 0xc0 ) { + int which=(rm >> 3) & 7; + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); } + prev.next = new Inst2.MovCrRd(rm); + return RESULT_HANDLED; }; ops[0x322] = ops[0x122]; /* MOV DRx,Rd */ - ops[0x123] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm < 0xc0 ) { - int which=(rm >> 3) & 7; - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV DR"+which+",XXX with non-register"); - } - prev.next = new Inst2.MovDrRd(rm); - return RESULT_HANDLED; + ops[0x123] = prev -> { + int rm=decode_fetchb(); + if (rm < 0xc0 ) { + int which=(rm >> 3) & 7; + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV DR"+which+",XXX with non-register"); } + prev.next = new Inst2.MovDrRd(rm); + return RESULT_HANDLED; }; ops[0x323] = ops[0x123]; /* MOV Rd,TRx */ - ops[0x124] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm < 0xc0 ) { - int which=(rm >> 3) & 7; - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,TR"+which+" with non-register"); - } - prev.next = new Inst2.MovRdTr(rm); - return RESULT_HANDLED; + ops[0x124] = prev -> { + int rm=decode_fetchb(); + if (rm < 0xc0 ) { + int which=(rm >> 3) & 7; + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,TR"+which+" with non-register"); } + prev.next = new Inst2.MovRdTr(rm); + return RESULT_HANDLED; }; ops[0x324] = ops[0x124]; /* MOV TRx,Rd */ - ops[0x126] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm < 0xc0 ) { - int which=(rm >> 3) & 7; - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV TR"+which+",XXX with non-register"); - } - prev.next = new Inst2.MovTrRd(rm); - return RESULT_HANDLED; + ops[0x126] = prev -> { + int rm=decode_fetchb(); + if (rm < 0xc0 ) { + int which=(rm >> 3) & 7; + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV TR"+which+",XXX with non-register"); } + prev.next = new Inst2.MovTrRd(rm); + return RESULT_HANDLED; }; ops[0x326] = ops[0x126]; /* RDTSC */ - ops[0x131] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_o_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_o_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_o_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_o_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNO */ - ops[0x141] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_no_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_no_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_no_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_no_mem(rm); } + return RESULT_HANDLED; }; /* CMOVB */ - ops[0x142] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_b_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_b_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_b_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_b_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNB */ - ops[0x143] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_nb_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_nb_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_nb_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_nb_mem(rm); } + return RESULT_HANDLED; }; /* CMOVZ */ - ops[0x144] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_z_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_z_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_z_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_z_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNZ */ - ops[0x145] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_nz_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_nz_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_nz_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_nz_mem(rm); } + return RESULT_HANDLED; }; /* CMOVBE */ - ops[0x146] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_be_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_be_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_be_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_be_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNBE */ - ops[0x147] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_nbe_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_nbe_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_nbe_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_nbe_mem(rm); } + return RESULT_HANDLED; }; /* CMOVS */ - ops[0x148] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_s_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_s_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_s_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_s_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNS */ - ops[0x149] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_ns_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_ns_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_ns_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_ns_mem(rm); } + return RESULT_HANDLED; }; /* CMOVP */ - ops[0x14a] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_p_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_p_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_p_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_p_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNP */ - ops[0x14b] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_np_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_np_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_np_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_np_mem(rm); } + return RESULT_HANDLED; }; /* CMOVL */ - ops[0x14c] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_l_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_l_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_l_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_l_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNL */ - ops[0x14d] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_nl_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_nl_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_nl_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_nl_mem(rm); } + return RESULT_HANDLED; }; /* CMOVLE */ - ops[0x14e] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_le_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_le_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_le_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_le_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNLE */ - ops[0x14f] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst2.ConditionalMov_nle_reg(rm); - } else { - prev.next = new Inst2.ConditionalMov_nle_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst2.ConditionalMov_nle_reg(rm); + } else { + prev.next = new Inst2.ConditionalMov_nle_mem(rm); } + return RESULT_HANDLED; }; /* JO */ - ops[0x180] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_o(); - return RESULT_JUMP; - } + ops[0x180] = prev -> { + prev.next = new Inst2.JumpCond16_w_o(); + return RESULT_JUMP; }; /* JNO */ - ops[0x181] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_no(); - return RESULT_JUMP; - } + ops[0x181] = prev -> { + prev.next = new Inst2.JumpCond16_w_no(); + return RESULT_JUMP; }; /* JB */ - ops[0x182] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_b(); - return RESULT_JUMP; - } + ops[0x182] = prev -> { + prev.next = new Inst2.JumpCond16_w_b(); + return RESULT_JUMP; }; /* JNB */ - ops[0x183] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_nb(); - return RESULT_JUMP; - } + ops[0x183] = prev -> { + prev.next = new Inst2.JumpCond16_w_nb(); + return RESULT_JUMP; }; /* JZ */ - ops[0x184] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_z(); - return RESULT_JUMP; - } + ops[0x184] = prev -> { + prev.next = new Inst2.JumpCond16_w_z(); + return RESULT_JUMP; }; /* JNZ */ - ops[0x185] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_nz(); - return RESULT_JUMP; - } + ops[0x185] = prev -> { + prev.next = new Inst2.JumpCond16_w_nz(); + return RESULT_JUMP; }; /* JBE */ - ops[0x186] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_be(); - return RESULT_JUMP; - } + ops[0x186] = prev -> { + prev.next = new Inst2.JumpCond16_w_be(); + return RESULT_JUMP; }; /* JNBE */ - ops[0x187] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_nbe(); - return RESULT_JUMP; - } + ops[0x187] = prev -> { + prev.next = new Inst2.JumpCond16_w_nbe(); + return RESULT_JUMP; }; /* JS */ - ops[0x188] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_s(); - return RESULT_JUMP; - } + ops[0x188] = prev -> { + prev.next = new Inst2.JumpCond16_w_s(); + return RESULT_JUMP; }; /* JNS */ - ops[0x189] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_ns(); - return RESULT_JUMP; - } + ops[0x189] = prev -> { + prev.next = new Inst2.JumpCond16_w_ns(); + return RESULT_JUMP; }; /* JP */ - ops[0x18a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_p(); - return RESULT_JUMP; - } + ops[0x18a] = prev -> { + prev.next = new Inst2.JumpCond16_w_p(); + return RESULT_JUMP; }; /* JNP */ - ops[0x18b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_np(); - return RESULT_JUMP; - } + ops[0x18b] = prev -> { + prev.next = new Inst2.JumpCond16_w_np(); + return RESULT_JUMP; }; /* JL */ - ops[0x18c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_l(); - return RESULT_JUMP; - } + ops[0x18c] = prev -> { + prev.next = new Inst2.JumpCond16_w_l(); + return RESULT_JUMP; }; /* JNL */ - ops[0x18d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_nl(); - return RESULT_JUMP; - } + ops[0x18d] = prev -> { + prev.next = new Inst2.JumpCond16_w_nl(); + return RESULT_JUMP; }; /* JLE */ - ops[0x18e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_le(); - return RESULT_JUMP; - } + ops[0x18e] = prev -> { + prev.next = new Inst2.JumpCond16_w_le(); + return RESULT_JUMP; }; /* JNLE */ - ops[0x18f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.JumpCond16_w_nle(); - return RESULT_JUMP; - } + ops[0x18f] = prev -> { + prev.next = new Inst2.JumpCond16_w_nle(); + return RESULT_JUMP; }; /* SETO */ - ops[0x190] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_o(rm); - } else { - prev.next = new Inst2.SETcc_mem_o(rm); - } - return RESULT_HANDLED; + ops[0x190] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_o(rm); + } else { + prev.next = new Inst2.SETcc_mem_o(rm); } + return RESULT_HANDLED; }; ops[0x390] = ops[0x190]; /* SETNO */ - ops[0x191] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_no(rm); - } else { - prev.next = new Inst2.SETcc_mem_no(rm); - } - return RESULT_HANDLED; + ops[0x191] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_no(rm); + } else { + prev.next = new Inst2.SETcc_mem_no(rm); } + return RESULT_HANDLED; }; ops[0x391] = ops[0x191]; /* SETB */ - ops[0x192] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_b(rm); - } else { - prev.next = new Inst2.SETcc_mem_b(rm); - } - return RESULT_HANDLED; + ops[0x192] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_b(rm); + } else { + prev.next = new Inst2.SETcc_mem_b(rm); } + return RESULT_HANDLED; }; ops[0x392] = ops[0x192]; /* SETNB */ - ops[0x193] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_nb(rm); - } else { - prev.next = new Inst2.SETcc_mem_nb(rm); - } - return RESULT_HANDLED; + ops[0x193] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_nb(rm); + } else { + prev.next = new Inst2.SETcc_mem_nb(rm); } + return RESULT_HANDLED; }; ops[0x393] = ops[0x193]; /* SETZ */ - ops[0x194] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_z(rm); - } else { - prev.next = new Inst2.SETcc_mem_z(rm); - } - return RESULT_HANDLED; + ops[0x194] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_z(rm); + } else { + prev.next = new Inst2.SETcc_mem_z(rm); } + return RESULT_HANDLED; }; ops[0x394] = ops[0x194]; /* SETNZ */ - ops[0x195] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_nz(rm); - } else { - prev.next = new Inst2.SETcc_mem_nz(rm); - } - return RESULT_HANDLED; + ops[0x195] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_nz(rm); + } else { + prev.next = new Inst2.SETcc_mem_nz(rm); } + return RESULT_HANDLED; }; ops[0x395] = ops[0x195]; /* SETBE */ - ops[0x196] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_be(rm); - } else { - prev.next = new Inst2.SETcc_mem_be(rm); - } - return RESULT_HANDLED; + ops[0x196] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_be(rm); + } else { + prev.next = new Inst2.SETcc_mem_be(rm); } + return RESULT_HANDLED; }; ops[0x396] = ops[0x196]; /* SETNBE */ - ops[0x197] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_nbe(rm); - } else { - prev.next = new Inst2.SETcc_mem_nbe(rm); - } - return RESULT_HANDLED; + ops[0x197] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_nbe(rm); + } else { + prev.next = new Inst2.SETcc_mem_nbe(rm); } + return RESULT_HANDLED; }; ops[0x397] = ops[0x197]; /* SETS */ - ops[0x198] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_s(rm); - } else { - prev.next = new Inst2.SETcc_mem_s(rm); - } - return RESULT_HANDLED; + ops[0x198] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_s(rm); + } else { + prev.next = new Inst2.SETcc_mem_s(rm); } + return RESULT_HANDLED; }; ops[0x398] = ops[0x198]; /* SETNS */ - ops[0x199] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_ns(rm); - } else { - prev.next = new Inst2.SETcc_mem_ns(rm); - } - return RESULT_HANDLED; + ops[0x199] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_ns(rm); + } else { + prev.next = new Inst2.SETcc_mem_ns(rm); } + return RESULT_HANDLED; }; ops[0x399] = ops[0x199]; /* SETP */ - ops[0x19a] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_p(rm); - } else { - prev.next = new Inst2.SETcc_mem_p(rm); - } - return RESULT_HANDLED; + ops[0x19a] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_p(rm); + } else { + prev.next = new Inst2.SETcc_mem_p(rm); } + return RESULT_HANDLED; }; ops[0x39a] = ops[0x19a]; /* SETNP */ - ops[0x19b] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_np(rm); - } else { - prev.next = new Inst2.SETcc_mem_np(rm); - } - return RESULT_HANDLED; + ops[0x19b] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_np(rm); + } else { + prev.next = new Inst2.SETcc_mem_np(rm); } + return RESULT_HANDLED; }; ops[0x39b] = ops[0x19b]; /* SETL */ - ops[0x19c] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_l(rm); - } else { - prev.next = new Inst2.SETcc_mem_l(rm); - } - return RESULT_HANDLED; + ops[0x19c] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_l(rm); + } else { + prev.next = new Inst2.SETcc_mem_l(rm); } + return RESULT_HANDLED; }; ops[0x39c] = ops[0x19c]; /* SETNL */ - ops[0x19d] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_nl(rm); - } else { - prev.next = new Inst2.SETcc_mem_nl(rm); - } - return RESULT_HANDLED; + ops[0x19d] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_nl(rm); + } else { + prev.next = new Inst2.SETcc_mem_nl(rm); } + return RESULT_HANDLED; }; ops[0x39d] = ops[0x19d]; /* SETLE */ - ops[0x19e] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_le(rm); - } else { - prev.next = new Inst2.SETcc_mem_le(rm); - } - return RESULT_HANDLED; + ops[0x19e] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_le(rm); + } else { + prev.next = new Inst2.SETcc_mem_le(rm); } + return RESULT_HANDLED; }; ops[0x39e] = ops[0x19e]; /* SETNLE */ - ops[0x19f] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.SETcc_reg_nle(rm); - } else { - prev.next = new Inst2.SETcc_mem_nle(rm); - } - return RESULT_HANDLED; + ops[0x19f] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.SETcc_reg_nle(rm); + } else { + prev.next = new Inst2.SETcc_mem_nle(rm); } + return RESULT_HANDLED; }; ops[0x39f] = ops[0x19f]; /* PUSH FS */ - ops[0x1a0] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.PushFS(); - return RESULT_HANDLED; - } + ops[0x1a0] = prev -> { + prev.next = new Inst2.PushFS(); + return RESULT_HANDLED; }; /* POP FS */ - ops[0x1a1] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.PopFS(); - return RESULT_HANDLED; - } + ops[0x1a1] = prev -> { + prev.next = new Inst2.PopFS(); + return RESULT_HANDLED; }; /* CPUID */ - ops[0x1a2] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0 ) { - prev.next = new Inst2.BtEwGw_reg(rm); - } else { - prev.next = new Inst2.BtEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1a3] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.BtEwGw_reg(rm); + } else { + prev.next = new Inst2.BtEwGw_mem(rm); } + return RESULT_HANDLED; }; /* SHLD Ew,Gw,Ib */ - ops[0x1a4] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - Reg earw = Mod.ew(rm); - int op3 = decode_fetchb(); - if (Instructions.valid_DSHLW(op3)) - prev.next = new Inst2.ShldEwGwIb_reg(rm, earw, op3); - } else { - EaaBase get_eaa = Mod.getEaa(rm); - int op3 = decode_fetchb(); - if (Instructions.valid_DSHLW(op3)) - prev.next = new Inst2.ShldEwGwIb_mem(rm, get_eaa, op3); - } - return RESULT_HANDLED; - } + ops[0x1a4] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + Reg earw = Mod.ew(rm); + int op3 = decode_fetchb(); + if (Instructions.valid_DSHLW(op3)) + prev.next = new Inst2.ShldEwGwIb_reg(rm, earw, op3); + } else { + EaaBase get_eaa = Mod.getEaa(rm); + int op3 = decode_fetchb(); + if (Instructions.valid_DSHLW(op3)) + prev.next = new Inst2.ShldEwGwIb_mem(rm, get_eaa, op3); + } + return RESULT_HANDLED; }; /* SHLD Ew,Gw,CL */ - ops[0x1a5] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.ShldEwGwCl_reg(rm); - } else { - prev.next = new Inst2.ShldEwGwCl_mem(rm); - } - return RESULT_HANDLED; + ops[0x1a5] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.ShldEwGwCl_reg(rm); + } else { + prev.next = new Inst2.ShldEwGwCl_mem(rm); } + return RESULT_HANDLED; }; /* PUSH GS */ - ops[0x1a8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.PushGS(); - return RESULT_HANDLED; - } + ops[0x1a8] = prev -> { + prev.next = new Inst2.PushGS(); + return RESULT_HANDLED; }; /* POP GS */ - ops[0x1a9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst2.PopGS(); - return RESULT_HANDLED; - } + ops[0x1a9] = prev -> { + prev.next = new Inst2.PopGS(); + return RESULT_HANDLED; }; /* BTS Ew,Gw */ - ops[0x1ab] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.BtsEwGw_reg(rm); - } else { - prev.next = new Inst2.BtsEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1ab] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.BtsEwGw_reg(rm); + } else { + prev.next = new Inst2.BtsEwGw_mem(rm); } + return RESULT_HANDLED; }; /* SHRD Ew,Gw,Ib */ - ops[0x1ac] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - Reg earw = Mod.ew(rm); - int op3 = decode_fetchb(); - if (Instructions.valid_DSHRW(op3)) - prev.next = new Inst2.ShrdEwGwIb_reg(rm, earw, op3); - } else { - EaaBase get_eaa = Mod.getEaa(rm); - int op3 = decode_fetchb(); - if (Instructions.valid_DSHRW(op3)) - prev.next = new Inst2.ShrdEwGwIb_mem(rm, get_eaa, op3); - } - return RESULT_HANDLED; - } + ops[0x1ac] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + Reg earw = Mod.ew(rm); + int op3 = decode_fetchb(); + if (Instructions.valid_DSHRW(op3)) + prev.next = new Inst2.ShrdEwGwIb_reg(rm, earw, op3); + } else { + EaaBase get_eaa = Mod.getEaa(rm); + int op3 = decode_fetchb(); + if (Instructions.valid_DSHRW(op3)) + prev.next = new Inst2.ShrdEwGwIb_mem(rm, get_eaa, op3); + } + return RESULT_HANDLED; }; /* SHRD Ew,Gw,CL */ - ops[0x1ad] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.ShrdEwGwCl_reg(rm); - } else { - prev.next = new Inst2.ShrdEwGwCl_mem(rm); - } - return RESULT_HANDLED; + ops[0x1ad] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.ShrdEwGwCl_reg(rm); + } else { + prev.next = new Inst2.ShrdEwGwCl_mem(rm); } + return RESULT_HANDLED; }; /* IMUL Gw,Ew */ - ops[0x1af] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.ImulGwEw_reg(rm); - } else { - prev.next = new Inst2.ImulGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1af] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.ImulGwEw_reg(rm); + } else { + prev.next = new Inst2.ImulGwEw_mem(rm); } + return RESULT_HANDLED; }; /* cmpxchg Eb,Gb */ - ops[0x1b0] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; + ops[0x1b0] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.CmpxchgEbGb_reg(rm); } else { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.CmpxchgEbGb_reg(rm); - } else { - prev.next = new Inst2.CmpxchgEbGb_mem(rm); - } - return RESULT_HANDLED; + prev.next = new Inst2.CmpxchgEbGb_mem(rm); } + return RESULT_HANDLED; } }; ops[0x3b0] = ops[0x1b0]; /* cmpxchg Ew,Gw */ - ops[0x1b1] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; + ops[0x1b1] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.CmpxchgEwGw_reg(rm); } else { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.CmpxchgEwGw_reg(rm); - } else { - prev.next = new Inst2.CmpxchgEwGw_mem(rm); - } - return RESULT_HANDLED; + prev.next = new Inst2.CmpxchgEwGw_mem(rm); } + return RESULT_HANDLED; } }; /* LSS Ew */ - ops[0x1b2] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst2.LssEw(rm); - } - return RESULT_HANDLED; + ops[0x1b2] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst2.LssEw(rm); } + return RESULT_HANDLED; }; /* BTR Ew,Gw */ - ops[0x1b3] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.BtrEwGw_reg(rm); - } else { - prev.next = new Inst2.BtrEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1b3] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.BtrEwGw_reg(rm); + } else { + prev.next = new Inst2.BtrEwGw_mem(rm); } + return RESULT_HANDLED; }; /* LFS Ew */ - ops[0x1b4] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst2.LfsEw(rm); - } - return RESULT_HANDLED; + ops[0x1b4] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst2.LfsEw(rm); } + return RESULT_HANDLED; }; /* LGS Ew */ - ops[0x1b5] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst2.LgsEw(rm); - } - return RESULT_HANDLED; + ops[0x1b5] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst2.LgsEw(rm); } + return RESULT_HANDLED; }; /* MOVZX Gw,Eb */ - ops[0x1b6] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.MovzxGwEb_reg(rm); - } else { - prev.next = new Inst2.MovzxGwEb_mem(rm); - } - return RESULT_HANDLED; + ops[0x1b6] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.MovzxGwEb_reg(rm); + } else { + prev.next = new Inst2.MovzxGwEb_mem(rm); } + return RESULT_HANDLED; }; /* MOVZX Gw,Ew */ - ops[0x1b7] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.MovzxGwEw_reg(rm); - } else { - prev.next = new Inst2.MovzxGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1b7] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.MovzxGwEw_reg(rm); + } else { + prev.next = new Inst2.MovzxGwEw_mem(rm); } + return RESULT_HANDLED; }; /* MOVSX Gw,Ew */ ops[0x1bf] = ops[0x1b7]; /* GRP8 Ew,Ib */ - ops[0x1ba] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - switch (rm & 0x38) { - case 0x20: /* BT */ - prev.next = new Inst2.BtEwIb_reg(rm); - break; - case 0x28: /* BTS */ - prev.next = new Inst2.BtsEwIb_reg(rm); - break; - case 0x30: /* BTR */ - prev.next = new Inst2.BtrEwIb_reg(rm); - break; - case 0x38: /* BTC */ - prev.next = new Inst2.BtcEwIb_reg(rm); - break; - default: - Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } - } else { - switch (rm & 0x38) { - case 0x20: /* BT */ - prev.next = new Inst2.BtEwIb_mem(rm); - break; - case 0x28: /* BTS */ - prev.next = new Inst2.BtsEwIb_mem(rm); - break; - case 0x30: /* BTR */ - prev.next = new Inst2.BtrEwIb_mem(rm); - break; - case 0x38: /* BTC */ - prev.next = new Inst2.BtcEwIb_mem(rm); - break; - default: - Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } + ops[0x1ba] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + switch (rm & 0x38) { + case 0x20: /* BT */ + prev.next = new Inst2.BtEwIb_reg(rm); + break; + case 0x28: /* BTS */ + prev.next = new Inst2.BtsEwIb_reg(rm); + break; + case 0x30: /* BTR */ + prev.next = new Inst2.BtrEwIb_reg(rm); + break; + case 0x38: /* BTC */ + prev.next = new Inst2.BtcEwIb_reg(rm); + break; + default: + Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); + } + } else { + switch (rm & 0x38) { + case 0x20: /* BT */ + prev.next = new Inst2.BtEwIb_mem(rm); + break; + case 0x28: /* BTS */ + prev.next = new Inst2.BtsEwIb_mem(rm); + break; + case 0x30: /* BTR */ + prev.next = new Inst2.BtrEwIb_mem(rm); + break; + case 0x38: /* BTC */ + prev.next = new Inst2.BtcEwIb_mem(rm); + break; + default: + Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* BTC Ew,Gw */ - ops[0x1bb] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.BtcEwGw_reg(rm); - } else { - prev.next = new Inst2.BtcEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1bb] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.BtcEwGw_reg(rm); + } else { + prev.next = new Inst2.BtcEwGw_mem(rm); } + return RESULT_HANDLED; }; /* BSF Gw,Ew */ - ops[0x1bc] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.BsfGwEw_reg(rm); - } else { - prev.next = new Inst2.BsfGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1bc] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.BsfGwEw_reg(rm); + } else { + prev.next = new Inst2.BsfGwEw_mem(rm); } + return RESULT_HANDLED; }; /* BSR Gw,Ew */ - ops[0x1bd] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.BsrGwEw_reg(rm); - } else { - prev.next = new Inst2.BsrGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x1bd] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.BsrGwEw_reg(rm); + } else { + prev.next = new Inst2.BsrGwEw_mem(rm); } + return RESULT_HANDLED; }; /* MOVSX Gw,Eb */ - ops[0x1be] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.MovsxGwEb_reg(rm); - } else { - prev.next = new Inst2.MovsxGwEb_mem(rm); - } - return RESULT_HANDLED; + ops[0x1be] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.MovsxGwEb_reg(rm); + } else { + prev.next = new Inst2.MovsxGwEb_mem(rm); } + return RESULT_HANDLED; }; /* XADD Gb,Eb */ - ops[0x1c0] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; + ops[0x1c0] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.XaddGbEb_reg(rm); } else { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.XaddGbEb_reg(rm); - } else { - prev.next = new Inst2.XaddGbEb_mem(rm); - } - return RESULT_HANDLED; + prev.next = new Inst2.XaddGbEb_mem(rm); } + return RESULT_HANDLED; } }; ops[0x3c0] = ops[0x1c0]; /* XADD Gw,Ew */ - ops[0x1c1] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; + ops[0x1c1] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst2.XaddGwEw_reg(rm); } else { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst2.XaddGwEw_reg(rm); - } else { - prev.next = new Inst2.XaddGwEw_mem(rm); - } - return RESULT_HANDLED; + prev.next = new Inst2.XaddGwEw_mem(rm); } + return RESULT_HANDLED; } }; /* BSWAP AX */ - ops[0x1c8] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_eax); - return RESULT_HANDLED; - } + ops[0x1c8] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_eax); + return RESULT_HANDLED; } }; /* BSWAP CX */ - ops[0x1c9] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_ecx); - return RESULT_HANDLED; - } + ops[0x1c9] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_ecx); + return RESULT_HANDLED; } }; /* BSWAP DX */ - ops[0x1ca] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_edx); - return RESULT_HANDLED; - } + ops[0x1ca] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_edx); + return RESULT_HANDLED; } }; /* BSWAP BX */ - ops[0x1cb] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_ebx); - return RESULT_HANDLED; - } + ops[0x1cb] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_ebx); + return RESULT_HANDLED; } }; /* BSWAP SP */ - ops[0x1cc] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_esp); - return RESULT_HANDLED; - } + ops[0x1cc] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_esp); + return RESULT_HANDLED; } }; /* BSWAP BP */ - ops[0x1cd] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_ebp); - return RESULT_HANDLED; - } + ops[0x1cd] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_ebp); + return RESULT_HANDLED; } }; /* BSWAP SI */ - ops[0x1ce] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_esi); - return RESULT_HANDLED; - } + ops[0x1ce] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_esi); + return RESULT_HANDLED; } }; /* BSWAP DI */ - ops[0x1cf] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst2.Bswapw(reg_edi); - return RESULT_HANDLED; - } + ops[0x1cf] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst2.Bswapw(reg_edi); + return RESULT_HANDLED; } }; } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66.java index 8270d25c..fa3e3cff 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66.java @@ -9,1685 +9,1379 @@ public class Prefix_66 extends Helper { static public void init(Decode[] ops) { /* ADD Ed,Gd */ - ops[0x201] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Addd_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.AddEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x201] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Addd_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.AddEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* ADD Gd,Ed */ - ops[0x203] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Addd_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.AddGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x203] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Addd_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.AddGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* ADD EAX,Id */ - ops[0x205] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.AddEaxId(); - return RESULT_HANDLED; - } + ops[0x205] = prev -> { + prev.next = new Inst3.AddEaxId(); + return RESULT_HANDLED; }; /* PUSH ES */ - ops[0x206] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32ES(); - return RESULT_HANDLED; - } + ops[0x206] = prev -> { + prev.next = new Inst3.Push32ES(); + return RESULT_HANDLED; }; /* POP ES */ - ops[0x207] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32ES(); - return RESULT_HANDLED; - } + ops[0x207] = prev -> { + prev.next = new Inst3.Pop32ES(); + return RESULT_HANDLED; }; /* OR Ed,Gd */ - ops[0x209] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Ord_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.OrEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x209] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Ord_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.OrEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* OR Gd,Ed */ - ops[0x20b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Ord_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.OrGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x20b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Ord_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.OrGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* OR EAX,Id */ - ops[0x20d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.OrEaxId(); - return RESULT_HANDLED; - } + ops[0x20d] = prev -> { + prev.next = new Inst3.OrEaxId(); + return RESULT_HANDLED; }; /* PUSH CS */ - ops[0x20e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32CS(); - return RESULT_HANDLED; - } + ops[0x20e] = prev -> { + prev.next = new Inst3.Push32CS(); + return RESULT_HANDLED; }; /* ADC Ed,Gd */ - ops[0x211] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Adcd_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.AdcEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x211] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Adcd_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.AdcEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* ADC Gd,Ed */ - ops[0x213] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Adcd_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.AdcGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x213] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Adcd_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.AdcGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* ADC EAX,Id */ - ops[0x215] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.AdcEaxId(); - return RESULT_HANDLED; - } + ops[0x215] = prev -> { + prev.next = new Inst3.AdcEaxId(); + return RESULT_HANDLED; }; /* PUSH SS */ - ops[0x216] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32SS(); - return RESULT_HANDLED; - } + ops[0x216] = prev -> { + prev.next = new Inst3.Push32SS(); + return RESULT_HANDLED; }; /* POP SS */ - ops[0x217] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32SS(); - return RESULT_HANDLED; - } + ops[0x217] = prev -> { + prev.next = new Inst3.Pop32SS(); + return RESULT_HANDLED; }; /* SBB Ed,Gd */ - ops[0x219] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Sbbd_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.SbbEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x219] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Sbbd_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.SbbEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* SBB Gd,Ed */ - ops[0x21b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Sbbd_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.SbbGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x21b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Sbbd_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.SbbGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* SBB EAX,Id */ - ops[0x21d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.SbbEaxId(); - return RESULT_HANDLED; - } + ops[0x21d] = prev -> { + prev.next = new Inst3.SbbEaxId(); + return RESULT_HANDLED; }; /* PUSH DS */ - ops[0x21e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32DS(); - return RESULT_HANDLED; - } + ops[0x21e] = prev -> { + prev.next = new Inst3.Push32DS(); + return RESULT_HANDLED; }; /* POP DS */ - ops[0x21f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32DS(); - return RESULT_HANDLED; - } + ops[0x21f] = prev -> { + prev.next = new Inst3.Pop32DS(); + return RESULT_HANDLED; }; /* AND Ed,Gd */ - ops[0x221] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Andd_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.AndEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x221] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Andd_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.AndEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* AND Gd,Ed */ - ops[0x223] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Andd_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.AndGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x223] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Andd_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.AndGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* AND EAX,Id */ - ops[0x225] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.AndEaxId(); - return RESULT_HANDLED; - } + ops[0x225] = prev -> { + prev.next = new Inst3.AndEaxId(); + return RESULT_HANDLED; }; /* SUB Ed,Gd */ - ops[0x229] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Subd_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.SubEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x229] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Subd_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.SubEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* SUB Gd,Ed */ - ops[0x22b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Subd_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.SubGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x22b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Subd_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.SubGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* SUB EAX,Id */ - ops[0x22d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.SubEaxId(); - return RESULT_HANDLED; - } + ops[0x22d] = prev -> { + prev.next = new Inst3.SubEaxId(); + return RESULT_HANDLED; }; /* XOR Ed,Gd */ - ops[0x231] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Xord_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.XorEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x231] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Xord_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.XorEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* XOR Gd,Ed */ - ops[0x233] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Xord_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.XorGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x233] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Xord_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.XorGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* XOR EAX,Id */ - ops[0x235] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XorEaxId(); - return RESULT_HANDLED; - } + ops[0x235] = prev -> { + prev.next = new Inst3.XorEaxId(); + return RESULT_HANDLED; }; /* CMP Ed,Gd */ - ops[0x239] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Cmpd_reg(Mod.ed(rm), Mod.gd(rm)); - } else { - prev.next = new Inst3.CmpEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); - } - return RESULT_HANDLED; + ops[0x239] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Cmpd_reg(Mod.ed(rm), Mod.gd(rm)); + } else { + prev.next = new Inst3.CmpEdGd_mem(Mod.getEaa(rm), Mod.gd(rm)); } + return RESULT_HANDLED; }; /* CMP Gd,Ed */ - ops[0x23b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.Cmpd_reg(Mod.gd(rm), Mod.ed(rm)); - } else { - prev.next = new Inst3.CmpGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x23b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.Cmpd_reg(Mod.gd(rm), Mod.ed(rm)); + } else { + prev.next = new Inst3.CmpGdEd_mem(Mod.gd(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* CMP EAX,Id */ - ops[0x23d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.CmpEaxId(); - return RESULT_HANDLED; - } + ops[0x23d] = prev -> { + prev.next = new Inst3.CmpEaxId(); + return RESULT_HANDLED; }; /* INC EAX */ - ops[0x240] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_eax); - return RESULT_HANDLED; - } + ops[0x240] = prev -> { + prev.next = new Inst3.Incd_reg(reg_eax); + return RESULT_HANDLED; }; /* INC ECX */ - ops[0x241] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_ecx); - return RESULT_HANDLED; - } + ops[0x241] = prev -> { + prev.next = new Inst3.Incd_reg(reg_ecx); + return RESULT_HANDLED; }; /* INC EDX */ - ops[0x242] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_edx); - return RESULT_HANDLED; - } + ops[0x242] = prev -> { + prev.next = new Inst3.Incd_reg(reg_edx); + return RESULT_HANDLED; }; /* INC EBX */ - ops[0x243] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_ebx); - return RESULT_HANDLED; - } + ops[0x243] = prev -> { + prev.next = new Inst3.Incd_reg(reg_ebx); + return RESULT_HANDLED; }; /* INC ESP */ - ops[0x244] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_esp); - return RESULT_HANDLED; - } + ops[0x244] = prev -> { + prev.next = new Inst3.Incd_reg(reg_esp); + return RESULT_HANDLED; }; /* INC EBP */ - ops[0x245] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_ebp); - return RESULT_HANDLED; - } + ops[0x245] = prev -> { + prev.next = new Inst3.Incd_reg(reg_ebp); + return RESULT_HANDLED; }; /* INC ESI */ - ops[0x246] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_esi); - return RESULT_HANDLED; - } + ops[0x246] = prev -> { + prev.next = new Inst3.Incd_reg(reg_esi); + return RESULT_HANDLED; }; /* INC EDI */ - ops[0x247] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Incd_reg(reg_edi); - return RESULT_HANDLED; - } + ops[0x247] = prev -> { + prev.next = new Inst3.Incd_reg(reg_edi); + return RESULT_HANDLED; }; /* DEC EAX */ - ops[0x248] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_eax); - return RESULT_HANDLED; - } + ops[0x248] = prev -> { + prev.next = new Inst3.Decd_reg(reg_eax); + return RESULT_HANDLED; }; /* DEC ECX */ - ops[0x249] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_ecx); - return RESULT_HANDLED; - } + ops[0x249] = prev -> { + prev.next = new Inst3.Decd_reg(reg_ecx); + return RESULT_HANDLED; }; /* DEC EDX */ - ops[0x24a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_edx); - return RESULT_HANDLED; - } + ops[0x24a] = prev -> { + prev.next = new Inst3.Decd_reg(reg_edx); + return RESULT_HANDLED; }; /* DEC EBX */ - ops[0x24b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_ebx); - return RESULT_HANDLED; - } + ops[0x24b] = prev -> { + prev.next = new Inst3.Decd_reg(reg_ebx); + return RESULT_HANDLED; }; /* DEC ESP */ - ops[0x24c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_esp); - return RESULT_HANDLED; - } + ops[0x24c] = prev -> { + prev.next = new Inst3.Decd_reg(reg_esp); + return RESULT_HANDLED; }; /* DEC EBP */ - ops[0x24d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_ebp); - return RESULT_HANDLED; - } + ops[0x24d] = prev -> { + prev.next = new Inst3.Decd_reg(reg_ebp); + return RESULT_HANDLED; }; /* DEC ESI */ - ops[0x24e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_esi); - return RESULT_HANDLED; - } + ops[0x24e] = prev -> { + prev.next = new Inst3.Decd_reg(reg_esi); + return RESULT_HANDLED; }; /* DEC EDI */ - ops[0x24f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Decd_reg(reg_edi); - return RESULT_HANDLED; - } + ops[0x24f] = prev -> { + prev.next = new Inst3.Decd_reg(reg_edi); + return RESULT_HANDLED; }; /* PUSH EAX */ - ops[0x250] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_eax); - return RESULT_HANDLED; - } + ops[0x250] = prev -> { + prev.next = new Inst3.Push32_reg(reg_eax); + return RESULT_HANDLED; }; /* PUSH ECX */ - ops[0x251] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_ecx); - return RESULT_HANDLED; - } + ops[0x251] = prev -> { + prev.next = new Inst3.Push32_reg(reg_ecx); + return RESULT_HANDLED; }; /* PUSH EDX */ - ops[0x252] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_edx); - return RESULT_HANDLED; - } + ops[0x252] = prev -> { + prev.next = new Inst3.Push32_reg(reg_edx); + return RESULT_HANDLED; }; /* PUSH EBX */ - ops[0x253] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_ebx); - return RESULT_HANDLED; - } + ops[0x253] = prev -> { + prev.next = new Inst3.Push32_reg(reg_ebx); + return RESULT_HANDLED; }; /* PUSH ESP */ - ops[0x254] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_esp); - return RESULT_HANDLED; - } + ops[0x254] = prev -> { + prev.next = new Inst3.Push32_reg(reg_esp); + return RESULT_HANDLED; }; /* PUSH EBP */ - ops[0x255] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_ebp); - return RESULT_HANDLED; - } + ops[0x255] = prev -> { + prev.next = new Inst3.Push32_reg(reg_ebp); + return RESULT_HANDLED; }; /* PUSH ESI */ - ops[0x256] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_esi); - return RESULT_HANDLED; - } + ops[0x256] = prev -> { + prev.next = new Inst3.Push32_reg(reg_esi); + return RESULT_HANDLED; }; /* PUSH EDI */ - ops[0x257] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Push32_reg(reg_edi); - return RESULT_HANDLED; - } + ops[0x257] = prev -> { + prev.next = new Inst3.Push32_reg(reg_edi); + return RESULT_HANDLED; }; /* POP EAX */ - ops[0x258] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_eax); - return RESULT_HANDLED; - } + ops[0x258] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_eax); + return RESULT_HANDLED; }; /* POP ECX */ - ops[0x259] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_ecx); - return RESULT_HANDLED; - } + ops[0x259] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_ecx); + return RESULT_HANDLED; }; /* POP EDX */ - ops[0x25a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_edx); - return RESULT_HANDLED; - } + ops[0x25a] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_edx); + return RESULT_HANDLED; }; /* POP EBX */ - ops[0x25b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_ebx); - return RESULT_HANDLED; - } + ops[0x25b] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_ebx); + return RESULT_HANDLED; }; /* POP ESP */ - ops[0x25c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_esp); - return RESULT_HANDLED; - } + ops[0x25c] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_esp); + return RESULT_HANDLED; }; /* POP EBP */ - ops[0x25d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_ebp); - return RESULT_HANDLED; - } + ops[0x25d] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_ebp); + return RESULT_HANDLED; }; /* POP ESI */ - ops[0x25e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_esi); - return RESULT_HANDLED; - } + ops[0x25e] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_esi); + return RESULT_HANDLED; }; /* POP EDI */ - ops[0x25f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pop32_reg(reg_edi); - return RESULT_HANDLED; - } + ops[0x25f] = prev -> { + prev.next = new Inst3.Pop32_reg(reg_edi); + return RESULT_HANDLED; }; /* PUSHAD */ - ops[0x260] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pushad(); - return RESULT_HANDLED; - } + ops[0x260] = prev -> { + prev.next = new Inst3.Pushad(); + return RESULT_HANDLED; }; /* POPAD */ - ops[0x261] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Popad(); - return RESULT_HANDLED; - } + ops[0x261] = prev -> { + prev.next = new Inst3.Popad(); + return RESULT_HANDLED; }; /* BOUND Ed */ - ops[0x262] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.BoundEd(); - return RESULT_HANDLED; - } + ops[0x262] = prev -> { + prev.next = new Inst3.BoundEd(); + return RESULT_HANDLED; }; /* ARPL Ed,Rd */ - ops[0x263] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.ArplEdRd_reg(rm); - } else { - prev.next = new Inst3.ArplEdRd_mem(rm); - } - return RESULT_HANDLED; + ops[0x263] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.ArplEdRd_reg(rm); + } else { + prev.next = new Inst3.ArplEdRd_mem(rm); } + return RESULT_HANDLED; }; /* PUSH Id */ - ops[0x268] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.PushId(); - return RESULT_HANDLED; - } + ops[0x268] = prev -> { + prev.next = new Inst3.PushId(); + return RESULT_HANDLED; }; /* IMUL Gd,Ed,Id */ - ops[0x269] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.ImulGdEdId_reg(rm); - } else { - prev.next = new Inst3.ImulGdEdId_mem(rm); - } - return RESULT_HANDLED; + ops[0x269] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.ImulGdEdId_reg(rm); + } else { + prev.next = new Inst3.ImulGdEdId_mem(rm); } + return RESULT_HANDLED; }; /* PUSH Ib */ - ops[0x26a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.PushIb(); - return RESULT_HANDLED; - } + ops[0x26a] = prev -> { + prev.next = new Inst3.PushIb(); + return RESULT_HANDLED; }; /* IMUL Gd,Ed,Ib */ - ops[0x26b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.ImulGdEdIb_reg(rm); - } else { - prev.next = new Inst3.ImulGdEdIb_mem(rm); - } - return RESULT_HANDLED; + ops[0x26b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.ImulGdEdIb_reg(rm); + } else { + prev.next = new Inst3.ImulGdEdIb_mem(rm); } + return RESULT_HANDLED; }; /* INSD */ - ops[0x26d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoStringException(StringOp.R_INSD, 4); - return RESULT_HANDLED; - } + ops[0x26d] = prev -> { + prev.next = new Inst1.DoStringException(StringOp.R_INSD, 4); + return RESULT_HANDLED; }; /* OUTSD */ - ops[0x26f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoStringException(StringOp.R_OUTSD, 4); - return RESULT_HANDLED; - } + ops[0x26f] = prev -> { + prev.next = new Inst1.DoStringException(StringOp.R_OUTSD, 4); + return RESULT_HANDLED; }; /* JO */ - ops[0x270] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_o(); - return RESULT_JUMP; - } + ops[0x270] = prev -> { + prev.next = new Inst3.JumpCond32_b_o(); + return RESULT_JUMP; }; /* JNO */ - ops[0x271] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_no(); - return RESULT_JUMP; - } + ops[0x271] = prev -> { + prev.next = new Inst3.JumpCond32_b_no(); + return RESULT_JUMP; }; /* JB */ - ops[0x272] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_b(); - return RESULT_JUMP; - } + ops[0x272] = prev -> { + prev.next = new Inst3.JumpCond32_b_b(); + return RESULT_JUMP; }; /* JNB */ - ops[0x273] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_nb(); - return RESULT_JUMP; - } + ops[0x273] = prev -> { + prev.next = new Inst3.JumpCond32_b_nb(); + return RESULT_JUMP; }; /* JZ */ - ops[0x274] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_z(); - return RESULT_JUMP; - } + ops[0x274] = prev -> { + prev.next = new Inst3.JumpCond32_b_z(); + return RESULT_JUMP; }; /* JNZ */ - ops[0x275] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_nz(); - return RESULT_JUMP; - } + ops[0x275] = prev -> { + prev.next = new Inst3.JumpCond32_b_nz(); + return RESULT_JUMP; }; /* JBE */ - ops[0x276] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_be(); - return RESULT_JUMP; - } + ops[0x276] = prev -> { + prev.next = new Inst3.JumpCond32_b_be(); + return RESULT_JUMP; }; /* JNBE */ - ops[0x277] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_nbe(); - return RESULT_JUMP; - } + ops[0x277] = prev -> { + prev.next = new Inst3.JumpCond32_b_nbe(); + return RESULT_JUMP; }; /* JS */ - ops[0x278] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_s(); - return RESULT_JUMP; - } + ops[0x278] = prev -> { + prev.next = new Inst3.JumpCond32_b_s(); + return RESULT_JUMP; }; /* JNS */ - ops[0x279] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_ns(); - return RESULT_JUMP; - } + ops[0x279] = prev -> { + prev.next = new Inst3.JumpCond32_b_ns(); + return RESULT_JUMP; }; /* JP */ - ops[0x27a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_p(); - return RESULT_JUMP; - } + ops[0x27a] = prev -> { + prev.next = new Inst3.JumpCond32_b_p(); + return RESULT_JUMP; }; /* JNP */ - ops[0x27b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_np(); - return RESULT_JUMP; - } + ops[0x27b] = prev -> { + prev.next = new Inst3.JumpCond32_b_np(); + return RESULT_JUMP; }; /* JL */ - ops[0x27c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_l(); - return RESULT_JUMP; - } + ops[0x27c] = prev -> { + prev.next = new Inst3.JumpCond32_b_l(); + return RESULT_JUMP; }; /* JNL */ - ops[0x27d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_nl(); - return RESULT_JUMP; - } + ops[0x27d] = prev -> { + prev.next = new Inst3.JumpCond32_b_nl(); + return RESULT_JUMP; }; /* JLE */ - ops[0x27e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_le(); - return RESULT_JUMP; - } + ops[0x27e] = prev -> { + prev.next = new Inst3.JumpCond32_b_le(); + return RESULT_JUMP; }; /* JNLE */ - ops[0x27f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JumpCond32_b_nle(); - return RESULT_JUMP; - } + ops[0x27f] = prev -> { + prev.next = new Inst3.JumpCond32_b_nle(); + return RESULT_JUMP; }; /* Grpl Ed,Id */ - ops[0x281] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm>= 0xc0) { - switch (which) { - case 0x00:prev.next = new Inst3.GrplEdId_reg_add(rm, false);break; - case 0x01:prev.next = new Inst3.GrplEdId_reg_or(rm, false);break; - case 0x02:prev.next = new Inst3.GrplEdId_reg_adc(rm, false);break; - case 0x03:prev.next = new Inst3.GrplEdId_reg_sbb(rm, false);break; - case 0x04:prev.next = new Inst3.GrplEdId_reg_and(rm, false);break; - case 0x05:prev.next = new Inst3.GrplEdId_reg_sub(rm, false);break; - case 0x06:prev.next = new Inst3.GrplEdId_reg_xor(rm, false);break; - case 0x07:prev.next = new Inst3.GrplEdId_reg_cmp(rm, false);break; - } - } else { - switch (which) { - case 0x00:prev.next = new Inst3.GrplEdId_mem_add(rm, false);break; - case 0x01:prev.next = new Inst3.GrplEdId_mem_or(rm, false);break; - case 0x02:prev.next = new Inst3.GrplEdId_mem_adc(rm, false);break; - case 0x03:prev.next = new Inst3.GrplEdId_mem_sbb(rm, false);break; - case 0x04:prev.next = new Inst3.GrplEdId_mem_and(rm, false);break; - case 0x05:prev.next = new Inst3.GrplEdId_mem_sub(rm, false);break; - case 0x06:prev.next = new Inst3.GrplEdId_mem_xor(rm, false);break; - case 0x07:prev.next = new Inst3.GrplEdId_mem_cmp(rm, false);break; - } + ops[0x281] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm>= 0xc0) { + switch (which) { + case 0x00:prev.next = new Inst3.GrplEdId_reg_add(rm, false);break; + case 0x01:prev.next = new Inst3.GrplEdId_reg_or(rm, false);break; + case 0x02:prev.next = new Inst3.GrplEdId_reg_adc(rm, false);break; + case 0x03:prev.next = new Inst3.GrplEdId_reg_sbb(rm, false);break; + case 0x04:prev.next = new Inst3.GrplEdId_reg_and(rm, false);break; + case 0x05:prev.next = new Inst3.GrplEdId_reg_sub(rm, false);break; + case 0x06:prev.next = new Inst3.GrplEdId_reg_xor(rm, false);break; + case 0x07:prev.next = new Inst3.GrplEdId_reg_cmp(rm, false);break; + } + } else { + switch (which) { + case 0x00:prev.next = new Inst3.GrplEdId_mem_add(rm, false);break; + case 0x01:prev.next = new Inst3.GrplEdId_mem_or(rm, false);break; + case 0x02:prev.next = new Inst3.GrplEdId_mem_adc(rm, false);break; + case 0x03:prev.next = new Inst3.GrplEdId_mem_sbb(rm, false);break; + case 0x04:prev.next = new Inst3.GrplEdId_mem_and(rm, false);break; + case 0x05:prev.next = new Inst3.GrplEdId_mem_sub(rm, false);break; + case 0x06:prev.next = new Inst3.GrplEdId_mem_xor(rm, false);break; + case 0x07:prev.next = new Inst3.GrplEdId_mem_cmp(rm, false);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* Grpl Ed,Ix */ - ops[0x283] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm>= 0xc0) { - switch (which) { - case 0x00:prev.next = new Inst3.GrplEdId_reg_add(rm, true);break; - case 0x01:prev.next = new Inst3.GrplEdId_reg_or(rm, true);break; - case 0x02:prev.next = new Inst3.GrplEdId_reg_adc(rm, true);break; - case 0x03:prev.next = new Inst3.GrplEdId_reg_sbb(rm, true);break; - case 0x04:prev.next = new Inst3.GrplEdId_reg_and(rm, true);break; - case 0x05:prev.next = new Inst3.GrplEdId_reg_sub(rm, true);break; - case 0x06:prev.next = new Inst3.GrplEdId_reg_xor(rm, true);break; - case 0x07:prev.next = new Inst3.GrplEdId_reg_cmp(rm, true);break; - } - } else { - switch (which) { - case 0x00:prev.next = new Inst3.GrplEdId_mem_add(rm, true);break; - case 0x01:prev.next = new Inst3.GrplEdId_mem_or(rm, true);break; - case 0x02:prev.next = new Inst3.GrplEdId_mem_adc(rm, true);break; - case 0x03:prev.next = new Inst3.GrplEdId_mem_sbb(rm, true);break; - case 0x04:prev.next = new Inst3.GrplEdId_mem_and(rm, true);break; - case 0x05:prev.next = new Inst3.GrplEdId_mem_sub(rm, true);break; - case 0x06:prev.next = new Inst3.GrplEdId_mem_xor(rm, true);break; - case 0x07:prev.next = new Inst3.GrplEdId_mem_cmp(rm, true);break; - } + ops[0x283] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm>= 0xc0) { + switch (which) { + case 0x00:prev.next = new Inst3.GrplEdId_reg_add(rm, true);break; + case 0x01:prev.next = new Inst3.GrplEdId_reg_or(rm, true);break; + case 0x02:prev.next = new Inst3.GrplEdId_reg_adc(rm, true);break; + case 0x03:prev.next = new Inst3.GrplEdId_reg_sbb(rm, true);break; + case 0x04:prev.next = new Inst3.GrplEdId_reg_and(rm, true);break; + case 0x05:prev.next = new Inst3.GrplEdId_reg_sub(rm, true);break; + case 0x06:prev.next = new Inst3.GrplEdId_reg_xor(rm, true);break; + case 0x07:prev.next = new Inst3.GrplEdId_reg_cmp(rm, true);break; + } + } else { + switch (which) { + case 0x00:prev.next = new Inst3.GrplEdId_mem_add(rm, true);break; + case 0x01:prev.next = new Inst3.GrplEdId_mem_or(rm, true);break; + case 0x02:prev.next = new Inst3.GrplEdId_mem_adc(rm, true);break; + case 0x03:prev.next = new Inst3.GrplEdId_mem_sbb(rm, true);break; + case 0x04:prev.next = new Inst3.GrplEdId_mem_and(rm, true);break; + case 0x05:prev.next = new Inst3.GrplEdId_mem_sub(rm, true);break; + case 0x06:prev.next = new Inst3.GrplEdId_mem_xor(rm, true);break; + case 0x07:prev.next = new Inst3.GrplEdId_mem_cmp(rm, true);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* TEST Ed,Gd */ - ops[0x285] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.TestEdGd_reg(rm); - } else { - prev.next = new Inst3.TestEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x285] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.TestEdGd_reg(rm); + } else { + prev.next = new Inst3.TestEdGd_mem(rm); } + return RESULT_HANDLED; }; /* XCHG Ed,Gd */ - ops[0x287] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.XchgEdGd_reg(rm); - } else { - prev.next = new Inst3.XchgEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x287] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.XchgEdGd_reg(rm); + } else { + prev.next = new Inst3.XchgEdGd_mem(rm); } + return RESULT_HANDLED; }; /* MOV Ed,Gd */ - ops[0x289] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.MovEdGd_reg(rm); - } else { - prev.next = new Inst3.MovEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x289] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.MovEdGd_reg(rm); + } else { + prev.next = new Inst3.MovEdGd_mem(rm); } + return RESULT_HANDLED; }; /* MOV Gd,Ed */ - ops[0x28b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.MovGdEd_reg(rm); - } else { - prev.next = new Inst3.MovGdEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x28b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.MovGdEd_reg(rm); + } else { + prev.next = new Inst3.MovGdEd_mem(rm); } + return RESULT_HANDLED; }; /* Mov Ew,Sw */ - ops[0x28c] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* MOV Ew,ES */ - if (rm >= 0xC0) { - prev.next = new Inst3.MovEdEs_reg(rm); - } else { - prev.next = new Inst1.MovEwEs_mem(rm); - } - break; - case 0x01: /* MOV Ew,CS */ - if (rm >= 0xC0) { - prev.next = new Inst3.MovEdCs_reg(rm); - } else { - prev.next = new Inst1.MovEwCs_mem(rm); - } - break; - case 0x02: /* MOV Ew,SS */ - if (rm >= 0xC0) { - prev.next = new Inst3.MovEdSs_reg(rm); - } else { - prev.next = new Inst1.MovEwSs_mem(rm); - } - break; - case 0x03: /* MOV Ew,DS */ - if (rm >= 0xC0) { - prev.next = new Inst3.MovEdDs_reg(rm); - } else { - prev.next = new Inst1.MovEwDs_mem(rm); - } - break; - case 0x04: /* MOV Ew,FS */ - if (rm >= 0xC0) { - prev.next = new Inst3.MovEdFs_reg(rm); - } else { - prev.next = new Inst1.MovEwFs_mem(rm); - } - break; - case 0x05: /* MOV Ew,GS */ - if (rm >= 0xC0) { - prev.next = new Inst3.MovEdGs_reg(rm); - } else { - prev.next = new Inst1.MovEwGs_mem(rm); - } - break; - default: - prev.next = new Inst1.Illegal("CPU:28c:Illegal RM Byte"); - return RESULT_JUMP; + ops[0x28c] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* MOV Ew,ES */ + if (rm >= 0xC0) { + prev.next = new Inst3.MovEdEs_reg(rm); + } else { + prev.next = new Inst1.MovEwEs_mem(rm); + } + break; + case 0x01: /* MOV Ew,CS */ + if (rm >= 0xC0) { + prev.next = new Inst3.MovEdCs_reg(rm); + } else { + prev.next = new Inst1.MovEwCs_mem(rm); + } + break; + case 0x02: /* MOV Ew,SS */ + if (rm >= 0xC0) { + prev.next = new Inst3.MovEdSs_reg(rm); + } else { + prev.next = new Inst1.MovEwSs_mem(rm); + } + break; + case 0x03: /* MOV Ew,DS */ + if (rm >= 0xC0) { + prev.next = new Inst3.MovEdDs_reg(rm); + } else { + prev.next = new Inst1.MovEwDs_mem(rm); + } + break; + case 0x04: /* MOV Ew,FS */ + if (rm >= 0xC0) { + prev.next = new Inst3.MovEdFs_reg(rm); + } else { + prev.next = new Inst1.MovEwFs_mem(rm); + } + break; + case 0x05: /* MOV Ew,GS */ + if (rm >= 0xC0) { + prev.next = new Inst3.MovEdGs_reg(rm); + } else { + prev.next = new Inst1.MovEwGs_mem(rm); } - return RESULT_HANDLED; + break; + default: + prev.next = new Inst1.Illegal("CPU:28c:Illegal RM Byte"); + return RESULT_JUMP; } + return RESULT_HANDLED; }; /* LEA Gd */ - ops[0x28d] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst3.LeaGd_32(rm); - } else { - prev.next = new Inst3.LeaGd_16(rm); - } - return RESULT_HANDLED; + ops[0x28d] = prev -> { + int rm=decode_fetchb(); + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst3.LeaGd_32(rm); + } else { + prev.next = new Inst3.LeaGd_16(rm); } + return RESULT_HANDLED; }; /* POP Ed */ - ops[0x28f] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst3.PopEd_reg(rm); - } else { - prev.next = new Inst3.PopEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x28f] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst3.PopEd_reg(rm); + } else { + prev.next = new Inst3.PopEd_mem(rm); } + return RESULT_HANDLED; }; /* XCHG ECX,EAX */ - ops[0x291] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_ecx); - return RESULT_HANDLED; - } + ops[0x291] = prev -> { + prev.next = new Inst3.XchgEax(reg_ecx); + return RESULT_HANDLED; }; /* XCHG EDX,EAX */ - ops[0x292] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_edx); - return RESULT_HANDLED; - } + ops[0x292] = prev -> { + prev.next = new Inst3.XchgEax(reg_edx); + return RESULT_HANDLED; }; /* XCHG EBX,EAX */ - ops[0x293] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_ebx); - return RESULT_HANDLED; - } + ops[0x293] = prev -> { + prev.next = new Inst3.XchgEax(reg_ebx); + return RESULT_HANDLED; }; /* XCHG ESP,EAX */ - ops[0x294] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_esp); - return RESULT_HANDLED; - } + ops[0x294] = prev -> { + prev.next = new Inst3.XchgEax(reg_esp); + return RESULT_HANDLED; }; /* XCHG EBP,EAX */ - ops[0x295] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_ebp); - return RESULT_HANDLED; - } + ops[0x295] = prev -> { + prev.next = new Inst3.XchgEax(reg_ebp); + return RESULT_HANDLED; }; /* XCHG ESI,EAX */ - ops[0x296] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_esi); - return RESULT_HANDLED; - } + ops[0x296] = prev -> { + prev.next = new Inst3.XchgEax(reg_esi); + return RESULT_HANDLED; }; /* XCHG EDI,EAX */ - ops[0x297] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.XchgEax(reg_edi); - return RESULT_HANDLED; - } + ops[0x297] = prev -> { + prev.next = new Inst3.XchgEax(reg_edi); + return RESULT_HANDLED; }; /* CWDE */ - ops[0x298] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Cwde(); - return RESULT_HANDLED; - } + ops[0x298] = prev -> { + prev.next = new Inst3.Cwde(); + return RESULT_HANDLED; }; /* CDQ */ - ops[0x299] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Cdq(); - return RESULT_HANDLED; - } + ops[0x299] = prev -> { + prev.next = new Inst3.Cdq(); + return RESULT_HANDLED; }; /* CALL FAR Ad */ - ops[0x29a] = new Decode() { - final public int call(Op prev) { - int newip= decode_fetchd(); - int newcs=decode_fetchw(); - prev.next = new Inst3.CallFarAp(newcs, newip); - return RESULT_JUMP; - } + ops[0x29a] = prev -> { + int newip= decode_fetchd(); + int newcs=decode_fetchw(); + prev.next = new Inst3.CallFarAp(newcs, newip); + return RESULT_JUMP; }; /* PUSHFD */ - ops[0x29c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Pushfd(); - return RESULT_HANDLED; - } + ops[0x29c] = prev -> { + prev.next = new Inst3.Pushfd(); + return RESULT_HANDLED; }; /* POPFD */ - ops[0x29d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Popfd(); - return RESULT_HANDLED; - } + ops[0x29d] = prev -> { + prev.next = new Inst3.Popfd(); + return RESULT_HANDLED; }; /* MOV EAX,Od */ - ops[0x2a1] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovEaxOd(); - return RESULT_HANDLED; - } + ops[0x2a1] = prev -> { + prev.next = new Inst3.MovEaxOd(); + return RESULT_HANDLED; }; /* MOV Od,EAX */ - ops[0x2a3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovOdEax(); - return RESULT_HANDLED; - } + ops[0x2a3] = prev -> { + prev.next = new Inst3.MovOdEax(); + return RESULT_HANDLED; }; /* MOVSD */ - ops[0x2a5] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)==0) { - if ((prefixes & Core.PREFIX_REP)==0) { - prev.next = new Strings.Movsd16(); - } else { - prev.next = new Strings.Movsd16r(); - } + ops[0x2a5] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)==0) { + if ((prefixes & Core.PREFIX_REP)==0) { + prev.next = new Strings.Movsd16(); + } else { + prev.next = new Strings.Movsd16r(); + } + } else { + if ((prefixes & Core.PREFIX_REP)==0) { + prev.next = new Strings.Movsd32(); } else { - if ((prefixes & Core.PREFIX_REP)==0) { - prev.next = new Strings.Movsd32(); - } else { - prev.next = new Strings.Movsd32r(); - } + prev.next = new Strings.Movsd32r(); } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* CMPSD */ - ops[0x2a7] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_CMPSD); - return RESULT_HANDLED; - } + ops[0x2a7] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_CMPSD); + return RESULT_HANDLED; }; /* TEST EAX,Id */ - ops[0x2a9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.TestEaxId(); - return RESULT_HANDLED; - } + ops[0x2a9] = prev -> { + prev.next = new Inst3.TestEaxId(); + return RESULT_HANDLED; }; /* STOSD */ - ops[0x2ab] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_STOSD); - return RESULT_HANDLED; - } + ops[0x2ab] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_STOSD); + return RESULT_HANDLED; }; /* LODSD */ - ops[0x2ad] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_LODSD); - return RESULT_HANDLED; - } + ops[0x2ad] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_LODSD); + return RESULT_HANDLED; }; /* SCASD */ - ops[0x2af] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_SCASD); - return RESULT_HANDLED; - } + ops[0x2af] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_SCASD); + return RESULT_HANDLED; }; /* MOV EAX,Id */ - ops[0x2b8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_eax); - return RESULT_HANDLED; - } + ops[0x2b8] = prev -> { + prev.next = new Inst3.MovId(reg_eax); + return RESULT_HANDLED; }; /* MOV ECX,Id */ - ops[0x2b9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_ecx); - return RESULT_HANDLED; - } + ops[0x2b9] = prev -> { + prev.next = new Inst3.MovId(reg_ecx); + return RESULT_HANDLED; }; /* MOV EDX,Iw */ - ops[0x2ba] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_edx); - return RESULT_HANDLED; - } + ops[0x2ba] = prev -> { + prev.next = new Inst3.MovId(reg_edx); + return RESULT_HANDLED; }; /* MOV EBX,Id */ - ops[0x2bb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_ebx); - return RESULT_HANDLED; - } + ops[0x2bb] = prev -> { + prev.next = new Inst3.MovId(reg_ebx); + return RESULT_HANDLED; }; /* MOV ESP,Id */ - ops[0x2bc] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_esp); - return RESULT_HANDLED; - } + ops[0x2bc] = prev -> { + prev.next = new Inst3.MovId(reg_esp); + return RESULT_HANDLED; }; /* MOV EBP,Id */ - ops[0x2bd] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_ebp); - return RESULT_HANDLED; - } + ops[0x2bd] = prev -> { + prev.next = new Inst3.MovId(reg_ebp); + return RESULT_HANDLED; }; /* MOV ESI,Id */ - ops[0x2be] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_esi); - return RESULT_HANDLED; - } + ops[0x2be] = prev -> { + prev.next = new Inst3.MovId(reg_esi); + return RESULT_HANDLED; }; /* MOV EDI,Id */ - ops[0x2bf] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.MovId(reg_edi); - return RESULT_HANDLED; - } + ops[0x2bf] = prev -> { + prev.next = new Inst3.MovId(reg_edi); + return RESULT_HANDLED; }; /* GRP2 Ed,Ib */ - ops[0x2c1] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - int val = decode_fetchb() & 0x1f; - if (val==0) { - prev.next = new Inst1.Noop(); - return RESULT_HANDLED; - } - switch (which) { - case 0x00:prev.next = new Grp2.ROLD_reg(rm, val);break; - case 0x01:prev.next = new Grp2.RORD_reg(rm, val);break; - case 0x02:prev.next = new Grp2.RCLD_reg(rm, val);break; - case 0x03:prev.next = new Grp2.RCRD_reg(rm, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLD_reg(rm, val);break; - case 0x05:prev.next = new Grp2.SHRD_reg(rm, val);break; - case 0x07:prev.next = new Grp2.SARD_reg(rm, val);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - int val = decode_fetchb() & 0x1f; - if (val==0) { - prev.next = new Inst1.Noop(); - return RESULT_HANDLED; - } - switch (which) { - case 0x00:prev.next = new Grp2.ROLD_mem(get_eaa, val);break; - case 0x01:prev.next = new Grp2.RORD_mem(get_eaa, val);break; - case 0x02:prev.next = new Grp2.RCLD_mem(get_eaa, val);break; - case 0x03:prev.next = new Grp2.RCRD_mem(get_eaa, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLD_mem(get_eaa, val);break; - case 0x05:prev.next = new Grp2.SHRD_mem(get_eaa, val);break; - case 0x07:prev.next = new Grp2.SARD_mem(get_eaa, val);break; - } + ops[0x2c1] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + int val = decode_fetchb() & 0x1f; + if (val==0) { + prev.next = new Inst1.Noop(); + return RESULT_HANDLED; + } + switch (which) { + case 0x00:prev.next = new Grp2.ROLD_reg(rm, val);break; + case 0x01:prev.next = new Grp2.RORD_reg(rm, val);break; + case 0x02:prev.next = new Grp2.RCLD_reg(rm, val);break; + case 0x03:prev.next = new Grp2.RCRD_reg(rm, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLD_reg(rm, val);break; + case 0x05:prev.next = new Grp2.SHRD_reg(rm, val);break; + case 0x07:prev.next = new Grp2.SARD_reg(rm, val);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + int val = decode_fetchb() & 0x1f; + if (val==0) { + prev.next = new Inst1.Noop(); + return RESULT_HANDLED; + } + switch (which) { + case 0x00:prev.next = new Grp2.ROLD_mem(get_eaa, val);break; + case 0x01:prev.next = new Grp2.RORD_mem(get_eaa, val);break; + case 0x02:prev.next = new Grp2.RCLD_mem(get_eaa, val);break; + case 0x03:prev.next = new Grp2.RCRD_mem(get_eaa, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLD_mem(get_eaa, val);break; + case 0x05:prev.next = new Grp2.SHRD_mem(get_eaa, val);break; + case 0x07:prev.next = new Grp2.SARD_mem(get_eaa, val);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* RETN Iw */ - ops[0x2c2] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Retn32Iw(); - return RESULT_JUMP; - } + ops[0x2c2] = prev -> { + prev.next = new Inst3.Retn32Iw(); + return RESULT_JUMP; }; /* RETN */ - ops[0x2c3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Retn32(); - return RESULT_JUMP; - } + ops[0x2c3] = prev -> { + prev.next = new Inst3.Retn32(); + return RESULT_JUMP; }; /* LES */ - ops[0x2c4] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst3.Les32(rm); - } - return RESULT_HANDLED; + ops[0x2c4] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst3.Les32(rm); } + return RESULT_HANDLED; }; /* LDS */ - ops[0x2c5] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst3.Lds32(rm); - } - return RESULT_HANDLED; + ops[0x2c5] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst3.Lds32(rm); } + return RESULT_HANDLED; }; /* MOV Ed,Id */ - ops[0x2c7] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst3.MovId(Mod.ed(rm)); - } else { - prev.next = new Inst3.MovId_mem(rm); - } - return RESULT_HANDLED; + ops[0x2c7] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst3.MovId(Mod.ed(rm)); + } else { + prev.next = new Inst3.MovId_mem(rm); } + return RESULT_HANDLED; }; /* ENTER Iw,Ib */ - ops[0x2c8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Enter32IwIb(); - return RESULT_HANDLED; - } + ops[0x2c8] = prev -> { + prev.next = new Inst3.Enter32IwIb(); + return RESULT_HANDLED; }; /* LEAVE */ - ops[0x2c9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Leave32(); - return RESULT_HANDLED; - } + ops[0x2c9] = prev -> { + prev.next = new Inst3.Leave32(); + return RESULT_HANDLED; }; /* RETF Iw */ - ops[0x2ca] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Retf32Iw(); - return RESULT_JUMP; - } + ops[0x2ca] = prev -> { + prev.next = new Inst3.Retf32Iw(); + return RESULT_JUMP; }; /* RETF */ - ops[0x2cb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Retf32(); - return RESULT_JUMP; - } + ops[0x2cb] = prev -> { + prev.next = new Inst3.Retf32(); + return RESULT_JUMP; }; /* IRET */ - ops[0x2cf] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.IRet32(); - return RESULT_JUMP; - } + ops[0x2cf] = prev -> { + prev.next = new Inst3.IRet32(); + return RESULT_JUMP; }; /* GRP2 Ed,1 */ - ops[0x2d1] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - int val = 1; - if (rm >= 0xc0) { - switch (which) { - case 0x00:prev.next = new Grp2.ROLD_reg(rm, val);break; - case 0x01:prev.next = new Grp2.RORD_reg(rm, val);break; - case 0x02:prev.next = new Grp2.RCLD_reg(rm, val);break; - case 0x03:prev.next = new Grp2.RCRD_reg(rm, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLD_reg(rm, val);break; - case 0x05:prev.next = new Grp2.SHRD_reg(rm, val);break; - case 0x07:prev.next = new Grp2.SARD_reg(rm, val);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - switch (which) { - case 0x00:prev.next = new Grp2.ROLD_mem(get_eaa, val);break; - case 0x01:prev.next = new Grp2.RORD_mem(get_eaa, val);break; - case 0x02:prev.next = new Grp2.RCLD_mem(get_eaa, val);break; - case 0x03:prev.next = new Grp2.RCRD_mem(get_eaa, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLD_mem(get_eaa, val);break; - case 0x05:prev.next = new Grp2.SHRD_mem(get_eaa, val);break; - case 0x07:prev.next = new Grp2.SARD_mem(get_eaa, val);break; - } + ops[0x2d1] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + int val = 1; + if (rm >= 0xc0) { + switch (which) { + case 0x00:prev.next = new Grp2.ROLD_reg(rm, val);break; + case 0x01:prev.next = new Grp2.RORD_reg(rm, val);break; + case 0x02:prev.next = new Grp2.RCLD_reg(rm, val);break; + case 0x03:prev.next = new Grp2.RCRD_reg(rm, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLD_reg(rm, val);break; + case 0x05:prev.next = new Grp2.SHRD_reg(rm, val);break; + case 0x07:prev.next = new Grp2.SARD_reg(rm, val);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + switch (which) { + case 0x00:prev.next = new Grp2.ROLD_mem(get_eaa, val);break; + case 0x01:prev.next = new Grp2.RORD_mem(get_eaa, val);break; + case 0x02:prev.next = new Grp2.RCLD_mem(get_eaa, val);break; + case 0x03:prev.next = new Grp2.RCRD_mem(get_eaa, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLD_mem(get_eaa, val);break; + case 0x05:prev.next = new Grp2.SHRD_mem(get_eaa, val);break; + case 0x07:prev.next = new Grp2.SARD_mem(get_eaa, val);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* GRP2 Ed,CL */ - ops[0x2d3] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - switch (which) { - case 0x00:prev.next = new Grp2.ROLD_reg_cl(rm);break; - case 0x01:prev.next = new Grp2.RORD_reg_cl(rm);break; - case 0x02:prev.next = new Grp2.RCLD_reg_cl(rm);break; - case 0x03:prev.next = new Grp2.RCRD_reg_cl(rm);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLD_reg_cl(rm);break; - case 0x05:prev.next = new Grp2.SHRD_reg_cl(rm);break; - case 0x07:prev.next = new Grp2.SARD_reg_cl(rm);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - switch (which) { - case 0x00:prev.next = new Grp2.ROLD_mem_cl(get_eaa);break; - case 0x01:prev.next = new Grp2.RORD_mem_cl(get_eaa);break; - case 0x02:prev.next = new Grp2.RCLD_mem_cl(get_eaa);break; - case 0x03:prev.next = new Grp2.RCRD_mem_cl(get_eaa);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLD_mem_cl(get_eaa);break; - case 0x05:prev.next = new Grp2.SHRD_mem_cl(get_eaa);break; - case 0x07:prev.next = new Grp2.SARD_mem_cl(get_eaa);break; - } + ops[0x2d3] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + switch (which) { + case 0x00:prev.next = new Grp2.ROLD_reg_cl(rm);break; + case 0x01:prev.next = new Grp2.RORD_reg_cl(rm);break; + case 0x02:prev.next = new Grp2.RCLD_reg_cl(rm);break; + case 0x03:prev.next = new Grp2.RCRD_reg_cl(rm);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLD_reg_cl(rm);break; + case 0x05:prev.next = new Grp2.SHRD_reg_cl(rm);break; + case 0x07:prev.next = new Grp2.SARD_reg_cl(rm);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + switch (which) { + case 0x00:prev.next = new Grp2.ROLD_mem_cl(get_eaa);break; + case 0x01:prev.next = new Grp2.RORD_mem_cl(get_eaa);break; + case 0x02:prev.next = new Grp2.RCLD_mem_cl(get_eaa);break; + case 0x03:prev.next = new Grp2.RCRD_mem_cl(get_eaa);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLD_mem_cl(get_eaa);break; + case 0x05:prev.next = new Grp2.SHRD_mem_cl(get_eaa);break; + case 0x07:prev.next = new Grp2.SARD_mem_cl(get_eaa);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* LOOPNZ */ - ops[0x2e0] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst3.Loopnz32(); - } else { - prev.next = new Inst3.Loopnz16(); - } - return RESULT_JUMP; + ops[0x2e0] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst3.Loopnz32(); + } else { + prev.next = new Inst3.Loopnz16(); } + return RESULT_JUMP; }; /* LOOPZ */ - ops[0x2e1] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst3.Loopz32(); - } else { - prev.next = new Inst3.Loopz16(); - } - return RESULT_JUMP; + ops[0x2e1] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst3.Loopz32(); + } else { + prev.next = new Inst3.Loopz16(); } + return RESULT_JUMP; }; /* LOOP */ - ops[0x2e2] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst3.Loop32(); - } else { - prev.next = new Inst3.Loop16(); - } - return RESULT_JUMP; + ops[0x2e2] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst3.Loop32(); + } else { + prev.next = new Inst3.Loop16(); } + return RESULT_JUMP; }; /* JCXZ */ - ops[0x2e3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.Jcxz(AddrMaskTable1[prefixes & Core.PREFIX_ADDR]); - return RESULT_JUMP; - } + ops[0x2e3] = prev -> { + prev.next = new Inst3.Jcxz(AddrMaskTable1[prefixes & Core.PREFIX_ADDR]); + return RESULT_JUMP; }; /* IN EAX,Ib */ - ops[0x2e5] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.InEaxIb(); - return RESULT_HANDLED; - } + ops[0x2e5] = prev -> { + prev.next = new Inst3.InEaxIb(); + return RESULT_HANDLED; }; /* OUT Ib,EAX */ - ops[0x2e7] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.OutEaxIb(); - return RESULT_HANDLED; - } + ops[0x2e7] = prev -> { + prev.next = new Inst3.OutEaxIb(); + return RESULT_HANDLED; }; /* CALL Jd */ - ops[0x2e8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.CallJd(); - return RESULT_JUMP; - } + ops[0x2e8] = prev -> { + prev.next = new Inst3.CallJd(); + return RESULT_JUMP; }; /* JMP Jd */ - ops[0x2e9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JmpJd(); - return RESULT_JUMP; - } + ops[0x2e9] = prev -> { + prev.next = new Inst3.JmpJd(); + return RESULT_JUMP; }; /* JMP Ad */ - ops[0x2ea] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JmpAd(); - return RESULT_JUMP; - } + ops[0x2ea] = prev -> { + prev.next = new Inst3.JmpAd(); + return RESULT_JUMP; }; /* JMP Jb */ - ops[0x2eb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.JmpJb(); - return RESULT_JUMP; - } + ops[0x2eb] = prev -> { + prev.next = new Inst3.JmpJb(); + return RESULT_JUMP; }; /* IN EAX,DX */ - ops[0x2ed] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.InEaxDx(); - return RESULT_HANDLED; - } + ops[0x2ed] = prev -> { + prev.next = new Inst3.InEaxDx(); + return RESULT_HANDLED; }; /* OUT DX,EAX */ - ops[0x2ef] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst3.OutEaxDx(); - return RESULT_HANDLED; - } + ops[0x2ef] = prev -> { + prev.next = new Inst3.OutEaxDx(); + return RESULT_HANDLED; }; /* GRP3 Ed(,Id) */ - ops[0x2f7] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* TEST Ed,Id */ - case 0x01: /* TEST Ed,Id Undocumented*/ - if (rm >= 0xc0 ) { - prev.next = new Grp3.Testd_reg(rm); - } - else { - prev.next = new Grp3.Testd_mem(rm); - } - break; - case 0x02: /* NOT Ed */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.NotEd_reg(rm); - } else { - prev.next = new Grp3.NotEd_mem(rm); - } - break; - case 0x03: /* NEG Ed */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.NegEd_reg(rm); - } else { - prev.next = new Grp3.NegEd_mem(rm); - } - break; - case 0x04: /* MUL EAX,Ed */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.MulAxEd_reg(rm); - } else { - prev.next = new Grp3.MulAxEd_mem(rm); - } - break; - case 0x05: /* IMUL EAX,Ed */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.IMulAxEd_reg(rm); - } else { - prev.next = new Grp3.IMulAxEd_mem(rm); - } - break; - case 0x06: /* DIV Ed */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.DivAxEd_reg(rm); - } else { - prev.next = new Grp3.DivAxEd_mem(rm); - } - break; - case 0x07: /* IDIV Ed */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.IDivAxEd_reg(rm); - } else { - prev.next = new Grp3.IDivAxEd_mem(rm); - } - break; + ops[0x2f7] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* TEST Ed,Id */ + case 0x01: /* TEST Ed,Id Undocumented*/ + if (rm >= 0xc0 ) { + prev.next = new Grp3.Testd_reg(rm); + } + else { + prev.next = new Grp3.Testd_mem(rm); + } + break; + case 0x02: /* NOT Ed */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.NotEd_reg(rm); + } else { + prev.next = new Grp3.NotEd_mem(rm); + } + break; + case 0x03: /* NEG Ed */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.NegEd_reg(rm); + } else { + prev.next = new Grp3.NegEd_mem(rm); } - return RESULT_HANDLED; + break; + case 0x04: /* MUL EAX,Ed */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.MulAxEd_reg(rm); + } else { + prev.next = new Grp3.MulAxEd_mem(rm); + } + break; + case 0x05: /* IMUL EAX,Ed */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.IMulAxEd_reg(rm); + } else { + prev.next = new Grp3.IMulAxEd_mem(rm); + } + break; + case 0x06: /* DIV Ed */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.DivAxEd_reg(rm); + } else { + prev.next = new Grp3.DivAxEd_mem(rm); + } + break; + case 0x07: /* IDIV Ed */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.IDivAxEd_reg(rm); + } else { + prev.next = new Grp3.IDivAxEd_mem(rm); + } + break; } + return RESULT_HANDLED; }; /* GRP 5 Ed */ - ops[0x2ff] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* INC Ed */ - if (rm >= 0xc0 ) { - prev.next = new Inst3.Incd_reg(Mod.ed(rm)); - } else { - prev.next = new Inst3.Incd_mem(rm); - } - break; - case 0x01: /* DEC Ed */ - if (rm >= 0xc0 ) { - prev.next = new Inst3.Decd_reg(Mod.ed(rm)); - } else { - prev.next = new Inst3.Decd_mem(rm); - } - break; - case 0x02: /* CALL NEAR Ed */ - if (rm >= 0xc0 ) { - prev.next = new Inst3.CallNearEd_reg(rm); - } else { - prev.next = new Inst3.CallNearEd_mem(rm); - } - return RESULT_JUMP; - case 0x03: /* CALL FAR Ed */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst3.CallFarEd_mem(rm); - } - return RESULT_JUMP; - case 0x04: /* JMP NEAR Ed */ - if (rm >= 0xc0 ) { - prev.next = new Inst3.JmpNearEd_reg(rm); - } else { - prev.next = new Inst3.JmpNearEd_mem(rm); - } - return RESULT_JUMP; - case 0x05: /* JMP FAR Ed */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst3.JmpFarEd_mem(rm); - } - return RESULT_JUMP; - case 0x06: /* Push Ed */ - if (rm >= 0xc0) { - prev.next = new Inst3.PushEd_reg(rm); - } else { - prev.next = new Inst3.PushEd_mem(rm); - } - break; - default: - if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"CPU:66:GRP5:Illegal call "+Integer.toString(which,16)); + ops[0x2ff] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* INC Ed */ + if (rm >= 0xc0 ) { + prev.next = new Inst3.Incd_reg(Mod.ed(rm)); + } else { + prev.next = new Inst3.Incd_mem(rm); + } + break; + case 0x01: /* DEC Ed */ + if (rm >= 0xc0 ) { + prev.next = new Inst3.Decd_reg(Mod.ed(rm)); + } else { + prev.next = new Inst3.Decd_mem(rm); + } + break; + case 0x02: /* CALL NEAR Ed */ + if (rm >= 0xc0 ) { + prev.next = new Inst3.CallNearEd_reg(rm); + } else { + prev.next = new Inst3.CallNearEd_mem(rm); + } + return RESULT_JUMP; + case 0x03: /* CALL FAR Ed */ + if (rm >= 0xc0 ) { prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; + } else { + prev.next = new Inst3.CallFarEd_mem(rm); } - return RESULT_HANDLED; + return RESULT_JUMP; + case 0x04: /* JMP NEAR Ed */ + if (rm >= 0xc0 ) { + prev.next = new Inst3.JmpNearEd_reg(rm); + } else { + prev.next = new Inst3.JmpNearEd_mem(rm); + } + return RESULT_JUMP; + case 0x05: /* JMP FAR Ed */ + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst3.JmpFarEd_mem(rm); + } + return RESULT_JUMP; + case 0x06: /* Push Ed */ + if (rm >= 0xc0) { + prev.next = new Inst3.PushEd_reg(rm); + } else { + prev.next = new Inst3.PushEd_mem(rm); + } + break; + default: + if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"CPU:66:GRP5:Illegal call "+Integer.toString(which,16)); + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; } + return RESULT_HANDLED; }; } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66_0f.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66_0f.java index 24c306ba..f7a297a1 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66_0f.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_66_0f.java @@ -8,997 +8,853 @@ static public void init(Decode[] ops) { // :TODO: double check that 0x300 is a copy of 0x100 ops[0x300] = ops[0x100]; /* Group 7 Ed */ - ops[0x301] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - int which=(rm>>3)&7; - if (rm < 0xc0) { - switch (which) { - case 0x00: /* SGDT */ - prev.next = new Inst2.Sgdt_mem(rm); - break; - case 0x01: /* SIDT */ - prev.next = new Inst2.Sidt_mem(rm); - break; - case 0x02: /* LGDT */ - prev.next = new Inst4.Lgdt_mem(rm); - break; - case 0x03: /* LIDT */ - prev.next = new Inst4.Lidt_mem(rm); - break; - case 0x04: /* SMSW */ - prev.next = new Inst2.Smsw_mem(rm); - break; - case 0x06: /* LMSW */ - prev.next = new Inst2.Lmsw_mem(rm); - break; - case 0x07: /* INVLPG */ - prev.next = new Inst2.Invlpg(); - break; - } - } else { - switch (which) { - case 0x02: /* LGDT */ - prev.next = new Inst2.Lgdt_reg(); - break; - case 0x03: /* LIDT */ - prev.next = new Inst2.Lidt_reg(); - break; - case 0x04: /* SMSW */ - prev.next = new Inst4.Smsw_reg(rm); - break; - case 0x06: /* LMSW */ - prev.next = new Inst4.Lmsw_reg(rm); - break; - default: - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } + ops[0x301] = prev -> { + int rm = decode_fetchb(); + int which=(rm>>3)&7; + if (rm < 0xc0) { + switch (which) { + case 0x00: /* SGDT */ + prev.next = new Inst2.Sgdt_mem(rm); + break; + case 0x01: /* SIDT */ + prev.next = new Inst2.Sidt_mem(rm); + break; + case 0x02: /* LGDT */ + prev.next = new Inst4.Lgdt_mem(rm); + break; + case 0x03: /* LIDT */ + prev.next = new Inst4.Lidt_mem(rm); + break; + case 0x04: /* SMSW */ + prev.next = new Inst2.Smsw_mem(rm); + break; + case 0x06: /* LMSW */ + prev.next = new Inst2.Lmsw_mem(rm); + break; + case 0x07: /* INVLPG */ + prev.next = new Inst2.Invlpg(); + break; + } + } else { + switch (which) { + case 0x02: /* LGDT */ + prev.next = new Inst2.Lgdt_reg(); + break; + case 0x03: /* LIDT */ + prev.next = new Inst2.Lidt_reg(); + break; + case 0x04: /* SMSW */ + prev.next = new Inst4.Smsw_reg(rm); + break; + case 0x06: /* LMSW */ + prev.next = new Inst4.Lmsw_reg(rm); + break; + default: + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* LAR Gd,Ed */ - ops[0x302] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst4.LarGdEd_reg(rm); - } else { - prev.next = new Inst4.LarGdEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x302] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.LarGdEd_reg(rm); + } else { + prev.next = new Inst4.LarGdEd_mem(rm); } + return RESULT_HANDLED; }; /* LSL Gd,Ew */ - ops[0x303] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst4.LslGdEd_reg(rm); - } else { - prev.next = new Inst4.LslGdEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x303] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.LslGdEd_reg(rm); + } else { + prev.next = new Inst4.LslGdEd_mem(rm); } + return RESULT_HANDLED; }; /* WRMSR */ - ops[0x330] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.WriteMSR(); - return RESULT_HANDLED; - } + ops[0x330] = prev -> { + prev.next = new Inst4.WriteMSR(); + return RESULT_HANDLED; }; /* RDMSR */ - ops[0x332] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.ReadMSR(); - return RESULT_HANDLED; - } + ops[0x332] = prev -> { + prev.next = new Inst4.ReadMSR(); + return RESULT_HANDLED; }; /* CMOVO */ - ops[0x340] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_o_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_o_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_o_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_o_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNO */ - ops[0x341] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_no_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_no_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_no_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_no_mem(rm); } + return RESULT_HANDLED; }; /* CMOVB */ - ops[0x342] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_b_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_b_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_b_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_b_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNB */ - ops[0x343] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_nb_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_nb_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_nb_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_nb_mem(rm); } + return RESULT_HANDLED; }; /* CMOVZ */ - ops[0x344] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_z_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_z_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_z_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_z_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNZ */ - ops[0x345] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_nz_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_nz_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_nz_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_nz_mem(rm); } + return RESULT_HANDLED; }; /* CMOVBE */ - ops[0x346] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_be_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_be_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_be_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_be_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNBE */ - ops[0x347] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_nbe_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_nbe_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_nbe_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_nbe_mem(rm); } + return RESULT_HANDLED; }; /* CMOVS */ - ops[0x348] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_s_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_s_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_s_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_s_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNS */ - ops[0x349] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_ns_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_ns_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_ns_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_ns_mem(rm); } + return RESULT_HANDLED; }; /* CMOVP */ - ops[0x34a] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_p_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_p_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_p_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_p_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNP */ - ops[0x34b] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_np_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_np_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_np_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_np_mem(rm); } + return RESULT_HANDLED; }; /* CMOVL */ - ops[0x34c] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_l_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_l_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_l_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_l_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNL */ - ops[0x34d] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_nl_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_nl_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_nl_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_nl_mem(rm); } + return RESULT_HANDLED; }; /* CMOVLE */ - ops[0x34e] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_le_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_le_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_le_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_le_mem(rm); } + return RESULT_HANDLED; }; /* CMOVNLE */ - ops[0x34f] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - prev.next = new Inst4.ConditionalMov_nle_reg(rm); - } else { - prev.next = new Inst4.ConditionalMov_nle_mem(rm); - } - return RESULT_HANDLED; + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst4.ConditionalMov_nle_reg(rm); + } else { + prev.next = new Inst4.ConditionalMov_nle_mem(rm); } + return RESULT_HANDLED; }; /* JO */ - ops[0x380] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_o(); - return RESULT_JUMP; - } + ops[0x380] = prev -> { + prev.next = new Inst4.JumpCond32_d_o(); + return RESULT_JUMP; }; /* JNO */ - ops[0x381] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_no(); - return RESULT_JUMP; - } + ops[0x381] = prev -> { + prev.next = new Inst4.JumpCond32_d_no(); + return RESULT_JUMP; }; /* JB */ - ops[0x382] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_b(); - return RESULT_JUMP; - } + ops[0x382] = prev -> { + prev.next = new Inst4.JumpCond32_d_b(); + return RESULT_JUMP; }; /* JNB */ - ops[0x383] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_nb(); - return RESULT_JUMP; - } + ops[0x383] = prev -> { + prev.next = new Inst4.JumpCond32_d_nb(); + return RESULT_JUMP; }; /* JZ */ - ops[0x384] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_z(); - return RESULT_JUMP; - } + ops[0x384] = prev -> { + prev.next = new Inst4.JumpCond32_d_z(); + return RESULT_JUMP; }; /* JNZ */ - ops[0x385] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_nz(); - return RESULT_JUMP; - } + ops[0x385] = prev -> { + prev.next = new Inst4.JumpCond32_d_nz(); + return RESULT_JUMP; }; /* JBE */ - ops[0x386] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_be(); - return RESULT_JUMP; - } + ops[0x386] = prev -> { + prev.next = new Inst4.JumpCond32_d_be(); + return RESULT_JUMP; }; /* JNBE */ - ops[0x387] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_nbe(); - return RESULT_JUMP; - } + ops[0x387] = prev -> { + prev.next = new Inst4.JumpCond32_d_nbe(); + return RESULT_JUMP; }; /* JS */ - ops[0x388] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_s(); - return RESULT_JUMP; - } + ops[0x388] = prev -> { + prev.next = new Inst4.JumpCond32_d_s(); + return RESULT_JUMP; }; /* JNS */ - ops[0x389] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_ns(); - return RESULT_JUMP; - } + ops[0x389] = prev -> { + prev.next = new Inst4.JumpCond32_d_ns(); + return RESULT_JUMP; }; /* JP */ - ops[0x38a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_p(); - return RESULT_JUMP; - } + ops[0x38a] = prev -> { + prev.next = new Inst4.JumpCond32_d_p(); + return RESULT_JUMP; }; /* JNP */ - ops[0x38b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_np(); - return RESULT_JUMP; - } + ops[0x38b] = prev -> { + prev.next = new Inst4.JumpCond32_d_np(); + return RESULT_JUMP; }; /* JL */ - ops[0x38c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_l(); - return RESULT_JUMP; - } + ops[0x38c] = prev -> { + prev.next = new Inst4.JumpCond32_d_l(); + return RESULT_JUMP; }; /* JNL */ - ops[0x38d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_nl(); - return RESULT_JUMP; - } + ops[0x38d] = prev -> { + prev.next = new Inst4.JumpCond32_d_nl(); + return RESULT_JUMP; }; /* JLE */ - ops[0x38e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_le(); - return RESULT_JUMP; - } + ops[0x38e] = prev -> { + prev.next = new Inst4.JumpCond32_d_le(); + return RESULT_JUMP; }; /* JNLE */ - ops[0x38f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.JumpCond32_d_nle(); - return RESULT_JUMP; - } + ops[0x38f] = prev -> { + prev.next = new Inst4.JumpCond32_d_nle(); + return RESULT_JUMP; }; /* PUSH FS */ - ops[0x3a0] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.PushFS(); - return RESULT_HANDLED; - } + ops[0x3a0] = prev -> { + prev.next = new Inst4.PushFS(); + return RESULT_HANDLED; }; /* POP FS */ - ops[0x3a1] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.PopFS(); - return RESULT_HANDLED; - } + ops[0x3a1] = prev -> { + prev.next = new Inst4.PopFS(); + return RESULT_HANDLED; }; /* BT Ed,Gd */ - ops[0x3a3] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.BtEdGd_reg(rm); - } else { - prev.next = new Inst4.BtEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3a3] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.BtEdGd_reg(rm); + } else { + prev.next = new Inst4.BtEdGd_mem(rm); } + return RESULT_HANDLED; }; /* SHLD Ed,Gd,Ib */ - ops[0x3a4] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - Inst4.ShldEdGdIb_reg tmp = new Inst4.ShldEdGdIb_reg(rm); - if (tmp.op3==0) - prev.next = new Inst1.Noop(); - else - prev.next = tmp; - } else { - Inst4.ShldEdGdIb_mem tmp = new Inst4.ShldEdGdIb_mem(rm); - if (tmp.op3==0) - prev.next = new Inst1.Noop(); - else - prev.next = tmp; - } - return RESULT_HANDLED; - } + ops[0x3a4] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + Inst4.ShldEdGdIb_reg tmp = new Inst4.ShldEdGdIb_reg(rm); + if (tmp.op3==0) + prev.next = new Inst1.Noop(); + else + prev.next = tmp; + } else { + Inst4.ShldEdGdIb_mem tmp = new Inst4.ShldEdGdIb_mem(rm); + if (tmp.op3==0) + prev.next = new Inst1.Noop(); + else + prev.next = tmp; + } + return RESULT_HANDLED; }; /* SHLD Ed,Gd,CL */ - ops[0x3a5] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.ShldEdGdCl_reg(rm); - } else { - prev.next = new Inst4.ShldEdGdCl_mem(rm); - } - return RESULT_HANDLED; + ops[0x3a5] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.ShldEdGdCl_reg(rm); + } else { + prev.next = new Inst4.ShldEdGdCl_mem(rm); } + return RESULT_HANDLED; }; /* PUSH GS */ - ops[0x3a8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.PushGS(); - return RESULT_HANDLED; - } + ops[0x3a8] = prev -> { + prev.next = new Inst4.PushGS(); + return RESULT_HANDLED; }; /* POP GS */ - ops[0x3a9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst4.PopGS(); - return RESULT_HANDLED; - } + ops[0x3a9] = prev -> { + prev.next = new Inst4.PopGS(); + return RESULT_HANDLED; }; /* BTS Ed,Gd */ - ops[0x3ab] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.BtsEdGd_reg(rm); - } else { - prev.next = new Inst4.BtsEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3ab] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.BtsEdGd_reg(rm); + } else { + prev.next = new Inst4.BtsEdGd_mem(rm); } + return RESULT_HANDLED; }; /* SHRD Ed,Gd,Ib */ - ops[0x3ac] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - Inst4.ShrdEdGdIb_reg tmp = new Inst4.ShrdEdGdIb_reg(rm); - if (tmp.op3 == 0) - prev.next = new Inst1.Noop(); - else - prev.next = tmp; - } else { - Inst4.ShrdEdGdIb_mem tmp = new Inst4.ShrdEdGdIb_mem(rm); - if (tmp.op3 == 0) - prev.next = new Inst1.Noop(); - else - prev.next = tmp; - } - return RESULT_HANDLED; - } + ops[0x3ac] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + Inst4.ShrdEdGdIb_reg tmp = new Inst4.ShrdEdGdIb_reg(rm); + if (tmp.op3 == 0) + prev.next = new Inst1.Noop(); + else + prev.next = tmp; + } else { + Inst4.ShrdEdGdIb_mem tmp = new Inst4.ShrdEdGdIb_mem(rm); + if (tmp.op3 == 0) + prev.next = new Inst1.Noop(); + else + prev.next = tmp; + } + return RESULT_HANDLED; }; /* SHRD Ed,Gd,CL */ - ops[0x3ad] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.ShrdEdGdCl_reg(rm); - } else { - prev.next = new Inst4.ShrdEdGdCl_mem(rm); - } - return RESULT_HANDLED; + ops[0x3ad] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.ShrdEdGdCl_reg(rm); + } else { + prev.next = new Inst4.ShrdEdGdCl_mem(rm); } + return RESULT_HANDLED; }; /* IMUL Gd,Ed */ - ops[0x3af] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.ImulGdEd_reg(rm); - } else { - prev.next = new Inst4.ImulGdEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3af] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.ImulGdEd_reg(rm); + } else { + prev.next = new Inst4.ImulGdEd_mem(rm); } + return RESULT_HANDLED; }; /* CMPXCHG Ed,Gd */ - ops[0x3b1] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; + ops[0x3b1] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.CmpxchgEdGd_reg(rm); } else { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.CmpxchgEdGd_reg(rm); - } else { - prev.next = new Inst4.CmpxchgEdGd_mem(rm); - } - return RESULT_HANDLED; + prev.next = new Inst4.CmpxchgEdGd_mem(rm); } + return RESULT_HANDLED; } }; /* LSS Ed */ - ops[0x3b2] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst4.LssEd(rm); - } - return RESULT_HANDLED; + ops[0x3b2] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst4.LssEd(rm); } + return RESULT_HANDLED; }; /* BTR Ed,Gd */ - ops[0x3b3] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.BtrEdGd_reg(rm); - } else { - prev.next = new Inst4.BtrEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3b3] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.BtrEdGd_reg(rm); + } else { + prev.next = new Inst4.BtrEdGd_mem(rm); } + return RESULT_HANDLED; }; /* LFS Ed */ - ops[0x3b4] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst4.LfsEd(rm); - } - return RESULT_HANDLED; + ops[0x3b4] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst4.LfsEd(rm); } + return RESULT_HANDLED; }; /* LGS Ed */ - ops[0x3b5] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst4.LgsEd(rm); - } - return RESULT_HANDLED; + ops[0x3b5] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst4.LgsEd(rm); } + return RESULT_HANDLED; }; /* MOVZX Gd,Eb */ - ops[0x3b6] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.MovzxGdEb_reg(rm); - } else { - prev.next = new Inst4.MovzxGdEb_mem(rm); - } - return RESULT_HANDLED; + ops[0x3b6] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.MovzxGdEb_reg(rm); + } else { + prev.next = new Inst4.MovzxGdEb_mem(rm); } + return RESULT_HANDLED; }; /* MOVXZ Gd,Ew */ - ops[0x3b7] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.MovzxGdEw_reg(rm); - } else { - prev.next = new Inst4.MovzxGdEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x3b7] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.MovzxGdEw_reg(rm); + } else { + prev.next = new Inst4.MovzxGdEw_mem(rm); } + return RESULT_HANDLED; }; /* GRP8 Ed,Ib */ - ops[0x3ba] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - switch (rm & 0x38) { - case 0x20: /* BT */ - prev.next = new Inst4.BtEdIb_reg(rm); - break; - case 0x28: /* BTS */ - prev.next = new Inst4.BtsEdIb_reg(rm); - break; - case 0x30: /* BTR */ - prev.next = new Inst4.BtrEdIb_reg(rm); - break; - case 0x38: /* BTC */ - prev.next = new Inst4.BtcEdIb_reg(rm); - break; - default: - Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } - } else { - switch (rm & 0x38) { - case 0x20: /* BT */ - prev.next = new Inst4.BtEdIb_mem(rm); - break; - case 0x28: /* BTS */ - prev.next = new Inst4.BtsEdIb_mem(rm); - break; - case 0x30: /* BTR */ - prev.next = new Inst4.BtrEdIb_mem(rm); - break; - case 0x38: /* BTC */ - prev.next = new Inst4.BtcEdIb_mem(rm); - break; - default: - Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } - } - return RESULT_HANDLED; - } + ops[0x3ba] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + switch (rm & 0x38) { + case 0x20: /* BT */ + prev.next = new Inst4.BtEdIb_reg(rm); + break; + case 0x28: /* BTS */ + prev.next = new Inst4.BtsEdIb_reg(rm); + break; + case 0x30: /* BTR */ + prev.next = new Inst4.BtrEdIb_reg(rm); + break; + case 0x38: /* BTC */ + prev.next = new Inst4.BtcEdIb_reg(rm); + break; + default: + Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); + } + } else { + switch (rm & 0x38) { + case 0x20: /* BT */ + prev.next = new Inst4.BtEdIb_mem(rm); + break; + case 0x28: /* BTS */ + prev.next = new Inst4.BtsEdIb_mem(rm); + break; + case 0x30: /* BTR */ + prev.next = new Inst4.BtrEdIb_mem(rm); + break; + case 0x38: /* BTC */ + prev.next = new Inst4.BtcEdIb_mem(rm); + break; + default: + Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); + } + } + return RESULT_HANDLED; }; /* BTC Ed,Gd */ - ops[0x3bb] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.BtcEdGd_reg(rm); - } else { - prev.next = new Inst4.BtcEdGd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3bb] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.BtcEdGd_reg(rm); + } else { + prev.next = new Inst4.BtcEdGd_mem(rm); } + return RESULT_HANDLED; }; /* BSF Gd,Ed */ - ops[0x3bc] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.BsfGdEd_reg(rm); - } else { - prev.next = new Inst4.BsfGdEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3bc] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.BsfGdEd_reg(rm); + } else { + prev.next = new Inst4.BsfGdEd_mem(rm); } + return RESULT_HANDLED; }; /* BSR Gd,Ed */ - ops[0x3bd] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.BsrGdEd_reg(rm); - } else { - prev.next = new Inst4.BsrGdEd_mem(rm); - } - return RESULT_HANDLED; + ops[0x3bd] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.BsrGdEd_reg(rm); + } else { + prev.next = new Inst4.BsrGdEd_mem(rm); } + return RESULT_HANDLED; }; /* MOVSX Gd,Eb */ - ops[0x3be] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.MovsxGdEb_reg(rm); - } else { - prev.next = new Inst4.MovsxGdEb_mem(rm); - } - return RESULT_HANDLED; + ops[0x3be] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.MovsxGdEb_reg(rm); + } else { + prev.next = new Inst4.MovsxGdEb_mem(rm); } + return RESULT_HANDLED; }; /* MOVSX Gd,Ew */ - ops[0x3bf] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.MovsxGdEw_reg(rm); - } else { - prev.next = new Inst4.MovsxGdEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x3bf] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst4.MovsxGdEw_reg(rm); + } else { + prev.next = new Inst4.MovsxGdEw_mem(rm); } + return RESULT_HANDLED; }; /* XADD Gd,Ed */ - ops[0x3c1] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0 ) { + prev.next = new Inst4.XaddGdEd_reg(rm); } else { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst4.XaddGdEd_reg(rm); - } else { - prev.next = new Inst4.XaddGdEd_mem(rm); - } - return RESULT_HANDLED; + prev.next = new Inst4.XaddGdEd_mem(rm); } + return RESULT_HANDLED; } }; - ops[0x3c7] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_PENTIUM) { + ops[0x3c7] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_PENTIUM) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + int rm=decode_fetchb(); + if ((rm & 0x38) == 8) { + prev.next = new Inst4.CompareExchange8B(rm); + } else { prev.next = new Inst1.Illegal(""); return RESULT_JUMP; - } else { - int rm=decode_fetchb(); - switch (rm & 0x38) { - case 8: - prev.next = new Inst4.CompareExchange8B(rm); - break; - default: - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } - return RESULT_HANDLED; } + return RESULT_HANDLED; } }; /* BSWAP EAX */ - ops[0x3c8] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_eax); - return RESULT_HANDLED; - } + ops[0x3c8] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_eax); + return RESULT_HANDLED; } }; /* BSWAP ECX */ - ops[0x3c9] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_ecx); - return RESULT_HANDLED; - } + ops[0x3c9] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_ecx); + return RESULT_HANDLED; } }; /* BSWAP EDX */ - ops[0x3ca] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_edx); - return RESULT_HANDLED; - } + ops[0x3ca] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_edx); + return RESULT_HANDLED; } }; /* BSWAP EBX */ - ops[0x3cb] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_ebx); - return RESULT_HANDLED; - } + ops[0x3cb] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_ebx); + return RESULT_HANDLED; } }; /* BSWAP ESP */ - ops[0x3cc] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_esp); - return RESULT_HANDLED; - } + ops[0x3cc] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_esp); + return RESULT_HANDLED; } }; /* BSWAP EBP */ - ops[0x3cd] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_ebp); - return RESULT_HANDLED; - } + ops[0x3cd] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_ebp); + return RESULT_HANDLED; } }; /* BSWAP ESI */ - ops[0x3ce] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_esi); - return RESULT_HANDLED; - } + ops[0x3ce] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_esi); + return RESULT_HANDLED; } }; /* BSWAP EDI */ - ops[0x3cf] = new Decode() { - final public int call(Op prev) { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { - prev.next = new Inst1.Illegal(""); - return RESULT_JUMP; - } else { - prev.next = new Inst4.Bswapd(reg_edi); - return RESULT_HANDLED; - } + ops[0x3cf] = prev -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_486OLD) { + prev.next = new Inst1.Illegal(""); + return RESULT_JUMP; + } else { + prev.next = new Inst4.Bswapd(reg_edi); + return RESULT_HANDLED; } }; } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_none.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_none.java index c89c9175..4dfb78eb 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_none.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Prefix_none.java @@ -8,1280 +8,1022 @@ public class Prefix_none extends Helper { static public void init(Decode[] ops) { /* ADD Eb,Gb */ - ops[0x00] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Addb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.AddEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x00] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Addb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.AddEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x200] = ops[0x00]; /* ADD Ew,Gw */ - ops[0x01] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Addw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.AddEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x01] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Addw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.AddEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* ADD Gb,Eb */ - ops[0x02] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Addb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.AddGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x02] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Addb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.AddGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x202] = ops[0x02]; /* ADD Gw,Ew */ - ops[0x03] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Addw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.AddGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x03] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Addw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.AddGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* ADD AL,Ib */ - ops[0x04] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AddAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x04] = prev -> { + prev.next = new Inst1.AddAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x204] = ops[0x04]; /* ADD AX,Iw */ - ops[0x05] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AddAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x05] = prev -> { + prev.next = new Inst1.AddAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* PUSH ES */ - ops[0x06] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PushES(); - return RESULT_HANDLED; - } + ops[0x06] = prev -> { + prev.next = new Inst1.PushES(); + return RESULT_HANDLED; }; /* POP ES */ - ops[0x07] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PopES(); - return RESULT_HANDLED; - } + ops[0x07] = prev -> { + prev.next = new Inst1.PopES(); + return RESULT_HANDLED; }; /* OR Eb,Gb */ - ops[0x08] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Orb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.OrEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x08] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Orb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.OrEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x208] = ops[0x08]; /* OR Ew,Gw */ - ops[0x09] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Orw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.OrEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x09] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Orw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.OrEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* OR Gb,Eb */ - ops[0x0a] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Orb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.OrGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x0a] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Orb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.OrGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x20a] = ops[0x0a]; /* OR Gw,Ew */ - ops[0x0b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Orw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.OrGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x0b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Orw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.OrGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* OR AL,Ib */ - ops[0x0c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.OrAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x0c] = prev -> { + prev.next = new Inst1.OrAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x20c] = ops[0x0c]; /* OR AX,Iw */ - ops[0x0d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.OrAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x0d] = prev -> { + prev.next = new Inst1.OrAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* PUSH CS */ - ops[0x0e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PushCS(); - return RESULT_HANDLED; - } + ops[0x0e] = prev -> { + prev.next = new Inst1.PushCS(); + return RESULT_HANDLED; }; /* 2 byte opcodes*/ - ops[0x0f] = new Decode() { - final public int call(Op prev) { - opcode_index|=OPCODE_0F; - return RESULT_CONTINUE; - } + ops[0x0f] = prev -> { + opcode_index|=OPCODE_0F; + return RESULT_CONTINUE; }; ops[0x20f] = ops[0x0f]; /* ADC Eb,Gb */ - ops[0x10] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Adcb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.AdcEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x10] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Adcb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.AdcEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x210] = ops[0x10]; /* ADC Ew,Gw */ - ops[0x11] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Adcw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.AdcEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x11] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Adcw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.AdcEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* ADC Gb,Eb */ - ops[0x12] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Adcb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.AdcGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x12] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Adcb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.AdcGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x212] = ops[0x12]; /* ADC Gw,Ew */ - ops[0x13] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Adcw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.AdcGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x13] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Adcw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.AdcGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* ADC AL,Ib */ - ops[0x14] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AdcAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x14] = prev -> { + prev.next = new Inst1.AdcAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x214] = ops[0x14]; /* ADC AX,Iw */ - ops[0x15] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AdcAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x15] = prev -> { + prev.next = new Inst1.AdcAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* PUSH SS */ - ops[0x16] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PushSS(); - return RESULT_HANDLED; - } + ops[0x16] = prev -> { + prev.next = new Inst1.PushSS(); + return RESULT_HANDLED; }; /* POP SS */ - ops[0x17] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PopSS(); - return RESULT_ANOTHER; - } + ops[0x17] = prev -> { + prev.next = new Inst1.PopSS(); + return RESULT_ANOTHER; }; /* SBB Eb,Gb */ - ops[0x18] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Sbbb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.SbbEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x18] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Sbbb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.SbbEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x218] = ops[0x18]; /* SBB Ew,Gw */ - ops[0x19] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Sbbw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.SbbEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x19] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Sbbw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.SbbEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* SBB Gb,Eb */ - ops[0x1a] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Sbbb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.SbbGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x1a] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Sbbb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.SbbGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x21a] = ops[0x1a]; /* SBB Gw,Ew */ - ops[0x1b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Sbbw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.SbbGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x1b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Sbbw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.SbbGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* SBB AL,Ib */ - ops[0x1c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SbbAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x1c] = prev -> { + prev.next = new Inst1.SbbAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x21c] = ops[0x1c]; /* SBB AX,Iw */ - ops[0x1d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SbbAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x1d] = prev -> { + prev.next = new Inst1.SbbAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* PUSH DS */ - ops[0x1e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PushDS(); - return RESULT_HANDLED; - } + ops[0x1e] = prev -> { + prev.next = new Inst1.PushDS(); + return RESULT_HANDLED; }; /* POP DS */ - ops[0x1f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PopDS(); - return RESULT_HANDLED; - } + ops[0x1f] = prev -> { + prev.next = new Inst1.PopDS(); + return RESULT_HANDLED; }; /* AND Eb,Gb */ - ops[0x20] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Andb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.AndEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x20] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Andb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.AndEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x220] = ops[0x20]; /* AND Ew,Gw */ - ops[0x21] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Andw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.AndEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x21] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Andw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.AndEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* AND Gb,Eb */ - ops[0x22] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Andb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.AndGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x22] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Andb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.AndGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x222] = ops[0x22]; /* AND Gw,Ew */ - ops[0x23] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Andw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.AndGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x23] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Andw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.AndGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* AND AL,Ib */ - ops[0x24] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AndAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x24] = prev -> { + prev.next = new Inst1.AndAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x224] = ops[0x24]; /* AND AX,Iw */ - ops[0x25] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AndAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x25] = prev -> { + prev.next = new Inst1.AndAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* SEG ES: */ - ops[0x26] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SegES(); - return RESULT_CONTINUE_SEG; - } + ops[0x26] = prev -> { + prev.next = new Inst1.SegES(); + return RESULT_CONTINUE_SEG; }; ops[0x226] = ops[0x26]; /* DAA */ - ops[0x27] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Daa(); - return RESULT_HANDLED; - } + ops[0x27] = prev -> { + prev.next = new Inst1.Daa(); + return RESULT_HANDLED; }; ops[0x227] = ops[0x27]; /* SUB Eb,Gb */ - ops[0x28] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Subb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.SubEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x28] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Subb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.SubEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x228] = ops[0x28]; /* SUB Ew,Gw */ - ops[0x29] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Subw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.SubEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x29] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Subw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.SubEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* SUB Gb,Eb */ - ops[0x2a] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Subb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.SubGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x2a] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Subb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.SubGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x22a] = ops[0x2a]; /* SUB Gw,Ew */ - ops[0x2b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Subw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.SubGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x2b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Subw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.SubGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* SUB AL,Ib */ - ops[0x2c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SubAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x2c] = prev -> { + prev.next = new Inst1.SubAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x22c] = ops[0x2c]; /* SUB AX,Iw */ - ops[0x2d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SubAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x2d] = prev -> { + prev.next = new Inst1.SubAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* SEG CS: */ - ops[0x2e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SegCS(); - return RESULT_CONTINUE_SEG; - } + ops[0x2e] = prev -> { + prev.next = new Inst1.SegCS(); + return RESULT_CONTINUE_SEG; }; ops[0x22e] = ops[0x2e]; /* DAS */ - ops[0x2f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Das(); - return RESULT_HANDLED; - } + ops[0x2f] = prev -> { + prev.next = new Inst1.Das(); + return RESULT_HANDLED; }; ops[0x22f] = ops[0x2f]; /* XOR Eb,Gb */ - ops[0x30] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Xorb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.XorEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x30] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Xorb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.XorEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x230] = ops[0x30]; /* XOR Ew,Gw */ - ops[0x31] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Xorw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.XorEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x31] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Xorw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.XorEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* XOR Gb,Eb */ - ops[0x32] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Xorb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.XorGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x32] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Xorb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.XorGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x232] = ops[0x32]; /* XOR Gw,Ew */ - ops[0x33] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Xorw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.XorGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x33] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Xorw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.XorGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* XOR AL,Ib */ - ops[0x34] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XorAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x34] = prev -> { + prev.next = new Inst1.XorAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x234] = ops[0x34]; /* XOR AX,Iw */ - ops[0x35] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XorAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x35] = prev -> { + prev.next = new Inst1.XorAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* SEG SS: */ - ops[0x36] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SegSS(); - return RESULT_CONTINUE_SEG; - } + ops[0x36] = prev -> { + prev.next = new Inst1.SegSS(); + return RESULT_CONTINUE_SEG; }; ops[0x236] = ops[0x36]; /* AAA */ - ops[0x37] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Aaa(); - return RESULT_HANDLED; - } + ops[0x37] = prev -> { + prev.next = new Inst1.Aaa(); + return RESULT_HANDLED; }; ops[0x237] = ops[0x37]; /* CMP Eb,Gb */ - ops[0x38] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Cmpb_reg(Mod.eb(rm), Mod.gb(rm)); - } else { - prev.next = new Inst1.CmpEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); - } - return RESULT_HANDLED; + ops[0x38] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Cmpb_reg(Mod.eb(rm), Mod.gb(rm)); + } else { + prev.next = new Inst1.CmpEbGb_mem(Mod.getEaa(rm), Mod.gb(rm)); } + return RESULT_HANDLED; }; ops[0x238] = ops[0x38]; /* CMP Ew,Gw */ - ops[0x39] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Cmpw_reg(Mod.ew(rm), Mod.gw(rm)); - } else { - prev.next = new Inst1.CmpEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); - } - return RESULT_HANDLED; + ops[0x39] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Cmpw_reg(Mod.ew(rm), Mod.gw(rm)); + } else { + prev.next = new Inst1.CmpEwGw_mem(Mod.getEaa(rm), Mod.gw(rm)); } + return RESULT_HANDLED; }; /* CMP Gb,Eb */ - ops[0x3a] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Cmpb_reg(Mod.gb(rm), Mod.eb(rm)); - } else { - prev.next = new Inst1.CmpGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x3a] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Cmpb_reg(Mod.gb(rm), Mod.eb(rm)); + } else { + prev.next = new Inst1.CmpGbEb_mem(Mod.gb(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; ops[0x23a] = ops[0x3a]; /* CMP Gw,Ew */ - ops[0x3b] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.Cmpw_reg(Mod.gw(rm), Mod.ew(rm)); - } else { - prev.next = new Inst1.CmpGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); - } - return RESULT_HANDLED; + ops[0x3b] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.Cmpw_reg(Mod.gw(rm), Mod.ew(rm)); + } else { + prev.next = new Inst1.CmpGwEw_mem(Mod.gw(rm), Mod.getEaa(rm)); } + return RESULT_HANDLED; }; /* CMP AL,Ib */ - ops[0x3c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.CmpAlIb(decode_fetchb()); - return RESULT_HANDLED; - } + ops[0x3c] = prev -> { + prev.next = new Inst1.CmpAlIb(decode_fetchb()); + return RESULT_HANDLED; }; ops[0x23c] = ops[0x3c]; /* CMP AX,Iw */ - ops[0x3d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.CmpAxIw(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x3d] = prev -> { + prev.next = new Inst1.CmpAxIw(decode_fetchw()); + return RESULT_HANDLED; }; /* SEG DS: */ - ops[0x3e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SegDS(); - return RESULT_CONTINUE_SEG; - } + ops[0x3e] = prev -> { + prev.next = new Inst1.SegDS(); + return RESULT_CONTINUE_SEG; }; ops[0x23e] = ops[0x3e]; /* AAS */ - ops[0x3f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Aas(); - return RESULT_HANDLED; - } + ops[0x3f] = prev -> { + prev.next = new Inst1.Aas(); + return RESULT_HANDLED; }; ops[0x23f] = ops[0x3f]; /* INC AX */ - ops[0x40] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_eax); - return RESULT_HANDLED; - } + ops[0x40] = prev -> { + prev.next = new Inst1.Incw(reg_eax); + return RESULT_HANDLED; }; /* INC CX */ - ops[0x41] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_ecx); - return RESULT_HANDLED; - } + ops[0x41] = prev -> { + prev.next = new Inst1.Incw(reg_ecx); + return RESULT_HANDLED; }; /* INC DX */ - ops[0x42] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_edx); - return RESULT_HANDLED; - } + ops[0x42] = prev -> { + prev.next = new Inst1.Incw(reg_edx); + return RESULT_HANDLED; }; /* INC BX */ - ops[0x43] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_ebx); - return RESULT_HANDLED; - } + ops[0x43] = prev -> { + prev.next = new Inst1.Incw(reg_ebx); + return RESULT_HANDLED; }; /* INC SP */ - ops[0x44] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_esp); - return RESULT_HANDLED; - } + ops[0x44] = prev -> { + prev.next = new Inst1.Incw(reg_esp); + return RESULT_HANDLED; }; /* INC BP */ - ops[0x45] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_ebp); - return RESULT_HANDLED; - } + ops[0x45] = prev -> { + prev.next = new Inst1.Incw(reg_ebp); + return RESULT_HANDLED; }; /* INC SI */ - ops[0x46] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_esi); - return RESULT_HANDLED; - } + ops[0x46] = prev -> { + prev.next = new Inst1.Incw(reg_esi); + return RESULT_HANDLED; }; /* INC DI */ - ops[0x47] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Incw(reg_edi); - return RESULT_HANDLED; - } + ops[0x47] = prev -> { + prev.next = new Inst1.Incw(reg_edi); + return RESULT_HANDLED; }; /* DEC AX */ - ops[0x48] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_eax); - return RESULT_HANDLED; - } + ops[0x48] = prev -> { + prev.next = new Inst1.Decw(reg_eax); + return RESULT_HANDLED; }; /* DEC CX */ - ops[0x49] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_ecx); - return RESULT_HANDLED; - } + ops[0x49] = prev -> { + prev.next = new Inst1.Decw(reg_ecx); + return RESULT_HANDLED; }; /* DEC DX */ - ops[0x4a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_edx); - return RESULT_HANDLED; - } + ops[0x4a] = prev -> { + prev.next = new Inst1.Decw(reg_edx); + return RESULT_HANDLED; }; /* DEC BX */ - ops[0x4b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_ebx); - return RESULT_HANDLED; - } + ops[0x4b] = prev -> { + prev.next = new Inst1.Decw(reg_ebx); + return RESULT_HANDLED; }; /* DEC SP */ - ops[0x4c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_esp); - return RESULT_HANDLED; - } + ops[0x4c] = prev -> { + prev.next = new Inst1.Decw(reg_esp); + return RESULT_HANDLED; }; /* DEC BP */ - ops[0x4d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_ebp); - return RESULT_HANDLED; - } + ops[0x4d] = prev -> { + prev.next = new Inst1.Decw(reg_ebp); + return RESULT_HANDLED; }; /* DEC SI */ - ops[0x4e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_esi); - return RESULT_HANDLED; - } + ops[0x4e] = prev -> { + prev.next = new Inst1.Decw(reg_esi); + return RESULT_HANDLED; }; /* DEC DI */ - ops[0x4f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Decw(reg_edi); - return RESULT_HANDLED; - } + ops[0x4f] = prev -> { + prev.next = new Inst1.Decw(reg_edi); + return RESULT_HANDLED; }; /* PUSH AX */ - ops[0x50] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_eax); - return RESULT_HANDLED; - } + ops[0x50] = prev -> { + prev.next = new Inst1.Pushw(reg_eax); + return RESULT_HANDLED; }; /* PUSH CX */ - ops[0x51] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_ecx); - return RESULT_HANDLED; - } + ops[0x51] = prev -> { + prev.next = new Inst1.Pushw(reg_ecx); + return RESULT_HANDLED; }; /* PUSH DX */ - ops[0x52] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_edx); - return RESULT_HANDLED; - } + ops[0x52] = prev -> { + prev.next = new Inst1.Pushw(reg_edx); + return RESULT_HANDLED; }; /* PUSH BX */ - ops[0x53] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_ebx); - return RESULT_HANDLED; - } + ops[0x53] = prev -> { + prev.next = new Inst1.Pushw(reg_ebx); + return RESULT_HANDLED; }; /* PUSH SP */ - ops[0x54] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_esp); - return RESULT_HANDLED; - } + ops[0x54] = prev -> { + prev.next = new Inst1.Pushw(reg_esp); + return RESULT_HANDLED; }; /* PUSH BP */ - ops[0x55] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_ebp); - return RESULT_HANDLED; - } + ops[0x55] = prev -> { + prev.next = new Inst1.Pushw(reg_ebp); + return RESULT_HANDLED; }; /* PUSH SI */ - ops[0x56] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_esi); - return RESULT_HANDLED; - } + ops[0x56] = prev -> { + prev.next = new Inst1.Pushw(reg_esi); + return RESULT_HANDLED; }; /* PUSH DI */ - ops[0x57] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pushw(reg_edi); - return RESULT_HANDLED; - } + ops[0x57] = prev -> { + prev.next = new Inst1.Pushw(reg_edi); + return RESULT_HANDLED; }; /* POP AX */ - ops[0x58] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_eax); - return RESULT_HANDLED; - } + ops[0x58] = prev -> { + prev.next = new Inst1.Popw(reg_eax); + return RESULT_HANDLED; }; /* POP CX */ - ops[0x59] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_ecx); - return RESULT_HANDLED; - } + ops[0x59] = prev -> { + prev.next = new Inst1.Popw(reg_ecx); + return RESULT_HANDLED; }; /* POP DX */ - ops[0x5a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_edx); - return RESULT_HANDLED; - } + ops[0x5a] = prev -> { + prev.next = new Inst1.Popw(reg_edx); + return RESULT_HANDLED; }; /* POP BX */ - ops[0x5b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_ebx); - return RESULT_HANDLED; - } + ops[0x5b] = prev -> { + prev.next = new Inst1.Popw(reg_ebx); + return RESULT_HANDLED; }; /* POP SP */ - ops[0x5c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_esp); - return RESULT_HANDLED; - } + ops[0x5c] = prev -> { + prev.next = new Inst1.Popw(reg_esp); + return RESULT_HANDLED; }; /* POP BP */ - ops[0x5d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_ebp); - return RESULT_HANDLED; - } + ops[0x5d] = prev -> { + prev.next = new Inst1.Popw(reg_ebp); + return RESULT_HANDLED; }; /* POP SI */ - ops[0x5e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_esi); - return RESULT_HANDLED; - } + ops[0x5e] = prev -> { + prev.next = new Inst1.Popw(reg_esi); + return RESULT_HANDLED; }; /* POP DI */ - ops[0x5f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popw(reg_edi); - return RESULT_HANDLED; - } + ops[0x5f] = prev -> { + prev.next = new Inst1.Popw(reg_edi); + return RESULT_HANDLED; }; /* PUSHA */ - ops[0x60] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Pusha(); - return RESULT_HANDLED; - } + ops[0x60] = prev -> { + prev.next = new Inst1.Pusha(); + return RESULT_HANDLED; }; /* POPA */ - ops[0x61] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Popa(); - return RESULT_HANDLED; - } + ops[0x61] = prev -> { + prev.next = new Inst1.Popa(); + return RESULT_HANDLED; }; /* BOUND */ - ops[0x62] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Bound(); - return RESULT_HANDLED; - } + ops[0x62] = prev -> { + prev.next = new Inst1.Bound(); + return RESULT_HANDLED; }; /* ARPL Ew,Rw */ - ops[0x63] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.ArplEwRw_reg(rm); - } else { - prev.next = new Inst1.ArplEwRw_mem(rm); - } - return RESULT_HANDLED; + ops[0x63] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.ArplEwRw_reg(rm); + } else { + prev.next = new Inst1.ArplEwRw_mem(rm); } + return RESULT_HANDLED; }; /* SEG FS: */ - ops[0x64] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SegFS(); - return RESULT_CONTINUE_SEG; - } + ops[0x64] = prev -> { + prev.next = new Inst1.SegFS(); + return RESULT_CONTINUE_SEG; }; ops[0x264] = ops[0x64]; /* SEG GS: */ - ops[0x65] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.SegGS(); - return RESULT_CONTINUE_SEG; - } + ops[0x65] = prev -> { + prev.next = new Inst1.SegGS(); + return RESULT_CONTINUE_SEG; }; ops[0x265] = ops[0x65]; /* Operand Size Prefix */ - ops[0x66] = new Decode() { - final public int call(Op prev) { - opcode_index=(CPU.cpu.code.big?0:512); - return RESULT_CONTINUE; - } + ops[0x66] = prev -> { + opcode_index=(CPU.cpu.code.big?0:512); + return RESULT_CONTINUE; }; ops[0x266] = ops[0x66]; /* Address Size Prefix */ - ops[0x67] = new Decode() { - final public int call(Op prev) { - prefixes=(prefixes & ~Core.PREFIX_ADDR) |(CPU.cpu.code.big?0:1); - EA16 = (prefixes&1)==0; - return RESULT_CONTINUE; - } + ops[0x67] = prev -> { + prefixes=(prefixes & ~Core.PREFIX_ADDR) |(CPU.cpu.code.big?0:1); + EA16 = (prefixes&1)==0; + return RESULT_CONTINUE; }; ops[0x267] = ops[0x67]; /* PUSH Iw */ - ops[0x68] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Push16(decode_fetchw()); - return RESULT_HANDLED; - } + ops[0x68] = prev -> { + prev.next = new Inst1.Push16(decode_fetchw()); + return RESULT_HANDLED; }; /* IMUL Gw,Ew,Iw */ - ops[0x69] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.IMULGwEwIw_reg(rm); - } - else { - prev.next = new Inst1.IMULGwEwIw_mem(rm); - } - return RESULT_HANDLED; + ops[0x69] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.IMULGwEwIw_reg(rm); + } + else { + prev.next = new Inst1.IMULGwEwIw_mem(rm); } + return RESULT_HANDLED; }; /* PUSH Ib */ - ops[0x6a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Push16(decode_fetchbs()); - return RESULT_HANDLED; - } + ops[0x6a] = prev -> { + prev.next = new Inst1.Push16(decode_fetchbs()); + return RESULT_HANDLED; }; /* IMUL Gw,Ew,Ib */ - ops[0x6b] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.IMULGwEwIb_reg(rm); - } - else { - prev.next = new Inst1.IMULGwEwIb_mem(rm); - } - return RESULT_HANDLED; + ops[0x6b] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.IMULGwEwIb_reg(rm); + } + else { + prev.next = new Inst1.IMULGwEwIb_mem(rm); } + return RESULT_HANDLED; }; /* INSB */ - ops[0x6c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoStringException(StringOp.R_INSB, 1); - return RESULT_HANDLED; - } + ops[0x6c] = prev -> { + prev.next = new Inst1.DoStringException(StringOp.R_INSB, 1); + return RESULT_HANDLED; }; ops[0x26c] = ops[0x6c]; /* INSW */ - ops[0x6d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoStringException(StringOp.R_INSW, 2); - return RESULT_HANDLED; - } + ops[0x6d] = prev -> { + prev.next = new Inst1.DoStringException(StringOp.R_INSW, 2); + return RESULT_HANDLED; }; /* OUTSB */ - ops[0x6e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoStringException(StringOp.R_OUTSB, 1); - return RESULT_HANDLED; - } + ops[0x6e] = prev -> { + prev.next = new Inst1.DoStringException(StringOp.R_OUTSB, 1); + return RESULT_HANDLED; }; ops[0x26e] = ops[0x6e]; /* OUTSW */ - ops[0x6f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoStringException(StringOp.R_OUTSW, 2); - return RESULT_HANDLED; - } + ops[0x6f] = prev -> { + prev.next = new Inst1.DoStringException(StringOp.R_OUTSW, 2); + return RESULT_HANDLED; }; /* JO */ - ops[0x70] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_o(); - return RESULT_JUMP; - } + ops[0x70] = prev -> { + prev.next = new Inst1.JumpCond16_b_o(); + return RESULT_JUMP; }; /* JNO */ - ops[0x71] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_no(); - return RESULT_JUMP; - } + ops[0x71] = prev -> { + prev.next = new Inst1.JumpCond16_b_no(); + return RESULT_JUMP; }; /* JB */ - ops[0x72] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_b(); - return RESULT_JUMP; - } + ops[0x72] = prev -> { + prev.next = new Inst1.JumpCond16_b_b(); + return RESULT_JUMP; }; /* JNB */ - ops[0x73] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_nb(); - return RESULT_JUMP; - } + ops[0x73] = prev -> { + prev.next = new Inst1.JumpCond16_b_nb(); + return RESULT_JUMP; }; /* JZ */ - ops[0x74] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_z(); - return RESULT_JUMP; - } + ops[0x74] = prev -> { + prev.next = new Inst1.JumpCond16_b_z(); + return RESULT_JUMP; }; /* JNZ */ - ops[0x75] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_nz(); - return RESULT_JUMP; - } + ops[0x75] = prev -> { + prev.next = new Inst1.JumpCond16_b_nz(); + return RESULT_JUMP; }; /* JBE */ - ops[0x76] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_be(); - return RESULT_JUMP; - } + ops[0x76] = prev -> { + prev.next = new Inst1.JumpCond16_b_be(); + return RESULT_JUMP; }; /* JNBE */ - ops[0x77] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_nbe(); - return RESULT_JUMP; - } + ops[0x77] = prev -> { + prev.next = new Inst1.JumpCond16_b_nbe(); + return RESULT_JUMP; }; /* JS */ - ops[0x78] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_s(); - return RESULT_JUMP; - } + ops[0x78] = prev -> { + prev.next = new Inst1.JumpCond16_b_s(); + return RESULT_JUMP; }; /* JNS */ - ops[0x79] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_ns(); - return RESULT_JUMP; - } + ops[0x79] = prev -> { + prev.next = new Inst1.JumpCond16_b_ns(); + return RESULT_JUMP; }; /* JP */ - ops[0x7a] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_p(); - return RESULT_JUMP; - } + ops[0x7a] = prev -> { + prev.next = new Inst1.JumpCond16_b_p(); + return RESULT_JUMP; }; /* JNP */ - ops[0x7b] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_np(); - return RESULT_JUMP; - } + ops[0x7b] = prev -> { + prev.next = new Inst1.JumpCond16_b_np(); + return RESULT_JUMP; }; /* JL */ - ops[0x7c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_l(); - return RESULT_JUMP; - } + ops[0x7c] = prev -> { + prev.next = new Inst1.JumpCond16_b_l(); + return RESULT_JUMP; }; /* JNL */ - ops[0x7d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_nl(); - return RESULT_JUMP; - } + ops[0x7d] = prev -> { + prev.next = new Inst1.JumpCond16_b_nl(); + return RESULT_JUMP; }; /* JLE */ - ops[0x7e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_le(); - return RESULT_JUMP; - } + ops[0x7e] = prev -> { + prev.next = new Inst1.JumpCond16_b_le(); + return RESULT_JUMP; }; /* JNLE */ - ops[0x7f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JumpCond16_b_nle(); - return RESULT_JUMP; - } + ops[0x7f] = prev -> { + prev.next = new Inst1.JumpCond16_b_nle(); + return RESULT_JUMP; }; /* Grpl Eb,Ib */ - ops[0x80] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm>= 0xc0) { - switch (which) { - case 0x00:prev.next = new Inst1.GrplEbIb_reg_add(rm);break; - case 0x01:prev.next = new Inst1.GrplEbIb_reg_or(rm);break; - case 0x02:prev.next = new Inst1.GrplEbIb_reg_adc(rm);break; - case 0x03:prev.next = new Inst1.GrplEbIb_reg_sbb(rm);break; - case 0x04:prev.next = new Inst1.GrplEbIb_reg_and(rm);break; - case 0x05:prev.next = new Inst1.GrplEbIb_reg_sub(rm);break; - case 0x06:prev.next = new Inst1.GrplEbIb_reg_xor(rm);break; - case 0x07:prev.next = new Inst1.GrplEbIb_reg_cmp(rm);break; - } - } else { - switch (which) { - case 0x00:prev.next = new Inst1.GrplEbIb_mem_add(rm);break; - case 0x01:prev.next = new Inst1.GrplEbIb_mem_or(rm);break; - case 0x02:prev.next = new Inst1.GrplEbIb_mem_adc(rm);break; - case 0x03:prev.next = new Inst1.GrplEbIb_mem_sbb(rm);break; - case 0x04:prev.next = new Inst1.GrplEbIb_mem_and(rm);break; - case 0x05:prev.next = new Inst1.GrplEbIb_mem_sub(rm);break; - case 0x06:prev.next = new Inst1.GrplEbIb_mem_xor(rm);break; - case 0x07:prev.next = new Inst1.GrplEbIb_mem_cmp(rm);break; - } + ops[0x80] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm>= 0xc0) { + switch (which) { + case 0x00:prev.next = new Inst1.GrplEbIb_reg_add(rm);break; + case 0x01:prev.next = new Inst1.GrplEbIb_reg_or(rm);break; + case 0x02:prev.next = new Inst1.GrplEbIb_reg_adc(rm);break; + case 0x03:prev.next = new Inst1.GrplEbIb_reg_sbb(rm);break; + case 0x04:prev.next = new Inst1.GrplEbIb_reg_and(rm);break; + case 0x05:prev.next = new Inst1.GrplEbIb_reg_sub(rm);break; + case 0x06:prev.next = new Inst1.GrplEbIb_reg_xor(rm);break; + case 0x07:prev.next = new Inst1.GrplEbIb_reg_cmp(rm);break; + } + } else { + switch (which) { + case 0x00:prev.next = new Inst1.GrplEbIb_mem_add(rm);break; + case 0x01:prev.next = new Inst1.GrplEbIb_mem_or(rm);break; + case 0x02:prev.next = new Inst1.GrplEbIb_mem_adc(rm);break; + case 0x03:prev.next = new Inst1.GrplEbIb_mem_sbb(rm);break; + case 0x04:prev.next = new Inst1.GrplEbIb_mem_and(rm);break; + case 0x05:prev.next = new Inst1.GrplEbIb_mem_sub(rm);break; + case 0x06:prev.next = new Inst1.GrplEbIb_mem_xor(rm);break; + case 0x07:prev.next = new Inst1.GrplEbIb_mem_cmp(rm);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x280] = ops[0x80]; @@ -1290,264 +1032,239 @@ final public int call(Op prev) { ops[0x282] = ops[0x80]; /* Grpl Ew,Iw */ - ops[0x81] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm>= 0xc0) { - switch (which) { - case 0x00:prev.next = new Inst1.GrplEwIw_reg_add(rm, false);break; - case 0x01:prev.next = new Inst1.GrplEwIw_reg_or(rm, false);break; - case 0x02:prev.next = new Inst1.GrplEwIw_reg_adc(rm, false);break; - case 0x03:prev.next = new Inst1.GrplEwIw_reg_sbb(rm, false);break; - case 0x04:prev.next = new Inst1.GrplEwIw_reg_and(rm, false);break; - case 0x05:prev.next = new Inst1.GrplEwIw_reg_sub(rm, false);break; - case 0x06:prev.next = new Inst1.GrplEwIw_reg_xor(rm, false);break; - case 0x07:prev.next = new Inst1.GrplEwIw_reg_cmp(rm, false);break; - } - } else { - switch (which) { - case 0x00:prev.next = new Inst1.GrplEwIw_mem_add(rm, false);break; - case 0x01:prev.next = new Inst1.GrplEwIw_mem_or(rm, false);break; - case 0x02:prev.next = new Inst1.GrplEwIw_mem_adc(rm, false);break; - case 0x03:prev.next = new Inst1.GrplEwIw_mem_sbb(rm, false);break; - case 0x04:prev.next = new Inst1.GrplEwIw_mem_and(rm, false);break; - case 0x05:prev.next = new Inst1.GrplEwIw_mem_sub(rm, false);break; - case 0x06:prev.next = new Inst1.GrplEwIw_mem_xor(rm, false);break; - case 0x07:prev.next = new Inst1.GrplEwIw_mem_cmp(rm, false);break; - } + ops[0x81] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm>= 0xc0) { + switch (which) { + case 0x00:prev.next = new Inst1.GrplEwIw_reg_add(rm, false);break; + case 0x01:prev.next = new Inst1.GrplEwIw_reg_or(rm, false);break; + case 0x02:prev.next = new Inst1.GrplEwIw_reg_adc(rm, false);break; + case 0x03:prev.next = new Inst1.GrplEwIw_reg_sbb(rm, false);break; + case 0x04:prev.next = new Inst1.GrplEwIw_reg_and(rm, false);break; + case 0x05:prev.next = new Inst1.GrplEwIw_reg_sub(rm, false);break; + case 0x06:prev.next = new Inst1.GrplEwIw_reg_xor(rm, false);break; + case 0x07:prev.next = new Inst1.GrplEwIw_reg_cmp(rm, false);break; + } + } else { + switch (which) { + case 0x00:prev.next = new Inst1.GrplEwIw_mem_add(rm, false);break; + case 0x01:prev.next = new Inst1.GrplEwIw_mem_or(rm, false);break; + case 0x02:prev.next = new Inst1.GrplEwIw_mem_adc(rm, false);break; + case 0x03:prev.next = new Inst1.GrplEwIw_mem_sbb(rm, false);break; + case 0x04:prev.next = new Inst1.GrplEwIw_mem_and(rm, false);break; + case 0x05:prev.next = new Inst1.GrplEwIw_mem_sub(rm, false);break; + case 0x06:prev.next = new Inst1.GrplEwIw_mem_xor(rm, false);break; + case 0x07:prev.next = new Inst1.GrplEwIw_mem_cmp(rm, false);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* Grpl Ew,Ix */ - ops[0x83] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm>= 0xc0) { - switch (which) { - case 0x00:prev.next = new Inst1.GrplEwIw_reg_add(rm, true);break; - case 0x01:prev.next = new Inst1.GrplEwIw_reg_or(rm, true);break; - case 0x02:prev.next = new Inst1.GrplEwIw_reg_adc(rm, true);break; - case 0x03:prev.next = new Inst1.GrplEwIw_reg_sbb(rm, true);break; - case 0x04:prev.next = new Inst1.GrplEwIw_reg_and(rm, true);break; - case 0x05:prev.next = new Inst1.GrplEwIw_reg_sub(rm, true);break; - case 0x06:prev.next = new Inst1.GrplEwIw_reg_xor(rm, true);break; - case 0x07:prev.next = new Inst1.GrplEwIw_reg_cmp(rm, true);break; - } - } else { - switch (which) { - case 0x00:prev.next = new Inst1.GrplEwIw_mem_add(rm, true);break; - case 0x01:prev.next = new Inst1.GrplEwIw_mem_or(rm, true);break; - case 0x02:prev.next = new Inst1.GrplEwIw_mem_adc(rm, true);break; - case 0x03:prev.next = new Inst1.GrplEwIw_mem_sbb(rm, true);break; - case 0x04:prev.next = new Inst1.GrplEwIw_mem_and(rm, true);break; - case 0x05:prev.next = new Inst1.GrplEwIw_mem_sub(rm, true);break; - case 0x06:prev.next = new Inst1.GrplEwIw_mem_xor(rm, true);break; - case 0x07:prev.next = new Inst1.GrplEwIw_mem_cmp(rm, true);break; - } + ops[0x83] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm>= 0xc0) { + switch (which) { + case 0x00:prev.next = new Inst1.GrplEwIw_reg_add(rm, true);break; + case 0x01:prev.next = new Inst1.GrplEwIw_reg_or(rm, true);break; + case 0x02:prev.next = new Inst1.GrplEwIw_reg_adc(rm, true);break; + case 0x03:prev.next = new Inst1.GrplEwIw_reg_sbb(rm, true);break; + case 0x04:prev.next = new Inst1.GrplEwIw_reg_and(rm, true);break; + case 0x05:prev.next = new Inst1.GrplEwIw_reg_sub(rm, true);break; + case 0x06:prev.next = new Inst1.GrplEwIw_reg_xor(rm, true);break; + case 0x07:prev.next = new Inst1.GrplEwIw_reg_cmp(rm, true);break; + } + } else { + switch (which) { + case 0x00:prev.next = new Inst1.GrplEwIw_mem_add(rm, true);break; + case 0x01:prev.next = new Inst1.GrplEwIw_mem_or(rm, true);break; + case 0x02:prev.next = new Inst1.GrplEwIw_mem_adc(rm, true);break; + case 0x03:prev.next = new Inst1.GrplEwIw_mem_sbb(rm, true);break; + case 0x04:prev.next = new Inst1.GrplEwIw_mem_and(rm, true);break; + case 0x05:prev.next = new Inst1.GrplEwIw_mem_sub(rm, true);break; + case 0x06:prev.next = new Inst1.GrplEwIw_mem_xor(rm, true);break; + case 0x07:prev.next = new Inst1.GrplEwIw_mem_cmp(rm, true);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* TEST Eb,Gb */ - ops[0x84] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.TestEbGb_reg(rm); - } - else { - prev.next = new Inst1.TestEbGb_mem(rm); - } - return RESULT_HANDLED; + ops[0x84] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.TestEbGb_reg(rm); + } + else { + prev.next = new Inst1.TestEbGb_mem(rm); } + return RESULT_HANDLED; }; ops[0x284] = ops[0x84]; /* TEST Ew,Gw */ - ops[0x85] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.TestEwGw_reg(rm); - } - else { - prev.next = new Inst1.TestEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x85] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.TestEwGw_reg(rm); } + else { + prev.next = new Inst1.TestEwGw_mem(rm); + } + return RESULT_HANDLED; }; /* XCHG Eb,Gb */ - ops[0x86] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.XchgEbGb_reg(rm); - } else { - prev.next = new Inst1.XchgEbGb_mem(rm); - } - return RESULT_HANDLED; + ops[0x86] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.XchgEbGb_reg(rm); + } else { + prev.next = new Inst1.XchgEbGb_mem(rm); } + return RESULT_HANDLED; }; ops[0x286] = ops[0x86]; /* XCHG Ew,Gw */ - ops[0x87] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.XchgEwGw_reg(rm); - } else { - prev.next = new Inst1.XchgEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x87] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.XchgEwGw_reg(rm); + } else { + prev.next = new Inst1.XchgEwGw_mem(rm); } + return RESULT_HANDLED; }; /* MOV Eb,Gb */ - ops[0x88] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.MovEbGb_reg(rm); - } else { - if (rm == 5) - prev.next = new Inst1.MovEbGb_mem_5(rm); - else - prev.next = new Inst1.MovEbGb_mem(rm); - } - return RESULT_HANDLED; - } + ops[0x88] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.MovEbGb_reg(rm); + } else { + if (rm == 5) + prev.next = new Inst1.MovEbGb_mem_5(rm); + else + prev.next = new Inst1.MovEbGb_mem(rm); + } + return RESULT_HANDLED; }; ops[0x288] = ops[0x88]; /* MOV Ew,Gw */ - ops[0x89] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.MovEwGw_reg(rm); - } else { - prev.next = new Inst1.MovEwGw_mem(rm); - } - return RESULT_HANDLED; + ops[0x89] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.MovEwGw_reg(rm); + } else { + prev.next = new Inst1.MovEwGw_mem(rm); } + return RESULT_HANDLED; }; /* MOV Gb,Eb */ - ops[0x8a] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.MovGbEb_reg(rm); - } else { - prev.next = new Inst1.MovGbEb_mem(rm); - } - return RESULT_HANDLED; + ops[0x8a] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.MovGbEb_reg(rm); + } else { + prev.next = new Inst1.MovGbEb_mem(rm); } + return RESULT_HANDLED; }; ops[0x28a] = ops[0x8a]; /* MOV Gw,Ew */ - ops[0x8b] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.MovGwEw_reg(rm); - } else { - prev.next = new Inst1.MovGwEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x8b] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.MovGwEw_reg(rm); + } else { + prev.next = new Inst1.MovGwEw_mem(rm); } + return RESULT_HANDLED; }; /* Mov Ew,Sw */ - ops[0x8c] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* MOV Ew,ES */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEwEs_reg(rm); - } else { - prev.next = new Inst1.MovEwEs_mem(rm); - } - break; - case 0x01: /* MOV Ew,CS */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEwCs_reg(rm); - } else { - prev.next = new Inst1.MovEwCs_mem(rm); - } - break; - case 0x02: /* MOV Ew,SS */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEwSs_reg(rm); - } else { - prev.next = new Inst1.MovEwSs_mem(rm); - } - break; - case 0x03: /* MOV Ew,DS */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEwDs_reg(rm); - } else { - prev.next = new Inst1.MovEwDs_mem(rm); - } - break; - case 0x04: /* MOV Ew,FS */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEwFs_reg(rm); - } else { - prev.next = new Inst1.MovEwFs_mem(rm); - } - break; - case 0x05: /* MOV Ew,GS */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEwGs_reg(rm); - } else { - prev.next = new Inst1.MovEwGs_mem(rm); - } - break; - default: - prev.next = new Inst1.Illegal("CPU:8c:Illegal RM Byte"); - return RESULT_JUMP; + ops[0x8c] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* MOV Ew,ES */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEwEs_reg(rm); + } else { + prev.next = new Inst1.MovEwEs_mem(rm); + } + break; + case 0x01: /* MOV Ew,CS */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEwCs_reg(rm); + } else { + prev.next = new Inst1.MovEwCs_mem(rm); + } + break; + case 0x02: /* MOV Ew,SS */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEwSs_reg(rm); + } else { + prev.next = new Inst1.MovEwSs_mem(rm); + } + break; + case 0x03: /* MOV Ew,DS */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEwDs_reg(rm); + } else { + prev.next = new Inst1.MovEwDs_mem(rm); } - return RESULT_HANDLED; + break; + case 0x04: /* MOV Ew,FS */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEwFs_reg(rm); + } else { + prev.next = new Inst1.MovEwFs_mem(rm); + } + break; + case 0x05: /* MOV Ew,GS */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEwGs_reg(rm); + } else { + prev.next = new Inst1.MovEwGs_mem(rm); + } + break; + default: + prev.next = new Inst1.Illegal("CPU:8c:Illegal RM Byte"); + return RESULT_JUMP; } + return RESULT_HANDLED; }; /* LEA Gw */ - ops[0x8d] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst1.LeaGw_32(rm); - } else { - prev.next = new Inst1.LeaGw_16(rm); - } - return RESULT_HANDLED; + ops[0x8d] = prev -> { + int rm=decode_fetchb(); + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst1.LeaGw_32(rm); + } else { + prev.next = new Inst1.LeaGw_16(rm); } + return RESULT_HANDLED; }; /* MOV Sw,Ew */ - ops[0x8e] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* MOV ES,Ew */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovEsEw_reg(rm); - } else { - prev.next = new Inst1.MovEsEw_mem(rm); - } - break; + ops[0x8e] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* MOV ES,Ew */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovEsEw_reg(rm); + } else { + prev.next = new Inst1.MovEsEw_mem(rm); + } + break; // case 0x01: /* MOV CS,Ew */ // if (rm >= 0xC0) { // prev.next = new Decoder2_instructions.MovCsEw_reg(rm); @@ -1555,1747 +1272,1520 @@ final public int call(Op prev) { // prev.next = new Decoder2_instructions.MovCsW_mem(rm); // } // break; - case 0x02: /* MOV SS,Ew */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovSsEw_reg(rm); - } else { - prev.next = new Inst1.MovSsEw_mem(rm); - } - return RESULT_ANOTHER; //Always do another instruction - case 0x03: /* MOV DS,Ew */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovDsEw_reg(rm); - } else { - prev.next = new Inst1.MovDsEw_mem(rm); - } - break; - case 0x04: /* MOV FS,Ew */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovFsEw_reg(rm); - } else { - prev.next = new Inst1.MovFsEw_mem(rm); - } - break; - case 0x05: /* MOV GS,Ew */ - if (rm >= 0xC0) { - prev.next = new Inst1.MovGsEw_reg(rm); - } else { - prev.next = new Inst1.MovGsEw_mem(rm); - } - break; - default: - prev.next = new Inst1.Illegal("CPU:8e:Illegal RM Byte"); - return RESULT_JUMP; + case 0x02: /* MOV SS,Ew */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovSsEw_reg(rm); + } else { + prev.next = new Inst1.MovSsEw_mem(rm); + } + return RESULT_ANOTHER; //Always do another instruction + case 0x03: /* MOV DS,Ew */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovDsEw_reg(rm); + } else { + prev.next = new Inst1.MovDsEw_mem(rm); + } + break; + case 0x04: /* MOV FS,Ew */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovFsEw_reg(rm); + } else { + prev.next = new Inst1.MovFsEw_mem(rm); + } + break; + case 0x05: /* MOV GS,Ew */ + if (rm >= 0xC0) { + prev.next = new Inst1.MovGsEw_reg(rm); + } else { + prev.next = new Inst1.MovGsEw_mem(rm); } - return RESULT_HANDLED; + break; + default: + prev.next = new Inst1.Illegal("CPU:8e:Illegal RM Byte"); + return RESULT_JUMP; } + return RESULT_HANDLED; }; ops[0x28e] = ops[0x8e]; /* POP Ew */ - ops[0x8f] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0 ) { - prev.next = new Inst1.PopEw_reg(rm); - } else { - prev.next = new Inst1.PopEw_mem(rm); - } - return RESULT_HANDLED; + ops[0x8f] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0 ) { + prev.next = new Inst1.PopEw_reg(rm); + } else { + prev.next = new Inst1.PopEw_mem(rm); } + return RESULT_HANDLED; }; /* NOP */ - ops[0x90] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Noop(); - return RESULT_HANDLED; - } + ops[0x90] = prev -> { + prev.next = new Inst1.Noop(); + return RESULT_HANDLED; }; ops[0x290] = ops[0x90]; /* XCHG CX,AX */ - ops[0x91] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_ecx); - return RESULT_HANDLED; - } + ops[0x91] = prev -> { + prev.next = new Inst1.XchgAx(reg_ecx); + return RESULT_HANDLED; }; /* XCHG DX,AX */ - ops[0x92] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_edx); - return RESULT_HANDLED; - } + ops[0x92] = prev -> { + prev.next = new Inst1.XchgAx(reg_edx); + return RESULT_HANDLED; }; /* XCHG BX,AX */ - ops[0x93] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_ebx); - return RESULT_HANDLED; - } + ops[0x93] = prev -> { + prev.next = new Inst1.XchgAx(reg_ebx); + return RESULT_HANDLED; }; /* XCHG SP,AX */ - ops[0x94] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_esp); - return RESULT_HANDLED; - } + ops[0x94] = prev -> { + prev.next = new Inst1.XchgAx(reg_esp); + return RESULT_HANDLED; }; /* XCHG BP,AX */ - ops[0x95] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_ebp); - return RESULT_HANDLED; - } + ops[0x95] = prev -> { + prev.next = new Inst1.XchgAx(reg_ebp); + return RESULT_HANDLED; }; /* XCHG SI,AX */ - ops[0x96] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_esi); - return RESULT_HANDLED; - } + ops[0x96] = prev -> { + prev.next = new Inst1.XchgAx(reg_esi); + return RESULT_HANDLED; }; /* XCHG DI,AX */ - ops[0x97] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.XchgAx(reg_edi); - return RESULT_HANDLED; - } + ops[0x97] = prev -> { + prev.next = new Inst1.XchgAx(reg_edi); + return RESULT_HANDLED; }; /* CBW */ - ops[0x98] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Cbw(); - return RESULT_HANDLED; - } + ops[0x98] = prev -> { + prev.next = new Inst1.Cbw(); + return RESULT_HANDLED; }; /* CWD */ - ops[0x99] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Cwd(); - return RESULT_HANDLED; - } + ops[0x99] = prev -> { + prev.next = new Inst1.Cwd(); + return RESULT_HANDLED; }; /* CALL Ap */ - ops[0x9a] = new Decode() { - final public int call(Op prev) { - int newip=decode_fetchw(); - int newcs=decode_fetchw(); - prev.next = new Inst1.CallAp(newcs, newip); - return RESULT_JUMP; - } + ops[0x9a] = prev -> { + int newip=decode_fetchw(); + int newcs=decode_fetchw(); + prev.next = new Inst1.CallAp(newcs, newip); + return RESULT_JUMP; }; /* WAIT */ - ops[0x9b] = new Decode() { - final public int call(Op prev) { - /* No waiting here */ - prev.next = new Inst1.Wait(); - return RESULT_HANDLED; - } + ops[0x9b] = prev -> { + /* No waiting here */ + prev.next = new Inst1.Wait(); + return RESULT_HANDLED; }; ops[0x29b] = ops[0x9b]; /* PUSHF */ - ops[0x9c] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PushF(); - return RESULT_HANDLED; - } + ops[0x9c] = prev -> { + prev.next = new Inst1.PushF(); + return RESULT_HANDLED; }; /* POPF */ - ops[0x9d] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.PopF(); - return RESULT_HANDLED; - } + ops[0x9d] = prev -> { + prev.next = new Inst1.PopF(); + return RESULT_HANDLED; }; /* SAHF */ - ops[0x9e] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Sahf(); - return RESULT_HANDLED; - } + ops[0x9e] = prev -> { + prev.next = new Inst1.Sahf(); + return RESULT_HANDLED; }; ops[0x29e] = ops[0x9e]; /* LAHF */ - ops[0x9f] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Lahf(); - return RESULT_HANDLED; - } + ops[0x9f] = prev -> { + prev.next = new Inst1.Lahf(); + return RESULT_HANDLED; }; ops[0x29f] = ops[0x9f]; /* MOV AL,Ob */ - ops[0xa0] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovALOb(); - return RESULT_HANDLED; - } + ops[0xa0] = prev -> { + prev.next = new Inst1.MovALOb(); + return RESULT_HANDLED; }; ops[0x2a0] = ops[0xa0]; /* MOV AX,Ow */ - ops[0xa1] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovAXOw(); - return RESULT_HANDLED; - } + ops[0xa1] = prev -> { + prev.next = new Inst1.MovAXOw(); + return RESULT_HANDLED; }; /* MOV Ob,AL */ - ops[0xa2] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovObAL(); - return RESULT_HANDLED; - } + ops[0xa2] = prev -> { + prev.next = new Inst1.MovObAL(); + return RESULT_HANDLED; }; ops[0x2a2] = ops[0xa2]; /* MOV Ow,AX */ - ops[0xa3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovOwAX(); - return RESULT_HANDLED; - } + ops[0xa3] = prev -> { + prev.next = new Inst1.MovOwAX(); + return RESULT_HANDLED; }; /* MOVSB */ - ops[0xa4] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)==0) { - if ((prefixes & Core.PREFIX_REP)==0) { - prev.next = new Strings.Movsb16(); - } else { - prev.next = new Strings.Movsb16r(); - } + ops[0xa4] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)==0) { + if ((prefixes & Core.PREFIX_REP)==0) { + prev.next = new Strings.Movsb16(); } else { - if ((prefixes & Core.PREFIX_REP)==0) { - prev.next = new Strings.Movsb32(); - } else { - prev.next = new Strings.Movsb32r(); - } + prev.next = new Strings.Movsb16r(); + } + } else { + if ((prefixes & Core.PREFIX_REP)==0) { + prev.next = new Strings.Movsb32(); + } else { + prev.next = new Strings.Movsb32r(); } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2a4] = ops[0xa4]; /* MOVSW */ - ops[0xa5] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)==0) { - if ((prefixes & Core.PREFIX_REP)==0) { - prev.next = new Strings.Movsw16(); - } else { - prev.next = new Strings.Movsw16r(); - } + ops[0xa5] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)==0) { + if ((prefixes & Core.PREFIX_REP)==0) { + prev.next = new Strings.Movsw16(); } else { - if ((prefixes & Core.PREFIX_REP)==0) { - prev.next = new Strings.Movsw32(); - } else { - prev.next = new Strings.Movsw32r(); - } + prev.next = new Strings.Movsw16r(); + } + } else { + if ((prefixes & Core.PREFIX_REP)==0) { + prev.next = new Strings.Movsw32(); + } else { + prev.next = new Strings.Movsw32r(); } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* CMPSB */ - ops[0xa6] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_CMPSB); - return RESULT_HANDLED; - } + ops[0xa6] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_CMPSB); + return RESULT_HANDLED; }; ops[0x2a6] = ops[0xa6]; /* CMPSW */ - ops[0xa7] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_CMPSW); - return RESULT_HANDLED; - } + ops[0xa7] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_CMPSW); + return RESULT_HANDLED; }; /* TEST AL,Ib */ - ops[0xa8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.TestAlIb(); - return RESULT_HANDLED; - } + ops[0xa8] = prev -> { + prev.next = new Inst1.TestAlIb(); + return RESULT_HANDLED; }; ops[0x2a8] = ops[0xa8]; /* TEST AX,Iw */ - ops[0xa9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.TestAxIw(); - return RESULT_HANDLED; - } + ops[0xa9] = prev -> { + prev.next = new Inst1.TestAxIw(); + return RESULT_HANDLED; }; /* STOSB */ - ops[0xaa] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_STOSB); - return RESULT_HANDLED; - } + ops[0xaa] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_STOSB); + return RESULT_HANDLED; }; ops[0x2aa] = ops[0xaa]; /* STOSW */ - ops[0xab] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_STOSW); - return RESULT_HANDLED; - } + ops[0xab] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_STOSW); + return RESULT_HANDLED; }; /* LODSB */ - ops[0xac] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_LODSB); - return RESULT_HANDLED; - } + ops[0xac] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_LODSB); + return RESULT_HANDLED; }; ops[0x2ac] = ops[0xac]; /* LODSW */ - ops[0xad] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_LODSW); - return RESULT_HANDLED; - } + ops[0xad] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_LODSW); + return RESULT_HANDLED; }; /* SCASB */ - ops[0xae] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_SCASB); - return RESULT_HANDLED; - } + ops[0xae] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_SCASB); + return RESULT_HANDLED; }; ops[0x2ae] = ops[0xae]; /* SCASW */ - ops[0xaf] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.DoString(StringOp.R_SCASW); - return RESULT_HANDLED; - } + ops[0xaf] = prev -> { + prev.next = new Inst1.DoString(StringOp.R_SCASW); + return RESULT_HANDLED; }; /* MOV AL,Ib */ - ops[0xb0] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_eax); - return RESULT_HANDLED; - } + ops[0xb0] = prev -> { + prev.next = new Inst1.MovIb(reg_eax); + return RESULT_HANDLED; }; ops[0x2b0] = ops[0xb0]; /* MOV CL,Ib */ - ops[0xb1] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_ecx); - return RESULT_HANDLED; - } + ops[0xb1] = prev -> { + prev.next = new Inst1.MovIb(reg_ecx); + return RESULT_HANDLED; }; ops[0x2b1] = ops[0xb1]; /* MOV DL,Ib */ - ops[0xb2] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_edx); - return RESULT_HANDLED; - } + ops[0xb2] = prev -> { + prev.next = new Inst1.MovIb(reg_edx); + return RESULT_HANDLED; }; ops[0x2b2] = ops[0xb2]; /* MOV BL,Ib */ - ops[0xb3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_ebx); - return RESULT_HANDLED; - } + ops[0xb3] = prev -> { + prev.next = new Inst1.MovIb(reg_ebx); + return RESULT_HANDLED; }; ops[0x2b3] = ops[0xb3]; /* MOV AH,Ib */ - ops[0xb4] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_ah); - return RESULT_HANDLED; - } + ops[0xb4] = prev -> { + prev.next = new Inst1.MovIb(reg_ah); + return RESULT_HANDLED; }; ops[0x2b4] = ops[0xb4]; /* MOV CH,Ib */ - ops[0xb5] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_ch); - return RESULT_HANDLED; - } + ops[0xb5] = prev -> { + prev.next = new Inst1.MovIb(reg_ch); + return RESULT_HANDLED; }; ops[0x2b5] = ops[0xb5]; /* MOV DH,Ib */ - ops[0xb6] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_dh); - return RESULT_HANDLED; - } + ops[0xb6] = prev -> { + prev.next = new Inst1.MovIb(reg_dh); + return RESULT_HANDLED; }; ops[0x2b6] = ops[0xb6]; /* MOV BH,Ib */ - ops[0xb7] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIb(reg_bh); - return RESULT_HANDLED; - } + ops[0xb7] = prev -> { + prev.next = new Inst1.MovIb(reg_bh); + return RESULT_HANDLED; }; ops[0x2b7] = ops[0xb7]; /* MOV AX,Iw */ - ops[0xb8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_eax); - return RESULT_HANDLED; - } + ops[0xb8] = prev -> { + prev.next = new Inst1.MovIw(reg_eax); + return RESULT_HANDLED; }; /* MOV CX,Iw */ - ops[0xb9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_ecx); - return RESULT_HANDLED; - } + ops[0xb9] = prev -> { + prev.next = new Inst1.MovIw(reg_ecx); + return RESULT_HANDLED; }; /* MOV DX,Iw */ - ops[0xba] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_edx); - return RESULT_HANDLED; - } + ops[0xba] = prev -> { + prev.next = new Inst1.MovIw(reg_edx); + return RESULT_HANDLED; }; /* MOV BX,Iw */ - ops[0xbb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_ebx); - return RESULT_HANDLED; - } + ops[0xbb] = prev -> { + prev.next = new Inst1.MovIw(reg_ebx); + return RESULT_HANDLED; }; /* MOV SP,Iw */ - ops[0xbc] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_esp); - return RESULT_HANDLED; - } + ops[0xbc] = prev -> { + prev.next = new Inst1.MovIw(reg_esp); + return RESULT_HANDLED; }; /* MOV BP.Iw */ - ops[0xbd] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_ebp); - return RESULT_HANDLED; - } + ops[0xbd] = prev -> { + prev.next = new Inst1.MovIw(reg_ebp); + return RESULT_HANDLED; }; /* MOV SI,Iw */ - ops[0xbe] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_esi); - return RESULT_HANDLED; - } + ops[0xbe] = prev -> { + prev.next = new Inst1.MovIw(reg_esi); + return RESULT_HANDLED; }; /* MOV DI,Iw */ - ops[0xbf] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.MovIw(reg_edi); - return RESULT_HANDLED; - } + ops[0xbf] = prev -> { + prev.next = new Inst1.MovIw(reg_edi); + return RESULT_HANDLED; }; /* GRP2 Eb,Ib */ - ops[0xc0] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - int val = decode_fetchb() & 0x1f; - switch (which) { - case 0x00:prev.next = new Grp2.ROLB_reg(rm, val);break; - case 0x01:prev.next = new Grp2.RORB_reg(rm, val);break; - case 0x02:prev.next = new Grp2.RCLB_reg(rm, val);break; - case 0x03:prev.next = new Grp2.RCRB_reg(rm, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLB_reg(rm, val);break; - case 0x05:prev.next = new Grp2.SHRB_reg(rm, val);break; - case 0x07:prev.next = new Grp2.SARB_reg(rm, val);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - int val = decode_fetchb() & 0x1f; - switch (which) { - case 0x00:prev.next = new Grp2.ROLB_mem(get_eaa, val);break; - case 0x01:prev.next = new Grp2.RORB_mem(get_eaa, val);break; - case 0x02:prev.next = new Grp2.RCLB_mem(get_eaa, val);break; - case 0x03:prev.next = new Grp2.RCRB_mem(get_eaa, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLB_mem(get_eaa, val);break; - case 0x05:prev.next = new Grp2.SHRB_mem(get_eaa, val);break; - case 0x07:prev.next = new Grp2.SARB_mem(get_eaa, val);break; - } + ops[0xc0] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + int val = decode_fetchb() & 0x1f; + switch (which) { + case 0x00:prev.next = new Grp2.ROLB_reg(rm, val);break; + case 0x01:prev.next = new Grp2.RORB_reg(rm, val);break; + case 0x02:prev.next = new Grp2.RCLB_reg(rm, val);break; + case 0x03:prev.next = new Grp2.RCRB_reg(rm, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLB_reg(rm, val);break; + case 0x05:prev.next = new Grp2.SHRB_reg(rm, val);break; + case 0x07:prev.next = new Grp2.SARB_reg(rm, val);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + int val = decode_fetchb() & 0x1f; + switch (which) { + case 0x00:prev.next = new Grp2.ROLB_mem(get_eaa, val);break; + case 0x01:prev.next = new Grp2.RORB_mem(get_eaa, val);break; + case 0x02:prev.next = new Grp2.RCLB_mem(get_eaa, val);break; + case 0x03:prev.next = new Grp2.RCRB_mem(get_eaa, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLB_mem(get_eaa, val);break; + case 0x05:prev.next = new Grp2.SHRB_mem(get_eaa, val);break; + case 0x07:prev.next = new Grp2.SARB_mem(get_eaa, val);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2c0] = ops[0xc0]; /* GRP2 Ew,Ib */ - ops[0xc1] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - int val = decode_fetchb() & 0x1f; - switch (which) { - case 0x00:prev.next = new Grp2.ROLW_reg(rm, val);break; - case 0x01:prev.next = new Grp2.RORW_reg(rm, val);break; - case 0x02:prev.next = new Grp2.RCLW_reg(rm, val);break; - case 0x03:prev.next = new Grp2.RCRW_reg(rm, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLW_reg(rm, val);break; - case 0x05:prev.next = new Grp2.SHRW_reg(rm, val);break; - case 0x07:prev.next = new Grp2.SARW_reg(rm, val);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - int val = decode_fetchb() & 0x1f; - switch (which) { - case 0x00:prev.next = new Grp2.ROLW_mem(get_eaa, val);break; - case 0x01:prev.next = new Grp2.RORW_mem(get_eaa, val);break; - case 0x02:prev.next = new Grp2.RCLW_mem(get_eaa, val);break; - case 0x03:prev.next = new Grp2.RCRW_mem(get_eaa, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLW_mem(get_eaa, val);break; - case 0x05:prev.next = new Grp2.SHRW_mem(get_eaa, val);break; - case 0x07:prev.next = new Grp2.SARW_mem(get_eaa, val);break; - } + ops[0xc1] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + int val = decode_fetchb() & 0x1f; + switch (which) { + case 0x00:prev.next = new Grp2.ROLW_reg(rm, val);break; + case 0x01:prev.next = new Grp2.RORW_reg(rm, val);break; + case 0x02:prev.next = new Grp2.RCLW_reg(rm, val);break; + case 0x03:prev.next = new Grp2.RCRW_reg(rm, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLW_reg(rm, val);break; + case 0x05:prev.next = new Grp2.SHRW_reg(rm, val);break; + case 0x07:prev.next = new Grp2.SARW_reg(rm, val);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + int val = decode_fetchb() & 0x1f; + switch (which) { + case 0x00:prev.next = new Grp2.ROLW_mem(get_eaa, val);break; + case 0x01:prev.next = new Grp2.RORW_mem(get_eaa, val);break; + case 0x02:prev.next = new Grp2.RCLW_mem(get_eaa, val);break; + case 0x03:prev.next = new Grp2.RCRW_mem(get_eaa, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLW_mem(get_eaa, val);break; + case 0x05:prev.next = new Grp2.SHRW_mem(get_eaa, val);break; + case 0x07:prev.next = new Grp2.SARW_mem(get_eaa, val);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* RETN Iw */ - ops[0xc2] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.RetnIw(); - return RESULT_JUMP; - } + ops[0xc2] = prev -> { + prev.next = new Inst1.RetnIw(); + return RESULT_JUMP; }; /* RETN */ - ops[0xc3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Retn(); - return RESULT_JUMP; - } + ops[0xc3] = prev -> { + prev.next = new Inst1.Retn(); + return RESULT_JUMP; }; /* LES */ - ops[0xc4] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst1.Les(rm); - } - return RESULT_HANDLED; + ops[0xc4] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst1.Les(rm); } + return RESULT_HANDLED; }; /* LDS */ - ops[0xc5] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst1.Lds(rm); - } - return RESULT_HANDLED; + ops[0xc5] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst1.Lds(rm); } + return RESULT_HANDLED; }; /* MOV Eb,Ib */ - ops[0xc6] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst1.MovIb(Mod.eb(rm)); - } else { - prev.next = new Inst1.MovIb_mem(rm); - } - return RESULT_HANDLED; + ops[0xc6] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst1.MovIb(Mod.eb(rm)); + } else { + prev.next = new Inst1.MovIb_mem(rm); } + return RESULT_HANDLED; }; ops[0x2c6] = ops[0xc6]; /* MOV EW,Iw */ - ops[0xc7] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - if (rm >= 0xc0) { - prev.next = new Inst1.MovIw(Mod.ew(rm)); - } else { - prev.next = new Inst1.MovIw_mem(rm); - } - return RESULT_HANDLED; + ops[0xc7] = prev -> { + int rm=decode_fetchb(); + if (rm >= 0xc0) { + prev.next = new Inst1.MovIw(Mod.ew(rm)); + } else { + prev.next = new Inst1.MovIw_mem(rm); } + return RESULT_HANDLED; }; /* ENTER Iw,Ib */ - ops[0xc8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.EnterIwIb(); - return RESULT_HANDLED; - } + ops[0xc8] = prev -> { + prev.next = new Inst1.EnterIwIb(); + return RESULT_HANDLED; }; /* LEAVE */ - ops[0xc9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Leave(); - return RESULT_HANDLED; - } + ops[0xc9] = prev -> { + prev.next = new Inst1.Leave(); + return RESULT_HANDLED; }; /* RETF Iw */ - ops[0xca] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.RetfIw(); - return RESULT_JUMP; - } + ops[0xca] = prev -> { + prev.next = new Inst1.RetfIw(); + return RESULT_JUMP; }; /* RETF */ - ops[0xcb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Retf(); - return RESULT_JUMP; - } + ops[0xcb] = prev -> { + prev.next = new Inst1.Retf(); + return RESULT_JUMP; }; /* INT3 */ - ops[0xcc] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Int3(); - return RESULT_JUMP; - } + ops[0xcc] = prev -> { + prev.next = new Inst1.Int3(); + return RESULT_JUMP; }; ops[0x2cc] = ops[0xcc]; /* INT Ib */ - ops[0xcd] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.IntIb(); - return RESULT_JUMP; - } + ops[0xcd] = prev -> { + prev.next = new Inst1.IntIb(); + return RESULT_JUMP; }; ops[0x2cd] = ops[0xcd]; /* INTO */ - ops[0xce] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Int0(); - return RESULT_HANDLED; - } + ops[0xce] = prev -> { + prev.next = new Inst1.Int0(); + return RESULT_HANDLED; }; ops[0x2ce] = ops[0xce]; /* IRET */ - ops[0xcf] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.IRet(); - return RESULT_JUMP; - } + ops[0xcf] = prev -> { + prev.next = new Inst1.IRet(); + return RESULT_JUMP; }; /* GRP2 Eb,1 */ - ops[0xd0] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - switch (which) { - case 0x00:prev.next = new Grp2.ROLB_reg(rm, 1);break; - case 0x01:prev.next = new Grp2.RORB_reg(rm, 1);break; - case 0x02:prev.next = new Grp2.RCLB_reg(rm, 1);break; - case 0x03:prev.next = new Grp2.RCRB_reg(rm, 1);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLB_reg(rm, 1);break; - case 0x05:prev.next = new Grp2.SHRB_reg(rm, 1);break; - case 0x07:prev.next = new Grp2.SARB_reg(rm, 1);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - switch (which) { - case 0x00:prev.next = new Grp2.ROLB_mem(get_eaa, 1);break; - case 0x01:prev.next = new Grp2.RORB_mem(get_eaa, 1);break; - case 0x02:prev.next = new Grp2.RCLB_mem(get_eaa, 1);break; - case 0x03:prev.next = new Grp2.RCRB_mem(get_eaa, 1);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLB_mem(get_eaa, 1);break; - case 0x05:prev.next = new Grp2.SHRB_mem(get_eaa, 1);break; - case 0x07:prev.next = new Grp2.SARB_mem(get_eaa, 1);break; - } + ops[0xd0] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + switch (which) { + case 0x00:prev.next = new Grp2.ROLB_reg(rm, 1);break; + case 0x01:prev.next = new Grp2.RORB_reg(rm, 1);break; + case 0x02:prev.next = new Grp2.RCLB_reg(rm, 1);break; + case 0x03:prev.next = new Grp2.RCRB_reg(rm, 1);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLB_reg(rm, 1);break; + case 0x05:prev.next = new Grp2.SHRB_reg(rm, 1);break; + case 0x07:prev.next = new Grp2.SARB_reg(rm, 1);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + switch (which) { + case 0x00:prev.next = new Grp2.ROLB_mem(get_eaa, 1);break; + case 0x01:prev.next = new Grp2.RORB_mem(get_eaa, 1);break; + case 0x02:prev.next = new Grp2.RCLB_mem(get_eaa, 1);break; + case 0x03:prev.next = new Grp2.RCRB_mem(get_eaa, 1);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLB_mem(get_eaa, 1);break; + case 0x05:prev.next = new Grp2.SHRB_mem(get_eaa, 1);break; + case 0x07:prev.next = new Grp2.SARB_mem(get_eaa, 1);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2d0] = ops[0xd0]; /* GRP2 Ew,1 */ - ops[0xd1] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - int val = 1; - if (rm >= 0xc0) { - switch (which) { - case 0x00:prev.next = new Grp2.ROLW_reg(rm, val);break; - case 0x01:prev.next = new Grp2.RORW_reg(rm, val);break; - case 0x02:prev.next = new Grp2.RCLW_reg(rm, val);break; - case 0x03:prev.next = new Grp2.RCRW_reg(rm, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLW_reg(rm, val);break; - case 0x05:prev.next = new Grp2.SHRW_reg(rm, val);break; - case 0x07:prev.next = new Grp2.SARW_reg(rm, val);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - switch (which) { - case 0x00:prev.next = new Grp2.ROLW_mem(get_eaa, val);break; - case 0x01:prev.next = new Grp2.RORW_mem(get_eaa, val);break; - case 0x02:prev.next = new Grp2.RCLW_mem(get_eaa, val);break; - case 0x03:prev.next = new Grp2.RCRW_mem(get_eaa, val);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLW_mem(get_eaa, val);break; - case 0x05:prev.next = new Grp2.SHRW_mem(get_eaa, val);break; - case 0x07:prev.next = new Grp2.SARW_mem(get_eaa, val);break; - } + ops[0xd1] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + int val = 1; + if (rm >= 0xc0) { + switch (which) { + case 0x00:prev.next = new Grp2.ROLW_reg(rm, val);break; + case 0x01:prev.next = new Grp2.RORW_reg(rm, val);break; + case 0x02:prev.next = new Grp2.RCLW_reg(rm, val);break; + case 0x03:prev.next = new Grp2.RCRW_reg(rm, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLW_reg(rm, val);break; + case 0x05:prev.next = new Grp2.SHRW_reg(rm, val);break; + case 0x07:prev.next = new Grp2.SARW_reg(rm, val);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + switch (which) { + case 0x00:prev.next = new Grp2.ROLW_mem(get_eaa, val);break; + case 0x01:prev.next = new Grp2.RORW_mem(get_eaa, val);break; + case 0x02:prev.next = new Grp2.RCLW_mem(get_eaa, val);break; + case 0x03:prev.next = new Grp2.RCRW_mem(get_eaa, val);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLW_mem(get_eaa, val);break; + case 0x05:prev.next = new Grp2.SHRW_mem(get_eaa, val);break; + case 0x07:prev.next = new Grp2.SARW_mem(get_eaa, val);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* GRP2 Eb,CL */ - ops[0xd2] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - switch (which) { - case 0x00:prev.next = new Grp2.ROLB_reg_cl(rm);break; - case 0x01:prev.next = new Grp2.RORB_reg_cl(rm);break; - case 0x02:prev.next = new Grp2.RCLB_reg_cl(rm);break; - case 0x03:prev.next = new Grp2.RCRB_reg_cl(rm);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLB_reg_cl(rm);break; - case 0x05:prev.next = new Grp2.SHRB_reg_cl(rm);break; - case 0x07:prev.next = new Grp2.SARB_reg_cl(rm);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - switch (which) { - case 0x00:prev.next = new Grp2.ROLB_mem_cl(get_eaa);break; - case 0x01:prev.next = new Grp2.RORB_mem_cl(get_eaa);break; - case 0x02:prev.next = new Grp2.RCLB_mem_cl(get_eaa);break; - case 0x03:prev.next = new Grp2.RCRB_mem_cl(get_eaa);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLB_mem_cl(get_eaa);break; - case 0x05:prev.next = new Grp2.SHRB_mem_cl(get_eaa);break; - case 0x07:prev.next = new Grp2.SARB_mem_cl(get_eaa);break; - } + ops[0xd2] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + switch (which) { + case 0x00:prev.next = new Grp2.ROLB_reg_cl(rm);break; + case 0x01:prev.next = new Grp2.RORB_reg_cl(rm);break; + case 0x02:prev.next = new Grp2.RCLB_reg_cl(rm);break; + case 0x03:prev.next = new Grp2.RCRB_reg_cl(rm);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLB_reg_cl(rm);break; + case 0x05:prev.next = new Grp2.SHRB_reg_cl(rm);break; + case 0x07:prev.next = new Grp2.SARB_reg_cl(rm);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + switch (which) { + case 0x00:prev.next = new Grp2.ROLB_mem_cl(get_eaa);break; + case 0x01:prev.next = new Grp2.RORB_mem_cl(get_eaa);break; + case 0x02:prev.next = new Grp2.RCLB_mem_cl(get_eaa);break; + case 0x03:prev.next = new Grp2.RCRB_mem_cl(get_eaa);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLB_mem_cl(get_eaa);break; + case 0x05:prev.next = new Grp2.SHRB_mem_cl(get_eaa);break; + case 0x07:prev.next = new Grp2.SARB_mem_cl(get_eaa);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2d2] = ops[0xd2]; /* GRP2 Ew,CL */ - ops[0xd3] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - if (rm >= 0xc0) { - switch (which) { - case 0x00:prev.next = new Grp2.ROLW_reg_cl(rm);break; - case 0x01:prev.next = new Grp2.RORW_reg_cl(rm);break; - case 0x02:prev.next = new Grp2.RCLW_reg_cl(rm);break; - case 0x03:prev.next = new Grp2.RCRW_reg_cl(rm);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLW_reg_cl(rm);break; - case 0x05:prev.next = new Grp2.SHRW_reg_cl(rm);break; - case 0x07:prev.next = new Grp2.SARW_reg_cl(rm);break; - } - } else { - EaaBase get_eaa= Mod.getEaa(rm); - switch (which) { - case 0x00:prev.next = new Grp2.ROLW_mem_cl(get_eaa);break; - case 0x01:prev.next = new Grp2.RORW_mem_cl(get_eaa);break; - case 0x02:prev.next = new Grp2.RCLW_mem_cl(get_eaa);break; - case 0x03:prev.next = new Grp2.RCRW_mem_cl(get_eaa);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:prev.next = new Grp2.SHLW_mem_cl(get_eaa);break; - case 0x05:prev.next = new Grp2.SHRW_mem_cl(get_eaa);break; - case 0x07:prev.next = new Grp2.SARW_mem_cl(get_eaa);break; - } + ops[0xd3] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + if (rm >= 0xc0) { + switch (which) { + case 0x00:prev.next = new Grp2.ROLW_reg_cl(rm);break; + case 0x01:prev.next = new Grp2.RORW_reg_cl(rm);break; + case 0x02:prev.next = new Grp2.RCLW_reg_cl(rm);break; + case 0x03:prev.next = new Grp2.RCRW_reg_cl(rm);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLW_reg_cl(rm);break; + case 0x05:prev.next = new Grp2.SHRW_reg_cl(rm);break; + case 0x07:prev.next = new Grp2.SARW_reg_cl(rm);break; + } + } else { + EaaBase get_eaa= Mod.getEaa(rm); + switch (which) { + case 0x00:prev.next = new Grp2.ROLW_mem_cl(get_eaa);break; + case 0x01:prev.next = new Grp2.RORW_mem_cl(get_eaa);break; + case 0x02:prev.next = new Grp2.RCLW_mem_cl(get_eaa);break; + case 0x03:prev.next = new Grp2.RCRW_mem_cl(get_eaa);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:prev.next = new Grp2.SHLW_mem_cl(get_eaa);break; + case 0x05:prev.next = new Grp2.SHRW_mem_cl(get_eaa);break; + case 0x07:prev.next = new Grp2.SARW_mem_cl(get_eaa);break; } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; /* AAM Ib */ - ops[0xd4] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AamIb(); - return RESULT_HANDLED; - } + ops[0xd4] = prev -> { + prev.next = new Inst1.AamIb(); + return RESULT_HANDLED; }; ops[0x2d4] = ops[0xd4]; /* AAD Ib */ - ops[0xd5] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.AadIb(); - return RESULT_HANDLED; - } + ops[0xd5] = prev -> { + prev.next = new Inst1.AadIb(); + return RESULT_HANDLED; }; ops[0x2d5] = ops[0xd5]; /* SALC */ - ops[0xd6] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Salc(); - return RESULT_HANDLED; - } + ops[0xd6] = prev -> { + prev.next = new Inst1.Salc(); + return RESULT_HANDLED; }; ops[0x2d6] = ops[0xd6]; /* XLAT */ - ops[0xd7] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst1.Xlat32(); - } else { - prev.next = new Inst1.Xlat16(); - } - return RESULT_HANDLED; + ops[0xd7] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst1.Xlat32(); + } else { + prev.next = new Inst1.Xlat16(); } + return RESULT_HANDLED; }; ops[0x2d7] = ops[0xd7]; /* FPU ESC 0 */ - ops[0xd8] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU0_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FADD_ST0_STj(rm); break; - case 1: prev.next = new InstFPU.FMUL_ST0_STj(rm); break; - case 2: prev.next = new InstFPU.FCOM_STi(rm, false); break; - case 3: prev.next = new InstFPU.FCOM_STi(rm, true); break; - case 4: prev.next = new InstFPU.FSUB_ST0_STj(rm); break; - case 5: prev.next = new InstFPU.FSUBR_ST0_STj(rm); break; - case 6: prev.next = new InstFPU.FDIV_ST0_STj(rm); break; - case 7: prev.next = new InstFPU.FDIVR_ST0_STj(rm); break; - } + ops[0xd8] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU0_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FADD_ST0_STj(rm); break; + case 1: prev.next = new InstFPU.FMUL_ST0_STj(rm); break; + case 2: prev.next = new InstFPU.FCOM_STi(rm, false); break; + case 3: prev.next = new InstFPU.FCOM_STi(rm, true); break; + case 4: prev.next = new InstFPU.FSUB_ST0_STj(rm); break; + case 5: prev.next = new InstFPU.FSUBR_ST0_STj(rm); break; + case 6: prev.next = new InstFPU.FDIV_ST0_STj(rm); break; + case 7: prev.next = new InstFPU.FDIVR_ST0_STj(rm); break; } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU0_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU0_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FADD_SINGLE_REAL(rm); break; - case 1: prev.next = new InstFPU.FMUL_SINGLE_REAL(rm); break; - case 2: prev.next = new InstFPU.FCOM_SINGLE_REAL(rm, false); break; - case 3: prev.next = new InstFPU.FCOM_SINGLE_REAL(rm, true); break; - case 4: prev.next = new InstFPU.FSUB_SINGLE_REAL(rm); break; - case 5: prev.next = new InstFPU.FSUBR_SINGLE_REAL(rm); break; - case 6: prev.next = new InstFPU.FDIV_SINGLE_REAL(rm); break; - case 7: prev.next = new InstFPU.FDIVR_SINGLE_REAL(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FADD_SINGLE_REAL(rm); break; + case 1: prev.next = new InstFPU.FMUL_SINGLE_REAL(rm); break; + case 2: prev.next = new InstFPU.FCOM_SINGLE_REAL(rm, false); break; + case 3: prev.next = new InstFPU.FCOM_SINGLE_REAL(rm, true); break; + case 4: prev.next = new InstFPU.FSUB_SINGLE_REAL(rm); break; + case 5: prev.next = new InstFPU.FSUBR_SINGLE_REAL(rm); break; + case 6: prev.next = new InstFPU.FDIV_SINGLE_REAL(rm); break; + case 7: prev.next = new InstFPU.FDIVR_SINGLE_REAL(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2d8] = ops[0xd8]; /* FPU ESC 1 */ - ops[0xd9] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU1_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FLD_STi(rm); break; - case 1: prev.next = new InstFPU.FXCH_STi(rm); break; - case 2: prev.next = new InstFPU.FNOP(); break; - case 3: prev.next = new InstFPU.FST_STi(rm, true); break; - case 4: - { - switch (rm & 7) { - case 0: prev.next = new InstFPU.FCHS(); break; - case 1: prev.next = new InstFPU.FABS(); break; - case 2: prev.next = new Inst1.FPU1_normal(rm); break; - case 3: prev.next = new Inst1.FPU1_normal(rm); break; - case 4: prev.next = new InstFPU.FTST(); break; - case 5: prev.next = new InstFPU.FXAM(); break; - case 6: prev.next = new Inst1.FPU1_normal(rm); break; - case 7: prev.next = new Inst1.FPU1_normal(rm); break; - } - break; + ops[0xd9] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU1_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FLD_STi(rm); break; + case 1: prev.next = new InstFPU.FXCH_STi(rm); break; + case 2: prev.next = new InstFPU.FNOP(); break; + case 3: prev.next = new InstFPU.FST_STi(rm, true); break; + case 4: + { + switch (rm & 7) { + case 0: prev.next = new InstFPU.FCHS(); break; + case 1: prev.next = new InstFPU.FABS(); break; + case 2: prev.next = new Inst1.FPU1_normal(rm); break; + case 3: prev.next = new Inst1.FPU1_normal(rm); break; + case 4: prev.next = new InstFPU.FTST(); break; + case 5: prev.next = new InstFPU.FXAM(); break; + case 6: prev.next = new Inst1.FPU1_normal(rm); break; + case 7: prev.next = new Inst1.FPU1_normal(rm); break; } - case 5: - { - switch (rm & 7) { - case 0: prev.next = new InstFPU.FLD1(); break; - case 1: prev.next = new InstFPU.FLDL2T(); break; - case 2: prev.next = new InstFPU.FLDL2E(); break; - case 3: prev.next = new InstFPU.FLDPI(); break; - case 4: prev.next = new InstFPU.FLDLG2(); break; - case 5: prev.next = new InstFPU.FLDLN2(); break; - case 6: prev.next = new InstFPU.FLDZ(); break; - case 7: prev.next = new Inst1.FPU1_normal(rm); break; - } - break; + break; + } + case 5: + { + switch (rm & 7) { + case 0: prev.next = new InstFPU.FLD1(); break; + case 1: prev.next = new InstFPU.FLDL2T(); break; + case 2: prev.next = new InstFPU.FLDL2E(); break; + case 3: prev.next = new InstFPU.FLDPI(); break; + case 4: prev.next = new InstFPU.FLDLG2(); break; + case 5: prev.next = new InstFPU.FLDLN2(); break; + case 6: prev.next = new InstFPU.FLDZ(); break; + case 7: prev.next = new Inst1.FPU1_normal(rm); break; } - case 6: - { - switch (rm & 7) { - case 0: prev.next = new InstFPU.F2XM1(); break; - case 1: prev.next = new InstFPU.FYL2X(); break; - case 2: prev.next = new InstFPU.FPTAN(); break; - case 3: prev.next = new InstFPU.FPATAN(); break; - case 4: prev.next = new InstFPU.FXTRACT(); break; - case 5: prev.next = new InstFPU.FPREM(true); break; - case 6: prev.next = new InstFPU.FDECSTP(); break; - case 7: prev.next = new InstFPU.FINCSTP(); break; - } - break; + break; + } + case 6: + { + switch (rm & 7) { + case 0: prev.next = new InstFPU.F2XM1(); break; + case 1: prev.next = new InstFPU.FYL2X(); break; + case 2: prev.next = new InstFPU.FPTAN(); break; + case 3: prev.next = new InstFPU.FPATAN(); break; + case 4: prev.next = new InstFPU.FXTRACT(); break; + case 5: prev.next = new InstFPU.FPREM(true); break; + case 6: prev.next = new InstFPU.FDECSTP(); break; + case 7: prev.next = new InstFPU.FINCSTP(); break; } - case 7: - { - switch (rm & 7) { - case 0: prev.next = new InstFPU.FPREM(false); break; - case 1: prev.next = new InstFPU.FYL2XP1(); break; - case 2: prev.next = new InstFPU.FSQRT(); break; - case 3: prev.next = new InstFPU.FSINCOS(); break; - case 4: prev.next = new InstFPU.FRNDINT(); break; - case 5: prev.next = new InstFPU.FSCALE(); break; - case 6: prev.next = new InstFPU.FSIN(); break; - case 7: prev.next = new InstFPU.FCOS(); break; - } - break; + break; + } + case 7: + { + switch (rm & 7) { + case 0: prev.next = new InstFPU.FPREM(false); break; + case 1: prev.next = new InstFPU.FYL2XP1(); break; + case 2: prev.next = new InstFPU.FSQRT(); break; + case 3: prev.next = new InstFPU.FSINCOS(); break; + case 4: prev.next = new InstFPU.FRNDINT(); break; + case 5: prev.next = new InstFPU.FSCALE(); break; + case 6: prev.next = new InstFPU.FSIN(); break; + case 7: prev.next = new InstFPU.FCOS(); break; } + break; } } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU1_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU1_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FLD_SINGLE_REAL(rm); break; - case 1: prev.next = new Inst1.FPU2_ea(rm); break; - case 2: prev.next = new InstFPU.FST_SINGLE_REAL(rm, false); break; - case 3: prev.next = new InstFPU.FST_SINGLE_REAL(rm, true); break; - case 4: prev.next = new InstFPU.FLDENV(rm); break; - case 5: prev.next = new InstFPU.FLDCW(rm); break; - case 6: prev.next = new InstFPU.FNSTENV(rm); break; - case 7: prev.next = new InstFPU.FNSTCW(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FLD_SINGLE_REAL(rm); break; + case 1: prev.next = new Inst1.FPU2_ea(rm); break; + case 2: prev.next = new InstFPU.FST_SINGLE_REAL(rm, false); break; + case 3: prev.next = new InstFPU.FST_SINGLE_REAL(rm, true); break; + case 4: prev.next = new InstFPU.FLDENV(rm); break; + case 5: prev.next = new InstFPU.FLDCW(rm); break; + case 6: prev.next = new InstFPU.FNSTENV(rm); break; + case 7: prev.next = new InstFPU.FNSTCW(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2d9] = ops[0xd9]; /* FPU ESC 2 */ - ops[0xda] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU2_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FCMOV_ST0_STj_CF(rm); break; - case 1: prev.next = new InstFPU.FCMOV_ST0_STj_ZF(rm); break; - case 2: prev.next = new InstFPU.FCMOV_ST0_STj_CF_OR_ZF(rm); break; - case 3: prev.next = new InstFPU.FCMOV_ST0_STj_PF(rm); break; - case 5: - { - if ((rm & 7)==5) { - prev.next = new InstFPU.FUCOMPP(); - } else { - prev.next = new Inst1.FPU2_normal(rm); - } - } - default: + ops[0xda] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU2_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FCMOV_ST0_STj_CF(rm); break; + case 1: prev.next = new InstFPU.FCMOV_ST0_STj_ZF(rm); break; + case 2: prev.next = new InstFPU.FCMOV_ST0_STj_CF_OR_ZF(rm); break; + case 3: prev.next = new InstFPU.FCMOV_ST0_STj_PF(rm); break; + case 5: + { + if ((rm & 7)==5) { + prev.next = new InstFPU.FUCOMPP(); + } else { prev.next = new Inst1.FPU2_normal(rm); + } } + default: + prev.next = new Inst1.FPU2_normal(rm); } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU2_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU2_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FIADD_DWORD_INTEGER(rm); break; - case 1: prev.next = new InstFPU.FIMUL_DWORD_INTEGER(rm); break; - case 2: prev.next = new InstFPU.FICOM_DWORD_INTEGER(rm, false); break; - case 3: prev.next = new InstFPU.FICOM_DWORD_INTEGER(rm, true); break; - case 4: prev.next = new InstFPU.FISUB_DWORD_INTEGER(rm); break; - case 5: prev.next = new InstFPU.FISUBR_DWORD_INTEGER(rm); break; - case 6: prev.next = new InstFPU.FIDIV_DWORD_INTEGER(rm); break; - case 7: prev.next = new InstFPU.FIDIVR_DWORD_INTEGER(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FIADD_DWORD_INTEGER(rm); break; + case 1: prev.next = new InstFPU.FIMUL_DWORD_INTEGER(rm); break; + case 2: prev.next = new InstFPU.FICOM_DWORD_INTEGER(rm, false); break; + case 3: prev.next = new InstFPU.FICOM_DWORD_INTEGER(rm, true); break; + case 4: prev.next = new InstFPU.FISUB_DWORD_INTEGER(rm); break; + case 5: prev.next = new InstFPU.FISUBR_DWORD_INTEGER(rm); break; + case 6: prev.next = new InstFPU.FIDIV_DWORD_INTEGER(rm); break; + case 7: prev.next = new InstFPU.FIDIVR_DWORD_INTEGER(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2da] = ops[0xda]; /* FPU ESC 3 */ - ops[0xdb] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU3_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FCMOV_ST0_STj_NCF(rm); break; - case 1: prev.next = new InstFPU.FCMOV_ST0_STj_NZF(rm); break; - case 2: prev.next = new InstFPU.FCMOV_ST0_STj_NCF_AND_NZF(rm); break; - case 3: prev.next = new InstFPU.FCMOV_ST0_STj_NPF(rm); break; - case 4: - { - switch (rm & 7) { - case 2:prev.next = new InstFPU.FNCLEX(); break; - case 3:prev.next = new InstFPU.FNINIT(); break; - default:prev.next = new Inst1.FPU3_normal(rm); - - } - break; + ops[0xdb] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU3_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FCMOV_ST0_STj_NCF(rm); break; + case 1: prev.next = new InstFPU.FCMOV_ST0_STj_NZF(rm); break; + case 2: prev.next = new InstFPU.FCMOV_ST0_STj_NCF_AND_NZF(rm); break; + case 3: prev.next = new InstFPU.FCMOV_ST0_STj_NPF(rm); break; + case 4: + { + switch (rm & 7) { + case 2:prev.next = new InstFPU.FNCLEX(); break; + case 3:prev.next = new InstFPU.FNINIT(); break; + default:prev.next = new Inst1.FPU3_normal(rm); + } - case 5: prev.next = new InstFPU.FUCOMI_ST0_STj(rm, false); break; - case 6: prev.next = new InstFPU.FCOMI_ST0_STj(rm, false); break; - default: - prev.next = new Inst1.FPU3_normal(rm); + break; } + case 5: prev.next = new InstFPU.FUCOMI_ST0_STj(rm, false); break; + case 6: prev.next = new InstFPU.FCOMI_ST0_STj(rm, false); break; + default: + prev.next = new Inst1.FPU3_normal(rm); } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU3_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU3_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FILD_DWORD_INTEGER(rm); break; - case 1: prev.next = new InstFPU.FISTTP32(rm); break; - case 2: prev.next = new InstFPU.FIST_DWORD_INTEGER(rm, false); break; - case 3: prev.next = new InstFPU.FIST_DWORD_INTEGER(rm, true); break; - case 4: prev.next = new Inst1.FPU3_ea(rm); break; - case 5: prev.next = new InstFPU.FLD_EXTENDED_REAL(rm); break; - case 6: prev.next = new Inst1.FPU3_ea(rm); break; - case 7: prev.next = new InstFPU.FSTP_EXTENDED_REAL(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FILD_DWORD_INTEGER(rm); break; + case 1: prev.next = new InstFPU.FISTTP32(rm); break; + case 2: prev.next = new InstFPU.FIST_DWORD_INTEGER(rm, false); break; + case 3: prev.next = new InstFPU.FIST_DWORD_INTEGER(rm, true); break; + case 4: prev.next = new Inst1.FPU3_ea(rm); break; + case 5: prev.next = new InstFPU.FLD_EXTENDED_REAL(rm); break; + case 6: prev.next = new Inst1.FPU3_ea(rm); break; + case 7: prev.next = new InstFPU.FSTP_EXTENDED_REAL(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2db] = ops[0xdb]; /* FPU ESC 4 */ - ops[0xdc] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU4_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FADD_STi_ST0(rm, false); break; - case 1: prev.next = new InstFPU.FMUL_STi_ST0(rm, false); break; - case 2: prev.next = new InstFPU.FCOM_STi(rm, false); break; - case 3: prev.next = new InstFPU.FCOM_STi(rm, true); break; - case 4: prev.next = new InstFPU.FSUBR_STi_ST0(rm, false); break; - case 5: prev.next = new InstFPU.FSUB_STi_ST0(rm, false); break; - case 6: prev.next = new InstFPU.FDIVR_STi_ST0(rm, false); break; - case 7: prev.next = new InstFPU.FDIV_STi_ST0(rm, false); break; - } + ops[0xdc] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU4_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FADD_STi_ST0(rm, false); break; + case 1: prev.next = new InstFPU.FMUL_STi_ST0(rm, false); break; + case 2: prev.next = new InstFPU.FCOM_STi(rm, false); break; + case 3: prev.next = new InstFPU.FCOM_STi(rm, true); break; + case 4: prev.next = new InstFPU.FSUBR_STi_ST0(rm, false); break; + case 5: prev.next = new InstFPU.FSUB_STi_ST0(rm, false); break; + case 6: prev.next = new InstFPU.FDIVR_STi_ST0(rm, false); break; + case 7: prev.next = new InstFPU.FDIV_STi_ST0(rm, false); break; } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU4_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU4_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FADD_DOUBLE_REAL(rm); break; - case 1: prev.next = new InstFPU.FMUL_DOUBLE_REAL(rm); break; - case 2: prev.next = new InstFPU.FCOM_DOUBLE_REAL(rm, false); break; - case 3: prev.next = new InstFPU.FCOM_DOUBLE_REAL(rm, true); break; - case 4: prev.next = new InstFPU.FSUB_DOUBLE_REAL(rm); break; - case 5: prev.next = new InstFPU.FSUBR_DOUBLE_REAL(rm); break; - case 6: prev.next = new InstFPU.FDIV_DOUBLE_REAL(rm); break; - case 7: prev.next = new InstFPU.FDIVR_DOUBLE_REAL(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FADD_DOUBLE_REAL(rm); break; + case 1: prev.next = new InstFPU.FMUL_DOUBLE_REAL(rm); break; + case 2: prev.next = new InstFPU.FCOM_DOUBLE_REAL(rm, false); break; + case 3: prev.next = new InstFPU.FCOM_DOUBLE_REAL(rm, true); break; + case 4: prev.next = new InstFPU.FSUB_DOUBLE_REAL(rm); break; + case 5: prev.next = new InstFPU.FSUBR_DOUBLE_REAL(rm); break; + case 6: prev.next = new InstFPU.FDIV_DOUBLE_REAL(rm); break; + case 7: prev.next = new InstFPU.FDIVR_DOUBLE_REAL(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2dc] = ops[0xdc]; /* FPU ESC 5 */ - ops[0xdd] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU5_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FFREE_STi(rm); break; - case 1: prev.next = new InstFPU.FXCH_STi(rm); break; - case 2: prev.next = new InstFPU.FST_STi(rm, false); break; - case 3: prev.next = new InstFPU.FST_STi(rm, true); break; - case 4: prev.next = new InstFPU.FUCOM_STi(rm, false); break; - case 5: prev.next = new InstFPU.FUCOM_STi(rm, true); break; - default: prev.next = new Inst1.FPU5_normal(rm); - } + ops[0xdd] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU5_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FFREE_STi(rm); break; + case 1: prev.next = new InstFPU.FXCH_STi(rm); break; + case 2: prev.next = new InstFPU.FST_STi(rm, false); break; + case 3: prev.next = new InstFPU.FST_STi(rm, true); break; + case 4: prev.next = new InstFPU.FUCOM_STi(rm, false); break; + case 5: prev.next = new InstFPU.FUCOM_STi(rm, true); break; + default: prev.next = new Inst1.FPU5_normal(rm); } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU5_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU5_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FLD_DOUBLE_REAL(rm); break; - case 1: prev.next = new InstFPU.FISTTP64(rm); break; - case 2: prev.next = new InstFPU.FST_DOUBLE_REAL(rm, false); break; - case 3: prev.next = new InstFPU.FST_DOUBLE_REAL(rm, true); break; - case 4: prev.next = new InstFPU.FRSTOR(rm); break; - case 5: prev.next = new Inst1.FPU5_ea(rm); break; - case 6: prev.next = new InstFPU.FNSAVE(rm); break; - case 7: prev.next = new InstFPU.FNSTSW(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FLD_DOUBLE_REAL(rm); break; + case 1: prev.next = new InstFPU.FISTTP64(rm); break; + case 2: prev.next = new InstFPU.FST_DOUBLE_REAL(rm, false); break; + case 3: prev.next = new InstFPU.FST_DOUBLE_REAL(rm, true); break; + case 4: prev.next = new InstFPU.FRSTOR(rm); break; + case 5: prev.next = new Inst1.FPU5_ea(rm); break; + case 6: prev.next = new InstFPU.FNSAVE(rm); break; + case 7: prev.next = new InstFPU.FNSTSW(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2dd] = ops[0xdd]; /* FPU ESC 6 */ - ops[0xde] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU6_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FADD_STi_ST0(rm, true); break; - case 1: prev.next = new InstFPU.FMUL_STi_ST0(rm, true); break; - case 2: prev.next = new InstFPU.FCOM_STi(rm, true); break; - case 3: - { - if ((rm & 7) == 1) - prev.next = new InstFPU.FCOMPP(); - else - prev.next = new Inst1.FPU6_normal(rm); - } - break; - case 4: prev.next = new InstFPU.FSUBR_STi_ST0(rm, true); break; - case 5: prev.next = new InstFPU.FSUB_STi_ST0(rm, true); break; - case 6: prev.next = new InstFPU.FDIVR_STi_ST0(rm, true); break; - case 7: prev.next = new InstFPU.FDIV_STi_ST0(rm, true); break; + ops[0xde] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU6_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FADD_STi_ST0(rm, true); break; + case 1: prev.next = new InstFPU.FMUL_STi_ST0(rm, true); break; + case 2: prev.next = new InstFPU.FCOM_STi(rm, true); break; + case 3: + { + if ((rm & 7) == 1) + prev.next = new InstFPU.FCOMPP(); + else + prev.next = new Inst1.FPU6_normal(rm); } + break; + case 4: prev.next = new InstFPU.FSUBR_STi_ST0(rm, true); break; + case 5: prev.next = new InstFPU.FSUB_STi_ST0(rm, true); break; + case 6: prev.next = new InstFPU.FDIVR_STi_ST0(rm, true); break; + case 7: prev.next = new InstFPU.FDIV_STi_ST0(rm, true); break; } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU6_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU6_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FIADD_WORD_INTEGER(rm); break; - case 1: prev.next = new InstFPU.FIMUL_WORD_INTEGER(rm); break; - case 2: prev.next = new InstFPU.FICOM_WORD_INTEGER(rm, false); break; - case 3: prev.next = new InstFPU.FICOM_WORD_INTEGER(rm, true); break; - case 4: prev.next = new InstFPU.FISUB_WORD_INTEGER(rm); break; - case 5: prev.next = new InstFPU.FISUBR_WORD_INTEGER(rm); break; - case 6: prev.next = new InstFPU.FIDIV_WORD_INTEGER(rm); break; - case 7: prev.next = new InstFPU.FIDIVR_WORD_INTEGER(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FIADD_WORD_INTEGER(rm); break; + case 1: prev.next = new InstFPU.FIMUL_WORD_INTEGER(rm); break; + case 2: prev.next = new InstFPU.FICOM_WORD_INTEGER(rm, false); break; + case 3: prev.next = new InstFPU.FICOM_WORD_INTEGER(rm, true); break; + case 4: prev.next = new InstFPU.FISUB_WORD_INTEGER(rm); break; + case 5: prev.next = new InstFPU.FISUBR_WORD_INTEGER(rm); break; + case 6: prev.next = new InstFPU.FIDIV_WORD_INTEGER(rm); break; + case 7: prev.next = new InstFPU.FIDIVR_WORD_INTEGER(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2de] = ops[0xde]; /* FPU ESC 7 */ - ops[0xdf] = new Decode() { - final public int call(Op prev) { - int rm = decode_fetchb(); - if (rm >= 0xc0) { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU7_normal(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FFREEP_STi(rm); break; - case 1: prev.next = new InstFPU.FXCH_STi(rm); break; - case 2: - case 3: prev.next = new InstFPU.FST_STi(rm, true); break; - case 4: - { - if ((rm & 7)==0) - prev.next = new InstFPU.FNSTSW_AX(); - else - prev.next = new Inst1.FPU7_normal(rm); - } - break; - case 5: prev.next = new InstFPU.FUCOMI_ST0_STj(rm, true); break; - case 6: prev.next = new InstFPU.FCOMI_ST0_STj(rm, true); break; - case 7: prev.next = new Inst1.FPU7_normal(rm); break; + ops[0xdf] = prev -> { + int rm = decode_fetchb(); + if (rm >= 0xc0) { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU7_normal(rm); + } else { + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FFREEP_STi(rm); break; + case 1: prev.next = new InstFPU.FXCH_STi(rm); break; + case 2: + case 3: prev.next = new InstFPU.FST_STi(rm, true); break; + case 4: + { + if ((rm & 7)==0) + prev.next = new InstFPU.FNSTSW_AX(); + else + prev.next = new Inst1.FPU7_normal(rm); } + break; + case 5: prev.next = new InstFPU.FUCOMI_ST0_STj(rm, true); break; + case 6: prev.next = new InstFPU.FCOMI_ST0_STj(rm, true); break; + case 7: prev.next = new Inst1.FPU7_normal(rm); break; } + } + } else { + if (FPU.softFPU || !FPU.shouldInline) { + prev.next = new Inst1.FPU7_ea(rm); } else { - if (FPU.softFPU || !FPU.shouldInline) { - prev.next = new Inst1.FPU7_ea(rm); - } else { - switch ((rm >> 3) & 7) { - case 0: prev.next = new InstFPU.FILD_WORD_INTEGER(rm); break; - case 1: prev.next = new InstFPU.FISTTP16(rm); break; - case 2: prev.next = new InstFPU.FIST_WORD_INTEGER(rm, false); break; - case 3: prev.next = new InstFPU.FIST_WORD_INTEGER(rm, true); break; - case 4: prev.next = new InstFPU.FBLD_PACKED_BCD(rm); break; - case 5: prev.next = new InstFPU.FILD_QWORD_INTEGER(rm); break; - case 6: prev.next = new InstFPU.FBSTP_PACKED_BCD(rm); break; - case 7: prev.next = new InstFPU.FISTP_QWORD_INTEGER(rm); break; - } + switch ((rm >> 3) & 7) { + case 0: prev.next = new InstFPU.FILD_WORD_INTEGER(rm); break; + case 1: prev.next = new InstFPU.FISTTP16(rm); break; + case 2: prev.next = new InstFPU.FIST_WORD_INTEGER(rm, false); break; + case 3: prev.next = new InstFPU.FIST_WORD_INTEGER(rm, true); break; + case 4: prev.next = new InstFPU.FBLD_PACKED_BCD(rm); break; + case 5: prev.next = new InstFPU.FILD_QWORD_INTEGER(rm); break; + case 6: prev.next = new InstFPU.FBSTP_PACKED_BCD(rm); break; + case 7: prev.next = new InstFPU.FISTP_QWORD_INTEGER(rm); break; } } - return RESULT_HANDLED; } + return RESULT_HANDLED; }; ops[0x2df] = ops[0xdf]; /* LOOPNZ */ - ops[0xe0] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst1.Loopnz32(); - } else { - prev.next = new Inst1.Loopnz16(); - } - return RESULT_JUMP; + ops[0xe0] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst1.Loopnz32(); + } else { + prev.next = new Inst1.Loopnz16(); } + return RESULT_JUMP; }; /* LOOPZ */ - ops[0xe1] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst1.Loopz32(); - } else { - prev.next = new Inst1.Loopz16(); - } - return RESULT_JUMP; + ops[0xe1] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst1.Loopz32(); + } else { + prev.next = new Inst1.Loopz16(); } + return RESULT_JUMP; }; /* LOOP */ - ops[0xe2] = new Decode() { - final public int call(Op prev) { - if ((prefixes & Core.PREFIX_ADDR)!=0) { - prev.next = new Inst1.Loop32(); - } else { - prev.next = new Inst1.Loop16(); - } - return RESULT_JUMP; + ops[0xe2] = prev -> { + if ((prefixes & Core.PREFIX_ADDR)!=0) { + prev.next = new Inst1.Loop32(); + } else { + prev.next = new Inst1.Loop16(); } + return RESULT_JUMP; }; /* JCXZ */ - ops[0xe3] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Jcxz(AddrMaskTable1[prefixes & Core.PREFIX_ADDR]); - return RESULT_JUMP; - } + ops[0xe3] = prev -> { + prev.next = new Inst1.Jcxz(AddrMaskTable1[prefixes & Core.PREFIX_ADDR]); + return RESULT_JUMP; }; /* IN AL,Ib */ - ops[0xe4] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.InAlIb(); - return RESULT_HANDLED; - } + ops[0xe4] = prev -> { + prev.next = new Inst1.InAlIb(); + return RESULT_HANDLED; }; ops[0x2e4] = ops[0xe4]; /* IN AX,Ib */ - ops[0xe5] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.InAxIb(); - return RESULT_HANDLED; - } + ops[0xe5] = prev -> { + prev.next = new Inst1.InAxIb(); + return RESULT_HANDLED; }; /* OUT Ib,AL */ - ops[0xe6] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.OutAlIb(); - return RESULT_HANDLED; - } + ops[0xe6] = prev -> { + prev.next = new Inst1.OutAlIb(); + return RESULT_HANDLED; }; ops[0x2e6] = ops[0xe6]; /* OUT Ib,AX */ - ops[0xe7] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.OutAxIb(); - return RESULT_HANDLED; - } + ops[0xe7] = prev -> { + prev.next = new Inst1.OutAxIb(); + return RESULT_HANDLED; }; /* CALL Jw */ - ops[0xe8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.CallJw(); - return RESULT_JUMP; - } + ops[0xe8] = prev -> { + prev.next = new Inst1.CallJw(); + return RESULT_JUMP; }; /* JMP Jw */ - ops[0xe9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JmpJw(); - return RESULT_JUMP; - } + ops[0xe9] = prev -> { + prev.next = new Inst1.JmpJw(); + return RESULT_JUMP; }; /* JMP Ap */ - ops[0xea] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JmpAp(); - return RESULT_JUMP; - } + ops[0xea] = prev -> { + prev.next = new Inst1.JmpAp(); + return RESULT_JUMP; }; /* JMP Jb */ - ops[0xeb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.JmpJb(); - return RESULT_JUMP; - } + ops[0xeb] = prev -> { + prev.next = new Inst1.JmpJb(); + return RESULT_JUMP; }; /* IN AL,DX */ - ops[0xec] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.InAlDx(); - return RESULT_HANDLED; - } + ops[0xec] = prev -> { + prev.next = new Inst1.InAlDx(); + return RESULT_HANDLED; }; ops[0x2ec] = ops[0xec]; /* IN AX,DX */ - ops[0xed] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.InAxDx(); - return RESULT_HANDLED; - } + ops[0xed] = prev -> { + prev.next = new Inst1.InAxDx(); + return RESULT_HANDLED; }; /* OUT DX,AL */ - ops[0xee] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.OutAlDx(); - return RESULT_HANDLED; - } + ops[0xee] = prev -> { + prev.next = new Inst1.OutAlDx(); + return RESULT_HANDLED; }; ops[0x2ee] = ops[0xee]; /* OUT DX,AX */ - ops[0xef] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.OutAxDx(); - return RESULT_HANDLED; - } + ops[0xef] = prev -> { + prev.next = new Inst1.OutAxDx(); + return RESULT_HANDLED; }; /* LOCK */ - ops[0xf0] = new Decode() { - final public int call(Op prev) { - // :TODO: check for illegal combinations like in the normal core - return RESULT_CONTINUE; - } + ops[0xf0] = prev -> { + // :TODO: check for illegal combinations like in the normal core + return RESULT_CONTINUE; }; ops[0x2f0] = ops[0xf0]; /* ICEBP */ - ops[0xf1] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Icebp(); - return RESULT_JUMP; - } + ops[0xf1] = prev -> { + prev.next = new Inst1.Icebp(); + return RESULT_JUMP; }; ops[0x2f1] = ops[0xf1]; /* REPNZ */ - ops[0xf2] = new Decode() { - final public int call(Op prev) { - prefixes|=Core.PREFIX_REP; - Core.rep_zero = false; - return RESULT_CONTINUE; - } + ops[0xf2] = prev -> { + prefixes|=Core.PREFIX_REP; + Core.rep_zero = false; + return RESULT_CONTINUE; }; ops[0x2f2] = ops[0xf2]; /* REPZ */ - ops[0xf3] = new Decode() { - final public int call(Op prev) { - prefixes|=Core.PREFIX_REP; - Core.rep_zero = true; - return RESULT_CONTINUE; - } + ops[0xf3] = prev -> { + prefixes|=Core.PREFIX_REP; + Core.rep_zero = true; + return RESULT_CONTINUE; }; ops[0x2f3] = ops[0xf3]; /* HLT */ - ops[0xf4] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Hlt(); - return RESULT_JUMP; - } + ops[0xf4] = prev -> { + prev.next = new Inst1.Hlt(); + return RESULT_JUMP; }; ops[0x2f4] = ops[0xf4]; /* CMC */ - ops[0xf5] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Cmc(); - return RESULT_HANDLED; - } + ops[0xf5] = prev -> { + prev.next = new Inst1.Cmc(); + return RESULT_HANDLED; }; ops[0x2f5] = ops[0xf5]; /* GRP3 Eb(,Ib) */ - ops[0xf6] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* TEST Eb,Ib */ - case 0x01: /* TEST Eb,Ib Undocumented*/ - if (rm >= 0xc0 ) { - prev.next = new Grp3.Testb_reg(rm); - } - else { - prev.next = new Grp3.Testb_mem(rm); - } - break; - case 0x02: /* NOT Eb */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.NotEb_reg(rm); - } else { - prev.next = new Grp3.NotEb_mem(rm); - } - break; - case 0x03: /* NEG Eb */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.NegEb_reg(rm); - } else { - prev.next = new Grp3.NegEb_mem(rm); - } - break; - case 0x04: /* MUL AL,Eb */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.MulAlEb_reg(rm); - } else { - prev.next = new Grp3.MulAlEb_mem(rm); - } - break; - case 0x05: /* IMUL AL,Eb */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.IMulAlEb_reg(rm); - } else { - prev.next = new Grp3.IMulAlEb_mem(rm); - } - break; - case 0x06: /* DIV Eb */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.DivAlEb_reg(rm); - } else { - prev.next = new Grp3.DivAlEb_mem(rm); - } - break; - case 0x07: /* IDIV Eb */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.IDivAlEb_reg(rm); - } else { - prev.next = new Grp3.IDivAlEb_mem(rm); - } - break; + ops[0xf6] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* TEST Eb,Ib */ + case 0x01: /* TEST Eb,Ib Undocumented*/ + if (rm >= 0xc0 ) { + prev.next = new Grp3.Testb_reg(rm); + } + else { + prev.next = new Grp3.Testb_mem(rm); + } + break; + case 0x02: /* NOT Eb */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.NotEb_reg(rm); + } else { + prev.next = new Grp3.NotEb_mem(rm); + } + break; + case 0x03: /* NEG Eb */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.NegEb_reg(rm); + } else { + prev.next = new Grp3.NegEb_mem(rm); + } + break; + case 0x04: /* MUL AL,Eb */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.MulAlEb_reg(rm); + } else { + prev.next = new Grp3.MulAlEb_mem(rm); + } + break; + case 0x05: /* IMUL AL,Eb */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.IMulAlEb_reg(rm); + } else { + prev.next = new Grp3.IMulAlEb_mem(rm); + } + break; + case 0x06: /* DIV Eb */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.DivAlEb_reg(rm); + } else { + prev.next = new Grp3.DivAlEb_mem(rm); + } + break; + case 0x07: /* IDIV Eb */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.IDivAlEb_reg(rm); + } else { + prev.next = new Grp3.IDivAlEb_mem(rm); } - return RESULT_HANDLED; + break; } + return RESULT_HANDLED; }; ops[0x2f6] = ops[0xf6]; /* GRP3 Ew(,Iw) */ - ops[0xf7] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* TEST Ew,Iw */ - case 0x01: /* TEST Ew,Iw Undocumented*/ - if (rm >= 0xc0 ) { - prev.next = new Grp3.Testw_reg(rm); - } - else { - prev.next = new Grp3.Testw_mem(rm); - } - break; - case 0x02: /* NOT Ew */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.NotEw_reg(rm); - } else { - prev.next = new Grp3.NotEw_mem(rm); - } - break; - case 0x03: /* NEG Ew */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.NegEw_reg(rm); - } else { - prev.next = new Grp3.NegEw_mem(rm); - } - break; - case 0x04: /* MUL AX,Ew */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.MulAxEw_reg(rm); - } else { - prev.next = new Grp3.MulAxEw_mem(rm); - } - break; - case 0x05: /* IMUL AX,Ew */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.IMulAxEw_reg(rm); - } else { - prev.next = new Grp3.IMulAxEw_mem(rm); - } - break; - case 0x06: /* DIV Ew */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.DivAxEw_reg(rm); - } else { - prev.next = new Grp3.DivAxEw_mem(rm); - } - break; - case 0x07: /* IDIV Ew */ - if (rm >= 0xc0 ) { - prev.next = new Grp3.IDivAxEw_reg(rm); - } else { - prev.next = new Grp3.IDivAxEw_mem(rm); - } - break; + ops[0xf7] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* TEST Ew,Iw */ + case 0x01: /* TEST Ew,Iw Undocumented*/ + if (rm >= 0xc0 ) { + prev.next = new Grp3.Testw_reg(rm); + } + else { + prev.next = new Grp3.Testw_mem(rm); } - return RESULT_HANDLED; + break; + case 0x02: /* NOT Ew */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.NotEw_reg(rm); + } else { + prev.next = new Grp3.NotEw_mem(rm); + } + break; + case 0x03: /* NEG Ew */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.NegEw_reg(rm); + } else { + prev.next = new Grp3.NegEw_mem(rm); + } + break; + case 0x04: /* MUL AX,Ew */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.MulAxEw_reg(rm); + } else { + prev.next = new Grp3.MulAxEw_mem(rm); + } + break; + case 0x05: /* IMUL AX,Ew */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.IMulAxEw_reg(rm); + } else { + prev.next = new Grp3.IMulAxEw_mem(rm); + } + break; + case 0x06: /* DIV Ew */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.DivAxEw_reg(rm); + } else { + prev.next = new Grp3.DivAxEw_mem(rm); + } + break; + case 0x07: /* IDIV Ew */ + if (rm >= 0xc0 ) { + prev.next = new Grp3.IDivAxEw_reg(rm); + } else { + prev.next = new Grp3.IDivAxEw_mem(rm); + } + break; } + return RESULT_HANDLED; }; /* CLC */ - ops[0xf8] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Clc(); - return RESULT_HANDLED; - } + ops[0xf8] = prev -> { + prev.next = new Inst1.Clc(); + return RESULT_HANDLED; }; ops[0x2f8] = ops[0xf8]; /* STC */ - ops[0xf9] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Stc(); - return RESULT_HANDLED; - } + ops[0xf9] = prev -> { + prev.next = new Inst1.Stc(); + return RESULT_HANDLED; }; ops[0x2f9] = ops[0xf9]; /* CLI */ - ops[0xfa] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Cli(); - return RESULT_HANDLED; - } + ops[0xfa] = prev -> { + prev.next = new Inst1.Cli(); + return RESULT_HANDLED; }; ops[0x2fa] = ops[0xfa]; /* STI */ - ops[0xfb] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Sti(); - return RESULT_HANDLED; - } + ops[0xfb] = prev -> { + prev.next = new Inst1.Sti(); + return RESULT_HANDLED; }; ops[0x2fb] = ops[0xfb]; /* CLD */ - ops[0xfc] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Cld(); - return RESULT_HANDLED; - } + ops[0xfc] = prev -> { + prev.next = new Inst1.Cld(); + return RESULT_HANDLED; }; ops[0x2fc] = ops[0xfc]; /* STD */ - ops[0xfd] = new Decode() { - final public int call(Op prev) { - prev.next = new Inst1.Std(); - return RESULT_HANDLED; - } + ops[0xfd] = prev -> { + prev.next = new Inst1.Std(); + return RESULT_HANDLED; }; ops[0x2fd] = ops[0xfd]; /* GRP4 Eb */ - ops[0xfe] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* INC Eb */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.Incb_reg(rm); - } - else { - prev.next = new Inst1.Incb_mem(rm); - } - break; - case 0x01: /* DEC Eb */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.Decb_reg(rm); - } - else { - prev.next = new Inst1.Decb_mem(rm); - } - break; - case 0x07: /* CallBack */ - prev.next = new Inst1.Callback(decode_fetchw()); - return RESULT_CALLBACK; - default: - prev.next = new Inst1.Illegal("Illegal GRP4 Call "+((rm>>3) & 7)); - return RESULT_JUMP; + ops[0xfe] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* INC Eb */ + if (rm >= 0xc0 ) { + prev.next = new Inst1.Incb_reg(rm); } - return RESULT_HANDLED; + else { + prev.next = new Inst1.Incb_mem(rm); + } + break; + case 0x01: /* DEC Eb */ + if (rm >= 0xc0 ) { + prev.next = new Inst1.Decb_reg(rm); + } + else { + prev.next = new Inst1.Decb_mem(rm); + } + break; + case 0x07: /* CallBack */ + prev.next = new Inst1.Callback(decode_fetchw()); + return RESULT_CALLBACK; + default: + prev.next = new Inst1.Illegal("Illegal GRP4 Call "+((rm>>3) & 7)); + return RESULT_JUMP; } + return RESULT_HANDLED; }; ops[0x2fe] = ops[0xfe]; /* GRP5 Ew */ - ops[0xff] = new Decode() { - final public int call(Op prev) { - int rm=decode_fetchb(); - int which=(rm>>3)&7; - switch (which) { - case 0x00: /* INC Ew */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.Incw_reg(rm); - } - else { - prev.next = new Inst1.Incw_mem(rm); - } - break; - case 0x01: /* DEC Ew */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.Decw_reg(rm); - } - else { - prev.next = new Inst1.Decw_mem(rm); - } - break; - case 0x02: /* CALL Ev */ - if (rm >= 0xc0 ) { - prev.next = new Inst1.CallEv_reg(rm); - } - else { - prev.next = new Inst1.CallEv_mem(rm); - } - return RESULT_JUMP; - case 0x03: /* CALL Ep */ - if (rm >= 0xc0) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst1.CallEp(rm); - } - return RESULT_JUMP; - case 0x04: /* JMP Ev */ - if (rm >= 0xc0) { - prev.next = new Inst1.JmpEv_reg(rm); - } else { - prev.next = new Inst1.JmpEv_mem(rm); - } - return RESULT_JUMP; - case 0x05: /* JMP Ep */ - if (rm >= 0xc0) { - prev.next = new Inst1.Illegal(""); - } else { - prev.next = new Inst1.JmpEp(rm); - } - return RESULT_JUMP; - case 0x06: /* PUSH Ev */ - if (rm >= 0xc0) { - prev.next = new Inst1.PushEv_reg(rm); - } else { - prev.next = new Inst1.PushEv_mem(rm); - } - break; - default: - prev.next = new Inst1.Illegal("CPU:GRP5:Illegal Call "+Integer.toString(which,16)); - return RESULT_JUMP; + ops[0xff] = prev -> { + int rm=decode_fetchb(); + int which=(rm>>3)&7; + switch (which) { + case 0x00: /* INC Ew */ + if (rm >= 0xc0 ) { + prev.next = new Inst1.Incw_reg(rm); + } + else { + prev.next = new Inst1.Incw_mem(rm); + } + break; + case 0x01: /* DEC Ew */ + if (rm >= 0xc0 ) { + prev.next = new Inst1.Decw_reg(rm); + } + else { + prev.next = new Inst1.Decw_mem(rm); + } + break; + case 0x02: /* CALL Ev */ + if (rm >= 0xc0 ) { + prev.next = new Inst1.CallEv_reg(rm); + } + else { + prev.next = new Inst1.CallEv_mem(rm); + } + return RESULT_JUMP; + case 0x03: /* CALL Ep */ + if (rm >= 0xc0) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst1.CallEp(rm); + } + return RESULT_JUMP; + case 0x04: /* JMP Ev */ + if (rm >= 0xc0) { + prev.next = new Inst1.JmpEv_reg(rm); + } else { + prev.next = new Inst1.JmpEv_mem(rm); + } + return RESULT_JUMP; + case 0x05: /* JMP Ep */ + if (rm >= 0xc0) { + prev.next = new Inst1.Illegal(""); + } else { + prev.next = new Inst1.JmpEp(rm); } - return RESULT_HANDLED; + return RESULT_JUMP; + case 0x06: /* PUSH Ev */ + if (rm >= 0xc0) { + prev.next = new Inst1.PushEv_reg(rm); + } else { + prev.next = new Inst1.PushEv_mem(rm); + } + break; + default: + prev.next = new Inst1.Illegal("CPU:GRP5:Illegal Call "+Integer.toString(which,16)); + return RESULT_JUMP; } + return RESULT_HANDLED; }; } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Strings.java b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Strings.java index 52459966..f2fdca16 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_dynamic/Strings.java +++ b/jdosbox/src/main/java/jdos/cpu/core_dynamic/Strings.java @@ -96,10 +96,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsw32 extends Op { @@ -117,10 +114,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsw16r extends Op { @@ -220,10 +214,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsw16 extends Op { @@ -242,10 +233,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsd32r extends Op { @@ -329,10 +317,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsd32 extends Op { @@ -350,10 +335,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsd16r extends Op { @@ -453,10 +435,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsd16 extends Op { @@ -475,10 +454,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsb32r extends Op { @@ -551,10 +527,7 @@ public int call() { CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsb32 extends Op { @@ -572,10 +545,8 @@ public int call() { doString(); CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsb16r extends Op { @@ -662,10 +633,8 @@ public int call() { doString(); CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } final static public class Movsb16 extends Op { @@ -683,9 +652,7 @@ public int call() { doString(); CPU_Regs.reg_eip+=eip_count;return next.call(); } - public boolean throwsException() {return false;} + public boolean accessesMemory() {return true;} - public boolean usesEip() {return false;} - public boolean setsEip() {return false;} } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_0f.java b/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_0f.java index 955134d9..d66ee8c7 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_0f.java +++ b/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_0f.java @@ -10,164 +10,152 @@ public class Prefix_0f extends Prefix_none { static { /* GRP 6 Exxx */ - ops[0x100] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* SLDT */ - case 0x01: /* STR */ - { - /*Bitu*/int saveval; - if (which==0) saveval=CPU.CPU_SLDT(); - else saveval=CPU.CPU_STR(); - if (rm >= 0xc0) {Modrm.GetEArw[rm].word(saveval);} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,saveval);} - } - break; - case 0x02:case 0x03:case 0x04:case 0x05: - { - /*Bitu*/int loadval; - if (rm >= 0xc0 ) {loadval=Modrm.GetEArw[rm].word();} - else {/*PhysPt*/int eaa=getEaa(rm);loadval=Memory.mem_readw(eaa);} - switch (which) { - case 0x02: - if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - if (CPU.CPU_LLDT(loadval)) return RUNEXCEPTION(); - break; - case 0x03: - if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - if (CPU.CPU_LTR(loadval)) return RUNEXCEPTION(); - break; - case 0x04: - CPU.CPU_VERR(loadval); - break; - case 0x05: - CPU.CPU_VERW(loadval); - break; - } - } - break; - default: - return ILLEGAL_OPCODE; - } - return HANDLED; - } - }; - /* Group 7 Ew */ - ops[0x101] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - if (rm < 0xc0) { //First ones all use EA - /*PhysPt*/int eaa=getEaa(rm);/*Bitu*/int limit; + ops[0x100] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* SLDT */ + case 0x01: /* STR */ + { + /*Bitu*/int saveval; + if (which==0) saveval=CPU.CPU_SLDT(); + else saveval=CPU.CPU_STR(); + if (rm >= 0xc0) {Modrm.GetEArw[rm].word(saveval);} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,saveval);} + } + break; + case 0x02:case 0x03:case 0x04:case 0x05: + { + /*Bitu*/int loadval; + if (rm >= 0xc0 ) {loadval=Modrm.GetEArw[rm].word();} + else {/*PhysPt*/int eaa=getEaa(rm);loadval=Memory.mem_readw(eaa);} switch (which) { - case 0x00: /* SGDT */ - Memory.mem_writew(eaa,CPU.CPU_SGDT_limit()); - Memory.mem_writed(eaa+2,CPU.CPU_SGDT_base()); - break; - case 0x01: /* SIDT */ - Memory.mem_writew(eaa,CPU.CPU_SIDT_limit()); - Memory.mem_writed(eaa+2,CPU.CPU_SIDT_base()); - break; - case 0x02: /* LGDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - // Read in the same order as in c so easier debugging - { - int v1 = (Memory.mem_readd(eaa + 2) & 0xFFFFFF); - int v0 = Memory.mem_readw(eaa); - CPU.CPU_LGDT(v0,v1); - } - break; - case 0x03: /* LIDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - // Read in the same order as in c so easier debugging - { - int v1 = (Memory.mem_readd(eaa + 2) & 0xFFFFFF); - int v0 = Memory.mem_readw(eaa); - CPU.CPU_LIDT(v0,v1); - } - break; - case 0x04: /* SMSW */ - Memory.mem_writew(eaa,CPU.CPU_SMSW() & 0xFFFF); - break; - case 0x06: /* LMSW */ - limit=Memory.mem_readw(eaa); - if (CPU.CPU_LMSW(limit)) return RUNEXCEPTION(); + case 0x02: + if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + if (CPU.CPU_LLDT(loadval)) return RUNEXCEPTION(); break; - case 0x07: /* INVLPG */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - Paging.PAGING_ClearTLB(); + case 0x03: + if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + if (CPU.CPU_LTR(loadval)) return RUNEXCEPTION(); break; - } - } else { - switch (which) { - case 0x02: /* LGDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - return ILLEGAL_OPCODE; - case 0x03: /* LIDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - return ILLEGAL_OPCODE; - case 0x04: /* SMSW */ - Modrm.GetEArw[rm].word(CPU.CPU_SMSW() & 0xFFFF); + case 0x04: + CPU.CPU_VERR(loadval); break; - case 0x06: /* LMSW */ - if (CPU.CPU_LMSW(Modrm.GetEArw[rm].word())) return RUNEXCEPTION(); + case 0x05: + CPU.CPU_VERW(loadval); break; - default: - return ILLEGAL_OPCODE; } } - return HANDLED; + break; + default: + return ILLEGAL_OPCODE; } + return HANDLED; + }; + /* Group 7 Ew */ + ops[0x101] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + if (rm < 0xc0) { //First ones all use EA + /*PhysPt*/int eaa=getEaa(rm);/*Bitu*/int limit; + switch (which) { + case 0x00: /* SGDT */ + Memory.mem_writew(eaa,CPU.CPU_SGDT_limit()); + Memory.mem_writed(eaa+2,CPU.CPU_SGDT_base()); + break; + case 0x01: /* SIDT */ + Memory.mem_writew(eaa,CPU.CPU_SIDT_limit()); + Memory.mem_writed(eaa+2,CPU.CPU_SIDT_base()); + break; + case 0x02: /* LGDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + // Read in the same order as in c so easier debugging + { + int v1 = (Memory.mem_readd(eaa + 2) & 0xFFFFFF); + int v0 = Memory.mem_readw(eaa); + CPU.CPU_LGDT(v0,v1); + } + break; + case 0x03: /* LIDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + // Read in the same order as in c so easier debugging + { + int v1 = (Memory.mem_readd(eaa + 2) & 0xFFFFFF); + int v0 = Memory.mem_readw(eaa); + CPU.CPU_LIDT(v0,v1); + } + break; + case 0x04: /* SMSW */ + Memory.mem_writew(eaa,CPU.CPU_SMSW() & 0xFFFF); + break; + case 0x06: /* LMSW */ + limit=Memory.mem_readw(eaa); + if (CPU.CPU_LMSW(limit)) return RUNEXCEPTION(); + break; + case 0x07: /* INVLPG */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + Paging.PAGING_ClearTLB(); + break; + } + } else { + switch (which) { + case 0x02: /* LGDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + return ILLEGAL_OPCODE; + case 0x03: /* LIDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + return ILLEGAL_OPCODE; + case 0x04: /* SMSW */ + Modrm.GetEArw[rm].word(CPU.CPU_SMSW() & 0xFFFF); + break; + case 0x06: /* LMSW */ + if (CPU.CPU_LMSW(Modrm.GetEArw[rm].word())) return RUNEXCEPTION(); + break; + default: + return ILLEGAL_OPCODE; + } + } + return HANDLED; }; /* LAR Gw,Ew */ - ops[0x102] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - Modrm.Getrw[rm].word(CPU.CPU_LAR(Modrm.GetEArw[rm].word(), Modrm.Getrw[rm].word())); - } else { - /*PhysPt*/int eaa=getEaa(rm); - Modrm.Getrw[rm].word(CPU.CPU_LAR(Memory.mem_readw(eaa), Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x102] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + Modrm.Getrw[rm].word(CPU.CPU_LAR(Modrm.GetEArw[rm].word(), Modrm.Getrw[rm].word())); + } else { + /*PhysPt*/int eaa=getEaa(rm); + Modrm.Getrw[rm].word(CPU.CPU_LAR(Memory.mem_readw(eaa), Modrm.Getrw[rm].word())); } + return HANDLED; }; /* LSL Gw,Ew */ - ops[0x103] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - Modrm.Getrw[rm].word(CPU.CPU_LSL(Modrm.GetEArw[rm].word(), Modrm.Getrw[rm].word())); - } else { - /*PhysPt*/int eaa=getEaa(rm); - Modrm.Getrw[rm].word(CPU.CPU_LSL(Memory.mem_readw(eaa), Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x103] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + Modrm.Getrw[rm].word(CPU.CPU_LSL(Modrm.GetEArw[rm].word(), Modrm.Getrw[rm].word())); + } else { + /*PhysPt*/int eaa=getEaa(rm); + Modrm.Getrw[rm].word(CPU.CPU_LSL(Memory.mem_readw(eaa), Modrm.Getrw[rm].word())); } + return HANDLED; }; /* CLTS */ - ops[0x106] = new OP() { - final public int call() { - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - CPU.cpu.cr0&=(~CPU.CR0_TASKSWITCH); - return HANDLED; - } + ops[0x106] = () -> { + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + CPU.cpu.cr0&=(~CPU.CR0_TASKSWITCH); + return HANDLED; }; ops[0x306] = ops[0x106]; /* INVD */ - ops[0x108] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType HANDLED; /* MOV Rd.CRx */ - ops[0x120] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm >> 3) & 7; - if (rm < 0xc0 ) { - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); - } - if (CPU.CPU_READ_CRX(which,Modrm.GetEArd[rm])) return RUNEXCEPTION(); - return HANDLED; + ops[0x120] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm >> 3) & 7; + if (rm < 0xc0 ) { + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); } + if (CPU.CPU_READ_CRX(which,Modrm.GetEArd[rm])) return RUNEXCEPTION(); + return HANDLED; }; ops[0x320] = ops[0x120]; /* MOV Rd,DRx */ - ops[0x121] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm >> 3) & 7; - if (rm < 0xc0 ) { - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,DR"+which+" with non-register"); - } - if (CPU.CPU_READ_DRX(which,Modrm.GetEArd[rm])) return RUNEXCEPTION(); - return HANDLED; + ops[0x121] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm >> 3) & 7; + if (rm < 0xc0 ) { + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,DR"+which+" with non-register"); } + if (CPU.CPU_READ_DRX(which,Modrm.GetEArd[rm])) return RUNEXCEPTION(); + return HANDLED; }; ops[0x321] = ops[0x121]; /* MOV CRx,Rd */ - ops[0x122] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm >> 3) & 7; - if (rm < 0xc0 ) { - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); - } - if (CPU.CPU_WRITE_CRX(which,Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); - return HANDLED; + ops[0x122] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm >> 3) & 7; + if (rm < 0xc0 ) { + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,CR"+which+" with non-register"); } + if (CPU.CPU_WRITE_CRX(which,Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + return HANDLED; }; ops[0x322] = ops[0x122]; /* MOV DRx,Rd */ - ops[0x123] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm >> 3) & 7; - if (rm < 0xc0 ) { - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV DR"+which+",XXX with non-register"); - } - if (CPU.CPU_WRITE_DRX(which,Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); - return HANDLED; + ops[0x123] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm >> 3) & 7; + if (rm < 0xc0 ) { + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV DR"+which+",XXX with non-register"); } + if (CPU.CPU_WRITE_DRX(which,Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + return HANDLED; }; ops[0x323] = ops[0x123]; /* MOV Rd,TRx */ - ops[0x124] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm >> 3) & 7; - if (rm < 0xc0 ) { - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,TR"+which+" with non-register"); - } - if (CPU.CPU_READ_TRX(which,Modrm.GetEArd[rm])) return RUNEXCEPTION(); - return HANDLED; + ops[0x124] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm >> 3) & 7; + if (rm < 0xc0 ) { + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV XXX,TR"+which+" with non-register"); } + if (CPU.CPU_READ_TRX(which,Modrm.GetEArd[rm])) return RUNEXCEPTION(); + return HANDLED; }; ops[0x324] = ops[0x124]; /* MOV TRx,Rd */ - ops[0x126] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm >> 3) & 7; - if (rm < 0xc0 ) { - rm |= 0xc0; - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV TR"+which+",XXX with non-register"); - } - if (CPU.CPU_WRITE_TRX(which,Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); - return HANDLED; + ops[0x126] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm >> 3) & 7; + if (rm < 0xc0 ) { + rm |= 0xc0; + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"MOV TR"+which+",XXX with non-register"); } + if (CPU.CPU_WRITE_TRX(which,Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + return HANDLED; }; ops[0x326] = ops[0x126]; /* RDTSC */ - ops[0x131] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType>>32)); - reg_eax.dword=(int)((tsc&0xffffffffl)); - return HANDLED; - } + ops[0x131] = () -> { + if (CPU.CPU_ArchitectureType>>32)); + reg_eax.dword=(int)((tsc& 0xffffffffL)); + return HANDLED; }; ops[0x331] = ops[0x131]; /* CMOVO */ - ops[0x140] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_O()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_O()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_O()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_O()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNO */ - ops[0x141] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NO()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NO()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NO()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NO()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVB */ - ops[0x142] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_B()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_B()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_B()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_B()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNB */ - ops[0x143] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NB()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NB()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NB()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NB()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVZ */ - ops[0x144] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_Z()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_Z()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_Z()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_Z()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNZ */ - ops[0x145] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NZ()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NZ()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NZ()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NZ()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVBE */ - ops[0x146] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_BE()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_BE()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_BE()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_BE()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNBE */ - ops[0x147] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NBE()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NBE()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NBE()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NBE()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVS */ - ops[0x148] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_S()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_S()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_S()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_S()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNS */ - ops[0x149] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NS()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NS()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NS()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NS()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVP */ - ops[0x14a] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_P()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_P()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_P()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_P()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNP */ - ops[0x14b] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NP()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NP()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NP()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NP()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVL */ - ops[0x14c] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_L()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_L()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_L()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_L()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNL */ - ops[0x14d] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NL()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NL()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NL()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NL()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVLE */ - ops[0x14e] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_LE()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_LE()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_LE()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_LE()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* CMOVNLE */ - ops[0x14f] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NLE()) - Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NLE()) - Modrm.Getrw[rm].word(temp); - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NLE()) + Modrm.Getrw[rm].word(Modrm.GetEArd[rm].word()); + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readw(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NLE()) + Modrm.Getrw[rm].word(temp); } + return HANDLED; }; /* JO */ - ops[0x180] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_O()); - return CONTINUE; - } + ops[0x180] = () -> { + JumpCond16_w(Flags.TFLG_O()); + return CONTINUE; }; /* JNO */ - ops[0x181] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NO()); - return CONTINUE; - } + ops[0x181] = () -> { + JumpCond16_w(Flags.TFLG_NO()); + return CONTINUE; }; /* JB */ - ops[0x182] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_B()); - return CONTINUE; - } + ops[0x182] = () -> { + JumpCond16_w(Flags.TFLG_B()); + return CONTINUE; }; /* JNB */ - ops[0x183] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NB()); - return CONTINUE; - } + ops[0x183] = () -> { + JumpCond16_w(Flags.TFLG_NB()); + return CONTINUE; }; /* JZ */ - ops[0x184] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_Z()); - return CONTINUE; - } + ops[0x184] = () -> { + JumpCond16_w(Flags.TFLG_Z()); + return CONTINUE; }; /* JNZ */ - ops[0x185] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NZ()); - return CONTINUE; - } + ops[0x185] = () -> { + JumpCond16_w(Flags.TFLG_NZ()); + return CONTINUE; }; /* JBE */ - ops[0x186] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_BE()); - return CONTINUE; - } + ops[0x186] = () -> { + JumpCond16_w(Flags.TFLG_BE()); + return CONTINUE; }; /* JNBE */ - ops[0x187] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NBE()); - return CONTINUE; - } + ops[0x187] = () -> { + JumpCond16_w(Flags.TFLG_NBE()); + return CONTINUE; }; /* JS */ - ops[0x188] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_S()); - return CONTINUE; - } + ops[0x188] = () -> { + JumpCond16_w(Flags.TFLG_S()); + return CONTINUE; }; /* JNS */ - ops[0x189] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NS()); - return CONTINUE; - } + ops[0x189] = () -> { + JumpCond16_w(Flags.TFLG_NS()); + return CONTINUE; }; /* JP */ - ops[0x18a] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_P()); - return CONTINUE; - } + ops[0x18a] = () -> { + JumpCond16_w(Flags.TFLG_P()); + return CONTINUE; }; /* JNP */ - ops[0x18b] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NP()); - return CONTINUE; - } + ops[0x18b] = () -> { + JumpCond16_w(Flags.TFLG_NP()); + return CONTINUE; }; /* JL */ - ops[0x18c] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_L()); - return CONTINUE; - } + ops[0x18c] = () -> { + JumpCond16_w(Flags.TFLG_L()); + return CONTINUE; }; /* JNL */ - ops[0x18d] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NL()); - return CONTINUE; - } + ops[0x18d] = () -> { + JumpCond16_w(Flags.TFLG_NL()); + return CONTINUE; }; /* JLE */ - ops[0x18e] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_LE()); - return CONTINUE; - } + ops[0x18e] = () -> { + JumpCond16_w(Flags.TFLG_LE()); + return CONTINUE; }; /* JNLE */ - ops[0x18f] = new OP() { - final public int call() { - JumpCond16_w(Flags.TFLG_NLE()); - return CONTINUE; - } + ops[0x18f] = () -> { + JumpCond16_w(Flags.TFLG_NLE()); + return CONTINUE; }; /* SETO */ - ops[0x190] = new OP() { - final public int call() { - SETcc(Flags.TFLG_O()); - return HANDLED; - } + ops[0x190] = () -> { + SETcc(Flags.TFLG_O()); + return HANDLED; }; ops[0x390] = ops[0x190]; /* SETNO */ - ops[0x191] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NO()); - return HANDLED; - } + ops[0x191] = () -> { + SETcc(Flags.TFLG_NO()); + return HANDLED; }; ops[0x391] = ops[0x191]; /* SETB */ - ops[0x192] = new OP() { - final public int call() { - SETcc(Flags.TFLG_B()); - return HANDLED; - } + ops[0x192] = () -> { + SETcc(Flags.TFLG_B()); + return HANDLED; }; ops[0x392] = ops[0x192]; /* SETNB */ - ops[0x193] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NB()); - return HANDLED; - } + ops[0x193] = () -> { + SETcc(Flags.TFLG_NB()); + return HANDLED; }; ops[0x393] = ops[0x193]; /* SETZ */ - ops[0x194] = new OP() { - final public int call() { - SETcc(Flags.TFLG_Z()); - return HANDLED; - } + ops[0x194] = () -> { + SETcc(Flags.TFLG_Z()); + return HANDLED; }; ops[0x394] = ops[0x194]; /* SETNZ */ - ops[0x195] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NZ()); - return HANDLED; - } + ops[0x195] = () -> { + SETcc(Flags.TFLG_NZ()); + return HANDLED; }; ops[0x395] = ops[0x195]; /* SETBE */ - ops[0x196] = new OP() { - final public int call() { - SETcc(Flags.TFLG_BE()); - return HANDLED; - } + ops[0x196] = () -> { + SETcc(Flags.TFLG_BE()); + return HANDLED; }; ops[0x396] = ops[0x196]; /* SETNBE */ - ops[0x197] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NBE()); - return HANDLED; - } + ops[0x197] = () -> { + SETcc(Flags.TFLG_NBE()); + return HANDLED; }; ops[0x397] = ops[0x197]; /* SETS */ - ops[0x198] = new OP() { - final public int call() { - SETcc(Flags.TFLG_S()); - return HANDLED; - } + ops[0x198] = () -> { + SETcc(Flags.TFLG_S()); + return HANDLED; }; ops[0x398] = ops[0x198]; /* SETNS */ - ops[0x199] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NS()); - return HANDLED; - } + ops[0x199] = () -> { + SETcc(Flags.TFLG_NS()); + return HANDLED; }; ops[0x399] = ops[0x199]; /* SETP */ - ops[0x19a] = new OP() { - final public int call() { - SETcc(Flags.TFLG_P()); - return HANDLED; - } + ops[0x19a] = () -> { + SETcc(Flags.TFLG_P()); + return HANDLED; }; ops[0x39a] = ops[0x19a]; /* SETNP */ - ops[0x19b] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NP()); - return HANDLED; - } + ops[0x19b] = () -> { + SETcc(Flags.TFLG_NP()); + return HANDLED; }; ops[0x39b] = ops[0x19b]; /* SETL */ - ops[0x19c] = new OP() { - final public int call() { - SETcc(Flags.TFLG_L()); - return HANDLED; - } + ops[0x19c] = () -> { + SETcc(Flags.TFLG_L()); + return HANDLED; }; ops[0x39c] = ops[0x19c]; /* SETNL */ - ops[0x19d] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NL()); - return HANDLED; - } + ops[0x19d] = () -> { + SETcc(Flags.TFLG_NL()); + return HANDLED; }; ops[0x39d] = ops[0x19d]; /* SETLE */ - ops[0x19e] = new OP() { - final public int call() { - SETcc(Flags.TFLG_LE()); - return HANDLED; - } + ops[0x19e] = () -> { + SETcc(Flags.TFLG_LE()); + return HANDLED; }; ops[0x39e] = ops[0x19e]; /* SETNLE */ - ops[0x19f] = new OP() { - final public int call() { - SETcc(Flags.TFLG_NLE()); - return HANDLED; - } + ops[0x19f] = () -> { + SETcc(Flags.TFLG_NLE()); + return HANDLED; }; ops[0x39f] = ops[0x19f]; /* PUSH FS */ - ops[0x1a0] = new OP() { - final public int call() { - CPU.CPU_Push16(CPU_Regs.reg_fsVal.dword); - return HANDLED; - } + ops[0x1a0] = () -> { + CPU.CPU_Push16(CPU_Regs.reg_fsVal.dword); + return HANDLED; }; /* POP FS */ - ops[0x1a1] = new OP() { - final public int call() { - if (CPU.CPU_PopSegFS(false)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x1a1] = () -> { + if (CPU.CPU_PopSegFS(false)) return RUNEXCEPTION(); + return HANDLED; }; /* CPUID */ - ops[0x1a2] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0 ) { - SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0?true:false); - } else { - /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)rw)>>4)*2; - /*Bit16u*/int old=Memory.mem_readw(eaa); - SETFLAGBIT(CF,(old & mask)!=0?true:false); - } - return HANDLED; + ops[0x1a3] = () -> { + Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); + int rw = Modrm.Getrw[rm].word(); + /* Bit16u*/int mask=1 << (rw & 15); + if (rm >= 0xc0 ) { + SETFLAGBIT(CF, (Modrm.GetEArw[rm].word() & mask) != 0); + } else { + /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)rw)>>4)*2; + /*Bit16u*/int old=Memory.mem_readw(eaa); + SETFLAGBIT(CF, (old & mask) != 0); } + return HANDLED; }; /* SHLD Ew,Gw,Ib */ - ops[0x1a4] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - int op3 = Fetchb(); - DSHLW(Modrm.Getrw[rm].word(),op3,earw_l,earw_s); - } - else { - m = getEaa(rm); - int op3 = Fetchb(); - DSHLW(Modrm.Getrw[rm].word(),op3,w_l,w_s); - } - return HANDLED; + ops[0x1a4] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + int op3 = Fetchb(); + DSHLW(Modrm.Getrw[rm].word(),op3,earw_l,earw_s); + } + else { + m = getEaa(rm); + int op3 = Fetchb(); + DSHLW(Modrm.Getrw[rm].word(),op3,w_l,w_s); } + return HANDLED; }; /* SHLD Ew,Gw,CL */ - ops[0x1a5] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - DSHLW(Modrm.Getrw[rm].word(),reg_ecx.low(),earw_l,earw_s); - } - else { - m = getEaa(rm); - DSHLW(Modrm.Getrw[rm].word(),reg_ecx.low(),w_l,w_s); - } - return HANDLED; + ops[0x1a5] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + DSHLW(Modrm.Getrw[rm].word(),reg_ecx.low(),earw_l,earw_s); } + else { + m = getEaa(rm); + DSHLW(Modrm.Getrw[rm].word(),reg_ecx.low(),w_l,w_s); + } + return HANDLED; }; /* PUSH GS */ - ops[0x1a8] = new OP() { - final public int call() { - CPU.CPU_Push16(CPU_Regs.reg_gsVal.dword); - return HANDLED; - } + ops[0x1a8] = () -> { + CPU.CPU_Push16(CPU_Regs.reg_gsVal.dword); + return HANDLED; }; /* POP GS */ - ops[0x1a9] = new OP() { - final public int call() { - if (CPU.CPU_PopSegGS(false)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x1a9] = () -> { + if (CPU.CPU_PopSegGS(false)) return RUNEXCEPTION(); + return HANDLED; }; /* BTS Ew,Gw */ - ops[0x1ab] = new OP() { - final public int call() { - Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); - /*Bit16u*/int mask=1 << (Modrm.Getrw[rm].word() & 15); - if (rm >= 0xc0 ) { - SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); - Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() | mask); - } else { - /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)Modrm.Getrw[rm].word())>>4)*2; - /*Bit16u*/int old=Memory.mem_readw(eaa); - SETFLAGBIT(CF,(old & mask)!=0); - Memory.mem_writew(eaa,old | mask); - } - return HANDLED; + ops[0x1ab] = () -> { + Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); + /*Bit16u*/int mask=1 << (Modrm.Getrw[rm].word() & 15); + if (rm >= 0xc0 ) { + SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); + Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() | mask); + } else { + /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)Modrm.Getrw[rm].word())>>4)*2; + /*Bit16u*/int old=Memory.mem_readw(eaa); + SETFLAGBIT(CF,(old & mask)!=0); + Memory.mem_writew(eaa,old | mask); } + return HANDLED; }; /* SHRD Ew,Gw,Ib */ - ops[0x1ac] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - int op3 = Fetchb(); - DSHRW(Modrm.Getrw[rm].word(),op3,earw_l,earw_s); - } - else { - m = getEaa(rm); - int op3 = Fetchb(); - DSHRW(Modrm.Getrw[rm].word(),op3,w_l,w_s); - } - return HANDLED; + ops[0x1ac] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + int op3 = Fetchb(); + DSHRW(Modrm.Getrw[rm].word(),op3,earw_l,earw_s); + } + else { + m = getEaa(rm); + int op3 = Fetchb(); + DSHRW(Modrm.Getrw[rm].word(),op3,w_l,w_s); } + return HANDLED; }; /* SHRD Ew,Gw,CL */ - ops[0x1ad] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - DSHRW(Modrm.Getrw[rm].word(),reg_ecx.low(),earw_l,earw_s); - } - else { - m = getEaa(rm); - DSHRW(Modrm.Getrw[rm].word(),reg_ecx.low(),w_l,w_s); - } - return HANDLED; + ops[0x1ad] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + DSHRW(Modrm.Getrw[rm].word(),reg_ecx.low(),earw_l,earw_s); } + else { + m = getEaa(rm); + DSHRW(Modrm.Getrw[rm].word(),reg_ecx.low(),w_l,w_s); + } + return HANDLED; }; /* IMUL Gw,Ew */ - ops[0x1af] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrw[rm]; - if (rm >= 0xc0 ) { - r.word(DIMULW(Modrm.GetEArw[rm].word(),r.word())); - } - else { - int eaa = getEaa(rm); - r.word(DIMULW(Memory.mem_readw(eaa),r.word())); - } - return HANDLED; + ops[0x1af] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrw[rm]; + if (rm >= 0xc0 ) { + r.word(DIMULW(Modrm.GetEArw[rm].word(),r.word())); } + else { + int eaa = getEaa(rm); + r.word(DIMULW(Memory.mem_readw(eaa),r.word())); + } + return HANDLED; }; /* cmpxchg Eb,Gb */ // :DOSBOX: this is different from dosbox - ops[0x1b0] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType= 0xc0 ) { - Modrm.Getrb_interface r = Modrm.GetEArb[rm]; - Instructions.CMPB(r.get(), reg_eax.low()); // Sets the flags - Flags.FillFlags(); - if (reg_eax.low() == r.get()) { - r.set(Modrm.Getrb[rm].get()); - SETFLAGBIT(ZF,true); - } else { - reg_eax.low(r.get()); - SETFLAGBIT(ZF,false); - } + ops[0x1b0] = () -> { + if (CPU.CPU_ArchitectureType= 0xc0 ) { + Modrm.Getrb_interface r = Modrm.GetEArb[rm]; + Instructions.CMPB(r.get(), reg_eax.low()); // Sets the flags + Flags.FillFlags(); + if (reg_eax.low() == r.get()) { + r.set(Modrm.Getrb[rm].get()); + SETFLAGBIT(ZF,true); } else { - /*PhysPt*/int eaa=getEaa(rm); - /*Bit8u*/int val = Memory.mem_readb(eaa); - Instructions.CMPB(val, reg_eax.low()); // Sets the flags - Flags.FillFlags(); - if (reg_eax.low() == val) { - Memory.mem_writeb(eaa,Modrm.Getrb[rm].get()); - SETFLAGBIT(ZF,true); - } else { - Memory.mem_writeb(eaa,val); // cmpxchg always issues a write - reg_eax.low(val); - SETFLAGBIT(ZF,false); - } + reg_eax.low(r.get()); + SETFLAGBIT(ZF,false); + } + } else { + /*PhysPt*/int eaa=getEaa(rm); + /*Bit8u*/int val = Memory.mem_readb(eaa); + Instructions.CMPB(val, reg_eax.low()); // Sets the flags + Flags.FillFlags(); + if (reg_eax.low() == val) { + Memory.mem_writeb(eaa,Modrm.Getrb[rm].get()); + SETFLAGBIT(ZF,true); + } else { + Memory.mem_writeb(eaa,val); // cmpxchg always issues a write + reg_eax.low(val); + SETFLAGBIT(ZF,false); } - return HANDLED; } + return HANDLED; }; ops[0x3b0] = ops[0x1b0]; /* cmpxchg Ew,Gw */ // :DOSBOX: this is different from dosbox - ops[0x1b1] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType= 0xc0 ) { - Instructions.CMPW(Modrm.GetEArw[rm].word(), reg_eax.word()); // Sets the flags - Flags.FillFlags(); - if(reg_eax.word() == Modrm.GetEArw[rm].word()) { - Modrm.GetEArw[rm].word(Modrm.Getrw[rm].word()); - SETFLAGBIT(ZF,true); - } else { - reg_eax.word(Modrm.GetEArw[rm].word()); - SETFLAGBIT(ZF,false); - } + ops[0x1b1] = () -> { + if (CPU.CPU_ArchitectureType= 0xc0 ) { + Instructions.CMPW(Modrm.GetEArw[rm].word(), reg_eax.word()); // Sets the flags + Flags.FillFlags(); + if(reg_eax.word() == Modrm.GetEArw[rm].word()) { + Modrm.GetEArw[rm].word(Modrm.Getrw[rm].word()); + SETFLAGBIT(ZF,true); } else { - /*PhysPt*/int eaa=getEaa(rm); - /*Bit16u*/int val = Memory.mem_readw(eaa); - Instructions.CMPW(val, reg_eax.word()); // Sets the flags - Flags.FillFlags(); - if(reg_eax.word() == val) { - Memory.mem_writew(eaa,Modrm.Getrw[rm].word()); - SETFLAGBIT(ZF,true); - } else { - Memory.mem_writew(eaa,val); // cmpxchg always issues a write - reg_eax.word(val); - SETFLAGBIT(ZF,false); - } + reg_eax.word(Modrm.GetEArw[rm].word()); + SETFLAGBIT(ZF,false); + } + } else { + /*PhysPt*/int eaa=getEaa(rm); + /*Bit16u*/int val = Memory.mem_readw(eaa); + Instructions.CMPW(val, reg_eax.word()); // Sets the flags + Flags.FillFlags(); + if(reg_eax.word() == val) { + Memory.mem_writew(eaa,Modrm.Getrw[rm].word()); + SETFLAGBIT(ZF,true); + } else { + Memory.mem_writew(eaa,val); // cmpxchg always issues a write + reg_eax.word(val); + SETFLAGBIT(ZF,false); } - return HANDLED; } + return HANDLED; }; /* LSS Ew */ - ops[0x1b2] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - if (CPU.CPU_SetSegGeneralSS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); - Modrm.Getrw[rm].word(Memory.mem_readw(eaa)); - return HANDLED; - } + ops[0x1b2] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + if (CPU.CPU_SetSegGeneralSS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); + Modrm.Getrw[rm].word(Memory.mem_readw(eaa)); + return HANDLED; }; /* BTR Ew,Gw */ - ops[0x1b3] = new OP() { - final public int call() { - Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); - /*Bit16u*/int mask=1 << (Modrm.Getrw[rm].word() & 15); - if (rm >= 0xc0 ) { - SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); - Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() & ~mask); - } else { - /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)Modrm.Getrw[rm].word())>>4)*2; - /*Bit16u*/int old=Memory.mem_readw(eaa); - SETFLAGBIT(CF,(old & mask)!=0); - Memory.mem_writew(eaa,old & ~mask); - } - return HANDLED; + ops[0x1b3] = () -> { + Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); + /*Bit16u*/int mask=1 << (Modrm.Getrw[rm].word() & 15); + if (rm >= 0xc0 ) { + SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); + Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() & ~mask); + } else { + /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)Modrm.Getrw[rm].word())>>4)*2; + /*Bit16u*/int old=Memory.mem_readw(eaa); + SETFLAGBIT(CF,(old & mask)!=0); + Memory.mem_writew(eaa,old & ~mask); } + return HANDLED; }; /* LFS Ew */ - ops[0x1b4] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - if (CPU.CPU_SetSegGeneralFS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); - Modrm.Getrw[rm].word(Memory.mem_readw(eaa)); - return HANDLED; - } + ops[0x1b4] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + if (CPU.CPU_SetSegGeneralFS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); + Modrm.Getrw[rm].word(Memory.mem_readw(eaa)); + return HANDLED; }; /* LGS Ew */ - ops[0x1b5] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - if (CPU.CPU_SetSegGeneralGS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); - Modrm.Getrw[rm].word(Memory.mem_readw(eaa)); - return HANDLED; - } + ops[0x1b5] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + if (CPU.CPU_SetSegGeneralGS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); + Modrm.Getrw[rm].word(Memory.mem_readw(eaa)); + return HANDLED; }; /* MOVZX Gw,Eb */ - ops[0x1b6] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrw[rm].word(Modrm.GetEArb[rm].get());} - else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word(Memory.mem_readb(eaa));} - return HANDLED; - } + ops[0x1b6] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrw[rm].word(Modrm.GetEArb[rm].get());} + else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word(Memory.mem_readb(eaa));} + return HANDLED; }; /* MOVZX Gw,Ew */ - ops[0x1b7] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrw[rm].word(Modrm.GetEArw[rm].word());} - else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word(Memory.mem_readw(eaa));} - return HANDLED; - } + ops[0x1b7] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrw[rm].word(Modrm.GetEArw[rm].word());} + else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word(Memory.mem_readw(eaa));} + return HANDLED; }; /* MOVSX Gw,Ew */ ops[0x1bf] = ops[0x1b7]; /* GRP8 Ew,Ib */ - ops[0x1ba] = new OP() { - final public int call() { - Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - /*Bit16u*/int mask=1 << (Fetchb() & 15); - SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); - switch (rm & 0x38) { - case 0x20: /* BT */ - break; - case 0x28: /* BTS */ - Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() | mask); - break; - case 0x30: /* BTR */ - Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() & ~mask); - break; - case 0x38: /* BTC */ - Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() ^ mask); - break; - default: - Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } - } else { - /*PhysPt*/int eaa=getEaa(rm);/*Bit16u*/int old=Memory.mem_readw(eaa); - /*Bit16u*/int mask=1 << (Fetchb() & 15); - SETFLAGBIT(CF,(old & mask)!=0); - switch (rm & 0x38) { - case 0x20: /* BT */ - break; - case 0x28: /* BTS */ - Memory.mem_writew(eaa,old|mask); - break; - case 0x30: /* BTR */ - Memory.mem_writew(eaa,old & ~mask); - break; - case 0x38: /* BTC */ - Memory.mem_writew(eaa,old ^ mask); - break; - default: - Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } + ops[0x1ba] = () -> { + Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + /*Bit16u*/int mask=1 << (Fetchb() & 15); + SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); + switch (rm & 0x38) { + case 0x20: /* BT */ + break; + case 0x28: /* BTS */ + Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() | mask); + break; + case 0x30: /* BTR */ + Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() & ~mask); + break; + case 0x38: /* BTC */ + Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word() ^ mask); + break; + default: + Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); + } + } else { + /*PhysPt*/int eaa=getEaa(rm);/*Bit16u*/int old=Memory.mem_readw(eaa); + /*Bit16u*/int mask=1 << (Fetchb() & 15); + SETFLAGBIT(CF,(old & mask)!=0); + switch (rm & 0x38) { + case 0x20: /* BT */ + break; + case 0x28: /* BTS */ + Memory.mem_writew(eaa,old|mask); + break; + case 0x30: /* BTR */ + Memory.mem_writew(eaa,old & ~mask); + break; + case 0x38: /* BTC */ + Memory.mem_writew(eaa,old ^ mask); + break; + default: + Log.exit("CPU:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); } - return HANDLED; } + return HANDLED; }; /* BTC Ew,Gw */ - ops[0x1bb] = new OP() { - final public int call() { - Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); - /*Bit16u*/int mask=1 << (Modrm.Getrw[rm].word() & 15); - if (rm >= 0xc0 ) { - SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); - Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word()^mask); - } else { - /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)Modrm.Getrw[rm].word())>>4)*2; - /*Bit16u*/int old=Memory.mem_readw(eaa); - SETFLAGBIT(CF,(old & mask)!=0); - Memory.mem_writew(eaa,old ^ mask); - } - return HANDLED; + ops[0x1bb] = () -> { + Flags.FillFlags();/*Bit8u*/int rm=Fetchb(); + /*Bit16u*/int mask=1 << (Modrm.Getrw[rm].word() & 15); + if (rm >= 0xc0 ) { + SETFLAGBIT(CF,(Modrm.GetEArw[rm].word() & mask)!=0); + Modrm.GetEArw[rm].word(Modrm.GetEArw[rm].word()^mask); + } else { + /*PhysPt*/int eaa=getEaa(rm);eaa+=(((/*Bit16s*/short)Modrm.Getrw[rm].word())>>4)*2; + /*Bit16u*/int old=Memory.mem_readw(eaa); + SETFLAGBIT(CF,(old & mask)!=0); + Memory.mem_writew(eaa,old ^ mask); } + return HANDLED; }; /* BSF Gw,Ew */ - ops[0x1bc] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bit16u*/int result,value; - if (rm >= 0xc0) { value=Modrm.GetEArw[rm].word(); } - else { /*PhysPt*/int eaa=getEaa(rm); value=Memory.mem_readw(eaa); } - if (value==0) { - SETFLAGBIT(ZF,true); - } else { - result = 0; - while ((value & 0x01)==0) { result++; value>>=1; } - SETFLAGBIT(ZF,false); - Modrm.Getrw[rm].word(result); - } - Flags.type=Flags.t_UNKNOWN; - return HANDLED; - } + ops[0x1bc] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bit16u*/int result,value; + if (rm >= 0xc0) { value=Modrm.GetEArw[rm].word(); } + else { /*PhysPt*/int eaa=getEaa(rm); value=Memory.mem_readw(eaa); } + if (value==0) { + SETFLAGBIT(ZF,true); + } else { + result = 0; + while ((value & 0x01)==0) { result++; value>>=1; } + SETFLAGBIT(ZF,false); + Modrm.Getrw[rm].word(result); + } + Flags.type=Flags.t_UNKNOWN; + return HANDLED; }; /* BSR Gw,Ew */ - ops[0x1bd] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bit16u*/int result,value; - if (rm >= 0xc0) { value=Modrm.GetEArw[rm].word(); } - else { /*PhysPt*/int eaa=getEaa(rm); value=Memory.mem_readw(eaa); } - if (value==0) { - SETFLAGBIT(ZF,true); - } else { - result = 15; // Operandsize-1 - while ((value & 0x8000)==0) { result--; value<<=1; } - SETFLAGBIT(ZF,false); - Modrm.Getrw[rm].word(result); - } - Flags.type=Flags.t_UNKNOWN; - return HANDLED; - } + ops[0x1bd] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bit16u*/int result,value; + if (rm >= 0xc0) { value=Modrm.GetEArw[rm].word(); } + else { /*PhysPt*/int eaa=getEaa(rm); value=Memory.mem_readw(eaa); } + if (value==0) { + SETFLAGBIT(ZF,true); + } else { + result = 15; // Operandsize-1 + while ((value & 0x8000)==0) { result--; value<<=1; } + SETFLAGBIT(ZF,false); + Modrm.Getrw[rm].word(result); + } + Flags.type=Flags.t_UNKNOWN; + return HANDLED; }; /* MOVSX Gw,Eb */ - ops[0x1be] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrw[rm].word(Modrm.GetEArb[rm].get());} - else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word((byte)Memory.mem_readb(eaa));} - return HANDLED; - } + ops[0x1be] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrw[rm].word(Modrm.GetEArb[rm].get());} + else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word((byte)Memory.mem_readb(eaa));} + return HANDLED; }; /* XADD Gb,Eb */ // :DOSBOX: this is different from dosbox - ops[0x1c0] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType= 0xc0 ) { - int result = Instructions.ADDB(Modrm.Getrb[rm].get(), Modrm.GetEArb[rm].get()); - Modrm.Getrb[rm].set(Modrm.GetEArb[rm].get()); - Modrm.GetEArb[rm].set(result); - } else { - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readb(eaa); - int result = Instructions.ADDB(Modrm.Getrb[rm].get(), val); - Memory.mem_writeb(eaa,result); - Modrm.Getrb[rm].set(val); - } - return HANDLED; + ops[0x1c0] = () -> { + if (CPU.CPU_ArchitectureType= 0xc0 ) { + int result = Instructions.ADDB(Modrm.Getrb[rm].get(), Modrm.GetEArb[rm].get()); + Modrm.Getrb[rm].set(Modrm.GetEArb[rm].get()); + Modrm.GetEArb[rm].set(result); + } else { + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readb(eaa); + int result = Instructions.ADDB(Modrm.Getrb[rm].get(), val); + Memory.mem_writeb(eaa,result); + Modrm.Getrb[rm].set(val); } + return HANDLED; }; ops[0x3c0] = ops[0x1c0]; /* XADD Gw,Ew */ // :DOSBOX: this is different from dosbox - ops[0x1c1] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType= 0xc0 ) { - int result = Instructions.ADDW(Modrm.Getrw[rm].word(), Modrm.GetEArw[rm].word()); - Modrm.Getrw[rm].word(Modrm.GetEArw[rm].word()); - Modrm.GetEArw[rm].word(result); - } else { - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readw(eaa); - int result = Instructions.ADDW(Modrm.Getrw[rm].word(), val); - Memory.mem_writew(eaa,result); - Modrm.Getrw[rm].word(val); - } - return HANDLED; + ops[0x1c1] = () -> { + if (CPU.CPU_ArchitectureType= 0xc0 ) { + int result = Instructions.ADDW(Modrm.Getrw[rm].word(), Modrm.GetEArw[rm].word()); + Modrm.Getrw[rm].word(Modrm.GetEArw[rm].word()); + Modrm.GetEArw[rm].word(result); + } else { + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readw(eaa); + int result = Instructions.ADDW(Modrm.Getrw[rm].word(), val); + Memory.mem_writew(eaa,result); + Modrm.Getrw[rm].word(val); } + return HANDLED; }; /* BSWAP AX */ - ops[0x1c8] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=ADDD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, ADDD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; + ops[0x201] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=ADDD(Modrm.Getrd[rm].dword, r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, ADDD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); } + return HANDLED; }; /* ADD Gd,Ed */ - ops[0x203] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=ADDD(Modrm.GetEArd[rm].dword, r.dword); - } else { - r.dword=ADDD(Memory.mem_readd(getEaa(rm)), r.dword); - } - return HANDLED; + ops[0x203] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=ADDD(Modrm.GetEArd[rm].dword, r.dword); + } else { + r.dword=ADDD(Memory.mem_readd(getEaa(rm)), r.dword); } + return HANDLED; }; /* ADD EAX,Id */ - ops[0x205] = new OP() { - final public int call() { - reg_eax.dword=ADDD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x205] = () -> { + reg_eax.dword=ADDD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* PUSH ES */ - ops[0x206] = new OP() { - final public int call() { - CPU.CPU_Push32(CPU_Regs.reg_esVal.dword); - return HANDLED; - } + ops[0x206] = () -> { + CPU.CPU_Push32(CPU_Regs.reg_esVal.dword); + return HANDLED; }; /* POP ES */ - ops[0x207] = new OP() { - final public int call() { - if (CPU.CPU_PopSegES(true)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x207] = () -> { + if (CPU.CPU_PopSegES(true)) return RUNEXCEPTION(); + return HANDLED; }; /* OR Ed,Gd */ - ops[0x209] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=ORD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, ORD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; - } - }; + ops[0x209] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=ORD(Modrm.Getrd[rm].dword, r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, ORD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); + } + return HANDLED; + }; /* OR Gd,Ed */ - ops[0x20b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=ORD(Modrm.GetEArd[rm].dword, r.dword); - } else { - r.dword=ORD(Memory.mem_readd(getEaa(rm)), r.dword); - } - return HANDLED; + ops[0x20b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=ORD(Modrm.GetEArd[rm].dword, r.dword); + } else { + r.dword=ORD(Memory.mem_readd(getEaa(rm)), r.dword); } + return HANDLED; }; /* OR EAX,Id */ - ops[0x20d] = new OP() { - final public int call() { - reg_eax.dword=ORD(Fetchd(),reg_eax.dword); - return HANDLED; - } + ops[0x20d] = () -> { + reg_eax.dword=ORD(Fetchd(),reg_eax.dword); + return HANDLED; }; /* PUSH CS */ - ops[0x20e] = new OP() { - final public int call() { - CPU.CPU_Push32(CPU_Regs.reg_csVal.dword); - return HANDLED; - } + ops[0x20e] = () -> { + CPU.CPU_Push32(CPU_Regs.reg_csVal.dword); + return HANDLED; }; /* ADC Ed,Gd */ - ops[0x211] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=ADCD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, ADCD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; + ops[0x211] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=ADCD(Modrm.Getrd[rm].dword, r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, ADCD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); } + return HANDLED; }; /* ADC Gd,Ed */ - ops[0x213] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=ADCD(Modrm.GetEArd[rm].dword, r.dword); - } else { - r.dword=ADCD(Memory.mem_readd(getEaa(rm)), r.dword); - } - return HANDLED; + ops[0x213] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=ADCD(Modrm.GetEArd[rm].dword, r.dword); + } else { + r.dword=ADCD(Memory.mem_readd(getEaa(rm)), r.dword); } + return HANDLED; }; /* ADC EAX,Id */ - ops[0x215] = new OP() { - final public int call() { - reg_eax.dword=ADCD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x215] = () -> { + reg_eax.dword=ADCD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* PUSH SS */ - ops[0x216] = new OP() { - final public int call() { - CPU.CPU_Push32(CPU_Regs.reg_ssVal.dword); - return HANDLED; - } + ops[0x216] = () -> { + CPU.CPU_Push32(CPU_Regs.reg_ssVal.dword); + return HANDLED; }; /* POP SS */ - ops[0x217] = new OP() { - final public int call() { - if (CPU.CPU_PopSegSS(true)) return RUNEXCEPTION(); - CPU.CPU_Cycles++; - return HANDLED; - } + ops[0x217] = () -> { + if (CPU.CPU_PopSegSS(true)) return RUNEXCEPTION(); + CPU.CPU_Cycles++; + return HANDLED; }; /* SBB Ed,Gd */ - ops[0x219] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=SBBD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, SBBD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; + ops[0x219] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=SBBD(Modrm.Getrd[rm].dword, r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, SBBD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); } + return HANDLED; }; /* SBB Gd,Ed */ - ops[0x21b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=SBBD(Modrm.GetEArd[rm].dword,r.dword); - } else { - r.dword=SBBD(Memory.mem_readd(getEaa(rm)),r.dword); - } - return HANDLED; + ops[0x21b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=SBBD(Modrm.GetEArd[rm].dword,r.dword); + } else { + r.dword=SBBD(Memory.mem_readd(getEaa(rm)),r.dword); } + return HANDLED; }; /* SBB EAX,Id */ - ops[0x21d] = new OP() { - final public int call() { - reg_eax.dword=SBBD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x21d] = () -> { + reg_eax.dword=SBBD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* PUSH DS */ - ops[0x21e] = new OP() { - final public int call() { - CPU.CPU_Push32(CPU_Regs.reg_dsVal.dword); - return HANDLED; - } + ops[0x21e] = () -> { + CPU.CPU_Push32(CPU_Regs.reg_dsVal.dword); + return HANDLED; }; /* POP DS */ - ops[0x21f] = new OP() { - final public int call() { - if (CPU.CPU_PopSegDS(true)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x21f] = () -> { + if (CPU.CPU_PopSegDS(true)) return RUNEXCEPTION(); + return HANDLED; }; /* AND Ed,Gd */ - ops[0x221] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=ANDD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, ANDD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; + ops[0x221] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=ANDD(Modrm.Getrd[rm].dword, r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, ANDD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); } + return HANDLED; }; /* AND Gd,Ed */ - ops[0x223] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=ANDD(Modrm.GetEArd[rm].dword, r.dword); - } else { - r.dword=ANDD(Memory.mem_readd(getEaa(rm)), r.dword); - } - return HANDLED; + ops[0x223] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=ANDD(Modrm.GetEArd[rm].dword, r.dword); + } else { + r.dword=ANDD(Memory.mem_readd(getEaa(rm)), r.dword); } + return HANDLED; }; /* AND EAX,Id */ - ops[0x225] = new OP() { - final public int call() { - reg_eax.dword=ANDD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x225] = () -> { + reg_eax.dword=ANDD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* SUB Ed,Gd */ - ops[0x229] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=SUBD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, SUBD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; + ops[0x229] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=SUBD(Modrm.Getrd[rm].dword, r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, SUBD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); } + return HANDLED; }; /* SUB Gd,Ed */ - ops[0x22b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=SUBD(Modrm.GetEArd[rm].dword,r.dword); - } else { - r.dword=SUBD(Memory.mem_readd(getEaa(rm)),r.dword); - } - return HANDLED; + ops[0x22b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=SUBD(Modrm.GetEArd[rm].dword,r.dword); + } else { + r.dword=SUBD(Memory.mem_readd(getEaa(rm)),r.dword); } + return HANDLED; }; /* SUB EAX,Id */ - ops[0x22d] = new OP() { - final public int call() { - reg_eax.dword=SUBD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x22d] = () -> { + reg_eax.dword=SUBD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* XOR Ed,Gd */ - ops[0x231] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=XORD(Modrm.Getrd[rm].dword, r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, XORD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); - } - return HANDLED; + ops[0x231] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=XORD(Modrm.Getrd[rm].dword, r.dword); } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, XORD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa))); + } + return HANDLED; }; /* XOR Gd,Ed */ - ops[0x233] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=XORD(Modrm.GetEArd[rm].dword, r.dword); - } else { - r.dword=XORD(Memory.mem_readd(getEaa(rm)), r.dword); - } - return HANDLED; + ops[0x233] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=XORD(Modrm.GetEArd[rm].dword, r.dword); + } else { + r.dword=XORD(Memory.mem_readd(getEaa(rm)), r.dword); } + return HANDLED; }; /* XOR EAX,Id */ - ops[0x235] = new OP() { - final public int call() { - reg_eax.dword=XORD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x235] = () -> { + reg_eax.dword=XORD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* CMP Ed,Gd */ - ops[0x239] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - CMPD(Modrm.Getrd[rm].dword, Modrm.GetEArd[rm].dword); - } - else { - int eaa = getEaa(rm); - CMPD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa)); - } - return HANDLED; + ops[0x239] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + CMPD(Modrm.Getrd[rm].dword, Modrm.GetEArd[rm].dword); } + else { + int eaa = getEaa(rm); + CMPD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa)); + } + return HANDLED; }; /* CMP Gd,Ed */ - ops[0x23b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - CMPD(Modrm.GetEArd[rm].dword, Modrm.Getrd[rm].dword); - } else { - CMPD(Memory.mem_readd(getEaa(rm)), Modrm.Getrd[rm].dword); - } - return HANDLED; + ops[0x23b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + CMPD(Modrm.GetEArd[rm].dword, Modrm.Getrd[rm].dword); + } else { + CMPD(Memory.mem_readd(getEaa(rm)), Modrm.Getrd[rm].dword); } + return HANDLED; }; /* CMP EAX,Id */ - ops[0x23d] = new OP() { - final public int call() { - CMPD(Fetchd(), reg_eax.dword); - return HANDLED; - } + ops[0x23d] = () -> { + CMPD(Fetchd(), reg_eax.dword); + return HANDLED; }; /* INC EAX */ - ops[0x240] = new OP() { - final public int call() { - reg_eax.dword = Instructions.INCD(reg_eax.dword); - return HANDLED; - } + ops[0x240] = () -> { + reg_eax.dword = Instructions.INCD(reg_eax.dword); + return HANDLED; }; /* INC ECX */ - ops[0x241] = new OP() { - final public int call() { - reg_ecx.dword = Instructions.INCD(reg_ecx.dword); - return HANDLED; - } + ops[0x241] = () -> { + reg_ecx.dword = Instructions.INCD(reg_ecx.dword); + return HANDLED; }; /* INC EDX */ - ops[0x242] = new OP() { - final public int call() { - reg_edx.dword = Instructions.INCD(reg_edx.dword); - return HANDLED; - } + ops[0x242] = () -> { + reg_edx.dword = Instructions.INCD(reg_edx.dword); + return HANDLED; }; /* INC EBX */ - ops[0x243] = new OP() { - final public int call() { - reg_ebx.dword = Instructions.INCD(reg_ebx.dword); - return HANDLED; - } + ops[0x243] = () -> { + reg_ebx.dword = Instructions.INCD(reg_ebx.dword); + return HANDLED; }; /* INC ESP */ - ops[0x244] = new OP() { - final public int call() { - reg_esp.dword = Instructions.INCD(reg_esp.dword); - return HANDLED; - } + ops[0x244] = () -> { + reg_esp.dword = Instructions.INCD(reg_esp.dword); + return HANDLED; }; /* INC EBP */ - ops[0x245] = new OP() { - final public int call() { - reg_ebp.dword = Instructions.INCD(reg_ebp.dword); - return HANDLED; - } + ops[0x245] = () -> { + reg_ebp.dword = Instructions.INCD(reg_ebp.dword); + return HANDLED; }; /* INC ESI */ - ops[0x246] = new OP() { - final public int call() { - reg_esi.dword = Instructions.INCD(reg_esi.dword); - return HANDLED; - } + ops[0x246] = () -> { + reg_esi.dword = Instructions.INCD(reg_esi.dword); + return HANDLED; }; /* INC EDI */ - ops[0x247] = new OP() { - final public int call() { - reg_edi.dword = Instructions.INCD(reg_edi.dword); - return HANDLED; - } + ops[0x247] = () -> { + reg_edi.dword = Instructions.INCD(reg_edi.dword); + return HANDLED; }; /* DEC EAX */ - ops[0x248] = new OP() { - final public int call() { - reg_eax.dword = Instructions.DECD(reg_eax.dword); - return HANDLED; - } + ops[0x248] = () -> { + reg_eax.dword = Instructions.DECD(reg_eax.dword); + return HANDLED; }; /* DEC ECX */ - ops[0x249] = new OP() { - final public int call() { - reg_ecx.dword = Instructions.DECD(reg_ecx.dword); - return HANDLED; - } + ops[0x249] = () -> { + reg_ecx.dword = Instructions.DECD(reg_ecx.dword); + return HANDLED; }; /* DEC EDX */ - ops[0x24a] = new OP() { - final public int call() { - reg_edx.dword = Instructions.DECD(reg_edx.dword); - return HANDLED; - } + ops[0x24a] = () -> { + reg_edx.dword = Instructions.DECD(reg_edx.dword); + return HANDLED; }; /* DEC EBX */ - ops[0x24b] = new OP() { - final public int call() { - reg_ebx.dword = Instructions.DECD(reg_ebx.dword); - return HANDLED; - } + ops[0x24b] = () -> { + reg_ebx.dword = Instructions.DECD(reg_ebx.dword); + return HANDLED; }; /* DEC ESP */ - ops[0x24c] = new OP() { - final public int call() { - reg_esp.dword = Instructions.DECD(reg_esp.dword); - return HANDLED; - } + ops[0x24c] = () -> { + reg_esp.dword = Instructions.DECD(reg_esp.dword); + return HANDLED; }; /* DEC EBP */ - ops[0x24d] = new OP() { - final public int call() { - reg_ebp.dword = Instructions.DECD(reg_ebp.dword); - return HANDLED; - } + ops[0x24d] = () -> { + reg_ebp.dword = Instructions.DECD(reg_ebp.dword); + return HANDLED; }; /* DEC ESI */ - ops[0x24e] = new OP() { - final public int call() { - reg_esi.dword = Instructions.DECD(reg_esi.dword); - return HANDLED; - } + ops[0x24e] = () -> { + reg_esi.dword = Instructions.DECD(reg_esi.dword); + return HANDLED; }; /* DEC EDI */ - ops[0x24f] = new OP() { - final public int call() { - reg_edi.dword = Instructions.DECD(reg_edi.dword); - return HANDLED; - } + ops[0x24f] = () -> { + reg_edi.dword = Instructions.DECD(reg_edi.dword); + return HANDLED; }; /* PUSH EAX */ - ops[0x250] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_eax.dword); - return HANDLED; - } + ops[0x250] = () -> { + CPU.CPU_Push32(reg_eax.dword); + return HANDLED; }; /* PUSH ECX */ - ops[0x251] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_ecx.dword); - return HANDLED; - } + ops[0x251] = () -> { + CPU.CPU_Push32(reg_ecx.dword); + return HANDLED; }; /* PUSH EDX */ - ops[0x252] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_edx.dword); - return HANDLED; - } + ops[0x252] = () -> { + CPU.CPU_Push32(reg_edx.dword); + return HANDLED; }; /* PUSH EBX */ - ops[0x253] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_ebx.dword); - return HANDLED; - } + ops[0x253] = () -> { + CPU.CPU_Push32(reg_ebx.dword); + return HANDLED; }; /* PUSH ESP */ - ops[0x254] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_esp.dword); - return HANDLED; - } + ops[0x254] = () -> { + CPU.CPU_Push32(reg_esp.dword); + return HANDLED; }; /* PUSH EBP */ - ops[0x255] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_ebp.dword); - return HANDLED; - } + ops[0x255] = () -> { + CPU.CPU_Push32(reg_ebp.dword); + return HANDLED; }; /* PUSH ESI */ - ops[0x256] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_esi.dword); - return HANDLED; - } + ops[0x256] = () -> { + CPU.CPU_Push32(reg_esi.dword); + return HANDLED; }; /* PUSH EDI */ - ops[0x257] = new OP() { - final public int call() { - CPU.CPU_Push32(reg_edi.dword); - return HANDLED; - } + ops[0x257] = () -> { + CPU.CPU_Push32(reg_edi.dword); + return HANDLED; }; /* POP EAX */ - ops[0x258] = new OP() { - final public int call() { - reg_eax.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x258] = () -> { + reg_eax.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP ECX */ - ops[0x259] = new OP() { - final public int call() { - reg_ecx.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x259] = () -> { + reg_ecx.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP EDX */ - ops[0x25a] = new OP() { - final public int call() { - reg_edx.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x25a] = () -> { + reg_edx.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP EBX */ - ops[0x25b] = new OP() { - final public int call() { - reg_ebx.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x25b] = () -> { + reg_ebx.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP ESP */ - ops[0x25c] = new OP() { - final public int call() { - reg_esp.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x25c] = () -> { + reg_esp.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP EBP */ - ops[0x25d] = new OP() { - final public int call() { - reg_ebp.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x25d] = () -> { + reg_ebp.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP ESI */ - ops[0x25e] = new OP() { - final public int call() { - reg_esi.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x25e] = () -> { + reg_esi.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* POP EDI */ - ops[0x25f] = new OP() { - final public int call() { - reg_edi.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x25f] = () -> { + reg_edi.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* PUSHAD */ - ops[0x260] = new OP() { - final public int call() { - /*Bitu*/int tmpesp = reg_esp.dword; - int esp = reg_esp.dword; - esp = CPU.CPU_Push32(esp, reg_eax.dword); - esp = CPU.CPU_Push32(esp, reg_ecx.dword); - esp = CPU.CPU_Push32(esp, reg_edx.dword); - esp = CPU.CPU_Push32(esp, reg_ebx.dword); - esp = CPU.CPU_Push32(esp, tmpesp); - esp = CPU.CPU_Push32(esp, reg_ebp.dword); - esp = CPU.CPU_Push32(esp, reg_esi.dword); - esp = CPU.CPU_Push32(esp, reg_edi.dword); - // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant - reg_esp.dword = esp; - return HANDLED; - } + ops[0x260] = () -> { + /*Bitu*/int tmpesp = reg_esp.dword; + int esp = reg_esp.dword; + esp = CPU.CPU_Push32(esp, reg_eax.dword); + esp = CPU.CPU_Push32(esp, reg_ecx.dword); + esp = CPU.CPU_Push32(esp, reg_edx.dword); + esp = CPU.CPU_Push32(esp, reg_ebx.dword); + esp = CPU.CPU_Push32(esp, tmpesp); + esp = CPU.CPU_Push32(esp, reg_ebp.dword); + esp = CPU.CPU_Push32(esp, reg_esi.dword); + esp = CPU.CPU_Push32(esp, reg_edi.dword); + // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant + reg_esp.dword = esp; + return HANDLED; }; /* POPAD */ - ops[0x261] = new OP() { - final public int call() { - reg_edi.dword=CPU.CPU_Pop32(); - reg_esi.dword=CPU.CPU_Pop32(); - reg_ebp.dword=CPU.CPU_Pop32();CPU.CPU_Pop32();//Don't save ESP - reg_ebx.dword=CPU.CPU_Pop32(); - reg_edx.dword=CPU.CPU_Pop32(); - reg_ecx.dword=CPU.CPU_Pop32(); - reg_eax.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x261] = () -> { + reg_edi.dword=CPU.CPU_Pop32(); + reg_esi.dword=CPU.CPU_Pop32(); + reg_ebp.dword=CPU.CPU_Pop32();CPU.CPU_Pop32();//Don't save ESP + reg_ebx.dword=CPU.CPU_Pop32(); + reg_edx.dword=CPU.CPU_Pop32(); + reg_ecx.dword=CPU.CPU_Pop32(); + reg_eax.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* BOUND Ed */ - ops[0x262] = new OP() { - final public int call() { - /*Bit32s*/int bound_min, bound_max; - /*Bit8u*/int rm=Fetchb();/*PhysPt*/int eaa=getEaa(rm); - bound_min=Memory.mem_readd(eaa); - bound_max=Memory.mem_readd(eaa + 4); - int rmrd = Modrm.Getrd[rm].dword; - if (rmrd < bound_min || rmrd > bound_max) { - return EXCEPTION(5); - } - return HANDLED; + ops[0x262] = () -> { + /*Bit32s*/int bound_min, bound_max; + /*Bit8u*/int rm=Fetchb();/*PhysPt*/int eaa=getEaa(rm); + bound_min=Memory.mem_readd(eaa); + bound_max=Memory.mem_readd(eaa + 4); + int rmrd = Modrm.Getrd[rm].dword; + if (rmrd < bound_min || rmrd > bound_max) { + return EXCEPTION(5); } + return HANDLED; }; /* ARPL Ed,Rd */ - ops[0x263] = new OP() { - final public int call() { - if (((CPU.cpu.pmode) && (CPU_Regs.flags & CPU_Regs.VM)!=0) || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArd[rm].dword = CPU.CPU_ARPL(Modrm.GetEArd[rm].dword,Modrm.Getrw[rm].word()); - } else { - /*PhysPt*/int eaa=getEaa(rm); - int value = Memory.mem_readw(eaa); - value = CPU.CPU_ARPL(value,Modrm.Getrw[rm].word()); - Memory.mem_writed(eaa,value); - } - return HANDLED; + ops[0x263] = () -> { + if (!CPU.cpu.pmode || (CPU_Regs.flags & CPU_Regs.VM) != 0) return ILLEGAL_OPCODE; + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArd[rm].dword = CPU.CPU_ARPL(Modrm.GetEArd[rm].dword,Modrm.Getrw[rm].word()); + } else { + /*PhysPt*/int eaa=getEaa(rm); + int value = Memory.mem_readw(eaa); + value = CPU.CPU_ARPL(value,Modrm.Getrw[rm].word()); + Memory.mem_writed(eaa,value); } + return HANDLED; }; /* PUSH Id */ - ops[0x268] = new OP() { - final public int call() { - CPU.CPU_Push32(Fetchd()); - return HANDLED; - } + ops[0x268] = () -> { + CPU.CPU_Push32(Fetchd()); + return HANDLED; }; /* IMUL Gd,Ed,Id */ - ops[0x269] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - int op3 = Fetchds(); - Modrm.Getrd[rm].dword=DIMULD(Modrm.GetEArd[rm].dword,op3); - } - else { - int eaa = getEaa(rm); - int op3 = Fetchds(); - Modrm.Getrd[rm].dword=DIMULD(Memory.mem_readd(eaa),op3); - } - return HANDLED; + ops[0x269] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + int op3 = Fetchds(); + Modrm.Getrd[rm].dword=DIMULD(Modrm.GetEArd[rm].dword,op3); + } + else { + int eaa = getEaa(rm); + int op3 = Fetchds(); + Modrm.Getrd[rm].dword=DIMULD(Memory.mem_readd(eaa),op3); } + return HANDLED; }; /* PUSH Ib */ - ops[0x26a] = new OP() { - final public int call() { - CPU.CPU_Push32(Fetchbs()); - return HANDLED; - } + ops[0x26a] = () -> { + CPU.CPU_Push32(Fetchbs()); + return HANDLED; }; /* IMUL Gd,Ed,Ib */ - ops[0x26b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - int op3 = Fetchbs(); - Modrm.Getrd[rm].dword=DIMULD(Modrm.GetEArd[rm].dword,op3); - } - else { - int eaa = getEaa(rm); - int op3 = Fetchbs(); - Modrm.Getrd[rm].dword=DIMULD(Memory.mem_readd(eaa),op3); - } - return HANDLED; + ops[0x26b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + int op3 = Fetchbs(); + Modrm.Getrd[rm].dword=DIMULD(Modrm.GetEArd[rm].dword,op3); + } + else { + int eaa = getEaa(rm); + int op3 = Fetchbs(); + Modrm.Getrd[rm].dword=DIMULD(Memory.mem_readd(eaa),op3); } + return HANDLED; }; /* INSD */ - ops[0x26d] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),4)) return RUNEXCEPTION(); - DoString(R_INSD); - return HANDLED; - } + ops[0x26d] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),4)) return RUNEXCEPTION(); + DoString(R_INSD); + return HANDLED; }; /* OUTSD */ - ops[0x26f] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),4)) return RUNEXCEPTION(); - DoString(R_OUTSD); - return HANDLED; - } + ops[0x26f] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),4)) return RUNEXCEPTION(); + DoString(R_OUTSD); + return HANDLED; }; /* JO */ - ops[0x270] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_O()); - return CONTINUE; - } + ops[0x270] = () -> { + JumpCond32_b(Flags.TFLG_O()); + return CONTINUE; }; /* JNO */ - ops[0x271] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NO()); - return CONTINUE; - } + ops[0x271] = () -> { + JumpCond32_b(Flags.TFLG_NO()); + return CONTINUE; }; /* JB */ - ops[0x272] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_B()); - return CONTINUE; - } + ops[0x272] = () -> { + JumpCond32_b(Flags.TFLG_B()); + return CONTINUE; }; /* JNB */ - ops[0x273] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NB()); - return CONTINUE; - } + ops[0x273] = () -> { + JumpCond32_b(Flags.TFLG_NB()); + return CONTINUE; }; /* JZ */ - ops[0x274] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_Z()); - return CONTINUE; - } + ops[0x274] = () -> { + JumpCond32_b(Flags.TFLG_Z()); + return CONTINUE; }; /* JNZ */ - ops[0x275] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NZ()); - return CONTINUE; - } + ops[0x275] = () -> { + JumpCond32_b(Flags.TFLG_NZ()); + return CONTINUE; }; /* JBE */ - ops[0x276] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_BE()); - return CONTINUE; - } + ops[0x276] = () -> { + JumpCond32_b(Flags.TFLG_BE()); + return CONTINUE; }; /* JNBE */ - ops[0x277] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NBE()); - return CONTINUE; - } + ops[0x277] = () -> { + JumpCond32_b(Flags.TFLG_NBE()); + return CONTINUE; }; /* JS */ - ops[0x278] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_S()); - return CONTINUE; - } + ops[0x278] = () -> { + JumpCond32_b(Flags.TFLG_S()); + return CONTINUE; }; /* JNS */ - ops[0x279] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NS()); - return CONTINUE; - } + ops[0x279] = () -> { + JumpCond32_b(Flags.TFLG_NS()); + return CONTINUE; }; /* JP */ - ops[0x27a] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_P()); - return CONTINUE; - } + ops[0x27a] = () -> { + JumpCond32_b(Flags.TFLG_P()); + return CONTINUE; }; /* JNP */ - ops[0x27b] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NP()); - return CONTINUE; - } + ops[0x27b] = () -> { + JumpCond32_b(Flags.TFLG_NP()); + return CONTINUE; }; /* JL */ - ops[0x27c] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_L()); - return CONTINUE; - } + ops[0x27c] = () -> { + JumpCond32_b(Flags.TFLG_L()); + return CONTINUE; }; /* JNL */ - ops[0x27d] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NL()); - return CONTINUE; - } + ops[0x27d] = () -> { + JumpCond32_b(Flags.TFLG_NL()); + return CONTINUE; }; /* JLE */ - ops[0x27e] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_LE()); - return CONTINUE; - } + ops[0x27e] = () -> { + JumpCond32_b(Flags.TFLG_LE()); + return CONTINUE; }; /* JNLE */ - ops[0x27f] = new OP() { - final public int call() { - JumpCond32_b(Flags.TFLG_NLE()); - return CONTINUE; - } + ops[0x27f] = () -> { + JumpCond32_b(Flags.TFLG_NLE()); + return CONTINUE; }; /* Grpl Ed,Id */ - ops[0x281] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - if (rm >= 0xc0) { - Reg r = Modrm.GetEArd[rm]; - /*Bit32u*/int id= Fetchd(); - switch (which) { - case 0x00: - r.dword=ADDD(id, r.dword);break; - case 0x01: - r.dword=ORD(id, r.dword);break; - case 0x02: - r.dword=ADCD(id,r.dword);break; - case 0x03: - r.dword=SBBD(id,r.dword);break; - case 0x04: - r.dword=ANDD(id,r.dword);break; - case 0x05: - r.dword=SUBD(id,r.dword);break; - case 0x06: - r.dword=XORD(id,r.dword);break; - case 0x07:CMPD(id, r.dword);break; - } - } else { - int eaa = getEaa(rm); - /*Bit32u*/int id= Fetchd(); - switch (which) { - case 0x00:Memory.mem_writed(eaa, ADDD(id,Memory.mem_readd(eaa)));break; - case 0x01: Memory.mem_writed(eaa, ORD(id,Memory.mem_readd(eaa)));break; - case 0x02:Memory.mem_writed(eaa, ADCD(id,Memory.mem_readd(eaa)));break; - case 0x03:Memory.mem_writed(eaa, SBBD(id,Memory.mem_readd(eaa)));break; - case 0x04:Memory.mem_writed(eaa, ANDD(id,Memory.mem_readd(eaa)));break; - case 0x05:Memory.mem_writed(eaa, SUBD(id,Memory.mem_readd(eaa)));break; - case 0x06:Memory.mem_writed(eaa, XORD(id,Memory.mem_readd(eaa)));break; - case 0x07:CMPD(id,Memory.mem_readd(eaa));break; - } + ops[0x281] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + if (rm >= 0xc0) { + Reg r = Modrm.GetEArd[rm]; + /*Bit32u*/int id= Fetchd(); + switch (which) { + case 0x00: + r.dword=ADDD(id, r.dword);break; + case 0x01: + r.dword=ORD(id, r.dword);break; + case 0x02: + r.dword=ADCD(id,r.dword);break; + case 0x03: + r.dword=SBBD(id,r.dword);break; + case 0x04: + r.dword=ANDD(id,r.dword);break; + case 0x05: + r.dword=SUBD(id,r.dword);break; + case 0x06: + r.dword=XORD(id,r.dword);break; + case 0x07:CMPD(id, r.dword);break; + } + } else { + int eaa = getEaa(rm); + /*Bit32u*/int id= Fetchd(); + switch (which) { + case 0x00:Memory.mem_writed(eaa, ADDD(id,Memory.mem_readd(eaa)));break; + case 0x01: Memory.mem_writed(eaa, ORD(id,Memory.mem_readd(eaa)));break; + case 0x02:Memory.mem_writed(eaa, ADCD(id,Memory.mem_readd(eaa)));break; + case 0x03:Memory.mem_writed(eaa, SBBD(id,Memory.mem_readd(eaa)));break; + case 0x04:Memory.mem_writed(eaa, ANDD(id,Memory.mem_readd(eaa)));break; + case 0x05:Memory.mem_writed(eaa, SUBD(id,Memory.mem_readd(eaa)));break; + case 0x06:Memory.mem_writed(eaa, XORD(id,Memory.mem_readd(eaa)));break; + case 0x07:CMPD(id,Memory.mem_readd(eaa));break; } - return HANDLED; } + return HANDLED; }; /* Grpl Ed,Ix */ - ops[0x283] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - /*Bitu*/int which=(rm>>3)&7; - if (rm >= 0xc0) { - /*Bit32u*/int id=Fetchbs(); - Reg r = Modrm.GetEArd[rm]; - switch (which) { - case 0x00: r.dword=ADDD(id, r.dword);break; - case 0x01: r.dword=ORD(id, r.dword);break; - case 0x02: r.dword=ADCD(id, r.dword);break; - case 0x03: r.dword=SBBD(id, r.dword);break; - case 0x04: r.dword=ANDD(id, r.dword);break; - case 0x05: r.dword=SUBD(id, r.dword);break; - case 0x06: r.dword=XORD(id, r.dword);break; - case 0x07: CMPD(id, r.dword);break; - } - } else { - int eaa = getEaa(rm); + ops[0x283] = () -> { + /*Bit8u*/final int rm=Fetchb(); + /*Bitu*/int which=(rm>>3)&7; + if (rm >= 0xc0) { + /*Bit32u*/int id=Fetchbs(); + Reg r = Modrm.GetEArd[rm]; + switch (which) { + case 0x00: r.dword=ADDD(id, r.dword);break; + case 0x01: r.dword=ORD(id, r.dword);break; + case 0x02: r.dword=ADCD(id, r.dword);break; + case 0x03: r.dword=SBBD(id, r.dword);break; + case 0x04: r.dword=ANDD(id, r.dword);break; + case 0x05: r.dword=SUBD(id, r.dword);break; + case 0x06: r.dword=XORD(id, r.dword);break; + case 0x07: CMPD(id, r.dword);break; + } + } else { + int eaa = getEaa(rm); - /*Bit32u*/int id=Fetchbs(); - switch (which) { - case 0x00:Memory.mem_writed(eaa, ADDD(id,Memory.mem_readd(eaa)));break; - case 0x01: Memory.mem_writed(eaa, ORD(id,Memory.mem_readd(eaa)));break; - case 0x02:Memory.mem_writed(eaa, ADCD(id,Memory.mem_readd(eaa)));break; - case 0x03:Memory.mem_writed(eaa, SBBD(id,Memory.mem_readd(eaa)));break; - case 0x04:Memory.mem_writed(eaa, ANDD(id,Memory.mem_readd(eaa)));break; - case 0x05:Memory.mem_writed(eaa, SUBD(id,Memory.mem_readd(eaa)));break; - case 0x06:Memory.mem_writed(eaa, XORD(id,Memory.mem_readd(eaa)));break; - case 0x07:CMPD(id,Memory.mem_readd(eaa));break; - } + /*Bit32u*/int id=Fetchbs(); + switch (which) { + case 0x00:Memory.mem_writed(eaa, ADDD(id,Memory.mem_readd(eaa)));break; + case 0x01: Memory.mem_writed(eaa, ORD(id,Memory.mem_readd(eaa)));break; + case 0x02:Memory.mem_writed(eaa, ADCD(id,Memory.mem_readd(eaa)));break; + case 0x03:Memory.mem_writed(eaa, SBBD(id,Memory.mem_readd(eaa)));break; + case 0x04:Memory.mem_writed(eaa, ANDD(id,Memory.mem_readd(eaa)));break; + case 0x05:Memory.mem_writed(eaa, SUBD(id,Memory.mem_readd(eaa)));break; + case 0x06:Memory.mem_writed(eaa, XORD(id,Memory.mem_readd(eaa)));break; + case 0x07:CMPD(id,Memory.mem_readd(eaa));break; } - return HANDLED; } + return HANDLED; }; /* TEST Ed,Gd */ - ops[0x285] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - TESTD(Modrm.Getrd[rm].dword, Modrm.GetEArd[rm].dword); - } - else { - int eaa = getEaa(rm); - TESTD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa)); - } - return HANDLED; + ops[0x285] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + TESTD(Modrm.Getrd[rm].dword, Modrm.GetEArd[rm].dword); + } + else { + int eaa = getEaa(rm); + TESTD(Modrm.Getrd[rm].dword,Memory.mem_readd(eaa)); } + return HANDLED; }; /* XCHG Ed,Gd */ - ops[0x287] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - Reg rd = Modrm.Getrd[rm]; - /*Bit32u*/int oldrmrd= rd.dword; - if (rm >= 0xc0 ) { - Reg eard = Modrm.GetEArd[rm]; - rd.dword=eard.dword; - eard.dword=oldrmrd; - } else { - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readd(eaa); - Memory.mem_writed(eaa,oldrmrd); - rd.dword=val; - } - return HANDLED; + ops[0x287] = () -> { + /*Bit8u*/int rm=Fetchb(); + Reg rd = Modrm.Getrd[rm]; + /*Bit32u*/int oldrmrd= rd.dword; + if (rm >= 0xc0 ) { + Reg eard = Modrm.GetEArd[rm]; + rd.dword=eard.dword; + eard.dword=oldrmrd; + } else { + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readd(eaa); + Memory.mem_writed(eaa,oldrmrd); + rd.dword=val; } + return HANDLED; }; /* MOV Ed,Gd */ - ops[0x289] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArd[rm].dword=Modrm.Getrd[rm].dword; - } else { - /*PhysPt*/int eaa=getEaa(rm);Memory.mem_writed(eaa, Modrm.Getrd[rm].dword); - } - return HANDLED; + ops[0x289] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArd[rm].dword=Modrm.Getrd[rm].dword; + } else { + /*PhysPt*/int eaa=getEaa(rm);Memory.mem_writed(eaa, Modrm.Getrd[rm].dword); } + return HANDLED; }; /* MOV Gd,Ed */ - ops[0x28b] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrd[rm].dword=Modrm.GetEArd[rm].dword; - } else { - /*PhysPt*/int eaa=getEaa(rm); - Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); - } - return HANDLED; + ops[0x28b] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrd[rm].dword=Modrm.GetEArd[rm].dword; + } else { + /*PhysPt*/int eaa=getEaa(rm); + Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); } + return HANDLED; }; /* Mov Ew,Sw */ - ops[0x28c] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bit16u*/int val;/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* MOV Ew,ES */ - val=CPU_Regs.reg_esVal.dword;break; - case 0x01: /* MOV Ew,CS */ - val=CPU_Regs.reg_csVal.dword;break; - case 0x02: /* MOV Ew,SS */ - val=CPU_Regs.reg_ssVal.dword;break; - case 0x03: /* MOV Ew,DS */ - val=CPU_Regs.reg_dsVal.dword;break; - case 0x04: /* MOV Ew,FS */ - val=CPU_Regs.reg_fsVal.dword;break; - case 0x05: /* MOV Ew,GS */ - val=CPU_Regs.reg_gsVal.dword;break; - default: - Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"CPU:8c:Illegal RM Byte"); - return ILLEGAL_OPCODE; - } - if (rm >= 0xc0 ) { - Modrm.GetEArd[rm].dword=val;} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,val);} - return HANDLED; - } + ops[0x28c] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bit16u*/int val;/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* MOV Ew,ES */ + val=CPU_Regs.reg_esVal.dword;break; + case 0x01: /* MOV Ew,CS */ + val=CPU_Regs.reg_csVal.dword;break; + case 0x02: /* MOV Ew,SS */ + val=CPU_Regs.reg_ssVal.dword;break; + case 0x03: /* MOV Ew,DS */ + val=CPU_Regs.reg_dsVal.dword;break; + case 0x04: /* MOV Ew,FS */ + val=CPU_Regs.reg_fsVal.dword;break; + case 0x05: /* MOV Ew,GS */ + val=CPU_Regs.reg_gsVal.dword;break; + default: + Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"CPU:8c:Illegal RM Byte"); + return ILLEGAL_OPCODE; + } + if (rm >= 0xc0 ) { + Modrm.GetEArd[rm].dword=val;} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,val);} + return HANDLED; }; /* LEA Gd */ - ops[0x28d] = new OP() { - final public int call() { - //Little hack to always use segprefixed version - /*Bit8u*/int rm=Fetchb(); - base_ds=base_ss=0; - if (TEST_PREFIX_ADDR()!=0) { - Modrm.Getrd[rm].dword=getEaa32(rm); - } else { - Modrm.Getrd[rm].dword=getEaa16(rm); - } - return HANDLED; + ops[0x28d] = () -> { + //Little hack to always use segprefixed version + /*Bit8u*/int rm=Fetchb(); + base_ds=base_ss=0; + if (TEST_PREFIX_ADDR()!=0) { + Modrm.Getrd[rm].dword=getEaa32(rm); + } else { + Modrm.Getrd[rm].dword=getEaa16(rm); } + return HANDLED; }; /* POP Ed */ - ops[0x28f] = new OP() { - final public int call() { - /*Bit32u*/int val=CPU.CPU_Pop32(); - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArd[rm].dword=val;} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writed(eaa,val);} - return HANDLED; - } + ops[0x28f] = () -> { + /*Bit32u*/int val=CPU.CPU_Pop32(); + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArd[rm].dword=val;} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writed(eaa,val);} + return HANDLED; }; /* XCHG ECX,EAX */ - ops[0x291] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_ecx.dword; - reg_ecx.dword=temp; - return HANDLED; - } + ops[0x291] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_ecx.dword; + reg_ecx.dword=temp; + return HANDLED; }; /* XCHG EDX,EAX */ - ops[0x292] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_edx.dword; - reg_edx.dword=temp; - return HANDLED; - } + ops[0x292] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_edx.dword; + reg_edx.dword=temp; + return HANDLED; }; /* XCHG EBX,EAX */ - ops[0x293] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_ebx.dword; - reg_ebx.dword=temp; - return HANDLED; - } + ops[0x293] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_ebx.dword; + reg_ebx.dword=temp; + return HANDLED; }; /* XCHG ESP,EAX */ - ops[0x294] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_esp.dword; - reg_esp.dword=temp; - return HANDLED; - } + ops[0x294] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_esp.dword; + reg_esp.dword=temp; + return HANDLED; }; /* XCHG EBP,EAX */ - ops[0x295] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_ebp.dword; - reg_ebp.dword=temp; - return HANDLED; - } + ops[0x295] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_ebp.dword; + reg_ebp.dword=temp; + return HANDLED; }; /* XCHG ESI,EAX */ - ops[0x296] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_esi.dword; - reg_esi.dword=temp; - return HANDLED; - } + ops[0x296] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_esi.dword; + reg_esi.dword=temp; + return HANDLED; }; /* XCHG EDI,EAX */ - ops[0x297] = new OP() { - final public int call() { - int temp= reg_eax.dword; - reg_eax.dword=reg_edi.dword; - reg_edi.dword=temp; - return HANDLED; - } + ops[0x297] = () -> { + int temp= reg_eax.dword; + reg_eax.dword=reg_edi.dword; + reg_edi.dword=temp; + return HANDLED; }; /* CWDE */ - ops[0x298] = new OP() { - final public int call() { - reg_eax.dword=(short)reg_eax.word(); - return HANDLED; - } + ops[0x298] = () -> { + reg_eax.dword=(short)reg_eax.word(); + return HANDLED; }; /* CDQ */ - ops[0x299] = new OP() { - final public int call() { - if ((reg_eax.dword & 0x80000000)!=0) reg_edx.dword=0xffffffff; - else reg_edx.dword=0; - return HANDLED; - } + ops[0x299] = () -> { + if ((reg_eax.dword & 0x80000000)!=0) reg_edx.dword=0xffffffff; + else reg_edx.dword=0; + return HANDLED; }; /* CALL FAR Ad */ - ops[0x29a] = new OP() { - final public int call() { - /*Bit32u*/int newip= Fetchd();/*Bit16u*/int newcs=Fetchw(); - FillFlags(); - CPU.CPU_CALL(true,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } - return CONTINUE; - } + ops[0x29a] = () -> { + /*Bit32u*/int newip= Fetchd();/*Bit16u*/int newcs=Fetchw(); + FillFlags(); + CPU.CPU_CALL(true,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; + } + return CONTINUE; }; /* PUSHFD */ - ops[0x29c] = new OP() { - final public int call() { - if (CPU.CPU_PUSHF(true)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x29c] = () -> { + if (CPU.CPU_PUSHF(true)) return RUNEXCEPTION(); + return HANDLED; }; /* POPFD */ - ops[0x29d] = new OP() { - final public int call() { - if (CPU.CPU_POPF(true)) return RUNEXCEPTION(); - if (CPU_TRAP_CHECK) - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return DECODE_END; - } - if (CPU_PIC_CHECK) - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return DECODE_END; - return HANDLED; - } + ops[0x29d] = () -> { + if (CPU.CPU_POPF(true)) return RUNEXCEPTION(); + if (CPU_TRAP_CHECK) + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return DECODE_END; + } + if (CPU_PIC_CHECK) + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return DECODE_END; + return HANDLED; }; /* MOV EAX,Od */ - ops[0x2a1] = new OP() { - final public int call() { - reg_eax.dword=Memory.mem_readd(GetEADirect()); - return HANDLED; - } + ops[0x2a1] = () -> { + reg_eax.dword=Memory.mem_readd(GetEADirect()); + return HANDLED; }; /* MOV Od,EAX */ - ops[0x2a3] = new OP() { - final public int call() { - Memory.mem_writed(GetEADirect(), reg_eax.dword); - return HANDLED; - } + ops[0x2a3] = () -> { + Memory.mem_writed(GetEADirect(), reg_eax.dword); + return HANDLED; }; /* MOVSD */ - ops[0x2a5] = new OP() { - final public int call() { - DoString(R_MOVSD); - return HANDLED; - } + ops[0x2a5] = () -> { + DoString(R_MOVSD); + return HANDLED; }; /* CMPSD */ - ops[0x2a7] = new OP() { - final public int call() { - DoString(R_CMPSD); - return HANDLED; - } + ops[0x2a7] = () -> { + DoString(R_CMPSD); + return HANDLED; }; /* TEST EAX,Id */ - ops[0x2a9] = new OP() { - final public int call() { - TESTD(Fetchd(),reg_eax.dword); - return HANDLED; - } + ops[0x2a9] = () -> { + TESTD(Fetchd(),reg_eax.dword); + return HANDLED; }; /* STOSD */ - ops[0x2ab] = new OP() { - final public int call() { - DoString(R_STOSD); - return HANDLED; - } + ops[0x2ab] = () -> { + DoString(R_STOSD); + return HANDLED; }; /* LODSD */ - ops[0x2ad] = new OP() { - final public int call() { - DoString(R_LODSD); - return HANDLED; - } + ops[0x2ad] = () -> { + DoString(R_LODSD); + return HANDLED; }; /* SCASD */ - ops[0x2af] = new OP() { - final public int call() { - DoString(R_SCASD); - return HANDLED; - } + ops[0x2af] = () -> { + DoString(R_SCASD); + return HANDLED; }; /* MOV EAX,Id */ - ops[0x2b8] = new OP() { - final public int call() { - reg_eax.dword= Fetchd(); - return HANDLED; - } + ops[0x2b8] = () -> { + reg_eax.dword= Fetchd(); + return HANDLED; }; /* MOV ECX,Id */ - ops[0x2b9] = new OP() { - final public int call() { - reg_ecx.dword= Fetchd(); - return HANDLED; - } + ops[0x2b9] = () -> { + reg_ecx.dword= Fetchd(); + return HANDLED; }; /* MOV EDX,Iw */ - ops[0x2ba] = new OP() { - final public int call() { - reg_edx.dword= Fetchd(); - return HANDLED; - } + ops[0x2ba] = () -> { + reg_edx.dword= Fetchd(); + return HANDLED; }; /* MOV EBX,Id */ - ops[0x2bb] = new OP() { - final public int call() { - reg_ebx.dword= Fetchd(); - return HANDLED; - } + ops[0x2bb] = () -> { + reg_ebx.dword= Fetchd(); + return HANDLED; }; /* MOV ESP,Id */ - ops[0x2bc] = new OP() { - final public int call() { - reg_esp.dword= Fetchd(); - return HANDLED; - } + ops[0x2bc] = () -> { + reg_esp.dword= Fetchd(); + return HANDLED; }; /* MOV EBP.Id */ - ops[0x2bd] = new OP() { - final public int call() { - reg_ebp.dword= Fetchd(); - return HANDLED; - } + ops[0x2bd] = () -> { + reg_ebp.dword= Fetchd(); + return HANDLED; }; /* MOV ESI,Id */ - ops[0x2be] = new OP() { - final public int call() { - reg_esi.dword= Fetchd(); - return HANDLED; - } + ops[0x2be] = () -> { + reg_esi.dword= Fetchd(); + return HANDLED; }; /* MOV EDI,Id */ - ops[0x2bf] = new OP() { - final public int call() { - reg_edi.dword= Fetchd(); - return HANDLED; - } + ops[0x2bf] = () -> { + reg_edi.dword= Fetchd(); + return HANDLED; }; /* GRP2 Ed,Ib */ - ops[0x2c1] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - /*Bitu*/int which=(rm>>3)&7; - if (rm >= 0xc0) { - int blah = Fetchb(); - /*Bit8u*/int val=blah & 0x1f; - if (val == 0) return HANDLED; - - Reg r = Modrm.GetEArd[rm]; - switch (which) { - case 0x00: - r.dword=ROLD(val, r.dword);break; - case 0x01: - r.dword=RORD(val, r.dword);break; - case 0x02: - r.dword=RCLD(val, r.dword);break; - case 0x03: - r.dword=RCRD(val, r.dword);break; - case 0x04:/* SHL and SAL are the same */ - case 0x06: - r.dword=SHLD(val,r.dword);break; - case 0x05: - r.dword=SHRD(val,r.dword);break; - case 0x07: - r.dword=SARD(val,r.dword);break; - } - } else { - int eaa = getEaa(rm); - int blah = Fetchb(); - /*Bit8u*/int val=blah & 0x1f; - if (val == 0) return HANDLED; - switch (which) { - case 0x00:Memory.mem_writed(eaa, ROLD(val,Memory.mem_readd(eaa)));break; - case 0x01:Memory.mem_writed(eaa, RORD(val,Memory.mem_readd(eaa)));break; - case 0x02:Memory.mem_writed(eaa, RCLD(val,Memory.mem_readd(eaa)));break; - case 0x03:Memory.mem_writed(eaa, RCRD(val,Memory.mem_readd(eaa)));break; - case 0x04:/* SHL and SAL are the same */ - case 0x06:Memory.mem_writed(eaa, SHLD(val,Memory.mem_readd(eaa)));break; - case 0x05:Memory.mem_writed(eaa, SHRD(val,Memory.mem_readd(eaa)));break; - case 0x07:Memory.mem_writed(eaa, SARD(val,Memory.mem_readd(eaa)));break; - } + ops[0x2c1] = () -> { + /*Bit8u*/final int rm=Fetchb(); + /*Bitu*/int which=(rm>>3)&7; + if (rm >= 0xc0) { + int blah = Fetchb(); + /*Bit8u*/int val=blah & 0x1f; + if (val == 0) return HANDLED; + + Reg r = Modrm.GetEArd[rm]; + switch (which) { + case 0x00: + r.dword=ROLD(val, r.dword);break; + case 0x01: + r.dword=RORD(val, r.dword);break; + case 0x02: + r.dword=RCLD(val, r.dword);break; + case 0x03: + r.dword=RCRD(val, r.dword);break; + case 0x04:/* SHL and SAL are the same */ + case 0x06: + r.dword=SHLD(val,r.dword);break; + case 0x05: + r.dword=SHRD(val,r.dword);break; + case 0x07: + r.dword=SARD(val,r.dword);break; + } + } else { + int eaa = getEaa(rm); + int blah = Fetchb(); + /*Bit8u*/int val=blah & 0x1f; + if (val == 0) return HANDLED; + switch (which) { + case 0x00:Memory.mem_writed(eaa, ROLD(val,Memory.mem_readd(eaa)));break; + case 0x01:Memory.mem_writed(eaa, RORD(val,Memory.mem_readd(eaa)));break; + case 0x02:Memory.mem_writed(eaa, RCLD(val,Memory.mem_readd(eaa)));break; + case 0x03:Memory.mem_writed(eaa, RCRD(val,Memory.mem_readd(eaa)));break; + case 0x04:/* SHL and SAL are the same */ + case 0x06:Memory.mem_writed(eaa, SHLD(val,Memory.mem_readd(eaa)));break; + case 0x05:Memory.mem_writed(eaa, SHRD(val,Memory.mem_readd(eaa)));break; + case 0x07:Memory.mem_writed(eaa, SARD(val,Memory.mem_readd(eaa)));break; } - return HANDLED; } + return HANDLED; }; /* RETN Iw */ - ops[0x2c2] = new OP() { - final public int call() { - int offset = Fetchw(); - reg_eip=CPU.CPU_Pop32(); - reg_esp.dword+=offset; - return CONTINUE; - } + ops[0x2c2] = () -> { + int offset = Fetchw(); + reg_eip=CPU.CPU_Pop32(); + reg_esp.dword+=offset; + return CONTINUE; }; /* RETN */ - ops[0x2c3] = new OP() { - final public int call() { - reg_eip=CPU.CPU_Pop32(); - return CONTINUE; - } + ops[0x2c3] = () -> { + reg_eip=CPU.CPU_Pop32(); + return CONTINUE; }; /* LES */ - ops[0x2c4] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readd(eaa); // make sure all reads are done before writing something in case of a PF - if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); - Modrm.Getrd[rm].dword=val; - return HANDLED; - } + ops[0x2c4] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readd(eaa); // make sure all reads are done before writing something in case of a PF + if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); + Modrm.Getrd[rm].dword=val; + return HANDLED; }; /* LDS */ - ops[0x2c5] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readd(eaa); // make sure all reads are done before writing something in case of a PF - if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); - Modrm.Getrd[rm].dword=val; - return HANDLED; - } + ops[0x2c5] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readd(eaa); // make sure all reads are done before writing something in case of a PF + if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); + Modrm.Getrd[rm].dword=val; + return HANDLED; }; /* MOV Ed,Id */ - ops[0x2c7] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - Modrm.GetEArd[rm].dword= Fetchd();} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writed(eaa, Fetchd());} - return HANDLED; - } + ops[0x2c7] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + Modrm.GetEArd[rm].dword= Fetchd();} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writed(eaa, Fetchd());} + return HANDLED; }; /* ENTER Iw,Ib */ - ops[0x2c8] = new OP() { - final public int call() { - /*Bitu*/int bytes=Fetchw(); - /*Bitu*/int level=Fetchb(); - CPU.CPU_ENTER(true,bytes,level); - return HANDLED; - } + ops[0x2c8] = () -> { + /*Bitu*/int bytes=Fetchw(); + /*Bitu*/int level=Fetchb(); + CPU.CPU_ENTER(true,bytes,level); + return HANDLED; }; /* LEAVE */ - ops[0x2c9] = new OP() { - final public int call() { - reg_esp.dword&=CPU.cpu.stack.notmask; - reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask); - reg_ebp.dword=CPU.CPU_Pop32(); - return HANDLED; - } + ops[0x2c9] = () -> { + reg_esp.dword&=CPU.cpu.stack.notmask; + reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask); + reg_ebp.dword=CPU.CPU_Pop32(); + return HANDLED; }; /* RETF Iw */ - ops[0x2ca] = new OP() { - final public int call() { - /*Bitu*/int words=Fetchw(); - FillFlags(); - CPU.CPU_RET(true,words,GETIP()); - return CONTINUE; - } + ops[0x2ca] = () -> { + /*Bitu*/int words=Fetchw(); + FillFlags(); + CPU.CPU_RET(true,words,GETIP()); + return CONTINUE; }; /* RETF */ - ops[0x2cb] = new OP() { - final public int call() { - FillFlags(); - CPU.CPU_RET(true,0,GETIP()); - return CONTINUE; - } + ops[0x2cb] = () -> { + FillFlags(); + CPU.CPU_RET(true,0,GETIP()); + return CONTINUE; }; /* IRET */ - ops[0x2cf] = new OP() { - final public int call() { - CPU.CPU_IRET(true,GETIP()); - if (CPU_TRAP_CHECK) - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } - if (CPU_PIC_CHECK) - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return CBRET_NONE; - return CONTINUE; - } + ops[0x2cf] = () -> { + CPU.CPU_IRET(true,GETIP()); + if (CPU_TRAP_CHECK) + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; + } + if (CPU_PIC_CHECK) + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return CBRET_NONE; + return CONTINUE; }; /* GRP2 Ed,1 */ - ops[0x2d1] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2D(rm, 1); - return HANDLED; - } + ops[0x2d1] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2D(rm, 1); + return HANDLED; }; /* GRP2 Ed,CL */ - ops[0x2d3] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2D(rm, reg_ecx.low()); - return HANDLED; - } + ops[0x2d3] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2D(rm, reg_ecx.low()); + return HANDLED; }; /* LOOPNZ */ - ops[0x2e0] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - JumpCond32_b(reg_ecx.dword-1 !=0 && !get_ZF()); - reg_ecx.dword--; - } else { - JumpCond32_b(reg_ecx.word()-1 !=0 && !get_ZF()); - reg_ecx.word(reg_ecx.word()-1); - } - return CONTINUE; + ops[0x2e0] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + JumpCond32_b(reg_ecx.dword-1 !=0 && !get_ZF()); + reg_ecx.dword--; + } else { + JumpCond32_b(reg_ecx.word()-1 !=0 && !get_ZF()); + reg_ecx.word(reg_ecx.word()-1); } + return CONTINUE; }; /* LOOPZ */ - ops[0x2e1] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - JumpCond32_b(reg_ecx.dword-1!=0 && get_ZF()); - reg_ecx.dword--; - } else { - JumpCond32_b(reg_ecx.word()-1!=0 && get_ZF()); - reg_ecx.word(reg_ecx.word()-1); - } - return CONTINUE; + ops[0x2e1] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + JumpCond32_b(reg_ecx.dword-1!=0 && get_ZF()); + reg_ecx.dword--; + } else { + JumpCond32_b(reg_ecx.word()-1!=0 && get_ZF()); + reg_ecx.word(reg_ecx.word()-1); } + return CONTINUE; }; /* LOOP */ - ops[0x2e2] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - JumpCond32_b(reg_ecx.dword-1!=0); - reg_ecx.dword--; - } else { - JumpCond32_b(reg_ecx.word()-1!=0); - reg_ecx.word(reg_ecx.word()-1); - } - return CONTINUE; + ops[0x2e2] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + JumpCond32_b(reg_ecx.dword-1!=0); + reg_ecx.dword--; + } else { + JumpCond32_b(reg_ecx.word()-1!=0); + reg_ecx.word(reg_ecx.word()-1); } + return CONTINUE; }; /* JCXZ */ - ops[0x2e3] = new OP() { - final public int call() { - JumpCond32_b((reg_ecx.dword & AddrMaskTable1[prefixes& PREFIX_ADDR])==0); - return CONTINUE; - } + ops[0x2e3] = () -> { + JumpCond32_b((reg_ecx.dword & AddrMaskTable1[prefixes& PREFIX_ADDR])==0); + return CONTINUE; }; /* IN EAX,Ib */ - ops[0x2e5] = new OP() { - final public int call() { - /*Bitu*/int port=Fetchb(); - if (CPU.CPU_IO_Exception(port,4)) return RUNEXCEPTION(); - reg_eax.dword=IO.IO_ReadD(port); - return HANDLED; - } + ops[0x2e5] = () -> { + /*Bitu*/int port=Fetchb(); + if (CPU.CPU_IO_Exception(port,4)) return RUNEXCEPTION(); + reg_eax.dword=IO.IO_ReadD(port); + return HANDLED; }; /* OUT Ib,EAX */ - ops[0x2e7] = new OP() { - final public int call() { - /*Bitu*/int port=Fetchb(); - if (CPU.CPU_IO_Exception(port,4)) return RUNEXCEPTION(); - IO.IO_WriteD(port, reg_eax.dword); - return HANDLED; - } + ops[0x2e7] = () -> { + /*Bitu*/int port=Fetchb(); + if (CPU.CPU_IO_Exception(port,4)) return RUNEXCEPTION(); + IO.IO_WriteD(port, reg_eax.dword); + return HANDLED; }; /* CALL Jd */ - ops[0x2e8] = new OP() { - final public int call() { - /*Bit32s*/int addip=Fetchds(); - CPU.CPU_Push32(GETIP()); - SAVEIP(); - reg_eip+=addip; - return CONTINUE; - } + ops[0x2e8] = () -> { + /*Bit32s*/int addip=Fetchds(); + CPU.CPU_Push32(GETIP()); + SAVEIP(); + reg_eip+=addip; + return CONTINUE; }; /* JMP Jd */ - ops[0x2e9] = new OP() { - final public int call() { - /*Bit32s*/int addip=Fetchds(); - SAVEIP(); - reg_eip+=addip; - return CONTINUE; - } + ops[0x2e9] = () -> { + /*Bit32s*/int addip=Fetchds(); + SAVEIP(); + reg_eip+=addip; + return CONTINUE; }; /* JMP Ad */ - ops[0x2ea] = new OP() { - final public int call() { - /*Bit32u*/int newip= Fetchd(); - /*Bit16u*/int newcs=Fetchw(); - FillFlags(); - CPU.CPU_JMP(true,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } - return CONTINUE; - } + ops[0x2ea] = () -> { + /*Bit32u*/int newip= Fetchd(); + /*Bit16u*/int newcs=Fetchw(); + FillFlags(); + CPU.CPU_JMP(true,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; + } + return CONTINUE; }; /* JMP Jb */ - ops[0x2eb] = new OP() { - final public int call() { - /*Bit32s*/int addip=Fetchbs(); - SAVEIP(); - reg_eip+=addip; - return CONTINUE; - } + ops[0x2eb] = () -> { + /*Bit32s*/int addip=Fetchbs(); + SAVEIP(); + reg_eip+=addip; + return CONTINUE; }; /* IN EAX,DX */ - ops[0x2ed] = new OP() { - final public int call() { - reg_eax.dword=IO.IO_ReadD(reg_edx.word()); - return HANDLED; - } + ops[0x2ed] = () -> { + reg_eax.dword=IO.IO_ReadD(reg_edx.word()); + return HANDLED; }; /* OUT DX,EAX */ - ops[0x2ef] = new OP() { - final public int call() { - IO.IO_WriteD(reg_edx.word(),reg_eax.dword); - return HANDLED; - } + ops[0x2ef] = () -> { + IO.IO_WriteD(reg_edx.word(),reg_eax.dword); + return HANDLED; }; /* GRP3 Ed(,Id) */ - ops[0x2f7] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* TEST Ed,Id */ - case 0x01: /* TEST Ed,Id Undocumented*/ - { - if (rm >= 0xc0 ) { - TESTD(Fetchd(), Modrm.GetEArd[rm].dword); - } - else { - int eaa = getEaa(rm); - TESTD(Fetchd(),Memory.mem_readd(eaa)); - } - break; - } - case 0x02: /* NOT Ed */ - { - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=~r.dword; - } else { - /*PhysPt*/int eaa=getEaa(rm); - Memory.mem_writed(eaa,~Memory.mem_readd(eaa)); - } - break; - } - case 0x03: /* NEG Ed */ - { - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword = Instructions.Negd(r.dword); - } else { - /*PhysPt*/int eaa=getEaa(rm); - Memory.mem_writed(eaa,Instructions.Negd(Memory.mem_readd(eaa))); - } - break; - } - case 0x04: /* MUL EAX,Ed */ - if (rm >= 0xc0 ) { - MULD(Modrm.GetEArd[rm].dword); - } - else { - int eaa = getEaa(rm); - MULD(Memory.mem_readd(eaa)); - } - break; - case 0x05: /* IMUL EAX,Ed */ + ops[0x2f7] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* TEST Ed,Id */ + case 0x01: /* TEST Ed,Id Undocumented*/ + { if (rm >= 0xc0 ) { - IMULD(Modrm.GetEArd[rm].dword); + TESTD(Fetchd(), Modrm.GetEArd[rm].dword); } else { int eaa = getEaa(rm); - IMULD(Memory.mem_readd(eaa)); + TESTD(Fetchd(),Memory.mem_readd(eaa)); } break; - case 0x06: /* DIV Ed */ + } + case 0x02: /* NOT Ed */ + { if (rm >= 0xc0 ) { - if (!DIVD(Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); - } - else { - int eaa = getEaa(rm); - if (!DIVD(Memory.mem_readd(eaa))) return RUNEXCEPTION(); + Reg r = Modrm.GetEArd[rm]; + r.dword=~r.dword; + } else { + /*PhysPt*/int eaa=getEaa(rm); + Memory.mem_writed(eaa,~Memory.mem_readd(eaa)); } break; - case 0x07: /* IDIV Ed */ + } + case 0x03: /* NEG Ed */ + { if (rm >= 0xc0 ) { - if (!IDIVD(Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); - } - else { - int eaa = getEaa(rm); - if (!IDIVD(Memory.mem_readd(eaa))) return RUNEXCEPTION(); + Reg r = Modrm.GetEArd[rm]; + r.dword = Instructions.Negd(r.dword); + } else { + /*PhysPt*/int eaa=getEaa(rm); + Memory.mem_writed(eaa,Instructions.Negd(Memory.mem_readd(eaa))); } break; } - return HANDLED; + case 0x04: /* MUL EAX,Ed */ + if (rm >= 0xc0 ) { + MULD(Modrm.GetEArd[rm].dword); + } + else { + int eaa = getEaa(rm); + MULD(Memory.mem_readd(eaa)); + } + break; + case 0x05: /* IMUL EAX,Ed */ + if (rm >= 0xc0 ) { + IMULD(Modrm.GetEArd[rm].dword); + } + else { + int eaa = getEaa(rm); + IMULD(Memory.mem_readd(eaa)); + } + break; + case 0x06: /* DIV Ed */ + if (rm >= 0xc0 ) { + if (!DIVD(Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + } + else { + int eaa = getEaa(rm); + if (!DIVD(Memory.mem_readd(eaa))) return RUNEXCEPTION(); + } + break; + case 0x07: /* IDIV Ed */ + if (rm >= 0xc0 ) { + if (!IDIVD(Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + } + else { + int eaa = getEaa(rm); + if (!IDIVD(Memory.mem_readd(eaa))) return RUNEXCEPTION(); + } + break; } + return HANDLED; }; /* GRP 5 Ed */ - ops[0x2ff] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* INC Ed */ - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=INCD(r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, INCD(Memory.mem_readd(eaa))); - } - break; - case 0x01: /* DEC Ed */ - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArd[rm]; - r.dword=DECD(r.dword); - } - else { - int eaa = getEaa(rm); - Memory.mem_writed(eaa, DECD(Memory.mem_readd(eaa))); - } - break; - case 0x02: /* CALL NEAR Ed */ + ops[0x2ff] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* INC Ed */ + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=INCD(r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, INCD(Memory.mem_readd(eaa))); + } + break; + case 0x01: /* DEC Ed */ + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArd[rm]; + r.dword=DECD(r.dword); + } + else { + int eaa = getEaa(rm); + Memory.mem_writed(eaa, DECD(Memory.mem_readd(eaa))); + } + break; + case 0x02: /* CALL NEAR Ed */ + { + int eip; + if (rm >= 0xc0 ) {eip=Modrm.GetEArd[rm].dword;} + else {/*PhysPt*/int eaa=getEaa(rm);eip=Memory.mem_readd(eaa);} + CPU.CPU_Push32(GETIP()); + reg_eip = eip; + return CONTINUE; + } + case 0x03: /* CALL FAR Ed */ { - int eip; - if (rm >= 0xc0 ) {eip=Modrm.GetEArd[rm].dword;} - else {/*PhysPt*/int eaa=getEaa(rm);eip=Memory.mem_readd(eaa);} - CPU.CPU_Push32(GETIP()); - reg_eip = eip; + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + /*Bit32u*/int newip=Memory.mem_readd(eaa); + /*Bit16u*/int newcs=Memory.mem_readw(eaa+4); + FillFlags(); + CPU.CPU_CALL(true,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; + } return CONTINUE; } - case 0x03: /* CALL FAR Ed */ - { - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - /*Bit32u*/int newip=Memory.mem_readd(eaa); - /*Bit16u*/int newcs=Memory.mem_readw(eaa+4); - FillFlags(); - CPU.CPU_CALL(true,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } - return CONTINUE; - } - case 0x04: /* JMP NEAR Ed */ - if (rm >= 0xc0 ) {reg_eip=Modrm.GetEArd[rm].dword;} - else {/*PhysPt*/int eaa=getEaa(rm);reg_eip=Memory.mem_readd(eaa);} + case 0x04: /* JMP NEAR Ed */ + if (rm >= 0xc0 ) {reg_eip=Modrm.GetEArd[rm].dword;} + else {/*PhysPt*/int eaa=getEaa(rm);reg_eip=Memory.mem_readd(eaa);} + return CONTINUE; + case 0x05: /* JMP FAR Ed */ + { + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + /*Bit32u*/int newip=Memory.mem_readd(eaa); + /*Bit16u*/int newcs=Memory.mem_readw(eaa+4); + FillFlags(); + CPU.CPU_JMP(true,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; + } return CONTINUE; - case 0x05: /* JMP FAR Ed */ - { - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - /*Bit32u*/int newip=Memory.mem_readd(eaa); - /*Bit16u*/int newcs=Memory.mem_readw(eaa+4); - FillFlags(); - CPU.CPU_JMP(true,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } - return CONTINUE; - } - case 0x06: /* Push Ed */ - if (rm >= 0xc0 ) {CPU.CPU_Push32(Modrm.GetEArd[rm].dword);} - else {/*PhysPt*/int eaa=getEaa(rm);CPU.CPU_Push32(Memory.mem_readd(eaa));} - break; - default: - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"CPU:66:GRP5:Illegal call "+Integer.toString(which,16)); - return ILLEGAL_OPCODE; } - return HANDLED; - } + case 0x06: /* Push Ed */ + if (rm >= 0xc0 ) {CPU.CPU_Push32(Modrm.GetEArd[rm].dword);} + else {/*PhysPt*/int eaa=getEaa(rm);CPU.CPU_Push32(Memory.mem_readd(eaa));} + break; + default: + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"CPU:66:GRP5:Illegal call "+Integer.toString(which,16)); + return ILLEGAL_OPCODE; + } + return HANDLED; }; } } \ No newline at end of file diff --git a/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_66_0f.java b/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_66_0f.java index a4413304..6aa4d2b2 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_66_0f.java +++ b/jdosbox/src/main/java/jdos/cpu/core_normal/Prefix_66_0f.java @@ -9,784 +9,687 @@ public class Prefix_66_0f extends Prefix_66 { static { /* GRP 6 Exxx */ - ops[0x300] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* SLDT */ - case 0x01: /* STR */ - { - /*Bitu*/int saveval; - if (which==0) saveval=CPU.CPU_SLDT(); - else saveval=CPU.CPU_STR(); - if (rm >= 0xc0) {Modrm.GetEArw[rm].word(saveval);} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,saveval);} - } - break; - case 0x02:case 0x03:case 0x04:case 0x05: - { - /*Bitu*/int loadval; - if (rm >= 0xc0 ) {loadval=Modrm.GetEArw[rm].word();} - else {/*PhysPt*/int eaa=getEaa(rm);loadval=Memory.mem_readw(eaa);} - switch (which) { - case 0x02: - if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - if (CPU.CPU_LLDT(loadval)) return RUNEXCEPTION(); - break; - case 0x03: - if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - if (CPU.CPU_LTR(loadval)) return RUNEXCEPTION(); - break; - case 0x04: - CPU.CPU_VERR(loadval); - break; - case 0x05: - CPU.CPU_VERW(loadval); - break; - } - } - break; - default: - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"GRP6:Illegal call "+Integer.toString(which,16)); - return ILLEGAL_OPCODE; + ops[0x300] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* SLDT */ + case 0x01: /* STR */ + { + /*Bitu*/int saveval; + if (which==0) saveval=CPU.CPU_SLDT(); + else saveval=CPU.CPU_STR(); + if (rm >= 0xc0) {Modrm.GetEArw[rm].word(saveval);} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,saveval);} } - return HANDLED; - } - }; - - /* Group 7 Ed */ - ops[0x301] = new OP() { - final public int call() { - int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - if (rm < 0xc0) { //First ones all use EA - /*PhysPt*/int eaa = getEaa(rm);/*Bitu*/int limit; + break; + case 0x02:case 0x03:case 0x04:case 0x05: + { + /*Bitu*/int loadval; + if (rm >= 0xc0 ) {loadval=Modrm.GetEArw[rm].word();} + else {/*PhysPt*/int eaa=getEaa(rm);loadval=Memory.mem_readw(eaa);} switch (which) { - case 0x00: /* SGDT */ - Memory.mem_writew(eaa,CPU.CPU_SGDT_limit()); - Memory.mem_writed(eaa+2,CPU.CPU_SGDT_base()); - break; - case 0x01: /* SIDT */ - Memory.mem_writew(eaa,CPU.CPU_SIDT_limit()); - Memory.mem_writed(eaa+2,CPU.CPU_SIDT_base()); - break; - case 0x02: /* LGDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - CPU.CPU_LGDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2)); + case 0x02: + if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + if (CPU.CPU_LLDT(loadval)) return RUNEXCEPTION(); break; - case 0x03: /* LIDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - CPU.CPU_LIDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2)); + case 0x03: + if (CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + if (CPU.CPU_LTR(loadval)) return RUNEXCEPTION(); break; - case 0x04: /* SMSW */ - Memory.mem_writew(eaa,CPU.CPU_SMSW() & 0xFFFF); - break; - case 0x06: /* LMSW */ - limit=Memory.mem_readw(eaa); - if (CPU.CPU_LMSW(limit)) return RUNEXCEPTION(); - break; - case 0x07: /* INVLPG */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - Paging.PAGING_ClearTLB(); - break; - } - } else { - switch (which) { - case 0x02: /* LGDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - return ILLEGAL_OPCODE; - case 0x03: /* LIDT */ - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - return ILLEGAL_OPCODE; - case 0x04: /* SMSW */ - Modrm.GetEArd[rm].dword=CPU.CPU_SMSW(); + case 0x04: + CPU.CPU_VERR(loadval); break; - case 0x06: /* LMSW */ - if (CPU.CPU_LMSW(Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + case 0x05: + CPU.CPU_VERW(loadval); break; - default: - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"Illegal group 7 RM subfunction "+which); - return ILLEGAL_OPCODE; } + } + break; + default: + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"GRP6:Illegal call "+Integer.toString(which,16)); + return ILLEGAL_OPCODE; + } + return HANDLED; + }; + /* Group 7 Ed */ + ops[0x301] = () -> { + int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + if (rm < 0xc0) { //First ones all use EA + /*PhysPt*/int eaa = getEaa(rm);/*Bitu*/int limit; + switch (which) { + case 0x00: /* SGDT */ + Memory.mem_writew(eaa,CPU.CPU_SGDT_limit()); + Memory.mem_writed(eaa+2,CPU.CPU_SGDT_base()); + break; + case 0x01: /* SIDT */ + Memory.mem_writew(eaa,CPU.CPU_SIDT_limit()); + Memory.mem_writed(eaa+2,CPU.CPU_SIDT_base()); + break; + case 0x02: /* LGDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + CPU.CPU_LGDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2)); + break; + case 0x03: /* LIDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + CPU.CPU_LIDT(Memory.mem_readw(eaa),Memory.mem_readd(eaa + 2)); + break; + case 0x04: /* SMSW */ + Memory.mem_writew(eaa,CPU.CPU_SMSW() & 0xFFFF); + break; + case 0x06: /* LMSW */ + limit=Memory.mem_readw(eaa); + if (CPU.CPU_LMSW(limit)) return RUNEXCEPTION(); + break; + case 0x07: /* INVLPG */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + Paging.PAGING_ClearTLB(); + break; } - return HANDLED; + } else { + switch (which) { + case 0x02: /* LGDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + return ILLEGAL_OPCODE; + case 0x03: /* LIDT */ + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + return ILLEGAL_OPCODE; + case 0x04: /* SMSW */ + Modrm.GetEArd[rm].dword=CPU.CPU_SMSW(); + break; + case 0x06: /* LMSW */ + if (CPU.CPU_LMSW(Modrm.GetEArd[rm].dword)) return RUNEXCEPTION(); + break; + default: + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"Illegal group 7 RM subfunction "+which); + return ILLEGAL_OPCODE; + } + } + return HANDLED; }; /* LAR Gd,Ed */ - ops[0x302] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - int rm=Fetchb(); - if (rm >= 0xc0) { - Modrm.Getrd[rm].dword=CPU.CPU_LAR(Modrm.GetEArw[rm].word(),Modrm.Getrd[rm].dword); - } else { - /*PhysPt*/int eaa = getEaa(rm); - Modrm.Getrd[rm].dword=CPU.CPU_LAR(Memory.mem_readw(eaa),Modrm.Getrd[rm].dword); - } - return HANDLED; + ops[0x302] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + int rm=Fetchb(); + if (rm >= 0xc0) { + Modrm.Getrd[rm].dword=CPU.CPU_LAR(Modrm.GetEArw[rm].word(),Modrm.Getrd[rm].dword); + } else { + /*PhysPt*/int eaa = getEaa(rm); + Modrm.Getrd[rm].dword=CPU.CPU_LAR(Memory.mem_readw(eaa),Modrm.Getrd[rm].dword); } + return HANDLED; }; /* LSL Gd,Ew */ - ops[0x303] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - int rm=Fetchb(); - /* Just load 16-bit values for selectors */ - if (rm >= 0xc0) { - Modrm.Getrd[rm].dword = CPU.CPU_LSL(Modrm.GetEArw[rm].word(),Modrm.Getrd[rm].dword); - } else { - /*PhysPt*/int eaa = getEaa(rm); - Modrm.Getrd[rm].dword = CPU.CPU_LSL(Memory.mem_readw(eaa),Modrm.Getrd[rm].dword); - } - return HANDLED; + ops[0x303] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + int rm=Fetchb(); + /* Just load 16-bit values for selectors */ + if (rm >= 0xc0) { + Modrm.Getrd[rm].dword = CPU.CPU_LSL(Modrm.GetEArw[rm].word(),Modrm.Getrd[rm].dword); + } else { + /*PhysPt*/int eaa = getEaa(rm); + Modrm.Getrd[rm].dword = CPU.CPU_LSL(Memory.mem_readw(eaa),Modrm.Getrd[rm].dword); } + return HANDLED; }; /* WRMSR */ - ops[0x330] = new OP() { - final public int call() { - if (CPU.cpu.cpl != 0) return EXCEPTION(CPU.EXCEPTION_GP); - CPU.writeMSR(CPU_Regs.reg_ecx.dword, ((CPU_Regs.reg_edx.dword & 0xFFFFFFFFl) << 32) | (CPU_Regs.reg_eax.dword & 0xFFFFFFFFl)); - return HANDLED; - } + ops[0x330] = () -> { + if (CPU.cpu.cpl != 0) return EXCEPTION(CPU.EXCEPTION_GP); + CPU.writeMSR(CPU_Regs.reg_ecx.dword, ((CPU_Regs.reg_edx.dword & 0xFFFFFFFFL) << 32) | (CPU_Regs.reg_eax.dword & 0xFFFFFFFFL)); + return HANDLED; }; /* RDMSR */ - ops[0x332] = new OP() { - final public int call() { - if (CPU.cpu.cpl != 0) return EXCEPTION(CPU.EXCEPTION_GP); - long result = CPU.readMSR(CPU_Regs.reg_ecx.dword); - CPU_Regs.reg_eax.dword = (int)result; - CPU_Regs.reg_edx.dword = (int)(result >>> 32); - return HANDLED; - } + ops[0x332] = () -> { + if (CPU.cpu.cpl != 0) return EXCEPTION(CPU.EXCEPTION_GP); + long result = CPU.readMSR(CPU_Regs.reg_ecx.dword); + CPU_Regs.reg_eax.dword = (int)result; + CPU_Regs.reg_edx.dword = (int)(result >>> 32); + return HANDLED; }; /* CMOVO */ - ops[0x340] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_O()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_O()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_O()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_O()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNO */ - ops[0x341] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NO()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NO()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NO()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NO()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVB */ - ops[0x342] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_B()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_B()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_B()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_B()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNB */ - ops[0x343] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NB()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NB()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NB()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NB()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVZ */ - ops[0x344] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_Z()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_Z()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_Z()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_Z()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNZ */ - ops[0x345] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NZ()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NZ()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NZ()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NZ()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVBE */ - ops[0x346] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_BE()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_BE()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_BE()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_BE()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNBE */ - ops[0x347] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NBE()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NBE()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NBE()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NBE()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVS */ - ops[0x348] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_S()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_S()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_S()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_S()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNS */ - ops[0x349] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NS()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NS()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NS()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NS()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVP */ - ops[0x34a] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_P()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_P()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_P()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_P()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNP */ - ops[0x34b] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NP()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NP()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NP()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NP()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVL */ - ops[0x34c] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_L()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_L()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_L()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_L()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNL */ - ops[0x34d] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NL()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NL()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NL()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NL()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVLE */ - ops[0x34e] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_LE()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_LE()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_LE()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_LE()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* CMOVNLE */ - ops[0x34f] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType= 0xc0) { - if (Flags.TFLG_NLE()) - Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; - } else { - int eaa = getEaa(rm); - int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors - if (Flags.TFLG_NLE()) - Modrm.Getrd[rm].dword=temp; - } - return HANDLED; + int rm=Fetchb(); + if (rm >= 0xc0) { + if (Flags.TFLG_NLE()) + Modrm.Getrd[rm].dword = Modrm.GetEArd[rm].dword; + } else { + int eaa = getEaa(rm); + int temp = Memory.mem_readd(eaa); // must read before comparison so that it can throw errors + if (Flags.TFLG_NLE()) + Modrm.Getrd[rm].dword=temp; } + return HANDLED; }; /* JO */ - ops[0x380] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_O()); - return CONTINUE; - } + ops[0x380] = () -> { + JumpCond32_d(Flags.TFLG_O()); + return CONTINUE; }; /* JNO */ - ops[0x381] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NO()); - return CONTINUE; - } + ops[0x381] = () -> { + JumpCond32_d(Flags.TFLG_NO()); + return CONTINUE; }; /* JB */ - ops[0x382] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_B()); - return CONTINUE; - } + ops[0x382] = () -> { + JumpCond32_d(Flags.TFLG_B()); + return CONTINUE; }; /* JNB */ - ops[0x383] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NB()); - return CONTINUE; - } + ops[0x383] = () -> { + JumpCond32_d(Flags.TFLG_NB()); + return CONTINUE; }; /* JZ */ - ops[0x384] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_Z()); - return CONTINUE; - } + ops[0x384] = () -> { + JumpCond32_d(Flags.TFLG_Z()); + return CONTINUE; }; /* JNZ */ - ops[0x385] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NZ()); - return CONTINUE; - } + ops[0x385] = () -> { + JumpCond32_d(Flags.TFLG_NZ()); + return CONTINUE; }; /* JBE */ - ops[0x386] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_BE()); - return CONTINUE; - } + ops[0x386] = () -> { + JumpCond32_d(Flags.TFLG_BE()); + return CONTINUE; }; /* JNBE */ - ops[0x387] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NBE()); - return CONTINUE; - } + ops[0x387] = () -> { + JumpCond32_d(Flags.TFLG_NBE()); + return CONTINUE; }; /* JS */ - ops[0x388] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_S()); - return CONTINUE; - } + ops[0x388] = () -> { + JumpCond32_d(Flags.TFLG_S()); + return CONTINUE; }; /* JNS */ - ops[0x389] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NS()); - return CONTINUE; - } + ops[0x389] = () -> { + JumpCond32_d(Flags.TFLG_NS()); + return CONTINUE; }; /* JP */ - ops[0x38a] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_P()); - return CONTINUE; - } + ops[0x38a] = () -> { + JumpCond32_d(Flags.TFLG_P()); + return CONTINUE; }; /* JNP */ - ops[0x38b] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NP()); - return CONTINUE; - } + ops[0x38b] = () -> { + JumpCond32_d(Flags.TFLG_NP()); + return CONTINUE; }; /* JL */ - ops[0x38c] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_L()); - return CONTINUE; - } + ops[0x38c] = () -> { + JumpCond32_d(Flags.TFLG_L()); + return CONTINUE; }; /* JNL */ - ops[0x38d] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NL()); - return CONTINUE; - } + ops[0x38d] = () -> { + JumpCond32_d(Flags.TFLG_NL()); + return CONTINUE; }; /* JLE */ - ops[0x38e] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_LE()); - return CONTINUE; - } + ops[0x38e] = () -> { + JumpCond32_d(Flags.TFLG_LE()); + return CONTINUE; }; /* JNLE */ - ops[0x38f] = new OP() { - final public int call() { - JumpCond32_d(Flags.TFLG_NLE()); - return CONTINUE; - } + ops[0x38f] = () -> { + JumpCond32_d(Flags.TFLG_NLE()); + return CONTINUE; }; /* PUSH FS */ - ops[0x3a0] = new OP() { - final public int call() { - CPU.CPU_Push32(CPU_Regs.reg_fsVal.dword); - return HANDLED; - } + ops[0x3a0] = () -> { + CPU.CPU_Push32(CPU_Regs.reg_fsVal.dword); + return HANDLED; }; /* POP FS */ - ops[0x3a1] = new OP() { - final public int call() { - if (CPU.CPU_PopSegFS(true)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x3a1] = () -> { + if (CPU.CPU_PopSegFS(true)) return RUNEXCEPTION(); + return HANDLED; }; /* BT Ed,Gd */ - ops[0x3a3] = new OP() { - final public int call() { - FillFlags();int rm=Fetchb(); - /*Bit32u*/int mask=1 << (Modrm.Getrd[rm].dword & 31); - if (rm >= 0xc0 ) { - SETFLAGBIT(CF,(Modrm.GetEArd[rm].dword & mask)!=0); - } else { - /*PhysPt*/int eaa = getEaa(rm);eaa+=(Modrm.Getrd[rm].dword>>5)*4; // intentional signed shift - /*Bit32u*/int old=Memory.mem_readd(eaa); - SETFLAGBIT(CF,(old & mask)!=0); - } - return HANDLED; + ops[0x3a3] = () -> { + FillFlags();int rm=Fetchb(); + /*Bit32u*/int mask=1 << (Modrm.Getrd[rm].dword & 31); + if (rm >= 0xc0 ) { + SETFLAGBIT(CF,(Modrm.GetEArd[rm].dword & mask)!=0); + } else { + /*PhysPt*/int eaa = getEaa(rm);eaa+=(Modrm.Getrd[rm].dword>>5)*4; // intentional signed shift + /*Bit32u*/int old=Memory.mem_readd(eaa); + SETFLAGBIT(CF,(old & mask)!=0); } + return HANDLED; }; /* SHLD Ed,Gd,Ib */ - ops[0x3a4] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - int op3 = Fetchb() & 0x1F; - if (op3!=0) { - Reg r = Modrm.GetEArd[rm]; - r.dword=DSHLD(Modrm.Getrd[rm].dword,op3,r.dword); - } + ops[0x3a4] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + int op3 = Fetchb() & 0x1F; + if (op3!=0) { + Reg r = Modrm.GetEArd[rm]; + r.dword=DSHLD(Modrm.Getrd[rm].dword,op3,r.dword); } - else { - int eaa = getEaa(rm); - int op3 = Fetchb() & 0x1F; - if (op3!=0) - Memory.mem_writed(eaa, DSHLD(Modrm.Getrd[rm].dword,op3,Memory.mem_readd(eaa))); - } - return HANDLED; } + else { + int eaa = getEaa(rm); + int op3 = Fetchb() & 0x1F; + if (op3!=0) + Memory.mem_writed(eaa, DSHLD(Modrm.Getrd[rm].dword,op3,Memory.mem_readd(eaa))); + } + return HANDLED; }; /* SHLD Ed,Gd,CL */ - ops[0x3a5] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - int val = reg_ecx.dword & 0x1f; - if (rm >= 0xc0 ) { - if (val != 0) { - Reg r = Modrm.GetEArd[rm]; - r.dword=DSHLD(Modrm.Getrd[rm].dword,val,r.dword); - } + ops[0x3a5] = () -> { + /*Bit8u*/final int rm=Fetchb(); + int val = reg_ecx.dword & 0x1f; + if (rm >= 0xc0 ) { + if (val != 0) { + Reg r = Modrm.GetEArd[rm]; + r.dword=DSHLD(Modrm.Getrd[rm].dword,val,r.dword); } - else { - int eaa = getEaa(rm); - if (val != 0) - Memory.mem_writed(eaa, DSHLD(Modrm.Getrd[rm].dword,val,Memory.mem_readd(eaa))); - } - return HANDLED; } + else { + int eaa = getEaa(rm); + if (val != 0) + Memory.mem_writed(eaa, DSHLD(Modrm.Getrd[rm].dword,val,Memory.mem_readd(eaa))); + } + return HANDLED; }; /* PUSH GS */ - ops[0x3a8] = new OP() { - final public int call() { - CPU.CPU_Push32(CPU_Regs.reg_gsVal.dword); - return HANDLED; - } + ops[0x3a8] = () -> { + CPU.CPU_Push32(CPU_Regs.reg_gsVal.dword); + return HANDLED; }; /* POP GS */ - ops[0x3a9] = new OP() { - final public int call() { - if (CPU.CPU_PopSegGS(true)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x3a9] = () -> { + if (CPU.CPU_PopSegGS(true)) return RUNEXCEPTION(); + return HANDLED; }; /* BTS Ed,Gd */ - ops[0x3ab] = new OP() { - final public int call() { - FillFlags();int rm=Fetchb(); - Reg rd = Modrm.Getrd[rm]; - /*Bit32u*/int mask=1 << (rd.dword & 31); - if (rm >= 0xc0 ) { - Reg eard = Modrm.GetEArd[rm]; - SETFLAGBIT(CF,(eard.dword & mask)!=0); - eard.dword|=mask; - } else { - /*PhysPt*/int eaa = getEaa(rm);eaa+=(rd.dword>>5)*4; // intentional signed shift - /*Bit32u*/int old=Memory.mem_readd(eaa); - Memory.mem_writed(eaa,old | mask); - SETFLAGBIT(CF,(old & mask)!=0); - } - return HANDLED; - } + ops[0x3ab] = () -> { + FillFlags();int rm=Fetchb(); + Reg rd = Modrm.Getrd[rm]; + /*Bit32u*/int mask=1 << (rd.dword & 31); + if (rm >= 0xc0 ) { + Reg eard = Modrm.GetEArd[rm]; + SETFLAGBIT(CF,(eard.dword & mask)!=0); + eard.dword|=mask; + } else { + /*PhysPt*/int eaa = getEaa(rm);eaa+=(rd.dword>>5)*4; // intentional signed shift + /*Bit32u*/int old=Memory.mem_readd(eaa); + Memory.mem_writed(eaa,old | mask); + SETFLAGBIT(CF,(old & mask)!=0); + } + return HANDLED; }; /* SHRD Ed,Gd,Ib */ - ops[0x3ac] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - int op3 = Fetchb() & 0x1F; - if (op3!=0) { - Reg r = Modrm.GetEArd[rm]; - r.dword=DSHRD(Modrm.Getrd[rm].dword,op3,r.dword); - } + ops[0x3ac] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + int op3 = Fetchb() & 0x1F; + if (op3!=0) { + Reg r = Modrm.GetEArd[rm]; + r.dword=DSHRD(Modrm.Getrd[rm].dword,op3,r.dword); } - else { - int eaa = getEaa(rm); - int op3 = Fetchb() & 0x1F; - if (op3!=0) - Memory.mem_writed(eaa, DSHRD(Modrm.Getrd[rm].dword,op3,Memory.mem_readd(eaa))); - } - return HANDLED; } + else { + int eaa = getEaa(rm); + int op3 = Fetchb() & 0x1F; + if (op3!=0) + Memory.mem_writed(eaa, DSHRD(Modrm.Getrd[rm].dword,op3,Memory.mem_readd(eaa))); + } + return HANDLED; }; /* SHRD Ed,Gd,CL */ - ops[0x3ad] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - int val = reg_ecx.dword & 0x1f; - if (rm >= 0xc0 ) { - if (val != 0) { - Reg r = Modrm.GetEArd[rm]; - r.dword=DSHRD(Modrm.Getrd[rm].dword,val,r.dword); - } + ops[0x3ad] = () -> { + /*Bit8u*/final int rm=Fetchb(); + int val = reg_ecx.dword & 0x1f; + if (rm >= 0xc0 ) { + if (val != 0) { + Reg r = Modrm.GetEArd[rm]; + r.dword=DSHRD(Modrm.Getrd[rm].dword,val,r.dword); } - else { - int eaa = getEaa(rm); - if (val != 0) - Memory.mem_writed(eaa, DSHRD(Modrm.Getrd[rm].dword,val,Memory.mem_readd(eaa))); - } - return HANDLED; } + else { + int eaa = getEaa(rm); + if (val != 0) + Memory.mem_writed(eaa, DSHRD(Modrm.Getrd[rm].dword,val,Memory.mem_readd(eaa))); + } + return HANDLED; }; /* IMUL Gd,Ed */ - ops[0x3af] = new OP() { - final public int call() { - // PERFORMANCE - // - // IMUL Gd,Ed TEST 1: 30 - // IMUL Gd,Ed TEST 2: 24 - /*Bit8u*/final int rm=Fetchb(); + ops[0x3af] = () -> { + // PERFORMANCE + // + // IMUL Gd,Ed TEST 1: 30 + // IMUL Gd,Ed TEST 2: 24 + /*Bit8u*/final int rm=Fetchb(); // System.out.print("IMUL Gd,Ed TEST 1: "); // long start = System.currentTimeMillis(); // for (int i=0;i<1000000;i++) { @@ -801,379 +704,328 @@ final public int call() { // System.out.print("IMUL Gd,Ed TEST 2: "); // start = System.currentTimeMillis(); // for (int i=0;i<1000000;i++) { - Reg r = Modrm.Getrd[rm]; - if (rm >= 0xc0 ) { - r.dword=DIMULD(Modrm.GetEArd[rm].dword,r.dword); - } - else { - r.dword=DIMULD(Memory.mem_readd(getEaa(rm)),r.dword); - } + Reg r = Modrm.Getrd[rm]; + if (rm >= 0xc0 ) { + r.dword=DIMULD(Modrm.GetEArd[rm].dword,r.dword); + } + else { + r.dword=DIMULD(Memory.mem_readd(getEaa(rm)),r.dword); + } // } // System.out.println(System.currentTimeMillis()-start); - return HANDLED; - } + return HANDLED; }; /* CMPXCHG Ed,Gd */ // :DOSBOX: this is different from dosbox - ops[0x3b1] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType= 0xc0) { - Reg eard = Modrm.GetEArd[rm]; - Instructions.CMPD(eard.dword, reg_eax.dword); // Sets the flags - FillFlags(); - if (eard.dword==reg_eax.dword) { - eard.dword=Modrm.Getrd[rm].dword; - SETFLAGBIT(ZF,true); - } else { - reg_eax.dword=eard.dword; - SETFLAGBIT(ZF,false); - } + ops[0x3b1] = () -> { + if (CPU.CPU_ArchitectureType= 0xc0) { + Reg eard = Modrm.GetEArd[rm]; + Instructions.CMPD(eard.dword, reg_eax.dword); // Sets the flags + FillFlags(); + if (eard.dword==reg_eax.dword) { + eard.dword=Modrm.Getrd[rm].dword; + SETFLAGBIT(ZF,true); } else { - /*PhysPt*/int eaa = getEaa(rm); - /*Bit32u*/int val=Memory.mem_readd(eaa); - Instructions.CMPD(val, reg_eax.dword); // Sets the flags - FillFlags(); - if (val==reg_eax.dword) { - Memory.mem_writed(eaa,Modrm.Getrd[rm].dword); - SETFLAGBIT(ZF,true); - } else { - Memory.mem_writed(eaa,val); // cmpxchg always issues a write - reg_eax.dword=val; - SETFLAGBIT(ZF,false); - } + reg_eax.dword=eard.dword; + SETFLAGBIT(ZF,false); + } + } else { + /*PhysPt*/int eaa = getEaa(rm); + /*Bit32u*/int val=Memory.mem_readd(eaa); + Instructions.CMPD(val, reg_eax.dword); // Sets the flags + FillFlags(); + if (val==reg_eax.dword) { + Memory.mem_writed(eaa,Modrm.Getrd[rm].dword); + SETFLAGBIT(ZF,true); + } else { + Memory.mem_writed(eaa,val); // cmpxchg always issues a write + reg_eax.dword=val; + SETFLAGBIT(ZF,false); } - return HANDLED; } + return HANDLED; }; /* LSS Ed */ - ops[0x3b2] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa = getEaa(rm); - if (CPU.CPU_SetSegGeneralSS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); - Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); - return HANDLED; - } + ops[0x3b2] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa = getEaa(rm); + if (CPU.CPU_SetSegGeneralSS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); + Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); + return HANDLED; }; /* BTR Ed,Gd */ - ops[0x3b3] = new OP() { - final public int call() { - FillFlags();int rm=Fetchb(); - Reg rd = Modrm.Getrd[rm]; - /*Bit32u*/int mask=1 << (rd.dword & 31); - if (rm >= 0xc0 ) { - Reg eard = Modrm.GetEArd[rm]; - SETFLAGBIT(CF,(eard.dword & mask)!=0); - eard.dword&=~mask; - } else { - /*PhysPt*/int eaa = getEaa(rm);eaa+=(rd.dword>>5)*4; // intentional signed shift - /*Bit32u*/int old=Memory.mem_readd(eaa); - Memory.mem_writed(eaa,old & ~mask); - SETFLAGBIT(CF,(old & mask)!=0); - } - return HANDLED; - } + ops[0x3b3] = () -> { + FillFlags();int rm=Fetchb(); + Reg rd = Modrm.Getrd[rm]; + /*Bit32u*/int mask=1 << (rd.dword & 31); + if (rm >= 0xc0 ) { + Reg eard = Modrm.GetEArd[rm]; + SETFLAGBIT(CF,(eard.dword & mask)!=0); + eard.dword&=~mask; + } else { + /*PhysPt*/int eaa = getEaa(rm);eaa+=(rd.dword>>5)*4; // intentional signed shift + /*Bit32u*/int old=Memory.mem_readd(eaa); + Memory.mem_writed(eaa,old & ~mask); + SETFLAGBIT(CF,(old & mask)!=0); + } + return HANDLED; }; /* LFS Ed */ - ops[0x3b4] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa = getEaa(rm); - if (CPU.CPU_SetSegGeneralFS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); - Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); - return HANDLED; - } + ops[0x3b4] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa = getEaa(rm); + if (CPU.CPU_SetSegGeneralFS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); + Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); + return HANDLED; }; /* LGS Ed */ - ops[0x3b5] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa = getEaa(rm); - if (CPU.CPU_SetSegGeneralGS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); - Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); - return HANDLED; - } + ops[0x3b5] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa = getEaa(rm); + if (CPU.CPU_SetSegGeneralGS(Memory.mem_readw(eaa+4))) return RUNEXCEPTION(); + Modrm.Getrd[rm].dword=Memory.mem_readd(eaa); + return HANDLED; }; /* MOVZX Gd,Eb */ - ops[0x3b6] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=Modrm.GetEArb[rm].get();} - else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=Memory.mem_readb(eaa);} - return HANDLED; - } + ops[0x3b6] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=Modrm.GetEArb[rm].get();} + else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=Memory.mem_readb(eaa);} + return HANDLED; }; /* MOVXZ Gd,Ew */ - ops[0x3b7] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=Modrm.GetEArw[rm].word();} - else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=Memory.mem_readw(eaa);} - return HANDLED; - } + ops[0x3b7] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=Modrm.GetEArw[rm].word();} + else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=Memory.mem_readw(eaa);} + return HANDLED; }; /* GRP8 Ed,Ib */ - ops[0x3ba] = new OP() { - final public int call() { - FillFlags();int rm=Fetchb(); - if (rm >= 0xc0 ) { - /*Bit32u*/int mask=1 << (Fetchb() & 31); - Reg eard = Modrm.GetEArd[rm]; - SETFLAGBIT(CF,(eard.dword & mask)!=0); - switch (rm & 0x38) { - case 0x20: /* BT */ - break; - case 0x28: /* BTS */ - eard.dword|=mask; - break; - case 0x30: /* BTR */ - eard.dword&=~mask; - break; - case 0x38: /* BTC */ - if (GETFLAG(CF)!=0) eard.dword&=~mask; - else eard.dword|=mask; - break; - default: - Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } - } else { - /*PhysPt*/int eaa = getEaa(rm);/*Bit32u*/int old=Memory.mem_readd(eaa); - /*Bit32u*/int mask=1 << (Fetchb() & 31); - switch (rm & 0x38) { - case 0x20: /* BT */ - break; - case 0x28: /* BTS */ - Memory.mem_writed(eaa,old|mask); - break; - case 0x30: /* BTR */ - Memory.mem_writed(eaa,old & ~mask); - break; - case 0x38: /* BTC */ - if (GETFLAG(CF)!=0) old&=~mask; - else old|=mask; - Memory.mem_writed(eaa,old); - break; - default: - Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); - } - SETFLAGBIT(CF,(old & mask)!=0); + ops[0x3ba] = () -> { + FillFlags();int rm=Fetchb(); + if (rm >= 0xc0 ) { + /*Bit32u*/int mask=1 << (Fetchb() & 31); + Reg eard = Modrm.GetEArd[rm]; + SETFLAGBIT(CF,(eard.dword & mask)!=0); + switch (rm & 0x38) { + case 0x20: /* BT */ + break; + case 0x28: /* BTS */ + eard.dword|=mask; + break; + case 0x30: /* BTR */ + eard.dword&=~mask; + break; + case 0x38: /* BTC */ + if (GETFLAG(CF)!=0) eard.dword&=~mask; + else eard.dword|=mask; + break; + default: + Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); + } + } else { + /*PhysPt*/int eaa = getEaa(rm);/*Bit32u*/int old=Memory.mem_readd(eaa); + /*Bit32u*/int mask=1 << (Fetchb() & 31); + switch (rm & 0x38) { + case 0x20: /* BT */ + break; + case 0x28: /* BTS */ + Memory.mem_writed(eaa,old|mask); + break; + case 0x30: /* BTR */ + Memory.mem_writed(eaa,old & ~mask); + break; + case 0x38: /* BTC */ + if (GETFLAG(CF)!=0) old&=~mask; + else old|=mask; + Memory.mem_writed(eaa,old); + break; + default: + Log.exit("CPU:66:0F:BA:Illegal subfunction "+Integer.toString(rm & 0x38,16)); } - return HANDLED; + SETFLAGBIT(CF,(old & mask)!=0); } + return HANDLED; }; /* BTC Ed,Gd */ - ops[0x3bb] = new OP() { - final public int call() { - FillFlags();int rm=Fetchb(); - /*Bit32u*/int mask=1 << (Modrm.Getrd[rm].dword & 31); - if (rm >= 0xc0 ) { - Reg eard = Modrm.GetEArd[rm]; - SETFLAGBIT(CF,(eard.dword & mask)!=0); - eard.dword^=mask; - } else { - /*PhysPt*/int eaa = getEaa(rm);eaa+=(Modrm.Getrd[rm].dword>>5)*4; // intentional signed shift - /*Bit32u*/int old=Memory.mem_readd(eaa); - Memory.mem_writed(eaa,old ^ mask); - SETFLAGBIT(CF,(old & mask)!=0); - } - return HANDLED; - } + ops[0x3bb] = () -> { + FillFlags();int rm=Fetchb(); + /*Bit32u*/int mask=1 << (Modrm.Getrd[rm].dword & 31); + if (rm >= 0xc0 ) { + Reg eard = Modrm.GetEArd[rm]; + SETFLAGBIT(CF,(eard.dword & mask)!=0); + eard.dword^=mask; + } else { + /*PhysPt*/int eaa = getEaa(rm);eaa+=(Modrm.Getrd[rm].dword>>5)*4; // intentional signed shift + /*Bit32u*/int old=Memory.mem_readd(eaa); + Memory.mem_writed(eaa,old ^ mask); + SETFLAGBIT(CF,(old & mask)!=0); + } + return HANDLED; }; /* BSF Gd,Ed */ - ops[0x3bc] = new OP() { - final public int call() { - int rm=Fetchb(); - /*Bit32u*/int result,value; - if (rm >= 0xc0) { value=Modrm.GetEArd[rm].dword; } - else { /*PhysPt*/int eaa = getEaa(rm); value=Memory.mem_readd(eaa); } - if (value==0) { - SETFLAGBIT(ZF,true); - } else { - result = 0; - while ((value & 0x01)==0) { result++; value>>>=1; } - SETFLAGBIT(ZF,false); - Modrm.Getrd[rm].dword=result; - } - type=t_UNKNOWN; - return HANDLED; - } + ops[0x3bc] = () -> { + int rm=Fetchb(); + /*Bit32u*/int result,value; + if (rm >= 0xc0) { value=Modrm.GetEArd[rm].dword; } + else { /*PhysPt*/int eaa = getEaa(rm); value=Memory.mem_readd(eaa); } + if (value==0) { + SETFLAGBIT(ZF,true); + } else { + result = 0; + while ((value & 0x01)==0) { result++; value>>>=1; } + SETFLAGBIT(ZF,false); + Modrm.Getrd[rm].dword=result; + } + type=t_UNKNOWN; + return HANDLED; }; /* BSR Gd,Ed */ - ops[0x3bd] = new OP() { - final public int call() { - int rm=Fetchb(); - /*Bit32u*/int result,value; - if (rm >= 0xc0) { value=Modrm.GetEArd[rm].dword; } - else { /*PhysPt*/int eaa = getEaa(rm); value=Memory.mem_readd(eaa); } - if (value==0) { - SETFLAGBIT(ZF,true); - } else { - result = 31; // Operandsize-1 - while ((value & 0x80000000)==0) { result--; value<<=1; } - SETFLAGBIT(ZF,false); - Modrm.Getrd[rm].dword=result; - } - type=t_UNKNOWN; - return HANDLED; - } + ops[0x3bd] = () -> { + int rm=Fetchb(); + /*Bit32u*/int result,value; + if (rm >= 0xc0) { value=Modrm.GetEArd[rm].dword; } + else { /*PhysPt*/int eaa = getEaa(rm); value=Memory.mem_readd(eaa); } + if (value==0) { + SETFLAGBIT(ZF,true); + } else { + result = 31; // Operandsize-1 + while ((value & 0x80000000)==0) { result--; value<<=1; } + SETFLAGBIT(ZF,false); + Modrm.Getrd[rm].dword=result; + } + type=t_UNKNOWN; + return HANDLED; }; /* MOVSX Gd,Eb */ - ops[0x3be] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=(byte)(Modrm.GetEArb[rm].get());} - else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=(byte)Memory.mem_readb(eaa);} - return HANDLED; - } + ops[0x3be] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=(byte)(Modrm.GetEArb[rm].get());} + else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=(byte)Memory.mem_readb(eaa);} + return HANDLED; }; /* MOVSX Gd,Ew */ - ops[0x3bf] = new OP() { - final public int call() { - int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=(short)(Modrm.GetEArw[rm].word());} - else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=(short)Memory.mem_readw(eaa);} // Yes that short signed cast is intentional - return HANDLED; - } + ops[0x3bf] = () -> { + int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.Getrd[rm].dword=(short)(Modrm.GetEArw[rm].word());} + else {/*PhysPt*/int eaa = getEaa(rm);Modrm.Getrd[rm].dword=(short)Memory.mem_readw(eaa);} // Yes that short signed cast is intentional + return HANDLED; }; /* XADD Gd,Ed */ // :DOSBOX: this is different from dosbox - ops[0x3c1] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType= 0xc0 ) { - int result = Instructions.ADDD(Modrm.Getrd[rm].dword, Modrm.GetEArd[rm].dword); - Modrm.Getrd[rm].dword=Modrm.GetEArd[rm].dword; - Modrm.GetEArd[rm].dword=result; + ops[0x3c1] = () -> { + if (CPU.CPU_ArchitectureType= 0xc0 ) { + int result = Instructions.ADDD(Modrm.Getrd[rm].dword, Modrm.GetEArd[rm].dword); + Modrm.Getrd[rm].dword=Modrm.GetEArd[rm].dword; + Modrm.GetEArd[rm].dword=result; + } else { + /*PhysPt*/int eaa = getEaa(rm); + int value = Memory.mem_readd(eaa); + int result = Instructions.ADDD(Modrm.Getrd[rm].dword, value); + Memory.mem_writed(eaa,result); + Modrm.Getrd[rm].dword=value; + } + return HANDLED; + }; + + ops[0x3c7] = () -> { + if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_PENTIUM) return ILLEGAL_OPCODE; + int rm=Fetchb(); + if ((rm & 0x38) == 8) { // CMPXCHG8B + long value1 = ((CPU_Regs.reg_edx.dword & 0xffffffffL) << 32) | (CPU_Regs.reg_eax.dword & 0xffffffffL); + int eaa = getEaa(rm); + long value2 = (Memory.mem_readd(eaa) & 0xffffffffl) | ((Memory.mem_readd(eaa + 4) & 0xffffffffl) << 32); + Flags.FillFlags(); + if (value1 == value2) { + CPU_Regs.SETFLAGBIT(CPU_Regs.ZF, true); + Memory.mem_writed(eaa, CPU_Regs.reg_ebx.dword); + Memory.mem_writed(eaa + 4, CPU_Regs.reg_ecx.dword); } else { - /*PhysPt*/int eaa = getEaa(rm); - int value = Memory.mem_readd(eaa); - int result = Instructions.ADDD(Modrm.Getrd[rm].dword, value); - Memory.mem_writed(eaa,result); - Modrm.Getrd[rm].dword=value; - } - return HANDLED; - } - }; - - ops[0x3c7] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType< CPU.CPU_ARCHTYPE_PENTIUM) return ILLEGAL_OPCODE; - int rm=Fetchb(); - switch (rm & 0x38) { - case 8: // CMPXCHG8B - { - long value1 = ((CPU_Regs.reg_edx.dword & 0xffffffffL) << 32) | (CPU_Regs.reg_eax.dword & 0xffffffffL); - int eaa = getEaa(rm); - long value2 = (Memory.mem_readd(eaa) & 0xffffffffl) | ((Memory.mem_readd(eaa+4) & 0xffffffffl) << 32); - Flags.FillFlags(); - if (value1==value2) { - CPU_Regs.SETFLAGBIT(CPU_Regs.ZF, true); - Memory.mem_writed(eaa, CPU_Regs.reg_ebx.dword); - Memory.mem_writed(eaa+4, CPU_Regs.reg_ecx.dword); - } else { - CPU_Regs.SETFLAGBIT(CPU_Regs.ZF, false); - CPU_Regs.reg_edx.dword = (int)(value2 >>> 32); - CPU_Regs.reg_eax.dword = (int)value2; - } - } - break; - default: - return ILLEGAL_OPCODE; + CPU_Regs.SETFLAGBIT(CPU_Regs.ZF, false); + CPU_Regs.reg_edx.dword = (int) (value2 >>> 32); + CPU_Regs.reg_eax.dword = (int) value2; } - return HANDLED; + } else { + return ILLEGAL_OPCODE; } + return HANDLED; }; /* BSWAP EAX */ - ops[0x3c8] = new OP() { - final public int call() { - if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType { + if (CPU.CPU_ArchitectureType NOT_HANDLED; - for (int i=0;i= 0xc0 ) { - int value = 0; - switch ((rm >> 3) & 7) { - case 0: value = reg_eax.low(); break; - case 1: value = reg_ecx.low(); break; - case 2: value = reg_edx.low(); break; - case 3: value = reg_ebx.low(); break; - case 4: value = reg_eax.high(); break; - case 5: value = reg_ecx.high(); break; - case 6: value = reg_edx.high(); break; - case 7: value = reg_ebx.high(); break; - } - switch (rm & 7) { - case 0: reg_eax.low(ADDB(value, reg_eax.low())); break; - case 1: reg_ecx.low(ADDB(value, reg_ecx.low())); break; - case 2: reg_edx.low(ADDB(value, reg_edx.low())); break; - case 3: reg_ebx.low(ADDB(value, reg_ebx.low())); break; - case 4: reg_eax.high(ADDB(value, reg_eax.high())); break; - case 5: reg_ecx.high(ADDB(value, reg_ecx.high())); break; - case 6: reg_edx.high(ADDB(value, reg_edx.high())); break; - case 7: reg_ebx.high(ADDB(value, reg_ebx.high())); break; - } - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, ADDB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; - } + ops[0x00] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + int value = 0; + switch ((rm >> 3) & 7) { + case 0: value = reg_eax.low(); break; + case 1: value = reg_ecx.low(); break; + case 2: value = reg_edx.low(); break; + case 3: value = reg_ebx.low(); break; + case 4: value = reg_eax.high(); break; + case 5: value = reg_ecx.high(); break; + case 6: value = reg_edx.high(); break; + case 7: value = reg_ebx.high(); break; + } + switch (rm & 7) { + case 0: reg_eax.low(ADDB(value, reg_eax.low())); break; + case 1: reg_ecx.low(ADDB(value, reg_ecx.low())); break; + case 2: reg_edx.low(ADDB(value, reg_edx.low())); break; + case 3: reg_ebx.low(ADDB(value, reg_ebx.low())); break; + case 4: reg_eax.high(ADDB(value, reg_eax.high())); break; + case 5: reg_ecx.high(ADDB(value, reg_ecx.high())); break; + case 6: reg_edx.high(ADDB(value, reg_edx.high())); break; + case 7: reg_ebx.high(ADDB(value, reg_ebx.high())); break; + } + } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, ADDB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); + } + return HANDLED; }; ops[0x200] = ops[0x00]; /* ADD Ew,Gw */ - ops[0x01] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArw[rm].word(ADDW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, ADDW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x01] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArw[rm].word(ADDW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, ADDW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); } + return HANDLED; }; /* ADD Gb,Eb */ - ops[0x02] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(ADDB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(ADDB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x02] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(ADDB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); } + else { + Modrm.Getrb[rm].set(ADDB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); + } + return HANDLED; }; ops[0x202] = ops[0x02]; /* ADD Gw,Ew */ - ops[0x03] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrw[rm].word(ADDW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); - } - else { - Modrm.Getrw[rm].word(ADDW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x03] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrw[rm].word(ADDW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); + } + else { + Modrm.Getrw[rm].word(ADDW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); } + return HANDLED; }; /* ADD AL,Ib */ - ops[0x04] = new OP() { - final public int call() { - reg_eax.low(ADDB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x04] = () -> { + reg_eax.low(ADDB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x204] = ops[0x04]; /* ADD AX,Iw */ - ops[0x05] = new OP() { - final public int call() { - reg_eax.word(ADDW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x05] = () -> { + reg_eax.word(ADDW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* PUSH ES */ - ops[0x06] = new OP() { - final public int call() { - CPU.CPU_Push16(CPU_Regs.reg_esVal.dword); - return HANDLED; - } + ops[0x06] = () -> { + CPU.CPU_Push16(CPU_Regs.reg_esVal.dword); + return HANDLED; }; /* POP ES */ - ops[0x07] = new OP() { - final public int call() { - if (CPU.CPU_PopSegES(false)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x07] = () -> { + if (CPU.CPU_PopSegES(false)) return RUNEXCEPTION(); + return HANDLED; }; /* OR Eb,Gb */ - ops[0x08] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArb[rm].set(ORB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, ORB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; + ops[0x08] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArb[rm].set(ORB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, ORB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); } + return HANDLED; }; ops[0x208] = ops[0x08]; /* OR Ew,Gw */ - ops[0x09] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - Modrm.GetEArw[rm].word(ORW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, ORW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x09] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + Modrm.GetEArw[rm].word(ORW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, ORW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); } + return HANDLED; }; /* OR Gb,Eb */ - ops[0x0a] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(ORB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(ORB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x0a] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(ORB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); } + else { + Modrm.Getrb[rm].set(ORB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); + } + return HANDLED; }; ops[0x20a] = ops[0x0a]; /* OR Gw,Ew */ - ops[0x0b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - Reg r = Modrm.Getrw[rm]; - if (rm >= 0xc0 ) { - r.word(ORW(Modrm.GetEArw[rm].word(),r.word())); - } - else { - r.word(ORW(Memory.mem_readw(getEaa(rm)),r.word())); - } - return HANDLED; + ops[0x0b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + Reg r = Modrm.Getrw[rm]; + if (rm >= 0xc0 ) { + r.word(ORW(Modrm.GetEArw[rm].word(),r.word())); + } + else { + r.word(ORW(Memory.mem_readw(getEaa(rm)),r.word())); } + return HANDLED; }; /* OR AL,Ib */ - ops[0x0c] = new OP() { - final public int call() { - reg_eax.low(ORB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x0c] = () -> { + reg_eax.low(ORB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x20c] = ops[0x0c]; /* OR AX,Iw */ - ops[0x0d] = new OP() { - final public int call() { - reg_eax.word(ORW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x0d] = () -> { + reg_eax.word(ORW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* PUSH CS */ - ops[0x0e] = new OP() { - final public int call() { - CPU.CPU_Push16(CPU_Regs.reg_csVal.dword); - return HANDLED; - } + ops[0x0e] = () -> { + CPU.CPU_Push16(CPU_Regs.reg_csVal.dword); + return HANDLED; }; /* 2 byte opcodes*/ - ops[0x0f] = new OP() { - final public int call() { - opcode_index|=OPCODE_0F; - return RESTART; - } + ops[0x0f] = () -> { + opcode_index|=OPCODE_0F; + return RESTART; }; ops[0x20f] = ops[0x0f]; /* ADC Eb,Gb */ - ops[0x10] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - Modrm.GetEArb[rm].set(ADCB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, ADCB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; + ops[0x10] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + Modrm.GetEArb[rm].set(ADCB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, ADCB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); } + return HANDLED; }; ops[0x210] = ops[0x10]; /* ADC Ew,Gw */ - ops[0x11] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArw[rm].word(ADCW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, ADCW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x11] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArw[rm].word(ADCW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, ADCW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); } + return HANDLED; }; /* ADC Gb,Eb */ - ops[0x12] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(ADCB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(ADCB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x12] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(ADCB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); } + else { + Modrm.Getrb[rm].set(ADCB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); + } + return HANDLED; }; ops[0x212] = ops[0x12]; /* ADC Gw,Ew */ - ops[0x13] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrw[rm].word(ADCW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); - } - else { - Modrm.Getrw[rm].word(ADCW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x13] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrw[rm].word(ADCW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); + } + else { + Modrm.Getrw[rm].word(ADCW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); } + return HANDLED; }; /* ADC AL,Ib */ - ops[0x14] = new OP() { - final public int call() { - reg_eax.low(ADCB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x14] = () -> { + reg_eax.low(ADCB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x214] = ops[0x14]; /* ADC AX,Iw */ - ops[0x15] = new OP() { - final public int call() { - reg_eax.word(ADCW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x15] = () -> { + reg_eax.word(ADCW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* PUSH SS */ - ops[0x16] = new OP() { - final public int call() { - CPU.CPU_Push16(CPU_Regs.reg_ssVal.dword); - return HANDLED; - } + ops[0x16] = () -> { + CPU.CPU_Push16(CPU_Regs.reg_ssVal.dword); + return HANDLED; }; /* POP SS */ - ops[0x17] = new OP() { - final public int call() { - if (CPU.CPU_PopSegSS(false)) return RUNEXCEPTION(); - CPU.CPU_Cycles++; //Always do another instruction - return HANDLED; - } + ops[0x17] = () -> { + if (CPU.CPU_PopSegSS(false)) return RUNEXCEPTION(); + CPU.CPU_Cycles++; //Always do another instruction + return HANDLED; }; /* SBB Eb,Gb */ - ops[0x18] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArb[rm].set(SBBB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, SBBB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; + ops[0x18] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArb[rm].set(SBBB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, SBBB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); + } + return HANDLED; }; ops[0x218] = ops[0x18]; /* SBB Ew,Gw */ - ops[0x19] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - r = rm; - Modrm.GetEArw[rm].word(SBBW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, SBBW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x19] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + r = rm; + Modrm.GetEArw[rm].word(SBBW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, SBBW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); + } + return HANDLED; }; /* SBB Gb,Eb */ - ops[0x1a] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(SBBB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(SBBB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x1a] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(SBBB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); + } + else { + Modrm.Getrb[rm].set(SBBB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); } + return HANDLED; }; ops[0x21a] = ops[0x1a]; /* SBB Gw,Ew */ - ops[0x1b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - r = rm; - if (rm >= 0xc0 ) { - Modrm.Getrw[rm].word(SBBW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); - } - else { - Modrm.Getrw[rm].word(SBBW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x1b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + r = rm; + if (rm >= 0xc0 ) { + Modrm.Getrw[rm].word(SBBW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); + } + else { + Modrm.Getrw[rm].word(SBBW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); } + return HANDLED; }; /* SBB AL,Ib */ - ops[0x1c] = new OP() { - final public int call() { - reg_eax.low(SBBB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x1c] = () -> { + reg_eax.low(SBBB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x21c] = ops[0x1c]; /* SBB AX,Iw */ - ops[0x1d] = new OP() { - final public int call() { - reg_eax.word(SBBW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x1d] = () -> { + reg_eax.word(SBBW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* PUSH DS */ - ops[0x1e] = new OP() { - final public int call() { - CPU.CPU_Push16(CPU_Regs.reg_dsVal.dword); - return HANDLED; - } + ops[0x1e] = () -> { + CPU.CPU_Push16(CPU_Regs.reg_dsVal.dword); + return HANDLED; }; /* POP DS */ - ops[0x1f] = new OP() { - final public int call() { - if (CPU.CPU_PopSegDS(false)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x1f] = () -> { + if (CPU.CPU_PopSegDS(false)) return RUNEXCEPTION(); + return HANDLED; }; /* AND Eb,Gb */ - ops[0x20] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArb[rm].set(ANDB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, ANDB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; + ops[0x20] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArb[rm].set(ANDB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, ANDB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); } + return HANDLED; }; ops[0x220] = ops[0x20]; /* AND Ew,Gw */ - ops[0x21] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArw[rm].word(ANDW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, ANDW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x21] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArw[rm].word(ANDW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, ANDW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); } + return HANDLED; }; /* AND Gb,Eb */ - ops[0x22] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(ANDB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(ANDB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x22] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(ANDB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); } + else { + Modrm.Getrb[rm].set(ANDB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); + } + return HANDLED; }; ops[0x222] = ops[0x22]; /* AND Gw,Ew */ - ops[0x23] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - r = rm; - if (rm >= 0xc0 ) { - Modrm.Getrw[rm].word(ANDW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); - } - else { - Modrm.Getrw[rm].word(ANDW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x23] = () -> { + /*Bit8u*/final int rm=Fetchb(); + r = rm; + if (rm >= 0xc0 ) { + Modrm.Getrw[rm].word(ANDW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); } + else { + Modrm.Getrw[rm].word(ANDW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); + } + return HANDLED; }; /* AND AL,Ib */ - ops[0x24] = new OP() { - final public int call() { - reg_eax.low(ANDB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x24] = () -> { + reg_eax.low(ANDB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x224] = ops[0x24]; /* AND AX,Iw */ - ops[0x25] = new OP() { - final public int call() { - reg_eax.word(ANDW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x25] = () -> { + reg_eax.word(ANDW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* SEG ES: */ - ops[0x26] = new OP() { - final public int call() { - DO_PREFIX_SEG_ES(); - return RESTART; - } + ops[0x26] = () -> { + DO_PREFIX_SEG_ES(); + return RESTART; }; ops[0x226] = ops[0x26]; /* DAA */ - ops[0x27] = new OP() { - final public int call() { - Instructions.DAA(); - return HANDLED; - } + ops[0x27] = () -> { + Instructions.DAA(); + return HANDLED; }; ops[0x227] = ops[0x27]; /* SUB Eb,Gb */ - ops[0x28] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArb[rm].set(SUBB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, SUBB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; + ops[0x28] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArb[rm].set(SUBB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, SUBB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); + } + return HANDLED; }; ops[0x228] = ops[0x28]; /* SUB Ew,Gw */ - ops[0x29] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArw[rm].word(SUBW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, SUBW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x29] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArw[rm].word(SUBW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, SUBW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); + } + return HANDLED; }; /* SUB Gb,Eb */ - ops[0x2a] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(SUBB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(SUBB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x2a] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(SUBB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); + } + else { + Modrm.Getrb[rm].set(SUBB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); } + return HANDLED; }; ops[0x22a] = ops[0x2a]; /* SUB Gw,Ew */ - ops[0x2b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - r = rm; - if (rm >= 0xc0 ) { - Modrm.Getrw[rm].word(SUBW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); - } - else { - Modrm.Getrw[rm].word(SUBW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x2b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + r = rm; + if (rm >= 0xc0 ) { + Modrm.Getrw[rm].word(SUBW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); + } + else { + Modrm.Getrw[rm].word(SUBW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); } + return HANDLED; }; /* SUB AL,Ib */ - ops[0x2c] = new OP() { - final public int call() { - reg_eax.low(SUBB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x2c] = () -> { + reg_eax.low(SUBB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x22c] = ops[0x2c]; /* SUB AX,Iw */ - ops[0x2d] = new OP() { - final public int call() { - reg_eax.word(SUBW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x2d] = () -> { + reg_eax.word(SUBW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* SEG CS: */ - ops[0x2e] = new OP() { - final public int call() { - DO_PREFIX_SEG_CS(); - return RESTART; - } + ops[0x2e] = () -> { + DO_PREFIX_SEG_CS(); + return RESTART; }; ops[0x22e] = ops[0x2e]; /* DAS */ - ops[0x2f] = new OP() { - final public int call() { - Instructions.DAS(); - return HANDLED; - } + ops[0x2f] = () -> { + Instructions.DAS(); + return HANDLED; }; ops[0x22f] = ops[0x2f]; /* XOR Eb,Gb */ - ops[0x30] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArb[rm].set(XORB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, XORB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); - } - return HANDLED; + ops[0x30] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArb[rm].set(XORB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, XORB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa))); } + return HANDLED; }; ops[0x230] = ops[0x30]; /* XOR Ew,Gw */ - ops[0x31] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.GetEArw[rm].word(XORW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, XORW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); - } - return HANDLED; + ops[0x31] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.GetEArw[rm].word(XORW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, XORW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa))); } + return HANDLED; }; /* XOR Gb,Eb */ - ops[0x32] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrb[rm].set(XORB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); - } - else { - Modrm.Getrb[rm].set(XORB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); - } - return HANDLED; + ops[0x32] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrb[rm].set(XORB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get())); } + else { + Modrm.Getrb[rm].set(XORB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get())); + } + return HANDLED; }; ops[0x232] = ops[0x32]; /* XOR Gw,Ew */ - ops[0x33] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - Modrm.Getrw[rm].word(XORW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); - } - else { - Modrm.Getrw[rm].word(XORW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); - } - return HANDLED; + ops[0x33] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + Modrm.Getrw[rm].word(XORW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word())); + } + else { + Modrm.Getrw[rm].word(XORW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word())); } + return HANDLED; }; /* XOR AL,Ib */ - ops[0x34] = new OP() { - final public int call() { - reg_eax.low(XORB(Fetchb(),reg_eax.low())); - return HANDLED; - } + ops[0x34] = () -> { + reg_eax.low(XORB(Fetchb(),reg_eax.low())); + return HANDLED; }; ops[0x234] = ops[0x34]; /* XOR AX,Iw */ - ops[0x35] = new OP() { - final public int call() { - reg_eax.word(XORW(Fetchw(),reg_eax.word())); - return HANDLED; - } + ops[0x35] = () -> { + reg_eax.word(XORW(Fetchw(),reg_eax.word())); + return HANDLED; }; /* SEG SS: */ - ops[0x36] = new OP() { - final public int call() { - DO_PREFIX_SEG_SS(); - return RESTART; - } + ops[0x36] = () -> { + DO_PREFIX_SEG_SS(); + return RESTART; }; ops[0x236] = ops[0x36]; /* AAA */ - ops[0x37] = new OP() { - final public int call() { - Instructions.AAA(); - return HANDLED; - } + ops[0x37] = () -> { + Instructions.AAA(); + return HANDLED; }; ops[0x237] = ops[0x37]; /* CMP Eb,Gb */ - ops[0x38] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - CMPB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get()); - } - else { - int eaa = getEaa(rm); - CMPB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa)); - } - return HANDLED; + ops[0x38] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + CMPB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get()); + } + else { + int eaa = getEaa(rm); + CMPB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa)); } + return HANDLED; }; ops[0x238] = ops[0x38]; /* CMP Ew,Gw */ - ops[0x39] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - CMPW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word()); - } - else { - int eaa = getEaa(rm); - CMPW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa)); - } - return HANDLED; + ops[0x39] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + CMPW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word()); + } + else { + int eaa = getEaa(rm); + CMPW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa)); } + return HANDLED; }; /* CMP Gb,Eb */ - ops[0x3a] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - CMPB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get()); - } - else { - CMPB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get()); - } - return HANDLED; + ops[0x3a] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + CMPB(Modrm.GetEArb[rm].get(),Modrm.Getrb[rm].get()); } + else { + CMPB(Memory.mem_readb(getEaa(rm)),Modrm.Getrb[rm].get()); + } + return HANDLED; }; ops[0x23a] = ops[0x3a]; /* CMP Gw,Ew */ - ops[0x3b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - CMPW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word()); - } - else { - CMPW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word()); - } - return HANDLED; + ops[0x3b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + CMPW(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word()); + } + else { + CMPW(Memory.mem_readw(getEaa(rm)),Modrm.Getrw[rm].word()); } + return HANDLED; }; /* CMP AL,Ib */ - ops[0x3c] = new OP() { - final public int call() { - CMPB(Fetchb(),reg_eax.low()); - return HANDLED; - } + ops[0x3c] = () -> { + CMPB(Fetchb(),reg_eax.low()); + return HANDLED; }; ops[0x23c] = ops[0x3c]; /* CMP AX,Iw */ - ops[0x3d] = new OP() { - final public int call() { - CMPW(Fetchw(),reg_eax.word()); - return HANDLED; - } + ops[0x3d] = () -> { + CMPW(Fetchw(),reg_eax.word()); + return HANDLED; }; /* SEG DS: */ - ops[0x3e] = new OP() { - final public int call() { - DO_PREFIX_SEG_DS(); - return RESTART; - } + ops[0x3e] = () -> { + DO_PREFIX_SEG_DS(); + return RESTART; }; ops[0x23e] = ops[0x3e]; /* AAS */ - ops[0x3f] = new OP() { - final public int call() { - Instructions.AAS(); - return HANDLED; - } + ops[0x3f] = () -> { + Instructions.AAS(); + return HANDLED; }; ops[0x23f] = ops[0x3f]; /* INC AX */ - ops[0x40] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_eax.word()); - lf_resw(lf_var1w()+1); - reg_eax.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x40] = () -> { + LoadCF();lf_var1w(reg_eax.word()); + lf_resw(lf_var1w()+1); + reg_eax.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC CX */ - ops[0x41] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_ecx.word()); - lf_resw(lf_var1w()+1); - reg_ecx.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x41] = () -> { + LoadCF();lf_var1w(reg_ecx.word()); + lf_resw(lf_var1w()+1); + reg_ecx.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC DX */ - ops[0x42] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_edx.word()); - lf_resw(lf_var1w()+1); - reg_edx.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x42] = () -> { + LoadCF();lf_var1w(reg_edx.word()); + lf_resw(lf_var1w()+1); + reg_edx.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC BX */ - ops[0x43] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_ebx.word()); - lf_resw(lf_var1w()+1); - reg_ebx.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x43] = () -> { + LoadCF();lf_var1w(reg_ebx.word()); + lf_resw(lf_var1w()+1); + reg_ebx.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC SP */ - ops[0x44] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_esp.word()); - lf_resw(lf_var1w()+1); - reg_esp.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x44] = () -> { + LoadCF();lf_var1w(reg_esp.word()); + lf_resw(lf_var1w()+1); + reg_esp.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC BP */ - ops[0x45] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_ebp.word()); - lf_resw(lf_var1w()+1); - reg_ebp.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x45] = () -> { + LoadCF();lf_var1w(reg_ebp.word()); + lf_resw(lf_var1w()+1); + reg_ebp.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC SI */ - ops[0x46] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_esi.word()); - lf_resw(lf_var1w()+1); - reg_esi.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x46] = () -> { + LoadCF();lf_var1w(reg_esi.word()); + lf_resw(lf_var1w()+1); + reg_esi.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* INC DI */ - ops[0x47] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_edi.word()); - lf_resw(lf_var1w()+1); - reg_edi.word(lf_resw()); - type=t_INCw; - return HANDLED; - } + ops[0x47] = () -> { + LoadCF();lf_var1w(reg_edi.word()); + lf_resw(lf_var1w()+1); + reg_edi.word(lf_resw()); + type=t_INCw; + return HANDLED; }; /* DEC AX */ - ops[0x48] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_eax.word()); - lf_resw(lf_var1w()-1); - reg_eax.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x48] = () -> { + LoadCF();lf_var1w(reg_eax.word()); + lf_resw(lf_var1w()-1); + reg_eax.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC CX */ - ops[0x49] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_ecx.word()); - lf_resw(lf_var1w()-1); - reg_ecx.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x49] = () -> { + LoadCF();lf_var1w(reg_ecx.word()); + lf_resw(lf_var1w()-1); + reg_ecx.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC DX */ - ops[0x4a] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_edx.word()); - lf_resw(lf_var1w()-1); - reg_edx.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x4a] = () -> { + LoadCF();lf_var1w(reg_edx.word()); + lf_resw(lf_var1w()-1); + reg_edx.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC BX */ - ops[0x4b] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_ebx.word()); - lf_resw(lf_var1w()-1); - reg_ebx.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x4b] = () -> { + LoadCF();lf_var1w(reg_ebx.word()); + lf_resw(lf_var1w()-1); + reg_ebx.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC SP */ - ops[0x4c] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_esp.word()); - lf_resw(lf_var1w()-1); - reg_esp.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x4c] = () -> { + LoadCF();lf_var1w(reg_esp.word()); + lf_resw(lf_var1w()-1); + reg_esp.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC BP */ - ops[0x4d] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_ebp.word()); - lf_resw(lf_var1w()-1); - reg_ebp.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x4d] = () -> { + LoadCF();lf_var1w(reg_ebp.word()); + lf_resw(lf_var1w()-1); + reg_ebp.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC SI */ - ops[0x4e] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_esi.word()); - lf_resw(lf_var1w()-1); - reg_esi.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x4e] = () -> { + LoadCF();lf_var1w(reg_esi.word()); + lf_resw(lf_var1w()-1); + reg_esi.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* DEC DI */ - ops[0x4f] = new OP() { - final public int call() { - LoadCF();lf_var1w(reg_edi.word()); - lf_resw(lf_var1w()-1); - reg_edi.word(lf_resw()); - type=t_DECw; - return HANDLED; - } + ops[0x4f] = () -> { + LoadCF();lf_var1w(reg_edi.word()); + lf_resw(lf_var1w()-1); + reg_edi.word(lf_resw()); + type=t_DECw; + return HANDLED; }; /* PUSH AX */ - ops[0x50] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_eax.word()); - return HANDLED; - } + ops[0x50] = () -> { + CPU.CPU_Push16(reg_eax.word()); + return HANDLED; }; /* PUSH CX */ - ops[0x51] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_ecx.word()); - return HANDLED; - } + ops[0x51] = () -> { + CPU.CPU_Push16(reg_ecx.word()); + return HANDLED; }; /* PUSH DX */ - ops[0x52] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_edx.word()); - return HANDLED; - } + ops[0x52] = () -> { + CPU.CPU_Push16(reg_edx.word()); + return HANDLED; }; /* PUSH BX */ - ops[0x53] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_ebx.word()); - return HANDLED; - } + ops[0x53] = () -> { + CPU.CPU_Push16(reg_ebx.word()); + return HANDLED; }; /* PUSH SP */ - ops[0x54] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_esp.word()); - return HANDLED; - } + ops[0x54] = () -> { + CPU.CPU_Push16(reg_esp.word()); + return HANDLED; }; /* PUSH BP */ - ops[0x55] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_ebp.word()); - return HANDLED; - } + ops[0x55] = () -> { + CPU.CPU_Push16(reg_ebp.word()); + return HANDLED; }; /* PUSH SI */ - ops[0x56] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_esi.word()); - return HANDLED; - } + ops[0x56] = () -> { + CPU.CPU_Push16(reg_esi.word()); + return HANDLED; }; /* PUSH DI */ - ops[0x57] = new OP() { - final public int call() { - CPU.CPU_Push16(reg_edi.word()); - return HANDLED; - } + ops[0x57] = () -> { + CPU.CPU_Push16(reg_edi.word()); + return HANDLED; }; /* POP AX */ - ops[0x58] = new OP() { - final public int call() { - reg_eax.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x58] = () -> { + reg_eax.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP CX */ - ops[0x59] = new OP() { - final public int call() { - reg_ecx.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x59] = () -> { + reg_ecx.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP DX */ - ops[0x5a] = new OP() { - final public int call() { - reg_edx.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x5a] = () -> { + reg_edx.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP BX */ - ops[0x5b] = new OP() { - final public int call() { - reg_ebx.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x5b] = () -> { + reg_ebx.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP SP */ - ops[0x5c] = new OP() { - final public int call() { - reg_esp.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x5c] = () -> { + reg_esp.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP BP */ - ops[0x5d] = new OP() { - final public int call() { - reg_ebp.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x5d] = () -> { + reg_ebp.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP SI */ - ops[0x5e] = new OP() { - final public int call() { - reg_esi.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x5e] = () -> { + reg_esi.word(CPU.CPU_Pop16()); + return HANDLED; }; /* POP DI */ - ops[0x5f] = new OP() { - final public int call() { - reg_edi.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0x5f] = () -> { + reg_edi.word(CPU.CPU_Pop16()); + return HANDLED; }; /* PUSHA */ - ops[0x60] = new OP() { - final public int call() { - /*Bit16u*/int old_sp=reg_esp.word(); - int esp = reg_esp.dword; - esp = CPU.CPU_Push16(esp, reg_eax.word()); - esp = CPU.CPU_Push16(esp, reg_ecx.word()); - esp = CPU.CPU_Push16(esp, reg_edx.word()); - esp = CPU.CPU_Push16(esp, reg_ebx.word()); - esp = CPU.CPU_Push16(esp, old_sp); - esp = CPU.CPU_Push16(esp, reg_ebp.word()); - esp = CPU.CPU_Push16(esp, reg_esi.word()); - esp = CPU.CPU_Push16(esp, reg_edi.word()); - // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant - CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|(esp & CPU.cpu.stack.mask); - return HANDLED; - } + ops[0x60] = () -> { + /*Bit16u*/int old_sp=reg_esp.word(); + int esp = reg_esp.dword; + esp = CPU.CPU_Push16(esp, reg_eax.word()); + esp = CPU.CPU_Push16(esp, reg_ecx.word()); + esp = CPU.CPU_Push16(esp, reg_edx.word()); + esp = CPU.CPU_Push16(esp, reg_ebx.word()); + esp = CPU.CPU_Push16(esp, old_sp); + esp = CPU.CPU_Push16(esp, reg_ebp.word()); + esp = CPU.CPU_Push16(esp, reg_esi.word()); + esp = CPU.CPU_Push16(esp, reg_edi.word()); + // Don't store ESP until all the memory writes are done in case of a PF so that this op can be reentrant + CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|(esp & CPU.cpu.stack.mask); + return HANDLED; }; /* POPA */ - ops[0x61] = new OP() { - final public int call() { - reg_edi.word(CPU.CPU_Peek16(0));reg_esi.word(CPU.CPU_Peek16(1));reg_ebp.word(CPU.CPU_Peek16(2));//Don't save SP - reg_ebx.word(CPU.CPU_Peek16(4));reg_edx.word(CPU.CPU_Peek16(5));reg_ecx.word(CPU.CPU_Peek16(6));reg_eax.word(CPU.CPU_Peek16(7)); - CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|((CPU_Regs.reg_esp.dword+16) & CPU.cpu.stack.mask); - return HANDLED; - } + ops[0x61] = () -> { + reg_edi.word(CPU.CPU_Peek16(0));reg_esi.word(CPU.CPU_Peek16(1));reg_ebp.word(CPU.CPU_Peek16(2));//Don't save SP + reg_ebx.word(CPU.CPU_Peek16(4));reg_edx.word(CPU.CPU_Peek16(5));reg_ecx.word(CPU.CPU_Peek16(6));reg_eax.word(CPU.CPU_Peek16(7)); + CPU_Regs.reg_esp.dword=(CPU_Regs.reg_esp.dword & CPU.cpu.stack.notmask)|((CPU_Regs.reg_esp.dword+16) & CPU.cpu.stack.mask); + return HANDLED; }; /* BOUND */ - ops[0x62] = new OP() { - final public int call() { - /*Bit16s*/int bound_min, bound_max; - /*Bit8u*/int rm=Fetchb();/*PhysPt*/int eaa=getEaa(rm); - bound_min=(short)Memory.mem_readw(eaa); - bound_max=(short)Memory.mem_readw(eaa+2); - if ( (((short)Modrm.Getrw[rm].word()) < bound_min) || (((short)Modrm.Getrw[rm].word()) > bound_max) ) { - return EXCEPTION(5); - } - return HANDLED; + ops[0x62] = () -> { + /*Bit16s*/int bound_min, bound_max; + /*Bit8u*/int rm=Fetchb();/*PhysPt*/int eaa=getEaa(rm); + bound_min=(short)Memory.mem_readw(eaa); + bound_max=(short)Memory.mem_readw(eaa+2); + if ( (((short)Modrm.Getrw[rm].word()) < bound_min) || (((short)Modrm.Getrw[rm].word()) > bound_max) ) { + return EXCEPTION(5); } + return HANDLED; }; /* ARPL Ew,Rw */ - ops[0x63] = new OP() { - final public int call() { - if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - int value = CPU.CPU_ARPL(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word()); - Modrm.GetEArw[rm].word(value); - } else { - /*PhysPt*/int eaa=getEaa(rm); - int value = Memory.mem_readw(eaa); - value = CPU.CPU_ARPL(value, Modrm.Getrw[rm].word()); - Memory.mem_writew(eaa,value); - } - return HANDLED; + ops[0x63] = () -> { + if ((CPU_Regs.flags & CPU_Regs.VM)!=0 || (!CPU.cpu.pmode)) return ILLEGAL_OPCODE; + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + int value = CPU.CPU_ARPL(Modrm.GetEArw[rm].word(),Modrm.Getrw[rm].word()); + Modrm.GetEArw[rm].word(value); + } else { + /*PhysPt*/int eaa=getEaa(rm); + int value = Memory.mem_readw(eaa); + value = CPU.CPU_ARPL(value, Modrm.Getrw[rm].word()); + Memory.mem_writew(eaa,value); } + return HANDLED; }; /* SEG FS: */ - ops[0x64] = new OP() { - final public int call() { - DO_PREFIX_SEG_FS(); - return RESTART; - } + ops[0x64] = () -> { + DO_PREFIX_SEG_FS(); + return RESTART; }; ops[0x264] = ops[0x64]; /* SEG GS: */ - ops[0x65] = new OP() { - final public int call() { - DO_PREFIX_SEG_GS(); - return RESTART; - } + ops[0x65] = () -> { + DO_PREFIX_SEG_GS(); + return RESTART; }; ops[0x265] = ops[0x65]; /* Operand Size Prefix */ - ops[0x66] = new OP() { - final public int call() { - opcode_index=(CPU.cpu.code.big?0:512); - return RESTART; - } + ops[0x66] = () -> { + opcode_index=(CPU.cpu.code.big?0:512); + return RESTART; }; ops[0x266] = ops[0x66]; /* Address Size Prefix */ - ops[0x67] = new OP() { - final public int call() { - prefixes=(prefixes & ~PREFIX_ADDR) |(CPU.cpu.code.big?0:1); - EA16 = (prefixes&1)==0; - return RESTART; - } + ops[0x67] = () -> { + prefixes=(prefixes & ~PREFIX_ADDR) |(CPU.cpu.code.big?0:1); + EA16 = (prefixes&1)==0; + return RESTART; }; ops[0x267] = ops[0x67]; /* PUSH Iw */ - ops[0x68] = new OP() { - final public int call() { - CPU.CPU_Push16(Fetchw()); - return HANDLED; - } + ops[0x68] = () -> { + CPU.CPU_Push16(Fetchw()); + return HANDLED; }; /* IMUL Gw,Ew,Iw */ - ops[0x69] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - r = rm; - if (rm >= 0xc0 ) { - int op3 = Fetchws(); - Modrm.Getrw[rm].word(DIMULW(Modrm.GetEArw[rm].word(),op3)); - } - else { - int eaa = getEaa(rm); - int op3 = Fetchws(); - Modrm.Getrw[rm].word(DIMULW(Memory.mem_readw(eaa),op3)); - } - return HANDLED; + ops[0x69] = () -> { + /*Bit8u*/final int rm=Fetchb(); + r = rm; + if (rm >= 0xc0 ) { + int op3 = Fetchws(); + Modrm.Getrw[rm].word(DIMULW(Modrm.GetEArw[rm].word(),op3)); } + else { + int eaa = getEaa(rm); + int op3 = Fetchws(); + Modrm.Getrw[rm].word(DIMULW(Memory.mem_readw(eaa),op3)); + } + return HANDLED; }; /* PUSH Ib */ - ops[0x6a] = new OP() { - final public int call() { - CPU.CPU_Push16(Fetchbs()); - return HANDLED; - } + ops[0x6a] = () -> { + CPU.CPU_Push16(Fetchbs()); + return HANDLED; }; /* IMUL Gw,Ew,Ib */ - ops[0x6b] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - r = rm; - if (rm >= 0xc0 ) { - int op3 = Fetchbs(); - Modrm.Getrw[rm].word(DIMULW(Modrm.GetEArw[rm].word(),op3)); - } - else { - int eaa = getEaa(rm); - int op3 = Fetchbs(); - Modrm.Getrw[rm].word(DIMULW(Memory.mem_readw(eaa),op3)); - } - return HANDLED; + ops[0x6b] = () -> { + /*Bit8u*/final int rm=Fetchb(); + r = rm; + if (rm >= 0xc0 ) { + int op3 = Fetchbs(); + Modrm.Getrw[rm].word(DIMULW(Modrm.GetEArw[rm].word(),op3)); } + else { + int eaa = getEaa(rm); + int op3 = Fetchbs(); + Modrm.Getrw[rm].word(DIMULW(Memory.mem_readw(eaa),op3)); + } + return HANDLED; }; /* INSB */ - ops[0x6c] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); - DoString(R_INSB); - return HANDLED; - } + ops[0x6c] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); + DoString(R_INSB); + return HANDLED; }; ops[0x26c] = ops[0x6c]; /* INSW */ - ops[0x6d] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); - DoString(R_INSW); - return HANDLED; - } + ops[0x6d] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); + DoString(R_INSW); + return HANDLED; }; /* OUTSB */ - ops[0x6e] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); - DoString(R_OUTSB); - return HANDLED; - } + ops[0x6e] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); + DoString(R_OUTSB); + return HANDLED; }; ops[0x26e] = ops[0x6e]; /* OUTSW */ - ops[0x6f] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); - DoString(R_OUTSW); - return HANDLED; - } + ops[0x6f] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); + DoString(R_OUTSW); + return HANDLED; }; /* JO */ - ops[0x70] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_O()); - return CONTINUE; - } + ops[0x70] = () -> { + JumpCond16_b(Flags.TFLG_O()); + return CONTINUE; }; /* JNO */ - ops[0x71] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NO()); - return CONTINUE; - } + ops[0x71] = () -> { + JumpCond16_b(Flags.TFLG_NO()); + return CONTINUE; }; /* JB */ - ops[0x72] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_B()); - return CONTINUE; - } + ops[0x72] = () -> { + JumpCond16_b(Flags.TFLG_B()); + return CONTINUE; }; /* JNB */ - ops[0x73] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NB()); - return CONTINUE; - } + ops[0x73] = () -> { + JumpCond16_b(Flags.TFLG_NB()); + return CONTINUE; }; /* JZ */ - ops[0x74] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_Z()); - return CONTINUE; - } + ops[0x74] = () -> { + JumpCond16_b(Flags.TFLG_Z()); + return CONTINUE; }; /* JNZ */ - ops[0x75] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NZ()); - return CONTINUE; - } + ops[0x75] = () -> { + JumpCond16_b(Flags.TFLG_NZ()); + return CONTINUE; }; /* JBE */ - ops[0x76] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_BE()); - return CONTINUE; - } + ops[0x76] = () -> { + JumpCond16_b(Flags.TFLG_BE()); + return CONTINUE; }; /* JNBE */ - ops[0x77] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NBE()); - return CONTINUE; - } + ops[0x77] = () -> { + JumpCond16_b(Flags.TFLG_NBE()); + return CONTINUE; }; /* JS */ - ops[0x78] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_S()); - return CONTINUE; - } + ops[0x78] = () -> { + JumpCond16_b(Flags.TFLG_S()); + return CONTINUE; }; /* JNS */ - ops[0x79] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NS()); - return CONTINUE; - } + ops[0x79] = () -> { + JumpCond16_b(Flags.TFLG_NS()); + return CONTINUE; }; /* JP */ - ops[0x7a] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_P()); - return CONTINUE; - } + ops[0x7a] = () -> { + JumpCond16_b(Flags.TFLG_P()); + return CONTINUE; }; /* JNP */ - ops[0x7b] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NP()); - return CONTINUE; - } + ops[0x7b] = () -> { + JumpCond16_b(Flags.TFLG_NP()); + return CONTINUE; }; /* JL */ - ops[0x7c] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_L()); - return CONTINUE; - } + ops[0x7c] = () -> { + JumpCond16_b(Flags.TFLG_L()); + return CONTINUE; }; /* JNL */ - ops[0x7d] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NL()); - return CONTINUE; - } + ops[0x7d] = () -> { + JumpCond16_b(Flags.TFLG_NL()); + return CONTINUE; }; /* JLE */ - ops[0x7e] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_LE()); - return CONTINUE; - } + ops[0x7e] = () -> { + JumpCond16_b(Flags.TFLG_LE()); + return CONTINUE; }; /* JNLE */ - ops[0x7f] = new OP() { - final public int call() { - JumpCond16_b(Flags.TFLG_NLE()); - return CONTINUE; - } + ops[0x7f] = () -> { + JumpCond16_b(Flags.TFLG_NLE()); + return CONTINUE; }; /* Grpl Eb,Ib */ - ops[0x80] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - if (rm>= 0xc0) { - Modrm.Getrb_interface r = Modrm.GetEArb[rm]; - - /*Bit8u*/int ib=Fetchb(); - switch (which) { - case 0x00:r.set(ADDB(ib,r.get()));break; - case 0x01: r.set(ORB(ib,r.get()));break; - case 0x02:r.set(ADCB(ib,r.get()));break; - case 0x03:r.set(SBBB(ib,r.get()));break; - case 0x04:r.set(ANDB(ib,r.get()));break; - case 0x05:r.set(SUBB(ib,r.get()));break; - case 0x06:r.set(XORB(ib,r.get()));break; - case 0x07:CMPB(ib,r.get());break; - } - } else { - int eaa = m = getEaa(rm); - - /*Bit8u*/int ib=Fetchb(); - switch (which) { - case 0x00:Memory.mem_writeb(eaa, ADDB(ib,Memory.mem_readb(eaa)));break; - case 0x01: Memory.mem_writeb(eaa, ORB(ib,Memory.mem_readb(eaa)));break; - case 0x02:Memory.mem_writeb(eaa, ADCB(ib,Memory.mem_readb(eaa)));break; - case 0x03:Memory.mem_writeb(eaa, SBBB(ib,Memory.mem_readb(eaa)));break; - case 0x04:Memory.mem_writeb(eaa, ANDB(ib,Memory.mem_readb(eaa)));break; - case 0x05:Memory.mem_writeb(eaa, SUBB(ib,Memory.mem_readb(eaa)));break; - case 0x06:Memory.mem_writeb(eaa, XORB(ib,Memory.mem_readb(eaa)));break; - case 0x07:CMPB(ib,Memory.mem_readb(eaa));break; - } + ops[0x80] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + if (rm>= 0xc0) { + Modrm.Getrb_interface r = Modrm.GetEArb[rm]; + + /*Bit8u*/int ib=Fetchb(); + switch (which) { + case 0x00:r.set(ADDB(ib,r.get()));break; + case 0x01: r.set(ORB(ib,r.get()));break; + case 0x02:r.set(ADCB(ib,r.get()));break; + case 0x03:r.set(SBBB(ib,r.get()));break; + case 0x04:r.set(ANDB(ib,r.get()));break; + case 0x05:r.set(SUBB(ib,r.get()));break; + case 0x06:r.set(XORB(ib,r.get()));break; + case 0x07:CMPB(ib,r.get());break; + } + } else { + int eaa = m = getEaa(rm); + + /*Bit8u*/int ib=Fetchb(); + switch (which) { + case 0x00:Memory.mem_writeb(eaa, ADDB(ib,Memory.mem_readb(eaa)));break; + case 0x01: Memory.mem_writeb(eaa, ORB(ib,Memory.mem_readb(eaa)));break; + case 0x02:Memory.mem_writeb(eaa, ADCB(ib,Memory.mem_readb(eaa)));break; + case 0x03:Memory.mem_writeb(eaa, SBBB(ib,Memory.mem_readb(eaa)));break; + case 0x04:Memory.mem_writeb(eaa, ANDB(ib,Memory.mem_readb(eaa)));break; + case 0x05:Memory.mem_writeb(eaa, SUBB(ib,Memory.mem_readb(eaa)));break; + case 0x06:Memory.mem_writeb(eaa, XORB(ib,Memory.mem_readb(eaa)));break; + case 0x07:CMPB(ib,Memory.mem_readb(eaa));break; } - return HANDLED; } + return HANDLED; }; ops[0x280] = ops[0x80]; @@ -1481,1814 +1220,1562 @@ final public int call() { ops[0x282] = ops[0x80]; /* Grpl Ew,Iw */ - ops[0x81] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - if (rm>= 0xc0) { - Reg r = Modrm.GetEArw[rm]; + ops[0x81] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + if (rm>= 0xc0) { + Reg r = Modrm.GetEArw[rm]; - /*Bit16u*/int iw=Fetchw(); - switch (which) { - case 0x00:r.word(ADDW(iw,r.word()));break; - case 0x01: r.word(ORW(iw,r.word()));break; - case 0x02:r.word(ADCW(iw,r.word()));break; - case 0x03:r.word(SBBW(iw,r.word()));break; - case 0x04:r.word(ANDW(iw,r.word()));break; - case 0x05:r.word(SUBW(iw,r.word()));break; - case 0x06:r.word(XORW(iw,r.word()));break; - case 0x07:CMPW(iw,r.word());break; - } - } else { - int eaa = getEaa(rm); - /*Bit16u*/int iw=Fetchw(); - switch (which) { - case 0x00:Memory.mem_writew(eaa, ADDW(iw,Memory.mem_readw(eaa)));break; - case 0x01: Memory.mem_writew(eaa, ORW(iw,Memory.mem_readw(eaa)));break; - case 0x02:Memory.mem_writew(eaa, ADCW(iw,Memory.mem_readw(eaa)));break; - case 0x03:Memory.mem_writew(eaa, SBBW(iw,Memory.mem_readw(eaa)));break; - case 0x04:Memory.mem_writew(eaa, ANDW(iw,Memory.mem_readw(eaa)));break; - case 0x05:Memory.mem_writew(eaa, SUBW(iw,Memory.mem_readw(eaa)));break; - case 0x06:Memory.mem_writew(eaa, XORW(iw,Memory.mem_readw(eaa)));break; - case 0x07:CMPW(iw,Memory.mem_readw(eaa));break; - } + /*Bit16u*/int iw=Fetchw(); + switch (which) { + case 0x00:r.word(ADDW(iw,r.word()));break; + case 0x01: r.word(ORW(iw,r.word()));break; + case 0x02:r.word(ADCW(iw,r.word()));break; + case 0x03:r.word(SBBW(iw,r.word()));break; + case 0x04:r.word(ANDW(iw,r.word()));break; + case 0x05:r.word(SUBW(iw,r.word()));break; + case 0x06:r.word(XORW(iw,r.word()));break; + case 0x07:CMPW(iw,r.word());break; + } + } else { + int eaa = getEaa(rm); + /*Bit16u*/int iw=Fetchw(); + switch (which) { + case 0x00:Memory.mem_writew(eaa, ADDW(iw,Memory.mem_readw(eaa)));break; + case 0x01: Memory.mem_writew(eaa, ORW(iw,Memory.mem_readw(eaa)));break; + case 0x02:Memory.mem_writew(eaa, ADCW(iw,Memory.mem_readw(eaa)));break; + case 0x03:Memory.mem_writew(eaa, SBBW(iw,Memory.mem_readw(eaa)));break; + case 0x04:Memory.mem_writew(eaa, ANDW(iw,Memory.mem_readw(eaa)));break; + case 0x05:Memory.mem_writew(eaa, SUBW(iw,Memory.mem_readw(eaa)));break; + case 0x06:Memory.mem_writew(eaa, XORW(iw,Memory.mem_readw(eaa)));break; + case 0x07:CMPW(iw,Memory.mem_readw(eaa));break; } - return HANDLED; } + return HANDLED; }; /* Grpl Ew,Ix */ - ops[0x83] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - if (rm>= 0xc0) { - // reading 240 as an unsigned byte will get returned as -16 and when that is cast to unsigned short it becomes 65520 - Reg r = Modrm.GetEArw[rm]; - /*Bit16u*/int iw=(((short)Fetchbs()) & 0xFFFF); - switch (which) { - case 0x00:r.word(ADDW(iw,r.word()));break; - case 0x01: r.word(ORW(iw,r.word()));break; - case 0x02:r.word(ADCW(iw,r.word()));break; - case 0x03:r.word(SBBW(iw,r.word()));break; - case 0x04:r.word(ANDW(iw,r.word()));break; - case 0x05:r.word(SUBW(iw,r.word()));break; - case 0x06:r.word(XORW(iw,r.word()));break; - case 0x07:CMPW(iw,r.word());break; - } - } else { - int eaa = m = getEaa(rm); - - /*Bit16u*/int iw=(((short)Fetchbs()) & 0xFFFF); - switch (which) { - case 0x00:Memory.mem_writew(eaa, ADDW(iw,Memory.mem_readw(eaa)));break; - case 0x01: Memory.mem_writew(eaa, ORW(iw,Memory.mem_readw(eaa)));break; - case 0x02:Memory.mem_writew(eaa, ADCW(iw,Memory.mem_readw(eaa)));break; - case 0x03:Memory.mem_writew(eaa, SBBW(iw,Memory.mem_readw(eaa)));break; - case 0x04:Memory.mem_writew(eaa, ANDW(iw,Memory.mem_readw(eaa)));break; - case 0x05:Memory.mem_writew(eaa, SUBW(iw,Memory.mem_readw(eaa)));break; - case 0x06:Memory.mem_writew(eaa, XORW(iw,Memory.mem_readw(eaa)));break; - case 0x07:CMPW(iw,Memory.mem_readw(eaa));break; - } + ops[0x83] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + if (rm>= 0xc0) { + // reading 240 as an unsigned byte will get returned as -16 and when that is cast to unsigned short it becomes 65520 + Reg r = Modrm.GetEArw[rm]; + /*Bit16u*/int iw=(((short)Fetchbs()) & 0xFFFF); + switch (which) { + case 0x00:r.word(ADDW(iw,r.word()));break; + case 0x01: r.word(ORW(iw,r.word()));break; + case 0x02:r.word(ADCW(iw,r.word()));break; + case 0x03:r.word(SBBW(iw,r.word()));break; + case 0x04:r.word(ANDW(iw,r.word()));break; + case 0x05:r.word(SUBW(iw,r.word()));break; + case 0x06:r.word(XORW(iw,r.word()));break; + case 0x07:CMPW(iw,r.word());break; + } + } else { + int eaa = m = getEaa(rm); + + /*Bit16u*/int iw=(((short)Fetchbs()) & 0xFFFF); + switch (which) { + case 0x00:Memory.mem_writew(eaa, ADDW(iw,Memory.mem_readw(eaa)));break; + case 0x01: Memory.mem_writew(eaa, ORW(iw,Memory.mem_readw(eaa)));break; + case 0x02:Memory.mem_writew(eaa, ADCW(iw,Memory.mem_readw(eaa)));break; + case 0x03:Memory.mem_writew(eaa, SBBW(iw,Memory.mem_readw(eaa)));break; + case 0x04:Memory.mem_writew(eaa, ANDW(iw,Memory.mem_readw(eaa)));break; + case 0x05:Memory.mem_writew(eaa, SUBW(iw,Memory.mem_readw(eaa)));break; + case 0x06:Memory.mem_writew(eaa, XORW(iw,Memory.mem_readw(eaa)));break; + case 0x07:CMPW(iw,Memory.mem_readw(eaa));break; } - return HANDLED; } + return HANDLED; }; /* TEST Eb,Gb */ - ops[0x84] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - TESTB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get()); - } - else { - int eaa = getEaa(rm); - TESTB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa)); - } - return HANDLED; + ops[0x84] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + TESTB(Modrm.Getrb[rm].get(),Modrm.GetEArb[rm].get()); + } + else { + int eaa = getEaa(rm); + TESTB(Modrm.Getrb[rm].get(),Memory.mem_readb(eaa)); } + return HANDLED; }; ops[0x284] = ops[0x84]; /* TEST Ew,Gw */ - ops[0x85] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - if (rm >= 0xc0 ) { - TESTW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word()); - } - else { - int eaa = getEaa(rm); - TESTW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa)); - } - return HANDLED; + ops[0x85] = () -> { + /*Bit8u*/final int rm=Fetchb(); + if (rm >= 0xc0 ) { + TESTW(Modrm.Getrw[rm].word(),Modrm.GetEArw[rm].word()); + } + else { + int eaa = getEaa(rm); + TESTW(Modrm.Getrw[rm].word(),Memory.mem_readw(eaa)); } + return HANDLED; }; /* XCHG Eb,Gb */ - ops[0x86] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bit8u*/int oldrmrb=Modrm.Getrb[rm].get(); - if (rm >= 0xc0 ) {Modrm.Getrb[rm].set(Modrm.GetEArb[rm].get());Modrm.GetEArb[rm].set(oldrmrb);} - else { - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readb(eaa); - Memory.mem_writeb(eaa,oldrmrb); - Modrm.Getrb[rm].set(val); - } - return HANDLED; + ops[0x86] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bit8u*/int oldrmrb=Modrm.Getrb[rm].get(); + if (rm >= 0xc0 ) {Modrm.Getrb[rm].set(Modrm.GetEArb[rm].get());Modrm.GetEArb[rm].set(oldrmrb);} + else { + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readb(eaa); + Memory.mem_writeb(eaa,oldrmrb); + Modrm.Getrb[rm].set(val); } + return HANDLED; }; ops[0x286] = ops[0x86]; /* XCHG Ew,Gw */ - ops[0x87] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) { - Reg rw = Modrm.Getrw[rm]; - Reg ea = Modrm.GetEArw[rm]; - /*Bit16u*/int oldrmrw=rw.word(); - rw.word(ea.word());ea.word(oldrmrw); - } else { - /*Bit16u*/int oldrmrw=Modrm.Getrw[rm].word(); - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readw(eaa); - Memory.mem_writew(eaa,oldrmrw); - Modrm.Getrw[rm].word(val); - } - return HANDLED; + ops[0x87] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) { + Reg rw = Modrm.Getrw[rm]; + Reg ea = Modrm.GetEArw[rm]; + /*Bit16u*/int oldrmrw=rw.word(); + rw.word(ea.word());ea.word(oldrmrw); + } else { + /*Bit16u*/int oldrmrw=Modrm.Getrw[rm].word(); + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readw(eaa); + Memory.mem_writew(eaa,oldrmrw); + Modrm.Getrw[rm].word(val); } + return HANDLED; }; /* MOV Eb,Gb */ - ops[0x88] = new OP() { - final public int call() { - int rm = Fetchb(); - if (rm >= 0xc0) { - int value; - switch ((rm >> 3) & 7) { - case 0: value = reg_eax.low(); break; - case 1: value = reg_ecx.low(); break; - case 2: value = reg_edx.low(); break; - case 3: value = reg_ebx.low(); break; - case 4: value = reg_eax.high(); break; - case 5: value = reg_ecx.high(); break; - case 6: value = reg_edx.high(); break; - case 7: value = reg_ebx.high(); break; - default: value = 0; // shouldn't be possible - } - switch (rm & 7) { - case 0: reg_eax.low(value); break; - case 1: reg_ecx.low(value); break; - case 2: reg_edx.low(value); break; - case 3: reg_ebx.low(value); break; - case 4: reg_eax.high(value); break; - case 5: reg_ecx.high(value); break; - case 6: reg_edx.high(value); break; - case 7: reg_ebx.high(value); break; - } - } else { - if (rm == 5) { - if (CPU.cpu.pmode && !CPU.cpu.code.big) { - CPU.cpu.gdt.GetDescriptor(CPU.seg_value(base_val_ds),desc); - if ((desc.Type()==CPU.DESC_CODE_R_NC_A) || (desc.Type()==CPU.DESC_CODE_R_NC_NA)) { - CPU.CPU_Exception(CPU.EXCEPTION_GP,CPU.seg_value(base_val_ds) & 0xfffc); - return CONTINUE; - } + ops[0x88] = () -> { + int rm = Fetchb(); + if (rm >= 0xc0) { + int value; + switch ((rm >> 3) & 7) { + case 0: value = reg_eax.low(); break; + case 1: value = reg_ecx.low(); break; + case 2: value = reg_edx.low(); break; + case 3: value = reg_ebx.low(); break; + case 4: value = reg_eax.high(); break; + case 5: value = reg_ecx.high(); break; + case 6: value = reg_edx.high(); break; + case 7: value = reg_ebx.high(); break; + default: value = 0; // shouldn't be possible + } + switch (rm & 7) { + case 0: reg_eax.low(value); break; + case 1: reg_ecx.low(value); break; + case 2: reg_edx.low(value); break; + case 3: reg_ebx.low(value); break; + case 4: reg_eax.high(value); break; + case 5: reg_ecx.high(value); break; + case 6: reg_edx.high(value); break; + case 7: reg_ebx.high(value); break; + } + } else { + if (rm == 5) { + if (CPU.cpu.pmode && !CPU.cpu.code.big) { + CPU.cpu.gdt.GetDescriptor(CPU.seg_value(base_val_ds),desc); + if ((desc.Type()==CPU.DESC_CODE_R_NC_A) || (desc.Type()==CPU.DESC_CODE_R_NC_NA)) { + CPU.CPU_Exception(CPU.EXCEPTION_GP,CPU.seg_value(base_val_ds) & 0xfffc); + return CONTINUE; } } - int eaa = getEaa(rm); + } + int eaa = getEaa(rm); - switch ((rm >> 3) & 7) { - case 0: Memory.mem_writeb(eaa, reg_eax.low()); break; - case 1: Memory.mem_writeb(eaa, reg_ecx.low()); break; - case 2: Memory.mem_writeb(eaa, reg_edx.low()); break; - case 3: Memory.mem_writeb(eaa, reg_ebx.low()); break; - case 4: Memory.mem_writeb(eaa, reg_eax.high()); break; - case 5: Memory.mem_writeb(eaa, reg_ecx.high()); break; - case 6: Memory.mem_writeb(eaa, reg_edx.high()); break; - case 7: Memory.mem_writeb(eaa, reg_ebx.high()); break; - } + switch ((rm >> 3) & 7) { + case 0: Memory.mem_writeb(eaa, reg_eax.low()); break; + case 1: Memory.mem_writeb(eaa, reg_ecx.low()); break; + case 2: Memory.mem_writeb(eaa, reg_edx.low()); break; + case 3: Memory.mem_writeb(eaa, reg_ebx.low()); break; + case 4: Memory.mem_writeb(eaa, reg_eax.high()); break; + case 5: Memory.mem_writeb(eaa, reg_ecx.high()); break; + case 6: Memory.mem_writeb(eaa, reg_edx.high()); break; + case 7: Memory.mem_writeb(eaa, reg_ebx.high()); break; } - return HANDLED; } + return HANDLED; }; ops[0x288] = ops[0x88]; /* MOV Ew,Gw */ - ops[0x89] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(Modrm.Getrw[rm].word());} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,Modrm.Getrw[rm].word());} - return HANDLED; - } + ops[0x89] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(Modrm.Getrw[rm].word());} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,Modrm.Getrw[rm].word());} + return HANDLED; }; /* MOV Gb,Eb */ - ops[0x8a] = new OP() { - final public int call() { - int rm = Fetchb(); - - if (rm >= 0xc0) { - int value; - switch (rm & 7) { - case 0: value = reg_eax.low(); break; - case 1: value = reg_ecx.low(); break; - case 2: value = reg_edx.low(); break; - case 3: value = reg_ebx.low(); break; - case 4: value = reg_eax.high(); break; - case 5: value = reg_ecx.high(); break; - case 6: value = reg_edx.high(); break; - case 7: value = reg_ebx.high(); break; - default: value = 0; // shouldn't be possible - } - switch ((rm >> 3) & 7) { - case 0: reg_eax.low(value); break; - case 1: reg_ecx.low(value); break; - case 2: reg_edx.low(value); break; - case 3: reg_ebx.low(value); break; - case 4: reg_eax.high(value); break; - case 5: reg_ecx.high(value); break; - case 6: reg_edx.high(value); break; - case 7: reg_ebx.high(value); break; - } - } else { - int eaa = getEaa(rm); - switch ((rm >> 3) & 7) { - case 0: reg_eax.low(Memory.mem_readb(eaa)); break; - case 1: reg_ecx.low(Memory.mem_readb(eaa)); break; - case 2: reg_edx.low(Memory.mem_readb(eaa)); break; - case 3: reg_ebx.low(Memory.mem_readb(eaa)); break; - case 4: reg_eax.high(Memory.mem_readb(eaa)); break; - case 5: reg_ecx.high(Memory.mem_readb(eaa)); break; - case 6: reg_edx.high(Memory.mem_readb(eaa)); break; - case 7: reg_ebx.high(Memory.mem_readb(eaa)); break; - } - } - return HANDLED; - } + ops[0x8a] = () -> { + int rm = Fetchb(); + + if (rm >= 0xc0) { + int value; + switch (rm & 7) { + case 0: value = reg_eax.low(); break; + case 1: value = reg_ecx.low(); break; + case 2: value = reg_edx.low(); break; + case 3: value = reg_ebx.low(); break; + case 4: value = reg_eax.high(); break; + case 5: value = reg_ecx.high(); break; + case 6: value = reg_edx.high(); break; + case 7: value = reg_ebx.high(); break; + default: value = 0; // shouldn't be possible + } + switch ((rm >> 3) & 7) { + case 0: reg_eax.low(value); break; + case 1: reg_ecx.low(value); break; + case 2: reg_edx.low(value); break; + case 3: reg_ebx.low(value); break; + case 4: reg_eax.high(value); break; + case 5: reg_ecx.high(value); break; + case 6: reg_edx.high(value); break; + case 7: reg_ebx.high(value); break; + } + } else { + int eaa = getEaa(rm); + switch ((rm >> 3) & 7) { + case 0: reg_eax.low(Memory.mem_readb(eaa)); break; + case 1: reg_ecx.low(Memory.mem_readb(eaa)); break; + case 2: reg_edx.low(Memory.mem_readb(eaa)); break; + case 3: reg_ebx.low(Memory.mem_readb(eaa)); break; + case 4: reg_eax.high(Memory.mem_readb(eaa)); break; + case 5: reg_ecx.high(Memory.mem_readb(eaa)); break; + case 6: reg_edx.high(Memory.mem_readb(eaa)); break; + case 7: reg_ebx.high(Memory.mem_readb(eaa)); break; + } + } + return HANDLED; }; ops[0x28a] = ops[0x8a]; /* MOV Gw,Ew */ - ops[0x8b] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 )Modrm.Getrw[rm].word(Modrm.GetEArw[rm].word()); - else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word(Memory.mem_readw(eaa));} - return HANDLED; - } + ops[0x8b] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 )Modrm.Getrw[rm].word(Modrm.GetEArw[rm].word()); + else {/*PhysPt*/int eaa=getEaa(rm);Modrm.Getrw[rm].word(Memory.mem_readw(eaa));} + return HANDLED; }; /* Mov Ew,Sw */ - ops[0x8c] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bit16u*/int val;/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* MOV Ew,ES */ - val=CPU_Regs.reg_esVal.dword;break; - case 0x01: /* MOV Ew,CS */ - val=CPU_Regs.reg_csVal.dword;break; - case 0x02: /* MOV Ew,SS */ - val=CPU_Regs.reg_ssVal.dword;break; - case 0x03: /* MOV Ew,DS */ - val=CPU_Regs.reg_dsVal.dword;break; - case 0x04: /* MOV Ew,FS */ - val=CPU_Regs.reg_fsVal.dword;break; - case 0x05: /* MOV Ew,GS */ - val=CPU_Regs.reg_gsVal.dword;break; - default: - Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"CPU:8c:Illegal RM Byte"); - return ILLEGAL_OPCODE; - } - if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(val);} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,val);} - return HANDLED; - } + ops[0x8c] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bit16u*/int val;/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* MOV Ew,ES */ + val=CPU_Regs.reg_esVal.dword;break; + case 0x01: /* MOV Ew,CS */ + val=CPU_Regs.reg_csVal.dword;break; + case 0x02: /* MOV Ew,SS */ + val=CPU_Regs.reg_ssVal.dword;break; + case 0x03: /* MOV Ew,DS */ + val=CPU_Regs.reg_dsVal.dword;break; + case 0x04: /* MOV Ew,FS */ + val=CPU_Regs.reg_fsVal.dword;break; + case 0x05: /* MOV Ew,GS */ + val=CPU_Regs.reg_gsVal.dword;break; + default: + Log.log(LogTypes.LOG_CPU, LogSeverities.LOG_ERROR,"CPU:8c:Illegal RM Byte"); + return ILLEGAL_OPCODE; + } + if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(val);} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,val);} + return HANDLED; }; /* LEA Gw */ - ops[0x8d] = new OP() { - final public int call() { - //Little hack to always use segprefixed version - base_ds=base_ss=0; - /*Bit8u*/int rm=Fetchb(); - if (TEST_PREFIX_ADDR()!=0) { - Modrm.Getrw[rm].word((/*Bit16u*/int)(getEaa32(rm))); - } else { - Modrm.Getrw[rm].word((/*Bit16u*/int)(getEaa16(rm))); - } - return HANDLED; + ops[0x8d] = () -> { + //Little hack to always use segprefixed version + base_ds=base_ss=0; + /*Bit8u*/int rm=Fetchb(); + if (TEST_PREFIX_ADDR()!=0) { + /*Bit16u*/ + Modrm.Getrw[rm].word(getEaa32(rm)); + } else { + /*Bit16u*/ + Modrm.Getrw[rm].word(getEaa16(rm)); } + return HANDLED; }; /* MOV Sw,Ew */ - ops[0x8e] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bit16u*/int val;/*Bitu*/int which=(rm>>3)&7; - if (rm >= 0xc0 ) {val=Modrm.GetEArw[rm].word();} - else {/*PhysPt*/int eaa=getEaa(rm);val=Memory.mem_readw(eaa);} - switch (which) { - case 0x02: /* MOV SS,Ew */ - CPU.CPU_Cycles++; //Always do another instruction - case 0x00: /* MOV ES,Ew */ - case 0x03: /* MOV DS,Ew */ - case 0x05: /* MOV GS,Ew */ - case 0x04: /* MOV FS,Ew */ - if (CPU.CPU_SetSegGeneral_index(which,val)) return RUNEXCEPTION(); - break; - default: - return ILLEGAL_OPCODE; - } - return HANDLED; + ops[0x8e] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bit16u*/int val;/*Bitu*/int which=(rm>>3)&7; + if (rm >= 0xc0 ) {val=Modrm.GetEArw[rm].word();} + else {/*PhysPt*/int eaa=getEaa(rm);val=Memory.mem_readw(eaa);} + switch (which) { + case 0x02: /* MOV SS,Ew */ + CPU.CPU_Cycles++; //Always do another instruction + case 0x00: /* MOV ES,Ew */ + case 0x03: /* MOV DS,Ew */ + case 0x05: /* MOV GS,Ew */ + case 0x04: /* MOV FS,Ew */ + if (CPU.CPU_SetSegGeneral_index(which,val)) return RUNEXCEPTION(); + break; + default: + return ILLEGAL_OPCODE; } + return HANDLED; }; ops[0x28e] = ops[0x8e]; /* POP Ew */ - ops[0x8f] = new OP() { - final public int call() { - /*Bit16u*/int val=CPU.CPU_Pop16(); - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(val);} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,val);} - return HANDLED; - } + ops[0x8f] = () -> { + /*Bit16u*/int val=CPU.CPU_Pop16(); + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(val);} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,val);} + return HANDLED; }; /* NOP */ - ops[0x90] = new OP() { - final public int call() { - return HANDLED; - } - }; + ops[0x90] = () -> HANDLED; ops[0x290] = ops[0x90]; /* XCHG CX,AX */ - ops[0x91] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_ecx.word());reg_ecx.word(temp); - return HANDLED; - } + ops[0x91] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_ecx.word());reg_ecx.word(temp); + return HANDLED; }; /* XCHG DX,AX */ - ops[0x92] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_edx.word());reg_edx.word(temp); - return HANDLED; - } + ops[0x92] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_edx.word());reg_edx.word(temp); + return HANDLED; }; /* XCHG BX,AX */ - ops[0x93] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_ebx.word());reg_ebx.word(temp); - return HANDLED; - } + ops[0x93] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_ebx.word());reg_ebx.word(temp); + return HANDLED; }; /* XCHG SP,AX */ - ops[0x94] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_esp.word());reg_esp.word(temp); - return HANDLED; - } + ops[0x94] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_esp.word());reg_esp.word(temp); + return HANDLED; }; /* XCHG BP,AX */ - ops[0x95] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_ebp.word());reg_ebp.word(temp); - return HANDLED; - } + ops[0x95] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_ebp.word());reg_ebp.word(temp); + return HANDLED; }; /* XCHG SI,AX */ - ops[0x96] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_esi.word());reg_esi.word(temp); - return HANDLED; - } + ops[0x96] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_esi.word());reg_esi.word(temp); + return HANDLED; }; /* XCHG DI,AX */ - ops[0x97] = new OP() { - final public int call() { - /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_edi.word());reg_edi.word(temp); - return HANDLED; - } + ops[0x97] = () -> { + /*Bit16u*/int temp=reg_eax.word();reg_eax.word(reg_edi.word());reg_edi.word(temp); + return HANDLED; }; /* CBW */ - ops[0x98] = new OP() { - final public int call() { - reg_eax.word((byte)reg_eax.low()); - return HANDLED; - } + ops[0x98] = () -> { + reg_eax.word((byte)reg_eax.low()); + return HANDLED; }; /* CWD */ - ops[0x99] = new OP() { - final public int call() { - if ((reg_eax.word() & 0x8000)!=0) reg_edx.word(0xffff);else reg_edx.word(0); - return HANDLED; - } + ops[0x99] = () -> { + if ((reg_eax.word() & 0x8000)!=0) reg_edx.word(0xffff);else reg_edx.word(0); + return HANDLED; }; /* CALL Ap */ - ops[0x9a] = new OP() { - final public int call() { - Flags.FillFlags(); - /*Bit16u*/int newip=Fetchw();/*Bit16u*/int newcs=Fetchw(); - CPU.CPU_CALL(false,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) { - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } + ops[0x9a] = () -> { + Flags.FillFlags(); + /*Bit16u*/int newip=Fetchw();/*Bit16u*/int newcs=Fetchw(); + CPU.CPU_CALL(false,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) { + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; } - return CONTINUE; } + return CONTINUE; }; /* WAIT */ - ops[0x9b] = new OP() { - final public int call() { - /* No waiting here */ - return HANDLED; - } + ops[0x9b] = () -> { + /* No waiting here */ + return HANDLED; }; ops[0x29b] = ops[0x9b]; /* PUSHF */ - ops[0x9c] = new OP() { - final public int call() { - if (CPU.CPU_PUSHF(false)) return RUNEXCEPTION(); - return HANDLED; - } + ops[0x9c] = () -> { + if (CPU.CPU_PUSHF(false)) return RUNEXCEPTION(); + return HANDLED; }; /* POPF */ - ops[0x9d] = new OP() { - final public int call() { - if (CPU.CPU_POPF(false)) return RUNEXCEPTION(); - if (CPU_TRAP_CHECK) { - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return DECODE_END; - } - } - if (CPU_PIC_CHECK) - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return DECODE_END; - return HANDLED; + ops[0x9d] = () -> { + if (CPU.CPU_POPF(false)) return RUNEXCEPTION(); + if (CPU_TRAP_CHECK) { + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return DECODE_END; + } } + if (CPU_PIC_CHECK) + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return DECODE_END; + return HANDLED; }; /* SAHF */ - ops[0x9e] = new OP() { - final public int call() { - Flags.SETFLAGSb(reg_eax.high()); - return HANDLED; - } + ops[0x9e] = () -> { + Flags.SETFLAGSb(reg_eax.high()); + return HANDLED; }; ops[0x29e] = ops[0x9e]; /* LAHF */ - ops[0x9f] = new OP() { - final public int call() { - Flags.FillFlags(); - reg_eax.high(CPU_Regs.flags&0xff); - return HANDLED; - } + ops[0x9f] = () -> { + Flags.FillFlags(); + reg_eax.high(CPU_Regs.flags&0xff); + return HANDLED; }; ops[0x29f] = ops[0x9f]; /* MOV AL,Ob */ - ops[0xa0] = new OP() { - final public int call() { - reg_eax.low(Memory.mem_readb(GetEADirect())); - return HANDLED; - } + ops[0xa0] = () -> { + reg_eax.low(Memory.mem_readb(GetEADirect())); + return HANDLED; }; ops[0x2a0] = ops[0xa0]; /* MOV AX,Ow */ - ops[0xa1] = new OP() { - final public int call() { - reg_eax.word(Memory.mem_readw(GetEADirect())); - return HANDLED; - } + ops[0xa1] = () -> { + reg_eax.word(Memory.mem_readw(GetEADirect())); + return HANDLED; }; /* MOV Ob,AL */ - ops[0xa2] = new OP() { - final public int call() { - Memory.mem_writeb(GetEADirect(),reg_eax.low()); - return HANDLED; - } + ops[0xa2] = () -> { + Memory.mem_writeb(GetEADirect(),reg_eax.low()); + return HANDLED; }; ops[0x2a2] = ops[0xa2]; /* MOV Ow,AX */ - ops[0xa3] = new OP() { - final public int call() { - Memory.mem_writew(GetEADirect(),reg_eax.word()); - return HANDLED; - } + ops[0xa3] = () -> { + Memory.mem_writew(GetEADirect(),reg_eax.word()); + return HANDLED; }; /* MOVSB */ - ops[0xa4] = new OP() { - final public int call() { - DoString(R_MOVSB); - return HANDLED; - } + ops[0xa4] = () -> { + DoString(R_MOVSB); + return HANDLED; }; ops[0x2a4] = ops[0xa4]; /* MOVSW */ - ops[0xa5] = new OP() { - final public int call() { - DoString(R_MOVSW); - return HANDLED; - } + ops[0xa5] = () -> { + DoString(R_MOVSW); + return HANDLED; }; /* CMPSB */ - ops[0xa6] = new OP() { - final public int call() { - DoString(R_CMPSB); - return HANDLED; - } + ops[0xa6] = () -> { + DoString(R_CMPSB); + return HANDLED; }; ops[0x2a6] = ops[0xa6]; /* CMPSW */ - ops[0xa7] = new OP() { - final public int call() { - DoString(R_CMPSW); - return HANDLED; - } + ops[0xa7] = () -> { + DoString(R_CMPSW); + return HANDLED; }; /* TEST AL,Ib */ - ops[0xa8] = new OP() { - final public int call() { - TESTB(Fetchb(),reg_eax.low()); - return HANDLED; - } + ops[0xa8] = () -> { + TESTB(Fetchb(),reg_eax.low()); + return HANDLED; }; ops[0x2a8] = ops[0xa8]; /* TEST AX,Iw */ - ops[0xa9] = new OP() { - final public int call() { - TESTW(Fetchw(),reg_eax.word()); - return HANDLED; - } + ops[0xa9] = () -> { + TESTW(Fetchw(),reg_eax.word()); + return HANDLED; }; /* STOSB */ - ops[0xaa] = new OP() { - final public int call() { - DoString(R_STOSB); - return HANDLED; - } + ops[0xaa] = () -> { + DoString(R_STOSB); + return HANDLED; }; ops[0x2aa] = ops[0xaa]; /* STOSW */ - ops[0xab] = new OP() { - final public int call() { - DoString(R_STOSW); - return HANDLED; - } + ops[0xab] = () -> { + DoString(R_STOSW); + return HANDLED; }; /* LODSB */ - ops[0xac] = new OP() { - final public int call() { - DoString(R_LODSB); - return HANDLED; - } + ops[0xac] = () -> { + DoString(R_LODSB); + return HANDLED; }; ops[0x2ac] = ops[0xac]; /* LODSW */ - ops[0xad] = new OP() { - final public int call() { - DoString(R_LODSW); - return HANDLED; - } + ops[0xad] = () -> { + DoString(R_LODSW); + return HANDLED; }; /* SCASB */ - ops[0xae] = new OP() { - final public int call() { - DoString(R_SCASB); - return HANDLED; - } + ops[0xae] = () -> { + DoString(R_SCASB); + return HANDLED; }; ops[0x2ae] = ops[0xae]; /* SCASW */ - ops[0xaf] = new OP() { - final public int call() { - DoString(R_SCASW); - return HANDLED; - } + ops[0xaf] = () -> { + DoString(R_SCASW); + return HANDLED; }; /* MOV AL,Ib */ - ops[0xb0] = new OP() { - final public int call() { - reg_eax.low(Fetchb()); - return HANDLED; - } + ops[0xb0] = () -> { + reg_eax.low(Fetchb()); + return HANDLED; }; ops[0x2b0] = ops[0xb0]; /* MOV CL,Ib */ - ops[0xb1] = new OP() { - final public int call() { - reg_ecx.low(Fetchb()); - return HANDLED; - } + ops[0xb1] = () -> { + reg_ecx.low(Fetchb()); + return HANDLED; }; ops[0x2b1] = ops[0xb1]; /* MOV DL,Ib */ - ops[0xb2] = new OP() { - final public int call() { - reg_edx.low(Fetchb()); - return HANDLED; - } + ops[0xb2] = () -> { + reg_edx.low(Fetchb()); + return HANDLED; }; ops[0x2b2] = ops[0xb2]; /* MOV BL,Ib */ - ops[0xb3] = new OP() { - final public int call() { - reg_ebx.low(Fetchb()); - return HANDLED; - } + ops[0xb3] = () -> { + reg_ebx.low(Fetchb()); + return HANDLED; }; ops[0x2b3] = ops[0xb3]; /* MOV AH,Ib */ - ops[0xb4] = new OP() { - final public int call() { - reg_eax.high(Fetchb()); - return HANDLED; - } + ops[0xb4] = () -> { + reg_eax.high(Fetchb()); + return HANDLED; }; ops[0x2b4] = ops[0xb4]; /* MOV CH,Ib */ - ops[0xb5] = new OP() { - final public int call() { - reg_ecx.high(Fetchb()); - return HANDLED; - } + ops[0xb5] = () -> { + reg_ecx.high(Fetchb()); + return HANDLED; }; ops[0x2b5] = ops[0xb5]; /* MOV DH,Ib */ - ops[0xb6] = new OP() { - final public int call() { - reg_edx.high(Fetchb()); - return HANDLED; - } + ops[0xb6] = () -> { + reg_edx.high(Fetchb()); + return HANDLED; }; ops[0x2b6] = ops[0xb6]; /* MOV BH,Ib */ - ops[0xb7] = new OP() { - final public int call() { - reg_ebx.high(Fetchb()); - return HANDLED; - } + ops[0xb7] = () -> { + reg_ebx.high(Fetchb()); + return HANDLED; }; ops[0x2b7] = ops[0xb7]; /* MOV AX,Iw */ - ops[0xb8] = new OP() { - final public int call() { - reg_eax.word(Fetchw()); - return HANDLED; - } + ops[0xb8] = () -> { + reg_eax.word(Fetchw()); + return HANDLED; }; /* MOV CX,Iw */ - ops[0xb9] = new OP() { - final public int call() { - reg_ecx.word(Fetchw()); - return HANDLED; - } + ops[0xb9] = () -> { + reg_ecx.word(Fetchw()); + return HANDLED; }; /* MOV DX,Iw */ - ops[0xba] = new OP() { - final public int call() { - reg_edx.word(Fetchw()); - return HANDLED; - } + ops[0xba] = () -> { + reg_edx.word(Fetchw()); + return HANDLED; }; /* MOV BX,Iw */ - ops[0xbb] = new OP() { - final public int call() { - reg_ebx.word(Fetchw()); - return HANDLED; - } + ops[0xbb] = () -> { + reg_ebx.word(Fetchw()); + return HANDLED; }; /* MOV SP,Iw */ - ops[0xbc] = new OP() { - final public int call() { - reg_esp.word(Fetchw()); - return HANDLED; - } + ops[0xbc] = () -> { + reg_esp.word(Fetchw()); + return HANDLED; }; /* MOV BP.Iw */ - ops[0xbd] = new OP() { - final public int call() { - reg_ebp.word(Fetchw()); - return HANDLED; - } + ops[0xbd] = () -> { + reg_ebp.word(Fetchw()); + return HANDLED; }; /* MOV SI,Iw */ - ops[0xbe] = new OP() { - final public int call() { - reg_esi.word(Fetchw()); - return HANDLED; - } + ops[0xbe] = () -> { + reg_esi.word(Fetchw()); + return HANDLED; }; /* MOV DI,Iw */ - ops[0xbf] = new OP() { - final public int call() { - reg_edi.word(Fetchw()); - return HANDLED; - } + ops[0xbf] = () -> { + reg_edi.word(Fetchw()); + return HANDLED; }; /* GRP2 Eb,Ib */ - ops[0xc0] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2B_fetchb(rm); - return HANDLED; - } + ops[0xc0] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2B_fetchb(rm); + return HANDLED; }; ops[0x2c0] = ops[0xc0]; /* GRP2 Ew,Ib */ - ops[0xc1] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2W_fetchb(rm); - return HANDLED; - } + ops[0xc1] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2W_fetchb(rm); + return HANDLED; }; /* RETN Iw */ - ops[0xc2] = new OP() { - final public int call() { - int offset = Fetchw(); - reg_eip=CPU.CPU_Pop16(); - reg_esp.dword+=offset; - return CONTINUE; - } + ops[0xc2] = () -> { + int offset = Fetchw(); + reg_eip=CPU.CPU_Pop16(); + reg_esp.dword+=offset; + return CONTINUE; }; /* RETN */ - ops[0xc3] = new OP() { - final public int call() { - reg_eip=CPU.CPU_Pop16(); - return CONTINUE; - } + ops[0xc3] = () -> { + reg_eip=CPU.CPU_Pop16(); + return CONTINUE; }; /* LES */ - ops[0xc4] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readw(eaa); // make sure all reads are done before writing something in case of a PF - if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); - Modrm.Getrw[rm].word(val); - return HANDLED; - } + ops[0xc4] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readw(eaa); // make sure all reads are done before writing something in case of a PF + if (CPU.CPU_SetSegGeneralES(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); + Modrm.Getrw[rm].word(val); + return HANDLED; }; /* LDS */ - ops[0xc5] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - int val = Memory.mem_readw(eaa); // make sure all reads are done before writing something in case of a PF - if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); - Modrm.Getrw[rm].word(val); - return HANDLED; - } + ops[0xc5] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + int val = Memory.mem_readw(eaa); // make sure all reads are done before writing something in case of a PF + if (CPU.CPU_SetSegGeneralDS(Memory.mem_readw(eaa+2))) return RUNEXCEPTION(); + Modrm.Getrw[rm].word(val); + return HANDLED; }; /* MOV Eb,Ib */ - ops[0xc6] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) {Modrm.GetEArb[rm].set(Fetchb());} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writeb(eaa,Fetchb());} - return HANDLED; - } + ops[0xc6] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) {Modrm.GetEArb[rm].set(Fetchb());} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writeb(eaa,Fetchb());} + return HANDLED; }; ops[0x2c6] = ops[0xc6]; /* MOV EW,Iw */ - ops[0xc7] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) {Modrm.GetEArw[rm].word(Fetchw());} - else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,Fetchw());} - return HANDLED; - } + ops[0xc7] = () -> { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) {Modrm.GetEArw[rm].word(Fetchw());} + else {/*PhysPt*/int eaa=getEaa(rm);Memory.mem_writew(eaa,Fetchw());} + return HANDLED; }; /* ENTER Iw,Ib */ - ops[0xc8] = new OP() { - final public int call() { - /*Bitu*/int bytes=Fetchw(); - /*Bitu*/int level=Fetchb(); - CPU.CPU_ENTER(false,bytes,level); - return HANDLED; - } + ops[0xc8] = () -> { + /*Bitu*/int bytes=Fetchw(); + /*Bitu*/int level=Fetchb(); + CPU.CPU_ENTER(false,bytes,level); + return HANDLED; }; /* LEAVE */ - ops[0xc9] = new OP() { - final public int call() { - reg_esp.dword&=CPU.cpu.stack.notmask; - reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask); - reg_ebp.word(CPU.CPU_Pop16()); - return HANDLED; - } + ops[0xc9] = () -> { + reg_esp.dword&=CPU.cpu.stack.notmask; + reg_esp.dword|=(reg_ebp.dword & CPU.cpu.stack.mask); + reg_ebp.word(CPU.CPU_Pop16()); + return HANDLED; }; /* RETF Iw */ - ops[0xca] = new OP() { - final public int call() { - /*Bitu*/int words=Fetchw(); - Flags.FillFlags(); - CPU.CPU_RET(false,words,GETIP()); - return CONTINUE; - } + ops[0xca] = () -> { + /*Bitu*/int words=Fetchw(); + Flags.FillFlags(); + CPU.CPU_RET(false,words,GETIP()); + return CONTINUE; }; /* RETF */ - ops[0xcb] = new OP() { - final public int call() { - Flags.FillFlags(); - CPU.CPU_RET(false,0,GETIP()); - return CONTINUE; - } + ops[0xcb] = () -> { + Flags.FillFlags(); + CPU.CPU_RET(false,0,GETIP()); + return CONTINUE; }; /* INT3 */ - ops[0xcc] = new OP() { - final public int call() { - if (Config.C_DEBUG) { - Flags.FillFlags(); - if (Debug.DEBUG_Breakpoint()) - return Debug.debugCallback; - } - CPU.CPU_SW_Interrupt_NoIOPLCheck(3,GETIP()); - if (CPU_TRAP_CHECK) - CPU.cpu.trap_skip=true; - return CONTINUE; + ops[0xcc] = () -> { + if (Config.C_DEBUG) { + Flags.FillFlags(); + if (Debug.DEBUG_Breakpoint()) + return Debug.debugCallback; } + CPU.CPU_SW_Interrupt_NoIOPLCheck(3,GETIP()); + if (CPU_TRAP_CHECK) + CPU.cpu.trap_skip=true; + return CONTINUE; }; ops[0x2cc] = ops[0xcc]; /* INT Ib */ - ops[0xcd] = new OP() { - final public int call() { - /*Bit8u*/int num=Fetchb(); - if (Config.C_DEBUG) { - Flags.FillFlags(); - if (Debug.DEBUG_IntBreakpoint(num)) { - returnValue = Debug.debugCallback; - return RETURN; - } + ops[0xcd] = () -> { + /*Bit8u*/int num=Fetchb(); + if (Config.C_DEBUG) { + Flags.FillFlags(); + if (Debug.DEBUG_IntBreakpoint(num)) { + returnValue = Debug.debugCallback; + return RETURN; } - CPU.CPU_SW_Interrupt(num,GETIP()); - if (CPU_TRAP_CHECK) - CPU.cpu.trap_skip=true; - return CONTINUE; } + CPU.CPU_SW_Interrupt(num,GETIP()); + if (CPU_TRAP_CHECK) + CPU.cpu.trap_skip=true; + return CONTINUE; }; ops[0x2cd] = ops[0xcd]; /* INTO */ - ops[0xce] = new OP() { - final public int call() { - if (Flags.get_OF()) { - CPU.CPU_SW_Interrupt(4,GETIP()); - if (CPU_TRAP_CHECK) - CPU.cpu.trap_skip=true; - return CONTINUE; - } - return HANDLED; + ops[0xce] = () -> { + if (Flags.get_OF()) { + CPU.CPU_SW_Interrupt(4,GETIP()); + if (CPU_TRAP_CHECK) + CPU.cpu.trap_skip=true; + return CONTINUE; } + return HANDLED; }; ops[0x2ce] = ops[0xce]; /* IRET */ - ops[0xcf] = new OP() { - final public int call() { - CPU.CPU_IRET(false,GETIP()); - if (CPU_TRAP_CHECK) { - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } + ops[0xcf] = () -> { + CPU.CPU_IRET(false,GETIP()); + if (CPU_TRAP_CHECK) { + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; } - if (CPU_PIC_CHECK) - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return CBRET_NONE; - return CONTINUE; } + if (CPU_PIC_CHECK) + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return CBRET_NONE; + return CONTINUE; }; /* GRP2 Eb,1 */ - ops[0xd0] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2B(rm,1); - return HANDLED; - } + ops[0xd0] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2B(rm,1); + return HANDLED; }; ops[0x2d0] = ops[0xd0]; /* GRP2 Ew,1 */ - ops[0xd1] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2W(rm, 1); - return HANDLED; - } + ops[0xd1] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2W(rm, 1); + return HANDLED; }; /* GRP2 Eb,CL */ - ops[0xd2] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2B(rm, reg_ecx.low()); - return HANDLED; - } + ops[0xd2] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2B(rm, reg_ecx.low()); + return HANDLED; }; ops[0x2d2] = ops[0xd2]; /* GRP2 Ew,CL */ - ops[0xd3] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb(); - GRP2W(rm, reg_ecx.low()); - return HANDLED; - } + ops[0xd3] = () -> { + /*Bit8u*/final int rm=Fetchb(); + GRP2W(rm, reg_ecx.low()); + return HANDLED; }; /* AAM Ib */ - ops[0xd4] = new OP() { - final public int call() { - if (!Instructions.AAM(Fetchb())) return RUNEXCEPTION(); - return HANDLED; - } - }; + ops[0xd4] = () -> { + if (Instructions.AAM(Fetchb())) return RUNEXCEPTION(); + return HANDLED; + }; ops[0x2d4] = ops[0xd4]; /* AAD Ib */ - ops[0xd5] = new OP() { - final public int call() { - Instructions.AAD(Fetchb()); - return HANDLED; - } + ops[0xd5] = () -> { + Instructions.AAD(Fetchb()); + return HANDLED; }; ops[0x2d5] = ops[0xd5]; /* SALC */ - ops[0xd6] = new OP() { - final public int call() { - reg_eax.low(Flags.get_CF() ? 0xFF : 0); - return HANDLED; - } + ops[0xd6] = () -> { + reg_eax.low(Flags.get_CF() ? 0xFF : 0); + return HANDLED; }; ops[0x2d6] = ops[0xd6]; /* XLAT */ - ops[0xd7] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - reg_eax.low(Memory.mem_readb(base_ds+(reg_ebx.dword+reg_eax.low()))); - } else { - reg_eax.low(Memory.mem_readb(base_ds+((reg_ebx.word()+reg_eax.low()) & 0xFFFF))); - } - return HANDLED; + ops[0xd7] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + reg_eax.low(Memory.mem_readb(base_ds+(reg_ebx.dword+reg_eax.low()))); + } else { + reg_eax.low(Memory.mem_readb(base_ds+((reg_ebx.word()+reg_eax.low()) & 0xFFFF))); } + return HANDLED; }; ops[0x2d7] = ops[0xd7]; /* FPU ESC 0 */ - ops[0xd8] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC0_Normal(rm); - } else { - FPU.FPU_ESC0_EA(rm,getEaa(rm)); - } + ops[0xd8] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC0_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC0_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2d8] = ops[0xd8]; /* FPU ESC 1 */ - ops[0xd9] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC1_Normal(rm); - } else { - FPU.FPU_ESC1_EA(rm,getEaa(rm)); - } + ops[0xd9] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC1_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC1_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2d9] = ops[0xd9]; /* FPU ESC 2 */ - ops[0xda] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC2_Normal(rm); - } else { - FPU.FPU_ESC2_EA(rm,getEaa(rm)); - } + ops[0xda] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC2_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC2_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2da] = ops[0xda]; /* FPU ESC 3 */ - ops[0xdb] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC3_Normal(rm); - } else { - FPU.FPU_ESC3_EA(rm,getEaa(rm)); - } + ops[0xdb] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC3_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC3_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2db] = ops[0xdb]; /* FPU ESC 4 */ - ops[0xdc] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC4_Normal(rm); - } else { - FPU.FPU_ESC4_EA(rm,getEaa(rm)); - } + ops[0xdc] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC4_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC4_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2dc] = ops[0xdc]; /* FPU ESC 5 */ - ops[0xdd] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC5_Normal(rm); - } else { - FPU.FPU_ESC5_EA(rm,getEaa(rm)); - } + ops[0xdd] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC5_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC5_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2dd] = ops[0xdd]; /* FPU ESC 6 */ - ops[0xde] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC6_Normal(rm); - } else { - FPU.FPU_ESC6_EA(rm,getEaa(rm)); - } + ops[0xde] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC6_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC6_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2de] = ops[0xde]; /* FPU ESC 7 */ - ops[0xdf] = new OP() { - final public int call() { - if (Config.C_FPU) - { - /*Bit8u*/int rm=Fetchb(); - if (rm >= 0xc0) { - FPU.FPU_ESC7_Normal(rm); - } else { - FPU.FPU_ESC7_EA(rm,getEaa(rm)); - } + ops[0xdf] = () -> { + if (Config.C_FPU) + { + /*Bit8u*/int rm=Fetchb(); + if (rm >= 0xc0) { + FPU.FPU_ESC7_Normal(rm); } else { - /*Bit8u*/int rm=Fetchb(); - Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); - if (rm<0xc0) getEaa(rm); - return NOT_HANDLED; + FPU.FPU_ESC7_EA(rm,getEaa(rm)); } - return HANDLED; + } else { + /*Bit8u*/int rm=Fetchb(); + Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"FPU used"); + if (rm<0xc0) getEaa(rm); + return NOT_HANDLED; } + return HANDLED; }; ops[0x2df] = ops[0xdf]; /* LOOPNZ */ - ops[0xe0] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - JumpCond16_b(reg_ecx.dword-1!=0 && !Flags.get_ZF()); - reg_ecx.dword--; - } else { - JumpCond16_b(reg_ecx.word()-1!=0 && !Flags.get_ZF()); - reg_ecx.word(reg_ecx.word()-1); - } - return CONTINUE; + ops[0xe0] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + JumpCond16_b(reg_ecx.dword-1!=0 && !Flags.get_ZF()); + reg_ecx.dword--; + } else { + JumpCond16_b(reg_ecx.word()-1!=0 && !Flags.get_ZF()); + reg_ecx.word(reg_ecx.word()-1); } + return CONTINUE; }; /* LOOPZ */ - ops[0xe1] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - JumpCond16_b(reg_ecx.dword-1!=0 && Flags.get_ZF()); - reg_ecx.dword--; - } else { - JumpCond16_b(reg_ecx.word()-1!=0 && Flags.get_ZF()); - reg_ecx.word(reg_ecx.word()-1); - } - return CONTINUE; + ops[0xe1] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + JumpCond16_b(reg_ecx.dword-1!=0 && Flags.get_ZF()); + reg_ecx.dword--; + } else { + JumpCond16_b(reg_ecx.word()-1!=0 && Flags.get_ZF()); + reg_ecx.word(reg_ecx.word()-1); } + return CONTINUE; }; /* LOOP */ - ops[0xe2] = new OP() { - final public int call() { - if (TEST_PREFIX_ADDR()!=0) { - JumpCond16_b(reg_ecx.dword-1!=0); - reg_ecx.dword--; - } else { - JumpCond16_b(reg_ecx.word()-1!=0); - reg_ecx.word(reg_ecx.word()-1); - } - return CONTINUE; + ops[0xe2] = () -> { + if (TEST_PREFIX_ADDR()!=0) { + JumpCond16_b(reg_ecx.dword-1!=0); + reg_ecx.dword--; + } else { + JumpCond16_b(reg_ecx.word()-1!=0); + reg_ecx.word(reg_ecx.word()-1); } + return CONTINUE; }; /* JCXZ */ - ops[0xe3] = new OP() { - final public int call() { - JumpCond16_b((reg_ecx.dword & AddrMaskTable1[prefixes& PREFIX_ADDR])==0); - return CONTINUE; - } + ops[0xe3] = () -> { + JumpCond16_b((reg_ecx.dword & AddrMaskTable1[prefixes& PREFIX_ADDR])==0); + return CONTINUE; }; /* IN AL,Ib */ - ops[0xe4] = new OP() { - final public int call() { - /*Bitu*/int port=Fetchb(); - if (CPU.CPU_IO_Exception(port,1)) return RUNEXCEPTION(); - reg_eax.low(IO.IO_ReadB(port)); - return HANDLED; - } + ops[0xe4] = () -> { + /*Bitu*/int port=Fetchb(); + if (CPU.CPU_IO_Exception(port,1)) return RUNEXCEPTION(); + reg_eax.low(IO.IO_ReadB(port)); + return HANDLED; }; ops[0x2e4] = ops[0xe4]; /* IN AX,Ib */ - ops[0xe5] = new OP() { - final public int call() { - /*Bitu*/int port=Fetchb(); - if (CPU.CPU_IO_Exception(port,2)) return RUNEXCEPTION(); - reg_eax.word(IO.IO_ReadW(port)); - return HANDLED; - } + ops[0xe5] = () -> { + /*Bitu*/int port=Fetchb(); + if (CPU.CPU_IO_Exception(port,2)) return RUNEXCEPTION(); + reg_eax.word(IO.IO_ReadW(port)); + return HANDLED; }; /* OUT Ib,AL */ - ops[0xe6] = new OP() { - final public int call() { - /*Bitu*/int port=Fetchb(); - if (CPU.CPU_IO_Exception(port,1)) return RUNEXCEPTION(); - IO.IO_WriteB(port,reg_eax.low()); - return HANDLED; - } + ops[0xe6] = () -> { + /*Bitu*/int port=Fetchb(); + if (CPU.CPU_IO_Exception(port,1)) return RUNEXCEPTION(); + IO.IO_WriteB(port,reg_eax.low()); + return HANDLED; }; ops[0x2e6] = ops[0xe6]; /* OUT Ib,AX */ - ops[0xe7] = new OP() { - final public int call() { - /*Bitu*/int port=Fetchb(); - if (CPU.CPU_IO_Exception(port,2)) return RUNEXCEPTION(); - IO.IO_WriteW(port,reg_eax.word()); - return HANDLED; - } + ops[0xe7] = () -> { + /*Bitu*/int port=Fetchb(); + if (CPU.CPU_IO_Exception(port,2)) return RUNEXCEPTION(); + IO.IO_WriteW(port,reg_eax.word()); + return HANDLED; }; /* CALL Jw */ - ops[0xe8] = new OP() { - final public int call() { - /*Bit16u*/int addip=Fetchws(); - CPU.CPU_Push16(GETIP() & 0xFFFF); - SAVEIP(); - reg_eip=(reg_eip+addip) & 0xFFFF; - return CONTINUE; - } + ops[0xe8] = () -> { + /*Bit16u*/int addip=Fetchws(); + CPU.CPU_Push16(GETIP() & 0xFFFF); + SAVEIP(); + reg_eip=(reg_eip+addip) & 0xFFFF; + return CONTINUE; }; /* JMP Jw */ - ops[0xe9] = new OP() { - final public int call() { - /*Bit16u*/int addip=Fetchws(); - SAVEIP(); - reg_eip=(reg_eip+addip) & 0xFFFF; - return CONTINUE; - } + ops[0xe9] = () -> { + /*Bit16u*/int addip=Fetchws(); + SAVEIP(); + reg_eip=(reg_eip+addip) & 0xFFFF; + return CONTINUE; }; /* JMP Ap */ - ops[0xea] = new OP() { - final public int call() { - /*Bit16u*/int newip=Fetchw(); - /*Bit16u*/int newcs=Fetchw(); - Flags.FillFlags(); - CPU.CPU_JMP(false,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) { - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } + ops[0xea] = () -> { + /*Bit16u*/int newip=Fetchw(); + /*Bit16u*/int newcs=Fetchw(); + Flags.FillFlags(); + CPU.CPU_JMP(false,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) { + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; } - return CONTINUE; } + return CONTINUE; }; /* JMP Jb */ - ops[0xeb] = new OP() { - final public int call() { - /*Bit16s*/int addip=Fetchbs(); - SAVEIP(); - reg_eip=(reg_eip+addip) & 0xFFFF; - return CONTINUE; - } + ops[0xeb] = () -> { + /*Bit16s*/int addip=Fetchbs(); + SAVEIP(); + reg_eip=(reg_eip+addip) & 0xFFFF; + return CONTINUE; }; /* IN AL,DX */ - ops[0xec] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); - reg_eax.low(IO.IO_ReadB(reg_edx.word())); - return HANDLED; - } + ops[0xec] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); + reg_eax.low(IO.IO_ReadB(reg_edx.word())); + return HANDLED; }; ops[0x2ec] = ops[0xec]; /* IN AX,DX */ - ops[0xed] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); - reg_eax.word(IO.IO_ReadW(reg_edx.word())); - return HANDLED; - } + ops[0xed] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); + reg_eax.word(IO.IO_ReadW(reg_edx.word())); + return HANDLED; }; /* OUT DX,AL */ - ops[0xee] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); - IO.IO_WriteB(reg_edx.word(),reg_eax.low()); - return HANDLED; - } + ops[0xee] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),1)) return RUNEXCEPTION(); + IO.IO_WriteB(reg_edx.word(),reg_eax.low()); + return HANDLED; }; ops[0x2ee] = ops[0xee]; /* OUT DX,AX */ - ops[0xef] = new OP() { - final public int call() { - if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); - IO.IO_WriteW(reg_edx.word(),reg_eax.word()); - return HANDLED; - } + ops[0xef] = () -> { + if (CPU.CPU_IO_Exception(reg_edx.word(),2)) return RUNEXCEPTION(); + IO.IO_WriteW(reg_edx.word(),reg_eax.word()); + return HANDLED; }; /* LOCK */ - ops[0xf0] = new OP() { - final public int call() { - //if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"CPU:LOCK"); /* FIXME: see case D_LOCK in core_full/new Instructions.load()h */ - prefixes|=PREFIX_LOCK; - return RESTART; - } + ops[0xf0] = () -> { + //if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_NORMAL,"CPU:LOCK"); /* FIXME: see case D_LOCK in core_full/new Instructions.load()h */ + prefixes|=PREFIX_LOCK; + return RESTART; }; ops[0x2f0] = ops[0xf0]; /* ICEBP */ - ops[0xf1] = new OP() { - final public int call() { - CPU.CPU_SW_Interrupt_NoIOPLCheck(1,GETIP()); - if (CPU_TRAP_CHECK) - CPU.cpu.trap_skip=true; - return CONTINUE; - } + ops[0xf1] = () -> { + CPU.CPU_SW_Interrupt_NoIOPLCheck(1,GETIP()); + if (CPU_TRAP_CHECK) + CPU.cpu.trap_skip=true; + return CONTINUE; }; ops[0x2f1] = ops[0xf1]; /* REPNZ */ - ops[0xf2] = new OP() { - final public int call() { - prefixes|=PREFIX_REP; - rep_zero=false; - return RESTART; - } + ops[0xf2] = () -> { + prefixes|=PREFIX_REP; + rep_zero=false; + return RESTART; }; ops[0x2f2] = ops[0xf2]; /* REPZ */ - ops[0xf3] = new OP() { - final public int call() { - prefixes|=PREFIX_REP; - rep_zero=true; - return RESTART; - } + ops[0xf3] = () -> { + prefixes|=PREFIX_REP; + rep_zero=true; + return RESTART; }; ops[0x2f3] = ops[0xf3]; /* HLT */ - ops[0xf4] = new OP() { - final public int call() { - if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); - Flags.FillFlags(); - CPU.CPU_HLT(GETIP()); - return CBRET_NONE; - } + ops[0xf4] = () -> { + if (CPU.cpu.pmode && CPU.cpu.cpl!=0) return EXCEPTION(CPU.EXCEPTION_GP); + Flags.FillFlags(); + CPU.CPU_HLT(GETIP()); + return CBRET_NONE; }; ops[0x2f4] = ops[0xf4]; /* CMC */ - ops[0xf5] = new OP() { - final public int call() { - Flags.FillFlags(); - SETFLAGBIT(CF,(CPU_Regs.flags & CPU_Regs.CF)==0); - return HANDLED; - } + ops[0xf5] = () -> { + Flags.FillFlags(); + SETFLAGBIT(CF,(CPU_Regs.flags & CPU_Regs.CF)==0); + return HANDLED; }; ops[0x2f5] = ops[0xf5]; /* GRP3 Eb(,Ib) */ - ops[0xf6] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* TEST Eb,Ib */ - case 0x01: /* TEST Eb,Ib Undocumented*/ - { - if (rm >= 0xc0 ) { - TESTB(Fetchb(),Modrm.GetEArb[rm].get()); - } - else { - final int val = Memory.mem_readb(getEaa(rm)); - TESTB(Fetchb(),val); - } - break; - } - case 0x02: /* NOT Eb */ - { - if (rm >= 0xc0 ) {Modrm.GetEArb[rm].set(~Modrm.GetEArb[rm].get());} - else { - /*PhysPt*/int eaa=getEaa(rm); - Memory.mem_writeb(eaa, ~Memory.mem_readb(eaa)); - } - break; - } - case 0x03: /* NEG Eb */ - { - Flags.type=Flags.t_NEGb; - if (rm >= 0xc0 ) { - Flags.lf_var1b(Modrm.GetEArb[rm].get());Flags.lf_resb(0-Flags.lf_var1b()); - Modrm.GetEArb[rm].set(Flags.lf_resb()); - } else { - /*PhysPt*/int eaa=getEaa(rm);Flags.lf_var1b(Memory.mem_readb(eaa));Flags.lf_resb(0-Flags.lf_var1b()); - Memory.mem_writeb(eaa,Flags.lf_resb()); - } - break; - } - case 0x04: /* MUL AL,Eb */ - if (rm >= 0xc0 ) { - MULB(Modrm.GetEArb[rm].get()); - } - else { - int eaa = getEaa(rm); - MULB(Memory.mem_readb(eaa)); - } - break; - case 0x05: /* IMUL AL,Eb */ + ops[0xf6] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* TEST Eb,Ib */ + case 0x01: /* TEST Eb,Ib Undocumented*/ + { if (rm >= 0xc0 ) { - r = rm; - IMULB(Modrm.GetEArb[rm].get()); + TESTB(Fetchb(),Modrm.GetEArb[rm].get()); } else { - int eaa = getEaa(rm); - IMULB(Memory.mem_readb(eaa)); + final int val = Memory.mem_readb(getEaa(rm)); + TESTB(Fetchb(),val); } break; - case 0x06: /* DIV Eb */ - if (rm >= 0xc0 ) { - if (!DIVB(Modrm.GetEArb[rm].get())) return RUNEXCEPTION(); - } + } + case 0x02: /* NOT Eb */ + { + if (rm >= 0xc0 ) {Modrm.GetEArb[rm].set(~Modrm.GetEArb[rm].get());} else { - int eaa = getEaa(rm); - if (!DIVB(Memory.mem_readb(eaa))) return RUNEXCEPTION(); + /*PhysPt*/int eaa=getEaa(rm); + Memory.mem_writeb(eaa, ~Memory.mem_readb(eaa)); } break; - case 0x07: /* IDIV Eb */ + } + case 0x03: /* NEG Eb */ + { + Flags.type=Flags.t_NEGb; if (rm >= 0xc0 ) { - if (!IDIVB(Modrm.GetEArb[rm].get())) return RUNEXCEPTION(); - } - else { - int eaa = getEaa(rm); - if (!IDIVB(Memory.mem_readb(eaa))) return RUNEXCEPTION(); + Flags.lf_var1b(Modrm.GetEArb[rm].get());Flags.lf_resb(-Flags.lf_var1b()); + Modrm.GetEArb[rm].set(Flags.lf_resb()); + } else { + /*PhysPt*/int eaa=getEaa(rm);Flags.lf_var1b(Memory.mem_readb(eaa));Flags.lf_resb(-Flags.lf_var1b()); + Memory.mem_writeb(eaa,Flags.lf_resb()); } break; } - return HANDLED; + case 0x04: /* MUL AL,Eb */ + if (rm >= 0xc0 ) { + MULB(Modrm.GetEArb[rm].get()); + } + else { + int eaa = getEaa(rm); + MULB(Memory.mem_readb(eaa)); + } + break; + case 0x05: /* IMUL AL,Eb */ + if (rm >= 0xc0 ) { + r = rm; + IMULB(Modrm.GetEArb[rm].get()); + } + else { + int eaa = getEaa(rm); + IMULB(Memory.mem_readb(eaa)); + } + break; + case 0x06: /* DIV Eb */ + if (rm >= 0xc0 ) { + if (!DIVB(Modrm.GetEArb[rm].get())) return RUNEXCEPTION(); + } + else { + int eaa = getEaa(rm); + if (!DIVB(Memory.mem_readb(eaa))) return RUNEXCEPTION(); + } + break; + case 0x07: /* IDIV Eb */ + if (rm >= 0xc0 ) { + if (!IDIVB(Modrm.GetEArb[rm].get())) return RUNEXCEPTION(); + } + else { + int eaa = getEaa(rm); + if (!IDIVB(Memory.mem_readb(eaa))) return RUNEXCEPTION(); + } + break; } + return HANDLED; }; ops[0x2f6] = ops[0xf6]; /* GRP3 Ew(,Iw) */ - ops[0xf7] = new OP() { - final public int call() { - /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* TEST Ew,Iw */ - case 0x01: /* TEST Ew,Iw Undocumented*/ - { - if (rm >= 0xc0 ) { - int op = Fetchw(); - TESTW(op,Modrm.GetEArw[rm].word()); - } - else { - final int eaa = getEaa(rm); - TESTW(Fetchw(),Memory.mem_readw(eaa)); - } - break; - } - case 0x02: /* NOT Ew */ - { - if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(~Modrm.GetEArw[rm].word());} - else { - /*PhysPt*/int eaa=getEaa(rm); - Memory.mem_writew(eaa,~Memory.mem_readw(eaa)); - } - break; - } - case 0x03: /* NEG Ew */ - { - Flags.type=Flags.t_NEGw; - if (rm >= 0xc0 ) { - Flags.lf_var1w(Modrm.GetEArw[rm].word());Flags.lf_resw(0-Flags.lf_var1w()); - Modrm.GetEArw[rm].word(Flags.lf_resw()); - } else { - /*PhysPt*/int eaa=getEaa(rm); - Flags.lf_var1w(Memory.mem_readw(eaa)); - Flags.lf_resw(0-Flags.lf_var1w()); - Memory.mem_writew(eaa,Flags.lf_resw()); - } - break; - } - case 0x04: /* MUL AX,Ew */ - if (rm >= 0xc0 ) { - MULW(Modrm.GetEArw[rm].word()); - } - else { - int eaa = getEaa(rm); - MULW(Memory.mem_readw(eaa)); - } - break; - case 0x05: /* IMUL AX,Ew */ + ops[0xf7] = () -> { + /*Bit8u*/final int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* TEST Ew,Iw */ + case 0x01: /* TEST Ew,Iw Undocumented*/ + { if (rm >= 0xc0 ) { - IMULW(Modrm.GetEArw[rm].word()); + int op = Fetchw(); + TESTW(op,Modrm.GetEArw[rm].word()); } else { - int eaa = getEaa(rm); - IMULW(Memory.mem_readw(eaa)); + final int eaa = getEaa(rm); + TESTW(Fetchw(),Memory.mem_readw(eaa)); } break; - case 0x06: /* DIV Ew */ - if (rm >= 0xc0 ) { - if (!DIVW(Modrm.GetEArw[rm].word())) return RUNEXCEPTION(); - } + } + case 0x02: /* NOT Ew */ + { + if (rm >= 0xc0 ) {Modrm.GetEArw[rm].word(~Modrm.GetEArw[rm].word());} else { - int eaa = getEaa(rm); - if (!DIVW(Memory.mem_readw(eaa))) return RUNEXCEPTION(); + /*PhysPt*/int eaa=getEaa(rm); + Memory.mem_writew(eaa,~Memory.mem_readw(eaa)); } break; - case 0x07: /* IDIV Ew */ + } + case 0x03: /* NEG Ew */ + { + Flags.type=Flags.t_NEGw; if (rm >= 0xc0 ) { - if (!IDIVW(Modrm.GetEArw[rm].word())) return RUNEXCEPTION(); - } - else { - int eaa = getEaa(rm); - if (!IDIVW(Memory.mem_readw(eaa))) return RUNEXCEPTION(); + Flags.lf_var1w(Modrm.GetEArw[rm].word());Flags.lf_resw(-Flags.lf_var1w()); + Modrm.GetEArw[rm].word(Flags.lf_resw()); + } else { + /*PhysPt*/int eaa=getEaa(rm); + Flags.lf_var1w(Memory.mem_readw(eaa)); + Flags.lf_resw(-Flags.lf_var1w()); + Memory.mem_writew(eaa,Flags.lf_resw()); } break; } - return HANDLED; + case 0x04: /* MUL AX,Ew */ + if (rm >= 0xc0 ) { + MULW(Modrm.GetEArw[rm].word()); + } + else { + int eaa = getEaa(rm); + MULW(Memory.mem_readw(eaa)); + } + break; + case 0x05: /* IMUL AX,Ew */ + if (rm >= 0xc0 ) { + IMULW(Modrm.GetEArw[rm].word()); + } + else { + int eaa = getEaa(rm); + IMULW(Memory.mem_readw(eaa)); + } + break; + case 0x06: /* DIV Ew */ + if (rm >= 0xc0 ) { + if (!DIVW(Modrm.GetEArw[rm].word())) return RUNEXCEPTION(); + } + else { + int eaa = getEaa(rm); + if (!DIVW(Memory.mem_readw(eaa))) return RUNEXCEPTION(); + } + break; + case 0x07: /* IDIV Ew */ + if (rm >= 0xc0 ) { + if (!IDIVW(Modrm.GetEArw[rm].word())) return RUNEXCEPTION(); + } + else { + int eaa = getEaa(rm); + if (!IDIVW(Memory.mem_readw(eaa))) return RUNEXCEPTION(); + } + break; } + return HANDLED; }; /* CLC */ - ops[0xf8] = new OP() { - final public int call() { - Flags.FillFlags(); - SETFLAGBIT(CF,false); - return HANDLED; - } + ops[0xf8] = () -> { + Flags.FillFlags(); + SETFLAGBIT(CF,false); + return HANDLED; }; ops[0x2f8] = ops[0xf8]; /* STC */ - ops[0xf9] = new OP() { - final public int call() { - Flags.FillFlags(); - SETFLAGBIT(CF,true); - return HANDLED; - } + ops[0xf9] = () -> { + Flags.FillFlags(); + SETFLAGBIT(CF,true); + return HANDLED; }; ops[0x2f9] = ops[0xf9]; /* CLI */ - ops[0xfa] = new OP() { - final public int call() { - if (CPU.CPU_CLI()) return RUNEXCEPTION(); - return HANDLED; - } + ops[0xfa] = () -> { + if (CPU.CPU_CLI()) return RUNEXCEPTION(); + return HANDLED; }; ops[0x2fa] = ops[0xfa]; /* STI */ - ops[0xfb] = new OP() { - final public int call() { - if (CPU.CPU_STI()) return RUNEXCEPTION(); - if (CPU_PIC_CHECK) - if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return DECODE_END; - return HANDLED; - } + ops[0xfb] = () -> { + if (CPU.CPU_STI()) return RUNEXCEPTION(); + if (CPU_PIC_CHECK) + if (GETFLAG(IF)!=0 && Pic.PIC_IRQCheck!=0) return DECODE_END; + return HANDLED; }; ops[0x2fb] = ops[0xfb]; /* CLD */ - ops[0xfc] = new OP() { - final public int call() { - SETFLAGBIT(DF,false); - CPU.cpu.direction=1; - return HANDLED; - } + ops[0xfc] = () -> { + SETFLAGBIT(DF,false); + CPU.cpu.direction=1; + return HANDLED; }; ops[0x2fc] = ops[0xfc]; /* STD */ - ops[0xfd] = new OP() { - final public int call() { - SETFLAGBIT(DF,true); - CPU.cpu.direction=-1; - return HANDLED; - } + ops[0xfd] = () -> { + SETFLAGBIT(DF,true); + CPU.cpu.direction=-1; + return HANDLED; }; ops[0x2fd] = ops[0xfd]; /* GRP4 Eb */ - ops[0xfe] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb(); - /*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* INC Eb */ - if (rm >= 0xc0 ) { - switch (rm & 0x7) { - case 0: reg_eax.low(INCB(reg_eax.low()));break; - case 1: reg_ecx.low(INCB(reg_ecx.low()));break; - case 2: reg_edx.low(INCB(reg_edx.low()));break; - case 3: reg_ebx.low(INCB(reg_ebx.low()));break; - case 4: reg_eax.high(INCB(reg_eax.high()));break; - case 5: reg_ecx.high(INCB(reg_ecx.high()));break; - case 6: reg_edx.high(INCB(reg_edx.high()));break; - case 7: reg_ebx.high(INCB(reg_ebx.high()));break; - } - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, INCB(Memory.mem_readb(eaa))); - } - break; - case 0x01: /* DEC Eb */ - if (rm >= 0xc0 ) { - switch (rm & 0x7) { - case 0: reg_eax.low(DECB(reg_eax.low()));break; - case 1: reg_ecx.low(DECB(reg_ecx.low()));break; - case 2: reg_edx.low(DECB(reg_edx.low()));break; - case 3: reg_ebx.low(DECB(reg_ebx.low()));break; - case 4: reg_eax.high(DECB(reg_eax.high()));break; - case 5: reg_ecx.high(DECB(reg_ecx.high()));break; - case 6: reg_edx.high(DECB(reg_edx.high()));break; - case 7: reg_ebx.high(DECB(reg_ebx.high()));break; - } - } - else { - int eaa = getEaa(rm); - Memory.mem_writeb(eaa, DECB(Memory.mem_readb(eaa))); + ops[0xfe] = () -> { + /*Bit8u*/int rm=Fetchb(); + /*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* INC Eb */ + if (rm >= 0xc0 ) { + switch (rm & 0x7) { + case 0: reg_eax.low(INCB(reg_eax.low()));break; + case 1: reg_ecx.low(INCB(reg_ecx.low()));break; + case 2: reg_edx.low(INCB(reg_edx.low()));break; + case 3: reg_ebx.low(INCB(reg_ebx.low()));break; + case 4: reg_eax.high(INCB(reg_eax.high()));break; + case 5: reg_ecx.high(INCB(reg_ecx.high()));break; + case 6: reg_edx.high(INCB(reg_edx.high()));break; + case 7: reg_ebx.high(INCB(reg_ebx.high()));break; } - break; - case 0x07: /* CallBack */ - { - returnValue=Fetchw(); - Flags.FillFlags(); - SAVEIP(); - return RETURN; + } + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, INCB(Memory.mem_readb(eaa))); + } + break; + case 0x01: /* DEC Eb */ + if (rm >= 0xc0 ) { + switch (rm & 0x7) { + case 0: reg_eax.low(DECB(reg_eax.low()));break; + case 1: reg_ecx.low(DECB(reg_ecx.low()));break; + case 2: reg_edx.low(DECB(reg_edx.low()));break; + case 3: reg_ebx.low(DECB(reg_ebx.low()));break; + case 4: reg_eax.high(DECB(reg_eax.high()));break; + case 5: reg_ecx.high(DECB(reg_ecx.high()));break; + case 6: reg_edx.high(DECB(reg_edx.high()));break; + case 7: reg_ebx.high(DECB(reg_ebx.high()));break; } - default: - Log.exit("Illegal GRP4 Call "+((rm>>3) & 7)); - break; } - return HANDLED; + else { + int eaa = getEaa(rm); + Memory.mem_writeb(eaa, DECB(Memory.mem_readb(eaa))); + } + break; + case 0x07: /* CallBack */ + { + returnValue=Fetchw(); + Flags.FillFlags(); + SAVEIP(); + return RETURN; + } + default: + Log.exit("Illegal GRP4 Call "+((rm>>3) & 7)); + break; } + return HANDLED; }; ops[0x2fe] = ops[0xfe]; /* GRP5 Ew */ - ops[0xff] = new OP() { - final public int call() { - /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; - switch (which) { - case 0x00: /* INC Ew */ - if (rm >= 0xc0 ) { - //Modrm.GetEArw[rm].word(INCW(Modrm.GetEArw[rm].word())); - switch (rm & 0x7) { - case 0: reg_eax.word(INCW(reg_eax.word()));break; - case 1: reg_ecx.word(INCW(reg_ecx.word()));break; - case 2: reg_edx.word(INCW(reg_edx.word()));break; - case 3: reg_ebx.word(INCW(reg_ebx.word()));break; - case 4: reg_esp.word(INCW(reg_esp.word()));break; - case 5: reg_ebp.word(INCW(reg_ebp.word()));break; - case 6: reg_esi.word(INCW(reg_esi.word()));break; - case 7: reg_edi.word(INCW(reg_edi.word()));break; - } - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, INCW(Memory.mem_readw(eaa))); - } - break; - case 0x01: /* DEC Ew */ - if (rm >= 0xc0 ) { - Reg r = Modrm.GetEArw[rm]; - r.word(DECW(r.word())); - } - else { - int eaa = getEaa(rm); - Memory.mem_writew(eaa, DECW(Memory.mem_readw(eaa))); + ops[0xff] = () -> { + /*Bit8u*/int rm=Fetchb();/*Bitu*/int which=(rm>>3)&7; + switch (which) { + case 0x00: /* INC Ew */ + if (rm >= 0xc0 ) { + //Modrm.GetEArw[rm].word(INCW(Modrm.GetEArw[rm].word())); + switch (rm & 0x7) { + case 0: reg_eax.word(INCW(reg_eax.word()));break; + case 1: reg_ecx.word(INCW(reg_ecx.word()));break; + case 2: reg_edx.word(INCW(reg_edx.word()));break; + case 3: reg_ebx.word(INCW(reg_ebx.word()));break; + case 4: reg_esp.word(INCW(reg_esp.word()));break; + case 5: reg_ebp.word(INCW(reg_ebp.word()));break; + case 6: reg_esi.word(INCW(reg_esi.word()));break; + case 7: reg_edi.word(INCW(reg_edi.word()));break; } - break; - case 0x02: /* CALL Ev */ - { - int eip; - if (rm >= 0xc0 ) {eip=Modrm.GetEArw[rm].word();} - else {/*PhysPt*/int eaa=getEaa(rm);eip=Memory.mem_readw(eaa);} - CPU.CPU_Push16(GETIP() & 0xFFFF); - reg_eip = eip; - return CONTINUE; } - case 0x03: /* CALL Ep */ - { - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - /*Bit16u*/int newip=Memory.mem_readw(eaa); - /*Bit16u*/int newcs=Memory.mem_readw(eaa+2); - Flags.FillFlags(); - CPU.CPU_CALL(false,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) { - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, INCW(Memory.mem_readw(eaa))); + } + break; + case 0x01: /* DEC Ew */ + if (rm >= 0xc0 ) { + Reg r = Modrm.GetEArw[rm]; + r.word(DECW(r.word())); + } + else { + int eaa = getEaa(rm); + Memory.mem_writew(eaa, DECW(Memory.mem_readw(eaa))); + } + break; + case 0x02: /* CALL Ev */ + { + int eip; + if (rm >= 0xc0 ) {eip=Modrm.GetEArw[rm].word();} + else {/*PhysPt*/int eaa=getEaa(rm);eip=Memory.mem_readw(eaa);} + CPU.CPU_Push16(GETIP() & 0xFFFF); + reg_eip = eip; + return CONTINUE; + } + case 0x03: /* CALL Ep */ + { + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + /*Bit16u*/int newip=Memory.mem_readw(eaa); + /*Bit16u*/int newcs=Memory.mem_readw(eaa+2); + Flags.FillFlags(); + CPU.CPU_CALL(false,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) { + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; } - return CONTINUE; } - case 0x04: /* JMP Ev */ - if (rm >= 0xc0 ) {reg_eip=Modrm.GetEArw[rm].word();} - else {/*PhysPt*/int eaa=getEaa(rm);reg_eip=Memory.mem_readw(eaa);} return CONTINUE; - case 0x05: /* JMP Ep */ - { - if (rm >= 0xc0) return ILLEGAL_OPCODE; - /*PhysPt*/int eaa=getEaa(rm); - /*Bit16u*/int newip=Memory.mem_readw(eaa); - /*Bit16u*/int newcs=Memory.mem_readw(eaa+2); - Flags.FillFlags(); - CPU.CPU_JMP(false,newcs,newip,GETIP()); - if (CPU_TRAP_CHECK) { - if (GETFLAG(TF)!=0) { - CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; - return CBRET_NONE; - } + } + case 0x04: /* JMP Ev */ + if (rm >= 0xc0 ) {reg_eip=Modrm.GetEArw[rm].word();} + else {/*PhysPt*/int eaa=getEaa(rm);reg_eip=Memory.mem_readw(eaa);} + return CONTINUE; + case 0x05: /* JMP Ep */ + { + if (rm >= 0xc0) return ILLEGAL_OPCODE; + /*PhysPt*/int eaa=getEaa(rm); + /*Bit16u*/int newip=Memory.mem_readw(eaa); + /*Bit16u*/int newcs=Memory.mem_readw(eaa+2); + Flags.FillFlags(); + CPU.CPU_JMP(false,newcs,newip,GETIP()); + if (CPU_TRAP_CHECK) { + if (GETFLAG(TF)!=0) { + CPU.cpudecoder=Core_normal.CPU_Core_Normal_Trap_Run; + return CBRET_NONE; } - return CONTINUE; } - case 0x06: /* PUSH Ev */ - if (rm >= 0xc0 ) {CPU.CPU_Push16(Modrm.GetEArw[rm].word());} - else {/*PhysPt*/int eaa=getEaa(rm);CPU.CPU_Push16(Memory.mem_readw(eaa));} - break; - default: - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"CPU:GRP5:Illegal Call "+Integer.toString(which,16)); - return ILLEGAL_OPCODE; + return CONTINUE; } - return HANDLED; + case 0x06: /* PUSH Ev */ + if (rm >= 0xc0 ) {CPU.CPU_Push16(Modrm.GetEArw[rm].word());} + else {/*PhysPt*/int eaa=getEaa(rm);CPU.CPU_Push16(Memory.mem_readw(eaa));} + break; + default: + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_CPU,LogSeverities.LOG_ERROR,"CPU:GRP5:Illegal Call "+Integer.toString(which,16)); + return ILLEGAL_OPCODE; } + return HANDLED; }; } } diff --git a/jdosbox/src/main/java/jdos/cpu/core_switch/Decoder.java b/jdosbox/src/main/java/jdos/cpu/core_switch/Decoder.java index 99125647..be06ce85 100644 --- a/jdosbox/src/main/java/jdos/cpu/core_switch/Decoder.java +++ b/jdosbox/src/main/java/jdos/cpu/core_switch/Decoder.java @@ -1012,7 +1012,7 @@ public static CacheBlockDynRec CreateCacheBlock(CodePageHandlerDynRec codepage,/ case 0x05: /* MOV Ew,GS */ block.r2 = CPU_Regs.reg_gsVal; break; default: - block.instruction = Inst.ILLEGAL; done = true; break; + done = true; break; } if (rm >= 0xc0) { block.instruction = Inst.MOV_R16_R16; @@ -2056,7 +2056,8 @@ public static CacheBlockDynRec CreateCacheBlock(CodePageHandlerDynRec codepage,/ case 0x03: block.r2 = CPU_Regs.reg_dsVal; break; case 0x04: block.r2 = CPU_Regs.reg_fsVal; break; case 0x05: block.r2 = CPU_Regs.reg_gsVal; break; - default: block.instruction = Inst.ILLEGAL; done = true; break; + default: + done = true; break; } if (rm >= 0xc0) { block.instruction = Inst.MOV_R32_R32; diff --git a/jdosbox/src/main/java/jdos/debug/Debug.java b/jdosbox/src/main/java/jdos/debug/Debug.java index 4f2958c4..aff44d4e 100644 --- a/jdosbox/src/main/java/jdos/debug/Debug.java +++ b/jdosbox/src/main/java/jdos/debug/Debug.java @@ -1,6 +1,5 @@ package jdos.debug; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.misc.setup.Section; @@ -60,13 +59,15 @@ public class Debug { public static final int DONE = 47; public static final int INSTRUCTION_DONE = 48; - static long[] last = new long[50]; + static final long[] last = new long[50]; - static DataOutputStream log = null; - static public boolean logging = true; + static DataOutputStream log; + static public final boolean logging = true; static { - try {log = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("debug.log")));} catch (Exception e){} + try {log = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("debug.log")));} catch (Exception e) { + throw new RuntimeException(e); + } } static public final int TYPE_CPU = 0x01; @@ -124,7 +125,9 @@ static public void stop(int type, int c) { } static public void close() { if (log != null) { - try {log.close();} catch (Exception e) {} + try {log.close();} catch (Exception e) { + throw new RuntimeException(e); + } } } static public void log(int type, String value) { @@ -135,7 +138,7 @@ static public void log(int type, String value) { log.writeInt(b.length); log.write(b); } catch (Exception e) { - + throw new RuntimeException(e); } } } @@ -149,7 +152,7 @@ static public void log(int type, long value) { last[type]=value; } } catch (Exception e) { - + throw new RuntimeException(e); } } } @@ -163,7 +166,7 @@ static public void log_long(int type, long value) { last[type]=value; } } catch (Exception e) { - + throw new RuntimeException(e); } } } @@ -175,7 +178,7 @@ static public void log(int type, long value, long value1) { log.writeInt((int)value); log.writeInt((int)value1); } catch (Exception e) { - + throw new RuntimeException(e); } } } @@ -195,9 +198,7 @@ static public boolean DEBUG_Breakpoint() { return false; } - public static Section.SectionFunction DEBUG_Init = new Section.SectionFunction() { - public void call(Section section) { - } + public static final Section.SectionFunction DEBUG_Init = section -> { }; public static boolean DEBUG_ExitLoop() { diff --git a/jdosbox/src/main/java/jdos/debug/Debug_gui.java b/jdosbox/src/main/java/jdos/debug/Debug_gui.java index 5b84bc13..0b1743da 100644 --- a/jdosbox/src/main/java/jdos/debug/Debug_gui.java +++ b/jdosbox/src/main/java/jdos/debug/Debug_gui.java @@ -4,21 +4,24 @@ import jdos.misc.setup.Section_prop; import jdos.types.LogTypes; -import java.io.FileOutputStream; import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; public class Debug_gui { static class _LogGroup { String front; boolean enabled; } - static _LogGroup[] loggrp = new _LogGroup[LogTypes.LOG_MAX]; + static final _LogGroup[] loggrp = new _LogGroup[LogTypes.LOG_MAX]; static OutputStream debuglog; - static Section.SectionFunction LOG_Destroy = new Section.SectionFunction() { + static final Section.SectionFunction LOG_Destroy = new Section.SectionFunction() { public void call(Section section) { if (debuglog != null) { - try {debuglog.close();} catch (Exception e){} + try {debuglog.close();} catch (Exception e) { + throw new RuntimeException(e); + } } } }; @@ -26,9 +29,9 @@ public void call(Section section) { public void call(Section section) { Section_prop sect=(Section_prop)section; String blah = sect.Get_string("logfile"); - if(blah != null && blah.length()!=0){ + if(blah != null && !blah.isEmpty()){ try { - debuglog = new FileOutputStream(blah); + debuglog = Files.newOutputStream(Paths.get(blah)); } catch (Exception e) { e.printStackTrace(); } diff --git a/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Fake.java b/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Fake.java index 2a087999..e32d4668 100644 --- a/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Fake.java +++ b/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Fake.java @@ -10,7 +10,7 @@ public void close() { } public boolean SetDevice(String path, int forceCD) { - return true; + return false; } public boolean GetUPC(ShortRef attr, StringRef upc) { diff --git a/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Image.java b/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Image.java index d8710670..191d3618 100644 --- a/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Image.java +++ b/jdosbox/src/main/java/jdos/dos/CDROM_Interface_Image.java @@ -12,15 +12,16 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.FileReader; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Vector; public class CDROM_Interface_Image implements Dos_cdrom.CDROM_Interface { - private static interface TrackFile { - public boolean read(/*Bit8u*/byte[] buffer, int offset, long seek, int count); - public long getLength(); - public void close(); + private interface TrackFile { + boolean read(/*Bit8u*/byte[] buffer, int offset, long seek, int count); + long getLength(); + void close(); } static private class BinaryFile implements TrackFile { @@ -49,13 +50,15 @@ public long getLength() { } } public void close() { - try {file.close();} catch (Exception e){} + try {file.close();} catch (Exception e) { + throw new RuntimeException(e); + } } private FileIO file; } static private class AudioFile implements TrackFile { - Decoder decoder; + final Decoder decoder; Bitstream in; Header currFrame; int frameCount=-1; @@ -67,7 +70,7 @@ static private class AudioFile implements TrackFile { public AudioFile(String filename, BooleanRef error) { decoder = new Decoder(); try { - in = new Bitstream(new FileInputStream(filename)); + in = new Bitstream(Files.newInputStream(Paths.get(filename))); this. filename = filename; error.value = false; } catch (Exception e) { @@ -77,7 +80,7 @@ public AudioFile(String filename, BooleanRef error) { private void reopen() { try { - in = new Bitstream(new FileInputStream(filename)); + in = new Bitstream(Files.newInputStream(Paths.get(filename))); frameCount = -1; currFrame = null; } catch (Exception e) { @@ -150,7 +153,9 @@ public long getLength() { } public void close() { - try {in.close();} catch (Exception e) {} + try {in.close();} catch (Exception e) { + throw new RuntimeException(e); + } } } // // :TODO: research this class, probably SDL @@ -237,20 +242,20 @@ static private class imagePlayer { CDROM_Interface_Image cd; Mixer.MixerChannel channel; final Object mutex = new Object(); - /*Bit8u*/byte[] buffer = new byte[8192]; + /*Bit8u*/final byte[] buffer = new byte[8192]; int bufLen; int currFrame; int targetFrame; boolean isPlaying; boolean isPaused; boolean ctrlUsed; - Dos_cdrom.TCtrl ctrlData = new Dos_cdrom.TCtrl(); + final Dos_cdrom.TCtrl ctrlData = new Dos_cdrom.TCtrl(); } - private static imagePlayer player = new imagePlayer(); + private static final imagePlayer player = new imagePlayer(); private static int refCount; - public static CDROM_Interface_Image[] images = new CDROM_Interface_Image[26]; + public static final CDROM_Interface_Image[] images = new CDROM_Interface_Image[26]; - private Vector tracks = new Vector(); + private final Vector tracks = new Vector(); private String mcn; private /*Bit8u*/short subUnit; @@ -277,13 +282,13 @@ public void InitNewMedia() { } public boolean SetDevice(String path, int forceCD) { - if (LoadCueSheet(path)) return true; - if (LoadIsoFile(path)) return true; + if (LoadCueSheet(path)) return false; + if (LoadIsoFile(path)) return false; byte[] b = new String("Could not load image file: " + path + "\n").getBytes(); IntRef size = new IntRef(b.length); Dos_files.DOS_WriteFile(Dos_files.STDOUT, b, size); - return false; + return true; } public boolean GetUPC(ShortRef attr, StringRef upc) { @@ -306,7 +311,7 @@ public boolean GetAudioTracks(IntRef stTrack, IntRef end, Dos_cdrom.TMSF leadOut } public boolean GetAudioTrackInfo(int track, Dos_cdrom.TMSF start, ShortRef attr) { - if (track < 1 || track > (int)tracks.size()) return false; + if (track < 1 || track > tracks.size()) return false; int value = ((Track)tracks.elementAt(track - 1)).start + 150; start.fr = value%Dos_cdrom.CD_FPS; @@ -425,49 +430,48 @@ public boolean HasDataTrack() { return false; } - private static Mixer.MIXER_Handler CDAudioCallBack = new Mixer.MIXER_Handler() { - public void call(/*Bitu*/int len) { - len *= 4; // 16 bit, stereo - if (len==0) return; - if (!player.isPlaying || player.isPaused) { - player.channel.AddSilence(); - return; - } + /*Bitu*/ + private static final Mixer.MIXER_Handler CDAudioCallBack = len -> { + len *= 4; // 16 bit, stereo + if (len==0) return; + if (!player.isPlaying || player.isPaused) { + player.channel.AddSilence(); + return; + } - synchronized (player.mutex) { - while (player.bufLen < len) { - boolean success; - if (player.targetFrame > player.currFrame) - success = player.cd.ReadSector(player.buffer, player.bufLen, true, player.currFrame); - else success = false; + synchronized (player.mutex) { + while (player.bufLen < len) { + boolean success; + if (player.targetFrame > player.currFrame) + success = player.cd.ReadSector(player.buffer, player.bufLen, true, player.currFrame); + else success = false; - if (success) { - player.currFrame++; - player.bufLen += Dos_cdrom.RAW_SECTOR_SIZE; - } else { - java.util.Arrays.fill(player.buffer, player.bufLen, player.bufLen, (byte)0); - player.bufLen = len; - player.isPlaying = false; - } - } - } - int tIndex = 0; - int pIndex = 0; - for (int i=0;i= 0; + break; +// failure + case "CATALOG": + mcn = parts[1]; + break; + // ignored commands + default: + success = parts[0].equals("CDTEXTFILE") || parts[0].equals("FLAGS") || parts[0].equals("ISRC") + || parts[0].equals("PERFORMER") || parts[0].equals("POSTGAP") || parts[0].equals("REM") + || parts[0].equals("SONGWRITER") || parts[0].equals("TITLE") || parts[0].isEmpty(); + break; } - else if (parts[0].equals("PREGAP")) { - currPregap = GetCueFrame(parts[1]); - success = currPregap>=0; - } else if (parts[0].equals("CATALOG")) mcn = parts[1]; - // ignored commands - else if (parts[0].equals("CDTEXTFILE") || parts[0].equals("FLAGS") || parts[0].equals("ISRC") - || parts[0].equals("PERFORMER") || parts[0].equals("POSTGAP") || parts[0].equals("REM") - || parts[0].equals("SONGWRITER") || parts[0].equals("TITLE") || parts[0].equals("")) success = true; - // failure - else success = false; if (!success) return false; @@ -655,33 +674,29 @@ else if (parts[0].equals("CDTEXTFILE") || parts[0].equals("FLAGS") || parts[0].e track.start = 0; track.length = 0; track.file = null; - if(!AddTrack(track, shift, 0, totalPregap, 0)) return false; - - return true; + return AddTrack(track, shift, 0, totalPregap, 0); } - private boolean GetRealFileName(StringRef filename, String pathname) { - if (new File(filename.value).exists()) return true; + private void GetRealFileName(StringRef filename, String pathname) { + if (new File(filename.value).exists()) return; // check if file with path relative to cue file exists String tmpstr = pathname + "/" + filename.value; if (new File(tmpstr).exists()) { filename.value = tmpstr; - return true; + return; } // finally check if file is in a dosbox local drive StringRef fullname = new StringRef(); /*Bit8u*/ShortRef drive = new ShortRef(0); - if (!Dos_files.DOS_MakeName(filename.value, fullname, drive)) return false; + if (Dos_files.DOS_MakeName(filename.value, fullname, drive)) return; if (Dos_files.Drives[drive.value]!=null && Dos_files.Drives[drive.value] instanceof Drive_local) { Drive_local ldp = (Drive_local)Dos_files.Drives[drive.value]; ldp.GetSystemFilename(fullname, filename.value); if (new File(fullname.value).exists()) { filename.value = fullname.value; - return true; } } - return false; } private int GetCueFrame(String part) { @@ -709,7 +724,7 @@ boolean AddTrack(Track c, IntRef shift, int prestart, IntRef totalPregap, int cu } else skip = 0; // first track (track number must be 1) - if (tracks.size()==0) { + if (tracks.isEmpty()) { if (curr.number != 1) return false; curr.skip = skip * curr.sectorSize; curr.start += currPregap; diff --git a/jdosbox/src/main/java/jdos/dos/CDRomImage.java b/jdosbox/src/main/java/jdos/dos/CDRomImage.java index 0868bcd7..ff4fece7 100644 --- a/jdosbox/src/main/java/jdos/dos/CDRomImage.java +++ b/jdosbox/src/main/java/jdos/dos/CDRomImage.java @@ -3,8 +3,6 @@ import jdos.misc.setup.Section; public class CDRomImage { - public static Section.SectionFunction CDROM_Image_Init = new Section.SectionFunction() { - public void call(Section section) { - } + public static final Section.SectionFunction CDROM_Image_Init = section -> { }; } diff --git a/jdosbox/src/main/java/jdos/dos/DOS_Drive_Cache.java b/jdosbox/src/main/java/jdos/dos/DOS_Drive_Cache.java index 5830aa5f..46be330e 100644 --- a/jdosbox/src/main/java/jdos/dos/DOS_Drive_Cache.java +++ b/jdosbox/src/main/java/jdos/dos/DOS_Drive_Cache.java @@ -7,42 +7,33 @@ import jdos.util.*; import java.io.File; +import java.util.Arrays; import java.util.Comparator; import java.util.Vector; // :TODO: this entire class was hard to port with accuracy, it will need lots of testing public class DOS_Drive_Cache { - Comparator SortByName = new Comparator() { - public int compare(Object o1, Object o2) { - return ((CFileInfo)o1).shortname.compareTo(((CFileInfo)o2).shortname); - } - }; + Comparator SortByName = (o1, o2) -> ((CFileInfo)o1).shortname.compareTo(((CFileInfo)o2).shortname); - Comparator SortByDirName = new Comparator() { - public int compare(Object o1, Object o2) { - CFileInfo a = (CFileInfo)o1; - CFileInfo b = (CFileInfo)o2; - if (a.isDir!=b.isDir) return a.isDir?1:-1; - return a.shortname.compareTo(b.shortname); - } + final Comparator SortByDirName = (o1, o2) -> { + CFileInfo a = (CFileInfo)o1; + CFileInfo b = (CFileInfo)o2; + if (a.isDir!=b.isDir) return a.isDir?1:-1; + return a.shortname.compareTo(b.shortname); }; - Comparator SortByDirNameRev = new Comparator() { - public int compare(Object o1, Object o2) { - CFileInfo a = (CFileInfo)o1; - CFileInfo b = (CFileInfo)o2; - if (a.isDir!=b.isDir) return a.isDir?1:-1; - return b.shortname.compareTo(a.shortname); - } + final Comparator SortByDirNameRev = (o1, o2) -> { + CFileInfo a = (CFileInfo)o1; + CFileInfo b = (CFileInfo)o2; + if (a.isDir!=b.isDir) return a.isDir?1:-1; + return b.shortname.compareTo(a.shortname); }; - Comparator SortByNameRev = new Comparator() { - public int compare(Object o1, Object o2) { - CFileInfo a = (CFileInfo)o1; - CFileInfo b = (CFileInfo)o2; - return b.shortname.compareTo(a.shortname); - } - }; + final Comparator SortByNameRev = (o1, o2) -> { + CFileInfo a = (CFileInfo)o1; + CFileInfo b = (CFileInfo)o2; + return b.shortname.compareTo(a.shortname); +}; /* The following variable can be lowered to free up some memory. * The negative side effect: The stored searches will be turned over faster. @@ -100,11 +91,11 @@ boolean OpenDir(String path, /*Bit16u*/IntRef id) { return false; } - boolean ReadDir(/*Bit16u*/int id, StringRef result) { + void ReadDir(/*Bit16u*/int id, StringRef result) { // shouldnt happen... - if (id>MAX_OPENDIRS) return false; + if (id>MAX_OPENDIRS) return; - if (!IsCachedIn(dirSearch[id])) { + if (IsCachedIn(dirSearch[id])) { // Try to open directory Cross.dir_information dirp = Cross.open_directory(dirPath); if (dirp == null) { @@ -112,7 +103,7 @@ boolean ReadDir(/*Bit16u*/int id, StringRef result) { dirSearch[id].id = MAX_OPENDIRS; dirSearch[id] = null; } - return false; + return; } // Read complete directory StringRef dir_name = new StringRef(); @@ -137,12 +128,11 @@ boolean ReadDir(/*Bit16u*/int id, StringRef result) { LOG_DEBUG(buffer); }*/ } - if (SetResult(dirSearch[id], result, dirSearch[id].nextEntry)) return true; + if (SetResult(dirSearch[id], result, dirSearch[id].nextEntry)) return; if (dirSearch[id]!=null) { dirSearch[id].id = MAX_OPENDIRS; dirSearch[id] = null; } - return false; } public void ExpandName(StringRef path) { @@ -170,7 +160,6 @@ public String GetExpandName(String path) { } if (work.value.endsWith(File.separator) && !(work.value.endsWith(":"+File.separator)) && work.value.length()>1) { - work.value = work.value.substring(0, work.value.length()); } return work.value; @@ -182,7 +171,7 @@ boolean GetShortName(String fullname, StringRef shortname) { CFileInfo curDir = FindDirInfo(fullname,expand); int filelist_size = curDir.longNameList.size(); - if (filelist_size<=0) return false; + if (filelist_size == 0) return false; /*Bits*/int low = 0; /*Bits*/int high = filelist_size-1; @@ -235,15 +224,15 @@ public boolean FindFirst(String path, IntRef id) { // Copy entries to use with FindNext for (/*Bitu*/int i=0; ifileList.begin(), dirFindFirst[dirFindFirstID]->fileList.end(), SortByName); break; - case TDirSort.DIRALPHABETICAL : java.util.Collections.sort(dirFindFirst[dirFindFirstID].fileList, SortByDirName); break; - case TDirSort.ALPHABETICALREV : java.util.Collections.sort(dirFindFirst[dirFindFirstID].fileList, SortByNameRev); break; - case TDirSort.DIRALPHABETICALREV : java.util.Collections.sort(dirFindFirst[dirFindFirstID].fileList, SortByDirNameRev); break; + case TDirSort.DIRALPHABETICAL : dirFindFirst[dirFindFirstID].fileList.sort(SortByDirName); break; + case TDirSort.ALPHABETICALREV : dirFindFirst[dirFindFirstID].fileList.sort(SortByNameRev); break; + case TDirSort.DIRALPHABETICALREV : dirFindFirst[dirFindFirstID].fileList.sort(SortByDirNameRev); break; case TDirSort.NOSORT : break; } @@ -409,25 +398,23 @@ public CFileInfo() { /*Bitu*/int nextEntry; /*Bitu*/int shortNr; // contents - Vector fileList = new Vector(); - Vector longNameList = new Vector(); + final Vector fileList = new Vector(); + final Vector longNameList = new Vector(); } - private boolean RemoveTrailingDot(StringRef shortname) { + private void RemoveTrailingDot(StringRef shortname) { // remove trailing '.' if no extension is available (Linux compatibility) int len = shortname.value.length(); if (len>0 && (shortname.value.charAt(len-1)=='.')) { - if (len==1) return false; - if ((len==2) && (shortname.value.charAt(0)=='.')) return false; + if (len==1) return; + if ((len==2) && (shortname.value.charAt(0)=='.')) return; shortname.value = shortname.value.substring(0, len-1); - return true; } - return false; } private /*Bits*/int GetLongName(CFileInfo curDir, StringRef shortName) { int filelist_size = curDir.fileList.size(); - if (filelist_size<=0) return -1; + if (filelist_size == 0) return -1; // Remove dot, if no extension... RemoveTrailingDot(shortName); @@ -504,7 +491,7 @@ private void CreateShortName(CFileInfo curDir, CFileInfo info) { } // keep list sorted for CreateShortNameID to work correctly - if (curDir.longNameList.size()>0) { + if (!curDir.longNameList.isEmpty()) { if (info.shortname.compareTo(((CFileInfo)curDir.longNameList.lastElement()).shortname)>=0) { // append at end of list curDir.longNameList.add(info); @@ -536,7 +523,7 @@ private void CreateShortName(CFileInfo curDir, CFileInfo info) { private /*Bitu*/int CreateShortNameID (CFileInfo curDir, String name) { int filelist_size = curDir.longNameList.size(); - if (filelist_size<=0) return 1; // shortener IDs start with 1 + if (filelist_size == 0) return 1; // shortener IDs start with 1 /*Bitu*/int foundNr = 0; /*Bits*/int low = 0; @@ -604,7 +591,7 @@ private boolean SetResult(CFileInfo dir, StringRef result, /*Bitu*/int entryNr) } private boolean IsCachedIn(CFileInfo curDir) { - return (curDir.fileList.size()>0); + return (curDir.fileList.isEmpty()); } private CFileInfo FindDirInfo(String path, StringRef expandedPath) { @@ -631,7 +618,7 @@ private CFileInfo FindDirInfo(String path, StringRef expandedPath) { expandedPath.value = basePath; // hehe, baseDir should be cached in... - if (!IsCachedIn(curDir)) { + if (IsCachedIn(curDir)) { work=basePath; if (OpenDir(curDir,work,id)) { String buffer; @@ -665,7 +652,7 @@ private CFileInfo FindDirInfo(String path, StringRef expandedPath) { if ((nextDir>=0) && ((CFileInfo)curDir.fileList.elementAt(nextDir)).isDir) { curDir = (CFileInfo)curDir.fileList.elementAt(nextDir); curDir.orgname=dir.value; - if (!IsCachedIn(curDir)) { + if (IsCachedIn(curDir)) { if (OpenDir(curDir,expandedPath.value,id)) { String buffer = dirPath; StringRef result = new StringRef(); @@ -728,7 +715,7 @@ private void CreateEntry(CFileInfo dir, String name, boolean is_directory) { boolean found = false; // keep list sorted (so GetLongName works correctly, used by CreateShortName in this routine) - if (dir.fileList.size()>0) { + if (!dir.fileList.isEmpty()) { if (!(info.shortname.compareTo(((CFileInfo)dir.fileList.lastElement()).shortname)<0)) { // append at end of list dir.fileList.add(info); @@ -780,7 +767,8 @@ void Clear() { DeleteFileInfo(dirBase); dirBase = null; nextFreeFindFirst = 0; - for (/*Bit32u*/int i=0; i>> 16)); CPU_Regs.reg_eax.word((/*Bit16u*/int)(pos.value & 0xFFFF)); @@ -1130,7 +1128,8 @@ public String getName() { { StringRef name1 = new StringRef(); if (Dos_files.DOS_GetCurrentDir((short)CPU_Regs.reg_edx.low(),name1)) { - Memory.MEM_BlockWrite(CPU_Regs.reg_dsPhys.dword+CPU_Regs.reg_esi.word(),name1.value,(/*Bitu*/int)(name1.value.length()+1)); + /*Bitu*/ + Memory.MEM_BlockWrite(CPU_Regs.reg_dsPhys.dword+CPU_Regs.reg_esi.word(),name1.value, name1.value.length()+1); CPU_Regs.reg_eax.word(0x0100); Callback.CALLBACK_SCF(false); } else { @@ -1153,7 +1152,7 @@ public String getName() { break; } case 0x49: /* Free memory */ - if (Dos_memory.DOS_FreeMemory((int)CPU_Regs.reg_esVal.dword)) { + if (Dos_memory.DOS_FreeMemory(CPU_Regs.reg_esVal.dword)) { Callback.CALLBACK_SCF(false); } else { CPU_Regs.reg_eax.word(dos.errorcode); @@ -1163,8 +1162,8 @@ public String getName() { case 0x4a: /* Resize memory block */ { /*Bit16u*/IntRef size=new IntRef(CPU_Regs.reg_ebx.word()); - if (Dos_memory.DOS_ResizeMemory((int)CPU_Regs.reg_esVal.dword,size)) { - CPU_Regs.reg_eax.word((int)CPU_Regs.reg_esVal.dword); + if (Dos_memory.DOS_ResizeMemory(CPU_Regs.reg_esVal.dword,size)) { + CPU_Regs.reg_eax.word(CPU_Regs.reg_esVal.dword); Callback.CALLBACK_SCF(false); } else { CPU_Regs.reg_eax.word(dos.errorcode); @@ -1313,7 +1312,8 @@ public String getName() { StringRef name1 = new StringRef(Memory.MEM_StrCopy(CPU_Regs.reg_dsPhys.dword+CPU_Regs.reg_edx.word(),256)); if (Dos_files.DOS_CreateTempFile(name1,handle)) { CPU_Regs.reg_eax.word(handle.value); - Memory.MEM_BlockWrite(CPU_Regs.reg_dsPhys.dword+CPU_Regs.reg_edx.word(),name1.value,(/*Bitu*/int)(name1.value.length()+1)); + /*Bitu*/ + Memory.MEM_BlockWrite(CPU_Regs.reg_dsPhys.dword+CPU_Regs.reg_edx.word(),name1.value, name1.value.length()+1); Callback.CALLBACK_SCF(false); } else { CPU_Regs.reg_eax.word(dos.errorcode); @@ -1364,7 +1364,8 @@ public String getName() { String name1 = Memory.MEM_StrCopy(CPU_Regs.reg_dsPhys.dword+CPU_Regs.reg_esi.word(),256); StringRef name2 = new StringRef(); if (Dos_files.DOS_Canonicalize(name1,name2)) { - Memory.MEM_BlockWrite(CPU_Regs.reg_esPhys.dword+CPU_Regs.reg_edi.word(),name2.value,(/*Bitu*/int)name2.value.length()+1); + /*Bitu*/ + Memory.MEM_BlockWrite(CPU_Regs.reg_esPhys.dword+CPU_Regs.reg_edi.word(),name2.value, name2.value.length() +1); Callback.CALLBACK_SCF(false); } else { CPU_Regs.reg_eax.word(dos.errorcode); @@ -1394,35 +1395,35 @@ public String getName() { Callback.CALLBACK_SCF(true); break; } - /*Bitu*/int len = 0; /* For 0x21 and 0x22 */ + /*Bitu*/int len; /* For 0x21 and 0x22 */ /*PhysPt*/int data=CPU_Regs.reg_esPhys.dword+CPU_Regs.reg_edi.word(); switch (CPU_Regs.reg_eax.low()) { case 0x01: - Memory.mem_writeb(data + 0x00,CPU_Regs.reg_eax.low()); + Memory.mem_writeb(data,CPU_Regs.reg_eax.low()); Memory.mem_writew(data + 0x01,0x26); Memory.mem_writew(data + 0x03,1); if(CPU_Regs.reg_ecx.word() > 0x06 ) Memory.mem_writew(data+0x05,dos.loaded_codepage); if(CPU_Regs.reg_ecx.word() > 0x08 ) { /*Bitu*/int amount = (CPU_Regs.reg_ecx.word()>=0x29)?0x22:(CPU_Regs.reg_ecx.word()-7); Memory.MEM_BlockWrite(data + 0x07,dos.tables.country,amount); - CPU_Regs.reg_ecx.word((CPU_Regs.reg_ecx.word()>=0x29)?0x29:CPU_Regs.reg_ecx.word()); + CPU_Regs.reg_ecx.word(Math.min(CPU_Regs.reg_ecx.word(), 0x29)); } Callback.CALLBACK_SCF(false); break; case 0x05: // Get pointer to filename terminator table - Memory.mem_writeb(data + 0x00, CPU_Regs.reg_eax.low()); + Memory.mem_writeb(data, CPU_Regs.reg_eax.low()); Memory.mem_writed(data + 0x01, dos.tables.filenamechar); CPU_Regs.reg_ecx.word(5); Callback.CALLBACK_SCF(false); break; case 0x02: // Get pointer to uppercase table - Memory.mem_writeb(data + 0x00, CPU_Regs.reg_eax.low()); + Memory.mem_writeb(data, CPU_Regs.reg_eax.low()); Memory.mem_writed(data + 0x01, dos.tables.upcase); CPU_Regs.reg_ecx.word(5); Callback.CALLBACK_SCF(false); break; case 0x06: // Get pointer to collating sequence table - Memory.mem_writeb(data + 0x00, CPU_Regs.reg_eax.low()); + Memory.mem_writeb(data, CPU_Regs.reg_eax.low()); Memory.mem_writed(data + 0x01, dos.tables.collatingseq); CPU_Regs.reg_ecx.word(5); Callback.CALLBACK_SCF(false); @@ -1430,7 +1431,7 @@ public String getName() { case 0x03: // Get pointer to lowercase table case 0x04: // Get pointer to filename uppercase table case 0x07: // Get pointer to double byte char set table - Memory.mem_writeb(data + 0x00, CPU_Regs.reg_eax.low()); + Memory.mem_writeb(data, CPU_Regs.reg_eax.low()); Memory.mem_writed(data + 0x01, dos.tables.dbcs); //used to be 0 CPU_Regs.reg_ecx.word(5); Callback.CALLBACK_SCF(false); @@ -1540,7 +1541,7 @@ public String getName() { } }; - static private Callback.Handler DOS_20Handler = new Callback.Handler() { + static private final Callback.Handler DOS_20Handler = new Callback.Handler() { public String getName() { return "Dos.DOS_20Handler"; } @@ -1551,7 +1552,7 @@ public String getName() { } }; - static private Callback.Handler DOS_27Handler = new Callback.Handler() { + static private final Callback.Handler DOS_27Handler = new Callback.Handler() { public String getName() { return "Dos.DOS_27Handler"; } @@ -1564,7 +1565,7 @@ public String getName() { } }; - static private Callback.Handler DOS_25Handler = new Callback.Handler() { + static private final Callback.Handler DOS_25Handler = new Callback.Handler() { public String getName() { return "Dos.DOS_25Handler"; } @@ -1584,7 +1585,7 @@ public String getName() { } }; - static private Callback.Handler DOS_26Handler = new Callback.Handler() { + static private final Callback.Handler DOS_26Handler = new Callback.Handler() { public String getName() { return "Dos.DOS_26Handler"; } @@ -1601,11 +1602,11 @@ public String getName() { } }; - private Callback[] callback=new Callback[7]; + private final Callback[] callback=new Callback[7]; private static Dos test; - public static Section.SectionFunction DOS_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction DOS_ShutDown = new Section.SectionFunction() { public void call(Section section) { test=null; for (/*Bit16u*/int i=0;i { }; } diff --git a/jdosbox/src/main/java/jdos/dos/DosMSCDEX.java b/jdosbox/src/main/java/jdos/dos/DosMSCDEX.java index 83a7b657..43e77887 100644 --- a/jdosbox/src/main/java/jdos/dos/DosMSCDEX.java +++ b/jdosbox/src/main/java/jdos/dos/DosMSCDEX.java @@ -32,7 +32,7 @@ public class DosMSCDEX { static private class DOS_DeviceHeader extends MemStruct { public static final int size = 22; - public DOS_DeviceHeader(/*PhysPt*/int ptr) { pt = ptr; }; + public DOS_DeviceHeader(/*PhysPt*/int ptr) { pt = ptr; } public void SetNextDeviceHeader(/*RealPt*/int ptr) { SaveIt(4, 0, ptr); } //sSave(sDeviceHeader,nextDeviceHeader,ptr); } public /*RealPt*/int GetNextDeviceHeader() { return GetIt(4, 0); } //sGet(sDeviceHeader,nextDeviceHeader); } @@ -77,8 +77,8 @@ static public class TDriveInfo { } /*Bit16u*/int defaultBufSeg; - TDriveInfo[] dinfo = new TDriveInfo[MSCDEX_MAX_DRIVES]; - Dos_cdrom.CDROM_Interface[] cdrom = new Dos_cdrom.CDROM_Interface[MSCDEX_MAX_DRIVES]; + final TDriveInfo[] dinfo = new TDriveInfo[MSCDEX_MAX_DRIVES]; + final Dos_cdrom.CDROM_Interface[] cdrom = new Dos_cdrom.CDROM_Interface[MSCDEX_MAX_DRIVES]; /*Bit16u*/int rootDriverHeaderSeg; @@ -221,7 +221,7 @@ int AddDrive(/*Bit16u*/int _drive, String physicalPath, /*Bit8u*/ShortRef subUni return 6; } - if (!cdrom[numDrives].SetDevice(physicalPath,forceCD)) { + if (cdrom[numDrives].SetDevice(physicalPath, forceCD)) { // delete cdrom[numDrives] ; mount seems to delete it return 3; } @@ -241,13 +241,13 @@ int AddDrive(/*Bit16u*/int _drive, String physicalPath, /*Bit8u*/ShortRef subUni devHeader.SetName("MSCD001 "); //Link it in the device chain - /*Bit32u*/long start = Dos.dos_infoblock.GetDeviceChain() & 0xFFFFFFFFl; + /*Bit32u*/long start = Dos.dos_infoblock.GetDeviceChain() & 0xFFFFFFFFL; /*Bit16u*/int segm = (/*Bit16u*/int)(start>>16); /*Bit16u*/int offm = (/*Bit16u*/int)(start&0xFFFF); - while(start != 0xFFFFFFFFl) { + while(start != 0xFFFFFFFFL) { segm = (/*Bit16u*/int)(start>>>16); offm = (/*Bit16u*/int)(start&0xFFFF); - start = Memory.real_readd(segm,offm) & 0xFFFFFFFFl; + start = Memory.real_readd(segm,offm) & 0xFFFFFFFFL; } Memory.real_writed(segm,offm,seg<<16); @@ -255,7 +255,7 @@ int AddDrive(/*Bit16u*/int _drive, String physicalPath, /*Bit8u*/ShortRef subUni /*Bit16u*/int off = DOS_DeviceHeader.size; /*Bit16u*/int call_strategy=Callback.CALLBACK_Allocate(); Callback.CallBack_Handlers[call_strategy]=MSCDEX_Strategy_Handler; - Memory.real_writeb(seg,off+0,(/*Bit8u*/short)0xFE); //GRP 4 + Memory.real_writeb(seg, off,(/*Bit8u*/short)0xFE); //GRP 4 Memory.real_writeb(seg,off+1,(/*Bit8u*/short)0x38); //Extra Callback instruction Memory.real_writew(seg,off+2,call_strategy); //The immediate word Memory.real_writeb(seg,off+4,(/*Bit8u*/short)0xCB); //A RETF Instruction @@ -265,7 +265,7 @@ int AddDrive(/*Bit16u*/int _drive, String physicalPath, /*Bit8u*/ShortRef subUni off += 5; /*Bit16u*/int call_interrupt=Callback.CALLBACK_Allocate(); Callback.CallBack_Handlers[call_interrupt]=MSCDEX_Interrupt_Handler; - Memory.real_writeb(seg,off+0,(/*Bit8u*/short)0xFE); //GRP 4 + Memory.real_writeb(seg, off,(/*Bit8u*/short)0xFE); //GRP 4 Memory.real_writeb(seg,off+1,(/*Bit8u*/short)0x38); //Extra Callback instruction Memory.real_writew(seg,off+2,call_interrupt); //The immediate word Memory.real_writeb(seg,off+4,(/*Bit8u*/short)0xCB); //A RETF Instruction @@ -365,15 +365,14 @@ boolean GetCDInfo(/*Bit8u*/short subUnit, /*Bit8u*/ShortRef tr1, /*Bit8u*/ShortR return dinfo[subUnit].lastResult; } - boolean GetTrackInfo(/*Bit8u*/short subUnit, /*Bit8u*/short track, /*Bit8u*/ShortRef attr, Dos_cdrom.TMSF start) + void GetTrackInfo(/*Bit8u*/short subUnit, /*Bit8u*/short track, /*Bit8u*/ShortRef attr, Dos_cdrom.TMSF start) { - if (subUnit>=numDrives) return false; + if (subUnit>=numDrives) return; dinfo[subUnit].lastResult = cdrom[subUnit].GetAudioTrackInfo(track,start,attr); if (!dinfo[subUnit].lastResult) { attr.value = 0; start.clear(); } - return dinfo[subUnit].lastResult; } boolean PlayAudioSector(/*Bit8u*/short subUnit, /*Bit32u*/long sector, /*Bit32u*/long length) @@ -395,14 +394,14 @@ boolean PlayAudioSector(/*Bit8u*/short subUnit, /*Bit32u*/long sector, /*Bit32u* return dinfo[subUnit].lastResult; } - boolean PlayAudioMSF(/*Bit8u*/short subUnit, /*Bit32u*/long start, /*Bit32u*/long length) + void PlayAudioMSF(/*Bit8u*/short subUnit, /*Bit32u*/long start, /*Bit32u*/long length) { - if (subUnit>=numDrives) return false; + if (subUnit>=numDrives) return; /*Bit8u*/short min = (/*Bit8u*/short)((start>>16) & 0xFF); /*Bit8u*/short sec = (/*Bit8u*/short)((start>> 8) & 0xFF); - /*Bit8u*/short fr = (/*Bit8u*/short)((start>> 0) & 0xFF); + /*Bit8u*/short fr = (/*Bit8u*/short)((start) & 0xFF); /*Bit32u*/long sector = min*60*75+sec*75+fr - 150; - return dinfo[subUnit].lastResult = PlayAudioSector(subUnit,sector,length); + dinfo[subUnit].lastResult = PlayAudioSector(subUnit, sector, length); } boolean GetSubChannelData(/*Bit8u*/short subUnit, /*Bit8u*/ShortRef attr, /*Bit8u*/ShortRef track, /*Bit8u*/ShortRef index, Dos_cdrom.TMSF rel, Dos_cdrom.TMSF abs) @@ -464,7 +463,7 @@ boolean StopAudio(/*Bit8u*/short subUnit) if (dinfo[subUnit].audioPlay) { Dos_cdrom.TMSF pos = new Dos_cdrom.TMSF(); GetCurrentPos(subUnit,pos); - dinfo[subUnit].audioStart = pos.min*60*75+pos.sec*75+pos.fr - 150; + dinfo[subUnit].audioStart = (long) pos.min *60*75+pos.sec* 75L +pos.fr - 150; dinfo[subUnit].audioPaused = true; } else { dinfo[subUnit].audioPaused = false; @@ -476,9 +475,9 @@ boolean StopAudio(/*Bit8u*/short subUnit) return dinfo[subUnit].lastResult; } - boolean ResumeAudio(/*Bit8u*/short subUnit) { - if (subUnit>=numDrives) return false; - return dinfo[subUnit].lastResult = PlayAudioSector(subUnit,dinfo[subUnit].audioStart,dinfo[subUnit].audioEnd); + void ResumeAudio(/*Bit8u*/short subUnit) { + if (subUnit>=numDrives) return; + dinfo[subUnit].lastResult = PlayAudioSector(subUnit, dinfo[subUnit].audioStart, dinfo[subUnit].audioEnd); } /*Bit32u*/long GetVolumeSize(/*Bit8u*/short subUnit) { @@ -486,7 +485,7 @@ boolean ResumeAudio(/*Bit8u*/short subUnit) { /*Bit8u*/ShortRef tr1=new ShortRef(0),tr2=new ShortRef(0); Dos_cdrom.TMSF leadOut = new Dos_cdrom.TMSF(); dinfo[subUnit].lastResult = GetCDInfo(subUnit,tr1,tr2,leadOut); - if (dinfo[subUnit].lastResult) return (leadOut.min*60*75)+(leadOut.sec*75)+leadOut.fr; + if (dinfo[subUnit].lastResult) return ((long) leadOut.min *60*75)+(leadOut.sec* 75L)+leadOut.fr; return 0; } @@ -516,7 +515,7 @@ boolean GetVolumeName(/*Bit8u*/short subUnit, StringRef data) { /*Bit16u*/int drive = dinfo[subUnit].drive; /*Bit16u*/IntRef error = new IntRef(0); - boolean success = false; + boolean success; /*PhysPt*/int ptoc = GetTempBuffer(); success = ReadVTOC(drive,0x00,ptoc,error); if (success) { @@ -528,7 +527,7 @@ boolean GetVolumeName(/*Bit8u*/short subUnit, StringRef data) { boolean GetCopyrightName(/*Bit16u*/int drive, /*PhysPt*/int data) { /*Bit16u*/IntRef error=new IntRef(0); - boolean success = false; + boolean success; /*PhysPt*/int ptoc = GetTempBuffer(); success = ReadVTOC(drive,0x00,ptoc,error); if (success) { @@ -545,7 +544,7 @@ boolean GetCopyrightName(/*Bit16u*/int drive, /*PhysPt*/int data) { boolean GetAbstractName(/*Bit16u*/int drive, /*PhysPt*/int data) { /*Bit16u*/IntRef error = new IntRef(0); - boolean success = false; + boolean success; /*PhysPt*/int ptoc = GetTempBuffer(); success = ReadVTOC(drive,0x00,ptoc,error); if (success) { @@ -562,7 +561,7 @@ boolean GetAbstractName(/*Bit16u*/int drive, /*PhysPt*/int data) { boolean GetDocumentationName(/*Bit16u*/int drive, /*PhysPt*/int data) { /*Bit16u*/IntRef error=new IntRef(0); - boolean success = false; + boolean success; /*PhysPt*/int ptoc = GetTempBuffer(); success = ReadVTOC(drive,0x00,ptoc,error); if (success) { @@ -577,10 +576,10 @@ boolean GetDocumentationName(/*Bit16u*/int drive, /*PhysPt*/int data) { return success; } - boolean GetUPC(/*Bit8u*/short subUnit, /*Bit8u*/ShortRef attr, StringRef upc) + void GetUPC(/*Bit8u*/short subUnit, /*Bit8u*/ShortRef attr, StringRef upc) { - if (subUnit>=numDrives) return false; - return dinfo[subUnit].lastResult = cdrom[subUnit].GetUPC(attr,upc); + if (subUnit>=numDrives) return; + dinfo[subUnit].lastResult = cdrom[subUnit].GetUPC(attr, upc); } boolean ReadSectors(/*Bit8u*/short subUnit, boolean raw, /*Bit32u*/long sector, /*Bit16u*/int num, /*PhysPt*/int data) { @@ -591,13 +590,13 @@ boolean ReadSectors(/*Bit8u*/short subUnit, boolean raw, /*Bit32u*/long sector, return dinfo[subUnit].lastResult; } - boolean ReadSectorsMSF(/*Bit8u*/short subUnit, boolean raw, /*Bit32u*/long start, /*Bit16u*/int num, /*PhysPt*/int data) { - if (subUnit>=numDrives) return false; + void ReadSectorsMSF(/*Bit8u*/short subUnit, boolean raw, /*Bit32u*/long start, /*Bit16u*/int num, /*PhysPt*/int data) { + if (subUnit>=numDrives) return; /*Bit8u*/short min = (/*Bit8u*/short)((start>>16) & 0xFF); /*Bit8u*/short sec = (/*Bit8u*/short)((start>> 8) & 0xFF); - /*Bit8u*/short fr = (/*Bit8u*/short)((start>> 0) & 0xFF); + /*Bit8u*/short fr = (/*Bit8u*/short)((start) & 0xFF); /*Bit32u*/long sector = min*60*75+sec*75+fr - 150; - return ReadSectors(subUnit,raw,sector,num,data); + ReadSectors(subUnit, raw, sector, num, data); } // Called from INT 2F @@ -622,8 +621,9 @@ boolean GetDirectoryEntry(/*Bit16u*/int drive, boolean copyFlag, /*PhysPt*/int p //strip of tailing . (XCOM APOCALYPSE) int searchlen = searchName.length(); - if (searchlen > 1 && searchName.indexOf("..")>=0) - if (searchName.charAt(searchlen-1) =='.') searchName = searchName.substring(0, searchlen-1); + if (searchlen > 1 && searchName.contains("..")) + if (searchName.charAt(searchlen-1) =='.') { + } //LOG(LOG_MISC,LOG_ERROR)("MSCDEX: Get DirEntry : Find : %s",searchName); // read vtoc @@ -643,7 +643,7 @@ boolean GetDirectoryEntry(/*Bit16u*/int drive, boolean copyFlag, /*PhysPt*/int p // Get string part foundName = false; if (nextPart) { - if (searchPos.length()>0) { + if (!searchPos.isEmpty()) { useName = searchPos; int pos = searchPos.indexOf("\\"); if (pos>=0) @@ -652,7 +652,7 @@ boolean GetDirectoryEntry(/*Bit16u*/int drive, boolean copyFlag, /*PhysPt*/int p searchPos=""; } - if (searchPos.length() == 0) + if (searchPos.isEmpty()) foundComplete = true; } do { @@ -722,14 +722,13 @@ boolean GetDirectoryEntry(/*Bit16u*/int drive, boolean copyFlag, /*PhysPt*/int p return false; // not found } - boolean GetCurrentPos(/*Bit8u*/short subUnit, Dos_cdrom.TMSF pos) + void GetCurrentPos(/*Bit8u*/short subUnit, Dos_cdrom.TMSF pos) { - if (subUnit>=numDrives) return false; + if (subUnit>=numDrives) return; Dos_cdrom.TMSF rel=new Dos_cdrom.TMSF(); /*Bit8u*/ShortRef attr=new ShortRef(0),track=new ShortRef(0),index=new ShortRef(0); dinfo[subUnit].lastResult = GetSubChannelData(subUnit, attr, track, index, rel, pos); if (!dinfo[subUnit].lastResult) pos.clear(); - return dinfo[subUnit].lastResult; } boolean GetMediaStatus(/*Bit8u*/short subUnit, BooleanRef media, BooleanRef changed, BooleanRef trayOpen) @@ -756,15 +755,15 @@ boolean GetMediaStatus(/*Bit8u*/short subUnit, BooleanRef media, BooleanRef chan dinfo[subUnit].audioPlay = false; } - /*Bit32u*/long status = ((trayOpen.value?1:0) << 0) | // Drive is open ? + /*Bit32u*/ + return ((trayOpen.value ? 1 : 0)) | // Drive is open ? ((dinfo[subUnit].locked?1:0) << 1) | // Drive is locked ? (1<<2) | // raw + cooked sectors (1<<4) | // Can read sudio (1<<8) | // Can control audio (1<<9) | // Red book & HSG ((dinfo[subUnit].audioPlay?1:0) << 10) | // Audio is playing ? - ((media.value?0:1) << 11); // Drive is empty ? - return status; + ((media.value?0:1) << 11); } boolean GetMediaStatus(/*Bit8u*/short subUnit, /*Bit8u*/ShortRef status) @@ -780,9 +779,9 @@ boolean GetMediaStatus(/*Bit8u*/short subUnit, /*Bit8u*/ShortRef status) boolean LoadUnloadMedia(/*Bit8u*/short subUnit, boolean unload) { - if (subUnit>=numDrives) return false; + if (subUnit>=numDrives) return true; dinfo[subUnit].lastResult = cdrom[subUnit].LoadUnloadMedia(unload); - return dinfo[subUnit].lastResult; + return !dinfo[subUnit].lastResult; } boolean SendDriverRequest(/*Bit16u*/int drive, /*PhysPt*/int data) @@ -858,7 +857,7 @@ boolean GetChannelControl(/*Bit8u*/int subUnit, Dos_cdrom.TCtrl ctrl) { mscdex.GetCurrentPos(drive_unit,pos); /*Bit8u*/int addr_mode = Memory.mem_readb(buffer+1); if (addr_mode==0) { // HSG - /*Bit32u*/long frames=pos.min*60*Dos_cdrom.CD_FPS+ pos.sec*Dos_cdrom.CD_FPS+pos.fr; + /*Bit32u*/long frames= (long) pos.min *60*Dos_cdrom.CD_FPS+ (long) pos.sec *Dos_cdrom.CD_FPS+pos.fr; if (frames<150) if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR, "MSCDEX: Get position: invalid position "+pos.min+":"+pos.sec+":"+pos.fr); else frames-=150; Memory.mem_writed(buffer+2,(int)frames); @@ -968,7 +967,7 @@ boolean GetChannelControl(/*Bit8u*/int subUnit, Dos_cdrom.TCtrl ctrl) { // Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,("MSCDEX: IOCTL OUTPUT Subfunction %02X",ioctl_fct); switch (ioctl_fct) { case 0x00 : // Unload /eject media - if (!mscdex.LoadUnloadMedia(drive_unit,true)) return 0x02; + if (mscdex.LoadUnloadMedia(drive_unit, true)) return 0x02; break; case 0x03: //Audio Channel control Dos_cdrom.TCtrl ctrl = new Dos_cdrom.TCtrl(); @@ -986,7 +985,7 @@ boolean GetChannelControl(/*Bit8u*/int subUnit, Dos_cdrom.TCtrl ctrl) { if (!mscdex.StopAudio(drive_unit)) return 0x02; break; case 0x05 : // load media - if (!mscdex.LoadUnloadMedia(drive_unit,false)) return 0x02; + if (mscdex.LoadUnloadMedia(drive_unit, false)) return 0x02; break; default : if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,"MSCDEX: Unsupported IOCTL OUTPUT Subfunction "+Integer.toString(ioctl_fct,16)); return 0x03; // invalid function @@ -994,18 +993,18 @@ boolean GetChannelControl(/*Bit8u*/int subUnit, Dos_cdrom.TCtrl ctrl) { return 0x00; // success } - static private Callback.Handler MSCDEX_Strategy_Handler = new Callback.Handler() { + static private final Callback.Handler MSCDEX_Strategy_Handler = new Callback.Handler() { public String getName() { return "MSCDEX_Strategy_Handler"; } public /*Bitu*/int call() { - curReqheaderPtr = Memory.PhysMake((int)CPU_Regs.reg_esVal.dword, CPU_Regs.reg_ebx.word()); + curReqheaderPtr = Memory.PhysMake(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_ebx.word()); // Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,("MSCDEX: Device Strategy Routine called, request header at %x",curReqheaderPtr); return Callback.CBRET_NONE; } }; - static private Callback.Handler MSCDEX_Interrupt_Handler = new Callback.Handler() { + static private final Callback.Handler MSCDEX_Interrupt_Handler = new Callback.Handler() { public String getName() { return "MSCDEX_Interrupt_Handler"; } @@ -1041,7 +1040,7 @@ public String getName() { break; case 0x80 : // Read long case 0x82 : { // Read long prefetch . both the same here :) - /*Bit32u*/long start = Memory.mem_readd(curReqheaderPtr + 0x14) & 0xFFFFFFFFl; + /*Bit32u*/long start = Memory.mem_readd(curReqheaderPtr + 0x14) & 0xFFFFFFFFL; /*Bit16u*/int len = Memory.mem_readw(curReqheaderPtr+0x12); boolean raw = (Memory.mem_readb(curReqheaderPtr+0x18)==1); if (Memory.mem_readb(curReqheaderPtr+0x0D)==0x00) // HSG @@ -1053,8 +1052,8 @@ public String getName() { case 0x83 : // Seek - dont care :) break; case 0x84 : { /* Play Audio Sectors */ - /*Bit32u*/long start = Memory.mem_readd(curReqheaderPtr + 0x0E) & 0xFFFFFFFFl; - /*Bit32u*/long len = Memory.mem_readd(curReqheaderPtr + 0x12) & 0xFFFFFFFFl; + /*Bit32u*/long start = Memory.mem_readd(curReqheaderPtr + 0x0E) & 0xFFFFFFFFL; + /*Bit32u*/long len = Memory.mem_readd(curReqheaderPtr + 0x12) & 0xFFFFFFFFL; if (Memory.mem_readb(curReqheaderPtr+0x0D)==0x00) // HSG mscdex.PlayAudioSector(subUnit,start,len); else // RED BOOK @@ -1079,142 +1078,140 @@ public String getName() { } }; - static private Dos_system.MultiplexHandler MSCDEX_Handler = new Dos_system.MultiplexHandler() { - public boolean call() { - if(CPU_Regs.reg_eax.high() == 0x11) { - if(CPU_Regs.reg_eax.low() == 0x00) { - /*PhysPt*/int check = Memory.PhysMake((int)CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()); - if(Memory.mem_readw(check+6) == 0xDADA) { - //MSCDEX sets word on stack to ADAD if it DADA on entry. - Memory.mem_writew(check+6,0xADAD); - } - CPU_Regs.reg_eax.low(0xff); - return true; - } else { - Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,"NETWORK REDIRECTOR USED!!!"); - CPU_Regs.reg_eax.word(0x49);//NETWERK SOFTWARE NOT INSTALLED - Callback.CALLBACK_SCF(true); - return true; + static private final Dos_system.MultiplexHandler MSCDEX_Handler = () -> { + if(CPU_Regs.reg_eax.high() == 0x11) { + if(CPU_Regs.reg_eax.low() == 0x00) { + /*PhysPt*/int check = Memory.PhysMake(CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()); + if(Memory.mem_readw(check+6) == 0xDADA) { + //MSCDEX sets word on stack to ADAD if it DADA on entry. + Memory.mem_writew(check+6,0xADAD); } + CPU_Regs.reg_eax.low(0xff); + return true; + } else { + Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,"NETWORK REDIRECTOR USED!!!"); + CPU_Regs.reg_eax.word(0x49);//NETWERK SOFTWARE NOT INSTALLED + Callback.CALLBACK_SCF(true); + return true; } + } - if (CPU_Regs.reg_eax.high()!=0x15) return false; // not handled here, continue chain - - /*PhysPt*/int data = Memory.PhysMake((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word()); - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_NORMAL,"MSCDEX: INT 2F "+Integer.toString(CPU_Regs.reg_eax.word(), 16)+" BX= "+Integer.toString(CPU_Regs.reg_ebx.word(), 16)+" CX="+Integer.toString(CPU_Regs.reg_ecx.word(),16)); - switch (CPU_Regs.reg_eax.word()) { - - case 0x1500: /* Install check */ - CPU_Regs.reg_ebx.word(mscdex.GetNumDrives()); - if (CPU_Regs.reg_ebx.word()>0) CPU_Regs.reg_ecx.word(mscdex.GetFirstDrive()); - CPU_Regs.reg_eax.low(0xff); - return true; - case 0x1501: /* Get cdrom driver info */ - mscdex.GetDriverInfo(data); - return true; - case 0x1502: /* Get Copyright filename */ - if (mscdex.GetCopyrightName(CPU_Regs.reg_ecx.word(),data)) { - Callback.CALLBACK_SCF(false); - } else { - CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); - Callback.CALLBACK_SCF(true); - } - return true; - case 0x1503: /* Get Abstract filename */ - if (mscdex.GetAbstractName(CPU_Regs.reg_ecx.word(),data)) { - Callback.CALLBACK_SCF(false); - } else { - CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); - Callback.CALLBACK_SCF(true); - } - return true; - case 0x1504: /* Get Documentation filename */ - if (mscdex.GetDocumentationName(CPU_Regs.reg_ecx.word(),data)) { - Callback.CALLBACK_SCF(false); - } else { - CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); - Callback.CALLBACK_SCF(true); - } - return true; - case 0x1505: { // read vtoc - /*Bit16u*/IntRef error = new IntRef(0); - if (mscdex.ReadVTOC(CPU_Regs.reg_ecx.word(),CPU_Regs.reg_edx.word(),data,error)) { - // CPU_Regs.reg_ax = error; // return code - Callback.CALLBACK_SCF(false); - } else { - CPU_Regs.reg_eax.word(error.value); - Callback.CALLBACK_SCF(true); - } - } - return true; - case 0x1508: { // read sectors - /*Bit32u*/long sector = (CPU_Regs.reg_esi.word()<<16)+CPU_Regs.reg_edi.word(); - if (mscdex.ReadSectors(CPU_Regs.reg_ecx.word(),sector,CPU_Regs.reg_edx.word(),data)) { - CPU_Regs.reg_eax.word(0); - Callback.CALLBACK_SCF(false); - } else { - // possibly: MSCDEX_ERROR_DRIVE_NOT_READY if sector is beyond total length - CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); - Callback.CALLBACK_SCF(true); - } - return true; - } - case 0x1509: // write sectors - not supported - CPU_Regs.reg_eax.word(MSCDEX_ERROR_INVALID_FUNCTION); + if (CPU_Regs.reg_eax.high()!=0x15) return false; // not handled here, continue chain + + /*PhysPt*/int data = Memory.PhysMake(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word()); + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_NORMAL,"MSCDEX: INT 2F "+Integer.toString(CPU_Regs.reg_eax.word(), 16)+" BX= "+Integer.toString(CPU_Regs.reg_ebx.word(), 16)+" CX="+Integer.toString(CPU_Regs.reg_ecx.word(),16)); + switch (CPU_Regs.reg_eax.word()) { + + case 0x1500: /* Install check */ + CPU_Regs.reg_ebx.word(mscdex.GetNumDrives()); + if (CPU_Regs.reg_ebx.word()>0) CPU_Regs.reg_ecx.word(mscdex.GetFirstDrive()); + CPU_Regs.reg_eax.low(0xff); + return true; + case 0x1501: /* Get cdrom driver info */ + mscdex.GetDriverInfo(data); + return true; + case 0x1502: /* Get Copyright filename */ + if (mscdex.GetCopyrightName(CPU_Regs.reg_ecx.word(),data)) { + Callback.CALLBACK_SCF(false); + } else { + CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + Callback.CALLBACK_SCF(true); + } + return true; + case 0x1503: /* Get Abstract filename */ + if (mscdex.GetAbstractName(CPU_Regs.reg_ecx.word(),data)) { + Callback.CALLBACK_SCF(false); + } else { + CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + Callback.CALLBACK_SCF(true); + } + return true; + case 0x1504: /* Get Documentation filename */ + if (mscdex.GetDocumentationName(CPU_Regs.reg_ecx.word(),data)) { + Callback.CALLBACK_SCF(false); + } else { + CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + Callback.CALLBACK_SCF(true); + } + return true; + case 0x1505: { // read vtoc + /*Bit16u*/IntRef error = new IntRef(0); + if (mscdex.ReadVTOC(CPU_Regs.reg_ecx.word(),CPU_Regs.reg_edx.word(),data,error)) { + // CPU_Regs.reg_ax = error; // return code + Callback.CALLBACK_SCF(false); + } else { + CPU_Regs.reg_eax.word(error.value); Callback.CALLBACK_SCF(true); - return true; - case 0x150B: /* Valid CDROM drive ? */ - CPU_Regs.reg_eax.word((mscdex.IsValidDrive(CPU_Regs.reg_ecx.word()) ? 0x5ad8 : 0x0000)); - CPU_Regs.reg_ebx.word(0xADAD); - return true; - case 0x150C: /* Get MSCDEX Version */ - CPU_Regs.reg_ebx.word(mscdex.GetVersion()); - return true; - case 0x150D: /* Get drives */ - mscdex.GetDrives(data); - return true; - case 0x150E: /* Get/Set Volume Descriptor Preference */ - if (mscdex.IsValidDrive(CPU_Regs.reg_ecx.word())) { - if (CPU_Regs.reg_ebx.word() == 0) { - // get preference - CPU_Regs.reg_edx.word(0x100); // preference? + } + } + return true; + case 0x1508: { // read sectors + /*Bit32u*/long sector = ((long) CPU_Regs.reg_esi.word() <<16)+CPU_Regs.reg_edi.word(); + if (mscdex.ReadSectors(CPU_Regs.reg_ecx.word(),sector,CPU_Regs.reg_edx.word(),data)) { + CPU_Regs.reg_eax.word(0); + Callback.CALLBACK_SCF(false); + } else { + // possibly: MSCDEX_ERROR_DRIVE_NOT_READY if sector is beyond total length + CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + Callback.CALLBACK_SCF(true); + } + return true; + } + case 0x1509: // write sectors - not supported + CPU_Regs.reg_eax.word(MSCDEX_ERROR_INVALID_FUNCTION); + Callback.CALLBACK_SCF(true); + return true; + case 0x150B: /* Valid CDROM drive ? */ + CPU_Regs.reg_eax.word((mscdex.IsValidDrive(CPU_Regs.reg_ecx.word()) ? 0x5ad8 : 0x0000)); + CPU_Regs.reg_ebx.word(0xADAD); + return true; + case 0x150C: /* Get MSCDEX Version */ + CPU_Regs.reg_ebx.word(mscdex.GetVersion()); + return true; + case 0x150D: /* Get drives */ + mscdex.GetDrives(data); + return true; + case 0x150E: /* Get/Set Volume Descriptor Preference */ + if (mscdex.IsValidDrive(CPU_Regs.reg_ecx.word())) { + if (CPU_Regs.reg_ebx.word() == 0) { + // get preference + CPU_Regs.reg_edx.word(0x100); // preference? + Callback.CALLBACK_SCF(false); + } else if (CPU_Regs.reg_ebx.word() == 1) { + // set preference + if (CPU_Regs.reg_edx.high() == 1) { + // valid Callback.CALLBACK_SCF(false); - } else if (CPU_Regs.reg_ebx.word() == 1) { - // set preference - if (CPU_Regs.reg_edx.high() == 1) { - // valid - Callback.CALLBACK_SCF(false); - } else { - CPU_Regs.reg_eax.word(MSCDEX_ERROR_INVALID_FUNCTION); - Callback.CALLBACK_SCF(true); - } } else { CPU_Regs.reg_eax.word(MSCDEX_ERROR_INVALID_FUNCTION); Callback.CALLBACK_SCF(true); } } else { - CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); - Callback.CALLBACK_SCF(true); - } - return true; - case 0x150F: { // Get directory entry - /*Bit16u*/IntRef error = new IntRef(0); - boolean success = mscdex.GetDirectoryEntry(CPU_Regs.reg_ecx.low(),(CPU_Regs.reg_ecx.high()&1)!=0,data,Memory.PhysMake(CPU_Regs.reg_esi.word(),CPU_Regs.reg_edi.word()),error); - CPU_Regs.reg_eax.word(error.value); - Callback.CALLBACK_SCF(!success); - } return true; - case 0x1510: /* Device driver request */ - if (mscdex.SendDriverRequest(CPU_Regs.reg_ecx.word(),data)) { - Callback.CALLBACK_SCF(false); - } else { - CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + CPU_Regs.reg_eax.word(MSCDEX_ERROR_INVALID_FUNCTION); Callback.CALLBACK_SCF(true); } - return true; - } - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,"MSCDEX: Unknwon call : "+Integer.toString(CPU_Regs.reg_eax.word(),16)); - return true; + } else { + CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + Callback.CALLBACK_SCF(true); + } + return true; + case 0x150F: { // Get directory entry + /*Bit16u*/IntRef error = new IntRef(0); + boolean success = mscdex.GetDirectoryEntry(CPU_Regs.reg_ecx.low(),(CPU_Regs.reg_ecx.high()&1)!=0,data,Memory.PhysMake(CPU_Regs.reg_esi.word(),CPU_Regs.reg_edi.word()),error); + CPU_Regs.reg_eax.word(error.value); + Callback.CALLBACK_SCF(!success); + } return true; + case 0x1510: /* Device driver request */ + if (mscdex.SendDriverRequest(CPU_Regs.reg_ecx.word(),data)) { + Callback.CALLBACK_SCF(false); + } else { + CPU_Regs.reg_eax.word(MSCDEX_ERROR_UNKNOWN_DRIVE); + Callback.CALLBACK_SCF(true); + } + return true; } + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_ERROR,"MSCDEX: Unknwon call : "+Integer.toString(CPU_Regs.reg_eax.word(),16)); + return true; }; static private class device_MSCDEX extends DOS_Device { @@ -1269,7 +1266,7 @@ static public boolean MSCDEX_GetVolumeName(/*Bit8u*/short subUnit, StringRef nam return mscdex.GetVolumeName(subUnit,name); } - static private Dos_cdrom.TMSF[] leadOut = new Dos_cdrom.TMSF[MSCDEX_MAX_DRIVES]; + static private final Dos_cdrom.TMSF[] leadOut = new Dos_cdrom.TMSF[MSCDEX_MAX_DRIVES]; static { for (int i=0;i { + mscdex = null; + curReqheaderPtr = 0; }; - public static Section.SectionFunction MSCDEX_Init = new Section.SectionFunction() { - public void call(Section section) { - // AddDestroy func - section.AddDestroyFunction(MSCDEX_ShutDown); - /* Register the mscdex device */ - DOS_Device newdev = new device_MSCDEX(); - Dos_devices.DOS_AddDevice(newdev); - curReqheaderPtr = 0; - /* Add Multiplexer */ - Dos_misc.DOS_AddMultiplexHandler(MSCDEX_Handler); - /* Create MSCDEX */ - mscdex = new CMscdex(); - } + public static final Section.SectionFunction MSCDEX_Init = section -> { + // AddDestroy func + section.AddDestroyFunction(MSCDEX_ShutDown); + /* Register the mscdex device */ + DOS_Device newdev = new device_MSCDEX(); + Dos_devices.DOS_AddDevice(newdev); + curReqheaderPtr = 0; + /* Add Multiplexer */ + Dos_misc.DOS_AddMultiplexHandler(MSCDEX_Handler); + /* Create MSCDEX */ + mscdex = new CMscdex(); }; } diff --git a/jdosbox/src/main/java/jdos/dos/Dos_Block.java b/jdosbox/src/main/java/jdos/dos/Dos_Block.java index ae620657..4a966803 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_Block.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_Block.java @@ -1,8 +1,8 @@ package jdos.dos; public class Dos_Block { - public Dos_Date date = new Dos_Date(); - public Dos_Version version = new Dos_Version(); + public final Dos_Date date = new Dos_Date(); + public final Dos_Version version = new Dos_Version(); public /*Bit16u*/int firstMCB; public /*Bit16u*/int errorcode; public /*Bit16u*/int psp(){return new Dos_SDA(Dos.DOS_SDA_SEG,Dos.DOS_SDA_OFS).GetPSP();} @@ -28,6 +28,6 @@ public static class Tables { /*Bit8u*/byte[] country;//Will be copied to dos memory. resides in real mem /*Bit16u*/int dpb; //Fake Disk parameter system using only the first entry so the drive letter matches } - public Tables tables = new Tables(); - /*Bit16u*/int loaded_codepage=437; + public final Tables tables = new Tables(); + /*Bit16u*/final int loaded_codepage=437; } diff --git a/jdosbox/src/main/java/jdos/dos/Dos_Drive.java b/jdosbox/src/main/java/jdos/dos/Dos_Drive.java index 15f07c9f..73767267 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_Drive.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_Drive.java @@ -31,7 +31,7 @@ public abstract class Dos_Drive { /* Can be overridden for example in iso images */ public String GetLabel(){return dirCache.GetLabel();} - public DOS_Drive_Cache dirCache = new DOS_Drive_Cache(); + public final DOS_Drive_Cache dirCache = new DOS_Drive_Cache(); // disk cycling functionality (request resources) public void Activate() {} diff --git a/jdosbox/src/main/java/jdos/dos/Dos_FCB.java b/jdosbox/src/main/java/jdos/dos/Dos_FCB.java index 4417fa0b..b22c792a 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_FCB.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_FCB.java @@ -76,7 +76,8 @@ public void FileClose(/*Bit8u*/ShortRef _fhandle) { SaveIt(1,27,0xff);//sSave(sFCB,file_handle,0xff); } public void GetRecord(/*Bit16u*/IntRef _cur_block,/*Bit8u*/ShortRef _cur_rec) { - _cur_block.value=(/*Bit16u*/int)GetIt(2,12);//sGet(sFCB,cur_block); + /*Bit16u*/ + _cur_block.value= GetIt(2,12);//sGet(sFCB,cur_block); _cur_rec.value=(/*Bit8u*/short)GetIt(1,32);//sGet(sFCB,cur_rec); } public void SetRecord(/*Bit16u*/int _cur_block,/*Bit8u*/short _cur_rec) { @@ -85,7 +86,8 @@ public void SetRecord(/*Bit16u*/int _cur_block,/*Bit8u*/short _cur_rec) { } public void GetSeqData(/*Bit8u*/ShortRef _fhandle,/*Bit16u*/IntRef _rec_size) { _fhandle.value=(/*Bit8u*/short)GetIt(1,27);//sGet(sFCB,file_handle); - _rec_size.value=(/*Bit16u*/int)GetIt(2,14);//sGet(sFCB,rec_size); + /*Bit16u*/ + _rec_size.value= GetIt(2,14);//sGet(sFCB,rec_size); } public void GetRandom(/*Bit32u*/LongRef _random) { _random.value=GetIt(4,33);//sGet(sFCB,rndm); @@ -112,12 +114,13 @@ void SetResultAttr(/*Bit8u*/short attr) { } public boolean Valid() { //Very simple check for Oubliette - if(GetIt(1,1)/*sGet(sFCB,filename[0])*/ == 0 && GetIt(1,27)/*sGet(sFCB,file_handle)*/ == 0) return false; - return true; + /*sGet(sFCB,filename[0])*/ + /*sGet(sFCB,file_handle)*/ + return GetIt(1, 1) == 0 && GetIt(1, 27) == 0; } private boolean extended; - private /*PhysPt*/int real_pt; + private final /*PhysPt*/int real_pt; // struct sFCB { //0 Bit8u drive; /* Drive number 0=default, 1=A, etc */ diff --git a/jdosbox/src/main/java/jdos/dos/Dos_InfoBlock.java b/jdosbox/src/main/java/jdos/dos/Dos_InfoBlock.java index 1fc6748d..e12e44d0 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_InfoBlock.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_InfoBlock.java @@ -20,7 +20,7 @@ public void SetLocation(/*Bit16u*/int segment) { SaveIt(1, joindedDrives, 0); //sSave(sDIB,joindedDrives,(Bit8u)0); SaveIt(1, lastdrive, 0x01); //sSave(sDIB,lastdrive,(Bit8u)0x01);//increase this if you add drives to cds-chain - SaveIt(4, diskInfoBuffer, (int)Memory.RealMake(segment,diskBufferHeadPt)); //sSave(sDIB,diskInfoBuffer,RealMake(segment,offsetof(sDIB,diskBufferHeadPt))); + SaveIt(4, diskInfoBuffer, Memory.RealMake(segment,diskBufferHeadPt)); //sSave(sDIB,diskInfoBuffer,RealMake(segment,offsetof(sDIB,diskBufferHeadPt))); SaveIt(4, setverPtr, 0); //sSave(sDIB,setverPtr,(Bit32u)0); SaveIt(2, a20FixOfs, 0); //sSave(sDIB,a20FixOfs,(Bit16u)0); @@ -62,8 +62,8 @@ public void SetLocation(/*Bit16u*/int segment) { /* Create a fake SFT, so programs think there are 100 file handles */ /*Bit16u*/short sftOffset=firstFileTable+0xa2; - SaveIt(4, firstFileTable, (int)Memory.RealMake(segment, sftOffset)); //Save(sDIB,firstFileTable,RealMake(segment,sftOffset)); - Memory.real_writed(segment,sftOffset+0x00,Memory.RealMake(segment+0x26,0)); //Next File Table + SaveIt(4, firstFileTable, Memory.RealMake(segment, sftOffset)); //Save(sDIB,firstFileTable,RealMake(segment,sftOffset)); + Memory.real_writed(segment, sftOffset,Memory.RealMake(segment+0x26,0)); //Next File Table Memory.real_writew(segment,sftOffset+0x04,100); //File Table supports 100 files Memory.real_writed(segment+0x26,0x00,0xffffffff); //Last File Table Memory.real_writew(segment+0x26,0x04,100); //File Table supports 100 files diff --git a/jdosbox/src/main/java/jdos/dos/Dos_PSP.java b/jdosbox/src/main/java/jdos/dos/Dos_PSP.java index 7e306167..dd6c6ccd 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_PSP.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_PSP.java @@ -20,7 +20,7 @@ public void MakeNew(/*Bit16u*/int mem_size) { SaveIt(1,5,0xea); //sSave(sPSP,far_call,0xea); // far call to interrupt 0x21 - faked for bill & ted // lets hope nobody really uses this address - SaveIt(4,6,(int)Memory.RealMake(0xDEAD,0xFFFF)); //sSave(sPSP,cpm_entry,RealMake(0xDEAD,0xFFFF)); + SaveIt(4,6, Memory.RealMake(0xDEAD,0xFFFF)); //sSave(sPSP,cpm_entry,RealMake(0xDEAD,0xFFFF)); /* Standard blocks,int 20 and int21 retf */ SaveIt(1, 0, 0xcd); //sSave(sPSP,exit[0],0xcd); SaveIt(1, 1, 0x20); //sSave(sPSP,exit[1],0x20); @@ -37,7 +37,7 @@ public void MakeNew(/*Bit16u*/int mem_size) { /* FCBs are filled with 0 */ // .... /* Init file pointer and max_files */ - SaveIt(4, 52, (int)Memory.RealMake(seg,24)); //sSave(sPSP,file_table,RealMake(seg,offsetof(sPSP,files))); + SaveIt(4, 52, Memory.RealMake(seg,24)); //sSave(sPSP,file_table,RealMake(seg,offsetof(sPSP,files))); SaveIt(2, 50, 20); //sSave(sPSP,max_files,20); for (/*Bit16u*/int ct=0;ct<20;ct++) SetFileHandle(ct,0xff); @@ -87,9 +87,9 @@ public void CloseFiles() { public void SaveVectors () { /* Save interrupt 22,23,24 */ - SaveIt(4, 10, (int)Memory.RealGetVec(0x22));//sSave(sPSP,int_22,RealGetVec(0x22)); - SaveIt(4, 14, (int)Memory.RealGetVec(0x23));//sSave(sPSP,int_23,RealGetVec(0x23)); - SaveIt(4, 18, (int)Memory.RealGetVec(0x24));//sSave(sPSP,int_24,RealGetVec(0x24)); + SaveIt(4, 10, Memory.RealGetVec(0x22));//sSave(sPSP,int_22,RealGetVec(0x22)); + SaveIt(4, 14, Memory.RealGetVec(0x23));//sSave(sPSP,int_23,RealGetVec(0x23)); + SaveIt(4, 18, Memory.RealGetVec(0x24));//sSave(sPSP,int_24,RealGetVec(0x24)); } public void RestoreVectors() { @@ -137,11 +137,12 @@ public void SetParent(/*Bit16u*/int parent) { } public /*Bit16u*/int GetParent() { - return (/*Bit16u*/int)GetIt(2,22);//sGet(sPSP,psp_parent); + /*Bit16u*/ + return GetIt(2,22);//sGet(sPSP,psp_parent); } public void SetStack(/*RealPt*/int stackpt) { - SaveIt(4,46,(int)stackpt); //sSave(sPSP,stack,stackpt); + SaveIt(4,46, stackpt); //sSave(sPSP,stack,stackpt); } public /*RealPt*/int GetStack() { @@ -149,7 +150,7 @@ public void SetStack(/*RealPt*/int stackpt) { } public void SetInt22(/*RealPt*/int int22pt) { - SaveIt(4,10,(int)int22pt);//sSave(sPSP,int_22,int22pt); + SaveIt(4,10, int22pt);//sSave(sPSP,int_22,int22pt); } public /*RealPt*/int GetInt22() { @@ -173,7 +174,7 @@ public void SetCommandTail(/*RealPt*/int src) { } } - public boolean SetNumFiles(/*Bit16u*/int fileNum) { + public void SetNumFiles(/*Bit16u*/int fileNum) { //20 minimum. clipper program. if (fileNum < 20) fileNum = 20; @@ -182,7 +183,7 @@ public boolean SetNumFiles(/*Bit16u*/int fileNum) { fileNum+=2; // Add a few more files for safety /*Bit16u*/int para = (fileNum/16)+((fileNum%16)>0?1:0); /*RealPt*/int data = Memory.RealMake(Dos_tables.DOS_GetMemory(para),0); - SaveIt(4, 52, (int)data); //sSave(sPSP,file_table,data); + SaveIt(4, 52, data); //sSave(sPSP,file_table,data); SaveIt(2, 50, fileNum); //sSave(sPSP,max_files,fileNum); /*Bit16u*/int i; for (i=0; i<20; i++) SetFileHandle(i,GetIt(1,24+i)/*(Bit8u)sGet(sPSP,files[i])*/); @@ -190,7 +191,6 @@ public boolean SetNumFiles(/*Bit16u*/int fileNum) { } else { SaveIt(2, 50, fileNum);//sSave(sPSP,max_files,fileNum); } - return true; } public /*Bit16u*/int FindEntryByHandle(/*Bit8u*/short handle) { @@ -234,6 +234,6 @@ public boolean SetNumFiles(/*Bit16u*/int fileNum) { //124 Bit8u fill_4[4]; /* unused */ //128 CommandTail cmdtail; //256 } GCC_ATTRIBUTE(packed); - private /*Bit16u*/int seg; + private final /*Bit16u*/int seg; public static /*Bit16u*/int rootpsp; } diff --git a/jdosbox/src/main/java/jdos/dos/Dos_ParamBlock.java b/jdosbox/src/main/java/jdos/dos/Dos_ParamBlock.java index 3bf23b3f..7bc476ef 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_ParamBlock.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_ParamBlock.java @@ -21,11 +21,11 @@ public void LoadData() { public void SaveData() { /* Save it as an exec block */ SaveIt(2,0,exec.envseg);//sSave(sExec,envseg,exec.envseg); - SaveIt(4,2,(int)exec.cmdtail);//sSave(sExec,cmdtail,exec.cmdtail); - SaveIt(4,6,(int)exec.fcb1);//sSave(sExec,fcb1,exec.fcb1); - SaveIt(4,10,(int)exec.fcb2);//sSave(sExec,fcb2,exec.fcb2); - SaveIt(4,14,(int)exec.initsssp);//sSave(sExec,initsssp,exec.initsssp); - SaveIt(4,18,(int)exec.initcsip);//sSave(sExec,initcsip,exec.initcsip); + SaveIt(4,2, exec.cmdtail);//sSave(sExec,cmdtail,exec.cmdtail); + SaveIt(4,6, exec.fcb1);//sSave(sExec,fcb1,exec.fcb1); + SaveIt(4,10, exec.fcb2);//sSave(sExec,fcb2,exec.fcb2); + SaveIt(4,14, exec.initsssp);//sSave(sExec,initsssp,exec.initsssp); + SaveIt(4,18, exec.initcsip);//sSave(sExec,initcsip,exec.initcsip); } public static class sOverlay { diff --git a/jdosbox/src/main/java/jdos/dos/Dos_cdrom.java b/jdosbox/src/main/java/jdos/dos/Dos_cdrom.java index 5f840399..e1d6ccf2 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_cdrom.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_cdrom.java @@ -59,37 +59,35 @@ public void clear() { static public class TCtrl { public void copy(TCtrl t) { - for (int i=0;i0xFFFF0) return 0xffff; - if ((size & 0xf)!=0) return (/*Bit16u*/int)((size>>4)+1); - else return (/*Bit16u*/int)(size>>4); + /*Bit16u*/ + /*Bit16u*/ + if ((size & 0xf)!=0) return (size>>4)+1; + else return size>>4; } static private boolean MakeEnv(String name, IntRef segment) { @@ -226,7 +228,7 @@ static private boolean MakeEnv(String name, IntRef segment) { } else return false; } - static public boolean DOS_NewPSP(/*Bit16u*/int segment, /*Bit16u*/int size) { + static public void DOS_NewPSP(/*Bit16u*/int segment, /*Bit16u*/int size) { Dos_PSP psp=new Dos_PSP(segment); psp.MakeNew(size); /*Bit16u*/int parent_psp_seg=psp.GetParent(); @@ -234,10 +236,9 @@ static public boolean DOS_NewPSP(/*Bit16u*/int segment, /*Bit16u*/int size) { psp.CopyFileTable(psp_parent,false); // copy command line as well (Kings Quest AGI -cga switch) psp.SetCommandTail(Memory.RealMake(parent_psp_seg,0x80)); - return true; } - static public boolean DOS_ChildPSP(/*Bit16u*/int segment, /*Bit16u*/int size) { + static public void DOS_ChildPSP(/*Bit16u*/int segment, /*Bit16u*/int size) { Dos_PSP psp=new Dos_PSP(segment); psp.MakeNew(size); /*Bit16u*/int parent_psp_seg = psp.GetParent(); @@ -248,14 +249,15 @@ static public boolean DOS_ChildPSP(/*Bit16u*/int segment, /*Bit16u*/int size) { psp.SetFCB2(Memory.RealMake(parent_psp_seg,0x6c)); psp.SetEnvironment(psp_parent.GetEnvironment()); psp.SetSize(size); - return true; } static private void SetupPSP(/*Bit16u*/int pspseg,/*Bit16u*/int memsize,/*Bit16u*/int envseg) { /* Fix the PSP for psp and environment MCB's */ - Dos_MCB mcb=new Dos_MCB((/*Bit16u*/int)(pspseg-1)); + /*Bit16u*/ + Dos_MCB mcb=new Dos_MCB(pspseg-1); mcb.SetPSPSeg(pspseg); - mcb.SetPt((/*Bit16u*/int)(envseg-1)); + /*Bit16u*/ + mcb.SetPt(envseg-1); mcb.SetPSPSeg(pspseg); Dos_PSP psp=new Dos_PSP(pspseg); @@ -279,7 +281,7 @@ static private void SetupCMDLine(/*Bit16u*/int pspseg,Dos_ParamBlock block) { static private boolean winRun(String path) { if (!loadedWinMethod) { try { - Class c = Class.forName("jdos.win.Win"); + Class c = Class.forName("jdos.win.Win"); winMethod = c.getDeclaredMethod("run", new Class[] {String.class}); System.out.println("Win32 support available"); } catch (Exception e) { @@ -291,7 +293,7 @@ static private boolean winRun(String path) { if (winMethod != null) { try { Object result = winMethod.invoke(null, new Object[]{path}); - return ((Boolean)result).booleanValue(); + return (Boolean) result; } catch (Exception e) { e.printStackTrace(); loadedWinMethod = true; @@ -303,7 +305,7 @@ static private boolean winRun(String path) { static private boolean winRun(Drive_fat drive, Drive_fat.fatFile file, String path) { if (!loadedWinMethod) { try { - Class c = Class.forName("jdos.win.Win"); + Class c = Class.forName("jdos.win.Win"); winMethod = c.getDeclaredMethod("run", new Class[] {Drive_fat.class, Drive_fat.fatFile.class, String.class}); System.out.println("Win32 support available"); } catch (Exception e) { @@ -315,7 +317,7 @@ static private boolean winRun(Drive_fat drive, Drive_fat.fatFile file, String pa if (winMethod != null) { try { Object result = winMethod.invoke(null, new Object[]{drive, file, path}); - return ((Boolean)result).booleanValue(); + return (Boolean) result; } catch (Exception e) { e.printStackTrace(); loadedWinMethod = true; @@ -354,7 +356,7 @@ static public boolean DOS_Execute(String name,/*PhysPt*/int block_pt,/*Bit8u*/sh return true; } } else if (Dos_files.Files[Dos.RealHandle(fhandle.value)] instanceof Drive_zip.Zip_File) { - String path = "" + (char)('A' + ((Drive_zip.Zip_File)Dos_files.Files[Dos.RealHandle(fhandle.value)]).GetDrive()); + String path = "" + (char)('A' + Dos_files.Files[Dos.RealHandle(fhandle.value)].GetDrive()); if (winRun(path)) { return true; } @@ -434,8 +436,7 @@ static public boolean DOS_Execute(String name,/*PhysPt*/int block_pt,/*Bit8u*/sh return false; } } - if (maxfree.value0) { + StringBuilder stripname= new StringBuilder(); + while (!name.isEmpty()) { char chr = name.charAt(0); name = name.substring(1); switch (chr) { - case ':':case '\\':case '/':stripname="";break; - default:stripname+=String.valueOf(chr).toUpperCase(); + case ':':case '\\':case '/': + stripname = new StringBuilder();break; + default: + stripname.append(String.valueOf(chr).toUpperCase()); } } - int p = stripname.indexOf('.'); + int p = stripname.toString().indexOf('.'); if (p>=0) { - stripname = stripname.substring(0, p); + stripname = new StringBuilder(stripname.substring(0, p)); } Dos_MCB pspmcb=new Dos_MCB(Dos.dos.psp()-1); - pspmcb.SetFileName(stripname); + pspmcb.SetFileName(stripname.toString()); DOS_UpdatePSPName(); return true; } diff --git a/jdosbox/src/main/java/jdos/dos/Dos_files.java b/jdosbox/src/main/java/jdos/dos/Dos_files.java index 5d778807..087fa2f5 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_files.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_files.java @@ -40,8 +40,8 @@ public class Dos_files { public static final int STDAUX=3; public static final int STDPRN=4; - public static DOS_File[] Files=new DOS_File[DOS_FILES]; - public static Dos_Drive[] Drives=new Dos_Drive[DOS_DRIVES]; + public static final DOS_File[] Files=new DOS_File[DOS_FILES]; + public static final Dos_Drive[] Drives=new Dos_Drive[DOS_DRIVES]; static public /*Bit8u*/short DOS_GetDefaultDrive() { // return DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).GetDrive(); @@ -56,11 +56,11 @@ static public void DOS_SetDefaultDrive(/*Bit8u*/short drive) { } public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/ShortRef drive) { - if(name == null || name.length() == 0 || name.startsWith(" ")) { + if(name == null || name.isEmpty() || name.startsWith(" ")) { /* Both \0 and space are seperators and * empty filenames report file not found */ Dos.DOS_SetError(Dos.DOSERR_FILE_NOT_FOUND); - return false; + return true; } String name_int = name; byte[] tempdir=new byte[Dos_system.DOS_PATHLENGTH]; @@ -74,7 +74,7 @@ public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/Shor } if (drive.value>=DOS_DRIVES || drive.value<0 || Drives[drive.value]==null) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND); - return false; + return true; } r=0;w=0; while (r=Dos_system.DOS_PATHLENGTH) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND);return false; } + if (r>=Dos_system.DOS_PATHLENGTH) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND);return true; } upname[w]=0; /* Now parse the new file name to make the final filename */ if (upname[0]!='\\') fullname.value = Drives[drive.value].curdir; @@ -127,7 +127,8 @@ public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/Shor /*Bit32s*/int iDown; boolean dots = true; - /*Bit32s*/int templen=(/*Bit32s*/int)StringHelper.strlen(tempdir); + /*Bit32s*//*Bit32s*/ + int templen= StringHelper.strlen(tempdir); for(iDown=0;(iDown < templen) && dots;iDown++) if(tempdir[iDown] != '.') dots = false; @@ -135,7 +136,8 @@ public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/Shor // only dots? if (dots && (templen > 1)) { /*Bit32s*/int cDots = templen - 1; - for(iDown=(/*Bit32s*/int)fullname.value.length()-1;iDown>=0;iDown--) { + /*Bit32s*/ + for(iDown= fullname.value.length() -1; iDown>=0; iDown--) { if(fullname.value.charAt(iDown)=='\\' || iDown==0) { lastdir = iDown; cDots--; @@ -173,7 +175,7 @@ public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/Shor Dos.DOS_SetError(Dos.DOSERR_FILE_NOT_FOUND); else Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND); - return false; + return true; } ext = ext.substring(0, Math.min(4, ext.length())); @@ -182,7 +184,7 @@ public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/Shor } else tempdir[8]=0; if (fullname.value.length()+StringHelper.strlen(tempdir)>=Dos_system.DOS_PATHLENGTH) { - Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND);return false; + Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND);return true; } fullname.value+=new String(tempdir, 0, StringHelper.strlen(tempdir)); @@ -192,7 +194,7 @@ public static boolean DOS_MakeName(String name, StringRef fullname,/*Bit8u*/Shor } tempdir[w++]=upname[r++]; } - return true; + return false; } public static boolean DOS_GetCurrentDir(/*Bit8u*/short drive,StringRef buffer) { @@ -210,12 +212,12 @@ public static boolean DOS_ChangeDir(String dir) { /*Bit8u*/ShortRef drive=new ShortRef();StringRef fulldir = new StringRef(); String testdir=dir; if (testdir.length()>1 && testdir.charAt(1)==':') testdir = testdir.substring(2); - if (testdir.length()==0) { + if (testdir.isEmpty()) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND); return false; } - if (!DOS_MakeName(dir,fulldir,drive)) return false; - if (fulldir.value.length()>0 && (testdir.length()>1 && testdir.charAt(testdir.length()-1)=='\\')) { + if (DOS_MakeName(dir, fulldir, drive)) return false; + if (!fulldir.value.isEmpty() && (testdir.length()>1 && testdir.charAt(testdir.length()-1)=='\\')) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND); return false; } @@ -230,11 +232,11 @@ public static boolean DOS_ChangeDir(String dir) { public static boolean DOS_MakeDir(String dir) { /*Bit8u*/ShortRef drive=new ShortRef();StringRef fulldir = new StringRef(); - if(dir==null || dir.length()==0 || dir.endsWith("\\")) { + if(dir==null || dir.isEmpty() || dir.endsWith("\\")) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND); return false; } - if (!DOS_MakeName(dir,fulldir,drive)) return false; + if (DOS_MakeName(dir, fulldir, drive)) return false; if(Drives[drive.value].MakeDir(fulldir.value)) return true; /* Determine reason for failing */ @@ -251,7 +253,7 @@ public static boolean DOS_RemoveDir(String dir) { * We never change directory. Everything happens in the drives. */ /*Bit8u*/ShortRef drive=new ShortRef();StringRef fulldir = new StringRef(); - if (!DOS_MakeName(dir,fulldir,drive)) return false; + if (DOS_MakeName(dir, fulldir, drive)) return false; /* Check if exists */ if(!Drives[drive.value].TestDir(fulldir.value)) { Dos.DOS_SetError(Dos.DOSERR_PATH_NOT_FOUND); @@ -276,8 +278,8 @@ public static boolean DOS_RemoveDir(String dir) { static public boolean DOS_Rename(String oldname,String newname) { /*Bit8u*/ShortRef driveold = new ShortRef();StringRef fullold = new StringRef(); /*Bit8u*/ShortRef drivenew = new ShortRef();StringRef fullnew = new StringRef(); - if (!DOS_MakeName(oldname,fullold,driveold)) return false; - if (!DOS_MakeName(newname,fullnew,drivenew)) return false; + if (DOS_MakeName(oldname, fullold, driveold)) return false; + if (DOS_MakeName(newname, fullnew, drivenew)) return false; /* No tricks with devices */ if ( (Dos_devices.DOS_FindDevice(oldname) != Dos_devices.DOS_DEVICES) || (Dos_devices.DOS_FindDevice(newname) != Dos_devices.DOS_DEVICES) ) { @@ -315,12 +317,12 @@ static public boolean DOS_FindFirst(String search,/*Bit16u*/int attr,boolean fcb Dos_DTA dta=new Dos_DTA(Dos.dos.dta()); /*Bit8u*/ShortRef drive=new ShortRef();StringRef fullsearch = new StringRef(); String dir;String pattern; - if(search.length()>0 && search.endsWith("\\") && !( (search.length() > 2) && (search.charAt(search.length() - 2) == ':') && (attr == Dos_system.DOS_ATTR_VOLUME) )) { + if(!search.isEmpty() && search.endsWith("\\") && !( (search.length() > 2) && (search.charAt(search.length() - 2) == ':') && (attr == Dos_system.DOS_ATTR_VOLUME) )) { //Dark Forces installer, but c:\ is allright for volume labels(exclusively set) Dos.DOS_SetError(Dos.DOSERR_NO_MORE_FILES); return false; } - if (!DOS_MakeName(search,fullsearch,drive)) return false; + if (DOS_MakeName(search, fullsearch, drive)) return false; //Check for devices. FindDevice checks for leading subdir as well boolean device = (Dos_devices.DOS_FindDevice(search) != Dos_devices.DOS_DEVICES); @@ -345,9 +347,7 @@ static public boolean DOS_FindFirst(String search,/*Bit16u*/int attr,boolean fcb return true; } - if (Drives[drive.value].FindFirst(dir,dta,fcb_findfirst)) return true; - - return false; + return Drives[drive.value].FindFirst(dir, dta, fcb_findfirst); } static public boolean DOS_FindNext() { @@ -359,8 +359,7 @@ static public boolean DOS_FindNext() { Dos.DOS_SetError(Dos.DOSERR_NO_MORE_FILES); return false; } - if (Drives[i].FindNext(dta)) return true; - return false; + return Drives[i].FindNext(dta); } @@ -380,8 +379,7 @@ public static boolean DOS_ReadFile(/*Bit16u*/int entry,/*Bit8u*/byte[] data,/*Bi return false; } */ - boolean ret=Files[handle].Read(data,amount); - return ret; + return Files[handle].Read(data,amount); } public static boolean DOS_WriteFile(/*Bit16u*/int entry,/*Bit8u*/byte[] data,/*Bit16u*/IntRef amount) { @@ -400,8 +398,7 @@ public static boolean DOS_WriteFile(/*Bit16u*/int entry,/*Bit8u*/byte[] data,/*B return false; } */ - boolean ret=Files[handle].Write(data,amount); - return ret; + return Files[handle].Write(data,amount); } static public boolean DOS_SeekFile(/*Bit16u*/int entry,/*Bit32u*/LongRef pos,/*Bit32u*/int type) { @@ -453,13 +450,12 @@ static public boolean DOS_FlushFile(/*Bit16u*/int entry) { } static private boolean PathExists(String name) { - if(name.lastIndexOf('\\')<0) return true; - if (name.lastIndexOf('\\')==0) return true; + if(name.lastIndexOf('\\')<0) return false; + if (name.lastIndexOf('\\')==0) return false; name = name.substring(0, name.lastIndexOf('\\')); /*Bit8u*/ShortRef drive=new ShortRef();StringRef fulldir=new StringRef(); - if (!DOS_MakeName(name,fulldir,drive)) return false; - if(!Drives[drive.value].TestDir(fulldir.value)) return false; - return true; + if (DOS_MakeName(name, fulldir, drive)) return true; + return !Drives[drive.value].TestDir(fulldir.value); } @@ -472,7 +468,7 @@ static public boolean DOS_CreateFile(String name,/*Bit16u*/int attributes,/*Bit1 if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_FILES,LogSeverities.LOG_NORMAL,"file create attributes "+Integer.toString(attributes, 16)+" file "+name); StringRef fullname = new StringRef();/*Bit8u*/ShortRef drive=new ShortRef(); Dos_PSP psp = new Dos_PSP(Dos.dos.psp()); - if (!DOS_MakeName(name,fullname,drive)) return false; + if (DOS_MakeName(name, fullname, drive)) return false; /* Check for a free file handle */ /*Bit8u*/short handle=DOS_FILES;/*Bit8u*/short i; for (i=0;i=DOS_FILES) { Dos.DOS_SetError(Dos.DOSERR_INVALID_HANDLE); return false; - }; + } if (Files[handle]==null || !Files[handle].IsOpen()) { Dos.DOS_SetError(Dos.DOSERR_INVALID_HANDLE); return false; - }; + } Dos_PSP psp = new Dos_PSP(Dos.dos.psp()); newentry.value = psp.FindFreeFileEntry(); if (newentry.value==0xff) { @@ -735,7 +731,7 @@ static public boolean DOS_ForceDuplicateEntry(/*Bit16u*/int entry,/*Bit16u*/int static public boolean DOS_CreateTempFile(StringRef name,/*Bit16u*/IntRef entry) { - if (name.value.length()==0) { + if (name.value.isEmpty()) { // temp file created in root directory name.value="\\"; } else { @@ -753,10 +749,9 @@ static public boolean DOS_CreateTempFile(StringRef name,/*Bit16u*/IntRef entry) for (i=0;i<8;i++) { tempname.append((char)(Math.abs(r.nextInt()%26)+'A')); } - } while ((!DOS_CreateFile(name.value+tempname.toString(),0,entry)) && (Dos.dos.errorcode==Dos.DOSERR_FILE_ALREADY_EXISTS)); + } while ((!DOS_CreateFile(name.value+ tempname,0,entry)) && (Dos.dos.errorcode==Dos.DOSERR_FILE_ALREADY_EXISTS)); name.value+=tempname; - if (Dos.dos.errorcode!=0) return false; - return true; + return Dos.dos.errorcode == 0; } static private final String FCB_SEP = ":.;,=+"; @@ -784,9 +779,9 @@ static private boolean isvalid(char in){ } Dos_FCB fcb = new Dos_FCB(seg,offset,false); // always a non-extended FCB boolean hasdrive,hasname,hasext,finished; - hasdrive=hasname=hasext=finished=false; - /*Bitu*/int index=0; - /*Bit8u*/short fill=' '; + hasdrive=hasname=hasext= false; + /*Bitu*/int index; + /*Bit8u*/short fill; StringRef fcb_name = new StringRef(); /* Get the old information from the previous fcb */ fcb.GetName(fcb_name); @@ -799,17 +794,17 @@ static private boolean isvalid(char in){ b = fcb_name.value.substring(fcb_name.value.lastIndexOf('.')+1).getBytes(); System.arraycopy(b, 0, ext, 0, Math.min(b.length, ext.length)); /* Strip of the leading sepetaror */ - if((parser & PARSE_SEP_STOP)!=0 && string.length()>0) { //ignore leading seperator + if((parser & PARSE_SEP_STOP)!=0 && !string.isEmpty()) { //ignore leading seperator if (FCB_SEP.indexOf(string.charAt(0))>=0) string = string.substring(1); } /* strip leading spaces */ - while(string.length()>0 && ((string.charAt(0)==' ')||(string.charAt(0)=='\t'))) string=string.substring(1); + while(!string.isEmpty() && ((string.charAt(0)==' ')||(string.charAt(0)=='\t'))) string=string.substring(1); /* Check for a drive */ if (string.length()>1 && string.charAt(1)==':') { drive = 0; hasdrive=true; char d = string.substring(0,1).toUpperCase().charAt(0); - if (d>='A' && d<='Z' && Drives[(int)(d-'A')]!=null) { + if (d>='A' && d<='Z' && Drives[d-'A']!=null) { drive=(char)(d-'A'+1); } else ret=0xff; string = string.substring(2); @@ -820,9 +815,9 @@ static private boolean isvalid(char in){ string = string.substring(p+1); boolean skipext = false; /* Special checks for . and .. */ - if (string.length()>0 && string.charAt(0)=='.') { + if (!string.isEmpty() && string.charAt(0)=='.') { string=string.substring(1); - if (string.length()==0) { + if (string.isEmpty()) { hasname=true; ret=PARSE_RET_NOWILD; name=". ".getBytes(); @@ -839,7 +834,7 @@ else if (string.charAt(0)=='.' && string.length()==1) { // :TODO was else if (st /* Copy the name */ hasname=true;finished=false;fill=' ';index=0; while (index<8) { - if (!finished && string.length()>0) { + if (!finished && !string.isEmpty()) { if (string.charAt(0)=='*') {fill='?';name[index]='?';if (ret==0) ret=1;finished=true;} else if (string.charAt(0)=='?') {name[index]='?';if (ret==0) ret=1;} else if (isvalid(string.charAt(0))) {name[index]=(byte)string.toUpperCase().charAt(0);} @@ -850,7 +845,7 @@ else if (string.charAt(0)=='.' && string.length()==1) { // :TODO was else if (st } index++; } - if (string.length()>0) { + if (!string.isEmpty()) { if (string.charAt(0)!='.') skipext = true; else string=string.substring(1); } @@ -859,7 +854,7 @@ else if (string.charAt(0)=='.' && string.length()==1) { // :TODO was else if (st /* Copy the extension */ hasext=true;finished=false;fill=' ';index=0; while (index<3) { - if (!finished && string.length()>0) { + if (!finished && !string.isEmpty()) { if (string.charAt(0)=='*') {fill='?';ext[index]='?';finished=true;} else if (string.charAt(0)=='?') {ext[index]='?';if (ret==0) ret=1;} else if (isvalid(string.charAt(0))) {ext[index]=(byte)string.toUpperCase().charAt(0);} @@ -928,7 +923,7 @@ public static boolean DOS_FCBOpen(/*Bit16u*/int seg,/*Bit16u*/int offset) { /* First check if the name is correct */ /*Bit8u*/ShortRef drive=new ShortRef(); StringRef fullname=new StringRef(); - if (!DOS_MakeName(shortname.value,fullname,drive)) return false; + if (DOS_MakeName(shortname.value, fullname, drive)) return false; /* Check, if file is already opened */ for (/*Bit8u*/short i=0;isize.value) size.value=pos.value+towrite.value; //time doesn't keep track of endofday date.value = Dos.DOS_PackDate(Dos.dos.date.year,Dos.dos.date.month,Dos.dos.date.day); - /*Bit32u*/long ticks = Memory.mem_readd(Bios.BIOS_TIMER) & 0xFFFFFFFFl; + /*Bit32u*/long ticks = Memory.mem_readd(Bios.BIOS_TIMER) & 0xFFFFFFFFL; /*Bit32u*/long seconds = (ticks*10)/182; /*Bit16u*/int hour = (/*Bit16u*/int)(seconds/3600); /*Bit16u*/int min = (/*Bit16u*/int)((seconds % 3600)/60); @@ -1042,21 +1037,21 @@ public static boolean DOS_FCBFindNext(/*Bit16u*/int seg,/*Bit16u*/int offset) { return FCB_SUCCESS; } - public static /*Bit8u*/short DOS_FCBIncreaseSize(/*Bit16u*/int seg,/*Bit16u*/int offset) { + public static /*Bit8u*/void DOS_FCBIncreaseSize(/*Bit16u*/int seg,/*Bit16u*/int offset) { Dos_FCB fcb=new Dos_FCB(seg,offset); /*Bit8u*/ShortRef fhandle=new ShortRef(),cur_rec=new ShortRef();/*Bit16u*/IntRef cur_block=new IntRef(0),rec_size=new IntRef(0); fcb.GetSeqData(fhandle,rec_size); fcb.GetRecord(cur_block,cur_rec); - /*Bit32u*/LongRef pos=new LongRef(((cur_block.value*128)+cur_rec.value)*rec_size.value); - if (!DOS_SeekFile(fhandle.value,pos,DOS_SEEK_SET)) return FCB_ERR_WRITE; + /*Bit32u*/LongRef pos=new LongRef(((cur_block.value* 128L)+cur_rec.value)*rec_size.value); + if (!DOS_SeekFile(fhandle.value,pos,DOS_SEEK_SET)) return; /*Bit16u*/IntRef towrite=new IntRef(0); - if (!DOS_WriteFile(fhandle.value,Dos.dos_copybuf,towrite)) return FCB_ERR_WRITE; + if (!DOS_WriteFile(fhandle.value,Dos.dos_copybuf,towrite)) return; /*Bit32u*/LongRef size=new LongRef(0);/*Bit16u*/IntRef date=new IntRef(0),time=new IntRef(0); fcb.GetSizeDateTime(size,date,time); if (pos.value+towrite.value>size.value) size.value=pos.value+towrite.value; //time doesn't keep track of endofday date.value = Dos.DOS_PackDate(Dos.dos.date.year,Dos.dos.date.month,Dos.dos.date.day); - /*Bit32u*/long ticks = Memory.mem_readd(Bios.BIOS_TIMER) & 0xFFFFFFFFl; + /*Bit32u*/long ticks = Memory.mem_readd(Bios.BIOS_TIMER) & 0xFFFFFFFFL; /*Bit32u*/long seconds = (ticks*10)/182; /*Bit16u*/int hour = (/*Bit16u*/int)(seconds/3600); /*Bit16u*/int min = (/*Bit16u*/int)((seconds % 3600)/60); @@ -1067,7 +1062,6 @@ public static boolean DOS_FCBFindNext(/*Bit16u*/int seg,/*Bit16u*/int offset) { Files[temp].date=date.value; fcb.SetSizeDateTime(size.value,date.value,time.value); fcb.SetRecord(cur_block.value,cur_rec.value); - return FCB_SUCCESS; } public static /*Bit8u*/short DOS_FCBRandomRead(/*Bit16u*/int seg,/*Bit16u*/int offset,/*Bit16u*/IntRef numRec,boolean restore) { @@ -1100,7 +1094,7 @@ public static boolean DOS_FCBFindNext(/*Bit16u*/int seg,/*Bit16u*/int offset) { fcb.GetRecord(new_block,new_rec); if (restore) fcb.SetRecord(old_block.value,old_rec.value); /* Update the random record pointer with new position only when restore is false*/ - if(!restore) fcb.SetRandom(new_block.value*128+new_rec.value); + if(!restore) fcb.SetRandom(new_block.value* 128L +new_rec.value); return error; } @@ -1131,7 +1125,7 @@ public static boolean DOS_FCBFindNext(/*Bit16u*/int seg,/*Bit16u*/int offset) { fcb.GetRecord(new_block,new_rec); if (restore) fcb.SetRecord(old_block.value,old_rec.value); /* Update the random record pointer with new position only when restore is false */ - if(!restore) fcb.SetRandom(new_block.value*128+new_rec.value); + if(!restore) fcb.SetRandom(new_block.value* 128L +new_rec.value); return error; } @@ -1156,9 +1150,9 @@ public static boolean DOS_FCBDeleteFile(/*Bit16u*/int seg,/*Bit16u*/int offset){ * To get this: the dta is set to temporary dta in which found files are * stored. This can not be the tempdta as that one is used by fcbfindfirst */ - /*RealPt*/int old_dta=Dos.dos.dta();Dos.dos.dta((int)Dos.dos.tables.tempdta_fcbdelete); + /*RealPt*/int old_dta=Dos.dos.dta();Dos.dos.dta(Dos.dos.tables.tempdta_fcbdelete); /*RealPt*/int new_dta=Dos.dos.dta(); - boolean nextfile = false; + boolean nextfile; boolean return_value = false; nextfile = DOS_FCBFindFirst(seg,offset); Dos_FCB fcb=new Dos_FCB(Memory.RealSeg(new_dta),Memory.RealOff(new_dta)); @@ -1169,21 +1163,21 @@ public static boolean DOS_FCBDeleteFile(/*Bit16u*/int seg,/*Bit16u*/int offset){ if(!return_value && res) return_value = true; //at least one file deleted nextfile = DOS_FCBFindNext(seg,offset); } - Dos.dos.dta((int)old_dta); /*Restore dta */ + Dos.dos.dta(old_dta); /*Restore dta */ return return_value; } public static boolean DOS_FCBRenameFile(/*Bit16u*/int seg, /*Bit16u*/int offset){ Dos_FCB fcbold=new Dos_FCB(seg,offset); Dos_FCB fcbnew=new Dos_FCB(seg,offset+16); - if(!fcbold.Valid()) return false; + if(fcbold.Valid()) return false; StringRef oldname=new StringRef(); StringRef newname = new StringRef(); fcbold.GetName(oldname);fcbnew.GetName(newname); /* Check, if sourcefile is still open. This was possible in DOS, but modern oses don't like this */ ShortRef drive = new ShortRef(0); StringRef fullname = new StringRef(); - if (!DOS_MakeName(oldname.value,fullname,drive)) return false; + if (DOS_MakeName(oldname.value, fullname, drive)) return false; Dos_PSP psp = new Dos_PSP(Dos.dos.psp()); for (short i=0;i= DOS_DRIVES || Drives[drive]==null) { Dos.DOS_SetError(Dos.DOSERR_INVALID_DRIVE); - return false; + return true; } /*Bit16u*/IntRef _free_clusters=new IntRef(0); Drives[drive].AllocationInfo(_bytes_sector,_sectors_cluster,_total_clusters,_free_clusters); CPU_Regs.SegSet16DS(Memory.RealSeg(Dos.dos.tables.mediaid)); CPU_Regs.reg_ebx.word(Memory.RealOff(Dos.dos.tables.mediaid+drive*2)); - return true; + return false; } public static boolean DOS_SetDrive(/*Bit8u*/short drive) { diff --git a/jdosbox/src/main/java/jdos/dos/Dos_ioctl.java b/jdosbox/src/main/java/jdos/dos/Dos_ioctl.java index 28a76b13..5ff0f883 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_ioctl.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_ioctl.java @@ -1,6 +1,5 @@ package jdos.dos; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.hardware.Memory; import jdos.misc.Log; @@ -68,7 +67,7 @@ static public boolean DOS_IOCTL() { case 0x02: /* Read from Device Control Channel */ if ((Dos_files.Files[handle].GetInformation() & 0xc000)!=0) { /* is character device with IOCTL support */ - /*PhysPt*/int bufptr= Memory.PhysMake((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_edx.word()); + /*PhysPt*/int bufptr= Memory.PhysMake(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_edx.word()); /*Bit16u*/IntRef retcode=new IntRef(0); if (((DOS_Device)(Dos_files.Files[handle])).ReadFromControlChannel(bufptr,CPU_Regs.reg_ecx.word(),retcode)) { CPU_Regs.reg_eax.word(retcode.value); @@ -80,7 +79,7 @@ static public boolean DOS_IOCTL() { case 0x03: /* Write to Device Control Channel */ if ((Dos_files.Files[handle].GetInformation() & 0xc000)!=0) { /* is character device with IOCTL support */ - /*PhysPt*/int bufptr=Memory.PhysMake((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_edx.word()); + /*PhysPt*/int bufptr=Memory.PhysMake(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_edx.word()); /*Bit16u*/IntRef retcode=new IntRef(0); if (((DOS_Device)(Dos_files.Files[handle])).WriteToControlChannel(bufptr,CPU_Regs.reg_ecx.word(),retcode)) { CPU_Regs.reg_eax.word(retcode.value); @@ -180,7 +179,7 @@ static public boolean DOS_IOCTL() { byte[] buf2={ 'F','A','T','1','6',' ',' ',' '}; if(drive<2) buf2[4] = '2'; //FAT12 for floppies - Memory.mem_writew(ptr+0,0); // 0 + Memory.mem_writew(ptr,0); // 0 Memory.mem_writed(ptr+2,0x1234); //Serial number Memory.MEM_BlockWrite(ptr+6,new String(buffer),11);//volumename if(CPU_Regs.reg_ecx.low() == 0x66) Memory.MEM_BlockWrite(ptr+0x11, new String(buf2),8);//filesystem @@ -215,7 +214,6 @@ static public boolean DOS_IOCTL() { static public boolean DOS_GetSTDINStatus() { /*Bit32u*/int handle=Dos.RealHandle(Dos_files.STDIN); if (handle==0xFF) return false; - if (Dos_files.Files[handle]!=null && (Dos_files.Files[handle].GetInformation() & 64)!=0) return false; - return true; + return Dos_files.Files[handle] == null || (Dos_files.Files[handle].GetInformation() & 64) == 0; } } diff --git a/jdosbox/src/main/java/jdos/dos/Dos_keyboard_layout.java b/jdosbox/src/main/java/jdos/dos/Dos_keyboard_layout.java index 06af674e..e587e0c3 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_keyboard_layout.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_keyboard_layout.java @@ -1004,7 +1004,7 @@ static private class keyboard_layout { // } // // - static private keyboard_layout loaded_layout=null; + static private final keyboard_layout loaded_layout=null; // //// CTRL-ALT-F2 switches between foreign and US-layout using this function ///* static void switch_keyboard_layout(bool pressed) { diff --git a/jdosbox/src/main/java/jdos/dos/Dos_memory.java b/jdosbox/src/main/java/jdos/dos/Dos_memory.java index 0cce7b86..96c5d913 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_memory.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_memory.java @@ -25,7 +25,8 @@ static private void DOS_CompressMemory() { Dos_MCB mcb_next = new Dos_MCB(0); while (mcb.GetType()!=0x5a) { - mcb_next.SetPt((/*Bit16u*/int)(mcb_segment+mcb.GetSize()+1)); + /*Bit16u*/ + mcb_next.SetPt(mcb_segment+mcb.GetSize()+1); if ((mcb.GetPSPSeg()==0) && (mcb_next.GetPSPSeg()==0)) { mcb.SetSize(mcb.GetSize()+mcb_next.GetSize()+1); mcb.SetType(mcb_next.GetType()); @@ -121,7 +122,8 @@ public static boolean DOS_AllocateMemory(/*Bit16u*/IntRef segment,/*Bit16u*/IntR } else { switch (mem_strat & 0x3f) { case 0: /* firstfit */ - mcb_next.SetPt((/*Bit16u*/int)(mcb_segment+blocks.value+1)); + /*Bit16u*/ + mcb_next.SetPt(mcb_segment+blocks.value+1); mcb_next.SetPSPSeg(MCB_FREE); mcb_next.SetType(mcb.GetType()); mcb_next.SetSize(block_size-blocks.value-1); @@ -161,7 +163,8 @@ public static boolean DOS_AllocateMemory(/*Bit16u*/IntRef segment,/*Bit16u*/IntR /* bestfit, allocate block at the beginning of the MCB */ mcb.SetPt(found_seg); - mcb_next.SetPt((/*Bit16u*/int)(found_seg+blocks.value+1)); + /*Bit16u*/ + mcb_next.SetPt(found_seg+blocks.value+1); mcb_next.SetPSPSeg(MCB_FREE); mcb_next.SetType(mcb.GetType()); mcb_next.SetSize(found_seg_size-blocks.value-1); @@ -184,7 +187,8 @@ public static boolean DOS_AllocateMemory(/*Bit16u*/IntRef segment,/*Bit16u*/IntR return true; } segment.value = found_seg+1+found_seg_size - blocks.value; - mcb_next.SetPt((/*Bit16u*/int)(segment.value-1)); + /*Bit16u*/ + mcb_next.SetPt(segment.value-1); mcb_next.SetSize(blocks.value); mcb_next.SetType(mcb.GetType()); mcb_next.SetPSPSeg(Dos.dos.psp()); @@ -251,7 +255,8 @@ static public boolean DOS_ResizeMemory(/*Bit16u*/int segment,/*Bit16u*/IntRef bl mcb.SetType(mcb_next.GetType()); } mcb.SetSize(blocks.value); - mcb_next.SetPt((/*Bit16u*/int)(segment+blocks.value)); + /*Bit16u*/ + mcb_next.SetPt(segment+blocks.value); mcb_next.SetSize(total-blocks.value-1); mcb_next.SetType(mcb.GetType()); mcb_next.SetPSPSeg(MCB_FREE); @@ -320,7 +325,8 @@ static public void DOS_BuildUMBChain(boolean umb_active,boolean ems_active) { /* A system MCB has to cover the space between the regular MCB-chain and the UMBs */ - /*Bit16u*/int cover_mcb=(/*Bit16u*/int)(mcb_segment+mcb.GetSize()+1); + /*Bit16u*//*Bit16u*/ + int cover_mcb= mcb_segment+mcb.GetSize()+1; mcb.SetPt(cover_mcb); mcb.SetType((short)0x4d); mcb.SetPSPSeg(0x0008); @@ -368,14 +374,14 @@ static public boolean DOS_LinkUMBsToMemChain(/*Bit16u*/int linkstate) { } break; default: - Log.log_msg("Invalid link state "+Integer.toString(linkstate, 16)+" when reconfiguring MCB chain"); + System.out.println("Invalid link state "+Integer.toString(linkstate, 16)+" when reconfiguring MCB chain"); return false; } return true; } - static private Callback.Handler DOS_default_handler = new Callback.Handler() { + static private final Callback.Handler DOS_default_handler = new Callback.Handler() { public String getName() { return "Dos_memory.DOS_default_handler"; } @@ -394,7 +400,7 @@ static public void DOS_SetupMemory() { callbackhandler.Allocate(DOS_default_handler,"DOS default int"); /*Bit16u*/int ihseg = 0x70; /*Bit16u*/int ihofs = 0x08; - Memory.real_writeb(ihseg,ihofs+0x00,0xFE); //GRP 4 + Memory.real_writeb(ihseg, ihofs,0xFE); //GRP 4 Memory.real_writeb(ihseg,ihofs+0x01,0x38); //Extra Callback instruction Memory.real_writew(ihseg,ihofs+0x02,callbackhandler.Get_callback()); //The immediate word Memory.real_writeb(ihseg,ihofs+0x04,0xCF); //An IRET Instruction @@ -405,7 +411,8 @@ static public void DOS_SetupMemory() { // RealSetVec(0x0f,RealMake(ihseg,ihofs)); //Always a tricky one (soundblaster irq) // Create a dummy device MCB with PSPSeg=0x0008 - Dos_MCB mcb_devicedummy=new Dos_MCB((/*Bit16u*/int)Dos.DOS_MEM_START); + /*Bit16u*/ + Dos_MCB mcb_devicedummy=new Dos_MCB(Dos.DOS_MEM_START); mcb_devicedummy.SetPSPSeg(MCB_DOS); // Devices mcb_devicedummy.SetSize(1); mcb_devicedummy.SetType((short)0x4d); // More blocks will follow @@ -413,20 +420,23 @@ static public void DOS_SetupMemory() { /*Bit16u*/int mcb_sizes=2; // Create a small empty MCB (result from a growing environment block) - Dos_MCB tempmcb=new Dos_MCB((/*Bit16u*/int)Dos.DOS_MEM_START+mcb_sizes); + /*Bit16u*/ + Dos_MCB tempmcb=new Dos_MCB(Dos.DOS_MEM_START +mcb_sizes); tempmcb.SetPSPSeg(MCB_FREE); tempmcb.SetSize(4); mcb_sizes+=5; tempmcb.SetType((short)0x4d); // Lock the previous empty MCB - Dos_MCB tempmcb2=new Dos_MCB((/*Bit16u*/int)Dos.DOS_MEM_START+mcb_sizes); + /*Bit16u*/ + Dos_MCB tempmcb2=new Dos_MCB(Dos.DOS_MEM_START +mcb_sizes); tempmcb2.SetPSPSeg(0x40); // can be removed by loadfix tempmcb2.SetSize(16); mcb_sizes+=17; tempmcb2.SetType((short)0x4d); - Dos_MCB mcb=new Dos_MCB((/*Bit16u*/int)Dos.DOS_MEM_START+mcb_sizes); + /*Bit16u*/ + Dos_MCB mcb=new Dos_MCB(Dos.DOS_MEM_START +mcb_sizes); mcb.SetPSPSeg(MCB_FREE); //Free mcb.SetType((short)0x5a); //Last Block if (Dosbox.machine==MachineType.MCH_TANDY) { @@ -435,13 +445,15 @@ static public void DOS_SetupMemory() { mcb.SetSize(0x9BFF - Dos.DOS_MEM_START - mcb_sizes); } else if (Dosbox.machine==MachineType.MCH_PCJR) { /* memory from 128k to 640k is available */ - mcb_devicedummy.SetPt((/*Bit16u*/int)0x2000); + /*Bit16u*/ + mcb_devicedummy.SetPt(0x2000); mcb_devicedummy.SetPSPSeg(MCB_FREE); mcb_devicedummy.SetSize(0x9FFF - 0x2000); mcb_devicedummy.SetType((short)0x5a); /* exclude PCJr graphics region */ - mcb_devicedummy.SetPt((/*Bit16u*/int)0x17ff); + /*Bit16u*/ + mcb_devicedummy.SetPt(0x17ff); mcb_devicedummy.SetPSPSeg(MCB_DOS); mcb_devicedummy.SetSize(0x800); mcb_devicedummy.SetType((short)0x4d); diff --git a/jdosbox/src/main/java/jdos/dos/Dos_misc.java b/jdosbox/src/main/java/jdos/dos/Dos_misc.java index 136efd9e..fa4f4dfa 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_misc.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_misc.java @@ -21,7 +21,7 @@ static public void DOS_DelMultiplexHandler(Dos_system.MultiplexHandler handler) Multiplex.remove(handler); } - static private Callback.Handler INT2F_Handler = new Callback.Handler() { + static private final Callback.Handler INT2F_Handler = new Callback.Handler() { public String getName() { return "Dos_misc.INT2F_Handler"; } @@ -36,7 +36,7 @@ public String getName() { } }; - static private Callback.Handler INT2A_Handler = new Callback.Handler() { + static private final Callback.Handler INT2A_Handler = new Callback.Handler() { public String getName() { return "Dos_misc.INT2A_Handler"; } @@ -45,150 +45,152 @@ public String getName() { } }; - static Dos_system.MultiplexHandler DOS_MultiplexFunctions = new Dos_system.MultiplexHandler() { - public boolean call() { - switch (CPU_Regs.reg_eax.word()) { - case 0x1216: /* GET ADDRESS OF SYSTEM FILE TABLE ENTRY */ - // reg_bx is a system file table entry, should coincide with - // the file handle so just use that - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_DOSMISC,LogSeverities.LOG_ERROR,"Some BAD filetable call used bx="+Integer.toString(CPU_Regs.reg_ebx.word(),16)); - if(CPU_Regs.reg_ebx.word() <= Dos_files.DOS_FILES) Callback.CALLBACK_SCF(false); - else Callback.CALLBACK_SCF(true); - if (CPU_Regs.reg_ebx.word()<16) { - /*RealPt*/int sftrealpt= Memory.mem_readd(Memory.Real2Phys(Dos.dos_infoblock.GetPointer()) + 4); - /*PhysPt*/int sftptr=Memory.Real2Phys(sftrealpt); - /*Bitu*/int sftofs=0x06+CPU_Regs.reg_ebx.word()*0x3b; - - if (Dos_files.Files[CPU_Regs.reg_ebx.word()]!=null) Memory.mem_writeb(sftptr+sftofs,Dos_files.Files[CPU_Regs.reg_ebx.word()].refCtr); - else Memory.mem_writeb(sftptr+sftofs,0); - - if (Dos_files.Files[CPU_Regs.reg_ebx.word()]==null) return true; - - /*Bit32u*/long handle=Dos.RealHandle(CPU_Regs.reg_ebx.word()); - if (handle>=Dos_files.DOS_FILES) { - Memory.mem_writew(sftptr+sftofs+0x02,0x02); // file open mode - Memory.mem_writeb(sftptr+sftofs+0x04,0x00); // file attribute - Memory.mem_writew(sftptr+sftofs+0x05,Dos_files.Files[CPU_Regs.reg_ebx.word()].GetInformation()); // device info word - Memory.mem_writed(sftptr+sftofs+0x07,0); // device driver header - Memory.mem_writew(sftptr+sftofs+0x0d,0); // packed time - Memory.mem_writew(sftptr+sftofs+0x0f,0); // packed date - Memory.mem_writew(sftptr+sftofs+0x11,0); // size - Memory.mem_writew(sftptr+sftofs+0x15,0); // current position - } else { - /*Bit8u*/short drive=Dos_files.Files[CPU_Regs.reg_ebx.word()].GetDrive(); - - Memory.mem_writew(sftptr+sftofs+0x02,(/*Bit16u*/int)(Dos_files.Files[CPU_Regs.reg_ebx.word()].flags&3)); // file open mode - Memory.mem_writeb(sftptr+sftofs+0x04,(/*Bit8u*/short)(Dos_files.Files[CPU_Regs.reg_ebx.word()].attr)); // file attribute - Memory.mem_writew(sftptr+sftofs+0x05,0x40|drive); // device info word - Memory.mem_writed(sftptr+sftofs+0x07,Memory.RealMake(Dos.dos.tables.dpb,drive)); // dpb of the drive - Memory.mem_writew(sftptr+sftofs+0x0d,Dos_files.Files[CPU_Regs.reg_ebx.word()].time); // packed file time - Memory.mem_writew(sftptr+sftofs+0x0f,Dos_files.Files[CPU_Regs.reg_ebx.word()].date); // packed file date - /*Bit32u*/LongRef curpos=new LongRef(0); - Dos_files.Files[CPU_Regs.reg_ebx.word()].Seek(curpos,Dos_files.DOS_SEEK_CUR); - /*Bit32u*/LongRef endpos=new LongRef(0); - Dos_files.Files[CPU_Regs.reg_ebx.word()].Seek(endpos,Dos_files.DOS_SEEK_END); - Memory.mem_writed(sftptr+sftofs+0x11,(int)endpos.value); // size - Memory.mem_writed(sftptr+sftofs+0x15,(int)curpos.value); // current position - Dos_files.Files[CPU_Regs.reg_ebx.word()].Seek(curpos,Dos_files.DOS_SEEK_SET); - } - - // fill in filename in fcb style - // (space-padded name (8 chars)+space-padded extension (3 chars)) - String filename=Dos_files.Files[CPU_Regs.reg_ebx.word()].GetName(); - if (filename.endsWith("\\") || filename.endsWith("/")) return true; - if (filename.lastIndexOf('\\')>=0) filename=filename.substring(filename.lastIndexOf('\\')+1); - if (filename.lastIndexOf('/')>=0) filename=filename.substring(filename.lastIndexOf('/')+1); - int dotpos=filename.lastIndexOf('.'); - if (dotpos>=0) { - dotpos++; - int nlen=filename.length(); - int extlen=filename.length()-dotpos; - int nmelen=nlen-extlen; - if (nmelen<1) return true; - nlen-=(extlen+1); - - if (nlen>8) nlen=8; - int i; - - for (i=0; i3) extlen=3; - for (i=0; i8) nlen=8; - for (i=0; i { + switch (CPU_Regs.reg_eax.word()) { + case 0x1216: /* GET ADDRESS OF SYSTEM FILE TABLE ENTRY */ + // reg_bx is a system file table entry, should coincide with + // the file handle so just use that + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_DOSMISC,LogSeverities.LOG_ERROR,"Some BAD filetable call used bx="+Integer.toString(CPU_Regs.reg_ebx.word(),16)); + Callback.CALLBACK_SCF(CPU_Regs.reg_ebx.word() > Dos_files.DOS_FILES); + if (CPU_Regs.reg_ebx.word()<16) { + /*RealPt*/int sftrealpt= Memory.mem_readd(Memory.Real2Phys(Dos.dos_infoblock.GetPointer()) + 4); + /*PhysPt*/int sftptr=Memory.Real2Phys(sftrealpt); + /*Bitu*/int sftofs=0x06+CPU_Regs.reg_ebx.word()*0x3b; + + if (Dos_files.Files[CPU_Regs.reg_ebx.word()]!=null) Memory.mem_writeb(sftptr+sftofs,Dos_files.Files[CPU_Regs.reg_ebx.word()].refCtr); + else Memory.mem_writeb(sftptr+sftofs,0); + + if (Dos_files.Files[CPU_Regs.reg_ebx.word()]==null) return true; + + /*Bit32u*/long handle=Dos.RealHandle(CPU_Regs.reg_ebx.word()); + if (handle>=Dos_files.DOS_FILES) { + Memory.mem_writew(sftptr+sftofs+0x02,0x02); // file open mode + Memory.mem_writeb(sftptr+sftofs+0x04,0x00); // file attribute + Memory.mem_writew(sftptr+sftofs+0x05,Dos_files.Files[CPU_Regs.reg_ebx.word()].GetInformation()); // device info word + Memory.mem_writed(sftptr+sftofs+0x07,0); // device driver header + Memory.mem_writew(sftptr+sftofs+0x0d,0); // packed time + Memory.mem_writew(sftptr+sftofs+0x0f,0); // packed date + Memory.mem_writew(sftptr+sftofs+0x11,0); // size + Memory.mem_writew(sftptr+sftofs+0x15,0); // current position + } else { + /*Bit8u*/short drive=Dos_files.Files[CPU_Regs.reg_ebx.word()].GetDrive(); + + Memory.mem_writew(sftptr+sftofs+0x02,(/*Bit16u*/int)(Dos_files.Files[CPU_Regs.reg_ebx.word()].flags&3)); // file open mode + Memory.mem_writeb(sftptr+sftofs+0x04,(/*Bit8u*/short)(Dos_files.Files[CPU_Regs.reg_ebx.word()].attr)); // file attribute + Memory.mem_writew(sftptr+sftofs+0x05,0x40|drive); // device info word + Memory.mem_writed(sftptr+sftofs+0x07,Memory.RealMake(Dos.dos.tables.dpb,drive)); // dpb of the drive + Memory.mem_writew(sftptr+sftofs+0x0d,Dos_files.Files[CPU_Regs.reg_ebx.word()].time); // packed file time + Memory.mem_writew(sftptr+sftofs+0x0f,Dos_files.Files[CPU_Regs.reg_ebx.word()].date); // packed file date + /*Bit32u*/LongRef curpos=new LongRef(0); + Dos_files.Files[CPU_Regs.reg_ebx.word()].Seek(curpos,Dos_files.DOS_SEEK_CUR); + /*Bit32u*/LongRef endpos=new LongRef(0); + Dos_files.Files[CPU_Regs.reg_ebx.word()].Seek(endpos,Dos_files.DOS_SEEK_END); + Memory.mem_writed(sftptr+sftofs+0x11,(int)endpos.value); // size + Memory.mem_writed(sftptr+sftofs+0x15,(int)curpos.value); // current position + Dos_files.Files[CPU_Regs.reg_ebx.word()].Seek(curpos,Dos_files.DOS_SEEK_SET); } - return true; - case 0x1607: - if (CPU_Regs.reg_ebx.word() == 0x15) { - switch (CPU_Regs.reg_ecx.word()) { - case 0x0000: // query instance - CPU_Regs.reg_ecx.word(0x0001); - CPU_Regs.reg_edx.word(0x50); // dos driver segment - CPU_Regs.SegSet16ES(0x50); // patch table seg - CPU_Regs.reg_ebx.word(0x60); // patch table ofs - return true; - case 0x0001: // set patches + + // fill in filename in fcb style + // (space-padded name (8 chars)+space-padded extension (3 chars)) + String filename=Dos_files.Files[CPU_Regs.reg_ebx.word()].GetName(); + if (filename.endsWith("\\") || filename.endsWith("/")) return true; + if (filename.lastIndexOf('\\')>=0) filename=filename.substring(filename.lastIndexOf('\\')+1); + if (filename.lastIndexOf('/')>=0) filename=filename.substring(filename.lastIndexOf('/')+1); + int dotpos=filename.lastIndexOf('.'); + if (dotpos>=0) { + dotpos++; + int nlen=filename.length(); + int extlen=filename.length()-dotpos; + int nmelen=nlen-extlen; + if (nmelen<1) return true; + nlen-=(extlen+1); + + if (nlen>8) nlen=8; + int i; + + /*PhysPt*/ + for (i=0; i3) extlen=3; + /*PhysPt*/ + for (i=0; i8) nlen=8; + /*PhysPt*/ + for (i=0; i65534) free_size_cyl=65534; if (total_size_cyl65534) total_size_cyl=65534; // freesize in mb - str_size = "512,32,"+String.valueOf(total_size_cyl)+",65535,"+String.valueOf(free_size_cyl); + str_size = "512,32,"+ total_size_cyl +",65535,"+ free_size_cyl; } } { String s = cmd.FindString("-size",true); - if (s!=null && s.length()!=0) str_size = s; + if (s!=null && !s.isEmpty()) str_size = s; } { @@ -217,7 +221,7 @@ public void Run() { temp_line=cmd.FindCommand(2); if (temp_line==null) break; - if (temp_line.length()==0) break; + if (temp_line.isEmpty()) break; temp_line = FileHelper.resolve_path(temp_line); File temp_file = new File(temp_line); if (!temp_file.exists()) { @@ -236,7 +240,6 @@ public void Run() { int num = -1; Integer tmp_num = cmd.FindInt("-usecd",true); if (tmp_num != null) { - num = tmp_num.intValue(); } IntRef error = new IntRef(0); if (cmd.FindExist("-aspi",false)) { @@ -299,14 +302,14 @@ public void Run() { return; } if (Dos_files.Drives[drive-'A']!=null) { - WriteOut(Msg.get("PROGRAM_MOUNT_ALREADY_MOUNTED"),new Object[]{new Character(drive),Dos_files.Drives[drive-'A'].GetInfo()}); + WriteOut(Msg.get("PROGRAM_MOUNT_ALREADY_MOUNTED"),new Object[]{drive,Dos_files.Drives[drive-'A'].GetInfo()}); return; } if (newdrive==null) Log.exit("DOS:Can't create drive"); Dos_files.Drives[drive-'A']=newdrive; /* Set the correct media byte in the table */ Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid)+(drive-'A')*2,newdrive.GetMediaByte()); - WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"),new Object[]{new Character(drive),newdrive.GetInfo()}); + WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"),new Object[]{drive,newdrive.GetInfo()}); /* check if volume label is given and don't allow it to updated in the future */ if ((label=cmd.FindString("-label",true))!=null) newdrive.dirCache.SetLabel(label,iscdrom,false); /* For hard drives set the label to DRIVELETTER_Drive. @@ -327,11 +330,7 @@ else if(type.equals("dir")) { } } - static private Program.PROGRAMS_Main MOUNT_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new MOUNT(); - } - }; + static private final Program.PROGRAMS_Main MOUNT_ProgramStart = () -> new MOUNT(); private static class MEM extends Program { public void Run() { @@ -349,8 +348,8 @@ public void Run() { /*Bit16u*/IntRef seg=new IntRef(0),blocks=new IntRef(0xffff); Dos_memory.DOS_AllocateMemory(seg,blocks); if ((Dosbox.machine== MachineType.MCH_PCJR) && (Memory.real_readb(0x2000,0)==0x5a) && (Memory.real_readw(0x2000,1)==0) && (Memory.real_readw(0x2000,3)==0x7ffe)) { - WriteOut(Msg.get("PROGRAM_MEM_CONVEN"),new Object[]{new Integer(0x7ffe*16/1024)}); - } else WriteOut(Msg.get("PROGRAM_MEM_CONVEN"),new Object[]{new Integer(blocks.value*16/1024)}); + WriteOut(Msg.get("PROGRAM_MEM_CONVEN"),new Object[]{0x7ffe * 16 / 1024}); + } else WriteOut(Msg.get("PROGRAM_MEM_CONVEN"),new Object[]{blocks.value * 16 / 1024}); if (umb_start!=0xffff) { Dos_memory.DOS_LinkUMBsToMemChain(1); @@ -370,18 +369,18 @@ public void Run() { if ((current_umb_flag&1)!=(umb_flag&1)) Dos_memory.DOS_LinkUMBsToMemChain(umb_flag); Dos_memory.DOS_SetMemAllocStrategy(old_memstrat); // restore strategy - if (block_count>0) WriteOut(Msg.get("PROGRAM_MEM_UPPER"),new Object[]{new Integer(total_blocks*16/1024),new Integer(block_count),new Integer(largest_block*16/1024)}); + if (block_count>0) WriteOut(Msg.get("PROGRAM_MEM_UPPER"),new Object[]{total_blocks * 16 / 1024, block_count, largest_block * 16 / 1024}); } /* Test for and show free XMS */ CPU_Regs.reg_eax.word(0x4300);Callback.CALLBACK_RunRealInt(0x2f); if (CPU_Regs.reg_eax.low()==0x80) { CPU_Regs.reg_eax.word(0x4310);Callback.CALLBACK_RunRealInt(0x2f); - /*Bit16u*/int xms_seg= (int)CPU_Regs.reg_esVal.dword;/*Bit16u*/int xms_off=CPU_Regs.reg_ebx.word(); + /*Bit16u*/int xms_seg= CPU_Regs.reg_esVal.dword;/*Bit16u*/int xms_off=CPU_Regs.reg_ebx.word(); CPU_Regs.reg_eax.high(8); Callback.CALLBACK_RunRealFar(xms_seg,xms_off); if (CPU_Regs.reg_ebx.low()==0) { - WriteOut(Msg.get("PROGRAM_MEM_EXTEND"),new Object[]{new Long(CPU_Regs.reg_edx.word())}); + WriteOut(Msg.get("PROGRAM_MEM_EXTEND"),new Object[]{(long) CPU_Regs.reg_edx.word()}); } } /* Test for and show free EMS */ @@ -391,24 +390,18 @@ public void Run() { Dos_files.DOS_CloseFile(handle.value); CPU_Regs.reg_eax.high(0x42); Callback.CALLBACK_RunRealInt(0x67); - WriteOut(Msg.get("PROGRAM_MEM_EXPAND"),new Object[]{new Long(CPU_Regs.reg_ebx.word()*16)}); + WriteOut(Msg.get("PROGRAM_MEM_EXPAND"),new Object[]{CPU_Regs.reg_ebx.word() * 16L}); } } } static public class RebootException extends RuntimeException {} - static private Program.PROGRAMS_Main REBOOT_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - throw new RebootException(); - } + static private final Program.PROGRAMS_Main REBOOT_ProgramStart = () -> { + throw new RebootException(); }; - static private Program.PROGRAMS_Main MEM_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new MEM(); - } - }; + static private final Program.PROGRAMS_Main MEM_ProgramStart = () -> new MEM(); // extern Bit32u floppytype; // @@ -423,7 +416,7 @@ private FileIO getFSFile_mounted(String filename, LongRef ksize, LongRef bsize, StringRef fullname = new StringRef(); Drive_local ldp; - if (!Dos_files.DOS_MakeName(filename,fullname,drive)) return null; + if (Dos_files.DOS_MakeName(filename, fullname, drive)) return null; try { if (!(Dos_files.Drives[drive.value] instanceof Drive_local)) return null; @@ -482,6 +475,7 @@ FileIO getFSFile(String filename, LongRef ksize, LongRef bsize,boolean tryload/* bsize.value = tmpfile.length(); ksize.value = bsize.value / 1024; } catch (Exception e) { + throw new RuntimeException(e); } return tmpfile; } @@ -508,7 +502,7 @@ static private class bootSector { // Bit16u reserve_sect; // Bit8u misc[496]; // } bootdata; - byte[] rawdata = new byte[512]; +final byte[] rawdata = new byte[512]; } public void Run() { //Hack To allow long commandlines @@ -600,12 +594,12 @@ public void Run() { if (bochs.startsWith("CD")) { Block.BlockDriverState cdrom = IDE.getFirstCdrom(); if (cdrom == null) { - WriteOut(Msg.get("PROGRAM_BOOT_UNABLE"), new Object[] {new Character(drive)}); + WriteOut(Msg.get("PROGRAM_BOOT_UNABLE"), new Object[] {drive}); return; } } } else if(Bios_disk.imageDiskList[drive-65]==null) { - WriteOut(Msg.get("PROGRAM_BOOT_UNABLE"), new Object[] {new Character(drive)}); + WriteOut(Msg.get("PROGRAM_BOOT_UNABLE"), new Object[] {drive}); return; } int eip = 0x7c00; @@ -648,7 +642,7 @@ public void Run() { else { byte[] rombuf = new byte[65536]; int cfound_at=-1; - if (cart_cmd.length()>0) { + if (!cart_cmd.isEmpty()) { /* read cartridge data into buffer */ try { usefile_1.seek(0x200L); @@ -657,19 +651,19 @@ public void Run() { e.printStackTrace(); } - String cmdlist = ""; + StringBuilder cmdlist = new StringBuilder(); int ct=6; int clen=rombuf[ct] & 0xFF; byte[] buf=new byte[257]; if (cart_cmd.equals("?")) { while (clen!=0 && cmdlist.length()<1024) { - cmdlist+=" "; - cmdlist+=new String(rombuf, ct+1, clen).toUpperCase(); + cmdlist.append(" "); + cmdlist.append(new String(rombuf, ct + 1, clen).toUpperCase()); ct+=1+clen+3; clen=rombuf[ct] & 0xFF; } if (ct>6) { - WriteOut(Msg.get("PROGRAM_BOOT_CART_LIST_CMDS"),new Object[]{cmdlist}); + WriteOut(Msg.get("PROGRAM_BOOT_CART_LIST_CMDS"),new Object[]{cmdlist.toString()}); } else { WriteOut(Msg.get("PROGRAM_BOOT_CART_NO_CMDS")); } @@ -697,7 +691,7 @@ public void Run() { } if (cfound_at<=0) { if (ct>6) { - WriteOut(Msg.get("PROGRAM_BOOT_CART_LIST_CMDS"), new Object[] {cmdlist}); + WriteOut(Msg.get("PROGRAM_BOOT_CART_LIST_CMDS"), new Object[] {cmdlist.toString()}); } else { WriteOut(Msg.get("PROGRAM_BOOT_CART_NO_CMDS")); } @@ -733,7 +727,9 @@ public void Run() { if (drd==0xb000) { for(i=0;i<0xb000;i++) Memory.phys_writeb(0xf3000+i,rombuf[i]); } - try {tfile.close();} catch (Exception e) {} + try {tfile.close();} catch (Exception e) { + throw new RuntimeException(e); + } } if (usefile_2!=null) { @@ -779,7 +775,7 @@ public void Run() { } } - if (cart_cmd.length()==0) { + if (cart_cmd.isEmpty()) { int old_int18=Memory.mem_readd(0x60); /* run cartridge setup */ CPU_Regs.SegSet16DS(romseg); @@ -806,15 +802,15 @@ public void Run() { } else { disable_umb_ems_xms(); Memory.RemoveEMSPageFrame(); - WriteOut(Msg.get("PROGRAM_BOOT_BOOT"), new Object[] {new Character(drive)}); + WriteOut(Msg.get("PROGRAM_BOOT_BOOT"), new Object[] {drive}); /* revector some dos-allocated interrupts */ - Memory.real_writed(0,0x01*4,0xf000ff53); + Memory.real_writed(0, 4,0xf000ff53); Memory.real_writed(0,0x03*4,0xf000ff53); if (bochs != null) { try { - byte[] data = null; + byte[] data; try { FileInputStream fis = new FileInputStream("bios.bin"); data = new byte[fis.available()]; @@ -833,13 +829,14 @@ public void Run() { for(i=0;i { + if (port == 0x500 || port == 0x503) { + System.out.print((char)val); + } else if (port == 0x501 || port == 0x502) { + System.out.println("panic in vgabios at line "+val); } }; new IoHandler.IO_WriteHandleObject().Install(0x500, vga_write, IoHandler.IO_MA); @@ -866,7 +862,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { VBE.registerIoPorts(); } - int endLoadAddress = (int) (0x100000000l - data.length); + int endLoadAddress = (int) (0x100000000L - data.length); Memory.MEM_AddROM(endLoadAddress >>> 12, data.length >>> 12, data); //Memory.MEM_AddROM(0xC0, 0x10, videoData); CPU_Regs.reg_eip = 0xFFF0; @@ -883,15 +879,14 @@ else if (CPU.CPU_ArchitectureType==CPU.CPU_ARCHTYPE_PENTIUM_PRO) else CPU_Regs.reg_edx.dword = 0x00000402; - IoHandler.IO_WriteHandler bios_write = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - if (port == 0x8900) - throw new Main.KillException(); - if (port == 0x402 || port == 0x403) { - System.out.print((char)val); - } else if (port == 0x401 || port == 0x402) { - System.out.println("panic in rombios.c at line "+val); - } + /*Bitu*//*Bitu*//*Bitu*/ + IoHandler.IO_WriteHandler bios_write = (port, val, iolen) -> { + if (port == 0x8900) + throw new Main.KillException(); + if (port == 0x402 || port == 0x403) { + System.out.print((char)val); + } else if (port == 0x401 || port == 0x402) { + System.out.println("panic in rombios.c at line "+val); } }; new IoHandler.IO_WriteHandleObject().Install(0x400, bios_write, IoHandler.IO_MA); @@ -1004,11 +999,7 @@ static void cmos_init_hd(int type_ofs, int info_ofs, Internal.IDEState hd) } } - static private Program.PROGRAMS_Main BOOT_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new BOOT(); - } - }; + static private final Program.PROGRAMS_Main BOOT_ProgramStart = () -> new BOOT(); // // #if C_DEBUG @@ -1079,7 +1070,7 @@ public void Run() { if (ch=='D' || ch=='F') { // Deallocate all Dos_memory.DOS_FreeProcessMemory(0x40); - WriteOut(Msg.get("PROGRAM_LOADFIX_DEALLOCALL"),new Object[]{new Integer(kb)}); + WriteOut(Msg.get("PROGRAM_LOADFIX_DEALLOCALL"),new Object[]{kb}); return; } else { // Set mem amount to allocate @@ -1095,37 +1086,33 @@ public void Run() { if (Dos_memory.DOS_AllocateMemory(segment,blocks)) { Dos_MCB mcb=new Dos_MCB(segment.value-1); mcb.SetPSPSeg(0x40); // use fake segment - WriteOut(Msg.get("PROGRAM_LOADFIX_ALLOC"),new Object[]{new Integer(kb)}); + WriteOut(Msg.get("PROGRAM_LOADFIX_ALLOC"),new Object[]{kb}); // Prepare commandline... if ((temp_line=cmd.FindCommand(commandNr++))!=null) { // get Filename String filename = temp_line; // Setup commandline boolean ok; - String args = ""; + StringBuilder args = new StringBuilder(); do { ok = (temp_line=cmd.FindCommand(commandNr++))!=null; - args+=temp_line; - args+=" "; + args.append(temp_line); + args.append(" "); } while (ok); // Use shell to start program Dos_shell shell = new Dos_shell(); - shell.Execute(filename,args); + shell.Execute(filename, args.toString()); Dos_memory.DOS_FreeMemory(segment.value); - WriteOut(Msg.get("PROGRAM_LOADFIX_DEALLOC"),new Object[]{new Integer(kb)}); + WriteOut(Msg.get("PROGRAM_LOADFIX_DEALLOC"),new Object[]{kb}); } } else { - WriteOut(Msg.get("PROGRAM_LOADFIX_ERROR"),new Object[]{new Integer(kb)}); + WriteOut(Msg.get("PROGRAM_LOADFIX_ERROR"),new Object[]{kb}); } } } - static private Program.PROGRAMS_Main LOADFIX_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new LOADFIX(); - } - }; + static private final Program.PROGRAMS_Main LOADFIX_ProgramStart = () -> new LOADFIX(); // RESCAN @@ -1157,11 +1144,7 @@ else if(temp_line.length() == 2 && temp_line.charAt(1) == ':') { } } - static private Program.PROGRAMS_Main RESCAN_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new RESCAN(); - } - }; + static private final Program.PROGRAMS_Main RESCAN_ProgramStart = () -> new RESCAN(); private static class INTRO extends Program { void DisplayMount() { @@ -1204,11 +1187,7 @@ public void Run() { } } - static private Program.PROGRAMS_Main INTRO_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new INTRO(); - } - }; + static private final Program.PROGRAMS_Main INTRO_ProgramStart = () -> new INTRO(); private static class IMGMOUNT extends Program { public void Run() { @@ -1236,7 +1215,7 @@ public void Run() { Dos_files.Drives[i_drive] = null; if (i_drive == Dos_files.DOS_GetDefaultDrive()) Dos_files.DOS_SetDrive((short)('Z' - 'A')); - WriteOut(Msg.get("PROGRAM_MOUNT_UMOUNT_SUCCESS"),new Object[]{new Character(umount.charAt(0))}); + WriteOut(Msg.get("PROGRAM_MOUNT_UMOUNT_SUCCESS"),new Object[]{umount.charAt(0)}); break; case 1: WriteOut(Msg.get("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL")); @@ -1246,7 +1225,7 @@ public void Run() { break; } } else { - WriteOut(Msg.get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"),new Object[]{new Character(umount.charAt(0))}); + WriteOut(Msg.get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"),new Object[]{umount.charAt(0)}); } return; } @@ -1282,7 +1261,7 @@ public void Run() { if (ideattach.equals("auto")) { IDE.IDE_Auto(ide_index, ide_slave); System.out.println("IDE: index "+ide_index.value+" slave="+ide_slave.value); - } else if (!ideattach.equals("none") && ideattach.length()>0 && Character.isDigit(ideattach.charAt(0))) { + } else if (!ideattach.equals("none") && !ideattach.isEmpty() && Character.isDigit(ideattach.charAt(0))) { ide_index.value = ideattach.charAt(0)-'1'; if (ideattach.length()>1 && ideattach.charAt(1)=='s') ide_slave.value = true; @@ -1300,7 +1279,7 @@ public void Run() { if (s != null) str_size = s; - if (type.equals("hdd") && str_size.length()==0) { + if (type.equals("hdd") && str_size.isEmpty()) { imgsizedetect=true; } else { String[] ss = StringHelper.split(str_size, ","); @@ -1337,7 +1316,7 @@ public void Run() { } // find all file parameters, assuming that all option parameters have been removed - while((temp_line=cmd.FindCommand(paths.size() + 2))!=null && temp_line.length()>0) { + while((temp_line=cmd.FindCommand(paths.size() + 2))!=null && !temp_line.isEmpty()) { if (FileIOFactory.isRemote(temp_line)) { paths.add(temp_line); continue; @@ -1355,7 +1334,7 @@ public void Run() { String tmp = temp_line; /*Bit8u*/ShortRef dummy = new ShortRef(); - if (!Dos_files.DOS_MakeName(tmp, fullname, dummy) || !Dos_files.Drives[dummy.value].GetInfo().startsWith("local directory")) { + if (Dos_files.DOS_MakeName(tmp, fullname, dummy) || !Dos_files.Drives[dummy.value].GetInfo().startsWith("local directory")) { WriteOut(Msg.get("PROGRAM_IMGMOUNT_NON_LOCAL_DRIVE")); return; } @@ -1381,7 +1360,7 @@ public void Run() { } paths.add(temp_line); } - if (paths.size() == 0) { + if (paths.isEmpty()) { WriteOut(Msg.get("PROGRAM_IMGMOUNT_SPECIFY_FILE")); return; } @@ -1391,216 +1370,268 @@ public void Run() { WriteOut(Msg.get("PROGRAM_IMGMOUNT_MULTIPLE_NON_CUEISO_FILES")); return; } - - if (fstype.equals("fat")) { - if (imgsizedetect) { - FileIO diskfile = null; - try { - diskfile = FileIOFactory.open(temp_line, FileIOFactory.MODE_READ|FileIOFactory.MODE_WRITE); - /*Bit32u*/long fcsize = diskfile.length()/512; - /*Bit8u*/byte[] buf=new byte[512]; + switch (fstype) { + case "fat": + if (imgsizedetect) { + FileIO diskfile; - if (diskfile.read(buf)<512) { + try { + diskfile = FileIOFactory.open(temp_line, FileIOFactory.MODE_READ | FileIOFactory.MODE_WRITE); + /*Bit32u*/ + long fcsize = diskfile.length() / 512; + /*Bit8u*/ + byte[] buf = new byte[512]; + + if (diskfile.read(buf) < 512) { + diskfile.close(); + WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); + return; + } diskfile.close(); - WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); - return; - } - diskfile.close(); - if ((buf[510]!=0x55) || (buf[511]!=(byte)0xaa)) { - WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); - return; - } + if ((buf[510] != 0x55) || (buf[511] != (byte) 0xaa)) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); + return; + } - // check MBR partition entry 1 - /*Bitu*/int starthead = buf[0x1bf] & 0xFF; - /*Bitu*/int startsect = buf[0x1c0] & 0x3f - 1; - /*Bitu*/int startcyl = buf[0x1c1]|((buf[0x1c0]&0xc0)<<2); - /*Bitu*/int endcyl = buf[0x1c5]|((buf[0x1c4]&0xc0)<<2); - - /*Bitu*/int heads = (buf[0x1c3] & 0xFF) +1; - /*Bitu*/int sectors = buf[0x1c4] & 0x3f; - - /*Bitu*/long pe1_size = new IntPtr(buf, 0x1ca).readd(0); - boolean yet_detected = false; - if(pe1_size!=0) { - /*Bitu*/int part_start = startsect + sectors*starthead + startcyl*sectors*heads; - /*Bitu*/int part_end = heads*sectors*endcyl; - /*Bitu*/int part_len = part_end - part_start; - // partition start/end sanity check - // partition length should not exceed file length - // real partition size can be a few cylinders less than pe1_size - // if more than 1023 cylinders see if first partition fits - // into 1023, else bail. - if((part_len<0)||(part_len > pe1_size)||(pe1_size > fcsize)|| - ((pe1_size-part_len)/(sectors*heads)>2)|| - ((pe1_size/(heads*sectors))>1023)) { - //LOG_MSG("start(c,h,s) %u,%u,%u",startcyl,starthead,startsect); - //LOG_MSG("endcyl %u heads %u sectors %u",endcyl,heads,sectors); - //LOG_MSG("psize %u start %u end %u",pe1_size,part_start,part_end); - } else { - sizes[0]=512; sizes[1]=sectors; - sizes[2]=heads; sizes[3]=(int)(fcsize/(heads*sectors)); - if(sizes[3]>1023) sizes[3]=1023; - yet_detected = true; + // check MBR partition entry 1 + /*Bitu*/ + int starthead = buf[0x1bf] & 0xFF; + /*Bitu*/ + int startsect = buf[0x1c0] & 0x3f - 1; + /*Bitu*/ + int startcyl = buf[0x1c1] | ((buf[0x1c0] & 0xc0) << 2); + /*Bitu*/ + int endcyl = buf[0x1c5] | ((buf[0x1c4] & 0xc0) << 2); + + /*Bitu*/ + int heads = (buf[0x1c3] & 0xFF) + 1; + /*Bitu*/ + int sectors = buf[0x1c4] & 0x3f; + + /*Bitu*/ + long pe1_size = new IntPtr(buf, 0x1ca).readd(0); + boolean yet_detected = false; + if (pe1_size != 0) { + /*Bitu*/ + int part_start = startsect + sectors * starthead + startcyl * sectors * heads; + /*Bitu*/ + int part_end = heads * sectors * endcyl; + /*Bitu*/ + int part_len = part_end - part_start; + // partition start/end sanity check + // partition length should not exceed file length + // real partition size can be a few cylinders less than pe1_size + // if more than 1023 cylinders see if first partition fits + // into 1023, else bail. + if ((part_len < 0) || (part_len > pe1_size) || (pe1_size > fcsize) || + ((pe1_size - part_len) / (sectors * heads) > 2) || + ((pe1_size / (heads * sectors)) > 1023)) { + //LOG_MSG("start(c,h,s) %u,%u,%u",startcyl,starthead,startsect); + //LOG_MSG("endcyl %u heads %u sectors %u",endcyl,heads,sectors); + //LOG_MSG("psize %u start %u end %u",pe1_size,part_start,part_end); + } else { + sizes[0] = 512; + sizes[1] = sectors; + sizes[2] = heads; + sizes[3] = (int) (fcsize / (heads * sectors)); + if (sizes[3] > 1023) sizes[3] = 1023; + yet_detected = true; + } } - } - if(!yet_detected) { - // Try bximage disk geometry - /*Bitu*/int cylinders=(int)(fcsize/(16*63)); - // Int13 only supports up to 1023 cylinders - // For mounting unknown images we could go up with the heads to 255 - if ((cylinders*16*63==fcsize)&&(cylinders<1024)) { - yet_detected=true; - sizes[0]=512; sizes[1]=63; sizes[2]=16; sizes[3]=cylinders; + if (!yet_detected) { + // Try bximage disk geometry + /*Bitu*/ + int cylinders = (int) (fcsize / (16 * 63)); + // Int13 only supports up to 1023 cylinders + // For mounting unknown images we could go up with the heads to 255 + if (((long) cylinders * 16 * 63 == fcsize) && (cylinders < 1024)) { + yet_detected = true; + sizes[0] = 512; + sizes[1] = 63; + sizes[2] = 16; + sizes[3] = cylinders; + } } - } - if(yet_detected) - WriteOut(StringHelper.sprintf(Msg.get("PROGRAM_IMGMOUNT_AUTODET_VALUES"),new Object[] {new Integer(sizes[0]),new Integer(sizes[1]),new Integer(sizes[2]),new Integer(sizes[3])})); - else { - WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); + if (yet_detected) + WriteOut(StringHelper.sprintf(Msg.get("PROGRAM_IMGMOUNT_AUTODET_VALUES"), new Object[]{sizes[0], sizes[1], sizes[2], sizes[3]})); + else { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); + return; + } + } catch (Exception e) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); return; } + } + + newdrive = new Drive_fat(temp_line, sizes[0], sizes[1], sizes[2], sizes[3], 0); + if (!((Drive_fat) newdrive).created_successfully) { + newdrive = null; + } + break; + case "iso": + break; + case "zip": + newdrive = new Drive_zip(temp_line); + break; + default: + FileIO newDisk; + try { + newDisk = FileIOFactory.open(temp_line, FileIOFactory.MODE_READ | FileIOFactory.MODE_WRITE); + imagesize = (newDisk.length() / 1024); } catch (Exception e) { - WriteOut(Msg.get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); + e.printStackTrace(); return; } - } - - newdrive=new Drive_fat(temp_line,sizes[0],sizes[1],sizes[2],sizes[3],0); - if(!((Drive_fat)newdrive).created_successfully) { - newdrive = null; - } - } else if (fstype.equals("iso")) { - } else if (fstype.equals("zip")) { - newdrive = new Drive_zip(temp_line); - } else { - FileIO newDisk = null; - try { - newDisk = FileIOFactory.open(temp_line, FileIOFactory.MODE_READ|FileIOFactory.MODE_WRITE); - imagesize = (newDisk.length() / 1024); - } catch (Exception e) { - e.printStackTrace(); - return; - } - newImage = new Bios_disk.imageDisk(newDisk, temp_line, imagesize, (imagesize > 2880)); - if(imagesize>2880) newImage.Set_Geometry(sizes[2],sizes[3],sizes[1],sizes[0]); + newImage = new Bios_disk.imageDisk(newDisk, temp_line, imagesize, (imagesize > 2880)); + if (imagesize > 2880) newImage.Set_Geometry(sizes[2], sizes[3], sizes[1], sizes[0]); + break; } } else { WriteOut(Msg.get("PROGRAM_IMGMOUNT_TYPE_UNSUPPORTED"),new Object[]{type}); return; } - if (fstype.equals("fat")) { - if (Dos_files.Drives[drive-'A']!=null) { - WriteOut(Msg.get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return; - } - if (newdrive==null) {WriteOut(Msg.get("PROGRAM_IMGMOUNT_CANT_CREATE"));return;} - Dos_files.Drives[drive-'A']=newdrive; - // Set the correct media byte in the table - Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid)+(drive-'A')*2,mediaid); - WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"),new Object[]{new Character(drive),temp_line}); - if (((Drive_fat)newdrive).loadedDisk.hardDrive) { - if (Bios_disk.imageDiskList[2] == null) { - Bios_disk.imageDiskList[2] = ((Drive_fat)newdrive).loadedDisk; - Bios_disk.imageDisk imageDisk = Bios_disk.imageDiskList[2]; - if (ide_index.value >= 0) IDE.IDE_Attach(false, ide_index.value, ide_slave.value, imageDisk.diskimg, (int) imageDisk.cylinders, (int) imageDisk.heads, (int) imageDisk.sectors); - Bios_disk.updateDPT(); + switch (fstype) { + case "fat": + if (Dos_files.Drives[drive - 'A'] != null) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); return; } - if (Bios_disk.imageDiskList[3] == null) { - Bios_disk.imageDiskList[3] = ((Drive_fat)newdrive).loadedDisk; - Bios_disk.imageDisk imageDisk = Bios_disk.imageDiskList[3]; - if (ide_index.value >= 0) IDE.IDE_Attach(false, ide_index.value, ide_slave.value, imageDisk.diskimg, (int) imageDisk.cylinders, (int) imageDisk.heads, (int) imageDisk.sectors); - Bios_disk.updateDPT(); + if (newdrive == null) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_CANT_CREATE")); return; } - } - if (!((Drive_fat)newdrive).loadedDisk.hardDrive) { - Bios_disk.imageDiskList[0] = ((Drive_fat)newdrive).loadedDisk; - Floppy.Attach(0, Bios_disk.imageDiskList[0].diskimg); - } - } else if (fstype.equals("iso")) { - // If instructed, attach to IDE controller as ATAPI CD-ROM device - if (ide_index.value >= 0) { - try { - IDE.IDE_Attach(true, ide_index.value,ide_slave.value, FileIOFactory.open((String)paths.elementAt(0), FileIOFactory.MODE_READ), 0, 0 , 0); - WriteOut("Attached ISO to IDE\n"); - } catch (Exception e) { - e.printStackTrace(); + Dos_files.Drives[drive - 'A'] = newdrive; + // Set the correct media byte in the table + Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid) + (drive - 'A') * 2, mediaid); + WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"), new Object[]{drive, temp_line}); + if (((Drive_fat) newdrive).loadedDisk.hardDrive) { + if (Bios_disk.imageDiskList[2] == null) { + Bios_disk.imageDiskList[2] = ((Drive_fat) newdrive).loadedDisk; + Bios_disk.imageDisk imageDisk = Bios_disk.imageDiskList[2]; + if (ide_index.value >= 0) + IDE.IDE_Attach(false, ide_index.value, ide_slave.value, imageDisk.diskimg, (int) imageDisk.cylinders, (int) imageDisk.heads, (int) imageDisk.sectors); + Bios_disk.updateDPT(); + return; + } + if (Bios_disk.imageDiskList[3] == null) { + Bios_disk.imageDiskList[3] = ((Drive_fat) newdrive).loadedDisk; + Bios_disk.imageDisk imageDisk = Bios_disk.imageDiskList[3]; + if (ide_index.value >= 0) + IDE.IDE_Attach(false, ide_index.value, ide_slave.value, imageDisk.diskimg, (int) imageDisk.cylinders, (int) imageDisk.heads, (int) imageDisk.sectors); + Bios_disk.updateDPT(); + return; + } + } + if (!((Drive_fat) newdrive).loadedDisk.hardDrive) { + Bios_disk.imageDiskList[0] = ((Drive_fat) newdrive).loadedDisk; + Floppy.Attach(0, Bios_disk.imageDiskList[0].diskimg); + } + break; + case "iso": + // If instructed, attach to IDE controller as ATAPI CD-ROM device + if (ide_index.value >= 0) { + try { + IDE.IDE_Attach(true, ide_index.value, ide_slave.value, FileIOFactory.open((String) paths.elementAt(0), FileIOFactory.MODE_READ), 0, 0, 0); + WriteOut("Attached ISO to IDE\n"); + } catch (Exception e) { + e.printStackTrace(); + } } - } - if (Dos_files.Drives[drive-'A']!=null) { - WriteOut(Msg.get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return; - } - DosMSCDEX.MSCDEX_SetCDInterface(0, -1); - // create new drives for all images - Vector isoDisks = new Vector(); - int i; - int ct; - for (i = 0; i < paths.size(); i++) { - IntRef error = new IntRef(-1); - Dos_Drive newDrive = new Drive_iso(drive, (String)paths.elementAt(i), mediaid, error); - isoDisks.add(newDrive); - switch (error.value) { - case 0 : break; - case 1 : WriteOut(Msg.get("MSCDEX_ERROR_MULTIPLE_CDROMS")); break; - case 2 : WriteOut(Msg.get("MSCDEX_ERROR_NOT_SUPPORTED")); break; - case 3 : WriteOut(Msg.get("MSCDEX_ERROR_OPEN")); break; - case 4 : WriteOut(Msg.get("MSCDEX_TOO_MANY_DRIVES")); break; - case 5 : WriteOut(Msg.get("MSCDEX_LIMITED_SUPPORT")); break; - case 6 : WriteOut(Msg.get("MSCDEX_INVALID_FILEFORMAT")); break; - default : WriteOut(Msg.get("MSCDEX_UNKNOWN_ERROR")); break; + if (Dos_files.Drives[drive - 'A'] != null) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return; } - // error: clean up and leave - if (error.value != 0) { + DosMSCDEX.MSCDEX_SetCDInterface(0, -1); + // create new drives for all images + Vector isoDisks = new Vector(); + int i; + int ct; + for (i = 0; i < paths.size(); i++) { + IntRef error = new IntRef(-1); + Dos_Drive newDrive = new Drive_iso(drive, (String) paths.elementAt(i), mediaid, error); + isoDisks.add(newDrive); + switch (error.value) { + case 0: + break; + case 1: + WriteOut(Msg.get("MSCDEX_ERROR_MULTIPLE_CDROMS")); + break; + case 2: + WriteOut(Msg.get("MSCDEX_ERROR_NOT_SUPPORTED")); + break; + case 3: + WriteOut(Msg.get("MSCDEX_ERROR_OPEN")); + break; + case 4: + WriteOut(Msg.get("MSCDEX_TOO_MANY_DRIVES")); + break; + case 5: + WriteOut(Msg.get("MSCDEX_LIMITED_SUPPORT")); + break; + case 6: + WriteOut(Msg.get("MSCDEX_INVALID_FILEFORMAT")); + break; + default: + WriteOut(Msg.get("MSCDEX_UNKNOWN_ERROR")); + break; + } + // error: clean up and leave + if (error.value != 0) { // for(ct = 0; ct < isoDisks.size(); ct++) { // isoDisks.elementAt(ct).close(); // } - return; + return; + } } - } - // Update DriveManager - for(ct = 0; ct < isoDisks.size(); ct++) { - DriveManager.AppendDisk(drive - 'A', (Dos_Drive)isoDisks.elementAt(ct)); - } - DriveManager.InitializeDrive(drive - 'A'); + // Update DriveManager + for (ct = 0; ct < isoDisks.size(); ct++) { + DriveManager.AppendDisk(drive - 'A', (Dos_Drive) isoDisks.elementAt(ct)); + } + DriveManager.InitializeDrive(drive - 'A'); - // Set the correct media byte in the table - Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid) + (drive - 'A') * 2, mediaid); + // Set the correct media byte in the table + Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid) + (drive - 'A') * 2, mediaid); - // Print status message (success) - WriteOut(Msg.get("MSCDEX_SUCCESS")); - String tmp = (String)paths.elementAt(0); - for (i = 1; i < paths.size(); i++) { - tmp += "; " + paths.elementAt(i); - } - WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"), new Object[]{new Character(drive), tmp}); + // Print status message (success) + WriteOut(Msg.get("MSCDEX_SUCCESS")); + StringBuilder tmp = new StringBuilder((String) paths.elementAt(0)); + for (i = 1; i < paths.size(); i++) { + tmp.append("; ").append(paths.elementAt(i)); + } + WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"), new Object[]{drive, tmp.toString()}); - } else if (fstype.equals("zip")) { - if (Dos_files.Drives[drive-'A']!=null) { - WriteOut(Msg.get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return; - } - if (newdrive==null) {WriteOut(Msg.get("PROGRAM_IMGMOUNT_CANT_CREATE"));return;} - Dos_files.Drives[drive-'A']=newdrive; - Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid) + (drive - 'A') * 2, mediaid); - WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"),new Object[]{new Character(drive),temp_line}); - } else if (fstype.equals("none")) { - //if(Bios_disk.imageDiskList[drive-'0'] != null) delete imageDiskList[drive-'0']; - Bios_disk.imageDiskList[drive-'0'] = newImage; - Bios_disk.updateDPT(); - WriteOut(Msg.get("PROGRAM_IMGMOUNT_MOUNT_NUMBER"),new Object[]{new Integer(drive-'0'),temp_line}); - // If instructed, attach to IDE controller as ATA hard disk - if (ide_index.value >= 0 && drive>='2') IDE.IDE_Attach(false, ide_index.value,ide_slave.value, newImage.diskimg, (int)newImage.cylinders, (int)newImage.heads, (int)newImage.sectors); - if (drive==48) - Floppy.Attach(0, Bios_disk.imageDiskList[0].diskimg); - else if (drive==49) - Floppy.Attach(1, Bios_disk.imageDiskList[1].diskimg); + break; + case "zip": + if (Dos_files.Drives[drive - 'A'] != null) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return; + } + if (newdrive == null) { + WriteOut(Msg.get("PROGRAM_IMGMOUNT_CANT_CREATE")); + return; + } + Dos_files.Drives[drive - 'A'] = newdrive; + Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.mediaid) + (drive - 'A') * 2, mediaid); + WriteOut(Msg.get("PROGRAM_MOUNT_STATUS_2"), new Object[]{drive, temp_line}); + break; + case "none": + //if(Bios_disk.imageDiskList[drive-'0'] != null) delete imageDiskList[drive-'0']; + Bios_disk.imageDiskList[drive - '0'] = newImage; + Bios_disk.updateDPT(); + WriteOut(Msg.get("PROGRAM_IMGMOUNT_MOUNT_NUMBER"), new Object[]{drive - '0', temp_line}); + // If instructed, attach to IDE controller as ATA hard disk + if (ide_index.value >= 0 && drive >= '2') + IDE.IDE_Attach(false, ide_index.value, ide_slave.value, newImage.diskimg, (int) newImage.cylinders, (int) newImage.heads, (int) newImage.sectors); + if (drive == 48) + Floppy.Attach(0, Bios_disk.imageDiskList[0].diskimg); + else if (drive == 49) + Floppy.Attach(1, Bios_disk.imageDiskList[1].diskimg); + break; } // check if volume label is given. becareful for cdrom @@ -1609,11 +1640,7 @@ else if (drive==49) } - static private Program.PROGRAMS_Main IMGMOUNT_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new IMGMOUNT(); - } - }; + static private final Program.PROGRAMS_Main IMGMOUNT_ProgramStart = () -> new IMGMOUNT(); private static class KEYB extends Program { public void Run() { @@ -1622,12 +1649,14 @@ public void Run() { WriteOut(Msg.get("PROGRAM_KEYB_SHOWHELP")); } else { /* first parameter is layout ID */ - /*Bitu*/int keyb_error=0; + /*Bitu*/int keyb_error; String cp_string; /*Bit32s*/IntRef tried_cp = new IntRef(-1); if ((cp_string=cmd.FindCommand(2))!=null) { /* second parameter is codepage number */ - try {tried_cp.value=Integer.parseInt(cp_string);} catch (Exception e) {} + try {tried_cp.value=Integer.parseInt(cp_string);} catch (Exception e) { + throw new RuntimeException(e); + } String cp_file_name; if ((cp_string=cmd.FindCommand(3))!=null) { /* third parameter is codepage file */ @@ -1643,7 +1672,7 @@ public void Run() { } switch (keyb_error) { case Dos_keyboard_layout.KEYB_NOERROR: - WriteOut(Msg.get("PROGRAM_KEYB_NOERROR"),new Object[]{temp_line,new Integer(Dos.dos.loaded_codepage)}); + WriteOut(Msg.get("PROGRAM_KEYB_NOERROR"),new Object[]{temp_line, Dos.dos.loaded_codepage}); break; case Dos_keyboard_layout.KEYB_FILENOTFOUND: WriteOut(Msg.get("PROGRAM_KEYB_FILENOTFOUND"),new Object[]{temp_line}); @@ -1653,7 +1682,7 @@ public void Run() { WriteOut(Msg.get("PROGRAM_KEYB_INVALIDFILE"),new Object[]{temp_line}); break; case Dos_keyboard_layout.KEYB_LAYOUTNOTFOUND: - WriteOut(Msg.get("PROGRAM_KEYB_LAYOUTNOTFOUND"),new Object[]{temp_line,new Integer(tried_cp.value)}); + WriteOut(Msg.get("PROGRAM_KEYB_LAYOUTNOTFOUND"),new Object[]{temp_line, tried_cp.value}); break; case Dos_keyboard_layout.KEYB_INVALIDCPFILE: WriteOut(Msg.get("PROGRAM_KEYB_INVCPFILE"),new Object[]{temp_line}); @@ -1668,19 +1697,15 @@ public void Run() { /* no parameter in the command line, just output codepage info and possibly loaded layout ID */ String layout_name = Dos_keyboard_layout.DOS_GetLoadedLayout(); if (layout_name==null) { - WriteOut(Msg.get("PROGRAM_KEYB_INFO"),new Object[]{new Integer(Dos.dos.loaded_codepage)}); + WriteOut(Msg.get("PROGRAM_KEYB_INFO"),new Object[]{Dos.dos.loaded_codepage}); } else { - WriteOut(Msg.get("PROGRAM_KEYB_INFO_LAYOUT"),new Object[]{new Integer(Dos.dos.loaded_codepage),layout_name}); + WriteOut(Msg.get("PROGRAM_KEYB_INFO_LAYOUT"),new Object[]{Dos.dos.loaded_codepage,layout_name}); } } } } - static private Program.PROGRAMS_Main KEYB_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new KEYB(); - } - }; + static private final Program.PROGRAMS_Main KEYB_ProgramStart = () -> new KEYB(); public static void DOS_SetupPrograms() { /*Add Messages */ diff --git a/jdosbox/src/main/java/jdos/dos/Dos_system.java b/jdosbox/src/main/java/jdos/dos/Dos_system.java index 7a395468..9110450c 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_system.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_system.java @@ -1,8 +1,8 @@ package jdos.dos; public class Dos_system { - static public interface MultiplexHandler { - public boolean call(); + public interface MultiplexHandler { + boolean call(); } static public final int DOS_NAMELENGTH =12; diff --git a/jdosbox/src/main/java/jdos/dos/Dos_tables.java b/jdosbox/src/main/java/jdos/dos/Dos_tables.java index df6fe5a0..f00d5d01 100644 --- a/jdosbox/src/main/java/jdos/dos/Dos_tables.java +++ b/jdosbox/src/main/java/jdos/dos/Dos_tables.java @@ -30,7 +30,7 @@ private static class DOS_TableCase { return page; } - static private Callback.Handler DOS_CaseMapFunc = new Callback.Handler() { + static private final Callback.Handler DOS_CaseMapFunc = new Callback.Handler() { public String getName() { return "Dos_tables.DOS_CaseMapFunc"; } @@ -40,7 +40,7 @@ public String getName() { } }; - static private byte[] country_info = { + static private final byte[] country_info = { /* Date format */ 0x00, 0x00, /* Currencystring */ 0x24, 0x00, 0x00, 0x00, 0x00, /* Thousands sep */ 0x2c, 0x00, @@ -81,12 +81,12 @@ static public void DOS_SetupTables() { Memory.real_writed(seg,0x06,0xffffffff); // strategy routine Memory.real_writed(seg,0x0a,0x204e4f43); // driver name Memory.real_writed(seg,0x0e,0x20202020); // driver name - Dos.dos_infoblock.SetDeviceChainStart((int)Memory.RealMake(seg,0)); + Dos.dos_infoblock.SetDeviceChainStart(Memory.RealMake(seg,0)); /* Create a fake Current Directory Structure */ seg=Dos.DOS_CDS_SEG; Memory.real_writed(seg,0x00,0x005c3a43); - Dos.dos_infoblock.SetCurDirStruct((int)Memory.RealMake(seg,0)); + Dos.dos_infoblock.SetCurDirStruct(Memory.RealMake(seg,0)); @@ -95,7 +95,7 @@ static public void DOS_SetupTables() { Memory.mem_writed(Memory.Real2Phys(Dos.dos.tables.dbcs),0); //empty table /* FILENAME CHARACTER TABLE */ Dos.dos.tables.filenamechar=Memory.RealMake(DOS_GetMemory(2),0); - Memory.mem_writew(Memory.Real2Phys(Dos.dos.tables.filenamechar)+0x00,0x16); + Memory.mem_writew(Memory.Real2Phys(Dos.dos.tables.filenamechar),0x16); Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.filenamechar)+0x02,0x01); Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.filenamechar)+0x03,0x00); // allowed chars from Memory.mem_writeb(Memory.Real2Phys(Dos.dos.tables.filenamechar)+0x04,0xff); // ...to @@ -132,7 +132,7 @@ static public void DOS_SetupTables() { seg=DOS_GetMemory(4); Memory.real_writed(seg,0,0xffffffff); //Last File Table Memory.real_writew(seg,4,100); //File Table supports 100 files - Dos.dos_infoblock.SetFCBTable((int)Memory.RealMake(seg,0)); + Dos.dos_infoblock.SetFCBTable(Memory.RealMake(seg,0)); /* Create a fake DPB */ Dos.dos.tables.dpb=DOS_GetMemory(2); @@ -146,7 +146,7 @@ static public void DOS_SetupTables() { Memory.real_writeb(seg,0x04,0xff); // not in use Memory.real_writeb(seg,0x0a,0x01); // number of FATs Memory.real_writed(seg,0x0d,0xffffffff); // pointer to DPB - Dos.dos_infoblock.SetDiskBufferHeadPt((int)Memory.RealMake(seg,0)); + Dos.dos_infoblock.SetDiskBufferHeadPt(Memory.RealMake(seg,0)); /* Set buffers to a nice value */ Dos.dos_infoblock.SetBuffers(50,50); diff --git a/jdosbox/src/main/java/jdos/dos/DriveManager.java b/jdosbox/src/main/java/jdos/dos/DriveManager.java index 695789e0..f6a512b5 100644 --- a/jdosbox/src/main/java/jdos/dos/DriveManager.java +++ b/jdosbox/src/main/java/jdos/dos/DriveManager.java @@ -1,6 +1,5 @@ package jdos.dos; -import jdos.misc.Log; import jdos.misc.setup.Section; import java.util.Vector; @@ -13,7 +12,7 @@ static public void AppendDisk(int drive, Dos_Drive disk) { static public void InitializeDrive(int drive) { currentDrive = drive; DriveInfo driveInfo = driveInfos[currentDrive]; - if (driveInfo.disks.size() > 0) { + if (!driveInfo.disks.isEmpty()) { driveInfo.currentDisk = 0; Dos_Drive disk = (Dos_Drive)driveInfo.disks.elementAt(driveInfo.currentDisk); Dos_files.Drives[currentDrive] = disk; @@ -22,9 +21,9 @@ static public void InitializeDrive(int drive) { } static public int UnmountDrive(int drive) { - int result = 0; + int result; // unmanaged drive - if (driveInfos[drive].disks.size() == 0) { + if (driveInfos[drive].disks.isEmpty()) { result = Dos_files.Drives[drive].UnMount(); } else { // managed drive @@ -42,7 +41,7 @@ static public int UnmountDrive(int drive) { // static void CycleDisk(bool pressed); static public void CycleAllDisks() { for (int idrive=0; idrive 1) { // cycle disk int currentDisk = driveInfos[idrive].currentDisk; @@ -55,7 +54,7 @@ static public void CycleAllDisks() { newDisk.curdir = oldDisk.curdir; newDisk.Activate(); Dos_files.Drives[idrive] = newDisk; - Log.log_msg("Drive "+String.valueOf('A'+idrive)+": disk "+String.valueOf(currentDisk+1)+" of "+numDisks+" now active"); + System.out.println("Drive "+ ('A' + idrive) +": disk "+ (currentDisk + 1) +" of "+numDisks+" now active"); } } } @@ -72,9 +71,9 @@ static public void Init(Section sec) { // MAPPER_AddHandler(&CycleDrive, MK_f3, MMOD2, "cycledrive", "Cycle Drv"); static private class DriveInfo { - Vector disks = new Vector(); + final Vector disks = new Vector(); /*Bit32u*/int currentDisk; } - static private DriveInfo[] driveInfos = new DriveInfo[Dos_files.DOS_DRIVES]; + static private final DriveInfo[] driveInfos = new DriveInfo[Dos_files.DOS_DRIVES]; static int currentDrive; } diff --git a/jdosbox/src/main/java/jdos/dos/Drives.java b/jdosbox/src/main/java/jdos/dos/Drives.java index 6eb04650..3c5ab769 100644 --- a/jdosbox/src/main/java/jdos/dos/Drives.java +++ b/jdosbox/src/main/java/jdos/dos/Drives.java @@ -7,40 +7,40 @@ public class Drives { public static boolean WildFileCmp(String file, String wild) { - String file_name; - String file_ext; - String wild_name; - String wild_ext; + StringBuilder file_name; + StringBuilder file_ext; + StringBuilder wild_name; + StringBuilder wild_ext; int pos; pos = file.indexOf('.'); if (pos>=0) { - file_name = file.substring(0,pos); - file_ext = file.substring(pos+1); + file_name = new StringBuilder(file.substring(0, pos)); + file_ext = new StringBuilder(file.substring(pos + 1)); } else { - file_name = file; - file_ext = ""; + file_name = new StringBuilder(file); + file_ext = new StringBuilder(); } - file_name = file_name.toUpperCase(); - file_ext = file_ext.toUpperCase(); + file_name = new StringBuilder(file_name.toString().toUpperCase()); + file_ext = new StringBuilder(file_ext.toString().toUpperCase()); pos = wild.indexOf('.'); if (pos>=0) { - wild_name = wild.substring(0, pos); - wild_ext = wild.substring(pos+1); + wild_name = new StringBuilder(wild.substring(0, pos)); + wild_ext = new StringBuilder(wild.substring(pos + 1)); } else { - wild_name = wild; - wild_ext = ""; + wild_name = new StringBuilder(wild); + wild_ext = new StringBuilder(); } - wild_name = wild_name.toUpperCase(); - wild_ext = wild_ext.toUpperCase(); - while (wild_name.length()<8) wild_name+=' '; - while (wild_ext.length()<3) wild_ext+=' '; - while (file_name.length()<8) file_name+=' '; - while (file_ext.length()<3) file_ext+=' '; - if (wild_name.length()>8) wild_name = wild_name.substring(0, 8); - if (wild_ext.length()>3) wild_name = wild_ext.substring(0, 3); - if (file_name.length()>8) wild_name = file_name.substring(0, 8); - if (file_ext.length()>3) wild_name = file_ext.substring(0, 3); + wild_name = new StringBuilder(wild_name.toString().toUpperCase()); + wild_ext = new StringBuilder(wild_ext.toString().toUpperCase()); + while (wild_name.length()<8) wild_name.append(' '); + while (wild_ext.length()<3) wild_ext.append(' '); + while (file_name.length()<8) file_name.append(' '); + while (file_ext.length()<3) file_ext.append(' '); + if (wild_name.length()>8) wild_name = new StringBuilder(wild_name.substring(0, 8)); + if (wild_ext.length()>3) wild_name = new StringBuilder(wild_ext.substring(0, 3)); + if (file_name.length()>8) wild_name = new StringBuilder(file_name.substring(0, 8)); + if (file_ext.length()>3) wild_name = new StringBuilder(file_ext.substring(0, 3)); /* Names are right do some checking */ for (int i=0;i DriveManager.Init(section); } diff --git a/jdosbox/src/main/java/jdos/dos/drives/Bootstrap.java b/jdosbox/src/main/java/jdos/dos/drives/Bootstrap.java index 74e6335f..82d61b44 100644 --- a/jdosbox/src/main/java/jdos/dos/drives/Bootstrap.java +++ b/jdosbox/src/main/java/jdos/dos/drives/Bootstrap.java @@ -3,8 +3,8 @@ import jdos.util.Ptr; public class Bootstrap { - /*Bit8u*/byte[] nearjmp = new byte[3]; - /*Bit8u*/byte[] oemname=new byte[8]; + /*Bit8u*/final byte[] nearjmp = new byte[3]; + /*Bit8u*/final byte[] oemname=new byte[8]; /*Bit16u*/int bytespersector; /*Bit8u*/short sectorspercluster; /*Bit16u*/int reservedsectors; @@ -18,7 +18,7 @@ public class Bootstrap { /* 32-bit FAT extensions */ /*Bit32u*/long hiddensectorcount; /*Bit32u*/long totalsecdword; - /*Bit8u*/byte[] bootcode=new byte[474]; + /*Bit8u*/final byte[] bootcode=new byte[474]; /*Bit8u*/byte magic1; /* 0x55 */ /*Bit8u*/byte magic2; /* 0xaa */ diff --git a/jdosbox/src/main/java/jdos/dos/drives/Drive_fat.java b/jdosbox/src/main/java/jdos/dos/drives/Drive_fat.java index 6808d8b6..fa3ea1e3 100644 --- a/jdosbox/src/main/java/jdos/dos/drives/Drive_fat.java +++ b/jdosbox/src/main/java/jdos/dos/drives/Drive_fat.java @@ -19,8 +19,8 @@ public class Drive_fat extends Dos_Drive { static private final int FAT16 = 1; static private final int FAT32 = 2; - private /*Bit8u*/ byte[] fatSectBuffer = new byte[1024]; - private Ptr pfatSectBuffer = new Ptr(fatSectBuffer, 0); + private final /*Bit8u*/ byte[] fatSectBuffer = new byte[1024]; + private final Ptr pfatSectBuffer = new Ptr(fatSectBuffer, 0); /*Bit32u*/ long curFatSect; static public class fatFile extends DOS_File { @@ -199,7 +199,8 @@ public boolean Seek(/*Bit32u*/LongRef pos,/*Bit32u*/int type) { if ((/*Bit32u*/long) seekto > filelength) seekto = (/*Bit32s*/int) filelength; if (seekto < 0) seekto = 0; - seekpos = (/*Bit32u*/long) seekto; + /*Bit32u*/ + seekpos = seekto; currentSector = myDrive.getAbsoluteSectFromBytePos(firstCluster, seekpos); if (currentSector == 0) { /* not within file size, thus no sector is available */ @@ -224,22 +225,18 @@ public boolean Close() { return 0; } - public boolean UpdateDateTimeFromHost() { - return true; - } - public /*Bit32u*/ long firstCluster; public /*Bit32u*/ long seekpos; public /*Bit32u*/ long filelength; public /*Bit32u*/ long currentSector; public /*Bit32u*/ int curSectOff; - public /*Bit8u*/ byte[] sectorBuffer = new byte[512]; + public final /*Bit8u*/ byte[] sectorBuffer = new byte[512]; /* Record of where in the directory structure this file is located */ public /*Bit32u*/ long dirCluster; public /*Bit32u*/ long dirIndex; public boolean loadedSector; - public Drive_fat myDrive; + public final Drive_fat myDrive; private final static int NONE = 0; private final static int READ = 1; @@ -279,9 +276,9 @@ static private class Allocation { /*Bit8u*/ short mediaid; } - private Allocation allocation = new Allocation(); + private final Allocation allocation = new Allocation(); - private Bootstrap bootbuffer = new Bootstrap(); + private final Bootstrap bootbuffer = new Bootstrap(); private /*Bit8u*/ short fattype; private /*Bit32u*/ long CountOfClusters; private /*Bit32u*/ long partSectOff; @@ -406,10 +403,10 @@ private void setClusterValue(/*Bit32u*/long clustNum, /*Bit32u*/long clustValue) break; } for (int fc = 0; fc < bootbuffer.fatcopies; fc++) { - loadedDisk.Write_AbsoluteSector(fatsectnum + (fc * bootbuffer.sectorsperfat), fatSectBuffer, 0); + loadedDisk.Write_AbsoluteSector(fatsectnum + ((long) fc * bootbuffer.sectorsperfat), fatSectBuffer, 0); if (fattype == FAT12) { if (fatentoff >= 511) - loadedDisk.Write_AbsoluteSector(fatsectnum + 1 + (fc * bootbuffer.sectorsperfat), fatSectBuffer, 512); + loadedDisk.Write_AbsoluteSector(fatsectnum + 1 + ((long) fc * bootbuffer.sectorsperfat), fatSectBuffer, 512); } } } @@ -459,7 +456,8 @@ private boolean getFileDirEntry(String filename, DirEntry useEntry, /*Bit32u*/Lo if (!FindNextInternal(currentClust, Bios_disk.imgDTA, foundEntry, findFile)) return false; useEntry.copy(foundEntry); - dirClust.value = (/*Bit32u*/long) currentClust; + /*Bit32u*/ + dirClust.value = currentClust; subEntry.value = ((/*Bit32u*/long) Bios_disk.imgDTA.GetDirID() - 1); return true; } @@ -529,7 +527,7 @@ private boolean getDirClustNum(String dir, /*Bit32u*/LongRef clustNum, boolean p if (testvalue >= 0xfff8) isEOF = true; break; case FAT32: - if (testvalue >= 0xfffffff8l) isEOF = true; + if (testvalue >= 0xfffffff8L) isEOF = true; break; } if ((isEOF) && (skipClust >= 1)) { @@ -565,7 +563,7 @@ public void deleteClustChain(/*Bit32u*/long startCluster) { if (testvalue >= 0xfff8) isEOF = true; break; case FAT32: - if (testvalue >= 0xfffffff8l) isEOF = true; + if (testvalue >= 0xfffffff8L) isEOF = true; break; } if (isEOF) break; @@ -590,7 +588,7 @@ public void deleteClustChain(/*Bit32u*/long startCluster) { if (testvalue >= 0xfff8) isEOF = true; break; case FAT32: - if (testvalue >= 0xfffffff8l) isEOF = true; + if (testvalue >= 0xfffffff8L) isEOF = true; break; } if (isEOF) break; @@ -631,7 +629,7 @@ public boolean allocateCluster(/*Bit32u*/long useCluster, /*Bit32u*/long prevClu setClusterValue(useCluster, 0xffff); break; case FAT32: - setClusterValue(useCluster, 0xffffffffl); + setClusterValue(useCluster, 0xffffffffL); break; } return true; @@ -670,20 +668,20 @@ public Drive_fat(String sysFilename, /*Bit32u*/long bytesector, /*Bit32u*/long c mbrData.load(d); if (mbrData.magic1 != 0x55 || mbrData.magic2 != (byte) 0xaa) - Log.log_msg("Possibly invalid partition table in disk image."); + System.out.println("Possibly invalid partition table in disk image."); startSector = 63; int m; for (m = 0; m < 4; m++) { /* Pick the first available partition */ if (mbrData.pentry[m].partSize != 0x00) { - Log.log_msg("Using partition " + m + " on drive; skipping " + mbrData.pentry[m].absSectStart + " sectors"); + System.out.println("Using partition " + m + " on drive; skipping " + mbrData.pentry[m].absSectStart + " sectors"); startSector = mbrData.pentry[m].absSectStart; break; } } - if (m == 4) Log.log_msg("No good partiton found in image."); + if (m == 4) System.out.println("No good partiton found in image."); partSectOff = startSector; } else { @@ -691,11 +689,11 @@ public Drive_fat(String sysFilename, /*Bit32u*/long bytesector, /*Bit32u*/long c partSectOff = 0; } - loadedDisk.Read_AbsoluteSector(0 + partSectOff, d, 0); + loadedDisk.Read_AbsoluteSector(partSectOff, d, 0); bootbuffer.load(d); if ((bootbuffer.magic1 != 0x55) || (bootbuffer.magic2 != (byte) 0xaa)) { /* Not a FAT filesystem */ - Log.log_msg("Loaded image has no valid magicnumbers at the end!"); + System.out.println("Loaded image has no valid magicnumbers at the end!"); } if (bootbuffer.sectorsperfat == 0) { @@ -710,36 +708,36 @@ public Drive_fat(String sysFilename, /*Bit32u*/long bytesector, /*Bit32u*/long c /* Get size of root dir in sectors */ /* TODO: Get 32-bit total sector count if needed */ /*Bit32u*/ - long RootDirSectors = ((bootbuffer.rootdirentries * 32) + (bootbuffer.bytespersector - 1)) / bootbuffer.bytespersector; + long RootDirSectors = ((bootbuffer.rootdirentries * 32L) + (bootbuffer.bytespersector - 1)) / bootbuffer.bytespersector; /*Bit32u*/ long DataSectors; if (bootbuffer.totalsectorcount != 0) { - DataSectors = bootbuffer.totalsectorcount - (bootbuffer.reservedsectors + (bootbuffer.fatcopies * bootbuffer.sectorsperfat) + RootDirSectors); + DataSectors = bootbuffer.totalsectorcount - (bootbuffer.reservedsectors + ((long) bootbuffer.fatcopies * bootbuffer.sectorsperfat) + RootDirSectors); } else { - DataSectors = bootbuffer.totalsecdword - (bootbuffer.reservedsectors + (bootbuffer.fatcopies * bootbuffer.sectorsperfat) + RootDirSectors); + DataSectors = bootbuffer.totalsecdword - (bootbuffer.reservedsectors + ((long) bootbuffer.fatcopies * bootbuffer.sectorsperfat) + RootDirSectors); } CountOfClusters = DataSectors / bootbuffer.sectorspercluster; - firstDataSector = (bootbuffer.reservedsectors + (bootbuffer.fatcopies * bootbuffer.sectorsperfat) + RootDirSectors) + partSectOff; - firstRootDirSect = bootbuffer.reservedsectors + (bootbuffer.fatcopies * bootbuffer.sectorsperfat) + partSectOff; + firstDataSector = (bootbuffer.reservedsectors + ((long) bootbuffer.fatcopies * bootbuffer.sectorsperfat) + RootDirSectors) + partSectOff; + firstRootDirSect = bootbuffer.reservedsectors + ((long) bootbuffer.fatcopies * bootbuffer.sectorsperfat) + partSectOff; if (CountOfClusters < 4085) { /* Volume is FAT12 */ - Log.log_msg("Mounted FAT volume is FAT12 with " + CountOfClusters + " clusters"); + System.out.println("Mounted FAT volume is FAT12 with " + CountOfClusters + " clusters"); fattype = FAT12; } else if (CountOfClusters < 65525) { - Log.log_msg("Mounted FAT volume is FAT16 with " + CountOfClusters + " clusters"); + System.out.println("Mounted FAT volume is FAT16 with " + CountOfClusters + " clusters"); fattype = FAT16; } else { - Log.log_msg("Mounted FAT volume is FAT32 with " + CountOfClusters + " clusters"); + System.out.println("Mounted FAT volume is FAT32 with " + CountOfClusters + " clusters"); fattype = FAT32; } /* There is no cluster 0, this means we are in the root directory */ cwdDirCluster = 0; - curFatSect = 0xffffffffl; + curFatSect = 0xffffffffL; } public boolean AllocationInfo(/*Bit16u*/IntRef _bytes_sector,/*Bit8u*/ShortRef _sectors_cluster,/*Bit16u*/IntRef _total_clusters,/*Bit16u*/IntRef _free_clusters) { @@ -844,8 +842,7 @@ public boolean FileExists(String name) { DirEntry fileEntry = new DirEntry(); /*Bit32u*/ LongRef dummy1 = new LongRef(0), dummy2 = new LongRef(0); - if (!getFileDirEntry(name, fileEntry, dummy1, dummy2)) return false; - return true; + return getFileDirEntry(name, fileEntry, dummy1, dummy2); } public DOS_File FileOpen(String name,/*Bit32u*/int flags) { @@ -890,7 +887,7 @@ public boolean FindFirst(String _dir, Dos_DTA dta, boolean fcb_findfirst/*=false StringRef pattern = new StringRef(); dta.GetSearchParams(attr, pattern); if (attr.value == Dos_system.DOS_ATTR_VOLUME) { - if (GetLabel().length() == 0) { + if (GetLabel().isEmpty()) { Dos.DOS_SetError(Dos.DOSERR_NO_MORE_FILES); return false; } @@ -932,14 +929,14 @@ private boolean FindNextInternal(/*Bit32u*/long dirClustNumber, Dos_DTA dta, Dir for (int i = 0; i < sectbuf.length; i++) { sectbuf[i] = new DirEntry(); } - String find_name = ""; - String longFileName = ""; + String find_name; + StringBuilder longFileName = new StringBuilder(); boolean isLong = false; //nextfile: while (true) { if (!isLong) { - longFileName = ""; + longFileName = new StringBuilder(); } logentsector = dirPos / 16; entryoffset = dirPos % 16; @@ -978,7 +975,7 @@ private boolean FindNextInternal(/*Bit32u*/long dirClustNumber, Dos_DTA dta, Dir } if ((sectbuf[entryoffset].attrib & 0xFF) == 0xF) { - StringBuffer tmp = new StringBuffer(); + StringBuilder tmp = new StringBuilder(); byte[] b = sectbuf[entryoffset].entryname; boolean end = false; @@ -1049,12 +1046,11 @@ private boolean FindNextInternal(/*Bit32u*/long dirClustNumber, Dos_DTA dta, Dir if (!end) { char c = (char) (sectbuf[entryoffset].entrysize >>> 16); if (c == 0) { - end = true; } else { tmp.append(c); } } - longFileName = tmp.toString() + longFileName; + longFileName.insert(0, tmp); isLong = true; } else { isLong = false; @@ -1066,7 +1062,7 @@ private boolean FindNextInternal(/*Bit32u*/long dirClustNumber, Dos_DTA dta, Dir if ((~attrs.value & sectbuf[entryoffset].attrib & (Dos_system.DOS_ATTR_DIRECTORY | Dos_system.DOS_ATTR_HIDDEN | Dos_system.DOS_ATTR_SYSTEM)) != 0) continue; if (!Drives.WildFileCmp(find_name, srch_pattern.value)) { - if ((longFileName.length()!=0 && longName!=null && longFileName.equalsIgnoreCase(longName))) + if (((longFileName.length() > 0) && longFileName.toString().equalsIgnoreCase(longName))) break; continue; } @@ -1166,7 +1162,7 @@ public boolean directoryBrowse(/*Bit32u*/long dirClustNumber, DirEntry useEntry, return true; } - public boolean directoryChange(/*Bit32u*/long dirClustNumber, DirEntry useEntry, /*Bit32s*/int entNum) { + public void directoryChange(/*Bit32u*/long dirClustNumber, DirEntry useEntry, /*Bit32s*/int entNum) { DirEntry[] sectbuf = new DirEntry[16]; /* 16 directory entries per sector */ /*Bit32u*/ long logentsector; /* Logical entry sector */ @@ -1186,13 +1182,13 @@ public boolean directoryChange(/*Bit32u*/long dirClustNumber, DirEntry useEntry, entryoffset = dirPos % 16; if (dirClustNumber == 0) { - if (dirPos >= bootbuffer.rootdirentries) return false; + if (dirPos >= bootbuffer.rootdirentries) return; tmpsector = firstRootDirSect + logentsector; loadedDisk.Read_AbsoluteSector(tmpsector, d, 0); } else { tmpsector = getAbsoluteSectFromChain(dirClustNumber, logentsector); /* A zero sector number can't happen */ - if (tmpsector == 0) return false; + if (tmpsector == 0) return; loadedDisk.Read_AbsoluteSector(tmpsector, d, 0); } for (int i = 0; i < sectbuf.length; i++) @@ -1200,19 +1196,17 @@ public boolean directoryChange(/*Bit32u*/long dirClustNumber, DirEntry useEntry, dirPos++; /* End of directory list */ - if (sectbuf[entryoffset].entryname[0] == 0x00) return false; + if (sectbuf[entryoffset].entryname[0] == 0x00) return; --entNum; } if (tmpsector != 0) { useEntry.save(d, entryoffset * DirEntry.size); loadedDisk.Write_AbsoluteSector(tmpsector, d, 0); - return true; } else { - return false; } } - private boolean addDirectoryEntry(/*Bit32u*/long dirClustNumber, DirEntry useEntry) { + private void addDirectoryEntry(/*Bit32u*/long dirClustNumber, DirEntry useEntry) { DirEntry[] sectbuf = new DirEntry[16]; /* 16 directory entries per sector */ /*Bit32u*/ long logentsector; /* Logical entry sector */ @@ -1232,7 +1226,7 @@ private boolean addDirectoryEntry(/*Bit32u*/long dirClustNumber, DirEntry useEnt entryoffset = dirPos % 16; if (dirClustNumber == 0) { - if (dirPos >= bootbuffer.rootdirentries) return false; + if (dirPos >= bootbuffer.rootdirentries) return; tmpsector = firstRootDirSect + logentsector; loadedDisk.Read_AbsoluteSector(tmpsector, d, 0); } else { @@ -1242,10 +1236,10 @@ private boolean addDirectoryEntry(/*Bit32u*/long dirClustNumber, DirEntry useEnt /*Bit32u*/ long newClust; newClust = appendCluster(dirClustNumber); - if (newClust == 0) return false; + if (newClust == 0) return; /* Try again to get tmpsector */ tmpsector = getAbsoluteSectFromChain(dirClustNumber, logentsector); - if (tmpsector == 0) return false; /* Give up if still can't get more room for directory */ + if (tmpsector == 0) return; /* Give up if still can't get more room for directory */ } loadedDisk.Read_AbsoluteSector(tmpsector, d, 0); } @@ -1261,7 +1255,6 @@ private boolean addDirectoryEntry(/*Bit32u*/long dirClustNumber, DirEntry useEnt } } - return true; } private void zeroOutCluster(/*Bit32u*/long clustNumber) { @@ -1376,9 +1369,7 @@ public boolean RemoveDir(String dir) { fileidx++; } - if (!found) return false; - - return true; + return found; } public boolean Rename(String oldname, String newname) { diff --git a/jdosbox/src/main/java/jdos/dos/drives/Drive_iso.java b/jdosbox/src/main/java/jdos/dos/drives/Drive_iso.java index 053ff3f4..bac7e7a4 100644 --- a/jdosbox/src/main/java/jdos/dos/drives/Drive_iso.java +++ b/jdosbox/src/main/java/jdos/dos/drives/Drive_iso.java @@ -13,7 +13,7 @@ public class Drive_iso extends Dos_Drive { static final private int ISO_MAX_FILENAME_LENGTH = 37; static final private int ISO_MAXPATHNAME = 256; static final private int ISO_FIRST_VD = 16; - static private boolean IS_ASSOC(int fileFlags) {return (fileFlags & ISO_ASSOCIATED)!=0;} + static private boolean IS_ASSOC(int fileFlags) {return (fileFlags & ISO_ASSOCIATED) == 0;} static private boolean IS_DIR(int fileFlags) {return (fileFlags & ISO_DIRECTORY)!=0;} static private boolean IS_HIDDEN(int fileFlags) {return (fileFlags & ISO_HIDDEN)!=0;} @@ -37,7 +37,7 @@ private static class isoDirEntry { /*Bit16u*/int VolumeSeqNumberL; /*Bit16u*/int VolumeSeqNumberM; /*Bit8u*/short fileIdentLength; - /*Bit8u*/byte[] ident = new byte[222]; + /*Bit8u*/final byte[] ident = new byte[222]; public void copy(isoDirEntry i) { length = i.length; @@ -95,26 +95,26 @@ private static class DirIterator { /*Bit32u*/long endSector; /*Bit32u*/long pos; } - private DirIterator[] dirIterators = new DirIterator[DOS_Drive_Cache.MAX_OPENDIRS]; + private final DirIterator[] dirIterators = new DirIterator[DOS_Drive_Cache.MAX_OPENDIRS]; private int nextFreeDirIterator; private static class SectorHashEntry { boolean valid; /*Bit32u*/long sector; - /*Bit8u*/byte[] data = new byte[ISO_FRAMESIZE]; + /*Bit8u*/final byte[] data = new byte[ISO_FRAMESIZE]; } - private SectorHashEntry[] sectorHashEntries = new SectorHashEntry[ISO_MAX_HASH_TABLE_SIZE]; + private final SectorHashEntry[] sectorHashEntries = new SectorHashEntry[ISO_MAX_HASH_TABLE_SIZE]; private boolean dataCD; - private isoDirEntry rootEntry = new isoDirEntry(); + private final isoDirEntry rootEntry = new isoDirEntry(); private /*Bit8u*/short mediaid; - private String fileName; + private final String fileName; private /*Bit8u*/short subUnit; private char driveLetter; private String discLabel; - class isoFile extends DOS_File { + static class isoFile extends DOS_File { isoFile(Drive_iso drive, String name, FileStat_Block stat, /*Bit32u*/long offset) { this.drive = drive; time = stat.time; @@ -168,7 +168,7 @@ public boolean Write(byte[] data,/*Bit16u*/IntRef size) { return false; } public boolean Seek(/*Bit32u*/LongRef pos,/*Bit32u*/int type) { - int p = (int)(pos.value & 0xFFFFFFFFl); + int p = (int)(pos.value & 0xFFFFFFFFL); switch (type) { case Dos_files.DOS_SEEK_SET: filePos = fileBegin + p; @@ -196,12 +196,12 @@ public boolean Close() { return 0x40; // read-only drive } - private Drive_iso drive; - private /*Bit8u*/byte[] buffer = new byte[ISO_FRAMESIZE]; + private final Drive_iso drive; + private final /*Bit8u*/byte[] buffer = new byte[ISO_FRAMESIZE]; private int cachedSector; - private /*Bit32u*/long fileBegin; + private final /*Bit32u*/long fileBegin; private /*Bit32u*/long filePos; - private /*Bit32u*/long fileEnd; + private final /*Bit32u*/long fileEnd; private /*Bit32u*/int info; } @@ -223,7 +223,7 @@ public Drive_iso(char driveLetter, String fileName, /*Bit8u*/short mediaid, IntR StringRef d = new StringRef(discLabel); Drives.Set_Label(buffer.value,d,true); discLabel = d.value; - } else if (CDROM_Interface_Image.images[subUnit].HasDataTrack() == false) { //Audio only cdrom + } else if (!CDROM_Interface_Image.images[subUnit].HasDataTrack()) { //Audio only cdrom info = "isoDrive "+fileName; this.driveLetter = driveLetter; this.mediaid = mediaid; @@ -244,7 +244,7 @@ int UpdateMscdex(char driveLetter, String path, /*Bit8u*/ShortRef subUnit) { if (DosMSCDEX.MSCDEX_HasDrive(driveLetter)) { CDROM_Interface_Image oldCdrom = CDROM_Interface_Image.images[subUnit.value]; Dos_cdrom.CDROM_Interface cdrom = new CDROM_Interface_Image(subUnit.value); - if (!cdrom.SetDevice(path, 0)) { + if (cdrom.SetDevice(path, 0)) { CDROM_Interface_Image.images[subUnit.value] = oldCdrom; cdrom.close(); return 3; @@ -318,7 +318,7 @@ public boolean FindFirst(String dir,Dos_DTA dta,boolean fcb_findfirst/*=false*/) // get a directory iterator and save its id in the dta int dirIterator = GetDirIterator(de); - boolean isRoot = (dir.length() == 0); + boolean isRoot = (dir.isEmpty()); dirIterators[dirIterator].root = isRoot; dta.SetDirID(dirIterator); @@ -356,7 +356,7 @@ public boolean FindNext(Dos_DTA dta) { if (IS_HIDDEN(de.fileFlags)) findAttr |= Dos_system.DOS_ATTR_HIDDEN; String deident = StringHelper.toString(de.ident); - if (!IS_ASSOC(de.fileFlags) && !(isRoot && de.ident[0]=='.') && Drives.WildFileCmp(deident, pattern.value) + if (IS_ASSOC(de.fileFlags) && !(isRoot && de.ident[0]=='.') && Drives.WildFileCmp(deident, pattern.value) && (~attr.value & findAttr & (Dos_system.DOS_ATTR_DIRECTORY | Dos_system.DOS_ATTR_HIDDEN | Dos_system.DOS_ATTR_SYSTEM))==0) { /* file is okay, setup everything to be copied in DTA Block */ @@ -615,13 +615,13 @@ boolean loadImage() { boolean lookup(isoDirEntry de, String path) { if (!dataCD) return false; de.copy(this.rootEntry); - if (path.length()==0) return true; + if (path.isEmpty()) return true; String[] isoPath = StringHelper.split(StringHelper.replace(path, "\\", "/"), "/"); // iterate over all path elements (name), and search each of them in the current de - for(int i=0;i dirSearchEntries = new HashMap(); - private final Map upperCaseNameFiles = new HashMap(); - private final Map> directoryStructureMap = new HashMap>(); + private final Map dirSearchEntries = new HashMap<>(); + private final Map upperCaseNameFiles = new HashMap<>(); + private final Map> directoryStructureMap = new HashMap<>(); static public class FileSearch { private final Iterator fileListIterator; @@ -165,7 +165,7 @@ private byte[] fill(int offset) throws IOException { skip = offset; } while (skip>0) { - skip-=is.skip(skip); + skip-= (int) is.skip(skip); } real_pos = offset; @@ -185,7 +185,7 @@ private byte[] fill(int offset) throws IOException { } private byte[] get(int offset) throws IOException { - Integer i = new Integer(offset); + Integer i = offset; byte[] b = (byte[])cache.get(i); if (b == null) { b = fill(offset); @@ -237,14 +237,17 @@ public boolean Seek(/*Bit32u*/LongRef pos,/*Bit32u*/int type) { break; case Dos_files.DOS_SEEK_CUR: /* Is this relative seek signed? */ - seekto = (/*Bit32s*/int) pos.value + (/*Bit32s*/int) seek; + /*Bit32s*/ + seekto = (/*Bit32s*/int) pos.value + seek; break; case Dos_files.DOS_SEEK_END: - seekto = (/*Bit32s*/int) length + (/*Bit32s*/int) pos.value; + /*Bit32s*/ + seekto = length + (/*Bit32s*/int) pos.value; break; } - if ((/*Bit32u*/long) seekto > length) seekto = (/*Bit32s*/int) length; + /*Bit32s*/ + if ((/*Bit32u*/long) seekto > length) seekto = length; if (seekto < 0) seekto = 0; seek = seekto; pos.value = seek; @@ -254,7 +257,9 @@ public boolean Seek(/*Bit32u*/LongRef pos,/*Bit32u*/int type) { public boolean Close() { length = 0; if (is != null) { - try {is.close();} catch (Exception e1) {} + try {is.close();} catch (Exception e1) { + throw new RuntimeException(e1); + } is = null; } open = false; @@ -272,14 +277,14 @@ public Drive_zip(final String sysFilename) { zipFile = new ZipFile(sysFilename); final Enumeration entries = zipFile.entries(); while (entries.hasMoreElements()) { - final ZipEntry zipEntry = (ZipEntry) entries.nextElement(); - this.totalSize += zipEntry.getSize(); + final ZipEntry zipEntry = entries.nextElement(); + this.totalSize += (int) zipEntry.getSize(); final ZipFileEntry zipFileEntry = new ZipFileEntry(zipEntry); upperCaseNameFiles.put(zipFileEntry.getFullName().toUpperCase(), zipFileEntry); final String dirName = zipFileEntry.getDirName().toUpperCase(); if (!directoryStructureMap.containsKey(dirName)) { - directoryStructureMap.put(dirName, new ArrayList()); + directoryStructureMap.put(dirName, new ArrayList<>()); } directoryStructureMap.get(dirName).add(zipFileEntry); @@ -328,11 +333,7 @@ public DOS_File FileCreate(String name,/*Bit16u*/int attributes) { public boolean FileExists(String name) { final ZipFileEntry zipFileEntry = upperCaseNameFiles.get(name); - if (zipFileEntry == null) { - return false; - } - - return true; + return zipFileEntry != null; } public DOS_File FileOpen(final String name,/*Bit32u*/int flags) { diff --git a/jdosbox/src/main/java/jdos/dos/drives/PartTable.java b/jdosbox/src/main/java/jdos/dos/drives/PartTable.java index 4da2cd69..fb1467cb 100644 --- a/jdosbox/src/main/java/jdos/dos/drives/PartTable.java +++ b/jdosbox/src/main/java/jdos/dos/drives/PartTable.java @@ -7,31 +7,33 @@ public PartTable() { for (int i=0;i>> 10) & 3); } @@ -173,12 +174,12 @@ else if (round == ROUND_Up) { round = 0x7FF; } /*Bit64s*/ - long mant64 = ((eind + round) >>> 11) & 0xfffffffffffffl; + long mant64 = ((eind + round) >>> 11) & 0xfffffffffffffL; /*Bit64s*/ long sign = (begin & 0x8000) != 0 ? 1 : 0; double result = Double.longBitsToDouble((sign << 63) | (exp64final << 52) | mant64); - if (eind == 0x8000000000000000l && (begin & 0x7fff) == 0x7fff) { + if (eind == 0x8000000000000000L && (begin & 0x7fff) == 0x7fff) { //Detect INF and -INF (score 3.11 when drawing a slur.) result = sign != 0 ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY; } @@ -190,18 +191,18 @@ else if (round == ROUND_Up) { static private void FPU_ST80(/*PhysPt*/int addr,/*Bitu*/int reg) { long value = Double.doubleToRawLongBits(regs[reg]); /*Bit64s*/ - long sign80 = (value & (0x8000000000000000l)) != 0 ? 1 : 0; + long sign80 = (value & (0x8000000000000000L)) != 0 ? 1 : 0; /*Bit64s*/ - long exp80 = value & (0x7ff0000000000000l); + long exp80 = value & (0x7ff0000000000000L); /*Bit64s*/ long exp80final = (exp80 >> 52); /*Bit64s*/ - long mant80 = value & (0x000fffffffffffffl); + long mant80 = value & (0x000fffffffffffffL); /*Bit64s*/ long mant80final = (mant80 << 11); if (regs[reg] != 0) { //Zero is a special case // Elvira wants the 8 and tcalc doesn't - mant80final |= 0x8000000000000000l; + mant80final |= 0x8000000000000000L; //Ca-cyber doesn't like this when result is zero. exp80final += (BIAS80 - BIAS64); } @@ -239,7 +240,7 @@ static private void FPU_FBLD(byte[] data,/*Bitu*/int store_to) { /*Bit64u*/ long val = 0; /*Bitu*/ - int in = 0; + int in; /*Bit64u*/ long base = 1; for (/*Bitu*/int i = 0; i < 9; i++) { @@ -305,7 +306,7 @@ static private void FPU_FST_I64(/*PhysPt*/int addr) { static private void FPU_FBST(/*PhysPt*/int addr) { boolean sign = false; double val = regs[top]; - if ((Double.doubleToRawLongBits(val) & 0x8000000000000000l) != 0) { //sign + if ((Double.doubleToRawLongBits(val) & 0x8000000000000000L) != 0) { //sign sign = true; val = -val; } @@ -515,7 +516,7 @@ static private void FPU_FPREM1() { static private void FPU_FXAM() { long bits = Double.doubleToRawLongBits(regs[top]); - if ((bits & 0x8000000000000000l) != 0) //sign + if ((bits & 0x8000000000000000L) != 0) //sign { FPU_SET_C1(1); } else { @@ -571,11 +572,11 @@ static private void FPU_FSCALE() { static private void FPU_FSTENV(/*PhysPt*/int addr) { FPU_SET_TOP(top); if (!CPU.cpu.code.big) { - Memory.mem_writew(addr + 0, (cw)); + Memory.mem_writew(addr, (cw)); Memory.mem_writew(addr + 2, (sw)); Memory.mem_writew(addr + 4, (FPU_GetTag())); } else { - Memory.mem_writed(addr + 0, (cw)); + Memory.mem_writed(addr, (cw)); Memory.mem_writed(addr + 4, (sw)); Memory.mem_writed(addr + 8, (FPU_GetTag())); } @@ -589,13 +590,13 @@ static private void FPU_FLDENV(/*PhysPt*/int addr) { /*Bitu*/ int cw; if (!CPU.cpu.code.big) { - cw = Memory.mem_readw(addr + 0); + cw = Memory.mem_readw(addr); sw = Memory.mem_readw(addr + 2); tag = Memory.mem_readw(addr + 4); } else { - cw = Memory.mem_readd(addr + 0); + cw = Memory.mem_readd(addr); sw = Memory.mem_readd(addr + 4); - tagbig = Memory.mem_readd(addr + 8) & 0xFFFFFFFFl; + tagbig = Memory.mem_readd(addr + 8) & 0xFFFFFFFFL; tag = (int) (tagbig); } FPU_SetTag(tag); @@ -631,7 +632,7 @@ static private void FPU_FXTRACT() { long bits = Double.doubleToRawLongBits(regs[top]); /*Bit64s*/ - long exp80 = bits & 0x7ff0000000000000l; + long exp80 = bits & 0x7ff0000000000000L; /*Bit64s*/ long exp80final = (exp80 >> 52) - BIAS64; /*Real64*/ @@ -1647,15 +1648,12 @@ static public void FPU_ESC2_Normal(/*Bitu*/int rm) { if (LOG) System.out.println("FCMOV_ST0_STj PF"); break; case 0x05: - switch (sub) { - case 0x01: /* FUCOMPP */ - FUCOMPP(); - if (LOG) System.out.println("FUCOMPP"); - break; - default: - if (Log.level <= LogSeverities.LOG_WARN) - Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 2:Unhandled group " + group + " subfunction " + sub); - break; + if (sub == 0x01) { /* FUCOMPP */ + FUCOMPP(); + if (LOG) System.out.println("FUCOMPP"); + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 2:Unhandled group " + group + " subfunction " + sub); } break; default: @@ -2100,15 +2098,12 @@ static public void FPU_ESC7_Normal(/*Bitu*/int rm) { if (LOG) System.out.println("FSTP_STi"); break; case 0x04: - switch (sub) { - case 0x00: /* FNSTSW AX*/ - FNSTSW_AX(); - if (LOG) System.out.println("FNSTSW_AX"); - break; - default: - if (Log.level <= LogSeverities.LOG_WARN) - Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 7:Unhandled group " + group + " subfunction " + sub); - break; + if (sub == 0x00) { /* FNSTSW AX*/ + FNSTSW_AX(); + if (LOG) System.out.println("FNSTSW_AX"); + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 7:Unhandled group " + group + " subfunction " + sub); } break; case 0x05: @@ -2128,12 +2123,10 @@ static public void FPU_ESC7_Normal(/*Bitu*/int rm) { public static boolean softFPU = false; - public static Section.SectionFunction FPU_Init = new Section.SectionFunction() { - public void call(Section configuration) { - FPU_FINIT(); - SoftFPU.FPU_FINIT(); - Section_prop section = (Section_prop) configuration; - softFPU = section.Get_bool("softfpu"); - } + public static final Section.SectionFunction FPU_Init = configuration -> { + FPU_FINIT(); + SoftFPU.FPU_FINIT(); + Section_prop section = (Section_prop) configuration; + softFPU = section.Get_bool("softfpu"); }; } diff --git a/jdosbox/src/main/java/jdos/fpu/SoftFPU.java b/jdosbox/src/main/java/jdos/fpu/SoftFPU.java index cbe70fc6..65b68f89 100644 --- a/jdosbox/src/main/java/jdos/fpu/SoftFPU.java +++ b/jdosbox/src/main/java/jdos/fpu/SoftFPU.java @@ -58,7 +58,7 @@ class L { // } } void ll(int lower, int upper) { - ll(lower & 0xFFFFFFFFl | ((upper & 0xFFFFFFFFl) << 32)); + ll(lower & 0xFFFFFFFFL | ((upper & 0xFFFFFFFFL) << 32)); } long ll() { return d; @@ -67,7 +67,7 @@ void ll(long l) { d = l; } - L l = new L(); + final L l = new L(); public long d; } @@ -97,9 +97,9 @@ public FPU_rec() { for (int i=0;i>> 10) & 3); } @@ -226,7 +228,7 @@ static private long FROUND(long in){ static private class Test { /*Bit16s*/short begin; - FPU_Reg eind=new FPU_Reg(); + final FPU_Reg eind=new FPU_Reg(); } static private /*Real64*/long FPU_FLD80(/*PhysPt*/int addr) { Test test = new Test(); @@ -238,12 +240,12 @@ static private class Test { /*Bit64s*/long exp64final = ((exp64 >0)?blah:-blah) +BIAS64; // 0x3FFF is for rounding - /*Bit64s*/long mant64 = ((test.eind.ll()+0x3FF) >>> 11) & 0xfffffffffffffl; + /*Bit64s*/long mant64 = ((test.eind.ll()+0x3FF) >>> 11) & 0xfffffffffffffL; /*Bit64s*/long sign = (test.begin&0x8000)!=0?1:0; FPU_Reg result=new FPU_Reg(); result.ll((sign <<63)|(exp64final << 52)| mant64); - if(test.eind.ll() == 0x8000000000000000l && (test.begin & 0x7fff) == 0x7fff) { + if(test.eind.ll() == 0x8000000000000000L && (test.begin & 0x7fff) == 0x7fff) { //Detect INF and -INF (score 3.11 when drawing a slur.) result.d = sign!=0?MicroDouble.NEGATIVE_INFINITY:MicroDouble.POSITIVE_INFINITY; } @@ -254,14 +256,14 @@ static private class Test { static private void FPU_ST80(/*PhysPt*/int addr,/*Bitu*/int reg) { Test test = new Test(); - /*Bit64s*/long sign80 = (fpu.regs[reg].ll() & (0x8000000000000000l))!=0?1:0; - /*Bit64s*/long exp80 = fpu.regs[reg].ll() & (0x7ff0000000000000l); + /*Bit64s*/long sign80 = (fpu.regs[reg].ll() & (0x8000000000000000L))!=0?1:0; + /*Bit64s*/long exp80 = fpu.regs[reg].ll() & (0x7ff0000000000000L); /*Bit64s*/long exp80final = (exp80>>52); - /*Bit64s*/long mant80 = fpu.regs[reg].ll() & (0x000fffffffffffffl); + /*Bit64s*/long mant80 = fpu.regs[reg].ll() & (0x000fffffffffffffL); /*Bit64s*/long mant80final = (mant80 << 11); if(fpu.regs[reg].d != 0){ //Zero is a special case // Elvira wants the 8 and tcalc doesn't - mant80final |= 0x8000000000000000l; + mant80final |= 0x8000000000000000L; //Ca-cyber doesn't like this when result is zero. exp80final += (BIAS80 - BIAS64); } @@ -301,7 +303,7 @@ static private void FPU_FLD_I64(/*PhysPt*/int addr,/*Bitu*/int store_to) { static private void FPU_FBLD(/*PhysPt*/int addr,/*Bitu*/int store_to) { /*Bit64u*/long val = 0; - /*Bitu*/int in = 0; + /*Bitu*/int in; /*Bit64u*/long base = 1; for(/*Bitu*/int i = 0;i < 9;i++){ in = Memory.mem_readb(addr + i); @@ -363,14 +365,14 @@ static private void FPU_FST_I64(/*PhysPt*/int addr) { } static private void FPU_FBST(/*PhysPt*/int addr) { - String val = String.valueOf(MicroDouble.longValue(fpu.regs[fpu.top].d)); + StringBuilder val = new StringBuilder(String.valueOf(MicroDouble.longValue(fpu.regs[fpu.top].d))); boolean sign = false; - if (val.startsWith("-")) { + if (val.toString().startsWith("-")) { sign = true; - val = val.substring(1); + val = new StringBuilder(val.substring(1)); } while (val.length()<19) { - val = "0"+val; + val.insert(0, "0"); } for (int i=0;i<9;i++) { short p = (short)((val.charAt(i*2)-'0') | ((val.charAt(i*2+1)-'0') << 4)); @@ -474,7 +476,7 @@ static private void FPU_FCOM(/*Bitu*/int st, /*Bitu*/int other){ FPU_SET_C3(0);FPU_SET_C2(0);FPU_SET_C0(1);return; } // st > other - FPU_SET_C3(0);FPU_SET_C2(0);FPU_SET_C0(0);return; + FPU_SET_C3(0);FPU_SET_C2(0);FPU_SET_C0(0); } static private void FPU_FUCOM(/*Bitu*/int st, /*Bitu*/int other){ @@ -519,7 +521,7 @@ static private void FPU_FPREM1(){ } static private void FPU_FXAM(){ - if((fpu.regs[fpu.top].ll() & 0x8000000000000000l)!=0) //sign + if((fpu.regs[fpu.top].ll() & 0x8000000000000000L)!=0) //sign { FPU_SET_C1(1); } @@ -565,11 +567,11 @@ static private void FPU_FSCALE(){ static private void FPU_FSTENV(/*PhysPt*/int addr){ FPU_SET_TOP(fpu.top); if(!CPU.cpu.code.big) { - Memory.mem_writew(addr+0,(fpu.cw)); + Memory.mem_writew(addr,(fpu.cw)); Memory.mem_writew(addr+2,(fpu.sw)); Memory.mem_writew(addr+4,(FPU_GetTag())); } else { - Memory.mem_writed(addr+0,(fpu.cw)); + Memory.mem_writed(addr,(fpu.cw)); Memory.mem_writed(addr+4,(fpu.sw)); Memory.mem_writed(addr+8,(FPU_GetTag())); } @@ -580,13 +582,13 @@ static private void FPU_FLDENV(/*PhysPt*/int addr){ /*Bit32u*/long tagbig; /*Bitu*/int cw; if(!CPU.cpu.code.big) { - cw = Memory.mem_readw(addr+0); + cw = Memory.mem_readw(addr); fpu.sw = Memory.mem_readw(addr+2); tag = Memory.mem_readw(addr+4); } else { - cw = Memory.mem_readd(addr + 0); + cw = Memory.mem_readd(addr); fpu.sw = Memory.mem_readd(addr + 4); - tagbig = Memory.mem_readd(addr + 8) & 0xFFFFFFFFl; + tagbig = Memory.mem_readd(addr + 8) & 0xFFFFFFFFL; tag = (int)(tagbig); } FPU_SetTag(tag); @@ -619,7 +621,7 @@ static private void FPU_FXTRACT() { // if double ever uses a different base please correct this function FPU_Reg test = new FPU_Reg(fpu.regs[fpu.top]); - /*Bit64s*/long exp80 = test.ll() & 0x7ff0000000000000l; + /*Bit64s*/long exp80 = test.ll() & 0x7ff0000000000000L; /*Bit64s*/long exp80final = (exp80>>52) - BIAS64; exp80final = MicroDouble.longToDouble(exp80final); /*Real64*/long mant = MicroDouble.div(test.d , MicroDouble.pow(MicroDouble.TWO, exp80final)); @@ -699,7 +701,7 @@ static private void FPU_FCOM_EA(/*Bitu*/int op1){ FPU_FCOM(op1,8); } - public static FPU_rec fpu=new FPU_rec(); + public static final FPU_rec fpu=new FPU_rec(); static private void FPU_FLDCW(/*PhysPt*/int addr){ /*Bit16u*/int temp = Memory.mem_readw(addr); @@ -978,22 +980,18 @@ static public void FPU_ESC2_EA(/*Bitu*/int rm,/*PhysPt*/int addr) { static public void FPU_ESC2_Normal(/*Bitu*/int rm) { /*Bitu*/int group=(rm >> 3) & 7; /*Bitu*/int sub=(rm & 7); - switch(group){ - case 0x05: - switch(sub){ - case 0x01: /* FUCOMPP */ - FPU_FUCOM(fpu.top,STV(1)); + if (group == 0x05) { + if (sub == 0x01) { /* FUCOMPP */ + FPU_FUCOM(fpu.top, STV(1)); FPU_FPOP(); FPU_FPOP(); - break; - default: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_FPU,LogSeverities.LOG_WARN,"ESC 2:Unhandled group "+group+" subfunction "+sub); - break; + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 2:Unhandled group " + group + " subfunction " + sub); } - break; - default: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_FPU,LogSeverities.LOG_WARN,"ESC 2:Unhandled group "+group+" subfunction "+sub); - break; + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 2:Unhandled group " + group + " subfunction " + sub); } } @@ -1032,31 +1030,30 @@ static public void FPU_ESC3_EA(/*Bitu*/int rm,/*PhysPt*/int addr) { static public void FPU_ESC3_Normal(/*Bitu*/int rm) { /*Bitu*/int group=(rm >> 3) & 7; /*Bitu*/int sub=(rm & 7); - switch (group) { - case 0x04: + if (group == 0x04) { switch (sub) { - case 0x00: //FNENI - case 0x01: //FNDIS - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_FPU,LogSeverities.LOG_ERROR,"8087 only fpu code used esc 3: group 4: subfuntion :"+sub); - break; - case 0x02: //FNCLEX FCLEX - FPU_FCLEX(); - break; - case 0x03: //FNINIT FINIT - FPU_FINIT(); - break; - case 0x04: //FNSETPM - case 0x05: //FRSTPM + case 0x00: //FNENI + case 0x01: //FNDIS + if (Log.level <= LogSeverities.LOG_ERROR) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_ERROR, "8087 only fpu code used esc 3: group 4: subfuntion :" + sub); + break; + case 0x02: //FNCLEX FCLEX + FPU_FCLEX(); + break; + case 0x03: //FNINIT FINIT + FPU_FINIT(); + break; + case 0x04: //FNSETPM + case 0x05: //FRSTPM // Log.log(LogTypes.LOG_FPU,LogSeverities.LOG_ERROR,"80267 protected mode (un)set. Nothing done"); - FPU_FNOP(); - break; - default: - Log.exit("ESC 3:ILLEGAL OPCODE group "+group+" subfunction "+sub); + FPU_FNOP(); + break; + default: + Log.exit("ESC 3:ILLEGAL OPCODE group " + group + " subfunction " + sub); } - break; - default: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_FPU,LogSeverities.LOG_WARN,"ESC 3:Unhandled group "+group+" subfunction "+sub); - break; + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 3:Unhandled group " + group + " subfunction " + sub); } } @@ -1271,14 +1268,12 @@ static public void FPU_ESC7_Normal(/*Bitu*/int rm) { FPU_FPOP(); break; case 0x04: - switch(sub){ - case 0x00: /* FNSTSW AX*/ - FPU_SET_TOP(fpu.top); - CPU_Regs.reg_eax.word(fpu.sw); - break; - default: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_FPU,LogSeverities.LOG_WARN,"ESC 7:Unhandled group "+group+" subfunction "+sub); - break; + if (sub == 0x00) { /* FNSTSW AX*/ + FPU_SET_TOP(fpu.top); + CPU_Regs.reg_eax.word(fpu.sw); + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_FPU, LogSeverities.LOG_WARN, "ESC 7:Unhandled group " + group + " subfunction " + sub); } break; default: diff --git a/jdosbox/src/main/java/jdos/gui/Main.java b/jdosbox/src/main/java/jdos/gui/Main.java index 38f5d1d7..e0b2870f 100644 --- a/jdosbox/src/main/java/jdos/gui/Main.java +++ b/jdosbox/src/main/java/jdos/gui/Main.java @@ -12,7 +12,7 @@ static public void GFX_SetCursor(Cursor cursor) { } static public void GFX_Events() { - while (events.size()>0) { + while (!events.isEmpty()) { Object event = events.elementAt(0); events.removeElementAt(0); if (event == null) @@ -27,12 +27,12 @@ else if (event instanceof MouseEvent) } static public class MouseEvent2 extends MouseEvent { - public int rel_x; - public int rel_y; - public float abs_x; - public float abs_y; + public final int rel_x; + public final int rel_y; + public final float abs_x; + public final float abs_y; public MouseEvent2(MouseEvent event, int rel_x, int rel_y, float abs_x, float abs_y, int offX, int offY) { - super(event.getComponent(), event.getID(), event.getWhen(), event.getModifiers(), event.getX()-offX, event.getY()-offY, event.getClickCount(), event.isPopupTrigger()); + super(event.getComponent(), event.getID(), event.getWhen(), event.getModifiersEx(), event.getX()-offX, event.getY()-offY, event.getClickCount(), event.isPopupTrigger()); this.rel_x = rel_x; this.rel_y = rel_y; this.abs_x = abs_x; @@ -41,7 +41,7 @@ public MouseEvent2(MouseEvent event, int rel_x, int rel_y, float abs_x, float ab } static public class MouseEvent1 extends MouseEvent { public MouseEvent1(MouseEvent event, int offX, int offY) { - super(event.getComponent(), event.getID(), event.getWhen(), event.getModifiers(), event.getX()-offX, event.getY()-offY, event.getClickCount(), event.isPopupTrigger()); + super(event.getComponent(), event.getID(), event.getWhen(), event.getModifiersEx(), event.getX()-offX, event.getY()-offY, event.getClickCount(), event.isPopupTrigger()); } } static private Point lastMouse = new Point(); @@ -93,8 +93,8 @@ static private void handle(MouseEvent event) { } } - static public interface KeyboardHandler { - public void handle(KeyEvent key); + public interface KeyboardHandler { + void handle(KeyEvent key); } static public KeyboardHandler defaultKeyboardHandler; @@ -105,7 +105,9 @@ static public void addKeyEvent(KeyEvent key) { if (paused) { if (key.getKeyCode() == KeyEvent.VK_PAUSE && key.getID()==KeyEvent.KEY_PRESSED) { synchronized (pauseMutex) { - try {pauseMutex.notify();} catch (Exception e){} + try {pauseMutex.notify();} catch (Exception e) { + throw new RuntimeException(e); + } } } } else { @@ -115,8 +117,8 @@ static public void addKeyEvent(KeyEvent key) { } } - static public interface MouseHandler { - public void handle(MouseEvent event); + public interface MouseHandler { + void handle(MouseEvent event); } static public MouseHandler defaultMouseHandler; @@ -136,7 +138,7 @@ static public void handle(KeyEvent key) { static public void GFX_EndUpdate() { if (pitch!=0) { if (startupTime != 0) { - System.out.println("Startup time: "+String.valueOf(System.currentTimeMillis()-startupTime)+"ms"); + System.out.println("Startup time: "+ (System.currentTimeMillis() - startupTime) +"ms"); startupTime = 0; } long startTime=0; @@ -169,17 +171,16 @@ static public void GFX_EndUpdate() { gui.dopaint(); } } - static byte[][] byte_rawImageData2 = new byte[2][]; - static short[][] short_rawImageData2 = new short[2][]; - static int[][] int_rawImageData2 = new int[2][]; + static final byte[][] byte_rawImageData2 = new byte[2][]; + static final short[][] short_rawImageData2 = new short[2][]; + static final int[][] int_rawImageData2 = new int[2][]; static int pitch; - static public boolean GFX_StartUpdate(Render.Render_t.SRC src) { + static public void GFX_StartUpdate(Render.Render_t.SRC src) { src.outPitch = Main.pitch; src.outWrite8 = byte_rawImageData2[Main.back]; src.outWrite16 = short_rawImageData2[Main.back]; src.outWrite32 = int_rawImageData2[Main.back]; - return true; } static public void drawImage(Image image) { @@ -193,7 +194,7 @@ static public void drawImage(Image image) { static int buffer_width; static int buffer_height; static IndexColorModel colorModel; - static int[] cmap = new int[256]; + static final int[] cmap = new int[256]; static { int i=0; @@ -214,7 +215,7 @@ static public void drawImage(Image image) { gray += grayIncr; } } - static BufferedImage[] buffer2 = new BufferedImage[2]; + static final BufferedImage[] buffer2 = new BufferedImage[2]; static int front = 0; static int back = 1; diff --git a/jdosbox/src/main/java/jdos/gui/MainApplet.java b/jdosbox/src/main/java/jdos/gui/MainApplet.java index 1fc3f520..56065364 100644 --- a/jdosbox/src/main/java/jdos/gui/MainApplet.java +++ b/jdosbox/src/main/java/jdos/gui/MainApplet.java @@ -15,17 +15,17 @@ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; -import java.io.FileOutputStream; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Files; import java.util.Vector; public class MainApplet extends Applet implements GUI, KeyListener, Runnable, MouseListener, MouseMotionListener { final private static String base_dir = ".jdosbox"; - int[] pixels = new int[16 * 16]; - Image image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(16, 16, pixels, 0, 16)); - Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisibleCursor"); + final int[] pixels = new int[16 * 16]; + final Image image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(16, 16, pixels, 0, 16)); + final Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisibleCursor"); private String progressMsg = null; private int progressPercent = 0; @@ -108,7 +108,7 @@ public void setTitle(String title) { } static Thread thread; - Progress progressBar = new Progress() { + final Progress progressBar = new Progress() { public void set(int value) { } public void status(String value) { @@ -154,10 +154,10 @@ private boolean download(String urlLocation, File location) { size = Long.parseLong(s); } bis = new BufferedInputStream(urlc.getInputStream()); - bos = new BufferedOutputStream(new FileOutputStream(location)); + bos = new BufferedOutputStream(Files.newOutputStream(location.toPath())); byte[] buffer = new byte[4096]; - int read = 0; + int read; if (size>0) progressBar.initializeSpeedValue(size); do { @@ -183,8 +183,12 @@ private boolean download(String urlLocation, File location) { } catch (Exception e) { e.printStackTrace(); } finally { - if (bis != null) try {bis.close();} catch (Exception e){} - if (bos != null) try {bos.close();} catch (Exception e){} + if (bis != null) try {bis.close();} catch (Exception e) { + throw new RuntimeException(e); + } + if (bos != null) try {bos.close();} catch (Exception e) { + throw new RuntimeException(e); + } } progressMsg = "FAILED to download file: "+urlLocation; progressPercent = 0; @@ -204,6 +208,7 @@ private Color parseColorStr(String s) { b = Integer.parseInt(s.substring(5, 7), 16); return (new Color(r, g, b)); } catch (Exception e) { + throw new RuntimeException(e); } } return (Color.black); @@ -253,8 +258,8 @@ public void run() { } if (param.startsWith("-")) { String[] p = StringHelper.split(param, " "); - for (int j=0;j { + if (e.getKeyCode() == 18) { + Main.addEvent(e); + return true; } + return false; }; public void focusGained(FocusEvent e) { @@ -335,16 +338,20 @@ public void i_stop() { Main.pauseMutex.notify(); } Main.addEvent(null); - try {thread.join(5000);} catch (Exception e) {} + try {thread.join(5000);} catch (Exception e) { + throw new RuntimeException(e); + } thread = null; // Without this the 2nd time you run the applet after starting a browswer // it might run out of memory. Not sure why - try {Thread.sleep(2000);} catch (Exception e) {} + try {Thread.sleep(2000);} catch (Exception e) { + throw new RuntimeException(e); + } } Graphics bufferGraphics; Image offscreen; private void drawProgress(Graphics g, int width, int height) { - int barHeight = 0; + int barHeight; int yOffset = 5; FontMetrics fm = g.getFontMetrics(g.getFont()); diff --git a/jdosbox/src/main/java/jdos/gui/MainBase.java b/jdosbox/src/main/java/jdos/gui/MainBase.java index bc8cc705..5d17ebca 100644 --- a/jdosbox/src/main/java/jdos/gui/MainBase.java +++ b/jdosbox/src/main/java/jdos/gui/MainBase.java @@ -23,35 +23,35 @@ public class MainBase { static public void showProgress(String msg, int percent) { gui.showProgress(msg, percent); } - + public static final class GFX_CallBackFunctions_t{ static final public int GFX_CallBackReset=0; static final public int GFX_CallBackStop=1; static final public int GFX_CallBackRedraw=2; } - public static interface GFX_CallBack_t { - public void call(int function); + public interface GFX_CallBack_t { + void call(int function); } - static private long startTime = System.currentTimeMillis(); + static private final long startTime = System.currentTimeMillis(); // emulate SDL_GetTicks -- Gets the number of milliseconds since SDL library initialization. static public long GetTicks() { return (System.currentTimeMillis()-startTime); } // emulate SDL_GetTicks -- SDL_Delay -- Waits a specified number of milliseconds before returning. static public void Delay(long ms) { - try {Thread.sleep(ms);} catch (Exception e){} + try {Thread.sleep(ms);} catch (Exception ignored){} } static public /*Bitu*/int GFX_GetRGB(/*Bit8u*/int red,/*Bit8u*/int green,/*Bit8u*/int blue) { - return ((blue << 0) | (green << 8) | (red << 16)) | (255 << 24); + return ((blue) | (green << 8) | (red << 16)) | (255 << 24); } static /*Bit32s*/int internal_cycles=0; static /*Bits*/int internal_frameskip=0; static public void GFX_SetTitle(/*Bit32s*/int cycles,/*Bits*/int frameskip,boolean paused){ - StringBuffer title = new StringBuffer(); + StringBuilder title = new StringBuilder(); if(cycles != -1) internal_cycles = cycles; if(frameskip != -1) internal_frameskip = frameskip; if(CPU.CPU_CycleAutoAdjust) { @@ -85,7 +85,7 @@ static public class FocusChangeEvent { public FocusChangeEvent(boolean hasfocus) { this.hasfocus = hasfocus; } - public boolean hasfocus; + public final boolean hasfocus; } static public class ShutdownException extends RuntimeException{} static public class KillException extends RuntimeException{} @@ -114,7 +114,7 @@ static public void GFX_CaptureMouse() { if (mouse_autoenable || !mouse_autolock) gui.showCursor(true); } } - + static final public Object pauseMutex = new Object(); static protected void handle(FocusChangeEvent event) { if (event.hasfocus) { @@ -127,9 +127,9 @@ static protected void handle(FocusChangeEvent event) { } if (priority_nofocus == PRIORITY_LEVELS.PRIORITY_LEVEL_PAUSE) { GFX_SetTitle(-1,-1,true); - Keyboard.KEYBOARD_ClrBuffer(); + Keyboard.KEYBOARD_ClrBuffer(); synchronized (pauseMutex) { - try {pauseMutex.wait();} catch (Exception e){} + try {pauseMutex.wait();} catch (Exception ignored){} } GFX_SetTitle(-1,-1,false); } else { @@ -152,73 +152,63 @@ static public void Mouse_AutoLock(boolean enable) { static void SetPriority(int level) { if (true) return; switch (level) { - case PRIORITY_LEVELS.PRIORITY_LEVEL_PAUSE: // if DOSBox is paused, assume idle priority - case PRIORITY_LEVELS.PRIORITY_LEVEL_LOWEST: - Thread.currentThread().setPriority(Thread.MIN_PRIORITY); - break; - case PRIORITY_LEVELS.PRIORITY_LEVEL_LOWER: - Thread.currentThread().setPriority((Thread.NORM_PRIORITY+Thread.MIN_PRIORITY)/2); - break; - case PRIORITY_LEVELS.PRIORITY_LEVEL_NORMAL: - Thread.currentThread().setPriority(Thread.NORM_PRIORITY); - break; - case PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHER: - Thread.currentThread().setPriority((Thread.NORM_PRIORITY+Thread.MAX_PRIORITY)/2); - break; - case PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHEST: - Thread.currentThread().setPriority(Thread.MAX_PRIORITY); - break; + case PRIORITY_LEVELS.PRIORITY_LEVEL_PAUSE: // if DOSBox is paused, assume idle priority + case PRIORITY_LEVELS.PRIORITY_LEVEL_LOWEST: + Thread.currentThread().setPriority(Thread.MIN_PRIORITY); + break; + case PRIORITY_LEVELS.PRIORITY_LEVEL_LOWER: + Thread.currentThread().setPriority((Thread.NORM_PRIORITY+Thread.MIN_PRIORITY)/2); + break; + case PRIORITY_LEVELS.PRIORITY_LEVEL_NORMAL: + Thread.currentThread().setPriority(Thread.NORM_PRIORITY); + break; + case PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHER: + Thread.currentThread().setPriority((Thread.NORM_PRIORITY+Thread.MAX_PRIORITY)/2); + break; + case PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHEST: + Thread.currentThread().setPriority(Thread.MAX_PRIORITY); + break; } } - private static Section.SectionFunction GUI_ShutDown = new Section.SectionFunction() { - public void call(Section section) { - //GFX_Stop(); - //if (sdl.draw.callback) (sdl.draw.callback)( GFX_CallBackStop ); - if (mouse_locked) GFX_CaptureMouse(); - //if (sdl.desktop.fullscreen) GFX_SwitchFullScreen(); - } + private static final Section.SectionFunction GUI_ShutDown = section -> { + //GFX_Stop(); + //if (sdl.draw.callback) (sdl.draw.callback)( GFX_CallBackStop ); + if (mouse_locked) GFX_CaptureMouse(); + //if (sdl.desktop.fullscreen) GFX_SwitchFullScreen(); }; - private static Mapper.MAPPER_Handler KillSwitch = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (pressed) { - throw new KillException(); - } + private static final Mapper.MAPPER_Handler KillSwitch = pressed -> { + if (pressed) { + throw new KillException(); } }; - private static Mapper.MAPPER_Handler CaptureMouse = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (pressed) { - GFX_CaptureMouse(); - } + private static final Mapper.MAPPER_Handler CaptureMouse = pressed -> { + if (pressed) { + GFX_CaptureMouse(); } }; - private static Mapper.MAPPER_Handler SwitchFullScreen = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (pressed) - gui.fullScreenToggle(); - } + private static final Mapper.MAPPER_Handler SwitchFullScreen = pressed -> { + if (pressed) + gui.fullScreenToggle(); }; protected static boolean paused = false; public static boolean keyboardPaused = false; - private static Mapper.MAPPER_Handler PauseDOSBox = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (!pressed) { - return; - } - GFX_SetTitle(-1,-1,true); - synchronized (pauseMutex) { - paused = true; - keyboardPaused = true; - try {pauseMutex.wait();} catch (Exception e){} - paused = false; - keyboardPaused = true; - } - GFX_SetTitle(-1,-1,false); + private static final Mapper.MAPPER_Handler PauseDOSBox = pressed -> { + if (!pressed) { + return; + } + GFX_SetTitle(-1,-1,true); + synchronized (pauseMutex) { + paused = true; + keyboardPaused = true; + try {pauseMutex.wait();} catch (Exception ignored){} + paused = false; + keyboardPaused = true; } + GFX_SetTitle(-1,-1,false); }; static final class PRIORITY_LEVELS { @@ -232,8 +222,8 @@ static final class PRIORITY_LEVELS { private static int priority_focus; private static int priority_nofocus; - - private static Section.SectionFunction GUI_StartUp = new Section.SectionFunction() { + + private static final Section.SectionFunction GUI_StartUp = new Section.SectionFunction() { public void call(Section sec) { sec.AddDestroyFunction(GUI_ShutDown); Section_prop section = (Section_prop)sec; @@ -242,43 +232,67 @@ public void call(Section sec) { String focus = p.GetSection().Get_string("active"); String notfocus = p.GetSection().Get_string("inactive"); - if (focus.equals("lowest")) { priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_LOWEST; } - else if (focus.equals("lower")) { priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_LOWER; } - else if (focus.equals("normal")) { priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_NORMAL; } - else if (focus.equals("higher")) { priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHER; } - else if (focus.equals("highest")) { priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHEST; } - - if (notfocus.equals("lowest")) { priority_nofocus=PRIORITY_LEVELS.PRIORITY_LEVEL_LOWEST; } - else if (notfocus.equals("lower")) { priority_nofocus=PRIORITY_LEVELS.PRIORITY_LEVEL_LOWER; } - else if (notfocus.equals("normal")) { priority_nofocus=PRIORITY_LEVELS.PRIORITY_LEVEL_NORMAL; } - else if (notfocus.equals("higher")) { priority_nofocus=PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHER; } - else if (notfocus.equals("highest")) { priority_nofocus=PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHEST; } - else if (notfocus.equals("pause")) { - /* we only check for pause here, because it makes no sense - * for DOSBox to be paused while it has focus - */ - priority_nofocus=PRIORITY_LEVELS.PRIORITY_LEVEL_PAUSE; - // :TODO: test this, it will probably crash + switch (focus) { + case "lowest": + priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_LOWEST; + break; + case "lower": + priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_LOWER; + break; + case "normal": + priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_NORMAL; + break; + case "higher": + priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHER; + break; + case "highest": + priority_focus = PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHEST; + break; + } + + switch (notfocus) { + case "lowest": + priority_nofocus = PRIORITY_LEVELS.PRIORITY_LEVEL_LOWEST; + break; + case "lower": + priority_nofocus = PRIORITY_LEVELS.PRIORITY_LEVEL_LOWER; + break; + case "normal": + priority_nofocus = PRIORITY_LEVELS.PRIORITY_LEVEL_NORMAL; + break; + case "higher": + priority_nofocus = PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHER; + break; + case "highest": + priority_nofocus = PRIORITY_LEVELS.PRIORITY_LEVEL_HIGHEST; + break; + case "pause": + /* we only check for pause here, because it makes no sense + * for DOSBox to be paused while it has focus + */ + priority_nofocus = PRIORITY_LEVELS.PRIORITY_LEVEL_PAUSE; + // :TODO: test this, it will probably crash + break; } SetPriority(priority_focus); //Assume focus on startup Integer autolock = Dosbox.control.cmdline.FindInt("-autolock", true); if (autolock != null) { - mouse_autoenable = autolock.intValue()==1; + mouse_autoenable = autolock ==1; } else { mouse_autoenable = section.Get_bool("autolock"); } if (!mouse_autoenable) gui.showCursor(false); mouse_autolock = false; mouse_sensitivity = section.Get_int("sensitivity"); - + JavaMapper.MAPPER_AddHandler(KillSwitch, Mapper.MapKeys.MK_f9, Mapper.MMOD1, "shutdown", "ShutDown"); - JavaMapper.MAPPER_AddHandler(CaptureMouse, Mapper.MapKeys.MK_f10, Mapper.MMOD1, "capmouse", "Cap Mouse"); - JavaMapper.MAPPER_AddHandler(SwitchFullScreen, Mapper.MapKeys.MK_return, Mapper.MMOD2, "fullscr", "Fullscreen"); + JavaMapper.MAPPER_AddHandler(CaptureMouse, Mapper.MapKeys.MK_f10, Mapper.MMOD1, "capmouse", "Cap Mouse"); + JavaMapper.MAPPER_AddHandler(SwitchFullScreen, Mapper.MapKeys.MK_return, Mapper.MMOD2, "fullscr", "Fullscreen"); if (Config.C_DEBUG) { - /* Pause binds with activate-debugger */ + /* Pause binds with activate-debugger */ } else { - JavaMapper.MAPPER_AddHandler(PauseDOSBox, Mapper.MapKeys.MK_pause, Mapper.MMOD2, "pause", "Pause"); + JavaMapper.MAPPER_AddHandler(PauseDOSBox, Mapper.MapKeys.MK_pause, Mapper.MMOD2, "pause", "Pause"); } } }; @@ -299,16 +313,16 @@ static private void Config_Add_SDL() { Pstring = sdl_sec.Add_string("fullresolution",Property.Changeable.Always,"original"); Pstring.Set_help("What resolution to use for fullscreen: original or fixed size (e.g. 1024x768).\n" + - " Using your monitor's native resolution with aspect=true might give the best results.\n" + - " If you end up with small window on a large screen, try an output different from surface."); + " Using your monitor's native resolution with aspect=true might give the best results.\n" + + " If you end up with small window on a large screen, try an output different from surface."); Pstring = sdl_sec.Add_string("windowresolution",Property.Changeable.Always,"original"); Pstring.Set_help("Scale the window to this size IF the output device supports hardware scaling.\n" + - " (output=surface does not!)"); + " (output=surface does not!)"); String[] outputs = {"surface", "overlay","opengl", "openglnb","ddraw"}; Pstring = sdl_sec.Add_string("output",Property.Changeable.Always,"surface"); - Pstring.Set_help("What video system to use for output."); - Pstring.Set_values(outputs); + Pstring.Set_help("What video system to use for output."); + Pstring.Set_values(outputs); Pbool = sdl_sec.Add_bool("autolock",Property.Changeable.Always,true); Pbool.Set_help("Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock)"); @@ -323,13 +337,13 @@ static private void Config_Add_SDL() { Pmulti = sdl_sec.Add_multi("priority", Property.Changeable.Always, ","); Pmulti.SetValue("higher,normal"); Pmulti.Set_help("Priority levels for dosbox. Second entry behind the comma is for when dosbox is not focused/minimized.\n" + - " pause is only valid for the second entry."); + " pause is only valid for the second entry."); String[] actt = { "lowest", "lower", "normal", "higher", "highest", "pause"}; Pstring = Pmulti.GetSection().Add_string("active",Property.Changeable.Always,"higher"); Pstring.Set_values(actt); - String inactt[] = { "lowest", "lower", "normal", "higher", "highest", "pause"}; + String[] inactt = { "lowest", "lower", "normal", "higher", "highest", "pause"}; Pstring = Pmulti.GetSection().Add_string("inactive",Property.Changeable.Always,"normal"); Pstring.Set_values(inactt); @@ -352,7 +366,7 @@ static void launcheditor() { Process p = Runtime.getRuntime().exec(new String[] {edit,path}); if (p != null) System.exit(0); - } catch (Exception e) { + } catch (Exception ignored) { } } @@ -382,7 +396,7 @@ static void launchcaptures(String edit) { Process p = Runtime.getRuntime().exec(new String[] {edit,path}); if (p != null) System.exit(0); - } catch (Exception e) { + } catch (Exception ignored) { } //if you get here the launching failed! @@ -401,7 +415,7 @@ static void eraseconfigfile() { static void erasemapperfile() { if(new File("dosbox.conf").exists()) { show_warning("Warning: dosbox.conf exists in current working directory.\nKeymapping might not be properly reset.\n" + - "Please reset configuration as well and delete the dosbox.conf.\n"); + "Please reset configuration as well and delete the dosbox.conf.\n"); } String path = Cross.CreatePlatformConfigDir() + JavaMapper.mapperfile; new File(path).delete(); @@ -410,7 +424,7 @@ static void erasemapperfile() { static void show_warning(String message) { // :TODO: - Log.log_msg(message); + System.out.println(message); } static void printconfiglocation() { @@ -418,11 +432,11 @@ static void printconfiglocation() { if (!Dosbox.control.PrintConfig(path)) { Log.exit("tried creating "+path+". but failed.\n"); } - Log.log_msg(path+"\n"); + System.out.println(path+"\n"); System.exit(0); } - protected static Vector events = new Vector(); + protected static final Vector events = new Vector(); protected static long startupTime; static void main(GUI g, String[] args) { @@ -454,17 +468,17 @@ static void main(GUI g, String[] args) { if (Dosbox.control.cmdline.FindExist("-resetmapper")) erasemapperfile(); // For now just use the java console, in the future we could open a separate swing windows and redirect to there if necessary if (Dosbox.control.cmdline.FindExist("-version") || Dosbox.control.cmdline.FindExist("--version")) { - Log.log_msg("\nDOSBox version "+Config.VERSION+", copyright 2002-2010 DOSBox Team.\n\n"); - Log.log_msg("DOSBox is written by the DOSBox Team (See AUTHORS file))\n"); - Log.log_msg("DOSBox comes with ABSOLUTELY NO WARRANTY. This is free software,\n"); - Log.log_msg("and you are welcome to redistribute it under certain conditions;\n"); - Log.log_msg("please read the COPYING file thoroughly before doing so.\n\n"); + System.out.println("\nDOSBox version "+Config.VERSION+", copyright 2002-2010 DOSBox Team.\n\n"); + System.out.println("DOSBox is written by the DOSBox Team (See AUTHORS file))\n"); + System.out.println("DOSBox comes with ABSOLUTELY NO WARRANTY. This is free software,\n"); + System.out.println("and you are welcome to redistribute it under certain conditions;\n"); + System.out.println("please read the COPYING file thoroughly before doing so.\n\n"); return; } if (Dosbox.control.cmdline.FindExist("-printconf")) printconfiglocation(); - Log.log_msg("DOSBox version "+Config.VERSION); - Log.log_msg("Copyright 2002-2010 DOSBox Team, published under GNU GPL."); - Log.log_msg("---"); + System.out.println("DOSBox version "+Config.VERSION); + System.out.println("Copyright 2002-2010 DOSBox Team, published under GNU GPL."); + System.out.println("---"); /* Parse configuration files */ @@ -476,7 +490,7 @@ static void main(GUI g, String[] args) { if (!parsed_anyconfigfile) { //Try to create the userlevel configfile. if (Dosbox.control.PrintConfig(path)) { - Log.log_msg("CONFIG: Generating default configuration.\nWriting it to "+path); + System.out.println("CONFIG: Generating default configuration.\nWriting it to "+path); //Load them as well. Makes relative paths much easier if (Dosbox.control.ParseConfigFile(path)) parsed_anyconfigfile = true; } @@ -490,7 +504,7 @@ static void main(GUI g, String[] args) { if (!Dosbox.applet) { //if none found => parse localdir conf if (!parsed_anyconfigfile) - if (Dosbox.control.ParseConfigFile("dosbox.conf")) parsed_anyconfigfile = true; + if (Dosbox.control.ParseConfigFile(".dosbox" + File.separator + "dosbox-0.74.conf")) parsed_anyconfigfile = true; //if none found => parse userlevel conf if (!parsed_anyconfigfile) { path = Cross.CreatePlatformConfigDir() + Cross.GetPlatformConfigName(); @@ -499,11 +513,11 @@ static void main(GUI g, String[] args) { if (!parsed_anyconfigfile) { path = Cross.CreatePlatformConfigDir() + Cross.GetPlatformConfigName(); if (Dosbox.control.PrintConfig(path)) { - Log.log_msg("CONFIG: Generating default configuration.\nWriting it to "+path); + System.out.println("CONFIG: Generating default configuration.\nWriting it to "+path); //Load them as well. Makes relative paths much easier Dosbox.control.ParseConfigFile(path); } else { - Log.log_msg("CONFIG: Using default settings. Create a configfile to change them"); + System.out.println("CONFIG: Using default settings. Create a configfile to change them"); } } } @@ -536,14 +550,14 @@ static void main(GUI g, String[] args) { Dosbox.control.StartUp(); } catch (Dos_programs.RebootException e) { System.out.println("Rebooting"); - try {myconf.Destroy();} catch (Exception e1){} + try {myconf.Destroy();} catch (Exception ignored){} continue; } catch (ShutdownException e) { if (saveName!=null) { Loader.save(saveName, false); } System.out.println("Normal Shutdown"); - try {myconf.Destroy();} catch (Exception e1){} + try {myconf.Destroy();} catch (Exception ignored){} } catch (KillException e) { System.out.println("Normal Shutdown"); if (!Dosbox.applet) diff --git a/jdosbox/src/main/java/jdos/gui/MainFrame.java b/jdosbox/src/main/java/jdos/gui/MainFrame.java index be1eda70..bb1cd92c 100644 --- a/jdosbox/src/main/java/jdos/gui/MainFrame.java +++ b/jdosbox/src/main/java/jdos/gui/MainFrame.java @@ -13,9 +13,9 @@ import java.lang.reflect.Method; public class MainFrame implements GUI { - int[] pixels = new int[16 * 16]; - Image image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(16, 16, pixels, 0, 16)); - Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisibleCursor"); + final int[] pixels = new int[16 * 16]; + final Image image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(16, 16, pixels, 0, 16)); + final Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisibleCursor"); static Robot robot; static private boolean eatNextMouseMove = false; @@ -172,12 +172,13 @@ public static void main(final String[] args) { try { port = Integer.parseInt(args[3]); } catch (Exception e) { + throw new RuntimeException(e); } } try { - Class c = Class.forName("jdos.host.FowardPCapEthernet"); - Method method = c.getDeclaredMethod("startServer", new Class[] {String.class, Integer.TYPE}); - method.invoke(null, new Object[]{nic, new Integer(port)}); + Class c = Class.forName("jdos.host.FowardPCapEthernet"); + Method method = c.getDeclaredMethod("startServer", String.class, Integer.TYPE); + method.invoke(null, nic, port); } catch (Exception e) { e.printStackTrace(); } @@ -188,14 +189,12 @@ public static void main(final String[] args) { frame = new MyFrame(); frame.setFocusTraversalKeysEnabled(false); frame.addFocusListener(new FocusListener() { - private final KeyEventDispatcher altDisabler = new KeyEventDispatcher() { - public boolean dispatchKeyEvent(KeyEvent e) { - if (e.getKeyCode() == 18) { - Main.addEvent(e); - return true; - } - return false; + private final KeyEventDispatcher altDisabler = e -> { + if (e.getKeyCode() == 18) { + Main.addEvent(e); + return true; } + return false; }; public void focusGained(FocusEvent e) { @@ -233,7 +232,9 @@ public void windowClosing(WindowEvent e) { Main.pauseMutex.notify(); } Main.addEvent(null); - try {mainThread.join(5000);} catch (Exception e1) {} + try {mainThread.join(5000);} catch (Exception e1) { + throw new RuntimeException(e1); + } if (!Dosbox.applet) { System.exit(0); } @@ -242,11 +243,9 @@ public void windowClosing(WindowEvent e) { Container contentPane = frame.getContentPane(); contentPane.setLayout(new BorderLayout()); frame.getContentPane().add(panel, BorderLayout.PAGE_START); - mainThread = new Thread(new Runnable() { - public void run() { - Main.main(new MainFrame(), args); - System.exit(0); - } + mainThread = new Thread(() -> { + Main.main(new MainFrame(), args); + System.exit(0); }); mainThread.start(); } diff --git a/jdosbox/src/main/java/jdos/gui/Mapper.java b/jdosbox/src/main/java/jdos/gui/Mapper.java index e26c992c..3a5000d6 100644 --- a/jdosbox/src/main/java/jdos/gui/Mapper.java +++ b/jdosbox/src/main/java/jdos/gui/Mapper.java @@ -4,8 +4,8 @@ public class Mapper { public static final int MMOD1 = 0x1; public static final int MMOD2 = 0x2; - public static interface MAPPER_Handler { - public void call(boolean pressed); + public interface MAPPER_Handler { + void call(boolean pressed); } public static final class MapKeys { diff --git a/jdosbox/src/main/java/jdos/gui/Midi.java b/jdosbox/src/main/java/jdos/gui/Midi.java index a3968160..44a44cff 100644 --- a/jdosbox/src/main/java/jdos/gui/Midi.java +++ b/jdosbox/src/main/java/jdos/gui/Midi.java @@ -43,30 +43,34 @@ static private class _midi { int status; int cmd_len; int cmd_pos; - byte[] cmd_buf = new byte[8]; + final byte[] cmd_buf = new byte[8]; byte[] rt_buf = new byte[8]; public static class Sysex { - byte[] buf = new byte[SYSEX_SIZE]; + final byte[] buf = new byte[SYSEX_SIZE]; int used; int delay; long start; } - public Sysex sysex = new Sysex(); + public final Sysex sysex = new Sysex(); Receiver handler; MidiDevice device; } static private _midi midi; - static private ShortMessage msg = new ShortMessage(); - static private SysexMessage sysex_msg = new SysexMessage(); + static private final ShortMessage msg = new ShortMessage(); + static private final SysexMessage sysex_msg = new SysexMessage(); static public void MIDI_RawOutByte(/*Bit8u*/int data) { if (midi.sysex.start!=0) { /*Bit32u*/long passed_ticks = System.currentTimeMillis() - midi.sysex.start; - if (passed_ticks < midi.sysex.delay) try {Thread.sleep(midi.sysex.delay - passed_ticks);} catch (InterruptedException e){} + if (passed_ticks < midi.sysex.delay) try {Thread.sleep(midi.sysex.delay - passed_ticks);} catch (InterruptedException e) { + throw new RuntimeException(e); + } } /* Test for a realtime MIDI message */ if (data>=0xf8) { - try {msg.setMessage(data);} catch (Exception e) {} + try {msg.setMessage(data);} catch (Exception e) { + throw new RuntimeException(e); + } midi.handler.send(msg, -1); return; } @@ -82,7 +86,9 @@ static public void MIDI_RawOutByte(/*Bit8u*/int data) { if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_ALL, LogSeverities.LOG_ERROR,"MIDI:Skipping invalid MT-32 SysEx midi message (too short to contain a checksum)"); } else { // LOG(LOG_ALL,LOG_NORMAL)("Play sysex; address:%02X %02X %02X, length:%4d, delay:%3d", midi.sysex.buf[5], midi.sysex.buf[6], midi.sysex.buf[7], midi.sysex.used, midi.sysex.delay); - try {sysex_msg.setMessage(midi.sysex.buf, midi.sysex.used);} catch (Exception e) {} + try {sysex_msg.setMessage(midi.sysex.buf, midi.sysex.used);} catch (Exception e) { + throw new RuntimeException(e); + } midi.handler.send(sysex_msg, -1); if (midi.sysex.start!=0) { if (midi.sysex.buf[5] == 0x7F) { @@ -117,7 +123,9 @@ static public void MIDI_RawOutByte(/*Bit8u*/int data) { // if (CaptureState & CAPTURE_MIDI) { // CAPTURE_AddMidi(false, midi.cmd_len, midi.cmd_buf); // } - try {msg.setMessage(midi.cmd_buf[0], midi.cmd_buf[1], midi.cmd_buf[2]);} catch (Exception e) {} + try {msg.setMessage(midi.cmd_buf[0], midi.cmd_buf[1], midi.cmd_buf[2]);} catch (Exception e) { + throw new RuntimeException(e); + } midi.handler.send(msg, -1); midi.cmd_pos=1; //Use Running status } @@ -125,7 +133,7 @@ static public void MIDI_RawOutByte(/*Bit8u*/int data) { } static public boolean MIDI_Available() { - return midi.device != null; + return midi.device == null; } public Midi(Section configuration) { @@ -140,29 +148,29 @@ public Midi(Section configuration) { if (conf.contains("delaysysex")) { midi.sysex.start = System.currentTimeMillis(); conf = StringHelper.replace(conf, "delaysysex", "").trim(); - Log.log_msg("MIDI:Using delayed SysEx processing"); + System.out.println("MIDI:Using delayed SysEx processing"); } midi.status=0x00; midi.cmd_pos=0; midi.cmd_len=0; - MidiDevice.Info[] devices = null; + MidiDevice.Info[] devices; try { devices = MidiSystem.getMidiDeviceInfo(); } catch (Exception e) { - + throw new RuntimeException(e); } boolean def = dev.equalsIgnoreCase("default"); if (!def) { if (devices != null) { - for (int i=0;i { + if (function == Main.GFX_CallBackFunctions_t.GFX_CallBackStop) { + RENDER_Halt( ); + } else if (function == Main.GFX_CallBackFunctions_t.GFX_CallBackRedraw) { + } else if ( function == Main.GFX_CallBackFunctions_t.GFX_CallBackReset) { + Main.GFX_EndUpdate(); + RENDER_Reset(); + } else { + Log.exit("Unhandled GFX_CallBackReset "+function ); } }; @@ -255,22 +253,22 @@ public static void RENDER_SetSize(/*Bitu*/int width,/*Bitu*/int height,/*Bitu*/i RENDER_Reset( ); } - private static Mapper.MAPPER_Handler IncreaseFrameSkip = new Mapper.MAPPER_Handler() { + private static final Mapper.MAPPER_Handler IncreaseFrameSkip = new Mapper.MAPPER_Handler() { public void call(boolean pressed) { if (!pressed) return; if (render.frameskip.max<10) render.frameskip.max++; - Log.log_msg("Frame Skip at "+render.frameskip.max); + System.out.println("Frame Skip at "+render.frameskip.max); Main.GFX_SetTitle(-1,render.frameskip.max,false); } }; - private static Mapper.MAPPER_Handler DecreaseFrameSkip = new Mapper.MAPPER_Handler() { + private static final Mapper.MAPPER_Handler DecreaseFrameSkip = new Mapper.MAPPER_Handler() { public void call(boolean pressed) { if (!pressed) return; if (render.frameskip.max>0) render.frameskip.max--; - Log.log_msg("Frame Skip at "+render.frameskip.max); + System.out.println("Frame Skip at "+render.frameskip.max); Main.GFX_SetTitle(-1,render.frameskip.max,false); } }; @@ -288,7 +286,7 @@ static void ChangeScaler(boolean pressed) { RENDER_CallBack( GFX_CallBackReset ); } */ - public static Section.SectionFunction RENDER_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction RENDER_ShutDown = new Section.SectionFunction() { public void call(Section sec) { render = null; running = false; @@ -296,7 +294,7 @@ public void call(Section sec) { }; static boolean running = false; - public static Section.SectionFunction RENDER_Init = new Section.SectionFunction() { + public static final Section.SectionFunction RENDER_Init = new Section.SectionFunction() { public void call(Section sec) { Section_prop section=(Section_prop)sec; render = new Render_t(); diff --git a/jdosbox/src/main/java/jdos/hardware/Adlib.java b/jdosbox/src/main/java/jdos/hardware/Adlib.java index ad36e19a..fc43eb71 100644 --- a/jdosbox/src/main/java/jdos/hardware/Adlib.java +++ b/jdosbox/src/main/java/jdos/hardware/Adlib.java @@ -288,7 +288,7 @@ void Start(double time, /*Bits*/int scale ) { private static final class Chip { //Last selected register - Timer[] timer = new Timer[2]; + final Timer[] timer = new Timer[2]; public Chip() { for (int i=0;i= 0xc0 && reg <=0xc8 ) { val &= 0x0f; - val |= index!=0 ? 0xA0 : 0x50; + val |= (short) (index!=0 ? 0xA0 : 0x50); } /*Bit32u*/int fullReg = reg + (index!=0 ? 0x100 : 0); handler.WriteReg( fullReg, val ); CacheWrite( fullReg, val ); } public static int oplmode = Hardware.OPL_none; - public Mixer.MixerChannel mixerChan; + public final Mixer.MixerChannel mixerChan; public /*Bit32u*/long lastUsed; //Ticks when adlib was last used to turn of mixing after a few second - public Handler handler; //Handler that will generate the sound + public final Handler handler; //Handler that will generate the sound // public RegisterCache cache; - public short[] cache = new short[512]; + public final short[] cache = new short[512]; // public Capture capture; - public Chip[] chip = new Chip[2]; + public final Chip[] chip = new Chip[2]; //Handle port writes public void PortWrite(/*Bitu*/int port, /*Bitu*/short val, /*Bitu*/int iolen) { @@ -600,30 +600,23 @@ public void Init(int m) { private static Module module = null; - static private final Mixer.MIXER_Handler OPL_CallBack = new Mixer.MIXER_Handler() { - public void call(/*Bitu*/int len) { - module.handler.Generate( module.mixerChan, len ); - //Disable the sound generation after 30 seconds of silence - if ((Pic.PIC_Ticks - module.lastUsed) > 30000) { - /*Bitu*/int i; - for (i=0xb0;i<0xb9;i++) if ((module.cache[i] &0x20)!=0 || (module.cache[i+0x100] & 0x20)!=0) break; - if (i==0xb9) module.mixerChan.Enable(false); - else module.lastUsed = Pic.PIC_Ticks; - } + /*Bitu*/ + static private final Mixer.MIXER_Handler OPL_CallBack = len -> { + module.handler.Generate( module.mixerChan, len ); + //Disable the sound generation after 30 seconds of silence + if ((Pic.PIC_Ticks - module.lastUsed) > 30000) { + /*Bitu*/int i; + for (i=0xb0;i<0xb9;i++) if ((module.cache[i] &0x20)!=0 || (module.cache[i+0x100] & 0x20)!=0) break; + if (i==0xb9) module.mixerChan.Enable(false); + else module.lastUsed = Pic.PIC_Ticks; } }; - static final private IoHandler.IO_ReadHandler OPL_Read = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return module.PortRead( port, iolen ); - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static final private IoHandler.IO_ReadHandler OPL_Read = (port, iolen) -> module.PortRead( port, iolen ); - static final private IoHandler.IO_WriteHandler OPL_Write = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - module.PortWrite( port, (short)val, iolen ); - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static final private IoHandler.IO_WriteHandler OPL_Write = (port, val, iolen) -> module.PortWrite( port, (short)val, iolen ); /* Save the current state of the operators as instruments in an reality adlib tracker file diff --git a/jdosbox/src/main/java/jdos/hardware/AudioLayer.java b/jdosbox/src/main/java/jdos/hardware/AudioLayer.java index 15dc350a..f8a47446 100644 --- a/jdosbox/src/main/java/jdos/hardware/AudioLayer.java +++ b/jdosbox/src/main/java/jdos/hardware/AudioLayer.java @@ -25,21 +25,21 @@ public static boolean open(int bufferSize, int freq) { line.open(format, bufferSize); line.start(); audioThreadExit = false; - audioThread = new Thread() { - public void run() { - while (!audioThreadExit) { - boolean result; - synchronized (Mixer.audioMutex) { - result = Mixer.MIXER_CallBack(0, audioBuffer, audioBuffer.length); - } - if (result) - line.write(audioBuffer, 0, audioBuffer.length); - else { - try {Thread.sleep(20);} catch (Exception e){} + audioThread = new Thread(() -> { + while (!audioThreadExit) { + boolean result; + synchronized (Mixer.audioMutex) { + result = Mixer.MIXER_CallBack(0, audioBuffer, audioBuffer.length); + } + if (result) + line.write(audioBuffer, 0, audioBuffer.length); + else { + try {Thread.sleep(20);} catch (Exception e) { + throw new RuntimeException(e); } } } - }; + }); audioBuffer = new byte[512]; // this needs to be smaller than buffer size passed into open other line.write will block audioThread.start(); return true; @@ -51,7 +51,9 @@ public void run() { public static void stop() { audioThreadExit = true; - try {audioThread.join(2000);} catch (Exception e){} + try {audioThread.join(2000);} catch (Exception e) { + throw new RuntimeException(e); + } line.drain(); line.stop(); } @@ -60,7 +62,7 @@ public static void listMidi(Program program) { MidiDevice.Info[] devices = MidiSystem.getMidiDeviceInfo(); for (int i=0;i0; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler cmos_selreg = (port, val, iolen) -> { + cmos.reg=(byte)(val & 0x3f); + cmos.nmi=(val & 0x80)>0; }; - static private IoHandler.IO_WriteHandler cmos_writereg = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (cmos.reg) { - case 0x00: /* Seconds */ - case 0x02: /* Minutes */ - case 0x04: /* Hours */ - case 0x06: /* Day of week */ - case 0x07: /* Date of month */ - case 0x08: /* Month */ - case 0x09: /* Year */ - case 0x32: /* Century */ - /* Ignore writes to change alarm */ - break; - case 0x01: /* Seconds Alarm */ - case 0x03: /* Minutes Alarm */ - case 0x05: /* Hours Alarm */ - Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_NORMAL,"CMOS:Trying to set alarm"); - cmos.regs[cmos.reg]=(byte)val; - break; - case 0x0a: /* Status reg A */ - cmos.regs[cmos.reg]=(byte)(val & 0x7f); - if ((val & 0x70)!=0x20) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS Illegal 22 stage divider value"); - cmos.timer.div=(byte)(val & 0xf); - cmos_checktimer(); - break; - case 0x0b: /* Status reg B */ - cmos.bcd=!((val & 0x4)!=0); - cmos.regs[cmos.reg]=(byte)(val & 0x7f); - cmos.timer.enabled=(val & 0x40)>0; - if ((val&0x10)!=0) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS:Updated ended interrupt not supported yet"); - cmos_checktimer(); - break; - case 0x0d:/* Status reg D */ - cmos.regs[cmos.reg]=(byte)(val & 0x80); /*Bit 7=1:RTC Pown on*/ - break; - case 0x0f: /* Shutdown status byte */ - cmos.regs[cmos.reg]=(byte)(val & 0x7f); - break; - default: - cmos.regs[cmos.reg]=(byte)(val & 0x7f); - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS:WRite to unhandled register "+Integer.toString(cmos.reg,16)); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler cmos_writereg = (port, val, iolen) -> { + switch (cmos.reg) { + case 0x00: /* Seconds */ + case 0x02: /* Minutes */ + case 0x04: /* Hours */ + case 0x06: /* Day of week */ + case 0x07: /* Date of month */ + case 0x08: /* Month */ + case 0x09: /* Year */ + case 0x32: /* Century */ + /* Ignore writes to change alarm */ + break; + case 0x01: /* Seconds Alarm */ + case 0x03: /* Minutes Alarm */ + case 0x05: /* Hours Alarm */ + Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_NORMAL,"CMOS:Trying to set alarm"); + cmos.regs[cmos.reg]=(byte)val; + break; + case 0x0a: /* Status reg A */ + cmos.regs[cmos.reg]=(byte)(val & 0x7f); + if ((val & 0x70)!=0x20) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS Illegal 22 stage divider value"); + cmos.timer.div=(byte)(val & 0xf); + cmos_checktimer(); + break; + case 0x0b: /* Status reg B */ + cmos.bcd= (val & 0x4) == 0; + cmos.regs[cmos.reg]=(byte)(val & 0x7f); + cmos.timer.enabled=(val & 0x40)>0; + if ((val&0x10)!=0) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS:Updated ended interrupt not supported yet"); + cmos_checktimer(); + break; + case 0x0d:/* Status reg D */ + cmos.regs[cmos.reg]=(byte)(val & 0x80); /*Bit 7=1:RTC Pown on*/ + break; + case 0x0f: /* Shutdown status byte */ + cmos.regs[cmos.reg]=(byte)(val & 0x7f); + break; + default: + cmos.regs[cmos.reg]=(byte)(val & 0x7f); + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS:WRite to unhandled register "+Integer.toString(cmos.reg,16)); } }; @@ -119,209 +118,208 @@ static private int MAKE_RETURN(int _VAL) { return (cmos.bcd ? ((((_VAL) / 10) << 4) | ((_VAL) % 10)) : (_VAL)); } - static private IoHandler.IO_ReadHandler cmos_readreg = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - if (cmos.reg>0x3f) { - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS:Read from illegal register "+Integer.toString(cmos.reg,16)); - return 0xff; - } - /*Bitu*/int drive_a, drive_b; - /*Bit8u*/short hdparm; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler cmos_readreg = (port, iolen) -> { + if (cmos.reg>0x3f) { + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_ERROR,"CMOS:Read from illegal register "+Integer.toString(cmos.reg,16)); + return 0xff; + } + /*Bitu*/int drive_a, drive_b; + /*Bit8u*/short hdparm; - Calendar c = Calendar.getInstance(); - switch (cmos.reg) { - case 0x00: /* Seconds */ - return MAKE_RETURN(c.get(Calendar.SECOND)); - case 0x02: /* Minutes */ - return MAKE_RETURN(c.get(Calendar.MINUTE)); - case 0x04: /* Hours */ - return MAKE_RETURN(c.get(Calendar.HOUR)); - case 0x06: /* Day of week */ - return MAKE_RETURN(c.get(Calendar.DAY_OF_WEEK)); - case 0x07: /* Date of month */ - return MAKE_RETURN(c.get(Calendar.DAY_OF_MONTH)); - case 0x08: /* Month */ - return MAKE_RETURN(c.get(Calendar.MONTH) + 1); - case 0x09: /* Year */ - return MAKE_RETURN(c.get(Calendar.YEAR) % 100); - case 0x32: /* Century */ - return MAKE_RETURN(c.get(Calendar.YEAR) / 100); - case 0x01: /* Seconds Alarm */ - case 0x03: /* Minutes Alarm */ - case 0x05: /* Hours Alarm */ - return cmos.regs[cmos.reg]; - case 0x0a: /* Status register A */ - if (Pic.PIC_TickIndex()<0.002) { - return (cmos.regs[0x0a]&0x7f) | 0x80; - } else { - return (cmos.regs[0x0a]&0x7f); + Calendar c = Calendar.getInstance(); + switch (cmos.reg) { + case 0x00: /* Seconds */ + return MAKE_RETURN(c.get(Calendar.SECOND)); + case 0x02: /* Minutes */ + return MAKE_RETURN(c.get(Calendar.MINUTE)); + case 0x04: /* Hours */ + return MAKE_RETURN(c.get(Calendar.HOUR)); + case 0x06: /* Day of week */ + return MAKE_RETURN(c.get(Calendar.DAY_OF_WEEK)); + case 0x07: /* Date of month */ + return MAKE_RETURN(c.get(Calendar.DAY_OF_MONTH)); + case 0x08: /* Month */ + return MAKE_RETURN(c.get(Calendar.MONTH) + 1); + case 0x09: /* Year */ + return MAKE_RETURN(c.get(Calendar.YEAR) % 100); + case 0x32: /* Century */ + return MAKE_RETURN(c.get(Calendar.YEAR) / 100); + case 0x01: /* Seconds Alarm */ + case 0x03: /* Minutes Alarm */ + case 0x05: /* Hours Alarm */ + return cmos.regs[cmos.reg]; + case 0x0a: /* Status register A */ + if (Pic.PIC_TickIndex()<0.002) { + return (cmos.regs[0x0a]&0x7f) | 0x80; + } else { + return (cmos.regs[0x0a]&0x7f); + } + case 0x0c: /* Status register C */ + cmos.timer.acknowledged=true; + if (cmos.timer.enabled) { + /* In periodic interrupt mode only care for those flags */ + /*Bit8u*/byte val=cmos.regs[0xc]; + cmos.regs[0xc]=0; + return val; + } else { + /* Give correct values at certain times */ + /*Bit8u*/byte val=0; + double index=Pic.PIC_FullIndex(); + if (index>=(cmos.last.timer+cmos.timer.delay)) { + cmos.last.timer=index; + val|=0x40; } - case 0x0c: /* Status register C */ - cmos.timer.acknowledged=true; - if (cmos.timer.enabled) { - /* In periodic interrupt mode only care for those flags */ - /*Bit8u*/byte val=cmos.regs[0xc]; - cmos.regs[0xc]=0; - return val; - } else { - /* Give correct values at certain times */ - /*Bit8u*/byte val=0; - double index=Pic.PIC_FullIndex(); - if (index>=(cmos.last.timer+cmos.timer.delay)) { - cmos.last.timer=index; - val|=0x40; - } - if (index>=(cmos.last.ended+1000)) { - cmos.last.ended=index; - val|=0x10; - } - return val; + if (index>=(cmos.last.ended+1000)) { + cmos.last.ended=index; + val|=0x10; } - case 0x10: /* Floppy size */ - drive_a = 0; - drive_b = 0; - if(Bios_disk.imageDiskList[0] != null) drive_a = Bios_disk.imageDiskList[0].GetBiosType(); - if(Bios_disk.imageDiskList[1] != null) drive_b = Bios_disk.imageDiskList[1].GetBiosType(); - return ((drive_a << 4) | (drive_b)); - /* First harddrive info */ - case 0x12: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - hdparm = 0; - if(Bios_disk.imageDiskList[3] != null) hdparm |= 0xf; - if(Bios_disk.imageDiskList[2] != null) hdparm |= 0xf0; - return hdparm; - case 0x19: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return 47; /* User defined type */ - return 0; - case 0x1b: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].cylinders & 0xff); - return 0; - case 0x1c: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)((Bios_disk.imageDiskList[2].cylinders & 0xff00)>>8); - return 0; - case 0x1d: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].heads); - return 0; - case 0x1e: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return 0xff; - return 0; - case 0x1f: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return 0xff; - return 0; - case 0x20: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)(0xc0 | ((((Bios_disk.imageDiskList[2].heads) > 8)?1:0) << 3)); - return 0; - case 0x21: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].cylinders & 0xff); - return 0; - case 0x22: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)((Bios_disk.imageDiskList[2].cylinders & 0xff00)>>8); - return 0; - case 0x23: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].sectors); - return 0; - /* Second harddrive info */ - case 0x1a: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return 47; /* User defined type */ - return 0; - case 0x24: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].cylinders & 0xff); - return 0; - case 0x25: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)((Bios_disk.imageDiskList[3].cylinders & 0xff00)>>8); - return 0; - case 0x26: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].heads); - return 0; - case 0x27: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return 0xff; - return 0; - case 0x28: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return 0xff; - return 0; - case 0x29: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)(0xc0 | (((Bios_disk.imageDiskList[3].heads) > 8)?1:0 << 3)); - return 0; - case 0x2a: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].cylinders & 0xff); - return 0; - case 0x2b: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)((Bios_disk.imageDiskList[3].cylinders & 0xff00)>>8); - return 0; - case 0x2c: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].sectors); - return 0; - case 0x39: - if (Bios.boot) - return cmos.regs[cmos.reg] & 0xFF; - return 0; - case 0x3a: - return 0; - case 0x37: // Password Seed and Color Option - return 0x20; - case 0x3d: /* boot order */ + return val; + } + case 0x10: /* Floppy size */ + drive_a = 0; + drive_b = 0; + if(Bios_disk.imageDiskList[0] != null) drive_a = Bios_disk.imageDiskList[0].GetBiosType(); + if(Bios_disk.imageDiskList[1] != null) drive_b = Bios_disk.imageDiskList[1].GetBiosType(); + return ((drive_a << 4) | (drive_b)); + /* First harddrive info */ + case 0x12: + if (Bios.boot) return cmos.regs[cmos.reg] & 0xFF; - case 0x34: /* extended memory over 64MB */ + hdparm = 0; + if(Bios_disk.imageDiskList[3] != null) hdparm |= 0xf; + if(Bios_disk.imageDiskList[2] != null) hdparm |= 0xf0; + return hdparm; + case 0x19: + if (Bios.boot) return cmos.regs[cmos.reg] & 0xFF; - case 0x35: /* extended memory over 64MB */ + if(Bios_disk.imageDiskList[2] != null) return 47; /* User defined type */ + return 0; + case 0x1b: + if (Bios.boot) return cmos.regs[cmos.reg] & 0xFF; - case 0x0b: /* Status register B */ - case 0x0d: /* Status register D */ - case 0x0f: /* Shutdown status byte */ - case 0x14: /* Equipment */ - case 0x15: /* Base Memory KB Low Byte */ - case 0x16: /* Base Memory KB High Byte */ - case 0x17: /* Extended memory in KB Low Byte */ - case 0x18: /* Extended memory in KB High Byte */ - case 0x30: /* Extended memory in KB Low Byte */ - case 0x31: /* Extended memory in KB High Byte */ - // Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_NORMAL,"CMOS:Read from reg %X : %04X",cmos.reg,cmos.regs[cmos.reg]); + if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].cylinders & 0xff); + return 0; + case 0x1c: + if (Bios.boot) return cmos.regs[cmos.reg] & 0xFF; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_NORMAL,"CMOS:Read from reg "+Integer.toString(cmos.reg,16)); - return cmos.regs[cmos.reg]; - } + if(Bios_disk.imageDiskList[2] != null) return (int)((Bios_disk.imageDiskList[2].cylinders & 0xff00)>>8); + return 0; + case 0x1d: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].heads); + return 0; + case 0x1e: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return 0xff; + return 0; + case 0x1f: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return 0xff; + return 0; + case 0x20: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return 0xc0 | ((((Bios_disk.imageDiskList[2].heads) > 8)?1:0) << 3); + return 0; + case 0x21: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].cylinders & 0xff); + return 0; + case 0x22: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return (int)((Bios_disk.imageDiskList[2].cylinders & 0xff00)>>8); + return 0; + case 0x23: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[2] != null) return (int)(Bios_disk.imageDiskList[2].sectors); + return 0; + /* Second harddrive info */ + case 0x1a: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return 47; /* User defined type */ + return 0; + case 0x24: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].cylinders & 0xff); + return 0; + case 0x25: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return (int)((Bios_disk.imageDiskList[3].cylinders & 0xff00)>>8); + return 0; + case 0x26: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].heads); + return 0; + case 0x27: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return 0xff; + return 0; + case 0x28: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return 0xff; + return 0; + case 0x29: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return 0xc0 | (((Bios_disk.imageDiskList[3].heads) > 8)?1: 0); + return 0; + case 0x2a: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].cylinders & 0xff); + return 0; + case 0x2b: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return (int)((Bios_disk.imageDiskList[3].cylinders & 0xff00)>>8); + return 0; + case 0x2c: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + if(Bios_disk.imageDiskList[3] != null) return (int)(Bios_disk.imageDiskList[3].sectors); + return 0; + case 0x39: + if (Bios.boot) + return cmos.regs[cmos.reg] & 0xFF; + return 0; + case 0x3a: + return 0; + case 0x37: // Password Seed and Color Option + return 0x20; + case 0x3d: /* boot order */ + return cmos.regs[cmos.reg] & 0xFF; + case 0x34: /* extended memory over 64MB */ + return cmos.regs[cmos.reg] & 0xFF; + case 0x35: /* extended memory over 64MB */ + return cmos.regs[cmos.reg] & 0xFF; + case 0x0b: /* Status register B */ + case 0x0d: /* Status register D */ + case 0x0f: /* Shutdown status byte */ + case 0x14: /* Equipment */ + case 0x15: /* Base Memory KB Low Byte */ + case 0x16: /* Base Memory KB High Byte */ + case 0x17: /* Extended memory in KB Low Byte */ + case 0x18: /* Extended memory in KB High Byte */ + case 0x30: /* Extended memory in KB Low Byte */ + case 0x31: /* Extended memory in KB High Byte */ + // Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_NORMAL,"CMOS:Read from reg %X : %04X",cmos.reg,cmos.regs[cmos.reg]); + return cmos.regs[cmos.reg] & 0xFF; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_BIOS,LogSeverities.LOG_NORMAL,"CMOS:Read from reg "+Integer.toString(cmos.reg,16)); + return cmos.regs[cmos.reg]; } }; @@ -330,8 +328,8 @@ static public void CMOS_SetRegister(/*Bitu*/int regNr, /*Bit8u*/int val) { } - private static IoHandler.IO_ReadHandleObject[] ReadHandler=new IoHandler.IO_ReadHandleObject[2]; - private static IoHandler.IO_WriteHandleObject[] WriteHandler=new IoHandler.IO_WriteHandleObject[2]; + private static final IoHandler.IO_ReadHandleObject[] ReadHandler=new IoHandler.IO_ReadHandleObject[2]; + private static final IoHandler.IO_WriteHandleObject[] WriteHandler=new IoHandler.IO_WriteHandleObject[2]; public Cmos(Section configuration) { super(configuration); @@ -372,17 +370,15 @@ public Cmos(Section configuration) { static Cmos test; - private static Section.SectionFunction CMOS_Destroy = new Section.SectionFunction() { + private static final Section.SectionFunction CMOS_Destroy = new Section.SectionFunction() { public void call(Section section) { test = null; - for (int i=0;i>=1; } break; @@ -288,9 +287,9 @@ public void WriteControllerReg(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int len) chan=GetChannel((/*Bit8u*/short)(reg >> 1)); flipflop=!flipflop; if (flipflop) { - return (int)(chan.curraddr & 0xff); + return chan.curraddr & 0xff; } else { - return (int)((chan.curraddr >> 8) & 0xff); + return (chan.curraddr >> 8) & 0xff; } /* read DMA transfer count (1st byte low part, 2nd byte high part) */ case 0x1:case 0x3:case 0x5:case 0x7: @@ -320,11 +319,11 @@ public void WriteControllerReg(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int len) static private /*Bit32u*/long dma_wrapping = 0xffff; - static private DmaController[] DmaControllers=new DmaController[2]; + static private final DmaController[] DmaControllers=new DmaController[2]; static final private int EMM_PAGEFRAME4K = ((0xE000*16)/4096); - static private /*Bit32u*/long[] ems_board_mapping=new long[Paging.LINK_START]; + static private final /*Bit32u*/long[] ems_board_mapping=new long[Paging.LINK_START]; static private void UpdateEMSMapping() { /* if EMS is not present, this will result in a 1:1 mapping */ @@ -336,7 +335,7 @@ static private void UpdateEMSMapping() { /* read a block from physical memory */ static private void DMA_BlockRead(/*PhysPt*/int spage,/*PhysPt*/int offset,short[] data, int dataOffset, /*Bitu*/int size) { - /*Bitu*/int highpart_addr_page = (int)(spage>>12); + /*Bitu*/int highpart_addr_page = spage>>12; int dma16=1; size <<= dma16; offset <<= dma16; @@ -344,18 +343,18 @@ static private void DMA_BlockRead(/*PhysPt*/int spage,/*PhysPt*/int offset,short boolean left = true; for ( ; size!=0 ; size--, offset++) { if (offset>(dma_wrapping<>> 12); /* care for EMS pageframe etc. */ if (page < EMM_PAGEFRAME4K) page = (int)Paging.firstmb[page]; else if (page < EMM_PAGEFRAME4K+0x10) page = (int)ems_board_mapping[page]; else if (page < Paging.LINK_START) page = (int)Paging.firstmb[page]; if (left) { - data[dataOffset] = (short)Memory.phys_readb(page*4096 + (offset & 4095)); + data[dataOffset] = Memory.phys_readb(page*4096 + (offset & 4095)); } else { - data[dataOffset++] |= (Memory.phys_readb(page*4096 + (offset & 4095)) << 8); + data[dataOffset++] |= (short) (Memory.phys_readb(page*4096 + (offset & 4095)) << 8); } left=!left; } @@ -366,9 +365,9 @@ static private void DMA_BlockRead(/*PhysPt*/int spage,/*PhysPt*/int offset,byte[ /*Bit32u*/long dma_wrap = 0xffff; for ( ; size!=0 ; size--, offset++) { if (offset>(dma_wrapping)) { - Log.log_msg("DMA segbound wrapping (read): "+Long.toString(spage, 16)+":"+Integer.toString(offset,16)+" size "+Integer.toString(size, 16)+" [0] wrap "+Long.toString(dma_wrapping,16)); + System.out.println("DMA segbound wrapping (read): "+Long.toString(spage, 16)+":"+Integer.toString(offset,16)+" size "+Integer.toString(size, 16)+" [0] wrap "+Long.toString(dma_wrapping,16)); } - offset &= dma_wrap; + offset &= (int) dma_wrap; /*Bitu*/int page = highpart_addr_page+(offset >>> 12); /* care for EMS pageframe etc. */ if (page < EMM_PAGEFRAME4K) page = (int)Paging.firstmb[page]; @@ -380,15 +379,15 @@ static private void DMA_BlockRead(/*PhysPt*/int spage,/*PhysPt*/int offset,byte[ /* write a block into physical memory */ static void DMA_BlockWrite(/*PhysPt*/int spage,/*PhysPt*/int offset,byte[] data, int data_offset, /*Bitu*/int size,/*Bit8u*/short dma16) { - /*Bitu*/int highpart_addr_page = (int)(spage>>12); + /*Bitu*/int highpart_addr_page = spage>>12; size <<= dma16; offset <<= dma16; - /*Bit32u*/long dma_wrap = ((0xffff<(dma_wrapping<>> 12); /* care for EMS pageframe etc. */ if (page < EMM_PAGEFRAME4K) page = (int)Paging.firstmb[page]; @@ -418,52 +417,49 @@ public static void CloseSecondDMAController() { /* check availability of second DMA controller, needed for SB16 */ public static boolean SecondDMAControllerAvailable() { - if (DmaControllers[1]!=null) return true; - else return false; + return DmaControllers[1] != null; } - private static IoHandler.IO_WriteHandler DMA_Write_Port = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - if (port<0x10) { - /* write to the first DMA controller (channels 0-3) */ - DmaControllers[0].WriteControllerReg(port,val,1); - } else if (port>=0xc0 && port <=0xdf) { - /* write to the second DMA controller (channels 4-7) */ - DmaControllers[1].WriteControllerReg((port-0xc0) >> 1,val,1); - } else { - UpdateEMSMapping(); - switch (port) { - /* write DMA page register */ - case 0x81:GetDMAChannel(2).SetPage((/*Bit8u*/short)val);break; - case 0x82:GetDMAChannel(3).SetPage((/*Bit8u*/short)val);break; - case 0x83:GetDMAChannel(1).SetPage((/*Bit8u*/short)val);break; - case 0x89:GetDMAChannel(6).SetPage((/*Bit8u*/short)val);break; - case 0x8a:GetDMAChannel(7).SetPage((/*Bit8u*/short)val);break; - case 0x8b:GetDMAChannel(5).SetPage((/*Bit8u*/short)val);break; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler DMA_Write_Port = (port, val, iolen) -> { + if (port<0x10) { + /* write to the first DMA controller (channels 0-3) */ + DmaControllers[0].WriteControllerReg(port,val,1); + } else if (port>=0xc0 && port <=0xdf) { + /* write to the second DMA controller (channels 4-7) */ + DmaControllers[1].WriteControllerReg((port-0xc0) >> 1,val,1); + } else { + UpdateEMSMapping(); + switch (port) { + /* write DMA page register */ + case 0x81:GetDMAChannel(2).SetPage((/*Bit8u*/short)val);break; + case 0x82:GetDMAChannel(3).SetPage((/*Bit8u*/short)val);break; + case 0x83:GetDMAChannel(1).SetPage((/*Bit8u*/short)val);break; + case 0x89:GetDMAChannel(6).SetPage((/*Bit8u*/short)val);break; + case 0x8a:GetDMAChannel(7).SetPage((/*Bit8u*/short)val);break; + case 0x8b:GetDMAChannel(5).SetPage((/*Bit8u*/short)val);break; } } }; - static private IoHandler.IO_ReadHandler DMA_Read_Port = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - if (port<0x10) { - /* read from the first DMA controller (channels 0-3) */ - return DmaControllers[0].ReadControllerReg(port,iolen); - } else if (port>=0xc0 && port <=0xdf) { - /* read from the second DMA controller (channels 4-7) */ - return DmaControllers[1].ReadControllerReg((port-0xc0) >> 1,iolen); - } else switch (port) { - /* read DMA page register */ - case 0x81:return GetDMAChannel(2).pagenum; - case 0x82:return GetDMAChannel(3).pagenum; - case 0x83:return GetDMAChannel(1).pagenum; - case 0x89:return GetDMAChannel(6).pagenum; - case 0x8a:return GetDMAChannel(7).pagenum; - case 0x8b:return GetDMAChannel(5).pagenum; - } - return 0; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler DMA_Read_Port = (port, iolen) -> { + if (port<0x10) { + /* read from the first DMA controller (channels 0-3) */ + return DmaControllers[0].ReadControllerReg(port,iolen); + } else if (port>=0xc0 && port <=0xdf) { + /* read from the second DMA controller (channels 4-7) */ + return DmaControllers[1].ReadControllerReg((port-0xc0) >> 1,iolen); + } else switch (port) { + /* read DMA page register */ + case 0x81:return GetDMAChannel(2).pagenum; + case 0x82:return GetDMAChannel(3).pagenum; + case 0x83:return GetDMAChannel(1).pagenum; + case 0x89:return GetDMAChannel(6).pagenum; + case 0x8a:return GetDMAChannel(7).pagenum; + case 0x8b:return GetDMAChannel(5).pagenum; } + return 0; }; static public void DMA_SetWrapping(/*Bitu*/int wrap) { @@ -502,13 +498,13 @@ public DMA(Section configuration) { static private DMA test; - public static Section.SectionFunction DMA_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction DMA_Destroy = new Section.SectionFunction() { public void call(Section section) { test = null; } }; - public static Section.SectionFunction DMA_Init = new Section.SectionFunction() { + public static final Section.SectionFunction DMA_Init = new Section.SectionFunction() { public void call(Section section) { DMA_SetWrapping(0xffff); test = new DMA(section); diff --git a/jdosbox/src/main/java/jdos/hardware/DbOPL.java b/jdosbox/src/main/java/jdos/hardware/DbOPL.java index ef0ef332..6817cc09 100644 --- a/jdosbox/src/main/java/jdos/hardware/DbOPL.java +++ b/jdosbox/src/main/java/jdos/hardware/DbOPL.java @@ -167,8 +167,8 @@ static private double log10(double d) { //The highest bit is right shifted to generate -1 or 0 for negation //So taking the highest input value of 7 this gives 3, 7, 3, 0, -3, -7, -3, 0 static private final /*Bit8s*/byte[] VibratoTable = { - 1 - 0x00, 0 - 0x00, 1 - 0x00, 30 - 0x00, - 1 - 0x80, 0 - 0x80, 1 - 0x80, 30 - 0x80 + 1, 0, 1, 30, + 1 - 0x80, -0x80, 1 - 0x80, 30 - 0x80 }; //Shift strength for the ksl value determined by ksl strength @@ -179,8 +179,8 @@ static private double log10(double d) { // #if (DBOPL_WAVE == WAVE_HANDLER) // typedef /*Bits*/int ( DB_FASTCALL *WaveHandler) ( /*Bitu*/long i, /*Bitu*/long volume ); // #endif - static private interface WaveHandler { - public /*Bits*/int call(int i, int volume); + private interface WaveHandler { + /*Bits*/int call(int i, int volume); } // typedef /*Bits*/int ( DBOPL::Operator::*VolumeHandler) ( ); @@ -364,7 +364,7 @@ public void Write20(Chip chip, /*Bit8u*/short val) { reg20 = val; //Shift the tremolo bit over the entire register, saved a branch, YES! tremoloMask = (byte)((/*Bit8s*/byte)(val) >> 7); - tremoloMask &= ~(( 1 << ENV_EXTRA ) -1); + tremoloMask &= -(1 << ENV_EXTRA); //Update specific features based on changes if ((change & MASK_KSR)!=0) { UpdateRates( chip ); @@ -429,9 +429,7 @@ public void WriteE0(Chip chip, /*Bit8u*/short val) { public boolean Silent() { if ( !ENV_SILENT( totalLevel + volume ) ) return false; - if ((rateZero & ( 1 << state ))==0) - return false; - return true; + return (rateZero & (1 << state)) != 0; } public void Prepare(Chip chip) { currentLevel = totalLevel + (chip.tremoloValue & tremoloMask); @@ -457,10 +455,10 @@ public void KeyOn( /*Bit8u*/int mask) { rateIndex = 0; SetState( ATTACK ); } - keyOn |= mask; + keyOn |= (short) mask; } public void KeyOff( /*Bit8u*/int mask) { - keyOn &= ~mask; + keyOn &= (short) ~mask; if (keyOn==0) { if (state != OFF) { SetState(RELEASE); @@ -507,7 +505,7 @@ public void KeyOff( /*Bit8u*/int mask) { } //In sustain phase, but not sustaining, do regular release case RELEASE: - vol += RateForward( releaseAdd );; + vol += RateForward( releaseAdd ); if (vol >= ENV_MAX) { volume = ENV_MAX; SetState( OFF ); @@ -586,8 +584,8 @@ public Operator() { } private static class Channel { - int index; - Chip chip; + final int index; + final Chip chip; Channel(Chip chip, int index) { this.chip = chip; @@ -606,13 +604,13 @@ private static class Channel { } } - Operator[] op = new Operator[2]; + final Operator[] op = new Operator[2]; Operator Op(/*Bitu*/int index) { return chip.chan[this.index+ (index >> 1) ].op[index & 1]; } int synthHandlerMode; /*Bit32u*/int chanData; //Frequency/octave and derived values - /*Bit32s*/int[] old = new int[2]; //Old data for feedback + /*Bit32s*/final int[] old = new int[2]; //Old data for feedback /*Bit8u*/int feedback; //Feedback shift /*Bit8u*/short regB0; //Register values to check for changes @@ -635,7 +633,7 @@ void SetChanData(Chip chip, /*Bit32u*/int data ) { Op( 0 ).UpdateAttenuation(); Op( 1 ).UpdateAttenuation(); } - if ((change & ( 0xff << SHIFT_KEYCODE))!=0) { + if ((change & (0xffL << SHIFT_KEYCODE))!=0) { Op( 0 ).UpdateRates( chip ); Op( 1 ).UpdateRates( chip ); } @@ -652,7 +650,7 @@ void UpdateFrequency(Chip chip, /*Bit8u*/int fourOp ) { keyCode |= ( data & 0x200)>>9; /* notesel == 0 */ } //Add the keycode and ksl into the highest bits of chanData - data |= (keyCode << SHIFT_KEYCODE) | ( kslBase << SHIFT_KSLBASE ); + data |= (int) ((keyCode << SHIFT_KEYCODE) | ( kslBase << SHIFT_KSLBASE )); SetChanData( chip, data ); if ((fourOp & 0x3f)!=0) { chip.chan[index+1].SetChanData( chip, data ); @@ -665,7 +663,7 @@ void WriteA0(Chip chip, /*Bit8u*/int val) { return; /*Bit32u*/long change = (chanData ^ val ) & 0xff; if (change!=0) { - chanData ^= change; + chanData ^= (int) change; UpdateFrequency(chip, fourOp); } } @@ -676,7 +674,7 @@ void WriteB0(Chip chip, /*Bit8u*/short val) { return; /*Bitu*/long change = (chanData ^ ( val << 8 ) ) & 0x1f00; if (change!=0) { - chanData ^= change; + chanData ^= (int) change; UpdateFrequency( chip, fourOp ); } //Check for a change in the keyon/off state @@ -725,7 +723,7 @@ void WriteC0(Chip chip, /*Bit8u*/short val ) { chan1 = this; } - /*Bit8u*/int synth = ( (chan0.regC0 & 1) << 0 )| (( chan1.regC0 & 1) << 1 ); + /*Bit8u*/int synth = ((chan0.regC0 & 1))| (( chan1.regC0 & 1) << 1 ); switch ( synth ) { case 0: chan0.synthHandlerMode = sm3FMFM; @@ -775,7 +773,8 @@ void GeneratePercussion(boolean opl3Mode, Chip chip, /*Bit32s*/int[] output, int Channel chan = this; //BassDrum - /*Bit32s*/int mod = (/*Bit32u*/int)((old[0] + old[1])) >> feedback; + /*Bit32s*//*Bit32u*/ + int mod = (old[0] + old[1]) >> feedback; old[0] = old[1]; old[1] = Op(0).GetSample( mod ); @@ -888,7 +887,8 @@ Channel BlockTemplate(int mode, Chip chip, /*Bit32u*/long samples, /*Bit32s*/int } //Do unsigned shift so we can shift out all bits but still stay in 10 bit range otherwise - /*Bit32s*/int mod = (/*Bit32u*/int)((old[0] + old[1])) >>> feedback; + /*Bit32s*//*Bit32u*/ + int mod = (old[0] + old[1]) >>> feedback; old[0] = old[1]; old[1] = Op(0).GetSample( mod ); /*Bit32s*/int sample=0; @@ -927,7 +927,7 @@ Channel BlockTemplate(int mode, Chip chip, /*Bit32u*/long samples, /*Bit32s*/int case sm3AMFM: case sm3FMAM: case sm3AMAM: - output[ offset+i * 2 + 0 ] += sample & maskLeft; + output[offset + i * 2] += sample & maskLeft; output[ offset+i * 2 + 1 ] += sample & maskRight; break; } @@ -973,18 +973,18 @@ static private class Chip { /*Bit32u*/int noiseValue; //Frequency scales for the different multiplications - /*Bit32u*/int[] freqMul = new int[16]; + /*Bit32u*/final int[] freqMul = new int[16]; //Rates for decay and release for rate of this chip - /*Bit32u*/int[] linearRates = new int[76]; + /*Bit32u*/final int[] linearRates = new int[76]; //Best match attack rates for the rate of this chip - /*Bit32u*/int[] attackRates = new int[76]; + /*Bit32u*/final int[] attackRates = new int[76]; //18 channels with 2 operators each - Channel[] chan = new Channel[19]; // last one is null + final Channel[] chan = new Channel[19]; // last one is null /*Bit8u*/short reg104; /*Bit8u*/short reg08; - /*Bit8u*/short reg04; + /*Bit8u*/final short reg04; /*Bit8u*/short regBD; /*Bit8u*/short vibratoIndex; /*Bit8u*/short tremoloIndex; @@ -1030,7 +1030,7 @@ static private class Chip { noiseCounter &= WAVE_MASK; for ( ; count > 0; --count ) { //Noise calculation from mame - noiseValue ^= ( 0x800302 ) & ( 0 - (noiseValue & 1 ) ); + noiseValue ^= ( 0x800302 ) & (-(noiseValue & 1)); noiseValue >>= 1; } return noiseValue; @@ -1115,7 +1115,7 @@ void WriteBD(/*Bit8u*/short val) { void WriteReg(/*Bit32u*/int reg, /*Bit8u*/int val ) { /*Bitu*/int index; switch ( (reg & 0xf0) >> 4 ) { - case 0x00 >> 4: + case 0: if ( reg == 0x01 ) { waveFormMask = ( val & 0x20 )!=0 ? (short)0x7 : (short)0x0; } else if ( reg == 0x104 ) { @@ -1264,9 +1264,8 @@ void GenerateBlock3( /*Bitu*/int total, /*Bit32s*/int[] output, int offset) { //void Generate( /*Bit32u*/long samples ); void Setup(/*Bit32u*/long rate) { - double d_original = OPLRATE; - // double original = rate; - double scale = d_original / (double)rate; + // double original = rate; + double scale = OPLRATE / (double)rate; //Noise counter is run at the same precision as general waves noiseAdd = (/*Bit32u*/long)( 0.5 + scale * ( 1 << LFO_SH ) ); @@ -1372,18 +1371,18 @@ void Setup(/*Bit32u*/long rate) { } //Setup the channels with the correct four op flags //Channels are accessed through a table so they appear linear here - chan[ 0].fourMask = 0x00 | ( 1 << 0 ); - chan[ 1].fourMask = 0x80 | ( 1 << 0 ); - chan[ 2].fourMask = 0x00 | ( 1 << 1 ); + chan[ 0].fourMask = (1); + chan[ 1].fourMask = 0x80 | (1); + chan[ 2].fourMask = (1 << 1); chan[ 3].fourMask = 0x80 | ( 1 << 1 ); - chan[ 4].fourMask = 0x00 | ( 1 << 2 ); + chan[ 4].fourMask = (1 << 2); chan[ 5].fourMask = 0x80 | ( 1 << 2 ); - chan[ 9].fourMask = 0x00 | ( 1 << 3 ); + chan[ 9].fourMask = (1 << 3); chan[10].fourMask = 0x80 | ( 1 << 3 ); - chan[11].fourMask = 0x00 | ( 1 << 4 ); + chan[11].fourMask = (1 << 4); chan[12].fourMask = 0x80 | ( 1 << 4 ); - chan[13].fourMask = 0x00 | ( 1 << 5 ); + chan[13].fourMask = (1 << 5); chan[14].fourMask = 0x80 | ( 1 << 5 ); //mark the percussion channels @@ -1409,7 +1408,7 @@ void Setup(/*Bit32u*/long rate) { } final public static class Handler implements Adlib.Handler { - Chip chip = new Chip(); + final Chip chip = new Chip(); public /*Bit32u*/long WriteAddr( /*Bit32u*/int port, /*Bit8u*/short val ) { return chip.WriteAddr( port, val ); @@ -1418,7 +1417,7 @@ public void WriteReg( /*Bit32u*/int addr, /*Bit8u*/short val ) { chip.WriteReg( addr, val ); } - /*Bit32s*/int[] buffer = new int[512*2]; + /*Bit32s*/final int[] buffer = new int[512*2]; public void Generate( Mixer.MixerChannel chan, /*Bitu*/int samples ) { if (samples > 512) samples = 512; @@ -1460,7 +1459,7 @@ public void Init( /*Bitu*/long rate ) { static private final WaveHandler WaveForm0 = new WaveHandler() { public /*Bits*/int call(int i, int volume) { - /*Bits*/int neg = 0 - (( i >> 9) & 1);//Create ~0 or 0 + /*Bits*/int neg = -((i >> 9) & 1);//Create ~0 or 0 /*Bitu*/int wave = SinTable[i & 511]; return (MakeVolume( wave, volume ) ^ neg) - neg; } @@ -1493,7 +1492,7 @@ public void Init( /*Bitu*/long rate ) { public /*Bits*/int call(int i, int volume) { //Twice as fast i <<= 1; - /*Bits*/int neg = 0 - (( i >> 9) & 1);//Create ~0 or 0 + /*Bits*/int neg = -((i >> 9) & 1);//Create ~0 or 0 /*Bitu*/int wave = SinTable[i & 511]; wave |= ( ( (i ^ 512 ) & 512) - 1) >> ( 32 - 12 ); return (MakeVolume( wave, volume ) ^ neg) - neg; @@ -1510,23 +1509,21 @@ public void Init( /*Bitu*/long rate ) { } }; - static private final WaveHandler WaveForm6 = new WaveHandler() { - public /*Bits*/int call(int i, int volume) { - /*Bits*/int neg = 0 - (( i >> 9) & 1);//Create ~0 or 0 - return (MakeVolume( 0, volume ) ^ neg) - neg; - } + /*Bits*/ + static private final WaveHandler WaveForm6 = (i, volume) -> { + /*Bits*/int neg = -((i >> 9) & 1);//Create ~0 or 0 + return (MakeVolume( 0, volume ) ^ neg) - neg; }; - static private final WaveHandler WaveForm7 = new WaveHandler() { - public /*Bits*/int call(int i, int volume) { - //Negative is reversed here - /*Bits*/int neg = (( i >> 9) & 1) - 1; - /*Bitu*/int wave = (i << 3); - //When negative the volume also runs backwards - wave = ((wave ^ neg) - neg) & 4095; - return (MakeVolume( wave, volume ) ^ neg) - neg; - } - }; + /*Bits*/ + static private final WaveHandler WaveForm7 = (i, volume) -> { + //Negative is reversed here + /*Bits*/int neg = (( i >> 9) & 1) - 1; + /*Bitu*/int wave = (i << 3); + //When negative the volume also runs backwards + wave = ((wave ^ neg) - neg) & 4095; + return (MakeVolume( wave, volume ) ^ neg) - neg; +}; static final private WaveHandler[] WaveHandlerTable = { WaveForm0, WaveForm1, WaveForm2, WaveForm3, @@ -1570,7 +1567,7 @@ static private void InitTables() { //Sine Wave Base for ( int i = 0; i < 512; i++ ) { WaveTable[ 0x0200 + i ] = (/*Bit16s*/short)(Math.sin( (i + 0.5) * (PI / 512.0) ) * 4084); - WaveTable[ 0x0000 + i ] = (short)-WaveTable[ 0x200 + i ]; + WaveTable[i] = (short)-WaveTable[ 0x200 + i ]; } //Exponential wave for ( int i = 0; i < 256; i++ ) { @@ -1582,7 +1579,7 @@ static private void InitTables() { //Sine Wave Base for ( int i = 0; i < 512; i++ ) { WaveTable[ 0x0200 + i ] = (/*Bit16s*/short)( 0.5 - log10( Math.sin( (i + 0.5) * (PI / 512.0) ) ) / log10(2.0)*256 ); - WaveTable[ 0x0000 + i ] = (short)(((/*Bit16s*/short)0x8000) | WaveTable[ 0x200 + i]); + WaveTable[i] = (short)(((/*Bit16s*/short)0x8000) | WaveTable[ 0x200 + i]); } //Exponential wave for ( int i = 0; i < 256; i++ ) { @@ -1607,7 +1604,7 @@ static private void InitTables() { WaveTable[ 0x800 + i ] = WaveTable[ 0x200 + i ]; //double speed sines WaveTable[ 0xa00 + i ] = WaveTable[ 0x200 + i * 2 ]; - WaveTable[ 0xb00 + i ] = WaveTable[ 0x000 + i * 2 ]; + WaveTable[ 0xb00 + i ] = WaveTable[i * 2]; WaveTable[ 0xe00 + i ] = WaveTable[ 0x200 + i * 2 ]; WaveTable[ 0xf00 + i ] = WaveTable[ 0x200 + i * 2 ]; } diff --git a/jdosbox/src/main/java/jdos/hardware/Disney.java b/jdosbox/src/main/java/jdos/hardware/Disney.java index f350689f..dcfe25e5 100644 --- a/jdosbox/src/main/java/jdos/hardware/Disney.java +++ b/jdosbox/src/main/java/jdos/hardware/Disney.java @@ -7,8 +7,6 @@ public class Disney extends Module_base { public Disney(Section configuration) { super(configuration); } - public static Section.SectionFunction DISNEY_Init = new Section.SectionFunction() { - public void call(Section section) { - } + public static final Section.SectionFunction DISNEY_Init = section -> { }; } diff --git a/jdosbox/src/main/java/jdos/hardware/Gameblaster.java b/jdosbox/src/main/java/jdos/hardware/Gameblaster.java index d4a4811c..67a4ea46 100644 --- a/jdosbox/src/main/java/jdos/hardware/Gameblaster.java +++ b/jdosbox/src/main/java/jdos/hardware/Gameblaster.java @@ -8,6 +8,8 @@ import jdos.types.LogTypes; import jdos.util.ShortPtr; +import java.util.Arrays; + public class Gameblaster { static final private int LEFT = 0x00; static final private int RIGHT = 0x01; @@ -21,8 +23,8 @@ private static class saa1099_channel int freq_enable; /* frequency enable */ int noise_enable; /* noise enable */ int octave; /* octave (0x00..0x07) */ - int[] amplitude=new int[2]; /* amplitude (0x00..0x0f) */ - int[] envelope=new int[2]; /* envelope (0x00..0x0f or 0x10 == off) */ + final int[] amplitude=new int[2]; /* amplitude (0x00..0x0f) */ + final int[] envelope=new int[2]; /* envelope (0x00..0x0f or 0x10 == off) */ /* vars to simulate the square wave */ double counter; @@ -51,18 +53,18 @@ public SAA1099() { } } int stream; /* our stream */ - int[] noise_params=new int[2]; /* noise generators parameters */ - int[] env_enable=new int[2]; /* envelope generators enable */ - int[] env_reverse_right=new int[2]; /* envelope reversed for right channel */ - int[] env_mode=new int[2]; /* envelope generators mode */ - int[] env_bits=new int[2]; /* non zero = 3 bits resolution */ - int[] env_clock=new int[2]; /* envelope clock mode (non-zero external) */ - int[] env_step=new int[2]; /* current envelope step */ + final int[] noise_params=new int[2]; /* noise generators parameters */ + final int[] env_enable=new int[2]; /* envelope generators enable */ + final int[] env_reverse_right=new int[2]; /* envelope reversed for right channel */ + final int[] env_mode=new int[2]; /* envelope generators mode */ + final int[] env_bits=new int[2]; /* non zero = 3 bits resolution */ + final int[] env_clock=new int[2]; /* envelope clock mode (non-zero external) */ + final int[] env_step=new int[2]; /* current envelope step */ int all_ch_enable; /* all channels enable */ int sync_state; /* sync all channels */ int selected_reg; /* selected register */ - saa1099_channel[] channels=new saa1099_channel[6]; /* channels */ - saa1099_noise[] noise=new saa1099_noise[2]; /* noise generators */ + final saa1099_channel[] channels=new saa1099_channel[6]; /* channels */ + final saa1099_noise[] noise=new saa1099_noise[2]; /* noise generators */ } private final static /*UINT8*/byte[][] envelope = new byte[][] { @@ -110,7 +112,7 @@ public SAA1099() { static final private int[] amplitude_lookup = new int[] { - 0*32767/16, 1*32767/16, 2*32767/16, 3*32767/16, + 0 /16, 32767 /16, 2*32767/16, 3*32767/16, 4*32767/16, 5*32767/16, 6*32767/16, 7*32767/16, 8*32767/16, 9*32767/16, 10*32767/16, 11*32767/16, 12*32767/16, 13*32767/16, 14*32767/16, 15*32767/16 @@ -118,9 +120,9 @@ public SAA1099() { /* global parameters */ private static double sample_rate; - private static SAA1099[] saa1099 = new SAA1099[2]; + private static final SAA1099[] saa1099 = new SAA1099[2]; private static Mixer.MixerChannel cms_chan; - private static /*Bit16s*/ShortPtr[][] cms_buffer=new ShortPtr[2][2]; + private static final /*Bit16s*/ShortPtr[][] cms_buffer=new ShortPtr[2][2]; static { cms_buffer[0][0] = new ShortPtr(CMS_BUFFER_SIZE); @@ -130,8 +132,8 @@ public SAA1099() { cms_buf_point0 = new ShortPtr[] {cms_buffer[0][0],cms_buffer[0][1]}; cms_buf_point2 = new ShortPtr[] {cms_buffer[1][0],cms_buffer[1][1]}; } - private static /*Bit16s*/ ShortPtr[] cms_buf_point0; - private static /*Bit16s*/ ShortPtr[] cms_buf_point2; + private static final /*Bit16s*/ ShortPtr[] cms_buf_point0; + private static final /*Bit16s*/ ShortPtr[] cms_buf_point2; private static /*Bitu*/int last_command; private static /*Bitu*/int base_port; @@ -152,18 +154,18 @@ static void saa1099_envelope(int chip, int ch) if (saa.env_bits[ch]!=0) mask &= ~1; /* 3 bit resolution, mask LSB */ - saa.channels[ch*3+0].envelope[ LEFT] = + saa.channels[ch * 3].envelope[ LEFT] = saa.channels[ch*3+1].envelope[ LEFT] = saa.channels[ch*3+2].envelope[ LEFT] = envelope[mode][step] & mask; if ((saa.env_reverse_right[ch] & 0x01)!=0) { - saa.channels[ch*3+0].envelope[RIGHT] = + saa.channels[ch * 3].envelope[RIGHT] = saa.channels[ch*3+1].envelope[RIGHT] = saa.channels[ch*3+2].envelope[RIGHT] = (15 - envelope[mode][step]) & mask; } else { - saa.channels[ch*3+0].envelope[RIGHT] = + saa.channels[ch * 3].envelope[RIGHT] = saa.channels[ch*3+1].envelope[RIGHT] = saa.channels[ch*3+2].envelope[RIGHT] = envelope[mode][step] & mask; } @@ -171,10 +173,10 @@ static void saa1099_envelope(int chip, int ch) else { /* envelope mode off, set all envelope factors to 16 */ - saa.channels[ch*3+0].envelope[ LEFT] = + saa.channels[ch * 3].envelope[ LEFT] = saa.channels[ch*3+1].envelope[ LEFT] = saa.channels[ch*3+2].envelope[ LEFT] = - saa.channels[ch*3+0].envelope[RIGHT] = + saa.channels[ch * 3].envelope[RIGHT] = saa.channels[ch*3+1].envelope[RIGHT] = saa.channels[ch*3+2].envelope[RIGHT] = 16; } @@ -311,7 +313,7 @@ private static void saa1099_write_port_w( int chip, int offset, int data ) /* channel i octave */ case 0x10: case 0x11: case 0x12: ch = (reg - 0x10) << 1; - saa.channels[ch + 0].octave = data & 0x07; + saa.channels[ch].octave = data & 0x07; saa.channels[ch + 1].octave = (data >> 4) & 0x07; break; /* channel i frequency enable */ @@ -370,7 +372,7 @@ private static void saa1099_write_port_w( int chip, int offset, int data ) } } - private static IoHandler.IO_WriteHandler write_cms = new IoHandler.IO_WriteHandler() { + private static final IoHandler.IO_WriteHandler write_cms = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { if(cms_chan!=null && (!cms_chan.enabled)) cms_chan.Enable(true); last_command = Pic.PIC_Ticks; @@ -391,12 +393,12 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { } }; - private static Mixer.MIXER_Handler CMS_CallBack = new Mixer.MIXER_Handler() { + private static final Mixer.MIXER_Handler CMS_CallBack = new Mixer.MIXER_Handler() { public void call(/*Bitu*/int len) { if (len > CMS_BUFFER_SIZE) return; - saa1099_update(0, cms_buf_point0, (int)len); - saa1099_update(1, cms_buf_point2, (int)len); + saa1099_update(0, cms_buf_point0, len); + saa1099_update(1, cms_buf_point2, len); /*Bit16s*/short[] stream=Mixer.MixTemp16; int streamOff = 0; @@ -423,7 +425,7 @@ public void call(/*Bitu*/int len) { // The Gameblaster detection private static /*Bit8u*/short cms_detect_register = 0xff; - static private IoHandler.IO_WriteHandler write_cms_detect = new IoHandler.IO_WriteHandler() { + static private final IoHandler.IO_WriteHandler write_cms_detect = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { switch(port-base_port) { case 0x6: @@ -434,7 +436,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { } }; - static private IoHandler.IO_ReadHandler read_cms_detect = new IoHandler.IO_ReadHandler() { + static private final IoHandler.IO_ReadHandler read_cms_detect = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { /*Bit8u*/short retval = 0xff; switch(port-base_port) { @@ -451,16 +453,16 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { }; static private class CMS extends Module_base { - private IoHandler.IO_WriteHandleObject WriteHandler = new IoHandler.IO_WriteHandleObject(); - private IoHandler.IO_WriteHandleObject DetWriteHandler = new IoHandler.IO_WriteHandleObject(); - private IoHandler.IO_ReadHandleObject DetReadHandler = new IoHandler.IO_ReadHandleObject(); - private Mixer.MixerObject MixerChan = new Mixer.MixerObject(); + private final IoHandler.IO_WriteHandleObject WriteHandler = new IoHandler.IO_WriteHandleObject(); + private final IoHandler.IO_WriteHandleObject DetWriteHandler = new IoHandler.IO_WriteHandleObject(); + private final IoHandler.IO_ReadHandleObject DetReadHandler = new IoHandler.IO_ReadHandleObject(); + private final Mixer.MixerObject MixerChan = new Mixer.MixerObject(); public CMS(Section configuration) { super(configuration); Section_prop section = (Section_prop)(configuration); /*Bitu*/int sample_rate_temp = section.Get_int("oplrate"); - sample_rate = (double)(sample_rate_temp); + sample_rate = sample_rate_temp; base_port = section.Get_hex("sbbase").toInt(); WriteHandler.Install(base_port, write_cms, IoHandler.IO_MB,4); @@ -494,8 +496,7 @@ static public void CMS_Init(Section sec) { static public void CMS_ShutDown(Section sec) { test.close(); test = null; - for (int i=0;i> WAVE_FRACT)); @@ -272,10 +272,10 @@ private static int GetSample(long Delta, long CurAddr, boolean eightbit) { useAddr = (holdAddr | useAddr); if (Delta >= (1 << WAVE_FRACT)) { - return (GUSRam[useAddr + 0] & 0xFF) | ((GUSRam[useAddr + 1] & 0xFF) << 8); + return (GUSRam[useAddr] & 0xFF) | ((GUSRam[useAddr + 1] & 0xFF) << 8); } else { // Interpolate - int w1 = (GUSRam[useAddr + 0] & 0xFF) | (GUSRam[useAddr + 1] << 8); // intentional signed shift - Bit32s w1 = (GUSRam[useAddr+0] | (((Bit8s)GUSRam[useAddr+1]) << 8)); + int w1 = (GUSRam[useAddr] & 0xFF) | (GUSRam[useAddr + 1] << 8); // intentional signed shift - Bit32s w1 = (GUSRam[useAddr+0] | (((Bit8s)GUSRam[useAddr+1]) << 8)); int w2 = (GUSRam[useAddr + 2] & 0xFF) | (GUSRam[useAddr + 3] << 8); // intentional signed shift - Bit32s w2 = (GUSRam[useAddr+2] | (((Bit8s)GUSRam[useAddr+3]) << 8)); int diff = w2 - w1; return (int) (w1 + ((diff * (CurAddr & WAVE_FRACT_MASK)) >> WAVE_FRACT)); @@ -397,11 +397,7 @@ private static void GUSReset() { } myGUS.IRQChan = 0; } - if ((myGUS.gRegData & 0x4) != 0) { - myGUS.irqenabled = true; - } else { - myGUS.irqenabled = false; - } + myGUS.irqenabled = (myGUS.gRegData & 0x4) != 0; } private static void GUS_CheckIRQ() { @@ -418,7 +414,7 @@ private static void CheckVoiceIrq() { if (myGUS.WaveIRQ != 0) myGUS.IRQStatus |= 0x20; GUS_CheckIRQ(); for (; ; ) { - long check = (1 << myGUS.IRQChan); + long check = (1L << myGUS.IRQChan); if ((totalmask & check) != 0) return; myGUS.IRQChan++; if (myGUS.IRQChan >= myGUS.ActiveChannels) myGUS.IRQChan = 0; @@ -431,7 +427,7 @@ private static char ExecuteReadRegister() { switch (myGUS.gRegSelect) { case 0x41: // Dma control register - read acknowledges DMA IRQ tmpreg = (short) (myGUS.DMAControl & 0xbf); - tmpreg |= (myGUS.IRQStatus & 0x80) >> 1; + tmpreg |= (short) ((myGUS.IRQStatus & 0x80) >> 1); myGUS.IRQStatus &= 0x7f; return (char) (tmpreg << 8); case 0x42: // Dma address register @@ -440,7 +436,7 @@ private static char ExecuteReadRegister() { return (char) (myGUS.TimerControl << 8); case 0x49: // Dma sample register tmpreg = (short) (myGUS.DMAControl & 0xbf); - tmpreg |= (myGUS.IRQStatus & 0x80) >> 1; + tmpreg |= (short) ((myGUS.IRQStatus & 0x80) >> 1); return (char) (tmpreg << 8); case 0x80: // Channel voice control read register if (curchan != null) return (char) (curchan.ReadWaveCtrl() << 8); @@ -469,7 +465,7 @@ private static char ExecuteReadRegister() { case 0x8f: // General channel IRQ status register tmpreg = (short) (myGUS.IRQChan | 0x20); long mask; - mask = 1 << myGUS.IRQChan; + mask = 1L << myGUS.IRQChan; if ((myGUS.RampIRQ & mask) == 0) tmpreg |= 0x40; if ((myGUS.WaveIRQ & mask) == 0) tmpreg |= 0x80; myGUS.RampIRQ &= ~mask; @@ -477,16 +473,16 @@ private static char ExecuteReadRegister() { CheckVoiceIrq(); return (char) (tmpreg << 8); default: - //Log.log_msg("Read Register num 0x" + myGUS.gRegSelect); + //System.out.println("Read Register num 0x" + myGUS.gRegSelect); return myGUS.gRegData; } } - private static Pic.PIC_EventHandler GUS_TimerEvent = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler GUS_TimerEvent = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { if (!myGUS.timers[val].masked) myGUS.timers[val].reached = true; if (myGUS.timers[val].raiseirq) { - myGUS.IRQStatus |= 0x4 << val; + myGUS.IRQStatus |= (short) (0x4 << val); GUS_CheckIRQ(); } if (myGUS.timers[val].running) @@ -575,10 +571,10 @@ private static void ExecuteGlobRegister() { myGUS.ActiveChannels = (short) (1 + (((short) (myGUS.gRegData >> 8)) & 63)); if (myGUS.ActiveChannels < 14) myGUS.ActiveChannels = 14; if (myGUS.ActiveChannels > 32) myGUS.ActiveChannels = 32; - myGUS.ActiveMask = (0xffffffffl >> (32 - myGUS.ActiveChannels)); + myGUS.ActiveMask = (0xffffffffL >> (32 - myGUS.ActiveChannels)); gus_chan.Enable(true); - myGUS.basefreq = (long) ((double) 1000000.0 / (1.619695497d * (double) (myGUS.ActiveChannels))); - //Log.log_msg("GUS set to " + myGUS.ActiveChannels + " channels"); + myGUS.basefreq = (long) (1000000.0 / (1.619695497d * (double) (myGUS.ActiveChannels))); + //System.out.println("GUS set to " + myGUS.ActiveChannels + " channels"); for (int i = 0; i < myGUS.ActiveChannels; i++) guschan[i].UpdateWaveRamp(); break; case 0x10: // Undocumented register used in Fast Tracker 2 @@ -621,13 +617,12 @@ private static void ExecuteGlobRegister() { GUSReset(); break; default: - //Log.log_msg("Unimplemented global register " + myGUS.gRegSelect + " -- " + myGUS.gRegData); + //System.out.println("Unimplemented global register " + myGUS.gRegSelect + " -- " + myGUS.gRegData); break; } - return; } - private static IoHandler.IO_ReadHandler read_gus = new IoHandler.IO_ReadHandler() { + private static final IoHandler.IO_ReadHandler read_gus = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { // LOG_MSG("read from gus port %x",port); switch (port - myGUS.portbase) { @@ -660,7 +655,7 @@ private static void ExecuteGlobRegister() { return 0; } default: - //Log.log_msg("Read GUS at port 0x" + port); + //System.out.println("Read GUS at port 0x" + port); break; } @@ -668,7 +663,7 @@ private static void ExecuteGlobRegister() { } }; - private static IoHandler.IO_WriteHandler write_gus = new IoHandler.IO_WriteHandler() { + private static final IoHandler.IO_WriteHandler write_gus = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val16, /*Bitu*/int iolen) { //short val=(short)(val16&0xffff); char val = (char) (val16); @@ -710,11 +705,11 @@ public void call(/*Bitu*/int port, /*Bitu*/int val16, /*Bitu*/int iolen) { if ((myGUS.mixControl & 0x40) != 0) { // IRQ configuration, only use low bits for irq 1 if ((irqtable[val & 0x7]) != 0) myGUS.irq1 = irqtable[val & 0x7]; - //Log.log_msg("Assigned GUS to IRQ " + myGUS.irq1); + //System.out.println("Assigned GUS to IRQ " + myGUS.irq1); } else { // DMA configuration, only use low bits for dma 1 if ((dmatable[val & 0x7]) != 0) myGUS.dma1 = dmatable[val & 0x7]; - //Log.log_msg("Assigned GUS to DMA " + myGUS.dma1); + //System.out.println("Assigned GUS to DMA " + myGUS.dma1); } break; case 0x302: @@ -739,44 +734,42 @@ public void call(/*Bitu*/int port, /*Bitu*/int val16, /*Bitu*/int iolen) { if (myGUS.gDramAddr < GUSRam.length) GUSRam[(int) myGUS.gDramAddr] = (byte)val; break; default: - //Log.log_msg("Write GUS at port 0x" + port + " with " + val); + //System.out.println("Write GUS at port 0x" + port + " with " + val); break; } } }; - private static DMA.DMA_CallBack GUS_DMA_Callback = new DMA.DMA_CallBack() { - public void call(DMA.DmaChannel chan, int event) { - if (event != DMAEvent.DMA_UNMASKED) return; - int dmaaddr = myGUS.dmaAddr << 4; - if ((myGUS.DMAControl & 0x2) == 0) { - int read = chan.Read(chan.currcnt + 1, GUSRam, dmaaddr); - //Check for 16 or 8bit channel - read *= (chan.DMA16 + 1); - if ((myGUS.DMAControl & 0x80) != 0) { - //Invert the MSB to convert twos compliment form - int i; - if ((myGUS.DMAControl & 0x40) == 0) { - // 8-bit data - for (i = dmaaddr; i < (dmaaddr + read); i++) GUSRam[i] ^= 0x80; - } else { - // 16-bit data - for (i = dmaaddr + 1; i < (dmaaddr + read); i += 2) GUSRam[i] ^= 0x80; - } + private static final DMA.DMA_CallBack GUS_DMA_Callback = (chan, event) -> { + if (event != DMAEvent.DMA_UNMASKED) return; + int dmaaddr = myGUS.dmaAddr << 4; + if ((myGUS.DMAControl & 0x2) == 0) { + int read = chan.Read(chan.currcnt + 1, GUSRam, dmaaddr); + //Check for 16 or 8bit channel + read *= (chan.DMA16 + 1); + if ((myGUS.DMAControl & 0x80) != 0) { + //Invert the MSB to convert twos compliment form + int i; + if ((myGUS.DMAControl & 0x40) == 0) { + // 8-bit data + for (i = dmaaddr; i < (dmaaddr + read); i++) GUSRam[i] ^= 0x80; + } else { + // 16-bit data + for (i = dmaaddr + 1; i < (dmaaddr + read); i += 2) GUSRam[i] ^= 0x80; } - } else { - //Read data out of UltraSound - chan.Write(chan.currcnt + 1, GUSRam, dmaaddr); } - /* Raise the TC irq if needed */ - if ((myGUS.DMAControl & 0x20) != 0) { - myGUS.IRQStatus |= 0x80; - GUS_CheckIRQ(); - } - chan.Register_Callback(null); + } else { + //Read data out of UltraSound + chan.Write(chan.currcnt + 1, GUSRam, dmaaddr); + } + /* Raise the TC irq if needed */ + if ((myGUS.DMAControl & 0x20) != 0) { + myGUS.IRQStatus |= 0x80; + GUS_CheckIRQ(); } + chan.Register_Callback(null); }; - private static Mixer.MIXER_Handler GUS_CallBack = new Mixer.MIXER_Handler() { + private static final Mixer.MIXER_Handler GUS_CallBack = new Mixer.MIXER_Handler() { public void call(/*Bitu*/int len) { //memset(&MixTemp,0,len*8); short[] buf16 = Mixer.MixTemp16; @@ -814,7 +807,7 @@ public void call(/*Bitu*/int len) { // Generate logarithmic to linear volume conversion tables private static void MakeTables() { int i; - double out = (double) (1 << 13); + double out = 1 << 13; for (i = 4095; i >= 0; i--) { vol16bit[i] = (char) out; out /= 1.002709201; /* 0.0235 dB Steps */ @@ -826,17 +819,13 @@ private static void MakeTables() { } static private Gus test = null; - private static Section.SectionFunction GUS_ShutDown = new Section.SectionFunction() { - public void call(Section section) { - GUSRam = null; - test = null; - } + private static final Section.SectionFunction GUS_ShutDown = section -> { + GUSRam = null; + test = null; }; - public static Section.SectionFunction GUS_Init = new Section.SectionFunction() { - public void call(Section section) { - test = new Gus(section); - section.AddDestroyFunction(GUS_ShutDown, true); - } + public static final Section.SectionFunction GUS_Init = section -> { + test = new Gus(section); + section.AddDestroyFunction(GUS_ShutDown, true); }; /* ~GUS() { @@ -868,7 +857,7 @@ static private class GusTimer { } static private class GFGus { - GusTimer[] timers = new GusTimer[2]; + final GusTimer[] timers = new GusTimer[2]; short gRegSelect; char gRegData; long gDramAddr; diff --git a/jdosbox/src/main/java/jdos/hardware/Hardware.java b/jdosbox/src/main/java/jdos/hardware/Hardware.java index 1e640efa..9b472977 100644 --- a/jdosbox/src/main/java/jdos/hardware/Hardware.java +++ b/jdosbox/src/main/java/jdos/hardware/Hardware.java @@ -21,7 +21,7 @@ public class Hardware extends Module_base { static public final int CAPTURE_FLAG_DBLW = 0x1; static public final int CAPTURE_FLAG_DBLH = 0x2; - static public int CaptureState = 0; + static public final int CaptureState = 0; static public void CAPTURE_AddImage(/*Bitu*/int width, /*Bitu*/int height, /*Bitu*/int bpp, /*Bitu*/int pitch, /*Bitu*/int flags, float fps, int[] data, Render.RenderPal_t.RGB[] pal) { } @@ -32,9 +32,5 @@ public Hardware(Section configuration) { super(configuration); } - public static Section.SectionFunction HARDWARE_Init = new Section.SectionFunction() { - public void call(Section section) { - System.out.println("HARDWARE_Init not finished yet: NO SCREEN SHOTS"); - } - }; + public static final Section.SectionFunction HARDWARE_Init = section -> System.out.println("HARDWARE_Init not finished yet: NO SCREEN SHOTS"); } diff --git a/jdosbox/src/main/java/jdos/hardware/IO.java b/jdosbox/src/main/java/jdos/hardware/IO.java index 8885b90a..fbb3ff35 100644 --- a/jdosbox/src/main/java/jdos/hardware/IO.java +++ b/jdosbox/src/main/java/jdos/hardware/IO.java @@ -18,11 +18,11 @@ public IOF_Queue() { entries[i] = new IOF_Entry(); } /*Bitu*/int used; - IOF_Entry[] entries = new IOF_Entry[IOF_QUEUESIZE]; + final IOF_Entry[] entries = new IOF_Entry[IOF_QUEUESIZE]; } private static IOF_Queue iof_queue; - private static CPU.CPU_Decoder IOFaultCore = new CPU.CPU_Decoder() { + private static final CPU.CPU_Decoder IOFaultCore = new CPU.CPU_Decoder() { public /*Bits*/int call() { CPU.CPU_CycleLeft+=CPU.CPU_Cycles; CPU.CPU_Cycles=1; @@ -67,7 +67,7 @@ static private void IO_USEC_write_delay_old() { } - static private final int IODELAY_READ_MICROSk = (int)(1024/1.0); + static private final int IODELAY_READ_MICROSk = 1024; static private final int IODELAY_WRITE_MICROSk = (int)(1024/0.75); static private void IO_USEC_read_delay() { @@ -165,7 +165,7 @@ public static void IO_WriteB(/*Bitu*/int port,/*Bitu*/int val) { old_cpudecoder=CPU.cpudecoder; CPU.cpudecoder=IOFaultCore; IOF_Entry entry=iof_queue.entries[iof_queue.used++]; - entry.cs=(int)CPU_Regs.reg_csVal.dword; + entry.cs= CPU_Regs.reg_csVal.dword; entry.eip=CPU_Regs.reg_eip; CPU.CPU_Push16(CPU_Regs.reg_csVal.dword); CPU.CPU_Push16(CPU_Regs.reg_ip()); @@ -275,7 +275,7 @@ static public void IO_WriteD(/*Bitu*/int port,/*Bitu*/int val) { CPU_Regs.reg_edx.word(port); /*RealPt*/int icb = Callback.CALLBACK_RealPointer(Callback.call_priv_io); CPU_Regs.SegSet16CS(Memory.RealSeg(icb)); - CPU_Regs.reg_eip=Memory.RealOff(icb)+0x00; + CPU_Regs.reg_eip= Memory.RealOff(icb); CPU.CPU_Exception(CPU.cpu.exception.which,CPU.cpu.exception.error); Dosbox.DOSBOX_RunMachine(); @@ -370,13 +370,13 @@ public IO(Section configuration) { IoHandler.IO_FreeWriteHandler(0,IoHandler.IO_MA,IoHandler.IO_MAX); } static IO test; - public static Section.SectionFunction IO_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction IO_Destroy = new Section.SectionFunction() { public void call(Section section) { test = null; iof_queue = null; } }; - public static Section.SectionFunction IO_Init = new Section.SectionFunction() { + public static final Section.SectionFunction IO_Init = new Section.SectionFunction() { public void call(Section sec) { iof_queue = new IOF_Queue(); test = new IO(sec); diff --git a/jdosbox/src/main/java/jdos/hardware/IPX.java b/jdosbox/src/main/java/jdos/hardware/IPX.java index 9a018f1f..0b93fa89 100644 --- a/jdosbox/src/main/java/jdos/hardware/IPX.java +++ b/jdosbox/src/main/java/jdos/hardware/IPX.java @@ -1,6 +1,5 @@ package jdos.hardware; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.cpu.Callback; import jdos.dos.Dos_misc; @@ -8,7 +7,6 @@ import jdos.dos.Dos_tables; import jdos.dos.drives.Drive_virtual; import jdos.gui.Main; -import jdos.misc.Log; import jdos.misc.Program; import jdos.misc.setup.Config; import jdos.misc.setup.Module_base; @@ -67,7 +65,7 @@ static public final class packetBuffer { } static public final class nodeType { - public /*Uint8*/byte[] node = new byte[6]; + public final /*Uint8*/byte[] node = new byte[6]; } static final class IPXHeader { @@ -80,7 +78,7 @@ static public class transport { /*Uint8*/int network; static public class addrtype { //nodeType byNode = new nodeType(); - nodeType byNode = new nodeType(); + final nodeType byNode = new nodeType(); public void setHost(int host) { byNode.node[0] = (byte)(host & 0xFF); byNode.node[1] = (byte)((host >> 8) & 0xFF); @@ -121,6 +119,7 @@ byte[] toByteArray() { bos.write(src.addr.byNode.node); write16(bos, src.socket); } catch (Exception e) { + throw new RuntimeException(e); } return bos.toByteArray(); } @@ -139,7 +138,7 @@ void load(byte[] data) { bis.read(src.addr.byNode.node); src.socket = read16(bis); } catch (Exception e) { - + throw new RuntimeException(e); } } } @@ -150,8 +149,8 @@ final static private class IPaddress { } final static private class ipxnetaddr { - /*Uint8*/byte[] netnum = new byte[4]; // Both are big endian - /*Uint8*/byte[] netnode = new byte[6]; + /*Uint8*/final byte[] netnum = new byte[4]; // Both are big endian + /*Uint8*/final byte[] netnode = new byte[6]; public byte[] toByteArray() { byte[] result = new byte[10]; @@ -191,7 +190,7 @@ final static private class fragmentDescriptor { static private final packetBuffer incomingPacket = new packetBuffer(); private static /*Bit16u*/int socketCount; - private static /*Bit16u*/int[] opensockets = new int[SOCKETTABLESIZE]; + private static final /*Bit16u*/int[] opensockets = new int[SOCKETTABLESIZE]; private static /*Bit16u*/int swapByte(/*Bit16u*/int sockNum) { return (((sockNum >>> 8) & 0xFF) | ((sockNum & 0xFF) << 8)); @@ -206,13 +205,13 @@ final static private class fragmentDescriptor { static private ECBClass ESRList; // ECBs waiting to be ESR notified private static class ECBClass { - public /*RealPt*/int ECBAddr; + public final /*RealPt*/int ECBAddr; public boolean isInESRList; ECBClass prevECB; // Linked List ECBClass nextECB; public /*Bit8u*/int iuflag; // Need to save data since we are not always in - public /*Bit16u*/int mysocket; // real mode + public final /*Bit16u*/int mysocket; // real mode public /*Bit8u*/byte[] databuffer; // received data is stored here until we get called public /*Bitu*/int buflen; // by Interrupt @@ -228,13 +227,13 @@ public ECBClass(/*Bit16u*/int segment, /*Bit16u*/int offset) { ECBSerialNumber++; ECBAmount++; - Log.log_msg(StringHelper.sprintf("ECB: SN%7d created. Number of ECBs: %3d, ESR %4x:%4x, ECB %4x:%4x", + System.out.println(StringHelper.sprintf("ECB: SN%7d created. Number of ECBs: %3d, ESR %4x:%4x, ECB %4x:%4x", new Object[] { - new Integer(SerialNumber), - new Integer(ECBAmount), - new Integer(Memory.real_readw(Memory.RealSeg(ECBAddr),Memory.RealOff(ECBAddr)+6)), - new Integer(Memory.real_readw(Memory.RealSeg(ECBAddr),Memory.RealOff(ECBAddr)+4)), - new Integer(segment),new Integer(offset)})); + SerialNumber, + ECBAmount, + Memory.real_readw(Memory.RealSeg(ECBAddr), Memory.RealOff(ECBAddr) + 6), + Memory.real_readw(Memory.RealSeg(ECBAddr), Memory.RealOff(ECBAddr) + 4), + segment, offset})); } isInESRList = false; @@ -279,7 +278,7 @@ public void setCompletionFlag(/*Bit8u*/int flagval) { return Memory.real_readw(Memory.RealSeg(ECBAddr), Memory.RealOff(ECBAddr) + 34); } - public boolean writeData() { + public void writeData() { /*Bitu*/int length=buflen; /*Bit8u*/byte[] buffer = databuffer; fragmentDescriptor tmpFrag = new fragmentDescriptor(); @@ -294,15 +293,13 @@ public boolean writeData() { if(bufoffset >= length) { setCompletionFlag(COMP_SUCCESS); setImmAddress(buffer, 22); // Write in source node - return true; + return; } } } if(bufoffset < length) { setCompletionFlag(COMP_MALFORMED); - return false; } - return false; } public void writeDataBuffer(/*Bit8u*/byte[] buffer, /*Bit16u*/int length) { @@ -373,7 +370,7 @@ public void getImmAddress(/*Bit8u*/byte[] immAddr) { public void close() { if (Config.IPX_DEBUGMSG) { ECBAmount--; - Log.log_msg(StringHelper.sprintf("ECB: SN%7d destroyed. Remaining ECBs: %3d", new Object[] {new Integer(SerialNumber),new Integer(ECBAmount)})); + System.out.println(StringHelper.sprintf("ECB: SN%7d destroyed. Remaining ECBs: %3d", new Object[] {SerialNumber, ECBAmount})); } if(isInESRList) { @@ -414,7 +411,7 @@ private static void OpenSocket() { if(sockAlloc > 0x7fff) { // I have no idea how this could happen if the IPX driver // is limited to 150 open sockets at a time - Log.log_msg("IPX: Out of dynamic sockets"); + System.out.println("IPX: Out of dynamic sockets"); } sockNum = sockAlloc; } else { @@ -434,7 +431,7 @@ private static void OpenSocket() { private static void CloseSocket() { /*Bit16u*/int sockNum, i; ECBClass tmpECB = ECBList; - ECBClass tmp2ECB = ECBList; + ECBClass tmp2ECB; sockNum = swapByte(CPU_Regs.reg_edx.word()); if(!sockInUse(sockNum)) return; @@ -491,7 +488,7 @@ public void call(/*Bitu*/int param) { } tmpECB = tmp2ECB; } - Log.log_msg("!!!! Rouge AES !!!!" ); + System.out.println("!!!! Rouge AES !!!!" ); } }; @@ -501,10 +498,10 @@ private static void handleIpxRequest() { switch (CPU_Regs.reg_ebx.word()) { case 0x0000: // Open socket OpenSocket(); - Log.log_msg(StringHelper.sprintf("IPX: Open socket %4x", new Object[]{new Integer(swapByte(CPU_Regs.reg_edx.word()))})); + System.out.println(StringHelper.sprintf("IPX: Open socket %4x", new Object[]{swapByte(CPU_Regs.reg_edx.word())})); break; case 0x0001: // Close socket - Log.log_msg(StringHelper.sprintf("IPX: Close socket %4x", new Object[]{new Integer(swapByte(CPU_Regs.reg_edx.word()))})); + System.out.println(StringHelper.sprintf("IPX: Close socket %4x", new Object[]{swapByte(CPU_Regs.reg_edx.word())})); CloseSocket(); break; case 0x0002: // get local target @@ -512,14 +509,14 @@ private static void handleIpxRequest() { // Currently no support for multiple networks for(/*Bitu*/int i = 0; i < 6; i++) - Memory.real_writeb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+i,Memory.real_readb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()+i+4)); + Memory.real_writeb(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+i,Memory.real_readb(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()+i+4)); CPU_Regs.reg_ecx.word(1); // time ticks expected CPU_Regs.reg_eax.low(0x00); //success break; case 0x0003: // Send packet - tmpECB = new ECBClass((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); + tmpECB = new ECBClass(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); if(!incomingPacket.connected) { tmpECB.setInUseFlag(USEFLAG_AVAILABLE); tmpECB.setCompletionFlag(COMP_UNDELIVERABLE); @@ -534,7 +531,7 @@ private static void handleIpxRequest() { break; case 0x0004: // Listen for packet - tmpECB = new ECBClass((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); + tmpECB = new ECBClass(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); // LOG_IPX("ECB: SN%7d RECEIVE.", tmpECB.SerialNumber); if(!sockInUse(tmpECB.getSocket())) { // Socket is not open CPU_Regs.reg_eax.low(0xff); @@ -554,28 +551,28 @@ private static void handleIpxRequest() { case 0x0005: // SCHEDULE IPX EVENT case 0x0007: // SCHEDULE SPECIAL IPX EVENT { - tmpECB = new ECBClass((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); + tmpECB = new ECBClass(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); // LOG_IPX("ECB: SN%7d AES. T=%fms.", tmpECB.SerialNumber, // (1000.0f/(1193182.0f/65536.0f))*(float)CPU_Regs.reg_eax.word(); - Pic.PIC_AddEvent(IPX_AES_EventHandler, (1000.0f/(1193182.0f/65536.0f))*(float)CPU_Regs.reg_eax.word(),(int)tmpECB.ECBAddr); + Pic.PIC_AddEvent(IPX_AES_EventHandler, (1000.0f/(1193182.0f/65536.0f))*(float)CPU_Regs.reg_eax.word(), tmpECB.ECBAddr); tmpECB.setInUseFlag(USEFLAG_AESCOUNT); break; } case 0x0006: // cancel operation { - /*RealPt*/int ecbaddress = Memory.RealMake((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); + /*RealPt*/int ecbaddress = Memory.RealMake(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()); tmpECB= ECBList; ECBClass tmp2ECB; while (tmpECB!=null) { tmp2ECB=tmpECB.nextECB; if(tmpECB.ECBAddr == ecbaddress) { if(tmpECB.getInUseFlag()==USEFLAG_AESCOUNT) - Pic.PIC_RemoveSpecificEvents(IPX_AES_EventHandler,(int)ecbaddress); + Pic.PIC_RemoveSpecificEvents(IPX_AES_EventHandler, ecbaddress); tmpECB.setInUseFlag(USEFLAG_AVAILABLE); tmpECB.setCompletionFlag(COMP_CANCELLED); tmpECB.close(); CPU_Regs.reg_eax.low(0); // Success - Log.log_msg("IPX: ECB canceled."); + System.out.println("IPX: ECB canceled."); return; } tmpECB=tmp2ECB; @@ -588,15 +585,15 @@ private static void handleIpxRequest() { break; case 0x0009: // Get internetwork address { - Log.log_msg(StringHelper.sprintf("IPX: Get internetwork address %2x:%2x:%2x:%2x:%2x:%2x", new Object[] { - new Integer(localIpxAddr.netnode[5] & 0xFF), new Integer(localIpxAddr.netnode[4] & 0xFF), - new Integer(localIpxAddr.netnode[3] & 0xFF), new Integer(localIpxAddr.netnode[2] & 0xFF), - new Integer(localIpxAddr.netnode[1] & 0xFF), new Integer(localIpxAddr.netnode[0] & 0xFF)})); + System.out.println(StringHelper.sprintf("IPX: Get internetwork address %2x:%2x:%2x:%2x:%2x:%2x", new Object[] { + localIpxAddr.netnode[5] & 0xFF, localIpxAddr.netnode[4] & 0xFF, + localIpxAddr.netnode[3] & 0xFF, localIpxAddr.netnode[2] & 0xFF, + localIpxAddr.netnode[1] & 0xFF, localIpxAddr.netnode[0] & 0xFF})); //Bit8u * addrptr = (Bit8u *)&localIpxAddr; byte[] addrptr = localIpxAddr.toByteArray(); for(/*Bit16u*/int i=0;i<10;i++) - Memory.real_writeb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()+i,addrptr[i]); + Memory.real_writeb(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_esi.word()+i,addrptr[i]); break; } case 0x000a: // Relinquish control @@ -621,7 +618,7 @@ private static void handleIpxRequest() { break; default: - Log.log_msg(StringHelper.sprintf("Unhandled IPX function: %4x", new Object[] {new Integer(CPU_Regs.reg_ebx.word())})); + System.out.println(StringHelper.sprintf("Unhandled IPX function: %4x", new Object[] {CPU_Regs.reg_ebx.word()})); break; } } @@ -755,18 +752,18 @@ private static void receivePacket(/*Bit8u*/byte[] buffer, /*Bit16s*/int bufSize) useECB = nextECB; } if (Config.IPX_DEBUGMSG) - Log.log_msg("IPX: RX Packet loss!"); + System.out.println("IPX: RX Packet loss!"); } private static ReceiverThread receiverThread; static final class ReceiverThread extends Thread { boolean exit = false; - Object signal = new Object(); + final Object signal = new Object(); boolean ready = false; DatagramPacket receivePacket; - byte[] tmpBuffer = new byte[IPXBUFFERSIZE]; - DatagramSocket socket; - byte[] recvBuffer = new byte[IPXBUFFERSIZE]; + final byte[] tmpBuffer = new byte[IPXBUFFERSIZE]; + final DatagramSocket socket; + final byte[] recvBuffer = new byte[IPXBUFFERSIZE]; public ReceiverThread(DatagramSocket socket) { this.socket = socket; @@ -798,6 +795,7 @@ public void run() { signal.wait(); } } catch (Exception e) { + throw new RuntimeException(e); } } } @@ -811,14 +809,16 @@ public void call() { }; static private void DisconnectFromServer(boolean unexpected) { - if(unexpected) Log.log_msg("IPX: Server disconnected unexpectedly"); + if(unexpected) System.out.println("IPX: Server disconnected unexpectedly"); if(incomingPacket.connected) { incomingPacket.connected = false; Timer.TIMER_DelTickHandler(IPX_ClientLoop); ipxClientSocket.close(); } receiverThread.exit = true; - try {receiverThread.join();} catch (Exception e){} + try {receiverThread.join();} catch (Exception e) { + throw new RuntimeException(e); + } } private static void sendPacket(ECBClass sendecb) { @@ -856,7 +856,7 @@ private static void sendPacket(ECBClass sendecb) { outbuffer[packetsize] = (byte)Memory.real_readb(tmpFrag.segment, tmpFrag.offset + t); packetsize++; if(packetsize>=IPXBUFFERSIZE) { - Log.log_msg("IPX: Packet size to be sent greater than "+IPXBUFFERSIZE+" bytes."); + System.out.println("IPX: Packet size to be sent greater than "+IPXBUFFERSIZE+" bytes."); sendecb.setCompletionFlag(COMP_UNDELIVERABLE); sendecb.NotifyESR(); return; @@ -886,7 +886,10 @@ private static void sendPacket(ECBClass sendecb) { boolean isloopback=true; for(/*Bitu*/int m=0;m<4;m++) { - if(localIpxAddr.netnum[m]!=outbuffer[m+0x6])isloopback=false; + if (localIpxAddr.netnum[m] != outbuffer[m + 0x6]) { + isloopback = false; + break; + } } for(/*Bitu*/int m=0;m<6;m++) { if(localIpxAddr.netnode[m]!=outbuffer[m+0xa])isloopback=false; @@ -900,7 +903,7 @@ private static void sendPacket(ECBClass sendecb) { ipxClientSocket.send(outPacket); } catch (Exception e) { e.printStackTrace(); - Log.log_msg("IPX: Could not send packet"); + System.out.println("IPX: Could not send packet"); sendecb.setCompletionFlag(COMP_HARDWAREERROR); sendecb.NotifyESR(); DisconnectFromServer(true); @@ -908,7 +911,7 @@ private static void sendPacket(ECBClass sendecb) { } sendecb.setCompletionFlag(COMP_SUCCESS); if (Config.IPX_DEBUGMSG) - Log.log_msg("Packet sent: size: "+packetsize); + System.out.println("Packet sent: size: "+packetsize); } else { sendecb.setCompletionFlag(COMP_SUCCESS); } @@ -917,7 +920,7 @@ private static void sendPacket(ECBClass sendecb) { // Send packet back to ourselves. receivePacket(outbuffer,packetsize); if (Config.IPX_DEBUGMSG) - Log.log_msg("Packet back: loopback:"+isloopback+", broadcast:"+islocalbroadcast); + System.out.println("Packet back: loopback:"+isloopback+", broadcast:"+islocalbroadcast); } sendecb.NotifyESR(); } @@ -956,8 +959,10 @@ private static boolean ConnectToServer(String strAddr) { ipxClientSocket.send(outPacket); } catch (Exception e) { e.printStackTrace(); - Log.log_msg("IPX: Unable to connect to server"); - try {ipxClientSocket.close();} catch (Exception e1) {} + System.out.println("IPX: Unable to connect to server"); + try {ipxClientSocket.close();} catch (Exception e1) { + throw new RuntimeException(e1); + } return false; } @@ -970,8 +975,10 @@ private static boolean ConnectToServer(String strAddr) { while(true) { elapsed = Main.GetTicks() - ticks; if(elapsed > 5000) { - Log.log_msg("Timeout connecting to server at "+strAddr); - try {ipxClientSocket.close();} catch (Exception e) {} + System.out.println("Timeout connecting to server at "+strAddr); + try {ipxClientSocket.close();} catch (Exception e) { + throw new RuntimeException(e); + } return false; } Callback.CALLBACK_Idle(); @@ -985,7 +992,7 @@ private static boolean ConnectToServer(String strAddr) { } } - Log.log_msg(StringHelper.sprintf("IPX: Connected to server. IPX address is %d:%d:%d:%d:%d:%d", new Object[]{new Integer(localIpxAddr.netnode[0] & 0xFF), new Integer(localIpxAddr.netnode[1] & 0xFF), new Integer(localIpxAddr.netnode[2] & 0xFF), new Integer(localIpxAddr.netnode[3] & 0xFF), new Integer(localIpxAddr.netnode[4] & 0xFF), new Integer(localIpxAddr.netnode[5] & 0xFF) } )); + System.out.println(StringHelper.sprintf("IPX: Connected to server. IPX address is %d:%d:%d:%d:%d:%d", new Object[]{localIpxAddr.netnode[0] & 0xFF, localIpxAddr.netnode[1] & 0xFF, localIpxAddr.netnode[2] & 0xFF, localIpxAddr.netnode[3] & 0xFF, localIpxAddr.netnode[4] & 0xFF, localIpxAddr.netnode[5] & 0xFF} )); incomingPacket.connected = true; Timer.TIMER_AddTickHandler(IPX_ClientLoop); @@ -1010,7 +1017,6 @@ static private void IPX_NetworkInit() { localIpxAddr.netnode[5] = 0x00; socketCount = 0; - return; } private static class IPXNET extends Program { @@ -1068,7 +1074,6 @@ void HelpCommand(String helpStr) { WriteOut("PING command.\n\n"); WriteOut("The syntax for IPXNET STATUS is:\n\n"); WriteOut("IPXNET STATUS\n\n"); - return; } } @@ -1217,26 +1222,21 @@ public void Run() while((Main.GetTicks() - ticks) < 1500) { Callback.CALLBACK_Idle(); if(pingCheck(pingHead)) { - WriteOut("Response from "+pingHead.src.addr.hostAsString()+", port "+pingHead.src.addr.port()+" time="+String.valueOf(Main.GetTicks() - ticks)+"ms\n"); + WriteOut("Response from "+pingHead.src.addr.hostAsString()+", port "+pingHead.src.addr.port()+" time="+ (Main.GetTicks() - ticks) +"ms\n"); } } Timer.TIMER_AddTickHandler(IPX_ClientLoop); - return; } } } } - static private Program.PROGRAMS_Main IPXNET_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new IPXNET(); - } - }; + static private final Program.PROGRAMS_Main IPXNET_ProgramStart = () -> new IPXNET(); private static final Callback.Handler IPX_ESRHandler = new Callback.Handler() { public /*Bitu*/int call() { if (Config.IPX_DEBUGMSG) - Log.log_msg("ESR: >>>>>>>>>>>>>>>" ); + System.out.println("ESR: >>>>>>>>>>>>>>>" ); while(ESRList!=null) { // LOG_IPX("ECB: SN%7d notified.", ESRList.SerialNumber); if(ESRList.databuffer!=null) ESRList.writeData(); @@ -1253,7 +1253,7 @@ public Program call() { IO.IO_WriteB(0xa0,0x63); //EOI11 IO.IO_WriteB(0x20,0x62); //EOI2 if (Config.IPX_DEBUGMSG) - Log.log_msg("ESR: <<<<<<<<<<<<<<<"); + System.out.println("ESR: <<<<<<<<<<<<<<<"); return Callback.CBRET_NONE; } @@ -1263,10 +1263,10 @@ public String getName() { }; - private Callback callback_ipx = new Callback(); - private Callback callback_esr = new Callback(); - private Callback callback_ipxint = new Callback(); - private /*RealPt*/IntRef old_73_vector = new IntRef(0); + private final Callback callback_ipx = new Callback(); + private final Callback callback_esr = new Callback(); + private final Callback callback_ipxint = new Callback(); + private final /*RealPt*/IntRef old_73_vector = new IntRef(0); private static /*Bit16u*/int dospage; private IPX(Section configuration) { @@ -1296,10 +1296,10 @@ private IPX(Section configuration) { /*PhysPt*/int phyDospage = Memory.PhysMake(dospage,0); if (Config.IPX_DEBUGMSG) - Log.log_msg("ESR callback address: "+Long.toString(phyDospage, 16)+", HandlerID "+call_ipxesr1); + System.out.println("ESR callback address: "+Long.toString(phyDospage, 16)+", HandlerID "+call_ipxesr1); //save registers - Memory.phys_writeb(phyDospage+0,0xFA); // CLI + Memory.phys_writeb(phyDospage,0xFA); // CLI Memory.phys_writeb(phyDospage+1,0x60); // PUSHA Memory.phys_writeb(phyDospage+2,0x1E); // PUSH DS Memory.phys_writeb(phyDospage+3,0x06); // PUSH ES @@ -1357,13 +1357,13 @@ private void close() { private static IPX test; - public static Section.SectionFunction IPX_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction IPX_ShutDown = new Section.SectionFunction() { public void call(Section section) { test.close(); } }; - public static Section.SectionFunction IPX_Init = new Section.SectionFunction() { + public static final Section.SectionFunction IPX_Init = new Section.SectionFunction() { public void call(Section section) { test = new IPX(section); section.AddDestroyFunction(IPX_ShutDown,true); diff --git a/jdosbox/src/main/java/jdos/hardware/IPXServer.java b/jdosbox/src/main/java/jdos/hardware/IPXServer.java index 621e6e7e..d670b27a 100644 --- a/jdosbox/src/main/java/jdos/hardware/IPXServer.java +++ b/jdosbox/src/main/java/jdos/hardware/IPXServer.java @@ -1,7 +1,5 @@ package jdos.hardware; -import jdos.misc.Log; - import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; @@ -141,11 +139,11 @@ public void run() { ipconn[i].port = receivePacket.getPort(); connBuffer[i].connected = true; - Log.log_msg("IPXSERVER: Connect from " + receivePacket.getAddress().getHostAddress()); + System.out.println("IPXSERVER: Connect from " + receivePacket.getAddress().getHostAddress()); ackClient(ipconn[i]); break; } else if((ipconn[i].host == tmpHeader.src.addr.host()) && (ipconn[i].port == tmpHeader.src.addr.port())) { - Log.log_msg("IPXSERVER: Reconnect from " + receivePacket.getAddress().getHostAddress()); + System.out.println("IPXSERVER: Reconnect from " + receivePacket.getAddress().getHostAddress()); // Update anonymous port number if changed ipconn[i].port = receivePacket.getPort(); ackClient(ipconn[i]); @@ -166,7 +164,9 @@ public void run() { static void IPX_StopServer() { ipxServerSocket.close(); - try {serverThread.join();} catch (Exception e) {} + try {serverThread.join();} catch (Exception e) { + throw new RuntimeException(e); + } } static boolean IPX_StartServer(/*Bit16u*/int portnum) { diff --git a/jdosbox/src/main/java/jdos/hardware/IoHandler.java b/jdosbox/src/main/java/jdos/hardware/IoHandler.java index 2e7105c6..a8308c7b 100644 --- a/jdosbox/src/main/java/jdos/hardware/IoHandler.java +++ b/jdosbox/src/main/java/jdos/hardware/IoHandler.java @@ -12,11 +12,11 @@ public class IoHandler { public static final int IO_MD = 0x4; public static final int IO_MA = (IO_MB | IO_MW | IO_MD ); - public static interface IO_ReadHandler { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen); + public interface IO_ReadHandler { + /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen); } - public static interface IO_WriteHandler { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen); + public interface IO_WriteHandler { + void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen); } /* Classes to manage the IO objects created by the various devices. @@ -72,56 +72,50 @@ public static void IO_Write(/*Bitu*/int port,/*Bit8u*/int val) { return (/*Bit8u*/short) (IO.IO_ReadB(port) & 0xFF); } - static public IO_WriteHandler[][] io_writehandlers = new IO_WriteHandler[3][IO_MAX]; - static public IO_ReadHandler[][] io_readhandlers = new IO_ReadHandler[3][IO_MAX]; + static public final IO_WriteHandler[][] io_writehandlers = new IO_WriteHandler[3][IO_MAX]; + static public final IO_ReadHandler[][] io_readhandlers = new IO_ReadHandler[3][IO_MAX]; - static private IO_ReadHandler IO_ReadBlocked = new IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return ~0; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IO_ReadHandler IO_ReadBlocked = (port, iolen) -> ~0; - static private IO_WriteHandler IO_WriteBlocked =new IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IO_WriteHandler IO_WriteBlocked = (port, val, iolen) -> { }; - static private IO_ReadHandler IO_ReadDefault = new IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - switch (iolen) { - case 1: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_IO, LogSeverities.LOG_WARN, "Read from port "+Integer.toString(port,16)); - io_readhandlers[0][port]=IO_ReadBlocked; - return 0xff; - case 2: - return - (io_readhandlers[0][port].call(port,1)) | - (io_readhandlers[0][port+1].call(port+1,1) << 8); - case 4: - return - (io_readhandlers[1][port].call(port,2)) | - (io_readhandlers[1][port+2].call(port+2,2) << 16); - } - return 0; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IO_ReadHandler IO_ReadDefault = (port, iolen) -> { + switch (iolen) { + case 1: + if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_IO, LogSeverities.LOG_WARN, "Read from port "+Integer.toString(port,16)); + io_readhandlers[0][port]=IO_ReadBlocked; + return 0xff; + case 2: + return + (io_readhandlers[0][port].call(port,1)) | + (io_readhandlers[0][port+1].call(port+1,1) << 8); + case 4: + return + (io_readhandlers[1][port].call(port,2)) | + (io_readhandlers[1][port+2].call(port+2,2) << 16); } + return 0; }; - static private IO_WriteHandler IO_WriteDefault =new IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (iolen) { - case 1: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_IO,LogSeverities.LOG_WARN,"Writing "+Integer.toString(val, 16)+" to port "+Integer.toString(port,16)); - io_writehandlers[0][port]=IO_WriteBlocked; - break; - case 2: - io_writehandlers[0][port].call(port,(val) & 0xff,1); - io_writehandlers[0][port+1].call(port+1,(val >> 8) & 0xff,1); - break; - case 4: - io_writehandlers[1][port].call(port,(val) & 0xffff,2); - io_writehandlers[1][port+2].call(port+2,(val >> 16) & 0xffff,2); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IO_WriteHandler IO_WriteDefault = (port, val, iolen) -> { + switch (iolen) { + case 1: + if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_IO,LogSeverities.LOG_WARN,"Writing "+Integer.toString(val, 16)+" to port "+Integer.toString(port,16)); + io_writehandlers[0][port]=IO_WriteBlocked; + break; + case 2: + io_writehandlers[0][port].call(port,(val) & 0xff,1); + io_writehandlers[0][port+1].call(port+1,(val >> 8) & 0xff,1); + break; + case 4: + io_writehandlers[1][port].call(port,(val) & 0xffff,2); + io_writehandlers[1][port+2].call(port+2,(val >> 16) & 0xffff,2); + break; } }; diff --git a/jdosbox/src/main/java/jdos/hardware/Joystick.java b/jdosbox/src/main/java/jdos/hardware/Joystick.java index d2910e7b..29e8f2b1 100644 --- a/jdosbox/src/main/java/jdos/hardware/Joystick.java +++ b/jdosbox/src/main/java/jdos/hardware/Joystick.java @@ -5,6 +5,8 @@ import jdos.misc.setup.Section_prop; import jdos.sdl.JavaMapper; +import java.util.Arrays; + public class Joystick extends Module_base { static private final class JoystickType { static public final int JOY_NONE=0; @@ -28,11 +30,11 @@ private static class Stick { float xpos,ypos; double xtick,ytick; /*Bitu*/int xcount,ycount; - boolean[] button=new boolean[2]; + final boolean[] button=new boolean[2]; } - int joytype; - static Stick[] stick=new Stick[2]; + final int joytype; + static final Stick[] stick=new Stick[2]; static private /*Bit32u*/long last_write = 0; static private boolean write_active = false; @@ -40,104 +42,100 @@ private static class Stick { static private boolean button_wrapping_enabled = true; - static private IoHandler.IO_ReadHandler read_p201 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - /* Reset Joystick to 0 after TIMEOUT ms */ - if(write_active && ((Pic.PIC_Ticks - last_write) > TIMEOUT)) { - write_active = false; - stick[0].xcount = 0; - stick[1].xcount = 0; - stick[0].ycount = 0; - stick[1].ycount = 0; - // LOG_MSG("reset by time %d %d",PIC_Ticks,last_write); - } - - /** Format of the byte to be returned: - ** | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - ** +-------------------------------+ - ** | | | | | | | | - ** Joystick B, Button 2 ---+ | | | | | | +--- Joystick A, X Axis - ** Joystick B, Button 1 -------+ | | | | +------- Joystick A, Y Axis - ** Joystick A, Button 2 -----------+ | | +----------- Joystick B, X Axis - ** Joystick A, Button 1 ---------------+ +--------------- Joystick B, Y Axis - **/ - /*Bit8u*/short ret=0xff; - if (stick[0].enabled) { - if (stick[0].xcount!=0) stick[0].xcount--; else ret&=~1; - if (stick[0].ycount!=0) stick[0].ycount--; else ret&=~2; - if (stick[0].button[0]) ret&=~16; - if (stick[0].button[1]) ret&=~32; - } - if (stick[1].enabled) { - if (stick[1].xcount!=0) stick[1].xcount--; else ret&=~4; - if (stick[1].ycount!=0) stick[1].ycount--; else ret&=~8; - if (stick[1].button[0]) ret&=~64; - if (stick[1].button[1]) ret&=~128; - } - return ret; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p201 = (port, iolen) -> { + /* Reset Joystick to 0 after TIMEOUT ms */ + if(write_active && ((Pic.PIC_Ticks - last_write) > TIMEOUT)) { + write_active = false; + stick[0].xcount = 0; + stick[1].xcount = 0; + stick[0].ycount = 0; + stick[1].ycount = 0; + // LOG_MSG("reset by time %d %d",PIC_Ticks,last_write); + } + + /* Format of the byte to be returned: + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +-------------------------------+ + | | | | | | | | + Joystick B, Button 2 ---+ | | | | | | +--- Joystick A, X Axis + Joystick B, Button 1 -------+ | | | | +------- Joystick A, Y Axis + Joystick A, Button 2 -----------+ | | +----------- Joystick B, X Axis + Joystick A, Button 1 ---------------+ +--------------- Joystick B, Y Axis + */ + /*Bit8u*/short ret=0xff; + if (stick[0].enabled) { + if (stick[0].xcount!=0) stick[0].xcount--; else ret&=~1; + if (stick[0].ycount!=0) stick[0].ycount--; else ret&=~2; + if (stick[0].button[0]) ret&=~16; + if (stick[0].button[1]) ret&=~32; } + if (stick[1].enabled) { + if (stick[1].xcount!=0) stick[1].xcount--; else ret&=~4; + if (stick[1].ycount!=0) stick[1].ycount--; else ret&=~8; + if (stick[1].button[0]) ret&=~64; + if (stick[1].button[1]) ret&=~128; + } + return ret; }; - static private IoHandler.IO_ReadHandler read_p201_timed = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - /*Bit8u*/short ret=0xff; - double currentTick = Pic.PIC_FullIndex(); - if( stick[0].enabled ){ - if( stick[0].xtick < currentTick ) ret &=~1; - if( stick[0].ytick < currentTick ) ret &=~2; - } - if( stick[1].enabled ){ - if( stick[1].xtick < currentTick ) ret &=~4; - if( stick[1].ytick < currentTick ) ret &=~8; - } - - if (stick[0].enabled) { - if (stick[0].button[0]) ret&=~16; - if (stick[0].button[1]) ret&=~32; - } - if (stick[1].enabled) { - if (stick[1].button[0]) ret&=~64; - if (stick[1].button[1]) ret&=~128; - } - return ret; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p201_timed = (port, iolen) -> { + /*Bit8u*/short ret=0xff; + double currentTick = Pic.PIC_FullIndex(); + if( stick[0].enabled ){ + if( stick[0].xtick < currentTick ) ret &=~1; + if( stick[0].ytick < currentTick ) ret &=~2; + } + if( stick[1].enabled ){ + if( stick[1].xtick < currentTick ) ret &=~4; + if( stick[1].ytick < currentTick ) ret &=~8; } + + if (stick[0].enabled) { + if (stick[0].button[0]) ret&=~16; + if (stick[0].button[1]) ret&=~32; + } + if (stick[1].enabled) { + if (stick[1].button[0]) ret&=~64; + if (stick[1].button[1]) ret&=~128; + } + return ret; }; - static private IoHandler.IO_WriteHandler write_p201 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - /* Store writetime index */ - write_active = true; - last_write = Pic.PIC_Ticks; - if (stick[0].enabled) { - stick[0].xcount=(/*Bitu*/int)((stick[0].xpos*RANGE)+RANGE); - stick[0].ycount=(/*Bitu*/int)((stick[0].ypos*RANGE)+RANGE); - } - if (stick[1].enabled) { - stick[1].xcount=(/*Bitu*/int)(((swap34? stick[1].ypos : stick[1].xpos)*RANGE)+RANGE); - stick[1].ycount=(/*Bitu*/int)(((swap34? stick[1].xpos : stick[1].ypos)*RANGE)+RANGE); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_p201 = (port, val, iolen) -> { + /* Store writetime index */ + write_active = true; + last_write = Pic.PIC_Ticks; + if (stick[0].enabled) { + stick[0].xcount=(/*Bitu*/int)((stick[0].xpos*RANGE)+RANGE); + stick[0].ycount=(/*Bitu*/int)((stick[0].ypos*RANGE)+RANGE); + } + if (stick[1].enabled) { + stick[1].xcount=(/*Bitu*/int)(((swap34? stick[1].ypos : stick[1].xpos)*RANGE)+RANGE); + stick[1].ycount=(/*Bitu*/int)(((swap34? stick[1].xpos : stick[1].ypos)*RANGE)+RANGE); } }; - static private IoHandler.IO_WriteHandler write_p201_timed = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - // Store writetime index - // Axes take time = 24.2 microseconds + ( 0.011 microsecons/ohm * resistance ) - // to reset to 0 - // Precalculate the time at which each axis hits 0 here - double currentTick = Pic.PIC_FullIndex(); - if (stick[0].enabled) { - stick[0].xtick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * - (double)(((stick[0].xpos+1.0)* OHMS)) ); - stick[0].ytick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * - (double)(((stick[0].ypos+1.0)* OHMS)) ); - } - if (stick[1].enabled) { - stick[1].xtick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * - (double)((swap34? stick[1].ypos : stick[1].xpos)+1.0) * OHMS); - stick[1].ytick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * - (double)((swap34? stick[1].xpos : stick[1].ypos)+1.0) * OHMS); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_p201_timed = (port, val, iolen) -> { + // Store writetime index + // Axes take time = 24.2 microseconds + ( 0.011 microsecons/ohm * resistance ) + // to reset to 0 + // Precalculate the time at which each axis hits 0 here + double currentTick = Pic.PIC_FullIndex(); + if (stick[0].enabled) { + stick[0].xtick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * + ((stick[0].xpos+1.0)* OHMS)); + stick[0].ytick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * + ((stick[0].ypos+1.0)* OHMS)); + } + if (stick[1].enabled) { + stick[1].xtick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * + ((swap34? stick[1].ypos : stick[1].xpos)+1.0) * OHMS); + stick[1].ytick = currentTick + 1000.0*( JOY_S_CONSTANT + S_PER_OHM * + ((swap34? stick[1].xpos : stick[1].ypos)+1.0) * OHMS); } }; @@ -181,16 +179,15 @@ public static float JOYSTICK_GetMove_Y(/*Bitu*/int which) { return 0.0f; } - private IoHandler.IO_ReadHandleObject ReadHandler = new IoHandler.IO_ReadHandleObject(); - private IoHandler.IO_WriteHandleObject WriteHandler = new IoHandler.IO_WriteHandleObject(); + private final IoHandler.IO_ReadHandleObject ReadHandler = new IoHandler.IO_ReadHandleObject(); + private final IoHandler.IO_WriteHandleObject WriteHandler = new IoHandler.IO_WriteHandleObject(); static Joystick test; - public static Section.SectionFunction JOYSTICK_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction JOYSTICK_Destroy = new Section.SectionFunction() { public void call(Section section) { test = null; - for (int i=0;i { + keyb.reset=false; + KEYBOARD_SetLEDs(0); + KEYBOARD_Add8042Response(0xAA); }; - private static Pic.PIC_EventHandler KEYBOARD_TransferBuffer = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler KEYBOARD_TransferBuffer = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { /* 8042 responses take priority over the keyboard */ if (keyb.buf8042_len != 0) { @@ -345,7 +344,7 @@ else if (keyb.buf8042_len == 0) keyb.buf8042_pos = 0; if (keyb.buf8042_pos >= keyb.buf8042.length) { - Log.log_msg("8042 Buffer full, dropping code"); + System.out.println("8042 Buffer full, dropping code"); return; } @@ -384,25 +383,24 @@ static void KEYBOARD_SetLEDs(int bits) { //LOG(LOG_KEYBOARD,LOG_NORMAL)("Keyboard LEDs: SCR=%u NUM=%u CAPS=%u",bits&1,(bits>>1)&1,(bits>>2)&1); } - private static IoHandler.IO_ReadHandler read_p60 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - if (keyb.buf8042_len != 0) { - int result = keyb.buf8042[keyb.buf8042_pos]; - if (++keyb.buf8042_pos >= keyb.buf8042_len) { - keyb.buf8042_len = keyb.buf8042_pos = 0; - keyb.p60changed = false; - keyb.auxchanged = false; - } - return result & 0xFF; - } - keyb.p60changed=false; - keyb.auxchanged = false; - if (!keyb.scheduled && keyb.used!=0) { - keyb.scheduled=true; - Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p60 = (port, iolen) -> { + if (keyb.buf8042_len != 0) { + int result = keyb.buf8042[keyb.buf8042_pos]; + if (++keyb.buf8042_pos >= keyb.buf8042_len) { + keyb.buf8042_len = keyb.buf8042_pos = 0; + keyb.p60changed = false; + keyb.auxchanged = false; } - return keyb.p60data; + return result & 0xFF; } + keyb.p60changed=false; + keyb.auxchanged = false; + if (!keyb.scheduled && keyb.used!=0) { + keyb.scheduled=true; + Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); + } + return keyb.p60data; }; static void KEYBOARD_AUX_Write(int val) { @@ -423,7 +421,7 @@ static void KEYBOARD_AUX_Write(int val) { Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"AUX reset"); KEYBOARD_AddBuffer(AUX|0xfa); /* ack */ KEYBOARD_AddBuffer(AUX|0xaa); - KEYBOARD_AddBuffer(AUX|0x0); /* mouse type */ + KEYBOARD_AddBuffer(AUX); /* mouse type */ Main.Mouse_AutoLock(false); AUX_Reset(); break; @@ -453,7 +451,7 @@ static void KEYBOARD_AUX_Write(int val) { else if (keyb.ps2mouse.intellimouse_mode) KEYBOARD_AddBuffer(AUX|0x03); else - KEYBOARD_AddBuffer(AUX|0x00); + KEYBOARD_AddBuffer(AUX); break; case 0xf0: /* set remote mode */ KEYBOARD_AddBuffer(AUX|0xfa); /* ack */ @@ -472,7 +470,7 @@ else if (keyb.ps2mouse.intellimouse_mode) KEYBOARD_AUX_Event(0,0, ((keyb.ps2mouse.m?1:0) << 2)| ((keyb.ps2mouse.r?1:0) << 1)| - ((keyb.ps2mouse.l?1:0) << 0)); + ((keyb.ps2mouse.l ? 1 : 0))); break; case 0xea: /* set stream mode */ KEYBOARD_AddBuffer(AUX|0xfa); /* ack */ @@ -486,7 +484,7 @@ else if (keyb.ps2mouse.intellimouse_mode) ((keyb.ps2mouse.scale21?1:0) << 4)| ((keyb.ps2mouse.m?1:0) << 2)| ((keyb.ps2mouse.r?1:0) << 1)| - ((keyb.ps2mouse.l?1:0) << 0)); + ((keyb.ps2mouse.l ? 1 : 0))); KEYBOARD_AddBuffer(AUX|keyb.ps2mouse.resolution); KEYBOARD_AddBuffer(AUX|keyb.ps2mouse.samplerate); break; @@ -540,271 +538,264 @@ else if (keyb.ps2mouse.last_srate[1] == 200 && keyb.ps2mouse.type >= MOUSE_INTEL } } - private static IoHandler.IO_WriteHandler write_p60 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (keyb.command) { - case KeyCommands.CMD_NONE: /* None */ - if (keyb.reset) - return; - - /* No active command this would normally get sent to the keyboard then */ - KEYBOARD_ClrBuffer(); - switch (val) { - case 0xed: /* Set Leds */ - keyb.command=KeyCommands.CMD_SETLEDS; - KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ - break; - case 0xee: /* Echo */ - KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ - break; - case 0xf0: /* set scancode set */ - keyb.command=KeyCommands.CMD_SETSCANSET; - KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ - break; - case 0xf2: /* Identify keyboard */ - /* AT's just send acknowledge */ - KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ - KEYBOARD_AddBuffer(0xab); /* ID */ - KEYBOARD_AddBuffer(0x41); - break; - case 0xf3: /* Typematic rate programming */ - keyb.command=KeyCommands.CMD_SETTYPERATE; - KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ - break; - case 0xf4: /* Enable keyboard,clear buffer, start scanning */ - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Clear buffer,enable Scaning"); - KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ - keyb.scanning=true; - break; - case 0xf5: /* Reset keyboard and disable scanning */ - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Reset, disable scanning"); - keyb.scanning=false; - KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ - break; - case 0xf6: /* Reset keyboard and enable scanning */ - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Reset, enable scanning"); - KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ - keyb.scanning=true; - break; - //case 0: - case 0xff: /* keyboard resets take a long time (about 250ms), most keyboards flash the LEDs during reset */ - KEYBOARD_Reset(); - KEYBOARD_Add8042Response(0xFA); /* ACK */ - KEYBOARD_Add8042Response(0xAA); - //keyb.reset=true; - KEYBOARD_SetLEDs(7); /* most keyboard I test with tend to flash the LEDs during reset */ - //Pic.PIC_AddEvent(KEYBOARD_ResetDelay,RESETDELAY); - break; - case 0x05: - KEYBOARD_Add8042Response(0xFE); // Resend - break; - default: - /* Just always acknowledge strange commands */ - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_ERROR,"60:Unhandled command "+Integer.toString(val,16)); - KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p60 = (port, val, iolen) -> { + switch (keyb.command) { + case KeyCommands.CMD_NONE: /* None */ + if (keyb.reset) return; - case KeyCommands.CMD_SETSCANSET: - keyb.command=KeyCommands.CMD_NONE; - if (val == 0) { /* just asking */ - if (keyb.cb_xlat) { - switch (keyb.scanset) { - case 1: KEYBOARD_AddBuffer(0x43); break; - case 2: KEYBOARD_AddBuffer(0x41); break; - case 3: KEYBOARD_AddBuffer(0x3F); break; - } - } - else { - KEYBOARD_AddBuffer(keyb.scanset); - } - KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ - } - else { - KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ - KEYBOARD_AddBuffer(0xfa); /* Acknowledge again */ - if (val > 3) val = 3; - keyb.scanset = val; - } + + /* No active command this would normally get sent to the keyboard then */ + KEYBOARD_ClrBuffer(); + switch (val) { + case 0xed: /* Set Leds */ + keyb.command=KeyCommands.CMD_SETLEDS; + KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ break; - case KeyCommands.CMD_WRITEAUX: - keyb.command=KeyCommands.CMD_NONE; - KEYBOARD_AUX_Write(val); + case 0xee: /* Echo */ + KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ break; - case KeyCommands.CMD_WRITEOUTPUT: - keyb.command=KeyCommands.CMD_NONE; - KEYBOARD_ClrBuffer(); - KEYBOARD_AddBuffer(val); /* and now you return the byte as if it were typed in */ + case 0xf0: /* set scancode set */ + keyb.command=KeyCommands.CMD_SETSCANSET; + KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ break; - case KeyCommands.CMD_WRITEAUXOUT: - KEYBOARD_AddBuffer(AUX|val); /* stuff into AUX output */ + case 0xf2: /* Identify keyboard */ + /* AT's just send acknowledge */ + KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ + KEYBOARD_AddBuffer(0xab); /* ID */ + KEYBOARD_AddBuffer(0x41); break; - case KeyCommands.CMD_SETOUTPORT: - Memory.MEM_A20_Enable((val & 2)>0); - keyb.command = KeyCommands.CMD_NONE; + case 0xf3: /* Typematic rate programming */ + keyb.command=KeyCommands.CMD_SETTYPERATE; + KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ break; - case KeyCommands.CMD_SETTYPERATE: - { - final int delay[] = { 250, 500, 750, 1000 }; - final int repeat[] = - { 33,37,42,46,50,54,58,63,67,75,83,92,100, - 109,118,125,133,149,167,182,200,217,233, - 250,270,303,333,370,400,435,476,500 }; - keyb.repeat.pause = delay[(val>>5)&3]; - keyb.repeat.rate = repeat[val&0x1f]; - keyb.command=KeyCommands.CMD_NONE; - } - /* Fallthrough! as setleds does what we want */ - case KeyCommands.CMD_SETLEDS: - if (keyb.reset) - return; - keyb.command=KeyCommands.CMD_NONE; - KEYBOARD_ClrBuffer(); - KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ - KEYBOARD_SetLEDs(val&7); + case 0xf4: /* Enable keyboard,clear buffer, start scanning */ + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Clear buffer,enable Scaning"); + KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ + keyb.scanning=true; break; - case KeyCommands.CMD_SETCOMMAND: /* 8042 command, not keyboard */ - keyb.command=KeyCommands.CMD_NONE; - keyb.cb_xlat = ((val >> 6) & 1)!=0; - keyb.auxactive = ((val >> 5) & 1)==0; - keyb.active = ((val >> 4) & 1)==0; - keyb.cb_sys = ((val >> 2) & 1)!=0; - keyb.cb_irq12 = ((val >> 1) & 1)!=0; - keyb.cb_irq1 = ((val >> 0) & 1)!=0; - if (keyb.used!=0 && !keyb.scheduled && !keyb.p60changed && keyb.active) { - keyb.scheduled=true; - Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); - } + case 0xf5: /* Reset keyboard and disable scanning */ + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Reset, disable scanning"); + keyb.scanning=false; + KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ + break; + case 0xf6: /* Reset keyboard and enable scanning */ + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Reset, enable scanning"); + KEYBOARD_Add8042Response(0xfa); /* Acknowledge */ + keyb.scanning=true; + break; + //case 0: + case 0xff: /* keyboard resets take a long time (about 250ms), most keyboards flash the LEDs during reset */ + KEYBOARD_Reset(); + KEYBOARD_Add8042Response(0xFA); /* ACK */ + KEYBOARD_Add8042Response(0xAA); + //keyb.reset=true; + KEYBOARD_SetLEDs(7); /* most keyboard I test with tend to flash the LEDs during reset */ + //Pic.PIC_AddEvent(KEYBOARD_ResetDelay,RESETDELAY); break; - case 0xF4: - keyb.scanning = true; + case 0x05: + KEYBOARD_Add8042Response(0xFE); // Resend break; + default: + /* Just always acknowledge strange commands */ + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_ERROR,"60:Unhandled command "+Integer.toString(val,16)); + KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ } + return; + case KeyCommands.CMD_SETSCANSET: + keyb.command=KeyCommands.CMD_NONE; + if (val == 0) { /* just asking */ + if (keyb.cb_xlat) { + switch (keyb.scanset) { + case 1: KEYBOARD_AddBuffer(0x43); break; + case 2: KEYBOARD_AddBuffer(0x41); break; + case 3: KEYBOARD_AddBuffer(0x3F); break; + } + } + else { + KEYBOARD_AddBuffer(keyb.scanset); + } + KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ + } + else { + KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ + KEYBOARD_AddBuffer(0xfa); /* Acknowledge again */ + if (val > 3) val = 3; + keyb.scanset = val; + } + break; + case KeyCommands.CMD_WRITEAUX: + keyb.command=KeyCommands.CMD_NONE; + KEYBOARD_AUX_Write(val); + break; + case KeyCommands.CMD_WRITEOUTPUT: + keyb.command=KeyCommands.CMD_NONE; + KEYBOARD_ClrBuffer(); + KEYBOARD_AddBuffer(val); /* and now you return the byte as if it were typed in */ + break; + case KeyCommands.CMD_WRITEAUXOUT: + KEYBOARD_AddBuffer(AUX|val); /* stuff into AUX output */ + break; + case KeyCommands.CMD_SETOUTPORT: + Memory.MEM_A20_Enable((val & 2)>0); + keyb.command = KeyCommands.CMD_NONE; + break; + case KeyCommands.CMD_SETTYPERATE: + { + final int[] delay = { 250, 500, 750, 1000 }; + final int[] repeat = + { 33,37,42,46,50,54,58,63,67,75,83,92,100, + 109,118,125,133,149,167,182,200,217,233, + 250,270,303,333,370,400,435,476,500 }; + keyb.repeat.pause = delay[(val>>5)&3]; + keyb.repeat.rate = repeat[val&0x1f]; + keyb.command=KeyCommands.CMD_NONE; + } + /* Fallthrough! as setleds does what we want */ + case KeyCommands.CMD_SETLEDS: + if (keyb.reset) + return; + keyb.command=KeyCommands.CMD_NONE; + KEYBOARD_ClrBuffer(); + KEYBOARD_AddBuffer(0xfa); /* Acknowledge */ + KEYBOARD_SetLEDs(val&7); + break; + case KeyCommands.CMD_SETCOMMAND: /* 8042 command, not keyboard */ + keyb.command=KeyCommands.CMD_NONE; + keyb.cb_xlat = ((val >> 6) & 1)!=0; + keyb.auxactive = ((val >> 5) & 1)==0; + keyb.active = ((val >> 4) & 1)==0; + keyb.cb_sys = ((val >> 2) & 1)!=0; + keyb.cb_irq12 = ((val >> 1) & 1)!=0; + keyb.cb_irq1 = ((val) & 1)!=0; + if (keyb.used!=0 && !keyb.scheduled && !keyb.p60changed && keyb.active) { + keyb.scheduled=true; + Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); + } + break; + case 0xF4: + keyb.scanning = true; + break; } }; static /*Bit8u*/short port_61_data = 0; - private static IoHandler.IO_ReadHandler read_p61 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - port_61_data^=0x20; - port_61_data^=0x10; - return port_61_data; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p61 = (port, iolen) -> { + port_61_data^=0x20; + port_61_data^=0x10; + return port_61_data; }; - private static IoHandler.IO_WriteHandler write_p61 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - if (((port_61_data ^ val) & 3)!=0) { - if(((port_61_data ^ val) & 1)!=0) Timer.TIMER_SetGate2((val&0x1)!=0); - PCSpeaker.PCSPEAKER_SetType(val & 3); - } - port_61_data = (short)val; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p61 = (port, val, iolen) -> { + if (((port_61_data ^ val) & 3)!=0) { + if(((port_61_data ^ val) & 1)!=0) Timer.TIMER_SetGate2((val&0x1)!=0); + PCSpeaker.PCSPEAKER_SetType(val & 3); } + port_61_data = (short)val; }; private static int aux_warning = 0; - private static IoHandler.IO_WriteHandler write_p64 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (val) { - case 0x20: /* read command byte */ - KEYBOARD_Add8042Response(( - ((keyb.cb_xlat?1:0) << 6) | ((keyb.auxactive?0:1) << 5) | - ((keyb.active?0:1) << 4) | ((keyb.cb_sys?1:0) << 2) | - ((keyb.cb_irq12?1:0) << 1) | (keyb.cb_irq1?1:0))); - break; - case 0x60: - keyb.command=KeyCommands.CMD_SETCOMMAND; - break; - case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97: - case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f: - /* TODO: If bit 0 == 0, trigger system reset */ - break; - case 0xa7: /* disable aux */ - if (keyb.enable_aux) { - keyb.auxactive=false; - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"AUX De-Activated"); - } - break; - case 0xa8: /* enable aux */ - if (keyb.enable_aux) { - keyb.auxactive=true; - if (keyb.used!=0 && !keyb.scheduled && !keyb.p60changed) { - keyb.scheduled=true; - Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); - } - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"AUX Activated"); - } - break; - case 0xa9: /* mouse interface test */ - KEYBOARD_Add8042Response(0x00); /* OK */ - break; - case 0xaa: /* Self test */ - keyb.active=false; /* on real h/w it also seems to disable the keyboard */ - keyb.status = keyb.status | KBD_STAT_SELFTEST; - KEYBOARD_Add8042Response(0x55); /* OK */ - break; - case 0xab: /* Keyboard interface test */ - keyb.active=false; /* on real h/w it also seems to disable the keyboard */ - KEYBOARD_Add8042Response(0); - break; - case 0xae: /* Activate keyboard */ - keyb.active=true; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p64 = (port, val, iolen) -> { + switch (val) { + case 0x20: /* read command byte */ + KEYBOARD_Add8042Response(( + ((keyb.cb_xlat?1:0) << 6) | ((keyb.auxactive?0:1) << 5) | + ((keyb.active?0:1) << 4) | ((keyb.cb_sys?1:0) << 2) | + ((keyb.cb_irq12?1:0) << 1) | (keyb.cb_irq1?1:0))); + break; + case 0x60: + keyb.command=KeyCommands.CMD_SETCOMMAND; + break; + case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97: + case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f: + /* TODO: If bit 0 == 0, trigger system reset */ + break; + case 0xa7: /* disable aux */ + if (keyb.enable_aux) { + keyb.auxactive=false; + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"AUX De-Activated"); + } + break; + case 0xa8: /* enable aux */ + if (keyb.enable_aux) { + keyb.auxactive=true; if (keyb.used!=0 && !keyb.scheduled && !keyb.p60changed) { keyb.scheduled=true; Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); } - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Activated"); - break; - case 0xad: /* Deactivate keyboard */ - keyb.active=false; - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"De-Activated"); - break; - case 0xc0: /* read input buffer */ - KEYBOARD_Add8042Response(0x40); - break; - case 0xd0: /* Outport on buffer */ - KEYBOARD_SetPort60((short)(Memory.MEM_A20_Enabled() ? 0x02 : 0)); - break; - case 0xd1: /* Write to outport */ - keyb.command=KeyCommands.CMD_SETOUTPORT; - break; - case 0xd2: /* write output register */ - keyb.command=KeyCommands.CMD_WRITEOUTPUT; - break; - case 0xd3: /* write AUX output */ - if (keyb.enable_aux) - keyb.command=KeyCommands.CMD_WRITEAUXOUT; - else if (aux_warning++ == 0) - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL, "Program is writing 8042 AUX. If you intend to use PS/2 mouse emulation you may consider adding aux=1 to your dosbox.conf"); - break; - case 0xd4: /* send byte to AUX */ - if (keyb.enable_aux) - keyb.command=KeyCommands.CMD_WRITEAUX; - break; - case 0xe0: /* read test port */ - KEYBOARD_Add8042Response(0x00); - break; - case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: - case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: - /* pulse output register */ - /* TODO: If bit 0 == 0, trigger system reset */ - if ((val & 1) == 0) { - System.out.println("RESET"); - throw new Dos_programs.RebootException(); - } - break; - default: - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_ERROR,"Port 64 write with val "+val); - break; + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"AUX Activated"); + } + break; + case 0xa9: /* mouse interface test */ + KEYBOARD_Add8042Response(0x00); /* OK */ + break; + case 0xaa: /* Self test */ + keyb.active=false; /* on real h/w it also seems to disable the keyboard */ + keyb.status = keyb.status | KBD_STAT_SELFTEST; + KEYBOARD_Add8042Response(0x55); /* OK */ + break; + case 0xab: /* Keyboard interface test */ + keyb.active=false; /* on real h/w it also seems to disable the keyboard */ + KEYBOARD_Add8042Response(0); + break; + case 0xae: /* Activate keyboard */ + keyb.active=true; + if (keyb.used!=0 && !keyb.scheduled && !keyb.p60changed) { + keyb.scheduled=true; + Pic.PIC_AddEvent(KEYBOARD_TransferBuffer,KEYDELAY); } + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Activated"); + break; + case 0xad: /* Deactivate keyboard */ + keyb.active=false; + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"De-Activated"); + break; + case 0xc0: /* read input buffer */ + KEYBOARD_Add8042Response(0x40); + break; + case 0xd0: /* Outport on buffer */ + KEYBOARD_SetPort60((short)(Memory.MEM_A20_Enabled() ? 0x02 : 0)); + break; + case 0xd1: /* Write to outport */ + keyb.command=KeyCommands.CMD_SETOUTPORT; + break; + case 0xd2: /* write output register */ + keyb.command=KeyCommands.CMD_WRITEOUTPUT; + break; + case 0xd3: /* write AUX output */ + if (keyb.enable_aux) + keyb.command=KeyCommands.CMD_WRITEAUXOUT; + else if (aux_warning++ == 0) + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL, "Program is writing 8042 AUX. If you intend to use PS/2 mouse emulation you may consider adding aux=1 to your dosbox.conf"); + break; + case 0xd4: /* send byte to AUX */ + if (keyb.enable_aux) + keyb.command=KeyCommands.CMD_WRITEAUX; + break; + case 0xe0: /* read test port */ + KEYBOARD_Add8042Response(0x00); + break; + case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: + case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: + /* pulse output register */ + /* TODO: If bit 0 == 0, trigger system reset */ + if ((val & 1) == 0) { + System.out.println("RESET"); + throw new Dos_programs.RebootException(); + } + break; + default: + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_ERROR,"Port 64 write with val "+val); + break; } }; - private static IoHandler.IO_ReadHandler read_p64 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return keyb.status | (keyb.p60changed? 0x1 : 0x0) | (keyb.auxchanged?0x20:0x00); - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p64 = (port, iolen) -> keyb.status | (keyb.p60changed? 0x1 : 0x0) | (keyb.auxchanged?0x20:0x00); static public void KEYBOARD_AddKey(int keytype,boolean pressed) { /*Bit8u*/short ret=0;boolean extend=false; @@ -953,69 +944,70 @@ static public void KEYBOARD_AddKey(int keytype,boolean pressed) { } } - static private Timer.TIMER_TickHandler KEYBOARD_TickHandler = new Timer.TIMER_TickHandler() { - public void call() { - if (keyb.repeat.wait!=0) { - keyb.repeat.wait--; - if (keyb.repeat.wait==0) KEYBOARD_AddKey(keyb.repeat.key,true); - } + static private final Timer.TIMER_TickHandler KEYBOARD_TickHandler = () -> { + if (keyb.repeat.wait!=0) { + keyb.repeat.wait--; + if (keyb.repeat.wait==0) KEYBOARD_AddKey(keyb.repeat.key,true); } }; - public static Section.SectionFunction KEYBOARD_ShutDown = new Section.SectionFunction() { - public void call(Section section) { - IoHandler.IO_FreeWriteHandler(0x60,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x60,IoHandler.IO_MB); - IoHandler.IO_FreeWriteHandler(0x61,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x61,IoHandler.IO_MB); - IoHandler.IO_FreeWriteHandler(0x64,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x64,IoHandler.IO_MB); - Timer.TIMER_DelTickHandler(KEYBOARD_TickHandler); - KEYBOARD_ClrBuffer(); - keyb = null; - } + public static final Section.SectionFunction KEYBOARD_ShutDown = section -> { + IoHandler.IO_FreeWriteHandler(0x60,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x60,IoHandler.IO_MB); + IoHandler.IO_FreeWriteHandler(0x61,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x61,IoHandler.IO_MB); + IoHandler.IO_FreeWriteHandler(0x64,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x64,IoHandler.IO_MB); + Timer.TIMER_DelTickHandler(KEYBOARD_TickHandler); + KEYBOARD_ClrBuffer(); + keyb = null; }; - public static Section.SectionFunction KEYBOARD_Init = new Section.SectionFunction() { - public void call(Section sec) { - keyb = new Keyb(); - Section_prop section=(Section_prop)(sec); - if (keyb.enable_aux=section.Get_bool("aux")) { - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Keyboard AUX emulation enabled"); - } - keyb.ps2mouse.int33_taken = false; - - String sbtype=section.Get_string("auxdevice"); - keyb.ps2mouse.type = MOUSE_NONE; - if (sbtype != null) { - if (sbtype.equals("2button")) - keyb.ps2mouse.type=MOUSE_2BUTTON; - else if (sbtype.equals("3button")) - keyb.ps2mouse.type=MOUSE_3BUTTON; - else if (sbtype.equals("intellimouse")) - keyb.ps2mouse.type=MOUSE_INTELLIMOUSE; - else if (sbtype.equals("intellimouse45")) - keyb.ps2mouse.type=MOUSE_INTELLIMOUSE45; - else if (sbtype.equals("none")) - keyb.ps2mouse.type=MOUSE_NONE; - else { - keyb.ps2mouse.type=MOUSE_INTELLIMOUSE; - Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_ERROR, "Assuming PS/2 intellimouse, I don't know what '"+sbtype+"' is"); - } + public static final Section.SectionFunction KEYBOARD_Init = sec -> { + keyb = new Keyb(); + Section_prop section=(Section_prop)(sec); + if (keyb.enable_aux == section.Get_bool("aux")) { + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_NORMAL,"Keyboard AUX emulation enabled"); + } + keyb.ps2mouse.int33_taken = false; + + String sbtype=section.Get_string("auxdevice"); + keyb.ps2mouse.type = MOUSE_NONE; + if (sbtype != null) { + switch (sbtype) { + case "2button": + keyb.ps2mouse.type = MOUSE_2BUTTON; + break; + case "3button": + keyb.ps2mouse.type = MOUSE_3BUTTON; + break; + case "intellimouse": + keyb.ps2mouse.type = MOUSE_INTELLIMOUSE; + break; + case "intellimouse45": + keyb.ps2mouse.type = MOUSE_INTELLIMOUSE45; + break; + case "none": + keyb.ps2mouse.type = MOUSE_NONE; + break; + default: + keyb.ps2mouse.type = MOUSE_INTELLIMOUSE; + Log.log(LogTypes.LOG_KEYBOARD, LogSeverities.LOG_ERROR, "Assuming PS/2 intellimouse, I don't know what '" + sbtype + "' is"); + break; } - IoHandler.IO_RegisterWriteHandler(0x60,write_p60,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x60,read_p60,IoHandler.IO_MB); - IoHandler.IO_RegisterWriteHandler(0x61,write_p61,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x61,read_p61,IoHandler.IO_MB); - IoHandler.IO_RegisterWriteHandler(0x64,write_p64,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x64,read_p64,IoHandler.IO_MB); - Timer.TIMER_AddTickHandler(KEYBOARD_TickHandler); - write_p61.call(0,0,0); - KEYBOARD_Reset(); - AUX_Reset(); - if (section != null) - section.AddDestroyFunction(KEYBOARD_ShutDown,false); } + IoHandler.IO_RegisterWriteHandler(0x60,write_p60,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x60,read_p60,IoHandler.IO_MB); + IoHandler.IO_RegisterWriteHandler(0x61,write_p61,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x61,read_p61,IoHandler.IO_MB); + IoHandler.IO_RegisterWriteHandler(0x64,write_p64,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x64,read_p64,IoHandler.IO_MB); + Timer.TIMER_AddTickHandler(KEYBOARD_TickHandler); + write_p61.call(0,0,0); + KEYBOARD_Reset(); + AUX_Reset(); + if (section != null) + section.AddDestroyFunction(KEYBOARD_ShutDown,false); }; static private void AUX_Reset() { diff --git a/jdosbox/src/main/java/jdos/hardware/MPU401.java b/jdosbox/src/main/java/jdos/hardware/MPU401.java index c9a56273..ad217084 100644 --- a/jdosbox/src/main/java/jdos/hardware/MPU401.java +++ b/jdosbox/src/main/java/jdos/hardware/MPU401.java @@ -7,7 +7,6 @@ import jdos.types.LogTypes; import jdos.types.LogSeverities; import jdos.gui.Midi; -import jdos.cpu.CPU; public class MPU401 extends Module_base { static final private int MPU401_VERSION = 0x15; @@ -45,11 +44,11 @@ public MPU() { public boolean intelligent; public int mode; /*Bitu*/int irq; - /*Bit8u*/short[] queue = new short[MPU401_QUEUE]; + /*Bit8u*/final short[] queue = new short[MPU401_QUEUE]; /*Bitu*/int queue_pos,queue_used; public static class track { /*Bits*/int counter; - /*Bit8u*/short[] value = new short[8]; + /*Bit8u*/final short[] value = new short[8]; short sys_val; /*Bit8u*/short vlength,length; /*MpuDataType*/ int type; @@ -105,13 +104,12 @@ private static void ClrQueue() { mpu.queue_pos=0; } - private static final IoHandler.IO_ReadHandler MPU401_ReadStatus = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - /*Bit8u*/short ret=0x3f; /* Bits 6 and 7 clear */ - if (mpu.state.cmd_pending!=0) ret|=0x40; - if (mpu.queue_used==0) ret|=0x80; - return ret; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler MPU401_ReadStatus = (port, iolen) -> { + /*Bit8u*/short ret=0x3f; /* Bits 6 and 7 clear */ + if (mpu.state.cmd_pending!=0) ret|=0x40; + if (mpu.queue_used==0) ret|=0x80; + return ret; }; private static final IoHandler.IO_WriteHandler MPU401_WriteCommand = new IoHandler.IO_WriteHandler() { @@ -325,7 +323,8 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { case 0xef: /* Set 9-16 MIDI channel mask */ mpu.state.command_byte=0; mpu.state.midi_mask&=0x00ff; - mpu.state.midi_mask|=((/*Bit16u*/int)val)<<8; + /*Bit16u*/ + mpu.state.midi_mask|= val <<8; return; //case 0xe2: /* Set graduation for relative tempo */ //case 0xe4: /* Set metronome */ @@ -394,8 +393,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { MPU401_EOIHandlerDispatch(); return; } - if (val==0) mpu.state.send_now=true; - else mpu.state.send_now=false; + mpu.state.send_now= val == 0; mpu.condbuf.counter=val; break; case 1: /* Command byte #1 */ @@ -424,8 +422,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { MPU401_EOIHandlerDispatch(); return; } - if (val==0) mpu.state.send_now=true; - else mpu.state.send_now=false; + mpu.state.send_now= val == 0; mpu.playbuf[mpu.state.channel].counter=val; break; case 1: /* MIDI */ @@ -476,7 +473,7 @@ private static void MPU401_IntelligentOut(/*Bit8u*/int chan) { val=mpu.playbuf[chan].sys_val; if (val==0xfc) { Midi.MIDI_RawOutByte(val); - mpu.state.amask&=~(1< { + mpu.state.eoi_scheduled=false; + if (mpu.state.send_now) { + mpu.state.send_now=false; + if (mpu.state.cond_req) UpdateConductor(); + else UpdateTrack(mpu.state.channel); } + mpu.state.irq_pending=false; + if (!mpu.state.playing || mpu.state.req_mask==0) return; + /*Bitu*/int i=0; + do { + if ((mpu.state.req_mask & (1< { + mpu.state.reset=false; + if (mpu.state.cmd_pending!=0) { + MPU401_WriteCommand.call(0x331,mpu.state.cmd_pending-1,1); + mpu.state.cmd_pending=0; } }; @@ -617,8 +612,8 @@ private static void MPU401_Reset() { for (/*Bitu*/int i=0;i<8;i++) {mpu.playbuf[i].type=T_OVERFLOW;mpu.playbuf[i].counter=0;} } - private IoHandler.IO_ReadHandleObject[] ReadHandler=new IoHandler.IO_ReadHandleObject[2]; - private IoHandler.IO_WriteHandleObject[] WriteHandler=new IoHandler.IO_WriteHandleObject[2]; + private final IoHandler.IO_ReadHandleObject[] ReadHandler=new IoHandler.IO_ReadHandleObject[2]; + private final IoHandler.IO_WriteHandleObject[] WriteHandler=new IoHandler.IO_WriteHandleObject[2]; private boolean installed; /*as it can fail to install by 2 ways (config and no midi)*/ public MPU401(Section configuration) { @@ -629,7 +624,7 @@ public MPU401(Section configuration) { if(s_mpu.equalsIgnoreCase("none")) return; if(s_mpu.equalsIgnoreCase("off")) return; if(s_mpu.equalsIgnoreCase("false")) return; - if (!Midi.MIDI_Available()) return; + if (Midi.MIDI_Available()) return; /*Enabled and there is a Midi */ installed = true; @@ -647,10 +642,8 @@ public MPU401(Section configuration) { mpu.queue_used=0; mpu.queue_pos=0; mpu.mode=M_UART; - mpu.irq=9; /* Princess Maker 2 wants it on irq 9 */ - - mpu.intelligent = true; //Default is on - if(s_mpu.equalsIgnoreCase("uart")) mpu.intelligent = false; + mpu.irq=9; /* Princess Maker 2 wants it on irq 9 *///Default is on + mpu.intelligent = !s_mpu.equalsIgnoreCase("uart"); if (!mpu.intelligent) return; /*Set IRQ and unmask it(for timequest/princess maker 2) */ Pic.PIC_SetIRQMask(mpu.irq,false); @@ -659,7 +652,7 @@ public MPU401(Section configuration) { static private MPU401 test; - public static Section.SectionFunction MPU401_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction MPU401_Destroy = new Section.SectionFunction() { public void call(Section section) { if(!test.installed) return; Section_prop sec_prop=(Section_prop)section; @@ -667,7 +660,7 @@ public void call(Section section) { Pic.PIC_SetIRQMask(mpu.irq,true); } }; - public static Section.SectionFunction MPU401_Init = new Section.SectionFunction() { + public static final Section.SectionFunction MPU401_Init = new Section.SectionFunction() { public void call(Section section) { test = new MPU401(section); section.AddDestroyFunction(MPU401_Destroy,true); diff --git a/jdosbox/src/main/java/jdos/hardware/Memory.java b/jdosbox/src/main/java/jdos/hardware/Memory.java index ea56cad1..e988c35c 100644 --- a/jdosbox/src/main/java/jdos/hardware/Memory.java +++ b/jdosbox/src/main/java/jdos/hardware/Memory.java @@ -1,7 +1,6 @@ package jdos.hardware; import jdos.Dosbox; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.cpu.Paging; import jdos.hardware.pci.PCI_PageHandler; @@ -26,7 +25,7 @@ public class Memory extends Module_base { //private static final int MEMBASE = 1; // can't use zero static private int highwaterMark; - + public static int allocate(int size) { int result = highwaterMark; highwaterMark+=size; @@ -98,11 +97,13 @@ public static void real_writed(/*Bit16u*/int seg,/*Bit16u*/int off,/*Bit32u*/int } public static /*Bit16u*/int RealSeg(/*RealPt*/int pt) { - return (/*Bit16u*/int)((pt>>>16) & 0xFFFF); + /*Bit16u*/ + return (pt>>>16) & 0xFFFF; } public static /*Bit16u*/int RealOff(/*RealPt*/int pt) { - return (/*Bit16u*/int)(pt & 0xffff); + /*Bit16u*/ + return pt & 0xffff; } public static /*PhysPt*/int Real2Phys(/*RealPt*/int pt) { @@ -166,8 +167,8 @@ public static class ROM { /*Bitu*/int pages; Paging.PageHandler handler; } - public Vector pci = new Vector(); - public Vector roms = new Vector(); + public Vector pci = new Vector<>(); + public Vector roms = new Vector<>(); public static class A20 { boolean enabled; /*Bit8u*/short controlport; @@ -185,11 +186,11 @@ public IllegalPageHandler() { static /*Bits*/int r_lcount=0; public /*Bitu*/int readb(/*PhysPt*/int addr) { if (Config.C_DEBUG) - Log.log_msg(StringHelper.sprintf("Illegal read from %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); + System.out.println(StringHelper.sprintf("Illegal read from %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); else { if (r_lcount<1000) { r_lcount++; - Log.log_msg(StringHelper.sprintf("Illegal read from %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); + System.out.println(StringHelper.sprintf("Illegal read from %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); } } return 0; @@ -197,12 +198,12 @@ public IllegalPageHandler() { static /*Bits*/int w_lcount=0; public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { if (Config.C_DEBUG) - Log.log_msg(StringHelper.sprintf("Illegal write to %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); + System.out.println(StringHelper.sprintf("Illegal write to %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); else { if (w_lcount<1000) { w_lcount++; - Log.log_msg(StringHelper.sprintf("Illegal write to %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); + System.out.println(StringHelper.sprintf("Illegal write to %x, CS:IP %8x:%8x",new Object[] {new Integer(addr), new Integer(CPU_Regs.reg_csVal.dword),new Integer(CPU_Regs.reg_eip)})); } } } @@ -237,9 +238,9 @@ public void writed(/*PhysPt*/int addr,/*Bitu*/int val){ - private static IllegalPageHandler illegal_page_handler = new IllegalPageHandler(); - private static RAMPageHandler ram_page_handler = new RAMPageHandler(); - private static ROMPageHandler rom_page_handler = new ROMPageHandler(); + private static final IllegalPageHandler illegal_page_handler = new IllegalPageHandler(); + private static final RAMPageHandler ram_page_handler = new RAMPageHandler(); + private static final ROMPageHandler rom_page_handler = new ROMPageHandler(); private static class ROMDataPageHandler extends Paging.PageHandler { byte[] data; @@ -297,7 +298,7 @@ static public Paging.PageHandler MEM_GetPageHandler(/*Bitu*/int phys_page) { } else if ((phys_page>=memory.lfb.start_page) && (phys_page=memory.lfb.start_page+0x01000000/4096) && - (phys_page= 0xE0000 && phys_page < 0xE0000 + VBE.pageCount) { return VBE.handler; @@ -444,7 +445,7 @@ static public void MEM_BlockCopy(/*PhysPt*/int dest,/*PhysPt*/int src,/*Bitu*/in } static public String MEM_StrCopy(/*PhysPt*/int pt,/*Bitu*/int size) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); for (int i=0;i>>32)); } - static private IoHandler.IO_WriteHandler write_p92 = new IoHandler.IO_WriteHandler() { + static private final IoHandler.IO_WriteHandler write_p92 = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { // Bit 0 = system reset (switch back to real mode) if ((val&1)!=0) Log.exit("XMS: CPU reset via port 0x92 not supported."); @@ -750,7 +755,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { } }; - static private IoHandler.IO_ReadHandler read_p92 = new IoHandler.IO_ReadHandler() { + static private final IoHandler.IO_ReadHandler read_p92 = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { return memory.a20.controlport | (memory.a20.enabled ? 0x02 : 0); } @@ -770,78 +775,78 @@ static public void PreparePCJRCartRom() { } } - private IoHandler.IO_ReadHandleObject ReadHandler = new IoHandler.IO_ReadHandleObject(); - private IoHandler.IO_WriteHandleObject WriteHandler = new IoHandler.IO_WriteHandleObject(); + private final IoHandler.IO_ReadHandleObject ReadHandler = new IoHandler.IO_ReadHandleObject(); + private final IoHandler.IO_WriteHandleObject WriteHandler = new IoHandler.IO_WriteHandleObject(); public static int videoCacheSize = 0; public Memory(Section configuration) { super(configuration); /*Bitu*/int i; - Section_prop section=(Section_prop)configuration; + Section_prop section=(Section_prop)configuration; - /* Setup the Physical Page Links */ - /*Bitu*/int memsize=section.Get_int("memsize"); + /* Setup the Physical Page Links */ + /*Bitu*/int memsize=section.Get_int("memsize"); - if (memsize < 1) memsize = 1; + if (memsize < 1) memsize = 1; - if (memsize > MAX_MEMORY) { - Log.log_msg("Maximum memory size is "+(MAX_MEMORY - 1)+" MB"); - memsize = MAX_MEMORY; - } - if (memsize > SAFE_MEMORY-1) { - Log.log_msg("Memory sizes above "+(SAFE_MEMORY - 1)+" MB are NOT recommended."); - Log.log_msg("Stick with the default values unless you are absolutely certain."); - } - MEM_SIZE = memsize; - memory = new MemoryBlock(); - try { - RAM.free(); - Runtime.getRuntime().gc(); - highwaterMark = memsize*1024*1024; - int videosize = section.Get_int("vmemsize"); - videoCacheSize = section.Get_int("vmemcachesize"); - if (videosize==0) videosize=2; - if (videosize<512) - videosize*=1024*1024; - else - videosize*=1024; - - videoCacheSize*=1024; - if (videoCacheSize==0) videoCacheSize = videosize*2; - videosize+=videoCacheSize; - System.out.println("About to allocate memory "+String.valueOf((highwaterMark+EXTRA_MEM+VGA_draw.TEMPLINE_SIZE+videosize)/1024)+"kb: "+String.valueOf(Runtime.getRuntime().freeMemory()/1024)+"kb free"); - RAM.alloc(highwaterMark + EXTRA_MEM + videosize + VGA_draw.TEMPLINE_SIZE + 3); - } catch (java.lang.OutOfMemoryError e) { - Log.exit("Can't allocate main memory of "+memsize+" MB"); - } - memory.pages = (memsize*1024*1024)/4096; - /* Allocate the data for the different page information blocks */ - memory.phandlers=new Paging.PageHandler[memory.pages]; - memory.mhandles=new /*MemHandle*/int[memory.pages]; - for (i = 0;i < memory.pages;i++) { - memory.phandlers[i] = ram_page_handler; - memory.mhandles[i] = 0; //Set to 0 for memory allocation - } - /* Setup rom at 0xc0000-0xc8000 */ - for (i=0xc0;i<0xc8;i++) { - memory.phandlers[i] = rom_page_handler; - } - /* Setup rom at 0xf0000-0x100000 */ - for (i=0xf0;i<0x100;i++) { + if (memsize > MAX_MEMORY) { + System.out.println("Maximum memory size is "+(MAX_MEMORY - 1)+" MB"); + memsize = MAX_MEMORY; + } + if (memsize > SAFE_MEMORY-1) { + System.out.println("Memory sizes above "+(SAFE_MEMORY - 1)+" MB are NOT recommended."); + System.out.println("Stick with the default values unless you are absolutely certain."); + } + MEM_SIZE = memsize; + memory = new MemoryBlock(); + try { + RAM.free(); + Runtime.getRuntime().gc(); + highwaterMark = memsize*1024*1024; + int videosize = section.Get_int("vmemsize"); + videoCacheSize = section.Get_int("vmemcachesize"); + if (videosize==0) videosize=2; + if (videosize<512) + videosize*=1024*1024; + else + videosize*=1024; + + videoCacheSize*=1024; + if (videoCacheSize==0) videoCacheSize = videosize*2; + videosize+=videoCacheSize; + System.out.println("About to allocate memory "+ (highwaterMark + EXTRA_MEM + VGA_draw.TEMPLINE_SIZE + videosize) / 1024 +"kb: "+ Runtime.getRuntime().freeMemory() / 1024 +"kb free"); + RAM.alloc(highwaterMark + EXTRA_MEM + videosize + VGA_draw.TEMPLINE_SIZE + 3); + } catch (java.lang.OutOfMemoryError e) { + Log.exit("Can't allocate main memory of "+memsize+" MB"); + } + memory.pages = (memsize*1024*1024)/4096; + /* Allocate the data for the different page information blocks */ + memory.phandlers=new Paging.PageHandler[memory.pages]; + memory.mhandles=new /*MemHandle*/int[memory.pages]; + for (i = 0;i < memory.pages;i++) { + memory.phandlers[i] = ram_page_handler; + memory.mhandles[i] = 0; //Set to 0 for memory allocation + } + /* Setup rom at 0xc0000-0xc8000 */ + for (i=0xc0;i<0xc8;i++) { + memory.phandlers[i] = rom_page_handler; + } + /* Setup rom at 0xf0000-0x100000 */ + for (i=0xf0;i<0x100;i++) { + memory.phandlers[i] = rom_page_handler; + } + if (Dosbox.machine== MachineType.MCH_PCJR) { + /* Setup cartridge rom at 0xe0000-0xf0000 */ + for (i=0xe0;i<0xf0;i++) { memory.phandlers[i] = rom_page_handler; } - if (Dosbox.machine== MachineType.MCH_PCJR) { - /* Setup cartridge rom at 0xe0000-0xf0000 */ - for (i=0xe0;i<0xf0;i++) { - memory.phandlers[i] = rom_page_handler; - } - } - /* Reset some links */ - memory.links.used = 0; - // A20 Line - PS/2 system control port A - WriteHandler.Install(0x92,write_p92,IoHandler.IO_MB); - ReadHandler.Install(0x92,read_p92,IoHandler.IO_MB); - MEM_A20_Enable(false); + } + /* Reset some links */ + memory.links.used = 0; + // A20 Line - PS/2 system control port A + WriteHandler.Install(0x92,write_p92,IoHandler.IO_MB); + ReadHandler.Install(0x92,read_p92,IoHandler.IO_MB); + MEM_A20_Enable(false); } static public void clear() { diff --git a/jdosbox/src/main/java/jdos/hardware/Mixer.java b/jdosbox/src/main/java/jdos/hardware/Mixer.java index 3615645d..618a2440 100644 --- a/jdosbox/src/main/java/jdos/hardware/Mixer.java +++ b/jdosbox/src/main/java/jdos/hardware/Mixer.java @@ -10,12 +10,12 @@ import jdos.util.ShortPtr; public class Mixer extends Program { - static public interface MIXER_MixHandler { - public void call(/*Bit8u*/short[] sampdate, /*Bit32u*/int len); + public interface MIXER_MixHandler { + void call(/*Bit8u*/short[] sampdate, /*Bit32u*/int len); } - static public interface MIXER_Handler { - public void call(/*Bitu*/int len); + public interface MIXER_Handler { + void call(/*Bitu*/int len); } static private final class BlahModes { @@ -53,7 +53,7 @@ public void UpdateVolume() { volmul[1]=(/*Bits*/int)((1 << MIXER_VOLSHIFT)*scale*volmain[1].value*mixer.mastervol[1].value); } public void SetFreq(/*Bitu*/int _freq) { - freq_add=(int)((_freq<=len) return; if (signeddata) { if (stereo) { - diff[0]=data[pos*2+0]-last[0]; + diff[0]=data[pos * 2]-last[0]; diff[1]=data[pos*2+1]-last[1]; } else { diff[0]=data[pos]-last[0]; } } else { if (stereo) { - diff[0]=data[pos*2+0]-32768-last[0]; + diff[0]=data[pos * 2]-32768-last[0]; diff[1]=data[pos*2+1]-32768-last[1]; } else { diff[0]=data[pos]-32768-last[0]; @@ -233,14 +233,14 @@ public void AddSamples(/*Bitu*/int len, int[] data, boolean stereo,boolean signe if (pos>=len) return; if (signeddata) { if (stereo) { - diff[0]=data[pos*2+0]-last[0]; + diff[0]=data[pos * 2]-last[0]; diff[1]=data[pos*2+1]-last[1]; } else { diff[0]=data[pos]-last[0]; } } else { if (stereo) { - diff[0]=data[pos*2+0]-32768-last[0]; + diff[0]=data[pos * 2]-32768-last[0]; diff[1]=data[pos*2+1]-32768-last[1]; } else { diff[0]=data[pos]-32768-last[0]; @@ -279,14 +279,14 @@ public void AddSamples(/*Bitu*/int len, byte[] data, boolean stereo,boolean sign if (pos>=len) return; if (!signeddata) { if (stereo) { - diff[0]=(((/*Bit8s*/byte)(data[pos*2+0] ^ 0x80)) << 8)-last[0]; + diff[0]=(((/*Bit8s*/byte)(data[pos * 2] ^ 0x80)) << 8)-last[0]; diff[1]=(((/*Bit8s*/byte)(data[pos*2+1] ^ 0x80)) << 8)-last[1]; } else { diff[0]=(((/*Bit8s*/byte)(data[pos] ^ 0x80)) << 8)-last[0]; } } else { if (stereo) { - diff[0]=(data[pos*2+0] << 8)-last[0]; + diff[0]=(data[pos * 2] << 8)-last[0]; diff[1]=(data[pos*2+1] << 8)-last[1]; } else { diff[0]=(data[pos] << 8)-last[0]; @@ -356,7 +356,7 @@ public void AddSamples_s32(/*Bitu*/int len, /*Bit32s*/int[] data) { //Strech block up into needed data public void AddStretched(/*Bitu*/int len, /*Bit16s*/short[] data) { if (done>=needed) { - Log.log_msg("Can't add, buffer full"); + System.out.println("Can't add, buffer full"); return; } /*Bitu*/int outlen=needed-done;/*Bits*/int diff; @@ -401,12 +401,12 @@ public void Enable(boolean _yesno) { } } public MIXER_Handler handler; - public FloatRef[] volmain = new FloatRef[2]; + public final FloatRef[] volmain = new FloatRef[2]; public float scale; - public /*Bit32s*/int[] volmul = new int[2]; + public final /*Bit32s*/int[] volmul = new int[2]; public /*Bitu*/int freq_add,freq_index; public /*Bitu*/int done,needed; - public /*Bits*/int[] last = new int[2]; + public final /*Bits*/int[] last = new int[2]; public String name; public boolean enabled; public MixerChannel next; @@ -464,11 +464,11 @@ public _Mixer() { mastervol[i] = new FloatRef(); } } - /*Bit32s*/int[][] work=new int[MIXER_BUFSIZE][2]; + /*Bit32s*/final int[][] work=new int[MIXER_BUFSIZE][2]; /*Bitu*/int pos,done; /*Bitu*/int needed, min_needed, max_needed; /*Bit32u*/long tick_add,tick_remain; - FloatRef[] mastervol=new FloatRef[2]; + final FloatRef[] mastervol=new FloatRef[2]; MixerChannel channels; boolean nosound; /*Bit32u*/int freq; @@ -476,9 +476,9 @@ public _Mixer() { } static private _Mixer mixer; - static public /*Bit8u*/byte[] MixTemp8=new byte[MIXER_BUFSIZE]; - static public short[] MixTemp16=new short[MIXER_BUFSIZE>>1]; - static public int[] MixTemp32=new int[MIXER_BUFSIZE>>2]; + static public final /*Bit8u*/byte[] MixTemp8=new byte[MIXER_BUFSIZE]; + static public final short[] MixTemp16=new short[MIXER_BUFSIZE>>1]; + static public final int[] MixTemp32=new int[MIXER_BUFSIZE>>2]; public static MixerChannel MIXER_AddChannel(MIXER_Handler handler,/*Bitu*/int freq,String name) { MixerChannel chan=new MixerChannel(); @@ -546,22 +546,22 @@ static private void MIXER_MixData(/*Bitu*/int needed) { } //Reset the the tick_add for constant speed if( Mixer_irq_important() ) - mixer.tick_add = ((mixer.freq) << MIXER_SHIFT)/1000; + mixer.tick_add = ((long) (mixer.freq) << MIXER_SHIFT)/1000; mixer.done = needed; } - static private Timer.TIMER_TickHandler MIXER_Mix = new Timer.TIMER_TickHandler() { + static private final Timer.TIMER_TickHandler MIXER_Mix = new Timer.TIMER_TickHandler() { public void call() { synchronized (audioMutex) { MIXER_MixData(mixer.needed); mixer.tick_remain+=mixer.tick_add; - mixer.needed+=(mixer.tick_remain>>MIXER_SHIFT); + mixer.needed+= (int) (mixer.tick_remain>>MIXER_SHIFT); mixer.tick_remain&=MIXER_REMAIN; } } }; - static private Timer.TIMER_TickHandler MIXER_Mix_NoSound = new Timer.TIMER_TickHandler() { + static private final Timer.TIMER_TickHandler MIXER_Mix_NoSound = new Timer.TIMER_TickHandler() { public void call() { MIXER_MixData(mixer.needed); /* Clear piece we've just generated */ @@ -584,7 +584,8 @@ public void call() { }; static boolean MIXER_CallBack(int userdata, byte[] stream, int len) { - /*Bitu*/int need=(/*Bitu*/int)len/MIXER_SSIZE; + /*Bitu*//*Bitu*/ + int need= len /MIXER_SSIZE; /*Bit16s*/ShortPtr output=new ShortPtr(stream,0); /*Bitu*/int reduce; /*Bitu*/int pos, index, index_add; @@ -596,14 +597,14 @@ static boolean MIXER_CallBack(int userdata, byte[] stream, int len) { return false; reduce = mixer.done; index_add = (reduce << MIXER_SHIFT) / need; - mixer.tick_add = ((mixer.freq+mixer.min_needed) << MIXER_SHIFT)/1000; + mixer.tick_add = ((long) (mixer.freq + mixer.min_needed) << MIXER_SHIFT)/1000; } else if (mixer.done < mixer.max_needed) { /*Bitu*/int left = mixer.done - need; if (left < mixer.min_needed) { if( !Mixer_irq_important() ) { /*Bitu*/int needed = mixer.needed - need; - /*Bitu*/int diff = (mixer.min_needed>needed?mixer.min_needed:needed) - left; - mixer.tick_add = ((mixer.freq+(diff*3)) << MIXER_SHIFT)/1000; + /*Bitu*/int diff = (Math.max(mixer.min_needed, needed)) - left; + mixer.tick_add = ((mixer.freq+(diff* 3L)) << MIXER_SHIFT)/1000; left = 0; //No stretching as we compensate with the tick_add value } else { left = (mixer.min_needed - left); @@ -626,11 +627,11 @@ static boolean MIXER_CallBack(int userdata, byte[] stream, int len) { /*Bitu*/int diff = left - mixer.min_needed; if(diff > (mixer.min_needed<<1)) diff = mixer.min_needed<<1; if(diff > (mixer.min_needed>>1)) - mixer.tick_add = ((mixer.freq-(diff/5)) << MIXER_SHIFT)/1000; + mixer.tick_add = ((long) (mixer.freq - (diff / 5)) << MIXER_SHIFT)/1000; else if (diff > (mixer.min_needed>>4)) - mixer.tick_add = ((mixer.freq-(diff>>3)) << MIXER_SHIFT)/1000; + mixer.tick_add = ((long) (mixer.freq - (diff >> 3)) << MIXER_SHIFT)/1000; else - mixer.tick_add = (mixer.freq<< MIXER_SHIFT)/1000; + mixer.tick_add = ((long) mixer.freq << MIXER_SHIFT)/1000; } } else { /* There is way too much data in the buffer */ @@ -641,7 +642,7 @@ else if (diff > (mixer.min_needed>>4)) index_add = mixer.done - 2*mixer.min_needed; index_add = (index_add << MIXER_SHIFT) / need; reduce = mixer.done - 2* mixer.min_needed; - mixer.tick_add = ((mixer.freq-(mixer.min_needed/5)) << MIXER_SHIFT)/1000; + mixer.tick_add = ((long) (mixer.freq - (mixer.min_needed / 5)) << MIXER_SHIFT)/1000; } /* Reduce done count in all channels */ for (MixerChannel chan=mixer.channels;chan!=null;chan=chan.next) { @@ -651,7 +652,7 @@ else if (diff > (mixer.min_needed>>4)) // Reset mixer.tick_add when irqs are important if( Mixer_irq_important() ) - mixer.tick_add=(mixer.freq<< MIXER_SHIFT)/1000; + mixer.tick_add=((long) mixer.freq << MIXER_SHIFT)/1000; mixer.done -= reduce; mixer.needed -= reduce; @@ -693,9 +694,9 @@ public void MakeVolume(String scan, FloatRef vol0,FloatRef vol1) { /*Bitu*/int w=0; boolean db=(scan.toUpperCase().charAt(0)=='D'); if (db) scan=scan.substring(1); - while (scan.length()>0) { + while (!scan.isEmpty()) { if (scan.charAt(0)==':') { - scan=scan.substring(0);w=1; + w=1; } String before=scan; float val=0.0f; @@ -710,7 +711,7 @@ public void MakeVolume(String scan, FloatRef vol0,FloatRef vol1) { } if (!db) val/=100; - else val=(float)Math.pow(10.0f,(float)val/20.0f); + else val=(float)Math.pow(10.0f, val /20.0f); if (val<0) val=1.0f; if (w==0) { vol0.value=val; @@ -738,7 +739,6 @@ public void Run() { chan=chan.next; } if (cmd.FindExist("/NOSHOW")) return; - chan=mixer.channels; WriteOut("Channel Main Main(dB)\n"); ShowVolume("MASTER",mixer.mastervol[0],mixer.mastervol[1]); for (chan=mixer.channels;chan!=null;chan=chan.next) @@ -747,8 +747,8 @@ public void Run() { private void ShowVolume(String name,FloatRef vol0,FloatRef vol1) { WriteOut("%-8s %3.0f:%-3.0f %+3.2f:%-+3.2f \n",new Object[] {name, - new Float(vol0.value*100),new Float(vol1.value*100), - new Float(20*Math.log(vol0.value)/Math.log(10.0f)),new Float(20*Math.log(vol1.value)/Math.log(10.0f))} + vol0.value * 100, vol1.value * 100, + (float) (20 * Math.log(vol0.value) / Math.log(10.0f)), (float) (20 * Math.log(vol1.value) / Math.log(10.0f))} ); } @@ -756,13 +756,9 @@ private void ListMidi(){ AudioLayer.listMidi(this); } - private static PROGRAMS_Main MIXER_ProgramStart = new PROGRAMS_Main() { - public Program call() { - return new Mixer(); - } - }; + private static final PROGRAMS_Main MIXER_ProgramStart = () -> new Mixer(); - public static Section.SectionFunction MIXER_Stop = new Section.SectionFunction() { + public static final Section.SectionFunction MIXER_Stop = new Section.SectionFunction() { public void call(Section section) { AudioLayer.stop(); mixer = null; @@ -772,7 +768,7 @@ public void call(Section section) { final static public Object audioMutex = new Object(); - public static Section.SectionFunction MIXER_Init = new Section.SectionFunction() { + public static final Section.SectionFunction MIXER_Init = new Section.SectionFunction() { public void call(Section sec) { mixer = new _Mixer(); sec.AddDestroyFunction(MIXER_Stop); @@ -804,27 +800,27 @@ public void call(Section sec) { mixer.tick_remain=0; mixer.min_needed=section.Get_int("prebuffer"); if (mixer.min_needed>100) mixer.min_needed=100; - mixer.min_needed=(int)(mixer.freq*mixer.min_needed)/1000; - mixer.max_needed=(int)mixer.blocksize * 2 + 2*mixer.min_needed; + mixer.min_needed= (mixer.freq*mixer.min_needed) /1000; + mixer.max_needed= mixer.blocksize * 2 + 2*mixer.min_needed; mixer.needed=mixer.min_needed+1; if (mixer.nosound) { - Log.log_msg("MIXER:No Sound Mode Selected."); - mixer.tick_add=((mixer.freq) << MIXER_SHIFT)/1000; + System.out.println("MIXER:No Sound Mode Selected."); + mixer.tick_add=((long) (mixer.freq) << MIXER_SHIFT)/1000; Timer.TIMER_AddTickHandler(MIXER_Mix_NoSound); } else if (!AudioLayer.open(section.Get_int("javabuffer"), mixer.freq)) { // else if (SDL_OpenAudio(&spec, &obtained) <0 ) { // mixer.nosound = true; -// Log.log_msg("MIXER:Can't open audio: %s , running in nosound mode.",SDL_GetError()); +// System.out.println("MIXER:Can't open audio: %s , running in nosound mode.",SDL_GetError()); // mixer.tick_add=((mixer.freq) << MIXER_SHIFT)/1000; // Timer.TIMER_AddTickHandler(MIXER_Mix_NoSound); } else { // if((mixer.freq != obtained.freq) || (mixer.blocksize != obtained.samples)) -// Log.log_msg("MIXER:Got different values from SDL: freq %d, blocksize %d",obtained.freq,obtained.samples); +// System.out.println("MIXER:Got different values from SDL: freq %d, blocksize %d",obtained.freq,obtained.samples); // mixer.freq=obtained.freq; // mixer.blocksize=obtained.samples; - mixer.tick_add=(mixer.freq << MIXER_SHIFT)/1000; + mixer.tick_add=((long) mixer.freq << MIXER_SHIFT)/1000; Timer.TIMER_AddTickHandler(MIXER_Mix); // SDL_PauseAudio(0); } diff --git a/jdosbox/src/main/java/jdos/hardware/NE2000.java b/jdosbox/src/main/java/jdos/hardware/NE2000.java index 94996fde..ba5a0796 100644 --- a/jdosbox/src/main/java/jdos/hardware/NE2000.java +++ b/jdosbox/src/main/java/jdos/hardware/NE2000.java @@ -32,7 +32,6 @@ import jdos.host.Ethernet; import jdos.host.RxFrame; import jdos.host.UserEthernet; -import jdos.misc.Log; import jdos.misc.setup.Module_base; import jdos.misc.setup.Section; import jdos.misc.setup.Section_prop; @@ -196,9 +195,9 @@ public static final class RSR_t { // // Command Register 00h (repeated) // - public /*Bit8u*/ byte[] physaddr = new byte[6]; // 01-06h read/write ; MAC address + public final /*Bit8u*/ byte[] physaddr = new byte[6]; // 01-06h read/write ; MAC address public /*Bit8u*/ short curr_page; // 07h read/write ; current page register - public /*Bit8u*/ byte[] mchash = new byte[8]; // 08-0fh read/write ; multicast hash array + public final /*Bit8u*/ byte[] mchash = new byte[8]; // 08-0fh read/write ; multicast hash array // // Page 2 - diagnostic use only @@ -223,8 +222,8 @@ public static final class RSR_t { // // Novell ASIC state - public /*Bit8u*/ byte[] macaddr = new byte[32]; // ASIC ROM'd MAC address, even bytes - public /*Bit8u*/ Ptr mem = new Ptr(BX_NE2K_MEMSIZ); // on-chip packet memory + public final /*Bit8u*/ byte[] macaddr = new byte[32]; // ASIC ROM'd MAC address, even bytes + public final /*Bit8u*/ Ptr mem = new Ptr(BX_NE2K_MEMSIZ); // on-chip packet memory // ne2k internal state public /*Bit32u*/ long base_address; @@ -234,7 +233,7 @@ public static final class RSR_t { } public static final class bx_ne2k_c implements RxFrame { - bx_ne2k_t s = new bx_ne2k_t(); + final bx_ne2k_t s = new bx_ne2k_t(); public bx_ne2k_c() { s.tx_timer_index = 0; @@ -242,15 +241,15 @@ public bx_ne2k_c() { public void init() { if (BX_INFO) - Log.log_msg(StringHelper.sprintf("[NE2000] port 0x%x/32 irq %d mac %02x:%02x:%02x:%02x:%02x:%02x", new Object[]{ - new Long(s.base_address), - new Integer(s.base_irq), - new Integer(s.physaddr[0]), - new Integer(s.physaddr[1]), - new Integer(s.physaddr[2]), - new Integer(s.physaddr[3]), - new Integer(s.physaddr[4]), - new Integer(s.physaddr[5])})); + System.out.println(StringHelper.sprintf("[NE2000] port 0x%x/32 irq %d mac %02x:%02x:%02x:%02x:%02x:%02x", new Object[]{ + s.base_address, + s.base_irq, + (int) s.physaddr[0], + (int) s.physaddr[1], + (int) s.physaddr[2], + (int) s.physaddr[3], + (int) s.physaddr[4], + (int) s.physaddr[5]})); // Initialise the mac address area by doubling the physical address s.macaddr[0] = s.physaddr[0]; @@ -275,7 +274,7 @@ public void init() { } public void reset(int type) { - if (BX_DEBUG) Log.log_msg("[NE2000] reset"); + if (BX_DEBUG) System.out.println("[NE2000] reset"); // Zero out registers and memory s.CR = new bx_ne2k_t.CR_t(); s.ISR = new bx_ne2k_t.ISR_t(); @@ -329,18 +328,18 @@ public void reset(int type) { /*Bit32u*/ int val = (((s.CR.pgsel & 0x03) << 6) | ((s.CR.rdma_cmd & 0x07) << 3) | (s.CR.tx_packet << 2) | (s.CR.start << 1) | (s.CR.stop)); if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] read CR returns 0x%08x", new Object[]{new Integer(val)})); + System.out.println(StringHelper.sprintf("[NE2000] read CR returns 0x%08x", new Object[]{val})); return val; } public void write_cr(/*Bit32u*/int value) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] wrote 0x%02x to CR", new Object[]{new Integer(value)})); + System.out.println(StringHelper.sprintf("[NE2000] wrote 0x%02x to CR", new Object[]{value})); // Validate remote-DMA if ((value & 0x38) == 0x00) { if (BX_DEBUG) - Log.log_msg("[NE2000] CR write - invalid rDMA value 0"); + System.out.println("[NE2000] CR write - invalid rDMA value 0"); value |= 0x20; /* dma_cmd == 4 is a safe default */ //value = 0x22; /* dma_cmd == 4 is a safe default */ } @@ -371,7 +370,7 @@ public void write_cr(/*Bit32u*/int value) { s.bound_ptr * 256; s.remote_bytes = s.mem.readw(s.bound_ptr * 256 + 2 - BX_NE2K_MEMSTART); if (BX_INFO) - Log.log_msg("[NE2000] Sending buffer #x" + Integer.toString(s.remote_start, 16) + " length " + s.remote_bytes); + System.out.println("[NE2000] Sending buffer #x" + Integer.toString(s.remote_start, 16) + " length " + s.remote_bytes); } // Check for start-tx @@ -379,7 +378,7 @@ public void write_cr(/*Bit32u*/int value) { // loopback mode if (s.TCR.loop_cntl != 1) { if (BX_INFO) - Log.log_msg("[NE2000] Loop mode " + s.TCR.loop_cntl + " not supported."); + System.out.println("[NE2000] Loop mode " + s.TCR.loop_cntl + " not supported."); } else { rx_frame(new Ptr(s.mem, s.tx_page_start * 256 - BX_NE2K_MEMSTART), s.tx_bytes); @@ -395,11 +394,11 @@ public void write_cr(/*Bit32u*/int value) { // start-tx and no loopback if (s.CR.stop != 0 || s.CR.start == 0) if (BX_PANIC) - Log.log_msg("[NE2000] CR write - tx start, dev in reset"); + System.out.println("[NE2000] CR write - tx start, dev in reset"); if (s.tx_bytes == 0) if (BX_PANIC) - Log.log_msg("[NE2000] CR write - tx start, tx bytes == 0"); + System.out.println("[NE2000] CR write - tx start, tx bytes == 0"); // #ifdef notdef // // XXX debug stuff @@ -420,7 +419,7 @@ public void write_cr(/*Bit32u*/int value) { // some more debug if (s.tx_timer_active != 0) { if (BX_PANIC) - Log.log_msg("[NE2000] CR write, tx timer still active"); + System.out.println("[NE2000] CR write, tx timer still active"); Pic.PIC_RemoveEvents(NE2000_TX_Event); } //LOG_MSG("send packet command"); @@ -464,11 +463,11 @@ public void write_cr(/*Bit32u*/int value) { // public /*Bit32u*/long chipmem_read(/*Bit32u*/int address, /*unsigned*/int io_len) { /*Bit32u*/ - long retval = 0; + long retval; if ((io_len == 2) && (address & 0x1) != 0) if (BX_PANIC) - Log.log_msg("[NE2000] unaligned chipmem word read"); + System.out.println("[NE2000] unaligned chipmem word read"); // ROM'd MAC address if ((address >= 0) && (address <= 31)) { @@ -492,7 +491,7 @@ public void write_cr(/*Bit32u*/int value) { } } if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("out-of-bounds chipmem read, %04X", new Object[]{new Integer(address)})); + System.out.println(StringHelper.sprintf("out-of-bounds chipmem read, %04X", new Object[]{address})); return (0xff); } @@ -500,7 +499,7 @@ public void write_cr(/*Bit32u*/int value) { public void chipmem_write(/*Bit32u*/int address, /*Bit32u*/long value, /*unsigned*/int io_len) { if ((io_len == 2) && (address & 0x1) != 0) if (BX_PANIC) - Log.log_msg("[NE2000] unaligned chipmem word write"); + System.out.println("[NE2000] unaligned chipmem word write"); if ((address >= BX_NE2K_MEMSTART) && (address < BX_NE2K_MEMEND)) { if (io_len == 1) { @@ -536,7 +535,7 @@ public void chipmem_write(/*Bit32u*/int address, /*Bit32u*/long value, /*unsigne // if (io_len > s.remote_bytes) { if (BX_ERROR) - Log.log_msg("[NE2000] dma read underrun iolen=" + io_len + " remote_bytes=" + s.remote_bytes); + System.out.println("[NE2000] dma read underrun iolen=" + io_len + " remote_bytes=" + s.remote_bytes); //return 0; } @@ -572,7 +571,7 @@ public void chipmem_write(/*Bit32u*/int address, /*Bit32u*/long value, /*unsigne break; default: if (BX_INFO) - Log.log_msg(StringHelper.sprintf("[NE2000] asic read invalid address %04x", new Object[]{new Integer(offset)})); + System.out.println(StringHelper.sprintf("[NE2000] asic read invalid address %04x", new Object[]{offset})); break; } return retval; @@ -580,19 +579,19 @@ public void chipmem_write(/*Bit32u*/int address, /*Bit32u*/long value, /*unsigne public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] asic write addr=0x%02x, value=0x%04x", new Object[]{new Integer(offset), new Long(value)})); + System.out.println(StringHelper.sprintf("[NE2000] asic write addr=0x%02x, value=0x%04x", new Object[]{offset, value})); switch (offset) { case 0x0: // Data register - see asic_read for a description if ((io_len == 2) && (s.DCR.wdsize == 0)) { if (BX_PANIC) - Log.log_msg("[NE2000] dma write length 2 on byte mode operation"); + System.out.println("[NE2000] dma write length 2 on byte mode operation"); break; } if (s.remote_bytes == 0) if (BX_PANIC) - Log.log_msg("[NE2000] dma write, byte count 0"); + System.out.println("[NE2000] dma write, byte count 0"); chipmem_write(s.remote_dma, value, io_len); // is this right ??? asic_read uses DCR.wordsize @@ -621,7 +620,7 @@ public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/i default: // this is invalid, but happens under win95 device detection if (BX_INFO) - Log.log_msg(StringHelper.sprintf("[NE2000] asic write invalid address %04x, ignoring", new Object[]{new Long(offset)})); + System.out.println(StringHelper.sprintf("[NE2000] asic write invalid address %04x, ignoring", new Object[]{(long) offset})); break; } } @@ -632,11 +631,11 @@ public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/i // public /*Bit32u*/long page0_read(/*Bit32u*/int offset, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] page 0 read from port %04x, len=%d", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] page 0 read from port %04x, len=%d", new Object[]{offset, io_len})); if (io_len > 1) { if (BX_ERROR) { /* encountered with win98 hardware probe */ - Log.log_msg(StringHelper.sprintf("[NE2000] bad length! page 0 read from port %04x, len=%u", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] bad length! page 0 read from port %04x, len=%u", new Object[]{offset, io_len})); } return 0; } @@ -650,28 +649,28 @@ public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/i case 0x3: // BNRY return (s.bound_ptr); case 0x4: // TSR - return ((s.TSR.ow_coll << 7) | - (s.TSR.cd_hbeat << 6) | - (s.TSR.fifo_ur << 5) | - (s.TSR.no_carrier << 4) | - (s.TSR.aborted << 3) | - (s.TSR.collided << 2) | + return (((long) s.TSR.ow_coll << 7) | + ((long) s.TSR.cd_hbeat << 6) | + ((long) s.TSR.fifo_ur << 5) | + ((long) s.TSR.no_carrier << 4) | + ((long) s.TSR.aborted << 3) | + ((long) s.TSR.collided << 2) | (s.TSR.tx_ok)); case 0x5: // NCR return (s.num_coll); case 0x6: // FIFO // reading FIFO is only valid in loopback mode if (BX_ERROR) - Log.log_msg("[NE2000] reading FIFO not supported yet"); + System.out.println("[NE2000] reading FIFO not supported yet"); return (s.fifo); case 0x7: // ISR - return ((s.ISR.reset << 7) | - (s.ISR.rdma_done << 6) | - (s.ISR.cnt_oflow << 5) | - (s.ISR.overwrite << 4) | - (s.ISR.tx_err << 3) | - (s.ISR.rx_err << 2) | - (s.ISR.pkt_tx << 1) | + return (((long) s.ISR.reset << 7) | + ((long) s.ISR.rdma_done << 6) | + ((long) s.ISR.cnt_oflow << 5) | + ((long) s.ISR.overwrite << 4) | + ((long) s.ISR.tx_err << 3) | + ((long) s.ISR.rx_err << 2) | + ((long) s.ISR.pkt_tx << 1) | (s.ISR.pkt_rx)); case 0x8: // CRDA0 return (s.remote_dma & 0xff); @@ -679,20 +678,20 @@ public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/i return (s.remote_dma >> 8); case 0xa: // reserved if (BX_INFO) - Log.log_msg("[NE2000] reserved read - page 0, 0xa"); + System.out.println("[NE2000] reserved read - page 0, 0xa"); return (0xff); case 0xb: // reserved if (BX_INFO) - Log.log_msg("[NE2000] reserved read - page 0, 0xb"); + System.out.println("[NE2000] reserved read - page 0, 0xb"); return (0xff); case 0xc: // RSR - return ((s.RSR.deferred << 7) | - (s.RSR.rx_disabled << 6) | - (s.RSR.rx_mbit << 5) | - (s.RSR.rx_missed << 4) | - (s.RSR.fifo_or << 3) | - (s.RSR.bad_falign << 2) | - (s.RSR.bad_crc << 1) | + return (((long) s.RSR.deferred << 7) | + ((long) s.RSR.rx_disabled << 6) | + ((long) s.RSR.rx_mbit << 5) | + ((long) s.RSR.rx_missed << 4) | + ((long) s.RSR.fifo_or << 3) | + ((long) s.RSR.bad_falign << 2) | + ((long) s.RSR.bad_crc << 1) | (s.RSR.rx_ok)); case 0xd: // CNTR0 return (s.tallycnt_0); @@ -702,7 +701,7 @@ public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/i return (s.tallycnt_2); default: if (BX_PANIC) - Log.log_msg(StringHelper.sprintf("[NE2000] page 0 read offset %04x out of range", new Object[]{new Integer(offset)})); + System.out.println(StringHelper.sprintf("[NE2000] page 0 read offset %04x out of range", new Object[]{offset})); } return (0); } @@ -710,7 +709,7 @@ public void asic_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/i public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/int io_len) { int value = (int) val; if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] page 0 write to port %04x, len=%d", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] page 0 write to port %04x, len=%d", new Object[]{offset, io_len})); // It appears to be a common practice to use outw on page0 regs... @@ -810,7 +809,7 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in // Check if the reserved bits are set if ((value & 0xc0) != 0) if (BX_INFO) - Log.log_msg("[NE2000] RCR write, reserved bits set"); + System.out.println("[NE2000] RCR write, reserved bits set"); // Set all other bit-fields s.RCR.errors_ok = ((value & 0x01) == 0x01) ? 1 : 0; @@ -823,20 +822,20 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in // Monitor bit is a little suspicious... if ((value & 0x20) != 0) if (BX_INFO) - Log.log_msg("[NE2000] RCR write, monitor bit set!"); + System.out.println("[NE2000] RCR write, monitor bit set!"); break; case 0xd: // TCR // Check reserved bits if ((value & 0xe0) != 0) if (BX_ERROR) - Log.log_msg("[NE2000] TCR write, reserved bits set"); + System.out.println("[NE2000] TCR write, reserved bits set"); // Test loop mode (not supported) if ((value & 0x06) != 0) { s.TCR.loop_cntl = (short) ((value & 0x6) >> 1); if (BX_INFO) - Log.log_msg("[NE2000] TCR write, loop mode " + s.TCR.loop_cntl + " not supported"); + System.out.println("[NE2000] TCR write, loop mode " + s.TCR.loop_cntl + " not supported"); } else { s.TCR.loop_cntl = 0; } @@ -844,12 +843,12 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in // Inhibit-CRC not supported. if ((value & 0x01) != 0) if (BX_PANIC) - Log.log_msg("[NE2000] TCR write, inhibit-CRC not supported"); + System.out.println("[NE2000] TCR write, inhibit-CRC not supported"); // Auto-transmit disable very suspicious if ((value & 0x08) != 0) if (BX_PANIC) - Log.log_msg("[NE2000] TCR write, auto transmit disable not supported"); + System.out.println("[NE2000] TCR write, auto transmit disable not supported"); // Allow collision-offset to be set, although not used s.TCR.coll_prio = ((value & 0x08) == 0x08) ? 1 : 0; @@ -859,16 +858,16 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in // the loopback mode is not suppported yet if ((value & 0x08) == 0) { if (BX_ERROR) - Log.log_msg("[NE2000] DCR write, loopback mode selected"); + System.out.println("[NE2000] DCR write, loopback mode selected"); } // It is questionable to set longaddr and auto_rx, since they // aren't supported on the ne2000. Print a warning and continue if ((value & 0x04) != 0) if (BX_INFO) - Log.log_msg("[NE2000] DCR write - LAS set ???"); + System.out.println("[NE2000] DCR write - LAS set ???"); if ((value & 0x10) != 0) if (BX_INFO) - Log.log_msg("[NE2000] DCR write - AR set ???"); + System.out.println("[NE2000] DCR write - AR set ???"); // Set other values. s.DCR.wdsize = ((value & 0x01) == 0x01) ? 1 : 0; @@ -883,7 +882,7 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in // Check for reserved bit if ((value & 0x80) != 0) if (BX_PANIC) - Log.log_msg("[NE2000] IMR write, reserved bit set"); + System.out.println("[NE2000] IMR write, reserved bit set"); // Set other values s.IMR.rx_inte = ((value & 0x01) == 0x01) ? 1 : 0; @@ -894,13 +893,13 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in s.IMR.cofl_inte = ((value & 0x20) == 0x20) ? 1 : 0; s.IMR.rdma_inte = ((value & 0x40) == 0x40) ? 1 : 0; if (s.ISR.pkt_tx != 0 && s.IMR.tx_inte != 0) { - Log.log_msg("[NE2000] tx irq retrigger"); + System.out.println("[NE2000] tx irq retrigger"); Pic.PIC_ActivateIRQ(s.base_irq); } break; default: if (BX_PANIC) - Log.log_msg("[NE2000] page 0 write, bad offset " + Integer.toString(offset, 16)); + System.out.println("[NE2000] page 0 write, bad offset " + Integer.toString(offset, 16)); } } @@ -910,11 +909,11 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in // public /*Bit32u*/long page1_read(/*Bit32u*/int offset, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] page 1 read from port %04x, len=%d", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] page 1 read from port %04x, len=%d", new Object[]{offset, io_len})); if (io_len > 1) { if (BX_ERROR) { /* encountered with win98 hardware probe */ - Log.log_msg(StringHelper.sprintf("[NE2000] bad length! page 1 read from port %04x, len=%u", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] bad length! page 1 read from port %04x, len=%u", new Object[]{offset, io_len})); } return 0; } @@ -930,7 +929,7 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in case 0x7: // CURR if (BX_DEBUG) - Log.log_msg("[NE2000] returning current page: " + s.curr_page); + System.out.println("[NE2000] returning current page: " + s.curr_page); return (s.curr_page); case 0x8: // MAR0-7 @@ -945,14 +944,14 @@ public void page0_write(/*Bit32u*/int offset, /*Bit32u*/long val, /*unsigned*/in default: if (BX_PANIC) - Log.log_msg(StringHelper.sprintf("[NE2000] page 1 read offset %04x out of range", new Object[]{new Integer(offset)})); + System.out.println(StringHelper.sprintf("[NE2000] page 1 read offset %04x out of range", new Object[]{offset})); } return 0; } public void page1_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] page 1 write to port %04x, len=%d", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] page 1 write to port %04x, len=%d", new Object[]{offset, io_len})); switch (offset) { case 0x1: // PAR0-5 @@ -981,7 +980,7 @@ public void page1_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ default: if (BX_PANIC) - Log.log_msg("[NE2000] page 1 write, bad offset " + Integer.toString(offset, 16)); + System.out.println("[NE2000] page 1 write, bad offset " + Integer.toString(offset, 16)); } } @@ -991,11 +990,11 @@ public void page1_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ // public /*Bit32u*/long page2_read(/*Bit32u*/int offset, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] page 2 read from port %04x, len=%d", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] page 2 read from port %04x, len=%d", new Object[]{offset, io_len})); if (io_len > 1) { if (BX_ERROR) { /* encountered with win98 hardware probe */ - Log.log_msg(StringHelper.sprintf("[NE2000] bad length! page 2 read from port %04x, len=%u", new Object[]{new Integer(offset), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] bad length! page 2 read from port %04x, len=%u", new Object[]{offset, io_len})); } return 0; } @@ -1020,38 +1019,38 @@ public void page1_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ case 0xa: case 0xb: if (BX_ERROR) - Log.log_msg("reserved read - page 2, 0x" + Integer.toString(offset, 16)); + System.out.println("reserved read - page 2, 0x" + Integer.toString(offset, 16)); return (0xff); case 0xc: // RCR - return ((s.RCR.monitor << 5) | - (s.RCR.promisc << 4) | - (s.RCR.multicast << 3) | - (s.RCR.broadcast << 2) | - (s.RCR.runts_ok << 1) | + return (((long) s.RCR.monitor << 5) | + ((long) s.RCR.promisc << 4) | + ((long) s.RCR.multicast << 3) | + ((long) s.RCR.broadcast << 2) | + ((long) s.RCR.runts_ok << 1) | (s.RCR.errors_ok)); case 0xd: // TCR - return ((s.TCR.coll_prio << 4) | - (s.TCR.ext_stoptx << 3) | + return (((long) s.TCR.coll_prio << 4) | + ((long) s.TCR.ext_stoptx << 3) | ((s.TCR.loop_cntl & 0x3) << 1) | (s.TCR.crc_disable)); case 0xe: // DCR return (((s.DCR.fifo_size & 0x3) << 5) | - (s.DCR.auto_rx << 4) | - (s.DCR.loop << 3) | - (s.DCR.longaddr << 2) | - (s.DCR.endian << 1) | + ((long) s.DCR.auto_rx << 4) | + ((long) s.DCR.loop << 3) | + ((long) s.DCR.longaddr << 2) | + ((long) s.DCR.endian << 1) | (s.DCR.wdsize)); case 0xf: // IMR - return ((s.IMR.rdma_inte << 6) | - (s.IMR.cofl_inte << 5) | - (s.IMR.overw_inte << 4) | - (s.IMR.txerr_inte << 3) | - (s.IMR.rxerr_inte << 2) | - (s.IMR.tx_inte << 1) | + return (((long) s.IMR.rdma_inte << 6) | + ((long) s.IMR.cofl_inte << 5) | + ((long) s.IMR.overw_inte << 4) | + ((long) s.IMR.txerr_inte << 3) | + ((long) s.IMR.rxerr_inte << 2) | + ((long) s.IMR.tx_inte << 1) | (s.IMR.rx_inte)); default: if (BX_PANIC) - Log.log_msg(StringHelper.sprintf("[NE2000] page 2 read offset %04x out of range", new Object[]{new Integer(offset)})); + System.out.println(StringHelper.sprintf("[NE2000] page 2 read offset %04x out of range", new Object[]{offset})); } return 0; } @@ -1062,19 +1061,19 @@ public void page2_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ // and print a warning. if (offset != 0) if (BX_ERROR) - Log.log_msg("[NE2000] page 2 write ?"); + System.out.println("[NE2000] page 2 write ?"); switch (offset) { case 0x1: // CLDA0 // Clear out low byte and re-insert s.local_dma &= 0xff00; - s.local_dma |= (value & 0xff); + s.local_dma |= (int) (value & 0xff); break; case 0x2: // CLDA1 // Clear out high byte and re-insert s.local_dma &= 0x00ff; - s.local_dma |= ((value & 0xff) << 8); + s.local_dma |= (int) ((value & 0xff) << 8); break; case 0x3: // Remote Next-pkt pointer @@ -1083,7 +1082,7 @@ public void page2_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ case 0x4: if (BX_PANIC) - Log.log_msg("page 2 write to reserved offset 4"); + System.out.println("page 2 write to reserved offset 4"); break; case 0x5: // Local Next-packet pointer @@ -1093,13 +1092,13 @@ public void page2_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ case 0x6: // Address counter (upper) // Clear out high byte and re-insert s.address_cnt &= 0x00ff; - s.address_cnt |= ((value & 0xff) << 8); + s.address_cnt |= (int) ((value & 0xff) << 8); break; case 0x7: // Address counter (lower) // Clear out low byte and re-insert s.address_cnt &= 0xff00; - s.address_cnt |= (value & 0xff); + s.address_cnt |= (int) (value & 0xff); break; case 0x8: @@ -1111,12 +1110,12 @@ public void page2_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ case 0xe: case 0xf: if (BX_PANIC) - Log.log_msg("[NE2000] page 2 write to reserved offset " + Integer.toString(offset, 16)); + System.out.println("[NE2000] page 2 write to reserved offset " + Integer.toString(offset, 16)); break; default: if (BX_PANIC) - Log.log_msg("[NE2000] page 2 write, illegal offset " + Integer.toString(offset)); + System.out.println("[NE2000] page 2 write, illegal offset " + offset); break; } } @@ -1126,13 +1125,13 @@ public void page2_write(/*Bit32u*/int offset, /*Bit32u*/long value, /*unsigned*/ // public /*Bit32u*/long page3_read(/*Bit32u*/int offset, /*unsigned*/int io_len) { if (BX_PANIC) - Log.log_msg("[NE2000] page 3 read attempted"); + System.out.println("[NE2000] page 3 read attempted"); return 0; } public void page3_write(/*Bit32u*/int address, /*Bit32u*/long value, /*unsigned*/int io_len) { if (BX_PANIC) - Log.log_msg("[NE2000] page 3 write attempted"); + System.out.println("[NE2000] page 3 write attempted"); } // public static void tx_timer_handler() { @@ -1140,7 +1139,7 @@ public void page3_write(/*Bit32u*/int address, /*Bit32u*/long value, /*unsigned* public void tx_timer() { if (BX_DEBUG) - Log.log_msg("[NE2000] tx_timer"); + System.out.println("[NE2000] tx_timer"); s.TSR.tx_ok = 1; // Generate an interrupt if not masked and not one in progress if (s.IMR.tx_inte != 0 && s.ISR.pkt_tx == 0) { @@ -1157,7 +1156,7 @@ public void tx_timer() { public /*Bit32u*/long read(/*Bit32u*/long address, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg(StringHelper.sprintf("[NE2000] read addr %x, len %d", new Object[]{new Long(address), new Integer(io_len)})); + System.out.println(StringHelper.sprintf("[NE2000] read addr %x, len %d", new Object[]{address, io_len})); /*Bit32u*/ long retval = 0; int offset = (int) (address - s.base_address); @@ -1186,7 +1185,7 @@ public void tx_timer() { default: if (BX_PANIC) - Log.log_msg("[NE2000] unknown value of pgsel in read - " + s.CR.pgsel); + System.out.println("[NE2000] unknown value of pgsel in read - " + s.CR.pgsel); } } return retval; @@ -1196,7 +1195,7 @@ public void tx_timer() { public void write(/*Bit32u*/long address, /*Bit32u*/long value, /*unsigned*/int io_len) { if (BX_DEBUG) - Log.log_msg("[NE2000] write with length " + io_len); + System.out.println("[NE2000] write with length " + io_len); int offset = (int) (address - s.base_address); // @@ -1229,7 +1228,7 @@ public void write(/*Bit32u*/long address, /*Bit32u*/long value, /*unsigned*/int default: if (BX_PANIC) - Log.log_msg("[NE2000] unknown value of pgsel in write - " + s.CR.pgsel); + System.out.println("[NE2000] unknown value of pgsel in write - " + s.CR.pgsel); } } } @@ -1276,13 +1275,12 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { int wrapped; int nextpage; byte[] pkthdr = new byte[4]; - Ptr pktbuf = buf; Ptr startptr; final byte[] bcast_addr = new byte[]{(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff}; if (io_len != 60) { if (BX_DEBUG) - Log.log_msg("[NE2000] rx_frame with length " + io_len); + System.out.println("[NE2000] rx_frame with length " + io_len); } //LOG_MSG("stop=%d, pagestart=%x, dcr_loop=%x, tcr_loopcntl=%x", @@ -1304,7 +1302,6 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { } else { avail = (s.page_stop - s.page_start) - (s.curr_page - s.bound_ptr); - wrapped = 1; } // Avoid getting into a buffer overflow condition by not attempting @@ -1313,20 +1310,20 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { if (BX_NE2K_NEVER_FULL_RING != 0) { if (avail <= pages) { if (BX_DEBUG) - Log.log_msg("[NE2000] no space"); + System.out.println("[NE2000] no space"); return true; } } else { if (avail < pages) { if (BX_DEBUG) - Log.log_msg("[NE2000] no space"); + System.out.println("[NE2000] no space"); return true; } } if ((io_len < 60) && s.RCR.runts_ok == 0) { if (BX_DEBUG) - Log.log_msg("[NE2000] rejected small packet, length " + io_len); + System.out.println("[NE2000] rejected small packet, length " + io_len); return true; } // some computers don't care... @@ -1338,7 +1335,7 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { if (s.RCR.broadcast == 0) { return true; } - } else if ((pktbuf.readb(0) & 0x01) != 0) { + } else if ((buf.readb(0) & 0x01) != 0) { if (s.RCR.multicast == 0) { return true; } @@ -1351,7 +1348,7 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { } } else { if (BX_DEBUG) - Log.log_msg("[NE2000] rx_frame promiscuous receive"); + System.out.println("[NE2000] rx_frame promiscuous receive"); } // BX_INFO("rx_frame %d to %x:%x:%x:%x:%x:%x from %x:%x:%x:%x:%x:%x", @@ -1368,7 +1365,7 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { pkthdr[0] = 0; // rx status - old behavior pkthdr[0] = 1; // Probably better to set it all the time // rather than set it to 0, which is clearly wrong. - if ((pktbuf.readb(0) & 0x01) != 0) { + if ((buf.readb(0) & 0x01) != 0) { pkthdr[0] |= 0x20; // rx status += multicast packet } pkthdr[1] = (byte) nextpage; // ptr to next packet @@ -1388,12 +1385,12 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { startptr.inc(4); Ptr.memcpy(startptr, buf, endbytes - 4); startptr = new Ptr(s.mem, s.page_start * 256 - BX_NE2K_MEMSTART); - Ptr.memcpy(startptr, new Ptr(pktbuf, endbytes - 4), io_len - endbytes + 4); + Ptr.memcpy(startptr, new Ptr(buf, endbytes - 4), io_len - endbytes + 4); s.curr_page = (short) nextpage; } s.RSR.rx_ok = 1; - if ((pktbuf.readb(0) & 0x80) != 0) { + if ((buf.readb(0) & 0x80) != 0) { s.RSR.rx_mbit = 1; } @@ -1408,22 +1405,13 @@ public boolean rx_frame(Ptr buf, /*unsigned*/int io_len) { } } - static final private IoHandler.IO_ReadHandler dosbox_read = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return (int) theNE2kDevice.read(port, iolen); - } - }; - static final private IoHandler.IO_WriteHandler dosbox_write = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - theNE2kDevice.write(port, (long) (val & 0xFFFFFFFFl), iolen); - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static final private IoHandler.IO_ReadHandler dosbox_read = (port, iolen) -> (int) theNE2kDevice.read(port, iolen); + /*Bitu*//*Bitu*//*Bitu*/ + static final private IoHandler.IO_WriteHandler dosbox_write = (port, val, iolen) -> theNE2kDevice.write(port, val & 0xFFFFFFFFL, iolen); - static private final Pic.PIC_EventHandler NE2000_TX_Event = new Pic.PIC_EventHandler() { - public void call(/*Bitu*/int val) { - theNE2kDevice.tx_timer(); - } - }; + /*Bitu*/ + static private final Pic.PIC_EventHandler NE2000_TX_Event = val -> theNE2kDevice.tx_timer(); static final private Timer.TIMER_TickHandler NE2000_Poller = new Timer.TIMER_TickHandler() { public void call() { @@ -1433,8 +1421,8 @@ public void call() { // Data - IoHandler.IO_ReadHandleObject[] ReadHandler8 = new IoHandler.IO_ReadHandleObject[0x20]; - IoHandler.IO_WriteHandleObject[] WriteHandler8 = new IoHandler.IO_WriteHandleObject[0x20]; + final IoHandler.IO_ReadHandleObject[] ReadHandler8 = new IoHandler.IO_ReadHandleObject[0x20]; + final IoHandler.IO_WriteHandleObject[] WriteHandler8 = new IoHandler.IO_WriteHandleObject[0x20]; boolean load_success; Ethernet ethernet; @@ -1446,7 +1434,7 @@ public NE2000(Section configuration) { load_success = true; // enabled? String mode = section.Get_string("mode"); - if (mode == null || mode.length()==0 || mode.equalsIgnoreCase("false")) { + if (mode == null || mode.isEmpty() || mode.equalsIgnoreCase("false")) { load_success = false; return; } @@ -1488,9 +1476,9 @@ public NE2000(Section configuration) { if (mode.equalsIgnoreCase("pcap")) { try { - Class c = Class.forName("jdos.host.PCapEthernet"); + Class c = Class.forName("jdos.host.PCapEthernet"); ethernet = (Ethernet)c.newInstance(); - if (!ethernet.open(section, mac)) { + if (ethernet.open(section, mac)) { ethernet = null; } } catch (Exception e) { @@ -1498,21 +1486,21 @@ public NE2000(Section configuration) { } } else if (mode.equalsIgnoreCase("pcaphost")) { try { - Class c = Class.forName("jdos.host.FowardPCapEthernet"); + Class c = Class.forName("jdos.host.FowardPCapEthernet"); ethernet = (Ethernet)c.newInstance(); - if (!ethernet.open(section, mac)) + if (ethernet.open(section, mac)) ethernet = null; } catch (Exception e) { e.printStackTrace(); } } else if (mode.equalsIgnoreCase("user")) { ethernet = new UserEthernet(); - if (!ethernet.open(section, mac)) { + if (ethernet.open(section, mac)) { ethernet = null; } } if (ethernet == null) { - Log.log_msg("Network card disabled. mode="+mode+" not found."); + System.out.println("Network card disabled. mode="+mode+" not found."); load_success = false; return; } @@ -1544,14 +1532,14 @@ public void close() { static private NE2000 test; - private static Section.SectionFunction NE2000_ShutDown = new Section.SectionFunction() { + private static final Section.SectionFunction NE2000_ShutDown = new Section.SectionFunction() { public void call(Section section) { test.close(); test = null; } }; - public static Section.SectionFunction NE2000_Init = new Section.SectionFunction() { + public static final Section.SectionFunction NE2000_Init = new Section.SectionFunction() { public void call(Section section) { test = new NE2000(section); section.AddDestroyFunction(NE2000_ShutDown, true); diff --git a/jdosbox/src/main/java/jdos/hardware/PCSpeaker.java b/jdosbox/src/main/java/jdos/hardware/PCSpeaker.java index 9eb81453..304d36af 100644 --- a/jdosbox/src/main/java/jdos/hardware/PCSpeaker.java +++ b/jdosbox/src/main/java/jdos/hardware/PCSpeaker.java @@ -1,18 +1,16 @@ package jdos.hardware; -import jdos.misc.Log; import jdos.misc.setup.Config; import jdos.misc.setup.Module_base; import jdos.misc.setup.Section; import jdos.misc.setup.Section_prop; -import jdos.util.ShortPtr; public class PCSpeaker extends Module_base { private static final double PI = 3.14159265358979323846; private static final int SPKR_ENTRIES = 1024; private static final int SPKR_VOLUME = 5000; - private static final float SPKR_SPEED = (float)((SPKR_VOLUME*2)/0.070f); + private static final float SPKR_SPEED = (SPKR_VOLUME*2)/0.070f; private static final class SPKR_MODES { public static final int SPKR_OFF=0; @@ -44,7 +42,7 @@ public Spkr() { /*Bitu*/int last_ticks; float last_index; /*Bitu*/int min_tr; - DelayEntry[] entries = new DelayEntry[SPKR_ENTRIES]; + final DelayEntry[] entries = new DelayEntry[SPKR_ENTRIES]; /*Bitu*/int used; } @@ -139,7 +137,7 @@ static private void ForwardPIT(float newindex) { /* Check if we're gonna pass the end this block */ if (spkr.pit_index+passed>=spkr.pit_max) { float delay=spkr.pit_max-spkr.pit_index; - delay_base+=delay;passed-=delay; + delay_base+=delay; spkr.pit_last=-SPKR_VOLUME; if (spkr.mode==SPKR_MODES.SPKR_PIT_ON) AddDelayEntry(delay_base,spkr.pit_last); //No new events unless reprogrammed spkr.pit_index=spkr.pit_max; @@ -198,7 +196,7 @@ public static void PCSPEAKER_SetCounter(/*Bitu*/int cntr,/*Bitu*/int mode) { break; default: if (Config.C_DEBUG) - Log.log_msg("Unhandled speaker mode "+mode); + System.out.println("Unhandled speaker mode "+mode); return; } spkr.pit_mode=mode; @@ -234,7 +232,7 @@ public static void PCSPEAKER_SetType(/*Bitu*/int mode) { } } - static private Mixer.MIXER_Handler PCSPEAKER_CallBack = new Mixer.MIXER_Handler() { + static private final Mixer.MIXER_Handler PCSPEAKER_CallBack = new Mixer.MIXER_Handler() { public void call(/*Bitu*/int len) { /*Bit16s*/short[] stream=new short[len]; ForwardPIT(1); @@ -311,7 +309,7 @@ public void call(/*Bitu*/int len) { } }; - private Mixer.MixerObject MixerChan = new Mixer.MixerObject(); + private final Mixer.MixerObject MixerChan = new Mixer.MixerObject(); public PCSpeaker(Section configuration) { super(configuration); spkr.chan=null; @@ -333,14 +331,14 @@ public PCSpeaker(Section configuration) { } static private PCSpeaker test; - private static Section.SectionFunction PCSPEAKER_ShutDown = new Section.SectionFunction() { + private static final Section.SectionFunction PCSPEAKER_ShutDown = new Section.SectionFunction() { public void call(Section section) { test = null; spkr = null; } }; - public static Section.SectionFunction PCSPEAKER_Init = new Section.SectionFunction() { + public static final Section.SectionFunction PCSPEAKER_Init = new Section.SectionFunction() { public void call(Section section) { spkr = new Spkr(); test = new PCSpeaker(section); diff --git a/jdosbox/src/main/java/jdos/hardware/Pic.java b/jdosbox/src/main/java/jdos/hardware/Pic.java index a70a44f7..c5db2df2 100644 --- a/jdosbox/src/main/java/jdos/hardware/Pic.java +++ b/jdosbox/src/main/java/jdos/hardware/Pic.java @@ -11,9 +11,11 @@ import jdos.types.LogTypes; import jdos.types.MachineType; +import java.util.Arrays; + public class Pic extends Module_base { public interface PIC_EventHandler { - public void call(/*Bitu*/int val); + void call(/*Bitu*/int val); } public static float PIC_TickIndex() { @@ -134,11 +136,7 @@ public static boolean PIC_RunQueue() { if (pic_queue.next_entry!=null) { /*Bits*/int cycles=(/*Bits*/int)(pic_queue.next_entry.index*CPU.CPU_CycleMax-index_nd); if (cycles==0) cycles=1; - if (cycles { + PIC_Controller pic=pics[port==0x20 ? 0 : 1]; + if ((val&0x10)!=0) { // ICW1 issued + if ((val&0x04)!=0) Log.exit("PIC: 4 byte interval not handled"); + if ((val&0x08)!=0) Log.exit("PIC: level triggered mode not handled"); + if ((val&0xe0)!=0) Log.exit("PIC: 8080/8085 mode not handled"); + pic.single=(val&0x02)==0x02; + pic.icw_index=1; // next is ICW2 + pic.icw_words=2 + (val&0x01); // =3 if ICW4 needed + } else if ((val&0x08)!=0) { // OCW3 issued + if ((val&0x04)!=0) Log.exit("PIC: poll command not handled"); + if ((val&0x02)!=0) { // function select + /* select read interrupt request register */ + pic.request_issr= (val & 0x01) != 0; /* select read interrupt in-service register */ + } + if ((val&0x40)!=0) { // special mask select + pic.special= (val & 0x20) != 0; + //Check if there are irqs ready to run, as the priority system has possibly been changed. + pic.check_for_irq(); + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,"port "+Integer.toString(port, 16)+" : special mask "+((pic.special)?"ON":"OFF")); + } + } else { // OCW2 issued + if ((val&0x20)!=0) { // EOI commands + if ((val&0x80)!=0) Log.exit("rotate mode not supported"); + if ((val&0x40)!=0) { // specific EOI + pic.isr &= ~(1<< ((val-0x60))); + pic.isrr = ~pic.isr; + pic.check_after_EOI(); + // if (val&0x80); // perform rotation + } else { // nonspecific EOI + if (pic.active_irq != 8) { + //If there is no irq in service, ignore the call, some games send an eoi to both pics when a sound irq happens (regardless of the irq). + pic.isr &= ~(1 << (pic.active_irq)); + pic.isrr = ~pic.isr; + pic.check_after_EOI(); } - } else { - if ((val&0x40)==0) { // rotate in auto EOI mode - if ((val&0x80)!=0) pic.rotate_on_auto_eoi=true; - else pic.rotate_on_auto_eoi=false; - } else if ((val&0x80)!=0) { - Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,"set priority command not handled"); - } // else NOP command + // if (val&0x80); // perform rotation } - } // end OCW2 - } + } else { + if ((val&0x40)==0) { // rotate in auto EOI mode + pic.rotate_on_auto_eoi= (val & 0x80) != 0; + } else if ((val&0x80)!=0) { + Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,"set priority command not handled"); + } // else NOP command + } + } // end OCW2 }; - static private IoHandler.IO_WriteHandler write_data = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - PIC_Controller pic=pics[port==0x21 ? 0 : 1]; - switch(pic.icw_index) { - case 0: /* mask register */ - pic.set_imr(val); - break; - case 1: /* icw2 */ - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,(port==0x21 ? 0 : 1)+":Base vector "+Integer.toString(val,16)); - pic.vector_base = val&0xf8; - if(pic.icw_index++ >= pic.icw_words) pic.icw_index=0; - else if(pic.single) pic.icw_index=3; /* skip ICW3 in single mode */ - break; - case 2: /* icw 3 */ - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,(port==0x21 ? 0 : 1)+":ICW 3 "+Integer.toString(val,16)); - if(pic.icw_index++ >= pic.icw_words) pic.icw_index=0; - break; - case 3: /* icw 4 */ - /* - 0 1 8086/8080 0 mcs-8085 mode - 1 1 Auto EOI 0 Normal EOI - 2-3 0x Non buffer Mode - 10 Buffer Mode Slave - 11 Buffer mode Master - 4 Special/Not Special nested mode - */ - pic.auto_eoi=(val & 0x2)>0; - - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,(port==0x21 ? 0 : 1)+":ICW 4 "+Integer.toString(val,16)); - - if ((val&0x01)==0) Log.exit("PIC:ICW4: "+Integer.toString(val, 16)+", 8085 mode not handled"); - if ((val&0x10)!=0) Log.log_msg("PIC:ICW4: "+Integer.toString(val, 16)+", special fully-nested mode not handled"); - - if(pic.icw_index++ >= pic.icw_words) pic.icw_index=0; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,"ICW HUH? "+Integer.toString(val,16)); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_data = (port, val, iolen) -> { + PIC_Controller pic=pics[port==0x21 ? 0 : 1]; + switch(pic.icw_index) { + case 0: /* mask register */ + pic.set_imr(val); + break; + case 1: /* icw2 */ + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,(port==0x21 ? 0 : 1)+":Base vector "+Integer.toString(val,16)); + pic.vector_base = val&0xf8; + if(pic.icw_index++ >= pic.icw_words) pic.icw_index=0; + else if(pic.single) pic.icw_index=3; /* skip ICW3 in single mode */ + break; + case 2: /* icw 3 */ + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,(port==0x21 ? 0 : 1)+":ICW 3 "+Integer.toString(val,16)); + if(pic.icw_index++ >= pic.icw_words) pic.icw_index=0; + break; + case 3: /* icw 4 */ + /* + 0 1 8086/8080 0 mcs-8085 mode + 1 1 Auto EOI 0 Normal EOI + 2-3 0x Non buffer Mode + 10 Buffer Mode Slave + 11 Buffer mode Master + 4 Special/Not Special nested mode + */ + pic.auto_eoi=(val & 0x2)>0; + + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,(port==0x21 ? 0 : 1)+":ICW 4 "+Integer.toString(val,16)); + + if ((val&0x01)==0) Log.exit("PIC:ICW4: "+Integer.toString(val, 16)+", 8085 mode not handled"); + if ((val&0x10)!=0) System.out.println("PIC:ICW4: "+Integer.toString(val, 16)+", special fully-nested mode not handled"); + + if(pic.icw_index++ >= pic.icw_words) pic.icw_index=0; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIC,LogSeverities.LOG_NORMAL,"ICW HUH? "+Integer.toString(val,16)); + break; } }; - static private IoHandler.IO_ReadHandler read_command = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - PIC_Controller pic=pics[port==0x20 ? 0 : 1]; - if (pic.request_issr){ - return pic.isr; - } else { - return pic.irr; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_command = (port, iolen) -> { + PIC_Controller pic=pics[port==0x20 ? 0 : 1]; + if (pic.request_issr){ + return pic.isr; + } else { + return pic.irr; } }; - static private IoHandler.IO_ReadHandler read_data = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - PIC_Controller pic=pics[port==0x21 ? 0 : 1]; - return pic.imr; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_data = (port, iolen) -> { + PIC_Controller pic=pics[port==0x21 ? 0 : 1]; + return pic.imr; }; static private void AddEntry(PICEntry entry) { @@ -520,8 +512,8 @@ static private void AddEntry(PICEntry entry) { static boolean InEventService = false; static double srv_lag = 0; - IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[4]; - IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[4]; + final IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[4]; + final IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[4]; public Pic(Section configuration) { super(configuration); @@ -575,18 +567,17 @@ public Pic(Section configuration) { static Pic test; - public static Section.SectionFunction PIC_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction PIC_Destroy = new Section.SectionFunction() { public void call(Section section) { test = null; - for (int i=0;i> 6) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); Mixer.MixTemp8[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i] >> 4) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); Mixer.MixTemp8[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i] >> 2) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); - Mixer.MixTemp8[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i] >> 0) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); + Mixer.MixTemp8[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i]) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); } sb.chan.AddSamples_m8(done,Mixer.MixTemp8); break; @@ -487,7 +492,7 @@ private static void GenerateDMASound(/*Bitu*/int size) { if (sb.dma.mode==DSP_DMA_16_ALIASED) read=read<<1; break; default: - Log.log_msg("Unhandled dma mode "+sb.dma.mode); + System.out.println("Unhandled dma mode "+sb.dma.mode); sb.mode=MODE_NONE; return; } @@ -510,7 +515,7 @@ private static void GenerateDMASound(/*Bitu*/int size) { } } - private static Pic.PIC_EventHandler DMA_Silent_Event = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler DMA_Silent_Event = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { if (sb.dma.left sb.dma.min) ? sb.dma.min : sb.dma.left; + /*Bitu*/int bigger= Math.min(sb.dma.left, sb.dma.min); float delay=(bigger*1000.0f)/sb.dma.rate; Pic.PIC_AddEvent(DMA_Silent_Event,delay,bigger); } } }; - private static Pic.PIC_EventHandler END_DMA_Event = new Pic.PIC_EventHandler() { - public void call(/*Bitu*/int val) { - GenerateDMASound(val); - } - }; + /*Bitu*/ + private static final Pic.PIC_EventHandler END_DMA_Event = val -> GenerateDMASound(val); private static void CheckDMAEnd() { if (sb.dma.left==0) return; if (!sb.speaker && sb.type!=SBT_16) { - /*Bitu*/int bigger=(sb.dma.left > sb.dma.min) ? sb.dma.min : sb.dma.left; + /*Bitu*/int bigger= Math.min(sb.dma.left, sb.dma.min); float delay=(bigger*1000.0f)/sb.dma.rate; Pic.PIC_AddEvent(DMA_Silent_Event,delay,bigger); if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_SB,LogSeverities.LOG_NORMAL,"Silent DMA Transfer scheduling IRQ in "+ StringHelper.format(delay, 3)+" milliseconds"); @@ -558,11 +560,8 @@ private static void DSP_ChangeMode(/*DSP_MODES*/int mode) { sb.mode=mode; } - private static Pic.PIC_EventHandler DSP_RaiseIRQEvent = new Pic.PIC_EventHandler() { - public void call(/*Bitu*/int val) { - SB_RaiseIRQ(SB_IRQ_8); - } - }; + /*Bitu*/ + private static final Pic.PIC_EventHandler DSP_RaiseIRQEvent = val -> SB_RaiseIRQ(SB_IRQ_8); static void DSP_DoDMATransfer(/*DMA_MODES*/int mode,/*Bitu*/int freq,boolean stereo) { String type; @@ -659,7 +658,7 @@ private static void DSP_AddData(/*Bit8u*/int val) { } } - private static Pic.PIC_EventHandler DSP_FinishReset = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler DSP_FinishReset = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { DSP_FlushData(); DSP_AddData((short)0xaa); @@ -712,7 +711,7 @@ private static void DSP_DoReset(/*Bit8u*/short val) { } } - private static DMA.DMA_CallBack DSP_E2_DMA_CallBack = new DMA.DMA_CallBack() { + private static final DMA.DMA_CallBack DSP_E2_DMA_CallBack = new DMA.DMA_CallBack() { public void call(DMA.DmaChannel c, int event) { if (event==DMA.DMAEvent.DMA_UNMASKED) { /*Bit8u*/byte[] val=new byte[] {(/*Bit8u*/byte)(sb.e2.value&0xff)}; @@ -723,7 +722,7 @@ public void call(DMA.DmaChannel c, int event) { } }; - private static DMA.DMA_CallBack DSP_ADC_CallBack = new DMA.DMA_CallBack() { + private static final DMA.DMA_CallBack DSP_ADC_CallBack = new DMA.DMA_CallBack() { public void call(DMA.DmaChannel chan, int event) { if (event!=DMA.DMAEvent.DMA_UNMASKED) return; /*Bit8u*/byte[] val=new byte[] {(byte)128}; @@ -758,8 +757,7 @@ private static void DSP_DoCommand() { case 0x04: if (sb.type == SBT_16) { /* SB16 ASP set mode register */ - if ((sb.dsp.in.data[0]&0xf1)==0xf1) ASP_init_in_progress=true; - else ASP_init_in_progress=false; + ASP_init_in_progress= (sb.dsp.in.data[0] & 0xf1) == 0xf1; if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_SB,LogSeverities.LOG_NORMAL,"DSP Unhandled SB16ASP command "+Integer.toString(sb.dsp.cmd, 16)+" (set mode register to "+Integer.toString(sb.dsp.in.data[0],16)+")"); } else { /* DSP Status SB 2.0/pro version. NOT SB16. */ @@ -775,13 +773,11 @@ private static void DSP_DoCommand() { case 0x08: /* SB16 ASP get version */ if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_SB,LogSeverities.LOG_NORMAL,"DSP Unhandled SB16ASP command "+Integer.toString(sb.dsp.cmd, 16)+" sub "+Integer.toString(sb.dsp.in.data[0],16)); if (sb.type == SBT_16) { - switch (sb.dsp.in.data[0]) { - case 0x03: - DSP_AddData(0x18); // version ID (??) - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_SB,LogSeverities.LOG_NORMAL,"DSP Unhandled SB16ASP command "+Integer.toString(sb.dsp.cmd, 16)+" sub "+Integer.toString(sb.dsp.in.data[0], 16)); - break; + if (sb.dsp.in.data[0] == 0x03) { + DSP_AddData(0x18); // version ID (??) + } else { + if (Log.level <= LogSeverities.LOG_NORMAL) + Log.log(LogTypes.LOG_SB, LogSeverities.LOG_NORMAL, "DSP Unhandled SB16ASP command " + Integer.toString(sb.dsp.cmd, 16) + " sub " + Integer.toString(sb.dsp.in.data[0], 16)); } } else { if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_SB,LogSeverities.LOG_NORMAL,"DSP Unhandled SB16ASP command "+Integer.toString(sb.dsp.cmd, 16)+" sub "+Integer.toString(sb.dsp.in.data[0],16)); @@ -961,8 +957,8 @@ private static void DSP_DoCommand() { { DSP_FlushData(); byte[] b = copyright_string.getBytes(); - for (int i=0;i=sb.dsp.cmd_len) DSP_DoCommand(); + if (sb.dsp.in.pos >= sb.dsp.cmd_len) DSP_DoCommand(); } } @@ -1081,7 +1075,7 @@ private static void DSP_DoWrite(/*Bit8u*/short val) { } //The soundblaster manual says 2.0 Db steps but we'll go for a bit less - static private float CALCVOL(float _VAL) { return (float)Math.pow(10.0f,((float)(31-_VAL)*-1.3f)/20);} + static private float CALCVOL(float _VAL) { return (float)Math.pow(10.0f,((31-_VAL) *-1.3f)/20);} private static void CTMIXER_UpdateVolumes() { if (!sb.mixer.enabled) return; Mixer.MixerChannel chan; @@ -1379,7 +1373,7 @@ private static void CTMIXER_Write(/*Bit8u*/short val) { return ret; } - private static IoHandler.IO_ReadHandler read_sb = new IoHandler.IO_ReadHandler() { + private static final IoHandler.IO_ReadHandler read_sb = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { switch (port-sb.hw.base) { case MIXER_INDEX: @@ -1420,7 +1414,7 @@ private static void CTMIXER_Write(/*Bit8u*/short val) { } }; - private static IoHandler.IO_WriteHandler write_sb = new IoHandler.IO_WriteHandler() { + private static final IoHandler.IO_WriteHandler write_sb = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { /*Bit8u*/short val8=(/*Bit8u*/short)(val&0xff); switch (port-sb.hw.base) { @@ -1443,11 +1437,8 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { } }; - private static IoHandler.IO_WriteHandler adlib_gusforward = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - Gus.adlib_commandreg=(/*Bit8u*/short)(val&0xff); - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler adlib_gusforward = (port, val, iolen) -> Gus.adlib_commandreg=(/*Bit8u*/short)(val&0xff); public static boolean SB_Get_Address(/*Bitu*/IntRef sbaddr, /*Bitu*/IntRef sbirq, /*Bitu*/IntRef sbdma) { sbaddr.value = 0; @@ -1462,7 +1453,7 @@ public static boolean SB_Get_Address(/*Bitu*/IntRef sbaddr, /*Bitu*/IntRef sbirq } } - private static Mixer.MIXER_Handler SBLASTER_CallBack = new Mixer.MIXER_Handler() { + private static final Mixer.MIXER_Handler SBLASTER_CallBack = new Mixer.MIXER_Handler() { public void call(/*Bitu*/int len) { switch (sb.mode) { case MODE_NONE: @@ -1492,10 +1483,10 @@ public void call(/*Bitu*/int len) { }; /* Data */ - private IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[0x10]; - private IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[0x10]; - private AutoexecObject autoexecline = new AutoexecObject(); - private Mixer.MixerObject MixerChan = new Mixer.MixerObject(); + private final IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[0x10]; + private final IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[0x10]; + private final AutoexecObject autoexecline = new AutoexecObject(); + private final Mixer.MixerObject MixerChan = new Mixer.MixerObject(); private /*OPL_Mode*/int oplmode; /* Support Functions */ @@ -1567,7 +1558,7 @@ private void close() { private static SBlaster test; - public static Section.SectionFunction SBLASTER_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction SBLASTER_ShutDown = new Section.SectionFunction() { public void call(Section section) { test.close(); test = null; @@ -1646,21 +1637,19 @@ public SBlaster(Section configuration) { // or disabled. Real SBPro2 has it disabled. sb.speaker=false; // On SB16 the speaker flag does not affect actual speaker state. - if (sb.type == SBT_16) sb.chan.Enable(true); - else sb.chan.Enable(false); + sb.chan.Enable(sb.type == SBT_16); - String line = StringHelper.sprintf("SET BLASTER=A%3x I%d D%d",new Object[]{new Integer(sb.hw.base),new Integer(sb.hw.irq), new Integer(sb.hw.dma8)}); + String line = StringHelper.sprintf("SET BLASTER=A%3x I%d D%d",new Object[]{sb.hw.base, sb.hw.irq, (int) sb.hw.dma8}); if (sb.type==SBT_16) line+= " H"+ sb.hw.dma16; line+=" T"+sb.type; autoexecline.Install(line); /* Soundblaster midi interface */ - if (!Midi.MIDI_Available()) sb.midi = false; - else sb.midi = true; + sb.midi = !Midi.MIDI_Available(); } - public static Section.SectionFunction SBLASTER_Init = new Section.SectionFunction() { + public static final Section.SectionFunction SBLASTER_Init = new Section.SectionFunction() { public void call(Section section) { sb = new SB_INFO(); test = new SBlaster(section); diff --git a/jdosbox/src/main/java/jdos/hardware/TandySound.java b/jdosbox/src/main/java/jdos/hardware/TandySound.java index 6b0ebaff..8d4c96a0 100644 --- a/jdosbox/src/main/java/jdos/hardware/TandySound.java +++ b/jdosbox/src/main/java/jdos/hardware/TandySound.java @@ -1,7 +1,6 @@ package jdos.hardware; import jdos.Dosbox; -import jdos.misc.Log; import jdos.misc.setup.Module_base; import jdos.misc.setup.Section; import jdos.misc.setup.Section_prop; @@ -36,18 +35,18 @@ public class TandySound extends Module_base { final private static class SN76496 { int SampleRate; int UpdateStep; - int[] VolTable = new int[16]; /* volume table */ - int[] Register = new int[8]; /* registers */ + final int[] VolTable = new int[16]; /* volume table */ + final int[] Register = new int[8]; /* registers */ int LastRegister; /* last register written */ - int[] Volume = new int[4]; /* volume of voice 0-2 and noise */ + final int[] Volume = new int[4]; /* volume of voice 0-2 and noise */ int RNG; /* noise generator */ int NoiseFB; /* noise feedback mask */ - int[] Period = new int[4]; - int[] Count = new int[4]; - int[] Output = new int[4]; + final int[] Period = new int[4]; + final int[] Count = new int[4]; + final int[] Output = new int[4]; } - static private SN76496 sn = new SN76496(); + static private final SN76496 sn = new SN76496(); private static final int TDAC_DMA_BUFSIZE = 1024; @@ -62,200 +61,195 @@ static public class HW { /*Bitu*/int base; /*Bit8u*/short irq,dma; } - HW hw = new HW(); + final HW hw = new HW(); public static class DMA { /*Bitu*/int rate; - /*Bit8u*/byte[] buf = new byte[TDAC_DMA_BUFSIZE]; - /*Bit8u*/byte[] last_sample = new byte[1]; + /*Bit8u*/final byte[] buf = new byte[TDAC_DMA_BUFSIZE]; + /*Bit8u*/final byte[] last_sample = new byte[1]; jdos.hardware.DMA.DmaChannel chan; boolean transfer_done; } - DMA dma = new DMA(); + final DMA dma = new DMA(); /*Bit8u*/short mode,control; /*Bit16u*/int frequency; /*Bit8u*/short amplitude; boolean irq_activated; } - Dac dac = new Dac(); + final Dac dac = new Dac(); } final static private Tandy tandy = new Tandy(); - - - private static final IoHandler.IO_WriteHandler SN76496Write = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int data, /*Bitu*/int iolen) { - SN76496 R = sn; - - tandy.last_write=Pic.PIC_Ticks; - if (!tandy.enabled) { - tandy.chan.Enable(true); - tandy.enabled=true; - } - /* update the output buffer before changing the registers */ - if ((data & 0x80)!=0) { - int r = (data & 0x70) >> 4; - int c = r/2; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler SN76496Write = (port, data, iolen) -> { + SN76496 R = sn; - R.LastRegister = r; - R.Register[r] = (R.Register[r] & 0x3f0) | (data & 0x0f); - switch (r) - { - case 0: /* tone 0 : frequency */ - case 2: /* tone 1 : frequency */ - case 4: /* tone 2 : frequency */ - R.Period[c] = R.UpdateStep * R.Register[r]; - if (R.Period[c] == 0) R.Period[c] = 0x3fe; - if (r == 4) - { - /* update noise shift frequency */ - if ((R.Register[6] & 0x03) == 0x03) - R.Period[3] = 2 * R.Period[2]; - } - break; - case 1: /* tone 0 : volume */ - case 3: /* tone 1 : volume */ - case 5: /* tone 2 : volume */ - case 7: /* noise : volume */ - R.Volume[c] = R.VolTable[data & 0x0f]; - break; - case 6: /* noise : frequency, mode */ - { - int n = R.Register[6]; - R.NoiseFB = (n & 4)!=0 ? FB_WNOISE : FB_PNOISE; - n &= 3; - /* N/512,N/1024,N/2048,Tone #3 output */ - R.Period[3] = (n == 3) ? 2 * R.Period[2] : (R.UpdateStep << (5+n)); - - /* reset noise shifter */ - // R.RNG = NG_PRESET; - // R.Output[3] = R.RNG & 1; - } - break; - } - } - else + tandy.last_write=Pic.PIC_Ticks; + if (!tandy.enabled) { + tandy.chan.Enable(true); + tandy.enabled=true; + } + + /* update the output buffer before changing the registers */ + + if ((data & 0x80)!=0) { + int r = (data & 0x70) >> 4; + int c = r/2; + + R.LastRegister = r; + R.Register[r] = (R.Register[r] & 0x3f0) | (data & 0x0f); + switch (r) { - int r = R.LastRegister; - int c = r/2; + case 0: /* tone 0 : frequency */ + case 2: /* tone 1 : frequency */ + case 4: /* tone 2 : frequency */ + R.Period[c] = R.UpdateStep * R.Register[r]; + if (R.Period[c] == 0) R.Period[c] = 0x3fe; + if (r == 4) + { + /* update noise shift frequency */ + if ((R.Register[6] & 0x03) == 0x03) + R.Period[3] = 2 * R.Period[2]; + } + break; + case 1: /* tone 0 : volume */ + case 3: /* tone 1 : volume */ + case 5: /* tone 2 : volume */ + case 7: /* noise : volume */ + R.Volume[c] = R.VolTable[data & 0x0f]; + break; + case 6: /* noise : frequency, mode */ + { + int n = R.Register[6]; + R.NoiseFB = (n & 4)!=0 ? FB_WNOISE : FB_PNOISE; + n &= 3; + /* N/512,N/1024,N/2048,Tone #3 output */ + R.Period[3] = (n == 3) ? 2 * R.Period[2] : (R.UpdateStep << (5+n)); + + /* reset noise shifter */ + // R.RNG = NG_PRESET; + // R.Output[3] = R.RNG & 1; + } + break; + } + } + else + { + int r = R.LastRegister; + int c = r/2; - switch (r) - { - case 0: /* tone 0 : frequency */ - case 2: /* tone 1 : frequency */ - case 4: /* tone 2 : frequency */ - R.Register[r] = (R.Register[r] & 0x0f) | ((data & 0x3f) << 4); - R.Period[c] = R.UpdateStep * R.Register[r]; - if (R.Period[c] == 0) R.Period[c] = 0x3fe; - if (r == 4) - { - /* update noise shift frequency */ - if ((R.Register[6] & 0x03) == 0x03) - R.Period[3] = 2 * R.Period[2]; - } - break; - } + switch (r) + { + case 0: /* tone 0 : frequency */ + case 2: /* tone 1 : frequency */ + case 4: /* tone 2 : frequency */ + R.Register[r] = (R.Register[r] & 0x0f) | ((data & 0x3f) << 4); + R.Period[c] = R.UpdateStep * R.Register[r]; + if (R.Period[c] == 0) R.Period[c] = 0x3fe; + if (r == 4) + { + /* update noise shift frequency */ + if ((R.Register[6] & 0x03) == 0x03) + R.Period[3] = 2 * R.Period[2]; + } + break; } } }; - private static final Mixer.MIXER_Handler SN76496Update = new Mixer.MIXER_Handler() { - public void call(/*Bitu*/int length) { - if ((tandy.last_write+5000) { + if ((tandy.last_write+5000) 0) { - R.Count[i] += R.Period[i]; - if (R.Count[i] > 0) - { - R.Output[i] ^= 1; - if (R.Output[i]!=0) vol[i] += R.Period[i]; - break; - } - R.Count[i] += R.Period[i]; - vol[i] += R.Period[i]; + R.Output[i] ^= 1; + if (R.Output[i]!=0) vol[i] += R.Period[i]; + break; } - if (R.Output[i]!=0) vol[i] -= R.Count[i]; + R.Count[i] += R.Period[i]; + vol[i] += R.Period[i]; } + if (R.Output[i]!=0) vol[i] -= R.Count[i]; + } - left = STEP; - do - { - int nextevent; - + left = STEP; + do + { + int nextevent = Math.min(R.Count[3], left); - if (R.Count[3] < left) nextevent = R.Count[3]; - else nextevent = left; - if (R.Output[3]!=0) vol[3] += R.Count[3]; - R.Count[3] -= nextevent; - if (R.Count[3] <= 0) - { - if ((R.RNG & 1)!=0) R.RNG ^= R.NoiseFB; - R.RNG >>= 1; - R.Output[3] = R.RNG & 1; - R.Count[3] += R.Period[3]; - if (R.Output[3]!=0) vol[3] += R.Period[3]; - } - if (R.Output[3]!=0) vol[3] -= R.Count[3]; + if (R.Output[3]!=0) vol[3] += R.Count[3]; + R.Count[3] -= nextevent; + if (R.Count[3] <= 0) + { + if ((R.RNG & 1)!=0) R.RNG ^= R.NoiseFB; + R.RNG >>= 1; + R.Output[3] = R.RNG & 1; + R.Count[3] += R.Period[3]; + if (R.Output[3]!=0) vol[3] += R.Period[3]; + } + if (R.Output[3]!=0) vol[3] -= R.Count[3]; - left -= nextevent; - } while (left > 0); + left -= nextevent; + } while (left > 0); - out = vol[0] * R.Volume[0] + vol[1] * R.Volume[1] + - vol[2] * R.Volume[2] + vol[3] * R.Volume[3]; + out = vol[0] * R.Volume[0] + vol[1] * R.Volume[1] + + vol[2] * R.Volume[2] + vol[3] * R.Volume[3]; - if (out > MAX_OUTPUT * STEP) out = MAX_OUTPUT * STEP; + if (out > MAX_OUTPUT * STEP) out = MAX_OUTPUT * STEP; - buffer[bufferIndex++] = (/*Bit16s*/short)(out / STEP); + buffer[bufferIndex++] = (/*Bit16s*/short)(out / STEP); - count--; - } - tandy.chan.AddSamples_m16(length,buffer); + count--; } + tandy.chan.AddSamples_m16(length,buffer); }; private static void SN76496_set_clock(int clock) { @@ -279,7 +273,7 @@ private static void SN76496_set_gain(int gain) { gain &= 0xff; /* increase max output basing on gain (0.2 dB per step) */ - out = MAX_OUTPUT / 3; + out = (double) MAX_OUTPUT / 3; while (gain-- > 0) out *= 1.023292992; /* = (10 ^ (0.2/20)) */ @@ -287,7 +281,7 @@ private static void SN76496_set_gain(int gain) { for (i = 0;i < 15;i++) { /* limit volume to avoid clipping */ - if (out > MAX_OUTPUT / 3) R.VolTable[i] = MAX_OUTPUT / 3; + if (out > (double) MAX_OUTPUT / 3) R.VolTable[i] = MAX_OUTPUT / 3; else R.VolTable[i] = (int)out; out /= 1.258925412; /* = 10 ^ (2/20) = 2dB */ @@ -309,12 +303,10 @@ private static boolean TS_Get_Address(/*Bitu*/IntRef tsaddr, /*Bitu*/IntRef tsir } - private static final DMA.DMA_CallBack TandyDAC_DMA_CallBack = new DMA.DMA_CallBack() { - public void call(DMA.DmaChannel chan, int event) { - if (event == DMA.DMAEvent.DMA_REACHED_TC) { - tandy.dac.dma.transfer_done=true; - Pic.PIC_ActivateIRQ(tandy.dac.hw.irq); - } + private static final DMA.DMA_CallBack TandyDAC_DMA_CallBack = (chan, event) -> { + if (event == DMA.DMAEvent.DMA_REACHED_TC) { + tandy.dac.dma.transfer_done=true; + Pic.PIC_ActivateIRQ(tandy.dac.hw.irq); } }; @@ -357,81 +349,79 @@ private static void TandyDACDMAEnabled() { private static void TandyDACDMADisabled() { } - private static final IoHandler.IO_WriteHandler TandyDACWrite = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int data, /*Bitu*/int iolen) { - switch (port) { - case 0xc4: { - /*Bitu*/int oldmode = tandy.dac.mode; - tandy.dac.mode = (/*Bit8u*/short)(data&0xff); - if ((data&3)!=(oldmode&3)) { - TandyDACModeChanged(); - } - if (((data&0x0c)==0x0c) && ((oldmode&0x0c)!=0x0c)) { - TandyDACDMAEnabled(); - } else if (((data&0x0c)!=0x0c) && ((oldmode&0x0c)==0x0c)) { - TandyDACDMADisabled(); - } - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler TandyDACWrite = (port, data, iolen) -> { + switch (port) { + case 0xc4: { + /*Bitu*/int oldmode = tandy.dac.mode; + tandy.dac.mode = (/*Bit8u*/short)(data&0xff); + if ((data&3)!=(oldmode&3)) { + TandyDACModeChanged(); + } + if (((data&0x0c)==0x0c) && ((oldmode&0x0c)!=0x0c)) { + TandyDACDMAEnabled(); + } else if (((data&0x0c)!=0x0c) && ((oldmode&0x0c)==0x0c)) { + TandyDACDMADisabled(); + } + } + break; + case 0xc5: + switch (tandy.dac.mode&3) { + case 0: + // joystick mode break; - case 0xc5: - switch (tandy.dac.mode&3) { - case 0: - // joystick mode - break; - case 1: - tandy.dac.control = (/*Bit8u*/short)(data&0xff); - break; - case 2: - break; - case 3: - // direct output - break; - } + case 1: + tandy.dac.control = (/*Bit8u*/short)(data&0xff); break; - case 0xc6: - tandy.dac.frequency = tandy.dac.frequency & 0xf00 | (/*Bit8u*/short)(data&0xff); - switch (tandy.dac.mode&3) { - case 0: - // joystick mode - break; - case 1: - case 2: - case 3: - TandyDACModeChanged(); - break; - } + case 2: break; - case 0xc7: - tandy.dac.frequency = tandy.dac.frequency & 0x00ff | (((/*Bit8u*/short)(data&0xf))<<8); - tandy.dac.amplitude = (/*Bit8u*/short)(data>>5); - switch (tandy.dac.mode&3) { - case 0: - // joystick mode - break; - case 1: - case 2: - case 3: - TandyDACModeChanged(); - break; - } + case 3: + // direct output + break; + } + break; + case 0xc6: + tandy.dac.frequency = tandy.dac.frequency & 0xf00 | (/*Bit8u*/short)(data&0xff); + switch (tandy.dac.mode&3) { + case 0: + // joystick mode + break; + case 1: + case 2: + case 3: + TandyDACModeChanged(); + break; + } + break; + case 0xc7: + tandy.dac.frequency = tandy.dac.frequency & 0x00ff | (((/*Bit8u*/short)(data&0xf))<<8); + tandy.dac.amplitude = (/*Bit8u*/short)(data>>5); + switch (tandy.dac.mode&3) { + case 0: + // joystick mode + break; + case 1: + case 2: + case 3: + TandyDACModeChanged(); break; } + break; } }; - static private final IoHandler.IO_ReadHandler TandyDACRead = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - switch (port) { - case 0xc4: - return (tandy.dac.mode&0x77) | (tandy.dac.irq_activated ? 0x08 : 0x00); - case 0xc6: - return (/*Bit8u*/short)(tandy.dac.frequency&0xff); - case 0xc7: - return (/*Bit8u*/short)(((tandy.dac.frequency>>8)&0xf) | (tandy.dac.amplitude<<5)); - } - Log.log_msg("Tandy DAC: Read from unknown "+Integer.toString(port,16)); - return 0xff; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler TandyDACRead = (port, iolen) -> { + switch (port) { + case 0xc4: + return (tandy.dac.mode&0x77) | (tandy.dac.irq_activated ? 0x08 : 0x00); + case 0xc6: + return (/*Bit8u*/short)(tandy.dac.frequency&0xff); + case 0xc7: + return (/*Bit8u*/short)(((tandy.dac.frequency>>8)&0xf) | (tandy.dac.amplitude<<5)); } + System.out.println("Tandy DAC: Read from unknown "+Integer.toString(port,16)); + return 0xff; }; private static void TandyDACGenerateDMASound(/*Bitu*/int length) { @@ -446,28 +436,27 @@ private static void TandyDACGenerateDMASound(/*Bitu*/int length) { } } } - - private static final Mixer.MIXER_Handler TandyDACUpdate = new Mixer.MIXER_Handler() { - public void call(/*Bitu*/int length) { - if (tandy.dac.enabled && ((tandy.dac.mode&0x0c)==0x0c)) { - if (!tandy.dac.dma.transfer_done) { - /*Bitu*/int len = length; - TandyDACGenerateDMASound(len); - } else { - for (/*Bitu*/int ct=0; ct < length; ct++) { - tandy.dac.chan.AddSamples_m8(1,tandy.dac.dma.last_sample); - } - } + + /*Bitu*/ + private static final Mixer.MIXER_Handler TandyDACUpdate = length -> { + if (tandy.dac.enabled && ((tandy.dac.mode&0x0c)==0x0c)) { + if (!tandy.dac.dma.transfer_done) { + /*Bitu*/ + TandyDACGenerateDMASound(length); } else { - tandy.dac.chan.AddSilence(); + for (/*Bitu*/int ct=0; ct < length; ct++) { + tandy.dac.chan.AddSamples_m8(1,tandy.dac.dma.last_sample); + } } + } else { + tandy.dac.chan.AddSilence(); } }; - private IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[4]; - private IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[4]; - private Mixer.MixerObject MixerChan = new Mixer.MixerObject(); - private Mixer.MixerObject MixerChanDAC = new Mixer.MixerObject(); + private final IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[4]; + private final IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[4]; + private final Mixer.MixerObject MixerChan = new Mixer.MixerObject(); + private final Mixer.MixerObject MixerChanDAC = new Mixer.MixerObject(); public TandySound(Section configuration) { super(configuration); @@ -564,13 +553,13 @@ public TandySound(Section configuration) { private static TandySound test; - private static Section.SectionFunction TANDYSOUND_ShutDown = new Section.SectionFunction() { + private static final Section.SectionFunction TANDYSOUND_ShutDown = new Section.SectionFunction() { public void call(Section section) { test = null; } }; - public static Section.SectionFunction TANDYSOUND_Init = new Section.SectionFunction() { + public static final Section.SectionFunction TANDYSOUND_Init = new Section.SectionFunction() { public void call(Section section) { test = new TandySound(section); section.AddDestroyFunction(TANDYSOUND_ShutDown,true); diff --git a/jdosbox/src/main/java/jdos/hardware/Timer.java b/jdosbox/src/main/java/jdos/hardware/Timer.java index abdc232e..601c53a0 100644 --- a/jdosbox/src/main/java/jdos/hardware/Timer.java +++ b/jdosbox/src/main/java/jdos/hardware/Timer.java @@ -8,11 +8,13 @@ import jdos.types.LogTypes; import jdos.util.StringHelper; +import java.util.Arrays; + public class Timer extends Module_base { static public final int PIT_TICK_RATE = 1193182; - static public interface TIMER_TickHandler { - public void call(); + public interface TIMER_TickHandler { + void call(); } // FROM pic.pp static private class TickerBlock { @@ -65,12 +67,10 @@ static public void TIMER_AddTick() { } // END FROM pic.cpp - static public int BIN2BCD(/*Bit16u*/int val) { - return val%10 + (((val/10)%10)<<4)+ (((val/100)%10)<<8) + (((val/1000)%10)<<12); + static public void BIN2BCD(/*Bit16u*/int val) { } - static public int BCD2BIN(/*Bit16u*/int val) { - return (val&0x0f) +((val>>4)&0x0f) *10 +((val>>8)&0x0f) *100 +((val>>12)&0x0f) *1000; + static public void BCD2BIN(/*Bit16u*/int val) { } private static class PIT_Block { @@ -94,7 +94,7 @@ private static class PIT_Block { boolean update_count; } - static private PIT_Block[] pit = new PIT_Block[3]; + static private final PIT_Block[] pit = new PIT_Block[3]; static private boolean gate2; static private /*Bit8u*/short latched_timerstatus; @@ -102,7 +102,7 @@ private static class PIT_Block { // reprogrammed. static private boolean latched_timerstatus_locked; - static private Pic.PIC_EventHandler PIT0_Event = new Pic.PIC_EventHandler() { + static private final Pic.PIC_EventHandler PIT0_Event = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { Pic.PIC_ActivateIRQ(0); if (pit[0].mode != 0) { @@ -130,15 +130,14 @@ static boolean counter_output(/*Bitu*/int counter) { switch (p.mode) { case 0: if (p.new_mode) return false; - if (index>p.delay) return true; - else return false; + return index > p.delay; case 2: if (p.new_mode) return true; - index=fmod(index,(double)p.delay); + index=fmod(index, p.delay); return index>0; case 3: if (p.new_mode) return true; - index=fmod(index,(double)p.delay); + index=fmod(index, p.delay); return index*2p.delay) index-=p.delay; p.read_latch=(/*Bit16u*/int)(p.cntr - (index/p.delay)*p.cntr); @@ -240,67 +239,66 @@ static void counter_latch(/*Bitu*/int counter) { } - static private IoHandler.IO_WriteHandler write_latch = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - //Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_ERROR,"port %X write:%X state:%X",port,val,pit[port-0x40].write_state); - /*Bitu*/int counter=port-0x40; - PIT_Block p=pit[counter]; - if(p.bcd == true) BIN2BCD(p.write_latch); + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_latch = (port, val, iolen) -> { + //Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_ERROR,"port %X write:%X state:%X",port,val,pit[port-0x40].write_state); + /*Bitu*/int counter=port-0x40; + PIT_Block p=pit[counter]; + if(p.bcd) BIN2BCD(p.write_latch); - switch (p.write_state) { - case 0: - p.write_latch = p.write_latch | ((val & 0xff) << 8); - p.write_state = 3; - break; - case 3: - p.write_latch = val & 0xff; - p.write_state = 0; - break; - case 1: - p.write_latch = val & 0xff; - break; - case 2: - p.write_latch = (val & 0xff) << 8; + switch (p.write_state) { + case 0: + p.write_latch = p.write_latch | ((val & 0xff) << 8); + p.write_state = 3; + break; + case 3: + p.write_latch = val & 0xff; + p.write_state = 0; + break; + case 1: + p.write_latch = val & 0xff; break; + case 2: + p.write_latch = (val & 0xff) << 8; + break; + } + if (p.bcd) BCD2BIN(p.write_latch); + if (p.write_state != 0) { + if (p.write_latch == 0) { + if (!p.bcd) p.cntr = 0x10000; + else p.cntr=9999; + } else p.cntr = p.write_latch; + + if ((!p.new_mode) && (p.mode == 2) && (counter == 0)) { + // In mode 2 writing another value has no direct effect on the count + // until the old one has run out. This might apply to other modes too. + // This is not fixed for PIT2 yet!! + p.update_count=true; + return; } - if (p.bcd==true) BCD2BIN(p.write_latch); - if (p.write_state != 0) { - if (p.write_latch == 0) { - if (p.bcd == false) p.cntr = 0x10000; - else p.cntr=9999; - } else p.cntr = p.write_latch; - - if ((!p.new_mode) && (p.mode == 2) && (counter == 0)) { - // In mode 2 writing another value has no direct effect on the count - // until the old one has run out. This might apply to other modes too. - // This is not fixed for PIT2 yet!! - p.update_count=true; - return; - } - p.start=Pic.PIC_FullIndex(); - p.delay=(1000.0f/((float)PIT_TICK_RATE/(float)p.cntr)); - - switch (counter) { - case 0x00: /* Timer hooked to IRQ 0 */ - if (p.new_mode || p.mode == 0 ) { - if(p.mode==0) Pic.PIC_RemoveEvents(PIT0_Event); // DoWhackaDo demo - Pic.PIC_AddEvent(PIT0_Event,p.delay); - } else Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_NORMAL,"PIT 0 Timer set without new control word"); - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_NORMAL,"PIT 0 Timer at "+ StringHelper.format(1000.0/p.delay, 4)+" Hz mode "+p.mode); - break; - case 0x02: /* Timer hooked to PC-Speaker */ - // LOG(LOG_PIT,"PIT 2 Timer at %.3g Hz mode %d",PIT_TICK_RATE/(double)p.cntr,p.mode); - PCSpeaker.PCSPEAKER_SetCounter(p.cntr,p.mode); - break; - default: - Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_ERROR,"PIT:Illegal timer selected for writing"); - } - p.new_mode=false; + p.start=Pic.PIC_FullIndex(); + p.delay=(1000.0f/((float)PIT_TICK_RATE/(float)p.cntr)); + + switch (counter) { + case 0x00: /* Timer hooked to IRQ 0 */ + if (p.new_mode || p.mode == 0 ) { + if(p.mode==0) Pic.PIC_RemoveEvents(PIT0_Event); // DoWhackaDo demo + Pic.PIC_AddEvent(PIT0_Event,p.delay); + } else Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_NORMAL,"PIT 0 Timer set without new control word"); + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_NORMAL,"PIT 0 Timer at "+ StringHelper.format(1000.0/p.delay, 4)+" Hz mode "+p.mode); + break; + case 0x02: /* Timer hooked to PC-Speaker */ + // LOG(LOG_PIT,"PIT 2 Timer at %.3g Hz mode %d",PIT_TICK_RATE/(double)p.cntr,p.mode); + PCSpeaker.PCSPEAKER_SetCounter(p.cntr,p.mode); + break; + default: + Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_ERROR,"PIT:Illegal timer selected for writing"); } + p.new_mode=false; } }; - static private IoHandler.IO_ReadHandler read_latch = new IoHandler.IO_ReadHandler() { + static private final IoHandler.IO_ReadHandler read_latch = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { //Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_ERROR,"port read %X",port); /*Bit32u*/int counter=port-0x40; @@ -310,10 +308,10 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { latched_timerstatus_locked = false; ret = latched_timerstatus; } else { - if (pit[counter].go_read_latch == true) + if (pit[counter].go_read_latch) counter_latch(counter); - if( pit[counter].bcd == true) BIN2BCD(pit[counter].read_latch); + if(pit[counter].bcd) BIN2BCD(pit[counter].read_latch); switch (pit[counter].read_state) { case 0: /* read MSB & return to state 3 */ @@ -337,13 +335,13 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { Log.exit("Timer.cpp: error in readlatch"); break; } - if( pit[counter].bcd == true) BCD2BIN(pit[counter].read_latch); + if(pit[counter].bcd) BCD2BIN(pit[counter].read_latch); } return ret; } }; - static private IoHandler.IO_WriteHandler write_p43 = new IoHandler.IO_WriteHandler() { + static private final IoHandler.IO_WriteHandler write_p43 = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { //Log.log(LogTypes.LOG_PIT,LogSeverities.LOG_ERROR,"port 43 %X",val); /*Bitu*/int latch=(val >> 6) & 0x03; @@ -452,8 +450,8 @@ static public void TIMER_SetGate2(boolean in) { gate2 = in; //Set it here so the counter_latch above works } - private IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[4]; - private IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[4]; + private final IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[4]; + private final IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[4]; public Timer(Section configuration) { super(configuration); for (int i=0;i>> 1; @@ -240,7 +239,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int data, /*Bitu*/int iolen) { /* XXX: support wierd bochs semantics ? */ if (h < vbeRegs[VBE_DISPI_INDEX_YRES]) return; - vbeRegs[VBE_DISPI_INDEX_VIRT_WIDTH] = w; + vbeRegs[VBE_DISPI_INDEX_VIRT_WIDTH] = data; vbeRegs[VBE_DISPI_INDEX_VIRT_HEIGHT] = h; vbeLineOffset = lineOffset; } diff --git a/jdosbox/src/main/java/jdos/hardware/VGA.java b/jdosbox/src/main/java/jdos/hardware/VGA.java index 0ffc8cc9..223599c3 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA.java @@ -142,13 +142,13 @@ public static class Delay { double hdend, htotal; double parts; } - public Delay delay = new Delay(); + public final Delay delay = new Delay(); public /*Bitu*/int bpp; public double aspect_ratio; public boolean double_scan; public boolean doublewidth,doubleheight; - public /*Bit8u*/byte[] font = new byte[64*1024]; - public /*Bit8u*/Ptr[] font_tables = new Ptr[2]; + public final /*Bit8u*/byte[] font = new byte[64*1024]; + public final /*Bit8u*/Ptr[] font_tables = new Ptr[2]; public /*Bitu*/boolean blinking; public boolean blink; public boolean char9dot; @@ -158,7 +158,7 @@ public static class Cursor { /*Bit8u*/short count,delay; /*Bit8u*/boolean enabled; } - public Cursor cursor = new Cursor(); + public final Cursor cursor = new Cursor(); public int mode; public boolean vret_triggered; public boolean vga_override; @@ -168,8 +168,8 @@ public static class VGA_HWCURSOR { public /*Bit8u*/short curmode; public /*Bit16u*/int originx, originy; public /*Bit8u*/short fstackpos, bstackpos; - public /*Bit8u*/Ptr forestack = new Ptr(4); - public /*Bit8u*/Ptr backstack = new Ptr(4); + public final /*Bit8u*/Ptr forestack = new Ptr(4); + public final /*Bit8u*/Ptr backstack = new Ptr(4); public /*Bit16u*/int startaddr; public /*Bit8u*/short posx, posy; public /*Bit8u*/short[][] mc=new short[64][64]; @@ -209,15 +209,15 @@ public static class CLK { /*Bit8u*/short n; /*Bit8u*/short m; } - public CLK[] clk = new CLK[4]; - public CLK mclk = new CLK(); + public final CLK[] clk = new CLK[4]; + public final CLK mclk = new CLK(); public static class PLL{ /*Bit8u*/short lock; /*Bit8u*/short cmd; } - public PLL pll = new PLL(); - public VGA_HWCURSOR hgc = new VGA_HWCURSOR(); + public final PLL pll = new PLL(); + public final VGA_HWCURSOR hgc = new VGA_HWCURSOR(); } public static class VGA_HERC { @@ -269,7 +269,7 @@ public static class VGA_Seq { } public static class VGA_Attr { - public /*Bit8u*/short[] palette = new short[16]; + public final /*Bit8u*/short[] palette = new short[16]; public /*Bit8u*/short mode_control; public /*Bit8u*/short horizontal_pel_panning; public /*Bit8u*/short overscan_color; @@ -346,9 +346,9 @@ public VGA_Dac() { public /*Bit8u*/short write_index; public /*Bit8u*/short read_index; public /*Bitu*/int first_changed; - public /*Bit8u*/short[] combine = new short[16]; - public RGBEntry[] rgb = new RGBEntry[0x100]; - public /*Bit16u*/int[] xlat16=new int[256]; + public final /*Bit8u*/short[] combine = new short[16]; + public final RGBEntry[] rgb = new RGBEntry[0x100]; + public final /*Bit16u*/int[] xlat16=new int[256]; } public static class VGA_SVGA { @@ -403,28 +403,28 @@ static public class VGA_LFB { static public class VGA_Type { public int mode; /* The mode the vga system is in */ /*Bit8u*/short misc_output; - public VGA_Draw draw = new VGA_Draw(); - public VGA_Config config = new VGA_Config(); - public VGA_Internal internal = new VGA_Internal(); + public final VGA_Draw draw = new VGA_Draw(); + public final VGA_Config config = new VGA_Config(); + public final VGA_Internal internal = new VGA_Internal(); /* Internal module groups */ - public VGA_Seq seq = new VGA_Seq(); - public VGA_Attr attr = new VGA_Attr(); - public VGA_Crtc crtc = new VGA_Crtc(); - public VGA_Gfx gfx = new VGA_Gfx(); - public VGA_Dac dac = new VGA_Dac(); - public VGA_Latch latch = new VGA_Latch(); - public VGA_S3 s3 = new VGA_S3(); - public VGA_SVGA svga = new VGA_SVGA(); - public VGA_HERC herc = new VGA_HERC(); + public final VGA_Seq seq = new VGA_Seq(); + public final VGA_Attr attr = new VGA_Attr(); + public final VGA_Crtc crtc = new VGA_Crtc(); + public final VGA_Gfx gfx = new VGA_Gfx(); + public final VGA_Dac dac = new VGA_Dac(); + public final VGA_Latch latch = new VGA_Latch(); + public final VGA_S3 s3 = new VGA_S3(); + public final VGA_SVGA svga = new VGA_SVGA(); + public final VGA_HERC herc = new VGA_HERC(); public VGA_TANDY tandy = new VGA_TANDY(); - public VGA_OTHER other = new VGA_OTHER(); - public VGA_Memory mem = new VGA_Memory(); + public final VGA_OTHER other = new VGA_OTHER(); + public final VGA_Memory mem = new VGA_Memory(); public /*Bit32u*/int vmemwrap; /* this is assumed to be power of 2 */ public /*Bit8u*/int fastmem; /* memory for fast (usually 16-color) rendering, always twice as big as vmemsize */ public /*Bit8u*/int fastmem_orgptr; public /*Bit32u*/int vmemsize; public VGA_Changes changes; - public VGA_LFB lfb = new VGA_LFB(); + public final VGA_LFB lfb = new VGA_LFB(); } /* Support for modular SVGA implementation */ @@ -448,29 +448,29 @@ public static class VGA_ModeExtraData { } // Vector function prototypes - public static interface tWritePort { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen); + public interface tWritePort { + void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen); } - public static interface tReadPort { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen); + public interface tReadPort { + /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen); } - public static interface tFinishSetMode { - public void call(/*Bitu*/int crtc_base, VGA_ModeExtraData modeData); + public interface tFinishSetMode { + void call(/*Bitu*/int crtc_base, VGA_ModeExtraData modeData); } - public static interface tDetermineMode { - public void call(); + public interface tDetermineMode { + void call(); } - public static interface tSetClock { - public void call(/*Bitu*/int which,/*Bitu*/int target); + public interface tSetClock { + void call(/*Bitu*/int which,/*Bitu*/int target); } - public static interface tGetClock { - public /*Bitu*/int call(); + public interface tGetClock { + /*Bitu*/int call(); } - public static interface tHWCursorActive { - public boolean call(); + public interface tHWCursorActive { + boolean call(); } - public static interface tAcceptsMode { - public boolean call(/*Bitu*/int modeNo); + public interface tAcceptsMode { + boolean call(/*Bitu*/int modeNo); } public static class SVGA_Driver { @@ -494,17 +494,17 @@ public static class SVGA_Driver { public static VGA_Type vga; public static SVGA_Driver svga; - public static /*Bit32u*/int[] CGA_2_Table=new int[16]; - public static /*Bit32u*/int[] CGA_4_Table=new int[256]; - public static /*Bit32u*/int[] CGA_4_HiRes_Table=new int[256]; - private static /*Bit32u*/int[] CGA_16_Table=new int[256]; - public static /*Bit32u*/int[] TXT_Font_Table=new int[16]; - public static /*Bit32u*/int[] TXT_FG_Table=new int[16]; - public static /*Bit32u*/int[] TXT_BG_Table=new int[16]; - public static /*Bit32u*/int[] ExpandTable=new int[256]; - public static /*Bit32u*/int[][] Expand16Table=new int[4][16]; - public static /*Bit32u*/int[] FillTable=new int[16]; - private static /*Bit32u*/int[] ColorTable=new int[16]; + public static final /*Bit32u*/int[] CGA_2_Table=new int[16]; + public static final /*Bit32u*/int[] CGA_4_Table=new int[256]; + public static final /*Bit32u*/int[] CGA_4_HiRes_Table=new int[256]; + private static final /*Bit32u*/int[] CGA_16_Table=new int[256]; + public static final /*Bit32u*/int[] TXT_Font_Table=new int[16]; + public static final /*Bit32u*/int[] TXT_FG_Table=new int[16]; + public static final /*Bit32u*/int[] TXT_BG_Table=new int[16]; + public static final /*Bit32u*/int[] ExpandTable=new int[256]; + public static final /*Bit32u*/int[][] Expand16Table=new int[4][16]; + public static final /*Bit32u*/int[] FillTable=new int[16]; + private static final /*Bit32u*/int[] ColorTable=new int[16]; public static void VGA_SetModeNow(int mode) { if (vga.mode == mode) return; @@ -607,8 +607,8 @@ public static void VGA_SetCGA2Table(/*Bit8u*/int val0,/*Bit8u*/int val1) { /*Bit8u*/byte[] total={ (byte)val0,(byte)val1}; for (/*Bitu*/int i=0;i<16;i++) { CGA_2_Table[i]= - (total[(i >> 3) & 1] << 0 ) | (total[(i >> 2) & 1] << 8 ) | - (total[(i >> 1) & 1] << 16 ) | (total[(i >> 0) & 1] << 24 ); + (total[(i >> 3) & 1]) | (total[(i >> 2) & 1] << 8 ) | + (total[(i >> 1) & 1] << 16 ) | (total[(i) & 1] << 24 ); } } @@ -616,11 +616,11 @@ public static void VGA_SetCGA4Table(/*Bit8u*/int val0,/*Bit8u*/int val1,/*Bit8u* /*Bit8u*/byte[] total={ (byte)val0,(byte)val1,(byte)val2,(byte)val3}; for (/*Bitu*/int i=0;i<256;i++) { CGA_4_Table[i]= - (total[(i >> 6) & 3] << 0 ) | (total[(i >> 4) & 3] << 8 ) | - (total[(i >> 2) & 3] << 16 ) | (total[(i >> 0) & 3] << 24 ); + (total[(i >> 6) & 3]) | (total[(i >> 4) & 3] << 8 ) | + (total[(i >> 2) & 3] << 16 ) | (total[(i) & 3] << 24 ); CGA_4_HiRes_Table[i]= - (total[((i >> 3) & 1) | ((i >> 6) & 2)] << 0 ) | (total[((i >> 2) & 1) | ((i >> 5) & 2)] << 8 ) | - (total[((i >> 1) & 1) | ((i >> 4) & 2)] << 16 ) | (total[((i >> 0) & 1) | ((i >> 3) & 2)] << 24 ); + (total[((i >> 3) & 1) | ((i >> 6) & 2)]) | (total[((i >> 2) & 1) | ((i >> 5) & 2)] << 8 ) | + (total[((i >> 1) & 1) | ((i >> 4) & 2)] << 16 ) | (total[((i) & 1) | ((i >> 3) & 2)] << 24 ); } } @@ -646,7 +646,7 @@ private static void SVGA_Setup_Driver() { } } - public static Section.SectionFunction VGA_Init = new Section.SectionFunction() { + public static final Section.SectionFunction VGA_Init = new Section.SectionFunction() { public void call(Section sec) { if (Dosbox.svgaCard >= SVGACards.SVGA_QEMU) return; diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_attr.java b/jdosbox/src/main/java/jdos/hardware/VGA_attr.java index d561780e..6e5f9d42 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_attr.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_attr.java @@ -27,197 +27,193 @@ public static void VGA_ATTR_SetPalette(/*Bit8u*/int index,/*Bit8u*/int val) { VGA_dac.VGA_DAC_CombineColor(index,val); } - private static IoHandler.IO_ReadHandler read_p3c0 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - // Wcharts, Win 3.11 & 95 SVGA - /*Bitu*/int retval = VGA.vga.attr.index & 0x1f; - if (VGA.vga.attr.disabled==0) retval |= 0x20; - return retval; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3c0 = (port, iolen) -> { + // Wcharts, Win 3.11 & 95 SVGA + /*Bitu*/int retval = VGA.vga.attr.index & 0x1f; + if (VGA.vga.attr.disabled==0) retval |= 0x20; + return retval; }; - private static IoHandler.IO_WriteHandler write_p3c0 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - if (!VGA.vga.internal.attrindex) { - VGA.vga.attr.index=(short)(val & 0x1F); - VGA.vga.internal.attrindex=true; - if ((val & 0x20)!=0) VGA.vga.attr.disabled &= ~1; - else VGA.vga.attr.disabled |= 1; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p3c0 = (port, val, iolen) -> { + if (!VGA.vga.internal.attrindex) { + VGA.vga.attr.index=(short)(val & 0x1F); + VGA.vga.internal.attrindex=true; + if ((val & 0x20)!=0) VGA.vga.attr.disabled &= ~1; + else VGA.vga.attr.disabled |= 1; + /* + 0-4 Address of data register to write to port 3C0h or read from port 3C1h + 5 If set screen output is enabled and the palette can not be modified, + if clear screen output is disabled and the palette can be modified. + */ + } else { + VGA.vga.internal.attrindex=false; + switch (VGA.vga.attr.index) { + /* Palette */ + case 0x00: case 0x01: case 0x02: case 0x03: + case 0x04: case 0x05: case 0x06: case 0x07: + case 0x08: case 0x09: case 0x0a: case 0x0b: + case 0x0c: case 0x0d: case 0x0e: case 0x0f: + if ((VGA.vga.attr.disabled & 0x1)!=0) VGA_ATTR_SetPalette(VGA.vga.attr.index,(/*Bit8u*/short)val); /* - 0-4 Address of data register to write to port 3C0h or read from port 3C1h - 5 If set screen output is enabled and the palette can not be modified, - if clear screen output is disabled and the palette can be modified. + 0-5 Index into the 256 color DAC table. May be modified by 3C0h index + 10h and 14h. */ - return; - } else { - VGA.vga.internal.attrindex=false; - switch (VGA.vga.attr.index) { - /* Palette */ - case 0x00: case 0x01: case 0x02: case 0x03: - case 0x04: case 0x05: case 0x06: case 0x07: - case 0x08: case 0x09: case 0x0a: case 0x0b: - case 0x0c: case 0x0d: case 0x0e: case 0x0f: - if ((VGA.vga.attr.disabled & 0x1)!=0) VGA_ATTR_SetPalette(VGA.vga.attr.index,(/*Bit8u*/short)val); - /* - 0-5 Index into the 256 color DAC table. May be modified by 3C0h index - 10h and 14h. - */ - break; - case 0x10: { /* Mode Control Register */ - if (!Dosbox.IS_VGA_ARCH()) val&=0x1f; // not really correct, but should do it - /*Bitu*/int difference = VGA.vga.attr.mode_control^val; - VGA.vga.attr.mode_control=(short)val; + break; + case 0x10: { /* Mode Control Register */ + if (!Dosbox.IS_VGA_ARCH()) val&=0x1f; // not really correct, but should do it + /*Bitu*/int difference = VGA.vga.attr.mode_control^val; + VGA.vga.attr.mode_control=(short)val; - if ((difference & 0x80)!=0) { - for (/*Bit8u*/int i=0;i<0x10;i++) - VGA_ATTR_SetPalette(i,VGA.vga.attr.palette[i]); - } - if ((difference & 0x08)!=0) - VGA_draw.VGA_SetBlinking(val & 0x8); + if ((difference & 0x80)!=0) { + for (/*Bit8u*/int i=0;i<0x10;i++) + VGA_ATTR_SetPalette(i,VGA.vga.attr.palette[i]); + } + if ((difference & 0x08)!=0) + VGA_draw.VGA_SetBlinking(val & 0x8); - if ((difference & 0x41)!=0) - VGA.VGA_DetermineMode(); + if ((difference & 0x41)!=0) + VGA.VGA_DetermineMode(); - if ((difference & 0x04)!=0) { - // recompute the panning value - if(VGA.vga.mode==VGA.M_TEXT) { - /*Bit8u*/int pan_reg = VGA.vga.attr.horizontal_pel_panning; - if (pan_reg > 7) - VGA.vga.config.pel_panning=0; - else if ((val & 0x4)!=0) // 9-dot wide characters - VGA.vga.config.pel_panning=(short)(pan_reg+1); - else // 8-dot characters - VGA.vga.config.pel_panning=(short)pan_reg; - } + if ((difference & 0x04)!=0) { + // recompute the panning value + if(VGA.vga.mode==VGA.M_TEXT) { + /*Bit8u*/int pan_reg = VGA.vga.attr.horizontal_pel_panning; + if (pan_reg > 7) + VGA.vga.config.pel_panning=0; + else if ((val & 0x4)!=0) // 9-dot wide characters + VGA.vga.config.pel_panning=(short)(pan_reg+1); + else // 8-dot characters + VGA.vga.config.pel_panning=(short)pan_reg; } - - /* - 0 Graphics mode if set, Alphanumeric mode else. - 1 Monochrome mode if set, color mode else. - 2 9-bit wide characters if set. - The 9th bit of characters C0h-DFh will be the same as - the 8th bit. Otherwise it will be the background color. - 3 If set Attribute bit 7 is blinking, else high intensity. - 5 If set the PEL panning register (3C0h index 13h) is temporarily set - to 0 from when the line compare causes a wrap around until the next - vertical retrace when the register is automatically reloaded with - the old value, else the PEL panning register ignores line compares. - 6 If set pixels are 8 bits wide. Used in 256 color modes. - 7 If set bit 4-5 of the index into the DAC table are taken from port - 3C0h index 14h bit 0-1, else the bits in the palette register are - used. - */ - break; } - case 0x11: /* Overscan Color Register */ - VGA.vga.attr.overscan_color=(/*Bit8u*/short)val; - /* 0-5 Color of screen border. Color is defined as in the palette registers. */ - break; - case 0x12: /* Color Plane Enable Register */ - /* Why disable colour planes? */ - VGA.vga.attr.color_plane_enable=(/*Bit8u*/short)val; - /* - 0 Bit plane 0 is enabled if set. - 1 Bit plane 1 is enabled if set. - 2 Bit plane 2 is enabled if set. - 3 Bit plane 3 is enabled if set. - 4-5 Video Status MUX. Diagnostics use only. - Two attribute bits appear on bits 4 and 5 of the Input Status - Register 1 (3dAh). 0: Bit 2/0, 1: Bit 5/4, 2: bit 3/1, 3: bit 7/6 - */ - break; - case 0x13: /* Horizontal PEL Panning Register */ - VGA.vga.attr.horizontal_pel_panning=(short)(val & 0xF); - switch (VGA.vga.mode) { - case VGA.M_TEXT: - if ((val==0x7) && (Dosbox.svgaCard==SVGACards.SVGA_None)) VGA.vga.config.pel_panning=7; - if (val>0x7) VGA.vga.config.pel_panning=0; - else VGA.vga.config.pel_panning=(/*Bit8u*/short)(val+1); - break; - case VGA.M_VGA: - case VGA.M_LIN8: - VGA.vga.config.pel_panning=(short)((val & 0x7)/2); - break; - case VGA.M_LIN16: - default: - VGA.vga.config.pel_panning=(short)((val & 0x7)); - } - if (Dosbox.machine==MachineType.MCH_EGA) { - // On the EGA panning can be programmed for every scanline: - VGA.vga.draw.panning = VGA.vga.config.pel_panning; - } - /* - 0-3 Indicates number of pixels to shift the display left - Value 9bit textmode 256color mode Other modes - 0 1 0 0 - 1 2 n/a 1 - 2 3 1 2 - 3 4 n/a 3 - 4 5 2 4 - 5 6 n/a 5 - 6 7 3 6 - 7 8 n/a 7 - 8 0 n/a n/a - */ + + /* + 0 Graphics mode if set, Alphanumeric mode else. + 1 Monochrome mode if set, color mode else. + 2 9-bit wide characters if set. + The 9th bit of characters C0h-DFh will be the same as + the 8th bit. Otherwise it will be the background color. + 3 If set Attribute bit 7 is blinking, else high intensity. + 5 If set the PEL panning register (3C0h index 13h) is temporarily set + to 0 from when the line compare causes a wrap around until the next + vertical retrace when the register is automatically reloaded with + the old value, else the PEL panning register ignores line compares. + 6 If set pixels are 8 bits wide. Used in 256 color modes. + 7 If set bit 4-5 of the index into the DAC table are taken from port + 3C0h index 14h bit 0-1, else the bits in the palette register are + used. + */ + break; + } + case 0x11: /* Overscan Color Register */ + VGA.vga.attr.overscan_color=(/*Bit8u*/short)val; + /* 0-5 Color of screen border. Color is defined as in the palette registers. */ + break; + case 0x12: /* Color Plane Enable Register */ + /* Why disable colour planes? */ + VGA.vga.attr.color_plane_enable=(/*Bit8u*/short)val; + /* + 0 Bit plane 0 is enabled if set. + 1 Bit plane 1 is enabled if set. + 2 Bit plane 2 is enabled if set. + 3 Bit plane 3 is enabled if set. + 4-5 Video Status MUX. Diagnostics use only. + Two attribute bits appear on bits 4 and 5 of the Input Status + Register 1 (3dAh). 0: Bit 2/0, 1: Bit 5/4, 2: bit 3/1, 3: bit 7/6 + */ + break; + case 0x13: /* Horizontal PEL Panning Register */ + VGA.vga.attr.horizontal_pel_panning=(short)(val & 0xF); + switch (VGA.vga.mode) { + case VGA.M_TEXT: + if ((val==0x7) && (Dosbox.svgaCard==SVGACards.SVGA_None)) VGA.vga.config.pel_panning=7; + if (val>0x7) VGA.vga.config.pel_panning=0; + else VGA.vga.config.pel_panning=(/*Bit8u*/short)(val+1); break; - case 0x14: /* Color Select Register */ - if (!Dosbox.IS_VGA_ARCH()) { - VGA.vga.attr.color_select=0; - break; - } - if ((VGA.vga.attr.color_select ^ val)!=0) { - VGA.vga.attr.color_select=(/*Bit8u*/short)val; - for (/*Bit8u*/short i=0;i<0x10;i++) { - VGA_ATTR_SetPalette(i,VGA.vga.attr.palette[i]); - } - } - /* - 0-1 If 3C0h index 10h bit 7 is set these 2 bits are used as bits 4-5 of - the index into the DAC table. - 2-3 These 2 bits are used as bit 6-7 of the index into the DAC table - except in 256 color mode. - Note: this register does not affect 256 color modes. - */ + case VGA.M_VGA: + case VGA.M_LIN8: + VGA.vga.config.pel_panning=(short)((val & 0x7)/2); break; + case VGA.M_LIN16: default: - if (VGA.svga.write_p3c0!=null) { - VGA.svga.write_p3c0.call(VGA.vga.attr.index, val, iolen); - break; + VGA.vga.config.pel_panning=(short)((val & 0x7)); + } + if (Dosbox.machine==MachineType.MCH_EGA) { + // On the EGA panning can be programmed for every scanline: + VGA.vga.draw.panning = VGA.vga.config.pel_panning; + } + /* + 0-3 Indicates number of pixels to shift the display left + Value 9bit textmode 256color mode Other modes + 0 1 0 0 + 1 2 n/a 1 + 2 3 1 2 + 3 4 n/a 3 + 4 5 2 4 + 5 6 n/a 5 + 6 7 3 6 + 7 8 n/a 7 + 8 0 n/a n/a + */ + break; + case 0x14: /* Color Select Register */ + if (!Dosbox.IS_VGA_ARCH()) { + VGA.vga.attr.color_select=0; + break; + } + if ((VGA.vga.attr.color_select ^ val)!=0) { + VGA.vga.attr.color_select=(/*Bit8u*/short)val; + for (/*Bit8u*/short i=0;i<0x10;i++) { + VGA_ATTR_SetPalette(i,VGA.vga.attr.palette[i]); } - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:ATTR:Write to unkown Index "+Integer.toString(VGA.vga.attr.index,16)); + } + /* + 0-1 If 3C0h index 10h bit 7 is set these 2 bits are used as bits 4-5 of + the index into the DAC table. + 2-3 These 2 bits are used as bit 6-7 of the index into the DAC table + except in 256 color mode. + Note: this register does not affect 256 color modes. + */ + break; + default: + if (VGA.svga.write_p3c0!=null) { + VGA.svga.write_p3c0.call(VGA.vga.attr.index, val, iolen); break; } + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:ATTR:Write to unkown Index "+Integer.toString(VGA.vga.attr.index,16)); + break; } } }; - private static IoHandler.IO_ReadHandler read_p3c1 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - // vga.internal.attrindex=false; - switch (VGA.vga.attr.index) { - /* Palette */ - case 0x00: case 0x01: case 0x02: case 0x03: - case 0x04: case 0x05: case 0x06: case 0x07: - case 0x08: case 0x09: case 0x0a: case 0x0b: - case 0x0c: case 0x0d: case 0x0e: case 0x0f: - return VGA.vga.attr.palette[VGA.vga.attr.index]; - case 0x10: /* Mode Control Register */ - return VGA.vga.attr.mode_control; - case 0x11: /* Overscan Color Register */ - return VGA.vga.attr.overscan_color; - case 0x12: /* Color Plane Enable Register */ - return VGA.vga.attr.color_plane_enable; - case 0x13: /* Horizontal PEL Panning Register */ - return VGA.vga.attr.horizontal_pel_panning; - case 0x14: /* Color Select Register */ - return VGA.vga.attr.color_select; - default: - if (VGA.svga.read_p3c1!=null) - return VGA.svga.read_p3c1.call(VGA.vga.attr.index, iolen); - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:Read from unkown Index "+Integer.toString(VGA.vga.attr.index,16)); - } - return 0; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3c1 = (port, iolen) -> { + // vga.internal.attrindex=false; + switch (VGA.vga.attr.index) { + /* Palette */ + case 0x00: case 0x01: case 0x02: case 0x03: + case 0x04: case 0x05: case 0x06: case 0x07: + case 0x08: case 0x09: case 0x0a: case 0x0b: + case 0x0c: case 0x0d: case 0x0e: case 0x0f: + return VGA.vga.attr.palette[VGA.vga.attr.index]; + case 0x10: /* Mode Control Register */ + return VGA.vga.attr.mode_control; + case 0x11: /* Overscan Color Register */ + return VGA.vga.attr.overscan_color; + case 0x12: /* Color Plane Enable Register */ + return VGA.vga.attr.color_plane_enable; + case 0x13: /* Horizontal PEL Panning Register */ + return VGA.vga.attr.horizontal_pel_panning; + case 0x14: /* Color Select Register */ + return VGA.vga.attr.color_select; + default: + if (VGA.svga.read_p3c1!=null) + return VGA.svga.read_p3c1.call(VGA.vga.attr.index, iolen); + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:Read from unkown Index "+Integer.toString(VGA.vga.attr.index,16)); } + return 0; }; public static void VGA_SetupAttr() { diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_crtc.java b/jdosbox/src/main/java/jdos/hardware/VGA_crtc.java index 73c6b90e..86d505e5 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_crtc.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_crtc.java @@ -8,290 +8,243 @@ import jdos.types.SVGACards; public class VGA_crtc { - public static IoHandler.IO_WriteHandler vga_write_p3d4 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.crtc.index=(short)val; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_WriteHandler vga_write_p3d4 = (port, val, iolen) -> VGA.vga.crtc.index=(short)val; - public static IoHandler.IO_ReadHandler vga_read_p3d4 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.crtc.index; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_ReadHandler vga_read_p3d4 = (port, iolen) -> VGA.vga.crtc.index; - public static IoHandler.IO_WriteHandler vga_write_p3d5 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - // if (VGA.vga.crtc.index)>0x18) LOG_MSG("VGA CRCT write %X to reg %X",val,VGA.vga.crtc.index)); - switch(VGA.vga.crtc.index) { - case 0x00: /* Horizontal Total Register */ - if (VGA.vga.crtc.read_only) break; - VGA.vga.crtc.horizontal_total=(short)val; - /* 0-7 Horizontal Total Character Clocks-5 */ - break; - case 0x01: /* Horizontal Display End Register */ - if (VGA.vga.crtc.read_only) break; - if (val != (VGA.vga.crtc.horizontal_display_end & 0xFF)) { - VGA.vga.crtc.horizontal_display_end=(byte)val; - VGA.VGA_StartResize(); - } - /* 0-7 Number of Character Clocks Displayed -1 */ - break; - case 0x02: /* Start Horizontal Blanking Register */ - if (VGA.vga.crtc.read_only) break; - VGA.vga.crtc.start_horizontal_blanking=(short)val; - /* 0-7 The count at which Horizontal Blanking starts */ - break; - case 0x03: /* End Horizontal Blanking Register */ - if (VGA.vga.crtc.read_only) break; - VGA.vga.crtc.end_horizontal_blanking=(short)val; - /* - 0-4 Horizontal Blanking ends when the last 6 bits of the character - counter equals this field. Bit 5 is at 3d4h index 5 bit 7. - 5-6 Number of character clocks to delay start of display after Horizontal - Total has been reached. - 7 Access to Vertical Retrace registers if set. If clear reads to 3d4h - index 10h and 11h access the Lightpen read back registers ?? - */ - break; - case 0x04: /* Start Horizontal Retrace Register */ - if (VGA.vga.crtc.read_only) break; - VGA.vga.crtc.start_horizontal_retrace=(short)val; - /* 0-7 Horizontal Retrace starts when the Character Counter reaches this value. */ - break; - case 0x05: /* End Horizontal Retrace Register */ - if (VGA.vga.crtc.read_only) break; - VGA.vga.crtc.end_horizontal_retrace=(short)val; - /* - 0-4 Horizontal Retrace ends when the last 5 bits of the character counter - equals this value. - 5-6 Number of character clocks to delay start of display after Horizontal - Retrace. - 7 bit 5 of the End Horizontal Blanking count (See 3d4h index 3 bit 0-4) - */ - break; - case 0x06: /* Vertical Total Register */ - if (VGA.vga.crtc.read_only) break; - if (val != VGA.vga.crtc.vertical_total) { - VGA.vga.crtc.vertical_total=(short)val; + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_WriteHandler vga_write_p3d5 = (port, val, iolen) -> { + // if (VGA.vga.crtc.index)>0x18) LOG_MSG("VGA CRCT write %X to reg %X",val,VGA.vga.crtc.index)); + switch(VGA.vga.crtc.index) { + case 0x00: /* Horizontal Total Register */ + if (VGA.vga.crtc.read_only) break; + VGA.vga.crtc.horizontal_total=(short)val; + /* 0-7 Horizontal Total Character Clocks-5 */ + break; + case 0x01: /* Horizontal Display End Register */ + if (VGA.vga.crtc.read_only) break; + if (val != (VGA.vga.crtc.horizontal_display_end & 0xFF)) { + VGA.vga.crtc.horizontal_display_end=(byte)val; + VGA.VGA_StartResize(); + } + /* 0-7 Number of Character Clocks Displayed -1 */ + break; + case 0x02: /* Start Horizontal Blanking Register */ + if (VGA.vga.crtc.read_only) break; + VGA.vga.crtc.start_horizontal_blanking=(short)val; + /* 0-7 The count at which Horizontal Blanking starts */ + break; + case 0x03: /* End Horizontal Blanking Register */ + if (VGA.vga.crtc.read_only) break; + VGA.vga.crtc.end_horizontal_blanking=(short)val; + /* + 0-4 Horizontal Blanking ends when the last 6 bits of the character + counter equals this field. Bit 5 is at 3d4h index 5 bit 7. + 5-6 Number of character clocks to delay start of display after Horizontal + Total has been reached. + 7 Access to Vertical Retrace registers if set. If clear reads to 3d4h + index 10h and 11h access the Lightpen read back registers ?? + */ + break; + case 0x04: /* Start Horizontal Retrace Register */ + if (VGA.vga.crtc.read_only) break; + VGA.vga.crtc.start_horizontal_retrace=(short)val; + /* 0-7 Horizontal Retrace starts when the Character Counter reaches this value. */ + break; + case 0x05: /* End Horizontal Retrace Register */ + if (VGA.vga.crtc.read_only) break; + VGA.vga.crtc.end_horizontal_retrace=(short)val; + /* + 0-4 Horizontal Retrace ends when the last 5 bits of the character counter + equals this value. + 5-6 Number of character clocks to delay start of display after Horizontal + Retrace. + 7 bit 5 of the End Horizontal Blanking count (See 3d4h index 3 bit 0-4) + */ + break; + case 0x06: /* Vertical Total Register */ + if (VGA.vga.crtc.read_only) break; + if (val != VGA.vga.crtc.vertical_total) { + VGA.vga.crtc.vertical_total=(short)val; + VGA.VGA_StartResize(); + } + /* 0-7 Lower 8 bits of the Vertical Total. Bit 8 is found in 3d4h index 7 + bit 0. Bit 9 is found in 3d4h index 7 bit 5. + Note: For the VGA this value is the number of scan lines in the display -2. + */ + break; + case 0x07: /* Overflow Register */ + //Line compare bit ignores read only */ + VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x6ff) | (val & 0x10) << 4; + if (VGA.vga.crtc.read_only) break; + if ((((VGA.vga.crtc.overflow & 0xFF) ^ val) & 0xd6)!=0) { + VGA.vga.crtc.overflow=(byte)val; + VGA.VGA_StartResize(); + } else VGA.vga.crtc.overflow=(byte)val; + /* + 0 Bit 8 of Vertical Total (3d4h index 6) + 1 Bit 8 of Vertical Display End (3d4h index 12h) + 2 Bit 8 of Vertical Retrace Start (3d4h index 10h) + 3 Bit 8 of Start Vertical Blanking (3d4h index 15h) + 4 Bit 8 of Line Compare Register (3d4h index 18h) + 5 Bit 9 of Vertical Total (3d4h index 6) + 6 Bit 9 of Vertical Display End (3d4h index 12h) + 7 Bit 9 of Vertical Retrace Start (3d4h index 10h) + */ + break; + case 0x08: /* Preset Row Scan Register */ + VGA.vga.crtc.preset_row_scan=(short)val; + VGA.vga.config.hlines_skip=(short)(val&31); + if (Dosbox.IS_VGA_ARCH()) VGA.vga.config.bytes_skip=(short)((val>>5)&3); + else VGA.vga.config.bytes_skip=0; + // LOG_DEBUG("Skip lines %d bytes %d",vga.config.hlines_skip,vga.config.bytes_skip); + /* + 0-4 Number of lines we have scrolled down in the first character row. + Provides Smooth Vertical Scrolling.b + 5-6 Number of bytes to skip at the start of scanline. Provides Smooth + Horizontal Scrolling together with the Horizontal Panning Register + (3C0h index 13h). + */ + break; + case 0x09: /* Maximum Scan Line Register */ + if (Dosbox.IS_VGA_ARCH()) + VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x5ff)|(val&0x40)<<3; + + if (Dosbox.IS_VGA_ARCH() && (Dosbox.svgaCard== SVGACards.SVGA_None) && (VGA.vga.mode==VGA.M_EGA || VGA.vga.mode==VGA.M_VGA)) { + // in vgaonly mode we take special care of line repeats (excluding CGA modes) + if (((VGA.vga.crtc.maximum_scan_line ^ val) & 0x20)!=0) { + VGA.vga.crtc.maximum_scan_line=(byte)val; VGA.VGA_StartResize(); + } else { + VGA.vga.crtc.maximum_scan_line=(byte)val; } - /* 0-7 Lower 8 bits of the Vertical Total. Bit 8 is found in 3d4h index 7 - bit 0. Bit 9 is found in 3d4h index 7 bit 5. - Note: For the VGA this value is the number of scan lines in the display -2. - */ - break; - case 0x07: /* Overflow Register */ - //Line compare bit ignores read only */ - VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x6ff) | (val & 0x10) << 4; - if (VGA.vga.crtc.read_only) break; - if ((((VGA.vga.crtc.overflow & 0xFF) ^ val) & 0xd6)!=0) { - VGA.vga.crtc.overflow=(byte)val; + VGA.vga.draw.address_line_total = (val &0x1F) + 1; + if ((val&0x80)!=0) VGA.vga.draw.address_line_total*=2; + } else { + if (((VGA.vga.crtc.maximum_scan_line ^ val) & 0xbf)!=0) { + VGA.vga.crtc.maximum_scan_line=(byte)val; VGA.VGA_StartResize(); - } else VGA.vga.crtc.overflow=(byte)val; - /* - 0 Bit 8 of Vertical Total (3d4h index 6) - 1 Bit 8 of Vertical Display End (3d4h index 12h) - 2 Bit 8 of Vertical Retrace Start (3d4h index 10h) - 3 Bit 8 of Start Vertical Blanking (3d4h index 15h) - 4 Bit 8 of Line Compare Register (3d4h index 18h) - 5 Bit 9 of Vertical Total (3d4h index 6) - 6 Bit 9 of Vertical Display End (3d4h index 12h) - 7 Bit 9 of Vertical Retrace Start (3d4h index 10h) - */ - break; - case 0x08: /* Preset Row Scan Register */ - VGA.vga.crtc.preset_row_scan=(short)val; - VGA.vga.config.hlines_skip=(short)(val&31); - if (Dosbox.IS_VGA_ARCH()) VGA.vga.config.bytes_skip=(short)((val>>5)&3); - else VGA.vga.config.bytes_skip=0; - // LOG_DEBUG("Skip lines %d bytes %d",vga.config.hlines_skip,vga.config.bytes_skip); - /* - 0-4 Number of lines we have scrolled down in the first character row. - Provides Smooth Vertical Scrolling.b - 5-6 Number of bytes to skip at the start of scanline. Provides Smooth - Horizontal Scrolling together with the Horizontal Panning Register - (3C0h index 13h). - */ - break; - case 0x09: /* Maximum Scan Line Register */ - if (Dosbox.IS_VGA_ARCH()) - VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x5ff)|(val&0x40)<<3; - - if (Dosbox.IS_VGA_ARCH() && (Dosbox.svgaCard== SVGACards.SVGA_None) && (VGA.vga.mode==VGA.M_EGA || VGA.vga.mode==VGA.M_VGA)) { - // in vgaonly mode we take special care of line repeats (excluding CGA modes) - if (((VGA.vga.crtc.maximum_scan_line ^ val) & 0x20)!=0) { - VGA.vga.crtc.maximum_scan_line=(byte)val; - VGA.VGA_StartResize(); - } else { - VGA.vga.crtc.maximum_scan_line=(byte)val; - } - VGA.vga.draw.address_line_total = (val &0x1F) + 1; - if ((val&0x80)!=0) VGA.vga.draw.address_line_total*=2; } else { - if (((VGA.vga.crtc.maximum_scan_line ^ val) & 0xbf)!=0) { - VGA.vga.crtc.maximum_scan_line=(byte)val; - VGA.VGA_StartResize(); - } else { - VGA.vga.crtc.maximum_scan_line=(byte)val; - } + VGA.vga.crtc.maximum_scan_line=(byte)val; } - /* - 0-4 Number of scan lines in a character row -1. In graphics modes this is - the number of times (-1) the line is displayed before passing on to - the next line (0: normal, 1: double, 2: triple...). - This is independent of bit 7, except in CGA modes which seems to - require this field to be 1 and bit 7 to be set to work. - 5 Bit 9 of Start Vertical Blanking - 6 Bit 9 of Line Compare Register - 7 Doubles each scan line if set. I.e. displays 200 lines on a 400 display. - */ - break; - case 0x0A: /* Cursor Start Register */ - VGA.vga.crtc.cursor_start=(short)val; - VGA.vga.draw.cursor.sline=(short)(val&0x1f); - if (Dosbox.IS_VGA_ARCH()) VGA.vga.draw.cursor.enabled=(val&0x20)==0; - else VGA.vga.draw.cursor.enabled=true; - /* - 0-4 First scanline of cursor within character. - 5 Turns Cursor off if set - */ - break; - case 0x0B: /* Cursor End Register */ - VGA.vga.crtc.cursor_end=(short)val; - VGA.vga.draw.cursor.eline=(short)(val&0x1f); - VGA.vga.draw.cursor.delay=(short)((val>>5)&0x3); + } + /* + 0-4 Number of scan lines in a character row -1. In graphics modes this is + the number of times (-1) the line is displayed before passing on to + the next line (0: normal, 1: double, 2: triple...). + This is independent of bit 7, except in CGA modes which seems to + require this field to be 1 and bit 7 to be set to work. + 5 Bit 9 of Start Vertical Blanking + 6 Bit 9 of Line Compare Register + 7 Doubles each scan line if set. I.e. displays 200 lines on a 400 display. + */ + break; + case 0x0A: /* Cursor Start Register */ + VGA.vga.crtc.cursor_start=(short)val; + VGA.vga.draw.cursor.sline=(short)(val&0x1f); + if (Dosbox.IS_VGA_ARCH()) VGA.vga.draw.cursor.enabled=(val&0x20)==0; + else VGA.vga.draw.cursor.enabled=true; + /* + 0-4 First scanline of cursor within character. + 5 Turns Cursor off if set + */ + break; + case 0x0B: /* Cursor End Register */ + VGA.vga.crtc.cursor_end=(short)val; + VGA.vga.draw.cursor.eline=(short)(val&0x1f); + VGA.vga.draw.cursor.delay=(short)((val>>5)&0x3); - /* - 0-4 Last scanline of cursor within character - 5-6 Delay of cursor data in character clocks. - */ - break; - case 0x0C: /* Start Address High Register */ - VGA.vga.crtc.start_address_high=(short)val; - VGA.vga.config.display_start=(VGA.vga.config.display_start & 0xFF00FF)| (val << 8); - /* 0-7 Upper 8 bits of the start address of the display buffer */ - break; - case 0x0D: /* Start Address Low Register */ - VGA.vga.crtc.start_address_low=(short)val; - VGA.vga.config.display_start=(VGA.vga.config.display_start & 0xFFFF00)| val; - /* 0-7 Lower 8 bits of the start address of the display buffer */ - break; - case 0x0E: /*Cursor Location High Register */ - VGA.vga.crtc.cursor_location_high=(short)val; - VGA.vga.config.cursor_start&=0xff00ff; - VGA.vga.config.cursor_start|=val << 8; - /* 0-7 Upper 8 bits of the address of the cursor */ - break; - case 0x0F: /* Cursor Location Low Register */ - //TODO update cursor on screen - VGA.vga.crtc.cursor_location_low=(short)val; - VGA.vga.config.cursor_start&=0xffff00; - VGA.vga.config.cursor_start|=val; - /* 0-7 Lower 8 bits of the address of the cursor */ - break; - case 0x10: /* Vertical Retrace Start Register */ - VGA.vga.crtc.vertical_retrace_start=(short)val; - /* - 0-7 Lower 8 bits of Vertical Retrace Start. Vertical Retrace starts when - the line counter reaches this value. Bit 8 is found in 3d4h index 7 - bit 2. Bit 9 is found in 3d4h index 7 bit 7. - */ - break; - case 0x11: /* Vertical Retrace End Register */ - VGA.vga.crtc.vertical_retrace_end=(short)val; + /* + 0-4 Last scanline of cursor within character + 5-6 Delay of cursor data in character clocks. + */ + break; + case 0x0C: /* Start Address High Register */ + VGA.vga.crtc.start_address_high=(short)val; + VGA.vga.config.display_start=(VGA.vga.config.display_start & 0xFF00FF)| (val << 8); + /* 0-7 Upper 8 bits of the start address of the display buffer */ + break; + case 0x0D: /* Start Address Low Register */ + VGA.vga.crtc.start_address_low=(short)val; + VGA.vga.config.display_start=(VGA.vga.config.display_start & 0xFFFF00)| val; + /* 0-7 Lower 8 bits of the start address of the display buffer */ + break; + case 0x0E: /*Cursor Location High Register */ + VGA.vga.crtc.cursor_location_high=(short)val; + VGA.vga.config.cursor_start&=0xff00ff; + VGA.vga.config.cursor_start|=val << 8; + /* 0-7 Upper 8 bits of the address of the cursor */ + break; + case 0x0F: /* Cursor Location Low Register */ + //TODO update cursor on screen + VGA.vga.crtc.cursor_location_low=(short)val; + VGA.vga.config.cursor_start&=0xffff00; + VGA.vga.config.cursor_start|=val; + /* 0-7 Lower 8 bits of the address of the cursor */ + break; + case 0x10: /* Vertical Retrace Start Register */ + VGA.vga.crtc.vertical_retrace_start=(short)val; + /* + 0-7 Lower 8 bits of Vertical Retrace Start. Vertical Retrace starts when + the line counter reaches this value. Bit 8 is found in 3d4h index 7 + bit 2. Bit 9 is found in 3d4h index 7 bit 7. + */ + break; + case 0x11: /* Vertical Retrace End Register */ + VGA.vga.crtc.vertical_retrace_end=(short)val; - if (Dosbox.IS_EGAVGA_ARCH() && (val & 0x10)==0) { - VGA.vga.draw.vret_triggered=false; - if (Dosbox.machine== MachineType.MCH_EGA) Pic.PIC_DeActivateIRQ(9); - } - if (Dosbox.IS_VGA_ARCH()) VGA.vga.crtc.read_only=(val & 128)>0; - else VGA.vga.crtc.read_only=false; - /* - 0-3 Vertical Retrace ends when the last 4 bits of the line counter equals - this value. - 4 if clear Clears pending Vertical Interrupts. - 5 Vertical Interrupts (IRQ 2) disabled if set. Can usually be left - disabled, but some systems (including PS/2) require it to be enabled. - 6 If set selects 5 refresh cycles per scanline rather than 3. - 7 Disables writing to registers 0-7 if set 3d4h index 7 bit 4 is not - affected by this bit. - */ - break; - case 0x12: /* Vertical Display End Register */ - if (val!=VGA.vga.crtc.vertical_display_end) { - if (Math.abs(val-VGA.vga.crtc.vertical_display_end)<3) { - // delay small vde changes a bit to avoid screen resizing - // if they are reverted in a short timeframe - Pic.PIC_RemoveEvents(VGA_draw.VGA_SetupDrawing); - VGA.vga.draw.resizing=false; - VGA.vga.crtc.vertical_display_end=(short)val; - VGA.VGA_StartResize(150); - } else { - VGA.vga.crtc.vertical_display_end=(short)val; - VGA.VGA_StartResize(); - } - } - /* - 0-7 Lower 8 bits of Vertical Display End. The display ends when the line - counter reaches this value. Bit 8 is found in 3d4h index 7 bit 1. - Bit 9 is found in 3d4h index 7 bit 6. - */ - break; - case 0x13: /* Offset register */ - VGA.vga.crtc.offset=(byte)val; - VGA.vga.config.scan_len&=0x300; - VGA.vga.config.scan_len|=val; - VGA_draw.VGA_CheckScanLength(); - /* - 0-7 Number of bytes in a scanline / K. Where K is 2 for byte mode, 4 for - word mode and 8 for Double Word mode. - */ - break; - case 0x14: /* Underline Location Register */ - VGA.vga.crtc.underline_location=(short)val; - if (Dosbox.IS_VGA_ARCH()) { - //Byte,word,dword mode - if ((VGA.vga.crtc.underline_location & 0x20)!=0) - VGA.vga.config.addr_shift = 2; - else if ((VGA.vga.crtc. mode_control & 0x40)!=0) - VGA.vga.config.addr_shift = 0; - else - VGA.vga.config.addr_shift = 1; + if (Dosbox.IS_EGAVGA_ARCH() && (val & 0x10)==0) { + VGA.vga.draw.vret_triggered=false; + if (Dosbox.machine== MachineType.MCH_EGA) Pic.PIC_DeActivateIRQ(9); + } + if (Dosbox.IS_VGA_ARCH()) VGA.vga.crtc.read_only=(val & 128)>0; + else VGA.vga.crtc.read_only=false; + /* + 0-3 Vertical Retrace ends when the last 4 bits of the line counter equals + this value. + 4 if clear Clears pending Vertical Interrupts. + 5 Vertical Interrupts (IRQ 2) disabled if set. Can usually be left + disabled, but some systems (including PS/2) require it to be enabled. + 6 If set selects 5 refresh cycles per scanline rather than 3. + 7 Disables writing to registers 0-7 if set 3d4h index 7 bit 4 is not + affected by this bit. + */ + break; + case 0x12: /* Vertical Display End Register */ + if (val!=VGA.vga.crtc.vertical_display_end) { + if (Math.abs(val-VGA.vga.crtc.vertical_display_end)<3) { + // delay small vde changes a bit to avoid screen resizing + // if they are reverted in a short timeframe + Pic.PIC_RemoveEvents(VGA_draw.VGA_SetupDrawing); + VGA.vga.draw.resizing=false; + VGA.vga.crtc.vertical_display_end=(short)val; + VGA.VGA_StartResize(150); } else { - VGA.vga.config.addr_shift = 1; - } - /* - 0-4 Position of underline within Character cell. - 5 If set memory address is only changed every fourth character clock. - 6 Double Word mode addressing if set - */ - break; - case 0x15: /* Start Vertical Blank Register */ - if (val!=VGA.vga.crtc.start_vertical_blanking) { - VGA.vga.crtc.start_vertical_blanking=(short)val; - VGA.VGA_StartResize(); - } - /* - 0-7 Lower 8 bits of Vertical Blank Start. Vertical blanking starts when - the line counter reaches this value. Bit 8 is found in 3d4h index 7 - bit 3. - */ - break; - case 0x16: /* End Vertical Blank Register */ - if (val!=VGA.vga.crtc.end_vertical_blanking) { - VGA.vga.crtc.end_vertical_blanking=(short)val; + VGA.vga.crtc.vertical_display_end=(short)val; VGA.VGA_StartResize(); } - /* - 0-6 Vertical blanking stops when the lower 7 bits of the line counter - equals this field. Some SVGA chips uses all 8 bits! - IBM actually says bits 0-7. - */ - break; - case 0x17: /* Mode Control Register */ - VGA.vga.crtc.mode_control=(short)val; - VGA.vga.tandy.line_mask = (short)((~val) & 3); + } + /* + 0-7 Lower 8 bits of Vertical Display End. The display ends when the line + counter reaches this value. Bit 8 is found in 3d4h index 7 bit 1. + Bit 9 is found in 3d4h index 7 bit 6. + */ + break; + case 0x13: /* Offset register */ + VGA.vga.crtc.offset=(byte)val; + VGA.vga.config.scan_len&=0x300; + VGA.vga.config.scan_len|=val; + VGA_draw.VGA_CheckScanLength(); + /* + 0-7 Number of bytes in a scanline / K. Where K is 2 for byte mode, 4 for + word mode and 8 for Double Word mode. + */ + break; + case 0x14: /* Underline Location Register */ + VGA.vga.crtc.underline_location=(short)val; + if (Dosbox.IS_VGA_ARCH()) { //Byte,word,dword mode if ((VGA.vga.crtc.underline_location & 0x20)!=0) VGA.vga.config.addr_shift = 2; @@ -299,114 +252,153 @@ else if ((VGA.vga.crtc. mode_control & 0x40)!=0) VGA.vga.config.addr_shift = 0; else VGA.vga.config.addr_shift = 1; + } else { + VGA.vga.config.addr_shift = 1; + } + /* + 0-4 Position of underline within Character cell. + 5 If set memory address is only changed every fourth character clock. + 6 Double Word mode addressing if set + */ + break; + case 0x15: /* Start Vertical Blank Register */ + if (val!=VGA.vga.crtc.start_vertical_blanking) { + VGA.vga.crtc.start_vertical_blanking=(short)val; + VGA.VGA_StartResize(); + } + /* + 0-7 Lower 8 bits of Vertical Blank Start. Vertical blanking starts when + the line counter reaches this value. Bit 8 is found in 3d4h index 7 + bit 3. + */ + break; + case 0x16: /* End Vertical Blank Register */ + if (val!=VGA.vga.crtc.end_vertical_blanking) { + VGA.vga.crtc.end_vertical_blanking=(short)val; + VGA.VGA_StartResize(); + } + /* + 0-6 Vertical blanking stops when the lower 7 bits of the line counter + equals this field. Some SVGA chips uses all 8 bits! + IBM actually says bits 0-7. + */ + break; + case 0x17: /* Mode Control Register */ + VGA.vga.crtc.mode_control=(short)val; + VGA.vga.tandy.line_mask = (short)((~val) & 3); + //Byte,word,dword mode + if ((VGA.vga.crtc.underline_location & 0x20)!=0) + VGA.vga.config.addr_shift = 2; + else if ((VGA.vga.crtc. mode_control & 0x40)!=0) + VGA.vga.config.addr_shift = 0; + else + VGA.vga.config.addr_shift = 1; - if ( VGA.vga.tandy.line_mask!=0 ) { - VGA.vga.tandy.line_shift = 13; - VGA.vga.tandy.addr_mask = (1 << 13) - 1; - } else { - VGA.vga.tandy.addr_mask = ~0; - VGA.vga.tandy.line_shift = 0; - } - //Should we really need to do a determinemode here? - // VGA_DetermineMode(); - /* - 0 If clear use CGA compatible memory addressing system - by substituting character row scan counter bit 0 for address bit 13, - thus creating 2 banks for even and odd scan lines. - 1 If clear use Hercules compatible memory addressing system by - substituting character row scan counter bit 1 for address bit 14, - thus creating 4 banks. - 2 If set increase scan line counter only every second line. - 3 If set increase memory address counter only every other character clock. - 5 When in Word Mode bit 15 is rotated to bit 0 if this bit is set else - bit 13 is rotated into bit 0. - 6 If clear system is in word mode. Addresses are rotated 1 position up - bringing either bit 13 or 15 into bit 0. - 7 Clearing this bit will reset the display system until the bit is set again. - */ - break; - case 0x18: /* Line Compare Register */ - VGA.vga.crtc.line_compare=(short)val; - VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x700) | val; - /* - 0-7 Lower 8 bits of the Line Compare. When the Line counter reaches this - value, the display address wraps to 0. Provides Split Screen - facilities. Bit 8 is found in 3d4h index 7 bit 4. - Bit 9 is found in 3d4h index 9 bit 6. - */ - break; - default: - if (VGA.svga.write_p3d5!=null) { - VGA.svga.write_p3d5.call(VGA.vga.crtc.index, val, iolen); - } else { - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:CRTC:Write to unknown index "+Integer.toString(VGA.vga.crtc.index,16)); - } - break; + if ( VGA.vga.tandy.line_mask!=0 ) { + VGA.vga.tandy.line_shift = 13; + VGA.vga.tandy.addr_mask = (1 << 13) - 1; + } else { + VGA.vga.tandy.addr_mask = ~0; + VGA.vga.tandy.line_shift = 0; + } + //Should we really need to do a determinemode here? + // VGA_DetermineMode(); + /* + 0 If clear use CGA compatible memory addressing system + by substituting character row scan counter bit 0 for address bit 13, + thus creating 2 banks for even and odd scan lines. + 1 If clear use Hercules compatible memory addressing system by + substituting character row scan counter bit 1 for address bit 14, + thus creating 4 banks. + 2 If set increase scan line counter only every second line. + 3 If set increase memory address counter only every other character clock. + 5 When in Word Mode bit 15 is rotated to bit 0 if this bit is set else + bit 13 is rotated into bit 0. + 6 If clear system is in word mode. Addresses are rotated 1 position up + bringing either bit 13 or 15 into bit 0. + 7 Clearing this bit will reset the display system until the bit is set again. + */ + break; + case 0x18: /* Line Compare Register */ + VGA.vga.crtc.line_compare=(short)val; + VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x700) | val; + /* + 0-7 Lower 8 bits of the Line Compare. When the Line counter reaches this + value, the display address wraps to 0. Provides Split Screen + facilities. Bit 8 is found in 3d4h index 7 bit 4. + Bit 9 is found in 3d4h index 9 bit 6. + */ + break; + default: + if (VGA.svga.write_p3d5!=null) { + VGA.svga.write_p3d5.call(VGA.vga.crtc.index, val, iolen); + } else { + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:CRTC:Write to unknown index "+Integer.toString(VGA.vga.crtc.index,16)); } + break; } }; - static public IoHandler.IO_ReadHandler vga_read_p3d5 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - // LOG_MSG("VGA CRCT read from reg %X",VGA.vga.crtc.index)); - switch(VGA.vga.crtc.index) { - case 0x00: /* Horizontal Total Register */ - return VGA.vga.crtc.horizontal_total; - case 0x01: /* Horizontal Display End Register */ - return VGA.vga.crtc.horizontal_display_end & 0xFF; - case 0x02: /* Start Horizontal Blanking Register */ - return VGA.vga.crtc.start_horizontal_blanking; - case 0x03: /* End Horizontal Blanking Register */ - return VGA.vga.crtc.end_horizontal_blanking; - case 0x04: /* Start Horizontal Retrace Register */ - return VGA.vga.crtc.start_horizontal_retrace; - case 0x05: /* End Horizontal Retrace Register */ - return VGA.vga.crtc.end_horizontal_retrace; - case 0x06: /* Vertical Total Register */ - return VGA.vga.crtc.vertical_total; - case 0x07: /* Overflow Register */ - return VGA.vga.crtc.overflow & 0xFF; - case 0x08: /* Preset Row Scan Register */ - return VGA.vga.crtc.preset_row_scan; - case 0x09: /* Maximum Scan Line Register */ - return VGA.vga.crtc.maximum_scan_line & 0xFF; - case 0x0A: /* Cursor Start Register */ - return VGA.vga.crtc.cursor_start; - case 0x0B: /* Cursor End Register */ - return VGA.vga.crtc.cursor_end; - case 0x0C: /* Start Address High Register */ - return VGA.vga.crtc.start_address_high; - case 0x0D: /* Start Address Low Register */ - return VGA.vga.crtc.start_address_low; - case 0x0E: /*Cursor Location High Register */ - return VGA.vga.crtc.cursor_location_high; - case 0x0F: /* Cursor Location Low Register */ - return VGA.vga.crtc.cursor_location_low; - case 0x10: /* Vertical Retrace Start Register */ - return VGA.vga.crtc.vertical_retrace_start; - case 0x11: /* Vertical Retrace End Register */ - return VGA.vga.crtc.vertical_retrace_end; - case 0x12: /* Vertical Display End Register */ - return VGA.vga.crtc.vertical_display_end; - case 0x13: /* Offset register */ - return VGA.vga.crtc.offset & 0xFF; - case 0x14: /* Underline Location Register */ - return VGA.vga.crtc.underline_location; - case 0x15: /* Start Vertical Blank Register */ - return VGA.vga.crtc.start_vertical_blanking; - case 0x16: /* End Vertical Blank Register */ - return VGA.vga.crtc.end_vertical_blanking; - case 0x17: /* Mode Control Register */ - return VGA.vga.crtc.mode_control; - case 0x18: /* Line Compare Register */ - return VGA.vga.crtc.line_compare; - default: - if (VGA.svga.read_p3d5!=null) { - return VGA.svga.read_p3d5.call(VGA.vga.crtc.index, iolen); - } else { - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:Read from unknown index "+Integer.toString(VGA.vga.crtc.index,16)); - return 0x0; - } + /*Bitu*//*Bitu*//*Bitu*/ + static public final IoHandler.IO_ReadHandler vga_read_p3d5 = (port, iolen) -> { + // LOG_MSG("VGA CRCT read from reg %X",VGA.vga.crtc.index)); + switch(VGA.vga.crtc.index) { + case 0x00: /* Horizontal Total Register */ + return VGA.vga.crtc.horizontal_total; + case 0x01: /* Horizontal Display End Register */ + return VGA.vga.crtc.horizontal_display_end & 0xFF; + case 0x02: /* Start Horizontal Blanking Register */ + return VGA.vga.crtc.start_horizontal_blanking; + case 0x03: /* End Horizontal Blanking Register */ + return VGA.vga.crtc.end_horizontal_blanking; + case 0x04: /* Start Horizontal Retrace Register */ + return VGA.vga.crtc.start_horizontal_retrace; + case 0x05: /* End Horizontal Retrace Register */ + return VGA.vga.crtc.end_horizontal_retrace; + case 0x06: /* Vertical Total Register */ + return VGA.vga.crtc.vertical_total; + case 0x07: /* Overflow Register */ + return VGA.vga.crtc.overflow & 0xFF; + case 0x08: /* Preset Row Scan Register */ + return VGA.vga.crtc.preset_row_scan; + case 0x09: /* Maximum Scan Line Register */ + return VGA.vga.crtc.maximum_scan_line & 0xFF; + case 0x0A: /* Cursor Start Register */ + return VGA.vga.crtc.cursor_start; + case 0x0B: /* Cursor End Register */ + return VGA.vga.crtc.cursor_end; + case 0x0C: /* Start Address High Register */ + return VGA.vga.crtc.start_address_high; + case 0x0D: /* Start Address Low Register */ + return VGA.vga.crtc.start_address_low; + case 0x0E: /*Cursor Location High Register */ + return VGA.vga.crtc.cursor_location_high; + case 0x0F: /* Cursor Location Low Register */ + return VGA.vga.crtc.cursor_location_low; + case 0x10: /* Vertical Retrace Start Register */ + return VGA.vga.crtc.vertical_retrace_start; + case 0x11: /* Vertical Retrace End Register */ + return VGA.vga.crtc.vertical_retrace_end; + case 0x12: /* Vertical Display End Register */ + return VGA.vga.crtc.vertical_display_end; + case 0x13: /* Offset register */ + return VGA.vga.crtc.offset & 0xFF; + case 0x14: /* Underline Location Register */ + return VGA.vga.crtc.underline_location; + case 0x15: /* Start Vertical Blank Register */ + return VGA.vga.crtc.start_vertical_blanking; + case 0x16: /* End Vertical Blank Register */ + return VGA.vga.crtc.end_vertical_blanking; + case 0x17: /* Mode Control Register */ + return VGA.vga.crtc.mode_control; + case 0x18: /* Line Compare Register */ + return VGA.vga.crtc.line_compare; + default: + if (VGA.svga.read_p3d5!=null) { + return VGA.svga.read_p3d5.call(VGA.vga.crtc.index, iolen); + } else { + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:Read from unknown index "+Integer.toString(VGA.vga.crtc.index,16)); + return 0x0; } } }; diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_dac.java b/jdosbox/src/main/java/jdos/hardware/VGA_dac.java index 0a1a97fe..e2d19c6c 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_dac.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_dac.java @@ -54,126 +54,114 @@ static private void VGA_DAC_UpdateColor( /*Bitu*/int index ) { VGA_DAC_SendColor( index, maskIndex ); } - static private IoHandler.IO_WriteHandler write_p3c6 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - if ( VGA.vga.dac.pel_mask != val ) { - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:DCA:Pel Mask set to "+Integer.toString(val,16)); - VGA.vga.dac.pel_mask = (short)val; - for ( /*Bitu*/int i = 0;i<256;i++) - VGA_DAC_UpdateColor( i ); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_p3c6 = (port, val, iolen) -> { + if ( VGA.vga.dac.pel_mask != val ) { + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:DCA:Pel Mask set to "+Integer.toString(val,16)); + VGA.vga.dac.pel_mask = (short)val; + for ( /*Bitu*/int i = 0;i<256;i++) + VGA_DAC_UpdateColor( i ); } }; - static private IoHandler.IO_ReadHandler read_p3c6 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.dac.pel_mask; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3c6 = (port, iolen) -> VGA.vga.dac.pel_mask; - static private IoHandler.IO_WriteHandler write_p3c7 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.dac.read_index=(short)(val & 0xFF); - VGA.vga.dac.pel_index=0; - VGA.vga.dac.state=DAC_READ; - VGA.vga.dac.write_index= (short)((val + 1) & 0xFF); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_p3c7 = (port, val, iolen) -> { + VGA.vga.dac.read_index=(short)(val & 0xFF); + VGA.vga.dac.pel_index=0; + VGA.vga.dac.state=DAC_READ; + VGA.vga.dac.write_index= (short)((val + 1) & 0xFF); }; - static private IoHandler.IO_ReadHandler read_p3c7 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - if (VGA.vga.dac.state==DAC_READ) return 0x3; - else return 0x0; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3c7 = (port, iolen) -> { + if (VGA.vga.dac.state==DAC_READ) return 0x3; + else return 0x0; }; - static private IoHandler.IO_WriteHandler write_p3c8 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.dac.write_index=(short)(val & 0xFF); - VGA.vga.dac.pel_index=0; - VGA.vga.dac.state=DAC_WRITE; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_p3c8 = (port, val, iolen) -> { + VGA.vga.dac.write_index=(short)(val & 0xFF); + VGA.vga.dac.pel_index=0; + VGA.vga.dac.state=DAC_WRITE; }; - static private IoHandler.IO_ReadHandler read_p3c8 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.dac.write_index; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3c8 = (port, iolen) -> VGA.vga.dac.write_index; - static private IoHandler.IO_WriteHandler write_p3c9 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - val&=0x3f; - switch (VGA.vga.dac.pel_index) { - case 0: - VGA.vga.dac.rgb[VGA.vga.dac.write_index].red=(short)val; - VGA.vga.dac.pel_index=1; - break; - case 1: - VGA.vga.dac.rgb[VGA.vga.dac.write_index].green=(short)val; - VGA.vga.dac.pel_index=2; - break; - case 2: - VGA.vga.dac.rgb[VGA.vga.dac.write_index].blue=(short)val; - switch (VGA.vga.mode) { - case VGA.M_VGA: - case VGA.M_LIN8: - VGA_DAC_UpdateColor( VGA.vga.dac.write_index ); - if (VGA.vga.dac.pel_mask != 0xff) { - /*Bitu*/int index = VGA.vga.dac.write_index; - if ( (index & VGA.vga.dac.pel_mask) == index ) { - for ( /*Bitu*/int i = index+1;i<256;i++) - if ( (i & VGA.vga.dac.pel_mask) == index ) - VGA_DAC_UpdateColor( i ); - } - } - break; - default: - /* Check for attributes and DAC entry link */ - for (/*Bitu*/int i=0;i<16;i++) { - if (VGA.vga.dac.combine[i]==VGA.vga.dac.write_index) { - VGA_DAC_SendColor( i, VGA.vga.dac.write_index ); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_WriteHandler write_p3c9 = (port, val, iolen) -> { + val&=0x3f; + switch (VGA.vga.dac.pel_index) { + case 0: + VGA.vga.dac.rgb[VGA.vga.dac.write_index].red=(short)val; + VGA.vga.dac.pel_index=1; + break; + case 1: + VGA.vga.dac.rgb[VGA.vga.dac.write_index].green=(short)val; + VGA.vga.dac.pel_index=2; + break; + case 2: + VGA.vga.dac.rgb[VGA.vga.dac.write_index].blue=(short)val; + switch (VGA.vga.mode) { + case VGA.M_VGA: + case VGA.M_LIN8: + VGA_DAC_UpdateColor( VGA.vga.dac.write_index ); + if (VGA.vga.dac.pel_mask != 0xff) { + /*Bitu*/int index = VGA.vga.dac.write_index; + if ( (index & VGA.vga.dac.pel_mask) == index ) { + for ( /*Bitu*/int i = index+1;i<256;i++) + if ( (i & VGA.vga.dac.pel_mask) == index ) + VGA_DAC_UpdateColor( i ); } } - VGA.vga.dac.write_index++;VGA.vga.dac.write_index&=0xFF; - // VGA.vga.dac.read_index = VGA.vga.dac.write_index - 1;//disabled as it breaks Wari - VGA.vga.dac.pel_index=0; break; default: - Log.log(LogTypes.LOG_VGAGFX,LogSeverities.LOG_NORMAL,"VGA:DAC:Illegal Pel Index"); //If this can actually happen that will be the day - break; + /* Check for attributes and DAC entry link */ + for (/*Bitu*/int i=0;i<16;i++) { + if (VGA.vga.dac.combine[i]==VGA.vga.dac.write_index) { + VGA_DAC_SendColor( i, VGA.vga.dac.write_index ); + } + } } + VGA.vga.dac.write_index++;VGA.vga.dac.write_index&=0xFF; +// VGA.vga.dac.read_index = VGA.vga.dac.write_index - 1;//disabled as it breaks Wari + VGA.vga.dac.pel_index=0; + break; + default: + Log.log(LogTypes.LOG_VGAGFX,LogSeverities.LOG_NORMAL,"VGA:DAC:Illegal Pel Index"); //If this can actually happen that will be the day + break; } }; - static private IoHandler.IO_ReadHandler read_p3c9 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - /*Bitu*/short ret; - switch (VGA.vga.dac.pel_index) { - case 0: - ret=VGA.vga.dac.rgb[VGA.vga.dac.read_index].red; - VGA.vga.dac.pel_index=1; - break; - case 1: - ret=VGA.vga.dac.rgb[VGA.vga.dac.read_index].green; - VGA.vga.dac.pel_index=2; - break; - case 2: - ret=VGA.vga.dac.rgb[VGA.vga.dac.read_index].blue; - VGA.vga.dac.read_index++;VGA.vga.dac.read_index&=0xFF; - VGA.vga.dac.pel_index=0; - // VGA.vga.dac.write_index=VGA.vga.dac.read_index+1;//disabled as it breaks wari - break; - default: - Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:DAC:Illegal Pel Index"); //If this can actually happen that will be the day - ret=0; - break; - } - return ret; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3c9 = (port, iolen) -> { + /*Bitu*/short ret; + switch (VGA.vga.dac.pel_index) { + case 0: + ret=VGA.vga.dac.rgb[VGA.vga.dac.read_index].red; + VGA.vga.dac.pel_index=1; + break; + case 1: + ret=VGA.vga.dac.rgb[VGA.vga.dac.read_index].green; + VGA.vga.dac.pel_index=2; + break; + case 2: + ret=VGA.vga.dac.rgb[VGA.vga.dac.read_index].blue; + VGA.vga.dac.read_index++;VGA.vga.dac.read_index&=0xFF; + VGA.vga.dac.pel_index=0; +// VGA.vga.dac.write_index=VGA.vga.dac.read_index+1;//disabled as it breaks wari + break; + default: + Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:DAC:Illegal Pel Index"); //If this can actually happen that will be the day + ret=0; + break; } + return ret; }; public static void VGA_DAC_CombineColor(/*Bitu*/int attr,/*Bitu*/int pal) { diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_draw.java b/jdosbox/src/main/java/jdos/hardware/VGA_draw.java index 58acc722..0cf2ed8f 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_draw.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_draw.java @@ -14,15 +14,15 @@ public class VGA_draw { static private final int VGA_PARTS = 4; - static private interface VGA_Line_Handler { - public int call(/*Bitu*/int vidstart, /*Bitu*/int line); + private interface VGA_Line_Handler { + int call(/*Bitu*/int vidstart, /*Bitu*/int line); } static private VGA_Line_Handler VGA_DrawLine; static public final int TEMPLINE_SIZE = 1920 * 4; static public int TempLine; - private static VGA_Line_Handler VGA_Draw_1BPP_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_1BPP_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int base = VGA.vga.tandy.draw_base + ((line & VGA.vga.tandy.line_mask) << VGA.vga.tandy.line_shift); int draw = TempLine; @@ -37,7 +37,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_2BPP_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_2BPP_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int base = VGA.vga.tandy.draw_base + ((line & VGA.vga.tandy.line_mask) << VGA.vga.tandy.line_shift); int draw = TempLine; @@ -51,7 +51,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_2BPPHiRes_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_2BPPHiRes_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int base = VGA.vga.tandy.draw_base + ((line & VGA.vga.tandy.line_mask) << VGA.vga.tandy.line_shift); int draw = TempLine; @@ -69,11 +69,11 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static /*Bitu*/int[] temp = new int[643]; + private static final /*Bitu*/int[] temp = new int[643]; private static int CGA16_READER(int base, int vidstart, int OFF) { return RAM.readb(base+((vidstart +(OFF))& (8*1024 -1)));} - private static VGA_Line_Handler VGA_Draw_CGA16_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_CGA16_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int base = VGA.vga.tandy.draw_base + ((line & VGA.vga.tandy.line_mask) << VGA.vga.tandy.line_shift); int draw = TempLine; @@ -118,7 +118,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_4BPP_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_4BPP_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int base = VGA.vga.tandy.draw_base + ((line & VGA.vga.tandy.line_mask) << VGA.vga.tandy.line_shift); int draw=TempLine; @@ -134,7 +134,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_4BPP_Line_Double = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_4BPP_Line_Double = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int base = VGA.vga.tandy.draw_base + ((line & VGA.vga.tandy.line_mask) << VGA.vga.tandy.line_shift); int draw=TempLine; @@ -154,7 +154,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_Linear_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_Linear_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { /*Bitu*/int offset = vidstart & VGA.vga.draw.linear_mask; @@ -175,7 +175,6 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { RAM.memcpy(TempLine, ret, unwrapped_len); // wrapped chunk: from base of memory block RAM.memcpy(TempLine+unwrapped_len, VGA.vga.draw.linear_base, wrapped_len); - ret = TempLine; } if (VGA.vga.draw.linear_mask-offset < VGA.vga.draw.line_length) @@ -184,7 +183,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_Xlat16_Linear_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_Xlat16_Linear_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { int ret = VGA.vga.draw.linear_base + (vidstart & VGA.vga.draw.linear_mask); int temps = TempLine; @@ -206,7 +205,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { return TempLine; } */ - private static VGA_Line_Handler VGA_Draw_VGA_Line_HWMouse = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_VGA_Line_HWMouse = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { if (VGA.svga.hardware_cursor_active==null || !VGA.svga.hardware_cursor_active.call()) // HW Mouse not enabled, use the tried and true call @@ -265,7 +264,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_LIN16_Line_HWMouse = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_LIN16_Line_HWMouse = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { if (VGA.svga.hardware_cursor_active==null || !VGA.svga.hardware_cursor_active.call()) return VGA.vga.mem.linear + vidstart; @@ -278,7 +277,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } else { RAM.memcpy(TempLine, VGA.vga.mem.linear + vidstart, VGA.vga.draw.width*2); /*Bitu*/int sourceStartBit = ((lineat - VGA.vga.s3.hgc.originy) + VGA.vga.s3.hgc.posy)*64 + VGA.vga.s3.hgc.posx; - /*Bitu*/int cursorMemStart = ((sourceStartBit >> 2)& ~1) + (((int)VGA.vga.s3.hgc.startaddr) << 10); + /*Bitu*/int cursorMemStart = ((sourceStartBit >> 2)& ~1) + (VGA.vga.s3.hgc.startaddr << 10); /*Bitu*/int cursorStartBit = sourceStartBit & 0x7; if ((cursorMemStart & 0x2)!=0) cursorMemStart--; /*Bitu*/int cursorMemEnd = cursorMemStart + ((64-VGA.vga.s3.hgc.posx) >> 2); @@ -311,7 +310,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_Draw_LIN32_Line_HWMouse = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_Draw_LIN32_Line_HWMouse = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { if (VGA.svga.hardware_cursor_active==null || !VGA.svga.hardware_cursor_active.call()) return VGA.vga.mem.linear+vidstart; @@ -324,7 +323,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } else { RAM.memcpy(TempLine, VGA.vga.mem.linear+vidstart, VGA.vga.draw.width*4); /*Bitu*/int sourceStartBit = ((lineat - VGA.vga.s3.hgc.originy) + VGA.vga.s3.hgc.posy)*64 + VGA.vga.s3.hgc.posx; - /*Bitu*/int cursorMemStart = ((sourceStartBit >> 2)& ~1) + (((int)VGA.vga.s3.hgc.startaddr) << 10); + /*Bitu*/int cursorMemStart = ((sourceStartBit >> 2)& ~1) + (VGA.vga.s3.hgc.startaddr << 10); /*Bitu*/int cursorStartBit = sourceStartBit & 0x7; if ((cursorMemStart & 0x2)!=0) cursorMemStart--; /*Bitu*/int cursorMemEnd = cursorMemStart + ((64-VGA.vga.s3.hgc.posx) >> 2); @@ -369,8 +368,8 @@ private static int VGA_Text_Memwrap(/*Bitu*/int vidstart) { } else return VGA.vga.tandy.draw_base+vidstart; } - private static /*Bit32u*/int[] FontMask={0xffffffff,0x0}; - private static VGA_Line_Handler VGA_TEXT_Draw_Line = new VGA_Line_Handler() { + private static final /*Bit32u*/int[] FontMask={0xffffffff,0x0}; + private static final VGA_Line_Handler VGA_TEXT_Draw_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { /*Bits*/int font_addr; int draw=TempLine; @@ -390,14 +389,14 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } if (VGA.vga.draw.cursor.enabled && (VGA.vga.draw.cursor.count&0x8)!=0) { font_addr = (VGA.vga.draw.cursor.address-vidstart) >> 1; - if (font_addr>=0 && font_addr<(/*Bits*/int)VGA.vga.draw.blocks) { + /*Bits*/ + if (font_addr>=0 && font_addr< VGA.vga.draw.blocks) { if (line>=VGA.vga.draw.cursor.sline && line<=VGA.vga.draw.cursor.eline) { draw=TempLine+font_addr*8; /*Bit32u*/int att=VGA.TXT_FG_Table[RAM.readb(VGA.vga.tandy.draw_base+VGA.vga.draw.cursor.address+1)&0xf]; RAM.writed(draw,att); draw+=4; RAM.writed(draw,att); - draw+=4; } } } @@ -406,7 +405,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } }; - private static VGA_Line_Handler VGA_TEXT_Herc_Draw_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_TEXT_Herc_Draw_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { /*Bits*/int font_addr; int draw=TempLine; @@ -429,7 +428,8 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { if ((attrib&0x8)!=0) fg = VGA.TXT_FG_Table[0xf]; else fg = VGA.TXT_FG_Table[0x0]; } else { - if (((/*Bitu*/int)(VGA.vga.crtc.underline_location&0x1f)==line) && ((attrib&0x77)==0x1)) underline=true; + /*Bitu*/ + if (((VGA.vga.crtc.underline_location&0x1f) ==line) && ((attrib&0x77)==0x1)) underline=true; bg = VGA.TXT_BG_Table[0x0]; if ((attrib&0x8)!=0) fg = VGA.TXT_FG_Table[0xf]; else fg = VGA.TXT_FG_Table[0x7]; @@ -449,7 +449,8 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { } if (VGA.vga.draw.cursor.enabled && (VGA.vga.draw.cursor.count&0x8)==0) { font_addr = (VGA.vga.draw.cursor.address-vidstart) >> 1; - if (font_addr>=0 && font_addr<(/*Bits*/int)VGA.vga.draw.blocks) { + /*Bits*/ + if (font_addr>=0 && font_addr< VGA.vga.draw.blocks) { if (line>=VGA.vga.draw.cursor.sline && line<=VGA.vga.draw.cursor.eline) { draw=TempLine+font_addr*8; /*Bit8u*/int attr = RAM.readb(VGA.vga.tandy.draw_base+VGA.vga.draw.cursor.address+1); @@ -464,7 +465,6 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { RAM.writed(draw, cg); draw+=4; RAM.writed(draw, cg); - draw+=4; } } } @@ -474,7 +474,7 @@ public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { }; // combined 8/9-dot wide text mode 16bpp line drawing function - private static VGA_Line_Handler VGA_TEXT_Xlat16_Draw_Line = new VGA_Line_Handler() { + private static final VGA_Line_Handler VGA_TEXT_Xlat16_Draw_Line = new VGA_Line_Handler() { public int call(/*Bitu*/int vidstart, /*Bitu*/int line) { // keep it aligned: int draw=TempLine + 16-VGA.vga.draw.panning; @@ -541,7 +541,7 @@ private static void VGA_ChangesEnd() { /*Bitu*/long total = 4 + end - VGA.vga.changes.start; /*Bit32u*/int clearMask = VGA.vga.changes.clearMask; total >>= 2; - IntPtr clear = new IntPtr(VGA.vga.changes.map, (int)(VGA.vga.changes.start & ~3 )); + IntPtr clear = new IntPtr(VGA.vga.changes.map, VGA.vga.changes.start & ~3); while ( total-- !=0 ) { clear.setInc(clear.get() & clearMask); } @@ -567,7 +567,7 @@ private static void VGA_ProcessSplit() { private static int bg_color_index = 0; // screen-off black index - private static Pic.PIC_EventHandler VGA_DrawSingleLine = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_DrawSingleLine = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { if (VGA.vga.attr.disabled!=0) { switch(Dosbox.machine) { @@ -642,7 +642,7 @@ public String toString() { } }; - private static Pic.PIC_EventHandler VGA_DrawEGASingleLine = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_DrawEGASingleLine = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { if (VGA.vga.attr.disabled!=0) { RAM.zeroset(TempLine, TEMPLINE_SIZE); @@ -670,7 +670,7 @@ public String toString() { } }; - private static Pic.PIC_EventHandler VGA_DrawPart = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_DrawPart = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { int address_add; if (VBE.vbeLineOffset!=0) @@ -724,7 +724,7 @@ public static void VGA_SetBlinking(/*Bitu*/int enabled) { for (/*Bitu*/int i=0;i<8;i++) VGA.TXT_BG_Table[i+8]=(b+i) | ((b+i) << 8)| ((b+i) <<16) | ((b+i) << 24); } - private static Pic.PIC_EventHandler VGA_VertInterrupt = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_VertInterrupt = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { if ((!VGA.vga.draw.vret_triggered) && ((VGA.vga.crtc.vertical_retrace_end&0x30)==0x10)) { VGA.vga.draw.vret_triggered=true; @@ -736,7 +736,7 @@ public String toString() { } }; - private static Pic.PIC_EventHandler VGA_Other_VertInterrupt = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_Other_VertInterrupt = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { if (val!=0) Pic.PIC_ActivateIRQ(5); else Pic.PIC_DeActivateIRQ(5); @@ -746,7 +746,7 @@ public String toString() { } }; - private static Pic.PIC_EventHandler VGA_DisplayStartLatch = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_DisplayStartLatch = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { VGA.vga.config.real_start=VGA.vga.config.display_start & (VGA.vga.vmemwrap-1); VGA.vga.draw.bytes_skip = VGA.vga.config.bytes_skip; @@ -756,7 +756,7 @@ public String toString() { } }; - private static Pic.PIC_EventHandler VGA_PanningLatch = new Pic.PIC_EventHandler() { + private static final Pic.PIC_EventHandler VGA_PanningLatch = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { VGA.vga.draw.panning = VGA.vga.config.pel_panning; } @@ -765,7 +765,7 @@ public String toString() { } }; - static private Pic.PIC_EventHandler VGA_VerticalTimer = new Pic.PIC_EventHandler() { + static private final Pic.PIC_EventHandler VGA_VerticalTimer = new Pic.PIC_EventHandler() { public String toString() { return "VGA_VerticalTimer"; } @@ -804,12 +804,13 @@ public void call(/*Bitu*/int val) { break; } //Check if we can actually render, else skip the rest (frameskip) - if (VGA.vga.draw.vga_override || !Render.RENDER_StartUpdate()) + if (VGA.vga.draw.vga_override || Render.RENDER_StartUpdate()) return; VGA.vga.draw.address_line = VGA.vga.config.hlines_skip; if (Dosbox.IS_EGAVGA_ARCH()) { - VGA.vga.draw.split_line = (/*Bitu*/int)((VGA.vga.config.line_compare+1)/VGA.vga.draw.lines_scaled); + /*Bitu*/ + VGA.vga.draw.split_line = (VGA.vga.config.line_compare+1)/VGA.vga.draw.lines_scaled; if ((Dosbox.svgaCard== SVGACards.SVGA_S3Trio) && (VGA.vga.config.line_compare==0)) VGA.vga.draw.split_line=0; VGA.vga.draw.split_line -= VGA.vga.draw.vblank_skip; } else { @@ -837,8 +838,7 @@ public void call(/*Bitu*/int val) { VGA.vga.draw.address *= VGA.vga.draw.byte_panning_shift; if (Dosbox.machine!=MachineType.MCH_EGA) VGA.vga.draw.address += VGA.vga.draw.panning; //#ifdef VGA_KEEP_CHANGES - startaddr_changed=true; - //#endif + //#endif break; case VGA.M_VGA: if (VGA.vga.config.compatible_chain4 && (VGA.vga.crtc.underline_location & 0x40)!=0) { @@ -857,8 +857,7 @@ public void call(/*Bitu*/int val) { VGA.vga.draw.address *= VGA.vga.draw.byte_panning_shift; VGA.vga.draw.address += VGA.vga.draw.panning; //#ifdef VGA_KEEP_CHANGES - startaddr_changed=true; - //#endif + //#endif break; case VGA.M_TEXT: VGA.vga.draw.byte_panning_shift = 2; @@ -996,7 +995,7 @@ public static void VGA_ActivateHardwareCursor() { } } - public static Pic.PIC_EventHandler VGA_SetupDrawing = new Pic.PIC_EventHandler() { + public static final Pic.PIC_EventHandler VGA_SetupDrawing = new Pic.PIC_EventHandler() { public String toString() { return "VGA_SetupDrawing"; } @@ -1257,7 +1256,7 @@ public void call(/*Bitu*/int val) { break; case 3: //480 line mode, filled with 525 total default: - pheight = (480.0 / 480.0) * ( 525.0 / vtotal ); + pheight = (525.0 / vtotal); break; } @@ -1457,7 +1456,6 @@ else if (Dosbox.svgaCard == SVGACards.SVGA_S3Trio && (VGA.vga.s3.reg_3a&0x10)==0 VGA_CheckScanLength(); if (VGA.vga.draw.double_scan) { if (Dosbox.IS_VGA_ARCH()) { - VGA.vga.draw.vblank_skip /= 2; height/=2; } doubleheight=true; @@ -1504,13 +1502,13 @@ else if (Dosbox.svgaCard == SVGACards.SVGA_S3Trio && (VGA.vga.s3.reg_3a&0x10)==0 if (Config.C_DEBUG) { if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGA,LogSeverities.LOG_NORMAL, StringHelper.sprintf("h total %2.5f (%3.2fkHz) blank(%02.5f/%02.5f) retrace(%02.5f/%02.5f)", - new Object[] {new Float(VGA.vga.draw.delay.htotal),new Float(1.0/VGA.vga.draw.delay.htotal), - new Float(VGA.vga.draw.delay.hblkstart),new Float(VGA.vga.draw.delay.hblkend), - new Float(VGA.vga.draw.delay.hrstart),new Float(VGA.vga.draw.delay.hrend)})); + new Object[] {(float) VGA.vga.draw.delay.htotal, (float) (1.0 / VGA.vga.draw.delay.htotal), + (float) VGA.vga.draw.delay.hblkstart, (float) VGA.vga.draw.delay.hblkend, + (float) VGA.vga.draw.delay.hrstart, (float) VGA.vga.draw.delay.hrend})); if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGA,LogSeverities.LOG_NORMAL, StringHelper.sprintf("v total %2.5f (%3.2fHz) blank(%02.5f/%02.5f) retrace(%02.5f/%02.5f)", - new Object[] {new Float(VGA.vga.draw.delay.vtotal),new Float((1000.0/VGA.vga.draw.delay.vtotal)), - new Float(VGA.vga.draw.delay.vblkstart),new Float(VGA.vga.draw.delay.vblkend), - new Float(VGA.vga.draw.delay.vrstart),new Float(VGA.vga.draw.delay.vrend)})); + new Object[] {(float) VGA.vga.draw.delay.vtotal, (float) (1000.0 / VGA.vga.draw.delay.vtotal), + (float) VGA.vga.draw.delay.vblkstart, (float) VGA.vga.draw.delay.vblkend, + (float) VGA.vga.draw.delay.vrstart, (float) VGA.vga.draw.delay.vrend})); } // need to resize the output window? diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_gfx.java b/jdosbox/src/main/java/jdos/hardware/VGA_gfx.java index 13eee98f..f5ba5b3f 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_gfx.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_gfx.java @@ -8,207 +8,199 @@ public class VGA_gfx { static boolean index9warned=false; - private static IoHandler.IO_WriteHandler write_p3ce = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.gfx.index=(short)(val & 0x0f); - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p3ce = (port, val, iolen) -> VGA.vga.gfx.index=(short)(val & 0x0f); - private static IoHandler.IO_ReadHandler read_p3ce = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.gfx.index; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3ce = (port, iolen) -> VGA.vga.gfx.index; - private static IoHandler.IO_WriteHandler write_p3cf = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (VGA.vga.gfx.index) { - case 0: /* Set/Reset Register */ - VGA.vga.gfx.set_reset=(short)(val & 0x0f); - VGA.vga.config.full_set_reset=VGA.FillTable[val & 0x0f]; - VGA.vga.config.full_enable_and_set_reset=VGA.vga.config.full_set_reset & - VGA.vga.config.full_enable_set_reset; - /* - 0 If in Write Mode 0 and bit 0 of 3CEh index 1 is set a write to - display memory will set all the bits in plane 0 of the byte to this - bit, if the corresponding bit is set in the Map Mask Register (3CEh - index 8). - 1 Same for plane 1 and bit 1 of 3CEh index 1. - 2 Same for plane 2 and bit 2 of 3CEh index 1. - 3 Same for plane 3 and bit 3 of 3CEh index 1. - */ - // LOG_DEBUG("Set Reset = %2X",val); - break; - case 1: /* Enable Set/Reset Register */ - VGA.vga.gfx.enable_set_reset=(short)(val & 0x0f); - VGA.vga.config.full_enable_set_reset=VGA.FillTable[val & 0x0f]; - VGA.vga.config.full_not_enable_set_reset=~VGA.vga.config.full_enable_set_reset; - VGA.vga.config.full_enable_and_set_reset=VGA.vga.config.full_set_reset & - VGA.vga.config.full_enable_set_reset; - // if (VGA.vga.gfx.enable_set_reset)) VGA.vga.config.mh_mask|=MH_SETRESET else VGA.vga.config.mh_mask&=~MH_SETRESET; - break; - case 2: /* Color Compare Register */ - VGA.vga.gfx.color_compare=(short)(val & 0x0f); - /* - 0-3 In Read Mode 1 each pixel at the address of the byte read is compared - to this color and the corresponding bit in the output set to 1 if - they match, 0 if not. The Color Don't Care Register (3CEh index 7) - can exclude bitplanes from the comparison. - */ - VGA.vga.config.color_compare=(short)(val & 0xf); - // LOG_DEBUG("Color Compare = %2X",val); - break; - case 3: /* Data Rotate */ - VGA.vga.gfx.data_rotate=(short)val; - VGA.vga.config.data_rotate=(short)(val & 7); - // if (val) VGA.vga.config.mh_mask|=MH_ROTATEOP else VGA.vga.config.mh_mask&=~MH_ROTATEOP; - VGA.vga.config.raster_op=(short)((val>>3) & 3); - /* - 0-2 Number of positions to rotate data right before it is written to - display memory. Only active in Write Mode 0. - 3-4 In Write Mode 2 this field controls the relation between the data - written from the CPU, the data latched from the previous read and the - data written to display memory: - 0: CPU Data is written unmodified - 1: CPU data is ANDed with the latched data - 2: CPU data is ORed with the latch data. - 3: CPU data is XORed with the latched data. - */ - break; - case 4: /* Read Map Select Register */ - /* 0-1 number of the plane Read Mode 0 will read from */ - VGA.vga.gfx.read_map_select=(short)(val & 0x03); - VGA.vga.config.read_map_select=(short)(val & 0x03); - // LOG_DEBUG("Read Map %2X",val); + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p3cf = (port, val, iolen) -> { + switch (VGA.vga.gfx.index) { + case 0: /* Set/Reset Register */ + VGA.vga.gfx.set_reset=(short)(val & 0x0f); + VGA.vga.config.full_set_reset=VGA.FillTable[val & 0x0f]; + VGA.vga.config.full_enable_and_set_reset=VGA.vga.config.full_set_reset & + VGA.vga.config.full_enable_set_reset; + /* + 0 If in Write Mode 0 and bit 0 of 3CEh index 1 is set a write to + display memory will set all the bits in plane 0 of the byte to this + bit, if the corresponding bit is set in the Map Mask Register (3CEh + index 8). + 1 Same for plane 1 and bit 1 of 3CEh index 1. + 2 Same for plane 2 and bit 2 of 3CEh index 1. + 3 Same for plane 3 and bit 3 of 3CEh index 1. + */ + // LOG_DEBUG("Set Reset = %2X",val); + break; + case 1: /* Enable Set/Reset Register */ + VGA.vga.gfx.enable_set_reset=(short)(val & 0x0f); + VGA.vga.config.full_enable_set_reset=VGA.FillTable[val & 0x0f]; + VGA.vga.config.full_not_enable_set_reset=~VGA.vga.config.full_enable_set_reset; + VGA.vga.config.full_enable_and_set_reset=VGA.vga.config.full_set_reset & + VGA.vga.config.full_enable_set_reset; + // if (VGA.vga.gfx.enable_set_reset)) VGA.vga.config.mh_mask|=MH_SETRESET else VGA.vga.config.mh_mask&=~MH_SETRESET; + break; + case 2: /* Color Compare Register */ + VGA.vga.gfx.color_compare=(short)(val & 0x0f); + /* + 0-3 In Read Mode 1 each pixel at the address of the byte read is compared + to this color and the corresponding bit in the output set to 1 if + they match, 0 if not. The Color Don't Care Register (3CEh index 7) + can exclude bitplanes from the comparison. + */ + VGA.vga.config.color_compare=(short)(val & 0xf); + // LOG_DEBUG("Color Compare = %2X",val); + break; + case 3: /* Data Rotate */ + VGA.vga.gfx.data_rotate=(short)val; + VGA.vga.config.data_rotate=(short)(val & 7); + // if (val) VGA.vga.config.mh_mask|=MH_ROTATEOP else VGA.vga.config.mh_mask&=~MH_ROTATEOP; + VGA.vga.config.raster_op=(short)((val>>3) & 3); + /* + 0-2 Number of positions to rotate data right before it is written to + display memory. Only active in Write Mode 0. + 3-4 In Write Mode 2 this field controls the relation between the data + written from the CPU, the data latched from the previous read and the + data written to display memory: + 0: CPU Data is written unmodified + 1: CPU data is ANDed with the latched data + 2: CPU data is ORed with the latch data. + 3: CPU data is XORed with the latched data. + */ + break; + case 4: /* Read Map Select Register */ + /* 0-1 number of the plane Read Mode 0 will read from */ + VGA.vga.gfx.read_map_select=(short)(val & 0x03); + VGA.vga.config.read_map_select=(short)(val & 0x03); + // LOG_DEBUG("Read Map %2X",val); + break; + case 5: /* Mode Register */ + if (((VGA.vga.gfx.mode ^ val) & 0xf0)!=0) { + VGA.vga.gfx.mode=(byte)val; + VGA.VGA_DetermineMode(); + } else VGA.vga.gfx.mode=(byte)val; + VGA.vga.config.write_mode=(short)(val & 3); + VGA.vga.config.read_mode=(short)((val >> 3) & 1); + // LOG_DEBUG("Write Mode %d Read Mode %d val %d",VGA.vga.config.write_mode,VGA.vga.config.read_mode,val); + /* + 0-1 Write Mode: Controls how data from the CPU is transformed before + being written to display memory: + 0: Mode 0 works as a Read-Modify-Write operation. + First a read access loads the data latches of the VGA with the + value in video memory at the addressed location. Then a write + access will provide the destination address and the CPU data + byte. The data written is modified by the function code in the + Data Rotate register (3CEh index 3) as a function of the CPU + data and the latches, then data is rotated as specified by the + same register. + 1: Mode 1 is used for video to video transfers. + A read access will load the data latches with the contents of + the addressed byte of video memory. A write access will write + the contents of the latches to the addressed byte. Thus a single + MOVSB instruction can copy all pixels in the source address byte + to the destination address. + 2: Mode 2 writes a color to all pixels in the addressed byte of + video memory. Bit 0 of the CPU data is written to plane 0 et + cetera. Individual bits can be enabled or disabled through the + Bit Mask register (3CEh index 8). + 3: Mode 3 can be used to fill an area with a color and pattern. The + CPU data is rotated according to 3CEh index 3 bits 0-2 and anded + with the Bit Mask Register (3CEh index 8). For each bit in the + result the corresponding pixel is set to the color in the + Set/Reset Register (3CEh index 0 bits 0-3) if the bit is set and + to the contents of the processor latch if the bit is clear. + 3 Read Mode + 0: Data is read from one of 4 bit planes depending on the Read Map + Select Register (3CEh index 4). + 1: Data returned is a comparison between the 8 pixels occupying the + read byte and the color in the Color Compare Register (3CEh + index 2). A bit is set if the color of the corresponding pixel + matches the register. + 4 Enables Odd/Even mode if set (See 3C4h index 4 bit 2). + 5 Enables CGA style 4 color pixels using even/odd bit pairs if set. + 6 Enables 256 color mode if set. + */ + break; + case 6: /* Miscellaneous Register */ + if (((VGA.vga.gfx.miscellaneous ^ val) & 0x0c)!=0) { + VGA.vga.gfx.miscellaneous=(byte)val; + VGA.VGA_DetermineMode(); + } else VGA.vga.gfx.miscellaneous=(byte)val; + VGA_memory.VGA_SetupHandlers(); + /* + 0 Indicates Graphics Mode if set, Alphanumeric mode else. + 1 Enables Odd/Even mode if set. + 2-3 Memory Mapping: + 0: use A000h-BFFFh + 1: use A000h-AFFFh VGA Graphics modes + 2: use B000h-B7FFh Monochrome modes + 3: use B800h-BFFFh CGA modes + */ + break; + case 7: /* Color Don't Care Register */ + VGA.vga.gfx.color_dont_care=(short)(val & 0x0f); + /* + 0 Ignore bit plane 0 in Read mode 1 if clear. + 1 Ignore bit plane 1 in Read mode 1 if clear. + 2 Ignore bit plane 2 in Read mode 1 if clear. + 3 Ignore bit plane 3 in Read mode 1 if clear. + */ + VGA.vga.config.color_dont_care=(short)(val & 0xf); + // LOG_DEBUG("Color don't care = %2X",val); + break; + case 8: /* Bit Mask Register */ + VGA.vga.gfx.bit_mask=(short)val; + VGA.vga.config.full_bit_mask=VGA.ExpandTable[val]; + // LOG_DEBUG("Bit mask %2X",val); + /* + 0-7 Each bit if set enables writing to the corresponding bit of a byte in + display memory. + */ + break; + default: + if (VGA.svga.write_p3cf!=null) { + VGA.svga.write_p3cf.call(VGA.vga.gfx.index, val, iolen); break; - case 5: /* Mode Register */ - if (((VGA.vga.gfx.mode ^ val) & 0xf0)!=0) { - VGA.vga.gfx.mode=(byte)val; - VGA.VGA_DetermineMode(); - } else VGA.vga.gfx.mode=(byte)val; - VGA.vga.config.write_mode=(short)(val & 3); - VGA.vga.config.read_mode=(short)((val >> 3) & 1); - // LOG_DEBUG("Write Mode %d Read Mode %d val %d",VGA.vga.config.write_mode,VGA.vga.config.read_mode,val); - /* - 0-1 Write Mode: Controls how data from the CPU is transformed before - being written to display memory: - 0: Mode 0 works as a Read-Modify-Write operation. - First a read access loads the data latches of the VGA with the - value in video memory at the addressed location. Then a write - access will provide the destination address and the CPU data - byte. The data written is modified by the function code in the - Data Rotate register (3CEh index 3) as a function of the CPU - data and the latches, then data is rotated as specified by the - same register. - 1: Mode 1 is used for video to video transfers. - A read access will load the data latches with the contents of - the addressed byte of video memory. A write access will write - the contents of the latches to the addressed byte. Thus a single - MOVSB instruction can copy all pixels in the source address byte - to the destination address. - 2: Mode 2 writes a color to all pixels in the addressed byte of - video memory. Bit 0 of the CPU data is written to plane 0 et - cetera. Individual bits can be enabled or disabled through the - Bit Mask register (3CEh index 8). - 3: Mode 3 can be used to fill an area with a color and pattern. The - CPU data is rotated according to 3CEh index 3 bits 0-2 and anded - with the Bit Mask Register (3CEh index 8). For each bit in the - result the corresponding pixel is set to the color in the - Set/Reset Register (3CEh index 0 bits 0-3) if the bit is set and - to the contents of the processor latch if the bit is clear. - 3 Read Mode - 0: Data is read from one of 4 bit planes depending on the Read Map - Select Register (3CEh index 4). - 1: Data returned is a comparison between the 8 pixels occupying the - read byte and the color in the Color Compare Register (3CEh - index 2). A bit is set if the color of the corresponding pixel - matches the register. - 4 Enables Odd/Even mode if set (See 3C4h index 4 bit 2). - 5 Enables CGA style 4 color pixels using even/odd bit pairs if set. - 6 Enables 256 color mode if set. - */ - break; - case 6: /* Miscellaneous Register */ - if (((VGA.vga.gfx.miscellaneous ^ val) & 0x0c)!=0) { - VGA.vga.gfx.miscellaneous=(byte)val; - VGA.VGA_DetermineMode(); - } else VGA.vga.gfx.miscellaneous=(byte)val; - VGA_memory.VGA_SetupHandlers(); - /* - 0 Indicates Graphics Mode if set, Alphanumeric mode else. - 1 Enables Odd/Even mode if set. - 2-3 Memory Mapping: - 0: use A000h-BFFFh - 1: use A000h-AFFFh VGA Graphics modes - 2: use B000h-B7FFh Monochrome modes - 3: use B800h-BFFFh CGA modes - */ - break; - case 7: /* Color Don't Care Register */ - VGA.vga.gfx.color_dont_care=(short)(val & 0x0f); - /* - 0 Ignore bit plane 0 in Read mode 1 if clear. - 1 Ignore bit plane 1 in Read mode 1 if clear. - 2 Ignore bit plane 2 in Read mode 1 if clear. - 3 Ignore bit plane 3 in Read mode 1 if clear. - */ - VGA.vga.config.color_dont_care=(short)(val & 0xf); - // LOG_DEBUG("Color don't care = %2X",val); - break; - case 8: /* Bit Mask Register */ - VGA.vga.gfx.bit_mask=(short)val; - VGA.vga.config.full_bit_mask=VGA.ExpandTable[val]; - // LOG_DEBUG("Bit mask %2X",val); - /* - 0-7 Each bit if set enables writing to the corresponding bit of a byte in - display memory. - */ - break; - default: - if (VGA.svga.write_p3cf!=null) { - VGA.svga.write_p3cf.call(VGA.vga.gfx.index, val, iolen); - break; - } - if (VGA.vga.gfx.index == 9 && !index9warned) { - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:3CF:Write "+Integer.toString(val, 16)+" to illegal index 9"); - index9warned=true; - break; - } - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:3CF:Write "+Integer.toString(val, 16)+" to illegal index "+Integer.toString(VGA.vga.gfx.index,16)); + } + if (VGA.vga.gfx.index == 9 && !index9warned) { + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:3CF:Write "+Integer.toString(val, 16)+" to illegal index 9"); + index9warned=true; break; } + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:3CF:Write "+Integer.toString(val, 16)+" to illegal index "+Integer.toString(VGA.vga.gfx.index,16)); + break; } }; - private static IoHandler.IO_ReadHandler read_p3cf = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - switch (VGA.vga.gfx.index) { - case 0: /* Set/Reset Register */ - return VGA.vga.gfx.set_reset; - case 1: /* Enable Set/Reset Register */ - return VGA.vga.gfx.enable_set_reset; - case 2: /* Color Compare Register */ - return VGA.vga.gfx.color_compare; - case 3: /* Data Rotate */ - return VGA.vga.gfx.data_rotate; - case 4: /* Read Map Select Register */ - return VGA.vga.gfx.read_map_select; - case 5: /* Mode Register */ - return VGA.vga.gfx.mode; - case 6: /* Miscellaneous Register */ - return VGA.vga.gfx.miscellaneous & 0xFF; - case 7: /* Color Don't Care Register */ - return VGA.vga.gfx.color_dont_care; - case 8: /* Bit Mask Register */ - return VGA.vga.gfx.bit_mask; - default: - if (VGA.svga.read_p3cf!=null) - return VGA.svga.read_p3cf.call(VGA.vga.gfx.index, iolen); - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"Reading from illegal index "+Integer.toString(VGA.vga.gfx.index, 16)+" in port "+Integer.toString(port,16)); - break; - } - return 0; /* Compiler happy */ + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3cf = (port, iolen) -> { + switch (VGA.vga.gfx.index) { + case 0: /* Set/Reset Register */ + return VGA.vga.gfx.set_reset; + case 1: /* Enable Set/Reset Register */ + return VGA.vga.gfx.enable_set_reset; + case 2: /* Color Compare Register */ + return VGA.vga.gfx.color_compare; + case 3: /* Data Rotate */ + return VGA.vga.gfx.data_rotate; + case 4: /* Read Map Select Register */ + return VGA.vga.gfx.read_map_select; + case 5: /* Mode Register */ + return VGA.vga.gfx.mode; + case 6: /* Miscellaneous Register */ + return VGA.vga.gfx.miscellaneous & 0xFF; + case 7: /* Color Don't Care Register */ + return VGA.vga.gfx.color_dont_care; + case 8: /* Bit Mask Register */ + return VGA.vga.gfx.bit_mask; + default: + if (VGA.svga.read_p3cf!=null) + return VGA.svga.read_p3cf.call(VGA.vga.gfx.index, iolen); + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"Reading from illegal index "+Integer.toString(VGA.vga.gfx.index, 16)+" in port "+Integer.toString(port,16)); + break; } + return 0; /* Compiler happy */ }; static public void VGA_SetupGFX() { diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_memory.java b/jdosbox/src/main/java/jdos/hardware/VGA_memory.java index d0e32194..69e3e7b5 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_memory.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_memory.java @@ -11,7 +11,7 @@ import jdos.util.Ptr; public class VGA_memory { - static public boolean VGA_KEEP_CHANGES = false; + static public final boolean VGA_KEEP_CHANGES = false; // static private long CHECKED(long addr) { // if (Config.C_VGARAM_CHECKED) @@ -94,7 +94,7 @@ static private int CHECKED3(int addr) { private static class VGAPages { /*Bitu*/int base, mask; } - private static VGAPages vgapages = new VGAPages(); + private static final VGAPages vgapages = new VGAPages(); private static class VGA_UnchainedRead_Handler extends Paging.PageHandler { public /*Bitu*/int readHandler(/*PhysPt*/int start) { @@ -140,7 +140,7 @@ private static class VGA_ChainedEGA_Handler extends Paging.PageHandler { return RAM.readb(VGA.vga.mem.linear+addr); } public void writeHandler(/*PhysPt*/int s, /*Bit8u*/int val) { - int start = (int)s; + int start = s; ModeOperation(val); /* Update video memory and the pixel buffer */ VGA.VGA_Latch pixels = new VGA.VGA_Latch(); @@ -173,14 +173,14 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { addr += VGA.vga.svga.bank_write_full; // addr = CHECKED(addr); // MEM_CHANGED( addr << 3); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); } public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { addr = Paging.PAGING_GetPhysicalAddress(addr) & vgapages.mask; addr += VGA.vga.svga.bank_write_full; // addr = CHECKED(addr); // MEM_CHANGED( addr << 3); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); writeHandler(addr+1,(/*Bit8u*/short)(val >> 8)); } public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { @@ -188,7 +188,7 @@ public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { addr += VGA.vga.svga.bank_write_full; // addr = CHECKED(addr); // MEM_CHANGED( addr << 3); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); writeHandler(addr+1,(/*Bit8u*/short)(val >> 8)); writeHandler(addr+2,(/*Bit8u*/short)(val >> 16)); writeHandler(addr+3,(/*Bit8u*/short)(val >> 24)); @@ -254,14 +254,14 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { addr += VGA.vga.svga.bank_write_full; // addr = CHECKED2(addr); // MEM_CHANGED( addr << 3); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); } public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { addr = Paging.PAGING_GetPhysicalAddress(addr) & vgapages.mask; addr += VGA.vga.svga.bank_write_full; // addr = CHECKED2(addr); // MEM_CHANGED( addr << 3); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); writeHandler(addr+1,(/*Bit8u*/short)(val >> 8)); } public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { @@ -269,7 +269,7 @@ public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { addr += VGA.vga.svga.bank_write_full; // addr = CHECKED2(addr); // MEM_CHANGED( addr << 3); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); writeHandler(addr+1,(/*Bit8u*/short)(val >> 8)); writeHandler(addr+2,(/*Bit8u*/short)(val >> 16)); writeHandler(addr+3,(/*Bit8u*/short)(val >> 24)); @@ -380,7 +380,7 @@ public VGA_UnchainedVGA_Handler() { flags=Paging.PFLAG_NOCODE; } public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { - int a = (int)(addr & vgapages.mask); + int a = addr & vgapages.mask; a += VGA.vga.svga.bank_write_full; //addr = CHECKED2(addr); //MEM_CHANGED( addr << 2 ); @@ -388,7 +388,6 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { } public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { int a = Paging.PAGING_GetPhysicalAddress(addr) & vgapages.mask; - addr += VGA.vga.svga.bank_write_full; //addr = CHECKED2(addr); //MEM_CHANGED( addr << 2); writeHandler(a,val); @@ -396,7 +395,6 @@ public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { } public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { int a = Paging.PAGING_GetPhysicalAddress(addr) & vgapages.mask; - addr += VGA.vga.svga.bank_write_full; //addr = CHECKED2(addr); //MEM_CHANGED( addr << 2); writeHandler(a,val); @@ -506,14 +504,14 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { addr&=(VGA.vga.vmemwrap>>2)-1; // addr = CHECKED4(addr); // MEM_CHANGED( addr << 3 ); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); } public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { addr = VGA.vga.svga.bank_write_full + (Paging.PAGING_GetPhysicalAddress(addr) & 0xffff); addr&=(VGA.vga.vmemwrap>>2)-1; // addr = CHECKED4(addr); // MEM_CHANGED( addr << 3 ); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); writeHandler(addr+1,(/*Bit8u*/short)(val >> 8)); } public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { @@ -521,7 +519,7 @@ public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { addr&=(VGA.vga.vmemwrap>>2)-1; // addr = CHECKED4(addr); // MEM_CHANGED( addr << 3 ); - writeHandler(addr+0,(/*Bit8u*/short)(val >> 0)); + writeHandler(addr,(/*Bit8u*/short)(val)); writeHandler(addr+1,(/*Bit8u*/short)(val >> 8)); writeHandler(addr+2,(/*Bit8u*/short)(val >> 16)); writeHandler(addr+3,(/*Bit8u*/short)(val >> 24)); @@ -609,28 +607,28 @@ public VGA_MMIO_Handler() { flags=Paging.PFLAG_NOCODE; } public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { - /*Bitu*/int port = (int)Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; + /*Bitu*/int port = Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; VGA_xga.XGA_Write.call(port, val, 1); } public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { - /*Bitu*/int port = (int)Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; + /*Bitu*/int port = Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; VGA_xga.XGA_Write.call(port, val, 2); } public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { - /*Bitu*/int port = (int)Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; + /*Bitu*/int port = Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; VGA_xga.XGA_Write.call(port, val, 4); } public /*Bitu*/int readb(/*PhysPt*/int addr) { - /*Bitu*/int port = (int)Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; + /*Bitu*/int port = Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; return VGA_xga.XGA_Read.call(port, 1); } public /*Bitu*/int readw(/*PhysPt*/int addr) { - /*Bitu*/int port = (int)Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; + /*Bitu*/int port = Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; return VGA_xga.XGA_Read.call(port, 2); } public /*Bitu*/int readd(/*PhysPt*/int addr) { - /*Bitu*/int port = (int)Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; + /*Bitu*/int port = Paging.PAGING_GetPhysicalAddress(addr) & 0xffff; return VGA_xga.XGA_Read.call(port, 4); } } @@ -684,22 +682,22 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { } private static class vg { - public VGA_Map_Handler map = new VGA_Map_Handler(); - public VGA_Changes_Handler changes = new VGA_Changes_Handler(); - public VGA_TEXT_PageHandler text = new VGA_TEXT_PageHandler(); - public VGA_TANDY_PageHandler tandy = new VGA_TANDY_PageHandler(); - public VGA_ChainedEGA_Handler cega = new VGA_ChainedEGA_Handler(); - public VGA_ChainedVGA_Handler cvga = new VGA_ChainedVGA_Handler(); - public VGA_UnchainedEGA_Handler uega = new VGA_UnchainedEGA_Handler(); - public VGA_UnchainedVGA_Handler uvga = new VGA_UnchainedVGA_Handler(); - public VGA_PCJR_Handler pcjr = new VGA_PCJR_Handler(); - public VGA_LIN4_Handler lin4 = new VGA_LIN4_Handler(); - public VGA_LFB_Handler lfb = new VGA_LFB_Handler(); - public VGA_LFBChanges_Handler lfbchanges = new VGA_LFBChanges_Handler(); - public VGA_MMIO_Handler mmio = new VGA_MMIO_Handler(); - public VGA_Empty_Handler empty = new VGA_Empty_Handler(); + public final VGA_Map_Handler map = new VGA_Map_Handler(); + public final VGA_Changes_Handler changes = new VGA_Changes_Handler(); + public final VGA_TEXT_PageHandler text = new VGA_TEXT_PageHandler(); + public final VGA_TANDY_PageHandler tandy = new VGA_TANDY_PageHandler(); + public final VGA_ChainedEGA_Handler cega = new VGA_ChainedEGA_Handler(); + public final VGA_ChainedVGA_Handler cvga = new VGA_ChainedVGA_Handler(); + public final VGA_UnchainedEGA_Handler uega = new VGA_UnchainedEGA_Handler(); + public final VGA_UnchainedVGA_Handler uvga = new VGA_UnchainedVGA_Handler(); + public final VGA_PCJR_Handler pcjr = new VGA_PCJR_Handler(); + public final VGA_LIN4_Handler lin4 = new VGA_LIN4_Handler(); + public final VGA_LFB_Handler lfb = new VGA_LFB_Handler(); + public final VGA_LFBChanges_Handler lfbchanges = new VGA_LFBChanges_Handler(); + public final VGA_MMIO_Handler mmio = new VGA_MMIO_Handler(); + public final VGA_Empty_Handler empty = new VGA_Empty_Handler(); } - static private vg vgaph = new vg(); + static private final vg vgaph = new vg(); private static void VGA_ChangedBank() { if (!VGA.VGA_LFB_MAPPED) { @@ -762,7 +760,7 @@ public static void VGA_SetupHandlers() { case MachineType.MCH_VGA: break; default: - Log.log_msg("Illegal machine type "+Dosbox.machine); + System.out.println("Illegal machine type "+Dosbox.machine); return; } @@ -860,56 +858,52 @@ public static void VGA_StartUpdateLFB() { VGA.vga.lfb.handler = vgaph.lfb; else VGA.vga.lfb.handler = vgaph.lfbchanges; - Memory.MEM_SetLFB(VGA.vga.s3.la_window << 4 ,(int)(VGA.vga.vmemsize/4096), VGA.vga.lfb.handler, vgaph.mmio); + Memory.MEM_SetLFB(VGA.vga.s3.la_window << 4 , VGA.vga.vmemsize/4096, VGA.vga.lfb.handler, vgaph.mmio); } - public static Section.SectionFunction VGA_Memory_ShutDown = new Section.SectionFunction() { - public void call(Section section) { - VGA.vga.mem.linear_orgptr = 0; - VGA.vga.mem.linear = 0; - VGA.vga.fastmem_orgptr = 0; - VGA.vga.fastmem = 0; - } + public static final Section.SectionFunction VGA_Memory_ShutDown = section -> { + VGA.vga.mem.linear_orgptr = 0; + VGA.vga.mem.linear = 0; + VGA.vga.fastmem_orgptr = 0; + VGA.vga.fastmem = 0; }; - public static Section.SectionFunction VGA_SetupMemory = new Section.SectionFunction() { - public void call(Section sec) { - VGA.vga.svga.bank_read = VGA.vga.svga.bank_write = 0; - VGA.vga.svga.bank_read_full = VGA.vga.svga.bank_write_full = 0; + public static final Section.SectionFunction VGA_SetupMemory = sec -> { + VGA.vga.svga.bank_read = VGA.vga.svga.bank_write = 0; + VGA.vga.svga.bank_read_full = VGA.vga.svga.bank_write_full = 0; - /*Bit32u*/int vga_allocsize=VGA.vga.vmemsize; - // Keep lower limit at 512k - if (vga_allocsize<512*1024) vga_allocsize=512*1024; - // We reserve extra 2K for one scan line - vga_allocsize+=2048; - VGA.vga.mem.linear_orgptr = Memory.allocate(vga_allocsize); - VGA.vga.mem.linear=VGA.vga.mem.linear_orgptr; + /*Bit32u*/int vga_allocsize=VGA.vga.vmemsize; + // Keep lower limit at 512k + if (vga_allocsize<512*1024) vga_allocsize=512*1024; + // We reserve extra 2K for one scan line + vga_allocsize+=2048; + VGA.vga.mem.linear_orgptr = Memory.allocate(vga_allocsize); + VGA.vga.mem.linear=VGA.vga.mem.linear_orgptr; - VGA.vga.fastmem_orgptr = Memory.allocate(Memory.videoCacheSize+4096); - VGA.vga.fastmem = VGA.vga.fastmem_orgptr; + VGA.vga.fastmem_orgptr = Memory.allocate(Memory.videoCacheSize+4096); + VGA.vga.fastmem = VGA.vga.fastmem_orgptr; - VGA_draw.TempLine = Memory.allocate(VGA_draw.TEMPLINE_SIZE); + VGA_draw.TempLine = Memory.allocate(VGA_draw.TEMPLINE_SIZE); - // In most cases these values stay the same. Assumptions: vmemwrap is power of 2, - // vmemwrap <= vmemsize, fastmem implicitly has mem wrap twice as big - VGA.vga.vmemwrap = VGA.vga.vmemsize; + // In most cases these values stay the same. Assumptions: vmemwrap is power of 2, + // vmemwrap <= vmemsize, fastmem implicitly has mem wrap twice as big + VGA.vga.vmemwrap = VGA.vga.vmemsize; - if (VGA_KEEP_CHANGES) { - VGA.vga.changes = new VGA.VGA_Changes(); - int changesMapSize = (VGA.vga.vmemsize >> VGA.VGA_CHANGE_SHIFT) + 32; - VGA.vga.changes.map = new /*Bit8u*/Ptr(changesMapSize); - } - VGA.vga.svga.bank_read = VGA.vga.svga.bank_write = 0; - VGA.vga.svga.bank_read_full = VGA.vga.svga.bank_write_full = 0; - VGA.vga.svga.bank_size = 0x10000; /* most common bank size is 64K */ + if (VGA_KEEP_CHANGES) { + VGA.vga.changes = new VGA.VGA_Changes(); + int changesMapSize = (VGA.vga.vmemsize >> VGA.VGA_CHANGE_SHIFT) + 32; + VGA.vga.changes.map = new /*Bit8u*/Ptr(changesMapSize); + } + VGA.vga.svga.bank_read = VGA.vga.svga.bank_write = 0; + VGA.vga.svga.bank_read_full = VGA.vga.svga.bank_write_full = 0; + VGA.vga.svga.bank_size = 0x10000; /* most common bank size is 64K */ - sec.AddDestroyFunction(VGA_Memory_ShutDown); + sec.AddDestroyFunction(VGA_Memory_ShutDown); - if (Dosbox.machine== MachineType.MCH_PCJR) { - /* PCJr does not have dedicated graphics memory but uses - conventional memory below 128k */ - //TODO map? - } + if (Dosbox.machine== MachineType.MCH_PCJR) { + /* PCJr does not have dedicated graphics memory but uses + conventional memory below 128k */ + //TODO map? } }; } diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_misc.java b/jdosbox/src/main/java/jdos/hardware/VGA_misc.java index 20fafd6d..03861ed7 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_misc.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_misc.java @@ -4,123 +4,111 @@ import jdos.types.MachineType; public class VGA_misc { - public static IoHandler.IO_ReadHandler vga_read_p3da = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - /*Bit8u*/int retval=0; - double timeInFrame = Pic.PIC_FullIndex()-VGA.vga.draw.delay.framestart; - - VGA.vga.internal.attrindex=false; - VGA.vga.tandy.pcjr_flipflop=false; - - // 3DAh (R): Status Register - // bit 0 Horizontal or Vertical blanking - // 3 Vertical sync - - if (timeInFrame >= VGA.vga.draw.delay.vrstart && - timeInFrame <= VGA.vga.draw.delay.vrend) - retval |= 8; - if (timeInFrame >= VGA.vga.draw.delay.vdend) { + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_ReadHandler vga_read_p3da = (port, iolen) -> { + /*Bit8u*/int retval=0; + double timeInFrame = Pic.PIC_FullIndex()-VGA.vga.draw.delay.framestart; + + VGA.vga.internal.attrindex=false; + VGA.vga.tandy.pcjr_flipflop=false; + + // 3DAh (R): Status Register + // bit 0 Horizontal or Vertical blanking + // 3 Vertical sync + + if (timeInFrame >= VGA.vga.draw.delay.vrstart && + timeInFrame <= VGA.vga.draw.delay.vrend) + retval |= 8; + if (timeInFrame >= VGA.vga.draw.delay.vdend) { + retval |= 1; + } else { + double timeInLine=timeInFrame % VGA.vga.draw.delay.htotal; + if (timeInLine >= VGA.vga.draw.delay.hblkstart && + timeInLine <= VGA.vga.draw.delay.hblkend) { retval |= 1; - } else { - double timeInLine=timeInFrame % VGA.vga.draw.delay.htotal; - if (timeInLine >= VGA.vga.draw.delay.hblkstart && - timeInLine <= VGA.vga.draw.delay.hblkend) { - retval |= 1; - } } - return retval; } + return retval; }; - private static IoHandler.IO_WriteHandler write_p3c2 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.misc_output=(short)val; - if ((val & 0x1)!=0) { - IoHandler.IO_RegisterWriteHandler(0x3d4,VGA_crtc.vga_write_p3d4,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x3d4,VGA_crtc.vga_read_p3d4,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x3da,vga_read_p3da,IoHandler.IO_MB); - - IoHandler.IO_RegisterWriteHandler(0x3d5,VGA_crtc.vga_write_p3d5,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x3d5,VGA_crtc.vga_read_p3d5,IoHandler.IO_MB); - - IoHandler.IO_FreeWriteHandler(0x3b4,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x3b4,IoHandler.IO_MB); - IoHandler.IO_FreeWriteHandler(0x3b5,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x3b5,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x3ba,IoHandler.IO_MB); - } else { - IoHandler.IO_RegisterWriteHandler(0x3b4,VGA_crtc.vga_write_p3d4,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x3b4,VGA_crtc.vga_read_p3d4,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x3ba,vga_read_p3da,IoHandler.IO_MB); - - IoHandler.IO_RegisterWriteHandler(0x3b5,VGA_crtc.vga_write_p3d5,IoHandler.IO_MB); - IoHandler.IO_RegisterReadHandler(0x3b5,VGA_crtc.vga_read_p3d5,IoHandler.IO_MB); + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p3c2 = (port, val, iolen) -> { + VGA.vga.misc_output=(short)val; + if ((val & 0x1)!=0) { + IoHandler.IO_RegisterWriteHandler(0x3d4,VGA_crtc.vga_write_p3d4,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x3d4,VGA_crtc.vga_read_p3d4,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x3da,vga_read_p3da,IoHandler.IO_MB); + IoHandler.IO_RegisterWriteHandler(0x3d5,VGA_crtc.vga_write_p3d5,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x3d5,VGA_crtc.vga_read_p3d5,IoHandler.IO_MB); - IoHandler.IO_FreeWriteHandler(0x3d4,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x3d4,IoHandler.IO_MB); - IoHandler.IO_FreeWriteHandler(0x3d5,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x3d5,IoHandler.IO_MB); - IoHandler.IO_FreeReadHandler(0x3da,IoHandler.IO_MB); - } - /* - 0 If set Color Emulation. Base Address=3Dxh else Mono Emulation. Base Address=3Bxh. - 2-3 Clock Select. 0: 25MHz, 1: 28MHz - 5 When in Odd/Even modes Select High 64k bank if set - 6 Horizontal Sync Polarity. Negative if set - 7 Vertical Sync Polarity. Negative if set - Bit 6-7 indicates the number of lines on the display: - 1: 400, 2: 350, 3: 480 - Note: Set to all zero on a hardware reset. - Note: This register can be read from port 3CCh. - */ - } - }; + IoHandler.IO_FreeWriteHandler(0x3b4,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x3b4,IoHandler.IO_MB); + IoHandler.IO_FreeWriteHandler(0x3b5,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x3b5,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x3ba,IoHandler.IO_MB); + } else { + IoHandler.IO_RegisterWriteHandler(0x3b4,VGA_crtc.vga_write_p3d4,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x3b4,VGA_crtc.vga_read_p3d4,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x3ba,vga_read_p3da,IoHandler.IO_MB); - private static IoHandler.IO_ReadHandler read_p3cc = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.misc_output; - } - }; + IoHandler.IO_RegisterWriteHandler(0x3b5,VGA_crtc.vga_write_p3d5,IoHandler.IO_MB); + IoHandler.IO_RegisterReadHandler(0x3b5,VGA_crtc.vga_read_p3d5,IoHandler.IO_MB); -// VGA feature control register - private static IoHandler.IO_ReadHandler read_p3ca = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return 0; - } - }; - private static IoHandler.IO_ReadHandler read_p3c8 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return 0x10; + IoHandler.IO_FreeWriteHandler(0x3d4,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x3d4,IoHandler.IO_MB); + IoHandler.IO_FreeWriteHandler(0x3d5,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x3d5,IoHandler.IO_MB); + IoHandler.IO_FreeReadHandler(0x3da,IoHandler.IO_MB); } + /* + 0 If set Color Emulation. Base Address=3Dxh else Mono Emulation. Base Address=3Bxh. + 2-3 Clock Select. 0: 25MHz, 1: 28MHz + 5 When in Odd/Even modes Select High 64k bank if set + 6 Horizontal Sync Polarity. Negative if set + 7 Vertical Sync Polarity. Negative if set + Bit 6-7 indicates the number of lines on the display: + 1: 400, 2: 350, 3: 480 + Note: Set to all zero on a hardware reset. + Note: This register can be read from port 3CCh. + */ }; - private static IoHandler.IO_ReadHandler read_p3c2 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - /*Bit8u*/int retval=0; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3cc = (port, iolen) -> VGA.vga.misc_output; - if (Dosbox.machine== MachineType.MCH_EGA) retval = 0x0F; - else if (Dosbox.IS_VGA_ARCH()) retval = 0x60; - if ((Dosbox.machine==MachineType.MCH_VGA) || (((VGA.vga.misc_output>>2)&3)==0) || (((VGA.vga.misc_output>>2)&3)==3)) { - retval |= 0x10; - } + /*Bitu*//*Bitu*//*Bitu*/ + // VGA feature control register + private static final IoHandler.IO_ReadHandler read_p3ca = (port, iolen) -> 0; - if (VGA.vga.draw.vret_triggered) retval |= 0x80; - return retval; - /* - 0-3 0xF on EGA, 0x0 on VGA - 4 Status of the switch selected by the Miscellaneous Output - Register 3C2h bit 2-3. Switch high if set. - (apparently always 1 on VGA) - 5 (EGA) Pin 19 of the Feature Connector (FEAT0) is high if set - 6 (EGA) Pin 17 of the Feature Connector (FEAT1) is high if set - (default differs by card, ET4000 sets them both) - 7 If set IRQ 2 has happened due to Vertical Retrace. - Should be cleared by IRQ 2 interrupt routine by clearing port 3d4h - index 11h bit 4. - */ + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3c8 = (port, iolen) -> 0x10; + + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_p3c2 = (port, iolen) -> { + /*Bit8u*/int retval=0; + + if (Dosbox.machine== MachineType.MCH_EGA) retval = 0x0F; + else if (Dosbox.IS_VGA_ARCH()) retval = 0x60; + if ((Dosbox.machine==MachineType.MCH_VGA) || (((VGA.vga.misc_output>>2)&3)==0) || (((VGA.vga.misc_output>>2)&3)==3)) { + retval |= 0x10; } + + if (VGA.vga.draw.vret_triggered) retval |= 0x80; + return retval; + /* + 0-3 0xF on EGA, 0x0 on VGA + 4 Status of the switch selected by the Miscellaneous Output + Register 3C2h bit 2-3. Switch high if set. + (apparently always 1 on VGA) + 5 (EGA) Pin 19 of the Feature Connector (FEAT0) is high if set + 6 (EGA) Pin 17 of the Feature Connector (FEAT1) is high if set + (default differs by card, ET4000 sets them both) + 7 If set IRQ 2 has happened due to Vertical Retrace. + Should be cleared by IRQ 2 interrupt routine by clearing port 3d4h + index 11h bit 4. + */ }; static public void VGA_SetupMisc() { diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_other.java b/jdosbox/src/main/java/jdos/hardware/VGA_other.java index 294f6ed4..48dee5c6 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_other.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_other.java @@ -12,162 +12,154 @@ import jdos.util.Ptr; public class VGA_other { - private static IoHandler.IO_WriteHandler write_crtc_index_other = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.other.index=(short)val; - } - }; - - private static IoHandler.IO_ReadHandler read_crtc_index_other = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.other.index; - } - }; - - private static IoHandler.IO_WriteHandler write_crtc_data_other = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (VGA.vga.other.index) { - case 0x00: //Horizontal total - if ((VGA.vga.other.htotal ^ val)!=0) VGA.VGA_StartResize(); - VGA.vga.other.htotal=(/*Bit8u*/short)val; - break; - case 0x01: //Horizontal displayed chars - if ((VGA.vga.other.hdend ^ val)!=0) VGA.VGA_StartResize(); - VGA.vga.other.hdend=(/*Bit8u*/short)val; - break; - case 0x02: //Horizontal sync position - VGA.vga.other.hsyncp=(/*Bit8u*/short)val; - break; - case 0x03: //Horizontal sync width - if (Dosbox.machine== MachineType.MCH_TANDY) VGA.vga.other.vsyncw=(/*Bit8u*/short)(val >> 4); - else VGA.vga.other.vsyncw = 16; // The MC6845 has a fixed v-sync width of 16 lines - VGA.vga.other.hsyncw=(/*Bit8u*/short)(val & 0xf); - break; - case 0x04: //Vertical total - if ((VGA.vga.other.vtotal ^ val)!=0) VGA.VGA_StartResize(); - VGA.vga.other.vtotal=(/*Bit8u*/short)val; - break; - case 0x05: //Vertical display adjust - if ((VGA.vga.other.vadjust ^ val)!=0) VGA.VGA_StartResize(); - VGA.vga.other.vadjust=(/*Bit8u*/short)val; - break; - case 0x06: //Vertical rows - if ((VGA.vga.other.vdend ^ val)!=0) VGA.VGA_StartResize(); - VGA.vga.other.vdend=(/*Bit8u*/short)val; - break; - case 0x07: //Vertical sync position - VGA.vga.other.vsyncp=(/*Bit8u*/short)val; - break; - case 0x09: //Max scanline - val &= 0x1f; // VGADOC says bit 0-3 but the MC6845 datasheet says bit 0-4 - if ((VGA.vga.other.max_scanline ^ val)!=0) VGA.VGA_StartResize(); - VGA.vga.other.max_scanline=(/*Bit8u*/short)val; - break; - case 0x0A: /* Cursor Start Register */ - VGA.vga.other.cursor_start = (/*Bit8u*/short)(val & 0x3f); - VGA.vga.draw.cursor.sline = (/*Bit8u*/short)(val&0x1f); - VGA.vga.draw.cursor.enabled = ((val & 0x60) != 0x20); - break; - case 0x0B: /* Cursor End Register */ - VGA.vga.other.cursor_end = (/*Bit8u*/short)(val&0x1f); - VGA.vga.draw.cursor.eline = (/*Bit8u*/short)(val&0x1f); - break; - case 0x0C: /* Start Address High Register */ - // Bit 12 (depending on video mode) and 13 are actually masked too, - // but so far no need to implement it. - VGA.vga.config.display_start=(VGA.vga.config.display_start & 0x00FF) | ((val&0x3F) << 8); - break; - case 0x0D: /* Start Address Low Register */ - VGA.vga.config.display_start=(VGA.vga.config.display_start & 0xFF00) | val; - break; - case 0x0E: /*Cursor Location High Register */ - VGA.vga.config.cursor_start&=0x00ff; - VGA.vga.config.cursor_start|=((/*Bit8u*/short)val) << 8; - break; - case 0x0F: /* Cursor Location Low Register */ - VGA.vga.config.cursor_start&=0xff00; - VGA.vga.config.cursor_start|=(/*Bit8u*/short)val; - break; - case 0x10: /* Light Pen High */ - VGA.vga.other.lightpen &= 0xff; - VGA.vga.other.lightpen |= (val & 0x3f)<<8; // only 6 bits - break; - case 0x11: /* Light Pen Low */ - VGA.vga.other.lightpen &= 0xff00; - VGA.vga.other.lightpen |= (/*Bit8u*/short)val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"MC6845:Write "+Integer.toString(val, 16)+" to illegal index "+Integer.toString(VGA.vga.other.index,16)); - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_crtc_index_other = (port, val, iolen) -> VGA.vga.other.index=(short)val; + + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_crtc_index_other = (port, iolen) -> VGA.vga.other.index; + + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_crtc_data_other = (port, val, iolen) -> { + switch (VGA.vga.other.index) { + case 0x00: //Horizontal total + if ((VGA.vga.other.htotal ^ val)!=0) VGA.VGA_StartResize(); + VGA.vga.other.htotal=(/*Bit8u*/short)val; + break; + case 0x01: //Horizontal displayed chars + if ((VGA.vga.other.hdend ^ val)!=0) VGA.VGA_StartResize(); + VGA.vga.other.hdend=(/*Bit8u*/short)val; + break; + case 0x02: //Horizontal sync position + VGA.vga.other.hsyncp=(/*Bit8u*/short)val; + break; + case 0x03: //Horizontal sync width + if (Dosbox.machine== MachineType.MCH_TANDY) VGA.vga.other.vsyncw=(/*Bit8u*/short)(val >> 4); + else VGA.vga.other.vsyncw = 16; // The MC6845 has a fixed v-sync width of 16 lines + VGA.vga.other.hsyncw=(/*Bit8u*/short)(val & 0xf); + break; + case 0x04: //Vertical total + if ((VGA.vga.other.vtotal ^ val)!=0) VGA.VGA_StartResize(); + VGA.vga.other.vtotal=(/*Bit8u*/short)val; + break; + case 0x05: //Vertical display adjust + if ((VGA.vga.other.vadjust ^ val)!=0) VGA.VGA_StartResize(); + VGA.vga.other.vadjust=(/*Bit8u*/short)val; + break; + case 0x06: //Vertical rows + if ((VGA.vga.other.vdend ^ val)!=0) VGA.VGA_StartResize(); + VGA.vga.other.vdend=(/*Bit8u*/short)val; + break; + case 0x07: //Vertical sync position + VGA.vga.other.vsyncp=(/*Bit8u*/short)val; + break; + case 0x09: //Max scanline + val &= 0x1f; // VGADOC says bit 0-3 but the MC6845 datasheet says bit 0-4 + if ((VGA.vga.other.max_scanline ^ val)!=0) VGA.VGA_StartResize(); + VGA.vga.other.max_scanline=(/*Bit8u*/short)val; + break; + case 0x0A: /* Cursor Start Register */ + VGA.vga.other.cursor_start = (/*Bit8u*/short)(val & 0x3f); + VGA.vga.draw.cursor.sline = (/*Bit8u*/short)(val&0x1f); + VGA.vga.draw.cursor.enabled = ((val & 0x60) != 0x20); + break; + case 0x0B: /* Cursor End Register */ + VGA.vga.other.cursor_end = (/*Bit8u*/short)(val&0x1f); + VGA.vga.draw.cursor.eline = (/*Bit8u*/short)(val&0x1f); + break; + case 0x0C: /* Start Address High Register */ + // Bit 12 (depending on video mode) and 13 are actually masked too, + // but so far no need to implement it. + VGA.vga.config.display_start=(VGA.vga.config.display_start & 0x00FF) | ((val&0x3F) << 8); + break; + case 0x0D: /* Start Address Low Register */ + VGA.vga.config.display_start=(VGA.vga.config.display_start & 0xFF00) | val; + break; + case 0x0E: /*Cursor Location High Register */ + VGA.vga.config.cursor_start&=0x00ff; + VGA.vga.config.cursor_start|=((/*Bit8u*/short)val) << 8; + break; + case 0x0F: /* Cursor Location Low Register */ + VGA.vga.config.cursor_start&=0xff00; + VGA.vga.config.cursor_start|=(/*Bit8u*/short)val; + break; + case 0x10: /* Light Pen High */ + VGA.vga.other.lightpen &= 0xff; + VGA.vga.other.lightpen |= (val & 0x3f)<<8; // only 6 bits + break; + case 0x11: /* Light Pen Low */ + VGA.vga.other.lightpen &= 0xff00; + VGA.vga.other.lightpen |= (/*Bit8u*/short)val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"MC6845:Write "+Integer.toString(val, 16)+" to illegal index "+Integer.toString(VGA.vga.other.index,16)); } }; - private static IoHandler.IO_ReadHandler read_crtc_data_other = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - switch (VGA.vga.other.index) { - case 0x00: //Horizontal total - return VGA.vga.other.htotal; - case 0x01: //Horizontal displayed chars - return VGA.vga.other.hdend; - case 0x02: //Horizontal sync position - return VGA.vga.other.hsyncp; - case 0x03: //Horizontal and vertical sync width - if (Dosbox.machine==MachineType.MCH_TANDY) - return VGA.vga.other.hsyncw | (VGA.vga.other.vsyncw << 4); - else return VGA.vga.other.hsyncw; - case 0x04: //Vertical total - return VGA.vga.other.vtotal; - case 0x05: //Vertical display adjust - return VGA.vga.other.vadjust; - case 0x06: //Vertical rows - return VGA.vga.other.vdend; - case 0x07: //Vertical sync position - return VGA.vga.other.vsyncp; - case 0x09: //Max scanline - return VGA.vga.other.max_scanline; - case 0x0A: /* Cursor Start Register */ - return VGA.vga.other.cursor_start; - case 0x0B: /* Cursor End Register */ - return VGA.vga.other.cursor_end; - case 0x0C: /* Start Address High Register */ - return (/*Bit8u*/short)(VGA.vga.config.display_start >> 8); - case 0x0D: /* Start Address Low Register */ - return (/*Bit8u*/short)(VGA.vga.config.display_start & 0xff); - case 0x0E: /*Cursor Location High Register */ - return (/*Bit8u*/short)(VGA.vga.config.cursor_start >> 8); - case 0x0F: /* Cursor Location Low Register */ - return (/*Bit8u*/short)(VGA.vga.config.cursor_start & 0xff); - case 0x10: /* Light Pen High */ - return (/*Bit8u*/short)(VGA.vga.other.lightpen >> 8); - case 0x11: /* Light Pen Low */ - return (/*Bit8u*/short)(VGA.vga.other.lightpen & 0xff); - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"MC6845:Read from illegal index "+Integer.toString(VGA.vga.other.index,16)); - } - return (/*Bitu*/int)(~0); + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_crtc_data_other = (port, iolen) -> { + switch (VGA.vga.other.index) { + case 0x00: //Horizontal total + return VGA.vga.other.htotal; + case 0x01: //Horizontal displayed chars + return VGA.vga.other.hdend; + case 0x02: //Horizontal sync position + return VGA.vga.other.hsyncp; + case 0x03: //Horizontal and vertical sync width + if (Dosbox.machine==MachineType.MCH_TANDY) + return VGA.vga.other.hsyncw | (VGA.vga.other.vsyncw << 4); + else return VGA.vga.other.hsyncw; + case 0x04: //Vertical total + return VGA.vga.other.vtotal; + case 0x05: //Vertical display adjust + return VGA.vga.other.vadjust; + case 0x06: //Vertical rows + return VGA.vga.other.vdend; + case 0x07: //Vertical sync position + return VGA.vga.other.vsyncp; + case 0x09: //Max scanline + return VGA.vga.other.max_scanline; + case 0x0A: /* Cursor Start Register */ + return VGA.vga.other.cursor_start; + case 0x0B: /* Cursor End Register */ + return VGA.vga.other.cursor_end; + case 0x0C: /* Start Address High Register */ + return (/*Bit8u*/short)(VGA.vga.config.display_start >> 8); + case 0x0D: /* Start Address Low Register */ + return (/*Bit8u*/short)(VGA.vga.config.display_start & 0xff); + case 0x0E: /*Cursor Location High Register */ + return (/*Bit8u*/short)(VGA.vga.config.cursor_start >> 8); + case 0x0F: /* Cursor Location Low Register */ + return (/*Bit8u*/short)(VGA.vga.config.cursor_start & 0xff); + case 0x10: /* Light Pen High */ + return (/*Bit8u*/short)(VGA.vga.other.lightpen >> 8); + case 0x11: /* Light Pen Low */ + return (/*Bit8u*/short)(VGA.vga.other.lightpen & 0xff); + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"MC6845:Read from illegal index "+Integer.toString(VGA.vga.other.index,16)); } + /*Bitu*/ + return ~0; }; - private static IoHandler.IO_WriteHandler write_lightpen = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (port) { - case 0x3db: // Clear lightpen latch - VGA.vga.other.lightpen_triggered = false; - break; - case 0x3dc: // Preset lightpen latch - if (!VGA.vga.other.lightpen_triggered) { - VGA.vga.other.lightpen_triggered = true; // TODO: this shows at port 3ba/3da bit 1 + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_lightpen = (port, val, iolen) -> { + switch (port) { + case 0x3db: // Clear lightpen latch + VGA.vga.other.lightpen_triggered = false; + break; + case 0x3dc: // Preset lightpen latch + if (!VGA.vga.other.lightpen_triggered) { + VGA.vga.other.lightpen_triggered = true; // TODO: this shows at port 3ba/3da bit 1 - double timeInFrame = Pic.PIC_FullIndex()-VGA.vga.draw.delay.framestart; - double timeInLine = timeInFrame % VGA.vga.draw.delay.htotal; - int current_scanline = (int)(timeInFrame / VGA.vga.draw.delay.htotal); + double timeInFrame = Pic.PIC_FullIndex()-VGA.vga.draw.delay.framestart; + double timeInLine = timeInFrame % VGA.vga.draw.delay.htotal; + int current_scanline = (int)(timeInFrame / VGA.vga.draw.delay.htotal); - VGA.vga.other.lightpen = ((VGA.vga.draw.address_add/2) * (current_scanline/2)); - VGA.vga.other.lightpen += (int)((timeInLine / VGA.vga.draw.delay.hdend) * ((float)(VGA.vga.draw.address_add/2))); - VGA.vga.other.lightpen &= 0xFFFF; - } - break; + VGA.vga.other.lightpen = ((VGA.vga.draw.address_add/2) * (current_scanline/2)); + VGA.vga.other.lightpen += (int)((timeInLine / VGA.vga.draw.delay.hdend) * ((float)(VGA.vga.draw.address_add/2))); + VGA.vga.other.lightpen &= 0xFFFF; } + break; } }; @@ -209,21 +201,21 @@ private static void update_cga16_color() { for(/*Bitu*/int i = 0; i < 16;i++) { for(/*Bitu*/int j = 0;j < 5;j++) { index = 0x80|(j << 4)|i; //use upperpart of vga pallette - colorBit4 = (i&1)>>0; + colorBit4 = (i & 1); colorBit3 = (i&2)>>1; colorBit2 = (i&4)>>2; colorBit1 = (i&8)>>3; //calculate lookup table I = 0; Q = 0; - I += (double) colorBit1; - Q += (double) colorBit2; - I -= (double) colorBit3; - Q -= (double) colorBit4; + I += colorBit1; + Q += colorBit2; + I -= colorBit3; + Q -= colorBit4; Y = (double) j / 4.0; //calculated avarage is over 4 bits - pixelI = I * 1.0 / 3.0; //I* tvSaturnation / 3.0 - pixelQ = Q * 1.0 / 3.0; //Q* tvSaturnation / 3.0 + pixelI = I / 3.0; //I* tvSaturnation / 3.0 + pixelQ = Q / 3.0; //Q* tvSaturnation / 3.0 I = pixelI*coshue + pixelQ*sinhue; Q = pixelQ*coshue - pixelI*sinhue; @@ -236,24 +228,20 @@ private static void update_cga16_color() { } } - private static Mapper.MAPPER_Handler IncreaseHue = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (!pressed) - return; - hue_offset += 5.0; - update_cga16_color(); - Log.log_msg("Hue at "+hue_offset); - } + private static final Mapper.MAPPER_Handler IncreaseHue = pressed -> { + if (!pressed) + return; + hue_offset += 5.0; + update_cga16_color(); + System.out.println("Hue at "+hue_offset); }; - private static Mapper.MAPPER_Handler DecreaseHue = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (!pressed) - return; - hue_offset -= 5.0; - update_cga16_color(); - Log.log_msg("Hue at %f"+hue_offset); - } + private static final Mapper.MAPPER_Handler DecreaseHue = pressed -> { + if (!pressed) + return; + hue_offset -= 5.0; + update_cga16_color(); + System.out.println("Hue at %f"+hue_offset); }; private static void write_cga_color_select(/*Bitu*/int val) { @@ -287,31 +275,30 @@ else if ((val & 0x20)!=0) // cyan magenta white } } - private static IoHandler.IO_WriteHandler write_cga = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (port) { - case 0x3d8: - VGA.vga.tandy.mode_control=(short)val; - VGA.vga.attr.disabled = (byte)((val&0x8)!=0? 0: 1); - if ((VGA.vga.tandy.mode_control & 0x2)!=0) { // graphics mode - if ((VGA.vga.tandy.mode_control & 0x10)!=0) {// highres mode - if ((val & 0x4)==0) { // burst on - VGA.VGA_SetMode(VGA.M_CGA16); // composite ntsc 160x200 16 color mode - } else { - VGA.VGA_SetMode(VGA.M_TANDY2); - } - } else VGA.VGA_SetMode(VGA.M_TANDY4); // lowres mode - - write_cga_color_select(VGA.vga.tandy.color_select); - } else { - VGA.VGA_SetMode(VGA.M_TANDY_TEXT); - } - VGA_draw.VGA_SetBlinking(val & 0x20); - break; - case 0x3d9: // color select - write_cga_color_select(val); - break; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_cga = (port, val, iolen) -> { + switch (port) { + case 0x3d8: + VGA.vga.tandy.mode_control=(short)val; + VGA.vga.attr.disabled = (byte)((val&0x8)!=0? 0: 1); + if ((VGA.vga.tandy.mode_control & 0x2)!=0) { // graphics mode + if ((VGA.vga.tandy.mode_control & 0x10)!=0) {// highres mode + if ((val & 0x4)==0) { // burst on + VGA.VGA_SetMode(VGA.M_CGA16); // composite ntsc 160x200 16 color mode + } else { + VGA.VGA_SetMode(VGA.M_TANDY2); + } + } else VGA.VGA_SetMode(VGA.M_TANDY4); // lowres mode + + write_cga_color_select(VGA.vga.tandy.color_select); + } else { + VGA.VGA_SetMode(VGA.M_TANDY_TEXT); } + VGA_draw.VGA_SetBlinking(val & 0x20); + break; + case 0x3d9: // color select + write_cga_color_select(val); + break; } }; @@ -419,7 +406,8 @@ private static void TandyCheckLineMask() { VGA.vga.tandy.line_shift = 13; VGA.vga.tandy.addr_mask = (1 << 13) - 1; } else { - VGA.vga.tandy.addr_mask = (/*Bitu*/int)(~0); + /*Bitu*/ + VGA.vga.tandy.addr_mask = ~0; VGA.vga.tandy.line_shift = 0; } } @@ -466,116 +454,112 @@ private static void write_tandy_reg(/*Bit8u*/short val) { } } - private static IoHandler.IO_WriteHandler write_tandy = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (port) { - case 0x3d8: - VGA.vga.tandy.mode_control=(/*Bit8u*/short)val; - if ((val&0x8)!=0) VGA.vga.attr.disabled &= ~1; - else VGA.vga.attr.disabled |= 1; - TandyCheckLineMask(); - VGA_draw.VGA_SetBlinking(val & 0x20); - TANDY_FindMode(); - break; - case 0x3d9: - VGA.vga.tandy.color_select=(short)val; - if (VGA.vga.mode==VGA.M_TANDY2) VGA.vga.attr.palette[0xf] = (short)(VGA.vga.tandy.color_select&0xf); - else VGA.vga.attr.palette[0] = (short)(VGA.vga.tandy.color_select&0xf); // Pirates! - tandy_update_palette(); - break; - case 0x3da: - VGA.vga.tandy.reg_index=(/*Bit8u*/short)val; - //if (val&0x10) vga.attr.disabled |= 2; - //else vga.attr.disabled &= ~2; - break; - // case 0x3dd: //Extended ram page address register: - //break; - case 0x3de: - write_tandy_reg((/*Bit8u*/short)val); - break; - case 0x3df: - // CRT/processor page register - // See the comments on the PCJr version of this register. - // A difference to it is: - // Bit 3-5: Processor page CPU_PG - // The remapped range is 32kB instead of 16. Therefore CPU_PG bit 0 - // appears to be ORed with CPU A14 (to preserve some sort of - // backwards compatibility?), resulting in odd pages being mapped - // as 2x16kB. Implemeted in vga_memory.cpp Tandy handler. - - VGA.vga.tandy.line_mask = (/*Bit8u*/short)(val >> 6); - VGA.vga.tandy.draw_bank = (short)(val & ((VGA.vga.tandy.line_mask&2)!=0 ? 0x6 : 0x7)); - VGA.vga.tandy.mem_bank = (short)((val >> 3) & 7); - - TandyCheckLineMask(); - VGA_memory.VGA_SetupHandlers(); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_tandy = (port, val, iolen) -> { + switch (port) { + case 0x3d8: + VGA.vga.tandy.mode_control=(/*Bit8u*/short)val; + if ((val&0x8)!=0) VGA.vga.attr.disabled &= ~1; + else VGA.vga.attr.disabled |= 1; + TandyCheckLineMask(); + VGA_draw.VGA_SetBlinking(val & 0x20); + TANDY_FindMode(); + break; + case 0x3d9: + VGA.vga.tandy.color_select=(short)val; + if (VGA.vga.mode==VGA.M_TANDY2) VGA.vga.attr.palette[0xf] = (short)(VGA.vga.tandy.color_select&0xf); + else VGA.vga.attr.palette[0] = (short)(VGA.vga.tandy.color_select&0xf); // Pirates! + tandy_update_palette(); + break; + case 0x3da: + VGA.vga.tandy.reg_index=(/*Bit8u*/short)val; + //if (val&0x10) vga.attr.disabled |= 2; + //else vga.attr.disabled &= ~2; + break; +// case 0x3dd: //Extended ram page address register: + //break; + case 0x3de: + write_tandy_reg((/*Bit8u*/short)val); + break; + case 0x3df: + // CRT/processor page register + // See the comments on the PCJr version of this register. + // A difference to it is: + // Bit 3-5: Processor page CPU_PG + // The remapped range is 32kB instead of 16. Therefore CPU_PG bit 0 + // appears to be ORed with CPU A14 (to preserve some sort of + // backwards compatibility?), resulting in odd pages being mapped + // as 2x16kB. Implemeted in vga_memory.cpp Tandy handler. + + VGA.vga.tandy.line_mask = (/*Bit8u*/short)(val >> 6); + VGA.vga.tandy.draw_bank = (short)(val & ((VGA.vga.tandy.line_mask&2)!=0 ? 0x6 : 0x7)); + VGA.vga.tandy.mem_bank = (short)((val >> 3) & 7); + + TandyCheckLineMask(); + VGA_memory.VGA_SetupHandlers(); + break; } }; - private static IoHandler.IO_WriteHandler write_pcjr = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (port) { - case 0x3da: - if (VGA.vga.tandy.pcjr_flipflop) write_tandy_reg((/*Bit8u*/short)val); - else { - VGA.vga.tandy.reg_index=(short)val; - if ((VGA.vga.tandy.reg_index & 0x10)!=0) - VGA.vga.attr.disabled |= 2; - else VGA.vga.attr.disabled &= ~2; - } - VGA.vga.tandy.pcjr_flipflop=!VGA.vga.tandy.pcjr_flipflop; - break; - case 0x3df: - // CRT/processor page register - - // Bit 0-2: CRT page PG0-2 - // In one- and two bank modes, bit 0-2 select the 16kB memory - // area of system RAM that is displayed on the screen. - // In 4-banked modes, bit 1-2 select the 32kB memory area. - // Bit 2 only has effect when the PCJR upgrade to 128k is installed. - - // Bit 3-5: Processor page CPU_PG - // Selects the 16kB area of system RAM that is mapped to - // the B8000h IBM PC video memory window. Since A14-A16 of the - // processor are unconditionally replaced with these bits when - // B8000h is accessed, the 16kB area is mapped to the 32kB - // range twice in a row. (Scuba Venture writes across the boundary) - - // Bit 6-7: Video Address mode - // 0: CRTC addresses A0-12 directly, accessing 8k characters - // (+8k attributes). Used in text modes (one bank). - // PG0-2 in effect. 16k range. - // 1: CRTC A12 is replaced with CRTC RA0 (see max_scanline). - // This results in the even/odd scanline two bank system. - // PG0-2 in effect. 16k range. - // 2: Documented as unused. CRTC addresses A0-12, PG0 is replaced - // with RA1. Looks like nonsense. - // PG1-2 in effect. 32k range which cannot be used completely. - // 3: CRTC A12 is replaced with CRTC RA0, PG0 is replaced with - // CRTC RA1. This results in the 4-bank mode. - // PG1-2 in effect. 32k range. - - VGA.vga.tandy.line_mask = (/*Bit8u*/short)(val >> 6); - VGA.vga.tandy.draw_bank = (short)(val & ((VGA.vga.tandy.line_mask&2)!=0 ? 0x6 : 0x7)); - VGA.vga.tandy.mem_bank = (short)((val >> 3) & 7); - VGA.vga.tandy.draw_base = VGA.vga.tandy.draw_bank * 16 * 1024; - VGA.vga.tandy.mem_base = VGA.vga.tandy.mem_bank * 16 * 1024; - TandyCheckLineMask(); - VGA_memory.VGA_SetupHandlers(); - break; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_pcjr = (port, val, iolen) -> { + switch (port) { + case 0x3da: + if (VGA.vga.tandy.pcjr_flipflop) write_tandy_reg((/*Bit8u*/short)val); + else { + VGA.vga.tandy.reg_index=(short)val; + if ((VGA.vga.tandy.reg_index & 0x10)!=0) + VGA.vga.attr.disabled |= 2; + else VGA.vga.attr.disabled &= ~2; } + VGA.vga.tandy.pcjr_flipflop=!VGA.vga.tandy.pcjr_flipflop; + break; + case 0x3df: + // CRT/processor page register + + // Bit 0-2: CRT page PG0-2 + // In one- and two bank modes, bit 0-2 select the 16kB memory + // area of system RAM that is displayed on the screen. + // In 4-banked modes, bit 1-2 select the 32kB memory area. + // Bit 2 only has effect when the PCJR upgrade to 128k is installed. + + // Bit 3-5: Processor page CPU_PG + // Selects the 16kB area of system RAM that is mapped to + // the B8000h IBM PC video memory window. Since A14-A16 of the + // processor are unconditionally replaced with these bits when + // B8000h is accessed, the 16kB area is mapped to the 32kB + // range twice in a row. (Scuba Venture writes across the boundary) + + // Bit 6-7: Video Address mode + // 0: CRTC addresses A0-12 directly, accessing 8k characters + // (+8k attributes). Used in text modes (one bank). + // PG0-2 in effect. 16k range. + // 1: CRTC A12 is replaced with CRTC RA0 (see max_scanline). + // This results in the even/odd scanline two bank system. + // PG0-2 in effect. 16k range. + // 2: Documented as unused. CRTC addresses A0-12, PG0 is replaced + // with RA1. Looks like nonsense. + // PG1-2 in effect. 32k range which cannot be used completely. + // 3: CRTC A12 is replaced with CRTC RA0, PG0 is replaced with + // CRTC RA1. This results in the 4-bank mode. + // PG1-2 in effect. 32k range. + + VGA.vga.tandy.line_mask = (/*Bit8u*/short)(val >> 6); + VGA.vga.tandy.draw_bank = (short)(val & ((VGA.vga.tandy.line_mask&2)!=0 ? 0x6 : 0x7)); + VGA.vga.tandy.mem_bank = (short)((val >> 3) & 7); + VGA.vga.tandy.draw_base = VGA.vga.tandy.draw_bank * 16 * 1024; + VGA.vga.tandy.mem_base = VGA.vga.tandy.mem_bank * 16 * 1024; + TandyCheckLineMask(); + VGA_memory.VGA_SetupHandlers(); + break; } }; - private static Mapper.MAPPER_Handler CycleHercPal = new Mapper.MAPPER_Handler() { - public void call(boolean pressed) { - if (!pressed) return; - if (++herc_pal>2) herc_pal=0; - Herc_Palette(); - VGA_dac.VGA_DAC_CombineColor(1,7); - } + private static final Mapper.MAPPER_Handler CycleHercPal = pressed -> { + if (!pressed) return; + if (++herc_pal>2) herc_pal=0; + Herc_Palette(); + VGA_dac.VGA_DAC_CombineColor(1,7); }; public static void Herc_Palette() { @@ -595,85 +579,83 @@ public static void Herc_Palette() { } } - private static IoHandler.IO_WriteHandler write_hercules = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - switch (port) { - case 0x3b8: { - // the protected bits can always be cleared but only be set if the - // protection bits are set - if ((VGA.vga.herc.mode_control&0x2)!=0) { - // already set - if ((val&0x2)==0) { - VGA.vga.herc.mode_control &= ~0x2; - VGA.VGA_SetMode(VGA.M_HERC_TEXT); - } - } else { - // not set, can only set if protection bit is set - if ((val & 0x2)!=0 && (VGA.vga.herc.enable_bits & 0x1)!=0) { - VGA.vga.herc.mode_control |= 0x2; - VGA.VGA_SetMode(VGA.M_HERC_GFX); - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_hercules = (port, val, iolen) -> { + switch (port) { + case 0x3b8: { + // the protected bits can always be cleared but only be set if the + // protection bits are set + if ((VGA.vga.herc.mode_control&0x2)!=0) { + // already set + if ((val&0x2)==0) { + VGA.vga.herc.mode_control &= ~0x2; + VGA.VGA_SetMode(VGA.M_HERC_TEXT); } - if ((VGA.vga.herc.mode_control&0x80)!=0) { - if ((val&0x80)==0) { - VGA.vga.herc.mode_control &= ~0x80; - VGA.vga.tandy.draw_base = VGA.vga.mem.linear; - } - } else { - if ((val & 0x80)!=0 && (VGA.vga.herc.enable_bits & 0x2)!=0) { - VGA.vga.herc.mode_control |= 0x80; - VGA.vga.tandy.draw_base = VGA.vga.mem.linear+ 32*1024; - } + } else { + // not set, can only set if protection bit is set + if ((val & 0x2)!=0 && (VGA.vga.herc.enable_bits & 0x1)!=0) { + VGA.vga.herc.mode_control |= 0x2; + VGA.VGA_SetMode(VGA.M_HERC_GFX); } - VGA.vga.draw.blinking = (val&0x20)!=0; - VGA.vga.herc.mode_control &= 0x82; - VGA.vga.herc.mode_control |= val & ~0x82; - break; + } + if ((VGA.vga.herc.mode_control&0x80)!=0) { + if ((val&0x80)==0) { + VGA.vga.herc.mode_control &= ~0x80; + VGA.vga.tandy.draw_base = VGA.vga.mem.linear; } - case 0x3bf: - if (((VGA.vga.herc.enable_bits & 0xFF) ^ val)!=0) { - VGA.vga.herc.enable_bits=(byte)val; - // Bit 1 enables the upper 32k of video memory, - // so update the handlers - VGA_memory.VGA_SetupHandlers(); + } else { + if ((val & 0x80)!=0 && (VGA.vga.herc.enable_bits & 0x2)!=0) { + VGA.vga.herc.mode_control |= 0x80; + VGA.vga.tandy.draw_base = VGA.vga.mem.linear+ 32*1024; } - break; } + VGA.vga.draw.blinking = (val&0x20)!=0; + VGA.vga.herc.mode_control &= 0x82; + VGA.vga.herc.mode_control |= val & ~0x82; + break; + } + case 0x3bf: + if (((VGA.vga.herc.enable_bits & 0xFF) ^ val)!=0) { + VGA.vga.herc.enable_bits=(byte)val; + // Bit 1 enables the upper 32k of video memory, + // so update the handlers + VGA_memory.VGA_SetupHandlers(); + } + break; } }; /* static Bitu read_hercules(Bitu port,Bitu iolen) { - Log.log_msg("read from Herc port %x",port); + System.out.println("read from Herc port %x",port); return 0; } */ - private static IoHandler.IO_ReadHandler read_herc_status = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - // 3BAh (R): Status Register - // bit 0 Horizontal sync - // 1 Light pen status (only some cards) - // 3 Video signal - // 4-6 000: Hercules - // 001: Hercules Plus - // 101: Hercules InColor - // 111: Unknown clone - // 7 Vertical sync inverted - - double timeInFrame = Pic.PIC_FullIndex()-VGA.vga.draw.delay.framestart; - /*Bit8u*/short retval=0x72; // Hercules ident; from a working card (Winbond W86855AF) - // Another known working card has 0x76 ("KeysoGood", full-length) - if (timeInFrame < VGA.vga.draw.delay.vrstart || - timeInFrame > VGA.vga.draw.delay.vrend) retval |= 0x80; - - double timeInLine=timeInFrame % VGA.vga.draw.delay.htotal; - if (timeInLine >= VGA.vga.draw.delay.hrstart && - timeInLine <= VGA.vga.draw.delay.hrend) retval |= 0x1; - - // 688 Attack sub checks bit 3 - as a workaround have the bit enabled - // if no sync active (corresponds to a completely white screen) - if ((retval&0x81)==0x80) retval |= 0x8; - return retval; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_ReadHandler read_herc_status = (port, iolen) -> { + // 3BAh (R): Status Register + // bit 0 Horizontal sync + // 1 Light pen status (only some cards) + // 3 Video signal + // 4-6 000: Hercules + // 001: Hercules Plus + // 101: Hercules InColor + // 111: Unknown clone + // 7 Vertical sync inverted + + double timeInFrame = Pic.PIC_FullIndex()-VGA.vga.draw.delay.framestart; + /*Bit8u*/short retval=0x72; // Hercules ident; from a working card (Winbond W86855AF) + // Another known working card has 0x76 ("KeysoGood", full-length) + if (timeInFrame < VGA.vga.draw.delay.vrstart || + timeInFrame > VGA.vga.draw.delay.vrend) retval |= 0x80; + + double timeInLine=timeInFrame % VGA.vga.draw.delay.htotal; + if (timeInLine >= VGA.vga.draw.delay.hrstart && + timeInLine <= VGA.vga.draw.delay.hrend) retval |= 0x1; + + // 688 Attack sub checks bit 3 - as a workaround have the bit enabled + // if no sync active (corresponds to a completely white screen) + if ((retval&0x81)==0x80) retval |= 0x8; + return retval; }; public static void VGA_SetupOther() { diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_paradise.java b/jdosbox/src/main/java/jdos/hardware/VGA_paradise.java index c792e3f3..88ace5d7 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_paradise.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_paradise.java @@ -18,11 +18,11 @@ static private class SVGA_PVGA1A_DATA { boolean locked() { return (PR5&7)!=5; } - /*Bitu*/int[] clockFreq = new int[4]; + /*Bitu*/final int[] clockFreq = new int[4]; /*Bitu*/int biosMode; } - static SVGA_PVGA1A_DATA pvga1a = new SVGA_PVGA1A_DATA(); + static final SVGA_PVGA1A_DATA pvga1a = new SVGA_PVGA1A_DATA(); static private void bank_setup_pvga1a() { @@ -42,162 +42,150 @@ static private void bank_setup_pvga1a() { } } - static private VGA.tWritePort write_p3cf_pvga1a = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - if (pvga1a.locked() && reg >= 0x09 && reg <= 0x0e) - return; - - switch (reg) { - case 0x09: - // Bank A, 4K granularity, not using bit 7 - // Maps to A800h-AFFFh if PR1 bit 3 set and 64k config B000h-BFFFh if 128k config. A000h-AFFFh otherwise. - pvga1a.PR0A = val; - bank_setup_pvga1a(); - break; - case 0x0a: - // Bank B, 4K granularity, not using bit 7 - // Maps to A000h-A7FFh if PR1 bit 3 set and 64k config, A000h-AFFFh if 128k - pvga1a.PR0B = val; - bank_setup_pvga1a(); - break; - case 0x0b: - // Memory size. We only allow to mess with bit 3 here (enable bank B) - this may break some detection schemes - pvga1a.PR1 = (pvga1a.PR1 & ~0x08) | (val & 0x08); - bank_setup_pvga1a(); - break; - case 0x0c: - // Video configuration - // TODO: Figure out if there is anything worth implementing here. - pvga1a.PR2 = val; - break; - case 0x0d: - // CRT control. Bits 3-4 contain bits 16-17 of CRT start. - // TODO: Implement bit 2 (CRT address doubling - this mechanism is present in other chipsets as well, - // but not implemented in DosBox core) - pvga1a.PR3 = val; - VGA.vga.config.display_start = (VGA.vga.config.display_start & 0xffff) | ((val & 0x18)<<13); - VGA.vga.config.cursor_start = (VGA.vga.config.cursor_start & 0xffff) | ((val & 0x18)<<13); - break; - case 0x0e: - // Video control - // TODO: Figure out if there is anything worth implementing here. - pvga1a.PR4 = val; - break; - case 0x0f: - // Enable extended registers - pvga1a.PR5 = val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:GFX:PVGA1A:Write to illegal index "+Integer.toString(reg,16)); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3cf_pvga1a = (reg, val, iolen) -> { + if (pvga1a.locked() && reg >= 0x09 && reg <= 0x0e) + return; + + switch (reg) { + case 0x09: + // Bank A, 4K granularity, not using bit 7 + // Maps to A800h-AFFFh if PR1 bit 3 set and 64k config B000h-BFFFh if 128k config. A000h-AFFFh otherwise. + pvga1a.PR0A = val; + bank_setup_pvga1a(); + break; + case 0x0a: + // Bank B, 4K granularity, not using bit 7 + // Maps to A000h-A7FFh if PR1 bit 3 set and 64k config, A000h-AFFFh if 128k + pvga1a.PR0B = val; + bank_setup_pvga1a(); + break; + case 0x0b: + // Memory size. We only allow to mess with bit 3 here (enable bank B) - this may break some detection schemes + pvga1a.PR1 = (pvga1a.PR1 & ~0x08) | (val & 0x08); + bank_setup_pvga1a(); + break; + case 0x0c: + // Video configuration + // TODO: Figure out if there is anything worth implementing here. + pvga1a.PR2 = val; + break; + case 0x0d: + // CRT control. Bits 3-4 contain bits 16-17 of CRT start. + // TODO: Implement bit 2 (CRT address doubling - this mechanism is present in other chipsets as well, + // but not implemented in DosBox core) + pvga1a.PR3 = val; + VGA.vga.config.display_start = (VGA.vga.config.display_start & 0xffff) | ((val & 0x18)<<13); + VGA.vga.config.cursor_start = (VGA.vga.config.cursor_start & 0xffff) | ((val & 0x18)<<13); + break; + case 0x0e: + // Video control + // TODO: Figure out if there is anything worth implementing here. + pvga1a.PR4 = val; + break; + case 0x0f: + // Enable extended registers + pvga1a.PR5 = val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:GFX:PVGA1A:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - static private VGA.tReadPort read_p3cf_pvga1a = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - if (pvga1a.locked() && reg >= 0x09 && reg <= 0x0e) - return 0x0; - - switch (reg) { - case 0x09: - return pvga1a.PR0A; - case 0x0a: - return pvga1a.PR0B; - case 0x0b: - return pvga1a.PR1; - case 0x0c: - return pvga1a.PR2; - case 0x0d: - return pvga1a.PR3; - case 0x0e: - return pvga1a.PR4; - case 0x0f: - return pvga1a.PR5; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:GFX:PVGA1A:Read from illegal index "+Integer.toString(reg,16)); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3cf_pvga1a = (reg, iolen) -> { + if (pvga1a.locked() && reg >= 0x09 && reg <= 0x0e) return 0x0; - } - }; - - private static VGA.tFinishSetMode FinishSetMode_PVGA1A = new VGA.tFinishSetMode() { - public void call(/*Bitu*/int crtc_base, VGA.VGA_ModeExtraData modeData) { - pvga1a.biosMode = modeData.modeNo; - - // Reset to single bank and set it to 0. May need to unlock first (DPaint locks on exit) - IoHandler.IO_Write(0x3ce, 0x0f); - /*Bitu*/int oldlock = IoHandler.IO_Read(0x3cf); - IoHandler.IO_Write(0x3cf, 0x05); - IoHandler.IO_Write(0x3ce, 0x09); - IoHandler.IO_Write(0x3cf, 0x00); - IoHandler.IO_Write(0x3ce, 0x0a); - IoHandler.IO_Write(0x3cf, 0x00); - IoHandler.IO_Write(0x3ce, 0x0b); - /*Bit8u*/short val = IoHandler.IO_Read(0x3cf); - IoHandler.IO_Write(0x3cf, val & ~0x08); - IoHandler.IO_Write(0x3ce, 0x0c); - IoHandler.IO_Write(0x3cf, 0x00); - IoHandler.IO_Write(0x3ce, 0x0d); - IoHandler.IO_Write(0x3cf, 0x00); - IoHandler.IO_Write(0x3ce, 0x0e); - IoHandler.IO_Write(0x3cf, 0x00); - IoHandler.IO_Write(0x3ce, 0x0f); - IoHandler.IO_Write(0x3cf, oldlock); - - if (VGA.svga.determine_mode!=null) - VGA.svga.determine_mode.call(); - - if(VGA.vga.mode != VGA.M_VGA) { - VGA.vga.config.compatible_chain4 = false; - VGA.vga.vmemwrap = VGA.vga.vmemsize; - } else { - VGA.vga.config.compatible_chain4 = true; - VGA.vga.vmemwrap = 256*1024; - } - VGA_memory.VGA_SetupHandlers(); + switch (reg) { + case 0x09: + return pvga1a.PR0A; + case 0x0a: + return pvga1a.PR0B; + case 0x0b: + return pvga1a.PR1; + case 0x0c: + return pvga1a.PR2; + case 0x0d: + return pvga1a.PR3; + case 0x0e: + return pvga1a.PR4; + case 0x0f: + return pvga1a.PR5; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:GFX:PVGA1A:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; - private static VGA.tDetermineMode DetermineMode_PVGA1A = new VGA.tDetermineMode() { - public void call() { - // Close replica from the base implementation. It will stay here - // until I figure a way to either distinguish M_VGA and M_LIN8 or - // merge them. - if ((VGA.vga.attr.mode_control & 1)!=0) { - if ((VGA.vga.gfx.mode & 0x40)!=0) VGA.VGA_SetMode((pvga1a.biosMode<=0x13)?VGA.M_VGA:VGA.M_LIN8); - else if ((VGA.vga.gfx.mode & 0x20)!=0) VGA.VGA_SetMode(VGA.M_CGA4); - else if ((VGA.vga.gfx.miscellaneous & 0x0c)==0x0c) VGA.VGA_SetMode(VGA.M_CGA2); - else VGA.VGA_SetMode((pvga1a.biosMode<=0x13)?VGA.M_EGA:VGA.M_LIN4); - } else { - VGA.VGA_SetMode(VGA.M_TEXT); - } + /*Bitu*/ + private static final VGA.tFinishSetMode FinishSetMode_PVGA1A = (crtc_base, modeData) -> { + pvga1a.biosMode = modeData.modeNo; + +// Reset to single bank and set it to 0. May need to unlock first (DPaint locks on exit) + IoHandler.IO_Write(0x3ce, 0x0f); + /*Bitu*/int oldlock = IoHandler.IO_Read(0x3cf); + IoHandler.IO_Write(0x3cf, 0x05); + IoHandler.IO_Write(0x3ce, 0x09); + IoHandler.IO_Write(0x3cf, 0x00); + IoHandler.IO_Write(0x3ce, 0x0a); + IoHandler.IO_Write(0x3cf, 0x00); + IoHandler.IO_Write(0x3ce, 0x0b); + /*Bit8u*/short val = IoHandler.IO_Read(0x3cf); + IoHandler.IO_Write(0x3cf, val & ~0x08); + IoHandler.IO_Write(0x3ce, 0x0c); + IoHandler.IO_Write(0x3cf, 0x00); + IoHandler.IO_Write(0x3ce, 0x0d); + IoHandler.IO_Write(0x3cf, 0x00); + IoHandler.IO_Write(0x3ce, 0x0e); + IoHandler.IO_Write(0x3cf, 0x00); + IoHandler.IO_Write(0x3ce, 0x0f); + IoHandler.IO_Write(0x3cf, oldlock); + + if (VGA.svga.determine_mode!=null) + VGA.svga.determine_mode.call(); + + if(VGA.vga.mode != VGA.M_VGA) { + VGA.vga.config.compatible_chain4 = false; + VGA.vga.vmemwrap = VGA.vga.vmemsize; + } else { + VGA.vga.config.compatible_chain4 = true; + VGA.vga.vmemwrap = 256*1024; } - }; - private static VGA.tSetClock SetClock_PVGA1A = new VGA.tSetClock() { - public void call(/*Bitu*/int which,/*Bitu*/int target) { - if (which < 4) { - pvga1a.clockFreq[which]=1000*target; - VGA.VGA_StartResize(); - } - } + VGA_memory.VGA_SetupHandlers(); }; - private static VGA.tGetClock GetClock_PVGA1A = new VGA.tGetClock() { - public /*Bitu*/int call() { - return pvga1a.clockFreq[(VGA.vga.misc_output >> 2) & 3]; + private static final VGA.tDetermineMode DetermineMode_PVGA1A = () -> { + // Close replica from the base implementation. It will stay here + // until I figure a way to either distinguish M_VGA and M_LIN8 or + // merge them. + if ((VGA.vga.attr.mode_control & 1)!=0) { + if ((VGA.vga.gfx.mode & 0x40)!=0) VGA.VGA_SetMode((pvga1a.biosMode<=0x13)?VGA.M_VGA:VGA.M_LIN8); + else if ((VGA.vga.gfx.mode & 0x20)!=0) VGA.VGA_SetMode(VGA.M_CGA4); + else if ((VGA.vga.gfx.miscellaneous & 0x0c)==0x0c) VGA.VGA_SetMode(VGA.M_CGA2); + else VGA.VGA_SetMode((pvga1a.biosMode<=0x13)?VGA.M_EGA:VGA.M_LIN4); + } else { + VGA.VGA_SetMode(VGA.M_TEXT); } }; - private static VGA.tAcceptsMode AcceptsMode_PVGA1A = new VGA.tAcceptsMode() { - public boolean call(/*Bitu*/int modeNo) { - return Int10_modes.VideoModeMemSize(modeNo) < VGA.vga.vmemsize; + /*Bitu*//*Bitu*/ + private static final VGA.tSetClock SetClock_PVGA1A = (which, target) -> { + if (which < 4) { + pvga1a.clockFreq[which]=1000*target; + VGA.VGA_StartResize(); } }; + /*Bitu*/ + private static final VGA.tGetClock GetClock_PVGA1A = () -> pvga1a.clockFreq[(VGA.vga.misc_output >> 2) & 3]; + + /*Bitu*/ + private static final VGA.tAcceptsMode AcceptsMode_PVGA1A = modeNo -> Int10_modes.VideoModeMemSize(modeNo) < VGA.vga.vmemsize; + public static void SVGA_Setup_ParadisePVGA1A() { VGA.svga.write_p3cf = write_p3cf_pvga1a; VGA.svga.read_p3cf = read_p3cf_pvga1a; @@ -228,7 +216,7 @@ public static void SVGA_Setup_ParadisePVGA1A() { } // Paradise ROM signature - /*PhysPt*/int rom_base=(int)Memory.PhysMake(0xc000,0); + /*PhysPt*/int rom_base= Memory.PhysMake(0xc000,0); Memory.phys_writeb(rom_base+0x007d,'V'); Memory.phys_writeb(rom_base+0x007e,'G'); Memory.phys_writeb(rom_base+0x007f,'A'); diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_s3.java b/jdosbox/src/main/java/jdos/hardware/VGA_s3.java index e5990258..81d53157 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_s3.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_s3.java @@ -6,513 +6,502 @@ import jdos.types.LogTypes; public class VGA_s3 { - private static VGA.tWritePort SVGA_S3_WriteCRTC = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - switch (reg) { - case 0x31: /* CR31 Memory Configuration */ - //TODO Base address - VGA.vga.s3.reg_31 = (short)val; - VGA.vga.config.compatible_chain4 = (val&0x08)==0; - if (VGA.vga.config.compatible_chain4) VGA.vga.vmemwrap = 256*1024; - else VGA.vga.vmemwrap = VGA.vga.vmemsize; - VGA.vga.config.display_start = (VGA.vga.config.display_start&~0x30000)|((val&0x30)<<12); - VGA.VGA_DetermineMode(); + /*Bitu*//*Bitu*//*Bitu*/ + private static final VGA.tWritePort SVGA_S3_WriteCRTC = (reg, val, iolen) -> { + switch (reg) { + case 0x31: /* CR31 Memory Configuration */ +//TODO Base address + VGA.vga.s3.reg_31 = (short)val; + VGA.vga.config.compatible_chain4 = (val&0x08)==0; + if (VGA.vga.config.compatible_chain4) VGA.vga.vmemwrap = 256*1024; + else VGA.vga.vmemwrap = VGA.vga.vmemsize; + VGA.vga.config.display_start = (VGA.vga.config.display_start&~0x30000)|((val&0x30)<<12); + VGA.VGA_DetermineMode(); + VGA_memory.VGA_SetupHandlers(); + break; + /* + 0 Enable Base Address Offset (CPUA BASE). Enables bank operation if + set, disables if clear. + 1 Two Page Screen Image. If set enables 2048 pixel wide screen setup + 2 VGA 16bit Memory Bus Width. Set for 16bit, clear for 8bit + 3 Use Enhanced Mode Memory Mapping (ENH MAP). Set to enable access to + video memory above 256k. + 4-5 Bit 16-17 of the Display Start Address. For the 801/5,928 see index + 51h, for the 864/964 see index 69h. + 6 High Speed Text Display Font Fetch Mode. If set enables Page Mode + for Alpha Mode Font Access. + 7 (not 864/964) Extended BIOS ROM Space Mapped out. If clear the area + C6800h-C7FFFh is mapped out, if set it is accessible. + */ + case 0x35: /* CR35 CRT Register Lock */ + if (VGA.vga.s3.reg_lock1 != 0x48) return; //Needed for uvconfig detection + VGA.vga.s3.reg_35=(short)(val & 0xf0); + if (((VGA.vga.svga.bank_read & 0xf) ^ (val & 0xf))!=0) { + VGA.vga.svga.bank_read&=0xf0; + VGA.vga.svga.bank_read|=val & 0xf; + VGA.vga.svga.bank_write = VGA.vga.svga.bank_read; VGA_memory.VGA_SetupHandlers(); - break; - /* - 0 Enable Base Address Offset (CPUA BASE). Enables bank operation if - set, disables if clear. - 1 Two Page Screen Image. If set enables 2048 pixel wide screen setup - 2 VGA 16bit Memory Bus Width. Set for 16bit, clear for 8bit - 3 Use Enhanced Mode Memory Mapping (ENH MAP). Set to enable access to - video memory above 256k. - 4-5 Bit 16-17 of the Display Start Address. For the 801/5,928 see index - 51h, for the 864/964 see index 69h. - 6 High Speed Text Display Font Fetch Mode. If set enables Page Mode - for Alpha Mode Font Access. - 7 (not 864/964) Extended BIOS ROM Space Mapped out. If clear the area - C6800h-C7FFFh is mapped out, if set it is accessible. - */ - case 0x35: /* CR35 CRT Register Lock */ - if (VGA.vga.s3.reg_lock1 != 0x48) return; //Needed for uvconfig detection - VGA.vga.s3.reg_35=(short)(val & 0xf0); - if (((VGA.vga.svga.bank_read & 0xf) ^ (val & 0xf))!=0) { - VGA.vga.svga.bank_read&=0xf0; - VGA.vga.svga.bank_read|=val & 0xf; - VGA.vga.svga.bank_write = VGA.vga.svga.bank_read; - VGA_memory.VGA_SetupHandlers(); - } - break; - /* - 0-3 CPU Base Address. 64k bank number. For the 801/5 and 928 see 3d4h - index 51h bits 2-3. For the 864/964 see index 6Ah. - 4 Lock Vertical Timing Registers (LOCK VTMG). Locks 3d4h index 6, 7 - (bits 0,2,3,5,7), 9 bit 5, 10h, 11h bits 0-3, 15h, 16h if set - 5 Lock Horizontal Timing Registers (LOCK HTMG). Locks 3d4h index - 0,1,2,3,4,5,17h bit 2 if set - 6 (911/924) Lock VSync Polarity. - 7 (911/924) Lock HSync Polarity. - */ - case 0x38: /* CR38 Register Lock 1 */ - VGA.vga.s3.reg_lock1=(short)val; - break; - case 0x39: /* CR39 Register Lock 2 */ - VGA.vga.s3.reg_lock2=(short)val; - break; - case 0x3a: - VGA.vga.s3.reg_3a = (short)val; - break; - case 0x40: /* CR40 System Config */ - VGA.vga.s3.reg_40 = (short)val; - break; - case 0x41: /* CR41 BIOS flags */ - VGA.vga.s3.reg_41 = (short)val; - break; - case 0x43: /* CR43 Extended Mode */ - VGA.vga.s3.reg_43=(short)(val & ~0x4); - if ((((val & 0x4) ^ (VGA.vga.config.scan_len >> 6)) & 0x4)!=0) { - VGA.vga.config.scan_len&=0x2ff; - VGA.vga.config.scan_len|=(val & 0x4) << 6; - VGA_draw.VGA_CheckScanLength(); - } - break; - /* - 2 Logical Screen Width bit 8. Bit 8 of the Display Offset Register/ - (3d4h index 13h). (801/5,928) Only active if 3d4h index 51h bits 4-5 - are 0 - */ - case 0x45: /* Hardware cursor mode */ - VGA.vga.s3.hgc.curmode = (short)val; - // Activate hardware cursor code if needed - VGA_draw.VGA_ActivateHardwareCursor(); - break; - case 0x46: - VGA.vga.s3.hgc.originx = (VGA.vga.s3.hgc.originx & 0x00ff) | (val << 8); - break; - case 0x47: /* HGC orgX */ - VGA.vga.s3.hgc.originx = (VGA.vga.s3.hgc.originx & 0xff00) | val; - break; - case 0x48: - VGA.vga.s3.hgc.originy = (VGA.vga.s3.hgc.originy & 0x00ff) | (val << 8); - break; - case 0x49: /* HGC orgY */ - VGA.vga.s3.hgc.originy = (VGA.vga.s3.hgc.originy & 0xff00) | val; - break; - case 0x4A: /* HGC foreground stack */ - if (VGA.vga.s3.hgc.fstackpos > 2) VGA.vga.s3.hgc.fstackpos = 0; - VGA.vga.s3.hgc.forestack.set(VGA.vga.s3.hgc.fstackpos, val); - VGA.vga.s3.hgc.fstackpos++; - break; - case 0x4B: /* HGC background stack */ - if (VGA.vga.s3.hgc.bstackpos > 2) VGA.vga.s3.hgc.bstackpos = 0; - VGA.vga.s3.hgc.backstack.set(VGA.vga.s3.hgc.bstackpos, val); - VGA.vga.s3.hgc.bstackpos++; - break; - case 0x4c: /* HGC start address high byte*/ - VGA.vga.s3.hgc.startaddr &=0xff; - VGA.vga.s3.hgc.startaddr |= ((val & 0xf) << 8); - if ((((/*Bitu*/int)VGA.vga.s3.hgc.startaddr)<<10)+((64*64*2)/8) > VGA.vga.vmemsize) { - VGA.vga.s3.hgc.startaddr &= 0xff; // put it back to some sane area; - // if read back of this address is ever implemented this needs to change - Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:S3:CRTC: HGC pattern address beyond video memory" ); - } - break; - case 0x4d: /* HGC start address low byte*/ - VGA.vga.s3.hgc.startaddr &=0xff00; - VGA.vga.s3.hgc.startaddr |= (val & 0xff); - break; - case 0x4e: /* HGC pattern start X */ - VGA.vga.s3.hgc.posx = (short)(val & 0x3f); // bits 0-5 - break; - case 0x4f: /* HGC pattern start Y */ - VGA.vga.s3.hgc.posy = (short)(val & 0x3f); // bits 0-5 - break; - case 0x50: // Extended System Control 1 - VGA.vga.s3.reg_50 = (short)val; - switch (val & VGA.S3_XGA_CMASK) { - case VGA.S3_XGA_32BPP: VGA.vga.s3.xga_color_mode = VGA.M_LIN32; break; - case VGA.S3_XGA_16BPP: VGA.vga.s3.xga_color_mode = VGA.M_LIN16; break; - case VGA.S3_XGA_8BPP: VGA.vga.s3.xga_color_mode = VGA.M_LIN8; break; - } - switch (val & VGA.S3_XGA_WMASK) { - case VGA.S3_XGA_1024: VGA.vga.s3.xga_screen_width = 1024; break; - case VGA.S3_XGA_1152: VGA.vga.s3.xga_screen_width = 1152; break; - case VGA.S3_XGA_640: VGA.vga.s3.xga_screen_width = 640; break; - case VGA.S3_XGA_800: VGA.vga.s3.xga_screen_width = 800; break; - case VGA.S3_XGA_1280: VGA.vga.s3.xga_screen_width = 1280; break; - default: VGA.vga.s3.xga_screen_width = 1024; break; - } - break; - case 0x51: /* Extended System Control 2 */ - VGA.vga.s3.reg_51=(short)(val & 0xc0); //Only store bits 6,7 - VGA.vga.config.display_start&=0xF3FFFF; - VGA.vga.config.display_start|=(val & 3) << 18; - if (((VGA.vga.svga.bank_read&0x30) ^ ((val&0xc)<<2))!=0) { - VGA.vga.svga.bank_read&=0xcf; - VGA.vga.svga.bank_read|=(val&0xc)<<2; - VGA.vga.svga.bank_write = VGA.vga.svga.bank_read; - VGA_memory.VGA_SetupHandlers(); - } - if ((((val & 0x30) ^ (VGA.vga.config.scan_len >> 4)) & 0x30)!=0) { - VGA.vga.config.scan_len&=0xff; - VGA.vga.config.scan_len|=(val & 0x30) << 4; - VGA_draw.VGA_CheckScanLength(); - } - break; - /* - 0 (80x) Display Start Address bit 18 - 0-1 (928 +) Display Start Address bit 18-19 - Bits 16-17 are in index 31h bits 4-5, Bits 0-15 are in 3d4h index - 0Ch,0Dh. For the 864/964 see 3d4h index 69h - 2 (80x) CPU BASE. CPU Base Address Bit 18. - 2-3 (928 +) Old CPU Base Address Bits 19-18. - 64K Bank register bits 4-5. Bits 0-3 are in 3d4h index 35h. - For the 864/964 see 3d4h index 6Ah - 4-5 Logical Screen Width Bit [8-9]. Bits 8-9 of the CRTC Offset register - (3d4h index 13h). If this field is 0, 3d4h index 43h bit 2 is active - 6 (928,964) DIS SPXF. Disable Split Transfers if set. Spilt Transfers - allows transferring one half of the VRAM shift register data while - the other half is being output. For the 964 Split Transfers - must be enabled in enhanced modes (4AE8h bit 0 set). Guess: They - probably can't time the VRAM load cycle closely enough while the - graphics engine is running. - 7 (not 864/964) Enable EPROM Write. If set enables flash memory write - control to the BIOS ROM address - */ - case 0x52: // Extended System Control 1 - VGA.vga.s3.reg_52 = (short)val; - break; - case 0x53: - // Map or unmap MMIO - // bit 4 = MMIO at A0000 - // bit 3 = MMIO at LFB + 16M (should be fine if its always enabled for now) - if(VGA.vga.s3.ext_mem_ctrl!=val) { - VGA.vga.s3.ext_mem_ctrl = (short)val; - VGA_memory.VGA_SetupHandlers(); - } - break; - case 0x55: /* Extended Video DAC Control */ - VGA.vga.s3.reg_55=(short)val; - break; - /* - 0-1 DAC Register Select Bits. Passed to the RS2 and RS3 pins on the - RAMDAC, allowing access to all 8 or 16 registers on advanced RAMDACs. - If this field is 0, 3d4h index 43h bit 1 is active. - 2 Enable General Input Port Read. If set DAC reads are disabled and the - STRD strobe for reading the General Input Port is enabled for reading - while DACRD is active, if clear DAC reads are enabled. - 3 (928) Enable External SID Operation if set. If set video data is - passed directly from the VRAMs to the DAC rather than through the - VGA chip - 4 Hardware Cursor MS/X11 Mode. If set the Hardware Cursor is in X11 - mode, if clear in MS-Windows mode - 5 (80x,928) Hardware Cursor External Operation Mode. If set the two - bits of cursor data ,is output on the HC[0-1] pins for the video DAC - The SENS pin becomes HC1 and the MID2 pin becomes HC0. - 6 ?? - 7 (80x,928) Disable PA Output. If set PA[0-7] and VCLK are tristated. - (864/964) TOFF VCLK. Tri-State Off VCLK Output. VCLK output tri - -stated if set - */ - case 0x58: /* Linear Address Window Control */ - VGA.vga.s3.reg_58=(short)val; - break; - /* - 0-1 Linear Address Window Size. Must be less than or equal to video - memory size. 0: 64K, 1: 1MB, 2: 2MB, 3: 4MB (928)/8Mb (864/964) - 2 (not 864/964) Enable Read Ahead Cache if set - 3 (80x,928) ISA Latch Address. If set latches address during every ISA - cycle, unlatches during every ISA cycle if clear. - (864/964) LAT DEL. Address Latch Delay Control (VL-Bus only). If set - address latching occours in the T1 cycle, if clear in the T2 cycle - (I.e. one clock cycle delayed). - 4 ENB LA. Enable Linear Addressing if set. - 5 (not 864/964) Limit Entry Depth for Write-Post. If set limits Write - -Post Entry Depth to avoid ISA bus timeout due to wait cycle limit. - 6 (928,964) Serial Access Mode (SAM) 256 Words Control. If set SAM - control is 256 words, if clear 512 words. - 7 (928) RAS 6-MCLK. If set the random read/write cycle time is 6MCLKs, - if clear 7MCLKs - */ - case 0x59: /* Linear Address Window Position High */ - if (((VGA.vga.s3.la_window&0xff00) ^ (val << 8))!=0) { - VGA.vga.s3.la_window=(VGA.vga.s3.la_window&0x00ff) | (val << 8); - VGA_memory.VGA_StartUpdateLFB(); - } - break; - case 0x5a: /* Linear Address Window Position Low */ - if (((VGA.vga.s3.la_window&0x00ff) ^ val)!=0) { - VGA.vga.s3.la_window=(VGA.vga.s3.la_window&0xff00) | val; - VGA_memory.VGA_StartUpdateLFB(); - } - break; - case 0x5D: /* Extended Horizontal Overflow */ - if (((val ^ VGA.vga.s3.ex_hor_overflow) & 3)!=0) { - VGA.vga.s3.ex_hor_overflow=(short)val; - VGA.VGA_StartResize(); - } else VGA.vga.s3.ex_hor_overflow=(short)val; - break; - /* - 0 Horizontal Total bit 8. Bit 8 of the Horizontal Total register (3d4h - index 0) - 1 Horizontal Display End bit 8. Bit 8 of the Horizontal Display End - register (3d4h index 1) - 2 Start Horizontal Blank bit 8. Bit 8 of the Horizontal Start Blanking - register (3d4h index 2). - 3 (864,964) EHB+64. End Horizontal Blank +64. If set the /BLANK pulse - is extended by 64 DCLKs. Note: Is this bit 6 of 3d4h index 3 or - does it really extend by 64 ? - 4 Start Horizontal Sync Position bit 8. Bit 8 of the Horizontal Start - Retrace register (3d4h index 4). - 5 (864,964) EHS+32. End Horizontal Sync +32. If set the HSYNC pulse - is extended by 32 DCLKs. Note: Is this bit 5 of 3d4h index 5 or - does it really extend by 32 ? - 6 (928,964) Data Transfer Position bit 8. Bit 8 of the Data Transfer - Position register (3d4h index 3Bh) - 7 (928,964) Bus-Grant Terminate Position bit 8. Bit 8 of the Bus Grant - Termination register (3d4h index 5Fh). - */ - case 0x5e: /* Extended Vertical Overflow */ - VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x3ff) | (val & 0x40) << 4; - if (((val ^ VGA.vga.s3.ex_ver_overflow) & 0x3)!=0) { - VGA.vga.s3.ex_ver_overflow=(short)val; - VGA.VGA_StartResize(); - } else VGA.vga.s3.ex_ver_overflow=(short)val; - break; - /* - 0 Vertical Total bit 10. Bit 10 of the Vertical Total register (3d4h - index 6). Bits 8 and 9 are in 3d4h index 7 bit 0 and 5. - 1 Vertical Display End bit 10. Bit 10 of the Vertical Display End - register (3d4h index 12h). Bits 8 and 9 are in 3d4h index 7 bit 1 - and 6 - 2 Start Vertical Blank bit 10. Bit 10 of the Vertical Start Blanking - register (3d4h index 15h). Bit 8 is in 3d4h index 7 bit 3 and bit 9 - in 3d4h index 9 bit 5 - 4 Vertical Retrace Start bit 10. Bit 10 of the Vertical Start Retrace - register (3d4h index 10h). Bits 8 and 9 are in 3d4h index 7 bit 2 - and 7. - 6 Line Compare Position bit 10. Bit 10 of the Line Compare register - (3d4h index 18h). Bit 8 is in 3d4h index 7 bit 4 and bit 9 in 3d4h - index 9 bit 6. - */ - case 0x67: /* Extended Miscellaneous Control 2 */ - /* - 0 VCLK PHS. VCLK Phase With Respect to DCLK. If clear VLKC is inverted - DCLK, if set VCLK = DCLK. - 2-3 (Trio64V+) streams mode - 00 disable Streams Processor - 01 overlay secondary stream on VGA-mode background - 10 reserved - 11 full Streams Processor operation - 4-7 Pixel format. - 0 Mode 0: 8bit (1 pixel/VCLK) - 1 Mode 8: 8bit (2 pixels/VCLK) - 3 Mode 9: 15bit (1 pixel/VCLK) - 5 Mode 10: 16bit (1 pixel/VCLK) - 7 Mode 11: 24/32bit (2 VCLKs/pixel) - 13 (732/764) 32bit (1 pixel/VCLK) - */ - VGA.vga.s3.misc_control_2=(short)val; - VGA.VGA_DetermineMode(); - break; - case 0x69: /* Extended System Control 3 */ - if ((((VGA.vga.config.display_start & 0x1f0000)>>16) ^ (val & 0x1f))!=0) { - VGA.vga.config.display_start&=0xffff; - VGA.vga.config.display_start|=(val & 0x1f) << 16; - } - break; - case 0x6a: /* Extended System Control 4 */ - VGA.vga.svga.bank_read=(short)(val & 0x7f); + } + break; + /* + 0-3 CPU Base Address. 64k bank number. For the 801/5 and 928 see 3d4h + index 51h bits 2-3. For the 864/964 see index 6Ah. + 4 Lock Vertical Timing Registers (LOCK VTMG). Locks 3d4h index 6, 7 + (bits 0,2,3,5,7), 9 bit 5, 10h, 11h bits 0-3, 15h, 16h if set + 5 Lock Horizontal Timing Registers (LOCK HTMG). Locks 3d4h index + 0,1,2,3,4,5,17h bit 2 if set + 6 (911/924) Lock VSync Polarity. + 7 (911/924) Lock HSync Polarity. + */ + case 0x38: /* CR38 Register Lock 1 */ + VGA.vga.s3.reg_lock1=(short)val; + break; + case 0x39: /* CR39 Register Lock 2 */ + VGA.vga.s3.reg_lock2=(short)val; + break; + case 0x3a: + VGA.vga.s3.reg_3a = (short)val; + break; + case 0x40: /* CR40 System Config */ + VGA.vga.s3.reg_40 = (short)val; + break; + case 0x41: /* CR41 BIOS flags */ + VGA.vga.s3.reg_41 = (short)val; + break; + case 0x43: /* CR43 Extended Mode */ + VGA.vga.s3.reg_43=(short)(val & ~0x4); + if ((((val & 0x4) ^ (VGA.vga.config.scan_len >> 6)) & 0x4)!=0) { + VGA.vga.config.scan_len&=0x2ff; + VGA.vga.config.scan_len|=(val & 0x4) << 6; + VGA_draw.VGA_CheckScanLength(); + } + break; + /* + 2 Logical Screen Width bit 8. Bit 8 of the Display Offset Register/ + (3d4h index 13h). (801/5,928) Only active if 3d4h index 51h bits 4-5 + are 0 + */ + case 0x45: /* Hardware cursor mode */ + VGA.vga.s3.hgc.curmode = (short)val; + // Activate hardware cursor code if needed + VGA_draw.VGA_ActivateHardwareCursor(); + break; + case 0x46: + VGA.vga.s3.hgc.originx = (VGA.vga.s3.hgc.originx & 0x00ff) | (val << 8); + break; + case 0x47: /* HGC orgX */ + VGA.vga.s3.hgc.originx = (VGA.vga.s3.hgc.originx & 0xff00) | val; + break; + case 0x48: + VGA.vga.s3.hgc.originy = (VGA.vga.s3.hgc.originy & 0x00ff) | (val << 8); + break; + case 0x49: /* HGC orgY */ + VGA.vga.s3.hgc.originy = (VGA.vga.s3.hgc.originy & 0xff00) | val; + break; + case 0x4A: /* HGC foreground stack */ + if (VGA.vga.s3.hgc.fstackpos > 2) VGA.vga.s3.hgc.fstackpos = 0; + VGA.vga.s3.hgc.forestack.set(VGA.vga.s3.hgc.fstackpos, val); + VGA.vga.s3.hgc.fstackpos++; + break; + case 0x4B: /* HGC background stack */ + if (VGA.vga.s3.hgc.bstackpos > 2) VGA.vga.s3.hgc.bstackpos = 0; + VGA.vga.s3.hgc.backstack.set(VGA.vga.s3.hgc.bstackpos, val); + VGA.vga.s3.hgc.bstackpos++; + break; + case 0x4c: /* HGC start address high byte*/ + VGA.vga.s3.hgc.startaddr &=0xff; + VGA.vga.s3.hgc.startaddr |= ((val & 0xf) << 8); + /*Bitu*/ + if ((VGA.vga.s3.hgc.startaddr <<10)+((64*64*2)/8) > VGA.vga.vmemsize) { + VGA.vga.s3.hgc.startaddr &= 0xff; // put it back to some sane area; + // if read back of this address is ever implemented this needs to change + Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:S3:CRTC: HGC pattern address beyond video memory" ); + } + break; + case 0x4d: /* HGC start address low byte*/ + VGA.vga.s3.hgc.startaddr &=0xff00; + VGA.vga.s3.hgc.startaddr |= (val & 0xff); + break; + case 0x4e: /* HGC pattern start X */ + VGA.vga.s3.hgc.posx = (short)(val & 0x3f); // bits 0-5 + break; + case 0x4f: /* HGC pattern start Y */ + VGA.vga.s3.hgc.posy = (short)(val & 0x3f); // bits 0-5 + break; + case 0x50: // Extended System Control 1 + VGA.vga.s3.reg_50 = (short)val; + switch (val & VGA.S3_XGA_CMASK) { + case VGA.S3_XGA_32BPP: VGA.vga.s3.xga_color_mode = VGA.M_LIN32; break; + case VGA.S3_XGA_16BPP: VGA.vga.s3.xga_color_mode = VGA.M_LIN16; break; + case VGA.S3_XGA_8BPP: VGA.vga.s3.xga_color_mode = VGA.M_LIN8; break; + } + switch (val & VGA.S3_XGA_WMASK) { + case VGA.S3_XGA_1024: VGA.vga.s3.xga_screen_width = 1024; break; + case VGA.S3_XGA_1152: VGA.vga.s3.xga_screen_width = 1152; break; + case VGA.S3_XGA_640: VGA.vga.s3.xga_screen_width = 640; break; + case VGA.S3_XGA_800: VGA.vga.s3.xga_screen_width = 800; break; + case VGA.S3_XGA_1280: VGA.vga.s3.xga_screen_width = 1280; break; + default: VGA.vga.s3.xga_screen_width = 1024; break; + } + break; + case 0x51: /* Extended System Control 2 */ + VGA.vga.s3.reg_51=(short)(val & 0xc0); //Only store bits 6,7 + VGA.vga.config.display_start&=0xF3FFFF; + VGA.vga.config.display_start|=(val & 3) << 18; + if (((VGA.vga.svga.bank_read&0x30) ^ ((val&0xc)<<2))!=0) { + VGA.vga.svga.bank_read&=0xcf; + VGA.vga.svga.bank_read|=(val&0xc)<<2; VGA.vga.svga.bank_write = VGA.vga.svga.bank_read; VGA_memory.VGA_SetupHandlers(); - break; - case 0x6b: // BIOS scratchpad: LFB address - VGA.vga.s3.reg_6b=(short)val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:S3:CRTC:Write to illegal index "+Integer.toString(reg,16)); - break; } - } - }; - - private static VGA.tReadPort SVGA_S3_ReadCRTC = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - switch (reg) { - case 0x24: /* attribute controller index (read only) */ - case 0x26: - return ((VGA.vga.attr.disabled & 1)!=0?0x00:0x20) | (VGA.vga.attr.index & 0x1f); - case 0x2d: /* Extended Chip ID (high byte of PCI device ID) */ - return 0x88; - case 0x2e: /* New Chip ID (low byte of PCI device ID) */ - return 0x11; // Trio64 - case 0x2f: /* Revision */ - return 0x00; // Trio64 (exact value?) - // return 0x44; // Trio64 V+ - case 0x30: /* CR30 Chip ID/REV register */ - return 0xe1; // Trio+ dual byte - case 0x31: /* CR31 Memory Configuration */ - //TODO mix in bits from baseaddress; - return VGA.vga.s3.reg_31; - case 0x35: /* CR35 CRT Register Lock */ - return VGA.vga.s3.reg_35|(VGA.vga.svga.bank_read & 0xf); - case 0x36: /* CR36 Reset State Read 1 */ - return VGA.vga.s3.reg_36; - case 0x37: /* Reset state read 2 */ - return 0x2b; - case 0x38: /* CR38 Register Lock 1 */ - return VGA.vga.s3.reg_lock1; - case 0x39: /* CR39 Register Lock 2 */ - return VGA.vga.s3.reg_lock2; - case 0x3a: - return VGA.vga.s3.reg_3a; - case 0x40: /* CR40 system config */ - return VGA.vga.s3.reg_40; - case 0x41: /* CR40 system config */ - return VGA.vga.s3.reg_41; - case 0x42: // not interlaced - return 0x0d; - case 0x43: /* CR43 Extended Mode */ - return VGA.vga.s3.reg_43|((VGA.vga.config.scan_len>>6)&0x4); - case 0x45: /* Hardware cursor mode */ - VGA.vga.s3.hgc.bstackpos = 0; - VGA.vga.s3.hgc.fstackpos = 0; - return VGA.vga.s3.hgc.curmode|0xa0; - case 0x46: - return VGA.vga.s3.hgc.originx>>8; - case 0x47: /* HGC orgX */ - return VGA.vga.s3.hgc.originx&0xff; - case 0x48: - return VGA.vga.s3.hgc.originy>>8; - case 0x49: /* HGC orgY */ - return VGA.vga.s3.hgc.originy&0xff; - case 0x4A: /* HGC foreground stack */ - return VGA.vga.s3.hgc.forestack.get(VGA.vga.s3.hgc.fstackpos); - case 0x4B: /* HGC background stack */ - return VGA.vga.s3.hgc.backstack.get(VGA.vga.s3.hgc.bstackpos); - case 0x50: // CR50 Extended System Control 1 - return VGA.vga.s3.reg_50; - case 0x51: /* Extended System Control 2 */ - return ((VGA.vga.config.display_start >> 16) & 3 ) | - ((VGA.vga.svga.bank_read & 0x30) >> 2) | - ((VGA.vga.config.scan_len & 0x300) >> 4) | - VGA.vga.s3.reg_51; - case 0x52: // CR52 Extended BIOS flags 1 - return VGA.vga.s3.reg_52; - case 0x53: - return VGA.vga.s3.ext_mem_ctrl; - case 0x55: /* Extended Video DAC Control */ - return VGA.vga.s3.reg_55; - case 0x58: /* Linear Address Window Control */ - return VGA.vga.s3.reg_58; - case 0x59: /* Linear Address Window Position High */ - return (VGA.vga.s3.la_window >> 8); - case 0x5a: /* Linear Address Window Position Low */ - return (VGA.vga.s3.la_window & 0xff); - case 0x5D: /* Extended Horizontal Overflow */ - return VGA.vga.s3.ex_hor_overflow; - case 0x5e: /* Extended Vertical Overflow */ - return VGA.vga.s3.ex_ver_overflow; - case 0x67: /* Extended Miscellaneous Control 2 */ - return VGA.vga.s3.misc_control_2; - case 0x69: /* Extended System Control 3 */ - return ((VGA.vga.config.display_start & 0x1f0000)>>16); - case 0x6a: /* Extended System Control 4 */ - return (VGA.vga.svga.bank_read & 0x7f); - case 0x6b: // BIOS scatchpad: LFB address - return VGA.vga.s3.reg_6b; - default: - return 0x00; + if ((((val & 0x30) ^ (VGA.vga.config.scan_len >> 4)) & 0x30)!=0) { + VGA.vga.config.scan_len&=0xff; + VGA.vga.config.scan_len|=(val & 0x30) << 4; + VGA_draw.VGA_CheckScanLength(); } - } - }; - - private static VGA.tWritePort SVGA_S3_WriteSEQ = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - if (reg>0x8 && VGA.vga.s3.pll.lock!=0x6) return; - switch (reg) { - case 0x08: - VGA.vga.s3.pll.lock=(short)val; - break; - case 0x10: /* Memory PLL Data Low */ - VGA.vga.s3.mclk.n=(short)(val & 0x1f); - VGA.vga.s3.mclk.r=(short)(val >> 5); - break; - case 0x11: /* Memory PLL Data High */ - VGA.vga.s3.mclk.m=(short)(val & 0x7f); - break; - case 0x12: /* Video PLL Data Low */ - VGA.vga.s3.clk[3].n=(short)(val & 0x1f); - VGA.vga.s3.clk[3].r=(short)(val >> 5); - break; - case 0x13: /* Video PLL Data High */ - VGA.vga.s3.clk[3].m=(short)(val & 0x7f); - break; - case 0x15: - VGA.vga.s3.pll.cmd=(short)val; + break; + /* + 0 (80x) Display Start Address bit 18 + 0-1 (928 +) Display Start Address bit 18-19 + Bits 16-17 are in index 31h bits 4-5, Bits 0-15 are in 3d4h index + 0Ch,0Dh. For the 864/964 see 3d4h index 69h + 2 (80x) CPU BASE. CPU Base Address Bit 18. + 2-3 (928 +) Old CPU Base Address Bits 19-18. + 64K Bank register bits 4-5. Bits 0-3 are in 3d4h index 35h. + For the 864/964 see 3d4h index 6Ah + 4-5 Logical Screen Width Bit [8-9]. Bits 8-9 of the CRTC Offset register + (3d4h index 13h). If this field is 0, 3d4h index 43h bit 2 is active + 6 (928,964) DIS SPXF. Disable Split Transfers if set. Spilt Transfers + allows transferring one half of the VRAM shift register data while + the other half is being output. For the 964 Split Transfers + must be enabled in enhanced modes (4AE8h bit 0 set). Guess: They + probably can't time the VRAM load cycle closely enough while the + graphics engine is running. + 7 (not 864/964) Enable EPROM Write. If set enables flash memory write + control to the BIOS ROM address + */ + case 0x52: // Extended System Control 1 + VGA.vga.s3.reg_52 = (short)val; + break; + case 0x53: + // Map or unmap MMIO + // bit 4 = MMIO at A0000 + // bit 3 = MMIO at LFB + 16M (should be fine if its always enabled for now) + if(VGA.vga.s3.ext_mem_ctrl!=val) { + VGA.vga.s3.ext_mem_ctrl = (short)val; + VGA_memory.VGA_SetupHandlers(); + } + break; + case 0x55: /* Extended Video DAC Control */ + VGA.vga.s3.reg_55=(short)val; + break; + /* + 0-1 DAC Register Select Bits. Passed to the RS2 and RS3 pins on the + RAMDAC, allowing access to all 8 or 16 registers on advanced RAMDACs. + If this field is 0, 3d4h index 43h bit 1 is active. + 2 Enable General Input Port Read. If set DAC reads are disabled and the + STRD strobe for reading the General Input Port is enabled for reading + while DACRD is active, if clear DAC reads are enabled. + 3 (928) Enable External SID Operation if set. If set video data is + passed directly from the VRAMs to the DAC rather than through the + VGA chip + 4 Hardware Cursor MS/X11 Mode. If set the Hardware Cursor is in X11 + mode, if clear in MS-Windows mode + 5 (80x,928) Hardware Cursor External Operation Mode. If set the two + bits of cursor data ,is output on the HC[0-1] pins for the video DAC + The SENS pin becomes HC1 and the MID2 pin becomes HC0. + 6 ?? + 7 (80x,928) Disable PA Output. If set PA[0-7] and VCLK are tristated. + (864/964) TOFF VCLK. Tri-State Off VCLK Output. VCLK output tri + -stated if set + */ + case 0x58: /* Linear Address Window Control */ + VGA.vga.s3.reg_58=(short)val; + break; + /* + 0-1 Linear Address Window Size. Must be less than or equal to video + memory size. 0: 64K, 1: 1MB, 2: 2MB, 3: 4MB (928)/8Mb (864/964) + 2 (not 864/964) Enable Read Ahead Cache if set + 3 (80x,928) ISA Latch Address. If set latches address during every ISA + cycle, unlatches during every ISA cycle if clear. + (864/964) LAT DEL. Address Latch Delay Control (VL-Bus only). If set + address latching occours in the T1 cycle, if clear in the T2 cycle + (I.e. one clock cycle delayed). + 4 ENB LA. Enable Linear Addressing if set. + 5 (not 864/964) Limit Entry Depth for Write-Post. If set limits Write + -Post Entry Depth to avoid ISA bus timeout due to wait cycle limit. + 6 (928,964) Serial Access Mode (SAM) 256 Words Control. If set SAM + control is 256 words, if clear 512 words. + 7 (928) RAS 6-MCLK. If set the random read/write cycle time is 6MCLKs, + if clear 7MCLKs + */ + case 0x59: /* Linear Address Window Position High */ + if (((VGA.vga.s3.la_window&0xff00) ^ (val << 8))!=0) { + VGA.vga.s3.la_window=(VGA.vga.s3.la_window&0x00ff) | (val << 8); + VGA_memory.VGA_StartUpdateLFB(); + } + break; + case 0x5a: /* Linear Address Window Position Low */ + if (((VGA.vga.s3.la_window&0x00ff) ^ val)!=0) { + VGA.vga.s3.la_window=(VGA.vga.s3.la_window&0xff00) | val; + VGA_memory.VGA_StartUpdateLFB(); + } + break; + case 0x5D: /* Extended Horizontal Overflow */ + if (((val ^ VGA.vga.s3.ex_hor_overflow) & 3)!=0) { + VGA.vga.s3.ex_hor_overflow=(short)val; + VGA.VGA_StartResize(); + } else VGA.vga.s3.ex_hor_overflow=(short)val; + break; + /* + 0 Horizontal Total bit 8. Bit 8 of the Horizontal Total register (3d4h + index 0) + 1 Horizontal Display End bit 8. Bit 8 of the Horizontal Display End + register (3d4h index 1) + 2 Start Horizontal Blank bit 8. Bit 8 of the Horizontal Start Blanking + register (3d4h index 2). + 3 (864,964) EHB+64. End Horizontal Blank +64. If set the /BLANK pulse + is extended by 64 DCLKs. Note: Is this bit 6 of 3d4h index 3 or + does it really extend by 64 ? + 4 Start Horizontal Sync Position bit 8. Bit 8 of the Horizontal Start + Retrace register (3d4h index 4). + 5 (864,964) EHS+32. End Horizontal Sync +32. If set the HSYNC pulse + is extended by 32 DCLKs. Note: Is this bit 5 of 3d4h index 5 or + does it really extend by 32 ? + 6 (928,964) Data Transfer Position bit 8. Bit 8 of the Data Transfer + Position register (3d4h index 3Bh) + 7 (928,964) Bus-Grant Terminate Position bit 8. Bit 8 of the Bus Grant + Termination register (3d4h index 5Fh). + */ + case 0x5e: /* Extended Vertical Overflow */ + VGA.vga.config.line_compare=(VGA.vga.config.line_compare & 0x3ff) | (val & 0x40) << 4; + if (((val ^ VGA.vga.s3.ex_ver_overflow) & 0x3)!=0) { + VGA.vga.s3.ex_ver_overflow=(short)val; VGA.VGA_StartResize(); - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:S3:SEQ:Write to illegal index "+Integer.toString(reg,16)); - break; + } else VGA.vga.s3.ex_ver_overflow=(short)val; + break; + /* + 0 Vertical Total bit 10. Bit 10 of the Vertical Total register (3d4h + index 6). Bits 8 and 9 are in 3d4h index 7 bit 0 and 5. + 1 Vertical Display End bit 10. Bit 10 of the Vertical Display End + register (3d4h index 12h). Bits 8 and 9 are in 3d4h index 7 bit 1 + and 6 + 2 Start Vertical Blank bit 10. Bit 10 of the Vertical Start Blanking + register (3d4h index 15h). Bit 8 is in 3d4h index 7 bit 3 and bit 9 + in 3d4h index 9 bit 5 + 4 Vertical Retrace Start bit 10. Bit 10 of the Vertical Start Retrace + register (3d4h index 10h). Bits 8 and 9 are in 3d4h index 7 bit 2 + and 7. + 6 Line Compare Position bit 10. Bit 10 of the Line Compare register + (3d4h index 18h). Bit 8 is in 3d4h index 7 bit 4 and bit 9 in 3d4h + index 9 bit 6. + */ + case 0x67: /* Extended Miscellaneous Control 2 */ + /* + 0 VCLK PHS. VCLK Phase With Respect to DCLK. If clear VLKC is inverted + DCLK, if set VCLK = DCLK. + 2-3 (Trio64V+) streams mode + 00 disable Streams Processor + 01 overlay secondary stream on VGA-mode background + 10 reserved + 11 full Streams Processor operation + 4-7 Pixel format. + 0 Mode 0: 8bit (1 pixel/VCLK) + 1 Mode 8: 8bit (2 pixels/VCLK) + 3 Mode 9: 15bit (1 pixel/VCLK) + 5 Mode 10: 16bit (1 pixel/VCLK) + 7 Mode 11: 24/32bit (2 VCLKs/pixel) + 13 (732/764) 32bit (1 pixel/VCLK) + */ + VGA.vga.s3.misc_control_2=(short)val; + VGA.VGA_DetermineMode(); + break; + case 0x69: /* Extended System Control 3 */ + if ((((VGA.vga.config.display_start & 0x1f0000)>>16) ^ (val & 0x1f))!=0) { + VGA.vga.config.display_start&=0xffff; + VGA.vga.config.display_start|=(val & 0x1f) << 16; } + break; + case 0x6a: /* Extended System Control 4 */ + VGA.vga.svga.bank_read=(short)(val & 0x7f); + VGA.vga.svga.bank_write = VGA.vga.svga.bank_read; + VGA_memory.VGA_SetupHandlers(); + break; + case 0x6b: // BIOS scratchpad: LFB address + VGA.vga.s3.reg_6b=(short)val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:S3:CRTC:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - private static VGA.tReadPort SVGA_S3_ReadSEQ = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - /* S3 specific group */ - if (reg>0x8 && VGA.vga.s3.pll.lock!=0x6) { - if (reg<0x1b) return 0; - else return reg; - } - switch (reg) { - case 0x08: /* PLL Unlock */ - return VGA.vga.s3.pll.lock; - case 0x10: /* Memory PLL Data Low */ - return (VGA.vga.s3.mclk.n!=0 || (VGA.vga.s3.mclk.r << 5)!=0)?1:0; - case 0x11: /* Memory PLL Data High */ - return VGA.vga.s3.mclk.m; - case 0x12: /* Video PLL Data Low */ - return (VGA.vga.s3.clk[3].n!=0 || (VGA.vga.s3.clk[3].r << 5)!=0)?1:0; - case 0x13: /* Video Data High */ - return VGA.vga.s3.clk[3].m; - case 0x15: - return VGA.vga.s3.pll.cmd; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:S3:SEQ:Read from illegal index "+Integer.toString(reg,16)); - return 0; - } + /*Bitu*//*Bitu*//*Bitu*/ + private static final VGA.tReadPort SVGA_S3_ReadCRTC = (reg, iolen) -> { + switch (reg) { + case 0x24: /* attribute controller index (read only) */ + case 0x26: + return ((VGA.vga.attr.disabled & 1)!=0?0x00:0x20) | (VGA.vga.attr.index & 0x1f); + case 0x2d: /* Extended Chip ID (high byte of PCI device ID) */ + return 0x88; + case 0x2e: /* New Chip ID (low byte of PCI device ID) */ + return 0x11; // Trio64 + case 0x2f: /* Revision */ + return 0x00; // Trio64 (exact value?) +// return 0x44; // Trio64 V+ + case 0x30: /* CR30 Chip ID/REV register */ + return 0xe1; // Trio+ dual byte + case 0x31: /* CR31 Memory Configuration */ +//TODO mix in bits from baseaddress; + return VGA.vga.s3.reg_31; + case 0x35: /* CR35 CRT Register Lock */ + return VGA.vga.s3.reg_35|(VGA.vga.svga.bank_read & 0xf); + case 0x36: /* CR36 Reset State Read 1 */ + return VGA.vga.s3.reg_36; + case 0x37: /* Reset state read 2 */ + return 0x2b; + case 0x38: /* CR38 Register Lock 1 */ + return VGA.vga.s3.reg_lock1; + case 0x39: /* CR39 Register Lock 2 */ + return VGA.vga.s3.reg_lock2; + case 0x3a: + return VGA.vga.s3.reg_3a; + case 0x40: /* CR40 system config */ + return VGA.vga.s3.reg_40; + case 0x41: /* CR40 system config */ + return VGA.vga.s3.reg_41; + case 0x42: // not interlaced + return 0x0d; + case 0x43: /* CR43 Extended Mode */ + return VGA.vga.s3.reg_43|((VGA.vga.config.scan_len>>6)&0x4); + case 0x45: /* Hardware cursor mode */ + VGA.vga.s3.hgc.bstackpos = 0; + VGA.vga.s3.hgc.fstackpos = 0; + return VGA.vga.s3.hgc.curmode|0xa0; + case 0x46: + return VGA.vga.s3.hgc.originx>>8; + case 0x47: /* HGC orgX */ + return VGA.vga.s3.hgc.originx&0xff; + case 0x48: + return VGA.vga.s3.hgc.originy>>8; + case 0x49: /* HGC orgY */ + return VGA.vga.s3.hgc.originy&0xff; + case 0x4A: /* HGC foreground stack */ + return VGA.vga.s3.hgc.forestack.get(VGA.vga.s3.hgc.fstackpos); + case 0x4B: /* HGC background stack */ + return VGA.vga.s3.hgc.backstack.get(VGA.vga.s3.hgc.bstackpos); + case 0x50: // CR50 Extended System Control 1 + return VGA.vga.s3.reg_50; + case 0x51: /* Extended System Control 2 */ + return ((VGA.vga.config.display_start >> 16) & 3 ) | + ((VGA.vga.svga.bank_read & 0x30) >> 2) | + ((VGA.vga.config.scan_len & 0x300) >> 4) | + VGA.vga.s3.reg_51; + case 0x52: // CR52 Extended BIOS flags 1 + return VGA.vga.s3.reg_52; + case 0x53: + return VGA.vga.s3.ext_mem_ctrl; + case 0x55: /* Extended Video DAC Control */ + return VGA.vga.s3.reg_55; + case 0x58: /* Linear Address Window Control */ + return VGA.vga.s3.reg_58; + case 0x59: /* Linear Address Window Position High */ + return (VGA.vga.s3.la_window >> 8); + case 0x5a: /* Linear Address Window Position Low */ + return (VGA.vga.s3.la_window & 0xff); + case 0x5D: /* Extended Horizontal Overflow */ + return VGA.vga.s3.ex_hor_overflow; + case 0x5e: /* Extended Vertical Overflow */ + return VGA.vga.s3.ex_ver_overflow; + case 0x67: /* Extended Miscellaneous Control 2 */ + return VGA.vga.s3.misc_control_2; + case 0x69: /* Extended System Control 3 */ + return ((VGA.vga.config.display_start & 0x1f0000)>>16); + case 0x6a: /* Extended System Control 4 */ + return (VGA.vga.svga.bank_read & 0x7f); + case 0x6b: // BIOS scatchpad: LFB address + return VGA.vga.s3.reg_6b; + default: + return 0x00; } }; - private static VGA.tGetClock SVGA_S3_GetClock = new VGA.tGetClock() { - public /*Bitu*/int call() { - /*Bitu*/int clock = (VGA.vga.misc_output >> 2) & 3; - if (clock == 0) - clock = 25175000; - else if (clock == 1) - clock = 28322000; - else - clock=1000*VGA.S3_CLOCK(VGA.vga.s3.clk[clock].m,VGA.vga.s3.clk[clock].n,VGA.vga.s3.clk[clock].r); - /* Check for dual transfer, master clock/2 */ - if ((VGA.vga.s3.pll.cmd & 0x10)!=0) clock/=2; - return clock; + /*Bitu*//*Bitu*//*Bitu*/ + private static final VGA.tWritePort SVGA_S3_WriteSEQ = (reg, val, iolen) -> { + if (reg>0x8 && VGA.vga.s3.pll.lock!=0x6) return; + switch (reg) { + case 0x08: + VGA.vga.s3.pll.lock=(short)val; + break; + case 0x10: /* Memory PLL Data Low */ + VGA.vga.s3.mclk.n=(short)(val & 0x1f); + VGA.vga.s3.mclk.r=(short)(val >> 5); + break; + case 0x11: /* Memory PLL Data High */ + VGA.vga.s3.mclk.m=(short)(val & 0x7f); + break; + case 0x12: /* Video PLL Data Low */ + VGA.vga.s3.clk[3].n=(short)(val & 0x1f); + VGA.vga.s3.clk[3].r=(short)(val >> 5); + break; + case 0x13: /* Video PLL Data High */ + VGA.vga.s3.clk[3].m=(short)(val & 0x7f); + break; + case 0x15: + VGA.vga.s3.pll.cmd=(short)val; + VGA.VGA_StartResize(); + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:S3:SEQ:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - private static VGA.tHWCursorActive SVGA_S3_HWCursorActive = new VGA.tHWCursorActive() { - public boolean call() { - return (VGA.vga.s3.hgc.curmode & 0x1) != 0; + /*Bitu*//*Bitu*//*Bitu*/ + private static final VGA.tReadPort SVGA_S3_ReadSEQ = (reg, iolen) -> { + /* S3 specific group */ + if (reg>0x8 && VGA.vga.s3.pll.lock!=0x6) { + if (reg<0x1b) return 0; + else return reg; + } + switch (reg) { + case 0x08: /* PLL Unlock */ + return VGA.vga.s3.pll.lock; + case 0x10: /* Memory PLL Data Low */ + return (VGA.vga.s3.mclk.n!=0 || (VGA.vga.s3.mclk.r << 5)!=0)?1:0; + case 0x11: /* Memory PLL Data High */ + return VGA.vga.s3.mclk.m; + case 0x12: /* Video PLL Data Low */ + return (VGA.vga.s3.clk[3].n!=0 || (VGA.vga.s3.clk[3].r << 5)!=0)?1:0; + case 0x13: /* Video Data High */ + return VGA.vga.s3.clk[3].m; + case 0x15: + return VGA.vga.s3.pll.cmd; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:S3:SEQ:Read from illegal index "+Integer.toString(reg,16)); + return 0; } }; - private static VGA.tAcceptsMode SVGA_S3_AcceptsMode = new VGA.tAcceptsMode() { - public boolean call(/*Bitu*/int mode) { - return Int10_modes.VideoModeMemSize(mode) < VGA.vga.vmemsize; - } + /*Bitu*/ + private static final VGA.tGetClock SVGA_S3_GetClock = () -> { + /*Bitu*/int clock = (VGA.vga.misc_output >> 2) & 3; + if (clock == 0) + clock = 25175000; + else if (clock == 1) + clock = 28322000; + else + clock=1000*VGA.S3_CLOCK(VGA.vga.s3.clk[clock].m,VGA.vga.s3.clk[clock].n,VGA.vga.s3.clk[clock].r); + /* Check for dual transfer, master clock/2 */ + if ((VGA.vga.s3.pll.cmd & 0x10)!=0) clock/=2; + return clock; }; + private static final VGA.tHWCursorActive SVGA_S3_HWCursorActive = () -> (VGA.vga.s3.hgc.curmode & 0x1) != 0; + + /*Bitu*/ + private static final VGA.tAcceptsMode SVGA_S3_AcceptsMode = mode -> Int10_modes.VideoModeMemSize(mode) < VGA.vga.vmemsize; + public static void SVGA_Setup_S3Trio() { VGA.svga.write_p3d5 = SVGA_S3_WriteCRTC; VGA.svga.read_p3d5 = SVGA_S3_ReadCRTC; diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_seq.java b/jdosbox/src/main/java/jdos/hardware/VGA_seq.java index 906b06cd..56f185f8 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_seq.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_seq.java @@ -7,129 +7,120 @@ import jdos.util.Ptr; public class VGA_seq { - static private IoHandler.IO_ReadHandler read_p3c4 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return VGA.vga.seq.index; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3c4 = (port, iolen) -> VGA.vga.seq.index; - private static IoHandler.IO_WriteHandler write_p3c4 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.seq.index=(short)val; - } - }; + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p3c4 = (port, val, iolen) -> VGA.vga.seq.index=(short)val; - private static IoHandler.IO_WriteHandler write_p3c5 = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - // LOG_MSG("SEQ WRITE reg %X val %X",VGA.vga.seq.index),val); - switch(VGA.vga.seq.index) { - case 0: /* Reset */ - VGA.vga.seq.reset=(short)val; - break; - case 1: /* Clocking Mode */ - if (val!=(VGA.vga.seq.clocking_mode & 0xFF)) { - // don't resize if only the screen off bit was changed - if ((val&(0xDF))!=(VGA.vga.seq.clocking_mode&(0xDF))) { - VGA.vga.seq.clocking_mode=(byte)val; - VGA.VGA_StartResize(); - } else { - VGA.vga.seq.clocking_mode=(byte)val; - } - if ((val & 0x20)!=0) VGA.vga.attr.disabled |= 0x2; - else VGA.vga.attr.disabled &= ~0x2; - } - /* TODO Figure this out :) - 0 If set character clocks are 8 dots wide, else 9. - 2 If set loads video serializers every other character - clock cycle, else every one. - 3 If set the Dot Clock is Master Clock/2, else same as Master Clock - (See 3C2h bit 2-3). (Doubles pixels). Note: on some SVGA chipsets - this bit also affects the Sequencer mode. - 4 If set loads video serializers every fourth character clock cycle, - else every one. - 5 if set turns off screen and gives all memory cycles to the CPU - interface. - */ - break; - case 2: /* Map Mask */ - VGA.vga.seq.map_mask=(byte)(val & 15); - VGA.vga.config.full_map_mask=VGA.FillTable[val & 15]; - VGA.vga.config.full_not_map_mask=~VGA.vga.config.full_map_mask; - /* - 0 Enable writes to plane 0 if set - 1 Enable writes to plane 1 if set - 2 Enable writes to plane 2 if set - 3 Enable writes to plane 3 if set - */ - break; - case 3: /* Character Map Select */ - { - VGA.vga.seq.character_map_select=(short)val; - /*Bit8u*/int font1=(val & 0x3) << 1; - if (Dosbox.IS_VGA_ARCH()) font1|=(val & 0x10) >> 4; - VGA.vga.draw.font_tables[0]=new Ptr(VGA.vga.draw.font,font1*8*1024); - /*Bit8u*/int font2=((val & 0xc) >> 1); - if (Dosbox.IS_VGA_ARCH()) font2|=(val & 0x20) >> 5; - VGA.vga.draw.font_tables[1]=new Ptr(VGA.vga.draw.font,font2*8*1024); - } - /* - 0,1,4 Selects VGA Character Map (0..7) if bit 3 of the character - attribute is clear. - 2,3,5 Selects VGA Character Map (0..7) if bit 3 of the character - attribute is set. - Note: Character Maps are placed as follows: - Map 0 at 0k, 1 at 16k, 2 at 32k, 3: 48k, 4: 8k, 5: 24k, 6: 40k, 7: 56k - */ - break; - case 4: /* Memory Mode */ - /* - 0 Set if in an alphanumeric mode, clear in graphics modes. - 1 Set if more than 64kbytes on the adapter. - 2 Enables Odd/Even addressing mode if set. Odd/Even mode places all odd - bytes in plane 1&3, and all even bytes in plane 0&2. - 3 If set address bit 0-1 selects video memory planes (256 color mode), - rather than the Map Mask and Read Map Select Registers. - */ - VGA.vga.seq.memory_mode=(short)val; - if (Dosbox.IS_VGA_ARCH()) { - /* Changing this means changing the VGA Memory Read/Write Handler */ - if ((val&0x08)!=0) VGA.vga.config.chained=true; - else VGA.vga.config.chained=false; - VGA_memory.VGA_SetupHandlers(); - } - break; - default: - if (VGA.svga.write_p3c5!=null) { - VGA.svga.write_p3c5.call(VGA.vga.seq.index, val, iolen); + /*Bitu*//*Bitu*//*Bitu*/ + private static final IoHandler.IO_WriteHandler write_p3c5 = (port, val, iolen) -> { + // LOG_MSG("SEQ WRITE reg %X val %X",VGA.vga.seq.index),val); + switch(VGA.vga.seq.index) { + case 0: /* Reset */ + VGA.vga.seq.reset=(short)val; + break; + case 1: /* Clocking Mode */ + if (val!=(VGA.vga.seq.clocking_mode & 0xFF)) { + // don't resize if only the screen off bit was changed + if ((val&(0xDF))!=(VGA.vga.seq.clocking_mode&(0xDF))) { + VGA.vga.seq.clocking_mode=(byte)val; + VGA.VGA_StartResize(); } else { - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:SEQ:Write to illegal index "+Integer.toString(VGA.vga.seq.index,16)); + VGA.vga.seq.clocking_mode=(byte)val; } - break; + if ((val & 0x20)!=0) VGA.vga.attr.disabled |= 0x2; + else VGA.vga.attr.disabled &= ~0x2; + } + /* TODO Figure this out :) + 0 If set character clocks are 8 dots wide, else 9. + 2 If set loads video serializers every other character + clock cycle, else every one. + 3 If set the Dot Clock is Master Clock/2, else same as Master Clock + (See 3C2h bit 2-3). (Doubles pixels). Note: on some SVGA chipsets + this bit also affects the Sequencer mode. + 4 If set loads video serializers every fourth character clock cycle, + else every one. + 5 if set turns off screen and gives all memory cycles to the CPU + interface. + */ + break; + case 2: /* Map Mask */ + VGA.vga.seq.map_mask=(byte)(val & 15); + VGA.vga.config.full_map_mask=VGA.FillTable[val & 15]; + VGA.vga.config.full_not_map_mask=~VGA.vga.config.full_map_mask; + /* + 0 Enable writes to plane 0 if set + 1 Enable writes to plane 1 if set + 2 Enable writes to plane 2 if set + 3 Enable writes to plane 3 if set + */ + break; + case 3: /* Character Map Select */ + { + VGA.vga.seq.character_map_select=(short)val; + /*Bit8u*/int font1=(val & 0x3) << 1; + if (Dosbox.IS_VGA_ARCH()) font1|=(val & 0x10) >> 4; + VGA.vga.draw.font_tables[0]=new Ptr(VGA.vga.draw.font,font1*8*1024); + /*Bit8u*/int font2=((val & 0xc) >> 1); + if (Dosbox.IS_VGA_ARCH()) font2|=(val & 0x20) >> 5; + VGA.vga.draw.font_tables[1]=new Ptr(VGA.vga.draw.font,font2*8*1024); + } + /* + 0,1,4 Selects VGA Character Map (0..7) if bit 3 of the character + attribute is clear. + 2,3,5 Selects VGA Character Map (0..7) if bit 3 of the character + attribute is set. + Note: Character Maps are placed as follows: + Map 0 at 0k, 1 at 16k, 2 at 32k, 3: 48k, 4: 8k, 5: 24k, 6: 40k, 7: 56k + */ + break; + case 4: /* Memory Mode */ + /* + 0 Set if in an alphanumeric mode, clear in graphics modes. + 1 Set if more than 64kbytes on the adapter. + 2 Enables Odd/Even addressing mode if set. Odd/Even mode places all odd + bytes in plane 1&3, and all even bytes in plane 0&2. + 3 If set address bit 0-1 selects video memory planes (256 color mode), + rather than the Map Mask and Read Map Select Registers. + */ + VGA.vga.seq.memory_mode=(short)val; + if (Dosbox.IS_VGA_ARCH()) { + /* Changing this means changing the VGA Memory Read/Write Handler */ + VGA.vga.config.chained= (val & 0x08) != 0; + VGA_memory.VGA_SetupHandlers(); + } + break; + default: + if (VGA.svga.write_p3c5!=null) { + VGA.svga.write_p3c5.call(VGA.vga.seq.index, val, iolen); + } else { + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:SEQ:Write to illegal index "+Integer.toString(VGA.vga.seq.index,16)); } + break; } }; - static private IoHandler.IO_ReadHandler read_p3c5 = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - // LOG_MSG("VGA:SEQ:Read from index %2X",VGA.vga.seq.index)); - switch(VGA.vga.seq.index) { - case 0: /* Reset */ - return VGA.vga.seq.reset; - case 1: /* Clocking Mode */ - return VGA.vga.seq.clocking_mode & 0xFF; - case 2: /* Map Mask */ - return VGA.vga.seq.map_mask & 0xFF; - case 3: /* Character Map Select */ - return VGA.vga.seq.character_map_select; - case 4: /* Memory Mode */ - return VGA.vga.seq.memory_mode; - default: - if (VGA.svga.read_p3c5 != null) - return VGA.svga.read_p3c5.call(VGA.vga.seq.index, iolen); - break; - } - return 0; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3c5 = (port, iolen) -> { + // LOG_MSG("VGA:SEQ:Read from index %2X",VGA.vga.seq.index)); + switch(VGA.vga.seq.index) { + case 0: /* Reset */ + return VGA.vga.seq.reset; + case 1: /* Clocking Mode */ + return VGA.vga.seq.clocking_mode & 0xFF; + case 2: /* Map Mask */ + return VGA.vga.seq.map_mask & 0xFF; + case 3: /* Character Map Select */ + return VGA.vga.seq.character_map_select; + case 4: /* Memory Mode */ + return VGA.vga.seq.memory_mode; + default: + if (VGA.svga.read_p3c5 != null) + return VGA.svga.read_p3c5.call(VGA.vga.seq.index, iolen); + break; } + return 0; }; public static void VGA_SetupSEQ() { diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_tseng.java b/jdosbox/src/main/java/jdos/hardware/VGA_tseng.java index 33b570e7..e188bd54 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_tseng.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_tseng.java @@ -8,7 +8,7 @@ public class VGA_tseng { // Tseng ET4K data private static class SVGA_ET4K_DATA { - public /*Bit8u*/boolean extensionsEnabled = true; + public final /*Bit8u*/boolean extensionsEnabled = true; // Stored exact values of some registers. Documentation only specifies some bits but hardware checks may // expect other bits to be preserved. @@ -27,11 +27,11 @@ private static class SVGA_ET4K_DATA { public /*Bitu*/int store_3c4_06; public /*Bitu*/int store_3c4_07; - public /*Bitu*/int[] clockFreq=new int[16]; + public final /*Bitu*/int[] clockFreq=new int[16]; public /*Bitu*/int biosMode; } - static SVGA_ET4K_DATA et4k = new SVGA_ET4K_DATA(); + static final SVGA_ET4K_DATA et4k = new SVGA_ET4K_DATA(); // #define STORE_ET4K(port, index) \ // case 0x##index: \ @@ -42,199 +42,195 @@ private static class SVGA_ET4K_DATA { // case 0x##index: \ // return et4k.store_##port##_##index; + /*Bitu*//*Bitu*//*Bitu*/ // Tseng ET4K implementation - static private VGA.tWritePort write_p3d5_et4k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - if(!et4k.extensionsEnabled && reg!=0x33) - return; - - switch(reg) { - /* - 3d4h index 31h (R/W): General Purpose - bit 0-3 Scratch pad - 6-7 Clock Select bits 3-4. Bits 0-1 are in 3C2h/3CCh bits 2-3. - */ - case 0x31: - et4k.store_3d4_31 = val; - break; + static private final VGA.tWritePort write_p3d5_et4k = (reg, val, iolen) -> { + if(!et4k.extensionsEnabled && reg!=0x33) + return; + + switch(reg) { + /* + 3d4h index 31h (R/W): General Purpose + bit 0-3 Scratch pad + 6-7 Clock Select bits 3-4. Bits 0-1 are in 3C2h/3CCh bits 2-3. + */ + case 0x31: + et4k.store_3d4_31 = val; + break; + + // 3d4h index 32h - RAS/CAS Configuration (R/W) + // No effect on emulation. Should not be written by software. + case 0x32: + et4k.store_3d4_32 = val; + break; + case 0x33: + // 3d4 index 33h (R/W): Extended start Address + // 0-1 Display Start Address bits 16-17 + // 2-3 Cursor start address bits 16-17 + // Used by standard Tseng ID scheme + et4k.store_3d4_33 = val; + VGA.vga.config.display_start = (VGA.vga.config.display_start & 0xffff) | ((val & 0x03)<<16); + VGA.vga.config.cursor_start = (VGA.vga.config.cursor_start & 0xffff) | ((val & 0x0c)<<14); + break; + + /* + 3d4h index 34h (R/W): 6845 Compatibility Control Register + bit 0 Enable CS0 (alternate clock timing) + 1 Clock Select bit 2. Bits 0-1 in 3C2h bits 2-3, bits 3-4 are in 3d4h + index 31h bits 6-7 + 2 Tristate ET4000 bus and color outputs if set + 3 Video Subsystem Enable Register at 46E8h if set, at 3C3h if clear. + 4 Enable Translation ROM for reading CRTC and MISCOUT if set + 5 Enable Translation ROM for writing CRTC and MISCOUT if set + 6 Enable double scan in AT&T compatibility mode if set + 7 Enable 6845 compatibility if set + */ + // TODO: Bit 6 may have effect on emulation + case 0x34: + et4k.store_3d4_34 = val; + break; + case 0x35: + /* + 3d4h index 35h (R/W): Overflow High + bit 0 Vertical Blank Start Bit 10 (3d4h index 15h). + 1 Vertical Total Bit 10 (3d4h index 6). + 2 Vertical Display End Bit 10 (3d4h index 12h). + 3 Vertical Sync Start Bit 10 (3d4h index 10h). + 4 Line Compare Bit 10 (3d4h index 18h). + 5 Gen-Lock Enabled if set (External sync) + 6 (4000) Read/Modify/Write Enabled if set. Currently not implemented. + 7 Vertical interlace if set. The Vertical timing registers are + programmed as if the mode was non-interlaced!! + */ + et4k.store_3d4_35 = val; + VGA.vga.config.line_compare = (VGA.vga.config.line_compare & 0x3ff) | ((val&0x10)<<6); + // Abusing s3 ex_ver_overflow field. This is to be cleaned up later. + { + /*Bit8u*/int s3val = + ((val & 0x01) << 2) | // vbstart + ((val & 0x02) >> 1) | // vtotal + ((val & 0x04) >> 1) | // vdispend + ((val & 0x08) << 1) | // vsyncstart (?) + ((val & 0x10) << 2); // linecomp + if (((s3val ^ VGA.vga.s3.ex_ver_overflow) & 0x3)!=0) { + VGA.vga.s3.ex_ver_overflow=(short)s3val; + VGA.VGA_StartResize(); + } else VGA.vga.s3.ex_ver_overflow=(short)s3val; + } + break; + + // 3d4h index 36h - Video System Configuration 1 (R/W) + // VGADOC provides a lot of info on this register, Ferraro has significantly less detail. + // This is unlikely to be used by any games. Bit 4 switches chipset into linear mode - + // that may be useful in some cases if there is any software actually using it. + // TODO (not near future): support linear addressing + case 0x36: + et4k.store_3d4_34 = val; + break; + + // 3d4h index 37 - Video System Configuration 2 (R/W) + // Bits 0,1, and 3 provides information about memory size: + // 0-1 Bus width (1: 8 bit, 2: 16 bit, 3: 32 bit) + // 3 Size of RAM chips (0: 64Kx, 1: 256Kx) + // Other bits have no effect on emulation. + case 0x37: + if (val != et4k.store_3d4_37) { + et4k.store_3d4_37 = val; + VGA.vga.vmemwrap = ((64*1024)<<((val&8)>>2))<<((val&3)-1); + VGA_memory.VGA_SetupHandlers(); + } + break; + + case 0x3f: + /* + 3d4h index 3Fh (R/W): + bit 0 Bit 8 of the Horizontal Total (3d4h index 0) + 2 Bit 8 of the Horizontal Blank Start (3d4h index 3) + 4 Bit 8 of the Horizontal Retrace Start (3d4h index 4) + 7 Bit 8 of the CRTC offset register (3d4h index 13h). + */ + // The only unimplemented one is bit 7 + et4k.store_3d4_3f = val; + // Abusing s3 ex_hor_overflow field which very similar. This is + // to be cleaned up later + if (((val ^ VGA.vga.s3.ex_hor_overflow) & 3)!=0) { + VGA.vga.s3.ex_hor_overflow=(short)(val&0x15); + VGA.VGA_StartResize(); + } else VGA.vga.s3.ex_hor_overflow=(short)(val&0x15); + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:CRTC:ET4K:Write to illegal index "+Integer.toString(reg,16)); + break; + } + }; - // 3d4h index 32h - RAS/CAS Configuration (R/W) - // No effect on emulation. Should not be written by software. + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3d5_et4k = (reg, iolen) -> { + if (!et4k.extensionsEnabled && reg!=0x33) + return 0x0; + switch(reg) { + case 0x31: + return et4k.store_3d4_31; case 0x32: - et4k.store_3d4_32 = val; - break; + return et4k.store_3d4_32; case 0x33: - // 3d4 index 33h (R/W): Extended start Address - // 0-1 Display Start Address bits 16-17 - // 2-3 Cursor start address bits 16-17 - // Used by standard Tseng ID scheme - et4k.store_3d4_33 = val; - VGA.vga.config.display_start = (VGA.vga.config.display_start & 0xffff) | ((val & 0x03)<<16); - VGA.vga.config.cursor_start = (VGA.vga.config.cursor_start & 0xffff) | ((val & 0x0c)<<14); - break; - - /* - 3d4h index 34h (R/W): 6845 Compatibility Control Register - bit 0 Enable CS0 (alternate clock timing) - 1 Clock Select bit 2. Bits 0-1 in 3C2h bits 2-3, bits 3-4 are in 3d4h - index 31h bits 6-7 - 2 Tristate ET4000 bus and color outputs if set - 3 Video Subsystem Enable Register at 46E8h if set, at 3C3h if clear. - 4 Enable Translation ROM for reading CRTC and MISCOUT if set - 5 Enable Translation ROM for writing CRTC and MISCOUT if set - 6 Enable double scan in AT&T compatibility mode if set - 7 Enable 6845 compatibility if set - */ - // TODO: Bit 6 may have effect on emulation + return et4k.store_3d4_33; case 0x34: - et4k.store_3d4_34 = val; - break; + return et4k.store_3d4_34; case 0x35: - /* - 3d4h index 35h (R/W): Overflow High - bit 0 Vertical Blank Start Bit 10 (3d4h index 15h). - 1 Vertical Total Bit 10 (3d4h index 6). - 2 Vertical Display End Bit 10 (3d4h index 12h). - 3 Vertical Sync Start Bit 10 (3d4h index 10h). - 4 Line Compare Bit 10 (3d4h index 18h). - 5 Gen-Lock Enabled if set (External sync) - 6 (4000) Read/Modify/Write Enabled if set. Currently not implemented. - 7 Vertical interlace if set. The Vertical timing registers are - programmed as if the mode was non-interlaced!! - */ - et4k.store_3d4_35 = val; - VGA.vga.config.line_compare = (VGA.vga.config.line_compare & 0x3ff) | ((val&0x10)<<6); - // Abusing s3 ex_ver_overflow field. This is to be cleaned up later. - { - /*Bit8u*/int s3val = - ((val & 0x01) << 2) | // vbstart - ((val & 0x02) >> 1) | // vtotal - ((val & 0x04) >> 1) | // vdispend - ((val & 0x08) << 1) | // vsyncstart (?) - ((val & 0x10) << 2); // linecomp - if (((s3val ^ VGA.vga.s3.ex_ver_overflow) & 0x3)!=0) { - VGA.vga.s3.ex_ver_overflow=(short)s3val; - VGA.VGA_StartResize(); - } else VGA.vga.s3.ex_ver_overflow=(short)s3val; - } - break; - - // 3d4h index 36h - Video System Configuration 1 (R/W) - // VGADOC provides a lot of info on this register, Ferraro has significantly less detail. - // This is unlikely to be used by any games. Bit 4 switches chipset into linear mode - - // that may be useful in some cases if there is any software actually using it. - // TODO (not near future): support linear addressing + return et4k.store_3d4_35; case 0x36: - et4k.store_3d4_34 = val; - break; - - // 3d4h index 37 - Video System Configuration 2 (R/W) - // Bits 0,1, and 3 provides information about memory size: - // 0-1 Bus width (1: 8 bit, 2: 16 bit, 3: 32 bit) - // 3 Size of RAM chips (0: 64Kx, 1: 256Kx) - // Other bits have no effect on emulation. + return et4k.store_3d4_36; case 0x37: - if (val != et4k.store_3d4_37) { - et4k.store_3d4_37 = val; - VGA.vga.vmemwrap = ((64*1024)<<((val&8)>>2))<<((val&3)-1); - VGA_memory.VGA_SetupHandlers(); - } - break; - + return et4k.store_3d4_37; case 0x3f: - /* - 3d4h index 3Fh (R/W): - bit 0 Bit 8 of the Horizontal Total (3d4h index 0) - 2 Bit 8 of the Horizontal Blank Start (3d4h index 3) - 4 Bit 8 of the Horizontal Retrace Start (3d4h index 4) - 7 Bit 8 of the CRTC offset register (3d4h index 13h). - */ - // The only unimplemented one is bit 7 - et4k.store_3d4_3f = val; - // Abusing s3 ex_hor_overflow field which very similar. This is - // to be cleaned up later - if (((val ^ VGA.vga.s3.ex_hor_overflow) & 3)!=0) { - VGA.vga.s3.ex_hor_overflow=(short)(val&0x15); - VGA.VGA_StartResize(); - } else VGA.vga.s3.ex_hor_overflow=(short)(val&0x15); - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC, LogSeverities.LOG_NORMAL,"VGA:CRTC:ET4K:Write to illegal index "+Integer.toString(reg,16)); - break; - } + return et4k.store_3d4_3f; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:ET4K:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; - static private VGA.tReadPort read_p3d5_et4k = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - if (!et4k.extensionsEnabled && reg!=0x33) - return 0x0; - switch(reg) { - case 0x31: - return et4k.store_3d4_31; - case 0x32: - return et4k.store_3d4_32; - case 0x33: - return et4k.store_3d4_33; - case 0x34: - return et4k.store_3d4_34; - case 0x35: - return et4k.store_3d4_35; - case 0x36: - return et4k.store_3d4_36; - case 0x37: - return et4k.store_3d4_37; - case 0x3f: - return et4k.store_3d4_3f; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:ET4K:Read from illegal index "+Integer.toString(reg,16)); - break; - } - return 0x0; + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3c5_et4k = (reg, val, iolen) -> { + switch(reg) { + /* + 3C4h index 6 (R/W): TS State Control + bit 1-2 Font Width Select in dots/character + If 3C4h index 4 bit 0 clear: + 0: 9 dots, 1: 10 dots, 2: 12 dots, 3: 6 dots + If 3C4h index 5 bit 0 set: + 0: 8 dots, 1: 11 dots, 2: 7 dots, 3: 16 dots + Only valid if 3d4h index 34h bit 3 set. + */ + // TODO: Figure out if this has any practical use + case 0x06: + et4k.store_3c4_06 = val; + break; + // 3C4h index 7 (R/W): TS Auxiliary Mode + // Unlikely to be used by games (things like ROM enable/disable and emulation of VGA vs EGA) + case 0x07: + et4k.store_3c4_07 = val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET4K:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - static private VGA.tWritePort write_p3c5_et4k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - switch(reg) { - /* - 3C4h index 6 (R/W): TS State Control - bit 1-2 Font Width Select in dots/character - If 3C4h index 4 bit 0 clear: - 0: 9 dots, 1: 10 dots, 2: 12 dots, 3: 6 dots - If 3C4h index 5 bit 0 set: - 0: 8 dots, 1: 11 dots, 2: 7 dots, 3: 16 dots - Only valid if 3d4h index 34h bit 3 set. - */ - // TODO: Figure out if this has any practical use + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3c5_et4k = (reg, iolen) -> { + switch(reg) { case 0x06: - et4k.store_3c4_06 = val; - break; - // 3C4h index 7 (R/W): TS Auxiliary Mode - // Unlikely to be used by games (things like ROM enable/disable and emulation of VGA vs EGA) + return et4k.store_3c4_06; case 0x07: - et4k.store_3c4_07 = val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET4K:Write to illegal index "+Integer.toString(reg,16)); - break; - } - } - }; - - static private VGA.tReadPort read_p3c5_et4k = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - switch(reg) { - case 0x06: - return et4k.store_3c4_06; - case 0x07: - return et4k.store_3c4_07; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET4K:Read from illegal index "+Integer.toString(reg,16)); - break; - } - return 0x0; + return et4k.store_3c4_07; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET4K:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; /* @@ -242,82 +238,76 @@ public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { bit 0-3 64k Write bank number (0..15) 4-7 64k Read bank number (0..15) */ - static private IoHandler.IO_WriteHandler io_write_p3cd_et4k = new IoHandler.IO_WriteHandler() { + static private final IoHandler.IO_WriteHandler io_write_p3cd_et4k = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { write_p3cd_et4k.call(port, val, iolen); } }; - static private VGA.tWritePort write_p3cd_et4k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - VGA.vga.svga.bank_write = (short)(val & 0x0f); - VGA.vga.svga.bank_read = (short)((val>>4) & 0x0f); - VGA_memory.VGA_SetupHandlers(); - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3cd_et4k = (reg, val, iolen) -> { + VGA.vga.svga.bank_write = (short)(val & 0x0f); + VGA.vga.svga.bank_read = (short)((val>>4) & 0x0f); + VGA_memory.VGA_SetupHandlers(); }; - static private IoHandler.IO_ReadHandler read_p3cd_et4k = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return (VGA.vga.svga.bank_read<<4)|VGA.vga.svga.bank_write; + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3cd_et4k = (port, iolen) -> (VGA.vga.svga.bank_read<<4)|VGA.vga.svga.bank_write; + + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3c0_et4k = (reg, val, iolen) -> { + switch(reg) { + // 3c0 index 16h: ATC Miscellaneous + // VGADOC provides a lot of information, Ferarro documents only two bits + // and even those incompletely. The register is used as part of identification + // scheme. + // Unlikely to be used by any games but double timing may be useful. + // TODO: Figure out if this has any practical use + case 0x16: + et4k.store_3c0_16 = val; + break; + /* + 3C0h index 17h (R/W): Miscellaneous 1 + bit 7 If set protects the internal palette ram and redefines the attribute + bits as follows: + Monochrome: + bit 0-2 Select font 0-7 + 3 If set selects blinking + 4 If set selects underline + 5 If set prevents the character from being displayed + 6 If set displays the character at half intensity + 7 If set selects reverse video + Color: + bit 0-1 Selects font 0-3 + 2 Foreground Blue + 3 Foreground Green + 4 Foreground Red + 5 Background Blue + 6 Background Green + 7 Background Red + */ + // TODO: Figure out if this has any practical use + case 0x17: + et4k.store_3c0_17 = val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET4K:Write to illegal index "+Integer.toString(reg, 16)); + break; } }; - static private VGA.tWritePort write_p3c0_et4k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - switch(reg) { - // 3c0 index 16h: ATC Miscellaneous - // VGADOC provides a lot of information, Ferarro documents only two bits - // and even those incompletely. The register is used as part of identification - // scheme. - // Unlikely to be used by any games but double timing may be useful. - // TODO: Figure out if this has any practical use + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3c1_et4k = (reg, iolen) -> { + switch(reg) { case 0x16: - et4k.store_3c0_16 = val; - break; - /* - 3C0h index 17h (R/W): Miscellaneous 1 - bit 7 If set protects the internal palette ram and redefines the attribute - bits as follows: - Monochrome: - bit 0-2 Select font 0-7 - 3 If set selects blinking - 4 If set selects underline - 5 If set prevents the character from being displayed - 6 If set displays the character at half intensity - 7 If set selects reverse video - Color: - bit 0-1 Selects font 0-3 - 2 Foreground Blue - 3 Foreground Green - 4 Foreground Red - 5 Background Blue - 6 Background Green - 7 Background Red - */ - // TODO: Figure out if this has any practical use + return et4k.store_3c0_16; case 0x17: - et4k.store_3c0_17 = val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET4K:Write to illegal index "+Integer.toString(reg, 16)); - break; - } - } - }; - - static private VGA.tReadPort read_p3c1_et4k = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - switch(reg) { - case 0x16: - return et4k.store_3c0_16; - case 0x17: - return et4k.store_3c0_17; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET4K:Read from illegal index "+Integer.toString(reg,16)); - break; - } - return 0x0; + return et4k.store_3c0_17; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET4K:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; /* @@ -342,105 +332,98 @@ static private void set_clock_index_et4k(/*Bitu*/int index) { et4k.store_3d4_31 = (et4k.store_3d4_31&~0xc0)|((index&8)<<3); // (index&0x18) if 32 clock frequencies are to be supported } - private static VGA.tFinishSetMode FinishSetMode_ET4K = new VGA.tFinishSetMode() { - public void call(/*Bitu*/int crtc_base, VGA.VGA_ModeExtraData modeData) { - et4k.biosMode = modeData.modeNo; - - IoHandler.IO_Write(0x3cd, 0x00); // both banks to 0 - - // Reinterpret hor_overflow. Curiously, three bits out of four are - // in the same places. Input has hdispend (not supported), output - // has CRTC offset (also not supported) - /*Bit8u*/int et4k_hor_overflow = - (modeData.hor_overflow & 0x01) | - (modeData.hor_overflow & 0x04) | - (modeData.hor_overflow & 0x10); - IoHandler.IO_Write(crtc_base,0x3f);IoHandler.IO_Write(crtc_base+1,et4k_hor_overflow); - - // Reinterpret ver_overflow - /*Bit8u*/int et4k_ver_overflow = - ((modeData.ver_overflow & 0x01) << 1) | // vtotal10 - ((modeData.ver_overflow & 0x02) << 1) | // vdispend10 - ((modeData.ver_overflow & 0x04) >> 2) | // vbstart10 - ((modeData.ver_overflow & 0x10) >> 1) | // vretrace10 (tseng has vsync start?) - ((modeData.ver_overflow & 0x40) >> 2); // line_compare - IoHandler.IO_Write(crtc_base,0x35);IoHandler.IO_Write(crtc_base+1,et4k_ver_overflow); - - // Clear remaining ext CRTC registers - IoHandler.IO_Write(crtc_base,0x31);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x32);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x33);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x34);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x36);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x37);IoHandler.IO_Write(crtc_base+1,0x0c|(VGA.vga.vmemsize==1024*1024?3:VGA.vga.vmemsize==512*1024?2:1)); - // Clear ext SEQ - IoHandler.IO_Write(0x3c4,0x06);IoHandler.IO_Write(0x3c5,0); - IoHandler.IO_Write(0x3c4,0x07);IoHandler.IO_Write(0x3c5,0); - // Clear ext ATTR - IoHandler.IO_Write(0x3c0,0x16);IoHandler.IO_Write(0x3c0,0); - IoHandler.IO_Write(0x3c0,0x17);IoHandler.IO_Write(0x3c0,0); - - // Select SVGA clock to get close to 60Hz (not particularly clean implementation) - if (modeData.modeNo > 0x13) { - /*Bitu*/int target = modeData.vtotal*8*modeData.htotal*60; - /*Bitu*/int best = 1; - /*Bits*/int dist = 100000000; - for (/*Bitu*/int i=0; i<16; i++) { - /*Bits*/int cdiff=Math.abs((/*Bits*/int)(target-et4k.clockFreq[i])); - if (cdiff < dist) { - best = i; - dist = cdiff; - } + /*Bitu*/ + private static final VGA.tFinishSetMode FinishSetMode_ET4K = (crtc_base, modeData) -> { + et4k.biosMode = modeData.modeNo; + + IoHandler.IO_Write(0x3cd, 0x00); // both banks to 0 + + // Reinterpret hor_overflow. Curiously, three bits out of four are + // in the same places. Input has hdispend (not supported), output + // has CRTC offset (also not supported) + /*Bit8u*/int et4k_hor_overflow = + (modeData.hor_overflow & 0x01) | + (modeData.hor_overflow & 0x04) | + (modeData.hor_overflow & 0x10); + IoHandler.IO_Write(crtc_base,0x3f);IoHandler.IO_Write(crtc_base+1,et4k_hor_overflow); + + // Reinterpret ver_overflow + /*Bit8u*/int et4k_ver_overflow = + ((modeData.ver_overflow & 0x01) << 1) | // vtotal10 + ((modeData.ver_overflow & 0x02) << 1) | // vdispend10 + ((modeData.ver_overflow & 0x04) >> 2) | // vbstart10 + ((modeData.ver_overflow & 0x10) >> 1) | // vretrace10 (tseng has vsync start?) + ((modeData.ver_overflow & 0x40) >> 2); // line_compare + IoHandler.IO_Write(crtc_base,0x35);IoHandler.IO_Write(crtc_base+1,et4k_ver_overflow); + + // Clear remaining ext CRTC registers + IoHandler.IO_Write(crtc_base,0x31);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x32);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x33);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x34);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x36);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x37);IoHandler.IO_Write(crtc_base+1,0x0c|(VGA.vga.vmemsize==1024*1024?3:VGA.vga.vmemsize==512*1024?2:1)); + // Clear ext SEQ + IoHandler.IO_Write(0x3c4,0x06);IoHandler.IO_Write(0x3c5,0); + IoHandler.IO_Write(0x3c4,0x07);IoHandler.IO_Write(0x3c5,0); + // Clear ext ATTR + IoHandler.IO_Write(0x3c0,0x16);IoHandler.IO_Write(0x3c0,0); + IoHandler.IO_Write(0x3c0,0x17);IoHandler.IO_Write(0x3c0,0); + + // Select SVGA clock to get close to 60Hz (not particularly clean implementation) + if (modeData.modeNo > 0x13) { + /*Bitu*/int target = modeData.vtotal*8*modeData.htotal*60; + /*Bitu*/int best = 1; + /*Bits*/int dist = 100000000; + for (/*Bitu*/int i=0; i<16; i++) { + /*Bits*//*Bits*/ + int cdiff=Math.abs(target-et4k.clockFreq[i]); + if (cdiff < dist) { + best = i; + dist = cdiff; } - set_clock_index_et4k(best); } + set_clock_index_et4k(best); + } - if(VGA.svga.determine_mode!=null) - VGA.svga.determine_mode.call(); + if(VGA.svga.determine_mode!=null) + VGA.svga.determine_mode.call(); - // Verified (on real hardware and in a few games): Tseng ET4000 used chain4 implementation - // different from standard VGA. It was also not limited to 64K in regular mode 13h. - VGA.vga.config.compatible_chain4 = false; - VGA.vga.vmemwrap = VGA.vga.vmemsize; + // Verified (on real hardware and in a few games): Tseng ET4000 used chain4 implementation + // different from standard VGA. It was also not limited to 64K in regular mode 13h. + VGA.vga.config.compatible_chain4 = false; + VGA.vga.vmemwrap = VGA.vga.vmemsize; - VGA_memory.VGA_SetupHandlers(); - } + VGA_memory.VGA_SetupHandlers(); }; - static private VGA.tDetermineMode DetermineMode_ET4K = new VGA.tDetermineMode() { - public void call() { - // Close replica from the base implementation. It will stay here - // until I figure a way to either distinguish M_VGA and M_LIN8 or - // merge them. - if ((VGA.vga.attr.mode_control & 1)!=0) { - if ((VGA.vga.gfx.mode & 0x40)!=0) VGA.VGA_SetMode((et4k.biosMode<=0x13)?VGA.M_VGA:VGA.M_LIN8); // Ugly... - else if ((VGA.vga.gfx.mode & 0x20)!=0) VGA.VGA_SetMode(VGA.M_CGA4); - else if ((VGA.vga.gfx.miscellaneous & 0x0c)==0x0c) VGA.VGA_SetMode(VGA.M_CGA2); - else VGA.VGA_SetMode((et4k.biosMode<=0x13)?VGA.M_EGA:VGA.M_LIN4); - } else { - VGA.VGA_SetMode(VGA.M_TEXT); - } + static private final VGA.tDetermineMode DetermineMode_ET4K = () -> { + // Close replica from the base implementation. It will stay here + // until I figure a way to either distinguish M_VGA and M_LIN8 or + // merge them. + if ((VGA.vga.attr.mode_control & 1)!=0) { + if ((VGA.vga.gfx.mode & 0x40)!=0) VGA.VGA_SetMode((et4k.biosMode<=0x13)?VGA.M_VGA:VGA.M_LIN8); // Ugly... + else if ((VGA.vga.gfx.mode & 0x20)!=0) VGA.VGA_SetMode(VGA.M_CGA4); + else if ((VGA.vga.gfx.miscellaneous & 0x0c)==0x0c) VGA.VGA_SetMode(VGA.M_CGA2); + else VGA.VGA_SetMode((et4k.biosMode<=0x13)?VGA.M_EGA:VGA.M_LIN4); + } else { + VGA.VGA_SetMode(VGA.M_TEXT); } }; - static private VGA.tSetClock SetClock_ET4K = new VGA.tSetClock() { - public void call(/*Bitu*/int which,/*Bitu*/int target) { - et4k.clockFreq[which]=1000*target; - VGA.VGA_StartResize(); - } + /*Bitu*//*Bitu*/ + static private final VGA.tSetClock SetClock_ET4K = (which, target) -> { + et4k.clockFreq[which]=1000*target; + VGA.VGA_StartResize(); }; - static private VGA.tGetClock GetClock_ET4K = new VGA.tGetClock() { - public /*Bitu*/int call() { - return et4k.clockFreq[get_clock_index_et4k()]; - } - }; + /*Bitu*/ + static private final VGA.tGetClock GetClock_ET4K = () -> et4k.clockFreq[get_clock_index_et4k()]; - static private VGA.tAcceptsMode AcceptsMode_ET4K = new VGA.tAcceptsMode() { - public boolean call(/*Bitu*/int modeNo) { - return Int10_modes.VideoModeMemSize(modeNo) < VGA.vga.vmemsize; - // return mode != 0x3d; - } + /*Bitu*/ + static private final VGA.tAcceptsMode AcceptsMode_ET4K = modeNo -> { + return Int10_modes.VideoModeMemSize(modeNo) < VGA.vga.vmemsize; + // return mode != 0x3d; }; static public void SVGA_Setup_TsengET4K() { @@ -490,7 +473,7 @@ else if (VGA.vga.vmemsize < 1024*1024) VGA.vga.vmemsize = 1024*1024; // Tseng ROM signature - /*PhysPt*/int rom_base=(int)Memory.PhysMake(0xc000,0); + /*PhysPt*/int rom_base= Memory.PhysMake(0xc000,0); Memory.phys_writeb(rom_base+0x0075,' '); Memory.phys_writeb(rom_base+0x0076,'T'); Memory.phys_writeb(rom_base+0x0077,'s'); @@ -522,11 +505,11 @@ private static class SVGA_ET3K_DATA { public /*Bitu*/int store_3c4_06; public /*Bitu*/int store_3c4_07; - public /*Bitu*/int[] clockFreq = new int[8]; + public final /*Bitu*/int[] clockFreq = new int[8]; public /*Bitu*/int biosMode; } - static private SVGA_ET3K_DATA et3k = new SVGA_ET3K_DATA(); + static private final SVGA_ET3K_DATA et3k = new SVGA_ET3K_DATA(); // #define STORE_ET3K(port, index) \ // case 0x##index: \ @@ -537,218 +520,208 @@ private static class SVGA_ET3K_DATA { // case 0x##index: \ // return et3k.store_##port##_##index; - static private VGA.tWritePort write_p3d5_et3k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - switch(reg) { - // 3d4 index 1bh-21h: Hardware zoom control registers - // I am not sure if there was a piece of software that used these. - // Not implemented and will probably stay this way. - case 0x1b: - et3k.store_3d4_1b = val; - break; - case 0x1c: - et3k.store_3d4_1c = val; - break; - case 0x1d: - et3k.store_3d4_1d = val; - break; - case 0x1e: - et3k.store_3d4_1e = val; - break; - case 0x1f: - et3k.store_3d4_1f = val; - break; - case 0x20: - et3k.store_3d4_20 = val; - break; - case 0x21: - et3k.store_3d4_21 = val; - break; - case 0x23: - /* - 3d4h index 23h (R/W): Extended start ET3000 - bit 0 Cursor start address bit 16 - 1 Display start address bit 16 - 2 Zoom start address bit 16 - 7 If set memory address 8 is output on the MBSL pin (allowing access to - 1MB), if clear the blanking signal is output. - */ - // Only /*Bits*/int 1 and 2 are supported. Bit 2 is related to hardware zoom, bit 7 is too obscure to be useful - et3k.store_3d4_23 = val; - VGA.vga.config.display_start = (VGA.vga.config.display_start & 0xffff) | ((val & 0x02)<<15); - VGA.vga.config.cursor_start = (VGA.vga.config.cursor_start & 0xffff) | ((val & 0x01)<<16); - break; - - - /* - 3d4h index 24h (R/W): Compatibility Control - bit 0 Enable Clock Translate if set - 1 Clock Select bit 2. Bits 0-1 are in 3C2h/3CCh. - 2 Enable tri-state for all output pins if set - 3 Enable input A8 of 1MB DRAMs from the INTL output if set - 4 Reserved - 5 Enable external ROM CRTC translation if set - 6 Enable Double Scan and Underline Attribute if set - 7 Enable 6845 compatibility if set. - */ - // TODO: Some of these may be worth implementing. - case 0x24: - et3k.store_3d4_24 = val; - break; - case 0x25: - /* - 3d4h index 25h (R/W): Overflow High - bit 0 Vertical Blank Start bit 10 - 1 Vertical Total Start bit 10 - 2 Vertical Display End bit 10 - 3 Vertical Sync Start bit 10 - 4 Line Compare bit 10 - 5-6 Reserved - 7 Vertical Interlace if set - */ - et3k.store_3d4_25 = val; - VGA.vga.config.line_compare = (VGA.vga.config.line_compare & 0x3ff) | ((val&0x10)<<6); - // Abusing s3 ex_ver_overflow field. This is to be cleaned up later. - { - /*Bit8u*/int s3val = - ((val & 0x01) << 2) | // vbstart - ((val & 0x02) >> 1) | // vtotal - ((val & 0x04) >> 1) | // vdispend - ((val & 0x08) << 1) | // vsyncstart (?) - ((val & 0x10) << 2); // linecomp - if (((s3val ^ VGA.vga.s3.ex_ver_overflow) & 0x3)!=0) { - VGA.vga.s3.ex_ver_overflow=(short)s3val; - VGA.VGA_StartResize(); - } else VGA.vga.s3.ex_ver_overflow=(short)s3val; - } - break; - - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:ET3K:Write to illegal index "+Integer.toString(reg,16)); - break; + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3d5_et3k = (reg, val, iolen) -> { + switch(reg) { + // 3d4 index 1bh-21h: Hardware zoom control registers + // I am not sure if there was a piece of software that used these. + // Not implemented and will probably stay this way. + case 0x1b: + et3k.store_3d4_1b = val; + break; + case 0x1c: + et3k.store_3d4_1c = val; + break; + case 0x1d: + et3k.store_3d4_1d = val; + break; + case 0x1e: + et3k.store_3d4_1e = val; + break; + case 0x1f: + et3k.store_3d4_1f = val; + break; + case 0x20: + et3k.store_3d4_20 = val; + break; + case 0x21: + et3k.store_3d4_21 = val; + break; + case 0x23: + /* + 3d4h index 23h (R/W): Extended start ET3000 + bit 0 Cursor start address bit 16 + 1 Display start address bit 16 + 2 Zoom start address bit 16 + 7 If set memory address 8 is output on the MBSL pin (allowing access to + 1MB), if clear the blanking signal is output. + */ + // Only /*Bits*/int 1 and 2 are supported. Bit 2 is related to hardware zoom, bit 7 is too obscure to be useful + et3k.store_3d4_23 = val; + VGA.vga.config.display_start = (VGA.vga.config.display_start & 0xffff) | ((val & 0x02)<<15); + VGA.vga.config.cursor_start = (VGA.vga.config.cursor_start & 0xffff) | ((val & 0x01)<<16); + break; + + + /* + 3d4h index 24h (R/W): Compatibility Control + bit 0 Enable Clock Translate if set + 1 Clock Select bit 2. Bits 0-1 are in 3C2h/3CCh. + 2 Enable tri-state for all output pins if set + 3 Enable input A8 of 1MB DRAMs from the INTL output if set + 4 Reserved + 5 Enable external ROM CRTC translation if set + 6 Enable Double Scan and Underline Attribute if set + 7 Enable 6845 compatibility if set. + */ + // TODO: Some of these may be worth implementing. + case 0x24: + et3k.store_3d4_24 = val; + break; + case 0x25: + /* + 3d4h index 25h (R/W): Overflow High + bit 0 Vertical Blank Start bit 10 + 1 Vertical Total Start bit 10 + 2 Vertical Display End bit 10 + 3 Vertical Sync Start bit 10 + 4 Line Compare bit 10 + 5-6 Reserved + 7 Vertical Interlace if set + */ + et3k.store_3d4_25 = val; + VGA.vga.config.line_compare = (VGA.vga.config.line_compare & 0x3ff) | ((val&0x10)<<6); + // Abusing s3 ex_ver_overflow field. This is to be cleaned up later. + { + /*Bit8u*/int s3val = + ((val & 0x01) << 2) | // vbstart + ((val & 0x02) >> 1) | // vtotal + ((val & 0x04) >> 1) | // vdispend + ((val & 0x08) << 1) | // vsyncstart (?) + ((val & 0x10) << 2); // linecomp + if (((s3val ^ VGA.vga.s3.ex_ver_overflow) & 0x3)!=0) { + VGA.vga.s3.ex_ver_overflow=(short)s3val; + VGA.VGA_StartResize(); + } else VGA.vga.s3.ex_ver_overflow=(short)s3val; } - } - }; + break; - static private VGA.tReadPort read_p3d5_et3k = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - switch(reg) { - case 0x1b: - return et3k.store_3d4_1b; - case 0x1c: - return et3k.store_3d4_1c; - case 0x1d: - return et3k.store_3d4_1d; - case 0x1e: - return et3k.store_3d4_1e; - case 0x1f: - return et3k.store_3d4_1f; - case 0x20: - return et3k.store_3d4_20; - case 0x21: - return et3k.store_3d4_21; - case 0x23: - return et3k.store_3d4_23; - case 0x24: - return et3k.store_3d4_24; - case 0x25: - return et3k.store_3d4_25; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:ET3K:Read from illegal index "+Integer.toString(reg,16)); - break; - } - return 0x0; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:ET3K:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - static private VGA.tWritePort write_p3c5_et3k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - switch(reg) { - // Both registers deal mostly with hardware zoom which is not implemented. Other /*Bits*/int - // seem to be useless for emulation with the exception of index 7 bit 4 (font select) - case 0x06: - et3k.store_3c4_06 = val; - break; - case 0x07: - et3k.store_3c4_07 = val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET3K:Write to illegal index "+Integer.toString(reg,16)); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3d5_et3k = (reg, iolen) -> { + switch(reg) { + case 0x1b: + return et3k.store_3d4_1b; + case 0x1c: + return et3k.store_3d4_1c; + case 0x1d: + return et3k.store_3d4_1d; + case 0x1e: + return et3k.store_3d4_1e; + case 0x1f: + return et3k.store_3d4_1f; + case 0x20: + return et3k.store_3d4_20; + case 0x21: + return et3k.store_3d4_21; + case 0x23: + return et3k.store_3d4_23; + case 0x24: + return et3k.store_3d4_24; + case 0x25: + return et3k.store_3d4_25; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:CRTC:ET3K:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; - static private VGA.tReadPort read_p3c5_et3k = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - switch(reg) { - case 0x06: - return et3k.store_3c4_06; - case 0x07: - return et3k.store_3c4_07; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET3K:Read from illegal index "+Integer.toString(reg,16)); - break; - } - return 0x0; + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3c5_et3k = (reg, val, iolen) -> { + switch(reg) { + // Both registers deal mostly with hardware zoom which is not implemented. Other /*Bits*/int + // seem to be useless for emulation with the exception of index 7 bit 4 (font select) + case 0x06: + et3k.store_3c4_06 = val; + break; + case 0x07: + et3k.store_3c4_07 = val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET3K:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - /* - 3CDh (R/W): Segment Select - bit 0-2 64k Write bank number - 3-5 64k Read bank number - 6-7 Segment Configuration. - 0 128K segments - 1 64K segments - 2 1M linear memory - NOTES: 1M linear memory is not supported - */ - static private IoHandler.IO_WriteHandler write_p3cd_et3k = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - VGA.vga.svga.bank_write = (short)(val & 0x07); - VGA.vga.svga.bank_read = (short)((val>>3) & 0x07); - VGA.vga.svga.bank_size = (val&0x40)!=0?64*1024:128*1024; - VGA_memory.VGA_SetupHandlers(); + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3c5_et3k = (reg, iolen) -> { + switch(reg) { + case 0x06: + return et3k.store_3c4_06; + case 0x07: + return et3k.store_3c4_07; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:SEQ:ET3K:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; - static private IoHandler.IO_ReadHandler read_p3cd_et3k = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - return (VGA.vga.svga.bank_read<<3)|VGA.vga.svga.bank_write|((VGA.vga.svga.bank_size==128*1024)?0:0x40); - } + /*Bitu*//*Bitu*//*Bitu*/ + /* + 3CDh (R/W): Segment Select + bit 0-2 64k Write bank number + 3-5 64k Read bank number + 6-7 Segment Configuration. + 0 128K segments + 1 64K segments + 2 1M linear memory + NOTES: 1M linear memory is not supported + */ + static private final IoHandler.IO_WriteHandler write_p3cd_et3k = (port, val, iolen) -> { + VGA.vga.svga.bank_write = (short)(val & 0x07); + VGA.vga.svga.bank_read = (short)((val>>3) & 0x07); + VGA.vga.svga.bank_size = (val&0x40)!=0?64*1024:128*1024; + VGA_memory.VGA_SetupHandlers(); }; - static private VGA.tWritePort write_p3c0_et3k = new VGA.tWritePort() { - public void call(/*Bitu*/int reg,/*Bitu*/int val,/*Bitu*/int iolen) { - // See ET4K notes. - switch(reg) { - case 0x16: - et3k.store_3c0_16 = val; - break; - case 0x17: - et3k.store_3c0_17 = val; - break; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET3K:Write to illegal index "+Integer.toString(reg,16)); - break; - } + /*Bitu*//*Bitu*//*Bitu*/ + static private final IoHandler.IO_ReadHandler read_p3cd_et3k = (port, iolen) -> (VGA.vga.svga.bank_read<<3)|VGA.vga.svga.bank_write|((VGA.vga.svga.bank_size==128*1024)?0:0x40); + + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tWritePort write_p3c0_et3k = (reg, val, iolen) -> { + // See ET4K notes. + switch(reg) { + case 0x16: + et3k.store_3c0_16 = val; + break; + case 0x17: + et3k.store_3c0_17 = val; + break; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET3K:Write to illegal index "+Integer.toString(reg,16)); + break; } }; - static private VGA.tReadPort read_p3c1_et3k = new VGA.tReadPort() { - public /*Bitu*/int call(/*Bitu*/int reg,/*Bitu*/int iolen) { - switch(reg) { - case 0x16: - return et3k.store_3c0_16; - case 0x17: - return et3k.store_3c0_17; - default: - if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET3K:Read from illegal index "+Integer.toString(reg,16)); - break; - } - return 0x0; + /*Bitu*//*Bitu*//*Bitu*/ + static private final VGA.tReadPort read_p3c1_et3k = (reg, iolen) -> { + switch(reg) { + case 0x16: + return et3k.store_3c0_16; + case 0x17: + return et3k.store_3c0_17; + default: + if (Log.level<=LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_VGAMISC,LogSeverities.LOG_NORMAL,"VGA:ATTR:ET3K:Read from illegal index "+Integer.toString(reg,16)); + break; } + return 0x0; }; /* @@ -774,95 +747,86 @@ static private void set_clock_index_et3k(/*Bitu*/int index) { et3k.store_3d4_24 = (et3k.store_3d4_24&~0x02)|((index&4)>>1); } - static private VGA.tFinishSetMode FinishSetMode_ET3K = new VGA.tFinishSetMode() { - public void call(/*Bitu*/int crtc_base, VGA.VGA_ModeExtraData modeData) { - et3k.biosMode = modeData.modeNo; - - IoHandler.IO_Write(0x3cd, 0x40); // both banks to 0, 64K bank size - - // Tseng ET3K does not have horizontal overflow /*Bits*/int - // Reinterpret ver_overflow - /*Bit8u*/int et4k_ver_overflow = - ((modeData.ver_overflow & 0x01) << 1) | // vtotal10 - ((modeData.ver_overflow & 0x02) << 1) | // vdispend10 - ((modeData.ver_overflow & 0x04) >> 2) | // vbstart10 - ((modeData.ver_overflow & 0x10) >> 1) | // vretrace10 (tseng has vsync start?) - ((modeData.ver_overflow & 0x40) >> 2); // line_compare - IoHandler.IO_Write(crtc_base,0x25);IoHandler.IO_Write(crtc_base+1,et4k_ver_overflow); - - // Clear remaining ext CRTC registers - for (/*Bitu*/int i=0x16; i<=0x21; i++) - IoHandler.IO_Write(crtc_base,i);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x23);IoHandler.IO_Write(crtc_base+1,0); - IoHandler.IO_Write(crtc_base,0x24);IoHandler.IO_Write(crtc_base+1,0); - // Clear ext SEQ - IoHandler.IO_Write(0x3c4,0x06);IoHandler.IO_Write(0x3c5,0); - IoHandler.IO_Write(0x3c4,0x07);IoHandler.IO_Write(0x3c5,0x40); // 0 in this register breaks WHATVGA - // Clear ext ATTR - IoHandler.IO_Write(0x3c0,0x16);IoHandler.IO_Write(0x3c0,0); - IoHandler.IO_Write(0x3c0,0x17);IoHandler.IO_Write(0x3c0,0); - - // Select SVGA clock to get close to 60Hz (not particularly clean implementation) - if (modeData.modeNo > 0x13) { - /*Bitu*/int target = modeData.vtotal*8*modeData.htotal*60; - /*Bitu*/int best = 1; - /*Bits*/int dist = 100000000; - for (/*Bitu*/int i=0; i<8; i++) { - /*Bits*/int cdiff = Math.abs((/*Bits*/int)(target-et3k.clockFreq[i])); - if (cdiff < dist) { - best = i; - dist = cdiff; - } + /*Bitu*/ + static private final VGA.tFinishSetMode FinishSetMode_ET3K = (crtc_base, modeData) -> { + et3k.biosMode = modeData.modeNo; + + IoHandler.IO_Write(0x3cd, 0x40); // both banks to 0, 64K bank size + + // Tseng ET3K does not have horizontal overflow /*Bits*/int + // Reinterpret ver_overflow + /*Bit8u*/int et4k_ver_overflow = + ((modeData.ver_overflow & 0x01) << 1) | // vtotal10 + ((modeData.ver_overflow & 0x02) << 1) | // vdispend10 + ((modeData.ver_overflow & 0x04) >> 2) | // vbstart10 + ((modeData.ver_overflow & 0x10) >> 1) | // vretrace10 (tseng has vsync start?) + ((modeData.ver_overflow & 0x40) >> 2); // line_compare + IoHandler.IO_Write(crtc_base,0x25);IoHandler.IO_Write(crtc_base+1,et4k_ver_overflow); + + // Clear remaining ext CRTC registers + for (/*Bitu*/int i=0x16; i<=0x21; i++) + IoHandler.IO_Write(crtc_base,i);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x23);IoHandler.IO_Write(crtc_base+1,0); + IoHandler.IO_Write(crtc_base,0x24);IoHandler.IO_Write(crtc_base+1,0); + // Clear ext SEQ + IoHandler.IO_Write(0x3c4,0x06);IoHandler.IO_Write(0x3c5,0); + IoHandler.IO_Write(0x3c4,0x07);IoHandler.IO_Write(0x3c5,0x40); // 0 in this register breaks WHATVGA + // Clear ext ATTR + IoHandler.IO_Write(0x3c0,0x16);IoHandler.IO_Write(0x3c0,0); + IoHandler.IO_Write(0x3c0,0x17);IoHandler.IO_Write(0x3c0,0); + + // Select SVGA clock to get close to 60Hz (not particularly clean implementation) + if (modeData.modeNo > 0x13) { + /*Bitu*/int target = modeData.vtotal*8*modeData.htotal*60; + /*Bitu*/int best = 1; + /*Bits*/int dist = 100000000; + for (/*Bitu*/int i=0; i<8; i++) { + /*Bits*//*Bits*/ + int cdiff = Math.abs(target-et3k.clockFreq[i]); + if (cdiff < dist) { + best = i; + dist = cdiff; } - set_clock_index_et3k(best); } + set_clock_index_et3k(best); + } - if (VGA.svga.determine_mode!=null) - VGA.svga.determine_mode.call(); + if (VGA.svga.determine_mode!=null) + VGA.svga.determine_mode.call(); - // Verified on functioning (at last!) hardware: Tseng ET3000 is the same as ET4000 when - // it comes to chain4 architecture - VGA.vga.config.compatible_chain4 = false; - VGA.vga.vmemwrap = VGA.vga.vmemsize; + // Verified on functioning (at last!) hardware: Tseng ET3000 is the same as ET4000 when + // it comes to chain4 architecture + VGA.vga.config.compatible_chain4 = false; + VGA.vga.vmemwrap = VGA.vga.vmemsize; - VGA_memory.VGA_SetupHandlers(); - } + VGA_memory.VGA_SetupHandlers(); }; - static private VGA.tDetermineMode DetermineMode_ET3K = new VGA.tDetermineMode() { - public void call() { - // Close replica from the base implementation. It will stay here - // until I figure a way to either distinguish M_VGA and M_LIN8 or - // merge them. - if ((VGA.vga.attr.mode_control & 1)!=0) { - if ((VGA.vga.gfx.mode & 0x40)!=0) VGA.VGA_SetMode((et3k.biosMode<=0x13)?VGA.M_VGA:VGA.M_LIN8); // Ugly... - else if ((VGA.vga.gfx.mode & 0x20)!=0) VGA.VGA_SetMode(VGA.M_CGA4); - else if ((VGA.vga.gfx.miscellaneous & 0x0c)==0x0c) VGA.VGA_SetMode(VGA.M_CGA2); - else VGA.VGA_SetMode((et3k.biosMode<=0x13)?VGA.M_EGA:VGA.M_LIN4); - } else { - VGA.VGA_SetMode(VGA.M_TEXT); - } + static private final VGA.tDetermineMode DetermineMode_ET3K = () -> { + // Close replica from the base implementation. It will stay here + // until I figure a way to either distinguish M_VGA and M_LIN8 or + // merge them. + if ((VGA.vga.attr.mode_control & 1)!=0) { + if ((VGA.vga.gfx.mode & 0x40)!=0) VGA.VGA_SetMode((et3k.biosMode<=0x13)?VGA.M_VGA:VGA.M_LIN8); // Ugly... + else if ((VGA.vga.gfx.mode & 0x20)!=0) VGA.VGA_SetMode(VGA.M_CGA4); + else if ((VGA.vga.gfx.miscellaneous & 0x0c)==0x0c) VGA.VGA_SetMode(VGA.M_CGA2); + else VGA.VGA_SetMode((et3k.biosMode<=0x13)?VGA.M_EGA:VGA.M_LIN4); + } else { + VGA.VGA_SetMode(VGA.M_TEXT); } }; - static private VGA.tSetClock SetClock_ET3K = new VGA.tSetClock() { - public void call(/*Bitu*/int which,/*Bitu*/int target) { - et3k.clockFreq[which]=1000*target; - VGA.VGA_StartResize(); - } + /*Bitu*//*Bitu*/ + static private final VGA.tSetClock SetClock_ET3K = (which, target) -> { + et3k.clockFreq[which]=1000*target; + VGA.VGA_StartResize(); }; - static private VGA.tGetClock GetClock_ET3K = new VGA.tGetClock() { - public /*Bitu*/int call() { - return et3k.clockFreq[get_clock_index_et3k()]; - } - }; + /*Bitu*/ + static private final VGA.tGetClock GetClock_ET3K = () -> et3k.clockFreq[get_clock_index_et3k()]; - static private VGA.tAcceptsMode AcceptsMode_ET3K = new VGA.tAcceptsMode() { - public boolean call(/*Bitu*/int mode) { - return mode <= 0x37 && mode != 0x2f && Int10_modes.VideoModeMemSize(mode) < VGA.vga.vmemsize; - } - }; + /*Bitu*/ + static private final VGA.tAcceptsMode AcceptsMode_ET3K = mode -> mode <= 0x37 && mode != 0x2f && Int10_modes.VideoModeMemSize(mode) < VGA.vga.vmemsize; static public void SVGA_Setup_TsengET3K() { VGA.svga.write_p3d5 = write_p3d5_et3k; @@ -893,7 +857,7 @@ static public void SVGA_Setup_TsengET3K() { VGA.vga.vmemsize = 512*1024; // Cannot figure how this was supposed to work on the real card // Tseng ROM signature - /*PhysPt*/int rom_base=(int)Memory.PhysMake(0xc000,0); + /*PhysPt*/int rom_base= Memory.PhysMake(0xc000,0); Memory.phys_writeb(rom_base+0x0075,' '); Memory.phys_writeb(rom_base+0x0076,'T'); Memory.phys_writeb(rom_base+0x0077,'s'); diff --git a/jdosbox/src/main/java/jdos/hardware/VGA_xga.java b/jdosbox/src/main/java/jdos/hardware/VGA_xga.java index 6b1ea892..b76eed61 100644 --- a/jdosbox/src/main/java/jdos/hardware/VGA_xga.java +++ b/jdosbox/src/main/java/jdos/hardware/VGA_xga.java @@ -19,7 +19,7 @@ private static class XGAStatus { public static class scissorreg { /*Bit16u*/int x1, y1, x2, y2; } - public scissorreg scissors = new scissorreg(); + public final scissorreg scissors = new scissorreg(); /*Bit32u*/long readmask; /*Bit32u*/long writemask; @@ -54,7 +54,7 @@ public static class XGA_WaitCmd { /*Bitu*/int datasize; /*Bitu*/int buswidth; } - public XGA_WaitCmd waitcmd = new XGA_WaitCmd(); + public final XGA_WaitCmd waitcmd = new XGA_WaitCmd(); } @@ -92,7 +92,7 @@ private static void XGA_Write_Multifunc(/*Bitu*/int val, /*Bitu*/int len) { xga.read_sel = dataval; break; default: - Log.log_msg("XGA: Unhandled multifunction command "+Integer.toString(regselect,16)); + System.out.println("XGA: Unhandled multifunction command "+Integer.toString(regselect,16)); break; } } @@ -224,7 +224,7 @@ static private void XGA_DrawPoint(/*Bitu*/int x, /*Bitu*/int y, /*Bitu*/int c) { destval = ~(srcval | dstdata); break; default: - Log.log_msg("XGA: GetMixResult: Unknown mix. Shouldn't be able to get here!"); + System.out.println("XGA: GetMixResult: Unknown mix. Shouldn't be able to get here!"); break; } return destval; @@ -284,37 +284,34 @@ static private void XGA_DrawLineVector(/*Bitu*/int val) { for (i=0;i<=dx;i++) { /*Bitu*/int mixmode = (xga.pix_cntl >> 6) & 0x3; - switch (mixmode) { - case 0x00: /* FOREMIX always used */ - mixmode = xga.foremix; - switch((mixmode >> 5) & 0x03) { - case 0x00: /* Src is background color */ - srcval = xga.backcolor; - break; - case 0x01: /* Src is foreground color */ - srcval = xga.forecolor; - break; - case 0x02: /* Src is pixel data from PIX_TRANS register */ - //srcval = tmpval; - //Log.log_msg("XGA: DrawRect: Wants data from PIX_TRANS register"); - break; - case 0x03: /* Src is bitmap data */ - Log.log_msg("XGA: DrawRect: Wants data from srcdata"); - //srcval = srcdata; - break; - default: - Log.log_msg("XGA: DrawRect: Shouldn't be able to get here!"); - break; - } - dstdata = XGA_GetPoint(xat,yat); + if (mixmode == 0x00) { /* FOREMIX always used */ + mixmode = xga.foremix; + switch ((mixmode >> 5) & 0x03) { + case 0x00: /* Src is background color */ + srcval = xga.backcolor; + break; + case 0x01: /* Src is foreground color */ + srcval = xga.forecolor; + break; + case 0x02: /* Src is pixel data from PIX_TRANS register */ + //srcval = tmpval; + //System.out.println("XGA: DrawRect: Wants data from PIX_TRANS register"); + break; + case 0x03: /* Src is bitmap data */ + System.out.println("XGA: DrawRect: Wants data from srcdata"); + //srcval = srcdata; + break; + default: + System.out.println("XGA: DrawRect: Shouldn't be able to get here!"); + break; + } + dstdata = XGA_GetPoint(xat, yat); - destval = XGA_GetMixResult(mixmode, srcval, dstdata); + destval = XGA_GetMixResult(mixmode, srcval, dstdata); - XGA_DrawPoint(xat,yat, destval); - break; - default: - Log.log_msg("XGA: DrawLine: Needs mixmode "+Integer.toString(mixmode,16)); - break; + XGA_DrawPoint(xat, yat, destval); + } else { + System.out.println("XGA: DrawLine: Needs mixmode " + Integer.toString(mixmode, 16)); } xat += sx; yat += sy; @@ -336,11 +333,13 @@ static private void XGA_DrawLineBresenham(/*Bitu*/int val) { // Probably a lot easier way to do this, but this works. - dminor = (/*Bits*/int)((/*Bit16s*/short)xga.desty); + /*Bits*/ + dminor = (/*Bit16s*/short)xga.desty; if((xga.desty&0x2000)!=0) dminor |= 0xffffe000; dminor >>= 1; - destxtmp=(/*Bits*/int)((/*Bit16s*/short)xga.destx); + /*Bits*/ + destxtmp= (/*Bit16s*/short)xga.destx; if((xga.destx&0x2000)!=0) destxtmp |= 0xffffe000; @@ -358,7 +357,8 @@ static private void XGA_DrawLineBresenham(/*Bitu*/int val) { } else { sy = -1; } - e = (/*Bits*/int)((/*Bit16s*/short)xga.ErrTerm); + /*Bits*/ + e = (/*Bit16s*/short)xga.ErrTerm; if((xga.ErrTerm&0x2000)!=0) e |= 0xffffe000; xat = xga.curx; yat = xga.cury; @@ -377,52 +377,48 @@ static private void XGA_DrawLineBresenham(/*Bitu*/int val) { steep = true; } - //Log.log_msg("XGA: Bresenham: ASC %d, LPDSC %d, sx %d, sy %d, err %d, steep %d, length %d, dmajor %d, dminor %d, xstart %d, ystart %d", dx, dy, sx, sy, e, steep, xga.MAPcount, dmajor, dminor,xat,yat); + //System.out.println("XGA: Bresenham: ASC %d, LPDSC %d, sx %d, sy %d, err %d, steep %d, length %d, dmajor %d, dminor %d, xstart %d, ystart %d", dx, dy, sx, sy, e, steep, xga.MAPcount, dmajor, dminor,xat,yat); for (i=0;i<=xga.MAPcount;i++) { /*Bitu*/int mixmode = (xga.pix_cntl >> 6) & 0x3; - switch (mixmode) { - case 0x00: /* FOREMIX always used */ - mixmode = xga.foremix; - switch((mixmode >> 5) & 0x03) { - case 0x00: /* Src is background color */ - srcval = xga.backcolor; - break; - case 0x01: /* Src is foreground color */ - srcval = xga.forecolor; - break; - case 0x02: /* Src is pixel data from PIX_TRANS register */ - //srcval = tmpval; - Log.log_msg("XGA: DrawRect: Wants data from PIX_TRANS register"); - break; - case 0x03: /* Src is bitmap data */ - Log.log_msg("XGA: DrawRect: Wants data from srcdata"); - //srcval = srcdata; - break; - default: - Log.log_msg("XGA: DrawRect: Shouldn't be able to get here!"); - break; - } - - if(steep) { - dstdata = XGA_GetPoint(xat,yat); - } else { - dstdata = XGA_GetPoint(yat,xat); - } - - destval = XGA_GetMixResult(mixmode, srcval, dstdata); - - if(steep) { - XGA_DrawPoint(xat,yat, destval); - } else { - XGA_DrawPoint(yat,xat, destval); - } - + if (mixmode == 0x00) { /* FOREMIX always used */ + mixmode = xga.foremix; + switch ((mixmode >> 5) & 0x03) { + case 0x00: /* Src is background color */ + srcval = xga.backcolor; + break; + case 0x01: /* Src is foreground color */ + srcval = xga.forecolor; + break; + case 0x02: /* Src is pixel data from PIX_TRANS register */ + //srcval = tmpval; + System.out.println("XGA: DrawRect: Wants data from PIX_TRANS register"); + break; + case 0x03: /* Src is bitmap data */ + System.out.println("XGA: DrawRect: Wants data from srcdata"); + //srcval = srcdata; break; default: - Log.log_msg("XGA: DrawLine: Needs mixmode "+Integer.toString(mixmode,16)); + System.out.println("XGA: DrawRect: Shouldn't be able to get here!"); break; } + + if (steep) { + dstdata = XGA_GetPoint(xat, yat); + } else { + dstdata = XGA_GetPoint(yat, xat); + } + + destval = XGA_GetMixResult(mixmode, srcval, dstdata); + + if (steep) { + XGA_DrawPoint(xat, yat, destval); + } else { + XGA_DrawPoint(yat, xat, destval); + } + } else { + System.out.println("XGA: DrawLine: Needs mixmode " + Integer.toString(mixmode, 16)); + } while (e > 0) { yat += sy; e -= (dx << 1); @@ -463,37 +459,34 @@ private static void XGA_DrawRectangle(/*Bitu*/int val) { srcx = xga.curx; for(xat=0;xat<=xga.MAPcount;xat++) { /*Bitu*/int mixmode = (xga.pix_cntl >> 6) & 0x3; - switch (mixmode) { - case 0x00: /* FOREMIX always used */ - mixmode = xga.foremix; - switch((mixmode >> 5) & 0x03) { - case 0x00: /* Src is background color */ - srcval = xga.backcolor; - break; - case 0x01: /* Src is foreground color */ - srcval = xga.forecolor; - break; - case 0x02: /* Src is pixel data from PIX_TRANS register */ - //srcval = tmpval; - Log.log_msg("XGA: DrawRect: Wants data from PIX_TRANS register"); - break; - case 0x03: /* Src is bitmap data */ - Log.log_msg("XGA: DrawRect: Wants data from srcdata"); - //srcval = srcdata; - break; - default: - Log.log_msg("XGA: DrawRect: Shouldn't be able to get here!"); - break; - } - dstdata = XGA_GetPoint(srcx,srcy); + if (mixmode == 0x00) { /* FOREMIX always used */ + mixmode = xga.foremix; + switch ((mixmode >> 5) & 0x03) { + case 0x00: /* Src is background color */ + srcval = xga.backcolor; + break; + case 0x01: /* Src is foreground color */ + srcval = xga.forecolor; + break; + case 0x02: /* Src is pixel data from PIX_TRANS register */ + //srcval = tmpval; + System.out.println("XGA: DrawRect: Wants data from PIX_TRANS register"); + break; + case 0x03: /* Src is bitmap data */ + System.out.println("XGA: DrawRect: Wants data from srcdata"); + //srcval = srcdata; + break; + default: + System.out.println("XGA: DrawRect: Shouldn't be able to get here!"); + break; + } + dstdata = XGA_GetPoint(srcx, srcy); - destval = XGA_GetMixResult(mixmode, srcval, dstdata); + destval = XGA_GetMixResult(mixmode, srcval, dstdata); - XGA_DrawPoint(srcx,srcy, destval); - break; - default: - Log.log_msg("XGA: DrawRect: Needs mixmode "+Integer.toString(mixmode,16)); - break; + XGA_DrawPoint(srcx, srcy, destval); + } else { + System.out.println("XGA: DrawRect: Needs mixmode " + Integer.toString(mixmode, 16)); } srcx += dx; } @@ -502,10 +495,10 @@ private static void XGA_DrawRectangle(/*Bitu*/int val) { xga.curx = srcx; xga.cury = srcy; - //Log.log_msg("XGA: Draw rect (%d, %d)-(%d, %d), %d", x1, y1, x2, y2, xga.forecolor); + //System.out.println("XGA: Draw rect (%d, %d)-(%d, %d), %d", x1, y1, x2, y2, xga.forecolor); } - private static boolean XGA_CheckX() { + private static void XGA_CheckX() { boolean newline = false; if(!xga.waitcmd.newline) { @@ -513,7 +506,6 @@ private static boolean XGA_CheckX() { xga.waitcmd.curx = xga.waitcmd.x1; xga.waitcmd.cury++; xga.waitcmd.cury&=0x0fff; - newline = true; xga.waitcmd.newline = true; if((xga.waitcmd.cury<2048)&&(xga.waitcmd.cury > xga.waitcmd.y2)) xga.waitcmd.wait = false; @@ -525,7 +517,6 @@ private static boolean XGA_CheckX() { xga.waitcmd.curx = xga.waitcmd.x1; xga.waitcmd.cury++; xga.waitcmd.cury&=0x0fff; - newline = true; xga.waitcmd.newline = true; if((xga.waitcmd.cury<2048)&&(xga.waitcmd.cury > xga.waitcmd.y2)) xga.waitcmd.wait = false; @@ -535,7 +526,6 @@ private static boolean XGA_CheckX() { xga.waitcmd.curx = xga.waitcmd.x1; xga.waitcmd.cury++; xga.waitcmd.cury&=0x0fff; - newline = true; xga.waitcmd.newline = true; if((xga.waitcmd.cury<2048)&&(xga.waitcmd.cury > xga.waitcmd.y2)) xga.waitcmd.wait = false; @@ -545,15 +535,14 @@ private static boolean XGA_CheckX() { } else { xga.waitcmd.newline = false; } - return newline; -} + } private static void XGA_DrawWaitSub(/*Bitu*/int mixmode, /*Bitu*/int srcval) { /*Bitu*/int destval; /*Bitu*/int dstdata; dstdata = XGA_GetPoint(xga.waitcmd.curx, xga.waitcmd.cury); destval = XGA_GetMixResult(mixmode, srcval, dstdata); - //Log.log_msg("XGA: DrawPattern: Mixmode: %x srcval: %x", mixmode, srcval); + //System.out.println("XGA: DrawPattern: Mixmode: %x srcval: %x", mixmode, srcval); XGA_DrawPoint(xga.waitcmd.curx, xga.waitcmd.cury, destval); xga.waitcmd.curx++; @@ -565,11 +554,10 @@ private static void XGA_DrawWait(/*Bitu*/int val, /*Bitu*/int len) { if(!xga.waitcmd.wait) return; /*Bitu*/int mixmode = (xga.pix_cntl >> 6) & 0x3; /*Bitu*/int srcval; - switch(xga.waitcmd.cmd) { - case 2: /* Rectangle */ - switch(mixmode) { - case 0x00: /* FOREMIX always used */ - mixmode = xga.foremix; + if (xga.waitcmd.cmd == 2) { /* Rectangle */ + switch (mixmode) { + case 0x00: /* FOREMIX always used */ + mixmode = xga.foremix; /* switch((mixmode >> 5) & 0x03) { case 0x00: // Src is background color @@ -580,130 +568,132 @@ private static void XGA_DrawWait(/*Bitu*/int val, /*Bitu*/int len) { break; case 0x02: // Src is pixel data from PIX_TRANS register */ - if(((mixmode >> 5) & 0x03) != 0x2) { - // those cases don't seem to occur - Log.log_msg("XGA: unsupported drawwait operation"); + if (((mixmode >> 5) & 0x03) != 0x2) { + // those cases don't seem to occur + System.out.println("XGA: unsupported drawwait operation"); + break; + } + switch (xga.waitcmd.buswidth) { + case VGA.M_LIN8: // 8 bit + XGA_DrawWaitSub(mixmode, val); break; - } - switch(xga.waitcmd.buswidth) { - case VGA.M_LIN8: // 8 bit - XGA_DrawWaitSub(mixmode, val); - break; - case 0x20 | VGA.M_LIN8: // 16 bit - for(/*Bitu*/int i = 0; i < len; i++) { - XGA_DrawWaitSub(mixmode, (val>>(8*i))&0xff); - if(xga.waitcmd.newline) break; + case 0x20 | VGA.M_LIN8: // 16 bit + for (/*Bitu*/int i = 0; i < len; i++) { + XGA_DrawWaitSub(mixmode, (val >> (8 * i)) & 0xff); + if (xga.waitcmd.newline) break; + } + break; + case 0x40 | VGA.M_LIN8: // 32 bit + for (int i = 0; i < 4; i++) + XGA_DrawWaitSub(mixmode, (val >> (8 * i)) & 0xff); + break; + case (0x20 | VGA.M_LIN32): + if (len != 4) { // Win 3.11 864 'hack?' + if (xga.waitcmd.datasize == 0) { + // set it up to wait for the next word + xga.waitcmd.data = val; + xga.waitcmd.datasize = 2; + return; + } else { + srcval = (int) ((val << 16) | xga.waitcmd.data); + xga.waitcmd.data = 0; + xga.waitcmd.datasize = 0; + XGA_DrawWaitSub(mixmode, srcval); } break; - case 0x40 | VGA.M_LIN8: // 32 bit - for(int i = 0; i < 4; i++) - XGA_DrawWaitSub(mixmode, (val>>(8*i))&0xff); - break; - case (0x20 | VGA.M_LIN32): - if(len!=4) { // Win 3.11 864 'hack?' - if(xga.waitcmd.datasize == 0) { - // set it up to wait for the next word - xga.waitcmd.data = val; - xga.waitcmd.datasize = 2; - return; - } else { - srcval = (int)((val<<16)|xga.waitcmd.data); - xga.waitcmd.data = 0; - xga.waitcmd.datasize = 0; - XGA_DrawWaitSub(mixmode, srcval); - } - break; - } // fall-through - case 0x40 | VGA.M_LIN32: // 32 bit - XGA_DrawWaitSub(mixmode, val); - break; - case 0x20 | VGA.M_LIN15: // 16 bit - case 0x20 | VGA.M_LIN16: // 16 bit - XGA_DrawWaitSub(mixmode, val); - break; - case 0x40 | VGA.M_LIN15: // 32 bit - case 0x40 | VGA.M_LIN16: // 32 bit - XGA_DrawWaitSub(mixmode, val&0xffff); - if(!xga.waitcmd.newline) - XGA_DrawWaitSub(mixmode, val>>16); - break; - default: - // Let's hope they never show up ;) - Log.log_msg("XGA: unsupported bpp / datawidth combination "+ - Integer.toString(xga.waitcmd.buswidth,16)); - break; - }; - break; - - case 0x02: // Data from PIX_TRANS selects the mix - /*Bitu*/int chunksize=0; - /*Bitu*/int chunks=0; - switch(xga.waitcmd.buswidth&0x60) { - case 0x0: - chunksize=8; - chunks=1; - break; - case 0x20: // 16 bit - chunksize=16; - if(len==4) chunks=2; - else chunks = 1; - break; - case 0x40: // 32 bit - chunksize=16; - if(len==4) chunks=2; - else chunks = 1; - break; - case 0x60: // undocumented guess (but works) - chunksize=8; - chunks=4; - break; - } + } // fall-through + case 0x40 | VGA.M_LIN32: // 32 bit + XGA_DrawWaitSub(mixmode, val); + break; + case 0x20 | VGA.M_LIN15: // 16 bit + case 0x20 | VGA.M_LIN16: // 16 bit + XGA_DrawWaitSub(mixmode, val); + break; + case 0x40 | VGA.M_LIN15: // 32 bit + case 0x40 | VGA.M_LIN16: // 32 bit + XGA_DrawWaitSub(mixmode, val & 0xffff); + if (!xga.waitcmd.newline) + XGA_DrawWaitSub(mixmode, val >> 16); + break; + default: + // Let's hope they never show up ;) + System.out.println("XGA: unsupported bpp / datawidth combination " + + Integer.toString(xga.waitcmd.buswidth, 16)); + break; + } + break; - for(/*Bitu*/int k = 0; k < chunks; k++) { // chunks counter - xga.waitcmd.newline = false; - for(/*Bitu*/int n = 0; n < chunksize; n++) { // pixels - /*Bitu*/int mixmode1; - - // This formula can rule the world ;) - /*Bitu*/int mask = 1 << ((((n&0xF8)+(8-(n&0x7)))-1)+chunksize*k); - if((val&mask)!=0) mixmode1 = xga.foremix; - else mixmode1 = xga.backmix; - - switch((mixmode1 >> 5) & 0x03) { - case 0x00: // Src is background color - srcval = xga.backcolor; - break; - case 0x01: // Src is foreground color - srcval = xga.forecolor; - break; - default: - Log.log_msg("XGA: DrawBlitWait: Unsupported src "+ - Integer.toString((mixmode1 >> 5) & 0x03,16)); - srcval=0; - break; - } - XGA_DrawWaitSub(mixmode1, srcval); + case 0x02: // Data from PIX_TRANS selects the mix + /*Bitu*/ + int chunksize = 0; + /*Bitu*/ + int chunks = 0; + switch (xga.waitcmd.buswidth & 0x60) { + case 0x0: + chunksize = 8; + chunks = 1; + break; + case 0x20: // 16 bit + chunksize = 16; + if (len == 4) chunks = 2; + else chunks = 1; + break; + case 0x40: // 32 bit + chunksize = 16; + if (len == 4) chunks = 2; + else chunks = 1; + break; + case 0x60: // undocumented guess (but works) + chunksize = 8; + chunks = 4; + break; + } - if((xga.waitcmd.cury<2048) && - (xga.waitcmd.cury >= xga.waitcmd.y2)) { - xga.waitcmd.wait = false; - k=1000; // no more chunks + for (/*Bitu*/int k = 0; k < chunks; k++) { // chunks counter + xga.waitcmd.newline = false; + for (/*Bitu*/int n = 0; n < chunksize; n++) { // pixels + /*Bitu*/ + int mixmode1; + + // This formula can rule the world ;) + /*Bitu*/ + int mask = 1 << ((((n & 0xF8) + (8 - (n & 0x7))) - 1) + chunksize * k); + if ((val & mask) != 0) mixmode1 = xga.foremix; + else mixmode1 = xga.backmix; + + switch ((mixmode1 >> 5) & 0x03) { + case 0x00: // Src is background color + srcval = xga.backcolor; break; - } - // next chunk goes to next line - if(xga.waitcmd.newline) break; - } // pixels loop - } // chunks loop - break; + case 0x01: // Src is foreground color + srcval = xga.forecolor; + break; + default: + System.out.println("XGA: DrawBlitWait: Unsupported src " + + Integer.toString((mixmode1 >> 5) & 0x03, 16)); + srcval = 0; + break; + } + XGA_DrawWaitSub(mixmode1, srcval); - default: - Log.log_msg("XGA: DrawBlitWait: Unhandled mixmode: "+mixmode); - break; - } // switch mixmode - break; - default: - Log.log_msg("XGA: Unhandled draw command "+Integer.toString(xga.waitcmd.cmd,16)); - break; + if ((xga.waitcmd.cury < 2048) && + (xga.waitcmd.cury >= xga.waitcmd.y2)) { + xga.waitcmd.wait = false; + k = 1000; // no more chunks + break; + } + // next chunk goes to next line + if (xga.waitcmd.newline) break; + } // pixels loop + } // chunks loop + break; + + default: + System.out.println("XGA: DrawBlitWait: Unhandled mixmode: " + mixmode); + break; + } // switch mixmode + } else { + System.out.println("XGA: Unhandled draw command " + Integer.toString(xga.waitcmd.cmd, 16)); } } @@ -723,9 +713,7 @@ private static void XGA_BlitRect(/*Bitu*/int val) { if(((val >> 5) & 0x01) != 0) dx = 1; if(((val >> 7) & 0x01) != 0) dy = 1; - srcx = xga.curx; srcy = xga.cury; - tarx = xga.destx; tary = xga.desty; /*Bitu*/int mixselect = (xga.pix_cntl >> 6) & 0x3; @@ -735,13 +723,13 @@ private static void XGA_BlitRect(/*Bitu*/int val) { mixmode = xga.foremix; break; case 0x02: /* CPU Data determines mix used */ - Log.log_msg("XGA: DrawPattern: Mixselect data from PIX_TRANS register"); + System.out.println("XGA: DrawPattern: Mixselect data from PIX_TRANS register"); break; case 0x03: /* Video memory determines mix */ - //Log.log_msg("XGA: Srcdata: %x, Forecolor %x, Backcolor %x, Foremix: %x Backmix: %x", srcdata, xga.forecolor, xga.backcolor, xga.foremix, xga.backmix); + //System.out.println("XGA: Srcdata: %x, Forecolor %x, Backcolor %x, Foremix: %x Backmix: %x", srcdata, xga.forecolor, xga.backcolor, xga.foremix, xga.backmix); break; default: - Log.log_msg("XGA: BlitRect: Unknown mix select register"); + System.out.println("XGA: BlitRect: Unknown mix select register"); break; } @@ -776,19 +764,19 @@ private static void XGA_BlitRect(/*Bitu*/int val) { srcval = xga.forecolor; break; case 0x02: /* Src is pixel data from PIX_TRANS register */ - Log.log_msg("XGA: DrawPattern: Wants data from PIX_TRANS register"); + System.out.println("XGA: DrawPattern: Wants data from PIX_TRANS register"); break; case 0x03: /* Src is bitmap data */ srcval = srcdata; break; default: - Log.log_msg("XGA: DrawPattern: Shouldn't be able to get here!"); + System.out.println("XGA: DrawPattern: Shouldn't be able to get here!"); srcval = 0; break; } destval = XGA_GetMixResult(mixmode, srcval, dstdata); - //Log.log_msg("XGA: DrawPattern: Mixmode: %x Mixselect: %x", mixmode, mixselect); + //System.out.println("XGA: DrawPattern: Mixmode: %x Mixselect: %x", mixmode, mixselect); XGA_DrawPoint(tarx, tary, destval); @@ -827,13 +815,13 @@ static private void XGA_DrawPattern(/*Bitu*/int val) { mixmode = xga.foremix; break; case 0x02: /* CPU Data determines mix used */ - Log.log_msg("XGA: DrawPattern: Mixselect data from PIX_TRANS register"); + System.out.println("XGA: DrawPattern: Mixselect data from PIX_TRANS register"); break; case 0x03: /* Video memory determines mix */ - //Log.log_msg("XGA: Pixctl: %x, Srcdata: %x, Forecolor %x, Backcolor %x, Foremix: %x Backmix: %x",xga.pix_cntl, srcdata, xga.forecolor, xga.backcolor, xga.foremix, xga.backmix); + //System.out.println("XGA: Pixctl: %x, Srcdata: %x, Forecolor %x, Backcolor %x, Foremix: %x Backmix: %x",xga.pix_cntl, srcdata, xga.forecolor, xga.backcolor, xga.foremix, xga.backmix); break; default: - Log.log_msg("XGA: DrawPattern: Unknown mix select register"); + System.out.println("XGA: DrawPattern: Unknown mix select register"); break; } @@ -842,7 +830,7 @@ static private void XGA_DrawPattern(/*Bitu*/int val) { for(xat=0;xat<=xga.MAPcount;xat++) { srcdata = XGA_GetPoint(srcx + (tarx & 0x7), srcy + (tary & 0x7)); - //Log.log_msg("patternpoint (%3d/%3d)v%x",srcx + (tarx & 0x7), srcy + (tary & 0x7),srcdata); + //System.out.println("patternpoint (%3d/%3d)v%x",srcx + (tarx & 0x7), srcy + (tary & 0x7),srcdata); dstdata = XGA_GetPoint(tarx, tary); @@ -862,13 +850,13 @@ static private void XGA_DrawPattern(/*Bitu*/int val) { srcval = xga.forecolor; break; case 0x02: /* Src is pixel data from PIX_TRANS register */ - Log.log_msg("XGA: DrawPattern: Wants data from PIX_TRANS register"); + System.out.println("XGA: DrawPattern: Wants data from PIX_TRANS register"); break; case 0x03: /* Src is bitmap data */ srcval = srcdata; break; default: - Log.log_msg("XGA: DrawPattern: Shouldn't be able to get here!"); + System.out.println("XGA: DrawPattern: Shouldn't be able to get here!"); srcval = 0; break; } @@ -887,7 +875,7 @@ static private void XGA_DrawCmd(/*Bitu*/int val, /*Bitu*/int len) { /*Bit16u*/int cmd; cmd = val >> 13; //if (XGA_SHOW_COMMAND_TRACE) - //Log.log_msg("XGA: Draw command %x", cmd); + //System.out.println("XGA: Draw command %x", cmd); xga.curcommand = val; switch(cmd) { @@ -895,22 +883,22 @@ static private void XGA_DrawCmd(/*Bitu*/int val, /*Bitu*/int len) { if((val & 0x100) == 0) { if((val & 0x8) == 0) { if (XGA_SHOW_COMMAND_TRACE) - Log.log_msg("XGA: Drawing Bresenham line"); + System.out.println("XGA: Drawing Bresenham line"); XGA_DrawLineBresenham(val); } else { if (XGA_SHOW_COMMAND_TRACE) - Log.log_msg("XGA: Drawing vector line"); + System.out.println("XGA: Drawing vector line"); XGA_DrawLineVector(val); } } else { - Log.log_msg("XGA: Wants line drawn from PIX_TRANS register!"); + System.out.println("XGA: Wants line drawn from PIX_TRANS register!"); } break; case 2: /* Rectangle fill */ if((val & 0x100) == 0) { xga.waitcmd.wait = false; if (XGA_SHOW_COMMAND_TRACE) - Log.log_msg(StringHelper.sprintf("XGA: Draw immediate rect: xy(%3d/%3d), len(%3d/%3d)", new Object[] {new Integer(xga.curx),new Integer(xga.cury),new Integer(xga.MAPcount),new Integer(xga.MIPcount)})); + System.out.println(StringHelper.sprintf("XGA: Draw immediate rect: xy(%3d/%3d), len(%3d/%3d)", new Object[] {xga.curx, xga.cury, xga.MAPcount, xga.MIPcount})); XGA_DrawRectangle(val); } else { @@ -921,8 +909,10 @@ static private void XGA_DrawCmd(/*Bitu*/int val, /*Bitu*/int len) { xga.waitcmd.cury = xga.cury; xga.waitcmd.x1 = xga.curx; xga.waitcmd.y1 = xga.cury; - xga.waitcmd.x2 = (/*Bit16u*/int)((xga.curx + xga.MAPcount)&0x0fff); - xga.waitcmd.y2 = (/*Bit16u*/int)((xga.cury + xga.MIPcount + 1)&0x0fff); + /*Bit16u*/ + xga.waitcmd.x2 = (xga.curx + xga.MAPcount)&0x0fff; + /*Bit16u*/ + xga.waitcmd.y2 = (xga.cury + xga.MIPcount + 1)&0x0fff; xga.waitcmd.sizex = xga.MAPcount; xga.waitcmd.sizey = xga.MIPcount + 1; xga.waitcmd.cmd = 2; @@ -931,25 +921,25 @@ static private void XGA_DrawCmd(/*Bitu*/int val, /*Bitu*/int len) { xga.waitcmd.datasize = 0; if (XGA_SHOW_COMMAND_TRACE) - Log.log_msg(StringHelper.sprintf("XGA: Draw wait rect, w/h(%3d/%3d), x/y1(%3d/%3d), x/y2(%3d/%3d), %4x", - new Object[] {new Integer(xga.MAPcount+1), new Integer(xga.MIPcount+1),new Integer(xga.curx),new Integer(xga.cury), - new Integer((xga.curx + xga.MAPcount)&0x0fff), - new Integer((xga.cury + xga.MIPcount + 1)&0x0fff),new Integer(val&0xffff)})); + System.out.println(StringHelper.sprintf("XGA: Draw wait rect, w/h(%3d/%3d), x/y1(%3d/%3d), x/y2(%3d/%3d), %4x", + new Object[] {xga.MAPcount + 1, xga.MIPcount + 1, xga.curx, xga.cury, + (xga.curx + xga.MAPcount) & 0x0fff, + (xga.cury + xga.MIPcount + 1) & 0x0fff, val & 0xffff})); } break; case 6: /* BitBLT */ if (XGA_SHOW_COMMAND_TRACE) - Log.log_msg("XGA: Blit Rect"); + System.out.println("XGA: Blit Rect"); XGA_BlitRect(val); break; case 7: /* Pattern fill */ if (XGA_SHOW_COMMAND_TRACE) - Log.log_msg(StringHelper.sprintf("XGA: Pattern fill: src(%3d/%3d), dest(%3d/%3d), fill(%3d/%3d)", - new Object[]{new Integer(xga.curx),new Integer(xga.cury),new Integer(xga.destx),new Integer(xga.desty),new Integer(xga.MAPcount),new Integer(xga.MIPcount)})); + System.out.println(StringHelper.sprintf("XGA: Pattern fill: src(%3d/%3d), dest(%3d/%3d), fill(%3d/%3d)", + new Object[]{xga.curx, xga.cury, xga.destx, xga.desty, xga.MAPcount, xga.MIPcount})); XGA_DrawPattern(val); break; default: - Log.log_msg("XGA: Unhandled draw command "+Integer.toString(cmd,16)); + System.out.println("XGA: Unhandled draw command "+Integer.toString(cmd,16)); break; } } @@ -966,9 +956,9 @@ static private long XGA_SetDualReg(/*Bit32u*/long reg, /*Bitu*/int val) { if ((xga.control1 & 0x200)!=0) result = val; else if ((xga.control1 & 0x10)!=0) - result = (result&0x0000ffff)|(val<<16); + result = (result&0x0000ffff)|((long) val <<16); else - result = (result&0xffff0000l)|(val&0x0000ffff); + result = (result& 0xffff0000L)|(val&0x0000ffff); xga.control1 ^= 0x10; break; } @@ -990,9 +980,9 @@ else if ((xga.control1 & 0x10)!=0) return 0; } - public static IoHandler.IO_WriteHandler XGA_Write = new IoHandler.IO_WriteHandler() { + public static final IoHandler.IO_WriteHandler XGA_Write = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int len) { - // Log.log_msg("XGA: Write to port %x, val %8x, len %x", port,val, len); + // System.out.println("XGA: Write to port %x, val %8x, len %x", port,val, len); switch(port) { case 0x8100:// drawing control: row (low word), column (high word) @@ -1107,7 +1097,7 @@ public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int len) { xga.destx = val&0x3fff; break; case 0xb2e8: - Log.log_msg("COLOR_CMP not implemented"); + System.out.println("COLOR_CMP not implemented"); break; case 0xb6e8: xga.backmix = val; @@ -1136,18 +1126,18 @@ else if(len==2) { break; default: if(port <= 0x4000) { - //Log.log_msg("XGA: Wrote to port %4x with %08x, len %x", port, val, len); + //System.out.println("XGA: Wrote to port %4x with %08x, len %x", port, val, len); xga.waitcmd.newline = false; XGA_DrawWait(val, len); } - else Log.log_msg("XGA: Wrote to port "+Integer.toString(port, 16)+" with "+Integer.toString(val, 16)+", len "+Integer.toString(len)); + else System.out.println("XGA: Wrote to port "+Integer.toString(port, 16)+" with "+Integer.toString(val, 16)+", len "+ len); break; } } }; - public static IoHandler.IO_ReadHandler XGA_Read = new IoHandler.IO_ReadHandler() { + public static final IoHandler.IO_ReadHandler XGA_Read = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int len) { switch(port) { case 0x8118: @@ -1185,7 +1175,7 @@ else if(len==2) { case 0xaee8: return XGA_GetDualReg(xga.readmask); default: - //Log.log_msg("XGA: Read from port %x, len %x", port, len); + //System.out.println("XGA: Read from port %x, len %x", port, len); break; } return 0xffffffff; diff --git a/jdosbox/src/main/java/jdos/hardware/mame/Poly.java b/jdosbox/src/main/java/jdos/hardware/mame/Poly.java index c4977406..98278c48 100644 --- a/jdosbox/src/main/java/jdos/hardware/mame/Poly.java +++ b/jdosbox/src/main/java/jdos/hardware/mame/Poly.java @@ -38,7 +38,7 @@ static public poly_vertex[] create(int count) { } float x; /* X coordinate */ float y; /* Y coordinate */ - float[] p = new float[MAX_VERTEX_PARAMS]; /* interpolated parameter values */ + final float[] p = new float[MAX_VERTEX_PARAMS]; /* interpolated parameter values */ } @@ -107,7 +107,7 @@ public tri_work_unit() { extent[i] = new tri_extent(); } } - tri_extent[] extent = new tri_extent[SCANLINES_PER_BUCKET]; /* array of scanline extents */ + final tri_extent[] extent = new tri_extent[SCANLINES_PER_BUCKET]; /* array of scanline extents */ } @@ -127,7 +127,7 @@ public quad_work_unit() { extent[i] = new poly_extent(); } } - poly_extent[] extent = new poly_extent[SCANLINES_PER_BUCKET]; /* array of scanline extents */ + final poly_extent[] extent = new poly_extent[SCANLINES_PER_BUCKET]; /* array of scanline extents */ } /* polygon_info describes a single polygon, which includes the poly_params */ @@ -153,7 +153,7 @@ public polygon_info() { poly_draw_scanline_func callback; /* callback to handle a scanline's worth of work */ int xorigin; /* X origin for all parameters */ int yorigin; /* Y origin for all parameters */ - poly_param[] param = new poly_param[MAX_VERTEX_PARAMS];/* array of parameter data */ + final poly_param[] param = new poly_param[MAX_VERTEX_PARAMS];/* array of parameter data */ } @@ -187,7 +187,7 @@ static final class poly_manager int flags; /* flags */ /* buckets */ - int[] unit_bucket = new int[TOTAL_BUCKETS]; /* buckets for tracking unit usage */ + final int[] unit_bucket = new int[TOTAL_BUCKETS]; /* buckets for tracking unit usage */ /* statistics */ int triangles; /* number of triangles queued */ @@ -199,8 +199,8 @@ static final class poly_manager int polygon_max; /* maximum polygons used */ int extra_waits; /* number of times we waited for an extra data */ int extra_max; /* maximum extra data used */ - int[] conflicts = new int[WORK_MAX_THREADS]; /* number of conflicts found, per thread */ - int[] resolved = new int[WORK_MAX_THREADS]; /* number of conflicts resolved, per thread */ + final int[] conflicts = new int[WORK_MAX_THREADS]; /* number of conflicts found, per thread */ + final int[] resolved = new int[WORK_MAX_THREADS]; /* number of conflicts resolved, per thread */ } /*************************************************************************** @@ -340,7 +340,7 @@ static poly_manager poly_alloc(int max_polys, int flags, poly_extra_data[] extra /* create the work queue */ if ((flags & POLYFLAG_NO_WORK_QUEUE)==0) - poly.queue = new LinkedList(); + poly.queue = new LinkedList<>(); return poly; } @@ -597,13 +597,13 @@ static int poly_render_triangle(poly_manager poly, short[] dest, int destOffset, return pixels; } - static Thread[] threads; + static final Thread[] threads; static private final class PolyThread extends Thread { - static final LinkedList queue = new LinkedList(); + static final LinkedList queue = new LinkedList<>(); static int active = WORK_MAX_THREADS; static final Object busyNotifier = new Object(); - public int id; + public final int id; static public int count; public PolyThread(int id) { @@ -614,7 +614,7 @@ public void run() { while (true) { work_unit unit; synchronized (queue) { - if (queue.size()==0) { + if (queue.isEmpty()) { if (count == 0) { synchronized (busyNotifier) { busyNotifier.notify(); @@ -622,7 +622,7 @@ public void run() { } queue.wait(); } - if (queue.size()==0) + if (queue.isEmpty()) continue; unit = queue.removeFirst(); } @@ -631,8 +631,6 @@ public void run() { count--; } } - } catch (InterruptedException e) { - e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } @@ -649,7 +647,9 @@ static public void addUnit(work_unit unit) { static public void waitUntilDone() { synchronized (busyNotifier) { if (count>0) { - try {busyNotifier.wait();} catch (Exception e) {} + try {busyNotifier.wait();} catch (Exception e) { + throw new RuntimeException(e); + } } } } @@ -763,7 +763,7 @@ static int poly_render_triangle_custom(poly_manager poly, short[] dest, int dest item -------------------------------------------------*/ - static poly_extent[] tmpextents = poly_extent.create(WORK_MAX_THREADS); + static final poly_extent[] tmpextents = poly_extent.create(WORK_MAX_THREADS); static void poly_item_callback(work_unit unit, int threadid) { while (true) diff --git a/jdosbox/src/main/java/jdos/hardware/mame/RasterizerCompiler.java b/jdosbox/src/main/java/jdos/hardware/mame/RasterizerCompiler.java index e440c75c..5af1526f 100644 --- a/jdosbox/src/main/java/jdos/hardware/mame/RasterizerCompiler.java +++ b/jdosbox/src/main/java/jdos/hardware/mame/RasterizerCompiler.java @@ -19,10 +19,10 @@ public SaveInfo(raster_info info, byte[] byteCode) { this.info = info; this.byteCode = byteCode; } - raster_info info; - byte[] byteCode; + final raster_info info; + final byte[] byteCode; } - private static Vector savedClasses = new Vector(); + private static final Vector savedClasses = new Vector<>(); static public void save(ZipOutputStream out) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -70,7 +70,7 @@ static private void CLAMP(StringBuilder method, String val, String min, String m static private void CLAMPED_Z(StringBuilder method, String iterz, int fbzcp, String result) { method.append(result).append(" = ").append(iterz).append(" >> 12;\n"); - if (!VoodooCommon.FBZCP_RGBZW_CLAMP(fbzcp)) { + if (VoodooCommon.FBZCP_RGBZW_CLAMP(fbzcp)) { method.append(result).append(" &= 0xfffff;\n"); method.append("if (").append(result).append(" == 0xfffff)\n"); method.append(" ").append(result).append(" = 0;\n"); @@ -85,7 +85,7 @@ static private void CLAMPED_Z(StringBuilder method, String iterz, int fbzcp, Str static private void CLAMPED_W(StringBuilder method, String iterw, int fbzcp, String result) { method.append(result).append(" = (short)").append(iterw).append(" >> 32;\n"); - if (!VoodooCommon.FBZCP_RGBZW_CLAMP(fbzcp)) { + if (VoodooCommon.FBZCP_RGBZW_CLAMP(fbzcp)) { method.append(result).append(" &= 0xffff;\n"); method.append("if (").append(result).append(" == 0xffff)\n"); method.append(" ").append(result).append(" = 0;\n"); @@ -287,7 +287,7 @@ static private void TEXTURE_PIPELINE(StringBuilder method, int texMode, String l method.append("}\n"); /* select zero/other for RGB */ - if (!VoodooCommon.TEXMODE_TC_ZERO_OTHER(texMode)) { + if (VoodooCommon.TEXMODE_TC_ZERO_OTHER(texMode)) { method.append("int tr = ");getRegR(method, "texel");method.append(";\n"); method.append("int tg = ");getRegG(method, "texel");method.append(";\n"); method.append("int tb = ");getRegB(method, "texel");method.append(";\n"); @@ -295,7 +295,7 @@ static private void TEXTURE_PIPELINE(StringBuilder method, int texMode, String l method.append("int tr = 0, tg = 0, tb = 0;\n"); } /* select zero/other for alpha */ - if (!VoodooCommon.TEXMODE_TCA_ZERO_OTHER(texMode)) { + if (VoodooCommon.TEXMODE_TCA_ZERO_OTHER(texMode)) { method.append("int ta = ");getRegA(method, "texel");method.append(";\n"); } else { method.append("int ta = 0;\n"); @@ -311,7 +311,7 @@ static private void TEXTURE_PIPELINE(StringBuilder method, int texMode, String l method.append("ta -= ");getRegA(method, "c_local");method.append(";\n"); } - if (VoodooCommon.TEXMODE_TC_MSELECT(texMode)==0 && VoodooCommon.TEXMODE_TCA_MSELECT(texMode)==0 && !VoodooCommon.TEXMODE_TC_REVERSE_BLEND(texMode) && !VoodooCommon.TEXMODE_TCA_REVERSE_BLEND(texMode)) { + if (VoodooCommon.TEXMODE_TC_MSELECT(texMode)==0 && VoodooCommon.TEXMODE_TCA_MSELECT(texMode)==0 && VoodooCommon.TEXMODE_TC_REVERSE_BLEND(texMode) && VoodooCommon.TEXMODE_TCA_REVERSE_BLEND(texMode)) { System.out.println(" removed textured blend"); } else { /* blend RGB */ @@ -394,14 +394,14 @@ static private void TEXTURE_PIPELINE(StringBuilder method, int texMode, String l } /* reverse the RGB blend */ - if (!VoodooCommon.TEXMODE_TC_REVERSE_BLEND(texMode)) { + if (VoodooCommon.TEXMODE_TC_REVERSE_BLEND(texMode)) { method.append( "blendr ^= 0xff;\n"+ "blendg ^= 0xff;\n"+ "blendb ^= 0xff;\n"); } /* reverse the alpha blend */ - if (!VoodooCommon.TEXMODE_TCA_REVERSE_BLEND(texMode)) + if (VoodooCommon.TEXMODE_TCA_REVERSE_BLEND(texMode)) method.append("blenda ^= 0xff;"); /* do the blend */ @@ -514,7 +514,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i if (VoodooCommon.FBZMODE_ENABLE_DITHERING(fbzMode)) { method.append( "dither4 = v.dither_matrix_4x4;\n" + "dither4Pos = (y & 3) * 4;\n"); - if (!VoodooCommon.FBZMODE_DITHER_TYPE(fbzMode)) { + if (VoodooCommon.FBZMODE_DITHER_TYPE(fbzMode)) { method.append( "dither = dither4;\n" + "ditherPos = dither4Pos;\n" + "dither_lookup = v.dither4_lookup;\n" + @@ -591,7 +591,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i if (VoodooCommon.FBZMODE_ENABLE_STIPPLE(fbzMode)) { /* rotate mode */ - if (!VoodooCommon.FBZMODE_STIPPLE_PATTERN(fbzMode)) { + if (VoodooCommon.FBZMODE_STIPPLE_PATTERN(fbzMode)) { method.append( "v.reg[").append(VoodooCommon.stipple).append("] = (v.reg[").append(VoodooCommon.stipple).append("] << 1) | (v.reg[").append(VoodooCommon.stipple).append("] >> 31);\n"); method.append( "if ((v.reg[").append(VoodooCommon.stipple).append("] & 0x80000000) == 0) {\n" + " v.stats.total_stippled++;\n" + @@ -605,8 +605,8 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } } - boolean needDepthVal = (VoodooCommon.FBZMODE_ENABLE_DEPTHBUF(fbzMode) && !VoodooCommon.FBZMODE_DEPTH_SOURCE_COMPARE(fbzMode)) || (VoodooCommon.FBZMODE_AUX_BUFFER_MASK(fbzMode) && !VoodooCommon.FBZMODE_ENABLE_ALPHA_PLANES(fbzMode)); - boolean needWFloat = (needDepthVal && VoodooCommon.FBZMODE_WBUFFER_SELECT(fbzMode) && !VoodooCommon.FBZMODE_DEPTH_FLOAT_SELECT(fbzMode)) || (VoodooCommon.FOGMODE_ENABLE_FOG(fogMode) && VoodooCommon.FOGMODE_FOG_ZALPHA(fogMode)==0); + boolean needDepthVal = (VoodooCommon.FBZMODE_ENABLE_DEPTHBUF(fbzMode) && VoodooCommon.FBZMODE_DEPTH_SOURCE_COMPARE(fbzMode)) || (VoodooCommon.FBZMODE_AUX_BUFFER_MASK(fbzMode) && !VoodooCommon.FBZMODE_ENABLE_ALPHA_PLANES(fbzMode)); + boolean needWFloat = (needDepthVal && VoodooCommon.FBZMODE_WBUFFER_SELECT(fbzMode) && VoodooCommon.FBZMODE_DEPTH_FLOAT_SELECT(fbzMode)) || (VoodooCommon.FOGMODE_ENABLE_FOG(fogMode) && VoodooCommon.FOGMODE_FOG_ZALPHA(fogMode)==0); if (needWFloat) { method.append( "int wfloat;\n" + @@ -625,7 +625,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i if (needDepthVal) { if (!VoodooCommon.FBZMODE_WBUFFER_SELECT(fbzMode)) { method.append( "int ");CLAMPED_Z(method, "iterz", colorPath, "depthval"); - } else if (!VoodooCommon.FBZMODE_DEPTH_FLOAT_SELECT(fbzMode)) + } else if (VoodooCommon.FBZMODE_DEPTH_FLOAT_SELECT(fbzMode)) method.append( "int depthval = wfloat;\n"); else { method.append( "int depthval;\n"); @@ -649,7 +649,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } if (VoodooCommon.FBZMODE_ENABLE_DEPTHBUF(fbzMode)) { - if (!VoodooCommon.FBZMODE_DEPTH_SOURCE_COMPARE(fbzMode)) + if (VoodooCommon.FBZMODE_DEPTH_SOURCE_COMPARE(fbzMode)) method.append( "int depthsource = depthval;\n"); else method.append( "int depthsource = v.reg[").append(VoodooCommon.zaColor).append("] & 0xFFFF;\n"); @@ -724,7 +724,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i boolean uses_iterargb = VoodooCommon.FBZCP_CC_RGBSELECT(colorPath)==0 || VoodooCommon.FBZCP_CC_ASELECT(colorPath)==0 || VoodooCommon.FBZCP_CCA_LOCALSELECT(colorPath)==0 || - VoodooCommon.FBZCP_CC_LOCALSELECT_OVERRIDE(colorPath) || (!VoodooCommon.FBZCP_CC_LOCALSELECT_OVERRIDE(colorPath) && !VoodooCommon.FBZCP_CC_LOCALSELECT(colorPath)) || + VoodooCommon.FBZCP_CC_LOCALSELECT_OVERRIDE(colorPath) || (!VoodooCommon.FBZCP_CC_LOCALSELECT_OVERRIDE(colorPath) && VoodooCommon.FBZCP_CC_LOCALSELECT(colorPath)) || (VoodooCommon.FOGMODE_ENABLE_FOG(fogMode) && !VoodooCommon.FOGMODE_FOG_CONSTANT(fogMode) && VoodooCommon.FOGMODE_FOG_ZALPHA(fogMode)==1); if (uses_iterargb) { method.append( "int ir, ig, ib, ia;\n"+ @@ -733,7 +733,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i "int cb = iterb >> 12;\n"+ "int ca = itera >> 12;\n"); - if (!VoodooCommon.FBZCP_RGBZW_CLAMP(colorPath)) { + if (VoodooCommon.FBZCP_RGBZW_CLAMP(colorPath)) { method.append( "cr &= 0xfff;\n"+ "ir = cr & 0xFF;\n"+ "if (cr == 0xfff) ir = 0;\n"+ @@ -817,7 +817,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i if (uses_c_local) { if (!VoodooCommon.FBZCP_CC_LOCALSELECT_OVERRIDE(colorPath)) { - if (!VoodooCommon.FBZCP_CC_LOCALSELECT(colorPath)) + if (VoodooCommon.FBZCP_CC_LOCALSELECT(colorPath)) method.append("int c_local = iterargb;\n"); else method.append("int c_local = v.reg[VoodooCommon.color0];\n"); @@ -859,7 +859,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } } /* select zero or c_other */ - if (!VoodooCommon.FBZCP_CC_ZERO_OTHER(colorPath)) { + if (VoodooCommon.FBZCP_CC_ZERO_OTHER(colorPath)) { method.append("r = ");getRegR(method,"c_other");method.append(";\n"); method.append("g = ");getRegG(method,"c_other");method.append(";\n"); method.append("b = ");getRegB(method,"c_other");method.append(";\n"); @@ -868,7 +868,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } if (uses_a) { - if (!VoodooCommon.FBZCP_CCA_ZERO_OTHER(colorPath)) { + if (VoodooCommon.FBZCP_CCA_ZERO_OTHER(colorPath)) { method.append("a = ");getRegA(method,"c_other");method.append(";\n"); } else { method.append("a = 0;\n"); @@ -887,7 +887,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i method.append("a -= ");getRegA(method,"c_local");method.append(";\n"); } } - if (VoodooCommon.FBZCP_CC_MSELECT(colorPath)==0 && VoodooCommon.FBZCP_CCA_MSELECT(colorPath)==0 && !VoodooCommon.FBZCP_CC_REVERSE_BLEND(colorPath) && (!VoodooCommon.FBZCP_CCA_REVERSE_BLEND(colorPath) || !uses_a)) { + if (VoodooCommon.FBZCP_CC_MSELECT(colorPath)==0 && VoodooCommon.FBZCP_CCA_MSELECT(colorPath)==0 && VoodooCommon.FBZCP_CC_REVERSE_BLEND(colorPath) && (VoodooCommon.FBZCP_CCA_REVERSE_BLEND(colorPath) || !uses_a)) { System.out.println(" removed color path blend"); } else { /* blend RGB */ @@ -952,14 +952,14 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } } /* reverse the RGB blend */ - if (!VoodooCommon.FBZCP_CC_REVERSE_BLEND(colorPath)) { + if (VoodooCommon.FBZCP_CC_REVERSE_BLEND(colorPath)) { method.append( "blendr ^= 0xff;\n"+ "blendg ^= 0xff;\n"+ "blendb ^= 0xff;\n"); } if (uses_a) { - if (!VoodooCommon.FBZCP_CCA_REVERSE_BLEND(colorPath)) { + if (VoodooCommon.FBZCP_CCA_REVERSE_BLEND(colorPath)) { method.append("blenda ^= 0xff;\n"); } } @@ -1038,7 +1038,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i method.append("int fogblend = 0;\n"); /* if fog_add is zero, we start with the fog color */ - if (!VoodooCommon.FOGMODE_FOG_ADD(fogMode)) { + if (VoodooCommon.FOGMODE_FOG_ADD(fogMode)) { method.append("int fr = ");getRegR(method,"fogcolor");method.append(";\n"); method.append("int fg = ");getRegG(method,"fogcolor");method.append(";\n"); method.append("int fb = ");getRegB(method,"fogcolor");method.append(";\n"); @@ -1047,7 +1047,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } /* if fog_mult is zero, we subtract the incoming color */ - if (!VoodooCommon.FOGMODE_FOG_MULT(fogMode)) { + if (VoodooCommon.FOGMODE_FOG_MULT(fogMode)) { method.append( "fr -= r;\n"+ "fg -= g;\n"+ "fb -= b;\n"); @@ -1089,7 +1089,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i } /* if fog_mult is 0, we add this to the original color */ - if (!VoodooCommon.FOGMODE_FOG_MULT(fogMode)) { + if (VoodooCommon.FOGMODE_FOG_MULT(fogMode)) { method.append( "r += fr;\n" + "g += fg;\n" + "b += fb;\n"); @@ -1266,7 +1266,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i method.append("}\n"); } - static private ClassPool pool = new ClassPool(true); + static private final ClassPool pool = new ClassPool(true); static { pool.importPackage("jdos.hardware.mame.VoodooCommon"); @@ -1276,7 +1276,7 @@ static private void compile(StringBuilder method, int tmuCount, int colorPath, i pool.importPackage("jdos.hardware.mame.stats_block"); pool.importPackage("jdos.hardware.mame.tmu_state"); pool.insertClassPath(new ClassPath() { - public InputStream openClassfile(String s) throws NotFoundException { + public InputStream openClassfile(String s) { if (s.startsWith("jdos.")) { s = "/" + s.replace('.', '/') + ".class"; return Dosbox.class.getResourceAsStream(s.substring(6)); @@ -1307,7 +1307,7 @@ static private raster_info compileMethod(StringBuilder method, raster_info info) codeBlock.setSuperclass(pool.getCtClass("jdos.hardware.mame.raster_info")); codeBlock.addInterface(pool.getCtClass("jdos.hardware.mame.poly_draw_scanline_func")); method.append("}"); - CtMethod m = CtNewMethod.make("public void call(short[] dest, int destOffset, int y, poly_extent extent, poly_extra_data extra, int threadid) {" + method.toString(), codeBlock); + CtMethod m = CtNewMethod.make("public void call(short[] dest, int destOffset, int y, poly_extent extent, poly_extra_data extra, int threadid) {" + method, codeBlock); codeBlock.addMethod(m); String constructor = @@ -1326,7 +1326,7 @@ static private raster_info compileMethod(StringBuilder method, raster_info info) // release the raster block the class and class loader will be unloaded URLClassLoader cl = (URLClassLoader) codeBlock.getClass().getClassLoader(); cl = URLClassLoader.newInstance(cl.getURLs(), cl); - Class clazz = codeBlock.toClass(cl, null); + Class clazz = codeBlock.toClass(cl, null); raster_info result = (raster_info) clazz.newInstance(); if (saveClasses) { savedClasses.add(new SaveInfo(info, codeBlock.toBytecode())); diff --git a/jdosbox/src/main/java/jdos/hardware/mame/VoodooCommon.java b/jdosbox/src/main/java/jdos/hardware/mame/VoodooCommon.java index 25232c1a..eb93fb18 100644 --- a/jdosbox/src/main/java/jdos/hardware/mame/VoodooCommon.java +++ b/jdosbox/src/main/java/jdos/hardware/mame/VoodooCommon.java @@ -2,7 +2,6 @@ import jdos.cpu.Paging; import jdos.gui.Render; -import jdos.hardware.Memory; import jdos.hardware.Pic; import jdos.hardware.VGA; import jdos.hardware.VGA_draw; @@ -26,7 +25,7 @@ 3dfx Voodoo Graphics SST-1/2 emulator. -**************************************************************************** +*

Copyright Aaron Giles All rights reserved. @@ -69,7 +68,7 @@ public class VoodooCommon extends PCI_Device { static final int TYPE_VOODOO_BANSHEE = 2; static final int TYPE_VOODOO_3 = 3; - static public long regAsUnsignedInt(int i) {return i & 0xFFFFFFFFl;} + static public long regAsUnsignedInt(int i) {return i & 0xFFFFFFFFL;} static public float regAsFloat(int i) {return Float.intBitsToFloat(i);} static public int setRegAsFloat(int i) {return Float.floatToRawIntBits((float)i);} static public int getRegB(int i) {return i & 0xFF;} @@ -155,7 +154,7 @@ static final public class voodoo_stats public int reg_writes; /* register writes */ public int reg_reads; /* register reads */ public int tex_writes; /* texture writes */ - public int[] texture_mode = new int[16]; /* 16 different texture modes */ + public final int[] texture_mode = new int[16]; /* 16 different texture modes */ public int render_override; /* render override */ public String buffer; /* string */ } @@ -196,13 +195,13 @@ static final class cmdfifo_info int holes; /* number of holes */ } - static interface voodoo_stall_func { - public void call(PCI_Device device, int state); + interface voodoo_stall_func { + void call(PCI_Device device, int state); } static final class pci_state { - fifo_state fifo = new fifo_state(new short[64*4]); /* PCI FIFO */ + final fifo_state fifo = new fifo_state(new short[64*4]); /* PCI FIFO */ int init_enable; /* initEnable value */ int stall_state; /* state of the system if we're stalled */ voodoo_stall_func stall_callback; /* callback for stalling/unstalling */ @@ -216,25 +215,29 @@ static final class ncc_table { boolean dirty; /* is the texel lookup dirty? */ int reg; /* pointer to our registers */ - int[] ir = new int[4], ig = new int[4], ib = new int[4]; /* I values for R,G,B */ - int[] qr = new int[4], qg = new int[4], qb = new int[4]; /* Q values for R,G,B */ - int[] y = new int[16]; /* Y values */ + final int[] ir = new int[4]; + final int[] ig = new int[4]; + final int[] ib = new int[4]; /* I values for R,G,B */ + final int[] qr = new int[4]; + final int[] qg = new int[4]; + final int[] qb = new int[4]; /* Q values for R,G,B */ + final int[] y = new int[16]; /* Y values */ int[] palette; /* pointer to associated RGB palette */ int[] palettea; /* pointer to associated ARGB palette */ - int[] texel = new int[256]; /* texel lookup */ + final int[] texel = new int[256]; /* texel lookup */ } static final class tmu_shared_state { - int[] rgb332 = new int[256]; /* RGB 3-3-2 lookup table */ - int[] alpha8 = new int[256]; /* alpha 8-bit lookup table */ - int[] int8 = new int[256]; /* intensity 8-bit lookup table */ - int[] ai44 = new int[256]; /* alpha, intensity 4-4 lookup table */ - - int[] rgb565 = new int[65536]; /* RGB 5-6-5 lookup table */ - int[] argb1555 = new int[65536]; /* ARGB 1-5-5-5 lookup table */ - int[] argb4444 = new int[65536]; /* ARGB 4-4-4-4 lookup table */ + final int[] rgb332 = new int[256]; /* RGB 3-3-2 lookup table */ + final int[] alpha8 = new int[256]; /* alpha 8-bit lookup table */ + final int[] int8 = new int[256]; /* intensity 8-bit lookup table */ + final int[] ai44 = new int[256]; /* alpha, intensity 4-4 lookup table */ + + final int[] rgb565 = new int[65536]; /* RGB 5-6-5 lookup table */ + final int[] argb1555 = new int[65536]; /* ARGB 1-5-5-5 lookup table */ + final int[] argb4444 = new int[65536]; /* ARGB 4-4-4-4 lookup table */ } @@ -247,8 +250,8 @@ static final class setup_vertex float w1, s1, t1; /* W, S, T for TMU 1 */ } - static interface voodoo_vblank_func { - public void call(PCI_Device device, int state); + interface voodoo_vblank_func { + void call(PCI_Device device, int state); } static public final class fbi_state @@ -263,7 +266,7 @@ public fbi_state() { } public short[] ram; /* pointer to frame buffer RAM */ public int mask; /* mask to apply to pointers */ - public int[] rgboffs = new int[3]; /* word offset to 3 RGB buffers */ + public final int[] rgboffs = new int[3]; /* word offset to 3 RGB buffers */ public int auxoffs; /* word offset to 1 aux buffer */ public int frontbuf; /* front buffer index */ @@ -308,35 +311,33 @@ public fbi_state() { public int dzdy; /* delta Z per Y */ public long dwdy; /* delta W per Y */ - public stats_block lfb_stats = new stats_block(); /* LFB-access statistics */ + public final stats_block lfb_stats = new stats_block(); /* LFB-access statistics */ public int sverts; /* number of vertices ready */ - public setup_vertex[] svert = new setup_vertex[3]; /* 3 setup vertices */ + public final setup_vertex[] svert = new setup_vertex[3]; /* 3 setup vertices */ - public fifo_state fifo = new fifo_state(null); /* framebuffer memory fifo */ - public cmdfifo_info[] cmdfifo = new cmdfifo_info[2]; /* command FIFOs */ + public final fifo_state fifo = new fifo_state(null); /* framebuffer memory fifo */ + public final cmdfifo_info[] cmdfifo = new cmdfifo_info[2]; /* command FIFOs */ - public int[] fogblend = new int[64]; /* 64-entry fog table */ - public int[] fogdelta = new int[64]; /* 64-entry fog table */ + public final int[] fogblend = new int[64]; /* 64-entry fog table */ + public final int[] fogdelta = new int[64]; /* 64-entry fog table */ public int fogdelta_mask; /* mask for for delta (0xff for V1, 0xfc for V2) */ public int[] pen = new int[65536]; /* mapping from pixels to pens */ - public int[] clut = new int[512]; /* clut gamma data */ + public final int[] clut = new int[512]; /* clut gamma data */ public boolean clut_dirty; /* do we need to recompute? */ } static final class dac_state { - int[] reg = new int[8]; /* 8 registers */ + final int[] reg = new int[8]; /* 8 registers */ int read_result; /* pending read result */ } - ; - static final class banshee_info { - int[] io = new int[0x40]; /* I/O registers */ + final int[] io = new int[0x40]; /* I/O registers */ int[] agp = new int[0x80]; /* AGP registers */ byte[] vga = new byte[0x20]; /* VGA registers */ byte[] crtc = new byte[0x27]; /* VGA CRTC registers */ @@ -372,30 +373,30 @@ static final class banshee_info public int extra_cycles; /* extra cycles not yet accounted for */ public int trigger; /* trigger used for stalling */ - public int[] reg = new int[0x400]; /* raw registers */ + public final int[] reg = new int[0x400]; /* raw registers */ public byte[] regaccess; /* register access array */ public String[] regnames; /* register names array */ public boolean alt_regmap; /* enable alternate register map? */ - public pci_state pci = new pci_state(); /* PCI state */ - public dac_state dac = new dac_state(); /* DAC state */ + public final pci_state pci = new pci_state(); /* PCI state */ + public final dac_state dac = new dac_state(); /* DAC state */ - public fbi_state fbi = new fbi_state(); /* FBI states */ - public tmu_state[] tmu = new tmu_state[MAX_TMU]; /* TMU states */ - public tmu_shared_state tmushare = new tmu_shared_state(); /* TMU shared state */ - public banshee_info banshee = new banshee_info(); /* Banshee state */ + public final fbi_state fbi = new fbi_state(); /* FBI states */ + public final tmu_state[] tmu = new tmu_state[MAX_TMU]; /* TMU states */ + public final tmu_shared_state tmushare = new tmu_shared_state(); /* TMU shared state */ + public final banshee_info banshee = new banshee_info(); /* Banshee state */ public Poly.poly_manager poly = new Poly.poly_manager(); /* polygon manager */ public stats_block[] thread_stats; /* per-thread statistics */ - public voodoo_stats stats = new voodoo_stats(); /* internal statistics */ + public final voodoo_stats stats = new voodoo_stats(); /* internal statistics */ public int last_status_pc; /* PC of last status description (for logging) */ public int last_status_value; /* value of last status read (for logging) */ public int next_rasterizer; /* next rasterizer index */ - public raster_info[] rasterizer = new raster_info[MAX_RASTERIZERS]; /* array of rasterizers */ - raster_info[] raster_hash = new raster_info[RASTER_HASH_SIZE]; /* hash table of rasterizers */ + public final raster_info[] rasterizer = new raster_info[MAX_RASTERIZERS]; /* array of rasterizers */ + final raster_info[] raster_hash = new raster_info[RASTER_HASH_SIZE]; /* hash table of rasterizers */ static final class rectangle { int min_x, max_x, min_y, max_y; @@ -424,7 +425,7 @@ static double LOGB2(double v) { } /************************************* - * + *

* Macros for extracting pixels * *************************************/ @@ -460,7 +461,7 @@ static private void EXTRACT_5551_TO_8888(int val, int[] a, int[] b, int[] c, int static private void EXTRACT_x888_TO_888(int val, int[] a, int[] b, int[] c, int index){ a[index] = (val >> 16) & 0xff; b[index] = (val >> 8) & 0xff; - c[index] = (val >> 0) & 0xff; + c[index] = (val) & 0xff; } static private void EXTRACT_888x_TO_888(int val, int[] a, int[] b, int[] c, int index) { @@ -473,20 +474,20 @@ static private void EXTRACT_8888_TO_8888(int val, int[] a, int[] b, int[] c, int a[index] = (val >> 24) & 0xff; b[index] = (val >> 16) & 0xff; c[index] = (val >> 8) & 0xff; - d[index] = (val >> 0) & 0xff; + d[index] = (val) & 0xff; } static private void EXTRACT_4444_TO_8888(int val, int[] a, int[] b, int[] c, int[] d, int index) { a[index] = ((val >> 8) & 0xf0) | ((val >> 12) & 0x0f); b[index] = ((val >> 4) & 0xf0) | ((val >> 8) & 0x0f); - c[index] = ((val >> 0) & 0xf0) | ((val >> 4) & 0x0f); - d[index] = ((val << 4) & 0xf0) | ((val >> 0) & 0x0f); + c[index] = ((val) & 0xf0) | ((val >> 4) & 0x0f); + d[index] = ((val << 4) & 0xf0) | ((val) & 0x0f); } static private void EXTRACT_332_TO_888(int val, int[] a, int[] b, int[] c, int index) { - a[index] = ((val >> 0) & 0xe0) | ((val >> 3) & 0x1c) | ((val >> 6) & 0x03); - b[index] = ((val << 3) & 0xe0) | ((val >> 0) & 0x1c) | ((val >> 3) & 0x03); - c[index] = ((val << 6) & 0xc0) | ((val << 4) & 0x30) | ((val << 2) & 0xc0) | ((val << 0) & 0x03); + a[index] = ((val) & 0xe0) | ((val >> 3) & 0x1c) | ((val >> 6) & 0x03); + b[index] = ((val << 3) & 0xe0) | ((val) & 0x1c) | ((val >> 3) & 0x03); + c[index] = ((val << 6) & 0xc0) | ((val << 4) & 0x30) | ((val << 2) & 0xc0) | ((val) & 0x03); } static int CLAMPr(int val,int min,int max) { @@ -500,7 +501,7 @@ static int CLAMPr(int val,int min,int max) { static int CLAMPED_Zr(int ITERZ, int FBZCP) { int RESULT = ITERZ >> 12; - if (!FBZCP_RGBZW_CLAMP(FBZCP)) + if (FBZCP_RGBZW_CLAMP(FBZCP)) { RESULT &= 0xfffff; if (RESULT == 0xfffff) @@ -519,7 +520,7 @@ else if (RESULT == 0x10000) static int CLAMPED_Wr(long ITERW, int FBZCP) { int RESULT = (short)((ITERW) >> 32); - if (!FBZCP_RGBZW_CLAMP(FBZCP)) + if (FBZCP_RGBZW_CLAMP(FBZCP)) { RESULT &= 0xffff; if (RESULT == 0xffff) @@ -536,7 +537,7 @@ else if (RESULT == 0x100) } /************************************* - * + *

* Dithering tables * *************************************/ @@ -558,7 +559,7 @@ else if (RESULT == 0x100) }; /************************************* - * + *

* Dithering macros * *************************************/ @@ -573,15 +574,15 @@ else if (RESULT == 0x100) /* n ranges from 1.0000 to 2.0000 */ for (int val = 0; val <= (1 << RECIPLOG_LOOKUP_BITS); val++) { - long value = (1l << RECIPLOG_LOOKUP_BITS) + val; - voodoo_reciplog[val*2 + 0] = (int)((1l << (RECIPLOG_LOOKUP_PREC + RECIPLOG_LOOKUP_BITS)) / value); + long value = (1L << RECIPLOG_LOOKUP_BITS) + val; + voodoo_reciplog[val * 2] = (int)((1L << (RECIPLOG_LOOKUP_PREC + RECIPLOG_LOOKUP_BITS)) / value); voodoo_reciplog[val*2 + 1] = (int)(LOGB2((double)value / (double)(1 << RECIPLOG_LOOKUP_BITS)) * (double)(1 << RECIPLOG_LOOKUP_PREC)); } /* create dithering tables */ for (int val = 0; val < 256*16*2; val++) { - int g = (val >> 0) & 1; + int g = (val) & 1; int x = (val >> 1) & 3; int color = (val >> 3) & 0xff; int y = (val >> 11) & 3; @@ -599,7 +600,7 @@ else if (RESULT == 0x100) } } /************************************* - * + *

* Register string table for debug * *************************************/ @@ -757,14 +758,14 @@ else if (RESULT == 0x100) }; /************************************* - * + *

* Voodoo Banshee I/O space registers * *************************************/ /* 0x000 */ static final public int io_status = (0x000/4); /* */ - static final public int io_pciInit0 = (0x004/4); /* */ + static final public int io_pciInit0 = (1); /* */ static final public int io_sipMonitor = (0x008/4); /* */ static final public int io_lfbMemoryConfig = (0x00c/4); /* */ static final public int io_miscInit0 = (0x010/4); /* */ @@ -833,7 +834,7 @@ else if (RESULT == 0x100) static final public int io_vidCurrOverlayStartAddr = (0x0fc/4); /* */ /************************************* - * + *

* Register constants * *************************************/ @@ -847,7 +848,7 @@ else if (RESULT == 0x100) /* 0x000 */ static final public int status = (0x000/4); /* R P */ - static final public int intrCtrl = (0x004/4); /* RW P -- Voodoo2/Banshee only */ + static final public int intrCtrl = (1); /* RW P -- Voodoo2/Banshee only */ static final public int vertexAx = (0x008/4); /* W PF */ static final public int vertexAy = (0x00c/4); /* W PF */ static final public int vertexBx = (0x010/4); /* W PF */ @@ -1069,7 +1070,7 @@ else if (RESULT == 0x100) static final public int banshee2D_command = (0x070/4); /************************************* - * + *

* Alias map of the first 64 * registers when remapped * @@ -1077,7 +1078,7 @@ else if (RESULT == 0x100) static private final byte[] register_alias_map = new byte[] { - status, 0x004/4, vertexAx, vertexAy, + status, 1, vertexAx, vertexAy, vertexBx, vertexBy, vertexCx, vertexCy, startR, dRdX, dRdY, startG, dGdX, dGdY, startB, dBdX, @@ -1099,7 +1100,7 @@ else if (RESULT == 0x100) /************************************* - * + *

* Table of per-register access rights * *************************************/ @@ -1397,7 +1398,7 @@ else if (RESULT == 0x100) 0, 0, 0, 0, }; - static boolean INITEN_ENABLE_HW_INIT(int val) { return (((val) >> 0) & 1)!=0;} + static boolean INITEN_ENABLE_HW_INIT(int val) { return (((val)) & 1)!=0;} static boolean INITEN_ENABLE_PCI_FIFO(int val) { return (((val) >> 1) & 1)!=0;} static boolean INITEN_REMAP_INIT_TO_DAC(int val) { return (((val) >> 2) & 1)!=0;} static boolean INITEN_ENABLE_SNOOP0(int val) { return (((val) >> 4) & 1)!=0;} @@ -1416,29 +1417,29 @@ else if (RESULT == 0x100) static boolean INITEN_ENABLE_SLI_ADDRESS_SNOOP(int val) { return (((val) >> 23) & 1)!=0;} /* voodoo 2 only */ static int INITEN_SLI_SNOOP_ADDRESS(int val) { return (((val) >> 24) & 0xff);} /* voodoo 2 only */ - static int FBZCP_CC_RGBSELECT(int val) { return (((val) >> 0) & 3);} + static int FBZCP_CC_RGBSELECT(int val) { return (((val)) & 3);} static int FBZCP_CC_ASELECT(int val) { return (((val) >> 2) & 3);} - static boolean FBZCP_CC_LOCALSELECT(int val) { return (((val) >> 4) & 1)!=0;} + static boolean FBZCP_CC_LOCALSELECT(int val) { return (((val) >> 4) & 1) == 0;} static int FBZCP_CCA_LOCALSELECT(int val) { return (((val) >> 5) & 3);} static boolean FBZCP_CC_LOCALSELECT_OVERRIDE(int val) { return (((val) >> 7) & 1)!=0;} - static boolean FBZCP_CC_ZERO_OTHER(int val) { return (((val) >> 8) & 1)!=0;} + static boolean FBZCP_CC_ZERO_OTHER(int val) { return (((val) >> 8) & 1) == 0;} static boolean FBZCP_CC_SUB_CLOCAL(int val) { return (((val) >> 9) & 1)!=0;} static int FBZCP_CC_MSELECT(int val) { return (((val) >> 10) & 7);} - static boolean FBZCP_CC_REVERSE_BLEND(int val) { return (((val) >> 13) & 1)!=0;} + static boolean FBZCP_CC_REVERSE_BLEND(int val) { return (((val) >> 13) & 1) == 0;} static int FBZCP_CC_ADD_ACLOCAL(int val) { return (((val) >> 14) & 3);} static boolean FBZCP_CC_INVERT_OUTPUT(int val) { return (((val) >> 16) & 1)!=0;} - static boolean FBZCP_CCA_ZERO_OTHER(int val) { return (((val) >> 17) & 1)!=0;} + static boolean FBZCP_CCA_ZERO_OTHER(int val) { return (((val) >> 17) & 1) == 0;} static boolean FBZCP_CCA_SUB_CLOCAL(int val) { return (((val) >> 18) & 1)!=0;} static int FBZCP_CCA_MSELECT(int val) { return (((val) >> 19) & 7);} - static boolean FBZCP_CCA_REVERSE_BLEND(int val) { return (((val) >> 22) & 1)!=0;} + static boolean FBZCP_CCA_REVERSE_BLEND(int val) { return (((val) >> 22) & 1) == 0;} static int FBZCP_CCA_ADD_ACLOCAL(int val) { return (((val) >> 23) & 3);} static boolean FBZCP_CCA_INVERT_OUTPUT(int val) { return (((val) >> 25) & 1)!=0;} static boolean FBZCP_CCA_SUBPIXEL_ADJUST(int val) { return (((val) >> 26) & 1)!=0;} static boolean FBZCP_TEXTURE_ENABLE(int val) { return (((val) >> 27) & 1)!=0;} - static boolean FBZCP_RGBZW_CLAMP(int val) { return (((val) >> 28) & 1)!=0;} /* voodoo 2 only */ + static boolean FBZCP_RGBZW_CLAMP(int val) { return (((val) >> 28) & 1) == 0;} /* voodoo 2 only */ static boolean FBZCP_ANTI_ALIAS(int val) { return (((val) >> 29) & 1)!=0;} /* voodoo 2 only */ - static boolean ALPHAMODE_ALPHATEST(int val) { return (((val) >> 0) & 1)!=0;} + static boolean ALPHAMODE_ALPHATEST(int val) { return (((val)) & 1)!=0;} static int ALPHAMODE_ALPHAFUNCTION(int val) { return (((val) >> 1) & 7);} static boolean ALPHAMODE_ALPHABLEND(int val) { return (((val) >> 4) & 1)!=0;} static boolean ALPHAMODE_ANTIALIAS(int val) { return (((val) >> 5) & 1)!=0;} @@ -1448,15 +1449,15 @@ else if (RESULT == 0x100) static int ALPHAMODE_DSTALPHABLEND(int val) { return (((val) >> 20) & 15);} static int ALPHAMODE_ALPHAREF(int val) { return (((val) >> 24) & 0xff);} - static boolean FOGMODE_ENABLE_FOG(int val) { return (((val) >> 0) & 1)!=0;} - static boolean FOGMODE_FOG_ADD(int val) { return (((val) >> 1) & 1)!=0;} - static boolean FOGMODE_FOG_MULT(int val) { return (((val) >> 2) & 1)!=0;} + static boolean FOGMODE_ENABLE_FOG(int val) { return (((val)) & 1)!=0;} + static boolean FOGMODE_FOG_ADD(int val) { return (((val) >> 1) & 1) == 0;} + static boolean FOGMODE_FOG_MULT(int val) { return (((val) >> 2) & 1) == 0;} static int FOGMODE_FOG_ZALPHA(int val) { return (((val) >> 3) & 3);} static boolean FOGMODE_FOG_CONSTANT(int val) { return (((val) >> 5) & 1)!=0;} static boolean FOGMODE_FOG_DITHER(int val) { return (((val) >> 6) & 1)!=0;} /* voodoo 2 only */ static boolean FOGMODE_FOG_ZONES(int val) { return (((val) >> 7) & 1)!=0;} /* voodoo 2 only */ - static boolean FBZMODE_ENABLE_CLIPPING(int val) { return (((val) >> 0) & 1)!=0;} + static boolean FBZMODE_ENABLE_CLIPPING(int val) { return (((val)) & 1)!=0;} static boolean FBZMODE_ENABLE_CHROMAKEY(int val) { return (((val) >> 1) & 1)!=0;} static boolean FBZMODE_ENABLE_STIPPLE(int val) { return (((val) >> 2) & 1)!=0;} static boolean FBZMODE_WBUFFER_SELECT(int val) { return (((val) >> 3) & 1)!=0;} @@ -1465,18 +1466,18 @@ else if (RESULT == 0x100) static boolean FBZMODE_ENABLE_DITHERING(int val) { return (((val) >> 8) & 1)!=0;} static boolean FBZMODE_RGB_BUFFER_MASK(int val) { return (((val) >> 9) & 1)!=0;} static boolean FBZMODE_AUX_BUFFER_MASK(int val) { return (((val) >> 10) & 1)!=0;} - static boolean FBZMODE_DITHER_TYPE(int val) { return (((val) >> 11) & 1)!=0;} - static boolean FBZMODE_STIPPLE_PATTERN(int val) { return (((val) >> 12) & 1)!=0;} + static boolean FBZMODE_DITHER_TYPE(int val) { return (((val) >> 11) & 1) == 0;} + static boolean FBZMODE_STIPPLE_PATTERN(int val) { return (((val) >> 12) & 1) == 0;} static boolean FBZMODE_ENABLE_ALPHA_MASK(int val) { return (((val) >> 13) & 1)!=0;} static int FBZMODE_DRAW_BUFFER(int val) { return (((val) >> 14) & 3);} static boolean FBZMODE_ENABLE_DEPTH_BIAS(int val) { return (((val) >> 16) & 1)!=0;} static boolean FBZMODE_Y_ORIGIN(int val) { return (((val) >> 17) & 1)!=0;} static boolean FBZMODE_ENABLE_ALPHA_PLANES(int val) { return (((val) >> 18) & 1)!=0;} static boolean FBZMODE_ALPHA_DITHER_SUBTRACT(int val) { return (((val) >> 19) & 1)!=0;} - static boolean FBZMODE_DEPTH_SOURCE_COMPARE(int val) { return (((val) >> 20) & 1)!=0;} - static boolean FBZMODE_DEPTH_FLOAT_SELECT(int val) { return (((val) >> 21) & 1)!=0;} /* voodoo 2 only */ + static boolean FBZMODE_DEPTH_SOURCE_COMPARE(int val) { return (((val) >> 20) & 1) == 0;} + static boolean FBZMODE_DEPTH_FLOAT_SELECT(int val) { return (((val) >> 21) & 1) == 0;} /* voodoo 2 only */ - static int LFBMODE_WRITE_FORMAT(int val) { return (((val) >> 0) & 0xf);} + static int LFBMODE_WRITE_FORMAT(int val) { return (((val)) & 0xf);} static int LFBMODE_WRITE_BUFFER_SELECT(int val) { return (((val) >> 4) & 3);} static int LFBMODE_READ_BUFFER_SELECT(int val) { return (((val) >> 6) & 3);} static boolean LFBMODE_ENABLE_PIXEL_PIPELINE(int val) { return (((val) >> 8) & 1)!=0;} @@ -1494,7 +1495,7 @@ else if (RESULT == 0x100) static boolean CHROMARANGE_UNION_MODE(int val) { return (((val) >> 27) & 1)!=0;} static boolean CHROMARANGE_ENABLE(int val) { return (((val) >> 28) & 1)!=0;} - static boolean FBIINIT0_VGA_PASSTHRU(int val) { return (((val) >> 0) & 1)!=0;} + static boolean FBIINIT0_VGA_PASSTHRU(int val) { return (((val)) & 1)!=0;} static boolean FBIINIT0_GRAPHICS_RESET(int val) { return (((val) >> 1) & 1)!=0;} static boolean FBIINIT0_FIFO_RESET(int val) { return (((val) >> 2) & 1)!=0;} static boolean FBIINIT0_SWIZZLE_REG_WRITES(int val) { return (((val) >> 3) & 1)!=0;} @@ -1506,7 +1507,7 @@ else if (RESULT == 0x100) static int FBIINIT0_MEMORY_FIFO_HWM(int val) { return (((val) >> 14) & 0x7ff);} static int FBIINIT0_MEMORY_FIFO_BURST(int val) { return (((val) >> 25) & 0x3f);} - static boolean FBIINIT1_PCI_DEV_FUNCTION(int val) { return (((val) >> 0) & 1)!=0;} + static boolean FBIINIT1_PCI_DEV_FUNCTION(int val) { return (((val)) & 1)!=0;} static boolean FBIINIT1_PCI_WRITE_WAIT_STATES(int val) { return (((val) >> 1) & 1)!=0;} static boolean FBIINIT1_MULTI_SST1(int val) { return (((val) >> 2) & 1)!=0;} /* not on voodoo 2 */ static boolean FBIINIT1_ENABLE_LFB(int val) { return (((val) >> 3) & 1)!=0;} @@ -1532,7 +1533,7 @@ else if (RESULT == 0x100) static int FBIINIT1_VID_CLK_DELAY(int val) { return (((val) >> 29) & 3);} static boolean FBIINIT1_DISABLE_FAST_READAHEAD(int val) { return (((val) >> 31) & 1)!=0;} - static boolean FBIINIT2_DISABLE_DITHER_SUB(int val) { return (((val) >> 0) & 1)!=0;} + static boolean FBIINIT2_DISABLE_DITHER_SUB(int val) { return (((val)) & 1)!=0;} static boolean FBIINIT2_DRAM_BANKING(int val) { return (((val) >> 1) & 1)!=0;} static int FBIINIT2_ENABLE_TRIPLE_BUF(int val) { return (((val) >> 4) & 1);} static boolean FBIINIT2_ENABLE_FAST_RAS_READ(int val) { return (((val) >> 5) & 1)!=0;} @@ -1546,7 +1547,7 @@ else if (RESULT == 0x100) static boolean FBIINIT2_ENABLE_DRAM_REFRESH(int val) { return (((val) >> 22) & 1)!=0;} static int FBIINIT2_REFRESH_LOAD_VALUE(int val) { return (((val) >> 23) & 0x1ff);} - static boolean FBIINIT3_TRI_REGISTER_REMAP(int val) { return (((val) >> 0) & 1)!=0;} + static boolean FBIINIT3_TRI_REGISTER_REMAP(int val) { return (((val)) & 1)!=0;} static int FBIINIT3_VIDEO_FIFO_THRESH(int val) { return (((val) >> 1) & 0x1f);} static boolean FBIINIT3_DISABLE_TMUS(int val) { return (((val) >> 6) & 1)!=0;} static int FBIINIT3_FBI_MEMORY_TYPE(int val) { return (((val) >> 8) & 7);} @@ -1556,14 +1557,14 @@ else if (RESULT == 0x100) static int FBIINIT3_TREX2FBI_DELAY(int val) { return (((val) >> 17) & 0x1f);} static int FBIINIT3_YORIGIN_SUBTRACT(int val) { return (((val) >> 22) & 0x3ff);} - static boolean FBIINIT4_PCI_READ_WAITS(int val) { return (((val) >> 0) & 1)!=0;} + static boolean FBIINIT4_PCI_READ_WAITS(int val) { return (((val)) & 1)!=0;} static boolean FBIINIT4_ENABLE_LFB_READAHEAD(int val) { return (((val) >> 1) & 1)!=0;} static int FBIINIT4_MEMORY_FIFO_LWM(int val) { return (((val) >> 2) & 0x3f);} static int FBIINIT4_MEMORY_FIFO_START_ROW(int val) { return (((val) >> 8) & 0x3ff);} static int FBIINIT4_MEMORY_FIFO_STOP_ROW(int val) { return (((val) >> 18) & 0x3ff);} static int FBIINIT4_VIDEO_CLOCKING_DELAY(int val) { return (((val) >> 29) & 7);} /* voodoo 2 only */ - static boolean FBIINIT5_DISABLE_PCI_STOP(int val) { return (((val) >> 0) & 1)!=0;} /* voodoo 2 only */ + static boolean FBIINIT5_DISABLE_PCI_STOP(int val) { return (((val)) & 1)!=0;} /* voodoo 2 only */ static boolean FBIINIT5_PCI_SLAVE_SPEED(int val) { return (((val) >> 1) & 1)!=0;} /* voodoo 2 only */ static boolean FBIINIT5_DAC_DATA_OUTPUT_WIDTH(int val) { return (((val) >> 2) & 1)!=0;} /* voodoo 2 only */ static boolean FBIINIT5_DAC_DATA_17_OUTPUT(int val) { return (((val) >> 3) & 1)!=0;} /* voodoo 2 only */ @@ -1589,7 +1590,7 @@ else if (RESULT == 0x100) static boolean FBIINIT5_DAC_DATA_18_CONTROL(int val) { return (((val) >> 27) & 1)!=0;} /* voodoo 2 only */ static int FBIINIT5_RASTERIZER_UNIT_MODE(int val) { return (((val) >> 30) & 3);} /* voodoo 2 only */ - static int FBIINIT6_WINDOW_ACTIVE_COUNTER(int val) { return (((val) >> 0) & 7);} /* voodoo 2 only */ + static int FBIINIT6_WINDOW_ACTIVE_COUNTER(int val) { return (((val)) & 7);} /* voodoo 2 only */ static int FBIINIT6_WINDOW_DRAG_COUNTER(int val) { return (((val) >> 3) & 0x1f);} /* voodoo 2 only */ static boolean FBIINIT6_SLI_SYNC_MASTER(int val) { return (((val) >> 8) & 1)!=0;} /* voodoo 2 only */ static int FBIINIT6_DAC_DATA_22_OUTPUT(int val) { return (((val) >> 9) & 3);} /* voodoo 2 only */ @@ -1602,7 +1603,7 @@ else if (RESULT == 0x100) static int FBIINIT6_VGA_PASS_N_OUTPUT(int val) { return (((val) >> 28) & 3);} /* voodoo 2 only */ static boolean FBIINIT6_X_VIDEO_TILES_BIT0(int val) { return (((val) >> 30) & 1)!=0;} /* voodoo 2 only */ - static int FBIINIT7_GENERIC_STRAPPING(int val) { return (((val) >> 0) & 0xff);} /* voodoo 2 only */ + static int FBIINIT7_GENERIC_STRAPPING(int val) { return (((val)) & 0xff);} /* voodoo 2 only */ static boolean FBIINIT7_CMDFIFO_ENABLE(int val) { return (((val) >> 8) & 1)!=0;} /* voodoo 2 only */ static boolean FBIINIT7_CMDFIFO_MEMORY_STORE(int val) { return (((val) >> 9) & 1)!=0;} /* voodoo 2 only */ static boolean FBIINIT7_DISABLE_CMDFIFO_HOLES(int val) { return (((val) >> 10) & 1)!=0;} /* voodoo 2 only */ @@ -1614,7 +1615,7 @@ else if (RESULT == 0x100) static int FBIINIT7_CMDFIFO_PCI_TIMEOUT(int val) { return (((val) >> 20) & 0x7f);} /* voodoo 2 only */ static boolean FBIINIT7_ENABLE_TEXTURE_BURST(int val) { return (((val) >> 27) & 1)!=0;} /* voodoo 2 only */ - static boolean TEXMODE_ENABLE_PERSPECTIVE(int val) { return (((val) >> 0) & 1)!=0;} + static boolean TEXMODE_ENABLE_PERSPECTIVE(int val) { return (((val)) & 1)!=0;} static boolean TEXMODE_MINIFICATION_FILTER(int val) { return (((val) >> 1) & 1)!=0;} static boolean TEXMODE_MAGNIFICATION_FILTER(int val) { return (((val) >> 2) & 1)!=0;} static boolean TEXMODE_CLAMP_NEG_W(int val) { return (((val) >> 3) & 1)!=0;} @@ -1623,22 +1624,22 @@ else if (RESULT == 0x100) static boolean TEXMODE_CLAMP_S(int val) { return (((val) >> 6) & 1)!=0;} static boolean TEXMODE_CLAMP_T(int val) { return (((val) >> 7) & 1)!=0;} static int TEXMODE_FORMAT(int val) { return (((val) >> 8) & 0xf);} - static boolean TEXMODE_TC_ZERO_OTHER(int val) { return (((val) >> 12) & 1)!=0;} + static boolean TEXMODE_TC_ZERO_OTHER(int val) { return (((val) >> 12) & 1) == 0;} static boolean TEXMODE_TC_SUB_CLOCAL(int val) { return (((val) >> 13) & 1)!=0;} static int TEXMODE_TC_MSELECT(int val) { return (((val) >> 14) & 7);} - static boolean TEXMODE_TC_REVERSE_BLEND(int val) { return (((val) >> 17) & 1)!=0;} + static boolean TEXMODE_TC_REVERSE_BLEND(int val) { return (((val) >> 17) & 1) == 0;} static int TEXMODE_TC_ADD_ACLOCAL(int val) { return (((val) >> 18) & 3);} static boolean TEXMODE_TC_INVERT_OUTPUT(int val) { return (((val) >> 20) & 1)!=0;} - static boolean TEXMODE_TCA_ZERO_OTHER(int val) { return (((val) >> 21) & 1)!=0;} + static boolean TEXMODE_TCA_ZERO_OTHER(int val) { return (((val) >> 21) & 1) == 0;} static boolean TEXMODE_TCA_SUB_CLOCAL(int val) { return (((val) >> 22) & 1)!=0;} static int TEXMODE_TCA_MSELECT(int val) { return (((val) >> 23) & 7);} - static boolean TEXMODE_TCA_REVERSE_BLEND(int val) { return (((val) >> 26) & 1)!=0;} + static boolean TEXMODE_TCA_REVERSE_BLEND(int val) { return (((val) >> 26) & 1) == 0;} static int TEXMODE_TCA_ADD_ACLOCAL(int val) { return (((val) >> 27) & 3);} static boolean TEXMODE_TCA_INVERT_OUTPUT(int val) { return (((val) >> 29) & 1)!=0;} static boolean TEXMODE_TRILINEAR(int val) { return (((val) >> 30) & 1)!=0;} static boolean TEXMODE_SEQ_8_DOWNLD(int val) { return (((val) >> 31) & 1)!=0;} - static int TEXLOD_LODMIN(int val) { return (((val) >> 0) & 0x3f);} + static int TEXLOD_LODMIN(int val) { return (((val)) & 0x3f);} static int TEXLOD_LODMAX(int val) { return (((val) >> 6) & 0x3f);} static int TEXLOD_LODBIAS(int val) { return (((val) >> 12) & 0x3f);} static boolean TEXLOD_LOD_ODD(int val) { return (((val) >> 18) & 1)!=0;} @@ -1651,7 +1652,7 @@ else if (RESULT == 0x100) static boolean TEXLOD_TDATA_SWAP(int val) { return (((val) >> 26) & 1)!=0;} static boolean TEXLOD_TDIRECT_WRITE(int val) { return (((val) >> 27) & 1)!=0;} /* Voodoo 2 only */ - static int TEXDETAIL_DETAIL_MAX(int val) { return (((val) >> 0) & 0xff);} + static int TEXDETAIL_DETAIL_MAX(int val) { return (((val)) & 0xff);} static int TEXDETAIL_DETAIL_BIAS(int val) { return (((val) >> 8) & 0x3f);} static int TEXDETAIL_DETAIL_SCALE(int val) { return (((val) >> 14) & 7);} static boolean TEXDETAIL_RGB_MIN_FILTER(int val) { return (((val) >> 17) & 1)!=0;} /* Voodoo 2 only */ @@ -1665,11 +1666,11 @@ static private int FLIPENDIAN_INT32(int x) { } /************************************* - * + *

* Computes a fast 16.16 reciprocal * of a 16.32 value; used for * computing 1/w in the rasterizer. - * + *

* Since it is trivial to also * compute log2(1/w) = -log2(w) at * the same time, we do that as well @@ -1694,7 +1695,7 @@ private int fast_reciplog(long value, IntRef log2) } /* if we've spilled out of 32 bits, push it down under 32 */ - if ((value & 0xffff00000000l)!=0) + if ((value & 0xffff00000000L)!=0) { temp = (int)(value >> 16); exp -= 16; @@ -1786,7 +1787,7 @@ private static long float_to_long(int data, int fixedbits) if (exponent < 64) result <<= exponent; else - result = 0x7fffffffffffffffl; + result = 0x7fffffffffffffffL; } if ((data & 0x80000000)!=0) result = -result; @@ -1794,7 +1795,7 @@ private static long float_to_long(int data, int fixedbits) } /************************************* - * + *

* Rasterizer inlines * *************************************/ @@ -1851,7 +1852,7 @@ private static int normalize_tex_mode(int eff_tex_mode) /* classify texture formats into 3 format categories */ if (TEXMODE_FORMAT(eff_tex_mode) < 8) - eff_tex_mode = (eff_tex_mode & ~(0xf << 8)) | (0 << 8); + eff_tex_mode = (eff_tex_mode & ~(0xf << 8)) | (0); else if (TEXMODE_FORMAT(eff_tex_mode) >= 10 && TEXMODE_FORMAT(eff_tex_mode) <= 12) eff_tex_mode = (eff_tex_mode & ~(0xf << 8)) | (10 << 8); else @@ -1882,11 +1883,11 @@ static private int compute_raster_hash(raster_info info) hash ^= info.eff_tex_mode_1; } - return (int)((hash & 0xFFFFFFFFl) % RASTER_HASH_SIZE); + return (int)((hash & 0xFFFFFFFFL) % RASTER_HASH_SIZE); } /************************************* - * + *

* Inline FIFO management * *************************************/ @@ -1973,7 +1974,7 @@ static private int fifo_space(fifo_state f) } /************************************* - * + *

* Statistics management * *************************************/ @@ -2017,7 +2018,7 @@ private void update_statistics(boolean accumulate) } /************************************* - * + *

* VBLANK management * *************************************/ @@ -2214,7 +2215,7 @@ void vblank_off_callback() { /************************************* - * + *

* Chip reset * *************************************/ @@ -2241,7 +2242,7 @@ private void soft_reset() /************************************* - * + *

* Recompute video memory layout * *************************************/ @@ -2349,7 +2350,7 @@ private void recompute_video_memory() /************************************* - * + *

* NCC table management * *************************************/ @@ -2387,7 +2388,7 @@ private void ncc_table_write(ncc_table n, int regnum, int data) if (regnum < 4) { regnum *= 4; - n.y[regnum+0] = (data >> 0) & 0xff; + n.y[regnum] = (data) & 0xff; n.y[regnum+1] = (data >> 8) & 0xff; n.y[regnum+2] = (data >> 16) & 0xff; n.y[regnum+3] = (data >> 24) & 0xff; @@ -2424,7 +2425,7 @@ private void ncc_table_update(ncc_table n) for (i = 0; i < 256; i++) { int vi = (i >> 2) & 0x03; - int vq = (i >> 0) & 0x03; + int vq = (i) & 0x03; /* start with the intensity */ r = g = b = n.y[(i >> 4) & 0x0f]; @@ -2448,7 +2449,7 @@ private void ncc_table_update(ncc_table n) } /************************************* - * + *

* Faux DAC implementation * *************************************/ @@ -2464,29 +2465,28 @@ private void dacdata_r(dac_state d, int regnum) int result = 0xff; /* switch off the DAC register requested */ - switch (regnum) - { - case 5: - /* this is just to make startup happy */ - switch (d.reg[7]) - { - case 0x01: result = 0x55; break; - case 0x07: result = 0x71; break; - case 0x0b: result = 0x79; break; - } - break; - - default: - result = d.reg[regnum]; - break; - } + if (regnum == 5) {/* this is just to make startup happy */ + switch (d.reg[7]) { + case 0x01: + result = 0x55; + break; + case 0x07: + result = 0x71; + break; + case 0x0b: + result = 0x79; + break; + } + } else { + result = d.reg[regnum]; + } /* remember the read result; it is fetched elsewhere */ d.read_result = result; } /************************************* - * + *

* Texuture parameter computation * *************************************/ @@ -2524,7 +2524,7 @@ private void recompute_texture_params(tmu_state t) /* start with the base of LOD 0 */ if (t.texaddr_shift == 0 && (reg[t.reg+texBaseAddr] & 1)!=0) - Log.log_msg("Tiled texture\n"); + System.out.println("Tiled texture\n"); base = (reg[t.reg+texBaseAddr] & t.texaddr_mask) << t.texaddr_shift; t.lodoffset[0] = base & t.mask; @@ -2543,8 +2543,8 @@ private void recompute_texture_params(tmu_state t) } else { - if ((t.lodmask & (1 << 0))!=0) - base += (((t.wmask >> 0) + 1) * ((t.hmask >> 0) + 1)) << bppscale; + if ((t.lodmask & (1))!=0) + base += (((t.wmask) + 1) * ((t.hmask) + 1)) << bppscale; t.lodoffset[1] = base & t.mask; if ((t.lodmask & (1 << 1))!=0) base += (((t.wmask >> 1) + 1) * ((t.hmask >> 1) + 1)) << bppscale; @@ -2586,7 +2586,7 @@ private void recompute_texture_params(tmu_state t) } - IntRef tmp_lodbase = new IntRef(0); + final IntRef tmp_lodbase = new IntRef(0); private int prepare_tmu(tmu_state t) { long texdx, texdy; @@ -2625,7 +2625,7 @@ private int prepare_tmu(tmu_state t) } /************************************* - * + *

* Command FIFO depth computation * *************************************/ @@ -2755,7 +2755,7 @@ private int cmdfifo_compute_expected_depth(cmdfifo_info f) return 2 + ((command >> 3) & 0x7ffff); default: - Log.log_msg("UNKNOWN PACKET TYPE " + (command & 7)); + System.out.println("UNKNOWN PACKET TYPE " + (command & 7)); return 1; } } @@ -2763,7 +2763,7 @@ private int cmdfifo_compute_expected_depth(cmdfifo_info f) /************************************* - * + *

* Command FIFO execution * *************************************/ @@ -2835,12 +2835,12 @@ private int cmdfifo_execute(cmdfifo_info f) //if (LOG_CMDFIFO) logerror(" RET $%06X\n", target); Log.exit("RET in CMDFIFO!\n"); break; - + case 3: /* JMP LOCAL FRAME BUFFER */ //if (LOG_CMDFIFO) logerror(" JMP LOCAL FRAMEBUF $%06X\n", target); srcPos = target; break; - + case 4: /* JMP AGP */ //if (LOG_CMDFIFO) logerror(" JMP AGP $%06X\n", target); Log.exit("JMP AGP in CMDFIFO!\n"); @@ -3116,7 +3116,7 @@ private int cmdfifo_execute(cmdfifo_info f) { int data = mem_readd(fbi.ram, srcPos);srcPos+=4; - fbi.ram[addr + 0] = (byte)(data); + fbi.ram[addr] = (byte)(data); fbi.ram[addr + 1] = (byte)(data >> 8); fbi.ram[addr + 2] = (byte)(data >> 16); fbi.ram[addr + 3] = (byte)(data >> 24); @@ -3180,7 +3180,7 @@ private int cmdfifo_execute(cmdfifo_info f) /************************************* - * + *

* Handle execution if we're ready * *************************************/ @@ -3208,7 +3208,7 @@ private int cmdfifo_execute_if_ready(cmdfifo_info f) /************************************* - * + *

* Handle writes to the CMD FIFO * *************************************/ @@ -3279,7 +3279,7 @@ else if (addr < f.amax) } /************************************* - * + *

* Flush data from the FIFOs * *************************************/ @@ -3435,7 +3435,7 @@ private int register_w(int offset, int data) { /* first make sure this register is readable */ if ((regaccess[regnum] & REGISTER_WRITE)==0) { - Log.log_msg("VOODOO."+this.pci_id+".ERROR:Invalid attempt to write "+regnames[regnum]); + System.out.println("VOODOO."+this.pci_id+".ERROR:Invalid attempt to write "+regnames[regnum]); return 0; } //System.out.print(count + " write " + regnames[regnum] + " " + data); @@ -3769,7 +3769,7 @@ private int register_w(int offset, int data) { } } else - Log.log_msg("clutData ignored because video timing reset = 1"); + System.out.println("clutData ignored because video timing reset = 1"); } break; @@ -4007,7 +4007,7 @@ else if (type >= TYPE_VOODOO_BANSHEE && (chips & 1)!=0) break; /* nccTable entries are processed and expanded immediately */ - case nccTable+0: + case nccTable: case nccTable+1: case nccTable+2: case nccTable+3: @@ -4042,7 +4042,7 @@ else if (type >= TYPE_VOODOO_BANSHEE && (chips & 1)!=0) break; /* fogTable entries are processed and expanded immediately */ - case fogTable+0: + case fogTable: case fogTable+1: case fogTable+2: case fogTable+3: @@ -4078,8 +4078,8 @@ else if (type >= TYPE_VOODOO_BANSHEE && (chips & 1)!=0) if ((chips & 1)!=0) { int base = 2 * (regnum - fogTable); - fbi.fogdelta[base + 0] = (data >> 0) & 0xff; - fbi.fogblend[base + 0] = (data >> 8) & 0xff; + fbi.fogdelta[base] = (data) & 0xff; + fbi.fogblend[base] = (data >> 8) & 0xff; fbi.fogdelta[base + 1] = (data >> 16) & 0xff; fbi.fogblend[base + 1] = (data >> 24) & 0xff; } @@ -4122,7 +4122,7 @@ else if (type >= TYPE_VOODOO_BANSHEE && (chips & 1)!=0) /* by default, just feed the data to the chips */ default: - if ((chips & 1)!=0) reg[0x000 + regnum] = data; + if ((chips & 1)!=0) reg[regnum] = data; if ((chips & 2)!=0) reg[0x100 + regnum] = data; if ((chips & 4)!=0) reg[0x200 + regnum] = data; if ((chips & 4)!=0) reg[0x300 + regnum] = data; @@ -4141,7 +4141,7 @@ else if (type >= TYPE_VOODOO_BANSHEE && (chips & 1)!=0) } /************************************* - * + *

* Voodoo LFB writes * *************************************/ @@ -4183,28 +4183,28 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { /* first extract A,R,G,B from the data */ switch (LFBMODE_WRITE_FORMAT(reg[lfbMode]) + 16 * LFBMODE_RGBA_LANES(reg[lfbMode])) { - case 16*0 + 0: /* ARGB, 16-bit RGB 5-6-5 */ - case 16*2 + 0: /* RGBA, 16-bit RGB 5-6-5 */ + case 0: /* ARGB, 16-bit RGB 5-6-5 */ + case 16 * 2: /* RGBA, 16-bit RGB 5-6-5 */ EXTRACT_565_TO_888(data, tmp_sr, tmp_sg, tmp_sb, 0); EXTRACT_565_TO_888(data >> 16, tmp_sr, tmp_sg, tmp_sb, 1); mask = LFB_RGB_PRESENT | (LFB_RGB_PRESENT << 4); offset <<= 1; break; - case 16*1 + 0: /* ABGR, 16-bit RGB 5-6-5 */ - case 16*3 + 0: /* BGRA, 16-bit RGB 5-6-5 */ + case 16: /* ABGR, 16-bit RGB 5-6-5 */ + case 16 * 3: /* BGRA, 16-bit RGB 5-6-5 */ EXTRACT_565_TO_888(data, tmp_sb, tmp_sg, tmp_sr, 0); EXTRACT_565_TO_888(data >> 16, tmp_sb, tmp_sg, tmp_sr, 1); mask = LFB_RGB_PRESENT | (LFB_RGB_PRESENT << 4); offset <<= 1; break; - case 16*0 + 1: /* ARGB, 16-bit RGB x-5-5-5 */ + case 1: /* ARGB, 16-bit RGB x-5-5-5 */ EXTRACT_x555_TO_888(data, tmp_sr, tmp_sg, tmp_sb, 0); EXTRACT_x555_TO_888(data >> 16, tmp_sr, tmp_sg, tmp_sb, 1); mask = LFB_RGB_PRESENT | (LFB_RGB_PRESENT << 4); offset <<= 1; break; - case 16*1 + 1: /* ABGR, 16-bit RGB x-5-5-5 */ + case 16 + 1: /* ABGR, 16-bit RGB x-5-5-5 */ EXTRACT_x555_TO_888(data, tmp_sb, tmp_sg, tmp_sr, 0); EXTRACT_x555_TO_888(data >> 16, tmp_sb, tmp_sg, tmp_sr, 1); mask = LFB_RGB_PRESENT | (LFB_RGB_PRESENT << 4); @@ -4223,13 +4223,13 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { offset <<= 1; break; - case 16*0 + 2: /* ARGB, 16-bit ARGB 1-5-5-5 */ + case 2: /* ARGB, 16-bit ARGB 1-5-5-5 */ EXTRACT_1555_TO_8888(data, tmp_sa, tmp_sr, tmp_sg, tmp_sb, 0); EXTRACT_1555_TO_8888(data >> 16, tmp_sa, tmp_sr, tmp_sg, tmp_sb, 1); mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT | ((LFB_RGB_PRESENT | LFB_ALPHA_PRESENT) << 4); offset <<= 1; break; - case 16*1 + 2: /* ABGR, 16-bit ARGB 1-5-5-5 */ + case 16 + 2: /* ABGR, 16-bit ARGB 1-5-5-5 */ EXTRACT_1555_TO_8888(data, tmp_sa, tmp_sb, tmp_sg, tmp_sr, 0); EXTRACT_1555_TO_8888(data >> 16, tmp_sa, tmp_sb, tmp_sg, tmp_sr, 1); mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT | ((LFB_RGB_PRESENT | LFB_ALPHA_PRESENT) << 4); @@ -4248,11 +4248,11 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { offset <<= 1; break; - case 16*0 + 4: /* ARGB, 32-bit RGB x-8-8-8 */ + case 4: /* ARGB, 32-bit RGB x-8-8-8 */ EXTRACT_x888_TO_888(data, tmp_sr, tmp_sg, tmp_sb, 0); mask = LFB_RGB_PRESENT; break; - case 16*1 + 4: /* ABGR, 32-bit RGB x-8-8-8 */ + case 16 + 4: /* ABGR, 32-bit RGB x-8-8-8 */ EXTRACT_x888_TO_888(data, tmp_sb, tmp_sg, tmp_sr, 0); mask = LFB_RGB_PRESENT; break; @@ -4265,11 +4265,11 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { mask = LFB_RGB_PRESENT; break; - case 16*0 + 5: /* ARGB, 32-bit ARGB 8-8-8-8 */ + case 5: /* ARGB, 32-bit ARGB 8-8-8-8 */ EXTRACT_8888_TO_8888(data, tmp_sa, tmp_sr, tmp_sg, tmp_sb, 0); mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT; break; - case 16*1 + 5: /* ABGR, 32-bit ARGB 8-8-8-8 */ + case 16 + 5: /* ABGR, 32-bit ARGB 8-8-8-8 */ EXTRACT_8888_TO_8888(data, tmp_sa, tmp_sb, tmp_sg, tmp_sr, 0); mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT; break; @@ -4282,25 +4282,25 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT; break; - case 16*0 + 12: /* ARGB, 32-bit depth+RGB 5-6-5 */ + case 12: /* ARGB, 32-bit depth+RGB 5-6-5 */ case 16*2 + 12: /* RGBA, 32-bit depth+RGB 5-6-5 */ tmp_sw[0] = data >> 16; EXTRACT_565_TO_888(data, tmp_sr, tmp_sg, tmp_sb, 0); mask = LFB_RGB_PRESENT | LFB_DEPTH_PRESENT_MSW; break; - case 16*1 + 12: /* ABGR, 32-bit depth+RGB 5-6-5 */ + case 16 + 12: /* ABGR, 32-bit depth+RGB 5-6-5 */ case 16*3 + 12: /* BGRA, 32-bit depth+RGB 5-6-5 */ tmp_sw[0] = data >> 16; EXTRACT_565_TO_888(data, tmp_sb, tmp_sg, tmp_sr, 0); mask = LFB_RGB_PRESENT | LFB_DEPTH_PRESENT_MSW; break; - case 16*0 + 13: /* ARGB, 32-bit depth+RGB x-5-5-5 */ + case 13: /* ARGB, 32-bit depth+RGB x-5-5-5 */ tmp_sw[0] = data >> 16; EXTRACT_x555_TO_888(data, tmp_sr, tmp_sg, tmp_sb, 0); mask = LFB_RGB_PRESENT | LFB_DEPTH_PRESENT_MSW; break; - case 16*1 + 13: /* ABGR, 32-bit depth+RGB x-5-5-5 */ + case 16 + 13: /* ABGR, 32-bit depth+RGB x-5-5-5 */ tmp_sw[0] = data >> 16; EXTRACT_x555_TO_888(data, tmp_sb, tmp_sg, tmp_sr, 0); mask = LFB_RGB_PRESENT | LFB_DEPTH_PRESENT_MSW; @@ -4316,12 +4316,12 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { mask = LFB_RGB_PRESENT | LFB_DEPTH_PRESENT_MSW; break; - case 16*0 + 14: /* ARGB, 32-bit depth+ARGB 1-5-5-5 */ + case 14: /* ARGB, 32-bit depth+ARGB 1-5-5-5 */ tmp_sw[0] = data >> 16; EXTRACT_1555_TO_8888(data, tmp_sa, tmp_sr, tmp_sg, tmp_sb, 0); mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT | LFB_DEPTH_PRESENT_MSW; break; - case 16*1 + 14: /* ABGR, 32-bit depth+ARGB 1-5-5-5 */ + case 16 + 14: /* ABGR, 32-bit depth+ARGB 1-5-5-5 */ tmp_sw[0] = data >> 16; EXTRACT_1555_TO_8888(data, tmp_sa, tmp_sb, tmp_sg, tmp_sr, 0); mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT | LFB_DEPTH_PRESENT_MSW; @@ -4337,8 +4337,8 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { mask = LFB_RGB_PRESENT | LFB_ALPHA_PRESENT | LFB_DEPTH_PRESENT_MSW; break; - case 16*0 + 15: /* ARGB, 16-bit depth */ - case 16*1 + 15: /* ARGB, 16-bit depth */ + case 15: /* ARGB, 16-bit depth */ + case 16 + 15: /* ARGB, 16-bit depth */ case 16*2 + 15: /* ARGB, 16-bit depth */ case 16*3 + 15: /* ARGB, 16-bit depth */ tmp_sw[0] = data & 0xffff; @@ -4352,7 +4352,7 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { } /* compute X,Y */ - x = (offset << 0) & ((1 << fbi.lfb_stride) - 1); + x = (offset) & ((1 << fbi.lfb_stride) - 1); y = (offset >> fbi.lfb_stride) & ((1 << fbi.lfb_stride) - 1); /* adjust the mask based on which half of the data is written */ @@ -4406,7 +4406,7 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { //COMPUTE_DITHER_POINTERS_NO_DITHER_VAR(reg[fbzMode].u, y); if (FBZMODE_ENABLE_DITHERING(reg[fbzMode])) { - if (!FBZMODE_DITHER_TYPE(reg[fbzMode])) + if (FBZMODE_DITHER_TYPE(reg[fbzMode])) { dither_lookup = dither4_lookup; dither_lookupPos = (y & 3) << 11; @@ -4434,9 +4434,9 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { /* look up the dither value from the appropriate matrix */ int dither_offset = dither_lookupPos + ((x & 3) << 1); /* apply dithering to R,G,B */ - tmp_sr[pix] = dither_lookup[(tmp_sr[pix] << 3) + 0 + dither_offset]; + tmp_sr[pix] = dither_lookup[(tmp_sr[pix] << 3) + dither_offset]; tmp_sg[pix] = dither_lookup[(tmp_sg[pix] << 3) + 1 + dither_offset]; - tmp_sb[pix] = dither_lookup[(tmp_sb[pix] << 3) + 0 + dither_offset]; + tmp_sb[pix] = dither_lookup[(tmp_sb[pix] << 3) + dither_offset]; } else { @@ -4498,7 +4498,7 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { { dither4 = dither_matrix_4x4; dither4Pos = (y & 3) * 4; - if (!FBZMODE_DITHER_TYPE(reg[fbzMode])) + if (FBZMODE_DITHER_TYPE(reg[fbzMode])) { dither = dither4; ditherPos = dither4Pos; @@ -4521,7 +4521,7 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { if ((mask & 0x0f)!=0) { final stats_block stats = fbi.lfb_stats; - LongRef iterw = new LongRef(tmp_sw[pix] << (30-16)); + LongRef iterw = new LongRef((long) tmp_sw[pix] << (30-16)); IntRef iterz = new IntRef(tmp_sw[pix] << 12); int color; @@ -4542,22 +4542,18 @@ private int lfb_w(int offset, int data, int mem_mask, boolean forcefront) { } } final int pi = pix; - PIXEL_PIPELINE_CALLBACK callback = new PIXEL_PIPELINE_CALLBACK() { - public boolean call(IntRef iterargb, IntRef result) { - iterargb.value = reg[zaColor]; - - /* use the RGBA we stashed above */ - result.value = setRegRGBA(tmp_sr[pi], tmp_sg[pi], tmp_sb[pi], tmp_sa[pi]); - - /* apply chroma key, alpha mask, and alpha testing */ - if (!APPLY_CHROMAKEY(stats, reg[fbzMode], result.value)) - return false; - if (!APPLY_ALPHAMASK(stats, reg[fbzMode], tmp_sa[pi])) - return false; - if (!APPLY_ALPHATEST(stats, reg[alphaMode], tmp_sa[pi])) - return false; - return true; - } + PIXEL_PIPELINE_CALLBACK callback = (iterargb, result) -> { + iterargb.value = reg[zaColor]; + + /* use the RGBA we stashed above */ + result.value = setRegRGBA(tmp_sr[pi], tmp_sg[pi], tmp_sb[pi], tmp_sa[pi]); + + /* apply chroma key, alpha mask, and alpha testing */ + if (APPLY_CHROMAKEY(stats, reg[fbzMode], result.value)) + return false; + if (APPLY_ALPHAMASK(stats, reg[fbzMode], tmp_sa[pi])) + return false; + return !APPLY_ALPHATEST(stats, reg[alphaMode], tmp_sa[pi]); }; PIXEL_PIPELINE(stats, x, y, reg[fbzColorPath], reg[fbzMode], reg[alphaMode], reg[fogMode], iterz, iterw, dither, ditherPos, dither4, dither4Pos, dither_lookup, dither_lookupPos, fbi.ram, destPos, fbi.ram, depthPos, callback); @@ -4682,7 +4678,7 @@ private void stall_cpu(int state) { } /************************************* - * + *

* Handle a write to the Voodoo * memory space * @@ -4696,7 +4692,7 @@ private void voodoo_w(int offset, int data, int mem_mask) /* should not be getting accesses while stalled */ if (pci.stall_state != NOT_STALLED) - Log.log_msg("voodoo_w while stalled!"); + System.out.println("voodoo_w while stalled!"); /* if we have something pending, flush the FIFOs up to the current time */ if (pci.op_pending) @@ -4732,7 +4728,7 @@ private void voodoo_w(int offset, int data, int mem_mask) if ((offset & 0xff) == swapbufferCMD) fbi.swaps_pending++; - Log.log_msg("Ignoring write to "+regnames[offset & 0xff]+" in CMDFIFO mode"); + System.out.println("Ignoring write to "+regnames[offset & 0xff]+" in CMDFIFO mode"); //g_profiler.stop(); return; } @@ -4858,7 +4854,7 @@ else if ((offset & (0x800000/4))!=0) /************************************* - * + *

* Handle a register read * *************************************/ @@ -4895,13 +4891,13 @@ private int register_r(int offset) /* bits 5:0 are the PCI FIFO free space */ if (fifo_empty(pci.fifo)) - result |= 0x3f << 0; + result |= 0x3f; else { int temp = fifo_space(pci.fifo)/2; if (temp > 0x3f) temp = 0x3f; - result |= temp << 0; + result |= temp; } /* bit 6 is the vertical retrace */ @@ -5045,7 +5041,7 @@ private int register_r(int offset) /************************************* - * + *

* Handle an LFB read * *************************************/ @@ -5129,9 +5125,9 @@ private int lfb_r(int offset, boolean forcefront) private int fastfill() { int sx = (reg[clipLeftRight] >>> 16) & 0x3ff; - int ex = (reg[clipLeftRight] >>> 0) & 0x3ff; + int ex = (reg[clipLeftRight]) & 0x3ff; int sy = (reg[clipLowYHighY] >>> 16) & 0x3ff; - int ey = (reg[clipLowYHighY] >>> 0) & 0x3ff; + int ey = (reg[clipLowYHighY]) & 0x3ff; poly_extent[] extents = poly_extent.create(64); int[] dithermatrix = new int[16]; int drawbufPos = 0; @@ -5171,7 +5167,7 @@ private int fastfill() // COMPUTE_DITHER_POINTERS_NO_DITHER_VAR(reg[fbzMode], y); if (FBZMODE_ENABLE_DITHERING(reg[fbzMode])) { - if (!FBZMODE_DITHER_TYPE(reg[fbzMode])) + if (FBZMODE_DITHER_TYPE(reg[fbzMode])) { dither_lookup = dither4_lookup; dither_lookupPos = (y & 3) << 11; @@ -5197,9 +5193,9 @@ private int fastfill() int dithPos = dither_lookupPos + ((x & 3) << 1); /* apply dithering to R,G,B */ - r = dither_lookup[dithPos+(r << 3) + 0]; + r = dither_lookup[dithPos + (r << 3)]; g = dither_lookup[dithPos+(g << 3) + 1]; - b = dither_lookup[dithPos+(b << 3) + 0]; + b = dither_lookup[dithPos + (b << 3)]; } else { @@ -5275,7 +5271,7 @@ private int mul_32x32_shift(int a, int b, int shift) { private int triangle() { - int texcount = 0; + int texcount; int drawbufPos; int destbuf; int pixels; @@ -5313,7 +5309,7 @@ private int triangle() tmu[0].startt += (dy * tmu[0].dtdy + dx * tmu[0].dtdx) >> 4; /* adjust iterated W/S/T for TMU 1 */ - if (texcount >= 2) + if (texcount == 2) { tmu[1].startw += (dy * tmu[1].dwdy + dx * tmu[1].dwdx) >> 4; tmu[1].starts += (dy * tmu[1].dsdy + dx * tmu[1].dsdx) >> 4; @@ -5481,7 +5477,7 @@ private int setup_and_draw_triangle() /* set up R,G,B */ tdiv = divisor * 4096.0f; - if ((reg[sSetupMode] & (1 << 0))!=0) + if ((reg[sSetupMode] & (1))!=0) { fbi.startr = (int)(fbi.svert[0].r * 4096.0f); fbi.drdx = (int)(((fbi.svert[0].r - fbi.svert[1].r) * dx1 - (fbi.svert[0].r - fbi.svert[2].r) * dx2) * tdiv); @@ -5745,45 +5741,42 @@ private raster_info find_rasterizer(int texcount) raster_fastfill - per-scanline implementation of the 'fastfill' command -------------------------------------------------*/ - static final poly_draw_scanline_func raster_fastfill = new poly_draw_scanline_func() { - public void call(short[] dest, int destOffset, int y, poly_extent extent, poly_extra_data extra, int threadid) + static final poly_draw_scanline_func raster_fastfill = (dest, destOffset, y, extent, extra, threadid) -> { + VoodooCommon v = extra.state; + stats_block stats = v.thread_stats[threadid]; + int startx = extent.startx; + int stopx = extent.stopx; + int scry, x; + + /* determine the screen Y */ + scry = y; + if (FBZMODE_Y_ORIGIN(v.reg[fbzMode])) + scry = (v.fbi.yorigin - y) & 0x3ff; + + /* fill this RGB row */ + if (FBZMODE_RGB_BUFFER_MASK(v.reg[fbzMode])) { - VoodooCommon v = extra.state; - stats_block stats = v.thread_stats[threadid]; - int startx = extent.startx; - int stopx = extent.stopx; - int scry, x; - - /* determine the screen Y */ - scry = y; - if (FBZMODE_Y_ORIGIN(v.reg[fbzMode])) - scry = (v.fbi.yorigin - y) & 0x3ff; - - /* fill this RGB row */ - if (FBZMODE_RGB_BUFFER_MASK(v.reg[fbzMode])) - { - int ditherrowPos = (y & 3) * 4; - int destPos = scry * v.fbi.rowpixels; - - for (x = startx; x < stopx; x++) - dest[destOffset+destPos+x] = (short)extra.dither[ditherrowPos+(x & 3)]; - stats.pixels_out += stopx - startx; - } - - /* fill this dest buffer row */ - if (FBZMODE_AUX_BUFFER_MASK(v.reg[fbzMode]) && v.fbi.auxoffs != -1) - { - short color = (short)v.reg[zaColor]; - int destPos = v.fbi.auxoffs / 2 + scry * v.fbi.rowpixels; - - for (x = startx; x < stopx; x++) - v.fbi.ram[destPos+x]= color; - } + int ditherrowPos = (y & 3) * 4; + int destPos = scry * v.fbi.rowpixels; + + for (x = startx; x < stopx; x++) + dest[destOffset+destPos+x] = (short)extra.dither[ditherrowPos+(x & 3)]; + stats.pixels_out += stopx - startx; + } + + /* fill this dest buffer row */ + if (FBZMODE_AUX_BUFFER_MASK(v.reg[fbzMode]) && v.fbi.auxoffs != -1) + { + short color = (short)v.reg[zaColor]; + int destPos = v.fbi.auxoffs / 2 + scry * v.fbi.rowpixels; + + for (x = startx; x < stopx; x++) + v.fbi.ram[destPos+x]= color; } }; /************************************* - * + *

* Rasterizer generator macro * *************************************/ @@ -5838,7 +5831,7 @@ public void call(short[] destbase, int destbasePos, int y, poly_extent extent, f { dither4 = dither_matrix_4x4; dither4Pos = (y & 3) * 4; - if (!FBZMODE_DITHER_TYPE(FBZMODE)) + if (FBZMODE_DITHER_TYPE(FBZMODE)) { dither = dither4; ditherPos = dither4Pos; @@ -5925,320 +5918,318 @@ public void call(short[] destbase, int destbasePos, int y, poly_extent extent, f final byte[] DITHER4 = dither4; final int DITHER4POS = dither4Pos; - PIXEL_PIPELINE_CALLBACK callback = new PIXEL_PIPELINE_CALLBACK() { - public boolean call(IntRef iterargb, IntRef result) { - /* run the texture pipeline on TMU1 to produce a value in texel */ - /* note that they set LOD min to 8 to "disable" a TMU */ - if (TMUS >= 2 && v.tmu[1].lodmin < (8 << 8)) - texel.value = v.TEXTURE_PIPELINE(v.tmu[1], XX, DITHER4, DITHER4POS, TEXMODE1, texel.value, v.tmu[1].lookup, extra.lodbase1, ITERS1, ITERT1, ITERW1); - - /* run the texture pipeline on TMU0 to produce a final */ - /* result in texel */ - /* note that they set LOD min to 8 to "disable" a TMU */ - if (TMUS >= 1 && v.tmu[0].lodmin < (8 << 8)) { - if (((v.reg[v.tmu[0].reg+trexInit1] >> 18) & 1)==0) - texel.value = v.TEXTURE_PIPELINE(v.tmu[0], XX, DITHER4, DITHER4POS, TEXMODE0, texel.value, v.tmu[0].lookup, extra.lodbase0, ITERS0, ITERT0, ITERW0); - else - texel.value = 64; - } + PIXEL_PIPELINE_CALLBACK callback = (iterargb, result) -> { + /* run the texture pipeline on TMU1 to produce a value in texel */ + /* note that they set LOD min to 8 to "disable" a TMU */ + if (TMUS >= 2 && v.tmu[1].lodmin < (8 << 8)) + texel.value = v.TEXTURE_PIPELINE(v.tmu[1], XX, DITHER4, DITHER4POS, TEXMODE1, texel.value, v.tmu[1].lookup, extra.lodbase1, ITERS1, ITERT1, ITERW1); + + /* run the texture pipeline on TMU0 to produce a final */ + /* result in texel */ + /* note that they set LOD min to 8 to "disable" a TMU */ + if (TMUS >= 1 && v.tmu[0].lodmin < (8 << 8)) { + if (((v.reg[v.tmu[0].reg+trexInit1] >> 18) & 1)==0) + texel.value = v.TEXTURE_PIPELINE(v.tmu[0], XX, DITHER4, DITHER4POS, TEXMODE0, texel.value, v.tmu[0].lookup, extra.lodbase0, ITERS0, ITERT0, ITERW0); + else + texel.value = 64; + } - /* colorpath pipeline selects source colors and does blending */ - // CLAMPED_ARGB(iterr, iterg, iterb, itera, v.reg[FBZCOLORPATH], iterargb); - int r = iterr.value >> 12; - int g = iterg.value >> 12; - int b = iterb.value >> 12; - int a = itera.value >> 12; + /* colorpath pipeline selects source colors and does blending */ + // CLAMPED_ARGB(iterr, iterg, iterb, itera, v.reg[FBZCOLORPATH], iterargb); + int r = iterr.value >> 12; + int g = iterg.value >> 12; + int b = iterb.value >> 12; + int a = itera.value >> 12; + { + int ir; + int ig; + int ib; + int ia; + + if (FBZCP_RGBZW_CLAMP(FBZCOLORPATH)) { - int ir; - int ig; - int ib; - int ia; - - if (!FBZCP_RGBZW_CLAMP(FBZCOLORPATH)) - { - r &= 0xfff; - ir = r; - if (r == 0xfff) - ir = 0; - else if (r == 0x100) - ir = 0xff; - - g &= 0xfff; - ig = g; - if (g == 0xfff) - ig = 0; - else if (g == 0x100) - ig = 0xff; - - b &= 0xfff; - ib = b; - if (b == 0xfff) - ib = 0; - else if (b == 0x100) - ib = 0xff; - - a &= 0xfff; - ia = a; - if (a == 0xfff) - ia = 0; - else if (a == 0x100) - ia = 0xff; - } - else - { - ir = (r < 0) ? 0 : (r > 0xff) ? 0xff : r; - ig = (g < 0) ? 0 : (g > 0xff) ? 0xff : g; - ib = (b < 0) ? 0 : (b > 0xff) ? 0xff : b; - ia = (a < 0) ? 0 : (a > 0xff) ? 0xff : a; - } - iterargb.value = setRegRGBA(ir, ig, ib, ia); + r &= 0xfff; + ir = r; + if (r == 0xfff) + ir = 0; + else if (r == 0x100) + ir = 0xff; + + g &= 0xfff; + ig = g; + if (g == 0xfff) + ig = 0; + else if (g == 0x100) + ig = 0xff; + + b &= 0xfff; + ib = b; + if (b == 0xfff) + ib = 0; + else if (b == 0x100) + ib = 0xff; + + a &= 0xfff; + ia = a; + if (a == 0xfff) + ia = 0; + else if (a == 0x100) + ia = 0xff; } - - // COLORPATH_PIPELINE(v, stats, v.reg[FBZCOLORPATH], v.reg[FBZMODE], v.reg[ALPHAMODE], texel, iterz, iterw, iterargb); - // #define COLORPATH_PIPELINE(VV, STATS, FBZCOLORPATH, FBZMODE, ALPHAMODE, TEXELARGB, ITERZ, ITERW, ITERARGB) \ - int blendr, blendg, blendb, blenda; - int c_other; - int c_local; - - /* compute c_other */ - switch (FBZCP_CC_RGBSELECT(FBZCOLORPATH)) + else { - case 0: /* iterated RGB */ - c_other = iterargb.value; - break; - case 1: /* texture RGB */ - c_other = texel.value; - break; - case 2: /* color1 RGB */ - c_other = v.reg[color1]; - break; - default: /* reserved */ - c_other = 0; - break; + ir = (r < 0) ? 0 : Math.min(r, 0xff); + ig = (g < 0) ? 0 : Math.min(g, 0xff); + ib = (b < 0) ? 0 : Math.min(b, 0xff); + ia = (a < 0) ? 0 : Math.min(a, 0xff); } + iterargb.value = setRegRGBA(ir, ig, ib, ia); + } - /* handle chroma key */ - if (!v.APPLY_CHROMAKEY(stats, FBZMODE, c_other)) - return false; + // COLORPATH_PIPELINE(v, stats, v.reg[FBZCOLORPATH], v.reg[FBZMODE], v.reg[ALPHAMODE], texel, iterz, iterw, iterargb); + // #define COLORPATH_PIPELINE(VV, STATS, FBZCOLORPATH, FBZMODE, ALPHAMODE, TEXELARGB, ITERZ, ITERW, ITERARGB) \ + int blendr, blendg, blendb, blenda; + int c_other; + int c_local; - /* compute a_other */ - switch (FBZCP_CC_ASELECT(FBZCOLORPATH)) - { - case 0: /* iterated alpha */ - c_other = setRegA(c_other, getRegA(iterargb.value)); - break; + /* compute c_other */ + switch (FBZCP_CC_RGBSELECT(FBZCOLORPATH)) + { + case 0: /* iterated RGB */ + c_other = iterargb.value; + break; + case 1: /* texture RGB */ + c_other = texel.value; + break; + case 2: /* color1 RGB */ + c_other = v.reg[color1]; + break; + default: /* reserved */ + c_other = 0; + break; + } - case 1: /* texture alpha */ - c_other = setRegA(c_other, getRegA(texel.value)); - break; + /* handle chroma key */ + if (v.APPLY_CHROMAKEY(stats, FBZMODE, c_other)) + return false; - case 2: /* color1 alpha */ - c_other = setRegA(c_other, getRegA(v.reg[color1])); - break; + /* compute a_other */ + switch (FBZCP_CC_ASELECT(FBZCOLORPATH)) + { + case 0: /* iterated alpha */ + c_other = setRegA(c_other, getRegA(iterargb.value)); + break; - default: /* reserved */ - c_other = setRegA(c_other, 0); - break; - } + case 1: /* texture alpha */ + c_other = setRegA(c_other, getRegA(texel.value)); + break; - /* handle alpha mask */ - if (!v.APPLY_ALPHAMASK(stats, FBZMODE, getRegA(c_other))) - return false; + case 2: /* color1 alpha */ + c_other = setRegA(c_other, getRegA(v.reg[color1])); + break; - /* handle alpha test */ - if (!v.APPLY_ALPHATEST(stats, ALPHAMODE, getRegA(c_other))) - return false; + default: /* reserved */ + c_other = setRegA(c_other, 0); + break; + } - /* compute c_local */ - if (!FBZCP_CC_LOCALSELECT_OVERRIDE(FBZCOLORPATH)) - { - if (!FBZCP_CC_LOCALSELECT(FBZCOLORPATH)) /* iterated RGB */ - c_local = iterargb.value; - else /* color0 RGB */ - c_local = v.reg[color0]; - } - else - { - if ((getRegA(texel.value) & 0x80)==0) /* iterated RGB */ - c_local = iterargb.value; - else /* color0 RGB */ - c_local = v.reg[color0]; - } + /* handle alpha mask */ + if (v.APPLY_ALPHAMASK(stats, FBZMODE, getRegA(c_other))) + return false; + + /* handle alpha test */ + if (v.APPLY_ALPHATEST(stats, ALPHAMODE, getRegA(c_other))) + return false; - /* compute a_local */ - switch (FBZCP_CCA_LOCALSELECT(FBZCOLORPATH)) + /* compute c_local */ + if (!FBZCP_CC_LOCALSELECT_OVERRIDE(FBZCOLORPATH)) + { + if (FBZCP_CC_LOCALSELECT(FBZCOLORPATH)) /* iterated RGB */ + c_local = iterargb.value; + else /* color0 RGB */ + c_local = v.reg[color0]; + } + else + { + if ((getRegA(texel.value) & 0x80)==0) /* iterated RGB */ + c_local = iterargb.value; + else /* color0 RGB */ + c_local = v.reg[color0]; + } + + /* compute a_local */ + switch (FBZCP_CCA_LOCALSELECT(FBZCOLORPATH)) + { + default: + case 0: /* iterated alpha */ + c_local = setRegA(c_local, getRegA(iterargb.value)); + break; + + case 1: /* color0 alpha */ + c_local = setRegA(c_local, getRegA(v.reg[color0])); + break; + + case 2: /* clamped iterated Z[27:20] */ { - default: - case 0: /* iterated alpha */ - c_local = setRegA(c_local, getRegA(iterargb.value)); - break; - - case 1: /* color0 alpha */ - c_local = setRegA(c_local, getRegA(v.reg[color0])); - break; - - case 2: /* clamped iterated Z[27:20] */ - { - int temp = CLAMPED_Zr(iterz.value, FBZCOLORPATH); - c_local = setRegA(c_local, temp & 0xFF); - break; - } - - case 3: /* clamped iterated W[39:32] */ - { - int temp = CLAMPED_Wr(iterw.value, FBZCOLORPATH); /* Voodoo 2 only */ - c_local = setRegA(c_local, temp & 0xFF); - break; - } + int temp = CLAMPED_Zr(iterz.value, FBZCOLORPATH); + c_local = setRegA(c_local, temp & 0xFF); + break; } - /* select zero or c_other */ - if (!FBZCP_CC_ZERO_OTHER(FBZCOLORPATH)) + case 3: /* clamped iterated W[39:32] */ { - r = getRegR(c_other); - g = getRegG(c_other); - b = getRegB(c_other); + int temp = CLAMPED_Wr(iterw.value, FBZCOLORPATH); /* Voodoo 2 only */ + c_local = setRegA(c_local, temp & 0xFF); + break; } - else - r = g = b = 0; + } - /* select zero or a_other */ - if (!FBZCP_CCA_ZERO_OTHER(FBZCOLORPATH)) - a = getRegA(c_other); - else - a = 0; + /* select zero or c_other */ + if (FBZCP_CC_ZERO_OTHER(FBZCOLORPATH)) + { + r = getRegR(c_other); + g = getRegG(c_other); + b = getRegB(c_other); + } + else + r = g = b = 0; - /* subtract c_local */ - if (FBZCP_CC_SUB_CLOCAL(FBZCOLORPATH)) - { - r -= getRegR(c_local); - g -= getRegG(c_local); - b -= getRegB(c_local); - } + /* select zero or a_other */ + if (FBZCP_CCA_ZERO_OTHER(FBZCOLORPATH)) + a = getRegA(c_other); + else + a = 0; - /* subtract a_local */ - if (FBZCP_CCA_SUB_CLOCAL(FBZCOLORPATH)) - a -= getRegA(c_local); + /* subtract c_local */ + if (FBZCP_CC_SUB_CLOCAL(FBZCOLORPATH)) + { + r -= getRegR(c_local); + g -= getRegG(c_local); + b -= getRegB(c_local); + } - /* blend RGB */ - switch (FBZCP_CC_MSELECT(FBZCOLORPATH)) - { - default: /* reserved */ - case 0: /* 0 */ - blendr = blendg = blendb = 0; - break; - - case 1: /* c_local */ - blendr = getRegR(c_local); - blendg = getRegG(c_local); - blendb = getRegB(c_local); - break; - - case 2: /* a_other */ - blendr = blendg = blendb = getRegA(c_other); - break; - - case 3: /* a_local */ - blendr = blendg = blendb = getRegA(c_local); - break; - - case 4: /* texture alpha */ - blendr = blendg = blendb = getRegA(texel.value); - break; - - case 5: /* texture RGB (Voodoo 2 only) */ - blendr = getRegR(texel.value); - blendg = getRegG(texel.value); - blendb = getRegB(texel.value); - break; - } + /* subtract a_local */ + if (FBZCP_CCA_SUB_CLOCAL(FBZCOLORPATH)) + a -= getRegA(c_local); - /* blend alpha */ - switch (FBZCP_CCA_MSELECT(FBZCOLORPATH)) - { - default: /* reserved */ - case 0: /* 0 */ - blenda = 0; - break; - - case 1: /* a_local */ - blenda = getRegA(c_local); - break; - - case 2: /* a_other */ - blenda = getRegA(c_other); - break; - - case 3: /* a_local */ - blenda = getRegA(c_local); - break; - - case 4: /* texture alpha */ - blenda = getRegA(texel.value); - break; - } + /* blend RGB */ + switch (FBZCP_CC_MSELECT(FBZCOLORPATH)) + { + default: /* reserved */ + case 0: /* 0 */ + blendr = blendg = blendb = 0; + break; + + case 1: /* c_local */ + blendr = getRegR(c_local); + blendg = getRegG(c_local); + blendb = getRegB(c_local); + break; + + case 2: /* a_other */ + blendr = blendg = blendb = getRegA(c_other); + break; + + case 3: /* a_local */ + blendr = blendg = blendb = getRegA(c_local); + break; + + case 4: /* texture alpha */ + blendr = blendg = blendb = getRegA(texel.value); + break; + + case 5: /* texture RGB (Voodoo 2 only) */ + blendr = getRegR(texel.value); + blendg = getRegG(texel.value); + blendb = getRegB(texel.value); + break; + } - /* reverse the RGB blend */ - if (!FBZCP_CC_REVERSE_BLEND(FBZCOLORPATH)) - { - blendr ^= 0xff; - blendg ^= 0xff; - blendb ^= 0xff; - } + /* blend alpha */ + switch (FBZCP_CCA_MSELECT(FBZCOLORPATH)) + { + default: /* reserved */ + case 0: /* 0 */ + blenda = 0; + break; + + case 1: /* a_local */ + blenda = getRegA(c_local); + break; + + case 2: /* a_other */ + blenda = getRegA(c_other); + break; + + case 3: /* a_local */ + blenda = getRegA(c_local); + break; + + case 4: /* texture alpha */ + blenda = getRegA(texel.value); + break; + } - /* reverse the alpha blend */ - if (!FBZCP_CCA_REVERSE_BLEND(FBZCOLORPATH)) - blenda ^= 0xff; + /* reverse the RGB blend */ + if (FBZCP_CC_REVERSE_BLEND(FBZCOLORPATH)) + { + blendr ^= 0xff; + blendg ^= 0xff; + blendb ^= 0xff; + } - /* do the blend */ - r = (r * (blendr + 1)) >> 8; - g = (g * (blendg + 1)) >> 8; - b = (b * (blendb + 1)) >> 8; - a = (a * (blenda + 1)) >> 8; + /* reverse the alpha blend */ + if (FBZCP_CCA_REVERSE_BLEND(FBZCOLORPATH)) + blenda ^= 0xff; - /* add clocal or alocal to RGB */ - switch (FBZCP_CC_ADD_ACLOCAL(FBZCOLORPATH)) - { - case 3: /* reserved */ - case 0: /* nothing */ - break; - - case 1: /* add c_local */ - r += getRegR(c_local); - g += getRegG(c_local); - b += getRegB(c_local); - break; - - case 2: /* add_alocal */ - r += getRegA(c_local); - g += getRegA(c_local); - b += getRegA(c_local); - break; - } + /* do the blend */ + r = (r * (blendr + 1)) >> 8; + g = (g * (blendg + 1)) >> 8; + b = (b * (blendb + 1)) >> 8; + a = (a * (blenda + 1)) >> 8; - /* add clocal or alocal to alpha */ - if (FBZCP_CCA_ADD_ACLOCAL(FBZCOLORPATH)!=0) - a += getRegA(c_local); + /* add clocal or alocal to RGB */ + switch (FBZCP_CC_ADD_ACLOCAL(FBZCOLORPATH)) + { + case 3: /* reserved */ + case 0: /* nothing */ + break; + + case 1: /* add c_local */ + r += getRegR(c_local); + g += getRegG(c_local); + b += getRegB(c_local); + break; + + case 2: /* add_alocal */ + r += getRegA(c_local); + g += getRegA(c_local); + b += getRegA(c_local); + break; + } - /* clamp */ - r = CLAMPr(r, 0x00, 0xff); - g = CLAMPr(g, 0x00, 0xff); - b = CLAMPr(b, 0x00, 0xff); - a = CLAMPr(a, 0x00, 0xff); + /* add clocal or alocal to alpha */ + if (FBZCP_CCA_ADD_ACLOCAL(FBZCOLORPATH)!=0) + a += getRegA(c_local); - /* invert */ - if (FBZCP_CC_INVERT_OUTPUT(FBZCOLORPATH)) - { - r ^= 0xff; - g ^= 0xff; - b ^= 0xff; - } - if (FBZCP_CCA_INVERT_OUTPUT(FBZCOLORPATH)) - a ^= 0xff; - result.value = setRegRGBA(r, g, b, a); - return true; + /* clamp */ + r = CLAMPr(r, 0x00, 0xff); + g = CLAMPr(g, 0x00, 0xff); + b = CLAMPr(b, 0x00, 0xff); + a = CLAMPr(a, 0x00, 0xff); + + /* invert */ + if (FBZCP_CC_INVERT_OUTPUT(FBZCOLORPATH)) + { + r ^= 0xff; + g ^= 0xff; + b ^= 0xff; } + if (FBZCP_CCA_INVERT_OUTPUT(FBZCOLORPATH)) + a ^= 0xff; + result.value = setRegRGBA(r, g, b, a); + return true; }; v.PIXEL_PIPELINE(stats, x, y, FBZCOLORPATH, FBZMODE, ALPHAMODE, FOGMODE, iterz, iterw, dither, ditherPos, dither4, dither4Pos, dither_lookup, dither_lookupPos, destbase, destPos, v.fbi.ram, depthPos, callback); @@ -6282,7 +6273,7 @@ else if (a == 0x100) /************************************* - * + *

* Common initialization * *************************************/ @@ -6316,7 +6307,7 @@ static private final class voodoo_draw { boolean screen_update_pending; } - static voodoo_draw vdraw = new voodoo_draw(); + static final voodoo_draw vdraw = new voodoo_draw(); static final private Pic.PIC_EventHandler Voodoo_VerticalBlankTimer = new Pic.PIC_EventHandler() { public void call(int val) { @@ -6325,25 +6316,23 @@ public void call(int val) { } }; - static final private Pic.PIC_EventHandler Voodoo_VerticalTimer = new Pic.PIC_EventHandler() { - public void call(int val) { - if (vdraw.screen_update_pending) - return; - vdraw.v.vblank_off_callback(); + static final private Pic.PIC_EventHandler Voodoo_VerticalTimer = val -> { + if (vdraw.screen_update_pending) + return; + vdraw.v.vblank_off_callback(); - vdraw.frame_start = Pic.PIC_FullIndex(); - Pic.PIC_AddEvent( Voodoo_VerticalBlankTimer, vdraw.vfreq*95/100); + vdraw.frame_start = Pic.PIC_FullIndex(); + Pic.PIC_AddEvent( Voodoo_VerticalBlankTimer, vdraw.vfreq*95/100); - if (!Render.RENDER_StartUpdate()) return; // frameskip + if (Render.RENDER_StartUpdate()) return; // frameskip - // draw all lines at once - for (int y=0;y { + vdraw.screen_update_pending = false; + // abort drawing + Render.RENDER_EndUpdate(true); + + if ((!vdraw.clock_enabled || !vdraw.output_on)&& vdraw.override_on) { + // switching off + Pic.PIC_RemoveEvents(Voodoo_VerticalTimer); + Pic.PIC_RemoveEvents(Voodoo_VerticalBlankTimer); + VGA_draw.VGA_SetOverride(false); + vdraw.override_on=false; + } - // TODO proper implementation of refresh rates and timings - vdraw.vfreq = 1000.0f/60.0f; - if (!vdraw.override_on) { - VGA_draw.VGA_SetOverride(true); - vdraw.override_on=true; - } - vdraw.height=vdraw.v.fbi.height; - Log.log_msg("Voodoo output "+(vdraw.v.fbi.width+1)+"x"+vdraw.v.fbi.height); + if ((vdraw.clock_enabled && vdraw.output_on)) { + // switching on + Pic.PIC_RemoveEvents(Voodoo_VerticalTimer); // shouldn't be needed - Render.RENDER_SetSize(vdraw.v.fbi.width+1, vdraw.v.fbi.height, 16, vdraw.vfreq, 4.0/3.0, false, false); - Voodoo_VerticalTimer.call(0); + // TODO proper implementation of refresh rates and timings + vdraw.vfreq = 1000.0f/60.0f; + if (!vdraw.override_on) { + VGA_draw.VGA_SetOverride(true); + vdraw.override_on=true; } + vdraw.height=vdraw.v.fbi.height; + System.out.println("Voodoo output "+(vdraw.v.fbi.width+1)+"x"+vdraw.v.fbi.height); + + Render.RENDER_SetSize(vdraw.v.fbi.width+1, vdraw.v.fbi.height, 16, vdraw.vfreq, 4.0/3.0, false, false); + Voodoo_VerticalTimer.call(0); } }; @@ -6459,9 +6446,9 @@ private void init_tmu_shared() /* 8-bit RGB (3-3-2) */ // EXTRACT_332_TO_888(val, r, g, b); - r = (((val) >> 0) & 0xe0) | (((val) >> 3) & 0x1c) | (((val) >> 6) & 0x03); - g = (((val) << 3) & 0xe0) | (((val) >> 0) & 0x1c) | (((val) >> 3) & 0x03); - b = (((val) << 6) & 0xc0) | (((val) << 4) & 0x30) | (((val) << 2) & 0xc0) | (((val) << 0) & 0x03); + r = (((val)) & 0xe0) | (((val) >> 3) & 0x1c) | (((val) >> 6) & 0x03); + g = (((val) << 3) & 0xe0) | (((val)) & 0x1c) | (((val) >> 3) & 0x03); + b = (((val) << 6) & 0xc0) | (((val) << 4) & 0x30) | (((val) << 2) & 0xc0) | (((val)) & 0x03); tmushare.rgb332[val] = MAKE_ARGB(0xff, r, g, b); @@ -6472,8 +6459,8 @@ private void init_tmu_shared() tmushare.int8[val] = MAKE_ARGB(0xff, val, val, val); /* 8-bit alpha, intensity */ - a = ((val >> 0) & 0xf0) | ((val >> 4) & 0x0f); - r = ((val << 4) & 0xf0) | ((val << 0) & 0x0f); + a = ((val) & 0xf0) | ((val >> 4) & 0x0f); + r = ((val << 4) & 0xf0) | ((val) & 0x0f); tmushare.ai44[val] = MAKE_ARGB(a, r, r, r); } @@ -6503,8 +6490,8 @@ private void init_tmu_shared() //EXTRACT_4444_TO_8888(val, a, r, g, b); a = (((val) >> 8) & 0xf0) | (((val) >> 12) & 0x0f); r = (((val) >> 4) & 0xf0) | (((val) >> 8) & 0x0f); - g = (((val) >> 0) & 0xf0) | (((val) >> 4) & 0x0f); - b = (((val) << 4) & 0xf0) | (((val) >> 0) & 0x0f); + g = (((val)) & 0xf0) | (((val) >> 4) & 0x0f); + b = (((val) << 4) & 0xf0) | (((val)) & 0x0f); tmushare.argb4444[val] = MAKE_ARGB(a, r, g, b); } } @@ -6521,7 +6508,7 @@ private void init_tmu(tmu_state t, int reg, byte[] memory, int tmem) /* mark the NCC tables dirty and configure their registers */ t.ncc[0].dirty = t.ncc[1].dirty = true; - t.ncc[0].reg = t.reg+nccTable+0; + t.ncc[0].reg = t.reg + nccTable; t.ncc[1].reg = t.reg+nccTable+12; /* create pointers to all the tables */ @@ -6676,7 +6663,7 @@ private void common_start_voodoo(int type, int configFbmem, int configTmumem0, i reg[fbiInit1] = (1 << 1) | (1 << 8) | (1 << 12) | (2 << 20); reg[fbiInit2] = (1 << 6) | (0x100 << 23); reg[fbiInit3] = (2 << 13) | (0xf << 17); - reg[fbiInit4] = (1 << 0); + reg[fbiInit4] = (1); /* initialize banshee registers */ Arrays.fill(banshee.io, 0); @@ -6693,7 +6680,7 @@ private void common_start_voodoo(int type, int configFbmem, int configTmumem0, i } /************************************* - * + *

* Chroma keying macro * *************************************/ @@ -6706,7 +6693,7 @@ public boolean APPLY_CHROMAKEY(stats_block STATS, int FBZMODE, int COLOR) { if (((COLOR ^ reg[chromaKey]) & 0xffffff) == 0) { STATS.chroma_fail++; - return false; + return true; } } @@ -6714,7 +6701,7 @@ public boolean APPLY_CHROMAKEY(stats_block STATS, int FBZMODE, int COLOR) { else { int low, high, test; - int results = 0; + int results; /* check blue */ low = getRegB(reg[chromaKey]); @@ -6745,7 +6732,7 @@ public boolean APPLY_CHROMAKEY(stats_block STATS, int FBZMODE, int COLOR) { if (results != 0) { STATS.chroma_fail++; - return false; + return true; } } else @@ -6753,16 +6740,16 @@ public boolean APPLY_CHROMAKEY(stats_block STATS, int FBZMODE, int COLOR) { if (results == 7) { STATS.chroma_fail++; - return false; + return true; } } } } - return true; + return false; } /************************************* - * + *

* Alpha masking macro * *************************************/ @@ -6772,14 +6759,14 @@ public boolean APPLY_ALPHAMASK(stats_block STATS, int FBZMODE, int AA) { if (((AA) & 1) == 0) { STATS.afunc_fail++; - return false; + return true; } } - return true; + return false; } /************************************* - * + *

* Alpha testing macro * *************************************/ @@ -6791,54 +6778,54 @@ public boolean APPLY_ALPHATEST(stats_block STATS, int ALPHAMODE, int AA) { { case 0: /* alphaOP = never */ STATS.afunc_fail++; - return false; + return true; case 1: /* alphaOP = less than */ if ((AA) >= alpharef) { STATS.afunc_fail++; - return false; + return true; } break; case 2: /* alphaOP = equal */ if ((AA) != alpharef) { STATS.afunc_fail++; - return false; + return true; } break; case 3: /* alphaOP = less than or equal */ if ((AA) > alpharef) { STATS.afunc_fail++; - return false; + return true; } break; case 4: /* alphaOP = greater than */ if ((AA) <= alpharef) { STATS.afunc_fail++; - return false; + return true; } break; case 5: /* alphaOP = not equal */ if ((AA) == alpharef) { STATS.afunc_fail++; - return false; + return true; } break; case 6: /* alphaOP = greater than or equal */ if ((AA) < alpharef) { STATS.afunc_fail++; - return false; + return true; } break; case 7: /* alphaOP = always */ break; } } - return true; + return false; } /*------------------------------------------------- @@ -6867,7 +6854,7 @@ static public int rgba_bilinear_filter(int rgb00, int rgb01, int rgb10, int rgb1 } /************************************* - * + *

* Texture pipeline macro * *************************************/ @@ -7041,7 +7028,7 @@ private int TEXTURE_PIPELINE(tmu_state TT, int XX, byte[] DITHER4s, int DITHER4P } /* select zero/other for RGB */ - if (!TEXMODE_TC_ZERO_OTHER(TEXMODE)) + if (TEXMODE_TC_ZERO_OTHER(TEXMODE)) { tr = getRegR(COTHER); tg = getRegG(COTHER); @@ -7051,7 +7038,7 @@ private int TEXTURE_PIPELINE(tmu_state TT, int XX, byte[] DITHER4s, int DITHER4P tr = tg = tb = 0; /* select zero/other for alpha */ - if (!TEXMODE_TCA_ZERO_OTHER(TEXMODE)) + if (TEXMODE_TCA_ZERO_OTHER(TEXMODE)) ta = getRegA(COTHER); else ta = 0; @@ -7142,7 +7129,7 @@ private int TEXTURE_PIPELINE(tmu_state TT, int XX, byte[] DITHER4s, int DITHER4P } /* reverse the RGB blend */ - if (!TEXMODE_TC_REVERSE_BLEND(TEXMODE)) + if (TEXMODE_TC_REVERSE_BLEND(TEXMODE)) { blendr ^= 0xff; blendg ^= 0xff; @@ -7150,7 +7137,7 @@ private int TEXTURE_PIPELINE(tmu_state TT, int XX, byte[] DITHER4s, int DITHER4P } /* reverse the alpha blend */ - if (!TEXMODE_TCA_REVERSE_BLEND(TEXMODE)) + if (TEXMODE_TCA_REVERSE_BLEND(TEXMODE)) blenda ^= 0xff; /* do the blend */ @@ -7184,10 +7171,10 @@ private int TEXTURE_PIPELINE(tmu_state TT, int XX, byte[] DITHER4s, int DITHER4P ta += getRegA(c_local); /* clamp */ - int rr = (tr < 0) ? 0 : (tr > 0xff) ? 0xff : tr; - int rg = (tg < 0) ? 0 : (tg > 0xff) ? 0xff : tg; - int rb = (tb < 0) ? 0 : (tb > 0xff) ? 0xff : tb; - int ra = (ta < 0) ? 0 : (ta > 0xff) ? 0xff : ta; + int rr = (tr < 0) ? 0 : Math.min(tr, 0xff); + int rg = (tg < 0) ? 0 : Math.min(tg, 0xff); + int rb = (tb < 0) ? 0 : Math.min(tb, 0xff); + int ra = (ta < 0) ? 0 : Math.min(ta, 0xff); int RESULT = setRegRGBA(rr, rg, rb, ra); /* invert */ @@ -7199,7 +7186,7 @@ private int TEXTURE_PIPELINE(tmu_state TT, int XX, byte[] DITHER4s, int DITHER4P } private interface PIXEL_PIPELINE_CALLBACK { - public boolean call(IntRef iterargb, IntRef result); + boolean call(IntRef iterargb, IntRef result); } private void PIXEL_PIPELINE(stats_block STATS, int XX, int YY, int FBZCOLORPATH, int FBZMODE, int ALPHAMODE, int FOGMODE, IntRef ITERZ, LongRef ITERW, byte[] DITHERs, int DITHERPOS, byte[] DITHER4s, int DITHER4POS, byte[] DITHER_LOOKUPs, int DITHER_LOOKUPPOS, short[] destbase, final int destPos, short[] depthbase, final int depthPos, PIXEL_PIPELINE_CALLBACK callback) { @@ -7214,7 +7201,7 @@ private void PIXEL_PIPELINE(stats_block STATS, int XX, int YY, int FBZCOLORPATH, if (FBZMODE_ENABLE_STIPPLE(FBZMODE)) { /* rotate mode */ - if (!FBZMODE_STIPPLE_PATTERN(FBZMODE)) + if (FBZMODE_STIPPLE_PATTERN(FBZMODE)) { reg[stipple] = (reg[stipple] << 1) | (reg[stipple] >> 31); if ((reg[stipple] & 0x80000000) == 0) @@ -7237,7 +7224,7 @@ private void PIXEL_PIPELINE(stats_block STATS, int XX, int YY, int FBZCOLORPATH, } /* compute "floating point" W value (used for depth and fog) */ - if ((ITERW.value & 0xffff00000000l)!=0) + if ((ITERW.value & 0xffff00000000L)!=0) wfloat = 0x0000; else { @@ -7254,7 +7241,7 @@ private void PIXEL_PIPELINE(stats_block STATS, int XX, int YY, int FBZCOLORPATH, /* compute depth value (W or Z) for this pixel */ if (!FBZMODE_WBUFFER_SELECT(FBZMODE)) depthval = CLAMPED_Zr(ITERZ.value, FBZCOLORPATH); - else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) + else if (FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) depthval = wfloat; else { @@ -7287,7 +7274,7 @@ else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) /* the source depth is either the iterated W/Z+bias or a */ /* constant value */ - if (!FBZMODE_DEPTH_SOURCE_COMPARE(FBZMODE)) + if (FBZMODE_DEPTH_SOURCE_COMPARE(FBZMODE)) depthsource = depthval; else depthsource = reg[zaColor] & 0xFFFF; @@ -7374,7 +7361,7 @@ else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) int fogblend = 0; /* if fog_add is zero, we start with the fog color */ - if (!FOGMODE_FOG_ADD(FOGMODE)) { + if (FOGMODE_FOG_ADD(FOGMODE)) { fr = getRegR(fogcolor); fg = getRegG(fogcolor); fb = getRegB(fogcolor); @@ -7383,7 +7370,7 @@ else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) } /* if fog_mult is zero, we subtract the incoming color */ - if (!FOGMODE_FOG_MULT(FOGMODE)) { + if (FOGMODE_FOG_MULT(FOGMODE)) { fr -= r; fg -= g; fb -= b; @@ -7432,7 +7419,7 @@ else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) } /* if fog_mult is 0, we add this to the original color */ - if (!FOGMODE_FOG_MULT(FOGMODE)) { + if (FOGMODE_FOG_MULT(FOGMODE)) { r += fr; g += fg; b += fb; @@ -7516,7 +7503,7 @@ else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) b = (sb * (0x100 - da)) >> 8; break; case 15: /* ASATURATE */ - ta = (sa < (0x100 - da)) ? sa : (0x100 - da); + ta = Math.min(sa, (0x100 - da)); r = (sr * (ta + 1)) >> 8; g = (sg * (ta + 1)) >> 8; b = (sb * (ta + 1)) >> 8; @@ -7595,9 +7582,9 @@ else if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) int dithPos = DITHER_LOOKUPPOS + ((XX & 3) << 1); /* apply dithering to R,G,B */ - r = DITHER_LOOKUPs[dithPos+(r << 3) + 0]; + r = DITHER_LOOKUPs[dithPos + (r << 3)]; g = DITHER_LOOKUPs[dithPos+(g << 3) + 1]; - b = DITHER_LOOKUPs[dithPos+(b << 3) + 0]; + b = DITHER_LOOKUPs[dithPos + (b << 3)]; } else { @@ -7676,7 +7663,7 @@ public boolean InitializeRegisters(byte[] registers) { } /************************************* - * + *

* Handle a read from the Voodoo * memory space * @@ -7695,9 +7682,8 @@ public VoodooPageHandler(int start_page, int stop_page) { } public /*Bitu*/int readw(/*PhysPt*/int addr) { - int address = addr; - if ((address & 2)!=0) - return readd(address-2) >>> 16; + if ((addr & 2)!=0) + return readd(addr -2) >>> 16; return readd(addr) & 0xFFFF; } @@ -7716,10 +7702,6 @@ else if ((offset & (0x800000/4))==0) return -1; } - public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { - Log.exit("No byte handler for write to " + Long.toString(addr, 16)); - } - public void writew(/*PhysPt*/int addr,/*Bitu*/int val) { addr = Paging.PAGING_GetPhysicalAddress(addr); if ((addr & 2)==0) @@ -7736,13 +7718,13 @@ public void writed(/*PhysPt*/int addr,/*Bitu*/int val) { public static VoodooCommon voodoo; - public static Section.SectionFunction Voodoo_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction Voodoo_ShutDown = new Section.SectionFunction() { public void call(Section section) { voodoo=null; } }; - public static Section.SectionFunction Voodoo_Init = new Section.SectionFunction() { + public static final Section.SectionFunction Voodoo_Init = new Section.SectionFunction() { public void call(Section sec) { if (PCI.pci_interface != null) { Section_prop section = (Section_prop)sec; diff --git a/jdosbox/src/main/java/jdos/hardware/mame/poly_draw_scanline_func.java b/jdosbox/src/main/java/jdos/hardware/mame/poly_draw_scanline_func.java index 32641156..85d389ba 100644 --- a/jdosbox/src/main/java/jdos/hardware/mame/poly_draw_scanline_func.java +++ b/jdosbox/src/main/java/jdos/hardware/mame/poly_draw_scanline_func.java @@ -1,5 +1,5 @@ package jdos.hardware.mame; public interface poly_draw_scanline_func { - public void call(short[] dest, int destOffset, int scanline, poly_extent extent, poly_extra_data extradata, int threadid); + void call(short[] dest, int destOffset, int scanline, poly_extent extent, poly_extra_data extradata, int threadid); } diff --git a/jdosbox/src/main/java/jdos/hardware/mame/poly_extent.java b/jdosbox/src/main/java/jdos/hardware/mame/poly_extent.java index e8988ca9..3eb1e76d 100644 --- a/jdosbox/src/main/java/jdos/hardware/mame/poly_extent.java +++ b/jdosbox/src/main/java/jdos/hardware/mame/poly_extent.java @@ -17,5 +17,5 @@ public poly_extent() { } public int startx; /* starting X coordinate (inclusive) */ public int stopx; /* ending X coordinate (exclusive) */ - public Poly.poly_param_extent[] param = new Poly.poly_param_extent[Poly.MAX_VERTEX_PARAMS]; /* starting and dx values for each parameter */ + public final Poly.poly_param_extent[] param = new Poly.poly_param_extent[Poly.MAX_VERTEX_PARAMS]; /* starting and dx values for each parameter */ } diff --git a/jdosbox/src/main/java/jdos/hardware/mame/tmu_state.java b/jdosbox/src/main/java/jdos/hardware/mame/tmu_state.java index 0d51d971..579c9e4d 100644 --- a/jdosbox/src/main/java/jdos/hardware/mame/tmu_state.java +++ b/jdosbox/src/main/java/jdos/hardware/mame/tmu_state.java @@ -25,7 +25,7 @@ public tmu_state() { public int lodmin, lodmax; /* min, max LOD values */ public int lodbias; /* LOD bias */ public int lodmask; /* mask of available LODs */ - public int[] lodoffset = new int[9]; /* offset of texture base for each LOD */ + public final int[] lodoffset = new int[9]; /* offset of texture base for each LOD */ public int detailmax; /* detail clamp */ public int detailbias; /* detail bias */ public int detailscale; /* detail scale */ @@ -35,11 +35,11 @@ public tmu_state() { public int bilinear_mask; /* mask for bilinear resolution (0xf0 for V1, 0xff for V2) */ - public VoodooCommon.ncc_table[] ncc = new VoodooCommon.ncc_table[2]; /* two NCC tables */ + public final VoodooCommon.ncc_table[] ncc = new VoodooCommon.ncc_table[2]; /* two NCC tables */ public int[] lookup; /* currently selected lookup */ - public int[][] texel = new int[16][]; /* texel lookups for each format */ + public final int[][] texel = new int[16][]; /* texel lookups for each format */ - public int[] palette = new int[256]; /* palette lookup table */ - public int[] palettea = new int[256];/* palette+alpha lookup table */ + public final int[] palette = new int[256]; /* palette lookup table */ + public final int[] palettea = new int[256];/* palette+alpha lookup table */ } diff --git a/jdosbox/src/main/java/jdos/hardware/pci/PCI.java b/jdosbox/src/main/java/jdos/hardware/pci/PCI.java index fbef0422..5a5069cf 100644 --- a/jdosbox/src/main/java/jdos/hardware/pci/PCI.java +++ b/jdosbox/src/main/java/jdos/hardware/pci/PCI.java @@ -12,6 +12,8 @@ import jdos.types.LogTypes; import jdos.util.IntRef; +import java.util.Arrays; + public class PCI extends Module_base { static final int PCI_MAX_PCIDEVICES = 10; static final int PCI_MAX_PCIFUNCTIONS = 8; @@ -31,8 +33,8 @@ static public boolean PCI_IsInitialized() { private static /*Bit32u*/int pci_caddress=0; // current PCI addressing private static /*Bitu*/int pci_devices_installed=0; // number of registered PCI devices - private static /*Bit8u*/byte[][][] pci_cfg_data = new byte[PCI_MAX_PCIDEVICES][PCI_MAX_PCIFUNCTIONS][256]; // PCI configuration data - private static PCI_Device[] pci_devices =new PCI_Device[PCI_MAX_PCIDEVICES]; // registered PCI devices + private static final /*Bit8u*/byte[][][] pci_cfg_data = new byte[PCI_MAX_PCIDEVICES][PCI_MAX_PCIFUNCTIONS][256]; // PCI configuration data + private static final PCI_Device[] pci_devices =new PCI_Device[PCI_MAX_PCIDEVICES]; // registered PCI devices // PCI address // 31 - set for a PCI access @@ -41,11 +43,9 @@ static public boolean PCI_IsInitialized() { // 15-11 - device number (slot) (0x0000f800) // 10- 8 - subfunction number (0x00000700) // 7- 2 - config register # (0x000000fc) - static private final IoHandler.IO_WriteHandler write_pci_addr = new IoHandler.IO_WriteHandler() { - public void call(int port, int val, int iolen) { - if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Write PCI address :="+Integer.toString(val, 16)); - pci_caddress=val; - } + static private final IoHandler.IO_WriteHandler write_pci_addr = (port, val, iolen) -> { + if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Write PCI address :="+Integer.toString(val, 16)); + pci_caddress=val; }; static void write_pci_register(PCI_Device dev,/*Bit8u*/int regnum,/*Bit8u*/int value) { @@ -78,44 +78,40 @@ static void write_pci_register(PCI_Device dev,/*Bit8u*/int regnum,/*Bit8u*/int v } } - static private final IoHandler.IO_WriteHandler write_pci = new IoHandler.IO_WriteHandler() { - public void call(int port, int val, int iolen) { - if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Write PCI data :="+Integer.toString(val, 16)+" (len "+iolen+")"); - - // check for enabled/bus 0 - if ((pci_caddress & 0x80ff0000) == 0x80000000) { - int devnum = (pci_caddress >> 11) & 0x1f; - int fctnum = (pci_caddress >> 8) & 0x7; - int regnum = (pci_caddress & 0xfc) + (port & 0x03); - if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL," Write to device "+Integer.toString(devnum, 16)+" register "+Integer.toString(regnum, 16)+" (function "+Integer.toString(fctnum, 16)+") (:="+Integer.toString(val, 16)+")"); - - if (devnum>=pci_devices_installed) return; - PCI_Device masterdev=pci_devices[devnum]; - if (masterdev==null) return; - if (fctnum>masterdev.NumSubdevices()) return; - - PCI_Device dev=masterdev.GetSubdevice(fctnum); - if (dev==null) return; - System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" write "+Integer.toHexString(regnum)+":"+Integer.toHexString(val)); - // write data to PCI device/configuration - switch (iolen) { - case 1: write_pci_register(dev,regnum+0,(val&0xff)); break; - case 2: write_pci_register(dev,regnum+0,(val&0xff)); - write_pci_register(dev,regnum+1,((val>>8)&0xff)); break; - case 4: write_pci_register(dev,regnum+0,(val&0xff)); - write_pci_register(dev,regnum+1,((val>>8)&0xff)); - write_pci_register(dev,regnum+2,((val>>16)&0xff)); - write_pci_register(dev,regnum+3,((val>>24)&0xff)); break; - } + static private final IoHandler.IO_WriteHandler write_pci = (port, val, iolen) -> { + if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Write PCI data :="+Integer.toString(val, 16)+" (len "+iolen+")"); + + // check for enabled/bus 0 + if ((pci_caddress & 0x80ff0000) == 0x80000000) { + int devnum = (pci_caddress >> 11) & 0x1f; + int fctnum = (pci_caddress >> 8) & 0x7; + int regnum = (pci_caddress & 0xfc) + (port & 0x03); + if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL," Write to device "+Integer.toString(devnum, 16)+" register "+Integer.toString(regnum, 16)+" (function "+Integer.toString(fctnum, 16)+") (:="+Integer.toString(val, 16)+")"); + + if (devnum>=pci_devices_installed) return; + PCI_Device masterdev=pci_devices[devnum]; + if (masterdev==null) return; + if (fctnum>masterdev.NumSubdevices()) return; + + PCI_Device dev=masterdev.GetSubdevice(fctnum); + if (dev==null) return; + System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" write "+Integer.toHexString(regnum)+":"+Integer.toHexString(val)); + // write data to PCI device/configuration + switch (iolen) { + case 1: write_pci_register(dev, regnum,(val&0xff)); break; + case 2: write_pci_register(dev, regnum,(val&0xff)); + write_pci_register(dev,regnum+1,((val>>8)&0xff)); break; + case 4: write_pci_register(dev, regnum,(val&0xff)); + write_pci_register(dev,regnum+1,((val>>8)&0xff)); + write_pci_register(dev,regnum+2,((val>>16)&0xff)); + write_pci_register(dev,regnum+3,((val>>24)&0xff)); break; } } }; - static private final IoHandler.IO_ReadHandler read_pci_addr = new IoHandler.IO_ReadHandler() { - public int call(int port, int iolen) { - if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Read PCI address . "+Integer.toString(pci_caddress, 16)); - return pci_caddress; - } + static private final IoHandler.IO_ReadHandler read_pci_addr = (port, iolen) -> { + if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Read PCI address . "+Integer.toString(pci_caddress, 16)); + return pci_caddress; }; // read single 8bit value from register file (special register treatment included) @@ -157,61 +153,59 @@ public int call(int port, int iolen) { return 0xff; } - static private final IoHandler.IO_ReadHandler read_pci = new IoHandler.IO_ReadHandler() { - public int call(int port, int iolen) { - if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Read PCI data . "+Integer.toString(pci_caddress, 16)); + static private final IoHandler.IO_ReadHandler read_pci = (port, iolen) -> { + if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL,"Read PCI data . "+Integer.toString(pci_caddress, 16)); - if ((pci_caddress & 0x80ff0000) == 0x80000000) { - /*Bit8u*/int devnum = (pci_caddress >> 11) & 0x1f; - /*Bit8u*/int fctnum = (pci_caddress >> 8) & 0x7; - /*Bit8u*/int regnum = (pci_caddress & 0xfc) + (port & 0x03); - if (devnum>=pci_devices_installed) return 0xffffffff; - if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL," Read from device "+Integer.toString(devnum, 16)+" register "+Integer.toString(regnum, 16)+" (function "+Integer.toString(fctnum, 16)+"); addr "+Integer.toString(pci_caddress, 16)); + if ((pci_caddress & 0x80ff0000) == 0x80000000) { + /*Bit8u*/int devnum = (pci_caddress >> 11) & 0x1f; + /*Bit8u*/int fctnum = (pci_caddress >> 8) & 0x7; + /*Bit8u*/int regnum = (pci_caddress & 0xfc) + (port & 0x03); + if (devnum>=pci_devices_installed) return 0xffffffff; + if (Log.level<= LogSeverities.LOG_NORMAL) Log.log(LogTypes.LOG_PCI, LogSeverities.LOG_NORMAL," Read from device "+Integer.toString(devnum, 16)+" register "+Integer.toString(regnum, 16)+" (function "+Integer.toString(fctnum, 16)+"); addr "+Integer.toString(pci_caddress, 16)); - PCI_Device masterdev=pci_devices[devnum]; - if (masterdev==null) return 0xffffffff; - if (fctnum>masterdev.NumSubdevices()) return 0xffffffff; + PCI_Device masterdev=pci_devices[devnum]; + if (masterdev==null) return 0xffffffff; + if (fctnum>masterdev.NumSubdevices()) return 0xffffffff; - PCI_Device dev=masterdev.GetSubdevice(fctnum); - if (regnum>3) { - int ii=0; - } - if (dev!=null) { - switch (iolen) { - case 1: - { - int val8=read_pci_register(dev,regnum) & 0xFF; - System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" read1 "+Integer.toHexString(regnum)+":"+Integer.toHexString(val8)); - return val8; - } - case 2: - { - int val16=read_pci_register(dev,regnum) & 0xFFFF; - val16|=(read_pci_register(dev,regnum+1)<<8); - System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" read2 "+Integer.toHexString(regnum)+":"+Integer.toHexString(val16)); - return val16; - } - case 4: - { - int val32=read_pci_register(dev,regnum); - val32|=(read_pci_register(dev,regnum+1)<<8); - val32|=(read_pci_register(dev,regnum+2)<<16); - val32|=(read_pci_register(dev,regnum+3)<<24); - System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" read4 "+Integer.toHexString(regnum)+":"+Integer.toHexString(val32)); - return val32; - } - default: - break; - } + PCI_Device dev=masterdev.GetSubdevice(fctnum); + if (regnum>3) { + int ii=0; + } + if (dev!=null) { + switch (iolen) { + case 1: + { + int val8=read_pci_register(dev,regnum) & 0xFF; + System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" read1 "+Integer.toHexString(regnum)+":"+Integer.toHexString(val8)); + return val8; + } + case 2: + { + int val16=read_pci_register(dev,regnum) & 0xFFFF; + val16|=(read_pci_register(dev,regnum+1)<<8); + System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" read2 "+Integer.toHexString(regnum)+":"+Integer.toHexString(val16)); + return val16; + } + case 4: + { + int val32=read_pci_register(dev,regnum); + val32|=(read_pci_register(dev,regnum+1)<<8); + val32|=(read_pci_register(dev,regnum+2)<<16); + val32|=(read_pci_register(dev,regnum+3)<<24); + System.out.println("PCI 0x"+Integer.toHexString(dev.PCIId())+" read4 "+Integer.toHexString(regnum)+":"+Integer.toHexString(val32)); + return val32; + } + default: + break; } } - return 0xffffffff; } + return 0xffffffff; }; static final private Callback.Handler PCI_PM_Handler = new Callback.Handler() { public int call() { - Log.log_msg("PCI PMode handler, function " + Integer.toString(CPU_Regs.reg_eax.word(), 16)); + System.out.println("PCI PMode handler, function " + Integer.toString(CPU_Regs.reg_eax.word(), 16)); return Callback.CBRET_NONE; } @@ -223,16 +217,16 @@ public String getName() { // queued devices (PCI device registering requested before the PCI framework was initialized) private static final int max_rqueued_devices=16; private static int num_rqueued_devices=0; - private static PCI_Device[] rqueued_devices = new PCI_Device[max_rqueued_devices]; + private static final PCI_Device[] rqueued_devices = new PCI_Device[max_rqueued_devices]; static public PCI pci_interface=null; private boolean initialized; - protected IoHandler.IO_WriteHandleObject[] PCI_WriteHandler = new IoHandler.IO_WriteHandleObject[5]; - protected IoHandler.IO_ReadHandleObject[] PCI_ReadHandler = new IoHandler.IO_ReadHandleObject[5]; + protected final IoHandler.IO_WriteHandleObject[] PCI_WriteHandler = new IoHandler.IO_WriteHandleObject[5]; + protected final IoHandler.IO_ReadHandleObject[] PCI_ReadHandler = new IoHandler.IO_ReadHandleObject[5]; - protected Callback callback_pci = new Callback(); + protected final Callback callback_pci = new Callback(); public /*PhysPt*/int GetPModeCallbackPointer() { return Memory.Real2Phys(callback_pci.Get_RealPointer()); @@ -264,19 +258,19 @@ public void InitializePCI() { } // register PCI device to bus and setup data - public int RegisterPCIDevice(PCI_Device device) { - return RegisterPCIDevice(device, -1); + public void RegisterPCIDevice(PCI_Device device) { + RegisterPCIDevice(device, -1); } - public int RegisterPCIDevice(PCI_Device device, int slot) { - if (device==null) return -1; + public void RegisterPCIDevice(PCI_Device device, int slot) { + if (device==null) return; if (slot>=0) { // specific slot specified, basic check for validity - if (slot>=PCI_MAX_PCIDEVICES) return -1; + if (slot>=PCI_MAX_PCIDEVICES) return; } else { // auto-add to new slot, check if one is still free - if (pci_devices_installed>=PCI_MAX_PCIDEVICES) return -1; + if (pci_devices_installed>=PCI_MAX_PCIDEVICES) return; } if (!initialized) InitializePCI(); @@ -297,11 +291,9 @@ public int RegisterPCIDevice(PCI_Device device, int slot) { pci_devices[slot].AddSubdevice(device); } - return slot; - } + } - return -1; - } + } public void Deinitialize() { initialized=false; @@ -379,8 +371,7 @@ private PCI(Section configuration) { pci_devices_installed=0; - for (int devct=0;devct0) { // register all devices that have been added before the PCI bus was instantiated @@ -397,22 +388,18 @@ private void destroy() { num_rqueued_devices=0; } - public static Section.SectionFunction PCI_ShutDown = new Section.SectionFunction() { - public void call(Section section) { - pci_interface.destroy(); - pci_interface=null; - } + public static final Section.SectionFunction PCI_ShutDown = section -> { + pci_interface.destroy(); + pci_interface=null; }; - public static Section.SectionFunction PCI_Init = new Section.SectionFunction() { - public void call(Section sec) { - Section_prop section = (Section_prop)sec; - if (section.Get_bool("enabled")) { - pci_interface = new PCI(sec); - new PCIHostBridge(); - //new PCIIsaBridge(); - sec.AddDestroyFunction(PCI_ShutDown,false); - } + public static final Section.SectionFunction PCI_Init = sec -> { + Section_prop section = (Section_prop)sec; + if (section.Get_bool("enabled")) { + pci_interface = new PCI(sec); + new PCIHostBridge(); + //new PCIIsaBridge(); + sec.AddDestroyFunction(PCI_ShutDown,false); } }; } diff --git a/jdosbox/src/main/java/jdos/hardware/pci/PCIHostBridge.java b/jdosbox/src/main/java/jdos/hardware/pci/PCIHostBridge.java index a0eeeac1..7e98b0cc 100644 --- a/jdosbox/src/main/java/jdos/hardware/pci/PCIHostBridge.java +++ b/jdosbox/src/main/java/jdos/hardware/pci/PCIHostBridge.java @@ -9,7 +9,7 @@ public PCIHostBridge(){ PCI.pci_interface.RegisterPCIDevice(this, 0); int pci_routing=0xf9000; - Memory.phys_writed(pci_routing + 0x00, 0x52495024); // signature + Memory.phys_writed(pci_routing, 0x52495024); // signature Memory.phys_writew(pci_routing + 0x04, 0x0100); // version Memory.phys_writew(pci_routing + 0x06, 32 + (6 * 16)); // table size Memory.phys_writeb(pci_routing + 0x08, 0x00); // router bus @@ -23,20 +23,20 @@ public PCIHostBridge(){ pci_routing+=0x20; for (int i=0; i<6; i++) { - Memory.phys_writeb(pci_routing + 0x00, 0x00); // bus number + Memory.phys_writeb(pci_routing, 0x00); // bus number Memory.phys_writeb(pci_routing + 0x01, 0x08 + i * 8); // device number pci_routing+=0x02; for (int link=0; link<4; link++) { - Memory.phys_writeb(pci_routing + 0x00, 0x60 + ((i + link) & 3)); // link value + Memory.phys_writeb(pci_routing, 0x60 + ((i + link) & 3)); // link value Memory.phys_writew(pci_routing + 0x01, 0xdef8); // bitmap pci_routing+=0x03; } - Memory.phys_writeb(pci_routing + 0x00, i); // slot + Memory.phys_writeb(pci_routing, i); // slot Memory.phys_writeb(pci_routing + 0x01, 0x00); pci_routing+=0x02; } - Memory.phys_writeb(pci_routing + 0x00, 11); // irq + Memory.phys_writeb(pci_routing, 11); // irq Memory.phys_writeb(pci_routing + 0x01, 10); // irq Memory.phys_writeb(pci_routing + 0x02, 9); // irq Memory.phys_writeb(pci_routing + 0x03, 5); // irq diff --git a/jdosbox/src/main/java/jdos/hardware/pci/PCI_Device.java b/jdosbox/src/main/java/jdos/hardware/pci/PCI_Device.java index 79955a38..06256b35 100644 --- a/jdosbox/src/main/java/jdos/hardware/pci/PCI_Device.java +++ b/jdosbox/src/main/java/jdos/hardware/pci/PCI_Device.java @@ -12,13 +12,14 @@ */ public abstract class PCI_Device { protected /*Bits*/int pci_id, pci_subfunction; - private /*Bit16u*/int vendor_id, device_id; - protected PCI_BAR[] bars = new PCI_BAR[6]; + private final /*Bit16u*/int vendor_id; + private final int device_id; + protected final PCI_BAR[] bars = new PCI_BAR[6]; // subdevices declarations, they will respond to pci functions 1 to 7 // (main device is attached to function 0) private /*Bitu*/int num_subdevices; - private PCI_Device[] subdevices = new PCI_Device[PCI.PCI_MAX_PCIFUNCTIONS-1]; + private final PCI_Device[] subdevices = new PCI_Device[PCI.PCI_MAX_PCIFUNCTIONS-1]; public PCI_Device(/*Bit16u*/int vendor, /*Bit16u*/int device) { pci_id=-1; @@ -55,14 +56,12 @@ public void SetPCIId(/*Bitu*/int number, /*Bits*/int subfct) { } } - public boolean AddSubdevice(PCI_Device dev) { + public void AddSubdevice(PCI_Device dev) { if (num_subdevices< PCI.PCI_MAX_PCIFUNCTIONS-1) { if (subdevices[num_subdevices]!=null) Log.exit("PCI subdevice slot already in use!"); subdevices[num_subdevices]=dev; num_subdevices++; - return true; } - return false; } public void RemoveSubdevice(/*Bits*/int subfct) { @@ -86,8 +85,7 @@ public PCI_Device GetSubdevice(/*Bits*/int subfct) { } public /*Bit16u*/int NumSubdevices() { - if (num_subdevices> PCI.PCI_MAX_PCIFUNCTIONS-1) return PCI.PCI_MAX_PCIFUNCTIONS-1; - return num_subdevices; + return Math.min(num_subdevices, PCI.PCI_MAX_PCIFUNCTIONS - 1); } public /*Bits*/int GetNextSubdeviceNumber() { diff --git a/jdosbox/src/main/java/jdos/hardware/pci/PCI_Memory_BAR.java b/jdosbox/src/main/java/jdos/hardware/pci/PCI_Memory_BAR.java index 09b7287a..36a247be 100644 --- a/jdosbox/src/main/java/jdos/hardware/pci/PCI_Memory_BAR.java +++ b/jdosbox/src/main/java/jdos/hardware/pci/PCI_Memory_BAR.java @@ -4,7 +4,7 @@ import jdos.hardware.Memory; public class PCI_Memory_BAR extends PCI_BAR { - PCI_PageHandler handler; + final PCI_PageHandler handler; public PCI_Memory_BAR(PCI_PageHandler handler) { this.handler = handler; diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/Atapi.java b/jdosbox/src/main/java/jdos/hardware/qemu/Atapi.java index 218164cd..86a2c992 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/Atapi.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/Atapi.java @@ -132,8 +132,7 @@ static private int event_status_media(IDEState s, byte[] buf) { } // :TODO: this function was written really weirdly, why was packet assigned from buf then the two structures overlapped - static private final AtapiCmdCallback cmd_get_event_status_notification = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { + static private final AtapiCmdCallback cmd_get_event_status_notification = (s, buf) -> { // const uint8_t *packet = buf; // // struct { @@ -151,47 +150,47 @@ public void call(IDEState s, byte[] buf) { // uint8_t notification_class; // uint8_t supported_events; // } QEMU_PACKED *gesn_event_header; - int max_len, used_len; + int max_len, used_len; // gesn_cdb = (void *)packet; // gesn_event_header = (void *)buf; // // max_len = be16_to_cpu(gesn_cdb.len); - max_len = be_readw(buf, 0); - int polled = buf[1] & 0xFF; - /* It is fine by the MMC spec to not support async mode operations */ - if ((/*gesn_cdb.*/polled & 0x01)==0) { /* asynchronous mode */ - /* Only polling is supported, asynchronous mode is not. */ - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - } + max_len = be_readw(buf, 0); + int polled = buf[1] & 0xFF; + /* It is fine by the MMC spec to not support async mode operations */ + if ((/*gesn_cdb.*/polled & 0x01)==0) { /* asynchronous mode */ + /* Only polling is supported, asynchronous mode is not. */ + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; + } - /* polling mode operation */ - - /* - * These are the supported events. - * - * We currently only support requests of the 'media' type. - * Notification class requests and supported event classes are bitmasks, - * but they are build from the same values as the "notification class" - * field. - */ - //gesn_event_header.supported_events = 1 << Scsi.GESN_MEDIA; - buf[3] = (byte) 1 << Scsi.GESN_MEDIA; - - /* - * We use |= below to set the class field; other bits in this byte - * are reserved now but this is useful to do if we have to use the - * reserved fields later. - */ - //gesn_event_header.notification_class = 0; - buf[2] = 0; - - /* - * Responses to requests are to be based on request priority. The - * notification_class_request_type enum above specifies the - * priority: upper elements are higher prio than lower ones. - */ + /* polling mode operation */ + + /* + * These are the supported events. + * + * We currently only support requests of the 'media' type. + * Notification class requests and supported event classes are bitmasks, + * but they are build from the same values as the "notification class" + * field. + */ + //gesn_event_header.supported_events = 1 << Scsi.GESN_MEDIA; + buf[3] = (byte) 1 << Scsi.GESN_MEDIA; + + /* + * We use |= below to set the class field; other bits in this byte + * are reserved now but this is useful to do if we have to use the + * reserved fields later. + */ + //gesn_event_header.notification_class = 0; + buf[2] = 0; + + /* + * Responses to requests are to be based on request priority. The + * notification_class_request_type enum above specifies the + * priority: upper elements are higher prio than lower ones. + */ // if (gesn_cdb.class & (1 << GESN_MEDIA)) { // gesn_event_header.notification_class |= GESN_MEDIA; // used_len = event_status_media(s, buf); @@ -200,470 +199,435 @@ public void call(IDEState s, byte[] buf) { // used_len = sizeof(*gesn_event_header); // } // gesn_event_header.len = cpu_to_be16(used_len - sizeof(*gesn_event_header)); - if ((buf[4] & (1 << Scsi.GESN_MEDIA))!=0) { - buf[2] |= Scsi.GESN_MEDIA; - used_len = event_status_media(s, buf); - } else { - buf[2] |= 0x80; - used_len = 4; - } - ide_atapi_cmd_reply(s, used_len, max_len); + if ((buf[4] & (1 << Scsi.GESN_MEDIA))!=0) { + buf[2] |= Scsi.GESN_MEDIA; + used_len = event_status_media(s, buf); + } else { + buf[2] |= 0x80; + used_len = 4; } + ide_atapi_cmd_reply(s, used_len, max_len); }; - static private final AtapiCmdCallback cmd_request_sense = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int max_len = buf[4] & 0xFF; + static private final AtapiCmdCallback cmd_request_sense = (s, buf) -> { + int max_len = buf[4] & 0xFF; - java.util.Arrays.fill(buf, 0, 18, (byte)0); - buf[0] = (byte)(0x70 | (1 << 7)); - buf[2] = (byte)s.sense_key; - buf[7] = 10; - buf[12] = (byte)s.asc; + java.util.Arrays.fill(buf, 0, 18, (byte)0); + buf[0] = (byte)(0x70 | (1 << 7)); + buf[2] = (byte)s.sense_key; + buf[7] = 10; + buf[12] = (byte)s.asc; - if (s.sense_key == Scsi.UNIT_ATTENTION) { - s.sense_key = Scsi.NO_SENSE; - } - - ide_atapi_cmd_reply(s, 18, max_len); + if (s.sense_key == Scsi.UNIT_ATTENTION) { + s.sense_key = Scsi.NO_SENSE; } + + ide_atapi_cmd_reply(s, 18, max_len); }; - static private final AtapiCmdCallback cmd_inquiry = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int max_len = buf[4] & 0xFF; - - buf[0] = 0x05; /* CD-ROM */ - buf[1] = (byte)0x80; /* removable */ - buf[2] = 0x00; /* ISO */ - buf[3] = 0x21; /* ATAPI-2 (XXX: put ATAPI-4 ?) */ - buf[4] = 31; /* additional length */ - buf[5] = 0; /* reserved */ - buf[6] = 0; /* reserved */ - buf[7] = 0; /* reserved */ - padstr8(buf, 8, 8, "QEMU"); - padstr8(buf, 16, 16, "QEMU DVD-ROM"); - padstr8(buf ,32, 4, s.version); - ide_atapi_cmd_reply(s, 36, max_len); - } + static private final AtapiCmdCallback cmd_inquiry = (s, buf) -> { + int max_len = buf[4] & 0xFF; + + buf[0] = 0x05; /* CD-ROM */ + buf[1] = (byte)0x80; /* removable */ + buf[2] = 0x00; /* ISO */ + buf[3] = 0x21; /* ATAPI-2 (XXX: put ATAPI-4 ?) */ + buf[4] = 31; /* additional length */ + buf[5] = 0; /* reserved */ + buf[6] = 0; /* reserved */ + buf[7] = 0; /* reserved */ + padstr8(buf, 8, 8, "QEMU"); + padstr8(buf, 16, 16, "QEMU DVD-ROM"); + padstr8(buf ,32, 4, s.version); + ide_atapi_cmd_reply(s, 36, max_len); }; - static private final AtapiCmdCallback cmd_get_configuration = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int len; - int max_len; + static private final AtapiCmdCallback cmd_get_configuration = (s, buf) -> { + int len; + int max_len; - /* only feature 0 is supported */ - if (buf[2] != 0 || buf[3] != 0) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - } + /* only feature 0 is supported */ + if (buf[2] != 0 || buf[3] != 0) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; + } - /* XXX: could result in alignment problems in some architectures */ - max_len = be_readw(buf, 7); - - /* - * XXX: avoid overflow for io_buffer if max_len is bigger than - * the size of that buffer (dimensioned to max number of - * sectors to transfer at once) - * - * Only a problem if the feature/profiles grow. - */ - if (max_len > 512) { - /* XXX: assume 1 sector */ - max_len = 512; - } - java.util.Arrays.fill(buf, 0, max_len, (byte) 0); - /* - * the number of sectors from the media tells us which profile - * to use as current. 0 means there is no media - */ - if (media_is_dvd(s)) { - be_writew(buf, 6, Scsi.MMC_PROFILE_DVD_ROM); - } else if (media_is_cd(s)) { - be_writew(buf, 6, Scsi.MMC_PROFILE_CD_ROM); - } + /* XXX: could result in alignment problems in some architectures */ + max_len = be_readw(buf, 7); + + /* + * XXX: avoid overflow for io_buffer if max_len is bigger than + * the size of that buffer (dimensioned to max number of + * sectors to transfer at once) + * + * Only a problem if the feature/profiles grow. + */ + if (max_len > 512) { + /* XXX: assume 1 sector */ + max_len = 512; + } + java.util.Arrays.fill(buf, 0, max_len, (byte) 0); + /* + * the number of sectors from the media tells us which profile + * to use as current. 0 means there is no media + */ + if (media_is_dvd(s)) { + be_writew(buf, 6, Scsi.MMC_PROFILE_DVD_ROM); + } else if (media_is_cd(s)) { + be_writew(buf, 6, Scsi.MMC_PROFILE_CD_ROM); + } - buf[10] = 0x02 | 0x01; /* persistent and current */ - len = 12; /* headers: 8 + 4 */ - IntRef index = new IntRef(0); - len += ide_atapi_set_profile(buf, index, Scsi.MMC_PROFILE_DVD_ROM); - len += ide_atapi_set_profile(buf, index, Scsi.MMC_PROFILE_CD_ROM); - be_writed(buf, 0, len - 4); /* data length */ + buf[10] = 0x02 | 0x01; /* persistent and current */ + len = 12; /* headers: 8 + 4 */ + IntRef index = new IntRef(0); + len += ide_atapi_set_profile(buf, index, Scsi.MMC_PROFILE_DVD_ROM); + len += ide_atapi_set_profile(buf, index, Scsi.MMC_PROFILE_CD_ROM); + be_writed(buf, 0, len - 4); /* data length */ - ide_atapi_cmd_reply(s, len, max_len); - } + ide_atapi_cmd_reply(s, len, max_len); }; - static private final AtapiCmdCallback cmd_mode_sense = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int action, code; - int max_len; - - max_len = be_readw(buf, 7); - action = buf[2] >>> 6; - code = buf[2] & 0x3f; - - switch(action) { - case 0: /* current values */ - switch(code) { - case Scsi.MODE_PAGE_R_W_ERROR: /* error recovery */ - be_writew(buf, 0, 16 - 2); - buf[2] = 0x70; - buf[3] = 0; - buf[4] = 0; - buf[5] = 0; - buf[6] = 0; - buf[7] = 0; - - buf[8] = Scsi.MODE_PAGE_R_W_ERROR; - buf[9] = 16 - 10; - buf[10] = 0x00; - buf[11] = 0x05; - buf[12] = 0x00; - buf[13] = 0x00; - buf[14] = 0x00; - buf[15] = 0x00; - ide_atapi_cmd_reply(s, 16, max_len); - break; - case Scsi.MODE_PAGE_AUDIO_CTL: - be_writew(buf, 0, 24 - 2); - buf[2] = 0x70; - buf[3] = 0; - buf[4] = 0; - buf[5] = 0; - buf[6] = 0; - buf[7] = 0; - - buf[8] = Scsi.MODE_PAGE_AUDIO_CTL; - buf[9] = 24 - 10; - /* Fill with CDROM audio volume */ - buf[17] = 0; - buf[19] = 0; - buf[21] = 0; - buf[23] = 0; - - ide_atapi_cmd_reply(s, 24, max_len); - break; - case Scsi.MODE_PAGE_CAPABILITIES: - be_writew(buf, 0, 30 - 2); - buf[2] = 0x70; - buf[3] = 0; - buf[4] = 0; - buf[5] = 0; - buf[6] = 0; - buf[7] = 0; - - buf[8] = Scsi.MODE_PAGE_CAPABILITIES; - buf[9] = 30 - 10; - buf[10] = 0x3b; /* read CDR/CDRW/DVDROM/DVDR/DVDRAM */ - buf[11] = 0x00; - - /* Claim PLAY_AUDIO capability (0x01) since some Linux - code checks for this to automount media. */ - buf[12] = 0x71; - buf[13] = 3 << 5; - buf[14] = (1 << 0) | (1 << 3) | (1 << 5); - if (s.tray_locked) { - buf[14] |= 1 << 1; - } - buf[15] = 0x00; /* No volume & mute control, no changer */ - be_writew(buf, 16, 704); /* 4x read speed */ - buf[18] = 0; /* Two volume levels */ - buf[19] = 2; - be_writew(buf, 20, 512); /* 512k buffer */ - be_writew(buf, 22, 704); /* 4x read speed current */ - buf[24] = 0; - buf[25] = 0; - buf[26] = 0; - buf[27] = 0; - buf[28] = 0; - buf[29] = 0; - ide_atapi_cmd_reply(s, 30, max_len); - break; - default: - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; + static private final AtapiCmdCallback cmd_mode_sense = (s, buf) -> { + int action, code; + int max_len; + + max_len = be_readw(buf, 7); + action = buf[2] >>> 6; + code = buf[2] & 0x3f; + + switch(action) { + case 0: /* current values */ + switch(code) { + case Scsi.MODE_PAGE_R_W_ERROR: /* error recovery */ + be_writew(buf, 0, 16 - 2); + buf[2] = 0x70; + buf[3] = 0; + buf[4] = 0; + buf[5] = 0; + buf[6] = 0; + buf[7] = 0; + + buf[8] = Scsi.MODE_PAGE_R_W_ERROR; + buf[9] = 16 - 10; + buf[10] = 0x00; + buf[11] = 0x05; + buf[12] = 0x00; + buf[13] = 0x00; + buf[14] = 0x00; + buf[15] = 0x00; + ide_atapi_cmd_reply(s, 16, max_len); + break; + case Scsi.MODE_PAGE_AUDIO_CTL: + be_writew(buf, 0, 24 - 2); + buf[2] = 0x70; + buf[3] = 0; + buf[4] = 0; + buf[5] = 0; + buf[6] = 0; + buf[7] = 0; + + buf[8] = Scsi.MODE_PAGE_AUDIO_CTL; + buf[9] = 24 - 10; + /* Fill with CDROM audio volume */ + buf[17] = 0; + buf[19] = 0; + buf[21] = 0; + buf[23] = 0; + + ide_atapi_cmd_reply(s, 24, max_len); + break; + case Scsi.MODE_PAGE_CAPABILITIES: + be_writew(buf, 0, 30 - 2); + buf[2] = 0x70; + buf[3] = 0; + buf[4] = 0; + buf[5] = 0; + buf[6] = 0; + buf[7] = 0; + + buf[8] = Scsi.MODE_PAGE_CAPABILITIES; + buf[9] = 30 - 10; + buf[10] = 0x3b; /* read CDR/CDRW/DVDROM/DVDR/DVDRAM */ + buf[11] = 0x00; + + /* Claim PLAY_AUDIO capability (0x01) since some Linux + code checks for this to automount media. */ + buf[12] = 0x71; + buf[13] = 3 << 5; + buf[14] = (1) | (1 << 3) | (1 << 5); + if (s.tray_locked) { + buf[14] |= 1 << 1; } + buf[15] = 0x00; /* No volume & mute control, no changer */ + be_writew(buf, 16, 704); /* 4x read speed */ + buf[18] = 0; /* Two volume levels */ + buf[19] = 2; + be_writew(buf, 20, 512); /* 512k buffer */ + be_writew(buf, 22, 704); /* 4x read speed current */ + buf[24] = 0; + buf[25] = 0; + buf[26] = 0; + buf[27] = 0; + buf[28] = 0; + buf[29] = 0; + ide_atapi_cmd_reply(s, 30, max_len); break; - case 1: /* changeable values */ - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - case 2: /* default values */ + default: ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); return; - default: - case 3: /* saved values */ - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_SAVING_PARAMETERS_NOT_SUPPORTED); - break; } + break; + case 1: /* changeable values */ + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; + case 2: /* default values */ + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; + default: + case 3: /* saved values */ + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_SAVING_PARAMETERS_NOT_SUPPORTED); + break; } }; - static private final AtapiCmdCallback cmd_test_unit_ready = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - /* Not Ready Conditions are already handled in ide_atapi_cmd(), so if we - * come here, we know that it's ready. */ - ide_atapi_cmd_ok(s); - } + static private final AtapiCmdCallback cmd_test_unit_ready = (s, buf) -> { + /* Not Ready Conditions are already handled in ide_atapi_cmd(), so if we + * come here, we know that it's ready. */ + ide_atapi_cmd_ok(s); }; - static private final AtapiCmdCallback cmd_prevent_allow_medium_removal = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - s.tray_locked = (buf[4] & 1) !=0; - Block.bdrv_lock_medium(s.bs, (buf[4] & 1)!=0); - ide_atapi_cmd_ok(s); - } + static private final AtapiCmdCallback cmd_prevent_allow_medium_removal = (s, buf) -> { + s.tray_locked = (buf[4] & 1) !=0; + Block.bdrv_lock_medium(s.bs, (buf[4] & 1)!=0); + ide_atapi_cmd_ok(s); }; - static private final AtapiCmdCallback cmd_read = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int nb_sectors; - long lba; - - if ((buf[0] & 0xFF) == GPCMD_READ_10) { - nb_sectors = be_readw(buf, 7); - } else { - nb_sectors = (int)be_readd(buf, 6); - } + static private final AtapiCmdCallback cmd_read = (s, buf) -> { + int nb_sectors; + long lba; - lba = be_readd(buf, 2); - if (nb_sectors == 0) { - ide_atapi_cmd_ok(s); - return; - } + if ((buf[0] & 0xFF) == GPCMD_READ_10) { + nb_sectors = be_readw(buf, 7); + } else { + nb_sectors = (int)be_readd(buf, 6); + } - ide_atapi_cmd_read(s, lba, nb_sectors, 2048); + lba = be_readd(buf, 2); + if (nb_sectors == 0) { + ide_atapi_cmd_ok(s); + return; } + + ide_atapi_cmd_read(s, lba, nb_sectors, 2048); }; - static private final AtapiCmdCallback cmd_read_cd = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int nb_sectors, transfer_request; - long lba; + static private final AtapiCmdCallback cmd_read_cd = (s, buf) -> { + int nb_sectors, transfer_request; + long lba; - nb_sectors = ((buf[6] & 0xFF) << 16) | ((buf[7] & 0xFF) << 8) | (buf[8] & 0xFF); - lba = be_readd(buf, 2); + nb_sectors = ((buf[6] & 0xFF) << 16) | ((buf[7] & 0xFF) << 8) | (buf[8] & 0xFF); + lba = be_readd(buf, 2); - if (nb_sectors == 0) { - ide_atapi_cmd_ok(s); - return; - } + if (nb_sectors == 0) { + ide_atapi_cmd_ok(s); + return; + } - transfer_request = buf[9] & 0xFF; - switch(transfer_request & 0xf8) { - case 0x00: - /* nothing */ - ide_atapi_cmd_ok(s); - break; - case 0x10: - /* normal read */ - ide_atapi_cmd_read(s, lba, nb_sectors, 2048); - break; - case 0xf8: - /* read all data */ - ide_atapi_cmd_read(s, lba, nb_sectors, 2352); - break; - default: - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, - ASC_INV_FIELD_IN_CMD_PACKET); - break; - } + transfer_request = buf[9] & 0xFF; + switch(transfer_request & 0xf8) { + case 0x00: + /* nothing */ + ide_atapi_cmd_ok(s); + break; + case 0x10: + /* normal read */ + ide_atapi_cmd_read(s, lba, nb_sectors, 2048); + break; + case 0xf8: + /* read all data */ + ide_atapi_cmd_read(s, lba, nb_sectors, 2352); + break; + default: + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET); + break; } }; - static private final AtapiCmdCallback cmd_seek = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - long lba; - long total_sectors = s.nb_sectors >> 2; + static private final AtapiCmdCallback cmd_seek = (s, buf) -> { + long lba; + long total_sectors = s.nb_sectors >> 2; - lba = be_readd(buf, 2); - if (lba >= total_sectors) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_LOGICAL_BLOCK_OOR); - return; - } - - ide_atapi_cmd_ok(s); + lba = be_readd(buf, 2); + if (lba >= total_sectors) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_LOGICAL_BLOCK_OOR); + return; } - }; - static private final AtapiCmdCallback cmd_start_stop_unit = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int sense; - boolean start = (buf[4] & 1) != 0; - boolean loej = (buf[4] & 2) != 0; /* load on start, eject on !start */ + ide_atapi_cmd_ok(s); + }; - if (loej) { - if (!start && !s.tray_open && s.tray_locked) { - sense = Block.bdrv_is_inserted(s.bs) ? Scsi.NOT_READY : Scsi.ILLEGAL_REQUEST; - ide_atapi_cmd_error(s, sense, ASC_MEDIA_REMOVAL_PREVENTED); - return; - } + static private final AtapiCmdCallback cmd_start_stop_unit = (s, buf) -> { + int sense; + boolean start = (buf[4] & 1) != 0; + boolean loej = (buf[4] & 2) != 0; /* load on start, eject on !start */ - if (s.tray_open != !start) { - Block.bdrv_eject(s.bs, !start); - s.tray_open = !start; - } + if (loej) { + if (!start && !s.tray_open && s.tray_locked) { + sense = Block.bdrv_is_inserted(s.bs) ? Scsi.NOT_READY : Scsi.ILLEGAL_REQUEST; + ide_atapi_cmd_error(s, sense, ASC_MEDIA_REMOVAL_PREVENTED); + return; } - ide_atapi_cmd_ok(s); + if (s.tray_open == start) { + Block.bdrv_eject(s.bs, !start); + s.tray_open = !start; + } } + + ide_atapi_cmd_ok(s); }; - static private final AtapiCmdCallback cmd_mechanism_status = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int max_len = be_readw(buf, 8); - - be_writew(buf, 0, 0); - /* no current LBA */ - buf[2] = 0; - buf[3] = 0; - buf[4] = 0; - buf[5] = 1; - be_writew(buf, 6, 0); - ide_atapi_cmd_reply(s, 8, max_len); - } + static private final AtapiCmdCallback cmd_mechanism_status = (s, buf) -> { + int max_len = be_readw(buf, 8); + + be_writew(buf, 0, 0); + /* no current LBA */ + buf[2] = 0; + buf[3] = 0; + buf[4] = 0; + buf[5] = 1; + be_writew(buf, 6, 0); + ide_atapi_cmd_reply(s, 8, max_len); }; - static private final AtapiCmdCallback cmd_read_toc_pma_atip = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int format, msf, start_track, len; - int max_len; - long total_sectors = s.nb_sectors >> 2; - - max_len = be_readw(buf, 7); - format = (buf[9] & 0xFF) >> 6; - msf = ((buf[1] & 0xFF) >> 1) & 1; - start_track = buf[6] & 0xFF; - - switch(format) { - case 0: - len = Cdrom.cdrom_read_toc(total_sectors, buf, msf, start_track); - if (len < 0) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - } - ide_atapi_cmd_reply(s, len, max_len); - break; - case 1: - /* multi session : only a single session defined */ - java.util.Arrays.fill(buf, 0, 12, (byte)0); - buf[1] = 0x0a; - buf[2] = 0x01; - buf[3] = 0x01; - ide_atapi_cmd_reply(s, 12, max_len); - break; - case 2: - len = Cdrom.cdrom_read_toc_raw(total_sectors, buf, msf, start_track); - if (len < 0) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - } - ide_atapi_cmd_reply(s, len, max_len); - break; - default: + static private final AtapiCmdCallback cmd_read_toc_pma_atip = (s, buf) -> { + int format, msf, start_track, len; + int max_len; + long total_sectors = s.nb_sectors >> 2; + + max_len = be_readw(buf, 7); + format = (buf[9] & 0xFF) >> 6; + msf = ((buf[1] & 0xFF) >> 1) & 1; + start_track = buf[6] & 0xFF; + + switch(format) { + case 0: + len = Cdrom.cdrom_read_toc(total_sectors, buf, msf, start_track); + if (len < 0) { ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; + } + ide_atapi_cmd_reply(s, len, max_len); + break; + case 1: + /* multi session : only a single session defined */ + java.util.Arrays.fill(buf, 0, 12, (byte)0); + buf[1] = 0x0a; + buf[2] = 0x01; + buf[3] = 0x01; + ide_atapi_cmd_reply(s, 12, max_len); + break; + case 2: + len = Cdrom.cdrom_read_toc_raw(total_sectors, buf, msf, start_track); + if (len < 0) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; } + ide_atapi_cmd_reply(s, len, max_len); + break; + default: + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); } }; - static private final AtapiCmdCallback cmd_read_cdvd_capacity = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - long total_sectors = s.nb_sectors >> 2; + static private final AtapiCmdCallback cmd_read_cdvd_capacity = (s, buf) -> { + long total_sectors = s.nb_sectors >> 2; - /* NOTE: it is really the number of sectors minus 1 */ - be_writed(buf, 0, total_sectors - 1); - be_writed(buf, 4, 2048); - ide_atapi_cmd_reply(s, 8, 8); - } + /* NOTE: it is really the number of sectors minus 1 */ + be_writed(buf, 0, total_sectors - 1); + be_writed(buf, 4, 2048); + ide_atapi_cmd_reply(s, 8, 8); }; - static private final AtapiCmdCallback cmd_read_disc_information = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int type = buf[1] & 7; - int max_len = be_readw(buf, 7); + static private final AtapiCmdCallback cmd_read_disc_information = (s, buf) -> { + int type = buf[1] & 7; + int max_len = be_readw(buf, 7); - /* Types 1/2 are only defined for Blu-Ray. */ - if (type != 0) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - } - - java.util.Arrays.fill(buf, 0, 34, (byte)0); - buf[1] = 32; - buf[2] = 0xe; /* last session complete, disc finalized */ - buf[3] = 1; /* first track on disc */ - buf[4] = 1; /* # of sessions */ - buf[5] = 1; /* first track of last session */ - buf[6] = 1; /* last track of last session */ - buf[7] = 0x20; /* unrestricted use */ - buf[8] = 0x00; /* CD-ROM or DVD-ROM */ - /* 9-10-11: most significant byte corresponding bytes 4-5-6 */ - /* 12-23: not meaningful for CD-ROM or DVD-ROM */ - /* 24-31: disc bar code */ - /* 32: disc application code */ - /* 33: number of OPC tables */ - - ide_atapi_cmd_reply(s, 34, max_len); + /* Types 1/2 are only defined for Blu-Ray. */ + if (type != 0) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; } + + java.util.Arrays.fill(buf, 0, 34, (byte)0); + buf[1] = 32; + buf[2] = 0xe; /* last session complete, disc finalized */ + buf[3] = 1; /* first track on disc */ + buf[4] = 1; /* # of sessions */ + buf[5] = 1; /* first track of last session */ + buf[6] = 1; /* last track of last session */ + buf[7] = 0x20; /* unrestricted use */ + buf[8] = 0x00; /* CD-ROM or DVD-ROM */ + /* 9-10-11: most significant byte corresponding bytes 4-5-6 */ + /* 12-23: not meaningful for CD-ROM or DVD-ROM */ + /* 24-31: disc bar code */ + /* 32: disc application code */ + /* 33: number of OPC tables */ + + ide_atapi_cmd_reply(s, 34, max_len); }; - static private final AtapiCmdCallback cmd_read_dvd_structure = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - int max_len; - int media = buf[1] & 0xFF; - int format = buf[7] & 0xFF; - int ret; + static private final AtapiCmdCallback cmd_read_dvd_structure = (s, buf) -> { + int max_len; + int media = buf[1] & 0xFF; + int format = buf[7] & 0xFF; + int ret; - max_len = be_readw(buf, 8); + max_len = be_readw(buf, 8); - if (format < 0xff) { - if (media_is_cd(s)) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INCOMPATIBLE_FORMAT); - return; - } else if (!media_present(s)) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - return; - } + if (format < 0xff) { + if (media_is_cd(s)) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INCOMPATIBLE_FORMAT); + return; + } else if (!media_present(s)) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + return; } + } - java.util.Arrays.fill(buf, 0, max_len > IDE_DMA_BUF_SECTORS * 512 + 4 ? IDE_DMA_BUF_SECTORS * 512 + 4 : max_len, (byte)0); + java.util.Arrays.fill(buf, 0, Math.min(max_len, IDE_DMA_BUF_SECTORS * 512 + 4), (byte)0); - if ((format>=0 && format<=0x7f) || format == 0xff) { - if (media == 0) { - ret = ide_dvd_read_structure(s, format, buf, buf); + if ((format>=0 && format<=0x7f) || format == 0xff) { + if (media == 0) { + ret = ide_dvd_read_structure(s, format, buf, buf); - if (ret < 0) { - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, -ret); - } else { - ide_atapi_cmd_reply(s, ret, max_len); - } + if (ret < 0) { + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, -ret); } else { - /* TODO: BD support, fall through for now */ - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + ide_atapi_cmd_reply(s, ret, max_len); } - } else { - switch (format) { - /* Generic disk structures */ - case 0x80: /* TODO: AACS volume identifier */ - case 0x81: /* TODO: AACS media serial number */ - case 0x82: /* TODO: AACS media identifier */ - case 0x83: /* TODO: AACS media key block */ - case 0x90: /* TODO: List of recognized format layers */ - case 0xc0: /* TODO: Write protection status */ - default: + } else { + /* TODO: BD support, fall through for now */ ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); - break; } + } else { + switch (format) { + /* Generic disk structures */ + case 0x80: /* TODO: AACS volume identifier */ + case 0x81: /* TODO: AACS media serial number */ + case 0x82: /* TODO: AACS media identifier */ + case 0x83: /* TODO: AACS media key block */ + case 0x90: /* TODO: List of recognized format layers */ + case 0xc0: /* TODO: Write protection status */ + default: + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET); + break; } } }; - static private final AtapiCmdCallback cmd_set_speed = new AtapiCmdCallback() { - public void call(IDEState s, byte[] buf) { - ide_atapi_cmd_ok(s); - } - }; + static private final AtapiCmdCallback cmd_set_speed = (s, buf) -> ide_atapi_cmd_ok(s); /* * Only commands flagged as ALLOW_UA are allowed to run under a @@ -678,16 +642,16 @@ public void call(IDEState s, byte[] buf) { */ static private final int CHECK_READY = 0x02; - static private interface AtapiCmdCallback { - public void call(IDEState s, byte[] buf); + private interface AtapiCmdCallback { + void call(IDEState s, byte[] buf); } static private final class AtapiCmd { public AtapiCmd(AtapiCmdCallback cb, int flags) { this.handler = cb; this.flags = flags; } - AtapiCmdCallback handler; - int flags; + final AtapiCmdCallback handler; + final int flags; } static private final AtapiCmd[] atapi_cmd_table = new AtapiCmd[0x100]; @@ -798,7 +762,7 @@ static private void ide_atapi_io_error(IDEState s, int ret) { } /* The whole ATAPI transfer logic is handled in this function */ - static public Internal.EndTransferFunc ide_atapi_cmd_reply_end = new Internal.EndTransferFunc() { + static public final Internal.EndTransferFunc ide_atapi_cmd_reply_end = new Internal.EndTransferFunc() { public void call(Internal.IDEState s) { int byte_count_limit, size, ret; if (DEBUG_IDE_ATAPI) @@ -903,8 +867,7 @@ static private void ide_atapi_cmd_read_pio(IDEState s, long lba, int nb_sectors, } - static public Internal.EndTransferFunc ide_atapi_cmd = new Internal.EndTransferFunc() { - public void call(Internal.IDEState s) { + static public final Internal.EndTransferFunc ide_atapi_cmd = s -> { // #ifdef DEBUG_IDE_ATAPI // { // int i; @@ -915,48 +878,47 @@ public void call(Internal.IDEState s) { // printf("\n"); // } // #endif - /* - * If there's a UNIT_ATTENTION condition pending, only command flagged with - * ALLOW_UA are allowed to complete. with other commands getting a CHECK - * condition response unless a higher priority status, defined by the drive - * here, is pending. - */ - if (s.sense_key == Scsi.UNIT_ATTENTION && (atapi_cmd_table[s.io_buffer[0] & 0xFF].flags & ALLOW_UA)==0) { - ide_atapi_cmd_check_status(s); - return; - } - /* - * When a CD gets changed, we have to report an ejected state and - * then a loaded state to guests so that they detect tray - * open/close and media change events. Guests that do not use - * GET_EVENT_STATUS_NOTIFICATION to detect such tray open/close - * states rely on this behavior. - */ - if (!s.tray_open && Block.bdrv_is_inserted(s.bs) && s.cdrom_changed) { - ide_atapi_cmd_error(s, Scsi.NOT_READY, ASC_MEDIUM_NOT_PRESENT); - - s.cdrom_changed = false; - s.sense_key = Scsi.UNIT_ATTENTION; - s.asc = ASC_MEDIUM_MAY_HAVE_CHANGED; - return; - } + /* + * If there's a UNIT_ATTENTION condition pending, only command flagged with + * ALLOW_UA are allowed to complete. with other commands getting a CHECK + * condition response unless a higher priority status, defined by the drive + * here, is pending. + */ + if (s.sense_key == Scsi.UNIT_ATTENTION && (atapi_cmd_table[s.io_buffer[0] & 0xFF].flags & ALLOW_UA)==0) { + ide_atapi_cmd_check_status(s); + return; + } + /* + * When a CD gets changed, we have to report an ejected state and + * then a loaded state to guests so that they detect tray + * open/close and media change events. Guests that do not use + * GET_EVENT_STATUS_NOTIFICATION to detect such tray open/close + * states rely on this behavior. + */ + if (!s.tray_open && Block.bdrv_is_inserted(s.bs) && s.cdrom_changed) { + ide_atapi_cmd_error(s, Scsi.NOT_READY, ASC_MEDIUM_NOT_PRESENT); - /* Report a Not Ready condition if appropriate for the command */ - if ((atapi_cmd_table[s.io_buffer[0] & 0xFF].flags & CHECK_READY)!=0 && - (!media_present(s) || !Block.bdrv_is_inserted(s.bs))) - { - ide_atapi_cmd_error(s, Scsi.NOT_READY, ASC_MEDIUM_NOT_PRESENT); - return; - } + s.cdrom_changed = false; + s.sense_key = Scsi.UNIT_ATTENTION; + s.asc = ASC_MEDIUM_MAY_HAVE_CHANGED; + return; + } - /* Execute the command */ - if (atapi_cmd_table[s.io_buffer[0] & 0xFF].handler!=null) { - atapi_cmd_table[s.io_buffer[0] & 0xFF].handler.call(s, s.io_buffer); - return; - } + /* Report a Not Ready condition if appropriate for the command */ + if ((atapi_cmd_table[s.io_buffer[0] & 0xFF].flags & CHECK_READY)!=0 && + (!media_present(s) || !Block.bdrv_is_inserted(s.bs))) + { + ide_atapi_cmd_error(s, Scsi.NOT_READY, ASC_MEDIUM_NOT_PRESENT); + return; + } - ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_ILLEGAL_OPCODE); + /* Execute the command */ + if (atapi_cmd_table[s.io_buffer[0] & 0xFF].handler!=null) { + atapi_cmd_table[s.io_buffer[0] & 0xFF].handler.call(s, s.io_buffer); + return; } + + ide_atapi_cmd_error(s, Scsi.ILLEGAL_REQUEST, ASC_ILLEGAL_OPCODE); }; static private void ide_atapi_cmd_check_status(IDEState s) { @@ -1030,7 +992,7 @@ public void call(Object opaque, int ret) { s.bus.dma.iov.iov_len = n * 4 * 512; QemuCommon.qemu_iovec_init_external(s.bus.dma.qiov, s.bus.dma.iov, 1); - s.bus.dma.aiocb = Block.bdrv_aio_readv(s.bs, (long)s.lba << 2, s.bus.dma.qiov, n * 4, ide_atapi_cmd_read_dma_cb, s); + s.bus.dma.aiocb = Block.bdrv_aio_readv(s.bs, s.lba << 2, s.bus.dma.qiov, n * 4, ide_atapi_cmd_read_dma_cb, s); return; } diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/Block.java b/jdosbox/src/main/java/jdos/hardware/qemu/Block.java index f6b74355..8c3c4271 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/Block.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/Block.java @@ -12,10 +12,10 @@ public class Block { static public final int BIOS_ATA_TRANSLATION_LARGE = 3; static public final int BIOS_ATA_TRANSLATION_RECHS = 4; - static private Vector bdrv_drivers = new Vector(); - static private Vector bdrv_states = new Vector(); - static private String[] whitelist = new String[0]; - static private boolean use_bdrv_whitelist = false; + static private final Vector bdrv_drivers = new Vector<>(); + static private final Vector bdrv_states = new Vector<>(); + static private final String[] whitelist = new String[0]; + static private final boolean use_bdrv_whitelist = false; static private final int NOT_DONE = 0x7fffffff; /* used while emulated sync operation in progress */ @@ -36,16 +36,16 @@ public class Block { static public final int BDRV_SECTOR_BITS = 9; static public final int BDRV_SECTOR_SIZE = (1 << BDRV_SECTOR_BITS); - static public final int BDRV_SECTOR_MASK = ~(BDRV_SECTOR_SIZE - 1); + static public final int BDRV_SECTOR_MASK = -BDRV_SECTOR_SIZE; public static final int BDRV_ACCT_READ = 0; public static final int BDRV_ACCT_WRITE = 1; public static final int BDRV_ACCT_FLUSH = 2; public static final int BDRV_MAX_IOTYPE = 3; - public static enum BlockErrorAction {BLOCK_ERR_REPORT, BLOCK_ERR_IGNORE, BLOCK_ERR_STOP_ENOSPC,BLOCK_ERR_STOP_ANY} + public enum BlockErrorAction {BLOCK_ERR_REPORT, BLOCK_ERR_IGNORE, BLOCK_ERR_STOP_ENOSPC,BLOCK_ERR_STOP_ANY} - public static enum BlockQMPEventAction {BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP} + public enum BlockQMPEventAction {BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP} static long get_clock() { return System.currentTimeMillis()*1000; @@ -92,7 +92,7 @@ static public class BlockDriverState { public Object dev_opaque; public String filename; - public String backing_file=""; /* if non zero, the image is a diff of this file image */ + public final String backing_file=""; /* if non zero, the image is a diff of this file image */ public String backing_format; /* if non-zero and backing_file exists */ public boolean is_temporary; @@ -113,9 +113,9 @@ static public class BlockDriverState { public boolean io_limits_enabled; /* I/O stats (display with "info blockstats"). */ - public long[] nr_bytes = new long[BDRV_MAX_IOTYPE]; - public long[] nr_ops = new long[BDRV_MAX_IOTYPE]; - public long[] total_time_ns = new long[BDRV_MAX_IOTYPE]; + public final long[] nr_bytes = new long[BDRV_MAX_IOTYPE]; + public final long[] nr_ops = new long[BDRV_MAX_IOTYPE]; + public final long[] total_time_ns = new long[BDRV_MAX_IOTYPE]; public long wr_highest_sector; /* Whether the disk can expand beyond total_sectors */ @@ -149,7 +149,7 @@ static private class BlockDriverStateRef { } /* Callbacks for block device models */ - static public interface BlockDevOps { + public interface BlockDevOps { /* * Runs when virtual media changed (monitor commands eject, change) * Argument load is true on load and false on eject. @@ -157,8 +157,8 @@ static public interface BlockDevOps { * changes. Sure would be useful if it did. * Device models with removable media must implement this callback. */ - public void change_media_cb(Object opaque, boolean load); - public boolean has_change_media_cb(); + void change_media_cb(Object opaque, boolean load); + boolean has_change_media_cb(); /* * Runs when an eject request is issued from the monitor, the tray * is closed, and the medium is locked. @@ -167,25 +167,25 @@ static public interface BlockDevOps { * want to implement the callback and unlock the tray when "force" is * true, even if they do not support eject requests. */ - public void eject_request_cb(Object opaque, boolean force); - public boolean has_eject_request_cb(); + void eject_request_cb(Object opaque, boolean force); + boolean has_eject_request_cb(); /* * Is the virtual tray open? * Device models implement this only when the device has a tray. */ - public boolean is_tray_open(Object opaque); - public boolean has_is_tray_open(); + boolean is_tray_open(Object opaque); + boolean has_is_tray_open(); /* * Is the virtual medium locked into the device? * Device models implement this only when device has such a lock. */ - public boolean is_medium_locked(Object opaque); - public boolean has_is_medium_locked(); + boolean is_medium_locked(Object opaque); + boolean has_is_medium_locked(); /* * Runs when the size changed (e.g. monitor command block_resize) */ - public void resize_cb(Object opaque); - public boolean has_resize_cb(); + void resize_cb(Object opaque); + boolean has_resize_cb(); } // /* throttling disk I/O limits */ @@ -258,15 +258,13 @@ static public interface BlockDevOps { static private boolean is_windows_drive_prefix(String filename) { char c = filename.charAt(0); - return (filename.length()>0 && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) && filename.charAt(1) == ':'); + return (!filename.isEmpty() && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) && filename.charAt(1) == ':'); } static private boolean is_windows_drive(String filename) { if (is_windows_drive_prefix(filename) && filename.length()==2) return true; - if (filename.startsWith("\\\\.\\") || filename.startsWith("//./")) - return true; - return false; + return filename.startsWith("\\\\.\\") || filename.startsWith("//./"); } /* check if the path starts with ":" */ @@ -281,9 +279,7 @@ static private boolean path_has_protocol(String path) { if (pos2>=0 && pos2=0 && pos2= pos1; } static private boolean path_is_absolute(String path) { @@ -291,7 +287,7 @@ static private boolean path_is_absolute(String path) { if (is_windows_drive(path) || is_windows_drive_prefix(path)) { return true; } - return (path.length()>0 && path.charAt(0)=='/' || path.charAt(0)=='\\'); + return (!path.isEmpty() && path.charAt(0)=='/' || path.charAt(0)=='\\'); } /* if filename is absolute, just copy it to dest. Otherwise, build a @@ -316,7 +312,7 @@ else if (pos2>=0) } static private String bdrv_get_full_backing_filename(BlockDriverState bs) { - if (bs.backing_file.length()==0 || path_has_protocol(bs.backing_file)) { + if (bs.backing_file.isEmpty() || path_has_protocol(bs.backing_file)) { return bs.backing_file; } else { return path_combine(bs.filename, bs.backing_file); @@ -347,7 +343,7 @@ static public BlockDriverState bdrv_new(String device_name) BlockDriverState bs = new BlockDriverState(); bs.device_name = device_name; - if (device_name.length()==0) { + if (device_name.isEmpty()) { bdrv_states.add(bs); } bdrv_iostatus_disable(bs); @@ -589,26 +585,33 @@ static private int refresh_total_sectors(BlockDriverState bs, long hint) { /** * Set open flags for a given cache mode - * + *

* Return 0 on success, -1 if the cache mode was invalid. */ static private int bdrv_parse_cache_flags(String mode, IntRef flags) { flags.value &= ~BDRV_O_CACHE_MASK; - if (mode.equals("off") || mode.equals("none")) { - flags.value |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB; - } else if (mode.equals("directsync")) { - flags.value |= BDRV_O_NOCACHE; - } else if (mode.equals("writeback")) { - flags.value |= BDRV_O_CACHE_WB; - } else if (mode.equals("unsafe")) { - flags.value |= BDRV_O_CACHE_WB; - flags.value |= BDRV_O_NO_FLUSH; - } else if (mode.equals("writethrough")) { - /* this is the default */ - } else { - return -1; + switch (mode) { + case "off": + case "none": + flags.value |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB; + break; + case "directsync": + flags.value |= BDRV_O_NOCACHE; + break; + case "writeback": + flags.value |= BDRV_O_CACHE_WB; + break; + case "unsafe": + flags.value |= BDRV_O_CACHE_WB; + flags.value |= BDRV_O_NO_FLUSH; + break; + case "writethrough": + /* this is the default */ + break; + default: + return -1; } return 0; } @@ -811,7 +814,7 @@ static public int bdrv_open(BlockDriverState bs, String filename, int flags, Blo } /* If there is a backing file, use it */ - if ((flags & BDRV_O_NO_BACKING) == 0 && bs.backing_file.length()>0) { + if ((flags & BDRV_O_NO_BACKING) == 0 && !bs.backing_file.isEmpty()) { String backing_filename; int back_flags; BlockDriver back_drv = null; @@ -819,7 +822,7 @@ static public int bdrv_open(BlockDriverState bs, String filename, int flags, Blo bs.backing_hd = bdrv_new(""); backing_filename = bdrv_get_full_backing_filename(bs); - if (bs.backing_format.length()>0) { + if (!bs.backing_format.isEmpty()) { back_drv = bdrv_find_format(bs.backing_format); } @@ -948,7 +951,7 @@ static private void bdrv_close(BlockDriverState bs) /* make a BlockDriverState anonymous by removing from bdrv_state list. Also, NULL terminate the device_name to prevent double remove */ static private void bdrv_make_anon(BlockDriverState bs) { - if (bs.device_name.length()!=0) { + if (!bs.device_name.isEmpty()) { bdrv_states.remove(bs); } bs.device_name=""; @@ -3333,7 +3336,7 @@ static public void bdrv_aio_cancel(BlockDriverAIOCB acb) { // qemu_bh_schedule(acb.bh); // } - static public BlockDriverAIOCB bdrv_aio_flush(BlockDriverState bs, BlockDriverCompletionFunc cb, Object opaque) { + static public void bdrv_aio_flush(BlockDriverState bs, BlockDriverCompletionFunc cb, Object opaque) { // trace_bdrv_aio_flush(bs, opaque); // // Coroutine *co; @@ -3345,7 +3348,6 @@ static public BlockDriverAIOCB bdrv_aio_flush(BlockDriverState bs, BlockDriverCo // // return &acb.common; cb.call(opaque, 0); - return null; } // static void coroutine_fn bdrv_aio_discard_co_entry(void *opaque) @@ -3645,7 +3647,7 @@ public static void bdrv_init() // return rwco.ret; // } - /**************************************************************/ + /************************************************************/ /* removable device support */ /** @@ -3687,7 +3689,7 @@ static public void bdrv_eject(BlockDriverState bs, boolean eject_flag) drv.bdrv_eject(bs, eject_flag); } - if (bs.device_name.length()>0) { + if (!bs.device_name.isEmpty()) { bdrv_emit_qmp_eject_event(bs, eject_flag); } } diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/Cirrus.java b/jdosbox/src/main/java/jdos/hardware/qemu/Cirrus.java index 30417bc9..6229ae67 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/Cirrus.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/Cirrus.java @@ -74,7 +74,7 @@ public class Cirrus extends VGA_header { }; /*************************************** - * + *

* definitions * ***************************************/ @@ -208,17 +208,17 @@ static private boolean BLTUNSAFE(CirrusVGAState s) { (s.cirrus_blt_height * Math.abs(s.cirrus_blt_srcpitch) + (s.cirrus_blt_srcaddr & s.cirrus_addr_mask) > s.vram_size); } - static private interface cirrus_bitblt_rop_t { - public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight); + private interface cirrus_bitblt_rop_t { + void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight); } - static private interface cirrus_fill_t { - public void call(CirrusVGAState s, int dstPos, int dst_pitch, int width, int height); + private interface cirrus_fill_t { + void call(CirrusVGAState s, int dstPos, int dst_pitch, int width, int height); } static private final class CirrusVGAState extends VGACommonState { int get_bpp() { - int ret = 8; + int ret; if ((sr[0x07] & 0x01) != 0) { /* Cirrus SVGA */ @@ -279,9 +279,9 @@ int get_resolutionCy() { int cirrus_shadow_gr1; int cirrus_hidden_dac_lockindex; int cirrus_hidden_dac_data; - int[] cirrus_bank_base = new int[2]; - int[] cirrus_bank_limit = new int[2]; - int[] cirrus_hidden_palette = new int[48]; + final int[] cirrus_bank_base = new int[2]; + final int[] cirrus_bank_limit = new int[2]; + final int[] cirrus_hidden_palette = new int[48]; int hw_cursor_x; int hw_cursor_y; int cirrus_blt_pixelwidth; @@ -325,31 +325,27 @@ int get_resolutionCy() { static private final byte[] rop_to_index = new byte[256]; /*************************************** - * + *

* raster operations * ***************************************/ - static private final cirrus_bitblt_rop_t cirrus_bitblt_rop_nop = new cirrus_bitblt_rop_t() { - public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { - } + static private final cirrus_bitblt_rop_t cirrus_bitblt_rop_nop = (s, dstPos, srcPos, dstpitch, srcpitch, bltwidth, bltheight) -> { }; - static private final cirrus_fill_t cirrus_bitblt_fill_nop = new cirrus_fill_t() { - public void call(CirrusVGAState s, int dstPos, int dstpitch, int bltwidth, int bltheight) { - } + static private final cirrus_fill_t cirrus_bitblt_fill_nop = (s, dstPos, dstpitch, bltwidth, bltheight) -> { }; - static private interface ROP_OP { - public void call8(CirrusVGAState s, int dstPos, int srcColor); + private interface ROP_OP { + void call8(CirrusVGAState s, int dstPos, int srcColor); - public void call16(CirrusVGAState s, int dstPos, int srcColor); + void call16(CirrusVGAState s, int dstPos, int srcColor); - public void call32(CirrusVGAState s, int dstPos, int srcColor); + void call32(CirrusVGAState s, int dstPos, int srcColor); } static private abstract class cirrus_bitblt_rop implements cirrus_bitblt_rop_t { - public ROP_OP op; + public final ROP_OP op; public cirrus_bitblt_rop(ROP_OP op) { this.op = op; @@ -357,7 +353,7 @@ public cirrus_bitblt_rop(ROP_OP op) { } static private abstract class cirrus_fill implements cirrus_fill_t { - public ROP_OP op; + public final ROP_OP op; public cirrus_fill(ROP_OP op) { this.op = op; @@ -636,7 +632,6 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src int bitmask; int index; int srcskipleft = s.gr[0x2f] & 0x07; - int dstskipleft = srcskipleft; if ((s.cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) != 0) { bits_xor = 0xff; @@ -649,8 +644,8 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src for (y = 0; y < bltheight; y++) { bitmask = 0x80 >> srcskipleft; bits = s.readb(srcPos++) ^ bits_xor; - dPos = dstPos + dstskipleft; - for (x = dstskipleft; x < bltwidth; x++) { + dPos = dstPos + srcskipleft; + for (x = srcskipleft; x < bltwidth; x++) { if ((bitmask & 0xff) == 0) { bitmask = 0x80; bits = s.readb(srcPos++) ^ bits_xor; @@ -806,7 +801,7 @@ public cirrus_colorexpand_8(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -815,15 +810,14 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src int col; int bitmask; int srcskipleft = s.gr[0x2f] & 0x07; - int dstskipleft = srcskipleft; colors[0] = s.cirrus_blt_bgcol; colors[1] = s.cirrus_blt_fgcol; for (y = 0; y < bltheight; y++) { bitmask = 0x80 >> srcskipleft; bits = s.readb(srcPos++); - dPos = dstPos + dstskipleft; - for (x = dstskipleft; x < bltwidth; x++) { + dPos = dstPos + srcskipleft; + for (x = srcskipleft; x < bltwidth; x++) { if ((bitmask & 0xff) == 0) { bitmask = 0x80; bits = s.readb(srcPos++); @@ -843,7 +837,7 @@ public cirrus_colorexpand_16(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -880,7 +874,7 @@ public cirrus_colorexpand_24(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -919,7 +913,7 @@ public cirrus_colorexpand_32(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -962,7 +956,6 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src int bits, bits_xor; int col; int srcskipleft = s.gr[0x2f] & 0x07; - int dstskipleft = srcskipleft; if ((s.cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) != 0) { bits_xor = 0xff; @@ -976,8 +969,8 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src for (y = 0; y < bltheight; y++) { bits = s.readb(srcPos + pattern_y) ^ bits_xor; bitpos = 7 - srcskipleft; - dPos = dstPos + dstskipleft; - for (x = dstskipleft; x < bltwidth; x++) { + dPos = dstPos + srcskipleft; + for (x = srcskipleft; x < bltwidth; x++) { if (((bits >> bitpos) & 1) != 0) { op.call8(s, dPos, col); } @@ -1114,7 +1107,7 @@ public cirrus_colorexpand_pattern_8(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -1122,7 +1115,6 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src int bits; int col; int srcskipleft = s.gr[0x2f] & 0x07; - int dstskipleft = srcskipleft; colors[0] = s.cirrus_blt_bgcol; colors[1] = s.cirrus_blt_fgcol; @@ -1131,8 +1123,8 @@ public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int src for (y = 0; y < bltheight; y++) { bits = s.readb(srcPos + pattern_y); bitpos = 7 - srcskipleft; - dPos = dstPos + dstskipleft; - for (x = dstskipleft; x < bltwidth; x++) { + dPos = dstPos + srcskipleft; + for (x = srcskipleft; x < bltwidth; x++) { col = colors[(bits >> bitpos) & 1]; op.call8(s, dPos, col); dPos++; @@ -1149,7 +1141,7 @@ public cirrus_colorexpand_pattern_16(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -1184,7 +1176,7 @@ public cirrus_colorexpand_pattern_24(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -1221,7 +1213,7 @@ public cirrus_colorexpand_pattern_32(ROP_OP op) { super(op); } - int[] colors = new int[2]; + final int[] colors = new int[2]; public void call(CirrusVGAState s, int dstPos, int srcPos, int dstpitch, int srcpitch, int bltwidth, int bltheight) { int dPos; @@ -1876,20 +1868,19 @@ static private boolean cirrus_bitblt_common_patterncopy(CirrusVGAState s, int sr /* fill */ - static private int cirrus_bitblt_solidfill(CirrusVGAState s, int blt_rop) { + static private void cirrus_bitblt_solidfill(CirrusVGAState s, int blt_rop) { cirrus_fill_t rop_func; if (BLTUNSAFE(s)) - return 0; + return; rop_func = cirrus_fill[rop_to_index[blt_rop]][s.cirrus_blt_pixelwidth - 1]; rop_func.call(s, s.vram_ptr + (s.cirrus_blt_dstaddr & s.cirrus_addr_mask), s.cirrus_blt_dstpitch, s.cirrus_blt_width, s.cirrus_blt_height); cirrus_invalidate_region(s, s.cirrus_blt_dstaddr, s.cirrus_blt_dstpitch, s.cirrus_blt_width, s.cirrus_blt_height); cirrus_bitblt_reset(s); - return 1; } /*************************************** - * + *

* bitblt (video-to-video) * ***************************************/ @@ -1965,7 +1956,7 @@ static private boolean cirrus_bitblt_videotovideo_copy(CirrusVGAState s) { } /*************************************** - * + *

* bitblt (cpu-to-video) * ***************************************/ @@ -2004,7 +1995,7 @@ static private void cirrus_bitblt_cputovideo_next(CirrusVGAState s) { } /*************************************** - * + *

* bitblt wrapper * ***************************************/ @@ -2026,8 +2017,6 @@ static private boolean cirrus_bitblt_cputovideo(CirrusVGAState s) { int w; s.cirrus_blt_mode &= ~CIRRUS_BLTMODE_MEMSYSSRC; - s.cirrus_srcptr = s.cirrus_bltbufPos; - s.cirrus_srcptr_end = s.cirrus_bltbufPos; if ((s.cirrus_blt_mode & CIRRUS_BLTMODE_PATTERNCOPY) != 0) { if ((s.cirrus_blt_mode & CIRRUS_BLTMODE_COLOREXPAND) != 0) { @@ -2224,7 +2213,7 @@ static private void cirrus_write_bitblt(CirrusVGAState s, int reg_value) { /*************************************** - * + *

* basic parameters * ***************************************/ @@ -2255,7 +2244,7 @@ static private void cirrus_write_bitblt(CirrusVGAState s, int reg_value) { // *pline_compare = line_compare; // } static private int cirrus_get_bpp16_depth(CirrusVGAState s) { - int ret = 16; + int ret; switch (s.cirrus_hidden_dac_data & 0xf) { case 0: @@ -2276,7 +2265,7 @@ static private int cirrus_get_bpp16_depth(CirrusVGAState s) { static private class cirrus_get_bpp implements VGACommonState.get_func { public int call(VGACommonState c) { CirrusVGAState s = (CirrusVGAState) c; - int ret = 8; + int ret; if ((s.sr[0x07] & 0x01) != 0) { /* Cirrus SVGA */ @@ -2331,7 +2320,7 @@ public int call(VGACommonState s) { } /*************************************** - * + *

* bank memory * ***************************************/ @@ -2374,7 +2363,7 @@ static void cirrus_update_bank_ptr(CirrusVGAState s, int bank_index) { } /*************************************** - * + *

* I/O access between 0x3c4-0x3c5 * ***************************************/ @@ -2521,7 +2510,7 @@ static private void cirrus_vga_write_sr(CirrusVGAState s, int val) { } /*************************************** - * + *

* I/O access at 0x3c6 * ***************************************/ @@ -2544,7 +2533,7 @@ static private void cirrus_write_hidden_dac(CirrusVGAState s, int reg_value) { } /*************************************** - * + *

* I/O access at 0x3c9 * ***************************************/ @@ -2580,7 +2569,7 @@ static private void cirrus_vga_write_palette(CirrusVGAState s, int reg_value) { } /*************************************** - * + *

* I/O access between 0x3ce-0x3cf * ***************************************/ @@ -2698,7 +2687,7 @@ static private void cirrus_vga_write_gr(CirrusVGAState s, int reg_index, int reg } /*************************************** - * + *

* I/O access between 0x3d4-0x3d5 * ***************************************/ @@ -2821,7 +2810,7 @@ static private void cirrus_vga_write_cr(CirrusVGAState s, int reg_value) { } /*************************************** - * + *

* memory-mapped I/O (bitblt) * ***************************************/ @@ -2830,7 +2819,7 @@ static private int cirrus_mmio_blt_read(CirrusVGAState s, int address) { int value = 0xff; switch (address) { - case (CIRRUS_MMIO_BLTBGCOLOR + 0): + case (CIRRUS_MMIO_BLTBGCOLOR): value = cirrus_vga_read_gr(s, 0x00); break; case (CIRRUS_MMIO_BLTBGCOLOR + 1): @@ -2842,7 +2831,7 @@ static private int cirrus_mmio_blt_read(CirrusVGAState s, int address) { case (CIRRUS_MMIO_BLTBGCOLOR + 3): value = cirrus_vga_read_gr(s, 0x14); break; - case (CIRRUS_MMIO_BLTFGCOLOR + 0): + case (CIRRUS_MMIO_BLTFGCOLOR): value = cirrus_vga_read_gr(s, 0x01); break; case (CIRRUS_MMIO_BLTFGCOLOR + 1): @@ -2854,31 +2843,31 @@ static private int cirrus_mmio_blt_read(CirrusVGAState s, int address) { case (CIRRUS_MMIO_BLTFGCOLOR + 3): value = cirrus_vga_read_gr(s, 0x15); break; - case (CIRRUS_MMIO_BLTWIDTH + 0): + case (CIRRUS_MMIO_BLTWIDTH): value = cirrus_vga_read_gr(s, 0x20); break; case (CIRRUS_MMIO_BLTWIDTH + 1): value = cirrus_vga_read_gr(s, 0x21); break; - case (CIRRUS_MMIO_BLTHEIGHT + 0): + case (CIRRUS_MMIO_BLTHEIGHT): value = cirrus_vga_read_gr(s, 0x22); break; case (CIRRUS_MMIO_BLTHEIGHT + 1): value = cirrus_vga_read_gr(s, 0x23); break; - case (CIRRUS_MMIO_BLTDESTPITCH + 0): + case (CIRRUS_MMIO_BLTDESTPITCH): value = cirrus_vga_read_gr(s, 0x24); break; case (CIRRUS_MMIO_BLTDESTPITCH + 1): value = cirrus_vga_read_gr(s, 0x25); break; - case (CIRRUS_MMIO_BLTSRCPITCH + 0): + case (CIRRUS_MMIO_BLTSRCPITCH): value = cirrus_vga_read_gr(s, 0x26); break; case (CIRRUS_MMIO_BLTSRCPITCH + 1): value = cirrus_vga_read_gr(s, 0x27); break; - case (CIRRUS_MMIO_BLTDESTADDR + 0): + case (CIRRUS_MMIO_BLTDESTADDR): value = cirrus_vga_read_gr(s, 0x28); break; case (CIRRUS_MMIO_BLTDESTADDR + 1): @@ -2887,7 +2876,7 @@ static private int cirrus_mmio_blt_read(CirrusVGAState s, int address) { case (CIRRUS_MMIO_BLTDESTADDR + 2): value = cirrus_vga_read_gr(s, 0x2a); break; - case (CIRRUS_MMIO_BLTSRCADDR + 0): + case (CIRRUS_MMIO_BLTSRCADDR): value = cirrus_vga_read_gr(s, 0x2c); break; case (CIRRUS_MMIO_BLTSRCADDR + 1): @@ -2908,13 +2897,13 @@ static private int cirrus_mmio_blt_read(CirrusVGAState s, int address) { case CIRRUS_MMIO_BLTMODEEXT: value = cirrus_vga_read_gr(s, 0x33); break; - case (CIRRUS_MMIO_BLTTRANSPARENTCOLOR + 0): + case (CIRRUS_MMIO_BLTTRANSPARENTCOLOR): value = cirrus_vga_read_gr(s, 0x34); break; case (CIRRUS_MMIO_BLTTRANSPARENTCOLOR + 1): value = cirrus_vga_read_gr(s, 0x35); break; - case (CIRRUS_MMIO_BLTTRANSPARENTCOLORMASK + 0): + case (CIRRUS_MMIO_BLTTRANSPARENTCOLORMASK): value = cirrus_vga_read_gr(s, 0x38); break; case (CIRRUS_MMIO_BLTTRANSPARENTCOLORMASK + 1): @@ -2934,7 +2923,7 @@ static private int cirrus_mmio_blt_read(CirrusVGAState s, int address) { static void cirrus_mmio_blt_write(CirrusVGAState s, int address, int value) { switch (address) { - case (CIRRUS_MMIO_BLTBGCOLOR + 0): + case (CIRRUS_MMIO_BLTBGCOLOR): cirrus_vga_write_gr(s, 0x00, value); break; case (CIRRUS_MMIO_BLTBGCOLOR + 1): @@ -2946,7 +2935,7 @@ static void cirrus_mmio_blt_write(CirrusVGAState s, int address, int value) { case (CIRRUS_MMIO_BLTBGCOLOR + 3): cirrus_vga_write_gr(s, 0x14, value); break; - case (CIRRUS_MMIO_BLTFGCOLOR + 0): + case (CIRRUS_MMIO_BLTFGCOLOR): cirrus_vga_write_gr(s, 0x01, value); break; case (CIRRUS_MMIO_BLTFGCOLOR + 1): @@ -2958,31 +2947,31 @@ static void cirrus_mmio_blt_write(CirrusVGAState s, int address, int value) { case (CIRRUS_MMIO_BLTFGCOLOR + 3): cirrus_vga_write_gr(s, 0x15, value); break; - case (CIRRUS_MMIO_BLTWIDTH + 0): + case (CIRRUS_MMIO_BLTWIDTH): cirrus_vga_write_gr(s, 0x20, value); break; case (CIRRUS_MMIO_BLTWIDTH + 1): cirrus_vga_write_gr(s, 0x21, value); break; - case (CIRRUS_MMIO_BLTHEIGHT + 0): + case (CIRRUS_MMIO_BLTHEIGHT): cirrus_vga_write_gr(s, 0x22, value); break; case (CIRRUS_MMIO_BLTHEIGHT + 1): cirrus_vga_write_gr(s, 0x23, value); break; - case (CIRRUS_MMIO_BLTDESTPITCH + 0): + case (CIRRUS_MMIO_BLTDESTPITCH): cirrus_vga_write_gr(s, 0x24, value); break; case (CIRRUS_MMIO_BLTDESTPITCH + 1): cirrus_vga_write_gr(s, 0x25, value); break; - case (CIRRUS_MMIO_BLTSRCPITCH + 0): + case (CIRRUS_MMIO_BLTSRCPITCH): cirrus_vga_write_gr(s, 0x26, value); break; case (CIRRUS_MMIO_BLTSRCPITCH + 1): cirrus_vga_write_gr(s, 0x27, value); break; - case (CIRRUS_MMIO_BLTDESTADDR + 0): + case (CIRRUS_MMIO_BLTDESTADDR): cirrus_vga_write_gr(s, 0x28, value); break; case (CIRRUS_MMIO_BLTDESTADDR + 1): @@ -2994,7 +2983,7 @@ static void cirrus_mmio_blt_write(CirrusVGAState s, int address, int value) { case (CIRRUS_MMIO_BLTDESTADDR + 3): /* ignored */ break; - case (CIRRUS_MMIO_BLTSRCADDR + 0): + case (CIRRUS_MMIO_BLTSRCADDR): cirrus_vga_write_gr(s, 0x2c, value); break; case (CIRRUS_MMIO_BLTSRCADDR + 1): @@ -3015,13 +3004,13 @@ static void cirrus_mmio_blt_write(CirrusVGAState s, int address, int value) { case CIRRUS_MMIO_BLTMODEEXT: cirrus_vga_write_gr(s, 0x33, value); break; - case (CIRRUS_MMIO_BLTTRANSPARENTCOLOR + 0): + case (CIRRUS_MMIO_BLTTRANSPARENTCOLOR): cirrus_vga_write_gr(s, 0x34, value); break; case (CIRRUS_MMIO_BLTTRANSPARENTCOLOR + 1): cirrus_vga_write_gr(s, 0x35, value); break; - case (CIRRUS_MMIO_BLTTRANSPARENTCOLORMASK + 0): + case (CIRRUS_MMIO_BLTTRANSPARENTCOLORMASK): cirrus_vga_write_gr(s, 0x38, value); break; case (CIRRUS_MMIO_BLTTRANSPARENTCOLORMASK + 1): @@ -3038,7 +3027,7 @@ static void cirrus_mmio_blt_write(CirrusVGAState s, int address, int value) { } /*************************************** - * + *

* write mode 4/5 * ***************************************/ @@ -3048,7 +3037,7 @@ static void cirrus_mem_writeb_mode4and5_8bpp(CirrusVGAState s, int mode, int off int val = mem_value; int dstPos; - dstPos = s.vram_ptr + (offset &= s.cirrus_addr_mask); + dstPos = s.vram_ptr + (offset & s.cirrus_addr_mask); for (x = 0; x < 8; x++) { if ((val & 0x80) != 0) { s.writeb(dstPos, s.cirrus_shadow_gr1); @@ -3066,7 +3055,7 @@ static void cirrus_mem_writeb_mode4and5_16bpp(CirrusVGAState s, int mode, int of int val = mem_value; int dstPos; - dstPos = s.vram_ptr + (offset &= s.cirrus_addr_mask); + dstPos = s.vram_ptr + (offset & s.cirrus_addr_mask); for (x = 0; x < 8; x++) { if ((val & 0x80) != 0) { s.writeb(dstPos, s.cirrus_shadow_gr1); @@ -3082,7 +3071,7 @@ static void cirrus_mem_writeb_mode4and5_16bpp(CirrusVGAState s, int mode, int of } /*************************************** - * + *

* memory access between 0xa0000-0xbffff * ***************************************/ @@ -3197,7 +3186,7 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { // }; /*************************************** - * + *

* hardware cursor * ***************************************/ @@ -3411,7 +3400,7 @@ public void call(VGACommonState c, int d1, int scr_y) { x2 = s.last_scr_width; w = x2 - x1; palette = s.cirrus_hidden_palette; - color0 = s.rgb_to_pixel.call(c6_to_8(palette[0x0 * 3]), c6_to_8(palette[0x0 * 3 + 1]), c6_to_8(palette[0x0 * 3 + 2])); + color0 = s.rgb_to_pixel.call(c6_to_8(palette[0]), c6_to_8(palette[1]), c6_to_8(palette[2])); color1 = s.rgb_to_pixel.call(c6_to_8(palette[0xf * 3]), c6_to_8(palette[0xf * 3 + 1]), c6_to_8(palette[0xf * 3 + 2])); bpp = ((s.ds.ds_get_bits_per_pixel() + 7) >> 3); d1 += x1 * bpp; @@ -3435,7 +3424,7 @@ public void call(VGACommonState c, int d1, int scr_y) { } /*************************************** - * + *

* LFB memory access * ***************************************/ @@ -3512,7 +3501,7 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { } /*************************************** - * + *

* system to screen memory access * ***************************************/ @@ -3540,7 +3529,7 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { } static private void map_linear_vram_bank(CirrusVGAState s, int bank) { - boolean enabled = !(s.cirrus_srcptr != s.cirrus_srcptr_end) && (s.sr[0x07] & 0x01) != 0 && (s.gr[0x0B] & 0x14) != 0x14 && (s.gr[0x0B] & 0x02) == 0; + boolean enabled = s.cirrus_srcptr == s.cirrus_srcptr_end && (s.sr[0x07] & 0x01) != 0 && (s.gr[0x0B] & 0x14) != 0x14 && (s.gr[0x0B] & 0x02) == 0; if (enabled) { Memory.MEM_SetPageHandler(VGA_PAGE_A0, 16, low_mem); Memory.MEM_SetPageHandler(VGA_PAGE_B0, 16, low_mem); @@ -3598,7 +3587,7 @@ static private void cirrus_update_memory_access(CirrusVGAState s) { /* I/O ports */ - public static IoHandler.IO_ReadHandler cirrus_vga_ioport_read = new IoHandler.IO_ReadHandler() { + public static final IoHandler.IO_ReadHandler cirrus_vga_ioport_read = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int addr, /*Bitu*/int len) { CirrusVGAState s = cirrusVGAState; int val, index; @@ -3687,7 +3676,7 @@ static private void cirrus_update_memory_access(CirrusVGAState s) { } }; - public static IoHandler.IO_WriteHandler cirrus_vga_ioport_write = new IoHandler.IO_WriteHandler() { + public static final IoHandler.IO_WriteHandler cirrus_vga_ioport_write = new IoHandler.IO_WriteHandler() { public void call(/*Bitu*/int addr, /*Bitu*/int val, /*Bitu*/int len) { CirrusVGAState s = cirrusVGAState; int index; @@ -3805,7 +3794,7 @@ public void call(/*Bitu*/int addr, /*Bitu*/int val, /*Bitu*/int len) { }; /*************************************** - * + *

* memory-mapped I/O access * ***************************************/ @@ -3832,7 +3821,7 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { } /*************************************** - * + *

* initialize * ***************************************/ @@ -3867,7 +3856,7 @@ else if (jdos.hardware.VGA.vga.vmemsize == 2 * 1024 * 1024) } static private boolean inited = false; - static private Paging.PageHandler low_mem = new cirrus_vga_mem(); + static private final Paging.PageHandler low_mem = new cirrus_vga_mem(); static private void cirrus_init_common(CirrusVGAState s, int device_id, boolean is_pci) { int i; @@ -3935,12 +3924,12 @@ static private void cirrus_init_common(CirrusVGAState s, int device_id, boolean } /*************************************** - * + *

* ISA bus support * ***************************************/ - static int vga_initfn() { + static void vga_initfn() { VGACommonState s = cirrusVGAState; s.vram_size_mb = jdos.hardware.VGA.vga.vmemsize >> 20; @@ -3950,7 +3939,6 @@ static int vga_initfn() { Qemu.rom_add_vga("vgabios-cirrus.bin", true); /* XXX ISA-LFB support */ /* FIXME not qdev yet */ - return 0; } // static void isa_cirrus_vga_class_init(ObjectClass *klass, void *data) @@ -3970,7 +3958,7 @@ static int vga_initfn() { // }; // /*************************************** - * + *

* PCI bus support * ***************************************/ diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/DMA.java b/jdosbox/src/main/java/jdos/hardware/qemu/DMA.java index 957c88fc..dbc3aa53 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/DMA.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/DMA.java @@ -7,18 +7,18 @@ public class DMA { static public final int DMA_DIRECTION_TO_DEVICE = 0; static public final int DMA_DIRECTION_FROM_DEVICE = 1; - static public interface DMATranslateFunc { - public int call(DMAContext dma, int addr, IntRef paddr, IntRef len, int dir); + public interface DMATranslateFunc { + int call(DMAContext dma, int addr, IntRef paddr, IntRef len, int dir); } - static public interface DMAMapFunc { - public int call(DMAContext dma, int addr, IntRef len, int dir); + public interface DMAMapFunc { + int call(DMAContext dma, int addr, IntRef len, int dir); } - static public interface DMAUnmapFunc { - public void call(DMAContext dma, int buffer, int len, int dir, int access_len); + public interface DMAUnmapFunc { + void call(DMAContext dma, int buffer, int len, int dir, int access_len); } - static public interface DMAIOFunc { - public Block.BlockDriverAIOCB call(Block.BlockDriverState bs, long sector_num, QemuCommon.QEMUIOVector iov, int nb_sectors, Block.BlockDriverCompletionFunc cb, Object opaque); + public interface DMAIOFunc { + Block.BlockDriverAIOCB call(Block.BlockDriverState bs, long sector_num, QemuCommon.QEMUIOVector iov, int nb_sectors, Block.BlockDriverCompletionFunc cb, Object opaque); } public static class DMAContext { @@ -59,16 +59,16 @@ public static void DMA_release_DREQ(int nchan) { // DMA_run(); } - public static int DMA_read_memory (int nchan, byte[] buf, int bufOffset, int pos, int len) + public static void DMA_read_memory (int nchan, byte[] buf, int bufOffset, int pos, int len) { jdos.hardware.DMA.DmaChannel channel = jdos.hardware.DMA.GetDMAChannel(nchan); - return channel.Read(len, buf, bufOffset); + channel.Read(len, buf, bufOffset); } - public static int DMA_write_memory (int nchan, byte[] buf, int bufOffset, int pos, int len) + public static void DMA_write_memory (int nchan, byte[] buf, int bufOffset, int pos, int len) { jdos.hardware.DMA.DmaChannel channel = jdos.hardware.DMA.GetDMAChannel(nchan); - return channel.Write(len, buf, bufOffset); + channel.Write(len, buf, bufOffset); } /* request the emulator to transfer a new DMA memory block ASAP */ diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/DMAHelpers.java b/jdosbox/src/main/java/jdos/hardware/qemu/DMAHelpers.java index 3805ec61..818720df 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/DMAHelpers.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/DMAHelpers.java @@ -5,17 +5,9 @@ static public void qemu_sglist_destroy(DMA.QEMUSGList qsg) { } - static private DMA.DMAIOFunc bdrv_aio_readv = new DMA.DMAIOFunc() { - public Block.BlockDriverAIOCB call(Block.BlockDriverState bs, long sector_num, QemuCommon.QEMUIOVector iov, int nb_sectors, Block.BlockDriverCompletionFunc cb, Object opaque) { - return Block.bdrv_aio_readv(bs, sector_num, iov, nb_sectors, cb, opaque); - } - }; - - static private DMA.DMAIOFunc bdrv_aio_writev = new DMA.DMAIOFunc() { - public Block.BlockDriverAIOCB call(Block.BlockDriverState bs, long sector_num, QemuCommon.QEMUIOVector iov, int nb_sectors, Block.BlockDriverCompletionFunc cb, Object opaque) { - return Block.bdrv_aio_writev(bs, sector_num, iov, nb_sectors, cb, opaque); - } - }; + static private final DMA.DMAIOFunc bdrv_aio_readv = (bs, sector_num, iov, nb_sectors, cb, opaque) -> Block.bdrv_aio_readv(bs, sector_num, iov, nb_sectors, cb, opaque); + + static private final DMA.DMAIOFunc bdrv_aio_writev = (bs, sector_num, iov, nb_sectors, cb, opaque) -> Block.bdrv_aio_writev(bs, sector_num, iov, nb_sectors, cb, opaque); static public Block.BlockDriverAIOCB dma_bdrv_io(Block.BlockDriverState bs, DMA.QEMUSGList sg, long sector_num, DMA.DMAIOFunc io_func, Block.BlockDriverCompletionFunc cb, Object opaque, int dir) { return io_func.call(bs, sector_num, null, 1, cb, opaque); diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/Floppy.java b/jdosbox/src/main/java/jdos/hardware/qemu/Floppy.java index 9bf4eb58..cf992a4e 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/Floppy.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/Floppy.java @@ -66,11 +66,11 @@ public FDFormat(int drive, int last_sect, int max_track, int max_head, int rate) this.max_head = max_head; this.rate = rate; } - int drive; - int last_sect; - int max_track; - int max_head; - int rate; + final int drive; + final int last_sect; + final int max_track; + final int max_head; + final int rate; } static final private FDFormat[] fd_formats = new FDFormat[] { @@ -135,7 +135,7 @@ static private void pick_geometry(Block.BlockDriverState bs, IntRef nb_heads, In } if (drive_in == parse.drive || drive_in == FDRIVE_DRV_NONE) { - size = (parse.max_head + 1) * parse.max_track * parse.last_sect; + size = (long) (parse.max_head + 1) * parse.max_track * parse.last_sect; if (nb_sectors == size) { match = i; break; @@ -487,7 +487,7 @@ public FDCtrl() { int num_floppies; /* Sun4m quirks? */ boolean sun4m; - FDrive[] drives = new FDrive[MAX_FD]; + final FDrive[] drives = new FDrive[MAX_FD]; int reset_sensei; boolean check_media_rate; /* Timers state */ @@ -926,12 +926,10 @@ static private void fdctrl_set_fifo(FDCtrl fdctrl, int fifo_len, int status0) } /* Set an error: unimplemented/unknown command */ - static private final HandlerCallback fdctrl_unimplemented = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_FLOPPY,LogSeverities.LOG_ERROR,"fdc: unimplemented command 0x"+Integer.toHexString(fdctrl.fifo[0] & 0xFF)); - fdctrl.fifo[0] = (byte)FD_SR0_INVCMD; - fdctrl_set_fifo(fdctrl, 1, 0); - } + static private final HandlerCallback fdctrl_unimplemented = (fdctrl, direction) -> { + if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_FLOPPY,LogSeverities.LOG_ERROR,"fdc: unimplemented command 0x"+Integer.toHexString(fdctrl.fifo[0] & 0xFF)); + fdctrl.fifo[0] = (byte)FD_SR0_INVCMD; + fdctrl_set_fifo(fdctrl, 1, 0); }; /* Seek to next sector @@ -1114,15 +1112,13 @@ public void call(FDCtrl fdctrl, int direction) { }; /* Prepare a transfer of deleted data */ - static private final HandlerCallback fdctrl_start_transfer_del = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_FLOPPY,LogSeverities.LOG_ERROR,"fdctrl_start_transfer_del() unimplemented"); + static private final HandlerCallback fdctrl_start_transfer_del = (fdctrl, direction) -> { + if (Log.level<= LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_FLOPPY,LogSeverities.LOG_ERROR,"fdctrl_start_transfer_del() unimplemented"); - /* We don't handle deleted data, - * so we don't return *ANYTHING* - */ - fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00); - } + /* We don't handle deleted data, + * so we don't return *ANYTHING* + */ + fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00); }; /* handlers for DMA transfers */ @@ -1138,7 +1134,7 @@ public void call(jdos.hardware.DMA.DmaChannel chan, int event) { int len, start_pos, rel_pos; int status0 = 0x00, status1 = 0x00, status2 = 0x00; - fdctrl = (FDCtrl)isa; + fdctrl = isa; if ((fdctrl.msr & FD_MSR_RQM)!=0) { FLOPPY_DPRINTF("Not in DMA transfer mode !"); return; @@ -1243,7 +1239,7 @@ public void call(jdos.hardware.DMA.DmaChannel chan, int event) { static private int fdctrl_read_data(FDCtrl fdctrl) { FDrive cur_drv; - int retval = 0; + int retval; int pos; cur_drv = get_cur_drv(fdctrl); @@ -1346,106 +1342,94 @@ static private void fdctrl_format_sector(FDCtrl fdctrl) } } - static private final HandlerCallback fdctrl_handle_lock = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - fdctrl.lock = (fdctrl.fifo[0] & 0x80)!=0 ? 1 : 0; - fdctrl.fifo[0] = (byte)(fdctrl.lock << 4); - fdctrl_set_fifo(fdctrl, 1, 0); - } + static private final HandlerCallback fdctrl_handle_lock = (fdctrl, direction) -> { + fdctrl.lock = (fdctrl.fifo[0] & 0x80)!=0 ? 1 : 0; + fdctrl.fifo[0] = (byte)(fdctrl.lock << 4); + fdctrl_set_fifo(fdctrl, 1, 0); }; - static private final HandlerCallback fdctrl_handle_dumpreg = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - FDrive cur_drv = get_cur_drv(fdctrl); - - /* Drives position */ - fdctrl.fifo[0] = (byte)drv0(fdctrl).track; - fdctrl.fifo[1] = (byte)drv1(fdctrl).track; - if (MAX_FD == 4) { - fdctrl.fifo[2] = (byte)drv2(fdctrl).track; - fdctrl.fifo[3] = (byte)drv3(fdctrl).track; - } else { - fdctrl.fifo[2] = 0; - fdctrl.fifo[3] = 0; - } - /* timers */ - fdctrl.fifo[4] = (byte)fdctrl.timer0; - fdctrl.fifo[5] = (byte)((fdctrl.timer1 << 1) | ((fdctrl.dor & FD_DOR_DMAEN)!=0 ? 1 : 0)); - fdctrl.fifo[6] = (byte)cur_drv.last_sect; - fdctrl.fifo[7] = (byte)((fdctrl.lock << 7) | (cur_drv.perpendicular << 2)); - fdctrl.fifo[8] = (byte)fdctrl.config; - fdctrl.fifo[9] = (byte)fdctrl.precomp_trk; - fdctrl_set_fifo(fdctrl, 10, 0); - } + static private final HandlerCallback fdctrl_handle_dumpreg = (fdctrl, direction) -> { + FDrive cur_drv = get_cur_drv(fdctrl); + + /* Drives position */ + fdctrl.fifo[0] = (byte)drv0(fdctrl).track; + fdctrl.fifo[1] = (byte)drv1(fdctrl).track; + if (MAX_FD == 4) { + fdctrl.fifo[2] = (byte)drv2(fdctrl).track; + fdctrl.fifo[3] = (byte)drv3(fdctrl).track; + } else { + fdctrl.fifo[2] = 0; + fdctrl.fifo[3] = 0; + } + /* timers */ + fdctrl.fifo[4] = (byte)fdctrl.timer0; + fdctrl.fifo[5] = (byte)((fdctrl.timer1 << 1) | ((fdctrl.dor & FD_DOR_DMAEN)!=0 ? 1 : 0)); + fdctrl.fifo[6] = (byte)cur_drv.last_sect; + fdctrl.fifo[7] = (byte)((fdctrl.lock << 7) | (cur_drv.perpendicular << 2)); + fdctrl.fifo[8] = (byte)fdctrl.config; + fdctrl.fifo[9] = (byte)fdctrl.precomp_trk; + fdctrl_set_fifo(fdctrl, 10, 0); }; - static private final HandlerCallback fdctrl_handle_version = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - /* Controller's version */ - fdctrl.fifo[0] = (byte)fdctrl.version; - fdctrl_set_fifo(fdctrl, 1, 0); - } + static private final HandlerCallback fdctrl_handle_version = (fdctrl, direction) -> { + /* Controller's version */ + fdctrl.fifo[0] = (byte)fdctrl.version; + fdctrl_set_fifo(fdctrl, 1, 0); }; - static private final HandlerCallback fdctrl_handle_partid = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - fdctrl.fifo[0] = 0x41; /* Stepping 1 */ - fdctrl_set_fifo(fdctrl, 1, 0); - } + static private final HandlerCallback fdctrl_handle_partid = (fdctrl, direction) -> { + fdctrl.fifo[0] = 0x41; /* Stepping 1 */ + fdctrl_set_fifo(fdctrl, 1, 0); }; - static private final HandlerCallback fdctrl_handle_restore = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - FDrive cur_drv = get_cur_drv(fdctrl); - - /* Drives position */ - drv0(fdctrl).track = fdctrl.fifo[3]; - drv1(fdctrl).track = fdctrl.fifo[4]; - if (MAX_FD == 4) { - drv2(fdctrl).track = fdctrl.fifo[5]; - drv3(fdctrl).track = fdctrl.fifo[6]; - } - /* timers */ - fdctrl.timer0 = fdctrl.fifo[7]; - fdctrl.timer1 = fdctrl.fifo[8]; - cur_drv.last_sect = fdctrl.fifo[9]; - fdctrl.lock = fdctrl.fifo[10] >> 7; - cur_drv.perpendicular = (fdctrl.fifo[10] >> 2) & 0xF; - fdctrl.config = fdctrl.fifo[11]; - fdctrl.precomp_trk = fdctrl.fifo[12]; - fdctrl.pwrd = fdctrl.fifo[13]; - fdctrl_reset_fifo(fdctrl); - } + static private final HandlerCallback fdctrl_handle_restore = (fdctrl, direction) -> { + FDrive cur_drv = get_cur_drv(fdctrl); + + /* Drives position */ + drv0(fdctrl).track = fdctrl.fifo[3]; + drv1(fdctrl).track = fdctrl.fifo[4]; + if (MAX_FD == 4) { + drv2(fdctrl).track = fdctrl.fifo[5]; + drv3(fdctrl).track = fdctrl.fifo[6]; + } + /* timers */ + fdctrl.timer0 = fdctrl.fifo[7]; + fdctrl.timer1 = fdctrl.fifo[8]; + cur_drv.last_sect = fdctrl.fifo[9]; + fdctrl.lock = fdctrl.fifo[10] >> 7; + cur_drv.perpendicular = (fdctrl.fifo[10] >> 2) & 0xF; + fdctrl.config = fdctrl.fifo[11]; + fdctrl.precomp_trk = fdctrl.fifo[12]; + fdctrl.pwrd = fdctrl.fifo[13]; + fdctrl_reset_fifo(fdctrl); }; - static private final HandlerCallback fdctrl_handle_save = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - FDrive cur_drv = get_cur_drv(fdctrl); - - fdctrl.fifo[0] = 0; - fdctrl.fifo[1] = 0; - /* Drives position */ - fdctrl.fifo[2] = (byte)drv0(fdctrl).track; - fdctrl.fifo[3] = (byte)drv1(fdctrl).track; - if (MAX_FD == 4) { - fdctrl.fifo[4] = (byte)drv2(fdctrl).track; - fdctrl.fifo[5] = (byte)drv3(fdctrl).track; - } else { - fdctrl.fifo[4] = 0; - fdctrl.fifo[5] = 0; - } - /* timers */ - fdctrl.fifo[6] = (byte)fdctrl.timer0; - fdctrl.fifo[7] = (byte)fdctrl.timer1; - fdctrl.fifo[8] = (byte)cur_drv.last_sect; - fdctrl.fifo[9] = (byte)((fdctrl.lock << 7) | (cur_drv.perpendicular << 2)); - fdctrl.fifo[10] = (byte)fdctrl.config; - fdctrl.fifo[11] = (byte)fdctrl.precomp_trk; - fdctrl.fifo[12] = (byte)fdctrl.pwrd; - fdctrl.fifo[13] = 0; - fdctrl.fifo[14] = 0; - fdctrl_set_fifo(fdctrl, 15, 0); - } + static private final HandlerCallback fdctrl_handle_save = (fdctrl, direction) -> { + FDrive cur_drv = get_cur_drv(fdctrl); + + fdctrl.fifo[0] = 0; + fdctrl.fifo[1] = 0; + /* Drives position */ + fdctrl.fifo[2] = (byte)drv0(fdctrl).track; + fdctrl.fifo[3] = (byte)drv1(fdctrl).track; + if (MAX_FD == 4) { + fdctrl.fifo[4] = (byte)drv2(fdctrl).track; + fdctrl.fifo[5] = (byte)drv3(fdctrl).track; + } else { + fdctrl.fifo[4] = 0; + fdctrl.fifo[5] = 0; + } + /* timers */ + fdctrl.fifo[6] = (byte)fdctrl.timer0; + fdctrl.fifo[7] = (byte)fdctrl.timer1; + fdctrl.fifo[8] = (byte)cur_drv.last_sect; + fdctrl.fifo[9] = (byte)((fdctrl.lock << 7) | (cur_drv.perpendicular << 2)); + fdctrl.fifo[10] = (byte)fdctrl.config; + fdctrl.fifo[11] = (byte)fdctrl.precomp_trk; + fdctrl.fifo[12] = (byte)fdctrl.pwrd; + fdctrl.fifo[13] = 0; + fdctrl.fifo[14] = 0; + fdctrl_set_fifo(fdctrl, 15, 0); }; static private final HandlerCallback fdctrl_handle_readid = new HandlerCallback() { @@ -1487,17 +1471,15 @@ public void call(FDCtrl fdctrl, int direction) { } }; - static private final HandlerCallback fdctrl_handle_specify = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - fdctrl.timer0 = (fdctrl.fifo[1] >> 4) & 0xF; - fdctrl.timer1 = fdctrl.fifo[2] >> 1; - if ((fdctrl.fifo[2] & 1)!=0) - fdctrl.dor &= ~FD_DOR_DMAEN; - else - fdctrl.dor |= FD_DOR_DMAEN; - /* No result back */ - fdctrl_reset_fifo(fdctrl); - } + static private final HandlerCallback fdctrl_handle_specify = (fdctrl, direction) -> { + fdctrl.timer0 = (fdctrl.fifo[1] >> 4) & 0xF; + fdctrl.timer1 = fdctrl.fifo[2] >> 1; + if ((fdctrl.fifo[2] & 1)!=0) + fdctrl.dor &= ~FD_DOR_DMAEN; + else + fdctrl.dor |= FD_DOR_DMAEN; + /* No result back */ + fdctrl_reset_fifo(fdctrl); }; static private final HandlerCallback fdctrl_handle_sense_drive_status = new HandlerCallback() { @@ -1526,26 +1508,24 @@ public void call(FDCtrl fdctrl, int direction) { } }; - static private final HandlerCallback fdctrl_handle_sense_interrupt_status = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - FDrive cur_drv = get_cur_drv(fdctrl); + static private final HandlerCallback fdctrl_handle_sense_interrupt_status = (fdctrl, direction) -> { + FDrive cur_drv = get_cur_drv(fdctrl); - if (fdctrl.reset_sensei > 0) { - fdctrl.fifo[0] = (byte)(FD_SR0_RDYCHG + FD_RESET_SENSEI_COUNT - fdctrl.reset_sensei); - fdctrl.reset_sensei--; - } else if ((fdctrl.sra & FD_SRA_INTPEND)==0) { - fdctrl.fifo[0] = (byte)FD_SR0_INVCMD; - fdctrl_set_fifo(fdctrl, 1, 0); - return; - } else { - fdctrl.fifo[0] = (byte)((fdctrl.status0 & ~(FD_SR0_HEAD | FD_SR0_DS1 | FD_SR0_DS0)) | GET_CUR_DRV(fdctrl)); - } - - fdctrl.fifo[1] = (byte)cur_drv.track; - fdctrl_set_fifo(fdctrl, 2, 0); - fdctrl_reset_irq(fdctrl); - fdctrl.status0 = FD_SR0_RDYCHG; + if (fdctrl.reset_sensei > 0) { + fdctrl.fifo[0] = (byte)(FD_SR0_RDYCHG + FD_RESET_SENSEI_COUNT - fdctrl.reset_sensei); + fdctrl.reset_sensei--; + } else if ((fdctrl.sra & FD_SRA_INTPEND)==0) { + fdctrl.fifo[0] = (byte)FD_SR0_INVCMD; + fdctrl_set_fifo(fdctrl, 1, 0); + return; + } else { + fdctrl.fifo[0] = (byte)((fdctrl.status0 & ~(FD_SR0_HEAD | FD_SR0_DS1 | FD_SR0_DS0)) | GET_CUR_DRV(fdctrl)); } + + fdctrl.fifo[1] = (byte)cur_drv.track; + fdctrl_set_fifo(fdctrl, 2, 0); + fdctrl_reset_irq(fdctrl); + fdctrl.status0 = FD_SR0_RDYCHG; }; static private final HandlerCallback fdctrl_handle_seek = new HandlerCallback() { @@ -1564,60 +1544,50 @@ public void call(FDCtrl fdctrl, int direction) { } }; - static private final HandlerCallback fdctrl_handle_perpendicular_mode = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - FDrive cur_drv = get_cur_drv(fdctrl); + static private final HandlerCallback fdctrl_handle_perpendicular_mode = (fdctrl, direction) -> { + FDrive cur_drv = get_cur_drv(fdctrl); - if ((fdctrl.fifo[1] & 0x80)!=0) - cur_drv.perpendicular = fdctrl.fifo[1] & 0x7; - /* No result back */ - fdctrl_reset_fifo(fdctrl); - } + if ((fdctrl.fifo[1] & 0x80)!=0) + cur_drv.perpendicular = fdctrl.fifo[1] & 0x7; + /* No result back */ + fdctrl_reset_fifo(fdctrl); }; - static private final HandlerCallback fdctrl_handle_configure = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - fdctrl.config = fdctrl.fifo[2] & 0xFF; - fdctrl.precomp_trk = fdctrl.fifo[3] & 0xFF; - /* No result back */ - fdctrl_reset_fifo(fdctrl); - } + static private final HandlerCallback fdctrl_handle_configure = (fdctrl, direction) -> { + fdctrl.config = fdctrl.fifo[2] & 0xFF; + fdctrl.precomp_trk = fdctrl.fifo[3] & 0xFF; + /* No result back */ + fdctrl_reset_fifo(fdctrl); }; - static private final HandlerCallback fdctrl_handle_powerdown_mode = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - fdctrl.pwrd = fdctrl.fifo[1] & 0xFF; - fdctrl.fifo[0] = fdctrl.fifo[1]; - fdctrl_set_fifo(fdctrl, 1, 0); - } + static private final HandlerCallback fdctrl_handle_powerdown_mode = (fdctrl, direction) -> { + fdctrl.pwrd = fdctrl.fifo[1] & 0xFF; + fdctrl.fifo[0] = fdctrl.fifo[1]; + fdctrl_set_fifo(fdctrl, 1, 0); }; - static private final HandlerCallback fdctrl_handle_option = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - /* No result back */ - fdctrl_reset_fifo(fdctrl); - } + static private final HandlerCallback fdctrl_handle_option = (fdctrl, direction) -> { + /* No result back */ + fdctrl_reset_fifo(fdctrl); }; - static private final HandlerCallback fdctrl_handle_drive_specification_command = new HandlerCallback() { - public void call(FDCtrl fdctrl, int direction) { - FDrive cur_drv = get_cur_drv(fdctrl); + static private final HandlerCallback fdctrl_handle_drive_specification_command = (fdctrl, direction) -> { + FDrive cur_drv = get_cur_drv(fdctrl); - if ((fdctrl.fifo[fdctrl.data_pos - 1] & 0x80)!=0) { - /* Command parameters done */ - if ((fdctrl.fifo[fdctrl.data_pos - 1] & 0x40)!=0) { - fdctrl.fifo[0] = fdctrl.fifo[1]; - fdctrl.fifo[2] = 0; - fdctrl.fifo[3] = 0; - fdctrl_set_fifo(fdctrl, 4, 0); - } else { - fdctrl_reset_fifo(fdctrl); - } - } else if (fdctrl.data_len > 7) { - /* ERROR */ - fdctrl.fifo[0] = (byte)(0x80 | (cur_drv.head << 2) | GET_CUR_DRV(fdctrl)); - fdctrl_set_fifo(fdctrl, 1, 0); + if ((fdctrl.fifo[fdctrl.data_pos - 1] & 0x80)!=0) { + /* Command parameters done */ + if ((fdctrl.fifo[fdctrl.data_pos - 1] & 0x40)!=0) { + fdctrl.fifo[0] = fdctrl.fifo[1]; + fdctrl.fifo[2] = 0; + fdctrl.fifo[3] = 0; + fdctrl_set_fifo(fdctrl, 4, 0); + } else { + fdctrl_reset_fifo(fdctrl); } + } else if (fdctrl.data_len > 7) { + /* ERROR */ + fdctrl.fifo[0] = (byte)(0x80 | (cur_drv.head << 2) | GET_CUR_DRV(fdctrl)); + fdctrl_set_fifo(fdctrl, 1, 0); } }; @@ -1658,8 +1628,8 @@ public void call(FDCtrl fdctrl, int direction) { } }; - static private interface HandlerCallback { - public void call (FDCtrl fdctrl, int direction); + private interface HandlerCallback { + void call(FDCtrl fdctrl, int direction); } static private final class Handler { @@ -1678,11 +1648,11 @@ public Handler(int value, int mask, String name, int parameters, HandlerCallback this.handler = handler; this.direction = direction; } - int value; - int mask; - String name; - int parameters; - HandlerCallback handler; + final int value; + final int mask; + final String name; + final int parameters; + final HandlerCallback handler; int direction; } @@ -1901,7 +1871,7 @@ static public void Attach(int index, FileIO file) { } static boolean command_tables_inited = false; - static int fdctrl_init_common(FDCtrl fdctrl) + static void fdctrl_init_common(FDCtrl fdctrl) { int i, j; @@ -1929,7 +1899,6 @@ static int fdctrl_init_common(FDCtrl fdctrl) jdos.hardware.DMA.GetDMAChannel(fdctrl.dma_chann).Register_Callback(fdctrl_transfer_handler); int result = fdctrl_connect_drives(fdctrl); fdctrl_reset(fdctrl, false); - return result; } static public boolean isDriveReady(int index) { @@ -1937,8 +1906,8 @@ static public boolean isDriveReady(int index) { } static private FDCtrl isa; - static private IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[6]; - static private IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[6]; + static private final IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[6]; + static private final IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[6]; private static final IoHandler.IO_ReadHandler read_handler = new IoHandler.IO_ReadHandler() { public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { @@ -1964,7 +1933,7 @@ public static void initIO() { } } - public static Section.SectionFunction Flopyy_Init = new Section.SectionFunction() { + public static final Section.SectionFunction Flopyy_Init = new Section.SectionFunction() { public void call(Section sec) { Section_prop section=(Section_prop)sec; if (!section.Get_bool("enable")) diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/HdGeometry.java b/jdosbox/src/main/java/jdos/hardware/qemu/HdGeometry.java index 78d9cebf..24bad429 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/HdGeometry.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/HdGeometry.java @@ -32,10 +32,10 @@ static private int guess_disk_lchs(Block.BlockDriverState bs, IntRef pcylinders nb_sectors = Block.bdrv_get_geometry(bs); - /** - * The function will be invoked during startup not only in sync I/O mode, - * but also in async I/O mode. So the I/O throttling function has to - * be disabled temporarily here, not permanently. + /* + The function will be invoked during startup not only in sync I/O mode, + but also in async I/O mode. So the I/O throttling function has to + be disabled temporarily here, not permanently. */ if (Block.bdrv_read_unthrottled(bs, 0, buf, 1) < 0) { return -1; diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/IDE.java b/jdosbox/src/main/java/jdos/hardware/qemu/IDE.java index 4fd92042..b1687148 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/IDE.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/IDE.java @@ -105,7 +105,7 @@ static private void ide_identify(IDEState s) put_le16(p, 0, 0x0040); put_le16(p, 1, s.cylinders); put_le16(p, 3, s.heads); - put_le16(p, 4, 512 * s.sectors); /* XXX: retired, remove ? */ + put_le16(p, 4, 512L * s.sectors); /* XXX: retired, remove ? */ put_le16(p, 5, 512); /* XXX: retired, remove ? */ put_le16(p, 6, s.sectors); padstr(p, 10, s.drive_serial_str, 20); /* serial number */ @@ -157,9 +157,9 @@ static private void ide_identify(IDEState s) put_le16(p, 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10)); /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */ if (s.wwn!=0) { - put_le16(p, 84, (1 << 14) | (1 << 8) | 0); + put_le16(p, 84, (1 << 14) | (1 << 8)); } else { - put_le16(p, 84, (1 << 14) | 0); + put_le16(p, 84, (1 << 14)); } /* 14 = NOP supported, 5=WCACHE enabled, 0=SMART feature set enabled */ if (Block.bdrv_enable_write_cache(s.bs)) @@ -170,9 +170,9 @@ static private void ide_identify(IDEState s) put_le16(p, 86, (1 << 13) | (1 <<12) | (1 << 10)); /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */ if (s.wwn!=0) { - put_le16(p, 87, (1 << 14) | (1 << 8) | 0); + put_le16(p, 87, (1 << 14) | (1 << 8)); } else { - put_le16(p, 87, (1 << 14) | 0); + put_le16(p, 87, (1 << 14)); } put_le16(p, 88, 0x3f | (1 << 13)); /* udma5 set and supported */ put_le16(p, 93, 1 | (1 << 14) | 0x2000); @@ -207,7 +207,7 @@ static private void ide_atapi_identify(IDEState s) java.util.Arrays.fill(s.io_buffer, (byte)0); byte[] p = s.io_buffer; /* Removable CDROM, 50us response, 12 byte packets */ - put_le16(p, 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0)); + put_le16(p, 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0)); padstr(p, 10, s.drive_serial_str, 20); /* serial number */ put_le16(p, 20, 3); /* buffer type */ put_le16(p, 21, 512); /* cache size in sectors */ @@ -258,7 +258,7 @@ static private void ide_cfata_identify(IDEState s) java.util.Arrays.fill(s.io_buffer, (byte)0); byte[] p = s.io_buffer; - long cur_sec = s.cylinders * s.heads * s.sectors; + long cur_sec = (long) s.cylinders * s.heads * s.sectors; put_le16(p, 0, 0x848a); /* CF Storage Card signature */ put_le16(p, 1, s.cylinders); /* Default cylinders */ @@ -362,8 +362,7 @@ static private void ide_set_signature(IDEState s) // qemu_aio_release(iocb); // } // - static private DMA.DMAIOFunc ide_issue_trim = new DMA.DMAIOFunc() { - public Block.BlockDriverAIOCB call(Block.BlockDriverState bs, long sector_num, QemuCommon.QEMUIOVector iov, int nb_sectors, Block.BlockDriverCompletionFunc cb, Object opaque) { + static private final DMA.DMAIOFunc ide_issue_trim = (bs, sector_num, iov, nb_sectors, cb, opaque) -> { // TrimAIOCB *iocb; // int i, j, ret; // @@ -394,8 +393,7 @@ public Block.BlockDriverAIOCB call(Block.BlockDriverState bs, long sector_num, Q // qemu_bh_schedule(iocb.bh); // // return &iocb.common; - return null; - } + return null; }; static private void ide_abort_command(IDEState s) @@ -436,8 +434,8 @@ static private long ide_get_sector(IDEState s) if ((s.select & 0x40)!=0) { /* lba */ if (s.lba48==0) { - sector_num = ((s.select & 0x0f) << 24) | (s.hcyl << 16) | - (s.lcyl << 8) | s.sector; + sector_num = ((s.select & 0x0f) << 24) | ((long) s.hcyl << 16) | + ((long) s.lcyl << 8) | s.sector; } else { sector_num = ((long)s.hob_hcyl << 40) | ((long) s.hob_lcyl << 32) | @@ -446,8 +444,8 @@ static private long ide_get_sector(IDEState s) ((long) s.lcyl << 8) | s.sector; } } else { - sector_num = ((s.hcyl << 8) | s.lcyl) * s.heads * s.sectors + - (s.select & 0x0f) * s.sectors + (s.sector - 1); + sector_num = (((long) s.hcyl << 8) | s.lcyl) * s.heads * s.sectors + + (long) (s.select & 0x0f) * s.sectors + (s.sector - 1); } return sector_num; } @@ -470,8 +468,8 @@ static private void ide_set_sector(IDEState s, long sector_num) s.hob_hcyl = (int)((sector_num >> 40) & 0xFF); } } else { - cyl = sector_num / (s.heads * s.sectors); - r = sector_num % (s.heads * s.sectors); + cyl = sector_num / ((long) s.heads * s.sectors); + r = sector_num % ((long) s.heads * s.sectors); s.hcyl = (int)((cyl >> 8) & 0xFF); s.lcyl = (int)(cyl & 0xFF); s.select = (int)((s.select & 0xf0) | ((r / s.sectors) & 0x0f) & 0xFF); @@ -514,11 +512,7 @@ public void call(Object opaque, int ret) { } }; - private static final EndTransferFunc ide_sector_read = new EndTransferFunc() { - public void call(IDEState s) { - ide_sector_read(s); - } - }; + private static final EndTransferFunc ide_sector_read = s -> ide_sector_read(s); static private void ide_sector_read(IDEState s) { @@ -549,7 +543,7 @@ static private void ide_sector_read(IDEState s) s.iov.iov_len = n * Block.BDRV_SECTOR_SIZE; QemuCommon.qemu_iovec_init_external(s.qiov, s.iov, 1); - Block.bdrv_acct_start(s.bs, s.acct, n * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_READ); + Block.bdrv_acct_start(s.bs, s.acct, (long) n * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_READ); s.pio_aiocb = Block.bdrv_aio_readv(s.bs, sector_num, s.qiov, n, ide_sector_read_cb, s); } @@ -682,10 +676,10 @@ static private void ide_sector_start_dma(IDEState s, ide_dma_cmd dma_cmd) switch (dma_cmd) { case IDE_DMA_READ: - Block.bdrv_acct_start(s.bs, s.acct, s.nsector * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_READ); + Block.bdrv_acct_start(s.bs, s.acct, (long) s.nsector * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_READ); break; case IDE_DMA_WRITE: - Block.bdrv_acct_start(s.bs, s.acct, s.nsector * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_WRITE); + Block.bdrv_acct_start(s.bs, s.acct, (long) s.nsector * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_WRITE); break; default: break; @@ -700,7 +694,7 @@ static private void ide_sector_write_timer_cb(Object opaque) ide_set_irq(s.bus); } - static private Block.BlockDriverCompletionFunc ide_sector_write_cb = new Block.BlockDriverCompletionFunc() { + static private final Block.BlockDriverCompletionFunc ide_sector_write_cb = new Block.BlockDriverCompletionFunc() { public void call(Object opaque, int ret) { IDEState s = (IDEState)opaque; @@ -748,45 +742,40 @@ public void call(Object opaque, int ret) } }; - static private EndTransferFunc ide_sector_write = new EndTransferFunc() { - public void call(IDEState s) { - long sector_num; - int n; + static private final EndTransferFunc ide_sector_write = s -> { + long sector_num; + int n; - s.status = READY_STAT | SEEK_STAT | BUSY_STAT; - sector_num = ide_get_sector(s); - if (DEBUG_IDE) - System.out.println("sector=" + sector_num); - n = s.nsector; - if (n > s.req_nb_sectors) { - n = s.req_nb_sectors; - } + s.status = READY_STAT | SEEK_STAT | BUSY_STAT; + sector_num = ide_get_sector(s); + if (DEBUG_IDE) + System.out.println("sector=" + sector_num); + n = s.nsector; + if (n > s.req_nb_sectors) { + n = s.req_nb_sectors; + } - s.iov.iov_base = s.io_buffer; - s.iov.iov_len = n * Block.BDRV_SECTOR_SIZE; - QemuCommon.qemu_iovec_init_external(s.qiov, s.iov, 1); + s.iov.iov_base = s.io_buffer; + s.iov.iov_len = n * Block.BDRV_SECTOR_SIZE; + QemuCommon.qemu_iovec_init_external(s.qiov, s.iov, 1); - Block.bdrv_acct_start(s.bs, s.acct, n * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_READ); - s.pio_aiocb = Block.bdrv_aio_writev(s.bs, sector_num, s.qiov, n, ide_sector_write_cb, s); - } + Block.bdrv_acct_start(s.bs, s.acct, (long) n * Block.BDRV_SECTOR_SIZE, Block.BDRV_ACCT_READ); + s.pio_aiocb = Block.bdrv_aio_writev(s.bs, sector_num, s.qiov, n, ide_sector_write_cb, s); }; - static private final Block.BlockDriverCompletionFunc ide_flush_cb = new Block.BlockDriverCompletionFunc() { - public void call(Object opaque, int ret) - { - IDEState s = (IDEState)opaque; + static private final Block.BlockDriverCompletionFunc ide_flush_cb = (opaque, ret) -> { + IDEState s = (IDEState)opaque; - if (ret < 0) { - /* XXX: What sector number to set here? */ - if (ide_handle_rw_error(s, -ret, BM_STATUS_RETRY_FLUSH)) { - return; - } + if (ret < 0) { + /* XXX: What sector number to set here? */ + if (ide_handle_rw_error(s, -ret, BM_STATUS_RETRY_FLUSH)) { + return; } - - Block.bdrv_acct_done(s.bs, s.acct); - s.status = READY_STAT | SEEK_STAT; - ide_set_irq(s.bus); } + + Block.bdrv_acct_done(s.bs, s.acct); + s.status = READY_STAT | SEEK_STAT; + ide_set_irq(s.bus); }; static private void ide_flush_cache(IDEState s) @@ -816,7 +805,7 @@ static private void ide_cfata_metadata_inquiry(IDEState s) { } static private void ide_cfata_metadata_read(IDEState s){ - if (((s.hcyl << 16) | s.lcyl) << 9 > s.mdata_size + 2) { + if ((((long) s.hcyl << 16) | s.lcyl) << 9 > s.mdata_size + 2) { s.status = ERR_STAT; s.error = ABRT_ERR; return; @@ -827,18 +816,18 @@ static private void ide_cfata_metadata_read(IDEState s){ put_le16(p, 0, s.media_changed); /* Media status */ - System.arraycopy(s.mdata_storage, (((s.hcyl << 16) | s.lcyl) << 9), p, 1, (int)Math.min(Math.min(s.mdata_size - (((s.hcyl << 16) | s.lcyl) << 9), s.nsector << 9), 0x200 - 2)); + System.arraycopy(s.mdata_storage, (((s.hcyl << 16) | s.lcyl) << 9), p, 1, (int)Math.min(Math.min(s.mdata_size - ((((long) s.hcyl << 16) | s.lcyl) << 9), (long) s.nsector << 9), 0x200 - 2)); } static private void ide_cfata_metadata_write(IDEState s) { - if (((s.hcyl << 16) | s.lcyl) << 9 > s.mdata_size + 2) { + if ((((long) s.hcyl << 16) | s.lcyl) << 9 > s.mdata_size + 2) { s.status = ERR_STAT; s.error = ABRT_ERR; return; } s.media_changed = 0; - System.arraycopy(s.io_buffer, 2, s.mdata_storage, (((s.hcyl << 16) | s.lcyl) << 9), (int) Math.min(Math.min(s.mdata_size - (((s.hcyl << 16) | s.lcyl) << 9), s.nsector << 9), 0x200 - 2)); + System.arraycopy(s.io_buffer, 2, s.mdata_storage, (((s.hcyl << 16) | s.lcyl) << 9), (int) Math.min(Math.min(s.mdata_size - ((((long) s.hcyl << 16) | s.lcyl) << 9), (long) s.nsector << 9), 0x200 - 2)); } /* called when the inserted state of the media has changed */ @@ -974,7 +963,7 @@ static private void ide_ioport_write(Object opaque, int addr, int val) { static final private byte ALL_OK = (byte)(HD_OK | CD_OK | CFA_OK); /* See ACS-2 T13/2015-D Table B.2 Command codes */ - static private byte[] ide_cmd_table = new byte[0x100]; + static private final byte[] ide_cmd_table = new byte[0x100]; static { /* NOP not implemented, mandatory for CD */ ide_cmd_table[CFA_REQ_EXT_ERROR_CODE] = CFA_OK; @@ -1065,15 +1054,13 @@ static private void ide_exec_cmd(IDEBus bus, int val) { throw new AbortException(); switch (val) { case WIN_DSM: - switch (s.feature) { - case DSM_TRIM: - if (s.bs == null) { - throw new AbortException(); - } - ide_sector_start_dma(s, ide_dma_cmd.IDE_DMA_TRIM); - break; - default: + if (s.feature == DSM_TRIM) { + if (s.bs == null) { throw new AbortException(); + } + ide_sector_start_dma(s, ide_dma_cmd.IDE_DMA_TRIM); + } else { + throw new AbortException(); } break; case WIN_IDENTIFY: @@ -1375,7 +1362,7 @@ static private void ide_exec_cmd(IDEBus bus, int val) { s.io_buffer[0x03] = (byte)s.sector; /* Sector */ s.io_buffer[0x04] = (byte)(ide_get_sector(s) >>> 16); /* LBA MSB */ s.io_buffer[0x05] = (byte)(ide_get_sector(s) >>> 8); /* LBA */ - s.io_buffer[0x06] = (byte)(ide_get_sector(s) >> 0); /* LBA LSB */ + s.io_buffer[0x06] = (byte)(ide_get_sector(s)); /* LBA LSB */ s.io_buffer[0x13] = 0x00; /* Erase flag */ s.io_buffer[0x18] = 0x00; /* Hot count */ s.io_buffer[0x19] = 0x00; /* Hot count */ @@ -1402,12 +1389,10 @@ static private void ide_exec_cmd(IDEBus bus, int val) { ide_set_irq(s.bus); break; case IBM_SENSE_CONDITION: - switch (s.feature) { - case 0x01: /* sense temperature in device */ - s.nsector = 0x50; /* +20 C */ - break; - default: - throw new AbortException(); + if (s.feature == 0x01) { /* sense temperature in device */ + s.nsector = 0x50; /* +20 C */ + } else { + throw new AbortException(); } s.status = READY_STAT | SEEK_STAT; ide_set_irq(s.bus); @@ -1460,7 +1445,7 @@ static private void ide_exec_cmd(IDEBus bus, int val) { for (n = 0; n < 30; n++) { if (smart_attributes[n][0] == 0) break; - s.io_buffer[2 + 0 + (n * 12)] = (byte)smart_attributes[n][0]; + s.io_buffer[2 + (n * 12)] = (byte)smart_attributes[n][0]; s.io_buffer[2 + 1 + (n * 12)] = (byte)smart_attributes[n][11]; } for (n = 0; n < 511; n++) /* checksum */ @@ -1779,15 +1764,13 @@ static private int ide_data_readl(Object opaque, int addr) return ret; } - final static private Internal.EndTransferFunc ide_dummy_transfer_stop = new Internal.EndTransferFunc() { - public void call(Internal.IDEState s) { - s.data_ptr = s.io_buffer; - s.data_end = 0; - s.io_buffer[0] = (byte)0xff; - s.io_buffer[1] = (byte)0xff; - s.io_buffer[2] = (byte)0xff; - s.io_buffer[3] = (byte)0xff; - } + final static private Internal.EndTransferFunc ide_dummy_transfer_stop = s -> { + s.data_ptr = s.io_buffer; + s.data_end = 0; + s.io_buffer[0] = (byte)0xff; + s.io_buffer[1] = (byte)0xff; + s.io_buffer[2] = (byte)0xff; + s.io_buffer[3] = (byte)0xff; }; static private void ide_reset(IDEState s) @@ -1916,11 +1899,11 @@ public boolean has_resize_cb() { } }; - static private int ide_init_drive(IDEState s, Block.BlockDriverState bs, int kind, - String version, String serial, String model, - long wwn, - int cylinders, int heads, int secs, - int chs_trans) + static private void ide_init_drive(IDEState s, Block.BlockDriverState bs, int kind, + String version, String serial, String model, + long wwn, + int cylinders, int heads, int secs, + int chs_trans) { long nb_sectors; @@ -1945,20 +1928,20 @@ static private int ide_init_drive(IDEState s, Block.BlockDriverState bs, int kin Block.bdrv_set_buffer_alignment(bs, 2048); } else { if (!Block.bdrv_is_inserted(s.bs)) { - Log.log_msg("Device needs media, but drive is empty"); - return -1; + System.out.println("Device needs media, but drive is empty"); + return; } if (Block.bdrv_is_read_only(bs)) { - Log.log_msg("Can't use a read-only drive"); - return -1; + System.out.println("Can't use a read-only drive"); + return; } } - if (serial != null && serial.length()>0) + if (serial != null && !serial.isEmpty()) s.drive_serial_str = serial; else s.drive_serial_str = String.valueOf(s.drive_serial); - if (model != null && model.length()>0) { + if (model != null && !model.isEmpty()) { s.drive_model_str = model; } else { switch (kind) { @@ -1974,7 +1957,7 @@ static private int ide_init_drive(IDEState s, Block.BlockDriverState bs, int kin } } - if (version != null && version.length()>0) { + if (version != null && !version.isEmpty()) { s.version = version; } else { s.version = Config.VERSION; @@ -1982,7 +1965,6 @@ static private int ide_init_drive(IDEState s, Block.BlockDriverState bs, int kin ide_reset(s); Block.bdrv_iostatus_enable(bs); - return 0; } static int drive_serial = 1; @@ -2003,27 +1985,16 @@ static private void ide_init1(IDEBus bus, int unit) { static private final class IDEDMANop extends IDEDMAOps { public IDEDMANop() { - start_dma = new DMAStartFunc() { - public void call(IDEDMA dma, IDEState s, Block.BlockDriverCompletionFunc cb) { - } + start_dma = (dma, s, cb) -> { }; - start_transfer = new DMAFunc() { - public int call(IDEDMA dma) { - return 0; - } - }; - prepare_buf = new DMAIntFunc() { - public int call(IDEDMA dma, int x) { - return 0; - } + start_transfer = dma -> { }; + prepare_buf = (dma, x) -> 0; rw_buf = prepare_buf; set_unit = prepare_buf; add_status = prepare_buf; set_inactive = start_transfer; - restart_cb = new DMARestartFunc() { - public void call(Object opaque, int x, int y) { - } + restart_cb = (opaque, x, y) -> { }; reset = start_transfer; } @@ -2045,8 +2016,7 @@ public static void ide_init2(IDEBus bus, int irq) { static private final IDEBus[] idecontroller = new IDEBus[4]; static public Block.BlockDriverState getFirstCdrom() { - for (int i=0;i { + IDEBus ide = match_ide_controller(port); + ide_ioport_write(ide, port, val); }; - public final static IoHandler.IO_WriteHandler ide_data_writew_handler = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - ide_data_writew(ide, port, val); - } + /*Bitu*//*Bitu*//*Bitu*/ + public final static IoHandler.IO_WriteHandler ide_data_writew_handler = (port, val, iolen) -> { + IDEBus ide = match_ide_controller(port); + ide_data_writew(ide, port, val); }; - public final static IoHandler.IO_WriteHandler ide_data_writel_handler = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - ide_data_writel(ide, port, val); - } + /*Bitu*//*Bitu*//*Bitu*/ + public final static IoHandler.IO_WriteHandler ide_data_writel_handler = (port, val, iolen) -> { + IDEBus ide = match_ide_controller(port); + ide_data_writel(ide, port, val); }; - public static final IoHandler.IO_ReadHandler ide_ioport_read_handler = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - return ide_ioport_read(ide, port); - } + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_ReadHandler ide_ioport_read_handler = (port, iolen) -> { + IDEBus ide = match_ide_controller(port); + return ide_ioport_read(ide, port); }; - public static final IoHandler.IO_ReadHandler ide_data_readw_handler = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - return ide_data_readw(ide, port); - } + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_ReadHandler ide_data_readw_handler = (port, iolen) -> { + IDEBus ide = match_ide_controller(port); + return ide_data_readw(ide, port); }; - public static final IoHandler.IO_ReadHandler ide_data_readl_handler = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - return ide_data_readl(ide, port); - } + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_ReadHandler ide_data_readl_handler = (port, iolen) -> { + IDEBus ide = match_ide_controller(port); + return ide_data_readl(ide, port); }; - public static final IoHandler.IO_ReadHandler ide_status_read_handler = new IoHandler.IO_ReadHandler() { - public /*Bitu*/int call(/*Bitu*/int port, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - return ide_status_read(ide, port); - } + /*Bitu*//*Bitu*//*Bitu*/ + public static final IoHandler.IO_ReadHandler ide_status_read_handler = (port, iolen) -> { + IDEBus ide = match_ide_controller(port); + return ide_status_read(ide, port); }; - public final static IoHandler.IO_WriteHandler ide_cmd_write_handler = new IoHandler.IO_WriteHandler() { - public void call(/*Bitu*/int port, /*Bitu*/int val, /*Bitu*/int iolen) { - IDEBus ide = match_ide_controller(port); - ide_cmd_write(ide, port, val); - } + /*Bitu*//*Bitu*//*Bitu*/ + public final static IoHandler.IO_WriteHandler ide_cmd_write_handler = (port, val, iolen) -> { + IDEBus ide = match_ide_controller(port); + ide_cmd_write(ide, port, val); }; - public static Section.SectionFunction IDE_Destroy = new Section.SectionFunction() { - public void call(Section section) { - /* TODO: Free each IDE object */ - } + public static Section.SectionFunction IDE_Destroy = section -> { + /* TODO: Free each IDE object */ }; static void IDE_Init(Section sec,int i,String tag) { @@ -2235,12 +2194,10 @@ static public void IDE_Attach(boolean isCD, int index,boolean slave, FileIO file ide_init_drive(c.ifs[slave ? 1 : 0], bs, isCD?IDE_CD:IDE_HD, "version", "serial", null, 0, cylinders.value, heads.value, sectors.value, trans.value); } - public static Section.SectionFunction IDE_Init = new Section.SectionFunction() { - public void call(Section sec) { - IDE_Init(sec, 0, "primary"); - IDE_Init(sec, 1, "secondary"); - IDE_Init(sec, 2, "tertiary"); - IDE_Init(sec,3, " quaternary"); - } + public static final Section.SectionFunction IDE_Init = sec -> { + IDE_Init(sec, 0, "primary"); + IDE_Init(sec, 1, "secondary"); + IDE_Init(sec, 2, "tertiary"); + IDE_Init(sec,3, " quaternary"); }; } \ No newline at end of file diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/IDEBus.java b/jdosbox/src/main/java/jdos/hardware/qemu/IDEBus.java index c3d6bf7b..9f77025a 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/IDEBus.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/IDEBus.java @@ -27,27 +27,27 @@ public class IDEBus extends Module_base { 0x36E /* quaternary */ }; - public IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[8]; - public IoHandler.IO_ReadHandleObject[] ReadHandlerW = new IoHandler.IO_ReadHandleObject[2]; - public IoHandler.IO_ReadHandleObject[] ReadHandlerD = new IoHandler.IO_ReadHandleObject[4]; - public IoHandler.IO_ReadHandleObject ReadHandlerAlt = new IoHandler.IO_ReadHandleObject(); + public final IoHandler.IO_ReadHandleObject[] ReadHandler = new IoHandler.IO_ReadHandleObject[8]; + public final IoHandler.IO_ReadHandleObject[] ReadHandlerW = new IoHandler.IO_ReadHandleObject[2]; + public final IoHandler.IO_ReadHandleObject[] ReadHandlerD = new IoHandler.IO_ReadHandleObject[4]; + public final IoHandler.IO_ReadHandleObject ReadHandlerAlt = new IoHandler.IO_ReadHandleObject(); - public IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[8]; - public IoHandler.IO_WriteHandleObject[] WriteHandlerW = new IoHandler.IO_WriteHandleObject[2]; - public IoHandler.IO_WriteHandleObject[] WriteHandlerD = new IoHandler.IO_WriteHandleObject[4]; - public IoHandler.IO_WriteHandleObject WriteHandlerAlt = new IoHandler.IO_WriteHandleObject(); + public final IoHandler.IO_WriteHandleObject[] WriteHandler = new IoHandler.IO_WriteHandleObject[8]; + public final IoHandler.IO_WriteHandleObject[] WriteHandlerW = new IoHandler.IO_WriteHandleObject[2]; + public final IoHandler.IO_WriteHandleObject[] WriteHandlerD = new IoHandler.IO_WriteHandleObject[4]; + public final IoHandler.IO_WriteHandleObject WriteHandlerAlt = new IoHandler.IO_WriteHandleObject(); //BusState qbus; - Internal.IDEDevice master = new Internal.IDEDevice(); - Internal.IDEDevice slave = new Internal.IDEDevice(); - Internal.IDEState[] ifs = new Internal.IDEState[2]; + final Internal.IDEDevice master = new Internal.IDEDevice(); + final Internal.IDEDevice slave = new Internal.IDEDevice(); + final Internal.IDEState[] ifs = new Internal.IDEState[2]; int bus_id; Internal.IDEDMA dma = new Internal.IDEDMA(); int unit; int cmd; int irq; - int base_io = 0; - int alt_io = 0; + int base_io; + int alt_io; int error_status; diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/Internal.java b/jdosbox/src/main/java/jdos/hardware/qemu/Internal.java index b16565f1..b8f85d76 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/Internal.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/Internal.java @@ -310,23 +310,23 @@ public class Internal { static public final int IDE_CFATA=2; public interface EndTransferFunc { - public void call(IDEState s); + void call(IDEState s); } - public static interface DMAStartFunc { - public void call(IDEDMA dma, IDEState s, Block.BlockDriverCompletionFunc cb); + public interface DMAStartFunc { + void call(IDEDMA dma, IDEState s, Block.BlockDriverCompletionFunc cb); } - public static interface DMAFunc { - public int call(IDEDMA dma); + public interface DMAFunc { + void call(IDEDMA dma); } - public static interface DMAIntFunc { - public int call(IDEDMA dma, int x); + public interface DMAIntFunc { + int call(IDEDMA dma, int x); } - public static interface DMARestartFunc { - public void call(Object opaque, int x, int y); + public interface DMARestartFunc { + void call(Object opaque, int x, int y); } static public class unreported_events { @@ -334,7 +334,7 @@ static public class unreported_events { public boolean new_media; } - static public enum ide_dma_cmd { + public enum ide_dma_cmd { IDE_DMA_READ, IDE_DMA_WRITE, IDE_DMA_TRIM, @@ -351,7 +351,7 @@ static public final class IDEState { public long nb_sectors; public int mult_sectors; public boolean identify_set; - public byte[] identify_data = new byte[512]; + public final byte[] identify_data = new byte[512]; public int drive_serial; public String drive_serial_str; public String drive_model_str; @@ -378,7 +378,7 @@ static public final class IDEState { public Block.BlockDriverState bs; public String version; /* ATAPI specific */ - public unreported_events events = new unreported_events(); + public final unreported_events events = new unreported_events(); public int sense_key; public int asc; public boolean tray_open; @@ -390,9 +390,9 @@ static public final class IDEState { public long lba; public int cd_sector_size; public int atapi_dma; /* true if dma is requested for the packet cmd */ - public Block.BlockAcctCookie acct = new Block.BlockAcctCookie(); + public final Block.BlockAcctCookie acct = new Block.BlockAcctCookie(); public Block.BlockDriverAIOCB pio_aiocb; - public QemuCommon.iovec iov = new QemuCommon.iovec(); + public final QemuCommon.iovec iov = new QemuCommon.iovec(); public QemuCommon.QEMUIOVector qiov; /* ATA DMA state */ public int io_buffer_offset; @@ -468,12 +468,12 @@ public IDEDMA(IDEDMAOps ops) { public static class BlockConf { //BlockDriverState bs; - long physical_block_size = 512; - long logical_block_size = 512; + final long physical_block_size = 512; + final long logical_block_size = 512; long min_io_size; long opt_io_size; long bootindex; - int discard_granularity = 0; + final int discard_granularity = 0; /* geometry, not all devices use this */ long cyls, heads, secs; @@ -492,7 +492,7 @@ public long get_physical_block_exp() public static class IDEDevice { //DeviceState qdev; int unit; - BlockConf conf = new BlockConf(); + final BlockConf conf = new BlockConf(); int chs_trans; String version; String serial; @@ -561,7 +561,7 @@ static void writed(byte[] b, int offset, long value) { } static long be_readd(byte[] b, int offset) { - return (b[offset+3] & 0xFF) | ((b[offset+2] & 0xFF) << 8) | ((b[offset+1] & 0xFF) << 16) | ((b[offset] & 0xFF) << 24); + return (b[offset+3] & 0xFF) | ((b[offset+2] & 0xFF) << 8) | ((b[offset+1] & 0xFF) << 16) | ((long) (b[offset] & 0xFF) << 24); } static int be_readw(byte[] b, int offset) { return (b[offset+1] & 0xFF) | ((b[offset] & 0xFF) << 8); diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/MemoryRegion.java b/jdosbox/src/main/java/jdos/hardware/qemu/MemoryRegion.java index 096fb3bd..08a0d7a2 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/MemoryRegion.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/MemoryRegion.java @@ -4,7 +4,7 @@ import jdos.hardware.Memory; public class MemoryRegion { - Paging.PageHandler handler; + final Paging.PageHandler handler; public MemoryRegion(int address, int offset, int size, String name, Paging.PageHandler handler) { this.address = address; @@ -18,8 +18,8 @@ public void destroy() { Memory.MEM_ResetPageHandler( address, size ); } - int address; - int size; - int offset; - String name; + final int address; + final int size; + final int offset; + final String name; } diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/Qemu.java b/jdosbox/src/main/java/jdos/hardware/qemu/Qemu.java index aed3d49d..56974d70 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/Qemu.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/Qemu.java @@ -29,13 +29,14 @@ static public long qemu_get_clock_ms() { static public void rom_add_vga(String fileName, boolean registerBochsPorts) { try { byte[] videoData = new byte[0x10000]; - boolean videoBiosFound = false; + boolean videoBiosFound; try { FileInputStream videofis = new FileInputStream("vgabios.bin"); videofis.read(videoData); videofis.close(); videoBiosFound = true; } catch (Exception e) { + throw new RuntimeException(e); } if (!videoBiosFound) { FileIO fileIO = FileIOFactory.open("jar://vgabios.bin", FileIOFactory.MODE_READ); @@ -46,13 +47,12 @@ static public void rom_add_vga(String fileName, boolean registerBochsPorts) { for(int i=0;i { + if (port == 0x500 || port == 0x503) { + System.out.print((char)val); + } else if (port == 0x501 || port == 0x502) { + System.out.println("panic in vgabios at line "+val); } }; new IoHandler.IO_WriteHandleObject().Install(0x500, vga_write, IoHandler.IO_MA); diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/RawBlockDriver.java b/jdosbox/src/main/java/jdos/hardware/qemu/RawBlockDriver.java index 444df68b..11b8a710 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/RawBlockDriver.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/RawBlockDriver.java @@ -3,8 +3,8 @@ import jdos.util.FileIO; public class RawBlockDriver extends BlockDriver { - FileIO file; - int sector_size = 512; + final FileIO file; + final int sector_size = 512; long current_fpos = -1; public RawBlockDriver(FileIO file) { diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/VGA.java b/jdosbox/src/main/java/jdos/hardware/qemu/VGA.java index d0e5151c..2b7a35f9 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/VGA.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/VGA.java @@ -162,7 +162,7 @@ public void call(VGACommonState s) { int dots; int clocking_mode; int clock_sel; - final int clk_hz[] = {25175000, 28322000, 25175000, 25175000}; + final int[] clk_hz = {25175000, 28322000, 25175000, 25175000}; long chars_per_sec; vga_precise_retrace r = s.retrace_info; @@ -183,7 +183,7 @@ public void call(VGACommonState s) { htotal_chars <<= clocking_mode; - r.total_chars = vtotal_lines * htotal_chars; + r.total_chars = (long) vtotal_lines * htotal_chars; if (r.freq!=0) { r.ticks_per_char = Qemu.get_ticks_per_sec() / (r.total_chars * r.freq); } else { @@ -247,7 +247,7 @@ public static boolean vga_ioport_invalid(VGACommonState s, int addr) } private static class vga_ioport_write implements IoHandler.IO_WriteHandler { - VGACommonState s; + final VGACommonState s; public vga_ioport_write(VGACommonState s) { this.s = s; } @@ -377,7 +377,7 @@ public void call(/*Bitu*/int addr, /*Bitu*/int val, /*Bitu*/int len) { } } private static class vga_ioport_read implements IoHandler.IO_ReadHandler { - VGACommonState s; + final VGACommonState s; public vga_ioport_read(VGACommonState s) { this.s = s; } @@ -469,7 +469,7 @@ public vga_ioport_read(VGACommonState s) { } private static class vbe_ioport_read_index implements IoHandler.IO_ReadHandler { - VGACommonState s; + final VGACommonState s; public vbe_ioport_read_index(VGACommonState s) { this.s = s; } @@ -481,7 +481,7 @@ public vbe_ioport_read_index(VGACommonState s) { } private static class vbe_ioport_read_data implements IoHandler.IO_ReadHandler { - VGACommonState s; + final VGACommonState s; public vbe_ioport_read_data(VGACommonState s) { this.s = s; } @@ -520,7 +520,7 @@ public vbe_ioport_read_data(VGACommonState s) { } private static class vbe_ioport_write_index implements IoHandler.IO_WriteHandler { - VGACommonState s; + final VGACommonState s; public vbe_ioport_write_index(VGACommonState s) { this.s = s; } @@ -530,7 +530,7 @@ public void call(/*Bitu*/int addr, /*Bitu*/int val, /*Bitu*/int len) { } private static class vbe_ioport_write_data implements IoHandler.IO_WriteHandler { - VGACommonState s; + final VGACommonState s; public vbe_ioport_write_data(VGACommonState s) { this.s = s; } @@ -682,7 +682,7 @@ public void call(/*Bitu*/int addr, /*Bitu*/int val, /*Bitu*/int len) { } static private class vga_mem extends Paging.PageHandler { - VGACommonState s; + final VGACommonState s; public vga_mem(VGACommonState s) { this.s = s; flags=Paging.PFLAG_NOCODE; @@ -881,14 +881,14 @@ public void writeb(/*PhysPt*/int addr,/*Bitu*/int val) { static private void vga_draw_glyph_line_8(VGACommonState s, int d, int font_data, int xorcol, int bgcol) { s.writed(d, (dmask16[(font_data >> 4)] & xorcol) ^ bgcol); - s.writed(d+4, (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol); + s.writed(d+4, (dmask16[(font_data) & 0xf] & xorcol) ^ bgcol); } static private void vga_draw_glyph_line_16(VGACommonState s, int d, int font_data, int xorcol, int bgcol) { s.writed(d, (dmask4[(font_data >> 6)] & xorcol) ^ bgcol); s.writed(d+4, (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol); s.writed(d+8, (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol); - s.writed(d+12, (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol); + s.writed(d+12, (dmask4[(font_data) & 3] & xorcol) ^ bgcol); } static private void vga_draw_glyph_line_32(VGACommonState s, int d, int font_data, int xorcol, int bgcol) { @@ -899,11 +899,11 @@ static private void vga_draw_glyph_line_32(VGACommonState s, int d, int font_dat s.writed(d+16, (-((font_data >> 3) & 1) & xorcol) ^ bgcol); s.writed(d+20, (-((font_data >> 2) & 1) & xorcol) ^ bgcol); s.writed(d+24, (-((font_data >> 1) & 1) & xorcol) ^ bgcol); - s.writed(d+28, (-((font_data >> 0) & 1) & xorcol) ^ bgcol); + s.writed(d+28, (-((font_data) & 1) & xorcol) ^ bgcol); } - static private interface vga_draw_glyph8_func { - public void call (VGACommonState s, int d, int linesize, int font_ptr, int h, int fgcol, int bgcol); + private interface vga_draw_glyph8_func { + void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int fgcol, int bgcol); } static private class vga_draw_glyph8_8 implements vga_draw_glyph8_func { @@ -999,8 +999,8 @@ public void call (VGACommonState s, int d, int linesize, int font_ptr, int h, in } } - static private interface vga_draw_glyph9_func { - public void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int fgcol, int bgcol, boolean dup9); + private interface vga_draw_glyph9_func { + void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int fgcol, int bgcol, boolean dup9); } static private class vga_draw_glyph9_8 implements vga_draw_glyph9_func { @@ -1012,7 +1012,7 @@ public void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int do { font_data = s.readb(font_ptr); s.writed(d, (dmask16[(font_data >> 4)] & xorcol) ^ bgcol); - v = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol; + v = (dmask16[(font_data) & 0xf] & xorcol) ^ bgcol; s.writed(d+4, v); if (dup9) s.writeb(d+8, v >> 24); @@ -1035,7 +1035,7 @@ public void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int s.writed(d, (dmask4[(font_data >> 6)] & xorcol) ^ bgcol); s.writed(d+4, (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol); s.writed(d+8, (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol); - v = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol; + v = (dmask4[(font_data) & 3] & xorcol) ^ bgcol; s.writed(d+12, v); if (dup9) s.writew(d+16, v >> 16); @@ -1062,7 +1062,7 @@ public void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int s.writed(d+16, (-((font_data >> 3) & 1) & xorcol) ^ bgcol); s.writed(d+20, (-((font_data >> 2) & 1) & xorcol) ^ bgcol); s.writed(d+24, (-((font_data >> 1) & 1) & xorcol) ^ bgcol); - v = (-((font_data >> 0) & 1) & xorcol) ^ bgcol; + v = (-((font_data) & 1) & xorcol) ^ bgcol; s.writed(d+28, v); if (dup9) s.writed(d+32, v); @@ -1075,8 +1075,8 @@ public void call(VGACommonState s, int d, int linesize, int font_ptr, int h, int } } - static private interface vga_draw_line_func { - public void call(VGACommonState s1, int d, int s, int width); + private interface vga_draw_line_func { + void call(VGACommonState s1, int d, int s, int width); } static private final class vga_draw_line2_8 implements vga_draw_line_func { @@ -1094,14 +1094,14 @@ public void call(VGACommonState s1, int d, int s, int width) { s1.writeb(d, (v >> 12) & 0xf); s1.writeb(d+1, (v >> 8) & 0xf); s1.writeb(d+2, (v >> 4) & 0xf); - s1.writeb(d+3, (v >> 0) & 0xf); + s1.writeb(d+3, (v) & 0xf); v = expand2[GET_PLANE(data, 1)]; v |= expand2[GET_PLANE(data, 3)] << 2; s1.writeb(d+4, (v >> 12) & 0xf); s1.writeb(d+5, (v >> 8) & 0xf); s1.writeb(d+6, (v >> 4) & 0xf); - s1.writeb(d+7, (v >> 0) & 0xf); + s1.writeb(d+7, (v) & 0xf); d += 8; s += 4; } @@ -1125,14 +1125,14 @@ public void call(VGACommonState s1, int d, int s, int width) { s1.writew(d, palette[v >> 12]); s1.writew(d+2, palette[(v >> 8) & 0xf]); s1.writew(d+4, palette[(v >> 4) & 0xf]); - s1.writew(d+6, palette[(v >> 0) & 0xf]); + s1.writew(d+6, palette[(v) & 0xf]); v = expand2[GET_PLANE(data, 1)]; v |= expand2[GET_PLANE(data, 3)] << 2; s1.writew(d+8, palette[v >> 12]); s1.writew(d+10, palette[(v >> 8) & 0xf]); s1.writew(d+12, palette[(v >> 4) & 0xf]); - s1.writew(d+14, palette[(v >> 0) & 0xf]); + s1.writew(d+14, palette[(v) & 0xf]); d += 16; s += 4; } @@ -1156,14 +1156,14 @@ public void call(VGACommonState s1, int d, int s, int width) { s1.writed(d, palette[v >> 12]); s1.writed(d+4, palette[(v >> 8) & 0xf]); s1.writed(d+8, palette[(v >> 4) & 0xf]); - s1.writed(d+12, palette[(v >> 0) & 0xf]); + s1.writed(d+12, palette[(v) & 0xf]); v = expand2[GET_PLANE(data, 1)]; v |= expand2[GET_PLANE(data, 3)] << 2; s1.writed(d+16, palette[v >> 12]); s1.writed(d+20, palette[(v >> 8) & 0xf]); s1.writed(d+24, palette[(v >> 4) & 0xf]); - s1.writed(d+28, palette[(v >> 0) & 0xf]); + s1.writed(d+28, palette[(v) & 0xf]); d += 32; s += 4; } @@ -1191,7 +1191,7 @@ public void call(VGACommonState s1, int d, int s, int width) { s1.writeb(d+4, (v >> 12) & 0xf); s1.writeb(d+5, (v >> 8) & 0xf); s1.writeb(d+6, (v >> 4) & 0xf); - s1.writeb(d+7, (v >> 0) & 0xf); + s1.writeb(d+7, (v) & 0xf); d += 8; s += 4; } @@ -1221,7 +1221,7 @@ public void call(VGACommonState s1, int d, int s, int width) { s1.writew(d+8, palette[(v >> 12) & 0xf]); s1.writew(d+10, palette[(v >> 8) & 0xf]); s1.writew(d+12, palette[(v >> 4) & 0xf]); - s1.writew(d+14, palette[(v >> 0) & 0xf]); + s1.writew(d+14, palette[(v) & 0xf]); d += 16; s += 4; } @@ -1251,7 +1251,7 @@ public void call(VGACommonState s1, int d, int s, int width) { s1.writed(d+16, palette[(v >> 12) & 0xf]); s1.writed(d+20, palette[(v >> 8) & 0xf]); s1.writed(d+24, palette[(v >> 4) & 0xf]); - s1.writed(d+28, palette[(v >> 0) & 0xf]); + s1.writed(d+28, palette[(v) & 0xf]); d += 32; s += 4; } @@ -2161,7 +2161,7 @@ static void vga_draw_text(VGACommonState s, boolean full_update) s.last_cw = cw; full_update = true; Render.RENDER_SetSize(s.last_scr_width, s.last_scr_height, 32, 70, (double)s.last_scr_width/s.last_scr_height, false, false); // don't use 8 bpp - if (!Render.RENDER_StartUpdate()) + if (Render.RENDER_StartUpdate()) return; } s.rgb_to_pixel = rgb_to_pixel_dup_table[get_depth_index(s.ds)]; @@ -2223,10 +2223,7 @@ static void vga_draw_text(VGACommonState s, boolean full_update) if (cw != 9) { vga_draw_glyph8.call(s, d1, linesize, font_ptr, cheight, fgcol, bgcol); } else { - dup9 = false; - if (ch >= 0xb0 && ch <= 0xdf && (s.ar[VGA_ATC_MODE] & 0x04)!=0) { - dup9 = true; - } + dup9 = ch >= 0xb0 && ch <= 0xdf && (s.ar[VGA_ATC_MODE] & 0x04) != 0; vga_draw_glyph9.call(s, d1, linesize, font_ptr, cheight, fgcol, bgcol, dup9); } if (src == cursor_ptr && (s.cr[VGA_CRTC_CURSOR_START] & 0x20)==0 && s.cursor_visible_phase) { @@ -2454,7 +2451,7 @@ static void vga_draw_graphic(VGACommonState s, boolean full_update) s.last_depth = depth; full_update = true; Render.RENDER_SetSize(width, height, 32, 70, (double)disp_width/height, disp_width>width, false); - if (!Render.RENDER_StartUpdate()) + if (Render.RENDER_StartUpdate()) return; } @@ -2525,10 +2522,9 @@ static void vga_draw_graphic(VGACommonState s, boolean full_update) if ((s.cr[VGA_CRTC_MODE] & 2)==0) { addr = (addr & ~0x8000) | ((y1 & 2) << 14); } - update = full_update; page0 = addr; page1 = addr + bwidth - 1; - update |= true;//memory_region_get_dirty(&s.vram, page0, page1 - page0, DIRTY_MEMORY_VGA); + update = true;//memory_region_get_dirty(&s.vram, page0, page1 - page0, DIRTY_MEMORY_VGA); /* explicit invalidation for the hardware cursor */ update |= ((s.invalidated_y_table[y >> 5] >> (y & 0x1f)) & 1)!=0; if (update) { @@ -2564,7 +2560,7 @@ static void vga_draw_graphic(VGACommonState s, boolean full_update) addr1 = 0; d += linesize; } - if (y_start >= 0) { + if (y_start == 0) { /* flush to display */ s.ds.dpy_update(0, y_start, disp_width, y - y_start); } @@ -2604,19 +2600,19 @@ static private void vga_draw_blank(VGACommonState s, boolean full_update) static private final int GMODE_GRAPH = 1; static private final int GMODE_BLANK = 2; - public static Pic.PIC_EventHandler VGA_Draw = new Pic.PIC_EventHandler() { + public static final Pic.PIC_EventHandler VGA_Draw = new Pic.PIC_EventHandler() { public String toString() { return "VGA_Draw"; } public void call(/*Bitu*/int val) { - Thread t = new Thread() { - public void run() { - while (true) { - vga_update_display(vgaCommonState); - try {Thread.sleep(20);} catch (Exception e) {} + Thread t = new Thread(() -> { + while (true) { + vga_update_display(vgaCommonState); + try {Thread.sleep(20);} catch (Exception e) { + throw new RuntimeException(e); } } - }; + }); t.start(); //vga_update_display(vgaCommonState); //Pic.PIC_AddEvent(VGA_Draw,25); @@ -2630,8 +2626,8 @@ static void vga_update_display(VGACommonState s) // :TODO: must be a better place to put this if (!Render.render.active) - Render.RENDER_SetSize(640, 400, 8, 70, 640/400, false, false); - if (!Render.RENDER_StartUpdate()) + Render.RENDER_SetSize(640, 400, 8, 70, (double) 640 /400, false, false); + if (Render.RENDER_StartUpdate()) return; //qemu_flush_coalesced_mmio_buffer(); @@ -3023,7 +3019,7 @@ static void vga_init(VGACommonState s, int ramSize) } static private class Bochs_LFB_Handler extends Paging.PageHandler { - VGACommonState s; + final VGACommonState s; public Bochs_LFB_Handler(VGACommonState s) { flags=Paging.PFLAG_READABLE|Paging.PFLAG_WRITEABLE|Paging.PFLAG_NOCODE; @@ -3120,7 +3116,7 @@ static void vga_init_vbe(VGACommonState s) // } static private VGACommonState vgaCommonState; - public static Section.SectionFunction QEMU_VGA_Init = new Section.SectionFunction() { + public static final Section.SectionFunction QEMU_VGA_Init = new Section.SectionFunction() { public void call(Section sec) { if (Dosbox.svgaCard == SVGACards.SVGA_QEMU) { Section_prop section=(Section_prop)sec; @@ -3128,7 +3124,7 @@ public void call(Section sec) { vga_init(vgaCommonState, section.Get_int("vmemsize")*1024*1024); vga_init_vbe(vgaCommonState); vga_common_init(vgaCommonState); - Pic.PIC_AddEvent(VGA_Draw,70/1000); + Pic.PIC_AddEvent(VGA_Draw, (float) 70 /1000); } } }; diff --git a/jdosbox/src/main/java/jdos/hardware/qemu/VGACommonState.java b/jdosbox/src/main/java/jdos/hardware/qemu/VGACommonState.java index 8b538896..5c369b14 100644 --- a/jdosbox/src/main/java/jdos/hardware/qemu/VGACommonState.java +++ b/jdosbox/src/main/java/jdos/hardware/qemu/VGACommonState.java @@ -8,23 +8,23 @@ public class VGACommonState { static public final int DISPLAY_ADDRESS = 0x60000000; public interface Retrace { - public int call(VGACommonState s); + int call(VGACommonState s); } public interface vga_update_retrace_info_fn { - public void call(VGACommonState s); + void call(VGACommonState s); } public interface rgb_to_pixel_dup_func { - public int call(int r, int g, int b); + int call(int r, int g, int b); } public interface get_func { - public int call(VGACommonState s); + int call(VGACommonState s); } public interface cursor_draw_line_func { - public void call(VGACommonState s, int d, int y); + void call(VGACommonState s, int d, int y); } public int readb(int offset) { @@ -103,7 +103,7 @@ public void writed(int offset, int value) { try { Render.render.src.outWrite32[offset >>> 2] = value; } catch (Exception e) { - e.printStackTrace();; + e.printStackTrace(); } } else { int index = (offset >>> 2); @@ -138,14 +138,14 @@ public void memset(int dst, int value, int len) { int latch; MemoryRegion chain4_alias; int sr_index; - int[] sr = new int[256]; + final int[] sr = new int[256]; int gr_index; - int[] gr = new int[256]; + final int[] gr = new int[256]; int ar_index; - int[] ar = new int[21]; + final int[] ar = new int[21]; int ar_flip_flop; int cr_index; - int[] cr = new int[256]; /* CRT registers */ + final int[] cr = new int[256]; /* CRT registers */ int msr; /* Misc Output Register */ int fcr; /* Feature Control Register */ int st00; /* status 0 */ @@ -154,9 +154,9 @@ public void memset(int dst, int value, int len) { int dac_sub_index; int dac_read_index; int dac_write_index; - int[] dac_cache = new int[3]; /* used when writing */ + final int[] dac_cache = new int[3]; /* used when writing */ boolean dac_8bit; - int[] palette = new int[768]; + final int[] palette = new int[768]; int bank_offset; get_func get_bpp; get_func getLineOffset; @@ -167,15 +167,15 @@ public void memset(int dst, int value, int len) { get_func get_resolutionCy; // Bochs VBE int vbe_index; - int[] vbe_regs = new int[VGA_header.VBE_DISPI_INDEX_NB]; + final int[] vbe_regs = new int[VGA_header.VBE_DISPI_INDEX_NB]; int vbe_start_addr; int vbe_line_offset; int vbe_bank_mask; int vbe_mapped; /* display refresh support */ - DisplayState ds = new DisplayState(); - int[] font_offsets = new int[2]; + final DisplayState ds = new DisplayState(); + final int[] font_offsets = new int[2]; int graphic_mode; int shift_control; int double_scan; @@ -198,15 +198,15 @@ public void memset(int dst, int value, int len) { //vga_hw_screen_dump_ptr screen_dump; //vga_hw_text_update_ptr text_update; /* hardware mouse cursor support */ - int[] invalidated_y_table = new int[VGA_header.VGA_MAX_HEIGHT / 32]; + final int[] invalidated_y_table = new int[VGA_header.VGA_MAX_HEIGHT / 32]; //void (*cursor_invalidate)(struct VGACommonState *s); cursor_draw_line_func cursor_draw_line; /* tell for each page if it has been updated since the last time */ - int[] last_palette = new int[256]; - int[] renderer_palette = new int[256]; - int[] last_ch_attr = new int[VGA_header.CH_ATTR_SIZE]; /* XXX: make it dynamic */ + final int[] last_palette = new int[256]; + final int[] renderer_palette = new int[256]; + final int[] last_ch_attr = new int[VGA_header.CH_ATTR_SIZE]; /* XXX: make it dynamic */ /* retrace */ Retrace retrace; vga_update_retrace_info_fn update_retrace_info; - vga_precise_retrace retrace_info = new vga_precise_retrace(); + final vga_precise_retrace retrace_info = new vga_precise_retrace(); } diff --git a/jdosbox/src/main/java/jdos/hardware/serialport/Serial.java b/jdosbox/src/main/java/jdos/hardware/serialport/Serial.java index 7308964b..c4431071 100644 --- a/jdosbox/src/main/java/jdos/hardware/serialport/Serial.java +++ b/jdosbox/src/main/java/jdos/hardware/serialport/Serial.java @@ -10,11 +10,9 @@ public class Serial { // DUMMY - public boolean Getchar(ShortRef data, ShortRef lsr, boolean wait_dsr, /*Bitu*/int timeout) { - return false; + public void Getchar(ShortRef data, ShortRef lsr, boolean wait_dsr, /*Bitu*/int timeout) { } - public boolean Putchar(short data, boolean wait_dtr, boolean wait_rts, /*Bitu*/int timeout) { - return false; + public void Putchar(short data, boolean wait_dtr, boolean wait_rts, /*Bitu*/int timeout) { } /////////////////////////// @@ -85,8 +83,11 @@ boolean addb(/*Bit8u*/short _val) { /*Bit8u*/short probeByte() { return data[pos]; } - /*Bit8u*/short[] data; - /*Bitu*/int maxsize,size,pos,used; + /*Bit8u*/final short[] data; + /*Bitu*/final int maxsize; + int size; + int pos; + int used; } FileIO debugfp; @@ -100,17 +101,19 @@ void log_ser(boolean active, String format) { String buf = StringHelper.format(Pic.PIC_FullIndex(), 3)+" ["+StringHelper.format(Main.GetTicks(), 7)+"] "; buf+=format; if(!buf.endsWith("\n")) buf+="\r\n"; - try {debugfp.write(buf.getBytes());} catch (Exception e){} + try {debugfp.write(buf.getBytes());} catch (Exception e) { + throw new RuntimeException(e); + } } } - static boolean getBituSubstring(String name,/*Bitu*/IntRef data, CommandLine cmd) { + static boolean getBituSubstring(String name,/*Bitu*/IntRef data, CommandLine cmd) { String tmpstring; if((tmpstring=cmd.FindStringBegin(name,false))==null) return false; try { data.value = Integer.parseInt(tmpstring); return true; - } catch (Exception e) { + } catch (Exception ignored) { } return false; } diff --git a/jdosbox/src/main/java/jdos/hardware/serialport/Serialports.java b/jdosbox/src/main/java/jdos/hardware/serialport/Serialports.java index 777f9251..4da67ca1 100644 --- a/jdosbox/src/main/java/jdos/hardware/serialport/Serialports.java +++ b/jdosbox/src/main/java/jdos/hardware/serialport/Serialports.java @@ -1,15 +1,14 @@ package jdos.hardware.serialport; import jdos.ints.Bios; -import jdos.misc.Log; import jdos.misc.setup.*; public class Serialports extends Module_base { - static public Serial[] serialports = new Serial[4]; + static public final Serial[] serialports = new Serial[4]; static final private int[] serial_baseaddr = {0x3f8,0x2f8,0x3e8,0x2e8}; static Serialports testSerialPortsBaseclass; - public static Section.SectionFunction SERIAL_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction SERIAL_Destroy = new Section.SectionFunction() { public void call(Section section) { for (/*Bitu*/int i = 0; i < 4; i++) if (serialports[i]!= null) { @@ -55,14 +54,14 @@ public Serialports(Section configuration) { serialports[i] = null; } else { serialports[i] = null; - Log.log_msg("Invalid type for serial"+(i+1)); + System.out.println("Invalid type for serial"+(i+1)); } if(serialports[i]!=null) biosParameter[i] = serial_baseaddr[i]; } // for 1-4 Bios.BIOS_SetComPorts (biosParameter); } - public static Section.SectionFunction SERIAL_Init = new Section.SectionFunction() { + public static final Section.SectionFunction SERIAL_Init = new Section.SectionFunction() { public void call(Section section) { // should never happen testSerialPortsBaseclass = new Serialports(section); diff --git a/jdosbox/src/main/java/jdos/host/Ethernet.java b/jdosbox/src/main/java/jdos/host/Ethernet.java index 356ff1f1..74b58538 100644 --- a/jdosbox/src/main/java/jdos/host/Ethernet.java +++ b/jdosbox/src/main/java/jdos/host/Ethernet.java @@ -3,8 +3,8 @@ import jdos.misc.setup.Section_prop; public interface Ethernet { - public void send(byte[] buffer, int offset, int len); - public void receive(RxFrame frame); - public boolean open(Section_prop section, byte[] mac); - public void close(); + void send(byte[] buffer, int offset, int len); + void receive(RxFrame frame); + boolean open(Section_prop section, byte[] mac); + void close(); } diff --git a/jdosbox/src/main/java/jdos/host/RxFrame.java b/jdosbox/src/main/java/jdos/host/RxFrame.java index bf920a6e..28491e71 100644 --- a/jdosbox/src/main/java/jdos/host/RxFrame.java +++ b/jdosbox/src/main/java/jdos/host/RxFrame.java @@ -3,5 +3,5 @@ import jdos.util.Ptr; public interface RxFrame { - public boolean rx_frame(Ptr buf, /*unsigned*/int io_len); + boolean rx_frame(Ptr buf, /*unsigned*/int io_len); } diff --git a/jdosbox/src/main/java/jdos/host/UserEthernet.java b/jdosbox/src/main/java/jdos/host/UserEthernet.java index 20a1578d..a9e44a9d 100644 --- a/jdosbox/src/main/java/jdos/host/UserEthernet.java +++ b/jdosbox/src/main/java/jdos/host/UserEthernet.java @@ -14,7 +14,7 @@ public void send(byte[] buffer, int offset, int len) { } public void receive(RxFrame frame) { - if (frames.size()>0) { + if (!frames.isEmpty()) { byte[] data = (byte[])frames.removeFirst(); //dump(data, 0, data.length); frame.rx_frame(new Ptr(data, 0), data.length); @@ -23,7 +23,7 @@ public void receive(RxFrame frame) { public boolean open(Section_prop section, byte[] mac) { frames = new LinkedList(); - return true; + return false; } public void close() { diff --git a/jdosbox/src/main/java/jdos/host/router/ARP.java b/jdosbox/src/main/java/jdos/host/router/ARP.java index 9f7c275a..edb1b6fa 100644 --- a/jdosbox/src/main/java/jdos/host/router/ARP.java +++ b/jdosbox/src/main/java/jdos/host/router/ARP.java @@ -11,7 +11,7 @@ private void parse(byte[] buffer, int offset) { System.arraycopy(buffer, offset, senderMac, 0, 6);offset+=6; senderAddress = readDWord(buffer, offset);offset+=4; System.arraycopy(buffer, offset, targetMac, 0, 6);offset+=6; - targetAddress = readDWord(buffer, offset);offset+=4; + targetAddress = readDWord(buffer, offset); } public void handle(byte[] buffer, int offset, int len) { if (len 1) { data = (((buffer[i+offset] << 8) & 0xFF00) | ((buffer[i + 1 + offset]) & 0xFF)); sum += data; - if ((sum & 0xFFFF0000) > 0) { + if ((sum & 0xffff_ffff_ffff_0000L) > 0) { sum = sum & 0xFFFF; sum += 1; } @@ -49,7 +49,7 @@ static public short csum(byte[] buffer, int offset, int length) { if (length > 0) { sum += (buffer[i+offset] << 8 & 0xFF00); - if ((sum & 0xFFFF0000) > 0) { + if ((sum & 0xffff_ffff_ffff_0000L) > 0) { sum = sum & 0xFFFF; sum += 1; } diff --git a/jdosbox/src/main/java/jdos/ints/Bios.java b/jdosbox/src/main/java/jdos/ints/Bios.java index a42c1bd4..53ebe381 100644 --- a/jdosbox/src/main/java/jdos/ints/Bios.java +++ b/jdosbox/src/main/java/jdos/ints/Bios.java @@ -127,7 +127,7 @@ public class Bios extends Module_base { static /*Bit16u*/int size_extended; static /*Bits*/int other_memsystems=0; - private static Callback.Handler INT70_Handler = new Callback.Handler() { + private static final Callback.Handler INT70_Handler = new Callback.Handler() { public String getName() { return "Bios.INT70_Handler"; } @@ -136,7 +136,7 @@ public String getName() { IoHandler.IO_Write(0x70,0xc); IoHandler.IO_Read(0x71); if (Memory.mem_readb(BIOS_WAIT_FLAG_ACTIVE)!=0) { - /*Bit32u*/long count=Memory.mem_readd(BIOS_WAIT_FLAG_COUNT) & 0xFFFFFFFFl; + /*Bit32u*/long count=Memory.mem_readd(BIOS_WAIT_FLAG_COUNT) & 0xFFFFFFFFL; if (count>997) { Memory.mem_writed(BIOS_WAIT_FLAG_COUNT,(int)count-997); } else { @@ -156,7 +156,7 @@ public String getName() { } }; - static private Callback[] tandy_DAC_callback = new Callback[2]; + static private final Callback[] tandy_DAC_callback = new Callback[2]; static private class Tandy_sb { /*Bit16u*/int port; /*Bit8u*/short irq; @@ -174,7 +174,8 @@ static private boolean Tandy_InitializeSB() { /* see if soundblaster module available and at what port/IRQ/DMA */ /*Bitu*/IntRef sbport=new IntRef(0), sbirq=new IntRef(0), sbdma=new IntRef(0); if (SBlaster.SB_Get_Address(sbport, sbirq, sbdma)) { - tandy_sb.port=(/*Bit16u*/int)(sbport.value&0xffff); + /*Bit16u*/ + tandy_sb.port= sbport.value&0xffff; tandy_sb.irq =(/*Bit8u*/short)(sbirq.value&0xff); tandy_sb.dma =(/*Bit8u*/short)(sbdma.value&0xff); return true; @@ -213,12 +214,9 @@ static private boolean Tandy_TransferInProgress() { IoHandler.IO_Write(0x0c,0x00); /*Bit16u*/int datalen=(/*Bit8u*/short)(IO.IO_ReadB(tandy_dma*2+1)&0xff); datalen|=(IO.IO_ReadB(tandy_dma*2+1)<<8); + /* stop already requested */ if (datalen==0xffff) return false; /* no DMA transfer */ - else if ((datalen<0x10) && (Memory.real_readb(0x40,0xd4)==0x0f) && (Memory.real_readw(0x40,0xd2)==0x1c)) { - /* stop already requested */ - return false; - } - return true; + else return (datalen >= 0x10) || (Memory.real_readb(0x40, 0xd4) != 0x0f) || (Memory.real_readw(0x40, 0xd2) != 0x1c); } private static void Tandy_SetupTransfer(/*PhysPt*/int bufpt,boolean isplayback) { @@ -280,7 +278,8 @@ private static void Tandy_SetupTransfer(/*PhysPt*/int bufpt,boolean isplayback) IoHandler.IO_Write(tandy_dma*2+1,(/*Bit8u*/short)(tlength&0xff)); IoHandler.IO_Write(tandy_dma*2+1,(/*Bit8u*/short)((tlength>>8)&0xff)); - /*Bit16u*/int delay=(/*Bit16u*/int)(Memory.real_readw(0x40,0xd2)&0xfff); + /*Bit16u*//*Bit16u*/ + int delay= Memory.real_readw(0x40,0xd2)&0xfff; /*Bit8u*/short amplitude=(/*Bit8u*/short)((Memory.real_readw(0x40,0xd2)>>13)&0x7); if (tandy_sb.port!=0) { IoHandler.IO_Write(0x0a,tandy_dma); /* enable DMA channel */ @@ -305,11 +304,12 @@ private static void Tandy_SetupTransfer(/*PhysPt*/int bufpt,boolean isplayback) if (!isplayback) { /* mark transfer as recording operation */ - Memory.real_writew(0x40,0xd2,(/*Bit16u*/int)(delay|0x1000)); + /*Bit16u*/ + Memory.real_writew(0x40,0xd2, delay|0x1000); } } - private static Callback.Handler IRQ_TandyDAC = new Callback.Handler() { + private static final Callback.Handler IRQ_TandyDAC = new Callback.Handler() { public String getName() { return "Bios.IRQ_TandyDAC"; } @@ -384,7 +384,7 @@ static void TandyDAC_Handler(/*Bit8u*/short tfunction) { Memory.real_writew(0x40,0xd0,CPU_Regs.reg_ecx.word()); /* store delay and volume */ Memory.real_writew(0x40,0xd2,(CPU_Regs.reg_edx.word()&0xfff)|((CPU_Regs.reg_eax.low()&7)<<13)); - Tandy_SetupTransfer(Memory.PhysMake((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word()),CPU_Regs.reg_eax.high()==0x83); + Tandy_SetupTransfer(Memory.PhysMake(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word()),CPU_Regs.reg_eax.high()==0x83); CPU_Regs.reg_eax.high(0x00); Callback.CALLBACK_SCF(false); break; @@ -407,7 +407,7 @@ static void TandyDAC_Handler(/*Bit8u*/short tfunction) { } } - private static Callback.Handler INT1A_Handler = new Callback.Handler() { + private static final Callback.Handler INT1A_Handler = new Callback.Handler() { public String getName() { return "Bios.INT1A_Handler 0x"+Integer.toHexString(CPU_Regs.reg_eax.high()); } @@ -447,7 +447,7 @@ public String getName() { Callback.CALLBACK_SCF(false); break; case 0x80: /* Pcjr Setup Sound Multiplexer */ - if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_BIOS, LogSeverities.LOG_ERROR,"INT1A:80:Setup tandy sound multiplexer to "+Integer.toString(CPU_Regs.reg_eax.low())); + if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_BIOS, LogSeverities.LOG_ERROR,"INT1A:80:Setup tandy sound multiplexer to "+ CPU_Regs.reg_eax.low()); break; case 0x81: /* Tandy sound system check */ case 0x82: /* Tandy sound system start recording */ @@ -580,7 +580,7 @@ public String getName() { } }; - private static Callback.Handler INT11_Handler = new Callback.Handler() { + private static final Callback.Handler INT11_Handler = new Callback.Handler() { public String getName() { return "Bios.INT11_Handler"; } @@ -613,7 +613,7 @@ static void BIOS_HostTimeSync() { Memory.mem_writed(BIOS_TIMER, (int)ticks); } - private static Callback.Handler INT8_Handler = new Callback.Handler() { + private static final Callback.Handler INT8_Handler = new Callback.Handler() { public String getName() { return "Bios.INT8_Handler"; } @@ -658,7 +658,7 @@ public String getName() { // #undef DOSBOX_CLOCKSYNC - private static Callback.Handler INT1C_Handler = new Callback.Handler() { + private static final Callback.Handler INT1C_Handler = new Callback.Handler() { public String getName() { return "Bios.INT1C_Handler"; } @@ -667,7 +667,7 @@ public String getName() { } }; - private static Callback.Handler INT12_Handler = new Callback.Handler() { + private static final Callback.Handler INT12_Handler = new Callback.Handler() { public String getName() { return "Bios.INT12_Handler"; } @@ -677,7 +677,7 @@ public String getName() { } }; - private static Callback.Handler INT17_Handler = new Callback.Handler() { + private static final Callback.Handler INT17_Handler = new Callback.Handler() { public String getName() { return "Bios.INT17_Handler"; } @@ -713,14 +713,14 @@ private static boolean INT14_Wait(/*Bit16u*/int port, /*Bit8u*/short mask, /*Bit return true; } - private static Callback.Handler INT14_Handler = new Callback.Handler() { + private static final Callback.Handler INT14_Handler = new Callback.Handler() { public String getName() { return "Bios.INT14_Handler"; } public /*Bitu*/int call() { if (CPU_Regs.reg_eax.high() > 0x3 || CPU_Regs.reg_edx.word() > 0x3) { // 0-3 serial port functions // and no more than 4 serial ports - Log.log_msg("BIOS INT14: Unhandled call AH="+Integer.toString(CPU_Regs.reg_eax.high(), 16)+" DX="+Integer.toString(CPU_Regs.reg_edx.word(),16)); + System.out.println("BIOS INT14: Unhandled call AH="+Integer.toString(CPU_Regs.reg_eax.high(), 16)+" DX="+Integer.toString(CPU_Regs.reg_edx.word(),16)); return Callback.CBRET_NONE; } @@ -751,7 +751,8 @@ public String getName() { else if (rawbaud==6){ baudrate=4800;} else if (rawbaud==7){ baudrate=9600;} - baudresult = (/*Bit16u*/int)(115200 / baudrate); + /*Bit16u*/ + baudresult = 115200 / baudrate; IO.IO_WriteB(port+3, 0x80); // enable divider access IO.IO_WriteB(port, (/*Bit8u*/short)baudresult&0xff); @@ -843,13 +844,13 @@ public E820(int base, int len, boolean reserved) { this.len = len; this.reserved = reserved; } - int base; - int len; - boolean reserved; + final int base; + final int len; + final boolean reserved; } - private static Vector e820table = new Vector(); + private static final Vector e820table = new Vector<>(); - { + static { e820table.add(new E820(0, 0x09F000, false)); e820table.add(new E820(0xf0000, 0x010000, true)); e820table.add(new E820(0x100000, (Memory.MEM_TotalPages()*4096)-0x100000, false)); @@ -859,7 +860,7 @@ public E820(int base, int len, boolean reserved) { * 1) 0x0C0000-0x0FFFFF Reserved * 2) 0x100000-... Free memory (no ACPI tables) */ } - private static Callback.Handler INT15_Handler = new Callback.Handler() { + private static final Callback.Handler INT15_Handler = new Callback.Handler() { public String getName() { return "Bios.INT15_Handler "+Integer.toHexString(CPU_Regs.reg_eax.high() & 0xFF); } @@ -922,7 +923,7 @@ public String getName() { Callback.CALLBACK_SCF(true); break; } - /*Bit32u*/long count=(CPU_Regs.reg_ecx.word()<<16)|CPU_Regs.reg_edx.word(); + /*Bit32u*/long count=((long) CPU_Regs.reg_ecx.word() <<16)|CPU_Regs.reg_edx.word(); Memory.mem_writed(BIOS_WAIT_FLAG_POINTER,Memory.RealMake(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word())); Memory.mem_writed(BIOS_WAIT_FLAG_COUNT,(int)count); Memory.mem_writeb(BIOS_WAIT_FLAG_ACTIVE,1); @@ -975,7 +976,7 @@ public String getName() { Callback.CALLBACK_SCF(true); break; } - /*Bit32u*/long count=(CPU_Regs.reg_ecx.word()<<16)|CPU_Regs.reg_edx.word(); + /*Bit32u*/long count=((long) CPU_Regs.reg_ecx.word() <<16)|CPU_Regs.reg_edx.word(); Memory.mem_writed(BIOS_WAIT_FLAG_POINTER,Memory.RealMake(0,BIOS_WAIT_FLAG_TEMP)); Memory.mem_writed(BIOS_WAIT_FLAG_COUNT,(int)count); Memory.mem_writeb(BIOS_WAIT_FLAG_ACTIVE,1); @@ -1016,7 +1017,7 @@ public String getName() { sz -= 1024; else sz = 0; - int t = (sz > 0x3C00) ? 0x3C00 : sz; + int t = Math.min(sz, 0x3C00); CPU_Regs.reg_eax.word(t); /* extended memory between 1MB and 16MB in KBs */ CPU_Regs.reg_ecx.word(t); /* extended memory between 1MB and 16MB in KBs */ sz -= t; @@ -1033,7 +1034,7 @@ public String getName() { E820 e820 = e820table.elementAt(CPU_Regs.reg_ebx.dword); /* write to ES:DI */ - Memory.real_writed(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word() + 0x00, e820.base); + Memory.real_writed(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word(), e820.base); Memory.real_writed(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word() + 0x04, 0); Memory.real_writed(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word() + 0x08, e820.len); Memory.real_writed(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word() + 0x0C, 0); @@ -1142,7 +1143,7 @@ public String getName() { } break; case 0x07: // set callback - Mouse.Mouse_ChangePS2Callback((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word()); + Mouse.Mouse_ChangePS2Callback(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebx.word()); Callback.CALLBACK_SCF(false); CPU_Regs.reg_eax.high(0); break; @@ -1208,14 +1209,11 @@ public String getName() { Callback.CALLBACK_SCF(true); break; } - switch(CPU_Regs.reg_ecx.word()) { - case 0x3: // power off + if (CPU_Regs.reg_ecx.word() == 0x3) { // power off Log.exit("Power Off"); - break; - default: + } else { CPU_Regs.reg_eax.high(0x0A); // invalid parameter value in CX Callback.CALLBACK_SCF(true); - break; } break; case 0x08: // ENABLE/DISABLE POWER MANAGEMENT @@ -1228,8 +1226,8 @@ public String getName() { Callback.CALLBACK_SCF(true); break; } - if(CPU_Regs.reg_ecx.word()==0x0) Log.log_msg("disable APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); - else if(CPU_Regs.reg_ecx.word()==0x1) Log.log_msg("enable APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); + if(CPU_Regs.reg_ecx.word()==0x0) System.out.println("disable APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); + else if(CPU_Regs.reg_ecx.word()==0x1) System.out.println("enable APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); else { CPU_Regs.reg_eax.high(0x0A); // invalid parameter value in CX Callback.CALLBACK_SCF(true); @@ -1259,8 +1257,8 @@ public String getName() { Callback.CALLBACK_SCF(true); break; } - if(CPU_Regs.reg_ecx.word()==0x0) Log.log_msg("disengage APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); - else if(CPU_Regs.reg_ecx.word()==0x1) Log.log_msg("engage APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); + if(CPU_Regs.reg_ecx.word()==0x0) System.out.println("disengage APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); + else if(CPU_Regs.reg_ecx.word()==0x1) System.out.println("engage APM for device "+Integer.toString(CPU_Regs.reg_ebx.word(),16)); else { CPU_Regs.reg_eax.high(0x0A); // invalid parameter value in CX Callback.CALLBACK_SCF(true); @@ -1285,7 +1283,7 @@ public String getName() { } }; - private static Callback.Handler Reboot_Handler = new Callback.Handler() { + private static final Callback.Handler Reboot_Handler = new Callback.Handler() { public String getName() { return "Bios.Reboot_Handler"; } @@ -1296,11 +1294,12 @@ public String getName() { Callback.CALLBACK_RunRealInt(0x10); CPU_Regs.reg_eax.high(0xe); CPU_Regs.reg_ebx.word(0); - for(/*Bitu*/int i = 0; i < text.length;i++) { - CPU_Regs.reg_eax.low(text[i]); + /*Bitu*/ + for (byte b : text) { + CPU_Regs.reg_eax.low(b); Callback.CALLBACK_RunRealInt(0x10); } - Log.log_msg(new String(text)); + System.out.println(new String(text)); double start = Pic.PIC_FullIndex(); while((Pic.PIC_FullIndex()-start)<3000) Callback.CALLBACK_Idle(); throw new Dos_programs.RebootException(); @@ -1313,7 +1312,7 @@ static public void BIOS_ZeroExtendedSize(boolean in) { if(other_memsystems < 0) other_memsystems=0; } - private Callback[] callback=new Callback[11]; + private final Callback[] callback=new Callback[11]; public Bios(Section configuration) { super(configuration); for (int i=0;i 8)?1:0 << 3)))); + Memory.phys_writeb(dp0physaddr+0x8,(short)((0xc0 | (((imageDiskList[2].heads) > 8)?1: 0)))); Memory.phys_writeb(dp0physaddr+0x9,(short)0); Memory.phys_writeb(dp0physaddr+0xa,(short)0); Memory.phys_writeb(dp0physaddr+0xb,(short)0); @@ -222,7 +224,7 @@ static public void updateDPT() { Memory.phys_writeb(dp0physaddr+0xe,(/*Bit8u*/short)tmpsect.value); } if(imageDiskList[3] != null) { - /*PhysPt*/int dp1physaddr=(int)Callback.CALLBACK_PhysPointer(diskparm1); + /*PhysPt*/int dp1physaddr= Callback.CALLBACK_PhysPointer(diskparm1); imageDiskList[3].Get_Geometry(tmpheads, tmpcyl, tmpsect, tmpsize); Memory.phys_writew(dp1physaddr,(/*Bit16u*/int)tmpcyl.value); Memory.phys_writeb(dp1physaddr+0x2,(/*Bit8u*/short)tmpheads.value); @@ -263,7 +265,7 @@ static public void swapInDisks() { /* If only one disk is loaded, this loop will load the same disk in dive A and drive B */ while(diskcount<2) { if(diskSwap[swapPos] != null) { - Log.log_msg("Loaded disk "+diskcount+" from swaplist position "+swapPos+" - \""+diskSwap[swapPos].diskname+"\""); + System.out.println("Loaded disk "+diskcount+" from swaplist position "+swapPos+" - \""+diskSwap[swapPos].diskname+"\""); imageDiskList[diskcount] = diskSwap[swapPos]; diskcount++; } @@ -278,13 +280,13 @@ public static boolean getSwapRequest() { return sreq; } - static private Mapper.MAPPER_Handler swapInNextDisk = new Mapper.MAPPER_Handler() { + static private final Mapper.MAPPER_Handler swapInNextDisk = new Mapper.MAPPER_Handler() { public void call(boolean pressed) { if (!pressed) return; DriveManager.CycleAllDisks(); /* Hack/feature: rescan all disks as well */ - Log.log_msg("Diskcaching reset for normal mounted drives."); + System.out.println("Diskcaching reset for normal mounted drives."); for(/*Bitu*/int i=0;i>8)>0x84) || (((key.value&0xff)==0xf0) && (key.value>>8)!=0)) { /* key is enhanced key (either scancode part>0x84 or specially-marked keyboard combination, low part==0xf0) */ - return true; + return false; } /* convert key.value if necessary (extended key.values) */ if ((key.value>>8)!=0 && ((key.value&0xff)==0xe0)) { key.value&=0xff00; } - return false; + return true; } - static private Callback.Handler INT16_Handler = new Callback.Handler() { + static private final Callback.Handler INT16_Handler = new Callback.Handler() { public String getName() { return "Bios_keyboard.INT16_Handler"; } @@ -469,7 +468,7 @@ public String getName() { /*Bit16u*/IntRef temp=new IntRef(0); switch (CPU_Regs.reg_eax.high()) { case 0x00: /* GET KEYSTROKE */ - if ((get_key(temp)) && (!IsEnhancedKey(temp))) { + if ((get_key(temp)) && (IsEnhancedKey(temp))) { /* normal key found, return translated key in ax */ CPU_Regs.reg_eax.word(temp.value); } else { @@ -494,7 +493,7 @@ public String getName() { Memory.mem_writew(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.word()+4,(Memory.mem_readw(CPU_Regs.reg_ssPhys.dword+CPU_Regs.reg_esp.word()+4) | CPU_Regs.IF)); for (;;) { if (check_key(temp)) { - if (!IsEnhancedKey(temp)) { + if (IsEnhancedKey(temp)) { /* normal key, return translated key in ax */ Callback.CALLBACK_SZF(false); CPU_Regs.reg_eax.word(temp.value); diff --git a/jdosbox/src/main/java/jdos/ints/EMS.java b/jdosbox/src/main/java/jdos/ints/EMS.java index 3772ecb4..e17bdd64 100644 --- a/jdosbox/src/main/java/jdos/ints/EMS.java +++ b/jdosbox/src/main/java/jdos/ints/EMS.java @@ -21,6 +21,8 @@ import jdos.util.IntRef; import jdos.util.LongRef; +import java.util.Arrays; + public class EMS extends Module_base { static final private int EMM_PAGEFRAME = 0xE000; static final private int EMM_PAGEFRAME4K = ((EMM_PAGEFRAME*16)/4096); @@ -80,7 +82,7 @@ void page(int val) { data[2]=(byte)(val & 0xFF); data[3]=(byte)((val >> 8) & 0xFF); } - byte[] data = new byte[4]; + final byte[] data = new byte[4]; } static private class EMM_Handle { @@ -92,7 +94,7 @@ public EMM_Handle() { /*MemHandle*/int mem; String name=""; boolean saved_page_map; - EMM_Mapping[] page_map=new EMM_Mapping[EMM_MAX_PHYS]; + final EMM_Mapping[] page_map=new EMM_Mapping[EMM_MAX_PHYS]; } private static int ems_type; @@ -130,7 +132,7 @@ public boolean ReadFromControlChannel(/*PhysPt*/int bufptr,/*Bit16u*/int size,/* switch (subfct) { case 0x00: if (size!=6) return false; - Memory.mem_writew(bufptr+0x00,0x0023); // ID + Memory.mem_writew(bufptr,0x0023); // ID Memory.mem_writed(bufptr+0x02,0); // private API entry point retcode.value=6; return true; @@ -140,7 +142,7 @@ public boolean ReadFromControlChannel(/*PhysPt*/int bufptr,/*Bit16u*/int size,/* if (GEMMIS_seg==0) GEMMIS_seg= Dos_tables.DOS_GetMemory(0x20); /*PhysPt*/int GEMMIS_addr=Memory.PhysMake(GEMMIS_seg,0); - Memory.mem_writew(GEMMIS_addr+0x00,0x0004); // flags + Memory.mem_writew(GEMMIS_addr,0x0004); // flags Memory.mem_writew(GEMMIS_addr+0x02,0x019d); // size of this structure Memory.mem_writew(GEMMIS_addr+0x04,GEMMIS_VERSION); // version 1.0 (provide ems information only) Memory.mem_writed(GEMMIS_addr+0x06,0); // reserved @@ -186,7 +188,7 @@ public boolean ReadFromControlChannel(/*PhysPt*/int bufptr,/*Bit16u*/int size,/* } /* fill buffer with import structure */ - Memory.mem_writed(bufptr+0x00,GEMMIS_seg<<4); + Memory.mem_writed(bufptr,GEMMIS_seg<<4); Memory.mem_writew(bufptr+0x04,GEMMIS_VERSION); retcode.value=6; return true; @@ -194,7 +196,7 @@ public boolean ReadFromControlChannel(/*PhysPt*/int bufptr,/*Bit16u*/int size,/* case 0x02: if (!is_emm386) return false; if (size!=2) return false; - Memory.mem_writeb(bufptr+0x00,EMM_VERSION>>4); // version 4 + Memory.mem_writeb(bufptr,EMM_VERSION>>4); // version 4 Memory.mem_writeb(bufptr+0x01,EMM_MINOR_VERSION); retcode.value=2; return true; @@ -202,7 +204,8 @@ public boolean ReadFromControlChannel(/*PhysPt*/int bufptr,/*Bit16u*/int size,/* if (!is_emm386) return false; if (EMM_MINOR_VERSION < 0x2d) return false; if (size!=4) return false; - Memory.mem_writew(bufptr+0x00,(/*Bit16u*/int)(Memory.MEM_TotalPages()*4)); // max size (kb) + /*Bit16u*/ + Memory.mem_writew(bufptr, Memory.MEM_TotalPages()*4); // max size (kb) Memory.mem_writew(bufptr+0x02,0x80); // min size (kb) retcode.value=2; return true; @@ -213,7 +216,7 @@ public boolean WriteToControlChannel(/*PhysPt*/int bufptr,/*Bit16u*/int size,/*B return true; } private /*Bit8u*/short cache; - private boolean is_emm386; + private final boolean is_emm386; } static private class Vcpi { @@ -223,7 +226,7 @@ static private class Vcpi { /*MemHandle*/int private_area; /*Bit8u*/short pic1_remapping,pic2_remapping; } - static private Vcpi vcpi = new Vcpi(); + static private final Vcpi vcpi = new Vcpi(); private static class MoveRegion { /*Bit32u*/long bytes; @@ -240,13 +243,13 @@ private static class MoveRegion { private static /*Bit16u*/int EMM_GetFreePages() { /*Bitu*/int count=Memory.MEM_FreeTotal()/4; if (count>0x7fff) count=0x7fff; - return (/*Bit16u*/int)count; + /*Bit16u*/ + return count; } private static boolean ValidHandle(/*Bit16u*/int handle) { - if (handle>=EMM_MAX_HANDLES) return false; - if (emm_handles[handle].pages==NULL_HANDLE) return false; - return true; + if (handle>=EMM_MAX_HANDLES) return true; + return emm_handles[handle].pages == NULL_HANDLE; } private static /*Bit8u*/short EMM_AllocateMemory(/*Bit16u*/int pages, /*Bit16u*/IntRef dhandle, boolean can_allocate_zpages) { @@ -273,9 +276,9 @@ private static boolean ValidHandle(/*Bit16u*/int handle) { return EMM_NO_ERROR; } - private static /*Bit8u*/short EMM_AllocateSystemHandle(/*Bit16u*/int pages) { + private static /*Bit8u*/void EMM_AllocateSystemHandle(/*Bit16u*/int pages) { /* Check for enough free pages */ - if ((Memory.MEM_FreeTotal()/ 4) < pages) { return EMM_OUT_OF_LOG;} + if ((Memory.MEM_FreeTotal()/ 4) < pages) { return;} /*Bit16u*/int handle = EMM_SYSTEM_HANDLE; // emm system handle (reserved for OS usage) /* Release memory if already allocated */ if (emm_handles[handle].pages != NULL_HANDLE) { @@ -285,12 +288,11 @@ private static boolean ValidHandle(/*Bit16u*/int handle) { if (mem==0) Log.exit("EMS:System handle memory allocation failure"); emm_handles[handle].pages = pages; emm_handles[handle].mem = mem; - return EMM_NO_ERROR; } static /*Bit8u*/short EMM_ReallocatePages(/*Bit16u*/int handle,/*Bit16u*/int pages) { /* Check for valid handle */ - if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; + if (ValidHandle(handle)) return EMM_INVALID_HANDLE; if (emm_handles[handle].pages != 0) { /* Check for enough pages */ IntRef mem = new IntRef(emm_handles[handle].mem); @@ -322,14 +324,14 @@ private static boolean ValidHandle(/*Bit16u*/int handle) { return EMM_NO_ERROR; } /* Check for valid handle */ - if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; + if (ValidHandle(handle)) return EMM_INVALID_HANDLE; if (log_page0;count--) { /*Bit16u*/int segment=Memory.mem_readw(data);data+=2; @@ -542,7 +545,7 @@ private static boolean ValidHandle(/*Bit16u*/int handle) { private static /*Bit8u*/short HandleNameSearch() { String name; - /*Bit16u*/int handle=0;/*PhysPt*/int data; + /*Bit16u*/int handle;/*PhysPt*/int data; switch (CPU_Regs.reg_eax.low()) { case 0x00: /* Get all handle names */ CPU_Regs.reg_eax.low(0);data=CPU_Regs.reg_esPhys.dword+CPU_Regs.reg_edi.word(); @@ -597,7 +600,7 @@ private static boolean ValidHandle(/*Bit16u*/int handle) { private static void LoadMoveRegion(/*PhysPt*/int data, MoveRegion region) { - region.bytes=Memory.mem_readd(data + 0x0); + region.bytes=Memory.mem_readd(data); region.src_type=(short)Memory.mem_readb(data+0x4); region.src_handle=Memory.mem_readw(data+0x5); @@ -626,8 +629,8 @@ private static void LoadMoveRegion(/*PhysPt*/int data, MoveRegion region) { if (region.src_type==0) { src_mem=region.src_page_seg*16+region.src_offset; } else { - if (!ValidHandle(region.src_handle)) return EMM_INVALID_HANDLE; - if ((emm_handles[region.src_handle].pages*EMM_PAGE_SIZE) < ((region.src_page_seg*EMM_PAGE_SIZE)+region.src_offset+region.bytes)) return EMM_LOG_OUT_RANGE; + if (ValidHandle(region.src_handle)) return EMM_INVALID_HANDLE; + if (((long) emm_handles[region.src_handle].pages *EMM_PAGE_SIZE) < (((long) region.src_page_seg *EMM_PAGE_SIZE)+region.src_offset+region.bytes)) return EMM_LOG_OUT_RANGE; src_handle=emm_handles[region.src_handle].mem; /*Bitu*/int pages=region.src_page_seg*4+(region.src_offset/Paging.MEM_PAGE_SIZE); for (;pages>0;pages--) src_handle=Memory.MEM_NextHandle(src_handle); @@ -637,8 +640,8 @@ private static void LoadMoveRegion(/*PhysPt*/int data, MoveRegion region) { if (region.dest_type==0) { dest_mem=region.dest_page_seg*16+region.dest_offset; } else { - if (!ValidHandle(region.dest_handle)) return EMM_INVALID_HANDLE; - if (emm_handles[region.dest_handle].pages*EMM_PAGE_SIZE < (region.dest_page_seg*EMM_PAGE_SIZE)+region.dest_offset+region.bytes) return EMM_LOG_OUT_RANGE; + if (ValidHandle(region.dest_handle)) return EMM_INVALID_HANDLE; + if ((long) emm_handles[region.dest_handle].pages *EMM_PAGE_SIZE < ((long) region.dest_page_seg *EMM_PAGE_SIZE)+region.dest_offset+region.bytes) return EMM_LOG_OUT_RANGE; dest_handle=emm_handles[region.dest_handle].mem; /*Bitu*/int pages=region.dest_page_seg*4+(region.dest_offset/Paging.MEM_PAGE_SIZE); for (;pages>0;pages--) dest_handle=Memory.MEM_NextHandle(dest_handle); @@ -706,7 +709,7 @@ private static void LoadMoveRegion(/*PhysPt*/int data, MoveRegion region) { return EMM_NO_ERROR; } - private static Callback.Handler INT67_Handler = new Callback.Handler() { + private static final Callback.Handler INT67_Handler = new Callback.Handler() { public String getName() { return "EMS.INT67_Handler"; } @@ -721,7 +724,8 @@ public String getName() { CPU_Regs.reg_eax.high(EMM_NO_ERROR); break; case 0x42: /* Get number of pages */ - CPU_Regs.reg_edx.word((/*Bit16u*/int)(Memory.MEM_TotalPages()/4)); //Not entirely correct but okay + /*Bit16u*/ + CPU_Regs.reg_edx.word(Memory.MEM_TotalPages()/4); //Not entirely correct but okay CPU_Regs.reg_ebx.word(EMM_GetFreePages()); CPU_Regs.reg_eax.high(EMM_NO_ERROR); break; @@ -754,7 +758,7 @@ public String getName() { CPU_Regs.reg_eax.high(EMM_NO_ERROR); break; case 0x4c: /* Get Pages for one Handle */ - if (!ValidHandle(CPU_Regs.reg_edx.word())) {CPU_Regs.reg_eax.high(EMM_INVALID_HANDLE);break;} + if (ValidHandle(CPU_Regs.reg_edx.word())) {CPU_Regs.reg_eax.high(EMM_INVALID_HANDLE);break;} CPU_Regs.reg_ebx.word(emm_handles[CPU_Regs.reg_edx.word()].pages); CPU_Regs.reg_eax.high(EMM_NO_ERROR); break; @@ -889,25 +893,26 @@ public String getName() { /*Bit16u*/int ct; /* Set up page table buffer */ for (ct=0; ct<0xff; ct++) { - Memory.real_writeb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x00,0x67); // access bits - Memory.real_writew((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x01,ct*0x10); // mapping - Memory.real_writeb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x03,0x00); + Memory.real_writeb(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word() + ct * 4,0x67); // access bits + Memory.real_writew(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x01,ct*0x10); // mapping + Memory.real_writeb(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x03,0x00); } for (ct=0xff; ct<0x100; ct++) { - Memory.real_writeb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x00,0x67); // access bits - Memory.real_writew((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x01,(ct-0xff)*0x10+0x1100); // mapping - Memory.real_writeb((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x03,0x00); + Memory.real_writeb(CPU_Regs.reg_esVal.dword, CPU_Regs.reg_edi.word() + ct * 4,0x67); // access bits + Memory.real_writew(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x01,(ct-0xff)*0x10+0x1100); // mapping + Memory.real_writeb(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_edi.word()+ct*4+0x03,0x00); } /* adjust paging entries for page frame (if mapped) */ for (ct=0; ct<4; ct++) { /*Bit16u*/int handle=emm_mappings[ct].handle(); if (handle!=0xffff) { - /*Bit16u*/int memh=(/*Bit16u*/int)Memory.MEM_NextHandleAt(emm_handles[handle].mem,emm_mappings[ct].page()*4); + /*Bit16u*//*Bit16u*/ + int memh= Memory.MEM_NextHandleAt(emm_handles[handle].mem,emm_mappings[ct].page()*4); /*Bit16u*/int entry_addr=CPU_Regs.reg_edi.word()+(EMM_PAGEFRAME>>6)+(ct*0x10); - Memory.real_writew((int)CPU_Regs.reg_esVal.dword,entry_addr+0x00+0x01,(memh+0)*0x10); // mapping of 1/4 of page - Memory.real_writew((int)CPU_Regs.reg_esVal.dword,entry_addr+0x04+0x01,(memh+1)*0x10); // mapping of 2/4 of page - Memory.real_writew((int)CPU_Regs.reg_esVal.dword,entry_addr+0x08+0x01,(memh+2)*0x10); // mapping of 3/4 of page - Memory.real_writew((int)CPU_Regs.reg_esVal.dword,entry_addr+0x0c+0x01,(memh+3)*0x10); // mapping of 4/4 of page + Memory.real_writew(CPU_Regs.reg_esVal.dword, entry_addr + 0x01,(memh)*0x10); // mapping of 1/4 of page + Memory.real_writew(CPU_Regs.reg_esVal.dword,entry_addr+0x04+0x01,(memh+1)*0x10); // mapping of 2/4 of page + Memory.real_writew(CPU_Regs.reg_esVal.dword,entry_addr+0x08+0x01,(memh+2)*0x10); // mapping of 3/4 of page + Memory.real_writew(CPU_Regs.reg_esVal.dword,entry_addr+0x0c+0x01,(memh+3)*0x10); // mapping of 4/4 of page } } CPU_Regs.reg_edi.word(CPU_Regs.reg_edi.word()+0x400); // advance pointer by 0x100*4 @@ -916,14 +921,14 @@ public String getName() { /*Bit32u*/int cbseg_low=(Callback.CALLBACK_GetBase()&0xffff)<<16; /*Bit32u*/int cbseg_high=(Callback.CALLBACK_GetBase()&0x1f0000)>>16; /* Descriptor 1 (code segment, callback segment) */ - Memory.real_writed((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x00,0x0000ffff|cbseg_low); - Memory.real_writed((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x04,0x00009a00|cbseg_high); + Memory.real_writed(CPU_Regs.reg_dsVal.dword, CPU_Regs.reg_esi.word(),0x0000ffff|cbseg_low); + Memory.real_writed(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x04,0x00009a00|cbseg_high); /* Descriptor 2 (data segment, full access) */ - Memory.real_writed((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x08,0x0000ffff); - Memory.real_writed((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x0c,0x00009200); + Memory.real_writed(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x08,0x0000ffff); + Memory.real_writed(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x0c,0x00009200); /* Descriptor 3 (full access) */ - Memory.real_writed((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x10,0x0000ffff); - Memory.real_writed((int)CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x14,0x00009200); + Memory.real_writed(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x10,0x0000ffff); + Memory.real_writed(CPU_Regs.reg_dsVal.dword,CPU_Regs.reg_esi.word()+0x14,0x00009200); CPU_Regs.reg_ebx.dword=vcpi.pm_interface&0xffff; CPU_Regs.reg_eax.high(EMM_NO_ERROR); @@ -1011,9 +1016,9 @@ public String getName() { /* Switch to protected mode, paging enabled if necessary */ /*Bit32u*/long new_cr0=CPU.CPU_GET_CRX(0)|1; - if (new_cr3!=0) new_cr0|=0x80000000l; + if (new_cr3!=0) new_cr0|= 0x80000000L; CPU.CPU_SET_CRX(0, (int)new_cr0); - CPU.CPU_SET_CRX(3, (int)new_cr3); + CPU.CPU_SET_CRX(3, new_cr3); /*PhysPt*/int tbaddr=new_gdt_base+(new_tr&0xfff8)+5; /*Bit8u*/int tb=Memory.mem_readb(tbaddr); @@ -1022,8 +1027,8 @@ public String getName() { /* Load tables and initialize segment registers */ CPU.CPU_LGDT(new_gdt_limit, new_gdt_base); CPU.CPU_LIDT(new_idt_limit, new_idt_base); - if (CPU.CPU_LLDT(new_ldt)) Log.log_msg("VCPI:Could not load LDT with "+Integer.toString(new_ldt,16)); - if (CPU.CPU_LTR(new_tr)) Log.log_msg("VCPI:Could not load TR with "+Integer.toString(new_tr, 16)); + if (CPU.CPU_LLDT(new_ldt)) System.out.println("VCPI:Could not load LDT with "+Integer.toString(new_ldt,16)); + if (CPU.CPU_LTR(new_tr)) System.out.println("VCPI:Could not load TR with "+Integer.toString(new_tr, 16)); CPU.CPU_SetSegGeneralDS(0); CPU.CPU_SetSegGeneralES(0); @@ -1035,7 +1040,7 @@ public String getName() { /* Switch to protected mode */ CPU_Regs.flags&=(~(CPU_Regs.VM|CPU_Regs.NT)); CPU_Regs.flags|=0x3000; - CPU.CPU_JMP(true, new_cs, (int)new_eip, 0); + CPU.CPU_JMP(true, new_cs, new_eip, 0); } break; default: @@ -1054,7 +1059,7 @@ public String getName() { } }; - private static Callback.Handler VCPI_PM_Handler = new Callback.Handler() { + private static final Callback.Handler VCPI_PM_Handler = new Callback.Handler() { public String getName() { return "EMS.VCPI_PM_Handler"; } @@ -1089,15 +1094,15 @@ public String getName() { CPU.CPU_SET_CRX(0, CPU.CPU_GET_CRX(0)&0x7ffffff7); CPU.CPU_SET_CRX(3, 0); - /*PhysPt*/int tbaddr=vcpi.private_area+0x0000+(0x10&0xfff8)+5; + /*PhysPt*/int tbaddr= vcpi.private_area + (0x10 & 0xfff8) + 5; /*Bit8u*/int tb=Memory.mem_readb(tbaddr); Memory.mem_writeb(tbaddr, tb&0xfd); /* Load descriptor table registers */ - CPU.CPU_LGDT(0xff, vcpi.private_area+0x0000); + CPU.CPU_LGDT(0xff, vcpi.private_area); CPU.CPU_LIDT(0x7ff, vcpi.private_area+0x2000); - if (CPU.CPU_LLDT(0x08)) Log.log_msg("VCPI:Could not load LDT"); - if (CPU.CPU_LTR(0x10)) Log.log_msg("VCPI:Could not load TR"); + if (CPU.CPU_LLDT(0x08)) System.out.println("VCPI:Could not load LDT"); + if (CPU.CPU_LTR(0x10)) System.out.println("VCPI:Could not load TR"); CPU_Regs.flags&=(~CPU_Regs.NT); CPU_Regs.reg_esp.dword+=8; // skip interrupt return information @@ -1115,7 +1120,7 @@ public String getName() { } }; - private static Callback.Handler V86_Monitor = new Callback.Handler() { + private static final Callback.Handler V86_Monitor = new Callback.Handler() { public String getName() { return "EMS.V86_Monitor"; } @@ -1188,7 +1193,8 @@ needs intervention by monitor (depends on faulting opcode) */ Memory.mem_writew(CPU_Regs.reg_ssPhys.dword+((CPU_Regs.reg_esp.dword) & CPU.cpu.stack.mask),v86_ip+2); break; case 0xe5: // IN AX,Ib - CPU_Regs.reg_eax.word((/*Bit16u*/int)(IO.IO_ReadW(Memory.mem_readb((v86_cs<<4)+v86_ip+1))&0xffff)); + /*Bit16u*/ + CPU_Regs.reg_eax.word(IO.IO_ReadW(Memory.mem_readb((v86_cs<<4)+v86_ip+1))&0xffff); Memory.mem_writew(CPU_Regs.reg_ssPhys.dword+((CPU_Regs.reg_esp.dword) & CPU.cpu.stack.mask),v86_ip+2); break; case 0xe6: // OUT Ib,AL @@ -1204,7 +1210,8 @@ needs intervention by monitor (depends on faulting opcode) */ Memory.mem_writew(CPU_Regs.reg_ssPhys.dword+((CPU_Regs.reg_esp.dword) & CPU.cpu.stack.mask),v86_ip+1); break; case 0xed: // IN AX,DX - CPU_Regs.reg_eax.word((/*Bit16u*/int)(IO.IO_ReadW(CPU_Regs.reg_edx.word())&0xffff)); + /*Bit16u*/ + CPU_Regs.reg_eax.word(IO.IO_ReadW(CPU_Regs.reg_edx.word())&0xffff); Memory.mem_writew(CPU_Regs.reg_ssPhys.dword+((CPU_Regs.reg_esp.dword) & CPU.cpu.stack.mask),v86_ip+1); break; case 0xee: // OUT DX,AL @@ -1251,15 +1258,15 @@ needs intervention by monitor (depends on faulting opcode) */ Memory.mem_writew(CPU_Regs.reg_ssPhys.dword+((CPU_Regs.reg_esp.dword +0x0c) & CPU.cpu.stack.mask),v86_sp); /* Return to original code after v86-interrupt handler */ - Memory.mem_writew((v86_ss<<4)+v86_sp+0,return_ip); + Memory.mem_writew((v86_ss << 4) + v86_sp,return_ip); Memory.mem_writew((v86_ss<<4)+v86_sp+2,return_cs); - Memory.mem_writew((v86_ss<<4)+v86_sp+4,(/*Bit16u*/int)(return_eflags&0xffff)); + /*Bit16u*/ + Memory.mem_writew((v86_ss<<4)+v86_sp+4, return_eflags&0xffff); return Callback.CBRET_NONE; } }; private static void SetupVCPI() { - vcpi.enabled=false; vcpi.ems_handle=0; // use EMM system handle for VCPI data @@ -1271,7 +1278,7 @@ private static void SetupVCPI() { vcpi.private_area=emm_handles[vcpi.ems_handle].mem<<12; /* GDT */ - Memory.mem_writed(vcpi.private_area+0x0000,0x00000000); // descriptor 0 + Memory.mem_writed(vcpi.private_area,0x00000000); // descriptor 0 Memory.mem_writed(vcpi.private_area+0x0004,0x00000000); // descriptor 0 /*Bit32u*/int ldt_address=(vcpi.private_area+0x1000); @@ -1303,12 +1310,12 @@ private static void SetupVCPI() { for (/*Bit16u*/int int_ct=0; int_ct<0x100; int_ct++) { /* build a CALL NEAR V86MON, the value of IP pushed by the CALL is used to identify the interrupt number */ - Memory.mem_writeb(vcpi.private_area+0x2800+int_ct*4+0,0xe8); // call + Memory.mem_writeb(vcpi.private_area + 0x2800 + int_ct * 4,0xe8); // call Memory.mem_writew(vcpi.private_area+0x2800+int_ct*4+1,0x05fd-(int_ct*4)); Memory.mem_writeb(vcpi.private_area+0x2800+int_ct*4+3,0xcf); // iret (dummy) /* put a Gate-Descriptor into the IDT */ - Memory.mem_writed(vcpi.private_area+0x2000+int_ct*8+0,0x000c0000|(0x2800+int_ct*4)); + Memory.mem_writed(vcpi.private_area + 0x2000 + int_ct * 8,0x000c0000|(0x2800+int_ct*4)); Memory.mem_writed(vcpi.private_area+0x2000+int_ct*8+4,0x0000ee00); } @@ -1324,19 +1331,17 @@ private static void SetupVCPI() { Memory.mem_writed(vcpi.private_area+0x3066,0x0068); // io-map base (map follows, all zero) } - private static Callback.Handler INT4B_Handler = new Callback.Handler() { + private static final Callback.Handler INT4B_Handler = new Callback.Handler() { public String getName() { return "EMS.INT4B_Handler"; } public /*Bitu*/int call() { - switch (CPU_Regs.reg_eax.high()) { - case 0x81: + if (CPU_Regs.reg_eax.high() == 0x81) { Callback.CALLBACK_SCF(true); CPU_Regs.reg_eax.word(0x1); - break; - default: - if (Log.level<=LogSeverities.LOG_WARN) Log.log(LogTypes.LOG_MISC,LogSeverities.LOG_WARN,"Unhandled interrupt 4B function "+Integer.toString(CPU_Regs.reg_eax.high(),16)); - break; + } else { + if (Log.level <= LogSeverities.LOG_WARN) + Log.log(LogTypes.LOG_MISC, LogSeverities.LOG_WARN, "Unhandled interrupt 4B function " + Integer.toString(CPU_Regs.reg_eax.high(), 16)); } return Callback.CBRET_NONE; } @@ -1347,11 +1352,13 @@ public String getName() { * stored 32 bytes.*/ private static /*Bit16u*/int ems_baseseg; private /*RealPt*/int old4b_pointer,old67_pointer; - private Callback call_vdma=new Callback(),call_vcpi=new Callback(),call_v86mon=new Callback(); + private final Callback call_vdma=new Callback(); + private final Callback call_vcpi=new Callback(); + private final Callback call_v86mon=new Callback(); /*Bitu*/int call_int67; static /*Bitu*/int GetEMSType(Section_prop section) { - /*Bitu*/int rtype = 0; + /*Bitu*/int rtype; String emstypestr = section.Get_string("ems"); if (emstypestr.equalsIgnoreCase("true")) { rtype = 1; // mixed mode @@ -1382,7 +1389,7 @@ public String getName() { if (ems_type<=0) return; if (Dosbox.machine== MachineType.MCH_PCJR) { ems_type=0; - Log.log_msg("EMS disabled for PCJr machine"); + System.out.println("EMS disabled for PCJr machine"); return; } Bios.BIOS_ZeroExtendedSize(true); @@ -1452,10 +1459,10 @@ public String getName() { if (ENABLE_V86_STARTUP!=0) { /* Prepare V86-task */ CPU.CPU_SET_CRX(0, 1); - CPU.CPU_LGDT(0xff, vcpi.private_area+0x0000); + CPU.CPU_LGDT(0xff, vcpi.private_area); CPU.CPU_LIDT(0x7ff, vcpi.private_area+0x2000); - if (CPU.CPU_LLDT(0x08)) Log.log_msg("VCPI:Could not load LDT"); - if (CPU.CPU_LTR(0x10)) Log.log_msg("VCPI:Could not load TR"); + if (CPU.CPU_LLDT(0x08)) System.out.println("VCPI:Could not load LDT"); + if (CPU.CPU_LTR(0x10)) System.out.println("VCPI:Could not load TR"); CPU.CPU_Push32(CPU_Regs.reg_gsVal.dword); CPU.CPU_Push32(CPU_Regs.reg_fsVal.dword); @@ -1512,20 +1519,17 @@ void close() { static EMS test; - public static Section.SectionFunction EMS_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction EMS_ShutDown = new Section.SectionFunction() { public void call(Section section) { test.close(); test = null; - for (int i=0;i> 3) & 0x7)); @@ -394,10 +400,10 @@ public String getName() { break; /* Graphics mode calls */ case 0x20: /* Set User 8x8 Graphics characters */ - Memory.RealSetVec(0x1f,Memory.RealMake((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebp.word())); + Memory.RealSetVec(0x1f,Memory.RealMake(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebp.word())); break; case 0x21: /* Set user graphics characters */ - Memory.RealSetVec(0x43,Memory.RealMake((int)CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebp.word())); + Memory.RealSetVec(0x43,Memory.RealMake(CPU_Regs.reg_esVal.dword,CPU_Regs.reg_ebp.word())); Memory.real_writew(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,CPU_Regs.reg_ecx.word()); graphics_chars(); break; @@ -613,7 +619,7 @@ public String getName() { /*RealPt*/int svstable=Memory.real_readd(Memory.RealSeg(vsavept),Memory.RealOff(vsavept)+0x10); if (svstable!=0) { /*RealPt*/int dcctable=Memory.real_readd(Memory.RealSeg(svstable),Memory.RealOff(svstable)+0x02); - /*Bit8u*/int entries=Memory.real_readb(Memory.RealSeg(dcctable),Memory.RealOff(dcctable)+0x00); + /*Bit8u*/int entries=Memory.real_readb(Memory.RealSeg(dcctable), Memory.RealOff(dcctable)); /*Bit8u*/int idx=Memory.real_readb(BIOSMEM_SEG,BIOSMEM_DCC_INDEX); // check if index within range if (idx0xa) return false; if (mode==7) mode=0; // PCJR defaults to 0 on illegal mode 7 - if (!SetCurMode(ModeList_OTHER,mode)) { + if (SetCurMode(ModeList_OTHER, mode)) { if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_INT10,LogSeverities.LOG_ERROR,"Trying to set illegal mode "+Integer.toString(mode,16)); return false; } @@ -455,7 +455,7 @@ public static boolean INT10_SetVideoMode_OTHER(/*Bit16u*/int mode,boolean clearm /* Setup the CRTC */ /*Bitu*/int crtc_base=Dosbox.machine== MachineType.MCH_HERC ? 0x3b4 : 0x3d4; //Horizontal total - IO.IO_WriteW(crtc_base,0x00 | (CurMode.htotal) << 8); + IO.IO_WriteW(crtc_base, (CurMode.htotal) << 8); //Horizontal displayed IO.IO_WriteW(crtc_base,0x01 | (CurMode.hdispend) << 8); //Horizontal sync position @@ -595,7 +595,7 @@ public static boolean INT10_SetVideoMode_OTHER(/*Bit16u*/int mode,boolean clearm /*RealPt*/int vparams = Memory.RealGetVec(0x1d); if ((vparams != Memory.RealMake(0xf000,0xf0a4)) && (mode < 8)) { // load crtc parameters from video params table - /*Bit16u*/int crtc_block_index = 0; + /*Bit16u*/int crtc_block_index; if (mode < 2) crtc_block_index = 0; else if (mode < 4) crtc_block_index = 1; else if (mode < 7) crtc_block_index = 2; @@ -656,19 +656,19 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { switch(Dosbox.svgaCard) { case SVGACards.SVGA_TsengET4K: case SVGACards.SVGA_TsengET3K: - if (!SetCurMode(ModeList_VGA_Tseng,mode)){ + if (SetCurMode(ModeList_VGA_Tseng, mode)){ if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_INT10,LogSeverities.LOG_ERROR,"VGA:Trying to set illegal mode "+Integer.toString(mode,16)); return false; } break; case SVGACards.SVGA_ParadisePVGA1A: - if (!SetCurMode(ModeList_VGA_Paradise,mode)){ + if (SetCurMode(ModeList_VGA_Paradise, mode)){ if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_INT10,LogSeverities.LOG_ERROR,"VGA:Trying to set illegal mode "+Integer.toString(mode,16)); return false; } break; default: - if (!SetCurMode(ModeList_VGA,mode)){ + if (SetCurMode(ModeList_VGA, mode)){ if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_INT10,LogSeverities.LOG_ERROR,"VGA:Trying to set illegal mode "+Integer.toString(mode,16)); return false; } @@ -686,7 +686,7 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { } } } else { - if (!SetCurMode(ModeList_EGA,mode)){ + if (SetCurMode(ModeList_EGA, mode)){ if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_INT10,LogSeverities.LOG_ERROR,"EGA:Trying to set illegal mode "+Integer.toString(mode,16)); return false; } @@ -782,13 +782,13 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { /*Bit8u*/short ver_overflow=0;/*Bit8u*/short hor_overflow=0; /* Horizontal Total */ IoHandler.IO_Write(crtc_base,0x00);IoHandler.IO_Write(crtc_base+1,(CurMode.htotal-5)); - hor_overflow|=((CurMode.htotal-5) & 0x100) >> 8; + hor_overflow|= (short) (((CurMode.htotal-5) & 0x100) >> 8); /* Horizontal Display End */ IoHandler.IO_Write(crtc_base,0x01);IoHandler.IO_Write(crtc_base+1,(CurMode.hdispend-1)); - hor_overflow|=((CurMode.hdispend-1) & 0x100) >> 7; + hor_overflow|= (short) (((CurMode.hdispend-1) & 0x100) >> 7); /* Start horizontal Blanking */ IoHandler.IO_Write(crtc_base,0x02);IoHandler.IO_Write(crtc_base+1,CurMode.hdispend); - hor_overflow|=((CurMode.hdispend) & 0x100) >> 6; + hor_overflow|= (short) (((CurMode.hdispend) & 0x100) >> 6); /* End horizontal Blanking */ /*Bitu*/int blank_end=(CurMode.htotal-2) & 0x7f; IoHandler.IO_Write(crtc_base,0x03);IoHandler.IO_Write(crtc_base+1,(0x80|(blank_end & 0x1f))); @@ -799,7 +799,7 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { else if (CurMode.type==VGA.M_TEXT) ret_start = (CurMode.hdispend+5); else ret_start = (CurMode.hdispend+4); IoHandler.IO_Write(crtc_base,0x04);IoHandler.IO_Write(crtc_base+1,ret_start); - hor_overflow|=(ret_start & 0x100) >> 4; + hor_overflow|= (short) ((ret_start & 0x100) >> 4); /* End Horizontal Retrace */ /*Bitu*/int ret_end; @@ -814,9 +814,9 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { /* Vertical Total */ IoHandler.IO_Write(crtc_base,0x06);IoHandler.IO_Write(crtc_base+1,(CurMode.vtotal-2)); - overflow|=((CurMode.vtotal-2) & 0x100) >> 8; - overflow|=((CurMode.vtotal-2) & 0x200) >> 4; - ver_overflow|=((CurMode.vtotal-2) & 0x400) >> 10; + overflow|= (short) (((CurMode.vtotal-2) & 0x100) >> 8); + overflow|= (short) (((CurMode.vtotal-2) & 0x200) >> 4); + ver_overflow|= (short) (((CurMode.vtotal-2) & 0x400) >> 10); /*Bitu*/int vretrace; if (Dosbox.IS_VGA_ARCH()) { @@ -830,27 +830,27 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { default: vretrace=CurMode.vdispend+12; } } else { - switch (CurMode.vdispend) { - case 350: vretrace=CurMode.vdispend; - break; - default: vretrace=CurMode.vdispend+24; - } + if (CurMode.vdispend == 350) { + vretrace = CurMode.vdispend; + } else { + vretrace = CurMode.vdispend + 24; + } } /* Vertical Retrace Start */ IoHandler.IO_Write(crtc_base,0x10);IoHandler.IO_Write(crtc_base+1,vretrace); - overflow|=(vretrace & 0x100) >> 6; - overflow|=(vretrace & 0x200) >> 2; - ver_overflow|=(vretrace & 0x400) >> 6; + overflow|= (short) ((vretrace & 0x100) >> 6); + overflow|= (short) ((vretrace & 0x200) >> 2); + ver_overflow|= (short) ((vretrace & 0x400) >> 6); /* Vertical Retrace End */ IoHandler.IO_Write(crtc_base,0x11);IoHandler.IO_Write(crtc_base+1,((vretrace+2) & 0xF)); /* Vertical Display End */ IoHandler.IO_Write(crtc_base,0x12);IoHandler.IO_Write(crtc_base+1,CurMode.vdispend-1); - overflow|=((CurMode.vdispend-1) & 0x100) >> 7; - overflow|=((CurMode.vdispend-1) & 0x200) >> 3; - ver_overflow|=((CurMode.vdispend-1) & 0x400) >> 9; + overflow|= (short) (((CurMode.vdispend-1) & 0x100) >> 7); + overflow|= (short) (((CurMode.vdispend-1) & 0x200) >> 3); + ver_overflow|= (short) (((CurMode.vdispend-1) & 0x400) >> 9); /*Bitu*/int vblank_trim; if (Dosbox.IS_VGA_ARCH()) { @@ -864,18 +864,18 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { default: vblank_trim=8; } } else { - switch (CurMode.vdispend) { - case 350: vblank_trim=0; - break; - default: vblank_trim=23; - } + if (CurMode.vdispend == 350) { + vblank_trim = 0; + } else { + vblank_trim = 23; + } } /* Vertical Blank Start */ IoHandler.IO_Write(crtc_base,0x15);IoHandler.IO_Write(crtc_base+1,(CurMode.vdispend+vblank_trim)); - overflow|=((CurMode.vdispend+vblank_trim) & 0x100) >> 5; - max_scanline|=((CurMode.vdispend+vblank_trim) & 0x200) >> 4; - ver_overflow|=((CurMode.vdispend+vblank_trim) & 0x400) >> 8; + overflow|= (short) (((CurMode.vdispend+vblank_trim) & 0x100) >> 5); + max_scanline|= (short) (((CurMode.vdispend+vblank_trim) & 0x200) >> 4); + ver_overflow|= (short) (((CurMode.vdispend+vblank_trim) & 0x400) >> 8); /* Vertical Blank End */ IoHandler.IO_Write(crtc_base,0x16);IoHandler.IO_Write(crtc_base+1,(CurMode.vtotal-vblank_trim-2)); @@ -883,9 +883,9 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { /* Line Compare */ /*Bitu*/int line_compare=(CurMode.vtotal < 1024) ? 1023 : 2047; IoHandler.IO_Write(crtc_base,0x18);IoHandler.IO_Write(crtc_base+1,(line_compare&0xff)); - overflow|=(line_compare & 0x100) >> 4; - max_scanline|=(line_compare & 0x200) >> 3; - ver_overflow|=(line_compare & 0x400) >> 4; + overflow|= (short) ((line_compare & 0x100) >> 4); + max_scanline|= (short) ((line_compare & 0x200) >> 3); + ver_overflow|= (short) ((line_compare & 0x400) >> 4); /*Bit8u*/short underline=0; /* Maximum scanline / Underline Location */ if ((CurMode.special & _EGA_LINE_DOUBLE)!=0) { @@ -893,7 +893,7 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { } switch (CurMode.type) { case VGA.M_TEXT: - max_scanline|=CurMode.cheight-1; + max_scanline|= (short) (CurMode.cheight-1); underline=(short)(mono_mode ? 0x0f : 0x1f); // mode 7 uses a diff underline position break; case VGA.M_VGA: @@ -1036,7 +1036,7 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { switch (CurMode.type) { case VGA.M_TEXT: gfx_data[0x5]|=0x10; //Odd-Even Mode - gfx_data[0x6]|=mono_mode ? 0x0a : 0x0e; //Either b800 or b000 + gfx_data[0x6]|= (short) (mono_mode ? 0x0a : 0x0e); //Either b800 or b000 break; case VGA.M_LIN8: case VGA.M_LIN15: @@ -1248,20 +1248,16 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { /*Bit8u*/int feature=Memory.real_readb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_INITIAL_MODE); switch (CurMode.type) { case VGA.M_CGA2: - feature=(short)((feature&~0x30)|0x20); Memory.real_writeb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CURRENT_MSR,0x1e); break; case VGA.M_CGA4: - feature=(short)((feature&~0x30)|0x20); if (CurMode.mode==4) Memory.real_writeb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CURRENT_MSR,0x2a); else if (CurMode.mode==5) Memory.real_writeb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CURRENT_MSR,0x2e); else Memory.real_writeb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CURRENT_MSR,0x2); break; case VGA.M_TANDY16: - feature=(short)((feature&~0x30)|0x20); break; case VGA.M_TEXT: - feature=(short)((feature&~0x30)|0x20); switch (CurMode.mode) { case 0:Memory.real_writeb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CURRENT_MSR,0x2c);break; case 1:Memory.real_writeb(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CURRENT_MSR,0x28);break; @@ -1273,7 +1269,6 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { case VGA.M_LIN4: case VGA.M_EGA: case VGA.M_VGA: - feature=(short)((feature&~0x30)); break; } // disabled, has to be set in bios.cpp exclusively @@ -1285,11 +1280,11 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { IoHandler.IO_Write(crtc_base+1,0); /* Setup the linear frame buffer */ IoHandler.IO_Write(crtc_base,0x59); - IoHandler.IO_Write(crtc_base+1,(int)((Int10.S3_LFB_BASE >> 24)&0xff)); + IoHandler.IO_Write(crtc_base+1, (Int10.S3_LFB_BASE >> 24)&0xff); IoHandler.IO_Write(crtc_base,0x5a); - IoHandler.IO_Write(crtc_base+1,(int)((Int10.S3_LFB_BASE >> 16)&0xff)); + IoHandler.IO_Write(crtc_base+1, (Int10.S3_LFB_BASE >> 16)&0xff); IoHandler.IO_Write(crtc_base,0x6b); // BIOS scratchpad - IoHandler.IO_Write(crtc_base+1,(int)((Int10.S3_LFB_BASE >> 24)&0xff)); + IoHandler.IO_Write(crtc_base+1, (Int10.S3_LFB_BASE >> 24)&0xff); /* Setup some remaining S3 registers */ IoHandler.IO_Write(crtc_base,0x41); // BIOS scratchpad @@ -1334,9 +1329,9 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { default: reg_3a=5; break; - }; + } - switch (CurMode.type) { + switch (CurMode.type) { case VGA.M_LIN4: // <- Theres a discrepance with real hardware on this case VGA.M_LIN8: case VGA.M_LIN15: @@ -1382,7 +1377,7 @@ public static boolean INT10_SetVideoMode(/*Bit16u*/int mode) { if (!Dosbox.IS_VGA_ARCH()) return 0; - Int10.VideoModeBlock[] modelist = null; + Int10.VideoModeBlock[] modelist; switch (Dosbox.svgaCard) { case SVGACards.SVGA_TsengET4K: diff --git a/jdosbox/src/main/java/jdos/ints/Int10_pal.java b/jdosbox/src/main/java/jdos/ints/Int10_pal.java index 359d79f7..0b220ff5 100644 --- a/jdosbox/src/main/java/jdos/ints/Int10_pal.java +++ b/jdosbox/src/main/java/jdos/ints/Int10_pal.java @@ -137,7 +137,7 @@ static public void INT10_ToggleBlinkingBit(/*Bit8u*/short state) { value=IoHandler.IO_Read(Int10.VGAREG_ACTL_READ_DATA); if (state<=1) { value&=0xf7; - value|=state<<3; + value|= (short) (state<<3); } ResetACTL(); diff --git a/jdosbox/src/main/java/jdos/ints/Int10_put_pixel.java b/jdosbox/src/main/java/jdos/ints/Int10_put_pixel.java index 67e6347f..b33156fd 100644 --- a/jdosbox/src/main/java/jdos/ints/Int10_put_pixel.java +++ b/jdosbox/src/main/java/jdos/ints/Int10_put_pixel.java @@ -11,8 +11,8 @@ import jdos.types.SVGACards; public class Int10_put_pixel { - static private short[] cga_masks={0x3f,0xcf,0xf3,0xfc}; - static private short[] cga_masks2={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; + static private final short[] cga_masks={0x3f,0xcf,0xf3,0xfc}; + static private final short[] cga_masks2={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; static private boolean putpixelwarned = false; public static void INT10_PutPixel(/*Bit16u*/int x,/*Bit16u*/int y,/*Bit8u*/short page,/*Bit8u*/short color) { @@ -201,7 +201,7 @@ public static short INT10_GetPixel(/*Bit16u*/int x,/*Bit16u*/int y,/*Bit8u*/shor /* Set the read map */ color=0; IoHandler.IO_Write(0x3ce,0x4);IoHandler.IO_Write(0x3cf,0); - color|=((Memory.mem_readb(off)>>shift) & 1) << 0; + color|= ((Memory.mem_readb(off) >> shift) & 1); IoHandler.IO_Write(0x3ce,0x4);IoHandler.IO_Write(0x3cf,1); color|=((Memory.mem_readb(off)>>shift) & 1) << 1; IoHandler.IO_Write(0x3ce,0x4);IoHandler.IO_Write(0x3cf,2); diff --git a/jdosbox/src/main/java/jdos/ints/Int10_vesa.java b/jdosbox/src/main/java/jdos/ints/Int10_vesa.java index 9ea31637..b2632c65 100644 --- a/jdosbox/src/main/java/jdos/ints/Int10_vesa.java +++ b/jdosbox/src/main/java/jdos/ints/Int10_vesa.java @@ -1,6 +1,5 @@ package jdos.ints; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.hardware.IoHandler; import jdos.hardware.Memory; @@ -102,7 +101,7 @@ public void write(int addr) { /*Bit32u*/long PhysBasePtr; /*Bit32u*/long OffScreenMemOffset; /*Bit16u*/int OffScreenMemSize; - /*Bit8u*/byte[] Reserved = new byte[206]; + /*Bit8u*/final byte[] Reserved = new byte[206]; } public static /*Bit8u*/short VESA_GetSVGAInformation(/*Bit16u*/int seg,/*Bit16u*/int off) { @@ -136,7 +135,8 @@ public void write(int addr) { } Memory.mem_writed(buffer+0x0a,0x0); //Capabilities and flags Memory.mem_writed(buffer+0x0e,Int10.int10.rom.vesa_modes); //VESA Mode list - Memory.mem_writew(buffer+0x12,(/*Bit16u*/int)(VGA.vga.vmemsize/(64*1024))); // memory size in 64kb blocks + /*Bit16u*/ + Memory.mem_writew(buffer+0x12, VGA.vga.vmemsize/(64*1024)); // memory size in 64kb blocks return VESA_SUCCESS; } @@ -277,7 +277,7 @@ public void write(int addr) { minfo.YCharSize=(short)mblock.cheight; if (!Int10.int10.vesa_nolfb) minfo.PhysBasePtr=Int10.S3_LFB_BASE; - minfo.write((int)buf);//MEM_BlockWrite(buf,&minfo,sizeof(MODE_INFO)); + minfo.write(buf);//MEM_BlockWrite(buf,&minfo,sizeof(MODE_INFO)); return VESA_SUCCESS; } @@ -522,7 +522,7 @@ static public int VESA_GetCPUWindow(/*Bit8u*/short window, CPU_Regs.Reg reg) { return VESA_SUCCESS; } - static private jdos.cpu.Callback.Handler VESA_SetWindow = new jdos.cpu.Callback.Handler() { + static private final jdos.cpu.Callback.Handler VESA_SetWindow = new jdos.cpu.Callback.Handler() { public String getName() { return "Int10_vesa.VESA_SetWindow"; } @@ -534,7 +534,7 @@ public String getName() { } }; - static private jdos.cpu.Callback.Handler VESA_PMSetWindow = new jdos.cpu.Callback.Handler() { + static private final jdos.cpu.Callback.Handler VESA_PMSetWindow = new jdos.cpu.Callback.Handler() { public String getName() { return "Int10_vesa.VESA_PMSetWindow 0x"+Integer.toHexString(CPU_Regs.reg_edx.word()); } @@ -544,7 +544,7 @@ public String getName() { } }; - static private jdos.cpu.Callback.Handler VESA_PMSetPalette = new jdos.cpu.Callback.Handler() { + static private final jdos.cpu.Callback.Handler VESA_PMSetPalette = new jdos.cpu.Callback.Handler() { public String getName() { return "Int10_vesa.VESA_PMSetPalette"; } @@ -554,7 +554,7 @@ public String getName() { } }; - static private jdos.cpu.Callback.Handler VESA_PMSetStart = new jdos.cpu.Callback.Handler() { + static private final jdos.cpu.Callback.Handler VESA_PMSetStart = new jdos.cpu.Callback.Handler() { public String getName() { return "Int10_vesa.VESA_PMSetStart 0x"+Integer.toHexString((CPU_Regs.reg_edx.word() << 16) | CPU_Regs.reg_ecx.word()); } @@ -563,8 +563,8 @@ public String getName() { // display start address. // TODO wait for retrace in case bl==0x80 - /*Bit32u*/int start = (CPU_Regs.reg_edx.word() << 16) | CPU_Regs.reg_ecx.word(); - VGA.vga.config.display_start = start; + /*Bit32u*/ + VGA.vga.config.display_start = (CPU_Regs.reg_edx.word() << 16) | CPU_Regs.reg_ecx.word(); return 0; } }; @@ -584,13 +584,13 @@ static public void INT10_SetupVESA() { } if (Int10_modes.ModeList_VGA[i].mode>=0x100 && canuse_mode) { if ((!Int10.int10.vesa_oldvbe) || (Int10_modes.ModeList_VGA[i].mode<0x120)) { - Memory.phys_writew((int)Memory.PhysMake(0xc000,Int10.int10.rom.used),Int10_modes.ModeList_VGA[i].mode); + Memory.phys_writew(Memory.PhysMake(0xc000,Int10.int10.rom.used),Int10_modes.ModeList_VGA[i].mode); Int10.int10.rom.used+=2; } } i++; } - Memory.phys_writew((int)Memory.PhysMake(0xc000,Int10.int10.rom.used),0xffff); + Memory.phys_writew(Memory.PhysMake(0xc000,Int10.int10.rom.used),0xffff); Int10.int10.rom.used+=2; Int10.int10.rom.oemstring=Memory.RealMake(0xc000,Int10.int10.rom.used); Memory.phys_writes(0xc0000+Int10.int10.rom.used, string_oem); @@ -608,21 +608,24 @@ static public void INT10_SetupVESA() { Int10.int10.rom.used += 8; //Skip the byte later used for offsets /* PM Set Window call */ Int10.int10.rom.pmode_interface_window = Int10.int10.rom.used - Memory.RealOff( Int10.int10.rom.pmode_interface ); - Memory.phys_writew( (int)Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 0, Int10.int10.rom.pmode_interface_window ); + Memory.phys_writew(Memory.Real2Phys(Int10.int10.rom.pmode_interface), Int10.int10.rom.pmode_interface_window ); callback.pmWindow=jdos.cpu.Callback.CALLBACK_Allocate(); - Int10.int10.rom.used += (/*Bit16u*/int)jdos.cpu.Callback.CALLBACK_Setup(callback.pmWindow, VESA_PMSetWindow, jdos.cpu.Callback.CB_RETN, Memory.PhysMake(0xc000,Int10.int10.rom.used), "VESA PM Set Window"); + /*Bit16u*/ + Int10.int10.rom.used += jdos.cpu.Callback.CALLBACK_Setup(callback.pmWindow, VESA_PMSetWindow, jdos.cpu.Callback.CB_RETN, Memory.PhysMake(0xc000,Int10.int10.rom.used), "VESA PM Set Window"); /* PM Set start call */ Int10.int10.rom.pmode_interface_start = Int10.int10.rom.used - Memory.RealOff( Int10.int10.rom.pmode_interface ); - Memory.phys_writew( (int)Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 2, Int10.int10.rom.pmode_interface_start); + Memory.phys_writew( Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 2, Int10.int10.rom.pmode_interface_start); callback.pmStart=jdos.cpu.Callback.CALLBACK_Allocate(); - Int10.int10.rom.used += (/*Bit16u*/int)jdos.cpu.Callback.CALLBACK_Setup(callback.pmStart, VESA_PMSetStart, jdos.cpu.Callback.CB_RETN, Memory.PhysMake(0xc000,Int10.int10.rom.used), "VESA PM Set Start"); + /*Bit16u*/ + Int10.int10.rom.used += jdos.cpu.Callback.CALLBACK_Setup(callback.pmStart, VESA_PMSetStart, jdos.cpu.Callback.CB_RETN, Memory.PhysMake(0xc000,Int10.int10.rom.used), "VESA PM Set Start"); /* PM Set Palette call */ Int10.int10.rom.pmode_interface_palette = Int10.int10.rom.used - Memory.RealOff( Int10.int10.rom.pmode_interface ); - Memory.phys_writew( (int)Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 4, Int10.int10.rom.pmode_interface_palette); + Memory.phys_writew( Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 4, Int10.int10.rom.pmode_interface_palette); callback.pmPalette=jdos.cpu.Callback.CALLBACK_Allocate(); - Int10.int10.rom.used += (/*Bit16u*/int)jdos.cpu.Callback.CALLBACK_Setup(callback.pmPalette, VESA_PMSetPalette, jdos.cpu.Callback.CB_RETN, Memory.PhysMake(0xc000,Int10.int10.rom.used), "VESA PM Set Palette"); + /*Bit16u*/ + Int10.int10.rom.used += jdos.cpu.Callback.CALLBACK_Setup(callback.pmPalette, VESA_PMSetPalette, jdos.cpu.Callback.CB_RETN, Memory.PhysMake(0xc000,Int10.int10.rom.used), "VESA PM Set Palette"); /* Finalize the size and clear the required ports pointer */ - Memory.phys_writew( (int)Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 6, 0); + Memory.phys_writew( Memory.Real2Phys(Int10.int10.rom.pmode_interface) + 6, 0); Int10.int10.rom.pmode_interface_size=Int10.int10.rom.used - Memory.RealOff( Int10.int10.rom.pmode_interface ); } diff --git a/jdosbox/src/main/java/jdos/ints/Int10_video_state.java b/jdosbox/src/main/java/jdos/ints/Int10_video_state.java index d95c382d..d590287d 100644 --- a/jdosbox/src/main/java/jdos/ints/Int10_video_state.java +++ b/jdosbox/src/main/java/jdos/ints/Int10_video_state.java @@ -32,7 +32,7 @@ public static boolean INT10_VideoState_Save(/*Bitu*/int state,/*RealPt*/int buff /*Bit16u*/int crt_reg=Memory.real_readw(Int10.BIOSMEM_SEG,Int10.BIOSMEM_CRTC_ADDRESS); Memory.real_writew(base_seg,base_dest+0x40,crt_reg); - Memory.real_writeb(base_seg,base_dest+0x00,IO.IO_ReadB(0x3c4)); + Memory.real_writeb(base_seg, base_dest,IO.IO_ReadB(0x3c4)); Memory.real_writeb(base_seg,base_dest+0x01,IO.IO_ReadB(0x3d4)); Memory.real_writeb(base_seg,base_dest+0x02,IO.IO_ReadB(0x3ce)); IO.IO_ReadB(crt_reg+6); @@ -110,7 +110,7 @@ public static boolean INT10_VideoState_Save(/*Bitu*/int state,/*RealPt*/int buff if ((state&2)!=0) { Memory.real_writew(base_seg,Memory.RealOff(buffer)+2,base_dest); - Memory.real_writeb(base_seg,base_dest+0x00,Memory.mem_readb(0x410)&0x30); + Memory.real_writeb(base_seg, base_dest,Memory.mem_readb(0x410)&0x30); for (ct=0; ct<0x1e; ct++) { Memory.real_writeb(base_seg,base_dest+0x01+ct,Memory.mem_readb(0x449+ct)); } @@ -138,13 +138,13 @@ public static boolean INT10_VideoState_Save(/*Bitu*/int state,/*RealPt*/int buff /*Bitu*/int dac_state=IO.IO_ReadB(0x3c7)&1; /*Bitu*/int dac_windex=IO.IO_ReadB(0x3c8); if (dac_state!=0) dac_windex--; - Memory.real_writeb(base_seg,base_dest+0x000,(short)dac_state); + Memory.real_writeb(base_seg, base_dest,(short)dac_state); Memory.real_writeb(base_seg,base_dest+0x001,(short)dac_windex); Memory.real_writeb(base_seg,base_dest+0x002,(short)IO.IO_ReadB(0x3c6)); for (ct=0; ct<0x100; ct++) { IO.IO_WriteB(0x3c7,ct); - Memory.real_writeb(base_seg,base_dest+0x003+ct*3+0,(short)IO.IO_ReadB(0x3c9)); + Memory.real_writeb(base_seg, base_dest + 0x003 + ct * 3,(short)IO.IO_ReadB(0x3c9)); Memory.real_writeb(base_seg,base_dest+0x003+ct*3+1,(short)IO.IO_ReadB(0x3c9)); Memory.real_writeb(base_seg,base_dest+0x003+ct*3+2,(short)IO.IO_ReadB(0x3c9)); } @@ -169,7 +169,7 @@ public static boolean INT10_VideoState_Save(/*Bitu*/int state,/*RealPt*/int buff // sequencer for (ct=0; ct<0x13; ct++) { IO.IO_WriteB(0x3c4,0x09+ct); - Memory.real_writeb(base_seg,base_dest+0x00+ct,(short)IO.IO_ReadB(0x3c5)); + Memory.real_writeb(base_seg, base_dest + ct,(short)IO.IO_ReadB(0x3c5)); } // unlock s3-specific registers @@ -259,7 +259,7 @@ public static boolean INT10_VideoState_Restore(/*Bitu*/int state,/*RealPt*/int b IO.IO_WriteB(0x3c0,Memory.real_readb(base_seg,base_dest+0x23+ct)); } - IO.IO_WriteB(0x3c4,Memory.real_readb(base_seg,base_dest+0x00)); + IO.IO_WriteB(0x3c4,Memory.real_readb(base_seg, base_dest)); IO.IO_WriteB(0x3d4,Memory.real_readb(base_seg,base_dest+0x01)); IO.IO_WriteB(0x3ce,Memory.real_readb(base_seg,base_dest+0x02)); IO.IO_ReadB(crt_reg+6); @@ -269,7 +269,7 @@ public static boolean INT10_VideoState_Restore(/*Bitu*/int state,/*RealPt*/int b if ((state&2)!=0) { base_dest=Memory.real_readw(base_seg,Memory.RealOff(buffer)+2); - Memory.mem_writeb(0x410,(Memory.mem_readb(0x410)&0xcf) | Memory.real_readb(base_seg,base_dest+0x00)); + Memory.mem_writeb(0x410,(Memory.mem_readb(0x410)&0xcf) | Memory.real_readb(base_seg, base_dest)); for (ct=0; ct<0x1e; ct++) { Memory.mem_writeb(0x449+ct,Memory.real_readb(base_seg,base_dest+0x01+ct)); } @@ -292,7 +292,7 @@ public static boolean INT10_VideoState_Restore(/*Bitu*/int state,/*RealPt*/int b for (ct=0; ct<0x100; ct++) { IO.IO_WriteB(0x3c8,ct); - IO.IO_WriteB(0x3c9,Memory.real_readb(base_seg,base_dest+0x003+ct*3+0)); + IO.IO_WriteB(0x3c9,Memory.real_readb(base_seg, base_dest + 0x003 + ct * 3)); IO.IO_WriteB(0x3c9,Memory.real_readb(base_seg,base_dest+0x003+ct*3+1)); IO.IO_WriteB(0x3c9,Memory.real_readb(base_seg,base_dest+0x003+ct*3+2)); } @@ -301,7 +301,7 @@ public static boolean INT10_VideoState_Restore(/*Bitu*/int state,/*RealPt*/int b IO.IO_WriteB(0x3c0,0x14); IO.IO_WriteB(0x3c0,Memory.real_readb(base_seg,base_dest+0x303)); - /*Bitu*/int dac_state=Memory.real_readb(base_seg,base_dest+0x000); + /*Bitu*/int dac_state=Memory.real_readb(base_seg, base_dest); if (dac_state==0) { IO.IO_WriteB(0x3c8,Memory.real_readb(base_seg,base_dest+0x001)); } else { @@ -323,7 +323,7 @@ public static boolean INT10_VideoState_Restore(/*Bitu*/int state,/*RealPt*/int b // sequencer for (ct=0; ct<0x13; ct++) { - IO.IO_WriteW(0x3c4,(0x09+ct)+(Memory.real_readb(base_seg,base_dest+0x00+ct)<<8)); + IO.IO_WriteW(0x3c4,(0x09+ct)+(Memory.real_readb(base_seg, base_dest + ct)<<8)); } IO.IO_WriteB(0x3c4,seq_idx); diff --git a/jdosbox/src/main/java/jdos/ints/Int10_vptable.java b/jdosbox/src/main/java/jdos/ints/Int10_vptable.java index cd1dc9f4..47fc6b02 100644 --- a/jdosbox/src/main/java/jdos/ints/Int10_vptable.java +++ b/jdosbox/src/main/java/jdos/ints/Int10_vptable.java @@ -502,12 +502,12 @@ public class Int10_vptable { static public /*Bit16u*/int INT10_SetupVideoParameterTable(/*PhysPt*/int basepos) { if (Dosbox.IS_VGA_ARCH()) { for (/*Bitu*/int i=0;i<0x40*0x1d;i++) { - Memory.phys_writeb((int)(basepos+i),video_parameter_table_vga[i]); + Memory.phys_writeb(basepos+i,video_parameter_table_vga[i]); } return (byte)0x40*0x1d; } else { for (/*Bitu*/int i=0;i<0x40*0x17;i++) { - Memory.phys_writeb((int)(basepos+i),video_parameter_table_ega[i]); + Memory.phys_writeb(basepos+i,video_parameter_table_ega[i]); } return (byte)0x40*0x17; } diff --git a/jdosbox/src/main/java/jdos/ints/Mouse.java b/jdosbox/src/main/java/jdos/ints/Mouse.java index ec3d68b7..d4f5f20a 100644 --- a/jdosbox/src/main/java/jdos/ints/Mouse.java +++ b/jdosbox/src/main/java/jdos/ints/Mouse.java @@ -62,8 +62,8 @@ static public short POS_Y() { 0x0600, 0x0300, 0x0300, 0x0000 }; - static private /*Bit16u*/int[] userdefScreenMask = new int[CURSORY]; - static private /*Bit16u*/int[] userdefCursorMask = new int[CURSORY]; + static private final /*Bit16u*/int[] userdefScreenMask = new int[CURSORY]; + static private final /*Bit16u*/int[] userdefCursorMask = new int[CURSORY]; static private void write(DataOutputStream dos, int i) throws IOException { dos.writeInt(i); @@ -75,19 +75,19 @@ static private void write(DataOutputStream dos, short s) throws IOException { dos.writeShort(s); } static private void write(DataOutputStream dos, int[] a) throws IOException { - for (int i=0;i255 (currently 32) /*Bit16u*/int sub_seg,sub_ofs; /*Bit16u*/int sub_mask; boolean background; /*Bit16s*/short backposx, backposy; - /*Bit8u*/short[] backData = new short[CURSORX*CURSORY]; + /*Bit8u*/final short[] backData = new short[CURSORX*CURSORY]; /*Bit16u*/int[] screenMask; /*Bit16u*/int[] cursorMask; /*Bit16s*/short clipx,clipy; @@ -331,8 +330,8 @@ public static int sizeof() { /*Bit16u*/int dspeed_val; float senv_x; float senv_y; - /*Bit16u*/int[] updateRegion_x=new int[2]; - /*Bit16u*/int[] updateRegion_y=new int[2]; + /*Bit16u*/final int[] updateRegion_x=new int[2]; + /*Bit16u*/final int[] updateRegion_y=new int[2]; /*Bit16u*/int doubleSpeedThreshold; /*Bit16u*/int language; /*Bit16u*/int cursorType; @@ -401,7 +400,7 @@ static private void DoPS2Callback(/*Bit16u*/int data, /*Bit16s*/short mouseX, /* } } - static private Callback.Handler PS2_Handler = new Callback.Handler() { + static private final Callback.Handler PS2_Handler = new Callback.Handler() { public String getName() { return "Mouse.PS2_Handler"; } @@ -424,7 +423,7 @@ public String getName() { static private final int MOUSE_MIDDLE_RELEASED = 64; static private final float MOUSE_DELAY = 5.0f; - static private Pic.PIC_EventHandler MOUSE_Limit_Events = new Pic.PIC_EventHandler() { + static private final Pic.PIC_EventHandler MOUSE_Limit_Events = new Pic.PIC_EventHandler() { public void call(/*Bitu*/int val) { mouse.timer_in_progress = false; if (mouse.events!=0) { @@ -501,7 +500,7 @@ private static void DrawCursorText() { // Mouse cursor - graphic mode // *************************************************************************** - static /*Bit8u*/short[] gfxReg3CE=new short[9]; + static final /*Bit8u*/short[] gfxReg3CE=new short[9]; static /*Bit8u*/short index3C4,gfxReg3C5; private static void SaveVgaRegisters() { if (Dosbox.IS_VGA_ARCH()) { @@ -541,7 +540,7 @@ private static void ClipCursorArea(/*Bit16s*/ShortRef x1, /*Bit16s*/ShortRef x2, addx1.value = addx2.value = addy.value = 0; // Clip up if (y1.value<0) { - addy.value += (-y1.value); + addy.value += (short) -y1.value; y1.value = 0; } // Clip down @@ -550,7 +549,7 @@ private static void ClipCursorArea(/*Bit16s*/ShortRef x1, /*Bit16s*/ShortRef x2, } // Clip left if (x1.value<0) { - addx1.value += (-x1.value); + addx1.value += (short) -x1.value; x1.value = 0; } // Clip right @@ -568,7 +567,7 @@ static private void RestoreCursorBackground() { // Restore background /*Bit16s*/short x,y; /*Bit16u*/ShortRef addx1=new ShortRef(),addx2=new ShortRef(),addy=new ShortRef(); - /*Bit16u*/int dataPos = 0; + /*Bit16u*/int dataPos; /*Bit16s*/ShortRef x1 = new ShortRef(mouse.backposx); /*Bit16s*/ShortRef y1 = new ShortRef(mouse.backposy); /*Bit16s*/ShortRef x2 = new ShortRef(x1.value + CURSORX - 1); @@ -583,7 +582,7 @@ static private void RestoreCursorBackground() { Int10_put_pixel.INT10_PutPixel(x,y,mouse.page,mouse.backData[dataPos++]); } dataPos += addx2.value; - }; + } mouse.background = false; } RestoreVgaRegisters(); @@ -620,7 +619,7 @@ static private void DrawCursor() { /* might be vidmode == 0x13?2:1 */ /*Bit16s*/short xratio = 640; - if (Int10_modes.CurMode.swidth>0) xratio/=Int10_modes.CurMode.swidth; + if (Int10_modes.CurMode.swidth>0) xratio/= (short) Int10_modes.CurMode.swidth; if (xratio==0) xratio = 1; RestoreCursorBackground(); @@ -630,7 +629,7 @@ static private void DrawCursor() { // Save Background /*Bit16s*/short x,y; /*Bit16u*/ShortRef addx1 = new ShortRef(),addx2 = new ShortRef(),addy = new ShortRef(); - /*Bit16u*/int dataPos = 0; + /*Bit16u*/int dataPos; /*Bit16s*/ShortRef x1 = new ShortRef(POS_X() / xratio - mouse.hotx); /*Bit16s*/ShortRef y1 = new ShortRef(POS_Y() - mouse.hoty); /*Bit16s*/ShortRef x2 = new ShortRef(x1.value + CURSORX - 1); @@ -655,7 +654,7 @@ static private void DrawCursor() { for (y=y1.value; y<=y2.value; y++) { /*Bit16u*/int scMask = mouse.screenMask[addy.value+y-y1.value]; /*Bit16u*/int cuMask = mouse.cursorMask[addy.value+y-y1.value]; - if (addx1.value>0) { scMask<<=addx1.value; cuMask<<=addx1.value; dataPos += addx1.value; }; + if (addx1.value>0) { scMask<<=addx1.value; cuMask<<=addx1.value; dataPos += addx1.value; } for (x=x1.value; x<=x2.value; x++) { /*Bit8u*/short pixel = 0; // ScreenMask @@ -687,10 +686,10 @@ static public void Mouse_CursorMoved(float xrel,float yrel,float x,float y,boole mouse.mickey_x += (dx * mouse.mickeysPerPixel_x); mouse.mickey_y += (dy * mouse.mickeysPerPixel_y); - if (mouse.mickey_x >= 32768.0) mouse.mickey_x -= 65536.0; - else if (mouse.mickey_x <= -32769.0) mouse.mickey_x += 65536.0; - if (mouse.mickey_y >= 32768.0) mouse.mickey_y -= 65536.0; - else if (mouse.mickey_y <= -32769.0) mouse.mickey_y += 65536.0; + if (mouse.mickey_x >= 32768.0) mouse.mickey_x -= 65536.0F; + else if (mouse.mickey_x <= -32769.0) mouse.mickey_x += 65536.0F; + if (mouse.mickey_y >= 32768.0) mouse.mickey_y -= 65536.0F; + else if (mouse.mickey_y <= -32769.0) mouse.mickey_y += 65536.0F; if (emulate) { mouse.x += dx; @@ -699,7 +698,7 @@ static public void Mouse_CursorMoved(float xrel,float yrel,float x,float y,boole if (Int10_modes.CurMode.type == VGA.M_TEXT) { mouse.x = x*Int10_modes.CurMode.swidth; mouse.y = y*Int10_modes.CurMode.sheight * 8 / Int10_modes.CurMode.cheight; - } else if ((mouse.max_x < 2048) || (mouse.max_y < 2048) || (mouse.max_x != mouse.max_y)) { + } else if ((mouse.max_y < 2048) || (mouse.max_x != mouse.max_y)) { if ((mouse.max_x > 0) && (mouse.max_y > 0)) { mouse.x = x*mouse.max_x; mouse.y = y*mouse.max_y; @@ -721,10 +720,10 @@ static public void Mouse_CursorMoved(float xrel,float yrel,float x,float y,boole if (mouse.y > mouse.max_y) mouse.y = mouse.max_y; if (mouse.y < mouse.min_y) mouse.y = mouse.min_y; } else { - if (mouse.x >= 32768.0) mouse.x -= 65536.0; - else if (mouse.x <= -32769.0) mouse.x += 65536.0; - if (mouse.y >= 32768.0) mouse.y -= 65536.0; - else if (mouse.y <= -32769.0) mouse.y += 65536.0; + if (mouse.x >= 32768.0) mouse.x -= 65536.0F; + else if (mouse.x <= -32769.0) mouse.x += 65536.0F; + if (mouse.y >= 32768.0) mouse.y -= 65536.0F; + else if (mouse.y <= -32769.0) mouse.y += 65536.0F; } Mouse_AddEvent(MOUSE_HAS_MOVED); DrawCursor(); @@ -963,7 +962,7 @@ static private void Mouse_Reset() { mouse.in_UIR = false; } - static private Callback.Handler INT33_Handler = new Callback.Handler() { + static private final Callback.Handler INT33_Handler = new Callback.Handler() { public String getName() { return "Mouse.INT33_Handler"; } @@ -1000,12 +999,12 @@ public String getName() { /* If position isn't different from current position * don't change it then. (as position is rounded so numbers get * lost when the rounded number is set) (arena/simulation Wolf) */ - if ((/*Bit16s*/short)CPU_Regs.reg_ecx.word() >= mouse.max_x) mouse.x = (float)(mouse.max_x); - else if (mouse.min_x >= CPU_Regs.reg_ecx.word()) mouse.x = (float)(mouse.min_x); + if ((/*Bit16s*/short)CPU_Regs.reg_ecx.word() >= mouse.max_x) mouse.x = mouse.max_x; + else if (mouse.min_x >= CPU_Regs.reg_ecx.word()) mouse.x = mouse.min_x; else if (CPU_Regs.reg_ecx.word() != POS_X()) mouse.x = (float)(CPU_Regs.reg_ecx.word()); - if ((/*Bit16s*/short)CPU_Regs.reg_edx.word() >= mouse.max_y) mouse.y = (float)(mouse.max_y); - else if (mouse.min_y >= (/*Bit16s*/short)CPU_Regs.reg_edx.word()) mouse.y = (float)(mouse.min_y); + if ((/*Bit16s*/short)CPU_Regs.reg_edx.word() >= mouse.max_y) mouse.y = mouse.max_y; + else if (mouse.min_y >= (/*Bit16s*/short)CPU_Regs.reg_edx.word()) mouse.y = mouse.min_y; else if ((/*Bit16s*/short)CPU_Regs.reg_edx.word() != POS_Y()) mouse.y = (float)(CPU_Regs.reg_edx.word()); DrawCursor(); break; @@ -1091,7 +1090,7 @@ public String getName() { break; case 0x0c: /* Define interrupt subroutine parameters */ mouse.sub_mask=CPU_Regs.reg_ecx.word(); - mouse.sub_seg=(int)CPU_Regs.reg_esVal.dword; + mouse.sub_seg= CPU_Regs.reg_esVal.dword; mouse.sub_ofs=CPU_Regs.reg_edx.word(); Main.Mouse_AutoLock(true); //Some games don't seem to reset the mouse before using break; @@ -1118,7 +1117,7 @@ public String getName() { /*Bit16u*/int oldMask= mouse.sub_mask; // Set new values mouse.sub_mask= CPU_Regs.reg_ecx.word(); - mouse.sub_seg = (int)CPU_Regs.reg_esVal.dword; + mouse.sub_seg = CPU_Regs.reg_esVal.dword; mouse.sub_ofs = CPU_Regs.reg_edx.word(); // Return old values CPU_Regs.reg_ecx.word(oldMask); @@ -1207,14 +1206,20 @@ public String getName() { break; case 0x26: /* Get Maximum virtual coordinates */ CPU_Regs.reg_ebx.word((mouse.enabled ? 0x0000 : 0xffff)); - CPU_Regs.reg_ecx.word((/*Bit16u*/int)mouse.max_x); - CPU_Regs.reg_edx.word((/*Bit16u*/int)mouse.max_y); + /*Bit16u*/ + CPU_Regs.reg_ecx.word(mouse.max_x); + /*Bit16u*/ + CPU_Regs.reg_edx.word(mouse.max_y); break; case 0x31: /* Get Current Minimum/Maximum virtual coordinates */ - CPU_Regs.reg_eax.word((/*Bit16u*/int)mouse.min_x); - CPU_Regs.reg_ebx.word((/*Bit16u*/int)mouse.min_y); - CPU_Regs.reg_ecx.word((/*Bit16u*/int)mouse.max_x); - CPU_Regs.reg_edx.word((/*Bit16u*/int)mouse.max_y); + /*Bit16u*/ + CPU_Regs.reg_eax.word(mouse.min_x); + /*Bit16u*/ + CPU_Regs.reg_ebx.word(mouse.min_y); + /*Bit16u*/ + CPU_Regs.reg_ecx.word(mouse.max_x); + /*Bit16u*/ + CPU_Regs.reg_edx.word(mouse.max_y); break; default: if (Log.level<=LogSeverities.LOG_ERROR) Log.log(LogTypes.LOG_MOUSE,LogSeverities.LOG_ERROR,"Mouse Function "+Integer.toString(CPU_Regs.reg_eax.word(), 16)+" not implemented!"); @@ -1224,23 +1229,23 @@ public String getName() { } }; - static private Callback.Handler MOUSE_BD_Handler = new Callback.Handler() { + static private final Callback.Handler MOUSE_BD_Handler = new Callback.Handler() { public String getName() { return "Mouse.MOUSE_BD_Handler"; } public /*Bitu*/int call() { // the stack contains offsets to register values - /*Bit16u*/int raxpt=Memory.real_readw((int)CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x0a); - /*Bit16u*/int rbxpt=Memory.real_readw((int)CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x08); - /*Bit16u*/int rcxpt=Memory.real_readw((int)CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x06); - /*Bit16u*/int rdxpt=Memory.real_readw((int)CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x04); + /*Bit16u*/int raxpt=Memory.real_readw(CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x0a); + /*Bit16u*/int rbxpt=Memory.real_readw(CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x08); + /*Bit16u*/int rcxpt=Memory.real_readw(CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x06); + /*Bit16u*/int rdxpt=Memory.real_readw(CPU_Regs.reg_ssVal.dword,CPU_Regs.reg_esp.word()+0x04); // read out the actual values, registers ARE overwritten - /*Bit16u*/int rax=Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,raxpt); + /*Bit16u*/int rax=Memory.real_readw(CPU_Regs.reg_dsVal.dword,raxpt); CPU_Regs.reg_eax.word(rax); - CPU_Regs.reg_ebx.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rbxpt)); - CPU_Regs.reg_ecx.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rcxpt)); - CPU_Regs.reg_edx.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rdxpt)); + CPU_Regs.reg_ebx.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rbxpt)); + CPU_Regs.reg_ecx.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rcxpt)); + CPU_Regs.reg_edx.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rdxpt)); // LOG_MSG("MOUSE BD: %04X %X %X %X %d %d",CPU_Regs.reg_eax.word(),CPU_Regs.reg_ebx.word(),CPU_Regs.reg_ecx.word(),CPU_Regs.reg_edx.word(),POS_X,POS_Y); // some functions are treated in a special way (additional registers) @@ -1248,18 +1253,18 @@ public String getName() { case 0x09: /* Define GFX Cursor */ case 0x16: /* Save driver state */ case 0x17: /* load driver state */ - CPU_Regs.SegSet16ES((int)CPU_Regs.reg_dsVal.dword); + CPU_Regs.SegSet16ES(CPU_Regs.reg_dsVal.dword); break; case 0x0c: /* Define interrupt subroutine parameters */ case 0x14: /* Exchange event-handler */ if (CPU_Regs.reg_ebx.word()!=0) CPU_Regs.SegSet16ES(CPU_Regs.reg_ebx.word()); - else CPU_Regs.SegSet16ES((int)CPU_Regs.reg_dsVal.dword); + else CPU_Regs.SegSet16ES(CPU_Regs.reg_dsVal.dword); break; case 0x10: /* Define screen region for updating */ - CPU_Regs.reg_ecx.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rdxpt)); - CPU_Regs.reg_edx.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rdxpt+2)); - CPU_Regs.reg_esi.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rdxpt+4)); - CPU_Regs.reg_edi.word(Memory.real_readw((int)CPU_Regs.reg_dsVal.dword,rdxpt+6)); + CPU_Regs.reg_ecx.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rdxpt)); + CPU_Regs.reg_edx.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rdxpt+2)); + CPU_Regs.reg_esi.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rdxpt+4)); + CPU_Regs.reg_edi.word(Memory.real_readw(CPU_Regs.reg_dsVal.dword,rdxpt+6)); break; default: break; @@ -1268,16 +1273,16 @@ public String getName() { INT33_Handler.call(); // save back the registers, too - Memory.real_writew((int)CPU_Regs.reg_dsVal.dword,raxpt,CPU_Regs.reg_eax.word()); - Memory.real_writew((int)CPU_Regs.reg_dsVal.dword,rbxpt,CPU_Regs.reg_ebx.word()); - Memory.real_writew((int)CPU_Regs.reg_dsVal.dword,rcxpt,CPU_Regs.reg_ecx.word()); - Memory.real_writew((int)CPU_Regs.reg_dsVal.dword,rdxpt,CPU_Regs.reg_edx.word()); + Memory.real_writew(CPU_Regs.reg_dsVal.dword,raxpt,CPU_Regs.reg_eax.word()); + Memory.real_writew(CPU_Regs.reg_dsVal.dword,rbxpt,CPU_Regs.reg_ebx.word()); + Memory.real_writew(CPU_Regs.reg_dsVal.dword,rcxpt,CPU_Regs.reg_ecx.word()); + Memory.real_writew(CPU_Regs.reg_dsVal.dword,rdxpt,CPU_Regs.reg_edx.word()); switch (rax) { case 0x1f: /* Disable Mousedriver */ - Memory.real_writew((int)CPU_Regs.reg_dsVal.dword,rbxpt,(int)CPU_Regs.reg_esVal.dword); + Memory.real_writew(CPU_Regs.reg_dsVal.dword,rbxpt, CPU_Regs.reg_esVal.dword); break; case 0x14: /* Exchange event-handler */ - Memory.real_writew((int)CPU_Regs.reg_dsVal.dword,rcxpt,(int)CPU_Regs.reg_esVal.dword); + Memory.real_writew(CPU_Regs.reg_dsVal.dword,rcxpt, CPU_Regs.reg_esVal.dword); break; default: break; @@ -1288,7 +1293,7 @@ public String getName() { } }; - static private Callback.Handler INT74_Handler = new Callback.Handler() { + static private final Callback.Handler INT74_Handler = new Callback.Handler() { public String getName() { return "Mouse.INT74_Handler"; } @@ -1325,7 +1330,7 @@ public String getName() { } }; - static private Callback.Handler MOUSE_UserInt_CB_Handler = new Callback.Handler() { + static private final Callback.Handler MOUSE_UserInt_CB_Handler = new Callback.Handler() { public String getName() { return "Mouse.MOUSE_UserInt_CB_Handler"; } @@ -1341,13 +1346,9 @@ public String getName() { } }; - public static Section.SectionFunction MOUSE_Destroy = new Section.SectionFunction() { - public void call(Section section) { - mouse = new _mouse(); - } - }; + public static final Section.SectionFunction MOUSE_Destroy = section -> mouse = new _mouse(); - public static Section.SectionFunction MOUSE_Init = new Section.SectionFunction() { + public static final Section.SectionFunction MOUSE_Init = new Section.SectionFunction() { public void call(Section section) { // Callback for mouse interrupt 0x33 call_int33=Callback.CALLBACK_Allocate(); diff --git a/jdosbox/src/main/java/jdos/ints/XMS.java b/jdosbox/src/main/java/jdos/ints/XMS.java index 39c3ad9f..2ae08ae8 100644 --- a/jdosbox/src/main/java/jdos/ints/XMS.java +++ b/jdosbox/src/main/java/jdos/ints/XMS.java @@ -1,6 +1,5 @@ package jdos.ints; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.cpu.Callback; import jdos.dos.*; @@ -15,6 +14,8 @@ import jdos.util.IntRef; import jdos.util.ShortRef; +import java.util.Arrays; + public class XMS extends Module_base { static private final int XMS_HANDLES =50; /* 50 XMS Memory Blocks */ static private final int XMS_VERSION =0x0300; /* version 3.00 */ @@ -95,7 +96,7 @@ private static class XMS_Block { private static /*RealPt*/int xms_callback; private static boolean umb_available; - private static XMS_Block[] xms_handles=new XMS_Block[XMS_HANDLES]; + private static final XMS_Block[] xms_handles=new XMS_Block[XMS_HANDLES]; private static boolean InvalidHandle(/*Bitu*/int handle) { return (handle==0 || (handle>=XMS_HANDLES) || xms_handles[handle].free); @@ -143,7 +144,7 @@ private static boolean InvalidHandle(/*Bitu*/int handle) { private static /*Bitu*/int XMS_MoveMemory(/*PhysPt*/int bpt) { /* Read the block with mem_read's */ - /*Bitu*/int length=Memory.mem_readd(bpt + 0/*offsetof(XMS_MemMove,length)*/); + /*Bitu*/int length=Memory.mem_readd(bpt/*offsetof(XMS_MemMove,length)*/); /*Bitu*/int src_handle=Memory.mem_readw(bpt+4/*offsetof(XMS_MemMove,src_handle)*/); int src; int dest; @@ -208,7 +209,8 @@ private static boolean InvalidHandle(/*Bitu*/int handle) { for (/*Bitu*/int i=1;i>> 16)); + /*Bit16u*/ + CPU_Regs.reg_ebx.word(address.value & 0xFFFF); + /*Bit16u*/ + CPU_Regs.reg_edx.word(address.value >>> 16); } } break; case XMS_UNLOCK_EXTENDED_MEMORY_BLOCK: /* 0d */ @@ -339,7 +343,7 @@ public String getName() { } break; case XMS_RESIZE_ANY_EXTENDED_MEMORY_BLOCK: /* 0x8f */ - if ((CPU_Regs.reg_ebx.dword & 0xFFFFFFFFl) > CPU_Regs.reg_ebx.word()) Log.log_msg("64MB memory limit!"); + if ((CPU_Regs.reg_ebx.dword & 0xFFFFFFFFL) > CPU_Regs.reg_ebx.word()) System.out.println("64MB memory limit!"); //fall through case XMS_RESIZE_EXTENDED_MEMORY_BLOCK: /* 0f */ SET_RESULT(XMS_ResizeMemory(CPU_Regs.reg_edx.word(), CPU_Regs.reg_ebx.word())); @@ -432,7 +436,7 @@ public String getName() { } }; - private Callback callbackhandler = new Callback(); + private final Callback callbackhandler = new Callback(); public XMS(Section configuration) { super(configuration); @@ -492,17 +496,15 @@ void ShutDown(){ static XMS test; - public static Section.SectionFunction XMS_ShutDown = new Section.SectionFunction() { + public static final Section.SectionFunction XMS_ShutDown = new Section.SectionFunction() { public void call(Section section) { test.ShutDown(); test = null; - for (int i=0;i= 0; + return System.getProperty("os.name").toLowerCase().contains("win"); } public static boolean isCDRom(String path) { String label = HomeDirectory.getVolumeLabel(path).toLowerCase(); - if (label.indexOf("bd-rom")>=0 || label.indexOf("dvd")>=0) - return true; - return false; + return label.indexOf("bd-rom") >= 0 || label.indexOf("dvd") >= 0; } static public class dir_information { @@ -61,7 +59,7 @@ static public String ResolveHomedir(String temp_line) { static public String CreatePlatformConfigDir() { if (!Dosbox.allPrivileges) return ""; String result = System.getProperty("user.dir"); - if (result != null && result.length()!=0 && new File(result).exists()) { + if (result != null && !result.isEmpty() && new File(result).exists()) { result += File.separator + ".dosbox"; File f = new File(result); if (!f.exists()) { diff --git a/jdosbox/src/main/java/jdos/misc/Log.java b/jdosbox/src/main/java/jdos/misc/Log.java index b5431f5d..4dd1e6bb 100644 --- a/jdosbox/src/main/java/jdos/misc/Log.java +++ b/jdosbox/src/main/java/jdos/misc/Log.java @@ -6,9 +6,6 @@ public class Log { static public final int level = 1; - static public void log_msg(String msg) { - System.out.println(msg); - } static public void exit(String msg) { System.out.print(msg); Debug.close(); @@ -17,6 +14,7 @@ static public void exit(String msg) { else throw new RuntimeException("Exit"); } + static public void log(int type, int severity, String msg) { System.out.println(msg); } diff --git a/jdosbox/src/main/java/jdos/misc/Msg.java b/jdosbox/src/main/java/jdos/misc/Msg.java index 18ef0196..6c7118eb 100644 --- a/jdosbox/src/main/java/jdos/misc/Msg.java +++ b/jdosbox/src/main/java/jdos/misc/Msg.java @@ -9,15 +9,15 @@ public class Msg { static class MessageBlock { - String name; - String val; + final String name; + final String val; public MessageBlock(String _name, String _val) { name = _name; val = _val; } } - static Vector Lang = new Vector(); + static final Vector Lang = new Vector(); static public void add(String name, String value) { for (int i=0;i0) + if (!tail.isEmpty()) tail = tail.substring(1, (int)tail.charAt(0)+1); String filename = Memory.MEM_StrCopy(envscan,256); cmd = new CommandLine(filename,tail); @@ -113,8 +113,7 @@ public void ChangeToLongCmd() { */ if(/*control->SecureMode() ||*/ cmd.Get_arglength() > 100) { - CommandLine temp = new CommandLine(cmd.GetFileName(),Dos_shell.full_arguments); - cmd = temp; + cmd = new CommandLine(cmd.GetFileName(),Dos_shell.full_arguments); } Dos_shell.full_arguments=""; //Clear so it gets even more save } @@ -161,10 +160,10 @@ public boolean GetEnvStr(String entry, StringRef result) { String env_string; result.value=""; - if (entry.length()==0) return false; + if (entry.isEmpty()) return false; do { env_string=Memory.MEM_StrCopy(env_read,1024); - if (env_string.length()==0) return false; + if (env_string.isEmpty()) return false; env_read += env_string.length()+1; int pos = env_string.indexOf('='); if (pos<0) continue; @@ -181,7 +180,7 @@ public boolean GetEnvNum(/*Bitu*/int num,StringRef result) { /*PhysPt*/int env_read=Memory.PhysMake(psp.GetEnvironment(),0); do { env_string=Memory.MEM_StrCopy(env_read,1024); - if (env_string.length()==0) return false; + if (env_string.isEmpty()) return false; if (num==0) { result.value=env_string;return true;} env_read += env_string.length()+1; num--; @@ -192,8 +191,8 @@ public boolean GetEnvNum(/*Bitu*/int num,StringRef result) { /*PhysPt*/int env_read=Memory.PhysMake(psp.GetEnvironment(),0); /*Bitu*/int num=0; while (Memory.mem_readb(env_read)!=0) { - for (;Memory.mem_readb(env_read)!=0;env_read++) {}; - env_read++; + for (;Memory.mem_readb(env_read)!=0;env_read++) {} + env_read++; num++; } return num; @@ -205,7 +204,7 @@ public boolean SetEnv(String entry,String new_string) { String env_string; do { env_string = Memory.MEM_StrCopy(env_read,1024); - if (env_string.length()==0) break; + if (env_string.isEmpty()) break; env_read += env_string.length()+1; int pos = env_string.indexOf('='); if (pos<0) continue; /* Remove corrupt entry? */ @@ -218,7 +217,7 @@ public boolean SetEnv(String entry,String new_string) { } while (true); /* TODO Maybe save the program name sometime. not really needed though */ /* Save the new entry */ - if (new_string.length()>0) { + if (!new_string.isEmpty()) { new_string=entry.toUpperCase()+"="+new_string; Memory.MEM_BlockWrite(env_write,new_string,new_string.length()+1); env_write += new_string.length()+1; @@ -236,7 +235,7 @@ public void Run() { WriteOut(Msg.get("PROGRAM_CONFIG_SECURE_DISALLOW")); return; } - if (!FileIOFactory.canOpen(temp_line, FileIOFactory.MODE_WRITE)) { + if (FileIOFactory.canOpen(temp_line, FileIOFactory.MODE_WRITE)) { WriteOut(Msg.get("PROGRAM_CONFIG_FILE_ERROR"),new Object[] {temp_line}); return; } @@ -250,7 +249,7 @@ public void Run() { WriteOut(Msg.get("PROGRAM_CONFIG_SECURE_DISALLOW")); return; } - if (!FileIOFactory.canOpen(temp_line, FileIOFactory.MODE_WRITE)) { + if (FileIOFactory.canOpen(temp_line, FileIOFactory.MODE_WRITE)) { WriteOut(Msg.get("PROGRAM_CONFIG_FILE_ERROR"),new Object[] {temp_line}); return; } @@ -270,7 +269,7 @@ public void Run() { * As a bonus it will set %CONFIG% to this value as well */ if((temp_line=cmd.FindString("-get",true))!=null) { String temp2 = cmd.GetStringRemain();//So -get n1 n2= can be used without quotes - if(temp2 != null && temp2.length()>0) temp_line = temp_line + " " + temp2; + if(temp2 != null && !temp2.isEmpty()) temp_line = temp_line + " " + temp2; int space = temp_line.indexOf(" "); if(space<0) { @@ -304,7 +303,7 @@ public void Run() { if ((temp_line=cmd.FindString("-set",true))!=null) { //get all arguments String temp2 = cmd.GetStringRemain();//So -set n1 n2=n3 can be used without quotes - if(temp2!=null && temp2.length()>0) temp_line = temp_line + " " + temp2; + if(temp2!=null && !temp2.isEmpty()) temp_line = temp_line + " " + temp2; } else if((temp_line=cmd.GetStringRemain())==null) {//no set WriteOut(Msg.get("PROGRAM_CONFIG_USAGE")); //and no arguments specified return; @@ -360,13 +359,9 @@ public void Run() { } } - static private PROGRAMS_Main CONFIG_ProgramStart = new PROGRAMS_Main() { - public Program call() { - return new CONFIG(); - } - }; + static private final PROGRAMS_Main CONFIG_ProgramStart = () -> new CONFIG(); - public static Section.SectionFunction PROGRAMS_Init = new Section.SectionFunction() { + public static final Section.SectionFunction PROGRAMS_Init = new Section.SectionFunction() { public void call(Section section) { call_program=Callback.CALLBACK_Allocate(); Callback.CALLBACK_Setup(call_program,PROGRAMS_Handler,Callback.CB_RETF,"internal program"); diff --git a/jdosbox/src/main/java/jdos/misc/setup/CommandLine.java b/jdosbox/src/main/java/jdos/misc/setup/CommandLine.java index 4d5078fd..97252a1b 100644 --- a/jdosbox/src/main/java/jdos/misc/setup/CommandLine.java +++ b/jdosbox/src/main/java/jdos/misc/setup/CommandLine.java @@ -1,15 +1,14 @@ package jdos.misc.setup; -import jdos.util.StringHelper; import jdos.util.StringRef; +import java.util.Collections; import java.util.Vector; public class CommandLine { public CommandLine(String[] args) { cmds = new Vector(args.length); - for (int i=0;i0) value.append(" "); @@ -199,8 +198,8 @@ public void Shift() { } public void Shift(int amount) { for (int i=0;i0?(String)cmds.elementAt(0):""; - if (cmds.size()>0) cmds.removeElementAt(0); + file_name = !cmds.isEmpty() ?(String)cmds.elementAt(0):""; + if (!cmds.isEmpty()) cmds.removeElementAt(0); } } public int GetCount() { @@ -216,7 +215,7 @@ public int Get_arglength() { return result; } - private Vector cmds; + private final Vector cmds; private String file_name; private int FindEntry(String name, boolean needNext) { for (int i=0;i0) { - while (args.length()0?String.valueOf(maxwidth):"")+"s"; - String prefix2 = "\n# "; + StringBuilder prefix2 = new StringBuilder("\n# "); for (int l=0;l= mi && va <= ma) return true; - if (warn) Log.log_msg(in.toString()+" lies outside the range "+min.toString()+"-"+max.toString()+" for variable: "+propname+".\nIt might now be reset to the default value: "+default_value.toString()); + if (warn) System.out.println(in +" lies outside the range "+ min +"-"+ max +" for variable: "+propname+".\nIt might now be reset to the default value: "+ default_value); return false; } - private Value min = new Value(); - private Value max = new Value(); + private final Value min = new Value(); + private final Value max = new Value(); } diff --git a/jdosbox/src/main/java/jdos/misc/setup/Prop_multival.java b/jdosbox/src/main/java/jdos/misc/setup/Prop_multival.java index 1a815f76..a273972b 100644 --- a/jdosbox/src/main/java/jdos/misc/setup/Prop_multival.java +++ b/jdosbox/src/main/java/jdos/misc/setup/Prop_multival.java @@ -3,21 +3,21 @@ import java.util.Vector; public class Prop_multival extends Property { - protected Section_prop section; - protected String separator; + protected final Section_prop section; + protected final String separator; protected void make_default_value() { Property p = section.Get_prop(0); if (p == null) return; - String result = p.Get_Default_Value().toString(); + StringBuilder result = new StringBuilder(p.Get_Default_Value().toString()); int i=1; while (true) { p = section.Get_prop(i++); if (p == null) break; String props = p.Get_Default_Value().toString(); - if (props.length()!=0) { - result+=separator; - result+=props; + if (!props.isEmpty()) { + result.append(separator); + result.append(props); } } } @@ -45,7 +45,7 @@ public void SetValue(String input) { if (pos >= 0) { in = input.substring(0, pos); //seperator found input = input.substring(pos+separator.length()); - } else if (input.length() > 0) { //last argument + } else if (!input.isEmpty()) { //last argument in = input; input = ""; } diff --git a/jdosbox/src/main/java/jdos/misc/setup/Prop_multival_remain.java b/jdosbox/src/main/java/jdos/misc/setup/Prop_multival_remain.java index 25d99719..951adb0b 100644 --- a/jdosbox/src/main/java/jdos/misc/setup/Prop_multival_remain.java +++ b/jdosbox/src/main/java/jdos/misc/setup/Prop_multival_remain.java @@ -29,7 +29,7 @@ public void SetValue(String input) { if (pos >= 0 && i < number_of_properties) { in = input.substring(0, pos); //seperator found input = input.substring(pos+separator.length()); - } else if (input.length() > 0) { //last argument or last property + } else if (!input.isEmpty()) { //last argument or last property in = input; input = ""; } diff --git a/jdosbox/src/main/java/jdos/misc/setup/Prop_path.java b/jdosbox/src/main/java/jdos/misc/setup/Prop_path.java index 79da9a25..3e05d884 100644 --- a/jdosbox/src/main/java/jdos/misc/setup/Prop_path.java +++ b/jdosbox/src/main/java/jdos/misc/setup/Prop_path.java @@ -14,13 +14,13 @@ public Prop_path(String _propname, int when, String _value) { } public void SetValue(String str) { SetVal(new Value(str, Value.Etype.V_STRING), false, true); - if (str.length()==0) { + if (str.isEmpty()) { realpath = ""; return; } String workcopy = Cross.ResolveHomedir(str); //Parse ~ and friends //Prepend config directory in it exists. Check for absolute paths later - if (Config.current_config_dir.length()==0) realpath = workcopy; + if (Config.current_config_dir.isEmpty()) realpath = workcopy; else realpath = Config.current_config_dir + File.separator + workcopy; try { if (new File(workcopy).getAbsolutePath().charAt(0) == workcopy.charAt(0)) diff --git a/jdosbox/src/main/java/jdos/misc/setup/Prop_string.java b/jdosbox/src/main/java/jdos/misc/setup/Prop_string.java index 1233384c..bf9816f8 100644 --- a/jdosbox/src/main/java/jdos/misc/setup/Prop_string.java +++ b/jdosbox/src/main/java/jdos/misc/setup/Prop_string.java @@ -1,7 +1,5 @@ package jdos.misc.setup; -import jdos.misc.Log; - public class Prop_string extends Property { public Prop_string(String _propname, int when, String _value) { super(_propname, when); @@ -26,10 +24,11 @@ public boolean CheckValue(Value in, boolean warn) { if (Integer.parseInt(in.toString())>=0) return true; } catch (Exception e) { + throw new RuntimeException(e); } } } - if (warn) Log.log_msg("\""+in.toString()+"\" is not a valid value for variable: "+propname+".\nIt might now be reset it to default value: "+default_value.toString()); + if (warn) System.out.println("\""+in.toString()+"\" is not a valid value for variable: "+propname+".\nIt might now be reset it to default value: "+ default_value); return false; } } diff --git a/jdosbox/src/main/java/jdos/misc/setup/Property.java b/jdosbox/src/main/java/jdos/misc/setup/Property.java index f2bcc1a5..e3eb028a 100644 --- a/jdosbox/src/main/java/jdos/misc/setup/Property.java +++ b/jdosbox/src/main/java/jdos/misc/setup/Property.java @@ -1,6 +1,5 @@ package jdos.misc.setup; -import jdos.misc.Log; import jdos.misc.Msg; import java.util.Vector; @@ -20,8 +19,8 @@ public Property(String _propname, int when) { public void Set_values(String[] in) { int type = default_value.type; - for (int i=0;i events = new Vector(); - static final private Vector buttons = new Vector(); - static final private Vector bindgroups = new Vector(); - static final private Vector handlergroup = new Vector(); + static final private Vector events = new Vector<>(); + static final private Vector buttons = new Vector<>(); + static final private Vector bindgroups = new Vector<>(); + static final private Vector handlergroup = new Vector<>(); final private static class CBindList extends Vector{} static private CEventButton last_clicked = null; @@ -86,7 +85,7 @@ static private class CBindBut { static private final CBindBut bind_but = new CBindBut(); - static CBindList holdlist = new CBindList(); + static final CBindList holdlist = new CBindList(); static public final CMapper mapper = new CMapper(); static public String mapperfile = "mapper.txt"; @@ -143,10 +142,10 @@ public void SetValue(/*Bits*/int value){ public String GetName() { return entry; } public abstract boolean IsTrigger(); - CBindList bindlist = new CBindList(); + final CBindList bindlist = new CBindList(); /*Bitu*/int activity; - String entry; + final String entry; /*Bits*/int current_value; } @@ -193,7 +192,7 @@ public String BindName() { public String ConfigName() { return "key "+MapSDLCode(key); } - public int key; + public final int key; } static private class CKeyBindGroup extends CBindGroup { @@ -213,8 +212,7 @@ public CBind CreateConfigBind(StringRef buf) { // if (codepixels)+(y*mapper.surface->pitch)+x; for (Bitu lines=0;lines { + Section_prop section=(Section_prop)sec; - Prop_path pp = section.Get_path("mapperfile"); - mapperfile = pp.realpath; - //MAPPER_AddHandler(&MAPPER_Run,MK_f1,MMOD1,"mapper","Mapper"); - } + Prop_path pp = section.Get_path("mapperfile"); + mapperfile = pp.realpath; + //MAPPER_AddHandler(&MAPPER_Run,MK_f1,MMOD1,"mapper","Mapper"); }; } diff --git a/jdosbox/src/main/java/jdos/shell/BatchFile.java b/jdosbox/src/main/java/jdos/shell/BatchFile.java index 9f9f9a1f..2fa47979 100644 --- a/jdosbox/src/main/java/jdos/shell/BatchFile.java +++ b/jdosbox/src/main/java/jdos/shell/BatchFile.java @@ -44,9 +44,9 @@ String ReadLine() { Dos_files.DOS_SeekFile(file_handle.value, location, Dos_files.DOS_SEEK_SET); /*Bit8u*/byte[] c=new byte[1];IntRef n=new IntRef(1); - StringBuffer l; + StringBuilder l; do { - l=new StringBuffer(); + l=new StringBuilder(); do { n.value=1; Dos_files.DOS_ReadFile(file_handle.value,c,n); @@ -67,11 +67,11 @@ String ReadLine() { } } while (l.length()==0 || l.charAt(0)==':'); String in = l.toString(); - StringBuffer out = new StringBuffer(); + StringBuilder out = new StringBuilder(); /* Now parse the line read from the bat file for % stuff */ - while (in.length()>0) { + while (!in.isEmpty()) { if (in.charAt(0)=='%') { - in = in.substring(1);if (in.length()==0) break; + in = in.substring(1);if (in.isEmpty()) break; if (in.charAt(0) == '%') { in = in.substring(1); out.append('%'); @@ -89,9 +89,8 @@ String ReadLine() { next -= '0'; if (cmd.GetCount()0 && nospace.charAt(0) == ':') { + if (!nospace.isEmpty() && nospace.charAt(0) == ':') { nospace=nospace.substring(1); //Skip : //Strip spaces and = from it. - while (nospace.length()>0 && StringHelper.isspace(nospace.charAt(0)) || nospace.charAt(0)=='=') { + while (!nospace.isEmpty() && StringHelper.isspace(nospace.charAt(0)) || nospace.charAt(0)=='=') { nospace = nospace.substring(1); } String beginLabel = nospace; - while (nospace.length()>0 && !StringHelper.isspace(nospace.charAt(0)) && nospace.charAt(0)!='=') { + while (!nospace.isEmpty() && !StringHelper.isspace(nospace.charAt(0)) && nospace.charAt(0)!='=') { nospace = nospace.substring(1); } if (where.equalsIgnoreCase(beginLabel.substring(0, beginLabel.length()-nospace.length()))) { @@ -174,11 +173,11 @@ boolean Goto(String where) { void Shift() { cmd.Shift(1); } - /*Bit16u*/IntRef file_handle=new IntRef(0); - /*Bit32u*/ LongRef location=new LongRef(0); - boolean echo; - Dos_shell shell; - BatchFile prev; - CommandLine cmd; + /*Bit16u*/final IntRef file_handle=new IntRef(0); + /*Bit32u*/ final LongRef location=new LongRef(0); + final boolean echo; + final Dos_shell shell; + final BatchFile prev; + final CommandLine cmd; public String filename; } diff --git a/jdosbox/src/main/java/jdos/shell/Dos_shell.java b/jdosbox/src/main/java/jdos/shell/Dos_shell.java index db93b175..87f5f34d 100644 --- a/jdosbox/src/main/java/jdos/shell/Dos_shell.java +++ b/jdosbox/src/main/java/jdos/shell/Dos_shell.java @@ -1,7 +1,6 @@ package jdos.shell; import jdos.Dosbox; -import jdos.cpu.CPU; import jdos.cpu.CPU_Regs; import jdos.cpu.Callback; import jdos.dos.*; @@ -25,20 +24,20 @@ public class Dos_shell extends Program { public interface handler { - public void call(String arg); + void call(String arg); } - private Vector l_history = new Vector(); - private Vector l_completion = new Vector(); + private final Vector l_history = new Vector(); + private final Vector l_completion = new Vector(); /* The shell's variables */ - /*Bit16u*/int input_handle; + /*Bit16u*/final int input_handle; public BatchFile bf; boolean echo; boolean exit; boolean call; - String completion_start; + final String completion_start; /*Bit16u*/int completion_index; public Dos_shell() { @@ -82,7 +81,7 @@ public void Run() { String input_line; if((input_line=bf.ReadLine())!=null) { if (echo) { - if (input_line.length()>0 && input_line.charAt(0)!='@') { + if (!input_line.isEmpty() && input_line.charAt(0)!='@') { ShowPrompt(); WriteOut_NoParsing(input_line); WriteOut_NoParsing("\n"); @@ -130,14 +129,14 @@ void ParseLine(String line) { /*Bit16u*/IntRef dummy=new IntRef(0),dummy2=new IntRef(0); /*Bit32u*/LongRef bigdummy = new LongRef(0); - /*Bitu*/int num = 0; /* Number of commands in this line */ + /*Bitu*/int num; /* Number of commands in this line */ BooleanRef append = new BooleanRef(); boolean normalstdin = false; /* wether stdin/out are open on start. */ boolean normalstdout = false; /* Bug: Assumed is they are "con" */ StringRef s = new StringRef(line); num = GetRedirection(s, in, out, append); line = s.value; - if (num>1) Log.log_msg("SHELL:Multiple command on 1 line not supported"); + if (num>1) System.out.println("SHELL:Multiple command on 1 line not supported"); if (in.value!=null || out!=null) { normalstdin = (psp.GetFileHandle(0) != 0xff); normalstdout = (psp.GetFileHandle(1) != 0xff); @@ -145,19 +144,19 @@ void ParseLine(String line) { if (in.value != null) { if(Dos_files.DOS_OpenFile(in.value,Dos_files.OPEN_READ,dummy)) { //Test if file exists Dos_files.DOS_CloseFile(dummy.value); - Log.log_msg("SHELL:Redirect input from "+in); + System.out.println("SHELL:Redirect input from "+in); if(normalstdin) Dos_files.DOS_CloseFile(0); //Close stdin Dos_files.DOS_OpenFile(in.value,Dos_files.OPEN_READ,dummy); //Open new stdin } } if (out.value != null){ - Log.log_msg("SHELL:Redirect output to "+out.value); + System.out.println("SHELL:Redirect output to "+out.value); if(normalstdout) Dos_files.DOS_CloseFile(1); if(!normalstdin && in.value == null) Dos_files.DOS_OpenFile("con",Dos_files.OPEN_READWRITE,dummy); boolean status = true; /* Create if not exist. Open if exist. Both in read/write mode */ if(append.value) { - if( (status = Dos_files.DOS_OpenFile(out.value,Dos_files.OPEN_READWRITE,dummy)) ) { + if( (status == Dos_files.DOS_OpenFile(out.value, Dos_files.OPEN_READWRITE, dummy)) ) { Dos_files.DOS_SeekFile(1,bigdummy,Dos_files.DOS_SEEK_END); } else { status = Dos_files.DOS_CreateFile(out.value, Dos_system.DOS_ATTR_ARCHIVE,dummy); //Create if not exists. @@ -186,12 +185,12 @@ void ParseLine(String line) { /*Bitu*/int GetRedirection(StringRef s, StringRef ifn, StringRef ofn, BooleanRef append) { String lr=s.value; - StringBuffer lw=new StringBuffer(); + StringBuilder lw=new StringBuilder(); char ch; /*Bitu*/int num=0; boolean quote = false; - while ( lr.length()>0 ) { + while (!lr.isEmpty()) { ch = lr.charAt(0); lr = lr.substring(1); if(quote && ch != '"') { /* don't parse redirection within quotes. Not perfect yet. Escaped quotes will mess the count up */ @@ -204,11 +203,11 @@ void ParseLine(String line) { quote = !quote; break; case '>': - append.value=(lr.length()>0 && lr.charAt(0)=='>'); + append.value=(!lr.isEmpty() && lr.charAt(0)=='>'); if (append.value) lr = lr.substring(1); lr=lr.trim(); ofn.value=lr; - while (lr.length()>0 && lr.charAt(0)!=' ' && lr.charAt(0)!='<' && lr.charAt(0)!='|') lr = lr.substring(1); + while (!lr.isEmpty() && lr.charAt(0)!=' ' && lr.charAt(0)!='<' && lr.charAt(0)!='|') lr = lr.substring(1); //if it ends on a : => remove it. if((ofn.value.length() != lr.length()) && ofn.value.endsWith(":")) ofn.value = ofn.value.substring(0, ofn.value.length()-1); // if(*lr && *(lr+1)) @@ -220,7 +219,7 @@ void ParseLine(String line) { case '<': lr=lr.trim(); ifn.value=lr; - while (lr.length()>0 && lr.charAt(0)!=' ' && lr.charAt(0)!='<' && lr.charAt(0)!='|') lr = lr.substring(1); + while (!lr.isEmpty() && lr.charAt(0)!=' ' && lr.charAt(0)!='<' && lr.charAt(0)!='|') lr = lr.substring(1); //if it ends on a : => remove it. if((ifn.value.length() != lr.length()) && ifn.value.endsWith(":")) ifn.value = ifn.value.substring(0, ifn.value.length()-1); // if(*lr && *(lr+1)) @@ -276,9 +275,9 @@ String InputCommand() { switch (c[0]) { case 0x3d: /* F3 */ - if (l_history.size()==0) break; + if (l_history.isEmpty()) break; it_history = 0; - if (l_history.size()>0 && ((String)l_history.firstElement()).length() > str_len) { + if (!l_history.isEmpty() && ((String)l_history.firstElement()).length() > str_len) { String reader = ((String)l_history.firstElement()).substring(str_len); for (int i=0;i completion_index; str_index--) { // removes all characters outc(8); outc(' '); outc(8); @@ -428,7 +427,7 @@ String InputCommand() { // moves the cursor left while (str_remain--!=0) outc(8); } - if (l_completion.size()!=0) l_completion.clear(); + if (!l_completion.isEmpty()) l_completion.clear(); break; case 0x0a: /* New Line not handled */ /* Don't care */ @@ -439,7 +438,7 @@ String InputCommand() { break; case'\t': { - if (l_completion.size()!=0) { + if (!l_completion.isEmpty()) { it_completion ++; if (it_completion == l_completion.size()) it_completion = 0; } else { @@ -480,11 +479,11 @@ String InputCommand() { } /*RealPt*/int save_dta=Dos.dos.dta(); - Dos.dos.dta((int)Dos.dos.tables.tempdta); + Dos.dos.dta(Dos.dos.tables.tempdta); boolean res = Dos_files.DOS_FindFirst(mask, 0xffff & ~Dos_system.DOS_ATTR_VOLUME); if (!res) { - Dos.dos.dta((int)save_dta); + Dos.dos.dta(save_dta); break; // TODO: beep } @@ -516,10 +515,10 @@ String InputCommand() { res=Dos_files.DOS_FindNext(); } it_completion = 0; - Dos.dos.dta((int)save_dta); + Dos.dos.dta(save_dta); } - if (l_completion.size()!=0 && ((String)l_completion.elementAt(it_completion)).length()!=0) { + if (!l_completion.isEmpty() && !((String) l_completion.elementAt(it_completion)).isEmpty()) { for (;str_index > completion_index; str_index--) { // removes all characters outc(8); outc(' '); outc(8); @@ -538,14 +537,14 @@ String InputCommand() { outc('\\'); outc('\n'); line[0] = 0; // reset the line. - if (l_completion.size()!=0) l_completion.clear(); //reset the completion list. + if (!l_completion.isEmpty()) l_completion.clear(); //reset the completion list. StringHelper.strcpy(line, InputCommand()); //Get the NEW line. size = 0; // stop the next loop str_len = 0; // prevent multiple adds of the same line break; default: - if (l_completion.size()!=0) l_completion.clear(); - if(str_index < str_len && true) { //mem_readb(BIOS_KEYBOARD_FLAGS1)&0x80) dev_con.h ? + if (!l_completion.isEmpty()) l_completion.clear(); + if(str_index < str_len) { //mem_readb(BIOS_KEYBOARD_FLAGS1)&0x80) dev_con.h ? outc(' ');//move cursor one to the right. /*Bit16u*/IntRef a = new IntRef(str_len - str_index); /*Bit8u*/byte[] text=new byte[a.value]; @@ -577,14 +576,13 @@ String InputCommand() { // remove current command from history if it's there if (current_hist) { - current_hist=false; l_history.removeElementAt(0); } // add command line to history String sLine = StringHelper.toString(line); - l_history.insertElementAt(sLine, 0); it_history = 0; - if (l_completion.size()!=0) l_completion.clear(); + l_history.insertElementAt(sLine, 0); + if (!l_completion.isEmpty()) l_completion.clear(); return sLine; } @@ -592,14 +590,14 @@ void ShowPrompt() { char drive=(char)(Dos_files.DOS_GetDefaultDrive()+'A'); StringRef dir = new StringRef(); Dos_files.DOS_GetCurrentDir((short)0,dir); - WriteOut(String.valueOf((char)drive)+":\\"+dir.value+">"); + WriteOut(drive +":\\"+dir.value+">"); } void DoCommand(String line) { /* First split the line into command and arguments */ line = line.trim(); - StringBuffer cmd_buffer=new StringBuffer(); - while (line.length()>0) { + StringBuilder cmd_buffer=new StringBuilder(); + while (!line.isEmpty()) { if (line.charAt(0)==32) break; if (line.charAt(0)=='/') break; if (line.charAt(0)=='\t') break; @@ -642,7 +640,7 @@ public boolean Execute(String name,String args) { String fullname; String p_fullname; String line = args; - if(args.length()!=0){ + if(!args.isEmpty()){ if(args.charAt(0) != ' '){ //put a space in front line = ' '+line; } @@ -652,7 +650,7 @@ public boolean Execute(String name,String args) { if ((name.substring(1).equals(":") || name.substring(1).equals(":\\")) && StringHelper.isalpha(name.charAt(0))) { if (!Dos_files.DOS_SetDrive((short)(name.toUpperCase().charAt(0)-'A'))) { - WriteOut(Msg.get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),new Object[] {new Character(name.toUpperCase().charAt(0))}); + WriteOut(Msg.get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),new Object[] {name.toUpperCase().charAt(0)}); } return true; } @@ -661,7 +659,7 @@ public boolean Execute(String name,String args) { if (p_fullname==null) return false; fullname = p_fullname; int extension = fullname.lastIndexOf('.'); - String sExtension=""; + String sExtension; /*always disallow files without extension from being executed. */ /*only internal commands can be run this way and they never get in this handler */ if(extension >=0 ) { @@ -746,10 +744,10 @@ public boolean Execute(String name,String args) { /* Start up a dos execute interrupt */ CPU_Regs.reg_eax.word(0x4b00); //Filename pointer - CPU_Regs.SegSet16DS((int)CPU_Regs.reg_ssVal.dword); + CPU_Regs.SegSet16DS(CPU_Regs.reg_ssVal.dword); CPU_Regs.reg_edx.word(Memory.RealOff(file_name)); //Paramblock - CPU_Regs.SegSet16ES((int)CPU_Regs.reg_ssVal.dword); + CPU_Regs.SegSet16ES(CPU_Regs.reg_ssVal.dword); CPU_Regs.reg_ebx.word(CPU_Regs.reg_esp.word()); CPU_Regs.SETFLAGBIT(CPU_Regs.IF,false); Callback.CALLBACK_RunRealInt(0x21); @@ -767,7 +765,7 @@ public boolean Execute(String name,String args) { boolean CheckConfig(String cmd_in,String line) { Section test = Dosbox.control.GetSectionFromProperty(cmd_in); if(test==null) return false; - if(line!=null && line.length()==0) { + if(line!=null && line.isEmpty()) { String val = test.GetPropValue(cmd_in); if(!val.equals(Section.NO_SUCH_PROPERTY)) WriteOut(val+"\n"); return true; @@ -790,19 +788,19 @@ String Which(String name) { /* No Path in filename look through path environment string */ StringRef temp = new StringRef(); if (!GetEnvStr("PATH",temp)) return null; - if (temp.value.length()==0) return null; + if (temp.value.isEmpty()) return null; int pos = temp.value.indexOf('='); if (pos<0) return null; String pathenv = temp.value.substring(pos+1); - while (pathenv.length()>0) { + while (!pathenv.isEmpty()) { /* remove ; and ;; at the beginning. (and from the second entry etc) */ - while(pathenv.length()>0 && pathenv.charAt(0) ==';') + while(!pathenv.isEmpty() && pathenv.charAt(0) ==';') pathenv=pathenv.substring(1); /* get next entry */ - StringBuffer path = new StringBuffer(); - while(pathenv.length()>0 && pathenv.charAt(0) !=';') { + StringBuilder path = new StringBuilder(); + while(!pathenv.isEmpty() && pathenv.charAt(0) !=';') { path.append(pathenv.charAt(0)); pathenv = pathenv.substring(1); } @@ -836,14 +834,14 @@ private boolean HELP(StringRef args, String command) { } static private String StripSpaces(String args) { - while (args.length()>0 && StringHelper.isspace(args.charAt(0))) { + while (!args.isEmpty() && StringHelper.isspace(args.charAt(0))) { args = args.substring(1); } return args; } static private String StripSpaces(String args,char also) { - while (args.length()>0 && (StringHelper.isspace(args.charAt(0)) || args.charAt(0)==also)) { + while (!args.isEmpty() && (StringHelper.isspace(args.charAt(0)) || args.charAt(0)==also)) { args = args.substring(1); } return args; @@ -859,13 +857,13 @@ static String FormatNumber(/*Bitu*/long num) { num/=1000; numg=num; if (numg!=0) { - return StringHelper.sprintf("%d,%03d,%03d,%03d",new Object[]{new Long(numg),new Long(numm),new Long(numk),new Long(numb)}); + return StringHelper.sprintf("%d,%03d,%03d,%03d",new Object[]{numg, numm, numk, numb}); } if (numm!=0) { - return StringHelper.sprintf("%d,%03d,%03d",new Object[]{new Long(numm),new Long(numk),new Long(numb)}); + return StringHelper.sprintf("%d,%03d,%03d",new Object[]{numm, numk, numb}); } if (numk!=0) { - return StringHelper.sprintf("%d,%03d",new Object[]{new Long(numk),new Long(numb)}); + return StringHelper.sprintf("%d,%03d",new Object[]{numk, numb}); } return String.valueOf(numb); } @@ -900,8 +898,8 @@ static private String ScanCMDRemain(StringRef cmd) { int pos = cmd.value.indexOf('/'); if (pos>=0) { String scan = cmd.value.substring(pos+1); - StringBuffer found = new StringBuffer(); - while (scan.length()>0 && !StringHelper.isspace(scan.charAt(0))) { + StringBuilder found = new StringBuilder(); + while (!scan.isEmpty() && !StringHelper.isspace(scan.charAt(0))) { found.append(scan.charAt(0)); scan = scan.substring(1); } @@ -910,7 +908,7 @@ static private String ScanCMDRemain(StringRef cmd) { } /* Some supported commands */ - handler CMD_HELP = new handler() { +final handler CMD_HELP = new handler() { public void call(String a) { StringRef args = new StringRef(a); if (HELP(args, "HELP")) return; @@ -928,13 +926,11 @@ public void call(String a) { } }; - handler CMD_CLS = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "CLS")) return; - CPU_Regs.reg_eax.word(0x0003); - Callback.CALLBACK_RunRealInt(0x10); - } + final handler CMD_CLS = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "CLS")) return; + CPU_Regs.reg_eax.word(0x0003); + Callback.CALLBACK_RunRealInt(0x10); }; static private class copysource { @@ -949,274 +945,270 @@ static private class copysource { } } - handler CMD_COPY = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "COPY")) return; - final String defaulttarget= "."; + final handler CMD_COPY = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "COPY")) return; + final String defaulttarget= "."; + + args.value = StripSpaces(args.value); + /* Command uses dta so set it to our internal dta */ + /*RealPt*/int save_dta=Dos.dos.dta(); + Dos.dos.dta(Dos.dos.tables.tempdta); + Dos_DTA dta = new Dos_DTA(Dos.dos.dta()); + /*Bit32u*/LongRef size = new LongRef(0);/*Bit16u*/IntRef date=new IntRef(0);/*Bit16u*/IntRef time=new IntRef(0);/*Bit8u*/ShortRef attr=new ShortRef(); + StringRef name = new StringRef(); + Vector sources = new Vector(); + // ignore /b and /t switches: always copy binary + while(ScanCMDBool(args,"B")) ; + while(ScanCMDBool(args,"T")) ; //Shouldn't this be A ? + while(ScanCMDBool(args,"A")) ; + ScanCMDBool(args,"Y"); + ScanCMDBool(args,"-Y"); + ScanCMDBool(args,"V"); + + String rem=ScanCMDRemain(args); + if (rem!=null) { + WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[] {rem}); + Dos.dos.dta(save_dta); + return; + } + // Gather all sources (extension to copy more then 1 file specified at commandline) + // Concatating files go as follows: All parts except for the last bear the concat flag. + // This construction allows them to be counted (only the non concat set) + String source_p; + while ( (source_p = StringHelper.StripWord(args))!=null && !source_p.isEmpty()) { + do { + int plus = source_p.indexOf('+'); + String source_x; + // If StripWord() previously cut at a space before a plus then + // set concatenate flag on last source and remove leading plus + if (plus == 0 && !sources.isEmpty()) { + copysource s = (copysource)sources.elementAt(sources.size()-1); + s.concat = true; + if (source_p.length()==1) + break; + source_p = source_p.substring(1); + plus = source_p.indexOf('+'); + } + if (plus>=0) { + source_x = source_p.substring(0, plus); + } else { + source_x = source_p; + } + boolean has_drive_spec = false; + int source_x_len = source_x.length(); + if (source_x_len>0) { + if (source_x.charAt(source_x_len-1)==':') has_drive_spec = true; + } + if (!has_drive_spec && !source_p.contains("*") && !source_p.contains("?")) { //doubt that fu*\*.* is valid + if (Dos_files.DOS_FindFirst(source_x,0xffff & ~Dos_system.DOS_ATTR_VOLUME)) { + dta.GetResult(name,size,date,time,attr); + if ((attr.value & Dos_system.DOS_ATTR_DIRECTORY)!=0) + source_x+="\\*.*"; + } + } + sources.add(new copysource(source_x, plus >= 0)); + if (plus>=0) { + source_p = source_p.substring(plus+1); + } else { + source_p = ""; + } + } while(!source_p.isEmpty()); + } + // At least one source has to be there + if (sources.isEmpty() || ((copysource) sources.elementAt(0)).filename.isEmpty()) { + WriteOut(Msg.get("SHELL_MISSING_PARAMETER")); + Dos.dos.dta(save_dta); + return; + } - args.value = StripSpaces(args.value); - /* Command uses dta so set it to our internal dta */ - /*RealPt*/int save_dta=Dos.dos.dta(); - Dos.dos.dta((int)Dos.dos.tables.tempdta); - Dos_DTA dta = new Dos_DTA(Dos.dos.dta()); - /*Bit32u*/LongRef size = new LongRef(0);/*Bit16u*/IntRef date=new IntRef(0);/*Bit16u*/IntRef time=new IntRef(0);/*Bit8u*/ShortRef attr=new ShortRef(); - StringRef name = new StringRef(); - Vector sources = new Vector(); - // ignore /b and /t switches: always copy binary - while(ScanCMDBool(args,"B")) ; - while(ScanCMDBool(args,"T")) ; //Shouldn't this be A ? - while(ScanCMDBool(args,"A")) ; - ScanCMDBool(args,"Y"); - ScanCMDBool(args,"-Y"); - ScanCMDBool(args,"V"); + copysource target=new copysource(); + // If more then one object exists and last target is not part of a + // concat sequence then make it the target. + if(sources.size()>1 && !((copysource)sources.elementAt(sources.size()-2)).concat){ + target = (copysource)sources.lastElement(); + sources.removeElementAt(sources.size()-1); + } + //If no target => default target with concat flag true to detect a+b+c + if(target.filename.isEmpty()) target = new copysource(defaulttarget,true); + + copysource oldsource = new copysource(); + copysource source = new copysource(); + /*Bit32u*/int count = 0; + while(!sources.isEmpty()) { + /* Get next source item and keep track of old source for concat start end */ + oldsource = source; + source = (copysource)sources.firstElement(); + sources.remove(0); + + //Skip first file if doing a+b+c. Set target to first file + if(!oldsource.concat && source.concat && target.concat) { + target = source; + continue; + } - String rem=ScanCMDRemain(args); - if (rem!=null) { - WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[] {rem}); + /* Make a full path in the args */ + StringRef pathSource = new StringRef(); + StringRef pathTarget = new StringRef(); + + if (!Dos_files.DOS_Canonicalize(source.filename,pathSource)) { + WriteOut(Msg.get("SHELL_ILLEGAL_PATH")); Dos.dos.dta(save_dta); return; } - // Gather all sources (extension to copy more then 1 file specified at commandline) - // Concatating files go as follows: All parts except for the last bear the concat flag. - // This construction allows them to be counted (only the non concat set) - String source_p; - while ( (source_p = StringHelper.StripWord(args))!=null && source_p.length()>0 ) { - do { - int plus = source_p.indexOf('+'); - String source_x; - // If StripWord() previously cut at a space before a plus then - // set concatenate flag on last source and remove leading plus - if (plus == 0 && sources.size()>0) { - copysource s = (copysource)sources.elementAt(sources.size()-1); - s.concat = true; - if (source_p.length()==1) - break; - source_p = source_p.substring(1); - plus = source_p.indexOf('+'); - } - if (plus>=0) { - source_x = source_p.substring(0, plus); - } else { - source_x = source_p; - } - boolean has_drive_spec = false; - int source_x_len = source_x.length(); - if (source_x_len>0) { - if (source_x.charAt(source_x_len-1)==':') has_drive_spec = true; - } - if (!has_drive_spec && !source_p.contains("*") && !source_p.contains("?")) { //doubt that fu*\*.* is valid - if (Dos_files.DOS_FindFirst(source_x,0xffff & ~Dos_system.DOS_ATTR_VOLUME)) { - dta.GetResult(name,size,date,time,attr); - if ((attr.value & Dos_system.DOS_ATTR_DIRECTORY)!=0) - source_x+="\\*.*"; - } - } - sources.add(new copysource(source_x,(plus>=0)?true:false)); - if (plus>=0) { - source_p = source_p.substring(plus+1); - } else { - source_p = ""; - } - } while(source_p.length()>0); - } - // At least one source has to be there - if (sources.size()==0 || ((copysource)sources.elementAt(0)).filename.length()==0) { - WriteOut(Msg.get("SHELL_MISSING_PARAMETER")); + // cut search pattern + int pos = pathSource.value.lastIndexOf('\\'); + if (pos>=0) pathSource.value = pathSource.value.substring(0, pos+1); + + if (!Dos_files.DOS_Canonicalize(target.filename,pathTarget)) { + WriteOut(Msg.get("SHELL_ILLEGAL_PATH")); Dos.dos.dta(save_dta); return; } + int temp = pathTarget.value.indexOf("*.*"); + if(temp>=0) pathTarget.value = pathTarget.value.substring(0, temp);//strip off *.* from target - copysource target=new copysource(); - // If more then one object exists and last target is not part of a - // concat sequence then make it the target. - if(sources.size()>1 && !((copysource)sources.elementAt(sources.size()-2)).concat){ - target = (copysource)sources.lastElement(); - sources.removeElementAt(sources.size()-1); - } - //If no target => default target with concat flag true to detect a+b+c - if(target.filename.length() == 0) target = new copysource(defaulttarget,true); - - copysource oldsource = new copysource(); - copysource source = new copysource(); - /*Bit32u*/int count = 0; - while(sources.size()>0) { - /* Get next source item and keep track of old source for concat start end */ - oldsource = source; - source = (copysource)sources.firstElement(); - sources.remove(0); - - //Skip first file if doing a+b+c. Set target to first file - if(!oldsource.concat && source.concat && target.concat) { - target = source; - continue; - } - - /* Make a full path in the args */ - StringRef pathSource = new StringRef(); - StringRef pathTarget = new StringRef(); - - if (!Dos_files.DOS_Canonicalize(source.filename,pathSource)) { - WriteOut(Msg.get("SHELL_ILLEGAL_PATH")); - Dos.dos.dta(save_dta); - return; - } - // cut search pattern - int pos = pathSource.value.lastIndexOf('\\'); - if (pos>=0) pathSource.value = pathSource.value.substring(0, pos+1); - - if (!Dos_files.DOS_Canonicalize(target.filename,pathTarget)) { - WriteOut(Msg.get("SHELL_ILLEGAL_PATH")); - Dos.dos.dta(save_dta); - return; - } - int temp = pathTarget.value.indexOf("*.*"); - if(temp>=0) pathTarget.value = pathTarget.value.substring(0, temp);//strip off *.* from target - - // add '\\' if target is a directoy - if (pathTarget.value.charAt(pathTarget.value.length()-1)!='\\') { - if (Dos_files.DOS_FindFirst(pathTarget.value,0xffff & ~Dos_system.DOS_ATTR_VOLUME)) { - dta.GetResult(name,size,date,time,attr); - if ((attr.value & Dos_system.DOS_ATTR_DIRECTORY)!=0) - pathTarget.value+="\\"; - } + // add '\\' if target is a directoy + if (pathTarget.value.charAt(pathTarget.value.length()-1)!='\\') { + if (Dos_files.DOS_FindFirst(pathTarget.value,0xffff & ~Dos_system.DOS_ATTR_VOLUME)) { + dta.GetResult(name,size,date,time,attr); + if ((attr.value & Dos_system.DOS_ATTR_DIRECTORY)!=0) + pathTarget.value+="\\"; } + } - //Find first sourcefile - boolean ret = Dos_files.DOS_FindFirst(source.filename,0xffff & ~Dos_system.DOS_ATTR_VOLUME); - if (!ret) { - WriteOut(Msg.get("SHELL_CMD_FILE_NOT_FOUND"),new Object[] {source.filename}); - Dos.dos.dta(save_dta); - return; - } + //Find first sourcefile + boolean ret = Dos_files.DOS_FindFirst(source.filename,0xffff & ~Dos_system.DOS_ATTR_VOLUME); + if (!ret) { + WriteOut(Msg.get("SHELL_CMD_FILE_NOT_FOUND"),new Object[] {source.filename}); + Dos.dos.dta(save_dta); + return; + } - String nameTarget; - String nameSource; + String nameTarget; + String nameSource; - while (ret) { - dta.GetResult(name,size,date,time,attr); + while (ret) { + dta.GetResult(name,size,date,time,attr); - if ((attr.value & Dos_system.DOS_ATTR_DIRECTORY)==0) { - nameSource=pathSource.value; - nameSource+=name.value; - /*Bit16u*/IntRef sourceHandle = new IntRef(0),targetHandle = new IntRef(0); - // Open Source - if (Dos_files.DOS_OpenFile(nameSource,0,sourceHandle)) { - // Create Target or open it if in concat mode - nameTarget=pathTarget.value; - if (nameTarget.charAt(nameTarget.length()-1)=='\\') nameTarget+=name.value; - - //Don't create a newfile when in concat mode - if (oldsource.concat || Dos_files.DOS_CreateFile(nameTarget,0,targetHandle)) { - /*Bit32u*/LongRef dummy=new LongRef(0); - //In concat mode. Open the target and seek to the eof - if (!oldsource.concat || (Dos_files.DOS_OpenFile(nameTarget,Dos_files.OPEN_READWRITE,targetHandle) && - Dos_files.DOS_SeekFile(targetHandle.value,dummy,Dos_files.DOS_SEEK_END))) { - // Copy - final /*Bit8u*/byte[] buffer=new byte[0x8000]; - boolean failed = false; - /*Bit16u*/IntRef toread = new IntRef(0x8000); - do { - failed |= Dos_files.DOS_ReadFile(sourceHandle.value,buffer,toread); - failed |= Dos_files.DOS_WriteFile(targetHandle.value,buffer,toread); - } while (toread.value==0x8000); - failed |= Dos_files.DOS_CloseFile(sourceHandle.value); - failed |= Dos_files.DOS_CloseFile(targetHandle.value); - WriteOut(" "+name.value+"\n"); - if(!source.concat) count++; //Only count concat files once - } else { - Dos_files.DOS_CloseFile(sourceHandle.value); - WriteOut(Msg.get("SHELL_CMD_COPY_FAILURE"),new Object[] {target.filename}); - } + if ((attr.value & Dos_system.DOS_ATTR_DIRECTORY)==0) { + nameSource=pathSource.value; + nameSource+=name.value; + /*Bit16u*/IntRef sourceHandle = new IntRef(0),targetHandle = new IntRef(0); + // Open Source + if (Dos_files.DOS_OpenFile(nameSource,0,sourceHandle)) { + // Create Target or open it if in concat mode + nameTarget=pathTarget.value; + if (nameTarget.charAt(nameTarget.length()-1)=='\\') nameTarget+=name.value; + + //Don't create a newfile when in concat mode + if (oldsource.concat || Dos_files.DOS_CreateFile(nameTarget,0,targetHandle)) { + /*Bit32u*/LongRef dummy=new LongRef(0); + //In concat mode. Open the target and seek to the eof + if (!oldsource.concat || (Dos_files.DOS_OpenFile(nameTarget,Dos_files.OPEN_READWRITE,targetHandle) && + Dos_files.DOS_SeekFile(targetHandle.value,dummy,Dos_files.DOS_SEEK_END))) { + // Copy + final /*Bit8u*/byte[] buffer=new byte[0x8000]; + boolean failed = false; + /*Bit16u*/IntRef toread = new IntRef(0x8000); + do { + failed |= Dos_files.DOS_ReadFile(sourceHandle.value,buffer,toread); + failed |= Dos_files.DOS_WriteFile(targetHandle.value,buffer,toread); + } while (toread.value==0x8000); + failed |= Dos_files.DOS_CloseFile(sourceHandle.value); + failed |= Dos_files.DOS_CloseFile(targetHandle.value); + WriteOut(" "+name.value+"\n"); + if(!source.concat) count++; //Only count concat files once } else { Dos_files.DOS_CloseFile(sourceHandle.value); - if (targetHandle.value != 0) - Dos_files.DOS_CloseFile(targetHandle.value); WriteOut(Msg.get("SHELL_CMD_COPY_FAILURE"),new Object[] {target.filename}); } - } else WriteOut(Msg.get("SHELL_CMD_COPY_FAILURE"),new Object[] {source.filename}); - } - //On the next file - ret = Dos_files.DOS_FindNext(); + } else { + Dos_files.DOS_CloseFile(sourceHandle.value); + if (targetHandle.value != 0) + Dos_files.DOS_CloseFile(targetHandle.value); + WriteOut(Msg.get("SHELL_CMD_COPY_FAILURE"),new Object[] {target.filename}); + } + } else WriteOut(Msg.get("SHELL_CMD_COPY_FAILURE"),new Object[] {source.filename}); } + //On the next file + ret = Dos_files.DOS_FindNext(); } - - WriteOut(Msg.get("SHELL_CMD_COPY_SUCCESS"),new Object[] {new Integer(count)}); - Dos.dos.dta(save_dta); } + + WriteOut(Msg.get("SHELL_CMD_COPY_SUCCESS"),new Object[] {count}); + Dos.dos.dta(save_dta); }; - handler CMD_DATE = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "DATE")) return; - if(ScanCMDBool(args,"h")) { - // synchronize date with host parameter - Calendar calendar = Calendar.getInstance(); + final handler CMD_DATE = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "DATE")) return; + if(ScanCMDBool(args,"h")) { + // synchronize date with host parameter + Calendar calendar = Calendar.getInstance(); - CPU_Regs.reg_ecx.word(calendar.get(Calendar.YEAR)); - CPU_Regs.reg_edx.high(calendar.get(Calendar.MONTH) + 1); - CPU_Regs.reg_edx.low(calendar.get(Calendar.DAY_OF_MONTH)); + CPU_Regs.reg_ecx.word(calendar.get(Calendar.YEAR)); + CPU_Regs.reg_edx.high(calendar.get(Calendar.MONTH) + 1); + CPU_Regs.reg_edx.low(calendar.get(Calendar.DAY_OF_MONTH)); + + CPU_Regs.reg_eax.high(0x2b); // set system date + Callback.CALLBACK_RunRealInt(0x21); + return; + } + // check if a date was passed in command line + String[] parts = StringHelper.split(args.value.trim(), "-"); + if(parts.length == 3) { + try { + int newmonth = Integer.parseInt(parts[0]); + int newday = Integer.parseInt(parts[1]); + int newyear = Integer.parseInt(parts[2]); + CPU_Regs.reg_ecx.word(newyear); + CPU_Regs.reg_edx.high(newmonth); + CPU_Regs.reg_edx.low(newday); CPU_Regs.reg_eax.high(0x2b); // set system date Callback.CALLBACK_RunRealInt(0x21); + if(CPU_Regs.reg_eax.low()==0xff) WriteOut(Msg.get("SHELL_CMD_DATE_ERROR")); return; - } - // check if a date was passed in command line - String[] parts = StringHelper.split(args.value.trim(), "-"); - if(parts.length == 3) { - try { - int newmonth = Integer.parseInt(parts[0]); - int newday = Integer.parseInt(parts[1]); - int newyear = Integer.parseInt(parts[2]); - CPU_Regs.reg_ecx.word(newyear); - CPU_Regs.reg_edx.high(newmonth); - CPU_Regs.reg_edx.low(newday); - - CPU_Regs.reg_eax.high(0x2b); // set system date - Callback.CALLBACK_RunRealInt(0x21); - if(CPU_Regs.reg_eax.low()==0xff) WriteOut(Msg.get("SHELL_CMD_DATE_ERROR")); - return; - } catch (Exception e) { - - } - } - // display the current date - CPU_Regs.reg_eax.high(0x2a); // get system date - Callback.CALLBACK_RunRealInt(0x21); - - String datestring = Msg.get("SHELL_CMD_DATE_DAYS"); - String day = ""; - try { - int length = Integer.parseInt(datestring.substring(0, 1)); - if (datestring.length()==length*7+1) { - day = datestring.substring(1+length*CPU_Regs.reg_eax.low()); - day = day.substring(0, length); - } } catch (Exception e) { - + throw new RuntimeException(e); } - boolean dateonly = ScanCMDBool(args,"t"); - if(!dateonly) WriteOut(Msg.get("SHELL_CMD_DATE_NOW")); - - String formatstring = Msg.get("SHELL_CMD_DATE_FORMAT"); - if (formatstring.length()!=5) return; - StringBuffer buffer = new StringBuffer(); - for (int i = 0; i < 5; i++) { - if(i==1 || i==3) { - buffer.append(formatstring.charAt(i)); - } else { - if(formatstring.charAt(i)=='M') buffer.append(StringHelper.sprintf("%02d", new Object[] {new Integer(CPU_Regs.reg_edx.high())})); - if(formatstring.charAt(i)=='D') buffer.append(StringHelper.sprintf("%02d", new Object[] {new Integer(CPU_Regs.reg_edx.low())})); - if(formatstring.charAt(i)=='Y') buffer.append(StringHelper.sprintf("%02d", new Object[] {new Integer(CPU_Regs.reg_ecx.word())})); - } + } + // display the current date + CPU_Regs.reg_eax.high(0x2a); // get system date + Callback.CALLBACK_RunRealInt(0x21); + + String datestring = Msg.get("SHELL_CMD_DATE_DAYS"); + String day = ""; + try { + int length = Integer.parseInt(datestring.substring(0, 1)); + if (datestring.length()==length*7+1) { + day = datestring.substring(1+length*CPU_Regs.reg_eax.low()); + day = day.substring(0, length); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + boolean dateonly = ScanCMDBool(args,"t"); + if(!dateonly) WriteOut(Msg.get("SHELL_CMD_DATE_NOW")); + + String formatstring = Msg.get("SHELL_CMD_DATE_FORMAT"); + if (formatstring.length()!=5) return; + StringBuilder buffer = new StringBuilder(); + for (int i = 0; i < 5; i++) { + if(i==1 || i==3) { + buffer.append(formatstring.charAt(i)); + } else { + if(formatstring.charAt(i)=='M') buffer.append(StringHelper.sprintf("%02d", new Object[] {CPU_Regs.reg_edx.high()})); + if(formatstring.charAt(i)=='D') buffer.append(StringHelper.sprintf("%02d", new Object[] {CPU_Regs.reg_edx.low()})); + if(formatstring.charAt(i)=='Y') buffer.append(StringHelper.sprintf("%02d", new Object[] {CPU_Regs.reg_ecx.word()})); } - WriteOut(day + " " + buffer.toString() + "\n"); - if(!dateonly) WriteOut(Msg.get("SHELL_CMD_DATE_SETHLP")); } + WriteOut(day + " " + buffer + "\n"); + if(!dateonly) WriteOut(Msg.get("SHELL_CMD_DATE_SETHLP")); }; - handler CMD_DIR = new handler() { + final handler CMD_DIR = new handler() { public void call(String a) { StringRef args = new StringRef(a); if (HELP(args, "DIR")) return; @@ -1249,7 +1241,7 @@ public void call(String a) { byte_count=file_count=dir_count=0; args.value = args.value.trim(); - if (args.value.length() == 0) { + if (args.value.isEmpty()) { args.value="*.*"; //no arguments. } else { if (args.value.endsWith("\\") || args.value.endsWith(":")) { @@ -1258,7 +1250,7 @@ public void call(String a) { } args.value = ExpandDot(args); - if (args.value.indexOf("*")<0 && args.value.indexOf("?")<0) { + if (!args.value.contains("*") && !args.value.contains("?")) { /*Bit16u*/IntRef attribute=new IntRef(0); if(Dos_files.DOS_GetFileAttr(args.value,attribute) && (attribute.value & Dos_system.DOS_ATTR_DIRECTORY)!=0 ) { args.value+="\\*.*"; // if no wildcard and a directory, get its files @@ -1279,7 +1271,7 @@ public void call(String a) { /* Command uses dta so set it to our internal dta */ /*RealPt*/int save_dta=Dos.dos.dta(); - Dos.dos.dta((int)Dos.dos.tables.tempdta); + Dos.dos.dta(Dos.dos.tables.tempdta); Dos_DTA dta=new Dos_DTA(Dos.dos.dta()); boolean ret=Dos_files.DOS_FindFirst(args.value,0xffff & ~Dos_system.DOS_ATTR_VOLUME); if (!ret) { @@ -1312,7 +1304,8 @@ public void call(String a) { } /*Bit8u*/short day = (/*Bit8u*/short)(date.value & 0x001f); /*Bit8u*/short month = (/*Bit8u*/short)((date.value >> 5) & 0x000f); - /*Bit16u*/int year = (/*Bit16u*/int)((date.value >> 9) + 1980); + /*Bit16u*//*Bit16u*/ + int year = (date.value >> 9) + 1980; /*Bit8u*/short hour = (/*Bit8u*/short)((time.value >> 5 ) >> 6); /*Bit8u*/short minute = (/*Bit8u*/short)((time.value >> 5) & 0x003f); @@ -1324,7 +1317,7 @@ public void call(String a) { for (int i=14-namelen;i>0;i--) WriteOut(" "); } } else { - WriteOut("%-8s %-3s %-16s %02d-%02d-%04d %2d:%02d\n",new Object[] {name.value,ext,"

",new Integer(day),new Integer(month),new Integer(year),new Integer(hour),new Integer(minute)}); + WriteOut("%-8s %-3s %-16s %02d-%02d-%04d %2d:%02d\n",new Object[] {name.value,ext,"", (int) day, (int) month, year, (int) hour, (int) minute}); } dir_count++; } else { @@ -1332,7 +1325,7 @@ public void call(String a) { WriteOut("%-16s",new Object[] {name.value}); } else { String numformat = FormatNumber(size.value); - WriteOut("%-8s %-3s %16s %02d-%02d-%04d %2d:%02d\n",new Object[] {name.value,ext,numformat,new Integer(day),new Integer(month),new Integer(year),new Integer(hour),new Integer(minute)}); + WriteOut("%-8s %-3s %16s %02d-%02d-%04d %2d:%02d\n",new Object[] {name.value,ext,numformat, (int) day, (int) month, year, (int) hour, (int) minute}); } file_count++; byte_count+=size.value; @@ -1344,14 +1337,14 @@ public void call(String a) { if (optP && (++p_count%(22*w_size))==0) { CMD_PAUSE.call(""); } - } while ( (ret=Dos_files.DOS_FindNext()) ); + } while ( (ret == Dos_files.DOS_FindNext()) ); if (optW) { if ((w_count%5)!=0) WriteOut("\n"); } if (!optB) { /* Show the summary of results */ String numformat = FormatNumber(byte_count); - WriteOut(Msg.get("SHELL_CMD_DIR_BYTES_USED"),new Object[] {new Long(file_count),numformat}); + WriteOut(Msg.get("SHELL_CMD_DIR_BYTES_USED"),new Object[] {file_count,numformat}); /*Bit8u*/short drive=dta.GetSearchDrive(); //TODO Free Space /*Bitu*/int free_space=1024*1024*100; @@ -1361,55 +1354,53 @@ public void call(String a) { free_space=bytes_sector.value*sectors_cluster.value*free_clusters.value; } numformat = FormatNumber(free_space); - WriteOut(Msg.get("SHELL_CMD_DIR_BYTES_FREE"),new Object[] {new Long(dir_count),numformat}); + WriteOut(Msg.get("SHELL_CMD_DIR_BYTES_FREE"),new Object[] {dir_count,numformat}); } Dos.dos.dta(save_dta); } }; - handler CMD_DELETE = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "DELETE")) return; - /* Command uses dta so set it to our internal dta */ - /*RealPt*/int save_dta=Dos.dos.dta(); - Dos.dos.dta((int)Dos.dos.tables.tempdta); - - String rem=ScanCMDRemain(args); - if (rem!=null) { - WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[] {rem}); - return; - } - /* If delete accept switches mind the space infront of them. See the dir /p code */ + final handler CMD_DELETE = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "DELETE")) return; + /* Command uses dta so set it to our internal dta */ + /*RealPt*/int save_dta=Dos.dos.dta(); + Dos.dos.dta(Dos.dos.tables.tempdta); - StringRef full = new StringRef(); - args.value = ExpandDot(args); - args.value = StripSpaces(args.value); - if (!Dos_files.DOS_Canonicalize(args.value,full)) { WriteOut(Msg.get("SHELL_ILLEGAL_PATH"));return; } - //TODO Maybe support confirmation for *.* like dos does. - boolean res=Dos_files.DOS_FindFirst(args.value,0xffff & ~Dos_system.DOS_ATTR_VOLUME); - if (!res) { - WriteOut(Msg.get("SHELL_CMD_DEL_ERROR"),new Object[] {args}); - Dos.dos.dta(save_dta); - return; - } - String path = full.value.substring(0, full.value.lastIndexOf("\\")); - StringRef name=new StringRef();/*Bit32u*/LongRef size=new LongRef(0);/*Bit16u*/IntRef time=new IntRef(0),date=new IntRef(0);/*Bit8u*/ShortRef attr=new ShortRef(0); - Dos_DTA dta = new Dos_DTA(Dos.dos.dta()); - while (res) { - dta.GetResult(name,size,date,time,attr); - if ((attr.value & (Dos_system.DOS_ATTR_DIRECTORY|Dos_system.DOS_ATTR_READ_ONLY))==0) { - if (!Dos_files.DOS_UnlinkFile(path+name.value)) WriteOut(Msg.get("SHELL_CMD_DEL_ERROR"),new Object[] {full.value}); - } - res=Dos_files.DOS_FindNext(); - } + String rem=ScanCMDRemain(args); + if (rem!=null) { + WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[] {rem}); + return; + } + /* If delete accept switches mind the space infront of them. See the dir /p code */ + + StringRef full = new StringRef(); + args.value = ExpandDot(args); + args.value = StripSpaces(args.value); + if (!Dos_files.DOS_Canonicalize(args.value,full)) { WriteOut(Msg.get("SHELL_ILLEGAL_PATH"));return; } + //TODO Maybe support confirmation for *.* like dos does. + boolean res=Dos_files.DOS_FindFirst(args.value,0xffff & ~Dos_system.DOS_ATTR_VOLUME); + if (!res) { + WriteOut(Msg.get("SHELL_CMD_DEL_ERROR"),new Object[] {args}); Dos.dos.dta(save_dta); + return; + } + String path = full.value.substring(0, full.value.lastIndexOf("\\")); + StringRef name=new StringRef();/*Bit32u*/LongRef size=new LongRef(0);/*Bit16u*/IntRef time=new IntRef(0),date=new IntRef(0);/*Bit8u*/ShortRef attr=new ShortRef(0); + Dos_DTA dta = new Dos_DTA(Dos.dos.dta()); + while (res) { + dta.GetResult(name,size,date,time,attr); + if ((attr.value & (Dos_system.DOS_ATTR_DIRECTORY|Dos_system.DOS_ATTR_READ_ONLY))==0) { + if (!Dos_files.DOS_UnlinkFile(path+name.value)) WriteOut(Msg.get("SHELL_CMD_DEL_ERROR"),new Object[] {full.value}); + } + res=Dos_files.DOS_FindNext(); } + Dos.dos.dta(save_dta); }; - handler CMD_ECHO = new handler() { + final handler CMD_ECHO = new handler() { public void call(String args) { - if (args.length()==0) { + if (args.isEmpty()) { if (echo) { WriteOut(Msg.get("SHELL_CMD_ECHO_ON"));} else { WriteOut(Msg.get("SHELL_CMD_ECHO_OFF"));} return; @@ -1434,246 +1425,236 @@ public void call(String args) { } else WriteOut(args+"\r\n"); } }; - handler CMD_EXIT = new handler() { + final handler CMD_EXIT = new handler() { public void call(String args) { StringRef a = new StringRef(args); if (HELP(a, "EXIT")) return; exit = true; } }; - handler CMD_MKDIR = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "MKDIR")) return; - args.value = StripSpaces(args.value); - String rem=ScanCMDRemain(args); - if (rem!=null) { - WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[] {rem}); - return; - } - if (!Dos_files.DOS_MakeDir(args.value)) { - WriteOut(Msg.get("SHELL_CMD_MKDIR_ERROR"),new Object[] {args}); - } + final handler CMD_MKDIR = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "MKDIR")) return; + args.value = StripSpaces(args.value); + String rem=ScanCMDRemain(args); + if (rem!=null) { + WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[] {rem}); + return; + } + if (!Dos_files.DOS_MakeDir(args.value)) { + WriteOut(Msg.get("SHELL_CMD_MKDIR_ERROR"),new Object[] {args}); } }; - handler CMD_CHDIR = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "CHDIR")) return; - args.value = StripSpaces(args.value); - if (args.value.length()==0) { + final handler CMD_CHDIR = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "CHDIR")) return; + args.value = StripSpaces(args.value); + if (args.value.isEmpty()) { + /*Bit8u*/char drive=(char)(Dos_files.DOS_GetDefaultDrive()+'A'); + StringRef dir = new StringRef(); + Dos_files.DOS_GetCurrentDir((short)0,dir); + WriteOut(drive +":\\"+dir+"\n"); + } else if(args.value.length() == 2 && args.value.charAt(1)==':') { + WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT"),new Object[]{args.value.toUpperCase()}); + } else if (!Dos_files.DOS_ChangeDir(args.value)) { + /* Changedir failed. Check if the filename is longer then 8 and/or contains spaces */ + + String temps=args.value.toUpperCase(); + temps = StringHelper.replace(temps, "/", "\\"); + String[] slash = StringHelper.split(temps, "\\"); + StringBuilder shortversion = new StringBuilder(); + + boolean space = false; + boolean toolong = false; + + for (int i=0;i=0) space = true; + if (slash[i].length()>8) toolong = true; + String s = slash[i]; + s = StringHelper.replace(s, " ", ""); + s = StringHelper.replace(s, ".", ""); + s = StringHelper.replace(s, "\"", ""); + if (s.length()>6) + s = s.substring(0, 6)+"~1"; + if (i>0) + shortversion.append("\\"); + shortversion.append(s); + } + if (space) {/* Contains spaces */ + WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT_2"),new Object[]{shortversion.toString()}); + } else if (toolong) { + WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT_2"),new Object[]{shortversion.toString()}); + } else { /*Bit8u*/char drive=(char)(Dos_files.DOS_GetDefaultDrive()+'A'); - StringRef dir = new StringRef(); - Dos_files.DOS_GetCurrentDir((short)0,dir); - WriteOut(String.valueOf(drive)+":\\"+dir+"\n"); - } else if(args.value.length() == 2 && args.value.charAt(1)==':') { - WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT"),new Object[]{args.value.toUpperCase()}); - } else if (!Dos_files.DOS_ChangeDir(args.value)) { - /* Changedir failed. Check if the filename is longer then 8 and/or contains spaces */ - - String temps=args.value.toUpperCase(); - temps = StringHelper.replace(temps, "/", "\\"); - String[] slash = StringHelper.split(temps, "\\"); - StringBuffer shortversion = new StringBuffer(); - - boolean space = false; - boolean toolong = false; - - for (int i=0;i=0) space = true; - if (slash[i].length()>8) toolong = true; - String s = slash[i]; - s = StringHelper.replace(s, " ", ""); - s = StringHelper.replace(s, ".", ""); - s = StringHelper.replace(s, "\"", ""); - if (s.length()>6) - s = s.substring(0, 6)+"~1"; - if (i>0) - shortversion.append("\\"); - shortversion.append(s); - } - if (space) {/* Contains spaces */ - WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT_2"),new Object[]{shortversion.toString()}); - } else if (toolong) { - WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT_2"),new Object[]{shortversion.toString()}); + if (drive=='Z') { + WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT_3")); } else { - /*Bit8u*/char drive=(char)(Dos_files.DOS_GetDefaultDrive()+'A'); - if (drive=='Z') { - WriteOut(Msg.get("SHELL_CMD_CHDIR_HINT_3")); - } else { - WriteOut(Msg.get("SHELL_CMD_CHDIR_ERROR"),new Object[]{args.value}); - } + WriteOut(Msg.get("SHELL_CMD_CHDIR_ERROR"),new Object[]{args.value}); } } } }; - handler CMD_RMDIR = new handler() { - public void call(String ar) { - StringRef args = new StringRef(ar); - if (HELP(args, "RMDIR")) return; - args.value = StripSpaces(args.value); - String rem=ScanCMDRemain(args); - if (rem!=null) { - WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[]{rem}); - return; - } - if (!Dos_files.DOS_RemoveDir(args.value)) { - WriteOut(Msg.get("SHELL_CMD_RMDIR_ERROR"),new Object[]{args}); - } + final handler CMD_RMDIR = ar -> { + StringRef args = new StringRef(ar); + if (HELP(args, "RMDIR")) return; + args.value = StripSpaces(args.value); + String rem=ScanCMDRemain(args); + if (rem!=null) { + WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[]{rem}); + return; + } + if (!Dos_files.DOS_RemoveDir(args.value)) { + WriteOut(Msg.get("SHELL_CMD_RMDIR_ERROR"),new Object[]{args}); } }; - handler CMD_SET = new handler() { - public void call(String ar) { - StringRef args = new StringRef(ar); - if (HELP(args, "SET")) return; - args.value = StripSpaces(args.value); - StringRef line = new StringRef(); - if (args.value.length() == 0) { - /* No command line show all environment lines */ - /*Bitu*/int count=GetEnvCount(); - for (/*Bitu*/int a=0;a { + StringRef args = new StringRef(ar); + if (HELP(args, "SET")) return; + args.value = StripSpaces(args.value); + StringRef line = new StringRef(); + if (args.value.isEmpty()) { + /* No command line show all environment lines */ + /*Bitu*/int count=GetEnvCount(); + for (/*Bitu*/int a=0;a % - } else { - int second = args.value.indexOf('%', p+1); - if(second<0) continue; - StringRef temp=new StringRef(); - if (GetEnvStr(args.value.substring(p+1, second),temp)) { - int pos = temp.value.indexOf('='); - if (pos<0) continue; - parsed.append(temp.value.substring(pos+1)); - } - p = second+1; + return; + } + int p=args.value.indexOf("="); + if (p<0) { + if (!GetEnvStr(args.value,line)) WriteOut(Msg.get("SHELL_CMD_SET_NOT_SET"),new Object[]{args.value}); + WriteOut(line.value+"\n"); + } else { + String key = args.value.substring(0, p); + p++; + /* parse p for envirionment variables */ + StringBuilder parsed = new StringBuilder(); + while (p % + } else { + int second = args.value.indexOf('%', p+1); + if(second<0) continue; + StringRef temp=new StringRef(); + if (GetEnvStr(args.value.substring(p+1, second),temp)) { + int pos = temp.value.indexOf('='); + if (pos<0) continue; + parsed.append(temp.value.substring(pos+1)); } + p = second+1; } - /* Try setting the variable */ - if (!SetEnv(key,parsed.toString())) { - WriteOut(Msg.get("SHELL_CMD_SET_OUT_OF_SPACE")); - } + } + /* Try setting the variable */ + if (!SetEnv(key,parsed.toString())) { + WriteOut(Msg.get("SHELL_CMD_SET_OUT_OF_SPACE")); } } }; - handler CMD_IF = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "IF")) return; - args.value = StripSpaces(args.value,'='); - boolean has_not=false; - - while (args.value.toUpperCase().startsWith("NOT") && args.value.length()>3) { - if (!StringHelper.isspace(args.value.charAt(3)) && args.value.charAt(3) != '=') break; - args.value = args.value.substring(3); //skip text - //skip more spaces - args.value=StripSpaces(args.value,'='); - has_not = !has_not; - } - - if(args.value.toUpperCase().startsWith("ERRORLEVEL")) { - args.value = args.value.substring(10); //skip text - //Strip spaces and == - args.value = StripSpaces(args.value,'='); - String word = StringHelper.StripWord(args); - if(!StringHelper.isdigit(word.charAt(0))) { - WriteOut(Msg.get("SHELL_CMD_IF_ERRORLEVEL_MISSING_NUMBER")); - return; - } + final handler CMD_IF = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "IF")) return; + args.value = StripSpaces(args.value,'='); + boolean has_not=false; + + while (args.value.toUpperCase().startsWith("NOT") && args.value.length()>3) { + if (!StringHelper.isspace(args.value.charAt(3)) && args.value.charAt(3) != '=') break; + args.value = args.value.substring(3); //skip text + //skip more spaces + args.value=StripSpaces(args.value,'='); + has_not = !has_not; + } - /*Bit8u*/int n = 0; - do { - n = n * 10 + (word.charAt(0) - '0'); - word = word.substring(1); - } while (word.length()>0 && StringHelper.isdigit(word.charAt(0))); - if(word.length()>0 && !StringHelper.isspace(word.charAt(0))) { - WriteOut(Msg.get("SHELL_CMD_IF_ERRORLEVEL_INVALID_NUMBER")); - return; - } - /* Read the error code from DOS */ - if ((Dos.dos.return_code>=n) ==(!has_not)) DoCommand(args.value); + if(args.value.toUpperCase().startsWith("ERRORLEVEL")) { + args.value = args.value.substring(10); //skip text + //Strip spaces and == + args.value = StripSpaces(args.value,'='); + String word = StringHelper.StripWord(args); + if(!StringHelper.isdigit(word.charAt(0))) { + WriteOut(Msg.get("SHELL_CMD_IF_ERRORLEVEL_MISSING_NUMBER")); return; } - if(args.value.toUpperCase().startsWith("EXIST ")) { - args.value = args.value.substring(6); //skip text - args.value = StripSpaces(args.value); - String word = StringHelper.StripWord(args); - if (word.length()==0) { - WriteOut(Msg.get("SHELL_CMD_IF_EXIST_MISSING_FILENAME")); - return; - } - - { /* DOS_FindFirst uses dta so set it to our internal dta */ - /*RealPt*/int save_dta=Dos.dos.dta(); - Dos.dos.dta((int)Dos.dos.tables.tempdta); - boolean ret=Dos_files.DOS_FindFirst(word,0xffff & ~Dos_system.DOS_ATTR_VOLUME); - Dos.dos.dta(save_dta); - if (ret==(!has_not)) DoCommand(args.value); - } + /*Bit8u*/int n = 0; + do { + n = n * 10 + (word.charAt(0) - '0'); + word = word.substring(1); + } while (!word.isEmpty() && StringHelper.isdigit(word.charAt(0))); + if(!word.isEmpty() && !StringHelper.isspace(word.charAt(0))) { + WriteOut(Msg.get("SHELL_CMD_IF_ERRORLEVEL_INVALID_NUMBER")); return; } + /* Read the error code from DOS */ + if ((Dos.dos.return_code>=n) ==(!has_not)) DoCommand(args.value); + return; + } - /* Normal if string compare */ - - String word = ""; - // first word is until space or = - while (args.value.length()>0 && !StringHelper.isspace(args.value.charAt(0)) && args.value.charAt(0) != '=') { - word+=args.value.substring(0, 1); - args.value = args.value.substring(1); - } - - // scan for = - while (args.value.length()>0 && args.value.charAt(0) != '=') { - args.value = args.value.substring(1); - } - // check for == - if (args.value.length()<2 || args.value.charAt(1) != '=') { - SyntaxError(); + if(args.value.toUpperCase().startsWith("EXIST ")) { + args.value = args.value.substring(6); //skip text + args.value = StripSpaces(args.value); + String word = StringHelper.StripWord(args); + if (word.isEmpty()) { + WriteOut(Msg.get("SHELL_CMD_IF_EXIST_MISSING_FILENAME")); return; } - args.value = args.value.substring(2); - args.value = StripSpaces(args.value,'='); - String word2 = ""; - // second word is until space or = - while (args.value.length()>0 && !StringHelper.isspace(args.value.charAt(0)) && args.value.charAt(0) != '=') { - word2+=args.value.substring(0, 1); - args.value = args.value.substring(1); + { /* DOS_FindFirst uses dta so set it to our internal dta */ + /*RealPt*/int save_dta=Dos.dos.dta(); + Dos.dos.dta(Dos.dos.tables.tempdta); + boolean ret=Dos_files.DOS_FindFirst(word,0xffff & ~Dos_system.DOS_ATTR_VOLUME); + Dos.dos.dta(save_dta); + if (ret==(!has_not)) DoCommand(args.value); } + return; + } - if (args.value.length()>0) { - args.value = StripSpaces(args.value,'='); + /* Normal if string compare */ - if (word.equals(word2)==(!has_not)) DoCommand(args.value); - } + StringBuilder word = new StringBuilder(); + // first word is until space or = + while (!args.value.isEmpty() && !StringHelper.isspace(args.value.charAt(0)) && args.value.charAt(0) != '=') { + word.append(args.value.substring(0, 1)); + args.value = args.value.substring(1); + } + + // scan for = + while (!args.value.isEmpty() && args.value.charAt(0) != '=') { + args.value = args.value.substring(1); + } + // check for == + if (args.value.length()<2 || args.value.charAt(1) != '=') { + SyntaxError(); + return; + } + args.value = args.value.substring(2); + args.value = StripSpaces(args.value,'='); + + StringBuilder word2 = new StringBuilder(); + // second word is until space or = + while (!args.value.isEmpty() && !StringHelper.isspace(args.value.charAt(0)) && args.value.charAt(0) != '=') { + word2.append(args.value.substring(0, 1)); + args.value = args.value.substring(1); + } + + if (!args.value.isEmpty()) { + args.value = StripSpaces(args.value,'='); + + if (word.toString().equals(word2.toString())==(!has_not)) DoCommand(args.value); } }; - handler CMD_GOTO = new handler() { + final handler CMD_GOTO = new handler() { public void call(String a) { StringRef args = new StringRef(a); if (HELP(args, "GOTO")) return; args.value=StripSpaces(args.value); if (bf==null) return; - if (args.value.length()>0 && (args.value.charAt(0)==':')) args.value = args.value.substring(1); + if (!args.value.isEmpty() && (args.value.charAt(0)==':')) args.value = args.value.substring(1); //label ends at the first space for (int i=0;i { + StringRef args = new StringRef(a); + if (HELP(args, "TIME")) return; + if(ScanCMDBool(args,"h")) { + // synchronize date with host parameter + Calendar calendar = Calendar.getInstance(); + + // reg_ah=0x2d; // set system time TODO + // CALLBACK_RunRealInt(0x21); + long ticks=(long)(((double)(calendar.get(Calendar.HOUR_OF_DAY)*3600+ + calendar.get(Calendar.MINUTE)*60+ + calendar.get(Calendar.SECOND)))*18.206481481); + Memory.mem_writed(Bios.BIOS_TIMER, (int)ticks); + return; + } + boolean timeonly = ScanCMDBool(args,"t"); + + CPU_Regs.reg_eax.high(0x2c); // get system time + Callback.CALLBACK_RunRealInt(0x21); + /* + reg_dl= // 1/100 seconds + reg_dh= // seconds + reg_cl= // minutes + reg_ch= // hours + */ + if(timeonly) { + WriteOut(StringHelper.sprintf("%2d:%02d\n", new Object[] {CPU_Regs.reg_ecx.high(), CPU_Regs.reg_ecx.low()})); + } else { + WriteOut(Msg.get("SHELL_CMD_TIME_NOW")); + WriteOut(StringHelper.sprintf("%2d:%02d:%02d,%02d\n", new Object[] {CPU_Regs.reg_ecx.high(), CPU_Regs.reg_ecx.low(), CPU_Regs.reg_edx.high(), CPU_Regs.reg_edx.low()})); } }; - handler CMD_TYPE = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "TYPE")) return; - args.value = StripSpaces(args.value); - if (args.value.length()==0) { - WriteOut(Msg.get("SHELL_SYNTAXERROR")); + final handler CMD_TYPE = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "TYPE")) return; + args.value = StripSpaces(args.value); + if (args.value.isEmpty()) { + WriteOut(Msg.get("SHELL_SYNTAXERROR")); + return; + } + /*Bit16u*/IntRef handle=new IntRef(0); + do { + String word = StringHelper.StripWord(args); + if (!Dos_files.DOS_OpenFile(word, 0, handle)) { + WriteOut(Msg.get("SHELL_CMD_FILE_NOT_FOUND"), new Object[]{word}); return; } - /*Bit16u*/IntRef handle=new IntRef(0); - while (true) { - String word=StringHelper.StripWord(args); - if (!Dos_files.DOS_OpenFile(word,0,handle)) { - WriteOut(Msg.get("SHELL_CMD_FILE_NOT_FOUND"),new Object[]{word}); - return; - } - /*Bit16u*/IntRef n=new IntRef(0);/*Bit8u*/byte[] c=new byte[1]; - do { - n.value=1; - Dos_files.DOS_ReadFile(handle.value,c,n); - Dos_files.DOS_WriteFile(Dos_files.STDOUT,c,n); - } while (n.value>0); - Dos_files.DOS_CloseFile(handle.value); - if (args.value.length()==0) break; - } - } + /*Bit16u*/ + IntRef n = new IntRef(0);/*Bit8u*/ + byte[] c = new byte[1]; + do { + n.value = 1; + Dos_files.DOS_ReadFile(handle.value, c, n); + Dos_files.DOS_WriteFile(Dos_files.STDOUT, c, n); + } while (n.value > 0); + Dos_files.DOS_CloseFile(handle.value); + } while (!args.value.isEmpty()); }; - handler CMD_REM = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - HELP(args, "REM"); - } + final handler CMD_REM = a -> { + StringRef args = new StringRef(a); + HELP(args, "REM"); }; - handler CMD_RENAME = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "RENAME")) return; - args.value = StripSpaces(args.value); - if(args.value.length()==0) {SyntaxError();return;} - if(args.value.indexOf('*')>=0 || args.value.indexOf('?')>=0 ) { WriteOut(Msg.get("SHELL_CMD_NO_WILD"));return;} - String arg1=StringHelper.StripWord(args); - int slash = arg1.lastIndexOf('\\'); - if(slash>=0) { - /* If directory specified (crystal caves installer) - * rename from c:\X : rename c:\abc.exe abc.shr. - * File must appear in C:\ */ - - String dir_source = arg1.substring(0, slash); - slash++; - - if(dir_source.length() == 2 && dir_source.charAt(1) == ':') - dir_source+="\\"; //X: add slash - - StringRef dir_current = new StringRef(); - Dos_files.DOS_GetCurrentDir((short)0,dir_current); - if(!Dos_files.DOS_ChangeDir(dir_source)) { - WriteOut(Msg.get("SHELL_ILLEGAL_PATH")); - return; - } - Dos_files.DOS_Rename(arg1.substring(slash),args.value); - Dos_files.DOS_ChangeDir(dir_current.value); - } else { - Dos_files.DOS_Rename(arg1,args.value); + final handler CMD_RENAME = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "RENAME")) return; + args.value = StripSpaces(args.value); + if(args.value.isEmpty()) {SyntaxError();return;} + if(args.value.indexOf('*')>=0 || args.value.indexOf('?')>=0 ) { WriteOut(Msg.get("SHELL_CMD_NO_WILD"));return;} + String arg1=StringHelper.StripWord(args); + int slash = arg1.lastIndexOf('\\'); + if(slash>=0) { + /* If directory specified (crystal caves installer) + * rename from c:\X : rename c:\abc.exe abc.shr. + * File must appear in C:\ */ + + String dir_source = arg1.substring(0, slash); + slash++; + + if(dir_source.length() == 2 && dir_source.charAt(1) == ':') + dir_source+="\\"; //X: add slash + + StringRef dir_current = new StringRef(); + Dos_files.DOS_GetCurrentDir((short)0,dir_current); + if(!Dos_files.DOS_ChangeDir(dir_source)) { + WriteOut(Msg.get("SHELL_ILLEGAL_PATH")); + return; } + Dos_files.DOS_Rename(arg1.substring(slash),args.value); + Dos_files.DOS_ChangeDir(dir_current.value); + } else { + Dos_files.DOS_Rename(arg1,args.value); } }; - handler CMD_CALL = new handler() { + final handler CMD_CALL = new handler() { public void call(String a) { StringRef args = new StringRef(a); if (HELP(args, "CALL")) return; @@ -1809,236 +1782,228 @@ void SyntaxError() { WriteOut(Msg.get("SHELL_SYNTAXERROR")); } - handler CMD_PAUSE = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "PAUSE")) return; - WriteOut(Msg.get("SHELL_CMD_PAUSE")); - /*Bit8u*/byte[] c=new byte[1];/*Bit16u*/IntRef n=new IntRef(1); - Dos_files.DOS_ReadFile(Dos_files.STDIN,c,n); - } + final handler CMD_PAUSE = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "PAUSE")) return; + WriteOut(Msg.get("SHELL_CMD_PAUSE")); + /*Bit8u*/byte[] c=new byte[1];/*Bit16u*/IntRef n=new IntRef(1); + Dos_files.DOS_ReadFile(Dos_files.STDIN,c,n); }; - handler CMD_SUBST = new handler() { - public void call(String a) { - /* If more that one type can be substed think of something else - * E.g. make basedir member dos_drive instead of localdrive - */ - StringRef args = new StringRef(a); - if (HELP(args, "SUBST")) return; - String mountstring; - - mountstring = "MOUNT "; - args.value = StripSpaces(args.value); - String arg; - CommandLine command = new CommandLine(null,args.value); - - if (command.GetCount() != 2) { - WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); - return; - } + final handler CMD_SUBST = a -> { + /* If more that one type can be substed think of something else + * E.g. make basedir member dos_drive instead of localdrive + */ + StringRef args = new StringRef(a); + if (HELP(args, "SUBST")) return; + String mountstring; + + mountstring = "MOUNT "; + args.value = StripSpaces(args.value); + String arg; + CommandLine command = new CommandLine(null,args.value); + + if (command.GetCount() != 2) { + WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); + return; + } - arg = command.FindCommand(1); - if( (arg.length()>1) && arg.charAt(1) !=':') { - WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); - return; - } - arg = command.FindCommand(2); - String temp_str=args.value.substring(0,1).toUpperCase(); - if (arg.toUpperCase().equals("/D" )) { - if(Dos_files.Drives[temp_str.charAt(0)-'A']==null ) { - WriteOut(Msg.get("SHELL_CMD_SUBST_NO_REMOVE")); - return; - } - mountstring+="-u "; - mountstring+=temp_str; - ParseLine(mountstring); - return; - } - if(Dos_files.Drives[temp_str.charAt(0)-'A']!=null ) { - //targetdrive in use - WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); + arg = command.FindCommand(1); + if( (arg.length()>1) && arg.charAt(1) !=':') { + WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); + return; + } + arg = command.FindCommand(2); + String temp_str=args.value.substring(0,1).toUpperCase(); + if (arg.equalsIgnoreCase("/D" )) { + if(Dos_files.Drives[temp_str.charAt(0)-'A']==null ) { + WriteOut(Msg.get("SHELL_CMD_SUBST_NO_REMOVE")); return; } + mountstring+="-u "; mountstring+=temp_str; - mountstring+=" "; + ParseLine(mountstring); + return; + } + if(Dos_files.Drives[temp_str.charAt(0)-'A']!=null ) { + //targetdrive in use + WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); + return; + } + mountstring+=temp_str; + mountstring+=" "; - /*Bit8u*/ShortRef drive=new ShortRef(0);StringRef fulldir = new StringRef(); - if (!Dos_files.DOS_MakeName(arg,fulldir,drive)) { - WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); - return; - } + /*Bit8u*/ShortRef drive=new ShortRef(0);StringRef fulldir = new StringRef(); + if (Dos_files.DOS_MakeName(arg, fulldir, drive)) { + WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); + return; + } - if(!(Dos_files.Drives[drive.value] instanceof Drive_local)) { - WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); - return; - } - Drive_local ldp=(Drive_local)Dos_files.Drives[drive.value]; - StringRef newname=new StringRef(ldp.basedir); - newname.value+=fulldir.value; - //CROSS_FILENAME(newname); - ldp.dirCache.ExpandName(newname); - mountstring+="\""; - mountstring+=newname.value; - mountstring+="\""; - ParseLine(mountstring); + if(!(Dos_files.Drives[drive.value] instanceof Drive_local)) { + WriteOut(Msg.get("SHELL_CMD_SUBST_FAILURE")); + return; } + Drive_local ldp=(Drive_local)Dos_files.Drives[drive.value]; + StringRef newname=new StringRef(ldp.basedir); + newname.value+=fulldir.value; + //CROSS_FILENAME(newname); + ldp.dirCache.ExpandName(newname); + mountstring+="\""; + mountstring+=newname.value; + mountstring+="\""; + ParseLine(mountstring); }; - handler CMD_LOADHIGH = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "LOADHIGH")) return; - /*Bit16u*/int umb_start=Dos.dos_infoblock.GetStartOfUMBChain(); - /*Bit8u*/short umb_flag=Dos.dos_infoblock.GetUMBChainState(); - /*Bit8u*/short old_memstrat=(/*Bit8u*/short)(Dos_memory.DOS_GetMemAllocStrategy()&0xff); - if (umb_start==0x9fff) { - if ((umb_flag&1)==0) Dos_memory.DOS_LinkUMBsToMemChain(1); - Dos_memory.DOS_SetMemAllocStrategy(0x80); // search in UMBs first - ParseLine(args.value); - /*Bit8u*/short current_umb_flag=Dos.dos_infoblock.GetUMBChainState(); - if ((current_umb_flag&1)!=(umb_flag&1)) Dos_memory.DOS_LinkUMBsToMemChain(umb_flag); - Dos_memory.DOS_SetMemAllocStrategy(old_memstrat); // restore strategy - } else ParseLine(args.value); - } + final handler CMD_LOADHIGH = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "LOADHIGH")) return; + /*Bit16u*/int umb_start=Dos.dos_infoblock.GetStartOfUMBChain(); + /*Bit8u*/short umb_flag=Dos.dos_infoblock.GetUMBChainState(); + /*Bit8u*/short old_memstrat=(/*Bit8u*/short)(Dos_memory.DOS_GetMemAllocStrategy()&0xff); + if (umb_start==0x9fff) { + if ((umb_flag&1)==0) Dos_memory.DOS_LinkUMBsToMemChain(1); + Dos_memory.DOS_SetMemAllocStrategy(0x80); // search in UMBs first + ParseLine(args.value); + /*Bit8u*/short current_umb_flag=Dos.dos_infoblock.GetUMBChainState(); + if ((current_umb_flag&1)!=(umb_flag&1)) Dos_memory.DOS_LinkUMBsToMemChain(umb_flag); + Dos_memory.DOS_SetMemAllocStrategy(old_memstrat); // restore strategy + } else ParseLine(args.value); }; static private class DefaultChoice extends Thread { int timeout = 0; byte[] choice; - Object mutex = new Object(); + final Object mutex = new Object(); public void run() { synchronized(mutex) { try { - mutex.wait(timeout*1000); + mutex.wait(timeout* 1000L); Bios_keyboard.BIOS_AddKeyToBuffer(choice[0]); } catch (InterruptedException e) { + throw new RuntimeException(e); } } } } - handler CMD_CHOICE = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "CHOICE")) return; - final String defchoice = "yn"; - String rem = null; - boolean optN = ScanCMDBool(args,"N"); - boolean optS = ScanCMDBool(args,"S"); //Case-sensitive matching - boolean timeout = false; - String timeoutChoice=""; - int timeoutTime = -1; - - if (args.value.indexOf("/T")>=0) { - int pos1 = args.value.indexOf("/T"); - int pos2 = args.value.indexOf(" ", pos1); - String command = args.value.substring(pos1+2, pos2); - args.value = args.value.substring(0, pos1)+args.value.substring(pos2+1); - if (command.startsWith(":")) { - command = command.substring(1); - } - int pos3=command.indexOf(","); - if (pos3>=0) { - timeoutChoice = command.substring(0,pos3); - try { - timeoutTime = Integer.parseInt(command.substring(pos3+1)); - timeout = true; - } catch (Exception e) { - } + final handler CMD_CHOICE = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "CHOICE")) return; + final String defchoice = "yn"; + String rem = null; + boolean optN = ScanCMDBool(args,"N"); + boolean optS = ScanCMDBool(args,"S"); //Case-sensitive matching + boolean timeout = false; + String timeoutChoice=""; + int timeoutTime = -1; + + if (args.value.contains("/T")) { + int pos1 = args.value.indexOf("/T"); + int pos2 = args.value.indexOf(" ", pos1); + String command = args.value.substring(pos1+2, pos2); + args.value = args.value.substring(0, pos1)+args.value.substring(pos2+1); + if (command.startsWith(":")) { + command = command.substring(1); + } + int pos3=command.indexOf(","); + if (pos3>=0) { + timeoutChoice = command.substring(0,pos3); + try { + timeoutTime = Integer.parseInt(command.substring(pos3+1)); + timeout = true; + } catch (Exception e) { + throw new RuntimeException(e); } } - //ScanCMDBool(args,"T"); //Default Choice after timeout - if (args.value.length()>0) { - args.value = StripSpaces(args.value); - rem = ScanCMDRemain(args); - if (rem!=null && rem.toLowerCase().charAt(0) != 'c') { - WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[]{rem}); - return; - } - if (rem != null && args.value.substring(1).startsWith(rem)) args.value = args.value.substring(rem.length()+1); - if (rem != null) rem = rem.substring(2); - if (rem != null && rem.charAt(0)==':') rem = rem.substring(1); /* optional : after /c */ - } - if (rem==null || rem.length()==0) rem = defchoice; /* No choices specified use YN */ - if(!optS) rem = rem.toUpperCase(); /* When in no case-sensitive mode. make everything upcase */ - if(args.value.length()>0) { - args.value = StripSpaces(args.value); - int argslen = args.value.length(); - if(argslen>1 && args.value.charAt(0) == '"' && args.value.charAt(argslen-1) =='"') { - args.value = args.value.substring(1, argslen-1); - } - WriteOut(args.value); - } - /* Show question prompt of the form [a,b]? where a b are the choice values */ - if (!optN) { - if(args.value.length()>0) WriteOut(" "); - WriteOut("["); - int len = rem.length(); - for(int t = 1; t < len; t++) { - WriteOut(String.valueOf(rem.charAt(t-1))+","); - } - WriteOut(String.valueOf(rem.charAt(len-1))+"]?"); + } + //ScanCMDBool(args,"T"); //Default Choice after timeout + if (!args.value.isEmpty()) { + args.value = StripSpaces(args.value); + rem = ScanCMDRemain(args); + if (rem!=null && rem.toLowerCase().charAt(0) != 'c') { + WriteOut(Msg.get("SHELL_ILLEGAL_SWITCH"),new Object[]{rem}); + return; } + if (rem != null && args.value.substring(1).startsWith(rem)) args.value = args.value.substring(rem.length()+1); + if (rem != null) rem = rem.substring(2); + if (rem != null && rem.charAt(0)==':') rem = rem.substring(1); /* optional : after /c */ + } + if (rem==null || rem.isEmpty()) rem = defchoice; /* No choices specified use YN */ + if(!optS) rem = rem.toUpperCase(); /* When in no case-sensitive mode. make everything upcase */ + if(!args.value.isEmpty()) { + args.value = StripSpaces(args.value); + int argslen = args.value.length(); + if(argslen>1 && args.value.charAt(0) == '"' && args.value.charAt(argslen-1) =='"') { + args.value = args.value.substring(1, argslen-1); + } + WriteOut(args.value); + } + /* Show question prompt of the form [a,b]? where a b are the choice values */ + if (!optN) { + if(!args.value.isEmpty()) WriteOut(" "); + WriteOut("["); + int len = rem.length(); + for(int t = 1; t < len; t++) { + WriteOut(rem.charAt(t - 1) +","); + } + WriteOut(rem.charAt(len - 1) +"]?"); + } - /*Bit16u*/IntRef n=new IntRef(1); - byte[] c = new byte[1]; - int pos; - do { - DefaultChoice defaultChoice = null; - if (timeout) { - defaultChoice = new DefaultChoice(); - defaultChoice.choice = timeoutChoice.getBytes(); - defaultChoice.timeout = timeoutTime; - defaultChoice.start(); - } - Dos_files.DOS_ReadFile(Dos_files.STDIN,c,n); - if (defaultChoice != null) { - defaultChoice.interrupt(); - try {defaultChoice.join(1000);} catch (Exception e) {} + /*Bit16u*/IntRef n=new IntRef(1); + byte[] c = new byte[1]; + int pos; + do { + DefaultChoice defaultChoice = null; + if (timeout) { + defaultChoice = new DefaultChoice(); + defaultChoice.choice = timeoutChoice.getBytes(); + defaultChoice.timeout = timeoutTime; + defaultChoice.start(); + } + Dos_files.DOS_ReadFile(Dos_files.STDIN,c,n); + if (defaultChoice != null) { + defaultChoice.interrupt(); + try {defaultChoice.join(1000);} catch (Exception e) { + throw new RuntimeException(e); } - if (optS) - pos = rem.indexOf((char)c[0]); - else - pos = rem.indexOf(new String(c).toUpperCase()); - } while (pos<0); - c = optS?c:new String(c).toUpperCase().getBytes(); - Dos_files.DOS_WriteFile(Dos_files.STDOUT,c, n); - Dos.dos.return_code = (short)(pos+1); - } + } + if (optS) + pos = rem.indexOf((char)c[0]); + else + pos = rem.indexOf(new String(c).toUpperCase()); + } while (pos<0); + c = optS?c:new String(c).toUpperCase().getBytes(); + Dos_files.DOS_WriteFile(Dos_files.STDOUT,c, n); + Dos.dos.return_code = (short)(pos+1); }; - handler CMD_ATTRIB = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "ATTRIB")) return; - // No-Op for now. + final handler CMD_ATTRIB = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "ATTRIB")) { } + // No-Op for now. }; - handler CMD_PATH = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "PATH")) return; - if(args.value.length()>0){ - String pathstring="set PATH="; - while(args.value.length()>0 && (args.value.charAt(0)=='='|| args.value.charAt(0)==' ')) - args.value=args.value.substring(1); - pathstring+=args.value; - ParseLine(pathstring); - return; + final handler CMD_PATH = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "PATH")) return; + if(!args.value.isEmpty()){ + String pathstring="set PATH="; + while(!args.value.isEmpty() && (args.value.charAt(0)=='='|| args.value.charAt(0)==' ')) + args.value=args.value.substring(1); + pathstring+=args.value; + ParseLine(pathstring); + } else { + StringRef line = new StringRef(); + if(GetEnvStr("PATH",line)) { + WriteOut(line.value); } else { - StringRef line = new StringRef(); - if(GetEnvStr("PATH",line)) { - WriteOut(line.value); - } else { - WriteOut("PATH=(null)"); - } + WriteOut("PATH=(null)"); } } }; - handler CMD_SHIFT = new handler() { + final handler CMD_SHIFT = new handler() { public void call(String a) { StringRef args = new StringRef(a); if (HELP(args, "SHIFT")) return; @@ -2046,25 +2011,23 @@ public void call(String a) { } }; - handler CMD_VER = new handler() { - public void call(String a) { - StringRef args = new StringRef(a); - if (HELP(args, "VER")) return; - if (args.value.length()>0) { - String word = StringHelper.StripWord(args); - if(!word.equalsIgnoreCase("set")) return; - word = StringHelper.StripWord(args); - try { - Dos.dos.version.major = (byte)Integer.parseInt(word); - Dos.dos.version.minor = (byte)Integer.parseInt(args.value); - } catch (Exception e) { - e.printStackTrace(); - } - } else WriteOut(Msg.get("SHELL_CMD_VER_VER"),new Object[]{Config.VERSION,new Integer(Dos.dos.version.major),new Integer(Dos.dos.version.minor)}); - } + final handler CMD_VER = a -> { + StringRef args = new StringRef(a); + if (HELP(args, "VER")) return; + if (!args.value.isEmpty()) { + String word = StringHelper.StripWord(args); + if(!word.equalsIgnoreCase("set")) return; + word = StringHelper.StripWord(args); + try { + Dos.dos.version.major = (byte)Integer.parseInt(word); + Dos.dos.version.minor = (byte)Integer.parseInt(args.value); + } catch (Exception e) { + e.printStackTrace(); + } + } else WriteOut(Msg.get("SHELL_CMD_VER_VER"),new Object[]{Config.VERSION, (int) Dos.dos.version.major, (int) Dos.dos.version.minor}); }; - SHELL_Cmd[] cmd_list={ + final SHELL_Cmd[] cmd_list={ new SHELL_Cmd( "DIR", 0, CMD_DIR, "SHELL_CMD_DIR_HELP"), new SHELL_Cmd( "CHDIR", 1, CMD_CHDIR, "SHELL_CMD_CHDIR_HELP"), new SHELL_Cmd( "ATTRIB", 1, CMD_ATTRIB, "SHELL_CMD_ATTRIB_HELP"), diff --git a/jdosbox/src/main/java/jdos/shell/SHELL_Cmd.java b/jdosbox/src/main/java/jdos/shell/SHELL_Cmd.java index e399ee19..628c1525 100644 --- a/jdosbox/src/main/java/jdos/shell/SHELL_Cmd.java +++ b/jdosbox/src/main/java/jdos/shell/SHELL_Cmd.java @@ -7,8 +7,8 @@ public SHELL_Cmd(String name, int flags, Dos_shell.handler handler, String help) this.handler = handler; this.help = help; } - public String name; /* Command name*/ - public /*Bit32u*/int flags; /* Flags about the command */ - public Dos_shell.handler handler; /* Handler for this command */ - public String help; /* String with command help */ + public final String name; /* Command name*/ + public final /*Bit32u*/int flags; /* Flags about the command */ + public final Dos_shell.handler handler; /* Handler for this command */ + public final String help; /* String with command help */ } diff --git a/jdosbox/src/main/java/jdos/shell/Shell.java b/jdosbox/src/main/java/jdos/shell/Shell.java index 6478399b..45897a52 100644 --- a/jdosbox/src/main/java/jdos/shell/Shell.java +++ b/jdosbox/src/main/java/jdos/shell/Shell.java @@ -27,7 +27,7 @@ public class Shell { * remove things from the environment */ public static Program first_shell; - static private Callback.Handler shellstop_handler = new Callback.Handler() { + static private final Callback.Handler shellstop_handler = new Callback.Handler() { public String getName() { return "Shell.shellstop_handler"; } @@ -36,15 +36,11 @@ public String getName() { } }; - static private Program.PROGRAMS_Main SHELL_ProgramStart = new Program.PROGRAMS_Main() { - public Program call() { - return new Dos_shell(); - } - }; + static private final Program.PROGRAMS_Main SHELL_ProgramStart = () -> new Dos_shell(); private static class AUTOEXEC extends Module_base { - private AutoexecObject[] autoexec = new AutoexecObject[17]; - private AutoexecObject autoexec_echo = new AutoexecObject(); + private final AutoexecObject[] autoexec = new AutoexecObject[17]; + private final AutoexecObject autoexec_echo = new AutoexecObject(); public AUTOEXEC(Section configuration) { super(configuration); for (int i=0;i=0) { + if(name.contains(".BAT")) { if(secure) autoexec[14].Install("z:\\config.com -securemode"); /* BATch files are called else exit will not work */ autoexec[15].Install("CALL " + name); if(addexit) autoexec[16].Install("exit"); - } else if(name.indexOf(".IMG")>=0 || name.indexOf(".IMA")>=0) { + } else if(name.contains(".IMG") || name.contains(".IMA")) { //No secure mode here as boot is destructive and enabling securemode disables boot /* Boot image files */ autoexec[15].Install("BOOT " + orig); - } else if(name.indexOf(".ISO") != 0 || name.indexOf(".CUE")>=0) { + } else if(name.indexOf(".ISO") != 0 || name.contains(".CUE")) { /* imgmount CD image files */ /* securemode gets a different number from the previous branches! */ autoexec[14].Install("IMGMOUNT D \"" + orig + "\" -t iso"); @@ -160,14 +156,14 @@ public AUTOEXEC(Section configuration) { static AUTOEXEC test; - public static Section.SectionFunction AUTOEXEC_Destroy = new Section.SectionFunction() { + public static final Section.SectionFunction AUTOEXEC_Destroy = new Section.SectionFunction() { public void call(Section section) { test = null; AutoexecObject.Shutdown(); } }; - public static Section.SectionFunction AUTOEXEC_Init = new Section.SectionFunction() { + public static final Section.SectionFunction AUTOEXEC_Init = new Section.SectionFunction() { public void call(Section section) { test = new AUTOEXEC(section); section.AddDestroyFunction(AUTOEXEC_Destroy,false); @@ -179,7 +175,7 @@ public void call(Section section) { static private final String full_name="Z:\\COMMAND.COM"; static private final String init_line="/INIT AUTOEXEC.BAT"; - public static Config.StartFunction SHELL_Init = new Config.StartFunction() { + public static final Config.StartFunction SHELL_Init = new Config.StartFunction() { public void call() { Msg.add("SHELL_ILLEGAL_PATH","Illegal Path.\n"); Msg.add("SHELL_CMD_HELP","If you want a list of all supported commands type \033[33;1mhelp /all\033[0m .\nA short list of the most often used commands:\n"); @@ -343,25 +339,30 @@ public void call() { Memory.real_writed(0,0x23*4,(psp_seg<<16)); /* Setup MCBs */ - Dos_MCB pspmcb=new Dos_MCB((/*Bit16u*/int)(psp_seg-1)); + /*Bit16u*/ + Dos_MCB pspmcb=new Dos_MCB(psp_seg-1); pspmcb.SetPSPSeg(psp_seg); // MCB of the command shell psp pspmcb.SetSize(0x10+2); pspmcb.SetType((short)0x4d); - Dos_MCB envmcb=new Dos_MCB((/*Bit16u*/int)(env_seg-1)); + /*Bit16u*/ + Dos_MCB envmcb=new Dos_MCB(env_seg-1); envmcb.SetPSPSeg(psp_seg); // MCB of the command shell environment envmcb.SetSize(Dos.DOS_MEM_START-env_seg); envmcb.SetType((short)0x4d); /* Setup environment */ /*PhysPt*/int env_write=Memory.PhysMake(env_seg,0); - Memory.MEM_BlockWrite(env_write,path_string,(/*Bitu*/int)(path_string.length()+1)); + /*Bitu*/ + Memory.MEM_BlockWrite(env_write,path_string, path_string.length()+1); env_write += path_string.length()+1; - Memory.MEM_BlockWrite(env_write,comspec_string,(/*Bitu*/int)(comspec_string.length()+1)); + /*Bitu*/ + Memory.MEM_BlockWrite(env_write,comspec_string, comspec_string.length()+1); env_write += comspec_string.length()+1; Memory.mem_writeb(env_write++,0); Memory.mem_writew(env_write,1); env_write+=2; - Memory.MEM_BlockWrite(env_write,full_name,(/*Bitu*/int)(full_name.length()+1)); + /*Bitu*/ + Memory.MEM_BlockWrite(env_write,full_name, full_name.length()+1); Dos_PSP psp=new Dos_PSP(psp_seg); psp.MakeNew(0); @@ -390,7 +391,7 @@ public void call() { Memory.MEM_BlockWrite(Memory.PhysMake(psp_seg,128),tail,128); /* Setup internal DOS Variables */ - Dos.dos.dta((int)Memory.RealMake(psp_seg,0x80)); + Dos.dos.dta(Memory.RealMake(psp_seg,0x80)); Dos.dos.psp(psp_seg); diff --git a/jdosbox/src/main/java/jdos/util/FileHelper.java b/jdosbox/src/main/java/jdos/util/FileHelper.java index c82ebbef..f2a3f113 100644 --- a/jdosbox/src/main/java/jdos/util/FileHelper.java +++ b/jdosbox/src/main/java/jdos/util/FileHelper.java @@ -13,19 +13,19 @@ public static String resolve_path(String path) { return path; } - public static boolean deleteFile(File path) { + public static void deleteFile(File path) { if( path.exists() ) { if (path.isDirectory()) { File[] files = path.listFiles(); - for(int i=0; i=data.length) return -1; return data[pos++]; } - public int read(byte[] b, int off, int len) throws IOException { + public int read(byte[] b, int off, int len) { if (b == null) throw new NullPointerException(); if (off<0 || off+len>=data.length) @@ -55,11 +57,11 @@ public int read(byte[] b, int off, int len) throws IOException { return len; } - public int read(byte[] b) throws IOException { + public int read(byte[] b) { return read(b, 0, b.length); } - public int skipBytes(int n) throws IOException { + public int skipBytes(int n) { if (pos>=data.length) return 0; if (n+pos>data.length) @@ -97,18 +99,18 @@ public void seek(long p) throws IOException { pos=(int)p; } - public long length() throws IOException { + public long length() { return data.length; } public void setLength(long newLength) throws IOException { throw new IOException("Not Supported"); } - - public void close() throws IOException { + + public void close() { } - public long getFilePointer() throws IOException { + public long getFilePointer() { return pos; } @@ -116,12 +118,12 @@ public long lastModified() { return 0; } } - + static private class JarIO implements FileIO { - private String path; + private final String path; private int pos=0; private int real_pos=0; - private int mode; + private final int mode; private int len; private InputStream is; final private int cacheShift = 13; @@ -131,8 +133,7 @@ static private class JarIO implements FileIO { final private LRUCache cache = new LRUCache(32); // 256k private byte[][] writeData = null; - private int writePageCount; - + private InputStream getIS() { return Dosbox.class.getResourceAsStream(path); } @@ -143,7 +144,7 @@ public JarIO(String path, int mode) { is = getIS(); try { len = is.available(); - } catch (Exception e) { + } catch (Exception ignored) { } } private byte[] fill(int offset) throws IOException { @@ -158,7 +159,7 @@ private byte[] fill(int offset) throws IOException { skip = offset; } while (skip>0) { - skip-=is.skip(skip); + skip-= (int) is.skip(skip); } real_pos = offset; @@ -173,7 +174,7 @@ private byte[] fill(int offset) throws IOException { done+=r; todo-=r; } - real_pos += done; + real_pos += done; return b; } @@ -181,7 +182,7 @@ private byte[] get(int offset) throws IOException { if (writeData != null && writeData[offset>>cacheShift]!=null) { return writeData[offset>>cacheShift]; } - Integer i = new Integer(offset); + Integer i = offset; byte[] b = (byte[])cache.get(i); if (b == null) { b = fill(offset); @@ -231,7 +232,7 @@ public int read(byte[] b) throws IOException { return read(b, 0, b.length); } - public int skipBytes(int n) throws IOException { + public int skipBytes(int n) { if (pos>=len) return 0; if (n+pos>len) @@ -251,7 +252,6 @@ public void write(int b) throws IOException { if (data == null) { data = get(offset); writeData[offset>>cacheShift] = data; - writePageCount++; } int index = pos & cacheMask; pos++; @@ -283,7 +283,6 @@ public void write(byte[] b, int off, int len) throws IOException { } if (writeData == null) { writeData = new byte[(this.len>>cacheShift)+1][]; - writePageCount++; } byte[] data = writeData[offset>>cacheShift]; if (data == null) { @@ -308,7 +307,7 @@ public void seek(long p) throws IOException { pos = (int)p; } - public long length() throws IOException { + public long length() { return len; } @@ -320,7 +319,7 @@ public void close() throws IOException { is.close(); } - public long getFilePointer() throws IOException { + public long getFilePointer() { return pos; } @@ -348,7 +347,7 @@ static public boolean canOpen(String path, int mode) { return false; } } - static public String getFullPath(String path) throws FileNotFoundException { + static public String getFullPath(String path) { if (path.toLowerCase().startsWith("http://")) { return path.substring(0, path.lastIndexOf('/')); } else if (path.toLowerCase().startsWith("jar://")) { @@ -357,7 +356,7 @@ static public String getFullPath(String path) throws FileNotFoundException { return new File(path).getAbsoluteFile().getParentFile().getAbsolutePath(); } } - static public InputStream openStream(String path) throws FileNotFoundException { + static public InputStream openStream(String path) throws IOException { if (path.toLowerCase().startsWith("http://")) { try { URL url = new URL(path); @@ -374,7 +373,7 @@ static public InputStream openStream(String path) throws FileNotFoundException { is = zis; } return is; - } catch (Throwable e) { + } catch (Throwable ignored) { } throw new FileNotFoundException(path); } else if (path.toLowerCase().startsWith("jar://")) { @@ -386,7 +385,7 @@ static public InputStream openStream(String path) throws FileNotFoundException { return is; } else { path = FileHelper.resolve_path(path); - return new FileInputStream(path); + return Files.newInputStream(Paths.get(path)); } } static public FileIO open(String path, int mode) throws FileNotFoundException { @@ -397,7 +396,7 @@ static public FileIO open(String path, int mode) throws FileNotFoundException { urlConn.setDoInput(true); urlConn.setUseCaches(true); byte[] b = null; - long size = 0; + long size; InputStream is = urlConn.getInputStream(); ByteArrayOutputStream os; if (path.toLowerCase().endsWith(".zip")) { @@ -428,9 +427,7 @@ static public FileIO open(String path, int mode) throws FileNotFoundException { if (b == null) b = os.toByteArray(); return new RamIO(b, mode); - } catch (OutOfMemoryError e) { - e.printStackTrace(); - } catch (Exception e) { + } catch (OutOfMemoryError | Exception e) { e.printStackTrace(); } finally { Main.showProgress(null, 0); @@ -461,7 +458,7 @@ static public FileIO open(String path, int mode) throws FileNotFoundException { File tmpFile = new File(dirPath+File.separator+path); if (tmpFile.exists()) tmpFile.delete(); - OutputStream out = new FileOutputStream(tmpFile); + OutputStream out = Files.newOutputStream(tmpFile.toPath()); byte[] buffer = new byte[16384]; int read; int count = 0; @@ -474,8 +471,8 @@ static public FileIO open(String path, int mode) throws FileNotFoundException { } while (read>0); tmpFile.deleteOnExit(); System.out.println("Copied "+count+" bytes to "+tmpFile.getAbsolutePath()); - try {is.close();} catch (Exception e) {} - try {out.close();} catch (Exception e) {} + try {is.close();} catch (Exception ignored) {} + try {out.close();} catch (Exception ignored) {} return new RandomIO(tmpFile, "rw"); } catch (Exception e) { e.printStackTrace(); diff --git a/jdosbox/src/main/java/jdos/util/HomeDirectory.java b/jdosbox/src/main/java/jdos/util/HomeDirectory.java index db11d43b..d5835f10 100644 --- a/jdosbox/src/main/java/jdos/util/HomeDirectory.java +++ b/jdosbox/src/main/java/jdos/util/HomeDirectory.java @@ -26,7 +26,7 @@ static public String get() { if (result.endsWith("\\") || result.endsWith("/")) { result = result.substring(0, result.length()-1); } - if (result.length()==0) + if (result.isEmpty()) result="."; return result; } diff --git a/jdosbox/src/main/java/jdos/util/IntPtr.java b/jdosbox/src/main/java/jdos/util/IntPtr.java index abff215d..49117bf5 100644 --- a/jdosbox/src/main/java/jdos/util/IntPtr.java +++ b/jdosbox/src/main/java/jdos/util/IntPtr.java @@ -24,10 +24,10 @@ public int dataWidth() { return 4; } public void set(int off, int val) { - writed((int)off, val); + writed(off, val); } public int get(int off) { - return (int)readd(off); + return readd(off); } public void set(int off, long val) { writed(off, val); diff --git a/jdosbox/src/main/java/jdos/util/LRUCache.java b/jdosbox/src/main/java/jdos/util/LRUCache.java index d9d1a382..f211d6ce 100644 --- a/jdosbox/src/main/java/jdos/util/LRUCache.java +++ b/jdosbox/src/main/java/jdos/util/LRUCache.java @@ -15,9 +15,7 @@ package jdos.util; import java.util.LinkedHashMap; -import java.util.Collection; import java.util.Map; -import java.util.ArrayList; /** * An LRU cache, based on LinkedHashMap. @@ -37,8 +35,8 @@ public class LRUCache { private static final float hashTableLoadFactor = 0.75f; -private LinkedHashMap map; -private int cacheSize; +private final LinkedHashMap map; +private final int cacheSize; /** * Creates a new LRU cache. diff --git a/jdosbox/src/main/java/jdos/util/LongHelper.java b/jdosbox/src/main/java/jdos/util/LongHelper.java index 7e724127..eaa1999d 100644 --- a/jdosbox/src/main/java/jdos/util/LongHelper.java +++ b/jdosbox/src/main/java/jdos/util/LongHelper.java @@ -76,7 +76,7 @@ public static long divideLongByInt(long a, int b) { } } } - if (quot>0xffffffffl) { + if (quot> 0xffffffffL) { throw new OverflowException(); } return (rem << 32) | (quot & 0xffffffffL); diff --git a/jdosbox/src/main/java/jdos/util/MicroDouble.java b/jdosbox/src/main/java/jdos/util/MicroDouble.java index bd34dfb9..1378c435 100644 --- a/jdosbox/src/main/java/jdos/util/MicroDouble.java +++ b/jdosbox/src/main/java/jdos/util/MicroDouble.java @@ -762,7 +762,6 @@ public static long add(long d1, long d2) { int dx = x1 - x2; if (dx > 0) { m2 = BitUtils.stickyRightShift(m2, dx); - x2 = x1; } else if (dx < 0) { m1 = BitUtils.stickyRightShift(m1, -dx); x1 = x2; @@ -1229,7 +1228,7 @@ private static long decToDouble(boolean negative, int base10x, long base10m) { /** * Double-precision integer multiplication of x1 and x2. */ - private static final long dpMul(long x1, long x2) { + private static long dpMul(long x1, long x2) { long v1 = (x1 >>> 32) * (x2 >>> 32); long v2 = (x1 & 0xffffffffL) * (x2 >>> 32); long v3 = (x1 >>> 32) * (x2 & 0xffffffffL); @@ -1270,7 +1269,7 @@ public static long parseDouble(String s) { int idx = 0; // read sign - boolean negative = false; + boolean negative; char c = s.charAt(0); negative = (c == '-'); if (negative || (c == '+')) { @@ -1329,7 +1328,6 @@ public static long parseDouble(String s) { } catch (NumberFormatException e) { throw new NumberFormatException(s); } - idx = len; } else if (idx != len) { // check that we parsed the entire string throw new NumberFormatException(s); @@ -1548,7 +1546,7 @@ public static String toString(long d, int maxStringLength) { } private static String toString(boolean negative, int base10x, long base10m) { - StringBuffer sb = new StringBuffer(26); + StringBuilder sb = new StringBuilder(26); if (negative) { sb.append('-'); } @@ -1585,7 +1583,7 @@ private static String toString(boolean negative, int base10x, long base10m) { } if (scientific) { sb.append('E'); - sb.append(Integer.toString(base10x)); + sb.append(base10x); } return sb.toString(); } @@ -1810,7 +1808,7 @@ public static long exp(long d) { // argument reduction long hi=0, lo=0; - int k=0; + int k; int hx = getHI(x) & 0x7fffffff; if (hx > 0x3fd62e42) { // if |x| > 0.5 ln2 if (hx < 0x3ff0a2b2) { // and |x| < 1.5 ln2 @@ -1869,7 +1867,8 @@ public static long expm1(long d) { int hx = getHI(d); // high word of x int xsb = hx & 0x80000000; // sign bit of x long y; - if (xsb==0) y=d; else y= -d; // y = |x| + if (xsb==0) { + } hx &= 0x7fffffff; // high word of |x| // filter out huge and non-finite argument @@ -1959,9 +1958,9 @@ else if(hx < 0x3c900000) { // when |x|<2**-54, return x return y; } - private static final long BP[] = { ONE, THREE_HALVES }; - private static final long DP_HI[] = { ZERO, 0x3fe2b80340000000L}; // 5.84962487220764160156e-01 - private static final long DP_LO[] = { ZERO, 0x3e4cfdeb43cfd006L}; // 1.35003920212974897128e-08 + private static final long[] BP = { ONE, THREE_HALVES }; + private static final long[] DP_HI = { ZERO, 0x3fe2b80340000000L}; // 5.84962487220764160156e-01 + private static final long[] DP_LO = { ZERO, 0x3e4cfdeb43cfd006L}; // 1.35003920212974897128e-08 // poly coefs for (3/2)*(log(x)-2s-2/3*s**3 private static final long L1 = 0x3fe3333333333303L; // 5.99999999999994648725e-01 private static final long L2 = 0x3fdb6db6db6fabffL; // 4.28571428578550184252e-01 @@ -2485,7 +2484,7 @@ public static long cos(long d) { return NaN; } else { // argument reduction needed - long y[] = new long[2]; + long[] y = new long[2]; int n = remPio2(d,y); switch(n&3) { case 0: @@ -2598,12 +2597,12 @@ TWO, sub(x, sub(div(mul(w, w), add( } } - private static long S1 = 0xBFC5555555555549L; // -1.66666666666666324348e-01 - private static long S2 = 0x3F8111111110F8A6L; // 8.33333333332248946124e-03 - private static long S3 = 0xBF2A01A019C161D5L; // -1.98412698298579493134e-04 - private static long S4 = 0x3EC71DE357B1FE7DL; // 2.75573137070700676789e-06 - private static long S5 = 0xBE5AE5E68A2B9CEBL; // -2.50507602534068634195e-08 - private static long S6 = 0x3DE5D93A5ACFD57CL; // 1.58969099521155010221e-10 + private static final long S1 = 0xBFC5555555555549L; // -1.66666666666666324348e-01 + private static final long S2 = 0x3F8111111110F8A6L; // 8.33333333332248946124e-03 + private static final long S3 = 0xBF2A01A019C161D5L; // -1.98412698298579493134e-04 + private static final long S4 = 0x3EC71DE357B1FE7DL; // 2.75573137070700676789e-06 + private static final long S5 = 0xBE5AE5E68A2B9CEBL; // -2.50507602534068634195e-08 + private static final long S6 = 0x3DE5D93A5ACFD57CL; // 1.58969099521155010221e-10 private static long kernelSin(long x, long y, int iy) { int ix = getHI(x) & 0x7fffffff; // high word of x @@ -2653,7 +2652,7 @@ private static long kernelCos(long x, long y) { return sub(a, (sub(hz, sub(mul(z, r), mul(x, y))))); } - private static final long PIO2[] = { + private static final long[] PIO2 = { 0x3ff921fb40000000L, // 1.57079625129699707031e+00 0x3e74442d00000000L, // 7.54978941586159635335e-08 0x3cf8469880000000L, // 5.39030252995776476554e-15 @@ -2769,7 +2768,7 @@ private static int remPio2(long x, long[] y) { } // set z = scalbn(|x|,ilogb(x)-23) long z = getLO(x); - int e0 = (int) ((ix >> 20) - 1046); + int e0 = (ix >> 20) - 1046; z = setHI(z, ix - (e0 << 20)); long[] tx = new long[3]; for (int i=0; i<2; i++) { @@ -2793,9 +2792,8 @@ private static int remPio2(long x, long[] y) { private static int kernelRemPio2(long[] x, long[] y, int e0, int nx) { // initialize jk int jk = 4; - int jp = jk; - // determine jx,jv,q0, note that 3>q0 + // determine jx,jv,q0, note that 3>q0 int jx = nx - 1; int jv = (e0-3)/24; if (jv < 0) jv = 0; @@ -2931,7 +2929,7 @@ private static int kernelRemPio2(long[] x, long[] y, int e0, int nx) { long[] fq = new long[20]; for (int i=jz; i>=0; i--) { fw = ZERO; - for (int k=0; (k<=jp) && (k<=(jz-i)); k++) + for (int k = 0; (k<= jk) && (k<=(jz-i)); k++) fw = add(fw, mul(PIO2[k], q[i+k])); fq[jz-i] = fw; } @@ -2973,7 +2971,7 @@ private static long pOverQ(long t) { /** * Mimics Math.asin(double). */ - public static final long asin(long d) { + public static long asin(long d) { int hx = getHI(d); int ix = hx & 0x7fffffff; if (ix>= 0x3ff00000) { // |x|>= 1 @@ -3047,14 +3045,14 @@ public static long acos(long d) { } } - private static final long atanhi[] = { + private static final long[] atanhi = { 0x3fddac670561bb4fL, // 4.63647609000806093515e-01 atan(0.5)hi 0x3fe921fb54442d18L, // 7.85398163397448278999e-01 atan(1.0)hi 0x3fef730bd281f69bL, // 9.82793723247329054082e-01 atan(1.5)hi 0x3ff921fb54442d18L // 1.57079632679489655800e+00 atan(inf)hi }; - private static final long atanlo[] = { + private static final long[] atanlo = { 0x3c7a2b7f222f65e2L, // 2.26987774529616870924e-17 atan(0.5)lo 0x3c81a62633145c07L, // 3.06161699786838301793e-17 atan(1.0)lo 0x3c7007887af0cbbdL, // 1.39033110312309984516e-17 atan(1.5)lo @@ -3632,7 +3630,6 @@ else if(ix>=0x3FF3B4C4) { } else if(ix<0x40200000) { // x < 8.0 i = intValue(x); - t = ZERO; y = sub(x, intToDouble(i)); long p = mul(y, add(SB0, mul(y, add(SB1, mul(y, add(SB2, mul(y, add(SB3, mul(y, add(SB4, mul(y, add(SB5, diff --git a/jdosbox/src/main/java/jdos/util/MicroFloat.java b/jdosbox/src/main/java/jdos/util/MicroFloat.java index f1e04ce8..acdbdff7 100644 --- a/jdosbox/src/main/java/jdos/util/MicroFloat.java +++ b/jdosbox/src/main/java/jdos/util/MicroFloat.java @@ -726,7 +726,6 @@ public static int add(int f1, int f2) { int dx = x1 - x2; if (dx > 0) { m2 = BitUtils.stickyRightShift(m2, dx); - x2 = x1; } else if (dx < 0) { m1 = BitUtils.stickyRightShift(m1, -dx); x1 = x2; @@ -1103,7 +1102,7 @@ public static int parseFloat(String s) { int idx = 0; // read sign - boolean negative = false; + boolean negative; char c = s.charAt(0); negative = (c == '-'); if (negative || (c == '+')) { @@ -1162,7 +1161,6 @@ public static int parseFloat(String s) { } catch (NumberFormatException e) { throw new NumberFormatException(s); } - idx = len; } else if (idx != len) { // check that we parsed the entire string throw new NumberFormatException(s); @@ -1211,7 +1209,7 @@ public static String toString(int f) { return "NaN"; } boolean n = unpackSign(f); - StringBuffer sb = new StringBuffer(15); + StringBuilder sb = new StringBuilder(15); if (n) { sb.append('-'); } @@ -1305,7 +1303,7 @@ public static String toString(int f) { } if (scientific) { sb.append('E'); - sb.append(Integer.toString(base10x)); + sb.append(base10x); } return sb.toString(); } diff --git a/jdosbox/src/main/java/jdos/util/Progress.java b/jdosbox/src/main/java/jdos/util/Progress.java index c65a4423..84c9671c 100644 --- a/jdosbox/src/main/java/jdos/util/Progress.java +++ b/jdosbox/src/main/java/jdos/util/Progress.java @@ -1,11 +1,11 @@ package jdos.util; public interface Progress { - public void set(int value); - public void status(String value); - public void done(); - public boolean hasCancelled(); - public void speed(String value); - public void initializeSpeedValue(long totalExpected); - public void incrementSpeedValue(long value); + void set(int value); + void status(String value); + void done(); + boolean hasCancelled(); + void speed(String value); + void initializeSpeedValue(long totalExpected); + void incrementSpeedValue(long value); } diff --git a/jdosbox/src/main/java/jdos/util/Ptr.java b/jdosbox/src/main/java/jdos/util/Ptr.java index 5734b2de..e4f1ff9a 100644 --- a/jdosbox/src/main/java/jdos/util/Ptr.java +++ b/jdosbox/src/main/java/jdos/util/Ptr.java @@ -1,10 +1,10 @@ package jdos.util; public class Ptr { - public byte[] p; + public final byte[] p; public int off; - protected int start; - public int size; + protected final int start; + public final int size; public Ptr() { this.p = null; this.off = 0; @@ -99,7 +99,7 @@ public void clear() { } public void or(int off, int mask) { - p[this.off+off*dataWidth()]|=mask; + p[this.off+off*dataWidth()]|= (byte) mask; } public int get(int off) { @@ -168,23 +168,21 @@ public void read(byte[] b, int len) { System.arraycopy(p, off, b, 0, len); } public /*Bitu*/int read(int size, /*HostPt*/int o ) { - int off = (int)o; if ( size == 1) - return readb(off); + return readb(o); else if ( size == 2) - return readw(off); + return readw(o); else if ( size == 4) - return (int)readd(off); + return readd(o); return 0; } public void write(int size, /*HostPt*/int o, /*Bitu*/int val) { - int off = (int)o; if ( size == 1) - writeb(off, (short)val ); + writeb(o, (short)val ); else if ( size == 2) - writew(off, val ); + writew(o, val ); else if ( size == 4) - writed(off, val ); + writed(o, val ); } } diff --git a/jdosbox/src/main/java/jdos/util/Record.java b/jdosbox/src/main/java/jdos/util/Record.java index eceddabd..571b4e14 100644 --- a/jdosbox/src/main/java/jdos/util/Record.java +++ b/jdosbox/src/main/java/jdos/util/Record.java @@ -5,18 +5,17 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; -import java.io.FileOutputStream; public class Record { public static DataOutputStream dos; - public static DataInputStream ios; + public static final DataInputStream ios; static { try { //dos = new DataOutputStream(new FileOutputStream("good.bin")); ios = new DataInputStream(new FileInputStream("good.bin")); } catch (Exception e) { - + throw new RuntimeException(e); } } @@ -70,7 +69,7 @@ static public void op(int c) { throw new Exception(); } } catch (Exception e) { - + throw new RuntimeException(e); } } if (dos!=null) { @@ -87,7 +86,7 @@ static public void op(int c) { dos.writeInt(CPU_Regs.reg_esi.dword); dos.writeInt(CPU_Regs.reg_edi.dword); } catch (Exception e) { - + throw new RuntimeException(e); } } } diff --git a/jdosbox/src/main/java/jdos/util/StringHelper.java b/jdosbox/src/main/java/jdos/util/StringHelper.java index 6d96d1c2..4c15d160 100644 --- a/jdosbox/src/main/java/jdos/util/StringHelper.java +++ b/jdosbox/src/main/java/jdos/util/StringHelper.java @@ -26,10 +26,10 @@ static public String StripWord(StringRef line) { public static String sprintf(String format, Object[] args) { int pos = format.indexOf('%'); if (pos>=0) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); int argIndex = 0; while (pos>=0) { - buffer.append(format.substring(0, pos)); + buffer.append(format, 0, pos); if (pos+1='0' && c<='9') { - w+=c; - } else { - break; - } - if (pos+1= '0' && c <= '9') { + w += c; + if (pos + 1 < format.length()) { c = format.charAt(++pos); } else { return buffer.toString(); } } - if (w.length()>0) { + if (!w.isEmpty()) { width = Integer.parseInt(w); } @@ -95,40 +91,33 @@ public static String sprintf(String format, Object[] args) { } String p = ""; - while (true) { - if (c>='0' && c<='9') { - p+=c; - } else { - break; - } - if (pos+1= '0' && c <= '9') { + p += c; + if (pos + 1 < format.length()) { c = format.charAt(++pos); } else { return buffer.toString(); } } - if (p.length()>0) { + if (!p.isEmpty()) { precision = Integer.parseInt(p); } } // length if (c=='h') { - shortValue = true; if (pos+11) - value = value.substring(0,1); + value = new StringBuilder(value.substring(0, 1)); } else if (c == 's') { if (args[argIndex] instanceof Character) { - value = String.valueOf(args[argIndex]); + value = new StringBuilder(String.valueOf(args[argIndex])); } else if (args[argIndex] instanceof String) { - value = (String)args[argIndex]; + value = new StringBuilder((String) args[argIndex]); } else { System.out.println("Invalid printf argument type for %s: "+args[argIndex].getClass()); return buffer.toString(); } if (precision>0 && value.length()>precision) { - value = value.substring(0,precision); + value = new StringBuilder(value.substring(0, precision)); } } else if (c == 'x') { if (args[argIndex] instanceof Integer) { - value = Integer.toString(((Integer)args[argIndex]).intValue(), 16); + value = new StringBuilder(Integer.toString((Integer) args[argIndex], 16)); } else if (args[argIndex] instanceof Long) { - value = Long.toString(((Long)args[argIndex]).longValue(), 16); + value = new StringBuilder(Long.toString((Long) args[argIndex], 16)); } else { System.out.println("Invalid printf argument type for %x: "+args[argIndex].getClass()); return buffer.toString(); } - negnumber = value.startsWith("-"); + negnumber = value.toString().startsWith("-"); if (negnumber) - value = value.substring(1); - if (precision==0 && value.equals("0")) { + value = new StringBuilder(value.substring(1)); + if (precision==0 && value.toString().equals("0")) { format = format.substring(pos); continue; } if (prefix) { - strPrfix += "0x"+value; + strPrfix.append("0x").append(value); } } else if (c == 'X') { if (args[argIndex] instanceof Integer) { - value = Integer.toString(((Integer)args[argIndex]).intValue(), 16); + value = new StringBuilder(Integer.toString((Integer) args[argIndex], 16)); } else if (args[argIndex] instanceof Long) { - value = Long.toString(((Long)args[argIndex]).longValue(), 16); + value = new StringBuilder(Long.toString((Long) args[argIndex], 16)); } else { System.out.println("Invalid printf argument type for %X: "+args[argIndex].getClass()); return buffer.toString(); } - negnumber = value.startsWith("-"); + negnumber = value.toString().startsWith("-"); if (negnumber) - value = value.substring(1); - if (precision==0 && value.equals("0")) { + value = new StringBuilder(value.substring(1)); + if (precision==0 && value.toString().equals("0")) { format = format.substring(pos); continue; } if (precision>0) { while (value.length()0) { while (value.length()=0) { if (precision==0) { - value = value.substring(0, dec); + value = new StringBuilder(value.substring(0, dec)); } else if (value.length()>dec+1+precision) { - value = value.substring(0, dec+1+precision); + value = new StringBuilder(value.substring(0, dec + 1 + precision)); } } } if (negnumber) { - strPrfix = "-"; + strPrfix = new StringBuilder("-"); } else { if (showPlus) { - strPrfix = "+"+strPrfix; + strPrfix.insert(0, "+"); } else if (spaceSign) { - strPrfix = " "+strPrfix; + strPrfix.insert(0, " "); } } while (width>strPrfix.length()+value.length()) { if (leftPadZero) { - strPrfix+="0"; + strPrfix.append("0"); } else if (leftJustify) { - value=value+" "; + value.append(" "); } else { - strPrfix=" "+strPrfix; + strPrfix.insert(0, " "); } } buffer.append(strPrfix); @@ -282,35 +271,37 @@ public static String sprintf(String format, Object[] args) { } } public static String leftJustify(String value, int places) { - while (value.length()0) { - result += "."; + result.append("."); for (int i=0;i= 0) System.arraycopy(b1, offset2, b, offset, len); b[offset+len]=0; } @@ -375,11 +365,7 @@ public static int strncmp(byte[] s1, int off, byte[] s2, int off2, int len) { } if (s1.length-off>=len && s2.length-off2>=len) return 0; - if (s1.length-off>s2.length-off2) - return 1; - if (s2.length-off2>s1.length-off) - return -1; - return 0; + return Integer.compare(s1.length - off, s2.length - off2); } public static int memcmp(byte[] s1, byte[] s2, int len) { @@ -391,11 +377,7 @@ public static int memcmp(byte[] s1, byte[] s2, int len) { } if (s1.length>=len && s2.length>=len) return 0; - if (s1.length>s2.length) - return 1; - if (s2.length>s1.length) - return -1; - return 0; + return Integer.compare(s1.length, s2.length); } public static int strlen(byte[] b, int off) { @@ -413,18 +395,18 @@ public static byte[] getDosString(String str, int len) { } public static String replace(final String aInput, final String aOldPattern, final String aNewPattern){ - if ( aOldPattern.equals("") ) { + if (aOldPattern.isEmpty()) { throw new IllegalArgumentException("Old pattern must have content."); } - final StringBuffer result = new StringBuffer(); + final StringBuilder result = new StringBuilder(); //startIdx and idxOld delimit various chunks of aInput; these //chunks always end where aOldPattern begins int startIdx = 0; - int idxOld = 0; + int idxOld; while ((idxOld = aInput.indexOf(aOldPattern, startIdx)) >= 0) { //grab a part of aInput which does not include aOldPattern - result.append( aInput.substring(startIdx, idxOld) ); + result.append(aInput, startIdx, idxOld); //add aNewPattern to take place of aOldPattern result.append( aNewPattern ); @@ -438,7 +420,7 @@ public static String replace(final String aInput, final String aOldPattern, fina } public static String[] split(final String input, String delimiter) { - if (input != null && input.length() > 0) { + if (input != null && !input.isEmpty()) { int index1 = 0; int index2 = input.indexOf(delimiter); Vector result = new Vector(); @@ -459,8 +441,8 @@ public static String[] split(final String input, String delimiter) { } public static String[] splitWithQuotes(final String input, char delimiter) { - if (input != null && input.length() > 0) { - StringBuffer part = new StringBuffer(); + if (input != null && !input.isEmpty()) { + StringBuilder part = new StringBuilder(); boolean quote = false; Vector result = new Vector(); @@ -476,7 +458,7 @@ public static String[] splitWithQuotes(final String input, char delimiter) { quote = true; } else if (c == delimiter) { result.add(part.toString()); - part = new StringBuffer(); + part = new StringBuilder(); } else { part.append(c); } diff --git a/jdosbox/src/main/java/jdos/util/UnZip.java b/jdosbox/src/main/java/jdos/util/UnZip.java index 10b92987..e5c6f5c2 100644 --- a/jdosbox/src/main/java/jdos/util/UnZip.java +++ b/jdosbox/src/main/java/jdos/util/UnZip.java @@ -10,23 +10,23 @@ public class UnZip { static final int BUFFER = 2048*32; - public static boolean unzip(String fileName, String dir, Progress progress) { - BufferedOutputStream dest = null; - BufferedInputStream is = null; + public static void unzip(String fileName, String dir, Progress progress) { + BufferedOutputStream dest; + BufferedInputStream is; try { ZipEntry entry; ZipFile zipfile = new ZipFile(fileName); - Enumeration e = zipfile.entries(); + Enumeration e = zipfile.entries(); long totalSize = 0; String root = null; while(e.hasMoreElements()) { - entry = (ZipEntry) e.nextElement(); + entry = e.nextElement(); totalSize+=entry.getSize(); } e = zipfile.entries(); while(e.hasMoreElements()) { - entry = (ZipEntry) e.nextElement(); + entry = e.nextElement(); System.out.println("Extracting: " +entry); progress.status("Extracting: " +entry); if (entry.isDirectory()) { @@ -38,7 +38,7 @@ public static boolean unzip(String fileName, String dir, Progress progress) { } is = new BufferedInputStream(zipfile.getInputStream(entry)); int count; - byte data[] = new byte[BUFFER]; + byte[] data = new byte[BUFFER]; File newFile = new File(dir+"/"+entry.getName()); if (!newFile.getParentFile().exists()) { if (root == null) { @@ -58,21 +58,17 @@ public static boolean unzip(String fileName, String dir, Progress progress) { dest.close(); is.close(); FileHelper.deleteFile(new File(root)); - return false; + return; } } dest.flush(); dest.close(); is.close(); - dest = null; - is = null; } zipfile.close(); - return true; } catch(Exception e) { e.printStackTrace(); } - return false; } } From 200c9fd5dba0aa4087be0f19c21f3eab44804b17 Mon Sep 17 00:00:00 2001 From: Anston Sorensen Date: Sat, 7 Oct 2023 19:35:20 -0500 Subject: [PATCH 3/3] Added -noconsole option Added the -noconsole option to mute console output --- jdosbox/src/main/java/jdos/gui/MainFrame.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/jdosbox/src/main/java/jdos/gui/MainFrame.java b/jdosbox/src/main/java/jdos/gui/MainFrame.java index bb1cd92c..95a6107b 100644 --- a/jdosbox/src/main/java/jdos/gui/MainFrame.java +++ b/jdosbox/src/main/java/jdos/gui/MainFrame.java @@ -165,7 +165,15 @@ public static BufferedImage resizeImage(BufferedImage source, int destWidth, int } public static void main(final String[] args) { - if (args.length>1 && args[0].equalsIgnoreCase("-pcap")) { + if (args.length == 1 && args[0].equalsIgnoreCase("-noconsole")) { + PrintStream dummyStream = new PrintStream(new OutputStream(){ + public void write(int b) { + // NO-OP + } + }); + + System.setOut(dummyStream); + } else if (args.length>1 && args[0].equalsIgnoreCase("-pcap")) { String nic = args[1]; int port = 15654; if (args.length>3 && args[2].equalsIgnoreCase("-pcapport")) {