Image Map Image Map
View RSS Feed

DOS / IBM PC Programming

This is the development journal of Neil C. Obremski for my ongoing efforts into the old world of coding for IBM PC's and compatibles running DOS.

  1. ASCII / BIOS Character Graphics

    Even back on the original IBM PC you could get read-only access to the glyph pixel data for the standard ASCII character set, extended ASCII, and control characters with codes less than 32 (0x20) [1].

    Each character glyph is 8 bytes where every byte represents a row and every bit represents a column. The horizontal bits start in the most significant bit, so the font pixel for column 0, row 0 is bit 7 in byte 0 which follows the style for monochrome graphics modes.

    The ...
    Tags: assembler, bios, cga, dos Add / Edit Tags
  2. DDA Texture Mapping [Part 1]

    I am learning and working on a quadrilateral DDA texture mapper for CGA that uses the 8x8 monochrome BIOS characters for texels, for use in an optimized version of Magenta's Maze. Reading Mats and Abrash's tutorials [1] have given me new insights and I have fought not to scrap my triangle/line routines just yet until I make this next step.

    Stepping is really the name of the game: adding the deltas found by linear interpolation. It has been difficult to integrate the term interpolate ...

    Updated April 17th, 2017 at 03:46 PM by neilobremski

  3. 2D Outline of 3D Shape

    The goal here is to draw lines around the outside of a 3D rendered shape. For my purposes, all 3D to 2D rendering is done via triangles. The reason triangles are so awesome for 3D is that every triangle is always co-planar (flat) and the three points can be rearranged in any order. The method I've created works on projected triangles only, those that have already been converted from 3D to 2D and thus have only two axes: X and Y.

    First I need to explain how the shapes are represented ...
  4. Drawing Pixel Perfect Triangles (Part 3: X86 Assembler)

    In this final, third part blog post I present to you finished 16-bit X86 assembler code for CGA mode 4 (320x200x4) written as a DEBUG script [1]. This will give you a 556 byte routine starting at address 1300h.

    a 1300
    ; ----------------------------------------------------------------------------
    ; TRIFILL (AH,AL) - (BH,BL) - (DH,DL), CH			:TRIFILL
    ;	[params]	[stepping]	[drawing]
    ;     / AH = X1		/ StepA		/ XBeg
    ; AX /_ AL = Y1

    Updated March 31st, 2017 at 08:55 AM by neilobremski

  5. Drawing Pixel Perfect Triangles (Part 2: Pseudo Code)

    In my previous post I explained the purpose and high level algorithm. This time I'm going to show you some almost-actual code written in a pseudo-C language. Let's get straight to it ...

    trifill(x1, y1, x2, y2, x3, y3, color) /* y coords must be sorted ascending */
    	YDistA = y2 - y1 + 1; /* slope of side A (1 to 2) */
    	if (x1 > x2) {
    		XDirA = -1;
    		XDistA = x1 - x2 + 1;
    	} else {
    		XDirA = 1;
    		XDistA = x2 - x1 + 1;

    Updated March 31st, 2017 at 08:55 AM by neilobremski

    Tags: bresenham Add / Edit Tags
Page 1 of 4 1234 LastLast