summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksa Vučković <aleksav013@gmail.com>2022-01-09 18:50:48 +0100
committerAleksa Vučković <aleksav013@gmail.com>2022-01-10 22:36:52 +0100
commit8e79ceaa7d3995df5a5dcf0ffdbd52ebe4c52163 (patch)
tree60424b081f4a3e37e0c87dfa764ea559f1ba0543
parentdbbb74c22f42df9175eaea72c1eb12d6deab332c (diff)
Indentation
-rw-r--r--src/as/boot.s32
-rw-r--r--src/as/crti.s12
-rw-r--r--src/as/crtn.s12
-rw-r--r--src/as/paging.s4
-rw-r--r--src/c/gdt.c10
-rw-r--r--src/c/heap.c265
-rw-r--r--src/c/idt.c3
-rw-r--r--src/c/keyboard.c150
-rw-r--r--src/c/keymap.c680
-rw-r--r--src/c/paging.c18
-rw-r--r--src/c/stack_protector.c14
-rw-r--r--src/c/stdio.c28
-rw-r--r--src/c/string.c48
-rw-r--r--src/c/timer.c6
-rw-r--r--src/c/tty.c70
-rw-r--r--src/c/vga.c25
-rw-r--r--src/include/stdio.h9
-rw-r--r--src/include/stdlib.h8
-rw-r--r--src/include/string.h8
-rw-r--r--src/include/sys/types.h2
-rw-r--r--src/include/unistd.h9
-rw-r--r--src/linker.ld70
22 files changed, 740 insertions, 743 deletions
diff --git a/src/as/boot.s b/src/as/boot.s
index 68e5947..907cd3c 100644
--- a/src/as/boot.s
+++ b/src/as/boot.s
@@ -3,7 +3,7 @@
.set FLAGS, ALIGN | MEMINFO
.set MAGIC, 0x1BADB002
.set CHECKSUM, -(MAGIC + FLAGS)
-
+
.section .multiboot
.align 4
.long MAGIC
@@ -51,20 +51,20 @@ stack_top:
.section .text
.type _start, @function
_start:
- call init_gdt_table
- ljmp $CODE_SEGMENT, $code
-
+ call init_gdt_table
+ ljmp $CODE_SEGMENT, $code
+
code:
- movw $DATA_SEGMENT, %ax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %fs
- movw %ax, %gs
- movw %ax, %ss
- movl $stack_top, %esp
- cli
- call _init
- call kernel_main
- hlt
-
+ movw $DATA_SEGMENT, %ax
+ movw %ax, %ds
+ movw %ax, %es
+ movw %ax, %fs
+ movw %ax, %gs
+ movw %ax, %ss
+ movl $stack_top, %esp
+ cli
+ call _init
+ call kernel_main
+ hlt
+
.size _start, . - _start
diff --git a/src/as/crti.s b/src/as/crti.s
index 30dd4ea..5894e2d 100644
--- a/src/as/crti.s
+++ b/src/as/crti.s
@@ -3,14 +3,14 @@
.global _init
.type _init, @function
_init:
- push %ebp
- movl %esp, %ebp
- /* gcc will nicely put the contents of crtbegin.o's .init section here. */
+ push %ebp
+ movl %esp, %ebp
+ /* gcc will nicely put the contents of crtbegin.o's .init section here. */
.section .fini
.global _fini
.type _fini, @function
_fini:
- push %ebp
- movl %esp, %ebp
- /* gcc will nicely put the contents of crtbegin.o's .fini section here. */
+ push %ebp
+ movl %esp, %ebp
+ /* gcc will nicely put the contents of crtbegin.o's .fini section here. */
diff --git a/src/as/crtn.s b/src/as/crtn.s
index 1da795d..0e1c314 100644
--- a/src/as/crtn.s
+++ b/src/as/crtn.s
@@ -1,10 +1,10 @@
/* x86 crtn.s */
.section .init
- /* gcc will nicely put the contents of crtend.o's .init section here. */
- popl %ebp
- ret
+ /* gcc will nicely put the contents of crtend.o's .init section here. */
+ popl %ebp
+ ret
.section .fini
- /* gcc will nicely put the contents of crtend.o's .fini section here. */
- popl %ebp
- ret
+ /* gcc will nicely put the contents of crtend.o's .fini section here. */
+ popl %ebp
+ ret
diff --git a/src/as/paging.s b/src/as/paging.s
index 2dd52d3..e1cf42a 100644
--- a/src/as/paging.s
+++ b/src/as/paging.s
@@ -1,4 +1,4 @@
-.globl loadPageDirectory
+.global loadPageDirectory
loadPageDirectory:
push %ebp
mov %esp, %ebp
@@ -9,7 +9,7 @@ loadPageDirectory:
ret
.text
-.globl enablePaging
+.global enablePaging
enablePaging:
push %ebp
mov %esp, %ebp
diff --git a/src/c/gdt.c b/src/c/gdt.c
index a9a745c..e3d2b4c 100644
--- a/src/c/gdt.c
+++ b/src/c/gdt.c
@@ -36,11 +36,11 @@ void init_gdt_table()
gdtp.size=sizeof(gdt)-1;
gdtp.offset=(uint32_t)&gdt;
- init_gdt_entry(0,0,0,0,0); // null segment
- init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment
- init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment
- init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment
- init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment
+ init_gdt_entry(0,0,0,0,0); // null segment
+ init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment
+ init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment
+ init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment
+ init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment
load_gdt(&gdtp);
}
diff --git a/src/c/heap.c b/src/c/heap.c
index 3e1ba24..99d0a37 100644
--- a/src/c/heap.c
+++ b/src/c/heap.c
@@ -1,151 +1,146 @@
#include<types.h>
typedef struct _KHEAPBLOCKBM {
- struct _KHEAPBLOCKBM *next;
- uint32_t size;
- uint32_t used;
- uint32_t bsize;
- uint32_t lfb;
+ struct _KHEAPBLOCKBM *next;
+ uint32_t size;
+ uint32_t used;
+ uint32_t bsize;
+ uint32_t lfb;
} KHEAPBLOCKBM;
-
+
typedef struct _KHEAPBM {
- KHEAPBLOCKBM *fblock;
+ KHEAPBLOCKBM *fblock;
} KHEAPBM;
-
+
void k_heapBMInit(KHEAPBM *heap) {
- heap->fblock = 0;
+ heap->fblock = 0;
}
-
+
int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t bsize) {
- KHEAPBLOCKBM *b;
- uint32_t bcnt;
- uint32_t x;
- uint8_t *bm;
-
- b = (KHEAPBLOCKBM*)addr;
- b->size = size - sizeof(KHEAPBLOCKBM);
- b->bsize = bsize;
-
- b->next = heap->fblock;
- heap->fblock = b;
-
- bcnt = b->size / b->bsize;
- bm = (uint8_t*)&b[1];
-
- /* clear bitmap */
- for (x = 0; x < bcnt; ++x) {
- bm[x] = 0;
- }
-
- /* reserve room for bitmap */
- bcnt = (bcnt / bsize) * bsize < bcnt ? bcnt / bsize + 1 : bcnt / bsize;
- for (x = 0; x < bcnt; ++x) {
- bm[x] = 5;
- }
-
- b->lfb = bcnt - 1;
-
- b->used = bcnt;
-
- return 1;
+ KHEAPBLOCKBM *b;
+ uint32_t bcnt;
+ uint32_t x;
+ uint8_t *bm;
+
+ b = (KHEAPBLOCKBM*)addr;
+ b->size = size - sizeof(KHEAPBLOCKBM);
+ b->bsize = bsize;
+
+ b->next = heap->fblock;
+ heap->fblock = b;
+
+ bcnt = b->size / b->bsize;
+ bm = (uint8_t*)&b[1];
+
+ /* clear bitmap */
+ for (x = 0; x < bcnt; ++x) {
+ bm[x] = 0;
+ }
+
+ /* reserve room for bitmap */
+ bcnt = (bcnt / bsize) * bsize < bcnt ? bcnt / bsize + 1 : bcnt / bsize;
+ for (x = 0; x < bcnt; ++x) {
+ bm[x] = 5;
+ }
+
+ b->lfb = bcnt - 1;
+ b->used = bcnt;
+ return 1;
}
-
+
static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b) {
- uint8_t c;
- for (c = a + 1; c == b || c == 0; ++c);
- return c;
+ uint8_t c;
+ for (c = a + 1; c == b || c == 0; ++c);
+ return c;
}
-
+
void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) {
- KHEAPBLOCKBM *b;
- uint8_t *bm;
- uint32_t bcnt;
- uint32_t x, y, z;
- uint32_t bneed;
- uint8_t nid;
-
- /* iterate blocks */
- for (b = heap->fblock; b; b = b->next) {
- //printf("size:%d,used:%d,bsize:%d,lfb:%d\n",b->size,b->used,b->bsize,b->lfb);
- /* check if block has enough room */
- if (b->size - (b->used * b->bsize) >= size) {
-
- bcnt = b->size / b->bsize;
- bneed = (size / b->bsize) * b->bsize < size ? size / b->bsize + 1 : size / b->bsize;
- bm = (uint8_t*)&b[1];
- //printf("bcnt:%d,bneed:%d,bm:%d\n",bcnt,bneed,bm);
-
- for (x = (b->lfb + 1 >= bcnt ? 0 : b->lfb + 1); x != b->lfb; ++x) {
- /* just wrap around */
- if (x >= bcnt) {
- x = 0;
- }
-
- if (bm[x] == 0) {
- /* count free blocks */
- for (y = 0; bm[x + y] == 0 && y < bneed && (x + y) < bcnt; ++y);
-
- /* we have enough, now allocate them */
- if (y == bneed) {
- /* find ID that does not match left or right */
- nid = k_heapBMGetNID(bm[x - 1], bm[x + y]);
-
- /* allocate by setting id */
- for (z = 0; z < y; ++z) {
- bm[x + z] = nid;
- }
-
- /* optimization */
- b->lfb = (x + bneed) - 2;
-
- /* count used blocks NOT bytes */
- b->used += y;
-
- return (void*)(x * b->bsize + (uintptr_t)&b[1]);
- }
-
- /* x will be incremented by one ONCE more in our FOR loop */
- x += (y - 1);
- continue;
- }
- }
- }
- }
-
- return 0;
+ KHEAPBLOCKBM *b;
+ uint8_t *bm;
+ uint32_t bcnt;
+ uint32_t x, y, z;
+ uint32_t bneed;
+ uint8_t nid;
+
+ /* iterate blocks */
+ for (b = heap->fblock; b; b = b->next) {
+ /* check if block has enough room */
+ if (b->size - (b->used * b->bsize) >= size) {
+
+ bcnt = b->size / b->bsize;
+ bneed = (size / b->bsize) * b->bsize < size ? size / b->bsize + 1 : size / b->bsize;
+ bm = (uint8_t*)&b[1];
+
+ for (x = (b->lfb + 1 >= bcnt ? 0 : b->lfb + 1); x != b->lfb; ++x) {
+ /* just wrap around */
+ if (x >= bcnt) {
+ x = 0;
+ }
+
+ if (bm[x] == 0) {
+ /* count free blocks */
+ for (y = 0; bm[x + y] == 0 && y < bneed && (x + y) < bcnt; ++y);
+
+ /* we have enough, now allocate them */
+ if (y == bneed) {
+ /* find ID that does not match left or right */
+ nid = k_heapBMGetNID(bm[x - 1], bm[x + y]);
+
+ /* allocate by setting id */
+ for (z = 0; z < y; ++z) {
+ bm[x + z] = nid;
+ }
+
+ /* optimization */
+ b->lfb = (x + bneed) - 2;
+
+ /* count used blocks NOT bytes */
+ b->used += y;
+
+ return (void*)(x * b->bsize + (uintptr_t)&b[1]);
+ }
+
+ /* x will be incremented by one ONCE more in our FOR loop */
+ x += (y - 1);
+ continue;
+ }
+ }
+ }
+ }
+ return 0;
}
-
+
void k_heapBMFree(KHEAPBM *heap, void *ptr) {
- KHEAPBLOCKBM *b;
- uintptr_t ptroff;
- uint32_t bi, x;
- uint8_t *bm;
- uint8_t id;
- uint32_t max;
-
- for (b = heap->fblock; b; b = b->next) {
- if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + sizeof(KHEAPBLOCKBM) + b->size) {
- /* found block */
- ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get block */
- /* block offset in BM */
- bi = ptroff / b->bsize;
- /* .. */
- bm = (uint8_t*)&b[1];
- /* clear allocation */
- id = bm[bi];
- /* oddly.. GCC did not optimize this */
- max = b->size / b->bsize;
- for (x = bi; bm[x] == id && x < max; ++x) {
- bm[x] = 0;
- }
- /* update free block count */
- b->used -= x - bi;
- return;
- }
- }
-
- /* this error needs to be raised or reported somehow */
- return;
+ KHEAPBLOCKBM *b;
+ uintptr_t ptroff;
+ uint32_t bi, x;
+ uint8_t *bm;
+ uint8_t id;
+ uint32_t max;
+
+ for (b = heap->fblock; b; b = b->next) {
+ if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + sizeof(KHEAPBLOCKBM) + b->size) {
+ /* found block */
+ ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get block */
+ /* block offset in BM */
+ bi = ptroff / b->bsize;
+ /* .. */
+ bm = (uint8_t*)&b[1];
+ /* clear allocation */
+ id = bm[bi];
+ /* oddly.. GCC did not optimize this */
+ max = b->size / b->bsize;
+ for (x = bi; bm[x] == id && x < max; ++x) {
+ bm[x] = 0;
+ }
+ /* update free block count */
+ b->used -= x - bi;
+ return;
+ }
+ }
+
+ /* this error needs to be raised or reported somehow */
+ return;
}
KHEAPBM kheap;
@@ -154,15 +149,17 @@ void kheapinit()
{
k_heapBMInit(&kheap);
}
+
int kheapaddblock(uintptr_t addr,uint32_t size,uint32_t bsize)
{
return k_heapBMAddBlock(&kheap,addr,size,bsize);
}
+
void *kmalloc(uint32_t size)
{
return k_heapBMAlloc(&kheap,size);
-
}
+
void kfree(void *ptr)
{
k_heapBMFree(&kheap,ptr);
diff --git a/src/c/idt.c b/src/c/idt.c
index 005a05c..843c9da 100644
--- a/src/c/idt.c
+++ b/src/c/idt.c
@@ -42,6 +42,7 @@ void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t type
idt[num].type_attr=type_attr;
idt[num].offset2=(offset & 0xffff0000)>>16;
}
+
void add_idt_entry(size_t num,uint32_t offset)
{
init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32);
@@ -59,7 +60,6 @@ void init_pic()
ioport_out(PIC2_DATA_PORT, 0x01);
ioport_out(PIC1_DATA_PORT, 0xff);
ioport_out(PIC2_DATA_PORT, 0xff);
-
ioport_out(PIC1_DATA_PORT, 0xFC);
}
@@ -104,6 +104,5 @@ void init_idt_table()
idtp.size=sizeof(struct idt_entry)*256-1;
idtp.offset=(uint32_t)&idt;
-
load_idt(&idtp);
}
diff --git a/src/c/keyboard.c b/src/c/keyboard.c
index d082ec5..2218f09 100644
--- a/src/c/keyboard.c
+++ b/src/c/keyboard.c
@@ -28,6 +28,10 @@ void us_en_shift(char keymap[]);
char charcode[256];
char shift_charcode[256];
bool ispressed[128];
+#define lshift 0x2A
+#define rshift 0x36
+#define lctrl 0x1D
+#define rctrl 0x1D
void init_keyboard()
{
@@ -56,15 +60,15 @@ void enter()
printf("\n");
if(buffer_index>0)
{
- tty(buffer[buffer_current]);
- buffer_size[buffer_current]=buffer_index;
- if(buffer_current==buffer_all) buffer_current=(++buffer_all);
- else
- {
- for(size_t i=0;i<BUFFER_SIZE;i++) buffer[buffer_all][i]='\0';
- buffer_current=buffer_all;
- }
- buffer_index=0;
+ tty(buffer[buffer_current]);
+ buffer_size[buffer_current]=buffer_index;
+ if(buffer_current==buffer_all) buffer_current=(++buffer_all);
+ else
+ {
+ for(size_t i=0;i<BUFFER_SIZE;i++) buffer[buffer_all][i]='\0';
+ buffer_current=buffer_all;
+ }
+ buffer_index=0;
}
prompt();
return;
@@ -80,37 +84,34 @@ void keyup()
{
if(buffer_current>0)
{
- buffer_size[buffer_current]=buffer_index;
- for(size_t i=0;i<buffer_index;i++) deletelast();
- buffer_current--;
- buffer_index=buffer_size[buffer_current];
- printf("%s",buffer[buffer_current]);
+ buffer_size[buffer_current]=buffer_index;
+ for(size_t i=0;i<buffer_index;i++) deletelast();
+ buffer_current--;
+ buffer_index=buffer_size[buffer_current];
+ printf("%s",buffer[buffer_current]);
}
}
+
void keydown()
{
if(buffer_current<buffer_all)
{
- buffer_size[buffer_current]=buffer_index;
- for(size_t i=0;i<buffer_index;i++) deletelast();
- buffer_current++;
- buffer_index=buffer_size[buffer_current];
- printf("%s",buffer[buffer_current]);
+ buffer_size[buffer_current]=buffer_index;
+ for(size_t i=0;i<buffer_index;i++) deletelast();
+ buffer_current++;
+ buffer_index=buffer_size[buffer_current];
+ printf("%s",buffer[buffer_current]);
}
}
+
void keyleft()
{
-
}
+
void keyright()
{
-
}
-#define lshift ispressed[0x2A]
-#define rshift ispressed[0x36]
-#define lctrl ispressed[0x1D]
-
void keyboard_handler()
{
ioport_out(PIC1_COMMAND_PORT, 0x20);
@@ -118,45 +119,64 @@ void keyboard_handler()
if (status & 0x1)
{
- uint8_t keycode = ioport_in(KEYBOARD_DATA_PORT);
-// printf("%d\n",keycode);
- if(keycode<0x80)
- {
- ispressed[keycode]=1;
- if(keycode==0x0E) backspace();
- else if(keycode==0x1C) enter();
- else if(keycode==0x39) space();
- else if(keycode==72) keyup();
- else if(keycode==80) keydown();
- else if(keycode==75) keyleft();
- else if(keycode==77) keyright();
- else
- {
- char c=charcode[keycode];
- if(c!=' ')
- {
- if(lctrl)
- {
- if(c=='l')
- {
- clear();
- prompt();
- printf("%s",buffer[buffer_current]);
- return;
- }
- }
- if(lshift||rshift)
- {
- c=shift_charcode[keycode];
- }
- buffer[buffer_current][buffer_index++]=c;
- printf("%c",c);
- }
- }
- }
- else
- {
- ispressed[keycode-0x80]=0;
- }
+ uint8_t keycode = ioport_in(KEYBOARD_DATA_PORT);
+ if(keycode<0x80)
+ {
+ char c=charcode[keycode];
+ ispressed[keycode]=1;
+ // printf("%d ",&keycode);
+
+ switch(keycode)
+ {
+ case 0x0E:
+ backspace();
+ break;
+ case 0x1C:
+ enter();
+ break;
+ case 0x39:
+ space();
+ break;
+ case 72:
+ keyup();
+ break;
+ case 80:
+ keydown();
+ break;
+ case 75:
+ keyleft();
+ break;
+ case 77:
+ keyright();
+ break;
+
+ default:
+ if(c!=' ')
+ {
+ if(ispressed[lctrl]||ispressed[rctrl])
+ {
+ if(c=='l')
+ {
+ clear();
+ prompt();
+ printf("%s",buffer[buffer_current]);
+ return;
+ }
+ }
+ if(ispressed[lshift]||ispressed[rshift])
+ {
+ c=shift_charcode[keycode];
+ }
+ buffer[buffer_current][buffer_index++]=c;
+ printf("%c",c);
+ }
+ break;
+ }
+
+ }
+ else
+ {
+ ispressed[keycode-0x80]=0;
+ }
}
}
diff --git a/src/c/keymap.c b/src/c/keymap.c
index 5401be0..168d5f9 100644
--- a/src/c/keymap.c
+++ b/src/c/keymap.c
@@ -1,346 +1,346 @@
void us_en(char keymap[])
{
- keymap[0x01]=' '; //escape pressed
- keymap[0x02]='1'; //1 pressed
- keymap[0x03]='2'; //2 pressed
- keymap[0x04]='3'; //3 pressed
- keymap[0x05]='4'; //4 pressed
- keymap[0x06]='5'; //5 pressed
- keymap[0x07]='6'; //6 pressed
- keymap[0x08]='7'; //7 pressed
- keymap[0x09]='8'; //8 pressed
- keymap[0x0A]='9'; //9 pressed
- keymap[0x0B]='0'; //0 (zero) pressed
- keymap[0x0C]='-'; //- pressed
- keymap[0x0D]='='; //= pressed
- keymap[0x0E]=' '; //backspace pressed
- keymap[0x0F]=' '; //tab pressed
- keymap[0x10]='q'; //Q pressed
- keymap[0x11]='w'; //W pressed
- keymap[0x12]='e'; //E pressed
- keymap[0x13]='r'; //R pressed
- keymap[0x14]='t'; //T pressed
- keymap[0x15]='y'; //Y pressed
- keymap[0x16]='u'; //U pressed
- keymap[0x17]='i'; //I pressed
- keymap[0x18]='o'; //O pressed
- keymap[0x19]='p'; //P pressed
- keymap[0x1A]='['; //[ pressed
- keymap[0x1B]=']'; //] pressed
- keymap[0x1C]='\n'; //enter pressed
- keymap[0x1D]=' '; //left control pressed
- keymap[0x1E]='a'; //A pressed
- keymap[0x1F]='s'; //S pressed
- keymap[0x20]='d'; //D pressed
- keymap[0x21]='f'; //F pressed
- keymap[0x22]='g'; //G pressed
- keymap[0x23]='h'; //H pressed
- keymap[0x24]='j'; //J pressed
- keymap[0x25]='k'; //K pressed
- keymap[0x26]='l'; //L pressed
- keymap[0x27]=';'; //; pressed
- keymap[0x28]='\''; //' (single quote) pressed
- keymap[0x29]='`'; //` (back tick) pressed
- keymap[0x2A]=' '; //left shift pressed
- keymap[0x2B]='\\'; //\ pressed
- keymap[0x2C]='z'; //Z pressed
- keymap[0x2D]='x'; //X pressed
- keymap[0x2E]='c'; //C pressed
- keymap[0x2F]='v'; //V pressed
- keymap[0x30]='b'; //B pressed
- keymap[0x31]='n'; //N pressed
- keymap[0x32]='m'; //M pressed
- keymap[0x33]=','; //, pressed
- keymap[0x34]='.'; //. pressed
- keymap[0x35]='/'; /// pressed
- keymap[0x36]=' '; //right shift pressed
- keymap[0x37]='*'; //(keypad) * pressed
- keymap[0x38]=' '; //left alt pressed
- keymap[0x39]=' '; //space pressed
- keymap[0x3A]=' '; //CapsLock pressed
- keymap[0x3B]=' '; //F1 pressed
- keymap[0x3C]=' '; //F2 pressed
- keymap[0x3D]=' '; //F3 pressed
- keymap[0x3E]=' '; //F4 pressed
- keymap[0x3F]=' '; //F5 pressed
- keymap[0x40]=' '; //F6 pressed
- keymap[0x41]=' '; //F7 pressed
- keymap[0x42]=' '; //F8 pressed
- keymap[0x43]=' '; //F9 pressed
- keymap[0x44]=' '; //F10 pressed
- keymap[0x45]=' '; //NumberLock pressed
- keymap[0x46]=' '; //ScrollLock pressed
- keymap[0x47]='7'; //(keypad) 7 pressed
- keymap[0x48]='8'; //(keypad) 8 pressed
- keymap[0x49]='9'; //(keypad) 9 pressed
- keymap[0x4A]='-'; //(keypad) - pressed
- keymap[0x4B]='4'; //(keypad) 4 pressed
- keymap[0x4C]='5'; //(keypad) 5 pressed
- keymap[0x4D]='6'; //(keypad) 6 pressed
- keymap[0x4E]='+'; //(keypad) + pressed
- keymap[0x4F]='1'; //(keypad) 1 pressed
- keymap[0x50]='2'; //(keypad) 2 pressed
- keymap[0x51]='3'; //(keypad) 3 pressed
- keymap[0x52]='0'; //(keypad) 0 pressed
- keymap[0x53]='.'; //(keypad) . pressed
- keymap[0x57]=' '; //F11 pressed
- keymap[0x58]=' '; //F12 pressed
- keymap[0x81]=' '; //escape released
- keymap[0x82]=' '; //1 released
- keymap[0x83]=' '; //2 released
- keymap[0x84]=' '; //3 released
- keymap[0x85]=' '; //4 released
- keymap[0x86]=' '; //5 released
- keymap[0x87]=' '; //6 released
- keymap[0x88]=' '; //7 released
- keymap[0x89]=' '; //8 released
- keymap[0x8A]=' '; //9 released
- keymap[0x8B]=' '; //0 (zero) released
- keymap[0x8C]=' '; //- released
- keymap[0x8D]=' '; //= released
- keymap[0x8E]=' '; //backspace released
- keymap[0x8F]=' '; //tab released
- keymap[0x90]=' '; //Q released
- keymap[0x91]=' '; //W released
- keymap[0x92]=' '; //E released
- keymap[0x93]=' '; //R released
- keymap[0x94]=' '; //T released
- keymap[0x95]=' '; //Y released
- keymap[0x96]=' '; //U released
- keymap[0x97]=' '; //I released
- keymap[0x98]=' '; //O released
- keymap[0x99]=' '; //P released
- keymap[0x9A]=' '; //[ released
- keymap[0x9B]=' '; //] released
- keymap[0x9C]=' '; //enter released
- keymap[0x9D]=' '; //left control released
- keymap[0x9E]=' '; //A released
- keymap[0x9F]=' '; //S released
- keymap[0xA0]=' '; //D released
- keymap[0xA1]=' '; //F released
- keymap[0xA2]=' '; //G released
- keymap[0xA3]=' '; //H released
- keymap[0xA4]=' '; //J released
- keymap[0xA5]=' '; //K released
- keymap[0xA6]=' '; //L released
- keymap[0xA7]=' '; //; released
- keymap[0xA8]=' '; //' (single quote) released
- keymap[0xA9]=' '; //` (back tick) released
- keymap[0xAA]=' '; //left shift released
- keymap[0xAB]=' '; //\ released
- keymap[0xAC]=' '; //Z released
- keymap[0xAD]=' '; //X released
- keymap[0xAE]=' '; //C released
- keymap[0xAF]=' '; //V released
- keymap[0xB0]=' '; //B released
- keymap[0xB1]=' '; //N released
- keymap[0xB2]=' '; //M released
- keymap[0xB3]=' '; //, released
- keymap[0xB4]=' '; //. released
- keymap[0xB5]=' '; /// released
- keymap[0xB6]=' '; //right shift released
- keymap[0xB7]='*'; //(keypad) * released
- keymap[0xB8]=' '; //left alt released
- keymap[0xB9]=' '; //space released
- keymap[0xBA]=' '; //CapsLock released
- keymap[0xBB]=' '; //F1 released
- keymap[0xBC]=' '; //F2 released
- keymap[0xBD]=' '; //F3 released
- keymap[0xBE]=' '; //F4 released
- keymap[0xBF]=' '; //F5 released
- keymap[0xC0]=' '; //F6 released
- keymap[0xC1]=' '; //F7 released
- keymap[0xC2]=' '; //F8 released
- keymap[0xC3]=' '; //F9 released
- keymap[0xC4]=' '; //F10 released
- keymap[0xC5]=' '; //NumberLock released
- keymap[0xC6]=' '; //ScrollLock released
- keymap[0xC7]=' '; //(keypad) 7 released
- keymap[0xC8]=' '; //(keypad) 8 released
- keymap[0xC9]=' '; //(keypad) 9 released
- keymap[0xCA]=' '; //(keypad) - released
- keymap[0xCB]=' '; //(keypad) 4 released
- keymap[0xCC]=' '; //(keypad) 5 released
- keymap[0xCD]=' '; //(keypad) 6 released
- keymap[0xCE]=' '; //(keypad) + released
- keymap[0xCF]=' '; //(keypad) 1 released
- keymap[0xD0]=' '; //(keypad) 2 released
- keymap[0xD1]=' '; //(keypad) 3 released
- keymap[0xD2]=' '; //(keypad) 0 released
- keymap[0xD3]=' '; //(keypad) . released
- keymap[0xD7]=' '; //F11 released
- keymap[0xD8]=' '; //F12 released
+ keymap[0x01]=' '; //escape pressed
+ keymap[0x02]='1'; //1 pressed
+ keymap[0x03]='2'; //2 pressed
+ keymap[0x04]='3'; //3 pressed
+ keymap[0x05]='4'; //4 pressed
+ keymap[0x06]='5'; //5 pressed
+ keymap[0x07]='6'; //6 pressed
+ keymap[0x08]='7'; //7 pressed
+ keymap[0x09]='8'; //8 pressed
+ keymap[0x0A]='9'; //9 pressed
+ keymap[0x0B]='0'; //0 (zero) pressed
+ keymap[0x0C]='-'; //- pressed
+ keymap[0x0D]='='; //= pressed
+ keymap[0x0E]=' '; //backspace pressed
+ keymap[0x0F]=' '; //tab pressed
+ keymap[0x10]='q'; //Q pressed
+ keymap[0x11]='w'; //W pressed
+ keymap[0x12]='e'; //E pressed
+ keymap[0x13]='r'; //R pressed
+ keymap[0x14]='t'; //T pressed
+ keymap[0x15]='y'; //Y pressed
+ keymap[0x16]='u'; //U pressed
+ keymap[0x17]='i'; //I pressed
+ keymap[0x18]='o'; //O pressed
+ keymap[0x19]='p'; //P pressed
+ keymap[0x1A]='['; //[ pressed
+ keymap[0x1B]=']'; //] pressed
+ keymap[0x1C]='\n'; //enter pressed
+ keymap[0x1D]=' '; //left control pressed
+ keymap[0x1E]='a'; //A pressed
+ keymap[0x1F]='s'; //S pressed
+ keymap[0x20]='d'; //D pressed
+ keymap[0x21]='f'; //F pressed
+ keymap[0x22]='g'; //G pressed
+ keymap[0x23]='h'; //H pressed
+ keymap[0x24]='j'; //J pressed
+ keymap[0x25]='k'; //K pressed
+ keymap[0x26]='l'; //L pressed
+ keymap[0x27]=';'; //; pressed
+ keymap[0x28]='\''; //' (single quote) pressed
+ keymap[0x29]='`'; //` (back tick) pressed
+ keymap[0x2A]=' '; //left shift pressed
+ keymap[0x2B]='\\'; //\ pressed
+ keymap[0x2C]='z'; //Z pressed
+ keymap[0x2D]='x'; //X pressed
+ keymap[0x2E]='c'; //C pressed
+ keymap[0x2F]='v'; //V pressed
+ keymap[0x30]='b'; //B pressed
+ keymap[0x31]='n'; //N pressed
+ keymap[0x32]='m'; //M pressed
+ keymap[0x33]=','; //, pressed
+ keymap[0x34]='.'; //. pressed
+ keymap[0x35]='/'; /// pressed
+ keymap[0x36]=' '; //right shift pressed
+ keymap[0x37]='*'; //(keypad) * pressed
+ keymap[0x38]=' '; //left alt pressed
+ keymap[0x39]=' '; //space pressed
+ keymap[0x3A]=' '; //CapsLock pressed
+ keymap[0x3B]=' '; //F1 pressed
+ keymap[0x3C]=' '; //F2 pressed
+ keymap[0x3D]=' '; //F3 pressed
+ keymap[0x3E]=' '; //F4 pressed
+ keymap[0x3F]=' '; //F5 pressed
+ keymap[0x40]=' '; //F6 pressed
+ keymap[0x41]=' '; //F7 pressed
+ keymap[0x42]=' '; //F8 pressed
+ keymap[0x43]=' '; //F9 pressed
+ keymap[0x44]=' '; //F10 pressed
+ keymap[0x45]=' '; //NumberLock pressed
+ keymap[0x46]=' '; //ScrollLock pressed
+ keymap[0x47]='7'; //(keypad) 7 pressed
+ keymap[0x48]='8'; //(keypad) 8 pressed
+ keymap[0x49]='9'; //(keypad) 9 pressed
+ keymap[0x4A]='-'; //(keypad) - pressed
+ keymap[0x4B]='4'; //(keypad) 4 pressed
+ keymap[0x4C]='5'; //(keypad) 5 pressed
+ keymap[0x4D]='6'; //(keypad) 6 pressed
+ keymap[0x4E]='+'; //(keypad) + pressed
+ keymap[0x4F]='1'; //(keypad) 1 pressed
+ keymap[0x50]='2'; //(keypad) 2 pressed
+ keymap[0x51]='3'; //(keypad) 3 pressed
+ keymap[0x52]='0'; //(keypad) 0 pressed
+ keymap[0x53]='.'; //(keypad) . pressed
+ keymap[0x57]=' '; //F11 pressed
+ keymap[0x58]=' '; //F12 pressed
+ keymap[0x81]=' '; //escape released
+ keymap[0x82]=' '; //1 released
+ keymap[0x83]=' '; //2 released
+ keymap[0x84]=' '; //3 released
+ keymap[0x85]=' '; //4 released
+ keymap[0x86]=' '; //5 released
+ keymap[0x87]=' '; //6 released
+ keymap[0x88]=' '; //7 released
+ keymap[0x89]=' '; //8 released
+ keymap[0x8A]=' '; //9 released
+ keymap[0x8B]=' '; //0 (zero) released
+ keymap[0x8C]=' '; //- released
+ keymap[0x8D]=' '; //= released
+ keymap[0x8E]=' '; //backspace released
+ keymap[0x8F]=' '; //tab released
+ keymap[0x90]=' '; //Q released
+ keymap[0x91]=' '; //W released
+ keymap[0x92]=' '; //E released
+ keymap[0x93]=' '; //R released
+ keymap[0x94]=' '; //T released
+ keymap[0x95]=' '; //Y released
+ keymap[0x96]=' '; //U released
+ keymap[0x97]=' '; //I released
+ keymap[0x98]=' '; //O released
+ keymap[0x99]=' '; //P released
+ keymap[0x9A]=' '; //[ released
+ keymap[0x9B]=' '; //] released
+ keymap[0x9C]=' '; //enter released
+ keymap[0x9D]=' '; //left control released
+ keymap[0x9E]=' '; //A released
+ keymap[0x9F]=' '; //S released
+ keymap[0xA0]=' '; //D released
+ keymap[0xA1]=' '; //F released
+ keymap[0xA2]=' '; //G released
+ keymap[0xA3]=' '; //H released
+ keymap[0xA4]=' '; //J released
+ keymap[0xA5]=' '; //K released
+ keymap[0xA6]=' '; //L released
+ keymap[0xA7]=' '; //; released
+ keymap[0xA8]=' '; //' (single quote) released
+ keymap[0xA9]=' '; //` (back tick) released
+ keymap[0xAA]=' '; //left shift released
+ keymap[0xAB]=' '; //\ released
+ keymap[0xAC]=' '; //Z released
+ keymap[0xAD]=' '; //X released
+ keymap[0xAE]=' '; //C released
+ keymap[0xAF]=' '; //V released
+ keymap[0xB0]=' '; //B released
+ keymap[0xB1]=' '; //N released
+ keymap[0xB2]=' '; //M released
+ keymap[0xB3]=' '; //, released
+ keymap[0xB4]=' '; //. released
+ keymap[0xB5]=' '; /// released
+ keymap[0xB6]=' '; //right shift released
+ keymap[0xB7]='*'; //(keypad) * released
+ keymap[0xB8]=' '; //left alt released
+ keymap[0xB9]=' '; //space released
+ keymap[0xBA]=' '; //CapsLock released
+ keymap[0xBB]=' '; //F1 released
+ keymap[0xBC]=' '; //F2 released
+ keymap[0xBD]=' '; //F3 released
+ keymap[0xBE]=' '; //F4 released
+ keymap[0xBF]=' '; //F5 released
+ keymap[0xC0]=' '; //F6 released
+ keymap[0xC1]=' '; //F7 released
+ keymap[0xC2]=' '; //F8 released
+ keymap[0xC3]=' '; //F9 released
+ keymap[0xC4]=' '; //F10 released
+ keymap[0xC5]=' '; //NumberLock released
+ keymap[0xC6]=' '; //ScrollLock released
+ keymap[0xC7]=' '; //(keypad) 7 released
+ keymap[0xC8]=' '; //(keypad) 8 released
+ keymap[0xC9]=' '; //(keypad) 9 released
+ keymap[0xCA]=' '; //(keypad) - released
+ keymap[0xCB]=' '; //(keypad) 4 released
+ keymap[0xCC]=' '; //(keypad) 5 released
+ keymap[0xCD]=' '; //(keypad) 6 released
+ keymap[0xCE]=' '; //(keypad) + released
+ keymap[0xCF]=' '; //(keypad) 1 released
+ keymap[0xD0]=' '; //(keypad) 2 released
+ keymap[0xD1]=' '; //(keypad) 3 released
+ keymap[0xD2]=' '; //(keypad) 0 released
+ keymap[0xD3]=' '; //(keypad) . released
+ keymap[0xD7]=' '; //F11 released
+ keymap[0xD8]=' '; //F12 released
}
void us_en_shift(char keymap[])
{
- keymap[0x01]=' '; //escape pressed
- keymap[0x02]='!'; //1 pressed
- keymap[0x03]='@'; //2 pressed
- keymap[0x04]='#'; //3 pressed
- keymap[0x05]='$'; //4 pressed
- keymap[0x06]='%'; //5 pressed
- keymap[0x07]='^'; //6 pressed
- keymap[0x08]='&'; //7 pressed
- keymap[0x09]='*'; //8 pressed
- keymap[0x0A]='('; //9 pressed
- keymap[0x0B]=')'; //0 (zero) pressed
- keymap[0x0C]='_'; //- pressed
- keymap[0x0D]='+'; //= pressed
- keymap[0x0E]=' '; //backspace pressed
- keymap[0x0F]=' '; //tab pressed
- keymap[0x10]='Q'; //Q pressed
- keymap[0x11]='W'; //W pressed
- keymap[0x12]='E'; //E pressed
- keymap[0x13]='R'; //R pressed
- keymap[0x14]='T'; //T pressed
- keymap[0x15]='Y'; //Y pressed
- keymap[0x16]='U'; //U pressed
- keymap[0x17]='I'; //I pressed
- keymap[0x18]='O'; //O pressed
- keymap[0x19]='P'; //P pressed
- keymap[0x1A]='{'; //[ pressed
- keymap[0x1B]='}'; //] pressed
- keymap[0x1C]='\n'; //enter pressed
- keymap[0x1D]=' '; //left control pressed
- keymap[0x1E]='A'; //A pressed
- keymap[0x1F]='S'; //S pressed
- keymap[0x20]='D'; //D pressed
- keymap[0x21]='F'; //F pressed
- keymap[0x22]='G'; //G pressed
- keymap[0x23]='H'; //H pressed
- keymap[0x24]='J'; //J pressed
- keymap[0x25]='K'; //K pressed
- keymap[0x26]='L'; //L pressed
- keymap[0x27]=':'; //; pressed
- keymap[0x28]='\"'; //' (single quote) pressed
- keymap[0x29]='~'; //` (back tick) pressed
- keymap[0x2A]=' '; //left shift pressed
- keymap[0x2B]='|'; //\ pressed
- keymap[0x2C]='Z'; //Z pressed
- keymap[0x2D]='X'; //X pressed
- keymap[0x2E]='C'; //C pressed
- keymap[0x2F]='V'; //V pressed
- keymap[0x30]='B'; //B pressed
- keymap[0x31]='N'; //N pressed
- keymap[0x32]='M'; //M pressed
- keymap[0x33]='<'; //, pressed
- keymap[0x34]='>'; //. pressed
- keymap[0x35]='?'; /// pressed
- keymap[0x36]=' '; //right shift pressed
- keymap[0x37]='*'; //(keypad) * pressed
- keymap[0x38]=' '; //left alt pressed
- keymap[0x39]=' '; //space pressed
- keymap[0x3A]=' '; //CapsLock pressed
- keymap[0x3B]=' '; //F1 pressed
- keymap[0x3C]=' '; //F2 pressed
- keymap[0x3D]=' '; //F3 pressed
- keymap[0x3E]=' '; //F4 pressed
- keymap[0x3F]=' '; //F5 pressed
- keymap[0x40]=' '; //F6 pressed
- keymap[0x41]=' '; //F7 pressed
- keymap[0x42]=' '; //F8 pressed
- keymap[0x43]=' '; //F9 pressed
- keymap[0x44]=' '; //F10 pressed
- keymap[0x45]=' '; //NumberLock pressed
- keymap[0x46]=' '; //ScrollLock pressed
- keymap[0x47]='7'; //(keypad) 7 pressed
- keymap[0x48]='8'; //(keypad) 8 pressed
- keymap[0x49]='9'; //(keypad) 9 pressed
- keymap[0x4A]='-'; //(keypad) - pressed
- keymap[0x4B]='4'; //(keypad) 4 pressed
- keymap[0x4C]='5'; //(keypad) 5 pressed
- keymap[0x4D]='6'; //(keypad) 6 pressed
- keymap[0x4E]='+'; //(keypad) + pressed
- keymap[0x4F]='1'; //(keypad) 1 pressed
- keymap[0x50]='2'; //(keypad) 2 pressed
- keymap[0x51]='3'; //(keypad) 3 pressed
- keymap[0x52]='0'; //(keypad) 0 pressed
- keymap[0x53]='.'; //(keypad) . pressed
- keymap[0x57]=' '; //F11 pressed
- keymap[0x58]=' '; //F12 pressed
- keymap[0x81]=' '; //escape released
- keymap[0x82]=' '; //1 released
- keymap[0x83]=' '; //2 released
- keymap[0x84]=' '; //3 released
- keymap[0x85]=' '; //4 released
- keymap[0x86]=' '; //5 released
- keymap[0x87]=' '; //6 released
- keymap[0x88]=' '; //7 released
- keymap[0x89]=' '; //8 released
- keymap[0x8A]=' '; //9 released
- keymap[0x8B]=' '; //0 (zero) released
- keymap[0x8C]=' '; //- released
- keymap[0x8D]=' '; //= released
- keymap[0x8E]=' '; //backspace released
- keymap[0x8F]=' '; //tab released
- keymap[0x90]=' '; //Q released
- keymap[0x91]=' '; //W released
- keymap[0x92]=' '; //E released
- keymap[0x93]=' '; //R released
- keymap[0x94]=' '; //T released
- keymap[0x95]=' '; //Y released
- keymap[0x96]=' '; //U released
- keymap[0x97]=' '; //I released
- keymap[0x98]=' '; //O released
- keymap[0x99]=' '; //P released
- keymap[0x9A]=' '; //[ released
- keymap[0x9B]=' '; //] released
- keymap[0x9C]=' '; //enter released
- keymap[0x9D]=' '; //left control released
- keymap[0x9E]=' '; //A released
- keymap[0x9F]=' '; //S released
- keymap[0xA0]=' '; //D released
- keymap[0xA1]=' '; //F released
- keymap[0xA2]=' '; //G released
- keymap[0xA3]=' '; //H released
- keymap[0xA4]=' '; //J released
- keymap[0xA5]=' '; //K released
- keymap[0xA6]=' '; //L released
- keymap[0xA7]=' '; //; released
- keymap[0xA8]=' '; //' (single quote) released
- keymap[0xA9]=' '; //` (back tick) released
- keymap[0xAA]=' '; //left shift released
- keymap[0xAB]=' '; //\ released
- keymap[0xAC]=' '; //Z released
- keymap[0xAD]=' '; //X released
- keymap[0xAE]=' '; //C released
- keymap[0xAF]=' '; //V released
- keymap[0xB0]=' '; //B released
- keymap[0xB1]=' '; //N released
- keymap[0xB2]=' '; //M released
- keymap[0xB3]=' '; //, released
- keymap[0xB4]=' '; //. released
- keymap[0xB5]=' '; /// released
- keymap[0xB6]=' '; //right shift released
- keymap[0xB7]='*'; //(keypad) * released
- keymap[0xB8]=' '; //left alt released
- keymap[0xB9]=' '; //space released
- keymap[0xBA]=' '; //CapsLock released
- keymap[0xBB]=' '; //F1 released
- keymap[0xBC]=' '; //F2 released
- keymap[0xBD]=' '; //F3 released
- keymap[0xBE]=' '; //F4 released
- keymap[0xBF]=' '; //F5 released
- keymap[0xC0]=' '; //F6 released
- keymap[0xC1]=' '; //F7 released
- keymap[0xC2]=' '; //F8 released
- keymap[0xC3]=' '; //F9 released
- keymap[0xC4]=' '; //F10 released
- keymap[0xC5]=' '; //NumberLock released
- keymap[0xC6]=' '; //ScrollLock released
- keymap[0xC7]=' '; //(keypad) 7 released
- keymap[0xC8]=' '; //(keypad) 8 released
- keymap[0xC9]=' '; //(keypad) 9 released
- keymap[0xCA]=' '; //(keypad) - released
- keymap[0xCB]=' '; //(keypad) 4 released
- keymap[0xCC]=' '; //(keypad) 5 released
- keymap[0xCD]=' '; //(keypad) 6 released
- keymap[0xCE]=' '; //(keypad) + released
- keymap[0xCF]=' '; //(keypad) 1 released
- keymap[0xD0]=' '; //(keypad) 2 released
- keymap[0xD1]=' '; //(keypad) 3 released
- keymap[0xD2]=' '; //(keypad) 0 released
- keymap[0xD3]=' '; //(keypad) . released
- keymap[0xD7]=' '; //F11 released
- keymap[0xD8]=' '; //F12 released
+ keymap[0x01]=' '; //escape pressed
+ keymap[0x02]='!'; //1 pressed
+ keymap[0x03]='@'; //2 pressed
+ keymap[0x04]='#'; //3 pressed
+ keymap[0x05]='$'; //4 pressed
+ keymap[0x06]='%'; //5 pressed
+ keymap[0x07]='^'; //6 pressed
+ keymap[0x08]='&'; //7 pressed
+ keymap[0x09]='*'; //8 pressed
+ keymap[0x0A]='('; //9 pressed
+ keymap[0x0B]=')'; //0 (zero) pressed
+ keymap[0x0C]='_'; //- pressed
+ keymap[0x0D]='+'; //= pressed
+ keymap[0x0E]=' '; //backspace pressed
+ keymap[0x0F]=' '; //tab pressed
+ keymap[0x10]='Q'; //Q pressed
+ keymap[0x11]='W'; //W pressed
+ keymap[0x12]='E'; //E pressed
+ keymap[0x13]='R'; //R pressed
+ keymap[0x14]='T'; //T pressed
+ keymap[0x15]='Y'; //Y pressed
+ keymap[0x16]='U'; //U pressed
+ keymap[0x17]='I'; //I pressed
+ keymap[0x18]='O'; //O pressed
+ keymap[0x19]='P'; //P pressed
+ keymap[0x1A]='{'; //[ pressed
+ keymap[0x1B]='}'; //] pressed
+ keymap[0x1C]='\n'; //enter pressed
+ keymap[0x1D]=' '; //left control pressed
+ keymap[0x1E]='A'; //A pressed
+ keymap[0x1F]='S'; //S pressed
+ keymap[0x20]='D'; //D pressed
+ keymap[0x21]='F'; //F pressed
+ keymap[0x22]='G'; //G pressed
+ keymap[0x23]='H'; //H pressed
+ keymap[0x24]='J'; //J pressed
+ keymap[0x25]='K'; //K pressed
+ keymap[0x26]='L'; //L pressed
+ keymap[0x27]=':'; //; pressed
+ keymap[0x28]='\"'; //' (single quote) pressed
+ keymap[0x29]='~'; //` (back tick) pressed
+ keymap[0x2A]=' '; //left shift pressed
+ keymap[0x2B]='|'; //\ pressed
+ keymap[0x2C]='Z'; //Z pressed
+ keymap[0x2D]='X'; //X pressed
+ keymap[0x2E]='C'; //C pressed
+ keymap[0x2F]='V'; //V pressed
+ keymap[0x30]='B'; //B pressed
+ keymap[0x31]='N'; //N pressed
+ keymap[0x32]='M'; //M pressed
+ keymap[0x33]='<'; //, pressed
+ keymap[0x34]='>'; //. pressed
+ keymap[0x35]='?'; /// pressed
+ keymap[0x36]=' '; //right shift pressed
+ keymap[0x37]='*'; //(keypad) * pressed
+ keymap[0x38]=' '; //left alt pressed
+ keymap[0x39]=' '; //space pressed
+ keymap[0x3A]=' '; //CapsLock pressed
+ keymap[0x3B]=' '; //F1 pressed
+ keymap[0x3C]=' '; //F2 pressed
+ keymap[0x3D]=' '; //F3 pressed
+ keymap[0x3E]=' '; //F4 pressed
+ keymap[0x3F]=' '; //F5 pressed
+ keymap[0x40]=' '; //F6 pressed
+ keymap[0x41]=' '; //F7 pressed
+ keymap[0x42]=' '; //F8 pressed
+ keymap[0x43]=' '; //F9 pressed
+ keymap[0x44]=' '; //F10 pressed
+ keymap[0x45]=' '; //NumberLock pressed
+ keymap[0x46]=' '; //ScrollLock pressed
+ keymap[0x47]='7'; //(keypad) 7 pressed
+ keymap[0x48]='8'; //(keypad) 8 pressed
+ keymap[0x49]='9'; //(keypad) 9 pressed
+ keymap[0x4A]='-'; //(keypad) - pressed
+ keymap[0x4B]='4'; //(keypad) 4 pressed
+ keymap[0x4C]='5'; //(keypad) 5 pressed
+ keymap[0x4D]='6'; //(keypad) 6 pressed
+ keymap[0x4E]='+'; //(keypad) + pressed
+ keymap[0x4F]='1'; //(keypad) 1 pressed
+ keymap[0x50]='2'; //(keypad) 2 pressed
+ keymap[0x51]='3'; //(keypad) 3 pressed
+ keymap[0x52]='0'; //(keypad) 0 pressed
+ keymap[0x53]='.'; //(keypad) . pressed
+ keymap[0x57]=' '; //F11 pressed
+ keymap[0x58]=' '; //F12 pressed
+ keymap[0x81]=' '; //escape released
+ keymap[0x82]=' '; //1 released
+ keymap[0x83]=' '; //2 released
+ keymap[0x84]=' '; //3 released
+ keymap[0x85]=' '; //4 released
+ keymap[0x86]=' '; //5 released
+ keymap[0x87]=' '; //6 released
+ keymap[0x88]=' '; //7 released
+ keymap[0x89]=' '; //8 released
+ keymap[0x8A]=' '; //9 released
+ keymap[0x8B]=' '; //0 (zero) released
+ keymap[0x8C]=' '; //- released
+ keymap[0x8D]=' '; //= released
+ keymap[0x8E]=' '; //backspace released
+ keymap[0x8F]=' '; //tab released
+ keymap[0x90]=' '; //Q released
+ keymap[0x91]=' '; //W released
+ keymap[0x92]=' '; //E released
+ keymap[0x93]=' '; //R released
+ keymap[0x94]=' '; //T released
+ keymap[0x95]=' '; //Y released
+ keymap[0x96]=' '; //U released
+ keymap[0x97]=' '; //I released
+ keymap[0x98]=' '; //O released
+ keymap[0x99]=' '; //P released
+ keymap[0x9A]=' '; //[ released
+ keymap[0x9B]=' '; //] released
+ keymap[0x9C]=' '; //enter released
+ keymap[0x9D]=' '; //left control released
+ keymap[0x9E]=' '; //A released
+ keymap[0x9F]=' '; //S released
+ keymap[0xA0]=' '; //D released
+ keymap[0xA1]=' '; //F released
+ keymap[0xA2]=' '; //G released
+ keymap[0xA3]=' '; //H released
+ keymap[0xA4]=' '; //J released
+ keymap[0xA5]=' '; //K released
+ keymap[0xA6]=' '; //L released
+ keymap[0xA7]=' '; //; released
+ keymap[0xA8]=' '; //' (single quote) released
+ keymap[0xA9]=' '; //` (back tick) released
+ keymap[0xAA]=' '; //left shift released
+ keymap[0xAB]=' '; //\ released
+ keymap[0xAC]=' '; //Z released
+ keymap[0xAD]=' '; //X released
+ keymap[0xAE]=' '; //C released
+ keymap[0xAF]=' '; //V released
+ keymap[0xB0]=' '; //B released
+ keymap[0xB1]=' '; //N released
+ keymap[0xB2]=' '; //M released
+ keymap[0xB3]=' '; //, released
+ keymap[0xB4]=' '; //. released
+ keymap[0xB5]=' '; /// released
+ keymap[0xB6]=' '; //right shift released
+ keymap[0xB7]='*'; //(keypad) * released
+ keymap[0xB8]=' '; //left alt released
+ keymap[0xB9]=' '; //space released
+ keymap[0xBA]=' '; //CapsLock released
+ keymap[0xBB]=' '; //F1 released
+ keymap[0xBC]=' '; //F2 released
+ keymap[0xBD]=' '; //F3 released
+ keymap[0xBE]=' '; //F4 released
+ keymap[0xBF]=' '; //F5 released
+ keymap[0xC0]=' '; //F6 released
+ keymap[0xC1]=' '; //F7 released
+ keymap[0xC2]=' '; //F8 released
+ keymap[0xC3]=' '; //F9 released
+ keymap[0xC4]=' '; //F10 released
+ keymap[0xC5]=' '; //NumberLock released
+ keymap[0xC6]=' '; //ScrollLock released
+ keymap[0xC7]=' '; //(keypad) 7 released
+ keymap[0xC8]=' '; //(keypad) 8 released
+ keymap[0xC9]=' '; //(keypad) 9 released
+ keymap[0xCA]=' '; //(keypad) - released
+ keymap[0xCB]=' '; //(keypad) 4 released
+ keymap[0xCC]=' '; //(keypad) 5 released
+ keymap[0xCD]=' '; //(keypad) 6 released
+ keymap[0xCE]=' '; //(keypad) + released
+ keymap[0xCF]=' '; //(keypad) 1 released
+ keymap[0xD0]=' '; //(keypad) 2 released
+ keymap[0xD1]=' '; //(keypad) 3 released
+ keymap[0xD2]=' '; //(keypad) 0 released
+ keymap[0xD3]=' '; //(keypad) . released
+ keymap[0xD7]=' '; //F11 released
+ keymap[0xD8]=' '; //F12 released
}
diff --git a/src/c/paging.c b/src/c/paging.c
index 660ee8c..f08530d 100644
--- a/src/c/paging.c
+++ b/src/c/paging.c
@@ -10,11 +10,11 @@ void set_pd()
//set each entry to not present
for(size_t i=0;i<1024;i++)
{
- // This sets the following flags to the pages:
- // Supervisor: Only kernel-mode can access them
- // Write Enabled: It can be both read from and written to
- // Not Present: The page table is not present
- page_directory[i] = 0x00000002;
+ // This sets the following flags to the pages:
+ // Supervisor: Only kernel-mode can access them
+ // Write Enabled: It can be both read from and written to
+ // Not Present: The page table is not present
+ page_directory[i] = 0x00000002;
}
}
@@ -24,13 +24,13 @@ void set_pt(size_t num,uint32_t address)
{
// holds the physical address where we want to start mapping these pages to.
// in this case, we want to map these pages to the very beginning of memory.
-
+
//we will fill all 1024 entries in the table, mapping 4 megabytes
for(size_t i=0;i<1024;i++)
{
- // As the address is page aligned, it will always leave 12 bits zeroed.
- // Those bits are used by the attributes ;)
- page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present.
+ // As the address is page aligned, it will always leave 12 bits zeroed.
+ // Those bits are used by the attributes ;)
+ page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present.
}
page_directory[num] = ((uint32_t)page_table[num]) | 3;
diff --git a/src/c/stack_protector.c b/src/c/stack_protector.c
index 9ce3cba..37f7cda 100644
--- a/src/c/stack_protector.c
+++ b/src/c/stack_protector.c
@@ -1,22 +1,14 @@
#include<stdint.h>
#include<stdio.h>
-
+
#if UINT32_MAX == UINTPTR_MAX
#define STACK_CHK_GUARD 0xe2dee396
#else
#define STACK_CHK_GUARD 0x595e9fbd94fda766
#endif
-
+
uintptr_t __stack_chk_guard = STACK_CHK_GUARD;
-
-//__attribute__((noreturn))
void __stack_chk_fail(void)
{
-#if __STDC_HOSTED__
- printf("Stack smashing detected\n");
- abort();
-#elif __is_myos_kernel
- printf("Stack smashing detected\n");
- panic("Stack smashing detected");
-#endif
+ printf("Stack smashing detected\n");
}
diff --git a/src/c/stdio.c b/src/c/stdio.c
index 36fd140..3a51e9a 100644
--- a/src/c/stdio.c
+++ b/src/c/stdio.c
@@ -17,20 +17,20 @@ void printf(char *str, ...)
for(size_t i=0;str[i]!='\0';i++)
{
- if(str[i]=='%')
- {
- i++;
- if(str[i]=='c') terminal_putchar((char)va_arg(list,int));
- else if(str[i]=='s') terminal_writestring(va_arg(list,char*));
- else if(str[i]=='d') terminal_writeint(va_arg(list,int));
- else if(str[i]=='f') terminal_writefloat(va_arg(list,double));
- else
- {
- terminal_writestring("wrong format using print function\n");
- return;
- }
- }
- else terminal_putchar(str[i]);
+ if(str[i]=='%')
+ {
+ i++;
+ if(str[i]=='c') terminal_putchar((char)va_arg(list,int));
+ else if(str[i]=='s') terminal_writestring(va_arg(list,char*));
+ else if(str[i]=='d') terminal_writeint(va_arg(list,int));
+ else if(str[i]=='f') terminal_writefloat(va_arg(list,double));
+ else
+ {
+ terminal_writestring("wrong format using print function\n");
+ return;
+ }
+ }
+ else terminal_putchar(str[i]);
}
va_end(list);
diff --git a/src/c/string.c b/src/c/string.c
index 6a3a96b..ce33528 100644
--- a/src/c/string.c
+++ b/src/c/string.c
@@ -36,9 +36,9 @@ void stringrev(char *str)
for(size_t j=0;j<i-j;j++)
{
- char tmp=str[i-j];
- str[i-j]=str[j];
- str[j]=tmp;
+ char tmp=str[i-j];
+ str[i-j]=str[j];
+ str[j]=tmp;
}
}
@@ -48,9 +48,9 @@ uint32_t stoi(const char *str)
for(size_t i=0;str[i]!='\0';i++)
{
- if(str[i]<'0'||str[i]>'9') return num;
- num*=10;
- num+=str[i]-'0';
+ if(str[i]<'0'||str[i]>'9') return num;
+ num*=10;
+ num+=str[i]-'0';
}
return num;
@@ -61,11 +61,11 @@ void itos(uint32_t num,char *str)
if(num==0) stringcpy(str,"0");
else
{
- size_t i=0;
- for(;num>0;num/=10,i++) str[i]='0'+num%10;
- str[i]='\0';
+ size_t i=0;
+ for(;num>0;num/=10,i++) str[i]='0'+num%10;
+ str[i]='\0';
- stringrev(str);
+ stringrev(str);
}
}
@@ -79,16 +79,16 @@ double stof(const char *str)
for(;str[i]!='\0';i++)
{
- if(str[i]=='.')
- {
- if(point) return num/pow;
- point=1;
- continue;
- }
- if(str[i]<'0'||str[i]>'9') return num/pow;
- num*=10;
- num+=str[i]-'0';
- if(point) pow*=10;
+ if(str[i]=='.')
+ {
+ if(point) return num/pow;
+ point=1;
+ continue;
+ }
+ if(str[i]<'0'||str[i]>'9') return num/pow;
+ num*=10;
+ num+=str[i]-'0';
+ if(point) pow*=10;
}
return num/pow;
@@ -105,9 +105,9 @@ void ftos(double num, char *str)
for(size_t i=0;i<decimals;i++)
{
- num-=(uint32_t)num;
- num*=10;
- c[0]=(uint32_t)num+'0';
- stringcat(str,c);
+ num-=(uint32_t)num;
+ num*=10;
+ c[0]=(uint32_t)num+'0';
+ stringcat(str,c);
}
}
diff --git a/src/c/timer.c b/src/c/timer.c
index 0b4ddaa..390e512 100644
--- a/src/c/timer.c
+++ b/src/c/timer.c
@@ -14,9 +14,9 @@ void timer_handler()
tick++;
if(tick==TICKS_PER_SECOND)
{
- //printf("%d seconds passed\n",time);
- tick=0;
- time++;
+ //printf("%d seconds passed\n",time);
+ tick=0;
+ time++;
}
ioport_out(0x20, 0x20);
diff --git a/src/c/tty.c b/src/c/tty.c
index c7e5f44..62ccd02 100644
--- a/src/c/tty.c
+++ b/src/c/tty.c
@@ -16,17 +16,17 @@ size_t pieces(char pieces[][CMD_LENGTH],char *buffer)
while(buffer[i]==' '&&buffer[i]!='\0') i++;
for(;buffer[i]!='\0';i++)
{
- if(buffer[i]==' ')
- {
- while(buffer[i]==' '&&buffer[i]!='\0') i++;
- j=0;
- r++;
- i--;
- }
- else
- {
- pieces[r][j++]=buffer[i];
- }
+ if(buffer[i]==' ')
+ {
+ while(buffer[i]==' '&&buffer[i]!='\0') i++;
+ j=0;
+ r++;
+ i--;
+ }
+ else
+ {
+ pieces[r][j++]=buffer[i];
+ }
}
return r+1;
}
@@ -35,7 +35,7 @@ void echo(size_t numberof,char parts[][CMD_LENGTH])
{
for(size_t i=1;i<numberof;i++)
{
- printf("%s ",parts[i]);
+ printf("%s ",parts[i]);
}
printf("\n");
}
@@ -58,8 +58,8 @@ void number(size_t numberof,char parts[][CMD_LENGTH])
if(numberof==1) printf("Please enter a number\n");
else
{
- printf("Entered integer number is %d\n",stoi(parts[1]));
- printf("Entered float number is: %f\n",stof(parts[1]));
+ printf("Entered integer number is %d\n",stoi(parts[1]));
+ printf("Entered float number is: %f\n",stof(parts[1]));
}
}
@@ -88,30 +88,30 @@ void prompt()
void neofetch()
{
set_color(VGA_COLOR_WHITE,VGA_COLOR_BLACK);
- printf(" . "); printf("Dobrodosli u moj \n");
- printf(" J:L (\"\"\") "); printf("operativni sistem :) \n");
- printf(" |:| III "); printf("Uzivajte! \n");
- printf(" |:| III "); printf(" \n");
- printf(" |:| III "); printf("Welcome to my \n");
- printf(" |:| __III__ "); printf("operating system :) \n");
- printf(" |:| /:-.___,-:\\ "); printf("Enjoy your stay! \n");
- printf(" |:| \\] |:| [/ "); printf(" \n");
- printf(" |:| |:| "); printf(" \n");
- printf(" |:| |:| "); printf(" \n");
- printf(" |:| |:| "); printf(" \n");
- printf(" /] |:| [\\ |:| "); printf(" \n");
- printf(" \\:-'\"\"\"`-:/ |:| "); printf(" \n");
- printf(" \"\"III\"\" |:| "); printf(" \n");
- printf(" III |:| "); printf(" \n");
- printf(" III |:| "); printf(" \n");
- printf(" III |:| "); printf("napravio/made by: \n");
- printf(" (___) J:F "); printf("Aleksa Vuckovic \n");
- printf(" \" "); printf(" \n");
+ printf(" . "); printf("Dobrodosli u moj \n");
+ printf(" J:L (\"\"\") "); printf("operativni sistem :) \n");
+ printf(" |:| III "); printf("Uzivajte! \n");
+ printf(" |:| III "); printf(" \n");
+ printf(" |:| III "); printf("Welcome to my \n");
+ printf(" |:| __III__ "); printf("operating system :) \n");
+ printf(" |:| /:-.___,-:\\ "); printf("Enjoy your stay! \n");
+ printf(" |:| \\] |:| [/ "); printf(" \n");
+ printf(" |:| |:| "); printf(" \n");
+ printf(" |:| |:| "); printf(" \n");
+ printf(" |:| |:| "); printf(" \n");
+ printf(" /] |:| [\\ |:| "); printf(" \n");
+ printf(" \\:-'\"\"\"`-:/ |:| "); printf(" \n");
+ printf(" \"\"III\"\" |:| "); printf(" \n");
+ printf(" III |:| "); printf(" \n");
+ printf(" III |:| "); printf(" \n");
+ printf(" III |:| "); printf("napravio/made by: \n");
+ printf(" (___) J:F "); printf("Aleksa Vuckovic \n");
+ printf(" \" "); printf(" \n");
for(size_t i=0;i<16;i++)
{
- set_color(0,i);
- printf(" ",i);
+ set_color(0,i);
+ printf(" ",i);
}
printf("\n");
diff --git a/src/c/vga.c b/src/c/vga.c
index e61cd7f..67c8b02 100644
--- a/src/c/vga.c
+++ b/src/c/vga.c
@@ -12,12 +12,12 @@ void set_color(enum vga_color fg, enum vga_color bg)
{
terminal_color = fg | bg << 4;
}
-
+
static inline uint16_t vga_entry(unsigned char uc, uint8_t color)
{
return (uint16_t) uc | (uint16_t) color << 8;
}
-
+
void terminal_initialize()
{
terminal_row=0;
@@ -26,11 +26,11 @@ void terminal_initialize()
terminal_buffer=(uint16_t*) 0xB8000;
for(size_t y=0;y<VGA_HEIGHT;y++)
{
- for(size_t x=0;x<VGA_WIDTH;x++)
- {
- const size_t index=y*VGA_WIDTH+x;
- terminal_buffer[index]=vga_entry(' ', terminal_color);
- }
+ for(size_t x=0;x<VGA_WIDTH;x++)
+ {
+ const size_t index=y*VGA_WIDTH+x;
+ terminal_buffer[index]=vga_entry(' ', terminal_color);
+ }
}
}
@@ -43,7 +43,8 @@ void terminal_putentryat(char c, uint8_t color, size_t x, size_t y)
void movescreen()
{
terminal_row--;
- for(size_t i=0;i<VGA_HEIGHT;i++) for(size_t j=0;j<VGA_WIDTH;j++) terminal_buffer[i*VGA_WIDTH+j]=terminal_buffer[(i+1)*VGA_WIDTH+j];
+ for(size_t i=0;i<VGA_HEIGHT;i++) for(size_t j=0;j<VGA_WIDTH;j++)
+ terminal_buffer[i*VGA_WIDTH+j]=terminal_buffer[(i+1)*VGA_WIDTH+j];
}
void next_field()
@@ -56,18 +57,18 @@ void previous_field()
if(terminal_column) terminal_column--;
else terminal_row--,terminal_column=VGA_WIDTH-1;
}
-
+
void terminal_putchar(char c)
{
if(c=='\n') terminal_column=0,terminal_row++;
else
{
- terminal_putentryat(c, terminal_color, terminal_column, terminal_row);
- next_field();
+ terminal_putentryat(c, terminal_color, terminal_column, terminal_row);
+ next_field();
}
if (terminal_row==VGA_HEIGHT) movescreen();
}
-
+
void terminal_writestring(char* data)
{
for(int i=0;data[i]!='\0';i++) terminal_putchar(data[i]);
diff --git a/src/include/stdio.h b/src/include/stdio.h
index 45c9215..6bb87be 100644
--- a/src/include/stdio.h
+++ b/src/include/stdio.h
@@ -1,12 +1,12 @@
#ifndef _STDIO_H
#define _STDIO_H
+
#include <stdarg.h>
#include <stddef.h>
+
#define SEEK_SET 0
typedef struct { int unused; } FILE;
-#ifdef __cplusplus
-extern "C" {
-#endif
+
extern FILE* stderr;
#define stderr stderr
int fclose(FILE*);
@@ -22,7 +22,4 @@ int vfprintf(FILE*, const char*, va_list);
void printf(char *str, ...);
-#ifdef __cplusplus
-}
-#endif
#endif
diff --git a/src/include/stdlib.h b/src/include/stdlib.h
index a0afe38..77ffa67 100644
--- a/src/include/stdlib.h
+++ b/src/include/stdlib.h
@@ -1,15 +1,11 @@
#ifndef _STDLIB_H
#define _STDLIB_H
-#ifdef __cplusplus
-extern "C" {
-#endif
+
void abort(void);
int atexit(void (*)(void));
int atoi(const char*);
void free(void*);
char* getenv(const char*);
void* malloc(size_t);
-#ifdef __cplusplus
-}
-#endif
+
#endif
diff --git a/src/include/string.h b/src/include/string.h
index bef5854..78fa956 100644
--- a/src/include/string.h
+++ b/src/include/string.h
@@ -1,16 +1,12 @@
#ifndef _STRING_H
#define _STRING_H
+
#include <stddef.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+
void* memcpy(void*, const void*, size_t);
void* memset(void*, int, size_t);
char* strcpy(char*, const char*);
size_t strlen(const char*);
-#ifdef __cplusplus
-}
-#endif
#include<types.h>
diff --git a/src/include/sys/types.h b/src/include/sys/types.h
index 4f55189..34c1b65 100644
--- a/src/include/sys/types.h
+++ b/src/include/sys/types.h
@@ -1,4 +1,6 @@
#ifndef _SYS_TYPES_H
#define _SYS_TYPES_H
+
typedef int pid_t;
+
#endif
diff --git a/src/include/unistd.h b/src/include/unistd.h
index a6bfee0..abe7f3c 100644
--- a/src/include/unistd.h
+++ b/src/include/unistd.h
@@ -1,14 +1,11 @@
#ifndef _UNISTD_H
#define _UNISTD_H
+
#include <sys/types.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+
int execv(const char*, char* const[]);
int execve(const char*, char* const[], char* const[]);
int execvp(const char*, char* const[]);
pid_t fork(void);
-#ifdef __cplusplus
-}
-#endif
+
#endif
diff --git a/src/linker.ld b/src/linker.ld
index 38ddd94..d8e7f4b 100644
--- a/src/linker.ld
+++ b/src/linker.ld
@@ -1,43 +1,43 @@
/* The bootloader will look at this image and start execution at the symbol
designated as the entry point. */
ENTRY(_start)
-
+
/* Tell where the various sections of the object files will be put in the final
kernel image. */
SECTIONS
{
- /* Begin putting sections at 1 MiB, a conventional place for kernels to be
- loaded at by the bootloader. */
- . = 1M;
-
- /* First put the multiboot header, as it is required to be put very early
- early in the image or the bootloader won't recognize the file format.
- Next we'll put the .text section. */
- .text BLOCK(4K) : ALIGN(4K)
- {
- *(.multiboot)
- *(.text)
- }
-
- /* Read-only data. */
- .rodata BLOCK(4K) : ALIGN(4K)
- {
- *(.rodata)
- }
-
- /* Read-write data (initialized) */
- .data BLOCK(4K) : ALIGN(4K)
- {
- *(.data)
- }
-
- /* Read-write data (uninitialized) and stack */
- .bss BLOCK(4K) : ALIGN(4K)
- {
- *(COMMON)
- *(.bss)
- }
-
- /* The compiler may produce other sections, by default it will put them in
- a segment with the same name. Simply add stuff here as needed. */
+ /* Begin putting sections at 1 MiB, a conventional place for kernels to be
+ loaded at by the bootloader. */
+ . = 1M;
+
+ /* First put the multiboot header, as it is required to be put very early
+ early in the image or the bootloader won't recognize the file format.
+ Next we'll put the .text section. */
+ .text BLOCK(4K) : ALIGN(4K)
+ {
+ *(.multiboot)
+ *(.text)
+ }
+
+ /* Read-only data. */
+ .rodata BLOCK(4K) : ALIGN(4K)
+ {
+ *(.rodata)
+ }
+
+ /* Read-write data (initialized) */
+ .data BLOCK(4K) : ALIGN(4K)
+ {
+ *(.data)
+ }
+
+ /* Read-write data (uninitialized) and stack */
+ .bss BLOCK(4K) : ALIGN(4K)
+ {
+ *(COMMON)
+ *(.bss)
+ }
+
+ /* The compiler may produce other sections, by default it will put them in
+ a segment with the same name. Simply add stuff here as needed. */
}