	.DATA
	Org	50H
;TEMPLATE PEMBUATAN PROGRAM DENGAN ALDS UNTUK BIOS VERSI 2.7

;RAM Internal yang digunakan:

;ALAMAT YG DIGUNAKAN PROGRAM MONITOR
;20H hingga 27H untuk Variabel Program Monitor
;30H hingga 4FH untuk Buffer Perintah bagi Program Monitor
;Alamat-alamat ini, pengguna tetap dapat menggunakan, hanya tidak 
;akan terlihat nilainya bila dilakukan Dump Terminal

;ALAMAT YANG DIGUNAKAN OLEH RUTIN SIAP PAKAI
;28H untuk rutin delay
;29H,2AH untuk variabel rutin LCD Grafik
;2BH-51H untuk rutin pengambil file bitmap dari hyperterminal
;53H,54H untuk Serial EEPROM
;55H-74H untuk rutin aritmatika
;Alamat-alamat ini tetap dapat digunakan oleh pengguna selama rutin tersebut
;tidak dipanggil/digunakan

;===========================================================================
;RUTIN-RUTIN SIAP PAKAI
	.CODE

HexASCII2		EQU	00FAH
;Konversi Hexa ke 2 byte ASCII
;- Akumulator diisi bilangan hexa yang akan dikonversi
;Hasil:
;- Akumulator menyimpan nibble atas
;- Register B menyimpan nibble bawah

HexASCII1		EQU	0106H
;Konversi Hexa ke 1 byte ASCII
;- Akumulator diisi bilangan hexa yang akan dikonversi
;Hasil:
;- Akumulator  menyimpan nibble bawah


ASCII_Hex		EQU	0113H
;Konversi 2 byte ASCII ke hexa
;- Akumulator diisi nibble atas
;- Register B diisi nibble bawah
;Hasil:
;- Akumulator menyimpan hasil konversi


ASCII_Hex1		EQU	0123H
;Konversi 2 byte ASCII ke hexa
;- Akumulator diisi nibble atas
;- Register B diisi nibble bawah
;Hasil:
;- Akumulator menyimpan hasil konversi


Dec_DPTR		EQU	0130H
;Mengurangi isi dari Register DPTR

Capitalize		EQU	013CH
;Mengubah semua jenis huruf kecil menjadi huruf besar

Space_Code		EQU	014EH
;Mengirim kode spasi ke port serial

Writeext_memory		EQU	0157H
;Menulis data ke memori EEPROM
;- Akumulator berisi data yang akan ditulis
;- DPTR berisi alamat dari data yang akan ditulis

Delay_1detik		EQU	015CH
;Menunda waktu selama 1 detik (timer 0 digunakan)

Delay_500mS		EQU	0165H
;Menunda waktu selama 500 mS (timer 0 digunakan)

Delay_100mS		EQU	016EH
;Menunda waktu selama 100 mS (timer 0 digunakan)

Delay_75mS		EQU	0177H
;Menunda waktu selama 75 mS (timer 0 digunakan)

Delay_5mS		EQU	0180H
;Menunda waktu selama 5 mS (timer 0 digunakan)

ASCII_Out		EQU	0197H
;Mengirim data ke port serial dalam 2 byte ASCII
;- Akumulator diisi dengan data yang akan dikirim

Out_DPTR		EQU	01A0H
;Mengirim nilai DPTR dalam bentuk 4 byte ASCII ke port serial

Enter_Code		EQU	01ABH
;Mengirim kode <CR> ke port serial

Init_Serial		EQU	01B8H
;Inisialisasi Port Serial 9600 bps

Serial_Out		EQU	01C8H
;Kirim nilai akumulator ke port serial

Serial_In               EQU     01DAH
;Ambil data dari port serial dan simpan di akumulator

KirimPesan_Serial	EQU	01D8H
;Kirim data di alamat yang ditunjuk oleh DPTR hingga data 0F
;- DPTR diisi dengan alamat dari data yang akan dikirim
;- Memori yang diakses adalah memori CODE/PROGRAM

Filter                  EQU     01E2H
;Menentukan besaran data apakah berada di dalam atau di luar nilai setpoint
;- R7 diisi nilai max
;- R6 diisi nilai min
;- besaran data di akumulator
;Hasil:
;- Carry flag akan set bila besaran berada di luar nilai setpoint


;=============================================================================
; M1632 LCD

GeserDisplay_Kanan	EQU	0208H
;Menggeser tampilan LCD HD44780 ke kanan

GeserDisplay_Kiri	EQU	020FH
;Menggeser tampilan LCD HD44780 ke kiri

PosisiAwal_LCD		EQU	0216H
;Mengatur posisi cursor LCD ke posisi awal

GeserCursor_Kiri	EQU	021DH
;Menggeser Cursor LCD ke kiri

GeserCursor_Kanan	EQU	0224H
;Menggeser Cursor LCD ke kanan

KirimPesan_LCD		EQU	022BH
;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F
;- DPTR diisi dengan alamat awal data yang dikirim
;- Akhir data adalah 0FH

Init_LCD		EQU	0237H
;Inisialisasi LCD

Kirim_Perintah		EQU	0276H
;Mengirim data ke register perintah LCD
;- Data diisi di akumulator

Kirim_Karakter		EQU	0295H
;Mengirim data ke register data LCD
;- Data diisi di akumulator

Baris2_LCD		EQU	029FH
;Memindah posisi cursor ke baris 2

Baris1_LCD		EQU	02A4H
;=========================================================================
;KEYPAD
Ambil_Keypad		EQU	02C3H

;=========================================================================
;LCD GRAFIK

InitLCDGRP		EQU	0486H
;Inisialisasi LCD Grafik

SetTextHome		EQU	04BEH
;Mengatur posisi awal teks
;- Akumulator diisi nibble tinggi alamat memori text
;- Register B diisi nibble rendah alamat memori text

SetGrafikHome		EQU	04C4H
;Mengatur posisi awal tampilan grafik
;- Akumulator diisi nibble tinggi alamat memori grafik
;- Register B diisi nibble rendah alamat memori grafik

SetGrafikArea		EQU	04CAH
;Mengatur area tampilan Grafik
;- Akumulator diisi baris dari LCD grafik
;- Register B diisi kolom dari LCD Grafik

SetTextArea		EQU	04D0H
;Mengatur area tampilan Text
;- Akumulator diisi jumlah baris text
;- Register B diisi jumlah kolom text

TextON			EQU	04E0H
;Mengaktifkan tampilan teks

GrafikON		EQU	04E9H
;Mengaktifkan tampilan grafik

CursorONBlinkON		EQU	04F2H
;Mengaktifkan Cursor dan blinking

CursorONBlinkOFF	EQU	0513H
;Mengaktifkan cursor dan no blink

TextOFF			EQU	051CH
;Menonaktifkan teks

GrafikOFF		EQU	0525H
;Menonaktifkan grafik

KirimPerintah		EQU	0548H
;Mengirim data ke register perintah dari LCD Grafik

TungguStatus1		EQU	0575H
;Menunggu status penulisan data ke LCD grafik selesai

TungguStatusAWR		EQU	058BH
;Menunggu status penulisan data secara otomatis ke LCD Grafik selesai

TungguStatusAR		EQU	05A1H
;Menunggu status membaca data secara otomatis ke LCD Grafik selesai

SetPolaCursor		EQU	05B7H
;Mengatur pola cursor LCD

SetPosisiCursor		EQU	05C0H
;Mengatur posisi cursor LCD
;- Register B diisi baris
;- Akumulator diisi kolom

SetPointerAlamat	EQU	05C7H
;- Register B diisi alamat nibble tinggi
;- Akumulator diisi alamat nibble rendah

HapusMemori		EQU	05CEH
;Menghapus memori teks dan memori grafik

KirimKarakterLCD	EQU	05FDH
;Mengirim karakter ke LCD Grafik
;- R7 diisi data karakter
;- Akumulator diisi alamat nibble tinggi
;- Register B diisi alamat nibble rendah
;- Panggil subroutine set pointer alamat
;- Tulis CommandKarakter dengan data

KirimPesanLCD		EQU	0609H
;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F
;- DPTR diisi dengan alamat awal data yang dikirim
;- Akhir data adalah 0FH
;- Data di memori data (sinyal RD)

;===========================================================================
; AMBIL FILE GAMBAR DARI PORT SERIAL MELALUI HYPERTERMINAL
GetBitmapHPT            EQU     0620H
;- Ambil data bitmap melalui hyperterminal

;===========================================================================
; I2C SERIAL EEPROM
;Serial EEPROM
TulisSEE8b              EQU     07EFH
;Menulis data ke Serial EEPROM 8 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Variabel DataSEE diisi data yang akan ditulis

TulisSEE16b             EQU     0806H
;Menulis data ke Serial EEPROM 16 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- R6 diisi Word Address 2
;- Variabel DataSEE diisi data yang akan ditulis

BacaSEE16b              EQU     081CH
;Membaca data ke Serial EEPROM 16 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator berisi data yang telah dibaca

BacaSEE8b               EQU     0833H
;Membaca data ke Serial EEPROM 8 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator berisi data yang telah dibaca

BacaDataSEE             EQU     0874H
;Membaca 8 bit data I2C dari slave

KirimDataSEE            EQU     0899H
;Kirim 8 bit data I2C ke slave

PageSEE8bWrite          EQU     08C9H
;Menulis data ke Serial EEPROM 8 bit secara page mode (Flag F0 digunakan)
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator diisi data yang akan ditulis

PageSEE16bWrite         EQU     08D2H
;Menulis data ke Serial EEPROM 16 bit secara page mode (Flag F0 digunakan)
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator diisi data yang akan ditulis

;===========================================================================
; ARITMATIKA
LihatHasil		EQU	0923H
; Mengirim isi tabel yang ditunjuk oleh R0 ke port serial dalam bentuk 2 byte
; ASCII sebanyak 5 byte
; - R0 diisi dengan tabel yang ditunjuk

KonversiBilDasar	EQU	092DH
; Konversi hexa ke desimal
; - Data yang dikonversi ada di operand
; - Hasil konversi tersimpan di HexDec_Buff mulai dari digit terkecil
; - R6 = Jumlah digit yang terbentuk
;

CopyNilai		EQU	0991H
; Copy nilai dari tabel yang ditunjuk oleh R0 ke tabel yang ditunjuk oleh R1
; sebanyak 5 byte

Pembagian		EQU	099AH
; Operand/Pembagi = Hasil Bagi

HapusNilai		EQU	09CCH
; Hapus nilai yang ditunjuk oleh R0 sebanyak 5 byte

Perbandingan		EQU	09D4H
; Bandingkan nilai yang ditunjuk oleh R0 dengan yang ditunjuk oleh R1
; Carry flag set bila nilai yang ditunjuk oleh R1 lebih besar dari nilai
; yang ditunjuk oleh R0

Pengurangan		EQU	09DEH
; Kurangi nilai pada operand dengan nilai operand 2

Perkalian		EQU	09EDH
; Operand x Pengali = Hasil Kali

Penambahan		EQU	0A0EH
; Tambahkan nilai pada operand dengan nilai operand 2

OutDesimal		EQU	0A1DH
; Tampilkan nilai hasil konversi ke desimal

;==========================================================================
; VARIABEL-VARIABEL ARITMATIKA
Operand		EQU	055H
Operand2        EQU     059H
Pembagi         EQU     05DH    ;Tempat variabel pembagi
HasilBagi       EQU     061H    ;Tempat hasil pembagian
SisaBagi        EQU     065H    ;Tempat sisa dari proses pembagian
Pengali         EQU     05DH    ;Tempat variabel pengali
HasilKali       EQU     061H    ;Tempat hasil perkalian
HexDec_Buff     EQU     06AH    ;Tempat hasil konversi hexa ke desimal

ROM			EQU	2000H



