根据BC 0010于2019年进行编程

怎么了


如果您是复古计算机的狂热者,则可以安全地跳过励志演讲,并转到下一部分。

整个2018年8月,我和我13岁的儿子Ivanq花了很多时间写了一个好苹果的演示。 在“ 混沌建筑节”上,我们的工作获得了第二名,为此,我们获得了35,000卢布的现金奖励,老实说,我们平分秋色。 对于一个孩子来说,这是一笔可观的收入,尽管通过创建网站,他可以在更少的时间内获得相同的收入。 显然,我可以把自己的时间花在更大的经济利益上。 我们必须一旦下班休息。 自己编程是一种奢侈,只有在度假时才能负担得起。

SandS的出色Apple演示

物质报酬当然不是动机,而是会增强积极情绪。 令人惊讶的是,一台被遗忘的苏联计算机的演示在youtube上收集了数千个观看次数 ,并最终出现在具有近十万个观看次数的播放列表中 。 但更令人惊讶的是,在2018年,她获得了现金奖! 也许所发生的事情极不可能发生,引起了这种情绪高涨。

但是,还有一些更重要的事情。

创建“好苹果”时,我们必须使用真实的硬件,因为我们使用的计算机功能无法正确再现模拟器。 首先,我想使用IDE硬盘及其紧凑型闪存的现代替代产品实现同样稳定的工作。

在这个项目上,我13岁的儿子在工业发展中获得了宝贵的经验。 铁不良。 良好的硬件,其行为不符合文档中所述。 起草有错误的文档。 缺少有关许多问题的文档。 编写自己的测试以确定铁的问题。 截止日期。 在不同的机器和配置上进行测试。 编写自己的交叉汇编器(当很明显现有解决方案阻碍了开发过程时)。 最后,在短暂的成功庆祝之后-强制发布最终版本,更正了许多错误。

乍一看,似乎可以通过一些现代Arduino获得类似的体验。 实际上,我们不得不跳入电路的丛林中。 我们计算了要执行指令的小节数。 在不同类型的内存中,这个时间是不同的。 存储器控制器和处理器以不同的频率运行,因此即使在相同类型的存储器中,相同的命令也可以在不同的时间执行。 子程序执行的持续时间不等于该子程序指令的持续时间之和。 我们必须编写自己的工具,以便在真实硬件上测试和优化代码。

用于测量代码片段执行速度的实用程序

最终,我的儿子正在研究BK 0011电路(触发RPLY时,该信号沿将进入边缘,等等-我对此一无所知)。 因此,他提出了创建自己的仿真器BK的想法,该仿真器与精确到节拍的真实硬件兼容,甚至编写了内核。但是,这是另一回事了。

从学习汇编程序到创建自己的开发工具,从硬测试到完成的多媒体工作,总共需要一个月的时间。 没有主旨,所有这些都是不可能的:计划。 也许是最有价值的教训。 您完成了一项不可能的任务。 您了解自己将遇到无法克服的困难。 正在计划 你做 结果令每个人都感到惊讶,甚至令鉴赏家也怪罪作弊(“您超频了处理器!”)。

为什么不选择ZX Spectrum?


多余团队的Odnazhdy演示

同样,我将从一个奇怪的话题开始:财务。 从Avito上的公告来看,BC 0010的平均价格是ZX Spectrum的几倍。 显然,对于处于最佳状态的本机Spectrum的罕见实例,他们将要求取整。 但是,满载的BC 0011m仍然会更贵。 如果完全能够找到。 价格说明一切:BC 0010的收藏价值更高。 BK 0011m-甚至更多。 在家拥有这样的计算机非常好。

第二个参数是16位。 BC 0010中没有8位。 处理器甚至不知道如何添加8位数字;它没有ADDB命令。 所有内容均为16位。 这样做的原因是DEC PDP-11架构。 许多人将PDP-11处理器命令系统称为有史以来最成功,最方便的系统。 当然,有些人想对此说法争论不休。 但这是一个事实:在Yandex 解调技术节上,有三个研讨会专门讨论了处理器体系结构,其中两个研讨会是关于PDP-11的。 的确,这是一个传奇,是计算机技术历史上的一个里程碑,它仍然继续激发着发烧友的思想。 BK 0010使触摸此图例成为可能。 不仅要触摸,而且要最细致地理解它,才能感受到DEC汇编程序的所有美感和优雅:绝对相等的寄存器,八种寻址方法,线性存储器-美!

第三个论点:已经为ZX Spectrum编写了许多演示。 对于BC 0010- 少于五十 ,则计数小的256字节和4千字节。 演示场景上的地方几乎是免费的,即使是初学者也可以在这里展示自己!

最后一个考虑,纯粹是主观的。 自1994年以来,我一直在观看俄罗斯的后裔。 不幸的是,我觉得党spektrumistov更具毒性和敌意。 当然,有很棒的友好的人! 我非常尊重他们和他们的工作。 但总的来说-可能是由于其群众性-频谱现场充满了冲突,关系的澄清,甚至是诸如投票之类的阴谋(当他们在比赛中只投票给“他们自己的”时)。 在BC省小规模的舞台上,他们不会提出“谁更酷”这样的问题,并且对每个新参与者都很高兴。 我再说一遍:这是我纯粹的个人印象,您可以忽略。

真正的铁


在我回到为BC编写程序之前已经过去了20年。 在过去的20年中,发生了很多变化。 对我个人而言,思想上发生了一个重大转变:“思考不同”。 此口号位于我们的演示“ Good Apple”的最终信用中。

我们过去从录音机加载游戏需要5分钟。 然后是驱动器控制器。 它们的后面是硬盘驱动器。 然后是新发现的带有Compact Flash 控制器副本 。 现在习惯在复古场景中模拟闪存驱动器了……但是,等等,2019年,我们将拥有高质量的便携式声源-iPhone。 因此,让我们采用标准的DIN-5音频线-迷你插孔(您甚至不必重新焊接)并从iPhone高速加载BK。

我遍历了ROM跟踪, 揭示了如何稍微超出磁带录音机的启动算法,并使BC读取数据快4倍。

下一步是编写一个微型引导程序,以特殊设计的turbo格式读取数据。 装载程序和数据都一个接一个地放置在一个WAV文件中( 转换器Lenar Zakirov编写)。 BK 0010读取并自动启动微型装载器,微型装载器又从文件中读取其余数据。 Turbo格式的频率达到22 KHz,因此对音源质量的要求很高。 iPhone正在应对。 优秀的音乐播放器。 电脑声卡也一样。

然后轮到交叉汇编器了 。 它添加了用于以WAV(标准格式和Turbo格式)保存程序的选项。 而且,交叉汇编程序可以立即通过声卡播放WAV。 试想一下如何加速发展! 每次编译后,无需费心将磁盘映像写入CF卡。 只需更改代码,单击“ Build”,声音就会流入CD,几秒钟后程序就已经在真实的硬件上运行了。 要接收标准格式的声音,只需按BC 0011上的L(加载)并按Enter键(加载遇到的第一个程序)。 要以Turbo格式传输声音,您必须首先运行微型引导程序(对我来说,当BC打开时,它将自动从硬盘驱动器启动;在任何时候,您都可以通过按STOP键登录系统)。

从计算机将程序下载到BC 0011m

在通常的复合AV输入中,以单色模式将BK连接到电视是最容易的。 有必要在电缆的一端焊接“郁金香”,在另一端焊接DIN-5。 单色信号来自BK连接器的DIN-5的第4针,称为“ TV”。 传统上,地面与DIN-5的第二针相连。

就我个人而言,我是单色CRT显示器的粉丝-它们提供带有开口格栅的彩色显示器无法实现的图像清晰度。 但是大多数游戏和所有演示都希望以彩色观看。 为此,请使用“ TVC” BK输出并通过RGB SCART连接到电视。 DIN-5上的触点3、4、5-分别是红色,蓝色,绿色。 引脚1-同步。 引脚2接地。 当连接到液晶电视时,向SCART的第16引脚施加+5伏电压(通过200欧姆左右的电阻)非常有用。 通常从相邻的“ TV”连接器(引脚1)获取5伏电压。

您可以使用SCART-HDMI转换器。 我会立即警告您,BC显示的图像频率不是每秒48帧,而是48.83,因此,在LCD监视器上而不是平滑滚动,会出现周期性的抽动。 我通过替换 12.288 MHz 12兆赫石英晶体谐振器解决了这个问题。 但是,抽搐仅在某些演示中才明显。 大多数BC程序不使用帧速率同步。

为什么不满足于可能根本需要一台真实计算机的仿真器? 我发现有四件事模仿得很差:

  1. 扬声器在高频下的行为。
  2. 图像和调色板与光束的同步。
  3. 执行命令的确切时间(对于通过Covox播放音乐很重要)。
  4. 高速使用IDE硬盘。

如果您不打算执行上述任何一项操作,那么模拟器就足够了。

仿真


在MacOS上,我使用BK2010模拟器。 它不是很准确,但是适合大多数任务。

当前,最先进的GID模拟器在Windows上运行。 它还可以在MacOS的CrossOver和Linux的Wine上运行。 该仿真器具有良好的调试器,内存页面查看器等。

要将磁盘映像写入CF卡,我使用了多平台实用程序Etcher 。 但是我经常通过音频通道传输数据。

开发工具


使用PDPy11交叉汇编器从Sublime文本进行编译

Excess Team演示小组的成员提示了交叉汇编程序Alexei Morozov。 最初,我们使用它,但很快Ivanq用Python编写了自己的多平台。 它的工作速度较慢,但​​功能却丰富得多。 这包括对多文件项目和复杂算术表达式的支持,双字数据类型,与Sublime Text的集成以及对编译错误的扩展支持,将结果保存为声音文件格式,不仅适用于BC,而且适用于UKSC的编译等等。 您可以在官方文档中了解所有这些信息。

该交叉汇编程序称为PDPy11

一些资深人士抱怨说PDPy11缺少​​经典DEC宏汇编器(Macro-11)的宏。 从某种意义上说,宏汇编器是另一种语言。 据我所知,这对于编写系统程序来说可能是件好事,但是对于BC来说,严肃的游戏和演示都是用普通的经典汇编器编写的。 具有讽刺意味的是:对于BK程序的源代码,习惯上使用.mac文件扩展名(来自“ macro”),即使在不支持宏的汇编程序中也是如此。 无论如何,PDPy11的功能足以编写任何复杂程度的程序。

调试器内置在GID仿真器中。 它允许您设置断点的地址,随时中断或继续执行程序,查看寄存器和存储器的内容,逐步执行程序,更改存储器的内容等。

为了将图形转换为BC格式,我们编写了一个在线转换器 。 分辨率BK-在彩色模式下为256x256像素,在单色模式下为512x256。 最好不要将较大的图片输入到转换器。

该文件


Yuri Zaltsman写了一篇很棒的汇编语言编程教程 。 BC 0011m和BC 0010之间的区别写在这里 。 也有BK 0011型号(不带“ m”),但很快就停产了,因为它认为不成功。

尽管BC 0011m具有强大的功能(调色板,额外的内存页),但我还是建议您先为BC 0010编程-此模型更简单易懂。 正确为BC 0010编写的任何程序也将在BC 0011m上运行。

处理器设备和指令集在Wikipedia上有很好的描述。

适用于最勇敢的代码编程

世界,您好!


BC 0010中的屏幕存储器区域以地址40000(左上角)开始,以地址77777(屏幕的右下角)结束。 您可能会猜到,PDP-11体系结构使用8进制数字系统。 但是,当然,PDPy11交叉汇编器还允许您在二进制,十进制和十六进制系统中写入数字-随心所欲。

在屏幕上打一个 ,您需要在屏幕内存区域写一些数字。 DEC汇编器中的参数从左到右依次是:源,然后是接收器例如:

MOV #100000,@#60040 ;      

#号表示参数只是一个数字(不是地址)。 @#符号表示该参数是一个绝对地址(也就是说,当程序移至另一个存储位置时,它不会更改)。
屏幕清洁看起来像这样:

    MOV #40000,R1 ;     MOV #20000,R0 ;   1: CLR (R1)+ ;    ,   R1   SOB R0,1 ;   

间接寻址(R1)使用R1寄存器作为地址指针。 BC中的存储器按字节寻址,但是CLR指令立即清除两个相邻的字节:第一个40000和40001,在循环40002和40003的下一步,依此类推。 符号(R1)+表示使用参数后,需要对其进行增加。 在这种情况下,因为命令处理2个字节,所以减2。 循环计数器可以是任何寄存器。 SOB从寄存器中减去一个单位,然后转到标签1。本地标签由数字和冒号表示,其范围在两个全局标签之间。 全局标签必须以字母开头,也必须以冒号结尾。

通过添加字母“ B”,可以使CLR指令与字节一起使用。 然后CLRB(R1)+将寄存器R1不增加2,而是增加1。

    MOV #40000,R1   MOV R1,R0 ;        1: CLRB (R1)+   SOB R0,1 

您可以缩短执行同一操作的时间。 我们使用索引的寻址方法从下至上清除屏幕:

    MOV #40000,R0 1: CLRB 37777(R0) ;    (37777+R0)   SOB R0,1 

如果需要高速,则最好不是按字节而是立即用字清除内存。 速度会快两倍。 但是您可以加快速度:由于某种原因,CLR命令比MOV慢。 因此:

    CLR R2 ;     R2   MOV #40000,R1 ;     MOV #20000,R0 ;   1: MOV R2,(R1)+ ;    ,   R1   SOB R0,1 ;   

现在,选择四种清除屏幕的方式之一,就可以设置点了。 在彩色模式下,每个点对应于两位。 在单色中,一位。 BC没有屏幕模式的程序开关。 我将显示器连接到哪个输出,我收到了这样的图像。
为了清楚起见,我们在二进制数字系统中编写点的颜色:

    MOVB #0b00001100,@#50010   MOVB #0b00110000,@#50112   MOVB #0b11000000,@#50313 

每对位中的颜色编码如下:如果只设置了偶数位-绿点,只设置了奇数位-蓝色,则两个位都设置了-红色,两个位都复位了-黑色。 好吧,单色监视器将每个位显示为一个单独的点。
MOVB命令一次将4点写入屏幕存储器,而MOV命令则写入8点。 如果不想影响相邻点,请使用BIC(位清除)和BIS(位设置)命令,例如:

    BICB #0b00001100,@#50112 ;     BISB #0b00000100,@#50112 ;    

有趣的一点:在文本中,我们将最低有效位写在最高有效位的右边。 相反,在屏幕上:与最低有效位相对应的点出现在左侧。
实际上,这完全与屏幕存储设备BK 0010有关。

但是文本输出呢?

       MOV #Text,R1 ;         EMT 20 ;             HALT ;   Text: .ASCII “Hello, World!”      .BYTE 0 ;      

显示源!


多余的团队介绍Road2CAFe 256字节

首先查看完成的演示的源代码,这将是最简单的:

在您的空间 -Covox演示,存档中的源。
优秀的Apple –来自GitLab(复杂的多文件项目)的资源。
EIS是带有源代码的扩展算术指令的仿真器。
三个256字节演示的来源。
在《 降级 》杂志的第28期中,一篇有关BC 0010上跟踪器音乐算法发展的大型文章,包括程序片段和详细说明。 一个关于早期引导的怀旧故事。

什么时候开始?


现在。 在喀山举行的4个星期后,将举行展览会CAFe 2019 。 节日节目有一个比赛BK 0010-512字节 。 此大小适合85到256条指令-非常适合初学者。 两个星期就足够您使用这些工具并编写第一个简单演示。 在那之后,仍然有一个半星期的时间来写第二份更认真的作品。

继续吧,可以! 电报聊天zx-pk论坛-他们将在任何地方为您提供帮助。 发送作品参加比赛,更好的是自己参加比赛。 现场还活着

Source: https://habr.com/ru/post/zh-CN469117/


All Articles