kategoria: Asembler
[#1] "Chowanie" wskaznika myszki
Czesc
daje to tutaj bo fragment ten wyjalem ze zrodla programu KeyMenu napisanego w asemblerze
*-----------------------------------------------------------------------------*
*           A 'onsprite' request was received from the input handler.         *
*           This causes us to turn sprites back on so the user can see        *
*           the pointer again (if we turned them off in the first place)      *
*-----------------------------------------------------------------------------*
            btst.b  #FLAGB_Blanked,gb_flags2(gbl) ; did we turn sprites off ?
            beq     main040                      ; no, don't turn them on
            far     data
            move.w  #DMAF_SPRITE+DMAF_SETCLR,_dmacon ; sprites on
            near    data
            bra     main040
main030     cmp.w   #req_offsprite,LN_NAME(a2) ; request to turn sprites off ?
            bne     main040                    ; no, branch
*-----------------------------------------------------------------------------*
*           An 'offsprite' request was received from the input handler. This  *
*           causes us to turn off sprites to remove the pointer from the      *
*           view during menu operations.  If sprites are already turned off,  *
*           we do nothing.                                                    *
*-----------------------------------------------------------------------------*
            bclr.b  #FLAGB_Blanked,gb_flags2(gbl)
            far     data
            btst.b  #DMAB_SPRITE,_dmaconr+1 ; are sprites on ?
            near    data
            beq     main040                 ; no, branch
            Call    WaitTOF,gb_IBase(gbl)   ; wait for the proper time
            far     data
            move.w  #DMAF_SPRITE,_dmacon    ; turn sprites off
            clr.w   _spr+sd_dataa
            clr.w   _spr+sd_dataB
            near    data
            bset.b  #FLAGB_Blanked,gb_flags2(gbl) ; remember we turned sprites off


Czy moglby ktos wyjasnic co tu sie dzieje ?

Chcialbym to jakos zaimplemetowac do swojego programu (a w Blitz-ie mozna uzywac asemblera), jednak potrzebuje najpierw to zrozumiec
Dzieki
[#2] Re: "Chowanie" wskaznika myszki

@peceha, post #1

Masz coś takiego jak rejestry kontrolujące DMA, czyli to co ma mieć włączone czytanie rzeczy z RAMu: do ustawiania DmaCon i do czytania co w tej chwili jest ustawione DmaConR (DMA Control Read). DmaCon kontroluje, czy włączony jest ekran, sprite'y (a nim jest kursor), audio, flop, itd. Jak w dmacon ustawisz DMAF_SPRITE (czyli bit odpowiadający za sprajt), to je wyłączysz, jak ustawisz DMAF_SPRITE oraz w tym samym czasie bit DMAF_SETCLR to włączysz sprite'y. Żeby odczytać czy sprite'y są włączone czy nie, musisz przeczytać wartość rejestru dmaconr (bo dmacon jest tylko do zapisu) i sprawdzić czy w jego aktualnej wartości bit DMAF_SPRITE jest zapalony czy nie.

Z kolei funkcja WaitTOF czeka na koniec ekranu - po to by ponowne włączenie sprite'ów nastąpiło nie na środku ekranu, tylko na końcu. Musisz też mieć świadomość, że tym sposobem wyłączasz wszystkie sprite'y naraz, choć WB używa tak naprawdę tylko jednego do kursora.

Rozważ czy nie lepiej Ci ustawić grafikę kursora na pustą i potem przywrócić domyślną. Tak robiłem w swoich grach zanim dowiedziałem się o istnieniu DMA. ;) Interesują Cię funkcje SetPointer i ClearPointer, ale one są per okno.

A tak te rejestry wyglądają. Nazwy są inne niż Ci podałem ale przywyknij do tego typu nieścisłości - np. tryb BLIT_HOG się czasem nazywa BLITTER_NASTY albo BLIT_PRIORITY. Jedne nazwy funkcjonują bardziej w asemblerze, inne np. w stałych zdefiniowanych dla języka C.

Ostatnia aktualizacja: 01.02.2018 22:52:07 przez teh_KaiN
[#3] Re: "Chowanie" wskaznika myszki

@teh_KaiN, post #2

Mozna tez SetPointer( Window, Pointer, Height, Width, XOffset, YOffset ) z czysta pamiecia:) Funkcja z intuition
[#4] Re: "Chowanie" wskaznika myszki

@teh_KaiN, post #2

Dzieki,
wyjasniles to w prosty sposob - slyszalem o DMA ale nigdy mnie nie interesowalo nawet do czego to jest.
Oczywiscie od razu w to sie nie zaglebie bo inne rzeczy mam do zrobienia ale przynajmniej nie bede juz bladzil po omacku i czytal kolejnych abstrakcji :)

@kiero
SetPointer() mi nie odpowiada ze wzgledow ... bezpieczenstwa :)
Chodzi o to ze po ostatnich zmianach w programie nie jestem w stanie zamknac okna gdy myszka zostanie ruszona - chcialem wylaczyc calkowicie wskaznik gdy moje okno jest ajtywne (wyswietlane) by uniemozliwic inne czynnosci (jak np przelaczanie ekranow, czy nie daj Boze :) ich zamykanie ) . Podmiana wskanika na wiele sie nie zda bo klikniecie poza oknem przywroci stary ksztalt.
[#5] Re: "Chowanie" wskaznika myszki

@peceha, post #4

Ale jestes pewien, ze wylaczenie kursora przy pomocy wylaczenia spritea cos pomoze?:)Wiesz, ze system nie potrzebuje wyswietlac kursora zeby go obsluzyc. Musialbyc kompletnie zablokowac mozliwosc ruszania kursorem (da sie) albo po prostu poprawic problem "bezpieczenstwa" ;)
[#6] Re: "Chowanie" wskaznika myszki

@kiero, post #5

A mozesz mnie naprowadzic na sposob wylaczenia calkowitego?
Juz na EAB zapytalem jak polaczyc nasluchiwanie zdarzen z obiektow Blitz-a i tych systemowych wiec mam nadzieje ze rozwiazanie sie znajdzie - wtedy nie bede potrzebowal tych kombinacji alpejskich szeroki uśmiech
[#7] Re: "Chowanie" wskaznika myszki

@peceha, post #6

Teraz nie moge niestety. Ktos moze sie znajdzie kto pomoze:) Ogolnie chodzi o wstawienie inputhandlera ktory bedzie "polykal" eventy myszy
[#8] Re: "Chowanie" wskaznika myszki

@kiero, post #7

Jest dobrze :) o 00:30 dostalem jakiegos przeblysku i znalazlem rozwiazanie problemu nasluchiwania na dwa fronty - juz wszystko dziala wiec nie bede zglebial dalej tego tematu.
Dzieki.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem