/*
 * Copyright (c) 2003, Adam Dunkels.
 * All rights reserved. 
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met: 
 * 1. Redistributions of source code must retain the above copyright 
 *    notice, this list of conditions and the following disclaimer. 
 * 2. Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer in the documentation and/or other materials provided
 *    with the distribution. 
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgement:
 *        This product includes software developed by Adam Dunkels. 
 * 4. The name of the author may not be used to endorse or promote
 *    products derived from this software without specific prior
 *    written permission.  
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
 *
 * This file is part of the Contiki VNC client
 *
 * $Id: vnc-draw.c,v 1.2 2004/07/18 13:23:28 oliverschmidt Exp $
 *
 */



#include "vnc-draw.h"
#include "vnc-draw-asm.h"

#include "vnc-conf.h"


static unsigned char conv[256];

static unsigned char oratab[8] =
  { 0x80, 0x40, 0x20, 0x10,
    0x08, 0x04, 0x02, 0x01 };
static unsigned char andtab[8] =
  { 0x7f, 0xbf, 0xdf, 0xef,
    0xf7, 0xfb, 0xfd, 0xfe };

static u8_t *bitmapptrtab[VNC_CONF_VIEWPORT_HEIGHT];

static unsigned short viewport_x,
  viewport_y, viewport_w, viewport_h;

u8_t vnc_draw_bitmap[(VNC_CONF_VIEWPORT_WIDTH / 8) *
		     VNC_CONF_VIEWPORT_HEIGHT];



u16_t vnc_draw_x;
u16_t vnc_draw_y;
u8_t *vnc_draw_dataptr;
u8_t *vnc_draw_bitmapptr;
u16_t vnc_draw_datalen;

/*-----------------------------------------------------------------------------------*/
void
vnc_draw_pixel(u16_t x, u8_t y, u8_t c)
{
  u8_t o, a;
  
  vnc_draw_bitmapptr = bitmapptrtab[y] + (x & 0x1f8);  
  
  if(c) {
    o = oratab[x & 7];
    *vnc_draw_bitmapptr = *vnc_draw_bitmapptr | o;
  } else {
    a = andtab[x & 7];
    *vnc_draw_bitmapptr = *vnc_draw_bitmapptr & a;
  }
}
/*-----------------------------------------------------------------------------------*/
void
vnc_draw_pixelline(u16_t x, u16_t y, u8_t *data, u16_t datalen)
{
  u8_t o, a;
  register u8_t *bitmapptr;
  
  vnc_draw_x = x - viewport_x;
  vnc_draw_y = y - viewport_y;

  /*  if(vnc_draw_y & 1) {
    return;
  } else {
    vnc_draw_y /= 2;
    }*/

  
  
  if(vnc_draw_y >= VNC_CONF_VIEWPORT_HEIGHT ||
     vnc_draw_x >= VNC_CONF_VIEWPORT_WIDTH) {
    return;
  }

  vnc_draw_datalen = datalen;
  
  if(vnc_draw_datalen + vnc_draw_x >= VNC_CONF_VIEWPORT_WIDTH) {
    vnc_draw_datalen = VNC_CONF_VIEWPORT_WIDTH - vnc_draw_x;
    if(vnc_draw_datalen == 0) {
      return;
    }
  }
  
  vnc_draw_dataptr = data;

  /*  vnc_draw_bitmapptr = bitmaptab[vnc_draw_y] +
      (vnc_draw_x & 0x1f8);*/

  for(; vnc_draw_datalen > 0; --vnc_draw_datalen) {
    /*    vnc_draw_pixel(vnc_draw_x, vnc_draw_y,
	  conv[*vnc_draw_dataptr]);*/

    bitmapptr = bitmapptrtab[vnc_draw_y] + (vnc_draw_x & 0x1f8);  
    
    if(conv[*vnc_draw_dataptr]) {
      o = oratab[vnc_draw_x & 7];
      *bitmapptr = *bitmapptr | o;
    } else {
      a = andtab[vnc_draw_x & 7];
      *bitmapptr = *bitmapptr & a;
    }
    ++vnc_draw_dataptr;
    ++vnc_draw_x;
  }  
}
/*-----------------------------------------------------------------------------------*/
void
vnc_draw_init(void)
{
  unsigned int tmp;
  unsigned int i;
  unsigned short ptr;


  /* Create color conversion table. */
  for(i = 0; i < 256; ++i) {
    if(((i & 0xc0) > 0xc0) ||
       ((i & 0x38) > 0x18) ||
       ((i & 0x07) > 0x03)) {
      conv[i] = 0;
    } else {
      conv[i] = 1;
    }
  }

  memset(vnc_draw_bitmap, 0, sizeof(vnc_draw_bitmap));
  
  for(i = 0; i < VNC_CONF_VIEWPORT_HEIGHT; ++i) {
    bitmapptrtab[i] = (u8_t *)((u16_t)vnc_draw_bitmap +
			       ((i & 0xfff8)/8) * VNC_CONF_VIEWPORT_WIDTH +
			       (i & 7));
  }

  viewport_x = 0;
  viewport_y = 0;

  viewport_w = VNC_CONF_VIEWPORT_WIDTH;
  viewport_h = VNC_CONF_VIEWPORT_HEIGHT;
  
  return;
}
/*-----------------------------------------------------------------------------------*/
u16_t
vnc_draw_viewport_x(void)
{
  return viewport_x;
}
/*-----------------------------------------------------------------------------------*/
u16_t
vnc_draw_viewport_y(void)
{
  return viewport_y;
}
/*-----------------------------------------------------------------------------------*/
u16_t
vnc_draw_viewport_w(void)
{
  return viewport_w;
}
/*-----------------------------------------------------------------------------------*/
u16_t
vnc_draw_viewport_h(void)
{
  return viewport_h;
}
/*-----------------------------------------------------------------------------------*/
#if 0
signed short
c64_mouse_x(void)
{
  return 0;
}
/*-----------------------------------------------------------------------------------*/
signed short
c64_mouse_y(void)
{
  return 0;
}
/*-----------------------------------------------------------------------------------*/
u8_t
c64_mouse_buttons(void)
{
  return firebutton;
}
/*-----------------------------------------------------------------------------------*/
void
c64_set_mouse_x(unsigned short x)
{
  joyx = x;
}
/*-----------------------------------------------------------------------------------*/
void
c64_set_mouse_y(unsigned short y)
{
  joyy = y;
}
/*-----------------------------------------------------------------------------------*/
void
c64_set_viewport_x(unsigned short x)
{
  viewport_x = x;
}
/*-----------------------------------------------------------------------------------*/
void
c64_set_viewport_y(unsigned short y)
{
  viewport_y = y;
}
/*-----------------------------------------------------------------------------------*/

#endif /* 0 */
#if 0
#pragma optimize(push, off)
void
c64_scroll_up(unsigned char c)
{
  asm("lda $f7");
  asm("pha");
  asm("lda $f8");
  asm("pha");
  asm("lda $f9");
  asm("pha");
  asm("lda $fa");
  asm("pha");
  asm("lda $fb");
  asm("pha");
  asm("lda $fc");
  asm("pha");
  asm("lda $fd");
  asm("pha");
  asm("lda $fe");
  asm("pha");

  asm("lda $01");
  asm("pha");
  asm("lda #$35");
  asm("sta $01");
  
  asm("lda #$80");
  asm("sta $f7");
  asm("lda #$a2");
  asm("sta $f8");
  asm("lda #$00");
  asm("sta $f9");
  asm("lda #$a0");
  asm("sta $fa");

  asm("lda #$80");
  asm("sta $fb");
  asm("lda #$e2");
  asm("sta $fc");
  asm("lda #$00");
  asm("sta $fd");
  asm("lda #$e0");
  asm("sta $fe");

  asm("ldy #0");
  asm("loop:");
  asm("lda ($f7),y");
  asm("sta ($f9),y");
  asm("lda ($fb),y");
  asm("sta ($fd),y");
  asm("iny");
  asm("bne loop");

  asm("inc $f8");
  asm("inc $fa");
  asm("inc $fc");
  asm("inc $fe");

  asm("lda $fc");
  asm("cmp #$00");
  asm("bne loop");

  asm("ldy #0");
  asm("lda #0");
  asm("sta $fe00,y");
  asm("sta $be00,y");
  asm("sta $fcc0,y");
  asm("sta $bcc0,y");
  asm("iny");
  asm("bne *-13");
  asm("sta $ff00,y");
  asm("sta $bf00,y");
  asm("sta $fdc0,y");
  asm("sta $bdc0,y");
  asm("iny");
  asm("cpy #$40");
  asm("bne *-15");
  

  asm("pla");
  asm("sta $01");
  asm("pla");
  asm("sta $fe");
  asm("pla");
  asm("sta $fd");
  asm("pla");
  asm("sta $fc");
  asm("pla");
  asm("sta $fb");
  asm("pla");
  asm("sta $fa");
  asm("pla");
  asm("sta $f9");
  asm("pla");
  asm("sta $f8");
  asm("pla");
  asm("sta $f7");
}
#pragma optimize(pop)
/*-----------------------------------------------------------------------------------*/
#pragma optimize(push, off)
void
c64_scroll_down(unsigned char c)
{
  asm("lda $f7");
  asm("pha");
  asm("lda $f8");
  asm("pha");
  asm("lda $f9");
  asm("pha");
  asm("lda $fa");
  asm("pha");
  asm("lda $fb");
  asm("pha");
  asm("lda $fc");
  asm("pha");
  asm("lda $fd");
  asm("pha");
  asm("lda $fe");
  asm("pha");


  asm("lda $01");
  asm("pha");
  asm("lda #$35");
  asm("sta $01");
  
  asm("lda #$c0");
  asm("sta $fb");
  asm("lda #$fb");
  asm("sta $fc");
  asm("lda #$40");
  asm("sta $fd");
  asm("lda #$fe");
  asm("sta $fe");

  asm("lda #$c0");
  asm("sta $f7");
  asm("lda #$bb");
  asm("sta $f8");
  asm("lda #$40");
  asm("sta $f9");
  asm("lda #$be");
  asm("sta $fa");


  asm("ldy #0");
  asm("loop:");
  asm("lda ($fb),y");
  asm("sta ($fd),y");
  asm("lda ($f7),y");
  asm("sta ($f9),y");
  asm("iny");
  asm("bne loop");

  asm("dec $f8");
  asm("dec $fa");
  asm("dec $fc");
  asm("dec $fe");


  asm("lda $fe");
  asm("cmp #$df");
  asm("bne loop");

  asm("ldy #0");
  asm("lda #0");
  asm("sta $e000,y");
  asm("sta $a000,y");
  asm("sta $e140,y");
  asm("sta $a140,y");
  asm("iny");
  asm("bne *-13");
  asm("sta $e100,y");
  asm("sta $a100,y");
  asm("sta $e240,y");
  asm("sta $a240,y");
  asm("iny");
  asm("cpy #$40");
  asm("bne *-15");
  
  asm("pla");
  asm("sta $01");
  asm("pla");
  asm("sta $fe");
  asm("pla");
  asm("sta $fd");
  asm("pla");
  asm("sta $fc");
  asm("pla");
  asm("sta $fb");
  asm("pla");
  asm("sta $fa");
  asm("pla");
  asm("sta $f9");
  asm("pla");
  asm("sta $f8");
  asm("pla");
  asm("sta $f7");
}
#pragma optimize(pop)
/*-----------------------------------------------------------------------------------*/
#pragma optimize(push, off)
void
c64_scroll_right(unsigned char c)
{
  asm("lda $f7");
  asm("pha");
  asm("lda $f8");
  asm("pha");
  asm("lda $f9");
  asm("pha");
  asm("lda $fa");
  asm("pha");
  asm("lda $fb");
  asm("pha");
  asm("lda $fc");
  asm("pha");
  asm("lda $fd");
  asm("pha");
  asm("lda $fe");
  asm("pha");


  asm("lda $01");
  asm("pha");
  asm("lda #$35");
  asm("sta $01");

  asm("lda #$00");
  asm("sta $f7");
  asm("lda #$a0");
  asm("sta $f8");
  asm("lda #$10");
  asm("sta $f9");
  asm("lda #$a0");
  asm("sta $fa");

  asm("lda #$00");
  asm("sta $fb");
  asm("lda #$e0");
  asm("sta $fc");
  asm("lda #$10");
  asm("sta $fd");
  asm("lda #$e0");
  asm("sta $fe");

  asm("ldx #0");
  
  asm("loop3:");
  
  asm("ldy #$ff");
  asm("loop:");
  asm("lda ($f7),y");
  asm("sta ($f9),y");
  asm("lda ($fb),y");
  asm("sta ($fd),y");
  asm("dey");
  asm("cpy #$ff");
  asm("bne loop");
  
  asm("inc $f8");
  asm("inc $fa");
  asm("inc $fc");
  asm("inc $fe");

  asm("ldy #$30");
  asm("loop2:");
  asm("lda ($f7),y");
  asm("sta ($f9),y");
  asm("lda ($fb),y");
  asm("sta ($fd),y");
  asm("dey");
  asm("cpy #$ff");
  asm("bne loop2");

  asm("lda $f7");
  asm("clc");
  asm("adc #$40");
  asm("sta $f7");
  asm("sta $fb");
  asm("bcc :+");
  asm("inc $f8");
  asm("inc $fc");
  asm(":");
  
  asm("lda $f9");
  asm("clc");
  asm("adc #$40");
  asm("sta $f9");
  asm("sta $fd");
  asm("bcc :+");
  asm("inc $fa");
  asm("inc $fe");
  asm(":");
  

  
  asm("inx");
  asm("cpx #24");
  asm("bne loop3");

  asm("pla");
  asm("sta $01");
  asm("pla");
  asm("sta $fe");
  asm("pla");
  asm("sta $fd");
  asm("pla");
  asm("sta $fc");
  asm("pla");
  asm("sta $fb");
  asm("pla");
  asm("sta $fa");
  asm("pla");
  asm("sta $f9");
  asm("pla");
  asm("sta $f8");
  asm("pla");
  asm("sta $f7");
}
#pragma optimize(pop)
/*-----------------------------------------------------------------------------------*/
#pragma optimize(push, off)
void
c64_scroll_left(unsigned char c)
{
  asm("lda $f7");
  asm("pha");
  asm("lda $f8");
  asm("pha");
  asm("lda $f9");
  asm("pha");
  asm("lda $fa");
  asm("pha");
  asm("lda $fb");
  asm("pha");
  asm("lda $fc");
  asm("pha");
  asm("lda $fd");
  asm("pha");
  asm("lda $fe");
  asm("pha");


  asm("lda $01");
  asm("pha");
  asm("lda #$35");
  asm("sta $01");

  asm("lda #$10");
  asm("sta $f7");
  asm("lda #$a0");
  asm("sta $f8");
  asm("lda #$00");
  asm("sta $f9");
  asm("lda #$a0");
  asm("sta $fa");

  asm("lda #$10");
  asm("sta $fb");
  asm("lda #$e0");
  asm("sta $fc");
  asm("lda #$00");
  asm("sta $fd");
  asm("lda #$e0");
  asm("sta $fe");

  asm("ldx #0");
  asm("loop3:");
  asm("ldy #0");
  asm("loop:");
  asm("lda ($f7),y");
  asm("sta ($f9),y");
  asm("lda ($fb),y");
  asm("sta ($fd),y");
  asm("iny");
  asm("bne loop");
  
  asm("inc $f8");
  asm("inc $fa");
  asm("inc $fc");
  asm("inc $fe");

  asm("ldy #0");
  asm("loop2:");
  asm("lda ($f7),y");
  asm("sta ($f9),y");
  asm("lda ($fb),y");
  asm("sta ($fd),y");
  asm("iny");
  asm("cpy #$30");
  asm("bne loop2");

  asm("lda $f7");
  asm("clc");
  asm("adc #$40");
  asm("sta $f7");
  asm("sta $fb");
  asm("bcc :+");
  asm("inc $f8");
  asm("inc $fc");
  asm(":");
  
  asm("lda $f9");
  asm("clc");
  asm("adc #$40");
  asm("sta $f9");
  asm("sta $fd");
  asm("bcc :+");
  asm("inc $fa");
  asm("inc $fe");
  asm(":");
  

  asm("inx");
  asm("cpx #24");
  asm("bne loop3");

  asm("pla");
  asm("sta $01");
  asm("pla");
  asm("sta $fe");
  asm("pla");
  asm("sta $fd");
  asm("pla");
  asm("sta $fc");
  asm("pla");
  asm("sta $fb");
  asm("pla");
  asm("sta $fa");
  asm("pla");
  asm("sta $f9");
  asm("pla");
  asm("sta $f8");
  asm("pla");
  asm("sta $f7");
}
#pragma optimize(pop)
/*-----------------------------------------------------------------------------------*/



#endif /* 0 */
