最初,我不打算在
Chaos Constrictions 2018上进行演示,但是,在
抄送 2-3周前,
我意识到我无法空手参加演示,并决定为
386 / EGA / DOS写一个简短的演示。
我在
DOS下的
Turbo-C中编译了我的
lib AnotherGraphicsLibrary库 ,该库非常适合
EGA模式的节拍计划结构,我对制动器,尤其是
EGA制动器感到失望。 在这个非常有限的时期内,以我希望看到他的形式进行的演示是不可能的。
但是,我不能放弃,什么也不做。 然后我想起了很久以来我一直想参加
ZX-Spectrum演示比赛。 而且由于去年我获得了两个
48k雷亚尔,因此可以通过创建演示获得一些乐趣。 顺便说一句-对我来说,编写演示的最重要的事情是在现实生活中进行测试,
乳化剂不能从过程中获得如此快的乐趣,当代码下一次更改之后,将演示上传到真实环境时,当您看到真正的硬件如何对字节进行混洗时,这真是一种美妙的感觉。记忆绘图效果。
由于我只有
48k实数,因此我决定为
48k进行演示。 而且由于时间有限且缺乏任何开发,因此只能选择创建
1k简介 (演示仅为1 KB,即1024字节)。
上一次,我在
EmuZWin中
戳入 z80 asm ,
这是一个出色的内置汇编器模拟器。 但是不幸的是,
EmuZWin不能在
Windows XP或更高
版本上运行 ,或者它有故障。
在研究了各种选项之后,我停了一大堆
Unreal + sjAsm + Notepad ++程序,在我看来,就
方便性而言,它们
比 EmuZWin 容易得多 ,但相比之下,它们还活着。
在撰写此简介时,我在源代码中进行了一个开发日志,并根据该日志编写了以下文本:
世界您好!
在
z80 asm经验几乎为零的情况下,我应该首先写什么? 没错,对于其中一种效果,5x5子画面的输出是熟悉的或40x40像素(具有讽刺意味的是,在将来,为了适应1k的效果,未完成的部分被排除在介绍之外)。
令人惊讶的是,使用
Down HL使用预先生成的行地址标签,从头开始执行此操作非常容易。
哦,索引寄存器,它们有多方便,但是速度较慢,实际上消耗了条形图。 我不得不把它们的使用扔掉。
还是在这里,一开始我就遇到了令人难以置信的
sjAsm故障,或者说是最新版本。 虚幻中的
虚幻主义显示出绝对疯狂的命令序列。 我下载了倒数第二个版本-已经可以以某种方式使用它。

很明显,您不能将足够数量的先前绘制的精灵放入1k,所以我决定动态生成它们。 并非如此,而是使用多边形进行绘制。
因此,我编写的第二个过程是绘制三角形的过程。 在大多数情况下,这是他们自己使用
C语言编写的代码的移植
。 与
C版本唯一的全局差异是,首先生成多边形扫描线,然后才在这些扫描线上绘制它们。
使用高级语言后,您可以从
jr aka goto获得一些乐趣:
.sort_me_please: ld de,(tr_x2) ld bc,(tr_x0) ld a,d cp b jr nc,.skip1 ld (tr_x2),bc ld (tr_x0),de .skip1: ld de,(tr_x1) ld bc,(tr_x0) ld a,d cp b jr nc,.skip2 ld (tr_x0),de ld (tr_x1),bc jr .sort_me_please .skip2: ld de,(tr_x2) ld bc,(tr_x1) ld a,d cp b jr nc,.skip3 ld (tr_x2),bc ld (tr_x1),de jr .sort_me_please .skip3:
事实证明,它是在合理的时间在
z80 asm上编写了一个有效的
draw_triangle ,使我感到有些震惊,它在连接多边形时逐个像素地绘制了一个多边形并且没有孔。
你好三角形!微粒

由于屏幕线标签生成器的存在,我使用此标签编写了一个相当弯曲且缓慢的点输出过程。 该过程有两个入口点-只是像素的逆,而像素的逆是用
INK +
BRIGHT +和其中一个寄存器中指定的颜色填充像素。
在用粒子创建效果的阶段,我发现
维基sjAsm中具有示例结构的示例不起作用。 谷歌搜索从
zx-pk.ru站点提出了一个主题,在此描述了此问题,并且没有解决方案-哈,很好-另一个故障。
我决定清楚地做所有事情-通过中断来更新坐标,而不考虑渲染。 是的...加上字节以生成中断表。
在此阶段,粒子很少,它们几乎无法放入框架中-顺便说一句,这是我输出%点的过程很慢))但是使用带有子画面的公用表并不能让我把它扔掉并准备好,因为 仅需一个表生成器,就大大节省了空间。 我也很喜欢自行车:)
粒子太少了……增加了它们的数量,但是现在渲染已经变成了两帧。
在Peters WS64上进行测试,这是我上次使用cc并于今年冬天修复的:)顺便说一下,就像在
Commodore 64上一样,这些点已经在这个阶段变成了粗体的水平点
2:1 。 之所以发生这种情况,是因为最初的粒子数量很少,而且我不满意这样的事实,即在现实生活中运行时它们几乎是不可见的。 通过更换盘子解决了问题
db 128,64,32,16,8,4,2,1;
在
db 192,192,96,24,12,6,3,3;
这会降低定位的准确性,并使飞行过程有些生涩,但能见度却有所提高。 在这里,还起作用的是粒子从上到下掉落-它们的视线垂直涂抹。
粒子偶然以各自的随机速度掉落,两个字节用于存储
Y坐标。
精灵
我扔掉了精灵部分的未完成部分,意识到自己无法适应
1k 。
此外,空间已经不足,所以我想起了
Introspek关于打包程序
的精彩
文章 ,我选择了
zx7作为打包程序,它节省了大约110个字节。 顺便说一句,也许有人知道一个更适合1k介绍的打包程序?
混沌构造

由于我已经有一个输出多边形的过程,所以将
cc徽标拆分为多个多边形并逐个显示它们似乎是一个不错的主意。
我写了一些显示几个多边形的测试代码-一切都按我的预期工作-很好。
为了检查我的想法是否适合
1k ,根据估计,生成了一定数量的随机多边形,并为徽标生成了足够数量的徽标,并将其带到了源头。 已编译,并确保以这种形式-出色-简介适合1024字节的限制。
生活照,您能识别桌上的设备吗? :)))我决定再次测试半成品的介绍文件,该介绍文件已经带有多边形,并且有一个打包器,已上传到真实的文件中,并进行了重置。 首先,我开始犯了一个错误,那就是我忘记在某个地方初始化内存,从那里,在
0x00仿真器上一切正常,在现实生活中存在导致重置的垃圾。
没有找到比找出问题的地方更好的方法了,我无法提出半分割法。
进行了两个小时的真实复位,无法定位故障...
事实证明,它不在我的代码中,而是在我加载WAV的电话中随附的声音
增强器中 。 来自
WAV文件中的位流的改进程序生成了ir妄流。
我一关掉,一切就神奇地工作了。
他在
errorsoft greenpixel图形编辑器中概述了徽标,将徽标分成多个三角形,然后手动将坐标驱动到源。 将
Chaos Constructions徽标完全塞满并在现实生活中运行它-我很高兴-它看起来还不错。
第一个徽标实际显示但是,我填充的随机多边形太少了,在真实徽标上,每150个字节限制为
1k 。 尽管存在粒子效果仍未完成,并且各部分之间的过渡非常尖锐的事实,但这仍然没有实现。
那天上床睡觉,由于小故障,结果早在上午8点8分)
是的,我尝试通过分别存储坐标和顶点索引来优化大小,但是打包程序不太喜欢它,这使得大小只会增加。
决赛

我想出了如何使徽标输出多样化的方法,为此,几乎只花了两个像素标签:
fake_points1: db 1,2,4,8,16,32,64,128; 1 ch fake_points2: db 32,8,128,2,16,1,64,4; 2 ch normal_points: db 128,64,32,16,8,4,2,1; 3 ch
这给增加了渲染徽标的细节带来了很酷的效果,或者最初缺乏细节,而清晰度逐渐提高。
最后,我制作了所有过渡的最终版本,扔掉了所有东西。 在此过程中,我在绘制三角形的过程中发现了一个小故障-如果两个顶点具有相同的
Y坐标,则将三角形绘制为弯曲形状(在计算
dx时看起来像除以0),并绕过了临时hack。
在列宁格勒48测试最终版本尺寸优化
两位数字是“额外字节”94个额外字节...
削减“文化”保存/恢复输入/输出程序的寄存器的时机已经到来,尽管这是必要的,但到处都是,但是记忆正在消耗。
86个字节...
经过实际测试-有效! 他节省了更多的内存,同时修复了0-63字节除以的错误!
57个字节...
添加循环。
random_store: start:
顺便说一下,循环是在拆包级别完成的,因为 作为
RNG的熵源,使用了初始化代码中的几个字节(以节省空间),
RNG在第一部分中破坏了这些字节。 因此,对于循环,在介绍结束之后,先进行
ret ,然后再进行另一次解压缩并转换为解压缩的代码...
无法摆脱最后的48个字节,我不得不删除中断处理程序,但是万岁! 塞! 甚至剩下1个额外的字节。
而且,由于没有中断,因此可以对帧进行评分,并且很难在一个像素处看到光束横截面,因此我增加了每只眼睛的粒子数量,同时在速度和娱乐性之间做出了折衷。
将代码和数据从一个地方移动到另一个地方更加困难,愚蠢,这对打包人员有所帮助。 这花了一些时间:)
这释放了大约
10个字节 ,我在其中模仿了声音。 KHK,KHE,声音-在某些地方,通过插入耳朵即可:
ifdef UseSound ld a,d and
我没有“钉住”声音,但做了一个定义,因此获得了两种版本的简介,有声或无声。 在没有声音的情况下,“多余”字节被塞满
db 'e','r','r','o','r'
我收集了
trd并
点击 ,并将其全部上传到
cc网站。
Hooray-我正在参加demopati!
后记
原来,声音听起来很有趣,拍子上有人说“清晰的声音”,有人奇怪地看着我,在
pouet上我发现了以下内容:

这:

总的来说,我不明白是否有人喜欢10字节的声音:)
最后一点-很遗憾,今年没有举行
1k竞赛,我认为这项工作很不错,但是很难与
640k竞争,但我真的很想参加比赛。
写演示,写1k!这就是最后的结果(ps,请注意耳朵):
静默版本: