Amstrad PC1512 (8MHz 80c86)
[*]Read: 194 KB/s
[*]Write: 204 KB/s
Wow, slower than actual CGA. Even the PCjr's display memory isn't that slow.
[*]The cyan/red/white test fails; the PC1512 only does cyan/red/white if bit 5 of the colour control register is 0, whereas on a real CGA it doesn't matter what this bit is.
But the second-to-last palette test does clear bit five. Here's the actual code (edited for brevity):
Code:
m6845_mode_ctl=$3d8; {mode control register}
{relevant bits}
c_fast_char_clock=1; {use 160 bytes per line instead of 80; REQUIRED for 80x25 mode, otherwise 40x25 mode}
c_graphics_enable=2; {otherwise, text mode}
c_blackandwhite_enable=4; {otherwise, color signal}
c_videosignal_enable=8; {otherwise, NO VIDEO SIGNAL}
c_640x200_enable=16; {otherwise, 320x200}
c_blinking_text=32; {otherwise, all background colors enabled}
m6845_color_sel=$3d9; {color select register}
{relevant bits}
c_blue=1;
c_green=2;
c_red=4;
c_bright=8;
c_alternate_intensity=16; {alt. intens. colors in graphics mode}
c_paletteCMW=32; {otherwise, red/green/yellow palette}
(snip)
Procedure m6845_SetMode(modeflags:byte);assembler;
asm
mov dx,m6845_mode_ctl
mov al,modeflags
out dx,al
end;
procedure m6845_SetColor(c:byte);assembler;
asm
mov dx,m6845_color_sel
mov al,c
out dx,al
end;
(snip)
m6845_SetColor(c_paletteCMW);
smsg:='This is cyan/magenta/white (low). '#13; BIOSWriteStr(smsg); PauseUser;
m6845_SetColor(c_paletteCMW+c_alternate_intensity);
smsg:='This is cyan/magenta/white (high).'#13; BIOSWriteStr(smsg); PauseUser;
m6845_SetColor(0);
smsg:='This is green/red/yellow (low). '#13; BIOSWriteStr(smsg); PauseUser;
m6845_SetColor(c_alternate_intensity);
smsg:='This is green/red/yellow (high). '#13; BIOSWriteStr(smsg); PauseUser;
m6845_SetColor(c_paletteCMW);
m6845_Setmode(c_graphics_enable+c_videosignal_enable+c_blackandwhite_enable);
smsg:='This is cyan/red/white (low). '#13; BIOSWriteStr(smsg); PauseUser;
m6845_SetColor(c_paletteCMW+c_alternate_intensity);
smsg:='This is cyan/red/white (high). '#13; BIOSWriteStr(smsg); PauseUser;
So it should have worked on the PC1512, right? What am I missing?
[*]In the retrace detect test, the bars are barely visible at the bottom of the screen.
That is also very surprising. I draw the bars by monitoring horizontal retrace obviously, and I start drawing only after waiting for the start of the display cycle. The fact that the bars are at the bottom is very confusing...
[*] The 90x30 test, interlace test, and retrace test all fail, owing to incomplete emulation of the MC6845.
Thanks for the report. I think I'll collect these reports and put them on the website when I get the final version out tonight along with the reference video. I knew some clones had odd emulation, but I didn't know some would be off in the ways that they are.