vak: (Default)
[personal profile] vak posting in [community profile] besm6
Утилита besm6-objdump теперь умеет преобразовывать бинарный файл от линкера в формат МЭСМ-6 oct, для загрузки в симулятор RTL. К примеру, компилируем файл hello.pas:
$ besm6-pascompl hello.pas hello.obj
$ besm6-ld -D1 hello.obj -lpas -o hello.out
$ besm6-objdump -O hello.out > hello.oct
Полученный файл hello.oct можно посмотреть здесь: https://gist.github.com/sergev/94d630f6a12032209ca8e5cb5d72757b

Сам я ещё не пробовал его выполнять - чёрт знает, всякие баги могут быть.

Date: 2019-06-02 03:48 pm (UTC)
x86128: (Default)
From: [personal profile] x86128
Попробовал исполнить вот это:
program test(output);
  var src, dst:@integer;
  begin
      src := ptr(77755B);
      dst := ptr(77756B);
      repeat
          dst@ := src@
      until false;
  end.


Код на Паскале читает SW-итчи и пишет в LED'ы.
Машинный код циклится на симуляторе, при этом нет обращений к адресам 77755 и 77756.


Date: 2019-06-03 02:41 pm (UTC)
x86128: (Default)
From: [personal profile] x86128
Тот код на новом компиляторе и линкере работает в симуляторе.

Но вот этот - нет:
program test();
var
    src, dst:       @integer;
    u0ctrl, u0data: @integer;
begin
    src    := ptr(77755B);
    dst    := ptr(77756B);
    u0ctrl := ptr(77747B);
    u0data := ptr(77740B);

    u0ctrl@ := 33B;
    
    repeat
        dst@ := src@
    until false;
end.

Циклится. Так и не доходит до бесконечного цикла. Делает много записей в нулевую ячейку.

Компилятору не нравится символ подчеркивания.

Есть ли в нем поддержка побитового AND, OR и XOR? Использовать операторы & и and тоже не получилось
program test();
const
    U0CTRL = 77747B;
    U0DATA = 77740B;
var
    src, dst, tmp: @integer;

procedure inituart(baudrate: integer);
var
    reg: @integer;
    tmp: integer;
begin
    reg  := ptr(U0CTRL);
    tmp  := 50000000 div baudrate;
    (* tmp  := tmp and 777B;  doesn't work *)
    reg@ := tmp;
end;
begin
    src := ptr(77755B);
    dst := ptr(77756B);
    inituart(115200);
    repeat
        dst@ := src@
    until false;
end.


Этот код делает записи в 30000-е ячейки. Циклится и так же до "полезного" цикла не доходит.

Date: 2019-06-04 02:25 am (UTC)
x86128: (Default)
From: [personal profile] x86128
Действительно, всё утилиты пересобирал через make all, а туда библиотека не входит.
Сегодня попробую еще раз.

Date: 2019-06-04 07:49 am (UTC)
x86128: (Default)
From: [personal profile] x86128
Еще раз внимательно посмотрел трассировку эту и свою - там есть обращения к 04000-м адресам. Это специально так? Или какой-то настройкой задается?

Date: 2019-06-03 02:43 pm (UTC)
x86128: (Default)
From: [personal profile] x86128

Код после компилятора получается довольно компактный. Может быть даже получится написать бутлоадер целиком на Паскале.

Да компактный. Уверен, что обойдемся только Паскалем.

Date: 2019-06-03 02:48 pm (UTC)
x86128: (Default)
From: [personal profile] x86128
Еще такой вопрос.
А сейчас уже можно как-то слинковать объектный файл на паскале с объектным файлом БЕМШа?

Date: 2019-06-04 11:03 am (UTC)
x86128: (Default)
From: [personal profile] x86128
Спасибо за пример

Profile

Сообщество любителей БЭСМ-6

January 2026

S M T W T F S
    123
45678910
11121314151617
18192021222324
2526272829 3031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 10th, 2026 09:00 pm
Powered by Dreamwidth Studios