TL;DR:
Available Hardware + Capabilities + Compatibility + User Expectation
Text mode cursor on PC Hardware allows only a full character cell width cursor that may cover any amount of a character cell height (e.g. anything between a single line and a full block). As that is what the used chip (6845) provided. For anything else a graphics based display and (usually) a GUI is needed.
Further, in an 8 pixel wide charset there is not enough space to add a vertical cursor without degrading readability (*1). It wasn't like with today's high res displays giving 20+ pixels or more per character.
Next, having underline (or block) cursor was the common way since the very first terminal screens. Any user would expect them that way. So why should any chip developer (*2) invest in building a chip to provide a feature not asked for or any computer developer build an additional circuitry to add such- especially for a middle-of-the-road development like the IBM PC?
It wasn't until the GUI invented a new view onto text that a vertical cursor did make sense (*3). Still, any GUI offering a DOS compatible/alike interface (window) will of curse try hard to emulate DOS behaviour as close as possible to provide the expected DOS experience - including the underline cursor.
while modern user interfaces often have vertical cursors.
Keyword here is "modern". To my understanding the vertical caret type cursor came only to be with bitmap based video. The basic PC (and DOS) is not of that kind. DOS and all basic DOS applications are character mode.
PC has horizontal cursor of two (or 3) scanlines by default, and block cursor for special cases (such as INSERT mode).
Here "default" is again the keyword. To be as portable as possible DOS tries to expect as little as possible from its underlying hardware. In fact, it does not even assume a cursor to exist. Only by using additional drivers (like ANSI.SYS) cursor handling became a feature for DOS - at least clean ones, not accessing ROM-BIOS or Hardware directly.
Most DOS applications kept it that way, just adding the full cursor shape for insert mode. Anything inbetween wouldn't make much sense, or would it? (*4)
In addition the ability of some applications to change the shape shows that the cursor is software defined. In fact, already the very next BIOS function implemented, right after setting a video mode (Int 10h Function 00h), is setting the text mode cursors attributes: INT 10h Function 01h : Set Text-Mode Cursor Shape. It essentially sets the 6845's registers 10 and 11 directly:
Int 10h
AH = 01h
CH = Mode and Start Line
Bit 7,6 Cursor Mode
00 = Steady
01 = No Cursor
10 = Fast (flip every 16 frames)
11 = Slow (Flip every 32 frames ~= once per second)
Bit 5..1 Top Scan Line of Cursor
CL = End Scan Line
Bit 5..1 Bottom Scan Line of Cursor
I know this is a feature of video chip, but since it is custom functionality anyways, what would be the reason to choose horizontal vs vertical for this functionality?
First of all, the 6845 does not allow a vertical cursor. While a cursor may cover any number of lines within a character cell, it will always cover the full width. It can be made static or blinking in two speeds (every 16 or 32 frames).
Second, noone was using, even less expecting a vertical cursor on text mode display.
Third, it would have incurred additional hardware cost as providing one would need hardware external to the 6845 controller. For example by
- programming the cursor to be a full block
- but invisible and
- using the raising
CURSOR
output (pin 19) to
- set a FF, which
- inverts the signal (or simply setting it to full), to be
- reset after one pixel clock.
That means spending (at least) 2-3 TTL chips for a function noone hast asked for in the first place
Which leaves two implied questions
[addition#1] Why underline instead of a block cursor
An underline cursor is way less intrusive to reading (and writing) than a block one filling the full character cell. After all, the most common user is not the programmer, constantly searching where he left the cursor last time, but a secretary writing some letter or an accountant filling in order lists. A cursor should thus be notable but not stopping the flow.
It's the very same reason why many professional systems made it static, not blinking at all, making it even less intrusive.
[addition#2] But why do home computers usually have only a single block cursor?
Because it's the most simple way?
In very basic designs, like the Apple II's video or Commodore's VIC (VC20/C64/...) there is no hardware cursor at all, but is done by software constantly replacing the character at the cursors position by it's inverse counterpart and back (commodore) or a blinking version thereof (Apple).
*1 - This is especially harmful due the rather vertical nature of Latin script. Adding horizontal lines to Latin glyphs degrade readability less than adding vertical. We tend to interpret and ignore them when reading similar to lines text is written on.
*2 - The 6845 is a chip Motorola developed to simplify the design of a terminal. When introduced in 1975 it was a marvel, incorporating the equivalent of a dozend TTL into a single 40 pin chip, about the same complexity as a CPU. It revolutionized the way terminals were build due it's flexibility. It took the world by storm and by 1980 next to all terminals and many computers (maybe except pure game systems) used a 6845 or one of it's second source or compatible designs like Commodore's 6545.
When a company invests a considerable amount of money in development and production of a high end chip unlike any other, one can be sure they as well did a thruout market research what features customer would want and put them in - if possible.
Since we can agree that a vertical cursor isn't as hard on chip level, it's safe to assume that none of the potential customers they asked, and none of the terminals they looked at, needed that feature.
*2 - Fixed character cell displays are something rather forgotten. Today using a fixed font is a design decision, something handy for working in columns, like with programming, but already spreadsheets use proportional fonts within their cells. But proportional fonts are something that only arrived in common use with graphical interfaces (GUI) around 1980 (Xerox Star Software) for early adopters and during the mid 1990s for PC users at whole .
In fact, it was the proportional font that made the character cell based cursor impractical and rather odd looking as there were no character cells any more - so the cursor would not only have to change in width all the time, but also, what size should it have at the end of a line, when there was no character to go with?
The invention of the vertical cursor is not only made possible by use of GUI, but also was a direct follow up to this development.
*3 - I do remember at least one application using a half height cursor, stretching from the middle line to base line in search mode. This allowed to search for some text without loosing the writing position. Rather handy in the before-mouse-era (and still faster today:)). The same may as well have been used for marking, but it's really a long time ago.