The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,860 other subscribers

Archive for the ‘Assembly Language’ Category

x86 assembly – Difference between JE/JNE and JZ/JNZ – Stack Overflow

Posted by jpluimers on 2024/12/25

This brought back memories of some 40 years ago during my first steps learning x86 assembly language, realising the first comment: [Wayback/Archive] assembly – Difference between JE/JNE and JZ/JNZ – Stack Overflow

Q

In x86 assembly code, are JE and JNE exactly the same as JZ and JNZ?

C

Long answer: yes.

C

TL:DR: same machine operation, different semantic meaning. Just like jb / jc / jnae all testing CF=1. See felixcloutier.com/x86/jcc

Merry X-mas everyone!

And thanks [Wayback/Archive] Daniel Hanrahan for asking, [Wayback/Archive] Hans Passant and [Wayback/Archive] Peter Cordes for commenting.

Be sure to read the rest of the comments and answers to read on the WHY these instructions are the same. That insight made me realise I was finally understanding the x86 architecture at a deeper level.

Related:

  • [WaybackSave/Archive] Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes 2A, 2B, 2C, and 2D: Instruction Set Reference, A-Z
  • [Wayback/Archive] Jcc — Jump if Condition Is Met

    Sorted by Opcode column (with a little bit of help from Excel, Notepad++ and [Wayback/Archive] HTML Tables generator – TablesGenerator.com; then bolded or italicised the Description column of equivalent entries:

    Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
    0F 80 cd JO rel32 D Valid Valid Jump near if overflow (OF=1).
    0F 80 cw JO rel16 D N.S. Valid Jump near if overflow (OF=1). Not supported in 64-bit mode.
    0F 81 cd JNO rel32 D Valid Valid Jump near if not overflow (OF=0).
    0F 81 cw JNO rel16 D N.S. Valid Jump near if not overflow (OF=0). Not supported in 64-bit mode.
    0F 82 cd JB rel32 D Valid Valid Jump near if below (CF=1).
    0F 82 cd JC rel32 D Valid Valid Jump near if carry (CF=1).
    0F 82 cd JNAE rel32 D Valid Valid Jump near if not above or equal (CF=1).
    0F 82 cw JB rel16 D N.S. Valid Jump near if below (CF=1). Not supported in 64-bit mode.
    0F 82 cw JC rel16 D N.S. Valid Jump near if carry (CF=1). Not supported in 64-bit mode.
    0F 82 cw JNAE rel16 D N.S. Valid Jump near if not above or equal (CF=1). Not supported in 64-bit mode.
    0F 83 cd JAE rel32 D Valid Valid Jump near if above or equal (CF=0).
    0F 83 cd JNB rel32 D Valid Valid Jump near if not below (CF=0).
    0F 83 cd JNC rel32 D Valid Valid Jump near if not carry (CF=0).
    0F 83 cw JAE rel16 D N.S. Valid Jump near if above or equal (CF=0). Not supported in 64-bit mode.
    0F 83 cw JNB rel16 D N.S. Valid Jump near if not below (CF=0). Not supported in 64-bit mode.
    0F 83 cw JNC rel16 D N.S. Valid Jump near if not carry (CF=0). Not supported in 64-bit mode.
    0F 84 cd JE rel32 D Valid Valid Jump near if equal (ZF=1).
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 84 cw JE rel16 D N.S. Valid Jump near if equal (ZF=1). Not supported in 64-bit mode.
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 85 cd JNE rel32 D Valid Valid Jump near if not equal (ZF=0).
    0F 85 cd JNZ rel32 D Valid Valid Jump near if not zero (ZF=0).
    0F 85 cw JNE rel16 D N.S. Valid Jump near if not equal (ZF=0). Not supported in 64-bit mode.
    0F 85 cw JNZ rel16 D N.S. Valid Jump near if not zero (ZF=0). Not supported in 64-bit mode.
    0F 86 cd JBE rel32 D Valid Valid Jump near if below or equal (CF=1 or ZF=1).
    0F 86 cd JNA rel32 D Valid Valid Jump near if not above (CF=1 or ZF=1).
    0F 86 cw JBE rel16 D N.S. Valid Jump near if below or equal (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cw JNA rel16 D N.S. Valid Jump near if not above (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 87 cd JA rel32 D Valid Valid Jump near if above (CF=0 and ZF=0).
    0F 87 cd JNBE rel32 D Valid Valid Jump near if not below or equal (CF=0 and ZF=0).
    0F 87 cw JA rel16 D N.S. Valid Jump near if above (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cw JNBE rel16 D N.S. Valid Jump near if not below or equal (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 88 cd JS rel32 D Valid Valid Jump near if sign (SF=1).
    0F 88 cw JS rel16 D N.S. Valid Jump near if sign (SF=1). Not supported in 64-bit mode.
    0F 89 cd JNS rel32 D Valid Valid Jump near if not sign (SF=0).
    0F 89 cw JNS rel16 D N.S. Valid Jump near if not sign (SF=0). Not supported in 64-bit mode.
    0F 8A cd JP rel32 D Valid Valid Jump near if parity (PF=1).
    0F 8A cd JPE rel32 D Valid Valid Jump near if parity even (PF=1).
    0F 8A cw JP rel16 D N.S. Valid Jump near if parity (PF=1). Not supported in 64-bit mode.
    0F 8A cw JPE rel16 D N.S. Valid Jump near if parity even (PF=1). Not supported in 64-bit mode.
    0F 8B cd JNP rel32 D Valid Valid Jump near if not parity (PF=0).
    0F 8B cd JPO rel32 D Valid Valid Jump near if parity odd (PF=0).
    0F 8B cw JNP rel16 D N.S. Valid Jump near if not parity (PF=0). Not supported in 64-bit mode.
    0F 8B cw JPO rel16 D N.S. Valid Jump near if parity odd (PF=0). Not supported in 64-bit mode.
    0F 8C cd JL rel32 D Valid Valid Jump near if less (SF≠ OF).
    0F 8C cd JNGE rel32 D Valid Valid Jump near if not greater or equal (SF≠ OF).
    0F 8C cw JL rel16 D N.S. Valid Jump near if less (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cw JNGE rel16 D N.S. Valid Jump near if not greater or equal (SF≠ OF). Not supported in 64-bit mode.
    0F 8D cd JGE rel32 D Valid Valid Jump near if greater or equal (SF=OF).
    0F 8D cd JNL rel32 D Valid Valid Jump near if not less (SF=OF).
    0F 8D cw JGE rel16 D N.S. Valid Jump near if greater or equal (SF=OF). Not supported in 64-bit mode.
    0F 8D cw JNL rel16 D N.S. Valid Jump near if not less (SF=OF). Not supported in 64-bit mode.
    0F 8E cd JLE rel32 D Valid Valid Jump near if less or equal (ZF=1 or SF≠ OF).
    0F 8E cd JNG rel32 D Valid Valid Jump near if not greater (ZF=1 or SF≠ OF).
    0F 8E cw JLE rel16 D N.S. Valid Jump near if less or equal (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cw JNG rel16 D N.S. Valid Jump near if not greater (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8F cd JG rel32 D Valid Valid Jump near if greater (ZF=0 and SF=OF).
    0F 8F cd JNLE rel32 D Valid Valid Jump near if not less or equal (ZF=0 and SF=OF).
    0F 8F cw JG rel16 D N.S. Valid Jump near if greater (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cw JNLE rel16 D N.S. Valid Jump near if not less or equal (ZF=0 and SF=OF). Not supported in 64-bit mode.
    70 cb JO rel8 D Valid Valid Jump short if overflow (OF=1).
    71 cb JNO rel8 D Valid Valid Jump short if not overflow (OF=0).
    72 cb JB rel8 D Valid Valid Jump short if below (CF=1).
    72 cb JC rel8 D Valid Valid Jump short if carry (CF=1).
    72 cb JNAE rel8 D Valid Valid Jump short if not above or equal (CF=1).
    73 cb JAE rel8 D Valid Valid Jump short if above or equal (CF=0).
    73 cb JNB rel8 D Valid Valid Jump short if not below (CF=0).
    73 cb JNC rel8 D Valid Valid Jump short if not carry (CF=0).
    74 cb JE rel8 D Valid Valid Jump short if equal (ZF=1).
    74 cb JZ rel8 D Valid Valid Jump short if zero (ZF = 1).
    75 cb JNE rel8 D Valid Valid Jump short if not equal (ZF=0).
    75 cb JNZ rel8 D Valid Valid Jump short if not zero (ZF=0).
    76 cb JBE rel8 D Valid Valid Jump short if below or equal (CF=1 or ZF=1).
    76 cb JNA rel8 D Valid Valid Jump short if not above (CF=1 or ZF=1).
    77 cb JA rel8 D Valid Valid Jump short if above (CF=0 and ZF=0).
    77 cb JNBE rel8 D Valid Valid Jump short if not below or equal (CF=0 and ZF=0).
    78 cb JS rel8 D Valid Valid Jump short if sign (SF=1).
    79 cb JNS rel8 D Valid Valid Jump short if not sign (SF=0).
    7A cb JP rel8 D Valid Valid Jump short if parity (PF=1).
    7A cb JPE rel8 D Valid Valid Jump short if parity even (PF=1).
    7B cb JNP rel8 D Valid Valid Jump short if not parity (PF=0).
    7B cb JPO rel8 D Valid Valid Jump short if parity odd (PF=0).
    7C cb JL rel8 D Valid Valid Jump short if less (SF≠ OF).
    7C cb JNGE rel8 D Valid Valid Jump short if not greater or equal (SF≠ OF).
    7D cb JGE rel8 D Valid Valid Jump short if greater or equal (SF=OF).
    7D cb JNL rel8 D Valid Valid Jump short if not less (SF=OF).
    7E cb JLE rel8 D Valid Valid Jump short if less or equal (ZF=1 or SF≠ OF).
    7E cb JNG rel8 D Valid Valid Jump short if not greater (ZF=1 or SF≠ OF).
    7F cb JG rel8 D Valid Valid Jump short if greater (ZF=0 and SF=OF).
    7F cb JNLE rel8 D Valid Valid Jump short if not less or equal (ZF=0 and SF=OF).
    E3 cb JCXZ rel8 D N.E. Valid Jump short if CX register is 0.
    E3 cb JECXZ rel8 D Valid Valid Jump short if ECX register is 0.
    E3 cb JRCXZ rel8 D Valid N.E. Jump short if RCX register is 0.

    Original table from the above Jcc link:

    Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
    77 cb JA rel8 D Valid Valid Jump short if above (CF=0 and ZF=0).
    73 cb JAE rel8 D Valid Valid Jump short if above or equal (CF=0).
    72 cb JB rel8 D Valid Valid Jump short if below (CF=1).
    76 cb JBE rel8 D Valid Valid Jump short if below or equal (CF=1 or ZF=1).
    72 cb JC rel8 D Valid Valid Jump short if carry (CF=1).
    E3 cb JCXZ rel8 D N.E. Valid Jump short if CX register is 0.
    E3 cb JECXZ rel8 D Valid Valid Jump short if ECX register is 0.
    E3 cb JRCXZ rel8 D Valid N.E. Jump short if RCX register is 0.
    74 cb JE rel8 D Valid Valid Jump short if equal (ZF=1).
    7F cb JG rel8 D Valid Valid Jump short if greater (ZF=0 and SF=OF).
    7D cb JGE rel8 D Valid Valid Jump short if greater or equal (SF=OF).
    7C cb JL rel8 D Valid Valid Jump short if less (SF≠ OF).
    7E cb JLE rel8 D Valid Valid Jump short if less or equal (ZF=1 or SF≠ OF).
    76 cb JNA rel8 D Valid Valid Jump short if not above (CF=1 or ZF=1).
    72 cb JNAE rel8 D Valid Valid Jump short if not above or equal (CF=1).
    73 cb JNB rel8 D Valid Valid Jump short if not below (CF=0).
    77 cb JNBE rel8 D Valid Valid Jump short if not below or equal (CF=0 and ZF=0).
    73 cb JNC rel8 D Valid Valid Jump short if not carry (CF=0).
    75 cb JNE rel8 D Valid Valid Jump short if not equal (ZF=0).
    7E cb JNG rel8 D Valid Valid Jump short if not greater (ZF=1 or SF≠ OF).
    7C cb JNGE rel8 D Valid Valid Jump short if not greater or equal (SF≠ OF).
    7D cb JNL rel8 D Valid Valid Jump short if not less (SF=OF).
    7F cb JNLE rel8 D Valid Valid Jump short if not less or equal (ZF=0 and SF=OF).
    71 cb JNO rel8 D Valid Valid Jump short if not overflow (OF=0).
    7B cb JNP rel8 D Valid Valid Jump short if not parity (PF=0).
    79 cb JNS rel8 D Valid Valid Jump short if not sign (SF=0).
    75 cb JNZ rel8 D Valid Valid Jump short if not zero (ZF=0).
    70 cb JO rel8 D Valid Valid Jump short if overflow (OF=1).
    7A cb JP rel8 D Valid Valid Jump short if parity (PF=1).
    7A cb JPE rel8 D Valid Valid Jump short if parity even (PF=1).
    7B cb JPO rel8 D Valid Valid Jump short if parity odd (PF=0).
    78 cb JS rel8 D Valid Valid Jump short if sign (SF=1).
    74 cb JZ rel8 D Valid Valid Jump short if zero (ZF = 1).
    0F 87 cw JA rel16 D N.S. Valid Jump near if above (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cd JA rel32 D Valid Valid Jump near if above (CF=0 and ZF=0).
    0F 83 cw JAE rel16 D N.S. Valid Jump near if above or equal (CF=0). Not supported in 64-bit mode.
    0F 83 cd JAE rel32 D Valid Valid Jump near if above or equal (CF=0).
    0F 82 cw JB rel16 D N.S. Valid Jump near if below (CF=1). Not supported in 64-bit mode.
    0F 82 cd JB rel32 D Valid Valid Jump near if below (CF=1).
    0F 86 cw JBE rel16 D N.S. Valid Jump near if below or equal (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cd JBE rel32 D Valid Valid Jump near if below or equal (CF=1 or ZF=1).
    0F 82 cw JC rel16 D N.S. Valid Jump near if carry (CF=1). Not supported in 64-bit mode.
    0F 82 cd JC rel32 D Valid Valid Jump near if carry (CF=1).
    0F 84 cw JE rel16 D N.S. Valid Jump near if equal (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JE rel32 D Valid Valid Jump near if equal (ZF=1).
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 8F cw JG rel16 D N.S. Valid Jump near if greater (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cd JG rel32 D Valid Valid Jump near if greater (ZF=0 and SF=OF).
    0F 8D cw JGE rel16 D N.S. Valid Jump near if greater or equal (SF=OF). Not supported in 64-bit mode.
    0F 8D cd JGE rel32 D Valid Valid Jump near if greater or equal (SF=OF).
    0F 8C cw JL rel16 D N.S. Valid Jump near if less (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cd JL rel32 D Valid Valid Jump near if less (SF≠ OF).
    0F 8E cw JLE rel16 D N.S. Valid Jump near if less or equal (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cd JLE rel32 D Valid Valid Jump near if less or equal (ZF=1 or SF≠ OF).
    0F 86 cw JNA rel16 D N.S. Valid Jump near if not above (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cd JNA rel32 D Valid Valid Jump near if not above (CF=1 or ZF=1).
    0F 82 cw JNAE rel16 D N.S. Valid Jump near if not above or equal (CF=1). Not supported in 64-bit mode.
    0F 82 cd JNAE rel32 D Valid Valid Jump near if not above or equal (CF=1).
    0F 83 cw JNB rel16 D N.S. Valid Jump near if not below (CF=0). Not supported in 64-bit mode.
    0F 83 cd JNB rel32 D Valid Valid Jump near if not below (CF=0).
    0F 87 cw JNBE rel16 D N.S. Valid Jump near if not below or equal (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cd JNBE rel32 D Valid Valid Jump near if not below or equal (CF=0 and ZF=0).
    0F 83 cw JNC rel16 D N.S. Valid Jump near if not carry (CF=0). Not supported in 64-bit mode.
    0F 83 cd JNC rel32 D Valid Valid Jump near if not carry (CF=0).
    0F 85 cw JNE rel16 D N.S. Valid Jump near if not equal (ZF=0). Not supported in 64-bit mode.
    0F 85 cd JNE rel32 D Valid Valid Jump near if not equal (ZF=0).
    0F 8E cw JNG rel16 D N.S. Valid Jump near if not greater (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cd JNG rel32 D Valid Valid Jump near if not greater (ZF=1 or SF≠ OF).
    0F 8C cw JNGE rel16 D N.S. Valid Jump near if not greater or equal (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cd JNGE rel32 D Valid Valid Jump near if not greater or equal (SF≠ OF).
    0F 8D cw JNL rel16 D N.S. Valid Jump near if not less (SF=OF). Not supported in 64-bit mode.
    0F 8D cd JNL rel32 D Valid Valid Jump near if not less (SF=OF).
    0F 8F cw JNLE rel16 D N.S. Valid Jump near if not less or equal (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cd JNLE rel32 D Valid Valid Jump near if not less or equal (ZF=0 and SF=OF).
    0F 81 cw JNO rel16 D N.S. Valid Jump near if not overflow (OF=0). Not supported in 64-bit mode.
    0F 81 cd JNO rel32 D Valid Valid Jump near if not overflow (OF=0).
    0F 8B cw JNP rel16 D N.S. Valid Jump near if not parity (PF=0). Not supported in 64-bit mode.
    0F 8B cd JNP rel32 D Valid Valid Jump near if not parity (PF=0).
    0F 89 cw JNS rel16 D N.S. Valid Jump near if not sign (SF=0). Not supported in 64-bit mode.
    0F 89 cd JNS rel32 D Valid Valid Jump near if not sign (SF=0).
    0F 85 cw JNZ rel16 D N.S. Valid Jump near if not zero (ZF=0). Not supported in 64-bit mode.
    0F 85 cd JNZ rel32 D Valid Valid Jump near if not zero (ZF=0).
    0F 80 cw JO rel16 D N.S. Valid Jump near if overflow (OF=1). Not supported in 64-bit mode.
    0F 80 cd JO rel32 D Valid Valid Jump near if overflow (OF=1).
    0F 8A cw JP rel16 D N.S. Valid Jump near if parity (PF=1). Not supported in 64-bit mode.
    0F 8A cd JP rel32 D Valid Valid Jump near if parity (PF=1).
    0F 8A cw JPE rel16 D N.S. Valid Jump near if parity even (PF=1). Not supported in 64-bit mode.
    0F 8A cd JPE rel32 D Valid Valid Jump near if parity even (PF=1).
    0F 8B cw JPO rel16 D N.S. Valid Jump near if parity odd (PF=0). Not supported in 64-bit mode.
    0F 8B cd JPO rel32 D Valid Valid Jump near if parity odd (PF=0).
    0F 88 cw JS rel16 D N.S. Valid Jump near if sign (SF=1). Not supported in 64-bit mode.
    0F 88 cd JS rel32 D Valid Valid Jump near if sign (SF=1).
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).

--jeroen

Posted in Assembly Language, Development, Software Development, x86 | Leave a Comment »

GitHub – chip-red-pill/MicrocodeDecryptor

Posted by jpluimers on 2024/09/18

A few years back the way Intel Microcode updates were distributed deciphered so it became possible to extract and research the microcode of some processor models.

Repository: [Wayback/Archive] chip-red-pill/MicrocodeDecryptor

Read the rest of this entry »

Posted in Assembly Language, Development, Software Development, x64, x86 | Leave a Comment »

Wow: inside DOS Doom version 2, you can run another Doom (even arbitrary other code)

Posted by jpluimers on 2024/09/17

Repository:

A Video that way better explains how the hacks work to make this happen is at [Wayback] You can run Doom inside (DOS) Doom, for real. – YouTube

I have found a code execution exploit in the original DOS Doom 2 and ported a Chocolate Doom to it. And then Chocolate Heretic.

Attention: This does only work on the original DOS Doom2 version, no GZDoom or other source ports. This is a good thing as you don’t want code execution exploit on modern systems. People would abuse it to spread malicious code.

DOS version is available on Steam and you can use DosBox emulator to run it.

Copy kgdid.wad to the directory where you have doom2.exe and then in DosBox start it with command “doom2 -file kgdid.wad“.

(Copy other files too if you want to try them. Game injection has to be renamed to doomsav4.dsg)

Related:

–jeroen

Posted in Assembly Language, Development, DOOM, Games, MS-DOS, Power User, Software Development, x86 | Leave a Comment »

Homelab: 2U server, short depth, with front IO, based on Ampere Altra and Asrock Rack ALTRAD8UD-1L2T motherboard

Posted by jpluimers on 2024/06/27

For my link archive: [Wayback/Archive] Homelab: 2U server, short depth, with front IO, based on Ampere Altra and Asrock Rack ALTRAD8UD-1L2T motherboard

Pictures from the above post below the post signature.

Via [Wayback/Archive] Nicolas Massé on X: “I wrote an article on my last build for the Homelab: 2U server, short depth, with front IO, based on @AmpereComputing Altra and @ASROCKRACK ALTRAD8UD-1L2T motherboard. 🥳 ➡️ … /cc @Newegg @JoeSpeeds”.

Motherboard: [Wayback/Archive] Asrock Rack Bundle ALTRAD8UD-1L2T Deep Micro-ATX Server Motherboard Single Socket (LGA 4926) with Ampere Altra M128-26 128 cores & 2U passive cooler, Dual 10G – Integrated by Asrock Rack – Newegg.com

--jeroen

Read the rest of this entry »

Posted in ARM, Assembly Language, Development, Hardware Development, Power User | Leave a Comment »

x86_opcode_structure_and_instruction_overview.pdf on -= pnx.tf =-

Posted by jpluimers on 2024/06/18

It is more than a decade old but still the best reference around [Wayback/Archive] -= pnx.tf =- has [Wayback] x86_opcode_structure_and_instruction_overview.pdf

I found it via [Wayback/Archive] Alice Climent-Pommeret on Twitter: “I’ve just discovered this amazing document showing super clearly the relation between the opcode and the instruction 🤯 …”

Read the rest of this entry »

Posted in Assembly Language, Development, Software Development, x64, x86 | Leave a Comment »

Reminder to self: check to see if Delphi improved support for MMX/SSE/AVX instructions

Posted by jpluimers on 2024/06/13

This is from a long time ago [Wayback/Archive] Does Delphi support all MMX/SSE instructions? – Stack Overflow:

Delphi 2007 supports the MMX and SSE instruction sets. Certainly, Delphi 2010 and XE support up to the SSE4.2 instruction sets (but so far no support for AVX).

The [Wayback] Delphi 2005 Language Guide explained a bit, but no more recent PDF is available and the [Wayback/Archive] Embarcadero/IDERA Documentation Wiki is very much outdated on this information as per [Wayback/Archive] Talk:Assembler Syntax – RAD Studio:

Re: “Instruction Opcodes” The information on available instruction sets is outdated. D2010 and Fulcrum support the SIMD instruction sets all the way up to SSE4.2 (i.e., SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2).

–jeroen

Posted in Assembly Language, Delphi, Development, Software Development, x64, x86 | Leave a Comment »

BBC trip down memory lane – 8bitkick/BBCMicroBot: Runs your tweet on an 8-bit computer emulator

Posted by jpluimers on 2024/03/13

I am publishing this in order of the Twitter bot Social bots appearing, though I found this one later than the Apple ][ equivalent:

[Wayback/Archive] 8bitkick/BBCMicroBot: Runs your tweet on an 8-bit computer emulator which is a GitHub repository with full source code.

The odd thing is that I bumped into it while performing a [Wayback/Archive] bot that reads unicode – Twitter Search / Twitter (I was looking for a bot responding to fancy Unicode in account names and messages that makes using Twitter for visually impaired a pain to use wich I covered in To make Twitter a better place for visually impaired: please do without those fancy Unicode letters in your account and messages – Global Accessibility Awareness Day 2022 – #a11y).

It made me find this thread stat started in spring 2022:

Read the rest of this entry »

Posted in 6502, 6502 Assembly, Assembly Language, BASIC, BBC Micro B, Development, History, SocialMedia, Software Development, Twitter, TwitterBot | Leave a Comment »

BitSavers added some more Borland documentation in 2022 (most relevant for me: Assembler, Debugger, Profiler)

Posted by jpluimers on 2024/02/28

Below is a list of the Borland documentation that BitSavers added in 2022, ordered by relevance to me (and how I finally asked Peter Sawatzki if he still had the monochrome TDVIDEO.DLL he wrote for Turbo Debugger 3.0 for Windows):

Read the rest of this entry »

Posted in 8087, Algorithms, Assembly Language, Borland C++, C, C++, Debugging, Development, Floating point handling, Profiling, Software Development, Turbo Assembler, Turbo C, Turbo Debugger, Turbo Profiler, x86 | Leave a Comment »

ASRock Rack ALTRAD8U-1L2T is a mATX Motherboard for up to 128 Cores which supports IPMI!

Posted by jpluimers on 2023/05/28

I would really like to try out a system based on the interesting [Wayback/Archive] ASRock Rack ALTRAD8U-1L2T is a mATX Motherboard for up to 128 Cores specs from the PDF and ServeTheHome images below:

ASRock AMPERE ALTRADBU-1L2T
Product ASRock Rack Ampere Altra Family deep microATX motherboard
Power source Supports ATX PSU or 12V DC-in
Form Factor Deep Micro-ATX (9.6″ x 10.5″)
Processor System CPU
Chipset
1 Socket (LGA-4926) Ampere® Altra®/Altra® Max processor
System on chip
Memory Capacity 8 DDR4 288-pin DIMM Slots (1DPC); Supports:
RDIMM up to 256GB each, max. 3200MHz.
LRDIMM up to 256GB each, max. 3200MHz
Expansion PCIe slots

Others

SLOT7: PCIe4 x16
SLOT6: PCIe4 x16
SLOT5: PCIe4 x16
SLOT4: PCIe4 x16
4 SlimSAS (PCIe4 x8)
2 OCuLink (PCIe4 x4)
Storage M.2
SATA port
2 M.2 M-key (PCIe4 x4), supports 2280 form factor
N/A
Network RJ45 2 RJ45 (10GbE) by Intel® X550
1 RJ45 (1GbE) by Intel® i210
Management BMC
Dedicated IPMI
ASPEED AST2500: IPMI 2.0
1 RJ45 via Realtek RTL8211E
I/O USB
COM port
6 USB3.2 Gen1 ports: 4 rear Type-A, 2 via 19-pin header
1 (9-pin) header
Display Video 1 DB15 (VGA), 1 (15-pin) header
Security TPM Supports 13-pin (SPI) TPM modules

Read the rest of this entry »

Posted in AArch64/arm64, ARM, Assembly Language, Development, Hardware, Power User, Software Development | Leave a Comment »

The fundamentals of programming, a thread by @isotopp on Twitter

Posted by jpluimers on 2023/03/22

Kristian Kohntöpp publishes great DevOps related threads on Twitter. [Wayback/Archive] Thread by @isotopp “I am Kris, and I am 53 now. I learned programming on a Commodore 64 in 1983. My first real programming language (because C64 isn’t one) was 6502 assembler, forwards and backwards. “ is his response, about a year and a half ago, to a request by Julia Evans (@b0rk) that I also saved: [Wayback/Archive] Thread by @b0rk on Thread Reader App – Thread Reader App.

Her request: [Archive] 🔎Julia Evans🔍 on Twitter: “if you’ve been working in computing for > 15 years — are there fundamentals that you learned “on the job” 15 years ago that you think most people aren’t learning on the job today? (I’m thinking about how for example nobody has ever paid me to write C code)” / Twitter followed by [Archive] 🔎Julia Evans🔍 on Twitter: “I’m especially interested in topics that are still relevant today (like C programming) but are just harder to pick up at work now than they used to be” / Twitter.

The start of his thread is [Archive] Kris on Twitter: “@b0rk I am Kris, and I am 53 now. I learned programming on a Commodore 64 in 1983. My first real programming language (because C64 isn’t one) was 6502 assembler, forwards and backwards.” / Twitter.

Kristian’s story is very similar to mine, though I sooner stepped up the structured programming language ladder as at high school, I had access to an Apple //e with a Z80 card (yes, the SoftCard), so could run CP/M with Turbo Pascal 1.0 (later 2.0 and 3.0) which I partly described in The calculators that got me into programming (via: calculators : Algorithms for the masses – julian m bucknall), followed by early access at the close by university to PC’s running on 8086 and up. The computer science lab, now called Snellius, but back then known as CRI for Centraal RekenInstituut – is now had an educational deal with IBM, which means they switched from the PC/XT to the PC/AT with a 80286 processor as soon as the latter came out).

Read the rest of this entry »

Posted in 6502 Assembly, Assembly Language, Development, ESP32, ESP8266, Software Development, x86 | Leave a Comment »