1

Temat: zmiana charsetu w linii

kiedyś próbowałem zmienić zestaw znaków w linii, widocznych efektów nie udało się zauważyć, przyjąłem więc że ANTIC nie pozwala na tego typu przekręty

okazuje się jednak że można zmienić zestaw znaków w linii, z tym że nie od dowolnego miejsca

w załączniku przykład intensywnego zapisywania do rejestru CHBASE dwóch adresów zestawów znaków (różnią się kolorem, kolor źółty to CHARSET #0, kolor niebieski CHARSET #1), jak widać udaje się dokonać do 8 zmian w linii (na 15 zapisów rejestru CHBASE), podejrzewam że są to miejsca w których plamka jest wyrównana do początku znaku, w pozostałych przypadkach kiedy próbuje się zmienić CHBASE w trakcie rysowania znaku zmiana CHBASE jest ignorowana, lub ma to jakiś związek z czasami w jakich ANTIC pobiera dane

puste linie 0,8,16 itd. to tzw. bad lines, w nich ANTIC dokonuje dekodowania znaków, aktualnie w pamięci obrazu są same zera

do czego można spożytkować zmiany zestawów znakowych w linii? jakieś pomysły?

"bad lines" się nie pozbędziemy, przełączanie zabiera czas CPU, w końcu jest to tryb GED+

p.s.
Atari800Win wyświetla poprawnie, Altirra nie do końca

Ostatnio edytowany przez tebe (2010-04-11 18:37:12)

Post's attachments

split_charset.zip 1.09 kb, liczba pobrań: 29 (od 2010-04-11) 

Tylko zalogowani mogą pobierać załączniki.
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

Odp: zmiana charsetu w linii

Na "wadliwym GTIA" wygląda to tak:

http://www.fotoszok.pl/upload/7c94f1bf.jpg

3

Odp: zmiana charsetu w linii

zdjęcie OK, oprócz tego że kolory są inne

Ostatnio edytowany przez tebe (2010-04-12 07:17:03)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

4

Odp: zmiana charsetu w linii

Hej!

Też kiedyś próbowałem takiej zabawy, ale mi wyszło że to nie działa :) Jak widać się myliłem...

Jak zapewne niektórzy wiedzą, VIC który znajduje się w C64 ma pełny 256 znakowy zestaw fontów, zawsze im tego zazdrościłem bo można było sobie ładnie ekran zorganizować do wektorów wypełnianych metodą blitter-ową (XOR,STA), w pamięci obrazu robili sobie coś takiego:

$00,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0
$01,$11,$21,................................................$2F
$02,...
$03,...
$04,...
$05,...
$06,...
$07,...
$08,...
$09,...
$0A,...
$0B,...
$0C,...
$0D,...
$0E,...
$0F,........................................................$FF

Chyba nie muszę mówić jak szybki był na tym blitter-draw ;) potem blitter-fill i mamy piękne duże wektory, ba nawet glenz-wektory jak usuniemy zasłanianie ścian. W przypadku ATARI byliśmy ograniczeni wielkością zestawu znaków do 128.

Kiedyś (okolice po 1995 roku) sobie wymyśliłem sobie iż można by podzielić ekran w połowie szerokości (dwa zestawy) jeden z lewej strony, drugi z prawej strony ekranu... Fonty zorganizowane jak w przypadku C64.... czyli mniej więcej coś takiego:

$00,$10,$20,$30,$40,$50,$60,$70 | $00,$10,$20,$30,$40,$50,$60,$70|
$01,$11.....................$71 | $01,$11.....................$71|
$02,$12.....................$72 | $02,$12.....................$72|
$03,$13.....................$73 | $03,$13.....................$73|
$04,$14.....................$74 | $04,$14.....................$74|
$05,$15.....................$75 | $05,$15.....................$75|
$06,$16.....................$76 | $06,$16.....................$76|
$07,$17.....................$77 | $07,$17.....................$77|
$...........................$78 | $...........................$78|
$...........................$79 | $...........................$79|
$...........................$7a | $...........................$7a|
$...........................$7b | $...........................$7b|
$...........................$7c | $...........................$7c|
$...........................$7d | $...........................$7d|
$...........................$7e | $...........................$7e|
$0f,$1f,....................$7f | $0f,$1f,....................$7f|

jednak wtedy nie udało mi przełączyć zestawu w środku linii... jak widać byłem zbyt mało cierpliwy :) teraz można by to zrealizować, rysowanie linii przy takiej organizacji ekranu  mogło by być równie szybkie... a zmianę zestawu w środku linii można by dokonywać podczas blitter-fill (EOR, STA).

Drugi pomysł to "logoser" bazujący na przełączaniu zestawu w środku linii... ale pomysł chyba nie-efektywny czasowo... chyba łatwiej mieć więcej zestawów nić bawić się w podział poziomy i logos-owanie niezależne dla dwóch odrębnych obszarów tak aby zmieściły się w jednym zestawie znaków ;)

pozdrawiam
Seban

ps) właśnie sobie uświadomiłem że o kant dupy potłuc moje pomysły... BAD-LINES wszystko załatwiają... ja chyba właśnie próbowałem zmienić CharBase w pierwszej linii i dlatego mi nie wychodziło ;)

Ostatnio edytowany przez seban (2010-04-13 13:36:03)

5

Odp: zmiana charsetu w linii

Tryb znakowy nic nie daje filetom, a tylko kradnie cykle. Bufor krawędzi możesz przecież zorganizować tak jak na pierwszym rysunku, a blitować hektarem kodu do zwykłego trybu graficznego. Tak zrobiłem w Drunk Chessboard.

tebe: bad lines można się pozbyć manipulując VSCROLem. Można je uzyskać dowolnie, od 1 do 240 na ekranie.

https://www.youtube.com/watch?v=jofNR_WkoCE

6

Odp: zmiana charsetu w linii

ok, będę starał się pozbyć się tych bad-lines czyli miejsc w których ANTIC zabiera najwięcej czasu CPU, byle potem Fox nie napisał że opanował już to wszystko w końcu lat 80-tych i schował do szuflady

tak na oko sprawa sprowadza się do oszukania ANTIC-a i "wmówieniu" mu że wiersz składający się z 8 linii nigdy się nie kończy, co pewnie oznacza że w każdym wierszu będą te same znaki a to oznacza że co wiersz trzeba zmieniać zestaw znaków, czyli pewnie wiersze będą wysokości 7 linii i będzie trzeba zużyć jakieś 34 zestawy (34 KB) aby pokryć całe 240 linii obrazu

niezłe marnotrawstwo, skoro tylko 32-48 znaków np. z początku każdego zestawu będzie tylko wykorzystanych, reszta do spożytkowania w inny sposób

skoro ANTIC reaguje na zmiany zestawu w linii, może to oznaczać że obliczenia adresu znaku dokonuje na bieżąco, a pierwsza linia każdego wiersza służy mu do np. zbuforowania wiersza, czyli odczytania wiersza bajt po bajcie i zapisaniu w swojej pamięci wewnętrznej

podsumowując, w teorii - pierwsza linia ekranu będzie bad-lines pozwalająca zbuforować ANTIC-owi wiersz, potem zostanie zablokowany VSCROL-em licznik linii wiersza tak aby ANTIC nigdy nie dokonał ponownego buforowania, znaki charsetu będą odpowiednio przycięte - o 1 linię krótsze, co 7 linii zmiana charsetu

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

7

Odp: zmiana charsetu w linii

:) Pierwszej linii (ze skrolem) nie dasz rady wyciągnąć, bo DCTR liczy od VSCROL do 7. Za to drugą (z wyłączonym skrolem) wyciągniesz, bo DCTR liczy od 0 do VSCROL. Możesz używać po 8 linii z fontu: np. ustawiasz VSCROL na 12, a po ósmej linii przełączasz font i VSCROL na 4. Znowu 8 linii (DCTR w tym czasie od 8 do 15, z fontu brane linie 0-7) i przełączasz font i VSCROL na 12. Itd.

Można też w drugą stronę: aby mieć badlinie w każdej linii i co za tym idzie możliwość podkładania 5-go koloru co linię, a nie 8.

Przy okazji, dziękuję za przedruk.

https://www.youtube.com/watch?v=jofNR_WkoCE

8

Odp: zmiana charsetu w linii

Jeżeli będziemy mieć tylko jedną bad line na początku ekranu, to stracimy możliwość manipulacji bitem inwersu (5-ty kolor), co znacznie ograniczy zastosowania takiego trybu.

9

Odp: zmiana charsetu w linii

Święta racja.

https://www.youtube.com/watch?v=jofNR_WkoCE

10

Odp: zmiana charsetu w linii

udało się, z pierwszym wierszem są kłopoty, potem już idzie OK

tak że badlines można usunąć z pomocą VSCROL-a

kod wymaga jeszcze dodatkowych testów na jakiejś sensowniejszej zawartości obrazu

Ostatnio edytowany przez tebe (2010-04-15 20:55:40)

Post's attachments

atari000.png 1.66 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

11

Odp: zmiana charsetu w linii

ok, nowy G2F pozwala na wyłączenie "badlines" dla trybu GED+

adres ładowania pliku musiał zostać obniżony do $1000 inaczej plik nie mieści się w pamięci, w końcu to 30KB zestawów znaków i obszerny kod zmian rastra oraz pamięć dla PMG

pozatym dla wyłączonych "badlines" tracimy 5-y kolor, pierwszy wiersz obrazu i ostatnie 4 linie obrazu, tak więc graficy nie mają się co podniecać, wyłączenie "badlines" przydać się może bardziej w demie w stylu "Ilusii"

Post's attachments

disable_badlines.zip 4.76 kb, liczba pobrań: 10 (od 2010-04-18) 

Tylko zalogowani mogą pobierać załączniki.
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

12

Odp: zmiana charsetu w linii

tebe napisał/a:

dla wyłączonych "badlines" tracimy 5-y kolor, pierwszy wiersz obrazu i ostatnie 4 linie obrazu

Dlaczego?

https://www.youtube.com/watch?v=jofNR_WkoCE

13

Odp: zmiana charsetu w linii

dlaczego tracimy 5-y kolor? to już wiesz, zależy to od tego czy wystąpił on w pierwszym wierszu czy nie, jeśli tak to w kolumnie w której wystąpił mamy 5-y kolor

a 8 i 4 ostatnie linie to są tracone z powodu synchronizacji, jeśli synchro jest złe występuje ciekawy efekt postrzępienia znaków

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

14

Odp: zmiana charsetu w linii

Jakiej synchronizacji? Jakie postrzępienie?

https://www.youtube.com/watch?v=jofNR_WkoCE