CGDoom/cgdoom/i_video.c

154 lines
4.7 KiB
C
Raw Normal View History

2015-04-15 02:16:51 +02:00
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
// $Id:$
//
// Copyright (C) 1993-1996 by id Software, Inc.
//
// This source is available for distribution and/or modification
// only under the terms of the DOOM Source Code License as
// published by id Software. All rights reserved.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
// for more details.
//
// $Log:$
//
// DESCRIPTION:
// DOOM graphics stuff for Nspire
//
//-----------------------------------------------------------------------------
#include "os.h"
#include "doomstat.h"
#include "i_system.h"
#include "v_video.h"
#include "d_main.h"
#include "doomdef.h"
//Pallette data
//High byte: 4 MSBs declare B
//Low byte: 4 LSBs declare R
//Theoretically, we COULD have saved it in the WAD file somewhere, but fuck that
//Hardcoded = Awesome
//short = 2 bytes = 16 bits = palette word length
static const unsigned short gwPallette[256]=
{
0x0000,0x18A1,0x1060,0x4A49,0xFFFF,0x18C3,0x1082,0x0841,0x0020,0x29A3,0x2141,0x10E0,0x08A0,0x49C5,0x4184,0x3943,
0xFDB6,0xF555,0xF514,0xECB2,0xE471,0xDC30,0xDBCF,0xD38E,0xCB4D,0xC30C,0xBACB,0xBAAA,0xB269,0xAA28,0xA1E7,0xA1C7,
0x9986,0x9165,0x8945,0x8904,0x80E3,0x78C3,0x70A2,0x7082,0x6861,0x6041,0x5820,0x5820,0x5020,0x4800,0x4000,0x4000,
0xFF5B,0xFF1A,0xFED8,0xFE97,0xFE76,0xFE34,0xFDF3,0xFDD2,0xFD90,0xF54F,0xED0E,0xE4CD,0xDC8C,0xD44B,0xCC0A,0xCBE9,
0xBBC9,0xB388,0xAB68,0xA347,0x9B07,0x8AE6,0x82A6,0x7A85,0x7265,0x6A24,0x5A04,0x51E3,0x49A3,0x3962,0x3142,0x2901,
0xEF7D,0xE73C,0xDEFB,0xDEDB,0xD69A,0xCE59,0xC638,0xBDF7,0xB5B6,0xB596,0xAD55,0xA534,0x9CF3,0x94B2,0x9492,0x8C51,
0x8410,0x7BEF,0x73AE,0x6B6D,0x6B4D,0x630C,0x5ACB,0x52AA,0x4A69,0x4228,0x4208,0x39C7,0x31A6,0x2965,0x2124,0x2104,
0x77ED,0x6F6C,0x66EB,0x5E6A,0x5DE9,0x5568,0x4CE7,0x4486,0x3C05,0x3385,0x2B04,0x2283,0x1A02,0x1181,0x1101,0x08A0,
0xBD31,0xB4F0,0xACAF,0xA46E,0x9C2D,0x9BED,0x93CC,0x8B8B,0x834A,0x7B09,0x72E9,0x6AA8,0x6287,0x5A46,0x5206,0x51E5,
0x9C0C,0x8BAA,0x8349,0x72E7,0x6286,0x5A25,0x49C4,0x4183,0x7BEC,0x6B8A,0x6349,0x5B08,0x52A7,0x4266,0x3A25,0x31E4,
0xFFEE,0xEECA,0xD5C8,0xC4C5,0xABC3,0x9AC2,0x8200,0x7140,0xFFFF,0xFEDB,0xFDD7,0xFCD3,0xFBCF,0xFAEB,0xF9E7,0xF8E3,
0xF800,0xE800,0xE000,0xD000,0xC800,0xB800,0xB000,0xA000,0x9800,0x8800,0x7800,0x7000,0x6000,0x5800,0x4800,0x4000,
0xE73F,0xC63F,0xAD5F,0x8C7F,0x739F,0x529F,0x31BF,0x18DF,0x001F,0x001C,0x0019,0x0016,0x0013,0x0010,0x000D,0x000A,
0xFFFF,0xFF5B,0xFEB7,0xFE33,0xFD8F,0xFD0B,0xFC67,0xFBE3,0xF382,0xEB61,0xDB21,0xD2E1,0xCAA0,0xC260,0xB220,0xAA00,
0xFFFF,0xFFFA,0xFFF6,0xFFF1,0xFFED,0xFFE8,0xFFE4,0xFFE0,0xA1E0,0x99A0,0x9160,0x8100,0x49C4,0x4163,0x3102,0x28C1,
0x000A,0x0008,0x0007,0x0005,0x0004,0x0002,0x0001,0x0000,0xFCE8,0xFF29,0xFBDF,0xF81F,0xC819,0x9813,0x680D,0xA34D
};
//#ifndef CG_EMULATOR
#if 0 // this doesn't work
//#define SYNCO() __asm__ volatile("SYNCO\n\t":::"memory"); //doesn't compile
#define SYNCO()
#define PRDR *(volatile unsigned char *)0xA405013C
#define LCDC *(volatile unsigned short*)0xB4000000
#define LCD_GRAM_X 0x200
#define LCD_GRAM_Y 0x201
#define LCD_GRAM 0x202
#define LCD_WINDOW_LEFT 0x210
#define LCD_WINDOW_RIGHT 0x211
#define LCD_WINDOW_TOP 0x212
#define LCD_WINDOW_BOTTOM 0x213
static void SelectLCDReg(unsigned short reg)
{
SYNCO();
PRDR &= ~0x10;
SYNCO();
LCDC = reg;
SYNCO();
PRDR |= 0x10;
SYNCO();
return;
}
static void WriteLCDReg(unsigned short reg, unsigned short value)
{
SelectLCDReg(reg);
LCDC = value;
return;
}
static unsigned short ReadLCDReg(unsigned short reg)
{
SelectLCDReg(reg);
return LCDC;
}
void I_Flip (void)
{
unsigned j=0,i = 320*200;
while(i--)
{
LCDC = gwPallette[screens[0][j]];
j++;
}
}
void I_InitGraphics(void)
{
WriteLCDReg(LCD_WINDOW_LEFT, (396 - 320)/2);
WriteLCDReg(LCD_WINDOW_RIGHT, (396 - 320)/2 + 319);
WriteLCDReg(LCD_WINDOW_TOP, (224 - 200) / 2);
WriteLCDReg(LCD_WINDOW_BOTTOM, (224 - 200) / 2 + 199);
}
void I_ShutdownGraphics(void)
{
WriteLCDReg(LCD_WINDOW_LEFT, (396 - 384)/2);
WriteLCDReg(LCD_WINDOW_RIGHT, (396 - 384)/2 + 383);
WriteLCDReg(LCD_WINDOW_TOP, (224 - 216) / 2);
WriteLCDReg(LCD_WINDOW_BOTTOM, (224 - 216) / 2 + 215);
}
#else
void I_Flip (void)
{
int x,y;
for(y=0;y<SCREENHEIGHT;y++)
{
for(x=0;x<SCREENWIDTH;x++)
{
VRAM[(x+(WIDTH-SCREENWIDTH)/2)+(y+(HEIGHT-SCREENHEIGHT)/2)*WIDTH] = gwPallette[screens[0][x+y*SCREENWIDTH]];
}
}
Bdisp_PutDisp_DD();
}
void I_InitGraphics(void)
{
}
void I_ShutdownGraphics(void)
{
}
#endif