토요일, 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 컴파일러까지 마련됬다. 이제 칩을 만들어야 겠다[만드는 중... 바로가기]. 그전에 내려간 체쯩을 처리하러 화장실에 다녀와야 겠지.

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



댓글 없음:

댓글 쓰기