atarionline.pl Happy-Computer Ampel Algorytm - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorQTZ
    • CommentTime17 May 2011 zmieniony
     
    Aby ułatwić bezbłędne przepisywanie programów z prasy wymyślono edytory generujące kod kontrolny dla każdej wpisanej linii. Dla plików Basic'a w Bajtku był to Edytor Basic'a, który prawdopodobnie jest ulepszoną Basic'ową wersją programu używanego na zachodzie (kody są liczone identycznie, ale w polskiej wersji pomijana jest ewentualna spacja na końcu wiersza).

    Istnieje również "edytor" dla plików binarnych uruchamiany spod Basic'a ale działający w kodzie maszynowym. Jest to program Ampel opublikowany w piśmie Happy Computer ->link<- Była też wersja 2.0 ->link<-

    ->link<- - bez dodatkowego softu i OCR nie pomoże - program Ampel wymaga wpisywania znak po znaku.

    Edytor Basic'a jest napisany w Basic'u, więc nie miałem żadnego problemu z przeniesieniem go na PC, gdzie mogę "hurtowo" dla całego listingu generować kody kontrolne, co bardzo ułatwia sprawdzenie dawniej przepisanych programów lub "świeżych" z OCR.

    Dla Ampel'a chciałbym dodać podobną możliwość, jednak nie udało mi się do końca rozszyfrować algorytmu obliczania sumy kontrolnej.

    Fragment Listingu "Kasetten"
    0000:00 02 00 07 06 07 20 BD<3A>
    0008:07 A2 10 A9 03 9D 42 03<D6>
    0010:A9 C3 9D 44 03 A9 07 9D<D3>
    0018:45 03 A9 04 9D 4A 03 A9<95>
    0020:80 9D 4B 03 20 56 E4 30<73>
    0028:6D A9 97 A0 07 8D E0 02<22>
    0030:8C E1 02 20 9B 07 C9 FF<6A>
    0038:D0 5C C8 D0 59 A9 97 A0<75>

    Z moich ustaleń wynika, że do obliczania kodu wykorzystywane są wszystkie wartości łącznie z numerem linii, a każda z nich ma przyporządkowane wagi:

    x2 x1: x128 x64 x32 x16 x8 x4 x2 x1<kod: suma wartości pomnożonych przez wagi i ?>

    Jednak nie wiem, co zrobić z przeniesieniem - wynik jest poprawny tylko dla liczb, z których mieści się w zakresie do FF.

    W załączniku program Ampel, zgrane binarki do analizy: dane z adresu 1536, ze zmiennej ML$ i z CIO$; przykładowy listing do przepisania i plik wynikowy.

    Instrukcja: po uruchomieniu czekamy, potem podajemy rozmiar pliku w bajtach i nazwę pliku z rozszerzeniem, następnie wpisujemy linie listingu wraz z kodami. Zapis na "D:" po naciśnięciu Control+S lub automatycznie po przepisaniu całości.

    Myślę, że dla assemblerowca rozszyfrowanie algorytmu to bułka z masłem.
    Proszę o pomoc :)
    • 2: CommentAuthor0xF
    • CommentTime18 May 2011
     
    Sumę kontrolną obliczasz wykonując kolejno dla 10 bajtów (numer linii + 8 danych):
    - obrót sumy w lewo o jeden (wypadający bit ląduje jako najmłodszy)
    - dodajesz 8-bitowo bajt do sumy
    • 3:
       
      CommentAuthorjhusak
    • CommentTime18 May 2011 zmieniony
     
    @0xF, zgadłeś, czy zanalizowałeś?

    Chyba jest za późno, lub za głupi jestem - ale mi nijak powyższe nie wychodzi.

    Dobra, wyszło.

    Ważne, żeby 8-bitowo dodawać już bez przeniesienia.
    • 4: CommentAuthor0xF
    • CommentTime18 May 2011 zmieniony
     
    Obejrzałem kod.
    Obrót i dodawanie jest realizowane tak:
    ASL @
    ADC bajt
    • 5: CommentAuthorQTZ
    • CommentTime19 May 2011 zmieniony
     
    Wielkie Dzięki! Działa!

    W VB rozwiązałem to tak:
    For I = 1 To 10 ' w zmiennej AMPELB(I) są kolejne bajty z linii
    ' przesuwam << B6,B5,B4,B3,B2,B1,B0,B7:
    CSum = ((CSum * &H2&) And &HFF&) Or ((CSum And &H80&) \ &H80&)
    ' sumuję i obcinam przeniesienie:
    CSum = (CSum + AMPELB(I)) And &HFF&
    Next I
    MsgBox Hex(CSum)

    Przykład nie był do końca reprezentatywny, bo zawsze pierwszy Bajt = Zero, ale rozwiązanie działa prawidłowo również dla innych wartości np. dla:
    2690:F2 93 F2 7D F2 87 F2 9D<EF>

    Teraz już tylko zostaje mi dopisać obsługę plików i przydałoby się więcej listingów z Happy-Computer (poza Turbo B.) :)
    • 6: CommentAuthorQTZ
    • CommentTime11 May 2012 zmieniony
     


    I oto jest - po roku odnalazłem rozgrzebany kod i doprowadziłem do używalności :)

    Program generuje pliki binarne z listingów Ampel'a, jak również listingi z plików binarnych.

    Po wybraniu pliku tekstowego trzeba wpisać rozmiar pliku wynikowego zgodnie z podanym w magazynie i nacisnąć "Convert" (niestety program nie wyszukuje rozmiaru podanego w pliku) - wygenerowany zostanie plik z dodanym rozszerzeniem bin lub txt. W załączniku przykładowe listingi: Turbo Basic i program Kasetten.

    AAD jest nieco niedopracowany, powolny, ale nie powinien sprawiać problemów.

    Edit: Wersja 0.0.9: poprawione literówki, dodane zabezpieczenie przed przepełnieniem, inne drobne poprawki.
    • 7: CommentAuthorQTZ
    • CommentTime12 May 2012
     
    Ponieważ miałem nadzieję, że znajdę listing AMPEL 2.0 (nie znalazłem) wróciłem do linków z początku wątku i okazało się, że w opisie jest podany sposób obliczania sumy kontrolnej (co zauważyłem dopiero po przetłumaczeniu automatem):
    Sumy kontrolne w liniach aukcji są trudne dla wielu czytelników zastanawiało, dlaczego mielibyśmy wytłumaczyć obliczenia. ŚWIATŁO-line składa się z dwóch bajtów dla numeru wiersza i ośmiu bajtów danych. Najbardziej znaczący bajt numeru wiersza (pierwsze dwie cyfry), komputer pomnożyć przez dwa i dodać do niskiej bajt numeru linii. Ten wynik znowu pomnożyć przez dwa. Następnie dodaje do serii po osiem bajtów danych, gdzie znowu podwoił po każdym dodaniu wyniku. Dopiero po ósmym bajcie danych może być wynikiem zmian. Od tej sumy, używa tylko ostatnie osiem bitów (liczba z zakresu od zera do 255), które ostatecznie tworzą sumę kontrolną. To prawda, wyliczenie jest trudne i skomplikowane. Ale tylko dzięki tej skomplikowanej formuły, komputer może niezawodnie wykrywać literówek. A co gorsza niż bycie bez aukcji?
    :)
    • 8:
       
      CommentAuthorKaz
    • CommentTime2 Jun 2012
     
    Dorzucam do katalogu uzytkow, dzial PC. Dzieki QTZ.
    • 9: CommentAuthorQTZ
    • CommentTime7 Jul 2019 zmieniony
     
    Znalazłem i przepisałem Ampel 2.0. Program jest w numerze 50 z grudnia 1987 strony 73 i 74 ->link<- . Dyskietka z programem w załączniku - jest to ta sama dyskietka, co w przypadku Ampel'a 1.1, ale dograłem Ampel 2.0 i on się uruchamia domyślnie.