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
(New page: 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 ...)
 
Line 25: Line 25:
  
  
Select Pen
+
'''Select Pen''' - Itt adhatjuk meg, hogy a paletta egyik színét szeretnénk beállítani, vagy a keretét.
Itt adhatjuk meg, hogy a paletta egyik színét szeretnénk beállítani, vagy a keretét.
 
  
 
{| border="1"
 
{| border="1"
Line 68: Line 67:
  
  
  paletta egyik elemének kiválasztása
+
Paletta egyik elemének kiválasztása
  
Bit     Value   Function
+
{| border="1"
7       0       Gate Array function "Pen Selection"
+
| Bit
6       0      
+
| Value
5       x       not used
+
| Function
4       0       Select pen
+
|-
3       x       Pen Number
+
| 7
2       x      
+
| 0
1       x      
+
! rowspan="2" | Gate Array function "Pen Selection"
0       x      
+
|-
 +
| 6
 +
| 0
 +
|-
 +
| 5
 +
| x
 +
| not used
 +
|-
 +
| 4
 +
| 0
 +
| Select pen
 +
|-
 +
| 3
 +
| x
 +
! rowspan="4" | Pen Number
 +
|-
 +
| 2
 +
| x
 +
|-
 +
| 1
 +
| x
 +
|-
 +
| 0
 +
| x
 +
|}
  
  
Select Colour
+
'''Select Colour''' - Itt adhatjuk meg, hogy melyik színt szeretnénk a paletta valamelyik eleméhez rendelni, vagy épp a kerethez.
Itt adhatjuk meg, hogy melyik színt szeretnénk a paletta valamelyik eleméhez rendelni, vagy épp a kerethez.
 
  
Bit     Value   Function
+
{| border="1"
7       0       Gate Array function "Colour Selection"
+
| Bit
6       1      
+
| Value
5       x       not used
+
| Function
4       x       Colour number
+
|-
3       x      
+
| 7
2       x      
+
| 0
1       x      
+
! rowspan="2" | Gate Array function "Colour Selection"
0       x      
+
|-
 +
| 6
 +
| 1
 +
|-
 +
| 5
 +
| x
 +
| not used
 +
|-
 +
| 4
 +
| x
 +
! rowspan="5" | Colour number
 +
|-
 +
| 3
 +
| x
 +
|-
 +
| 2
 +
| x
 +
|-
 +
| 1
 +
| x
 +
|-
 +
| 0
 +
| x
 +
|}
  
  

Revision as of 13:33, 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 Quick reference EP colour

                                               hardware colour
                                               select value             

0 Black 20 54h 00h 1 Blue 4 44h 20h 2 Bright Blue 21 55h 24h 3 Red 28 5Ch 48h 4 Magenta 24 58h 68h 5 Mauve 29 5Dh 6Ch 6 Bright Red 12 4Ch 49h 7 Purple 5 45h 29h 8 Bright Magenta 13 4Dh 6Dh 9 Green 22 56h 90h 10 Cyan 6 46h 0B0h 11 Sky Blue 23 57h 0B4h 12 Yellow 30 5Eh 0D8h 13 White 0 40h 0F8h 14 Pastel Blue 31 5Fh 0FCh 15 Orange 14 4Eh 0D9h 16 Pink 7 47h 0B9h 17 Pastel Magenta 15 4Fh 0FDh 18 Bright Green 18 52h 92h 19 Sea Green 2 42h 32h 20 Bright Cyan 19 53h 0B6h 21 Lime 26 5Ah 0DAh 22 Pastel Green 25 59h 0FAh 23 Pastel Cyan 27 5Bh 0FEh 24 Bright Yellow 10 4Ah 0DBh 25 Pastel Yellow 3 43h 0FBh 26 Bright White 11 4Bh 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