OSDN Git Service

updated copyleft and need to test and fix newer version of open watcom
[proj16/16.git] / src / lib / 16_vl.h
index 3ce8d71..2390cf8 100755 (executable)
@@ -1,5 +1,5 @@
 /* Project 16 Source Code~\r
- * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ * Copyright (C) 2012-2022 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
  *\r
  * This file is part of Project 16.\r
  *\r
@@ -26,7 +26,7 @@
 #define MODEX16_H\r
 \r
 #include "src/lib/16_head.h"\r
-#include "src/lib/bitmap.h"\r
+#include "src/lib/16_tail.h"\r
 //#include "src/lib/planar.h"\r
 //#include "src/lib/modex16/16planar.h"\r
 #include "src/lib/16text.h"\r
 // #include "src/lib/modex16/192x144_.h"\r
 // #include "src/lib/modex16/160x120.h"\r
 \r
-#ifdef __WATCOMC__\r
-#include <hw/cpu/cpu.h>\r
-#include <hw/dos/dos.h>\r
-#include <hw/vga/vga.h>\r
-#include <hw/vga/vrl.h>\r
-#include <hw/vga/vrs.h>\r
-#endif\r
-\r
 //320x240 = 20x15\r
 //192x144 = 12x9\r
 \r
 #define TILEWHD        TILEWH*2\r
 #define QUADWH                 TILEWH/2\r
 \r
+//#define OLDBGPRESERVE\r
+\r
 /* -========================== Types & Macros ==========================- */\r
 #define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2))\r
 #define PLANE(x) (1 << ((x) & 3))\r
 #define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02)\r
-#define     PALSIZE            768\r
+\r
+// clips for rectangles not on 4s\r
+#define LRCLIPDEF \\r
+       static byte lclip[4] = {0x0f, 0x0e, 0x0c, 0x08}; \\r
+       static byte rclip[4] = {0x00, 0x01, 0x03, 0x07};\r
+\r
+#define VCLIPDEF \\r
+       static byte pclip[4] = {1,2,4,8};\r
 \r
 typedef union\r
 {\r
@@ -67,44 +68,125 @@ typedef union
 \r
 /* -======================= Constants & Vars ==========================- */\r
 extern byte far*  VGA;  /* The VGA Memory */\r
+extern byte far gamepal;\r
+extern byte far corepal;       //core palette used universally\r
 #define SCREEN_SEG             0xa000\r
 #define VIDEO_INT              0x10\r
 #define SET_MODE               0x00\r
 #define VGA_256_COLOR_MODE     0x13\r
 #define TEXT_MODE              0x03\r
 \r
-#define AC_INDEX               0x03c0\r
 #define SC_INDEX               0x03c4\r
+#define SC_RESET                       0\r
+#define SC_CLOCK                       1\r
+#define SC_MAPMASK                     2\r
+#define SC_CHARMAP                     3\r
+#define SC_MEMMODE                     4\r
+\r
+#define CRTC_INDEX                     0x3D4\r
+#define CRTC_H_TOTAL           0\r
+#define CRTC_H_DISPEND         1\r
+#define CRTC_H_BLANK           2\r
+#define CRTC_H_ENDBLANK                3\r
+#define CRTC_H_RETRACE         4\r
+#define CRTC_H_ENDRETRACE      5\r
+#define CRTC_V_TOTAL           6\r
+#define CRTC_OVERFLOW          7\r
+#define CRTC_ROWSCAN           8\r
+#define CRTC_MAXSCANLINE       9\r
+#define CRTC_CURSORSTART       10\r
+#define CRTC_CURSOREND         11\r
+#define CRTC_STARTHIGH         12\r
+#define CRTC_STARTLOW          13\r
+#define CRTC_CURSORHIGH                14\r
+#define CRTC_CURSORLOW         15\r
+#define CRTC_V_RETRACE         16\r
+#define CRTC_V_ENDRETRACE      17\r
+#define CRTC_V_DISPEND         18\r
+#define CRTC_OFFSET                    19\r
+#define CRTC_UNDERLINE         20\r
+#define CRTC_V_BLANK           21\r
+#define CRTC_V_ENDBLANK                22\r
+#define CRTC_MODE                      23\r
+#define CRTC_LINECOMPARE       24\r
+\r
+#define GC_INDEX               0x03ce\r
+#define GC_SETRESET                    0\r
+#define GC_ENABLESETRESET      1\r
+#define GC_COLORCOMPARE                2\r
+#define GC_DATAROTATE          3\r
+#define GC_READMAP                     4\r
+#define GC_MODE                                5\r
+#define GC_MISCELLANEOUS       6\r
+#define GC_COLORDONTCARE       7\r
+#define GC_BITMASK                     8\r
+\r
+#define AC_INDEX               0x03c0\r
 #define SC_DATA                        0x03c5\r
-#define CRTC_INDEX             0x03d4\r
 #define CRTC_DATA              0x03d5\r
-#define GC_INDEX               0x03ce\r
 #define MISC_OUTPUT            0x03c2\r
 #define HIGH_ADDRESS           0x0C\r
 #define LOW_ADDRESS            0x0D\r
 #define VRETRACE               0x08\r
-//#define INPUT_STATUS_1               0x03da  defined in 16_head\r
+//#define INPUT _STATUS_1                      defined in 16_head\r
+//#define STATUS_REGISTER_1    0x03da\r
+\r
+#define        STATUS_REGISTER_1    0x3da\r
+\r
+#define ATR_INDEX                      AC_INDEX\r
+#define ATR_OVERSCAN           17\r
 #define DISPLAY_ENABLE         0x01\r
-#define MAP_MASK               0x02\r
+//#define MAP_MASK             0x02\r
 #define PAL_READ_REG                   0x03C7   /* Color register, read address */\r
 #define PAL_WRITE_REG             0x03C8   /* Color register, write address */\r
 #define PAL_DATA_REG                   0x03C9   /* Color register, data port */\r
 #define PAL_SIZE                               (256 * 3)\r
 \r
+//===========================================================================\r
+\r
+#define SCREENSEG              0xa000\r
+\r
+//#define SCREENWIDTH          80                      // default screen width in bytes\r
+//#define MAXSCANLINES 240                     // size of ylookup table\r
+\r
+//#define CHARWIDTH            2\r
+//#define TILEWIDTH            4\r
+\r
+//===========================================================================\r
+\r
+//\r
+// VGA hardware routines\r
+//\r
+void   VGAWRITEMODE(byte x),\r
+       VGAMAPMASK(byte x),\r
+       VGAREADMAP(byte x),\r
+       VGABITMASK(byte x);\r
+\r
+#define VW_Hlin(x,z,y,c,q)     VL_Hlin(x,y,(z)-(x)+1,c,q)\r
+#define VW_Vlin(y,z,x,c,q)     VL_Vlin(x,y,(z)-(y)+1,c,q)\r
+#define PALPROGRAMSNEWPAGE gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0], &gvar);// modexFadeOn(4, &gvar.video.palette);\r
+\r
 /* -============================ Functions =============================- */\r
 /* mode switching, page, and plane functions */\r
-void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv);\r
-void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv);\r
-byte vgaGetMode();\r
-void modexLeave();\r
+void   VL_Startup (global_game_variables_t *gvar),\r
+       VL_Shutdown (global_game_variables_t *gvar),\r
+       VL_SetVGAPlaneMode (global_game_variables_t *gvar),\r
+       VL_ClearVideo (byte color),\r
+       VL_DePlaneVGA (),\r
+       VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv),\r
+       modexEnter(sword vq, boolean cmem, global_game_variables_t *gv);\r
+//void VL_vgaSetMode(byte mode);\r
+byte VL_vgaGetMode(void);\r
+extern void TL_VidInit(global_game_variables_t *gvar);\r
+void modexLeave(void);\r
 void modexsetBaseXMode();\r
-page_t modexDefaultPage(page_t *p);\r
+page_t modexDefaultPage(page_t *p, global_game_variables_t *gvar);\r
 page_t modexNextPage(page_t *p);\r
 page_t modexNextPageFlexibleSize(page_t *p, word x, word y);\r
 void modexCalcVmemRemain(video_t *video);\r
 void VL_Initofs(video_t *video);\r
-void modexHiganbanaPageSetup(video_t *video);\r
-//void modexShowPage(page_t *page);\r
+void modexHiganbanaPageSetup(global_game_variables_t *gvar);\r
+void modexShowPage(page_t *page);//for 0croll.exe\r
 void VL_ShowPage(page_t *page, boolean vsync, boolean sr);\r
 void modexPanPage(page_t *page, int dx, int dy);\r
 void modexSelectPlane(byte plane);\r
@@ -113,28 +195,40 @@ void modexClearRegion(page_t *page, int x, int y, int w, int h, byte color);
 void modexCopyPageRegion(page_t *dest, page_t *src, word sx, word sy, word dx, word dy, word width, word height);\r
 \r
 /* Palette fade and flash effects */\r
+void VL_FadeIn (int start, int end, byte far *palette, int steps, video_t *v);\r
 void modexFadeOn(word fade, byte *palette);\r
 void modexFadeOff(word fade, byte *palette);\r
 void modexFlashOn(word fade, byte *palette);\r
 void modexFlashOff(word fade, byte *palette);\r
 \r
 /* palette loading and saving */\r
+void VL_SetPalette (byte far *palette, video_t *v);\r
 void modexPalSave(byte *palette);\r
-byte *modexNewPal();\r
-void modexLoadPalFile(char *filename, byte **palette);\r
-void VL_LoadPalFile(const char *filename, byte *palette);\r
+//byte *modexNewPal();\r
+void modexLoadPalFile(char *filename, byte *palette);\r
+void VL_LoadPalFile(const char *filename, byte *palette, global_game_variables_t *gvar);\r
+void VL_LoadPalFileCore(byte *palette, global_game_variables_t *gvar);\r
+void VL_SetCorePal(global_game_variables_t *gvar);\r
+void VLL_LoadPalFilewithoffset(const char *filename, byte *palette, word o, word palsize, global_game_variables_t *gvar);\r
+void VL_UpdatePaletteWrite(byte *palette, word o, word palsize, global_game_variables_t *gvar);\r
+void VL_PaletteSync(global_game_variables_t *gvar);\r
 void modexSavePalFile(char *filename, byte *palette);\r
+#define MenuFadeIn()   VL_FadeIn(0,255,&gamepal,10)\r
 \r
 /* fixed palette functions */\r
 void modexPalBlack();\r
 void modexPalWhite();\r
 \r
 /* utility functions */\r
-void modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset);\r
-void modexPalUpdate1(byte *p);\r
-void modexPalUpdate0(byte *p);\r
-void modexPalOverscan(word col);\r
-void modexchkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z, word *i/*, word *offset*/);\r
+void modexPalUpdate(byte *p);\r
+void VL_modexPalScramble(byte *p);\r
+word VL_modexPalOverscan(byte *p, word col);\r
+void VL_ColorBorder (int color, video_t *v);\r
+void VL_Plot (int x, int y, int color, global_game_variables_t *gvar);\r
+void VL_Hlin (unsigned x, unsigned y, unsigned width, unsigned color, global_game_variables_t *gvar);\r
+void VL_Vlin (int x, int y, int height, int color, global_game_variables_t *gvar);\r
+void VL_Bar (int x, int y, int width, int height, int color, global_game_variables_t *gvar);\r
+void VL_MemToScreen (byte far *source, int width, int height, int x, int y, global_game_variables_t *gvar);\r
 void modexputPixel(page_t *page, int x, int y, byte color);\r
 byte modexgetPixel(page_t *page, int x, int y);\r
 \r
@@ -165,12 +259,17 @@ static inline byte modexreadPixel(page_t *page, int x, int y, word addr)
 #endif\r
 \r
 void modexDrawChar(page_t *page, int x/*for planar selection only*/, word t, word col, word bgcol, word addr);\r
-void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str);\r
+void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word color, word bgcolor, boolean vidsw, const byte *str);\r
 void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str);\r
-void modexpdump(page_t *pee);\r
-void modexcls(page_t *page, byte color, byte *Where);\r
+void VL_modexPrintTextBox(global_game_variables_t *gvar);\r
+void VL_print(const byte *str, nibble pagenum, global_game_variables_t *gvar);\r
+void modexpdump(nibble pagenum, global_game_variables_t *gvar);\r
 void VL_PatternDraw(video_t *video, word pn, boolean sw, boolean allsw);\r
 void modexWaitBorder();\r
+void modexWaitBorder_start();\r
+void modexWaitBorder_end();\r
+void VL_WaitVBL(word num);\r
+void VL_SetLineWidth (unsigned width, global_game_variables_t *gvar);\r
 void VL_PrintmodexmemInfo(video_t *v);\r
 \r
 #endif\r