> SEI!!!
Если ты про команду SEI, то она только IRQ будет блокировать, NMI - нет.
Так что надо отключать именно таймер - C02x.
> Кстати, для слов в памяти, ускоряется ли к ним доступ при выравнивании на границу слова?
Скорее нет.
Про массивы не совсем понял:
Получить элемент однобайтного массива:
lda ARRAY, Y
В Y индекс.
Не важно - пересекается страница или нет - это работает.
Массив двухбайтовый элементов, если там элементы записаны в соседних байтах, а в Y - индекс:
TYA
ASL A
TAY
lda ARRAY+0,Y
sta КУДА-ТО
lda ARRAY+1,Y
sta КУДА-ТО
Тоже пересечение границы не важно.
Пересечение границы может быть будет важно при короткой адресации - там что-то вроде
ldx #$FF
lda $80,X
заберёт байт именно по адресу $7F.
--
Про джой:
Мне не понятна даже эта конструкция:
PHA
LSR A
TAX
LDA $C070 ;pdls: analog input reset
SBC #7Eh
У тебя на выходе A будет зависеть от A на входе процедуры.
Это так и задумано? Выглядит как ошибка.
Опрос джоев довольно простой:
Щёлкаем C070 и ждём, пока на C064 и C065 упадёт старший бит.
Время его падения как раз и есть угол поворота оси джоя.
Оно подобрано схемотехнически таким образом, чтобы ЦП успел максимум прокрутить
примерно 256 циклов ожидания (loop: LDA C064,X / BPL EXIT / INY / BNE loop).
Есть один подводный камень: если ты крутнул цикл по одному пульту и получил довольно небольшое значение, то щёлкать вновь C070 и читать второй пульт будет не совсем хорошей идеей, если у второго пульта значение будет много больше: он просто не среагирует на второй C070.
Т.е. нужно дожидаться завершения счёта по обеим пультам прежде чем вновь их опрашивать.
В эмуляторах это не будет заметно, скорее всего, а на реальном железе - важно.
Процедура, которая это реализует:
*
* Чтение состояния пультов
*
GET_PAD_ANGLE:
STY HT
STA $C070
LDY #0
NOP
NOP
GP_LOOP:
LDA $C064,X
BPL GP_FIN
INY
BNE GP_LOOP
DEY
GP_FIN:
* OЖИДAEM ЗABEPШEHИЯ ПO BTOPOMУ ПУЛЬTУ
TXA
EOR #1
TAX
TYA
PHA
LDY #255
GR_WASTE:
DEY
BEQ GR_WASTE_FIN
LDA $C064,X
BMI GR_WASTE
GR_WASTE_FIN:
PLA
TAY
*
JMP DECCIF - вывод на экран числа
Характеристка пультов близка к линейной, так что Y примерно 128 - это где-то как бы центр.
Но лучше брать его пошире, чтобы на реале было надёжно. Сколько именно - зависит
от логики игры и убитости пультов, надо пробовать.
> dos33c2
Это не совсем баги, это предсказуемый пофигизм: экспорт-импорт не считались важными функциями, поэтому имена вводятся строкой, а не выбираются из меню, причем имя буквально передаётся операционке, а она полный путь вычисляет как текущий каталог + то, что ты указал. dos33c2 не меняет текущий каталог при работе, а в винде принято назначать по умолчанию текущим тот, в котором находиться исполняемый файл (если ты создаёшь ярлык на исполняемый файл или просто щёлкаешь по исполняемому файлу в "проводнике"). Так что если ты вводишь только имя файла, то подразумевается, что это файл в том же каталоге, где dos33c2w.exe
Текущий каталог легко сменить в свойствах ярлыка (если dos33c2 вызывается щёлчком по её ярлыку (.LNK)). Более того, можно просто назначить dos33c2 обработчиком файлов DSK, FIL, AIM (что-то в винде это вроде "открывать эти файлы такой-то программой" или "ассоциировать расширение файла с программой") - в этом случае текущим каталогом будет ставиться именно тот, где находятся рабочие файлы. Я именно в такой настройке работаю сам.
Другой - скучный - вариант: можно имя файла указывать с частью пути (alex\ent\ret.fil) или даже с полным путём (c:\need\for\log.fil).
По причине того же пофигизма, экспорт и импорт не обёрнуты в обработчики ошибок. Поэтому если file not found или какая-то ещё ошибка доступа к файлу происходит, прога падает. Основное - это работа с образами дисков и FIL-контейнерами - вот там всё ловиться, с сообщением обо всём, что выглядит странно или неверно.
--
Экспорт K-файла не совсем понял:
если ты в меню выбираешь :
"Экспорт К файла: F9|Экспорт|K файл без перекодировки. "
Это означает, что ты хочешь некий абстрактный дамп байт из PC-шного файла залить внутрь нового K- файла. Хоть EXE-шник можешь залить, лишь бы < 64 кб размер был. При этом адрес загрузки во вновь создаваемом файле будет задан как $1800 и размер до байта соответствовать исходному файлу.
Если же ты хочешь в образ диска залить уже чем-то (хоть TASM-ом) синтезированный К- файл (со всеми заголовками и прочим и расширением .FIL) - то просто на одной панели открываешь образ, на другой - каталог, где лежит готовый K- и копируешь его нажатием F5.