1
00:00:05,469 --> 00:00:10,710
[音乐]

2
00:00:10,710 --> 00:00:15,060
好吧，图形声音和输入

3
00:00:15,060 --> 00:00:17,010
终于都在游戏坦克上工作

4
00:00:17,010 --> 00:00:19,949
了，原型平台游戏将它们联系

5
00:00:19,949 --> 00:00:22,289
在一起这无疑是迄今为止

6
00:00:22,289 --> 00:00:24,510
在这个系统上运行的最像游戏的软件，

7
00:00:24,510 --> 00:00:26,969
但还有很多工作

8
00:00:26,969 --> 00:00:29,550
要做 完成了我至少感觉而且我可以说

9
00:00:29,550 --> 00:00:32,969
我在上个月构建了一个游戏机

10
00:00:32,969 --> 00:00:36,570
我解决了几个硬件问题，这些问题

11
00:00:36,570 --> 00:00:39,420
几乎不可能运行游戏，其中最大的

12
00:00:39,420 --> 00:00:40,679
问题是英国时图形变得

13
00:00:40,679 --> 00:00:43,469
混乱 - 视频 RAM 你

14
00:00:43,469 --> 00:00:44,670
可以在这里看到一些思想

15
00:00:44,670 --> 00:00:48,149
数据被严重扭曲才能弄清楚这

16
00:00:48,149 --> 00:00:49,679
一点花了几天时间查看

17
00:00:49,679 --> 00:00:51,390
原理图用示波器探测

18
00:00:51,390 --> 00:00:53,789
，甚至

19
00:00:53,789 --> 00:00:57,630
用 Arduino 而不是 6502 CPU 测试图形板，

20
00:00:57,630 --> 00:00:59,759
罪魁祸首原来是门延迟

21
00:00:59,759 --> 00:01:04,379
在右使能信号上，导致内存地址发生变化

22
00:01:04,379 --> 00:01:06,719
，在右选通脉冲结束之前到达视频 RAM 芯片，

23
00:01:06,719 --> 00:01:10,349
每个地址信号

24
00:01:10,349 --> 00:01:13,590
只需要通过一个 门一个 74

25
00:01:13,590 --> 00:01:17,280
HC 2:57 多路复用器，它控制

26
00:01:17,280 --> 00:01:19,709
CPU 还是 DMA 引擎，因为

27
00:01:19,709 --> 00:01:27,640
V Ram 看到的地址

28
00:01:27,640 --> 00:01:29,859
相信正确的选通脉冲必须

29
00:01:29,859 --> 00:01:31,900
通过这些多路复用器中的两个

30
00:01:31,900 --> 00:01:35,409
以及一个或门，最终成为

31
00:01:35,409 --> 00:01:39,189
高达三个门 现在看起来很

32
00:01:39,189 --> 00:01:43,239
糟糕，但发现它有多糟糕

33
00:01:43,239 --> 00:01:45,370
让我们仔细看看

34
00:01:45,370 --> 00:01:50,890
这些芯片在 5 伏电压下的数据表，

35
00:01:50,890 --> 00:01:53,290
或门只有典型的第六和

36
00:01:53,290 --> 00:01:56,409
第二传播延迟，这在其上并没有那么

37
00:01:56,409 --> 00:01:59,109
大 自己的，但多路复用器

38
00:01:59,109 --> 00:02:02,019
增加了整个 11 纳秒，总

39
00:02:02,019 --> 00:02:07,599
延迟为 17 纳秒

40
00:02:07,599 --> 00:02:11,229
WD cs65 co 2 的数据表向我们展示了

41
00:02:11,229 --> 00:02:13,419
地址线保持稳定直到

42
00:02:13,419 --> 00:02:16,300
5 之后不久 -

43
00:02:16,300 --> 00:02:19,930
如果我们向上滚动，系统时钟变低我们可以看到 该

44
00:02:19,930 --> 00:02:22,800
地址保持时间仅为 10 纳秒，

45
00:02:22,800 --> 00:02:25,539
因为我们的时序偏差大于

46
00:02:25,539 --> 00:02:28,449
写入 vram 的字节也将

47
00:02:28,449 --> 00:02:30,569
写入其他地址，并且

48
00:02:30,569 --> 00:02:33,159
看到这涉及利用一个

49
00:02:33,159 --> 00:02:36,280
未使用的门和逆变器上的胶合并

50
00:02:36,280 --> 00:02:39,129
添加一个 bodge 线的小迷宫

51
00:02:39,129 --> 00:02:41,770
将写入使能脉冲缩短了

52
00:02:41,770 --> 00:02:44,560
一半这仍然足够长，可以让

53
00:02:44,560 --> 00:02:46,900
权利通过但现在它

54
00:02:46,900 --> 00:02:51,250
在下一个地址加载

55
00:02:51,250 --> 00:02:56,340
之前完成最后所有视频 ram 都可以

56
00:02:56,340 --> 00:02:59,379
访问下一个主要修复涉及声音

57
00:02:59,379 --> 00:03:02,110
卡特别是

58
00:03:02,110 --> 00:03:05,439
混合四个通道输出的电路，

59
00:03:05,439 --> 00:03:08,020
至少对我来说，模拟电子设备

60
00:03:08,020 --> 00:03:10,120
比数字电子设备要困难得多，因此

61
00:03:10,120 --> 00:03:14,039
需要进行一些试验和错误

62
00:03:14,039 --> 00:03:16,419
这个面包板我已经分解

63
00:03:16,419 --> 00:03:19,150
了每个通道的输出并安排了

64
00:03:19,150 --> 00:03:23,319
更换 混频器电路这些

65
00:03:23,319 --> 00:03:25,840
电容器形成高通滤波器并

66
00:03:25,840 --> 00:03:28,780
防止任何一个通道从其他通道过度

67
00:03:28,780 --> 00:03:33,250
吸收电流这些

68
00:03:33,250 --> 00:03:36,490
电阻器什么都不做

69
00:03:36,490 --> 00:03:40,180
我还必须将一个电阻器插入这个

70
00:03:40,180 --> 00:03:42,729
插座因为我

71
00:03:42,729 --> 00:03:44,259
订购零件时没有意识到它 是一个

72
00:03:44,259 --> 00:03:46,870
集电极开路输出，这意味着我

73
00:03:46,870 --> 00:03:51,069
必须添加自己的上拉电阻来帮助解决

74
00:03:51,069 --> 00:03:53,469
这些模拟音频问题 我

75
00:03:53,469 --> 00:03:55,870
编写了这个声音测试应用程序让我可以

76
00:03:55,870 --> 00:03:57,729
操作 用游戏手柄控制每个音频寄存器

77
00:03:57,729 --> 00:04:01,210
所有通道

78
00:04:01,210 --> 00:04:03,129
都有一个控制字节，用于选择

79
00:04:03,129 --> 00:04:06,159
音量和八度音程 每个方波

80
00:04:06,159 --> 00:04:08,319
通道都有另一个字节来

81
00:04:08,319 --> 00:04:10,930
选择音高，而波通道有

82
00:04:10,930 --> 00:04:12,849
一个指向存储的音频剪辑开始的指针

83
00:04:12,849 --> 00:04:33,399
和 专用 wave RAM

84
00:04:33,399 --> 00:04:34,370
[掌声]

85
00:04:34,370 --> 00:04:37,579
[音乐]

86
00:04:37,579 --> 00:04:41,009
[掌声]

87
00:04:41,009 --> 00:04:44,480
[音乐]

88
00:04:44,480 --> 00:04:47,000
现在我正在使用的当前批次的磁带

89
00:04:47,000 --> 00:04:49,819
有 8 KB 的存储空间，这

90
00:04:49,819 --> 00:04:51,199
会让事情变得有点棘手，

91
00:04:51,199 --> 00:04:54,620
因为 WAV RAM 有 4 KB，

92
00:04:54,620 --> 00:04:56,990
而全屏显示 图形

93
00:04:56,990 --> 00:05:00,980
占用 16 K 值得庆幸的是，

94
00:05:00,980 --> 00:05:02,750
github 上的 Piatra music 发布了 6502 的 inflate

95
00:05:02,750 --> 00:05:06,139
实现，

96
00:05:06,139 --> 00:05:08,149
包括在我的游戏代码中，这意味着我可以

97
00:05:08,149 --> 00:05:10,430
使用供应实用程序压缩

98
00:05:10,430 --> 00:05:13,399
我 PC 上的文件并将它们提取到

99
00:05:13,399 --> 00:05:16,399
游戏坦克上 RAM 中的任何位置创建 图形

100
00:05:16,399 --> 00:05:18,860
文件

101
00:05:18,860 --> 00:05:21,050
转换图像相对简单，必须将其大小调整为

102
00:05:21,050 --> 00:05:24,740
128 像素 x 128 翻转

103
00:05:24,740 --> 00:05:46,470
并使用特制的 pallet fi 保存为索引颜色位图

104
00:05:46,470 --> 00:05:48,779
然后，您只需

105
00:05:48,779 --> 00:05:51,420
使用您最喜欢的十六进制编辑器删除位图标题即可

106
00:05:51,420 --> 00:05:52,980
选择标题，而无需阅读它您

107
00:05:52,980 --> 00:05:56,040
可以检查文件的长度 128

108
00:05:56,040 --> 00:05:59,519
x 128 像素图像应该是十六进制 4000

109
00:05:59,519 --> 00:06:04,949
字节，如果您的文件是十六进制 4438 字节

110
00:06:04,949 --> 00:06:07,550
那么 你只需要选择第一个十六进制

111
00:06:07,550 --> 00:06:28,870
438 字节并

112
00:06:28,870 --> 00:06:32,410
在 hxd 中删除它们如果你将行宽设置

113
00:06:32,410 --> 00:06:34,839
为与图像宽度相同你甚至可以

114
00:06:34,839 --> 00:06:36,879
看到图像的轮廓以

115
00:06:36,879 --> 00:06:43,990
确认你是否正确

116
00:06:43,990 --> 00:06:47,300
现在压缩文件 使用 zopfli

117
00:06:47,300 --> 00:06:50,149
使用 - - deflate 参数并

118
00:06:50,149 --> 00:06:53,959
使用 LS 检查最终大小转换后的

119
00:06:53,959 --> 00:06:56,209
照片不适合这种压缩方法，

120
00:06:56,209 --> 00:07:00,259
因此从 16,384 字节到

121
00:07:00,259 --> 00:07:05,189
4360 副

122
00:07:05,189 --> 00:07:09,149
对于游戏来说并不是太破旧的精灵表 具有更简单的

123
00:07:09,149 --> 00:07:11,550
图像和重复并被压缩

124
00:07:11,550 --> 00:07:16,800
得更小 inflate 例程本身

125
00:07:16,800 --> 00:07:19,860
占用 508 字节，但这仍然为

126
00:07:19,860 --> 00:07:21,990
我们留下了相当大的空间用于代码映射

127
00:07:21,990 --> 00:07:27,339
数据甚至一些音频样本

128
00:07:27,339 --> 00:07:29,379
另一个现有工具 t 帽子的

129
00:07:29,379 --> 00:07:32,500
派上用场是 rxi 的平铺套件 这个地图

130
00:07:32,500 --> 00:07:34,149
编辑器让你可以设置规则，根据不同的形状排列，

131
00:07:34,149 --> 00:07:39,850
从你的精灵表中程序性地选择平铺

132
00:07:39,850 --> 00:07:41,680
平台的边缘可以自动使用

133
00:07:41,680 --> 00:07:44,439
平铺的斜面版本，或者

134
00:07:44,439 --> 00:07:46,269
特定尺寸的平台游戏可以是 给定

135
00:07:46,269 --> 00:07:48,129
它们自己的特殊图形，例如这些

136
00:07:48,129 --> 00:07:54,279
灯

137
00:07:54,279 --> 00:07:57,259
tile kit 可以将其地图数据导出为 JSON

138
00:07:57,259 --> 00:07:59,870
，这很容易编写转换器，

139
00:07:59,870 --> 00:08:01,220
因为

140
00:08:01,220 --> 00:08:03,620
我的转换方法是将

141
00:08:03,620 --> 00:08:06,730
地图分成 16 x 16 块，

142
00:08:06,730 --> 00:08:09,560
并将它们保存为单独的二进制文件

143
00:08:09,560 --> 00:08:14,699
然后我从我的汇编代码中引用

144
00:08:14,699 --> 00:08:17,310
我已经导入了

145
00:08:17,310 --> 00:08:19,649
地图的四个块让我们来看看它们是如何

146
00:08:19,649 --> 00:08:24,009
使用的

147
00:08:24,009 --> 00:08:26,920
prief屏幕和下一个屏幕

148
00:08:26,920 --> 00:08:28,480
在玩家角色点击屏幕的左侧

149
00:08:28,480 --> 00:08:29,910
或右侧时运行

150
00:08:29,910 --> 00:08:33,220
它们递增或递减a

151
00:08:33,220 --> 00:08:38,860
称为当前瓦片地图的变量绘制瓦片地图

152
00:08:38,860 --> 00:08:40,990
是指间接

153
00:08:40,990 --> 00:08:43,120
索引模式下的当前瓦片地图，因此递增或

154
00:08:43,120 --> 00:08:45,070
递减当前瓦片地图加一

155
00:08:45,070 --> 00:08:48,070
会移动指针 任何一个

156
00:08:48,070 --> 00:08:51,190
方向上的 256 字节 让我们看看如果

157
00:08:51,190 --> 00:08:53,230
我们前往最左边的屏幕并继续

158
00:08:53,230 --> 00:08:57,009
前进会发生什么 没有什么特别的 任何连续的

159
00:08:57,009 --> 00:08:59,529
256 字节区域都可以呈现为

160
00:08:59,529 --> 00:09:01,860
具有完整碰撞检测的瓦片地图

161
00:09:01,860 --> 00:09:04,720
我们传递的第一个离散实际上

162
00:09:04,720 --> 00:09:06,970
是音乐数据 其余部分是压缩的

163
00:09:06,970 --> 00:09:09,370
精灵动画定义和

164
00:09:09,370 --> 00:09:19,690
子例程的最终代码

165
00:09:19,690 --> 00:09:21,429
我暗示我们最终可能会

166
00:09:21,429 --> 00:09:23,740
达到游戏代码但实际上

167
00:09:23,740 --> 00:09:25,480
由于

168
00:09:25,480 --> 00:09:27,639
这些瓷砖地图的混乱性质而卡住实际上是不可避免的，任何

169
00:09:27,639 --> 00:09:30,100
值 0 到 15 都被视为

170
00:09:30,100 --> 00:09:32,110
不可通过和部分 压缩器

171
00:09:32,110 --> 00:09:40,580
精灵有很多

172
00:09:40,580 --> 00:09:42,659
零离开屏幕右侧

173
00:09:42,659 --> 00:09:45,690
不是那么有趣这个区域全是

174
00:09:45,690 --> 00:09:47,940
零并且因为现在正在编写游戏

175
00:09:47,940 --> 00:09:56,669
所以不可能将

176
00:09:56,669 --> 00:09:59,100
我对该项目的下一个计划通过

177
00:09:59,100 --> 00:10:01,019
他的演示进入冒险游戏

178
00:10:01,019 --> 00:10:03,539
敌人锁着门找到关键的四肢

179
00:10:03,539 --> 00:10:07,409
和某种目标我也

180
00:10:07,409 --> 00:10:09,299
准备修改所有的板

181
00:10:09,299 --> 00:10:10,860
，因为目前 原型是一个

182
00:10:10,860 --> 00:10:13,460
脆弱的悬空

183
00:10:13,460 --> 00:10:16,139
Bajwa r-- 下一个版本可能

184
00:10:16,139 --> 00:10:18,539
只有两块板，并且会有一个 3d

185
00:10:18,539 --> 00:10:24,029
打印的外壳，顺便说一句，模拟器在键盘输入和声音支持方面

186
00:10:24,029 --> 00:10:28,259
也取得了很大进步

187
00:10:28,259 --> 00:10:30,539
它已成为快速迭代的宝贵工具，

188
00:10:30,539 --> 00:10:34,139
最终我想

189
00:10:34,139 --> 00:10:36,149
开源并共享游戏系统的套件版本，

190
00:10:36,149 --> 00:10:38,399
并希望编写

191
00:10:38,399 --> 00:10:40,320
详细的编程手册以

192
00:10:40,320 --> 00:10:44,850
一如既往地支持该平台的开发。

193
00:10:44,850 --> 00:10:47,309
这是 Clyde Schaefer，

194
00:10:47,309 --> 00:10:49,080
感谢观看 我的视频或发现它很

195
00:10:49,080 --> 00:10:51,289
有趣


