Bu sayfadaki yazılar
Sayfanın metni
Sayfa 23
PROGRAM ADI: KARSET5 0801 0860
0801: 0B 08 D4 07 9E 32 30 36 - 43A8 0809: 31 00 00 00 78 A9 33 85 - 5108 0811: 01 A9 D0 A2 30 A0 00 84 - 6D02 0819: FB 85 FC 84 FD 86 FE A2 - C027 0821: 10 B1 FB 91 FD C8 D0 F9 - CB6B 0829: E6 FC E6 FE CA D0 F2 A9 - D7A5 0831: 37 85 01 58 A9 1C 8D 18 - 4C35 0839: D0 A9 30 A0 00 84 FB 85 - 8AB9 0841: FC A2 10 86 FD C8 C8 C8 - B70B 0849: A2 04 B1 FB 4A 11 FB 91 - 8C6D 0851: FB C8 CA D0 F5 C8 D0 ED - DBBB 0859: E6 FC C6 FE D0 E7 60 ED - D11C
PROGRAM ADI: KARSET6 0801 0869
0801: 0B 08 D4 07 9E 32 30 36 - 43A8 0809: 31 00 00 00 78 A9 33 85 - 5108 0811: 01 A9 D0 A2 30 A0 00 84 - 6D02 0819: FB 85 FC 84 FD 86 FE A2 - C027 0821: 10 B1 FB 91 FD C8 D0 F9 - CB6B 0829: E6 FC E6 FE CA D0 F2 A9 - D7A5 0831: 37 85 01 58 A9 1C 8D 18 - 4C35 0839: D0 A9 30 A0 00 84 FB 85 - 8AB9 0841: FC A2 10 B1 FB 29 F0 48 - 8D99 0849: 0A 85 FD 68 05 FD 85 FE - A20F 0851: B1 FB 29 0F 48 4A 85 FD - 86CA 0859: 68 05 FD 05 FE 91 FB C8 - A895 0861: D0 E1 E6 FC CA D0 DC 60 - BF9B PROGRAM ADI: BALLS 0801 0938
0801: 0B 08 D4 07 9E 32 30 36 - 43A8 0809: 31 00 00 00 78 20 44 E5 - 5614 0811: CA 8E 21 D0 A9 23 9D F8 - 9E4E 0819: 07 BD 00 09 9D 00 D0 BD - 6F65 0821: 08 09 9D 08 D0 A9 0F 9D - 6869 0829: 27 D0 E8 E0 08 D0 E5 A9 - AAE7 0831: FF 8D 15 D0 8D 1C D0 A2 - 909E 0839: 0B A0 0C 8E 25 D0 8C 26 - 5F7E 0841: D0 A9 5A A2 08 8D 14 03 - 4E09 0849: 8E 15 03 A2 01 8E 1A D0 - 665B 0851: A0 80 8C 10 D0 58 4C 57 - 68A5 0859: 08 EE 19 D0 AD 12 D0 D0 - 94CE 0861: FB AD 91 08 D0 23 A9 0A - 670F 0869: 8D 91 08 AE 90 08 E0 20 - 6666 0871: D0 05 A2 08 8E 90 08 A0 - 69CF 0879: 00 BD 10 09 99 01 D0 E8 - 79F0 0881: C8 C8 C0 10 D0 F3 EE 90 - B2CD 0889: 08 CE 91 08 4C BC FE 00 - 6ACF
0891: 00 00 00 00 00 00 00 00 - 0000 0899: 00 00 00 00 00 00 00 00 - 0000 08A1: 00 00 00 00 00 00 00 00 - 0000 08A9: 00 00 00 00 00 00 00 00 - 0000 08B1: 00 00 00 00 00 00 00 00 - 0000 08B9: 00 00 00 00 00 00 00 00 - 0000 08C1: 55 00 01 77 40 05 DD D0 - 6F05 08C9: 07 7F B0 15 EE E4 17 FB - 9763 08D1: BC 1D EE AC 57 FA A9 5D - 96AC 08D9: EA AB 77 BA AB 5F EA AB - AB51 08E1: 77 BA AB 5D EA AB 57 FA - AC35 08E9: A9 15 EA A8 17 FA AC 15 - 7C24 08F1: EE E4 07 7B B0 05 FF D0 - 9E1A 08F9: 01 77 40 00 55 00 00 3C - 26C5 0901: B0 5C B0 7C B0 9C B0 BC - A3C0 0909: B0 DC B0 FC B0 1C B0 B0 - A67C 0911: B0 B0 B0 B0 B0 B0 B0 B8 - B1D8 0919: C0 C8 D0 D8 E0 D8 D0 C8 - D080 0921: C0 B8 B0 B8 C0 C8 D0 D8 - C650 0929: E0 D8 D0 C8 C0 B8 B0 B8 - C0B0 0931: C0 C8 D0 D8 E0 D8 D0 B8 - CCD0
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 22
C64 TÜRKİYE #7 22 ile yazılmış olan değer birbirine eşitse raster interrupt latch biti “1” olur. Kafanızın karışmaya başladığından eminim. Ama güzel bir intro veya demo yapabilmek için bunları ve daha fazlasını bilmeniz gerekmektedir.
Raster interruptını kullanmadan önce yapılacak bir işlem daha vardır. $D01A adresindeki interrupt enable registerine hangi interruptı kullanacağımızı bildirmemiz gerekmektedir. $D01A adresine $1 sayısını yazdığımızda artık raster interruptını kullanabiliriz. Elimizde bir adres daha var $D019 adresi. $D019’da bir interrupt oluştuğunda $D01A ile seçilen interrupta ait bit “1” olur ve programcı hangi interruptın meydana geldiğini anlayabilir. Fakat $D019’daki ilgili bit “1” olduktan sonra hep öyle kalır. Bir sonraki interrupt için bu adresin temizlenmesi gerekir. Şimdi yazdıklarımızı toparlayalım ve basitleştirelim.
1- $D01A adresine $1 yazarak raster interruptını kullanacağımızı belirleriz. 2- $D012 adresine hangi rasterde interrupt yapacağımızı yazarız. 3- $D019 adresini interrupt rutini içinde temizleriz. 4- $D012’yi interrupt rutini içinde kontrol edip rutinimizi çalıştırırız.
Bütün bu öğrendiklerimizle ilgili bir örnek verelim. *=$0801 .word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0 start sei ;interruptları durdur lda #<irq ;interrupt vektörünü ldx #>irq ;kendi rutinimizi sta $0314 ;gösterecek şekilde stx $0315 ;değiştir. lda #$30 ;raster değeri sta $d012 ;raster registerine lda #$01 ;raster interrupt yapacağımızı sta $d01a ;interrupt enable registerine bildir. cli ;interruptları serbest bırak. Jmp * ;sonsuz döngüye gir. irq inc $d019 ;bir sonraki interrupt için temizle lda #$30 ;bu değeri wait0 cmp $d012 ;raster registeri ile karşılaştır. bne wait0 ;eşit değilse bekle. Eşit ise devam et lda #$01 ;aküye 1 sayısı ldx #$0b ;X’e $0b ldy #$0a ;Y’ye $0a tekrar1 dex ;x registerini 1 azalt bne tekrar1 ;0 oluncaya kadar tekrarla sta $d020 ;0 olduysa aküdeki değer ekranın dış rengi ve sta $d021 ;ekranın iç rengi olsun tekrar2 dey ;y registerini 1 azalt bne tekrar2 ;0 oluncaya kadar bekle. 0 olduysa sty $d020 ;ekranın dış rengi ve sty $d021 ;ekranın iç rengi olsun jmp $ea81 ;işletim sistemine geri dön. .end X registerini renk şeritinin başlangıcını sabitlemek için, Y registerini ise biti- şini sabitlemek için kullanıyoruz. Daha doğrusu çizginin zamanlaması için kullanıyoruz. Eğer bu sayıları değiştirirseniz çizginiz titremeye başlar.