본문 바로가기

분류 전체보기

이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/3 더보기
Microsoft Visual C++ 1.0 1993년에 출시된 Visual C++ 1.0입니다. 총 20개의 플로피 이미지로 구성되어있고 Windows 3.1에서 실행됩니다. (Windows XP에서도 사용 가능합니다.) 다만 라이브러리들이 워낙 오래되어서 지금 쓰이는 C++ 98이나 C++ 0x 같은 규격은 지원되지 않습니다. 더보기
Microsoft Windows 3.1 (한글 버전) 한글 Windows 3.1입니다. 12장의 설치 디스크와 2장의 선택 드라이버, 총 14장으로 구성되어 있습니다. MS-DOS를 먼저 설치한 후에 사용 가능하며, 현재 쓰이는 그래픽 카드 등의 하드웨어는 Windows 3.1를 위한 명령어들을 제공하지 않기 때문에 실제 컴퓨터에 직접 설치해서 사용하지는 못합니다. VMWare나 Virtual PC등의 가상PC를 사용하면 됩니다. 더보기
Microsoft MS-DOS 6.2 (한글 버전) 한글 MS-DOS 6.2 버전입니다. 총 5개의 설치 디스크로 구성되어있습니다. 설치전 파티션 작업이나 포맷 등은 bootdisk를 이용하면 됩니다. MS-DOS는 FAT 파일시스템을 사용하므로 1개의 드라이브는 최대 2GiB(=2,147,483,648 바이트)까지만 가능합니다. 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/2 더보기
C-Style의 문자열 출력 C-Style의 문자열은 끝이 \0(NULL문자)로 끝나는 문자열을 말한다. 어셈블리어에서는 긴 문자열을 별도의 변수에 보관하였다가 int 21h-02h의 반복구문을 사용하거나 문자열을 자체적으로 출력해주는 int 21h-09h를 사용할 수 있다..model small .stack 64 .data message DB "Hello, World!", 0 ; 데이터 영역에 문자열을 정의한다. .code main proc far mov ax, @data ; ax를 거쳐서 데이터영역이 시작되는 메모리 주소를 DS와 ES 레지스터에 넣는다. mov ds, ax mov es, ax mov cx, 0 main_loop: mov ax, offset message ; message라는 이름의 문자열 데이터가 @data에서.. 더보기
3벌식 키보드 사용하기 안녕하세요 tapito입니다. 오늘은 기존에 사용하던 키보드를 3벌식 키보드로 사용하는 방법을 소개하겠습니다. 3벌식 키보드란? 일반적으로 사용하는 키보드의 정식 명칭은 한글 2벌식(두벌식이라 읽음) 키보드입니다. 키보드의 영역이 마치 영어의 쿼티자판처럼 자음+모음 영역으로 나뉘어 있기 때문에 2벌식이라 부릅니다. 예를 들어 "우리나라의 국호는 대한민국입니다."이라는 문장을 2벌식으로 입력하면 이런 순서로 입력되지요? 2벌식 자판의 문장 입력 과정 순서 누르는 글쇠 화면에 나타나는 결과 1 ㅇ ㅇ_ 2 ㅜ 우_ 3 ㄹ 울_ 4 ㅣ 우리_ 5 ㄴ 우린_ 6 ㅏ 우리나_ 7 ㄹ 우리날_ 8 ㅏ 우리나라_ 9 ㅇ 우리나랑_ 10 ㅡ 우리나라으_ 11 ㅣ 우리나라의_ 12 Space 우리나라의 _ 13 ㄱ 우리.. 더보기
마법사 없이 SDI Frame-View-Document를 사용하는 최소 구조 이번 포스팅에서는 Visual Studio의 프로젝트 생성 마법사를 사용하지 않고 순수 코딩과 편집만으로 Frame-View-Document가 연결된 SDI 인터페이스를 만들어 보도록 하겠습니다. SDI를 구현하기 위해서는 1. 최소한 Application, Frame, View, Document의 4개의 클래스가 선언되어야 합니다. 2. MainFrame에서 사용하기 위해 최소한 Menu, Accelerator, Icon, String의 4개의 리소스(ID가 같아야 함)가 필요합니다. 4개의 리소스 중 하나라도 빠지면 Application의 InitInstance 함수를 수행하는 중 Debug Assertion Error가 뜹니다. SDI 구조를 만들기 위한 최소한의 Application 클래스 내용 .. 더보기
바실리스크: 바실리스크 설정과 시스템 설치 [2/2] 본 게시물은 지금은 접속되지 않는 다솜이네 홈페이지(http://my.dreamwiz.com/i2eye/main/main.htm)에 게시된 "Basilisk II"를 복원한 것입니다. Basilisk II 1984년 Think different 라는 타이틀을 가지고 매킨토시가 탄생했습니다. 그냥 컴퓨터라고 하기에는 뭔가 허전한..... 그래서 누구는 이렇게 이야기했습니다. Creat Dream Machine 이제 그 꿈을 당신의 컴퓨터에서도 이룰 수 있습니다. 여기 바실리스크가 있습니다. 일단 BaliliskII를 실행시킵니다. 윈9x사용자는 BasiliskIIOLD를 실행시키세요. 혹시 7.5를 스터핏으로 압축된 걸 받으셨다면 압축을 푸셔야 합니다. 스터핏 익스팬더()가 필요합니다. 제홈에서 받으신 분.. 더보기
바실리스크: 바실리스크 설정과 시스템 설치 [1/2] 본 게시물은 지금은 접속되지 않는 다솜이네 홈페이지(http://my.dreamwiz.com/i2eye/main/main.htm)에 게시된 "Basilisk II"를 복원한 것입니다. Basilisk II 1984년 Think different 라는 타이틀을 가지고 매킨토시가 탄생했습니다. 그냥 컴퓨터라고 하기에는 뭔가 허전한..... 그래서 누구는 이렇게 이야기했습니다. Creat Dream Machine 이제 그 꿈을 당신의 컴퓨터에서도 이룰 수 있습니다. 여기 바실리스크가 있습니다. 먼저 바실리스크 실행에 필요한 파일들입니다. 여기에 필요한 바실리스크 원본()은 최종호님께서 한글화 해주셨습니다. 감사드립니다. 일단 바실리스크 원본과 부팅디스크 이미지를 적당한 디렉토리에 압축을 풉니다. 그리고 매킨토.. 더보기
산술 비교 알고리즘 - 3편. "<"와 ">=" .386 .model flat, stdcall .stack 1024 .data .code main PROC MOV AH, 99 MOV AL, 1 CMP AH, AL JL JMP_LESS; AH =AL이면 JMP_NLESS로 이동 JMP_LESS: MOV AH, 02h MOV DL, 3Ch; ASCII 문자 '' 출력 INT 21h MOV DL, 3Dh; ASCII 문자 '=' 출력 INT 21h JMP JMP_EXIT JMP_EXIT: MOV AH, 4Ch INT 21h main ENDP END main 실행 결과 AH이 AL보다 작지 않으므로 ">= " 문자가 출력됩니다. 더보기
산술 비교 알고리즘 - 2편. ">"와 "<=" .386 .model flat, stdcall .stack 1024 .data .code main PROC MOV AH, 99 MOV AL, 1 CMP AH, AL; AH - AL의 연산을 합니다. JG JMP_GREATER; AH > AL이면 JMP_GREATER로 이동 JNG JMP_NGREATER; AH 더보기
산술 비교 알고리즘 - 1편 "!="과 "==" option casemap: none ; 대/소문자를 구분하지 않습니다. .386; 386 CPU용 명령어들을 사용합니다. .model flat, stdcall; 메모리 모델은 stdcall을 사용합니다. .stack 1024; 스택의 크기는 1024 워드로 합니다. .data; 데이터 영역은 아직 없으므로 비워둡니다. .code; 코드 영역 시작 main PROC; main 프로시저 선언합니다. MOV AH, 99; AH 레지스터에 99를 넣습니다. MOV AL, 1; AL 레지스터에 1을 넣습니다. CMP AH, AL; AH - AL 연산을 하여 대소비교를 합니다. JZ JMP_EQUALS; AH - AL == 0이어서 ZF Flag가 1이 되면 JMP_EQUALS 위치로 점프합니다. JNZ JMP_.. 더보기
산술비교 명령어 모음 CMP , 위 명령은 두 정수를 빼서 대소 비교를 하라는 뜻입니다. A - B의 결과는 양수 또는 0 또는 음수 중 하나일텐데, 각 상황별로 CPU에 내장된 ZF(Zero Flag), CF(Carry Flag)라는 두 플래그에 값이 저장됩니다. 그리고 ZF, CF의 상태에 따라 몇 가지 분기 구문이 존재합니다. 분기 구문은 A와 B는 최상위 비트는 부호 비트로 쓸 것인지 여부에 따라 signed, unsigned 형으로 나뉘는데 각 명령은 다음과 같습니다. 상태 플래그 레지스터 AF (Auxiliary Flag) : 반 워드 단위로 자리수가 바뀔때 1로 설정. 예를 들어 8비트 CPU에서는 0100에서 10100이 되는 경우, 또는 11011에서 1011이 되는 경우CF (Carry Flag) : uns.. 더보기
점프 명령어 JMP 이번에는 점프 명령어를 알아보려 합니다. 점프 명령어는 프로그램 진행상 필요시 특정 위치로 프로그램의 흐름을 건너뛰는 역할을 합니다. 점프 명령어는 다음과 같이 선언합니다. 명령 1 명령 2 JMP 명령 3 명령 4 레이블: 명령 5 명령 6 JMP 명령어가 없다면 프로그램의 순서는 명령 1-2-3-4-5-6의 순차적으로 진행될 것입니다. 그러나 JMP를 통해 특정 레이블로 점프시킨다면 1-2-5-6의 순서로 진행 됩니다. 그럼, 이전에 테스트 해 보았던 헬로 월드 예제로 적용해 보죠. .386 ; 386 CPU용 명령어들을 사용합니다. .model flat, stdcall ; 메모리 모델은 stdcall을 사용합니다. .stack 1024 .data ; 데이터 영역은 아직 없으므로 비워둡니다. .cod.. 더보기
두 번째 예제: Hello, World! .386 ; 386 CPU용 명령어들을 사용합니다. .model flat, stdcall ; 메모리 모델은 stdcall을 사용합니다. .stack 1024 .data ; 데이터 영역은 아직 없으므로 비워둡니다. .code ; 코드 영역 시작 main PROC ; main 프로시저 선언합니다. MOV AH, 02h ; AH 레지스터에 문자 1개를 출력하는 명령인 02h를 넣습니다. 반복적으로 사용될 값이므로 첫 번째 예제와는 순서를 바꿔서 가장 처음에 배치해 봤습니다. MOV DL, 48h ; DL 레지스터에 아스키문자 'H' (0x48)를 넣습니다. INT 21h ; 만능 인터럽트 21h를 발생시켜 AH, DL에 담긴 내용대로 처리합니다. MOV DL, 65h ; DL 레지스터에 아스키문자 'e' (0.. 더보기
첫 예제: 1개의 문자 출력 MASM 어셈블리 코드는 다음과 같은 기본 뼈대를 갖습니다. .386 .model flat, stdcall stack segment para stack db 1024 dup(?) stack ends data segment data ends code segment main proc far main endp code ends end main 이를 좀 더 단순화하면 .386 .model flat, stdcall .stack 1024 .data .code main proc main endp end main .386 .386 지시어는 386 CPU를 위한 명령어들만 사용한다는 의미입니다. 286, 486, 586p 등 다양한 지시어를 사용할 수 있고 여기에 지정한 CPU에 따라 사용할 수 있는 명령어가 달라지고,.. 더보기
MASM PWB 사용하기 1. MASM을 설치하면 C:\MASM611 디렉터리가 생성된 것이 보입니다. 그러면 C:\>cd masm611 하여 해당 디렉터리로 들어갑니다. 2. 여러 디렉터리가 보이는데요 그 중에 binr 디렉터리로 들어갑니다. 3. 여러 파일들 중 pwb가 보입니다. 이것이 우리가 사용하게 될 IDE입니다. 4. 글자가 깨져서 보기 불편합니다. 다시 프로그램을 종료하고 명령줄로 돌아갑니다. 5. C:\MASM611\BINR>chcp 437하여 영어 모드로 전환합니다. 6. 이제 메뉴가 깔끔하게 보입니다. 더보기
MASM 설치하기 (MS-DOS 버전) 저는 편의상 VMWare에 MS-DOS를 설치한 환경에서 진행합니다. VMWare에 MS-DOS 설치하는 방법과 플로피디스크 이미지 삽입 방법 대해서는 VMWare로 Windows 3.1 설치하기 - 3. MS-DOS 설치(http://tapito.tistory.com/253) 편을 참조하세요. 먼저 아래 첨부 파일을 다운로드 받으세요. MASM 6.11 설치파일입니다. 1. Disk 1을 A: 드라이브에 넣고 A:\>setup을 입력하면 위와 같은 화면이 뜹니다. MASM 6.11 설치프로그램에 오신 것을 환영합니다. 여기 파일들은 압축되어 있고, 프로그램을 사용하려면 이 프로그램으로 압축을 풀어야 실행 가능합니다. 끝내려면 Ctrl+C, 계속하려면 Enter를 누르세여... 이런 의미겠지요. Ente.. 더보기
MS-DOS API로 배우는 어셈블리어 윈도우에 Windows API가 있다면, MS-DOS에는 MS-DOS API가 있습니다. 차이가 있다면 WinAPI는 C언어로 된 반면, MS-DOS API는 어셈블리어를 사용한다는 차이가 있겠지요. WinAPI에서는 함수를 호출하는 방식으로 API를 사용하지만, MS-DOS API는 레지스터에 특정 값을 넣고, 인터럽트를 발생시키는 방식으로 API를 사용합니다. MS-DOS API의 인터럽트 인터럽트 벡터설명버전비고 20h 프로그램 끝내기 1.0 이상 도스 커널에 추가됨 21h 주요 도스 API 1.0 이상 도스 커널에 추가됨 22h 프로그램 끝내기 주소 1.0 이상 프로그램 호출시 주소 반환 23h Control-C 핸들러 주소 1.0 이상 기본 핸들러는 도스 셸에 있음 (일반적으로 COMMAND.C.. 더보기
마법사 없이 코딩만으로 리본 UI 구현하기 (1) 마법사 없이 코딩만으로 리본 UI 구현하기 안녕하세요? tapito입니다. 이번 시간에는 Visual Studio 2010을 이용하여 마법사 없이 리본 UI를 구현하는 방법을 설명하겠습니다. 이와 같이 기존의 MFC와는 확연히 다른 구성으로 된 창을 리본 UI라고 하며, Office 2007에서 처음 소개된 UI입니다. 저처럼 미술 감각이 영 좋지 않은 개발자들도 코딩 몇 줄이면 위와 같이 멋진 화면을 구현해 낼 수 있지요. 그럼 단도직입적으로 시작하겠습니다. 1. 준비물 준비물은 다음과 같습니다. Microsoft Visual Studio 2008 또는 Microsoft Visual Studio 2010 2010은 설치만 하면 됩니다만, 2008 버전 쓰시는 분들은 Feature Pack이라고 해서 리.. 더보기
제8차 네이버 파워 지식iN으로 선정되었습니다 그냥 컴공과 학생들 과제 풀어준 것 밖에 없는데 이런 상이 올 줄은 몰랐네요... 질문자 여러분의 기대에 부응해서 더욱 정진하겠습니다. 프로그래밍 관련 질문은 여기로 올려주세요 http://kin.naver.com/profile/dkhighest iPhone 에서 작성된 글입니다. 더보기
2. 기본 화면에 메뉴 넣기 전 편에 올렸던 소스와 달라진 부분 위주로 주석을 올립니다. stdafx.h로 공통 헤더 설정하기 파일명: stdafx.h #ifndef __STDAFX_H #include #include #include "resource.h" #endif CWinApp를 구현하기 파일명: CTestApp.h #pragma once class CTestApp : public CWinApp { public: CTestApp(); public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() }; extern CTestApp theApp; 파일명: CTestApp.cpp #include "stdafx.h" #include "CTestApp.h" #include "CMainFrame.. 더보기
1. MFC 시작하기 stdafx.h로 공통 헤더 설정하기 파일명: stdafx.h #ifndef __STDAFX_H #include #endif CWinApp를 구현하기 파일명: CTestApp.h #pragma once class CTestApp : public CWinApp { public: CTestApp(); public: virtual BOOL InitInstance(); // 어플리케이션 수준에서 발생되는 메시지를 처리할 메시지 맵입니다. DECLARE_MESSAGE_MAP() }; // theApp은 MFC에서 고정된 어플리케이션 이름입니다. // MFC로 작성된 프로그램을 실행하면 운영체제는 theApp이라는 이름의 인스턴스를 찾게 됩니다. // 그런데 헤더파일에서는 인스턴스를 직접 선언하지 못하므로 //"어.. 더보기
Objective-C로 작성해 본 복소수 클래스 #import // 간단한 복소수 클래스 @interface TapitoComplex : NSObject { float fImaginary; // 허수부 float fReal; // 실수부 } - (id) init; - (oneway void) release; - (float) getImaginary; - (void) setImaginary : (float) value; - (float) getReal; - (void) setReal : (float) value; - (TapitoComplex *) addComplex : (TapitoComplex *) value; - (TapitoComplex *) mulComplex : (TapitoComplex *) value; - (NSString *) toStr.. 더보기
宋熙東(송희동) - sunggari ula deri (송화강의 신) 宋熙東(송희동) - sunggari ula deri(숭가리 울라 더리, 송화강의 신) simbe hairatai onggome muterakv. (심버 해라타이 옹고머 무터라크브) 그대를 언제까지라도 잊을 수 없어 sini jalin ere jalan be jurcerakv. (신이 잘인 어러 잘안 버 주르체라크브) 그대를 위해서 일생 포기하기 않습니다 sunggari ula deri dekdere biya i adali. (숭가리 울라 더리 덕더러 비야 이 아달이) 송화강 신령 위로 떠오르는 달빛과 같이 si tunggus jilgan be yar seme uculembi. (시 퉁구스 질간 버 야르 서머 우출럼비) 그대는 퉁구스의 노래를 강 따라 흘려 보내옵니다 emu moro ula muke be .. 더보기
VMWare로 Windows 3.1 설치하기 - 4. Windows 3.1 설치 준비물 한글 Windows 3.1 Disk(다운로드 위치: http://tapito.tistory.com/284) 한글 Windows 3.1 설치하기 Windows 3.1 설치파일을 모두 다운받은 다음에 가상 PC를 끄지 않은 상태에서 Windows 3.1 설치 디스크 1번을 지정합니다. 위와 같이 A 드라이브로 들어가서 setup.exe를 실행시켜 줍니다. Enter를 눌러 설치를 시작합니다. 자동 설치와 사용자 설치가 있는데 자동 설치는 프로그램이 알아서 설치해 주는 것이고, 사용자 설치는 옵션을 지정하면서 설치하는 겁니다. 여기에서는 C 키를 눌러 사용자 설치로 들어가보겠습니다. 설치 디렉터리를 지정합니다. 시스템 디렉터리인 C:\WINDOWS... 이 경로는 그 때나 지금이나 변하지 않았군요. 물.. 더보기
VMWare로 Windows 3.1 설치하기 - 3. MS-DOS 설치 파티션 설정이 완료되면, 가상 PC를 끄고 설정에 들어가 Floppy를 MS-DOS 설치 디스크 1번으로 바꿉니다. (VMWare로 Windows 3.1 설치하기 1편에 첨부파일 있습니다.) 가상 PC를 켜면 MS-DOS 설치 화면이 나타나는데요... Enter를 누릅니다. 특별히 손 볼 거 없는 이상, 기본값으로 두고 "설정이 올바릅니다"를 선택한 후 Enter를 누릅니다 DOS가 설치된 디렉터리를 지정합니다. 기본 값은 C:\DOS입니다. 그냥 엔터를 칩니다. 바로 파일이 복사되기 시작합니다. 2번부터 순서대로 집어 넣고 엔터를 쳐줍니다. 한글 입/출력 드라이버를 설정하라는데요... DOS에서 기본으로 제공하는 거 사용하려면 N키를 누릅니다. 그 외 한글 카드가 장착된 실제 컴퓨터 기종에서 설치하고 .. 더보기
VMWare로 Windows 3.1 설치하기 - 2. 파티션 설정 1편에서 만들었던 가상 PC입니다. 도스를 깔기 전 제일 먼저 해야 할 일은 파티션을 설정하는 것입니다. 일단 가상 PC 설정에 가서 위와 같이 A 드라이브에 MS-DOS 부팅 디스크를 불러옵니다. MS-DOS 관련 디스크 이미지는 1편에서 이미 첨부한 바 있으니 아직 안 받으신 분은 1편으로 가셔서 받으시면 됩니다. 부팅 디스크 이미지를 넣고 부팅을 하면 위와 같이 MS-DOS 6.2가 뜹니다. 날짜와 시간 설정이 나오는데 그냥 엔터 치면 되겠습니다. 프롬프트에 fdisk를 입력하고 엔터를 칩니다. FDISK가 실행되면서 뭘 할거냐고 묻습니다. 4GB짜리 하드디스크에는 아무것도 없는 새하얀 상태인 관계로 우리가 해야 할 일은 먼저 2GB씩 쪼개서 한 쪽은 주 파티션(Primary Partition), .. 더보기
VMWare로 Windows 3.1 설치하기 - 1. 가상 PC 생성 MS-DOS를 설치해보도록 하겠습니다. 물론 실제 설치는 아니고 VMware를 통한 가상 PC 설치입니다. 1. 필요한 파일 먼저 다음과 같은 준비물이 필요합니다. VMware Workstation 한글 MS-DOS 6.2 Disk(다운로드 링크: http://tapito.tistory.com/283) 2. 가상 PC 만들기 VMware를 실행하고 File - New Virtual Machine을 누릅니다. 마법사가 뜨면 Typical을 선택하고 Next를 누릅니다. 운영체제 설치파일을 지정하는 것인데요... 여기서는 I will install the operating system later를 선택하고 Next를 누릅니다. 설치할 운영체제를 선택합니다. MS-DOS 뿐만 아니라 Windows 3.1까지 .. 더보기