nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 23 Feb 2024 22:50



Reply to topic  [ 126 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9  Next
Кросс-ассемблер для PDP11/8080 (Windows/Linux, open-source) 
Author Message
Fanat

Joined: 14 Oct 2023 06:59
Posts: 52
Reply with quote
чем дело кончилось?
А это рабочий ассемблер?
https://shop-pdp.net/ashtml/asxget.php


03 Dec 2023 10:56
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
shiny wrote:
чем дело кончилось?

последний косяк так и не исправил, а в остальном - всё работает
скачать можно на первой странице этого топика:
http://www.nedopc.org/forum/viewtopic.php?p=132945#p132945

_________________
:dj: https://mastodon.social/@Shaos


03 Dec 2023 13:19
Profile WWW
Online
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 105
Location: 93.80.157.217
Reply with quote
глянул мельком код и обнаружил, что активно используется вот такая конструкция с оператором new:
Code:
outOfMemory(new чего_то_там);

где outOfMemory -- это:
Code:
static inline T* outOfMemory(T* p)
{
    if(p) return p;
    throw std::runtime_error("Out of memory");
}


только меня одного смущает вот это вот всё?

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


09 Feb 2024 04:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Главное работает :)

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

Code:
.i8080
.include "filename.asm"
make_radio86rk_rom "test.rkr"

а также вставка bin-файла ( я это только по исходнику нашёл : )
Code:
insert_file "filename.bin"


P.S. Ха - а вставка файла ведь есть в документации! :lol:


Attachments:
Screenshot from 2024-02-09 23-48-39.png
Screenshot from 2024-02-09 23-48-39.png [ 14.57 KiB | Viewed 862 times ]

_________________
:dj: https://mastodon.social/@Shaos
09 Feb 2024 07:58
Profile WWW
Online
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 105
Location: 93.80.157.217
Reply with quote
работать-то работает, но код абсолютно бесполезный.
мало того, что читабельность страдает, так исключение в outOfMemory никогда не возникнет.
по стандарту, если не переопределять функцию new_handler(), оператор new, никогда не возвращает ноль.

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


09 Feb 2024 08:47
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Да? Это с какого года так?
Вроде как раз выкидывание исключения убрали поэтому человек сам его добавил…

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

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

P.P.S. Заготовки под макросы тоже вроде есть в parser.cpp, но там много закомменчено...

_________________
:dj: https://mastodon.social/@Shaos


09 Feb 2024 15:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Shaos wrote:
Lavr wrote:
Да, судя по исходнику, коды для BVS и BVC перепутаны:

Image

Это в файлах pdp11.cpp и c_asm_pdp11.h...

понял - исправлю

Как говорится обещанного 3 года ждут - наконец-то исправил этот PDP11-косяк в сырцах на гитлабе :lol:

https://gitlab.com/shaos/pdp11asm85

Надо думаю ещё & добавить, чтобы можно было младший байт метки использовать...

_________________
:dj: https://mastodon.social/@Shaos


09 Feb 2024 21:58
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Добавил % и & - теперь можно младший байт метки брать хоть так:
Code:
Label%256
хоть так:
Code:
Label&255
:D

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

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

P.P.S. По поводу лицензии этого исходного кода: http://www.nedopc.org/forum/viewtopic.php?p=143028#p143028

_________________
:dj: https://mastodon.social/@Shaos


10 Feb 2024 00:09
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Перенёс тему в подфорум Software, раз уж тут и про PDP-11, и про 8080/8085...

_________________
:dj: https://mastodon.social/@Shaos


10 Feb 2024 00:25
Profile WWW
Online
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 105
Location: 93.80.157.217
Reply with quote
вот что на сайте майкрософта нашёл

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


проверил код:
Code:
#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 никогда не будет вызвана.

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


Last edited by vital72 on 10 Feb 2024 01:15, edited 1 time in total.



10 Feb 2024 01:07
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
vital72 wrote:
вот что на сайте майкрософта нашёл

Quote:
Если для запроса на выделение недостаточно памяти, operator new создается std::bad_alloc исключение. Кроме того, он возвращается nullptr, если вы использовали форму new(std::nothrow) размещения или если вы связали в неисключаемой поддержке operator new
Сайт майкрософт всю старую инфу потёр :lol:
Когда этот код писался (2015-2017) в ходу были совсем другие компиляторы ;)
Я когда в 2018 готовил виндовую версию сего чюда вообще на XP ориентировался (правда с cygwin-ом 2010 года):
http://www.nedopc.org/forum/viewtopic.php?p=142305#p142305

_________________
:dj: https://mastodon.social/@Shaos


10 Feb 2024 01:24
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Shaos wrote:
P.S. Я гляжу по коду, что этот самый pdp11asm[85] умеет #define / #ifdef / #else / #endif :o
Только это в сишной части, которая фиг знает как включается...
Кароче :lol:
т.к. автор вот тут писал:
alemorf wrote:
Если ассемблер встречает символ {, то дальше ведет себя как компилятор Си. Писал всего 5 часов, поэтому о серьзености компилятора СИ говорить рано.
я попробовал и оно заработало :mrgreen:
Code:
{
#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

_________________
:dj: https://mastodon.social/@Shaos


10 Feb 2024 17:57
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
Приаттачил пересобранный в WinXP EXE-шник вместе с CYGWIN1.DLL на первой странице топика:

http://www.nedopc.org/forum/viewtopic.php?p=132945#p132945

Какие ещё предложения по улучшению будут? Может сделать ключик командной строки, который будет включать i8080 или i8085?

_________________
:dj: https://mastodon.social/@Shaos


10 Feb 2024 23:24
Profile WWW
Fanat

Joined: 14 Oct 2023 06:59
Posts: 52
Reply with quote
cygwin это 5. Может, удобнее скомпилировать на венде?


11 Feb 2024 09:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22182
Location: Silicon Valley
Reply with quote
shiny wrote:
cygwin это 5. Может, удобнее скомпилировать на венде?
Ну я на "венде" компилировал :)
Windows XP SP3 называется ;)
У меня стоит в углу машынёшка, которую я включаю раз в год по особым случаям :lol:

_________________
:dj: https://mastodon.social/@Shaos


11 Feb 2024 09:55
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 126 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9  Next

Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.