<aname="l1"></a><spanclass=cF5> Why Not More?</span><spanclass=cF0>
<aname="l2"></a>
<aname="l3"></a>If a feature cannot be made to work correctly and consistently, professional companies usually remove the feature. Because PC
<aname="l4"></a>hardware is so diverse, getting things to work on all people's computers is really difficult. For one thing, you practically
<aname="l5"></a>have to own all the different hardware to write drivers for it. If a company wanted to sell a PC operating system, they would
<aname="l6"></a>offer a warranty and, therefore, could not get away with amateur behavior. ZealOS absolutely requires 64-bit computers, so we
<aname="l7"></a>leave behind much trouble, but plenty remains.
<aname="l8"></a>
<aname="l9"></a>The PCI bus interface is what modern hardware uses. Before PCI, life was simple and devices used I/O ports. After studying </span><spanclass=cF4>
<aname="l10"></a></span><ahref="https://tomawezome.github.io/ZealOS/Demo/Lectures/PCIInterrupts.html#l1"><spanclass=cF4>PCI Interrupts</span></a><spanclass=cF0> and attempting to do a HDAudio driver, Terry Davis came to realize that modern PCI devices require ten times more
<aname="l15"></a>this point, we only have one driver for each type of device and it is delightfully simple that way. ZealOS has one </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/SerialDev/Keyboard.html#l1"><spanclass=cF4>keyboard</span></a><spanclass=cF0>
<aname="l16"></a>driver, one </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/SerialDev/Mouse.html#l1"><spanclass=cF4>mouse</span></a><spanclass=cF0> driver, one </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/BlkDev/DiskAHCI.html#l1"><spanclass=cF4>ATA hard drive</span></a><spanclass=cF0> driver, one </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/BlkDev/DiskAHCI.html#l1"><spanclass=cF4>ATAPI CD/DVD</span></a><spanclass=cF0> driver, one </span><ahref="https://tomawezome.github.io/ZealOS/System/Gr/GrScreen.html#l1"><spanclass=cF4>32-bit color high-res VBE graphics</span></a><spanclass=cF0> video
<aname="l17"></a>driver and one </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KMisc.html#l129"><spanclass=cF4>PC Speaker</span></a><spanclass=cF0> driver. We use the </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KMain.html#l124"><spanclass=cF4>PIT timer</span></a><spanclass=cF0> and </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KInterrupts.html#l133"><spanclass=cF4>PIC Interrupt Controller</span></a><spanclass=cF0>. We use IRQ0 for timer, IRQ1 for
<aname="l20"></a>In the CPU department, ZealOS has state of the art 64-bit </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KStart64.html#l1"><spanclass=cF4>long mode</span></a><spanclass=cF0> with </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/MultiProc.html#l1"><spanclass=cF4>multicore</span></a><spanclass=cF0> support. We use the </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/MultiProc.html#l176"><spanclass=cF4>APIC</span></a><spanclass=cF0> and start-up </span><spanclass=cF4>