Pengantar
Sejak dahulu kala, terdapat tiga pilihan dalam mengembangkan, menguji, dan melakukan debugging aplikasi mikroprosesor.
Untuk para hobiis, cara yang sederhana dan mungkin paling memusingkan untuk mengembangkan sebuah aplikasi adalah menulis dan mendownload kode program ke dalam mikroprosesor, memasang mikroprosesor tersebut ke dalam rangkaian, dan berharap agar program tersebut bisa bekerja. Dengan cara ini, Anda mungkin akan menghabiskan sebagian besar waktu pengembangan hanya untuk melakukan debugging (mencari kesalahan) dan kemudian mendownload kembali program Anda ke dalam mikroprosesor.
Jika Anda ingin mengembangkan aplikasi yang sedikit lebih rumit, Anda bisa meluangkan sedikit waktu untuk mempelajari software simulasi. Dengan software ini, Anda bisa melihat apakah kode program bekerja seperti yang diharapkan, dalam sebuah tampilan grafis yang cantik dan mudah dipahami, dimana register, memori, dan eksekusi program bisa dilihat. Kemudian jika Anda merasa kode program tersebut telah bekerja dengan benar, Anda bisa melakukan langkah di atas: Plug and Pray. Bagaimanapun, dengan tidak adanya interaksi dengan hardware yang sesungguhnya selama pengembangan dan debugging, program yang dijalankan pada software simulasi mungkin akan bertingkah laku berbeda dengan aplikasi yang sesungguhnya.
Pilihan yang terakhir, jika Anda benar-benar serius ingin mengembangkan aplikasi mikroprosesor dalam waktu yang singkat, Anda bisa menggunakan sebuah in-circuit emulator sehingga program Anda dapat langsung bekerja pada keadaan di dunia nyata. Namun, ini mungkin di luar pilihan para hobiis mikroprosesor mengingat harga sebuah emulator bisa mencapai ribuan dolar.
Kami menawarkan pilihan keempat - menggunakan komputer IBM PC biasa untuk menjalankan software simulasi yang mengendalikan hardware yang sesungguhnya secara real time, melalui port paralel. Cara ini bisa dilakukan di Linux, sedangkan Windows tidak mampu melakukannya mengingat tidak adanya akses secara langsung ke port I/O.
Kami memutuskan untuk mengimplementasikan solusi ini menggunakan PIC16F84A, sebuah prosesor populer untuk para hobiis dengan set instruksi yang sederhana namun mampu digunakan untuk aplikasi yang rumit.
Bagian yang sulit - Antarmuka hardware
Kami menemukan banyak simulator yang bagus untuk berbagai keluarga mikroprosesor. Namun, seperti yang disebutkan di atas, tidak adanya interaksi hardware merupakan satu kelemahan utama saat mengembangkan sebuah aplikasi. Apa solusinya? Port paralel pada PC memiliki pin I/O (Input/Output) yang mencukupi untuk mendukung 13 pin I/O pada PIC16F84A. (Untuk simulator, kami tidak membutuhkan kedua input osilator, sebab pewaktuan clock dilakukan oleh software.) Namun, ternyata tidak mudah melakukan pembacaan dan penulisan data ke port paralel. Pada versi Windows yang baru, melakukan akses menuju port I/O memerlukan trik-trik tertentu. Sedangkan di Linux caranya lebih mudah.
Pertama, ijinkan program berjalan sebagai aplikasi root:
su - root # Pindah ke root, masukkan password Anda. chown root your_program # Jadikan root sebagai pemilik program. chmod u+s your_program # Set bit SUID.
Kemudian akseslah port I/O pada permulaan program Anda, dan hilangkan kepemilikan root.
/*--- Set access to the ports.*/
if (ioperm(0x378, 3, 1))
perror("Failed ioperm lp0 on") ;
/*--- remove root privileges.*/
setgid( getgid() ) ;
setuid( getuid() ) ;
Untuk informasi lebih lanjut, baca artikel P.J. Radcliffe pada Linux Gazette edisi Maret 2005, “Linux: A Clear Winner for Hardware I/O”.
Akan tetapi, interaksi hardware melalui port paralel hanyalah salah satu fitur yang ingin kami sediakan. Agar dapat benar-benar mensimulasikan aplikasi pada dunia nyata, dengan menggunakan port paralel sebagai pengganti port I/O pada PIC16F84A, kami juga ingin simulasi ini dapat berjalan secara real-time.
Aplikasi PIC16F84A umumnya berjalan pada clock 4 MHz. Hal ini berarti rata-rata instruksi 1 MHz, yang artinya ada 1000 instruksi setiap satu milidetik. Dengan kernel Linux 2.6, kita bisa mendapatkan pewaktuan 1 milidetik, sehingga aplikasi mampu berjalan secara real-time. Pada pengujian pada laptop Pentium 3 800 MHz, jumlah waktu yang dibutuhkan oleh eksekusi instruksi (1000 instruksi) pada pewaktuan 1 milidetik adalah sekitar 50 persen.
Membaca dan menulis ke port paralel setiap satu instruksi yang mengakses I/O adalah hal yang mustahil. Kita tidak dapat melakukan simulasi real-time yang benar-benar sempurna. Namun, kita bisa memperoleh apa yang kita sebut pseudo-real-time. Kita menjalankan sebanyak mungkin instruksi yang dibutuhkan pada pewaktuan 1 milidetik yang diberikan oleh kernel Linux kepada program, dan kemudian melakukan pembacaan dan penulisan ke port paralel; dilakukan pembacaan pin-pin input dan penulisan ke pin-pin output. Hal ini berarti, pada saat ini keseluruhan instruksi dieksekusi pada pewaktuan 1 milidetik. Jika sebuah pin output berubah dari 0 ke 1 dan kembali ke 0, hasil akhir pada pin port paralel yang mewakili PIC16F84A tidak akan melihat perubahan ini. Inilah yang kita sebut pseudo-real-time.
Sisi software
Kami ingin software simulasi ini memiliki antarmuka grafis yang mudah digunakan. Satu hal yang menjadi kekurangan sebagian besar simulator mikroprosesor yang ada di Internet adalah tidak adanya antarmuka grafis yang berkualitas. Kemampuan program tersebut untuk mensimulasikan sebuah mikroprosesor tidak perlu dipertanyakan lagi, namun kami merasa bahwa pengguna membutuhkan sebuah program yang tidak hanya bekerja dengan benar, tetapi juga membuat hidup menjadi lebih mudah bagi pengembang mikroprosesor melalui antarmuka grafisnya.
Untuk desain GUI, kami memutuskan untuk menggunakan Qt Designer, sebuah IDE open source (untuk produk non komersial) dan mudah digunakan yang menggunakan pustaka grafis Qt untuk membantu pengguna dalam mengembangkan desain yang efektif. Kami yang berlatar belakang pemrograman Windows merasakan bahwa Qt Designer sangat powerful, dan pada berbagai sisi, sangat mirip dengan Visual Studio .NET, sehingga memudahkan kami dalam mempelajarinya.
[Komentar Rick Moen: Karena lisensi Qt Designer membatasi penggunaan -- sebagaimana halnya sebuah paket software propietary -- lisensinya lebih tepat disebut sebagai "viewable source" atau "source-available", dan tidak termasuk open source. Untungnya, lisensi tersebut tidak membatasi Anda untuk membuat karya open source, seperti yang ditunjukkan pada artikel di atas.]
Menggunakan Qt Designer juga seiring dengan tujuan yang lain dari proyek kami - menjadikannya sebuah proyek open source. Sejak awal kami telah memutuskan bahwa dengan menjadikan simulator ini sebagai software open source, kami bisa memanfaatkan kode GPL dan mengijinkan pengguna yang memiliki kemampuan pemrograman untuk melakukan perubahan pada software kami bilamana dibutuhkan.
Dengan memanfaatkan kode-kode GPL, pekerjaan kami menjadi lebih mudah. Kami sangat berterimakasih kepada Scott Dattalo, pembuat GPSIM. GPSIM adalah sebuah simulator mikroprosesor open source yang mensimulasikan semua anggota keluarga prosesor PIC. Proyek kami mengambil emulasi PIC16F84A dari GPSIM, dan menggunakannya di belakang layar program kami. Kami juga berterimakasih kepada P.J. Radcliffe, seorang akademisi RMIT, penulis artikel di Linux Gazette mengenai I/O hardware pada Linux (Maret 2005) dan software yang disertakan (sebuah program yang dinamakan lptty_start) membantu kami mengakses port paralel di Linux, dan sangat memudahkan pekerjaan kami dalam membaca dan menulis ke port paralel.
Sebuah contoh
Kita akan mencoba sebuah aplikasi sederhana yang menggunakan fitur-fitur simulator yang kami buat. Di bawah ini potongan kode sederhana yang menghidupkan dan mematikan sebuah LED (sangat cepat) dari Port A, pin 0 pada PIC16F84A:
list p=16c84
__config _wdt_off
include "p16c84.inc"
org 0
goto start
org 4
start:
bsf status,rp0
movlw 0x10
movwf trisa ; set low 4 bits of port a to output
bcf status,rp0
here:
call turnon
call turnoff
goto here
turnon:
movlw 0x01
movwf porta ;move 1 to bit 0 of port a
return
turnoff:
movlw 0x00
movwf porta ;move 0 to bit 0 of port a
return
end
O
Kode ASM di atas harus dikompilasi menggunakan kompiler eksternal. Kami merekomendasikan GPASM, sebuah kompiler bebas yang mudah digunakan. Untuk membuka file ini di simulator, klik ikon Open pada toolbar. Akan muncul kotak dialog Open file, dimana Anda bisa memilih untuk membuka file .hex atau file simbolis .cod. File COD lebih baik digunakan, sebab file ini memiliki informasi yang lebih lengkap, seperti nama-nama simbol untuk variabel yang dideklarasikan pada kode program Anda dan juga mampu menampilkan kode program ASM yang asli.
Setelah Anda memilih file yang akan disimulasikan, akan muncul kotak dialog yang menampilkan pilihan konfigurasi port paralel yang Anda inginkan. Anda bisa menggunakan 0-13 input dan 0-4 output, atau 0-5 input dan 0-12 output - atau tidak menggunakan port paralel (jika Anda tidak membutuhkannya). Untuk aplikasi di atas, kita akan menggunakan pilihan kedua (5 input/12 output).



Setelah file dibuka, Anda bisa melihat, dibawah tab source code, terdapat dua komponen: sebuah daftar history yang menampilkan instruksi yang baru-baru ini dieksekusi, dan sebuah penampil kode program yang menampilkan file ASM program tersebut. Dengan melakukan klik ganda pada sebuah baris kode program, Anda bisa menambah dan menghapus breakpoint pada baris kode tersebut. Saat dieksekusi, program akan berhenti ketika mencapai sebuah breakpoint, dan fitur ini dapat digunakan untuk melihat keadaan program PIC16F84A selama eksekusi.

Dengan melakukan klik pada tab Memory Viewer, kita bisa melihat tiga komponen. Pertama, kita bisa melihat opcode program pada tab memory browser, di bawah komponen opcode viewer. Instruksi yang sedang dijalankan akan diwarnai. Saat mengeksekusi sebuah program dengan mode single-step, baris yang diwarnai akan berpindah setiap langkah instruksi. Opcode viewer akan menampilkan alamat memory dimana instruksi berada, tampilan kode dalam bentuk ‘hex’ dan dalam bentuk disassembled (kode ASM).
Bagian yang juga berada di bawah tab Memory Browser adalah sebuah memory viewer. Komponen grafis ini mengijinkan pengguna melihat atau memodifikasi isi memori. Pengguna bisa melihat memori register (RAM), memori program, atau memori EEPROM pada PIC16F84A, dengan mengklik pilihan yang bersangkutan di bawah halaman. Anda juga bisa menambahkan breakpoint pada pembacaan dan penulisan register, yang akan ditampilkan dengan latar belakang berwarna kuning dan merah.
Fitur yang lain untuk melihat apa yang terjadi selama eksekusi aplikasi PIC adalah Watch Viewer. Pengguna bisa melakukan klik kanan pada sebuah lokasi memori (pada tab memory viewer), dan dari menu yang muncul, memilih untuk menambahkan sebuah ‘watch’ pada sebuah lokasi memori. Misalnya, jika Anda ingin melihat sebuah register umum yang digunakan oleh program Anda sebagai sebuah variabel yang penting, Anda bisa menambahkan sebuah ‘watch’ pada register tersebut.

Tab yang ketiga, yaitu tab Hardware, adalah dimana Anda bisa menentukan pemetaan antara pin PIC16F84A dan pin port paralel. Untuk memetakan sebuah pin PIC ke pin pada port paralel, Anda bisa melakukan klik pada kotak pilihan yang bersangkutan, dan memilih port paralel yang mana yang ingin Anda hubungkan dengan pin PIC. Sebagai contoh, pada program di atas, jika Anda ingin Port A Bit 0 (pin 17 pada PIC) dipetakan pada port paralel pin 9, klik pada kotak pilihan di sebelah RA0, dan pilih nomor 9. Sekarang, setiap perubahan nilai pada RA0 akan direfleksikan pada pin port paralel tersebut. Dengan menghubungkan sebuah LED pada pin port paralel tersebut, kita bisa menjalankan aplikasi PIC ini. (Konfigurasi pemetaan port paralel Anda juga bisa disimpan dan dibuka menjadi sebuah file).
Pemetaan pin-pin port paralel ke pin-pin PIC dapat disimpan atau dibuka menjadi sebuah file, dengan melakukan klik pada tombol yang bersangkutan di pojok kanan bawah layar.

Kita bisa menjalankan program pada mode full-speed, dengan melakukan klik pada ikon Run pada toolbar. Eksekusi pada mode full-speed akan berhenti ketika mencapai breakpoint, atau ketika pengguna menekan ikon Stop pada toolbar. Kita juga bisa menjalankan program pada mode single-step untuk menjalankan satu instruksi pada satu waktu, dengan menekan ikon Step. Pengguna bisa memilih untuk melewatkan sebuah instruksi yang tidak ingin dieksekusi, dengan menekan ikon Step-over.

Bagian akhir
Jika Anda tertarik untuk mengunduh software ini, proyek kami bisa ditemukan di sourceforge.net. Nama proyek ini adalah Microprocessor Simulator on Linux.
TEKNIK INFORMATIKA responded on 03 Jul 2009 at 7:04 am #
Mikroprosesor…
Mikroprosesor
Oleh Faisal Akib
Mikroprosesor
Mikroprosesor biasa juga disingkat menjadi prosesor biasa juga disebut CPU (central processing unit). Komponen ini merupakan sebuah cip. Cip (chip atau IC/Integrated circuit) adalah sekeping silikon…
TEKNIK INFORMATIKA responded on 04 Jul 2009 at 6:21 am #
Prinsip Kerja Mikroprosesor…
Prinsip Kerja Mikroprosesor
Oleh Faisal Akib
Gambar 3.9 Mikroprosesor Skalar & Superskalar
CPU terdiri atas dua bagian utama yang dinamakan unit kontrol (Control Unit) dan ALU (Arithmetic and Logic Unit)
Unit kontrol berfungsi untuk m…