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