X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fscreen.cpp;fp=src%2Fscreen.cpp;h=f72b2bf026a57a9fb9f3a0d219dc945fb6928d60;hb=756fbabdd25117272164fd2d31810e6018a5990e;hp=bc733601fa4eda7620ce1030ddcd4e65a6ee897e;hpb=ad913876dd8313ff082819d8cd5a921418670657;p=thunder diff --git a/src/screen.cpp b/src/screen.cpp index bc73360..f72b2bf 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -14,6 +14,7 @@ // Who When What // --- ---------- ----------------------------------------------------------- // JLH 03/12/2003 Ported this steaming pile of crap from VESA to SDL +// JLH 04/04/2014 Ported to SDL 2. Much less crappy. // #include "screen.h" @@ -43,11 +44,9 @@ bool charbase; // Character base pointer... uint8_t hScrollOffset; // Horizontal scroll offset uint8_t vScrollOffset; // Vertical scroll offset uint8_t spr_color_index; // Sprite color index -uint32_t hoffsets[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };// Scroll offsets... +//uint32_t hoffsets[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };// Scroll offsets... //uint32_t voffsets[8] = { 0, 320, 640, 960, 1280, 1600, 1920, 2240 }; uint32_t voffsets[8] = { 288*0, 288*1, 288*2, 288*3, 288*4, 288*5, 288*6, 288*7 }; -//n.b.: 320 = $140 -// $000, $140, $280, $3C0, $500, $640, $780, $8C0 extern bool show_text; // Whether or not to show text extern bool show_scr; // Whether or not to show screen @@ -157,28 +156,14 @@ void BlitChar(SDL_Surface * scr, uint8_t * chr, uint8_t * ram) if (ShowGUI()) DrawGUI(); -#if 0 - if (SDL_LockSurface(scr) < 0) - { -// fprintf(stderr, "Couldn't lock the display surface: %s\n", SDL_GetError()); -// exit(2); - } -#endif - // Rolling Thunder screen size is 288 x 224. Virtual is this, real may not be... - uint32_t src = 0;//(uint32_t)(hoffsets[hScrollOffset] + voffsets[vScrollOffset]); -// uint32_t srcAdd = 320 - VIRTUAL_SCREEN_WIDTH; + uint32_t src = 0; for(int i=0; i> 4, b2 = spr_rom[sprnum++] & 0x0F; @@ -310,11 +293,9 @@ static inline void DrawSpriteBlock(uint32_t & sprnum, uint16_t x, uint16_t y, ui static inline void DrawSpriteBlock2(uint32_t & sprnum, uint16_t x, uint16_t y, uint16_t xStart, uint16_t xEnd, int16_t xInc) { extern uint8_t spr_rom[]; -// uint32_t sc_addr; for(uint16_t sy=0; sy<16; sy++) { -// for(uint16_t sx=0; sx<16; sx+=2) for(uint16_t sx=xStart; sx!=xEnd; sx+=xInc) { uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; @@ -341,77 +322,18 @@ static inline void DrawSpriteBlock2(uint32_t & sprnum, uint16_t x, uint16_t y, u void Sprite(uint32_t sprnum, uint16_t x, uint16_t y, uint8_t flip, uint8_t horiz_bl, uint8_t vert_bl) { - extern uint8_t spr_rom[]; - uint32_t sc_addr; - sprnum <<= 7; // 128 bytes per sprite + // 128 bytes per sprite (16 x 16 chunks, 4 bits per pixel) + sprnum <<= 7; if (!vert_bl) y += 16; if (!flip) { -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=0; sx<16; sx+=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; // Need to optimize this clipping! - - // This handles negative values, by casting as unsigned -#if 0 -// if (spy > 223 || spx > 299) - if (spy >= 224 || spx >= 288) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); -#else - sc_addr = ((spy >= 224) || (spx >= 288) ? 0x13FFE : spx + (spy * 288)); -#endif - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - - sc_addr++; - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - } - } -#else DrawSpriteBlock(sprnum, x, y, 0, 16, 2); -#endif if (horiz_bl) - { -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=16; sx<32; sx+=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if (spy > 223 || spx > 299) - if (spy > 223 || spx > 287) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - - sc_addr++; - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - } - } -#else DrawSpriteBlock(sprnum, x, y, 16, 32, 2); -#endif - } else sprnum += 128; // Advance to next... @@ -419,126 +341,18 @@ void Sprite(uint32_t sprnum, uint16_t x, uint16_t y, uint8_t flip, { y += 16; // Do next row... -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=0; sx<16; sx+=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if (spy > 223 || spx > 299) - if (spy > 223 || spx > 287) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - - sc_addr++; - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - } - } -#else DrawSpriteBlock(sprnum, x, y, 0, 16, 2); -#endif if (horiz_bl) - { -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=16; sx<32; sx+=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if (spy > 223 || spx > 299) - if (spy > 223 || spx > 287) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - - sc_addr++; - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - } - } -#else DrawSpriteBlock(sprnum, x, y, 16, 32, 2); -#endif - } } } else // Flip { if (horiz_bl) - { -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=30; sx!=14; sx-=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if ((spy > 223) || (spx > 299)) - if ((spy > 223) || (spx > 287)) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - - sc_addr++; - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - } - } -#else DrawSpriteBlock2(sprnum, x, y, 30, 14, -2); -#endif - } - -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=14; sx!=0xFFFE; sx-=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if ((spy > 223) || (spx > 299)) - if ((spy > 223) || (spx > 287)) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - - sc_addr++; - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - } - } -#else DrawSpriteBlock2(sprnum, x, y, 14, 0xFFFE, -2); -#endif if (!horiz_bl) sprnum += 128; // If single, skip sprite... @@ -548,63 +362,9 @@ void Sprite(uint32_t sprnum, uint16_t x, uint16_t y, uint8_t flip, y += 16; // Adjust Y coord... if (horiz_bl) - { -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=30; sx!=14; sx-=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if ((spy > 223) || (spx > 299)) - if ((spy > 223) || (spx > 287)) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - - sc_addr++; - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - } - } -#else DrawSpriteBlock2(sprnum, x, y, 30, 14, -2); -#endif - } -#if 0 - for(uint16_t sy=0; sy<16; sy++) - { - for(uint16_t sx=14; sx!=0xFFFE; sx-=2) - { - uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; - uint16_t spy = y + sy, spx = x + sx; - -// if ((spy > 223) || (spx > 299)) - if ((spy > 223) || (spx > 287)) - sc_addr = 0x13FFE; - else -// sc_addr = spx + spy * 320; - sc_addr = spx + (spy * 288); - - if (b2 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it - - sc_addr++; - - if (b1 != 15) - my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it - } - } -#else DrawSpriteBlock2(sprnum, x, y, 14, 0xFFFE, -2); -#endif } } }