diff options
| -rw-r--r-- | Notes | 6 | ||||
| -rw-r--r-- | main.c | 12 | ||||
| -rw-r--r-- | trap.c | 12 | ||||
| -rwxr-xr-x | vectors.pl | 2 | 
4 files changed, 26 insertions, 6 deletions
| @@ -73,3 +73,9 @@ setupsegs() may modify current segment table, is that legal?  trap() ought to lgdt on return, since currently only done in swtch()  protect hardware interrupt vectors from user INT instructions? + +i'm getting a curious interrupt when jumping into user space. maybe +it's IRQ 0, but it comes at a weird and changing vector (e.g. 119) if +you don't initialize the PIC. why doesn't jos see this? if i +initialize the PIC with IRQ_OFFSET 32, the interrupt arrives at vector +32. @@ -5,12 +5,20 @@  #include "defs.h"  #include "x86.h" -char junk1[20000]; -char junk2[20000] = { 1 }; +extern char edata[], end[];  main()  {    struct proc *p; +   +  // clear BSS +  memset(edata, 0, end - edata); + +  // partially initizialize PIC +  outb(0x20+1, 0xFF); // IO_PIC1 +  outb(0xA0+1, 0xFF); // IO_PIC2 +  outb(0x20, 0x11); +  outb(0x20+1, 32);    cprintf("\nxV6\n\n"); @@ -12,11 +12,15 @@ extern unsigned vectors[]; /* vectors.S, array of 256 entry point addresses */  extern void trapenter();  extern void trapenter1(); + +int xx; +  void  tinit()  {    int i; +  xx = 0;    for(i = 0; i < 256; i++){      SETGATE(idt[i], 1, SEG_KCODE << 3, vectors[i], 3);    } @@ -27,8 +31,10 @@ void  trap(struct Trapframe *tf)  {    /* which process are we running? */ -  cprintf("trap %d tf %x\n", tf->tf_trapno, tf); -  while(1) -    ; +  if(xx < 10) +    cprintf("%d\n", tf->tf_trapno); +  xx++; +  //while(1) +  //;    // XXX probably ought to lgdt on trap return  } @@ -14,7 +14,7 @@ for(my $i = 0; $i < 256; $i++){      if(($i < 8 || $i > 14) && $i != 17){          print "\tpushl \$0\n";      } -    print "\tpushl $i\n"; +    print "\tpushl \$$i\n";      print "\tjmp alltraps\n";  }  print ".data\n"; | 
