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