Autor Wątek: Sortowanie tablicy  (Przeczytany 15185 razy)

tdu

  • *****
  • Wiadomości: 943
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Sortowanie tablicy
« Odpowiedź #30 dnia: 2023.05.08, 15:14:41 »
Jeśli chodzi że stwierdziłem że nie działa, to dlatego, że sprawdzalem
Tylko początkowe elementy tablicy, nie spodziewałem się ze będą one na końcu.
Moja wina.

Jeśli z indekserem jest problem, to może udało by się dopracować kod który jest,
Przekazanie długości przez Poke, może być, długość tablicy przed uruchominiem kodu jest znana.

Gorzej że nie dziala na 23760,  tak jakoś kiepsko widze doczytywanie kodu w programie Start.
A może kod przerzucić z 23760 na jakiś inny adres, ldir, przed uruchomieniem.
Przerzucenie 140 bajtów to będzie ułamek sekundy.
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

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #31 dnia: 2023.05.08, 15:55:44 »
Przerzucanie nic nie daje... musiałem coś spaprać w wołaniu kodu z ROMu - sorter wczytany do REMa i przeniesiony "do góry" po pierwszym wywołaniu działa poprawnie, ale jak z kodu BASICa usunę LOAD to następne wywołanie coś kaszani ze zmiennymi i wyświetlanie posortowanej tablicy kończy się po jednym ekranie. I zupełnie nie rozumiem dlaczego.

Żeby było zabawnie jak po load""code dam stop a potem skasuję load i stop to odpalenie sortera od razu kaszani zmienne... Chyba za gupi jestem albo za ciepło - termometr na biurku pokazuje 30.7 °C ;)

Jak znajdę zacięcie, to jeszcze popatrzę, ale jakoś tak nie widzę co bym miał poprawić...

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Sortowanie tablicy
« Odpowiedź #32 dnia: 2023.05.08, 17:36:09 »
A nie pomogłoby gdyby puste nazwy wypełnić jakimiś znakami które w sortowaniu trafią na koniec jak np znaki podkreślenia?
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

tdu

  • *****
  • Wiadomości: 943
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Sortowanie tablicy
« Odpowiedź #33 dnia: 2023.05.08, 18:25:56 »
@Zbyniu
Wypelnienie tablicy do 128 stringów spowoduje ze za kazdym razem trzeba te 128 stringów obsłużyc.
A to jest czas, który może denerwować.
W praktyce rzadko na dyskietce jest więcej niż 10, 20 czasem 40 wpisów, 128 to tylko teoria w praktyce raczej niespotykana.
@matofesi
pospiechu nie ma, ale gdybyś znalazł trochę czasu to by było fajnie.
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

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #34 dnia: 2023.05.09, 09:38:37 »
No i chyba problem się wyjaśnił choć niestety nie rozwiązał... Wychodzi mi, że zassemblowany kod ma w środku coś, co powoduje, że - mimo REMa na początku linii - parser BASICowy dziczeje. Jeśli kod się wczytuje do REMa i od razu wykonuje to wszystko jest OK. Jeśli po wczytaniu kod się zatrzyma a potem damy RUN, albo GOTO, które wymusi przejście przez pierwszą linię to parser idzie gdzieś w kartofle i potem zmienna indeksowa nie działa jak należy - wyświetlanie posortowanej tablicy zatrzymuje się po jednym ekranie.

W związku z tym żeby sorter zadziałał poprawnie nie możesz dopuścić do tego, żeby kod parser analizował pierwszą linię. Czyli... po wczytaniu do REMa sortera musisz od razu zapisać program z LINE 10 - załadowany w ten sposób nie przechodzi (w odróżnieniu od goto 10 czy run 10) przez pierwszą linię i działa poprawnie. Jakiekolwiek zatrzymanie i ponowne uruchomienie wymagające od BASICa przeglądania pamięci kaszani dane w dziwny sposób.

W załączniku wszystko co potrzebne :)
sort_b.tap to pełne demo - kod startuje od linii 9999, wczytuje sorter do REMa i skacze do linii 10. Ustawia parametry, wczytuje dane i wyświetla przed posortowaniem. Potem READY, klawisz, sortowanie, klawisz i wyświetla jeszcze raz posortowane. Nazwę tablicy POKEujesz pod 23296, liczbę pozycji z początku, które ma ci przesortować pod 23298 - demo pokazuje w praktyce sortowanie pierwszej połowy stupozycyjnej tablicy.

sort.bas to źródło BASICowe tego samego programu
sort.asm to właściwy sorter
sort_asm.tap to sam skompilowany sorter w formie TAPa
sort.bin to to samo jako czysty kod binarny


trojacek

  • *****
  • Wiadomości: 6941
  • Miejsce pobytu:
    Warszawa
Odp: Sortowanie tablicy
« Odpowiedź #35 dnia: 2023.05.09, 13:58:16 »
zassemblowany kod ma w środku coś, co powoduje, że - mimo REMa na początku linii - parser BASICowy dziczeje.

Może kod dwukropka?

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #36 dnia: 2023.05.09, 14:02:34 »
zassemblowany kod ma w środku coś, co powoduje, że - mimo REMa na początku linii - parser BASICowy dziczeje.

Może kod dwukropka?

No właśnie to nie powinno mieć znaczenia - REM pomija wszystko co jest dalej do końca linii. A przynajmniej powinien pomijać i ignorować.

Phonex

  • *****
  • Wiadomości: 1265
  • Miejsce pobytu:
    Warszawa
Odp: Sortowanie tablicy
« Odpowiedź #37 dnia: 2023.05.09, 14:38:54 »
Stawiam na "koniec linii" przed końcem linii ;)
Czyli 13 - kod ENTER.
Sam ENTER nie jest zabójczy, ale odczytane po nim dwa bajty zinterpretowane przez część procedur BASICa jako "numer linii" muszą dawać wynik w dozwolonym zakresie (9999). Na 100% wykłada się na tym READ, bo nie znajduje linii DATA jeśli nie jest wskazana konkretnie przez RESTORE nn.
Możliwe że bajty zinterpretowane jako "długość linii" też mają znaczenie...

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #38 dnia: 2023.05.09, 14:42:41 »
Stawiam na "koniec linii" przed końcem linii ;)
Czyli 13 - kod ENTER.

Nope. Nie ma entera w kodzie.

Phonex

  • *****
  • Wiadomości: 1265
  • Miejsce pobytu:
    Warszawa
Odp: Sortowanie tablicy
« Odpowiedź #39 dnia: 2023.05.09, 14:47:12 »
To może kody kolorów? X,n gdzie X to 16...21, a n niedozwolona dla danego kodu wartość.
Chociaż nie wiem co to ma do tablic, psuje wyświetlanie przez LIST.

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #40 dnia: 2023.05.09, 14:48:10 »
To musi być coś głębszego - zawartość REMa nie rozwala samego programu bo całość jest w stanie się wykonać póki parser nie przejedzie przez program. I wtedy też zachowuje się dziwnie bo nie wyrzuca błędów itp. tylko zachowuje się jakby coś się kaszaniło w zmiennej indeksowej (w wypadku mojego programu - i). Podejrzewam, że coś tam się psuje w środku - zmienne indeksowe przechowują informację o pętli a nie tylko wartość...

Nigdy nie robiłem kodu, który siedziałby w REMie i robił coś więcej niż wczytywanie bloku bez nagłówka itp. i jeszcze musiał "gadać" z BASICem ;)

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #41 dnia: 2023.05.09, 15:04:41 »
No to wiem ciut więcej... Kaszani sprawę nie parsowanie w trakcie wykonania tylko wyświetlenie zerowej linii z REMem. Jak się program odpali i po jego zakończeniu bez wyświetlania treści zrobi kolejny raz RUN to się wykonuje poprawnie. Dopiero jak się wyświetli kod to kolejne wykonanie już się kaszani. Czyli prawdopodobnie jakaś kombinacja kodów sterujących powoduje, że coś się zmienia w zmiennych systemowych...


Phonex

  • *****
  • Wiadomości: 1265
  • Miejsce pobytu:
    Warszawa
Odp: Sortowanie tablicy
« Odpowiedź #42 dnia: 2023.05.09, 15:13:42 »
To samo jest w OPENERZE, też nie wyświetla "scroll?".
Jednak niedozwolone kody kolorów lub AT/TAB. Czyli 16..23, n

Można to ominąć dodając na początku linii 31 "PRINT #2;:"

EDIT: szajs! nie zawsze działa. Tzn. działa po LIST, a nie po AUTO-LIST (po naciśnięciu ENTER).

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #43 dnia: 2023.05.09, 15:15:44 »
Hmmm... Czyżby dziwny zestaw kodów powodował, że się dane kanałów psują?

Bo tak - nie wyświetla się "scroll?".

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Sortowanie tablicy
« Odpowiedź #44 dnia: 2023.05.09, 15:34:51 »
No i znalazłem przyczynę - DJNZ ma kod $10 czyli INK. Jak się do tego doda przesunięcie ujemne to się kaszani. Oraz LD D,n z kodem $16 - AT z dwoma parametrami w tym drugi zdecydowanie za duży.

@Phonex Dzięki za nakierowanie we właściwą stronę :)

W załączniku jeszcze raz to samo tylko tym razem się nie kaszani ;)