I checked for INTEL CPU.
This greatly improves the operation reliability of the program code.
Improve image quality, improve sound quality, improve fonts, ultra low noise digital output ...
Thanks.
Sample executable demo "Photoviewer - left up right down - exit enter" Size 124KB
x64 for Windows 8.1 / 10 ( bottom of web page )
http://www.mics.ne.jp/~coolverse/
Code: Select all
; Hi-quality CPU Tuning of electronic bit reference
; Copyright (c) Hiroyuki Yokota (oryaaaaa) in Japan
; run this code
; Please select pb source code
; Exit your program
; ReAsm
; Compile to #BuildName
; display log
#BuildName = "build.exe"
; As you can see, there was an effect even if listed first. Please try it on Mac or Linux.
!JMP PureBasicForumTips_PreLoadJmpAddress
!JMP PureBasicStart
!JMP PB_NewList
!JMP PB_AddElement
!JMP PB_CloseFile
!JMP PB_CreateFile
!JMP PB_Delay
!JMP PB_DeleteFile
!JMP PB_Eof
!JMP PB_FileSize
!JMP PB_FindString
!JMP PB_FlushFileBuffers
!JMP PB_FreeFiles
!JMP PB_FreeFileSystem
!JMP PB_FreeList
!JMP PB_FreeMemorys
!JMP PB_FreeObjects
!JMP PB_GetFilePart
!JMP PB_GetPathPart
!JMP PB_InitFile
!JMP PB_InitList
!JMP PB_InitMemory
!JMP PB_InitProcess
!JMP PB_InitRequester
!JMP PB_Left
!JMP PB_ListSize
!JMP PB_MessageRequester
!JMP PB_MessageRequester2
!JMP PB_NextElement
!JMP PB_OpenFileRequester
!JMP PB_ReadFile
!JMP PB_ReadString
!JMP PB_RemoveString
!JMP PB_ResetList
!JMP PB_Right
!JMP PB_RunProgram3
!JMP PB_WriteStringN
!JMP ExitProcess
!JMP GetModuleHandleW
!JMP HeapCreate
!JMP HeapDestroy
!JMP memset
!JMP SYS_CopyString
!JMP SYS_StringEqual
!JMP SYS_AllocateString4
!JMP SYS_FastAllocateStringFree4
!JMP PB_StringBase
!JMP SYS_InitString
!JMP SYS_FreeStrings
!PureBasicForumTips_PreLoadJmpAddress:
Macro Nop_bxEbxEcxR8d10d_axEaxEdxR9dR11d
AddElement(Buffer()) : Buffer() = "NOP bx"
AddElement(Buffer()) : Buffer() = "NOP Ebx"
AddElement(Buffer()) : Buffer() = "NOP cx"
AddElement(Buffer()) : Buffer() = "NOP Ecx"
AddElement(Buffer()) : Buffer() = "NOP bp"
AddElement(Buffer()) : Buffer() = "NOP Ebp"
AddElement(Buffer()) : Buffer() = "NOP di"
AddElement(Buffer()) : Buffer() = "NOP Edi"
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
AddElement(Buffer()) : Buffer() = "NOP R8w"
AddElement(Buffer()) : Buffer() = "NOP R8d"
AddElement(Buffer()) : Buffer() = "NOP R10w"
AddElement(Buffer()) : Buffer() = "NOP R10d"
AddElement(Buffer()) : Buffer() = "NOP R12w"
AddElement(Buffer()) : Buffer() = "NOP R12d"
AddElement(Buffer()) : Buffer() = "NOP R14w"
AddElement(Buffer()) : Buffer() = "NOP R14d"
CompilerEndIf
AddElement(Buffer()) : Buffer() = "NOP ax"
AddElement(Buffer()) : Buffer() = "NOP Eax"
AddElement(Buffer()) : Buffer() = "NOP dx"
AddElement(Buffer()) : Buffer() = "NOP Edx"
AddElement(Buffer()) : Buffer() = "NOP sp"
AddElement(Buffer()) : Buffer() = "NOP Esp"
AddElement(Buffer()) : Buffer() = "NOP si"
AddElement(Buffer()) : Buffer() = "NOP Esi"
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
AddElement(Buffer()) : Buffer() = "NOP R9w"
AddElement(Buffer()) : Buffer() = "NOP R9d"
AddElement(Buffer()) : Buffer() = "NOP R11w"
AddElement(Buffer()) : Buffer() = "NOP R11d"
AddElement(Buffer()) : Buffer() = "NOP R13w"
AddElement(Buffer()) : Buffer() = "NOP R13d"
AddElement(Buffer()) : Buffer() = "NOP R15w"
AddElement(Buffer()) : Buffer() = "NOP R15d"
CompilerEndIf
EndMacro
Macro Xchg_bxEbxEcxR8d10d_axEaxEdxR9dR11d
AddElement(Buffer()) : Buffer() = "XCHG bh, bl"
AddElement(Buffer()) : Buffer() = "XCHG bl, bh"
AddElement(Buffer()) : Buffer() = "XCHG Ebx, Ebx"
AddElement(Buffer()) : Buffer() = "XCHG ch, cl"
AddElement(Buffer()) : Buffer() = "XCHG cl, ch"
AddElement(Buffer()) : Buffer() = "XCHG Ecx, Ecx"
AddElement(Buffer()) : Buffer() = "XCHG bp, bp"
AddElement(Buffer()) : Buffer() = "XCHG Ebp, Ebp"
AddElement(Buffer()) : Buffer() = "XCHG di, di"
AddElement(Buffer()) : Buffer() = "XCHG Edi, Edi"
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
AddElement(Buffer()) : Buffer() = "XCHG R8w, R8w"
AddElement(Buffer()) : Buffer() = "XCHG R8d, R8d"
AddElement(Buffer()) : Buffer() = "XCHG R10w, R10w"
AddElement(Buffer()) : Buffer() = "XCHG R10d, R10d"
AddElement(Buffer()) : Buffer() = "XCHG R12w, R12w"
AddElement(Buffer()) : Buffer() = "XCHG R12d, R12d"
AddElement(Buffer()) : Buffer() = "XCHG R14w, R14w"
AddElement(Buffer()) : Buffer() = "XCHG R14d, R14d"
CompilerEndIf
AddElement(Buffer()) : Buffer() = "XCHG ah, al"
AddElement(Buffer()) : Buffer() = "XCHG al, ah"
AddElement(Buffer()) : Buffer() = "XCHG Eax, Eax"
AddElement(Buffer()) : Buffer() = "XCHG dh, dl"
AddElement(Buffer()) : Buffer() = "XCHG dl, dh"
AddElement(Buffer()) : Buffer() = "XCHG Edx, Edx"
AddElement(Buffer()) : Buffer() = "XCHG sp, sp"
AddElement(Buffer()) : Buffer() = "XCHG Esp, Esp"
AddElement(Buffer()) : Buffer() = "XCHG si, si"
AddElement(Buffer()) : Buffer() = "XCHG Esi, Esi"
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
AddElement(Buffer()) : Buffer() = "XCHG R9w, R9w"
AddElement(Buffer()) : Buffer() = "XCHG R9d, R9d"
AddElement(Buffer()) : Buffer() = "XCHG R11w, R11w"
AddElement(Buffer()) : Buffer() = "XCHG R11d, R11d"
AddElement(Buffer()) : Buffer() = "XCHG R13w, R13w"
AddElement(Buffer()) : Buffer() = "XCHG R13d, R13d"
AddElement(Buffer()) : Buffer() = "XCHG R15w, R15w"
AddElement(Buffer()) : Buffer() = "XCHG R15d, R15d"
CompilerEndIf
EndMacro
Global NewList Buffer.s()
Global NewList InstructionName.s()
Global filename.s, fileno.i, nameaddress.s, compilelog.s
filename= OpenFileRequester("Source PB", "*.pb", "*.pb|*.pb", 0)
If Not FileSize(filename)>0
End
EndIf
Select MessageRequester("Check source PB file", GetFilePart(filename), #PB_MessageRequester_YesNo)
Case #PB_MessageRequester_No
End
EndSelect
DeleteFile(GetPathPart(filename)+"PureBasic.asm")
If filename And FileSize(filename)>0
RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+filename+Chr(34)+" /MMX /UNICODE /commented", GetPathPart(filename), #PB_Program_Wait)
filename = GetPathPart(filename) + "PureBasic.asm"
; If Compiler
; While ProgramRunning(Compiler) : Wend
; CloseProgram(Compiler) ; Close the connection to the program
; EndIf
Else
MessageRequester("Error!", "There was an error creating the assembly code file.")
EndIf
Delay(3000)
fileno = ReadFile(#PB_Any, filename)
If fileno
While Eof(fileno)=0
AddElement(Buffer())
Buffer() = ReadString(fileno)
Wend
CloseFile(fileno)
EndIf
ForEach Buffer()
If FindString(Buffer(), "extrn ")
AddElement(InstructionName())
InstructionName() = RemoveString(Buffer(), "extrn ")
EndIf
If ListSize(InstructionName())>1
If Left(Buffer(), 1)=";"
Break
EndIf
EndIf
Next
ForEach Buffer()
If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
AddElement(InstructionName())
InstructionName() = RemoveString(Buffer(), ":")
EndIf
Next
nameaddress = "PureBasicForumTips_PreLoadJmpAddress"+Str(Random(300))
ForEach Buffer()
If FindString(Buffer(), "PureBasicStart:")
; Start Hi-quality CPU Tuning of electronic bit reference
Nop_bxEbxEcxR8d10d_axEaxEdxR9dR11d
Nop_bxEbxEcxR8d10d_axEaxEdxR9dR11d
Xchg_bxEbxEcxR8d10d_axEaxEdxR9dR11d
Xchg_bxEbxEcxR8d10d_axEaxEdxR9dR11d
AddElement(Buffer()) : Buffer() = "JMP "+nameaddress
AddElement(Buffer()) : Buffer() = "JMP PureBasicStart"
ForEach InstructionName()
AddElement(Buffer()) : Buffer() = "JMP "+InstructionName()
Next
AddElement(Buffer()) : Buffer() = nameaddress+":"
; End Hi-quality CPU Tuning of electronic bit reference
Break
EndIf
Next
fileno = CreateFile(#PB_Any, filename)
If fileno
ForEach Buffer()
WriteStringN(fileno, Buffer())
Next
FlushFileBuffers(fileno)
CloseFile(fileno)
Delay(3000)
If FileSize(filename)>0
Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+filename+Chr(34)+" /MMX /UNICODE /REASM /EXE "+Chr(34)+GetPathPart(filename)+#BuildName+Chr(34), GetPathPart(filename), #PB_Program_Open | #PB_Program_Read)
If Compiler
While ProgramRunning(Compiler)
If AvailableProgramOutput(Compiler)
compilelog + ReadProgramString(Compiler) + Chr(13)
EndIf
Wend
compilelog + Chr(13) + Chr(13)
compilelog + "Exitcode: " + Str(ProgramExitCode(Compiler))
CloseProgram(Compiler) ; Close the connection to the program
MessageRequester("Compiler log", compilelog)
MessageRequester("Finished", GetPathPart(filename)+#BuildName)
EndIf
EndIf
EndIf
End