kategoria: Asembler
[#1] Obsługa BOB-ów z poziomu Assemblera
Hej!

Poznaję sobie ostatnio obsługę hardware Amigi z poziomu assembly, przez co chciałem zgłębić techniki jakie stosowano w produkcji gier w dawnych latach. Zabawy te doprowadziły mnie do debuggera UAE. Grzebiąc w rejestrach zaskoczyło mnie jak wiele często topowych gier w ogóle nie wykorzystywało hardware sprite-ów a więc pewnie musiały wykorzystywać BOB-y. Próbowałem odszukać jakieś materiały, w których wspomniano cokolwiek więcej niż kilka słów na temat obsługi BOB-ów w assemblerze, ale rezultaty były kiepskie. Jest tego całkiem sporo do znalezienia jeżeli szuka się w kontekście C.
I teraz moje pytanie - znacie może jakieś materiały, listingi, gotowe rutyny, na które można spojrzeć i ewentualnie się na nich wzorować? Domyślam się, że pewnie kuszące byłoby wysłanie mnie do hardware reference manual, ale czuję, że naprawdę potrzeba mi jakichś przykładów z życia wziętych żeby mieć jakiś ogląd w temacie
[#2] Re: Obsługa BOB-ów z poziomu Assemblera

@shirozuki, post #1

Może musisz wiedzieć czego szukać. W Blitz Basic 2 przykładowo nie ma słowa BOB. Tam po prostu jest obiekt wstawiany poprzez komendę BBlit lub QBlit. W całym podręczniku nie ma raczej słowa o bobach. Bardziej obiekty graficzne.
[#3] Re: Obsługa BOB-ów z poziomu Assemblera

@shirozuki, post #1

Generalnie to BoB to jest chyba skrót od "blitter object"- czyli obiekt narysowany za pomocą blittera. Skoro znalazły się do tego jakieś przyklady w C to jak najbardziej można je przerobić na ASM (oczywiście jeśli się na tyle rozumie kod w C). No w ostateczności pozostaje ten HRM i rozdział o blitterze, maskach, kanałach DMA i tym podobnych rzeczach
2
[#4] Re: Obsługa BOB-ów z poziomu Assemblera

@pisklak, post #3

Tak jak Pisklak mówi, słowo BOB to było słowo kluczowe w Amosie obok słowa Sprite. Sprite to wiadomo a Bob to od "blitter object". Wiec tu trzeba szukać materiałów na temat działań blittera.
[#5] Re: Obsługa BOB-ów z poziomu Assemblera

@mateusz_s, post #4

Nie było jedynego słusznego systemu od bobów - OS co prawda jakiś udostępnia ale ma on swoje założenia i ograniczenia które nie każdemu pasowały i w efekcie każdy pisał swój. Jak chcesz to możesz zerknąć na mój system bobów, co prawda w C ale tłuczący po rejestrach, dostępny tu https://github.com/Last-Minute-Creations/germz/blob/master/src/bob_new.c i dokumentację do niego w bliźniaczym pliku .h

Ostatnia aktualizacja: 31.10.2022 15:30:03 przez teh_KaiN
2
[#6] Re: Obsługa BOB-ów z poziomu Assemblera

@teh_KaiN, post #5

Boby systemowe obarczone są jakimiś dziwnymi narzutami - tzn. Boby spowalniają w zależności od położenia na ekranie w pionie (nawet jak są tylko dwa). Z AnimObami chyba tego problemu nie ma.

Przydają się głównie dlatego, że dzięki nim łatwo uzyskamy efekt wyświetlania animowanego obiektu.

Warto podmienić sobie same funkcje rysujące, ale struktury systemowe można zachować takie same, bo robią robotę.

@Autor wątku:

Możesz przejrzeć ten katalog:

http://aminet.net/dev/asm

Zawiera mnóstwo ciekawych materiałów.
[#7] Re: Obsługa BOB-ów z poziomu Assemblera

@shirozuki, post #1

Z assemblerem na Amige jest lipa totalna.
Nie ma zadnej ksiazki ktora zbierala by calosc potrzebnych rzeczy w kupe. Trzeba samemu szukac po kawalkach, to tu, to tam... a to z ksiazki, a to z gazetki, a to z dyskowego zinu. Dlatego ja se lata temu odpuscilem. Ostatnio wydanej ksiazki o asemblerze, to juz w ogole nie polecam (stek blubrow Starego Marycha).

najlepiej szukac po necie jakichs opracowan blogerow itp. itd.
np. czegos takiego jak mini kurs


Aha no i oczywiscie kursy na jutubie...



[youtube]https://www.youtube.com/watch?v=usfLiWsouCI&list=PLp_QNRIYljFrHmrrTYCyWQeJDNuGh3ibo[/youtube]


[youtube]https://www.youtube.com/watch?v=p83QUZ1-P10&list=PLc3ltHgmiidpK-s0eP5hTKJnjdTHz0_bW[/youtube]



Ostatnia aktualizacja: 31.10.2022 17:28:26 przez selur
[#8] Re: Obsługa BOB-ów z poziomu Assemblera

@selur, post #7

Tak naprawdę wszystko co potrzeba jest w Książce Adama Doligarskiego Kurs asemblera dla Początkujących. Polecam!

A w internecie obecnie jest mega fajnych artykułów i tutoriali. Dzisiaj jest dużo łatwiej zacząć zabawę w C i Asm na Amidze.
[#9] Re: Obsługa BOB-ów z poziomu Assemblera

@flops, post #8

Tak naprawdę wszystko co potrzeba jest w Książce Adama Doligarskiego Kurs asemblera dla Początkujących.


Eee bzdury gadasz...

Tak sie sklada, ze mam tez i ta ksiazke...
[#10] Re: Obsługa BOB-ów z poziomu Assemblera

@shirozuki, post #1

move.l	#img,_BLTAPTH
            move.l  #screen,_BLTDPTH
            move.w  #0,_BLTAMOD
            move.w  #(SCREEN_W/8)-(16/8),_BLTDMOD
            move.l  #$09f00000,_BLTCON0
            move.w  #0,_BLTCON1
            move.l  #$ffffffff,_BLTAFWM
            move.w  #16*BITPLANES<<6+1,_BLTSIZE

=]

wstawia obrazek z img ktory ma 16x16
w adres screen

Ostatnia aktualizacja: 31.10.2022 18:59:32 przez juen
1
[#11] Re: Obsługa BOB-ów z poziomu Assemblera

@selur, post #9

Ja uczyłem się asemblera z następujących źródeł:

- "Rodzina M680x0" Wojciecha Czyża - wyczerpujący opis procesorów MC68000 i nowości wprowadzonych w MC68020+. Dzięki tej książce poznałem zestaw instrukcji asemblera, budowę i działanie stosu, znaczników i trybów adresowania oraz wyjątków.

- "Asm-One" Adama Doligalskiego - dzięki tej książce opanowałem obsługę programu Asm-One.

- "Asembler dla początkujących" A. Doligalskiego - tutaj opisane są rejestry Amigi, konkretne przykłady programowania.

Wszystkie te materiały się uzupełniają.

Po nabyciu Amiga Developer CD v2.1 miałem możliwość zapoznania się z "ROM Kernel Reference Manual: Hardware".

@Juen

Fajny przykład, choć to tzw. Ikona, czyli prostokątny obiekt, a nie Bob.

W przypadku Boba warto poznać również czym jest maska bitowa i tzw. "cookie-cut", czyli wycinanie obrazu Boba.

Ale taka kolejność jest jak najbardziej w porządku.

Według mnie warto też stosować stałe symboliczne, to znaczy załączyć i stosować nagłówki systemowe dla Asemblera:

include "hardware/blit.i"

Dzięki czemu zastąpimy stałe liczbowe bardziej znaczącymi symbolami. Stąd wiemy, że włączenie kanałów A i D to SRCA + DEST = $0900:

SRCA equ $100 ; użyj kanału A
DEST equ $800 ; użyj kanału D

Oraz nauczyć się operacji na bitach.

Przykład wyliczania, skąd się bierze wartość $F0, kiedy chcemy zwyczajnie skopiować dane z kanału A.

Każdy bit odpowiada za koniunkcję kanałów A, B i C, bądź ich negacji.

Musimy wykluczyć pozostałe kanały, by nie wpływały na wynik, dlatego mnożymy A przez sumy B+NB oraz C+NC, bo te sumy bitowe mają zawsze wartość 1 (Literka N przed B oznacza bitową negację kanału B).

; A = A(B+NB)(C+NC) = ABC+ABNC+ANBC+ANBNC = $80+$40+$20+$10 = $F0

ABC   equ $80
ABNC  equ $40
ANBC  equ $20
ANBNC equ $10


Ostatnia aktualizacja: 31.10.2022 20:16:28 przez Hexmage960
[#12] Re: Obsługa BOB-ów z poziomu Assemblera

@Hexmage960, post #11

hmm nie wiem skad stwierdzenie, ze to ikona. to wciaz bob, prosty przyklad wstawiania blitterem obiektu :)
specjalnie nie utrudniam sprawy z cookie cut, jak zrozumie to, to moge wrzucic bardziej zlozony przyklad. bedzie widac jakie sa roznice. ale wciaz to bedzie prawie ta sama operacja, przynajmniej z punktu widzenia kodu w assemblerze
1
[#13] Re: Obsługa BOB-ów z poziomu Assemblera

@shirozuki, post #1

Grzebiąc w rejestrach zaskoczyło mnie jak wiele często topowych gier w ogóle nie wykorzystywało hardware sprite-ów


Zaintrygowałeś mnie, a mógłbyś podać tytuły tychże topowych gier nie korzystających ze sprajtów. Z góry dziękuje.

A jeśli chodzi o pytanie. To bez znajomości hardware reference myślę że ciężko będzie rozmawiać. Jeśli chodzi o materiały to warto przeczytać artykuły dostępne pod tym linkiem amiga-tech. Jeśli chodzi o listingi, routiny to trzeba zajrzeć tu rog-bobs-commented-source-code

Ostatnia aktualizacja: 31.10.2022 20:41:35 przez asman
1
[#14] Re: Obsługa BOB-ów z poziomu Assemblera

@juen, post #12

Juen & Hexmage zamiast sie tu licytowac to lepiej napiszcie jakis tutorial... na pewno shirozuki
i ja go przeczytamy
[#15] Re: Obsługa BOB-ów z poziomu Assemblera

@juen, post #12

Ja bym powiedział nawet więcej, to jest bardzo szybki sposób na postawienie boba :)
1
[#16] Re: Obsługa BOB-ów z poziomu Assemblera

@asman, post #15

Bardzo Wam Panowie dziękuję za cenne uwagi! Wiem, że od HRM nie ma ucieczki i jakby nie to budzi moje obawy bo hardware blittera jest do ogarnięcia, ale przykłady procedur obsługi "postaci" stworzone przez osoby mające warsztat są mega przydatne - zatem szczególne dzięki za podrzucone linkacze

@asman
Jak chodzi o brak hardware sprite-ów to uruchomiłem sporo gier, ale niestety nie robiłem listy. Na pewno sprite-ów nie było w Street Fighter 2, Moonstone i Flashbacku. W jakichś grach wyłączenie sprite-ów powodowało znikanie elementów UI, ale postacie nadal działały. Taka luźna obserwacja to to, że ogólnie BOB-y częściej chyba spotkamy w grach, gdzie postacie są szersze niz 32px i które niekoniecznie są demonami szybkości jeśli chodzi o animację W sumie to nie mam nawet pewności, że powyższe korzystają z BOB-ów, bo równie dobrze mogą z software sprite-ów.
1
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