home

AVGA C Tutorials




1. The simplest example


#include <stdio.h>

// The global AVGA include file.
#include "AVGA/avga.h"

// The header file containing tileset definition for your project.
#include "tileset.h"

// allocate memory spaces for the driver
unsigned char screen[DRIVER_REFTABLE_SIZE];
const unsigned char pgmmap[] PROGMEM = TILESET;
unsigned char rammap[DRIVER_RAMMAP_SIZE];


int main( void )
{
  //map memory spaces for video driver
  driver_mmap(screen, pgmmap, rammap);
  //initialization for PAL signal
  video_init(PAL);
  //start engine
  enable();

  //wait a second for TV to get in sync.
  wait_seconds(1);

  //print a string
  driver_print_C(6, 8, "Hello, world!");

  //halt so we can see it :)
  while (1);
}



2. Bit more complicated: The jumping ball


#include <stdio.h>

// The global AVGA include file.
#include "AVGA/avga.h"

// The header file containing tileset definition for your project.
#include "tileset.h"

// allocate memory spaces for the driver
unsigned char screen[DRIVER_REFTABLE_SIZE];
const unsigned char pgmmap[] PROGMEM = TILESET;
unsigned char rammap[DRIVER_RAMMAP_SIZE];


int main( void )
{
  //map memory spaces for video driver
  driver_mmap(screen, pgmmap, rammap);

  //initialization for PAL signal
  video_init(PAL);
  //start engine
  enable();

  //wait a second for TV to get in sync.
  wait_seconds(1);

  //fill the whole screen with tile number 21
  driver_fill(21);


  //variables holding ball's position
  unsigned int x = (DRIVER_MAXX/2);
  unsigned int y = (DRIVER_MAXY/4) << 8;

  //variables holding velocity
  signed int dx = 1;
  signed int dy = 0;


  //loop forever
  while (1)
  {
      //clear all previously rendered overlay things
      overlay_clear();

      //render a ball (source graphics = tile ID 1)
      overlay_draw_sprite(x, y>>8, 1);

      //integrate velocity
      x+=dx;
      y+=dy;

      //right bump
      if(x >= (DRIVER_RESX-DRIVER_BLOCK_WIDTH))
      {
	x = DRIVER_RESX-DRIVER_BLOCK_WIDTH;
        dx=-dx;
      }

      //left bump
      if(x <= 0)
      {
        x = 0;
        dx=-dx;
      }

      //hit the ground?
      if(y > ((DRIVER_RESY-DRIVER_BLOCK_HEIGHT)<<8))
      {
        y = (DRIVER_RESY-DRIVER_BLOCK_HEIGHT) << 8;
        dy=-dy;
      }

      //integrate earth's acceleration
      dy += 10;


      //wait for retrace
      sync();
  }
}