[音乐]
好吧，图形声音和输入
终于都在游戏坦克上工作
了，原型平台游戏将它们联系
在一起这无疑是迄今为止
在这个系统上运行的最像游戏的软件，
但还有很多工作
要做 完成了我至少感觉而且我可以说
我在上个月构建了一个游戏机
我解决了几个硬件问题，这些问题
几乎不可能运行游戏，其中最大的
问题是英国时图形变得
混乱 - 视频 RAM 你
可以在这里看到一些思想
数据被严重扭曲才能弄清楚这
一点花了几天时间查看
原理图用示波器探测
，甚至
用 Arduino 而不是 6502 CPU 测试图形板，
罪魁祸首原来是门延迟
在右使能信号上，导致内存地址发生变化
，在右选通脉冲结束之前到达视频 RAM 芯片，
每个地址信号
只需要通过一个 门一个 74
HC 2:57 多路复用器，它控制
CPU 还是 DMA 引擎，因为
V Ram 看到的地址
相信正确的选通脉冲必须
通过这些多路复用器中的两个
以及一个或门，最终成为
高达三个门 现在看起来很
糟糕，但发现它有多糟糕
让我们仔细看看
这些芯片在 5 伏电压下的数据表，
或门只有典型的第六和
第二传播延迟，这在其上并没有那么
大 自己的，但多路复用器
增加了整个 11 纳秒，总
延迟为 17 纳秒
WD cs65 co 2 的数据表向我们展示了
地址线保持稳定直到
5 之后不久 -
如果我们向上滚动，系统时钟变低我们可以看到 该
地址保持时间仅为 10 纳秒，
因为我们的时序偏差大于
写入 vram 的字节也将
写入其他地址，并且
看到这涉及利用一个
未使用的门和逆变器上的胶合并
添加一个 bodge 线的小迷宫
将写入使能脉冲缩短了
一半这仍然足够长，可以让
权利通过但现在它
在下一个地址加载
之前完成最后所有视频 ram 都可以
访问下一个主要修复涉及声音
卡特别是
混合四个通道输出的电路，
至少对我来说，模拟电子设备
比数字电子设备要困难得多，因此
需要进行一些试验和错误
这个面包板我已经分解
了每个通道的输出并安排了
更换 混频器电路这些
电容器形成高通滤波器并
防止任何一个通道从其他通道过度
吸收电流这些
电阻器什么都不做
我还必须将一个电阻器插入这个
插座因为我
订购零件时没有意识到它 是一个
集电极开路输出，这意味着我
必须添加自己的上拉电阻来帮助解决
这些模拟音频问题 我
编写了这个声音测试应用程序让我可以
操作 用游戏手柄控制每个音频寄存器
所有通道
都有一个控制字节，用于选择
音量和八度音程 每个方波
通道都有另一个字节来
选择音高，而波通道有
一个指向存储的音频剪辑开始的指针
和 专用 wave RAM
[掌声]
[音乐]
[掌声]
[音乐]
现在我正在使用的当前批次的磁带
有 8 KB 的存储空间，这
会让事情变得有点棘手，
因为 WAV RAM 有 4 KB，
而全屏显示 图形
占用 16 K 值得庆幸的是，
github 上的 Piatra music 发布了 6502 的 inflate
实现，
包括在我的游戏代码中，这意味着我可以
使用供应实用程序压缩
我 PC 上的文件并将它们提取到
游戏坦克上 RAM 中的任何位置创建 图形
文件
转换图像相对简单，必须将其大小调整为
128 像素 x 128 翻转
并使用特制的 pallet fi 保存为索引颜色位图
然后，您只需
使用您最喜欢的十六进制编辑器删除位图标题即可
选择标题，而无需阅读它您
可以检查文件的长度 128
x 128 像素图像应该是十六进制 4000
字节，如果您的文件是十六进制 4438 字节
那么 你只需要选择第一个十六进制
438 字节并
在 hxd 中删除它们如果你将行宽设置
为与图像宽度相同你甚至可以
看到图像的轮廓以
确认你是否正确
现在压缩文件 使用 zopfli
使用 - - deflate 参数并
使用 LS 检查最终大小转换后的
照片不适合这种压缩方法，
因此从 16,384 字节到
4360 副
对于游戏来说并不是太破旧的精灵表 具有更简单的
图像和重复并被压缩
得更小 inflate 例程本身
占用 508 字节，但这仍然为
我们留下了相当大的空间用于代码映射
数据甚至一些音频样本
另一个现有工具 t 帽子的
派上用场是 rxi 的平铺套件 这个地图
编辑器让你可以设置规则，根据不同的形状排列，
从你的精灵表中程序性地选择平铺
平台的边缘可以自动使用
平铺的斜面版本，或者
特定尺寸的平台游戏可以是 给定
它们自己的特殊图形，例如这些
灯
tile kit 可以将其地图数据导出为 JSON
，这很容易编写转换器，
因为
我的转换方法是将
地图分成 16 x 16 块，
并将它们保存为单独的二进制文件
然后我从我的汇编代码中引用
我已经导入了
地图的四个块让我们来看看它们是如何
使用的
prief屏幕和下一个屏幕
在玩家角色点击屏幕的左侧
或右侧时运行
它们递增或递减a
称为当前瓦片地图的变量绘制瓦片地图
是指间接
索引模式下的当前瓦片地图，因此递增或
递减当前瓦片地图加一
会移动指针 任何一个
方向上的 256 字节 让我们看看如果
我们前往最左边的屏幕并继续
前进会发生什么 没有什么特别的 任何连续的
256 字节区域都可以呈现为
具有完整碰撞检测的瓦片地图
我们传递的第一个离散实际上
是音乐数据 其余部分是压缩的
精灵动画定义和
子例程的最终代码
我暗示我们最终可能会
达到游戏代码但实际上
由于
这些瓷砖地图的混乱性质而卡住实际上是不可避免的，任何
值 0 到 15 都被视为
不可通过和部分 压缩器
精灵有很多
零离开屏幕右侧
不是那么有趣这个区域全是
零并且因为现在正在编写游戏
所以不可能将
我对该项目的下一个计划通过
他的演示进入冒险游戏
敌人锁着门找到关键的四肢
和某种目标我也
准备修改所有的板
，因为目前 原型是一个
脆弱的悬空
Bajwa r-- 下一个版本可能
只有两块板，并且会有一个 3d
打印的外壳，顺便说一句，模拟器在键盘输入和声音支持方面
也取得了很大进步
它已成为快速迭代的宝贵工具，
最终我想
开源并共享游戏系统的套件版本，
并希望编写
详细的编程手册以
一如既往地支持该平台的开发。
这是 Clyde Schaefer，
感谢观看 我的视频或发现它很
有趣