计算机是怎样跑起来的

64 阅读10分钟

计算机是怎么跑起来的

本章对读《计算机是怎么跑起来的》的读书笔记

计算机的三大原则

计算机三大原则

  • 计算机是输入、运算、输出的机器
  • 程序是指令与数据的集合
  • 计算机的处理方式有时与人的思维习惯不同

输入、运算、输出时计算机的硬件基础

技术机通过外部设备进行输入,其内部IC对输入进行运算处理,最终返回到外部的输出,输出开始后必须经过运算,最后必须有输出。

软件是指令与数据的集合

对于软件,即程序的基础。所谓的程序,就是指令与数据的集合。无论程序如何复杂、高深,其内容都是指令与数据。所谓指令,就是控制计算机进行输入、运算和输出的命令。把计算机向计算机发出的指令一条条列出来,就得到了程序。

程序的数据分为两类,一类是作为指令对象输入的数据,一类是从指令执行的结果输出得到的数据,在编程是我们称为“变量”。

对计算机来说什么都是数字

计算机的硬件由大量的IC组成,每个IC都有许多引脚,而引脚通过电压高低(0,+5)来表示状态,因此计算机则通过0、1来表示电压状态,该物理特性则使计算机用二进制来表示所有的信息。

试着制造一台计算机

制作微型计算机所需的原件只有3个,CPU、内存和I/O。

  • CPU是计算机的大脑,负责解释、执行程序。
  • 内存负责存储程序和数据。
  • I/O是Input/Output(输入/输出)的缩写,负责将计算机和外部设备连接在一起

此处需要使用Z80 CPU作为微型计算机的CPU、TC5517作为内存、Z80 PIO作为I/O,同时还需要若干辅助原件,使用2.5KHz的时钟发生器来驱动CPU的运转,通过拨动指拨开关作为输出程序,输出程序执行结果使用LED来表示。

使用的元器件如图

image.png

image-1.png

电路图如图

image-2.png

连接电源、数据和地址总线

将+5V的电源连接到各个IC的Vcc引脚用于供电,将0V的电源连接到各个IC的GND引脚上,且将+5V与0V电源接到时钟发生器上,这样这些IC与时钟发生器就可以工作了

计算机以CPU为中心运转。CPU可以与内存或I/C进行数据的输入与输出。为了指定输入与输出的源头或目的地,CPU上备有“地址总线引脚”。Z80 CPU的地址总线引脚共有16个,用代号 A0A15 表示。用二进制表示的话就是 00000000000000001111111111111111 ,因此Z80 CPU可以指定65536个数据存取单元,进行输入输出。

指定存取数据的地址,就可以使用数据总线引脚进行数据的输入和输出。Z80 CPU的数据总线引脚共有8个用代号D0~D7表示。Z80 CPU可以一次性地输入或输出8比特的数据,这就意味着如果要输入输出位数大于8比特的数据,就要以8比特为单位切分这个数据。

作为内存的TC5517上也有地址总线引脚(A0A10)和数据总线引脚(D0D7)。这些引脚需要同Z80 CPU上带有相同代号的引脚相连。一块TC5517上可以存2048个8比特的数据。但由于输入程序的指拨开关是以8比特为一个单位指定内存地址的,使用我们只使用TC5517的 A0~A7 这八个引脚,并将剩余的引脚地址接到0V上。

连接I/O

需要先了解作为I/O大的Z80 PIO的结构才能理解为什么要这么布线。寄存器是位于CPU和I/O中的数据存储器。Z80 PIO上共有4个寄存器。2个用于设定PIO本身的功能,2个用于存储与外部设备进行输入输出的数据。

这4个寄存器分别叫做端口A控制、端口A数据、端口B控制和端口B数据。所谓端口就是I/O与外部设备之间输入输出数据的场所。Z80 PIO有两个端口,端口A和端口B,最多可与连接2个用于输入输出8比特数据的外部设备。

了解大体结构后开始布线。因为Z80 PIO上也有D0~D7的数据总线引脚,所以先把他们和Z80 CPU中带有相同代号的引脚连接起来。这样就可以使用这8个引脚交换数据了。

接下来要把Z80 PIO的B/Ā 和C/D̄引脚分别连接到Z80 CPU的地址总线引脚A0和A1上。若表示IC引脚作用的代号上划有横线,则表示通过赋予该引脚0(0v)可使之有效,反之若没有横线则表示赋予该引脚该引脚该引脚1(+5V)可使之有效。因此若赋予B/Ā引脚1则表示选择B,反正赋予0则表示选择A。同样地,若赋予C/D̄引脚1则表示选中的是C(Control,表示控制模式);反正赋予0则表示选中的D(Data,表示数据模式)。

通过Z80 CPU的A0A7地址总线引脚可以选择内存(TC5517)中的存储单元。同样地,使用Z80 CPU的A0A1地址总线引脚也可以选择I/O(Z80 PIO)中的寄存器。

连接时钟信号

如前文所述,Z80 CPU和Z80 PIO的运转离不开时钟信号。为了传输时钟信号,就需要把时钟发生器的8号引脚和Z80 CPU和Z80 PIO的CLK连接起来。时钟发生器的8号引脚与+5V之间的电阻用于清理时钟信号。

连接用于区分读写对象是内存还是I/O的引脚

至此,我们已将Z80 CPU连接到TC5517和Z80 PIO上,这两次连接都使用到了地址总线引脚A0和A1.如果这样连接就会导致一个问题,当地址的最后两位是00、01、10和11时,CPU就无法区分访问的TC5517的存储单元,还是Z80 PIO的寄存器。

Z80 CPU上的-MREQ(即Memory Request,内存请求)引脚和-IORQ(即I/O Request,I/O请求)引脚解决了这个问题。当Z80 CPU和内存之间有数据输入输出时,-MREQ引脚上的值为0,反之为1。当Z80 CPU和I/O之间有数据输入输出时,-MREQ引脚上的值为0,反之为1。

若把TC5517的-CE引脚设为0,则TC5517在电路中被激活,若设成1则从电路隔离,因为此时TC5517进入了高阻抗状态,所以即便它上面的引脚已经接入了电路也不会接收任何电信号。在Z80 PIO中,则是通过将-CE引脚和-IORQ引脚同时设为0或1,来达到与TC5517的-CE引脚相同的效果。若同时设为0,则Z80 PIO在电路中被激活,若同时设为1则从电路中隔离。

按照上面的讲解,下面需要把Z80 CPU的-MREQ引脚连接到TC5517的-CE引脚上,然后把Z80 CPU的-IORQ引脚连接到Z80 PIO的-CE引脚和-IORQ引脚上。

对内存和I/O而言,还需分清CPU是要输入还是输出数据。为此就要用到Z80 CPU的-RD引脚和-WR引脚,来区分输入与输出。需要将这两个引脚与TC5517上同名的引脚连接起来。Z80 PIO虽然只有-RD引脚但由于数字IC要么是0要么是1,因此只用一个-RD引脚也能表示输入与输出。

连接剩余的控制引脚

CPU、内存、I/O中不但有地址总线引脚、数据总线引脚、还有其他引脚,通常把这些引脚统称为“控制引脚”。之所以这样命名,是因为这些引脚上输入输出的电信具有控制IC的功能。

首先把Z80 CPU的-M1引脚和INT引脚与Z80 PIO上标有相同代号的引脚连接起来。-MI是用于同步的引脚,-INT是用于从Z80 PIO向Z80 CPU发出中断请求的引脚。

一旦把Z80 CPU的-RESET引脚上的值先设成0再还原为1,CPU就会被重置,重新从内存0号地址上的指令开始顺序往下执行。重置CPU可以通过按键开关完成。按键开关需要经过电阻接在+5V和0V之间。

总线是连接到CPU中数据引脚、地址引脚、控制引脚上的电路的统称。使用快动开关可以使Z80 CPU的-BUSRQ引脚(总线请求)上的值在0和1之间切换。若将-BUSRQ引脚的值设为0,则Z80 CPU从电路中隔离。当处于这种隔离状态时就可以不通过CPU,手动地向内存写入程序了。该行为称为DMA。

当Z80 CPU从电路中隔离后,-BUSAK引脚(响应总线请求)上的值就会变成0。也就是说,把-BUSRQ引脚上的值设成0后,还要确认-BUSAK引脚上的值已经变成了0,然后才能进行DMA。请把-BUSAK引脚分别连接到4个74367的G1和G2引脚上。

Z80 CPU的其他控制引脚并未使用。所以要把-WAIT引脚和-NMI引脚上的值设为1,即连接到+5上。之所以要在连接时加入电阻,是为了便于在今后加入开关等原件。剩下的-HALT引脚和-ZASTB引脚什么都不接。

Z80 PIO的PA0PA7以及PB0PB7用于与外部设备进行输入输出,所以稍后要把它们分别连接到指拨开关和LED上。对于剩下的几个引脚可以这样处理:将IEI引脚上拉,IEO引脚、-ASTB引脚、ARDY引脚、-BSTB引脚和BRDY引脚则什么都不连接。

到此为止,Z80 CPU、TC5517、Z80 PIO以及实在发生器上要用到的引脚就都接入电路了。这意味着计算机主机系统的功能完成了。