Welcome to My World (www.dgmayor.com)

분류 전체보기 376

8. PCB 설계 방법

PCB(Printed Circuit Board)는 제품에 특정한 기능을 부여하기 위해 반도체를 비롯해 다양한 부품을 하나의 판 위에 모아놓은 인쇄회로기판입니다. 부품이나 배선 등이 워낙 복잡하게 얽혀있다 보니 무턱대고 만들기에 앞서 철저한 설계 과정이 필수적입니다. 본격적인 제조, 건축에 들어가기에 앞서 '설계'를 우선적으로 해야한다는 점에서 집짓기와 비슷하다고 할 수 있습니다. 집을 짓기 위해선 먼저 '어떤 집'을 지을지에 대한 큰 그림을 그려놓는 작업이 필요합니다. 평수는 어느 정도로 할 것인지, 방은 몇 개로 할 건지, 방마다 창문은 몇 개씩 배치할 것인지, 층과 층 사이를 연결하는 계단은 어느 곳에 위치시킬 것인지 등등 전체적인 구조가 짜여야만 삽을 들지 포크레인을 부를지도 결정할 수 있겠죠. 창..

C언어 구글 공룡 게임

안녕하세요. BlockDMask 입니다. C언어나 C++을 책만보고 공부만하면 재미가 없잖아요. 그래서 제가 간단한 게임을 만들어서 소개해보려 합니다. 제가 만든 게임이 게임성이 없는 프로그램 일 수 있습니다. 순전히 예제, 연습용 게임들이니 너그럽게 이해해주시면 감사하겠습니다. 오늘은 "C/C++로 게임을 만들어보자" 그 첫번째 게임인 "구글 공룡 게임"을 만들어 보았습니다. 사실 게임이라고 하기도 좀 그런게, 충돌판정이나 게임오버 점수주기 이런게 아무것도 없이, 캐릭터 움직임, 점프, 장애물 이동하기 이 세개만 만들어 보았습니다. 이영상을 통해서 "아 C/C++을 이용해서 이렇게 간단히 게임을 만들 수 있구나"를 보여드리고 싶었습니다. 1. 게임 이름 및 설명 2. 게임영상 3. C언어 구글 게임 소..

22. 실질 퇴사 22.6.30, 22.9.30 법적퇴사

21년 10월 1일 입사 ~ 22년 6월 30일까지 근무... 대신 9월 30일까지 법적으로는 재택 근무를 하는 것으로 하여 경력 1년의 개발자로 취업을 할 수 있게끔 현 대표님이 만들어 주었다. (뭐... 사람 등신으로 만들어서 자진 퇴사 시키는 게 심적, 법적 부담감이 들었을 수도 있고... 좋은 뜻이었을 수도 있고.... 뭐... 솔직히 말하면 다른 거 들어 올 때는 좋게 생각했는데.... 근태 체크 들어 올 때는 이게 맞다는 생각이 들었다. 뭐 어떤 개발자 놈은 감사하며 다니라는데.... 나는 다른 업무도 아니고.... 최소한 개발자가 이런 걸로 평가를 받는 건 아니라는 생각이 들었다. 말로 해야지 이걸 문서로 주는 것은 아니라는 생각이 너무 들어서..... 뭐 그래서 혈압이 올라 개발자 방에서도..

21. 부트 스트랩 정리

이전 포스팅에서는 환경설정에 대해서 다루었다면 지금 포스팅부터는 OS를 직접 만드는 것에 초첨을 마추고 글을 작성하도록 하겠다. 가장 처음 컴퓨터가 부팅되고 난 뒤에 POST(Power On Self Test)과정을 거쳐 특정 OS 파일에서 첫 512바이트트만큼을 가져온다. 여기서 가장 먼저 실행되는 코드라고 하는데 이를 만들고 알아보도록 하자. 부트과정 처음 컴퓨터에 전원이 들어와서 부팅과정을 거치는데 이를 부트스트랩이라고 한다. 부트스트랩은 장화(boot)의 끈(strap)을 묶고 일어나려는 사람을 가르키기도 하며 그 과정은 아래와 같다. 이 포스팅에서 직접 수정하고 테스트 할 부분은 Step 3 이후에 로드된 MBR(Master Boot Record)이다. 3.20 전산대란이 일어났을 때나 특정 악..

20. 하드디스크 드라이버 쓰기

https://github.com/SIMHANGSUB/HoGoS/tree/master/20 20강 소스코드입니다. -------------------------------------------------------------------------------- 안녕하세요 오늘은 하드디스크에 쓰는 함수를 구현해봅시다. 논리는 하드디스크를 읽었을 때와 똑같습니다. 다른 점은 하드디스크에 내릴 명령이 읽기(0x20) 이 아니라 쓰기(0x30)인 점, 그리고 쓸 때 명령어 "rep outsw " 를 사용할 것이라는 점입니다. 바로 코드를 봅시다. 19강에 짰던 코드와 거의 차이가 없음을 알 수 있을 겁니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..

19. 하드디스크 드라이버 읽기

https://github.com/SIMHANGSUB/HoGoS/tree/master/19 19강 소스코드입니다. -------------------------------------------------------------------------------- 안녕하세요 Qemu 환경으로도 옮겼겠다 이제 하드디스크 드라이버를 구현하는 일밖에 없습니다. 미리 말했듯이 처음 보면 굉장히 난해합니다. 따라서 드라이버 구현을 몇 단계로 나누어 포스팅할 생각입니다. 17강에서 언급했던 흐름을 그대로 코드 구현할 겁니다. 일일이 주석을 달았으니 시간을 가지고 음미하시기 바랍니다(?) 먼저 오래전에 구현했던 Interrupt.c 코드에서 90 ~ 100 줄에 해당하는 소스를 다음과 같이 수정합시다. 1 2 3 4 5 ..

18. 하드디스크 드라이버 - Q Menu

안녕하세요 저번 강의에서 예고했듯이 Qemu라는 가상환경을 설치해보겠습니다. https://www.qemu.org/download/#windows 공식 링크로 들어가 최신 버전을 다운받읍시다. 자신의 윈도우 운영체제가 32비트 / 64비트에 따라 설치합니다. 설치를 완료하면 qemu 폴더를 찾아가봅시다. 그리고 다음과 같이 커맨드창을 띄워 입력합시다( ​Qemu 폴더 안에서 실행해야 합니다 !! ) "qemu-img create hdd.img 1M" ​말 그대로 1MB짜리 hdd.img 파일을 생성하는 명령어입니다. 이렇게 간단한 명령어 한 줄로 하드디스크를 만들었습니다. 이젠 이 하드디스크를 우리의 가상컴퓨터에 마운트(끼우는) 작업을 해야겠죠? 이는 가상컴퓨터를 실행하는 동시에 마운트도 같이 할 겁니다..

17. 하드디스크 드라이버

오늘은 대망의 파일시스템 그 첫 번째 챕터입니다. 파일시스템을 위해서는 하드디스크를 읽고 쓸 줄 알아야겠죠? 우린 이미 첫 강의때 Real Mode 상에서 지원하는 인터럽트 13으로 플로피디스크를 읽어본 경험이 있습니다. 그런데 슬프게도... 우리는 Real Mode 16비트 환경에서 Protected Mode 32비트 환경으로 넘어왔습니다. 이 32비트 환경에서 더 이상 인터럽트 13 으로 디스크를 읽지 못합니다. 대신 I/O 레지스터 프로그래밍을 통해 하드디스크에 직접 명령을 내리는 수 밖에 없습니다. 이번 포스트에서는 어떤 i/o 레지스터에 명령을 내려야 하드디스크를 읽고 쓸 수 있는지 분석해볼겁니다. 그리고 다음 포스트부터 본격적으로 이를 구현해볼 겁니다. https://wiki.osdev.org..

16. 기초적인 쉘

https://github.com/SIMHANGSUB/HoGoS/tree/master/16 16강 소스코드입니다. -------------------------------------------------------------------------------- 오늘은 Shell 을 만들어봅시다! Shell을 만드는 궁극적인 목적은 사용자로부터 명령어를 입력받아 처리하기 위함입니다. 키보드 드라이버를 저번 강의 때 구현했기 때문에, Shell은 이를 이용하기만 하면 됩니다. 따라서 어떤 방식으로 구현하던지 상관이 없겠죠? 아래의 코드를 참고로 자신만의 Shell을 만들어봅시다. 코드를 수정하기에 앞서 다음과 같이 shell.h와 shell.c 를 추가합시다. ( 새로 만들었으니 당연히 makefile 에 추..

15. 인터럽트 - 키보드 드라이버 2

https://github.com/SIMHANGSUB/HoGoS/tree/master/14 14 ~ 15 강 소스코드입니다. -------------------------------------------------------------------------------- 자 저번 강의에 이어서 ScanCode를 아스키코드로 바꾸는 작업을 진행해봅시다. interrupt.h에 다음과 같은 함수를 하나 선언해줍시다. ( ScanCode가 담긴 char 형을 받아 아스키값을 리턴해줄겁니다. ) unsigned char transScan(unsigned char); 그리고 이 함수를 interrupt.c 에 다음과 같이 구현해봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18..

14. 인터럽트 - 키보드 드라이버 1

https://github.com/SIMHANGSUB/HoGoS/tree/master/14 14 ~ 15 강 소스코드입니다. -------------------------------------------------------------------------------- 자! 오늘은 키보드 드라이버를 구현해봅시다! 저번 강의를 통해 우리는 키보드 인터럽트를 받을 수 있게 되었습니다. 그렇다면 이제 어떤 키를 눌렀는지를 알아봐야겠죠? interrupt.c 에 들어가서 버퍼용 전역변수를 하나 선언합시다. 여기에 어떤 문자를 입력했는지 저장할 겁니다. unsigned char keybuf; 그리고, init_intdesc() 함수 끝에 다음과 같은 어셈블리 코드를 추가합시다. 이는 키보드 입력을 받겠다는 일종의..