Skip to content

Commit a545083

Browse files
committed
add MILESTONE1.md, interrupt set cursor, README.md, fix logo dikit
1 parent d08541f commit a545083

File tree

5 files changed

+75
-32
lines changed

5 files changed

+75
-32
lines changed

MILESTONE1.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Penjelasan Milestone 1 Tugas IF2230 Sistem Operasi
2+
## Cara kerja interrupt pada sistem operasi
3+
Interrupt adalah sinyal yang dikirimkan ke CPU oleh suatu entitas pada komputer sehingga CPU menghentikan seluruh aktivitasnya dan melakukan suatu eksekusi tertentu. Terdapat tiga jenis interrupt yaitu :
4+
### *Hardware interrupt*
5+
>*Hardware interrupt* dikirmkan oleh hardware eksternal sebagai sinyal penanda bahwa kini hardware tersebut membutuhkan perhatian OS. Umumnya interrupt ini dihasilkan oleh I/O *device* seperti *keyboard* ketika menerima ketikan dari pengguna.
6+
### *Software interrupt*
7+
>*software interrupt* dikirimkan oleh suatu *software* ketika *software* tersebut ingin melakukan *system call* yaitu suatu proses yang bertujuan untuk melakukan aksi pada *hardware* komputer dengan bantuan OS.
8+
### *Traps*
9+
>*traps* merupakan suatu *interrupt* yang dihasilkan oleh CPU itu sendiri ketika menemui kondisi *error* seperti *division by zero*.
10+
11+
Untuk dapat melakukan *interrupt* pada sistem operasi, maka digunakanlah fungsi `interrupt` dari `kernel.asm`. Fungsi `interrupt` memiliki 4 parameter yaitu `int number`, `int AX`, `int BX`, `int CX`, `int DX`. Parameter `number` diisi dengan nomor *Interrupt Request*(IRQ) dalam hexadecimal, pada milestone 1 ini kami menggunakan *interrupt* 10 dan *interrupt* 16. Kemudian, parameter `AX`, `BX`, `CX`, `DX` diisi dengan suatu nilai hexadecimal yang ingin dimasukkan ke dalam register terkait agar fungsi dalam interrupt yang terpanggil sesuai.
12+
13+
## Cara kerja kode pada kernel.asm
14+
Berikut ini adalah fungsi-fungsi yang terdapat dalam `kernel.c` dengan penjelasannya.
15+
### makeInterrupt21
16+
> Fungsi ini digunakan untuk melakukan *system call* pada sistem.
17+
### printString
18+
> Fungsi ini digunakan untuk mencetak suatu string ke dalam layar. Parameter dari fungsi ini adalah sebuah string yang akan dicetak. Kemudian untuk mencetak string, dilakukan iterasi per karakter hingga ditemukan *null terminator* untuk dilakukan pencetakan karakter oleh *interrupt* 10 dengan `AH` berisi 0Eh dan `AL` berisi karakter yang ingin ditulis.
19+
### readString
20+
> Fungsi ini digunakan untuk membaca string dari input pengguna melalui *keyboard*. Parameter dari fungsi ini adalah pointer alamat penyimpanan string. Kami membatasi panjangnya string yang dapat dibaca sepanjang 16 karakter sehingga pembacaan karakter dari input pengguna dilakukan hingga diterima input `\r` atau panjang string sudah mencapai 16 karakter. Pembacaan karakter dari *keyboard* pengguna dilakukan dengan *interrupt* 16 dengan AX bernilai 0.
21+
### clear
22+
> Fungsi ini digunakan untuk mengosongkan buffer penyimpanan string dengan cara mengeset tiap elemen array menjadi 0.
23+
### lineLogo
24+
> Fungsi ini digunakan untuk mencetak 1 baris ASCII art logo dengan menggunakan fungsi `putInMemory` untuk mencetak tiap karakter.
25+
### logo
26+
> Fungsi ini digunakan untuk memanggil fungsi lineLogo untuk seluruh baris ASCII art logo.
27+
### main
28+
> Pada `main`, kami pertama-tama menyiapkan buffer character sepanjang 16 karakter (panjang string maksimal yang kami atur), kemudian kami memanggil `interrupt 10` untuk berpindah ke mode grafis dan mengosongkan layar. Setelah itu, kami memanggil fungsi `printLogo` untuk mencetak logo ASCII pada layat. Lalu, kami memanggil fungsi `readString` untuk membaca input dari pengguna dan menyimpannya pada buffer yang sudah kami siapkan sebelumnya. Kemudian, kami memanggil fungsi `printstring` untuk mencetak string yang tersimpan dalam buffer. Terakhir, kami memanggil fungsi `clear` untuk mengosongkan kembali isi buffer.

README.md

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,26 @@
1-
# Tugas Besar 1 IF2230 Sistem Operasi
2-
3-
4-
# Kelompok PushOS!
5-
13519116 Jeane Mikha Erwansyah
6-
7-
13519131 Hera Shafira
8-
9-
13519139 I Gede Govindabhakta
1+
# Milestone 1 Tugas Besar IF2230 Sistem Operasi
2+
## Cara menjalankan OS
3+
1. Pastikan seluruh dependensi telah ter-install di komputer.
4+
2. Buat disk image dengan memasukkan command `dd if=/dev/zero of=system.img bs=512 count=2880` ke dalam terminal.
5+
3. Kompilasi bootloader dengan command `nasm bootloader.asm -o bootloader`
6+
4. Masukkan bootloader ke dalam disk image dengan command `dd if=bootloader of=system.img bs=512 count=1 conv=notrunc`
7+
5. Buka terminal dan pindah ke folder `sistem-operasi-pushos`.
8+
6. Masukkan command `make run clean` ke dalam terminal.
9+
7. Tunggu hingga window Bochs terbuka, apabila window Bochs sudah terbuka maka OS sudah dapat digunakan.
10+
## Alternatif Cara menjalankan OS
11+
Apabila tidak berhasil menggunakan `Makefile`, ganti lah langkah 6 dengan memasukkan command berikut:
12+
>`bcc -ansi -c -o kernel.o kernel.c`
13+
>`nasm -f as86 kernel.asm -o kernel_asm.o`
14+
>`ld86 -o kernel -d kernel.o kernel_asm.o`
15+
>`dd if=kernel of=system.img bs=512 conv=notrunc seek=1`
16+
## Dependensi
17+
* Netwide Assembler
18+
* Bruce C Compiler
19+
* Id86
20+
* Bochs
21+
## File Markdown MILESTONE1
22+
[MILESTONE 1](./MILESTONE1.md)
23+
## Anggota Kelompok PushOS
24+
* 13519116 Jeane Mikha Erwansyah
25+
* 13519131 Hera Shafira
26+
* 13519139 I Gede Govindabhakta
File renamed without changes.

src/kernel.asm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,4 @@ _interrupt21ServiceRoutine:
7878
pop dx
7979

8080
iret
81+

src/kernel.c

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,20 @@ void printString(char * string);
33
void readString(char * string);
44
void clear(char *buffer, int length);
55
void printLogo();
6-
void logo(char * string, int y);
6+
void lineLogo(char * string, int y);
77

88
#define VIDMEM 0xB000
99
#define OFFSET 0x8000
1010

1111
int main() {
1212
char tes[16];
13-
interrupt(0x10, 0x0003, 0, 0);
13+
interrupt(0x10, 0x0003, 0, 0, 0);
1414
printLogo();
15-
// makeInterrupt21();
16-
// readString(tes);
17-
// tes[0]='A';
18-
// tes[1]='B';
19-
// tes[2]='C';
20-
// tes[3]='\0';
21-
// printString(tes);
22-
// clear(tes,16);
15+
interrupt(0x10, 0x0200, 0 , 0, 0x0C00);
16+
printString("Masukkan input : ");
17+
readString(tes);
18+
printString(tes);
19+
clear(tes,16);
2320
while (1);
2421
}
2522

@@ -66,20 +63,20 @@ void clear(char *buffer, int length) {
6663
}
6764

6865
void printLogo() {
69-
logo(" `...........` `...` ...` `.....`` `..` `..`",0);
70-
logo(" `...........` `...` ...` `.....`` `..` `..`",1);
71-
logo(" ..............` `.... `.... `.........` .... `....",2);
72-
logo(" .....`````..... `.... `.... ....` ``` .... `....",3);
73-
logo(" ..--` `.... `.... ..... .....`` ....``` `....",4);
74-
logo(" //ooo+:-...-:////. -:-.. :o/:. `../+oo/. ..-/+oo+:-",5);
75-
logo(" +ooo+//:-:::.` /oo+: /ooo/ `-/oooo+``+ooooooooo+//",6);
76-
logo(" +ooo: ``````. -ooo+` `/ooo: .+ooo:`oooo.```-ooo+",7);
77-
logo(" +ooo: -------. /ooo+:-:+ooo/``/+/:-:+ooo.`ooo+` -ooo+",8);
78-
logo(" /ooo- +++++:.-. `-+ooooooo+-` `+ooooooo+- `ooo+` .ooo/",9);
79-
logo(" `-:. .++++++:--.` ``.-:-.`` `` ``.-::-.` ` `--` `. .--`",10);
66+
lineLogo(" `...........` `...` ...` `.....`` `..` `..`",0);
67+
lineLogo(" `...........` `...` ...` `.....`` `..` `..`",1);
68+
lineLogo(" ..............` `.... `.... `.........` .... `....",2);
69+
lineLogo(" .....`````..... `.... `.... ....` ``` .... `....",3);
70+
lineLogo(" ..--` `.... `.... ..... .....`` ....``` `....",4);
71+
lineLogo(" //ooo+:-...-:////. -:-.. :o/:. `../+oo/. ..-/+oo+:-",5);
72+
lineLogo(" +ooo+//:-:::.` /oo+: /ooo/ `-/oooo+``+ooooooooo+//",6);
73+
lineLogo(" +ooo: ``````. -ooo+` `/ooo: .+ooo:`oooo.```-ooo+",7);
74+
lineLogo(" +ooo: -------. /ooo+:-:+ooo/``/+/:-:+ooo.`ooo+` -ooo+",8);
75+
lineLogo(" /ooo- +++++:.-. `-+ooooooo+-` `+ooooooo+- `ooo+` .ooo/",9);
76+
lineLogo(" `-:. .++++++:--.` ``.-:-.`` `` ``.-::-.` ` `--` `. .--`",10);
8077
}
8178

82-
void logo(char * string, int y) {
79+
void lineLogo(char * string, int y) {
8380
int j = 0;
8481
while (string[j] != '\0') {
8582
putInMemory(VIDMEM, OFFSET + (80 * y + j) * 2, string[j]);
@@ -92,7 +89,7 @@ void logo(char * string, int y) {
9289
putInMemory(VIDMEM, OFFSET + (80 * y + j) * 2 + 1, 0x9);
9390
break;
9491
default:
95-
break;
92+
putInMemory(VIDMEM, OFFSET + (80 * y + j) * 2 + 1, 0xF);
9693
}
9794
}
9895
}

0 commit comments

Comments
 (0)