;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 Как говорится, всё гениальное - просто!!!