LINUX.ORG.RU

Какие есть IDE/редакторы кода с поддержкой ASM?

 6502, , ,


0

1

Хочу пописать под 6502, у него кастомный набор инструкций, поэтому, скорее всего нужно будет отредачить файл подсветки.

Хочу:

  • Поддержка CTRL+Click на название метки
  • Подсветка синтаксиса и комментов
  • (опционально) Описание оператора при наведении (полезно если забыл как работает)

Готов написать правила подсветки\описания ручками сам, подскажите кто и в каком формате это сожрет.

Кнопка\клавиатурное сочетание для Build/Run - большой бонус.

Я пробовал прикручивать подсветку ASM для QtCreator - получается шлак. Он банально не умеет вообще ничего кроме как подсвечивать, а с этим и mousepad справляется.

Почему хочу IDE - не хочу колхозить систему сборки на скриптах, постоянно редактировать руками make с его инопланетным синтаксисом - фэ. automake/cmake еще инопланетнее. У IDE обычно есть фича как «файл проекта», где хранится вся инфа о списке файлов и как их компилить

★★★★★

Последнее исправление: PPP328 (всего исправлений: 2)

Для всего странного есть emacs :-))) Если ты в принципе любитель странного, то полезно будет постигнуть оный - в будущем поможет.

https://github.com/afwlehmann/acme-mode

ну и etag для прышкоф по коду.

vtVitus ★★★★★
()
Ответ на: комментарий от CrazyAlex25

Вы три раза подряд кинули kickass assembly. Он НЕ подходит, у него другой диалект.

PPP328 ★★★★★
() автор топика

Если пилишь для 6502 пили сразу на монохромном мониторе 40x24. Подсветка не нужна. IDE тоже.

luke ★★★★★
()
Ответ на: комментарий от hateyoufeel

Я так смотрю авторы решили писать на хаскеле ассемблерный код?

test1 :: Instruction
test1 = do
    lda (Immediate 0xFF)
    sta (ZeroPage 0x00)
    lda (Immediate 0x00)
    adc (Immediate 0x01)
    cmp (ZeroPage 0x00)
    bne (Relative (-0x03 :: Int8))


test2f :: Instruction
test2f = do
    lda (Immediate 0x10)
    sta (Absolute 0x0200)
    rts (Implied)

В чем сакральный смысл, если они пишут ассемблерные инструкции в Хаскель-коде?

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от PPP328
  1. Just for fun. Серьёзно, это довольно неплохой проект для студента, например. Хотя я не в курсе о личности автора.
  2. Проверка некоторых инвариантов с помощью типов. Ну как, например, ты тут не сможешь всунуть неправильный адрес не в ту инструкцию.
  3. Можно на хацкелле генерировать код для 6502. Например, чтобы запилить компилятор более сложного языка.
hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

ты тут не сможешь всунуть неправильный адрес не в ту инструкцию.

Так его и так нельзя всунуть в 6502, он физически жрет либо длинный адрес, либо короткий из zeropage.

Не совсем в тему, я тут вообще на днях на вот такое мнение наткнулся:

I’ve always preferred «$2007» to «PPU_DATA», and I find the latter to be obfuscating rather than the former, but opinions differ. I would say that the NES only has 8 PPU registers. So relative to other systems, the numbers are less difficult to keep in memory.

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от PPP328

Так его и так нельзя всунуть в 6502, он физически жрет либо длинный адрес, либо короткий из zeropage.

Да, но узнаешь ты об этом только при выполнении. Разве не так? В любом случае, это штука – чистой воды упражнение в написании eDSL. Вряд ли кто-то для чего-то серьёзного это использует.

Из серьёзных штук, есть такое: https://hackage.haskell.org/package/copilot

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Да, но узнаешь ты об этом только при выполнении. Разве не так?

Неа. Компилятор тебя пнёт, если ты используешь незнакомую ему адресацию:

    1. Immediate (lda #$05) - Загрузит 5
    1. Absolute (lda $2020) - Загрузит из адреса 0х2020
    1. Zero page (lda $20) - Загрузит из адреса 0х0020, но с применением однотактной загрузки
    1. Absolute Indexed (lda $2000, x/y) - Загрузит из адреса 0х2000+х/у
    1. Zero page indexed (lda $20, x/y) - Загрузит из адреса 0х0020+х/у, но с применением однотактной загрузки
    1. Zero page indexed with indirect (lda ($20, x)) - Загрузит из 16-битного адреса который в [$20+x, $21+x]
    1. Zero page indirect indexed (lda ($20), y)) - к адресу в [$20,$21] прибавит Y и вытащит по такому адресу значение

6 и 7 перепутать нельзя из-за привязки к регистрам, 2, 4, 5 из-за кардинально разного синтаксиса (просто не даст например написать lda #$20, x)

Максимум можно перепутать и написать (я так пару раз ошибался) lda $20 вместо #$20, но это в принципе нельзя задетектить ничем, только делать макрос с текстовым именованием через define|macro. Анализатор не может за вас сказать, вы хотели абсолютное значение или значение по адресу в Zero Page.

PPP328 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.