PROGRAM KÖŞESİ

HEX – DEC ÇEVİRİCİ

HEX – DEC ÇEVİRİCİ Assembler kursunun ilk bölümünde gördüğümüz HEX-DEC çevirme işlemini bırakalım C64 yapsın. HEX – DEC CONVERTER isimli programımızı çalıştırınca HEX sayı sisteminde kullanılan tuşlar bulunan bir görüntü karşınıza gelecektir. Tuşlara bastıkça ekrandaki ilgili karakter flaş yapacak ve sağ tarafta yazılacaktır. Dört kez basınca yazmış olduğunuz HEX sayının onaltılı karşılığı yazılacaktır. SPACE tuşuna basılırsa yeni sayıyı girebilirsiniz. Bir baytlık sayı girmek için – mesela $FA olsun – sayı 00FA olarak girilmelidir.

;------------------; 
; hex-dec cevirici ; 
;(c) 11/2002  hades; 
;------------------; 
*=  $0900 
;Programõn başlangõç adresi 
lda #$0f 
;Açõk Gri renk kodu 
sta $d020 
;Çerçeve rengi olsun 
sta $d021 
;Ekran rengi olsun 
lda #$0b 
;Koyu Gri renk kodu yazõ rengi 
jsr $e536 
;olsun ve ekran temizlensin. 
lda #<text  
;Yazõnõn alçak baytõnõ yükle 
ldy #>text  
;Yazõnõn yüksek baytõnõ yükle 
jsr $ab1e 
;Yazõyõ yazdõr. 
yeni  
clc 
;”Elde” bitini sõfõrla 
ldx #$07 
;Kursör pozisyonu satõr değeri 
ldy #$09 
;   “  
  “ 
  sütun   “ 
jsr $fff0 
;Kursörü yerleştir 
lda #$24 
; “$” işaretini 
jsr $ffd2 
;Ekrana bas 
lda #$00 
;Kursör 
sta $cc 
;gözüksün ve flaş yapsõn 
jsr bayt 
;Klavyeden bir bayt gir 
sta $fc 
;Yüksek bayt olarak sakla 
jsr bayt 
;Klavyeden bir bayt gir 
sta $fb 
;Alçak bayt olarak sakla 
lda #$3d 
; “=” işaretini  
jsr $ffd2 
;Ekrana bas
lda $fc 
;Yüksek bayt aküye 
ldx $fb 
;Alçak bayt X registerine 
jsr $bdcd 
;Onlu sayõya çevir ve ekrana bas 
tekrar 
jsr $ffe4 
;Tuşlarõ kontrol et 
cmp #$20 
;”SPACE” mi ? 
bne tekrar  
;değilse bir daha dene 
ldx #$00 
;X registerini sõfõrla 
clear  
sta $0552,x  
;Aküdeki değeri ekrana bas. Aküde “SPACE” 
;olduğu için ekrana boşluk konacaktõr. 
inx 
;X’i 1 arttõr 
cpx #$0b 
;X=11 oldu mu ? 
bne clear 
;olmadõysa tekrar 
jmp yeni 
;olduysa yeni işlem için başa dön. 
;------------------------------------------------------------------- 
bayt  
jsr hextus  
;HEX sistem tuşlarõnõ kontrol et 
lda temp 
;Geçici değeri oku 
asl 
;Bir kez sola kaydõr 
asl 
; “   “    “     “ 
asl 
; “   “    “     “ 
asl 
; “   “    “     “ 
sta $fb 
;Üst nibble olarak sakla 
jsr hextus  
;HEX sistem tuşlarõnõ kontrol et 
lda temp 
;Geçici değeri oku 
ora $fb 
;Üst nibble ile “OR” işlemi yap 
rts 
;Geri dön 
hextus 
jsr $ffe4 
;T şlarõ kontrol et 
u
cmp #$30 
;”0” mõ? 
bcc hextus  
;küçükse tekrar oku 
cmp #$3a 
;”:” mõ? 
bcs harf 
;eşit veya büyükse harf kontrolüne git 
pha 
;basõlan tuşun (ASCII) değerini yõğõna at 
sec 
;Elde bitini “1” yap 
sbc #$30 
;Tuşun ASCII değerinden $30 (48) çõkart 
jmp devam 
;zõpla! 
harf  
cmp #$41 
;Basõlan tuş “A” mõ? 
bcc hextus  
;küçükse tuşlarõ tekrar oku 
cmp #$47 
;”G” mi? 
bcs hextus  
;eşit veya büyükse tuşlarõ tekrar oku 
pha 
;Basõlan tuşun (ASCII) değerini yõğõna at 
sec 
;”Elde” bitini “1” yap 
sbc #$37 
;Tuşun ASCII değerinden $37 (55) çõkart 
devam  
sta temp 
;Sonucu geçici olarak sakla 
asl 
;Sonucu 2 ile çarp 
tax 
;X = A 
lda colmem,x 
;COLOR RAM için adresin LOW baytõnõ al 
sta $fd 
;Sakla 
lda colmem+1,x 
;COLOR RAM için adresin HIGH baytõnõ al 
sta $fe 
;Sakla 
ldy #$00 
;Y registerini sõfõrla 
lda ($fd),y  
;Renk Ram’õndaki adresin değerini oku 
sta oldcol  
;Sakla
lda newcol  
;Yeni renk değerini al 
sta ($fd),y  
;Renk Ram’õndaki adrese yaz 
pla 
;Yõğõndaki değeri al 
jsr $ffd2 
;Ekrana bas 
ldy #$a0 
;Y registerine $A0 yükle (Gecikme sayacõ) 
delay  
ldx #$00 
;X registerini sõfõrla 
jsr $eeb3 
;ROM’daki 1 milisecond delay rutinine git 
dey 
;Sayacõ 1 azalt 
bne delay 
;”0” olmadõysa gecikmeye devam 
lda oldcol  
;Eski renk değerini oku 
sta ($fd),y  
;Renk Ram’õndaki adrese geri yaz  
rts 
;Alt rutinden geri dön 
;------------------------------------------------------------------- 
;Değişkenler, tablo(lar), yazõlar vs. bu kõsõmda bulunmaktadõr. 
;------------------------------------------------------------------- 
oldcol 
.byte 0 
newcol 
.byte 7 
temp  
.byte 0 
colmem 
.word $d829,$d82b,$d82d,$d82f 
.word $d879,$d87b,$d87d,$d87f 
.word $d8c9,$d8cb,$d8cd,$d8cf 
.word $d919,$d91b,$d91d,$d91f 
text  
.byte $8e,$d5,$c3,$b2,$c3,$b2 
.byte $c3,$b2,$c3,$c9,$0d,$c2 
.byte $30,$c2,$31,$c2,$32,$c2 
.byte $33,$c2,$0d,$ab,$c3,$db 
.byte $c3,$db,$c3,$db,$c3,$b3 
.byte $0d,$c2,$34,$c2,$35,$c2 
.byte $36,$c2,$37,$c2,$0d,$ab 
.byte $c3,$db,$c3,$db,$c3,$db 
.byte $c3,$b3,$0d,$c2,$38,$c2 
.byte $39,$c2,$41,$c2,$42,$c2 
.byte $0d,$ab,$c3,$db,$c3,$db 
.byte $c3,$db,$c3,$b3,$0d,$c2 
.byte $43,$c2,$44,$c2,$45,$c2 
.byte $46,$c2,$0d,$ab,$c3,$b1 
.byte $c3,$b1,$c3,$b1,$c3,$b1 
.byte $c3,$c3,$c3,$c3,$c3,$c3 
.byte $c3,$c3,$c3,$c3,$c3,$c9 
.byte $0d,$c2,$20,$48,$45,$58 
.byte $20,$2d,$20,$44,$45,$43 
.byte $20,$43,$45,$56,$49,$52 
.byte $49,$43,$49,$c2,$0d,$c2 
.byte $4b,$41,$53,$49,$4d,$2f 
.byte $32,$30,$30,$32,$20,$28 
.byte $43,$29,$48,$41,$44,$45 
.byte $53,$c2,$0d,$ca,$c3,$c3 
.byte $c3,$c3,$c3,$c3,$c3,$c3 
.byte $c3,$c3,$c3,$c3,$c3,$c3 
.byte $c3,$c3,$c3,$c3,$c3,$cb 
.byte $05,$0d,$00,$00,$00,$00 
;programõn sonu