2023. 4. 12. 22:20

ascii 에 할당된 캐릭터 값의 의미.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요. 

DOSBOX 관련되서 이것저것 보고 있습니다. 프로젝트 진행하다 시간 나면 짬짬히 들여다 보는 수준이라서 더디네요.

result.txt
0.04MB

예전부터 궁금하던것중 하나가 왜 숫자 1의 해당하는 HEX값은 0x31이고 2는 0x32....9는 0x39 인가 였습니다.

또 대문자 A의 hex 값이 소문자 a보다 작은지도 의문이였는데요.

결국 이모든건 폰트의 순서에 의해서 그렇게 할당 되었네요.

https://www.rapidtables.com/code/text/ascii-table.html

 

ASCII Table - ASCII codes,hex,decimal,binary,html

ASCII (American Standard Code for Information Interchange) character code chart with decimal,hex,binary,HTML and description: What is ASCII code ASCII (American Standard Code for Information Interchange) is a 7-bit characters code, with values from 0 to 12

www.rapidtables.com

위의 표를 보면 숫자 0 은 48 HEX 로는 0x30 캐릭터로는 '0' 이 됩니다.

대문자 A의 경우 65 HEX 로는 0x41 캐릭터로는 'A' 가 됩니다.

소문자 a의 경우 97 HEX 로는 0x61 캐릭터로는 'a' 가 됩니다.

이 헥스 값은 ASCII 미국 표준이라서 그런가보다 했는데요. 

해당값은 FONT의 순서에 따라서 저장된 것이네요.

 

즉 font[48] = 0 을 그리는것이고, font[41]은  A 를 그리는 거네요.

해당 font 의 bitmap 데이터는 원래는 VGA 카드에 저장이 되었다고 하는데요.

DOSBOX에서는 해당 VGA ROM에 위의 폰트 데이터의 HEX값을 특정 메모리에 저장해 놓고 render를 하는것 같습니다.

 

http://staff.ustc.edu.cn/~xyfeng/research/cos/resources/machine/mem.htm

 

Memory Layout and Memory Map

Memory Layout and Memory Map Memory Layout Overview: As a result of the design decisions made in the earliest PCs, memory is broken into the following four basic pieces (with some of the pieces being divided further): Conventional Memory: The first 640 KB

staff.ustc.edu.cn

즉 여기서 VGA ROM의 주소 C0000 -  C7FFF 에 해당 font를 집어 넣어두는게 아닐까 싶습니다.

그래서 키보드 A를 타이핑 하게 되면 , 키보드 A 키를 메모리 어딘가에 HEX값 (0x40) 로 저장한 후

그 HEX값을 읽어 들여서 해당 font가 있는 주소값을 계산한 후 ,

위의 video ram에 해당 bitmap font 데이터를 load 한 후 VGA 카드가 해당 내용을 60Mhz 속도로 읽어서 모니터에 표시 하는 원리 입니다.

추가로 bitmap font의 경우 흑백만 표시해도 되므로, hex를 0 과 1로 변환하 여 8*8, 16*16 , 32*32 이런식의 배열에 담아 둡니다. 

그래서 1의 해당 화면의 픽셀로 표시하는방식입니다. 

...

왜 아스키 값이 저리 할당되었고, 키보드 레이아웃이라든지, ASCII의 standard가 먼가했네요.

감사 합니다.