Memory bank
메모리뱅크란 부족한 주소라인(CPU의 bit수와 같다라고 보심 됩니다)을 극복하기 위해 나온 개념입니다. 일례로 16bit CPU에서는 CPU가 접근가능한 주소범위가 0 ~ 65535 즉 64KB뿐입니다. 이런 환경에서 64KB 이상의 메모리를 사용하기 위해서는 뱅크의 개념이 필요합니다. CPU는 항상 0x0000 ~ 0xFFFF 사이의 주소를 지정하여 데이터를 fetch 합니다. 이때 뱅크의 설정에 따라 다른 메모리로의 접근이 가능해 집니다.
무슨 얘기인고 하니, 계란판을 예로 들겠습니다. 계란판에 가로 세로 각각 8x8개 총 64개의 계란이 꽂혀있을 수 있다고 칩시다. 우리가 각 계란에게 번호를 메겨두고 1번 계란, 2번 계란, ... 64번 계란 식으로 각 계란을 지정한다고 가정해 보겠습니다. 이제 특정한 계란을 지정하기 위해서 우리는 간단하게 32번 계란! 이라고 말 할 수 있습니다. 이로서 "주소" 개념이 성립되었습니다. 그런데 한판 이상의 계란이 있다고 가정을 더 해 보겠습니다. 계란판을 가로로 8개를 늘어놓고 있습니다. 그럼 어떻게 특정 계란을 지정하시겠습니까? 네, 간단하게 4번째 계란판의 32번째 계란! 이라고 손쉽게 지정할 수 있겠지요. 여기에서 4번째라고 한 것이 뱅크 셀렉터의 개념입니다. 동일한 주소공간에 다수의 메모리를 병렬로 매핑해 둔 후, 접근 할 뱅크를 지정함으로 써 메모리를 3차원(?) 구조로 다루는 개념이라고 보시면 됩니다.
다시 16bit CPU로 돌아가보면 16bit CPU는 한번에 64KB 메모리의 주소를 지정할 수 있다고 했습니다. 64KB 이상의 메모리를 접근하기 위해서는 뱅크라는 개념이 필요합니다. 즉, 1번 뱅크, 2번 뱅크, 3번 뱅크 식으로 뱅크를 지정해줘야 한다는 것이죠. 실제로 MSDOS 시절에는 Segment:Offset 이란 구조로 주소를 지정하여 뱅크를 선택할 수 있었습니다. 또 VESA 그래픽 카드 인터페이스에서도 Video RAM을 64KB 이상 접근하기 위해서 뱅크를 지정해줘야 했습니다. 뱅크라는 개념이 생긴건 레지스터의 크기가 제한되어 있어, 한번에 접근할 수 있는 주소라인의 한계가 있었기 때문입니다.