· 한글 디스플레이 v0.2
· 한글 디스플레이 v0.3
· 한글 디스플레이 v0.4
· 한글 디스플레이 v1.0
· 한글 디스플레이 번외편
· 한글디스플레이 1.0.1
· 한글 디스플레이 v1.1
반년 넘게 구상만 하던건데 그 사이에 회로스킬이 좀 더 늘어서 무사히 구현에 성공했다
한글 IME는 생각보다 고려해야할 점이 정말 많다
예를 들어 "고" 라는 글자가 입력된 상태라고 생각해보자
만약 "ㄹ"을 입력하면 "골" 이되어야한다. 받침이 추가 되었고 아직 글자 완성이 덜 되어서 깜빡거리는 상태
만약 "ㅜ"를 입력하면 "고ㅜ"가 되어야 한다. "고"자체는 글자가 확정이 된 상태
만약 "ㅏ"를 입력하면 "과"가 되어야한다. 이중모음이 추가되었고 아직 글자 완성이 덜 되어서 깜빡거리는 상태
만약 "ㅃ"를 입력하면 "고ㅃ"이 되어야한다. ㅃ는 받침으로 쓸수 없기 때문. "고"자체는 글자가 확정이 된 상태
만약 아무것도 입력하지 않으면 계속 "고"상태를 유지해야한다.
만약 백스페이스를 누르면 "ㄱ"으로 돌아가야 한다.
만약 엔터 스페이스 한/영키 등등 한글이 아닌 문자가 오면 "고"를 확정짓고 출력으로 내보내야한다.
이런식으로 입력 종류에 따라 고려해야하는 조건이 무진장 많다
그래서...
어떤 상태일떄 어떤 입력이 들어오면 어떤 상태로 전환할지 전부 state table을 작성해준다..
그리고 합칠수 있는 조건들은 최대한 합쳐서 최대한 조건을 간결하게 처리할 수 있도록 해준다
이건 조건을 정리한 후의 첫번째 초성에 대한 state table이다
출력이 A인 경우는 현재 첫 초성을 그대로 보존해야 한다는 뜻이다
출력이 C인 경우는 첫종성을 새로운 첫초성으로 바꿔야한다는 뜻이다
출력이 CC인 경우는 두번째 종성을 새로운 첫초성으로 바꿔야한다는 뜻이다
출력이 D인 경우는 새로 들어온 초성 코드를 사용한다는 뜻이다
아무래도 첫초성이 가장 복잡한 경우고, 나머지 파츠들은 테이블이 이것보단 훨씬 간단하게 나오긴 한다. 물론 그래도 복잡하다..
테이블이 작성되었으니 이걸 청사진으로 만들어야 하는데 저 조건을 하나하나 비교조합기로 세팅할 수는 없는 노릇이다.
하나하나 세팅하면 수시간이 걸릴 것이고, 그것도 휴먼미스가 엄청나게 들어가서 정상적으로 동작하는것을 기대하기는 쉽지 않을 것이다
엑셀수식으로 마법을 부려서 청사진으로 전환가능한 JSON문자열을 뽑아내도록 한다
엄...
이제 저 청사진 문자열을 게임으로 옮긴다
손으로 했었다면 수명이 훨씬 줄어들었을것이 분명하다
이렇게 초성1에 대한 조합기를 하나 만들었으니 같은 작업을 초성2,중성1,중성2,종성1,종성2에대해서도 반복해주고
글자가 확정이 났을 경우 출력을 처리하는 조합기도 비슷하게 만들어준다
잘 입력되고 있는지 확인하기 위해 디스플레이도 설치한다
현재 신호가 무엇인지 확인하고 그에 맞는 자음또는 모음을 나타내준다
왼쪽에 숫자로 뜨는것은 현재 6개의 상태에 대해서 어떤 값의 상태인지를 보여주고 있다
ㄱ은 1, ㅗ는 39, ㄴ는 9, ㅅ는 21에 해당한다
백스페이스도 구현해놨기 때문에 아직 입력 도중이라면 지우는 것이 가능하다
확정된 글자까지 지우는건 아직 미구현. 이건 앞으로의 과제로 남아있다
한편 기껏 키보드를 만들었는데 이걸 이렇게 초성중성종성 다 분리해서 디스플레이로만 보는것은 뭔가 아쉽다
이제 이 출력을 한글 디스플레이로 연결할 시간이다
입력되는 6종상태의 꼴을 보고 그에 맞는 유니코드 값을 출력해주는 회로다
초성과 중성이 둘다 있으면 완전한 글자이므로 44032를 출력한다("가"의 유니코드가 44032부터 시작)
초성이 ㄱ이면 0, ㄲ이면 588, ㄴ이면 1176, ... ㅎ이면 10584를 출력한다(19종)
중성이 ㅏ이면 0, ㅐ이면28, ㅑ이면 56, ... ㅣ이면 20을 출력한다(21종)
종성이 없으면 0, ㄱ이면1, ㄲ이면 2, ... ㅎ이면 30을 출력한다(28종)
초성과 중성 중에 하나라도 없으면 불완전한 글자이므로 12592를 출력한다("ㄱ"의 유니코드가 12593부터 시작)
입력된 초성 또는 중성을 보고 값을 출력한다
ㄱ이면 1, ㄲ이면2, ㄳ이면 3,... ㅎ이면 30
ㅏ이면 31, ㅐ이면32, ㅑ이면 33, ... ㅣ이면 51 (51종)
초성이 참.. 초성에서못쓰는 글자도있고(ㄳㄵㄶㄺㄻㄼㄽㄾㄿㅀㅄ) 종성에서 못쓰는 글자도(ㄸㅃㅉ) 있다보니 룩업테이블 만들기가 번거로웠다
아무튼 유니코드의 형태로 변환까지 했으니 한글디스플레이의 입력으로 꼽아주면 된다
아주 만족스럽다
이제 다음 단계는 한글 입력 뿐만이 아니라 영어, 숫자, 기본 기호까지 입력할 수 있는 키보드로 발전 시키는것...
이건 사실 키보드보단 디스플레이쪽이 조금 더 걱정이다
한글은 전각문자다봐니 글자가 뚱뚱해서 정사각형의 고정폭으로 처리하면 되는데 영숫자는 반각이라 절반 두께로 처리를 처리해야해서 그에 따른 귀찮음이 따른다
그것도 그것지만 폰트 구해다가 게임속에서 불러오는 작업쪽 또한 그것대로 귀찮긴 하다
ㄷㄷㄷ 개쩔어
저 많은 논리식 조합기 하나에 다 때려박아지는거 소름이네 그리고 구현 자체보다 규칙테이블 짜는게 더 대단한듯
@로그에이전트 회로2.0아니면 진짜 엄두도 안났을듯ㅋㅋ 옛날 회로 시스템으로도 뭐 어떻게든 구현을 하려면 하겠지만 적어도 지금처럼 1틱당 1입력을 쉬지않고 처리가능한 스펙으로는 절대 구현 못했을것 같아
영어도 고정폭 폰트 있음. 주로 코딩에 쓰는 폰트가 고정폭임, 마침 걔네들도 비트맵으로 있을듯
ㅇㅇ 고정폭 폰트쓰긴할건데 그럼에도 불구하고 한글이랑 폭이 달라서 그럼 ㅋㅋ
이렇게 된 이상 볼드체로 써서 한글 폭에 맞추삼ㅋㅋㅋ
ㅁ쳤네 ㅋㅋㅋㅋㅋㅋㅋㅋ 20년전에 비주얼베이직으로 한글 초중종성 나누는거 어쩌구 했던거 생각난다 JSON이 사기네
조립은 분해의 역순이라지만 한글은 너무 어렵다!
이제 텍스트 편집기가 만들어졌으니 ide도 만들어주세요
게이특: IDE로 개발함 상남자특: VIM으로 개발함
@이파 하지만 vim에 플러그인 붙으면 ide랑 똑같은걸...
@ㅇㅇ GUI가 아니라 CLI인게 좀 차별점이긴 하지 지난번에 CPU만든 그 양덕 정도 되면 진짜 vim정도는 돌릴려면 돌릴수 있을듯
@이파 그러고보니까 cpu 만든 놈이 있었네 진짜 vim 나오는거 아닌가 몰라
선생님 게임을 가지고 왜 연구를 하십니까 ㅠ.ㅠ 좀 쉬면서 하세요 ㅠ.ㅠ
이게 쉬는거래!
나랑 다른 게임을 하네ㅋㅋㅋ
이... 뭔
끝 <- 감다살 ㅋㅋ