VOGONS


IBM PC AT emulation crashing?

Topic actions

Reply 40 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

I've modified and adjusted that little loop by adjusting the 80286 (actually 8086 timings) so that the count ends up with exactly F952 ticks counted. It now correctly continues without erroring out at the DRAM Refresh speed test (ending up with a '8086' at 7280500Hz).

Edit: It now gets up to this point (A bit over 6MB memory is installed because of the autodetect):

01664 KB OK

200000 FFFF 201-Memory Error

Based on Microsoft support page ( https://support.microsoft.com/en-us/kb/35436 ):

2xx Memory (RAM) Errors
xxyyyy yyzz 201 bad ram chip in bank xx row zz

So that's bank 20h, row FF? What memory address is that?

Edit: Whoops, my MMU was repeating the 640K ISA memory hole above 1MB. So any part above 1MB where the 640K limit (1640K-2M, 2640K-3M, 3640K-4M etc.) was matched was redirected to a memory hole 😖

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

Reply 41 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

It now gets to the top of memory (Exactly 6MB installed) and errors out:

06144 KB OK

660000 FFFF 201-Memory Error

This matches the end-of-RAM in my emulation (Exactly 6MB is installed, with the memory buffer area from 640K-1M being inserted at 1M+, thus adding 0x60000 memory bytes on top of the normal extended memory).

I've currenty implemented the 640K memory hole at 640K-1M and high memory hole at the last MB. But any memory in between is skipped (the memory holes are added to the memory after 1MB). Is that correct?

Edit: After changing the memory to simply ignore writes to those invalid ranges and give 0xFF on reads, it now passes the first check. Then it gets to:

05760 KB OK
104-System Board Error

Edit: Enabling the memory from 640K-1M to be added (mapped to 1M+, with the 1M+ memory being mapped directly after it) increases this to "06144 KB OK". The 104-System Board Error still occurs? Anyone knows why this happens? First it tests the full memory range. Then it tests it again, only to fail when the end of memory is reached?

http://www.bioscentral.com/misc/ibmdiag.htm says it's a protected mode error?

Looking at the end of the diagnostic log debugger.txt createn:

00:13:39:28.03520: POST Code: 31
00:13:43:74.04768: POST Code: 32
00:13:44:82.00032: POST Code: 31
00:13:49:21.08496: POST Code: 32
00:13:50:34.03104: POST Code: 31
00:13:54:74.03424: POST Code: 32
00:13:58:06.07648: POST Code: 33
00:15:25:34.03424: POST Code: 34
00:15:25:34.05920: POST Code: F0
00:15:25:34.06048: POST Code: 81
00:15:25:36.06848: POST Code: 85
00:15:25:36.06912: POST Code: F1
00:15:25:38.04960: POST Code: 00

So it enables real mode again, then "Data Segment Set", Descriptor table built, 85?, Exception interrupts tested, then 00?

Edit: The problem seems to be now, that the first interrupt called (interrupt 10h) executes a triple fault, because the Present bits of all exceptions (including the INT call itself)) is 0?

The descriptor called during the INT 20h contains D01C400000860000(low to high bytes of the descriptor). So it contains:
Offset: 1CD0
Selector: 4000
Type byte: 86

The type byte says:
Gate type: 6
Storage: 0
DPL: 0
Present: 1

But, for some reason, the software debugger says Present=0?

Edit: Looking at the typedef of the IDT descriptor: it's backwards. Thus the data was being decoded incorrectly(big endian instead of little endian).

The test still doesn't pass, although the IDT should have been fixed now.

It currently tests the limit check, although with limit checks enabled it might not make it all the way (currently status 21h).

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

Reply 42 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

The BIOS does something strange, though:

MOV	AL,9DH			; SET INTERRUPT 13 FLAG
OUT DMA_PAGE+0AH,AL ; FOR THE INTERRUPT HANDLER

;----- MODIFY DESCRIPTOR TABLES
;----- SET TEMPORARY ES DESCRIPTOR TO SEGMENT LIMIT

MOV DS:ES_TEMP,SEG_LIMIT,0 ; SET SEGMENT TO 0

;----- CPL0, DATA ACCESS RIGHTS

MOV BYTE PTR DS:(ES_TEMP.DATA_ACC_RIGHTS),CPL0_DATA_ACCESS
MOV BYTE PTR DS:(ES_TEMP.BASE_HI_BYTE),01 ; DO ALL TESTS ON 2ND 64K
MOV WORD PTR DS:(ES:TEMP.BASE_LO_WORD),0

;----- SET ES REGISTER
PUSH BYTE PTR ES_TEMP ; LOAD ES
POP ES

;----- CAUSE AN EXCEPTION 13 INTERRUPT
SUB DI,DI
MOV AX,ES:[DI] ; THIS SHOULD CAUSE AND EXCEPTION
SUB CX,CX ; WAIT FOR INTERRUPT
LOOP2: IN AL,DMA_PAGE+0AH
AND AL,AL ; DID THE INTERRUPT OCCUR?
LOOPNZ LOOP2
JZ T7_3 ; CONTINUE IF INTERRUPT
JMP ERROR_EXIT ; MISSING INTERRUPT

This cannot cause an exception? Even though the limit is zero, access to byte 0 in the segment(ES:0) won't cause a limit exception?

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

Reply 44 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

Whoops, now that you say it... 😖 You're right:P Looking at the protection code at that point (normal MMU address verification) had the limit check executed, but not applied (it calculated a variable which stores the boolean result of the comparision with the limit, then reverses(NOT) that when required with Expand-Down segments. But it never checked the resulting value and caused a #GP fault when it was 0.

Edit: I've disabled the limit check in real mode, as it seems the BIOS crashes with a #GP in real mode because of an incorrectly loaded limit during initialization for some reason.
Edit: Re-enabled it, but added proper segment descriptor initialization during reset operations(all segment registers but protected mode registers(LDTR and TR) as data segments).

Edit: It seem the modr/m 16-bit memory offset decoder wasn't wrapping it's addresses 100% correctly (correctly during the normal offset calculation, but incorrectly when applying extra offsets, like used in LDS and LES to load more than 8/16/32-bits of data in those specific sizes from memory). Now the BIOS boots correctly again, with segment limits enabled in both real and protected/V86 modes.

OK, the protected and real mode now properly use their respective segment limits and run. But for some reason, during that test, ES is loaded with a segment descriptor having a limit of 0xFFFF instead of 0x0000?

Edit: Now, the gathered information:
When loading the limit into the table, the DS descriptor that's cached contains 0x000093000000ffff. The offset used is 0x48. The calculated limit is 0xFFFF, so the access succeeds (together with the other checks). The zeroed out value is written to linear address 0x48. The high value(0x00) is written to offset 0x49. The rest of the values seem to be correctly written to the following addresses too.

Then it pushes selector 48h to the stack and POPs it into DS. DS is correctly loaded with selector 0x48. It loads the descriptor from the GDT, which is located at physical address 0xD8A0.

That's the cause of the invalid selector: the code assumes that DS points somewhere it doesn't? Why doesn't DS point to the correct location?

It's loaded at checkpoint F0 (after the SYSINIT1 CALL). So something's going wrong there?

Edit: It seems it loads the wrong descriptor for some reason? Maybe the GDT table is incorrectly set up?

Looking at the supposed entries for the GDT installed by the SYSINIT1 function, the DS descriptor should be loaded with segment value 0x08(The first entry in the GDT after the NULL descriptor). The entry at 0x48 (The 0x48 descriptor) should be the following descriptor, installed by the SYSINIT1's GDT_BLD subfunction:

;-----	TEMPORARY DESCRIPTOR FOR ES - (ES_TEMP)

DW MAX_SEG_LEN ; SEGMENT LIMIT
DW NSEG@_LO ; SEGMENT BASE ADDRESS - LOW WORD
DB NSEG@_HI ; SEGMENT BASE ADDRESS - HIGH BYTE
DB CPL0_DATA_ACCESS ; ACCESS RIGHTS BYTE
DW 0 ; RESERVED - MUST BE ZERO

Now the question is: is DS loaded with the correct descriptor? That doesn't seem so, looking at the source code.

Edit: DS seems to have been loaded with descriptor 08h. So it's the first descriptor in the GDT, but it contains an invalid descriptor for some reason?

Edit: The DS selector seems to load selector 08h(The GDT) correctly the first time it's used in protected mode. So that means the table is built correctly until it reaches checkpoint 0xF0. Maybe something goes wrong during initialization of the GDT during that step?

Edit: Something strange is happening: segmentWritten, which loads all segment descriptors, doesn't seem to be called for the MOV DS,AX; MOV ES,AX after protected mode is loaded at diagnostics code 0xF0+.

Edit: Debugging the instructions themselves, it seems that the instruction loads the value directly, not triggering any segment register updates when required. Thus the segment register was visibly loaded, but the descriptors weren't.

Edit: Implementing the fix by loading those segment registers correctly with the MOV instruction, at diagnostic code 0x1A, it tries to load SS with an invalid descriptor?
Edit: It seems to have caused an error because it was checking for the wrong bit (read-only SS isn't allowed). Having fixed this, the exception at diagnostics code 0xF2 is handled successfully 😀

Edit: Now an error seems to occur at step 0xF3, which crashes incorrectly.
Edit: After fixing the loading of the Task Register, it now moves on to the 0xF8 checks (LSL/LAR checks).

Edit: It now seems to check OK until it reaches the keyboard tests, after which it gives a keyboard locked error.

Edit: Fixing the keyboard locked error, it gets into an infinite loop? I can't make anything out of it, besides an infinite loop?

Filename
debugger_20160919_2012.log
File size
21.18 KiB
Downloads
45 downloads
File comment
debugger log containing POST output taken at 2016/09/19 20:12 (latest commit)
File license
Fair use/fair dealing exception

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

Reply 45 of 151, by Jepael

User metadata
Rank Oldbie
Rank
Oldbie

You are in manufacturing test mode, because a bit in keyboard controller port said so. It toggles 0x40 in a timer interrupt. I think it's a bit near the key inhibit.

Reply 46 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just tried running the old Turbo XT v2.5 BIOS on my current commit(80186/NEC V30 emulation): It screws up royally:( Something I did the last few weeks killed the XT emulation for some reason. Although I've mainly worked on the MMU and 80286(Besides various optimizations).

Unfortunately part of the code with my last release(see UniPCemu release thread) got lost during commiting(mainly VGA_Sequencer.c becoming VGA_Renderer.c, what's still known).

Is there a simple way to view all changes in a whole range of commits(from the point it still worked(at least weeks ago) in one single diff? Seeing as I want to keep most changes, as they're improvements and bugfixes, but remove the cause of the bug.

I remember it still working when I implemented the OSK, but the commit of the last release(which is permanently lost) already had the bug. So it was at least the release before that, where it was still working(IBM PC XT emulation).

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

Reply 47 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

After fixing the IBM PC XT emulation, the AT emulation now gives the following diagnostics:

00:00:03:26.00232: POST Code: 01
00:00:03:26.00644: POST Code: 02
00:00:03:43.02014: POST Code: 03
00:00:03:43.02150: POST Code: 04
00:00:03:43.02214: POST Code: 05
00:00:03:43.02287: POST Code: 06
00:00:03:43.02857: POST Code: 07
00:00:03:43.03445: POST Code: 08
00:00:03:43.03650: POST Code: 00
00:00:03:43.03854: POST Code: 01
00:00:03:43.04056: POST Code: 02
00:00:03:43.04259: POST Code: 03
00:00:03:43.04466: POST Code: 04
00:00:03:43.04669: POST Code: 05
00:00:03:43.04871: POST Code: 06
00:00:03:43.05073: POST Code: 07
00:00:03:43.05322: POST Code: 08
00:00:03:43.05534: POST Code: 09
00:00:03:43.05745: POST Code: 0A
00:00:03:43.05974: POST Code: 0B
00:00:03:43.06219: POST Code: 0C
00:00:03:43.06435: POST Code: 0D
00:00:03:43.06638: POST Code: 0E
00:00:03:43.06861: POST Code: 0F
00:00:03:43.07063: POST Code: 10
00:00:03:43.07314: POST Code: 11
00:00:03:43.07511: POST Code: 12
00:00:03:43.07730: POST Code: 13
00:00:03:43.07942: POST Code: 14
00:00:03:43.08140: POST Code: 15
00:00:03:43.08381: POST Code: 16
00:00:03:43.08579: POST Code: 17
00:00:03:43.08800: POST Code: 18
00:00:03:43.09160: POST Code: 19
00:00:03:43.09448: POST Code: 1A
00:00:03:43.09720: POST Code: 1B
00:00:03:43.09922: POST Code: 1C
00:00:03:44.00124: POST Code: 1D
00:00:03:44.00367: POST Code: 1E
00:00:03:44.00579: POST Code: 1F
00:00:03:44.00813: POST Code: 20
00:00:03:44.01034: POST Code: 21
00:00:03:44.01237: POST Code: 22
00:00:03:44.01439: POST Code: 23
00:00:03:44.01665: POST Code: 24
00:00:03:44.01887: POST Code: 25
00:00:03:44.02089: POST Code: 26
00:00:03:44.02291: POST Code: 27
00:00:03:44.02493: POST Code: 28
00:00:03:44.02707: POST Code: 29
00:00:03:44.02919: POST Code: 2A
00:00:03:44.03121: POST Code: 2B
00:00:03:44.03343: POST Code: 2C
00:00:03:44.03544: POST Code: 2D
00:00:03:44.03748: POST Code: 2E
00:00:03:44.03949: POST Code: 2F
00:00:03:44.04151: POST Code: 30
00:00:03:44.04353: POST Code: 31
00:00:03:44.04555: POST Code: 32
00:00:03:44.04780: POST Code: 33
Show last 790 lines
00:00:03:44.05004: POST Code: 34
00:00:03:44.05239: POST Code: 35
00:00:03:44.05455: POST Code: 36
00:00:03:44.05658: POST Code: 37
00:00:03:44.05859: POST Code: 38
00:00:03:44.06061: POST Code: 39
00:00:03:44.06303: POST Code: 3A
00:00:03:44.06505: POST Code: 3B
00:00:03:44.06722: POST Code: 3C
00:00:03:44.06924: POST Code: 3D
00:00:03:44.07126: POST Code: 3E
00:00:03:44.07328: POST Code: 3F
00:00:03:44.07530: POST Code: 40
00:00:03:44.07734: POST Code: 41
00:00:03:44.07937: POST Code: 42
00:00:03:44.08138: POST Code: 43
00:00:03:44.08361: POST Code: 44
00:00:03:44.08562: POST Code: 45
00:00:03:44.08785: POST Code: 46
00:00:03:44.09008: POST Code: 47
00:00:03:44.09211: POST Code: 48
00:00:03:44.09413: POST Code: 49
00:00:03:44.09613: POST Code: 4A
00:00:03:44.09840: POST Code: 4B
00:00:03:45.00041: POST Code: 4C
00:00:03:45.00244: POST Code: 4D
00:00:03:45.00445: POST Code: 4E
00:00:03:45.00647: POST Code: 4F
00:00:03:45.00852: POST Code: 50
00:00:03:45.01053: POST Code: 51
00:00:03:45.01256: POST Code: 52
00:00:03:45.01457: POST Code: 53
00:00:03:45.01659: POST Code: 54
00:00:03:45.01886: POST Code: 55
00:00:03:45.02088: POST Code: 56
00:00:03:45.02321: POST Code: 57
00:00:03:45.02535: POST Code: 58
00:00:03:45.07078: POST Code: 59
00:00:03:45.07301: POST Code: 5A
00:00:03:45.07499: POST Code: 5B
00:00:03:45.07718: POST Code: 5C
00:00:03:45.08133: POST Code: 5D
00:00:03:45.08373: POST Code: 5E
00:00:03:45.08570: POST Code: 5F
00:00:03:45.08787: POST Code: 60
00:00:03:45.08984: POST Code: 61
00:00:03:45.09194: POST Code: 62
00:00:03:45.09424: POST Code: 63
00:00:03:45.09621: POST Code: 64
00:00:03:45.09838: POST Code: 65
00:00:03:46.00038: POST Code: 66
00:00:03:46.00277: POST Code: 67
00:00:03:46.00479: POST Code: 68
00:00:03:46.00677: POST Code: 69
00:00:03:46.00894: POST Code: 6A
00:00:03:46.01093: POST Code: 6B
00:00:03:46.01330: POST Code: 6C
00:00:03:46.01527: POST Code: 6D
00:00:03:46.01772: POST Code: 6E
00:00:03:46.01969: POST Code: 6F
00:00:03:46.02218: POST Code: 70
00:00:03:46.02434: POST Code: 71
00:00:03:46.02631: POST Code: 72
00:00:03:46.02847: POST Code: 73
00:00:03:46.03047: POST Code: 74
00:00:03:46.03285: POST Code: 75
00:00:03:46.03481: POST Code: 76
00:00:03:46.03678: POST Code: 77
00:00:03:46.03895: POST Code: 78
00:00:03:46.04098: POST Code: 79
00:00:03:46.04315: POST Code: 7A
00:00:03:46.04514: POST Code: 7B
00:00:03:46.04744: POST Code: 7C
00:00:03:46.04950: POST Code: 7D
00:00:03:46.05149: POST Code: 7E
00:00:03:46.05366: POST Code: 7F
00:00:03:46.05576: POST Code: 80
00:00:03:46.05793: POST Code: 81
00:00:03:46.05990: POST Code: 82
00:00:03:46.06276: POST Code: 83
00:00:03:46.06473: POST Code: 84
00:00:03:46.06669: POST Code: 85
00:00:03:46.06887: POST Code: 86
00:00:03:46.07086: POST Code: 87
00:00:03:46.07329: POST Code: 88
00:00:03:46.07526: POST Code: 89
00:00:03:46.07744: POST Code: 8A
00:00:03:46.07942: POST Code: 8B
00:00:03:46.08140: POST Code: 8C
00:00:03:46.08384: POST Code: 8D
00:00:03:46.08582: POST Code: 8E
00:00:03:46.08799: POST Code: 8F
00:00:03:46.08996: POST Code: 90
00:00:03:46.09206: POST Code: 91
00:00:03:46.09412: POST Code: 92
00:00:03:46.09609: POST Code: 93
00:00:03:46.09846: POST Code: 94
00:00:03:47.00043: POST Code: 95
00:00:03:47.00263: POST Code: 96
00:00:03:47.00460: POST Code: 97
00:00:03:47.00657: POST Code: 98
00:00:03:47.00910: POST Code: 99
00:00:03:47.01124: POST Code: 9A
00:00:03:47.01342: POST Code: 9B
00:00:03:47.01539: POST Code: 9C
00:00:03:47.01779: POST Code: 9D
00:00:03:47.01996: POST Code: 9E
00:00:03:47.02219: POST Code: 9F
00:00:03:47.02500: POST Code: A0
00:00:03:47.02727: POST Code: A1
00:00:03:47.02929: POST Code: A2
00:00:03:47.03134: POST Code: A3
00:00:03:47.03357: POST Code: A4
00:00:03:47.03558: POST Code: A5
00:00:03:47.03781: POST Code: A6
00:00:03:47.03983: POST Code: A7
00:00:03:47.04198: POST Code: A8
00:00:03:47.04409: POST Code: A9
00:00:03:47.04610: POST Code: AA
00:00:03:47.04833: POST Code: AB
00:00:03:47.05035: POST Code: AC
00:00:03:47.05258: POST Code: AD
00:00:03:47.05460: POST Code: AE
00:00:03:47.05661: POST Code: AF
00:00:03:47.05884: POST Code: B0
00:00:03:47.06086: POST Code: B1
00:00:03:47.06309: POST Code: B2
00:00:03:47.06511: POST Code: B3
00:00:03:47.06746: POST Code: B4
00:00:03:47.06948: POST Code: B5
00:00:03:47.07151: POST Code: B6
00:00:03:47.07354: POST Code: B7
00:00:03:47.07555: POST Code: B8
00:00:03:47.07758: POST Code: B9
00:00:03:47.07959: POST Code: BA
00:00:03:47.08162: POST Code: BB
00:00:03:47.08384: POST Code: BC
00:00:03:47.08586: POST Code: BD
00:00:03:47.08789: POST Code: BE
00:00:03:47.08990: POST Code: BF
00:00:03:47.09205: POST Code: C0
00:00:03:47.09417: POST Code: C1
00:00:03:47.09618: POST Code: C2
00:00:03:47.09821: POST Code: C3
00:00:03:48.00023: POST Code: C4
00:00:03:48.00249: POST Code: C5
00:00:03:48.00450: POST Code: C6
00:00:03:48.00652: POST Code: C7
00:00:03:48.00875: POST Code: C8
00:00:03:48.01076: POST Code: C9
00:00:03:48.01280: POST Code: CA
00:00:03:48.01482: POST Code: CB
00:00:03:48.01700: POST Code: CC
00:00:03:48.01922: POST Code: CD
00:00:03:48.02133: POST Code: CE
00:00:03:48.02369: POST Code: CF
00:00:03:48.02585: POST Code: D0
00:00:03:48.02793: POST Code: D1
00:00:03:48.03006: POST Code: D2
00:00:03:48.03230: POST Code: D3
00:00:03:48.03431: POST Code: D4
00:00:03:48.03644: POST Code: D5
00:00:03:48.03880: POST Code: D6
00:00:03:48.04077: POST Code: D7
00:00:03:48.04277: POST Code: D8
00:00:03:48.04475: POST Code: D9
00:00:03:48.04672: POST Code: DA
00:00:03:48.04911: POST Code: DB
00:00:03:48.05129: POST Code: DC
00:00:03:48.05369: POST Code: DD
00:00:03:48.05599: POST Code: DE
00:00:03:48.05802: POST Code: DF
00:00:03:48.06004: POST Code: E0
00:00:03:49.00706: POST Code: E1
00:00:03:49.00923: POST Code: E2
00:00:03:49.01127: POST Code: E3
00:00:03:49.01361: POST Code: E4
00:00:03:49.01568: POST Code: E5
00:00:03:49.01805: POST Code: E6
00:00:03:49.02009: POST Code: E7
00:00:03:49.02238: POST Code: E8
00:00:03:49.02445: POST Code: E9
00:00:03:49.02657: POST Code: EA
00:00:03:49.02889: POST Code: EB
00:00:03:49.03120: POST Code: EC
00:00:03:49.03347: POST Code: ED
00:00:03:49.03596: POST Code: EE
00:00:03:49.03906: POST Code: EF
00:00:03:49.04111: POST Code: F0
00:00:03:49.04345: POST Code: F1
00:00:03:49.04554: POST Code: F2
00:00:03:49.04797: POST Code: F3
00:00:03:49.04995: POST Code: F4
00:00:03:49.05203: POST Code: F5
00:00:03:49.05405: POST Code: F6
00:00:03:49.05607: POST Code: F7
00:00:03:49.05840: POST Code: F8
00:00:03:49.06042: POST Code: F9
00:00:03:49.06266: POST Code: FA
00:00:03:49.06468: POST Code: FB
00:00:03:49.06699: POST Code: FC
00:00:03:49.06901: POST Code: FD
00:00:03:49.07152: POST Code: 09
00:00:03:49.07174: POST Code: 0A
00:00:03:49.07191: POST Code: 0B
00:00:03:49.07246: POST Code: 0C
00:00:03:49.07309: POST Code: 0E
00:00:03:49.07340: POST Code: 0F
00:00:04:61.05449: POST Code: 32
00:00:05:04.02647: POST Code: 11
00:00:05:05.02580: POST Code: 12
00:00:05:05.08604: POST Code: 13
00:00:05:05.08645: POST Code: 14
00:00:05:05.09518: POST Code: 15
00:00:05:05.09620: POST Code: 16
00:00:05:05.09661: POST Code: 17
00:00:05:05.09757: POST Code: 18
00:00:05:05.09766: POST Code: 19
00:00:05:05.09808: POST Code: 81
00:00:05:06.03190: POST Code: 85
00:00:05:06.03199: POST Code: 1A
00:00:05:06.03238: POST Code: 1B
00:00:07:25.00962: POST Code: 1C
00:00:07:25.01067: POST Code: 1D
00:00:26:93.03288: POST Code: 1E
00:00:26:93.03358: POST Code: 1F
00:00:26:93.03536: POST Code: 20
00:00:26:93.03674: POST Code: 21
00:00:27:18.01450: POST Code: 23
00:00:31:30.06778: POST Code: 24
00:00:31:30.07080: POST Code: 25
00:00:31:30.07102: POST Code: 26
00:00:31:46.05790: POST Code: 27
00:00:31:46.05940: POST Code: 29
00:00:31:46.05980: POST Code: 2A
00:00:31:46.06160: POST Code: 2B
00:00:31:46.06270: POST Code: 2C
00:00:31:46.06540: POST Code: 2D
00:00:31:46.06562: POST Code: 2F
00:00:31:46.06576: POST Code: 30
00:00:31:46.06636: POST Code: 81
00:00:31:47.01676: POST Code: 85
00:00:31:47.01688: POST Code: 31
00:00:33:17.02180: POST Code: 32
00:00:33:60.04184: POST Code: 31
00:00:35:31.03112: POST Code: 32
00:00:35:73.06624: POST Code: 31
00:00:37:40.08812: POST Code: 32
00:00:37:83.05652: POST Code: 31
00:00:39:54.06684: POST Code: 32
00:00:39:98.01140: POST Code: 31
00:00:41:66.00988: POST Code: 32
00:00:42:09.02432: POST Code: 31
00:00:43:76.07872: POST Code: 32
00:00:44:19.06548: POST Code: 31
00:00:45:89.00216: POST Code: 32
00:00:46:30.09320: POST Code: 31
00:00:47:99.02160: POST Code: 32
00:00:48:41.01964: POST Code: 31
00:00:50:08.02300: POST Code: 32
00:00:50:50.06304: POST Code: 31
00:00:52:19.05568: POST Code: 32
00:00:52:61.04884: POST Code: 31
00:00:54:31.00452: POST Code: 32
00:00:54:74.00452: POST Code: 31
00:00:56:42.06260: POST Code: 32
00:00:56:85.09196: POST Code: 31
00:00:58:53.01632: POST Code: 32
00:00:58:96.09384: POST Code: 31
00:01:00:66.09132: POST Code: 32
00:01:01:08.05860: POST Code: 31
00:01:02:86.00000: POST Code: 32
00:01:03:36.00412: POST Code: 31
00:01:05:18.00468: POST Code: 32
00:01:05:60.06528: POST Code: 31
00:01:07:36.09288: POST Code: 32
00:01:07:80.04672: POST Code: 31
00:01:09:51.06512: POST Code: 32
00:01:09:95.09528: POST Code: 31
00:01:11:69.01608: POST Code: 32
00:01:12:12.03800: POST Code: 31
00:01:13:84.05096: POST Code: 32
00:01:14:30.05528: POST Code: 31
00:01:16:06.06072: POST Code: 32
00:01:16:51.02592: POST Code: 31
00:01:18:36.00864: POST Code: 32
00:01:18:83.06352: POST Code: 31
00:01:20:54.07472: POST Code: 32
00:01:21:00.00520: POST Code: 31
00:01:22:75.08080: POST Code: 32
00:01:23:19.06344: POST Code: 31
00:01:24:90.02160: POST Code: 32
00:01:25:34.02928: POST Code: 31
00:01:27:08.02320: POST Code: 32
00:01:27:53.05656: POST Code: 31
00:01:29:30.00784: POST Code: 32
00:01:29:73.07016: POST Code: 31
00:01:31:49.08040: POST Code: 32
00:01:31:93.08624: POST Code: 31
00:01:33:72.09584: POST Code: 32
00:01:34:21.01016: POST Code: 31
00:01:35:96.03896: POST Code: 32
00:01:36:39.03608: POST Code: 31
00:01:38:10.06672: POST Code: 32
00:01:38:54.05328: POST Code: 31
00:01:40:33.02520: POST Code: 32
00:01:40:78.04560: POST Code: 31
00:01:42:63.09512: POST Code: 32
00:01:43:09.08264: POST Code: 31
00:01:44:86.08952: POST Code: 32
00:01:45:34.04048: POST Code: 31
00:01:47:10.05312: POST Code: 32
00:01:47:56.00672: POST Code: 31
00:01:49:31.05224: POST Code: 32
00:01:49:76.08312: POST Code: 31
00:01:51:50.07152: POST Code: 32
00:01:51:94.03240: POST Code: 31
00:01:53:68.01736: POST Code: 32
00:01:54:10.06904: POST Code: 31
00:01:55:86.03144: POST Code: 32
00:01:56:29.06424: POST Code: 31
00:01:58:02.06944: POST Code: 32
00:01:58:46.02896: POST Code: 31
00:02:00:22.07824: POST Code: 32
00:02:00:65.09064: POST Code: 31
00:02:02:38.03504: POST Code: 32
00:02:02:82.07968: POST Code: 31
00:02:04:54.00400: POST Code: 32
00:02:04:97.07792: POST Code: 31
00:02:06:71.04656: POST Code: 32
00:02:07:14.07640: POST Code: 31
00:02:08:87.02160: POST Code: 32
00:02:09:31.01808: POST Code: 31
00:02:11:07.01728: POST Code: 32
00:02:11:50.06856: POST Code: 31
00:02:13:25.07800: POST Code: 32
00:02:13:70.09312: POST Code: 31
00:02:15:47.09328: POST Code: 32
00:02:15:91.09184: POST Code: 31
00:02:17:69.04816: POST Code: 32
00:02:18:16.06912: POST Code: 31
00:02:19:89.09248: POST Code: 32
00:02:20:32.08848: POST Code: 31
00:02:22:09.07632: POST Code: 32
00:02:22:53.04240: POST Code: 31
00:02:24:24.01360: POST Code: 32
00:02:24:68.03456: POST Code: 31
00:02:26:43.07888: POST Code: 32
00:02:26:91.02400: POST Code: 31
00:02:28:64.06000: POST Code: 32
00:02:29:10.09904: POST Code: 31
00:02:30:90.02640: POST Code: 32
00:02:31:35.00720: POST Code: 31
00:02:33:08.04656: POST Code: 32
00:02:33:53.00432: POST Code: 31
00:02:35:38.02656: POST Code: 32
00:02:35:86.00512: POST Code: 31
00:02:37:71.04352: POST Code: 32
00:02:38:19.03616: POST Code: 31
00:02:40:01.07696: POST Code: 32
00:02:40:51.00704: POST Code: 31
00:02:42:33.01936: POST Code: 32
00:02:42:79.00176: POST Code: 31
00:02:44:64.05984: POST Code: 32
00:02:45:14.03280: POST Code: 31
00:02:46:93.02240: POST Code: 32
00:02:47:37.03232: POST Code: 31
00:02:49:14.08480: POST Code: 32
00:02:49:59.06912: POST Code: 31
00:02:51:33.00736: POST Code: 32
00:02:51:78.01232: POST Code: 31
00:02:53:54.08736: POST Code: 32
00:02:54:02.09344: POST Code: 31
00:02:55:81.03504: POST Code: 32
00:02:56:25.08512: POST Code: 31
00:02:58:03.08192: POST Code: 32
00:02:58:48.04672: POST Code: 31
00:03:00:21.05472: POST Code: 32
00:03:00:64.01232: POST Code: 31
00:03:02:37.08224: POST Code: 32
00:03:02:80.02848: POST Code: 31
00:03:04:52.09936: POST Code: 32
00:03:04:97.04368: POST Code: 31
00:03:06:67.08032: POST Code: 32
00:03:07:11.05440: POST Code: 31
00:03:08:90.08448: POST Code: 32
00:03:09:34.01552: POST Code: 31
00:03:11:09.05616: POST Code: 32
00:03:11:53.00048: POST Code: 31
00:03:13:24.03456: POST Code: 32
00:03:13:67.08704: POST Code: 31
00:03:15:41.02272: POST Code: 32
00:03:15:83.08448: POST Code: 31
00:03:17:57.04928: POST Code: 32
00:03:18:01.04128: POST Code: 31
00:03:19:76.06976: POST Code: 32
00:03:20:23.01536: POST Code: 31
00:03:21:97.09216: POST Code: 32
00:03:22:43.07280: POST Code: 31
00:03:24:17.07408: POST Code: 32
00:03:24:62.09696: POST Code: 31
00:03:26:35.02064: POST Code: 32
00:03:26:78.01072: POST Code: 31
00:03:28:52.07264: POST Code: 32
00:03:28:95.02000: POST Code: 31
00:03:30:67.04288: POST Code: 32
00:03:31:11.03104: POST Code: 31
00:03:32:84.01552: POST Code: 32
00:03:33:27.08208: POST Code: 31
00:03:35:01.05744: POST Code: 32
00:03:35:44.08240: POST Code: 31
00:03:37:16.07728: POST Code: 32
00:03:37:59.08320: POST Code: 31
00:03:39:32.05200: POST Code: 32
00:03:39:75.09424: POST Code: 31
00:03:41:47.07376: POST Code: 32
00:03:41:94.07312: POST Code: 31
00:03:43:70.00592: POST Code: 32
00:03:44:15.07632: POST Code: 31
00:03:45:88.03456: POST Code: 32
00:03:46:32.07840: POST Code: 31
00:03:48:03.01344: POST Code: 32
00:03:48:46.08224: POST Code: 31
00:03:50:18.01888: POST Code: 32
00:03:50:62.08320: POST Code: 31
00:03:52:36.07424: POST Code: 32
00:03:52:80.04240: POST Code: 31
00:03:54:54.06400: POST Code: 32
00:03:54:99.01728: POST Code: 31
00:03:56:72.04432: POST Code: 32
00:03:57:15.09024: POST Code: 31
00:03:58:88.00288: POST Code: 32
00:03:59:70.08464: POST Code: 33
00:04:15:33.08896: POST Code: 34
00:04:15:33.09104: POST Code: F0
00:04:15:33.09152: POST Code: 81
00:04:15:34.04192: POST Code: 85
00:04:15:34.04256: POST Code: F1
00:04:15:34.04288: POST Code: B0
00:04:15:34.04320: POST Code: F2
00:04:15:34.04384: POST Code: 9D
00:04:15:34.04448: POST Code: F3
00:04:15:34.04496: POST Code: F4
00:04:15:56.04512: POST Code: 95
00:04:15:56.04688: POST Code: F5
00:04:15:56.04768: POST Code: F6
00:04:15:56.04832: POST Code: 9D
00:04:15:56.04912: POST Code: F7
00:04:15:56.04944: POST Code: F8
00:04:15:56.04960: POST Code: F9
00:04:15:56.04992: POST Code: FA
00:04:15:56.05088: POST Code: 35
00:04:15:56.05104: POST Code: 34
00:04:15:56.05456: POST Code: 35
00:04:15:56.05472: POST Code: 3A
00:04:15:56.05904: POST Code: 3C
00:04:15:56.06000: POST Code: 3B
00:04:15:60.00144: POST Code: 7B
00:04:15:68.03264: POST Code: 3B
00:04:15:76.07776: POST Code: 7B
00:04:15:85.01216: POST Code: 3B
00:04:15:95.07504: POST Code: 7B
00:04:16:04.01488: POST Code: 3B
00:04:16:13.01360: POST Code: 7B
00:04:16:21.03296: POST Code: 3B
00:04:16:29.07264: POST Code: 7B
00:04:16:38.01072: POST Code: 3B
00:04:16:46.01600: POST Code: 7B
00:04:16:54.06112: POST Code: 3B
00:04:16:62.09744: POST Code: 7B
00:04:16:71.04832: POST Code: 3B
00:04:16:80.05840: POST Code: 7B
00:04:16:89.05520: POST Code: 3B
00:04:16:97.08784: POST Code: 7B
00:04:17:06.06400: POST Code: 3B
00:04:17:14.05328: POST Code: 7B
00:04:17:23.06624: POST Code: 3B
00:04:17:31.03904: POST Code: 7B
00:04:17:40.02288: POST Code: 3B
00:04:17:48.04336: POST Code: 7B
00:04:17:57.02944: POST Code: 3B
00:04:17:66.05344: POST Code: 7B
00:04:17:74.07824: POST Code: 3B
00:04:17:83.01136: POST Code: 7B
00:04:17:92.05120: POST Code: 3B
00:04:18:00.02208: POST Code: 7B
00:04:18:09.04096: POST Code: 3B
00:04:18:17.01184: POST Code: 7B
00:04:18:24.08960: POST Code: 3B
00:04:18:34.03920: POST Code: 7B
00:04:18:42.08784: POST Code: 3B
00:04:18:51.07600: POST Code: 7B
00:04:18:60.02688: POST Code: 3B
00:04:18:68.05536: POST Code: 7B
00:04:18:77.03680: POST Code: 3B
00:04:18:86.06480: POST Code: 7B
00:04:18:94.08048: POST Code: 3B
00:04:19:04.02304: POST Code: 7B
00:04:19:12.04848: POST Code: 3B
00:04:19:14.05968: POST Code: 40
00:04:19:20.08832: POST Code: 00
00:04:19:27.09408: POST Code: 40
00:04:19:36.02528: POST Code: 00
00:04:19:39.08096: POST Code: 01
00:04:19:39.08256: POST Code: 02
00:04:19:69.00480: POST Code: 03
00:04:19:69.00624: POST Code: 04
00:04:19:69.00672: POST Code: 05
00:04:19:69.00736: POST Code: 06
00:04:19:69.01296: POST Code: 07
00:04:19:69.02144: POST Code: 08
00:04:19:69.02432: POST Code: 00
00:04:19:69.02720: POST Code: 01
00:04:19:69.03024: POST Code: 02
00:04:19:69.03328: POST Code: 03
00:04:19:69.03616: POST Code: 04
00:04:19:69.03920: POST Code: 05
00:04:19:69.04208: POST Code: 06
00:04:19:69.04512: POST Code: 07
00:04:19:69.04816: POST Code: 08
00:04:19:69.05104: POST Code: 09
00:04:19:69.05408: POST Code: 0A
00:04:19:69.05696: POST Code: 0B
00:04:19:69.06000: POST Code: 0C
00:04:19:69.06320: POST Code: 0D
00:04:19:69.06608: POST Code: 0E
00:04:19:69.06896: POST Code: 0F
00:04:19:69.07200: POST Code: 10
00:04:19:69.07504: POST Code: 11
00:04:19:69.07856: POST Code: 12
00:04:19:69.08192: POST Code: 13
00:04:19:69.08528: POST Code: 14
00:04:19:69.08912: POST Code: 15
00:04:19:69.09264: POST Code: 16
00:04:19:69.09568: POST Code: 17
00:04:19:69.09856: POST Code: 18
00:04:19:70.00160: POST Code: 19
00:04:19:70.00528: POST Code: 1A
00:04:19:70.00864: POST Code: 1B
00:04:19:70.01168: POST Code: 1C
00:04:19:70.01632: POST Code: 1D
00:04:19:70.01984: POST Code: 1E
00:04:19:70.02336: POST Code: 1F
00:04:19:70.02624: POST Code: 20
00:04:19:70.02896: POST Code: 21
00:04:19:70.03168: POST Code: 22
00:04:19:70.03536: POST Code: 23
00:04:19:70.03920: POST Code: 24
00:04:19:70.04192: POST Code: 25
00:04:19:70.04496: POST Code: 26
00:04:19:70.04880: POST Code: 27
00:04:19:70.05264: POST Code: 28
00:04:19:70.05888: POST Code: 29
00:04:19:70.06192: POST Code: 2A
00:04:19:70.06512: POST Code: 2B
00:04:19:70.06912: POST Code: 2C
00:04:19:70.07216: POST Code: 2D
00:04:19:70.07584: POST Code: 2E
00:04:19:70.08096: POST Code: 2F
00:04:19:70.08576: POST Code: 30
00:04:19:70.09072: POST Code: 31
00:04:19:70.09584: POST Code: 32
00:04:19:71.00128: POST Code: 33
00:04:19:71.00576: POST Code: 34
00:04:19:71.00960: POST Code: 35
00:04:19:71.01328: POST Code: 36
00:04:19:71.01712: POST Code: 37
00:04:19:71.01920: POST Code: 38
00:04:19:71.02144: POST Code: 39
00:04:19:71.02496: POST Code: 3A
00:04:19:71.02816: POST Code: 3B
00:04:19:71.03200: POST Code: 3C
00:04:19:71.03680: POST Code: 3D
00:04:19:71.03968: POST Code: 3E
00:04:19:71.04272: POST Code: 3F
00:04:19:71.04560: POST Code: 40
00:04:19:71.04880: POST Code: 41
00:04:19:71.05200: POST Code: 42
00:04:19:71.05520: POST Code: 43
00:04:19:71.05824: POST Code: 44
00:04:19:71.06112: POST Code: 45
00:04:19:71.06416: POST Code: 46
00:04:19:71.06688: POST Code: 47
00:04:19:71.06992: POST Code: 48
00:04:19:71.07280: POST Code: 49
00:04:19:71.07568: POST Code: 4A
00:04:19:71.07856: POST Code: 4B
00:04:19:71.08128: POST Code: 4C
00:04:19:71.08432: POST Code: 4D
00:04:19:71.08720: POST Code: 4E
00:04:19:72.03440: POST Code: 4F
00:04:19:72.03744: POST Code: 50
00:04:19:72.04032: POST Code: 51
00:04:19:72.04320: POST Code: 52
00:04:19:72.04640: POST Code: 53
00:04:19:72.04976: POST Code: 54
00:04:19:72.05296: POST Code: 55
00:04:19:72.05568: POST Code: 56
00:04:19:72.05936: POST Code: 57
00:04:19:72.06288: POST Code: 58
00:04:19:72.06576: POST Code: 59
00:04:19:72.06864: POST Code: 5A
00:04:19:72.07152: POST Code: 5B
00:04:19:72.07456: POST Code: 5C
00:04:19:72.07776: POST Code: 5D
00:04:19:72.08064: POST Code: 5E
00:04:19:72.08384: POST Code: 5F
00:04:19:72.08672: POST Code: 60
00:04:19:72.08960: POST Code: 61
00:04:19:72.09296: POST Code: 62
00:04:19:72.09568: POST Code: 63
00:04:19:72.09872: POST Code: 64
00:04:19:73.00160: POST Code: 65
00:04:19:73.00464: POST Code: 66
00:04:19:73.00784: POST Code: 67
00:04:19:73.01056: POST Code: 68
00:04:19:73.01392: POST Code: 69
00:04:19:73.01680: POST Code: 6A
00:04:19:73.01984: POST Code: 6B
00:04:19:73.02320: POST Code: 6C
00:04:19:73.02672: POST Code: 6D
00:04:19:73.02960: POST Code: 6E
00:04:19:73.03280: POST Code: 6F
00:04:19:73.03568: POST Code: 70
00:04:19:73.03792: POST Code: 71
00:04:19:73.04016: POST Code: 72
00:04:19:73.04224: POST Code: 73
00:04:19:73.04448: POST Code: 74
00:04:19:73.04656: POST Code: 75
00:04:19:73.04880: POST Code: 76
00:04:19:73.05104: POST Code: 77
00:04:19:73.05424: POST Code: 78
00:04:19:73.05712: POST Code: 79
00:04:19:73.06032: POST Code: 7A
00:04:19:73.06336: POST Code: 7B
00:04:19:73.06624: POST Code: 7C
00:04:19:73.06960: POST Code: 7D
00:04:19:73.07296: POST Code: 7E
00:04:19:73.07616: POST Code: 7F
00:04:19:73.07920: POST Code: 80
00:04:19:73.08256: POST Code: 81
00:04:19:73.08592: POST Code: 82
00:04:19:73.08960: POST Code: 83
00:04:19:73.09248: POST Code: 84
00:04:19:73.09568: POST Code: 85
00:04:19:73.09888: POST Code: 86
00:04:19:74.00224: POST Code: 87
00:04:19:74.00528: POST Code: 88
00:04:19:74.01008: POST Code: 89
00:04:19:74.01312: POST Code: 8A
00:04:19:74.01632: POST Code: 8B
00:04:19:74.02112: POST Code: 8C
00:04:19:74.02592: POST Code: 8D
00:04:19:74.03104: POST Code: 8E
00:04:19:74.03616: POST Code: 8F
00:04:19:74.03984: POST Code: 90
00:04:19:74.04336: POST Code: 91
00:04:19:74.04624: POST Code: 92
00:04:19:74.04944: POST Code: 93
00:04:19:74.05232: POST Code: 94
00:04:19:74.05584: POST Code: 95
00:04:19:74.05888: POST Code: 96
00:04:19:74.06176: POST Code: 97
00:04:19:74.06496: POST Code: 98
00:04:19:74.06832: POST Code: 99
00:04:19:74.07152: POST Code: 9A
00:04:19:74.07472: POST Code: 9B
00:04:19:74.07792: POST Code: 9C
00:04:19:74.08080: POST Code: 9D
00:04:19:74.08416: POST Code: 9E
00:04:19:74.08688: POST Code: 9F
00:04:19:74.08992: POST Code: A0
00:04:19:74.09264: POST Code: A1
00:04:19:74.09552: POST Code: A2
00:04:19:74.09872: POST Code: A3
00:04:19:75.00160: POST Code: A4
00:04:19:75.00480: POST Code: A5
00:04:19:75.00768: POST Code: A6
00:04:19:75.01056: POST Code: A7
00:04:19:75.01392: POST Code: A8
00:04:19:75.01824: POST Code: A9
00:04:19:75.02176: POST Code: AA
00:04:19:75.06800: POST Code: AB
00:04:19:75.07088: POST Code: AC
00:04:19:75.07392: POST Code: AD
00:04:19:75.07632: POST Code: AE
00:04:19:75.07872: POST Code: AF
00:04:19:75.08064: POST Code: B0
00:04:19:75.08304: POST Code: B1
00:04:19:75.08512: POST Code: B2
00:04:19:75.08720: POST Code: B3
00:04:19:75.08928: POST Code: B4
00:04:19:75.09216: POST Code: B5
00:04:19:75.09488: POST Code: B6
00:04:19:75.09808: POST Code: B7
00:04:19:76.00112: POST Code: B8
00:04:19:76.00416: POST Code: B9
00:04:19:76.00720: POST Code: BA
00:04:19:76.01008: POST Code: BB
00:04:19:76.01328: POST Code: BC
00:04:19:76.01616: POST Code: BD
00:04:19:76.01920: POST Code: BE
00:04:19:76.02192: POST Code: BF
00:04:19:76.02512: POST Code: C0
00:04:19:76.02848: POST Code: C1
00:04:19:76.03136: POST Code: C2
00:04:19:76.03424: POST Code: C3
00:04:19:76.03712: POST Code: C4
00:04:19:76.04016: POST Code: C5
00:04:19:76.04304: POST Code: C6
00:04:19:76.04576: POST Code: C7
00:04:19:76.04880: POST Code: C8
00:04:19:76.05152: POST Code: C9
00:04:19:76.05456: POST Code: CA
00:04:19:76.05744: POST Code: CB
00:04:19:76.06032: POST Code: CC
00:04:19:76.06320: POST Code: CD
00:04:19:76.06592: POST Code: CE
00:04:19:76.06912: POST Code: CF
00:04:19:76.07184: POST Code: D0
00:04:19:76.07680: POST Code: D1
00:04:19:76.08016: POST Code: D2
00:04:19:76.08320: POST Code: D3
00:04:19:76.08592: POST Code: D4
00:04:19:76.08912: POST Code: D5
00:04:19:76.09264: POST Code: D6
00:04:19:76.09600: POST Code: D7
00:04:19:77.00000: POST Code: D8
00:04:19:77.00320: POST Code: D9
00:04:19:77.00688: POST Code: DA
00:04:19:77.01024: POST Code: DB
00:04:19:77.01296: POST Code: DC
00:04:19:77.01616: POST Code: DD
00:04:19:77.01936: POST Code: DE
00:04:19:77.02224: POST Code: DF
00:04:19:77.02512: POST Code: E0
00:04:19:77.02848: POST Code: E1
00:04:19:77.03184: POST Code: E2
00:04:19:77.03616: POST Code: E3
00:04:19:77.03936: POST Code: E4
00:04:19:77.04224: POST Code: E5
00:04:19:77.04512: POST Code: E6
00:04:19:77.04784: POST Code: E7
00:04:19:77.05072: POST Code: E8
00:04:19:77.05392: POST Code: E9
00:04:19:77.05680: POST Code: EA
00:04:19:77.05968: POST Code: EB
00:04:19:77.06176: POST Code: EC
00:04:19:77.06464: POST Code: ED
00:04:19:77.06672: POST Code: EE
00:04:19:77.06864: POST Code: EF
00:04:19:77.07088: POST Code: F0
00:04:19:77.07328: POST Code: F1
00:04:19:77.07568: POST Code: F2
00:04:19:77.07856: POST Code: F3
00:04:19:77.08144: POST Code: F4
00:04:19:77.08432: POST Code: F5
00:04:19:77.08720: POST Code: F6
00:04:19:77.09056: POST Code: F7
00:04:19:77.09328: POST Code: F8
00:04:19:77.09616: POST Code: F9
00:04:19:77.09920: POST Code: FA
00:04:19:78.00208: POST Code: FB
00:04:19:78.00528: POST Code: FC
00:04:19:78.00816: POST Code: FD
00:04:19:78.01168: POST Code: 09
00:04:19:78.01216: POST Code: 0A
00:04:19:78.01232: POST Code: 0B
00:04:19:78.01280: POST Code: 0C
00:04:19:78.01344: POST Code: 0E
00:04:19:78.01376: POST Code: 0F
00:04:21:47.04096: POST Code: 32
00:04:21:90.09168: POST Code: 11
00:04:21:91.08336: POST Code: 12
00:04:21:91.08720: POST Code: 13
00:04:21:91.08768: POST Code: 14
00:04:21:92.05200: POST Code: 15
00:04:21:92.05360: POST Code: 16
00:04:21:92.05456: POST Code: 17
00:04:21:92.05568: POST Code: 18
00:04:21:92.05584: POST Code: 19
00:04:21:92.05648: POST Code: 81
00:04:21:93.00832: POST Code: 85
00:04:21:93.00848: POST Code: 1A
00:04:21:93.00896: POST Code: 1B
00:04:25:17.00768: POST Code: 1C
00:04:25:17.00896: POST Code: 1D
00:04:25:33.04448: POST Code: 21
00:04:25:58.03552: POST Code: 23

I see it's arriving to code 40h, which is the Math Coprocessor test?

Edit: It seems the Math Coprocessor isn't detected (which is the case, as it's not emulated(it has dummy handlers for ET and EM emulation, while actual instructions given to it result in no effect at all without software emulation or exceptions because the task is switched. They're effectively NOP instructions with unused modr/m parameters if that's the case).

After that, it seems to detect some 'manufacturing burn-in test':

F15A_0:
TEST @MFG_TST,MFG_LOOP ; MFG BURN IN MODE
JNZ F15A ; GO IF NOT
JMP START_1 ; GO LOOP POST
F15A: CMP BYTE PTR @RESET_FLAG,64H ; MFG RUN IN?
JZ F15B ; BYPASS BEEP IF YES

This data is apparently gotten from the 8042 controller?

;-----	GET THE SWITCH SETTINGS
MOV AL,READ_8042_INPUT ; READ INPUT COMMAND
MOV SP:OFFSET C8042C ; SET RETURN ADDRESS
JMP SHORT C8042 ; ISSUE COMMAND
E30B: MOV SP,OFFSET OBF_42B ; SET RETURN ADDRESS
JMP SHORT OBF_42 ; GO WAIT FOR RESPONSE
E30C: IN AL,PORT_A ; GET THE SWITCH
OUT DMA_PAGE+1,AL ; SAVE TEMPORARY

So there's already a problem at point 0Ch?

Edit: Having implemented the proper input port emulation (bits 7 and 4 are always set. Bit 6 is being set with MDA emulation, cleared with CGA/(S)VGA emulation).

It now tries to read the floppy (I see it's enabling the drive motor(s)). It finally gives two errors:

06144 KB OK
301-Keyboard Error
161-System Options Not Set-(Run SETUP)

(RESUME = "F1" KEY)

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

Reply 48 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

This is my current log (With the same last output of the previous post):

00:00:07:04.05271: POST Code: 01
00:00:07:04.05996: POST Code: 02
00:00:07:21.08713: POST Code: 03
00:00:07:21.08860: POST Code: 04
00:00:07:21.08929: POST Code: 05
00:00:07:21.08989: POST Code: 06
00:00:07:21.09490: POST Code: 07
00:00:07:22.00077: POST Code: 08
00:00:07:22.00274: POST Code: 00
00:00:07:22.00492: POST Code: 01
00:00:07:22.00687: POST Code: 02
00:00:07:22.00884: POST Code: 03
00:00:07:22.01078: POST Code: 04
00:00:07:22.01274: POST Code: 05
00:00:07:22.01541: POST Code: 06
00:00:07:22.01737: POST Code: 07
00:00:07:22.06115: POST Code: 08
00:00:07:22.06333: POST Code: 09
00:00:07:22.06538: POST Code: 0A
00:00:07:22.06734: POST Code: 0B
00:00:07:22.06963: POST Code: 0C
00:00:07:22.07164: POST Code: 0D
00:00:07:22.07358: POST Code: 0E
00:00:07:22.07556: POST Code: 0F
00:00:07:22.07751: POST Code: 10
00:00:07:22.07977: POST Code: 11
00:00:07:22.08173: POST Code: 12
00:00:07:22.08368: POST Code: 13
00:00:07:22.08577: POST Code: 14
00:00:07:22.08772: POST Code: 15
00:00:07:22.08992: POST Code: 16
00:00:07:22.09243: POST Code: 17
00:00:07:22.09573: POST Code: 18
00:00:07:22.09999: POST Code: 19
00:00:07:23.00270: POST Code: 1A
00:00:07:23.00520: POST Code: 1B
00:00:07:23.00714: POST Code: 1C
00:00:07:23.00911: POST Code: 1D
00:00:07:23.01107: POST Code: 1E
00:00:07:23.01321: POST Code: 1F
00:00:07:23.01646: POST Code: 20
00:00:07:23.01990: POST Code: 21
00:00:07:23.02316: POST Code: 22
00:00:07:23.02649: POST Code: 23
00:00:07:23.03064: POST Code: 24
00:00:07:23.03471: POST Code: 25
00:00:07:23.03806: POST Code: 26
00:00:07:23.04193: POST Code: 27
00:00:07:23.04607: POST Code: 28
00:00:07:23.05053: POST Code: 29
00:00:07:23.05272: POST Code: 2A
00:00:07:23.05481: POST Code: 2B
00:00:07:23.05686: POST Code: 2C
00:00:07:23.05895: POST Code: 2D
00:00:07:23.06117: POST Code: 2E
00:00:07:23.06328: POST Code: 2F
00:00:07:23.06529: POST Code: 30
00:00:07:23.06729: POST Code: 31
00:00:07:23.06930: POST Code: 32
00:00:07:23.07131: POST Code: 33
Show last 463 lines
00:00:07:23.07331: POST Code: 34
00:00:07:23.07562: POST Code: 35
00:00:07:23.07761: POST Code: 36
00:00:07:23.07962: POST Code: 37
00:00:07:23.08164: POST Code: 38
00:00:07:23.08362: POST Code: 39
00:00:07:23.08566: POST Code: 3A
00:00:07:23.08765: POST Code: 3B
00:00:07:23.08967: POST Code: 3C
00:00:07:23.09167: POST Code: 3D
00:00:07:23.09366: POST Code: 3E
00:00:07:23.09568: POST Code: 3F
00:00:07:23.09767: POST Code: 40
00:00:07:23.09969: POST Code: 41
00:00:07:24.00170: POST Code: 42
00:00:07:24.00369: POST Code: 43
00:00:07:24.00570: POST Code: 44
00:00:07:24.00769: POST Code: 45
00:00:07:24.01005: POST Code: 46
00:00:07:24.01206: POST Code: 47
00:00:07:24.01407: POST Code: 48
00:00:07:24.01606: POST Code: 49
00:00:07:24.01805: POST Code: 4A
00:00:07:24.02030: POST Code: 4B
00:00:07:24.02271: POST Code: 4C
00:00:07:24.02480: POST Code: 4D
00:00:07:24.02679: POST Code: 4E
00:00:07:24.02881: POST Code: 4F
00:00:07:24.03080: POST Code: 50
00:00:07:24.03287: POST Code: 51
00:00:07:24.03484: POST Code: 52
00:00:07:24.03678: POST Code: 53
00:00:07:24.03874: POST Code: 54
00:00:07:24.04100: POST Code: 55
00:00:07:24.04297: POST Code: 56
00:00:07:24.04494: POST Code: 57
00:00:07:24.04689: POST Code: 58
00:00:07:24.04902: POST Code: 59
00:00:07:24.05097: POST Code: 5A
00:00:07:24.05293: POST Code: 5B
00:00:07:24.05522: POST Code: 5C
00:00:07:24.05717: POST Code: 5D
00:00:07:24.05913: POST Code: 5E
00:00:07:24.06108: POST Code: 5F
00:00:07:24.06304: POST Code: 60
00:00:07:24.06500: POST Code: 61
00:00:07:24.06695: POST Code: 62
00:00:07:24.06913: POST Code: 63
00:00:07:24.07127: POST Code: 64
00:00:07:24.07323: POST Code: 65
00:00:07:24.07520: POST Code: 66
00:00:07:24.07715: POST Code: 67
00:00:07:24.07911: POST Code: 68
00:00:07:24.08106: POST Code: 69
00:00:07:24.08302: POST Code: 6A
00:00:07:24.08542: POST Code: 6B
00:00:07:24.08738: POST Code: 6C
00:00:07:24.08933: POST Code: 6D
00:00:07:24.09127: POST Code: 6E
00:00:07:24.09323: POST Code: 6F
00:00:07:24.09521: POST Code: 70
00:00:07:24.09716: POST Code: 71
00:00:07:24.09942: POST Code: 72
00:00:07:25.00136: POST Code: 73
00:00:07:25.00332: POST Code: 74
00:00:07:25.00529: POST Code: 75
00:00:07:25.00723: POST Code: 76
00:00:07:25.00919: POST Code: 77
00:00:07:25.01114: POST Code: 78
00:00:07:25.01311: POST Code: 79
00:00:07:25.01546: POST Code: 7A
00:00:07:25.01740: POST Code: 7B
00:00:07:25.01938: POST Code: 7C
00:00:07:25.02133: POST Code: 7D
00:00:07:25.02329: POST Code: 7E
00:00:07:25.02530: POST Code: 7F
00:00:07:25.02739: POST Code: 80
00:00:07:25.02964: POST Code: 81
00:00:07:25.03159: POST Code: 82
00:00:07:25.03355: POST Code: 83
00:00:07:25.03551: POST Code: 84
00:00:07:25.03746: POST Code: 85
00:00:07:25.03943: POST Code: 86
00:00:07:25.04137: POST Code: 87
00:00:07:25.04336: POST Code: 88
00:00:07:25.04560: POST Code: 89
00:00:07:25.04755: POST Code: 8A
00:00:07:25.04951: POST Code: 8B
00:00:07:25.05146: POST Code: 8C
00:00:07:25.09495: POST Code: 8D
00:00:07:25.09711: POST Code: 8E
00:00:07:25.09922: POST Code: 8F
00:00:07:26.00116: POST Code: 90
00:00:07:26.00311: POST Code: 91
00:00:07:26.00541: POST Code: 92
00:00:07:26.00736: POST Code: 93
00:00:07:26.00932: POST Code: 94
00:00:07:26.01126: POST Code: 95
00:00:07:26.01321: POST Code: 96
00:00:07:26.01580: POST Code: 97
00:00:07:26.01820: POST Code: 98
00:00:07:26.02062: POST Code: 99
00:00:07:26.02257: POST Code: 9A
00:00:07:26.02498: POST Code: 9B
00:00:07:26.02693: POST Code: 9C
00:00:07:26.02890: POST Code: 9D
00:00:07:26.03085: POST Code: 9E
00:00:07:26.03300: POST Code: 9F
00:00:07:26.03539: POST Code: A0
00:00:07:26.03735: POST Code: A1
00:00:07:26.03931: POST Code: A2
00:00:07:26.04127: POST Code: A3
00:00:07:26.04323: POST Code: A4
00:00:07:26.04528: POST Code: A5
00:00:07:26.04729: POST Code: A6
00:00:07:26.05097: POST Code: A7
00:00:07:26.05320: POST Code: A8
00:00:07:26.05572: POST Code: A9
00:00:07:26.05782: POST Code: AA
00:00:07:26.06003: POST Code: AB
00:00:07:26.06202: POST Code: AC
00:00:07:26.06402: POST Code: AD
00:00:07:26.06607: POST Code: AE
00:00:07:26.06802: POST Code: AF
00:00:07:26.07037: POST Code: B0
00:00:07:26.07238: POST Code: B1
00:00:07:26.07434: POST Code: B2
00:00:07:26.07629: POST Code: B3
00:00:07:26.07824: POST Code: B4
00:00:07:26.08018: POST Code: B5
00:00:07:26.08213: POST Code: B6
00:00:07:26.08430: POST Code: B7
00:00:07:26.08646: POST Code: B8
00:00:07:26.08840: POST Code: B9
00:00:07:26.09055: POST Code: BA
00:00:07:26.09249: POST Code: BB
00:00:07:26.09445: POST Code: BC
00:00:07:26.09641: POST Code: BD
00:00:07:26.09836: POST Code: BE
00:00:07:27.00072: POST Code: BF
00:00:07:27.00266: POST Code: C0
00:00:07:27.00461: POST Code: C1
00:00:07:27.00657: POST Code: C2
00:00:07:27.00852: POST Code: C3
00:00:07:27.01152: POST Code: C4
00:00:07:27.01371: POST Code: C5
00:00:07:27.01620: POST Code: C6
00:00:07:27.01814: POST Code: C7
00:00:07:27.02059: POST Code: C8
00:00:07:27.02295: POST Code: C9
00:00:07:27.02537: POST Code: CA
00:00:07:27.02785: POST Code: CB
00:00:07:27.02995: POST Code: CC
00:00:07:27.03194: POST Code: CD
00:00:07:27.03405: POST Code: CE
00:00:07:27.03617: POST Code: CF
00:00:07:27.03816: POST Code: D0
00:00:07:27.04045: POST Code: D1
00:00:07:27.04240: POST Code: D2
00:00:07:27.04435: POST Code: D3
00:00:07:27.04633: POST Code: D4
00:00:07:27.04828: POST Code: D5
00:00:07:27.05076: POST Code: D6
00:00:07:27.05283: POST Code: D7
00:00:07:27.05543: POST Code: D8
00:00:07:27.05835: POST Code: D9
00:00:07:27.06142: POST Code: DA
00:00:07:27.06413: POST Code: DB
00:00:07:27.06647: POST Code: DC
00:00:07:27.06891: POST Code: DD
00:00:07:27.07262: POST Code: DE
00:00:07:27.07470: POST Code: DF
00:00:07:27.07677: POST Code: E0
00:00:07:27.07882: POST Code: E1
00:00:07:27.08086: POST Code: E2
00:00:07:27.08296: POST Code: E3
00:00:07:27.08539: POST Code: E4
00:00:07:27.08752: POST Code: E5
00:00:07:27.09013: POST Code: E6
00:00:07:27.09245: POST Code: E7
00:00:07:27.09484: POST Code: E8
00:00:07:27.09697: POST Code: E9
00:00:07:27.09897: POST Code: EA
00:00:07:28.00098: POST Code: EB
00:00:07:28.00361: POST Code: EC
00:00:07:28.00602: POST Code: ED
00:00:07:28.00846: POST Code: EE
00:00:07:28.01158: POST Code: EF
00:00:07:28.01479: POST Code: F0
00:00:07:28.01748: POST Code: F1
00:00:07:28.02024: POST Code: F2
00:00:07:28.02226: POST Code: F3
00:00:07:28.02428: POST Code: F4
00:00:07:28.02631: POST Code: F5
00:00:07:28.02831: POST Code: F6
00:00:07:28.03067: POST Code: F7
00:00:07:28.03315: POST Code: F8
00:00:07:28.03554: POST Code: F9
00:00:07:28.03756: POST Code: FA
00:00:07:28.03957: POST Code: FB
00:00:07:28.04157: POST Code: FC
00:00:07:28.04375: POST Code: FD
00:00:07:28.04685: POST Code: 09
00:00:07:28.04717: POST Code: 0A
00:00:07:28.04736: POST Code: 0B
00:00:07:28.04771: POST Code: 0C
00:00:07:28.04827: POST Code: 0E
00:00:07:28.04849: POST Code: 0F
00:00:08:35.04742: POST Code: 32
00:00:08:64.01200: POST Code: 11
00:00:08:64.07440: POST Code: 12
00:00:08:64.07647: POST Code: 13
00:00:08:64.07666: POST Code: 14
00:00:08:64.08869: POST Code: 15
00:00:08:64.09013: POST Code: 16
00:00:08:64.09084: POST Code: 17
00:00:08:64.09195: POST Code: 18
00:00:08:64.09203: POST Code: 19
00:00:08:64.09245: POST Code: 81
00:00:08:65.02653: POST Code: 85
00:00:08:65.02660: POST Code: 1A
00:00:08:65.02694: POST Code: 1B
00:00:10:62.06853: POST Code: 1C
00:00:10:62.06955: POST Code: 1D
00:00:29:49.05200: POST Code: 1E
00:00:29:49.05270: POST Code: 1F
00:00:29:49.05440: POST Code: 20
00:00:29:49.05576: POST Code: 21
00:00:29:73.09426: POST Code: 23
00:00:33:54.06722: POST Code: 24
00:00:33:54.07072: POST Code: 25
00:00:33:54.07108: POST Code: 26
00:00:33:70.06124: POST Code: 27
00:00:33:70.06272: POST Code: 29
00:00:33:70.06308: POST Code: 2A
00:00:33:70.06456: POST Code: 2B
00:00:33:70.06564: POST Code: 2C
00:00:33:70.06800: POST Code: 2D
00:00:33:70.06820: POST Code: 2F
00:00:33:70.06832: POST Code: 30
00:00:33:70.06896: POST Code: 81
00:00:33:71.02520: POST Code: 85
00:00:33:71.02532: POST Code: 31
00:00:35:36.05328: POST Code: 32
00:00:35:78.06020: POST Code: 31
00:00:37:43.05780: POST Code: 32
00:00:37:86.00112: POST Code: 31
00:00:39:51.06488: POST Code: 32
00:00:39:93.03908: POST Code: 31
00:00:41:58.01236: POST Code: 32
00:00:42:00.01580: POST Code: 31
00:00:43:67.00916: POST Code: 32
00:00:44:09.09380: POST Code: 31
00:00:45:74.07612: POST Code: 32
00:00:46:17.08712: POST Code: 31
00:00:47:83.05052: POST Code: 32
00:00:48:26.01424: POST Code: 31
00:00:49:91.07652: POST Code: 32
00:00:50:34.05412: POST Code: 31
00:00:52:01.01100: POST Code: 32
00:00:52:43.03384: POST Code: 31
00:00:54:08.04072: POST Code: 32
00:00:54:50.05452: POST Code: 31
00:00:56:17.04140: POST Code: 32
00:00:56:59.08400: POST Code: 31
00:00:58:24.02756: POST Code: 32
00:00:58:66.05916: POST Code: 31
00:01:00:32.09032: POST Code: 32
00:01:00:75.03364: POST Code: 31
00:01:02:41.09472: POST Code: 32
00:01:02:84.07392: POST Code: 31
00:01:04:50.06100: POST Code: 32
00:01:04:92.00568: POST Code: 31
00:01:06:58.06440: POST Code: 32
00:01:07:01.02744: POST Code: 31
00:01:08:70.03632: POST Code: 32
00:01:09:13.01120: POST Code: 31
00:01:10:79.05360: POST Code: 32
00:01:11:21.09336: POST Code: 31
00:01:12:88.00184: POST Code: 32
00:01:13:30.04160: POST Code: 31
00:01:14:96.06344: POST Code: 32
00:01:15:38.05888: POST Code: 31
00:01:17:06.01072: POST Code: 32
00:01:17:47.04728: POST Code: 31
00:01:19:13.06048: POST Code: 32
00:01:19:55.00032: POST Code: 31
00:01:21:21.08288: POST Code: 32
00:01:21:64.04552: POST Code: 31
00:01:23:32.06792: POST Code: 32
00:01:23:74.03320: POST Code: 31
00:01:25:41.01880: POST Code: 32
00:01:25:83.05808: POST Code: 31
00:01:27:51.03232: POST Code: 32
00:01:27:93.07280: POST Code: 31
00:01:29:60.03152: POST Code: 32
00:01:30:01.05272: POST Code: 31
00:01:31:67.07888: POST Code: 32
00:01:32:08.08048: POST Code: 31
00:01:33:75.00248: POST Code: 32
00:01:34:17.03680: POST Code: 31
00:01:35:83.00528: POST Code: 32
00:01:36:25.01664: POST Code: 31
00:01:37:92.08648: POST Code: 32
00:01:38:34.07520: POST Code: 31
00:01:40:00.05680: POST Code: 32
00:01:40:42.06960: POST Code: 31
00:01:42:09.07728: POST Code: 32
00:01:42:51.04552: POST Code: 31
00:01:44:18.01736: POST Code: 32
00:01:44:60.03040: POST Code: 31
00:01:46:27.01096: POST Code: 32
00:01:46:69.06728: POST Code: 31
00:01:48:35.01224: POST Code: 32
00:01:48:77.05592: POST Code: 31
00:01:50:44.04528: POST Code: 32
00:01:50:87.02304: POST Code: 31
00:01:52:54.04032: POST Code: 32
00:01:52:96.03824: POST Code: 31
00:01:54:64.00024: POST Code: 32
00:01:55:05.04912: POST Code: 31
00:01:56:71.04816: POST Code: 32
00:01:57:12.09992: POST Code: 31
00:01:58:80.06888: POST Code: 32
00:01:59:23.05400: POST Code: 31
00:02:00:89.03224: POST Code: 32
00:02:01:31.02032: POST Code: 31
00:02:02:98.06096: POST Code: 32
00:02:03:40.06168: POST Code: 31
00:02:05:09.08664: POST Code: 32
00:02:05:52.00544: POST Code: 31
00:02:07:22.08112: POST Code: 32
00:02:07:64.09344: POST Code: 31
00:02:09:33.02584: POST Code: 32
00:02:09:74.04616: POST Code: 31
00:02:11:41.02376: POST Code: 32
00:02:11:83.07056: POST Code: 31
00:02:13:51.00616: POST Code: 32
00:02:13:94.01576: POST Code: 31
00:02:15:61.03776: POST Code: 32
00:02:16:03.06224: POST Code: 31
00:02:17:71.02848: POST Code: 32
00:02:18:14.03696: POST Code: 31
00:02:19:81.00000: POST Code: 32
00:02:20:22.01088: POST Code: 31
00:02:21:88.04768: POST Code: 32
00:02:22:30.03104: POST Code: 31
00:02:23:97.02416: POST Code: 32
00:02:24:40.03568: POST Code: 31
00:02:26:07.02656: POST Code: 32
00:02:26:49.06528: POST Code: 31
00:02:28:20.01888: POST Code: 32
00:02:28:61.09424: POST Code: 31
00:02:30:30.01376: POST Code: 32
00:02:30:71.08000: POST Code: 31
00:02:32:38.05440: POST Code: 32
00:02:32:81.03312: POST Code: 31
00:02:34:48.07856: POST Code: 32
00:02:34:90.06096: POST Code: 31
00:02:36:57.08192: POST Code: 32
00:02:37:00.05072: POST Code: 31
00:02:38:67.08192: POST Code: 32
00:02:39:10.03920: POST Code: 31
00:02:40:76.09584: POST Code: 32
00:02:41:19.07440: POST Code: 31
00:02:42:87.01952: POST Code: 32
00:02:43:29.09600: POST Code: 31
00:02:44:96.05520: POST Code: 32
00:02:45:38.01664: POST Code: 31
00:02:47:08.03440: POST Code: 32
00:02:47:50.04816: POST Code: 31
00:02:49:19.04288: POST Code: 32
00:02:49:61.07184: POST Code: 31
00:02:51:28.02112: POST Code: 32
00:02:51:71.01712: POST Code: 31
00:02:53:43.00032: POST Code: 32
00:02:53:88.00528: POST Code: 31
00:02:55:54.03888: POST Code: 32
00:02:55:97.06288: POST Code: 31
00:02:57:67.06880: POST Code: 32
00:02:58:09.07696: POST Code: 31
00:02:59:75.05088: POST Code: 32
00:03:00:18.01632: POST Code: 31
00:03:01:84.03632: POST Code: 32
00:03:02:26.07680: POST Code: 31
00:03:03:91.02576: POST Code: 32
00:03:04:34.01920: POST Code: 31
00:03:05:99.09104: POST Code: 32
00:03:06:42.00144: POST Code: 31
00:03:08:07.08032: POST Code: 32
00:03:08:50.08144: POST Code: 31
00:03:10:20.02352: POST Code: 32
00:03:10:63.06816: POST Code: 31
00:03:12:32.06640: POST Code: 32
00:03:12:74.06944: POST Code: 31
00:03:14:41.09872: POST Code: 32
00:03:14:84.06304: POST Code: 31
00:03:16:51.05488: POST Code: 32
00:03:16:94.02128: POST Code: 31
00:03:18:61.00848: POST Code: 32
00:03:19:03.06704: POST Code: 31
00:03:20:70.05504: POST Code: 32
00:03:21:13.05616: POST Code: 31
00:03:22:80.05040: POST Code: 32
00:03:23:22.00976: POST Code: 31
00:03:24:89.09728: POST Code: 32
00:03:25:31.05840: POST Code: 31
00:03:26:97.08240: POST Code: 32
00:03:27:40.06272: POST Code: 31
00:03:29:08.06896: POST Code: 32
00:03:29:51.04720: POST Code: 31
00:03:31:19.05072: POST Code: 32
00:03:31:60.07760: POST Code: 31
00:03:33:27.04704: POST Code: 32
00:03:33:70.01152: POST Code: 31
00:03:35:37.02032: POST Code: 32
00:03:35:78.03936: POST Code: 31
00:03:37:45.02816: POST Code: 32
00:03:37:87.01088: POST Code: 31
00:03:39:56.05056: POST Code: 32
00:03:39:98.05712: POST Code: 31
00:03:41:66.09072: POST Code: 32
00:03:42:08.04288: POST Code: 31
00:03:43:76.02288: POST Code: 32
00:03:44:18.02784: POST Code: 31
00:03:45:84.07808: POST Code: 32
00:03:46:28.00560: POST Code: 31
00:03:47:94.09136: POST Code: 32
00:03:48:36.05648: POST Code: 31
00:03:50:04.01456: POST Code: 32
00:03:50:46.00720: POST Code: 31
00:03:52:12.06352: POST Code: 32
00:03:52:93.06416: POST Code: 33
00:04:08:11.05888: POST Code: 34
00:04:08:11.06224: POST Code: F0
00:04:08:11.06320: POST Code: 81
00:04:08:12.07056: POST Code: 85
00:04:08:12.07088: POST Code: F1
00:04:08:12.07120: POST Code: B0
00:04:08:12.07152: POST Code: F2
00:04:08:12.07216: POST Code: 9D
00:04:08:12.07280: POST Code: F3
00:04:08:12.07344: POST Code: F4
00:04:08:34.00144: POST Code: 95
00:04:08:34.00384: POST Code: F5
00:04:08:34.00480: POST Code: F6
00:04:08:34.00544: POST Code: 9D
00:04:08:34.00608: POST Code: F7
00:04:08:34.00656: POST Code: F8
00:04:08:34.00672: POST Code: F9
00:04:08:34.00704: POST Code: FA
00:04:08:34.00784: POST Code: 35
00:04:08:34.00800: POST Code: 34
00:04:08:34.01136: POST Code: 35
00:04:08:34.01152: POST Code: 36
00:04:21:54.04384: POST Code: 37
00:04:21:55.01904: POST Code: 3A
00:04:21:55.02288: POST Code: 3C
00:04:23:10.04864: POST Code: 3D
00:04:30:54.02208: POST Code: 3B
00:04:34:00.01792: POST Code: 40
00:04:37:37.09136: POST Code: 3F

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

Reply 49 of 151, by Scali

User metadata
Rank l33t
Rank
l33t
superfury wrote:
It finally gives two errors: […]
Show full quote

It finally gives two errors:

06144 KB OK
301-Keyboard Error
161-System Options Not Set-(Run SETUP)

(RESUME = "F1" KEY)

The keyboard error could be because you are only emulating an XT style interface? The AT had a bidirectional keyboard bus, and probably sends some diagnostics stuff to the keyboard, and expects something in return which it isn't getting.
The system options not set is probably because it expects something specific in the CMOS bytes of the MC146818 chip (where the configuration is stored for an AT).
If you emulate that chip, you should indeed be able to run the setup utility, set it up once, and then reboot it without this error (this is non-volatile ram, so your emulator will have to save this data somewhere, so it is preserved between reboots or even different sessions of running the emulator).
See here for more info, it's port 0x70 and 0x71 to access the CMOS registers/storage: http://wiki.osdev.org/CMOS#Accessing_CMOS_Registers
Here's a map of what the storage is used for: http://www.bioscentral.com/misc/cmosmap.htm

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 50 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

I'm seeing something strange when debugging through the keyboard test of the AT BIOS:

;------------------------------------------------
;TEST.21 :
; KEYBOARD TEST :
; DESCRIPTION :
; RESET THE KEYBOARD AND CHECK THAT SCAN :
; CODE *AA" IS RETURNED TO THE PROCESSOR. :
; CHECK FOR STUCK KEYS. :
;------------------------------------------------

MOV AL,35H ; <><><><><><><><><><><><>
OUT MFG_PORT,AL ; <><> CHECKPOINT 35 <><>

That block eventually will try to reset the keyboard, but when it reaches the following line:

	CMP	BL,KB_OK	; SCAN CODE AS EXPECTED?
JNE F6 ; NO - DISPLAY ERROR MESSAGE

;----- CHECK FOR STUCK KEYS

0xAA(The self test passed result) is in AL instead of BL?

The full code is:

;------------------------------------------------
;TEST.21 :
; KEYBOARD TEST :
; DESCRIPTION :
; RESET THE KEYBOARD AND CHECK THAT SCAN :
; CODE *AA" IS RETURNED TO THE PROCESSOR. :
; CHECK FOR STUCK KEYS. :
;------------------------------------------------

MOV AL,35H ; <><><><><><><><><><><><>
OUT MFG_PORT,AL ; <><> CHECKPOINT 35 <><>

TEST @MFG_TST,MFG_LOOP ; MANUFACTURING BURN IN TEST MODE?
JNZ F7_A
JMP F7 ; YES - SKIP KEYBOARD TEST
F7_A: CMP BYTE PTR @RESET_FLAG,064H ; MANUFACTURING RUN IN MODE?
JNZ F7_B
JMP F7 ; YES - SKIP KEYBOARD TEST
F7_B: MOV AL,36H ; <><><><><><><><><><><><>
OUT MFG_PORT,AL ; <><> CHECKPOINT 36 <><>
CLI
CMP @RESET_FLAG,1234H ; SOFT RESET?
JZ G10
CMP BYTE PTR @RESET_FLAG,KB_OK ; CHECK FOR AA ALREADY RECEIVED
JZ G10 ; GO IF YES
MOV AL,ENA_KBD
CALL C8042 ; ENABLE KEYBOARD
MOV BH,4 ; TRY 4 TIMES
LOOP1: CALL OBF_42 ; CHECK FOR OUTPUT BUFFER FULL
JNZ G10 ; GO IF BUFFER FULL
DEC BH
JNZ LOOP1
G10: MOV AL,DIS_KBD ; DISABLE KEYBOARD
CALL C8042
IN AL,PORT_A ; FLUSH
MOV AL,KYBD_CLK_DATA ; GET THE CLOCK AND DATA LINES
CALL C8042
CALL OBF_42 ; WAIT FOR OUTPUT BUFFER FULL
IN AL,PORT_A ; GET THE RESULTS
TEST AL,KYBD_CLK ; KEYBOARD CLOCK MUST BE LOW
JZ G11

OR @MFG_ERR_FLAG+1,KYCLK_FAIL ; <><><><><><><><><><><><><><><>
; <><> KEYBOARD CLOCK HIGH <><>
MOV SI,OFFSET E304 ; DISPLAY 304 ERROR
JMP SHORT F6D ; REPORT ERROR
G11: CALL KBD_RESET ; ISSUE RESET TO KEYBOARD
JCXZ F6 ; PRINT ERROR MESSAGE IF NO INTERRUPT
MOV AL,37H ; <><><><><><><><><><><><>
OUT MFG_PORT,AL ; <><> CHECKPOINT 37 <><>
CMP BL,KB_OK ; SCAN CODE AS EXPECTED?
JNE F6 ; NO - DISPLAY ERROR MESSAGE

My reset function in the PS/2 keyboard controller:

	case 0xFF: //Reset?
input_lastwrite_keyboard(); //Clear buffer for our result!
give_keyboard_input(0xFA); //Acnowledge!
input_lastwrite_keyboard(); //Force 0xFA to user!
resetKeyboard(1); //Reset the Keyboard Controller!
Keyboard.has_command = 0; //No command anymore!
break;

resetKeyboard also adds the 0xAA byte to the keyboard output buffer.

Btw the 8042 and PS/2 keyboard have a dual function: They support both 8042 PS/2 style and IBM XT style keyboards. The main difference is that the IBM AT automatically acnowledges the read data, while the XT disables the PS/2 mouse and requires bit 1 of port 0x61 to be raise(low-to-high transition) to clear the 8042 output buffer.

Is this correct?

Last edited by superfury on 2016-09-21, 13:53. Edited 1 time in total.

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

Reply 51 of 151, by Scali

User metadata
Rank l33t
Rank
l33t
superfury wrote:

0xAA(The self test passed result) is in AL instead of BL?

It should be in BL.
As you can see, it calls KBD_RESET. This reads from the keyboard, and copies AL to BL before it returns.
So the last byte read by KBD_RESET should be in BL at that point.
That is of course assuming that CX was not zero when KBD_RESET returned, because that would mean there was an error.
So I would check what happens in KBD_RESET... Does it successfully reset the keyboard and actually read the byte there?

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 52 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

It goes wrong here:

	CMP	AL,KB_ACK
JNZ G13

AL doesn't contain 0xFA, but 0xAA?

Edit: Thinking about it: this might actually be the very first BAT completed code, which is sent when the emulator itself starts. Once the keyboard port (8042 port 0) is enabled, it immediately receives this byte. Then, with 0xAA in the output buffer, the BIOS sends a 0xFF command to reset the PS/2 keyboard. This command adds 0xFA and then 0xAA to the PS/2 keyboard output buffer(data ready to be sent to the 8042 once it's output buffer is read(and cleared). The BIOS then reads the BAT code that's from the PS/2 keyboard when it's initialized by the emulator itself. The 8042 then reads the 0xFA byte from the PS/2 controller, but it's too late: the BIOS already has read and compared the emulator initialized BAT result code and compares it to 0xFA, which fails and makes the BIOS think the PS/2 keyboard is corrupt, giving the incorrect 0xAA result in AL and aborting the function with an error.

Is it correct that the PS/2 keyboard starts with 0xAA in it's output buffer when the PC is powered on(while the BIOS is still checking basic hardware, not even looking at PS/2 devices yet?

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

Reply 53 of 151, by Jepael

User metadata
Rank Oldbie
Rank
Oldbie
superfury wrote:

Btw the 8042 and PS/2 keyboard have a dual function: They support both 8042 PS/2 style and IBM XT style keyboards. The main difference is that the IBM AT automatically acnowledges the read data, while the XT disables the PS/2 mouse and requires bit 1 of port 0x61 to be raise(low-to-high transition) to clear the 8042 output buffer.

Is this correct?

Not really. The PS/2 mouse is not also relevant here.

XT and AT keyboards send different protocol on wires, they have different amount of bits.

They also send different scancode data, but on AT the 8042 will convert scancodes so that port 60h contains XT compatible scancodes.

On XT, the hardware will jam the clock so keyboard can't send more, and thus requires the 0x80 bit flipping to free the bus. Yes on AT the 8042 will handle everything.

Reply 54 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

The routine still gives the same error, even though the output buffer of the Keyboard should be empty (and nothing is received yet when the routine should start). I've disabled the initial 0xAA put in the keyboard's output buffer when the emulator starts. So when it gets to the keyboard routine, the 8042 can't receive anything until the 0xFF command is sent. That should make it fill it's buffers with the 0xFA and then the 0xAA bytes from the PS/2 keyboard?

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

Reply 55 of 151, by Scali

User metadata
Rank l33t
Rank
l33t

Why are we even talking about PS/2?
An AT is a completely different machine, and predates the PS/2 by a number of years.
You're trying to run an AT BIOS on a 286 emulator. PS/2 doesn't enter the equation.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 56 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

Because the IBM AT has a 8042 controller, which connects to a PS/2 Keyboard (and Mouse on the second port)?

https://deskthority.net/wiki/IBM_Model_F#IBM_ … ter_AT_keyboard

Edit: Does this mean there's a problem with the 8042 microcontroller itself?

Edit: Just implemented the 8042 disable/enable port bits to prevent input from the mouse and keyboard on power-up and when disabled through the configuration byte and enable/disable commands. I've also restored the PS/2 keyboard's BAT sending when emulation is started.

Since the port is disabled until the 0xFF reset command is sent, the 0xAA byte should be removed by the reset command? Thus proper results(as well as the PS/2 Mouse not sending any, since it stays disabled.

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

Reply 57 of 151, by Jepael

User metadata
Rank Oldbie
Rank
Oldbie
superfury wrote:

Because the IBM AT has a 8042 controller, which connects to a PS/2 Keyboard (and Mouse on the second port)?

AT has a 8042 controller which is connected to AT keyboard and supports only keyboards.

PS/2 has also a 8042 controller which supports both PS/2 keyboards and mice. PS/2 keyboards support more commands than AT keyboards.

Granted, most likely PS/2 keyboard works on an AT, and AT keyboard works on a PS/2 just fine with an adapter.

Reply 58 of 151, by Scali

User metadata
Rank l33t
Rank
l33t
superfury wrote:

Because the IBM AT has a 8042 controller, which connects to a PS/2 Keyboard (and Mouse on the second port)?

PS/2 keyboards and mice weren't even invented until years later.
The AT is from 1984, PS/2 is from 1987.
The AT didn't have a mouse port. Back then people still used serial mice, if they used a mouse at all, or they used a specific 'bus mouse' with ISA card.

They may both use the same controller chip, but the AT doesn't use it exactly the same way as the PS/2 does. Some status/control bits are different on PS/2 because of the extra mouse port.
I also believe that PS/2 keyboards support some additional commands.
Anyway, don't worry about PS/2.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 59 of 151, by superfury

User metadata
Rank l33t++
Rank
l33t++

So I essentially just disable all PS/2 mouse and PS/2 keyboard commands and disable the second PS/2 port (and specific bits) permanently for full IBM PC AT compatibility?

Edit: I've just modified the 8042, PS/2 keyboard and PS/2 mouse to start disabled when used. The PS/2 keyboard is now enabled on the first write to it(through port 0x60).

Unfortunately I don't know the differences between a PS/2 Keyboard and AT keyboard(and/or 8042), so I don't know which commands are AT and which ones PS/2, so I can't disable the PS/2 commands.

Edit: Just found some information on the AT 8042 on os2museum:
http://www.os2museum.com/wp/ibm-pcat-8042-key … oller-commands/

Using that, I can modify and fix the 8042 itself, but I still don't know anything about the 8042 keyboard controller?

Edit: Just implemented 8042 scancode set 'translation', 'Bochs-style' (simply force the scancode set of the keys sent to scancode set 1 when enabled). Sending data to any device (PS/2 mouse or keyboard) now enables the corresponding device(see os2museum article).

The BIOS still errors our for some reason? If I remember the Assembler code correctly, the initial 0xAA byte should have been discarded when enabling the keyboard for the first time?

The keyboard itself reports it's ID as 0xAB, 0x83. Is this correct for the AT keyboard?

Looking at the code and debugging each step with the emulator debugger:

;------------------------------------------------------------------
; THIS SUBROUTINE SENDS AN OUTPUT COMMAND TO THE KEYBOARD AND :
; RECEIVES THE KEYBOARD RESPONSE. :
; ENTRY REQUIREMENTS: :
; AL = COMMAND/DATA TO BE SENT :
; EXIT PARAMETERS: :
; ZERO FLAG = 1 IF ACK RECEIVED FROM THE KEY BOARD :
; AL = RESPONSE :
;------------------------------------------------------------------

XMIT_8042 PROC NEAR

;----- CHECK INPUT BUFFER FULL

XCHG AH,AL ; SAVE COMMAND
SUB CX,CX ; SET LOOP TIME-OUT
XMITLOOP:
IN AL,STATUS_PORT
TEST AL,INPT_BUF_FULL ; CHECK INPUT BUFFER FULL
LOOPNZ XMITLOOP
JCXZ SHORT XMIT_EXIT
XCHG AH,AL ; RESTORE COMMAND

;----- ISSUE THE COMMAND

OUT PORT_A,AL ; SEND THE COMMAND
SUB CX,CX ; SET LOOP COUNT

;----- CHECK OUTPUT BUFFER FULL

XMIT_1: IN AL,STATUS_PORT
MOV AH,AL ; SAVE STATUS
TEST AL,OUT_BUF_FULL ; CHECK IF 8042 HAS DATA
JZ XMIT_2 ; GO IF NOT
IN AL,PORT_A ; FLUSH DATA
XMIT_2: TEST AH,INPT_BUF_FULL ; CHECK COMMAND ACCEPTED
LOOPNZ XMIT_1
JNZ SHORT XMIT_EXIT ; NO FLUSH OR COMMAND NOT ACCEPTED

;----- CHECK OUTPUT BUFFER FULL

MOV BL,6 ; SET COUNT
SUB CX,CX ; SET LOOP COUNT
XMIT_3: IN AL,STATUS_PORT
TEST AL,OUT_BUF_PULL ; CHECK IF HAS DATA
LOOPZ XMIT_3 ; WAIT TILL DONE
JNZ XMIT_4
DEC BL ; DECREMENT OUTER LOOP
JNZ SHORT XMIT_3 ; TRY AGAIN
INC BL ; SET ERROR FLAG
JMP SHORT XMIT_EXIT ; 8042 STUCK BUSY

;----- GET THE DATA

XMIT_4: SUB CX,CX ; ALLOW TIME FOR POSSIBLE
; ERROR -> SYSTEM UNIT OR KEYBOARD
XMIT_5: LOOP XMIT_5
IN AL,PORT_A
SUB CX,01H ; SET CX OTHER THAN ZERO
XMIT_EXIT:
Show last 2 lines
	RET
XMIT_8042 ENDP

The function IN AL,PORT_A returns the proper 0xFA result and finally sets CX to 0xFFFF. So that part of the command went without problems(according to the documentation the command 0xFF gives 0xFA(command succeeded), then 0xAA(BAT succeeded) as a result)?

The very first " IN AL,PORT_A ; FLUSH DATA" during the XMIT_1 block flushes the 0xFA received, then the final read after XMIT_5 reads the incorrect 0xAA from the keyboard, instead of the correct 0xFA(which was discarded)???

Then it returns to the caller(KBD_RESET), which reads the 'result code', which is 0xAA. But it expects 0xFA and to read 0xAA at a later point in time?

;--- KBD_RESET-----------------------------------------------------------
; THIS PROCEDURE WILL SEND A SOFTWARE RESET TO THE KEYBOARD. :
; SCAN CODE 0AAH SHOULD BE RETURNED TO THE PROCESSOR. :
; SCAN CODE 065H IS DEFINED FOR MANUFACTURING TEST :
;------------------------------------------------------------------------

KBD_RESET PROC NEAR
MOV AL,0FFH ; SET KEYBOARD RESET COMMAND
CALL XMIT_8042 ; GO ISSUE THE COMMAND
JCXZ G13 ; EXIT IF ERROR

CMP AL,KB_ACK
JNZ G13

MOV AL,0FDH ; ENABLE KEYBOARD INTERRUPTS
OUT INTA01,AL ; WRITE 8259 INTERRUPT MASK REGISTER
MOV @INTR_FLAG,0 ; RESET INTERRUPT INDICATOR
STI ; ENABLE INTERRUPTS
MOV BL,10 ; TRY FOR 400 MILLISECONDS
SUB CX,CX ; SETUP INTERRUPT TIMEOUT COUNT
G11:
TEST @INTR_FLAG,02H ; DID A KEYBOARD INTERRUPT OCCUR 7
JNZ G12 ; YES - READ SCAN CODE RETURNED
LOOP GI1 ; NO - LOOP TILL TIMEOUT

DEC BL
JNZ G11 ; TRY AGAIN
G12:
IN AL,PORT_A ; READ KEYBOARD SCAN CODE
MOV BL,AL ; SAVE SCAN CODE JUST READ
G13:
RET ; RETURN TO CALLER

KBD_RESET ENDP

That is supposed to happen at G12. But it never reaches that point, since the 0xAA is returned 'too soon'?

That would mean that the keyboard needs some kind of delay somewhere, or doubling the 0xFA result?

Edit: Even giving it the 0x00 byte in between(the data that's supposed to be discarded), it still errors out?
Edit: Whoops, forgot that my code skips the 0x00 byte outputted, because a flush of the buffer was executed after the 0xFA byte also, discarding the 0x00 byte just written.
Edit: Just implemented a little 100us delay between the 0xFA and 0xAA BAT completion output. That should fix the CX being zero(immediate interrupt when the command is sent)?

Edit: For some reason, CX is still zeroed when the KBD_RESET returns?

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