Здравствуйте, дорогие Форумчане.
Мы знаем, что байтом можно адресовать 256 значений. А кто собственно, задумывался в чём эти значения?
Какова их сущность?!! Identity?!!
Я уже сотню лет не писал ничего об ассемблере (был занят Паскалем и совершенно не разочарован), но кажется есть ещё темка, которая Вам может пригодится...
Это - использование identity table (IDT) на русский сложно перевести, но смысл прост, - Из неё мы получаем байт, определяемый собственным индексом, то есть сущность этого байта. (Подумайте над этим, это занятно!)
Итак, создаём таблицу, длиной в страницу и выровненную по странице (то есть адрес: $xx00).
Так вот, дело в том, что такая таблица может помочь нам с созданием новых несуществующих опкодов ассемблера для 6502.Код:IDT .by $00,$01,$02,$03, ... $0f ... .by $f0,$f1,$f2,$f3, ... $ff; Identity Table
(Например тех, которые изначально запрограммированы для 65816.)
Но не только...
На её основе можно создавать макросы для повторяющихся действий или другие, необычные вещи... Создав её один раз можно ей пользоваться для ЛЮБЫХ целей!
Просто сама таблица является отображением ПОНЯТИЯ <байт> в понятие <число>;
По русски: сущность БАЙТА - ЭТО ЧИСЛО! (То есть мы ПРОНУМЕРОВАЛИ числа БАЙТА!)
Теперь - фантастика!
Вы знакомы с TAX,TXA,TAY,TYA...
А где же здесь TXY или TYX?! А, НЕТУ!
Я всегда говорил, что процессор не умеет считать, зато байты двигать умеет!!!
Короче, ВОТ недостающие опкоды ассемблера:
(Их можно сделать как макросы ...)
Однако, это - не всё...Код:Calling OPCODE ldx IDT,y -> TYX ldy IDT,x -> TXY and IDT,x -> ANX and IDT,y -> ANY ora IDT,x -> ORX ora IDT,y -> ORY eor IDT,x -> EOX eor IDT,y -> EOY adc IDT,x -> ACX adc IDT,y -> ACY sbc IDT,x -> SCX sbc IDT,y -> SCY
Вот пример кода:
А у меня уже стотыщь переменных!..Код:ldx val lda num stx tmp clc adc tmp ; A=val+num
Ассемблер не отрабатывает!!!
Тогда, делаем так:
Во-о-от. Так-то, Друзья, В этом-то всё и дело!Код:ldx val lda num clc adc IDT,X ; A=val+num
zen




Ответить с цитированием