User Tag List

Показано с 1 по 10 из 126

Тема: ASAM Compiler By Rob F. / Entire Group ...

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Wink

    Цитата Сообщение от Higgins Посмотреть сообщение
    UPDATE: Гм, впечатление такое, будто у меня .IF не работает вообще. Имеем код:
    Ммм ... Как бы более правильно объяснить ... Поскольку практически никто не пользовался ASAM'ом, я не особо расписывал макросы ...

    Смотри: "." и ".." Это описание макроса или цикла ...
    Всё, что идёт дальше это не особо но умный макрос, который не понимает IF. В данном случае ты попытался компилятору разъяснить что хочешь создать макрос. Когда я расписывал пример некого подобия бейсика, то я приводил пример макросов, которые потом превращается в код, причём код не оптимизированный.

    Как я понял ты хочешь получить компиляцию отдельных строк по условию. Я в компиляторе не ставил задачи реализовывать условия, потому что для этого я в компилятор встроил эмулятор ZX-SPECTRUM'а, без видео, конечно.

    Если тебя устраивает простой флаг, да нет, то можно сделать так:
    Код:
    FLAG   EQU 1
              .FLAG
               DB "TRUE"
              ..
              .1-FLAG
               DB "FALSE"
              ..
    Если тебе нужно более сложные операции, то их нужно описать, например:
    Код:
    ;====================
    ;Это макрос описывающий сравнение входящего переметра A с B
    ;====================
            .IF (<) THEN√
             ORG 0
             EQU $ZX.R.PC=16384
             LD A,@.0     ;Параметр макроса А
             CP @.1       ;Параметр макроса В
             RLA
             AND 1
             LD C,A        ;Запихиваем с ВС результат сравнения
             LD B,0
             EQU $ZX.R.Break=$+$ZX.R.PC
             MoveMemAZ $ZX.R.PC,$ZX.R.PC,0,$-$ZX.R.PC   ;Копируем из памяти компилятора в память эмулятора откомпилированный блок
             RunEmulZX                       ;Запускаем откомпилированный код
             ORG @.
             EQU IF_FLAG=$ZX.r.BC       ;Результат эмулятора ВС передаём во флаг
            ..
    
    ;========================
    ; Теперь сама программа которая использует макрос, который в совю очередь использует эмулятор
    ;========================
    IF_FLAG  EQU 0
    
            ORG #8000
    START
            IF (7<6) THEN
             .IF_FLAG
              DB "A < B"
             ..
             .1-IF_FLAG
              DB "A > B"
             ..
            SaveBIN "TEST.BIN",START,$-START
    То есть компилятор рассчитан на то, что программист сам себе создаст любые макросы, которые он считает удобными. Практика показывает, что мне хватает простого флага 0/1 ... Более сложные операции тянут за собой целые системы. Например я пишу текст для скролла и у меня есть шрифт. Зачем мне в памяти хранить графику для буквы, которая никогда не появится на экране ? Я пишу программу которая анализирует весь текст или тексты, и составляет таблицу. И пишу вторую программу которая по таблице сохраняет нужную графику каждой буквы. Далее для компилятора я использую команду SetTextXOR, в которой говорю, что далее всё что будет заключено в кавычки, нужно перекодировать. Например код буквы "A" станет каким-то кодом, который будет в таблице. И ву-а-ля, минимум памяти, и текст компактный.

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

    Сразу хочу предупредить ... RunEmulZX запускает эмулятор не взирая на то, все ли метки собрал компилятор ... Данный пример макроса был написан так, что бы входные параметры требовали только одного прохода. Если код внутри макроса сложный, то нужно использовать RunEmulZXne, то есть без ошибок до данного места. Но опять таки это не выгодно и наилучший способ предварительно, в отдельном файле создать все нужные макросы с внутренними кодами, записать их в отдельный файл. А уже при использовании макросов в программе грузить файл непосредственно в память эмулятора и запускать ... Вообщем я на этом написал кучу boot-loader'ов, скроллов, компрессоров и даже ОС для Speccy. Например в ОСи у меня создаются образы дисков для игры, в которую впихиваются тонны картинок, кода, музыки и лежат линейно, байт за байтом по образам. А в коде у меня это выглядит так:
    Код:
            LoadInData 'GFX\entire.scr',       18432
            LD HL,20480
            LD DE,22528+256
            LD BC,256
            LDIR
            LD B,50*2
            HALT
            DJNZ $-1
            LoadInData 'GFX\rob.scr',          16384
            LD B,50*2
            HALT
            DJNZ $-1
            LoadInData 'GFX\mellona.scr',      16384
            LD B,50*2
            HALT
            DJNZ $-1
    Макросы ОСи сами добавляют нужный файл в образ, сами пакуют их и сами раздают ID каждому файлу. И в итоге в коде после раскрытия макроса это получается так:
    Код:
       LD HL,03765H   ;ID файла
       LD DE,16384    ;адрес куда грузить данный
       CALL DOS.LOAD.FILEID
    Этот ID мне не известен и не нужен, мне главное в тексте видеть, что я гружу. Так же можно создать таблицы из нужных нам файлов и грузить их по номеру ... Для этого я и создавал ASAM, для того, что бы одним нажатием у тебя собирался полностью рабочий проект.

    В одном из постов, ААА написал, что большинство времени уходит на допиливание лоадера. От этого я давно ушёл, лодаер LATRAX'а, например, трогался только один раз, где-то в августе. Если бы у меня хватило времени на загрузочную картинку, то тронул бы два раза.
    AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.

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

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

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

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

Похожие темы

  1. Colorbok^Phantom Family Group
    от rajdee в разделе Графика
    Ответов: 12
    Последнее: 20.01.2011, 23:32
  2. C compiler
    от vitasam в разделе Программирование
    Ответов: 17
    Последнее: 25.08.2005, 16:42

Ваши права

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