Temat: zmiana pamięci ekranu w środku linii znakowej
Mam pewien pomysł na efekt, ale potrzebuję do tego zmiany pamięci ekranu w środku wiersza w trybie znakowym, czy taka modyfikacja Display Listy jest możliwa?
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
4th Atari ASCII Compo - wyniki Dostępne są już wyniki tegorocznego ATASCII Compo.
thing neo 1.60 Olivier Landemarre wydał nową wersję desktopu Thing.
VIII. Basque Tournament of Atari 2600 Kolejna relacja, wśród otrzymywanych od naszego przyjaciela Egoitza z Kraju Basków.
Przezroczysta obudowa dla Atari 800XL Rusza przedsprzedaż wyjątkowej, przezroczystej obudowy do komputera Atari 800XL!
RECOIL 6.4.5 RECOIL to przeglądarka retro plików graficznych, obsługująca ponad 550 formatów, dostępna na różnych systemach operacyjnych, z regularnymi aktualizacjami.
Zaloguj się lub zarejestruj by napisać odpowiedź
Mam pewien pomysł na efekt, ale potrzebuję do tego zmiany pamięci ekranu w środku wiersza w trybie znakowym, czy taka modyfikacja Display Listy jest możliwa?
Ustaw scroll na linii i LMS-a.
czyli chodzi o to aby w DLI ustawić scroll pionowy na jakąś graniczną wartość i zmienić wartość LMS w danej linii?
? pierwsze słyszę aby scroll i LMS coś zmieniały w środku linii
JAC udowodnił że można, bodaj w Silly Things (dwa obrazki rozdzielone ruchomą grubą obracającą się linią), czekał jakieś 20 lat aby zrealizować ten efekt, bo nie znał metody na wyeliminowanie 'bad lines'. Fox/Tqa udostępnił tą metodę od czasów Numena, wyjaśnił ją w gazetce "Atarynka" wydawanej przez Sikora, ten tryb to 9++.
tutaj link do 'przedruku' artykułu http://madteam.atari8.info/index.php?atarynka=tryb9pp
ten artykuł wyjaśnia jak z udziałem DLI wyeliminować 'bad lines', jak zmieniać zestawy znaków w linii?
program rastra, można go zbudować w G2F, np. napisać zmiany rejestru COLBAK, a potem w edytorze tekstowym podmienić COLBAK na CHBASE (taki myk na wprowadzenie rejestru którego nie ma na liście G2F)
podejrzewam jednak GORGH że można to zrealizować znacznie prościej, po prostu zbuduj obraz ze znaków, każdy wiersz będzie np. zawierał ten sam układ znaków, co wiersz zmieniasz zestaw znaków na nowy
ABCDEF GHIJKL .....
ABCDEF GHIJKL .....
ABCDEF GHIJKL .....
ABCDEF GHIJKL .....
teraz twoja procka rysująca będzie musiała rysować po znakach jak po bitmapie, znaki ABCDEF to twój pierwszy 'rastr', znaki GHIJKL drugi 'rastr' itd.
p.s.
DLI (Display List Interrupt) , DL (Display List), podobne w nazwie, ale inne w oprogramowaniu
@Tebe: Taka dlista:
LMS+TXT+VSCRL
LMS+TXT
LMS+TXT+VSCRL
LMS+TXT
...
VSCROL na sztywno ustawiony na jakąś wartość powiedzmy 4 i zdaje się mamy tryb tekstowy 4 liniowy (5 w niescrollowanych niestety i nie wiem jak to wyeliminować).
Edit: Gorghowi chodziło o zmianę LMS w środku wiersza.
Piszę z głowy - konkretny przykład mogę podać wieczorem, bo się tym kiedyś bawiłem akurat w celu uzyskania 12 liniowego trybu tekstowego.
Ostatnio edytowany przez mono (2015-03-17 12:54:17)
zmiana LMS w linii się nie uda, ale tak jak napisałem są wersje alternatywne, trzeba tylko przestać myśleć po bitmapowemu a bardziej po znakowemu
Ostatnio edytowany przez tebe (2015-03-17 19:49:09)
dzieki za wyjasnienia. mi chodzi o to aby zestaw znakow byl ten sam, lecz linii znakowych 2x wiecej, rysowanie tak jak po bitmapie- nie za bardzo mi o to chodzi, obczaje 9+ i dli+,dzieki!
Licznik pamieci obrazu w srodku linii po prostu idzie do przodu. Nie ma na to rady.
Mozesz najwyzej umiescic obraz w dodatkowej pamieci 130 XE i przelaczyc bank dla ANTICa w dowolnym momencie.
Albo przelaczyc font, jak rzecze TeBe.
ooo, tego nie próbowałem, zmiana banku pamięci w środku tworzenia linii obrazu :)
pamięć obrazu dla ANTIC-a ustawić np. na $4000 i przełączać banki w programie rastra
Uściślijmy może o co gorghowi chodzi:
1. O zmianę adresu pobierania danych ekranowych (czyli z pamięci ekranu) podczas malowania linii rastra (z lewej strony dane z jednego obszaru pamięci, z prawej strony dane z innego obszaru).
2. O zmianę adresu pobierania danych ekranowych po narysowaniu n linii wiersza tekstu (w górnej połówce wiersza dane z jednego obszaru, w dolnej z innego).
Ja zroumiałem, że gorgh chce 2 opcję :) A Wy mówicie o 1...
Edit: @tebe: oiw dane z pamięci ekranu pobierane są tylko podczas badline więc jak tu zmienić adres licznika w środku takiego rastra? Potem można co najwyżej przełączyć generator znaków na inny.
Ostatnio edytowany przez mono (2015-03-17 20:33:25)
mono G2F -> Special -> Mode -> GED+ -> disable bad lines
teraz dla GED+ dostajesz tryb znakowy z programem rastra z wyłączonymi bad lines, DL dla Antica to jeden wiersz obrazu, wszystkie pozostałe wiersze zawierają tą samą informację, zmiana treści obrazu tylko poprzez przełączanie zestawów znakowych, dla 30 wierszy oznacza to 30 kB danych, możesz zmieniać zestawy znaków w środku linii, 5-y kolor dyskusyjny bo jego użycie oznacza że będzie użyty na całej wysokości ekranu
ad.2 można zdefiniować znak, który ma dwie połówki 4 bajty górne, 4 dolne, aby je przełączać użyć trzeba rejestru ANTIC-a CHRCTL, który obraca znak do góry nogami
jeśli w kolejnych liniach wiersza będziemy włączać jakiś zestaw znaków to zawsze zostanie wyświetlona linia znaku odpowiadająca aktualnej pozycji pionowej w takim wierszu (0..7)
jak zmusić ANTIC do wyświetlenia konkretnej linii znaku w konkretnej linii wiersza?
rozpisać teksturę na zestawy znaków, jedna linia tekstury = 1 zestaw znaków
używając rejestru CHRCTL zaoszczędzimy połowę pamięci, na 32 zestawach będzie można zapisać 64 linie tekstury
5-y kolor dyskusyjny bo jego użycie oznacza że będzie użyty na całej wysokości ekranu
Chyba, że w rzeczonym modyfikowanym w rastrze CHRCTL manipulujesz bitem 1. Możesz jeszcze użyć HSCROLL do przesuwania treści obrazu w poziomie.
ad.2 można zdefiniować znak, który ma dwie połówki 4 bajty górne, 4 dolne, aby je przełączać użyć trzeba rejestru ANTIC-a CHRCTL, który obraca znak do góry nogami
Wykorzystując moją metodę nie trzeba obracać znaku i w ogóle nie ma tam żadnego DLI - ten obraz jest statyczny, a CPU ma wszystko dla siebie.
Ale generalnie świetny pomysł. Odpalę G2F i zobaczę jak usuwacie badlines.
Obiecany przykład. Tu akurat wykorzystany jest ANTIC3 więc wiersze mają 5 i 6 linii skanningowych:
lda #%00111011
ldx #<dlist
ldy #>dlist
sta DMACTS
stx DLPTRS
sty DLPTRS+1
lda #4
sta VSCROL
jmp *
org screen
:48*2*16 .byte <#
dlist:
:3 .byte EMP8
.byte LMS+VSCRL+ANT3
.word screen
.byte ANT3
:15 .byte EMP1,VSCRL+ANT3,ANT3
.byte JVB
.word dlist
Między dwoma wierszami wsadzona jest pusta linia dla uwidocznienia podziału - może jej nie być.
Mono: to świetne, tylko gdyby wiersze mogły mieć taką samą ilość linii :(
edit:
a gdyby w DLI przestawiać wartość VSCROLLA?
Ostatnio edytowany przez gorgh (2015-03-18 09:35:53)
Da się. W tym trybie znaki $00..$5F rysowane są tak, że pierwsze dwie linie są puste, dane z generatora wpisywane są dopiero od drugiej linii. Znaki $60..$7F z kolei rysowane są tak, że dane z generatora malowane są od linii zerowej, a w liniach 8 i 9 powtarzane są znowu dane z generatora dla linii 0 i 1. Dlatego przesuwam w pionie wiersz, żeby móc malować w wierszach parzystych połówki znaków $00..$5F, a w dolnych 3/4 znaków $60..$7f.
gdyby wiersze mogły mieć taką samą ilość linii :(
edit:
a gdyby w DLI przestawiać wartość VSCROLLA?
Skąd ta nieparzysta ilość linii? ANTIC redukuje wiersz nieskrolowany następujący po wierszu skrolowanym do jednej linii skanningowej. VSCROL nic tu nie pomoże, bo i tak w takim podwójnym wierszu będziemy mieć zawsze n+1 linii skanningowych.
Chyba, że 0xF albo Tebe zna jakiś trick :)
nie rozumiem. moglbys pokazac przedefiniowane dwie literki kolo siebie "Y" i "y" z wykorzystaniem matrycy 8x10 ?
Bardzo proszę:
lda #%00100010
ldx #<dlist
ldy #>dlist
sta DMACTS
stx DLPTRS
sty DLPTRS+1
lda #>charset
sta CHBAS
jmp *
screen:
.rept 2
.byte "Yy"
.byte "Yy" +$80
:36 .byte " "
.endr
dlist:
:3 .byte EMP8
.byte LMS+ANT3
.word screen
.byte EMP1
.byte ANT3
.byte JVB
.word dlist
org charset+"Y"*8
.byte %01100110
.byte %01100110
.byte %01100110
.byte %01100110
.byte %00111100
.byte %00011000
.byte %00011000
.byte %00011000
org charset+"y"*8
.byte %00000110
.byte %00111100
.byte %01100110
.byte %01100110
.byte %01100110
.byte %01100110
.byte %01100110
.byte %00111110
Jak widać definicja "y" jest przesunięta w dół o dwie linie skanningowe po czym zapętlana w ramach znaku.
Zatem źle opisałem cechę ANTIC3 - puste linie dla znaków $00..$5F wstawiane są na końcu, a dla $60..$7F na początku.
:rolleyes:
Jak widać definicja "y" jest przesunięta w dół o dwie linie skanningowe po czym zapętlana w ramach znaku.
Zatem źle opisałem cechę ANTIC3 - puste linie dla znaków $00..$5F wstawiane są na końcu, a dla $60..$7F na początku.
Zastosowałem ten tryb w outrze do ASCII collection NG w 1998 :)
@xxl: Dane z generatora znaków brane są na bieżąco, dane z pamięci ekranu w pierwszej linii trybu.
gorgh napisał/a:gdyby wiersze mogły mieć taką samą ilość linii :(
edit:
a gdyby w DLI przestawiać wartość VSCROLLA?Skąd ta nieparzysta ilość linii? ANTIC redukuje wiersz nieskrolowany następujący po wierszu skrolowanym do jednej linii skanningowej. VSCROL nic tu nie pomoże, bo i tak w takim podwójnym wierszu będziemy mieć zawsze n+1 linii skanningowych.
Chyba, że 0xF albo Tebe zna jakiś trick :)
Na Foreverze napisalem artykul w tym temacie. Czytajcie nastepnego Seriousa. :)
Nie da rady, nadeszły dwa (słownie 2 ) arty (kuły)
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.109 sekund, wykonano 11 zapytań ]