Как переместить нулевую страницу на 65816
Исходная информация
Как современный PHP-разработчик с мимолетным интересом к 8-битным технологиям, я немного отрывочен от реальных низкоуровневых вещей. Хотя я работал с процессором Z80 и делал некоторые сборки MIP в университете, я меньше всего разбираюсь в семействе процессоров 65x.
Чего я пытаюсь достичь
Что я хочу сделать, так это переместить нулевую страницу на 0xd300 для моего приложения - у меня был обязательный поиск в Интернете, но я не могу найти хороший пример, который я могу понять. Я работаю в 65c02 но на процессоре 65816; Благодаря другу я узнал, что вы можете перемещать нулевую страницу только в собственном режиме, а не в режиме эмуляции, поскольку он не поддерживается 65c02. Это не проблема, так как я могу переключиться в собственный режим для того, что я делаю, и вернуться в режим эмуляции, если я захочу изящно вернуться к BASIC (ну, не только то, что я знаю).
Если кто-то может также предоставить пример для 8502 (Commodore C128), пожалуйста, поскольку я знаю, что у него есть перемещаемая нулевая страница. Я знаю, что это два вопроса в одном, но это связано с тем, чем я хочу заниматься.
1 ответ
Регистр прямой страницы - это 16-битный регистр, определяющий, какая 256-байтовая страница в банке 0 должна быть текущей прямой страницей (то, что вы называете нулевой страницей).
Есть несколько разных инструкций, которые вы можете использовать, чтобы написать
D
. Так, например, должно работать что-то вроде этого:
rep #$20 ; 16-bit accumulator
lda #$100
tcd ; transfer 16-bit accumulator to D
Обратите внимание, что странице разрешено начинаться с любой границы байта. Таким образом, вы можете, например, установить
D=2
и иметь прямую страницу на
[0002, 0101]
.