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

@chicago, post #29

Wrzuć w konsoli
assign
i napisz co Ci pisze przy
vincludeos3:
powinny być przynajmniej 2 ścieżki.

Ostatnia aktualizacja: 10.01.2016 21:17:26 przez pong777
[#32] Re: GitHub z przykładami programów na Amigę

@strim_, post #30

Wiem, że u mnie jest coś nie tak.
Assigny mam podobnie jak w kursie c:

assign >NIL: vbcc: Work:vbcc
assign >NIL: C: vbcc:bin add
assign >NIL: vbccm68k: vbcc:targets/m68k-amigaos
assign >NIL: vincludem68k: vbccm68k:include
assign >NIL: vincludem68k: work:vbcc/targets/m68k-amigaos ADD
assign >NIL: vlibm68k: vbccm68k:lib

Źródło: http://www.ppa.pl/programy/kurs-jezyka-c-czesc-1.html
Copyright © Polski Portal Amigowy

Nigdzie nie widzę katalogu include_h.

Proste programy z include stdio.h czy math.h działają bez problemu.
[#33] Re: GitHub z przykładami programów na Amigę

@chicago, post #32

Ten katalog jest w NDK z systemem, nie w pakiecie kompilatora.
[#34] Re: GitHub z przykładami programów na Amigę

@chicago, post #32

Ja chciałem dodać, że ten kurs to z 2005 roku jest i od tamtego czasu dokonał się znaczny postęp w VBCC. W szczególności, instalator potrafi sam zrobić assigny (zapyta podczas instalacji o to gdzie jest NDK "system includes").

Mam nadzieję, że nie instalowałeś jakiejś przedpotopowej wersji VBCC, tylko najnowszą jaka jest na stronie autora.
[#35] Re: GitHub z przykładami programów na Amigę

@strim_, post #34

Instalowałem z tej strony którą podlinkowałeś. Przeinstaluje jeszcze raz.
[#36] Re: GitHub z przykładami programów na Amigę

@chicago, post #35

Jeśli masz zainstalowaną nową wersję, to nie wiem czy musisz przeinstalowywać, po prostu sprawdź jakie masz assigny zrobione i dodaj poprawny assign do katalogu include_h w NDK.
[#37] Re: GitHub z przykładami programów na Amigę

@strim_, post #36

Mam w user-startup tak:
assign >NIL: vincludeos3: vbcc: targets/m68-amigaos/include
assign >NIL: vincludeos3: "System:" add
[#38] Re: GitHub z przykładami programów na Amigę

@chicago, post #37

Działa:) Wszystko się kompiluje. Niepoprawną ścieżkę miałem tutaj "assign >NIL: vincludeos3: "System:" add"
[#39] Re: GitHub z przykładami programów na Amigę

@strim_, post #3

Dodałem przykład asemblerowy minimalnej poprawnej obsługi Workbencha, a więc program już „nie wiesza się z ikonki”. Dodatkowo program ilustruje sposób wyświetlania własnych Guru, bo tak właśnie tym razem wyświetliłem „Hello World!”. Z tego oczywistego powodu, że program odpalony z WB nie ma standardowego wyjścia i PutStr() nie dałoby żadnego efektu.

Jako następny przykład planuję otwarcie okienka i minimalną pętlę główną obsługi wiadomości Intuition.
[#40] Re: GitHub z przykładami programów na Amigę

@Krashan, post #39

Dodałem na wiki informację o tym jak powinny wyglądać nowe przykłady (tutaj).

Macie jeszcze jakieś sugestie co tam umieścić?

Edytować można bezpośrednio przez interfejs web, lub sklonować wiki jako osobne repozytorium (więcej informacji o korzystaniu z wiki GitHuba tutaj).
[#41] Re: GitHub z przykładami programów na Amigę

@flops, post #11

Super, że dodałeś wyświetlanie obrazu. Jedyne wątpliwości jakie mi się nasuwają, to takie, że jeśli ktoś ma ustawiony w WB tryb na przykład EURO72 to przykład nie zadziała poprawnie.
Podejrzewam, że w czasam gdy to pisałeś, mało kto się takimi rzeczami przejmował. Sam zresztą byłem zdziwiony swoimi przykładami, gdy dokupiłem monitor do ami i zacząłem je uruchamiać po wileu bojach z incbinami i includami.
[#42] Re: GitHub z przykładami programów na Amigę

@Krashan, post #39

Uzupełniłem swój przykład MiniStartup o artykuł po polsku szczegółowo go opisujący. Link do artykułu jest też na GitHubie, a z kolei w artykule jest link do kodu na GitHubie. A teraz odpalam Amigę i zabiorę się za wspomniany w innym wątku przykład pomiaru czasu wykonywania kodu za pomocą timer.device.

Ostatnia aktualizacja: 17.01.2016 13:52:01 przez Krashan
[#43] Re: GitHub z przykładami programów na Amigę

@Krashan, post #42

Tymczasem ja poprawiłem przykład kolegi chicago, o którym mowa była tutaj.

Ostatnia aktualizacja: 17.01.2016 14:45:12 przez strim_
[#44] Re: GitHub z przykładami programów na Amigę

@strim_, post #43

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

@Krashan, post #42

@Krashan
A teraz odpalam Amigę i zabiorę się za wspomniany w innym wątku przykład pomiaru czasu wykonywania kodu za pomocą timer.device.


Ja bym chętnie zobaczył jakiś minimalistyczny przykład systemowego zegarka: godziny, minuty, sekundy.

Ostatnia aktualizacja: 18.01.2016 00:35:45 przez R-Tea
[#46] Re: GitHub z przykładami programów na Amigę

@R-Tea, post #45

Może być następny. Niestety na razie przykład z timerem uszkadza zawartość pamięci i Amiga wiesza się po wyjściu z przykladu. Będę nad tym pracował, na razie nie wiem gdzie jest błąd.
[#47] Re: GitHub z przykładami programów na Amigę

@Krashan, post #46

Dwa pytania:
Może opublikuj kod to razem odnajdziemy błąd?
Czy Enforcer albo MungWall mógłby pomóc przy takich problemach?
[#48] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #47

W sumie czemu nie. Wrzucę go wieczorem na GitHuba. Mungwall mógłby pomóc. Co do Enforcera to wymaga MMU, a ja nawet nie wiem czy 68020 z ACA1221 ma MMU. Ale coś mi się wydaje, że nie.
[#49] Re: GitHub z przykładami programów na Amigę

@Krashan, post #48

Nie ma, żaden wariant 68020 nie ma MMU. One były zaprojektowane do współpracy z zewnętrznym MMU.
[#50] Re: GitHub z przykładami programów na Amigę

@strim_, post #49

Kody źródłowe dem grupy Dreamdealers:

https://github.com/pchalamet/Dreamdealers
[#51] Re: GitHub z przykładami programów na Amigę

@Krashan, post #48

Trochę to trwało, ale właśnie ukończyłem obiecany przykład, a więc pomiar czasu wykonywania kodu za pomocą timer.device, a przy okazji przykład użycia VPrintf() z poziomu asemblera. Wrzucę go na GitHuba mam nadzieję w niedzielę, bo chciałbym jeszcze dodać do niego komentarze i napisać jakieś zgrabne readme wyjaśniające co i jak. Zacząłem od zbenchmarkowania kodu, który składa się z samego RTS, mój sprzęt podaje wynik 75 ľs i jest to narzut wprowadzany przez funkcje GetSysTime(), Forbid() i Permit(). W zasadzie należałoby najpierw zmierzyć taki pusty RTS i potem uwzględnić to jako poprawkę. Niemniej chcąc uzyskać precyzyjne wyniki i tak powinno się zapętlić test tak, żeby wykonywał się chociaż ze 100 ms, wtedy ten narzut jest do pominięcia.

Na przykład taki busyloop:

MOVE.W #9999,D0
Loop:
DBF D0,Loop
RTS

na mojej 020@28 wykonuje się 3,6 milisekundy.

Cały program z powyższym busyloopem jako mierzonym kodem, zajmuje 520 bajtów .

Ostatnia aktualizacja: 29.01.2016 21:51:37 przez Krashan
[#52] Re: GitHub z przykładami programów na Amigę

@Krashan, post #51

na mojej 020@28 wykonuje się 3,6 milisekundy.


Ciekawie ile by było na 060 .....
[#53] Re: GitHub z przykładami programów na Amigę

@Krashan, post #51

Przykład jest już w repozytorium, z dość obszernym readme. Wolnym czasem zapewne zrobię jak zwykle z tego też artykuł na swojej stronie po polsku.
[#54] Re: GitHub z przykładami programów na Amigę

@Krashan, post #53

Dzięki za kolejny dodany kod.

Ja mam jedno pytanie a w zasadzie to dwa. Pierwsze jest związane z OpenDevice. Jak widzę, to nie testujesz rejestru D0 tylko liczysz że flaga Z po jsr OpenDevice(a6) (linia 179) zostanie ustawiona i nie zostanie zmieniona przez kod wykonywany w tejże funkcji. Czy w ten sposób można testować czy otworzyła się OpenDevice ?
A drugie pytanie to czy w sposób zamierzony użyłeś movea.l d0,a2 w lini 118, bo ta instrukcja nie zmienia żadnej flagi z Condition Codes ? Czy to po prostu masz szczęście bo poprzednia instrukcja ustawia flagę Z i wtedy w przypadku niepowodzenia skok zostanie wykonany.
[#55] Re: GitHub z przykładami programów na Amigę

@asman, post #54

Zacznijmy od linii 179. To jest oczywiście błąd i brakuje tam TST.L D0. Być może akurat przed samym wyjściem OpenDevice() ustala wartość D0, ale na to liczyć się nie powinno. Błąd już poprawiłem.

Natomiast w linii 118 MOVEA.L nie zmienia znaczników, ale odpowiednio ustawia je poprzedzające MOVE.L, które również czyta z D0. Być może gdyby je zamienić miejscami przejrzystość kodu by zyskała. Na poprawność działania nie ma to moim zdaniem wpływu.
[#56] Re: GitHub z przykładami programów na Amigę

@Krashan, post #55

Super dzięki. Tylko jeszcze jedna rzecz mnie zastanawia, czy powinno się testować tst.l czy tst.b po OpenDevice ? W dokach widzę że jest to BYTE (ADCD_2.1), ale jak kiedyś grzebałem w OpenDevice to tam jednak jest zwracany long, zresztą widać to tutaj pod adresem FC06A0 i FC06A2, gdzie jest robione rozszerzenie rejestru D0 (exec disassembly). Pytanie której rzeczy się trzymać ?


Edit: Zamiana UBYTE na BYTE.

Ostatnia aktualizacja: 31.01.2016 19:52:47 przez asman

Ostatnia aktualizacja: 31.01.2016 19:53:12 przez asman
[#57] Re: GitHub z przykładami programów na Amigę

@asman, post #56

Z tego co się orientuję funkcje systemowe zawsze wypełniają cały 32-bitowy rejestr D0.
[#58] Re: GitHub z przykładami programów na Amigę

@asman, post #56

Fakt, w dokumentacji i prototypach jest bajt, więc TST.B. Odwykłem trochę od asemblera, w C jeżeli rozszerzenie liczby jest potrzebne, kompilator robi je automatycznie. Wychodzę z założenia, że programując trzeba się opierać na dokumentacji, nie na disasemblacji. Na Amidze co prawda nie zawsze to jest możliwe, ale w tym przypadku jak najbardziej. Poprawiam.
[#59] Re: GitHub z przykładami programów na Amigę

@Krashan, post #58

Moim skromnym zdaniem lepiej jest robić TST.L przy każdej funkcji systemowej. W dokumentacji do OpenDevice jest nota, że wynik to rozszerzona wartość składowej io_Error (o rozmiarze bajta). Więc jest jasno napisane, że funkcja rozszerza tą wartość.

I tak jest w ogólności - możemy bez obaw czytać cały rejestr D0.

Tak jak napisałem każda systemowa funkcja, co zwraca coś, wypełnia cały rejestr D0 i nie pozostawia w nim nieokreślonych wartości.

Być może nie akurat tutaj, ale możę zaistnieć sytuacja, gdy najmłodszy bajt może zawierać zero, zaś wartość całego rejestru być różna od zera.

Ja piszę to tylko po to, by dobrze doradzić. Użycie TST.B być może w tym konkretnym przypadku nic nie zaszkodzi, ale jest złym nawykiem. Jest to rozwiązanie minimalistyczne, zostawmy optymalizację tam gdzie potrzeba.

Sprawa wydaje się błaha, ale w asemblerze takie rzeczy są ważne.
[#60] Re: GitHub z przykładami programów na Amigę

@Hexmage960, post #59

Być może nie akurat tutaj, ale możę zaistnieć sytuacja, gdy najmłodszy bajt może zawierać zero, zaś wartość całego rejestru być różna od zera.

W takim przypadku ani prototyp funkcji dla C ani dokumentacja nie informowałyby o zwracaniu wartości BYTE. I to jest powodem użycia TST.B, a nie jakaś wątpliwa optymalizacja. W przypadku TST na rejestrze procesora szybkość wykonania pewnie i tak nie zależy od rozmiaru. A skoro funkcja rozszerza znakowo bajt, to użycie TST.B w żadnym wypadku nie prowadzi do błędnego wyniku.

Jeżeli lekceważenie dokumentacji nazywasz „dobrą radą” to pozwól, że ja z takich rad korzystał nie będę. Wolę opierać się na autodocu niż na przekonaniu, że wszystkie funkcje systemu zachowują się w jakiś sposób.
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