Search
Write a publication
Pull to refresh

Comments 17

Пара мелочей:

  • "T" в RTI/RTS - не из "To", а из "ReTurn". Возвращают они не "в", а "из" того, что в третьей букве - "ReTurn from Interrupt"/"ReTurn from Subroutine".

  • секция векторов - не 3 байта, а 3 слова, указатели - 16-битные

UFO landed and left these words here

Спасибо! На самом деле я пока сам больше использую переменные в zeropage, но так как zeropage не резиновая надо будет в некоторых участках использовать pha/pla ну или "TXA/PHA/TYA/PHA ..Какая то логика.. PLA/TAY/PLA/TAX ... продолжение логики". Так же сегодня столкнулся с тем что секция RODATA переполнена а значит пришло время использовать мапер пока выбрал MMC3. При этом я так понял он может вызывать прерывание irq по счетчику строк, во многих игр статус бар реализован как часть фона который не прокручивается. Данные карт и коллизий можно положит в переключаемую память PRG.

UFO landed and left these words here

Я просто разбил код на подпрограммы которые не превышают данный лимит. У меня был к стати момент когда я этот лимит обходил конструкцией с несколькими JMP )) сначала JMP перескакивает метку в середине, и если надо в начало вернуться то делаем Branch на метку где был jmp в середине на начало ))) На самом деле не знаю про такой баг, знаю что сравнение с 0 и при декременте может не особо очевидно работать. Возможно это один и тот же баг.

UFO landed and left these words here

Интересно, ни разу не встречал такого поведения, но зато постоянно с другим поведением кажущимся неправильным но когда углубляешься в флаги становится более понятно что к чему. В переключение nametable для коллизий сейчас проблема. Для первого к примеру можно сделать ADC $20 и это сработает с 20 - 23 младший байт. Но при определении что герой находиться на 2-й таблице вроде сделать бы ADC $24 и вот не могу никак найти как это сделать)) просто есть идея сэкономить и брать просто номер спрайта с таблице имён и по нему определять коллизии на фоновые платформы. Для первой таблице работает, для второй никак, там ещё особенности в адресации PPU могут вызывать как прокрутку так и может переключить nametable. Вот и не могу это победить никак)

нужно было вам статью писать (я серьезно). вы и русский язык в школе не прогуливали, в отличие от некоторых.

UFO landed and left these words here

Полагаю, что это не баг, а умышленно реализованная особенность. Думаю, это сделано с целью увеличения быстродействия. Во всяком случае, в CMOS варианте чипа эту особенность убрали, что привело к увеличению времени выполнения команды на 1 такт. Изменение поведения некоторых команд в 65с02 (CMOS) по сравнению с 6502 (NMOS) можно рассматривать как работу над ошибками. Но нужно учесть, что 6502 работает на частотах в единицы МГц, а 65с02 хорошо себя чувствует на десятках МГц. Это позволило добавить сотню-другую транзисторов и без особого вреда для быстродействия получить более интуитивное поведение, в то время как разработчикам оригинального 6502 приходилось выгрызать каждый такт. Да и транзисторы стоили дороже.

UFO landed and left these words here

Вообще косвенный JMP очень редко встречается в программах, далеко не в каждой найдётся, и даже если встречается, то один-два раза на многие килобайты кода - вряд ли один такт на такой редкой операции играл роль для быстродействия. Так что могли и просмотреть ошибку, или заметить, но (резонно) решить, что это не важно.

UFO landed and left these words here
UFO landed and left these words here

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

Sign up to leave a comment.

Articles