Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pamięć EPROM 27512 - menu w obcym języku, jak na polski?

wiwe 19 Lis 2006 00:32 1333 8
  • #1 19 Lis 2006 00:32
    wiwe
    Poziom 9  

    Menu urządzenia oraz komunikaty pewnej maszyny zapisane są w pięciu kościach EPROMach typu 27512, lecz zapisane są w obcym języku, w jaki sposób mógłbym zamienić te opisy na wersję polską, czy zczytując zawartość EPROMa, można ją tak obrobić, żeby zamienić język?
    Co do tego (oprócz programatora EPROMów) będzie mi potrzebne, czy jest jakiś program, który konwertuję zczytaną formę binarną EPROMu na formę tekstową lub coś w tym stylu i odwrotnie z tej formy tekstowej na formę binarną by móc go załadować do EPROMa.

  • #2 19 Lis 2006 05:00
    Paweł Es.
    Pomocny dla użytkowników

    Tu może być problem, bo o ile sczytanie i zapisanie EPROMU to nie problem, to sama edycja nazw może być problemem nie w sensie technicznym edycji ale samej czynności.

    Możliwe problemy:

    1. Nazwy mogą być porozrzucane po całej pamięci

    2. Różne długości nazw pozycji menu w języku polskim i obcym

    3. Nazwy mogą być zapisane w różnym formacie: z pierwszym bajtem podającym długość nazwy wyświetlanej lub jako ciąg znaków zakończonych zerem lub $

    4. System może nie wyświelać polskich liter

    5. Oprócz nazw zapisanych w jakimś obszarze pamięci np. jednym ciągiem lub rozdzielonych np. znakiem #0 lub $ może w programie istnieć tablica wskaźników do początków tych nazw, którą jeżeli niezachowamy długości oryginalnych trzeba zmodyfikować (uprzednio trzeba ją zlokalizować a to nie takie proste)

    może to być coś takiego jak ponizej, problemem jest znalezienie xxx
    Program odwołuje się do nazw przez tę tablicę wskaźników wskazujących
    początek konkretnej nazwy ... ta tablica może też być wymieszana z bajtami długości tekstu (o ile same nazwy nie mają ich w sobie lub delimiterów).

    TabWsk:
    adres wskaźnik
    xxx0 1000
    xxx2 1004
    xxx4 1008
    xxx6 100D
    xxx8 1012

    Nazwy:
    adres
    1000 FILEOPENCLOSEPRINTEXIT

    ale może tez być (zmieniają się wtedy adresy wskaźników)

    1000 FILE$OPEN$CLOSE$PRINT$EXIT$

    To nie jest zadanie tak trywialne jak się wydaje, gdy nie mamy wersji źródłowej programu. Poza tym trzeba wiedzieć jak są wyświelane nazwy
    (czy graficznie czy tekstowo).

    Jak Pan ma zrzut tego epromu to proszę mi go wrzucić na PW to zobaczę jak to wygląda, kiedyś się bawiłem w takie rzeczy, może coś doradzę

  • #3 19 Lis 2006 12:03
    Quarz
    Poziom 43  

    Witam,
    poproszę zawartość binarną tej pamięci zamieścić tu w postaci załącznika (potrzebny programator od odczytu, jeśli nie ma innej metody), a zobaczymy co da się zrobić.
    Problem jest w tym, iż polskie zamienniki tekstu od obcojęzycznych nie mogą być dłuższe.
    Zadanie banalne, co żmudne.
    Oczywiście "kostkę", po zamianie łańcuchów tekstowych, należy ponownie zaprogramować.

    Pozdrawiam

  • #4 20 Lis 2006 18:17
    wiwe
    Poziom 9  

    Witam
    Dzięki za szybką reakcję, moje pytanie wyprzedziło trochę moje możliwości, tzn, programatora EPROMów na razie jeszcze nie mam, jest w trakcie zakupu, łącznie z EPROMami (nowymi do testów).
    Menu i komunikaty maszyny są w formie tekstowej, więc z tym nie powinno być problemów, maszyna "jest już pełnoletnia", a w tych czasach wyświetlanie napisów na ekrenie było cudem techniki, ale nic to, ważne że pracuje, tylko ten język............
    Jak dostanę już do rąk programator to spróbuję z EPROMów ściągnąć zawartość, dane tego menu i komunikatów zapisane są w EPROMach D27512, 5 szt.
    A wszystko zaczęło się od wizyty serwisanta, który przez pomyłkę zdradził się co jest w których kościach, za kosmiczną sumę zaproponował przetłumaczenie tego wszystkiego, zostawił pliki tekstowe, z wersją obcojęzyczną, które po wypełnieniu wersją polską miałem mu przesłać , on ma je przetworzyć na plik binarny i przesłać do EPROMu.
    Dlatego zrodziło się moje pytanie jak można by to zrobić bez jego pomocy,bo przecież całą końską robotę z tłumaczeniem i wpisywaniem do pliku mam zrobić JA, a on tylko to przetworzy i załaduje do kości, jutro dołączę te pliki tekstowe (fragment), które mi zostawił, może ktoś podsunie pomysł jakim programem to przetworzyć na BINa.
    Jak tylko zczytam zawartość EPROMów to prześlę osobom chętnym pomocy.
    Dziękuję za już, potem poproszę o jeszcze.
    Czy jest jakiś program, który potrafi przetworzyć plik binarny na wersję tekstową i odwrotnie?

  • #5 20 Lis 2006 18:52
    Quarz
    Poziom 43  

    Witam,
    programu nie ma jako takiego, zawartość binarną ogląda się w programie do przetwarzania tekstów (Notatnik) typu WYSIWIG, gdzie widać adresy komórek wyświetlanej zawartości binarnej w postaci bajtów (od 00 do FF hexagonalnie).
    Napisz mi na PW co to za urządzenie, a być może okaże się, iż parę lat wstecz robiłem już to samo, ponieważ naprowadza mnie na to te 5 sztuk EPROMów 512kb.

    Pozdrawiam

  • #6 21 Lis 2006 16:15
    wiwe
    Poziom 9  

    Jak napisałem wczoraj, poniżej fragmenty plików tekstowych, które po przetłumaczeniu miałem przesłać serwisantowi.
    W miejscach xxxxxxxx, była nazwa firmy więc musiałem je zamazać, sami wiecie dlaczego.
    Z tego co kolega zauważył w trakcie programowania EPROMów, w edytorze którym programował serwisant było widać tekstowe opisy.
    Narazie tyle może z teorii, jak będę miał programator, to znowu ruszę temat, dziękuję za zainteresowanie.
    Znaczki "........" mówią, że ta forma zapisu trwa przez kilkadziesiąt linii.




    $TITLE(' XXXX TEXTS 0-999 **** ITALIENSK XXXXXX ****')
    $PAGEWIDTH(106) PAGELENGTH(90)
    $NOLIST

    ;-----------------------------------------------;
    ; FILE: ITATX0.TXT VER.00 900117 LKN ;
    ; SVARER TIL VERS 108. 01 9001 ;
    ; 02 900731 HHW ;
    ; 03 900801 HHW ;
    ; 04 900824 HHW ;
    ; 05 910311 HHW ;
    ; 06 910516 HHW ;
    ; 07 910529 HHW ;
    ; 08 920107 HHW ;
    ; 09 920901 LKN ; x000 rettet.
    ; *** XXXXXXXXX AFD.230 *** ;
    ; *** xxxxxxxxxx, xxxxxxx *** ;
    ;-----------------------------------------------;

    NAME ITATX0

    PUBLIC xxxxTABLE0


    EXTRN xxxxTABLE1 :FAR
    EXTRN xxxxTABLE2 :FAR
    EXTRN xxxxTABLE3 :FAR
    EXTRN xxxxTABLE4 :FAR
    EXTRN xxxxTABLE5 :FAR
    EXTRN xxxxTABLE6 :FAR
    EXTRN xxxxTABLE7 :FAR
    EXTRN xxxxTABLE8 :FAR
    EXTRN xxxxTABLE9 :FAR


    PTR_CODE SEGMENT AT 3001H
    ; SEGMENT WITH POINTERS TO THE REST OF THE DISPLAY BUFFERS
    ; THIS ALLOWS US TO LOCATE STRINGS DIFFERENT FROM LANGUAGE
    ; TO LANGUAGE WITHOUT CHANGINS ADRESSES IN VDU

    xxxx_TABLE_0_PTR DD xxxxTABLE0
    xxxx_TABLE_1_PTR DD xxxxTABLE1
    xxxx_TABLE_2_PTR DD xxxxTABLE2

    ...
    ...
    PTR_CODE ENDS



    ASSUME CS:ITATX0_CODE

    ITATX0_CODE SEGMENT PUBLIC 'CODE'

    xxxxTABLE0 LABEL FAR

    DW DT0000,DT0001,DT0002,DT0003,DT0004,DT0005,DT0006,DT0007,DT0008,DT0009
    DW DT0010,DT0011,DT0012,DT0013,DT0014,DT0015,DT0016,DT0017,DT0018,DT0019
    DW DT0020,DT0021,DT0022,DT0023,DT0024,DT0025,DT0026,DT0027,DT0028,DT0029
    DW DT0030,DT0031,DT0032,DT0033,DT0034,DT0035,DT0036,DT0037,DT0038,DT0039
    DW
    .....
    ....
    ....
    DT0990,DT0991,DT0992,DT0993,DT0994,DT0995,DT0996,DT0997,DT0998,DT0999
    DW DT0XXX

    %metachar(^)

    ;******************
    ; START OF TEKST
    ;******************
    $EJECT

    DT0001:
    DB 'Macchina ferma #Partire con S30&'

    DT0002:
    DB 'Macchina ferma (SAFCEMS=0) #Partire con S30&'

    DT0003:
    DB 'Interruttore non in pos.0 #Girare S62 in Pos.0 e poi#'
    DB 'dopo aver dato Potenza #in Pos.1 per ripartire&'



    ........
    ...........
    ...........
    DT0911:
    DB 'Contatore Formatura da Errore #Riparti:Selez. MENU28 ed #'
    DB 'Caso 0, Prima Formatura #Azzera Dati Precedenti&'

    DT0912:
    DT0913:
    DT0914:
    DT0915:
    DT0939:
    DB 'Contatore Formatura da Errore #Riparti:Selez. MENU28 ed #'
    DB 'Caso 1 #Azzera Dati Precedenti&'

    DT0916:
    DT0917:
    .....
    ...........
    ...........
    DT0998:
    DT0999:
    DT0XXX:
    DB 'Nessun testo per questo codice.&'

    ITATX0_CODE ENDS
    ;#'
    END

  • #7 21 Lis 2006 16:44
    Quarz
    Poziom 43  

    Witam,
    czy to nie jest przypadkiem "kombajn" do sprawdzania zbieżności kół samochodu i ich wyważania, albo jaka linia odlewnicza? ... :D

    Pozdrawiam

  • #8 21 Lis 2006 19:56
    wiwe
    Poziom 9  

    Quarz zobacz na PW :D

  • #9 24 Lis 2006 02:06
    Paweł Es.
    Pomocny dla użytkowników

    Z tego co podałeś to wynika, że serwisant ma dostęp do części kodu w assemblerze opisującego ciągi tekstowe (z możliwością przetłumaczenia ich na inny język, co wspomniano w, którymś komentarzu).
    Jego wersja zawiera konkretne adresy początków poszczególnych komunikatów (a właściwie etykiety je swskazujące). Prawdopodobnie on to po wstawieniu tekstów (przez Ciebie) przepuści przez assembler (program tłumaczący z mnemoników na postać binarną) a tenże program, automatycznie przyporządkuje konkretne adresy startowe do tekstów i wypełni tablicę wskaźników, z której korzysta podprogram wyświetlający te teksty).

    To trochę inna zabawa niż bezpośrednie rzeźbienie w zawartosci EPROMU ale to co podałeś może to bardzo ułatwić, bo znamy już strukturę danych.

    A swoją drogą to z tego serwisanta cwaniaczek, ty odwalisz całą robotę (tłumaczenie i wpisywanie), assebler poustawia adresy początków tekstów (minimalny wkład pracy z wyjątkiem uruchomienia assemblera), programator zaprogramuje pamięci (minimalny wkład pracy typu włożenie układu do podstawki i uruchomienie programowania i weryfikacji) i zgarnie kupę szmalu).

    Jak robić, żeby nic nie robić wyjść na swoje i zarobić :)


    Linie zaczynające się od średnika to komentarze

    DB - define byte (wstawia ciąg bajtów0
    DW - define word - wstawia ciąg liczb 16 bitowych (tu ofsetów)
    DD - define double word - wstawia ciąg liczb 32 bitowych
    typu segment:offset



    TITLE(' XXXX TEXTS 0-999 **** ITALIENSK XXXXXX ****')
    $PAGEWIDTH(106) PAGELENGTH(90)
    $NOLIST

    ;-----------------------------------------------;
    ; FILE: ITATX0.TXT VER.00 900117 LKN ;
    ; SVARER TIL VERS 108. 01 9001 ;
    ; 02 900731 HHW ;
    ; 03 900801 HHW ;
    ; 04 900824 HHW ;
    ; 05 910311 HHW ;
    ; 06 910516 HHW ;
    ; 07 910529 HHW ;
    ; 08 920107 HHW ;
    ; 09 920901 LKN ; x000 rettet.
    ; *** XXXXXXXXX AFD.230 *** ;
    ; *** xxxxxxxxxx, xxxxxxx *** ;
    ;-----------------------------------------------;

    NAME ITATX0

    PUBLIC xxxxTABLE0

    ; To są dyrektywy assemblera eksportujące wskaźniki do poszczególnych
    ; tablic (tak, że program główny je widzi)


    EXTRN xxxxTABLE1 :FAR
    EXTRN xxxxTABLE2 :FAR
    EXTRN xxxxTABLE3 :FAR
    EXTRN xxxxTABLE4 :FAR
    EXTRN xxxxTABLE5 :FAR
    EXTRN xxxxTABLE6 :FAR
    EXTRN xxxxTABLE7 :FAR
    EXTRN xxxxTABLE8 :FAR
    EXTRN xxxxTABLE9 :FAR


    PTR_CODE SEGMENT AT 3001H
    ; SEGMENT WITH POINTERS TO THE REST OF THE DISPLAY BUFFERS
    ; THIS ALLOWS US TO LOCATE STRINGS DIFFERENT FROM LANGUAGE
    ; TO LANGUAGE WITHOUT CHANGINS ADRESSES IN VDU

    ; To są wskaźniki dalekie do poszczególnych tablic tekstowych




    ; (w segmentach po 64 kilobajty)


    xxxx_TABLE_0_PTR DD xxxxTABLE0
    xxxx_TABLE_1_PTR DD xxxxTABLE1
    xxxx_TABLE_2_PTR DD xxxxTABLE2

    ...
    ...
    PTR_CODE ENDS



    ASSUME CS:ITATX0_CODE

    ITATX0_CODE SEGMENT PUBLIC 'CODE'

    xxxxTABLE0 LABEL FAR

    ; pod etykiety DTxxxx assembler podstawi konkretne adresy 16 bitowe
    ; (offsety) wewnątrz segmentu 64 kB (czyli jednej kostki 27512)
    ; początków poszczególnych komunikatów tekstowych


    DW DT0000,DT0001,DT0002,DT0003,DT0004,DT0005,DT0006,DT0007,DT0008,DT0009
    DW DT0010,DT0011,DT0012,DT0013,DT0014,DT0015,DT0016,DT0017,DT0018,DT0019
    DW DT0020,DT0021,DT0022,DT0023,DT0024,DT0025,DT0026,DT0027,DT0028,DT0029
    DW DT0030,DT0031,DT0032,DT0033,DT0034,DT0035,DT0036,DT0037,DT0038,DT0039
    DW
    .....
    ....
    ....
    DT0990,DT0991,DT0992,DT0993,DT0994,DT0995,DT0996,DT0997,DT0998,DT0999
    DW DT0XXX

    %metachar(^)

    ;******************
    ; START OF TEKST
    ;******************
    $EJECT

    DT0001:
    DB 'Macchina ferma #Partire con S30&'

    DT0002:
    DB 'Macchina ferma (SAFCEMS=0) #Partire con S30&'

    DT0003:
    DB 'Interruttore non in pos.0 #Girare S62 in Pos.0 e poi#'
    DB 'dopo aver dato Potenza #in Pos.1 per ripartire&'



    ........
    ...........
    ...........
    DT0911:
    DB 'Contatore Formatura da Errore #Riparti:Selez. MENU28 ed #'
    DB 'Caso 0, Prima Formatura #Azzera Dati Precedenti&'

    DT0912:
    DT0913:
    DT0914:
    DT0915:
    DT0939:
    DB 'Contatore Formatura da Errore #Riparti:Selez. MENU28 ed #'
    DB 'Caso 1 #Azzera Dati Precedenti&'

    DT0916:
    DT0917:
    .....
    ...........
    ...........
    DT0998:
    DT0999:
    DT0XXX:
    DB 'Nessun testo per questo codice.&'

    ITATX0_CODE ENDS
    ;#'
    END

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME