1 Ostatnio edytowany przez tebe (2014-03-31 16:59:48)

w tym trybie mamy 16 kolorów o tej samej jasności (GTIACTL=$C0) ustalanej na podstawie $d01a (712)

tylko kto mi wytłumaczy co się dzieje z kolorami gdy damy INC $D01A, niezależnie od zawartości rejestru $D01A część kolorów znika

w załączniku przykład obrazka, wersja pierwsza $D01A=2 i druga wersja dla której kolor $D01A ustawiony jest przez INC

Post's attachments

gr11_d01a.zip 52.39 kb, liczba pobrań: 21 (od 2014-03-31) 

Tylko zalogowani mogą pobierać załączniki.
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2 Ostatnio edytowany przez wieczor (2014-03-31 18:57:24)

A $D01A da się w ogóle czytać? Chyba to jest write-only. Wtedy sytuacja jest jasna - INC $xxxx fizycznie odczytuje zawartość komórki zwiększa ją i zapisuje. Problem polega na tym, że przynajmniej na Altirze odczyt zawsze daje $0F niezależnie od tego co tam było wpisane. Więc efektem INC $D01A będzie wpisanie tam $10. Co obserwujemy (ciemnobrązowy). Jeśli chcesz operować INCiem to musisz użyć cienia.

The problem is not the problem; the problem is your attitude about the problem

3

wieczor napisał/a:

Więc efektem INC $D01A będzie wpisanie tam $10.

Zgadza się. W związku z czym mamy do dyspozycji 8 kolorów:
Piksel 0, 1 = kolor $10
Piksel 2, 3 = kolor $30
Piksel 4, 5 = kolor $50
Piksel 6, 7 = kolor $70
Piksel 8, 9 = kolor $90
Piksel $a, $b = kolor $b0
Piksel $c, $d = kolor $d0
Piksel $e, $f = kolor $f0

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

4 Ostatnio edytowany przez seban (2014-04-02 10:46:26)

offtopic mode: ja często używałem jako "decrunch effect", lub sygnalizowania różnych sytuacji w swoim kodzie testowym, właśnie inc $d01a lub lsr $d01a. Tak samo przy wykorzystaniu faktu iż operacje typu INC, DEC są operacjami Read-Modify-Write, gdy chciałem zablokować przerwania NMI stosowałem INC $d40e, aa gdy chciałem odblokować NMI to po prostu DEC $d40e :)

5

Dla kompletu: LSR $d40e włącza samo VBLKI.

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

6

@Fox: fakt! :) ale jakoś nigdy tego nie zastosowałem :)

... i należy jeszcze dodać że przez błąd/uproszczenie state-machine w rdzeniu 6502, INC czy DEC tak naprawdę robią niepotrzebny jeden dodatkowy zapis do RAM, (Read->Write->Modify->Write), widać to przy LSR $D01A czy INC $D01A, żadna inna instrukcja nie zapewni tam takie ładnego jasnego "ciapa" szerokości dwóch cykli koloru :)

7

Dwóch ... lub czterech cykli koloru. Odświeżanie trochę psuje efekt. Co ciekawe nie zadziała to na 65816, bo tam nie ma dwóch cykli zapisu tylko dwa odczytu przy takich instrukcjach, piszę to z pamięci, Pin pewnie by mógł potwierdzić.

pomidor

8

no masz rację co do odświeżania, zapomniałem o tym :) A co do '816 to nie miałem bladego pojęcia o innym zachowaniu '816 przy INC/DEC.