- Tutorial interaktif untuk mempelajari assembly RISC-V langkah demi langkah melalui emulator yang dapat dijalankan di browser web, dibuat dengan inspirasi dari Easy 6502 karya Nick Morgan
- Mencakup 45 instruksi dasar dari set instruksi RV32I_Zicsr serta konsep inti dari arsitektur privileged, mengajarkan set instruksi yang cukup lengkap untuk menjadi target compiler
- Menyediakan dasar-dasar pemrograman assembly seperti operasi aritmetika/logika, percabangan/lompatan, akses memori, konvensi pemanggilan fungsi, dan pengelolaan stack beserta contoh praktik
- Menjelaskan dengan kode nyata cara melakukan peralihan level privileged antara mode Machine dan mode User, penanganan exception, serta manipulasi CSR (control and status register)
- Tujuan akhir tutorial ini adalah menulis sendiri sistem operasi sangat kecil yang mendukung system call dan penanganan exception, sehingga pembaca dapat mengalami alur lengkap pengembangan low-level RISC-V
Susunan tutorial dan poin pembelajaran utama
Instruksi dasar dan konsep prosesor
- Status prosesor: memahami program counter (pc), 31 register serbaguna (x1~x31), dan register nol khusus (x0)
- Instruksi aritmetika: mempelajari operasi penjumlahan/pengurangan dan perilaku overflow melalui
add, addi, sub, dan lainnya
- Operasi bit: praktik operasi logika tingkat bit dan instruksi shift seperti
and, or, xor, sll, srl, sra
- Instruksi perbandingan: menggunakan
slt, sltu, dan lainnya untuk membangun logika perbandingan integer bertanda/tanpa tanda serta evaluasi kondisi
Alur kontrol dan memori
- Branch dan jump: mekanisme percabangan bersyarat/tanpa syarat dan pemanggilan fungsi menggunakan
beq, bne, blt, jal, jalr, dan lainnya
- Akses memori: operasi load/store tingkat word/halfword/byte melalui instruksi
lw, sw, lb, lh, sb, sh
- Memory-mapped I/O: memahami cara berkomunikasi dengan perangkat eksternal melalui baca/tulis ke alamat tertentu
- Kode independen lokasi: teknik menulis kode yang dapat direlokasi menggunakan instruksi
auipc dan pengalamatan relatif terhadap PC
Fungsi dan konvensi pemanggilan
- Alias register: peran
a0~a7 (argumen), s0~s11 (disimpan), t0~t6 (sementara), ra (alamat kembali), sp (stack pointer), dan lainnya
- Pengelolaan stack: pola penyimpanan register saat masuk fungsi, alokasi/dealokasi ruang stack, serta penyimpanan dan pemulihan alamat kembali
- Fungsi rekursif: praktik panggilan rekursif dan pengelolaan stack frame melalui implementasi deret Fibonacci
Arsitektur privileged dan sistem operasi
- Level privileged: perbedaan antara mode Machine (level 3) dan mode User (level 0) serta mekanisme isolasinya
- Instruksi CSR: membaca/menulis register kontrol serta memanipulasi bit field dengan
csrrw, csrrs, csrrc, dan lainnya
- Penanganan exception: memeriksa informasi exception dan menulis handler menggunakan CSR
mcause, mepc, mtval, mstatus
- Peralihan mode: masuk dan kembali dari mode User dengan instruksi
mret, serta context switching menggunakan mscratch
Proyek akhir: OS sangat kecil
- Implementasi system call: melakukan trap dari mode User ke mode Machine dengan instruksi
ecall untuk menyediakan fungsi putchar/exit
- Simpan/pulihkan register: struktur lengkap trap handler yang mencadangkan dan memulihkan semua register serbaguna ke/dari stack
- Logika penanganan exception: membedakan penyebab exception dengan
mcause, melakukan dispatch berdasarkan nomor system call (a7), serta mencetak pesan error
- Kode yang dapat dijalankan: menyediakan kode lengkap untuk masuk/keluar kernel OS yang dapat langsung dijalankan di emulator web
Referensi dan lisensi
- Tutorial dan kodenya sama-sama berada di bawah CC0 public domain atau lisensi BSD 0-clause
- Naskah asli dan repositori kode: https://github.com/dramforever/easyriscv
- Cocok untuk pembelajaran RISC-V, pendidikan, penelitian, dan pembangunan lingkungan simulasi
Belum ada komentar.