X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fmodex16.h;h=f85eb055a2de9b60b47e8d9a0c7faecc4248a4ce;hb=c1d3221afb5fe541d8c886ff66198329c153e48e;hp=44df9810cc00e2942eb992364cda52eda9a21feb;hpb=490586ef0c0a9e48017dc869f38a87d65691697c;p=16.git diff --git a/src/lib/modex16.h b/src/lib/modex16.h index 44df9810..f85eb055 100755 --- a/src/lib/modex16.h +++ b/src/lib/modex16.h @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 + * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 * * This file is part of Project 16. * @@ -24,18 +24,43 @@ */ #ifndef MODEX16_H #define MODEX16_H -//#include -#include "src/lib/types.h" +#include "src/lib/16_head.h" #include "src/lib/bitmap.h" #include "src/lib/planar.h" -#include "src/lib/16_head.h" +#include "src/lib/modex16/16planar.h" #include "src/lib/16text.h" -#include "src/lib/modex16/320x240.h" -#include "src/lib/modex16/320x200.h" -#include "src/lib/modex16/256x192.h" -#include "src/lib/modex16/192x144_.h" -#include "src/lib/modex16/160x120.h" +#include "src/lib/modex16/16render.h" +// #include "src/lib/modex16/320x240.h" +// #include "src/lib/modex16/320x200.h" +// #include "src/lib/modex16/256x192.h" +// #include "src/lib/modex16/192x144_.h" +// #include "src/lib/modex16/160x120.h" + +#include +#include +#include +#include + +static struct pcxHeader { + byte id; + byte version; + byte encoding; + byte bpp; + word xmin; + word ymin; + word xmax; + word ymax; + word hres; + word vres; + byte pal16[48]; + byte res1; + word bpplane; + word palType; + word hScreenSize; + word vScreenSize; + byte padding[54]; +} head; //320x240 = 20x15 //192x144 = 12x9 @@ -46,8 +71,9 @@ /* -========================== Types & Macros ==========================- */ #define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2)) -#define PLANE(x) (1<< (x&3)) +#define PLANE(x) (1 << ((x) & 3)) #define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02) +#define PALSIZE 768 typedef union { @@ -56,13 +82,39 @@ typedef union byte blue; } rgb_t; +/* -======================= Constants & Vars ==========================- */ +extern byte far* VGA; /* The VGA Memory */ +#define SCREEN_SEG 0xa000 +#define VIDEO_INT 0x10 +#define SET_MODE 0x00 +#define VGA_256_COLOR_MODE 0x13 +#define TEXT_MODE 0x03 + +#define AC_INDEX 0x03c0 +#define SC_INDEX 0x03c4 +#define SC_DATA 0x03c5 +#define CRTC_INDEX 0x03d4 +#define CRTC_DATA 0x03d5 +#define GC_INDEX 0x03ce +#define MISC_OUTPUT 0x03c2 +#define HIGH_ADDRESS 0x0C +#define LOW_ADDRESS 0x0D +#define VRETRACE 0x08 +//#define INPUT_STATUS_1 0x03da defined in 16_head +#define DISPLAY_ENABLE 0x01 +#define MAP_MASK 0x02 +#define PAL_READ_REG 0x03C7 /* Color register, read address */ +#define PAL_WRITE_REG 0x03C8 /* Color register, write address */ +#define PAL_DATA_REG 0x03C9 /* Color register, data port */ +#define PAL_SIZE (256 * 3) + /* -============================ Functions =============================- */ /* mode switching, page, and plane functions */ -void VGAmodeX(sword vq, global_game_variables_t *gv); -void modexEnter(sword vq, global_game_variables_t *gv); -long vgaGetMode(); +void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv); +void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv); +byte vgaGetMode(); void modexLeave(); -void modexsetBaseXMode(page_t *page); +void modexsetBaseXMode(); page_t modexDefaultPage(page_t *p); page_t modexNextPage(page_t *p); page_t modexNextPageFlexibleSize(page_t *p, word x, word y); @@ -70,15 +122,7 @@ void modexShowPage(page_t *page); void modexPanPage(page_t *page, int dx, int dy); void modexSelectPlane(byte plane); void modexClearRegion(page_t *page, int x, int y, int w, int h, byte color); -void modexDrawPBufregion(page_t *page, int x, int y, int sx, int sy, int fx, int fy planar_buf_t *p, boolean sprite); -void DrawPBuf(page_t *page, int x, int y, planar_buf_t *p, boolean sprite); -void oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite); -//void CDrawBmp(byte far* vgamem, page_t* page, int x, int y, bitmap_t *bmp, byte sprite); -void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp); -void modexDrawBmpRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); -void modexDrawPlanarBuf(page_t *page, int x, int y, planar_buf_t *bmp); -void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp); -void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); +/* moved to src/lib/modex16/16render.c */ void modexCopyPageRegion(page_t *dest, page_t *src, word sx, word sy, word dx, word dy, word width, word height); /* Palette fade and flash effects */ @@ -102,43 +146,41 @@ void modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset); void modexPalUpdate1(byte *p); void modexPalUpdate0(byte *p); void modexPalOverscan(byte *p, word col); -void chkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z, word *i/*, word *offset*/); +void modexchkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z, word *i/*, word *offset*/); void modexputPixel(page_t *page, int x, int y, byte color); byte modexgetPixel(page_t *page, int x, int y); -void modexhlin(page_t *page, word xl, word xh, word y, word color); + +#if 0 // not needed anymore. maybe good for reference purposes though. +static inline void modexwritepixel(page_t *page, int x, int y, word addr, byte color) +{ + /* Each address accesses four neighboring pixels, so set + Write Plane Enable according to which pixel we want + to modify. The plane is determined by the two least + significant bits of the x-coordinate: */ + modexSelectPlane(PLANE(x)); + //outp(SC_INDEX, 0x02); + //outp(SC_DATA, 0x01 << (x & 3)); + + /* The offset of the pixel into the video segment is + offset = (width * y + x) / 4, and write the given + color to the plane we selected above. Heed the active + page start selection. */ + vga_state.vga_graphics_ram[addr] = color; +} +static inline byte modexreadPixel(page_t *page, int x, int y, word addr) +{ + /* Select the plane from which we must read the pixel color: */ + outpw(GC_INDEX, 0x04); + outpw(GC_INDEX+1, x & 3); + return vga_state.vga_graphics_ram[addr]; +} +#endif + void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str); void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str); -void pdump(page_t *pee); -void cls(page_t *page, byte color, byte *Where); -void modexWaitBorder(); +void modexpdump(page_t *pee); +void modexcls(page_t *page, byte color, byte *Where); +//void modexWaitBorder(); +void bios_cls(); -/* -======================= Constants & Vars ==========================- */ -extern byte far* VGA; /* The VGA Memory */ -//extern int old_mode; -#define SCREEN_SEG 0xa000 -#define VIDEO_INT 0x10 -#define SET_MODE 0x00 -#define VGA_256_COLOR_MODE 0x13 -#define TEXT_MODE 0x03 -//#define SCREEN_WIDTH 320 -//#define SCREEN_HEIGHT 240 -//#define PAGE_SIZE (word)(SCREEN_WIDTH/4 * SCREEN_HEIGHT) - -#define AC_INDEX 0x03c0 -#define SC_INDEX 0x03c4 -#define SC_DATA 0x03c5 -#define CRTC_INDEX 0x03d4 -#define CRTC_DATA 0x03d5 -#define GC_INDEX 0x03ce -#define MISC_OUTPUT 0x03c2 -#define HIGH_ADDRESS 0x0C -#define LOW_ADDRESS 0x0D -#define VRETRACE 0x08 -#define INPUT_STATUS_1 0x03da -#define DISPLAY_ENABLE 0x01 -#define MAP_MASK 0x02 -#define PAL_READ_REG 0x03C7 /* Color register, read address */ -#define PAL_WRITE_REG 0x03C8 /* Color register, write address */ -#define PAL_DATA_REG 0x03C9 /* Color register, data port */ -#define PAL_SIZE (256 * 3) #endif