我的第一个z80汇编语言计划

2021-06-13 00:36:48

当我看到我从1986年到1989年使用的旧版笔记本时,我正在清洁一个旧的工作区域。它遭受了时间和灰尘的传递。

我以为它是我以前见过的同样的笔记本,因为我有两个相同模型的蓝色笔记本,但我丢了一个。然后令我惊讶的是,我发现它是丢失的第二款笔记本,我把我的第一个Z80汇编语言程序划分了!

很开心,我立即拍了重要页面,以防万一我再次丢失笔记本。

我9岁了,我想写神奇的比赛。当然,我太年轻,无法在比赛中创造一些东西,我在筹备时在杂志看着杂志!并输入MSX。

经过四年的基本语言写作游戏,我觉得我被脓肿所固有的解释语言所固有的。

这款游戏于1988年6月左右编写,我的父亲正在讲课编程VDP处理器TMS9128。视频处理器当时(通过Digikey)非常可用,因为使用它的所有计算机的消亡。

学生一直在Z80上焊接到铜板上的Z80,其悬挂在孔中,孔间隔0.1"

不幸的是,我的双手Weren'当时恰当地处理烙铁,所以我一直在看着学生喜欢建立他们的电脑的学生,他们如何让他们跑步,以及他们如何排除他们的错误。

这给了我有足够的时间来考虑Z80汇编程序编程概念,我一直无法掌握如何放在一起说明的概念。前几周在那个星期天(我能记得是星期天),同时看着我的父亲把监视器/ VDP /键盘EPROM代码放在一起,最后我在我的头上有了想象的灯泡。当然!有几个指令撰写了基本语言语句,因此这是一个做同样但在汇编程序中的问题。

上课前的星期天早上,我开始疯狂地写在我的笔记本上一场关于一个关于一个karateka战斗女人发射刀的游戏。我对我的头脑有全面的想法,现在我第一次意识到我在我的脑海中首次实现了基本算法。这只是将它转化为汇编程序的问题。我已经意识到基本的线路分离在汇编程序上是看不见的,但每个地址可能与基本语言中的虚线编号相关。

当我自豪地向我的游戏展示时,你可以想象整个班级的惊喜。我记得三个学生手动复制来自RAM转储的代码,然后为其他学生制作Xerox副本。

这是我的笔记本的照片。你' ll需要原谅我可怕的孩子的信。几乎没有任何评论,但你所看到的任何东西都将是西班牙语,因为这是我的第一语言。

在评论每个页面时(并分析我的新手9岁!),i' ll为msx和colecovision(仅仅因为)将此游戏转换为tniasm v0.44。我们需要以下翻译和支持层,因为我们没有从学生计算机手中掌握原来的ROM:

所以这是我Z80游戏的第1页。右边的源代码是写作在将它放入我将要开发的汇编程序内(想象一下,常见地思考汇编的汇编程序!)。

将此游戏输入学生'计算机,人们只需要仅在左侧输入微代码。如果您在右侧源代码上发现错误是因为它意味着仅作为参考。

代码基本上设置了游戏并创建了一个游戏循环。我拼错了Navaja(刀)作为涅瓦宫。请注意,我如何替换类似MSX例程WRTVDP的POEHL。 InMediato例程将以下字节直接复制到VDP,直到找到零字节。

当然,我没有任何想法使用指令,除了立即放一个字节。这是标题屏幕。 " pulse espacio"手段按键盘空间栏。我将其更改为MSX或ColeCovision上的任何触发器。

它使用内部BIOS例程$ 04F5来读取键盘矩阵,它已被MSX GTTRIG呼叫(或读取按钮的COLecovision)替换。然后它设置了karateka,刀和judoka的图形。

它现在为karateka的位置设置了一些变量,刀射在敌人。还会重置kicks_given变量。它开始填充天空和草的颜色。

然后它清理屏幕并开始将屏幕上的字符放在视觉上的天空和草地上创建。是的,令人尴尬地,9岁是疯狂的重复代码!

它设置敌人的颜色,然后使用定义的字符将其放在屏幕上。然后设置3个变量,其中一个未使用。

对于一些不明确的原因,我再次设置VDP的寄存器1,然后它设置了播放器的起始位置。注意微码表示3E 68纠正,而右侧源代码读取LD A,70将播放器放在地板下方。

该运动是左右的,为拳击,然后踢球。再次键盘读数已被替换为MSX GTSTCK(为ColeCovision翻译)。

我想我正在经历一个基本的汇编程序的心理汇编,只能解释为什么代码非常不优化。优化它一点就会让我很多时间重新进入计算机。

通过减去8到x坐标,通过减去x坐标,并在Sprite属性表上更新它来实现移动karateka。它还为两个帧之间的播放器设置动画。

右侧的运动基本上是与左移动的相同代码。它可以通过在DE或BC寄存器上传递参数来使用相同的子程序。

鉴于播放器方向不知道,它检查精灵框架,看看他/她面临的方向。另一个变量会让它更容易。

把敌人击到左(gai)和右(gad)的代码,它只是将Sprite更新到打孔框架,并调用Nadeo(它检查敌人是否被击中),然后它等一下(停止整个游戏! )并恢复原始精灵。我仍然需要掌握独立对象的概念。

处理踢的代码基本上是先前代码的副本。博拉斯基本上都说艾萨比卡!

观看后,没有办法避免刀,我为karateka实施了跳跃。

这呈现出更多的思维,如叫Nevaja以保持刀具移动。但仍然是两个单独的例程,一个移动玩家,一个人搬下球员。每个人都有自己的延迟。

移动刀具只是从左到右的运行计数器,更新屏幕。

孩子们可以解决如何让刀片更接近发射它们的敌人,因为刀子用空间落后,所以这些都会抹去敌人的右半部分。

通过使用不同的变量重复相同的代码,通过重复相同的代码将平行刀在同一列上移动平行刀,这是惊人的浪费。

当两者一起融合时,再次浪费字节以单独删除每刀。可能我在考虑让他们出现在不同的时期,但是' t图案如何做到这一点。 Malora功能(Baddy)检查刀具是否击中了玩家,再次单独检查每刀。

Muerto(死亡)功能只需用随机颜色填充整个颜色的表(嘿!那个特殊的视觉效果!)并在重置到内部监视器之前停止。 CONN' t插入主游戏,因为RST 00指令仅使用一个字节,跳转使用3个字节(请记住我使用汇编程序而不是使用汇编程序)所以我改变了它跳转到游戏。

最后我的第一个工作子程序Nadeo,叫4次来检查敌人被击中。我无法弄清楚我试图缩写的东西。当播放器完全站在刀片出现的位置时,命中检查很简单,它会击中敌人,当然我试图让他/她被刀命击中。不幸的是,这种确切的位置在空中击中,并且没有击中的视觉迹象......

显然,我从我的大脑中写下​​了整个游戏,并计划了延迟使游戏可玩的延迟。此代码处理它以及跳跃。

注意我如何使用中断,我没有知道当时的中断,但在视频帧方面具有恒定时间参考的简单思想将吹嘘我的想法!

此页面不需要移植为VPoke被WRTVRM例程所取代。和vpeek isn'使用。顺便说一下,这表明我的输入MSX杂志读数的影响。

这些页面包括游戏的图形。应该有一个包含我的原始图纸的方形纸,但我没有找到它们。

最后一页包含使用的变量的文档,其中一半是去同步的,并且刀3 WASN' t实施。它'是真实文件的实际例子:p

Karate2.zip ROM文件for ColeCovision和MSX(17 KB),在一天内编程到所有工具。 这是游戏,因为它看着我9岁的心灵。