1

Witam,

Projektuje zamiennik dla urzadzenia S:, co potrafi S2:

1. tworzenia trybow o definiowanej wysokosci,
2. dowolnej szerokosci narrow/normal/wide
3. dla podstawowych trybow moziwosc dodania modyfikatora trybu GTIA
4. tworzenie wielu okien graficznych (mozliwosc otwarcia tylu ile jest kanalow CIO)
5. wyswietlanie wielu okien graficznych jednoczesnie
6. 1-bitowa mapa koloru z definiowana wielkoscia komorki (w pionie)
7. funkcje punkt,linia,wypelnienie,tekst (na ekranie graficznym)

aby to zrealizowac dodalem takze:
- zarzadzanie pamiecia - alokacja i zwalnianie pamieci (nie tylko dla ekranow)
- zarzadznie wyswietlaniem - mozliwosc dodawania wlasnych ekranow, komponowanie wyswietlania, rejestracja wlasnych przerwan DLI do konkretnego ekranu


mozna uzywac nawet w Basicu z tym, ze Basic fun. graficzne kieruje do #6 wiec... najlepiej uzywac XIO ;-)


poniezej filmiki z postepow:

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

https://www.youtube.com/watch?v=Hwor-XaxF7M

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

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

https://www.youtube.com/watch?v=4gqp5blcacA

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

2 Ostatnio edytowany przez mono (2019-09-02 00:31:35)

Świetnie to wygląda.
Mam kilka pytań odnośnie funkcji piszącej tekst na ekranie w trybie graficznym.
Jak wiadomo systemowe generatory znaków przygotowane są dla trybów hires (1 bit na piksel). Czy:
1. Można pisać dowolny tekst używając takiego generatora (jak są interpretowane znaki w inverse video)?
2. Czy mając własny generator znaków zaprojektowany dla trybu multicolor (2 bity na piksel) można go użyć do rysowania fontów w trybie graficznym który pozwala na malowanie pikseli w kilku kolorach (np. czcionka dla trybu 12 OS rysowana w trybie 15 OS lub 7 OS)?
3. Czy można pisać tekst obrócony o 90, 180 i 270 stopni (a może 45, 135, 225 i 315)?
4. Czy tekst można pozycjonować z dokładnością do piksela czy do bajtu?
5. Czy w trybach GTIA tekst jest czytelny czy trzeba sobie skonstruować dla niego osobny generator znaków (4 bity na piksel)?

Edit: Czyli właściwie pytania 1, 2 i 5 sprowadzają się do kwestii mapowania pikseli z generatora znaków na piksele trybu graficznego :)

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

3

draw/fill/tekst chce wziac zewnetrzne procki... http://www.atari.org.pl/forum/viewtopic … 13#p253513
jak nie znajde to tekst zrobie tak:
-generator pod tekst w trybie graficznym ma 256 znakow jak zdefiniujesz inverse to bedzie (user definiuje a jesli nie zdefiniuje to bedzie efekt taki jak w gr.12) - ale jest tez mozliwosc ze inverse bedziesz mial jak wlaczysz 1bit colormap i znaki +128 beda mialy kolormape...
- bez obrotow, moze raczej powinienem to nazwac tiles a nie tekst ;-) tym bardziej, ze praktycznie nie ma ograniczenia do tych 256 znakow - kazde wywolanie moze miec inny zestaw.
- pozycjonowanie do bajtu (ma byc szybkie)

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

4 Ostatnio edytowany przez mono (2019-09-02 12:02:43)

Czyli przepisujesz bajt z generatora do pamięci ekranu. Czyli generator ma mieć konstrukcję odpowiednią dla trybu (1bpp - singlecolor, 2bpp - multicolor, 4bpp - GTIA). W sumie to ideowo zgadza się to z tym co Atari chciało a czego nie, bo tekst w GR.12 też niespecjalnie wygląda z generatorami systemowymi :)
Skoro tiles, to może pomyśl o odbiciach w poziomie (tablica) i pionie (procedura). Twórcom BASIC-owych gier mogłoby to nieco uprzyjemnić robotę.

Edit: A pozycjonowanie co do piksela robienie sprajtów softwareowych.

Edit 2: A jeszcze z maskowaniem... Paaaanie. Tzn. z przezroczystością.

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

5

hehehe - softsprity :-) moznaby zrobic rozszerzone get tile, put tile i ogarnac sprity :-)

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

6

Jeśli byś się za te sprajty brał to mam następującą sugestię:

Zazwyczaj jeden z pikseli (zazwyczaj 0) traktowany jest jako kolor przezroczysty - reszta to piksele definicji sprajta. W trybach 1bpp taki sprajt jest szybko nakładany przez OR, w innych trzeba zamaskować. No ale mając np. tryb 4-kolorowy to para %00 jest zazwyczaj kolorem ramki, która często jest kolorem czarnym. Skutek jest taki, że zazwyczaj taka gra ma tło czarne. Gdybyś umożliwił przy nakładaniu sprajta wybór który kolor z definicji jest traktowany jako przezroczysty, to można byłoby wykorzystać kolor %00 jako zwykły piksel sprajta - dalej jeden sprajt miałby 3 kolory, ale jeden korzystałby z pikseli %01, %10, %11 a inny np. z %01, %10 i %00 a więc można by używać koloru ramki i mieć np. kolorowe tło (tak, jak ma Gorgh w swojej grze z motorem).
Można powiedzieć, że niczym się to nie różni od sytuacji kiedy masz dla sprajta zdefiniowany jego kształt i osobno maskę. Ale wtedy dla każdego sprajta musisz mieć i kształt i maskę. W proponowanej wyżej sytuacji masz tylko definicję sprajta, dzięki czemu zajmuje to mniej pamięci bo nie każdy sprajt musi używać pary %00.

Problem jest tylko taki, że nakładanie takiego sprajta trzeba maskować więc trzeba by mieć 256-bajtowe tablice masek. Dla trybów 1bpp potrzebujesz 2 tablice, dla 2bpp 4 tablice, dla 4bpp 16 tablic.
Można by założyć że sprajty o indeksach $00..$7F mają zawsze piksel %00 przezroczysty, a sprajty $80..$FF piksel %11 przezroczysty. Wtedy trzeba 2 tablice dla 1bpp, 2 tablice dla 2bpp i 2 tablice dla 4bpp.

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

7

pomysl calkiem fajny, nowatorski. ale... a jak bede chcial sprita z obrysem? i pytania od userow - dlaczego mam utrzymywac tablice gdy nie skorzystam z tilesow i softsptitow?

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

8

Tak. To wymaga malowania dwóch sprajtów na sobie.
Nie musisz mieć tablic - możesz maskować programowo :P.

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

9 Ostatnio edytowany przez xxl (2019-09-03 11:28:42)

prawda. przebolalbm szbkosc...

mozesz zaprezentowac procke bez tablic? kolor przezroczysy "10" w zp1 adres kloca, w zp2 adres pamieci ekranu.

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

10 Ostatnio edytowany przez mono (2019-09-04 00:42:16)

Powinno być to coś w tej podobie:
1. 1bpp:

tile1bpp:
        lda #%11111111  ;kolor przezroczysty (%1 powielony na wszystkie piksele)

        eor (zp1)       ;z piksela przezroczystego robimy %0

        nop             ;i liczymy maske

        pha             ;maskujemy piksele kloca
        and (zp1)
        sta tmp
        pla             ;maskujemy piksele ekranu
        eor #%11111111
        and (zp2)
        ora tmp         ;i scalamy
        sta (zp2)

2. 2bpp

tile2bpp:
        lda #%10101010  ;kolor przezroczysty (%10 powielony na wszystkie piksele)

        eor (zp1)       ;z piksela przezroczystego robimy %00

        pha             ;i liczymy maske
        and #%01010101
        sta tmp
        pla
        and #%10101010
        lsr
        ora tmp
        sta tmp
        asl
        ora tmp

        pha             ;maskujemy piksele kloca
        and (zp1)
        sta tmp
        pla             ;maskujemy piksele ekranu
        eor #%11111111
        and (zp2)
        ora tmp         ;i scalamy
        sta (zp2)

3. 4bpp

tile4bpp:
        lda #%00010001  ;kolor przezroczysty (%0001 powielony na wszystkie piksele)

        eor (zp1)       ;z piksela przezroczystego robimy %0000

        pha             ;i liczymy maske
        and #%00001111
        seq
        ora #%00001111
        sta tmp
        pla
        and #%11110000
        seq
        ora #%11110000
        ora tmp

        pha             ;maskujemy piksele kloca
        and (zp1)
        sta tmp
        pla             ;maskujemy piksele ekranu
        eor #%11111111
        and (zp2)
        ora tmp         ;i scalamy
        sta (zp2)

Począwszy od "maskujemy piksele kloca" kod jest identyczny. Podobny też jest kod aż do "i liczymy maske". Różny jest kod do liczenia maski stąd najfajniej mieć tę maskę stablicowaną :)

Edit: Oczywiście indeks koloru przezroczystego może być dowolny.

Edit 2: No i zp1 i zp2 możesz używać z dowolnym x czy y bo są nie używane (dlatego nie pisałem pełnego trybu adresowego).

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

11 Ostatnio edytowany przez xxl (2020-12-27 22:21:51)

dodaje do kompletu E: driver

mozna mieszac grafike i tekst, marinesy prawy/lewy, gora/dol

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

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

12

Piękne, sterownik będzie działał po SDX ?

13 Ostatnio edytowany przez xxl (2020-12-28 05:49:51)

nie mam SDX, jak SDX jest dobrze napisany to powinien dzialac, z dyskowa wersja raczej dziala:



https://obrazki.elektroda.pl/7093026900_1609130841.jpg

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

14

To je dobre.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

15 Ostatnio edytowany przez mono (2020-12-28 07:11:44)

Bardzo fajne. Zaimplementowałeś może pionowy scroll tekstowy za pomocą DL zamiast przepisywać ekran? Nie bardzo wiem jak to samo zrobić z poziomym. Chodzi mi o zgrubny scroll co znak. DL i pamięć ekranu jest wtedy poniżej $8000 co jest nie bardzo z rozszerzeniami Axlon i Rambo :(

Edit: Fonty 4x8 w wersji standard i international są załączone jako osobne pliki w paczce ze sterownikiem RC_GR8 w SDX.

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

16

Poproszę o testy na real atari albo z emulatorem w realnej grafice, tzn. włączone artefakty.

17

Skąd można pobrać ?

18

mono napisał/a:

Zaimplementowałeś może pionowy scroll tekstowy za pomocą DL zamiast przepisywać ekran?

nie. musi byc przepisywanie danch poniewaz nie chce scrolla takiego jak jest w standardzie. chce zeby edytor mozna bylo uruchomic w okienku a wtedy scrollowac ma sie tylko zawartosc okienka.

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

19 Ostatnio edytowany przez xxl (2020-12-31 13:23:19)

https://www.youtube.com/watch?v=6ZZ11NyUlS4

no i tak to sie robi ;-)

edytor w okienku ..... w koncu.

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

20

Świetna robota, skąd można pobrać ?

21 Ostatnio edytowany przez xxl (2021-01-01 15:10:37)

za wczesnie na to. poza tym, czerpalem metody programowania z takich programow i gier jak np. Road Race, Bounty Bob, SynFile+ wiec ten handler nie bedzie dzialal z u1mb

---

mozna otworzc edytor w dowolnym miejscu ekranu i nadac mu dowolna wielkosc.

standardowy edytor ma ograniczenie ze nie mozna wprowadzac dlugich linii w Basicu...  tu przklad linii 255 znakowych:

https://obrazki.elektroda.pl/9184357500_1609509590.png

zastanawiam sie czy nie dodac opcji jakich znakow mozna uzywac w E80: ... np. tylko cyfry, znaki alfanumeryczne itp.

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

22

xxl napisał/a:

wiec ten handler nie bedzie dzialal z u1mb

Wow. Faktycznie powinieneś udać się do lekarza pierwszego kontaktu celem diagnozy :)

Kontakt: pin@usdk.pl

23

xxl napisał/a:

wiec ten handler nie bedzie dzialal z u1mb

Podziwiam umiejętności programistyczne. Serio, jestem pod ogromnym wrażeniem. Ale to jest po prostu chore :( I przykre.

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

24

tez tak uwazam, ale czasem tak jest z niedostatecznie przetestowanymi urzdzeniami.

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

25

A  Road Race, Bounty Bob, SynFile+ nie dzialają z U1M?
Dobry programista poradziłby sobie z "ułomnością"  z U1M...

Zddrowego rozsądku w 2021 roku życzę!

https://systemembedded.eu/ ... https://www.youtube.com/watch?v=GwS7Es1x6mw
""Ja bardzo przepraszam, ale podejrzenia panów są całkowicie bezpodstawne. Ja niczym nie handluję. Ta pani przyszła do mnie w tym Pancake-u i w nim wychodzi.""
ABBUC Member #319. Preferowana forma kontaktu: email