Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-source)
Moderator: Shaos
-
- Maniac
- Posts: 324
- Joined: 14 Oct 2023 06:59
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
последний косяк так и не исправил, а в остальном - всё работаетshiny wrote:чем дело кончилось?
скачать можно на первой странице этого топика:
http://www.nedopc.org/forum/viewtopic.php?p=132945#p132945
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
глянул мельком код и обнаружил, что активно используется вот такая конструкция с оператором new:
где outOfMemory -- это:
только меня одного смущает вот это вот всё?
Code: Select all
outOfMemory(new чего_то_там);
Code: Select all
static inline T* outOfMemory(T* p)
{
if(p) return p;
throw std::runtime_error("Out of memory");
}
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Главное работает 
P.S. Кстати вот пример сборки кода под РК чтобы получились .rkr и .lst (это неочевидно и никак не отражено в документации):
а также вставка bin-файла ( я это только по исходнику нашёл : )
P.S. Ха - а вставка файла ведь есть в документации! 

P.S. Кстати вот пример сборки кода под РК чтобы получились .rkr и .lst (это неочевидно и никак не отражено в документации):
Code: Select all
.i8080
.include "filename.asm"
make_radio86rk_rom "test.rkr"
Code: Select all
insert_file "filename.bin"

You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
работать-то работает, но код абсолютно бесполезный.
мало того, что читабельность страдает, так исключение в outOfMemory никогда не возникнет.
по стандарту, если не переопределять функцию new_handler(), оператор new, никогда не возвращает ноль.
мало того, что читабельность страдает, так исключение в outOfMemory никогда не возникнет.
по стандарту, если не переопределять функцию new_handler(), оператор new, никогда не возвращает ноль.
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Да? Это с какого года так?
Вроде как раз выкидывание исключения убрали поэтому человек сам его добавил…
… или наоборот этот код для старых компиляторов написан, которые не выбрасывают исключение при нехватке памяти, а возвращают нулл
(вроде вижуалстудия себя так вела вплоть до версии 2003, хотя в тот момент это уже было частью стандарта C++)
P.S. Я гляжу по коду, что этот самый pdp11asm[85] умеет #define / #ifdef / #else / #endif
Только это в сишной части, которая фиг знает как включается...
P.P.S. Заготовки под макросы тоже вроде есть в parser.cpp, но там много закомменчено...
Вроде как раз выкидывание исключения убрали поэтому человек сам его добавил…
… или наоборот этот код для старых компиляторов написан, которые не выбрасывают исключение при нехватке памяти, а возвращают нулл
(вроде вижуалстудия себя так вела вплоть до версии 2003, хотя в тот момент это уже было частью стандарта C++)
P.S. Я гляжу по коду, что этот самый pdp11asm[85] умеет #define / #ifdef / #else / #endif

Только это в сишной части, которая фиг знает как включается...
P.P.S. Заготовки под макросы тоже вроде есть в parser.cpp, но там много закомменчено...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Как говорится обещанного 3 года ждут - наконец-то исправил этот PDP11-косяк в сырцах на гитлабеShaos wrote:понял - исправлюLavr wrote:Да, судя по исходнику, коды для BVS и BVC перепутаны:
Это в файлах pdp11.cpp и c_asm_pdp11.h...

https://gitlab.com/shaos/pdp11asm85
Надо думаю ещё & добавить, чтобы можно было младший байт метки использовать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Добавил % и & - теперь можно младший байт метки брать хоть так:
хоть так:
https://gitlab.com/shaos/pdp11asm85/-/commit/9c90cfd15b61ae626f6f570441b057a98287677b
P.S. Обновлённый архив с исходниками приаттачил на первой странице этого топика
P.P.S. По поводу лицензии этого исходного кода: viewtopic.php?p=143028#p143028
Code: Select all
Label%256
Code: Select all
Label&255

https://gitlab.com/shaos/pdp11asm85/-/commit/9c90cfd15b61ae626f6f570441b057a98287677b
P.S. Обновлённый архив с исходниками приаттачил на первой странице этого топика

P.P.S. По поводу лицензии этого исходного кода: viewtopic.php?p=143028#p143028
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Перенёс тему в подфорум Software, раз уж тут и про PDP-11, и про 8080/8085...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
вот что на сайте майкрософта нашёл
строка 13 никогда не будет вызвана.
проверил код:Если для запроса на выделение недостаточно памяти, 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';
}
}
Last edited by vital72 on 10 Feb 2024 01:15, edited 1 time in total.
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Сайт майкрософт всю старую инфу потёрvital72 wrote:вот что на сайте майкрософта нашёл
Если для запроса на выделение недостаточно памяти, operator new создается std::bad_alloc исключение. Кроме того, он возвращается nullptr, если вы использовали форму new(std::nothrow) размещения или если вы связали в неисключаемой поддержке operator new

Когда этот код писался (2015-2017) в ходу были совсем другие компиляторы

Я когда в 2018 готовил виндовую версию сего чюда вообще на XP ориентировался (правда с cygwin-ом 2010 года):
viewtopic.php?p=142305#p142305
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
КарочеShaos wrote:P.S. Я гляжу по коду, что этот самый pdp11asm[85] умеет #define / #ifdef / #else / #endif![]()
Только это в сишной части, которая фиг знает как включается...

т.к. автор вот тут писал:
я попробовал и оно заработалоalemorf wrote:Если ассемблер встречает символ {, то дальше ведет себя как компилятор Си. Писал всего 5 часов, поэтому о серьзености компилятора СИ говорить рано.

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
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Приаттачил пересобранный в WinXP EXE-шник вместе с CYGWIN1.DLL на первой странице топика:
viewtopic.php?p=132945#p132945
Какие ещё предложения по улучшению будут? Может сделать ключик командной строки, который будет включать i8080 или i8085?
viewtopic.php?p=132945#p132945
Какие ещё предложения по улучшению будут? Может сделать ключик командной строки, который будет включать i8080 или i8085?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Maniac
- Posts: 324
- Joined: 14 Oct 2023 06:59
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
cygwin это 5. Может, удобнее скомпилировать на венде?
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-sour
Ну я на "венде" компилировалshiny wrote:cygwin это 5. Может, удобнее скомпилировать на венде?

Windows XP SP3 называется

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

Я тут за главного - если что шлите мыло на me собака shaos точка net