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)"
Line 142: | Line 142: | ||
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. | 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 | + | {| |
− | + | | Firmware Colour | |
− | + | | Colour Name | |
− | 0 | + | | Hardware colour(s) |
− | 1 | + | | EP colour 1 |
− | 2 | + | | EP colour 2 |
− | 3 | + | |- |
− | 4 | + | | 0 |
− | 5 | + | | Black |
− | 6 | + | | 20 (54h) |
− | 7 | + | | 00h |
− | 8 | + | | 00h |
− | 9 | + | |- |
− | 10 | + | | 1 |
− | 11 | + | | Blue |
− | 12 | + | | 4 (44h), 16 (50h) |
− | 13 | + | | 04h |
− | 14 | + | | 20h |
− | 15 | + | |- |
− | 16 | + | | 2 |
− | 17 | + | | Bright Blue |
− | 18 | + | | 21 (55h) |
− | 19 | + | | 24h |
− | 20 | + | | 24h |
− | 21 | + | |- |
− | 22 | + | | 3 |
− | 23 | + | | Red |
− | 24 | + | | 28 (5Ch) |
− | 25 | + | | 01h |
− | 26 | + | | 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: | CPC-n pár szín ismétlődik: |
Revision as of 13:57, 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) |
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
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),A -ra következnek: Keret: Code
ld b,7fh ld a,10h out (c),a ;keret kiválasztása ld a,44h out (c),a ;kék szín kiválasztása (és ennyi utasítás kellett, hogy a keretet kékre állítsuk.
a paletta 4. színének beállítása:
Code
ld b,7fh ld a,04h out (c),a ;4. elem kiválasztása ld a,45h out (c),a ;lila szín kiválasztása
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. Cheesy
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
A 2. határozza meg, hogy az alsó (0000-3fffh terület) ROM engedélyezett/tiltott, 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.
A 4. bit segítségével késleltethetjük a megszakítást, 1-esre állítva 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 52-ig számol el, utána nullázza, és kezdődik minden elölről, ha a számláló 32 alatt van, akkor megszakításgenerálás elnyomva, ha felette, akkor generál megszakítást a Gate Array.
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
példa: 4 szín üzemmód kiválasztása, felső és alsó ROM tiltva
Code
ld b,7fh ld a,8dh ;10001101 out (c),a
ugyanez a BC regisztert használva:
Code
ld bc,7f8dh ;10001101 out (c),c
RAM Configurations 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*
16 16 16 16 16 16 16 16 kb 64kb 64kb
Configuration "0": Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 1 &8000-&bfff 2 &c000-&ffff 3 Configuration "1": Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 1 &8000-&bfff 2 &c000-&ffff 3* Configuration "2": Z80 Memory Range Sub-block &0000-&3fff 0* &4000-&7fff 1* &8000-&bfff 2* &c000-&ffff 3* Configuration "3": Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 3 &8000-&bfff 2 &c000-&ffff 3* Configuration "4": Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 0* &8000-&bfff 2 &c000-&ffff 3 Configuration "5": Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 1* &8000-&bfff 2 &c000-&ffff 3 Configuration "6" Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 2* &8000-&bfff 2 &c000-&ffff 3 Configuration "7": Z80 Memory Range Sub-block &0000-&3fff 0 &4000-&7fff 3* &8000-&bfff 2 &c000-&ffff 3