[#61] Re: GitHub z przykładami programów na Amigę

@Krashan, post #60

Jeżeli lekceważenie dokumentacji nazywasz „dobrą radą” to pozwól, że ja z takich rad korzystał nie będę.

Ale ja w żadnym wypadku nie lekceważę dokumentacji. Jednak przyznam Ci rację, w tym przypadku TST.B jest poprawne, ponieważ dokumentacja do OpenDevice mówi o bajcie.

W przypadku ogólnym jednak prawdą jest, że funkcje zwracają pełny 32-bitowy rejestr.

Amiga library functions use registers D0, D1, A0 and A1 for work space and
use register A6 to hold the library base. Do not expect these registers
to be the same after calling a function. All routines return a full 32
bit longword unless noted otherwise.

Pochodzi z: http://amigadev.elowar.com/read/ADCD_2.1/Libraries_Manual_guide/node000F.html
[#62] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #61

Nie ma się o co spierać. Skoro w inkludach i prototypie funkcji jest BYTE, natomiast autodoc stwierdza, że wynik pochodzi ze znakowego rozszerzenia pola które jest bajtem, ani TST.B ani TST.L nie będzie błędem i będą działać tak samo (zapewne również z tą samą szybkością, skoro wykonywane na rejestrze danych procesora).
[#63] Re: GitHub z przykładami programów na Amigę

@Krashan, post #62

Potwierdzam, TST.b/w/l Dx - wykonuje się w 4 cyklach ;)
[#64] Re: GitHub z przykładami programów na Amigę

@Krashan, post #62

I jeszcze jedno pytanie mi się przypomniało dzisiaj z rana. Zauważyłem że używasz offsetów do globalnych danych. Czy nie prościej byłoby używać dyrektywy RS ? Jak dobrze pamiętam to używasz Devpaca i on wspiera RS z tego co przed chwilą przeczytałem w manualu do Devpac 3.
[#65] Re: GitHub z przykładami programów na Amigę

@asman, post #64

Używam vasma. On też wspiera RS, tylko chyba składnia się trochę różni. W następnym przykładzie go użyję i opiszę .
[#66] Re: GitHub z przykładami programów na Amigę

@Krashan, post #65

No i przegrałem z RS, chyba nie rozumiem jego działania. Będę tu starał się wstawić fragment kodu, co nie będzie łatwe, ze względu na to, że znacznik <code> jest na PPA kiepskim żartem (tak, użyłem już „zgłoś błąd”). No ale do rzeczy.

;SuperStruktura

RSRESET
ss_Foo RS.L 1
ss_Bar RS.L 1
SuperStrukturaSizeOf SET __RS

O ile dobrze rozumiem, to ss_Foo otrzyma wartość 0, ss_Bar wartość 4, a SuperStrukturaSizeOf wartość 8. I tak się dzieje, co mogę sobie sprawdzić chociażby przez „VPRINT ss_Bar” przykładowo.

No to teraz piszę:

LEA ss_Bar(A1),A0

I co? „Nieprawidłowa relokacja”, WTF? Żeby było śmieszniej, jeżeli wykomentuję definicję struktury i napiszę po prostu „ss_Bar = 4” to wszystko działa. O co chodzi?
[#67] Re: GitHub z przykładami programów na Amigę

@Krashan, post #66

Zaczynam trochę to rozgryzać i zauważyłem, że jeżeli komendy RS są w tym samym pliku, w którym używam zdefiniowanych symboli to problem nie występuje. Wygląda mi na niedoróbkę w vasm, albo nadal nie rozumiem jak to działa, przecież to są symbole o wartościach absolutnych i nie podlegają relokacji. A takie offsety zazwyczaj się definiuje w oddzielnych plikach...
[#68] Re: GitHub z przykładami programów na Amigę

@Krashan, post #66

SuperStrukturaSizeOf SET __RS

Co oznacza wytłuszczony fragment?
[#69] Re: GitHub z przykładami programów na Amigę

@Krashan, post #67

Sprawdziłem w Asm-One. Zarówno w tekście głównym, jak i załączonym RS działa jak należy.
[#70] Re: GitHub z przykładami programów na Amigę

@Krashan, post #67

Być może jest to błąd. Proponuje sprawdzić czy problem występuje w daily source snapshot vasm'a i jeśli tak to napisać do Franka, myślę że chętnie rozwieje wątpliwości i poprawi jeśli faktycznie jest to błąd.

Przez ostatni rok spowodowałem w ten sposób kilka poprawek i nowych funkcjonalności w vasmie...
[#71] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #68

Co oznacza wytłuszczony fragment?

Oznacza przypisanie etykiecie aktualnej wartości symbolu __RS. Wartość tego symbolu jest zwiększana o rozmiar dyrektywy RS.x, więc na końcu definicji struktry oznacza jej rozmiar.

Ostatnia aktualizacja: 08.02.2016 07:48:37 przez Krashan
[#72] Re: GitHub z przykładami programów na Amigę

@strim_, post #70

OK, zacznę wieczorem od zarzucenia daily snapshotem.
[#73] Re: GitHub z przykładami programów na Amigę

@Krashan, post #71

Jeśli dyrektywa RS u Ciebie nie działa to sugeruję użycie makr do budowy struktur zawarty w pliku nagłówkowym "exec/types.i" z inkludów systemowych.

Jak załączysz "exec/types.i" to możesz zbudować strukturę tak:

STRUCTURE SuperStruktura,0
LONG ss_Foo
LONG ss_Bar
LABEL ss_SizeOf

Inkludy systemowe używają dyrektyw EQU oraz SET do implementacji tych makr, a nie RS. Wszystkie struktury systemowe w inkludach systemowych są zdefiniowane w ten sposób.
[#74] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #73

Tak, w SonnetAmiga też tak robimy, np. struktura PCI tu:

https://github.com/Sakura-IT/SonnetAmiga/blob/master/common/pci.i

Ostatnia aktualizacja: 08.02.2016 10:40:27 przez strim_
[#75] Re: GitHub z przykładami programów na Amigę

@strim_, post #74

Tak, tradycyjne makra działają, ale chciałem spróbować bardziej „eleganckiej” metody.
[#76] Re: GitHub z przykładami programów na Amigę

@Krashan, post #75

Rozpakowałem VASM (v1.5b) (w tym czasie musiałem przenieść GZIP, UNTAR ;), zrobiłem podobny przykład do Twojego i nie mam żadnych problemów z dyrektywą RS.

Zrobiłem plik "test.i" o zawartości:
rsreset
sym rs.l 1
sym2 rs.l 1
size set __RS

Oraz plik "test.s" o zawartości:
include "test.i"

printv sym
printv sym2
printv size

lea size(a0),a0 ; Tak samo działa dla sym, sym2.
rts

Asembler wyświetla:
0 (0x0)
4 (0x4)
8 (0x8)

CODE(acrx2): 4 bytes

I tworzy się plik a.out. Może wklej swój kod (lub fragment) i razem spróbujemy rozwiązać problem.
[#77] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #76

Z jakimi parametrami uruchamiasz vasm? Bo ja w celu otrzymania amigowego pliku wykonywalnego podaję -Fhunkexe.
[#78] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #76

v1.5b


To przedpotopowa wersja. Od tamtego czasu obsługa makr została przepisana, co może mieć wpływ na działanie RS. Ostatnia stabilna wersja to 1.7b.

Co nie zmienia faktu, że Krashan mógłby faktycznie całość pokazać.
[#79] Re: GitHub z przykładami programów na Amigę

@Krashan, post #77

Dobre pytanie. Dotychczas uruchamiałem bez tego parametru.

Niemniej po dodaniu parametru nadal ładnie kompiluje się, tylko że a.out jest już plikiem wykonywalnym.
[#80] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #79

Twój przykład działa dobrze i u mnie na snapshocie kodu źródłowego z dziś.

http://pastebin.com/VBsw8369
[#81] Re: GitHub z przykładami programów na Amigę

@strim_, post #78

Może i 1.5b jest przedpotopowa, ale najnowsza w postaci binarnej. Trochę mi się nie chce instalować vbcc tylko po to, żeby skompilować vasma. Gdybyś np. chciał się podzielić binarką, to ja chętnie.

Natomast problem z kodem został rozwiązany, winna okazała się głupia pomyłka:

:
            RSRESET
ss_Foo      RS.L    1
ss_Bar      RS.L    1
ss_SizeOf   = __RS

            RSRESET
gt_Blah     RS.B    ss_Size
gt_Brrr     RS.L    1
            ...

Jak widać struktura "ss" jest wstawiona w całości na początku struktury "gt". Gdzie błąd? Zamiast ss_SizeOf wpisałem ss_Size, czyli niezdefiniowany symbol. Przyznacie jednak że komunikat „invalid relocation” po użyciu gt_Brrr jest dość mylący...
[#82] Re: GitHub z przykładami programów na Amigę

@Krashan, post #81

Gdybyś np. chciał się podzielić binarką, to ja chętnie.


http://c0ff33.net/drop/vasmm68k_mot-20160208
[#83] Re: GitHub z przykładami programów na Amigę

@Krashan, post #81

Fajnie, że udało Ci się rozwiązać problem. Ten przykład pokazuje, że warto wklejać swój kod bo często ułatwia to rozwiązywanie problemu wspólnymi siłami. Ale rzeczywiście komunikat o błędzie jest mylący.

Przy okazji mam jedno zastrzeżenie - Symbol __RS istnieje w vasm, ale nie ma go w innych kompilatorach (np. w Asm-One). Jeśli chcesz zachować przenośność między kompilatorami powinieneś to czymś zastąpić. Moim zdaniem najbardziej elegancko będzie użyć po prostu konstrukcji:

ss_SizeOf RS 0 ; Rozmiar struktury

Jeśli pominiemy rozmiar przy RS to domyślnie przyjmowany jest rozmiar słowa (WORD). Oczywiście jak 0 jest parametrem dla RS to rozmiar nie ma znaczenia, więc możemy pominąć jawną definicję.

Sprawdziłem: działa w Asm-One i vasm.
[#84] Re: GitHub z przykładami programów na Amigę

@strim_, post #3

W końcu się zebrałem i powalczyłem ze swoim lenistwem, jeszcze trzeba nad nim popracować, ale jest lepiej :)

W każdym razie dwa kolejne przykłady w asm:
InterleavedSimpleScreen - prosty przykładzik pokazujący czarny ekran. Ekran jest typu interleaved, dzięki któremu na przykład zamiast 4 blitów potrzeba jednego (ekran 4 planowy).
Przeważnie na podstawie tego przykładu buduje kolejne.

DoubleBufferingScreen - ten przykład pokazuje podwójne buforowany ekran za pomocą coppera. Dzięki temu nie musimy wpisywać wskaźników ekranu do copperlisty co ramkę.

Kolejne przykłady jakie dodam to:
czarny ekran + obsługa przerwania PORTS czyli prawilna obsługa klawiatury - i to będzie chyba w dwóch przykładach.
czarny ekran + kopiowanie tile'a na ekran. I to w trzech przykładach przykładach: prockiem, blitterem, copper + blitter.

Jeśli ktoś ma konkretne zapotrzebowanie na jakiś przykład to proszę o info w tym wątku.

Edit:
Oczywiście jak ktoś czegoś nie rozumie albo widzi jakiś błąd albo ma jakąkolwiek uwagę to bez krępowania proszę o info.



Ostatnia aktualizacja: 02.04.2016 19:45:04 przez asman
[#85] Re: GitHub z przykładami programów na Amigę

@Krashan, post #81

@ Krashan
Natomast problem z kodem został rozwiązany, winna okazała się głupia pomyłka:


Super. Czyli czas na zapowiedziany wcześniej przykład systemowego zegarka z użyciem timer.device? szeroki uśmiech
[#86] Re: GitHub z przykładami programów na Amigę

@asman, post #84

Przykład z klawiaturą i ekranem już zamieściłem wczoraj, to tak dla informacji.
[#87] Re: GitHub z przykładami programów na Amigę

@asman, post #84

Przykłady:

otwieranie ekranu o określonej rozdzielczości i głębi kolorów

rysowanie punktu na ekranie
rysowanie linii na ekranie
rysowanie okręgu na ekranie

wypełnianie kolorem figur

+ obsługa palety kolorów
[#88] Re: GitHub z przykładami programów na Amigę

@pong777, post #87

To trochę zajmie, zważywszy że nigdy nie rysowałem linii ani okręgów ani wypełniania też nie robiłem. Co do obsługi kolorów to nie wiem co masz na myśli, bo obsługa jest banalna przynajmniej jeśli chodzi o OCS/ECS.
[#89] Re: GitHub z przykładami programów na Amigę

@asman, post #88

Na zasadzie putpixel x,y, col
[#90] Re: GitHub z przykładami programów na Amigę

@pong777, post #89

Dobra rozumiem co masz na myśli.

A tak przy okazji dodałem przykład ekran + klawiatura, gdzie czekanie na synchronizację czekamy za pomocą cia timer b.

Następne w kolejce:
ekran + kopiowanie tile'a procesorem
ekran + kopiowanie tile'a blitterem
ekran + kopiowanie tile'a bliterem sterowanym copperem.
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