2014년 11월 27일 목요일

Mini vMac

초기 Macintosh에 대한 에뮬레이터로 종종 언급되는 것이 바로 이 Mini vMac이다.

그런데 어찌된 일인지 사용하기가 무지 까다롭다.

정확히 말하자면 내.가. 사용하기에 무지 까다로왔다.

아직까지도 제대로 써 보질 못했으며, 써 보려고 시도한 것도 수차례이며, 같은 삽질이 반복되고 있다는 것은 정말 화가 날 지경이다.

그래서 더 이상은 삽질하지 말자는 의미로 여기에 정리해 두려 한다.



1. Mini vMac
공식적인 홈페이지가 sourceforge에 있었는데 이번에 방문해 보니 다른 곳으로 옮겼다고 한다.
http://www.gryphel.com/c/minivmac/index.html
여기에서 Mini vMac 바이너리를 다운로드 받을 수 있다.

2. ROM
어디에서 구했는지 기억은 나지 않지만, Macintosh Plus용 ROM을 가지고 있으며 여기에 저장해 둔다.
Mac_Plus_ROM.zip
압축을 풀면 vMac.ROM 이름의 파일이 나온다. 이 이름 그대로 사용하면 된다.

3. System 6 OS
위의 Mini vMac 사이트에서 설명한대로라면 Apple 사이트에서 이 오래된 OS의 디스크 이미지를 받을 수 있어야 하는데, 어찌된 일인지 지금은 링크가 사라진 듯 보인다.
그래서 이것도 여기에 보관해 두었다.
SSW_6.0.8_Disk 1 of 2
SSW_6.0.8_Disk 2 of 2

4. Stuff-it Expander
위의 디스크 이미지를 그대로 사용하려고 하면 작동하지 않는다는 것을 알게 된다.
확장자도 .bin이라서 더 이상 뭐가 있겠나 싶었는데, Macintosh에서 사용되는 Stuff-it이라는 압축 프로그램으로 압축이 되어 있으니 이걸 풀어야 한다고 한다.
그런데 이게 뭐 유명하지도 않고 Macintosh에서나 사용되는 프로그램이라 구하기가 녹녹하지는 않아 보인다.
일단은 Linux용의 Stuff-it 압축 프로그램을 찾아냈다.
혹시 모르니 이것도 보관.
Stuffit520.611linux.tar.gz

5. System 6 디스크 이미지 풀어내기
4번의 Stuff-it으로 3번의 System 6 디스크 이미지를 풀면 되지 않는가?
그것만으로는 안되더라는....ㅠㅠ
먼저 디스크 1번의 압축을 풀어보면, *.info, *.rsrc, *.data 세개의 파일이 나온다.
여기에서 *.data 파일을 다시 압축을 풀면 System Startup이라는 파일이 나온다.
이 파일이 1.44MB의 디스크 이미지이고, Mini vMac에서 인식할 수 있는 파일이다.
혹시 모르니 이것도 여기에 보관.
System Startup
디스크 2의 압축을 풀어서 나온 이미지도 여기에 보관.
System Additions

System 6 디스크 압축 풀기

2014년 11월 11일 화요일

Ubuntu 10.04에 Java 설치하기

Ubuntu 10.04의 소프트웨어 센터에는 구글의 크롬도 없고, 오라클의 자바도 없다.
대신 Chromium이라는 크롬 호환 브라우저가 있고, OpenJDK라는 자바 호환 플랫폼이 제공된다.

아마도 Ubuntu의 버전이 오래되다 보니, 캐노니컬에서 정식으로 지원하지 않는 것인지, 혹은 개별 소프트웨어 업체가 워낙에 막강하다보니 굳이 Ubuntu의 소프트웨어 센터에 등록하지 않아도 된다 생각한건지...

하지만 Ubuntu의 소프트웨어 센터가 매우 편리하고, 이것이 아니라도 apt-get으로 간단히 설치가 가능해 진 이 시점에... 개별적 설치는 이래저래 번거로운 문제가 되어 버렸다.

그리고 캐노니컬에서 지원하지 않는 소프트웨어 패키지 가운데에는 설치가 아얘 불가능해 보이는 것들도 종종 마주치게 되고, 설치해도 여러가지로 찜찜한 경우는 더 자주 발생한다.

크롬 브라우저도 Ubuntu 10.04에서는 이런 경우에 속하는 패키지라 Chromium을 사용하고 있는데, 여기에 Java가 필요한 상황에 부딪히게 되었다.

편리한대로 OpenJDK를 설치해 보았는데, 이게 무슨 일인지 Java Application 실행에도 문제가 있고 브라우저에서 Java Applet을 실행하는 데에도 문제가 생겼다. 아니, 문제가 아니라 아얘 설치전과 마찬가지로 작동하지 않는 것...

OpenJDK라서 그런가도 싶고, OpenJDK는 버전 업데이트가 어찌 되는지도 의심스럽고 해서 번거롭지만 Oracle Java를 설치하기로 했다.

다음 사이트에서 Java(JRE)를 다운로드 한다. Ubuntu 10.04의 경우는 Linux 링크를 클릭하면 된다.
http://java.com/ko/download/manual.jsp?locale=ko
Java Download

위의 화면에서 "지침"을 클릭하면 다음과 같은 화면이 나오지만, 링크가 따로 있으니 이걸 클릭.
설치 지침 - Ubuntu용 Java로 이동하자

위의 링크따라 이동하면 처음엔 OpenJDK에 관한 설명이 나오는데, 스크롤해서 내려가면 Oracle Java 부분이 나온다.
Ubuntu용 Java 설치 지침 가운데 Oracle Java

위의 화면에서 "2. How do I install Oracle JRE 7?"을 클릭하면 다음과 같은 화면이 나온다.
JDK 기준으로 설명하지만 JRE도 비슷하다.
Oracle Java 설치 과정

설치 과정

Java(JRE) 설치에 대한 설명 계속. 플러그인 부분은 따르지 말고 다음에 나오는 화면을 따라하자.
Oracle Java 설치 과정(계속)

더 아래로 스크롤하면 JRE에 대한 설명이 따로 나온다.
그리고 여기에 브라우저 plugin 설정하는 방법이 나온다.
파이어폭스와 Chromium 모두 동일하게 다음의 방법으로 설정이 가능하다.
브라우저 플러그인 설정

브라우저 플러그인 설정 과정. 내 경우에는 mkdir과 ln 두가지 명령만으로 끝.
브라우저 플러그인 설정

Chromium에서 Java 설치 확인
Chromium에서 Java 설치 확인

FireFox에서도 Java 설치 확인
FireFox에서 Java 설치 확인


2014년 11월 5일 수요일

Vim 파일 저장 오류 __ 10

최종 오류의 원인으로 등장한 stat() 함수.
하지만 DOSBox에서는 실패한 이 함수의 결과가 시험용을 작성한 코드에서는 성공했다.
어째서 다른 결과가 나온 걸까?

gdb를 이용해서 어셈블리 코드 레벨의 실행 절차마저 세세하게 따져봐야 할 지경에 이르게 되었다.
하지만 Linux gdb에서의 어셈블리 코드의 표기가 MS-Windows 계열에서 사용하는 표기와 너무 달라서 해독이 난감해 하던 터였다.

일단, 지난 번에 만든 stat() 함수를 사용하는 테스트용 C program의 Assembly code를 생성해 보았다.
실행 결과야 이미 알고 있으니 최대한 단순하게 만들어서 Assembly code도 간단하도록 간략화 시켰다.

stat() 테스트 프로그램

gcc에서 -S 옵션을 사용하면 Assembly Code를 출력한다.
gcc -S 옵션
그렇게 만들어진 Assembly Code는...
테스트 프로그램의 Assembly Code
역시나 뭔가 참 어색하다.
상수값에 $를 쓴다거나 레지스터 이름에 %를 붙인다는 걸 알 수 있지만, 오퍼랜드의 순서가 바뀌어 있고, %gs:20 ?? 156(%esp) ??? 이건 대체 뭘까?

Linux용 Assembly 공부를 해야 하나 하고 관련 서적과 자료들을 인터넷에서 검색을 했다.

헌데... CPU는 동일한 인텔 계열인데 굳이 Assembly 공부를 다시 해야 하나?
OS에 관련된 부분을 제외하면 단순히 표기법만 다른 것 아닌가?

그렇다면 gcc에서 Assembly Code를 출력할 때 이 표기법을 바꿀 수 있지 않을까?
전에 어디에선가 본 기억으로는 Assembly Code의 표기법은 AT&T와 Intel의 방식으로 나뉘어져 있으며, AT&T 표기법은 Unix 계열에서, Intel 표기법은 MS-Windows 계열에서 주로 사용한다고 했던 것 같다.
gcc는 MS-Windows용으로도 porting되어 있으니 양쪽 표기법을 모두 지원할 것이라 생각이 들어 gcc 매뉴얼을 다시 살펴 보았다.

그래서 찾아낸 옵션, -masm=intel로 지정해주면 된다.
-masm 옵션
그렇게 만들어진 Assembly Code,
테스트 프로그램의 Assembly Code. Intel 표기법
이제야 조금 익숙해진 모양새.

그렇다면 gdb에서도 Assembly Code룰 보여줄 때 표기법을 바꿀 수 있지 않을까?
그래서 gdb 매뉴얼을 찾아 본 결과,
gdb의 disassemble 옵션