1

no dziwna sprawa, jak dla mnie, ale pewnie zaraz mnie oswiecicie i powiecie czy tak musi byc, czy nie

na pewno odpowiedz znaja Ci co mieszaja w emulu, bo na emulu i na prawdziwym Atari efekt jest ten sam

a chodzi o zmiane kolorow w rastrze, w trybie znakowym (ANTIC=$04), czyli 5 kolorowym trybie, pixel 2x1

jak dotad testowalem zmiane rastra dla kilku linii, 4-5, ale teraz chcialem to zrobic na calej wysokosci ekranu, i co ? I co 8-ą linie Antic zwalnia, nie starcza czasu na zmiany w rastzre, co najwyzej 4 zmiany poza ramka

a w liniach pozostalych starcza juz czasu i mozna dokonac 6 zmian + 4 zmiany niewidoczne poza ramka

czyli w n/w przykladzie w linii 7, 15, 23, 31 itd  nie starcza czasu, a w pozostalych liniach starcza

efekt jest taki, ze w 7 liniach dokonujemy zmian w rastrze (kolorowe pionowe pasy), a w 8 linii juz nie (ciagla szara linia)


opt h+
org $2000

scr48 equ %00111111    ;obraz szeroki  *-screen 48b
scr40 equ %00111110    ;obraz normalny *-screen 40b
scr32 equ %00111101    ;obraz waski    *-screen 32b
pmBase equ $b000

Player0_PositionX equ $d000
Player1_PositionX equ $d001
Player2_PositionX equ $d002
Player3_PositionX equ $d003

Missile0_PositionX equ $d004
Missile1_PositionX equ $d005
Missile2_PositionX equ $d006
Missile3_PositionX equ $d007

Player0_Size equ $d008
Player1_Size equ $d009
Player2_Size equ $d00a
Player3_Size equ $d00b

Missiles_Size equ $d00c

Player0_Missile0_Color0_PM0 equ $d012
Player1_Missile1_Color1_PM1 equ $d013
Player2_Missile2_Color2_PM2 equ $d014
Player3_Missile3_Color3_PM3 equ $d015

Playfield_Color0_PF0 equ $d016
Playfield_Color1_PF1 equ $d017
Playfield_Color2_PF2 equ $d018
Playfield_Color3_PF3 equ $d019
Background_BAK       equ $d01a

PRIOR_GTIACTL equ $d01b
CHARBASE equ $d409


main

;--

;- init PMG
lda >pmBase
sta $d407
lda #3
sta $d01d        ;PMCTL - wyswietlac duchy i pociski

lda 20            ;czekamy 1 ramke zanim zrobimy jakies nieszczescie :)
cmp 20
beq *-2

sei            ;wylaczenie przerwan
lda #0
sta $d40e
lda #$fe        ;wylaczenie ROM-u
sta $d301

LOOP lda $d40b        ;synchro do pierwszej zmiany linii
cmp #2
bne LOOP
:4+8 sta $d40a
:4 inc 0
nop

; line=0


lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=1

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=2

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=3

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=4

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=5

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=6

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=7

lda #$22
ldx #$77
ldy #$ff
sta $d016
stx $d016
sty $d016
lda #$d
sta $d016

lda $00

; line=8

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=9

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=10

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=11

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=12

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=13

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=14

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

; line=15

lda #$22
ldx #$77
ldy #$ff
sta $d016
stx $d016
sty $d016
lda #$d
sta $d016

lda $00

; line=16

lda #$00
ldx #$00
ldy #$00
sta $d01a
stx $d01e
sty $d01e
lda #$00
sta $d01e
lda #$0f
sta $d016
lda #$16
sta $d016
lda #$1a
sta $d016
lda #$c2
sta $d016
lda #$c6
sta $d016
lda #$ca
sta $d016

kkk
:64 lda $d01e

lda >fnt
sta CHARBASE
lda #$00
sta Background_BAK
lda #$4A
sta Playfield_Color0_PF0
lda #$2A
sta Playfield_Color1_PF1
lda #$0E
sta Playfield_Color2_PF2
lda #$96
sta Playfield_Color3_PF3
lda #$04
sta PRIOR_GTIACTL

mwa #ant $d402
lda #scr40        ;ustawienie szerokosci obrazu
sta $d400

jmp LOOP

;-- tutaj nasze tablice (pliki) z programu Graph2Font
org $6000
text :960 brk
;--
org $6600
;- musi byc o 1 linie za duzo...
ant dta b($44),a(text)
:29 dta b(4)
dta b($41),a(ant)
;--
org $6800
fnt :256 dta b($55)
;--

;--
org pmBase+$300
:768 brk

run main


p.s.

Skrzynka piwa dla tego, kto sprawi aby mozna bylo zmieniac kolory w rastrze na calej wysokosci ekranu (bez tych szarych ciaglych linii), tryb znakowy oczywiscie, trudno zrezygnowac z 5-tego koloru :)

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

2

CZysta teoria..... tak sobie mysle....
W trybach znakowych Antic na poczatku kazdego wiersza tekstowego musi przepisac kody znakow, do swojego wewnwtrzego bufora, a jednoczesnie pobirac dane z obszaru pamieci generatora znakow i tworzyc obraz, w kolejnych liniach pobiera tylko dane z generatora znakow, bo te potrzebne 23/40/48b. ma juz zapamietane i nie musi siegac po nie do pamieci komputera.
Moze to jest wlasnie ta linijka, w ktorej Antic siega do pamieci dwa razy czesciej..... wypelniajac swoj wewnwtrzny bufor i jednoczesnie tworzac linie obrazu pobierajac dane z generatora znakow.

To taki pomysl na szybko....

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

3

brzmi sensownie, czyli szansa zmian rastra bez przerywanych linii jest tylko w trybie graficznym

chyba ze jakies konkretne ustawienie znakow moze odciazyc Antic, ale to raczej marzenie scietej glowy :)

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

4

No cóż, zmiena koloru w rastrze kojarzy mi się z grafiką rastrową (bitmapową) czyli niestety nie ze znakami...   :cry:  Tę sztuczkę stosuje program GED, który umożliwia uzyskanie do 9 kolorów w rastrze (nie zawsze aż w tej ilości)....  :rolleyes:    :?

5

teraz Dracon Ci sie skojarzylo, a kto naciska aby Graph2Font obslugiwal zmiany w rastrze :), przeciez on dziala na znakach

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

6

pewnie ze bym chcial jeszcze wiecej kolorow (ktore by moze dalo sie jakos osiagnac np. przez ta zmiane w rastrze), ale pomoc tu za bardzo nie moge...  W kazdym razie 3mam kciuki za powodzenie operacji powiekszenia...  8)

7

Pecus ma 100% racje. ANTIC w pierwszej lini pobiera zarowno 40 bajtow (dla ekranu normalnego) a potem pobiera jeszcze 40 bajtow z generatora znakow, w nastepnych 7 liniach pobiera juz tylko po 40 bajtow z generatora znakow bo dane ktore znaki ma wyswietlac ma juz w swoim wewnetrznym buforze.

pozdrawiam
Seban/SLIGHT

8

Zasadniczo stara saperska metoda mówi, że każdy bajt, który ANTIC musi pobrać z pamięci powoduje zatrzymanie CPU na 1 cykl. Uwaga - wlicza się w to DL.
Także, jak DL jest $42, to zostaje 105(default)-3(DL)-40(literki)-40(maski literek)=22 cykle - nie za dużo.
Osobnym pytaniem jest, w których dokładnie miejscach na ekranie te bajty są pobierane - ja nie wiem.

ale za skrzynkę piwa, to może Fox coś wymyśli? :)
Ciekaw jestem, co by było, jakby przy użyciu VScrolla rozciągnąć 1 linię trybu fontowego i zmieniać w środku zestaw znaków - czy Antic by na te zmiany zestawu reagował czy nie. Coś mi mówi, że nie, ale może?
Wtedy można by użyć np 32 zestawów znaków (:P) i tylko raz na 32 linie zmieniać ekran - zawsze to lepiej
To taka luźna idea.

Ofkorz, można by też próbować z trybem fontowym bodajże 5tym (czyli 4tym x2), i co linię zmieniać generator. Ale to też nie zadziała, bo Antic nie wyczuje zmiany generatora (ale można sprawdzić, bo nie jestem 100% pewien czy np emulek to dobrze emuluje).
Gupio tak, mam pomysły a nie mam czasu :)

: 404. Stopka not found

9

Umieściłem w plikach

http://republika.pl/balois/atari/ahm1.zip
http://republika.pl/balois/atari/ahm2.zip

Atari Hardware Manual. Jak trochę poczytasz,
to Antic na pewno Cię polubi. Polecam też
zajrzeć do pliku antic.c ze źródeł Atari800
oraz do książki:

http://www.atariarchives.org/dere/

Balois

10

dzieki za dobre checi, ale widac Antic pod tym wzgledem jest bezlitosny i nie pozwoli sie wykiwac

tak wiec zmiany rastra tylko z trybie graficznym

p.s.
Atari Hardware Manual nie znalem, ale jak na date wydanie, to autor przekazal znacznie wiecej niz na tamte czasy robiono, nawet wspomnial ze teoretycznie da sie zmieniac kolory w locie :) Ile to czasu wymagalo aby ktos to zrobil praktycznie w GED-zie

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

11

Tebe, czy sprawdziles te moje gupie pomysly?
Jesli tak, to czy sprawdziles tez na emulku i czy dziala tak samo?
ciekaw jestem :P

: 404. Stopka not found

12

tak, testowalem

zmiana fontow w rastrze - nie dziala, nie reaguje na takowa zmiane

zmiana co linie zestawu znakow w trybie 5, czyli 2 razy wyzszym, nieoplacalna, ze wzgledu na utrate 5-ego koloru, nie bedzie wplywu na invers znaku, bo co linie nie mozna inversu wlanczac/wylanczac tylko co wiersz, dodatkowo zajeloby to jakies 128KB pamieci


a tutaj watek na AtariAge, ktory podsunal Dracon
http://www.atariage.com/forums/viewtopi … 476#473476
jesli dobrze zrozumiualem to na C64 tez mieli podobne problemy w 'dirty lines', ale to grafik martwi sie aby nie bylo ich widac

obecnie nadal testowalem procedurke do zmiany w rastrze, zamienialem grafiki z G2F na format ze zmiana rastra i obraz calosci coraz bardziej sie
klaruje (chyba w koncu bedzie ostateczna wersja)

p.s.
ale byczka popelnilem, zamiast 60 cykli w linii, ja zmusilem Atari do 66 :), tyle ze zwalnial gdy wystepowala linia ze spritami

teraz jest juz sensownie, a wszystko przez klopoty z dodawaniem i mnozeniem  :oops:

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