You are not logged in.
Hi All,
I have finally caved in and am implementing my IDT. But alas I am having a problem... So you are aware, I have remaped the PIC, then disabled IRQs, I have setup an ISR for INT 30h (along with all exceptions et al). I load the IDT. I turn on interrupts with STI. If I don't call an INT 30h, the system runs forever, no sweat. But as soon as I INT 30h, the system reboots. It is late, so I'm heading to bed, but I will post some of the offending code for your thoughts later tomorrow (today, damn, it's past midnight). Any words of wisdom or thoughts?
Offline
My words of wisdom: You've screwed up..
Seriously... Much can go wrong in your IDT, to give any real tip, I'm gonna need to see some code.
Offline
bubach wrote:
My words of wisdom: You've screwed up..
Seriously... Much can go wrong in your IDT, to give any real tip, I'm gonna need to see some code.
ROTFLMAO! Thanks...yeah, I'm sure I screwed something up. It was late last night. Here is a file with the combined information needed. Notice I used your code for reprgramming the PIC and disabling IRQs. In addition I used your convention for loading the addresses into the IDT. Following the partial IDT (everthing after 30h is redundant as far as entries) are the called ISRs. Withn them are functions that work under conditions without the INT 30h called.
To reiterate, if I comment out INT 30h from teh PMDOE.ASM file, everthing works correctly. The procedure DisplayBootTime uses the CMOS time to update the screen with the current time and is my version of JMP $.
I have tried looking at Barry Brey's book without anything that is glaring at me. I will re-look at the docs you have on-line but I can not recall anything else I could be doing wrong.
The error I receive from Bochs 2.2 is:
00066869982p[CPU0 ] >>PANIC<< fetch_raw_descriptor: LDTR.valid=0
Not know for certain what this means, other than I suspect LDTR is the local descriptor register, I am not using a local descriptor table. I am using a global descriptor table. Perhaps I need to use one? Looking at your code I couldn't find reference to using LDT so I'm at a loss.
Offline
Wow, what a bunch of poop... I figured it out. My code selector variable, which I was using from the label in my GDT was some memory location way far away, probably in Star Wars III. So, suffice it to say, when I changed the variable to 08h, everything worked as it should:
Version 1.00.00.000000A2 CPU: Pentium or equivelent A20 Gate: Initializing; A20 gate enabled... E820: 1,073,741,824 bytes. E801: 1,073,741,824 bytes. 88xx: 16,777,216 bytes. CMOS: 67,108,864 bytes. Entering UnReal Mode... Probe: 1,073,741,824 bytes. Mapping Memory 1: 1,073,741,824 installed: E820: Mapping Memory 2: Bitmap Initialized at 14MB: 1,056,964,608 bytes free for use. Looking for FLOPPY.SYS in root...Found! Loading FLOPPY.SYS 20,480 bytes. The next file can be loaded at: 01005000h Looking for ATA.SYS in root...Found! Loading ATA.SYS 95,360 bytes. The next file can be loaded at: 0101C600h Looking for KEYBOARD.SYS in root...Found! Loading KEYBOARD.SYS 24,576 bytes. The next file can be loaded at: 01022600h Looking for VENDORS.TXT in root...Found! Loading VENDORS.TXT 198,196 bytes. The next file can be loaded at: 01052E00h BIOS32 Entry Found at: 000F9D90h Revision: 0 PCI32 BIOS Found at: 000F9DD0h PCIIRQ Table found: 000FA030h Slots: 6 Bus: 0 Device: 01h Function: 00h PCI IRQ Slot: 0 Bus: 0 Device: 01h INT A#: 60h PCI IRQ Slot: 1 Bus: 0 Device: 02h INT A#: 61h PCI IRQ Slot: 2 Bus: 0 Device: 03h INT A#: 62h PCI IRQ Slot: 3 Bus: 0 Device: 04h INT A#: 63h PCI IRQ Slot: 4 Bus: 0 Device: 05h INT A#: 60h PCI IRQ Slot: 5 Bus: 0 Device: 06h INT A#: 61h About to cook VENDORS.TXT file for use in enumeration. The first pass completed: This file was created on: Mon Jun 6 00:15:01 PDT 2005 Creating database of 891,224 bytes: VendorID, DeviceID, VendorString, DeviceString. Reducing required information size to items only currently installed. 8086 1237 Intel Corporation - 82440LX/EX PCI & Memory 8086 7000 Intel Corporation - 82371SB PIIX3 PCI-to-ISA Bridge (Triton II) 8086 7010 Intel Corporation - 82371SB PIIX3 IDE Interface (Triton II) Start End Size (bytes) Type Owner/Description --------- --------- ------------- --- ----------------- 00000000h 000003FFh 1,024 02h Interrupt Vector Table (IVT) 00000400h 000004FFh 256 02h BIOS Data Area (BDA) 00000500h 000005FFh 256 02h smiddyOS Data Area (OSDA) 00000600h 0009FBFFh 652,800 02h smiddyOS code 0009FC00h 0009FFFFh 1,024 02h Extended BIOS Data Area (EBDA) 000A0000h 000BFFFFh 131,072 02h VGA Buffer Area 000C0000h 000FFFFFh 262,144 02h ROM/BIOS Area 00100000h 00FFFFFFh 15,728,640 02h smiddyOS code 01000000h 01004FFFh 20,480 02h FLOPPY SYS 01005000h 0101C5FFh 95,744 02h ATA SYS 0101C600h 010225FFh 24,576 02h KEYBOARDSYS 01022600h 010226BFh 192 02h PCI Vendors and Devices Information (Reduced) 010226C0h 01052DFFh 198,464 01h <Free Useable Memory> 01052E00h 0112C757h 891,224 02h PCI Vendors and Devices Information (Cooking) 0112C758h 3FFFFFFFh 1,055,733,928 01h <Free Useable Memory> 40000000h FFFFFFFFh 3,221,225,472 02h Unuseable addressable memory area ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· º º º Unhandled INT! º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ Boot up time> 20:49:42 System Time> 20:49:48 Current Time> 20:51:26
So now I have interrupts, NICE!
Offline
I'm a bit late to this post..
Anyway nice to hear that it worked out (and that you find my source usefull).
BTW cool "screenshot", looks like you got some drivers since last one..
Offline
Those are just stubs for now...I am working on the timer driver now and will use it for testing device installation, after I've gotten it working within the kernel first.
Offline
Pages: 1