VOGONS

Common searches


First post, by Peter Swinkels

User metadata
Rank Member
Rank
Member

I already posted this at vbforums, but perhaps I will have more luck here:

Quick Basic has the WIDTH statement which you can use to set the number of character columns and rows for a given screen mode. As to my question: I want to set the number of rows to 60 using the standard VGA graphics mode. Something you can do in Quick Basic as follows:

SCREEN 12
WIDTH , 60

However, I would like to know what the WIDTH statement is doing on a low level to set the number of rows. The closest piece of information I could find on the subject is:
http://helppc.netcore2k.net/interrupt/int-10-12

Do not read if you don't like attention seeking self-advertisements!

Did you read it anyway? Well, you can find all sorts of stuff I made using various programming languages over here:
https://github.com/peterswinkels

Reply 1 of 4, by ripsaw8080

User metadata
Rank DOSBox Author
Rank
DOSBox Author

It calls INT 10h/AX=1123h which sets the INT 43h vector to the address of the 8x8 character patterns in the video ROM (video BIOS uses INT 43h to draw characters in graphics mode), sets the BIOS character height at 40h:85h to 8, then sets the BIOS row count at 40h:84h to 59 (rows minus 1).

Reply 2 of 4, by Peter Swinkels

User metadata
Rank Member
Rank
Member

@ripsaw8080 - Got it! Thank you! Btw: is there any documentation for this function online?

Do not read if you don't like attention seeking self-advertisements!

Did you read it anyway? Well, you can find all sorts of stuff I made using various programming languages over here:
https://github.com/peterswinkels

Reply 3 of 4, by ripsaw8080

User metadata
Rank DOSBox Author
Rank
DOSBox Author

Same place you linked before, but for int-10-11 instead of int-10-12. There are multiple places where you can find the RBIL (Ralf Brown's Interrupt List) online. However, for the kind of detail I went into you can look at the DOSBox source code (int10.cpp) 😉

Reply 4 of 4, by Peter Swinkels

User metadata
Rank Member
Rank
Member

AL = 23 ROM 8x8 double dot character set
BL = row specifier (see AL=21)
DL = rows (when BL = 0)

Should I set BL to 0 and DL to 60 in my case? Oddly enough just calling int 0x10 with AX = 0x1123 and not setting the other registers worked...

Do not read if you don't like attention seeking self-advertisements!

Did you read it anyway? Well, you can find all sorts of stuff I made using various programming languages over here:
https://github.com/peterswinkels