From c22917baab75dfee2893f176deabe02c9fe6a753 Mon Sep 17 00:00:00 2001 From: StjepanBM1 Date: Thu, 1 Jun 2023 21:52:42 +0200 Subject: [PATCH] OS/1 : 4.0.0 --- LICENSE.txt | 0 Makefile | 24 +- README.txt | 11 +- bin/bootld.bin | Bin 0 -> 512 bytes bin/dune.bin | Bin 0 -> 1057 bytes bin/os1.bin | Bin 0 -> 1569 bytes boot/Makefile | 10 + boot/boot16.nasm | 31 +++ boot/lib16.nasm | 41 +++ bootld/Makefile | 13 - bootld/boot16.S | 50 ---- bootld/libb16.S | 61 ----- bootld/link16.ld | 22 -- disk.img | Bin 0 -> 184320 bytes dune/Makefile | 10 + dune/dune16.nasm | 29 ++ dune/ed/ed.nasm | 59 +++++ dune/i286/stdio.inc | 73 +++++ dune/osh/inc/cmd.inc | 26 ++ dune/osh/main16.nasm | 175 ++++++++++++ img/disk.img | Bin 737280 -> 0 bytes kernel/Makefile | 32 --- kernel/home/home_curs.S | 185 ------------- kernel/home/paint.S | 541 -------------------------------------- kernel/home/shell.S | 237 ----------------- kernel/home/wind.S | 235 ----------------- kernel/home/write.S | 69 ----- kernel/io/delays.S | 30 --- kernel/io/panic.S | 179 ------------- kernel/io/wk_reb.S | 12 - kernel/kern16.S | 39 --- kernel/link16.ld | 22 -- kernel/pinb/curs/curs.S | 75 ------ kernel/pinb/main.S | 26 -- kernel/pinb/screen/base.S | 35 --- kernel/pinb/topb.S | 21 -- kernel/text/write.S | 101 ------- obj/boot16.bin | Bin 512 -> 0 bytes obj/kern16.bin | Bin 7746 -> 0 bytes obj/os1-300.bin | Bin 8258 -> 0 bytes 40 files changed, 469 insertions(+), 2005 deletions(-) create mode 100644 LICENSE.txt create mode 100644 bin/bootld.bin create mode 100644 bin/dune.bin create mode 100644 bin/os1.bin create mode 100644 boot/Makefile create mode 100644 boot/boot16.nasm create mode 100644 boot/lib16.nasm delete mode 100644 bootld/Makefile delete mode 100644 bootld/boot16.S delete mode 100644 bootld/libb16.S delete mode 100644 bootld/link16.ld create mode 100644 disk.img create mode 100644 dune/Makefile create mode 100644 dune/dune16.nasm create mode 100644 dune/ed/ed.nasm create mode 100644 dune/i286/stdio.inc create mode 100644 dune/osh/inc/cmd.inc create mode 100644 dune/osh/main16.nasm delete mode 100644 img/disk.img delete mode 100644 kernel/Makefile delete mode 100644 kernel/home/home_curs.S delete mode 100644 kernel/home/paint.S delete mode 100644 kernel/home/shell.S delete mode 100644 kernel/home/wind.S delete mode 100644 kernel/home/write.S delete mode 100644 kernel/io/delays.S delete mode 100644 kernel/io/panic.S delete mode 100644 kernel/io/wk_reb.S delete mode 100644 kernel/kern16.S delete mode 100644 kernel/link16.ld delete mode 100644 kernel/pinb/curs/curs.S delete mode 100644 kernel/pinb/main.S delete mode 100644 kernel/pinb/screen/base.S delete mode 100644 kernel/pinb/topb.S delete mode 100644 kernel/text/write.S delete mode 100755 obj/boot16.bin delete mode 100755 obj/kern16.bin delete mode 100644 obj/os1-300.bin diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..e69de29 diff --git a/Makefile b/Makefile index 7c526c7..8061626 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,19 @@ -all: boot kern bin disk run +all: bootld kernel disk run -boot: - make -C bootld +bootld: + make -C boot -kern: - make -C kernel -bin: - cat obj/boot16.bin obj/kern16.bin > obj/os1-300.bin +kernel: + make -C dune disk: - dd if=/dev/zero of=img/disk.img bs=512 count=1440 - dd if=obj/os1-300.bin of=img/disk.img conv=notrunc + cat bin/bootld.bin bin/dune.bin > bin/os1.bin + dd if=/dev/zero of=disk.img bs=512 count=360 + dd if=bin/os1.bin of=disk.img conv=notrunc run: - qemu-system-i386 -fda img/disk.img + qemu-system-i386 -fda disk.img clean: - make -C bootld clean - make -C kernel clean - rm obj/* - rm img/* + rm disk.img bin/*.bin diff --git a/README.txt b/README.txt index 4bac505..1ab608d 100644 --- a/README.txt +++ b/README.txt @@ -1,10 +1,9 @@ - Operating System One -====================================================== + Operating System/1 +================================== - Operating System One (shortened to OS/1) is + Operating System/1 (shortened to OS/1) is a simple 16-bit operating system written in - assembly under a cross-compiled GNU Assembler - for the Intel i386 CPU. + assembly using NASM for the Intel i286 CPU. To compile OS/1 just run : `make` in the root of the directory. @@ -13,5 +12,5 @@ Github repository. List of software needed to build OS/1 : - * i386-elf GNU Binutils + * NASM * QEMU (or any other emulator) diff --git a/bin/bootld.bin b/bin/bootld.bin new file mode 100644 index 0000000000000000000000000000000000000000..34209e96d7b7d139ff72012c0dacdddf2ea8253b GIT binary patch literal 512 zcmaEzw1(qA3ELLFvjVTb9^S&VL18yT-ByN;OxqZ`#0+cB3KuaR-e*+v;>Q0S3=C(* z&Pp=4WEN*D6s0DnD5Mq@!|$ zbN~(7%TUw#W?y~Hi~j%nmejoH{QqLo|Cf!7yj=bTsYQt;nR)37!Ii}&sk!=w3Sp^5 n#hLke3MP66dIr2)48bLdMPL>F!TN@JdU`;iQ9zXt2wepL^4Ljl literal 0 HcmV?d00001 diff --git a/bin/dune.bin b/bin/dune.bin new file mode 100644 index 0000000000000000000000000000000000000000..3198f76ef9573e5f0e1443dc0d9a9de43e2b7b61 GIT binary patch literal 1057 zcmd^8&ubGw6dtkG7-$;`O4Sw~c(I^y(_dBzsBO|BiY>+-JZ_tbS(@zD-PyE7*`%!p zTl7$Gl^*LV1Ey3rDJe>og@Ol_o(z3$!B}D$9 zEDeijAclDv;V>dtAt;XHD1li#G8E$lk#YRr>lh$_PAMMe#W08xfrzAv;VL&no&PF3 zJwsULi6Gv9(5OOi{FDz8End#c!EFfiT?xVIQTwz{qopFfjLdT- zeJM#l7tOYkzL2DAMe}5dTTQbW@w-T^zlt=bwoBxPGca>I%htElHX>ho-t0p=tLf@_ zm*JTQwwblw&!ag8Rk6^`rc2L_(ed4@{YObNV{n&chs1bfIpd0#Ki>12p&5#HKs|XTdS+{gG0|m zJ(!?~-jp2tSrEb=vN~!)v@_D8s0;`mR6H#UQp04~2nt4~)4uNYBI?bHU_(>yeZ2a* zy59G_a_6751zwY{D>jthIr({GFiEVN#b~YoKbf{ND(OpD%%MEml zmR`;G1rW;D-6l8cQ3P+CpwYe{oT+x}a))JawUm(xN+0wrY+6C?bz8GjqQ@~!J`dV53g!|Vb-<~UbA~wdFH({>wHp!(Pi?a-lvg7 z4^FY{@epGxhnkqib?S^I zp1bwOFZtlqNlQG&WF$z2EOFOmM}55864zaJ$Pdq1;+o51et66hBQ9I%hl7?l=dy+N zNLFli-pkgF9*1E|Enn0U=4*4a z9{Zzv@dQxCDE8P%N*M`sTin f1guHnPPMVQX)SKuZ)%#~L{)=mTO87Qk|M=N)~BGW literal 0 HcmV?d00001 diff --git a/boot/Makefile b/boot/Makefile new file mode 100644 index 0000000..eeb8166 --- /dev/null +++ b/boot/Makefile @@ -0,0 +1,10 @@ + +NASM := nasm -f bin + +override BOOT := bootld.bin + +.PHONY: all +all: $(BOOT) + +$(BOOT): + $(NASM) boot16.nasm -o ../bin/$(BOOT) diff --git a/boot/boot16.nasm b/boot/boot16.nasm new file mode 100644 index 0000000..0c19e00 --- /dev/null +++ b/boot/boot16.nasm @@ -0,0 +1,31 @@ + + org 0x7c00 ; Start @ 0x0000:0x7c00 + cpu 286 ; Target 80286 CPU + bits 16 ; Generate 16-bit code + jmp _start ; Skip to _start + + ; Include bootloader lib. + %include "lib16.nasm" + + _start: ; Main bootloader func. + mov [bootd],dl ; Boot dev. value + + mov bp, 0x7c00 + mov sp, bp + + mov si, msg_s ; Print start message + call _putsb + + mov si, msg_l ; Print loading message + call _putsb + + call disk_read ; Read disk function + + jmp KERNEL ; Jump to the kernel addr. + + ; Strings + msg_s: db 13,10,"Operating System/1 Version 4.0.0",13,10,0 + msg_l: db "Starting OS/1...",13,10,0 + + times 510-($-$$) db 0 ; Bootsect. padding + dw 0xaa55 ; Boot sig. diff --git a/boot/lib16.nasm b/boot/lib16.nasm new file mode 100644 index 0000000..f0ee34d --- /dev/null +++ b/boot/lib16.nasm @@ -0,0 +1,41 @@ + + _putsb: ; Print out a string + lodsb + or al, al + jz .done + + mov ah, 0x0e + int 0x10 + + jmp _putsb + + .done: + ret + + disk_read: ; Read 0xff sectors from the disk + mov ah, 2 + mov al, 32 + mov bx, KERNEL + mov ch, 0x00 + mov cl, 0x02 + mov dh, 0x00 + mov dl, [bootd] + + int 0x13 + + jc .fail ; Jump to the fail if error c. present + + ret + + .fail: + mov si, msg_de ; Print out the error msg. + call _putsb + + mov ax, 0x00 + int 0x16 ; Wait for input + int 0x19 ; Reboot + + ; Varaibles + bootd: db 0 + KERNEL equ 0x7e00 + msg_de: db "Disk read error occurred",13,10,"Press any key to reboot",0 diff --git a/bootld/Makefile b/bootld/Makefile deleted file mode 100644 index f07e075..0000000 --- a/bootld/Makefile +++ /dev/null @@ -1,13 +0,0 @@ - -AS=i386-elf-as -LD=i386-elf-ld -LF=-Tlink16.ld *.o -o ../obj/boot16.bin - -all: - $(AS) boot16.S -o boot16.o - $(AS) libb16.S -o libb16.o - - $(LD) $(LF) - -clean: - rm *.o diff --git a/bootld/boot16.S b/bootld/boot16.S deleted file mode 100644 index 1b35185..0000000 --- a/bootld/boot16.S +++ /dev/null @@ -1,50 +0,0 @@ - - .section .text.boot - .global _boot16 - .code16 - - _boot16: - xor %ax, %ax - mov %ax, %ds - mov %ax, %ss - mov $_boot16,%sp - cld - - mov $0x03, %ax - int $0x10 - - mov $0x1003,%ax - mov $0x00, %bx - int $0x10 - - mov $0x11, %ah - mov $0x11, %al - int $0x10 - - mov $msg0, %si - call puts16 - - call delay - - mov $msg1, %si - call puts16 - - call delay - - mov $msg2, %si - call puts16 - - call delay - call delay - - call disk_read - - jmp KERN - - 1: cli - jmp 1b - - .section .rodata - msg0: .asciz " === Operating System One ... Version 3.0.0 === \r\n" - msg1: .asciz "\r\n {0} : Starting the system disk..." - msg2: .asciz "\r\n {1} : Reading the disk..." diff --git a/bootld/libb16.S b/bootld/libb16.S deleted file mode 100644 index b3c1c9d..0000000 --- a/bootld/libb16.S +++ /dev/null @@ -1,61 +0,0 @@ - - .section .text - .global puts16 - .global delay - .global disk_read - .global KERN - .set KERN, 0x7e00 - .code16 - - puts16: - lodsb - - or %al, %al - jz .done - - mov $0x0e, %ah - mov $0x00, %bh - int $0x10 - - jmp puts16 - - .done: - ret - - delay: - mov $0x0f, %cx - mov $0x4240, %dx - mov $0x86, %ah - int $0x15 - ret - - disk_read: - mov $0x02, %ah - mov $0x7e00, %bx - mov $65, %al - mov (BOOT), %dl - mov $0x00, %ch - mov $0x00, %dh - mov $0x02, %cl - int $0x13 - - jc disk_fail - - ret - - disk_fail: - mov $err0, %si - call puts16 - - mov $0x00, %ah - int $0x16 - - int $0x19 - - .halt: - jmp .halt - -# .section .data - BOOT: .byte 0 - .section .rodata - err0: .asciz "\r\n Error {1} : Failed to read the system disk | Any key to restart..." diff --git a/bootld/link16.ld b/bootld/link16.ld deleted file mode 100644 index dcf1688..0000000 --- a/bootld/link16.ld +++ /dev/null @@ -1,22 +0,0 @@ - -OUTPUT_FORMAT(binary); -ENTRY(_boot16); - -SECTIONS -{ - . = 0x7c00; - .text : SUBALIGN(0) { - *(.text.boot); - *(.text) - } - - .rodata : SUBALIGN(0) { *(.rodata) } - .data : SUBALIGN(0) { *(.data) } - .sig : AT(0x7DFE) { SHORT(0xaa55); } - - /DISCARD/ : { - *(.comment); - *(.note*) - } - -} diff --git a/disk.img b/disk.img new file mode 100644 index 0000000000000000000000000000000000000000..4a7a18f65a148ac21d8f5f0841174bdb1c35288b GIT binary patch literal 184320 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 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 g5FkK+009C72oNAZfB*pk1PBlyK!5;&50b$D0VI~qo&W#< diff --git a/kernel/Makefile b/kernel/Makefile deleted file mode 100644 index 7d76b42..0000000 --- a/kernel/Makefile +++ /dev/null @@ -1,32 +0,0 @@ - -AS=i386-elf-as -LD=i386-elf-ld -LF=-Tlink16.ld *.o -o ../obj/kern16.bin - -all: - # Main kernel - $(AS) kern16.S -o kern16.o - $(AS) text/write.S -o text.o - $(AS) io/panic.S -o panic.o - - # IO Lib. - $(AS) io/delays.S -o delay.o - $(AS) io/wk_reb.S -o wk_reb.o - - # PinBoard Env. - $(AS) pinb/main.S -o main.o - $(AS) pinb/screen/base.S -o base.o - $(AS) pinb/curs/curs.S -o curs.o - $(AS) pinb/topb.S -o tobp.o - - # Home applications - $(AS) home/wind.S -o wind_h.o - $(AS) home/home_curs.S -o home_curs.o - $(AS) home/shell.S -o shell.o - $(AS) home/paint.S -o paint.o - $(AS) home/write.S -o writet.o - - $(LD) $(LF) - -clean: - rm *.o diff --git a/kernel/home/home_curs.S b/kernel/home/home_curs.S deleted file mode 100644 index 4fd16fd..0000000 --- a/kernel/home/home_curs.S +++ /dev/null @@ -1,185 +0,0 @@ - - .section .text - .global home_curs - .global hcloop - .code16 - - home_curs: - mov $2, %cl - mov $2, %bl - - hcloop: - mov $0x02, %ah - mov %cl, %dh - mov %bl, %dl - int $0x10 - - mov $0x00, %ah - int $0x16 - - cmp $0x48, %ah - je .up - - cmp $0x50, %ah - je .dw - - cmp $0x4B, %ah - je .lt - - cmp $0x4D, %ah - je .rt - - cmp $0x20, %al - je .cc - - jmp hcloop - - .up: - cmp $0x00, %cl - je hcloop - - sub $1, %cl - jmp hcloop - - .dw: - cmp $27, %cl - je hcloop - - add $1, %cl - jmp hcloop - - .lt: - cmp $0x00, %bl - je hcloop - - sub $1, %bl - jmp hcloop - - .rt: - cmp $79, %bl - je hcloop - - add $1, %bl - jmp hcloop - - .cc: - cmp $0x02, %dl - je .home_b - - cmp $4, %dl - je .shell - cmp $5, %dl - je .shell - cmp $6, %dl - je .shell - cmp $7, %dl - je .shell - cmp $8, %dl - je .shell - cmp $9, %dl - je .shell - cmp $10, %dl - je .shell - - cmp $24, %dl - je .paint - cmp $25, %dl - je .paint - cmp $26, %dl - je .paint - cmp $27, %dl - je .paint - cmp $28, %dl - je .paint - cmp $29, %dl - je .paint - cmp $30, %dl - je .paint - - cmp $34, %dl - je .write - cmp $35, %dl - je .write - cmp $36, %dl - je .write - cmp $37, %dl - je .write - cmp $38, %dl - je .paint - cmp $39, %dl - je .write - cmp $40, %dl - je .write - - jmp hcloop - - .home_b: - cmp $0x02, %dh - je .close - - jmp hcloop - - .paint: - cmp $0x02, %dh - je paint - cmp $0x03, %dh - je paint - cmp $0x04, %dh - je paint - cmp $0x05, %dh - je paint - cmp $0x06, %dh - je paint - - jmp hcloop - - .shell: - cmp $0x02, %dh - je shell - cmp $0x03, %dh - je shell - cmp $0x04, %dh - je shell - cmp $0x05, %dh - je shell - cmp $0x06, %dh - je shell - - jmp hcloop - - .write: - cmp $0x02, %dh - je writet - cmp $0x03, %dh - je writet - cmp $0x04, %dh - je writet - cmp $0x05, %dh - je writet - cmp $0x06, %dh - je writet - - jmp hcloop - - .close: - mov $0x02, %ah - mov $0x1, %dh - mov $0x2, %dl - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1F, %bl - mov $800, %cx - int $0x10 - - mov $0x02, %ah - mov $0x2, %dh - mov $0x2, %dl - int $0x10 - - mov $0x1, %bl - mov $0x1, %cl - - jmp cloop diff --git a/kernel/home/paint.S b/kernel/home/paint.S deleted file mode 100644 index 2996036..0000000 --- a/kernel/home/paint.S +++ /dev/null @@ -1,541 +0,0 @@ - .section .text - .global paint - .code16 - - - paint: - mov $0x02, %ah - mov $0x00, %dx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1F, %bl - mov $2240, %cx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0xF1, %bl - mov $80, %cx - int $0x10 - - mov $titlep,%si - call write - - inc %dh - - .canvas: - cmp $26, %dh - je paint_curs - - mov $0x02, %ah - inc %dh - mov $0x01, %dl - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0xF0, %bl - mov $78, %cx - int $0x10 - - jmp .canvas - - /*-------------------------*/ - /* Cursor control */ - paint_curs: - xor %bx, %bx - xor %cx, %cx - - mov $0x01, %ah - mov $0x07, %cx - int $0x10 - - mov $0x01, %bl - mov $0x02, %cl - - .curs_loop: - mov $0x02, %ah - mov %cl, %dh - mov %bl, %dl - int $0x10 - - mov $0x00, %ah - int $0x16 - - cmp $0x48, %ah - je .up - - cmp $0x50, %ah - je .dw - - cmp $0x4B, %ah - je .lt - - cmp $0x4D, %ah - je .rt - - cmpb %al, place - je .place - - cmpb %al, erase - je .erase - - cmpb %al, text - je .textp - - cmpb %al, exit - je .exit - - cmpb %al, red - je .red - - cmpb %al, blue - je .blue - - cmpb %al, green - je .green - - cmpb %al, brown - je .brown - - cmpb %al, magen - je .magen - - cmpb %al, cyan - je .cyan - - cmpb %al, 0x37 - je .lblue - - cmpb %al, lgren - je .lgren - - cmpb %al, yellw - je .yellw - - cmpb %al, click - je .click - - jmp .curs_loop - - # Navigation - .up: - cmp $0, %cl - je .curs_loop - - sub $1, %cl - jmp .curs_loop - - .dw: - cmp $26, %cl - je .curs_loop - - add $1, %cl - jmp .curs_loop - - .lt: - cmp $0, %bl - je .curs_loop - - sub $1, %bl - jmp .curs_loop - - .rt: - cmp $78,%bl - je .curs_loop - - add $1, %bl - jmp .curs_loop - - # Place - .place: - cmp $0x00, %bl - jg .placey - - jmp .curs_loop - - .placey: - cmp $0x01, %cl - jg .placeyy - - jmp .curs_loop - - .placeyy: - mov $0x0e, %ah - mov $219, %al - int $0x10 - - jmp .curs_loop - - jmp .curs_loop - - .erase: - cmp $0x00, %bl - jg .erasey - - jmp .curs_loop - - .erasey: - cmp $0x01, %cl - jg .eraseyy - - jmp .curs_loop - - .eraseyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0xF0, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - jmp .curs_loop - - .textp: - mov $0x00, %ah - int $0x16 - - cmp %al, text - je .curs_loop - - mov $0x0e, %ah - int $0x10 - - jmp .textp - - # Colors - .red: - cmp $0x00, %bl - jg .redy - - jmp .curs_loop - - .redy: - cmp $0x01, %cl - jg .redyy - - jmp .curs_loop - - .redyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xF4, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .blue: - cmp $0x00, %bl - jg .bluey - - jmp .curs_loop - - .bluey: - cmp $0x01, %cl - jg .blueyy - - jmp .curs_loop - - .blueyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xF1, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .green: - cmp $0x00, %bl - jg .greeny - - jmp .curs_loop - - .greeny: - cmp $0x01, %cl - jg .greenyy - - jmp .curs_loop - - .greenyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xF2, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .brown: - cmp $0x00, %bl - jg .browny - - jmp .curs_loop - - .browny: - cmp $0x01, %cl - jg .brownyy - - jmp .curs_loop - - .brownyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xF6, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .magen: - cmp $0x00, %bl - jg .mageny - - jmp .curs_loop - - .mageny: - cmp $0x01, %cl - jg .magenyy - - jmp .curs_loop - - .magenyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xF5, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .cyan: - cmp $0x00, %bl - jg .cyany - - jmp .curs_loop - - .cyany: - cmp $0x01, %cl - jg .cyanyy - - jmp .curs_loop - - .cyanyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xF3, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .lblue: - cmp $0x00, %bl - jg .lbluey - - jmp .curs_loop - - .lbluey: - cmp $0x01, %cl - jg .lbluey - - jmp .curs_loop - - .lblueyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xBD, %al - mov $0x00, %bh - mov $0xF9, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .lgren: - cmp $0x00, %bl - jg .lgreny - - jmp .curs_loop - - .lgreny: - cmp $0x01, %cl - jg .lgrenyy - - jmp .curs_loop - - .lgrenyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xFA, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - .yellw: - cmp $0x00, %bl - jg .yellwy - - jmp .curs_loop - - .yellwy: - cmp $0x01, %cl - jg .yellwyy - - jmp .curs_loop - - .yellwyy: - push %cx - push %bx - push %dx - - mov $0x09, %ah - mov $0xDB, %al - mov $0x00, %bh - mov $0xFE, %bl - mov $0x1, %cx - int $0x10 - - pop %dx - pop %bx - pop %cx - jmp .curs_loop - - jmp .curs_loop - - # Top bar & exit - .exit: - jmp pmain - - # Click - .click: - cmp $0x00, %dh - je .topb - - jmp .curs_loop - - .topb: - cmp $0x01, %dl - je .exit - - jmp .curs_loop - - jmp .curs_loop - - .section .rodata - titlep: .asciz "\xB3\xFE\xB3 Paint 3.0.0 " - - # Paint keys - ## Defaults - place: .byte 'p' - erase: .byte 'e' - text: .byte '`' - exit: .byte 27 - click: .byte 0x20 - - ## Colors - red: .byte '1' - blue: .byte '2' - green: .byte '3' - brown: .byte '4' - magen: .byte '5' - cyan: .byte '6' - lblue: .byte '7' - lgren: .byte '8' - yellw: .byte '9' diff --git a/kernel/home/shell.S b/kernel/home/shell.S deleted file mode 100644 index 5576523..0000000 --- a/kernel/home/shell.S +++ /dev/null @@ -1,237 +0,0 @@ - - .section .text - .global shell - .code16 - - shell: - mov $0x03, %ax - int $0x10 - - mov $0x1003,%ax - mov $0x00, %bx - int $0x10 - - mov $0x11, %ah - mov $0x11, %al - int $0x10 - - mov $0x01, %ah - mov $0xFF, %cx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1F, %bl - mov $2240, %cx - int $0x10 - - mov $titles,%si - call write - - jmp input - - cli - hlt - - input: - .in_loop: - mov $prompt,%si - call write - - mov $buffer,%di - call get_input - - mov $buffer,%si - cmpb $0x00, (%si) - je .in_loop - - mov $buffer,%si - mov $test_cmd,%di - call strcmp - jc .testc - - mov $buffer,%si - mov $mem_cmd,%di - call strcmp - jc .memc - - mov $buffer,%si - mov $cls_cmd,%di - call strcmp - jc .clear - - mov $buffer,%si - mov $die_cmd,%di - call strcmp - jc .die - - mov $buffer,%si - mov $hlt_cmd,%di - call strcmp - jc .halt - - mov $buffer,%si - mov $shtd_cmd,%di - call strcmp - jc .shtd - - mov $buffer,%si - mov $rebt_cmd,%di - call strcmp - jc .rebt - - mov $buffer,%si - mov $ver_cmd,%di - call strcmp - jc .ver - - mov $error, %si - call write - - jmp .in_loop - - .halt: - cli - hlt - .clear: - mov $0x03, %ax - int $0x10 - - mov $0x1003,%ax - mov $0x00, %bx - int $0x10 - - mov $0x11, %ah - mov $0x11, %al - int $0x10 - - mov $0x01, %ah - mov $0xFF, %cx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1F, %bl - mov $2240, %cx - int $0x10 - jmp input - - .die: - call panic - - .rebt: - int $0x19 - - .ver: - mov $vers, %si - call write - - jmp .in_loop - - .shtd: - .memc: - mov $memm, %si - call write - - xorw %ax, %ax - clc - int $0x12 - - movw %ax, (reg16) - call wregs - - jmp .in_loop - - .testc: - mov $testm, %si - call write - - jmp .in_loop - - get_input: - xor %cl, %cl - - .getin_l: - mov $0x00, %ah - int $0x16 - - cmp $0x08, %al - je .backsp - - cmp $0x0d, %al - je .newl - - cmp $0x3F, %cl - je .getin_l - - mov $0x0e, %ah - int $0x10 - - stosb - inc %cl - jmp .getin_l - - .backsp: - cmp $0x00, %cl - je .getin_l - - dec %di - movb $0x00, (%di) - dec %cl - - mov $0x0e, %ah - mov $0x08, %al - int $0x10 - - mov $0x20, %al - int $0x10 - - mov $0x08, %al - int $0x10 - - jmp .getin_l - - .newl: - mov $0x00, %al - stosb - - mov $0x0e, %ah - mov $0x0d, %al - int $0x10 - - mov $0x0a, %al - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1F, %bl - mov $80, %cx - int $0x10 - - ret - - .section .rodata - titles: .asciz "=== Operating Shell (OSH) v3.0.0 ===\r\n" - prompt: .asciz ">" - - # Msgs. - testm: .asciz " test\r\n" - error: .asciz " Command not found\r\n" - memm: .asciz " Free memory (low memory, hex.) : $" - vers: .asciz " Operating System One v3.0.0 \"Oklahoma\" | OSH 3.0.0\r\n" - - # Commands - test_cmd: .asciz "test" - mem_cmd: .asciz "mem" - cls_cmd: .asciz "clear" - ver_cmd: .asciz "ver" - die_cmd: .asciz "die" - hlt_cmd: .asciz "hlt" - rebt_cmd: .asciz "reboot" - shtd_cmd: .asciz "shutdown" - - .section .data - buffer: .asciz "0000000000000000000000000000000000000000000000000000000000000000" diff --git a/kernel/home/wind.S b/kernel/home/wind.S deleted file mode 100644 index 06a3b6e..0000000 --- a/kernel/home/wind.S +++ /dev/null @@ -1,235 +0,0 @@ - - .section .text - .global home_wind - .code16 - - home_wind: - mov $0x02, %ah - mov $0x2, %dh - mov $0x1, %dl - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0xF1, %bl - mov $43, %cx - int $0x10 - mov $titlew,%si - call write - - .border1: - mov $0x02, %ah - inc %dh - mov $0x01, %dl - int $0x10 - - mov $0x09, %ah - mov $0xBA, %al - mov $0x1F, %bl - mov $1, %cx - int $0x10 - - cmp $7, %dh - je .after - - jmp .border1 - - .after: - mov $0x02, %ah - mov $0x2, %dh - mov $0x1, %dl - int $0x10 - - jmp .border2 - - .border2: - mov $0x02, %ah - inc %dh - mov $43, %dl - int $0x10 - - mov $0x09, %ah - mov $0xBA, %al - mov $0x1F, %bl - mov $1, %cx - int $0x10 - - cmp $7, %dh - je .shell - - jmp .border2 - - .shell: - mov $0x02, %ah - mov $0x3, %dh - mov $0x3, %dl - int $0x10 - mov $shell1,%si - call write - - mov $0x02, %ah - mov $0x4, %dh - mov $0x3, %dl - int $0x10 - mov $shell2,%si - call write - - mov $0x02, %ah - mov $0x5, %dh - mov $0x3, %dl - int $0x10 - mov $shell3,%si - call write - - mov $0x02, %ah - mov $0x6, %dh - mov $0x3, %dl - int $0x10 - mov $shell4,%si - call write - - mov $0x02, %ah - mov $0x8, %dh - mov $0x1, %dl - int $0x10 - mov $wind_b,%si - call write - - .games: - mov $0x02, %ah - mov $0x3, %dh - mov $0xD, %dl - int $0x10 - mov $colle1,%si - call write - - mov $0x02, %ah - mov $0x4, %dh - mov $0xD, %dl - int $0x10 - mov $colle2,%si - call write - - mov $0x02, %ah - mov $0x5, %dh - mov $0xD, %dl - int $0x10 - mov $colle3,%si - call write - - mov $0x02, %ah - mov $0x6, %dh - mov $0xD, %dl - int $0x10 - mov $colle4,%si - call write - - mov $0x02, %ah - mov $0x8, %dh - mov $0x1, %dl - int $0x10 - mov $wind_b,%si - call write - - .paint: - mov $0x02, %ah - mov $0x3, %dh - mov $0x17, %dl - int $0x10 - mov $paint1,%si - call write - - mov $0x02, %ah - mov $0x4, %dh - mov $0x17, %dl - int $0x10 - mov $paint2,%si - call write - - mov $0x02, %ah - mov $0x5, %dh - mov $0x17, %dl - int $0x10 - mov $paint3,%si - call write - - mov $0x02, %ah - mov $0x6, %dh - mov $0x17, %dl - int $0x10 - mov $paint4,%si - call write - - mov $0x02, %ah - mov $0x8, %dh - mov $0x1, %dl - int $0x10 - mov $wind_b,%si - call write - - .write: - mov $0x02, %ah - mov $0x3, %dh - mov $0x21, %dl - int $0x10 - mov $write1,%si - call write - - mov $0x02, %ah - mov $0x4, %dh - mov $0x21, %dl - int $0x10 - mov $write2,%si - call write - - mov $0x02, %ah - mov $0x5, %dh - mov $0x21, %dl - int $0x10 - mov $write3,%si - call write - - mov $0x02, %ah - mov $0x6, %dh - mov $0x21, %dl - int $0x10 - mov $write4,%si - call write - - mov $0x02, %ah - mov $0x8, %dh - mov $0x1, %dl - int $0x10 - mov $wind_b,%si - call write - - jmp home_curs - - .section .rodata - # Window - titlew: .asciz "\xB3\xFE\xB3 Home " - wind_b: .asciz "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC" - - # Collections (Directory) icon - colle1: .asciz " \xDA\xC4\xC4\xC4\xC4\xC4\xBF" - colle2: .asciz " \xB3 \xB3" - colle3: .asciz " \xC0\xC4\xC4\xC4\xC4\xC4\xD9" - colle4: .asciz " Blank" - - # Shell icon - shell1: .asciz " \xDA\xC4\xC4\xC4\xC4\xC4\xBF" - shell2: .asciz " \xB3> \xB3" - shell3: .asciz " \xC0\xC4\xC4\xC4\xC4\xC4\xD9" - shell4: .asciz " Shell" - - # Paint icon - paint1: .asciz " \xDA\xC4\xC4\xC4\xC4\xC4\xBF" - paint2: .asciz " \xB3\xB0\xB1\xDB\xCD\xCD\xB3" - paint3: .asciz " \xC0\xC4\xC4\xC4\xC4\xC4\xD9" - paint4: .asciz " Paint" - - # Write icon - write1: .asciz " \xDA\xC4\xC4\xC4\xC4\xC4\xBF" - write2: .asciz " \xB3\Hello\xB3" - write3: .asciz " \xC0\xC4\xC4\xC4\xC4\xC4\xD9" - write4: .asciz " Write" diff --git a/kernel/home/write.S b/kernel/home/write.S deleted file mode 100644 index a72185f..0000000 --- a/kernel/home/write.S +++ /dev/null @@ -1,69 +0,0 @@ - - .section .text - .global writet - .code16 - - writet: - mov $0x02, %ah - mov $0x00, %dx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1E, %bl - mov $2240, %cx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0xF1, %bl - mov $80, %cx - int $0x10 - - mov $titlew,%si - call write - - mov $0x02, %ah - inc %dh - mov $0x00, %dl - int $0x10 - - .textin: - .textinl: - mov $0x00, %ah - int $0x16 - - cmp $0x0D, %al - je .return - - cmpb %al, exitk - je pmain - - mov $0x0e, %ah - int $0x10 - - jmp .textinl - - .return: - mov $0x0e, %ah - mov $0x0d, %al - int $0x10 - - mov $0x0a, %al - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1E, %bl - mov $80, %cx - int $0x10 - - jmp .textin - - .section .rodata - titlew: .asciz " Write 2.5.0 \xB3 ESC to exit \xB3 No FS support (sucks to suck) \xB3" - exitk: .byte 27 - diff --git a/kernel/io/delays.S b/kernel/io/delays.S deleted file mode 100644 index d1cdba3..0000000 --- a/kernel/io/delays.S +++ /dev/null @@ -1,30 +0,0 @@ - - .section .text - .global delay1 - .global delay5 - .global delay10 - .code16 - - # One second delay - delay1: - mov $0x86, %ah - mov $0x0f, %cx - mov $0x4240, %dx - int $0x15 - ret - - # 5 second delay - delay5: - mov $0x86, %ah - mov $0x49, %cx - mov $0x4840, %dx - int $0x15 - ret - - # 10 second delay - delay10: - mov $0x86, %ah - mov $0x98, %cx - mov $0x9680, %dx - int $0x15 - ret diff --git a/kernel/io/panic.S b/kernel/io/panic.S deleted file mode 100644 index 0e41f81..0000000 --- a/kernel/io/panic.S +++ /dev/null @@ -1,179 +0,0 @@ - - .section .text - .global panic - .global id - .code16 - - panic: - - .screen: - mov $0x03, %ax - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x0C, %bl - mov $2240, %cx - int $0x10 - - mov $0x09, %ah - mov $0x2A, %al - mov $0x0C, %bl - mov $80, %cx - int $0x10 - - mov $0x02, %ah - mov $1, %dh - mov $0, %dl - int $0x10 - - .info: - - #mov $0xFF, id - - mov $pmsg1, %si - call write - - mov $pmsg2, %si - call write - - mov $pmsg3, %si - call write - - mov $ax_s, %si - call write - movw %ax, (reg16) - call wregs - - mov $bx_s, %si - call write - movw %bx, (reg16) - call wregs - - mov $cx_s, %si - call write - movw %cx, (reg16) - call wregs - - mov $dx_s, %si - call write - movw %dx, (reg16) - call wregs - - ############################ - mov $0x02, %ah - mov $6, %dh - mov $14, %dl - int $0x10 - mov $sp_s, %si - call write - movw %sp, (reg16) - call wregs - - mov $0x02, %ah - mov $7, %dh - mov $14, %dl - int $0x10 - mov $bp_s, %si - call write - movw %bp, (reg16) - call wregs - - mov $0x02, %ah - mov $8, %dh - mov $14, %dl - int $0x10 - mov $si_s, %si - call write - movw %si, (reg16) - call wregs - - mov $0x02, %ah - mov $9, %dh - mov $14, %dl - int $0x10 - mov $di_s, %si - call write - movw %di, (reg16) - call wregs - - ############################ - mov $0x02, %ah - mov $6, %dh - mov $28, %dl - int $0x10 - mov $cs_s, %si - call write - movw %cs, (reg16) - call wregs - - mov $0x02, %ah - mov $7, %dh - mov $28, %dl - int $0x10 - mov $ds_s, %si - call write - movw %ds, (reg16) - call wregs - - mov $0x02, %ah - mov $8, %dh - mov $28, %dl - int $0x10 - mov $es_s, %si - call write - movw %es, (reg16) - call wregs - - mov $0x02, %ah - mov $9, %dh - mov $28, %dl - int $0x10 - mov $ss_s, %si - call write - movw %ss, (reg16) - call wregs - - mov $pmsg4, %si - call write - - mov $0x01, %ah - mov $0x2607,%cx - int $0x10 - - mov $0x02, %ah - mov $12, %dh - mov $0, %dl - int $0x10 - mov $0x09, %ah - mov $0x2A, %al - mov $0x0C, %bl - mov $80, %cx - int $0x10 - - call waitk_reb - - .section .rodata - # Registers - ax_s: .asciz " AX :: " - bx_s: .asciz " BX :: " - cx_s: .asciz " CX :: " - dx_s: .asciz " DX :: " - - sp_s: .asciz " SP :: " - bp_s: .asciz " BP :: " - si_s: .asciz " SI :: " - di_s: .asciz " DI :: " - - cs_s: .asciz " CS :: " - ds_s: .asciz " DS :: " - es_s: .asciz " ES :: " - ss_s: .asciz " SS :: " - id_s: .asciz " ID :: " - - # Msgs - pmsg1: .asciz " \xAF System Panic \xAE\r\n\r\n" - pmsg2: .asciz " The operating system kernel has experienced a fatal error.\r\n" - pmsg3: .asciz " Registers dumped.\r\n\n" - pmsg4: .asciz "\r\n Press any key to restart" diff --git a/kernel/io/wk_reb.S b/kernel/io/wk_reb.S deleted file mode 100644 index 6fbec13..0000000 --- a/kernel/io/wk_reb.S +++ /dev/null @@ -1,12 +0,0 @@ - - .section .text - .global waitk_reb - .code16 - - waitk_reb: - mov $0x00, %ah - int $0x16 - - int $0x19 - - ret diff --git a/kernel/kern16.S b/kernel/kern16.S deleted file mode 100644 index a9b39f0..0000000 --- a/kernel/kern16.S +++ /dev/null @@ -1,39 +0,0 @@ - - .section .text.kern - .global _kern16 - .code16 - - _kern16: - xor %ax, %ax - mov %ax, %ds - mov %ax, %ss - mov $_kern16,%sp - cld - - #call regd - - mov $msg3, %si - call write - - call delay1 - call delay1 - - mov $msg4, %si - call write - - call delay1 - - mov $msg5, %si - call write - - call delay1 - - jmp pmain - - cli - hlt - - .section .rodata - msg3: .asciz "\r\n {2} : Loading the kernel..." - msg4: .asciz "\r\n {3} : Loading the [PinBoard]..." - msg5: .asciz "\r\n {4} : Starting the [PinBoard].." diff --git a/kernel/link16.ld b/kernel/link16.ld deleted file mode 100644 index 3ab904a..0000000 --- a/kernel/link16.ld +++ /dev/null @@ -1,22 +0,0 @@ - -OUTPUT_FORMAT(binary); -ENTRY(_kern16); - -SECTIONS -{ - . = 0x7e00; - .text : SUBALIGN(0) { - *(.text.kern); - *(.text) - } - - .rodata : SUBALIGN(0) { *(.rodata) } - .data : SUBALIGN(0) { *(.data) } - .sig : AT(0x9c40) { SHORT(0x4241); } - - /DISCARD/ : { - *(.comment); - *(.note*) - } - -} diff --git a/kernel/pinb/curs/curs.S b/kernel/pinb/curs/curs.S deleted file mode 100644 index efc5e31..0000000 --- a/kernel/pinb/curs/curs.S +++ /dev/null @@ -1,75 +0,0 @@ - .section .text - .global curs - .global cloop - .code16 - - curs: - mov $0x01, %ah - mov $0x10, %cx - int $0x10 - - mov $12, %cl - mov $40, %bl - - cloop: - mov $0x02, %ah - mov %cl, %dh - mov %bl, %dl - int $0x10 - - mov $0x00, %ah - int $0x16 - - cmp $0x48, %ah - je .up - - cmp $0x50, %ah - je .dw - - cmp $0x4B, %ah - je .lt - - cmp $0x4D, %ah - je .rt - - cmp $0x20, %al - je .cc - - jmp cloop - - .up: - cmp $0x00, %cl - je cloop - - sub $1, %cl - jmp cloop - - .dw: - cmp $27, %cl - je cloop - - add $1, %cl - jmp cloop - - .lt: - cmp $0x00, %bl - je cloop - - sub $1, %bl - jmp cloop - - .rt: - cmp $79, %bl - je cloop - - add $1, %bl - jmp cloop - - .cc: - cmp $0x00, %cl - je topbm - - jmp cloop - - cli - hlt diff --git a/kernel/pinb/main.S b/kernel/pinb/main.S deleted file mode 100644 index 8559357..0000000 --- a/kernel/pinb/main.S +++ /dev/null @@ -1,26 +0,0 @@ - - .section .text - .global pmain - .code16 - - pmain: - mov $0x03, %ax - int $0x10 - - mov $0x1003,%ax - mov $0x00, %bx - int $0x10 - - mov $0x11, %ah - mov $0x11, %al - int $0x10 - - mov $0x01, %ah - mov $0x10, %cx - int $0x10 - - call bases - call curs - - cli - hlt diff --git a/kernel/pinb/screen/base.S b/kernel/pinb/screen/base.S deleted file mode 100644 index 57112ba..0000000 --- a/kernel/pinb/screen/base.S +++ /dev/null @@ -1,35 +0,0 @@ - - .section .text - .global bases - .code16 - - bases: - mov $0x09, %ah - mov $0x20, %al - mov $0x00, %bh - mov $0x1F, %bl - mov $2240, %cx - int $0x10 - - mov $0x09, %ah - mov $0x20, %al - mov $0xF1, %bl - mov $80, %cx - int $0x10 - - mov $titleb,%si - call write - - mov $0x02, %ah - mov $27, %dh - mov $53, %dl - int $0x10 - - mov $build, %si - call write - - ret - - .section .rodata - titleb: .asciz " Home " - build: .asciz "OS1-$12C-PinBoard-1-GNU_AS" diff --git a/kernel/pinb/topb.S b/kernel/pinb/topb.S deleted file mode 100644 index ed6cef6..0000000 --- a/kernel/pinb/topb.S +++ /dev/null @@ -1,21 +0,0 @@ - - .section .text - .global topbm - .global menul - .global files - .global special - .code16 - topbm: - cmp $0x04, %bl - je menul - cmp $0x05, %bl - je menul - cmp $0x06, %bl - je menul - cmp $0x07, %bl - je menul - - jmp cloop - - menul: - jmp home_wind diff --git a/kernel/text/write.S b/kernel/text/write.S deleted file mode 100644 index 27bcab6..0000000 --- a/kernel/text/write.S +++ /dev/null @@ -1,101 +0,0 @@ - - .section .text - .global write - .global wregs - .global reg16 - .global regd - .global strcmp - .code16 - - write: - lodsb - or %al, %al - jz .done - - mov $0x0e, %ah - mov $0x00, %bh - int $0x10 - - jmp write - - .done: - ret - wregs: - mov $outsr, %di - mov (reg16),%ax - mov $hexs, %si - mov $4, %cx - .hexl: - rol $4, %ax - mov %ax,%bx - and $0x0f,%bx - mov (%bx,%si),%bl - mov %bl,(%di) - - inc %di - dec %cx - jnz .hexl - - mov $outsr, %si - call write - ret - - regd: - mov $regd_s, %si - call write - - movw %ax, (reg16) - call wregs - movw %bx, (reg16) - call wregs - movw %cx, (reg16) - call wregs - movw %dx, (reg16) - call wregs - movw %si, (reg16) - call wregs - movw %di, (reg16) - call wregs - movw %bp, (reg16) - call wregs - movw %sp, (reg16) - call wregs - movw %cs, (reg16) - call wregs - movw %ds, (reg16) - call wregs - movw %es, (reg16) - call wregs - movw %ss, (reg16) - call wregs - - ret - - strcmp: - .str_loop: - mov (%si), %al - mov (%di), %bl - cmp %bl, %al - jne .notequ - - cmp $0x00, %al - je .equs - - inc %di - inc %si - jmp .str_loop - - .notequ: - clc - ret - .equs: - stc - ret - - ret - - .section .data - hexs: .asciz "0123456789ABCDEF" - outsr: .asciz "0000\r\n" - reg16: .word 0 - regd_s: .asciz "\r\n!== Register Dump ==!\r\n" diff --git a/obj/boot16.bin b/obj/boot16.bin deleted file mode 100755 index 0c0b9593891d4edce4ade1d7f40a41ca0252ec63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmXp!(08Nn!XAd2KRcKi&I;^c7TC=Iq_+re5Iifeuc_vRBEt(EhJ9OWUPv&!P-fV7 ztL6ni!wV^f7vc;rXZ-d0?;4H+B^+D$wgdIO{(N{RKf^8ur!8$~MGtRb+Rae6 z!LduMv1Tj7HinH%XN8Lx5AXY4^WyaXEevPH&Pu-i$Dm+qYpdX2kXn>jl9`vT5L{VY zlA5dFpO>njr>Cb7mReMtnV+X%tY@HS09MM&#lXv@P;F4FV5JaTl2`=RRg#gaPz=$T zl3AP$)CpE(2vQW3nwSDI8KeeD(zU24zeu4Pti&xbGbc4gp(J0S2&fpW63H}$8U@F^ VN`>syN{EVLkgXsqhCB#e1prc3cCr8f diff --git a/obj/kern16.bin b/obj/kern16.bin deleted file mode 100755 index 53756db4ad80a524f43fac64a173372e34a1b871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7746 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