Разработка и ромхакинг > Ромхакинг и программирование
[NES] Мой NES ASM Компилятор
(1/3) > >>
Ximial:
Короче, я создал, собственный NES ASM компилятор. В теме:
https://www.emu-land.net/forum/index.php/topic,78955.0.html
оно уже, освещалось. Я подумал, бы о том, какие были бы пожелания. Может он, не понимает каких нибудь недокументированных команд? Которые, не помешало бы ему знать.
К примеру существует, стандартный NES ASM, на котором многие, уже и пишут. Но так ли хорош, этот кашерный асм? И не связывает ли он руки проггеру, в самых неожиданных местах? Запрещая что либо делать? Даже слишком элементарное?

И ещё вопрос, к знающим людям. Как в макро нес асемблере, писалась бы, как бы вот такая по смыслу команда?

.DB $DC

Тотько длинная. Со смыслом:

.DB "DE 4A 56F 08A"

Т.е. команда, которая, бы просто, втискивала в код, строку из любых байт?

Добавлено позже:
Я имею, ввиду эту самую команду, правильно оформленную, по синтаксису.
И уже буквально, следующим сообщением, ассемблер, будет её знать.
Griever:

--- Цитата: Ximial от 08 Октябрь 2017, 04:42:59 ---Но так ли хорош, этот кашерный асм?
--- Конец цитаты ---
Да.

--- Цитата: Ximial от 08 Октябрь 2017, 04:42:59 ---Как в макро нес асемблере, писалась бы, как бы вот такая по смыслу команда?
--- Конец цитаты ---
Скачайте asm6.zip и в readme изучите директиву HEX.
Segaman:
запили поддержку структур (как в Си), и цены компилю не будет  :cool:
Там логика в принцыпе элементарна
CaH4e3:
поддержка блекджека, шлюх и многократно вложенных макросов - и я перейду на этот компилятор.. ну еще релатив-локал ссылки, описатели процедур, в пределах которых можно делать локальные ссылки, использование макро структур в качестве токенов в любом месте кода, а не только как отдельный элемент (не только как строку текста, а и как элемент массива в числе прочих обычных элементов)... поддержка релатив орг директив, и форснутых орг директив, которые бы вписывали код по заданному адресу в выходном файле, поддержку списков символов для каждого файла, чтобы не приходилось асмить кучу сорсов на каждый отдельный бинарник... поддержку банков и мапперов денди лол а еще к этому символьный отладчик, который сам сопоставляет место в сорсе со смещением в откомпилированном файле и может сделать там бряку....
Ximial:

--- Цитата: CaH4e3 от 09 Октябрь 2017, 01:23:21 ---поддержка блекджека, шлюх и многократно вложенных макросов - и я перейду на этот компилятор.. ну еще релатив-локал ссылки, описатели процедур, в пределах которых можно делать локальные ссылки, использование макро структур в качестве токенов в любом месте кода, а не только как отдельный элемент (не только как строку текста, а и как элемент массива в числе прочих обычных элементов)... поддержка релатив орг директив, и форснутых орг директив, которые бы вписывали код по заданному адресу в выходном файле, поддержку списков символов для каждого файла, чтобы не приходилось асмить кучу сорсов на каждый отдельный бинарник... поддержку банков и мапперов денди лол а еще к этому символьный отладчик, который сам сопоставляет место в сорсе со смещением в откомпилированном файле и может сделать там бряку....
--- Конец цитаты ---

Давайте, я на этот вопрос, отвечу неожиданно (для проггера) просто. Надо просто взять, чужой уже готовый компилятор, какого нибудь, не имеющего отношения к реальному рейтингу C++.
И перевести его выходной exe асм - на nes asm. Получилась бы не ваша - не наша.



--- Цитата: Segaman от 08 Октябрь 2017, 22:30:26 ---запили поддержку структур (как в Си), и цены компилю не будет  Там логика в принцыпе элементарна
--- Конец цитаты ---

Я о таком, подобном естественно думал. Типа, чтобы собственные макросы можно было бы писать, внутри самой программы.
Но сейчас, меня интересовали бы вопросы, основопологающие, реальные. Я как реальный программист, рассуждал бы о реальном. Я бы спрашивал только из срвнения одного Ассемблера с другим асемблером.



--- Цитата: Griever от 08 Октябрь 2017, 19:19:35 ---Скачайте asm6.zip и в readme изучите директиву HEX
--- Конец цитаты ---

А нельзя, её просто назвать как команду. Это было бы нужно, для совместимостей исходников под разные асмы.


Добавлено позже:
Следовало бы, заметить вообще, для начала, элементарное. Что я и заметил сам. Настоящий nes ром, может быть только фиксированных размеров. Не зависимо от длинны програмного кода, нес файл, может быть не менее определённого, минимального числа килобайт. Я естественно, собираюсь приближать проект до состояния этих возможностей, не зависимо от знаний реальной архитектуры.

А может ли асм asm6.zip, при набирании, в нём каких нибудь, всего трёх команд, в итоге создать функционабельный ром? Без слишком большого пристрастия к знаниям архитектуры?
Ximial:
 Добавил свою утилиту в виде jpg-zip-WinRar архива.
Программу корректор кода из под NES-дизассемблера.
Чистит выходящий из него код от мусора для дальнейшего компилирования его на представленном мною ассемблере. Архив с программой находится в картинке.

Добавлено позже:
Jpg файл откроется как архив программой WinRar.
Dario:

--- Цитата ---В результате получится фрагмент компилированного кода, с именем output.cod.
--- Конец цитаты ---
Лучше сделать директиву для задания имени выходного файла. Например, в кроссассемблере SjAsm+ для ZX Spectrum используется SAVEBIN "output.cod", EntryPoint, CodeSize.

Необязательно, но хорошо было бы в дополнение к raw коду генерить (при указании соотв. ключа в командной строке) и ром, который можно запустить в эмуле, хотя бы простой без маппера. Настройки вроде горизонтального/вертикального отражения, размеров CHR и PRG и т.д. задавать директивами в начале файла, а в конце - директивы с указанием адресов (меток) обработчиков RESET, NMI и IRQ. Данные для CHR брать из графического файла, BMP или PNG. Тогда можно было бы легко собрать HelloWorld, ну а потом переходить к чему-нибудь посложнее.

Относительно архитектуры - я изучаю здесь: http://dendy.migera.ru/nes/g00.html и https://wiki.nesdev.com/
Пытаюсь сделать компилятор Бейсика для NES, но пока без особых результатов.
Segaman:
Ximial, почему не 7z?
вирусню прячешь в картинке? >:(
SeregaZ:
вот тоже интересно :) хотя вирус тотал ток 2 ноунейма дал срабатывания.
Ximial:
Оно написано на Delphi 7. А у него любой exe с помощью Noda да иной раз и Avasta как будто вирусный.

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

Добавлено позже:
SeregaZ: Скачай редактор уровней для игры Litl Mermid. Антивирус будет спокоин.
Это сдесь недалеко в этом же разделе форума.
SeregaZ:
дело не в этом, а в том что приложение в посте в виде изображения - что несколько настраивает на пессимистичный лад. по правилам хорошего тона приложение следует выкладывать в какомнить zip архиве.
Ximial:
Мне это уже в каждой теме надо писать.
Что отправка со смартфона не поддерживает файлы любого типа а только картинки. И поэтому к картинке приклеен архив. И в итоге в таком виде отправление проходит.
Guyver(X.B.M.):
Это полностью твоя проблема. Не получается выложить с телефона - сходи к другу/соседу/на почту и выложи файл с компьютера. Или попроси чтобы кто-то перевыложил твой файл, а потом измени своё сообщение с новой ссылкой. Что за гнилые отмазки? :neznayu: (или ты собрался приучать форумчан к этим #$%*$%#ым картинкоархивам?)
Ximial:
Не знаю... Я не волшебство. Как это целиком, полностью и только?...
Ximial:
Добавил пару новых версий.

Добавлено позже:
Во второй версии, ничего нового кроме возможности писать комментарий после знаков *** между строк кода.

В третьей, я подозреваю ошибки но они связанны с включением новых команд.
Пока исправлять некогда.

Как меня и просили сделал возможность подключать к проекту битмап. Но я сделал чтобы подключалась только пикселная его информация.
Директиву для создания обособленного имени выходного файла также сделал.
Что касается синтаксиса добавления строки байт, типа:
.DB "45 FE"... Общем заморачиваться не стал и сделал ещё в своём синтаксисе, вот так:
.DB# 57 68;

Кажется у третьей версии, как я заподозрил может быть что-то не так с новой командой "Block" которая должна генерировать строку энного размера из ff байтов.

Добавлено позже:
Так же сделал компилятору возможность работать в режиме патчтера. Т.е. проект компилятора не создаст свой файл, а пропатчтит своим проектом какой нибудь nes-файл.

Добавлено позже:
Что касается дебагинга уже существующего дизассемблера Картэза Ральфа. Я посмотрел. И от начала Nes-файла он дэбагит правильно хотя и вместе с заголовком но смещения кода в сторону неправильной трансляции - нет. Во всяком случае при дэбагинге с самого начала файла. А в случае с фрагментами асма в середине - я так и не знаю.
Набросал пять команд своего дэбагера, а дальше делать не стал. Стало лень.
Yoti:
Так и не научился нормально файлы выкладывать?
Ximial:
Я пока свои сайты не научился делать увожаемый...
Ximial:
Исправил ошибки в двух командах.
Остальные ошибки пока не выяснил.
Долго это.

Добавлено позже:
Пока исправил ошибку с новой командой ".DB#" и "Block".
Ximial:
Опять нашёл ошибки:
SBC #$x- транслируется с ошибкой
LDX $x,Y - транслируется с ошибкой
ADC ($x,X) - вообще отсутствовала
AND $xx,Y - присутствовала но не работала

Когда смогу обновлю загрузку.

Добавлено позже:
И вообще получается непонятная картина.
Я создаю новый РОМ, идеально пустой, с правильным заголовком, сразу после заголовка пишу несколько команд (размер Рома остаётся прежним) и на fuse дебагере - этого кода вообще будто нет.
На остальных эмуляторах ром идёт как нормальный.
В других случаях на дебагере вообще не тот код который я писал а какой-то абстрактный.
CaH4e3:
у меня стойкое ощущение, что этот человек сумасшедший. fuse вроде всегда был мумулятором спектрума лол...
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии