[#1] Centrowanie otwartego okna na ekranie ?
Sprawa niby banalna a jednak?

Chcemy otwarte okno ustawić centralnie na jego ekranie Screen

1).Otwieramy okno za pomocą funkcji "OpenWindow" z "intuition.library" ma rozmiary 320x200 i pozycję wyświrtlania 0,0 po otwarciu dostajemy wskaźnik do struktury "window" tego okna.

2).Okno posiada przycisk pod którym podpinamy taką oto procedurę:

;--------------------------------------------------------------
;Procedura ustawia otwarte już okno centralnie na jego ekranie Screen.
;Wymaga otwartej biblioteki 'intuition.library'.

;WEJSCIE: rej. A0 = uchwyt do otwartego juz okna czyli (WindowBase)

Center_Window: clr.l d0
clr.l d1
move.l 46(a0),a1 ;Pobieramy adres Screen
move.w 12(a1),d0 ;D0=Szerokosc Screen'u
move.w 14(a1),d1 ;D1=WysokoscScreen'u
sub.w 8(a0),d0 ;odejmujemy rozmiary okna
sub.w 10(a0),d1 ;pobrane z NewWindow
divu #2,d0 ;Tu ustalamy pozycje na
divu #2,d1 ;ekranie screen
sub.w 4(a0),d0
sub.w 6(a0),d1
move.l IntBase,a1
jsr MoveWindow(a1)
rts
;--------------------------------------------------------------

Wciskamy przycisk i zawieszona Copper'lista wyświetla na ekranie
efekt przepięknej zorzy polarnej ale nie o to chodziło.......

Opisuje bo problemu dalej nie rozwiązałem?
[#2] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #1

Taka mała porada: szczerze Ci polecam korzystać z include'ów (plików załącznikowych) - wtedy zamiast takich magicznych liczb opisujących przesunięcia względem rejestru adresowego możesz użyć identyfikatorów.

Co do przykładu to chyba zapomniałeś umieścić w rejestrze A6 IntuitionBase. Trzeba go tam umieścić, a nie w A1!

Pozdrawiam
Robert

[#3] Re: Centrowanie otwartego okna na ekranie ?

@Minniat, post #2

Czy to znaczy ,że rej.A6 jest stosowany wewnątrz funkcji... nie tylko do jej wywołania. Zaraz to sprawdzę pod MonAm'em
Ciągle ten Amigowski OS zaskakuje.



Faktycznie rej.A6 jest konieczny do wywołania i zapewne nie tylko tej funkcji.
Dzięki...



Ostatnia modyfikacja: 08.05.2009 20:11:12
[#4] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #3

Nie chodzi o to że jest używany wewnątrz funkcji (możliwe że jest), tylko o to, że A6 jest przypisany do wywołań bibliotecznych w AmigaOS, i tego po prostu należy się trzymać.
Inkludy swoją drogą - kolega przede mną dał Ci dobrą radę, z której naprawdę warto skorzystać. Z inkludami po prostu trudniej popełnić błąd. W chwili obecnej Twój listing jest bardzo nieczytelny, i szczerze mówiąc wątpię czy komukolwiek chce się przedzierać przez offsety w strukturach do których się odnosisz w celu sprawdzenia czy w miarę poprawnie napisałeś tą procedurę.

[#5] Re: Centrowanie otwartego okna na ekranie ?

@MinisterQ, post #4

Witam,

Dodam, że pod kickiem 1.3 jest możliwe używanie rejestru A5 jako bazy biblioteki ( co dla mnie jest dziwne ), niektóre gry jak EmeraldMine używają właśnie tego "triku" i dlatego nie działają na maszynach z nowszym kickiem.
W każdym razie należy zawsze używać rejestru A6 jako bazy biblioteki. Jeszcze sugestia: zamiast clr.l d0 lepiej używać moveq #0,d0.

Pozdrawiam

[#6] Re: Centrowanie otwartego okna na ekranie ?

@asman, post #5

sub.l dx, dx też jest dobrym zamiennikiem clr.l dx

[#7] Re: Centrowanie otwartego okna na ekranie ?

@MinisterQ, post #6

Właściwie to znam zasady solidnego tworzenia kodu....
Sytuacja na Amidze jest jednak wyjątkowa
Skopiowałem DevPac'a z ponad 20 letniej dyskietki
Trudno oczekiwać od nośnika magnetycznego, aby po takim czasie był bez wad.
Dzieki pomocy osób z tego forum posiadam RKRM z opisem API ale pod 2.0
Połatałem, więc uszkodzone INCLUDE'y jednak część struktur ma inne rozmiary...
w obawie przed narobieniem jeszcze większego zamieszania, poszukałem innego sposobu.
Odnaleziony w necie ResourceHacker zawierał pliki tekstowe LVO.offset i Structure.offset
pod OS 1.3 (v34) z nich to sztukuje adresy w strukturach.
Dla programu, który mam napisać to musi wystarczyć.
Nie dysponuje takimi archiwami jak osoby, które od lat piszą na Amige.

Nie rozumiem sugestii z tym CLR.L D0 to rozkaz dedykowany do zerowania rejestru... zresztą wszystkie one mają 2 bajty rozmiaru, co do cylki procesora pewnie podobne wartości.

Pozdrawiam.
[#8] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #7

Inkludy to nie jest coś czego można by żałować... Podejrzewam że gdybyś o nie poprosił nawet tutaj, to byś je dostał. Co do rozmiarów struktur - nie sądzę by były takie różnice - struktuty na pewno zostały rozszerzone w 2.x+, ale myślę że... na pewno początkowe pola nie zmieniły się.

[#9] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #7

Nie rozumiem sugestii z tym CLR.L D0 to rozkaz dedykowany do zerowania rejestru...

Na procesorze 68000 był on zdaje się wolniejszy niż MOVEQ #0, d0... Ale to taka trochę optymalizacja na siłę, ma to znaczenie jedynie w pętlach wykonywanych wiele razy. Jeżeli już szukać optymalizacji to bardziej warto dzielenie przez dwa zastąpić rozkazem ROR... Ale to też jest mało istotne gdy robi się to raz czy kilka razy w czasie działania programu. Po prostu koledzy chcą się tu pochwalić jak znakomicie znają asembler 68k

[#10] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #1

Po co to robisz w asemblerze? Już na samym początku masz problem, który by nie wystąpił gdybyś pisał w C. A im Twój program będzie dłuższy tym będzie gorzej.
[#11] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #7

Witam,

Nie rozumiem sugestii z tym CLR.L D0 to rozkaz dedykowany do zerowania rejestru

Może źle się wyraziłem. Chodziło mi o ostrożne używanie tego rozkazu.
Rozkaz clr na maszynach z 68000 robi dwie rzeczy zapisuje i odczytuje.
Co może powodować zwisy przy próbie wyzerowania na przykład rejestru _custom+aud0vol, który jest tylko do zapisu. Na nowszych procesorach mc680x0 intrukcja clr robiy tylko zapis.

Pozdrawiam



Ostatnia modyfikacja: 11.05.2009 11:32:00
[#12] Re: Centrowanie otwartego okna na ekranie ?

@asman, post #11

Jeśli CLR odczytuje i zapisuje to znaczy ,że robi dodatkowe cykle na operacjach We/Wy do samego wyzerowania bitów. Jaki to ma cel?
[#13] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #12

Witam

Jeśli CLR odczytuje i zapisuje to znaczy ,że robi dodatkowe cykle na operacjach We/Wy do samego wyzerowania bitów. Jaki to ma cel?

Oczywiście masz racje, instrukcja CLR najpierw czyta a potem zapisuje ( sprawdziłem w manualu ), ale że robi dodatkowe cykle to nie wiem ( z tego co wiem w 68000 clr zajmuje 4 cykle dla clr.b i clr.w i 6 cykli dla clr.l ). Nie wiem jak to sprawdzić realnie na procku 68000 ile cykli zajmuje taki crl.l $dff088 na ten przykład ( bo mam 68030 na mojej maszynie ). Może masz jakiś pomysł jak to sprawdzić ?

Pozdrawiam

[#14] Re: Centrowanie otwartego okna na ekranie ?

@asman, post #13

Po zastanowieniu... użycie rozkazu CLR podczas cyklu programowania sektora w pamięci flash to pewna katastrofa. Wiedza o takich specyficznych właściwościach ma jednak
istotne znaczenie przy programowaniu

Co do sprawdzenia cykli?
Najlepszy oscyloskop.
I zapętlony bufor wypełniony tym samym rozkazem... ,ale przy 68030/50mhz nie wiem czy z pasmem 100Mhz wystarczy.
Ciekawe, jaki dla 68030/50 jest podzielnik magistrali?
[#15] Re: Centrowanie otwartego okna na ekranie ?

@68k_tester, post #14

Można też zajrzeć do dokumentacji procesora :)

Mam trzy książki na ten temat
- "Rodzina M680xx" Wojciecha Czyża
- "Kurs Asemblera dla początkujących" Adama Doligalskiego
- "Asm-One" Adama Doligalskiego

P.S. CLR.L D0 można swobodnie zastąpić przez MOVEQ #0,D0



Ostatnia modyfikacja: 16.05.2009 08:14:58
[#16] Re: Centrowanie otwartego okna na ekranie ?

@Minniat, post #15

Gratuluję kolekcji literatury. Przypuszczam ,że to wszystko zostało zebrane przez lata
pracy z Amigami. Może kiedyś ktoś zrobi z tych książek PDF'y aby inni mieli szansę je zobaczyć...
Co do rodziny 68K dostrzegłem ten procesor bardzo niedawno pomimo znajomości znacznej części obecnych układów.
Jedno jest pewne to najbardziej udana konstrukcja naszej cywilizacji.
Brakuje mu tylko paru współczesnych dodatków,superpotoku,predykcji rozgałęzień,pamięci cache,no i wydajnej magistrali
a wtedy konkurencja przestaje istnieć.
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