Getting ready to roll out v1.18.4
This commit is contained in:
parent
b6e8eb8877
commit
e2c2284d2a
65 changed files with 9239 additions and 2587 deletions
|
|
@ -10,7 +10,7 @@ post it.
|
|||
|
||||
A Compaq DeskPro 386 test configuration is displayed below. It's located at:
|
||||
|
||||
> [/devices/pc/machine/compaq/deskpro386/ega/2048Kb/](/devices/pc/machine/compaq/deskpro386/ega/2048Kb/)
|
||||
> [/devices/pc/machine/compaq/deskpro386/ega/2048kb/](/devices/pc/machine/compaq/deskpro386/ega/2048kb/)
|
||||
|
||||
The configuration doesn't run, and the debugger can't disassemble 80386-specific code yet, but this is what I will be
|
||||
using to test and debug my changes over the next few months.
|
||||
|
|
|
|||
|
|
@ -1,406 +0,0 @@
|
|||
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](/modules/pcjs/lib/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](http://twitter.com/jeffpar)*
|
||||
*July 14, 2015*
|
||||
85
blog/2015/07/17/README.md
Normal file
85
blog/2015/07/17/README.md
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
Windows 95
|
||||
---
|
||||
|
||||
This week was the 20th anniversary of Windows 95 RTM ("Release To Manufacturing"). So I decided to throw a
|
||||
PCjs party and try running Windows 95 Setup inside a PCjs machine for the first time. Sadly, 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](/modules/pcjs/lib/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 be altered in real-mode.
|
||||
|
||||
The next problem was triggered by Setup's CAB ("Diamond") decompression code, which uses all 32 bits
|
||||
of the 80386's 32-bit registers. That in itself 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 lookups, causing mysterious I/O failures that usually manifested themselves as hard disk I/O errors.
|
||||
|
||||
Then PCjs crashed in the middle of the decompression of the first CAB file (MINI.CAB). It turned out the stack
|
||||
had been improperly adjusted because a "RETF n" instruction mistakenly believed that a stack switch had occurred.
|
||||
This was, in fact, a left-over condition from a protected-mode stack-switch. That was easily cleared.
|
||||
|
||||
Next, I discovered that I had never finished updating a handful of instructions to full 32-bit operation;
|
||||
namely, INC, DEC, NEG, NOT, TEST, MOVSB and MOVSW. Those are done now.
|
||||
|
||||
Then I ran into a couple of Windows 95 oddities. First, some kernel initialization code deliberately
|
||||
executed an invalid opcode (0x0F,0xFF) and expected its DPMI exception (0x06) handler to field the exception; that was
|
||||
fixed by flagging the opcode as genuinely invalid.
|
||||
|
||||
By default, PCjs marks opcodes as invalid *only* if they are truly invalid. PCjs considers the vast
|
||||
majority of unused/undocumented opcodes to be merely "undefined" until we've seen them in the wild. An instruction will
|
||||
be marked invalid if we either discover that real hardware generates an Invalid Opcode exception *or* that real software
|
||||
expects it to. Here, it was the latter.
|
||||
|
||||
> SIDEBAR: Don't be confused that Intel also refers to the Invalid Opcode exception (0x06) as a #UD or "undefined"
|
||||
opcode exception. Every opcode that triggers that exception is, by definition, defined: it's defined as invalid.
|
||||
I consider it a misnomer to refer to any invalid instruction as "undefined".
|
||||
|
||||
The other recent Windows 95 oddity I ran into was an instruction with multiple address-override (0x67) prefixes; the
|
||||
first prefix changed the instruction's addressing mode from 16-bit to 32-bit, and the second prefix changed it back to
|
||||
16-bit. PCjs should have simply ignored the second prefix.
|
||||
|
||||
With all of the above changes in place, PCjs v1.18.4 is able to run Windows 95 Setup a bit farther, but still far from
|
||||
completion. If you want to give it a spin yourself, start the machine below (click the "Run" button) and once it has
|
||||
finished booting, run SETUP from drive B, where the first Windows 95 diskette is already loaded.
|
||||
|
||||
NOTE: This is a pre-release version of Windows 95, as I don't currently have the RTM version on diskette.
|
||||
|
||||
To be continued....
|
||||
|
||||
[Embedded DeskPro 386](/devices/pc/machine/compaq/deskpro386/vga/4096kb/machine.xml "PCjs:deskpro386-vga-4096k::uncompiled:debugger")
|
||||
|
||||
*[@jeffpar](http://twitter.com/jeffpar)*
|
||||
*July 17, 2015*
|
||||
Loading…
Reference in a new issue