Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Простой кросс-ассемблер для PDP11 (Windows/Linux, opensource)

  1. #1
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1250
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Простой кросс-ассемблер для PDP11 (Windows/Linux, opensource)

    https://github.com/vinxru/pdp11asm

    Представляю простой кросс-ассемблер для PDP11. Боян, но всё же. Простой, потому что поддержку INCLUDE добавить так руки и не доходят. По просьбам трудящихся я пытался реализовать совместимость со многими трансляторами, поэтому получилось немного странно:

    Команды программы

    ORG N
    .LINK N
    Устанавливает адрес, куда будет выводится код после этой команды. По умолчанию используется адрес 0.

    DB
    .BYTE
    Записать байты. Через запятую можно указывать числа, 'A' - код символа, "ABCD" - несколько кодов символов. Так же поддерживается конструкция N DUP(C) записывающая N раз байт C.

    DW
    .WORD
    Записать слова.

    .ASCII /text/
    Записать текст.

    .END
    Игнорируется

    .BLKB N
    Вывести N байт 0.

    .BLKW N
    Вывести N слов 0.

    name EQU value
    name = value
    Установить константу. Во всем файле name будет автоматически заменяться на value.

    name:
    Метка. Во всем файле name будет заменяться на адрес метки. Указывать : после метки не обязательно. Вместе с игнорированием пробелов и переносов строк, синтаксис ассемблера стал очень свободным. Хоть в одну строку пиши.

    N:
    Числовая метка. Область действия метки ограничивается символьными метками. Такая метка может быть использована только в командах условного перехода B? и SOB.

    MAKE_BK0010_ROM "filename", start, end
    Сформировать файл поддерживаемый эмулятором B2M. start, end - начальный и конечный адрес программы. Можно использовать метки.

    MAKE_BINARY_FILE "filename", start, end
    Выгрузить образ памяти в файл. start, end - начальный и конечный адрес. Можно использовать метки.

    INSERT_FILE "filename", offset, size
    Вставить двоичный файл. Можно вставить часть файла, задав размер и смещение в исходном файле.

    ALIGN N
    Выровнять адрес следующей команды на N-байт.

    CONVERT1251TOKOI8R
    Включить преобразование строк из кодировки 1251 в KOI8R.

    CONVERT1251TOKOI8R OFF
    Выключить преобразование строк из кодировки 1251 в KOI8R.

    DECIMALNUMBERS
    Далее все числа по умолчанию 10-ричные. В стандарте C.

    DECIMALNUMBERS OFF
    Далее все числа по умолчанию 8-ричные. В конце 10-чных чисел необходимо ставить точку.

    INSERT_BITMAP1 "name", width, height
    Вставить изображение преобразовав его в формат видеопамяти БК0010 2 цвета. Изображение должно быть в формате BMP 24 бита. width, height должны соответствовать размеру
    изображения в файле.

    INSERT_BITMAP2 "name", width, height
    Вставить изображение преобразовав его в формат видеопамяти БК0010 4 цвета. Изображение должно быть в формате BMP 24 бита. width, height должны соответствовать размеру изображения в файле.

    INSERT_BITMAP1T "name", width, height
    Вставить изображение преобразовав его в NAND и OR маски 2 цвета. В качестве прозрачного цвета используется #FF00FF.

    INSERT_BITMAP2T "name", width, height
    Вставить изображение преобразовав его в NAND и OR маски 4 цвета. В качестве прозрачного цвета используется #FF00FF.

    ; text
    // text
    Комментарий

    .
    Адрес этой команды

    Команды процессора без аргументов

    HALT Останавливает ЦП
    WAIT Останавливает ЦП до прерывания
    BPT Вызов прерывания
    IOT Вызов прерывания
    EMT 0..255 Вызов прерывания
    TRAP 0..255 Вызов прерывания
    MARK 0..63 Вызов прерывания
    RESET Перезагрузка процессора
    RTI Выход из прерывания (Загружает PC, PS из стека)
    RTT Выход из прерывания пошаговой отладки.
    NOP Ничего не делает
    CLC Сбрасывает флаг C
    CLV Сбрасывает флаг V
    CLZ Сбрасывает флаг Z
    CLN Сбрасывает флаг N
    СCC Сбрасывает все флаги
    SEC Устанавливает флаг C
    SEV Устанавливает флаг V
    SEZ Устанавливает флаг Z
    SEN Устанавливает флаг N
    SCC Устанавливает все флаги
    RET Синоним RTS PC

    Команды процессора с одним аргументом

    (B) описании значит, что существует две версии команды CLRB - обрабатывающей байты и CLR - обрабатывающей слова.

    JMP r Переход по адресу
    SWAB r Поменять старший и младший байты местами
    CLR(B) r Записать 0
    COM(B) r Инверсия (заменть все биты на противоположные)
    INC(B) r Увеличить на единицу
    DEC(B) r Уменьшить на единицу
    NEG(B) r Изменить знак
    ADC(B) r Увеличить на единицу, если C=1
    SBC(B) r Уменьшить на единицу, если С=1
    TST(B) r Сравнить с нулем
    ROR(B) r Циклический сдвиг вправо через флаг C
    ROL(B) r Циклический сдвиг влево через флаг C
    ASR(B) r Cдвиг вправо, старший бит дублируется
    ASL(B) r Cдвиг вправо, младший бит равен 0
    SXT r Расширение знака. Если N=0 записывает 0, иначе -1
    MTPS r Установка регистра флагов
    MFPS r Чтение регистра флагов
    CALL r Синоним JSR PC,

    Аргументы команды

    R0, R1, R2, R3, R4, R5, SP, PC Регистр. Все регистры 16 битные. 8 битные команды будут работать с младшими их половинами.
    (REG) или @REG Значение по адресу
    @(REG) Значение по адресу по адресу.
    -(REG) Значение по адресу. Уменьшить регистр до выполнения команды на 1 для байта. И на 2 для слова.
    @-(REG) Значение по адресу по адресу. Уменьшить регистр до выполнения команды.
    (REG)+ Значение по адресу. Увеличить регистр после выполнения команды на 1 для байта. И на 2 для слова.
    @(REG)+ Значение по адресу по адресу. Увеличить регистр после выполнения команды.
    IMM(REG) Значение по адресу, который рассчитывается как сумма регистра и числа.
    @IMM(REG) Значение по адресу по адресу, который рассчитывается как сумма регистра и числа.
    #A Число или адрес переменной.
    @#A Значение по адресу или переменная. Абсолютная адресация.
    A Значение по адресу или переменная. Адрес относительно PC.
    @A Значение по адресу по адресу. Первый адрес относительно PC.

    Команды процессора с двумя аргументами

    MOV(B) a, b Скопировать
    CMP(B) a, b Сравнить A и B
    BIS(B) a, b Логическое ИЛИ
    BIС(B) a, b Логическое И-НЕ (B = B & ~A)
    BIT(B) a, b Логическое И без сохранения результата
    ADD a, b Сложение
    SUB a, b Вычитание

    Команды условного перехода

    Могут переходить только в пределах -256..+254 байта, относительно адреса следующей команды. Числа указанные в аргументе команды интерпретируются как числовые метки.

    BR imm Всегда
    BNE imm Не равно (Z=0)
    BEQ imm Равно (Z=1)
    BGE imm Больше равно для знаковых типов (N^V=0)
    BLT imm Меньше для знаковых типов (N^V=1)
    BGT imm Больше для знаковых типов (Z|(N^V)=0)
    BLE imm Меньше равно для знаковых типов (Z|(N^V)=1)
    BPL imm Результат положительный (N=0)
    BMI imm Результат отрицательный (N=1)
    BHI imm Больше (C|Z=0)
    BVC imm Нет знакового переполнения (V=0)
    BVS imm Знаковое переполнение (V=1)
    BHIS imm / BCC imm Больше или равно / нет переполнения (C=0)
    BLO imm / BCS imm Меньше / переполнение (C=1)

    Необычные команды процессора

    JSR reg, a Вызвать подпрограмму (REG - только регистр, A - любой аргумент)
    RTS reg Выход из подпрограммы (REG - только регистр)
    XOR reg, a Исключающее ИЛИ (REG - только регистр, A - любой аргумент)
    SOB reg, imm Цикл (REG - только регистр, IMM - адрес). Числа указанные в аргументе IMM команды интерпретируются как числовые метки.

    Особенности

    - Некоторая совместимость с транслятором MACRO11. Но макросов нет.

    - Примитивная арифметика. Например текст 2+5-1 будет преобразован в число 6. Соответственно Label1 + 6 это адрес на 6 больше адреса метки Label1.

    - Со скобками надо быть осторожнее, скобки вокруг аргумента так же обозначают режим адресации: (1+2) - это значение по адресу 3, (1+2)*1 - это значение 3.

    - Числовые метки. Например "10:". Их область видимости ограничена символьными метками. И их можно использовать только с командами условного перехода: B? и SOB. Любое положительное число в аргументе этих команд интерпретируется как метка.

    - При таком подходе любимая PDP-шниками команда "SOB R1, .-2" не работает, так как 2 интерпретируется как метка. Но благодаря исключению с отрицательными числами можно написать "SOB R1, .+-2". -2 в тут считается числом на уровне парсера. Похоже на костыль, но я не знаю как сделать красивее. (Знал, но проект давно остановлен и я опять забыл)

    - По умолчанию числа 8-ричные. Что бы указать 10-чное число, необходимо в конец числа добавить точку. Например "16384.".

    - C помощью команды DECIMALNUMBERS можно включить по умолчанию десятичные числа. Восьмиричные числа тогда начитаются с нуля, например 017666. Или можно добавить постфикс 17555o. Обратно включить по умолчанию 8-ричные числа можно командой DECIMALNUMBERS OFF.

    - В одной строке может быть несколько команд. Перенос строки теперь не обязателен.

    - Добавлены синонимы: RET = RTS PC, CALL = JSR PC.

    - В примерах к компилятору игра Сапер.

    - Команда .i8080 включает систему команд процессора Intel 8080 и можно писать программы для него. Это было сделано для написания прошивки для SMP компьютера на 8080 и ВМ1.

    - Компилятор осилил исходники CP/M споткнувшись лишь на крайне странной строке "CCPSTACK:EQU $". Можно быть написать "CCPSTACK:" или "CCPSTACK EQU $", что идентично. Но не вместе же. Эту строку я поправил руками.

  2. Эти 10 пользователя(ей) поблагодарили vinxru за это полезное сообщение:
    A_AVL (14.02.2017), bigral (12.05.2016), DJs3000 (11.05.2016), Ewgeny7 (09.05.2016), perestoronin (08.05.2016), SuperMax (09.05.2016), svofski (08.05.2016), Terra (09.05.2016), Titus (08.05.2016), Ynicky (09.05.2016)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Activist
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    185
    Благодарностей: 47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А чем не угодил кросс-макро11?

  5. #3
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1250
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    уже не помню. Но когда я искал ассемблер и всех спрашивал, то ничего работоспособного под винду не нашел.

  6. #4
    Veteran Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    1,574
    Благодарностей: 484
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    gnu binutils
    Правда, готовых под винду, конечно, нет. Но под mingw должно легко собраться.
    Больше игр нет

  7. #5
    Master
    Регистрация
    16.08.2005
    Адрес
    Estonia,Tallinn
    Сообщений
    691
    Благодарностей: 408
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    если нет include то можно просто в связке с JСP юзать который директивы в комментариях юзает

  8. #6
    Junior
    Регистрация
    13.01.2010
    Адрес
    Подольск
    Сообщений
    21
    Благодарностей: 6
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    у меня в коде выдаёт синтаксическую ошибку на bvs, поборол так.

    dec R1
    beq loc_1160
    .word 102404 ; bvs loc_1150 //выдаёт ошибку ***
    ADD #167777, R1
    mov R1, -(R4) ;44
    br loc_1170 ;46

    loc_1150: dec R0

    loc_1152: movb (R0), -(R4)
    movb -(R0), -(R4)
    br loc_1120

    loc_1160: movb -(R0), R2


    INCLUDE тоже желательно, хотя при таком объёме текста и исполняемой программы, пока и не обязательно.

  9. #7
    Super Moderator Аватар для Ewgeny7
    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    9,451
    Благодарностей: 3796
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я в этих делах полный дятел, но где находится pdp11asm.exe?
    Пожелание "скомпилируй" примерно равно "пошел ты ...", ибо даже не знаю в чем это делается.
    Крайне желательно, чтобы win7x64, а то мало ли...
    Заранее спасибо
    Scorpion ZS 1024 turbo+/ZXMC 2.6/SD-HDD/FDD/AT-Keyb/Mouse/SMUC 2.0/ProfROMse/VGA 3.0/NeoGS
    ZX-Evolution 4096 rev.B

    Сайт с документацией к "Scorpion ZS 256"

  10. #8
    Guru Аватар для hobot
    Регистрация
    29.08.2011
    Адрес
    Зеленоград
    Сообщений
    4,586
    Благодарностей: 1024
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  11. Этот пользователь поблагодарил hobot за это полезное сообщение:
    Ewgeny7 (09.05.2016)

  12. #9
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1250
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Terra Посмотреть сообщение
    у меня в коде выдаёт синтаксическую ошибку на bvs, поборол так.
    Хм. BVS я почему то не добавил. Теперь добавил.

    Там еще один недочет со скобками был, поправил.

    - - - Добавлено - - -

    Цитата Сообщение от Ewgeny7 Посмотреть сообщение
    Я в этих делах полный дятел, но где находится pdp11asm.exe?
    Пожелание "скомпилируй" примерно равно "пошел ты ...", ибо даже не знаю в чем это делается.
    Крайне желательно, чтобы win7x64, а то мало ли...
    Заранее спасибо
    Скомпилил. В папке Release находится.

    - - - Добавлено - - -

    Да, кстати. Формат LST файла совместим с отладчиком эмулятора b2m.

  13. Этот пользователь поблагодарил vinxru за это полезное сообщение:
    Ewgeny7 (11.05.2016)

  14. #10
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,178
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Да, кстати. Формат LST файла совместим с отладчиком эмулятора b2m.
    Просто замечательно!

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Простой PDP11 CPU модуль на Н1806ВМ2
    от bigral в разделе ДВК, УКНЦ
    Ответов: 108
    Последнее: 05.12.2017, 11:41
  2. SjASMPlus Z80 кросс ассемблер
    от Aprisobal в разделе Программирование
    Ответов: 1445
    Последнее: 31.10.2017, 10:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •