В SASemulator есть такая штука как перехват Bload/Bsave. Читает и записывает в LVT-формат (см. Readme в В SASemulator). В том моменте я поленился делать через буфер (масив), а сделал через длинную строку string;
Ну раз ты спец в СИ то думаю в коде Дельфи разберёшся.
//( BSAVE )
procedure intPC56625;// перехват при r_PC=56625 - 2.4.8 Передача кодового файла ( BSAVE ).// Точка входа DD31H ( 56625 ). - dd85-ret
var strBsave:string;// строка для храния
FileName:string; // имя файла куда сохранять
var c:Cardinal;
Byte2_:array[1..2] of Byte; Word_:Word absolute Byte2_;
CODFL_ORG:Word;//¦ BEA4/BEA5 ¦ 48804/48805 ¦ CODFL_ORG ¦ начало CODE-файла ¦
CODFL_END:Word; //¦ BEA6/BEA7 ¦ 48806/48807 ¦ CODFL_END ¦ конец CODE-файла ¦
//CODFL_RUN:Word; //¦ BEA9/BEAA ¦ 48809/48810 ¦ CODFL_RUN ¦ старт CODE-файла ¦
begin
strBsave:='LVOV/2.0/'+#$D0;
//¦ BE8C-BE91 ¦ 48780-48785 ¦ SAVE_NAME ¦ имя файла запись/эталон¦
For c:=48780 to 48785 do begin strBsave:=strBsave+chr(RAM[c])end;
//¦ BEA4/BEA5 ¦ 48804/48805 ¦ CODFL_ORG ¦ начало CODE-файла ¦
For c:=48804 to 48805 do begin strBsave:=strBsave+chr(RAM[c])end;
Byte2_[1]:=RAM[48804];Byte2_[2]:=RAM[48805];CODFL_ORG:=Word_;
//¦ BEA6/BEA7 ¦ 48806/48807 ¦ CODFL_END ¦ конец CODE-файла ¦
For c:=48806 to 48807 do begin strBsave:=strBsave+chr(RAM[c])end;
Byte2_[1]:=RAM[48806];Byte2_[2]:=RAM[48807];CODFL_END:=Word_;
//¦ BEA9/BEAA ¦ 48809/48810 ¦ CODFL_RUN ¦ старт CODE-файла ¦
For c:=48809 to 48810 do begin strBsave:=strBsave+chr(RAM[c])end;
//Byte2_[1]:=RAM[48809];Byte2_[2]:=RAM[48810];CODFL_RUN:=Word_;
//запись самого кода
For c:=CODFL_ORG to CODFL_END do begin strBsave:=strBsave+Chr(RAM[((c) mod 65536)]); end;
// имя файла куда сохранять
FileName:='';
For c:=48780 to 48785 do begin FileName:=FileName+chr(RAM[c])end;
FileName:=FileNameToHEX(FileName);
WriteS(FileName,strBsave);// запись динной строки в файл
strBsave:=''; // очистка длинной строки (для успокоения души
)
......
end;