Z-80으로 간단한 컴퓨터 만들기 7

 5.4. 메모리 쓰기 시험 프로그램 수행시 메모리에 데이터가 잘 써지는지 확인하기 위한 시험을 수행하고, 그 결과를 확인한다. 프로그램은 앞에 작성한 것에서 레지스터 A에 있는 데이터를 메모리의 임의의 어드레스에 쓰도록 다음 한 출을 추가하여 작성한다.  LOOP      IN A, (0)           : 0번 입력장치에서 데이터를 가져와 reg A에 넣는다.       OUT (0), A : reg A의 데이터를 0번 출력장치로 출력한다.      LD (0010), A : reg A의 데이터를 메모리 어드레스 0010에 써 넣는다.      JP LOOP           : LOOP 로 Jump. 무한 루프 수행 위의 프로그램을 Machine Language로 변환하면 다음과 같다. LOOP      IN A, (0)           0000      DB 00      OUT (0), A 0002      D3 00      LD (0010), A 0004      32 10 00      JP LOOP           0007      C3 00 00           000A 위의 프로그램을 5.3 절에 나타낸 절차에 따라 메모리에 입력...

Z-80으로 간단한 컴퓨터 만들기 6

이미지
 5.2. Assembly 언어 이제 프로그램을 작성하여 프로그램을 메모리에 써넣고, 시험을 수행하여야 한다. 프로그램을 작성하기 위해 먼저 Z80내부 레지스터들과 Assembly 언어에 대해 간략히 살펴본다. Z80 내부 레지스터는 그림 18에 나타내었다.  그림 18  Z80 내부 레지스터 내부 레지스터 중에 A는 Accumulator로 사용되는 레지스터로 CPU가 연산을 수행 했을 때 주로 그 결과는 A에 저장되게 되고, F는 Flag 레지스터로 연산의 결과에 대한 상태를 나타낸다, 여기서 상태라는 것은 연산 결과가 0인지를 나타내는 Zero Flag, 결과가 +인지 –인지를 나타내는 Sign Flag등이 있어서 연산의 결과에 따라 프로그램을 수행할 때 확인할 수 있는 레지스터이다. B, C, D, E, H, L 레지스터는 일반적으로 임시로 데이터를 저장하기 위해 쓰이는 레지스터이다. 그리고 16비트로 구성된 레지스터가 4개 있는데 그중에 IX, IY는 주소를 참조할 때 주로 쓰이는 레지스터이고, SP는 Stack을 지정할 때 쓰는 레지스터, PC는 현재 프로그램이 수행되고 있는 현재의 어드레스를 저장하고 있는 레지스터이다. 여기서 Stack은 프로그램 수행시 sub routine을 호출할 때 현재의 PC와 주요 레지스터들을 저장하고 다시 원래의 프로그램으로 돌아갈 때 원래의 레지스터 값을 복원하기 위해 사용되는 레지스터로 sub routine이 호출되면 PC는 자동으로 Stack에 저장되고, 이 외 사용자가 저장을 한 레지스터를 Stack에 저장한다. 그리고 Sub routine이 모두 수행되고 나면 사용자는 Stack에 저장된 레지스터를 복원하고, 원래의 프로그램으로 복귀하여야 한다. 원래의 프로그램으로 복귀할 때 CPU는 Stack에 저장된 PC가 지정하는 주소로 돌아간다. Assembly 언어는 이 레지스터들과 메모리를 관리하면서 프로그램의 구성하여야 한다. Assembly 언어는 OP Code와 Operand로 구성된다...

Z80으로 간단한 컴퓨터 만들기 5

5. 시험 보드 조립이 완료되면 회로도대로 보드 조립이 되었는지 꼼꼼히 확인하고 각 구성부를 시험하기 위한 프로그램을 작성하여 프로그램은 메모리에 입력하고 프로그램을 수행하여 정상적으로 프로그램이 수행되는지 확인하여야 한다. 프로그램을 작성하기 위해서는 Z80 데이터 시트에 나오는 Assembly 언어를 이용하여 프로그램을 작성하고, 이를 다시 Machine언어인 2진수로 변환하여 메모리에 써 넣고 프로그램을 수행시켜야 한다. 5.1. 메모리 쓰기 시험 우선 어드레스 스위치와 데이터 스위치를 이용하여 메모리에 데이터가 써지는지 확인하여본다. 메모리에 데이터를 써넣는 과정은 다음과 같다. ① 보드에 전원을 인가하여 전원 LED가 점등되는지 확인한다. ② BUSRQ SW(SW2)를 ON 한다. ③ 어드레스 스위치를 변경하면서 데이터 LED에 어떤 변화가 있는지 확인한다.  - 이때는 메모리에 저장되어 있는 데이터 값에 따라 LED가 점등되거나 소등되어야 한다. ④ 데이터 스위치를 원하는 값으로 설정하고 쓰기 스위치(SW21)을 눌러서 데이터 LED가 데이터 스위치 값에 따라 점등 또는 소등되는지 확인한다.  - 이때는 데이터 스위치에 설정한 값이 메모리에 써지고 다시 출력 LED부로 출력되어야 한다. ⑤ 어드레스 스위치를 변경하고 절차 4와 같이 데이터를 입력하여 데이터가 출력되는지 확인한다. ⑥ 어드레스 스위치를 절차 4에서 입력하였던 어드레스로 변경하여 절차 4에서 입력하였던 데이터가 출력되는지 확인한다. ⑦ 어드레스 스위치를 절차 5에서 입력하였던 어드레스로 변경하여 절차 5에서 입력하였던 데이터가 출력되는지 확인한다. ⑧ 절차 4에서 7의 과정을 반복하면서 여러 부분의 어드레스에 데이터가 정상적으로 써지고 출력되는지 확인한다.

Z80으로 간단한 컴퓨터 만들기 4

이미지
 4.  제작 설계된 전체 회로도는 그림 15~17 에 나타내었다 . 제작은 만능보드 (Univeral Board) 에 토글 스위치를 고정하기 위한 구멍을 아래쪽에 16 개 , 위쪽에 1 개 뚫어 토글스위치를 고정하고 , IC 를 꽂기 위한 Socket 을 사용하여 보드를 구성하였다 . IC Socket 은 wrapping wire 를 사용하기 위한 socket 을 사용하였고 배선은 wrapping wire 를 이용하여 구성하였다 . 완성된 보드는 그림 18~19 에 나타내었다 .   그림 15 회로도 1 그림 16 회로도 2 그림 17 회로도 3 그림 18 완성된 보드 전면 그림 19 완성된 보드 후면

Z80으로 간단한 컴퓨터 만들기 3

이미지
3.  설계 3.1 전원장치 전원은 5VDC 에 1A 이상의 전류를 출력할 수 있는 전원장치를 사용하면 되는데 , 구매하거나 설계할 수도 있겠지만 스마트폰 충전기가 대부부분 5VDC 를 출력하기 때문에 남는 스마트폰 충전기를 사용한다 .   3.2 입력스위치 설계 입력장치는 메모리에 프로그램을 직접 써 넣기 위해 Address 입력 스위치 , 데이터 입력 스위치를 가각 8 개씩 toggle switch 로 연결한다 . 스위치가 연결되면 GND 와 연결되어 버퍼의 입력이 0 이 되고 스위치가 끊어지면 버퍼의 입력이 1 이 되도록 하였고 , CPU 의 BUSACK 신호가 LOW 이면 어드레스 버스를 입력 스위치에 의해 제어한다 . 어드레스 버스의 하위 비트는 수시로 변경하여야 하기 때문에 Toggle Switch 를 사용하고 , 상위 7 비트는 수시로 바꾸지 않아도 될 것이기 때문에 조금 번거롭지만 DIP 스위치를 이용한다 . 그림 10. Address 입력 스위치 데이터 입력 스위치도 Toggle Switch 8 개로 구성한다 . 그런데 , 데이터 버스는 어드레스 버스와 달리 버스에 데이터가 입력되도록 하는 시점을 고려하여 버퍼를 제어하는 신호를 조금 달리 하여야 한다 . 데이터 스위치의 용도를 프로그램 수행시 입력장치로도 사용하고 , SRAM 에 데이터를 써 넣을 때도 입력장치로 사용할 것이다 . 따라서 , CPU 에서 IO 장치를 읽을 때도 데이터 스위치의 상태를 데이터 버스로 전달되도록 하여야 하고 , SRAM 에 데이터를 써 넣을 때도 데이터 스위치의 상태가 데이터 버스로 전달되도록 하여야 한다 . 즉 , BUSREQB 가 LOW 일때는 Write 스위치가 LOW 일 때 버퍼가 연결되어야 하고 , BUSREQB 가 HIGH 일 때는 IORQB 와 RDB 가 모두 LOW 일 때 버퍼가 연결되어야 한다 . 이러한 조건을 만족시키기 위해 논리회로를 구성하여 버퍼 Enable 신호를 생성하여 버퍼를 제어하여야 한다 . 그러나 본고에서는 ...