User Tag List

Страница 91 из 91 ПерваяПервая ... 8788899091
Показано с 901 по 908 из 908

Тема: Мощная среда ZXDev для разработки НА ПЯТИ ЯЗЫКАХ для ZX готова к тестированию

  1. #901

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    2,728
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Я всё стесняюсь спросить с 2012 года, а какие 5 языков (еще и большими буквами)? Оберон - раз, Си - как промежуточный, с натяжкой, два. А еще три какие?
    Почему это "Си с натяжкой как промежуточный"? Ты можешь использовать его в связке с Оберонами как полновесный язык. Можешь в модуль на Обероне вставлять куски кода на Си, подключать хидеры и внешние сишные файлы, делать сишные тела для отдельных процедур и т.д. То же самое про асм.

    Было: Оберон, Оберон-2, Си, асм. На момент создания темы я думал, что в SDCC ещё и поддержка C++ есть (которым сам не пользовался). Потом выяснилось, что нету, не поддерживается. Был введён в заблуждение исполняемым файлом sdcpp.exe, который оказался просто внешним препроцессором.

    Сейчас: Оберон (1990), Оберон-2, Оберон-3 (мой собственный диалект, адаптированный для 8- и 16-битной разработки), Оберон-07/16 (последняя виртовская редакция Оберона), Компонентный Паскаль, Си, асм.
    Включены некоторые расширения из GPCP и Дубовых требований. Планируются, но пока не реализованы расширения Oberon-X.

    Да, за эти десять лет было сделано дофига хорошей работы, чтобы сделать XDev более удобной для ретро-разработки.

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    И, Олег, ты же можешь сделать кодогенерацию в какой-нибудь пи-код (java, например), чтоб из него потом на разные платформы раздавать. Почему не делаешь? Пи-код проще, чем ассемблер.
    Не предлагай мне свои пути, Андрей. Пи-код, не пи-код, асм, машкод - это твоя стезя. Юзать java для ZX хоть в каком-то смысле - такое себе. Ну вот тебе странного хочется, а мне давно уже нет. В чём вообще польза java? 32- и 64-битность. Все целые типы со знаком. Стековая машина, без регистров. Классы. Динамическая память. Ты в курсе, что java нельзя статически выделять хоть те же классы? Оно подходит для 8 бит как сова для натягивания на глобус.

    Если ты имел в виду "что-то типа java, но более скромное", это уже теплее. Но опять же, заморачиваться. Зачем? Кто оценит? Кому надо? Придут ещё и потопчутся по святому. Спасибо, но не надо. Может для себя я что-то такое когда-нибудь и запилю, но упаси господи пытаться угодить "сообществу".

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

  3. #902

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,874
    Спасибо Благодарностей отдано 
    523
    Спасибо Благодарностей получено 
    252
    Поблагодарили
    226 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разве возможно перенести С-Lang(LLVM) на 8 битки? Или нужно делать другую виртуальную машину специально для 8-битных систем? А на ней тогда и С, и С++ и все остальное.

  4. #903

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    2,728
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andrews Посмотреть сообщение
    Разве возможно перенести С-Lang(LLVM) на 8 битки?
    С-Lang(LLVM) не влезут Но если Вы имеете в виду "адаптировать для генерации кода для восьмибитных процев", то есть пример успешных бэк-эндов для Z80 и 6502 (неизвестной степени готовности и стабильности).

    Цитата Сообщение от andrews Посмотреть сообщение
    Или нужно делать другую виртуальную машину специально для 8-битных систем?
    Видимо, в ВМ нет особого смысла, т.к. это тормоза. А если подобную LLVM, заточенную чисто под оптимизацию, то сил сообщества не хватит сделать настолько сложную штуку. Тут хоть бы бэк-энды для готовой LLVM запилили. А то вот PDP-11 нет.

    Цитата Сообщение от andrews Посмотреть сообщение
    А на ней тогда и С, и С++ и все остальное.
    C и C++ не столь хорошо подходят для 8-битных процев. Надо смотреть в сторону C--, Cowgol и PL/M. Или сделать более сурово: чтобы по умолчанию размер арифметических операций был 8 бит, не разрешать рекурсию, ограничить разгул локальных переменных, и тогда можно уже смотреть в сторону Си, Модулы, Паскаля или Оберона. Но не знаю есть ли в этом высокий смысл.

    Я уже понял, что народу надо "шашечки". Им просто нравится идея генерации в машкод. При этом за бортом остаётся даже генерация в асм, т.е. подходы ZX Like Pascal, SDCC или даже Free Pascal.

    Если бы надо было "ехать", то ехали бы. XDev вполне хорошо и через Си работает.

  5. #904

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,874
    Спасибо Благодарностей отдано 
    523
    Спасибо Благодарностей получено 
    252
    Поблагодарили
    226 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что тогда остается? Портировать игры на каждую платформу индивидуально? Да, понятно, что стек 8 битки поддерживают намного хуже, чем всякие хитрые манипуляции через регистры. А что такое байткод при "приземлении" на конкретную платформу? Он разве не может это делать с учетом проца? Выход ассемблера в расчете на какой-то ассемблер или группу ассемблеров? Если на группу, то действительно наверное лучше сразу код исполняемый
    и оптимизированный генерить. А то юзверю придется разбираться в особенностях разных ассемблеров, и мучится с выбором ключа.
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Если бы надо было "ехать", то ехали бы
    ну если прежде не ехали, то не значит, что в будущем не поедут. Куда спешить? Возможно до конца "эры программистов" 20 лет, а возможно 200. XDev вполне можно использовать. Кому надо пусть оптимизирует выдаваемый С код. Кому не надо - пусть пишет хоть на Basic-е, хоть на asm-е, хоть на pl/m. Это смотря какие библиотеки есть. Самому все писать на asm-е (без использования биос-а или библиотек) очень непросто. Код надо структурировать и комментировать, иначе и сам спустя какое-то время не разберешься.
    Последний раз редактировалось andrews; 28.01.2024 в 19:25.

    Этот пользователь поблагодарил andrews за это полезное сообщение:

    Oleg N. Cher(29.01.2024)

  6. #905

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,514
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    715
    Поблагодарили
    597 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andrews Посмотреть сообщение
    Самому все писать на asm-е (без использования биос-а или библиотек) очень непросто.
    Смотря какие возможность заложены в ассемблер и смотря какая система команд.

    Цитата Сообщение от andrews Посмотреть сообщение
    Код надо структурировать и комментировать
    Да неужели? Проблема только в том, что существует большая группа программистов (не только на ретро-платформы), которым на это насрать - и им не поможет никакой вундерязык.

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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Если бы надо было "ехать", то ехали бы
    Кому надо ехать - они едут. На любом языке, который сочли подходящим. Что бы им не толдычили "адепты" "правильных" языков.
    Пример из C# (причём тут, по сути, даже не возможности языка, а возможности реализации его окружения)
    Код:
      [Serializable]
      [Macro(".CILHD")]
      public class CILHeader
      {
        [Map(".CLCOD: .BLKB 1")] public byte             Code;    // HeaderCode
        [Map(".CLLEN: .BLKB 1")] public byte             Length;  // HeaderLength
        [Map(".CHTIM: .BLKW 2")] public DOS11Time        Time;
        [Map(".CHDAT: .BLKW 1")] public DOS11Date        Date;
        [Map(".CHBSZ: .BLKW 1")] public UInt16           BlockSize;
        [Map(".CHIMC: .BLKW 1")] public UInt16           ImageCount;
        [Map(".CHHSZ: .BLKW 1")] public UInt16           HeaderSize;
        [Map(".CHFS0: .BLKW 1")] public UInt16           FileSize0;
        [Map(".CHFS1: .BLKW 1")] public UInt16           FileSize1;
        [Map(".CHFS2: .BLKW 1")] public UInt16           FileSize2;
        [Map(".CHFS3: .BLKW 1")] public UInt16           FileSize3;
                                 public SmartArray<byte> RAWData;
                                 public COMD[]           COMDs;
    
        static CILHeader()
          => Helpers.StaticFieldsValueUpdater<CILHeader>();
    
        public CILHeader(IArray<byte> data, int baseOffset = 0)
          => this.OneWayMapper(data, baseOffset);
      }
    
      [Serializable]
      [Macro(".COMD")]
      public class COMD
      {
        [Map(".CLCOD: .BLKB 1")]                    public byte             Code;                // COMDCode
        [Map(".CLLEN: .BLKB 1")]                    public byte             Length;              // COMDLength
        [Map(".CDLA:  .BLKW 1")]                    public UInt16           ProgramLoadAddress;  // Program load address
        [Map(".CDPSZ: .BLKW 1")]                    public UInt16           ProgramSize;         // Program size in bytes
        [Map(".CDXFR: .BLKW 1")]                    public UInt16           XFRAddress;          // Program transfer address
        [Map(".CDODT: .BLKW 1")]                    public UInt16           ODTXFRAddress;       // ODT(debugger) transfer address
        [Map(".CDRBN: .BLKW 1")]                    public UInt16           RelativeBlockNumber; // Relative block# within the file
        [Map(".CDPNM: .BLKW 2", PDP11Type.Radix50)] public string           Name;                // RAD50 program name
        [Map(".CDIDN: .BLKW 2", PDP11Type.Radix50)] public string           Ident;               // RAD50 .IDENT of the program 
        [Map(".CDTIM: .BLKW 2")]                    public DOS11Time        Time;                // Program creation time, in ticks
        [Map(".CDDAT: .BLKW 1")]                    public DOS11Date        Date;                // Program creation date
                                                    public SmartArray<byte> RAWData;
    
        static COMD()
          => Helpers.StaticFieldsValueUpdater<COMD>();
    
        public COMD(IArray<byte> data, int baseOffset = 0)
          => this.OneWayMapper(data, baseOffset);
      }
    На вход - массив (сырых) байт, на выходе - вполне себе объекты. Причём OneWayMapper-у фиолетово - что за объект (какого класса) надо создать - всё берётся из описания класса. Причём размеры конкретного поля могут быть не фиксированы - и браться из другого поля этого или родительского объекта.
    И в этом вариант мне не надо писать парсер сырых байт под ещё один описанный класс объекта - всё делается ОДНОЙ строчкой
    Код:
        private static void CILImageDescription(SmartArray<byte> sarr)
        {
          cilHeader = new CILHeader(sarr);
    И при таком подходе на цепляние к моему дизассемблеру ещё одного формата файла мне поднадобилось пол дня - на описание классов и на разборки с тем - как же это всё таки в байтах хранится - ибо документации - кот наплакал и некоторые вещи были определены опытным путём.

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

    А, да, для возможности создавать образы, в которых была бы одна из ФС операционок с PDP-11, понадобился мне двунаправленный маппинг. Ок, пример. Тут несколько замороченней описание класса, но я пока не разобрался, как в run-time создать прокси-класс-наследник, поэтому пока так. Может, как руки дойдут - переделаю.
    Код:
      [Serializable]
      [Macro(".DIEDF")] public class DirectoryEntry_S : BaseMappedClass                                // directory entry definition
      {
        [Map("E.STAT: .BLKW 1")]                    public F_ESTAT      Status
          { get => (F_ESTAT)this.GetValue(nameof(Status)); set => this.SetValue(nameof(Status), value); }        // entry status word
        [Map("E.NAME: .BLKW 3", PDP11Type.Radix50)] public string       FullName
          { get => (string)this.GetValue(nameof(FullName)); set => this.SetValue(nameof(FullName), value); }     // RAD50 file name and extension
        [Set(".=.-6")]
        [Map("E.FNAM: .BLKW 2", PDP11Type.Radix50)] public string       Name
          { get => (string)this.GetValue(nameof(Name)); set => this.SetValue(nameof(Name), value); }             // RAD50 file name
        [Map("E.FEXT: .BLKW 1", PDP11Type.Radix50)] public string       Extension
          { get => (string)this.GetValue(nameof(Extension)); set => this.SetValue(nameof(Extension), value); }   // RAD50 file extension
        [Map("E.LENG: .BLKW 1")]                    public RT11BlockNum FileSize
          { get => (RT11BlockNum)this.GetValue(nameof(FileSize)); set => this.SetValue(nameof(FileSize), value); }  // size of area described, in blocks
        [Map("E.TIME: .BLKW 1")]                    public TPDP11Word   Time
          { get => (TPDP11Word)this.GetValue(nameof(Time)); set => this.SetValue(nameof(Time), value); }         // time of file closing(seconds/3 since midnight) <fut>
        [Set(".=.-2")]
        [Map("E.USED: .BLKW 1")]                    public TPDP11Word   Used
        { get => (TPDP11Word)this.GetValue(nameof(Used)); set => this.SetValue(nameof(Used), value); }           // <res> if not TENT
        [Set(".=.-2")]
        [Map("E.CHAN: .BLKB 1")]                    public byte         Channel
          { get => (byte)this.GetValue(nameof(Channel)); set => this.SetValue(nameof(Channel), value); }         // channel number for tentative file
        [Map("E.JNUM: .BLKB 1")]                    public byte         JobNum
          { get => (byte)this.GetValue(nameof(JobNum)); set => this.SetValue(nameof(JobNum), value); }           // job number for tentative file
        [Map("E.DATE: .BLKW 1")]                    public RT11Date     Date
          { get => (RT11Date)this.GetValue(nameof(Date)); set => this.SetValue(nameof(Date), value); }           // creation date
        [Map("E.EXBT: .BLKB ?.DIHD/D.EXTR")]       public IArray<byte>  ExtraBytes
          { get => (IArray<byte>)this.GetValue(nameof(ExtraBytes)); set => this.SetValue(nameof(ExtraBytes), value); } // header extra bytes
        //[Map("E.ELEN:")] public static readonly TPDP11Word Length;  // basic entry len
    
        static DirectoryEntry_S()
          => Helpers.StaticFieldsValueUpdater<DirectoryEntry_S>();
    
        public DirectoryEntry_S(MappedToByteArray data, int baseOffset = 0)
          : base(data, baseOffset)
        {}
    
        public DirectoryEntry_S()
          => this.TwoWayMapper();
      }
    
    ...
          DirectoryEntry_S temp = new()
          {
              Status = F_ESTAT.E_EMPTY
            //, FullName = ""
            , Name = "TEST"
            , Extension = "TXT"
            , FileSize = 0
            , Time = 0
            , Used = 0
            , Channel = 0
            , JobNum = 0
            , Date = new(0)
          };
    В этом примере свойство ExtraBytes - массив переменной длины и его длина (если он вообще будет) берётся из другого поля родительского объекта. И при записе какого-либо поля объекта - моментальное изменение в байтовом массиве. Так что инициализация и наполнение ФС становится тривиальным делом.

  7. #906

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andrews Посмотреть сообщение
    А что такое байткод при "приземлении" на конкретную платформу? Он разве не может это делать с учетом проца? Выход ассемблера в расчете на какой-то ассемблер или группу ассемблеров? Если на группу, то действительно наверное лучше сразу код исполняемый
    и оптимизированный генерить. А то юзверю придется разбираться в особенностях разных ассемблеров, и мучится с выбором ключа.
    Может всё байт-код, о чем я Олегу и твержу. Я даже пробовал байт-код java в асм Z80 конвертить, нормально получается (на Дельфи писал намётки пост-процессора, с потоками java, как положено). И даже думал в ZX Like Pascal встроить. Только нужно времени много.

    Сейчас в ZX Like Pascal выдуманный мной пи-код, который внутри конвертится в асм. Описывал здесь

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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Если ты имел в виду "что-то типа java, но более скромное", это уже теплее. Но опять же, заморачиваться. Зачем? Кто оценит? Кому надо? Придут ещё и потопчутся по святому. Спасибо, но не надо. Может для себя я что-то такое когда-нибудь и запилю, но упаси господи пытаться угодить "сообществу".
    Да, оно. Так и делай для себя, с прицелом на облегчение написания своих программ/игр.
    Последний раз редактировалось Andrew771; 28.01.2024 в 22:20.

  8. #907

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    2,728
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Любая сцепка фронт-энда и бэк-энда подразумевает промежуточный язык. Хотя бы в том, что фронт будет вызывать процедуры бэка с параметрами для генерации кода. Запишите эти вызовы в столбик и будет язык. Назовите его как хотите. Можете назвать пи-код или как-то иначе.

    Впихивать стековую виртуальную машину в Z80, повторюсь, такое себе. Получится вполне тормознутая хрень с очень ограниченным применением. Даже не совсем понятно каким. Текстовые игры? Ну может быть.

    Да, Хунта, да. И на "правильных" языках тоже можно разные штуки делать.

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Так и делай для себя, с прицелом на облегчение написания своих программ/игр.
    Тебе надо - ты и делай? У нас как-то иначе было когда-то?
    Последний раз редактировалось Oleg N. Cher; 29.01.2024 в 07:32.

  9. #908

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    2,728
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    а чего ТЫ тут тогда делаешь?
    На форуме каждый человек волен написать в любую тему. Если я неправ, пусть одмины поправят. Это только ты почему-то решил, что там надо впахивать, и только доступным тебе способом. Чьё это горе?

    Цитата Сообщение от jerri Посмотреть сообщение
    а чего ты ТУТ тогда делаешь?
    См. выше.

    Цитата Сообщение от jerri Посмотреть сообщение
    предположу что на оберон или плм переложить для такого как ты профессионала буквально на изичах за неделю
    Я ж не ДЛ, расслабься. Я даже не понял чего ты от меня опять хочешь.

    Цитата Сообщение от jerri Посмотреть сообщение
    ты агришься на мои комментарии во всех ветках указывает на обратное.
    Потому что ты неадекватен. См. ниже.

    У меня накопились риторические вопросы к джерри. джерри, можешь не отвечать, они риторические.

    1. Почему жерри решил, что он может что-то от меня требовать? Если по всем канонам морали имеет право только лишь просить, и то вежливо.
    2. Почему он берёт меня на слабо как школьника?
    3. Почему я должен что-то ему доказывать?
    4. Почему любые идеи писать для ретро на чём-то, кроме Бейсика/ассемблера, вызывает приступы ярости у жерри и иже с ним?
    5. Почему каждый должен стать профи-игроделом, как жерри? Иначе фу.
    6. Почему жерри ничего не требует от других участников форума? В чём причина такого неравнодушия?
    7. Почему надо обязательно впахивать тем способом, который нравится жерри? Иначе жизнь прожита здря
    8. Зачем жерри туториалы и мастеркласс по тому, что он не будет использовать, а будет только фукать и фикать, потому что ему сам подход не нравится.
    9. жерри вообще нормальный? Может уже пора ему провериться у психиатора?

    Так, мысли вслух.

Страница 91 из 91 ПерваяПервая ... 8788899091

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

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

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

Похожие темы

  1. мощная игрушка
    от ZEman в разделе Игры
    Ответов: 128
    Последнее: 23.03.2024, 17:05
  2. Ответов: 5
    Последнее: 20.06.2011, 03:18
  3. Видеоконтроллер из пяти микросхем
    от zx-kit в разделе Изображение
    Ответов: 20
    Последнее: 31.03.2011, 14:48

Метки этой темы

Ваши права

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