BAB VI INPUT OUTPUT
Unit
input/output
memberi
CPU
kemampuan
untuk
berkomunikasi
dengan
peripherals. Terdapat beberapa alasan diperlukannya unit I/O, diantaranya adalah : 1. Besar tegangan dan arus isyarat yang diperlukan untuk transfer informasi dari dan ke piranti peripheral umumnya berbeda dari tegangan dan arus isyarat yang digunakan pada sistem bus. 2. Kecepatan transfer data antara sistem bus dengan piranti I/O biasanya jauh berbeda, terutama untuk piranti-piranti yang mempunyai unsur mekanis. Waktu transfer pada sistem bus dapat mencapai 60 nano detik, sedangkan waktu transfer pada I/O lebih dari 1 ยต detik. Dengan adanya beberapa perbedaan diatas maka dalam perancangan sistem bus, antarmuka I/O perlu dipertimbangkan agar dapat memenuhi kebutuhan dari beberapa piranti I/O yang berbeda. Karena kecepatan transfer dari hampir semua piranti I/O jauh lebih lambat dari kecepatan transfer memori-CPU-unit kontrol, maka bus I/O dapat dibuat dengan menggunakan piranti kecepatan rendah dengan harga yang lebih murah. Pengalamatan yang diperlukan untuk bus I/O juga berbeda. Jumlah piranti peripheral yang dipasang pada sistem komputer akan selalu lebih kecil dari jumlah lokasi memori. Oleh karena itu jumlah bit yang diperlukan untuk mengalamati peripheral akan jauh lebih kecil dari yang diperlukan untuk mengalamati memori utama. Disamping bus alamat yang lebih sempit, bus data biasanya juga mempunyai jalur data yang lebih sedikit, karena kebanyakan piranti I/O hanya mempunyai transfer data 1 atau 2 byte setiap saat. Siklus transfernya juga jauh lebih panjang karena mengandung unsur mekanis yang mempunyai transfer data jauh lebih lambat dari memori utama. Dari uraian di atas dapat disimpulkan bahwa fungsi utama dari. unit I/O adalah : 1. Melakukan kompensasi perbedaan kecepatan dan pewaktuan antara CPU dan peripheral. 2. Melakukan penyesuaian tegangan dan arus dari satu aras ke aras yang lain. 3. Mengubah panjang data antara sistem bus dan bus I/O.
VI.1 Dasar Input/Output Transfer data dari dan ke port I/O dapat dilakukan dalam dua cara. Pertama adalah dengan mengeksekusi instruksi yang menyebabkan suatu byte tunggal atau word akan ditransfer, dan kedua dengan mengeksekusi suatu runtun instruksi yang menyebabkan suatu komponen sistem khusus yang berhubungan dengan antarmuka untuk mentransfer runtun byte atau word ke atau dari blok memori yang dituju. Cara kedua biasa disebut sebagai Universitas Gadjah Mada
1
transfer blok atau direct memory access (DMA) dan komponen khususnya disebut DMA controller. Transfer data terjadi antara port dengan CPU, tetapi transfer blok dilakukan langsung dengan memori. Secara prinsip jenis dari input/output terdiri atas : 1.
Programmed I/O.
2.
Interupt I/O.
3.
Block transfer.
Dari ketiga jenis I/O di atas, I/O terprogram dan I/O terinterupsi didasarkan pada transfer byte atau kata (word), dan jika harus dipindah antara memori dan port, maka proses transfernya melalui register CPU. Misalnya jika suatu kata akan dimasukkan dari suatu port ke suatu lokasi memori, maka pertama kali harus dimasukkan ke C register CPU, Baru kemudian dipindahkan ke lokasi memori yang dituju. Untuk transfer runtun data byte atau kata dari suatu I/O atau piranti penyimpan massal, maka program akan melakukan eksekusi secara berulang-ulang satu demi satu, memasukkan byte atau kata ke CPU dan kemudian meletakkannya ke lokasi memori yang dituju secara berurutan. Hal ini dapat dilakukan dengan suatu program kalang (loop). Dengan menggunakan kontrol DMA maka proses di atas dapat dilakukan dengan memindahkan setiap byte atau kata langsung dari port ke memori. Program hanya perlu memberi perintah kepada antarmuka dan kontrol. DMA untuk menginisialisasi transfer data. Demikian pula transfer dari memori ke piranti eksternal, dalam hal ini terdapat dua hal yang perlu dipertimbangkan yaitu : bagaimana sistem mengetahui kapan suatu antarmuka sudah mempunyai data atau siap untuk menerima data, dan jika lebih dari satu antarmuka yang memerlukan pelayanan secara bersamaan, maha yang harus didahulukan. uNtuk I/O terprogram, program yang akan menentukan antarmuka mana yang membutuhkan pelayanan dengan senantiasa menguji bit ready dalam register status. Program pengujian bit ready dikenal sebagai polling. Untuk I/O terinterupsi, suatu isyarat interupsi eksternal akan dikirimkan ke CPU dari antarmuka jika antarmuka sudah mempunyai data untuk dimasukkan atau siap untuk menerima data, dan operasi I/O dilakukan oleh suatu rutin pelayanan interupsi. Untuk operasi DMA, antarmuka akan meminta ijin penggunaan bus dengan mengirim isyarat atas jalur kontrol dan melakukan transfer yang diperlukan tanpa pertolongan CPU atau perangkat lunak yang sedang dieksekusi. Jika dua atau lebih antarmuka yang memerlukan pelayanan secara serentak, maka urutannya akan bergantung pada perancangan prioritas yang dibuat pada sistem. Terdapat beberapa variasi prioritas dari antarmuka yang dapat dirancang. Ada yang didasarkaan pada perangkat lunak, perangkat keras, atau gabungan dari keduanya.
Universitas Gadjah Mada
2
Pada 8086 seluruh komunikasi program dengan port I/O dilakukan dengan instruksi IN dan OUT seperti yang diperlihatkan pada gambar di bawah ini.
Bentuk pendek, kata
IN
AX, DX
(AX)
((DX) + 1 : (DX))
Bentuk panjang, byte
OUT
PORT, AL
(PORT) <-----------
Bentuk panjang, kata
OUT
PORT, AX
(PORT + 1 : PORT) <-- (AX)
Bentuk pendek, byte
OUT
DX, AL
((DX))
Bentuk pendek, kata
OUT
DX, AX
((DX) + 1 : (DX))
Output (AL)
<------------ (AL) <-- (AX)
Catatan : PORT adalah suatu konstanta antara 0 sampai 255.
VI.2 I/O Terprogram Pada I/O jenis ini untuk pengaksesannya maka program secara kontinyu akan menguji status dari antarmuka dan membentuk operasi pa dengan antarmuka jika statusnya menunjukkan bahwa sudah ada data yang akan dimasukkan atau register buffer data keluaran sudah siap menerima data dari CPU. Diagram alir pemasukan data diperlihatkan pada Gambar 6.2. Dalam diagram alir ini diasumsikan bahwa data yang akan dimasukkan berupa suatu runtun byte atau kata, dan setelah dibawa ke CPU kemudian ditransfer ke buffer memori untuk diproses.
Universitas Gadjah Mada
3
Gambar 6.2 Diagram alir program pemasukan data.
Contoh lain yang lebih lengkap diperlihatkan pada Gambar 6.3 dan 6.4. Misalnya satu baris karakter akan dimasukkan dari terminal (keyboard) ke larik 82 byte yand dimulai dari Buffer sampai dideteksi penekanan tombol ENTER atau sudah mencapai 80 karakter. Jika ENTER tidak ditemukan dalam 81 karakter pertama, maka akan dikirimkan pesan BUFFER OVERFLOW ke terminal, selainnya maka secara otomatis akan ditambahkan satu baris Baru. Antarmuka terminal pada Gambar 6.3 mempunyai alamat register data masukan 0052, register bufer data keluaran 0053, dan register status 0054.
Universitas Gadjah Mada
4
Gambar 6.3 Antarmuka ke contoh I/O terprogram.
Kondisi pada bit ke 1 dari register status menunjukkan bahwa register bufer data masukan berisi byte untuk dimasukkan dan kondisi 1 pada bit ke 0 menunjukkan bahwa register bufer data keluaran sudah kosong. Antarmuka dirancang sedemikian rupa sehingga bit ke 1 akan diset jika suatu byte dimasukkan dari suatu piranti dan dikosongkan jika byte dimasukkan dari antarmuka. Sebaliknya bit ke 0 dikosongkan jika suatu byte dikeluarkan ke antarmuka dan diset jika dikeluarkan ke piranti. Program dalam Bahasa rakitan (assembly) untuk masalah di atas diperlihatkan pada Gambar 6.4. Register ES dan DI digunakan sebagai register segmen dan register indeks untuk menyimpan karakter saat dimasukkan, dan CX digunakan sebagai pencacah
untuk
membatasi
proses
kalang.
Empat
instruksi
pertama
akan
menginisialisasi register DS dan ES, dan empat instruksi selanjutnya akan meletakkan offset dari BUFFER ke register DI dan COUNT. Set CX pada panjang baris maksimum, dan bersihkan bendera DF.
Universitas Gadjah Mada
5
Gambar 6.4 Contoh pemrograman I/O.
Jika terdapat lebih dari satu piranti yang rnenggunakan I/O terprogram, maka diperlukan untuk mentest bit ready dari setiap piranti satu per satu yang biasa dikenal dengan istilah polling.
Universitas Gadjah Mada
6
VI.3 I/O Terinterupsi Meskipun I/O terprogram secara prinsip cukup sederhana, tetapi akan sangat membuang waktu jika banyak piranti I/O yang membutuhkan pelayanan CPU. Seperti pada contoh di atas jika kita dapat mengetik pada terminal sebanyak 10 karakter per detik, dan hanya dibutuhkan 10 p. detik bagi komputer untuk memasukkan setiap karakter, maka jumlah waktu yang terbuang adalah sekitar : (99.990 / 100.000) x 100 % = 99,99 %
Seperti yang telah dibahas pada Bab 5, suatu interupsi adalah permintaan dari luar sistem yang memaksa CPU untuk beralih ke suatu program rutin palayanan interupsi. Untuk 8086 sekali permintaan interupsi ditanggapi, maka runtun interupsi akan terdiri atas : 1. Menentukan nomor interupsi N 2. Menyimpan (push) isi PSW, CS, dan IP saat ini ke stack 3. Membersihkan bendera IF dan TF 4. Meletakkan isi memori lokasi 4*N ke dalam IP dan isi dari 4*N+2 ke dalam CS Jadi interupsi akan menyebabkan runtun program normal akan ditangguhkan dan CPU akan melompat ke lokasi yang dinyatakan oleh dua kata (double word) yang dimulai pada empat kali nomor interupsi (yaitu pointer interupsi). Kendali dapat dikembalikan ke titik dimana interupsi muncul dengan meletakkan instruksi IRET pada akhir dari rutin pelayanan interupsi.
Seperti diketahui terdapat dua kelas interupsi, yaitu interupsi internal dan eksternal. Interupsi eksternal disebabkan oleh isyarat yang dikirimkan ke CPU melalui salah satu dari pin NMI atau INTR. Interupsi melalui pin NMI disebut interupsi yang tidak dapat dihalangi dan akan menyebabkan interupsi nomor 2, tanpa memperhatikan setting dari bendera IF. Interupsi melalui pin INTR dapat dihalangi oleh IF, sehingga jika isi bendera ini 0, interupsi tidak akan ditanggapi sampai isi IF menjadi 1. Oleh karena intu disebut interupsi yang dapat dihalangi (maskable interupt). Contoh urutan kejadian selama terjadinya interupsi yang dapat dihalangi diperlihatkan pada Gambar 6.5.
Universitas Gadjah Mada
7
Gambar 6.5 Urutan kejadian selama proses interupsi yang dapat dihalangi. VI.4 Transfer Blok clan DMA Kecepatan transfer data dari atau ke suatu piranti I/O relatif rendah, sehingga komunikasi dapat dilakukan baik dengan menggunakan I/O terprogram atau I/O terinterupsi. Tetapi cara ini akan memerlukan waktu pelayanan CPU yang cukiup lama sehingga akan menurunkan efisiensi CPU. Pesat data untuk piranti I/O atau piranti penyimpan massal sering ditentukan oleh piranti itu sendiri dan bukan oleh CPU. Komputer harus dapat mengeksekusi I/O sesuai dengan kecepatan maksimum dari piranti tersebut. Universitas Gadjah Mada
8
Aktifitas yang terjadi dalam mentransfer suatu gyte atau kata pada sistem bus disebut siklus bus. Eksekusi suatu instruksi mungkin membutuhkan lebih dari satu siklus bus. Sebagai contoh, instuksi MOV AL,TOTAL akan menggunakan siklus bus untuk membawa ke isi dari TOTAL ditambah siklus yang diperlukan untuk mencapai instruksi tersebut. Suatu transfer blok dari 100 byte akan memerlukan 100 siklus bus jika hanya satu byte yang dipindahkan pada satu saat dan 50 siklus bus jika memindahkan kata ytang dimulai pada alamat genap. Untuk mentransfer data dalam jumlah yang besar dari atau ke suatu piranti penyimpan masal seperti disket, hard disk, atau pita magnetik akan memerlukan waktu yang sangat panjang dan menurunkan kinerja CPU. Untuk itu digunakan kendali DMA (Direct Memory Access) yang akan mengendalikan proses transfer blok data tanpa melibatkan CPU. Selama siklus bus, salah satu dari komponen sistem yang tehubung ke sistem bus akan memberikan kendali dari bus. Komponen ini disebut sebagai master selama siklus ini dan komponen yang berkomunikasi dengannya disebut sebagai slave. CPU dengan logika kendali busnya dalam keqadaan normal adalah sebagai master, tetapi suatu komponen yang dirancang secara khusus dapat mengambil alih kontrol dengan mengirim isyarat permintaan bus (bus request) ke CPU. Sesudah siklus ini selesai CPU akan menanggapi dengan mengirim isyarat bus grant dan komponen yang mengirim permintaan tersebut akan menjadi master. Pengambil alihan kendali bus untuk suatu siklus bus disebut pencurian siklus (cycle stealing). Komponen yang mampu menjadi master adalah prosesor (dengan logika kendali busnya) dan kendali DMA. Kendali DMA dapat dihubungkan dengan antarmuka tunggal, tetapi umumnya dirancang untuk dapat melayani lebih dari satu antarmuka. 8086 menerima permintaan bus melalui pin HOLD dan memberi tanggapan melalui pin HLDA. Kendali yang akan menjadi master mengirtim isyarat 1 ke pin HOLD. Umumnya setelah siklus bus saat ini selesai, 8086 akan menanggapinya dengan mengirim isyarat 1 melalui pin HLDA. Jika piranti yang meminta menerima isyarat ini, maka akan menjadi master. Piranti ini akan tetap menjadi master sampai mengubah isyarat pada pin HOLD menjadi 0, yang akan membuat 8086 akan mengubah isyarat tanggapan pada pin HLDA. Satu perkecualian pada urutan normal adalah jika mengakses kata yang dimulai pada alamat ganjil. Dalam hal ini dibutuhkan dua siklus bus untuk menyelesaikan transfer dan tanggapan tidak akan diberikan sampai siklus busd kedua selesai. Saat kendali DMA menjadi master, akan menempaatkan suatu alamat pada bus alamat dan mengirim antarmuka suatu isyarat yang diperlukan, agar antarmuka memasukkan atau menerima data dari bus data. Karena kendali DMA yang menentukan kapan permintaan bus diubah, maka is dapat mengembalikan kendali ke CPU sesudah setiap data ditransfer dan meminta kendali lagi saat data berikutnya sudah siap, atau tetap Universitas Gadjah Mada
9
memegang kendali sampai seluruh blok data dipindahkan. Urutan aktifitas yang terjadi untuk keluaran tunggal melalui DMA diperlihatkan pada Gambar 6.6.
Gambar 6.6 Transfer keluaran data tunggal dalam suatu transfer blok.
Meskipun kendali DMA dapat dirancang dengan berbagai konfigurasi, tetapi semua konfigurasi tersebut harus memenuhi persyaratan tertentu. Karena kendali DMA yang menentukan alamat saat menjadi master, maka harus mampu untuk menyimpan alamat memori berikutnya yang akan diakses. Selama terjadi transfer blok byte, maka urutan yang terjadi saat data dikirimkan dari antarmuka ke memori adalah sebagai berikut 1 . Antarmuka mengirim permintaan kendali untuk pelayanan DMA 2. Kendali DMA akan mengambil alih kendali bus 3. Isi dari register alamat akan diletakkan pada bus alamat 4. Kendali DMA akan mengirimi antarmuka suatu isyarat tanggapan DMA yang akan memberitahu antarmuka untuk meletakkan data pada bus data. Sedang untuk operasi keluaran, kendali DMA akan memberi tanda pada antarmuka untuk me-latch data berikutnya yang terletak pada bus. 5. Byte data ditransfer ke lokasi memori yang ditunjukkan oleh bus alamat. 6. Kendali DMA akan melapaskan kendali bus. 7. Isi register alamat bertambah dengan satu. 8. Isi register pencacah byte dikurangi dengan satu. 9. Jika register pencacah byte tidak nol, kembali ke Iangkah 1, selainnya berhenti. Universitas Gadjah Mada
10
VI.5 Antarmuka I/O Dalam suatu sistem komputer, antarmuka I/O harus dirancang agar dapat menerima dan mengirim isyarat yang kompatibel dengan logika kendali bus dan pewaktuannya. Meskipun antarmuka memori dan I/O mempunyai beberapa kesamaan, tetapi juga terdapat perbedaan yang mencolok. Suatu antarmuka 1/0 harus mampu untuk : 1. Menginterpretasikan alamat dan isyarat pilih memori - I/O, untuk menentukan apakah sedang dipilih, jika ya, dapat menentukan register mana yang akan digunakan. 2. Menentukan suatu operasi masukan atau keluaran dan menerima keluaran data atau informasi kendali dari bus atau meletakkan data masukan atau informasi status pada bus. 3. Memasukkan atau mengeluarkan data dari suatu piranti I/O dan mengubah data dari paralel ke format yang dapat diterima oleh piranti I/O, dan sebaliknya. 4. Mengirim isyarat ready jika data telah diterima atau diletakkan pada bus data, sehingga memberika informasi pada prosesor bahwa proses transfer telah lengkap. 5. Mengirim permintaan interupsi, dan jika tidak ada manajemen prioritas interupsi pada logika kendali bus, maka dapat menerima tanggapan interupsi dan mengirim jenis atau nomor interupsi. 6. Menerima isyarat reset dan menginisialisasi ulang. Diagram kotak suatu antarmuka diperlihatkan pada Gambar 6.7. Pada prinsipnya antarmuka I/O berfungsi sebagai penterjemah isyarat antara sistem bus dengan piranti I/O dan menyediakan buffer yang diperlukan untuk mengatasi batasan pewaktuan yang berbeda. Secara umum antarmuka I/O yang terdapat pada sistem komputer terdiri atas antarmuka komunikasi serial dan komunikasi paralel. Banyak piranti I/O yang melakukan transfer data dari atau ke sistem komputer secara serial, yaitu satu bit setiap saat pada saluran komunikasi tunggal (one way trafic). Terdapat beberapa piranti antarmuka serial yang digunakan untuk komunikasi serial. Piranti antarmuka ini mempunyai kemampuan untuk mengubah data keluaran paralel menjadi serial dan data masukan serial menjadi paralel dengan melalui register geser (shift register). Terdapat dua mode komunikasi serial, yaitu komunikasi serial asinkron yang berorientasi bit, dimana pengiriman datanya per bit, dan antar bit dipisahkan oleh suatu pola bit khusus yang biasanya terdiri atas bit mulai (start bit) dan bit berhenti (stop bit), serta bit paritas. Pada mode ini pengiriman datanya dapat sewaktu-waktu (tidak harus kontinyu). Mode yang lain adalah mode komunikasi sinkron yang berorientasi byte atau blok data. Pada mode ini pengiriman datanya adalah per blok (runtun bit atau karakter), dan setiap blok diawali dengan suatu karakter sinkronisasi. Pada mode sinkron ini maka jalur komunikasi harus Universitas Gadjah Mada
11
terus berisi data agar antara pengirim dan penerima dapat selalu dalam keadaan sinkron, sehingga jika tidak ada data yang dikirim, maka antarmuka akan mengirim karakter sinkronisasi. Mode ini mempunyai kecepatan transfer yang lebih tinggi dari mode asinkron, tetapi besar frekuensi clock dari pengirim dan penerima hares sama (mempunyai toleransi perbedaan yang sangat kecil). Pada komputer IBM PC biasanya yang terpasang pada kartu I/O adalah antarmuka komunikasi asinkron yang menggunakan IC UART 8250 (Universal Asynchronous Transmitter Receiver). Sedangkan untuk komunikasi mode sinkron dapat menggunakan IC USART 8251A (Universal Synchronous Asynchronous Transmitter Receiver) yang juga dapat melakukan komunikasi mode sinkron. Antarmuka komunikasi serial biasanya digunakan untuk komunikasi dengan komputer atau piranti lain yang mempunyai jarak yang relatif jauh, dimana penggunaan jalur serta panjang jalur komunikasinya relatif mahal. Dengan mode serial maka cukup menggunakan sepasang konduktor atau jalur komunikasi tunggal.
Universitas Gadjah Mada
12
Antarmuka komunikasi yang lain adalah komunikasi paralel, dimana jumlah jalur data komunikasinya sama dengan panjang bit data yang dikirimkan, yang pada unumnya adalah 8 bit (1 byte). Keuntungan komunikasi paralel adalah bahwa kecepatan transfer datanya jauh lebih tinggi dari komunikasi serial yang hanya menggunakan satu jalur, karena tidak perlu mengubah data paralel ke serial (8 bit ke 1 bit) dan sebaliknya. Kekurangannya adalah biayanya menjadi tinggi karena menggunakan 8 jalur, sehingga komunikasi paralel biasanya digunakan untuk jarak pendek, seperti pada komunikasi dengan printer. Perancangan komunikasi paralel biasanya lebih mudah daripada komunikasi serial, karena tidak ada pengubahan data dari paralel ke serial dan sebaliknya. Pada keluarga IBM PC, komunikasi paralel dilakukan dengan menggunakan antarmuka IC PPI (Programmable Peripheral Interface) 8255A. Antarmuka paralel ini mempunyai tiga buah port, yaitu port A, B, dan C, yang dapat diprogram secara terpisah sebagai port masukan atau port keluaran. VI.6 Teknik Pengalamatan Dalam suatu sistem komputer setiap piranti yang dihubungkan ke CPU mempunyai alamat tertentu. Alamat-alamat tersebut digunakan untuk mengaktifkan CS (chip select) dari piranti peripheral yang dipilih (termasuk chip memori). Untuk sistem komputer berbasis 8086 tersedia 256 buah alamat yang dapat digunakan untuk mengalamati piranti peripheral selain memori. Secara umum teknik pengalamatan untuk piranti I/O dapat dikelompokkan menjadi dua, yaitu :
1. Dekoding alamat sebagai I/O sesungguhnya (I/O address decoding). Pada mode ini tidak semua prosesor dapat melakukannya. Hanya prosesor yang mempunyai instruksi untuk I/O, seperti keluarga Zxxx (Zilog) dan keluarga 80xxx. Prosesor jenis ini biasanya mempunyai pin isyarat kontrol khusus untuk mengakses I/O, seperti IORQ pada Z80, dan M/IO pada 8086. Instruksi untuk mengakses I/O tersebut adalah IN
AX,(PORT)
OUT (PORT), AX
; membaca data masukan dari port (sebagai input) ; mengirim data keluaran ke port (sebagai output)
2. I/O sebagai bagian dari lokasi memori (Memory mapped I/O). Mode ini dapat dilakukan oleh semua prosesor, dan tidak diperlukan isyarat kontrol khusus untuk I/O. Pada mode ini register-register dari I/O akan menempati beberapa lokasi dari memori, sehingga lokasi yang ditempati ini tidak dapat lagi digunakan oleh memori (RAM dan ROM). Oleh karena itu teknik pengalamatan I/O ini akan mengurangi kapasitas memori sebesar jumlah register I/O yang menempati lokasi memori. Instruksi yang digunakan untuk
Universitas Gadjah Mada
13
mengakses piranti I/O sama dengan instruksi yang digunakan untuk mengakses memori, yaitu : MOV AX,(PORT)
; membaca data dari masukan port (sebagai input)
MOV (PORT),AX
; mengirim data keluaran ke port (sebagai output)
Jadi untuk mengirimkan data ke port, sama seperti menyimpan/ menulis data ke lokasi memori melalui instruksi transfer data ke memori. Demikian pula untuk inenerima data dari port I/O akan sama dengan membaca data dari suatu lokasi memori. Dalam perancangan maka alamat dari masing-masing piranti peripheral diletakkan dalam suatu peta memori, kemudian dibuat suatu tabel yang memuat masing-masing piranti dan bit-bit alamat yang berhubungan dengan masing-masing piranti. Dari tabel tersebut kemudian dapat ditentukan bit-bit alamat yang isinya tidak berubah selama operasi, yang kemudian digunakan sebagai masukan dari gerbang-gerbang dekoder untuk mengaktifkan CS. Sebagai contoh misalkan piranti yang terpasang pada suatu sistem komputer adalah sebagai berikut : 1 buah ROM 2 Kb dengan alamat 00000 - 007FF 1 buah RAM 2 Kb dengan alamat 04000 - 004FF 1 buah PIO dengan alamat OFFFC - OFFFF maka dapat dibuat suatu tabel sebagai berikut : Tabel 6.1 Penentuan bit-bit yang digunakan untuk pengalamatan. Piranti
A19A18A17A16
A15A14A13Al2
Al lA10A9 As
A7 A6 A5 A4
A3 A2 A1 A0
ROM
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
00000-007FF
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
x
x
x
x
x
x
x
x
x
x
x
RAM
0
0
0
0
0
4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
04000-047FF
0
0
0
0
0
4
0
0
0
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
4
0
0
0
x
x
x
x
x
x
x
x
x
x
x
PIO
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
OFFFC-
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
OFFFF
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
x
Pada tabel di atas, yang ditandai dengan huruf x adalah bit-bit alamat yang isinya dapat berubah. Jadi yang digunakan untuk masukan gerbang dekoder alamat adalah bit-bit yang isinya tidak berubah. Pada teknik pengalamatan ini terdapat dua cara penyusunan untai dekoder, yaitu : Universitas Gadjah Mada
14
x
1. Teknik pengalamatan penuh (Full address decoding), yaitu dekoding alamat dengan menggunakan seluruh bit-bit alamat yang isinya tidak berubah sebagai masukan dari untai gerbang dekoder. Metode ini adalah yang paling akurat, tetapi dalam praktek sulit diimplementasikan. Karena jika jumlah bit alamat yang isinya tidak berubah cukup banyak, seperti pada PIO di atas, maka untai dekodernya akan inenjadi rumit. 2. Teknik pengalamatan sebagian (Partial address decoding), yaitu dekoding alamat dengan menggunakan sebagian bit alamat terpenting yang tidak berubah untuk mengurangi jumlah masukan dari untai dekoder. Yang perlu diperhatikan adalah tidak diperbolehkan terjadinya saling tindih (overlapping) alamat, sehingga jangan sampai terjadi misalnya, bila kita ingin membaca RAM, ROM atau PIO juga ikut terbaca dan sebaliknya. Contoh dari mode pengalamatan sebagian dan mode pengalamatan penuh diperlihatkan pada Gambar 6.8, sedangkan untai perancangan yang lengkap dengan menggunakan prosesor Z80 diperlihatkan pada Gambar 6.9.
Universitas Gadjah Mada
15
Universitas Gadjah Mada
16