Merge branch 'release/2.1.0'
This commit is contained in:
commit
79d2d1a7cc
|
@ -1,13 +0,0 @@
|
||||||
all: makall
|
|
||||||
|
|
||||||
makall: vga/vga.o
|
|
||||||
sync
|
|
||||||
|
|
||||||
clean:
|
|
||||||
(cd vga; make clean)
|
|
||||||
|
|
||||||
vga/vga.o:
|
|
||||||
(cd vga; make)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
FREEC=gcc -O4 -nostdinc -ffreestanding -fno-builtin -fomit-frame-pointer -Wall -I ../../Include -c -o
|
|
||||||
PARTIAL=-r
|
|
||||||
OBJS= vgahard.o \
|
|
||||||
vgatxt.o
|
|
||||||
|
|
||||||
all:
|
|
||||||
nasm -f elf -o vgahard.o vgahard.asm
|
|
||||||
|
|
||||||
$(FREEC) vgatxt.o vgatxt.c
|
|
||||||
|
|
||||||
ld $(PARTIAL) -o vga.o $(OBJS)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.o
|
|
||||||
rm -f *.bin
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[BITS 32]
|
|
||||||
|
|
||||||
|
|
||||||
SECTION .text
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
#include <vga.h>
|
|
|
@ -1,14 +1,36 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#define sti() __asm__ ("sti"::)
|
|
||||||
#define cli() __asm__ ("cli"::)
|
/******************************************************************************/
|
||||||
#define nop() __asm__ ("nop"::)
|
|
||||||
#define iret() __asm__ ("iret"::)
|
#define sti() asm("sti"::)
|
||||||
|
|
||||||
|
#define cli() asm("cli"::)
|
||||||
|
|
||||||
|
#define nop() asm("nop"::)
|
||||||
|
|
||||||
|
#define iret() asm("addl $0x0C, %esp; \
|
||||||
|
iret;")
|
||||||
|
|
||||||
|
#define irqendmaster() asm("movb $0x20,%al; \
|
||||||
|
outb %al,$0x20;")
|
||||||
|
|
||||||
|
#define irqendslave() asm("movb $0x20,%al; \
|
||||||
|
outb %al,$0xA0;")
|
||||||
|
|
||||||
|
#define lidt(dtr) asm ("lidtl %0"::"m" (*dtr))
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
#define outb(port,value) \
|
#define outb(port,value) \
|
||||||
asm volatile ("outb %%al,%%dx"::"d" (port), "a" (value));
|
asm volatile ("outb %%al,%%dx"::"d" (port), "a" (value));
|
||||||
|
|
||||||
#define outw(port,value) \
|
#define outw(port,value) \
|
||||||
asm volatile ("outb %%ax,%%dx"::"d" (port), "a" (value));
|
asm volatile ("outw %%ax,%%dx"::"d" (port), "a" (value));
|
||||||
|
|
||||||
|
#define outd(port,value) \
|
||||||
|
asm volatile ("outl %%eax,%%dx"::"d" (port), "a" (value));
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
#define inb(port) ({ \
|
#define inb(port) ({ \
|
||||||
u8 _v; \
|
u8 _v; \
|
||||||
|
@ -20,4 +42,26 @@
|
||||||
u16 _v; \
|
u16 _v; \
|
||||||
asm volatile ("inw %%dx,%%ax" : "=a" (_v) : "d"(port)); \
|
asm volatile ("inw %%dx,%%ax" : "=a" (_v) : "d"(port)); \
|
||||||
_v; \
|
_v; \
|
||||||
})
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define ind(port) ({ \
|
||||||
|
u32 _v; \
|
||||||
|
asm volatile ("inl %%dx,%%eax" : "=a" (_v) : "d"(port)); \
|
||||||
|
_v; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
/* pas terminé */
|
||||||
|
|
||||||
|
#define rolb(input,rotate) ({ \
|
||||||
|
u32 _v; \
|
||||||
|
asm volatile ("roll %1,%0" : "=g" (_v) : "cI" (rotate), "0" (input)); \
|
||||||
|
_v; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
#ifndef __TL_CTYPE_H
|
||||||
|
#define __TL_CTYPE_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern char g_ctype[];
|
||||||
|
|
||||||
|
#define CT_UP 0x01 /* upper case */
|
||||||
|
#define CT_LOW 0x02 /* lower case */
|
||||||
|
#define CT_DIG 0x04 /* digit */
|
||||||
|
#define CT_CTL 0x08 /* control */
|
||||||
|
#define CT_PUN 0x10 /* punctuation */
|
||||||
|
#define CT_WHT 0x20 /* white space (space/cr/lf/tab) */
|
||||||
|
#define CT_HEX 0x40 /* hex digit */
|
||||||
|
#define CT_SP 0x80 /* hard space (0x20) */
|
||||||
|
|
||||||
|
/* without the cast to unsigned, DJGPP complains (using -Wall) */
|
||||||
|
#define isalnum(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_UP | CT_LOW | CT_DIG))
|
||||||
|
#define isalpha(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_UP | CT_LOW))
|
||||||
|
#define iscntrl(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_CTL))
|
||||||
|
#define isdigit(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_DIG))
|
||||||
|
#define isgraph(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_PUN | CT_UP | CT_LOW | CT_DIG))
|
||||||
|
#define islower(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_LOW))
|
||||||
|
#define isprint(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_PUN | CT_UP | CT_LOW | CT_DIG | CT_SP))
|
||||||
|
#define ispunct(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_PUN))
|
||||||
|
#define isspace(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_WHT))
|
||||||
|
#define isupper(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_UP))
|
||||||
|
#define isxdigit(c) ((g_ctype + 1)[(unsigned)(c)] & (CT_DIG | CT_HEX))
|
||||||
|
#define isascii(c) ((unsigned)(c) <= 0x7F)
|
||||||
|
#define toascii(c) ((unsigned)(c) & 0x7F)
|
||||||
|
|
||||||
|
#define tolower(c) (isupper(c) ? c + 'a' - 'A' : c)
|
||||||
|
#define toupper(c) (islower(c) ? c + 'A' - 'a' : c)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,31 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define INTGATE 0x8E00 /* utilise pour gerer les interruptions */
|
||||||
|
#define TRAPGATE 0x8F00 /* utilise pour faire des appels systemes */
|
||||||
|
#define TASKGATE 0x8500 /* utilise pour commuter des taches */
|
||||||
|
#define CALLGATE 0x8C00 /* utilise pour appeler du code */
|
||||||
|
#define LDTDES 0x8200 /* utilise pour pointer une LDT */
|
||||||
|
|
||||||
|
/* descripteur de segment */
|
||||||
|
typedef struct idtdes {
|
||||||
|
u16 offset0_15;
|
||||||
|
u16 select;
|
||||||
|
u16 type;
|
||||||
|
u16 offset16_31;
|
||||||
|
} idtdes __attribute__ ((packed));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void initidt(void);
|
||||||
|
void setidt(u32 offset, u16 select, u16 type,u16 index);
|
||||||
|
void makeidtdes(u32 offset, u16 select, u16 type, idtdes* desc);
|
||||||
|
void initpic(void);
|
||||||
|
void enableirq(u8 irq);
|
||||||
|
void disableirq(u8 irq);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
#define SCAN_CTRL 0x1D
|
||||||
|
#define SCAN_LEFTSHIFT 0x2A
|
||||||
|
#define SCAN_RIGHTSHIFT 0x36
|
||||||
|
#define SCAN_ALT 0x38
|
||||||
|
#define SCAN_F1 0x3B
|
||||||
|
#define SCAN_F2 0x3C
|
||||||
|
#define SCAN_F3 0x3D
|
||||||
|
#define SCAN_F4 0x3E
|
||||||
|
#define SCAN_F5 0x3F
|
||||||
|
#define SCAN_F6 0x40
|
||||||
|
#define SCAN_F7 0x41
|
||||||
|
#define SCAN_F8 0x42
|
||||||
|
#define SCAN_F9 0x43
|
||||||
|
#define SCAN_F10 0x44
|
||||||
|
#define SCAN_F11 0x57
|
||||||
|
#define SCAN_F12 0x58
|
||||||
|
#define SCAN_CAPSLOCK 0x3A
|
||||||
|
#define SCAN_NUMLOCK 0x45
|
||||||
|
#define SCAN_SCROLLLOCK 0x46
|
||||||
|
|
||||||
|
/* bit de statut
|
||||||
|
0x0100 est reservé pour les touches non-ASCII */
|
||||||
|
#define STATUS_ALT 0x0200
|
||||||
|
#define STATUS_CTRL 0x0400
|
||||||
|
#define STATUS_SHIFT 0x0800
|
||||||
|
#define STATUS_ANY (STATUS_ALT | STATUS_CTRL | STATUS_SHIFT)
|
||||||
|
#define STATUS_CAPS 0x1000
|
||||||
|
#define STATUS_NUM 0x2000
|
||||||
|
#define STATUS_SCRL 0x4000
|
||||||
|
|
||||||
|
/* "ASCII" values for non-ASCII keys. All of these are user-defined.*/
|
||||||
|
|
||||||
|
#define KEY_F1 0x80
|
||||||
|
#define KEY_F2 (KEY_F1 + 1)
|
||||||
|
#define KEY_F3 (KEY_F2 + 1)
|
||||||
|
#define KEY_F4 (KEY_F3 + 1)
|
||||||
|
#define KEY_F5 (KEY_F4 + 1)
|
||||||
|
#define KEY_F6 (KEY_F5 + 1)
|
||||||
|
#define KEY_F7 (KEY_F6 + 1)
|
||||||
|
#define KEY_F8 (KEY_F7 + 1)
|
||||||
|
#define KEY_F9 (KEY_F8 + 1)
|
||||||
|
#define KEY_F10 (KEY_F9 + 1)
|
||||||
|
#define KEY_F11 (KEY_F10 + 1)
|
||||||
|
#define KEY_F12 (KEY_F11 + 1)
|
||||||
|
#define KEY_INS 0x90
|
||||||
|
#define KEY_DEL (KEY_INS + 1)
|
||||||
|
#define KEY_HOME (KEY_DEL + 1)
|
||||||
|
#define KEY_END (KEY_HOME + 1)
|
||||||
|
#define KEY_PGUP (KEY_END + 1)
|
||||||
|
#define KEY_PGDN (KEY_PGUP + 1)
|
||||||
|
#define KEY_LFT (KEY_PGDN + 1)
|
||||||
|
#define KEY_UP (KEY_LFT + 1)
|
||||||
|
#define KEY_DN (KEY_UP + 1)
|
||||||
|
#define KEY_RT (KEY_DN + 1)
|
||||||
|
#define KEY_PRNT (KEY_RT + 1)
|
||||||
|
#define KEY_PAUSE (KEY_PRNT + 1)
|
||||||
|
#define KEY_LWIN (KEY_PAUSE + 1)
|
||||||
|
#define KEY_RWIN (KEY_LWIN + 1)
|
||||||
|
#define KEY_MENU (KEY_RWIN + 1)
|
||||||
|
|
||||||
|
|
||||||
|
void keyboard();
|
|
@ -0,0 +1,5 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
void memset(void *dst, u8 val, u32 count,u32 size);
|
||||||
|
void memcpy(void *src, void *dst, u32 count, u32 size);
|
||||||
|
u32 memcmp(void *src, void *dst, u32 count, u32 size);
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
void outreg(u16 port,u8 *src,u16 num);
|
||||||
|
void outregsame(u16 port,u8 *src,u16 num);
|
||||||
|
void inreg(u16 port,u8 *src,u16 num);
|
||||||
|
void inregsame(u16 port,u8 *src,u16 num);
|
|
@ -1,3 +0,0 @@
|
||||||
#include "types.h"
|
|
||||||
|
|
||||||
void memset(void *dst, u8 val, u16 count,u32 size);
|
|
|
@ -0,0 +1 @@
|
||||||
|
void timer();
|
|
@ -1,11 +1,63 @@
|
||||||
#ifndef I386_TYPE
|
#ifndef I386_TYPE
|
||||||
#define I386_TYPE
|
#define I386_TYPE
|
||||||
|
|
||||||
typedef unsigned char u8;
|
typedef unsigned char u8;
|
||||||
typedef unsigned short u16;
|
typedef unsigned short u16;
|
||||||
typedef unsigned int u32;
|
typedef unsigned int u32;
|
||||||
typedef unsigned char uchar;
|
typedef unsigned char uchar;
|
||||||
typedef int bool;
|
typedef int bool;
|
||||||
|
|
||||||
|
struct dtr {
|
||||||
|
|
||||||
|
u16 limite;
|
||||||
|
|
||||||
|
u32 base;
|
||||||
|
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
#define true 1;
|
#define true 1;
|
||||||
#define false 0;
|
#define false 0;
|
||||||
|
#define NULL 0x0000;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern char ctype[];
|
||||||
|
|
||||||
|
#define CT_UP 0x01 /* upper case */
|
||||||
|
#define CT_LOW 0x02 /* lower case */
|
||||||
|
#define CT_DIG 0x04 /* digit */
|
||||||
|
#define CT_CTL 0x08 /* control */
|
||||||
|
#define CT_PUN 0x10 /* punctuation */
|
||||||
|
#define CT_WHT 0x20 /* white space (space/cr/lf/tab) */
|
||||||
|
#define CT_HEX 0x40 /* hex digit */
|
||||||
|
#define CT_SP 0x80 /* hard space (0x20) */
|
||||||
|
|
||||||
|
/* without the cast to unsigned, DJGPP complains (using -Wall) */
|
||||||
|
#define isalnum(c) ((ctype + 1)[(unsigned)(c)] & (CT_UP | CT_LOW | CT_DIG))
|
||||||
|
#define isalpha(c) ((ctype + 1)[(unsigned)(c)] & (CT_UP | CT_LOW))
|
||||||
|
#define iscntrl(c) ((ctype + 1)[(unsigned)(c)] & (CT_CTL))
|
||||||
|
#define isdigit(c) ((ctype + 1)[(unsigned)(c)] & (CT_DIG))
|
||||||
|
#define isgraph(c) ((ctype + 1)[(unsigned)(c)] & (CT_PUN | CT_UP | CT_LOW | CT_DIG))
|
||||||
|
#define islower(c) ((ctype + 1)[(unsigned)(c)] & (CT_LOW))
|
||||||
|
#define isprint(c) ((ctype + 1)[(unsigned)(c)] & (CT_PUN | CT_UP | CT_LOW | CT_DIG | CT_SP))
|
||||||
|
#define ispunct(c) ((ctype + 1)[(unsigned)(c)] & (CT_PUN))
|
||||||
|
#define isspace(c) ((ctype + 1)[(unsigned)(c)] & (CT_WHT))
|
||||||
|
#define isupper(c) ((ctype + 1)[(unsigned)(c)] & (CT_UP))
|
||||||
|
#define isxdigit(c) ((ctype + 1)[(unsigned)(c)] & (CT_DIG | CT_HEX))
|
||||||
|
#define isascii(c) ((unsigned)(c) <= 0x7F)
|
||||||
|
#define toascii(c) ((unsigned)(c) & 0x7F)
|
||||||
|
|
||||||
|
#define tolower(c) (isupper(c) ? c + 'a' - 'A' : c)
|
||||||
|
#define toupper(c) (islower(c) ? c + 'A' - 'a' : c)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,25 @@
|
||||||
|
|
||||||
typedef u8 mode_def[64];
|
typedef u8 mode_def[64];
|
||||||
|
|
||||||
void print (u8* string);
|
|
||||||
void cls (void);
|
u32 setvmode(u8);
|
||||||
u16 setvmode(u8);
|
u32 loadfont(u8* def,u8 size,u8 font);
|
||||||
|
void gotoscr(u16 x,u16 y);
|
||||||
|
void useplane(u8 plan);
|
||||||
|
u8 getfont(u8 num);
|
||||||
|
void setfont(u8 num);
|
||||||
|
void waitvretrace (void);
|
||||||
|
void waithretrace (void);
|
||||||
|
void enablecursor (void);
|
||||||
|
void disablecursor (void);
|
||||||
|
void enablescroll (void);
|
||||||
|
void disablescroll (void);
|
||||||
|
void (*writepxl)(u16 x, u16 y, u32 c);
|
||||||
|
void (*showchar)(u16 coordx,u16 coordy,u8 thechar,u8 attrib);
|
||||||
|
void (*fill)(u8 attrib);
|
||||||
|
void (*scroll)(u8 lines,u8 attrib);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
void showhex(u8 src);
|
||||||
|
void putchar(u8 thechar);
|
||||||
|
void print(u8* string);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
all: makall
|
all: makall
|
||||||
|
|
||||||
makall:
|
makall: iflop/iflop.com mbrol/mbrol.com
|
||||||
sync
|
sync
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@ -16,4 +16,3 @@ mbrol/mbrol.com:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,259 @@
|
||||||
|
/* Police de caract鑽e fine 8x16 */
|
||||||
|
static u8 font8x16 [4096] = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xBD, 0x99, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x36, 0x7F, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7, 0xE7, 0xE7, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0F, 0x07, 0x0D, 0x19, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7, 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x40, 0x60, 0x70, 0x7C, 0x7F, 0x7C, 0x70, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x03, 0x07, 0x1F, 0x7F, 0x1F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3E, 0x63, 0x30, 0x1C, 0x36, 0x63, 0x63, 0x36, 0x1C, 0x06, 0x63, 0x3E, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0C, 0x06, 0x7F, 0x06, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x7F, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x3E, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x7F, 0x7F, 0x3E, 0x3E, 0x1C, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x42, 0x42, 0x42, 0xFF, 0x42, 0x42, 0x42, 0xFF, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x10, 0x7E, 0x90, 0x90, 0x90, 0x7C, 0x12, 0x12, 0x12, 0xFC, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x61, 0x91, 0x92, 0x64, 0x08, 0x10, 0x26, 0x49, 0x89, 0x86, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x70, 0x88, 0x88, 0x88, 0x50, 0x60, 0x91, 0x8A, 0x84, 0x4A, 0x31, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x18, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x06, 0x18, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x60, 0x18, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x10, 0x92, 0x54, 0x38, 0xFE, 0x38, 0x54, 0x92, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x10, 0x20, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x83, 0x85, 0x89, 0x91, 0xA1, 0xC1, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x10, 0x30, 0x50, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x01, 0x02, 0x3C, 0x40, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x01, 0x02, 0x3C, 0x02, 0x01, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x02, 0x06, 0x0A, 0x12, 0x22, 0x42, 0x82, 0xFF, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x80, 0x80, 0x80, 0xFC, 0x02, 0x01, 0x01, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x80, 0xBC, 0xC2, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x81, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x81, 0x42, 0x3C, 0x42, 0x81, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x81, 0x43, 0x3D, 0x01, 0x01, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x10, 0x20, 0x00, 0x00,
|
||||||
|
0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x38, 0x44, 0x82, 0x82, 0x04, 0x08, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x99, 0xA5, 0xA5, 0xA5, 0x9E, 0x80, 0x41, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x24, 0x42, 0x81, 0x81, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFC, 0x42, 0x41, 0x41, 0x42, 0x7C, 0x42, 0x41, 0x41, 0x42, 0xFC, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFC, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0xFC, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x80, 0x80, 0x80, 0x80, 0xFC, 0x80, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x80, 0x80, 0x80, 0x80, 0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x81, 0x80, 0x9F, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0x82, 0x84, 0x88, 0x90, 0xE0, 0x90, 0x88, 0x84, 0x82, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0xC3, 0xA5, 0x99, 0x99, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0xC1, 0xA1, 0x91, 0x89, 0x85, 0x83, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFC, 0x82, 0x81, 0x81, 0x82, 0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x81, 0x81, 0x81, 0x81, 0x89, 0x85, 0x42, 0x3D, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFC, 0x82, 0x81, 0x81, 0x82, 0xFC, 0x90, 0x88, 0x84, 0x82, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x42, 0x81, 0x80, 0x40, 0x3C, 0x02, 0x01, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFE, 0x92, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x99, 0x99, 0xA5, 0xA5, 0x42, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x81, 0x81, 0x81, 0x42, 0x24, 0x18, 0x24, 0x42, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x82, 0x82, 0x82, 0x82, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x01, 0x01, 0x02, 0x04, 0x18, 0x20, 0x40, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x7E, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x7E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x24, 0x42, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x02, 0x02, 0x7E, 0x82, 0x82, 0x7D, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x80, 0x80, 0x80, 0x80, 0xBC, 0xC2, 0x81, 0x81, 0x81, 0xC2, 0xBC, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x80, 0x80, 0x80, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x01, 0x01, 0x01, 0x01, 0x3D, 0x43, 0x81, 0x81, 0x81, 0x43, 0x3D, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x81, 0xFF, 0x80, 0x40, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0E, 0x11, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x43, 0x81, 0x81, 0x43, 0x3D, 0x01, 0x02, 0x7C, 0x00, 0x00,
|
||||||
|
0x00, 0x80, 0x80, 0x80, 0x80, 0xBC, 0xC2, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x08, 0x08, 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x02, 0x02, 0x00, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x44, 0x38, 0x00, 0x00,
|
||||||
|
0x00, 0x80, 0x80, 0x80, 0x80, 0x82, 0x84, 0x88, 0x90, 0xA8, 0xC4, 0x82, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xC2, 0x81, 0x81, 0x81, 0xC2, 0xBC, 0x80, 0x80, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x43, 0x81, 0x81, 0x81, 0x43, 0x3D, 0x01, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xC1, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x81, 0x80, 0x7E, 0x01, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x43, 0x3D, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92, 0x92, 0x92, 0xAA, 0x44, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x42, 0x24, 0x18, 0x24, 0x42, 0x81, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x43, 0x3D, 0x01, 0x02, 0x7C, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x02, 0x04, 0x18, 0x20, 0x40, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x04, 0x08, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x40, 0x20, 0x10, 0x10, 0x10, 0x08, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x70, 0x99, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x36, 0x63, 0x63, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1E, 0x33, 0x61, 0x60, 0x60, 0x61, 0x33, 0x1E, 0x06, 0x03, 0x3E, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x06, 0x0C, 0x18, 0x00, 0x3E, 0x63, 0x7F, 0x60, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x08, 0x1C, 0x36, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x66, 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x30, 0x18, 0x0C, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x1C, 0x36, 0x1C, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C, 0x0C, 0x06, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x08, 0x1C, 0x36, 0x00, 0x3E, 0x63, 0x7F, 0x60, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x66, 0x66, 0x00, 0x3E, 0x63, 0x7F, 0x60, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x30, 0x18, 0x0C, 0x00, 0x3E, 0x63, 0x7F, 0x60, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x63, 0x63, 0x08, 0x1C, 0x36, 0x63, 0x63, 0x7F, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x1C, 0x36, 0x1C, 0x00, 0x1C, 0x36, 0x63, 0x63, 0x7F, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0C, 0x18, 0x30, 0x00, 0x7F, 0x33, 0x30, 0x3E, 0x30, 0x33, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x6E, 0x3B, 0x1B, 0x7E, 0xD8, 0xDC, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1F, 0x36, 0x66, 0x66, 0x7F, 0x66, 0x66, 0x66, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x08, 0x1C, 0x36, 0x00, 0x3E, 0x63, 0x63, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x63, 0x63, 0x00, 0x3E, 0x63, 0x63, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x30, 0x18, 0x0C, 0x00, 0x3E, 0x63, 0x63, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x3C, 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x30, 0x18, 0x0C, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x63, 0x63, 0x00, 0x63, 0x63, 0x63, 0x63, 0x3F, 0x03, 0x06, 0x3C, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x63, 0x63, 0x1C, 0x36, 0x63, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x63, 0x63, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x18, 0x7E, 0xC3, 0xC0, 0xC0, 0xC3, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x1C, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x73, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xFC, 0x66, 0x66, 0x7C, 0x62, 0x66, 0x6F, 0x66, 0x66, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0E, 0x1B, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0C, 0x18, 0x30, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0C, 0x18, 0x30, 0x00, 0x3E, 0x63, 0x63, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0C, 0x18, 0x30, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x3B, 0x6E, 0x00, 0x6E, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x6E, 0x00, 0x63, 0x73, 0x7B, 0x7F, 0x6F, 0x67, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x60, 0xE0, 0x63, 0x66, 0x6C, 0x18, 0x30, 0x6E, 0xC3, 0x06, 0x0C, 0x1F, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x60, 0xE0, 0x63, 0x66, 0x6C, 0x18, 0x33, 0x67, 0xCF, 0x1F, 0x03, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x1B, 0x36, 0x6C, 0x36, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x6C, 0x36, 0x1B, 0x36, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x00, 0x00,
|
||||||
|
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x00, 0x00,
|
||||||
|
0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00,
|
||||||
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3B, 0x6E, 0x6C, 0x6C, 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3E, 0x63, 0x7E, 0x63, 0x63, 0x7E, 0x60, 0x60, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7F, 0x63, 0x63, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x7F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7F, 0x63, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x63, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x6C, 0x6C, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3B, 0x6E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1C, 0x36, 0x63, 0x63, 0x7F, 0x63, 0x63, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x36, 0x36, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C, 0x3E, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x03, 0x06, 0x7E, 0xDB, 0xDB, 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x3E, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3B, 0x6E, 0x00, 0x3B, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x70, 0xD8, 0x30, 0x60, 0xC8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
231
lib/8x8fnt.c
231
lib/8x8fnt.c
|
@ -1,130 +1,131 @@
|
||||||
|
/* Police de caract鑽e fine 8x8 */
|
||||||
static u8 font8x8 [2048] = {
|
static u8 font8x8 [2048] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E,
|
||||||
0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E, 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
|
0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E, 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
|
||||||
0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0x38, 0xFE, 0xFE, 0xD6, 0x10, 0x38,
|
0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0x38, 0xFE, 0xFE, 0x7C, 0x38, 0x7C,
|
||||||
0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x7C, 0x10, 0x38, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00,
|
0x10, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x7C, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00,
|
||||||
0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00,
|
0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00,
|
||||||
0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78,
|
0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78,
|
||||||
0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0,
|
0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0,
|
||||||
0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0, 0x18, 0xDB, 0x3C, 0xE7, 0xE7, 0x3C, 0xDB, 0x18,
|
0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0, 0x99, 0x5A, 0x3C, 0xE7, 0xE7, 0x3C, 0x5A, 0x99,
|
||||||
0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00, 0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00,
|
0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00, 0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00,
|
||||||
0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
|
0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
|
||||||
0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00, 0x3E, 0x61, 0x3C, 0x66, 0x66, 0x3C, 0x86, 0x7C,
|
0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00, 0x3E, 0x63, 0x38, 0x6C, 0x6C, 0x38, 0xCC, 0x78,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF,
|
||||||
0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00,
|
0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00,
|
||||||
0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00,
|
0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00,
|
||||||
0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00,
|
0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00,
|
||||||
0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00,
|
0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, 0x00,
|
||||||
0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
|
0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00,
|
||||||
0x18, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x18, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
|
0x20, 0x78, 0xA0, 0x70, 0x28, 0xF0, 0x20, 0x00, 0xC8, 0xC8, 0x10, 0x20, 0x40, 0x98, 0x98, 0x00,
|
||||||
0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x70, 0x88, 0x50, 0x20, 0x54, 0x88, 0x74, 0x00, 0x60, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00,
|
0x20, 0x40, 0x80, 0x80, 0x80, 0x40, 0x20, 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00,
|
||||||
0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
|
0x00, 0x20, 0xA8, 0x70, 0x70, 0xA8, 0x20, 0x00, 0x00, 0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00,
|
||||||
0x38, 0x6C, 0xC6, 0xD6, 0xC6, 0x6C, 0x38, 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00,
|
0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00, 0x40, 0xC0, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00,
|
||||||
0x7C, 0xC6, 0x06, 0x1C, 0x30, 0x66, 0xFE, 0x00, 0x7C, 0xC6, 0x06, 0x3C, 0x06, 0xC6, 0x7C, 0x00,
|
0x70, 0x88, 0x08, 0x10, 0x20, 0x40, 0xF8, 0x00, 0x70, 0x88, 0x08, 0x10, 0x08, 0x88, 0x70, 0x00,
|
||||||
0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x1E, 0x00, 0xFE, 0xC0, 0xC0, 0xFC, 0x06, 0xC6, 0x7C, 0x00,
|
0x08, 0x18, 0x28, 0x48, 0xFC, 0x08, 0x08, 0x00, 0xF8, 0x80, 0x80, 0xF0, 0x08, 0x88, 0x70, 0x00,
|
||||||
0x38, 0x60, 0xC0, 0xFC, 0xC6, 0xC6, 0x7C, 0x00, 0xFE, 0xC6, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
|
0x20, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70, 0x00, 0xF8, 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, 0x00,
|
||||||
0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0x00, 0x7C, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00,
|
0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00, 0x70, 0x88, 0x88, 0x78, 0x08, 0x08, 0x70, 0x00,
|
||||||
0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
|
0x00, 0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x20,
|
||||||
0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00,
|
0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00,
|
||||||
0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00,
|
0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80, 0x00, 0x78, 0x84, 0x04, 0x08, 0x10, 0x00, 0x10, 0x00,
|
||||||
0x7C, 0xC6, 0xDE, 0xDE, 0xDE, 0xC0, 0x78, 0x00, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00,
|
0x70, 0x88, 0x88, 0xA8, 0xB8, 0x80, 0x78, 0x00, 0x20, 0x50, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x00,
|
||||||
0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00, 0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00,
|
0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0xF0, 0x00, 0x70, 0x88, 0x80, 0x80, 0x80, 0x88, 0x70, 0x00,
|
||||||
0xF8, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0x62, 0x68, 0x78, 0x68, 0x62, 0xFE, 0x00,
|
0xF0, 0x88, 0x88, 0x88, 0x88, 0x88, 0xF0, 0x00, 0xF8, 0x80, 0x80, 0xE0, 0x80, 0x80, 0xF8, 0x00,
|
||||||
0xFE, 0x62, 0x68, 0x78, 0x68, 0x60, 0xF0, 0x00, 0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3A, 0x00,
|
0xF8, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x80, 0x00, 0x70, 0x88, 0x80, 0x80, 0x98, 0x88, 0x78, 0x00,
|
||||||
0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00,
|
||||||
0x1E, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xE6, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00,
|
0x38, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, 0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x00,
|
||||||
0xF0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00, 0x82, 0xC6, 0xAA, 0x92, 0x82, 0x82, 0x82, 0x00,
|
||||||
0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0x84, 0xC4, 0xA4, 0x94, 0x8C, 0x84, 0x84, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
|
||||||
0xFC, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xCE, 0x7C, 0x0E,
|
0xF0, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x80, 0x00, 0x70, 0x88, 0x88, 0x88, 0xA8, 0x90, 0x68, 0x00,
|
||||||
0xFC, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0xE6, 0x00, 0x3C, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x3C, 0x00,
|
0xF0, 0x88, 0x88, 0xF0, 0xA0, 0x90, 0x88, 0x00, 0x70, 0x88, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00,
|
||||||
0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x3C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
|
||||||
0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00,
|
0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x20, 0x00, 0x82, 0x82, 0x82, 0x82, 0x92, 0x92, 0x6C, 0x00,
|
||||||
0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x3C, 0x00,
|
0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x00,
|
||||||
0xFE, 0xC6, 0x8C, 0x18, 0x32, 0x66, 0xFE, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00,
|
0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00, 0xE0, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00,
|
||||||
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00,
|
0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, 0xE0, 0x00,
|
||||||
0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
|
0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00,
|
||||||
0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
|
0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x74, 0x00,
|
||||||
0xE0, 0x60, 0x7C, 0x66, 0x66, 0x66, 0xDC, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC6, 0x7C, 0x00,
|
0x80, 0x80, 0xB0, 0xC8, 0x88, 0xC8, 0xB0, 0x00, 0x00, 0x00, 0x70, 0x88, 0x80, 0x88, 0x70, 0x00,
|
||||||
0x1C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00,
|
0x08, 0x08, 0x68, 0x98, 0x88, 0x98, 0x68, 0x00, 0x00, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
|
||||||
0x3C, 0x66, 0x60, 0xF8, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
|
0x30, 0x48, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x34, 0x48, 0x48, 0x38, 0x08, 0x30,
|
||||||
0xE0, 0x60, 0x6C, 0x76, 0x66, 0x66, 0xE6, 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
0x80, 0x80, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00, 0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00,
|
||||||
0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0xE0, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0xE6, 0x00,
|
0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x90, 0x60, 0x80, 0x80, 0x88, 0x90, 0xA0, 0xD0, 0x88, 0x00,
|
||||||
0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0x00,
|
0xC0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0xEC, 0x92, 0x92, 0x92, 0x92, 0x00,
|
||||||
0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0x00, 0x00, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,
|
||||||
0x00, 0x00, 0xDC, 0x66, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0x1E,
|
0x00, 0x00, 0xB0, 0xC8, 0xC8, 0xB0, 0x80, 0x80, 0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x08,
|
||||||
0x00, 0x00, 0xDC, 0x76, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x00,
|
0x00, 0x00, 0xB0, 0xC8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x78, 0x80, 0x70, 0x08, 0xF0, 0x00,
|
||||||
0x30, 0x30, 0xFC, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
0x40, 0x40, 0xE0, 0x40, 0x40, 0x50, 0x20, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x98, 0x68, 0x00,
|
||||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00,
|
0x00, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92, 0x92, 0x6C, 0x00,
|
||||||
0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC,
|
0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x98, 0x68, 0x08, 0x70,
|
||||||
0x00, 0x00, 0x7E, 0x4C, 0x18, 0x32, 0x7E, 0x00, 0x0E, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0E, 0x00,
|
0x00, 0x00, 0xF8, 0x10, 0x20, 0x40, 0xF8, 0x00, 0x10, 0x20, 0x20, 0x40, 0x20, 0x20, 0x10, 0x00,
|
||||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x70, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x70, 0x00,
|
0x40, 0x40, 0x40, 0x00, 0x40, 0x40, 0x40, 0x00, 0x40, 0x20, 0x20, 0x10, 0x20, 0x20, 0x40, 0x00,
|
||||||
0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00,
|
0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00,
|
||||||
0x7C, 0xC6, 0xC0, 0xC0, 0xC6, 0x7C, 0x0C, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
0x3E, 0x60, 0xC0, 0x60, 0x3E, 0x08, 0x04, 0x18, 0x00, 0x48, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76,
|
||||||
0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, 0x7C, 0x82, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
|
0x18, 0x20, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x10, 0x28, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76,
|
||||||
0xC6, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0x30, 0x18, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
|
0x00, 0x48, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x30, 0x08, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76,
|
||||||
0x30, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x7E, 0xC0, 0xC0, 0x7E, 0x0C, 0x38,
|
0x48, 0x30, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x10, 0x08, 0x30,
|
||||||
0x7C, 0x82, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00,
|
0x30, 0x48, 0x84, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 0x48, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78,
|
||||||
0x30, 0x18, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
0x30, 0x08, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 0x48, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||||
0x7C, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00,
|
0x30, 0x48, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0x10, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||||
0xC6, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x6C, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
|
0x48, 0x00, 0x30, 0x78, 0xCC, 0xCC, 0xFC, 0xCC, 0x30, 0x48, 0x30, 0x48, 0x84, 0xFC, 0x84, 0x84,
|
||||||
0x18, 0x30, 0xFE, 0xC0, 0xF8, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x12, 0xFE, 0x90, 0xFE, 0x00,
|
0x18, 0x20, 0x00, 0xF8, 0x80, 0xF0, 0x80, 0xF8, 0x00, 0x00, 0x00, 0x66, 0x19, 0x77, 0x88, 0x77,
|
||||||
0x3E, 0x6C, 0xCC, 0xFE, 0xCC, 0xCC, 0xCE, 0x00, 0x7C, 0x82, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0x00, 0x00, 0x00, 0x0F, 0x14, 0x3E, 0x44, 0x87, 0x30, 0x48, 0x84, 0x78, 0xCC, 0xCC, 0xCC, 0x78,
|
||||||
0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x30, 0x18, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0x00, 0x48, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x60, 0x10, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78,
|
||||||
0x78, 0x84, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x60, 0x30, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
0x30, 0x48, 0x84, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x60, 0x10, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76,
|
||||||
0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC, 0xC6, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x00,
|
0x48, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8, 0x44, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38,
|
||||||
0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80,
|
0x24, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x08, 0x1C, 0x28, 0x28, 0x1C, 0x08, 0x00,
|
||||||
0x38, 0x6C, 0x64, 0xF0, 0x60, 0x66, 0xFC, 0x00, 0x3A, 0x6C, 0xCE, 0xD6, 0xE6, 0x6C, 0xB8, 0x00,
|
0x1C, 0x22, 0x20, 0x70, 0x20, 0x22, 0x5C, 0x00, 0x44, 0x28, 0x10, 0x10, 0x38, 0x10, 0x38, 0x10,
|
||||||
0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x0E, 0x1B, 0x18, 0x3C, 0x18, 0xD8, 0x70, 0x00,
|
0xF0, 0x88, 0x8A, 0xF7, 0x82, 0x82, 0x83, 0x00, 0x06, 0x08, 0x08, 0x3C, 0x10, 0x10, 0x60, 0x00,
|
||||||
0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0x0C, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00,
|
0x18, 0x20, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x18, 0x20, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||||
0x0C, 0x18, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x18, 0x30, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
0x18, 0x20, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x18, 0x20, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76,
|
||||||
0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x00, 0x76, 0xDC, 0x00, 0xE6, 0xF6, 0xDE, 0xCE, 0x00,
|
0x80, 0x78, 0x04, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x80, 0x7E, 0x01, 0xC6, 0xE6, 0xD6, 0xCE, 0xC6,
|
||||||
0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00,
|
0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0xFE, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xFC,
|
||||||
0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3E, 0x00, 0x7E, 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E,
|
0x00, 0x00, 0x18, 0x18, 0x30, 0x60, 0x66, 0x3C, 0xFF, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x00, 0x00, 0x63, 0xE6, 0x6C, 0x7E, 0x33, 0x66, 0xCC, 0x0F,
|
0xFF, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xC4, 0x48, 0x50, 0x26, 0x49, 0x82, 0x07,
|
||||||
0x63, 0xE6, 0x6C, 0x7A, 0x36, 0x6A, 0xDF, 0x06, 0x18, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x18, 0x00,
|
0x40, 0xC4, 0x48, 0x50, 0x26, 0x4A, 0x9F, 0x02, 0x00, 0x30, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||||
0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
|
0x00, 0x12, 0x24, 0x48, 0x90, 0x48, 0x24, 0x12, 0x00, 0x48, 0x24, 0x12, 0x09, 0x12, 0x24, 0x48,
|
||||||
0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
|
0x49, 0x00, 0x92, 0x00, 0x49, 0x00, 0x92, 0x00, 0x6D, 0x00, 0xB6, 0x00, 0x6D, 0x00, 0xB6, 0x00,
|
||||||
0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||||
0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x30, 0x60, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00,
|
0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x10, 0x10,
|
||||||
0x7C, 0x82, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00, 0x18, 0x0C, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00,
|
0x28, 0x28, 0x28, 0x28, 0xE8, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x28, 0x28, 0x28,
|
||||||
0x7E, 0x81, 0x9D, 0xA1, 0xA1, 0x9D, 0x81, 0x7E, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36,
|
0x00, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x28, 0x28, 0x28, 0xE8, 0x08, 0xE8, 0x28, 0x28,
|
||||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36,
|
0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0xF8, 0x08, 0xE8, 0x28, 0x28,
|
||||||
0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0xC0, 0xC0, 0x7E, 0x18, 0x18,
|
0x28, 0x28, 0x28, 0xE8, 0x08, 0xF8, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0xF8, 0x00, 0x00, 0x00,
|
||||||
0x66, 0x66, 0x3C, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18,
|
0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10,
|
||||||
0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00,
|
0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18,
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10,
|
||||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18,
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10,
|
||||||
0x76, 0xDC, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, 0x76, 0xDC, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00,
|
0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, 0x3F, 0x28, 0x28, 0x28,
|
||||||
0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36,
|
0x28, 0x28, 0x28, 0x2F, 0x20, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x20, 0x2F, 0x28, 0x28,
|
||||||
0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36,
|
0x28, 0x28, 0x28, 0xEF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xEF, 0x28, 0x28,
|
||||||
0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
|
0x28, 0x28, 0x28, 0x2F, 0x20, 0x2F, 0x28, 0x28, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00,
|
||||||
0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x00, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0x00,
|
0x28, 0x28, 0x28, 0xEF, 0x00, 0xEF, 0x28, 0x28, 0x10, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x00, 0x00,
|
||||||
0x30, 0x7E, 0x0C, 0x7C, 0xCC, 0xCC, 0x78, 0x00, 0xF8, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0xF8, 0x00,
|
0x28, 0x28, 0x28, 0x28, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0x10,
|
||||||
0x7C, 0x82, 0xFE, 0xC0, 0xFC, 0xC0, 0xFE, 0x00, 0xC6, 0x00, 0xFE, 0xC0, 0xFC, 0xC0, 0xFE, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x3F, 0x00, 0x00, 0x00,
|
||||||
0x30, 0x18, 0xFE, 0xC0, 0xFC, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x10, 0x10,
|
||||||
0x0C, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x3C, 0x42, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x3F, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xFF, 0x28, 0x28, 0x28,
|
||||||
0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00,
|
0x10, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18,
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||||
0x30, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x30, 0x60, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00, 0x78, 0xCC, 0xCC, 0xD8, 0xCC, 0xC6, 0xCC, 0x00,
|
0x00, 0x00, 0x00, 0x02, 0x34, 0x4C, 0x4C, 0x32, 0x00, 0x5C, 0x22, 0x22, 0x3C, 0x44, 0x44, 0x78,
|
||||||
0x7C, 0x82, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00, 0x0C, 0x06, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00,
|
0x7E, 0x42, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x02, 0x7C, 0xA8, 0x28, 0x28, 0x44,
|
||||||
0x76, 0xDC, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x76, 0xDC, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00,
|
0x00, 0x7E, 0x61, 0x30, 0x18, 0x08, 0x10, 0x20, 0x00, 0x00, 0x08, 0x7F, 0x88, 0x88, 0x88, 0x70,
|
||||||
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0xC0, 0xE0, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0xF0,
|
0x00, 0x00, 0x00, 0x22, 0x44, 0x44, 0x7A, 0x80, 0x00, 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10,
|
||||||
0xF0, 0x60, 0x7C, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x18, 0x30, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0x00, 0x1C, 0x08, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x38, 0x44, 0x44, 0x7C, 0x44, 0x44,
|
||||||
0x7C, 0x82, 0x00, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x60, 0x30, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0x66, 0x24, 0x66, 0x0C, 0x10, 0x08, 0x1C, 0x22, 0x22, 0x22, 0x1C,
|
||||||
0x18, 0x30, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC, 0x0C, 0x18, 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x6C, 0x92, 0x92, 0x6C, 0x00, 0x01, 0x1A, 0x26, 0x2A, 0x32, 0x2C, 0x40,
|
||||||
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x18, 0x20, 0x20, 0x30, 0x20, 0x20, 0x18, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
|
||||||
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00,
|
0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x3E,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xE1, 0x32, 0xE4, 0x3A, 0xF6, 0x2A, 0x5F, 0x86,
|
0x00, 0x10, 0x08, 0x04, 0x08, 0x10, 0x00, 0x3E, 0x00, 0x04, 0x08, 0x10, 0x08, 0x04, 0x00, 0x3E,
|
||||||
0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00, 0x3E, 0x61, 0x3C, 0x66, 0x66, 0x3C, 0x86, 0x7C,
|
0x00, 0x06, 0x09, 0x09, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x48, 0x48, 0x30,
|
||||||
0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0x38,
|
0x00, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x00, 0x60, 0x92, 0x0C, 0x60, 0x92, 0x0C, 0x00,
|
||||||
0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x60, 0x90, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x78, 0x30, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0xC8, 0x28, 0x10, 0x00,
|
||||||
0x78, 0x0C, 0x38, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x18, 0x30, 0x7C, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x7C, 0x42, 0x42, 0x42, 0x00, 0x18, 0x24, 0x08, 0x10, 0x3C, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
0x00, 0x00, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,425 @@
|
||||||
|
#include "idt.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "asm.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "video.h"
|
||||||
|
|
||||||
|
/* registre idt */
|
||||||
|
static struct dtr idtreg;
|
||||||
|
|
||||||
|
/* table de IDT */
|
||||||
|
static idtdes idt[256];
|
||||||
|
|
||||||
|
|
||||||
|
void initpic(void)
|
||||||
|
{
|
||||||
|
/* MASTER */
|
||||||
|
/* Initialisation de ICW1 */
|
||||||
|
outb(0x20,0x11);
|
||||||
|
nop();
|
||||||
|
/* Initialisation de ICW2 - vecteur de depart = 32 */
|
||||||
|
outb(0x21,0x20);
|
||||||
|
nop();
|
||||||
|
/* Initialisation de ICW3 */
|
||||||
|
outb(0x21,0x04);
|
||||||
|
nop();
|
||||||
|
/* Initialisation de ICW4 */
|
||||||
|
outb(0x21,0x01);
|
||||||
|
nop();
|
||||||
|
/* masquage des interruptions */
|
||||||
|
outb(0x21,0xFF);
|
||||||
|
nop();
|
||||||
|
/* SLAVE */
|
||||||
|
/* Initialisation de ICW1 */
|
||||||
|
outb(0xA0,0x11);
|
||||||
|
nop();
|
||||||
|
/* Initialisation de ICW2 - vecteur de depart = 96 */
|
||||||
|
outb(0xA1,0x70);
|
||||||
|
nop();
|
||||||
|
/* Initialisation de ICW3 */
|
||||||
|
outb(0xA1,0x02);
|
||||||
|
nop();
|
||||||
|
/* Initialisation de ICW4 */
|
||||||
|
outb(0xA1,0x01);
|
||||||
|
nop();
|
||||||
|
/* masquage des interruptions */
|
||||||
|
outb(0xA1,0xFF);
|
||||||
|
nop();
|
||||||
|
/* Demasquage des irqs sauf clavier
|
||||||
|
outb(0x21,0xFD);
|
||||||
|
nop();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void enableirq(u8 irq)
|
||||||
|
{
|
||||||
|
u16 port;
|
||||||
|
cli();
|
||||||
|
port = (((irq & 0x08) << 4) + 0x21);
|
||||||
|
outb(port,inb(port) & ~(1 << (irq & 7)));
|
||||||
|
sti();
|
||||||
|
}
|
||||||
|
|
||||||
|
void disableirq(u8 irq)
|
||||||
|
{
|
||||||
|
u16 port;
|
||||||
|
cli();
|
||||||
|
port = (((irq & 0x08) << 4) + 0x21);
|
||||||
|
outb(port,inb(port) | (1 << (irq & 7)));
|
||||||
|
sti();
|
||||||
|
}
|
||||||
|
|
||||||
|
void makeidtdes(u32 offset, u16 select, u16 type, idtdes* desc)
|
||||||
|
{
|
||||||
|
desc->offset0_15 = (offset & 0xffff);
|
||||||
|
desc->select = select;
|
||||||
|
desc->type = type;
|
||||||
|
desc->offset16_31 = (offset & 0xffff0000) >> 16;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setidt(u32 offset, u16 select, u16 type,u16 index)
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
idtdes *desc;
|
||||||
|
desc=idtreg.base;
|
||||||
|
desc[index].offset0_15 = (offset & 0xffff);
|
||||||
|
desc[index].select = select;
|
||||||
|
desc[index].type = type;
|
||||||
|
desc[index].offset16_31 = (offset & 0xffff0000) >> 16;
|
||||||
|
sti();
|
||||||
|
}
|
||||||
|
|
||||||
|
void putidt(u32 offset, u16 select, u16 type,u16 index)
|
||||||
|
{
|
||||||
|
idtdes temp;
|
||||||
|
makeidtdes(offset,select,type,&temp);
|
||||||
|
idt[index]=temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void interruption()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("Appel d'une interruption");
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception0()
|
||||||
|
{
|
||||||
|
print("divide error");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception1()
|
||||||
|
{
|
||||||
|
print("debug exception");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception2()
|
||||||
|
{
|
||||||
|
print("non-maskable hardware interrupt");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception3()
|
||||||
|
{
|
||||||
|
print("INT3 instruction");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception4()
|
||||||
|
{
|
||||||
|
print("INTO instruction detected overflow");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception5()
|
||||||
|
{
|
||||||
|
print("BOUND instruction detected overrange");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception6()
|
||||||
|
{
|
||||||
|
print("invalid instruction opcode");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception7()
|
||||||
|
{
|
||||||
|
print("no coprocessor");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception8()
|
||||||
|
{
|
||||||
|
print("double fault");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception9()
|
||||||
|
{
|
||||||
|
print("coprocessor segment overrun");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception10()
|
||||||
|
{
|
||||||
|
print("invalid task state segment (TSS)");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception11()
|
||||||
|
{
|
||||||
|
print("segment not present");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception12()
|
||||||
|
{
|
||||||
|
print("stack fault");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception13()
|
||||||
|
{
|
||||||
|
print("general protection fault (GPF)");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception14()
|
||||||
|
{
|
||||||
|
print("page fault");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception15()
|
||||||
|
{
|
||||||
|
print("(reserved)");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception16()
|
||||||
|
{
|
||||||
|
print("coprocessor error");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception17()
|
||||||
|
{
|
||||||
|
print("alignment check");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exception18()
|
||||||
|
{
|
||||||
|
print("machine check");
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq0()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 0");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq1()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 1");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq2()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 2");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq3()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 3");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq4()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 4");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq5()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 5");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq6()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 6");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq7()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 7");
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq8()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 8");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq9()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 9");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq10()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 10");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq11()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 11");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq12()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 12");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq13()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 13");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq14()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 14");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void irq15()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
print("irq 15");
|
||||||
|
irqendslave();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
void initidt(void)
|
||||||
|
{
|
||||||
|
u16 i;
|
||||||
|
putidt((u32)exception0, 0x30, INTGATE, 0);
|
||||||
|
putidt((u32)exception1, 0x30, INTGATE, 1);
|
||||||
|
putidt((u32)exception2, 0x30, INTGATE, 2);
|
||||||
|
putidt((u32)exception3, 0x30, INTGATE, 3);
|
||||||
|
putidt((u32)exception4, 0x30, INTGATE, 4);
|
||||||
|
putidt((u32)exception5, 0x30, INTGATE, 5);
|
||||||
|
putidt((u32)exception6, 0x30, INTGATE, 6);
|
||||||
|
putidt((u32)exception7, 0x30, INTGATE, 7);
|
||||||
|
putidt((u32)exception8, 0x30, INTGATE, 8);
|
||||||
|
putidt((u32)exception9, 0x30, INTGATE, 9);
|
||||||
|
putidt((u32)exception10, 0x30, INTGATE, 10);
|
||||||
|
putidt((u32)exception11, 0x30, INTGATE, 11);
|
||||||
|
putidt((u32)exception12, 0x30, INTGATE, 12);
|
||||||
|
putidt((u32)exception13, 0x30, INTGATE, 13);
|
||||||
|
putidt((u32)exception14, 0x30, INTGATE, 14);
|
||||||
|
putidt((u32)exception15, 0x30, INTGATE, 15);
|
||||||
|
putidt((u32)exception16, 0x30, INTGATE, 16);
|
||||||
|
putidt((u32)exception17, 0x30, INTGATE, 17);
|
||||||
|
putidt((u32)exception18, 0x30, INTGATE, 18);
|
||||||
|
for(i=19;i<32;i++)
|
||||||
|
{
|
||||||
|
putidt((u32)interruption, 0x30, INTGATE, i);
|
||||||
|
}
|
||||||
|
putidt((u32)irq0, 0x30, INTGATE, 32);
|
||||||
|
putidt((u32)irq1, 0x30, INTGATE, 33);
|
||||||
|
putidt((u32)irq2, 0x30, INTGATE, 34);
|
||||||
|
putidt((u32)irq3, 0x30, INTGATE, 35);
|
||||||
|
putidt((u32)irq4, 0x30, INTGATE, 36);
|
||||||
|
putidt((u32)irq5, 0x30, INTGATE, 37);
|
||||||
|
putidt((u32)irq6, 0x30, INTGATE, 38);
|
||||||
|
putidt((u32)irq7, 0x30, INTGATE, 39);
|
||||||
|
for(i=40;i<112;i++)
|
||||||
|
{
|
||||||
|
putidt((u32)interruption, 0x30, INTGATE, i);
|
||||||
|
}
|
||||||
|
putidt((u32)irq8, 0x30, INTGATE, 112);
|
||||||
|
putidt((u32)irq9, 0x30, INTGATE, 113);
|
||||||
|
putidt((u32)irq10, 0x30, INTGATE, 114);
|
||||||
|
putidt((u32)irq11, 0x30, INTGATE, 115);
|
||||||
|
putidt((u32)irq12, 0x30, INTGATE, 116);
|
||||||
|
putidt((u32)irq13, 0x30, INTGATE, 117);
|
||||||
|
putidt((u32)irq14, 0x30, INTGATE, 118);
|
||||||
|
putidt((u32)irq15, 0x30, INTGATE, 119);
|
||||||
|
for(i=120;i<255;i++)
|
||||||
|
{
|
||||||
|
putidt((u32)interruption, 0x30, INTGATE, i);
|
||||||
|
}
|
||||||
|
/* initialise le registre idt */
|
||||||
|
idtreg.limite = 256*8;
|
||||||
|
idtreg.base = 0x0000000;
|
||||||
|
/* recopie de la IDT a son adresse */
|
||||||
|
memcpy(&idt, (u8*)idtreg.base, idtreg.limite,1);
|
||||||
|
/* chargement du registre IDTR */
|
||||||
|
lidt(&idtreg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,293 @@
|
||||||
|
#include "idt.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "asm.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
|
#include "video.h"
|
||||||
|
|
||||||
|
static u8 bufferscan[256];
|
||||||
|
static u8 bufferascii[256]={0};
|
||||||
|
static u8 ptrscan=0;
|
||||||
|
static u8 ptrascii=0;
|
||||||
|
static u16 kbdstatus,breakcode ;
|
||||||
|
|
||||||
|
static const u8 set1_normal[] =
|
||||||
|
{
|
||||||
|
0, 0x1B, '&', 'é', '\"', '\'', '(', '-',
|
||||||
|
'è', '_', 'ç', 'à', ')', '=', '\b', '\t',
|
||||||
|
'a', 'z', 'e', 'r', 't', 'y', 'u', 'i',
|
||||||
|
'o', 'p', '^', '$', '\r', 0, 'q', 's',
|
||||||
|
'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm',
|
||||||
|
'ù', '²', 0, '*', 'w', 'x', 'c', 'v',
|
||||||
|
'b', 'n', ',', ';', ':', '!', 0, '*',
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, '7',
|
||||||
|
'8', '9','-', '4','5','6', '+', '1',
|
||||||
|
'2', '3','0','.',0, 0, '<', 0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u8 set1_shift[] =
|
||||||
|
{
|
||||||
|
0, 0x1B, '1', '2', '3', '4', '5', '6',
|
||||||
|
'7', '8', '9', '0', '°', '+', '\b', '\t',
|
||||||
|
'A', 'Z', 'E', 'R', 'T', 'Y', 'U', 'I',
|
||||||
|
'O', 'P', '¨', '£', '\r', 0, 'Q', 'S',
|
||||||
|
'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
|
||||||
|
'%', 0, 0, 'µ', 'W', 'X', 'C', 'V',
|
||||||
|
'B', 'N', '?', '.', '/', '§', 0, '*',
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0,0, 0, '7',
|
||||||
|
'8', '9','-', '4','5','6', '+', '1',
|
||||||
|
'2', '3','0','.',0, 0, '>', 0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u8 set1_alt[] =
|
||||||
|
{
|
||||||
|
0, 0x1B, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, '\r', 0, 0, 0,
|
||||||
|
0, 0, 0,0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, '*',
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0,0, 0, '7',
|
||||||
|
'8', '9','-', '4','5','6', '+', '1',
|
||||||
|
'2', '3','0','.',0, 0, 0, 0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const u8 set1_altgr[] =
|
||||||
|
{
|
||||||
|
0, 0x1B, 0, '~', '#', '{', '[', '|',
|
||||||
|
'`', '\\', '^', '@', ']', '}', '\b', '\t',
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, '¤', '\r', 0, 0, 0,
|
||||||
|
0, 0, 0,0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, '*',
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0,0, 0, '7',
|
||||||
|
'8', '9','-', '4','5','6', '+', '1',
|
||||||
|
'2', '3','0','.',0, 0, 0, 0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u8 set1_ctrl[] =
|
||||||
|
{
|
||||||
|
0, 0x1B, 0, 0,0, 0, 0x1B, 0,
|
||||||
|
0, 0x1C, 0, 0, 0x1D, 0, 0, 0x1F,
|
||||||
|
0x01, 0x1A, 0x05, 0x012, 0x14, 0x19, 0x15, 0x09,
|
||||||
|
0x0F, 0x10, 0x1E, 0, 0, 0, 0x11, 0x13,
|
||||||
|
0x04, 0x06, 0x07,0x08, 0x0A, 0x0B, 0x0C, 0x0D,
|
||||||
|
0, 0, 0, 0, 0x17, 0x18, 0x03, 0x16,
|
||||||
|
0x02, 0x0E, 0, 0, 0, 0, 0, '*',
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0,0, 0, '7',
|
||||||
|
'8', '9','-', '4','5','6', '+', '1',
|
||||||
|
'2', '3','0','.',0, 0, 0, 0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
void outkbd(u8 port, u8 data)
|
||||||
|
{
|
||||||
|
u32 timeout;
|
||||||
|
u8 state;
|
||||||
|
|
||||||
|
/* timeout */
|
||||||
|
for(timeout = 500000L; timeout != 0; timeout--)
|
||||||
|
{
|
||||||
|
state = inb(0x64);
|
||||||
|
/* vide le buffer du 8042 */
|
||||||
|
if((state & 0x02) == 0) break;
|
||||||
|
}
|
||||||
|
if(timeout != 0)
|
||||||
|
outb(port, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
static void reboot(void)
|
||||||
|
{
|
||||||
|
u8 temp;
|
||||||
|
cli();
|
||||||
|
/* vide le 8042 */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
temp = inb(0x64);
|
||||||
|
if((temp & 0x01) != 0)
|
||||||
|
{
|
||||||
|
(void)inb(0x60);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} while((temp & 0x02) != 0);
|
||||||
|
/* active le reset CPU */
|
||||||
|
outb(0x64, 0xFE);
|
||||||
|
while(1)
|
||||||
|
/* boucle infinie */;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
unsigned convert(u32 keypressed)
|
||||||
|
{
|
||||||
|
|
||||||
|
u8 temp,key,lastscan;
|
||||||
|
/* garde le dernier pointeur du buffer scan */
|
||||||
|
lastscan=ptrscan;
|
||||||
|
/* incrémente le pointeur est assigne au buffer le dernier scancode */
|
||||||
|
ptrscan++;
|
||||||
|
if (ptrscan==255) ptrscan==0;
|
||||||
|
bufferscan[ptrscan]=keypressed;
|
||||||
|
/* break key (touche relaché) ? */
|
||||||
|
if(keypressed >= 0x80) breakcode = 1;
|
||||||
|
key = (keypressed&0x7F);
|
||||||
|
/* Mise a jour des flags lors du relachement de touches de controle */
|
||||||
|
if(breakcode)
|
||||||
|
{
|
||||||
|
if(key == SCAN_ALT)
|
||||||
|
{
|
||||||
|
kbdstatus &= ~STATUS_ALT;
|
||||||
|
/* si ALT GR (E01D) alors activer aussi control */
|
||||||
|
if (bufferscan[lastscan]==0xE0) kbdstatus &= ~STATUS_CTRL;
|
||||||
|
}
|
||||||
|
else if(key == SCAN_CTRL)
|
||||||
|
kbdstatus &= ~STATUS_CTRL;
|
||||||
|
else if(key == SCAN_LEFTSHIFT || key == SCAN_RIGHTSHIFT)
|
||||||
|
kbdstatus &= ~STATUS_SHIFT;
|
||||||
|
breakcode = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* Mise a jour des flags lors de l'appuie de touches de controle */
|
||||||
|
if(key == SCAN_ALT)
|
||||||
|
{
|
||||||
|
kbdstatus |= STATUS_ALT;
|
||||||
|
/* si ALT GR (E01D) alors desactiver aussi control */
|
||||||
|
if (bufferscan[lastscan]==0xE0) kbdstatus |= STATUS_CTRL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(key == SCAN_CTRL)
|
||||||
|
{
|
||||||
|
kbdstatus |= STATUS_CTRL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(key == SCAN_LEFTSHIFT || key == SCAN_RIGHTSHIFT)
|
||||||
|
{
|
||||||
|
kbdstatus |= STATUS_SHIFT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scroll Lock, Num Lock, and Caps Lock mise a jour des leds */
|
||||||
|
if(key == SCAN_SCROLLLOCK)
|
||||||
|
{
|
||||||
|
kbdstatus ^= STATUS_SCRL;
|
||||||
|
goto LEDS;
|
||||||
|
}
|
||||||
|
if(key == SCAN_NUMLOCK)
|
||||||
|
{
|
||||||
|
kbdstatus ^= STATUS_NUM;
|
||||||
|
goto LEDS;
|
||||||
|
}
|
||||||
|
if(key == SCAN_CAPSLOCK)
|
||||||
|
{
|
||||||
|
kbdstatus ^= STATUS_CAPS;
|
||||||
|
LEDS:
|
||||||
|
outkbd(0x60, 0xED); /* "mise a jour des LEDS */
|
||||||
|
temp = 0;
|
||||||
|
if(kbdstatus & STATUS_SCRL)
|
||||||
|
temp |= 1;
|
||||||
|
if(kbdstatus & STATUS_NUM)
|
||||||
|
temp |= 2;
|
||||||
|
if(kbdstatus & STATUS_CAPS)
|
||||||
|
temp |= 4;
|
||||||
|
outkbd(0x60, temp); /* 3 bits de poids faible pour les LEDs */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* est ce un code etendu */
|
||||||
|
if ((bufferscan[lastscan]==0xE0)||((kbdstatus & STATUS_NUM)&&(key>=0x47)&&(key<=0x53)&&(key!=0x4A)&&(key!=0x4e)))
|
||||||
|
/* exceptions */
|
||||||
|
{
|
||||||
|
/* '/' (E035) */
|
||||||
|
if (key==0x35) return '/';
|
||||||
|
/* '\r' (E01C) 2ème enter numérique*/
|
||||||
|
if (key==0x1C) return '\r';
|
||||||
|
/* 0x11 (E048) device control 1)*/
|
||||||
|
if (key==0x48) return 0x11;
|
||||||
|
/* 0x12 (E050) device control 2)*/
|
||||||
|
if (key==0x50) return 0x12;
|
||||||
|
/* 0x13 (E04b) device control 3)*/
|
||||||
|
if (key==0x4b) return 0x13;
|
||||||
|
/* 0x14 (E04d) device control 4)*/
|
||||||
|
if (key==0x4d) return 0x14;
|
||||||
|
/* 0x02 (E049) start of text)*/
|
||||||
|
if (key==0x49) return 0x2;
|
||||||
|
/* 0x03 (E051) end of text)*/
|
||||||
|
if (key==0x51) return 0x3;
|
||||||
|
/* 0x10 (E047) Line feed)*/
|
||||||
|
if (key==0x47) return '\n';
|
||||||
|
/* 0x1A (E052) Substitution)*/
|
||||||
|
if (key==0x52) return 0x1A;
|
||||||
|
/* 0x18 (E053) Cancel)*/
|
||||||
|
if (key==0x53) return 0x18;
|
||||||
|
/* 0x19 (E04f) End of medium)*/
|
||||||
|
if (key==0x4f) return 0x19;
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* detecte les SCANCODES invalides */
|
||||||
|
if(key >= sizeof(set1_normal) / sizeof(set1_normal[0])) return 0;
|
||||||
|
/* converti le scancode en code ASCII en fonction du statut*/
|
||||||
|
if (kbdstatus & STATUS_SHIFT||kbdstatus & STATUS_CAPS)
|
||||||
|
temp = set1_shift[key];
|
||||||
|
else if ((kbdstatus & STATUS_ALT)&&(kbdstatus & STATUS_CTRL))
|
||||||
|
temp = set1_altgr[key];
|
||||||
|
else if (kbdstatus & STATUS_CTRL)
|
||||||
|
temp = set1_ctrl[key];
|
||||||
|
else if (kbdstatus & STATUS_ALT)
|
||||||
|
temp = set1_alt[key];
|
||||||
|
else
|
||||||
|
temp = set1_normal[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* si scancode non reconnu fin de fonction */
|
||||||
|
if(temp == 0) return temp;
|
||||||
|
/* Appuie de CRTL + ALT + SUPR ? */
|
||||||
|
if((kbdstatus & STATUS_CTRL) && (kbdstatus & STATUS_ALT) &&
|
||||||
|
(temp == KEY_DEL))
|
||||||
|
{
|
||||||
|
print("redemarrage du systeme");
|
||||||
|
reboot();
|
||||||
|
}
|
||||||
|
/* Renvoie le Code ascii */
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
void keyboard()
|
||||||
|
{
|
||||||
|
u8 scancode,ascii;
|
||||||
|
cli();
|
||||||
|
while ((inb(0x64)&1)==0);
|
||||||
|
scancode=inb(0x60);
|
||||||
|
ascii = convert(scancode);
|
||||||
|
if(ascii != 0)
|
||||||
|
{
|
||||||
|
putchar(ascii);
|
||||||
|
ptrascii++;
|
||||||
|
if (ptrascii==255) ptrascii==0;
|
||||||
|
bufferascii[ptrascii]=ascii;
|
||||||
|
}
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
iret();
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
32
lib/makefile
32
lib/makefile
|
@ -1,16 +1,36 @@
|
||||||
FREEC=gcc -O2 -nostdinc -ffreestanding -fno-builtin -fomit-frame-pointer -Wall -I ../Include -c
|
FREEC=gcc -O2 -nostdinc -ffreestanding -fno-builtin -fomit-frame-pointer -Wall -I ../Include -c
|
||||||
PARTIAL=-r
|
PARTIAL=ld -r -o
|
||||||
OBJS= string.o vgatxt.o
|
OBJS= memory.o vga.o port.o video.o idt.o timer.o keyboard.o types.o
|
||||||
|
|
||||||
all: makeall
|
all: makeall
|
||||||
|
|
||||||
makeall: $(OBJS)
|
makeall: libs.o
|
||||||
(sync;ld $(PARTIAL) -o libs.o $(OBJS))
|
|
||||||
|
|
||||||
vgatxt.o:vgatxt.c
|
libs.o:$(OBJS)
|
||||||
|
$(PARTIAL) libs.o $(OBJS)
|
||||||
|
|
||||||
|
vga.o:vga.c
|
||||||
$(FREEC) $^
|
$(FREEC) $^
|
||||||
|
|
||||||
string.o:string.c
|
types.o:types.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
idt.o:idt.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
keyboard.o:keyboard.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
timer.o:timer.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
video.o:video.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
port.o:port.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
memory.o:memory.c
|
||||||
$(FREEC) $^
|
$(FREEC) $^
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o
|
rm -f *.o
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Copie un octet une ou plusieurs fois en mémoire */
|
||||||
|
void memset(void *dst, u8 val, u32 count,u32 size)
|
||||||
|
{
|
||||||
|
u8 *temp;
|
||||||
|
for(temp = (u8 *)dst; count != 0; count--)
|
||||||
|
{
|
||||||
|
temp+=size;
|
||||||
|
*temp = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Copie une portion de mémoire vers une autre */
|
||||||
|
void memcpy(void *src, void *dst, u32 count, u32 size)
|
||||||
|
{
|
||||||
|
char *s, *d;
|
||||||
|
u32 i;
|
||||||
|
s = (u8*) src;
|
||||||
|
d = (u8*) dst;
|
||||||
|
for(i=0;i<count;i++){
|
||||||
|
*(d+i*size) = *(s+i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Compare 2 portions de mémoire */
|
||||||
|
u32 memcmp(void *src, void *dst, u32 count, u32 size)
|
||||||
|
{
|
||||||
|
const u8 *mem1 = (const u8 *)src;
|
||||||
|
const u8 *mem2 = (const u8 *)dst;
|
||||||
|
for(; count != 0; count--)
|
||||||
|
{
|
||||||
|
if(*mem1 != *mem2)
|
||||||
|
return *mem1 - *mem2;
|
||||||
|
mem1+=size;
|
||||||
|
mem2+=size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
186
lib/modes.c
186
lib/modes.c
|
@ -1,118 +1,220 @@
|
||||||
#define maxgraphmode 5
|
/* definition des registres de la carte VGA pour differents modes */
|
||||||
|
|
||||||
|
#define maxgraphmode 11
|
||||||
#define maxtextmode 5
|
#define maxtextmode 5
|
||||||
|
|
||||||
static mode_def textmodes[maxtextmode] = {
|
static mode_def textmodes[maxtextmode] = {
|
||||||
|
|
||||||
/*MODE 0, 40*25 16 couleurs */
|
/*40*25 16 couleurs mode 0x00*/
|
||||||
{
|
{
|
||||||
0x67,0x00,0x03,0x08,0x03,0x00,0x02,
|
0x67,
|
||||||
0x2D,0x27,0x28,0x90,0x2B,0x0A,0xBF,0x1F,0x00,0x4F,0x0D,0x0E,0x00,0x00,0x00,0x00,
|
0x03, 0x08, 0x03, 0x00, 0x02,
|
||||||
|
0x2D, 0x27, 0x28, 0x90, 0x2B, 0xA0, 0xBF, 0x1F, 0x00,
|
||||||
|
0x4F, 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x9C, 0x8E, 0x8F, 0x14, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
0x9C, 0x8E, 0x8F, 0x14, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
0x0C, 0x00, 0x0F, 0x08, 0x00,
|
0x0C, 0x00, 0x0F, 0x08, 0x00,
|
||||||
40,25
|
45, 25, 4
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 1, 80*25 16 couleurs */
|
/*80*25 16 couleurs mode 0x01*/
|
||||||
{
|
{
|
||||||
0x67,0x00,0x03,0x00,0x03,0x00,0x02,
|
0x67,
|
||||||
0x5F,0x4F,0x50,0x82,0x55,0x81,0xBF,0x1F,0x00,0x4F,0x0D,0x0E,0x00,0x00,0x00,0x00,
|
0x03, 0x00, 0x03, 0x00, 0x02,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F, 0x00,
|
||||||
|
0x4F, 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x9C, 0x0E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
0x9C, 0x0E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
0x0C, 0x00, 0x0F, 0x08, 0x00,
|
0x0C, 0x00, 0x0F, 0x08, 0x00,
|
||||||
80,25
|
80, 25, 4
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 2, 80*50 16 couleurs */
|
/*80*50 16 couleurs mode 0x02*/
|
||||||
{
|
{
|
||||||
0x63,0x00,0x03,0x01,0x03,0x01,0x02,
|
0x63,
|
||||||
0x5F,0x4F,0x50,0x82,0x55,0x81,0xBF,0x1F,0x00,0x47,0x06,0x07,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x03, 0x01, 0x02,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F, 0x00,
|
||||||
|
0x47, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x9C, 0x8E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
0x9C, 0x8E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
0xCF,0x00,0x0F,0x00,0x00,
|
0x0C, 0x00, 0x0F, 0x00, 0x00,
|
||||||
80,50
|
80, 50, 4
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 3, 100*50 16 couleurs */
|
/*100*50 16 couleurs mode 0x03*/
|
||||||
{
|
{
|
||||||
0x67,0x00,0x03,0x01,0x03,0x01,0x02,
|
0x67,
|
||||||
0x70,0x63,0x64,0x85,0x68,0x84,0xBF,0x1F,0x00,0x47,0x06,0x07,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x03, 0x01, 0x02,
|
||||||
|
0x70, 0x63, 0x64, 0x85, 0x68, 0x84, 0xBF, 0x1F, 0x00,
|
||||||
|
0x47, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x9C, 0x8E, 0x8F, 0x32, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
0x9C, 0x8E, 0x8F, 0x32, 0x1F, 0x96, 0xB9, 0xA3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
0x0C, 0x00, 0x0F, 0x00, 0x00,
|
0x0C, 0x00, 0x0F, 0x00, 0x00,
|
||||||
100,50
|
100, 50, 4
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 4, 100*60 16 couleurs */
|
/*100*60 16 couleurs mode 0x04*/
|
||||||
{
|
{
|
||||||
0xA7,0x00,0x03,0x01,0x03,0x01,0x02,
|
0xA7,
|
||||||
0x70,0x63,0x64,0x85,0x68,0x84,0xFF,0x1F,0x00,0x47,0x06,0x07,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x03, 0x01, 0x02,
|
||||||
|
0x70, 0x63, 0x64, 0x85, 0x68, 0x84, 0xFF, 0x1F, 0x00,
|
||||||
|
0x47, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||||
0xE7, 0x8E, 0xDF, 0x32, 0x1F, 0xDF, 0xE5, 0xA3, 0xFF,
|
0xE7, 0x8E, 0xDF, 0x32, 0x1F, 0xDF, 0xE5, 0xA3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
0x0C, 0x00, 0x0F, 0x00, 0x00,
|
0x0C, 0x00, 0x0F, 0x00, 0x00,
|
||||||
100,60
|
100, 60, 4
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static mode_def graphmodes[maxgraphmode] = {
|
static mode_def graphmodes[maxgraphmode] = {
|
||||||
/*MODE 80, 320*200 256 couleurs */
|
|
||||||
|
/*640*480 n&b mode 0x80*/
|
||||||
{
|
{
|
||||||
0x63,0x00,0x03,0x01,0x0F,0x00,0x06,
|
0xE3,
|
||||||
0x5F,0x4F,0x50,0x82,0x54,0x80,0xBF,0x1F,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xEA, 0x0C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF,
|
||||||
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
|
0x01, 0x00, 0x0F, 0x00, 0x00,
|
||||||
|
80, 60, 1
|
||||||
|
},
|
||||||
|
|
||||||
|
/*320*200 4 couleurs mode 0x81*/
|
||||||
|
{
|
||||||
|
0x63,
|
||||||
|
0x03, 0x09, 0x03, 0x00, 0x02,
|
||||||
|
0x2D, 0x27, 0x28, 0x90, 0x2B, 0x80, 0xBF, 0x1F, 0x00,
|
||||||
|
0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x9C, 0x0E, 0x8F, 0x14, 0x00, 0x96, 0xB9, 0xA3, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0xFF,
|
||||||
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
|
0x01, 0x00, 0x03, 0x00, 0x00,
|
||||||
|
40, 25, 2
|
||||||
|
},
|
||||||
|
|
||||||
|
/*640*480 16 couleurs mode 0x82*/
|
||||||
|
{
|
||||||
|
0xE3,
|
||||||
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x53, 0x9F, 0x0B, 0x3E, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xE9, 0x8B, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF,
|
||||||
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
|
0x01, 0x00, 0x0F, 0x00, 0x00,
|
||||||
|
80, 60, 4
|
||||||
|
},
|
||||||
|
|
||||||
|
/*720*480 16 couleurs mode 0x83*/
|
||||||
|
{
|
||||||
|
0xE7,
|
||||||
|
0x03, 0x01, 0x08, 0x00, 0x06,
|
||||||
|
0x6B, 0x59, 0x5A, 0x82, 0x60, 0x8D, 0x0B, 0x3E, 0x00,
|
||||||
|
0x40, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xEA, 0x0C, 0xDF, 0x2D, 0x08, 0xE8, 0x05, 0xE3, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x05, 0x0F, 0xFF,
|
||||||
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
|
0x01, 0x00, 0x0F, 0x00, 0x00,
|
||||||
|
90, 60, 4
|
||||||
|
},
|
||||||
|
|
||||||
|
/*800*600 16 couleurs mode 0x84*/
|
||||||
|
{
|
||||||
|
0xE7,
|
||||||
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x70, 0x63, 0x64, 0x92, 0x65, 0x82, 0x70, 0xF0, 0x00,
|
||||||
|
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x5B, 0x8C, 0x57, 0x32, 0x00, 0x58, 0x70, 0xE3, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF,
|
||||||
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||||
|
0x01, 0x00, 0x0F, 0x00, 0x00,
|
||||||
|
100, 75, 4
|
||||||
|
},
|
||||||
|
|
||||||
|
/*320*200 256 couleurs RAPIDE mode 0x85*/
|
||||||
|
{
|
||||||
|
0x63,
|
||||||
|
0x03, 0x01, 0x0F, 0x00, 0x0E,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00,
|
||||||
|
0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x9C, 0x0E, 0x8F, 0x28, 0x40, 0x96, 0xB9, 0xA3, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
||||||
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||||
|
0x41, 0x00, 0x0F, 0x00, 0x00,
|
||||||
|
40, 25, 8
|
||||||
|
},
|
||||||
|
|
||||||
|
/*320*200 256 couleurs mode 0x86*/
|
||||||
|
{
|
||||||
|
0x63,
|
||||||
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00,
|
||||||
|
0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x9C, 0x0E, 0x8F, 0x28, 0x00, 0x96, 0xB9, 0xE3, 0xFF,
|
0x9C, 0x0E, 0x8F, 0x28, 0x00, 0x96, 0xB9, 0xE3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||||
0x41, 0x00, 0x0F, 0x00, 0x00,
|
0x41, 0x00, 0x0F, 0x00, 0x00,
|
||||||
40,25
|
40, 25, 8
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 81, 320*400 256 couleurs */
|
/*320*400 256 couleurs mode 0x87*/
|
||||||
{
|
{
|
||||||
0x63,0x00,0x03,0x01,0x0F,0x00,0x06,
|
0x63,
|
||||||
0x5F,0x4F,0x50,0x82,0x54,0x80,0xBF,0x1F,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x9C, 0x8E, 0x8F, 0x28, 0x00, 0x96, 0xB9, 0xE3, 0xFF,
|
0x9C, 0x8E, 0x8F, 0x28, 0x00, 0x96, 0xB9, 0xE3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||||
0x41, 0x00, 0x0F, 0x00, 0x00,
|
0x41, 0x00, 0x0F, 0x00, 0x00,
|
||||||
40,50
|
40, 50, 8
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 82, 320*480 256 couleurs */
|
/*320*480 256 couleurs mode 0x88*/
|
||||||
{
|
{
|
||||||
0xE3,0x00,0x03,0x01,0x0F,0x00,0x06,
|
0xE3,
|
||||||
0x5F,0x4F,0x50,0x82,0x54,0x80,0x0B,0x3E,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0xEA, 0xAC, 0xDF, 0x28, 0x00, 0xE7, 0x06, 0xE3, 0xFF,
|
0xEA, 0xAC, 0xDF, 0x28, 0x00, 0xE7, 0x06, 0xE3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||||
0x41, 0x00, 0x0F, 0x00, 0x00,
|
0x41, 0x00, 0x0F, 0x00, 0x00,
|
||||||
40,60
|
40, 60, 8
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 83, 360*480 256 couleurs */
|
/*360*480 256 couleurs mode 0x89*/
|
||||||
{
|
{
|
||||||
0xE7,0x00,0x03,0x01,0x0F,0x00,0x06,
|
0xE7,
|
||||||
0x6B,0x59,0x5A,0x8E,0x5E,0x8A,0x0D,0x3E,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x6B, 0x59, 0x5A, 0x8E, 0x5E, 0x8A, 0x0D, 0x3E, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0xEA, 0xAC, 0xDF, 0x2D, 0x00, 0xE7, 0x06, 0xE3, 0xFF,
|
0xEA, 0xAC, 0xDF, 0x2D, 0x00, 0xE7, 0x06, 0xE3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||||
0x41, 0x00, 0x0F, 0x00, 0x00,
|
0x41, 0x00, 0x0F, 0x00, 0x00,
|
||||||
45,60
|
45, 60, 8
|
||||||
},
|
},
|
||||||
|
|
||||||
/*MODE 84, 400*600 256 couleurs */
|
/*400*600 256 couleurs mode 0x8A*/
|
||||||
{
|
{
|
||||||
0xE7,0x00,0x03,0x01,0x0F,0x00,0x06,
|
0xE7,
|
||||||
0x74,0x63,0x64,0x97,0x68,0x95,0x86,0xF0,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x03, 0x01, 0x0F, 0x00, 0x06,
|
||||||
|
0x74, 0x63, 0x64, 0x97, 0x68, 0x95, 0x86, 0xF0, 0x00,
|
||||||
|
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x5B, 0x8D, 0x57, 0x32, 0x00, 0x60, 0x80, 0xE3, 0xFF,
|
0x5B, 0x8D, 0x57, 0x32, 0x00, 0x60, 0x80, 0xE3, 0xFF,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF,
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||||
0x41, 0x00, 0x0F, 0x00, 0x00,
|
0x41, 0x00, 0x0F, 0x00, 0x00,
|
||||||
50,75
|
50, 75, 8
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
#include "types.h"
|
||||||
|
#include "asm.h"
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Envoie une série d'octet a destination d'une portion de mémoire
|
||||||
|
vers le registre video spécifié */
|
||||||
|
|
||||||
|
void outreg(u16 port,u8 *src,u16 num)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<num;i++)
|
||||||
|
{
|
||||||
|
outb(port,i);
|
||||||
|
outb(port+1,*src++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Envoie une série d'octet a destination d'une portion de mémoire
|
||||||
|
vers le registre video spécifié (accés data et index confondu) */
|
||||||
|
|
||||||
|
void outregsame(u16 port,u8 *src,u16 num)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<num;i++)
|
||||||
|
{
|
||||||
|
inb(port);
|
||||||
|
outb(port,i);
|
||||||
|
outb(port,*src++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Récupère une série d'octet en provenance d'un registre video spécifié
|
||||||
|
vers portion de mémoire */
|
||||||
|
|
||||||
|
void inreg(u16 port,u8 *src,u16 num)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<num;i++)
|
||||||
|
{
|
||||||
|
outb(port,i);
|
||||||
|
*src++=inb(port+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Récupère une série d'octet en provenance d'un registre video spécifié
|
||||||
|
vers portion de mémoire (accés data et index confondu) */
|
||||||
|
|
||||||
|
void inregsame(u16 port,u8 *src,u16 num)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<num;i++)
|
||||||
|
{
|
||||||
|
inb(port);
|
||||||
|
outb(port,i);
|
||||||
|
*src++=inb(port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
11
lib/string.c
11
lib/string.c
|
@ -1,11 +0,0 @@
|
||||||
#include "types.h"
|
|
||||||
|
|
||||||
void memset(void *dst, u8 val, u16 count,u32 size)
|
|
||||||
{
|
|
||||||
u8 *temp;
|
|
||||||
for(temp = (u8 *)dst; count != 0; count--)
|
|
||||||
{
|
|
||||||
temp+=size;
|
|
||||||
*temp = val;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include "idt.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "asm.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "timer.h"
|
||||||
|
#include "vga.h"
|
||||||
|
|
||||||
|
|
||||||
|
static u8 curs[4]={"-\\|/"};
|
||||||
|
|
||||||
|
static u8 curspos=0;
|
||||||
|
|
||||||
|
|
||||||
|
void timer()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
showchar(0,0,curs[curspos],7);
|
||||||
|
curspos=(curspos+1)&0x3;
|
||||||
|
irqendmaster();
|
||||||
|
sti();
|
||||||
|
asm("addl $0x1C,%esp;iret;");
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
char ctype[] =
|
||||||
|
{
|
||||||
|
0x00,
|
||||||
|
/* 0 */ CT_CTL, CT_CTL, CT_CTL, CT_CTL,
|
||||||
|
CT_CTL, CT_CTL, CT_CTL, CT_CTL,
|
||||||
|
/* 8 */ CT_CTL, CT_CTL | CT_WHT, CT_CTL | CT_WHT, CT_CTL | CT_WHT,
|
||||||
|
CT_CTL | CT_WHT, CT_CTL | CT_WHT, CT_CTL, CT_CTL,
|
||||||
|
/* 16 */CT_CTL, CT_CTL, CT_CTL, CT_CTL,
|
||||||
|
CT_CTL, CT_CTL, CT_CTL, CT_CTL,
|
||||||
|
/* 24 */CT_CTL, CT_CTL, CT_CTL, CT_CTL,
|
||||||
|
CT_CTL, CT_CTL, CT_CTL, CT_CTL,
|
||||||
|
/* ' ' */CT_WHT | CT_SP, CT_PUN, CT_PUN, CT_PUN,
|
||||||
|
CT_PUN, CT_PUN, CT_PUN, CT_PUN,
|
||||||
|
/* '(' */CT_PUN, CT_PUN, CT_PUN, CT_PUN,
|
||||||
|
CT_PUN, CT_PUN, CT_PUN, CT_PUN,
|
||||||
|
/* '0' */CT_DIG, CT_DIG, CT_DIG, CT_DIG,
|
||||||
|
CT_DIG, CT_DIG, CT_DIG, CT_DIG,
|
||||||
|
/* '8' */CT_DIG, CT_DIG, CT_PUN, CT_PUN,
|
||||||
|
CT_PUN, CT_PUN, CT_PUN, CT_PUN,
|
||||||
|
/* '@' */CT_PUN, CT_UP | CT_HEX, CT_UP | CT_HEX, CT_UP | CT_HEX,
|
||||||
|
CT_UP | CT_HEX, CT_UP | CT_HEX, CT_UP | CT_HEX, CT_UP,
|
||||||
|
/* 'H' */CT_UP, CT_UP, CT_UP, CT_UP,
|
||||||
|
CT_UP, CT_UP, CT_UP, CT_UP,
|
||||||
|
/* 'P' */CT_UP, CT_UP, CT_UP, CT_UP,
|
||||||
|
CT_UP, CT_UP, CT_UP, CT_UP,
|
||||||
|
/* 'X' */CT_UP, CT_UP, CT_UP, CT_PUN,
|
||||||
|
CT_PUN, CT_PUN, CT_PUN, CT_PUN,
|
||||||
|
/* '`' */CT_PUN, CT_LOW | CT_HEX, CT_LOW | CT_HEX, CT_LOW | CT_HEX,
|
||||||
|
CT_LOW | CT_HEX, CT_LOW | CT_HEX, CT_LOW | CT_HEX, CT_LOW,
|
||||||
|
/* h' */CT_LOW, CT_LOW, CT_LOW, CT_LOW,
|
||||||
|
CT_LOW, CT_LOW, CT_LOW, CT_LOW,
|
||||||
|
/* 'p' */CT_LOW, CT_LOW, CT_LOW, CT_LOW,
|
||||||
|
CT_LOW, CT_LOW, CT_LOW, CT_LOW,
|
||||||
|
/* 'x' */CT_LOW, CT_LOW, CT_LOW, CT_PUN,
|
||||||
|
CT_PUN, CT_PUN, CT_PUN, CT_CTL,
|
||||||
|
/* 128 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 144 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 160 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 176 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 192 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 208 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 224 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
/* 240 */0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
};
|
|
@ -0,0 +1,527 @@
|
||||||
|
#include "vga.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "asm.h"
|
||||||
|
#include "port.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "modes.c"
|
||||||
|
#include "8x8fnt.c"
|
||||||
|
#include "8x16fnt.c"
|
||||||
|
|
||||||
|
/* Registres VGAs */
|
||||||
|
|
||||||
|
#define sequencer 0x3c4
|
||||||
|
#define misc 0x3c2
|
||||||
|
#define ccrt 0x3D4
|
||||||
|
#define attribs 0x3c0
|
||||||
|
#define graphics 0x3ce
|
||||||
|
#define state 0x3da
|
||||||
|
|
||||||
|
/* Taille d'un plan de bit */
|
||||||
|
|
||||||
|
#define planesize 0x10000
|
||||||
|
|
||||||
|
u16 resX,resY; /* resolution x,y en caractères*/
|
||||||
|
|
||||||
|
static u8 pages,activepage; /* nombre de pages disponibles N° de la page active*/
|
||||||
|
static u32 linesize,pagesize;/* Taille d'une ligne et d'une page */
|
||||||
|
static u8 vmode=0xFF,color; /* mode en cours d'utilisation et profondeur */
|
||||||
|
static u32 basemem; /* Adresse de la mémoire vidéo */
|
||||||
|
static bool scrolling=0x1,graphic;/* Activation du défilement, Flag du mode graphique */
|
||||||
|
static u8 font; /* n° font active */
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Attend la retrace verticale */
|
||||||
|
|
||||||
|
void waitvretrace (void)
|
||||||
|
{
|
||||||
|
while ((inb(state)&8)==0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Attend la retrace horizontale */
|
||||||
|
|
||||||
|
void waithretrace (void)
|
||||||
|
{
|
||||||
|
while ((inb(state)&1)==0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Active l'affichage du curseur de texte */
|
||||||
|
|
||||||
|
void enablecursor (void)
|
||||||
|
{
|
||||||
|
u8 curs;
|
||||||
|
/* active le curseur hardware */
|
||||||
|
outb(ccrt, 10);
|
||||||
|
curs = inb(ccrt+1)&~32;
|
||||||
|
outb(ccrt+1, curs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Desactive l'affichage du curseur de texte */
|
||||||
|
|
||||||
|
void disablecursor (void)
|
||||||
|
{
|
||||||
|
u8 curs;
|
||||||
|
/* Desactive le curseur hardware */
|
||||||
|
outb(ccrt, 10);
|
||||||
|
curs = inb(ccrt+1)|32;
|
||||||
|
outb(ccrt+1, curs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Active le scrolling en cas de débordement d'écran */
|
||||||
|
|
||||||
|
void enablescroll (void)
|
||||||
|
|
||||||
|
{
|
||||||
|
scrolling=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Desactive le scrolling en cas de débordement d'écran */
|
||||||
|
|
||||||
|
void disablescroll (void)
|
||||||
|
{
|
||||||
|
scrolling=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Utilise le plan de bit spécifié */
|
||||||
|
|
||||||
|
void useplane(u8 plan)
|
||||||
|
{
|
||||||
|
u8 mask;
|
||||||
|
plan &= 3;
|
||||||
|
mask = 1 << plan;
|
||||||
|
/* choisi le plan de lecture */
|
||||||
|
outb(graphics, 4);
|
||||||
|
outb(graphics+1, plan);
|
||||||
|
/* choisi le plan d'ecriture */
|
||||||
|
outb(sequencer, 2);
|
||||||
|
outb(sequencer+1, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Renvoie l'adresse du segment video */
|
||||||
|
|
||||||
|
u32 getbase(void)
|
||||||
|
{
|
||||||
|
u32 base;
|
||||||
|
outb(graphics, 6);
|
||||||
|
base = inb(graphics+1);
|
||||||
|
base >>= 2;
|
||||||
|
base &= 3;
|
||||||
|
switch(base)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
base = 0xA0000;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
base = 0xB0000;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
base = 0xB8000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* efface l'écran */
|
||||||
|
|
||||||
|
void (*fill)(u8 attrib);
|
||||||
|
|
||||||
|
|
||||||
|
void fill_text (u8 attrib)
|
||||||
|
{
|
||||||
|
gotoscr(0,0);
|
||||||
|
memset((u8 *)(basemem+activepage*pagesize),' ',pagesize/2,2);
|
||||||
|
memset((u8 *)(basemem+activepage*pagesize+1),attrib,pagesize/2,2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_chain (u8 attrib)
|
||||||
|
{
|
||||||
|
gotoscr(0,0);
|
||||||
|
memset((u8 *)(basemem+activepage*pagesize),attrib&0x0F,pagesize,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_unchain (u8 attrib)
|
||||||
|
{
|
||||||
|
gotoscr(0,0);
|
||||||
|
int i;
|
||||||
|
for(i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
useplane(i);
|
||||||
|
memset((u8 *)(basemem+activepage*pagesize),attrib&0x0F,pagesize,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* fixe la position du curseur texte */
|
||||||
|
|
||||||
|
void gotoscr(u16 x,u16 y)
|
||||||
|
{
|
||||||
|
u16 pos;
|
||||||
|
pos=(x+y*resX);
|
||||||
|
outb(ccrt,0x0F);
|
||||||
|
outb(ccrt+1,(u8)(pos&0x00FF));
|
||||||
|
outb(ccrt,0x0E);
|
||||||
|
outb(ccrt+1,(u8)((pos&0xFF00)>>8));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Fait defiler l'ecran de n lignes vers le haut */
|
||||||
|
|
||||||
|
void (*scroll)(u8 lines,u8 attrib);
|
||||||
|
|
||||||
|
void scroll_unchain(u8 lines,u8 attrib)
|
||||||
|
{
|
||||||
|
if (scrolling)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
for(i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
useplane(i);
|
||||||
|
memcpy((u8*)(basemem+linesize*8*lines),(u8*)basemem,pagesize-linesize*8*lines,1);
|
||||||
|
memset((u8*)(basemem+pagesize-linesize*8*lines),attrib&0x0F,linesize*8*lines,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void scroll_chain(u8 lines,u8 attrib)
|
||||||
|
{
|
||||||
|
if (scrolling)
|
||||||
|
{
|
||||||
|
memcpy((u8*)basemem+linesize*8*lines,(u8*)basemem,pagesize-linesize*8*lines,1);
|
||||||
|
memset((u8*)(basemem+pagesize-linesize*8*lines),attrib&0x0F,linesize*8*lines,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void scroll_text(u8 lines,u8 attrib)
|
||||||
|
{
|
||||||
|
if (scrolling)
|
||||||
|
{
|
||||||
|
memcpy((u8*)basemem+linesize*lines,(u8*)basemem,pagesize-linesize*lines,1);
|
||||||
|
memset((u8*)(basemem+pagesize-linesize*lines-2),' ',(linesize*lines)/2,2);
|
||||||
|
memset((u8*)(basemem+pagesize-linesize*lines-1),attrib,(linesize*lines)/2,2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Affiche le caractère a l'écran */
|
||||||
|
|
||||||
|
void (*showchar)(u16 coordx,u16 coordy,u8 thechar,u8 attrib);
|
||||||
|
|
||||||
|
void showchar_graphic(u16 coordx,u16 coordy,u8 thechar,u8 attrib)
|
||||||
|
{
|
||||||
|
u8 x,y,pattern,set;
|
||||||
|
for(y=0;y<8;y++)
|
||||||
|
{
|
||||||
|
pattern=font8x8[thechar*8+y];
|
||||||
|
for(x=0;x<8;x++)
|
||||||
|
{
|
||||||
|
set=((pattern>>(7-x))&0x1); /* mettre un ROL importé depuis asm */
|
||||||
|
if (set==0)
|
||||||
|
writepxl(coordx*8+x,coordy*8+y,((attrib&0xF0)>>8)*set);
|
||||||
|
else
|
||||||
|
writepxl(coordx*8+x,coordy*8+y,(attrib&0x0F)*set);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void showchar_text(u16 coordx,u16 coordy,u8 thechar,u8 attrib)
|
||||||
|
|
||||||
|
{
|
||||||
|
u8 *screen;
|
||||||
|
screen = (u8 *)basemem+activepage*pagesize+2*(coordx+coordy*resX);
|
||||||
|
*screen = thechar;
|
||||||
|
*(++screen) =attrib;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Ecrit un pixel a l'écran */
|
||||||
|
|
||||||
|
void (*writepxl)(u16 x, u16 y, u32 c);
|
||||||
|
|
||||||
|
void writepxl_1bit(u16 x, u16 y, u32 c)
|
||||||
|
{
|
||||||
|
u8* off;
|
||||||
|
u8 mask;
|
||||||
|
c = (c & 1) * 0xFF;
|
||||||
|
off = (u8*)(basemem+activepage*pagesize+linesize * y + x / 8);
|
||||||
|
x = (x & 7) * 1;
|
||||||
|
mask = 0x80 >> x;
|
||||||
|
*off= ((*off) & ~mask) | (c & mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
void writepxl_2bits(u16 x, u16 y, u32 c)
|
||||||
|
{
|
||||||
|
u8 *off;
|
||||||
|
u8 mask;
|
||||||
|
c = (c & 3) * 0x55;
|
||||||
|
off = (u8*)(basemem+activepage*pagesize+linesize * y + x / 4);
|
||||||
|
x = (x & 3) * 2;
|
||||||
|
mask = 0xC0 >> x;
|
||||||
|
*off= ((*off) & ~mask) | (c & mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
void writepxl_4bits(u16 x, u16 y, u32 c)
|
||||||
|
{
|
||||||
|
u8* off;
|
||||||
|
u8 mask, p, pmask;
|
||||||
|
off = (u8*)(basemem+activepage*pagesize+linesize * y + x / 8);
|
||||||
|
x = (x & 7) * 1;
|
||||||
|
mask = 0x80 >> x;
|
||||||
|
pmask = 1;
|
||||||
|
for(p = 0; p < 4; p++)
|
||||||
|
{
|
||||||
|
useplane(p);
|
||||||
|
if(pmask & c)
|
||||||
|
*off= ((*off) | mask);
|
||||||
|
else
|
||||||
|
*off= ((*off) & ~mask);
|
||||||
|
pmask <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void writepxl_8bits(u16 x, u16 y, u32 c)
|
||||||
|
{
|
||||||
|
u8* off;
|
||||||
|
off = (u8*)(basemem+activepage*pagesize+linesize * y + x);
|
||||||
|
*off=c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void writepxl_8bitsunchain(u16 x, u16 y, u32 c)
|
||||||
|
{
|
||||||
|
u8* off;
|
||||||
|
off = (u8*)(basemem+activepage*pagesize+linesize * y + x / 4);
|
||||||
|
useplane(x & 3);
|
||||||
|
*off=c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Change le mode video courant */
|
||||||
|
|
||||||
|
u32 setvmode(u8 mode)
|
||||||
|
{
|
||||||
|
u8 *def,i,gmode;
|
||||||
|
/* Récupere la definition des registres VGA en fonction du mode
|
||||||
|
graphique : >0x80
|
||||||
|
text : 0x00 - 0x7F
|
||||||
|
*/
|
||||||
|
if (mode>=0x80)
|
||||||
|
{
|
||||||
|
gmode=mode-0x80;
|
||||||
|
if (gmode>maxgraphmode) return 1; /* mode inexistant */
|
||||||
|
def=graphmodes[gmode];
|
||||||
|
graphic=true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mode>maxtextmode) return 1; /* mode inexistant */
|
||||||
|
def=textmodes[mode];
|
||||||
|
graphic=false;
|
||||||
|
loadfont(font8x8,8,1);
|
||||||
|
loadfont(font8x16,16,0);
|
||||||
|
}
|
||||||
|
/* Initialise les registre "divers" */
|
||||||
|
outb(misc,def[0]);
|
||||||
|
/* Initialise les registre d'etat */
|
||||||
|
outb(state,0x00);
|
||||||
|
/* Initialise le séquenceur */
|
||||||
|
outreg(sequencer,&def[1],5);
|
||||||
|
/* Debloque le verouillage des registres controleur CRT */
|
||||||
|
outb(ccrt,0x11);
|
||||||
|
outb(ccrt+1,0x0E);
|
||||||
|
/* Initialise le controleur CRT */
|
||||||
|
outreg(ccrt,&def[6],25);
|
||||||
|
/* Initialise le controleur graphique */
|
||||||
|
outreg(graphics,&def[31],9);
|
||||||
|
inb(state);
|
||||||
|
/* Initialise le controleur d'attributs */
|
||||||
|
outregsame(attribs,&def[40],21);
|
||||||
|
inb(state);
|
||||||
|
outb(attribs,0x20);
|
||||||
|
/* Récupere depuis la table de définition des mode la résolution et la
|
||||||
|
profondeur (en bits) */
|
||||||
|
resX=def[61];
|
||||||
|
resY=def[62];
|
||||||
|
color=def[63];
|
||||||
|
/* Initialise l'adresse des procedures de gestion graphique et les differentes
|
||||||
|
variables en fonction de la profondeur et du mode*/
|
||||||
|
if (!graphic)
|
||||||
|
{
|
||||||
|
/* mode texte */
|
||||||
|
linesize=resX*2;
|
||||||
|
writepxl=NULL; /* pas d'affichage de pixels */
|
||||||
|
showchar=showchar_text;
|
||||||
|
scroll=scroll_text;
|
||||||
|
fill=fill_text;
|
||||||
|
pagesize=resY*linesize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch(color)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
/* mode N&B */
|
||||||
|
linesize=resX;
|
||||||
|
writepxl=writepxl_1bit;
|
||||||
|
fill=fill_chain;
|
||||||
|
scroll=scroll_chain;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
/* mode 4 couleurs */
|
||||||
|
linesize=(resX<<1);
|
||||||
|
writepxl=writepxl_2bits;
|
||||||
|
fill=fill_chain;
|
||||||
|
scroll=scroll_chain;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
/* mode 16 couleurs */
|
||||||
|
linesize=resX;
|
||||||
|
writepxl=writepxl_4bits;
|
||||||
|
fill=fill_unchain;
|
||||||
|
scroll=scroll_unchain;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
/* mode 256 couleurs */
|
||||||
|
if (def[5]==0x0E)
|
||||||
|
{
|
||||||
|
/* mode chainé (plus rapide mais limité en mémoire) */
|
||||||
|
linesize=(resX<<3);
|
||||||
|
writepxl=writepxl_8bits;
|
||||||
|
scroll=scroll_chain;
|
||||||
|
fill=fill_chain;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* mode non chainé */
|
||||||
|
linesize=(resX<<1);
|
||||||
|
writepxl=writepxl_8bitsunchain;
|
||||||
|
scroll=scroll_unchain;
|
||||||
|
fill=fill_unchain;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
showchar=showchar_graphic;
|
||||||
|
pagesize=((resY*linesize)<<3);
|
||||||
|
}
|
||||||
|
/* calcul des variables d'état video */
|
||||||
|
activepage=0;
|
||||||
|
vmode=mode;
|
||||||
|
pages=(planesize/pagesize);
|
||||||
|
basemem=(def[20]<<8)+def[21]+getbase();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Récupère le mode vidéo en cours */
|
||||||
|
|
||||||
|
u8 getvmode(void)
|
||||||
|
{
|
||||||
|
return vmode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Charge une nouvelle police de caractère */
|
||||||
|
|
||||||
|
u32 loadfont(u8* def,u8 size,u8 font)
|
||||||
|
|
||||||
|
{
|
||||||
|
if (graphics==1) return 1;
|
||||||
|
u8 oldregs[5]={0,0,0,0,0};
|
||||||
|
u8* base;
|
||||||
|
u16 i;
|
||||||
|
if (font>7) return 1;
|
||||||
|
if (font<4)
|
||||||
|
base = (u8 *)(getbase()+(font<<14));
|
||||||
|
else
|
||||||
|
base = (u8 *)(getbase()+((((font-4)<<1)+1)<<13));
|
||||||
|
/* sauve les anciens registres */
|
||||||
|
outb(sequencer,2);
|
||||||
|
oldregs[0]=inb(sequencer+1);
|
||||||
|
outb(sequencer,4);
|
||||||
|
oldregs[1]=inb(sequencer+1);
|
||||||
|
/* Adressage paire/impair desactivé (lineaire) */
|
||||||
|
outb(sequencer+1, oldregs[1]|0x04);
|
||||||
|
outb(graphics,4);
|
||||||
|
oldregs[2]=inb(graphics+1);
|
||||||
|
outb(graphics,5);
|
||||||
|
oldregs[3]=inb(graphics+1);
|
||||||
|
/* Adressage paire/impair desactivé (lineaire) */
|
||||||
|
outb(graphics+1, oldregs[3]&~0x10);
|
||||||
|
outb(graphics,6);
|
||||||
|
oldregs[4]=inb(graphics+1);
|
||||||
|
/* Adressage paire/impair desactivé (lineaire) */
|
||||||
|
outb(graphics+1, oldregs[4] & ~0x02);
|
||||||
|
/* utilisation du plan N°2 */
|
||||||
|
useplane(2);
|
||||||
|
for(i=0; i < 256; i++)
|
||||||
|
{
|
||||||
|
memcpy(def,base+i*32,size,1);
|
||||||
|
def += size;
|
||||||
|
}
|
||||||
|
outb(sequencer,2);
|
||||||
|
outb(sequencer+1,oldregs[0]);
|
||||||
|
outb(sequencer,4);
|
||||||
|
outb(sequencer+1,oldregs[1]);
|
||||||
|
outb(graphics,4);
|
||||||
|
outb(graphics+1,oldregs[2]);
|
||||||
|
outb(graphics,5);
|
||||||
|
outb(graphics+1,oldregs[3]);
|
||||||
|
outb(graphics,6);
|
||||||
|
outb(graphics+1,oldregs[4]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Récupere le N° de la police de caractère en cours d'utilisation */
|
||||||
|
|
||||||
|
u8 getfont(u8 num)
|
||||||
|
{
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Fixe le N° de la police de caractère a utiliser */
|
||||||
|
|
||||||
|
void setfont(u8 num)
|
||||||
|
{
|
||||||
|
font=num&0x07;
|
||||||
|
outb(sequencer,3);
|
||||||
|
outb(sequencer+1,(num&0x03)+((num&0x04)<<2));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
88
lib/vgatxt.c
88
lib/vgatxt.c
|
@ -1,88 +0,0 @@
|
||||||
#include "vga.h"
|
|
||||||
#include "string.h"
|
|
||||||
#include "asm.h"
|
|
||||||
|
|
||||||
#include "modes.c"
|
|
||||||
#include "8x8fnt.c"
|
|
||||||
|
|
||||||
#define sequencer 0x3c4
|
|
||||||
#define misc 0x3c2
|
|
||||||
#define ccrt 0x3D4
|
|
||||||
#define attribs 0x3c0
|
|
||||||
#define graphics 0x3ce
|
|
||||||
#define state 0x3da
|
|
||||||
|
|
||||||
|
|
||||||
static u16 resX,resY,cursX,cursY; /* resolution x,y en caractères et position du curseur */
|
|
||||||
static u16 pages,pagesize,activepage; /* nombre de pages disponibles et taille d'une page */
|
|
||||||
static u8 vmode; /* mode en cours d'utilisation */
|
|
||||||
static u16 basemem; /* debut de la mémoire vidéo */
|
|
||||||
static bool scrolling,graphic; /* Activation du défilement, Flag du mode graphique */
|
|
||||||
|
|
||||||
|
|
||||||
void print (u8* string)
|
|
||||||
{
|
|
||||||
u8 *source,*screen;
|
|
||||||
source = string;
|
|
||||||
screen = (u8 *)TEXTSCREEN;
|
|
||||||
while(*source!=0x00)
|
|
||||||
{
|
|
||||||
*screen = *source;
|
|
||||||
screen+=2;
|
|
||||||
source++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void cls (void)
|
|
||||||
{
|
|
||||||
memset((u8 *)TEXTSCREEN,0x20,(80*25*2),2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u16 setvmode(u8 choosedmode)
|
|
||||||
{
|
|
||||||
u8 *def,i,mode;
|
|
||||||
|
|
||||||
mode=choosedmode&0x7F;
|
|
||||||
if (choosedmode>0x7F)
|
|
||||||
{
|
|
||||||
if (mode>maxgraphmode) return 1; /* mode inexistant */
|
|
||||||
def=(u8 *)&graphmodes[mode];
|
|
||||||
graphic=true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (mode>maxtextmode) return 1; /* mode inexistant */
|
|
||||||
def=(u8 *)&textmodes[mode];
|
|
||||||
graphic=false;
|
|
||||||
}
|
|
||||||
outb(misc,*def++);
|
|
||||||
outb(state,*def++);
|
|
||||||
for(i=0;i<5;i++)
|
|
||||||
{
|
|
||||||
outb(sequencer,i);
|
|
||||||
outb(sequencer+1,*def++);
|
|
||||||
}
|
|
||||||
outb(ccrt,0x11);
|
|
||||||
outb(ccrt+1,0x0E);
|
|
||||||
for(i=0;i<25;i++)
|
|
||||||
{
|
|
||||||
outb(ccrt,i);
|
|
||||||
outb(ccrt+1,*def++);
|
|
||||||
}
|
|
||||||
for(i=0;i<9;i++)
|
|
||||||
{
|
|
||||||
outb(graphics,i);
|
|
||||||
outb(graphics+1,*def++);
|
|
||||||
}
|
|
||||||
inb(state);
|
|
||||||
for(i=0;i<21;i++)
|
|
||||||
{
|
|
||||||
inb(attribs);
|
|
||||||
outb(attribs,i);
|
|
||||||
outb(attribs,*def++);
|
|
||||||
}
|
|
||||||
inb(state);
|
|
||||||
outb(attribs,0x20);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -0,0 +1,292 @@
|
||||||
|
#include "vga.h"
|
||||||
|
#include "video.h"
|
||||||
|
|
||||||
|
u8 attrib=0x07;
|
||||||
|
u16 cursX,cursY; /* position du curseur */
|
||||||
|
extern u16 resX,resY; /* resolution x,y en caractères*/
|
||||||
|
u8 ansi,param1,param2,param3;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* Fixe l'attribut courant */
|
||||||
|
|
||||||
|
void setattrib(u8 att)
|
||||||
|
{
|
||||||
|
static const u8 ansitovga[] =
|
||||||
|
{
|
||||||
|
0, 4, 2, 6, 1, 5, 3, 7
|
||||||
|
};
|
||||||
|
u8 tempattr;
|
||||||
|
|
||||||
|
tempattr = attrib;
|
||||||
|
if(att == 0)
|
||||||
|
tempattr &= ~0x08; /* Faible intensité */
|
||||||
|
else if(att == 1)
|
||||||
|
tempattr |= 0x08; /* Forte intensité */
|
||||||
|
else if(att >= 30 && att <= 37)
|
||||||
|
{
|
||||||
|
att = ansitovga[att - 30];
|
||||||
|
tempattr = (tempattr & ~0x07) | att;/* couleur de premier plan */
|
||||||
|
}
|
||||||
|
else if(att >= 40 && att <= 47)
|
||||||
|
{
|
||||||
|
att = ansitovga[att - 40] << 4;
|
||||||
|
tempattr = (tempattr & ~0x70) | att;/* couleur de fond */
|
||||||
|
}
|
||||||
|
attrib = tempattr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* gere l'ansi */
|
||||||
|
|
||||||
|
bool makeansi(u8 c)
|
||||||
|
{
|
||||||
|
/* state machine to handle the escape sequences */
|
||||||
|
switch(ansi)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
/* ESC -- next state */
|
||||||
|
if(c == 0x1B)
|
||||||
|
{
|
||||||
|
ansi++;
|
||||||
|
return 1; /* "I handled it" */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/* ESC */
|
||||||
|
case 1:
|
||||||
|
if(c == '[')
|
||||||
|
{
|
||||||
|
ansi++;
|
||||||
|
param1 = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/* ESC[ */
|
||||||
|
case 2:
|
||||||
|
if(isdigit(c))
|
||||||
|
{
|
||||||
|
param1 = param1 * 10 + c - '0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if(c == ';')
|
||||||
|
{
|
||||||
|
ansi++;
|
||||||
|
param2 = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[2J -- efface l'ecran */
|
||||||
|
else if(c == 'J')
|
||||||
|
{
|
||||||
|
if(param1 == 2)
|
||||||
|
{
|
||||||
|
fill(attrib);
|
||||||
|
ansi = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* ESC[num1m -- met l'attribut num1 */
|
||||||
|
else if(c == 'm')
|
||||||
|
{
|
||||||
|
setattrib(param1);
|
||||||
|
ansi = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1A -- bouge le curseur de num1 vers le haut */
|
||||||
|
else if(c == 'A')
|
||||||
|
{
|
||||||
|
cursY-=param1;
|
||||||
|
ansi = 0;
|
||||||
|
gotoscr(cursX,cursY);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1B -- bouge le curseur de num1 vers le bas */
|
||||||
|
else if(c == 'B')
|
||||||
|
{
|
||||||
|
cursY+=param1;
|
||||||
|
ansi = 0;
|
||||||
|
gotoscr(cursX,cursY);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1C -- bouge le curseur de num1 vers la gauche */
|
||||||
|
else if(c == 'C')
|
||||||
|
{
|
||||||
|
cursX-=param1;
|
||||||
|
ansi = 0;
|
||||||
|
gotoscr(cursX,cursY);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1D -- bouge le curseur de num1 vers la droite */
|
||||||
|
else if(c == 'D')
|
||||||
|
{
|
||||||
|
cursX+=param1;
|
||||||
|
ansi = 0;
|
||||||
|
gotoscr(cursX,cursY);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/* ESC[num1; */
|
||||||
|
case 3:
|
||||||
|
if(isdigit(c))
|
||||||
|
{
|
||||||
|
param2 = param2 * 10 + c - '0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if(c == ';')
|
||||||
|
{
|
||||||
|
ansi++;
|
||||||
|
param3 = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1;num2H ou ESC[num1;num2f-- bouge le curseur en num1,num2 */
|
||||||
|
else if((c == 'H')||(c == 'f'))
|
||||||
|
{
|
||||||
|
/* Remet la position du curseur matériel a num1,num2 */
|
||||||
|
gotoscr(param2,param1);
|
||||||
|
/* Remet la position du curseur logiciel a num1,num2 */
|
||||||
|
cursX=param2;
|
||||||
|
cursY=param1;
|
||||||
|
ansi = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1;num2m -- met les attributs num1,num2 */
|
||||||
|
else if(c == 'm')
|
||||||
|
{
|
||||||
|
setattrib(param1);
|
||||||
|
setattrib(param2);
|
||||||
|
ansi = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/* ESC[num1;num2;num3 */
|
||||||
|
case 4:
|
||||||
|
if(isdigit(c))
|
||||||
|
{
|
||||||
|
param3 = param3 * 10 + c - '0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* ESC[num1;num2;num3m -- met les attributs num1,num2,num3 */
|
||||||
|
else if(c == 'm')
|
||||||
|
{
|
||||||
|
setattrib(param1);
|
||||||
|
setattrib(param2);
|
||||||
|
setattrib(param3);
|
||||||
|
ansi = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/* Mauvais etat >> reset */
|
||||||
|
default:
|
||||||
|
ansi = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ansi = 0;
|
||||||
|
return 0; /* Ansi fini ;)*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* affiche un caractère a l'écran */
|
||||||
|
|
||||||
|
void putchar(u8 thechar)
|
||||||
|
{
|
||||||
|
if(makeansi(thechar)) return;
|
||||||
|
switch (thechar)
|
||||||
|
{
|
||||||
|
case 0x11:
|
||||||
|
if (cursY>0) cursY--;
|
||||||
|
break;
|
||||||
|
case 0x12:
|
||||||
|
if (cursY<resY-1) cursY++;
|
||||||
|
break;
|
||||||
|
case 0x13:
|
||||||
|
if (cursX>0) cursX--;
|
||||||
|
break;
|
||||||
|
case 0x14:
|
||||||
|
if (cursX<resX-1) cursX++;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
cursX=0;
|
||||||
|
cursY=0;
|
||||||
|
break;
|
||||||
|
case 0x3:
|
||||||
|
cursX=0;
|
||||||
|
cursY=resY-1;
|
||||||
|
break;
|
||||||
|
case 0x19:
|
||||||
|
cursX=resX-1;
|
||||||
|
break;
|
||||||
|
case '\b':
|
||||||
|
if (cursX==0)
|
||||||
|
{
|
||||||
|
if (cursY>0)
|
||||||
|
{
|
||||||
|
cursX=resX-1;
|
||||||
|
cursY--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cursX--;
|
||||||
|
}
|
||||||
|
showchar(cursX,cursY,' ',attrib);
|
||||||
|
break;
|
||||||
|
case '\t':
|
||||||
|
cursX=(cursX + 8) & ~(8 - 1);
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
cursX=0;
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
cursX=0;
|
||||||
|
cursY++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (thechar>=' ')
|
||||||
|
{
|
||||||
|
showchar(cursX,cursY,thechar,attrib);
|
||||||
|
cursX++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (cursX>=resX)
|
||||||
|
{
|
||||||
|
cursX=0;
|
||||||
|
cursY++;
|
||||||
|
}
|
||||||
|
if (cursY>=resY)
|
||||||
|
{
|
||||||
|
scroll(1,attrib);
|
||||||
|
cursY=resY-1;
|
||||||
|
}
|
||||||
|
gotoscr(cursX,cursY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* affiche une chaine de caractère a l'écran */
|
||||||
|
|
||||||
|
void print(u8* string)
|
||||||
|
{
|
||||||
|
u8 *source;
|
||||||
|
source = string;
|
||||||
|
while(*source!=0x00)
|
||||||
|
{
|
||||||
|
putchar(*source++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
/* affiche un octet sous forme hexadécimale a l'ecran */
|
||||||
|
|
||||||
|
void showhex(u8 src)
|
||||||
|
{
|
||||||
|
static u8 hexadigit[16] = "0123456789ABCDEF";
|
||||||
|
putchar(hexadigit[(src&0xF0)>>4]);
|
||||||
|
putchar(hexadigit[src&0x0F]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
16
makefile
16
makefile
|
@ -1,29 +1,33 @@
|
||||||
all: makall
|
all: makall
|
||||||
|
|
||||||
makall: boot/boot12.bin installer/mbrol.com lib/libs.o system/system.sys
|
makall: boot/boot12.bin lib/libs.o system/system.sys
|
||||||
sync
|
sync
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
(cd system; make clean)
|
(cd system; make clean)
|
||||||
(cd boot; make clean)
|
(cd boot; make clean)
|
||||||
(cd install; make clean)
|
|
||||||
(cd lib;make clean)
|
(cd lib;make clean)
|
||||||
sync
|
sync
|
||||||
|
|
||||||
backup: clean
|
backup: clean
|
||||||
(cd .. ; tar cf - cos | gzip -f - > backup.tar.gz)
|
(cd .. ; tar cf - cosc | gzip -f - > backup.tar.gz ; cd cosc)
|
||||||
|
|
||||||
allbackup: backup
|
allbackup: backup
|
||||||
(echo Inserez une disquette; sleep ; cp ../backup.tar.bz2 /dev/fd0)
|
(echo Inserez une disquette; sleep ; cp ../backup.tar.bz2 /dev/fd0)
|
||||||
|
|
||||||
|
copy:
|
||||||
|
(cp system/system.sys /cygdrive/a)
|
||||||
|
|
||||||
|
copy2:
|
||||||
|
(cp system/system.sys /cygdrive/b)
|
||||||
|
|
||||||
|
test: clean all copy2
|
||||||
|
|
||||||
system/system.sys:
|
system/system.sys:
|
||||||
(cd system; make)
|
(cd system; make)
|
||||||
|
|
||||||
boot/boot12.bin:
|
boot/boot12.bin:
|
||||||
(cd boot; make)
|
(cd boot; make)
|
||||||
|
|
||||||
installer/mbrol.com:
|
|
||||||
(cd install; make)
|
|
||||||
|
|
||||||
lib/libs.o:
|
lib/libs.o:
|
||||||
(cd lib; make)
|
(cd lib; make)
|
|
@ -6,12 +6,6 @@ LINK=ld -Ttext 0x100000 -e __main -o
|
||||||
all: system.sys
|
all: system.sys
|
||||||
sync
|
sync
|
||||||
|
|
||||||
copy:
|
|
||||||
(cp system.sys /cygdrive/a)
|
|
||||||
|
|
||||||
copy2:
|
|
||||||
(cp system.sys /cygdrive/b)
|
|
||||||
|
|
||||||
system.sys:
|
system.sys:
|
||||||
nasm -f bin -o loader.bin loader.asm
|
nasm -f bin -o loader.bin loader.asm
|
||||||
nasm -f elf -o system.o system.asm
|
nasm -f elf -o system.o system.asm
|
||||||
|
|
|
@ -1,8 +1,40 @@
|
||||||
#include "vga.h"
|
#include "vga.h"
|
||||||
|
#include "video.h"
|
||||||
|
#include "idt.h"
|
||||||
|
#include "timer.h"
|
||||||
|
#include "keyboard.h"
|
||||||
|
#include "asm.h"
|
||||||
|
|
||||||
int __main(void) {
|
u8 printok[]=" \033[37m\033[1m[ \033[32mOK\033[37m ]\033[0m\r\n";
|
||||||
setvmode(1);
|
|
||||||
cls();
|
int _main(void) {
|
||||||
print("Hello cos is here !");
|
cli();
|
||||||
|
setvmode(0x02);
|
||||||
|
/* Efface l'ecran */
|
||||||
|
print("\033[2J");
|
||||||
|
print("Noyau charge en memoire");
|
||||||
|
print(printok);
|
||||||
|
print("Initilisation de la table d'interruption");
|
||||||
|
initidt();
|
||||||
|
print(printok);
|
||||||
|
print("Initialisation du controleur d'interruption");
|
||||||
|
initpic();
|
||||||
|
print(printok);
|
||||||
|
print("Activation logicielle des interruptions");
|
||||||
|
sti();
|
||||||
|
print(printok);
|
||||||
|
print("Installation du handler timer");
|
||||||
|
setidt((u32)timer, 0x30, INTGATE, 32);
|
||||||
|
print(printok);
|
||||||
|
print("Activation de l'IRQ 0");
|
||||||
|
enableirq(0);
|
||||||
|
print(printok);
|
||||||
|
print("Installation du handler clavier");
|
||||||
|
setidt((u32)keyboard, 0x30, INTGATE, 33);
|
||||||
|
print(printok);
|
||||||
|
print("Activation de l'IRQ 1");
|
||||||
|
enableirq(1);
|
||||||
|
print(printok);
|
||||||
while(1);
|
while(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue