[SharpMZ] Potize s generovanim preruseni od CTC0 na mz-800 - podezreni na mrtvy OUT0 od 8253 (?)
malinsky
mm.malinsky na gmail.com
Středa Únor 1 23:47:04 CET 2017
Dobry vecer,
tak uz mi to beha, jak ma (tj. i na zeleze), a to v obou konfiguracich, tj.
1) CTC1->CTC2->INT v modu IM1
2) CTC0->PIO->INT v modu IM2
Hlavni problem byl v obou pripadech s maskovanim preruseni pinem PC2 8255, respektive v tom, ze jsem 8255 zapomnel predtim poslat inicializacni byte, takze nezabral nasledy pokus o odmaskovani.
V pripade 1 jsem pro jednoduchost vyuzil Vasi poznamky o modu 2, v nem ted bezi CTC1, tj. posila tik na CTC2 s frekvenci cca 550 kHz a neni nutne ho restartovat. CTC2 je v modu 0, a po kazdem dopocitani se znovu nastavi a prostrednictvim sveho GATE (bit 0 E008) se spusti, cimz spadne jeho OUT zpatky na 0.
V pripade 2 je im2 patrne jedina funkcni moznost, aspon tak to sugeruje poznamka o maskovacim pinu PC2 8255 v manualu na scavu. Jak je to ale presne zadratovano netusim.
Pokud se chcete podivat, oba funkcni kody vcetne zdrojaku jsou na adrese
http://www-ucjf.troja.mff.cuni.cz/~malinsky/files/vnitrni_preruseni_na_zeleze.zip
Jeste jednou dekuju za pomoc,
MM
On 01 Feb 2017, at 18:19, Michal Hucik - ORDOZ <ordoz na ordoz.com> wrote:
>
>> 1) a 2) jsou jasne; onou “posvatnosti” adresy 0x1039 jsem mel na mysli
>> prave situaci, kdy je dolni ROM primapovana :-) Im 2 mi take prijde
>> elegantnejsi, i kdyz pro rychle (a hlavne laicke) experimentovani
>> slozitejsi, a tudiz az druhy v poradi.
>
> Aha, az ted mne napadlo podivat se do vypisu ROM :) 0x1039 jsem vskutku
> neznal :) Jinak jak k inicializaci PIO v IM 2 pouzivam tohle:
>
>
> set_ivector:
> ld hl, ivector_addr
> bit 0, l
> jr z,ivector_is_even
> inc hl
> ivector_is_even:
> push hl
> pop ix
> ld hl,interrupt_routine
> ld (ix + 0), l
> ld (ix + 1), h
> push ix
> pop hl
> ld a,h
> ld i,a
> ld a,l
> ld hl, pioz80_init_data
> ld (hl), a
> ;ld bc, 0x06fc
> ld b, 0x05
> ld c,pio_ctrl
> otir
> ret
>
>
> ; inicializacni data pro z80pio
> pioz80_init_data:
> db 0x00 ; dolni cast adresy int. vectoru (nulty bit musi
> byt 0!)
>
> db 0xcf ; dolni 4 bity musi byt 1111, horni 2 pak
> ; mod nasledujici operace 0 - out, 1 - in,
> ; 2 - bidir, 3 - control
> ; 4. a 5. bit nemaji vyznam
>
>
> db 0x3f ; v modu 3 musi nasledovat I/O Register Control Word
> ; Vstup - 1, vystup - 0
> ;
> ; PA0 - IN - /RDA (LPT)
> ; PA1 - IN - /STA (LPT)
> ; PA2 - IN - GND
> ; PA3 - IN - GND
> ; PA4 - IN - /CTC0 (pozor, je invertovany!)
> ; PA5 - IN - /VBLN
> ; PA6 - OUT - IRT (LPT)
> ; PA7 - OUT - RDP (LPT)
> ;db 0x2f ; ooio iiii
> ;db 0x3f ; ooii iiii
> ;db 0xff ; oooo oooo
>
>
>
> db 0x97 ; dolni 4 bity musi byt 0111 -
> ; 7 - 1/0 En.INT/disable
> ; 6 - 1/0 AND/OR,
> ; 5 - 1/0 Hi/Low,
> ; 4 - Mask follows
> ; 0x97 = 1001 0111
>
>
> ;db 0x97 ; IENA, OR, LOW, MASK
> ;db 0xb7 ; IENA, OR, HIGH, MASK
> ;db 0xd7 ; IENA, AND, LOW, MASK
> ;db 0xf7 ; IENA, AND, HIGH, MASK
>
>
> ;db 0xef ; protoze v predch. slove byl 4b = 1,
> ; nasleduje bitova maska. Sledovany jsou jen
> ; piny, jejihz bity jsou 0
> ;
> ; 0xef - 4. bit (/CTC0)
> ; 0xdf - 5. bit (/VBLN)
> db 0xef ; /CTC0
> ;db 0x6f ; /CTC0, PA7
> ;db 0xff ; nic
>
>
>
> ivector_addr:
> db 0x00
> dw 0x0000
>
> _______________________________________________
> SharpMZ mailing list
> SharpMZ na mail.ordoz.com
> http://mail.ordoz.com/mailman/listinfo/sharpmz
Další informace o konferenci SharpMZ