delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/03/01/05:01:47

From: David Rager <djrst14+NOSPAM4MEPLEASE AT pitt DOT edu>
Newsgroups: comp.os.msdos.djgpp
Subject: Accessing the ROM char set
Date: Sun, 01 Mar 1998 04:30:08 -0500
Organization: University of Pittsburgh
Lines: 116
Message-ID: <34F92AA0.14EFEA1F@pitt.edu>
NNTP-Posting-Host: jbddup-a-1.rmt.net.pitt.edu
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I've been trying to teach myself how to do graphics in djgpp by writing
my own graphics library. I've been building up step by step, new
functions as I learn how they are implemented. Right now I want to blit
the characters in the ROM char set to the screen in mode 13h.

Here's what I'm trying to do:
(sample code from a book)

void blitChar (int xc, int yc, char c, int color, int transparentFlag) {

   int offset, x, y;
   char far * workChar;
   unsigned char bitmask = 0x80;

   workChar = romCharSet + c * CHAR_HEIGHT;
      // romCharSet is F000:FA6E
      // CHAR_HEIGHT is 8 pixels (8x8)

   offset = (yc << 8) + (yc << 6) + xc;

   for (y = 0; y < CHAR_HEIGHT; y++) {
      bitmask = 0x80;

      for (x = 0; x < CHAR_WIDTH; x++) {
         if (*workChar & bitmask) {
            videobuf [offset + x] = color;
               // videobuf is A000:0000
         }
         else if (!transparentFlag) {
             videobuf [offset + x] = 0;
         } // end if

         bitmask = (bitmask >> 1);
      } // end for

      offset += SCREEN_WIDTH;
      workChar ++;
   } // end for
} // end blitChar

****** This is what I need to do in DJGPP:

void blitChar (int xc, int yc, char c, int color, int transparentFlag) {

   int offset, x, y;
   unsigned char bitmask;
   unsigned char charoffset;
   unsigned char workChar;

   unsigned short video_ds  = __dpmi_segment_to_descriptor (0xa000);
      // this needs to be A000:0000. This works with no problems.
      // what is 0xa000? is it the same as 0xa0000000? or 0x0000a000?
      // Yes, I know 0xa0000000 is considerabley larger than 0x0000a000
      // (0x1 is 1, 0x10 is 16, 0x100 is 256, ok, trivial concept), but
      // why do i use 0xa000 here and 0xa0000 for nearptr functions?
      // what is this form of hex notation: xxxx : xxxx? how should I be

      // reading this? I thought I understood this till now.

   unsigned short romCharSet_ds = __dpmi_segment_to_descriptor ();
                                                                      //
what do i put here? ^

      // this is where I'm getting my troubles. I need to access
      // F000:FA6E
      // the video descriptor  above is throwing me off. I'm not really
      // following what's going on there.
      // I tried to use 0xf000fa6e (obvious choice, but this function
      // takes a 16 bit int), 0xfa6ef000, 0xf000,
      // 0xfa6e, 0xf000 + 0xfa6e, 0xf000 and add 0xfa6e to my
      // charoffset, 0xfa6e and add 0xf000 to my charoffset,
      // and quite a few others.


   charoffset = c * CHAR_HEIGHT;
   offset = (yc << 8) + (yc << 6) + xc;

   for (y = 0; y < CHAR_HEIGHT; y++) {
      bitmask = 0x80;
      workChar = _farpeekb (romCharSet_ds, charoffset);
         // I get some really strange stuff from here.

      for (x = 0; x < CHAR_WIDTH; x++) {

         if (workChar & bitmask) {
            _farpokeb (video_ds, offset + x, color);
         }
         else if (!transparentFlag) {
            _farpokeb (video_ds, offset + x, 0);
         } // end if

         bitmask = (bitmask >> 1);
      } // end for

      offset += SCREEN_WIDTH;
      charoffset++;
   } // end for

} // end blitChar

What am I doing wrong/what should I be doing? Yes, I read through the
FAQ. Unfortunately, it is a FAQ and not a tutorial.
It seems to be geared toward people who already know what they are
doing. So most of the questions I have are not addressed in it (probably

trivial to others). You won't go over my head. I just need steered in
the right direction.

Please post any responses here and e-mail me if possible at
djrst14+@pitt.edu

Thanx.
Dave.



- Raw text -


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