2016년 2월 20일 토요일

메인 메모리의 최대치는?

얼마나 많은 메모리를 쓸 수 있을지 한번 테스트해보았습니다.

메인 메모리로 사용되는 메모리 매퍼만 의미합니다. VRAM 이런건 제외하구요.


실기에 4MBytes 확장램 카트리지를 꽂아서 테스트하면 좋겠지만,

제가 가진 카트리지가 얼마안되니, 에뮬레이터의 힘을 빌렸습니다.


참고로 MSX 슬롯은 총 16개이구요.

MSX2 이상인 경우 메인/확장 BIOS가 슬롯2개를 점유하니까,

남은 슬롯에 메모리 몽땅 장착하면 14개, 총 용량 4MB x 14 = 56MBytes 넣을 수 있습니다.

근데 이렇게 다 채우면, 디스크 드라이브도 없고 DOS2도 없고... 사실 할 수 있는게 없어요. ㅎ.ㅎ


그래서 일반 MSX2+ 모델인 파나소닉 A1WSX 모델을 기준으로 테스트하였습니다.

blueMSX의 A1WSX 머신 컨피그를 기본으로 사용합니다.

슬롯0,1,2,3 모두 확장한 상태에서 BIOS 등의 내장 롬이 있는 슬롯 외엔 몽땅 램 4MBytes 장착!!

컨피그 파일은 아래처럼 됩니다.

[CMOS]

Enable CMOS=1

Battery Backed=1

[FDC]

Count=1

[CPU]

Z80 Frequency=3579545Hz

[Board]

type=MSX-T9769B

[Video]

version=V9958

vram size=128kB

[Subslotted Slots]

slot 0=1

slot 1=1

slot 2=1

slot 3=1

[External Slots]

slot A=1 0

slot B=1 1

[Slots]

0 0 0 0 84 "" ""

0 0 0 0 32 "" ""

0 0 0 0 34 "" ""

0 0 0 0 26 "" ""

0 0 0 0 24 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wskfn.rom" ""

0 0 0 4 20 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wsbios.rom" ""

0 1 0 4096 22 "" ""

0 2 2 2 78 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wsmus.rom" ""

0 3 0 4096 22 "" ""

1 2 0 4096 22 "" ""

1 3 0 4096 22 "" ""

2 0 0 4096 22 "" ""

2 1 0 4096 22 "" ""

2 2 0 4096 22 "" ""

2 3 0 4096 22 "" ""

3 0 0 4096 22 "" ""

3 1 0 2 20 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wsext.rom" ""

3 1 2 4 42 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wskdr.rom" ""

3 2 2 4 57 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wsdisk.rom" ""

3 3 0 6 142 "Machines\MSX2+ - Panasonic FS-A1WSX\a1wsfirm.rom" ""

 


늘어난 램을 쉽게 테스트하기 위해, DOS2로 부팅합니다.

카트리지 슬롯 A에 DOS2를 장착하구요, 슬롯 B에는 4MBytes 램 카트리지 장착했습니다.

결국 램이 장착된 슬롯은 아래처럼 되네요.

슬롯0-1, 슬롯0-3

슬롯1-0, 슬롯1-2, 슬롯1-3

슬롯2-0, 슬롯2-1, 슬롯2-2, 슬롯2-3

슬롯3-0


슬롯 10개에 모두 4MBytes, 총 용량 40MBytes를 장착했습니다. ㅎㄷㄷㄷㄷ


그럼 제대로 부팅되는지 볼까요?

아래처럼 정상적으로 40960KBytes 표시됩니다.

전원 올리면, 화면 깜깜한 상태로 한참 있길래 안켜지는 줄 알았습니다.ㅋ

40메가 램 체크하는데 시간이 좀 걸리네요.




DOS2 부팅 후, 매퍼가 모두 인식되었는지 확인해봅니다.

memory 명령을 쳤어요.

슬롯0-1의 메모리가 메인(primary) 메모리로 등록이 됐군요. 






슬롯0-1 이후 부터는,

번호가 큰 슬롯3-0 부터 역순으로 슬롯0-3까지 10개 모두 제대로 표시가 되었습니다.


음... 결론은 "40MBytes 까지는 잘 되더라" 입니다.


그럼, 즐거운 주말되셔요~ ㅎ.ㅎ


PS. MSX-DOS2의 메모리 매퍼 루틴은 한가지 제약이 있습니다.


메모리 매퍼 한개는 H/W적으로는 4MB(4,194,304 bytes)가 최대 용량이니까,

각 매퍼의 세그먼트(16KB) 갯수는 256개가 됩니다.

근데, DOS2의 매퍼 세그먼트 루틴은 Z80의 8BIT 레지스터를 세그먼트 갯수로 사용하는데,

8BIT 최대치인 255까지만 쓸 수 있어요.


위의 스크린 샷에서 total RAM 정보에 4,177,920 bytes로 나오는 이유가 그 때문입니다.

마지막 1개 세그먼트(16KB)를 사용하지 못하기 때문에 나타나는 현상이에요. ㅎ.ㅎ