From 158cc65da3abf5f98e5d438b8c91a8dd3053fdd2 Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Mon, 13 Apr 2015 14:02:02 -0700 Subject: [PATCH] Cleaned up DMA port handling and minor tweaks --- .../pc/bios/compaq/deskpro386/1988-01-28.nasm | 78 ++++-- devices/pc/bios/compaq/deskpro386/notes.md | 226 ++++++++++++++++++ .../compaq/deskpro386/ega/2048kb/machine.xml | 2 +- modules/pcjs/lib/chipset.js | 103 ++++---- modules/pcjs/lib/computer.js | 4 + modules/pcjs/lib/debugger.js | 16 +- modules/pcjs/lib/ram.js | 3 +- modules/pcjs/lib/serialport.js | 23 +- modules/pcjs/lib/video.js | 16 +- modules/pcjs/lib/x86cpu.js | 30 +-- modules/pcjs/lib/x86func.js | 59 ++--- modules/pcjs/lib/x86ops.js | 28 ++- modules/pcjs/lib/x86seg.js | 28 +-- modules/shared/lib/embed.js | 2 +- modules/shared/lib/strlib.js | 6 +- modules/shared/lib/usrlib.js | 4 +- 16 files changed, 453 insertions(+), 175 deletions(-) diff --git a/devices/pc/bios/compaq/deskpro386/1988-01-28.nasm b/devices/pc/bios/compaq/deskpro386/1988-01-28.nasm index 4e62f2d91..5863a787a 100644 --- a/devices/pc/bios/compaq/deskpro386/1988-01-28.nasm +++ b/devices/pc/bios/compaq/deskpro386/1988-01-28.nasm @@ -1,6 +1,6 @@ ; ; ROM BIOS for Compaq DeskPro 386-16 -; Rev J.4, from parts 109592-001 and 109591-001, dated 1988-Jan-28 +; Rev J.4, from parts 109592-001 and 109591-001, dated '01/28/88' ; (C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86,87-All rights reserved. ; ; Listing produced by NDISASM, 2015-Apr-04 @@ -2287,7 +2287,7 @@ x9311: cmp ah,al ; 00009311 3AE0 ':.' db 0x0D,0x0A,'Non-System disk or disk error',0x0D,0x0A,'replace and strike any key when ready',0x0D,0x0A,'$',0x0D,0x0A,'602-Diskette Boot Record Error',0x0D,0x0A,'$' - mov bx,0x2 ; 00009380 BB0200 '...' +x9380: mov bx,0x2 ; 00009380 BB0200 '...' mov cx,0xfde8 ; 00009383 B9E8FD '...' x9386: mov al,0x80 ; 00009386 B080 '..' out 0x70,al ; 00009388 E670 '.p' @@ -2968,6 +2968,9 @@ x9bed: mov al,ah ; 00009BED 8AC4 '..' loop x9bed ; 00009BF6 E2F5 '..' jmp bp ; 00009BF8 FFE5 '..' + ; + ; Clear the screen (DS=F000, BX=BA77 for CGA or BA86 for Mono) + ; x9bfa: mov ax,0x720 ; 00009BFA B82007 '. .' mov es,[bx+0x6] ; 00009BFD 8E4706 '.G.' xor di,di ; 00009C00 33FF '3.' @@ -4619,7 +4622,7 @@ xa9e9: cs rep movsw ; 0000A9E9 F32EA5 '...' and byte [0x87],0xfb ; 0000AA17 80268700FB '.&...' jmp short xaa2f ; 0000AA1C EB11 '..' -xaa1e: mov bx,0xba77 ; 0000AA1E BB77BA '.w.' +xaa1e: mov bx,xba77 ; 0000AA1E BB77BA '.w.' mov es,[cs:bx+0x6] ; 0000AA21 2E8E4706 '..G.' call x9e1c ; 0000AA25 E8F4F3 '...' jz xaa2f ; 0000AA28 7405 't.' @@ -4744,7 +4747,7 @@ xaac9: and byte [0x10],0xcf ; 0000AAC9 80261000CF '.&...' call xc791 ; 0000AB1B E8731C '.s.' xab1e: ret ; 0000AB1E C3 '.' -xab1f: mov dx,0xba77 ; 0000AB1F BA77BA '.w.' +xab1f: mov dx,xba77 ; 0000AB1F BA77BA '.w.' mov bx,dx ; 0000AB22 8BDA '..' add bx,byte +0xf ; 0000AB24 83C30F '...' or al,al ; 0000AB27 0AC0 0x0A,'.' @@ -4807,7 +4810,7 @@ xab96: mov al,0x58 ; 0000AB96 B058 '.X' out 0x84,al ; 0000AB98 E684 '..' push cs ; 0000AB9A 0E '.' pop ds ; 0000AB9B 1F '.' - mov bx,0xba77 ; 0000AB9C BB77BA '.w.' + mov bx,xba77 ; 0000AB9C BB77BA '.w.' xab9f: mov al,0x59 ; 0000AB9F B059 '.Y' out 0x84,al ; 0000ABA1 E684 '..' mov es,[bx+0x6] ; 0000ABA3 8E4706 '.G.' @@ -6103,23 +6106,30 @@ xb68a: stc ; 0000B68A F9 '.' db ' 605-Diskette Drive Type Error-(Run Setup)',0x0D,0x0A db ' Insert DIAGNOSTIC diskette in Drive A:',0x0D,0x0A - db 0xD8 ; 0000BA77 D8 - add dx,sp ; 0000BA78 03D4 '..' - sub [si+0xf0],si ; 0000BA7A 29B4F000 ')...' - mov ax,0x6000 ; 0000BA7E B80060 '..`' - mov dh,[bx+0x1e] ; 0000BA81 8AB71E00 '....' - inc ax ; 0000BA85 40 '@' - mov ax,0xb403 ; 0000BA86 B803B4 '...' - sub sp,dx ; 0000BA89 29D4 ').' - lock add [bx+si+0x6000],dh ; 0000BA8B F000B00060 '....`' - imul si,[bx+0x21],word 0xbd10; 0000BA90 69B7210010BD 'i.!...' - wait ; 0000BA96 9B '.' - mov dx,0xe5e9 ; 0000BA97 BAE9E5 '...' - fdiv dword [bx+si+0xe68e] ; 0000BA9A D8B08EE6 '....' - jo xbad3 ; 0000BA9E 7033 'p3' - shl dh,0x71 ; 0000BAA0 C0E671 '..q' - mov al,0x40 ; 0000BAA3 B040 '.@' - out 0x86,al ; 0000BAA5 E686 '..' + ; + ; Video card data + ; +xba77: dw 0x03D8 ; 0000BA77 D803 ; +0x00: I/O address of Mode Select Register (CGA) + db 0xD4,0x29,0xB4,0xF0 ; 0000BA79 D429B4F0 + dw 0xB800 ; 0000BA7D 00B8 ; +0x06: real-mode segment of frame buffer + db 0x00,0x60,0x8A,0xB7 ; 0000BA7F 00608AB7 + db 0x1E,0x00,0x40 ; 0000BA83 1E0040 + +xba86: dw 0x03B8 ; 0000BA86 B803 ; +0x00: I/O address of Mode Select Register (Mono) + db 0xB4,0x29,0xD4,0xF0 ; 0000BA88 B429D4F0 + dw 0xB000 ; 0000BA8C 00B0 ; +0x06: real-mode segment of frame buffer + db 0x00,0x60,0x69,0xB7 ; 0000BA8E 006069B7 + db 0x21,0x00,0x10 ; 0000BA92 210010 + + mov bp,0xba9b ; 0000BA95 BD9BBA + jmp x9380 ; 0000BA98 E9E5D8 + + mov al,0x8e ; 0000BA9B B08E + out 0x70,al ; 0000BA9D E670 + xor ax,ax ; 0000BA9F 33C0 + out 0x71,al ; 0000BAA1 E671 + mov al,0x40 ; 0000BAA3 B040 + out 0x86,al ; 0000BAA5 E686 xbaa7: cli ; 0000BAA7 FA '.' mov al,0xf ; 0000BAA8 B00F '..' @@ -9921,11 +9931,15 @@ xd9db: mov ax,0x40 ; 0000D9DB B84000 '.@.' or bx,bx ; 0000D9ED 0BDB '..' jnz xd9f4 ; 0000D9EF 7503 'u.' jmp xda8c ; 0000D9F1 E99800 '...' - +; +; At checkpoint 0x6B, the conventional+extended memory test has been completed, and you should +; see a total at the top of the screen (eg, "01792 KB OK"). +; xd9f4: mov al,0x6b ; 0000D9F4 B06B '.k' out 0x84,al ; 0000D9F6 E684 '..' mov ax,0x1c00 ; 0000D9F8 B8001C '...' mov ds,ax ; 0000D9FB 8ED8 '..' + test word [0x64],0x1 ; 0000D9FD F70664000100 '..d...' jz xda1b ; 0000DA03 7416 't.' call xc786 ; 0000DA05 E87EED '.~.' @@ -9935,6 +9949,7 @@ xd9f4: mov al,0x6b ; 0000D9F4 B06B '.k' mov cl,[0x69] ; 0000DA10 8A0E6900 '..i.' mov dx,[0x67] ; 0000DA14 8B166700 '..g.' call x822d ; 0000DA18 E812A8 '...' + xda1b: test word [0x64],0x4 ; 0000DA1B F70664000400 '..d...' jz xda39 ; 0000DA21 7416 't.' call xc786 ; 0000DA23 E860ED '.`.' @@ -9944,6 +9959,7 @@ xda1b: test word [0x64],0x4 ; 0000DA1B F70664000400 '..d...' mov cl,[0x6d] ; 0000DA2E 8A0E6D00 '..m.' mov dx,[0x6b] ; 0000DA32 8B166B00 '..k.' call x8242 ; 0000DA36 E809A8 '...' + xda39: test word [0x64],0x2 ; 0000DA39 F70664000200 '..d...' jz xda57 ; 0000DA3F 7416 't.' call xc786 ; 0000DA41 E842ED '.B.' @@ -9952,7 +9968,13 @@ xda39: test word [0x64],0x2 ; 0000DA39 F70664000200 '..d...' mov si,cx ; 0000DA4A 8BF1 '..' mov cl,[0x71] ; 0000DA4C 8A0E7100 '..q.' mov dx,[0x6f] ; 0000DA50 8B166F00 '..o.' +; +; During the next call, the following additional text may be displayed on the screen: +; +; F00000 02 201-Memory Error +; call x822d ; 0000DA54 E8D6A7 '...' + xda57: test word [0x64],0x8 ; 0000DA57 F70664000800 '..d...' jz xda75 ; 0000DA5D 7416 't.' call xc786 ; 0000DA5F E824ED '.$.' @@ -9961,7 +9983,13 @@ xda57: test word [0x64],0x8 ; 0000DA57 F70664000800 '..d...' mov si,cx ; 0000DA68 8BF1 '..' mov cl,[0x75] ; 0000DA6A 8A0E7500 '..u.' mov dx,[0x73] ; 0000DA6E 8B167300 '..s.' +; +; During the next call, the following additional text may be displayed on the screen: +; +; F00000 FF 203-Memory Address Error +; call x8242 ; 0000DA72 E8CDA7 '...' + xda75: test word [0x64],0x10 ; 0000DA75 F70664001000 '..d...' jz xda8c ; 0000DA7B 740F 't.' call xc786 ; 0000DA7D E806ED '...' @@ -9969,6 +9997,7 @@ xda75: test word [0x64],0x10 ; 0000DA75 F70664001000 '..d...' mov bx,0xb68c ; 0000DA83 BB8CB6 '...' mov cx,0x1a ; 0000DA86 B91A00 '...' call xc745 ; 0000DA89 E8B9EC '...' + xda8c: test word [0x64],0xffff ; 0000DA8C F7066400FFFF '..d...' jz xdaac ; 0000DA92 7418 't.' call xc786 ; 0000DA94 E8EFEC '...' @@ -14293,6 +14322,7 @@ xffb3: pop ds ; 0000FFB3 1F '.' jmp 0xf000:reset ; 0000FFF0 EA05F900F0 - db ' 01/28/88' + db 0x20 + db '01/28/88' db 0xFC ; 0000FFFE FC db 0x98 ; 0000FFFF 98 diff --git a/devices/pc/bios/compaq/deskpro386/notes.md b/devices/pc/bios/compaq/deskpro386/notes.md index 492d1ca29..bd0373ccb 100644 --- a/devices/pc/bios/compaq/deskpro386/notes.md +++ b/devices/pc/bios/compaq/deskpro386/notes.md @@ -182,3 +182,229 @@ But when we stopped here next, it was no longer good: %00FF0740 0000 0000 0000 0000 - 0000 0000 0000 0000 ................ Turns out this is because the A20 line has been disabled. + +------------------------------------------------------------------------------------------------- + +Let's look at a complete run: + + EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000304 + ESP=00000000 EBP=00000000 ESI=00000000 EDI=00000000 + SS=0000 DS=0000 ES=0000 FS=0000 GS=0000 PS=00000002 V0 D0 I0 T0 S0 Z0 A0 P0 C0 + F000:FFF0 EA05F900F0 JMP F000:F905 + +I want to catch writes to the top-left corner of the screen, so I set a write breakpoint: + + bw b800:0 + +which reports: + + write breakpoint added to memory block 000B8000 + breakpoint enabled: B800:0000 (write) + +and then we're off: + + running + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x00) @F000:F907 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x01) @F000:F926 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x02) @F000:F93C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x03) @F000:F942 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x04) @F000:F946 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x05) @F000:F95F + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x06) @F000:F978 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x08) @F000:F9AA + notice: PIC0(0x20): unsupported OCW2 automatic EOI command: 0x00 + stopped (149 ops, 622 cycles, 92 ms, 6761 hz) + EAX=0000F000 EBX=00000000 ECX=00000008 EDX=00000020 + ESP=00000000 EBP=00000000 ESI=0000F8E7 EDI=00000000 + SS=0000 DS=F000 ES=0000 FS=0000 GS=0304 PS=00000046 V0 D0 I0 T0 S0 Z1 A0 P1 C0 + F000:F9ED E6A0 OUT A0,AL + running + notice: PIC1(0xA0): unsupported OCW2 automatic EOI command: 0x00 + stopped (150 ops, 5 cycles, 19 ms, 263 hz) + EAX=0000F000 EBX=00000000 ECX=00000008 EDX=00000020 + ESP=00000000 EBP=00000000 ESI=0000F8E7 EDI=00000000 + SS=0000 DS=F000 ES=0000 FS=0000 GS=0304 PS=00000046 V0 D0 I0 T0 S0 Z1 A0 P1 C0 + F000:F9EF B009 MOV AL,09 + running + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x09) @F000:F9F1 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x0F) @F000:BAAA + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x10) @F000:BAFB + bus.outPort(0x004B,unknown,0x12) @F000:BAFF + bus.outPort(0x004B,unknown,0x42) @F000:BB03 + bus.outPort(0x004B,unknown,0x92) @F000:BB07 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x11) @F000:BB29 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x12) @F000:BB70 + breakpoint hit: B800:0000 (write) + stopped (413 ops, 959 cycles, 80 ms, 11988 hz) + EAX=00000720 EBX=0000BA77 ECX=00001FFF EDX=000003D8 + ESP=00000000 EBP=0000BB78 ESI=0000F0C6 EDI=00000002 + SS=0000 DS=F000 ES=B800 FS=0000 GS=0304 PS=00000046 V0 D0 I0 T0 S0 Z1 A0 P1 C0 + F000:9C05 F3 REPZ + F000:9C06 AB STOSW + +This is where screen memory is first initialized ("blanked"). + + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x13) @F000:BB90 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x14) @F000:BBB8 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x15) @F000:BBD8 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x17) @F000:BC08 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x18) @F000:BC14 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x40) @F000:B552 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x2F) @0018:87B4 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x41) @F000:B572 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x42) @F000:B599 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x43) @F000:B5C4 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x44) @F000:B5D2 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x45) @F000:B600 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x43) @F000:B5C4 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x44) @F000:B5D2 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x45) @F000:B600 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x46) @F000:B61C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x19) @F000:BC2C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x30) @F000:A8B0 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x31) @F000:A905 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x32) @F000:A91D + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x33) @F000:A93B + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x34) @F000:A953 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x36) @F000:A991 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x38) @F000:A99C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x39) @F000:A9BC + bus.inPort(0x03BC,unknown) @F000:A9CA + bus.outPort(0x03BC,unknown,0x00) @F000:A9CD + bus.inPort(0x03BC,unknown) @F000:A9D0 + bus.inPort(0x0378,unknown) @F000:A9CA + bus.outPort(0x0378,unknown,0x00) @F000:A9CD + bus.inPort(0x0378,unknown) @F000:A9D0 + bus.inPort(0x0278,unknown) @F000:A9CA + bus.outPort(0x0278,unknown,0x00) @F000:A9CD + bus.inPort(0x0278,unknown) @F000:A9D0 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x3A) @F000:A9DE + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x3B) @F000:A9FB + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x52) @F000:AA41 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x53) @F000:AA54 + bus.outPort(0x03B9,unknown,0x30) @F000:9BE7 + write breakpoint added to memory block 000B8000 + write breakpoint added to memory block 000B8000 + breakpoint hit: B800:0000 (write) + stopped (1340834 ops, 3291994 cycles, 821 ms, 4009737 hz) + EAX=00000720 EBX=00000720 ECX=00003FFF EDX=0000B800 + ESP=000000D0 EBP=FFFF2230 ESI=00000CBA EDI=00000002 + SS=0030 DS=0000 ES=B800 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 + C000:0E93 F3 REPZ + C000:0E94 AB STOSW + +Now the video card's own BIOS is doing the same thing, followed by more of the same: + + write breakpoint added to memory block 000B8000 + write breakpoint added to memory block 000B8000 + breakpoint hit: B800:0000 (write) + stopped (1384492 ops, 79242 cycles, 52 ms, 1523885 hz) + EAX=00000720 EBX=00000720 ECX=00003FFF EDX=0000B800 + ESP=000000C8 EBP=FFFF2230 ESI=00000C3A EDI=00000002 + SS=0030 DS=0000 ES=B800 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 + C000:0E93 F3 REPZ + C000:0E94 AB STOSW + running + breakpoint hit: B800:0000 (write) + stopped (1476959 ops, 347538 cycles, 67 ms, 5187134 hz) + EAX=00000FDB EBX=00000FDB ECX=00000050 EDX=000003DA + ESP=000000CC EBP=FFFF00E2 ESI=00000000 EDI=00000002 + SS=0030 DS=0000 ES=B800 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 + C000:18D7 FB STI + running + write breakpoint added to memory block 000B8000 + write breakpoint added to memory block 000B8000 + breakpoint hit: B800:0000 (write) + stopped (2824784 ops, 4644466 cycles, 528 ms, 8796337 hz) + EAX=00000720 EBX=00000720 ECX=00003FFF EDX=0000B800 + ESP=000000C8 EBP=FFFF2230 ESI=00000CBA EDI=00000002 + SS=0030 DS=0000 ES=B800 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0 + C000:0E93 F3 REPZ + C000:0E94 AB STOSW + running + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x8C) @F000:D05C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x1A) @F000:BC79 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x50) @F000:AA76 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x51) @F000:AA7F + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x52) @F000:AA9C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x1B) @F000:BC80 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x1C) @F000:BC87 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x90) @F000:CC53 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x91) @F000:CC85 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x1D) @F000:BC8E + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x93) @F000:CC8A + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x94) @F000:CD06 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x95) @F000:CD3C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x96) @F000:CD6A + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x2D) @F000:BC95 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x0D) @F000:E107 + bus.outPort(0x004B,unknown,0x12) @F000:E10B + bus.outPort(0x0048,unknown,0x22) @F000:E112 + bus.outPort(0x004B,unknown,0x00) @F000:E139 + bus.inPort(0x0048,unknown) @F000:E13B + bus.inPort(0x0048,unknown) @F000:E13E + bus.outPort(0x004B,unknown,0x12) @F000:E11A + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x0E) @F000:E11E + bus.outPort(0x004B,unknown,0x92) @F000:E122 + bus.outPort(0x004A,unknown,0x22) @F000:E129 + bus.outPort(0x004B,unknown,0x80) @F000:E139 + bus.inPort(0x004A,unknown) @F000:E13B + bus.inPort(0x004A,unknown) @F000:E13E + bus.outPort(0x004B,unknown,0x92) @F000:E131 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x1E) @F000:BC9C + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x80) @F000:CFDF + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x81) @F000:CFF7 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x82) @F000:D011 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x84) @F000:D02D + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x1F) @F000:BCA3 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x75) @F000:F74D + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x76) @F000:F761 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x77) @0030:F772 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x78) @0030:F790 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x00) @F000:F907 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x07) @F000:F986 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x08) @F000:F9AA + notice: PIC0(0x20): unsupported OCW2 automatic EOI command: 0x00 + stopped (19729382 ops, 81457037 cycles, 7165 ms, 11368742 hz) + EAX=0000F000 EBX=00000006 ECX=00000008 EDX=00000020 + ESP=00000000 EBP=00000000 ESI=0000F8E7 EDI=00000000 + SS=0000 DS=F000 ES=0000 FS=0000 GS=0000 PS=00000046 V0 D0 I0 T0 S0 Z1 A0 P1 C0 + F000:F9ED E6A0 OUT A0,AL + running + notice: PIC1(0xA0): unsupported OCW2 automatic EOI command: 0x00 + stopped (19729383 ops, 5 cycles, 20 ms, 250 hz) + EAX=0000F000 EBX=00000006 ECX=00000008 EDX=00000020 + ESP=00000000 EBP=00000000 ESI=0000F8E7 EDI=00000000 + SS=0000 DS=F000 ES=0000 FS=0000 GS=0000 PS=00000046 V0 D0 I0 T0 S0 Z1 A0 P1 C0 + F000:F9EF B009 MOV AL,09 + +We're back in the Compaq BIOS, the video card appears to be fully initialized now, so perhaps the next +write to video memory will be the first memory test results. + +And in fact, it is. But the "bw b800:0" command doesn't work, because the memory test results are being +performed in protected-mode, and there is no segment 0xB800 mapped to video memory at that point. + +So the write breakpoint must be specified as "bw %b8000" instead. Now we catch it: + + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x09) @F000:F9F1 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x79) @F000:F7CD + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x7B) @F000:F814 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x20) @F000:BCAA + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x60) @F000:D6E6 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x61) @F000:D704 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x18) @0030:870A + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x18) @0030:8715 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x62) @0030:D719 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x63) @0030:D761 + chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x70) @0030:DB38 + breakpoint hit: %000B8000 (write) + stopped (19736120 ops, 23810 cycles, 165 ms, 144303 hz) + EAX=00000000 EBX=0000000A ECX=0000000A EDX=00000730 + ESP=000000D0 EBP=00000080 ESI=00000095 EDI=00008002 + SS=0028[00000300,FFFF] DS=0018[0001C000,FFFF] ES=0040[000B0000,FFFF] + CS=0030[000F0000,FFFF] FS=0000[00000000,FFFF] GS=0304[00003040,FFFF] + LD=0000[00000000,0000] GD=[0001C000,005F] ID=[000FF821,0007] TR=0000 A20=ON + CR0=0000FFF1 CR2=00000000 CR3=00000000 PS=00000082 V0 D0 I0 T0 S1 Z0 A0 P0 C0 + 0030:80DA F3 REPZ + 0030:80DB A5 MOVSW + diff --git a/devices/pc/machine/compaq/deskpro386/ega/2048kb/machine.xml b/devices/pc/machine/compaq/deskpro386/ega/2048kb/machine.xml index 2a9060bb7..99be534f1 100644 --- a/devices/pc/machine/compaq/deskpro386/ega/2048kb/machine.xml +++ b/devices/pc/machine/compaq/deskpro386/ega/2048kb/machine.xml @@ -10,7 +10,7 @@