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)"

From Enterprise Wiki
Jump to: navigation, search
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 Colour Name   Hardware Colour Quick reference  EP colour
+
{|
                                                hardware colour
+
| Firmware Colour
                                                select value           
+
| Colour Name
0             Black           20             54h             00h
+
| Hardware colour(s)
1             Blue             4               44h             20h
+
| EP colour 1
2             Bright Blue     21             55h             24h
+
| EP colour 2
3             Red             28             5Ch             48h
+
|-
4             Magenta         24             58h             68h
+
| 0
5             Mauve           29             5Dh             6Ch
+
| Black
6             Bright Red       12             4Ch             49h
+
| 20 (54h)
7             Purple           5               45h             29h
+
| 00h
8             Bright Magenta   13             4Dh             6Dh
+
| 00h
9             Green           22             56h             90h
+
|-
10             Cyan             6               46h             0B0h
+
| 1
11             Sky Blue         23             57h             0B4h
+
| Blue
12             Yellow           30             5Eh             0D8h
+
| 4 (44h), 16 (50h)
13             White           0               40h             0F8h
+
| 04h
14             Pastel Blue     31             5Fh             0FCh
+
| 20h
15             Orange           14             4Eh             0D9h
+
|-
16             Pink             7               47h             0B9h
+
| 2
17             Pastel Magenta   15             4Fh             0FDh
+
| Bright Blue
18             Bright Green     18             52h             92h
+
| 21 (55h)
19             Sea Green       2               42h             32h
+
| 24h
20             Bright Cyan     19             53h             0B6h
+
| 24h
21             Lime             26             5Ah             0DAh
+
|-
22             Pastel Green     25             59h             0FAh
+
| 3
23             Pastel Cyan     27             5Bh             0FEh
+
| Red
24             Bright Yellow   10             4Ah             0DBh
+
| 28 (5Ch)
25             Pastel Yellow   3               43h             0FBh
+
| 01h
26             Bright White     11             4Bh             0FFh
+
| 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