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
(RAM Configurations)
(RAM Configurations)
 
(2 intermediate revisions by the same user not shown)
Line 31: Line 31:
  
 
{| border="1"
 
{| border="1"
! colspan="3" | keret kiválasztása
+
! colspan="3" | Keret kiválasztása
 
|-
 
|-
 
| Bit
 
| Bit
Line 69: Line 69:
 
|}
 
|}
  
 
==== Paletta egyik elemének kiválasztása ====
 
  
 
{| border="1"
 
{| border="1"
 +
! colspan="3" | Paletta egyik elemének kiválasztása
 +
|-
 
| Bit
 
| Bit
 
| Value
 
| Value
Line 105: Line 105:
 
| x
 
| x
 
|}
 
|}
 
  
 
=== Select Colour ===
 
=== Select Colour ===
Line 434: Line 433:
 
=== RAM Configurations ===
 
=== 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.
+
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.
  
 
{| border="1"
 
{| border="1"

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)


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