ascii 에 할당된 캐릭터 값의 의미.
안녕하세요.
DOSBOX 관련되서 이것저것 보고 있습니다. 프로젝트 진행하다 시간 나면 짬짬히 들여다 보는 수준이라서 더디네요.
예전부터 궁금하던것중 하나가 왜 숫자 1의 해당하는 HEX값은 0x31이고 2는 0x32....9는 0x39 인가 였습니다.
또 대문자 A의 hex 값이 소문자 a보다 작은지도 의문이였는데요.
결국 이모든건 폰트의 순서에 의해서 그렇게 할당 되었네요.
https://www.rapidtables.com/code/text/ascii-table.html
위의 표를 보면 숫자 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
즉 여기서 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가 먼가했네요.
감사 합니다.
'습작 및 R&D' 카테고리의 다른 글
Hello World 가 .com 파일과 .exe 용량이 다른 이유. (0) | 2023.04.21 |
---|---|
DOSBOX 빌드 관련. (0) | 2023.04.20 |
CHIP8 Brix 관련 분석 내용. (0) | 2023.04.11 |
x86은 encoding 자체가 너무 복잡하네요. (0) | 2022.02.21 |
엑셀 CSV 파일 파싱하기. (0) | 2021.11.10 |