kategoria: Blitz
[#1] zmienne globalne Blitz Basic
Przepisuje kod z AMOSA i... natrafiłem na "problem" zmiennych lokalnych / globalnych używanych w procedurach. Trochę nie rozumiem zasady działania tego w BB. Czy BB posiada w ogóle rozdział na zmienne lokalne - globalne? Czy zadeklarowana zmienna jest tylko lokalną a jak chcę ją użyć w procedurze to muszę ją podawać jako parametr procedury a "oddaje" się jaz procedury (po zmianach) przez SHARED?
[#2] Re: zmienne globalne Blitz Basic

@cramer, post #1

[#3] Re: zmienne globalne Blitz Basic

@cramer, post #1

Chyba nie ma zmiennych globalnych. Każdą musisz udostępnić poprzez SHARED. Jeśli masz zmienne w bloku danych tworzonym poprzez DC, to wtedy musisz sobie podać w parametrze wskaźnik do bloku np.

Statement zmiendane{adres.l}
For i.b =0 To 6
   Poke.b adres+i , Peek.b(adres+i) +1
Next
End Statement

zmiendane{?Zmienna}

End

Zmienna:
DC.b 0,6,5,44,7,6,55


To tak basicowo bo w asemblerze taka procedura prostsza byłaby:
Statement zmiendane{adres.l}
MOVE.l D0,A0
MOVEQ #6,D7
Loop:
ADD.b #1,(A0)+
DBF D7,Loop
End Statement

Ale szybkościowo raczej będzie podobnie.

Ostatnia aktualizacja: 10.09.2024 10:11:04 przez tukinem
[#4] Re: zmienne globalne Blitz Basic

@tukinem, post #3

Przyznam że ja w ogólnie nie używam procedur/funkcji robionych przez Statement
Robię tak trochę bardziej assemblerowo bo BB na to w sumie pozwala i wg mnie działa to szybciej.
Tzn robię sobie procedurę ale nadaję jej etykietę a potem po prostu do tego skaczę albo przez GoSub albo JSR (to w sumie to samo). Parametry przekazuję tylko w zmiennych globalnych, które mam na stałe zdefiniowane na początku programu. np a.w, b.w, c.w, x.w, y.w. itp
[#5] Re: zmienne globalne Blitz Basic

@c64portal, post #4

Masz rację. Ja nawet w pętli głównej nie używam Repeat/Until ani While/Wend, tylko

.MainLOOP

; kod
BRA MainLOOP
[#6] Re: zmienne globalne Blitz Basic

@c64portal, post #2

Z tego wynika, że pierwszy sposób nie działa w BB 2.1 a ja akurat tego używam (wrrr) a drugi to jeśli dobrze rozumiem polega na udostępnianiu danej procedurze zmiennej poprzez SHARED i musi ta komenda być wewnątrz procedury. Czyli jeśli mam kilka podobnych procedur to w każdej muszę pamiętać, żeby udostępnić jej wszystkie potrzebne zmienne. Trochę to niepraktyczne
[#7] Re: zmienne globalne Blitz Basic

@c64portal, post #4

Kurde jakoś tak byłoby mi głupio bez procedur. GOTO i GOSUB to było w Basicu na C64 i jak tylko dorwałem się do AMOSA to na zawsze zrezygnowałem z tych dwóch komend... a teraz mam wrócić?
[#8] Re: zmienne globalne Blitz Basic

@cramer, post #7

Asembler to same GOTO i GOSUB. Jak ci jest głupio używać, to używaj JMP i JSR a zamiast RETURN pisz RTS.

Ostatnia aktualizacja: 10.09.2024 20:51:38 przez tukinem
1
[#9] Re: zmienne globalne Blitz Basic

@cramer, post #7

GOTO i GOSUB to było w Basicu

... a Blitz ma w nazwie Basic ;)
Poza tym nie bawimy się tutaj w "piękny kod" tylko w szybkość działania. :)
Jak by co to pytaj na forum. Chętnie (z tukinemem) podpowiemy.
1
[#10] Re: zmienne globalne Blitz Basic

@c64portal, post #9

Tak w sumie to mało bawiłem się w deasemblację kodów, ale takie GOTO/GOSUB to identyczne jest z JMP i JSR, więc tu w zasadzie nie powinno dokładać niewiadomo jakiego kodu. Te basicowe komendy powinny działać szybciutko.

Chyba że kompilator jest na tyle inteligentny i dodatkowo kombinuje z BRA i BSR, ale wiem że kompilator z BB nie jest zbyt inteligentny

Wiele poradników i książek o AMOSIE uczy, żeby unikać Gosubów i Goto, ale to tylko dla wygody programisty, aby się nie pogubił chyba.

Ostatnia aktualizacja: 10.09.2024 21:29:01 przez tukinem
1
[#11] Re: zmienne globalne Blitz Basic

@tukinem, post #8

W sumie racja. Pamiętam JSR i RTS z C64 jak bawiłem się asemblerem szeroki uśmiech
[#12] Re: zmienne globalne Blitz Basic

@c64portal, post #9

To też racja. A co do podpowiedzi to uwierz mi, że pewnie będę miał jeszcze sporo pytań. Bo to mój pierwszy program w BB
[#13] Re: zmienne globalne Blitz Basic

@c64portal, post #9

Chyba jednak zrezygnuję z procedur i pójdę w te etykiety jak radzicie.
To co przepisuje z AMOSa to zaledwie początek programu i kilka procedur ale już mnie wkurza ciągłe wpisywanie w każdej procedurze sherowanych zmiennych... ciągle czegoś brakuje.
Jeśli dobrze zrozumiałem Twój opis oraz instrukcję BB to te etykiety to takie procedury tylko bez parametrów i na końcu programu a nie na początku? Co akurat mi się podoba bo wpisywanie wszystkich procedur na początku programu bardzo "rozwala" mi czytelność kodu.
[#14] Re: zmienne globalne Blitz Basic

@cramer, post #13

Etykiety możesz sobie wpisać gdzie chcesz. Może być na początku, na końcu, to jest obojętne.

Co do parametrów, możesz sobie stworzyć np zmienne typu:
param1.w
param2.w
param3.w
param4.w
a potem tylko przedj JSR-em sobie ustawiasz te zmienne, no a w samej etykietce sterujesz nimi, np:
#SPEED=2

.MainLoop
X=0
Y=0
If joyy(1)=1
   param1=Y
   JSR RuchWDol
   Y=param1
EndIf

If RawStatus($45) : BRA KONIEC : EndIf
BRA MainLoop

.KONIEC
END



.RuchWDol
param1 + #SPEED
RTS
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