Autor Wątek: Pytania od bardzo początkującego  (Przeczytany 42884 razy)

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #30 dnia: 2014.01.06, 19:11:19 »
Mam pytanko, czy w basicu jest jakieś zabezpieczenie by nie można przerwać przez "break" lub winny sposób działania programu? Bo pamiętam, że proste programiki można było spokojnie zatrzymać i przejrzeć kod.

ZbyniuR

  • *****
  • Wiadomości: 3276
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Pytania od bardzo początkującego
« Odpowiedź #31 dnia: 2014.01.07, 14:12:52 »
Widzę że stare Spectrumowe wygi zajęte, a ja szukając czegoś innego przypadkiem trafiłem na odpowiedź. Informuję że programowe wyłączenie Break jest opisane w Bajtku nr 3/4 z 1986r na str. 23. :)
A tego i inne Bajtki można ściągnąć gratis stąd:
http://atarionline.pl/v01/index.php?subaction=showfull&id=1234027498&archive=&start_from=0&ucat=8&ct=biblioteka#zin=Bajtek
A jak nie masz czym otwierać plików djvu to może wolisz pdf stąd:
http://www.t2e.pl/pl/435/434/435/Bajtek-Redux
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #32 dnia: 2014.01.07, 20:52:01 »
Dzięki ZbyniuR :)

tdu

  • *****
  • Wiadomości: 888
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pytania od bardzo początkującego
« Odpowiedź #33 dnia: 2014.01.07, 22:20:47 »
po co daleko szukać, wszystko jest tutaj

   ftp://speccy:[email protected]
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic SamCoupe QL CPC6128/N100 MSX-SVI738  MSX2-VG8235

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #34 dnia: 2014.01.07, 22:41:44 »
Odnośnie "BREAK" może mi ktoś napisać jak dokładnie i w jakiej kolejności napisać te instrukcję bo próbowałem ale do końca nie rozumiem rozumowania autora.

Cytuj
Nieraz chcieliśmy zabezpieczyć nasz program przed przypadkowym zatrzymaniem czy też ciekawością wścibskich? Niestety BASIC umieszczony w ROM-ie ZX Spectrum nie posiada komendy ON BREAK. Poniższy program pozwala na przejęcie kontroli nad klawiszem BREAK. Podprogram należy umieścić na początku programu. Uruchomienie odbywa się przez RANDOMIZE USR 60000. Następnie trzeba podać do której linii ma się odbyć skok. Dwubajtowy odpowiednik numeru linii zostaje wprowadzony pod adresy 60053 i 60054. Dwubajtową konwersję liczby X uzyskujemy według wzoru: X=256 * N+M. Najprostszym sposobem jest wprowadzenie do komputera RANDOMIZE X:PRINT PEEK 23670, PEEK 23671. Liczba po lewej stronie to M następna to N. Tak więc pod adres 60053 wprowadzamy M a pod 60054 Iiczbę N. W efekcie kolejna linia programu powinna wyglądać następująco:
RANDOMIZE USR 60000:POKE 60053,M:POKE 60054,N
Przed uruchomieniem programu proponuję umieścić go na taśmie, gdyż najmniejszy nawet błąd może spowodować jego zniszczenie. Podprogram musi się znajdować poza główną pętlą programu.

steev

  • *****
  • Wiadomości: 1303
  • Miejsce pobytu:
    inode 42
Odp: Pytania od bardzo początkującego
« Odpowiedź #35 dnia: 2014.01.07, 23:07:26 »
1) wywołujesz w programie kod który jest na końcu artykułu. Umieszcza on pod adresem 60000 procedurę on_break.
2) ustawiasz numer linii do której program ma skoczyć (POKE 60053,low :POKE 60054,high)
3) uruchamiasz procedurę poprzez randomize usr 60000

alternatywnie:

1) spisujesz i uruchamiasz kod który jest na końcu artykułu
2) zapisujesz procedurę na taśmie/dysku (save"nazwa"code 60000,72)

w programie:
3) na początku programu ładujesz z tasmy/dysku zapisaną procedurę (load"nazwa"code)
4) ustawiasz numer linii do której program ma skoczyć (POKE 60053,low :POKE 60054,high)
5) uruchamiasz procedurę poprzez randomize usr 60000
Machines should work. People should think.

ZbyniuR

  • *****
  • Wiadomości: 3276
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Pytania od bardzo początkującego
« Odpowiedź #36 dnia: 2014.01.08, 01:32:28 »
Na mój rozum to w tym artykule wzór jest źle podany. Bo z tekstu wynika że powinien liczbę nr linii (do jakiej ma skoczyć na Break) zapisać w dwóch bajtach, ale nie wyjaśniono jak to zrobić, tylko zamiast tego podano wzór na coś odwrotnego czyli jak liczbę zapisaną w dwóch bajtach zamienić na dziesiętną. (X=256 * N+M)

Ale skoro kolega jest początkujący to najpierw wyjaśnię co to jest starszy bajt i młodszy bajt i po co to wogóle jest. Otóż jak wiemy w jednym bajcie można zapisać liczbę od 0 do 255 i nie większą, a co jeśli chcemy zapisać w pamięci liczbę większą np 750 ?

Ano trzeba to zamienić na 2 bajty, starszy i młodszy (z ang. high i low). By wyliczyć starszy to trzeba naszą liczbę podzielić przez 256 i wartością do zapisania w starszym bajcie będzie część całkowita czyli to przed przecinkiem z tego dzielenia. W podanym przykładzie 750/256=2,9296... nas interesuje to przed przecinkiem czyli 2 będzie wartością do zapisania w starszym bajcie. A co w młodszym wyliczamy tak: bierzesz liczbę początkową (tą którą chcemy zapisać w dwóch bajtach) odejmujesz od tego wynik mnożenia starszego bajtu z 256 i zostaje ci wartość do zapisania w młodszym bajcie. Czyli w naszym przykładzie 750-2*256=238  :)

A teraz ważna rzecz: w kodzie maszynowym procesora Z80 - STARSZY BAJT MA ADRES O 1 WIĘKSZY NIŻ MŁODSZY BAJT. Czyli w programiku o jakim mowa młodszy bajt wpisujemy POKE 60053,młodszy a starszy w adres następny POKE 60054,starszy :)

Maksymalną liczbą jaka się zmieści w dwóch bajtach jest 65535. :)
Wzór jaki podano w artykule zamienia wartości z dwóch bajtów w liczbę dziesiętną czyli
liczba=PEEK(młodszy)+PEEK(starszy)*256   - jak w przykładzie 238+2*256=750
Dla pewności że wszystko jasne inny przykład zamieńmy 9210 na 2 bajty. ;)
starszy=INT(9210/256):młodszy=9210-starszy*256
albo nawet tak by nie wymyślać wielu nazw zmiennych:    adr=60053:nrlini=9210:POKE adr+1,nrlini/256:POKE adr,nrlini-PEEK(adr+1)*256:
I taki wzór powinien być podany. :) Oczywiście nr linii podajesz taki jak potrzebujesz. ;)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #37 dnia: 2014.01.08, 10:51:15 »
Na mój rozum to w tym artykule wzór jest źle podany.
...

Widać żeś nie Spectrumowiec :D
To prosty trik, który jest opisany chyba we wszystkich książkach o Spectrum dla początkujących.
Instrukcja RANDOMIZE X, zmieniając bazę liczb losowych, zapisuje do pamięci (pod adres 23670) liczbę z zakresu 0-65535. Można ją potraktować jak DPOKE 23670, X. Wystarczy odczytać tą liczbę z pamięci bajt-po-bajcie, czyli PRINT PEEK 23670, PEEK 23671!

ZbyniuR

  • *****
  • Wiadomości: 3276
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Pytania od bardzo początkującego
« Odpowiedź #38 dnia: 2014.01.08, 13:22:52 »
Coś takiego, w sumie fajny mechanizm. Szkoda że od razu nie można pod podany adres. Ale i tak wolę w Lokomotywie pisać. :D
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #39 dnia: 2014.01.08, 14:13:50 »
Dzięki za wasz wysiłek, ale ja jako początkujący i zaczynający bliższą znajomość z basic'iem nie jestem czasami w stanie was zrozumieć, wy w domyśle wiecie o co chodzi autorowi, ja niestety niekoniecznie.
Takie rzeczy jak "Następnie trzeba podać do której linii ma się odbyć skok." niewiele mi mówią, wtedy tylko zadaje sobie pytanie jakiej linii?? co ma się w niej znajdować??  może ktoś mógłby po prostu napisać tych parę wierszy przykładowego (działającego) kodu??

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #40 dnia: 2014.01.08, 14:34:21 »
To nie my jesteśmy niezrozumiali, a autor króciutkiego tekstu w Bajtku! :P
Chodzi o to, że w momencie naciśnięcia BREAK, należy coś zrobić. To co ma być zrobione jest częścią programu w BASICu (jak podprogram) zaczynając się od linii numer X.
W momencie naciśnięcia BREAK to co robi program zostanie przerwane i wykonane zostanie GO TO X.

Ten właśnie numer linii X trzeba podać. Może to być 1 - program zacznie się od początku, lub inny, np. 9000 a w linii 9000 PRINT "Nie przerywać!"

steev

  • *****
  • Wiadomości: 1303
  • Miejsce pobytu:
    inode 42
Odp: Pytania od bardzo początkującego
« Odpowiedź #41 dnia: 2014.01.08, 15:07:48 »
Tak przy okazji, natknąłem się właśnie na dużo ciekawego czytania dla programistów :)
http://www.users.globalnet.co.uk/~jg27paw4//pourri/0-surc-contents.htm
Link do archiwum jest na samej górze.

Dla mających więcej czasu : http://www.users.globalnet.co.uk/~jg27paw4//index.html
Machines should work. People should think.

ZbyniuR

  • *****
  • Wiadomości: 3276
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Pytania od bardzo początkującego
« Odpowiedź #42 dnia: 2014.01.08, 17:29:42 »
Hej mad1 tak z ciekawości zapytam, z jakimi komputerami miałeś wcześniej do czynienia?   
I czy zdarzało już ci się pisać programy w jakimś innym języku? 
Ile wiosen chodzisz po ziemi?
Co cie skłoniło do zajęcia się Spectrumem?
Bo ostatnio obserwuję narastające zjawisko zainteresowania kompami sprzed 20-30 lat ludzi młodszych od tych maszyn i chciałbym zrozumieć co nimi motywuje bo mnie by do głowy nie przyszło by interesować się komputerami starszymi ode mnie, zresztą co tak stare kompy miały, kilka KB RAMu + semigrafika = bieda z nędzą. :D  Z kolei współczesne są tak złożone i skomplikowane, zarówno sprzętowo jak i programowo, że życia nie starczy by ogarnąć co się w nich dzieje. Co daje niemiłe uczucie że człowiek jest na to za głupi. A te z lat 80-90 były już na tyle fajne a jednocześnie na tyle proste że da się zrozumieć co tam w nich piszczy. :)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

twip

  • **
  • Wiadomości: 61
  • Miejsce pobytu:
    Warszawa, PL
Odp: Pytania od bardzo początkującego
« Odpowiedź #43 dnia: 2014.01.08, 18:43:17 »
To jest bardzo dobre pytaniu, ZbyniuR, czemu "młodzi" chcą poznać stare komputery. Zakładam, że są to pasjonaci, którzy po prostu chcą zrozumieć w pełni działanie komputera. Tak jak napisałeś - zrozumienie w najgłębszych detalach współczesnych pecetów jest nietrywialne, o ile możliwe dla zwykłego śmiertelnika. Stare komputery osobiste są natomiast do ogarnięcia przez jedną osobę, z odpowiednią motywacją. Zresztą, trzeba się cieszyć, że jest nimi zainteresowanie. Zrozumienie jak działa nawet 8-bitowiec od środka, na poziomie kodu maszynowego, komunikacji na szynach danych itd. jest bardzo przydatne. Dla przykładu, jest widoczna różnica pomiędzy programistami, którzy nigdy nie tknęli assemblera, a tymi którzy mają na swoim koncie z nim dłuższą styczność. Trochę lepiej można zrozumieć i zaplanować kod, także w języku wyższego poziomu, wiedząc jak to wszystko działa na niskim poziomie. Nie mówię, że jest to wiedza niezbędna, ale na pewno przydatna. Marzy mnie się wskrzeszenie starych komputerów w nowej, mocno zintegrowanej (single chip), w 100% zgodnej z oryginałem wersji. Taki komputer mógłby kosztować tyle co sama klawiatura a mógłby być super narzędziem do nauki i funu. No to się rozmarzyłem. :-P
ZX Spectrum+, "szarak" +2, DivIDE+, Speccy2010, "chlebak" C64 + SD2IEC i plany na więcej...

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #44 dnia: 2014.01.08, 20:12:03 »
Zbyniur, ZX Spectrum to był mój 1-szy komputer, dostałem go w spadku po kuzynie, który wyjechał na studia. Po prostu chciałem wrócić trochę do miłych wspomnień. Zawsze podobały mi się grafiki przy wgrywaniu gierek, nieźle się tym jarałem. Teraz zobaczyłem, że jest nawet duża społeczność i tak mnie coś naszło, żeby samemu coś spróbować napisać, tak po prostu dla własnej satysfakcji. Kiedyś miałem jeszcze c64 bo wszyscy na około mieli, ale to już nie był ten czar. Zdarzało mi się pisać w Bascomie(dla mikrokontrolerów) i c++ ale to raczej były bardzo proste rzeczy. 30 lat chodzę po ziemi i raczej zaniżam chyba tutaj średnią ;)

A to ja dokładnie 20 lat temu