6502 Обертка режима относительного адреса

Читая документацию по 6502, я нигде не смог найти ответ на этот вопрос. При использовании относительной адресации возможен перенос. Но можно ли обернуть оба конца? Я предполагаю, что это возможно, хотя маловероятно.

И когда я имею в виду оба конца, я имею в виду, что знаю, что вы можете перейти от высокого ПК к низкому ПК. Но могли бы вы также перейти с ПК с низким уровнем на высокий ПК?


person Aaron M    schedule 28.03.2013    source источник


Ответы (3)


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

Вы можете попробовать это в Visual6502. Введите программу A9 00 F0 EC (LDA #00 / BEQ $FFF0) по адресу 0000, выполните пошаговый код и посмотрите, где он заканчивается после BEQ. Если вы доверяете только реальному оборудованию, вы можете легко проверить это на чем-то вроде Nintendo Entertainment System.

Очевидно, что для доступа к странице FF с относительной ветвью вам нужно будет выполнять из ОЗУ нулевой страницы, и вы, вероятно, не захотите тратить ОЗУ ZP на код, поскольку он должен соответствовать вашим наиболее часто используемым данным. Так что это сделало бы этот конкретный сценарий маловероятным.

person Michael    schedule 28.03.2013

Да, тоже работает в обратном направлении. Но многие ассемблеры этого не поддерживают. Когда вы пытаетесь поместить оператор ветвления в начало адресации нулевой страницы> $ ff80 area, ассемблеры обычно выдают ошибки типа «смещение слишком велико». Но когда вы пытаетесь поместить код операции с байтовыми значениями, такими как > 0002 f0 e0, вы получаете результат beq $ffe4. Я использовал 0002 в качестве первого доступного адреса памяти, так как я использовал Commodore 64, чтобы попробовать его, и $ 0001 не годится для этой машины. Для других машин на базе 6502 тоже должно хватить 0000 долларов.

person Emir Akaydın    schedule 28.03.2013

В общем случае вы можете выполнить собственное вычисление адреса, используя арифметику по модулю, а затем использовать результат для абсолютной адресации.

person TJR    schedule 28.03.2013
comment
Я считаю, что вопрос касается 6502 поведения. Оп, вероятно, работает над эмуляцией и т. Д. Я не думаю, что этот ответ ему поможет. - person Emir Akaydın; 28.03.2013