     ;********* PROGRAM PEMBUAT GAMBAR PADA LCD GRAFIK 240 X 64 **************
     ; Design by : Paulus Andi Nalwan, ST
     ; electronic@sby.centrin.net.id
     ;
     ; DELTA ELECTRONIC
     ; Kompleks Ruko Manyar Megah Indah Plaza Blok D-22
     ; Ngagel Jaya Selatan
     ; Phone: 62-31-5020210
     ; Fax: 62-31-5054561
     ; Surabaya 60284
     ; http://www.delta-electronic.com
     ;
     ; Assembly by : ALDS v3.21
     ;*********************

 0000                 .DATA 
 0050                 ORG   50H
 0050 PTRH:           DS    1
 0051 PTRL:           DS    1
 0052 CommandKarakter:DS    1
 0053 PointerGrafik:  DS    2
 0055 PointerMemori:  DS    2

 0000                 .CODE 
 0028=JumlahKolom     EQU   40
 0040=JumlahBaris     EQU   64

     ;Data-data Inisialisasi LCD
 00C4=TulisADP        EQU   0C4H
 00C5=BacaADP         EQU   0C5H

 00B0=AWRON           EQU   0B0H
 0024=ADPSET          EQU   024H
 00B2=AWROFF          EQU   0B2H


 00FA=HexASCII2       EQU   00FAH
 0113=ASCII_Hex       EQU   0113H
 0130=Dec_DPTR        EQU   0130H
 013C=Capitalize      EQU   013CH
 01D8=KirimPesan_SeriaEQU   01D8H
 0157=Writeext_memory EQU   0157H
 01D0=Serial_In       EQU   01D0h
 01C8=Serial_Out      EQU   01C8h
 0197=ASCII_Out       EQU   0197H
 01AB=Enter_Code      EQU   01ABH

 0486=InitLCDGRP      EQU   0486H
 052E=TulisDataLCD    EQU   052EH
 0548=KirimPerintah   EQU   0548H
 0557=KirimData2x     EQU   0557H
 0575=TungguStatus1   EQU   0575H
 058B=TungguStatusAWR EQU   058BH
 05C7=SetPointerAlamatEQU   05C7H
 0609=KirimPesanLCD   EQU   0609H

 2000=ROM             EQU   2000H
 8000=DP              EQU   8000H                  ;

 007F=FlagHapus       BIT   7FH

 2000                 ORG   ROM                    ;Reset Vector
 2000 01 24    =2024  AJMP  Start                  ;
 2003                 ORG   ROM+3H                 ;External Interrupt 0 Vector
 2003 32              RETI  
 200B                 ORG   ROM+0BH                ;Timer 0 Interrupt Vector
 200B 32              RETI                         ;
 2013                 ORG   ROM+13H                ;External Interrupt 1 Vector
 2013 32              RETI                         ;
 201B                 ORG   ROM+1BH                ;Timer 1 Interrupt Vector
 201B 32              RETI                         ;
 2023                 ORG   ROM+23H                ;Serial Interrupt Vector
 2023 32              RETI                         ;


 00F0=KolomPixel      EQU   240

 2024            Start:
 2024 12 04 86 =0486  LCALL InitLCDGRP             ;Inisial LCD Grafik
 2027 12 23 9B =239B  LCALL HapusMemori            ;Hapus Layar LCD

 202A            LoopMenuUtama:
 202A 12 22 ED =22ED  LCALL Menu                   ;Tampilkan Menu Teks
 202D 90 23 C9        MOV   DPTR,#PesanMenuUtama
 2030 12 01 D8 =01D8  LCALL KirimPesan_Serial
 2033            Loop2MenuUtama:
 2033 12 01 D0 =01D0  LCALL Serial_In
 2036 12 01 C8 =01C8  LCALL Serial_Out
 2039 90 23 FC        MOV   DPTR,#TabelMenuUtama   ;DPTR menuju ke tabel perintah
 203C F5 F0           MOV   B,A
 203E 31 D2    =21D2  ACALL CariPerintah1B         ;Jalankan subrutin ini
 2040 40 01    =2043  JC    $+3
 2042 73              JMP   @A+DPTR                ;Bila ditemukan maka langsung ke

 2043 74 08           MOV   A,#08H
 2045 12 01 C8 =01C8  LCALL Serial_Out
 2048 74 20           MOV   A,#' '
 204A 12 01 C8 =01C8  LCALL serial_Out
 204D 74 08           MOV   A,#08H
 204F 12 01 C8 =01C8  LCALL Serial_Out
 2052 01 33    =2033  AJMP  Loop2MenuUtama

 2054            SetKoordinat:
 2054 D0 82           POP   DPL
 2056 D0 83           POP   DPH

 2058            BuatGambar:
 2058 90 25 05        MOV   DPTR,#PesanKoordinat
 205B 12 01 D8 =01D8  LCALL KirimPesan_Serial
 205E 12 22 2F =222F  LCALL AmbilSerial2B
 2061 F5 83           MOV   DPH,A
 2063 12 22 2F =222F  LCALL AmbilSerial2B
 2066 F5 82           MOV   DPL,A
 2068 12 01 AB =01AB  LCALL Enter_Code

 206B C0 83           PUSH  DPH
 206D C0 82           PUSH  DPL
 206F 90 24 06        MOV   DPTR,#PesanBuatGambar
 2072 12 01 D8 =01D8  LCALL KirimPesan_Serial
 2075 D0 82           POP   DPL
 2077 D0 83           POP   DPH
 2079 C2 7F           CLR   FlagHapus

 207B            LoopBuatGambar:
 207B 20 7F 1D =209B  JB    FlagHapus,HapusPixel
 207E C0 83           PUSH  DPH
 2080 C0 82           PUSH  DPL
 2082 12 22 5F =225F  LCALL SetbGrafis
 2085 D0 82           POP   DPL
 2087 D0 83           POP   DPH

 2089            Loop3BuatGambar:
 2089 C0 83           PUSH  DPH
 208B C0 82           PUSH  DPL

 208D            Loop2BuatGambar:
 208D 12 01 D0 =01D0  LCALL Serial_In
 2090 F5 F0           MOV   B,A
 2092 90 24 E9        MOV   DPTR,#TabelBuatGambar
 2095 12 21 D2 =21D2  LCALL CariPerintah1B
 2098 40 F3    =208D  JC    Loop2BuatGambar
 209A 73              JMP   @A+DPTR

 209B            HapusPixel:
 209B C0 83           PUSH  DPH
 209D C0 82           PUSH  DPL
 209F 12 22 64 =2264  LCALL ClrGrafis
 20A2 D0 82           POP   DPL
 20A4 D0 83           POP   DPH
 20A6 01 89    =2089  AJMP  Loop3BuatGambar

 20A8            HapusTitik:
 20A8 D0 82           POP   DPL
 20AA D0 83           POP   DPH
 20AC D2 7F           SETB  FlagHapus
 20AE 01 7B    =207B  AJMP  LoopBuatGambar

 20B0            Tulistitik:
 20B0 D0 82           POP   DPL
 20B2 D0 83           POP   DPH
 20B4 C2 7F           CLR   FlagHapus
 20B6 01 7B    =207B  AJMP  LoopBuatGambar

 20B8            CursorAtas:
 20B8 D0 82           POP   DPL
 20BA D0 83           POP   DPH
 20BC 31 C6    =21C6  ACALL KeAtas
 20BE 01 7B    =207B  AJMP  LoopBuatGambar

 20C0            CursorBawah:
 20C0 D0 82           POP   DPL
 20C2 D0 83           POP   DPH
 20C4 31 BB    =21BB  ACALL KeBawah
 20C6 01 7B    =207B  AJMP  LoopBuatGambar

 20C8            CursorKiri:
 20C8 D0 82           POP   DPL
 20CA D0 83           POP   DPH
 20CC 31 B5    =21B5  ACALL KeKiri
 20CE 01 7B    =207B  AJMP  LoopBuatGambar

 20D0            CursorKanan:
 20D0 D0 82           POP   DPL
 20D2 D0 83           POP   DPH
 20D4 31 B9    =21B9  ACALL KeKanan
 20D6 01 7B    =207B  AJMP  LoopBuatGambar

 20D8            BuatGambarSelesa:
 20D8 D0 82           POP   DPL
 20DA D0 83           POP   DPH
 20DC 31 1A    =211A  ACALL SimpanGambar
 20DE 12 23 9B =239B  LCALL HapusMemori
 20E1 01 2A    =202A  AJMP  LoopMenuUtama

 20E3            LihatGambar:
 20E3 90 25 14        MOV   DPTR,#PesanDaftarGambar
 20E6 12 01 D8 =01D8  LCALL KirimPesan_Serial

 20E9 12 21 F6 =21F6  LCALL DaftarFile
 20EC 40 0E    =20FC  JC    FileKosong
 20EE 90 25 1B        MOV   DPTR,#PesanPilihan
 20F1 12 01 D8 =01D8  LCALL KirimPesan_Serial
 20F4 51 2F    =222F  ACALL AmbilSerial2B
 20F6 F5 57           MOV   NomorFile,A
 20F8 31 6D    =216D  ACALL DisplayGambar
 20FA 01 2A    =202A  AJMP  LoopMenuUtama

 20FC            FileKosong:
 20FC 90 25 36        MOV   DPTR,#PesanKosong
 20FF 12 01 D8 =01D8  LCALL KirimPesan_Serial
 2102 01 2A    =202A  AJMP  LoopMenuUtama

 2104            HapusGambar:
 2104 90 28 00        MOV   DPTR,#MemoriGambar
 2107            LoopHapusgambar:
 2107 74 00           MOV   A,#00H
 2109 12 23 C3 =23C3  LCALL TulisMemori
 210C A3              INC   DPTR
 210D E5 83           MOV   A,DPH
 210F B4 40 F5 =2107  CJNE  A,#40H,LoopHapusGambar
 2112 90 25 28        MOV   DPTR,#PesanTerhapus
 2115 12 01 D8 =01D8  LCALL KirimPesan_Serial
 2118 01 2A    =202A  AJMP  LoopMenuUtama


     ;***** SUBROUTINES ******

 211A            SimpanGambar:
 211A 12 22 53 =2253  LCALL CariMemoriKosong
 211D 85 82 55        MOV   PointerMemori,DPL
 2120 85 83 56        MOV   PointerMemori+1,DPH
 2123 90 01 E0        MOV   DPTR,#01E0H

 2126            LoopScanningLCD:
 2126 75 52 C5        MOV   CommandKarakter,#BacaADP
 2129 12 23 5D =235D  LCALL BacaMemoriLCD
 212C 60 28    =2156  JZ    DataKosong
 212E C0 83           PUSH  DPH
 2130 C0 82           PUSH  DPL
 2132 C0 82           PUSH  DPL
 2134 C0 83           PUSH  DPH
 2136 85 55 82        MOV   DPL,PointerMemori
 2139 85 56 83        MOV   DPH,PointerMemori+1
 213C 12 23 C3 =23C3  LCALL TulisMemori
 213F A3              INC   DPTR
 2140 D0 E0           POP   A
 2142 12 23 C3 =23C3  LCALL TulisMemori
 2145 A3              INC   DPTR
 2146 D0 E0           POP   A
 2148 12 23 C3 =23C3  LCALL TulisMemori
 214B A3              INC   DPTR

 214C 85 82 55        MOV   PointerMemori,DPL
 214F 85 83 56        MOV   PointerMemori+1,DPH
 2152 D0 82           POP   DPL
 2154 D0 83           POP   DPH
 2156            DataKosong:
 2156 A3              INC   DPTR
 2157 E5 83           MOV   A,DPH
 2159 B4 0B CA =2126  CJNE  A,#0BH,LoopScanningLCD
 215C E5 82           MOV   A,DPL
 215E B4 E0 C5 =2126  CJNE  A,#0E0H,LoopScanningLCD

 2161 85 55 82        MOV   DPL,PointerMemori
 2164 85 56 83        MOV   DPH,PointerMemori+1
 2167 74 FF           MOV   A,#0FFH
 2169 12 23 C3 =23C3  LCALL TulisMemori
 216C 22              RET   

 216D            DisplayGambar:
 216D D2 D5           SETB  F0
 216F 75 54 01        MOV   PointerGrafik+1,#01H
 2172 75 53 E0        MOV   PointerGrafik,#0E0H
 2175 90 28 00        MOV   DPTR,#MemoriGambar

 2178            LoopCariFile:
 2178 D5 57 02 =217D  DJNZ  NomorFile,BelumKetemu
 217B C2 D5           CLR   F0

 217D            BelumKetemu:
 217D            LoopDisplayGamba:
 217D 12 23 C7 =23C7  LCALL BacaMemori             ;Baca Data
 2180 A3              INC   DPTR                   ;
 2181 B4 FF 01 =2185  CJNE  A,#0FFH,FileGambarBelumSelesai
 2184 22              RET   

 2185            FileGambarBelumS:
 2185 20 D5 F0 =2178  JB    F0,LoopCariFile

 2188 C0 E0           PUSH  A
 218A 12 23 C7 =23C7  LCALL BacaMemori             ;Baca DPH LCD
 218D A3              INC   DPTR
 218E F5 54           MOV   PointerGrafik+1,A
 2190 12 23 C7 =23C7  LCALL BacaMemori
 2193 A3              INC   DPTR
 2194 F5 53           MOV   PointerGrafik,A
 2196 D0 E0           POP   A
 2198 75 52 C4        MOV   CommandKarakter,#TulisADP
 219B C0 83           PUSH  DPH
 219D C0 82           PUSH  DPL
 219F 85 54 83        MOV   DPH,PointerGrafik+1
 21A2 85 53 82        MOV   DPL,PointerGrafik
 21A5 12 23 7A =237A  LCALL TulisMemoriLCD

 21A8 A3              INC   DPTR
 21A9 85 83 54        MOV   PointerGrafik+1,DPH
 21AC 85 82 53        MOV   PointerGrafik,DPL
 21AF D0 82           POP   DPL
 21B1 D0 83           POP   DPH
 21B3 21 7D    =217D  AJMP  LoopDisplayGambar


 21B5            KeKiri:
 21B5 12 01 30 =0130  LCALL Dec_DPTR
 21B8 22              RET   

 21B9            KeKanan:
 21B9 A3              INC   DPTR
 21BA 22              RET   

 21BB            KeBawah:
 21BB E5 82           MOV   A,DPL
 21BD 24 F0           ADD   A,#KolomPixel
 21BF 50 02    =21C3  JNC   Tidak2TambahDPH
 21C1 05 83           INC   DPH
 21C3            Tidak2TambahDPH:
 21C3 F5 82           MOV   DPL,A
 21C5 22              RET   

 21C6            KeAtas:
 21C6 C3              CLR   C
 21C7 E5 82           MOV   A,DPL
 21C9 94 F0           SUBB  A,#KolomPixel
 21CB 50 02    =21CF  JNC   TidakKurangiDPH
 21CD 15 83           DEC   DPH
 21CF            TidakKurangiDPH:
 21CF F5 82           MOV   DPL,A
 21D1 22              RET   

 21D2                 .CODE 
 21D2                 ORG   *
     ;---------- Cari Perintah 1 byte ---------
     ; Subroutine ini berfungsi untuk menjalankan program tertentu sesuai dari
     ; 1 byte perintah yang diterima
     ;
     ; Hasil dari subroutine ini:
     ; - DPTR yang berisi alamat program yang harus dieksekusi bila carry
     ;   flag clear
     ; - Carry Flag Set bila perintah tidak terdapat dalam tabel
     ;
     ; DPTR diisi alamat Tabel Perintah
     ; Formasi Tabel Perintah:
     ; DB Perintah 1
     ; DW Label 1 lokasi program yang dieksekusi
     ;
     ; DB Perintah 2
     ; DW Label 2 lokasi program yang dieksekusi
     ;
     ; DB 0
     ;
     ; CONTOH
     ; TabelPerintah:
     ; DB 'A'
     ; DW KarakterA
     ;
     ; DB 'B'
     ; DW KarakterB
     ; DB AkhirtabelPerintah
     ;
     ;KarakterA:
     ;  ........
     ; ........
     ;KarakterB:
     ; ........
     ; ........
     ;
     ;Contoh Penggunaan:
     ;Start:
     ; Mov B,#'A'   ;Isi B dengan perintah 'A'
     ; Mov DPTR,#TabelPerintah ;DPTR menuju ke tabel perintah
     ; Acall CariPerintah1B  ;Jalankan subrutin ini
     ; Jc Start   ;Bila tidak ditemukan maka looping
     ;     ;lagi ke label start
     ; Jmp @A+DPTR   ;Bila ditemukan maka langsung ke
     ;     ;label yang dieksekusi

 21D2            CariPerintah1B:
 21D2            LoopCariPerintah:
 21D2 74 00           MOV   A,#00H
 21D4 93              MOVC  A,@A+DPTR
 21D5 60 0B    =21E2  JZ    PerintahTidakKetemu
 21D7 C3              CLR   C
 21D8 95 F0           SUBB  A,B
 21DA 60 08    =21E4  JZ    PerintahKetemu
 21DC A3              INC   DPTR
 21DD A3              INC   DPTR
 21DE A3              INC   DPTR
 21DF 02 21 D2 =21D2  LJMP  LoopCariPerintah

 21E2            PerintahTidakKet:
 21E2 D3              SETB  C
 21E3 22              RET   

 21E4            PerintahKetemu:
 21E4 A3              INC   DPTR
     ; Movx A,@DPTR
 21E5 74 00           MOV   A,#00H
 21E7 93              MOVC  A,@A+DPTR
 21E8 A3              INC   DPTR
 21E9 C0 E0           PUSH  A
 21EB 74 00           MOV   A,#00H
 21ED 93              MOVC  A,@A+DPTR
 21EE F5 83           MOV   DPH,A
 21F0 D0 82           POP   DPL
 21F2 74 00           MOV   A,#00H
 21F4 C3              CLR   C
 21F5 22              RET   

     ;- Kalau ada file maka carry flag clear
     ;- Kalau file tidak ada maka carry flag set
 21F6            DaftarFile:
 21F6 90 28 00        MOV   DPTR,#MemoriGambar
 21F9 75 57 01        MOV   NomorFile,#01H
 21FC 12 23 C7 =23C7  LCALL BacaMemori
 21FF 60 2A    =222B  JZ    TidakAdaFile
 2201            LoopDaftarFile:
 2201 A3              INC   DPTR
 2202 A3              INC   DPTR
 2203 A3              INC   DPTR

 2204 12 23 C7 =23C7  LCALL BacaMemori
 2207 B4 FF F7 =2201  CJNE  A,#0FFH,LoopDaftarFile
 220A 12 01 AB =01AB  LCALL Enter_Code
 220D E5 57           MOV   A,NomorFile
 220F 12 01 97 =0197  LCALL ASCII_Out
 2212 05 57           INC   NomorFile
 2214 A3              INC   DPTR
 2215 A3              INC   DPTR
 2216 A3              INC   DPTR
 2217 12 23 C7 =23C7  LCALL BacaMemori
 221A 60 11    =222D  JZ    DaftarFileSelesai
 221C A3              INC   DPTR
 221D 41 01    =2201  AJMP  LoopDaftarFile

 221F            DataBerikutnya:
 221F A3              INC   DPTR
 2220 12 01 A0 =01A0  LCALL 1A0H
 2223 A3              INC   DPTR
 2224 12 01 A0 =01A0  LCALL 1A0H
 2227 41 27    =2227  AJMP  $
 2229 41 01    =2201  AJMP  LoopDaftarFile

 222B            TidakAdaFile:
 222B D3              SETB  C
 222C 22              RET   

 222D            DaftarFileSelesa:
 222D C3              CLR   C
 222E 22              RET   


 222F            AmbilSerial2B:
 222F 12 01 D0 =01D0  LCALL Serial_In
 2232 12 01 3C =013C  LCALL Capitalize
 2235 12 01 C8 =01C8  LCALL Serial_Out
 2238 C0 E0           PUSH  A
 223A 12 01 D0 =01D0  LCALL Serial_In
 223D 12 01 3C =013C  LCALL Capitalize
 2240 12 01 C8 =01C8  LCALL serial_Out
 2243 F5 F0           MOV   B,A
 2245 D0 E0           POP   A
 2247 12 01 13 =0113  LCALL ASCII_Hex
 224A 22              RET   

 224B            IsiAngka2B:
 224B 51 2F    =222F  ACALL AmbilSerial2B
 224D F6              MOV   @R0,A
 224E 18              DEC   R0
 224F 51 2F    =222F  ACALL AmbilSerial2B
 2251 F6              MOV   @R0,A
 2252 22              RET   

 0057                 .DATA 
 0057 NomorFile:      DS    1
 2253                 .CODE 

 2253            CariMemoriKosong:
 2253 90 28 00        MOV   DPTR,#MemoriGambar

 2256            LoopCariMemoriKo:
 2256 12 23 C7 =23C7  LCALL BacaMemori
 2259 60 03    =225E  JZ    MemoriKosongKetemu
 225B A3              INC   DPTR
 225C 41 56    =2256  AJMP  LoopCariMemoriKosong

 225E            MemoriKosongKete:
 225E 22              RET   


 225F            SetbGrafis:
 225F 51 80    =2280  ACALL DPTRBitAddress
 2261 51 C2    =22C2  ACALL SetPixel
 2263 22              RET   

 2264            ClrGrafis:
 2264 51 80    =2280  ACALL DPTRBitAddress
 2266 51 B7    =22B7  ACALL ClrPixel
 2268 22              RET   

 2269            ReadPixel:
 2269 90 00 06        MOV   DPTR,#06H
 226C 51 80    =2280  ACALL DPTRBitAddress
 226E E5 82           MOV   A,DPL
 2270 85 83 F0        MOV   B,DPH
 2273 12 05 C7 =05C7  LCALL SetPointerAlamat
 2276 74 C4           MOV   A,#TulisADP
 2278 12 05 48 =0548  LCALL KirimPerintah
 227B 90 80 00        MOV   DPTR,#DP
 227E E0              MOVX  A,@DPTR
 227F 22              RET   


     ;********* KONVERSI DPTR KE BIT ADDRESS ***********
     ;DPTR disimpan di PTR
     ;PTR dibagi 6
     ;Hasil bit address disimpan di DPTR dan Akumulator
     ;DPTR = Hasil bagi PTR dg 6, akumulator jumlah pergeseran titik

 2280            DPTRBitAddress:
 2280 C0 D0           PUSH  PSW
 2282 85 83 50        MOV   PTRH,DPH
 2285 85 82 51        MOV   PTRL,DPL
 2288 90 01 E0        MOV   DPTR,#01E0H

 228B            LoopDPTRBitAddre:
 228B C3              CLR   C
 228C E5 51           MOV   A,PTRL
 228E 60 19    =22A9  JZ    LihatPTRH

 2290            ProsesKurangi:
 2290 94 06           SUBB  A,#06
 2292 40 05    =2299  JC    PTRL<6
 2294 F5 51           MOV   PTRL,A
 2296 A3              INC   DPTR
 2297 41 8B    =228B  AJMP  LoopDPTRBitAddress

 2299            PTRL<6:
 2299 C3              CLR   C
 229A E5 50           MOV   A,PTRH
 229C 60 14    =22B2  JZ    DPTRBitSelesai
 229E E5 51           MOV   A,PTRL
 22A0 94 06           SUBB  A,#06
 22A2 F5 51           MOV   PTRL,A

 22A4 A3              INC   DPTR
 22A5 15 50           DEC   PTRH
 22A7 41 8B    =228B  AJMP  LoopDPTRBitAddress

 22A9            LihatPTRH:
 22A9 C3              CLR   C
 22AA E5 50           MOV   A,PTRH
 22AC 60 04    =22B2  JZ    DPTRBitSelesai
 22AE E5 51           MOV   A,PTRL
 22B0 41 90    =2290  AJMP  ProsesKurangi

 22B2            DPTRBitSelesai:
 22B2 E5 51           MOV   A,PTRL
 22B4 D0 D0           POP   PSW
 22B6 22              RET   
     ;********* End of DPTR Bit Address **********



     ;*********** SET/CLR PIXEL PADA POSISI BIT ADDRESS *******
     ; Setiap byte memori data grafik terdiri dari 6 bit, sehingga untuk 8 byte
     ; memori contohnya, mempunyai 48 bit address
     ; Alamat memori ditunjuk oleh DPTR
     ; Posisi bit ditentukan oleh akumulator
     ; Akumulator, pada subroutine ini diubah sebagai berikut:
     ; 00 = FD, bit ke 5 (pixel paling kiri dari setiap blok)
     ; 01 = FC, bit ke 4
     ; 02 = FB, bit ke 3
     ; 03 = FA, bit ke 2
     ; 04 = F9, bit ke 1
     ; 05 = F8, bit ke 0

 22B7            ClrPixel:
 22B7 F5 F0           MOV   B,A
 22B9 74 05           MOV   A,#05H
 22BB C3              CLR   C
 22BC 95 F0           SUBB  A,B
 22BE 44 F0           ORL   A,#11110000b
 22C0 41 CB    =22CB  AJMP  EksekusiPixel

 22C2            SetPixel:
 22C2 F5 F0           MOV   B,A
 22C4 74 05           MOV   A,#05
 22C6 C3              CLR   C
 22C7 95 F0           SUBB  A,B
 22C9 44 F8           ORL   A,#11111000b

 22CB            EksekusiPixel:
 22CB C0 E0           PUSH  A
 22CD 74 B2           MOV   A,#AWROFF
 22CF 12 05 48 =0548  LCALL KirimPerintah
 22D2 E5 82           MOV   A,DPL
 22D4 85 83 F0        MOV   B,DPH
 22D7 12 05 C7 =05C7  LCALL SetPointerAlamat
 22DA D0 E0           POP   A
 22DC 12 05 48 =0548  LCALL KirimPerintah
 22DF 22              RET   

 22E0            LebihKecil6?:
 22E0 E5 82           MOV   A,DPL
 22E2 B4 07 00 =22E5  CJNE  A,#07,LihatC
 22E5            LihatC:
 22E5 50 05    =22EC  JNC   Kembali
 22E7 E5 83           MOV   A,DPH
 22E9 60 01    =22EC  JZ    Kembali
 22EB C3              CLR   C

 22EC            Kembali:
 22EC 22              RET   

     ********************************
     ;*** SUBROUTINE PENAMPIL MENU TEKS *******
     ; Bagian tempat pengguna dapat mengatur koordinat dan isi teks yang ditampilkan
 22ED            Menu:
 22ED 90 23 2E        MOV   DPTR,#PesanFungsi
 22F0 74 35           MOV   A,#53
 22F2 75 F0 00        MOV   B,#00
 22F5 12 06 09 =0609  LCALL KirimPesanLCD
 22F8 74 B2           MOV   A,#AWROFF
 22FA 12 05 48 =0548  LCALL KirimPerintah

 22FD 90 23 3C        MOV   DPTR,#PesanFungsi1
 2300 74 83           MOV   A,#131
 2302 75 F0 00        MOV   B,#00H
 2305 12 06 09 =0609  LCALL KirimPesanLCD
 2308 74 B2           MOV   A,#AWROFF
 230A 12 05 48 =0548  LCALL KirimPerintah

 230D 90 23 47        MOV   DPTR,#PesanFungsi2
 2310 74 AB           MOV   A,#171
 2312 75 F0 00        MOV   B,#00H
 2315 12 06 09 =0609  LCALL KirimPesanLCD
 2318 74 B2           MOV   A,#AWROFF
 231A 12 05 48 =0548  LCALL KirimPerintah

 231D 90 23 52        MOV   DPTR,#PesanFungsi3
 2320 74 D3           MOV   A,#211
 2322 75 F0 00        MOV   B,#00H
 2325 12 06 09 =0609  LCALL KirimPesanLCD
 2328 74 B2           MOV   A,#AWROFF
 232A 12 05 48 =0548  LCALL KirimPerintah
 232D 22              RET   

 232E            PesanFungsi:
 232E 44 41 46        DB    'DAFTAR FUNGSI',00

 233C            PesanFungsi1:
 233C 46 75 6E        DB    'Fungsi 1 :',00

 2347            PesanFungsi2:
 2347 46 75 6E        DB    'Fungsi 2 :',00

 2352            PesanFungsi3:
 2352 46 75 6E        DB    'Fungsi 3 :',00


     ;********** SUBROUTINE2 CONTROL WORD **********
     ; - Mengatur posisi dan area teks
     ; - Mengatur posisi dan area grafik



     ;******** SUBROUTINE MEMBACA/MENULIS ISI MEMORI LCD *******
     ; - Alamat Memori ditunjuk oleh DPTR
     ; - CommandKarakter harus diatur

 235D            BacaMemoriLCD:
 235D C0 83           PUSH  DPH
 235F C0 82           PUSH  DPL
 2361 E5 82           MOV   A,DPL
 2363 85 83 F0        MOV   B,DPH
 2366 12 05 C7 =05C7  LCALL SetPointerAlamat
 2369 12 05 75 =0575  LCALL TungguStatus1
 236C E5 52           MOV   A,CommandKarakter
 236E 12 05 48 =0548  LCALL KirimPerintah
 2371 90 80 00        MOV   DPTR,#DP
 2374 E0              MOVX  A,@DPTR
 2375 D0 82           POP   DPL
 2377 D0 83           POP   DPH
 2379 22              RET   

 237A            TulisMemoriLCD:
 237A C0 83           PUSH  DPH
 237C C0 82           PUSH  DPL
 237E C0 E0           PUSH  A
 2380 E5 82           MOV   A,DPL
 2382 85 83 F0        MOV   B,DPH
 2385 12 05 C7 =05C7  LCALL SetPointerAlamat
 2388 12 05 75 =0575  LCALL TungguStatus1
 238B 90 80 00        MOV   DPTR,#DP
 238E D0 E0           POP   A
 2390 F0              MOVX  @DPTR,A
 2391 E5 52           MOV   A,CommandKarakter
 2393 12 05 48 =0548  LCALL KirimPerintah
 2396 D0 82           POP   DPL
 2398 D0 83           POP   DPH
 239A 22              RET   


     ;******* SUBROUTINE MENGHAPUS TOTAL DATA LCD *********
 239B            HapusMemori:
 239B 75 F0 00        MOV   B,#00H
 239E 74 00           MOV   A,#00H
 23A0 12 05 57 =0557  LCALL KirimData2x
 23A3 74 24           MOV   A,#ADPSET
 23A5 12 05 48 =0548  LCALL KirimPerintah

 23A8 74 B0           MOV   A,#AWRON
 23AA 12 05 48 =0548  LCALL KirimPerintah

 23AD 7E 28           MOV   R6,#JumlahKolom
 23AF            Loop2HapusLCD:
 23AF 7F 00           MOV   R7,#Jumlahbaris*8

 23B1            LoopHapusLCD:
 23B1 74 00           MOV   A,#00H
 23B3 12 05 2E =052E  LCALL TulisDataLCD
 23B6 12 05 8B =058B  LCALL TungguStatusAWR
 23B9 DF F6    =23B1  DJNZ  R7,LoopHapusLCD
 23BB DE F2    =23AF  DJNZ  R6,Loop2HapusLCD
 23BD 74 B2           MOV   A,#AWROFF
 23BF 12 05 48 =0548  LCALL KirimPerintah
 23C2 22              RET   

 23C3            TulisMemori:
 23C3 12 01 57 =0157  LCALL Writeext_Memory
 23C6 22              RET   

 23C7            BacaMemori:
 23C7 E0              MOVX  A,@DPTR
 23C8 22              RET   

 23C9            PesanMenuUtama:
 23C9 31 2E 20        DB    '1. Buat Gambar',0AH,0DH
 23D9 32 2E 20        DB    '2. Lihat Gambar',0AH,0DH
 23EA 33 2E 20        DB    '3. Hapus Gambar',0AH,0DH,0FH

 23FC            TabelMenuUtama:
 23FC 31              DB    '1'
 23FD 58 20           DW    BuatGambar
 23FF 32              DB    '2'
 2400 E3 20           DW    LihatGambar
 2402 33              DB    '3'
 2403 04 21           DW    HapusGambar
 2405 00              DB    0

 2406            PesanBuatGambar:
 2406 4E 75 6D        DB    'Num Lock 8 : Cursor ke atas',0AH,0DH
 2423 4E 75 6D        DB    'Num Lock 4 : Cursor ke kiri',0AH,0DH
 2440 4E 75 6D        DB    'Num Lock 2 : Cursor ke bawah',0AH,0DH
 245E 4E 75 6D        DB    'Num Lock 6 : Cursor ke kanan',0AH,0DH
 247C 45 6E 74        DB    'Enter     : Simpan Gambar',0AH,0DH
 2497 54 61 62        DB    'Tab     : Set Koordinat',0AH,0DH
 24B0 4E 75 6D        DB    'Num Lock Del  : Mode Hapus',0AH,0DH
 24CC 4E 75 6D        DB    'Num Lock Ins  : Mode Tulis',0AH,0DH
 24E8 0F              DB    0FH

 24E9            TabelBuatGambar:
 24E9 38              DB    '8'
 24EA B8 20           DW    CursorAtas
 24EC 34              DB    '4'
 24ED C8 20           DW    CursorKiri
 24EF 32              DB    '2'
 24F0 C0 20           DW    CursorBawah
 24F2 36              DB    '6'
 24F3 D0 20           DW    CursorKanan
 24F5 0D              DB    0DH
 24F6 D8 20           DW    BuatGambarSelesai
 24F8 37              DB    '7'
 24F9 54 20           DW    SetKoordinat
 24FB 2E              DB    '.'
 24FC A8 20           DW    HapusTitik
 24FE 30              DB    '0'
 24FF B0 20           DW    TulisTitik
 2501 09              DB    09
 2502 54 20           DW    SetKoordinat
 2504 00              DB    0

 2505            PesanKoordinat:
 2505 0A 0D 4B        DB    0AH,0DH,'Koordinat : ',0FH

 2514            PesanDaftarGamba:
 2514 0A 0D 46        DB    0AH,0DH,'File',0FH

 251B            PesanPilihan:
 251B 0A 0D 50        DB    0AH,0DH,'Pilihan : ',0FH

 2528            PesanTerhapus:
 2528 0A 0D 54        DB    0AH,0DH,'Terhapus!',0AH,0DH,0FH

 2536            PesanKosong:
 2536 20 4B 6F        DB    ' Kosong',0AH,0DH,0FH

 2800                 ORG   2800H
 2800            MemoriGambar:
***** Successfull
