ZX Spectrum兼容计算机的操作系统体系结构

NedoOS是用于“俄罗斯ZX Spectrum”的多任务操作系统,具有Basic,Pascal,C和NedoLang汇编语言编程环境。适用于带有长名称的TR-DOS,FAT16和FAT32,支持tar,gz,zip,rar2和几乎所有实际使用的Spectrum文件格式,网络实用程序包括Web浏览器和Web服务器,Telnet客户端和Telnet服务器,IRC -client等。游戏是为OS编写的,包括网络游戏。现在,存储库中有6个成员。整个系统的源代码(58个程序)的汇编语言为23万行,而C语言为7万行。



介绍



计算机架构



ZX Spectrum是基于Z80处理器的8位计算机。它与其他类似计算机的区别在于,它不是专用的视频控制器,而是计数器和多路复用器的组合(最初组装在BMK中,但很容易转换为“松散”的小型逻辑微电路)。因此,计算机首先赢得了价格竞赛,并成为“卧室编程”的默认汽车,然后轻松脱离了原始制造商,并在世界许多国家的计算机化中赢得了重要地位。包括-属于苏联的国家/地区,与光谱兼容的汽车共生产了约100万本(无论如何,超过BC,DVK和UKNT的总和)。



著名克隆的惊人清单-在这里... 架构的“开放性”(从烙铁的角度来看-没有烙铁,我们的克隆甚至无法连接到电视)将ZX Spectrum变成了非常复杂的平台,具有非典型的其他8位平台(已经死了或在酒精中)兆字节,兆赫兹,硬盘驱动器和网卡。



ZX Spectrum仍可作为独立游戏的平台(请参阅正在进行的Yandex Retro游戏大战Your Game 6竞赛截止日期已延长至12月1日),但很少会以原始格式进行开发,因为e。在频谱本身上。除其他外,这是由于以下事实:在TR-DOS下编写的本机开发环境 在90年代和2000年代,他们落后于生活,没有什么新东西可以取代它们。



对操作系统的需求



Spectrum的操作系统已经编写了很长时间。该操作系统位于ROM中,使您可以用磁带进行BASIC写入和修补。磁盘操作系统TR-DOS,GDOS,+ 3DOS等 在BASIC中添加了用于处理软盘的命令,但是,只有TR-DOS获得了重要的实用程序,这并不是由于BASIC接口相当笨拙,而是由于记录在TR-DOS ROM中的(而非如此)入口点。



除了几个版本的CP / M(最初不是为Spectrum编写的,也不以其真正价值使用其功能)之外,第一个严肃的Spectrum OS是单任务iS-DOS(一个两个三个归档文件)。),于90年代初在圣彼得堡开发。它“开箱即用”地提供了一个指挥官和一个带有子目录(不兼容任何东西)的文件系统,任意大小的文本编辑器,许多实用程序磁盘以及随其居民扩展的能力。不幸的是-扩展仅在48K RAM窗口内。 iS-DOS的第一个版本的整个系统,居民和用户程序的容量为41K,其余RAM空间由一个6912字节的屏幕占用。





在自然栖息地中



iS-DOS最新版本仍以TASiS(的名称发布并在ATM-Turbo 2+克隆下经过了改进,可以扩展到整个64K地址空间,从内存中删除屏幕并切换RAM页面,但是系统的核心仍然保留在地址空间中。(同样适用于CP / M-在所有已知版本中,系统都占据头地址并且是不可破坏的。)



还进行了其他尝试来编写OS的尝试。不幸的是,这些操作系统都没有收到明显的发行,而且许多根本没有完成。



已经提到的iS-DOS已在圣彼得堡和莫斯科传播。TR-DOS磁盘上的iS-DOS的近似功能类似物-X-DOS -住在基洛夫。





X-DOS及其命令行



多窗口系统DOMEN OS / Pink Floyd,也来自圣彼得堡,没有达到可用状态。特别是,它不支持硬盘驱动器,并且其中没有开发工具。





OS DOMAIN及其在HTML



Kharkiv DNA OS系统中的文档(主要用于复制文件)为“螺钉”的所有者带来了一些好处,但“螺钉软件”却从未出现过。





DNA OS及其文件管理器



Moscow NK-DOS,兄弟NeOS,Grodno DOORS \ AQUA和Saransk ZX-OS / ZXRTK都没有发布可行的版本在多任务操作系统中,最接近用户的是多窗口MythOS(Dnepropetrovsk)和ChaOS(Taganrog),但它们也终止了源代码的生命-也没有硬盘驱动器和开发工具。





MythOS及其控制台





混沌及其混乱



为什么会有那么多失败?



多任务操作系统的硬件要求



Spectrum的所有早期操作系统存在的问题是,开发人员试图确保其创建的最大兼容性。例如,在iS-DOS上-从ZX Spectrum 48K开始的机器(带有软盘驱动器或HDD),在大多数后续系统上-带有ZX Spectrum 128K的机器。这在内存分配上留下了不可磨灭的印记。



事实是,在48K机器上,Z80的总地址空间为65536字节,分为两部分:48K RAM(其中6912字节被屏幕占用,剩下41 KB用于其他所有内容)和16K BASIC ROM,这对操作系统确实有好处没有。 128K的情况更好,但并不多。可以从Z80地址空间中删除屏幕(通过选择第二个视频缓冲区),但是您只能在地址空间的上四分之一(从地址0xc000开始)切换RAM页面。剩余的32K RAM无法切换。并且较低的16K仍然包含操作系统不需要的ROM。当然,专有的128K允许外部设备(例如LEC内存扩展DISCiPLE / + DMB-02)替换较低的16K,并且其后代从+3开始,通常为此具有一个或另一个内置端口(大多数情况下那里只有一页RAM可用),但是一半的可寻址内存仍然无法随着任务切换而改变。



想象一下,您正在为ZX Spectrum 128K的操作系统编写文本或图形编辑器。显然,高16K对于文本或插图来说太小了(我们不是在谈论6912字节的标准“屏幕”),您要么必须不断地从磁盘加载文件(这很慢且不便),要么将文档分散在页面上。在这种情况下,编辑器本身的代码,其变量和堆栈将位于何处?不在RAM的前16K中,因为这就是文档。不在较低的16K中,因为很可能有ROM。事实证明,所有任务都必须共享一个公共的32K RAM块。重定位的居民,每个人分成256个字节,从上层RAM调用程序,独立的居民-处理数据的缓冲区,堆栈也限制为256个字节...这对于开发人员而言非常不便。结果:只有作者自己为这种系统编写程序,并且他们只有一两年的足够保险丝,这甚至不足以创建开发环境。



因此,对于Spectrum上方便的多任务系统,至关重要的是在Z80地址空间的每个分区中都具有可切换的RAM页(对于Speccy,传统上选择16K分区是传统的)。很少有频谱电路可以做到这一点:这些是fk0(2000)中鲜为人知的“ ZX-MMU”,或者或多或少是常见的ATM-Turbo 2(+)(1992,1993):





从文档中。将位6设置为允许通过端口#7ffd进行控制(在#3dxx中执行代码时,ROM TR-DOS会自动替换ROM 48 BASIC),否则位7只会打开指定的ROM页面。“ ROM2”是端口#7ffd的第4位,它始终有效。



许多操作系统作者认为,对内存子系统能够切换所有内容的要求将严重限制用户数量,因此不接受。结果,由于缺少软件,他们获得了0个用户。



发展



背景; 什么是NedoPC



在2002年至2003年间,NedoPC运动诞生于三大洲的广大地区,可以简单地描述为um ...通过即兴手段开发计算机。 NedoPC从其他人当时完成的事情开始-为他们生产Spectrum和设备。并且他们使用了相同的Turbo 2+(1993)-ATM-Turbo 2(1992)的后裔,这是ATM-Turbo(1991)的五角大楼128(1990)的后裔,在狭窄的圈子中称为ATM 128(斗争的历史)可以在Honey Commander的说明中找到90年代的公司'y)。一次,Turbo 2+(与以前的版本一样已经自动粘贴到ATM名称上)几乎打算用HDD(后来的CD-ROM),EGA的类似物,XT键盘(后来的)替换早期配置的IBM PC。 AT),COM端口,DAC,ADC(还起到了调制解调器的作用)以及“波斯王子”和“地游戏,这些游戏在PC版本上是绝对正确的(我没有提到所有软件,其中有很多)。但是PLM中隐藏了一部分巧妙的方案,这就是为什么很少有人可以复制它的原因。在乌克兰的广大地区,有传言称用ROM替换PLM并复制单独的HDD控制器,但总的来说,90年代的计算机不如五角大楼常见。幸运的是,后来Turbo 2+的开发人员(MicroART公司)捐赠了所有文档供免费使用。



几乎立即,几名软件开发人员参与了NedoPC的发展,谈论的是操作系统。否则,对“我们应该在哪里航行”这个问题的答案就没有用。在2005年,第一个经过深思熟虑的成果就是已经提到的TASiS系统,该系统收购了iS-DOS的源代码。



同时,在2007年,本文的一位作者创建了一个虚拟角色SMAN,该人正在开发多任务操作系统。是的,它还经历了低RAM阶段的常驻程序。这个阶段已经进行了很多年;在2016-2017年间,甚至编写了类似C的语言编译器NedoLang,它的大小可以达到48K(也可以为ARM Thumb编译)。仅在图形编辑器Scratch(2018)出现时才切断了Gordian的结。





Scratch及其菜单



2018年的选择已经很容易:与ATM-Turbo 2+的兼容性对所有用户可用-如果不是在原始硬件上,而不是在NedoPC的ZX Evo和Pentagon 2.666LE上,然后是Zorel的ATM3或至少在模拟器中(Unreal Speccy,Xpeccy,ZXMAK2,Es.pectrum等)。





Turbo 2+(1993年,但董事会明显较新)





五角大楼2.666LE(2009),非常稀有的汽车





ZX Evolution(2009),可以在任何面包店购买





在ATM3(2017)中,您只能通过熟人获得或自己制作它,



从那时起,该系统被命名为NedoOS,并开始爆炸性地发展。



应该注意的是,为了遏制爆炸初期的幻想,该系统主要基于与CP / M和MSX-DOS兼容的命令构建。到目前为止,命令列表分为三个部分:与CP / M兼容(现在有13个,由于不方便使用FCB系统,不建议使用它们),与MSX-DOS兼容(有11个,文件名已经在文本中,而是FCB结构使用数字-句柄)和不兼容的(大多数是非文件的,现在有48个,但计划将其中的一些删除)。



目前的开发系统



NedoOS源代码仍不适合系统上可用的编译器(NedoLang及其汇编程序NedoAsm,Turbo Pascal和BDS C)。到目前为止,内部仅编译了5个实用程序。软件包的主要部分是使用SjASMPlus(主代码)和Z80 IAR C(FatFs文件系统和某些实用程序)在PC上构建的。



这些文件托管在专用的SVN服务器上,由源,二进制发行版和用于在PC上构建的工具的集合组成。



该系统由一个按钮组装(批处理文件或Makefile-两个构建系统)。您还可以使用一个按钮分别收集目标之一(用于HDD,SD卡等),然后立即启动仿真器。您可以分别用较低级别的衬衫来收集每个实用程序。之所以发生两个构建系统,是因为某些NedoOS开发人员在Windows上,而另一些在Linux上。



除了编译器之外,还有一个命令处理器cmd.com(可以执行* .bat)和一个从头开始编写的具有图形功能的NedoBasic解释器。





NedoLang自行编译



系统架构



内核设备



NedoOS对用户程序可见的部分是在存储区0x0000..0x0038(所谓的内核)中的一系列调用。这些调用中的最后一个是50 Hz中断处理程序,其后是带有0x0080程序参数的命令行。内核设备仍然与CP / M兼容(通过0x0005调用),但是我们正在慢慢地摆脱它(CP / M调用仅在58个程序中有4个被使用)。所有系统调用都组织为宏(程序将/src/_sdk/sys_h.asm模块与这些宏和常量一起使用),并且可以随着OS的发展进行重大修改。这样做的结果是,如果这些宏发生任何更改,则需要重建整个系统和应用程序软件-但是,正如我们所看到的,这是通过一个按钮完成的。



NedoOS的内部藏在RAM页面中,并包含:





所有驱动程序均已编译到内核中,因此有多个用于构建系统的“目标”(ATM2ATM2 + HDDATM3ZX EvoPentagon 2.666LE)。



位于用户空间中的中断处理程序如下所示:



        push af
        push bc
        push de
user_fdvalue6=$+1
        ld a,fd_system ;    
        out (0xfd),a ;    (      ),        
;---------
;    :
;bc=memport0000
;d=pgmain
        out (c),d ;may switch this code page
curpg16k=$+1
        ld a,0
        ld b,memport4000/256
        out (c),a
curpg32klow=$+1
        ld a,0
        ld b,memport8000/256
        out (c),a
curpg32khigh=$+1
        ld a,0
        ld b,memportc000/256
        out (c),a
        pop de
        pop bc
        pop af
        ei
        ret


任务切换成一个圈(跳过冻结的任务),尚无优先级。但是仅当其他所有人都被冻结时,或者在他们自己称为YIELD的当前帧中时,才执行空闲任务(YIELD系统宏是给系统时间直到下一个中​​断,YIELDKEEP系统宏是给系统时间,并可以随时返回控制权)。



该任务可以更改中断处理程序,可以返回该中断处理程序并在其后添加任意代码。有一些建议和示例。



终端系统



任务分为三种类型:



  1. 那些根本不需要屏幕的人
  2. 文本终端就足够的那些
  3. 图形-具有所需分辨率的自己的屏幕和自己的调色板。


在NedoOS中,除了当前任务的概念外,还有“焦点”(访问键盘,鼠标和屏幕)的概念。任务之间的焦点是手动切换(通过符号Shift + Enter组合)或自动切换(打开图形,关闭图形或关闭任务时)。



像(1)这样的任务永远不会集中精力。此外,类型(2)的任务也不会获得焦点;相反,焦点位于它们所连接的文本终端上。它们通过stdin和stdout流捆绑在一起,VT-100终端的字母,数字,花体和代码沿着这些流附加一些附加内容。 Stdin和stdout通过stdio.asm库实现为队列(管道)。在内核中,队列具有255字节的缓冲区。队列中的写入和读取功能返回实际读取或写入的数量(对于文件),以及队列是否在另一端关闭。这些流是从父辈继承下来的。但是最后,所有内容都由term.com终端显示,可以滚动甚至复制和粘贴。还有一个网络Telnet服务器netterm.com。此netterm.com不需要启动,但是term.com在系统启动时自动启动。





终端中的Nedovigator,然后使用鼠标滚轮滚动终端



对于(3)之类的任务,当然,没有问题要通过系统绘制像素-为此没有足够的Z80兆赫(大多数用户只有14兆赫)。因此,有必要利用内存。而且由于ATM上只有两个屏幕区域(如128K),所以只有一个任务可以拥有自己的屏幕页面。更改焦点时,屏幕上的页面将被拦截,而失败者将获得一个伪造的页面编号,而不是它们,而页面编号只会被破坏。当任务获得焦点时,它会从键盘接收有关该任务的单独消息,但该消息不对应任何实际按钮。这允许任务及时恢复屏幕。当系统本身为其存储屏幕并恢复它时,另一任务可以打开该模式。



命令行



命令行功能由cmd实用程序实现,该实用程序在系统启动时自动启动。更准确地说,第一个空闲任务运行带有cmd.com autoexec.bat参数的term。这意味着cmd将执行指定的批处理文件。写入其中的命令按顺序执行。默认情况下,命令会在等待结束时执行,但是如果命令是程序的开始,则可以将start放在它的前面-程序将在后台运行(仅这与stdin和stdout的继承概念不兼容-可以混合使用队列中的数据)。



在参数中指定的操作结束后(如果根本没有参数),通常会退出cmd。仅对autoexec.bat保留一个异常,这样在结束后,就不会再有断线槽了。但是,在这种情况下,空闲等待同时按下C + M + D并可以使用cmd重新启动term。



命令行类似于MS-DOS。您可以将正在运行的操作的输出重定向到文件(例如,dir> filename)或另一个程序(例如,dir | more.com),也可以将输入重定向(例如,more.com <filename)。但是尚不支持链接。



为了更方便地处理文件,使用了Nedovigator命令程序(nv.com)。





小鹰,因为您已经看过Nedovigator



系统放置



应该澄清的是,我们拥有的每个文件系统都安装在一个特定的字母上,因此路径类似于m:/bin/filename.txt。队列具有z:挂载字母,但是到目前为止,它们是打开的,没有名称-任务之间的连接是通过传递队列号(句柄)来实现的。



为了避免使用GRUB这样的专门的引导加载程序,NedoOS希望计算机的ROM能够从所需的设备启动中继文件(*。$ C),例如,在ZX Evo中使用文件浏览器,或者通过按主菜单中的5按钮以及在五角大楼2.666上。LE-通过内置复印机Fatall... 否则,您将必须从TR-DOS软盘启动操作系统。系统文件位于系统磁盘的/ bin目录中,游戏位于/ nedogame中。其他游戏文件通常位于同名游戏的子目录中:例如,NedoOS色的游戏/nedogame/br.com(Black Raven)也具有包含图形,音乐和关卡的/ nedogame / br目录。





彩色乌鸦



当前机会



内存:最多支持4M RAM(可在构建系统中配置),按需以16K页分配内存给任务,任务可以将它们返回给系统本身。由于硬件中缺少内存保护,因此可以认为所有内存都是共享的。默认情况下,页面是从内存的开头分配的,不包括一些系统页面。不支持交换(在早期阶段就已考虑过,但是需要页面重新编号,这将大大降低常见任务的性能)。



多任务处理:移位(通过中断50 Hz)并进行协作;最多可以同时运行16个任务(其中一个空闲,可以将其删除,但是YIELD不提供保证);您可以将音乐播放器替换为系统中断处理程序-它会在内核上下文中以三个用户页面执行(您不能即时切换它们)。任务可以冻结(如果它们刚刚被创建,删除或正在等待孩子)。您可以查看cmd中的任务列表,其活动以及图形模式的存在,从执行中删除(这将释放它们的页面,FatFs文件记录和网络套接字)。



档案:最多可以同时打开16个FAT文件,8个TR-DOS文件和8个队列。您可以同时读写多个文件(对于编译器很重要),即使在软盘上也是如此!您可以读取文件参数,指向当前位置的指针,更改此位置,创建和重命名目录。队列承担两个用户任务,它们需要打开一次(创建时),但是需要关闭两次。文件操作在内核的上下文中执行,这时任务调度程序不起作用,但是系统音乐处理器正在运行。



联网:ICMP,TCP,UDP协议,同时最多8个套接字。有实用程序ping,时间,telnet,netterm(Telnet服务器),dmirc(IRC客户端),dmftp(FTP客户端)3ws(用于远程复制和运行文件的Web服务器),NedoBrowser(可单独查看图片的文本浏览器) jpg,gif,png,bmp和svg-有限制的最后两种格式;支持协议http和gopher,通过代理的https),wget(后台文件下载,从浏览器运行,可以自动开始查看图形和音乐播放器)。





NedoBrowser正在Internet上寻找内容



处理档案: .tar和.rar可用于读写(ZXRar是DOS下Rar 2.x的简化版本-无需大量代码,可靠的档案,多媒体格式和加密,ZXUnRar支持所有代码和固态存档,但也不支持多媒体和加密)。.gz和.zip是只读的。到目前为止,一切都仅通过命令行实用程序进行。



文档类型:文件关联已在nv.ext文件中为内置的Nedovigator命令程序注册。现在,该文件如下所示:



bmp:scratch.com
bat:cmd.com
txt,new,ext,ini,nfo,diz:texted.com
gif,jpg,png,htm,svg:browser.com
tfc,pt2,pt3,mt3,m  :player.com (pt3     Pro Tracker  NedoOS)
bas:basic.com
zip,gz :pkunzip.com
trd,scl,fdi,tap:dmm.com ( TR-DOS   —    ZX Evo   ,   ,      Magic;   , ,         )
16c,scr,fnt,img,3  ,888,y  ,+  ,-  ,plc,mc ,mcx,grf,ch$,mg1,mg2,mg4,mg8,rm ,mlt:view.com
mod:modplay.com
tar:tar.com
sna,b  ,z80:nmisvc.com
rar:unrar.com


也有十几种游戏可供选择,包括超级马里奥模拟器(需要安装墨盒转储才能工作),由埃里克和浮游者绘制的颜料,无尽夏日的部分港口以及联网的蛇。



计划



  • 扩展批处理文件的功能(参数已被传输)
  • IDE和自托管
  • 图形编辑器中的图层
  • ...


结论



目前,NedoOS实现了所有必要的功能主干,因此,如果您具有必要的硬件,那么使用该系统将比不使用它更加方便。



但是,仍有许多工作要做。开发人员加入项目的越多,理想就越接近。





大多数NedoOS开发人员都住在irc.forestnet.org上的#mhm IRC频道中(也可以通过http://chat.forestnet.org/获得)。有一个晚上的Twitch频道(带有YouTube镜子)。可以NedoOS网站下载稳定版本和最新资源



All Articles