토요일, 1월 13, 2024

6502 프로젝트, 40년 묵은 체증이 내려갔다.

6502 프로젝트, 40년 묵은 체증이 내려갔다.

처음 컴퓨터라는 물건을 가져본게 아마 40년 전일 게다. 한창 Apple ][ 복제품이 세운상가를 휩쓸고 골목마다 전산학원이 생겨났다. 앞으로 컴퓨터 시대가 올텐데 모르면 사회생활을 못하거라는 협박아닌 협박에 너도나도 뒤쳐지지 않으려고 BASIC이라는 것을 배운다고 애쓰던 시절이었다.

전산개론이라는 과목이 있었는데 이공계용 전산이라면서 포트란을 가르쳤다. 그런데 학교에는 정작 실습을 해볼만한 컴퓨터가 없었다! 이과대 학생들에게는 개방하지 않았던 걸지도 모른다. 과제를 제출해야 하는데 할 수 없이 다른 학교 전산실이 개방된다는 말을 듣고 찾아가서 억지로 부탁해가며 코딩 숙제를 제출 했다. 집에 있던 Apple ][는 BASIC 이라는 것만 돌릴 수 있다고 했다. 이런 부조화가 또 없었다.

부전공으로 전자공학을 선택하고 마이크로 프로세서라는 과목을 수강했다. 어셈블리 언어라는 것을 배웠다. 학교에는 여전히 실습할 컴퓨터가 있는지 없는지 몰랐다. 아니면 타과 학생에게는 보여주지 않는 것이었을까? 집에있던 컴퓨터는 2년째 게임기로 잘 쓰고 있는 중이었다. CP/M 카드라는 것을 끼워 학교에서 배운 Z-80 마이크로 컨트롤러의 어셈블리 언어 실습을 할 수 있었다. 과제는 그것으로 겨우 수행 할 수 있었다. 발전이라면 발전이라고 할만 했다.

그리고 대학을 졸업할 때 쯤 C 언어가 세상을 바꿀거라는 이야길 듣게 됐다. 한마디로 신기했다. C 컴파일러를 어떻게 한번 써보겠다고 수소문 해봤지만 그게 뭐냐는 답만 돌아올 뿐이었다. 그렇게 나의 Apple ][ 시대는 게임기로 끝났다.

그후 어찌어찌 하여 컴퓨터를 쓰며 40년이 흘렀다. 컴퓨터에 관한한 척보면 아는 지경에 이르럿다. 그리고 얼마전 부터 우연한 학생들을 가르칠 기회가 생겼다. 반도체 설계를 가르쳐 달라기에 예제로 쓸만한 베릴로그 설계를 둘러보다가 6502가 나왔다. Apple 컴퓨터의 그 6502가 맞다!

6502의 베릴로그와 C++를 합쳐서 시뮬레이터를 만들어서 Apple-1의 워즈니악 모니터를 얹었더니 잘 돈다. 어셈블러를 찾았다. 역시 잘된다. 그간 짬밥이 있는데 이쯤이야! 순간 40년전의 답답함이 떠오른다.

|<--------System Level Testbench-------->|<---IPC--->|<---I/O Dev-->|
                                          (named PIPE)  Interactive
+----------+  +-------------------------+
| 6502 CPU |  | sc_mem.h (
SystemC)      |            +--------------+
| (Verilog)|  |    +----------------+   |            a1_diaplay   |
|          |  |   0000   (RAM)      |   |            +--------------+
|          |  |    |...-------------+   |            |\             |
|          |  |    |     (PIA I/O)  |   |            |0:A9 00 AA .. |
|         <<DI<<  D011    weite(...)~~~~~~[FIFO]~~~~>|_             |
|          |  |    |                |   display.pipe |              |
|         >>DO>>  D012 KBD_Buf[]    |   |            +--------------+
|          |  |    |      |         |   |            +-------------+
|         >>AB>>   |    +-PThread---.-+ |            | a1_keyboard |
|          |  |    |    | thread_kbd()| |            +-------------+
|         >>WE>>   |    |   read(...)<~~~~[FIFO]~~~~~|:_           |
|          |  |    |    |             |keyboard.fifo |             |
|       <<clk |    |    +-----------.-+ |            +-------------+
+----------+  |    |                |   |
+-----------+ |    |                |   | +----+      Interactive
|        >clk>>   FF00--------------+   | |    |    Dynamic Stimulus
|           | |    |  Woz. Monitor  |   | |    |
|           | |    |    ...(ROM)... |   | |    |
|           | |   FFFE Reset Vector |   | |    |
|           | |    +----------------+   | |    |
|           | +-------------------------+ |    |
|           +-----------------------------+    |
| sc_CPU_6502_Top.h (SystemC)                  |
+----------------------------------------------+

40년이 지났지만 사람들은 6502 라는 CPU와 Apple 라는 컴퓨터를 잊지 않고 있었다. 어셈블러는 물론 C-컴파일러도 공개 소프트웨어 목록에 있었다. 참을 수 없었다. 하지만 오픈 소스가 늘 그렇듯 않되는 것은 없지만 되는 것도 없다. 내 용도에 딱맞지 않았다. 40년 묵은 답답함을 풀어 보겠다는 투지에 하룻밤을 불태웠다. 그리고 마침내 체쯩을 밀어냈다. 화면에 C 로 작성한 프로그램이 컴파일되어 베릴로그와 SystemC/C++로 만든 Apple-1 시뮬레이터에서 "Hello World" 가 찍혔다.


    // Filename: hello_world.c
    #include "apple1.h"
    #include <stdio.h>
    #include <stdlib.h>

    void cputc(char);

    int main()
    {
        int i = 0;
        char szBuff[] = "Hello World\n";

        while(1)
        {
            if (szBuff[i])
                cputc(szBuff[i]);
            else
                break;
            i++;
        }

        return 0;
    }

6502 CPU 와 Apple-1 시뮬레이터에 어셈블러, C 컴파일러까지 마련됬다. 이제 칩을 만들어야 겠다[만드는 중... 바로가기]. 그전에 내려간 체쯩을 처리하러 화장실에 다녀와야 겠지.

묵은 체쯩을 풀어낼 기회를 만들어준 학생들에게 감사하는 마음과 함께 앞날에 축복을 빌어본다.



수요일, 1월 10, 2024

[6502 CPU Project] 누구냐? 넌!

[6502 CPU Project] 누구냐? 넌!

베릴로그로 구현한 전설의 6502 가지고 어셈블러 프로그램 짜기 놀이

ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502 [링크]

40년전 스티브 잡스와 워즈니악이 Apple-1을 발매하면서 자신들 얼굴을 문자로 프린트하는 프로그램을 만들었다길래 따라해봄.


문자로 찍힌 것만 가지고도 누군지 알아볼 만큼은 아니더라도 화면에 뭔가 나온다고 호들갑 스러운 배경음을 나도 듣고싶다! ㅎㅎㅎ


수요일, 1월 03, 2024

[양평집] 2023년 12월, 자연과 교감

[양평집] 2023년 12월, 자연과 교감

'귀촌'이라 하면 떠올리는 단어는 텃밭일 겁니다. 봄에 씨를 뿌려 놓으면 지가 알아서 눈꼽만한 씨앗에서 파릇하게 올라오는 새싹들의 모습은 신비합니다. 봄 나물, 여름채소, 가을 배추 어느하나 경이롭지 않을 수가 없습니다. 철마다 피는 꽃들은 또 어떻구요. 식물뿐만 아닙니다. 도시에 살때 전혀 생각지도 못했던 반려동물도 생겼습니다. 처음 내려왔을 때 마주친 길고양이는 쓰레기통이나 뜯는 귀찮은 존재였습니다. 고양이 입장에서 인간은 어쩌면 침입자 일수도 있었을 겁니다. 그러던 어느날 다친 새끼 고양이가 우리 마당에 서성이길래 안타까운 마음에 치료해 주었는데 그게 인연이 되어 거실냥으로 함께 살게 되었습니다. 그리고 두살이 되어 생일 파티까지 해주게 될 줄이야!

 

이 두녀석 덕에 시골 겨우살이의 무료함이 한결 가십니다. 택배 상자를 물어뜯고 방안 여기저기 털뭉치를 날려 놓는 탓에 잦은 청소기 돌리기가 귀찮습니다. 

 

그따위 귀찮음 쯤이야 곤히 잠든 모습을 보면서 얻게되는 미소에 비할수는 없습니다. 요녀석들 탓에 청소를 자주하게 되었을 뿐입니다.

 

아침 식사때마다 한입 달라며 식탁 의자를 먼저 차지하고 있으니 집사는 서서 먹는 진풍경이 벌어지기도 합니다. 커피포트를 업는 사태까지는 가지 않으니 다행입니다.

 

거실에 두녀석 말고도 마당에 눌러사는 고양이도 있습니다. 앵두는 재작년에 새끼를 세마리 낳고는 함께 마당냥이로 지내는 중이고 시도때도 없이 사료를 탐내며 테라스까지 왔다가 발소리에 혼비백산하여 도망치는 녀석에겐 노랭이라는 이름마져 붙여 주게 됐습니다.

  

아침 마당을 노랫소리로 가득 채우는 텃새들을 위해 모이대를 만들어 두었습니다. 여름에는 벌레들을 잡느라 애용을 안하더니 요즘은 모이를 먹으러 옵니다.

 

낯을 익혔는지 마당에 나서면 보채기도 합니다. 땅콩을 손바닥에 놓고 팔을 뻗으면 날아와 앉습니다. 손바닥에 내려앉은 곤줄박이 발톱의 느낌은 너무나 앙증 맞습니다. 모이를 물고가기 전에 빤히 쳐다보는 두눈을 마주하면서 자연과 교감한다는 생각을 합니다.

 

송구영신의 기분을 한껏 내보자며 창가에 등을 달았더니 요 두녀석의 바깥구경 터가 되었군요. 기독교인은 아니지만 달력의 빨간날은 그냥 지나치는 법은 없습니다.

 

멀리사는 친구가 노지감귤을 보내와서 맛있게 먹었습니다. 학교 졸업이후 만나지도 못했지만 생각해 주는 친구가 있다는 생각에 귤맛보다 달콤하군요. 겨울 감기 처방에 좋다는 핑계를 대며 뱅쇼를 끓일 때도 넣었습니다.

 

이웃이 여수에 사는 지인이 보냈다며 석화를 나눠 주셨습니다. 간식으로 호떡을 굽기도 했구요. 이런 소소한 감동과 사건들이 도시에 살았더라면 어땠을까라는 생각을 해봅니다. 아마도 나가서 사먹었겠지요.

 

아마 집에서 만들어 먹는 일이 귀찮았을 겁니다. 시골에서는 반강제로 요리를 합니다. 요리하느라 피운 불에 집안 보온과 습도 조절이 덤으로 따라옵니다. 반찬 냄새는 오히려 사람 사는 집이라는 걸 말해주는 거잖아요. 배도 채울 수 있으니 일석삼조 입니다.

 

 

모처럼 서울로 나들이 갔다가 커피를 테이크 아웃 해왔습니다. 진한 커피를 즐기는 편이라 별로 맛이 없어서 남겨 뒀더니 책상 위에서 밤새 식어 버렸더군요. 멀리가서 사온 커피가 아까워서 데웠더니 서울 맛이 나는 겁니다. 그렇게 가끔 도시의 맛이 그리울 때가 있긴 합니다.

 

겨울답게 고드름이 달리고 2023년 마지막 날에 폭설이 내렸습니다.

 

연말이면 다사다난한 한해 였다고 말하지만 많은 일이 있긴 했어도 개인사에 '난'은 없었던것 같아 한해를 보내는 마음이 한결 편합니다. 새해가 그 어느때 보다도 기대됩니다. '반도체 설계'는 지금까지 살면서 가장 많은 공을 들였었지만 그만큼 아쉬움도 많았더랬습니다. 지난 십여년은 사실 다른쪽에 한눈을 팔았었구요. 우연히 기회가 닿아서 학교에 적을 두고 학생들과 '칩 만들기'를 하게 되었는데 '대학교수'라는 직함의 특권을 누리고 있습니다. 내년에도 힘 닿는 만큼 한껏 누려보려고 합니다. 교재도 만들려고 준비하고 있구요[링크].

모두들 행복한 한 해였기를, 그리고 다시 행복한 한 해가 되시길 바랍니다.