异星工厂吧 关注:64,753贴子:422,631

回复:电路杂货铺

只看楼主收藏回复


显卡功能-点亮一个点的逻辑:
上面部分,
坐标值除以128取出X坐标,
根据x坐标判断点在那个显示屏,在左边输出(速1插件,1),右边输出(速1插件,-1)
中间部分,
计算取出y坐标,信号匹配,取出y值对应的信号种类,
再乘以上面部分输出的速1插件信号,(用于控制输出正值还是负值)
最右边那个运算器是用来信号抵消的.
下面部分,
将上面部分除以128的结果再%30,得出在该显示屏的x坐标,
计算2^n得出图形数据,再乘以中间部分得出的信号种类,
下面俩是4^n*-1进行信号抵消,其他乱七八糟的也差不多都是用来信号抵消.
在有信号输入的情况下,没有任何无关信号输出,
在无信号输入的情况下,也没有任何无关信号输出,
这波抵消可以说很nice了.


IP属地:上海来自WindowsPhone客户端16楼2017-09-11 17:52
回复
    最近想做处理器,但是工厂的信号最大只支持2的31次方,也就是21亿,10进制解码后,也就是最大能储存9个10进制数字的信息,而现实的cpu,一个字节也才8个二进制数字,突然觉得异星工厂已经超越现实了


    来自Android客户端17楼2017-09-12 08:04
    收起回复
      2026-04-24 18:52:05
      广告
      不感兴趣
      开通SVIP免广告
      基础知识复习
      移位运算>>和<<的作用。
      游戏中的信号值是一个int,是一个32位二进制数转为的十进制。
      int的最高为符号位,0表正数,1表负数。
      因此值的范围是-2^31~2^31-1.
      以11为例,
      11=8+0+2+1,因此二进制值为1011。
      在游戏里存储的是32位二进制:
      (这是28个0)1011
      <<表示这32位二进制整体向左移,高位舍去,低位补0,
      后面的值为移多少位。
      11<<1为左移1位,其二进制为:
      (27个0)10110=22
      11<<2为
      (26个0)101100=44
      11<<5为
      (23个0)101100000=352
      存在大致一个规律,每左移一位相当于值*2一次
      当左移到最高位,就不是这个规律了.
      11<<27,其二进制仍然按规律左移为
      01011(27个0)
      其十进制为:2^30+0+2^28+2^27+0=1476395008≈ 1.5G
      11<<28.二进制为:
      10110(27个0)
      由于最高位为符号位,1为负数,因此这时是负数。
      剩下的0110(27个0)需要取反码得出值。
      反码为原码逐位取反,再+1,值为:
      1001(27个1) +1
      =1010(27个0)
      =2^30+0+2^28+0
      =1073741824+268435456
      ≈1.3G
      最后的值为-1.3G
      也就是说:
      11<<28=10110(27个0)≈ -1.3G
      在左移一位:
      11<<29=01100(27个0)
      最高为0,是正数
      2^29+2^28≈1.6G
      不再举例了,都按这个规律来就行。


      IP属地:上海18楼2017-09-14 09:47
      回复
        右移仍然是这个方式进行,
        不过不存在符号位这种正负来回变换。
        右移到最低位值直接为0了。
        不过需要注意的是负数右移最小为-1(因为最高为1,取了反码),
        还有,左移值会循环。
        11<<0=11<<32=11<<64
        也就是说如果左移32位是会回到原值。
        如果要用左移运算实现显示屏图像的左移,
        需要一些额外的操作。
        进行左移运算后,用两个判断运算器(判断<0和>0)把正值和负值分开,
        对负值进行减2^31,结果再与正值结合。
        最后的出的值就可以用于图像显示了


        IP属地:上海19楼2017-09-14 09:53
        回复
          可以试试多路信号大法,我的五子棋就是15路信号的。


          21楼2017-09-17 15:41
          收起回复
            关于类似11<<-5这样的负位移值处理,
            这在编码中是不存在(位移值只能是正整数),
            但在游戏里进行了一些处理,实际是有结果输出的.
            经过在群里和大佬们讨论,得出了结论
            11<<-5等同于11<<27.
            因为27=32-5,
            可以理解为对位移值不断加32,直到是个正数
            具体到公式是:
            (n为输入的位移值,x为实际位移值)
            当n<0,
            x=32+(n%32).
            当n≥0,
            x=n%32.


            IP属地:上海来自WindowsPhone客户端22楼2017-09-18 22:27
            收起回复
              显示屏的处理再一次的做了修改...
              n为输入的图像数据值
              a为灯的列数
              (n<<(a-1))AND(1)


              IP属地:上海来自WindowsPhone客户端23楼2017-09-18 22:27
              回复
                现在正在做对一组图像进行显示
                bug、bug还是bug
                思路很明确,关键处理也测试过了,但实际建造的时候真可谓一步一个bug(也可能是我太粗心了)
                涉及位移处理的运算很难在心中推出大概的结果,基本上都是根据实际结果判断有没有问题.
                耗费了很长的时间,终于完成了X轴部分,暂时摆脱被bug支配的恐惧.
                原理不过就是位移运算,没啥说的
                电路比较乱,不过*-1的都是用来清除无关信号的,排除了逻辑就比较清楚了.


                IP属地:上海来自WindowsPhone客户端24楼2017-09-18 22:28
                回复
                  2026-04-24 18:46:05
                  广告
                  不感兴趣
                  开通SVIP免广告
                  我......我...我一个学工程的TM看不懂啊,好吧,拿个小本本记下来


                  来自Android客户端25楼2017-09-20 06:36
                  回复
                    我佩服过三个男人,一是许仙,二是董永,三是宁采臣。 一个敢睡蛇,一个敢睡仙,最后一个连鬼也不放过。 直到看了花千骨,我才知道,落十一才是真好汉,敢睡毛毛虫。 最看不起的就是孙悟空,把七个仙女定住,他居然跑去偷桃子了、 但是不得不佩服孙悟空他爹、居然能把石头整怀孕!有人说我水经验,我上去就是一巴掌,***的不是废话么,不水怎么升级,以前不懂,看帖总是不回。一直没升级和增加经验,现在我明白了,反正回帖15字就可以升级,还可以有经验。升级又需要经验,于是我把这话复制下来,遇帖就回,捞完就闪。


                    26楼2017-09-20 17:12
                    收起回复
                      这次完成的是图像的上下位移.
                      通过改变信号的类型来实现上下位移.
                      比如一组图像数据:
                      {(A,60);(B,50);(C,44)}
                      上移一位,就是按照设置的信号类型编号 上移一个编号.
                      A的编号是10,B的编号是11,
                      那(A,60)就变成(B,60)
                      最后结果是:
                      {(B,60);(C,50);(D,44)}
                      如果上移三位,
                      那结果就是:
                      {(D,60);(E,50);(F;44)}
                      同理.


                      IP属地:上海来自WindowsPhone客户端27楼2017-09-24 22:41
                      回复
                        在电路中实现,一般的过程是:
                        1.获取A信号的编号10
                        2.编号10+1=11(上移一位)
                        3.获取编号11对应的信号B
                        4.A信号的值乘以(B,1).得出(B,60)
                        这一次只能处理一个信号,
                        一组图像数据包含多个信号,数量还不确定.
                        通配符可以对多个信号进行处理,但处理过程中已经使用了通配符.
                        来个 每个*=每个* 这样的操作显然不太可能.
                        因此需要通过电路进行信号遍历,手动实现另一个通配符的作用.
                        一共有90种信号,需要遍90次,至少耗时90t.
                        这是不能接受的.
                        因此暴力解决,直接建出90个处理单元....

                        一个处理单元6个运算器+1个常量箱,对一种信号进行处理.


                        IP属地:上海来自WindowsPhone客户端28楼2017-09-24 22:42
                        回复
                          电路太多太多啦,完全成了体力劳动.(7*90=630)
                          搞了三分之一实在没耐心了,(尤其是搞了很多,发现电路有问题...)
                          有时间再考虑吧,不过这已经可以看出大致的效果了↓

                          直觉告诉我,AND,OR这一类的新操作应该能提供比遍历更好解决办法.
                          不过这需要对这类操作有深入的理解,而且思路这东西不能强求.
                          更关键的是"显卡"对耗时的要求很高,
                          我想没有什么操作能比这种暴力解决的2t耗时少了.
                          果然什么高端技术都不如直接莽过去.....


                          IP属地:上海来自WindowsPhone客户端29楼2017-09-24 22:56
                          回复
                            有蓝图吗?


                            来自iPhone客户端30楼2018-03-28 16:54
                            回复
                              2026-04-24 18:40:05
                              广告
                              不感兴趣
                              开通SVIP免广告
                              奈何自己没文化 一句卧槽表达楼主强大


                              31楼2020-02-20 19:11
                              回复