URL
https://opencores.org/ocsvn/openfire2/openfire2/trunk
Subversion Repositories openfire2
Compare Revisions
- This comparison shows the changes necessary to convert path
/openfire2/trunk/sw/vga
- from Rev 4 to Rev 6
- ↔ Reverse comparison
Rev 4 → Rev 6
/Makefile
0,0 → 1,33
PRJ = vga |
CRT = ../crt/crt-sram |
LIB = vga_5x7_fuente.c vga_5x7_putchar.c vga_5x7_putline.c vga_5x7_setfgcolor.c vga_5x7_setbgcolor.c vga_clearscreen.c vga_drawpixel.c |
SRCS = $(PRJ).c $(LIB) |
OBJS = $(SRCS:.c=.o) |
LINK = ../link/sp3sk-sram.ld |
|
$(PRJ).srec: $(PRJ).out |
mb-objcopy -O srec $(PRJ).out $(PRJ).srec |
mb-objcopy -O binary $(PRJ).out $(PRJ).bin |
..\..\utils\bin2rom $(PRJ).bin $(PRJ).rom |
|
libvga: |
--rm $(PRJ).a |
mb-ar q lib$(PRJ).a $(OBJS) |
|
$(OBJS): $(SRCS) |
mb-gcc -O2 -B. -mno-xl-soft-mul -c -Wa,-ahlms=$(@:.o=.lst) -o $@ $(@:.o=.c) |
|
$(PRJ).out: $(CRT).o $(OBJS) |
mb-ld -L ../lib -T $(LINK) -Map=$(PRJ).map -o $(PRJ).out $(CRT).o $(OBJS) -lgcc -lc -lm -lgcc -lio |
|
clean: |
-rm *.o |
-rm *.out |
-rm *.bin |
-rm *.v |
-rm *.map |
-rm *.lst |
-rm *.bak |
-rm *.srec |
-rm *.prom |
-rm *.rom |
/vga_5x7_putline.c
0,0 → 1,20
#include "vga.h" |
|
void vga_putline5x7(char *s, unsigned short x, unsigned short y) |
{ |
unsigned c; |
|
while( (c = *(s++)) != 0 ) |
{ |
if(c == '\r') x = 0; |
else if(c == '\n') { x = 0; y++; } |
else |
{ |
if(c < 0x20 || c > 0x7f) c = '?'; |
vga_putchar5x7(c, x, y); |
x++; |
if(x == 128) { x = 0; y++; } |
if(y == 68) y = 0; |
} |
} |
} |
/vga.h
0,0 → 1,17
/* datos para el vga 5x7 */ |
extern unsigned short bitmap_font_5x7[]; |
extern unsigned short background_5x7; |
extern unsigned short foreground_5x7; |
extern unsigned short colores_5x7[]; |
extern unsigned short xpos_5x7; |
extern unsigned short ypos_5x7; |
extern unsigned _VIDEO_RAM_ADDR; |
|
void vga_putchar5x7(char caracter, unsigned short pos_x, unsigned short pos_y); |
void vga_putline5x7(char *s, unsigned short x, unsigned short y); |
void vga_setfgcolor5x7(unsigned short color); |
void vga_setbgcolor5x7(unsigned short color); |
|
/* funciones vga generales */ |
void vga_clearscreen(void); |
void vga_drawpixel(unsigned short x, unsigned short y, unsigned short color); |
/vga_5x7_setbgcolor.c
0,0 → 1,6
#include "vga.h" |
|
void vga_setbgcolor5x7(unsigned short color) |
{ |
background_5x7 = colores_5x7[color]; |
} |
/vga_clearscreen.c
0,0 → 1,7
#include "vga.h" |
|
void vga_clearscreen(void) |
{ |
unsigned *ptr = (unsigned *)&_VIDEO_RAM_ADDR, n; |
for(n = 0; n < 64 * 480; n++) *(ptr++) = background_5x7; |
} |
/vga_5x7_fuente.c
0,0 → 1,110
#include "vga.h" |
|
/* fuente de 5x7 en vga de 640x480 --> 128 x 68 */ |
/* ---------------------------------------------- */ |
unsigned short bitmap_font_5x7[96 * 7] = { |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x20 -espacio- */ |
0x01C0, 0x01C0, 0x01C0, 0x0000, 0x01C0, 0x0000, 0x0000, /* cada word es: 0 RGB RGB RGB RGB RGB */ |
0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* siendo R=G=B, ocupa el doble de espacio */ |
0x0E38, 0x7FFF, 0x0E38, 0x7FFF, 0x0E38, 0x0000, 0x0000, /* pero ahorra muchos ciclos de reloj */ |
0x0FF8, 0x71C0, 0x0FF8, 0x01C7, 0x0FF8, 0x0000, 0x0000, |
0x7E07, 0x7E38, 0x01C0, 0x0E3F, 0x703F, 0x0000, 0x0000, |
0x0FC0, 0x0E38, 0x0FC0, 0x7038, 0x0FC7, 0x0000, 0x0000, |
0x01C0, 0x0E00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x01C0, 0x0E00, 0x0E00, 0x0E00, 0x01C0, 0x0000, 0x0000, |
0x01C0, 0x0038, 0x0038, 0x0038, 0x01C0, 0x0000, 0x0000, |
0x71C7, 0x0FF8, 0x01C0, 0x0FF8, 0x71C7, 0x0000, 0x0000, |
0x01C0, 0x01C0, 0x7FFF, 0x01C0, 0x01C0, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x01F8, 0x0038, 0x01C0, 0x0000, |
0x0000, 0x0000, 0x7FFF, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x01F8, 0x01F8, 0x0000, 0x0000, |
0x0007, 0x0038, 0x01C0, 0x0E00, 0x7000, 0x0000, 0x0000, |
0x0FF8, 0x7007, 0x71C7, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x01C0, 0x0FC0, 0x01C0, 0x01C0, 0x0FF8, 0x0000, 0x0000, |
0x0FF8, 0x0007, 0x0FF8, 0x7000, 0x7FFF, 0x0000, 0x0000, |
0x0FF8, 0x0007, 0x0FF8, 0x0007, 0x0FF8, 0x0000, 0x0000, |
0x7038, 0x7038, 0x7FFF, 0x0038, 0x0038, 0x0000, 0x0000, |
0x7FF8, 0x7000, 0x7FF8, 0x0007, 0x7FF8, 0x0000, 0x0000, |
0x0FF8, 0x7000, 0x7FF8, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x7FFF, 0x0038, 0x01C0, 0x01C0, 0x01C0, 0x0000, 0x0000, |
0x0FF8, 0x7007, 0x0FF8, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x0FF8, 0x7007, 0x0FFF, 0x0007, 0x0FF8, 0x0000, 0x0000, |
0x0000, 0x01F8, 0x01F8, 0x0000, 0x01F8, 0x01F8, 0x0000, |
0x0000, 0x01F8, 0x01F8, 0x0000, 0x01F8, 0x0FC0, 0x0000, |
0x0038, 0x01C0, 0x0E00, 0x01C0, 0x0038, 0x0000, 0x0000, |
0x0000, 0x7FFF, 0x0000, 0x7FFF, 0x0000, 0x0000, 0x0000, |
0x0E00, 0x01C0, 0x0038, 0x01C0, 0x0E00, 0x0000, 0x0000, |
0x0FF8, 0x0007, 0x01F8, 0x0000, 0x01C0, 0x0000, 0x0000, |
0x0FF8, 0x71FF, 0x71FF, 0x7000, 0x0FF8, 0x0000, 0x0000, |
0x0FF8, 0x7007, 0x7FFF, 0x7007, 0x7007, 0x0000, 0x0000, |
0x7FF8, 0x7007, 0x7FF8, 0x7007, 0x7FF8, 0x0000, 0x0000, |
0x0FF8, 0x7000, 0x7000, 0x7000, 0x0FF8, 0x0000, 0x0000, |
0x7FF8, 0x7007, 0x7007, 0x7007, 0x7FF8, 0x0000, 0x0000, |
0x7FFF, 0x7000, 0x7FC0, 0x7000, 0x7FFF, 0x0000, 0x0000, |
0x7FFF, 0x7000, 0x7FF8, 0x7000, 0x7000, 0x0000, 0x0000, |
0x0FF8, 0x7000, 0x703F, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x7007, 0x7007, 0x7FFF, 0x7007, 0x7007, 0x0000, 0x0000, |
0x0FF8, 0x01C0, 0x01C0, 0x01C0, 0x0FF8, 0x0000, 0x0000, |
0x0007, 0x0007, 0x0007, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x7007, 0x7038, 0x7FC0, 0x7038, 0x7007, 0x0000, 0x0000, |
0x7000, 0x7000, 0x7000, 0x7000, 0x7FFF, 0x0000, 0x0000, |
0x7007, 0x7E3F, 0x71C7, 0x7007, 0x7007, 0x0000, 0x0000, |
0x7007, 0x7E07, 0x71C7, 0x703F, 0x7007, 0x0000, 0x0000, |
0x0FF8, 0x7007, 0x7007, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x7FF8, 0x7007, 0x7FF8, 0x7000, 0x7000, 0x0000, 0x0000, |
0x0FF8, 0x7007, 0x7007, 0x703F, 0x0FFF, 0x0000, 0x0000, |
0x7FF8, 0x7007, 0x7FF8, 0x7038, 0x7007, 0x0000, 0x0000, |
0x0FF8, 0x7000, 0x0FF8, 0x0007, 0x0FF8, 0x0000, 0x0000, |
0x7FFF, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x0000, 0x0000, |
0x7007, 0x7007, 0x7007, 0x7007, 0x0FF8, 0x0000, 0x0000, |
0x7007, 0x7007, 0x0E38, 0x0E38, 0x01C0, 0x0000, 0x0000, |
0x7007, 0x7007, 0x71C7, 0x71C7, 0x0E38, 0x0000, 0x0000, |
0x7007, 0x0E38, 0x01C0, 0x0E38, 0x7007, 0x0000, 0x0000, |
0x7007, 0x0E38, 0x01C0, 0x01C0, 0x01C0, 0x0000, 0x0000, |
0x7FFF, 0x0038, 0x01C0, 0x0E00, 0x7FFF, 0x0000, 0x0000, |
0x0FF8, 0x0E00, 0x0E00, 0x0E00, 0x0FF8, 0x0000, 0x0000, |
0x7000, 0x0E00, 0x01C0, 0x0038, 0x0007, 0x0000, 0x0000, |
0x0FF8, 0x0038, 0x0038, 0x0038, 0x0FF8, 0x0000, 0x0000, |
0x01C0, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x7FFF, 0x0000, 0x0000, |
0x0E00, 0x0E00, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0FC0, 0x0038, 0x7FF8, 0x0FF8, 0x0000, 0x0000, |
0x7000, 0x7FC0, 0x7038, 0x7038, 0x7FC0, 0x0000, 0x0000, |
0x0000, 0x0FF8, 0x7000, 0x7000, 0x0FF8, 0x0000, 0x0000, |
0x0038, 0x0FF8, 0x7038, 0x7038, 0x0FF8, 0x0000, 0x0000, |
0x0000, 0x0FC0, 0x7FF8, 0x7000, 0x0FC0, 0x0000, 0x0000, |
0x01C0, 0x0E00, 0x7FC0, 0x0E00, 0x0E00, 0x0000, 0x0000, |
0x0000, 0x0FC0, 0x7038, 0x7038, 0x0FF8, 0x0038, 0x0FC0, |
0x7000, 0x7FC0, 0x7038, 0x7038, 0x7038, 0x0000, 0x0000, |
0x0000, 0x0FC0, 0x01C0, 0x01C0, 0x0FF8, 0x0000, 0x0000, |
0x0000, 0x01F8, 0x0038, 0x0038, 0x0038, 0x7038, 0x0FC0, |
0x7000, 0x7038, 0x7FC0, 0x7FC0, 0x7038, 0x0000, 0x0000, |
0x0FC0, 0x01C0, 0x01C0, 0x01C0, 0x0FF8, 0x0000, 0x0000, |
0x0000, 0x7E38, 0x71C7, 0x7007, 0x7007, 0x0000, 0x0000, |
0x0000, 0x7FC0, 0x7038, 0x7038, 0x7038, 0x0000, 0x0000, |
0x0000, 0x0FC0, 0x7038, 0x7038, 0x0FC0, 0x0000, 0x0000, |
0x0000, 0x7FC0, 0x7038, 0x7038, 0x7FC0, 0x7000, 0x7000, |
0x0000, 0x0FF8, 0x7038, 0x7038, 0x0FF8, 0x0038, 0x0038, |
0x0000, 0x7FC0, 0x7038, 0x7000, 0x7000, 0x0000, 0x0000, |
0x0000, 0x0FF8, 0x7E00, 0x01F8, 0x7FC0, 0x0000, 0x0000, |
0x01C0, 0x0FF8, 0x01C0, 0x01C0, 0x01C0, 0x0000, 0x0000, |
0x0000, 0x7038, 0x7038, 0x7038, 0x0FF8, 0x0000, 0x0000, |
0x0000, 0x7038, 0x7038, 0x71C0, 0x0E00, 0x0000, 0x0000, |
0x0000, 0x7007, 0x7007, 0x71C7, 0x0E38, 0x0000, 0x0000, |
0x0000, 0x7038, 0x0FC0, 0x0FC0, 0x7038, 0x0000, 0x0000, |
0x0000, 0x7038, 0x7038, 0x7038, 0x0FF8, 0x0038, 0x0FC0, |
0x0000, 0x7FF8, 0x01C0, 0x0E00, 0x7FF8, 0x0000, 0x0000, |
0x01C0, 0x0E00, 0x7FC0, 0x0E00, 0x01C0, 0x0000, 0x0000, |
0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, |
0x01C0, 0x0038, 0x01FF, 0x0038, 0x01C0, 0x0000, 0x0000, |
0x0E00, 0x71C7, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, |
0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, /* 0x7f --- */ |
}; |
|
/* ---------------------------------------------- */ |
unsigned short background_5x7 = 0x0000; /* background */ |
unsigned short foreground_5x7 = 0x7FFF; /* mascara para el color de los textos */ |
unsigned short colores_5x7[] = /* mascaras para los colores */ |
{ 0x0000, 0x1249, 0x2492, 0x36DB, 0x4924, 0x5b6d, 0x6db6, 0x7fff }; |
unsigned short xpos_5x7 = 0; |
unsigned short ypos_5x7 = 0; |
/vga_5x7_putchar.c
0,0 → 1,17
#include "vga.h" |
|
/* ---------------------------------------------- */ |
void vga_putchar5x7(char caracter, unsigned short pos_x, unsigned short pos_y) |
{ |
unsigned short y, scanline, row, scan; |
unsigned ptr = (unsigned)&_VIDEO_RAM_ADDR; |
|
scanline = (caracter - 0x20) * 7; /* bitmap del caracter a mostrar */ |
|
y = pos_y * 7; /* 7 bits de alto por caracter */ |
for(row = 0; row < 7; row++) /* procesamos el caracter */ |
{ /* pintamos la linea */ |
scan = bitmap_font_5x7[scanline++]; |
*(unsigned short *) (ptr + (y++ * 256) + pos_x * 2) = (scan & foreground_5x7) | (background_5x7 & ~scan); |
} |
} |
/vga_5x7_setfgcolor.c
0,0 → 1,6
#include "vga.h" |
|
void vga_setfgcolor5x7(unsigned short color) |
{ |
foreground_5x7 = colores_5x7[color]; |
} |
/vga_drawpixel.c
0,0 → 1,21
#include "vga.h" |
|
void vga_drawpixel(unsigned short x, unsigned short y, unsigned short color) |
{ |
unsigned ptr = (unsigned) &_VIDEO_RAM_ADDR; |
|
unsigned short pixel, mascara = 0x7; |
unsigned short w = x / 5; /* word donde esta el pixel */ |
unsigned short p = 12 - (x % 5) * 3; /* obtenemos el # de pixel dentro del grupo */ |
|
ptr += y * 256 + w * 2; |
|
pixel = *(unsigned short *) ptr; /* obtenemos el valor del grupo de 5 pixels */ |
mascara = ~(0x7 << p); /* mascara para el pixel */ |
color <<= p; /* ponemos el pixel en su sitio */ |
|
pixel &= mascara; /* aplicamos la mascara en el pixel actual */ |
pixel |= color; /* dibujamos el pixel en el hueco de la mascara */ |
|
*(unsigned short *) ptr = pixel; |
} |
/vga.c
0,0 → 1,50
#include "vga.h" |
#include <stdio.h> |
#include <math.h> |
|
#define PI 3.14159265 |
|
char buffer[256]; |
|
void main(void) |
{ |
unsigned n, m, c = 0; |
vga_clearscreen(); |
|
for(m = 0; m < 8; m++) |
{ |
for(n = 0; n < 8; n++) |
{ |
vga_setfgcolor5x7( n ); |
vga_setbgcolor5x7( m ); |
vga_putline5x7("HOLA", 10 + m * 4, 10 + n); |
} |
} |
vga_setfgcolor5x7(7); |
vga_setbgcolor5x7(1); |
|
for(n = 100; n < 540; n++) |
{ |
vga_drawpixel(n, 100, 7); |
vga_drawpixel(n, 380, 7); |
} |
|
for(n = 100; n < 380; n++) |
{ |
vga_drawpixel(100, n, 7); |
vga_drawpixel(540, n, 7); |
} |
|
for(n = 0; n < 360; n++) |
{ |
float x, y; |
x = 320 + 100 * cos(n * (2*PI) / 360.0); |
y = 240 + 100 * sin(n * (2*PI) / 360.0); |
|
//printf("n=%u, x=%f y=%f\r\n", n, x, y); |
//vga_putline5x7(buffer, 5, 5); |
|
vga_drawpixel(x, y, 7); |
} |
|
} |