<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://doswiki.oscc.kr/index.php?action=history&amp;feed=atom&amp;title=%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</id>
	<title>조이스틱 프로그래밍 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://doswiki.oscc.kr/index.php?action=history&amp;feed=atom&amp;title=%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D"/>
	<link rel="alternate" type="text/html" href="https://doswiki.oscc.kr/index.php?title=%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&amp;action=history"/>
	<updated>2026-06-25T13:56:25Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://doswiki.oscc.kr/index.php?title=%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&amp;diff=60&amp;oldid=prev</id>
		<title>Pc1412: 새 문서: = 조이스틱 (Game Port) 프로그래밍 =  IBM PC/XT~AT 계열에서 사용하는 조이스틱(Game Port)은 기본적으로 &#039;&#039;&#039;I/O 포트 201h&#039;&#039;&#039;을 통해 접근합니다.   두 개의 조이스틱을 지원하며, 각 조이스틱은 X/Y 축 위치와 2개의 버튼 입력을 제공합니다.  == 포트 201h 비트 구조 ==  {| class=&quot;wikitable&quot; ! 비트 !! 기능 !! 설명 |- | 0 || Joystick 1 X || 0 = 타이밍 동작 중 |- | 1 || Joystick 1 Y || 0 = 타이밍 동작...</title>
		<link rel="alternate" type="text/html" href="https://doswiki.oscc.kr/index.php?title=%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&amp;diff=60&amp;oldid=prev"/>
		<updated>2025-11-19T17:18:18Z</updated>

		<summary type="html">&lt;p&gt;새 문서: = 조이스틱 (Game Port) 프로그래밍 =  IBM PC/XT~AT 계열에서 사용하는 조이스틱(Game Port)은 기본적으로 &amp;#039;&amp;#039;&amp;#039;I/O 포트 201h&amp;#039;&amp;#039;&amp;#039;을 통해 접근합니다.   두 개의 조이스틱을 지원하며, 각 조이스틱은 X/Y 축 위치와 2개의 버튼 입력을 제공합니다.  == 포트 201h 비트 구조 ==  {| class=&amp;quot;wikitable&amp;quot; ! 비트 !! 기능 !! 설명 |- | 0 || Joystick 1 X || 0 = 타이밍 동작 중 |- | 1 || Joystick 1 Y || 0 = 타이밍 동작...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= 조이스틱 (Game Port) 프로그래밍 =&lt;br /&gt;
&lt;br /&gt;
IBM PC/XT~AT 계열에서 사용하는 조이스틱(Game Port)은 기본적으로 &amp;#039;&amp;#039;&amp;#039;I/O 포트 201h&amp;#039;&amp;#039;&amp;#039;을 통해 접근합니다.  &lt;br /&gt;
두 개의 조이스틱을 지원하며, 각 조이스틱은 X/Y 축 위치와 2개의 버튼 입력을 제공합니다.&lt;br /&gt;
&lt;br /&gt;
== 포트 201h 비트 구조 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 비트 !! 기능 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Joystick 1 X || 0 = 타이밍 동작 중&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Joystick 1 Y || 0 = 타이밍 동작 중&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Joystick 2 X || 0 = 타이밍 동작 중&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Joystick 2 Y || 0 = 타이밍 동작 중&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Joystick 1 버튼 1 || 0 = 눌림&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Joystick 1 버튼 2 || 0 = 눌림&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Joystick 2 버튼 1 || 0 = 눌림&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Joystick 2 버튼 2 || 0 = 눌림&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bits 0~3은 가변저항(0~100kΩ)을 사용하는 &amp;#039;&amp;#039;&amp;#039;저항 기반 아날로그 입력&amp;#039;&amp;#039;&amp;#039;이며, RC 타이머의 충·방전 시간을 측정하는 방식입니다.&lt;br /&gt;
&lt;br /&gt;
== 아날로그 축 타이밍 공식 ==&lt;br /&gt;
&lt;br /&gt;
게임포트는 RC 회로 특성으로 인해 선형이 아닌 지수적 변화량을 가집니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
time = 24.2µs + (0.011µs × resistance)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
역산:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
resistance = (time - 24.2) / 0.011&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
※ 포트 201h의 값을 읽기 전에 &amp;#039;&amp;#039;&amp;#039;반드시&amp;#039;&amp;#039;&amp;#039; 포트 201h에 아무 값이나 write 하여 타이머를 초기화해야 합니다.&lt;br /&gt;
&lt;br /&gt;
== BIOS 인터럽트를 통한 조이스틱 읽기 (INT 15h, AH=84h) ==&lt;br /&gt;
&lt;br /&gt;
직접 RC 타이밍을 계산하지 않고, BIOS 기능을 사용할 수 있는 경우 다음 서비스를 이용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 1) 버튼 상태 읽기 (DX = 0) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INT 15h&lt;br /&gt;
AH = 84h&lt;br /&gt;
DX = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
반환값(AL 비트 7~4):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 비트 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Joystick 1 버튼 1 (1 = 눌림)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Joystick 1 버튼 2&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Joystick 2 버튼 1&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Joystick 2 버튼 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 2) 위치(X/Y) 읽기 (DX = 1) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INT 15h&lt;br /&gt;
AH = 84h&lt;br /&gt;
DX = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
반환 레지스터:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 레지스터 !! 내용&lt;br /&gt;
|-&lt;br /&gt;
| AX || Joystick 1 X 좌표&lt;br /&gt;
|-&lt;br /&gt;
| BX || Joystick 1 Y 좌표&lt;br /&gt;
|-&lt;br /&gt;
| CX || Joystick 2 X 좌표&lt;br /&gt;
|-&lt;br /&gt;
| DX || Joystick 2 Y 좌표&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
이 값들은 마우스와 달리 &amp;#039;&amp;#039;&amp;#039;비선형&amp;#039;&amp;#039;&amp;#039; 값이므로  &lt;br /&gt;
프로그램 시작 시 다음과 같은 보정(calibration)을 하는 것이 일반적입니다.&lt;br /&gt;
&lt;br /&gt;
* 중앙 위치&lt;br /&gt;
* 최상단-좌측&lt;br /&gt;
* 최하단-우측&lt;br /&gt;
&lt;br /&gt;
== BIOS 지원 여부 확인 ==&lt;br /&gt;
&lt;br /&gt;
아래 호출에서 Carry Flag(CF)를 확인하여 BIOS 지원 여부를 판단합니다.&lt;br /&gt;
&lt;br /&gt;
* CF = 0 → 지원&lt;br /&gt;
* CF = 1 → 미지원&lt;br /&gt;
&lt;br /&gt;
== 게임포트 응용: DIY 장치 연결 ==&lt;br /&gt;
&lt;br /&gt;
게임 포트는 단순한 저항·스위치 입력 장치이므로 다음과 같은 확장도 가능합니다.&lt;br /&gt;
&lt;br /&gt;
* 저항값 변화를 이용한 간단한 센서 장치&lt;br /&gt;
* 두 개의 ON/OFF 스위치를 조이스틱 버튼처럼 동작시키기&lt;br /&gt;
* 가변저항 기반의 홈브류 입력 장치 제작&lt;br /&gt;
&lt;br /&gt;
== 출처 ==&lt;br /&gt;
* HELPPC 2.10 (David Hurgens)&lt;br /&gt;
* Gameport / Joystick Programming Reference&lt;br /&gt;
* https://www.fysnet.net/joystick.htm&lt;/div&gt;</summary>
		<author><name>Pc1412</name></author>
	</entry>
</feed>