HIP
From Atariki
Wersja z dnia 23:16, 8 gru 2004 Tebe (Dyskusja | wkład) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (linki i formatowanie) |
||
Linia 1: | Linia 1: | ||
+ | [[grafika:Hip_16k-tro.png|przykładowy obrazek w trybie HIP]] | ||
+ | <br> | ||
- | hi everybody... this is v0.5 of the HIP-FAQ for all coders... | + | |
- | + | ==Co to jest HIP ?== | |
- | ## ## ###### ###### TM of HARD Software, Hungary | + | |
- | ## ## ## ## ## | + | HIP jest metodą wyświetlania obrazków na małym Atari. HIP to skrót od "HARD-Interlacing-Picture" i został wymyślony przez członków grupy [[HARD]] Software z Węgier w czerwcu 1996 r. Umożliwia on wyświetlenie obrazka w rozdzielczości 160×240 [[piksel]]i w 30 odcieniach, prawie bez żadnego migania (zależy to od konkretnego obrazka, którego używasz). "HARD" nie oznacza "ostrego" albo "wielkiego" migotania obrazu, lecz chodzi tu o nazwę grupy, która wymyśliła ten tryb. |
- | ###### ## ###### | + | |
- | ## ## ## ## | + | ==Historia HIPa według [[Heaven]]a/[[Taquart]]== |
- | ## ## ###### ## | + | |
- | + | Tamás Bene i ja prowadziliśmy "konwersacje internetowe" przez ostatnie kilka miesięcy i rozmawialiśmy o starszych demach i efektach w nich używanych. W pewnym momencie zaczęliśmy rozmawiać o demie "Visdom II" JAComo Leopardiego, gdzie JAC zdołał wyświetlić 16 kolorów/odcieni w rozdzielczości [[Graphics 15]], która oznaczała 160×200 pikseli. Rozmawialiśmy także o demie [[UNITY]], gdzie grupa [[Our 5oft]] przełączała trzy tryby graficzne w jednej linii ekranowej: [[Graphics 8]], [[Graphics 9]] i coś podobnego do Graphics 15, wykorzystując do tego zmienianie rejestru [[Rejestry GTIA#GTIACTL|GPRIOR]] ($D01B) w przerwaniu DLI. | |
- | FAQ by | + | |
- | + | Jak myślisz, co się stanie, jeśli wpiszesz #$00 w ten rejestr (GPRIOR) na początku wyświetlania linii ekranowej, odczekasz trochę czasu (procesora). przełączysz wyświetlanie na Graphics 9 przez wpisanie #$40 do GPRIOR i po krótkiej chwili, w 1/3 ostatniej części tejże samej linii ekranowej przywrócisz z powrotem tryb 8, wpisując do GPRIOR ponownie wartość #$00??? Co pokaże [[GTIA]]? Nie, nie grafikę 8 (lub [[Graphics 0]]) jak normalnie - GTIA wyświetli coś podobnego do trybu 15!!! | |
- | oO Oo oOOOOo oOOOOo oO Oo oOOOOo oOOOOo | + | |
- | OO OO OO OO OO OO OO OO OO OO | + | Tamás opowiedział mi trochę historii o sesjach kodowania do dema [[Joyride]], w których brał udział ostatniego lata (1995) i stwierdził, że razem z resztą HARD'u odkryli jeszcze jakiś dodatkowy błąd w procedurze plazmy, lecz on dokończył ten efekt i zapomniał o wykrytym błędzie, aż do naszej rozmowy o błędach układu GTIA. |
- | OOOOOO OOOOo OOOOOO OO OO OOOOo OO OO | + | |
- | OO OO OO OO OO OO OO OO OO OO | + | Tak więc zaczęliśmy teraz rozmawiać o znanych błędach w GTIA. Następnego dnia Tamás był zdenerwowany, gdyż stwierdził, że odkrył nowy "bug" i odtworzył stary błąd w plaźmie z "Joyride". Odkrył on, że niektóre linie ekranowe ("scanlines") były przesunięte o pół(!) piksela trybu 9, gdy zaczynał się scroller i oni (HARD) nie poprawili tego błędu w plaźmie. Jednak po odtworzeniu tego błędu Tamás przekonał się, iż powodem błędu nie był scroller. Błąd tkwił w specjalnej procedurze [[ANTIC Display List|Display-Listy]]. |
- | oO Oo OOOOOo oO Oo OO OOOOOo OO OO of Taquart | + | |
- | + | ==Techniczne informacje o HIP== | |
- | + | ||
- | (.oO This is a preversion of the question-list Oo.) | + | Podstawowym założeniem jest, że wszystkie linie trybu [[Graphics 10]] są przesunięte o połowę piksela (albo o tzw. [[cykl koloru]]) w prawo w stosunku do pikseli trybu 9. Nikt jednak nawet nie próbował połączyć trybu 9 z 10. Wszyscy łączyli tryb 9 (16 odcieni) z trybem 11 (16 kolorów), aby wyświetlić 256 różnych kolorów (tak jak to widać w np. [[APAC View]]). Lecz wtedy rozdzielczość wynosiła wciąż 80×200 pikseli. |
- | + | ||
- | Date: 29th, August 1996...Writer: HeAvEn of Taquart | + | Tutaj znajduje się wytłumaczenie podstawowego pomysłu. |
- | + | ||
- | 1. What is HIP? | + | Oto kombinacje, które są potrzebne do łączenia linii trybu grafiki 9 z 10, w celu wyświetlenia pożądanego koloru HIP: |
- | + | ||
- | HIP is a new method to displaing pictures on small atari... | + | <pre> |
- | + | GR10: 000 000 000 222 222 222 222 444 444 | |
- | HIP stands for HARD-Interlacing-Picture and was found by | + | GR09: 000 111 222 111 222 333 444 333 444 |
- | Members of HARD Software, Hungary in June, July 1996... | + | HIP : 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 |
- | + | ||
- | It enables to display 160 x 240 Pixels with 30 shades without | + | GR10: 444 444 666 666 666 666 888 888 888 |
- | nearly all flickering (depends on the source-picture you use)... | + | GR09: 555 666 555 666 777 888 777 888 999 |
- | HARD stands not for HARD or HEAVY Interlacing, just for the | + | HIP : 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 |
- | inventors... | + | |
- | + | GR10: 888 aaa aaa aaa aaa ccc ccc ccc ccc | |
- | 2. The History of HIP | + | GR09: aaa 999 aaa bbb ccc bbb ccc ddd eee |
- | + | HIP : 9.0 9.5 a.0 a.5 b.0 b.5 c.0 c.5 d.0 | |
- | Tamas Bene and I had a "EMail"-conversation the last few month and | + | |
- | we were talking about older demos and effects and suddenly we | + | GR10: eee eee eee |
- | have talked about the Visdowm II-Demo of JAC! where JAC had | + | GR09: ddd eee fff |
- | managed to display 16 colors/shades in a resolution of Gr.15, which | + | HIP : d.5 e.0 e.5 |
- | means 160x200... We talked about the "unity"-demo where Our-5oft | + | </pre> |
- | switched 3 graficmodes in 1 scanline, | + | |
- | gr.8,gr.9 and somehthing similar to gr.15 by altering the prior- | + | OK. Tutaj istnieje 30 możliwości odcieni. Nasze oczy "uśredniają" dwie wartości jasności dzięki wzajemnym przełączaniu dwóch linii (w trybach 9 i 10) podczas każdego przerwania VBI. Dlatego troszkę to miga. |
- | register per DLI... what do you think happens when | + | |
- | writing #0 in that register at the beginning of a scanline, waiting | + | Ale w trybie 10 możliwe jest wybranie każdego z rejestrów kolorów (704-712), więc w procedurze wyświetlania obrazu w HIP, jak i w procedurze DLI, rejestry muszą być ustawione w prawidłowy sposób! |
- | some time... switching to gr.9 by writing #$40 there and after | + | |
- | a little while in the last 1/3 of the scanline back to gr.0 by | + | Dlatego, jeśli patrzysz w powyższą tabelę, zauważ, że tamte liczby oznaczają wartości jasności w Atari! Na przykład jeśli chcemy wyświetlić kolor HIP o wartości 6.5, musimy wtedy ustawić linii trybu graficznego 9 wartość 7 (w Basicu przez komendy: <code>COLOR 7</code>, <code>PLOT x,y</code>). Natomiast dla linii trybu 10 jest wartość 6, ale byłoby niewłaściwie ustawiać piksel kolorem 6, ponieważ mamy właśnie 8 rejestrów koloru w trybie 10. Co powiecie na ustawienie rejestrów koloru w następujący sposób: |
- | writing again #0 into it... what does the GTIA produce? | + | |
- | not gr.0 (or gr.8...)as normaly... he displays something similar to gr.15!!! | + | 704 = 0 |
- | + | 705 = 0 | |
- | He then told me some stories of the coding-sessions of "Joyride" last summer | + | 706 = 2 |
- | and in the DIL-Plasma-Screen they discovered another "BUG"...but | + | 707 = 4 |
- | Tamas had written down the FX and had forgot it... till we were | + | 708 = 6 |
- | taking about GTIA-BUGs... | + | 709 = 8 |
- | + | 710 = 10 | |
- | so we talked now about known GTIA-Bugs and the next day Tamas was | + | 711 = 12 |
- | upset and told me he had discovered a new bug and he had reproduced the | + | 712 = 14 |
- | DIL-"BUG"... he discovered that some scanlines were shifted by | + | |
- | a half (!) gr.9-pixel when the scroller starts and they didnt fixed | + | Jeśli chcemy jasność 6, musimy ustawić piksel kolorem 4: plot x,y! W Graphics 10 wartość piksela wybiera rejestr koloru! Pusty/czarny piksel nie jest ustawiany kolorem 0! |
- | that BUG in the DIL-Screen... | + | |
- | But after reproducing this BUG he discovered that the reason wasnt the | + | Kolor 0 "każe" GTIA postawić piksel z kolorze, który jest zdefiniowany przez rejestr koloru 704!!! Jeżeli więc wstawisz 0 do rejestru 704, będzie tam widoczny czarny piksel. |
- | scroller... it was the special display-list-routine... | + | |
- | + | W trybie 9 nie możemy wstawić 14 do rejestru 712, ponieważ tu rejestr 712 definiuje podstawowy kolor. Dlatego jeśli chcemy 30 odcieni szarości, musimy wstawić tam wartość 0, lecz wtedy w trybie 10 musi być 14 w tym rejestrze. | |
- | 3. Technical Infos conc. HIP | + | |
- | + | Rozwiązaniem jest specjalne przerwanie [[DLI]] i Display Lista. | |
- | The basic idea is that all gr.10-lines were shifted by a half | + | |
- | color-clock (or pixel) by the GTIA and that always!!!! but noone | + | <pre> |
- | has ever tried to combine gr.9 and gr.10... | + | 1. vbi 2. vbi |
- | all have combined gr.9 (16 shades) and gr.11 (16 colors) to display | + | |
- | 256 different colors (like in APACview)... but the resolution | + | DList1 DList2 |
- | was still 80x200... | + | |
- | + | gr9 (0) gr10(0) dli-bit ustawiony | |
- | So here is a ASCII-Description of the basic idea: | + | gr10(1) gr9 (1) |
- | + | gr9 (2) gr10(2) dli-bit ustawiony | |
- | This is the combinations which are needed for the gr10-line and the | + | gr10(3) gr9 (3) |
- | gr9-line to display the wanted HIP-color: | + | gr9 (4) gr10(4) dli-bit ustawiony |
- | + | ... ... | |
- | + | </pre> | |
- | GR10 :000 000 000 222 222 222 222 444 444 | + | |
- | GR09 :000 111 222 111 222 333 444 333 444 | + | (x) jest numerem linii ekranowej w każdej (z dwóch) pamięci obrazu. |
- | HIP :0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 | + | |
- | + | Gdy zapętlimy to, to stworzymy interlace pomiędzy tymi dwoma pamięciami ekranowymi (w trybach 9 i 10) i zrobimy tym sposobem tryb HIP; lecz musimy ustawić prawidłowe wartości w rejestrze COLBAK $d01a (712, zobacz powyżej). | |
- | GR10 :444 444 666 666 666 666 888 888 888 | + | |
- | GR09 :555 666 555 666 777 888 777 888 999 | + | <pre> |
- | HIP :4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 | + | |
- | + | ||
- | GR10 :888 aaa aaa aaa aaa ccc ccc ccc ccc | + | |
- | GR09 :aaa 999 aaa bbb ccc bbb ccc ddd eee | + | |
- | HIP :9.0 9.5 a.0 a.5 b.0 b.5 c.0 c.5 d.0 | + | |
- | + | ||
- | GR10 :eee eee eee | + | |
- | GR09 :ddd eee fff | + | |
- | HIP :d.5 e.0 e.5 | + | |
- | + | ||
- | and viola... here are 30 possibilites of shades... | + | |
- | Our eyes are averaging the two luminance-values by | + | |
- | interlacing the two lines each vbi. | + | |
- | --- | + | |
- | but attention... in gr10 it is possible to select each | + | |
- | of the xl color registers (704-712), so in the display- | + | |
- | routine and the display-list-interrupt the color-registers | + | |
- | have to be set in a correct way!!!! | + | |
- | + | ||
- | so if you look in the above table the values mean the xl-luminance!!! | + | |
- | example: | + | |
- | + | ||
- | if we want to display HIP-color 6.5 then we have to set in the | + | |
- | gr.9-line the value 7 (in basic by color 7 plot x,y) | + | |
- | for the gr10-line there is the value 6 but... it would be | + | |
- | wrong to set the pixel by color 6... coz. we have just 8 color-registers | + | |
- | in gr10... so what about setting the color-registers | + | |
- | in the following way??? | + | |
- | + | ||
- | 704 = 0 | + | |
- | 705 = 0 | + | |
- | 706 = 2 | + | |
- | 707 = 4 | + | |
- | 708 = 6 | + | |
- | 709 = 8 | + | |
- | 710 = 10 | + | |
- | 711 = 12 | + | |
- | 712 = 14 | + | |
- | + | ||
- | so... if we want luminance 6 then we have to set the pixel by | + | |
- | color 4:plot x,y !!!!!!! in gr.10 the pixel-value selects the | + | |
- | color-register!!! an empty/black pixel is not set by color 0 !!! | + | |
- | color 0 says to the gtia "put the pixel with the color which | + | |
- | is defined by color-register 704" !!! so if you have put 0 in 704 | + | |
- | there will be a black-pixel visible... | + | |
- | + | ||
- | But in gr.9 we can`t set 14 in 712 coz. in gr.9 register 712 defines | + | |
- | the basic-color... so if we want 30 grey-shades... we have to put | + | |
- | 0 there... but in gr.10 there must be 14 there... hmmm... the solution | + | |
- | is a special DLI and Display-Lists... | + | |
- | + | ||
- | 1. vbi 2. vbi | + | |
- | + | ||
- | DList1 DList2 | + | |
- | + | ||
- | gr9 (0) gr10(0) dli-bit set | + | |
- | gr10(1) gr9 (1) | + | |
- | gr9 (2) gr10(2) dli-bit set | + | |
- | gr10(3) gr9 (3) | + | |
- | gr9 (4) gr10(4) dli-bit set | + | |
- | ... ... | + | |
- | + | ||
- | (x) is the number of the scanline in each screen-ram... | + | |
- | + | ||
- | so... if we loop this... we interlace between this two gr9 and gr10 | + | |
- | screen-rams and we will have a hip-picture...but we have to set | + | |
- | the correct values in colbk $d01a (712, see above!!!) | + | |
- | + | ||
1. vbi 2. vbi | 1. vbi 2. vbi | ||
- | + | ||
- | DLI1 DLI2 | + | DLI1 DLI2 |
- | + | ||
- | pha pha | + | pha pha |
- | lda #$40 lda #$80 ; switching to correct gr-mode (gr9, gr10) | + | lda #$40 lda #$80 ; przełączenie na |
- | sta wsync sta wsync | + | ; odpow. tryb Graphics |
- | sta gtiamode sta gtiamode | + | ; (Graphics #9, Graphics #10) |
- | lda #0 lda #14 ;setting correct background-color | + | sta wsync sta wsync |
- | sta $d01a sta $d01a | + | sta gtiamode sta gtiamode |
- | lda #$80 lda #$40 ;switching to next gr.mode (see displaylist) | + | lda #0 lda #14 |
- | sta wsync sta wsync | + | ; ustawienie odpow. |
- | sta gtiamode sta gtiamode | + | ; koloru tła |
- | lda #14 lda #0 ;and dont forget the background color! | + | sta $d01a sta $d01a |
- | sta $d01a sta $d01a | + | lda #$80 lda #$40 ; przełączenie na |
- | pla pla | + | ; kolejny tryb Graphics |
- | rti rti | + | ; (zobacz DispList) |
- | + | ||
- | so... this is the technique but there is a "big" problem by | + | sta wsync sta wsync |
- | converting pictures...in gr9/10 each pixel is 4 "bits" large or | + | sta gtiamode sta gtiamode |
- | a nibble and in a hip-pixel 2 of them (the overlaping ones...) | + | lda #14 lda #0 |
- | + | ; i nie zapomnij o | |
- | here an example: | + | ; kolorze tła ! |
- | + | sta d01a sta $d01a | |
- | gr.10: ..00002222... | + | pla pla |
- | gr.9 : 000022224444... | + | rti rti |
- | HIP : ..00112233.. | + | </pre> |
- | + | ||
- | remember: GTIA shifts the gr10-lines by a half gr.10 pixel!!! | + | To jest technika, lecz jest "duży" problem z konwertowaniem obrazków. W trybie 9/10 każdy piksel jest wielki na 4 "bity" lub tzw. "nibble", a piksel w HIP ma 2 "bity" (nakładane na siebie bity). |
- | + | ||
- | so... we will always track one half of the pixel-value to the next | + | Tutaj jest przykład: |
- | hip-pixel... and this is the difficulty... the hip-colors are | + | |
- | NOT able to be set free!!! there are restrictions like the main one: | + | gr.10: ..00002222... |
- | + | gr.9 : 000022224444... | |
- | two following hip-pixels should not have a difference of their luminace | + | HIP : ..00112233.. |
- | greater than 2 !!!! coz. then we could not set the right values and | + | |
- | the hip-pixel will begin to flicker!!! | + | Pamiętaj: GTIA przesuwa linie trybu 10 o pół piksla w trybie 9/10! |
- | + | ||
- | Best way is to use digitised source-pictures with smooth luminance | + | Tak więc będziemy zawsze sprawdzać jedną połówkę wartości piksela aż do kolejnego piksela w trybie HIP. I to jest trudność, bo kolorów w HIP nie można ustawiać oddzielnie. Istnieją ograniczenia takie, jak to główne: |
- | for converting to hip-format... or raytraced stuff... | + | |
- | + | * dwa następujące po sobie piksele w HIP nie powinny mieć różnicy między ich jasnością większej od 2, ponieważ wtedy nie moglibyśmy ustawić prawidłowych wartości i piksel w HIP zacznie migać. | |
- | so try do code such a linear optimasation-algorithmus... | + | |
- | + | Najlepszą metodą (używania trybu HIP) jest wykorzystywanie jako źródła digitalizowanych obrazków z 'wygładzoną' jasnością do konwersji na format HIP, albo przekonwertowanie jakiś raytrace'owanych obrazków. | |
- | 4. Converters: | + | |
- | + | Spróbuj zakodować odpowiedni algorytm optymalizacji dla konwersji na HIP. | |
- | they are avaible for the following systems: | + | |
- | + | ==Konwertery== | |
- | unix coded by Tamas Bene from HARD | + | |
- | PC coded by Tamas Bene from HARD | + | Są one dostępne dla następujących systemów: |
- | + | ||
- | Amiga coded and adapted by HEAVEN of Taquart | + | *Unix - kodowany przez Tamása Benego z HARD |
- | XL my algorithmus, written by HEAVEN of Taquart | + | *PC - kodowany przez Tamása Benego z HARD |
- | + | *Amiga - kodowany i przerobiony przez [[Heaven]]a/[[Taquart]] | |
- | For Converting you need: | + | *XL - moje algorytmy, napisane przez Heavena/Taquart |
- | + | ||
- | -one of the above converters | + | Do konwertowania potrzebujesz: |
- | -a paint-program which can produce pictures in REAL greyscale and 64 | + | |
- | colors in a size 320x200 | + | *jeden z powyższych konwerterów |
- | I think the new version of the bmp2hip-pc-converter can handle | + | *program graficzny, w którym można tworzyć obrazki w PRAWDZIWEJ skali szarości i 64 kolorach, w rozdzielczości 320×200 pikseli (myślę, że nowa wersja konwertera "bmp2hip" na PC będzie mogła 'obrabiać' większe rozdzielczości i więcej kolorów). |
- | bigger sizes and more colors... | + | *obrazek 320×200×64 musi być zapisany w formacie Windows-BMP |
- | -the 320x200x64 picture must be saved in Windows-BMP format | + | *program przenoszący dane na [[XL]]/[[XE]] |
- | -a transfer program to XL | + | *procedurę wyświetlającą tryb HIP na XL |
- | -a HIP-display-routine on XL | + | |
- | + | <pre> | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | I hope I could help someone to do HIPing... | + | |
- | + | ||
- | Heaven, 30.08.96 | + | |
- | + | ||
- | + | ||
- | + | ||
CrEdItS: | CrEdItS: | ||
- | + | - tekst: Heaven | |
- | -Text by Heaven | + | - algorytmy: Sanyi i Tamás z HARD Soft |
- | -Algorithmus by Sanyi and Tamas of HARD | + | - procedura wyświetlania trybu HIP: Tamás z HARD Soft |
- | -HIP-Display-Routine by Tamas of HARD | + | - inspiracja: JAC! |
- | -JAC! for inspiration... | + | - tłumaczenie z angielskiego wraz z dostosowaniem tekstu do EED: Dracon of TQA |
- | + | </pre> | |
- | ps. we have tried to do color-hipping but there is a difficulty | + | |
- | with the luminance of the xl-colors... the luminance is different | + | [[Kategoria:Atari 8-bit]] |
- | of some colors while setting the luminance to 0... so it | + | [[Kategoria:Formaty plików]] |
- | is HARD to calculate correct colors...but it is not impossible | + | [[Kategoria: Tryby graficzne]] |
- | + | ||
- | Future stuff: | + | |
- | + | ||
- | -converters which can handle several formats and colored-picture formats | + | |
- | by generating by themselves the greyscale values... | + | |
- | -color-HIP... a algorithmus to generate colored hips... | + | |
- | -maybe it is possible to interlace HIP and so we could increase | + | |
- | the amount of colors up ??? | + | |
- | + | ||
- | Many Thanx for all: | + | |
- | + | ||
- | -Tamas Bene of HARD ... | + | |
- | _Slaves and rest of Taquart | + | |
- | -Gumi of Tight | + | |
- | -Marek Tomczyk for Websupporting | + | |
- | + | ||
- | try the following webpages: | + | |
- | + | ||
- | http://www.uni-karlsruhe.de/~Marek.Tomczyk/ | + | |
- | + | ||
- | http://ajax.umcs.lublin.pl/~mfranczak (TIGHT) to get to TAQUART | + | |
- | + | ||
- | + | ||
- | --- HeAvEn: Email: nadkar@fh-pforzheim.de --- | + |
Aktualna wersja
Spis treści |
Co to jest HIP ?
HIP jest metodą wyświetlania obrazków na małym Atari. HIP to skrót od "HARD-Interlacing-Picture" i został wymyślony przez członków grupy HARD Software z Węgier w czerwcu 1996 r. Umożliwia on wyświetlenie obrazka w rozdzielczości 160×240 pikseli w 30 odcieniach, prawie bez żadnego migania (zależy to od konkretnego obrazka, którego używasz). "HARD" nie oznacza "ostrego" albo "wielkiego" migotania obrazu, lecz chodzi tu o nazwę grupy, która wymyśliła ten tryb.
Historia HIPa według Heavena/Taquart
Tamás Bene i ja prowadziliśmy "konwersacje internetowe" przez ostatnie kilka miesięcy i rozmawialiśmy o starszych demach i efektach w nich używanych. W pewnym momencie zaczęliśmy rozmawiać o demie "Visdom II" JAComo Leopardiego, gdzie JAC zdołał wyświetlić 16 kolorów/odcieni w rozdzielczości Graphics 15, która oznaczała 160×200 pikseli. Rozmawialiśmy także o demie UNITY, gdzie grupa Our 5oft przełączała trzy tryby graficzne w jednej linii ekranowej: Graphics 8, Graphics 9 i coś podobnego do Graphics 15, wykorzystując do tego zmienianie rejestru GPRIOR ($D01B) w przerwaniu DLI.
Jak myślisz, co się stanie, jeśli wpiszesz #$00 w ten rejestr (GPRIOR) na początku wyświetlania linii ekranowej, odczekasz trochę czasu (procesora). przełączysz wyświetlanie na Graphics 9 przez wpisanie #$40 do GPRIOR i po krótkiej chwili, w 1/3 ostatniej części tejże samej linii ekranowej przywrócisz z powrotem tryb 8, wpisując do GPRIOR ponownie wartość #$00??? Co pokaże GTIA? Nie, nie grafikę 8 (lub Graphics 0) jak normalnie - GTIA wyświetli coś podobnego do trybu 15!!!
Tamás opowiedział mi trochę historii o sesjach kodowania do dema Joyride, w których brał udział ostatniego lata (1995) i stwierdził, że razem z resztą HARD'u odkryli jeszcze jakiś dodatkowy błąd w procedurze plazmy, lecz on dokończył ten efekt i zapomniał o wykrytym błędzie, aż do naszej rozmowy o błędach układu GTIA.
Tak więc zaczęliśmy teraz rozmawiać o znanych błędach w GTIA. Następnego dnia Tamás był zdenerwowany, gdyż stwierdził, że odkrył nowy "bug" i odtworzył stary błąd w plaźmie z "Joyride". Odkrył on, że niektóre linie ekranowe ("scanlines") były przesunięte o pół(!) piksela trybu 9, gdy zaczynał się scroller i oni (HARD) nie poprawili tego błędu w plaźmie. Jednak po odtworzeniu tego błędu Tamás przekonał się, iż powodem błędu nie był scroller. Błąd tkwił w specjalnej procedurze Display-Listy.
Techniczne informacje o HIP
Podstawowym założeniem jest, że wszystkie linie trybu Graphics 10 są przesunięte o połowę piksela (albo o tzw. cykl koloru) w prawo w stosunku do pikseli trybu 9. Nikt jednak nawet nie próbował połączyć trybu 9 z 10. Wszyscy łączyli tryb 9 (16 odcieni) z trybem 11 (16 kolorów), aby wyświetlić 256 różnych kolorów (tak jak to widać w np. APAC View). Lecz wtedy rozdzielczość wynosiła wciąż 80×200 pikseli.
Tutaj znajduje się wytłumaczenie podstawowego pomysłu.
Oto kombinacje, które są potrzebne do łączenia linii trybu grafiki 9 z 10, w celu wyświetlenia pożądanego koloru HIP:
GR10: 000 000 000 222 222 222 222 444 444 GR09: 000 111 222 111 222 333 444 333 444 HIP : 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 GR10: 444 444 666 666 666 666 888 888 888 GR09: 555 666 555 666 777 888 777 888 999 HIP : 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 GR10: 888 aaa aaa aaa aaa ccc ccc ccc ccc GR09: aaa 999 aaa bbb ccc bbb ccc ddd eee HIP : 9.0 9.5 a.0 a.5 b.0 b.5 c.0 c.5 d.0 GR10: eee eee eee GR09: ddd eee fff HIP : d.5 e.0 e.5
OK. Tutaj istnieje 30 możliwości odcieni. Nasze oczy "uśredniają" dwie wartości jasności dzięki wzajemnym przełączaniu dwóch linii (w trybach 9 i 10) podczas każdego przerwania VBI. Dlatego troszkę to miga.
Ale w trybie 10 możliwe jest wybranie każdego z rejestrów kolorów (704-712), więc w procedurze wyświetlania obrazu w HIP, jak i w procedurze DLI, rejestry muszą być ustawione w prawidłowy sposób!
Dlatego, jeśli patrzysz w powyższą tabelę, zauważ, że tamte liczby oznaczają wartości jasności w Atari! Na przykład jeśli chcemy wyświetlić kolor HIP o wartości 6.5, musimy wtedy ustawić linii trybu graficznego 9 wartość 7 (w Basicu przez komendy: COLOR 7
, PLOT x,y
). Natomiast dla linii trybu 10 jest wartość 6, ale byłoby niewłaściwie ustawiać piksel kolorem 6, ponieważ mamy właśnie 8 rejestrów koloru w trybie 10. Co powiecie na ustawienie rejestrów koloru w następujący sposób:
704 = 0 705 = 0 706 = 2 707 = 4 708 = 6 709 = 8 710 = 10 711 = 12 712 = 14
Jeśli chcemy jasność 6, musimy ustawić piksel kolorem 4: plot x,y! W Graphics 10 wartość piksela wybiera rejestr koloru! Pusty/czarny piksel nie jest ustawiany kolorem 0!
Kolor 0 "każe" GTIA postawić piksel z kolorze, który jest zdefiniowany przez rejestr koloru 704!!! Jeżeli więc wstawisz 0 do rejestru 704, będzie tam widoczny czarny piksel.
W trybie 9 nie możemy wstawić 14 do rejestru 712, ponieważ tu rejestr 712 definiuje podstawowy kolor. Dlatego jeśli chcemy 30 odcieni szarości, musimy wstawić tam wartość 0, lecz wtedy w trybie 10 musi być 14 w tym rejestrze.
Rozwiązaniem jest specjalne przerwanie DLI i Display Lista.
1. vbi 2. vbi DList1 DList2 gr9 (0) gr10(0) dli-bit ustawiony gr10(1) gr9 (1) gr9 (2) gr10(2) dli-bit ustawiony gr10(3) gr9 (3) gr9 (4) gr10(4) dli-bit ustawiony ... ...
(x) jest numerem linii ekranowej w każdej (z dwóch) pamięci obrazu.
Gdy zapętlimy to, to stworzymy interlace pomiędzy tymi dwoma pamięciami ekranowymi (w trybach 9 i 10) i zrobimy tym sposobem tryb HIP; lecz musimy ustawić prawidłowe wartości w rejestrze COLBAK $d01a (712, zobacz powyżej).
1. vbi 2. vbi DLI1 DLI2 pha pha lda #$40 lda #$80 ; przełączenie na ; odpow. tryb Graphics ; (Graphics #9, Graphics #10) sta wsync sta wsync sta gtiamode sta gtiamode lda #0 lda #14 ; ustawienie odpow. ; koloru tła sta $d01a sta $d01a lda #$80 lda #$40 ; przełączenie na ; kolejny tryb Graphics ; (zobacz DispList) sta wsync sta wsync sta gtiamode sta gtiamode lda #14 lda #0 ; i nie zapomnij o ; kolorze tła ! sta d01a sta $d01a pla pla rti rti
To jest technika, lecz jest "duży" problem z konwertowaniem obrazków. W trybie 9/10 każdy piksel jest wielki na 4 "bity" lub tzw. "nibble", a piksel w HIP ma 2 "bity" (nakładane na siebie bity).
Tutaj jest przykład:
gr.10: ..00002222... gr.9 : 000022224444... HIP : ..00112233..
Pamiętaj: GTIA przesuwa linie trybu 10 o pół piksla w trybie 9/10!
Tak więc będziemy zawsze sprawdzać jedną połówkę wartości piksela aż do kolejnego piksela w trybie HIP. I to jest trudność, bo kolorów w HIP nie można ustawiać oddzielnie. Istnieją ograniczenia takie, jak to główne:
- dwa następujące po sobie piksele w HIP nie powinny mieć różnicy między ich jasnością większej od 2, ponieważ wtedy nie moglibyśmy ustawić prawidłowych wartości i piksel w HIP zacznie migać.
Najlepszą metodą (używania trybu HIP) jest wykorzystywanie jako źródła digitalizowanych obrazków z 'wygładzoną' jasnością do konwersji na format HIP, albo przekonwertowanie jakiś raytrace'owanych obrazków.
Spróbuj zakodować odpowiedni algorytm optymalizacji dla konwersji na HIP.
Konwertery
Są one dostępne dla następujących systemów:
- Unix - kodowany przez Tamása Benego z HARD
- PC - kodowany przez Tamása Benego z HARD
- Amiga - kodowany i przerobiony przez Heavena/Taquart
- XL - moje algorytmy, napisane przez Heavena/Taquart
Do konwertowania potrzebujesz:
- jeden z powyższych konwerterów
- program graficzny, w którym można tworzyć obrazki w PRAWDZIWEJ skali szarości i 64 kolorach, w rozdzielczości 320×200 pikseli (myślę, że nowa wersja konwertera "bmp2hip" na PC będzie mogła 'obrabiać' większe rozdzielczości i więcej kolorów).
- obrazek 320×200×64 musi być zapisany w formacie Windows-BMP
- program przenoszący dane na XL/XE
- procedurę wyświetlającą tryb HIP na XL
CrEdItS: - tekst: Heaven - algorytmy: Sanyi i Tamás z HARD Soft - procedura wyświetlania trybu HIP: Tamás z HARD Soft - inspiracja: JAC! - tłumaczenie z angielskiego wraz z dostosowaniem tekstu do EED: Dracon of TQA