pcjs/blog/2015/07/14
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2015-07-15 14:32:20 -07:00
..
README.md Fixed I/O port handling 2015-07-15 14:32:20 -07:00

Windows 95

First off, let me just say:

Happy Windows 95 RTM Day!

because today, July 14, 2015, is the 20th anniversary of Windows 95 RTM ("Release To Manufacturing").

Now, to business. Today is also the first day I tried running Windows 95 SETUP inside a PCjs machine. And it immediately failed:

Please wait while Setup initializes.
Windows requires a computer with an 80386 processor or higher.

The failing code:

0E36:08FD 06              PUSH     ES
0E36:08FE 1E              PUSH     DS
0E36:08FF 9C              PUSHF   
0E36:0900 33C0            XOR      AX,AX
0E36:0902 50              PUSH     AX
0E36:0903 9D              POPF    
0E36:0904 9C              PUSHF   
0E36:0905 58              POP      AX
0E36:0906 A90080          TEST     AX,8000
0E36:0909 7517            JNZ      0922
0E36:090B B80070          MOV      AX,7000
0E36:090E 50              PUSH     AX
0E36:090F 9D              POPF    
0E36:0910 FB              STI     
0E36:0911 9C              PUSHF   
0E36:0912 58              POP      AX
0E36:0913 A90070          TEST     AX,7000
0E36:0916 7405            JZ       091D
0E36:0918 B88603          MOV      AX,0386
0E36:091B EB08            JMP      0925
0E36:091D B88602          MOV      AX,0286
0E36:0920 EB03            JMP      0925
0E36:0922 B88600          MOV      AX,0086
0E36:0925 9D              POPF    
0E36:0926 1F              POP      DS
0E36:0927 07              POP      ES
0E36:0928 C3              RET     

was easily fixed with a change to x86cpu.js, allowing the IOPL bits to be modified in real-mode on an 80386. When I had previously tweaked setPS() to accomodate 80286/80386 discrimination logic in OS/2 1.0, there was no 80386 support in PCjs at that time, so it was sufficient to never allow the IOPL bits to change in real-mode.

Following the CPU test, Setup proceeded a bit farther:

EAX=00000001 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:0E4F E8D412          CALL     2126                 ;cycles=7

0E36:2126 E877E7          CALL     08A0
0E36:2129 0BC0            OR       AX,AX
0E36:212B 741D            JZ       214A
0E36:212D 6A00            PUSH     0000
0E36:212F 6A00            PUSH     0000
0E36:2131 68C700          PUSH     00C7
0E36:2134 E8C1F8          CALL     19F8
0E36:2137 83C406          ADD      SP,0006

EAX=00000001 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:2126 E877E7          CALL     08A0                 ;cycles=7

EAX=00000001 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33A EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08A0 56              PUSH     SI

EAX=00000001 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C338 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08A1 57              PUSH     DI                   ;cycles=3

EAX=00000001 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08A2 B80016          MOV      AX,1600              ;cycles=3 (WIN386CHECK)

EAX=00001600 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08A5 CD2F            INT      2F                   ;cycles=2

EAX=00001600 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08A7 A87F            TEST     AL,7F                ;cycles=133

EAX=00001600 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08A9 B80300          MOV      AX,0003              ;cycles=3

EAX=00000003 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08AC 752A            JNZ      08D8                 ;cycles=2

EAX=00000003 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08AE B80A16          MOV      AX,160A              ;cycles=3 (INSTALLCHECK)

EAX=0000160A EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08B1 CD2F            INT      2F                   ;cycles=2

EAX=0000160A EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08B3 0BC0            OR       AX,AX                ;cycles=133

EAX=0000160A EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08B5 740E            JZ       08C5                 ;cycles=2

EAX=0000160A EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08B7 B88046          MOV      AX,4680              ;cycles=3 (WINOLDAP30CHECK)

EAX=00004680 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08BA CD2F            INT      2F                   ;cycles=2

EAX=00004680 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08BC 0BC0            OR       AX,AX                ;cycles=133

EAX=00004680 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08BE 7516            JNZ      08D6                 ;cycles=2

EAX=00004680 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000202 V0 D0 I1 T0 S0 Z0 A0 P0 C0 
0E36:08D6 33C0            XOR      AX,AX                ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08D8 5F              POP      DI                   ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C338 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08D9 5E              POP      SI                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33A EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08DA C3              RET                           ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2129 0BC0            OR       AX,AX                ;cycles=11

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:212B 741D            JZ       214A                 ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:214A E88EE7          CALL     08DB                 ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33A EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08DB 1E              PUSH     DS                   ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C338 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08DC 06              PUSH     ES                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08DD 57              PUSH     DI                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C334 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08DE 56              PUSH     SI                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C332 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08DF 53              PUSH     BX                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C330 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08E0 52              PUSH     DX                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08E1 B81116          MOV      AX,1611              ;cycles=3 (WIN386GETSHELL)

EAX=00001611 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08E4 33DB            XOR      BX,BX                ;cycles=2

EAX=00001611 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08E6 CD2F            INT      2F                   ;cycles=2

EAX=00001611 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:08E8 0BC0            OR       AX,AX                ;cycles=133

EAX=00001611 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08EA B80000          MOV      AX,0000              ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08ED 7507            JNZ      08F6                 ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08F6 5A              POP      DX                   ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C330 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08F7 5B              POP      BX                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C332 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08F8 5E              POP      SI                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C334 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08F9 5F              POP      DI                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08FA 07              POP      ES                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C338 EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08FB 1F              POP      DS                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33A EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:08FC C3              RET                           ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:214D 0BC0            OR       AX,AX                ;cycles=11

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:214F 7415            JZ       2166                 ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2166 33C0            XOR      AX,AX                ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2168 C3              RET                           ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:0E52 0BC0            OR       AX,AX                ;cycles=11

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:0E54 7406            JZ       0E5C                 ;cycles=2

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33E EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:0E5C E80B13          CALL     216A                 ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C33C EBP=0000C444 ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:216A C8040000        ENTER    0004,00              ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C336 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:216E 57              PUSH     DI                   ;cycles=11

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C334 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:216F 56              PUSH     SI                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C332 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2170 52              PUSH     DX                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C330 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2171 50              PUSH     AX                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2172 B80030          MOV      AX,3000              ;cycles=3

EAX=00003000 EBX=00000000 ECX=00000018 EDX=00000000 
ESP=0000C32E EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2175 CD21            INT      21                   ;cycles=2

EAX=00001E03 EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C32E EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2177 86E0            XCHG     AH,AL                ;cycles=551

EAX=0000031E EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C32E EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:2179 A3F697          MOV      [97F6],AX            ;cycles=3

EAX=0000031E EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C32E EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:217C 58              POP      AX                   ;cycles=3

EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C330 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:217D 5A              POP      DX                   ;cycles=5

EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C332 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 
0E36:217E 813EF697000A    CMP      [97F6],0A00          ;cycles=5
1A4F:97F6  031E  0000  0000  0001  1A4F  0000  0000  1A4F   ........O.....O.

EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C332 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000287 V0 D0 I1 T0 S1 Z0 A0 P1 C1 
0E36:2184 7210            JC       2196                 ;cycles=7

EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C332 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000287 V0 D0 I1 T0 S1 Z0 A0 P1 C1 
0E36:2196 813EF6971403    CMP      [97F6],0314          ;cycles=7 (DOS 3.20 is the MINIMUM supported DOS version)

EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 
ESP=0000C332 EBP=0000C33A ESI=00004748 EDI=00004748 
SS=1A4F DS=1A4F ES=0000 FS=0000 GS=0304 PS=00000206 V0 D0 I1 T0 S0 Z0 A0 P1 C0 
0E36:219C 7308            JNC      21A6                 ;cycles=7

So far, so good, since I was running PC-DOS 3.30. However, the next error message I received was:

Not enough free Extended/XMS memory to run Setup.
Setup needs approximately 2816000 bytes of free Extended/XMS memory.

I was running a machine with only 1Mb of extended memory. Time to install more memory and try again.


OK, that was easy. The next problem was triggered by the CAB ("Diamond") decompression code in Windows 95 Setup, which uses all 32 bits of the 80386's 32-bit registers. That was not a problem, but by leaving stray bits in the upper halves of registers like EDX, it exposed a bug in the PCjs I/O instruction handlers, which neglected to mask EDX with 0xFFFF before performing port lookup, causing mysterious I/O failures that usually manifested themselves as hard disk I/O errors.

More later.

@jeffpar
July 14, 2015