MS-DOS 및 기타 텍스트 모드 프로그램은 어떻게 2 배 CJK 문자를 표시 할 수 있습니까? 80×25 입니다. 일본어 문자가 두

일본어와 중국어로 많은 텍스트 모드 BIOS 설정 화면을 보았습니다. 최근에는 일본어로 Windows XP 설정을 보았습니다. MS-DOS에는 일본어 버전도있었습니다. Windows 명령 프롬프트가 아닌 실제 DOS 모드 !

일본어 BIOS 설정

일반적인 텍스트 모드 화면의 크기는 80×25 입니다. 일본어 문자가 두 배의 일반 라틴 문자 너비보다 큰 경우 화면에 동시에 표시 할 수있는 최대 일본어 문자 수는 약 1000입니다. 따라서 문자의 왼쪽과 오른쪽 부분을 표시 하려면 2000 개의 코드 포인트 가 필요 합니다.

기본 텍스트 모드는 256 자만 표시 할 수 있지만 첫 번째 128은 ASCII에 사용되므로 사용 가능한 문자는 높은 128 코드 포인트로 제한됩니다. 필요한 경우 512로 확장 할 수 있지만 여전히 디스플레이에 충분한 코드 포인트를 지원할 수 없습니다. 나는 항상 그들이 제한된 문자 수로 큰 문자 집합을 어떻게 표시했는지 궁금합니다.

[ ] 8]

Linux의 텍스트 모드는 유니 코드를 표시 할 수 있고 색상이 더 많기 때문에 그래픽 모드 드라이버를 사용하는 것 같습니다. 그러나 MS-DOS 및 BIOS 설정 화면에서 어떻게 수행하는지 설명 할 수 없습니다.


편집 : 도스에 대한 일본어 텍스트 입력을 찾았습니다.

텍스트 모드에도 한국어가 있습니다!



답변

일반적인 “80×25 문자”모드는 실제로 720×350 픽셀입니다 (각 문자 셀의 너비는 9 픽셀, 높이는 14 픽셀임을 의미). 2 바이트 문자 모드 ( “40×25”)는 각 열을 두 배로 늘려서 비디오 내용 메모리에 저장하거나 (필요한 비디오 내용 메모리를 반으로 줄임) 추가 글리프 메모리와 동일한 문자 셀을 18 * 14 픽셀로 증가시키기위한 비디오 컨텐츠 ​​메모리의 양.

상당히 초기에 ( EGA 가 소개 되었을 때 이루어 졌다고 생각합니다. ) 사용자 정의 문자 글리프에 대한 지원이 IBM PC의 텍스트 표시 모드에 추가되었습니다.

IBM PC의 일반 텍스트 모드는 특정 주소에서 순차적 인 4000 바이트의 비디오 컨텐츠 ​​RAM입니다. 이들은 1 바이트의 문자 속성 (원래 깜박임, 굵게, 밑줄 등)으로 읽습니다. 나중에 전경색 및 배경색 및 깜박임 / 강조 표시에 다시 사용되므로 텍스트 모드에서 16 색으로 제한됩니다. 표시됩니다. 각 문자 바이트 값에 표시되는 실제 글리프는 다른 곳에 저장됩니다.

즉, 화면에서 256 개의 서로 다른 글리프를 한 번에 만들 수 있고 각 글리프를 9×14 1 비트 비트 맵으로 나타낼 수있는 경우 메모리에서 글리프를 간단히 바꾸어 문자를 다르게 표시 할 수 있습니다. . 부분적으로 이것은 mode con codepage selectDOS 에서 한 것의 일부였습니다 . 이것은 비교적 사소합니다.

256 개가 넘는 별개의 글리프가 필요하지만 화면에서 줄어든 글리프 수와 함께 살 수있는 경우 너비가 18 픽셀 인 두 배 글리프가있는 40×25 구성표를 사용할 수 있습니다. 비디오 컨텐츠 ​​RAM의 총량이 고정되어 있고 글리프 비트 맵 메모리를 늘릴 수 있다고 가정하면 4 바이트마다 2 바이트를 사용하여 하나의 화면 글리프를 표시하여 2 ^ 16 = 65,536 개의 다른 글리프 (공백 글리프 포함). 대담하다고 느끼면 2 ^ 24 ~ 16.7M 다른 글리프에 액세스 할 수있는 두 번째 속성 바이트를 건너 뛸 수도 있습니다. 이 두 가지 방법 모두 특별한 소프트웨어 지원에 의존하지만 하드웨어 및 펌웨어 부분은 매우 쉽게 수행 할 수 있어야합니다. 18×14 1 비트 픽셀에서 65,536 개의 글리프가 약 2MiB로 작동하지만 크기는 크지 만 극복 할 수없는 메모리 양은 아닙니다.

기본 미국 영어는 최소한 62 개의 전용 글리프 (숫자 0-9, 대문자 소문자 AZ)가 필요하므로 미국 영어 텍스트를 동일하게 표시하려면 180-190 글리프와 같은 것을 사용해야합니다. 글리프 당 8 비트로 이동합니다. 초기 IBM PC 아키텍처와 같이 자원이 제한된 환경에서 선택할 수있는 미국 영어 동시 지원없이 살 수있는 경우 전체 글리프에 액세스 할 수 있습니다.

약간의 속임수로 두 구성표를 혼합하고 일치시킬 수 있습니다.

나는 그것이 실제로 어떻게되었는지 모르겠다. 그러나이 두가지 모두 텍스트 모드에서 평범한 IBM PC 화면에 제한된 문자 수의 “팬시”알파벳을 얻는 방법에 대한 실행 가능한 계획이다. 스택 교환의 순간. 실제로이를 쉽게하기위한 추가 그래픽 모드가있을 수 있습니다.

또한 텍스트를 표시하는 텍스트 모드그래픽 모드 의 차이점을 명심하십시오 . 그래픽 모드, 아마도 보편적으로 지원되는 VESA를 통해 문자 글리프를 그리는 한 자신만의 것이지만 그리는 방법에 대해서는 훨씬 더 자유로울 수 있습니다. 예를 들어, Windows NT의 텍스트 기반 부분 (Windows XP가 속한 제품군)은 그래픽 모드를 사용하여 Windows NT 4.0 부팅 화면 및 BSOD를 포함한 텍스트를 표시합니다.


답변

이것은 @Michael Kjörling의 말을 단순화 한 것입니다.

텍스트 모드에서는 화면 문자 당 1 바이트의 “화면 메모리”가있어 각 화면 위치에 어떤 문자가 나타나는지 어댑터에 알려줍니다. (어댑터에 밑줄, 깜박임 등과 같은 색과 내용을 알려주는 “속성”바이트도 있습니다.)

어댑터는이 바이트를 사용하여 작은 8×12 또는 문자의 비트 맵이있는 다른 “문자 테이블”로 색인합니다. DOS는이 문자표를 코드 페이지라고 부릅니다.

CGA로 시작하여 어댑터 RAM의 특정 위치에 문자 테이블을 가져 오도록 어댑터에 지시 할 수 있습니다. 각 어댑터에는 해당 카드에 대한 기본 “글꼴”(표준 IBM 글꼴)이있는 문자 ROM이 있지만 RAM에있는 위치로 전환하여 자신의 이미지를 저장하도록 어댑터에 지시 할 수 있습니다.

소프트웨어가 진행중인 작업을 알고있는 한 문자표의 이미지를 가리키는 화면 메모리의 코드는 ASCII 코드와 정렬되지 않습니다. 인쇄 할 수없는 ASCII 문자 인 1-31의 화면 메모리 코드 (및 문자 테이블 모양)가 있음을 알 수 있습니다. 그러나 화면 메모리에 직접 기록하면 ( DEFSEG = &HB800 : POKE 0,1GW-BASIC에서 가장 큰 문자를 스마일리로 변경하기위한 메모리) 마음) 여전히 표시 할 수 있습니다.

따라서 올바른 이미지를 어댑터의 RAM에 넣고 필요한 소프트웨어를 지원할 수 있다면 다른 언어를 표시하는 것이 좋습니다.


답변

Wikipedia의 “VGA 호환 텍스트 모드”페이지와 일부 VGA 프로그래밍 서적에서 무언가를 발견했습니다.

EGA 및 VGA 텍스트 모드는 화면에 동시에 512 개의 글리프 또는 256 개의 글리프를 가진 2 개의 뱅크를 허용합니다. 속성 비트 3 (전경색 강도)은 뱅크 A 또는 B 사이에서 선택할 수도 있습니다. 일반적으로 발생하는 것은 기본적으로 A 및 B 글꼴 레지스터가 동일한 주소를 가리키고 256 개의 글리프 만 제공한다는 것입니다. 따라서 작동하려면 글꼴 레지스터를 올바른 주소로 설정해야합니다.

각 뱅크에는 8192 바이트가 있으며 뱅크에있는 256 개의 글리프는 각각 32 바이트 (폭 8 픽셀, 높이 32 픽셀)입니다. 문자의 정확한 높이를 나타 내기 위해 스캔 라인 카운트 레지스터를 설정할 수 있습니다. VGA 카드는 400 개의 스캔 라인을 화면에 인쇄하고 EGA는 350 개의 스캔 라인을 화면에 인쇄하므로 25 개의 문자 행을 제공하기 위해 문자 높이를 각각 16 및 14 개의 스캔 라인으로 설정합니다. 또한 VGA에서 각 글리프의 너비는 8 또는 9 개의 점을 가질 수 있지만 9 번째 열은 공백이거나 8 번째 열만 반복됩니다. 두 뱅크의 모든 글리프는 사용자 정의 할 수 있습니다.

일부 언어에서 어떻게 256 가지 이상의 문자를 화면에 표시 할 수 있습니까? 위의 예에서 각 특수 외국 문자는 두 개의 글리프 (왼쪽 및 오른쪽) 이상으로 구성됩니다. ASCII 텍스트에 대해 뱅크 A의 첫 번째 글리프 128 개를 따로 설정할 수 있으며 뱅크 A의 128 개 글리프 + 뱅크 B의 256 개 글리프 = 384 개 글리프를 사용자 지정할 수 있습니다.

또한 다양한 왼쪽과 오른쪽을 결합하여 거대한 문자 세트를 만들 수 있습니다! 예를 들어, 384 개의 사용자 정의 글리프에서 왼쪽은 184, 오른쪽은 200을 예약하려고합니다. 184 * 200 = 36800 개의 다른 문자를 가질 수 있습니다! (대부분은 해당 언어에 대해 유효하지 않은 문자 일 수 있지만 여전히 유효한 조합을 많이 얻을 수 있습니다).

위의 일본어 예에서는 왼쪽 문자를 공유하는 “ha”및 “ba”문자가 있습니다. “si”및 “zi”캐릭터에도 동일합니다. “ko”와 “ni”오른쪽은 비슷하므로 오른쪽 오른쪽 글리프를 공유 할 수 있습니다. “ru”와 “ro”문자에 대해서도 마찬가지입니다. 좋은 디자인으로 캐릭터 세트를 확장 할 수 있습니다. “le”문자의 오른쪽 글리프가 화면 왼쪽 상단 (회색)에 나타나고 세로 스크롤 막대에서 위 / 아래 버튼도 변경되었습니다. 즉, 뱅크 A의 적어도 일부가 새 글리프를 수용하는 데에도 사용되었습니다.

결론적으로 초기 PC 시대의 BIOS 문자열 기능은 유니 코드를 인식하지 못했지만 반드시 그럴 필요는 없습니다. 512 글리프를 사용자 정의하고 올바른 EGA 또는 VGA 레지스터를 설정하기 만하면됩니다. 예를 들어, “! @” “# $” “% ^” “& *” “çé” “ñÑ”글리프를 외국 문자 (뱅크 A 또는 B)로 사용자 정의한 다음 BIOS를 인쇄 할 수 있습니다! @ # S % ^ & * çéñÑ “문자열을 한 번에. BIOS는 글리프를 검사하지 않습니다. 비디오 메모리에 직접 쓸 수 있으므로 BIOS 기능을 전혀 사용할 수 없습니다. 뱅크 B의 글리프를 사용하려면 문자 전경색 속성을 8에서 15 (밝은 색상) 사이의 값으로 설정하십시오.

(나의 나쁜 영어 죄송합니다)


답변

몇 가지 조사를 한 결과 VGA 텍스트 모드에서 512자를 초과하는 방법이 없기 때문에 그래픽 모드를 사용하거나 특수한 하드웨어 지원이 필요합니다.

DOS 자체는 문자 당 1 바이트를 초과하는 문자 세트로 인쇄 할 수 없습니다. BIOS 기능을 사용하여 2 x 256 자 이상의 글꼴 크기를 가질 수없는 VGA 하드웨어를 사용하기 때문입니다. 그래픽 모드를 사용하여 광범위한 글꼴을 렌더링하는 드라이버의 작업처럼 들립니다. 우리는 이미 몇몇 그래픽 DOS 텍스트 편집기와 유사한 (-:) 덕분에 유니 코드 글꼴을 지원하고 있으며 DBCS 또는 UTF-8의 사용 여부에 관계없이 “캐릭터의 크기는 하나 이상의 바이트 일 수 있습니다”를 공유합니다. .

FreeDOS에서 일본어에 대한 공식적인 지원이 있습니까?

DOS (DOS / V)의 일본어 버전은 첫 번째 방법을 사용하여 텍스트 모드를 시뮬레이션 하여 그래픽 모드에서 문자를 렌더링 특수 드라이버를 사용. 드라이버는 DOS의 텍스트 표시 기능을 확장하기위한 메커니즘 인 IBM V-Text 표준을 따릅니다. 이와 같은 다양한 16/24/32/48 도트 글꼴 중에서 선택할 수 있습니다

다른 텍스트 모드 시스템도 동일한 기술을 사용합니다. FreeDOS에서는 일본어 지원을위한 특수 드라이버 로드 할 수 있습니다

렌더러는 int 10h 및 int 21h 호출을 가로 채고 텍스트를 수동으로 그리므로 일반 영어 프로그램에서도 작동합니다. 그러나 VGA 메모리에 직접 쓰는 프로그램에서는 작동하지 않습니다. 일본어 문자 인쇄를 위해 int 5h 및 int 17h도 연결됩니다.

DOS / V 매뉴얼 에 따르면 IBM BIOS는 int 15h를 통해 V-Text에 대한 지원을 추가했습니다.

5010H Video extension information acquisition
5011H Video extension function registration
5012H Video extension driver release
5013H Video extension driver lock setting

이전 PC의 BIOS에서 일본어를 지원하는 이유이기도합니다.

그럼에도 불구하고 그래픽 모드의 속도가 느리면 스크롤 하는 동안 글리치가 생겨 특별한 처리가 필요합니다

DOS / V는 실제로 일본어 텍스트 모드를위한 최초의 소프트웨어 솔루션입니다

한편, 일본어 문자 표시 문제에 대한 소프트웨어 솔루션을 만들기 위해 1980 년대 초부터 IBM Japan에서 진지한 연구가 진행되었습니다. IBM의 Fujisawa 및 Yamato 연구소의 고해상도 VGA 모니터, 더 빠른 프로세서 및 더 큰 메모리 및 하드 드라이브의 등장으로 한자 문자의 모양 및 크기에 대한 정보는 디스크에 저장하고 확장 메모리에로드 할 수 있음을 깨달았습니다. 그래픽 모드 VRAM을 통해 표시됩니다. (DOS / V의 “V”는 소프트웨어를 통해 일본어 문자를 표시하는 데 필요한 VGA 모니터에서 가져옵니다.)

DOS / V : 하드 (웨어) 문제에 대한 소프트 (웨어) 솔루션

같은 기사에 따르면 DOS / V가 발명되기 전에 다른 시스템은 모두 한자 ROM이 하드웨어에 필요합니다.

모든 컴퓨터 브랜드는 하드웨어 솔루션을 사용하여 일본어 문자 표시를 처리하고 한자 ROM이라는 특수 칩에 모든 문자 데이터를 저장했습니다. 이 방법을 사용하려면 키보드 입력의 각 문자에 대한 2 바이트 코드를 CPU로 보내야했고, 한자 ROM에서 해당 문자를 가져 와서 텍스트 모드 VRAM을 통해 화면으로 보냈습니다. 한자 ROM을 사용하면 각 문자의 모양이 고정 된 반면 텍스트 모드 VRAM을 사용하면 각 문자의 표준 16×16 도트 크기가 설정됩니다.

예를 들어, 일본어 글꼴이있는 특수 그래픽 어댑터를 사용하는 IBM Personal System / 55 는 실제 텍스트 모드를 갖습니다.

1980 년대 초, IBM Japan은 아시아 태평양 지역 용 IBM 5550 및 IBM JX의 두 x86 기반 개인용 컴퓨터 라인을 출시했습니다. 5550은 디스크에서 간지 글꼴을 읽고 1024 x 768 고해상도 모니터에서 텍스트를 그래픽 문자로 그렸습니다.

https://en.wikipedia.org/wiki/DOS/V#History

IBM 5550과 유사하게 텍스트 모드는 840 개의 1040×725 픽셀 (12×24 및 24×24 픽셀 글꼴, 80×25 문자)이며 글꼴 ROM에서 읽은 일본어 문자를 표시 할 수 있습니다.

AX 아키텍처는 표준 EGA 대신 특별한 JEGA 어댑터를 사용

AX (Architecture eXtended)는 1986 년경부터 PC가 특수 하드웨어 칩을 통해 2 바이트 (DBCS) 일본어 텍스트를 처리 할 수 ​​있도록하면서 외국 IBM PC 용으로 작성된 소프트웨어와 호환되도록하는 일본 컴퓨팅 이니셔티브였습니다.

간결한 한자 문자를 명확하게 표시하기 위해 AX 시스템에는 당시 다른 곳에서 널리 사용되는 640×350 표준 EGA 해상도가 아닌 640×480 해상도의 JEGA (ja) 화면이있었습니다. 사용자는 일반적으로 ‘JP’와 ‘US’를 입력하여 일본어와 영어 모드를 전환 할 수 있으며, AX-BIOS 및 일본어 문자 입력을 가능하게하는 IME도 호출합니다.

최신 버전은 또한 VGA에서 소프트웨어 에뮬레이션을 위해 특별한 AX-VGA / H 하드웨어 및 AX-VGA / S를 추가

그러나 AX 릴리스 직후 IBM은 AX와 호환되지 않는 VGA 표준을 공개했습니다 (비표준 “슈퍼 EGA”확장을 홍보하는 유일한 것은 아닙니다). 결과적으로 AX 컨소시엄은 호환 가능한 AX-VGA (ja)를 설계해야했습니다. AX-VGA / H는 AX-BIOS를 사용한 하드웨어 구현이고 AX-VGA / S는 소프트웨어 에뮬레이션이었습니다.

사용 가능한 소프트웨어 및 기타 문제로 인해 AX는 실패했으며 일본에서 PC-9801의 지배력을 깰 수 없었습니다. 1990 년에 IBM Japan은 DOS / V를 발표하여 IBM PC / AT 및 클론이 표준 VGA 카드를 사용하여 추가 하드웨어없이 일본어 텍스트를 표시 할 수있게했습니다. 곧 AX가 사라지고 NEC PC-9801의 쇠퇴가 시작되었습니다.

NEC PC-98 시리즈는 또한 디스플레이 제어기에 문자 ROM을

표준 PC-98에는 각각 12KB 주 메모리와 256KB의 비디오 RAM이있는 2 개의 µPD7220 디스플레이 컨트롤러 (마스터 및 슬레이브)가 있습니다. 마스터 디스플레이 컨트롤러는 글꼴 ROM을 처리하여 JIS X 0201 (7×13 픽셀) 및 JIS X 0208 (15×16 픽셀) 문자를 표시합니다.

나는 중국과 한국의 상황을 알지 못하지만 같은 기술이 사용된다고 생각합니다. 그것을 달성 할 수있는 다른 방법이 있는지 확실하지 않습니다.


답변

유니 코드 텍스트 글리프를 표시하려면 하드 코딩 된 텍스트 모드 대신 그래픽 모드가 필요합니다. 그런 다음 유니 코드 글꼴을 사용하도록 MS-DOS를 설정하고이를 사용하도록 언어 매핑을 변경하십시오.

http://www.mobilefish.com/tutorials/windows/windows_quickguide_dos_unicode.html