Added disk image of VGA tests/samples

This commit is contained in:
Jeff Parsons 2015-07-09 12:33:01 -07:00
commit a10ac83df6
7 changed files with 28 additions and 322 deletions

View file

@ -63,21 +63,12 @@ never completed, and this is another related issue that will have to be resolved
---
Another problem: during IBM VGA ROM initialization, a "missing readByte handler" warning occurs.
Card.setMemoryAccess(0x1510): missing readByte handler
stopped (2351185 ops, 7740201 cycles, 1617 ms, 4786766 hz)
EAX=00000204 EBX=0000194A ECX=00000001 EDX=000003C4
ESP=000000C4 EBP=FFFF0000 ESI=00000000 EDI=000003D4
SS=0030 DS=0000 ES=C000 FS=0000 GS=0304 PS=00000002 V0 D0 I0 T0 S0 Z0 A0 P0 C0
C000:1205 FEC0 INC AL
Before debugging this though, I decided to first make a table of all the register values for most of the modes that
the IBM VGA supports:
While debugging and fixing assorted IBM VGA issues, I made a table of all the register values for the video
modes commonly used on the IBM VGA. Here's that table:
INT 0x10 Mode Requested: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x0D 0x0E 0x10 0x12 0x13
BIOSMODE: 0x01 0x01 0x03 0x03 0x04 0x04 0x06 0x12 0x12 0x12 0x12 0x13
BIOSMODE: 0x01 0x01 0x03 0x03 0x04 0x04 0x06 0x0D 0x0E 0x10 0x12 0x13
CRTC[0x00]: HTOTAL 0x2D 0x2D 0x5F 0x5F 0x2D 0x2D 0x5F 0x2D 0x5F 0x5F 0x5F 0x5F
CRTC[0x01]: HDISP_END 0x27 0x27 0x4F 0x4F 0x27 0x27 0x4F 0x27 0x4F 0x4F 0x4F 0x4F
CRTC[0x02]: HBLANK_START 0x28 0x28 0x50 0x50 0x28 0x28 0x50 0x28 0x50 0x50 0x50 0x50
@ -138,13 +129,8 @@ the IBM VGA supports:
ATC[0x12]: PLANES 0x0F 0x0F 0x0F 0x0F 0x03 0x03 0x01 0x0F 0x0F 0x0F 0x0F 0x0F
ATC[0x13]: HPAN 0x08 0x08 0x08 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
In the process of building this table, I also discovered that INT 0x10 mode 0x0D display is garbled, and that all
graphics modes >= 0x0D are misdetected as BIOSMODE 0x12.
All these issues are under investigation.
In addition, I've created a [VGA Tests](/tests/pc/vga/) directory to hold VGA test and sample code that I want PCjs
to run successfully. See that directory for more details.
In addition, I've created a [VGA Tests](/tests/pc/vga/) directory to hold VGA test and sample code that PCjs can
now successfully run (for the most part). See that directory for more details.
*[@jeffpar](http://twitter.com/jeffpar)*
*June 1, 2015 (Updated July 3, 2015)*
*June 1, 2015 (Updated July 9, 2015)*

View file

@ -1,281 +0,0 @@
Compaq DeskPro 386 Disk Controller
---
In short, it isn't working.
So let's boot a [DeskPro 386](/devices/pc/machine/compaq/deskpro386/ega/2048kb/?gort=debug) machine,
enable HDC and Port messages in the Debugger (`m hdc on;m port on`), and see what's up.
notice: Type 2 "20Mb Hard Disk" is fixed disk 0
notice: Mounted diskette "PC-DOS 3.00 (Disk 1)" in drive A
notice: Mounted diskette "PC-DOS 3.00 (Disk 2)" in drive B
ramLow: 640Kb allocated
ramLow: ROM BIOS memory test has NOT been disabled
ramCPQ: 384Kb allocated
ramCPQ: Compaq memory at 0xFA0000
ramExt: 1024Kb allocated
ramExt: Extended memory at 0x100000
PCjs v1.x.x
Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
License: GPL version 3 or later <http://gnu.org/licenses/gpl.html>
Type ? for list of debugger commands
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
messages on: port
messages on: hdc
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
notice: PIC1(0xA0): unsupported OCW2 automatic EOI command: 0x00
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
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
CompaqController.writeByte(0x0000,0xFF) @0018:87B4
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(0x46E8,unknown,0x16) @C000:009C
bus.outPort(0x46E9,unknown,0x00) @C000:009C
bus.outPort(0x0102,unknown,0x01) @C000:00A3
bus.outPort(0x0103,unknown,0x00) @C000:00A3
bus.outPort(0x46E8,unknown,0x0E) @C000:00AA
bus.outPort(0x46E9,unknown,0x00) @C000:00AA
bus.outPort(0x4AE8,unknown,0x00) @C000:00B0
bus.outPort(0x4AE9,unknown,0x00) @C000:00B0
Card.setMemoryAccess(0x1510): missing readByte handler
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
notice: PIC1(0xA0): unsupported OCW2 automatic EOI command: 0x00
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
CompaqController.readByte(0x0000) returned 0x0F @0030:8710
CompaqController.readByte(0x0001) returned 0x0A @0030:8710
CompaqController.writeByte(0x0000,0xFF) @0030:8715
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
CompaqController.writeByte(0x0000,0xFF) @0030:84B0
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x70) @0030:DB38
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x71) @0030:DB6D
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x73) @0030:DBF4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6D) @0030:DAC0
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6E) @0030:DAC8
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6F) @0030:DB19
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x70) @0030:DB38
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x71) @0030:DB6D
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x73) @0030:DBF4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x65) @0030:D7E6
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6D) @0030:DAC0
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6E) @0030:DAC8
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6F) @0030:DB19
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x70) @0030:DB38
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x71) @0030:DB6D
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x73) @0030:DBF4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x70) @0030:DB38
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x71) @0030:DB6D
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x73) @0030:DBF4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x72) @0030:DC01
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x66) @0030:D942
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x67) @0030:D970
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x68) @0030:D99B
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
notice: PIC1(0xA0): unsupported OCW2 automatic EOI command: 0x00
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x09) @F000:F9F1
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x69) @F000:D9CC
CompaqController.readByte(0x0000) returned 0x0F @0018:880A
CompaqController.writeByte(0x0000,0xFF) @0018:8810
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x6C) @F000:DAB1
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xD0) @F000:C82A
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xD1) @F000:C83B
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xD2) @0030:C847
CompaqController.writeByte(0x0000,0xFF) @0030:84B0
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x7F) @0030:853E
CompaqController.readByte(0x0000) returned 0x0F @0030:85D2
CompaqController.writeByte(0x0000,0xFF) @0030:85D7
CompaqController.writeByte(0x0000,0xFC) @0030:863C
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xD3) @0030:C881
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xD4) @F000:C8A5
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x7D) @F000:F482
CompaqController.readByte(0x0000) returned 0x0F @0028:F4BC
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x7E) @F000:F686
CompaqController.writeByte(0x0000,0xFE) @0018:87B4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x2F) @0018:87B4
CompaqController.writeByte(0x0000,0xFF) @0018:87B4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x2F) @0018:87B4
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x21) @F000:BCBB
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x23) @F000:BCC2
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x8B) @F000:CEDD
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x8C) @F000:D05C
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x86) @F000:CF04
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x87) @F000:CF2A
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x88) @F000:CF41
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x89) @F000:CF4E
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x8D) @F000:CF8E
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x22) @F000:BCC9
CompaqController.readByte(0x0000) returned 0x0F @0018:880A
CompaqController.writeByte(0x0000,0xFF) @0018:8810
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x24) @F000:BCEB
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x25) @F000:BD19
hdcAT.outPort(0x01F6,DRVHD,0xA0) @F000:91B5
hdcAT.outPort(0x03F6,FDR,0x00) @F000:C5B5
hdcAT.outPort(0x03F6,FDR,0x04) @F000:C5B8
hdcAT.outPort(0x03F6,FDR,0x00) @F000:C5BE
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xA0) @F000:83FE
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xA1) @F000:8408
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xA2) @F000:8415
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xA3) @F000:8430
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xA6) @F000:8490
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xA8) @F000:91BE
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xAF) @F000:920A
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x26) @F000:BD20
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xB0) @F000:C397
hdcAT.outPort(0x01F2,SECCNT,0x55) @F000:C3A6
hdcAT.inPort(0x01F2,SECCNT): 0x55 @F000:C3A9
hdcAT.outPort(0x03F6,FDR,0x00) @F000:C5B5
hdcAT.outPort(0x03F6,FDR,0x04) @F000:C5B8
hdcAT.outPort(0x03F6,FDR,0x00) @F000:C5BE
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:C574
hdcAT.inPort(0x01F1,ERROR): 0x01 @F000:C588
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xB3) @F000:C3E3
hdcAT.outPort(0x03F6,FDR,0x00) @F000:B4B0
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.outPort(0x01F6,DRVHD,0xA0) @F000:B2C8
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B52F
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:C41F
hdcAT.outPort(0x03F6,FDR,0x00) @F000:B4B0
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.outPort(0x01F6,DRVHD,0xA0) @F000:B2C8
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B52F
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:C41F
hdcAT.outPort(0x03F6,FDR,0x00) @F000:B4B0
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.outPort(0x01F6,DRVHD,0xA0) @F000:B2C8
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B52F
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:C41F
hdcAT.outPort(0x03F6,FDR,0x00) @F000:B4B0
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.outPort(0x01F6,DRVHD,0xA0) @F000:B2C8
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B52F
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:C41F
hdcAT.outPort(0x03F6,FDR,0x00) @F000:B4B0
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.outPort(0x01F6,DRVHD,0xA0) @F000:B2C8
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B367
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:B52F
hdcAT.inPort(0x01F7,STATUS): 0x40 @F000:C41F
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xB6) @F000:C54B
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0xB8) @F000:C3C3
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x27) @F000:BD27
bus.outPort(0x03BE,unknown,0xEC) @F000:BD2E
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x28) @F000:BD31
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x29) @F000:BD38
chipset.outPort(0x0084,DMA.SPARE0.PAGE,0x8C) @F000:D05C
stopped (67172989 ops, 305957247 cycles, 69937 ms, 4374755 hz)
EAX=00000000 EBX=0000B95B ECX=00000000 EDX=00000000
ESP=000000DC EBP=000000DE ESI=00000020 EDI=0000E411
SS=0030 DS=0040 ES=F000 FS=0000 GS=0304 PS=00000246 V0 D0 I1 T0 S0 Z1 A0 P1 C0
F000:DCAC 74F8 JZ DCA6
*[@jeffpar](http://twitter.com/jeffpar)*
*June 20, 2015*

View file

@ -6571,6 +6571,7 @@ xbc38: in al,0x64 ; 0000BC38 E464 '.d'
mov cx,0x1d ; 0000BC43 B91D00 '...'
mov bp,0xbc4c ; 0000BC46 BD4CBC '.L.'
jmp xc7f7 ; 0000BC49 E9AB0B '...'
xbc4c: jmp short xbc4c ; 0000BC4C Hang the machine
xbc4e: mov cx,0x2 ; 0000BC4E B90200 '...'
@ -7756,6 +7757,9 @@ xc62f: push bx ; 0000C62F 53 'S'
pop bx ; 0000C636 5B '['
ret ; 0000C637 C3 '.'
;
; Wrapper around delay function
;
xc638: push bp ; 0000C638 55 'U'
push ax ; 0000C639 50 'P'
push cx ; 0000C63A 51 'Q'
@ -7765,8 +7769,10 @@ xc638: push bp ; 0000C638 55 'U'
pop bp ; 0000C640 5D ']'
ret ; 0000C641 C3 '.'
;
; Delay function (delay based on BX)
;
xc642: mov cx,bx ; 0000C642 8BCB '..'
xc644: pushf ; 0000C644 9C '.'
cli ; 0000C645 FA '.'
mov al,0x0 ; 0000C646 B000 '..'
@ -7777,14 +7783,10 @@ xc644: pushf ; 0000C644 9C '.'
push cs ; 0000C650 0E '.'
call xc657 ; 0000C651 E80300 '...'
jmp short xc658 ; 0000C654 EB02 '..'
nop ; 0000C656 90 '.'
xc657: iret ; 0000C657 CF '.'
xc658: xchg al,ah ; 0000C658 86C4 '..'
mov bx,ax ; 0000C65A 8BD8 '..'
xc65c: pushf ; 0000C65C 9C '.'
cli ; 0000C65D FA '.'
mov al,0x0 ; 0000C65E B000 '..'
@ -7795,11 +7797,8 @@ xc65c: pushf ; 0000C65C 9C '.'
push cs ; 0000C668 0E '.'
call xc66f ; 0000C669 E80300 '...'
jmp short xc670 ; 0000C66C EB02 '..'
nop ; 0000C66E 90 '.'
xc66f: iret ; 0000C66F CF '.'
xc670: xchg al,ah ; 0000C670 86C4 '..'
push bx ; 0000C672 53 'S'
sub bx,ax ; 0000C673 2BD8 '+.'

View file

@ -12,7 +12,7 @@
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>
<debugger id="debugger" messages="fault|port" commands="m int on"/>
<panel ref="/devices/pc/panel/btpanel.xml"/>
<fdc ref="/disks/pc/library.xml" automount='{A: {name: "PC-DOS 3.00 (Disk 1)", path: "/disks/pc/dos/ibm/3.00/PCDOS300-DISK1.json"}, B: {name: "VGA Tests (Black Book)", path: "/tests/pc/vga/"}}'/>
<fdc ref="/disks/pc/library.xml" automount='{A: {name: "PC-DOS 3.00 (Disk 1)", path: "/disks/pc/dos/ibm/3.00/PCDOS300-DISK1.json"}, B: {name: "VGA Tests (Black Book)", path: "/tests/pc/vga/VGABIN.json"}}'/>
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2}]'/>
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
<serial id="com1" adapter="1"/>

View file

@ -50,7 +50,7 @@
<manifest ref="/apps/pc/1985/rogue/manifest.xml" disk="disk01"/>
<manifest ref="/apps/pc/1987/thinktank/manifest.xml" disk="disk01"/>
<manifest ref="/apps/pc/1992/moria/manifest.xml" disk="disk01"/>
<disk path="/tests/pc/vga/">VGA Tests (Black Book)</disk>
<disk path="/tests/pc/vga/VGABIN.json">VGA Tests (Black Book)</disk>
</control>
<control type="button" binding="loadDrive" padright="8px">Load</control>
<control type="description" binding="descDisk" padright="8px"/>

View file

@ -78,21 +78,22 @@ List of VGA Samples from [Michael Abrash's Graphics Programming Black Book](http
---
Also, I've updated the PCjs [Library](/disks/pc/library.xml) disk collection to include a disk image of this directory:
Also, I've updated the PCjs [Library](/disks/pc/library.xml) disk collection to include a disk containing executables
built from the sources in this directory:
<disk path="/tests/pc/vga/VGABIN.json">VGA Tests (Black Book)</disk>
The VGABIN disk image was built with this command:
diskdump --dir=bin --format=json --output=VGABIN.json
Alternatively, if *path* refers to a directory (ending with a slash) instead of a disk image, the PCjs client will ask
the PCjs web server to enumerate the contents of that directory and send back a JSON-encoded disk image containing all
the files in that directory (including any subdirectories) every time that disk is requested. Since this puts an added
burden on the server, it's best to do this only when running PCjs from a local PCjs web server.
<disk path="/tests/pc/vga/">VGA Tests (Black Book)</disk>
When *path* refers to a directory (ending with a slash) instead of a disk image, the PCjs client will ask the PCjs web
server to enumerate the contents of that directory and send back a JSON-encoded disk image containing all the files in
that directory (including any subdirectories) every time that disk is requested. Since this puts an added burden on the
server, it's best to do this only when running PCjs from a local PCjs web server.
Since the contents of this particular directory will probably be in flux for a while, I've opted for this approach.
Once things settle down, I'll generate a JSON-encoded disk image containing a snapshot of this directory, using the
PCjs [DiskDump](/modules/diskdump/) module:
diskdump --dir=. --format=img --output=TESTVGA.img --overwrite
One advantage of using [DiskDump](/modules/diskdump/) is that it automatically converts linefeeds in known text files
(including ASM files) into DOS-compatible CR/LF sequences.
@ -104,5 +105,5 @@ I've updated a [Compaq DeskPro 386 Machine](/devices/pc/machine/compaq/deskpro38
automount='{A: {name: "PC-DOS 3.00 (Disk 1)",
path: "/disks/pc/dos/ibm/3.00/PCDOS300-DISK1.json"},
B: {name: "VGA Tests (Black Book)",
path: "/tests/pc/vga/"}
path: "/tests/pc/vga/VGABIN.json"}
}' />

1
tests/pc/vga/VGABIN.json Normal file

File diff suppressed because one or more lines are too long