======================================= Специально для журнала "Info Guide №13" ======================================= (C) Dragons' Lord - март 2021 3D-движок, опублкованный в прошлом номере, был существенно доработан, и для него был написан новый (совершенно фантастический для 8-битного компьютера) пример. Передаём слово автору примера - Dragons' Lord: --------------------------------------- 1. Исходный 3D Engine Чтобы не запутаться во множестве модификаций движка, с некоторых пор я стал давать условные цифровые значения версиям. Моя классификация: - 3D engine 0.01 изначальный прототип 2016 года - 3D engine 0.02 введение кренов - 3D engine 0.03 исправлены некоторые глюки переполнения - 3D engine 0.04 введены автоопределение мыши и прыжок - 3D engine 0.05 промежуточная "nointerlace1к", как её назвал сам автор - 3D engine 0.06 "fixinterlace" зевершена дописка режима "solid state screen" без интерлейса - 3D engine 0.07 введена возможность цветного видео-вывода на компьютере АТМ - 3D engine 0.08 написана функция "panorama 360", печатающая растровую графику на задник - 3D engine 0.09 добавлена окраска неба, продолжающая рисунок панорамы. Версией "3D engine 1.00" я буду считать полностью 3х мерный вариант, подходящий для реализации "Elite". Сейчас движок обсчитывает пространство по упрощённым формулам и реализация полноценного 3D не представляется возможной. Текущая версия отлично подходит для шутеров от первого лица и реализации maze аля Вольфенштейн или Doom. То есть, 2х мерные уровни. Хотя иммитация крена и прыжки присутствуют. --------------------------------------- 2. Моя модификация Отмечу, что модификации подвергалась версия оригинального движка "3D engine 0.06", но потом результат бы объединён с версией 0.09. Крены для данной задачи выключены. Во-первых, нужно понять, зачем модификация вообще нужна. Исходный движок имеет ряд моментов, путающих юзера. Формат осей, используемых при проектировании самих объектов (вертексов): ось X - от нас, ось Y - вправо, ось Z - вниз. Формат пространства в которое вы помещаете эти объекты в основном модуле кода: ось X - на нас, ось Y - влево, ось Z - вниз. Формат пространства в котором перемещается сам персонаж (т.е. камера): ось X - от нас, ось Y - вправо, ось Z - вверх. Как заметит внимательный читатель, пространства не бьются никак. И если инверсию первого логично объяснить, так всегда бывает, что после преобразования камеры объекты инвертируют свои оси, то несовпадение последних двух мерностей приводит к полной невозможности программировать адекватные перемещения объектов в мерности перемещений камеры. В исходном движке этот момент не решён. Второе серьёзное ограничение применимости движка заключается в размерностях его сцены. Хотя, для координат и используются регистровые пары, т.е. 16 битные значения, но движок способен адекватно обсчитывать только мерность -1023...0...+1023 по всем осям. Далее идёт повторение объектов сцены. То есть, если вы поставите столбик в координаты 0,0,0 и побежите в любую сторону, то через 2048 внутренних единиц пространства вы снова прибежите к данному столбику, но уже с другой стороны, и так многократно через каждые 2048. Причём в виду упрощёнки обсчёта положения объектов, о котором я уже упоминал, вы уже не сможете взаимодействовать с этим объектом адекватно при любом повороте камеры объект будет хаотично скакать по сцене. Адекватная работа с углами будет только в пределах нулевого квадранта. Модификация логики отображения объектов в мерности сцены призвана решить обе проблемы разом. Как это сделано: в модуле управления "script.asm" вывод рассчитанных значений mcamx и mcamy перехватываются и выводятся не в них, а в новые ячейки памяти camX, camY, оставляя mcamx и mcamy в нулях. Таким образом, камера завешивается в нулевых координат мерности сцены и висит там всегда. Теперь, если нажимать на кнопки - ничего не будет происходить, мы никуда не бежим. Логика отображения мира меняется на инверсную, раньше объекты были неподвижны, а перемещали мы камеру, теперь камера неподвижна и мы перемещаем вокруг неё весь мир. Все объекты в основном коде имеют в начале блока приращение на разницу между их "изначальными координатами" и мнимым положением камеры, т.е. координатами размещаемыми в camX, camY. Всё, теперь и камера всегда в нулевом квадранте, и оси перемещений объектов проинвертировались, войдя в синергию с теми осями, которые показывает камера (z ось в данном релизе не затрагивается, потому что это не имеет смысла). Теперь можно объекты адекватно перемещать динамически: если вы дали приращение +100 по оси X, то именно это и произойдёт визуально. Также введён модификатор рэйнджа. Все объекты предлагаемого уровня поделены на условные конгломераты (пространство примерно 128х128х128 внутренних единиц), у которых проверяется дальность от мнимой камеры до координат ключевого объекта этого конгломерата. Если дальность больше заданной - конгломерат обходится по jp и не исполняется, а объекты конгломерата исчезают со сцены. Данный великолепный механизм (аналог стриминг контейнеров, который несколько лет разрабатывали разработчики "Star Sitizen", и которым безусловно гордятся), позволяет решить одновременно три проблемы. Во первых, рэйндж можно настраивать, и таким образом разгружать сцену под машину с любыми тактами процессора. Меньше дальность, меньше объектов в кадре, выше fps. Настройка в самом начале модуля "my_lunohod.asm" и выглядит так: dalnost=%11111111 256 единиц пространства - для машин с частотой процессора 3.5МГц dalnost=%11111110 512 единиц пространства - для режима турбо 7.0МГц dalnost=%11111100 1024 единиц пространства - для режима Evolution 14МГц, но не рекомендуется к использованию, либо нужно переключить range самого движка с 4 на 3 (дело в том, что максимально большой возможный объект диаметром 64 исчезает визуально с установленным range=4 примерно на дистанции 1040, то есть его будет видно у самой кромки горизонта как хаотично репитующая копия). Во вторых новый встроенный рэйндж позволяет превозмочь главное ограничение исходного движка, и набирать сцену из сколь угодно большого количества объектов, которые размещаются в сцено-образующем коде все одновременно (сейчас на сцене 200 независимых объектов). И в третих, что очевидно, вам становится доступной для застройки и путеществий вся 16 битная мерность пространства по всем осям. Причём, без страха встретить повторное появление объектов из другого квадранта. Теперь вы можете строить город на карте 0..65535 размера. На экран выводятся ваши координат в формате XXXXX_YYYYY_ZZZZZ и вы можете наблюдать своё положение на карте (можете отключить, 9000 тактов лишними не будут). --------------------------------------- 3. Уровень Когда основные технические моменты решены можно перейти непосредственно к творчеству, - к застройке. В качестве образца для оценки возможностей движка я выбрал модуль посадки на планету из игры "Elite Dangerous". Строить будем руины стражей, общий план застройки приведён на скрине "elite_0_05_alpha_Исходные руины стражей из игры Elite Dangerous.jpg". Застроил только всю центральную часть, - внешние маленькие застройки по углам доделывать не стал. Почему? Потому что совокупность файлов уровня сейчас как раз в пределах одной страницы памяти Спектрума, т.е. вмещается в 16384, и может при необходимости успешно храниться в банке верхней памяти 128к, как один из уровней игры. Файлы моего уровня это конкретно: "rotmodel.asm" "3dmodel.asm" "my_lunohod.asm" Сейчас они размещаются в памяти следующим образом (строго в пределах средней страницы памяти): > >>> ORG - start my level 33831 > ---------- rotmodel vertex --- size 6180 > ---------- model poly -------- size 881 > ---------- lunohod code ------ size 8416 > -----------RESULT (all my level): 15477 > >>> ORG - end my level 49308 Достроить уровень при необходимости, конечно можно - для этого нужно убрать рисунок панорамы и задать в настройках движка endfree=#10000, что даст 8K дополнительной памяти в верхней странице. Пару слов касательно формфактора реализованных построек. В уровне присутствует симуляция правильного освещения, хотя в исходном движке освещения нет. Все постройки окрашены так, как будто свет падает с одной стороны. Для этого пришлось хранить в памяти копии некоторых осе-несимметричных объектов с разной окраской. Это, конечно, плохо. Память у Спектрума не ризиновая. Если убрать эти объекты и забить на свет, высвободится примерно 1,5..2 килобайта. Но, будет не так фотореалистично. Также, кроме шейдеров вращения и синусоидального перемещения динамических объектов (для этого в проект добавлена моя таблица синусов "tsinmy"), на вращающиеся объекты накинут шейдер, симулирующий динамическое правильное освещение, аля Flat. Делается подмена цветов на гранях (в модуле POLY) при определённых диапазонах угла вращения объекта. --------------------------------------- 4. Выводы Проект делался с целью получить комплексное правдивое представление о: - Какова будет скорость отрисовки сцены аля "город". Можно отметить, что скорости на машинах со стандартными тактами (70000), действительно не хватает. Получен результат на грани критического значения min fps=8. И это в режиме интерлейса, т.е. с черезстрочным выводом. Заключаем, что демонстрируемый уровень, это максимально возможная плотная застройка. Необходимо увеличивать дистанцию между отдельными конгломератами (по сути "домами" на будущих картах). Также на предложеном примере видно, что в "близоруком" режиме с рэйнджом 256 затруднено ориентирование в пространстве, особенно у человека, который никогда ранее не видел этот уровень. Введение карты в любом виде, с обозначение игрока и строений, - обязательное условие. - Каково будет визуальное восприятие различных объектов. Можно отметить одну, как не странно, но техническую проблему. Максимально возможный размер одного элемента = 64. Чтобы изобразить что-то фундаментально большое, необходимо уменьшить "рост", а по сути приращение по +z в файле "script.asm" с дефолтного #020 до #010. Тогда двухуровневые строения "с крышей" воспринимаются максимально адекватно. Но при этом обратной стороной медали, вступающей в противоречие с первой, является отрисовка плоской плитки под ногами, которой кое-где рекомендуется мостить мостовую (значительно облегчает ориентирование в "сферическом вакууме"). Плитка не может адекватно отрисовываться с высоты такого малого роста из за фейковости отрисовки объектов в движке, - плитку начинает бить в неадекватных конвульсиях. Приходится выбирать некий компромис, ухудшающий указанные параметры на некоторое значение. А увеличивать этажность застройки вы не можете, потому что не хватит быстродействия для отрисовки столь многокомпонентных конгломератов. Если вернуться к восприятию объектов, то показано, что сложные многокомпонентные "дома" из нестандартных арочных конструкций уменьшеной толшины смотрятся отлично. В то же время отдельно стоящие простые геометрические формы выглядят отвратительно и не воспринимаются мозгом, как некие "постройки". Даже в случаях, когда таких мелких отдельно стоящих объектов много в кадре. При строительстве стоит придерживаться правила "редко, но метко". Мозг хочет, чтобы строение было с "крышей", под которую можно зайти. - Каковы будут размеры занимаемой памяти. Память расходуется быстрее, чем ожидалось. Я уже описывал структуру уровня выше, здесь можно отметить, что создание подобных уровней вполне возможно, если держать свои хотелки в некоторых рамках. Демка показывает строго статическую картину строений. Геймплея нет. Динамических объектов (дронов стражей) нет. Взаимодействия с объектами нет. Интерактивного изменения построек нет. Процедурной генерации высотопеременной почвы и случайных RND объектов вне зоны руин нет. Всё это планировалось и может быть написано без проблем. Нет этого по причине желания не засорять код демо уровня. Для новичка необходимо постепенное знакомство с 3d engine. Вот чего наверняка не будет никогда - это физики. Я говрю о запрете игроку ходить сквозь стены. Для уровня с произвольной застройкой в рамках 3.5МГц это не решаемая задача и предлагается оставить, как есть. Полагаясь на фантазию игрока. В проектах аля "Вольфенштейн", с регулярной картой, физика реализуется весьма просто. --------------------------------------- 5. Заключение Я не нашёл предела количеству одновременно отрисовываемым объектам, хотя проверял где-то до количества 60 штук. Это означает, что у вас скорее fps устремится к нулю, чем вы сможете навыводить кучу объектов в попытках завесить систему. Это приятно. Особенно это греет душу, когда вспоминаешь ограничения в стандартной Спектрумской "Elite" - не более 6 динамических объектов одновременно + станция. Здесь же можно выводить сколько угодно, если это вписывается в выделенную память: ---------- 52016 .. 52992(_tables) free for object list 976 (один выводимый объект занимает 16 байт). По скорости отрисовки: если представить стандартную "Elite" и взять нормальные выпуклые объёмные объекты, то можно смело отрисовывать 4 таких объекта в кадре одновременно (~60 полигонов). fps не упадёт ниже 10 при любых приближениях. Это вполне юзабельно. 5 объектов одновременно (~75 полигонов) - fps не упадёт ниже 8. Это критически, но допустимо. Естественно, я имею в виду режим интерлейса. Так что "Элиту" с залитыми гранями реализовать технически возможно, если допилить расчёты внутри движка до полноценного 3D. Очень понравился выдеовывод. Я в восторге. Скорость заливки и вывода видеобуфера на экран запредельная. Это единственный движок, где вы практически ничего не теряете, задавая область отрисовки на весь экран Спектрума. Отрисовка занимаеть лишь малую часть общего времени расчётов. Максимально нагружает систему обсчёт вертексов, поэтому примите правило не плодить лишних вершин без критической на то необходимости. Благодарю Alone Coder'а за великолепную работу и надеюсь на полную 3D реализацию. С уважением, Dragons' Lord. Con18 - PC ZX Spectrum. : 1. Select File (bmp, png, tga, jpg, gif). 2. . , : LMB=set topleft corner, RMB=set bottomright corner. 3:4 3:4. 3. (Brightness), (Contrast), (Saturation) (Dithering level). 4. : - to Multicolor ( 8x1 , - Limit MC; Multicolor level "" ) - to MCX ( , ) - to 6912 ( ) - to Gigascreen ( ) - to 8col ( , 8 ) MCX viewer. Gigascreen BGE DBS. 8col AGA 8col editor. 5. Floyd ( ), , . LMB , RMB Floyd. 8 , . , ( Gigascreen ). 6. - , Save. , . (Load). *.emg ( Gigascreen, ) *.ch$ ( - 384x304 viewer Info Guide #8). . . Bright Only . Floyd ( ). 5 chunks 2x2 . . 16- .act (Photoshop) "Pal". Gigascreen, . 2 . Gigascreen MCX + = +. Inferno/Info Guide Hexagonal Filler Wolfenstein 2004. : .scr 6912 .img 6912 6912 .3 6144 ( ) B,R,G .mc , , .mcx , , , , .ch$ +0 "chr$" +4 +5 +6 : 8=/, 9=, 18=2- . +7 , , .emg 6144 ( deco256.dat): - Y,X Y+1,X , 1536 ( ) , .act R,G,B 0 - R,G,B 1 - ... R,G,B 15 - con18. Alone Coder, 14.ii.2014Fast ZX AY-Dump Player (with PC Compiler) ------------------------------------ codename: ay_zip_player ver 1.2 thx to Robus for cool idea! thx to Griv for some code optimization thx to ayfly.dlls authors for cool stuff! ------------------------------------ ()2012 TmK^[deMarche] ------------------------------------ Links: 1) http://zx.pk.ru/showthread.php?t=14307 - Discuss on russian community board (zx.pk.ru) 2) http://www.worldofspectrum.org/forums/showthread.php?t=32047 - Discuss on english community board (WOS)Hardy - Rick Dangerous ( , ) ( ) Rick Dangerous, , (, ) Metroid, Spelunky, Cave Story, Celeste? X- , . 2 , 8x2 - 1 , ( ) / / + ( , ) / ( Rick Dangerous), 48/128/[+3 ]/[Pentagon ] 48/128K : 48 , 128 (slow memory), (slow memory), (slow memory), (slow memory?), (fast memory), (fast memory) - 48 , goto usr..., bc= , , + out + ( slow memory)? ( , - , ) 64+48(64+56 ) = 25088 t , out (-1792, 8- - ) : - [ - ] - - , - - [ ( , , ) - , 4 ( 2 ), , . , (2 - 1 ). 2 , ( !!!)? : ) ( ); ) , ( ) - ; ) ld:push 1 - ( 128); ) 2 128, 48 ; ) ; ) , ] - [bullet hell ( exolon?)] - [/ ] - [ jetpac] - [ ( Rick Dangerous - )] 18x18, 2 ( 4 ) ( ), Rick Dangerous : - ( : , 3 , 2 , 2 , 1 ( ), 2 - 18) - ( - , 8) - (1-2 ) - (2-3 ) - - - ( ) - ? - ( ) 36 ( 64 *4 ) 7 ( 16 ? ?) 16240 ( , , ) - 48 48K: 0x6000: slowmem : 3K ( ), 16K , 256b tilemap, , .... fastmem : 4K + , 2K , 2K 8 ( Rick Dangerous 6: , , , ), +++ , - , , , .. 8*8 (, , ? ?) - , - 500t/ 18 , (130 2 ). ( ) 128 4*(64+56)=440 , 48, . 1000 , 48, ? ( ) 4 25 ( ) : , - , , < >: , L=y, E=x, ( ) 58(!) - . C ('TABLE), D=C+2. LD H,C LD A,(DE);x/8 INC D + OR (HL);L(y) - INC H LD H,(HL);H(y) LD L,A LD A,(DE);byte(x) (X)OR (HL); LD (HL),A ex de,hl ld a,(hl) ;x ld c,a add a,?xspeed ;/ld c,(hl):inc/dec (hl) ld (hl),a inc l ld a,(hl) ;yspeed inc (hl) ;yspeed++ ; inc a:ld (rp),a inc l add a,(hl) ;y ; hl, ld (hl),a inc l ex de,hl ld l,a ;y LD H,ty/256 LD b,(HL) ;H(y) inc h ld a,(HL) ;L(y) inc h ld l,c ;x or (hl) ;x/8 ; hl, LD c,A inc h LD A,(bc) XOR (HL) ;byte(x) ; , hl LD (bc),A ;48+52+10 = 110 t / call, 220 t/dot ! ( E!=0?) dot ;c=color ;a=x ;l=y srl a ;rra jr c,... rra/srl a jr c,... ld h,ty/256 add a,(hl) inc h ld h,(hl) ld l,a ; res ..,(hl):ret - , ??? ;ld a,(hl) ;set ..,(hl) ;inc h ;or (hl) ;ret nz ;no attr ;ld a,h ;rra ;add a,attr/256 - 0x40 ;ld (hl),c ;color ;ret ; xor ( ): ld a,(hl) xor .. ld (hl),a ; ret xor .. ; , inc h or (hl) ret nz ;no attr ld a,h rra add a,attr/256 - 0x40 ld h,a ld (hl),c ;color ret ;~144 t , 96 t (TODO ? ?): x,y,xspeed ( xspeed, ), yspeed, color ( , ) , ( , ) ex de,hl ld a,(hl) ;yspeed inc (hl) ;yspeed++ inc l add a,(hl) ;y ld (hl),a ld e,a ;y inc l ld a,(hl) ;x add a,b ;xspeed ld (hl),a inc l ex de,hl ;l=y ;a=x call dot ; ;90+144 t ... inc e ld a,(de) ;y ld l,a inc e ld a,(de) inc e ;l=y ;a=x call redot ; ;47+96 t ; 377 t/dot ; 32 , 19 dots (0..63): . ID_NONE .. 0..3: 4..7: 8..9: 10: (0..63): , ? - ? , , - 30x , 32 ; 28x - jp/ld sp ? - ? - ? ? - ? - 0xff? ( , -) ? ? - - ? - [ ? , ( ), ] - ( )? , , Rick Dangerous . -, , - . - ( 64 ), , , 8 15*28*(8+4) = 5040 + GLUF 24 ( 16), , 5 ( - Rick Dangerous) .. (ld..push) , 48 ( pop..push), , ( ) , (nowait) ) ldi (16t/b) = 882 ) pop:push ( , ! ! ? ? 8 ?) ( , , - 3 ) 48, 0x8000..0xb561 + 5 , (16K), (1K) pop:push ? ld sp,ix pop af pop bc pop de pop hl exx pop bc pop de pop hl ;84 ld sp,iy push hl push de push bc exx push hl push de push bc push af ;91 ( 20 , hl<>ix, hl'<>iy 22 ) inc hx/??? inc hy/??? ;16 ;min = 191t/14b > 13.6 t/b = 1034 (73 3 8 ) ix hl, iy hl', down hl/up hl down hl/up hl pop:push, ( inc .. : hl, hl'): POPPUSH inc h POPPUSH inc h POPPUSH inc h POPPUSH inc h POPPUSH inc h POPPUSH inc h POPPUSH inc h POPPUSH rrc h POPPUSH ;attr dec h POPPUSH ;attr dec h POPPUSH ;attr dec h POPPUSH ;attr ld a,l add a,14 ld l,a 290 + 15+15 + 290 = 610 prspr ( , ): ld sp,hl exx pop bc <--------------- b=scroller/256 ld a,c out (0xfd),a ;-1t pop hl ;gfx <------------ dw scroller pop de ;scr ld sp,hl pop hl ;l = f(hgt, x&4) <----------- scroller ld h,b ;f(yphase) jp (hl) ;f(yphase,sprhgt) (3 !) : INT AY , 25 : INT AY , INT AY [, ] - , .. ? TODO , ? ? 2 , =3 : 4 ( , 5 , 10) 4 ! 2 2 ? (, , .. , ) 128 , (2 ) ( ): ... , ( ) ( 25088 - 1000(AY) - ; = 14058/3 = 4686 ( 70 = +)) 5 INT , { , hl,hl' INT 3 AY 5 , hl,hl' INT 3 AY 4 INT INT (!!! !!!) ??? } ( ) INT , , Нумерация по исходнику Нумерация в редакторе - на 1 больше 0 - выстрел 1 - damage 2 - попадание в монстра 3 - убийство монстра напрыгом, newlevel 4 - boss dying 5 - убийство монстра 7 - провалились через пол 9 - взяли ключ 11 - bomb ( Timex ? NTSC - ?) 18x16 ( = 24x16, 4 ) : . ( + - , ) , 8 , slowmem !!! ( ) ? , ? ??? ? ? ??? [ ??? (4 X, 4 Y)] 2 ? , , ( 12 , 2-6 : X=-2: (2)+5+12(1 . )+5, X=0: 1+12+5+(6), X=2: 3+12+5+(4), X=4: 5+12(1 . )+5+(2)) 2 , 2 3 ( Rick Dangerous II 2 , 1 , 21 , 15 , ) (S = ( ), s = , M = , S, ... ?): ...MMMss SSSSSSSS SSssMMMM ......MM ssSSSSSS SSSSssMM ........ MMssSSSS SSSSSSss MM...... ........ MMMMssSS SSSSSSSS ssMMM... , and+or , ld ( ) - ( ?) , ? ? ld:ld , jp ( ld sp, 4 ?)). , sp jp, . , HGT LSB ( , .. - downhl) ? ? 2 = 136+36 = 172/ (1376 8 ) - ( 3- downhl8) .. 18x18, = 18*11-1( inch)+2*9(downhl8)+3(ld:ret) = 218 b, (+4 b) = +5t/ (bc , 2 downhl8 (1 downhl8attr), +5, -4t/) , ( ) = -32[+4( inc l )]/ POPAr_LDr_APOPd? ( ) - , 12t/ (, , .. ) 128 pop af:out (c),a = +22/ (out (0xfd),a = +21/), ( ?) X , 2 X *4 Y, 8 POPAORr_POPLDr_APOPORd_APOPORl_LDl_POPAORd = 176t/doubleline = (6+3+6 + 6+2+6 = 29) b/doubleline ( , - X )? inc h macro DOWNHL8 ld a,l sub -32 ld l,a ;NC=next third sbc a,a and -8 add a,h ld h,a ;-8/+0 endm ;38t (+34 inc h) ? triple buffering - , , , - 4*6 16x16 ( , ) 3 n 3 16-n 3*3 ( sprhgt) (L ), - ? , ? contention, , .. 128..191 ... ld (hl),c ;+7 dec h ld (hl),b ;+23(18) ( 5t) dec h pop bc ld (hl),c ;+47(44) ( 3t) ... 4t/b * 8*(18*3+9*2) = 4*576 = 2304t 128/224: 1316.6t ( 6 ) (1.5 ) , attr fastmem , , 224t 1296t (6 ), ? : + , , ( ): ; pop iy:pop ix ( 3 ), , ( ???) - ix??? pop af:jr c:pop ix:pop iy? ( - add hl,de) ; iy ; iy () 18 - 2 ; ( ): ;- pg? ;- (x&4)!=0? ( 4t ) ; x ( ) ; prspr, x, y ;, ret, : exx pop de ; de', bc ld a,d out (0xfd),a ;pg ( 0b010xxxxx, 1ffd) ld a,e ;f(yphase) pop hl ;gfx pop de ;scr ld sp,hl pop hl ;l = f(hgt, x&4) ld h,a ;f(yphase) jp (hl) ... jp[x<4]/inc hl...inc l[x>=4] ... ex de,hl ;91 ( 70+4(nop/incl)) = +21 (17?) ; +22t/??? !!! ( pop af:out (c),a:ret = 32, 77-10(ld bc,7ffd)=67, .. >8.3t/ !) ; 128 121t 8 = 14.8t/!!! 3*2*8 = 48t attr=0xa300, 21t/ +1t ; 7ffd? pg? ; ? -gfx (/) 4- ( pop:ld) - 0- 1 3072 (4*768) 1536 (2*768) ( 768 768 -) 4*768 3*768 1*768 1*768*13 ~ 10000 = 45 ! 0- "-" ( ) , ? ? , 1 ( 4- ) c2p c2p: ( ): pop hl ldd ; - ! , :26/ * 32 = 832 = 3.714 ( 39936) ( 2 + 126 4- : ldi, pop, ) + ( ): pop hl ldd ; - ! ld a,(hl) ; - ! ld (bc),a ;slowmem!!! :40/ ( 61440) =66/ * 32*48 = 101376 ( 2 !!!) , ( ) 7??? 7, - 7! ( ? chmap?), pop hl:dec h (+4 /) , inc h. , 18 (#dd..#ff )!!! [ (32 ), 7.] , , ( ). c2p ? ( ) ? : : 1. (5 ) 2. 0- (45 ) 3. ? 4. 5. ( - 3) --- 6. + 6 --- 7. (56 ) ? c2p ( 3 ), . 2 = 56*2 = 112 = 25088 (3072 ). 48x40, 1920 , 88*2 = 176 = 39424 (20.5 ) c2p 2 : c2p , .. . 48x40, 1920 , 88*3 = 264 = 59136 (30.8 , 31.5) . . 48x48 64x32. - 32x48 (1536 ) - 7 . 56*3 = 168 = 37632 (24.5 , 31.5). .. - . 4 . c2p ( ), , ( , .. 7- ). c2p ( ) , , ! . c2p 5- ( ( ), !!!), c2p ( ). 32 . c2p , . . - c2p ( )? , 8 (40 ). /** , , : pop hl ld d,N ld a,(hl) ;slowmem!!! ld (de),a dec h ld d,N+2 ldd ld a,(hl) ld (bc),a :72/ - */ c2p, ( , ) 6 : !!! 5 jumpXX: ld iy,jumpYY patchXX: jp ... --- [exx] <> [exx] jp (iy) --- jumpYY: 32 ( ) + ( ) out (c),d...out (c),e ! .. d,e! ( ) ld a,hx or pg out (c),a ( a,a'): < a,a'> ... out (c),a ex af,af' ( ): < d,e> ... out (c),d/e ( - ) : ) ( ): add hl,bc ld a,h exx add hl,bc ld d,h ld e,l ld a,(de) exx ld (de),a inc e :60/ * 64*48 = 184320 ( #8000..#ffff, +8 , , c2p !!!) bc, .. ? bc sp , de (bc ld bc) /** add ix,bc add hl,sp ld d,hx ld e,h ld a,(de) ld (...),a :58/, 10 / (30720 ), - */ /** add ix,bc add hl,de ld a,h exx ld d,hx ld e,a ld a,(de) ld (hl),a inc l exx :68/ - */ /** add ix,bc add iy,sp ld d,hx ld e,hy ld a,(de) ld (hl),a inc l :64/ bc,bc' iy */ /**) 8- add hl,sp ld a,d add a,e ld d,a ld a,h exx ld h,a ld a,l adc a,b ld l,a ldi exx :67/ bc - */ ) ? , ( ) ( - ) (+0..1, +1..2, +2..3...), (V, ?) ??? /**) , 16x256 add ix,bc ;%uuuuVVVV vvvvvvvv adc hl,sp ;%???????? UUUUUUUU ld a,hx or b;#f0 ld h,a ldi :62/ bc' - u ??? 62/ add a,b:adc hl,sp:ld c,hx:ld h,c ( , ) */ ) U V - , , u v? ) 16x16: add hl,bc ;%11VVVVvv vUUUUuuu [ld a,h:or #c0:ld h,a] ld d/e,(hl) 1/2*push de :23.5 [+15] v ? ( ) bc<0 set. bc>0? ? 31.5 ) ??? ) ? - ) ? ? ? (!) , X ) 4 8 ( DMA Sound Blaster) ? : +0, +1/8, +2/8, +3/8 ... +63/8 , ~128 (128*128) c2p, - ? - c2p, ( ) 2 , 2 . 7 ? . 7? 4x2: 271000..322000 : 91739 background (ldir) 6293 rotmatrix 4000 rotate 125074 drawpolys (12 ) tmap 91862 c2p SOMMER: 431000 : 2416 rotate axes 75688 background (ldi) 45079...49324 rotate 19743..20037 prepare 3591 prepare stacks? 111698...139902 drawpolys (24 ) gouraud 154769..159248 c2p 16 test_rndnoise.scl - (, ) test_rndframeshift.scl - 16 (- , ) test_rndxyframeshift.scl - , random x+y ( ) test_xyframeshift.scl - pixel > (frame+x+y)&0xf test_chunk.scl - x+y ( - ) test_woolchunk.scl - x+y ( ), 3 pixel > frame+achunkpixelnumber[pixelnumber])&0x0f ( 50% ) realtime? frame+achunkpixelnumber[pixelnumber] achunkpixelnumber[frame, pixelnumber] 1 - : scrpixel = achunkscrpixel[pixel(4), frame(4), pixelnumber(4)] - 12 8 = 32 frame+pixelnumber = 4 , 8 - 2 . ) pixel > frame+achunkpixelnumber[pixelnumber])&0x0f ;8 abcdefgh - pop bc ;%ccccggggddddhhhh ld l,b ld b,framepluspixelnumber1 ld h,framepluspixelnumber2 ld a,(bc) ;%d000h000 rrca ;%0d000h00 or (hl) ;%cd00gh00 rrca ;%0cd00gh0 pop bc ;%aaaaeeeebbbbffff ld l,c ld h,framepluspixelnumber3 or (hl) ;%bcd0fgh0 rrca ;%0bcd0fgh ld l,b ld h,framepluspixelnumber4 or (hl) ;%abcdefgh ld (de),a inc e (d?) ;111 t/b ( 99 t/b rrca, 4 , 16, ) inc/dec h ld h , ? (16 4 19- 22- b/b, 1.5) 24, , + 48 (.. ), , 3D ( ? , 3D - ? ) 3 , 34 t/b, 8( 10) ! , ? 128 2 R-Mode 4 , 16 , (4R+4G+4B+4w) R-Mode? 4x4 , ( - ) ? R-Mode, 128 : 4R(M)+4G 8 , . 128 12 ( 8 , 128 2, , 96+6..12 , pop:ld (),hl LDI) 4R+4G+4B, ( , .. c2p 48000 ), : : - R screen1 (c2p) - G screen0, screen0 - B screen0, screen0 ( ) - R screen1 (c2p) - G screen0, screen0 - B screen0, screen0 ( ) - R screen1 (c2p) - G screen0 (c2p) : - B screen1 (c2p) - R screen0, screen0 - G screen0, screen0 ( ) - B screen1 (c2p) - R screen0, screen0 - G screen0, screen0 ( ) - B screen1 (c2p) - R screen0 (c2p) .. 16 3D ( , 3 ) 4 ( 256 ) - 64: pop bc ;4pix + 4pix ld l,b ld b,framepluspixelnumberRN ld a,(bc) ;%abcd0000 or (hl) ;%0000efgh ld (de),a inc e (d?) ;46 t/b (3 ), 16*2*256 = 8K , 12K - 48K 4 ( 256 65536)? - (17 * 17 = 256!) _/ \_ (, /- -\) ? ! ? - ? 17 , ( +-1 ) ( ) ) - , ( , 3 ) (...) , N1 N2, , N3, , N4, %11111111 ??? ??? !!! , , ! 3210, 3 ( ) 1: 3232 13.3 3232 .313 2: 2323 3.31 2323 313. 3: 313. 2323 3.31 2323 4: .313 3232 13.3 3232 5: 3232 .313 3232 13.3 6: 2323 313. 2323 3.31 7: 3.31 2323 313. 2323 8: 13.3 3232 .313 3232 0, 9 16 0, , %11111111 0, 3? [ pop bc ld a,c and N1 ld c,a ld a,b and N2 or c ld (hl),a pop bc ld a,c and N3 or (hl) ld c,a ld a,b and N4 or c ld (de),a inc e ;105 t/b] [ ld a,(hl) inc l and c;N1 ld d/e,a ld a,(hl) inc l and b;N2 or d/e ld d/e,a ld a,(hl) inc l and N3 or d/e ld d/e,a ld a,(hl) inc l and N2 or d/e ld d/e,a 1/2*push de ;99.5/105.5 t/b] [ ld a,(hl) inc l xor (hl) and c;N1 xor (hl) inc l xor (hl) and b;N2 xor (hl) inc l xor (hl) and N3 xor (hl) inc l ld d/e,a 1/2*push de ;89.5 t/b (and e...push af:inc sp , 16 ld (...),a )] pop bc ld a,c xor b and l;N1 xor b pop bc xor c and h;N2 xor c xor b and N3 xor b ld (de),a inc e ;74 t/b ( 73 t/b, and e...ld (...),a) 16 test_rndnoise.scl - (, ) test_rndframeshift.scl - 16 (- , ) test_rndxyframeshift.scl - , random x+y ( ) test_xyframeshift.scl - pixel > (frame+x+y)&0xf test_chunk.scl - x+y ( - ) test_woolchunk.scl - x+y ( ), 3 pixel > frame+achunkpixelnumber[pixelnumber])&0x0f ( 50% ) R-Mode : bit 0,d jr z,drawnoise_skipnewphase ;for R-Mode ld a,h cp rebyte/256+16 -(4*2) jr c,$+4 sub 16 add a,4*2 ld h,a drawnoise_skipnewphase inc d ld a,d and 7 jp nz,drawnoisenchr ld a,h cp rebyte/256+16 -(1*2) jr c,$+4 sub 16 add a,1*2 ld h,a ... drawnoisenchr realtime? frame+achunkpixelnumber[pixelnumber] achunkpixelnumber[frame, pixelnumber] 1 - : scrpixel = achunkscrpixel[pixel(4), frame(4), pixelnumber(4)] - 12 8 = 32 frame+pixelnumber = 4 , 8 - 2 . ) pixel > frame+achunkpixelnumber[pixelnumber])&0x0f ;8 abcdefgh - pop bc ;%ccccggggddddhhhh ld l,b ld b,framepluspixelnumber1 ld h,framepluspixelnumber2 ld a,(bc) ;%d000h000 rrca ;%0d000h00 or (hl) ;%cd00gh00 rrca ;%0cd00gh0 pop bc ;%aaaaeeeebbbbffff ld l,c ld h,framepluspixelnumber3 or (hl) ;%bcd0fgh0 rrca ;%0bcd0fgh ld l,b ld h,framepluspixelnumber4 or (hl) ;%abcdefgh ld (de),a inc e (d?) ;111 t/b ( 99 t/b rrca, 4 , 16, ) inc/dec h ld h , ? (16 4 19- 22- b/b, 1.5) 24, , + 48 (.. ), , 3D ( ? , 3D - ? ) 3 , 34 t/b, 8( 10) ! , ? 128 2 R-Mode 4 , 16 , (4R+4G+4B+4w) R-Mode? 4x4 , ( - ) ? R-Mode, 128 : 4R(M)+4G 8 , . 128 12 ( 8 , 128 2, , 96 ( 16 ) +6..12 , pop:ld (),hl LDI) 4R+4G+4B, ( , .. c2p 48000 ), : : - R screen1 (c2p) - G screen0, screen0 - B screen0, screen0 ( ) - R screen1 (c2p) - G screen0, screen0 - B screen0, screen0 ( ) - R screen1 (c2p) - G screen0 (c2p) : - B screen1 (c2p) - R screen0, screen0 - G screen0, screen0 ( ) - B screen1 (c2p) - R screen0, screen0 - G screen0, screen0 ( ) - B screen1 (c2p) - R screen0 (c2p) .. 16 3D ( , 3 ) R-Mode48, . RGB , , ! 4 ( 256 ) - 64: pop bc ;4pix + 4pix ld l,b ld b,framepluspixelnumberRN ld a,(bc) ;%abcd0000 or (hl) ;%0000efgh ld (de),a inc e (d?) ;46 t/b (3 ), 16*2*256 = 8K , 12K - 48K 4 ( 256 65536)? - (17 * 17 = 256!) _/ \_ (, /- -\) ? ! ? - ? 17 , ( +-1 ) ( ) /* ) - , ( , 3 ) (...) , N1 N2, , N3, , N4, %11111111 ??? ??? !!! , , ! 3210, 3 ( ) 1: 3232 13.3 3232 .313 2: 2323 3.31 2323 313. 3: 313. 2323 3.31 2323 4: .313 3232 13.3 3232 5: 3232 .313 3232 13.3 6: 2323 313. 2323 3.31 7: 3.31 2323 313. 2323 8: 13.3 3232 .313 3232 0, 9 16 0, , %11111111 0, 3? [ pop bc ld a,c and N1 ld c,a ld a,b and N2 or c ld (hl),a pop bc ld a,c and N3 or (hl) ld c,a ld a,b and N4 or c ld (de),a inc e ;105 t/b] [ ld a,(hl) inc l and c;N1 ld d/e,a ld a,(hl) inc l and b;N2 or d/e ld d/e,a ld a,(hl) inc l and N3 or d/e ld d/e,a ld a,(hl) inc l and N2 or d/e ld d/e,a 1/2*push de ;99.5/105.5 t/b] [ ld a,(hl) inc l xor (hl) and c;N1 xor (hl) inc l xor (hl) and b;N2 xor (hl) inc l xor (hl) and N3 xor (hl) inc l ld d/e,a 1/2*push de ;89.5 t/b (and e...push af:inc sp , 16 ld (...),a )] pop bc ld a,c xor b and l;N1 xor b pop bc xor c and h;N2 xor c xor b and N3 xor b ld (de),a inc e ;74 t/b ( 73 t/b, and e...ld (...),a) */ R-Mode, (rebyte , , , ): repic (0x3000) - 0xd000 ( fastmem) rebyte (0x2000) - 0x6000 (slowmem) repic1 (0x3000) - 0x9000 ( fastmem) rebyte1 (0x2000) - pg7 (slowmem) 0xe000 lowmem 4 ( 0x180+) 2 ( ?) 0x8000,0x1000 ( mlz, 24K, 0x8000..0x8fff): rebyte1.mlz -> pg7 rebyte1 (0xe000) rebyte.mlz -> rebyte (0x6000) repic1.mlz -> repic1 (0x9000) repic.mlz -> repic (0xd000 ) , .. ? scr0 scr1 , pop bc ;4pix + 4pix ;slowmem ld l,c ld a,(hl) ;%abcd0000 inc h ld l,b or (hl) ;%0000efgh ld (de),a ;slowmem inc e ;47 pop bc ;4pix + 4pix ;slowmem ld l,b ld a,(hl) ;%0000efgh dec h ld l,c or (hl) ;%abcd0000 ld (de),a ;slowmem inc e ;+47 = 94t/ slowmem slowmem, (6 slowmem) + ? 188t , bc, .. ld a,0x5x out (0xfd),a ;+18t - R-Mode, , - 0 7 ; exx:out (c),d/e:exx = 20t, 206t + wait (12 slowmem, 6 , 100t +2) de , de (+1 pop inc e) , 32/4 = 8 , 16 ( 1 24 ) (48+23=71 , 72?), <=12 ( 1 32-33 ) !!! = 768*2*5.5 = 8448 ( 14362), .. >37 , <11 +2 +2: ;+112 exx out (c),d/e ;screen change at +128 (nowait) exx inc e:inc bc / pop de ;for end of line ;+142 pop bc ;4pix + 4pix ;fastmem ld l,c ld a,(hl) ;%abcd0000 ;slowmem (nowait) inc h ld l,b or (hl) ;%0000efgh ;slowmem (nowait) ld (de),a ;slowmem inc e ;47 ;+189 pop bc ;4pix + 4pix ld l,b ld a,(hl) ;%0000efgh ;slowmem (nowait) ld l,c ;+214 dec h or (hl) ;%abcd0000 ;slowmem (nowait) pop bc ;4pix + 4pix ;!!!!!!! ;+235 = +9 ld (de),a ;slowmem (write at t-state +16) ;+16 inc e ld l,c ;+24 ld a,(hl) ;%abcd0000 ;slowmem (+32(31)) ;+32 inc h ld l,b ;+40 or (hl) ;%0000efgh ;slowmem (+48(47)) ;+48 ld (de),a ;slowmem (write at t-state +56(55)) ;+56 pop bc ;4pix + 4pix ;+66 inc e nop ;!!!!!!!!!!!!!!! ld l,b ;+78 ld a,(hl) ;%0000efgh ;slowmem (+88(85)) ;+88 dec h ld l,c ;+96 or (hl) ;%abcd0000 ;slowmem (+104(103)) ;+104 ld (de),a ;slowmem (write at t-state +112(111)) ;+112 - 3+5+3 = 11 ( , )? : - 32 , pop de ( ) - jp nz , - inc d, e (4 ) - ? , 16 (8+8) h - ( , .. ) h 32 ? ld h,N ??? 3 ! , +8 ! [ h ? 5 : jr nz inc d jr nz inc d ld h, - , +7 jr nz inc d jr nz] mcloop ;max +122 (119-1, 120-1 126-1 (ld h,N)) exx out (c),d ;screen change at +138 (nowait) exx ;+142 pop bc ;4pix + 4pix ld l,c ld a,(hl) ;%abcd0000 ;slowmem inc h ld l,b or (hl) ;%0000efgh ;slowmem ld (de),a ;slowmem ;+185 pop bc ;4pix + 4pix ld l,b ld a,(hl) ;%0000efgh ;slowmem ld l,c ;+210 inc e dec h or (hl) ;%abcd0000 ;slowmem pop bc ;4pix + 4pix ;!!!!!!!!! ;+235 = +7 ld (de),a ;slowmem (write at t-state +16) ;+16 inc e ld l,c ld a,(hl) ;%abcd0000 ;slowmem inc h ld l,b or (hl) ;%0000efgh ;slowmem ;+48 ld (de),a ;slowmem (write at t-state +56(55)) ;+56 pop bc ;4pix + 4pix ;+66 inc e nop ;!!!!!!!!!!!!!!! ld l,b ld a,(hl) ;%0000efgh ;slowmem dec h ld l,c or (hl) ;%abcd0000 ;slowmem ;+104 ld (de),a ;slowmem (write at t-state +112(111)) ;+112 ;----------------- inc e exx out (c),e ;screen change at +132 (nowait) - ! exx ;+136 pop bc ;4pix + 4pix ld l,c ld a,(hl) ;%abcd0000 ;slowmem inc h ld l,b or (hl) ;%0000efgh ;slowmem ld (de),a ;slowmem inc e ;47 ;+183 pop bc ;4pix + 4pix ld l,b ld a,(hl) ;%0000efgh ;slowmem ld l,c ;+208 dec h or (hl) ;%abcd0000 ;slowmem pop bc ;4pix + 4pix ;+229 = +1 ld (de),a ;slowmem (write at t-state +8) ;+8 inc e ld l,c ld a,(hl) ;%abcd0000 ;slowmem inc h ld l,b or (hl) ;%0000efgh ;slowmem ;+40 ld (de),a ;slowmem (write at t-state +48(47)) ;+48 pop bc ;4pix + 4pix ;+58 inc e nop ;!!!!!!!!!!!!!!! ld l,b ld a,(hl) ;%0000efgh ;slowmem dec h ld l,c or (hl) ;%abcd0000 ;slowmem ;+96 ld (de),a ;slowmem (write at t-state +104(103)) ;+104 inc e jr nz,mcloop ;+120 ;+115 inc d ;+119 ... ( ) R-Mode ( 2 ): 2 : frame1: W (), G/M/C frame2: B/Y ( push:push:... (4 rp)), R/C/M .. : 768*10.5 + 768*5.5 = 12288 (55 ) : scr1 (6144 ) ( ) scr2 (6144 ) ( ) attr1 (768) ;G/M/C - () attr2 (768) ;R/C/M - () attr3 (768) ;B/Y - () attr4 (768) ;W - () - TODO 3 7 : MCYW (C,M,Y,w) - M,C,Y,w, attr1 attr2 ( push:push:... (4 rp)) MRYW (M,R,Y,w) GRYW (G,R,Y,w) GCYW (G,C,Y,w) GCBW (G,C,B,w) MCBW (M,C,B,w) MRBW (M,R,B,w) : : (0G/0M/0C)*(0R/0C/0M) + (0B/0Y)*(0w) = 0/r/c/m/g/y(gr)/gc/w(gm,cr,w)/mr/mc/M/C + bw/yw = 14 (7 ): 0/c/m/r/g/cm/rg/cg/rm + bw/yw/w = 12 / W , 7 , ( , ), , + , GCBW , ( ..) R48-Mode ( ): 3 , 0-R(0-C), 0-G(0-M), 0-B(0-Y) push:push:... (4 rp) : scr1 (6144 ) attr1 (6144 ) - 3 8x1 8 : RGB RGY RMB RMY CGB CGY CMB CMY 7 ( ) , .mc 8 , , .mc bright only , , R-Mode , , A process consists of an address space, object handles, and one or more paths of execution (threads). Threads are used to perform work. For example, a thread can respond to interrupts and handle asynchronous process-related events in thread context. RTX timers are not synchronization objects which means threads cannot wait on an RTX timer handle. This is in contrast to the Windows waitable timer, which is an object on which a thread can wait, or against which a thread can receive notification. event - . pulse ( waitforsingleobject) , , ( - ) "", .. , , .. ( - , , include ) , , () ( , ): 1. : , . : - fixed ( ? ) - nearcode - [initialized neardata (==nearcode?)] - [empty neardata] - farcode - [initialized fardata (==farcode)]) - [empty fardata] 2. - ? 3. 4. 5. : 1. 16- ( , ) [2. HSB 8- ( , )] [3. LSB 8- ( , )] 4. far ( ) 5. FIXUP " - , - " 5. FIXUP " - , - " ? ? , " " ( , , 2-) ( : - , FIXUP " , FIXUP - , - " ( !!!), ; - , FIXUP " , FIXUP - , - " ( !!!), - , - , " , " - , " far " ? -? ($-1, + ( , ...), call/jp/jr, ( ), , (?))? org $-1? , ? nearcode , .. ? - ! ) () , , far , 128 48 ( ) , . 48 48 ( , , , near ) ? ? , ? , ? ) ( 48), , ) ( , ) 2) , , - ( , , .. ), , . . 1 2? ? ? 1, ) ( 48, >40K) ) , , ? ) - ? include? - ? ? ? ? , , , , ( , ) ( ) ( ), incbin , ? ? !!! - : - (~10K) - (~20K+) - (~25K+) - (~10K+) - ( , , ) 48, : ? , .. 48 . ? ! ? ? !!! . ? - - , , : ( ? !), , ( ?), , 48 : near far ( near) 256b 256b? : (word 16M) (4 (2 , 2 . )=4*1024=4k, word, . . )( - ) eff7 - !!! fe? ? (0/8) - !!! ATM 7ffd ( ) , .. . , , ( ) .. ( ) , , ? ? - (-, ) - , ( ): + range check ( ) + ( ) + + : - , ? ? - ? . ! ? , . hdd! ? ) (, !) ) ) , ) ; or a semaphoreloop call c,Sleep ld hl,fsemaphore ;#fe - , #ff - sra (hl) ;#ff jc semaphoreloop ; Sleep - ? ; ld hl,fsemaphore ld (hl),#fe , , , , . semaphore12loop STARTCRITICAL ld a,(fsemaphore1) ;#fe - , #ff - ld hl,fsemaphore2 ;#fe - , #ff - or (hl) ; , #ff rrca jnc semaphore12ok ; ENDCRITICAL call Sleep jr semaphore12loop semaphore12ok ld a,#ff ; ld (fsemaphore1),a ld (fsemaphore2),a ENDCRITICAL 60 , /. . , , ? . . , , .. , memory overflow . - ( ), ( ). , . - #4000? , ld a,%0x0xxxxx:out (#fd),a out #dffd, #fdfd, #1ffd. , #3ffd ( , .. #7ffd, #bffd, #fffd) #9ffd. #0000 ( #FE ), : 1. is-dos chic ( 128- #0000), 2. ( #1ffd), 3. 0 ( ) - , 5, 4. 0- , . , vtrdos #4000, . #3dxx, , , . BQ SOS: #0000 #8000 ( 32 ++ +...). "5-/1- . #4000". " #0000"? #4000 , . 2 16, . , #0000, ( inc h:call z,... .). - #8000. SP , . . , . 3 : , , , - +. . , . , . . ( BQ), #0000 ( .), #4000, #8000, #c000. 2 , . ? , . ? fork ( vfork). , ... (: 1. , 2. 8, 3. ( ), 4. , 5. 16, 6. , [7. ]). 7 8 ( ) 16. ; ; , . . - : WORD size WORD nextpg WORD nextaddr . , , . ? (.. , ). ? " ". , - . . , , UNIX - - fork. fork, ? ( ) , . ( , ), ( , ). stack overflow ( ), underflow , . , - ! 16- 22 . 32-? 100% ? , , . 100% O(1), . : : + ( ) + ( - , ); - ( ) + + RST ( !) ( CP/M ) : - 128 ( ?) - ( ), ? ) ( ) ) ( ?) ) = ( , ., DNA OS - SOS) ) ? , ( / ?). . MSX-DOS / CP/M. / rpm -qa | more ls -l `which su` SManager. . ( ) () (ontimer, onkeydown, onkeyup) . , ( , /) . - , ( ), (keypressed) . - ( , ) , , ( ) API. [ ! gui, - , ] API : OpenDevice ( ?) / , ( CloseDevice) - , , ( , ) ( , ) , , ( - , ISR) ? - .& ; / - ; !!! , , , , !!! ISR ( - , FIFO- ). , , . Ÿ , . , ( , 32768)? , , ( ). , (, ) , . ( ): " -", , -, . . ! , . SENDMSG, . - ON_INT ( ISR!!!) . (, ) - , . ( - ; ), . , . , ? , ? bitmap ? . . .. , , ( ) . "", . (, F10), . , . ? ( - , ) , . : (, DMA - , DMA: full screen, , , ) , : IQ( ): 0. . 1. GETMSG. : T1. ; T2. , MAIN. T3. 1. ( MAIN): K1. / ; K2. 1. "": E1. "". 1. MAIN: 0. ... 1. GETMSG. { " ": R1. " ". R2. ( IQ, BQ) R3. - ( R2, - BQ ). R4. " ". R5. ", ". R6. 1. " ": O1. IQ "". O2. . O3. 1. "": E1. . E2. IQ "". E3. . E4. 1. 1. } { IQ "": Q1. "". 1. } { IQ "": Q1. . 1. } { "": Q1. "". ... ... ... B1. . B2. IQ . B3. 1. } , , , GUI . GETMSG , , - , : 1. ", " ; 2. , " " ; 3. " ". Wolf/Quake -. + ( ) . . ( > 70000t, .) ( + / ), . (, General Sound). . , ( , EOF). , ( + ). EOF ? ( )? (- EOF) , ( , , , ). ( ), ( , , ). ( ) GETMSG, . 50Hz "", . : , , ( ) . , , ( ) . , ( ) . HALT. 256 : . . , , , , , NMI - ON_INT ( , NMI?) 54 () RS232 50Hz 23040 ( 5) RS232 , : , , ( , ) , : Struct app Byte priority ; Byte flags ; (factive, ftimeslice, fusetimer) Word mainpg ; ( ) Word curmsg ; Word endmsg ; Word curpg ; Word sp ; ( , ) Word next ; ( ) ;[ , - /] EndStruct : (.. ) , " ", - , " ", , . : =" " ( ) : , ( " ", ) , , = . (256 ) : Struct msg Word type ; (2 ) Word sender ; (2 ) Array param,12 ; (2-) - !!! 6 ? ( =16 ) EndStruct , 256 . .. , . - (#C000)? Ctrl+Alt+Del "; " ( ), . (, ) , , ? Windows.pas: tagMSG = packed record hwnd: HWND; message: UINT; wParam: WPARAM; lParam: LPARAM; time: DWORD; pt: TPoint; end; Types.pas: TPoint = packed record X: Longint; Y: Longint; end; + 4 + (?) , . , . [20:15] ZX: MagOS ( ) + + [20:16] ( Alt+Tab, , .. - ) [20:16] [20:16] [20:17] 47K #400 + ( ) [20:17] ) [20:17] , , , [20:18] , , [20:18] ? [20:18] [20:18] [20:19] - [20:19] ? [20:19] [20:19] [20:19] , / [20:19] . . ) [20:20] , [20:20] 47 [20:20] 63, [20:20] [20:21] - [20:21] [20:21] ? [20:21] 100% [20:21] ? [20:22] [20:35] #100 , / [20:35] . [20:36] / " ", " ", " " [20:37] sleep - getch [20:37] [20:37] : [20:38] [20:38] [16:21:03] API - , - [16:21:27] - - 63 47+. ? ) ? ) ? ) ? sp? 0 63, 000 47? ! ..: , , , ? 31 : , 1!!! 2 31 ? ? 0? : 7, , 16, 0, 7, 7 , 320 , , ( 80 80) - 80. zxbus? -: 128 (48K?) , ( , 16! ) ( hl', , ), ( ) : 1. ( ?) 2. 3. 4. , ( ( ), ) 5. , , ( , ? , ?) ( ?) (.. ) , 256 . (DS n , >=#xxfa jp #(xx+1)00. xxfa , 4- , jp . jr . jr jp . djnz Z, .. - dec b:jp nz). . , ( ). ( zxrar) 256 ( ), , . ( ): " " " " ( ) , , - " - " , , "" " NULL", .. 0 , ? exd , de!= hl, ld h,(hl) , . hl!=. hl, ld l,(hl) , . hl!=. hl, ( ?) ld hl,(hl) - , A . push:pop, jr, . . (, setpage) ( : 1. ( , ); 2. / ) - 4 , 2 (), 2 () : push af:call [z,]...:pop af bc: push bc,bc:...:pop bc(),bc hl: push af,hl:...:pop hl(),af , IX, IY, ? : ld (pointer1),ix pointer1=$+2 ;H , ld iy,(0) ;40t : ld (pointer1),ix pointer1=$+2 ;H , ld (0),iy ;40t (ix+...), :( push ix ;, ld de,... add ix,de ld (pointer1),ix pointer1=$+2 ;H , ld iy,(0) pop ix ;94t : push ix ;, ld de,... add ix,de ld (pointer1),ix pointer1=$+2 ;H , ld (0),iy pop ix ;94t : ld a,ly ld (ix+...),a ???ld (pointer1),ix ;????????? ld (ix+(...+1)),0 pointer1=$-1-1 ;, ( H) IX,IY, LDIR - (256 (DE),(HL)). -, , ? ? - - , ? . . ( ) , . , . , .. . , .. (, , .. ). . . ( ) ( ), . , . , . , , . : (1 ) (1 ) <. >(< >) . , , , ( ) : ================== { , , , , } { , , { ( , ) } , , , } < . >(< . >) , : 1. ( ) 2. ( - 256 ? 16?) 3. ( , , ) 4. ( 256 ) 5. ( , ) 6. ? ( , //, 256 ) 7. ? ( ) 8. ( ; ) ( - 256 ? 16 ?) 9. ( ?) (, ...) , - . / . ! , : - . . , . , ! , . , . . 16 , 49152/16=3072 ( . 256 ). ? . . , , ( ?). , . - , .. . , . hl' ( - (SP), (hl') (IY)): #c000...#ffff 8192 + call: exx ld (hl),nnH dec l ld (hl),nnL call z,os_growstack dec l ; , ( ) ld (hl),d?? ;pgH dec l ld (hl),e?? ;pgL call z,os_growstack dec l ; , ( ) exx ret: jp os_ret os_ret: exx inc l call z,os_reducestack ld e,(hl) inc l ld d,(hl) call os_setpage inc l call z,os_reducestack ld e,(hl) inc l ld d,(hl) exd ld a,(hl) inc l ld h,(hl) ld l,a ; jp? exd push de exx ret , ! : ( , - ) ( , , ) , ( - !) ) .->. ( !!!), , , ! ! 1) 2) ( - ( - ), ) 3) ( !!!) - ) ->. ( !!!) - 0000 c000: 1. LEC Memory Extension (1987) 2. MB02 (1992) 3. ATM2/2+ (1992/1993) 4. fk0 KAY, Pentagon, Scorpion (ZX-MMU) (2000) 5. KOE Pentagon 1024SL2.x ( #fe) (2007) 6. ATM3 (2010) [7. LVD NeoGS - NeoGS] ? ) ( ) ( ? ?) ( ) ) ( , , ) ) / ( - - ) ) / : 48 16 ( ) - ? ( ). ? , ? ( ) , . , . (48K ) , 1 ( - ). , , 3- , ? "" ( ()) "" ( ). , , ( ), ! , , , . " " (): ( ), . : - ( ! pointer!=dynpointer!) - ( !) - - 256 / Thunk' - . - . , , , , . " " , -!!! , , , ( , ). - ( FARCALL name_of_function, 2 : , / ). . - ) , ) , ) (ld (de),a:inc e:call z,os_queue_put ld a,(hl):inc l:call z,os_queue_get ). (, ). , .. , . - . , . ( ). , . - sword, - . ( sword' call z, bit:call z) / ? ? ( - (PC)). / . ( writeable) (flush). , 5000t 256 + (flush) ( flush ) sword ( ), ( , ) ? os_farcall_fromlow ;de,bc ( de,bc,ix,hl . long) = , ;hl(iy?) = calladdr ;a=callpg ( !) call os_set_pg_a ; bc jp (hl) ;iy? _farcall_fromfarpg1 ;de,bc ( de,bc,ix,hl . long) = , ;hl(iy?) = calladdr ;a=callpg ( !) call os_farcall_fromlow ld a,retpg1 jp os_set_pg_a ; bc ; thunk, ( ) PT player 13-14K. - ? ? 1. 21 / 2. 65 / ( 256 ) ? 1. , ? - ? 2. , . , ? ? ( ), , ? , .. - . , ( 256- , ). . 2- , . ( ) , . ( ) - , , . (256 ) : page, H (256 ) 85 1/3 85, 256*(85 1/3)*85 ? ... copyloop ld a,(hl) inc l call z,user_queue_get_lowmem ld (de),a inc e call z,user_queue_put_lowmem dec bc ld a,b or c jnz copyloop ... user_queue_get_lowmem ; hl ld (user_queue_get_lowmem_a),a ld (user_queue_get_lowmem_bc),bc exd ld (user_queue_get_lowmem_de),hl ld hl,(os_cur_pg) ld (user_queue_get_lowmem_pg),hl call os_queue_get_lowmem user_queue_get_lowmem_pg=$+1 ld hl,0 call os_set_pg ; user_queue_get_lowmem_de=$+1 ld hl,0 exd user_queue_get_lowmem_bc=$+1 ld bc,0 user_queue_get_lowmem_a=$+1 ld a,0 ret os_queue_get_lowmem ;de'= ( ) ;hl'= ( ) ; put-??? exx ld a,(de) ;pgL inc e:call z,os_queue_get_lowmem_block exx ld l,a exx ld a,(de) ;pgH inc e:call z,os_queue_get_lowmem_block exx ld h,a exx ld a,(de) ;H inc e:call z,os_queue_get_lowmem_block exx call os_set_pg ;hl ; , .. os_queue_get_block ld h,a:ld l,e ;=0 ld bc,256 ldir dec d ; ret os_queue_get_lowmem_block push de ; ld e,(hl) ;pgL inc l ld d,(hl) ;pgH inc l exd call os_set_pg ;hl exd pop de ; push hl ; ld h,(hl) ;H ld l,e ;=0 ld bc,256 ldir dec d ; pop hl ; inc l ret os_set_pg ; bc ; push !!! ;( push bc, 100% : ; , , , ; ) ld (os_cur_pg),hl ld bc,memport1 out (c),h ld bc,memport2 out (c),l ret 17.12.2007 18:57 LordVader LordVader 18:59 alone_co alone_co - 19:00 alone_co , LordVader 19:01 alone_co - : , , , , LordVader LordVader - ! alone_co LordVader LordVader " " alone_co - , - , LordVader http://www.6502asm.com/ 19:02 alone_co - , alone_co 19:03 LordVader LordVader ( ) alone_co ? 19:04 LordVader LordVader 4000- alone_co alone_co 10 19:05 alone_co LordVader ! LordVader LordVader alone_co , 19:06 LordVader LordVader alone_co 16 LordVader 16 - 48 LordVader LordVader 19:08 alone_co - alone_co LordVader 19:09 LordVader 32 LordVader 16 LordVader alone_co LordVader ? alone_co LordVader 19:10 alone_co ( -), alone_co alone_co alone_co alone_co LordVader 19:11 alone_co LordVader alone_co alone_co alone_co alone_co , alone_co - - alone_co 19:12 alone_co , - alone_co 19:13 LordVader - LordVader 1 10 alone_co , , , alone_co alone_co , alone_co 19:15 alone_co , - alone_co - alone_co , alone_co , - LordVader . . LordVader . alone_co ? 19:20 alone_co ? alone_co ? alone_co alone_co 61 alone_co 19:23 alone_co 64 LordVader ? 19:25 alone_co alone_co alone_co ( 256- ) ) ld hl, ;*2 ld a, ; jp longjump ... longjump ;hl= ;pg=*hl++ ;h=*hl ld l,a ; pghl jp (hl) *hl , : ; - , 64- ;64- - , ; - , !!! , !!! ; - ( ) ; sleep ( ?) STRUCT app BYTE priority ; (0= ) BYTE flags ; (factive, ftimeslice, fusetimer) factive=0 ; : SET , RES ftimeslice=1 fusetimer=2 ;ftimer=3 ;fcritical=4 ( hl) WORD id ; WORD mainpg ; ( ) WORD curmsg ; WORD endmsg ; WORD curpg ; WORD sp ; ( ( ) , ) WORD next ; ( ) ;[ , ] ENDSTRUCT STRUCT msg WORD type ; (2 ) WORD sender ; (2 ) WORD par0 WORD par1 WORD par2 WORD par3 WORD par4 WORD par5 ENDSTRUCT ;16 ( 256) WORD Os_curapp ;()=Os_Tapp WORD Os_nextapp ;()=Os_Tapp WORD Isr_SP WORD Os_frames BYTE Os_critical WORD Os_targetid ARRAY Os_msg1,SIZEOF_msg ARRAY Os_msg2,SIZEOF_msg Os_TIMERSENDER=55555 MACRO STARTCRITICAL ld hl,Os_critical inc (hl) ; , ENDM MACRO ENDCRITICAL ld hl,Os_critical dec (hl) ;+ call nz,IsrEndCritical ; IsrEndCritical , .. di ; , ENDM ; MACRO RELEASECONTEXT ld ix,(Os_curapp) ld hl,(curpg) PUTWORD app_curpg,HL ld hl,0 add hl,sp PUTWORD app_sp,HL ld sp,lowmem ENDM ; MACRO GETCONTEXT GETWORD HL,app_sp push bc,hl GETWORD HL,app_curpg SETPG pop hl,bc ld sp,hl ENDM MACRO SETFLAG SET \0,(IX+app_flags) ENDM MACRO RESFLAG RES \0,(IX+app_flags) ENDM MACRO TESTFLAG BIT \0,(IX+app_flags) ENDM ; , , , (, ) ; - fusetimer ( ?) ; ! ; ftimer ;[: ( )] Timer ld ix,Os_Tapp-SIZEOF_app ld de,SIZEOF_app Timer0 add ix,de ld a,(ix+app_priority) or a ret z TESTFLAG fusetimer jz Timer0 SETFLAG ftimer jr Timer0 ; , Sleep STARTCRITICAL ld ix,(Os_curapp) SETFLAG ftimeslice ; call Sched ; ( ..) ;ld ix,(Os_curapp) ; Sched? RESFLAG ftimeslice ; ENDCRITICAL ; ret IsrEndCritical ; ; AF,HL dec (hl) ;1-1=0 push ... call Isr pop ... ; ret Isr ; , ld (Isr_SP),sp ld sp,lowmem ; ( ) ; RS232, . ; RS232, (.. RS232). ; RS232 , . ; RS232, ( ) ;fcritical=0, .. SENDMSG ( DOMSG) call Timer ; ld sp,(Isr_SP) ei ret ; ; , IsrEndCritical CriticalInt ; inc a ;=2 ld (Os_critical),a ;pop hl pop af ret ; OnInt push af ;push hl ;todo timer ;ld hl,(Os_frames) ;inc hl ;ld (Os_frames),hl ld a,(Os_critical) or a jnz CriticalInt push ... CALL Isr ; ei ; , , .. call Sleep pop ... ;pop hl pop af ret GetMsg STARTCRITICAL call Sched ;exx ;todo Sched , ( )? ld bc,(Os_msg1+msg_par3) ld de,(Os_msg1+msg_par4) ld hl,(Os_msg1+msg_par5) exx ld bc,(Os_msg1+msg_par0) ld de,(Os_msg1+msg_par1) ld iy,(Os_msg1+msg_par2) ; hl',de',bc',iy,de,bc ld hl,(Os_msg1+msg_type) ; ! ld ix,(Os_msg1+msg_sender) ; push hl ENDCRITICAL pop hl ret ; bc,de,iy,bc',de',hl' MsgGetPars GETWORD HL,app_mainpg SETPG GETWORD HL,app_curmsg ld de,Os_msg1 ld bc,15 ldir ld a,(hl) ld (de),a inc l PUTWORD app_curmsg,HL GETWORD DE,app_endmsg or a sbc hl,de ret nz ; RESFLAG factive ; ret ; ID=bc CallTask STARTCRITICAL RELEASECONTEXT ; hl,ix ld ix,(Os_curapp) SETFLAG ftimeslice ; , STARTCRITICAL , ; ( , ) ld ix,Os_Tapp-SIZEOF_app ld de,SIZEOF_app SchedGivenSearch add ix,de ld a,(ix+app_priority) or a jz SchedSearch ; - GETWORD HL,app_id ;CY=0 sbc hl,bc jnz SchedGivenSearch ; Os_nextapp, .. jr SchedFound Sched RELEASECONTEXT ; hl,ix SchedSearch ;call SchedFind ; - ix ; / ; - , , ;SchedFind LOCAL ld ix,Os_Tapp-SIZEOF_app ld de,(Os_nextapp) ;" " ld bc,SIZEOF_app _next add ix,bc ld a,(ix+app_flags) and factive|ftimeslice|ftimer jz _next ; , " ", - ld a,(de) ; / cp (ix+app_priority) jnz _ok push ix pop hl ;or a ;CY=0 sbc hl,de jc _next ; - _ok GETWORD HL,app_next ld (Os_nextapp),hl ;" " ENDL ;ret SchedFound TESTFLAG ftimeslice jnz SchedOk ; - TESTFLAG ftimer jz SchedGetPars ; , ;nz RESFLAG ftimer ld hl,Os_TIMERSENDER ld (Os_msg1+msg_sender),hl ;, sender ;jr SchedOk SchedGetPars call z,MsgGetPars SchedOk ld (Os_curapp),ix GETCONTEXT ; hl, ix ret ; ;CY= SendMsg ;ix - ID ;hl - ;bc,de,iy,bc',de',hl' - ; , , ( ) ; - , , push hl STARTCRITICAL pop hl ; ! ld (Os_targetid),ix ;ID ld (Os_msg2+msg_type),hl GETWORD HL,app_id ld (Os_msg2+msg_sender),hl ld (Os_msg2+msg_par0),bc ld (Os_msg2+msg_par1),de ld (Os_msg2+msg_par2),iy exx ld (Os_msg2+msg_par3),bc ld (Os_msg2+msg_par4),de ld (Os_msg2+msg_par5),hl ;exx RELEASECONTEXT ; hl,ix ; ( , ) ld bc,(Os_targetid) ;ID ld ix,Os_Tapp-SIZEOF_app ld de,SIZEOF_app SendMsgSearch add ix,de ld a,(ix+app_priority) or a jz SendMsgError ; - GETWORD HL,app_id ;CY=0 sbc hl,bc jnz SendMsgSearch ; GETWORD HL,app_mainpg SETPG SendMsgLoop ; ? GETWORD HL,app_curmsg GETWORD DE,app_endmsg or a sbc hl,de jz SendMsgNoRoom ; { ; ld hl,Os_msg2 ld bc,15 ldir ld a,(hl) ld (de),a inc e PUTWORD app_endmsg,DE ld ix,(Os_curapp) GETCONTEXT ENDCRITICAL or a ;CY=0 ret ; SendMsgError ld ix,(Os_curapp) GETCONTEXT ENDCRITICAL scf ;CY=1 ret ; ;} SendMsgNoRoom ;de=curmsg=endmsg ; { TESTBIT ftimeslice ; ? jnz SendMsgTimeSlice ; { ; push de exd ld de,Os_msg1 ld bc,15 ldir ld a,(hl) ld (de),a inc l PUTWORD app_curmsg,HL ; pop de ld hl,Os_msg2 ld bc,15 ldir ld a,(hl) ld (de),a inc e PUTWORD app_endmsg,DE ; : ld (Os_curapp),ix ; " ", GETWORD HL,app_next ld (Os_nextapp),hl ;exx ld bc,(Os_msg1+msg_par3) ld de,(Os_msg1+msg_par4) ld hl,(Os_msg1+msg_par5) exx ld bc,(Os_msg1+msg_par0) ld de,(Os_msg1+msg_par1) ld iy,(Os_msg1+msg_par2) GETCONTEXT ; hl, ix ld hl,(Os_msg1+msg_type) ; ! ld ix,(Os_msg1+msg_sender) ; push hl ENDCRITICAL pop hl ret ; ;} SendMsgTimeSlice ; { ; ;exx ld bc,(Os_msg2+msg_par3) ld de,(Os_msg2+msg_par4) ld hl,(Os_msg2+msg_par5) exx ld bc,(Os_msg2+msg_par0) ld de,(Os_msg2+msg_par1) ld iy,(Os_msg2+msg_par2) ld ix,(Os_curapp) GETCONTEXT ; hl, ix ld hl,(Os_msg2+msg_type) ; ! ld ix,(Os_targetid) ; push hl ENDCRITICAL pop hl ; ; ; , , - ;, , , !!! ; ? push af push hl push ... push ix pop bc ;ID call CallTask ; ( , ) ; pop ... pop hl pop af jp SendMsg ; ;} ;} Speccy by Alone Coder v0.4 ?PIRACY! (c) VJ.SOFT 1984 (system36 MidiSoft) - , Lenght fongen speak russian, 4 1985 ( ). /Speaker: KVED (c) 4-AUG-85, !!!/ , : http://www.issp.ac.ru/main/index.php/ru/rasmember/kveder.html m00h : ! zx spectrum 2 - Fongen1, Speak Russian, 1985 KVED Kveder moscow 1985. ? ! , 1982. zx spectrum . , - Fongen1, Speak ... . ! , HOMECOU ( ) (1986) - ? ANDI 1986 (conversion by ANDI, ), /. , 1986 , / Tape to Tape Copier 1986 Jury Nikolskiy English Utility: Copy/Backup ( . 386-54-45) RDOS-128 ( TR-DOS CAT !, ) TREXT ( , CAT *) (CPU2\SYSTEM-1.TRD) - RDinstr ( "RAMDOS"): RICHARDSON SOFTWARE 1985. LONDON. ..,.1986 ( ) - PSION + G. (1986) (system28/ROST2 MidiSoft) - - PSION + G. (1987) (system28/DICTOR MidiSoft) - FRIQ-M - Izmerenie F - zk87 (1987) (system26 MidiSoft) CATALOG - (1987 - : . ..) (SYS59.TRD vBv) , , ( , , , , /. SYS60.TRD vBv, (CPU2\SS_DGAME.TRD - 1991)/, , 2- , ). - TASWORD (Tasword-RL). . (ZX-Forum #1) /. " " 1987, / Character Editor 2 1987 Jury Nikolskiy English Utility: Fonts & UDGs Editor 1987 Jury Nikolskiy English Utility RS 232C Interface 1987 Jury Nikolskiy English Utility: I/O Handling STR Edit 1987 Jury Nikolskiy English Utility: I/O Handling Xonix Surna A.'87 Sukin&Son Corp'93 Polygraphics .. (~1987?): http://spectrum4ever.org/download.php?t=fulltape&id=3265 .. - , "" - "" 1987 (. ' '; , ..; -: .: , 1990 .) ZX-KEY+ - - .. 1987 GORDWARE (system45 MidiSoft) - ?DPW2-GRAPFIC ASSEMBLER - ROBERT GRAVAS (C)1987 A.D ( - system12/PICASSO MidiSoft) .'88 1, 2, 3, 4 C.C.B.'88 Inforcom'90 ( C.C.B. - C.C.B.) "Pentis" (1988 Tony Raugas ) ( , 1988) (TELETEST SYS59.TRD vBv) (FRQ MB+) (1988 . - ) (CPU2\SS_DGAME.TRD - ?) " " (1988, SF Software, 1983 by RORY DUFF) (1988, Softmaker Box) Nether Earth " 1988" , 87- "The Last Word 2". "Saga", "". , . , . , , - - TLW-2 . . TLW-2 ( , ), (1988) ( , ) TLW-2. (ZX-Forum #1) MENU-128 (c) Y. & N. RODIONOV 1988 (44.TRD ) - - , 1988 (system45 MidiSoft) (system40 MidiSoft) - . , - ( ) 14 (system40 MidiSoft) (system41,42 MidiSoft) (system41 MidiSoft) (system41 MidiSoft) (system41 MidiSoft) (system43 MidiSoft) (system44 MidiSoft) (c) . , 1988 https://zxaaa.net/view_demo.php?id=12230 DISK ERASER ((c) A. Dereshchuk Software 1988) (MidiSoft/system29) , , ? M.STUDIO (MUSIC STUDIO ONLY FOR SPECTRUM 128 Program (c) 1987 JAROSLAW SOBCZAK ADAPTED TO 128 BY: HACKER CHRIS 1988*06*24 DISKED BY FCS'88)(CPU2\SS_DGAME.TRD) PSION - .. 1988 (system30/LES0 MidiSoft) - Screen Virus (c) 1989. Wlodek Black. Moscow, school nr. 91 https://zxaaa.net/view_demo.php?id=7204 UNI-MENU # Y. & N. RODIONOV (c) 1989 (44.TRD ) - 22 (1989 , -, ) . () - BETA/MAGIC zap program (A-POKE) (1989) " " (1989, Wlodek Black - , ) (1989 .., ), ( ?) 1990 ( ) (1989 - ), "" ( , , .. FULLER), "" ( Acidrain) ZYNAPS disk version by V.D.G. 1989 (c) Disk-Tape-@ Copy by V.D.G. (c) DENSOFT 1989 (SYS59.TRD vBv) TLW " * ... * * 1989" (SYS21.TRD vBv) - "" - ZX-SPECTRUM 1989 (SYS22.TRD vBv) ART48RUS - Art Studio 48 " 1.7 1989 " (SYS20.TRD vBv) " " (1989) 04 - 12 1989 (Newart) ( . 1989) (43.TRD ) DENCOPY . Densoft 89 . "MAGIC", . PASCAL'D ( HP4TM16) . HiSoft 84 ., Dereschuck. H2O n/a'89 Game 40 Nikolay Trius'89 Vadim Stramous'89 - KSA (MEGASYSTEM 1989 ), [AAA] Test RAM 1989 M.S. Chubarov Russian Utility: I/O Handling - : http://www.worldofspectrum.org/infoseek.cgi?regexp=^Test+RAM$&pub=^M%2eS%2e+Chubarov$ FONT (Sergei Smirnov 1989) https://spectrumcomputing.co.uk/index.php?cat=96&id=27922 MICRON (MONITOR MI(c)RON) ( 1989?) (CPU2\SOFTWORK.TRD) S-S Copy ((c) A. Dereshchuk Software 1989) (CPU2\SS_DGAME.TRD) / PCOPIER/ Artist 2 (DISC VERSION BY N. RODIONOV LENINGRAD 1989) (cpu3\-----001.TRD) Lister89 (system24 MidiSoft) UDG (Diskversion (c) 1990 By W.Janowski - . D.D.V3 VLADIMIR IANOVSKY (c) 1990 S.PETERBURG) (cpu3\-----001.TRD) D.D.V3 (DISK-DISK COPY) (VLADIMIR IANOVSKY (c) 1990 S.PETERBURG) (cpu3\PPPPPP.TRD, - 1.06.1990 (NB !!!) .260-55-25) Art Brush (SIM & Company 1990 - ) https://spectrumcomputing.co.uk/index.php?cat=96&id=27460 ( ) (FANNY 1990?)(cpu3\LOGRO000.TRD) FLOW ( - FANNY 1990?) (cpu3\LOGRO000.TRD) WAVES (FANNY 1990) (cpu3\LOGRO000.TRD) (FANNY 1990) (cpu3\LOGRO000.TRD) (FANNY 1990) (cpu3\LOGRO000.TRD). FANNY "" - MidiSoft/system48 Memoryte (Memory test for ZX-SPECTRUM) (c) 1990 Macary Software (newart/UNSORTED/SYSTEM/LOGROS.TRD) IBM . Lebedev S.M., Krotov V.V. (for "Spark"). ( IBM TR-DOS; ; 2D, ID, 2S, IS. /, IBM>SPEC (cpu3\SYSTEM-2.TRD) IBM COPY (DISK.TRD Newart') IBM conv (DISK.TRD Newart')/ MASTER-KEY . Kotlarov D.V. (DVK-soft), TRTI v3.2 90 . "disk doctor" , ) /MASTER - KEY ( , MASTER COPY Dmitriy Baranov . 1992) (cpu3\LOGROS.TRD)/ ZX-Commander V1.0 KIEV'90 (SYS20.TRD vBv) AYservis "Grafic by OGNEW M.A TUCHINO lotok #55" - AY (SYS21.TRD vBv) ( 1990 .) REDS "-" - Tasword (SYS21.TRD vBv) ( 1990 .) 1990-1992 Kordial, . ? https://zxaaa.untergrund.net/demo.php?t=0&s=kordial&author=Author BANK 25 - Valery present "New programs bank" (SYS21.TRD vBv) ( 1990 .) BANK NEW - KORDIAL & VALERY Presents "PROGRAMS BANK" V3.10 (SYS21.TRD vBv) ( 1990 .) KAT D "KORDIAL corp 90' tel.274.83.31" (SYS21.TRD vBv) - GARboot "ZX Spectrum commander 4.2" (c)GMR Ltd 1990 281-37-18 (SYS21.TRD vBv) - MOA Service SHELL ZN64-RL by PENCRAFT SOFTWARE 1990 (SYS54.TRD vBv) - 64 LBF - TO LOOK BASIC FILES (c) Leningrad 1990 (SKI) (SYS58.TRD vBv) DISK ERASER as RT11SJ (c) CREATED BY K.Studencov 1990 (c) Leningrad 311-43-41 (SKI) (SYS58.TRD vBv) MDDM2 - MIKLE's Double Disk Monitor (SYS58.TRD vBv) LAST HOPE tape-to-tape copier (program and artwork ..,20.7'90 .393-14-31) (SYS59.TRD vBv) - DJCRACK - Cracker 3.0/42 (6.5.90), 3.0/42H 3.1 (C) 1990 .. 393-14-31 (SYS54.TRD vBv) CP/M "" (1990 SOFT, ?) - 7-92 .26 - (), , CP/M! (1990) tape to disk by MOA (1990) ( , 1992 ACOPY MI&DI (cpu3\MICRO000.TRD)) MOA Service - IX.90 (-), V01.05 1990 (SYS59.TRD vBv), V2.5 MOA&PV'turbo 1990 (CPU1\ZX000.TRD) .. 3931431 - DJCRACK (1990) - DISK DOCTOR for BETA 128 (DD CPU2\SS_DGAME.TRD) (1990) READER by IskraSOFT 1990 (2327767.TRD Newart') Spark v2.0 (1990) - Ko."Iskra" Design Abramov I.A. (CPU2\SS_DGAME.TRD) TSW>Sp (Text Transformation From Tasword to Spark v2.0) by IskraSOFT 1990 SPB /NB!!!/ (CPU2\SS_DGAME.TRD) S*H*E*L*L (FCP) (1990 IskraSOFT) (46.TRD ) ( ) (274500 . . 3 .15) - KARTEX (1990), DEM.KTX (1990) (CPU2\SS_DGAME.TRD) () - Beta-Disc's Test Program (B.D.TEST) (1990) (ZX000.TRD) Change Disk Name Program (c) 1990 Dmitry Sologub (Sputnik Research Ltd) (ZX000.TRD) PCopier by Nicolas Rodionov - 10-16.04.1990 DISK DOCTOR (c) CREATED BY N.Rodionov 1990 (SYS58.TRD vBv) - 1990 "-" (. 1127566 - 1990) (1990 Service Software & Silva Software - -2, 143040, "" . 5900714) STEK v1.1 (1990 MPF Software ) LIGHT PEN by Roy Eastwood dkTronics 1983/disk version by Petrov Sergey. Krasnoyarsk 1990. [LP 48 V4.1] - ZX- . , , 48- . . TASWORD RL by Tacman Software 1987/disk version v2.1.0, adapted by Petrov Sergey, Krasnoyarsk. 28.12.1990 "" () 1990 . https://zxaaa.untergrund.net/demo.php?a=HTTM+Eureka LIST BASIC UTILITY (*RATCOPY* Program System'90) (C15.TD0) TDCOPY production by AVF & CH (c) 1990-1991 - (SYS59.TRD vBv) DCU v1.01 (1990) DCU v2.01 (Nicolas Y. Rodionov, 01.1991 - Leningrad) (SYS54.TRD vBv), DCU v2.02, DCU v2.12, DCU v2.31 (1992, ) VU-EPSO (PSION SOFTWARE & Youri Rodionov 1990) (70.TRD ) SPECTRUM micro-PROLOG T1.2 (C)LPA, B-disk by N.Rodionov BETA COMMANDER ver 1.2 by Trubinov J.U. on 19.12.90 (46.TRD SLAVA) L-COPY written by Laptev (46.TRD ) Chuck/Mapson&Rapson Software - (1990) The complete machine code tutor (c)1990 Cracked & fully disked by Trubinov J.U. (46.TRD ) BACK128 (N.RODIONOV'90) (46.TRD , COPY 128 (cpu3\SYSTEM-2.TRD)) - Dictator - . . ( 1990) (26.TRD ) PINBALL (Unified disk/tape loader Y.R. 12/90) (55.TRD ) SOPHISTRY Restored by Nic Rodionov 1990 Screen & T/D loader by Yu. Rodionov 1991 (55.TRD ) " " ("") - ( TR-DOS). 80-, " " - , BDJTEST (Beta-disc's test) . Starocoltsev Eugen, 90 . , . GENS 451 . HiSoft v4.1 87 ., beta-disk 90. / , ! MONS 4 beta. . HiSoft 87 ., IC' 90. - - - . TLW2 (The Last Word 2) . Saga System & Myrmidon 86 ..., 90 . . DOS BASICa. TREK A>B . Kordial 90 . , . /cpu3\PPPPPP.TRD - B>A/ WHAM (Music Box). . MarkTime 85 ., . 90 . . / , . Guess Number Vladimir Fufaev'90 Memory Vladimir Fufaev'90 Sex Show 1990, The D. Rovenko, O. Borovik'90 - Denis Korshunov'90 Columns 1990 Sunny Tram Ltd TASWORD adapted by PITER 1990 (2327767.TRD Newart') PC Companion ( "") EO Arsenal 1990 https://zxaaa.net/view_demo.php?id=11217 - 1990 K.D.'90 boot - , 1990 TPC boot - TPC' soft, 1990 VDG boot 48k - V.D.G. 1990 422-32-47 ZX Top Service boot - 1990 Eugene Stepanoff Saint Petersburg 295-88-00 CDE Music Bank - Andrew Strikes Code, 1990 https://zxaaa.net/view_demo.php?id=6125 DEMO - , ? 1990? https://zxaaa.net/view_demo.php?id=5603 -08 - Trotsenko A / Tarasuk W, 1990 https://zxaaa.net/view_demo.php?id=2532 TATSU demo by CATGEN - 1990 https://zxaaa.net/view_demo.php?id=1585 TRACE SP (ELISEEV V.A.1990) (CPU1\PPP.TRD) - *RATCOPY* TEST SYSTEM (1990?) (CPU1\PPP.TRD) LIST BASIC UTILITE *RATCOPY* Program System'90 (CPU1\PPP.TRD) DU 105p *RATCOPY* Program System'90 (DISK.TRD Newart') TrakCOPY (DISK to DISK COPIER (c) 1990) (CPU2\DDD.TRD) BEYOND BASIC ( ) ( 1990?) (CPU2\DDD.TRD) DISK DOCTOR for BETA 128 by Mike Golubew (c) 1990 (CPU2\SS_DGAME.TRD MidiSoft/system37) S.LOTO ( ) ( 1990) (CPU2\SS_DGAME.TRD) SH RUS ( ) ( 1990) (CPU2\SS_DGAME.TRD) - RUSFONTS (cpu3\-----001.TRD) TEST D-D (Program for control the floppy disk) (Vitebsk 14/07/1990 MSW) (CPU2\SS_DGAME.TRD) DEM.KTX ( ( ) (274500 . . 3 .15) 1990) - KARTEX (1990) (CPU2\SS_DGAME.TRD) DOCTOR R ( 1990?) (CPU2\SYSTEM-1.TRD) DCtrk ( , 1990?) (CPU2\SYSTEM-1.TRD) YuricCom ( CAT) ((c) DynaSoft 1990 Version W.1) (CPU2\SYSTEM-1.TRD, MidiSoft BOOTS.TRD/YURIC) EPSON driver (AVP, 1990) (CPU2\SYSTEM-1.TRD) DR55 (EPSON driver R-soft90) (CPU2\SYSTEM-1.TRD) PrTXT ( , 1990) (CPU2\SYSTEM-1.TRD) PHTOOL (PROFESSIONAL HACKER'S TOOL - 1990, , V.L.V. 1992, MiPh&T Hacker Club - ADM, Magic File Compressor, ADS) (ver.3.3 24.10.1992 - cpu3\LOGROS.TRD) VCOPY3 (CK COPY /K C/) ( TREK A>B by KORDIAL 1990) (cpu3\PPPPPP.TRD) Rboot (N.Rodionov Leningrad, 11. 1990) (cpu3\SYSTEM-2.TRD) (GAMES-1.TRD Newart') MPPS EPROM i2716-27256 (c)PVA-soft, Leningrad'90 (system24 MidiSoft) Hex Calculator - (c)1990 Fr-Soft (system24 MidiSoft) FILE CHANGER - Fr-SOFT (system24 MidiSoft) MOVE - (c)1990 Fr-Soft (system24 MidiSoft) DT (c)1990 Alexander Troosh - ? (system24 MidiSoft) - Odessa-90 disk catalog driver Written by "Andriuha" Kazakov 10.07.90 (system25/boot MidiSoft) *TR-DOS WINDOWS* (c)Copyright 1990 ELAN Software (system25/boot2 MidiSoft) boot by Kraskovsky Vass from Leningrad 22.11.1990 (system25/boot6 MidiSoft) TL DISC (system25 MidiSoft) - ( 1989 ) Tape-Tape Copy (c) Y.Kovalevsky /Leningrad/1990 (system25/T-T Copy MidiSoft) - L.WORD 2 (TLW2) - Rusificated by ~Inforcom~, Moscow, 1990 - Disked by LSA Service, Odessa, 1991 (system26 MidiSoft) OM-2RLe, OM-exp (system26 MidiSoft) - - (system26 MidiSoft) ? 102 (system36/TT MidiSoft) ? "48" (system36/Test KP MidiSoft) ?Test OZU (system36 MidiSoft) ?Test Z80 (system36 MidiSoft) DOCTOR-2 Disk Doctor v2.2 - written by Nicolas Rodionov Leningrad 1990 (system36 MidiSoft) - ( 4.3 ) SPECH128 (AY CONVERSION BY BR0MBA 1989, DISKED BY GURIN 1991) (CPU2\SS_DGAME.TRD) Gemini Wings disked by Cleopatra (XYIZNAET\GAME\FAX.TRD Newart') Alfavit (Y. Kovalevsky /Leningrad/ 1991) - UDG Columns Piter'91 Fox Hunting ( ) Andrey Mikhailov'91 Gallows () Alexander Eskevich'91 Kubes () DenSSoft Inc'91 On Susan Poptsov D., Shalyakin A.'91 QWERTY-training 'Soft'91 Sir Knight DZh'91 Sokoban SU Gold'91 Tetris ShiSoft'91 Track Russian Bear'91 Xonix ShiSoft'91 .'91 AG'91 ! POB'91 Izvekov A.N.'91 '91 Boulder Dash 5 Kraskovsky Vass'91 Boulder Dash 6 Kraskovsky Vass'91 Lode Runner () (dsk) Sterh'91 1991 - ( , , C.C. ( ) ) Andy Tacker - "" http://zxbyte.ru/additional_tapes_for_computer_byte.htm Catalog ( 1991, . 382-20-01 .21-09 (21-23.)) (C2.TD0) - TLF-48 (1991, D.M.Shtabsky - LIANSOFT & ALEXCO) (C2.TD0) - Cerikiller (1991, ) - MASTER FILE 14. . . (. 33-04-48, 01.1991) PLATA v4.01. . . . () T32K.v2. . Disk version by Petrov Sergay. tel. 33-04-48 Krasnoyarsk 1991. SPORTLOTO. 48K. vBv ( ). , . /Sportloto () Tera Software Group'90/ COOKIE. 48K. vBv. . HARRIER. 48K. vBv . , .. . , , . ( 1991 Tera Software) CONVER--Comander V 2.06 128K (c) Y.Kovalevsky S.Peterburg 1991 BETA-disk monitor (Y.Kovalevsky Leningrad 1991) (ZX000.TRD V 2.3) True English by L.Kluev (CPU2\SOFTWORK.TRD) . (S.A.P.) () - TR0to159 (04.91)(CPU2\SS_DGAME.TRD) MIRROR - 159 - (sic!) 1991 (MIRROR CPU2\SS_DGAME.TRD) (SYS20.TRD vBv) (.) Game Box (. . 1991) Mike Studio S.Peterburg 1782908 - ZX ARC (CoCo) (Compressor v 1.01) (1991)(CPU2\SOFTWORK.TRD), V3.03 1992 (CPU2\SOFTWORK.TRD) ASC packer (1991 ) COPY*IBM - BG&SI-SOFT (c) 1991 (SYS20.TRD vBv) ZX-Word (1991 SI-SOFT & BG-SOFT (Broken Glass Software) ) - Pencraft 1991 - 1991 - p p ()? TR-DOS 5.04T - 1991, ? ( C.C. thanks to Vasilyev & Laptev 12.11.91 - Dragon Breed DISK002.TRD Newart'): "In 1989 I got my first computer a Sinclair ZX Spectrum 48K. A year later I started building computer external hardware modules like EPROM programmers and ROM emulators, and writing different programs in assembler for the Zilog Z80 processor used in it. All those projects were a hobby, but that was probably the first time I started reverse engineering code. There were two reasons for that. One was to learn the assembler language better through understanding disassembled code; another was to modify the programs, for example, to add extra features." DISCBLOC - TR DOS 5.04T (c) MAKSSOFT 1991 Servise 1.01 -DISK BLOC- "plomba ok" (SYS20.TRD vBv) , . (Pencraft) - DATALOG data base English version & Beta-adaptation (1991)(CPU2\SS_DGAME.TRD) special thanks to V.Yeliseyev TETRIS 2C (1991 , , .) LAYOUT (C22.TD0) " , !" - LAYOUT91 ""? , . BMD-DATA (1991-1993 , ) - 48/128 (C24.TD0) RESISTOR - (SYS20.TRD vBv) ( 1990 1991 .) "" (1991-1994) "Copyright (c) Koslov O., InterCompex 1991", "Repaired by P.Trubinov, 06/10/91", "HOBBIT 2 (C) INTERCOMPEX CP/M VERS.2.3.28 - 26/05/92 - 48 KB with CCP-loader", "InterCompex (C) 1992", "FFS (Forth File System) V1.6, release 5.10.92", "FFS V4.3 (c) MD 1993", "-=* Hobbit Commander v.1.2 (c) by AGA, July 1994 *=-", "Gentleman's Toolkit v2.3 (c) by AGA, 1994", "-= GENTLEMAN's TOOLKIT =- 2.4p (c) . (812)-235-08-95 1994 ", " 2.3, { (c) by OK, 1993 } , , , ", "-= DISK MANAGER v3.2 =- (c) by Alexander Agranov, August 1994 (c) by Oleg Kozlov, December 1993", "-= Forth->ME Texts Translator v1.0 =- (c) by Alexander Agranov, August 1994", "iS-DOS v2.0 (Hobbit) (c) by IskraSOFT, 1992/1993 Adapted to Hobbit by Peter True & AGA", "*** ZX WORD v2.5H *** () by V.Yeliseev, 1993 Adapted to Hobbit by Sasha Agranov" Set Mov4 (Yu.Rodionov 1/91) (46.TRD ) - - MEGABASIC [russian] autocopy system v.1b by Yu.Rodionov 1991 (46.TRD ), Eagle's Nest (55.TRD ) Mad Martha - disk version by Yu.Rodionov (1991) (4.TRD ) ASC Screen Crasher version 2.6 07.Aug.1991 (58.TRD ) CUT OFF (PENCRAFT SOFTWARE (c)1991 ) - Magic' (58.TRD ) PR40/50R ( PENCRAFT 1991 - L.Kluev, I.Dumov) - (58.TRD ) HELP ME! ( ( 1 ...) - . - 1 2) (83.TRD ) - ( , 1991) ROM>RAM>ROM (c) Yvtooshenko,1991 (system27 MidiSoft) EPROM programmer by RA3AO (system27 MidiSoft) - 27512. ( ) 7 - , 420133 , ., .50 56-76-74 (1991) (system46 MidiSoft) 7 - , 420133 , ., .50 56-76-74 (1991) (system47 MidiSoft) ARTSTUDIO v1.5 . James Hutchby (OCP) 85 . DOS - .; Kordial 91 . ( ). ; . COPY . Lebedev S.M. 91 . A<>B A->A; 41 KB , . MON7 (Advanced monitor v7.05). . Wolf. . Manager n/a author 122 - , , , UDG n/a Andrey Plakuschev 42 - , , .. n/a author 66 - , , , UDG, Copper Feet: -1, -2, , , , - Vladimir Fufaev'91 Blackjack () ITP Universal'91 ATM comm - ( 1991: -, ) (newart/UNSORTED/SYSTEM/LOGROS.TRD) HIRO () - adapted for BETA unit KROTOV V Leningrad 1991 520 51 34 (newart/UNSORTED/SYSTEM/LOGROS.TRD) ww.com ( CP/M) - - "" WW (, . 202 2-74-24) - " , " https://www.youtube.com/watch?v=PjeHsDs3d0g Elite SU - (ZXDISK.TRD Newart') IKARY WARRIORS CRACKED BY MICHAEL ABRAMZON 1991 (6SYS.TRD Newart') 1991 DISK CRAKED UTILITY Writed by S.Volkov & E.Rytikov (DISK.TRD/DCU_WORK Newart') ZX-Spectrum+ DISK DOCTOR 2.1 (c)GMR Ltd 1991 (DISK.TRD/DOCT 2.1 Newart') DISK.D.B - S-SOFT Moskow 1991 (DISK.TRD Newart') IBM COPY (DISK.TRD Newart') IBM conv (DISK.TRD Newart') SCREEN MACHINE DISK VERSION BY PENCRAFT 1991 (DISK.TRD Newart') dropbox , https://www.dropbox.com/s/kd7wm6768n52rts/old_systems.zip?dl=0 SEANDEMO (ZX Top Service demo) - 1991 Eugene Stepanoff Saint Petersburg 295-88-00 (CPU1\DISK1.TRD) AMS1 by Megamonster / , 1991? https://zxaaa.net/view_demo.php?id=6695 -128-1 (c) 1991 RATCOPY DISBAS-R ( -) ( 1991?) (CPU2\SOFTWORK.TRD) TWO ( ) (()TWO co.ltd. 1991) (CPU2\SS_DGAME.TRD) Pirat 05 ( Y.Kovalevsky /Leningrad/ 1991) (CPU2\SS_DGAME.TRD) -2.0 ( ) (. // 1991) ( ) (CPU2\SS_DGAME.TRD) MAGIC SCREEN* ( MAGIC-, 1991) (Program writen by * A.S.Ko"LN *) (CPU2\SS_DGAME.TRD) M.MAKER (Disked by PAPIR & 1991 The town of Gatchina) (CPU2\SS_DGAME.TRD) (SPD MB+) ( 1988 1992, . ?) (CPU2\SS_DGAME.TRD - ?) STATIST ( , 1991) (CPU2\SS_DGAME.TRD) COP128.2 ( , 1991) (CPU2\SS_DGAME.TRD) SYSTEM TRACK DUMP (PENCRAFT SOFTWARE (c)1991 ) - (CPU2\SS_DGAME.TRD) DICT-80S (- , 1991) (CPU2\SYSTEM-1.TRD) ID-COM (((c))ID-COMANDER V1.2) ( , 1990-1991) (CPU2\SYSTEM-1.TRD) COMM (MR SUPERBOOT) ( , 1990-1991) (CPU2\SYSTEM-1.TRD) bootGAME ("No more than 20 !") (M.RUSALOV 1991) (CPU2\SYSTEM-1.TRD system25/boot 10,11 MidiSoft) ART STUDIO (adapted for BETA unit KROTOV V LENINGRAD 1991 (t. 520 51 34)) (cpu3\-----001.TRD) ( 1991?) (cpu3\LOGRO000.TRD) ( "" 1991)(cpu3\LOGRO000.TRD) Test KP ( 48) ( 1991) (cpu3\LOGROS.TRD) TrCopA/A ( ) (Written by Michael (c) 1991) (cpu3\PPPPPP.TRD) DISKCOP2 ((c)PV' 1991) (cpu3\PPPPPP.TRD) V.V.Commander (SERVISE+, CORNORT - 1990-1991) ( : Master of Power, Corrected by Lebedev) (cpu3\SYSTEM-2.TRD, system25 MidiSoft) BLAST (- ) (DISKED by DUPANOV 1991) (cpu3\SYSTEM-2.TRD) LAYOUT91 (Translated and disked by . 1991) (cpu3\SYSTEM-2.TRD) GRB (Monocolor sprite grabber) ( 1991) (cpu3\ZXDIS013.TRD) ALGTXTM ( MidiSoft) ( , " ", ) PASSWORD ( MidiSoft) ( ) - LOM by - ",, , ??.05.1991 " (system20 MidiSoft) BOOT SYSTEM (c)1991 Fr-SOFT corp. (system25/boot7 MidiSoft) Copy screen to printer version 1.3 14 dec 1991 (c)1991 Shevchenko Vadim, Trush Alexander - (system25/SCR->PRN MidiSoft) ZX DISK DOCTOR V1.0 - Koban A.V. (c) 1991 (system26/ADV1.0my MidiSoft) Secretary - 26.03.91 ROSMARKETING ONPC (system26 MidiSoft) DICTIONR (system26 MidiSoft) - - boot by Pink Flamingo Software (system25/boot03 MidiSoft) PAINTFILL (system25 MidiSoft) - - ?DICT-80s (system28 MidiSoft) - - ?BIORITMr (system28 MidiSoft) ?SEX (system29 MidiSoft - ) ?CHANGE.M (system29 MidiSoft) VRESTORE (c) CK software (system29 MidiSoft) Art Studio 128 - Beta 128 adaptation by D.Koveos and IndSoft'91 (system29 MidiSoft) UNIBASE+ (system29 MidiSoft) OPEN (system29 MidiSoft) SAVE9997 SAVEscr. (system29 MidiSoft) CAT 0>80 - . (system29 MidiSoft) Russian Letters (system30 MidiSoft) ?CRAC S (system31 MidiSoft) - cracker , 1991 ?Z80-list (system37 MidiSoft) - - : MIC-COPY by Michael Patlis (system29 MidiSoft) - , LOAD UTILITY. From AY-REAL 128K by Michael Patlis (system29 MidiSoft), AY-REAL SOUND 128K by Michael Patlis (system29 MidiSoft) - MICRUS SOFTWARE ODESSA 1993 -TLW2 by MELsoft & SII 13.2.1992 ( & .)? PENTAGON,Profi,UiPs,ZXLPRINT3, (2327767.TRD Newart') -BOILER (cpu3\QWERTYUI.TRD) - [Chaos n/a author 65 - , UDG] [Color Lines n/a n/a 48 - 1995] [Lines n/a author 22 - , , Kempston] [Overload n/a n/a 32 - , ?, , UDG , REM] [Tetris n/a author 29 - , , ] [ 4 n/a author 21 - , , UDG ] [ "" n/a author 67 - , UDG ] [ n/a author 30 - Overload, REM, x-color] , : DB>> , " DB>> " - ? DB>> ? > , -, . / 1991(cpu3\LOGRO000.TRD)/ DB> , : DB> PITER Ltd 1991 DB> Akhudow T.A. tel 2353749 DB> DB> "" - DB> "". : () DB> (). DB> - DB> ? > , . > , > . / Laser Basic/ : *** Area: NET_2_5090_108_21 Date: 10 Jul 03 1:10:10 *** From: Vladimir Bogdanovitch (2:5090/108.21) *** To : Vadim Chumachenko (2:464/117.27) *** Subj: In a message of 07 Jul 03 Vadim Chumachenko wrote to me: VB>> , p. pp p VB>> pp p, p, . VC> ! ? ! p p: pp, p pp (p p , pp pp , p p, pp ). pp p p pp p p p . p p . 1989 . 1990 pp. p 48- p pp p p ( ) p p p p 302 (p ). p p p, p p ( - p p). p p. , p 302, p pp ( , ). (- ) p (pp, p) - p p p p p p p p p p p ( p p). p p p . pp , p p . pp p p. , p p. , p p . , pp - , , p, p . Vladimir Bogdanovitch (vBv) --- Spot 1.3b *** Area: ZX.SPECTRUM Date: 26 Sep 03 22:17:56 *** From: Vladimir Bogdanovitch (2:5090/108.21) *** To : Kirill Frolov *** Subj: In a message of 26 Sep 03 Kirill Frolov wrote to Andrew V. Miheev: KF> ? KF> , ... , pp p p (7 p - pp ) p. 1990. p p - p. - Vladimir Bogdanovitch (vBv) Pencraft : (Technomax), - SAMPLER v1.1 ( 1994) (59.trd Newart') iS-DOS? 1987 1988 - 1989 S I N C L A I R R E S E A R C H L T D . ZX SPECTRUM. MONITOR 48K. L E N I N G R A D 1 9 8 9 (RST.TXT) 1990 . . - ( ) 1990 - Z-80 () 1990 Layout. Layout 86 1990 "". . "". 1. 1990 1990 . BASIC - ֻ ( )