OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 01:33

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 30 ]  Přejít na stránku Předchozí  1, 2
Autor Zpráva
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 14:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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. :candle:
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.

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 15:07 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
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.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 15:09 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
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.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 16:03 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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.

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 18:12 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
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 :drunk: Jen nevim, proč je to v sekci "začátečníci" :cman:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 18:16 
Offline
Kecálek
Uživatelský avatar

Registrován: 13.05.2013, 06:28
Příspěvky: 231
Bydliště: Handlova
Has thanked: 118 times
Been thanked: 44 times
Lepsie ako sekcia LAMERS :mrgreen:

_________________
MiST | Amiga 600 Furia II | Amiga 1200 ACA1231 | Sharp MZ800 | ZX Spectrum 48k | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 20:29 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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 :drunk: Jen nevim, proč je to v sekci "začátečníci" :cman:


Mozno preto ze toto povazujem za zaciatocnicku otazku. Ale osobne mavam vysoke naroky.

A tiez som nenasiel lepsie miesto.

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 21:15 
Offline
Kecálek
Uživatelský avatar

Registrován: 13.05.2013, 06:28
Příspěvky: 231
Bydliště: Handlova
Has thanked: 118 times
Been thanked: 44 times
Chlapi dobre sa to cita, aj ked je to v "Zaciatocnici".
Mam pocit ze PRINT, GOTO, IF a samozrejme POKE,PEEK uz mate zvladnute :clap: .

_________________
MiST | Amiga 600 Furia II | Amiga 1200 ACA1231 | Sharp MZ800 | ZX Spectrum 48k | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 13.02.2014, 22:05 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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 :clap: .


Co tak skusit nieco k veci?

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 15.02.2014, 17:12 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
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 :joint:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 15.02.2014, 20:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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 :joint:


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]

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 16.02.2014, 13:54 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
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 :roll:
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? :poke:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 16.02.2014, 16:27 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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? :poke:


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"

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 17.02.2014, 17:15 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
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 .......

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C64 a timre v CIA
PříspěvekNapsal: 11.03.2014, 21:18 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
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


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 30 ]  Přejít na stránku Předchozí  1, 2

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz