DATA SEGMENT
; IC 8255 Pertama
PORTA_1 EQU 00H ; Port A IC 8255 pertama
PORTB_1 EQU 02H ; Port B IC 8255 pertama
PORTC_1 EQU 04H ; Port C IC 8255 pertama
PORT_CON_1 EQU 06H ; Control Register IC 8255 pertama
; IC 8255 Kedua
PORTA_2 EQU 10H ; Port A IC 8255 kedua
PORTB_2 EQU 12H ; Port B IC 8255 kedua
PORTC_2 EQU 14H ; Port C IC 8255 kedua
PORT_CON_2 EQU 16H ; Control Register IC 8255 kedua
; IC 8255 Ketiga
PORTA_3 EQU 20H ; Port A IC 8255 ketiga
PORTB_3 EQU 22H ; Port B IC 8255 ketiga
PORTC_3 EQU 24H ; Port C IC 8255 ketiga
PORT_CON_3 EQU 26H ; Control Register IC 8255 ketiga
; Alamat ROM dan RAM dengan pemisahan Chip Select
ROM_ADDR EQU 8000H ; Alamat ROM (8000H - FFFFH, A15 = 1)
RAM0_ADDR EQU 0000H ; Alamat RAM_0 (0000H - 07FFH, A14 = 0, A13 = 0)
RAM1_ADDR EQU 2000H ; Alamat RAM_1 (2000H - 3FFFH, A14 = 0, A13 = 1)
DATA ENDS
CODE SEGMENT
MOV AX, DATA
MOV DS, AX
ORG 0000H
START:
; Konfigurasi IC 8255 Pertama
MOV DX, PORT_CON_1
MOV AL, 10010000B ; Mode 0: Port A input, Port B dan C output
OUT DX, AL
; Konfigurasi IC 8255 Kedua
MOV DX, PORT_CON_2
MOV AL, 10010000B ; Mode 0: Port A input, Port B dan C output
OUT DX, AL
; Konfigurasi IC 8255 Ketiga
MOV DX, PORT_CON_3
MOV AL, 10010000B ; Mode 0: Port A input, Port B dan C output
OUT DX, AL
; Inisialisasi RAM_0 dari ROM
MOV SI, ROM_ADDR ; Alamat awal ROM
MOV DI, RAM0_ADDR ; Alamat awal RAM_0 (6116)
MOV CX, 0800H ; Jumlah data untuk disalin (2KB)
COPY_LOOP_RAM0:
MOV AX, [SI] ; Baca data dari ROM
MOV [DI], AX ; Simpan data ke RAM_0
ADD SI, 2 ; Pindah ke data berikutnya di ROM
ADD DI, 2 ; Pindah ke data berikutnya di RAM
LOOP COPY_LOOP_RAM0 ; Ulangi hingga semua data disalin
; Inisialisasi RAM_1 dari ROM
MOV SI, ROM_ADDR ; Alamat awal ROM
MOV DI, RAM1_ADDR ; Alamat awal RAM_1 (6264)
MOV CX, 2000H ; Jumlah data untuk disalin (8KB)
COPY_LOOP_RAM1:
MOV AX, [SI] ; Baca data dari ROM
MOV [DI], AX ; Simpan data ke RAM_1
ADD SI, 2 ; Pindah ke data berikutnya di ROM
ADD DI, 2 ; Pindah ke data berikutnya di RAM_1
LOOP COPY_LOOP_RAM1 ; Ulangi hingga semua data disalin
MOV AL, 00H ; Inisialisasi AL untuk operasi selanjutnya
XX:
; Operasi pada IC 8255 Pertama
MOV DX, PORTA_1 ; Akses Port A IC 8255 pertama
IN AL, DX ; Baca data dari Port A
MOV DX, PORTC_1 ; Akses Port C IC 8255 pertama
OUT DX, AL ; Tulis data yang dibaca dari Port A ke Port C
MOV DX, PORTB_1 ; Akses Port B IC 8255 pertama
MOV AL, 00000000B ; Tulis data ke Port B
OUT DX, AL
; Delay
MOV CX, 0FFH
D1: LOOP D1
MOV DX, PORTB_1
MOV AL, 00000001B ; Ubah data yang ditulis ke Port B
OUT DX, AL
MOV CX, 0FFH
D2: LOOP D2
; Operasi pada IC 8255 Kedua
MOV DX, PORTA_2 ; Akses Port A IC 8255 kedua
IN AL, DX ; Baca data dari Port A
MOV DX, PORTC_2 ; Akses Port C IC 8255 kedua
OUT DX, AL ; Tulis data yang dibaca dari Port A ke Port C
MOV DX, PORTB_2 ; Akses Port B IC 8255 kedua
MOV AL, 00000000B ; Tulis data ke Port B
OUT DX, AL
; Delay
MOV CX, 0FFH
D3: LOOP D3
MOV DX, PORTB_2
MOV AL, 00000010B ; Ubah data yang ditulis ke Port B
OUT DX, AL
MOV CX, 0FFH
D4: LOOP D4
; Operasi pada IC 8255 Ketiga
MOV DX, PORTA_3 ; Akses Port A IC 8255 ketiga
IN AL, DX ; Baca data dari Port A
MOV DX, PORTC_3 ; Akses Port C IC 8255 ketiga
OUT DX, AL ; Tulis data yang dibaca dari Port A ke Port C
MOV DX, PORTB_3 ; Akses Port B IC 8255 ketiga
MOV AL, 00000000B ; Tulis data ke Port B
OUT DX, AL
; Delay
MOV CX, 0FFH
D5: LOOP D5
MOV DX, PORTB_3
MOV AL, 00000000B ; Ubah data yang ditulis ke Port B
OUT DX, AL
MOV CX, 0FFH
D6: LOOP D6
JMP XX ; Ulangi loop
CODE ENDS
END START
DATA SEGMENT
1. Definisi Port IC 8255 Pertama:
- `PORTA_1`: Alamat Port A IC 8255 pertama
(input).
- `PORTB_1`: Alamat Port B IC 8255 pertama
(output).
- `PORTC_1`: Alamat Port C IC 8255 pertama
(output).
- `PORT_CON_1`: Alamat Control
Register IC 8255 pertama.
2. Definisi Port IC 8255 Kedua dan Ketiga:
- Definisi alamat
port dan kontrol register untuk IC 8255 kedua dan ketiga dilakukan dengan cara
yang sama, yaitu `PORTA_2`, `PORTB_2`, `PORTC_2`, `PORT_CON_2` untuk IC kedua,
dan `PORTA_3`, `PORTB_3`, `PORTC_3`, `PORT_CON_3` untuk IC ketiga.
3. Definisi Alamat ROM dan RAM:
- `ROM_ADDR`:
Alamat ROM (8000H - FFFFH, A15 = 1).
- `RAM0_ADDR`:
Alamat RAM pertama (0000H - 07FFH, A14 = 0, A13 = 0).
- `RAM1_ADDR`:
Alamat RAM kedua (2000H - 3FFFH, A14 = 0, A13 = 1).
CODE SEGMENT
4. Inisialisasi Segmen Data:
- Memuat alamat
segmen data ke dalam register DS, agar dapat mengakses variabel yang telah
didefinisikan.
5. Konfigurasi IC 8255:
- IC 8255 Pertama:
- Mengatur Port A
sebagai input dan Port B serta C sebagai output (mode 0).
- IC 8255 Kedua dan
Ketiga:
- Konfigurasi
yang sama dilakukan untuk IC 8255 kedua dan ketiga, memastikan bahwa semua IC
siap untuk operasi input-output.
6. Inisialisasi
RAM dari ROM:
- RAM_0:
- Mengatur register SI untuk
menunjuk ke alamat ROM dan DI untuk RAM_0.
- Menggunakan
loop untuk menyalin 2KB data dari ROM ke RAM_0.
- RAM_1:
- Mengatur
register SI ke alamat ROM dan DI ke RAM_1.
- Menggunakan loop untuk menyalin 8KB data dari
ROM ke RAM_1.
7. Operasi
Input-Output pada IC 8255:
- Loop XX:
- Operasi
dilakukan berulang-ulang untuk setiap IC 8255.
- IC 8255 Pertama:
- Membaca data
dari Port A dan menulisnya ke Port C.
- Mengatur Port B
untuk menuliskan data default (0) dan kemudian mengubahnya menjadi 1 setelah
delay.
- Delay:
- Menggunakan
loop untuk menciptakan jeda waktu sebelum melanjutkan ke operasi berikutnya.
8. Operasi
Input-Output pada IC 8255 Kedua:
- Proses yang sama dilakukan untuk IC
8255 kedua, membaca data dari Port A dan menulis ke Port C, dengan pengaturan
yang sama untuk Port B.
9. Operasi
Input-Output pada IC 8255 Ketiga:
- Proses yang sama dilakukan untuk IC
8255 ketiga, membaca data dari Port A dan menulis ke Port C, serta mengatur
Port B.
10. Looping:
- Menggunakan `JMP
XX` untuk mengulangi proses input-output secara terus menerus, memungkinkan
sistem merespons perubahan input dari switch secara real-time.