Jak można napisać coś na ekranie w trybie graficznym, bez displaylist? Chodzi mi głównie o tryb 7 i jego pełnoekranowy odpowiednik.

2

W Turbo Basic XL masz do tego instrukcję. W asemblerze stawiasz piksel po pikselu lub całe bajty.

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

3

A w Actionie?

4

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:

https://dl.dropboxusercontent.com/u/44199/act_txt.png

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.

5

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.

6 Ostatnio edytowany przez seban (2013-04-17 17:44:45)

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.