프로그램 가능한 레드넷 제어기(PRC) Part.6

마인크래프트 1.6.2, 마인팩토리 리로디드 2.7.0B8 기준으로 작성되었습니다.

이번에는 래치와 플립플롭에 대해 알아보겠습니다. 디지털 회로에서 플립플롭과 래치는 값을 보관하기 위한 중요한 회로이지만 PRC에는 내부에 변수(VARS) 저장 공간이 있다보니 용도가 애매합니다. 그런 관계로 간단한 사용 방법만 적어둡니다. 래치와 플립플롭은 공통적으로 Q와 Q# 값을 출력으로 사용합니다. Q에는 현재 보관중인 값을, Q#에는 현재 보관중인 값과 반대되는 값을 내보냅니다.

SR-래치(SR-Latch) – S(Set)와 R(Reset)의 값에 따라 보관중인 값을 변경합니다. S로 신호가 들어올 경우 보관중인 값을 15로, R로 신호가 들어올 경우 보관중인 값을 0으로 바꿉니다. 양쪽 모두 신호가 들어오지 않을 경우 그대로 유지하고, 양쪽 모두 신호가 들어올 경우 원래 회로는 비정상적인 동작을 하게 되지만 PRC에서는 아무런 변화 없이 현재 상태를 유지합니다.

SR-래치(SR-Latch) Gated – 회로의 동작은 SR-래치와 동일합니다. 다만 E라는 입력을 추가로 받아서 E로 신호가 들어올 경우에만 동작하도록 변경된 회로가 SR-래치 Gated 회로입니다.

D-래치(D-Latch) Gated – E로 신호가 들어오는 동안 보관중인 값을 D에서 들어오는 값으로 바꿉니다.

T-플립플롭(T-Flipflop) – 입력에 따라 저장된 값을 반전시키는(토글, Toggle) 회로입니다. CLK의 값이 0에서 다른 숫자로 바뀌는 순간 T 입력을 확인해서 T로 신호가 들어왔다면 보관중인 값을 반대로 바꿉니다.

JK-플립플롭(JK-Flipflop) – SR-래치와 T-플립플롭을 합친 형태의 회로입니다. 입력은 J와 K를 받으며 J는  S의 역할을, K는 R의 역할을 합니다. 다만, J와 K 모두 신호가 들어올 경우 아무런 동작도 하지 않던 SR-래치와 달리 T-플립플롭처럼 보관중인 값을 반대로 바꿉니다. 그리고 CLK입력을 받아서 CLK값이 0에서 다른 숫자로 바뀌는 순간에만 회로가 동작합니다.

이상으로 현재 PRC에서 제공중인 래치와 플립플롭에 대해 알아보았습니다.

이제 나머지 PRC 회로들을 알아보겠습니다. 우선 통과(Passthrough) 회로입니다. PRC에서 제공하는 통과 회로는 총 3가지 형태가 있습니다.

첫번째로 일반 통과 회로의 경우 들어온 입력 값을 그대로 출력 값으로 내보냅니다. 상수(CNST)값을 출력하고 싶을때나, 들어온 값을 변수(VARS)에 넣고 싶을때 등에 쓸 수 있습니다.

두번째로 Gated 통과 회로입니다. 래치에서 잠시 언급한대로 E라는 신호를 받아서 신호가 들어올 때만 값을 전달합니다. E에 신호가 들어오지 않는다면 0을 내보냅니다.

세번째로 Ring 통과 회로입니다. Ring 통과 회로에는 많은 입력과 출력이 있습니다. 우선 CNT 입력값은 입력된 I 값을 몇개의 출력으로 보낼지를 결정합니다. CNT가 5일 경우 O0부터 O4까지 5개로만 I 값이 출력됩니다. 그리고 CLK 값이 0에서 다른 숫자로 바뀔때마다 출력되는 위치가 바뀝니다. 바뀌는 순서는 순차대로 0번부터 1씩 증가하며 마지막 출력이었다면 첫번째인 0번 출력으로 돌아갑니다. 현재 출력중인 위치를 제외한 나머지 출력에는 0을 내보냅니다.

다음으로 알아볼 회로는 지연(Delay) 회로입니다. 마인크래프트에 있는 레드스톤 중계기(Redstone Repeater)와 같이 입력된 값을 일정 시간이 지난 후에 출력하는 회로입니다. 다만, 레드스톤 중계기에 비해 지연 시간을 자유롭게 설정할 수 있다는 장점이 있습니다. D에 입력된 숫자만큼의 틱이 지난 후에 I의 값을 O로 보냅니다.

다음은 팬아웃(Fanout) 회로입니다. 팬아웃은 하나의 입력을 여러개의 출력으로 동시에 내보내는 역할을 합니다.

마지막으로 슈미트 트리거(Schmitt Trigger) 회로입니다. 슈미트 트리거 회로는 Pd에 설정된 틱 시간 이상동안 I로 입력이 있어야 출력으로 값을 전달합니다. 발판을 설치하면서 잠시 지나가는 경우에는 무시하고 싶을때 쓸 수 있는 회로입니다. 발판 위에서 일정 시간동안 대기해야 신호가 전달되기에 잠깐 밟는 정도로는 신호가 출력되지 않게 할 수 있습니다.

이상으로 현재 PRC에서 제공되는 모든 회로에 대한 이야기를 마칩니다. 자세히 풀어서 설명하는 능력이 없다 보니 각 회로별로 간략한 요점 정리글이 되어버렸지만요. 각 회로에 대해 궁금한 내용이 있으신 분은 댓글을 남겨주시면 답변을 드리도록 하겠습니다.

프로그램 가능한 레드넷 제어기(PRC) Part.6”에 대한 답글 14개

  1. 겨우겨우 PRC에 대한 이야기를 마칩니다. 실제 분량을 얼마 안되는데 한달이 넘는 시간이 걸렸네요. 자잘한 사연들이야 몇가지 있지만 가장 큰 일은 기존에 하던 업무를 정리하고 새로운 업무를 시작하는 시기였다는 점이네요. 새로운 업무를 시작하다 보니 개인적인 글을 쓰고 있을 시간적 여유가 없었습니다. 사실 시간보다는 새로운 분야를 시도한다는 것에 대한 부담감 때문이었지만요. 이 부담감은 이달 중순까지는 계속될 것 같네요.

    그리고 그 동안 틈틈히 마인크래프트 1.6에 대한 정보도 알아보고, 모드의 수정이나 개발에 대해서도 조금씩 공부하고 있었습니다. 몇가지 모드 개발자들에게 건의도 남겨보았고요.
    다만, 영어로 남겨야 하다 보니 잘 하지도 못하는 영어를 쓰느라 골치가 많이 아프더군요. 그래서 영어보다 쉬운 프로그래밍으로 방향을 바꾸려 합니다. 글을 쓰는 본인조차도 무슨 소린지 모를 언어로 이상한 글을 쓰느라 고생하느니 차라리 친숙한 프로그래밍 언어로 모드를 만드는게 쉽다는 판단이지요…[…]

    그래서 연습 삼아 기존에 공개된 모드들과 비슷한 기능의 모드를 만들어볼까 합니다. 물론 라이센스 문제 없는 소스코드가 공개된 모드를 많이 참고하긴 하겠지만요. 그리고 어느정도 준비가 되었다면 제대로된 모드 개발에 도전할 생각입니다.

    혹시 마인크래프트 모드에 대한 좋은 아이디어가 있으시거나 개발에 관심이 있으신 분은 댓글을 남겨주세요. 특히 제가 할 줄 아는게 프로그래밍 뿐이다 보니 그래픽이나 3D 모델링, 사운드 쪽은 무척이나 취약합니다…[;;;] 다만, 저도 이제 막 시작하려는 초보자이니 모드 개발 가르쳐주세요 등은 심히 곤란합니다.

  2. 몇일 저도 잠수타보니 글이 올라와있었군요
    저도 모드개발을 생각만이라도 해본적이 있어서 아이디어가 하나 있습니다!
    제 아이디어는 나무가 광합성을 해서 식물에너지를 만드는 건데요 필자님이 혹시 더 들어보고 싶으면 그때 댓글 다시한번 달아드리겠습니다.

  3. 오, 기존에 본 적이 없는 참신한 아이디어네요.
    다만, 무한 에너지 계열이 될 듯 하니 밸런스 조절이 쉽지는 않겠습니다. ^^

    • 음 무한에너지라는게 되버리네요.
      하지만 제가 생각하는게 좀 있어서 무한에너지를 좀 막을수있습니다.
      평범한 나무는 묘목을 심고 뼛가루 뿌리면 끝이지만 이 나무는 직접 나무 원목과 잎을 조합으로 만들어야합니다. 그리고 뿌리도 직접 만들어야하고요 그리고 조합이 완료된 나무원목이나 뿌리 그리고 잎들은 플레이어가 직접 블록처럼 놓아야합니다.
      한마디로 모양이나 크기는 자유이죠. 이말은 즉슨 나무속에서도 살수있다는 말이 됩니다
      그리고 잎은 여러종류가있는데 종류별로 광합성량이 다르고 광합성이 완료되면 나무 원목에 추출기?처럼 된걸로 포도당 형태로 빼냅니다.
      이 포도당 형태로 된것은 필자님이 제작한 기계로 돌려 BC에너지나 IC에너지 혹은 필자님이 새로운 전기 형태를 만드시면 좋은거같네요
      그리고 원목에는 주변에는 버프효과를 걸어주는 사기 원목도….필요없겠군요
      그리고 나무를 유지할려면 거름과 물이 지속적으로 필요한데 크면 클수록 더 많이 필요하니 어찌보면 무한발전을 막을수있겠죠?
      아 그리고 나무뿌리와 원목 그리고 잎의 갯수도 비율도 있으면 좋을것같네요

      너무 어려운가요?ㅋㅋ

    • 거름이나 물을 소모하는 형태라면 양동이나 아이템을 들고 우클릭을 하거나, 파이프등을 연결해야 할텐데 전자는 꽤나 번거로울 듯 하고 후자는 나무가 아니라 기계가 되어버릴것 같네요…[;;;]
      아니면 뿌리 대신에 나무를 관리(?)하고 포도당을 추출하는 기계가 들어간다는 설정도 가능하겠네요.
      그 외에 어떤식으로 배치를 하면 어느정도 효율이 나오는가 등도 고민을 해봐야 할 듯 합니다.

      • 직접 배치를 한다면 멀티 블럭 장비들과 비슷한 구조를 갖게 될겁니다.
        그렇다면 천편일률적인 형태보다는 IC2의 원자로 구성 같은것처럼 블럭을 배치하는 형태에 따라
        이득(생산량)이나 손해(소모 자원)등을 바꿀 수 있다면 좀 더 재미있지 않을까요?

      • 단순히 블록을 만들고 그 안에 기능을 부여하는 것 정도는 어렵지 않습니다.
        이게 외부의 아이템이나 몹 등과 연계가 되어야 한다면 어렵겠지만요.
        기능 부분도 게임 내의 처리 시간 제약이 있어서 복잡한 기능은 넣지도 못합니다.
        그래서 제한된 조건 안에서 최대한 재미있는 기능을 넣어야 한다는 점이 가장 어려운 문제이지요.

        즉, 최대 난관은 창의력, 아이디어 입니다…[제가 가장 부족한 부분이기도 하죠…;;;]
        물론 넣으려는 기능이 게임상의 제약을 넘어서는 안된다는 점을 고려해야 하겠고요.
        이 문제만 해결된다면 새로운 블록을 만드는 정도의 모드 개발은 어렵지 않습니다.

        멀티 블록 장비(레일크래프트의 탱크 같은)로 간다고 해도 실제 기능을 갖는건 블록 1개 정도고
        나머지는 주어진 조건에 맞춰서 배치되어 있는가를 체크하는 정도만 합니다.
        그레그테크의 멀티 블록은 정말로 배치 여부만 확인하기에 머신 케이징을 여러 장비가 공유하기도 하고요.

    • 지금은 한글 입력기 모드를 만들고 있습니다.
      게임 관련을 먼저 할까 했는데 친구가 한글 입력부터 되어야 하지 않겠냐고 해서
      이쪽을 우선하고 있습니다

      기존에 공개된 한글 입력(한글 채팅) 모드들도 두가지 정도 있긴 하지만
      둘 다 포지를 쓰지 않고 만들어진 모드들이라 포지와 같이 쓰는게 조금 어렵더군요.
      그리고 포지가 업데이트 될 경우 제대로 동작할지 보장도 할 수 없고요.

      그래서 포지를 기반으로한 한글 입력기 모드를 만들었습니다.
      현재 동작 자체는 정상적으로 하고 있고, 조금만 더 정리하면 공개할 수 있을 듯 합니다.
      정리가 다 끝나면 NEI에 적용할 방법이 있는지도 한번 찾아볼까 합니다.
      NEI 까지만 되면 한글로 게임을 하는데 불편함이 없을테니까요.

      한글 입력 부분이 끝나면 다음으로 써멀 익스팬션의 몇가지 기계들을 만들어볼까 합니다.
      빌드크래프트나 인더스트리얼 크래프트 2, 레일크래프트 등은 1.6.2용으로 나오고 있는데
      써멀 익스팬션만 소식이 없네요. (한간에는 제작자가 포기했다는 이야기도 있고)
      그래서 써멀에서 유용하게 썼던 몇가지 기계들을 추가하는 모드를 생각해보고 있습니다.
      최종 목표로는 다른 모드들이 필요 없을 정도로 다 갖춘 모드를 꿈꾸기는 하지만요.

댓글이 닫혀있습니다.