Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-source)

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by shiny »

чем дело кончилось?
А это рабочий ассемблер?
https://shop-pdp.net/ashtml/asxget.php
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

shiny wrote:чем дело кончилось?
последний косяк так и не исправил, а в остальном - всё работает
скачать можно на первой странице этого топика:
http://www.nedopc.org/forum/viewtopic.php?p=132945#p132945
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by vital72 »

глянул мельком код и обнаружил, что активно используется вот такая конструкция с оператором new:

Code: Select all

outOfMemory(new чего_то_там);
где outOfMemory -- это:

Code: Select all

static inline T* outOfMemory(T* p)
{
    if(p) return p;
    throw std::runtime_error("Out of memory");
}
только меня одного смущает вот это вот всё?
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Главное работает :)

P.S. Кстати вот пример сборки кода под РК чтобы получились .rkr и .lst (это неочевидно и никак не отражено в документации):

Code: Select all

.i8080
.include "filename.asm"
make_radio86rk_rom "test.rkr"
а также вставка bin-файла ( я это только по исходнику нашёл : )

Code: Select all

insert_file "filename.bin"
P.S. Ха - а вставка файла ведь есть в документации! :lol:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by vital72 »

работать-то работает, но код абсолютно бесполезный.
мало того, что читабельность страдает, так исключение в outOfMemory никогда не возникнет.
по стандарту, если не переопределять функцию new_handler(), оператор new, никогда не возвращает ноль.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Да? Это с какого года так?
Вроде как раз выкидывание исключения убрали поэтому человек сам его добавил…

… или наоборот этот код для старых компиляторов написан, которые не выбрасывают исключение при нехватке памяти, а возвращают нулл
(вроде вижуалстудия себя так вела вплоть до версии 2003, хотя в тот момент это уже было частью стандарта C++)

P.S. Я гляжу по коду, что этот самый pdp11asm[85] умеет #define / #ifdef / #else / #endif :o
Только это в сишной части, которая фиг знает как включается...

P.P.S. Заготовки под макросы тоже вроде есть в parser.cpp, но там много закомменчено...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Shaos wrote:
Lavr wrote:Да, судя по исходнику, коды для BVS и BVC перепутаны:

Image

Это в файлах pdp11.cpp и c_asm_pdp11.h...
понял - исправлю
Как говорится обещанного 3 года ждут - наконец-то исправил этот PDP11-косяк в сырцах на гитлабе :lol:

https://gitlab.com/shaos/pdp11asm85

Надо думаю ещё & добавить, чтобы можно было младший байт метки использовать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Добавил % и & - теперь можно младший байт метки брать хоть так:

Code: Select all

Label%256
хоть так:

Code: Select all

Label&255
:D

https://gitlab.com/shaos/pdp11asm85/-/commit/9c90cfd15b61ae626f6f570441b057a98287677b

P.S. Обновлённый архив с исходниками приаттачил на первой странице этого топика :roll:

P.P.S. По поводу лицензии этого исходного кода: viewtopic.php?p=143028#p143028
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Перенёс тему в подфорум Software, раз уж тут и про PDP-11, и про 8080/8085...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by vital72 »

вот что на сайте майкрософта нашёл
Если для запроса на выделение недостаточно памяти, operator new создается std::bad_alloc исключение. Кроме того, он возвращается nullptr, если вы использовали форму new(std::nothrow) размещения или если вы связали в неисключаемой поддержке operator new
проверил код:

Code: Select all

#include <iostream>
#include <new>
#include <stdio.h>

int main()
{
    try
    {
        while (true)
        {
            int* p = new int[100000000ul];
            if (!p)
                    printf ("p=0\n"); // [13]
        }
    }
    catch (const std::bad_alloc& e)
    {
        std::cout << "Allocation failed: " << e.what() << '\n';
    }
}
строка 13 никогда не будет вызвана.
Last edited by vital72 on 10 Feb 2024 01:15, edited 1 time in total.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

vital72 wrote:вот что на сайте майкрософта нашёл
Если для запроса на выделение недостаточно памяти, operator new создается std::bad_alloc исключение. Кроме того, он возвращается nullptr, если вы использовали форму new(std::nothrow) размещения или если вы связали в неисключаемой поддержке operator new
Сайт майкрософт всю старую инфу потёр :lol:
Когда этот код писался (2015-2017) в ходу были совсем другие компиляторы ;)
Я когда в 2018 готовил виндовую версию сего чюда вообще на XP ориентировался (правда с cygwin-ом 2010 года):
viewtopic.php?p=142305#p142305
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Shaos wrote:P.S. Я гляжу по коду, что этот самый pdp11asm[85] умеет #define / #ifdef / #else / #endif :o
Только это в сишной части, которая фиг знает как включается...
Кароче :lol:
т.к. автор вот тут писал:
alemorf wrote:Если ассемблер встречает символ {, то дальше ведет себя как компилятор Си. Писал всего 5 часов, поэтому о серьзености компилятора СИ говорить рано.
я попробовал и оно заработало :mrgreen:

Code: Select all

{
#ifdef BOO
}
	db	disasm_reg8_8085%256, 0xFF
{
#else
}
	db	disasm_reg8_8085/256, 0x20
{
#endif
}
именно так - фигурные скобки и директивы препроцессора в разных строках!
и главное, чтобы { не было совсем первой строчкой в файле, а то оно уходит в c8080 с концами, что нам ненадо :)
теперь наверное нужно передачу макро-определений из командной строки организовать ;)
типа -DBOO и т.д. и будет полноценная условная компиляция!

P.S. Организовал :)
Из командной строки теперь можно задавать макросы, причём как без значения, так и со значением:
pdp11asm85 -DMACRO1 -DMACRO2=1 filename.asm -DBOO
(без значения можно использовать в #ifdef, а со значением - где угодно (даже за пределами {}), правда эти значения должны быть в пределах байта)

https://gitlab.com/shaos/pdp11asm85/-/commit/639d411870cd3b8b405e9dd588c6a4908bdf6f85
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

Приаттачил пересобранный в WinXP EXE-шник вместе с CYGWIN1.DLL на первой странице топика:

viewtopic.php?p=132945#p132945

Какие ещё предложения по улучшению будут? Может сделать ключик командной строки, который будет включать i8080 или i8085?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by shiny »

cygwin это 5. Может, удобнее скомпилировать на венде?
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour

Post by Shaos »

shiny wrote:cygwin это 5. Может, удобнее скомпилировать на венде?
Ну я на "венде" компилировал :)
Windows XP SP3 называется ;)
У меня стоит в углу машынёшка, которую я включаю раз в год по особым случаям :lol:
Я тут за главного - если что шлите мыло на me собака shaos точка net