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,854 other subscribers

Some notes on OKI memory modules and toner cartridges for MC342 / C332, as toner cartridges physically seem compatible, but are not

Posted by jpluimers on 2022/01/14

I thought the C332 had the same engine as the MC342, as internally the printing part looks identical.

Boy, I was wrong. Toner cartridges, though fitting physically, are not compatible, despite having the same image drum part 44968301.

So the MC342 and C332 have different toners that are physically so similar that they fit, but electronically different.

While searching, I found the C332 by default has 1 gigabyte of memory and no upgrade option, but the MC342 only has 256 megabyte of memory and can be upgraded with one 512 megabyte module to 768 megabyte. This improves printing performance considerably.

The memory module part number is 01182908, which is horrendously expensive despite it being a PC4200 DDR2 SO-DIMM, which means PC5300 and higher should also work.

Historically between EUR 100 and EUR 350 ([Wayback] Oki 01182908 – Prijzen – Tweakers) or GBP 250 ([WayBack] OKI 512MB RAM Memory Upgrade for B721, B731, B840, C321, C330, C530, C531, C610, C612, C711, C712, C822, C823, C831, C833, C841, C843, MC332, MC342, MC351, MC352, MC361, MC362, MC561, MC562 printers)

So via [Archive.is] 512mb ddr2 sodimm – veilingkijker – nieuw en tweedehands I found [Wayback] ≥ Apple 512mb DDR2 667MHz SODIMM – Geheugens – Marktplaats.nl and tried it.

[Wayback/Archive.is] 512MB DDR2 144PIN for OKI Color Printers MC332dn, MC342 N MC332dn, MC342dn, MC342dnw, MC352dn MC352dn L: Amazon.de: Computers & Accessories

[Wayback] MC561 & C330 C711 C530 C610 512MB DDR2 SODIMM MEMORY RAM FOR OKI MC361 C831 C841 SERIES PRINTERS 70061901, 01182908 news9world.com

Installing the memory module is described at page 135 of [Wayback] 45002102EE7_MC562_UG_EN_29888.pdf

The models

[Wayback] MC342dn | DISCONTINUED PRODUCTS | Products | OKI Europe Ltd | Printers and Solutions

Default administrator credentials user admin, password aaaaaa.

[Wayback] Specification | C332 | C300 Series | OKI Europe Ltd

Default administrator credentials: user admin, password 999999.

The toners / accessories

[Wayback] MC342dn | Colour Multifunction Printers | Consumables, Accessories & Part Numbers | Printers, Printing Solutions and Managed Print Services

Options

Item Type Price Notes
20151216003033853-01182907_ram.png/01182907_ram.png256 MB RAM 01182907
20151214104557617-MEM256G_512D.png/MEM256G_512D.png512 MB RAM 01182908

Consumables

Item Type Price Notes
20151216000117113-44973536_toner_k.png/44973536_toner_k.pngBlack Small capacity toner cartridge 44973536 2,200 pages *1
Black Small capacity toner cartridge 44973544 2,200 pages *1
20151216000116917-44973533_toner_y.png/44973533_toner_y.pngYellow Small capacity toner cartridge 44973533 1,500 pages *1
Yellow Small capacity toner cartridge 44973541 1,500 pages *1
20151216000116982-44973534_toner_m.png/44973534_toner_m.pngMagenta Small capacity toner cartridge 44973534 1,500 pages *1
Magenta Small capacity toner cartridge 44973542 1,500 pages *1
20151216000117047-44973535_toner_c.png/44973535_toner_c.pngCyan Small capacity toner cartridge 44973535 1,500 pages *1
Cyan Small capacity toner cartridge 44973543 1,500 pages *1
20151216000109020-44968301_id.png/44968301_id.pngRainbow Image Drum 44968301 30,000 pages *2 *3

*1 Number of A4 pages yield compliant with ISO/IEC 19798.

*2 Average A4 life based on a typical office environment.

*3 30,000 K 20,000 CMY

[Wayback] C332 | Colour Printers | Consumables, Accessories & Part Numbers | OKI Europe Ltd

Options

Item Type Price Notes
20151216003933012-44472102_tray.gif/44472102_tray.gifAdditional Paper Tray 44472102 Capacity of 530 sheets of 80gsm.
20151216003933074-01314101_cabinet.gif/01314101_cabinet.gifCabinet 01314101
20170110060326773/WLAN_34.jpgWLAN Interface 45830202

Consumables

Item Type Price Notes
Black Toner cartridge 46508712 3,500 pages *1
Black Toner cartridge 46508716 1,500 pages *1
C332_HIGH_CAP_YELLOW_TONER_46508709_FRONTYellow Toner cartridge 46508709 3,000 pages *1
C332_STD_CAP_YELLOW_TONER_46508713_FRONTYellow Toner cartridge 46508713 1,500 pages *1
C332_HIGH_CAP_MAGENTA_TONER_46508710_FRONTMagenta Toner cartridge 46508710 3,000 pages *1
C332_HIGH_CAP_CYAN_TONER_46508711_FRONTCyan Toner cartridge 46508711 3,000 pages *1
C332_STD_CAP_CYAN_TONER_46508715_FRONTCyan Toner cartridge 46508715 1,500 pages *1
20151216000109020-44968301_id.png/44968301_id.pngCMYK Image Drum 44968301 30,000 pages *2 *3
20151216000101457-44472603_fuser.png/FUS-C4J.pngFuser unit 44472603 60,000 pages
20160928025643903-750_belt.png/BLT-C4H.pngTransfer Belt 44472202 60,000 pages

*1 Number of A4 pages yield compliant with ISO/IEC 19798.

*2 Average A4 life based on a typical office environment.

*3 30,000 K 20,000 CMY

 

MC342 toner in C332 printer

As soon as you put a black MC342 toner in a C332 toner, you will get this error in the display: SERVICE CALL 231:ERROR 08 (see picture and [Wayback/Archive.is] oki service call 231 error 08 – Google Search)

This error only goes away when:

  1. you re-insert the original toner cartridge
  2. then power-down and power-up the printer

I could not find C332 specific information for this error, but similar models do have it (partially) listed (note the 08 error for the C332 means the black toner cartridge, not the cyan one):

Toner sensors

 

Read the rest of this entry »

Posted in Hardware, LifeHacker, MC342 printer/scanner, OKI C332, OKI Printers, Power User, Printers | Leave a Comment »

Google 2FA “Sorry, we can’t fulfill this request at this time. Please try again later or use a different phone number.”

Posted by jpluimers on 2022/01/14

A while ago while first securing a bunch of accounts with a phone number, then later replacing them with 2FA hardware, I got this error message:

Sorry, we can’t fulfill this request at this time. Please try again later or use a different phone number.

This seems to have to do with the fact that if have gotten about 10 2FA messages a day, then it cannot be used to add a new phone number to an account. The phone number still can be used to verify existing accounts where the phone number was already registered.

Retrying after 24 hours usually works.

Related:

–jeroen

Posted in Google, GoogleAccount, Power User | Leave a Comment »

On learning vi/vim

Posted by jpluimers on 2022/01/13

I saved below thread (if you cannot read German: try Google Translate on it [Archive.is]).

The part that – translated – strikes me most is this:

A mini-challenge where I want to spent 15 minutes per day on: when I need some functionality, instead of hacking around, research how it really is supposed to be done and internalise that way.

This totally aligns with me “learn new things every day” mantra.

Also some interesting vi/vim resources and approaches are mentioned:

If you are better at reading tables or lists for commands, I can recommend [Wayback] Basic vi Commands (Computer Science Department, Colorado State University).

One of the hardest things for me to remember somehow is the search/replace syntax, though it is very similar to that of sed. Useful examples of most permutations are at [Wayback] Vi For Smarties – Lesson Eight under “Advanced Search and Replace”:

  1. Use :s/foo/bar/ to replace the first occurrence of the word foo on the current line with the word bar.
  2. Use :s/foo/bar/g to replace all occurrences of the word foo on the current line with the word bar.
  3. Use :%s/foo/bar/g to replace all occurrences of the word foo in the current file with the word bar. Leaving off the g at the end only replaces the first occurrence of foo on each line of the current file.
  4. Use :%s/foo//g to delete all occurrences of the word foo in the current file. Leaving off the percent sign (%), of course, only does this for the current line.
  5. Use :%s/foo/bar/gc to have Vi query you before each attempt to replace the word foo with the word bar.

It is part of a series of tutorials starting at [Wayback] Vi For Smarties – Lesson One, and after the last lesson directs to the in-depth – as prose written – tutorial series [Archive.is] Wayback: The Vi/Ex Editor (which, despite marked by “[ Editor’s Note: . This tutorial series is a “work in progress” and will evolve over time. We’ll announce each new addition and expand this table of contents.]” got ditched shortly after January 2006)

https://web.archive.org/web/20160108053134/http://www.networkcomputin…

.

Note that like sed, you can use a different search/replace character than /: [Wayback] vim – / in vi Search and replace? – Stack Overflow

  • Escape the / with \ like this: \/.
  • Use different search character than /, for instance ., or #.

Back to the twitter thread

[Archive.is] Das königliche Wir on Twitter: “Ich lerne jetzt vi(m). Klingt beknackt, oder? Aber ich hab überlegt: ich möchte effizienter werden, meinen Kram stressfreier bewältigen. Und ich finde, es bietet sich an da an Baustellen anzusetzen, die täglich relevant sind. Und vi(m) nutze ich in der Tat täglich. 1/”

Ich lerne jetzt vi(m).

Klingt beknackt, oder? Aber ich hab überlegt: ich möchte effizienter werden, meinen Kram stressfreier bewältigen. Und ich finde, es bietet sich an da an Baustellen anzusetzen, die täglich relevant sind. Und vi(m) nutze ich in der Tat täglich.

Aber auch wenn ich ihn nutze und über den »Hilfe, wie komm ich aus dem Editor wieder raus?!«-Witz nur sehr müde die Augen rolle gehe ich davon aus, dass ich nicht mal einen Bruchteil der Möglichkeiten ausschöpfe, die er bietet (1. Release 1976, älter als ich!). Das ist spannend.

Das ist jetzt meine Mini-Challenge, auf die ich jeden Tag eine Viertelstunde verwenden will: wenn ich eine Funktion brauche mich nicht mehr drum herum zu hacken, sondern recherchieren wie es richtig geht und das dann gefälligst auch verinnerlichen. Mal sehen, ob das so klappt

In dem Zuge will ich auch wieder verstärkt (neo)mutt in Verbindung mit vim nutzen – das wäre ein wunderbares tägliches Training 😎 Mails schreiben muss man irgendwie immer.

neomutt bietet leider auch einen Eimer voll Funktionen, die ich noch nicht ordentlich nutze. Gnah.

An euren Replies erkenne ich, dass das mit dem »sich die Kürzel merken« echt heikel zu sein scheint 🤔 Wie handhabt ihr das im Alltag? Einfach ein paar Basics wie :u und CTRL+r und gut ist? Ich bin neugierig. Oder nutzt ihr alle nano? (Ich glaub, dann muss ich entfolgen) 😂

Nur als kleinen Zwischenstand: nach dem Lesen eurer Antworten schließe ich, dass ich mich mit meinem Kenntnisstand nicht verstecken muss 😂 Da hat mir der virtuelle Schulterblick schon weiter geholfen.

vi(m), weil ich Admin bin und dieses Tool auf jedem System und ohne X-Geraffels üblicherweise vorfinde (wenn auch bei neueren Installationen dieser absurde „visual mode“ der Default ist 😳). Auch unter (Open)Solaris, IRIX, was weiß ich.

Antworten:

Patrick Ben Koetter (@patrickbkoetter)

Ich habe diverse Plugins ausprobiert und lande immer wieder bei “normal“, weil ich einfach nicht die Disziplin aufbringe das Zeug richtig zu üben.

Marcel Weinberg (@winem_)

Denke so geht es vielen, die eben teilweise auch schon viele Jahre in der IT sind. Ist dir vimtutor bekannt? Den regelmäßig durchzutanzen hilft auch etwas, auch wenn man einiges immer mal vergisst oder einfach nicht nutzt.

Kristian Köhntopp (@isotopp)

vi movement Kommandos haben System. Erkenne und lerne das System. hjkl + prefix+hjkl, Marken, prefix+jump to mark und so weiter.

Und bleibe von den verblödeten Plugins weg. Die braucht kein Mensch und machen vim nur langsam im Start und kompliziert.

Boris (@k3rvyn)

Was mich so richtig weiter gebracht hat, war dieser Talk:
https://www.youtube.com/watch?v=5r6yzFEXajQ

winfreak (@winfreak)

Ich bilde mir kleine Merkphrasen für movements…
Aus „ciw“ wird „change inner word“, z.B.
Das kann ich mir deutlich besser merken.

–jeroen

Read the rest of this entry »

Posted in *nix, *nix-tools, Development, Power User, Scripting, Software Development, vi/vim | Leave a Comment »

The Definitive T430 Modding Guide | by George Kushnir (https://n4ru.it) | Medium

Posted by jpluimers on 2022/01/13

Lots of ideas, also for the W530 model: [Wayback] The Definitive T430 Modding Guide | by George Kushnir (https://n4ru.it) | Medium.

–jeroen

Posted in Development, Hardware Development, Power User, ThinkPad | Leave a Comment »

Patching ESXi so you can boot a MacOS virtual machine from it

Posted by jpluimers on 2022/01/13

This is totally opposite to yesterday’s Secure Boot post: [Wayback/Archive.is] shanyungyang/esxi-unlocker: VMware ESXi macOS

macOS Unlocker V3.0.2 for VMware ESXi
=====================================

1. Introduction
---------------

Unlocker 3 for ESXi is designed for VMware ESXi 6.5, 6.7 and 7.0

The patch code carries out the following modifications dependent on the product
being patched:

* Fix vmware-vmx to allow macOS to boot
* Fix libvmkctl to allow vSphere to control the guest

The code is written in Python as it makes the Unlocker easier to run and
maintain on ESXi.

+-----------------------------------------------------------------------------+
| IMPORTANT:                                                                  |
| ==========                                                                  |
|                                                                             |
| Always uninstall the previous version of the Unlocker before using a new    |
| version. Failure to do this could render VMware unusable.                   |
|                                                                             |
+-----------------------------------------------------------------------------+

2. Installation
---------------
Copy the distribution file to the ESXi host datastore using scp or some other
data transfer system. If you want to use the source version (i.e. from GIT) see
"5. Building" fist.

Decompress the file from the ESXi console or via SSH:

    tar xzvf esxi-unlocker-xxx.tgz

(xxx - will be the version number, for example, 300)

Run the command from the terminal:

    ./esxi-install.sh

Finally reboot the server.

3. Uninstallation
-----------------
Open the ESXi console or login via SSH and change to the folder where the files were extracted.

Run the command from the terminal:

    ./esxi-uninstall.sh

Finally reboot the server.

4. Notes
--------
A. There is a command added called esxi-smctest.sh which can show if the patch is successful. It must be run from a
terminal or SSH session. The output should be:

/bin/vmx
smcPresent = true
custom.vgz     false   32486592 B

Note: The uncompressed size reported for custom.vgz will vary depending on the ESXi version.

B. The unlocker can be temporarily disabled during boot by editing the boot options and adding "nounlocker".

5. Building
-----------
If you want to use a version which is not availbale as a distribution (e.g. the code from "master" branch)
you need to first build the package.

Checkout the repository:

    git clone https://github.com/shanyungyang/esxi-unlocker.git

(if you don't have git installed you can download ZIP archive from GitHub instead)

Enter the directory and build:
    
    cd esxi-unlocker
    ./esxi-build.py

If everything went correctly the ouput should be:

    ESXi-Build for macOS

    Timestamping files...

    Creating unlocker.tgz...
    etc/
    etc/rc.local.d/
    etc/rc.local.d/unlocker.py

    Creating esxi-unlocker-301.tgz...
    unlocker.tgz
    esxi-install.sh
    esxi-uninstall.sh
    esxi-smctest.sh
    readme.txt

The package you need to copy in the example above is esxi-unlocker-301.tgz (NOT unlocker.tgz!).

6. Thanks
---------

Thanks to Zenith432 for originally building the C++ unlocker and Mac Son of Knife
(MSoK) for all the testing and support.

Thanks also to Sam B for finding the solution for ESXi 6 and helping me with
debugging expertise. Sam also wrote the code for patching ESXi ELF files and
modified the unlocker code to run on Python 3 in the ESXi 6.5 environment.

History
-------
26/09/18 3.0.0 - First release
01/05/20 3.0.1 - Fix for ESXi 7.0
10/18/20 3.0.1 - Fix for ESXi 7.0 U1 (7.0.1)

(c) 2011-2018 Dave Parsons

–jeroen

Posted in Apple, ESXi6, ESXi6.5, ESXi6.7, ESXi7, Mac OS X / OS X / MacOS, Power User, Virtualization, VMware, VMware ESXi | Leave a Comment »

A few tools on my list for research: fswatch, entr, ack and ag

Posted by jpluimers on 2022/01/12

Based on the below tweet and replies, these tools are not on my research list:

[Archive.is] Aaron Patterson on Twitter: “Here is my “autotest for lazy people”. It watches for changes in the lib or test directory, and runs rake test on change. There are definitely better, purpose built tools for this. But I am lazy…”

–jeroen

Posted in *nix, *nix-tools, Development, fgrep, find, grep, Power User, Scripting, Software Development | Leave a Comment »

On my research list: “ESXi” “Secure Boot” – Google Search

Posted by jpluimers on 2022/01/12

On my research list: [Wayback] “ESXi” “Secure Boot” – Google Search.

Some links about it:

–jeroen

Posted in ESXi6, ESXi6.5, ESXi6.7, ESXi7, Power User, Virtualization, VMware, VMware ESXi | Leave a Comment »

Covid-19/Coronavirus – Mondneusmaskers en andere PBE: Instructie beschermingsmiddelen en zelftests mantelzorgers en pgb | Publicatie | Rijksoverheid.nl

Posted by jpluimers on 2022/01/12

[Wayback/Archive Instructie beschermingsmiddelen en zelftests mantelzorgers en pgb | Publicatie | Rijksoverheid.nl

Instructie beschermingsmiddelen en zelftests mantelzorgers en pgb

Mantelzorgers en pgb-gefinancierde zorgverleners kunnen bij hun werk gebruikmaken van persoonlijke beschermingsmiddelen of mondneuskapjes. Cliënten kunnen onder voorwaarden gebruik maken van gratis zelftests. In deze instructie staat wanneer zorgverleners persoonlijke beschermingsmiddelen kunnen aanvragen. En wanneer cliënten zelftests kunnen aanvragen.

Download ‘Instructie beschermingsmiddelen en zelftests mantelzorgers en pgb (staand, A3)’1/2

[Wayback] PDF document | 1 pagina | 95 kB

Publicatie | 08-10-2021

Download ‘Instructie beschermingsmiddelen en zelftests mantelzorgers en pgb (liggend, A4)’2/2

[Wayback] PDF document | 2 pagina’s | 130 kB

Publicatie | 08-10-2021

Via:

–jeroen

Posted in LifeHacker, Power User | Leave a Comment »

Het moment om Schiphol te laten krimpen is nu – Follow the Money – Platform voor onderzoeksjournalistiek

Posted by jpluimers on 2022/01/12

[Wayback/Archive] Het moment om Schiphol te laten krimpen is nu – Follow the Money – Platform voor onderzoeksjournalistiek

Via [Archive] Eric Smit on Twitter: “In Europa zijn boekwerken volgeschreven over de vraag hoe je een groeiende capaciteit tussen luchtvaartmaatschappijen verdeelt, maar is er nooit nagedacht over de consequenties van een afnemende capaciteit … via @ftm_nl” / Twitter

jeroen

Posted in Uncategorized | Leave a Comment »

Delphi SetRoundMode: gets sets part of the 8087 control word (related: GetRoundMode and TFPURoundingMode)

Posted by jpluimers on 2022/01/12

I thought I had written about this a long time ago, as Math.SetRoundMode (and now System.Math.SetRoundMode) has been introduced since at least Delphi 2007. There are also related GetRoundMode and TFPURoundingMode.

Delphi 2009 also introduced TFPUPrecisionMode, GetPrecisionMode and SetPrecisionMode.

Delphi 2010 also introduced TFPUException, TFPUExceptionMask, TFPUPrecisionMode, TFPURoundingMode, ClearExceptions, GetExceptionMask, and SetExceptionMask.

Delphi XE2 introduced namespaces, so prepended the unit Math with the namespace System. to become unit System.Math. It also introduced $EXCESSPRECISION (for x64), GetMXCSR, SetMXCSR, ResetMXCSRClearFPUExceptionsTSSEException, TSSEExceptionMask, GetSSEExceptionMask, SetSSEExceptionMask, ClearSSEExceptions, TSSERoundingMode, GetSSERoundMode, SetSSERoundMode.

The documentation basically only had formatting changes. This is the most important part of SetRoundMode:

function SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode;

Call SetRoundingMode to specify how the FPU handles rounding issues. The rounding mode can be any of the following values:

Value
Meaning
rmNearest
Rounds to the closest value.
rmDown
Rounds toward negative infinity.
rmUp
Rounds toward positive infinity.
rmTruncate
Truncates the value, rounding positive numbers down and negative numbers up.

This is the most important bit of SetPrecisionMode:

function SetPrecisionMode(const Precision: TFPUPrecisionMode): TFPUPrecisionMode;

Call SetPrecisionMode to specify the level of precision that the FPU (floating-point unit) uses for floating-point calculations. The precision control mode can be any of the following values:

Value
Meaning
pmSingle
single precision
pmReserved
not used
pmDouble
double precision
pmExtended
extended precision

SetPrecisionMode returns the previous precision control mode.

Both are functions, so so they return the previous value which you can use to set it back later: this is important as it is a process wide. SetPrecisionMode documents this, but SetRoundMode does not!

Global side effects and avoiding them

Since SetRoundMode and SetPrecisionMode set the 8087 CW (and on XE2 and up SetMXCSR), it means all usual Set8087CW caveats apply: changing the global 8087 CW setting impacts all running code, which means that threads, DLLs (especially ones written in other languages), etc might malfunction. You can find some of the caveat effects on my bog by searching for [Wayback] Set8087CW site:wiert.me – Google Search.

If you want to avoid global side effects, you might try the solution in [Wayback] c# – What is the equivalent of Math.Round() with MidpointRounding.AwayFromZero in Delphi? – Stack Overflow by [Wayback] Andreas Rejbrand.

On MXCSR

[Wayback/Archive.is] SSE Instruction Set (not sure why Embarcadero used this as reference material from their docwiki, but hey, Intel documentation is likely outdated):

SSE — MXCSR

The MXCSR register is a 32-bit register containing flags for control and status information regarding SSE instructions. As of SSE3, only bits 0-15 have been defined.

Pnemonic Bit Location Description
FZ bit 15 Flush To Zero
R+ bit 14 Round Positive
R- bit 13 Round Negative
RZ bits 13 and 14 Round To Zero
RN bits 13 and 14 are 0 Round To Nearest
PM bit 12 Precision Mask
UM bit 11 Underflow Mask
OM bit 10 Overflow Mask
ZM bit 9 Divide By Zero Mask
DM bit 8 Denormal Mask
IM bit 7 Invalid Operation Mask
DAZ bit 6 Denormals Are Zero
PE bit 5 Precision Flag
UE bit 4 Underflow Flag
OE bit 3 Overflow Flag
ZE bit 2 Divide By Zero Flag
DE bit 1 Denormal Flag
IE bit 0 Invalid Operation Flag

FZ mode causes all underflowing operations to simply go to zero. This saves some processing time, but loses precision.

The R+R-RN, and RZ rounding modes determine how the lowest bit is generated. Normally, RN is used.

PMUMMMZMDM, and IM are masks that tell the processor to ignore the exceptions that happen, if they do. This keeps the program from having to deal with problems, but might cause invalid results.

DAZ tells the CPU to force all Denormals to zero. A Denormal is a number that is so small that FPU can’t renormalize it due to limited exponent ranges. They’re just like normal numbers, but they take considerably longer to process. Note that not all processors support DAZ.

PEUEMEZEDE, and IE are the exception flags that are set if they happen, and aren’t unmasked. Programs can check these to see if something interesting happened. These bits are “sticky”, which means that once they’re set, they stay set forever until the program clears them. This means that the indicated exception could have happened several operations ago, but nobody bothered to clear it.

DAZ wasn’t available in the first version of SSE. Since setting a reserved bit in MXCSR causes a general protection fault, we need to be able to check the availability of this feature without causing problems. To do this, one needs to set up a 512-byte area of memory to save the SSE state to, using fxsave, and then one needs to inspect bytes 28 through 31 for the MXCSR_MASK value. If bit 6 is set, DAZ is supported, otherwise, it isn’t.

Architectures Software Developer’s Manual: Intel® 64 and IA-32 includes supporting processors programming environment and architecture.

[Wayback] Intel® 64 and IA-32 Architectures Developer’s Manual: Vol. 1

[Wayback]

https://web.archive.org/web/20130603170547/http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf

Documentation links

Some of the documentation links (that regrettably do not explain what happens behind the scenes with the 8087 CW) are these:

 

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »