Load palette/block done and wgt11.c exercising it

This commit is contained in:
Adam Greenwood-Byrne 2021-03-12 13:38:35 +00:00
parent ffaa704be5
commit 101c68b4c9
8 changed files with 410 additions and 262 deletions

View file

@ -8,11 +8,17 @@ all: clean kernel8.img
boot/boot.o: boot/boot.S boot/boot.o: boot/boot.S
$(LLVMPATH)/clang --target=aarch64-elf $(CLANGFLAGS) -c $< -o $@ $(LLVMPATH)/clang --target=aarch64-elf $(CLANGFLAGS) -c $< -o $@
bin/wgt1pal.o: bin/wgt1.pal
$(LLVMPATH)/llvm-objcopy -I binary -O elf64-littleaarch64 -B aarch64 $< $@
bin/wgt1blk.o: bin/wgt1.blk
$(LLVMPATH)/llvm-objcopy -I binary -O elf64-littleaarch64 -B aarch64 $< $@
%.o: %.c %.o: %.c
$(LLVMPATH)/clang --target=aarch64-elf $(CLANGFLAGS) -c $< -o $@ $(LLVMPATH)/clang --target=aarch64-elf $(CLANGFLAGS) -c $< -o $@
kernel8.img: boot/boot.o $(OFILES) kernel8.img: boot/boot.o $(OFILES) bin/wgt1pal.o bin/wgt1blk.o
$(LLVMPATH)/ld.lld -m aarch64elf -nostdlib boot/boot.o $(OFILES) -T boot/link.ld -o kernel8.elf $(LLVMPATH)/ld.lld -m aarch64elf -nostdlib boot/boot.o $(OFILES) bin/wgt1pal.o bin/wgt1blk.o -T boot/link.ld -o kernel8.elf
$(LLVMPATH)/llvm-objcopy -O binary kernel8.elf kernel8.img $(LLVMPATH)/llvm-objcopy -O binary kernel8.elf kernel8.img
clean: clean:

BIN
part12-wgt/bin/wgt1.blk Normal file

Binary file not shown.

BIN
part12-wgt/bin/wgt1.pal Normal file

Binary file not shown.

View file

@ -0,0 +1,81 @@
#include "wgt.h"
#include "include/mem.h"
#include "include/mb.h"
// ######## REQUIRED FUNCTIONS ########
unsigned long state0 = 1000;
unsigned long state1 = 2000;
unsigned long rand(void)
{
unsigned long s1 = state0;
unsigned long s0 = state1;
state0 = s0;
s1 ^= s1 << 23;
s1 ^= s1 >> 17;
s1 ^= s0;
s1 ^= s0 >> 26;
state1 = s1;
return state0 + state1;
}
void wait_msec(unsigned int n)
{
register unsigned long f, t, r;
// Get the current counter frequency
asm volatile ("mrs %0, cntfrq_el0" : "=r"(f));
// Read the current counter
asm volatile ("mrs %0, cntpct_el0" : "=r"(t));
// Calculate expire value for counter
t+=((f/1000)*n)/1000;
do{asm volatile ("mrs %0, cntpct_el0" : "=r"(r));}while(r<t);
}
// ######## STUB FUNCTIONS ########
unsigned int kb = 0;
unsigned int kbhit(void) {
kb++;
return kb / 500;
}
void getch(void) {
wait_msec(0x500000);
kb = 0;
}
// ######## WGT EXAMPLES ########
void wgt11()
{
block part1; /* part of the screen */
color pal[256];
set_clock_rate(get_max_clock());
mem_init();
vga256 ();
extern unsigned char _binary_bin_wgt1_pal_start[];
unsigned char *newpal = &_binary_bin_wgt1_pal_start[0];
wloadpalette (newpal, pal);
wsetpalette (0, 255, pal);
extern unsigned char _binary_bin_wgt1_blk_start[];
unsigned char *newblk = &_binary_bin_wgt1_blk_start[0];
part1 = wloadblock (newblk);
wputblock (0, 0, part1, 0);
wfreeblock(part1);
}
void main()
{
wgt11();
while (1);
}

View file

@ -1,265 +1,5 @@
#include "wgt.h" #include "wgt.h"
/* VGA 256 colour default palette */
unsigned int vgapal[256] = {
rgb( 0, 0, 0),
rgb( 0, 0,170),
rgb( 0,170, 0),
rgb( 0,170,170),
rgb(170, 0, 0),
rgb(170, 0,170),
rgb(170, 85, 0),
rgb(170,170,170),
rgb( 85, 85, 85),
rgb( 85, 85,255),
rgb( 85,255, 85),
rgb( 85,255,255),
rgb(255, 85, 85),
rgb(255, 85,255),
rgb(255,255, 85),
rgb(255,255,255),
rgb( 0, 0, 0),
rgb( 20, 20, 20),
rgb( 32, 32, 32),
rgb( 44, 44, 44),
rgb( 56, 56, 56),
rgb( 68, 68, 68),
rgb( 80, 80, 80),
rgb( 97, 97, 97),
rgb(113,113,113),
rgb(129,129,129),
rgb(145,145,145),
rgb(161,161,161),
rgb(182,182,182),
rgb(202,202,202),
rgb(226,226,226),
rgb(255,255,255),
rgb( 0, 0,255),
rgb( 64, 0,255),
rgb(125, 0,255),
rgb(190, 0,255),
rgb(255, 0,255),
rgb(255, 0,190),
rgb(255, 0,125),
rgb(255, 0, 64),
rgb(255, 0, 0),
rgb(255, 64, 0),
rgb(255,125, 0),
rgb(255,190, 0),
rgb(255,255, 0),
rgb(190,255, 0),
rgb(125,255, 0),
rgb( 64,255, 0),
rgb( 0,255, 0),
rgb( 0,255, 64),
rgb( 0,255,125),
rgb( 0,255,190),
rgb( 0,255,255),
rgb( 0,190,255),
rgb( 0,125,255),
rgb( 0, 64,255),
rgb(125,125,255),
rgb(157,125,255),
rgb(190,125,255),
rgb(222,125,255),
rgb(255,125,255),
rgb(255,125,222),
rgb(255,125,190),
rgb(255,125,157),
rgb(255,125,125),
rgb(255,157,125),
rgb(255,190,125),
rgb(255,222,125),
rgb(255,255,125),
rgb(222,255,125),
rgb(190,255,125),
rgb(157,255,125),
rgb(125,255,125),
rgb(125,255,157),
rgb(125,255,190),
rgb(125,255,222),
rgb(125,255,255),
rgb(125,222,255),
rgb(125,190,255),
rgb(125,157,255),
rgb(182,182,255),
rgb(198,182,255),
rgb(218,182,255),
rgb(234,182,255),
rgb(255,182,255),
rgb(255,182,234),
rgb(255,182,218),
rgb(255,182,198),
rgb(255,182,182),
rgb(255,198,182),
rgb(255,218,182),
rgb(255,234,182),
rgb(255,255,182),
rgb(234,255,182),
rgb(218,255,182),
rgb(198,255,182),
rgb(182,255,182),
rgb(182,255,198),
rgb(182,255,218),
rgb(182,255,234),
rgb(182,255,255),
rgb(182,234,255),
rgb(182,218,255),
rgb(182,198,255),
rgb( 0, 0,113),
rgb( 28, 0,113),
rgb( 56, 0,113),
rgb( 85, 0,113),
rgb(113, 0,113),
rgb(113, 0, 85),
rgb(113, 0, 56),
rgb(113, 0, 28),
rgb(113, 0, 0),
rgb(113, 28, 0),
rgb(113, 56, 0),
rgb(113, 85, 0),
rgb(113,113, 0),
rgb( 85,113, 0),
rgb( 56,113, 0),
rgb( 28,113, 0),
rgb( 0,113, 0),
rgb( 0,113, 28),
rgb( 0,113, 56),
rgb( 0,113, 85),
rgb( 0,113,113),
rgb( 0, 85,113),
rgb( 0, 56,113),
rgb( 0, 28,113),
rgb( 56, 56,113),
rgb( 68, 56,113),
rgb( 85, 56,113),
rgb( 97, 56,113),
rgb(113, 56,113),
rgb(113, 56, 97),
rgb(113, 56, 85),
rgb(113, 56, 68),
rgb(113, 56, 56),
rgb(113, 68, 56),
rgb(113, 85, 56),
rgb(113, 97, 56),
rgb(113,113, 56),
rgb( 97,113, 56),
rgb( 85,113, 56),
rgb( 68,113, 56),
rgb( 56,113, 56),
rgb( 56,113, 68),
rgb( 56,113, 85),
rgb( 56,113, 97),
rgb( 56,113,113),
rgb( 56, 97,113),
rgb( 56, 85,113),
rgb( 56, 68,113),
rgb( 80, 80,113),
rgb( 89, 80,113),
rgb( 97, 80,113),
rgb(105, 80,113),
rgb(113, 80,113),
rgb(113, 80,105),
rgb(113, 80, 97),
rgb(113, 80, 89),
rgb(113, 80, 80),
rgb(113, 89, 80),
rgb(113, 97, 80),
rgb(113,105, 80),
rgb(113,113, 80),
rgb(105,113, 80),
rgb( 97,113, 80),
rgb( 89,113, 80),
rgb( 80,113, 80),
rgb( 80,113, 89),
rgb( 80,113, 97),
rgb( 80,113,105),
rgb( 80,113,113),
rgb( 80,105,113),
rgb( 80, 97,113),
rgb( 80, 89,113),
rgb( 0, 0, 64),
rgb( 16, 0, 64),
rgb( 32, 0, 64),
rgb( 48, 0, 64),
rgb( 64, 0, 64),
rgb( 64, 0, 48),
rgb( 64, 0, 32),
rgb( 64, 0, 16),
rgb( 64, 0, 0),
rgb( 64, 16, 0),
rgb( 64, 32, 0),
rgb( 64, 48, 0),
rgb( 64, 64, 0),
rgb( 48, 64, 0),
rgb( 32, 64, 0),
rgb( 16, 64, 0),
rgb( 0, 64, 0),
rgb( 0, 64, 16),
rgb( 0, 64, 32),
rgb( 0, 64, 48),
rgb( 0, 64, 64),
rgb( 0, 48, 64),
rgb( 0, 32, 64),
rgb( 0, 16, 64),
rgb( 32, 32, 64),
rgb( 40, 32, 64),
rgb( 48, 32, 64),
rgb( 56, 32, 64),
rgb( 64, 32, 64),
rgb( 64, 32, 56),
rgb( 64, 32, 48),
rgb( 64, 32, 40),
rgb( 64, 32, 32),
rgb( 64, 40, 32),
rgb( 64, 48, 32),
rgb( 64, 56, 32),
rgb( 64, 64, 32),
rgb( 56, 64, 32),
rgb( 48, 64, 32),
rgb( 40, 64, 32),
rgb( 32, 64, 32),
rgb( 32, 64, 40),
rgb( 32, 64, 48),
rgb( 32, 64, 56),
rgb( 32, 64, 64),
rgb( 32, 56, 64),
rgb( 32, 48, 64),
rgb( 32, 40, 64),
rgb( 44, 44, 64),
rgb( 48, 44, 64),
rgb( 52, 44, 64),
rgb( 60, 44, 64),
rgb( 64, 44, 64),
rgb( 64, 44, 60),
rgb( 64, 44, 52),
rgb( 64, 44, 48),
rgb( 64, 44, 44),
rgb( 64, 48, 44),
rgb( 64, 52, 44),
rgb( 64, 60, 44),
rgb( 64, 64, 44),
rgb( 60, 64, 44),
rgb( 52, 64, 44),
rgb( 48, 64, 44),
rgb( 44, 64, 44),
rgb( 44, 64, 48),
rgb( 44, 64, 52),
rgb( 44, 64, 60),
rgb( 44, 64, 64),
rgb( 44, 60, 64),
rgb( 44, 52, 64),
rgb( 44, 48, 64),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0)
};
unsigned char vgafont[224][8] = { unsigned char vgafont[224][8] = {
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001

39
part12-wgt/wblock.c Normal file
View file

@ -0,0 +1,39 @@
#include "wgt.h"
#include "include/mem.h"
block wloadblock (unsigned char *data)
{
block ptr;
block orig = NULL;
short *shortdata = (short *)data;
unsigned int width, height, size;
if (data == NULL) {
return NULL;
}
width = *shortdata;
shortdata ++;
data += 2;
height = *shortdata;
shortdata ++;
data += 2;
size = 4 * (width * height) + 12;
if (size > 12)
{
ptr = malloc (size);
if (ptr == NULL)
return NULL;
orig = ptr;
/* store width and height */
*ptr++ = width;
*ptr++ = height;
for (int i=0;i<width*height;i++) *ptr++ = vgapal[*data++]; // Ugly - means we have to set the palette correctly before we load the block
}
return orig;
}

View file

@ -100,3 +100,5 @@ void wsettimerspeed (int speed);
void wstarttimer (void (*rout)(), int speed); void wstarttimer (void (*rout)(), int speed);
void wstoptimer (void); void wstoptimer (void);
void wflipblock (block image, short direction); void wflipblock (block image, short direction);
block wloadblock (unsigned char *data);
void wloadpalette (unsigned char *data, color *pal);

280
part12-wgt/wpal.c Normal file
View file

@ -0,0 +1,280 @@
#include "wgt.h"
void wloadpalette (unsigned char *data, color *pal)
{
unsigned char r, g, b;
int i;
if (data == NULL)
{
return;
}
for (i = 0; i < 256; i++) /* Load in RGB values */
{
r = 4 * *data++;
g = 4 * *data++;
b = 4 * *data++;
wsetrgb (i, r, g, b, pal); /* Set current palette */
}
}
/* VGA 256 colour default palette */
unsigned int vgapal[256] = {
rgb( 0, 0, 0),
rgb( 0, 0,170),
rgb( 0,170, 0),
rgb( 0,170,170),
rgb(170, 0, 0),
rgb(170, 0,170),
rgb(170, 85, 0),
rgb(170,170,170),
rgb( 85, 85, 85),
rgb( 85, 85,255),
rgb( 85,255, 85),
rgb( 85,255,255),
rgb(255, 85, 85),
rgb(255, 85,255),
rgb(255,255, 85),
rgb(255,255,255),
rgb( 0, 0, 0),
rgb( 20, 20, 20),
rgb( 32, 32, 32),
rgb( 44, 44, 44),
rgb( 56, 56, 56),
rgb( 68, 68, 68),
rgb( 80, 80, 80),
rgb( 97, 97, 97),
rgb(113,113,113),
rgb(129,129,129),
rgb(145,145,145),
rgb(161,161,161),
rgb(182,182,182),
rgb(202,202,202),
rgb(226,226,226),
rgb(255,255,255),
rgb( 0, 0,255),
rgb( 64, 0,255),
rgb(125, 0,255),
rgb(190, 0,255),
rgb(255, 0,255),
rgb(255, 0,190),
rgb(255, 0,125),
rgb(255, 0, 64),
rgb(255, 0, 0),
rgb(255, 64, 0),
rgb(255,125, 0),
rgb(255,190, 0),
rgb(255,255, 0),
rgb(190,255, 0),
rgb(125,255, 0),
rgb( 64,255, 0),
rgb( 0,255, 0),
rgb( 0,255, 64),
rgb( 0,255,125),
rgb( 0,255,190),
rgb( 0,255,255),
rgb( 0,190,255),
rgb( 0,125,255),
rgb( 0, 64,255),
rgb(125,125,255),
rgb(157,125,255),
rgb(190,125,255),
rgb(222,125,255),
rgb(255,125,255),
rgb(255,125,222),
rgb(255,125,190),
rgb(255,125,157),
rgb(255,125,125),
rgb(255,157,125),
rgb(255,190,125),
rgb(255,222,125),
rgb(255,255,125),
rgb(222,255,125),
rgb(190,255,125),
rgb(157,255,125),
rgb(125,255,125),
rgb(125,255,157),
rgb(125,255,190),
rgb(125,255,222),
rgb(125,255,255),
rgb(125,222,255),
rgb(125,190,255),
rgb(125,157,255),
rgb(182,182,255),
rgb(198,182,255),
rgb(218,182,255),
rgb(234,182,255),
rgb(255,182,255),
rgb(255,182,234),
rgb(255,182,218),
rgb(255,182,198),
rgb(255,182,182),
rgb(255,198,182),
rgb(255,218,182),
rgb(255,234,182),
rgb(255,255,182),
rgb(234,255,182),
rgb(218,255,182),
rgb(198,255,182),
rgb(182,255,182),
rgb(182,255,198),
rgb(182,255,218),
rgb(182,255,234),
rgb(182,255,255),
rgb(182,234,255),
rgb(182,218,255),
rgb(182,198,255),
rgb( 0, 0,113),
rgb( 28, 0,113),
rgb( 56, 0,113),
rgb( 85, 0,113),
rgb(113, 0,113),
rgb(113, 0, 85),
rgb(113, 0, 56),
rgb(113, 0, 28),
rgb(113, 0, 0),
rgb(113, 28, 0),
rgb(113, 56, 0),
rgb(113, 85, 0),
rgb(113,113, 0),
rgb( 85,113, 0),
rgb( 56,113, 0),
rgb( 28,113, 0),
rgb( 0,113, 0),
rgb( 0,113, 28),
rgb( 0,113, 56),
rgb( 0,113, 85),
rgb( 0,113,113),
rgb( 0, 85,113),
rgb( 0, 56,113),
rgb( 0, 28,113),
rgb( 56, 56,113),
rgb( 68, 56,113),
rgb( 85, 56,113),
rgb( 97, 56,113),
rgb(113, 56,113),
rgb(113, 56, 97),
rgb(113, 56, 85),
rgb(113, 56, 68),
rgb(113, 56, 56),
rgb(113, 68, 56),
rgb(113, 85, 56),
rgb(113, 97, 56),
rgb(113,113, 56),
rgb( 97,113, 56),
rgb( 85,113, 56),
rgb( 68,113, 56),
rgb( 56,113, 56),
rgb( 56,113, 68),
rgb( 56,113, 85),
rgb( 56,113, 97),
rgb( 56,113,113),
rgb( 56, 97,113),
rgb( 56, 85,113),
rgb( 56, 68,113),
rgb( 80, 80,113),
rgb( 89, 80,113),
rgb( 97, 80,113),
rgb(105, 80,113),
rgb(113, 80,113),
rgb(113, 80,105),
rgb(113, 80, 97),
rgb(113, 80, 89),
rgb(113, 80, 80),
rgb(113, 89, 80),
rgb(113, 97, 80),
rgb(113,105, 80),
rgb(113,113, 80),
rgb(105,113, 80),
rgb( 97,113, 80),
rgb( 89,113, 80),
rgb( 80,113, 80),
rgb( 80,113, 89),
rgb( 80,113, 97),
rgb( 80,113,105),
rgb( 80,113,113),
rgb( 80,105,113),
rgb( 80, 97,113),
rgb( 80, 89,113),
rgb( 0, 0, 64),
rgb( 16, 0, 64),
rgb( 32, 0, 64),
rgb( 48, 0, 64),
rgb( 64, 0, 64),
rgb( 64, 0, 48),
rgb( 64, 0, 32),
rgb( 64, 0, 16),
rgb( 64, 0, 0),
rgb( 64, 16, 0),
rgb( 64, 32, 0),
rgb( 64, 48, 0),
rgb( 64, 64, 0),
rgb( 48, 64, 0),
rgb( 32, 64, 0),
rgb( 16, 64, 0),
rgb( 0, 64, 0),
rgb( 0, 64, 16),
rgb( 0, 64, 32),
rgb( 0, 64, 48),
rgb( 0, 64, 64),
rgb( 0, 48, 64),
rgb( 0, 32, 64),
rgb( 0, 16, 64),
rgb( 32, 32, 64),
rgb( 40, 32, 64),
rgb( 48, 32, 64),
rgb( 56, 32, 64),
rgb( 64, 32, 64),
rgb( 64, 32, 56),
rgb( 64, 32, 48),
rgb( 64, 32, 40),
rgb( 64, 32, 32),
rgb( 64, 40, 32),
rgb( 64, 48, 32),
rgb( 64, 56, 32),
rgb( 64, 64, 32),
rgb( 56, 64, 32),
rgb( 48, 64, 32),
rgb( 40, 64, 32),
rgb( 32, 64, 32),
rgb( 32, 64, 40),
rgb( 32, 64, 48),
rgb( 32, 64, 56),
rgb( 32, 64, 64),
rgb( 32, 56, 64),
rgb( 32, 48, 64),
rgb( 32, 40, 64),
rgb( 44, 44, 64),
rgb( 48, 44, 64),
rgb( 52, 44, 64),
rgb( 60, 44, 64),
rgb( 64, 44, 64),
rgb( 64, 44, 60),
rgb( 64, 44, 52),
rgb( 64, 44, 48),
rgb( 64, 44, 44),
rgb( 64, 48, 44),
rgb( 64, 52, 44),
rgb( 64, 60, 44),
rgb( 64, 64, 44),
rgb( 60, 64, 44),
rgb( 52, 64, 44),
rgb( 48, 64, 44),
rgb( 44, 64, 44),
rgb( 44, 64, 48),
rgb( 44, 64, 52),
rgb( 44, 64, 60),
rgb( 44, 64, 64),
rgb( 44, 60, 64),
rgb( 44, 52, 64),
rgb( 44, 48, 64),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0),
rgb( 0, 0, 0)
};