Member baru? Bingung? Perlu bantuan? Silakan baca panduan singkat untuk ikut berdiskusi.

Welcome to Forum Sains Indonesia. Please login or sign up.

Agustus 16, 2022, 11:45:24 AM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
  • Total Anggota: 26,765
  • Latest: KlausKep
Stats
  • Total Tulisan: 139,633
  • Total Topik: 10,390
  • Online today: 35
  • Online ever: 441
  • (Desember 17, 2011, 09:48:51 AM)
Pengguna Online
Users: 0
Guests: 39
Total: 39

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

I/O Perangkat Keras: Mouse dan Keyboard

Dimulai oleh Farabi, Oktober 18, 2011, 04:03:40 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Farabi

Keyboard atau Mouse, adalah perangkat yang sudah umum dipakai didalam menggunakan komputer. Perangkat tersebut tersambung ke dalam komputer melalui sambungan (port) yang biasa disebut I/O Port hardware. Penjelasan ini akan menjadi penjelasan yang bersifat teknis dan praktis untuk panduan bagi anda untuk menggunakan interface dari keyboard dan mouse.

Keyboard.
Secara singkat, untuk memudahkan anda mendeteksi perubahan yang terjadi pada keyboard, anda bisa memeriksa port, memeriksa hapalan(memory) komputer atau dengan menggunakan interupt. Jika menggunakan port atau dengan menggunakan unit hapalan, maka sistem yang harus digunakan adalah dengan sistem polling. Dimana program secara berulang ulang memeriksa port yang dimaksud apakah sudah terisi data atau belum. Adapula interupt, adalah sistem komputer yang akan membuat komputer terhenti supaya menangani suatu keadaan tertentu, itu sebabnya teknik ini disebut sebagai interupt(selaan). Untuk menggunakan interupt pada mode 16-bit biasanya cukup mudah, anda cukup mengganti, misalkan, untuk mouse, alamat IRQ(Interupt Request) 12 dengan alamat program anda. Sehingga setiap mouse bergerak, maka program anda akan dipanggil dan dikirimi data. Akan tetap di mode 32-bit, IRQ ini tidak berfungsi, karena perbedaan pengalamatan data, dan perbedaan jumlah rentang instruksi, dimana seperti dari namanya, mode 16-bit hanya mempunyai panjang 16-bit, dan mode 32-bit mempunyai panjang 32-bit. Mengubah alamat IRQ pada mode 32-bit biasanya sangat sukar, sehingga penggunaan polling port lebih disukai.

Port Keyboard dan Mouse mempunyai saluran data yang sama yaitu di alamat 60h, angka 60 ini dalam hexa yang kalau didesimalkan berarti alamat port 96(d). Port keyboard dan mouse ini ditangani oleh mikrontroler khusus yang bernama 2352(BSJS/CMIIW). Setiap port, mempunyai panjang 8-bit, dimana terkadang tiap tiap bit mempunyai makna tertentu, misalkan bit 0, bit pertama paling kiri, jika bernilai satu, maka keyboard aktif, dan jika bernilai nol maka keyboard tidak aktif. Keyboard dan Mouse, dikontrol melalui port 64h, atau port, 100 desimal. Port tersebut adalah port 2 arah, selain bisa menjadi input, bisa juga dijadikan sebagai output. Sebagai input, tiap tiap bit di port 64h mempunyai definisi sebagai berikut

;   Bit     Function
;    7      1 = Parity error
;    6      1 = General Time Out
;    5      1 = Auxiliary output buffer full
;    4      1 = Inhibit switch
;    3      1 = Command/data
;    2      1 = System flag
;    1      1 = Input buffer full
;    0      1 = Output buffer full   

Setiap kali anda hendak mengirimkan data ke port 64h ini, anda harus menunggu bit ke 1 yang tidak lain adalah "input buffer" bit sampai mempunyai nilai 0. Karena jika bernilai 1, berarti input penuh dan data akan diabaikan. Algoritma untuk mengirimkan data bagi port ini adalah sebagai berikut:

1. Ambil data dari port 64h
2. Tes, apakah bit bernilai 0
3. Jika tidak kembali ke langkah satu.

Atau dalam bahasa mesin sebagai berikut

mov dx,64h   ; Pindahkan nilai 64h ke register dx
penanda_1:
in al,dx   ; Ambil data dari port yang ditunjuk DX
      ; Simpan ke register al
bt al,1      ; Test bit ke 1 dengan cara mennyalin bit
      ; ke-1 dari al ke penanda prosesor Carry
jc penanda_1   ; Jika penanda prosesor carry di set atau
      ; Bernilai 1, maka lompat ke "penanda_1"
out dx,data   ; Kirimkan data

Program akan terus melompat ke penanda selama angka yang dimaksud tidak didapat. Jika terjadi kerusakan di saluran 064h bukan tidak mungkin komputer anda akan "hang" dan tidak bisa digunakan, karena seluruh proses menunggu sampai bisa mengirimkan data ke perangkat keras.
Di komputer IBM, Port untuk input biasanya berada di port 060h. Seharusnya port 60h ini hanya untuk input saja, akan tetapi di komputer modern ini, selain sebagai input, bisa juga dijadikan sebagai output, terutama untuk mouse. Karena menggunakan mouse lebih rumit daripada keyboard.

Sebagai Output Port 064h Mempunyai perintah perintah sebagai berikut:

20   Transmit keyboard controller's command byte to system as a scan code at port 60h.
60   The next byte written to port 60h will be stored in the keyboard controller's command byte.
A4   Test if a password is installed (PS/2 only). Result comes back in port 60h. 0FAh means a password is installed, 0F1h means no password.
A5   Transmit password (PS/2 only). Starts receipt of password. The next sequence of scan codes written to port 60h, ending with a zero byte, are the new password.
A6   Password match. Characters from the keyboard are compared to password until a match occurs.
A7   Disable mouse device (PS/2 only). Identical to setting bit five of the command byte.
A8   Enable mouse device (PS/2 only). Identical to clearing bit five of the command byte.
A9   Test mouse device. Returns 0 if okay, 1 or 2 if there is a stuck clock, 3 or 4 if there is a stuck data line. Results come back in port 60h.
AA   Initiates self-test. Returns 55h in port 60h if successful.
AB   Keyboard interface test. Tests the keyboard interface. Returns 0 if okay, 1 or 2 if there is a stuck clock, 3 or 4 if there is a stuck data line. Results come back in port 60h.
AC   Diagnostic. Returns 16 bytes from the keyboard's microcontroller chip. Not available on PS/2 systems.
AD   Disable keyboard. Same operation as setting bit four of the command register.
AE   Enable keyboard. Same operation as clearing bit four of the command register.
C0   Read keyboard input port to port 60h. This input port contains the following values:

bit 7: Keyboard inhibit keyswitch (0 = inhibit, 1 = enabled).

bit 6: Display switch (0=color, 1=mono).

bit 5: Manufacturing jumper.

bit 4: System board RAM (always 1).

bits 0-3: undefined.
C1   Copy input port (above) bits 0-3 to status bits 4-7. (PS/2 only)
C2   Copy input pot (above) bits 4-7 to status port bits 4-7. (PS/2 only).
D0   Copy microcontroller output port value to port 60h (see definition below).
D1   Write the next data byte written to port 60h to the microcontroller output port. This port has the following definition:

bit 7: Keyboard data.

bit 6: Keyboard clock.

bit 5: Input buffer empty flag.

bit 4: Output buffer full flag.

bit 3: Undefined.

bit 2: Undefined.

bit 1: Gate A20 line.

bit 0: System reset (if zero).



Note: writing a zero to bit zero will reset the machine.

Writing a one to bit one combines address lines 19 and 20 on the PC's address bus.
D2   Write keyboard buffer. The keyboard controller returns the next value sent to port 60h as though a keypress produced that value. (PS/2 only).
D3   Write mouse buffer. The keyboard controller returns the next value sent to port 60h as though a mouse operation produced that value. (PS/2 only).
D4   Writes the next data byte (60h) to the mouse (auxiliary) device. (PS/2 only).
E0   Read test inputs. Returns in port 60h the status of the keyboard serial lines. Bit zero contains the keyboard clock input, bit one contains the keyboard data input.
Fx   Pulse output port (see definition for D1). Bits 0-3 of the keyboard controller command byte are pulsed onto the output port. Resets the system if bit zero is a zero.

Untuk keyboard, perintah yang akan kita gunakan adal perintah D2, yang tidak lain untuk menyuruh prosesor mengirimkan tombol terakhir yang ditekan oleh pengguna. Setiap pengiriman data untuk beberapa perangkat keras, seringkali mempunyai nilai balik yang telah didefinisikan, akan tetapi untuk hal ini yaitu keyboard, hal tersebut tidak diperlukan. Saat anda mengirimkan data, maka data yang berikutnya akan anda ambil, maka itu adalah data yang terakhir anda tekan, biarpun anda terakhir menekan misalkan 10 menit yang lalu karena komputer anda ngehang.
Untuk memberi perintah kepada prosesor untuk mengambil data, anda harus menggunakan perintah "in". Yang berarti input. Langkah langkah tersebut adalah sebagai berikut.

mov dx,64h   ; Pindahkan nilai 64h ke register dx
penanda_1:
in al,dx   ; Ambil data dari port yang ditunjuk DX
      ; Simpan ke register al
bt al,1      ; Test bit ke 1 dengan cara mennyalin bit
      ; ke-1 dari al ke penanda prosesor Carry
jc penanda_1   ; Jika penanda prosesor carry di set atau
      ; Bernilai 1, maka lompat ke "penanda_1"
out dx,0D2h   ; "Berikan saya data keyboard komputer"
mov dx,60h   ; Ingat port 60 untuk input
in dx,al   ; Data disimpan di al
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi


Lain halnya dengan mouse. Mousepun terletak ditempat yang sama, perintah di alamat 64h sedangkan untuk data di alamat 60h. Akan tetapi, data yang diambil berupa paket 3 data sekaligus, dan anda harus menunggu aba aba dari mouse sebelum data terkirim. Aba aba siap ini biasanya berupa angka 0FAh yang berarti setelah angka tersebut, 3 data berikutnya adalah data yang diminta, dan setelah itu jika terlewat, anda harus mengantri lagi untuk meminta data. Untuk meminta data mouse perintahnya adalah 0E9h. Dimana data berupa 3 paket sekaligus. Berbeda dengan keyboard, setelah data selesai diambil, port mouse harus segera ditutup karena akan mengakibatkan komputer mereset dengan sendirinya jika data yang diambil terlalu banyak. Umumnya data yang dikirimkan mouse perdetik mencapai 200 paket.
Berikut ini adalah perintah untuk mengirimkan Mouse data.

mov dx,64h   ; Pindahkan nilai 64h ke register dx
penanda_1:
in al,dx   ; Ambil data dari port yang ditunjuk DX
      ; Simpan ke register al
bt al,1      ; Test bit ke 1 dengan cara mennyalin bit
      ; ke-1 dari al ke penanda prosesor Carry
jc penanda_1   ; Jika penanda prosesor carry di set atau
      ; Bernilai 1, maka lompat ke "penanda_1"
out dx,0E9h   ; "Berikan saya data Mouse komputer"

tunggu_aba_aba:   ; Ingat, untuk mouse anda harus menunggu
in al,60h   ; Sampai mouse siap.
cmp al,0FAh   ; Jika al bernilai 0FAH, berarti 3 data
jnz _wait   ; berikutnya adalah data mouse

in al,dx
mov byte_1,al   ; Simpan di penghapal
in al,dx
mov byte_2,al   ; Simpan di penghapal
in al,dx   
mov byte_3,al   ; Simpan di penghapal

Data mouse harus ditafsirkan sebagai berikut.
Byte 1
Bit-7 Y overflow    
Bit-6 X overflow    
Bit-5 Y sign bit    
Bit-4 X sign bit    
Bit-3 Always 1    
Bit-2 Middle Btn    
Bit-1 Right Btn    
Bit-0 Left Btn

Byte 2
Pergerakan X

Byte 3
Pergerakan Y

Jika bit 7 dan 6 bernilai satu, maka data harus anda abaikan, karena data tersebut pasti tidak akan akurat. Sedangkan Bit 5 dan 4 Menandakan apakah pergerakan posisi X dan Y adalah berkurang atau bertambah, jika bernilai satu, berarti bertambah, dan bernilai 0 berarti berkurang. Bit-3 selalu bernilai 1, sekaligus penanda bahwa mouse masih terpasang ke komputer, sedangkan 3 sisanya adalah untuk klik dari mouse.

Saya rasa hanya sekian saja. Semoga mudah dimengerti. Pada dasarnya pada elektronika, jika mendesain alat, penafsirannya tidak harus begitu, akan tetapi, untuk memudahkan dalam pemakaian, memang diperlukan sebuah standard khusus bagi konsumen sehingga memudahkan dalam pemakaian. Akan tetapi pada faktanya, rata rata dijaman dahulu, setiap alat selalu membutuhkan driver yang berbeda, kecuali tentu saja, alat yang dibuat oleh MS yang selalu mempunyai standard yang sama dan itu itu saja.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

wutekhua


Farabi

Yah jadi intinya, menggunakan HardWare ini tidak lain dari tanya-jawab antar perangkat. Si CPU tanya ke Mouse, tadi gerak kemana aja, dan mouse kasih jawaban, tapi dengan "bahasa" mesin, yaitu angka sepanjang 8-bit.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.