Commit 040d9993 authored by Scott Duensing's avatar Scott Duensing

Can now draw to surfaces other than the display.

parent daea38b7
......@@ -27,8 +27,8 @@ void jlDisplayPresent(void) {
}
void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
(void)sta;
void jlDrawBlit8x8(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
(void)source;
(void)cx1;
(void)cy1;
(void)cx2;
......@@ -36,8 +36,8 @@ void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2)
}
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
(void)sta;
void jlDrawBlit8x8a(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
(void)source;
(void)cx1;
(void)cy1;
(void)cx2;
......@@ -45,14 +45,14 @@ void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2,
}
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta) {
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source) {
(void)startX;
(void)startY;
(void)width;
(void)height;
(void)mapData;
(void)stride;
(void)sta;
(void)source;
}
......@@ -60,7 +60,7 @@ void jlDrawClear(void) {
}
byte jlDrawGetPixel(jint16 x, jint16 y) {
byte jlDrawPixelGet(jint16 x, jint16 y) {
(void)x;
(void)y;
......@@ -68,12 +68,25 @@ byte jlDrawGetPixel(jint16 x, jint16 y) {
}
void jlDrawPoint(jint16 x, jint16 y) {
void jlDrawPixelSet(jint16 x, jint16 y) {
(void)x;
(void)y;
}
jlSurfaceT jlDrawSurfaceGet(void) {
return _jlDrawTarget;
}
void jlDrawSurfaceSet(jlSurfaceT target) {
_jlDrawTarget = target;
if (target == NULL) {
_jlDrawTargetActual = NULL;
}
}
jint16 jlGameGetAxis(byte which) {
(void)which;
......
......@@ -27,8 +27,8 @@ void jlDisplayPresent(void) {
}
void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
(void)sta;
void jlDrawBlit8x8(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
(void)source;
(void)cx1;
(void)cy1;
(void)cx2;
......@@ -36,8 +36,8 @@ void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2)
}
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
(void)sta;
void jlDrawBlit8x8a(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
(void)source;
(void)cx1;
(void)cy1;
(void)cx2;
......@@ -45,14 +45,14 @@ void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2,
}
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta) {
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source) {
(void)startX;
(void)startY;
(void)width;
(void)height;
(void)mapData;
(void)stride;
(void)sta;
(void)source;
}
......@@ -60,7 +60,7 @@ void jlDrawClear(void) {
}
byte jlDrawGetPixel(jint16 x, jint16 y) {
byte jlDrawPixelGet(jint16 x, jint16 y) {
(void)x;
(void)y;
......@@ -68,12 +68,25 @@ byte jlDrawGetPixel(jint16 x, jint16 y) {
}
void jlDrawPoint(jint16 x, jint16 y) {
void jlDrawPixelSet(jint16 x, jint16 y) {
(void)x;
(void)y;
}
jlSurfaceT jlDrawSurfaceGet(void) {
return _jlDrawTarget;
}
void jlDrawSurfaceSet(jlSurfaceT target) {
_jlDrawTarget = target;
if (target == NULL) {
_jlDrawTargetActual = NULL;
}
}
jint16 jlGameGetAxis(byte which) {
(void)which;
......
......@@ -107,7 +107,20 @@ void jlDisplayPresent(void) {
void jlDrawClear(void) {
memset(SHRPIXELS, _jlDrawColorNibbles, 32000);
memset(_jlDrawTargetActual, _jlDrawColorNibbles, 32000);
}
jlSurfaceT jlDrawSurfaceGet(void) {
return _jlDrawTarget;
}
void jlDrawSurfaceSet(jlSurfaceT target) {
_jlDrawTarget = target;
if (target == NULL) {
_jlDrawTargetActual = (jlSurfaceT)0x012000L;
}
}
......@@ -288,7 +301,7 @@ bool jlUtilMustExit(void) {
void jlUtilShutdown(void) {
// Clear the display.
jlDrawColor(0);
jlDrawColorSet(0);
jlDrawClear();
// Restore Border
......@@ -346,9 +359,10 @@ void jlUtilStartup(char *appTitle) {
jlPaletteDefault();
// Clear the display.
jlDrawColor(0);
jlDrawSurfaceSet(JOEY_DISPLAY);
jlDrawColorSet(0);
jlDrawClear();
jlDrawColor(15);
jlDrawColorSet(15);
jlDisplayPresent();
}
......@@ -154,11 +154,13 @@ void jlDisplayPresent(void) {
}
void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
int o1;
int o2;
int x;
int y;
void jlDrawBlit8x8(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
int o1;
int o2;
int x;
int y;
jlPixelPairT *pixels = (jlPixelPairT *)source;
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
// We mask off unused bits in the source tile location so they can be used to hold other data.
o1 = ((cy1 & 0x1f) * 8 * 160) + ((cx1 & 0x3f) * 4);
......@@ -166,7 +168,7 @@ void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2)
for (y=0; y<8; y++) {
for (x=0; x<4; x++) {
_jlBackingStore->pixels[o2++] = sta->pixels[o1++];
target[o2++] = pixels[o1++];
}
o1 += 156;
o2 += 156;
......@@ -174,15 +176,17 @@ void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2)
}
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
int mo; // Mask offset
int so; // Source Pixel Offset
int to; // Target Pixel Offset
int x;
int y;
jlPixelPairT m; // Mask
jlPixelPairT s; // Source Pixel
jlPixelPairT t; // Target Pixel
void jlDrawBlit8x8a(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
int mo; // Mask offset
int so; // Source Pixel Offset
int to; // Target Pixel Offset
int x;
int y;
jlPixelPairT m; // Mask
jlPixelPairT s; // Source Pixel
jlPixelPairT t; // Target Pixel
jlPixelPairT *pixels = (jlPixelPairT *)source;
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
// We mask off unused bits in the source tile location so they can be used to hold other data.
mo = ((cy1 & 0x1f) * 8 * 160) + (((cx1 & 0x3f) + offset) * 4);
......@@ -191,12 +195,12 @@ void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2,
for (y=0; y<8; y++) {
for (x=0; x<4; x++) {
m = sta->pixels[mo++];
s = sta->pixels[so++];
t = _jlBackingStore->pixels[to];
m = pixels[mo++];
s = pixels[so++];
t = target[to];
t.r = (t.r & m.r) | s.r;
t.l = (t.l & m.l) | s.l;
_jlBackingStore->pixels[to++] = t;
target[to++] = t;
}
mo += 156;
so += 156;
......@@ -205,7 +209,7 @@ void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2,
}
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta) {
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source) {
// startX = start tile for drawing
// startY = start tile for drawing
// width = tiles to draw horizontally
......@@ -223,7 +227,7 @@ void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, by
for (x=startX; x<width; x++) {
tileX = mapData[offset++];
tileY = mapData[offset++];
jlDrawBlit8x8(sta, tileX, tileY, x, y);
jlDrawBlit8x8(source, tileX, tileY, x, y);
}
offset += stride;
}
......@@ -231,18 +235,21 @@ void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, by
void jlDrawClear(void) {
memset(_jlBackingStore->pixels, _jlDrawColorNibbles, 32000);
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
memset(target, _jlDrawColorNibbles, 32000);
}
byte jlDrawGetPixel(jint16 x, jint16 y) {
byte jlDrawPixelGet(jint16 x, jint16 y) {
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
int p = x / 2 + y * 160;
return (jlUtilIsOdd(x) ? _jlBackingStore->pixels[p].l : _jlBackingStore->pixels[p].r);
return (jlUtilIsOdd(x) ? target[p].l : target[p].r);
}
void jlDrawPoint(jint16 x, jint16 y) {
jlPixelPairT *pixelPair = _jlBackingStore->pixels + (y * 160) + (x / 2);
void jlDrawPixelSet(jint16 x, jint16 y) {
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
jlPixelPairT *pixelPair = target + (y * 160) + (x / 2);
if (jlUtilIsOdd(x)) {
pixelPair->l = _jlDrawColor;
} else {
......@@ -251,6 +258,19 @@ void jlDrawPoint(jint16 x, jint16 y) {
}
jlSurfaceT jlDrawSurfaceGet(void) {
return _jlDrawTarget;
}
void jlDrawSurfaceSet(jlSurfaceT target) {
_jlDrawTarget = target;
if (target == NULL) {
_jlDrawTargetActual = (jlSurfaceT)_jlBackingStore->pixels;
}
}
jint16 jlGameGetAxis(byte which) {
SDL_GameControllerAxis axis;
short int unscaled;
......@@ -600,9 +620,10 @@ void jlUtilStartup(char *appTitle) {
// Create backing store
jlStaCreate(_jlBackingStore);
jlPaletteDefault();
jlDrawColor(0);
jlDrawSurfaceSet(JOEY_DISPLAY);
jlDrawColorSet(0);
jlDrawClear();
jlDrawColor(15);
jlDrawColorSet(15);
jlDisplayPresent();
// Start 1/10th second timer
......
......@@ -27,8 +27,8 @@ void jlDisplayPresent(void) {
}
void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
(void)sta;
void jlDrawBlit8x8(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2) {
(void)source;
(void)cx1;
(void)cy1;
(void)cx2;
......@@ -36,8 +36,8 @@ void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2)
}
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
(void)sta;
void jlDrawBlit8x8a(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
(void)source;
(void)cx1;
(void)cy1;
(void)cx2;
......@@ -45,14 +45,14 @@ void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2,
}
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta) {
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source) {
(void)startX;
(void)startY;
(void)width;
(void)height;
(void)mapData;
(void)stride;
(void)sta;
(void)source;
}
......@@ -60,7 +60,7 @@ void jlDrawClear(void) {
}
byte jlDrawGetPixel(jint16 x, jint16 y) {
byte jlDrawPixelGet(jint16 x, jint16 y) {
(void)x;
(void)y;
......@@ -68,12 +68,25 @@ byte jlDrawGetPixel(jint16 x, jint16 y) {
}
void jlDrawPoint(jint16 x, jint16 y) {
void jlDrawPixelSet(jint16 x, jint16 y) {
(void)x;
(void)y;
}
jlSurfaceT jlDrawSurfaceGet(void) {
return _jlDrawTarget;
}
void jlDrawSurfaceSet(jlSurfaceT target) {
_jlDrawTarget = target;
if (target == NULL) {
_jlDrawTargetActual = NULL;
}
}
jint16 jlGameGetAxis(byte which) {
(void)which;
......
......@@ -61,10 +61,12 @@ typedef struct {
} _jlScanDataT;
byte _jlDrawColor = 15; // Color in lower nibble only
byte _jlDrawColorNibbles = (15 << 4) + 15; // Color in both nibbles
byte _jlBorderColor = 0;
char _jlTempString[1024]; // Used internally for pathname operations
jlSurfaceT _jlDrawTarget = JOEY_DISPLAY;
jlSurfaceT _jlDrawTargetActual = NULL;
byte _jlDrawColor = 15; // Color in lower nibble only
byte _jlDrawColorNibbles = (15 << 4) + 15; // Color in both nibbles
byte _jlBorderColor = 0;
char _jlTempString[1024]; // Used internally for pathname operations
static jlColorT _jlDefaultPalette[16];
......@@ -81,6 +83,8 @@ _jlScanDataT *_jlDrawFillNewSegment(jint16 startX, jint16 endX, jint16 y, signed
#ifdef JOEY_DEBUG
//***TODO*** These are really terrible examples of memory management routines.
static jlMemoryBlockT _jlMemoryBlocks[JOEY_MEM_BLOCKS];
static long _jlTotalAllocated = 0;
static long _jlTotalAllocations = 0;
......@@ -198,14 +202,14 @@ void _jlDrawCircleClipped(jint16 x0, jint16 y0, jint16 radius) {
jint16 err = dx - (jint16)(radius << 1);
while (x >= y) {
if ((x0 + x < 320) && (y0 + y < 200)) jlDrawPoint(x0 + x, y0 + y);
if ((x0 + y < 320) && (y0 + x < 200)) jlDrawPoint(x0 + y, y0 + x);
if ((x0 - y < 320) && (y0 + x < 200)) jlDrawPoint(x0 - y, y0 + x);
if ((x0 - x < 320) && (y0 + y < 200)) jlDrawPoint(x0 - x, y0 + y);
if ((x0 - x < 320) && (y0 - y < 200)) jlDrawPoint(x0 - x, y0 - y);
if ((x0 - x < 320) && (y0 - x < 200)) jlDrawPoint(x0 - y, y0 - x);
if ((x0 + y < 320) && (y0 - x < 200)) jlDrawPoint(x0 + y, y0 - x);
if ((x0 + x < 320) && (y0 - y < 200)) jlDrawPoint(x0 + x, y0 - y);
if ((x0 + x < 320) && (y0 + y < 200)) jlDrawPixelSet(x0 + x, y0 + y);
if ((x0 + y < 320) && (y0 + x < 200)) jlDrawPixelSet(x0 + y, y0 + x);
if ((x0 - y < 320) && (y0 + x < 200)) jlDrawPixelSet(x0 - y, y0 + x);
if ((x0 - x < 320) && (y0 + y < 200)) jlDrawPixelSet(x0 - x, y0 + y);
if ((x0 - x < 320) && (y0 - y < 200)) jlDrawPixelSet(x0 - x, y0 - y);
if ((x0 - x < 320) && (y0 - x < 200)) jlDrawPixelSet(x0 - y, y0 - x);
if ((x0 + y < 320) && (y0 - x < 200)) jlDrawPixelSet(x0 + y, y0 - x);
if ((x0 + x < 320) && (y0 - y < 200)) jlDrawPixelSet(x0 + x, y0 - y);
if (err <= 0) {
y++;
......@@ -237,14 +241,14 @@ void jlDrawCircle(jint16 x0, jint16 y0, jint16 radius) {
}
while (x >= y) {
jlDrawPoint(x0 + x, y0 + y);
jlDrawPoint(x0 + y, y0 + x);
jlDrawPoint(x0 - y, y0 + x);
jlDrawPoint(x0 - x, y0 + y);
jlDrawPoint(x0 - x, y0 - y);
jlDrawPoint(x0 - y, y0 - x);
jlDrawPoint(x0 + y, y0 - x);
jlDrawPoint(x0 + x, y0 - y);
jlDrawPixelSet(x0 + x, y0 + y);
jlDrawPixelSet(x0 + y, y0 + x);
jlDrawPixelSet(x0 - y, y0 + x);
jlDrawPixelSet(x0 - x, y0 + y);
jlDrawPixelSet(x0 - x, y0 - y);
jlDrawPixelSet(x0 - y, y0 - x);
jlDrawPixelSet(x0 + y, y0 - x);
jlDrawPixelSet(x0 + x, y0 - y);
if (err <= 0) {
y++;
......@@ -259,7 +263,12 @@ void jlDrawCircle(jint16 x0, jint16 y0, jint16 radius) {
}
void jlDrawColor(byte index) {
byte jlDrawColorGet(void) {
return _jlDrawColor;
}
void jlDrawColorSet(byte index) {
_jlDrawColor = index;
_jlDrawColorNibbles = (byte)((index << 4) + index);
}
......@@ -277,20 +286,20 @@ void jlDrawEllipse(jint16 x0, jint16 y0, jint16 x1, jint16 y1) {
a *= 8*a; b1 = 8*b*b;
do {
jlDrawPoint(x1, y0); /* I. Quadrant */
jlDrawPoint(x0, y0); /* II. Quadrant */
jlDrawPoint(x0, y1); /* III. Quadrant */
jlDrawPoint(x1, y1); /* IV. Quadrant */
jlDrawPixelSet(x1, y0); /* I. Quadrant */
jlDrawPixelSet(x0, y0); /* II. Quadrant */
jlDrawPixelSet(x0, y1); /* III. Quadrant */
jlDrawPixelSet(x1, y1); /* IV. Quadrant */
e2 = 2*err;
if (e2 <= dy) { y0++; y1--; err += dy += a; } /* y step */
if (e2 >= dx || 2*err > dy) { x0++; x1--; err += dx += b1; } /* x step */
} while (x0 <= x1);
while (y0-y1 < b) { /* too early stop of flat ellipses a=1 */
jlDrawPoint(x0-1, y0); /* -> finish tip of ellipse */
jlDrawPoint(x1+1, y0++);
jlDrawPoint(x0-1, y1);
jlDrawPoint(x1+1, y1--);
jlDrawPixelSet(x0-1, y0); /* -> finish tip of ellipse */
jlDrawPixelSet(x1+1, y0++);
jlDrawPixelSet(x0-1, y1);
jlDrawPixelSet(x1+1, y1--);
}
}
......@@ -314,8 +323,8 @@ void _jlDrawFillAddLine(jint16 startX, jint16 endX, jint16 y, jint16 ignoreStart
for (x=startX; x<endX; x++) {
if (how) {
// Unrolled contents to reduce comparison complexity.
if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawGetPixel(x, y) == _jlDrawFillColor)) {
jlDrawPoint(x, y);
if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawPixelGet(x, y) == _jlDrawFillColor)) {
jlDrawPixelSet(x, y);
if (regionStart < 0) regionStart = x;
} else if (regionStart >= 0) {
jlUtilStackPush(_jlFillStackTop, _jlDrawFillNewSegment(regionStart, x, y, dir, regionStart == startX, false));
......@@ -323,8 +332,8 @@ void _jlDrawFillAddLine(jint16 startX, jint16 endX, jint16 y, jint16 ignoreStart
}
} else {
// Unrolled contents to reduce comparison complexity.
if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawGetPixel(x, y) != _jlDrawFillColor)) {
jlDrawPoint(x, y);
if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawPixelGet(x, y) != _jlDrawFillColor)) {
jlDrawPixelSet(x, y);
if (regionStart < 0) regionStart = x;
} else if (regionStart >= 0) {
jlUtilStackPush(_jlFillStackTop, _jlDrawFillNewSegment(regionStart, x, y, dir, regionStart == startX, false));
......@@ -350,7 +359,7 @@ void _jlDrawFill(jint16 x, jint16 y, bool how) {
// how == true; Fill on top of _jlDrawFillColor
// how == false; Fill on top of any color until we encounter _jlDrawFillColor
jlDrawPoint(x, y);
jlDrawPixelSet(x, y);
jlUtilStackPush(_jlFillStackTop, _jlDrawFillNewSegment(x, x+1, y, 0, true, true));
while ((r = jlUtilStackPop(_jlFillStackTop)) != NULL) {
......@@ -358,16 +367,16 @@ void _jlDrawFill(jint16 x, jint16 y, bool how) {
endX = r->EndX;
if (r->ScanLeft) {
if (how) {
while (startX > 0 && (jlDrawGetPixel(startX-1, r->Y) == _jlDrawFillColor)) jlDrawPoint(--startX, r->Y);
while (startX > 0 && (jlDrawPixelGet(startX-1, r->Y) == _jlDrawFillColor)) jlDrawPixelSet(--startX, r->Y);
} else {
while (startX > 0 && (jlDrawGetPixel(startX-1, r->Y) != _jlDrawFillColor)) jlDrawPoint(--startX, r->Y);
while (startX > 0 && (jlDrawPixelGet(startX-1, r->Y) != _jlDrawFillColor)) jlDrawPixelSet(--startX, r->Y);
}
}
if (r->ScanRight) {
if (how) {
while(endX < width && (jlDrawGetPixel(endX, r->Y) == _jlDrawFillColor)) jlDrawPoint(endX++, r->Y);
while(endX < width && (jlDrawPixelGet(endX, r->Y) == _jlDrawFillColor)) jlDrawPixelSet(endX++, r->Y);
} else {
while(endX < width && (jlDrawGetPixel(endX, r->Y) == _jlDrawFillColor)) jlDrawPoint(endX++, r->Y);
while(endX < width && (jlDrawPixelGet(endX, r->Y) == _jlDrawFillColor)) jlDrawPixelSet(endX++, r->Y);
}
}
r->StartX--;
......@@ -380,7 +389,7 @@ void _jlDrawFill(jint16 x, jint16 y, bool how) {
void jlDrawFill(jint16 x, jint16 y) {
_jlDrawFillColor = jlDrawGetPixel(x, y);
_jlDrawFillColor = jlDrawPixelGet(x, y);
_jlDrawFill(x, y, true);
}
......@@ -391,11 +400,6 @@ void jlDrawFillTo(jint16 x, jint16 y, byte color) {
}
byte jlDrawGetColor(void) {
return _jlDrawColor;
}
void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
jint16 x;
jint16 y;
......@@ -429,7 +433,7 @@ void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
balance = dy - dx;
dx <<= 1;
while (x != x2) {
jlDrawPoint(x, y);
jlDrawPixelSet(x, y);
if (balance >= 0) {
y += incY;
balance -= dx;
......@@ -437,13 +441,13 @@ void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
balance += dy;
x += incX;
}
jlDrawPoint(x, y);
jlDrawPixelSet(x, y);
} else {
dx <<= 1;
balance = dx - dy;
dy <<= 1;
while (y != y2) {
jlDrawPoint(x, y);
jlDrawPixelSet(x, y);
if (balance >= 0) {
x += incX;
balance -= dy;
......@@ -451,7 +455,7 @@ void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
balance += dx;
y += incY;
}
jlDrawPoint(x, y);
jlDrawPixelSet(x, y);
}
}
......@@ -684,7 +688,7 @@ void jlVecDisplay(jlVecT *vec, jint16 ox, jint16 oy) {
case COMMAND_COLOR:
x1 = vec->data[p++];
jlDrawColor((byte)x1);
jlDrawColorSet((byte)x1);
break;
case COMMAND_CLEAR:
......@@ -697,7 +701,7 @@ void jlVecDisplay(jlVecT *vec, jint16 ox, jint16 oy) {
x1 = ox + vec->data[p++];
x1 = x1 + (jint16)(vec->data[p++] << 8);
y1 = oy + vec->data[p++];
jlDrawPoint(x1, y1);
jlDrawPixelSet(x1, y1);
}
break;
......
......@@ -29,11 +29,23 @@
#include <limits.h>
#ifndef bool
typedef unsigned char bool;
#define true 1
#define false 0
#endif
typedef unsigned char byte;
#define JINT16_MIN -32768
#define JINT16_MAX 32767
#define JUINT16_MIN 0
#define JUINT16_MAX 65535
#define JOEY_DISPLAY (byte *)NULL
// Determine platform and settings
#ifdef __linux__
......@@ -115,19 +127,15 @@ typedef unsigned long juint32;
#endif
#ifndef bool
#define bool unsigned char
#define true 1
#define false 0
#endif
#define byte unsigned char
typedef byte *jlSurfaceT;
extern byte _jlDrawColor;
extern byte _jlDrawColorNibbles;
extern byte _jlBorderColor;
extern char _jlTempString[1024];
extern jlSurfaceT _jlDrawTarget;
extern jlSurfaceT _jlDrawTargetActual;
extern byte _jlDrawColor;
extern byte _jlDrawColorNibbles;
extern byte _jlBorderColor;
extern char _jlTempString[1024];
enum _jlBorderColorsE {
......@@ -150,7 +158,6 @@ enum _jlBorderColorsE {
};
typedef enum _jlBorderColorsE jlBorderColorsE;
typedef struct {
byte b : 4;
byte g : 4;
......@@ -218,26 +225,29 @@ void *_jlRealloc(void *pointer, size_t size);
#define jlByteSwap(twoBytes) ((juint16)((twoBytes) & 0xff) >> 8) | (juint16)((twoBytes) << 8)
#define jlStaSurfaceGet(sta) ((jlSurfaceT)sta->pixels)
void jlDisplayBorder(jlBorderColorsE color);
void jlDisplayPresent(void);
void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2);
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset);
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta);
void jlDrawBlit8x8(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2);
void jlDrawBlit8x8a(jlSurfaceT source, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset);
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source);
void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2);
void jlDrawBoxFilled(jint16 x1, jint16 y1, jint16 x2, jint16 y2);
void jlDrawCircle(jint16 x, jint16 y, jint16 radius);
void jlDrawClear(void);
void jlDrawColor(byte index);
byte jlDrawColorGet(void);
void jlDrawColorSet(byte index);
void jlDrawEllipse(jint16 x1, jint16 y1, jint16 x2, jint16 y2);
void jlDrawFill(jint16 x, jint16 y);
void jlDrawFillTo(jint16 x, jint16 y, byte color);
byte jlDrawGetColor(void);
byte jlDrawGetPixel(jint16 x, jint16 y);
void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2);
void jlDrawPoint(jint16 x, jint16 y);