Difference between revisions of "A Gate Array programozása (paletta, keretszín, és video mód beállítása, memórialapozás, megszakításkérés törlése)"
(→RAM Configurations) |
|||
(18 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
A Gate Arrayt a 7Fh porton keresztül vezéreljük, méghozzá úgy, hogy 7fxxh portra yyh-t küldünk ki, ahol yy felső két bitje határozza meg a Gate array funkciót, erre majd írok példát, mert először furcsa volt az EP-portcímzés után. | A Gate Arrayt a 7Fh porton keresztül vezéreljük, méghozzá úgy, hogy 7fxxh portra yyh-t küldünk ki, ahol yy felső két bitje határozza meg a Gate array funkciót, erre majd írok példát, mert először furcsa volt az EP-portcímzés után. | ||
+ | |||
A következő táblában a Gate Array funkciói találhatók: | A következő táblában a Gate Array funkciói találhatók: | ||
Line 25: | Line 26: | ||
− | + | === Select Pen === | |
+ | |||
+ | Itt adhatjuk meg, hogy a paletta egyik színét szeretnénk beállítani, vagy a keretét. | ||
{| border="1" | {| border="1" | ||
− | ! colspan="3" | | + | ! colspan="3" | Keret kiválasztása |
|- | |- | ||
| Bit | | Bit | ||
Line 66: | Line 69: | ||
|} | |} | ||
− | |||
− | |||
{| border="1" | {| border="1" | ||
+ | ! colspan="3" | Paletta egyik elemének kiválasztása | ||
+ | |- | ||
| Bit | | Bit | ||
| Value | | Value | ||
Line 103: | Line 106: | ||
|} | |} | ||
+ | === Select Colour === | ||
− | + | Itt adhatjuk meg, hogy melyik színt szeretnénk a paletta valamelyik eleméhez rendelni, vagy épp a kerethez. | |
{| border="1" | {| border="1" | ||
Line 140: | Line 144: | ||
− | CPC színek | + | === CPC színek === |
− | {| | + | A következő táblázatban láthatók az EP-s megfelelőjükkel kiegészítve, "szerencsére" CPC-n az egyszerűség kedvéért megkülönböztetnek hardver színkiosztást, és firmware színkiosztást, a portra mindig a hardver színkiosztás szerinti értékeket kell írni, kiegészítve a 6. bittel, a firmware értékeket a CPC ROM használja. |
+ | |||
+ | {| border="1" | ||
| Firmware Colour | | Firmware Colour | ||
| Colour Name | | Colour Name | ||
Line 150: | Line 156: | ||
|- | |- | ||
| 0 | | 0 | ||
− | | Black | + | ! style="background-color:#000000; color:#FFFFFF;" | Black |
| 20 (54h) | | 20 (54h) | ||
− | | 00h | + | ! style="background-color:#000000; color:#FFFFFF;" | 00h |
− | | 00h | + | ! style="background-color:#000000; color:#FFFFFF;" | 00h |
|- | |- | ||
| 1 | | 1 | ||
− | | Blue | + | ! style="background-color:#000080; color:#FFFFFF;" | Blue |
| 4 (44h), 16 (50h) | | 4 (44h), 16 (50h) | ||
− | | 04h | + | ! style="background-color:#0000AB; color:#FFFFFF;" | 04h |
− | | 20h | + | ! style="background-color:#000055; color:#FFFFFF;" | 20h |
|- | |- | ||
| 2 | | 2 | ||
− | | Bright Blue | + | ! style="background-color:#0000FF; color:#FFFFFF;" | Bright Blue |
| 21 (55h) | | 21 (55h) | ||
− | | 24h | + | ! style="background-color:#0000FF; color:#FFFFFF;" | 24h |
− | | 24h | + | ! style="background-color:#0000FF; color:#FFFFFF;" | 24h |
|- | |- | ||
| 3 | | 3 | ||
− | | Red | + | ! style="background-color:#800000; color:#FFFFFF;" | Red |
| 28 (5Ch) | | 28 (5Ch) | ||
− | | 01h | + | ! style="background-color:#920000; color:#FFFFFF;" | 01h |
− | | 48h | + | ! style="background-color:#6E0000; color:#FFFFFF;" | 48h |
|- | |- | ||
| 4 | | 4 | ||
− | | Magenta | + | ! style="background-color:#800080; color:#FFFFFF;" | Magenta |
| 24 (58h) | | 24 (58h) | ||
− | | 85h | + | ! style="background-color:#9225AB; color:#FFFFFF;" | 85h |
− | | 68h | + | ! style="background-color:#6E0055; color:#FFFFFF;" | 68h |
|- | |- | ||
| 5 | | 5 | ||
− | | Mauve | + | ! style="background-color:#8000FF; color:#FFFFFF;" | Mauve |
| 29 (5Dh) | | 29 (5Dh) | ||
− | | 6Ch | + | ! style="background-color:#6E00FF; color:#FFFFFF;" | 6Ch |
− | | 6Ch | + | ! style="background-color:#6E00FF; color:#FFFFFF;" | 6Ch |
|- | |- | ||
| 6 | | 6 | ||
− | | Bright Red | + | ! style="background-color:#FF0000; color:#FFFFFF;" | Bright Red |
| 12 (4Ch) | | 12 (4Ch) | ||
− | | 49h | + | ! style="background-color:#FF0000; color:#FFFFFF;" | 49h |
− | | 49h | + | ! style="background-color:#FF0000; color:#FFFFFF;" | 49h |
|- | |- | ||
| 7 | | 7 | ||
− | | Purple | + | ! style="background-color:#FF0080; color:#FFFFFF;" | Purple |
| 5 (45h), 8 (48h) | | 5 (45h), 8 (48h) | ||
− | | CDh | + | ! style="background-color:#FF25AB; color:#FFFFFF;" | CDh |
− | | 29h | + | ! style="background-color:#DB0055; color:#FFFFFF;" | 29h |
|- | |- | ||
| 8 | | 8 | ||
− | | Bright Magenta | + | ! style="background-color:#FF00FF; color:#000000;" | Bright Magenta |
| 13 (4Dh) | | 13 (4Dh) | ||
− | | 6Dh | + | ! style="background-color:#FF00FF; color:#000000;" | 6Dh |
− | | 6Dh | + | ! style="background-color:#FF00FF; color:#000000;" | 6Dh |
|- | |- | ||
| 9 | | 9 | ||
− | | Green | + | ! style="background-color:#008000; color:#FFFFFF;" | Green |
| 22 (56h) | | 22 (56h) | ||
− | | 02h | + | ! style="background-color:#009200; color:#FFFFFF;" | 02h |
− | | 90h | + | ! style="background-color:#006E00; color:#FFFFFF;" | 90h |
|- | |- | ||
| 10 | | 10 | ||
− | | Cyan | + | ! style="background-color:#008080; color:#FFFFFF;" | Cyan |
| 6 (46h) | | 6 (46h) | ||
− | | 06h | + | ! style="background-color:#0092AB; color:#FFFFFF;" | 06h |
− | | 0B0h | + | ! style="background-color:#006E55; color:#FFFFFF;" | 0B0h |
|- | |- | ||
| 11 | | 11 | ||
− | | Sky Blue | + | ! style="background-color:#0080FF; color:#FFFFFF;" | Sky Blue |
| 23 (57h) | | 23 (57h) | ||
− | | 66h | + | ! style="background-color:#2592FF; color:#FFFFFF;" | 66h |
− | | 0B4h | + | ! style="background-color:#006EFF; color:#FFFFFF;" | 0B4h |
|- | |- | ||
| 12 | | 12 | ||
− | | Yellow | + | ! style="background-color:#808000; color:#FFFFFF;" | Yellow |
| 30 (5Eh) | | 30 (5Eh) | ||
− | | 03h | + | ! style="background-color:#929200; color:#FFFFFF;" | 03h |
− | | 0D8h | + | ! style="background-color:#6E6E00; color:#FFFFFF;" | 0D8h |
|- | |- | ||
| 13 | | 13 | ||
− | | White | + | ! style="background-color:#808080; color:#FFFFFF;" | White |
| 0 (40h), 1 (41h) | | 0 (40h), 1 (41h) | ||
− | | 07h | + | ! style="background-color:#9292AB; color:#FFFFFF;" | 07h |
− | | 0F8h | + | ! style="background-color:#6E6E55; color:#FFFFFF;" | 0F8h |
|- | |- | ||
| 14 | | 14 | ||
− | | Pastel Blue | + | ! style="background-color:#8080FF; color:#FFFFFF;" | Pastel Blue |
| 31 (5Fh) | | 31 (5Fh) | ||
− | | 27h | + | ! style="background-color:#9292FF; color:#FFFFFF;" | 27h |
− | | 0FCh | + | ! style="background-color:#6E6EFF; color:#FFFFFF;" | 0FCh |
|- | |- | ||
| 15 | | 15 | ||
− | | Orange | + | ! style="background-color:#FF8000; color:#000000;" | Orange |
| 14 (4Eh) | | 14 (4Eh) | ||
− | | 0D9h | + | ! style="background-color:#FF6E00; color:#000000;" | 0D9h |
− | | 0D9h | + | ! style="background-color:#FF6E00; color:#000000;" | 0D9h |
|- | |- | ||
| 16 | | 16 | ||
− | | Pink | + | ! style="background-color:#FF8080; color:#000000;" | Pink |
| 7 (47h) | | 7 (47h) | ||
− | | 4Fh | + | ! style="background-color:#FF92AB; color:#000000;" | 4Fh |
− | | 0B9h | + | ! style="background-color:#DB6E55; color:#000000;" | 0B9h |
|- | |- | ||
| 17 | | 17 | ||
− | | Pastel Magenta | + | ! style="background-color:#FF80FF; color:#000000;" | Pastel Magenta |
| 15 (4Fh) | | 15 (4Fh) | ||
− | | 0FDh | + | ! style="background-color:#FF6EFF; color:#000000;" | 0FDh |
− | | 0FDh | + | ! style="background-color:#FF6EFF; color:#000000;" | 0FDh |
|- | |- | ||
| 18 | | 18 | ||
− | | Bright Green | + | ! style="background-color:#00FF00; color:#000000;" | Bright Green |
| 18 (52h) | | 18 (52h) | ||
− | | 92h | + | ! style="background-color:#00FF00; color:#000000;" | 92h |
− | | 92h | + | ! style="background-color:#00FF00; color:#000000;" | 92h |
|- | |- | ||
| 19 | | 19 | ||
− | | Sea Green | + | ! style="background-color:#00FF80; color:#000000;" | Sea Green |
| 2 (42h), 17 (51h) | | 2 (42h), 17 (51h) | ||
− | | 0F2h | + | ! style="background-color:#25FF55; color:#000000;" | 0F2h |
− | | 32h | + | ! style="background-color:#00DB55; color:#000000;" | 32h |
|- | |- | ||
| 20 | | 20 | ||
− | | Bright Cyan | + | ! style="background-color:#00FFFF; color:#000000;" | Bright Cyan |
| 19 (53h) | | 19 (53h) | ||
− | | 0B6h | + | ! style="background-color:#00FFFF; color:#000000;" | 0B6h |
− | | 0B6h | + | ! style="background-color:#00FFFF; color:#000000;" | 0B6h |
|- | |- | ||
| 21 | | 21 | ||
− | | Lime | + | ! style="background-color:#80FF00; color:#000000;" | Lime |
| 26 (5Ah) | | 26 (5Ah) | ||
− | | 0DAh | + | ! style="background-color:#6EFF00; color:#000000;" | 0DAh |
− | | 0DAh | + | ! style="background-color:#6EFF00; color:#000000;" | 0DAh |
|- | |- | ||
| 22 | | 22 | ||
− | | Pastel Green | + | ! style="background-color:#80FF80; color:#000000;" | Pastel Green |
| 25 (59h) | | 25 (59h) | ||
− | | 0B3h | + | ! style="background-color:#92FF55; color:#000000;" | 0B3h |
− | | 0FAh | + | ! style="background-color:#6EFF55; color:#000000;" | 0FAh |
|- | |- | ||
| 23 | | 23 | ||
− | | Pastel Cyan | + | ! style="background-color:#80FFFF; color:#000000;" | Pastel Cyan |
| 27 (5Bh) | | 27 (5Bh) | ||
− | | 0FEh | + | ! style="background-color:#6EFFFF; color:#000000;" | 0FEh |
− | | 0FEh | + | ! style="background-color:#6EFFFF; color:#000000;" | 0FEh |
|- | |- | ||
| 24 | | 24 | ||
− | | Bright Yellow | + | ! style="background-color:#FFFF00; color:#000000;" | Bright Yellow |
| 10 (4Ah) | | 10 (4Ah) | ||
− | | 0DBh | + | ! style="background-color:#FFFF00; color:#000000;" | 0DBh |
− | | 0DBh | + | ! style="background-color:#FFFF00; color:#000000;" | 0DBh |
|- | |- | ||
| 25 | | 25 | ||
− | | Pastel Yellow | + | ! style="background-color:#FFFF80; color:#000000;" | Pastel Yellow |
| 3 (43h), 9 (49h) | | 3 (43h), 9 (49h) | ||
− | | 0FBh | + | ! style="background-color:#FFFF55; color:#000000;" | 0FBh |
− | | 0FBh | + | ! style="background-color:#FFFF55; color:#000000;" | 0FBh |
|- | |- | ||
| 26 | | 26 | ||
− | | Bright White | + | ! style="background-color:#FFFFFF; color:#000000;" | Bright White |
| 11 (4Bh) | | 11 (4Bh) | ||
− | | 0FFh | + | ! style="background-color:#FFFFFF; color:#000000;" | 0FFh |
− | | 0FFh | + | ! style="background-color:#FFFFFF; color:#000000;" | 0FFh |
|} | |} | ||
CPC-n pár szín ismétlődik: | CPC-n pár szín ismétlődik: | ||
hardver szín szerint, 1 White, 8 Purple, 9 Pastel Yellow, 16 Blue, 17 Sea Green | hardver szín szerint, 1 White, 8 Purple, 9 Pastel Yellow, 16 Blue, 17 Sea Green | ||
+ | |||
+ | |||
+ | === Port címzés === | ||
Most kitérnék a port címzésre egy-egy példán bemutatva, a port címét mindig a B regiszter tartalmazza, a kiírandó értéket pedig egy másik regiszter, attól függően, hogy melyik portíró utasítást használják, a legelterjedtebb az OUT (C),C , de bármely OUT (C),x előfordulhat, sőt ha jól emlékszem láttam példát OUT (x),a-ra is. | Most kitérnék a port címzésre egy-egy példán bemutatva, a port címét mindig a B regiszter tartalmazza, a kiírandó értéket pedig egy másik regiszter, attól függően, hogy melyik portíró utasítást használják, a legelterjedtebb az OUT (C),C , de bármely OUT (C),x előfordulhat, sőt ha jól emlékszem láttam példát OUT (x),a-ra is. | ||
− | |||
− | |||
− | |||
− | + | Most a példák az OUT (C), C és OUT (C), A -ra következnek: | |
− | + | ||
− | + | Keret: | |
− | ld a,44h | + | ld bc, 7f10h ; keret kiválasztása |
− | + | ld a, 44h ; kék szín kiválasztása (és ennyi utasítás kellett, hogy a keretet kékre állítsuk. | |
− | + | out (c), c | |
+ | out (c), a | ||
+ | |||
+ | A paletta 4. színének beállítása: | ||
+ | ld bc, 7f04h ; 4. elem kiválasztása | ||
+ | ld a, 45h ; lila szín kiválasztása | ||
+ | out (c), c | ||
+ | out (c), a | ||
− | |||
− | |||
− | + | === Select Screen Mode === | |
− | + | ||
− | + | A 0. és 1. bitek határozzák meg, a képernyő módját, összesen 4 mód közül választhatunk, a negyedik nem is hivatalos. | |
− | + | ||
− | + | {| border="1" | |
− | + | | Bit 1 | |
+ | | Bit 0 | ||
+ | | Screen mode | ||
+ | |- | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | Mode 0, 160x200 resolution, 16 colours | ||
+ | |- | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | Mode 1, 320x200 resolution, 4 colours | ||
+ | |- | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | Mode 2, 640x200 resolution, 2 colours | ||
+ | |- | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | Mode 3, 160x200 resolution, 4 colours | ||
+ | |} | ||
− | + | === Rom Configuratiom selection === | |
− | |||
− | Bit 1 | + | {| border="1" |
− | + | | Bit | |
− | + | | Value | |
− | 1 | + | | Function |
− | 1 | + | |- |
+ | | 7 | ||
+ | | 1 | ||
+ | ! rowspan="2" | Gate Array function | ||
+ | |- | ||
+ | | 6 | ||
+ | | 0 | ||
+ | |- | ||
+ | | 5 | ||
+ | | x | ||
+ | | not used | ||
+ | |- | ||
+ | | 4 | ||
+ | | x | ||
+ | | Interrupt generation control | ||
+ | |- | ||
+ | ! rowspan="2" | 3 | ||
+ | | 1 | ||
+ | | Upper rom area disable | ||
+ | |- | ||
+ | | 0 | ||
+ | | Upper rom area enable | ||
+ | |- | ||
+ | ! rowspan="2" | 2 | ||
+ | | 1 | ||
+ | | Lower rom area disable | ||
+ | |- | ||
+ | | 0 | ||
+ | | Lower rom area enable | ||
+ | |- | ||
+ | | 1 | ||
+ | | x | ||
+ | ! rowspan="2" | Mode selection | ||
+ | |- | ||
+ | | 0 | ||
+ | | x | ||
+ | |} | ||
+ | A 2. bit határozza meg, hogy az alsó (0000-3fffh terület) ROM engedélyezett (bit=0) vagy tiltott (bit=1), a 3. bit pedig a felső (c000-ffffh) ROM engedélyezését/tiltását végzi. Engedélyezett ROM esetén az aktuális területen ROM található, na itt jön egy kis furfang, ha olvasunk a területről akkor a ROM-ból olvas, viszont ha írunk, akkor a területnek megfelelő RAM-ba kerül az adat, nem vész el, tiltás esetén pedig RAM. | ||
− | + | ===== Példa ===== | |
− | |||
− | |||
− | + | 4 szín üzemmód kiválasztása, felső és alsó ROM tiltva: | |
− | + | ld b, 7fh | |
− | + | ld a, 8dh ; 10001101 | |
− | + | out (c),a | |
− | 4 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Ugyanez a BC regisztert használva: | ||
+ | ld bc, 7f8dh ; 10001101 | ||
+ | out (c),c | ||
− | + | ==== Megszakítások ==== | |
− | |||
− | + | A 4. bit segítségével késleltethetjük a megszakítást, 1-esre állítva törlődik az esetleges Z80 által még nem elfogadott megszakításkérés, és a Gate Array számlálója nullázódik. Ez a számláló felelős a megszakításgenerálásért, nullától 51-ig számol el, utána 52 helyett nullázza, megszakításkérést generál, és kezdődik minden elölről. A megszakításkérés törlődik, ha a Z80 elfogadja (azaz engedélyezett a megszakítás, és a megszakítási rutinra ugrik), ilyenkor egyben törlődik a számláló 5. bitje is, hogy ne történhessen nagyon rövid időn belül újabb megszakítás. Amikor a CRTC VSync kimenete aktívra vált (ez általában 240 sorral a képernyŐ kezdete/felső keret vége után történik), akkor 2 sor késleltetés után, azaz a "szabványos" képernyőnél a 242. sorban nullázódik a megszakítás számláló, és ha a számláló értéke 32 vagy nagyobb volt, akkor egyben megszakításkérés is generálódik. | |
− | + | Alapértelmezés szerint tehát megszakításkérés van a 34., 86., 138., 190., 242., és 294. sor elején, és az 52 soronkénti megszakítás kb. 300 Hz-es frekvenciának felel meg. | |
− | |||
− | |||
− | |||
− | |||
− | + | === RAM Configurations === | |
− | |||
− | |||
+ | A CPC RAM konfigurációja közel sem olyan rugalmas, mint az EP-é, 64Kb-s blokkok közül választhatunk csak, abból is csek elég limitált számban, összesen 8 RAM kiosztás létezik CPC6128-on, az alsó 3 bit állításával választhatunk közülük. | ||
− | RAM | + | {| border="1" |
− | + | ! rowspan="2" | RAM Expansion | |
+ | ! colspan="8" | Bits | ||
+ | |- | ||
+ | | 7 | ||
+ | | 6 | ||
+ | | 5 | ||
+ | | 4 | ||
+ | | 3 | ||
+ | | 2 | ||
+ | | 1 | ||
+ | | 0 | ||
+ | |- | ||
+ | | CPC6128 (note 1) | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | - | ||
+ | | - | ||
+ | | - | ||
+ | | s2 | ||
+ | | s1 | ||
+ | | s0 | ||
+ | |} | ||
− | RAM | + | A következő táblázatban látható, hogy milyen érték milyen RAM kiosztást takar, a *-gal megjelölt lapok a felső 64Kb-ból vett 16Kb-os blokkok. |
− | |||
− | |||
− | + | {| border="1" | |
+ | ! rowspan="3" | CPC6128 | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | 2 | ||
+ | | 3 | ||
+ | | 0* | ||
+ | | 1* | ||
+ | | 2* | ||
+ | | 3* | ||
+ | ! rowspan="3" | kb | ||
+ | |- | ||
+ | | 16 | ||
+ | | 16 | ||
+ | | 16 | ||
+ | | 16 | ||
+ | | 16 | ||
+ | | 16 | ||
+ | | 16 | ||
+ | | 16 | ||
+ | |- | ||
+ | ! colspan="4" | 64kb | ||
+ | ! colspan="4" | 64kb | ||
+ | |} | ||
− | |||
− | |||
− | |||
− | + | {| border="1" | |
− | Z80 Memory Range | + | | |
− | &0000-&3fff | + | | Z80 Memory Range |
− | &4000-&7fff | + | | Sub-block |
− | &8000-&bfff | + | |- |
− | &c000-&ffff | + | ! rowspan="4" | Configuration "0" |
− | Configuration "1" | + | | &0000-&3fff |
− | + | | 0 | |
− | &0000-&3fff | + | |- |
− | &4000-&7fff | + | | &4000-&7fff |
− | &8000-&bfff | + | | 1 |
− | &c000-&ffff | + | |- |
− | Configuration "2" | + | | &8000-&bfff |
− | + | | 2 | |
− | &0000-&3fff | + | |- |
− | &4000-&7fff | + | | &c000-&ffff |
− | &8000-&bfff | + | | 3 |
− | &c000-&ffff | + | |- |
− | Configuration "3" | + | ! rowspan="4" | Configuration "1" |
− | + | | &0000-&3fff | |
− | &0000-&3fff | + | | 0 |
− | &4000-&7fff | + | |- |
− | &8000-&bfff | + | | &4000-&7fff |
− | &c000-&ffff | + | | 1 |
− | Configuration "4" | + | |- |
− | + | | &8000-&bfff | |
− | &0000-&3fff | + | | 2 |
− | &4000-&7fff | + | |- |
− | &8000-&bfff | + | | &c000-&ffff |
− | &c000-&ffff | + | | 3* |
− | Configuration "5" | + | |- |
− | + | ! rowspan="4" | Configuration "2" | |
− | &0000-&3fff | + | | &0000-&3fff |
− | &4000-&7fff | + | | 0* |
− | &8000-&bfff | + | |- |
− | &c000-&ffff | + | | &4000-&7fff |
− | Configuration "6" | + | | 1* |
− | + | |- | |
− | &0000-&3fff | + | | &8000-&bfff |
− | &4000-&7fff | + | | 2* |
− | &8000-&bfff | + | |- |
− | &c000-&ffff | + | | &c000-&ffff |
− | Configuration "7" | + | | 3* |
− | + | |- | |
− | &0000-&3fff | + | ! rowspan="4" | Configuration "3" |
− | &4000-&7fff | + | | &0000-&3fff |
− | &8000-&bfff | + | | 0 |
− | &c000-&ffff | + | |- |
+ | | &4000-&7fff | ||
+ | | 3 | ||
+ | |- | ||
+ | | &8000-&bfff | ||
+ | | 2 | ||
+ | |- | ||
+ | | &c000-&ffff | ||
+ | | 3* | ||
+ | |- | ||
+ | ! rowspan="4" | Configuration "4" | ||
+ | | &0000-&3fff | ||
+ | | 0 | ||
+ | |- | ||
+ | | &4000-&7fff | ||
+ | | 0* | ||
+ | |- | ||
+ | | &8000-&bfff | ||
+ | | 2 | ||
+ | |- | ||
+ | | &c000-&ffff | ||
+ | | 3 | ||
+ | |- | ||
+ | ! rowspan="4" | Configuration "5" | ||
+ | | &0000-&3fff | ||
+ | | 0 | ||
+ | |- | ||
+ | | &4000-&7fff | ||
+ | | 1* | ||
+ | |- | ||
+ | | &8000-&bfff | ||
+ | | 2 | ||
+ | |- | ||
+ | | &c000-&ffff | ||
+ | | 3 | ||
+ | |- | ||
+ | ! rowspan="4" | Configuration "6" | ||
+ | | &0000-&3fff | ||
+ | | 0 | ||
+ | |- | ||
+ | | &4000-&7fff | ||
+ | | 2* | ||
+ | |- | ||
+ | | &8000-&bfff | ||
+ | | 2 | ||
+ | |- | ||
+ | | &c000-&ffff | ||
+ | | 3 | ||
+ | |- | ||
+ | ! rowspan="4" | Configuration "7" | ||
+ | | &0000-&3fff | ||
+ | | 0 | ||
+ | |- | ||
+ | | &4000-&7fff | ||
+ | | 3* | ||
+ | |- | ||
+ | | &8000-&bfff | ||
+ | | 2 | ||
+ | |- | ||
+ | | &c000-&ffff | ||
+ | | 3 | ||
+ | |} |
Latest revision as of 15:41, 5 July 2010
A Gate Arrayt a 7Fh porton keresztül vezéreljük, méghozzá úgy, hogy 7fxxh portra yyh-t küldünk ki, ahol yy felső két bitje határozza meg a Gate array funkciót, erre majd írok példát, mert először furcsa volt az EP-portcímzés után.
A következő táblában a Gate Array funkciói találhatók:
Bit 7 | Bit 6 | Function |
0 | 0 | Select pen (a paletta egyik elemének, vagy a keretnek a kiválasztása, értéke 0-15 lehet) |
0 | 1 | Select colour for selected pen (a kiválasztott paletta elemhez szín hozzárendelése) |
1 | 0 | Select screen mode, ROM configuration and interrupt control (képernyő mód, ROM konfiguráció kiválasztása, és megszakításvezérlés) |
1 | 1 | Ram Memory Management (note 1) |
Contents
Select Pen
Itt adhatjuk meg, hogy a paletta egyik színét szeretnénk beállítani, vagy a keretét.
Keret kiválasztása | ||
---|---|---|
Bit | Value | Function |
7 | 0 | Gate Array function "Pen Selection" |
6 | 0 | |
5 | x | not used |
4 | 1 | Select border |
3 | x | ignored |
2 | x | ignored |
1 | x | ignored |
0 | x | ignored |
Paletta egyik elemének kiválasztása | ||
---|---|---|
Bit | Value | Function |
7 | 0 | Gate Array function "Pen Selection" |
6 | 0 | |
5 | x | not used |
4 | 0 | Select pen |
3 | x | Pen Number |
2 | x | |
1 | x | |
0 | x |
Select Colour
Itt adhatjuk meg, hogy melyik színt szeretnénk a paletta valamelyik eleméhez rendelni, vagy épp a kerethez.
Bit | Value | Function |
7 | 0 | Gate Array function "Colour Selection" |
---|---|---|
6 | 1 | |
5 | x | not used |
4 | x | Colour number |
3 | x | |
2 | x | |
1 | x | |
0 | x |
CPC színek
A következő táblázatban láthatók az EP-s megfelelőjükkel kiegészítve, "szerencsére" CPC-n az egyszerűség kedvéért megkülönböztetnek hardver színkiosztást, és firmware színkiosztást, a portra mindig a hardver színkiosztás szerinti értékeket kell írni, kiegészítve a 6. bittel, a firmware értékeket a CPC ROM használja.
Firmware Colour | Colour Name | Hardware colour(s) | EP colour 1 | EP colour 2 |
0 | Black | 20 (54h) | 00h | 00h |
---|---|---|---|---|
1 | Blue | 4 (44h), 16 (50h) | 04h | 20h |
2 | Bright Blue | 21 (55h) | 24h | 24h |
3 | Red | 28 (5Ch) | 01h | 48h |
4 | Magenta | 24 (58h) | 85h | 68h |
5 | Mauve | 29 (5Dh) | 6Ch | 6Ch |
6 | Bright Red | 12 (4Ch) | 49h | 49h |
7 | Purple | 5 (45h), 8 (48h) | CDh | 29h |
8 | Bright Magenta | 13 (4Dh) | 6Dh | 6Dh |
9 | Green | 22 (56h) | 02h | 90h |
10 | Cyan | 6 (46h) | 06h | 0B0h |
11 | Sky Blue | 23 (57h) | 66h | 0B4h |
12 | Yellow | 30 (5Eh) | 03h | 0D8h |
13 | White | 0 (40h), 1 (41h) | 07h | 0F8h |
14 | Pastel Blue | 31 (5Fh) | 27h | 0FCh |
15 | Orange | 14 (4Eh) | 0D9h | 0D9h |
16 | Pink | 7 (47h) | 4Fh | 0B9h |
17 | Pastel Magenta | 15 (4Fh) | 0FDh | 0FDh |
18 | Bright Green | 18 (52h) | 92h | 92h |
19 | Sea Green | 2 (42h), 17 (51h) | 0F2h | 32h |
20 | Bright Cyan | 19 (53h) | 0B6h | 0B6h |
21 | Lime | 26 (5Ah) | 0DAh | 0DAh |
22 | Pastel Green | 25 (59h) | 0B3h | 0FAh |
23 | Pastel Cyan | 27 (5Bh) | 0FEh | 0FEh |
24 | Bright Yellow | 10 (4Ah) | 0DBh | 0DBh |
25 | Pastel Yellow | 3 (43h), 9 (49h) | 0FBh | 0FBh |
26 | Bright White | 11 (4Bh) | 0FFh | 0FFh |
CPC-n pár szín ismétlődik: hardver szín szerint, 1 White, 8 Purple, 9 Pastel Yellow, 16 Blue, 17 Sea Green
Port címzés
Most kitérnék a port címzésre egy-egy példán bemutatva, a port címét mindig a B regiszter tartalmazza, a kiírandó értéket pedig egy másik regiszter, attól függően, hogy melyik portíró utasítást használják, a legelterjedtebb az OUT (C),C , de bármely OUT (C),x előfordulhat, sőt ha jól emlékszem láttam példát OUT (x),a-ra is.
Most a példák az OUT (C), C és OUT (C), A -ra következnek:
Keret:
ld bc, 7f10h ; keret kiválasztása ld a, 44h ; kék szín kiválasztása (és ennyi utasítás kellett, hogy a keretet kékre állítsuk. out (c), c out (c), a
A paletta 4. színének beállítása:
ld bc, 7f04h ; 4. elem kiválasztása ld a, 45h ; lila szín kiválasztása out (c), c out (c), a
Select Screen Mode
A 0. és 1. bitek határozzák meg, a képernyő módját, összesen 4 mód közül választhatunk, a negyedik nem is hivatalos.
Bit 1 | Bit 0 | Screen mode |
0 | 0 | Mode 0, 160x200 resolution, 16 colours |
0 | 1 | Mode 1, 320x200 resolution, 4 colours |
1 | 0 | Mode 2, 640x200 resolution, 2 colours |
1 | 1 | Mode 3, 160x200 resolution, 4 colours |
Rom Configuratiom selection
Bit | Value | Function |
7 | 1 | Gate Array function |
---|---|---|
6 | 0 | |
5 | x | not used |
4 | x | Interrupt generation control |
3 | 1 | Upper rom area disable |
0 | Upper rom area enable | |
2 | 1 | Lower rom area disable |
0 | Lower rom area enable | |
1 | x | Mode selection |
0 | x |
A 2. bit határozza meg, hogy az alsó (0000-3fffh terület) ROM engedélyezett (bit=0) vagy tiltott (bit=1), a 3. bit pedig a felső (c000-ffffh) ROM engedélyezését/tiltását végzi. Engedélyezett ROM esetén az aktuális területen ROM található, na itt jön egy kis furfang, ha olvasunk a területről akkor a ROM-ból olvas, viszont ha írunk, akkor a területnek megfelelő RAM-ba kerül az adat, nem vész el, tiltás esetén pedig RAM.
Példa
4 szín üzemmód kiválasztása, felső és alsó ROM tiltva:
ld b, 7fh ld a, 8dh ; 10001101 out (c),a
Ugyanez a BC regisztert használva:
ld bc, 7f8dh ; 10001101 out (c),c
Megszakítások
A 4. bit segítségével késleltethetjük a megszakítást, 1-esre állítva törlődik az esetleges Z80 által még nem elfogadott megszakításkérés, és a Gate Array számlálója nullázódik. Ez a számláló felelős a megszakításgenerálásért, nullától 51-ig számol el, utána 52 helyett nullázza, megszakításkérést generál, és kezdődik minden elölről. A megszakításkérés törlődik, ha a Z80 elfogadja (azaz engedélyezett a megszakítás, és a megszakítási rutinra ugrik), ilyenkor egyben törlődik a számláló 5. bitje is, hogy ne történhessen nagyon rövid időn belül újabb megszakítás. Amikor a CRTC VSync kimenete aktívra vált (ez általában 240 sorral a képernyŐ kezdete/felső keret vége után történik), akkor 2 sor késleltetés után, azaz a "szabványos" képernyőnél a 242. sorban nullázódik a megszakítás számláló, és ha a számláló értéke 32 vagy nagyobb volt, akkor egyben megszakításkérés is generálódik. Alapértelmezés szerint tehát megszakításkérés van a 34., 86., 138., 190., 242., és 294. sor elején, és az 52 soronkénti megszakítás kb. 300 Hz-es frekvenciának felel meg.
RAM Configurations
A CPC RAM konfigurációja közel sem olyan rugalmas, mint az EP-é, 64Kb-s blokkok közül választhatunk csak, abból is csek elég limitált számban, összesen 8 RAM kiosztás létezik CPC6128-on, az alsó 3 bit állításával választhatunk közülük.
RAM Expansion | Bits | |||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
CPC6128 (note 1) | 1 | 1 | - | - | - | s2 | s1 | s0 |
A következő táblázatban látható, hogy milyen érték milyen RAM kiosztást takar, a *-gal megjelölt lapok a felső 64Kb-ból vett 16Kb-os blokkok.
CPC6128 | 0 | 1 | 2 | 3 | 0* | 1* | 2* | 3* | kb |
---|---|---|---|---|---|---|---|---|---|
16 | 16 | 16 | 16 | 16 | 16 | 16 | 16 | ||
64kb | 64kb |
Z80 Memory Range | Sub-block | |
Configuration "0" | &0000-&3fff | 0 |
---|---|---|
&4000-&7fff | 1 | |
&8000-&bfff | 2 | |
&c000-&ffff | 3 | |
Configuration "1" | &0000-&3fff | 0 |
&4000-&7fff | 1 | |
&8000-&bfff | 2 | |
&c000-&ffff | 3* | |
Configuration "2" | &0000-&3fff | 0* |
&4000-&7fff | 1* | |
&8000-&bfff | 2* | |
&c000-&ffff | 3* | |
Configuration "3" | &0000-&3fff | 0 |
&4000-&7fff | 3 | |
&8000-&bfff | 2 | |
&c000-&ffff | 3* | |
Configuration "4" | &0000-&3fff | 0 |
&4000-&7fff | 0* | |
&8000-&bfff | 2 | |
&c000-&ffff | 3 | |
Configuration "5" | &0000-&3fff | 0 |
&4000-&7fff | 1* | |
&8000-&bfff | 2 | |
&c000-&ffff | 3 | |
Configuration "6" | &0000-&3fff | 0 |
&4000-&7fff | 2* | |
&8000-&bfff | 2 | |
&c000-&ffff | 3 | |
Configuration "7" | &0000-&3fff | 0 |
&4000-&7fff | 3* | |
&8000-&bfff | 2 | |
&c000-&ffff | 3 |