设计红石8086(可能弃坑的那种)(一)
这个企划其实早都有了,只是最近有进度了而已。
废话不多说,直接进入正题。

首先我做了一对异步串行收发电路,是0.25bpt,起始位10.5bit,数据16bit,停止位2.5bit。

时序实验传输数据为0xAA55,电路以及实验结果如图,可以推得时序规范。
这个电路目前貌似没有什么用,但是后面也许可能大概会突然觉得用0T拖总线很麻烦、这个相对就很简单,所以留下来备用。

然后就是0T中继器,是照抄百度的,留着备用

当然,它也是一个1T的非门,只是红石火把好像更香。(pia叽)

CPU有个功能很重要,那就是运算。8086的算术运算总共有如下几种:
ADD, ADC, SUB, SBB, CMP, DAA, AAA, DAS, AAS, INC, DEC, MUL, DIV, IMUL, IDIV
仔细观察发现貌似只用实现ADC和SBB即可,毕竟渣机怕后期CPU组装不起来,那就做吧。这东西很简单,百度即可。
接下来就是实验环节了。

如图,我先把0x0512送上总线,然后给操作数A锁存一个脉冲。

接着我将0x2946送上总线,并给操作数B锁存一个脉冲。
然后其实已经算好了,接着输出就行。

给MUX信号,使能加法结果输出,可以读出是0x2E58,0x0512+0x2946的确等于0x2E58,计算正确。

给MUX信号,使能减法结果输出,可以读出是0x1DBCC,0x0512-0x2946的确等于0x1DBCC,计算正确。
最后用CY(进位标志位,1代表进位或借位)测试并对电路计时,0xFFFF+0x0000+1=0x10000用时100tick,0x0000-0x0000-1=0x1FFFF用时104tick,忘记截图了,懒得重做了,反正就这读数。(略略略略略~)

ALU, ALU,没有LU能叫ALU吗(误)。那么就动手吧,逻辑运算共如下几种:
OR, AND, XOR, NOT, TEST
那就实现NOT, OR, XOR, AND吧。

先简单设计一下,基本上就是对算术运算单元做了亿点点的改动,从上到下输出的是:
非A,A或B,A异或B,A且B
从右到左AB分别输入了00, 01, 10, 11。看下结果:老铁,没毛病。接下来复制粘粘粘贴就行了。
和AU一起合影一下,这下只要用胶水(误)粘起来(大雾)就是ALU了。AU和LU合影。

还好他们都在两个结构方块内存下来了,没有4个已经很仁慈了。(草(双语))

在仔细回想回想指令集,有一组不好归类到逻辑或者算数运算的:
ROL, ROR, RCL, RCR, SHL, SHR, SAL, SAR
都实现吧,不过,实现一个参数为1而不是CL的好像更简单。那就实现吧,上层是右移,下层是左移。放图!









然后载入0xAA55+CY试试。








嗯,那么就到这里……
“桥豆麻袋,SHR 0x55AA+CY,1; SAR 0x55AA+CY,1和 SHR 0xAA55+CY,1是不是算错了?”
这位朋友,如果这个是你独立发现的,恭喜你,答对了,的确算错了。因为电路仍然将CY右移了,这是不合理的。于是我稍稍修改了一下,放图!(之前有的实验由于各种原因就没有必要再做了)






那么再放几张图给你们看看这玩意到底长啥样。




那么就到……
“桥豆麻袋,有的时候明明不该改变CY的你输出怎么变了?”
不会吧不会吧,我随手给个CY你就真的去更新状态寄存器了????不会吧不会吧不会吧!!!(况且乘除法过程中也会用这个,不会这也想动动CY吧,不会吧不会吧不会吧)