VOGONS


Windows NT 3.1/4.0 STOP 0x0000007B?

Topic actions

Reply 20 of 24, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just found out something strange booting the Bochs' openBSD floppy disk. It executes a ATAPI reset command, then a ATAPI IDENTIFY, then a ATAPI PACKET command, sends one word, then says "wdc1:0:0: device timeout, c_bcount=0, c_skip=0"?

Edit: It seems to be executing the instruction F2666F, which is a REPNZ OUTSW? But the REPNZ is invalidated, thus not active? What should happen in this case?

Edit: Just changed the REPNZ instruction to actually act as a normal REP for INS and OUTS instructions, instead of invalidating the REPNZ prefix altogether. That should fix that bug.

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 21 of 24, by superfury

User metadata
Rank l33t++
Rank
l33t++

Thinking about it, that 8 sectors.... That's exactly 4KB? Perhaps that has something to do with the issue?

Perhaps something to do with paging or something to do with it?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 22 of 24, by superfury

User metadata
Rank l33t++
Rank
l33t++

Hmmm... The final INSW was a word from the 8th hard disk sector(loading sector 0x48 as the next sector, becoming busy for 60000ns('reading the next sector from disk', with an IRQ following that delay to start reading the next sector from the disk controller)). It has 0x37 sectors(started out with 0x3F sectors) left to read from the disk. The next sector is supposed to be read at logical memory location 0x

At that point, I see no more disk access(except the status register), no page fault of any kind.

After that, I see it being busy for some time, then the status register becomes 0x90(when it raises the IRQ)?

It seems like it's resetting the device before the IRQ arrives? That 0x90 is actually Windows NT having reset the device.

Edit: Hmmm.... With earlier sectors, it reads the status register twice, reading 0x58. But the final one(when it resets after that), it reads it for a third time(also finding 0x58)?

Edit: Hmmm... I see the status register reads after a new sector arrives at EIP of 80407004. The REP INSW is at 80407042.

The status register reads are always at 0x80407004, including the strange third status register read after the sector where it resets the ATA controller?

Edit: This is what happens after the second status register being read:

Filename
debugger_Windows_NT31_booting_crashduringfinalsector_aftersecondstatusread.7z
File size
1.85 MiB
Downloads
33 downloads
File comment
What happens after the second status register read.
File license
Fair use/fair dealing exception

Anyone?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 23 of 24, by superfury

User metadata
Rank l33t++
Rank
l33t++

Hmmm.... Looking through the log, I don't see the PUSH EBX instruction actually writing memory(immediately after the very first CALL instruction):

0008:80010e1b E8 A0 0A 00 00 calld 800118c0	RealRAM(p):00010e5a=24($); RAM(p):00010e5a=24($); Physical(p):00010e5a=24($); Paged(p):80010e5a=24($); Normal(p):80010e5a=24($); Paged(w):801ac6e0=20( ); Physical(w):001ac6e0=20( ); RAM(w):001ac6e0=20( ); RealRAM(w):0014c6e0=20( ); Paged(w):801ac6e1=0e(); Physical(w):001ac6e1=0e(); RAM(w):001ac6e1=0e(); RealRAM(w):0014c6e1=0e(); Paged(w):801ac6e2=01(); Physical(w):001ac6e2=01(); RAM(w):001ac6e2=01(); RealRAM(w):0014c6e2=01(); Paged(w):801ac6e3=80(?); Physical(w):001ac6e3=80(?); RAM(w):001ac6e3=80(?); RealRAM(w):0014c6e3=80(?)
Registers:
EAX: ff8fd590 EBX: ff8ff310 ECX: 00000003 EDX: 0000000e
ESP: 801ac6e4 EBP: 00000000 ESI: ff8fd648 EDI: ff8fdbd8
CS: 0008 DS: 0023 ES: 0023 FS: 0030 GS: 0000 SS: 0010 TR: 0028 LDTR: 0000
EIP: 80010e1b EFLAGS: 00000282
CR0: e005001f CR1: 00000000 CR2: c1040000 CR3: 00030000
CR4: 00000000
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: 00000000 DR7: 00000000
GDTR: 00008003500003ff IDTR: 00008003540007ff
FLAGSINFO: 0000000000ipfavr0n00odItSz0a0p1c
0008:800118c0 53 push ebx RealRAM(p):000118c0=53(S); RAM(p):000118c0=53(S); Physical(p):000118c0=53(S); Paged(p):800118c0=53(S); Normal(p):800118c0=53(S); RealRAM(p):000118c1=56(V); RAM(p):000118c1=56(V); Physical(p):000118c1=56(V); Paged(p):800118c1=56(V); Normal(p):800118c1=56(V); RealRAM(p):000118c2=57(W); RAM(p):000118c2=57(W); Physical(p):000118c2=57(W); Paged(p):800118c2=57(W); Normal(p):800118c2=57(W); RealRAM(p):000118c3=8b(?); RAM(p):000118c3=8b(?); Physical(p):000118c3=8b(?); Paged(p):800118c3=8b(?); Normal(p):800118c3=8b(?); RealRAM(p):000118c4=44(D); RAM(p):000118c4=44(D); Physical(p):000118c4=44(D); Paged(p):800118c4=44(D); Normal(p):800118c4=44(D); RealRAM(p):000118c5=24($); RAM(p):000118c5=24($); Physical(p):000118c5=24($); Paged(p):800118c5=24($); Normal(p):800118c5=24($); RealRAM(p):000118c6=10(); RAM(p):000118c6=10(); Physical(p):000118c6=10(); Paged(p):800118c6=10(); Normal(p):800118c6=10(); RealRAM(p):000118c7=2a(*); RAM(p):000118c7=2a(*); Physical(p):000118c7=2a(*); Paged(p):800118c7=2a(*); Normal(p):800118c7=2a(*); RealRAM(p):000118c8=c9(?); RAM(p):000118c8=c9(?); Physical(p):000118c8=c9(?); Paged(p):800118c8=c9(?); Normal(p):800118c8=c9(?); RealRAM(p):000118c9=8b(?); RAM(p):000118c9=8b(?); Physical(p):000118c9=8b(?); Paged(p):800118c9=8b(?); Normal(p):800118c9=8b(?); RealRAM(p):000118ca=70(p); RAM(p):000118ca=70(p); Physical(p):000118ca=70(p); Paged(p):800118ca=70(p); Normal(p):800118ca=70(p); RealRAM(p):000118cb=28((); RAM(p):000118cb=28((); Physical(p):000118cb=28((); Paged(p):800118cb=28((); Normal(p):800118cb=28((); RealRAM(p):000118cc=8a(?); RAM(p):000118cc=8a(?); Physical(p):000118cc=8a(?); Paged(p):800118cc=8a(?); Normal(p):800118cc=8a(?); RealRAM(p):000118cd=5c(\); RAM(p):000118cd=5c(\); Physical(p):000118cd=5c(\); Paged(p):800118cd=5c(\); Normal(p):800118cd=5c(\); RealRAM(p):000118ce=24($); RAM(p):000118ce=24($); Physical(p):000118ce=24($); Paged(p):800118ce=24($); Normal(p):800118ce=24($); RealRAM(p):000118cf=2c(,); RAM(p):000118cf=2c(,); Physical(p):000118cf=2c(,); Paged(p):800118cf=2c(,); Normal(p):800118cf=2c(,); RealRAM(p):000118d0=80(?); RAM(p):000118d0=80(?); Physical(p):000118d0=80(?); Paged(p):800118d0=80(?); Normal(p):800118d0=80(?); RealRAM(p):000118d1=fb(?); RAM(p):000118d1=fb(?); Physical(p):000118d1=fb(?); Paged(p):800118d1=fb(?); Normal(p):800118d1=fb(?); RealRAM(p):000118d2=02(); RAM(p):000118d2=02(); Physical(p):000118d2=02(); Paged(p):800118d2=02(); Normal(p):800118d2=02(); RealRAM(p):000118d3=75(u); RAM(p):000118d3=75(u); Physical(p):000118d3=75(u); Paged(p):800118d3=75(u); Normal(p):800118d3=75(u); RealRAM(p):000118d4=02(); RAM(p):000118d4=02(); Physical(p):000118d4=02(); Paged(p):800118d4=02(); Normal(p):800118d4=02(); RealRAM(p):000118d5=b1(?); RAM(p):000118d5=b1(?); Physical(p):000118d5=b1(?); Paged(p):800118d5=b1(?); Normal(p):800118d5=b1(?); RealRAM(p):000118d6=10(); RAM(p):000118d6=10(); Physical(p):000118d6=10(); Paged(p):800118d6=10(); Normal(p):800118d6=10(); RealRAM(p):000118d7=80(?); RAM(p):000118d7=80(?); Physical(p):000118d7=80(?); Paged(p):800118d7=80(?); Normal(p):800118d7=80(?); RealRAM(p):000118d8=c1(?); RAM(p):000118d8=c1(?); Physical(p):000118d8=c1(?); Paged(p):800118d8=c1(?); Normal(p):800118d8=c1(?); RealRAM(p):000118d9=30(0); RAM(p):000118d9=30(0); Physical(p):000118d9=30(0); Paged(p):800118d9=30(0); Normal(p):800118d9=30(0); RealRAM(p):000118da=51(Q); RAM(p):000118da=51(Q); Physical(p):000118da=51(Q); Paged(p):800118da=51(Q); Normal(p):800118da=51(Q); RealRAM(p):000118db=50(P); RAM(p):000118db=50(P); Physical(p):000118db=50(P); Paged(p):800118db=50(P); Normal(p):800118db=50(P); RealRAM(p):000118dc=e8(?); RAM(p):000118dc=e8(?); Physical(p):000118dc=e8(?); Paged(p):800118dc=e8(?); Normal(p):800118dc=e8(?); RealRAM(p):000118dd=2f(/); RAM(p):000118dd=2f(/); Physical(p):000118dd=2f(/); Paged(p):800118dd=2f(/); Normal(p):800118dd=2f(/); RealRAM(p):000118de=0c(); RAM(p):000118de=0c(); Physical(p):000118de=0c(); Paged(p):800118de=0c(); Normal(p):800118de=0c(); RealRAM(p):000118df=00( ); RAM(p):000118df=00( ); Physical(p):000118df=00( ); Paged(p):800118df=00( ); Normal(p):800118df=00( ); RealRAM(p):000118e0=00( ); RAM(p):000118e0=00( ); Physical(p):000118e0=00( ); Paged(p):800118e0=00( ); Normal(p):800118e0=00( ); RealRAM(p):000118e1=8b(?); RAM(p):000118e1=8b(?); Physical(p):000118e1=8b(?); Paged(p):800118e1=8b(?); Normal(p):800118e1=8b(?); RealRAM(p):000118e2=c8(?); RAM(p):000118e2=c8(?); Physical(p):000118e2=c8(?); Paged(p):800118e2=c8(?); Normal(p):800118e2=c8(?); RealRAM(p):000118e3=0b(); RAM(p):000118e3=0b(); Physical(p):000118e3=0b(); Paged(p):800118e3=0b(); Normal(p):800118e3=0b(); RealRAM(p):000118e4=c9(?); RAM(p):000118e4=c9(?); Physical(p):000118e4=c9(?); Paged(p):800118e4=c9(?); Normal(p):800118e4=c9(?); RealRAM(p):000118e5=0f(); RAM(p):000118e5=0f(); Physical(p):000118e5=0f(); Paged(p):800118e5=0f(); Normal(p):800118e5=0f(); RealRAM(p):000118e6=84(?); RAM(p):000118e6=84(?); Physical(p):000118e6=84(?); Paged(p):800118e6=84(?); Normal(p):800118e6=84(?); RealRAM(p):000118e7=03(); RAM(p):000118e7=03(); Physical(p):000118e7=03(); Paged(p):800118e7=03(); Normal(p):800118e7=03(); RealRAM(p):000118e8=01(); RAM(p):000118e8=01(); Physical(p):000118e8=01(); Paged(p):800118e8=01(); Normal(p):800118e8=01(); RealRAM(p):000118e9=00( ); RAM(p):000118e9=00( ); Physical(p):000118e9=00( ); Paged(p):800118e9=00( ); Normal(p):800118e9=00( ); RealRAM(p):000118ea=00( ); RAM(p):000118ea=00( ); Physical(p):000118ea=00( ); Paged(p):800118ea=00( ); Normal(p):800118ea=00( ); RealRAM(p):000118eb=8b(?); RAM(p):000118eb=8b(?); Physical(p):000118eb=8b(?); Paged(p):800118eb=8b(?); Normal(p):800118eb=8b(?); RealRAM(p):000118ec=44(D); RAM(p):000118ec=44(D); Physical(p):000118ec=44(D); Paged(p):800118ec=44(D); Normal(p):800118ec=44(D); RealRAM(p):000118ed=24($); RAM(p):000118ed=24($); Physical(p):000118ed=24($); Paged(p):800118ed=24($); Normal(p):800118ed=24($); RealRAM(p):000118ee=28((); RAM(p):000118ee=28((); Physical(p):000118ee=28((); Paged(p):800118ee=28((); Normal(p):800118ee=28((); RealRAM(p):000118ef=89(?); RAM(p):000118ef=89(?); Physical(p):000118ef=89(?); Paged(p):800118ef=89(?); Normal(p):800118ef=89(?); RealRAM(p):000118f0=41(A); RAM(p):000118f0=41(A); Physical(p):000118f0=41(A); Paged(p):800118f0=41(A); Normal(p):800118f0=41(A); RealRAM(p):000118f1=0c(); RAM(p):000118f1=0c(); Physical(p):000118f1=0c(); Paged(p):800118f1=0c(); Normal(p):800118f1=0c(); RealRAM(p):000118f2=8b(?); RAM(p):000118f2=8b(?); Physical(p):000118f2=8b(?); Paged(p):800118f2=8b(?); Normal(p):800118f2=8b(?); RealRAM(p):000118f3=44(D); RAM(p):000118f3=44(D); Physical(p):000118f3=44(D); Paged(p):800118f3=44(D); Normal(p):800118f3=44(D); RealRAM(p):000118f4=24($); RAM(p):000118f4=24($); Physical(p):000118f4=24($); Paged(p):800118f4=24($); Normal(p):800118f4=24($); RealRAM(p):000118f5=14(); RAM(p):000118f5=14(); Physical(p):000118f5=14(); Paged(p):800118f5=14(); Normal(p):800118f5=14(); RealRAM(p):000118f6=89(?); RAM(p):000118f6=89(?); Physical(p):000118f6=89(?); Paged(p):800118f6=89(?); Normal(p):800118f6=89(?); RealRAM(p):000118f7=41(A); RAM(p):000118f7=41(A); Physical(p):000118f7=41(A); Paged(p):800118f7=41(A); Normal(p):800118f7=41(A); RealRAM(p):000118f8=18(); RAM(p):000118f8=18(); Physical(p):000118f8=18(); Paged(p):800118f8=18(); Normal(p):800118f8=18(); RealRAM(p):000118f9=8a(?); RAM(p):000118f9=8a(?); Physical(p):000118f9=8a(?); Paged(p):800118f9=8a(?); Normal(p):800118f9=8a(?); RealRAM(p):000118fa=44(D); RAM(p):000118fa=44(D); Physical(p):000118fa=44(D); Paged(p):800118fa=44(D); Normal(p):800118fa=44(D); RealRAM(p):000118fb=24($); RAM(p):000118fb=24($); Physical(p):000118fb=24($); Paged(p):800118fb=24($); Normal(p):800118fb=24($); RealRAM(p):000118fc=18(); RAM(p):000118fc=18(); Physical(p):000118fc=18(); Paged(p):800118fc=18(); Normal(p):800118fc=18(); RealRAM(p):000118fd=88(?); RAM(p):000118fd=88(?); Physical(p):000118fd=88(?); Paged(p):800118fd=88(?); Normal(p):800118fd=88(?); RealRAM(p):000118fe=01(); RAM(p):000118fe=01(); Physical(p):000118fe=01(); Paged(p):800118fe=01(); Normal(p):800118fe=01(); RealRAM(p):000118ff=80(?); RAM(p):000118ff
Registers:
EAX: ff8fd590 EBX: ff8ff310 ECX: 00000003 EDX: 0000000e
ESP: 801ac6e0 EBP: 00000000 ESI: ff8fd648 EDI: ff8fdbd8
CS: 0008 DS: 0023 ES: 0023 FS: 0030 GS: 0000 SS: 0010 TR: 0028 LDTR: 0000
EIP: 800118c0 EFLAGS: 00000282
CR0: e005001f CR1: 00000000 CR2: c1040000 CR3: 00030000
CR4: 00000000
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: 00000000 DR7: 00000000
GDTR: 00008003500003ff IDTR: 00008003540007ff
FLAGSINFO: 0000000000ipfavr0n00odItSz0a0p1c
0008:800118c1 56 push esi RealRAM(p):00011900=fb(?); RAM(p):00011900=fb(?); Physical(p):00011900=fb(?); Paged(p):80011900=fb(?); Normal(p):80011900=fb(?); Paged(w):801ac6d8=48(H); Physical(w):001ac6d8=48(H); RAM(w):001ac6d8=48(H); RealRAM(w):0014c6d8=48(H); Paged(w):801ac6d9=d6(?); Physical(w):001ac6d9=d6(?); RAM(w):001ac6d9=d6(?); RealRAM(w):0014c6d9=d6(?); Paged(w):801ac6da=8f(?); Physical(w):001ac6da=8f(?); RAM(w):001ac6da=8f(?); RealRAM(w):0014c6da=8f(?); Paged(w):801ac6db=ff(?); Physical(w):001ac6db=ff(?); RAM(w):001ac6db=ff(?); RealRAM(w):0014c6db=ff(?)
Registers:
EAX: ff8fd590 EBX: ff8ff310 ECX: 00000003 EDX: 0000000e
ESP: 801ac6dc EBP: 00000000 ESI: ff8fd648 EDI: ff8fdbd8
CS: 0008 DS: 0023 ES: 0023 FS: 0030 GS: 0000 SS: 0010 TR: 0028 LDTR: 0000
EIP: 800118c1 EFLAGS: 00000282
CR0: e005001f CR1: 00000000 CR2: c1040000 CR3: 00030000
CR4: 00000000
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: 00000000 DR7: 00000000
GDTR: 00008003500003ff IDTR: 00008003540007ff
FLAGSINFO: 0000000000ipfavr0n00odItSz0a0p1c
0008:800118c2 57 push edi RealRAM(p):00011901=02(); RAM(p):00011901=02(); Physical(p):00011901=02(); Paged(p):80011901=02(); Normal(p):80011901=02(); Paged(w):801ac6d4=d8(?); Physical(w):001ac6d4=d8(?); RAM(w):001ac6d4=d8(?); RealRAM(w):0014c6d4=d8(?); Paged(w):801ac6d5=db(?); Physical(w):001ac6d5=db(?); RAM(w):001ac6d5=db(?); RealRAM(w):0014c6d5=db(?); Paged(w):801ac6d6=8f(?); Physical(w):001ac6d6=8f(?); RAM(w):001ac6d6=8f(?); RealRAM(w):0014c6d6=8f(?); Paged(w):801ac6d7=ff(?); Physical(w):001ac6d7=ff(?); RAM(w):001ac6d7=ff(?); RealRAM(w):0014c6d7=ff(?)
Registers:
EAX: ff8fd590 EBX: ff8ff310 ECX: 00000003 EDX: 0000000e
ESP: 801ac6d8 EBP: 00000000 ESI: ff8fd648 EDI: ff8fdbd8
CS: 0008 DS: 0023 ES: 0023 FS: 0030 GS: 0000 SS: 0010 TR: 0028 LDTR: 0000
EIP: 800118c2 EFLAGS: 00000282
CR0: e005001f CR1: 00000000 CR2: c1040000 CR3: 00030000
CR4: 00000000
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: 00000000 DR7: 00000000
GDTR: 00008003500003ff IDTR: 00008003540007ff
FLAGSINFO: 0000000000ipfavr0n00odItSz0a0p1c
0008:800118c3 8B 44 24 10 mov eax,dword ss:[esp+10] RealRAM(p):00011902=8a(?); RAM(p):00011902=8a(?); Physical(p):00011902=8a(?); Paged(p):80011902=8a(?); Normal(p):80011902=8a(?); RealRAM(r):0014c6e4=90(?); RAM(r):001ac6e4=90(?); Physical(r):001ac6e4=90(?); Paged(r):801ac6e4=90(?); RealRAM(r):0014c6e5=d5(?); RAM(r):001ac6e5=d5(?); Physical(r):001ac6e5=d5(?); Paged(r):801ac6e5=d5(?); RealRAM(r):0014c6e6=8f(?); RAM(r):001ac6e6=8f(?); Physical(r):001ac6e6=8f(?); Paged(r):801ac6e6=8f(?); RealRAM(r):0014c6e7=ff(?); RAM(r):001ac6e7=ff(?); Physical(r):001ac6e7=ff(?); Paged(r):801ac6e7=ff(?)
Registers:
EAX: ff8fd590 EBX: ff8ff310 ECX: 00000003 EDX: 0000000e
ESP: 801ac6d4 EBP: 00000000 ESI: ff8fd648 EDI: ff8fdbd8
CS: 0008 DS: 0023 ES: 0023 FS: 0030 GS: 0000 SS: 0010 TR: 0028 LDTR: 0000
EIP: 800118c3 EFLAGS: 00000282
CR0: e005001f CR1: 00000000 CR2: c1040000 CR3: 00030000
CR4: 00000000
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: 00000000 DR7: 00000000
GDTR: 00008003500003ff IDTR: 00008003540007ff
FLAGSINFO: 0000000000ipfavr0n00odItSz0a0p1c
Show last 13 lines
0008:800118c7 2A C9 sub cl,cl	RealRAM(p):00011903=44(D); RAM(p):00011903=44(D); Physical(p):00011903=44(D); Paged(p):80011903=44(D); Normal(p):80011903=44(D); RealRAM(p):00011904=24($); RAM(p):00011904=24($); Physical(p):00011904=24($); Paged(p):80011904=24($); Normal(p):80011904=24($); RealRAM(p):00011905=1c(); RAM(p):00011905=1c(); Physical(p):00011905=1c(); Paged(p):80011905=1c(); Normal(p):80011905=1c(); RealRAM(p):00011906=88(?); RAM(p):00011906=88(?); Physical(p):00011906=88(?); Paged(p):80011906=88(?); Normal(p):80011906=88(?)
Registers:
EAX: ff8fd590 EBX: ff8ff310 ECX: 00000003 EDX: 0000000e
ESP: 801ac6d4 EBP: 00000000 ESI: ff8fd648 EDI: ff8fdbd8
CS: 0008 DS: 0023 ES: 0023 FS: 0030 GS: 0000 SS: 0010 TR: 0028 LDTR: 0000
EIP: 800118c7 EFLAGS: 00000282
CR0: e005001f CR1: 00000000 CR2: c1040000 CR3: 00030000
CR4: 00000000
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: 00000000 DR7: 00000000
GDTR: 00008003500003ff IDTR: 00008003540007ff
FLAGSINFO: 0000000000ipfavr0n00odItSz0a0p1c

However, inspecting the instruction PUSH EBX itself, it seems that it DOES write correctly to memory, it just isn't logged somehow?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 24 of 24, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just tried NT4's setup again. I notice that the same issue happens there, but it's booting from a floppy disk, not a hard disk? It gives a STOP 0x0000007B (0xFF85CED0, 0x00000000, 0x00000000, 0x00000000)?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io