commodore.gen.tr

Commodore => Commodore Yazılım => Konuyu başlatan: i_r_on üzerinde Haziran 19, 2016, 16:08:35 ÖS



Konu Başlığı: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 16:08:35 ÖS
Kaç adettir?

Nette bakıyorum 2'den fazla kullanmış olanı göremedim neredeyse. Sınırı var mıdır, sebebi nedir internette adam akıllı bilgi bulamadım.

Ps1: IRQ handler içinde CLI yapıp interrupt'ı acknowledge etmeden tekrar irq tetikletmekten bahsetmiyorum. Her bir interrupt o frame içinde fiziki olarak IRQ hattını low'a çekip acknowledge olduğunda da high'a çekmeli.

Ps2: IRQHack64'de ekran açık transfer için lazım, bad line'ları atlatıp transfer yapmak için.

Ps3: Raster irq kullanamazsam bad line'ları bekleyip CIA üstünden IRQ üretmek aklımdaki ikinci yöntem.


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 17:13:34 ÖS
Ben çok defalar 2 den fazla kullandım. 


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 19:07:37 ÖS
Bana lazım olan 25 yahut 26 adet.


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 20:39:01 ÖS
Bence rahatlikla olur. Neden olmayacagini dusundun?


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 21:34:35 ÖS
Kod aşağıdaki gibi, bunun sonucunda 25 tane kıprış kıprış beyaz çizgi bekliyorum border'da ancak 3-4 değişik yerde bazısının sürekli yeri değişen beyaz çizgi çıkıyor. Farklı bir şekilde durumu görmek için ekrandaki değerleri increment ettim. Mantıken bir frame'de 25 defa çalışıyor olsa karakterlerin ben daha görmeden hızlıca değişmesi gerekirken gayet görünür bir şekilde 0, 1, 2,  3 diye değiştiğini gözlemliyorum.

Kod:
IRQVECTOR	= $0314
IRQ6502 = $FFFE

CURRENTFRAME = $08

;VIC Border color
BORDER = $D020
SCREEN = $D021

*=$080E        
CLD

LDY #$7f    ; $7f = %01111111
    STY $dc0d   ; Turn off CIAs Timer interrupts
    STY $dd0d   ; Turn off CIAs Timer interrupts
    LDA $dc0d   ; cancel all CIA-IRQs in queue/unprocessed
    LDA $dd0d   ; cancel all CIA-IRQs in queue/unprocessed

LDA #$00
STA $D01A

LDA #$35
STA $01

LDX #$00
STX CURRENTFRAME
-
LDA $D012
BNE -
LDA $d011                     ; clear high bit of raster line
AND #$7f
STA $d011

LDA RP, X
STA $D012

LDA #<MRH
STA IRQ6502
LDA #>MRH
STA IRQ6502+1

LDA #$01
STA $D01A

CLI

LOOP
JMP LOOP


MRH
SEI
ASL $D019
INC BORDER
LDX CURRENTFRAME
INX
CPX #25
BNE +
LDX #$00
+
LDA RP, X
STA $D012
STX CURRENTFRAME
INC $07C0,X
DEC BORDER
RTI


   
RP = range($31, $F1, 8)


ps: Setup rutinleri aynı kalacak şekilde CIA'in Timer A'sını single shot modunda IRQ üretecek şekilde çalıştırdım. Onda çalışıyor.


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 21:51:15 ÖS
Kod detayli bakamadim, bakacagim da, servis rutinin basindaki sei neden orda? Onun cli si neden yok?


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 22:13:28 ÖS
Aslında cli eksik değil, hatta sei fazla orada, alışkanlıktan yazmışım. 65xx'ler interrupt'a girdiğinde status register'ini (benim kodumda CLI'li olan) stack'e basıyor ve otomatik olarak interrupt disable flag'ini de set ediyor.

Cli benim kodda $31. raster satırında ilk interrupt'a girmeden önce ana rutinde kullanılıyor. Sonrasında zaten hep RTI ile stack'ten çekileceği için ana rutin üstünde IRQ enable durumda yani.


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 22:21:37 ÖS
Pardon
Cep telden yazamadım, bilgisayara geçiyorum...


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 22:39:02 ÖS
Kod:

MRH
PHA        ; Store A,X,Y to Stack
TXA
PHA       
TYA
PHA       

; SEI
; ASL $D019
INC BORDER
LDX CURRENTFRAME
INX
CPX #25
BNE +
LDX #$00
+
LDA RP, X
STA $D012
STX CURRENTFRAME
INC $07C0,X
DEC BORDER

LDA #$FF    ; Ack Interrupt
STA $D019
PLA ; Restore X,Y,A & Return
TAY       
PLA
TAX       
PLA 
RTI

RP
.byte 49,57,65,73,81,89,97,105,113,121,129,137,145,153,161,169,177,185,193,201,209,217,225,33,241,249

Böyle yapınca çalıştı. Giriş çıkıştaki stack işine takılma, sanırım range fonksiyonunda idi hata...


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 22:48:13 ÖS
Hatta şöyle yapınca her ikinci raster satırında bir interrupt oluşuyor. $30 dan $F0 a kadar, en az 95 adet ...

Kod:

MRH
INC BORDER
LDX CURRENTFRAME
INX
INX
CPX #$F0
BNE +
LDX #$30
+
STX $D012
STX CURRENTFRAME
; DEC BORDER

LDA #$FF    ; Ack Interrupt
STA $D019
RTI


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 22:56:52 ÖS
Lan lan lan... diyorum... Keşke disassemble etseymişim kodu..
Range komutunu da ikinci kullanışım falan, ilkinde de belki aynı sorun vardı.

Disassemble edince şu şekle çevirdiğini gördüm,

Kod:
$0892  B5 31     LDA $31,X 
$0894  B5 39     LDA $39,X
$0896  B5 41     LDA $41,X
$0898  B5 49     LDA $49,X
$089A  B5 51     LDA $51,X
$089C  B5 59     LDA $59,X
$089E  B5 61     LDA $61,X
$08A0  B5 69     LDA $69,X
$08A2  B5 71     LDA $71,X
$08A4  B5 79     LDA $79,X
$08A6  B5 81     LDA $81,X
$08A8  B5 89     LDA $89,X
$08AA  B5 91     LDA $91,X
$08AC  B5 99     LDA $99,X
$08AE  B5 A1     LDA $A1,X
$08B0  B5 A9     LDA $A9,X
$08B2  B5 B1     LDA $B1,X
$08B4  B5 B9     LDA $B9,X
$08B6  B5 C1     LDA $C1,X
$08B8  B5 C9     LDA $C9,X
$08BA  B5 D1     LDA $D1,X
$08BC  B5 D9     LDA $D9,X
$08BE  B5 E1     LDA $E1,X
$08C0  B5 E9     LDA $E9,X

ps: Ben hardware IRQ'yu direkt devraldığım ve register kullanımını da takip ettiğim için hiç bir register'ı saklamamıştım.


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 23:03:57 ÖS
Biraz tüyo vereyim bu arada IRQHack64 ile 160x96 4 renk (siyah, koyu gri, gri, beyaz) video oynatmaya çalışıyorum.

Bu alttaki videoda olanlar da muhtemelen bu range komutunun marifeti,


65fwOCciwhg


ps: Bu fail sonrası uydurduğum hurafe de DEN bitinin istenen satırda kullanılamıyor olduğuydu. Belki bu halen doğrudur da yine ekran açık transfer yöntemine dönerim.


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 23:06:05 ÖS
Assemblerdaki fonksiyonlar hep korkutuyor beni. Tamamen hakim olmadığım yapıları kullanmıyorum pek, işimi kolaylaştırsa bile. Excelle daha iyi dostuz... ;)

ps: Ben hardware IRQ'yu direkt devraldığım ve register kullanımını da takip ettiğim için hiç bir register'ı saklamamıştım.

Bende de alışkanlık olmuş, giriş çıkışa hep koyarım. Hatta iki makrom var #int_begin, #int_end...


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 23:09:18 ÖS
Çalışmalarını izliyorum. Ben bu ara biraz uzak kaldım, aletin başına geçsem rakip gelecem sana... :)

megaOne programlayıcı kartları postada kayboldu. Bu sayede araya 2-3 ay girince iyice uzak kaldım, ama yaz bitmeden dönücem geri. Belki ben de bir megaOne video demo yaparım...


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 23:18:05 ÖS
@delimawi : Valla şu an olaya hız odaklı yaklaştığım için mecburen nerde ne register kullanılır, hangisi hangi ara modifiye eder, hangisi açığa çıkar falan öyle gidiyorum. Stack'e basmak, geri çekmek genel kullanım için en güvenli ve en iyisi pek tabii. Benim rutinlerin nerede girdiği nerede çıktığı oldukça zamanlı olacağı için hiç girmiyorum.

Size dedim aliexpress'ten yaptırın pcb'leri diye. Bir 30 tane daha sipariş ettim, takipli bir şekilde tıpış tıpış 2 haftada geldiler :) Gerçi seninki de takipliydi herhalde.

Bu arada benim range kullanımımda eksiklik varmış. Üstteki videodaki çalışmada aslında komutu doğru kullanmışım.

Sağolasın bu arada, CIA Timer A üstünden oturtmaya çalışıyordum. Raster IRQ kullanmak her açıdan daha kolay olacak.

byte dizisini şu şekilde almak gerekiyormuş range tanımından sonra,

Kod:
RP		= range($31, $F1, 8)

RPP   .byte (RP)

İlk hurafem geçerliliğini koruyor şimdilik :)


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: eins üzerinde Haziran 19, 2016, 23:21:17 ÖS
Bu sefer PCB çok basit ve biraz biçimsiz (ince uzun) birşeydi. Daha uygun fiyatlı başka bir yerden sipariş etmiştim. Takipsizdi malesef...


Konu Başlığı: Ynt: Bir frame'de tetiklenebilecek maksimum raster irq sayısı
Gönderen: i_r_on üzerinde Haziran 19, 2016, 23:26:17 ÖS
Bu sefer PCB çok basit ve biraz biçimsiz (ince uzun) birşeydi. Daha uygun fiyatlı başka bir yerden sipariş etmiştim. Takipsizdi malesef...

Kötü şans :(  Dirtypcbs.com ile benim de başıma geldi.

Hala sipariş etmediysen aşağıdaki amcamı tavsiye ederim, ben fiyat alırken zip dosyasının ismini şöyle verdim : IRQHack64_Elecrow.zip :)
Gayet uygun fiyat vermişti. İkinci siparişte de ilk fiyat aldığım mail'in üstünden fiyat istedim, arttırmadılar fiyatı.

http://www.aliexpress.com/item/HQPCB-HQEW-PCB-Prototype-Manufacturing-Laser-Stencils-with-Frame-Quick-Delivery-Free-Shipping/2044986641.html (http://www.aliexpress.com/item/HQPCB-HQEW-PCB-Prototype-Manufacturing-Laser-Stencils-with-Frame-Quick-Delivery-Free-Shipping/2044986641.html)