摩托罗拉68000

title: 历史.
content: 摩托罗拉公司于1976年起动MACSS计划(Motorola Advanced Computer System on Silicon,摩托罗拉硅晶高级电脑系统),打算开发一款与以前产品完全不相容的全新微处理器。根据计划,新CPU应该是对当时摩托罗拉主流8位CPU6800的一个高阶互补产品,而不会考虑两者间的兼容性。不过,当68000设计出来后,它还是被保留了一个可相容6800外部的总线协定模式,并且专门有8位总线的产品被生产出来。当然,设计人员还是更在意于其向后兼容性,这为68000确立在32位CPU领域的领先优势奠定了基础。比如,68000使用32位暂存器和内部总线,仅管其本身的结构很少直接操作长字。小型电脑诸如PDP-11和VAX—二者采用了类似的微编码—对68000的设计有深远的影响。  在20世纪70年代中期,8位微处理器制造商纷纷竞争导入下一代16位CPU。国家半导体在1973年到1975年间首先开发出了IMP-16和PACE,但其速度并不理想。英特尔公司于1977年推出8086,迅速受到欢迎。此时,为确保竞争上的领先,摩托罗拉意识到其MACSS计划必需跳过16位系统,而直接推出16/32位混合型CPU。到1979年,摩托罗拉68000,即MC68000,才告姗姗来迟。由于比8086晚两年,其晶体管数目更多,并因其易用性得到了好评。  最初的MC68000使用3.5微米HMOS技术(即高性能N通道金属氧化物半导体,CMOS的前身)制造。1979年发布了工程样品,次年产品型面世,速度有4、6、8、10兆赫兹多种。最快的16.67MHz版本到80年代末才面市。  MC68000在早期得到了很多高阶产品的青睐。在升阳公司的Sun workstation等多种Unix工作站中,MC68000一度占领导地位。市场领先的其他一些电脑,包括Amiga(阿米加)、Atari ST(雅达利ST)、Apple Lisa (苹果Lisa)和 Macintosh(麦金塔),以及第一代激光打印机,如苹果公司的LaserWriter,都使用MC68000。1982年,摩托罗拉进一步更新了MC68000的指令集以支持虚拟内存,并使其能够符合由Popek和Goldberg于1974年提出的虚拟化标准。  为支援低成本系统和使用较少内存的应用,摩托罗拉于1982年还推出了面向8位外部总线的MC68008。1982年以后,摩托罗拉开始把更多的注意力投向68020和88000。
title: 其他制造商.
content: 由日立公司设计,1985年两公司联合推出了使用CMOS技术的68HC000。68HC000的速度有8到20MHz多个版本。尽管除了使用CMOS电路,68HC000与基于HMOS的MC68000完全一致,但正是因此其能耗得到大幅下降。MC68000在25摄氏度环境下能耗大约为1.35瓦,而8MHz的68HC000则为0.13瓦,较高频率的版本则能耗也相对提高(HMOS技术则不同:其在CPU空闲时仍会耗电,所以功耗与频率基本无关)。后于1990年摩托罗拉又推出了MC68008的CMOS版本,并将其改进为可相容8/16位两种总线模式。  其他HMOS版68000的制造商包括:Mostek、Rockwell(洛克维尔)、Signetics、Thomson(汤姆逊)和东芝。东芝也生产CMOS版68000(TMP68HC000)。
title: 应用.
content: 68000首先被应用于许多高端产品中,如多用户微型计算机WICAT 150及阿尔法微系统的一些早期计算机等。单用户工作站如惠普公司的HP 9000/200、太阳微系统的Sun-1;图形终端如DEC的VAXstation 100和Silicon Graphics的IRIS 1000均使用68000。许多Unix系统也开始使用68K系列CPU。  在80年代中期,68000又成为首先应用于个人/家庭计算机的CPU。先后有苹果的Apple Lisa与麦金塔(Macintosh 128K)、Amiga的海军准将(Commodore)、雅达利ST及夏普的Sharp X68000采用68000。  68000最主要的成功在于控制器领域。早在1981年Imagen公司就把68000用作其激光打印机Imprint-10外部控制器的CPU。惠普于1984年发布的第一款LaserJet打印机亦使用一片8MHz的68000作为内置控制器。类似的基于68000的整合控制器也被广泛用在其他多款打印机中。到90年代,68000仍在许多低端打印机中被使用。  除了传统商业和家用计算应用,68000在工业控制系统中也取得了巨大成功。Allen-Bradley、德州仪器及西门子公司生产的可编程逻辑控制器(PLC)即使用68000。一般来说,这类工业系统的用户更重视产品的可用性,而不是向家庭用户一样过于在意其是否过时。所以,仍有许多使用68000的系统,在被安装二十多年后,在生产一线提供着持续而可靠的服务。  随着技术的进步,68000在计算机单机市场渐被淘汰,但其应用仍活跃于消费和嵌入式领域。游戏机制造商使用68000作为许多街机和家用游戏机的处理器。雅达利在1983年推出的Food Fight便是使用68000的代表街机游戏。世嘉的System 16、卡普空的CPS-1和CPS-2以及SNK的Neo Geo也都使用68000。  在80年代末到90年代初,一些游戏机厂商使用68000作为家用游戏平台的中央处理器。这包括世嘉的Mega Drive(MD)和Neo Geo家用版。到了90年代,尽管街机游戏开始使用更加强大的CPU,68000还在世嘉的32位CPU游戏机Sega Saturn中用作声音控制器。  基于68000的683XX系列微控制器则广泛应用于许多应用领域中,包括网络和电话设备、电视机机顶盒、实验室与医疗设备等。思科、3Com等公司曾在他们生产的通讯设备中使用MC68302及其衍生产品。Palm公司曾使用DragonBall系列CPU(68K系列的后续)作为其PDA的处理器,直到基于RISC的ARM处理器开始统治PDA市场。此外,AlphaSmart公司在其便携式文字处理器中使用DragonBall。  德州仪器在一些高端图形计算器,如TI-89和TI-92中,使用68000。这些设备早期使用以68EC000为内核的专门化微控制器,后来则改用封装好的MC68SEC000。
title: 作为微控制器内核.
content: 在被纯32位CPU取代后,68000开始被用作许多微控制器的内核。1989年,摩托罗拉发布了MC68302通讯处理器。两年后又推出独立处理器芯片MC68EC000。1996年的MC68SEC000便使用了这款芯片。  1996年摩托罗拉停产HMOS MC68000和MC68008,但其分离出来的半导体部门,飞思卡尔公司,仍在生产MC68HC000等68K家族系列产品。68000架构的后代,680x0、CPU32以及Coldfire系列,也仍在生产。
title: 架构.
title: 地址总线.
content: 68000地址总线为24位,故支持16MB最大物理内存。在使用32位长字对地址进行存储和计算时,高位的一个字节会被自动忽略。这种设计使得其具备相当的向前兼容性,可以直接运行为后续的纯32位CPU编写的软件。也因此,根据现今的定义,68000应称得上是一款32位CPU。摩托罗拉使用32位内部总线的目的在于希望能够在68000上编写可以被将来的后续产品直接使用的软件,而相关指令不必作位数上的调整。  然而,编程人员还是有可能编写出无法与后续产品兼容的软件。倘若这种24位软件丢弃高位字节,或将该字节用作寻址以外的目的,它就有可能在32位68K系列CPU上运行失败。这就是说,对于希望支持向前兼容的软件,必须始终使用32位长字寻址,并且将最高位字节置零。
title: 内部寄存器.
content: 68000包含8个32位通用寄存器(D0-D7),及8个32位地址寄存器(A0-A7)。最后一个地址寄存器,即A7,也作为标准栈指针使用,在编程中可以使用SP作为同义词。这组寄存器在规模上恰到好处:既可以对中断快速反应(只有十多个寄存器要保存),也有足够的寄存器来进行快速计算。  尽管两种寄存器并存有时会比较麻烦,但在实践中并非难于掌握。据称,这还使得CPU的设计者们可以通过对地址寄存器组使用辅助计算单元,从而实现较高程度的并行机制。  存储内容高位字节在前(Big Endian模式),与x86相反。
title: 状态寄存器.
content: 68000比较、算术和逻辑操作会在状态寄存器SR的低端字节(又称CCR)中设置一些标志位,以供之后的条件跳转使用。这些标志位是:得零(Z)、进位(C)、溢出(V)、扩展(X)、负数(N)。尽管许多时候值是相同的,X与C依然是两个不同的标志位。这就允许算术、逻辑和移位操作的多余位与逻辑控制/连接造成的进位区别开。
title: 指令集.
content: 68000的指令集基本上是正交的。大部分指令被划分成操作和地址模式两部分,并且大部分地址模式都对几乎全部指令可用。这种近似正交性在编程人员当中毁誉参半。  编程者会清楚地发现,他/她所书写的指令可能被汇编成几种不同的二进制操作码。这实际上是一种不错的妥协:一方面,在便利性上与纯粹的正交指令系统相仿;一方面,CPU设计者可以有更多的自由来设计操作码表。  对于一台16位时代的机器而言,由56条指令构成的最小指令集仍显巨大。此外,许多指令和寻址模式会在指令后边加入地址/寻址模式码。  许多设计者确信MC68000体系结构应基于成本考量使用较精简的指令码,特别是使用编译器自动生成时。这种认识为对其设计上的成功加分不少,并且使之成为一种经久不衰的体系结构。这一信条持续地保证了整个系列指令集的设计优势,直到ARM体系结构引入同样精简的Thumb指令集。
title: 特权级.
content: 68K系列CPU包含两个特权级。超级用户(supervisor)模式和用户(user)模式。后者相比于前者只是禁用了中断级控制。中断总会使CPU进入超级用户态。超级用户标志位存储于状态寄存器SR中,并对用户可见。  超级用户态下会有一个分离的栈指针用于中断处理。
title: 中断.
content: 68000可以识别7级中断,从级别1到级别7。7级中断严格按优先级排列,一个高级中断总是能嵌套于一个低级中断。可以使用专门的特权指令在SR内设置最小中断级别,从而屏蔽所有小于此级别的中断。但如果设置为0,表示不接受中断。级别7不可被屏蔽,即NMI。级别1总是可以被高级中断打断。  硬件中断源将中断信号以编码方式通过三条输入线传送给CPU。一般会使用专门的中断控制器来汇总各外部设备,并将中断信号按级编码与CPU硬连。中断控制器可以使用简单如74LS148优先级编码器,复杂如MC68901多功能外设(支持可编程中断控制、通用异步收发装置、定时器及并行输入输出等)等各种电路模块。  在内存低1K位置存储中断向量表,共支持256条中断向量。部分中断向量有特殊用途:向量1为初始栈地址;向量2为初始代码地址;向量3到15用于错误报告,包括总线错误、寻址错误、非法指令、除零异常、优先权违反等。从向量24起处理真正的中断,包括伪中断、针对级别1到级别7的默认处理向量,多达15个自陷向量,以及用户定义向量。  由于必须在重启时保证向量1和2的内容有效,所以68000系统通常包含在地址底部使用非易失性存储器(如ROM)来存储一些例程向量和启动代码。但是,一个通用计算机的操作系统会期望在运行时改变向量内容。解决办法是将ROM内的向量指向RAM的分支表,或使用早期在8位CPU中广泛使用的换页技术(Bank switching)。  由于包含一条非特权指令MOVE from SR,允许一般用户只读地访问某些特权状态,68000并未完全满足波佩克与戈德堡虚拟化需求。该需求指出了为构建某一CPU之等价虚拟机而对CPU提出的若干要求。  MC68000对虚拟内存缺乏方便的支持。一款支持虚拟内存的CPU应能在内存访问失败后自陷并恢复。不过,68000确实提供了一个总线错误异常来使CPU自陷,尽管还不能保存足够的状态信息以便于异常处理之后的恢复。为此,一些Unix工作站通过使用两块68000来解决虚拟内存问题。两块CPU的运行时钟存在相位差。当第一块遇到寻址异常后,特殊的硬件会设法向第二块发出中断,以防止其也访问错误地址。中断例程在第二块CPU上处理完内存换页后,会按之前的状态重启第一块CPU,从而再次使两CPU同步。  不过,以上这些问题在MC68010被彻底解决。在MC68010中,总线异常和地址错误均会使大量状态信息压入系统栈,以便于之后的恢复。MOVE from SR也被修正为特权指令。原本用于访问SR低端字节的代码可由新指令MOVE from CCR取代。
title: 指令集细节.
title: 标准寻址模式.
content: 68000提供多种寻址模式,并统称为有效寻址(EA)。在CPU参考手册中,经常会有诸如MOVE <ea>,<ea>这样的表记方式。这表示在目的操作数和源操作数上可分别使用一种(但通常不是全部)有效寻址。
title: 指令后缀.
content: 大部分指令都有表示操作长度的后缀:.B、.W或.L,分别表示这一操作在字节(8比特)上、字(16比特)上或长字(32比特)上进行。运算的过程和结果都会受到后缀的影响。在运算过程中,只有属于操作长度范围的部分才会参与运算。比方说,执行MOVE.B D2,D1会把D1的最低一字节复制到D2的最低一字节处,而两者的其余字节均不受影响。对于CCR,各标志位的值会由操作长度的最高有效位决定。如果某次ADD.B使得结果的第7Bit位为1,则CCR的N位会置1;如果某次ADD.L使得结果的第7Bit位为1,并且第15Bit不为1,则CCR的N位不会置1。在后一种情况下,CCR的N位只受第15Bit,即一个字的最高有效位影响。另一个例子是在自增/自减寻址中,自增/自减的长度因操作后缀而异。如果操作为MOVE.B,则自增/自减1;W为2;L为4。
title: 常用指令.
content: 大部分68000的指令都是二元的。目的操作数在前,源操作数在后。

Summary: 摩托罗拉68000型中央处理器,或称MC68000,680x0,m68000,m68k,68k;是由美国摩托罗拉公司(Motorola)的半导体部门(现已独立成为飞思卡尔公司(Freescale))出品的一款16/32位CISC(复杂指令集)微处理器。作为M68K处理器系列的第一个成员,MC68000于1979年投放市场。由于内部使用32位总线和寄存器,它在软件层(指令集)上基本与随后的纯32位产品保持兼容。

Motorola 68000: Apparu en 1979, le Motorola 68000 est un microprocesseur CISC 16/32 bits développé par Motorola. C'est le premier de la famille de microprocesseurs souvent appelée "m68k" ou "680x0", qui comprend notamment les microprocesseurs Motorola 68010, Motorola 68020, Motorola 68030, Motorola 68040 et Motorola 68060. Le nom du 68000 vient à la fois de la continuité avec la famille de microprocesseurs Motorola 6800 et du nombre de transistors qu'il contient, un peu plus de.