www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/12/20/04:40:53

From: sam AT greenaum DOT demonARSE!ARSE!ARSE!.co.uk (Sam.)
Newsgroups: comp.os.msdos.djgpp
Subject: Re: beginner mode13 question
Date: Sun, 20 Dec 1998 09:35:05 GMT
Organization: Rossum's Universal Robots
Message-ID: <369dc4bb.16232852@158.152.254.70>
References: <dMOe2.122$14 DOT 362 AT newsr2 DOT u-net DOT net>
NNTP-Posting-Host: greenaum.demon.co.uk
X-NNTP-Posting-Host: greenaum.demon.co.uk:194.222.71.189
X-Trace: news.demon.co.uk 914146556 nnrp-06:27685 NO-IDENT greenaum.demon.co.uk:194.222.71.189
X-Complaints-To: abuse AT demon DOT net
X-Newsreader: Forte Agent 1.5/32.452
X-No-Archive: yes
MIME-Version: 1.0
Lines: 62
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

I haven't even dared try to understand memory in DJGPP. It's something
you don't really need to know, but basically you can't count on the
memory addresses you give your pointers being in any way related to
the actual addresses in the machine. Fortunately this doesn't matter,
you can just use the memory you get allocated.

For my mode 13 stuff, I have an array 

char screenbuf[64000] which is my buffer

I just use this to plot into, as you'd expect, then when I want to,
copy the whole thing to the screen with movedata, which can interface
DJGPP memory to real-mode memory. 


void update_screen()
  {
  movedata(_my_ds(), (int)screenbuf, _dos_ds, 0xa0000, (size_t)64000);
  }

Also wait_vbl() waits for the vertical blank interval, which is a good
time to blit the screen without getting flickering

void wait_vbl()
  {
  while(inportb(PORT_VTRACE) & 0x08);
  while(!(inportb(PORT_VTRACE) & 0x08));
  }

I just go

wait_vbl();
update_screen();

It's also handy because it provides a central point in the flow of the
program for everything to sync to. The scheme probably isn't the
absolute fastest, but it's easy to get to grips with, and it keeps
everything protected.

Also, if you need a set of character set bitmaps you can copy the ROM
BIOS character set into an array and use that. 

char rom_char_buf[2048] 

I load the character set at the beginning of the program with
dosmemget

void setup_char_table()
  {
  dosmemget(0xFFA6E, 2048, rom_char_buf);
  }

The bitmaps for each character is stored as 8 bytes per character, 1
byte per row, work out your own way of using it. There are a few more
functions for copying between real and protected memory, look in the
info files.

------------------------------------------------------------------------

The person who said he was a crap presenter knows nothing because compared
to the outwardly camp stuart miles, speech impediment Katy Hill and nothing
upstairs Konnie Huq, he was a true professional. Heh heh heh.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019