PDA

Просмотр полной версии : Картинки в 128кб



ALKO
22.10.2018, 15:55
Не имею опыта в программировании.
Подкиньте, пожалуйста, прожку, одна часть которой бы считывала содержимое заданной экранной области (например что-либо в верхнем левом углу определённых размеров) , и сейвила в сис. память подобно LDIR'у.
А вторая часть уже выплёскивала бы это содержимое в любую позицию экрана (сойдёт и познакоместное позиционирование) с учётом цветовых атрибутов.

Подобную считывалку делал на бейсике когда-то через PEEK/POKE, а выплёскивал потом подпрограммой на машинных кодах. Но там был монохром, да и многое забыл уже. Тем более как работать со 128кб, это для меня тёмный лес. Ведь у poke peek адресное пространство только до 65535.

Заранее спасибо!

null_device
22.10.2018, 18:43
Не очень понятно, что и куда вы собираетесь "выплескивать"?

Если, что, страницу второго экрана 128 Кб машины можно "впечатать" в верхнюю область памяти.

ALKO
22.10.2018, 20:30
Хочу поочерёдно загруженное через Screen$ скопировать в ОЗУ, да так, чтоб впритык заполнило 128кб. При этом размеры картинок не 256*192, а разные. Допустим, 96*64, 88*56 и т.д.
Затем эти самые картинки в любой момент отобразить на экране в любой области X Y (с познакоместным позиционирование 32 значений по X, 24 значений по Y)

Bedazzle
22.10.2018, 22:35
Хочу поочерёдно загруженное через Screen$ скопировать в ОЗУ, да так, чтоб впритык заполнило 128кб. При этом размеры картинок не 256*192, а разные.

Спрайты. :)

Нет такого понятия, как 128кб одним куском. Это набор блоков памяти по 16кб, причём некоторые использовать не получится - например, экранную область, или пзу.

Кроме этого, "поочерёдно загруженное" - если с разных экранов нужны разные куски, потребуется уже какая-то обвязка для выбора нужного кусочка и сохранения в память, да ещё и хранить размеры сохранёнок где-то.

Чтоб не возиться с программированием - ZX paintbrush в помощь. Загружаешь туда экран, вырезаешь нужный кусок, и сохраняешь как последовательность байт.
Потом все эти куски клеишь в большие блоки по 16кб или около того. Тут главное не забыть про размеры спрайтов и не перепутать порядок, эта информация потребуется для последующей отрисовки.

ALKO
23.10.2018, 08:47
Это набор блоков памяти по 16кб

Мне непонятно, как эти самые страницы адресуются.
Ведь что в бейсике, что в ассемблере с адресами работают сдвоенные регистры 16 бит, а это 65536 байт.

- - - Добавлено - - -


Загружаешь туда экран, вырезаешь нужный кусок, и сохраняешь как последовательность байт.

Но это всего лишь инфа изображений ? А как же подпрограмма отрисовки ?

- - - Добавлено - - -

Подпрограмма вывода изображений не генерится.
Ну и опять же, как эти данные запихнуть в адреса выше 64кб, не представляю даже.

https://pp.userapi.com/c850036/v850036368/a3b2f/SEgQImTea8w.jpg


https://pp.userapi.com/c850036/v850036368/a3b39/r-Ty-l2HQ8g.jpg

- - - Добавлено - - -

и почему-то оно перегнало всю экранную область, а не выделенную. Хотя нажимал save selection

Black Cat / Era CG
23.10.2018, 09:04
Ну и опять же, как эти данные запихнуть в адреса выше 64кб, не представляю даже.
А там и нет выше. Просто странички памяти втыкаются вместо других те же 64к. Они через порт переключаются, как (грубо) сменные картриджи. Почитай вот тут (https://zxpress.ru/book.php?id=116), там должно быть. Только лучше скачай и читай. Вот нужное место (http://zxpress.ru/book_articles.php?id=1842).

goodboy
23.10.2018, 10:34
Мне непонятно, как эти самые страницы адресуются.
Ведь что в бейсике, что в ассемблере с адресами работают сдвоенные регистры 16 бит, а это 65536 байт.
часть памяти (четвертинка) просто подменяется другой

как эти данные запихнуть в адреса выше 64кб, не представляю даже.
в 128ом бейсике есть рамдиск.
save! / load ! / cat ! только размер сохранённых файлов надо держать в голове/на листе
cat! показывает только имена

а программы для вырезания спрайтов в окне конечно есть.
(только я названий не помню).
вспоминаю что была аж от THD (экран для удобства временно заливался шахматкой)
ну и алексрайдер делал подобное (вроде его aer просил), прога должна быть тут на форуме

Reobne
23.10.2018, 12:10
Нет такого понятия, как 128кб одним куском. Это набор блоков памяти по 16кб, причём некоторые использовать не получится - например, экранную область, или пзу.
Однако 128Кб - это всё ОЗУ, и среди этого ОЗУ нет ПЗУ. ПЗУ - отдельно. :)

drbars
23.10.2018, 12:22
Держи дружище :)

Когда содержимое считывается, то координаты X,Y должны быть в пределах экрана, а длина и высота не выходить за границы экрана. Также длина и высота не должны быть нулевыми. Каждый вызов подпрограммы считывания запоминает новый спрайт и даёт ему номер. Подпрограмма последовательно заполняет всю 128-ую память на страницах 1,3,4,6. Можно запомнить до 256 спрайтов, если памяти хватит. Обработки ошибок почти нет, так что внимательнее с цифрами.

Выплёскивание возможно с любыми X,Y, даже отрицательными. Границы экрана отсекаются. Для выплёскивания задаёшь X,Y и номер спрайта.

Пример работы на бейсике во вложении.

SoftLight
23.10.2018, 12:41
Он пишет 'Не имею опыта в программировании' ты бы хоть с исходниками выложил так то все здорово работает да.

goodboy
23.10.2018, 13:58
во, нашёл http://zx-pk.ru/threads/17811-sprite-graber-proba-pera.html
"SpriteGraber предназначен для создания наборов спрайтов из экранных файлов ZX-Spectrum. Программа позволяет загрузить стандартный экранный файл (6912 байт), вырезать из него один или нескольких спрайтов и сохранить файлы в двух различных форматах: блок графических данных набора спрайтов и модуль, содержащий процедуру вывода спрайтов вместе с образами спрайтов."

AndTorp
23.10.2018, 17:01
Для подготовки спрайтов можно использовать программу SpriteLand v1.27 by Flying / Digital Reality'99 (https://vtrd.in/system/SPRL1_27.zip)

Если на уровне алгоритма, то можно написать функцию, работающую из бейсика (книга ""Элементарная графика" - Инфорком'92).
Что-то типа DEF FN s(spriteNumber, x, y) = USR адресФункции (ниже #c000)
В памяти хранить данные о спрайтах: банк памяти (1 байт), адрес в банке (2 байта), ширина (1 байт), высота (1 байт), наличие цветовых атрибутов (1 байт).

null_device
23.10.2018, 17:11
Мне непонятно, как эти самые страницы адресуются.
Ведь что в бейсике, что в ассемблере с адресами работают сдвоенные регистры 16 бит, а это 65536 байт.

А вот тут, начинается самое увлекательное: эквилибристика с впечатыванием в адресное пространство нужной страницы (верхние 16К, т.к. туда можно впечатать любую страницу), копирование нужного спрайта или серии спрайтов в "буфер" (область, ниже верхних 16К), работа с полученными данными (т.к. сразу печатать их на экран слишком "по-нубски", хотя, можно использовать "второй" экран рисуя сразу в "теневой").

Более подробно устройство памяти описано в книжке "... для пользователей и программистов".

Bedazzle
23.10.2018, 23:33
Он пишет 'Не имею опыта в программировании' ты бы хоть с исходниками выложил так то все здорово работает да.

Полюбасу без азов программирования фиг что сделаешь.
Готового-то ничего нет :)

ALKO
24.10.2018, 08:32
То есть из бейсика можно щёлкать верхними 16-ти килобайтными страницами командой OUT (хмм... а какой адрес порта?), (...и значения) ?

goodboy
24.10.2018, 10:35
То есть из бейсика можно щёлкать верхними
можно, только зачем. я же тебе рассказал про РамДиск,
сохраняя на него не надо париться что и где точно лежит.
сохраняешь откуда надо, а потом грузишь куда надо.

Destr
24.10.2018, 14:51
можно
Вроде бы напрямую щёлкать портом бейсик не даст (каждое прерывание что-ли правит потр страниц #7ffd). Через POKE куда-то в район буфера принтера вроде щёлкают...
Рам-диск это хорошо, но и сам пусть попереключает - разберётся хоть как устроена расширенная память...

goodboy
24.10.2018, 18:19
пусть попереключает - разберётся хоть как устроена расширенная память...
сомневаюсь, у него почти все подобные начинания быстро глохнут

ALKO
25.10.2018, 11:24
сомневаюсь, у него почти все подобные начинания быстро глохнут

:v2_dizzy_tired2: да, я криворукий.

- - - Добавлено - - -

Мне просто приснилось, как я замутил крутую демку на спек.
На миг показалось, что сон вещий... эххххххххххх......

- - - Добавлено - - -

можно попробовать упихнуть её и в 48кб.
Но хотелось бы заюзать потенциал 128 кб.

Destr
25.10.2018, 12:34
можно попробовать упихнуть её и в 48кб.
Но хотелось бы заюзать потенциал 128 кб.
На 128 потенциал совсем дохлый.
Всего что там есть хорошего - это два экрана.
А доп.память так погано реализована что кроме как рам-диск её толком и не заюзать.
Вот если бы можно было впечатывать ЛЮБУЮ из страниц в ЛЮБУЮ из четырёх областей - то тогда было-бы рили круто (вроде это сделано в spectrum 3+ или 2+)
В общем пиши всё будто под 48, только второй экран тебе в помощь будет, а всё остальное - LOAD! (ну рам-диск, типа с диска грузишь)

ALKO
25.10.2018, 16:32
вот в комплекте с ZX Like Пасцал от Эндрю есть годная утилита, преобразующая в BMP-шки в спрайты... Но там монохром.
Хмм... как бы поступить... BMP2SCR хорош, но он фулл-скриновый.

- - - Добавлено - - -


во, нашёл http://zx-pk.ru/threads/17811-sprite-graber-proba-pera.html
"SpriteGraber предназначен для создания наборов спрайтов из экранных файлов ZX-Spectrum.

В Спрайт грабёр пока не особо вник.

- - - Добавлено - - -

Там надо сперва Screen поместить на дисковый образ. Хммм.
Привык работать только с ТАПками из Bmp2SCR, Paintbrush

- - - Добавлено - - -

Через Пэинтбраш было бы весьма удобно гонять.
Только как сохранить массив асм-данных именно выделенного ректангла? И как сгенерить подпрограмму вывода этих самых данных из памяти на экран ?

- - - Добавлено - - -

BMP2SCR почти то, что надо. Там и компрессия упакованных данных, и Bounds можно задать.
Но есть одна неприятная вещь - то, что за границами выводимого изображения, он закрашивает белым.

Dart Alver
25.10.2018, 20:13
По поводу вырезки спрайтов из экрана, можно пользовать плагин spriter из BGE. Он может и в цвете и без и с разными размерами.
Если нужно блоком, то сохранять CODE, если ассемблерными DBшками - то компиляция.

По поводу выгрузки файла спрайтов - неплохой вариант эмулятор Xpeccy от SAM style. При вызове основного меню эмулятора 'Options' во вкладках Storage/Disk доступен весь каталог диска, выбрать файл и сохранить как row

По поводу загрузки экрана. В последней версии BGE (3.11) есть фича - когда при нажатии файра в любом месте экрана убираются иконки и стрелка, можно загрузить средствами эмулятора новый экран прямо в память. К сожалению отдельной опции (как в fuse) у xpeccy нет , поэтому несколько извратно: ESC (вызов дебаггера) , Ctrl+O (загрузить блок памяти), выбрать файл, установить Start #4000 , Length #1b00 (остальное само приложится), Ok, ESC (закрыли дебаггер), и файр в BGE. Экран загружен.

- - - Добавлено - - -


На 128 потенциал совсем дохлый.
Всего что там есть хорошего - это два экрана.
А доп.память так погано реализована что кроме как рам-диск её толком и не заюзать.
Ну как бы погано она не была реализована, тем не менее она есть и это уже потенциал, хотя бы и как рам-диск. А так да, одно окно это ни о чём, а два уже не стандартный клон )))

krt17
25.10.2018, 22:47
Через Пэинтбраш было бы весьма удобно гонять.
Отлично сохраняет ZX-Paintbrush выделенный прямоугольник в любом формате. Выделять нужно познакоместно, иконка с 8
https://i.imgur.com/9t958fS.png
А сохранять через
https://i.imgur.com/RADiVNW.png
Затем задается нужный формат (нас интересует asm) и следование байт, выбор не такой конечно как в 7up но можно и с ним жить.
В чем проблема непонятно.
Жги, давно не было нормального угара, ты и AER подзабросили, остальные шлак какой то клепают.
https://zxaaa.net/screen9/harsh2.png https://zxaaa.net/screen9/satan2.png

ALKO
26.10.2018, 09:39
Вот так и я делаю.
Выделяю с шагом знакоместа
https://pp.userapi.com/c848732/v848732604/a7c45/EoLsBZ5UUws.jpg

Затем:
https://pp.userapi.com/c848732/v848732604/a7c4c/TUywBLE9XeY.jpg

https://pp.userapi.com/c848732/v848732604/a7c54/lv-1VkJ-IqU.jpg

https://pp.userapi.com/c847221/v847221604/1180e7/3YQC4wQqV1I.jpg


Но в результате получаю массив данных ВСЕЙ экранной области 256*192 + атрибуты.
https://pp.userapi.com/c849036/v849036801/a4c89/CwIxlFxTQ3I.jpg

И на каком этапе я туплю?

- - - Добавлено - - -

Ааааа... Понееел.
Оказывается это разные кнопки. Я думал, что они дублируются.

https://pp.userapi.com/c850428/v850428166/2fa5b/3125hRbf2wM.jpg

- - - Добавлено - - -

Но вопрос по программе для вывода этого массива данных на экранную область по-прежнему в силе.

krt17
26.10.2018, 10:30
Но вопрос по программе для вывода этого массива данных на экранную область по-прежнему в силе.
А в чем проблема? Вывод линейной или познакоместной области на экран задача несложная. Если неохота возится я думаю многие из местных начинающих кодеров помогут, да и народ поопытнее тоже разомнется с удовольствием, подобные штуки делать легко и быстро.

ALKO
26.10.2018, 16:06
Жги, давно не было нормального угара

Хочется чего-то масштабного. Но на бейсике особо не размахнуться. А в асме я нубец тот ещё. Знаю, конечно, азы. Но так вот виртуозно, как демосценеры налегке чудят, мне до такого никогда не добраться.
Но и не хочется так как раньше я клепал, под 48к и бибер. После того, как мне проапгрейдили кампутир, я презираю такой формат. Теперь адепт секты 128+AY

Начал уже мутить арт для задуманного. Именно в таком виде оно мне приснилось.
https://pp.userapi.com/c834304/v834304063/156226/A3wGncCsaIE.jpg

Destr
26.10.2018, 16:38
Но так вот виртуозно, как демосценеры налегке чудят
Демо это совсем другое. И приёмы другие, и хранение данных и цели и вообще всё
Если ты на бейсике шлёпал - то вполне можешь начать клепать на асме с тем-же качеством например, но скорость будет выше просто (при этом не будет ограничений бейсика даже компилированного).
Неплохо для начала...
Вон книжка как такое делать - Как написать игру на ассемблере для ZX Spectrum (http://zxpress.ru/book.php?id=2)

ALKO
26.10.2018, 16:42
В запланированной деме мне скорость не критична. Просто васик каждой своей командой сжирает много памяти, что сокращает место для контента.

Destr
26.10.2018, 16:44
А, пардон, я не так понял, думал гама планируется... (ящер меня с толку сбил)
Хотя если на бейсике демы делал, то в принципе асм прикручивать (хотя-бы вызовами подпрограмм через randomize usr) - хуже не будет...

Shiny
26.10.2018, 17:11
А, пардон, я не так понял, думал гама планируется... (ящер меня с толку сбил)
Хотя если на бейсике демы делал, то в принципе асм прикручивать (хотя-бы вызовами подпрограмм через randomize usr) - хуже не будет...

Чему ты молодняк учишь?

ALKO
26.10.2018, 17:54
Чему ты молодняк учишь?

Да я и сам знаю, что такой подход хромой на все десять лап. Но только так я и осилю.
Хотел анимированный комикс под музыку сделать, а там нужн таймер, отладку которого проще выполнять через бейсик, нежели париться с инкрементом/декрементом регистров ассемблера, с последующими call, jp nz и тд..

Destr
26.10.2018, 19:26
Чему ты молодняк учишь?
Да пусть хоть так шевелятся, чем вообще никак :)

krt17
26.10.2018, 20:20
Сделал двухэкранный комикс из DrWho, валялся табличный фейдер, удобный случай применить.
Ты там рисуй что надо ктонить сделает тебе комикс :)

ALKO
26.10.2018, 21:57
Нот бэд.
Но у меня своя мысля по поводу появляющихся фреймов.
Нужна лишь подпрограмма вывода картинок из asm-файлов пэинтбраша, которой можно было бы передавать X,Y в качестве аргументов позиционирования на экране (32*24).

krt17
27.10.2018, 00:11
Нужна лишь подпрограмма вывода картинок
Так барс же предложил хороший вариант, чем не устраивает?

ALKO
27.10.2018, 01:44
Так барс же предложил хороший вариант, чем не устраивает?

Тама у меня крашила прога, всё потому, что я по привычке грузил TRDos через Basic 48k (хотя машына была выбрана 128k) - usr 15616.
А тут оказывается Basic 128k надо было.
Непривычный редактор в нём меня всегда шугал.

- - - Updated - - -

https://pp.userapi.com/c847124/v847124178/117125/0MG-AJQ5Too.jpg
Попробую разобраться.:v2_dizzy_vodka4:

ALKO
27.10.2018, 09:16
Так-то всё понятно для нуба, но реально ли через интерфейс 48k бейсика такое проделать? Иль там недоступны будут эти самые 16кб окны ?

goodboy
27.10.2018, 09:35
набери в 128ом бейсике usr0, после сброса у тебя будет 48ой редактор, но доступ к страницам останется.

ZX_NOVOSIB
27.10.2018, 12:36
там нужн таймер, отладку которого проще выполнять через бейсик, нежели париться с инкрементом/декрементом регистров ассемблера, с последующими call, jp nz и тд..
инкремент/декремент регистров не нужен же. Есть же адреса 23672/ 73/ 74
Это системный счетчик, можно просто его мониторить через LD / CP и всё.
Или вообще юзать напрямую из асма бейсиковскую паузу:
LD BC, число
CALL 7997

drbars
27.10.2018, 18:07
набери в 128ом бейсике usr0, после сброса у тебя будет 48ой редактор, но доступ к страницам останется.
вообще-то нужно набрать spectrum для перехода в 48ой редактор, с сохранением содержимого бейсика.

ZX_NOVOSIB
27.10.2018, 18:17
с сохранением содержимого бейсика.
Мож ему без сохранения надо. Мож ему токенами удобнее набивать. ;)

Gutten
27.10.2018, 19:56
С рамдиском есть подвох: если на него много записать, то сохранения будут портиться. Что-то в духе "каталог рамдиска повстречается с содержимым рамдиска и начнут затирать друг друга". Он вроде растёт навстречу типа стека.
Не помню где читал про это, может в описании ошибок пзу128.

SfS
28.10.2018, 10:15
Ну экран 6912 байт. 10-12 экранов влезет в рам диск

Andrew771
06.11.2018, 17:29
Подкиньте, пожалуйста, прожку, одна часть которой бы считывала содержимое заданной экранной области (например что-либо в верхнем левом углу определённых размеров) , и сейвила в сис. память подобно LDIR'у.
А вторая часть уже выплёскивала бы это содержимое в любую позицию экрана (сойдёт и познакоместное позиционирование) с учётом цветовых атрибутов.

В ZX Like Pascal для этого имеются встроенные операторы WindowGet, WindowPut и WindowSet.
Но если надо на ассемблере, то вот они:




; ===== _window_get_put =====

; сохранение окна в памяти
; вход: нет
; выход: нет

getimage ld de,addr_virt_screen
ld hl,col_window
ldi
ldi
ldi
ldi

ld hl,(col_window) ; l=col_window, h=row_window
ld a,(height_window)
ld b,a

getimage_01 push bc
push hl

LD A,H ; расчет адреса первого байта знакоместа в HL
RRCA
RRCA
RRCA
AND A,224
ADD A,L
LD L,A
LD A,H
AND 24
OR 64
LD H,A

dup 8
push hl
ld bc,(width_window)
ld b,0
ldir
pop hl
inc h
edup

pop hl

inc h

pop bc
djnz getimage_01

; +++++ _flag_attr_window +++++

ld hl,(col_window) ; l=col_window, h=row_window
ld a,(height_window)
ld b,a

getimage_02 push bc
push hl

LD A,H ; расчет адреса атрибутов знакоместа в BC
RRCA
RRCA
RRCA
LD C,A
AND 31
OR 88
LD B,A
LD A,C
AND 252
OR L
LD C,A

ld h,b
ld l,c
ld bc,(width_window)
ld b,0
ldir

pop hl

inc h

pop bc
djnz getimage_02

; ----- _flag_attr_window -----

ret


; вывод окна из памяти
; вход: нет
; выход: нет

putimage ld hl,addr_virt_screen+2
ld de,col_window+2
ldi
ldi

ld de,(col_window) ; e=col_window, d=row_window
ld a,(height_window)
ld b,a

putimage_01 push bc
push de

LD A,D ; расчет адреса первого байта знакоместа в DE
RRCA
RRCA
RRCA
AND A,224
ADD A,E
LD E,A
LD A,D
AND 24
OR 64
LD D,A

dup 8
push de
ld bc,(width_window)
ld b,0
ldir
pop de
inc d
edup

pop de

inc d

pop bc
djnz putimage_01

; +++++ _flag_attr_window +++++

ld de,(col_window) ; e=col_window, d=row_window
ld a,(height_window)
ld b,a

putimage_02 push bc
push de

LD A,D ; расчет адреса атрибутов знакоместа в BC
RRCA
RRCA
RRCA
LD C,A
AND 31
OR 88
LD B,A
LD A,C
AND 252
OR E
LD C,A

ld d,b
ld e,c
ld bc,(width_window)
ld b,0
ldir

pop de

inc d

pop bc
djnz putimage_02

; ----- _flag_attr_window -----

ret

addr_virt_screen equ 57344 ; адрес вирт.экрана
col_window defb 0 ; столбец окна
row_window defb 0 ; строка окна
width_window defb 0 ; ширина окна
height_window defb 0 ; высота окна

ALKO
09.11.2018, 15:44
Пока что до кода не добрался. Пилю арты и музло. Где-то половина работы проделана в этом направлении.
А вот что касается кода... Ну вроде бы Барсовы процедурки устраивают, правда на деле ещё не гонял.
Но помимо этого мне бы процедурку заполнения экрана заданными тайлами 8*8 (например дизеринг, или диагональные полосочки), но не просто заполнение, а OR.
Понели как хочу? Типа шоб предыдущие слайды были на месте, но они как бы покрывались дизерингом, а поверх накладывался следующий слайд, как диалоги диззи.
Надо бы ещё окантовку какую-то. Типа Bright 0 падающую тень. Или, фиг знает, синий пэйпер. Шото такое. Как в дос-окнах.

ALKO
11.11.2018, 10:48
Во, такое реализовать хочется в виде комикса.
https://youtu.be/NpNTAf1gAho?t=14

В смысле сам принцип отображения слайдов

- - - Updated - - -

музон уже готов. Осталось арты дорисовать... ну и запихнуть в прогу как-то.

Andrew771
11.11.2018, 20:06
Делай спрайтами тогда, а не экранами.

ALKO
27.12.2018, 09:49
Всё ещё рисую арты. И всё меньше верую в то, что оно уместится в память, если не использовать хотя бы RLE-компрессию.

Bedazzle
27.12.2018, 11:14
И всё меньше верую в то, что оно уместится в память, если не использовать хотя бы RLE-компрессию.

А что мешает использовать?

ALKO
27.12.2018, 13:39
А что мешает использовать?

Я конкретный нуб в ZX-прогинге. Бейсик - максимум что осилю на этой платформе.

Bedazzle
27.12.2018, 14:33
Я конкретный нуб в ZX-прогинге. Бейсик - максимум что осилю на этой платформе.

Ну, к примеру, берёшь zx7. Компрессор - это пц утилитка, на выходе получаешь файлик.

Дальше на спеке бейсиком:
- грузишь пожатый файл,
- грузишь распаковщик (на выбор один из трёх, в зависимости от того, что тебе требуется - максимальная скорость, или минимальный размер),
- заполняешь несколько покесов (адрес местоположения пожатых данных, адрес места назначения)
- запускаешь распаковку rand usr-ом,
- используешь блок полученных данных по своему усмотрению

P.S.
распаковщик один на много мелких кусочков пожатых данных, нужно только перед каждым запуском нужные значения подставлять. А можно вообще из васика передавать значение в машкод без покесов через def fn.