Changeset 4158


Ignore:
Timestamp:
Dec 20, 2009, 3:02:02 PM (10 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Fix indentation and add licensing and copyright headers to kernel
Location:
libcaca/trunk/kernel
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/kernel/boot/gdt.c

    r4154 r4158  
    1 /*
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17/*
    218 *'freely' inspired by http://jojo.ouvaton.org/dossiers/boot_sector/tutorial02.html
    319 * (actually, that's mostly copied, with minor compilation fixes)
     
    622#include "klibc.h"
    723
    8 #define GDTBASE 0x800   /* Physical address of GDT */
    9 #define GDTSIZE 0xFF    /* Maximum table size (in entries) */
     24#define GDTBASE 0x800           /* Physical address of GDT */
     25#define GDTSIZE 0xFF            /* Maximum table size (in entries) */
    1026
    11 /* Segment descriptor  */
    12 struct gdtdesc {
    13         u16 lim0_15;   
    14         u16 base0_15;
    15         u8 base16_23;
    16         u8 acces;
    17         u8 lim16_19 : 4;
    18         u8 other : 4;
    19         u8 base24_31;
    20 }  __attribute__ ((packed));
     27/* Segment descriptor */
     28struct gdtdesc
     29{
     30    u16 lim0_15;
     31    u16 base0_15;
     32    u8 base16_23;
     33    u8 acces;
     34    u8 lim16_19:4;
     35    u8 other:4;
     36    u8 base24_31;
     37} __attribute__ ((packed));
    2138
    22 /* GDTR register  */
    23 struct gdtr {
    24         u16 limite ;
    25         u32 base ;
    26 }  __attribute__ ((packed));
     39/* GDTR register */
     40struct gdtr
     41{
     42    u16 limite;
     43    u32 base;
     44} __attribute__ ((packed));
    2745struct gdtr kgdtr;
    2846
    2947
    30 struct gdtdesc kgdt[GDTSIZE] = {{0, 0, 0, 0, 0, 0, 0}};
     48struct gdtdesc kgdt[GDTSIZE] = { {0, 0, 0, 0, 0, 0, 0} };
     49
    3150unsigned int kgdtptr = 1;
    3251
    33 void init_code_desc(u32 base, u32 limite, struct gdtdesc* desc);
    34 void init_data_desc(u32 base, u32 limite, struct gdtdesc* desc);
     52void init_code_desc(u32 base, u32 limite, struct gdtdesc *desc);
     53void init_data_desc(u32 base, u32 limite, struct gdtdesc *desc);
    3554void add_gdt_desc(struct gdtdesc desc);
    3655void init_gdt(void);
     
    3857
    3958
    40 void init_gdt_desc(u32 base, u32 limite, u8 acces, u8 other, struct gdtdesc* desc) {
    41         desc->lim0_15 = (limite & 0xffff);
    42         desc->base0_15 = (base & 0xffff);
    43         desc->base16_23 = (base & 0xff0000)>>16;
    44         desc->acces = acces;
    45         desc->lim16_19 = (limite & 0xf0000)>>16;
    46         desc->other = (other & 0xf);
    47         desc->base24_31 = (base & 0xff000000)>>24;
    48         return;
     59void init_gdt_desc(u32 base, u32 limite, u8 acces, u8 other,
     60                   struct gdtdesc *desc)
     61{
     62    desc->lim0_15 = (limite & 0xffff);
     63    desc->base0_15 = (base & 0xffff);
     64    desc->base16_23 = (base & 0xff0000) >> 16;
     65    desc->acces = acces;
     66    desc->lim16_19 = (limite & 0xf0000) >> 16;
     67    desc->other = (other & 0xf);
     68    desc->base24_31 = (base & 0xff000000) >> 24;
     69    return;
    4970}
    5071
    5172
    52 void init_code_desc(u32 base, u32 limite, struct gdtdesc* desc) {
    53         init_gdt_desc(base, limite, 0x9B, 0x0D, desc);
     73void init_code_desc(u32 base, u32 limite, struct gdtdesc *desc)
     74{
     75    init_gdt_desc(base, limite, 0x9B, 0x0D, desc);
    5476}
    5577
    56 void init_data_desc(u32 base, u32 limite, struct gdtdesc* desc) {
    57         init_gdt_desc(base, limite, 0x93, 0x0D, desc);
     78void init_data_desc(u32 base, u32 limite, struct gdtdesc *desc)
     79{
     80    init_gdt_desc(base, limite, 0x93, 0x0D, desc);
    5881}
    5982
    60 void add_gdt_desc(struct gdtdesc desc) {
    61         kgdt[kgdtptr] = desc;
    62         kgdtptr++;
     83void add_gdt_desc(struct gdtdesc desc)
     84{
     85    kgdt[kgdtptr] = desc;
     86    kgdtptr++;
    6387}
    6488
    65 void init_gdt(void) {
    66         struct gdtdesc code, data, stack;
    67    
    68         /* initialisation des descripteurs de segment */
    69         init_code_desc(0x0, 0xFFFFF, &code);
    70         init_data_desc(0x0, 0xFFFFF, &data);
    71         init_gdt_desc(0, 0x10, 0x97, 0x0D, &stack);
    72         add_gdt_desc(code);
    73         add_gdt_desc(data);
    74         add_gdt_desc(stack);
    75    
    76         /* initialisation de la structure pour GDTR */
    77         kgdtr.limite = GDTSIZE*8;
    78         kgdtr.base = GDTBASE;
    79    
    80         /* recopie de la GDT a son adresse */   
    81         memcpy((void*)kgdtr.base, kgdt, kgdtr.limite);
    82    
    83         /* chargement du registre GDTR */
    84         asm("lgdtl (kgdtr)");
    85    
    86         /* initialisation des segments */
    87         asm("   movw $0x10,%ax  \n \
     89void init_gdt(void)
     90{
     91    struct gdtdesc code, data, stack;
     92
     93    /* initialisation des descripteurs de segment */
     94    init_code_desc(0x0, 0xFFFFF, &code);
     95    init_data_desc(0x0, 0xFFFFF, &data);
     96    init_gdt_desc(0, 0x10, 0x97, 0x0D, &stack);
     97    add_gdt_desc(code);
     98    add_gdt_desc(data);
     99    add_gdt_desc(stack);
     100
     101    /* initialisation de la structure pour GDTR */
     102    kgdtr.limite = GDTSIZE * 8;
     103    kgdtr.base = GDTBASE;
     104
     105    /* recopie de la GDT a son adresse */
     106    memcpy((void *)kgdtr.base, kgdt, kgdtr.limite);
     107
     108    /* chargement du registre GDTR */
     109    asm("lgdtl (kgdtr)");
     110
     111    /* initialisation des segments */
     112    asm("       movw $0x10,%ax  \n \
    88113                movw %ax, %ds   \n \
    89114                movw %ax, %es   \n \
     
    98123                next:   \n");
    99124}
    100 
    101 
  • libcaca/trunk/kernel/boot/idt.c

    r4154 r4158  
    1 /*
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17/*
    218 *'freely' inspired by http://jojo.ouvaton.org/dossiers/boot_sector/tutorial02.html
    319 * (actually, that's mostly copied, with minor compilation fixes)
     
    622#include "klibc.h"
    723
    8 #define IDTBASE 0               /* GDT Physical address */
    9 #define IDTSIZE 256             /* Max descriptor count */
    10 #define INTGATE 0x8E00  /* Interruptions */
    11 #define TRAPGATE 0x8F00 /* Syscalls */
    12 #define TASKGATE 0x8500 /* Task switching */
     24#define IDTBASE 0               /* GDT Physical address */
     25#define IDTSIZE 256             /* Max descriptor count */
     26#define INTGATE 0x8E00          /* Interruptions */
     27#define TRAPGATE 0x8F00         /* Syscalls */
     28#define TASKGATE 0x8500         /* Task switching */
    1329
    1430/* segment descriptor */
    15 struct idtdesc {
    16         u16 offset0_15;
    17         u16 select;
     31struct idtdesc
     32{
     33    u16 offset0_15;
     34    u16 select;
    1835    u16 type;
    19         u16 offset16_31;       
    20 }  __attribute__ ((packed));
     36    u16 offset16_31;
     37} __attribute__ ((packed));
    2138
    2239/* IDTR register */
    23 struct idtr {
    24         u16 limite;
    25         u32 base;
    26 }  __attribute__ ((packed));
     40struct idtr
     41{
     42    u16 limite;
     43    u32 base;
     44} __attribute__ ((packed));
    2745
    2846struct idtr kidtr;
    2947
    3048/* IDT table */
    31 struct idtdesc kidt[IDTSIZE] = {{0, 0, 0, 0}};
     49struct idtdesc kidt[IDTSIZE] = { {0, 0, 0, 0} };
    3250
    3351/* pointer on a free IDT entry */
     
    6583
    6684
    67 void init_idt_desc(u32 offset, u16 select, u16 type, struct idtdesc* desc) {
    68         desc->offset0_15 = (offset & 0xffff);
    69         desc->select = select;
    70         desc->type = type;
    71         desc->offset16_31 = (offset & 0xffff0000) >> 16;
    72         return;
     85void init_idt_desc(u32 offset, u16 select, u16 type, struct idtdesc *desc)
     86{
     87    desc->offset0_15 = (offset & 0xffff);
     88    desc->select = select;
     89    desc->type = type;
     90    desc->offset16_31 = (offset & 0xffff0000) >> 16;
     91    return;
    7392}
    7493
    7594
    76 void add_idt_desc(struct idtdesc desc) {
    77         kidt[kidtptr++] = desc;
    78         return;
     95void add_idt_desc(struct idtdesc desc)
     96{
     97    kidt[kidtptr++] = desc;
     98    return;
    7999}
    80100
    81101
    82 void init_idt(void) {
    83         struct idtdesc desc;
    84         int i;
     102void init_idt(void)
     103{
     104    struct idtdesc desc;
     105    int i;
    85106
    86    
    87         for(i=0;i<IDTSIZE;i++) {
    88                 init_idt_desc((u32)default_int, 0x08, INTGATE, &desc);
    89                 add_idt_desc(desc);
    90         }
    91107
    92         init_idt_desc((u32)k_int0, 0x08, INTGATE, &kidt[0]);
    93         init_idt_desc((u32)k_int1, 0x08, INTGATE, &kidt[1]);
    94         init_idt_desc((u32)k_int2, 0x08, INTGATE, &kidt[2]);
    95         init_idt_desc((u32)k_int3, 0x08, INTGATE, &kidt[3]);
    96         init_idt_desc((u32)k_int4, 0x08, INTGATE, &kidt[4]);
    97         init_idt_desc((u32)k_int5, 0x08, INTGATE, &kidt[5]);
    98         init_idt_desc((u32)k_int6, 0x08, INTGATE, &kidt[6]);
    99         init_idt_desc((u32)k_int7, 0x08, INTGATE, &kidt[7]);
    100         init_idt_desc((u32)k_int8, 0x08, INTGATE, &kidt[8]);
    101         init_idt_desc((u32)k_int9, 0x08, INTGATE, &kidt[9]);
    102         init_idt_desc((u32)k_int10, 0x08, INTGATE, &kidt[10]);
    103         init_idt_desc((u32)k_int11, 0x08, INTGATE, &kidt[11]);
    104         init_idt_desc((u32)k_int12, 0x08, INTGATE, &kidt[12]);
    105         init_idt_desc((u32)k_int13, 0x08, INTGATE, &kidt[13]);
    106         init_idt_desc((u32)k_int14, 0x08, INTGATE, &kidt[14]);
    107         init_idt_desc((u32)k_int15, 0x08, INTGATE, &kidt[15]);
    108         init_idt_desc((u32)k_int16, 0x08, INTGATE, &kidt[16]);
    109         init_idt_desc((u32)k_int17, 0x08, INTGATE, &kidt[17]);
    110         init_idt_desc((u32)k_int18, 0x08, INTGATE, &kidt[18]);
    111    
    112         init_idt_desc((u32)k_irq0, 0x08, INTGATE, &kidt[32]);
    113         init_idt_desc((u32)k_irq1, 0x08, INTGATE, &kidt[33]);
    114         init_idt_desc((u32)k_irq2, 0x08, INTGATE, &kidt[34]);
    115         init_idt_desc((u32)k_irq3, 0x08, INTGATE, &kidt[35]);
    116         init_idt_desc((u32)k_irq4, 0x08, INTGATE, &kidt[36]);
    117         init_idt_desc((u32)k_irq5, 0x08, INTGATE, &kidt[37]);
    118         init_idt_desc((u32)k_irq6, 0x08, INTGATE, &kidt[38]);
    119         init_idt_desc((u32)k_irq7, 0x08, INTGATE, &kidt[39]);
    120         init_idt_desc((u32)k_irq8, 0x08, INTGATE, &kidt[40]);
    121    
    122     kidtr.limite = IDTSIZE*8;
    123         kidtr.base = IDTBASE;
    124    
    125         memcpy((void*)kidtr.base, kidt, kidtr.limite);
     108    for (i = 0; i < IDTSIZE; i++)
     109    {
     110        init_idt_desc((u32) default_int, 0x08, INTGATE, &desc);
     111        add_idt_desc(desc);
     112    }
     113
     114    init_idt_desc((u32) k_int0, 0x08, INTGATE, &kidt[0]);
     115    init_idt_desc((u32) k_int1, 0x08, INTGATE, &kidt[1]);
     116    init_idt_desc((u32) k_int2, 0x08, INTGATE, &kidt[2]);
     117    init_idt_desc((u32) k_int3, 0x08, INTGATE, &kidt[3]);
     118    init_idt_desc((u32) k_int4, 0x08, INTGATE, &kidt[4]);
     119    init_idt_desc((u32) k_int5, 0x08, INTGATE, &kidt[5]);
     120    init_idt_desc((u32) k_int6, 0x08, INTGATE, &kidt[6]);
     121    init_idt_desc((u32) k_int7, 0x08, INTGATE, &kidt[7]);
     122    init_idt_desc((u32) k_int8, 0x08, INTGATE, &kidt[8]);
     123    init_idt_desc((u32) k_int9, 0x08, INTGATE, &kidt[9]);
     124    init_idt_desc((u32) k_int10, 0x08, INTGATE, &kidt[10]);
     125    init_idt_desc((u32) k_int11, 0x08, INTGATE, &kidt[11]);
     126    init_idt_desc((u32) k_int12, 0x08, INTGATE, &kidt[12]);
     127    init_idt_desc((u32) k_int13, 0x08, INTGATE, &kidt[13]);
     128    init_idt_desc((u32) k_int14, 0x08, INTGATE, &kidt[14]);
     129    init_idt_desc((u32) k_int15, 0x08, INTGATE, &kidt[15]);
     130    init_idt_desc((u32) k_int16, 0x08, INTGATE, &kidt[16]);
     131    init_idt_desc((u32) k_int17, 0x08, INTGATE, &kidt[17]);
     132    init_idt_desc((u32) k_int18, 0x08, INTGATE, &kidt[18]);
     133
     134    init_idt_desc((u32) k_irq0, 0x08, INTGATE, &kidt[32]);
     135    init_idt_desc((u32) k_irq1, 0x08, INTGATE, &kidt[33]);
     136    init_idt_desc((u32) k_irq2, 0x08, INTGATE, &kidt[34]);
     137    init_idt_desc((u32) k_irq3, 0x08, INTGATE, &kidt[35]);
     138    init_idt_desc((u32) k_irq4, 0x08, INTGATE, &kidt[36]);
     139    init_idt_desc((u32) k_irq5, 0x08, INTGATE, &kidt[37]);
     140    init_idt_desc((u32) k_irq6, 0x08, INTGATE, &kidt[38]);
     141    init_idt_desc((u32) k_irq7, 0x08, INTGATE, &kidt[39]);
     142    init_idt_desc((u32) k_irq8, 0x08, INTGATE, &kidt[40]);
     143
     144    kidtr.limite = IDTSIZE * 8;
     145    kidtr.base = IDTBASE;
     146
     147    memcpy((void *)kidtr.base, kidt, kidtr.limite);
    126148#define printf(format, ...) { char __str[255]; sprintf (__str, format, __VA_ARGS__); print(__str);}
    127149
    128150    printf("Loading IDT from 0x%x\n", kidtr);
    129151#undef printf
    130    
     152
    131153    asm("lidtl (kidtr)");
    132154}
  • libcaca/trunk/kernel/boot/interruptions.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17
    118#include "kernel.h"
    219#include "klibc.h"
     
    421
    522
    6 void idt_default_int(void) {
    7         print("!! Unknown interrupt\n");
     23void idt_default_int(void)
     24{
     25    print("!! Unknown interrupt\n");
    826}
    927
    10 void idt_int0(void) {
    11         print("!! Divide by 0\n ");
     28void idt_int0(void)
     29{
     30    print("!! Divide by 0\n ");
    1231}
    13 void idt_int1(void) {
    14         print("!! Debug exception ");
     32
     33void idt_int1(void)
     34{
     35    print("!! Debug exception ");
    1536}
    16 void idt_int2(void) {
    17         print("!! NMI ");
     37
     38void idt_int2(void)
     39{
     40    print("!! NMI ");
    1841}
    19 void idt_int3(void) {
    20         print("!! Breakpoint ");
     42
     43void idt_int3(void)
     44{
     45    print("!! Breakpoint ");
    2146}
    22 void idt_int4(void) {
    23         print("!! Overflow ");
     47
     48void idt_int4(void)
     49{
     50    print("!! Overflow ");
    2451}
    25 void idt_int5(void) {
    26         print("!! BoundCheck ");
     52
     53void idt_int5(void)
     54{
     55    print("!! BoundCheck ");
    2756}
    28 void idt_int6(void) {
    29         print("!! Invalid Opcode ");
     57
     58void idt_int6(void)
     59{
     60    print("!! Invalid Opcode ");
    3061}
    31 void idt_int7(void) {
    32         print("!! Coprocessor not available ");
     62
     63void idt_int7(void)
     64{
     65    print("!! Coprocessor not available ");
    3366}
    34 void idt_int8(void) {
    35         print("!! Double Fault ");
     67
     68void idt_int8(void)
     69{
     70    print("!! Double Fault ");
    3671}
    37 void idt_int9(void) {
    38         print("!! Coprocessor segment overrun ");
     72
     73void idt_int9(void)
     74{
     75    print("!! Coprocessor segment overrun ");
    3976}
    40 void idt_int10(void) {
    41         print("!! Invalid TSS ");
     77
     78void idt_int10(void)
     79{
     80    print("!! Invalid TSS ");
    4281}
    43 void idt_int11(void) {
    44         print("!! Segment not present ");
     82
     83void idt_int11(void)
     84{
     85    print("!! Segment not present ");
    4586}
    46 void idt_int12(void) {
    47         print("!! Stack exception ");
     87
     88void idt_int12(void)
     89{
     90    print("!! Stack exception ");
    4891}
    49 void idt_int13(void) {
    50         print("!! General protection exception ");
     92
     93void idt_int13(void)
     94{
     95    print("!! General protection exception ");
    5196}
    52 void idt_int14(void) {
    53         print("!! Page fault ");
     97
     98void idt_int14(void)
     99{
     100    print("!! Page fault ");
    54101}
    55 void idt_int15(void) {
    56         print("!! Intel reserved int ");
     102
     103void idt_int15(void)
     104{
     105    print("!! Intel reserved int ");
    57106}
    58 void idt_int16(void) {
    59         print("!! Coprocessor error ");
     107
     108void idt_int16(void)
     109{
     110    print("!! Coprocessor error ");
    60111}
    61 void idt_int17(void) {
    62         print("!! Intel reserved (2) ");
     112
     113void idt_int17(void)
     114{
     115    print("!! Intel reserved (2) ");
    63116}
    64 void idt_int18(void) {
    65         print("i18 ");
     117
     118void idt_int18(void)
     119{
     120    print("i18 ");
    66121}
    67122
    68123
    69124/* Used by Channel0 timer */
    70 void idt_irq0(void) {
     125void idt_irq0(void)
     126{
    71127    ticks++;
    72128}
    73 void idt_irq2(void) {
    74         print("IRQ 2");
     129
     130void idt_irq2(void)
     131{
     132    print("IRQ 2");
    75133}
    76 void idt_irq3(void) {
    77         print("IRQ 3");
     134
     135void idt_irq3(void)
     136{
     137    print("IRQ 3");
    78138}
    79 void idt_irq4(void) {
    80         print("IRQ 4");
     139
     140void idt_irq4(void)
     141{
     142    print("IRQ 4");
    81143}
    82 void idt_irq5(void) {
    83         print("IRQ 5");
     144
     145void idt_irq5(void)
     146{
     147    print("IRQ 5");
    84148}
    85 void idt_irq6(void) {
    86         print("IRQ 6");
     149
     150void idt_irq6(void)
     151{
     152    print("IRQ 6");
    87153}
    88 void idt_irq7(void) {
    89         print("IRQ 7");
     154
     155void idt_irq7(void)
     156{
     157    print("IRQ 7");
    90158}
    91 void idt_irq8(void) {
    92         print("IRQ 8");
     159
     160void idt_irq8(void)
     161{
     162    print("IRQ 8");
    93163}
    94164
     
    97167
    98168/* Keyboard irq is 1 */
    99 void kbd_int(void) {
    100         unsigned char i;
    101         do {
    102                 i=inb(0x64);
    103         } while((i & 0x01) == 0);
    104    
    105         i=inb(0x60);
    106         i--;
    107    
    108         if(i<0x80){
    109                 putcar(kbdmap[i*4]);
    110         }
     169void kbd_int(void)
     170{
     171    unsigned char i;
     172    do
     173    {
     174        i = inb(0x64);
     175    }
     176    while ((i & 0x01) == 0);
     177
     178    i = inb(0x60);
     179    i--;
     180
     181    if (i < 0x80)
     182    {
     183        putcar(kbdmap[i * 4]);
     184    }
    111185}
    112 
  • libcaca/trunk/kernel/boot/pic.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17
    118#include "klibc.h"
    219
     
    1027void init_pic(void)
    1128{
    12         /* MASTER */
    13     outbp(PIC_MASTER_ICW1,0x11); // Init 8259A-1
     29    /* MASTER */
     30    outbp(PIC_MASTER_ICW1, 0x11);      // Init 8259A-1
    1431    /* ICW2 - start vector = 32 */
    15     outbp(PIC_MASTER_ICW2,0x20); // IRQ 0-7 mapped to 0x20-0x27
     32    outbp(PIC_MASTER_ICW2, 0x20);      // IRQ 0-7 mapped to 0x20-0x27
    1633    /* IICW3 */
    17     outbp(PIC_MASTER_ICW2,0x04); // 8259A-1 has slave
     34    outbp(PIC_MASTER_ICW2, 0x04);      // 8259A-1 has slave
    1835    /* ICW4 */
    19     outbp(PIC_MASTER_ICW2,0x01);
     36    outbp(PIC_MASTER_ICW2, 0x01);
    2037    /* Int mask */
    21     outbp(PIC_MASTER_ICW2,0xFF);
    22    
    23         /* SLAVE */
    24     outbp(PIC_SLAVE_ICW1,0x11);
    25         /* ICW2 - start vector = 96 */
    26     outbp(PIC_SLAVE_ICW2,0x70);     
    27         /* ICW3 */
    28     outbp(PIC_SLAVE_ICW2,0x02);
    29         /* ICW4 */
    30     outbp(PIC_SLAVE_ICW2,0x01);
    31         /* Int Mask */
    32     outbp(PIC_SLAVE_ICW2,0xFF);
    33    
    34    
    35         /* Unmask irqs */
    36     outbp(0x21,0xFD);
    37    
     38    outbp(PIC_MASTER_ICW2, 0xFF);
     39
     40    /* SLAVE */
     41    outbp(PIC_SLAVE_ICW1, 0x11);
     42    /* ICW2 - start vector = 96 */
     43    outbp(PIC_SLAVE_ICW2, 0x70);
     44    /* ICW3 */
     45    outbp(PIC_SLAVE_ICW2, 0x02);
     46    /* ICW4 */
     47    outbp(PIC_SLAVE_ICW2, 0x01);
     48    /* Int Mask */
     49    outbp(PIC_SLAVE_ICW2, 0xFF);
     50
     51
     52    /* Unmask irqs */
     53    outbp(0x21, 0xFD);
     54
    3855}
    3956
     
    4663void disable_interrupt(char irq)
    4764{
    48         unsigned int mask = 1 << irq;
    49        
    50         cached_irq_mask |= mask;
    51     if (irq & 8) {
    52                 outb(0xA1, cached_A1);
    53     } else {
    54                 outb(0x21, cached_21);
     65    unsigned int mask = 1 << irq;
     66
     67    cached_irq_mask |= mask;
     68    if (irq & 8)
     69    {
     70        outb(0xA1, cached_A1);
     71    }
     72    else
     73    {
     74        outb(0x21, cached_21);
    5575    }
    5676}
     
    5878void enable_interrupt(char irq)
    5979{
    60         unsigned int mask = ~(1 << irq);
    61    
    62         cached_irq_mask &= mask;
    63         if (irq & 8) {
    64                 outb(0xA1, cached_A1);
    65     } else {
    66                 outb(0x21, cached_21);
     80    unsigned int mask = ~(1 << irq);
     81
     82    cached_irq_mask &= mask;
     83    if (irq & 8)
     84    {
     85        outb(0xA1, cached_A1);
     86    }
     87    else
     88    {
     89        outb(0x21, cached_21);
    6790    }
    6891
    6992}
    70 
    71 
    72 
    73 
  • libcaca/trunk/kernel/boot/stage2.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
    117#include "kernel.h"
    218#include "klibc.h"
     
    521
    622
    7 /* Entry point
    8  * bootsect.asm loaded this file at 0x0100:0x0, which is mapped
    9  * at 0x8:0x1000 (selector+8bytes, offset 1000 (0x100 + 0x0)
    10  */
     23/* Entry point bootsect.asm loaded this file at 0x0100:0x0, which is mapped
     24   at 0x8:0x1000 (selector+8bytes, offset 1000 (0x100 + 0x0) */
    1125
    1226/* 0x1000 */
    13 void _start(void) {
     27void _start(void)
     28{
     29    clearscreen();
    1430
    15         clearscreen();
    16    
    1731    init_gdt();
    1832    print("Loading IDT\n");
     
    2236    print("Running kmain()\n");
    2337    sti;
    24         kmain(); /* Call kernel's kmain() */
    2538   
    26     while(1) { /* Never return */
    27                 print("hlt;\n");
     39    kmain();                    /* Call kernel's kmain() */
     40
     41    while (1)
     42    {                           /* Never return */
     43        print("hlt;\n");
    2844    }
    2945}
    30 
  • libcaca/trunk/kernel/boot/stage2.h

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17
     18
    119extern int _start(void);
  • libcaca/trunk/kernel/drivers/floppy.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
    116
    217#include "kernel.h"
     
    2136    };
    2237
    23    
     38
    2439    memcpy(floppy_info->drive[0].type, drive_type[a],
    2540           strlen(drive_type[a]) + 1);
     
    3045    if (a != 0)
    3146        floppy_info->count++;
    32     if (b != 0) 
     47    if (b != 0)
    3348        floppy_info->count++;
    3449
  • libcaca/trunk/kernel/drivers/floppy.h

    r4154 r4158  
    1 struct floppy_drive {
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17struct floppy_drive
     18{
    219    char type[16];
    3     u8   status;
     20    u8 status;
    421};
    522
    6 struct floppy_info {
    7         int count;
     23struct floppy_info
     24{
     25    int count;
    826    struct floppy_drive drive[2];
    927};
  • libcaca/trunk/kernel/drivers/keyboard.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
    117#include "kernel.h"
    218
    319unsigned char kbdmap[] = {
    4     0x1B,       0x1B,   0x1B,   0x1B,   /*      esc     (0x01)  */
    5     '1',        '!',    '1',    '1',                           
    6     '2',        '@',    '2',    '2',                           
    7     '3',        '#',    '3',    '3',                           
    8     '4',        '$',    '4',    '4',                           
    9     '5',        '%',    '5',    '5',                           
    10     '6',        '^',    '6',    '6',                           
    11     '7',        '&',    '7',    '7',                           
    12     '8',        '*',    '8',    '8',                           
    13     '9',        '(',    '9',    '9',                           
    14     '0',        ')',    '0',    '0',                           
    15     '-',        '_',    '-',    '-',                           
    16     '=',        '+',    '=',    '=',                           
    17     0x08,       0x08,   0x7F,   0x08,   /*      backspace       */     
    18     0x09,       0x09,   0x09,   0x09,   /*      tab     */     
    19     'q',        'Q',    'q',    'q',                           
    20     'w',        'W',    'w',    'w',                           
    21     'e',        'E',    'e',    'e',                           
    22     'r',        'R',    'r',    'r',                           
    23     't',        'T',    't',    't',                           
    24     'y',        'Y',    'y',    'y',                           
    25     'u',        'U',    'u',    'u',                           
    26     'i',        'I',    'i',    'i',                           
    27     'o',        'O',    'o',    'o',                           
    28     'p',        'P',    'p',    'p',                           
    29     '[',        '{',    '[',    '[',                           
    30     ']',        '}',    ']',    ']',                           
    31     0x0A,       0x0A,   0x0A,   0x0A,   /*      enter   */     
    32     0xFF,       0xFF,   0xFF,   0xFF,   /*      ctrl    */     
    33     'a',        'A',    'a',    'a',                           
    34     's',        'S',    's',    's',                           
    35     'd',        'D',    'd',    'd',                           
    36     'f',        'F',    'f',    'f',                           
    37     'g',        'G',    'g',    'g',                           
    38     'h',        'H',    'h',    'h',                           
    39     'j',        'J',    'j',    'j',                           
    40     'k',        'K',    'k',    'k',                           
    41     'l',        'L',    'l',    'l',                           
    42     ';',        ':',    ';',    ';',                           
    43     0x27,       0x22,   0x27,   0x27,   /*      '"      */     
    44     '`',        '~',    '`',    '`',    /*      `~      */     
    45     0xFF,       0xFF,   0xFF,   0xFF,   /*      Lshift  (0x2a)  */
    46     '\\',       '|',    '\\',   '\\',   
    47     'z',        'Z',    'z',    'z',                           
    48     'x',        'X',    'x',    'x',                           
    49     'c',        'C',    'c',    'c',                           
    50     'v',        'V',    'v',    'v',                           
    51     'b',        'B',    'b',    'b',                           
    52     'n',        'N',    'n',    'n',                           
    53     'm',        'M',    'm',    'm',                           
    54     0x2C,       0x3C,   0x2C,   0x2C,   /*      ,<      */     
    55     0x2E,       0x3E,   0x2E,   0x2E,   /*      .>      */     
    56     0x2F,       0x3F,   0x2F,   0x2F,   /*      /?      */     
    57     0xFF,       0xFF,   0xFF,   0xFF,   /*      Rshift  (0x36)  */
    58     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x37)  */     
    59     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x38)  */     
    60     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x39)  */     
    61     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x3a)  */     
    62     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x3b)  */     
    63     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x3c)  */     
    64     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x3d)  */     
    65     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x3e)  */     
    66     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x3f)  */     
    67     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x40)  */     
    68     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x41)  */     
    69     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x42)  */     
    70     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x43)  */     
    71     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x44)  */     
    72     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x45)  */     
    73     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x46)  */     
    74     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x47)  */     
    75     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x48)  */     
    76     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x49)  */     
    77     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x4a)  */     
    78     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x4b)  */     
    79     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x4c)  */     
    80     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x4d)  */     
    81     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x4e)  */     
    82     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x4f)  */     
    83     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x50)  */     
    84     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x51)  */     
    85     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x52)  */     
    86     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x53)  */     
    87     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x54)  */     
    88     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x55)  */     
    89     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x56)  */     
    90     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x57)  */     
    91     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x58)  */     
    92     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x59)  */     
    93     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x5a)  */     
    94     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x5b)  */     
    95     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x5c)  */     
    96     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x5d)  */     
    97     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x5e)  */     
    98     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x5f)  */     
    99     0xFF,       0xFF,   0xFF,   0xFF,   /*      (0x60)  */     
    100     0xFF,       0xFF,   0xFF,   0xFF    /*      (0x61)  */     
     20    0x1B, 0x1B, 0x1B, 0x1B,     /* esc (0x01) */
     21    '1', '!', '1', '1',
     22    '2', '@', '2', '2',
     23    '3', '#', '3', '3',
     24    '4', '$', '4', '4',
     25    '5', '%', '5', '5',
     26    '6', '^', '6', '6',
     27    '7', '&', '7', '7',
     28    '8', '*', '8', '8',
     29    '9', '(', '9', '9',
     30    '0', ')', '0', '0',
     31    '-', '_', '-', '-',
     32    '=', '+', '=', '=',
     33    0x08, 0x08, 0x7F, 0x08,     /* backspace */
     34    0x09, 0x09, 0x09, 0x09,     /* tab */
     35    'q', 'Q', 'q', 'q',
     36    'w', 'W', 'w', 'w',
     37    'e', 'E', 'e', 'e',
     38    'r', 'R', 'r', 'r',
     39    't', 'T', 't', 't',
     40    'y', 'Y', 'y', 'y',
     41    'u', 'U', 'u', 'u',
     42    'i', 'I', 'i', 'i',
     43    'o', 'O', 'o', 'o',
     44    'p', 'P', 'p', 'p',
     45    '[', '{', '[', '[',
     46    ']', '}', ']', ']',
     47    0x0A, 0x0A, 0x0A, 0x0A,     /* enter */
     48    0xFF, 0xFF, 0xFF, 0xFF,     /* ctrl */
     49    'a', 'A', 'a', 'a',
     50    's', 'S', 's', 's',
     51    'd', 'D', 'd', 'd',
     52    'f', 'F', 'f', 'f',
     53    'g', 'G', 'g', 'g',
     54    'h', 'H', 'h', 'h',
     55    'j', 'J', 'j', 'j',
     56    'k', 'K', 'k', 'k',
     57    'l', 'L', 'l', 'l',
     58    ';', ':', ';', ';',
     59    0x27, 0x22, 0x27, 0x27,     /* '" */
     60    '`', '~', '`', '`',         /* `~ */
     61    0xFF, 0xFF, 0xFF, 0xFF,     /* Lshift (0x2a) */
     62    '\\', '|', '\\', '\\',
     63    'z', 'Z', 'z', 'z',
     64    'x', 'X', 'x', 'x',
     65    'c', 'C', 'c', 'c',
     66    'v', 'V', 'v', 'v',
     67    'b', 'B', 'b', 'b',
     68    'n', 'N', 'n', 'n',
     69    'm', 'M', 'm', 'm',
     70    0x2C, 0x3C, 0x2C, 0x2C,     /* ,< */
     71    0x2E, 0x3E, 0x2E, 0x2E,     /* .> */
     72    0x2F, 0x3F, 0x2F, 0x2F,     /* /? */
     73    0xFF, 0xFF, 0xFF, 0xFF,     /* Rshift (0x36) */
     74    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x37) */
     75    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x38) */
     76    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x39) */
     77    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x3a) */
     78    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x3b) */
     79    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x3c) */
     80    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x3d) */
     81    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x3e) */
     82    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x3f) */
     83    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x40) */
     84    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x41) */
     85    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x42) */
     86    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x43) */
     87    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x44) */
     88    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x45) */
     89    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x46) */
     90    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x47) */
     91    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x48) */
     92    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x49) */
     93    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x4a) */
     94    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x4b) */
     95    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x4c) */
     96    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x4d) */
     97    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x4e) */
     98    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x4f) */
     99    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x50) */
     100    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x51) */
     101    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x52) */
     102    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x53) */
     103    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x54) */
     104    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x55) */
     105    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x56) */
     106    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x57) */
     107    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x58) */
     108    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x59) */
     109    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x5a) */
     110    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x5b) */
     111    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x5c) */
     112    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x5d) */
     113    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x5e) */
     114    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x5f) */
     115    0xFF, 0xFF, 0xFF, 0xFF,     /* (0x60) */
     116    0xFF, 0xFF, 0xFF, 0xFF      /* (0x61) */
    101117};
  • libcaca/trunk/kernel/drivers/memory.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
    117#include "kernel.h"
    218#include "klibc.h"
    319#include "memory.h"
    4 
  • libcaca/trunk/kernel/drivers/memory.h

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
  • libcaca/trunk/kernel/drivers/processor.c

    r4157 r4158  
    11/*
    2  *  processor.c
    3  * 
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
    47 *
    5  *  Created by Jean-Yves Lamoureux on 12/19/09.
    6  *  Copyright 2009 Frob. All rights reserved.
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
    79 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
    815 */
     16
    917#include "kernel.h"
    1018#include "klibc.h"
     
    1523{
    1624    processor_info->id = 0;
    17    
     25
    1826    /* Vendor String */
    1927    int code = CPUID_GETVENDORSTRING;
  • libcaca/trunk/kernel/drivers/processor.h

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
    116
    2 enum cpuid_requests {
     17enum cpuid_requests
     18{
    319    CPUID_GETVENDORSTRING,
    420    CPUID_GETFEATURES,
    521    CPUID_GETTLB,
    622    CPUID_GETSERIAL,
    7    
    8     CPUID_INTELEXTENDED=0x80000000,
     23
     24    CPUID_INTELEXTENDED = 0x80000000,
    925    CPUID_INTELFEATURES,
    1026    CPUID_INTELBRANDSTRING,
     
    1329};
    1430
    15 enum {
    16     CPUID_FEAT_ECX_SSE3         = 1 << 0,
    17     CPUID_FEAT_ECX_PCLMUL       = 1 << 1,
    18     CPUID_FEAT_ECX_DTES64       = 1 << 2,
    19     CPUID_FEAT_ECX_MONITOR      = 1 << 3, 
    20     CPUID_FEAT_ECX_DS_CPL       = 1 << 4, 
    21     CPUID_FEAT_ECX_VMX          = 1 << 5, 
    22     CPUID_FEAT_ECX_SMX          = 1 << 6, 
    23     CPUID_FEAT_ECX_EST          = 1 << 7, 
    24     CPUID_FEAT_ECX_TM2          = 1 << 8, 
    25     CPUID_FEAT_ECX_SSSE3        = 1 << 9, 
    26     CPUID_FEAT_ECX_CID          = 1 << 10,
    27     CPUID_FEAT_ECX_FMA          = 1 << 12,
    28     CPUID_FEAT_ECX_CX16         = 1 << 13,
    29     CPUID_FEAT_ECX_ETPRD        = 1 << 14,
    30     CPUID_FEAT_ECX_PDCM         = 1 << 15,
    31     CPUID_FEAT_ECX_DCA          = 1 << 18,
    32     CPUID_FEAT_ECX_SSE4_1       = 1 << 19,
    33     CPUID_FEAT_ECX_SSE4_2       = 1 << 20,
    34     CPUID_FEAT_ECX_x2APIC       = 1 << 21,
    35     CPUID_FEAT_ECX_MOVBE        = 1 << 22,
    36     CPUID_FEAT_ECX_POPCNT       = 1 << 23,
    37     CPUID_FEAT_ECX_XSAVE        = 1 << 26,
    38     CPUID_FEAT_ECX_OSXSAVE      = 1 << 27,
    39     CPUID_FEAT_ECX_AVX          = 1 << 28,
    40    
    41     CPUID_FEAT_EDX_FPU          = 1 << 0, 
    42     CPUID_FEAT_EDX_VME          = 1 << 1, 
    43     CPUID_FEAT_EDX_DE           = 1 << 2, 
    44     CPUID_FEAT_EDX_PSE          = 1 << 3, 
    45     CPUID_FEAT_EDX_TSC          = 1 << 4, 
    46     CPUID_FEAT_EDX_MSR          = 1 << 5, 
    47     CPUID_FEAT_EDX_PAE          = 1 << 6, 
    48     CPUID_FEAT_EDX_MCE          = 1 << 7, 
    49     CPUID_FEAT_EDX_CX8          = 1 << 8, 
    50     CPUID_FEAT_EDX_APIC         = 1 << 9, 
    51     CPUID_FEAT_EDX_SEP          = 1 << 11,
    52     CPUID_FEAT_EDX_MTRR         = 1 << 12,
    53     CPUID_FEAT_EDX_PGE          = 1 << 13,
    54     CPUID_FEAT_EDX_MCA          = 1 << 14,
    55     CPUID_FEAT_EDX_CMOV         = 1 << 15,
    56     CPUID_FEAT_EDX_PAT          = 1 << 16,
    57     CPUID_FEAT_EDX_PSE36        = 1 << 17,
    58     CPUID_FEAT_EDX_PSN          = 1 << 18,
    59     CPUID_FEAT_EDX_CLF          = 1 << 19,
    60     CPUID_FEAT_EDX_DTES         = 1 << 21,
    61     CPUID_FEAT_EDX_ACPI         = 1 << 22,
    62     CPUID_FEAT_EDX_MMX          = 1 << 23,
    63     CPUID_FEAT_EDX_FXSR         = 1 << 24,
    64     CPUID_FEAT_EDX_SSE          = 1 << 25,
    65     CPUID_FEAT_EDX_SSE2         = 1 << 26,
    66     CPUID_FEAT_EDX_SS           = 1 << 27,
    67     CPUID_FEAT_EDX_HTT          = 1 << 28,
    68     CPUID_FEAT_EDX_TM1          = 1 << 29,
    69     CPUID_FEAT_EDX_IA64         = 1 << 30,
    70     CPUID_FEAT_EDX_PBE          = 1 << 31
     31enum
     32{
     33    CPUID_FEAT_ECX_SSE3 = 1 << 0,
     34    CPUID_FEAT_ECX_PCLMUL = 1 << 1,
     35    CPUID_FEAT_ECX_DTES64 = 1 << 2,
     36    CPUID_FEAT_ECX_MONITOR = 1 << 3,
     37    CPUID_FEAT_ECX_DS_CPL = 1 << 4,
     38    CPUID_FEAT_ECX_VMX = 1 << 5,
     39    CPUID_FEAT_ECX_SMX = 1 << 6,
     40    CPUID_FEAT_ECX_EST = 1 << 7,
     41    CPUID_FEAT_ECX_TM2 = 1 << 8,
     42    CPUID_FEAT_ECX_SSSE3 = 1 << 9,
     43    CPUID_FEAT_ECX_CID = 1 << 10,
     44    CPUID_FEAT_ECX_FMA = 1 << 12,
     45    CPUID_FEAT_ECX_CX16 = 1 << 13,
     46    CPUID_FEAT_ECX_ETPRD = 1 << 14,
     47    CPUID_FEAT_ECX_PDCM = 1 << 15,
     48    CPUID_FEAT_ECX_DCA = 1 << 18,
     49    CPUID_FEAT_ECX_SSE4_1 = 1 << 19,
     50    CPUID_FEAT_ECX_SSE4_2 = 1 << 20,
     51    CPUID_FEAT_ECX_x2APIC = 1 << 21,
     52    CPUID_FEAT_ECX_MOVBE = 1 << 22,
     53    CPUID_FEAT_ECX_POPCNT = 1 << 23,
     54    CPUID_FEAT_ECX_XSAVE = 1 << 26,
     55    CPUID_FEAT_ECX_OSXSAVE = 1 << 27,
     56    CPUID_FEAT_ECX_AVX = 1 << 28,
     57
     58    CPUID_FEAT_EDX_FPU = 1 << 0,
     59    CPUID_FEAT_EDX_VME = 1 << 1,
     60    CPUID_FEAT_EDX_DE = 1 << 2,
     61    CPUID_FEAT_EDX_PSE = 1 << 3,
     62    CPUID_FEAT_EDX_TSC = 1 << 4,
     63    CPUID_FEAT_EDX_MSR = 1 << 5,
     64    CPUID_FEAT_EDX_PAE = 1 << 6,
     65    CPUID_FEAT_EDX_MCE = 1 << 7,
     66    CPUID_FEAT_EDX_CX8 = 1 << 8,
     67    CPUID_FEAT_EDX_APIC = 1 << 9,
     68    CPUID_FEAT_EDX_SEP = 1 << 11,
     69    CPUID_FEAT_EDX_MTRR = 1 << 12,
     70    CPUID_FEAT_EDX_PGE = 1 << 13,
     71    CPUID_FEAT_EDX_MCA = 1 << 14,
     72    CPUID_FEAT_EDX_CMOV = 1 << 15,
     73    CPUID_FEAT_EDX_PAT = 1 << 16,
     74    CPUID_FEAT_EDX_PSE36 = 1 << 17,
     75    CPUID_FEAT_EDX_PSN = 1 << 18,
     76    CPUID_FEAT_EDX_CLF = 1 << 19,
     77    CPUID_FEAT_EDX_DTES = 1 << 21,
     78    CPUID_FEAT_EDX_ACPI = 1 << 22,
     79    CPUID_FEAT_EDX_MMX = 1 << 23,
     80    CPUID_FEAT_EDX_FXSR = 1 << 24,
     81    CPUID_FEAT_EDX_SSE = 1 << 25,
     82    CPUID_FEAT_EDX_SSE2 = 1 << 26,
     83    CPUID_FEAT_EDX_SS = 1 << 27,
     84    CPUID_FEAT_EDX_HTT = 1 << 28,
     85    CPUID_FEAT_EDX_TM1 = 1 << 29,
     86    CPUID_FEAT_EDX_IA64 = 1 << 30,
     87    CPUID_FEAT_EDX_PBE = 1 << 31
    7188};
    7289
    73 struct processor_info {
    74     int  id;
     90struct processor_info
     91{
     92    int id;
    7593    char vendor[13];
    7694    unsigned int features;
  • libcaca/trunk/kernel/drivers/timer.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
    116
    217#include "kernel.h"
     
    823void timer_phase(int hz)
    924{
    10     unsigned int divisor = 1193180 / hz;   /* Calculate our divisor */
    11     /*
    12       0x43 is the Mode/Command register
    13      
    14      From http://wiki.osdev.org/Programmable_Interval_Timer#Read_Back_Status_Byte :
    15      Bits         Usage
    16      6 and 7      Select channel :
    17                   0 0 = Channel 0
    18                   0 1 = Channel 1
    19                   1 0 = Channel 2
    20                   1 1 = Read-back command (8254 only)
    21      4 and 5      Access mode :
    22                   0 0 = Latch count value command
    23                   0 1 = Access mode: lobyte only
    24                   1 0 = Access mode: hibyte only
    25                   1 1 = Access mode: lobyte/hibyte
    26      1 to 3       Operating mode :
    27                   0 0 0 = Mode 0 (interrupt on terminal count)
    28                   0 0 1 = Mode 1 (hardware re-triggerable one-shot)
    29                   0 1 0 = Mode 2 (rate generator)
    30                   0 1 1 = Mode 3 (square wave generator)
    31                   1 0 0 = Mode 4 (software triggered strobe)
    32                   1 0 1 = Mode 5 (hardware triggered strobe)
    33                   1 1 0 = Mode 2 (rate generator, same as 010b)
    34                   1 1 1 = Mode 3 (square wave generator, same as 011b)
    35      0            BCD/Binary mode: 0 = 16-bit binary, 1 = four-digit BCD
    36      
     25    unsigned int divisor = 1193180 / hz;        /* Calculate our divisor */
     26    /*
     27       0x43 is the Mode/Command register
     28
     29       From
     30       http://wiki.osdev.org/Programmable_Interval_Timer#Read_Back_Status_Byte
     31       : Bits Usage 6 and 7 Select channel : 0 0 = Channel 0 0 1 = Channel 1
     32       1 0 = Channel 2 1 1 = Read-back command (8254 only) 4 and 5 Access mode
     33       : 0 0 = Latch count value command 0 1 = Access mode: lobyte only 1 0 =
     34       Access mode: hibyte only 1 1 = Access mode: lobyte/hibyte 1 to 3
     35       Operating mode : 0 0 0 = Mode 0 (interrupt on terminal count) 0 0 1 =
     36       Mode 1 (hardware re-triggerable one-shot) 0 1 0 = Mode 2 (rate
     37       generator) 0 1 1 = Mode 3 (square wave generator) 1 0 0 = Mode 4
     38       (software triggered strobe) 1 0 1 = Mode 5 (hardware triggered strobe)
     39       1 1 0 = Mode 2 (rate generator, same as 010b) 1 1 1 = Mode 3 (square
     40       wave generator, same as 011b) 0 BCD/Binary mode: 0 = 16-bit binary, 1 =
     41       four-digit BCD
     42
    3743     */
    38     unsigned short command = 0b00110110;
     44    unsigned short command = 0 b00110110;
    3945    outb(0x43, command);
    40     outb(0x40, divisor & 0xFF);            /* Set low byte of divisor */
    41     outb(0x40, divisor >> 8);              /* Set high byte of divisor */
     46    outb(0x40, divisor & 0xFF); /* Set low byte of divisor */
     47    outb(0x40, divisor >> 8);   /* Set high byte of divisor */
    4248}
  • libcaca/trunk/kernel/drivers/timer.h

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
    117extern u32 ticks;
    218void timer_phase(int hz);
  • libcaca/trunk/kernel/kernel.c

    r4154 r4158  
    1 /* 
    2  *  libcaca     
     1/*
     2 *  libcaca       
    33 *  libcaca       Colour ASCII-Art library
    4  *  Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
    5  *                2006-2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
    66 *                All Rights Reserved
    77 *
     
    1313 *  To Public License, Version 2, as published by Sam Hocevar. See
    1414 *  http://sam.zoy.org/wtfpl/COPYING for more details.
    15  */
    16 
    17 /*
    18  *  This file contains replacement functions for the standard C library
    19  *  that must be used when building libcaca and libcaca into a kernel.
    2015 */
    2116
  • libcaca/trunk/kernel/kernel.h

    r4154 r4158  
    11/*
    2  *  libcaca      Canvas for ultrafast compositing of Unicode letters
     2 *  libcaca       
    33 *  libcaca       Colour ASCII-Art library
    4  *  Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
    56 *                All Rights Reserved
    67 *
     
    1213 *  To Public License, Version 2, as published by Sam Hocevar. See
    1314 *  http://sam.zoy.org/wtfpl/COPYING for more details.
    14  */
    15 
    16 /*
    17  *  This file contains replacement functions for the standard C library
    18  *  that must be used when building libcaca and libcaca into a kernel.
    1915 */
    2016
  • libcaca/trunk/kernel/klibc.c

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
    117#include "config.h"
    218#include "caca_types.h"
  • libcaca/trunk/kernel/klibc.h

    r4154 r4158  
     1/*
     2 *  libcaca       
     3 *  libcaca       Colour ASCII-Art library
     4 *  Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
     5 *                2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
     6 *                All Rights Reserved
     7 *
     8 *  $Id: kernel.h 4154 2009-12-20 13:33:11Z jylam $
     9 *
     10 *  This library is free software. It comes without any warranty, to
     11 *  the extent permitted by applicable law. You can redistribute it
     12 *  and/or modify it under the terms of the Do What The Fuck You Want
     13 *  To Public License, Version 2, as published by Sam Hocevar. See
     14 *  http://sam.zoy.org/wtfpl/COPYING for more details.
     15 */
     16
     17/*
     18 *  This file contains replacement functions for the standard C library
     19 *  that must be used when building libcaca and libcaca into a kernel.
     20 */
     21
     22
    123/* Various typedefs -- some are x86-specific */
    224#define CUSTOM_INTTYPES
     
    1739#define __BIG_ENDIAN 2
    1840
    19 typedef unsigned char      u8;
    20 typedef unsigned short      u16;
    21 typedef unsigned int        u32;
    22 typedef unsigned long int       u64;
     41typedef unsigned char u8;
     42typedef unsigned short u16;
     43typedef unsigned int u32;
     44typedef unsigned long int u64;
    2345
    2446#ifndef size_t
     
    3052} FILE;
    3153
    32 struct timeval {
     54struct timeval
     55{
    3356    int tv_sec;
    3457    int tv_usec;
    3558};
    3659
    37 struct timezone {
     60struct timezone
     61{
    3862    int tz_minuteswest;
    3963    int tz_dsttime;
     
    4973void exit(int status);
    5074void srand(unsigned int s);
    51 int atexit(void (*function)(void));
     75int atexit(void (*function) (void));
    5276FILE *stdin, *stdout, *stderr;
    5377
     
    6488
    6589/* stdarg.h functions */
    66 typedef void * va_list;
     90typedef void *va_list;
    6791#define va_start(v,a) v = (void *)((uintptr_t)(&a) + sizeof(a))
    6892#define va_end(v)
    6993int vsnprintf(char *str, size_t size, const char *format, va_list ap);
    70 /* va_arg*/
     94/* va_arg */
    7195#define args_list char *
    7296#define _arg_stack_size(type)    (((sizeof(type)-1)/sizeof(int)+1)*sizeof(int))
     
    79103/* stdio.h functions */
    80104FILE *fopen(const char *path, const char *mode);
    81 int feof(FILE *stream);
    82 char *fgets(char *s, int size, FILE *stream);
    83 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
    84 int fclose(FILE *fp);
     105int feof(FILE * stream);
     106char *fgets(char *s, int size, FILE * stream);
     107size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE * stream);
     108int fclose(FILE * fp);
    85109
    86110int printf(const char *format, ...);
    87111
    88 int fprintf(FILE *stream, const char *format, ...);
    89 int fflush(FILE *stream);
     112int fprintf(FILE * stream, const char *format, ...);
     113int fflush(FILE * stream);
    90114int sprintf(char *str, const char *format, ...);
    91115int sscanf(const char *str, const char *format, ...);
     
    110134
    111135/* errno.h functions */
    112 #define ENOENT   2 /* No such file or directory */
    113 #define ENOMEM  12 /* Out of memory */
    114 #define EBUSY   16 /* Device or resource busy */
    115 #define ENODEV  19 /* No such device */
    116 #define EINVAL  22 /* Invalid argument */
    117 #define ENOTTY  25 /* Not a typewriter */
    118 #define ENOSYS  38 /* Function not implemented */
     136#define ENOENT   2              /* No such file or directory */
     137#define ENOMEM  12              /* Out of memory */
     138#define EBUSY   16              /* Device or resource busy */
     139#define ENODEV  19              /* No such device */
     140#define EINVAL  22              /* Invalid argument */
     141#define ENOTTY  25              /* Not a typewriter */
     142#define ENOSYS  38              /* Function not implemented */
    119143extern int errno;
    120144
Note: See TracChangeset for help on using the changeset viewer.