Anyone know how to force the generic Hercules (compatible) mono controller
into greater than 25 lines in text mode (as is possible in ega/vga). I've
searched the web a bit but didn't find anything so I'm doubting it's even
possible but figured I'd ask here anyway.
I have several mono vid cards collecting dust on the shelf and one of them
is an old ATI Graphics Solution to which I also have the manual to. This
particular mono card can do 132x50 text mode but that is an ATI extra
feature to the Hercules mono standard and I'd like to find a way to do it
across all Herc comp cards (if poss). Otherwise I suppose I could use the
herc graphic mode and haxor up a teeny little font (ugh).
Mel McBain
It is not possible. The best you an do is to use graphics mode. With 8x8
font you can get 90x43 display. Of course you need to program everything
yourself, there is no BIOS support (for code). The 8x8 font is already in
the ROM do no need to create it. The upper part of the character set (the
non-ASCII characters) have to be loaded with GRAFTABL though.
The lower 128 characters are stored at F000h:FA6Eh. The higher 128
characters are stored at address pointed by Int 1Fh, or at address 0:7Ch
(note this is not a callable routine but a pointer to the table. Calling
it locks the system). Both tables are 128*8=1024 bytes. Eve if you
personally do not need the higher codes, it is good to support them,
especially if you distribute the code. However check that the vector is
not nil before using it.
HGC plus can do various different display modes, RAM font etc. But I
doubt that is the display you are talking about
The following code gets AL as input and loads DS:SI to point to the
bitmap for the character:
push bx
xor ah,ah
shl ax,3 ; shl ax,1 three times for 8086
cmp al,128
jae upper
lower:
mov si,0f000h
mov ds,si
mov si,0fa6eh
jmp skip
upper:
xor si,si
mov ds,si
lds si,ds:7Ch
mov bx,ds
or bx,si
jne skip
mov ax,'#'*8 ; the default character if upper characters are not available
jmp lower
skip:
add si,ax
pop bx
Now if BX,CX has the row (0..42), column (0..89) and ES point to the
display, then you should be able to output the character with:
IMUL DI,BX,180 ; 186+
ADD DI,CX
CLD
REPT 4
MOVSB
ADD DI,1FFFH
ENDM
SUB DI,8000h-90
REPT 4
MOVSB
ADD DI,1FFFH
ENDM
Osmo
There are good files on video tweaking , too , so you should search the
net with these keywords .
when experimenting , especially on older hardware , keep in mind that bad
parameter settings MAY harm ( even destroy ) the monitor and / or display
adapter ( though its not THAT probable )
Depending of the combination of monitor / adapter , you may achieve
impressive results , and indeed the video "modes" usually provided
by the ROM in the adapter are just a small choice among what can be done.
Good luck : )
N.B : If your goal is just to enhance the Hercules mono system you'll
find a mot of all made old utilities to this end . My message here assumes
you are eager to *learn* how this can be done !
/\/
------
User of http://www.foorum.com/. The best tools for usenet searching.
You could go into graphics mode and then draw your own fonts, but this is
incompatible with a co-existing SVGA card. I don't believe the Hercules
mono card is capable of anything other than 80x25.
> I have several mono vid cards collecting dust on the shelf and one of them
> is an old ATI Graphics Solution to which I also have the manual to. This
> particular mono card can do 132x50 text mode but that is an ATI extra
> feature to the Hercules mono standard and I'd like to find a way to do it
> across all Herc comp cards (if poss). Otherwise I suppose I could use the
> herc graphic mode and haxor up a teeny little font (ugh).
I'm sure that was an ATI enhancement. I have never heard of a mono card
doing more than 80x50, and even then it was a special card. I have seen
mono VGA cards that can do more on a VGA/mono VGA monitor.
- Rick C. Hodgin
I take it for granted that you are talking about DOS programming. BIOS Int
10, Function 0 set the video mode. Function 1 sets the cursor type.
Function 2 sets the cursor position. Function 3 reads the cursor position.
Function 15 gets the current display mode.
mov ax, 0f00h
xor bx, bx
xor cx, cx
xor dx,dx
int 10h returns ah = number of columns, al = display mode
mode 02h = 80 X 24 b/w
mov ax, 0007h al = video mode 07h = monochrome adapter or ega
text display
xor bx, bx
xor cx, cx
xor dx. dx
int 10h returns nothing
Of course one will have to research which video modes are supported by their
video card.
On 2000-11-30 a@b.c said:
>Hi everyone,
>Anyone know how to force the generic Hercules (compatible) mono
>controller into greater than 25 lines in text mode (as is possible
>in ega/vga). I've searched the web a bit but didn't find anything
>so I'm doubting it's even possible but figured I'd ask here anyway.
As you've correctly discerned, it is =not= possible for generic
Herc-compatible monochrome video cards to display more than 25
lines in text mode.
>I have several mono vid cards collecting dust on the shelf and one
>of them is an old ATI Graphics Solution to which I also have the
>manual to. This particular mono card can do 132x50 text mode but
>that is an ATI extra feature to the Hercules mono standard and I'd
>like to find a way to do it across all Herc comp cards (if poss).
>Otherwise I suppose I could use the herc graphic mode and haxor up
>a teeny little font (ugh).
>Mel McBain
Well, that's probably gonna be the most expeditious way to
accomplish your goal.
Fortunately, it's a path that others have already trod before
you, so it may not be as ugh-y as you might think.
There's a public domain program from 1986 named HERCVIEW by
Raymond J. Chen (usually posted on FTP sites as HERCVIEW.ZIP)
-- complete with ASM source code -- that allows you to display
180 x 43 text (using Hercules graphics mode, of course).
Chuck Guzis of Sydex fame (SIMCGA, ANADISK, 22DISK, etc.) wrote
a collection of C-callable Herc routines in assembly language
that might prove helpful. The archive is usually posted as
CHERC.ZIP. I believe you can find it on any Simtel FTP mirror.
Spend a few more minutes with a 'Net search engine (Google is
good). You'll be amazed at how much stuff is out there. After
all, Hercules graphics have been around for a long while.
I always enjoyed seeing, and programming, Herc graphics. They
were far ahead of their time, and they still look d*mn good today.
One correspondent in these precincts suggested 'tweaking' the
video card's registers. While that's generally a viable option
with CGA/EGA/VGA video adaptors, the Herc card is not amenable
to such manipulations.
There =is=, however, one undocumented 'tweak' that can be made
to Herc-clone monochrome cards that produces an interesting
(though not presently useful) effect.
To my knowledge, there's been no research done on this. But
if you could perfect it, you might be able to achieve a text-
mode display of more than 25 lines without having to resort
to graphics mode.
Here's the 'tweak' (and be prepared to reboot after you're
finished playing with it):
mov dx,03B4h
mov ax,0308h
out dx,al
mov al,ah
inc dx
out dx,al
Have fun! :)
Actually Hercules has three modes when it comes to memory use: Diag,
Half and Full. Diag is basically same as IBM MDA. Only 4 KB of memory is
used. Half allows one graphics page and 32KB of memory is used. Full
allows two pages and uses 64KB. The full mode is incompatible with color
adapters as it uses the B800 segment. Half should be compatible with all
the adapters to which MDA is compatible. Some effects like scrolling
might look nicer on full mode though.
>I'm sure that was an ATI enhancement. I have never heard of a mono card
>doing more than 80x50, and even then it was a special card. I have seen
>mono VGA cards that can do more on a VGA/mono VGA monitor.
HGC+ can do 80 or 90 columns and 21-87 rows. (though I doubt anything
over 49 is readable) It also supports character sets up to 3072 characters
(compared to 512 on EGA/VGA)
Osmo
Do you have any literature/code samples on how to do this? I would love to
use the half mode. I have wanted for years to get the MONO card to display
graphics. I have tried, but it always failed because of the existence of a
VGA/SVGA. I was sure I was running into compatibility issues. But from
what you said maybe it was the 64k vrs 32k thing.
Please, please, please ... help me. :)
- Rick C. Hodgin
MUHAHAHAHA, FEAR ME LITTAL HERCUCLEES VIDIO CARD!1 OPAN YORE LITTAL 8 BIT
MOUTH, ITS LUNCH TIEM AND HERA COEMS A HAXOR SANDWIDCH!1
"aa004" <a@b.c> wrote in message news:t2cvri3...@corp.supernews.com...
>
> Hi everyone,
>
> Anyone know how to force the generic Hercules (compatible) mono controller
> into greater than 25 lines in text mode (as is possible in ega/vga). I've
> searched the web a bit but didn't find anything so I'm doubting it's even
> possible but figured I'd ask here anyway.
>
The code I posted in the previous message was buggy. Here is a debugged
version. It is in a Pascal wrapper for testing but the ASM routines can
be separated. There is also a scroll routine. Note that the Pascal adds
the BP to parameters implicit. The Outchar routine gets the position as
address: 180*row+col. I think you also could add 90 to move it had a row
(4 lines) down, but one cannot get arbitrary vertical, let lone
horizontal positioning with the code (I think it is not needed on text
mode emulation). If you want black on white, chanet the MOVSB's was
LODSB; NOT AL; STOSB. Also change the scrolling to fill white (65535).
{$G+} {286 code}
uses crt,dos,graph;
Procedure OutChar(addr:word; chr:char); assembler;
asm
push ds
mov al,chr
xor ah,ah
shl ax,3
cmp ax,128*8
jae @upper
@lower:
mov si,0f000h
mov ds,si
mov si,0fa6eh
jmp @skip
@upper:
xor si,si
mov ds,si
lds si,ds:7Ch
sub ax,1024
mov bx,ds
or bx,si
jne @skip
mov ax,'?'*8
jmp @lower
@skip:
add si,ax
mov ax,0b000h
mov es,ax
mov di,addr
CLD
mov cl,2
@loop:
MOVSB
ADD DI,1FFFH
MOVSB
ADD DI,1FFFH
MOVSB
ADD DI,1FFFH
MOVSB
SUB DI,8000h-90-1fffh
dec cl
jnz @loop
pop ds
end;
const st:string='Hello World ДЦЕдце!!';
Procedure WriteStr(x,y:word;st:string);
var i:word;
a:word;
begin
if (y>42) or (x>90-length(st)) then exit;
a:=180*y+x;
for i:=1 to length(st) do begin
OutChar(a,st[i]);
inc(a);
End;
End;
Procedure Scroll(n:word); assembler;
asm
push ds
mov dx,348
mov ax,n
shl ax,3
sub dx,ax
jbe @fill
mov ax,0b000h
mov es,ax
mov ds,ax
mov di,0
imul si,n,180
cld
@loop1: mov cx,45
rep movsw
add si,2000h-90
jns @skip1
sub si,8000h-90
@skip1:
add di,2000h-90
jns @skip2
sub di,8000h-90
@skip2:
dec dx
jnz @loop1
@fill:
mov dx,n
shl dx,3
jz @out
xor ax,ax
@loop2:
mov cx,45
rep stosw
add di,2000h-90
jns @skip3
sub di,8000h-90
@skip3: dec dx
jnz @loop2
@out:
pop ds
end;
var i:integer;
gd,gm:integer;
Begin
randomize;
detectgraph(gd,gm);
if gd<>HercMono then exit;
Initgraph(gd,gm,getenv('bgi'));
for i:=1 to 100 do WriteStr(random(80),random(43),st);
for i:=1 to 22 do begin
scroll(2);
End;
closegraph;
End.
The problem is that HGC has no BIOS whatsoever, just like MDA and CGA it
relies on the main BIOS. Therefore if you use BIOS then you cannot get
any Hercules specific functionality. You need to use direct hardware
programming. Because of this even the Hercules Graphics mode lacks
specific mode number. Also HGC has no text modes beyond 80x25.
EGA and VGA on the other hand have their own BIOS in the C000h segment which
replaces or at least supplements the video routines in the main BIOS.
I think Hercules attempted to introduce a BIOS later. I think that was
loaded from disk but it was not popular as programs already used direct
hardware programming and relying on the BIOS would have cut all the old
cards and clones.
Osmo
You simply set the mode in port 3BFh. The values are DIAG: 0, HALF: 1 and
FULL: 3 (it is a byte value). DIAG is the power on default.
However, this only works with your own programs as programs that use HGC
graphics set the configuration switch and they typically set it to FULL.
The Switch should be read/write but at least on the card I used to have
I got zero always on read.
A sensible program would set the switch to half unless it really needed
two pages. AFAIK the original idea was that the user would set the
switch with a specific utility and then the program would not touch it
but that was not practical (most users do not care about setting such
switches, they care about getting graphics). Also AFAIK attempting to
switch graphics on when the switch is in DIAG could damage the monitor.
The very first Hercules cards lacked the switch and worked always in
FULL mode being totally incompatible with color displays.
> I have wanted for years to get the MONO card to display
>graphics. I have tried, but it always failed because of the existence of a
>VGA/SVGA. I was sure I was running into compatibility issues. But from
>what you said maybe it was the 64k vrs 32k thing.
You still might get into problems if the SVGA uses 128k window or if you
use the mono mode in that.
Osmo
I'll do it. If my video card goes bye bye, or my monitor goes fry fry I'll
let you know. Otherwise this is a very exciting prospect!
> A sensible program would set the switch to half unless it really needed
> two pages. AFAIK the original idea was that the user would set the
> switch with a specific utility and then the program would not touch it
> but that was not practical (most users do not care about setting such
> switches, they care about getting graphics). Also AFAIK attempting to
> switch graphics on when the switch is in DIAG could damage the monitor.
>
> The very first Hercules cards lacked the switch and worked always in
> FULL mode being totally incompatible with color displays.
For years I have used a mono card in combination with my VGA/SVGA. There
simply is no substitute for debugging. I've told people about this for
years and they say "Why would you want to use a mono monitor?" They just
don't get it.. but the benefits are there. And there in force.
> You still might get into problems if the SVGA uses 128k window or if you
> use the mono mode in that.
I understand. The programming I'll be doing is in my own operating system.
I will be able to get around that (if it ends up being a problem, it
shouldn't). I will keep you posted. And thank you for relaying this
information to me.
As a parting thought ... do you know where I can get some HGC documentation?
Either on the web or via an ISBN # for a book? I might like to keep that
information handy.
- Rick C. Hodgin
I have read from this port. It always returns 0ffh. When I write to it
nothing happens. Subsequent reads also return 0ffh.
Do I need to enable/disable some other value in another port prior to
writing to 3bfh?
- Rick C. Hodgin
Nothing happens? Of course nothing spectacular should happen if you just
write to the port. Did you try to access various parts of the B000h
segment with various values in the switch?
Reading the port is not an issue.
Osmo
There was a book called Programmer's Guide to Hercules Graphics Cards
by David B. Doty Addison-Wesley 1988 ISBN-201-11885-8. Also Programmer's
Guide to PC & PS/2 Video Systems by Wilton, Microsoft Press 1987 ISBN
1-55615-103-9 has information about Hercules.
Btw Hercules used to make Hercules Color Card which was a CGA clone
that synchronized to the HGC configuration switch so when one set the
HGC to FULL the color adapter hide its memory from CPU (Presumably it
continued to display what was there). This is not to be confused with
Hercules InColor which was color version of HGC mostly comparable to EGA
in performance.
Osmo
[]---------------------------------------------[]
| |
| HGC 640/400 mono mode description |
| |
| Version 1.00 |
| Copyright (c) 1996 by |
| Wojciech Migda |
| |
[]=============================================[]
HOW WAS IT INVENTED ?
~~~~~~~~~~~~~~~~~~~~~
Several times I was working on my old HGC trying to get more
than was offered in standard documentations hoping to get
better graphics. I Paid the main attention to CRT registers.
In all descriptions I've read was written that CRT register
number 8 MUST contain 02h. So I tried to write there something
else. Bingo! The magic number was 3. In text mode vertical size
of the screen was decreased and there were horizontal black
lines between every text line. I had to subtract 1 from the
letter size to get rid of them. In assembler it looks like
that:
mov dx,03b4
mov ax,0308
out dx,al
mov al,ah
inc dx
out dx,al
dec dx
mov ax,0c09
out dx,al
mov al,ah
inc dx
out dx,al
Done. Hmm.. we have the same number of lines like before and
a lot of free place above and below them. We could increase
the number of lines like with VGA card, but because of the
constant size of the memory page equal 1000h the screen is
being wrapped. If you know how to change it please tell me
(my adress at the end of this doc).
Then I tried to do the same in the graphics mode 720/348. It
changed the size of the screen too, but I couldn't recognize
the memory structure. Finally I discovered that like in the
text mode I needed to decrease content of the #09 register
which in text mode means height of letters but in graphics mode
it contains number of memory banks. The result was 640/400 mode.
It could have more lines but it is limited by the memory page
size equal 8000h, so maximum lines number is 409.
HOW TO TURN IT ON ?
~~~~~~~~~~~~~~~~~~~
Below are numbers (in hex) that must be written to CRT registers
to turn this mode on:
INDEX: | 00 01 02 03 04 05 06 07 08 09
----------+----------------------------------------
CONTENTS: | 37 28 2d 07 68 1f 64 64 03 02
Memory is divided into 4 banks like in the 720/348 mode, but
the line size is equal 80 bytes. Every byte codes 8 pixels and
so on.
IS THIS CODE FREE ?
~~~~~~~~~~~~~~~~~~~
Yes, if the program which includes it is free too. Otherwise
you are obliged to send me 5 USD. Also nice postcards are
welcome.
HOW TO CONTACT THE AUTOR ?
~~~~~~~~~~~~~~~~~~~~~~~~~~
I can be reached under following adresses:
E-mail:
coo...@august.v-lo.krakow.pl
Snail-mail:
Wojciech Migda
os. Piast─ 23/41
31-624 Krak─
POLAND
* 6845 CRT Controller
* 64K RAM (On Card)
DISPLAY BUFFER
Page 0 = B0000-B7FFF (32K bytes)
Page 1 = B8000-BFFFF (32K bytes)
RESOLUTION
720h X 348v
INPUT/OUTPUT PORTS
(Out) 03B4 = 6845 Index Register
(In/Out) 03B5 = 6845 Data Register
(Out) 03B8 = Display Mode Control Port
(Out) 03B9 = Set Light Pen Flip Flop
(In) 03BA = Display Status Port
(Out) 03BB = Reset Light Pen Flip Flop
(In/Out) 03BC = Printer Data Port
(In) 03BD = Printer Status Port
(In/Out) 03BE = Printer Control Port
(Out) 03BF = Configuration Switch
6845 INDEX AND DATA REGISTERS (03B4/03B5)
The 6845 controls the frequencies for the monochrome display and the
width
and height of the screen. There are 16 parameters that govern the display.
They are loaded into the 6845 one by one via a single input/output port.
Another output port is used to specify which parameter will be loaded next.
These two ports are said to be interfacing with the 6845 Data and Index
Registers respectively.
Index Data
0 Total characters per row including SYNC, less 1.
1 Number of visible characters per row.
2 Position of the first character during SYNC, less 1.
3 Number of characters during SYNC per row, less 1.
4 Number of rows less 1, including the row during vertical retrace.
5 Number of scans (row fractions) in addition to total number of rows.
6 Number Number of visible rows.
7 Row number to begin the retrace, less 1. (16 scan duration.)
8 Always output 2. (REF 6845 data sheet.)
9 Number of scans per row, less 1.
10 First scan where the cursor will overlay a character.
11 Last scan where the cursor will overlay a character.
12 Always output 0. (REF 6845 data sheet.)
13 Always output 0. (REF 6845 data sheet.)
14 Offset of the cursor position in the display buffer (H).
15 Offset of the cursor position in the display buffer (L).
16 Offset into the buffer when lightpen tripped (H).
17 Offset into the buffer when lightpen tripped (L).
1. The monochrome display requires a scan to be approximately 54
microseconds
2. The total number of rows and scans must be adjusted to allow enough
time for the screen to be updated 50 times per second.
3. The local oscillator on the Graphics Card will generate a time base of
0.5625 microseconds per character in text mode and 1 microsecond per
character in bit-mapped mode.
4. In bit-mapped mode, one character is 16 dots wide and 4 scans tall.
In
text mode, it is 9 dots wide and 14 scans tall.
DISPLAY MODE CONTROL PORT (03B8)
The output port sets the mode of operation for the Graphics Card.
BIT OPTIONS
0 Not Used
1 0 = text mode (Power on default.)
1 = graphics mode (Note: The 6845 must be reprogrammed each time this
bit
changes value.)
2 Not Used
3 0 = blank the screen (Power on default.)
1 = activates the screen (This bit is useful when changing modes. By
keeping the screen blank for a period of time, the change from text
to graphics modes can be done without any screen bounce.)
4 Not Used
5 0 = turn off the text blinker (Power on default.)
1 = turn on the text blinker (This blinker has no effect on the
cursor.
Every character whose attribute indicates blinking, will now blink.)
6 Not Used
7 0 = Page 0 (Power on default, Start display at B0000.)
1 = Page 1 (Start display at B8000. This bit selects the active
display
buffer on the Graphics Card.)
Note: Be particularily careful when changing betwen text and graphic modes.
Steps: 1. Program the Display Mode Control Port bit 1
2. Program the 6845 with the proper parameters.
When you switch between text and graphic modes, your monitor is subject
to
some undefined horizontal and vertical frequencies. For this reason, we
suggest that you do not use high level languages to control the Display Mode
Control Port bit 1. (This does not include memory access which can be done
in
any language.)
DISPLAY STATUS PORT (03BA)
This input port is used to sense the real time status of the monochrome
display.
BIT CONDITIONS
0 0 = normal character
1 = SYNC (Screen is temporarily blanked.)
1 Not Used
2 Not Used
3 0 = dots off
1 = dots on (This bit can be used as a software checkpoint to verify
that the monochrome display is receiving an active video signal.)
4 Not Used
5 Not Used
6 Not Used
7 0 = vertical retrace (Screen is temporarily blanked.)
1 = active display. (This information is useful when the software
wnats
to make sure that the screen is blanked.)
PRINTER DATA PORT (03BC)
An output to this port will latch the value from the data bus to the
printer. The actual pin conditions are returned when input. This feature
is
used to verify the integrity of the data path.
PRINTER STATUS PORT (03BD)
This is an input port only.
BIT CONDITIONS
0 Not Used
1 Not Used
2 Not Used
3 0 = 1 printer error
1 = normal operation
4 0 = printer not attentive
1 = printer is listening
5 0 = normal operation
1 = out of paper
6 0 = accepting data
1 = ready of more
7 0 = printer is busy, not selected of in error
1 = normal operation
PRINTER CONTROL PORT (03BE)
This is an input/output port.
BIT CONDITIONS
0 0 = strobe the printer to accept data at the data latch
1 = release the strobe (Power on default.)
1 0 = auto line feed
1 = remote line feed control (Power on default.)
2 0 = initialize the printer (Power on default.)
1 = release the printer for normal operation
3 0 = deselect the printer
1 = select the printer (Power on default.)
4 0 = mask off IRQ7 (Power on default.)
1 = enable IRQ7 when the printer is ready for data
5 Not Used
6 Not Used
CONFIGURATION SWITCH (03BF)
This port accesses the software switch that allows one of three
configurations of the Graphics Card's memory map and protects against the
accidental setting of graphics mode.
BIT OPTION
0 0 = (Power on default) prevents the setting of graphics mode (bit 1
of
Display Mode Control Port)
1 = allows the setting of graphics mode (bit 1 of Display Mode Cointrol
Port)
1 0 = (Power on default) mask Page 1 (B8000-BFFFF) out of the memory
map
and prevent the setting of page bit (bit 7 of Display Mode
Control
Port)
1 = bring Page 1 (B8000-BFFFF) in to the memory map and allows the
setting of page bit (bit 7 of Display Mode Control Port)
INTERRUPT REQUESTS
IRQ7 This interrupt is generated when the printer acknowleges data. It is
normally masked off until enabled via the Printer Contol Port (03BE).
PRINTER ADAPTER PIN NUMBER MONOCHROME DISPLAY CONNECTOR PIN NUMBER
PIN 1. Strobe PIN 1. Ground
PIN 2. Data bit 0 PIN 2. Ground
PIN 3. Data bit 1 PIN 3. Not Used
PIN 4. Data bit 2 PIN 4. Not Used
PIN 5. Data bit 3 PIN 5. Not Used
PIN 6. Data bit 4 PIN 6. Intensity
PIN 7. Data bit 5 PIN 7. Video
PIN 8. Data bit 6 PIN 8. Horizontal
PIN 9. Data bit 7 PIN 9. Vertical
PIN 10. Acknowledge
PIN 11. Busy
PIN 12. P. End
PIN 13. Select
PIN 14. Auto Feed
PIN 15. Error
PIN 16. Initialize Printer
PIN 17. Select Input
PIN 18-25. Ground
PICTORIAL OF CONNECTORS
+----+ j2 +-----+ j3 +----+
| / / |
| Monochrome Parallel |
| Display Printer |
+ Connector Connector ====
====
j1 ====
\ ====
+ Light Pen ====
| Connector |
| |
| O.S.C. 6845 |
| +--+ +--+ |
| | | | | |
| +--+ | | |
| +--+ |
| |
| +--+ |
| | | |
| +--+ |
| |
| +--------------------+ |
| | 64K RAM | |
| +--------------------+ |
| |
+-----------------------------+
CONFIGURATIONS
From System Prompt From BASICA Mode Descripion
------------------------------------------------------------------------
HGC DIAG OUT &H3BF,0 No Graphics Pages Available
SYSTEM
HGC HALF OUT &H3BF,1 First Graphics Page Available
SYSTEM
HGC FULL OUT &H3BF,3 Both Graphics Pages Available
SYSTEM
TEXT DOT GENERATION
In text mode, the display buffer is used to store the character codes and
the attribute codes for displayed characters. The offset of the storage is:
B000 - B0FFFF (4K bytes)
The text display is 80 characters wide and 25 lines long. All the
characters are stored contiguously using up 160 bytes per line. For each
character, one byte is used for the character code and one for the
attribute.
Offset of the character code of a character:
= 160 * (LINE - 1) + 2 * (COLUMN - 1)
Offset of the attribute of a character:
= 160 * (LINE - 1) + 2 * (COLUMN - 1) + 1
where LINE is between 1 and 25 and COLUMN is between 1 and 80
The Graphics Card has a hardware character generator which can do 256
different characters specified by the character codes. There is an
attribute
decoder which can underline, reverse video, blank, bold face, or blink any
character. The character generator conforms to the standard IBM PC
character
font.
The attribute decoder follows these rules:
7 6 5 4 3 2 1 0 Attribute Codes
B 0 0 0 I 0 0 0 Blank
B 0 0 0 I 0 0 0 Underline
B 0 0 0 I 1 1 1 Normal Display
B 1 1 1 I 0 0 0 Reverse Video
where I = 0 for normal body
I = 1 for bold body
if the blinker is off (DCMP bit 5 = 0) then B = 0 for no blink
1 for blinking
if the blinker is on (DCMP bit 5 = 1) then B = 0 for no blink
1 for blinking
GRAPHICS DOT GENERATION
Once the Graphics Card is in the bit-mapped mode, the display buffer can
store two pages, or two screens using one bit per dot. These two pages can
be
alternately displayed.
While a page or screen is being displayed, any alteration to the buffer
for
that page will be shown on the display. For the page not being displayed,
changes to it will be shown only when it is selected.
The page selection is done by using bit 7 of the Display Mode Control
Port
in the following manner:
0 for Page 0
1 for Page 1
The buffer area is allocated as follows:
Page 0 = B0000 - B7FFF
Page 1 = B8000 - BFFFF
The offset (into the page) of the byte containing dot (x,y) in each page
is:
2000H * (Y MOD 4) + 90 * (INTEGER (Y / 4)) + (INTEGER (X / 8))
and the bit in the byte that stores the dot is bit position
7 - (X MOD 8)
where x is between 0 and 719 and y is between 0 and 347
EXAMPLE: The offset of (300,250) is
2000H * (250 MOD 4) + 90 * (INTEGER (250 / 4)) + (INTEGER (300 / 8))
= 2000H * (2) + 90 * (62) + (37)
= 4000H + 5617
= 4000H + 15F1H
= 55F1H
and bit position is
7 - (300 MOD 8)
= 7 - (4)
= 3
REGISTER DESCRIPTIONS
+---+-------------+------------+-------------+---------------+--------------
--+
|BIT| CRT CONTROL | CRT STATUS |PRINTER DATA |PRINTER STATUS |PRINTER
CONTROL |
| | (03B8) | (03BA) | (03BC) | (03BD) | (03BE)
|
| | (WRITE ONLY)| (READ ONLY)| (READ/WRITE)| (READ ONLY) | (READ/WRITE)
|
+---+-------------+------------+-------------+---------------+--------------
--+
|0 | NOT USED |+ HORIZONTAL| D0 | NOT USED | + STROBE
|
| | | SYNC | | |
|
+---+-------------+------------+-------------+---------------+--------------
--+
|1 |+ SELECT | RESERVED | D1 | NOT USED | + AUTO FEED
|
| | GRAPHIC MODE| | | |
|
+---+-------------+------------+-------------+---------------+--------------
--+
|2 | NOT USED | RESERVED | D2 | NOT USED | - INITALIZE
|
| | | | | | PRINTER
|
+---+-------------+------------+-------------+---------------+--------------
--+
|3 |+ ENABLE |+ VIDEO | D3 |- ERROR | + SELECT IN
|
| | VIDEO OUTPUT| OUTPUT | | |
|
+---+-------------+------------+-------------+---------------+--------------
--+
|4 | NOT USED | NOT USED | D4 |+ SELECT | + ENABLE IRQ7
|
| | | | | STATUS | ON - ACK
|
+---+-------------+------------+-------------+---------------+--------------
--+
|5 |+ ENABLE | NOT USED | D5 |+ PAPER OUT | NOT USED
|
| | CHAR BLINK | | | |
|
+---+-------------+------------+-------------+---------------+--------------
--+
|6 | NOT USED | NOT USED | D6 |- ACK | NOT USED
|
| | | | | |
|
+---+-------------+------------+-------------+---------------+--------------
--+
|7 | PAGE # |- VSYNC | D7 |- BUSY | NOT USED
|
| | | | | |
|
+---+-------------+------------+-------------+---------------+--------------
--+
CODE
Application Notes: Code segments to change modes. (Make sure that the
configuration bit is set to your requirements before attempted to change
modes.)
; port address
index equ 03b4h
cntrl equ 03b8h
; control codes
scrn on equ 8
grph equ 2
text equ 20h
xdata segment public 'data'
gtable db 35h,2dh,2eh,07h
db 5bh,02h,57h,57h
db 02h,03h,00h,00h
ttable db 61h,50h,52h,0fh
db 19h,06h,19h,19h
db 02h,0dh,0bh,0ch
xdata ends
xcode segment public 'code'
assume cs:xcode,ds:xdata
;---------------------------------------------------------------------------
;
; GRAPHICS MODE - programs the 6845 CRT controller for the 348x720 graphics
; mode. The active page for both writing and display is set
; to the default value of page 0.
;
; ON ENTRY: no parameters
;
;---------------------------------------------------------------------------
gmode proc near
push es
push ds
mov al,grph
lea si,gtable
mov bx,0
mov cx,4000h
call setmd
pop ds
pop es
ret
gmode endp
;---------------------------------------------------------------------------
---
;
; TEXT MODE - programs the 6845 and CRT control register to produce text
mode.
;
; ON ENTRY: no parameters.
;
;---------------------------------------------------------------------------
---
tmod proc near
push es
push ds
mov al,text
lea si,ttable
mov bx,720h
mov cx,2000
call setmd
pop ds
pop es
ret
tmode endp
setmd proc near
sets mode to graphics or text depending on al
si = parameter table
cx = number of words to be cleared
bx = blank value
push ds
push es
push ax
push bx
push cx
change mode but without scrn on
mov dx,cntrl
out dx,al
initialize the 6845
mov ax,ds
mov es,ax ;also point es:si to parameter table
mov dx,index
mov cx,12 ;12 parameters to be output
xor ah,ah ;starting from register 0
parms: mov al,ah
out dx,al ;output register number
inc dx
lodsb
out dx,al ;output data
inc an ;next value
dec dx
loop parms
pop cx ;clear the buffer
mov ax,0b00h
cld
mov es,ax
xor di,di
pop ax
rep stosw
scrn on,page 0
mov dx,cntrl
pop ax
add al,scrn on
out dx,al
pop es
pop ds
ret
setmd endp
xcode ends
provided by
Robert Morse MLO5-2/B6 LEWS2::MORSE
The board configuration is controlled by the write-only control register
at port 03BF. All bits are set to zero upon power-up, which limits
the board to text mode (it will pass IBM monochrome display adapter
diagnostics only while all bits are zero).
Bit Description
--- -----------
0 0=disable setting of graphics mode; 1=allow graphics mode.
1 0=disable page one (allows coexistence with a color graphics
board); 1=enable page one (required to run Lotus 1-2-3).
2..7 (not used)
Modes are controlled by the write-only control register at port 03B8. All
bits are set to zero upon power-up.
Bit Description
--- -----------
0 (not used)
1 0=text; 1=graphics.
2 (not used)
3 0=blank screen; 1=activate screen.
4 (not used)
5 0=disable text blink; 1=enable text blink.
6 (not used)
7 0=page zero at B0000h; 1=page one at B8000h.
Table of 6845 values (all values in hexadecimal):
Register Text Graphics
------------------------- ---- --------
0 Total chars/row -1 61 35
1 Visible chars/row 50 2D
2 Hsync position 52 2E
3 Hsync width 0F 07
4 Total rows -1 19 5B
5 Additional scan lines 06 02
6 Visible rows 19 57
7 Vsync position 19 57
8 Interlace control 02 02
9 Lines/row -1 0D 03
A Top cursor scan 0B 00
B Bottom cursor scan 0C 00
C Display origin 00 00
D Display origin 00 00
In text mode, each character time is 0.5625 microseconds and a character is
9 dots wide and 14 dots high. The controller is programmed for 25
displayed rows of 14 scan lines each. There are 350 visible scan lines and
370 total scan lines.
In graphics mode, each character time is 1.000 microseconds and a character
is 16 dots wide and 4 dots high. The controller is programmed for 87
displayed rows of 4 scan lines each. There are 348 visible scan lines and
370 total scan lines. Each row has 45 displayed characters of 16 bits,
giving 720 dots/row.
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
<>
Note on Addressing the Screen
-----------------------------
The preceding paragraph gives a hint about pixel addresses in graphics
mode. I looked through the HERCBIOS sources and then wrote a program
(HERCDEMO.ASM) to help me understand this. Here's how screen addressing
works:
o Although you might think of graphics mode as pure bits, the 6845
chip always thinks in term of characters. When you switch to
graphics mode, the characters are 16 bits wide by 4 bits high.
Thus, in graphics mode the screen has 87 rows of "characters"
and each row is 45 characters wide, for 720x348 pixels.
o For a reason unknown to me (probably speed of memory access),
each of the four scan lines in a graphics character is stored in
a different "bank" or 2000h section of the screen buffer. All
87 scan line 0s are stored from 0-2000h, all scan line 1s from
2000h-4000h, all scan line 2s from 4000h-6000h, and all scan
line 3s from 6000h-8000h.
o Within a bank of memory (representing one set of scan lines),
each row is 45 words or 90 bytes wide. Rows follow each other
with no intervening space. So, assuming row numbers from 0 to
86, the 5th graphics character in row 40 is composed of four
scan lines, each 16 bits wide, located at the following memory
addresses (offsets from the beginning of the screen buffer):
40*90 = 3600 (offset in any bank to row 40)
4*2=8 (5th graphics char = (n-1)*2 bytes/char)
Scan line 0: locations 3608,3609
Scan line 1: 2000h (8192) + 3608,9 = 11800,11801
Scan line 3: 4000h (16384) + 3608,9 = 19992,19993
Scan line 4: 6000h (24576) + 3608,9 = 28184,28185
o Computing a pixel location is a little harder, but still fairly
straightforward. Say you want to address the bit at 300,300
with a point of origin at the upper left. 300 scan lines down
from the top is 300/4 = 75 (no remainder), which is scan line 0
of row 75. 300 bits into the line is 300/8 = 37 remainder 4.
The bit you want is in bank 0 (0-2000h) since it is scan line 0,
offset by 75*90 =6750 for the row, plus 37 for the byte within
the row, or byte offset 6787 from the beginning of that page in
screen memory. Within that byte, you want to set/reset bit 4.
Well, that should cover it. If you should discover that I got any of
this wrong, send me mail.
-Reid Brown
DECWET::BROWN
"Rick Hodgin" <foxm...@indy.net> wrote in message
news:PEYV5.24209$II2.2...@newsread2.prod.itd.earthlink.net...
0x3bf is a write only port. And your attempts at writing to it are failing
because your Herc card is now incensed at you for attempting to read from
it. (Really, have you no shame sir!?!)
Hee hee. Seriously, you can set 0x3bf you just can't verify set value by
reading 0x3bf. Set it as stated above and start banging higher in vid mem.
Just remember to reprogram the CRTC registers if you make a transition from
text mode.
>For years I have used a mono card in combination with my VGA/SVGA. There
>simply is no substitute for debugging. I've told people about this for
>years and they say "Why would you want to use a mono monitor?" They just
>don't get it.. but the benefits are there. And there in force.
>
Hey, i can't believe it, i'm NOT the only one...... ;-))))
Good Luck
--
Alexei A. Frounze
alexfru [AT] chat [DOT] ru
frounze [AT] ece [DOT] rochester [DOT] edu
http://alexfru.chat.ru
http://members.xoom.com/alexfru/
http://welcome.to/pmode/
"Ralf Quint" <Ralf_...@hotmail.com> wrote in message
news:t2iecm...@corp.supernews.com...
>
> On Sat, 02 Dec 2000 01:55:57 GMT, "Rick Hodgin" <foxm...@indy.net>
> wrote:
>
> >For years I have used a mono card in combination with my VGA/SVGA. There
> >simply is no substitute for debugging. I've told people about this for
> >years and they say "Why would you want to use a mono monitor?" They just
> >don't get it.. but the benefits are there. And there in force.
> >
>You can not believe that only mono+color is a possible scheme while
>mono+mono or color+color are not?
>Well, that's the way hardware has been done in PC. That's it.
>
>Good Luck
No, big misunderstanding Alexei!
I meant i can't believe that i'm not the only one USING such a
combination. Actually, i have 3 computers here with VGA/HGC combos
installed (but only two working MDA monitors :-((( )
Ralf
--
Alexei A. Frounze
alexfru [AT] chat [DOT] ru
frounze [AT] ece [DOT] rochester [DOT] edu
http://alexfru.chat.ru
http://members.xoom.com/alexfru/
http://welcome.to/pmode/
"Ralf Quint" <Ralf_...@hotmail.com> wrote in message
news:t2itue9...@corp.supernews.com...
Sam.
Sent via Deja.com http://www.deja.com/
Before you buy.
I found out what I was doing wrong. I also found another mistake. There's
a reference to "mov ax,0b00h" that should be "mov ax,0b000h".
My problem was I wasn't including the following code:
mov dx,03bfh
mov al,1
out dx,al
This allows graphics modes to exist on the HGC card. :)
- Rick C. Hodgin
I have a problem with it though. I am able to get the text mode to work
just fine. But when I do the graphics mode it freaks out. :) Technical
talk, I love it... Seriously, my cursor is about 1/2 wide in the middle of
the screen. When I write text to the video buffer it appears normally (not
like I'd expect in graphics mode), but it looks huge. The characters are
about 2" high and 1/2" wide.
Is it a problem with my mono monitor? Is it a problem with my card not
being 100% HG compatible? How would I find out of it is?
- Rick C. Hodgin
On 2000-12-09 foxm...@indy.net said:
>I have a problem with it though. I am able to get the text mode to
>work just fine. But when I do the graphics mode it freaks out. :)
>
>Technical talk, I love it... Seriously, my cursor is about 1/2
>wide in the middle of the screen. When I write text to the video
>buffer it appears normally (not like I'd expect in graphics mode),
>but it looks huge. The characters are about 2" high and 1/2" wide.
>
>Is it a problem with my mono monitor? Is it a problem with my card
>not being 100% HG compatible? How would I find out [i]f it is?
I'm guessing that your video adaptor and monitor are fine.
No Herc clone video card is '100% HG compatible,' because a real
Hercules-brand monochrome video adaptor has 4 pages of graphics
memory. A clone has only two. In the 'real world', though, it
simply doesn't matter.
The code for changing video modes seemed a bit complicated and
obfuscatory. Of course, many programmers LIKE it that way; it
preserves the 'mystique.' :)
But try this simpler code. The 'loop' slows things down just
enough on ultra-fast machines so that the 6845 doesn't clutch up
when you feed it the parameters...and the timing difference is
imperceptible to the user. I think you'll find that this'll cure
your problem:
;
; SETHERC.ASM
; Enables Hercules monochrome graphics mode.
;
;
gparms db 35h,2Dh,2Eh,07h,5Bh,02h,57h,57h,02h,03h,00h,00h
;
mov dx,03BFh ;Herc enabling port
mov al,3 ;the magic number
out dx,al ;enable graphics mode
mov dx,03B4h ;index port on the 6845
mov cx,12 ;count of parameters
xor ah,ah ;counter
lea si,gparms ;zero register
cld ;set forward direction
set_gfx:
mov al,ah
out dx,al
inc dx
lods byte ptr [si]
out dx,al
dec dx ;back to index
inc ah
loop set_gfx ;continue thru list...
;
mov al,0Ah ;screen on, graphics
mov dx,03B8h
out dx,al ;turn screen on
;
; SETTEXT.ASM
; Turns off Herc graphics mode, and sets the Herc
; video adaptor to 80 x 25 monochrome text mode.
;
tparms db 61h,50h,52h,0Fh,19h,06h,19h,19h,02h,0Dh,0Bh,0Ch
;
mov dx,03BFh ;enabling port
mov al,0
out dx,al ;disable graphics mode
mov al,20h ;text mode, screen off
mov dx,03B8h
out dx,al ;disable graphics, display off
mov dx,03B4h ;index port on the 6845
mov cx,12 ;count of parameters
xor ah,ah
lea si,tparms
cld
set_text:
mov al,ah
out dx,al
inc dx
lods byte ptr [si] ;get a byte
out dx,al
dec dx ;back to index
inc ah
loop set_text ;continue thru list...
;
mov al,028h ;screen on, text
mov dx,03B8h
out dx,al ;turn screen on
How come I have never seen anything like that in any references. Are you
thinking about the HGC+? (Though I think even it has 64KB memory)
>
>;
>; SETTEXT.ASM
>; Turns off Herc graphics mode, and sets the Herc
>; video adaptor to 80 x 25 monochrome text mode.
That can be done also with BIOS: MOV AX,7, INT 10H. The HGC Text mode is
identical to MDA text mode.
Osmo
>
>One correspondent in these precincts suggested 'tweaking' the
>video card's registers. While that's generally a viable option
>with CGA/EGA/VGA video adaptors, the Herc card is not amenable
>to such manipulations.
This is not true, as you can see if you study the code for setting up
either text mode or graphics mode as originally documented by Hercules
in their manual. This involved setting a dozen or so indexed registers
which can be accessed through port 03B4h (index) and 03B5h (data) to
program the 6845 CRT controller.
>
>There =is=, however, one undocumented 'tweak' that can be made
>to Herc-clone monochrome cards that produces an interesting
>(though not presently useful) effect.
>
Bogus. There is nothing undocumented about your tweak.
>To my knowledge, there's been no research done on this. But
>if you could perfect it, you might be able to achieve a text-
>mode display of more than 25 lines without having to resort
>to graphics mode.
>
I don't see how you think you can claim that no research was done on
this. The main reason why reprogramming the CRT controller e.g to get
more lines in text mode was not done was simply because hercules
monitors were usually not multisync displays and they would consequently
lose synchronization if such a reprogramming were attempted.
>Here's the 'tweak' (and be prepared to reboot after you're
>finished playing with it):
>
> mov dx,03B4h
> mov ax,0308h
> out dx,al
> mov al,ah
> inc dx
> out dx,al
>
>Have fun! :)
>
All this does is setting the display to an interlaced mode. In
principle, however, it should be possible to get more than 25 lines in
text mode. For details on how to do this, and for a piece of sample code
which sets up the registers for textmode, see:
http://www.cubic.org/source/archive/hardware/video/misc/hgc.htm
By playing around a little bit with the table of register values in this
piece of sample code, you should be able to achieve what you are looking
for, provided your monitor can handle the signals.
Haye van den Oever
On 2000-12-10 ronk...@cc.helsinki.fi (Osmo Ronkanen) said:
>How come I have never seen anything like that in any references.
>Are you thinking about the HGC+?
Uff! You are correct, my Finnish friend; the Herc monographics card
has =two= pages of graphics memory.
>That can be done also with BIOS: MOV AX,7, INT 10H. The HGC Text
>mode is identical to MDA text mode.
That's true, although doing so from Herc graphics mode leaves the
6845's index registers somewhat askew.
As you know, there's no BIOS support for the HGC. The 'official,'
'approved,' 'mainstream,' 'by-the-book' method of returning to text
mode from Herc graphics mode is to reset the registers, as shown
in the code that was previously posted.
But hey...never let it be said that we renegade programmers ever
followed that broad, corporate road -- the way of which ultimately
leads to The Blue Screen Of Death.
Or, in the case of a Hercules video system, The Black Screen Of
Death. :)
No, that's nonsense. The display resolution is 720x348 in graphics mode,
which means that each graphics page needs 720*348 = 250560 bits = 31320
bytes, which is about 30.59 kB. Accordingly, you can get only 2 pages in
a single 64 kB segment. The first page (page 0) starts at B000:0000 and
the second page (page 1) starts at B800:0000.
And, for your information, 100% compatible HGC clones certainly did
exist. Also, many later VGA chipsets, such as the Tseng ET4000, had a
perfect Hercules emulation in hardware which passed all compatibility
tests.
Most modern VGA cards no longer have Hercules emulation implemented in
hardware, but interestingly it is still possible to program any VGA
which is register-level compatible with the original IBM EGA (or VGA) to
emulate the Hercules 4-banked memory addressing scheme. This makes it
possible to modify Hercules-only graphics programs in such a way that
they can run on a VGA. If you want information on how to do this, get
this file:
<http://www.umich.edu/~archive/msdos/un_indexed/egaherc.arc>
Haye van den Oever
Is that your page? The information there about data being valid only in
Europe because most monitors synchronize using AC frequency could be
more wrong. Hercules is 50 Hz all over the world. So is MDA. CGA and IIRC
EGA are 60Hz while VGA is 60 with graphics and 70 with text.
To my knowledge no monitor or TV has ever used AC frequency to sync.
TVs use same frequency to avoid interference caused by the AC. This creates
incompatibility between TV recordings in different countries. A company
whose name begins with the word "International" would not have created
such incompatibility on its computers and their programs.
Also there were some other strange things like calling MDA a graphic
card.
Osmo
I have been very happy with the HGC HALF mode, one video page occupying 32k
RAM between 0b0000h and 0b7ffffh. It works without error in the same
machine as a VGA/SVGA and allows very easy manipulation of an 8x8 font
(which can be derived from the VGA ROM incidentally ... very handy). And,
its native capabilities yield a 8x8 font resolution of 90x43. More than
adequate for most applications.
The only difficulties I see for a new programmer using this mode is the
weird way memory is accessed. It's not the straight-forward pixel by pixel
method from bottom to top of memory you might think. It uses this formula
(assuming that X and Y are both pixel locations on screen):
2000H * (Y MOD 4) + 90 * (INTEGER (Y / 4)) + (INTEGER (X / 8))
And to obtain the bit mask for the pixel within the byte at that location:
7 - (X MOD 8)
But, it works beautifully, albeit a little slower than VGA/SVGA. And, you
lose the ability to have multi-colored text (if your mono card in text mode
has that capability). Everything is either green/white/amber or black.
But, the text is so crisp! It's vibrant! I use a green mono monitor that
has a time from full pixel illumination to darkness somewhere in the 3
second range, so I don't see any flicker at all. It's very nice. :) Highly
recommended.
- Rick C. Hodgin
Note that you may also use other fonts. On VGA you can get pointers to
fonts with int 10h, AX=1130h, BH=Font number. For example 2: 8x14, 3: 8x8
and 6: 8x16. Numbers from 8 on may produce card specific fonts like 8 is
8x11 font on Trident 8900. (That font can be used also as 8x12 which
makes HGC use easier.) The pointer is returned in ES:BP. The size of
the font is not returned, one has to know if guess it. On HGC an 8x12
font gives 90x29 display
Osmo
>>http://www.cubic.org/source/archive/hardware/video/misc/hgc.htm
>
>Is that your page? The information there about data being valid only in
>Europe because most monitors synchronize using AC frequency could be
>more wrong. Hercules is 50 Hz all over the world. So is MDA. CGA and IIRC
>EGA are 60Hz while VGA is 60 with graphics and 70 with text.
God no, Osmo, this is *not* my page, but I gave the reference because it
was the only page I could quickly find which contains an overview of the
6845 CRT registers, their functions, and their default values for the
Hercules card. The writer doesn't appear to be particularly knowledgable
or intelligent judging from his factual blunders and poor English
spelling, but I thought that as long as he at least faithfully copies
his sources this was better than nothing.
But if you know of a better page with details for programming the
Hercules card including a description of the 6845 registers and some
sample code, I would be interested in the URL.
>
>To my knowledge no monitor or TV has ever used AC frequency to sync.
>TVs use same frequency to avoid interference caused by the AC. This creates
>incompatibility between TV recordings in different countries. A company
>whose name begins with the word "International" would not have created
>such incompatibility on its computers and their programs.
>
Of course. The fact that the writer of the above mentioned page didn't
realize that the fact that American software for the Hercules Graphics
Card ran without problems on European PCs implies that his opinion has
to be wrong reveals a poor understanding of his subject.
>Also there were some other strange things like calling MDA a graphic
>card.
Yes. No historical sense either.
Haye van den Oever