ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Technické prostředky / JPR-1ZI




JPR-1ZI



JPR-1ZI se od JPR-1Z liší tím že BOOT ROM má 8KB (2764) místo 2KB (2716) a obsahuje obvod (IO D4 7432 a D2 7400), co umožňuje zpracovat přerušení z obvodu 8259, obvod pro spolupráci Z80 s 8259 je převzat z PKT-1.

Z80 neumí spolupracovat s 8259 a to z toho důvodu že z 8259 je potřeba vyčíst 3 byte (instrukci CALL) a to pomocí signálu INTA jenomže Z80 v přerušovacím módu IM0 nevyčte pomoci „INTA“ z 8259 celou instrukci CALL aneb očekává instrukci RST, podle všeho Z80 vznikla dříve než 8259.

Pomocný obvod (IO D4A 7432 a D2B 7400) způsobí, že po příchodu signálu INTA přepne MR na INTA, při načítaní nové instrukce se pomocný obvod vrátí do výchozího stavu tj. MR je zase MR. Při použití přerušení s tímto pomocným obvodem musí být nastaven přerušovací režim u Z80 na IM2.

A celé to funguje následovně:

Na obsahu registru „I“ nezáleží, aneb se při přerušení neuplatní.
Po příchodu přerušení Z80 pomocí signálu INTA vyčte z 8259 byte a to konkrétně C9H což je instrukce CALL. Z pohledu Z80 je to nižší byt adresy tabulky vektorů pro skok do přerušení.
Pomocný obvod přeplul signál MR na INTA.
Z registru „I“ si Z80 vyzvedne horní polovinu adres tabulky vektorů pro skok do přerušení a jde z paměti vyčíst adresu, na kterou se bude skákat pro obsluhu přerušení. Jenomže Z80 nečte data z paměti ale z 8259 aneb pomocný obvod přesměroval MR na INTA aneb na adrese ze které se Z80 snaží načíst adresu vektoru skoku, nezáleží.
Z80 má adresu kam skočí pro zpracování přerušení, aneb vnitřně provede obdobu instrukce CALL.
Pomocný obvod přeplul signál MR zpět na MR.

Z toho důvodu je nutno dodržet pravidla práci s přerušením v modu IM2 u Z80 aneb pro návrat z přerušení je nutno použit instrukci RETI ale způsob jak je programově řešeno přerušení je velice podobné jak u 8080 s 8259. Ano je to takový kočko pes.

Zpátky na stromy, aneb po tom co jsem si pořádně prostudoval, jak vlastně funguje přerušení u INTELu (MCS80) a ZILOGu (Z80) tak jsem zjistil, že pěkně keckám z hladu ohledně programové obsluhy. Při tomto kočko psu, aneb Z80 oblbnutá aby pracovala s řadičem přerušení 8259(A) od INTELu, se nastaví mód přerušení na Z80 na IM2 ale zbytek obsluhy přerušení je potřeba řešit podle pravidel obsluhy 8259(A). K návratu z podprogramu přerušení stačí použít instrukci RET, instrukce RETI je nutná jen pro obvody z rodiny ZILOG.

Jak Z80 tak 8080A po příchodu (maskovatelného) přerušení zakážou přerušení, u obou CPU je potřeba znovu povolit přerušení pomocí instrukce EI. U obou CPU se povolí přerušení po příchodu instrukce EI až následníci instrukci tj. aby se stihla povést instrukce RET/RETI. Při ukončení obsluhy přerušení je potřeba zrušit i požadavek na obsluhu a to u rodiny obvodu Z80 pomoci instrukce RETI (periferní obvod který vyvolat přerušení čeká, až se na sběrnici objeví instrukce RETI a po příchodu instrukce RETI zruší požadavek k přerušení). U obvodu 8259(A) je to trošku složitější ale i u něj je potřeba povést zrušení požadavku na obsluhu a to že se do obvodu 8259(A) zapíše (instrukcí OUT) buď nespecifické či specifické zrušení požadavku přerušení (podle režimu přerušení).

Trik je v tom že Z80 se dostala k potřebné adrese, kam má skočit, aneb si vyčetla adresu z 8259(A) místo z RAM s přispěním obvodů rodiny ZILOG. Veškeré skoky na obsluh přerušení jak u Z80 tak 8080A jsou variace na instrukci CALL tj. skok do podprogramu. To jakým obvodem je řešeno přerušení CPU nepozná. Proto je potřeba dodržet pravidla obsluhy přerušení podle toho jaký obvod vyvolal přerušení tj. rodina obvodů Z80 nebo 8259(A).

Podle popisu jak vnitřně funguje 8080A se počítalo s tím, že pro přerušení se budou používat pouze instrukce RST, i vnitřní pochody v 8080A tomu nasvědčují (velmi podrobný popis 8080A je například v ST 12/1981). To že jde podstrčit při přerušení 8080A i instrukce CALL a vlastně jakákoliv instrukce je podle všeho jen nezamýšlená vlastnost. Zpracování instrukce během vykonávání kódu a během přerušení se liší jen v drobnostech. Při přerušení se zpracování instrukce liší jen v tom, že se zakáže přerušení, je zablokováno zvyšování programového čítače (registr PC) a instrukce je vyžádána pomocí signálu INTA místo MR, je proveden strojový cyklus M1I místo M1. Jinak se zpracování instrukce neliší od běžného zpracování. Instrukce RST jsou jedno bytové, ale CALL instrukce má 3 byty. Nějakým řízením osudu se případné strojové cykly M2 a M3 které osahuji data či adresu načtou také pomocí INTA aneb místo strojových cyklů M2 a M3 se provedou strojové cykly M2I a M3I.

O takto podrobném popisu pro Z80 který je k 8080A nevím, ale z toho mála a toho kočko psa usuzuji, že chování módů u Z80 vypadá následovně. Že módy IM0 a IM1 se chovají přesně podle popisu pro 8080A aneb u módu IM0 se předpokládaná pouze a jedině instrukce RSTn u módu IM1 si CPU sám dosadí instrukci RST38. Mód IM2 vypadá na variaci Instrukce RST, spíše to bude naopak, kdy místo operačního kódu instrukce se načte dolní polovina adresy (horní polovina adresy je v registru „I“). Ve všech třech případech se načte první byte pomocí INTA (u IM1 je to vnitřní záležitost CPU). Instrukce RSTn nemají strojové cykly M2 a M3 ale dochází uvnitř CPU ke složení adresy z operačního kódu instrukce a skočí se na danou adresu. V módu IM2 nedošlo k načtení operačního kódu instrukce ale dolní poloviny adresy, vzhledem k tomu že v instrukcí RSTn je zakódovaná adresa tak jde jen o variaci na téma. CPU, složí adresu podle jiných pravidel než u instrukcí RSTn v módech IM0 a IM1 ale tentokrát provede standardní strojové cykly M2 a M3 kdy složená adresa poslouží k vyčtení adresy, kam se bude skákat.

Podle všeho toto bude ten důvod proč Z80 neumí přímo spolupracovat s 8259(A) aneb 8259(A) využívá vlastnosti 8080A které nejsou popsané v dokumentaci. Módy přerušení IM0 a IM1 byli doplněné spíše jen pro lepší přechod z 8080A na Z80. Módy přerušení IM0 a IM1 budou spíše odvozeninou z módu přerušení IM2 než naopak.



Seznam součástek

polovodiče

1D1A74LS14
3D1B, D4A, D5A74LS32
1D1C74LS74
2   D2A, D3A74LS125
1D2B74LS00
1D2C74LS123
1D3B74LS08
2D3C, D6B74S287
1D6A74LS04
1D7B74LS93
7D5C, D1D - D6D   3212 (MH3212, I3212, ...)
1D5BZ80-CPU (UB880D, ...)
1D4C2764 / 2864
 
1D2LED
1V1KA206
1V2KSY81

Kondenzátory

1C11nkeramický
1C212pkeramický
2C3, C420uelektrolytický
11   C5 - C15   47nkeramický
1C1610nkeramický
1C1733p   keramický

odpory

28   R1 - R18, R20 - R28, R414k7
2R19, R44220
7R29, R30, R32 - R34, R36, R37   10k
1R315k6
2R35, R38100
4R39, R40, R42, R461k
1R4322
1R451k2

ostatní

1Q116MHzkrystal HC49
 
1X1TY 517 62 11 nebo TY 525 62 11   klíč C6
1X2TY 513 30 11 nebo TY 527 30 11klíč F3
1X3TY 513 30 11 nebo TY 527 30 11klíč C6
 
1JP1dutinková lišta 1X1
2   JP2, JP3   dutinková lišta 1X4




Schéma JPR-1ZI a černobílá verze ZDE.




DPS JPR-1ZI





ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Technické prostředky / JPR-1ZI



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz