异星工厂吧 关注:64,751贴子:422,628
最近想着在电路方面在往前多走几步(主要还是感觉闲暇时间玩电路更有意思).
怎么说呢,有时候会搞出一些新操作,如果闷在心里,可能其他玩电路的需要重新摸索,重复我的探索,走些没必要的路.
写教程的话,要照顾到大多数人,太啰嗦没啥效率,如果没啥意外是不会写了,毕竟"领进门"就行了.
其实很多东西几句话就能点明的.
所以如果有啥新操作、新发现我会在这里简洁的说下,
给其他厂长提供一些参考,能有所帮助.


IP属地:上海来自WindowsPhone客户端1楼2017-09-08 09:29回复
    ------------2*3显示屏--------------

    2*3显示屏
    说明:
    通过6个显示屏按2*3拼接而成一个更大的显示屏.
    6个显示屏的序号分别是:
    4 5 6
    1 2 3
    为方便图像数据处理,上面三个进行了反置.
    6个显示屏图像数据传输口集中在了右下角.
    我尝试着去优化显示屏的计算部分,
    a /(-2^n) + (a+2^(n-1))/ (2^n)
    a为图像数据值;n为列(位)数.
    这个公式无法用更少的运算器计算,
    所以显示屏基本是还是用的原来的.


    IP属地:上海来自WindowsPhone客户端2楼2017-09-08 09:45
    收起回复
      2026-04-24 15:13:06
      广告
      不感兴趣
      开通SVIP免广告
      ----------显卡功能_点亮一个点--------------

      作用:输入一个坐标,点亮该坐标的灯.
      功能编号:显-01
      输入:
      {
      参数名----坐标值
      信号种类----小镐头
      信号接口----[01](暂)
      }
      输出:图像数据+显示屏序号
      说明:
      显示屏的坐标范围是(1,1)到(84,56).
      坐标值为x*64+y.
      坐标值相当于一个13位的二进制数,Y坐标占低6位,X坐标占高7位.
      这个电路由两部分组成,
      第一部分,根据坐标计算这个坐标显示在第几个显示屏.
      将xy除以28,得显示屏坐标,取值到该显示屏的序号,输出(蓝图)信号.
      第二部分,根据坐标计算出显示用的图像数据.
      通过4^n再*-1进行抵消重置,算是一个新奇的思路.
      计算采用了取值法,比刚开始的信号匹配法少了1t.
      这是最基础也是最常用的一个功能,整体还是很满意的,
      很少在保持可阅读性的情况下建的这么整齐:)


      IP属地:上海来自WindowsPhone客户端3楼2017-09-08 14:44
      收起回复
        ---------显卡硬件_数据分流-------------

        作用:
        根据蓝图信号的值,将信号传入不同的方向.
        说明;
        一个简单的基础组件,没啥太难的地方.
        不过这里使用了一种新的方法抵消无关信号.

        (蓝图,1)是无关信号,这个方法可以省很多麻烦.甚至是1t时间.


        IP属地:上海来自WindowsPhone客户端4楼2017-09-08 19:25
        回复
          有种不详的预感……设计电路时找到了显示屏的改进思路,如果可行的话,之前的设计可能会被全部推翻……需要冷静一下


          IP属地:上海来自Android客户端6楼2017-09-09 19:58
          回复
            对啊,不止这个,如果把颜色的显示规则改改能做彩色显示屏的。


            IP属地:上海来自Android客户端8楼2017-09-09 21:02
            回复
              忘了显示屏在设计的时候就考虑了扩展,一个显示屏扩一下应该就够用。不过移位计算还需要摸索摸索


              IP属地:上海来自Android客户端9楼2017-09-09 23:28
              回复
                将十进制转为二进制.
                以十进制数去除以以递减顺序排列的2的次幂,每除一次,商是一个二进制位,而余数继续去除以下一个最大的2的次幂.
                ——《编码的奥秘》


                IP属地:上海来自WindowsPhone客户端11楼2017-09-10 11:35
                回复
                  2026-04-24 15:07:06
                  广告
                  不感兴趣
                  开通SVIP免广告
                  思维惯性,一直想着显示屏那个公式,忽略了十进制转二进制的一般方法.
                  由原来的4排运算器减到2排运算器,调试起来也更方便了.


                  IP属地:上海来自WindowsPhone客户端12楼2017-09-10 11:38
                  收起回复

                    新的显卡功能-点亮一个点重置完成,
                    因为显示屏改为了60*108所以只能用信号匹配法设计.
                    之前建的虽然没有了,但让我对信号抵消更熟练.
                    在加上当时精神状态比较好,电路耗时为4t,
                    这是理论上的最低耗时.建好很有成就感.
                    不过不可避免的有点繁杂(从结构和连线就能看出来),
                    要调整电路的话,可能需要一定的时间去重新理解回忆.....
                    很容易发生自己也看不懂的情况
                    等会记下逻辑.


                    IP属地:上海来自WindowsPhone客户端14楼2017-09-10 22:42
                    回复
                      一个显示屏的大小是30*108,
                      如果采用一般的逐除取余法进行十进制转二进制,
                      显示屏也会是逐列刷新,总体上30t一帧,看着很难受。
                      需要进行一些变通。
                      第一列计算过程是(n为值):
                      (n%2)/1
                      第二列是:
                      (n%4)/2
                      第三列:
                      (n%8)/4
                      ......
                      也就是说,
                      n为输入的图像数据值
                      a为灯的列数
                      (n%(2^a))/(2^(a-1))
                      两个30*108的显示屏拼成一个大显示屏。
                      另一个显示屏并不是单纯的复制,
                      计算式子为:
                      (n%(2^a))/(-2^(a-1))
                      也就是只能接受负值数据。


                      IP属地:上海来自WindowsPhone客户端15楼2017-09-11 17:51
                      收起回复

                        显卡功能-点亮一个点的逻辑:
                        上面部分,
                        坐标值除以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
                        回复
                          基础知识复习
                          移位运算>>和<<的作用。
                          游戏中的信号值是一个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
                            回复
                              2026-04-24 15:01:06
                              广告
                              不感兴趣
                              开通SVIP免广告
                              关于类似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
                              收起回复