OldComp.cz http://oldcomp.cz/ |
|
C64 a timre v CIA http://oldcomp.cz/viewtopic.php?f=32&t=1074 |
Stránka 2 z 2 |
Autor: | zz_indigo [ 13.02.2014, 14:53 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
LHS píše: A další věc, co z toho vyplývá. Když to, co dělam s adresama $DDxx udělam s adresame $DCxx (za předpokladu, že prdim na Basic), tak se IRQ volá stejně jako NMI. Takže běží 4 časovače, CIA1 vyvolává IRQ a CIA2 NMI. Akorát už IRQ nemůže být závislé na raster paprsku. Aby fungovala adresa D01A, musí se časovač CIA1-A vypnout. Ale i pak běží IRQ závislé na rasteru a i na časovači CIA1-B Ja predbezne nechem zasahovat do behu basicu ani kernalu. Preto je bezpecne dat ruky prec od IRQ. a hrat sa z MNI. Iked sa to zda byt nelogicke. |
Autor: | LHS [ 13.02.2014, 15:07 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
zz_indigo píše: nestopne. DD0D je interupt a status register. zapisom 7F povie ze chce vediet ci niekdo z CIA2 vyvolal prerusenie. ak nie tak skoci na rutinu ktora riesi restore klavesu. Ak ano tak zacne riesit Seriovy port. Takze mne bi malo stacit skocit po skonceny mojej casti prace na FE56. (tym baypassnem rutinu ktora sa stara o CIA2) Ještě je tam něco vyhnilýho, protože když změnim Kód: regA lda #$0 rti na Kód: lda #$0 jmp $FE47 tak se časovače po prvním průběhu stopnou. Něco se ještě někde v kernalu musí dít s adresama DD0D, DD0E nebo DD0F. Když budeš skákat na FE56, musíš si uložit registry, ale pak to fungluje. |
Autor: | LHS [ 13.02.2014, 15:09 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
zz_indigo píše: Ja predbezne nechem zasahovat do behu basicu ani kernalu. Preto je bezpecne dat ruky prec od IRQ. a hrat sa z MNI. Iked sa to zda byt nelogicke. Tolik nelogický to zase neni. Pro nějaký kritický operace při časování rasteru se to používá. Do IRQ se daj nějaký "běžný" rutiny pro přerušení (např. hudba) a pro na cyklus přesný přepínání VICu se použije NMI s časovačem. Ale je to už dost HC technika. |
Autor: | zz_indigo [ 13.02.2014, 16:03 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
LHS píše: tak se časovače po prvním průběhu stopnou. Něco se ještě někde v kernalu musí dít s adresama DD0D, DD0E nebo DD0F. Když budeš skákat na FE56, musíš si uložit registry, ale pak to fungluje. Deje. Lebo tieto timre a flag vstup sa pouziva pre seriovu komunikaciu. Preto treba skakat na to FE56. (aspon si myslim) Respektive NMI by teoreticky mohlo byt prehodene nakompletku na vlastnu rutinu. Pokial cloveku nevadi vypnutie warmresetu. |
Autor: | LHS [ 13.02.2014, 18:12 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
zz_indigo píše: Deje. Lebo tieto timre a flag vstup sa pouziva pre seriovu komunikaciu. Preto treba skakat na to FE56. (aspon si myslim) Respektive NMI by teoreticky mohlo byt prehodene nakompletku na vlastnu rutinu. Pokial cloveku nevadi vypnutie warmresetu. Já na konci přerušení, pokud to není nezbytně nutné, řízení kernalu nepředávam, takže mě stačí RTI. Ale jinak zajímavá disputace Jen nevim, proč je to v sekci "začátečníci" |
Autor: | ObiWanKen [ 13.02.2014, 18:16 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
Lepsie ako sekcia LAMERS |
Autor: | zz_indigo [ 13.02.2014, 20:29 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
LHS píše: Já na konci přerušení, pokud to není nezbytně nutné, řízení kernalu nepředávam, takže mě stačí RTI. Ale jinak zajímavá disputace Jen nevim, proč je to v sekci "začátečníci" Mozno preto ze toto povazujem za zaciatocnicku otazku. Ale osobne mavam vysoke naroky. A tiez som nenasiel lepsie miesto. |
Autor: | ObiWanKen [ 13.02.2014, 21:15 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
Chlapi dobre sa to cita, aj ked je to v "Zaciatocnici". Mam pocit ze PRINT, GOTO, IF a samozrejme POKE,PEEK uz mate zvladnute . |
Autor: | zz_indigo [ 13.02.2014, 22:05 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
ObiWanKen píše: Chlapi dobre sa to cita, aj ked je to v "Zaciatocnici". Mam pocit ze PRINT, GOTO, IF a samozrejme POKE,PEEK uz mate zvladnute . Co tak skusit nieco k veci? |
Autor: | LHS [ 15.02.2014, 17:12 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
Ještě jsem to zkoumal a jde pustit všechny 4 CIA timery a k tomu raster přerušení. Příklad, jak by to mohlo vypadat: Kód: ; i/o init jsr $ff5b ;disable interrupts sei ;disable all IRQs/NMIs of CIAs lda #%01111111 sta $dc0d sta $dd0d ;set IRQ vector lda #<irq01 ldx #>irq01 sta $fffe stx $ffff ;set NMI vector lda #<nmi01 ldx #>nmi01 sta $fffa stx $fffb ;disable Basic & Kernal ROM lda #$35 sta $01 ;set raster lda $d011 and #%01111111 sta $d011 lda #$98 sta $d012 ;time of CIA 1-A lda #<$2000 ldx #>$2000 sta $dc04 stx $dc05 ;time of CIA 1-B lda #<$4000 ldx #>$4000 sta $dc06 stx $dc07 ;time of CIA 2-A lda #<$8000 ldx #>$8000 sta $dd04 stx $dd05 ;time of CIA 2-B lda #<$c000 ldx #>$c000 sta $dd06 stx $dd07 ;enable all CIA timers, with freq. 50Hz ;and reload them to start value lda #%10010001 sta $dc0e sta $dc0f sta $dd0e sta $dd0f ;enable IRQ generated by timers CIA1 A+B lda #%10000011 sta $dc0d ;enable NMI generated by timers CIA2 A+B sta $dd0d ;enable IRQ generated by VIC raster lda #%00000001 sta $d01a ;enable interrupts cli - jmp - ;--------------------------------------- irq01 pha txa pha tya pha ;read CIA1 status lda $dc0d pha and #%00000001 beq + ;source of IRQ: timer CIA 1-A + pla and #%00000010 beq + ;source of IRQ: timer CIA 1-B + lda #$00000001 bit $d019 beq + sta $d019 ;source of IRQ: raster + jmp interrupt_end ;--------------------------------------- nmi01 pha txa pha tya pha ;read CIA2 status lda $dd0d pha and #%00000001 beq + ;source of NMI: timer CIA 2-A + pla and #%00000010 beq + ;source of NMI: timer CIA 2-B + interrupt_end pla tay pla tax pla rti Konzultoval jsem to se Socim a nic nebrání tomu to pustit vše najednou. Akorát pro zcela košér start by se před spuštěnim mělo udělat acknowledge těch zdrojů přerušení (přečíst adresy DC0D a DD0D a do D019 zapsat 1). A ještě mě upozornil, že pro časově závislé přerušení by šlo použít i TOD (Time Of Day), který CIA taky maj. To už by byl hukot |
Autor: | zz_indigo [ 15.02.2014, 20:53 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
LHS píše: Ještě jsem to zkoumal a jde pustit všechny 4 CIA timery a k tomu raster přerušení. Příklad, jak by to mohlo vypadat: Toto je v pohode. Mne ale ide o pripad ked potrebujem nieco robit a zaroven kernal a basic neohrozit. A to bol kamen urazu ktory som netusil. Ako sme sa spolu dopatrali pri NMI a useknuti podpory RS232 je to lahko realizovatelne na CIA2 LHS píše: Konzultoval jsem to se Socim a nic nebrání tomu to pustit vše najednou. Akorát pro zcela košér start by se před spuštěnim mělo udělat acknowledge těch zdrojů přerušení (přečíst adresy DC0D a DD0D a do D019 zapsat 1). A ještě mě upozornil, že pro časově závislé přerušení by šlo použít i TOD (Time Of Day), který CIA taky maj. To už by byl hukot TOD mi ale nespravy moje casy. Ten ma rozlisenie 1/10s co je pre mna vela. Takze pre istotu ti prezradim co chem robit. Chem uroobit ovladanie styroch modelarskych serv. Vsetko bude v basicu len generovanie impulzou pre serva bude cez radic prerusenia. Potrebujem generovat na pinou PB0 az 3 impulzy o dlzke 1 az 2 mS z periodou 20mS Takze jeden citac natvrdo nastaveny na 20ms. Dalsi bude periodicky plneny hodnotamy z urcenych pametovyvch miest. [url] http://zz-indigo.mavipet.sk/?s=zenit&submit=Search[/url] |
Autor: | LHS [ 16.02.2014, 13:54 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
zz_indigo píše: Toto je v pohode. Mne ale ide o pripad ked potrebujem nieco robit a zaroven kernal a basic neohrozit. A to bol kamen urazu ktory som netusil. Když se teď na to dívám, tak mám dojem, že basic používá pouze timer CIA1-A. Protože je zvykem (např. v demech) volat na začátku programu nějaký init rutiny z resetu (třeba $E5A0) a potom se IRQ pouští: Kód: sei lda #$1 sta $d01a sta $dc0d ... přičemž do přesně dělá "sta $dc0d" skoro nikdo pořádně neví (vč. mě do minulého týdne). U bitu 7 adresy $DC0D se píče: Bit #7: Fill bit; bits #0-#6, that are set to 1, get their values from this bit; bits #0-#6, that are set to 0, are left unchanged. takže POKE $DC0D,1 = bit0 převezme hodnotu z bit7 (nulu), ostatní bity zůstanou bez změny = explicitně vypne se generování přerušení CIA1-A Odvozuji si z toho, že timer CIA1-A je po resetu jediný aktivní a musíš ho vypnout, aby nerušil tvoje raster IRQ. zz_indigo píše: Chem uroobit ovladanie styroch modelarskych serv. Vsetko bude v basicu len generovanie impulzou pre serva bude cez radic prerusenia. Potrebujem generovat na pinou PB0 az 3 impulzy o dlzke 1 az 2 mS z periodou 20mS Takze jeden citac natvrdo nastaveny na 20ms. Dalsi bude periodicky plneny hodnotamy z urcenych pametovyvch miest. [url] http://zz-indigo.mavipet.sk/?s=zenit&submit=Search[/url] Super, bereš to na Forever? |
Autor: | zz_indigo [ 16.02.2014, 16:27 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
LHS píše: zz_indigo píše: Toto je v pohode. Mne ale ide o pripad ked potrebujem nieco robit a zaroven kernal a basic neohrozit. A to bol kamen urazu ktory som netusil. Když se teď na to dívám, tak mám dojem, že basic používá pouze timer CIA1-A. Protože je zvykem (např. v demech) volat na začátku programu nějaký init rutiny z resetu (třeba $E5A0) a potom se IRQ pouští: Odvozuji si z toho, že timer CIA1-A je po resetu jediný aktivní a musíš ho vypnout, aby nerušil tvoje raster IRQ. Asi ma zle citas. 1.) potreboval som vediet co mozem pouzit. to sme uz zistili. CIA1 je vyuzivana basicom. => Nechame ho na pokoji. 2.) CIA2 je pouzivane len RS232 ktoru nechem pouzivat => CIA2 je volna IRQ rusit nemusim. Ak sa strcim do NMI nik ma nezastavy LHS píše: zz_indigo píše: Chem uroobit ovladanie styroch modelarskych serv. Vsetko bude v basicu len generovanie impulzou pre serva bude cez radic prerusenia. Potrebujem generovat na pinou PB0 az 3 impulzy o dlzke 1 az 2 mS z periodou 20mS Takze jeden citac natvrdo nastaveny na 20ms. Dalsi bude periodicky plneny hodnotamy z urcenych pametovyvch miest. [url] http://zz-indigo.mavipet.sk/?s=zenit&submit=Search[/url] Super, bereš to na Forever? 1.) Netusim kedy je 2.) mam vcelkom nasrane v hlave takze sa moze stat ze si nato spomeniem mesiac po 3.) Netusim ci to dovtedy spravim. Rad by som upravyl povody program z PMD. Je este moznost tam strcit Attiny2313 a ovladat seriovo. ale to by bolo malo "retro" |
Autor: | zz_indigo [ 17.02.2014, 17:15 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
Vrhol som sa na prepis topho originalneho kodu robota zenit do commodore basicu a autor toho kodu bol iny masochista. Hned na zaciatku skok niekam do polky kodu potom spet hned za to goto ....... |
Autor: | LHS [ 11.03.2014, 21:18 ] |
Předmět příspěvku: | Re: C64 a timre v CIA |
zz_indigo píše: Asi ma zle citas. Ja som ta zle necital. Já jsem si jel vlastní diskuzi, protože mě to taky zajímalo. Co jsem zjistil, jsem napsal do článku: http://www.c64.cz/index.php?page=preruseni_c64 |
Stránka 2 z 2 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |