| Разработка и ромхакинг > Ромхакинг |
| [NES] Castlequest / Castle Excellent |
| << < (2/10) > >> |
| Миха42:
Мля, переводчик нужен на win10 не то написал в торопях В моей винде вобще нет калькулятора, только в телефоне. В инете перевести не могу числа в двоичную систему и обратно, и калькуляторы тупят тоже в инете в двоичной. |
| Sharpnull:
--- Цитата: Миха42 от 16 Апрель 2020, 22:10:17 ---В инете перевести не могу числа в двоичную систему и обратно, и калькуляторы тупят тоже в инете в двоичной. --- Конец цитаты --- Пример напишите, что вы задаёте, что получаете и что ожидали получить. --- Цитата: Миха42 от 16 Апрель 2020, 22:10:17 ---В моей винде вобще нет калькулятора --- Конец цитаты --- Говносборка или удалили? Его можно восстановить: https://superuser.com/questions/978877/how-can-i-reinstall-windows-10s-calculator-app. Если не удалили Windows Store, то https://www.microsoft.com/ru-ru/p/windows-calculator/9wzdncrfhvn5. |
| Mr2:
--- Цитата: Миха42 от 16 Апрель 2020, 22:10:17 ---В моей винде вобще нет калькулятора, только в телефоне. --- Конец цитаты --- Попробуй запустить калькулятор через эту программу. Пункт меню Soft->Calculator. |
| Sharpnull:
--- Цитата: Mr2 от 17 Апрель 2020, 10:30:40 ---Попробуй запустить калькулятор через эту программу. Пункт меню Soft->Calculator. --- Конец цитаты --- Win+R, calc, Enter :) |
| Yoti:
Sharpnull, тихо, не видишь человек свой бесполезный мусор проталкивает? |
| Mr2:
Не такой уж и бесполезный, раз смог тролю пердак подпалить. :rofl: |
| Yoti:
Mr2, ты бы хоть этимологию термина "[сетевой] тролль" для начала узнал, прежде чем пытаться ввернуть слово по теме и без. Причём, с ошибкой. |
| Миха42:
--- Цитата: Sharpnull от 17 Апрель 2020, 09:06:09 ---Если не удалили Windows Store, то https://www.microsoft.com/ru-ru/p/windows-calculator/9wzdncrfhvn5. --- Конец цитаты --- Спасибо, как раз именно то что нужно. :thumbup: , а главное всегда под рукой :) |
| Миха42:
Со вчерашнего дня голову ломаю, переписал в prg банку весь код генерирования карты и забивания её в RAM вместе со всеми массивами, всё вроде норм работает банки переключаются код исправно работает всё 1в1 исправно как в оригинале, но в оригинале она правильно генерируется, а у меня нет. Два дня голову ломал пока ненароком не залез в ppu, так оказалось что он ещё и оттуда код подгружает для генерирования карты, не даром в процессе загрузки карты chr банки меняет, на что я не обратил внимания даже. До чего же хитрые блин зараза эти разработчики были ппц просто. :furious: |
| Миха42:
Извеняюсь за назойливость, но может мне ктонить разжевать подробно инструкцию ORA в асм 6502? На сколько я помню в том же MySQL и пыхе которые я раньше юзал or выполнял роль условия (в моём понимании) при котором если не соотвествовало одно значение значит проверяли другое и после получали результат либо ничего. А как обстоят здесь дела относительно А or M и флагов хотелось бы узнать подробно. Я асм и архитектуру 6502 начал изучать меньше месяца назад когда создал данную тему, лишь из за упорного желания изменить данную игру, так сказать мой первый опыт в нес будет, пока вроде всё понятно, да и где что непонятно больше стараюсь сам испытывать наглядно писать себе в пустом роме скрипт и смотреть как он работает на практике, но порой всё же есть ньюансы которые хотелось бы всё же узнать поподробнее от опытных людей. |
| Sharpnull:
--- Цитата: Миха42 от 22 Апрель 2020, 07:39:45 ---в том же MySQL и пыхе которые я раньше юзал or выполнял роль условия --- Конец цитаты --- Это логический оператор ИЛИ (PHP: ||, or), а здесь побитовый оператор (PHP: |). ORA в 6502 побитовое ИЛИ: A | M → A, если результат в пределах $#00-7F, флаг N снимается, если не равен нулю, то флаг Z снимается, а в обоих случаях иначе устанавливаются флаги. Иногда нужно просто установить какой-то бит, чтобы позже проверить. Очевидно, что можно использовать как логический оператор ИЛИ, чтобы сразу проверить, что A и M оба равны нулю или один (оба) из них нет. Не разбираюсь в ASM, наверно в каких-то трюках ещё можно использовать. |
| Миха42:
TXA LSR AND #$01 ORA $26 TAX LDA $E913,X Пример из кода, если исходить из твоих слов что просто смотрит как выставить флаги у процессора или 8ой бит относительно значений, я бы ещё понял в случае если потом шол бы перенос далее, но далее он грузит ячейку памяти, исходя из значения ячейки 26, а значит думается мне он не просто флаги выставляет у аккумулятора. Ведь даже исходя из простой инструкции сравнения аккумулятора со значением CMP он вычетает из аккумулятора занчение М и относительно остатка в аккумуляторе выставляет флаги. да получился 0 ни чего не осталось, а значит значения равны ставим флаг соответствующе, или же значение М больше оказалось и остаток А ушол в отрицательное значение выставив опять же соответствующий флаг, или же попросту осталось ещё что-то в аккумуляторе, значит не равны. То же самое думается мне должно быть что-то подобное и там с инструкциями ORA и EOR, ведь тут также используется сверка значений, но только в тех же пыхе SQL и басике на сколько мне помниться просто получим результаты true или false (сошлось или нет указанные значения с чем-то, и дальше выполним соответствующую инструкцию а про сами значения что отправили для сверки и забудем ведь они свою задачу выполнили (не забиваем голову что с ними сталось на машинном уровне)) ведь само по себе слово ИЛИ(OR) означает что, проверить одно, если не сошлось, то проверить другое значение, но вот что происходит на машинном уровне побитно и уж тем более что происходит в итоге с самим значением аккумулятора (учитывая что мы его используем дальше как значение, а не просто результат), это загадка которую хотелось бы постичь. :? |
| Sharpnull:
--- Цитата: Миха42 от 22 Апрель 2020, 13:28:39 ---значит думается мне он не просто флаги выставляет у аккумулятора. --- Конец цитаты --- В примере не используются флаги процессора, а используют инструкцию по назначению - установка битов. По этому куску кода не скажешь, что именно делается, только ясно, что выбирается откуда загружать (как вы и сказали): адрес $E913 + значение $26 + Number, где Number равно 1, если число по адресу $26 имеет 0 в 0-м бите и A был 1, иначе равно 0 (потому что либо в A был 0 после AND #$01, либо значение $26 уже имеет установленную 1 в 0-м бите). Ещё иногда побитовое ИЛИ аналогично +, если биты двух операндов не пересекаются и числа беззнаковые. -------- У вас проблема не с ORA, с который всё просто, а с тем, зачем ORA используется, т. е. логика остального кода. |
| Миха42:
То есть значение М влияет лишь на биты в аккумуляторе без сложения изменяя относительно значения? Предположим если в А будет 1111 0111 а М будет 0101 0101 То получим ? 10100010 Или я что-то не пойму. Просто я хочу понять как ORA и EOR влияют на биты. Чтоб понять что происходит со значениями после этого ORA. |
| Sharpnull:
--- Цитата: Миха42 от 22 Апрель 2020, 15:22:37 ---Предположим если в А будет 1111 0111 а М будет 0101 0101 То получим ? 10100010 --- Конец цитаты --- Будет 1111 0111. К каждому биту применяется дизъюнкция, поэтому эти операции и называются побитовые (bitwise). Только не нужно путать "логические операции" языков программирования и название дизъюнкция как "логи́ческое сложе́ние, логи́ческое ИЛИ", в языках программирования логическими называют те, которые используются в условиях if (A || B) - значения A и B приводятся к true, false и сравниваются. -------- EOR - Исключающее «или». Тоже просто, но нужно знать о трюках, для которых используется XOR, есть всякие книги и статьи по трюкам с битам, будет полезно. -------- Например, из свойств ясно, что EOR #$FF сделает инверсию всех битов, что в C/C++ и похожих записывается как ~A. |
| Миха42:
--- Цитата: Sharpnull от 22 Апрель 2020, 14:30:02 ---У вас проблема не с ORA, с который всё просто, а с тем, зачем ORA используется, т. е. логика остального кода. --- Конец цитаты --- Можно и так сказать, просто сложно пытаться что-то разбирать в коде не понимая что делает какая-то инструкция. А эти две я не могу понять до сих пор как они влияют на значения и на флаги, с остальными вроде со всеми разобрался какие встречал. И вполне нормально разбираю логику кода. К тому же нужно переписать передалать код хранения открытых локаций в RAM для построения карты чтоб вместо FF открыта/ 00 нет было побитно 1/0 как это сделано с предметами использованными в игре и открытыми дверями. А то RAM памяти катастрофически не хватает в игре. Добавлено позже: --- Цитата: Sharpnull от 22 Апрель 2020, 15:36:59 ---Будет 1111 0111. К каждому биту применяется дизъюнкция, поэтому эти операции и называются побитовые (bitwise). Только не нужно путать "логические операции" языков программирования и название дизъюнкция как "логи́ческое сложе́ние, логи́ческое ИЛИ", в языках программирования логическими называют те, которые используются в условиях if (A || B) - значения A и B приводятся к true, false и сравниваются. -------- EOR - Исключающее «или». Тоже просто, но нужно знать о трюках, для которых используется XOR, есть всякие книги и статьи по трюкам с битам, будет полезно. -------- Например, из свойств ясно, что EOR #$FF сделает инверсию всех битов, что в C/C++ и похожих записывается как ~A. --- Конец цитаты --- Вот теперь доходчиво понял что происходит с битами, спасибо за информацию. )))) Добавлено позже: --- Цитата: Sharpnull от 22 Апрель 2020, 15:36:59 ---Тоже просто, но нужно знать о трюках, для которых используется XOR, есть всякие книги и статьи по трюкам с битам, будет полезно. -------- Например, из свойств ясно, что EOR #$FF сделает инверсию всех битов, что в C/C++ и похожих записывается как ~A. --- Конец цитаты --- Уж извеняйте что я многое возможно не понимаю, по скольку я никогда и ни где не учился программированию, являюсь самоучкой, а в терминологии вообще полный ноль. Мною движет лишь желание воплощать в жизнь задумки, так я всегда и писал на пыхе зная что хочу получить в результате, а как и какими функциями реализовать задуманное это походу изучал ну и wapadmin выручал порой. А на visual basic к сожалению не далёко в познания ушол, дальше арканоида дела не продвинулись и то в виде блоков цветных блоков, по сколько с графикой я не в ладах и рисовать не умею. Потому и бросил данную затею. :D |
| Миха42:
Ещё возник вопрос, по части прерываний. В момент срабатываний NMI, IRQ прерываний как описано в инструкциях процессор приостанавливает исполнение программы, выполняет инструкцию для прерывания, а после возвращается обратно к исполнению программы. Если во время прерывания были изменены данные некоторых ячеек памяти и изменены банки памяти, при возврате к программе он будет помнить только значения аккумулятора и регистров и продолжит исполнение программы с адреса где была приостановлена работа? Или забудет регистры с аккумулятором и начнёт выполнять программу с начала? А то чуется мне придётся ещё и выделять ячейки в памяти для сохранения номеров prg банок используемых программой, чтоб по окончанию обрабатываемого прерывания возвращал все банки на свои места. o_0 |
| Cyneprepou4uk:
Миха42, прерывание помнит только адрес возврата, больше ничего. На выходе из прерывания регистры, флаги, банки и переменные в адресах останутся такими, какими ты их сделаешь внутри своего обработчика прерывания. В принципе можешь рассматривать прерывание как внезапный JSR, только выход у него через RTI. |
| Миха42:
--- Цитата: Cyneprepou4uk от 30 Апрель 2020, 08:01:25 ---Миха42, прерывание помнит только адрес возврата, больше ничего. На выходе из прерывания регистры, флаги, банки и переменные в адресах останутся такими, какими ты их сделаешь внутри своего обработчика прерывания. В принципе можешь рассматривать прерывание как внезапный JSR, только выход у него через RTI. --- Конец цитаты --- Ок спасибо за инфу, а то в игре в коде прерывания уже были прописаны сохранение регистров в память и возврат их в изначальное состояние по окончанию прерывания, а вот переписывая игру раскидывая код по банкам я не учёл этот момент (, прийдётся значит искать ещё 6 байт незадействованных в ram памяти для записи номеров банков которые возвращать на свои места по окончанию прерываний, а то в игре один только вывод картинки на экран занимает чуть больше одного банка памяти, потому и пришлось его вынести в отдельные банки, из-за этого значит и начал код что попало чудить, сменить сменил банки, а вернуть не вернул. :) |
| Миха42:
Вопрос на засыпку, в игре постоянно встречаю что-то вроде: 0х0: LDX #$77 0х1: DEX 0х2: BNE $1 А дальше вновь задаётся какое либо значение регистру и идёт прочий код. И встречается это постоянно, то с регистром х, то с у, а то и оба сразу. Если тупо выставить флаги, то почему бы LDX #$01 не указать чтоб циклов поменьше было или сразу LDX #$00 если 0 нужен?! Или тут какой-то скрытый смысл имеется в подобного рода манипуляциях аж по несколько сотен, а то и тысяч циклах порой? :? |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |