Temat: Pisanie tekstu w trybie graficznym?
Jak można napisać coś na ekranie w trybie graficznym, bez displaylist? Chodzi mi głównie o tryb 7 i jego pełnoekranowy odpowiednik.
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.
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Jak można napisać coś na ekranie w trybie graficznym, bez displaylist? Chodzi mi głównie o tryb 7 i jego pełnoekranowy odpowiednik.
W Turbo Basic XL masz do tego instrukcję. W asemblerze stawiasz piksel po pikselu lub całe bajty.
A w Actionie?
Witaj,
Wiesz co, normalnie z ciekawości postanowiłem sprawdzić ile mi to zajmie. Nigdy nie pisałem w Action! traktowałem ten język jako ciekawostkę raczej, spokoju mi to nie dawało więc zajrzałem sobie tutaj:
http://atariki.krap.pl/index.php/Action!
potem trafiłem tutaj:
http://www.noniandjim.com/Jim/atari/Act … piler.html
a tam był odnośnik do tego:
http://www.noniandjim.com/Jim/atari/ACT … MANUAL.pdf
korzystając z tego PDF-a, w ciągu dosłownie 15 minut udało mi się napisać przykład który realizuje to o co pytasz. Nie jest to szybkie ani wydajne (korzysta z systemowej procedury PLOT i stawia pixel po pixel-u, czyli wolniej się chyba nie da) jednak wydaje mi się że jest przejrzyste i pozwoli ci zrozumieć jak działa:
PROC ZNAK(CARD X,BYTE Y,CARD CHR)
BYTE POINTER ADR
BYTE I
ADR=$E000+(CHR LSH 3)
FOR I=0 TO 7
DO
IF (ADR^ & $80) THEN PLOT(X+0,Y) FI
IF (ADR^ & $40) THEN PLOT(X+1,Y) FI
IF (ADR^ & $20) THEN PLOT(X+2,Y) FI
IF (ADR^ & $10) THEN PLOT(X+3,Y) FI
IF (ADR^ & $08) THEN PLOT(X+4,Y) FI
IF (ADR^ & $04) THEN PLOT(X+5,Y) FI
IF (ADR^ & $02) THEN PLOT(X+6,Y) FI
IF (ADR^ & $01) THEN PLOT(X+7,Y) FI
Y=Y+1
ADR=ADR+1
OD
RETURN
PROC KEY()
POKE($2FC,$FF)
WHILE(PEEK($2FC)=$FF) DO OD
RETURN
PROC MAIN()
BYTE X,Y,I,J
GRAPHICS(15)
POKE($2C4,$A8) POKE($2C5,$0F) POKE($2C6,$00)
COLOR=1
X=0 Y=0
FOR I=0 TO 7
DO
FOR J=0 TO 15
DO
ZNAK(X,Y,I*16+J)
X=X+8
OD
Y=Y+8 X=0
OD
PRINTE("PRESS ANY KEY TO EXIT")
KEY()
RETURN
Efekt działania tego prymitywnego kodu wygląda tak:
Chłopie, tak sobie myślę iż dłużej Ci zajmuje pisanie tych wszystkich pytań na forum niż próba samodzielnego rozwiązania problemu.
Hm... Jeśli to ma być tak powolne, to chyba użyję displaylisty z jakimś trybem tekstowym w pierwszej (tekstowej) linii ekranu do wyświetlania punktów i życia.
jest powolne bo jest zrobione "po najmniejszej linii oporu", i tak jak pisałem wyżej tak aby kod był czytelny i prosty. Do kompletu może rysować znaki z precyzją co do punktu i "przeźroczystością". Oczywiście tryb txt będzie najszybszy, ale w ramach ćwiczeń tą procedurę też możesz przyspieszyć na wiele sposobów, np. uprościć ją tak aby rysowała całymi bajtami a nie punktami, wtedy zamiast wywołania PLOT dla każdej literki będziesz musiał przepisać 8-bajtów z generatora znaków do pamięci obrazu.
Ostatnio edytowany przez seban (2013-04-17 17:44:45)
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.060 sekund, wykonano 11 zapytań ]