Из журнала ZX-Guide#4, Рязань, 25.11.2001 ;nikphe^anarchia А вот вам и самый короткий (46 байт) генератор чанок 4x4 (17 градаций) с дублированием спрайта в байте.Ну,кто напишет короче? Чтобы понять сам метод генерации, приведу матрицу последова- тельного заполнения чанка: +--+--+--+--+ | 6|14| 8|16| Довольно легко увидеть закономерность заполне- +--+--+--+--+ ния матрицы. |10| 2|12| 4| +--+--+--+--+ Чтобы узнать максимальное число градаций, надо | 7|15| 5|13| умножить высоту на ширину и прибавить единицу. +--+--+--+--+ В данном случае 4x4+1=17, т.к. существует ещё и |11| 3| 9| 1| пустой чанк!!! +--+--+--+--+ Собственно,метод и заключается в последовательном выставлении битов в соответствующие ячейки. Один чанк будет занимать четыре таких байта: номер байта /-----------\------- одинаковые; / \ /--------\ /---------\ +--+--+--+--+--+--+--+--+ Цифрами показано,после какой n0 | 6|14| 8|16| 6|14| 8|16| градации бит будет включен. +--+--+--+--+--+--+--+--+ На рисунке показано,какие места +--+--+--+--+--+--+--+--+ байта дублируются. n1 |10| 2|12| 4|10| 2|12|10| +--+--+--+--+--+--+--+--+ +--+--+--+--+--+--+--+--+ n2 | 7|15| 5|13| 7|15| 5|13| +--+--+--+--+--+--+--+--+ +--+--+--+--+--+--+--+--+ n3 |11| 3| 9| 1|11| 3| 9| 1| +--+--+--+--+--+--+--+--+ Возьмём четыре пустых байта по адресу BUS, там будет хранить- ся рабочий чанк. После включения одного соответствующего бита, эти четыре байта перекидываются в создаваемую таблицу чанков. На выставление соответствующего бита в соответствующем байте будет тратиться один байт, т.е.у нас получится таблица для гене- рации размером в 16 байт (т.к. включить надо 16 бит). Каждый байт для включения бита хранит в себе: +-+-+-+-+-+-+-+-+ |x|x|0|0|y|y|y|y| где xx - номер байта чанка; +-+-+-+-+-+-+-+-+ а yyyy - включаемые биты; 00 - неиспользуемые биты. Вот,собственно,вся таблица: +-+-+-+-+-+-+-+-+ 01|#|#| | | | | |#| Цифры в начале показывают,для какой гра- +-+-+-+-+-+-+-+-+ дации байт. 02| |#| | | |#| | | +-+-+-+-+-+-+-+-+ Теперь расскажу, как работать с этой 03|#|#| | | |#| |#| таблицей: +-+-+-+-+-+-+-+-+ 04| |#| | | |#| |#| Допустим,что в BC у нас адрес соответст- +-+-+-+-+-+-+-+-+ вующего байта из таблицы,а в HL - адрес че- 05|#| | | | | |#| | тырёх рабочих байт, где мы последовательно +-+-+-+-+-+-+-+-+ генерим чанки,причём этот адрес должен быть 06| | | | |#| | | | кратен #100, т.е. младший байт должен быть +-+-+-+-+-+-+-+-+ равен нулю, тогда будем делать так: 07|#| | | |#| |#| | +-+-+-+-+-+-+-+-+ 1. берём байт из таблицы, выделяем два ста- 08| | | | |#| |#| | рших бита и переносим их в начало байта, +-+-+-+-+-+-+-+-+ тем самым получаем адрес байта чанка, в 09|#|#| | | |#|#|#| котором необходимо установить бит: +-+-+-+-+-+-+-+-+ 10| |#| | |#|#| |#| ld a,(bc) +-+-+-+-+-+-+-+-+ rlca 11|#|#| | |#|#|#|#| rlca +-+-+-+-+-+-+-+-+ and 3 12| |#| | |#|#|#|#| ld l,a ;hl-теперь указывает на +-+-+-+-+-+-+-+-+ рабочий байт чанка; 13|#| | | |#| |#|#| +-+-+-+-+-+-+-+-+ 2. опять берём всё тот же байт из таблицы и 14| | | | |#|#|#| | копируем его,с дубликацией,в рабочий байт +-+-+-+-+-+-+-+-+ чанка: 15|#| | | |#|#|#|#| +-+-+-+-+-+-+-+-+ ld a,(bc) 16| | | | |#|#|#|#| ld (hl),a +-+-+-+-+-+-+-+-+ rld ;дублируем; 3. копируем четыре рабочих байта чанка в таблицу создаваемых чанок. Т.е. в конце всех упрощений (извращений ;) получится такая прогза, которая, кстати, есть в приложении. BUS EQU #4800 ;адрес четырёх пустых байт CHX EQU #C000 ;размещение генерируемых чанок ORG #8002 ;.ADDR=#02!!!! DATA DB #0F,#8F,#0E,#8B ;таблица расположена в обратном DB #4F,#CF,#4D,#C7 ;порядке. DB #0A,#8A,#08,#82 DB #45,#C5,#44,#C1 ORG $ LD BC,DATA+17 LD DE,CHX CHURKI LD HL,BUS PUSH BC ;копирование четырёх рабочих LD BC,4 ;чанок LDIR POP BC LD A,(BC) ;формирование адреса RLCA RLCA AND 3 LD L,A LD A,(BC) ;копирование и дублирование LD (HL),A ;включенных битов чанка RLD DEC C JR NZ,CHURKI RET Если вам не нужно дублирование чанка,то фрагмент: ld a,(bc) ld (hl),a rld замените на: ld a,(bc) and %00001111 ld (hl),a Как говорится, всё гениальное - просто!!!