1

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?

2

Odp: zmiana pamięci ekranu w środku linii znakowej

Ustaw scroll na linii i LMS-a.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

Odp: zmiana pamięci ekranu w środku linii znakowej

czyli chodzi o to aby w DLI ustawić scroll pionowy na jakąś graniczną wartość i zmienić wartość LMS w danej linii?

4

Odp: zmiana pamięci ekranu w środku linii znakowej

? 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/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

5

Odp: zmiana pamięci ekranu w środku linii znakowej

@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)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

6

Odp: zmiana pamięci ekranu w środku linii znakowej

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)

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

7

Odp: zmiana pamięci ekranu w środku linii znakowej

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!

8

Odp: zmiana pamięci ekranu w środku linii znakowej

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.

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

9

Odp: zmiana pamięci ekranu w środku linii znakowej

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

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

10

Odp: zmiana pamięci ekranu w środku linii znakowej

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)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

11

Odp: zmiana pamięci ekranu w środku linii znakowej

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

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

12

Odp: zmiana pamięci ekranu w środku linii znakowej

tebe napisał/a:

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.

tebe napisał/a:

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.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

13

Odp: zmiana pamięci ekranu w środku linii znakowej

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ć.

Post's attachments

mode.png 49.26 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

14

Odp: zmiana pamięci ekranu w środku linii znakowej

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)

15

Odp: zmiana pamięci ekranu w środku linii znakowej

nie wiem czy dobrze rozumiem ale bez dli chyba nie da sie wykorzystac pelnej matrycy znaku 8x10. potrzebne sa dwa zestawy?

http://atari.pl/hsc/ad.php?i=1.

16

Odp: zmiana pamięci ekranu w środku linii znakowej

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.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

17

Odp: zmiana pamięci ekranu w środku linii znakowej

nie rozumiem. moglbys pokazac przedefiniowane dwie literki kolo siebie "Y" i "y" z wykorzystaniem matrycy 8x10 ?

http://atari.pl/hsc/ad.php?i=1.

18

Odp: zmiana pamięci ekranu w środku linii znakowej

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 :)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

19

Odp: zmiana pamięci ekranu w środku linii znakowej

xxl napisał/a:

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.

Post's attachments

mode.png 11.88 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

20

Odp: zmiana pamięci ekranu w środku linii znakowej

:rolleyes:

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

21

Odp: zmiana pamięci ekranu w środku linii znakowej

no wlasnie. a co sie stanie jesli w 7 linii zmienimy anticowi pamiec odpowiednio ustawiajac portb. jest mozliwe ze 8 linii bedzie myslal ze ma znaki np. $3f a po zmianie pamiec ze $7f, pobierze i wyswietli definicje innego znaku?

http://atari.pl/hsc/ad.php?i=1.

22

Odp: zmiana pamięci ekranu w środku linii znakowej

mono napisał/a:

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 :)

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021

23

Odp: zmiana pamięci ekranu w środku linii znakowej

@xxl: Dane z generatora znaków brane są na bieżąco, dane z pamięci ekranu w pierwszej linii trybu.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

24

Odp: zmiana pamięci ekranu w środku linii znakowej

mono napisał/a:
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. :)

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

25

Odp: zmiana pamięci ekranu w środku linii znakowej

Nie da rady, nadeszły dwa (słownie 2 ) arty (kuły)