00001
00006 #include "routix/system.h"
00007 #include "routix/paging.h"
00008 #include "routix/segm.h"
00009 #include "routix/debug.h"
00010 #include "routix/8259.h"
00011 #include "routix/8254.h"
00012
00013 #include "routix/task.h"
00014 #include "drivers/fat.h"
00015 #include "routix/kalloc.h"
00016 #include "routix/syscalls.h"
00017 #include <routix/kstdio.h>
00018 #include "fs/blockcache.h"
00019
00020
00021 addr_t *exit_addr;
00022 void init_MM_base(void);
00023 void init_MM (void);
00024 void init_all_memory (dword memoria);
00025 dword contar_memoria (void);
00026
00027 void inicializarInterrupciones (void);
00028 void start_scheduler (void);
00029 void floppy_cache_init (void);
00030 void entrada_de_inicio (void);
00031 void init_time (void);
00032
00033 void init_var (void);
00034
00035
00036 void kmain (void)
00037 {
00038
00039 mascarasPics(0xff,0xff);
00040
00041 init_MM();
00042
00043
00044 __asm__("aca: jmp aca+5+0xc0000000");
00045
00046
00047
00048
00049 __asm__ __volatile__ ("movl $0x200000, %%eax\n\t" \
00050 "subl %%esp, %%eax\n\t" \
00051 "movl %%eax, %%esp\n\t" \
00052 "movl $0xd8000000,%%eax\n\t" \
00053 "subl %%esp, %%eax\n\t"
00054 "movl %%eax, %%esp" : : : "eax" );
00055
00056
00057 clrscr();
00058 puts("Inicializando kernel....\n");
00059
00060 puts("Inicializando Controladores Programables de Interrupciones...\n");
00061 inicializarPics(0x20,0x28);
00062
00063 puts("Kmalloc Inicializando...\n");
00064 kprintf("Memoria fisica %d Megabytes\n",memoria);
00065
00066 inicializacion_kmalloc(memoria, KERNEL_END );
00067 puts("Kmalloc Inicializacion completa\n");
00068
00069
00070 init_all_memory(memoria);
00071
00072
00073 puts("Inicializando interrupciones\n");
00074 inicializarInterrupciones();
00075
00076 puts("Inicializando 8254\n");
00077 init_8254();
00078
00079 puts("Inicializando Rejoj\n");
00080 init_time();
00081
00082
00083 start_block_cache(memoria);
00084
00085
00086 USER_PDT = kmalloc_page();
00087 copy_page ((void *)USER_PDT, (void *)KERNEL_PDT);
00088 unsigned long *puntero = (unsigned long *)USER_PDT;
00089 int i;
00090
00091 for (i=0 ; i<PAGINA_SIZE ; i++)
00092 puntero[i] = puntero[i] & 0xfffffffb;
00093
00094
00095
00096 puts("Inicializando el scheduler\n");
00097 start_scheduler();
00098
00099
00100
00101
00102
00103
00104
00105
00106 kprintf("Task Struct Size: %d\n", sizeof(task_struct_t));
00107
00108
00109 enable_irq(0);
00110 enable_irq(1);
00111 enable_irq(6);
00112
00113
00114 init_var();
00115
00116
00117
00118 entrada_de_inicio();
00119
00120 }
00121