From 359bb65a0ed9dbb75a208db4675db689877a85b9 Mon Sep 17 00:00:00 2001 From: Christoffer Bubach Date: Sun, 11 Jan 2015 22:14:51 +0100 Subject: [PATCH 1/1] More cleaning. Now runs error-free. IMG added to repo. --- bos.img | Bin 0 -> 1474560 bytes doc/bochsrc-osx.txt | 2 +- kernel/fdc/fdc.asm | 572 ++++++++++++++++++++-------------------- kernel/init/bios.asm | 155 ++++++----- kernel/init/cmos.asm | 110 ++++---- kernel/init/init32b.asm | 2 +- kernel/init/pic.asm | 173 ++++++------ kernel/init/timer.asm | 220 ++++++++-------- kernel/int/idt.asm | 131 +++++---- kernel/kernel.sys | Bin 18388 -> 18440 bytes 10 files changed, 693 insertions(+), 672 deletions(-) create mode 100755 bos.img diff --git a/bos.img b/bos.img new file mode 100755 index 0000000000000000000000000000000000000000..113e9feca4f11ebda3b84f9422b6115655a4a20b GIT binary patch literal 1474560 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWZHM1RkH6rcT`V)|#F zn71;||KvG&Jv~ns(>sRhnLX#`JpY1XdiceM6!mOvxi!UmK2c2f^=CugzsG-4O!xLD z`*B|X_>4)4la9`Ci`cb>|h+e;(@p)?)mRf1;RvXsDhmev*%O z_S#~)x83c3mDk_%XfgfZQ2w4X^8P=$shIBV&$F+~eXjdyG2L6wyFc}=)X$dp7Sk{O zQC;CMdwpI{%lu;c_)xs%ABy!dzL@Uq=l0Ec{@ITf)AtVb=gBE~{nvfBnC^9MIjnF# HteF0P$9-;z literal 0 HcmV?d00001 diff --git a/doc/bochsrc-osx.txt b/doc/bochsrc-osx.txt index 32aeabe..9ea686c 100644 --- a/doc/bochsrc-osx.txt +++ b/doc/bochsrc-osx.txt @@ -7,7 +7,7 @@ #display_library: term romimage: file=/usr/local/Cellar/bochs/2.6.2/share/bochs/BIOS-bochs-latest megs: 32 -vgaromimage: file=/usr/local/Cellar/bochs/2.6.2/share/bochs/VGABIOS-elpin-2.40 +vgaromimage: file=/usr/local/Cellar/bochs/2.6.2/share/bochs/VGABIOS-lgpl-latest floppya: 1_44=../bos.img, status=inserted boot: a floppy_bootsig_check: disabled=0 diff --git a/kernel/fdc/fdc.asm b/kernel/fdc/fdc.asm index 5048e43..ac3cf00 100755 --- a/kernel/fdc/fdc.asm +++ b/kernel/fdc/fdc.asm @@ -77,21 +77,21 @@ fdc_init: ; ; ;------------------------------------------------------; floppy_irq: - push ds - push eax - push ebx + push ds + push eax + push ebx - mov ax, 0x10 - mov ds, ax + mov ax, 0x10 + mov ds, ax - mov [fdd_int_done], 1 - mov al, 0x20 - out 0x20, al + mov [fdd_int_done], 1 + mov al, 0x20 + out 0x20, al - pop ebx - pop eax - pop ds - iret + pop ebx + pop eax + pop ds + iret @@ -128,18 +128,18 @@ wait_int: ; out: nothing ; ;------------------------------------------------------; fdd_off: - cmp [fdd_motor_on], 0 - je .end - push eax - push edx - - mov dx, 0x3F2 - mov al, 0x0c ; motor off - out dx, al - mov [fdd_motor_on], 0 - - pop edx - pop eax + cmp [fdd_motor_on], 0 + je .end + push eax + push edx + + mov dx, 0x3F2 + mov al, 0x0c ; motor off + out dx, al + mov [fdd_motor_on], 0 + + pop edx + pop eax .end: ret @@ -150,21 +150,21 @@ fdd_off: ; out: nothing ; ;------------------------------------------------------; fdd_on: - cmp [fdd_motor_on], 1 - je .end - push eax - push edx + cmp [fdd_motor_on], 1 + je .end + push eax + push edx - mov dx, 0x3F2 ; motor 0 on.. - mov al, 0x1C - out dx, al + mov dx, 0x3F2 ; motor 0 on.. + mov al, 0x1C + out dx, al - mov ecx, 20 ; 1/5 of a sec. to speed up - call delay ; in timer.inc - mov [fdd_motor_on], 1 + mov ecx, 20 ; 1/5 of a sec. to speed up + call delay ; in timer.inc + mov [fdd_motor_on], 1 - pop edx - pop eax + pop edx + pop eax .end: ret @@ -176,34 +176,34 @@ fdd_on: ; in: al = data byte ; ;------------------------------------------------------; fdc_sendbyte: - push edx - push ecx - push eax + push edx + push ecx + push eax - mov ecx, 50 ; 50 = 0.5 seconds. - call active_delay ; timer.inc + mov ecx, 50 ; 50 = 0.5 seconds. + call active_delay ; timer.inc .l1: - cmp dword [ecx], 0 ; timeup? - je .error - mov dx, 0x3f4 ; check status reg - in al, dx - and al, 0xC0 - cmp al, 0x80 ; ok to write? - jnz .l1 - - pop eax - pop ecx - mov dx, 0x3F5 ; send byte - out dx, al - pop edx - clc - ret + cmp dword [ecx], 0 ; timeup? + je .error + mov dx, 0x3f4 ; check status reg + in al, dx + and al, 0xC0 + cmp al, 0x80 ; ok to write? + jnz .l1 + + pop eax + pop ecx + mov dx, 0x3F5 ; send byte + out dx, al + pop edx + clc + ret .error: - pop eax - pop ecx - pop edx - stc - ret + pop eax + pop ecx + pop edx + stc + ret @@ -213,34 +213,34 @@ fdc_sendbyte: ; out: al = data byte ; ;------------------------------------------------------; fdc_getbyte: - push edx - push ecx - push eax + push edx + push ecx + push eax - mov ecx, 50 ; 50 = 0.5 seconds. - call active_delay ; timer.inc + mov ecx, 50 ; 50 = 0.5 seconds. + call active_delay ; timer.inc .l1: - cmp dword [ecx], 0 ; timeup? - je .error - mov dx, 0x3f4 ; check status reg - in al, dx - and al, 0xD0 - cmp al, 0xD0 ; ok to read? - jnz .l1 - - pop eax - pop ecx - mov dx, 0x3F5 ; get the byte - in al, dx - pop edx - clc - ret + cmp dword [ecx], 0 ; timeup? + je .error + mov dx, 0x3f4 ; check status reg + in al, dx + and al, 0xD0 + cmp al, 0xD0 ; ok to read? + jnz .l1 + + pop eax + pop ecx + mov dx, 0x3F5 ; get the byte + in al, dx + pop edx + clc + ret .error: - pop eax - pop ecx - pop edx - stc - ret + pop eax + pop ecx + pop edx + stc + ret @@ -249,20 +249,20 @@ fdc_getbyte: ; ; ;------------------------------------------------------; sensei: - push eax - - mov al, 0x08 ; fdc command - call fdc_sendbyte - call fdc_getbyte - mov ah, al ; save ST0 in ah - call fdc_getbyte ; read PCN - clc - test ah, 0x80 ; test for error: - jz .end ; "invalid command" - stc + push eax + + mov al, 0x08 ; fdc command + call fdc_sendbyte + call fdc_getbyte + mov ah, al ; save ST0 in ah + call fdc_getbyte ; read PCN + clc + test ah, 0x80 ; test for error: + jz .end ; "invalid command" + stc .end: - pop eax - ret + pop eax + ret @@ -271,57 +271,57 @@ sensei: ; ; ;------------------------------------------------------; fdd_reset: - push eax - push ecx - push edx + push eax + push ecx + push edx - mov byte [fdd_motor_on], 0 + mov byte [fdd_motor_on], 0 - mov dx, 0x3f2 - mov al, 8 ; off with all motors, - out dx, al ; dma,irq etc.. + mov dx, 0x3f2 + mov al, 8 ; off with all motors, + out dx, al ; dma,irq etc.. - mov ecx, 5 - call delay ; in timer.inc + mov ecx, 5 + call delay ; in timer.inc - mov dx, 0x3f7 - mov al, 0 - out dx, al ; work at 500 kbit/s + mov dx, 0x3f7 + mov al, 0 + out dx, al ; work at 500 kbit/s - mov dx, 0x3f2 - mov al, 0x0c - out dx, al ; reenable interrupts + mov dx, 0x3f2 + mov al, 0x0c + out dx, al ; reenable interrupts - mov [fdd_int_done], 0 - call wait_int ; wait for floppy int. - jc .error ; timeout? + mov [fdd_int_done], 0 + call wait_int ; wait for floppy int. + jc .error ; timeout? - mov cx, 0x04 + mov cx, 0x04 .status: ; 4 dummy-reads. - call sensei - loop .status - - mov al, 0x03 ; specify command - call fdc_sendbyte - mov al, 0xDF ; SRT, HUT - call fdc_sendbyte - mov al, 0x02 ; HLT, ND - call fdc_sendbyte - - mov al, 1 - call fdd_recal_seek - jc .error - call fdd_off - clc - jmp .end + call sensei + loop .status + + mov al, 0x03 ; specify command + call fdc_sendbyte + mov al, 0xDF ; SRT, HUT + call fdc_sendbyte + mov al, 0x02 ; HLT, ND + call fdc_sendbyte + + mov al, 1 + call fdd_recal_seek + jc .error + call fdd_off + clc + jmp .end .error: - call fdd_off - stc + call fdd_off + stc .end: - pop edx - pop ecx - pop eax - ret + pop edx + pop ecx + pop eax + ret @@ -335,38 +335,38 @@ fdd_reset: ; ; ;------------------------------------------------------; fdd_recal_seek: - push eax - - call fdd_on ; turn motor on - cmp al, 0 - jne .recalibrate - clc - cmp bl, [result_C] ; are we there yet? :D - je .ok - mov al, 0x0F ; seek command - call fdc_sendbyte - mov al, bh ; ((head*4)|drive) - call fdc_sendbyte - mov al, bl ; track - call fdc_sendbyte - mov [result_C], bl ; now on..? - jmp .get_int + push eax + + call fdd_on ; turn motor on + cmp al, 0 + jne .recalibrate + clc + cmp bl, [result_C] ; are we there yet? :D + je .ok + mov al, 0x0F ; seek command + call fdc_sendbyte + mov al, bh ; ((head*4)|drive) + call fdc_sendbyte + mov al, bl ; track + call fdc_sendbyte + mov [result_C], bl ; now on..? + jmp .get_int .recalibrate: - mov al, 0x07 ; recalibrate command - call fdc_sendbyte - mov al, 0 ; drive number - call fdc_sendbyte - mov [result_C], 0 ; now on track 0 + mov al, 0x07 ; recalibrate command + call fdc_sendbyte + mov al, 0 ; drive number + call fdc_sendbyte + mov [result_C], 0 ; now on track 0 .get_int: - mov [fdd_int_done], 0 - call wait_int - jc .error + mov [fdd_int_done], 0 + call wait_int + jc .error - call sensei ; sense interrupt status - jc .error + call sensei ; sense interrupt status + jc .error .ok: - clc - jmp .end + clc + jmp .end .error: stc .end: @@ -387,136 +387,136 @@ fdd_recal_seek: ; cf = 0 if ok, 1 if error ; ;------------------------------------------------------; fdd_read_write: - pushad - - and dh, 1 ; head 0 or 1? - mov [fdd_head], dh ; store it. - shl dh, 2 - or dh, 0 ; drive 0, fd0 - mov [fdd_drivehead], dh ; dh = ((head*4)|drive) - mov [fdd_errorcode], 0x04 ; basic error code - cmp ch, 0x51 ; check for allowed - jae .error ; track number. - mov [fdd_track], ch - cmp cl, 0x13 ; check for allowed - jae .error ; sector number. - mov [fdd_sector], cl - - cmp [fdd_error], 1 - jne .no_previous_error - mov al, 1 - call fdd_recal_seek + pushad + + and dh, 1 ; head 0 or 1? + mov [fdd_head], dh ; store it. + shl dh, 2 + or dh, 0 ; drive 0, fd0 + mov [fdd_drivehead], dh ; dh = ((head*4)|drive) + mov [fdd_errorcode], 0x04 ; basic error code + cmp ch, 0x51 ; check for allowed + jae .error ; track number. + mov [fdd_track], ch + cmp cl, 0x13 ; check for allowed + jae .error ; sector number. + mov [fdd_sector], cl + + cmp [fdd_error], 1 + jne .no_previous_error + mov al, 1 + call fdd_recal_seek .no_previous_error: - call fdd_on + call fdd_on - mov dx, 0x3F7 - mov al, 0 ; 500Kb/sec mode - out dx, al - mov [fdd_errorcode], 0x80 ; error code + mov dx, 0x3F7 + mov al, 0 ; 500Kb/sec mode + out dx, al + mov [fdd_errorcode], 0x80 ; error code - xor ecx, ecx - mov cx, 3 ; try seek 3 times + xor ecx, ecx + mov cx, 3 ; try seek 3 times .l2: - mov al, 0 - push ebx - mov bl, [fdd_track] - mov bh, [fdd_drivehead] ; ((head*4)|drive) - call fdd_recal_seek - pop ebx - jnc .l3 ; ok, continue. - loop .l2 - jmp .error ; timeout. + mov al, 0 + push ebx + mov bl, [fdd_track] + mov bh, [fdd_drivehead] ; ((head*4)|drive) + call fdd_recal_seek + pop ebx + jnc .l3 ; ok, continue. + loop .l2 + jmp .error ; timeout. .l3: - push ebx - cmp bl, 0 - je .read_fdd + push ebx + cmp bl, 0 + je .read_fdd .write_fdd: - push edi - mov esi, edi - mov edi, 0x80000 ; copy the stuff we will - mov ecx, 128 ; write to the DMA buffer - rep movsd ; 128*4=512 - pop edi - - mov bl, 2 ; channel 2 - mov esi, 512 ; bytes to write - mov ecx, 0x80000 ; page & offset - mov bh, 1 ; write floppy, read DMA - call dma_transfer - - mov al, 0xC5 ; write sector command - call fdc_sendbyte - jmp .cont + push edi + mov esi, edi + mov edi, 0x80000 ; copy the stuff we will + mov ecx, 128 ; write to the DMA buffer + rep movsd ; 128*4=512 + pop edi + + mov bl, 2 ; channel 2 + mov esi, 512 ; bytes to write + mov ecx, 0x80000 ; page & offset + mov bh, 1 ; write floppy, read DMA + call dma_transfer + + mov al, 0xC5 ; write sector command + call fdc_sendbyte + jmp .cont .read_fdd: - mov bl, 2 ; channel 2 - mov esi, 512 ; bytes to read - mov ecx, 0x80000 ; page & offset - mov bh, 0 ; read floppy, write DMA - call dma_transfer + mov bl, 2 ; channel 2 + mov esi, 512 ; bytes to read + mov ecx, 0x80000 ; page & offset + mov bh, 0 ; read floppy, write DMA + call dma_transfer - mov al, 0xE6 ; read sector command - call fdc_sendbyte + mov al, 0xE6 ; read sector command + call fdc_sendbyte .cont: - pop ebx - mov al, [fdd_drivehead] ; ((head*4)|drive) - call fdc_sendbyte - mov al, [fdd_track] ; track/cylinder - call fdc_sendbyte - - mov al, [fdd_head] ; head/side 0 or 1 - call fdc_sendbyte - mov al, [fdd_sector] ; sector number - call fdc_sendbyte - mov al, 0x02 ; sector size, 512 bytes - call fdc_sendbyte - - mov al, 0x12 ; sectors to a track - call fdc_sendbyte - mov al, 0x1B ; gap length - call fdc_sendbyte - mov al, 0xFF ; data length - call fdc_sendbyte - - mov [fdd_int_done], 0 - call wait_int - jc .error - - call fdc_getbyte - mov [result_ST0], al ; ST0 - call fdc_getbyte - mov [result_ST1], al ; ST1 - call fdc_getbyte - mov [result_ST2], al ; ST2 - call fdc_getbyte - mov [result_C], al ; cylinder - call fdc_getbyte - mov [result_H], al ; head - call fdc_getbyte - mov [result_R], al ; sector number. - call fdc_getbyte - mov [result_N], al ; sector size - - test [result_ST0], 0xc0 ; test if sr0 is 0xC0 - jnz .error - cmp bl, 1 ; did we write the disk? - je .ok - - mov ecx, 512 ; sector size in bytes - mov esi, 0x80000 ; copy to dest. in edi - rep movsb + pop ebx + mov al, [fdd_drivehead] ; ((head*4)|drive) + call fdc_sendbyte + mov al, [fdd_track] ; track/cylinder + call fdc_sendbyte + + mov al, [fdd_head] ; head/side 0 or 1 + call fdc_sendbyte + mov al, [fdd_sector] ; sector number + call fdc_sendbyte + mov al, 0x02 ; sector size, 512 bytes + call fdc_sendbyte + + mov al, 0x12 ; sectors to a track + call fdc_sendbyte + mov al, 0x1B ; gap length + call fdc_sendbyte + mov al, 0xFF ; data length + call fdc_sendbyte + + mov [fdd_int_done], 0 + call wait_int + jc .error + + call fdc_getbyte + mov [result_ST0], al ; ST0 + call fdc_getbyte + mov [result_ST1], al ; ST1 + call fdc_getbyte + mov [result_ST2], al ; ST2 + call fdc_getbyte + mov [result_C], al ; cylinder + call fdc_getbyte + mov [result_H], al ; head + call fdc_getbyte + mov [result_R], al ; sector number. + call fdc_getbyte + mov [result_N], al ; sector size + + test [result_ST0], 0xc0 ; test if sr0 is 0xC0 + jnz .error + cmp bl, 1 ; did we write the disk? + je .ok + + mov ecx, 512 ; sector size in bytes + mov esi, 0x80000 ; copy to dest. in edi + rep movsb .ok: - mov [fdd_errorcode], 0 ; no error.. :D - mov [fdd_error], 0 ; no recal. next time - clc - jmp .end + mov [fdd_errorcode], 0 ; no error.. :D + mov [fdd_error], 0 ; no recal. next time + clc + jmp .end .error: - mov [fdd_error], 1 ; recalibrate next time - stc + mov [fdd_error], 1 ; recalibrate next time + stc .end: - call fdd_off ; floppy motor off - popad - mov al, [fdd_errorcode] ; error status - ret \ No newline at end of file + call fdd_off ; floppy motor off + popad + mov al, [fdd_errorcode] ; error status + ret \ No newline at end of file diff --git a/kernel/init/bios.asm b/kernel/init/bios.asm index ed5716d..8ecad9f 100755 --- a/kernel/init/bios.asm +++ b/kernel/init/bios.asm @@ -8,100 +8,99 @@ rmode_int: - pushad - push eax - shr eax, 16 ; move high bits to ax - mov word [realmode_ax], ax ; save new ax value - pop eax ; restore - - push ebx - shr ebx, 16 ; move high bits to bx - mov byte [int_number], bl ; save int number to call - pop ebx - - mov byte [realmode_error], 0 ; all variables is in the - mov word [realmode_bx], bx ; realmode/variables.inc file - mov word [realmode_cx], cx - mov word [realmode_dx], dx - call disable_irqs - jmp pword 0x18:do_16pmode ; must substract 0x10000 from - ; data addresses becasue of - ; fasm strict "org" behavior + pushad + push eax + shr eax, 16 ; move high bits to ax + mov word [realmode_ax], ax ; save new ax value + pop eax ; restore + + push ebx + shr ebx, 16 ; move high bits to bx + mov byte [int_number], bl ; save int number to call + pop ebx + + mov byte [realmode_error], 0 ; all variables is in the + mov word [realmode_bx], bx ; realmode/variables.inc file + mov word [realmode_cx], cx + mov word [realmode_dx], dx + call disable_irqs + jmp pword 0x18:do_16pmode ; begin our dark journey into 16bit-land + use16 do_16pmode: - mov ax, 0x20 - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax + mov ax, 0x20 + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov ss, ax - cli - mov eax, cr0 - and al, 0xFE - mov cr0, eax + cli + mov eax, cr0 + and al, 0xFE + mov cr0, eax - jmp 0x1000:(do_realm) + jmp 0x0000:(do_realm) ; this should be triple checked! do_realm: - mov ax, cs - mov ds, ax + mov ax, cs + mov ds, ax - xor ax, ax - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax + xor ax, ax + mov es, ax + mov fs, ax + mov gs, ax + mov ss, ax - lidt [ridtr] ; realmode/variables.inc - sti + lidt [ridtr] ; realmode/variables.inc + sti - mov ax, word [realmode_ax] - mov bx, word [realmode_bx] - mov cx, word [realmode_cx] - mov dx, word [realmode_dx] + mov ax, word [realmode_ax] + mov bx, word [realmode_bx] + mov cx, word [realmode_cx] + mov dx, word [realmode_dx] - push ax ; this is some cool shit.. ;) - mov al, [int_number] ; interrupt to preform - mov [$+5], al ; move it to right pos. - pop ax - db 0xCD ; opcode for int. - db 0x00 ; move int_number here + push ax ; this is some cool shit.. ;) + mov al, [int_number] ; interrupt to preform + mov [$+5], al ; move it to right pos. + pop ax + db 0xCD ; opcode for int. + db 0x00 ; move int_number here - jnc .no_error - mov byte [realmode_error], 1 + jnc .no_error + mov byte [realmode_error], 1 - .no_error: - mov word [realmode_ax], ax - mov word [realmode_bx], bx - mov word [realmode_cx], cx - mov word [realmode_dx], dx + .no_error: + mov word [realmode_ax], ax + mov word [realmode_bx], bx + mov word [realmode_cx], cx + mov word [realmode_dx], dx - cli + cli - lgdt [gdtr] - lidt [idtr] - mov eax, cr0 - or al, 1 - mov cr0, eax + lgdt [gdtr] + lidt [idtr] + mov eax, cr0 + or al, 1 + mov cr0, eax - jmp pword 0x08:gobackto_pm + jmp pword 0x08:gobackto_pm use32 gobackto_pm: - mov ax, 0x10 ; refresh all segment registers - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax - call enable_irqs - sti - popad - clc ; clear carry. - cmp [realmode_error], 1 ; if error, then - jne .end - stc ; set carry. - .end: - ret \ No newline at end of file + mov ax, 0x10 ; refresh all segment registers + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov ss, ax + call enable_irqs + sti + popad + clc ; clear carry. + cmp [realmode_error], 1 ; if error, then + jne .end + stc ; set carry. + .end: + ret \ No newline at end of file diff --git a/kernel/init/cmos.asm b/kernel/init/cmos.asm index 032a95c..b047c86 100755 --- a/kernel/init/cmos.asm +++ b/kernel/init/cmos.asm @@ -10,58 +10,58 @@ ;-----------------------------------; ; variables containing CMOS data ; ;-----------------------------------; - century db 0 ; latest century, - year db 0 ; year, - month db 0 ; month, - day db 0 ; day (1 = sunday), - hour db 0 ; hour, - minute db 0 ; minute and - second db 0 ; second read in from CMOS. + century db 0 ; latest century, + year db 0 ; year, + month db 0 ; month, + day db 0 ; day (1 = sunday), + hour db 0 ; hour, + minute db 0 ; minute and + second db 0 ; second read in from CMOS. ;-------------------------; ; save info from CMOS ; ;-------------------------; get_cmos_data: - push ax + push ax - mov al, 0x00 ; get the "second" byte - out 0x70, al - in al, 0x71 - mov [second], al ; save it. + mov al, 0x00 ; get the "second" byte + out 0x70, al + in al, 0x71 + mov [second], al ; save it. - mov al, 0x02 ; get the "minute" byte - out 0x70, al - in al, 0x71 - mov [minute], al + mov al, 0x02 ; get the "minute" byte + out 0x70, al + in al, 0x71 + mov [minute], al - mov al, 0x04 ; get the "hour" byte - out 0x70, al - in al, 0x71 - mov [hour], al + mov al, 0x04 ; get the "hour" byte + out 0x70, al + in al, 0x71 + mov [hour], al - mov al, 0x07 ; get the "day" byte - out 0x70, al - in al, 0x71 - mov [day], al + mov al, 0x07 ; get the "day" byte + out 0x70, al + in al, 0x71 + mov [day], al - mov al, 0x08 ; get the "month" byte - out 0x70, al - in al, 0x71 - mov [month], al + mov al, 0x08 ; get the "month" byte + out 0x70, al + in al, 0x71 + mov [month], al - mov al, 0x09 ; get the "year" byte - out 0x70, al - in al, 0x71 - mov [year], al + mov al, 0x09 ; get the "year" byte + out 0x70, al + in al, 0x71 + mov [year], al - mov al, 0x32 ; get the "century" byte - out 0x70, al - in al, 0x71 - mov [century], al + mov al, 0x32 ; get the "century" byte + out 0x70, al + in al, 0x71 + mov [century], al - pop ax - ret + pop ax + ret ;------------------------------------------------; ; calculate binary from BCD ; @@ -69,15 +69,15 @@ get_cmos_data: ; out: al = bin ; ;------------------------------------------------; BCD2bin: - push ebx - mov bl, al ; bl = al mod 16 - and bl, 0x0F - shr al, 4 ; al = al / 16 - mov bh, 10 - mul bh ; multiply by 10 - add al, bl ; add in low nib - pop ebx - ret + push ebx + mov bl, al ; bl = al mod 16 + and bl, 0x0F + shr al, 4 ; al = al / 16 + mov bh, 10 + mul bh ; multiply by 10 + add al, bl ; add in low nib + pop ebx + ret ;------------------------------------------------; @@ -86,11 +86,11 @@ BCD2bin: ; out: ax = ASCII ; ;------------------------------------------------; BCD2ascii: - push ecx - mov ah, al - and ax, 0xF00F ; mask bits - shr ah, 4 ; right shift ah to get unpacked BCD - or ax, 0x3030 ; combine with 30 to get ASCII - xchg ah, al ; swap for ASCII storage convention - pop ecx - ret \ No newline at end of file + push ecx + mov ah, al + and ax, 0xF00F ; mask bits + shr ah, 4 ; right shift ah to get unpacked BCD + or ax, 0x3030 ; combine with 30 to get ASCII + xchg ah, al ; swap for ASCII storage convention + pop ecx + ret \ No newline at end of file diff --git a/kernel/init/init32b.asm b/kernel/init/init32b.asm index 01bb358..3d2319e 100755 --- a/kernel/init/init32b.asm +++ b/kernel/init/init32b.asm @@ -62,7 +62,7 @@ bos_init: ;--------------; ; setup IDT ; ;--------------; - mov edi, u_isr ; isr.inc + mov esi, u_isr ; isr.inc call init_idt ; idt.inc mov esi, idt_list ; idt.inc call set_idt_list ; idt.inc diff --git a/kernel/init/pic.asm b/kernel/init/pic.asm index 6076213..9e6bb61 100755 --- a/kernel/init/pic.asm +++ b/kernel/init/pic.asm @@ -8,128 +8,131 @@ ;-------------------------------------------; -; remap PICs to: cl = pic1 ch = pic2 ; +; remap PICs ; +; in: cl = pic1 ; +; ch = pic2 ; ;-------------------------------------------; remap_pics: - push ax - push dx + push ax + push dx - mov al, 0x11 ; IWC1 - out 0x20, al - out 0xA0, al + mov al, 0x11 ; IWC1 + out 0x20, al + out 0xA0, al - mov al, cl ; IWC2 - out 0x21, al - mov al, ch - out 0xA1, al + mov al, cl ; IWC2 + out 0x21, al + mov al, ch + out 0xA1, al - mov al, 0x04 ; IWC3 - out 0x21, al - mov al, 0x02 - out 0xA1, al + mov al, 0x04 ; IWC3 + out 0x21, al + mov al, 0x02 + out 0xA1, al - mov al, 0x01 ; IWC4 - out 0x21, al - out 0xA1, al + mov al, 0x01 ; IWC4 + out 0x21, al + out 0xA1, al - pop dx - pop ax - ret + pop dx + pop ax + ret ;----------------------; ; disable all IRQs. ; ;----------------------; disable_irqs: - push ax + push ax - mov al, 0xFF - out 0x21, al - out 0xA1, al + mov al, 0xFF + out 0x21, al + out 0xA1, al - pop ax - ret + pop ax + ret ;---------------------; ; enable all IRQs. ; ;---------------------; enable_irqs: - push ax + push ax - mov al, 0x00 - out 0x21, al - out 0xA1, al + mov al, 0x00 + out 0x21, al + out 0xA1, al - pop ax - ret + pop ax + ret ;-----------------------------; ; enable an IRQ. cl = irq ; ;-----------------------------; enable_irq: - push ax - push cx + push ax + push cx - cmp cl, 8 - jb .master + cmp cl, 8 + jb .master - sub cl, 8 - mov ah, 1 - shl ah, cl - xor ah, 0xFF + sub cl, 8 + mov ah, 1 + shl ah, cl + xor ah, 0xFF - in al, 0xA1 - and al, ah - out 0xA1, al + in al, 0xA1 + and al, ah + out 0xA1, al - pop cx - pop ax - ret - .master: - mov ah, 1 - shl ah, cl - xor ah, 0xFF + pop cx + pop ax + ret + .master: + mov ah, 1 + shl ah, cl + xor ah, 0xFF - in al, 0x21 - and al, ah - out 0x21, al + in al, 0x21 + and al, ah + out 0x21, al - pop cx - pop ax - ret + pop cx + pop ax + ret ;------------------------------; -; disable an IRQ. cl = irq ; +; disable an IRQ. ; +; in: cl = irq ; ;------------------------------; disable_irq: - push ax - push cx - - cmp cl, 8 - jb .master - - sub cl, 8 - mov ah, 1 - shl ah, cl - - in al, 0xA1 - or al, ah - out 0xA1, al - - pop cx - pop ax - ret - .master: - mov ah, 1 - shl ah, cl - - in al, 0x21 - or al, ah - out 0x21, al - - pop cx - pop ax - ret \ No newline at end of file + push ax + push cx + + cmp cl, 8 + jb .master + + sub cl, 8 + mov ah, 1 + shl ah, cl + + in al, 0xA1 + or al, ah + out 0xA1, al + + pop cx + pop ax + ret + .master: + mov ah, 1 + shl ah, cl + + in al, 0x21 + or al, ah + out 0x21, al + + pop cx + pop ax + ret \ No newline at end of file diff --git a/kernel/init/timer.asm b/kernel/init/timer.asm index 29088eb..aa2a335 100755 --- a/kernel/init/timer.asm +++ b/kernel/init/timer.asm @@ -9,47 +9,47 @@ ;-----------------; ; variables ; ;-----------------; - timer_wait dd 0 ; time to wait - timer_counter dd 0, 0 ; time since BOS started - call_list dd 0, 0, 0, 0, 0 ; functions to call + timer_wait dd 0 ; time to wait + timer_counter dd 0, 0 ; time since BOS started + call_list dd 0, 0, 0, 0, 0 ; functions to call ;---------------------------; ; Timer IRQ(0) ; ;---------------------------; timer: - add dword [timer_counter], 1 ; it's just a 64-bit - adc dword [timer_counter+4], 0 ; counter since boot. - - cmp [timer_wait], 0 ; "delay" countdown. - je .test1 - dec [timer_wait] - - .test1: ; checks for calls to - cmp [call_list], dword 0 ; do before we quit. - je .test2 - call dword [call_list] - .test2: - cmp [call_list+4], dword 0 - je .test3 - call dword [call_list+4] - .test3: - cmp [call_list+8], dword 0 - je .test4 - call dword [call_list+8] - .test4: - cmp [call_list+12], dword 0 - je .test5 - call dword [call_list+12] - .test5: - cmp [call_list+16], dword 0 - je .end - call dword [call_list+16] - - .end: - mov al, 0x20 - out 0x20, al - ret + add dword [timer_counter], 1 ; it's just a 64-bit + adc dword [timer_counter+4], 0 ; counter since boot. + + cmp [timer_wait], 0 ; "delay" countdown. + je .test1 + dec [timer_wait] + + .test1: ; checks for calls to + cmp [call_list], dword 0 ; do before we quit. + je .test2 + call dword [call_list] + .test2: + cmp [call_list+4], dword 0 + je .test3 + call dword [call_list+4] + .test3: + cmp [call_list+8], dword 0 + je .test4 + call dword [call_list+8] + .test4: + cmp [call_list+12], dword 0 + je .test5 + call dword [call_list+12] + .test5: + cmp [call_list+16], dword 0 + je .end + call dword [call_list+16] + + .end: + mov al, 0x20 + out 0x20, al + ret @@ -59,35 +59,35 @@ timer: ; out: eax = 0 if OK ; ;------------------------------------------------; add_timercall: - cmp [call_list], 0 - jne .test2 - mov [call_list], ebx - jmp .end - .error: - mov eax, 1 - ret - .test2: - cmp [call_list+4], 0 ; since i am so lazy - jne .test3 ; and a loop can be - mov [call_list+4], ebx ; rather complicated - jmp .end ; for this stuff, i - .test3: ; check for each one.. - cmp [call_list+8], 0 ; after all, it's only 5. - jne .test4 - mov [call_list+8], ebx - jmp .end - .test4: - cmp [call_list+12], 0 - jne .test5 - mov [call_list+12], ebx - jmp .end - .test5: - cmp [call_list+16], 0 - jne .error - mov [call_list+16], ebx - .end: - xor eax, eax - ret + cmp [call_list], 0 + jne .test2 + mov [call_list], ebx + jmp .end + .error: + mov eax, 1 + ret + .test2: + cmp [call_list+4], 0 ; since i am so lazy + jne .test3 ; and a loop can be + mov [call_list+4], ebx ; rather complicated + jmp .end ; for this stuff, i + .test3: ; check for each one.. + cmp [call_list+8], 0 ; after all, it's only 5. + jne .test4 + mov [call_list+8], ebx + jmp .end + .test4: + cmp [call_list+12], 0 + jne .test5 + mov [call_list+12], ebx + jmp .end + .test5: + cmp [call_list+16], 0 + jne .error + mov [call_list+16], ebx + .end: + xor eax, eax + ret @@ -97,35 +97,35 @@ add_timercall: ; out: eax = 0 if OK ; ;-------------------------------------------------; remove_timercall: - cmp [call_list], ebx - jne .test2 - mov [call_list], dword 0 - jmp .end - .error: - mov eax, 1 - ret - .test2: - cmp [call_list+4], ebx - jne .test3 - mov [call_list+4], dword 0 - jmp .end - .test3: - cmp [call_list+8], ebx - jne .test4 - mov [call_list+8], dword 0 - jmp .end - .test4: - cmp [call_list+12], ebx - jne .test5 - mov [call_list+12], dword 0 - jmp .end - .test5: - cmp [call_list+16], ebx - jne .error - mov [call_list+16], dword 0 - .end: - xor eax, eax - ret + cmp [call_list], ebx + jne .test2 + mov [call_list], dword 0 + jmp .end + .error: + mov eax, 1 + ret + .test2: + cmp [call_list+4], ebx + jne .test3 + mov [call_list+4], dword 0 + jmp .end + .test3: + cmp [call_list+8], ebx + jne .test4 + mov [call_list+8], dword 0 + jmp .end + .test4: + cmp [call_list+12], ebx + jne .test5 + mov [call_list+12], dword 0 + jmp .end + .test5: + cmp [call_list+16], ebx + jne .error + mov [call_list+16], dword 0 + .end: + xor eax, eax + ret @@ -135,11 +135,11 @@ remove_timercall: ; out: nothing ; ;--------------------------------------------; delay: - mov [timer_wait], ecx ; mov value to "timer" - .loop: - cmp [timer_wait], 0 - jne .loop - ret + mov [timer_wait], ecx ; mov value to "timer" + .loop: + cmp [timer_wait], 0 + jne .loop + ret @@ -153,9 +153,9 @@ delay: ; out: ecx = pointer to counter ; ;--------------------------------------------; active_delay: - mov [timer_wait], ecx ; mov value to "timer" - mov ecx, timer_wait ; let caller check value - ret + mov [timer_wait], ecx ; mov value to "timer" + mov ecx, timer_wait ; let caller check value + ret @@ -163,12 +163,12 @@ active_delay: ; set PIT to 100Hz ; ;------------------------------; set_pit_freq: - push eax - mov al, 0x34 ; set to 100Hz, 0x34 = 00110100b - out 0x43, al - mov al, 0x9B ; lsb 1193180 / 1193 - out 0x40, al - mov al, 0x2E ; msb - out 0x40, al - pop eax - ret \ No newline at end of file + push eax + mov al, 0x34 ; set to 100Hz, 0x34 = 00110100b + out 0x43, al + mov al, 0x9B ; lsb 1193180 / 1193 + out 0x40, al + mov al, 0x2E ; msb + out 0x40, al + pop eax + ret \ No newline at end of file diff --git a/kernel/int/idt.asm b/kernel/int/idt.asm index 5b4a8d8..c6b2841 100644 --- a/kernel/int/idt.asm +++ b/kernel/int/idt.asm @@ -1,11 +1,25 @@ ;----------------------------------------------------------; -; BOS kernel Christoffer Bubach, 2003-2005. ; +; BOS kernel Christoffer Bubach, 2003-2015. ; ;----------------------------------------------------------; ; ; -; set/modify IDT entries ; +; Set/modify IDT entries ; ; ; ;----------------------------------------------------------; +;-----------------------------------------------------; +; ; +; IDT entry structure ; +; ; +; 16bit - entry offset bits 0..15 ; +; 16bit - code segment selector in GDT or LDT ; +; 8bit - unused, set to 0 ; +; 8bit - type and attributes ; +; - 0xE = 32bit intterrupt ; +; - 0x8 = Present bit = 1 ; +; 16bit - entry offset bits 16..31 ; +; ; +; middle section for code segment 08 = 0x8E000008 ; +;-----------------------------------------------------; ;--------------------------------------------------; @@ -15,24 +29,29 @@ init_idt: push eax push ecx + push edi + xor edi, edi xor ecx, ecx - .l1: - mov eax, esi ; loop full IDT and - mov [(0x6c00+ecx)], ax ; set to one ISR - add ecx, 2 + add edi, [idtr.address] + .l1: ; loop full IDT table + mov eax, esi + mov word [edi], ax ; set handler lower offset + add edi, 2 - mov dword [(0x6c00+ecx)], 0x8E000008 ; 0x6c00 is where - add ecx, 4 ; we put the IDT + mov dword [edi], 0x8E000008 ; set IDT segment and attributes + add edi, 4 mov eax, esi shr eax, 16 - mov [(0x6c00+ecx)], ax - add ecx, 2 + mov word [edi], ax ; set handler high offset + add edi, 2 - cmp ecx, 0x800 ; 256 ints - jb .l1 ; * 8 bytes each + add cx, 8 ; 8byte * + cmp cx, word [idtr.size] ; 256 ints + jb .l1 ; = done? + pop edi pop ecx pop eax ret @@ -45,30 +64,30 @@ init_idt: ; edi = int function pointer ; ;--------------------------------------; set_int: - push eax - push ecx + push eax + push ecx - mov al, 8 ; 8 bytes for each int - mul cl ; cl * al = ax - movzx ecx, ax ; ecx = IDT offset - shr ecx, 1 ; 1/2 for dword list - mov dword [(idt_list+ecx)], edi ; add to dword int list - movzx ecx, ax ; ecx = IDT offset + mov al, 8 ; 8 bytes for each int + mul cl ; cl * al = ax + movzx ecx, ax ; ecx = IDT offset + shr ecx, 1 ; 1/2 for dword list + mov dword [(idt_list+ecx)], edi ; add to dword int list + movzx ecx, ax ; ecx = IDT offset - mov eax, edi - mov [(0x6c00+ecx)], ax - add ecx, 2 + mov eax, edi + mov [(0x6c00+ecx)], ax + add ecx, 2 - mov dword [(0x6c00+ecx)], 0x8E000008 - add ecx, 4 + mov dword [(0x6c00+ecx)], 0x8E000008 + add ecx, 4 - mov eax, edi - shr eax, 16 - mov [(0x6c00+ecx)], ax + mov eax, edi + shr eax, 16 + mov [(0x6c00+ecx)], ax - pop ecx - pop eax - ret + pop ecx + pop eax + ret @@ -78,15 +97,15 @@ set_int: ; out: esi = address or 0 if none present ; ;------------------------------------------------; get_int: - push eax + push eax - mov eax, 4 ; 4 bytes for each address - mul cl ; cl * al = ax - mov esi, idt_list - add esi, eax + mov eax, 4 ; 4 bytes for each address + mul cl ; cl * al = ax + mov esi, idt_list + add esi, eax - pop eax - ret + pop eax + ret @@ -96,24 +115,24 @@ get_int: ; in: esi = pointer to int list ; ;----------------------------------------; set_idt_list: - push eax - push edi - - xor ecx, ecx - .l1: - lodsd - or eax, eax - jz .next - mov edi, eax - call set_int - .next: - inc ecx - cmp ecx, 0x100 - jb .l1 - - pop edi - pop eax - ret + push eax + push edi + + xor ecx, ecx + .l1: + lodsd + or eax, eax + jz .next + mov edi, eax + call set_int + .next: + inc ecx + cmp ecx, 0x100 + jb .l1 + + pop edi + pop eax + ret diff --git a/kernel/kernel.sys b/kernel/kernel.sys index b8bafea997b08be7b850166e3b375fe2c526fce1..eaa01f50c5327cb0da08fcded5e6975e25089bcc 100755 GIT binary patch delta 7787 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 qGws3wdGE}V$!3H3WKmz6AYg(6&3e0F-tU7~( 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 -- 2.52.0