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ć.
Silly Venture 2024 SE - stuff Dostępny jest już stuff z zeszłomiesięcznego party Silly Venture 2024
FujiCup FujiCup ma na celu wspieranie sceny gier retro, dając uczestnikom szansę na pokazanie swojego talentu
Echa Silly Venture 2024 SE Są już dostępne wyniki Silly Venture 2024 SE
Uaktualnienie firmware do The400 Poprawki do "fizycznego" emulatora ośmiobitowych komputerów i konsol Atari.
Akcja - Wsparcie w reverse-engineering Wspierajmy tych, którzy do tej pory zrobili wiele!
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.061 sekund, wykonano 10 zapytań ]