2026년 3월 26일 목요일

[모니터] LCD 화면에 스캔라인 넣기

[서론]


아마 제목 때문에 Scanline Eraser를 떠올리신 분이 계실지도 모르겠네요.

2011년에 만든 물건이라 잊으신 분들이 더 많겠습니다 ㅎ.ㅎ

https://sharksym.blogspot.com/2011/02/scanline-eraser.html


이번에는 LCD 모니터(TV SCART)에 CRT 스캔라인과 비슷한 기능을 넣어보았습니다.


제가 메인으로 쓰고 있는 17인치 LCD가 있습니다. GT에 항상 연결된 상태입니다!

2005년부터 쓰던 물건이라 해상도가 1280 x 768로 좀 떨어지긴합니다요.


보통 외장 업스케일러를 쓰시는 분들을 보면,

주로 레트로 게임기의 240p, 480p 화면을 정수배 스케일링 + 스캔라인 필터를 사용하는데요.

1440p인 QHD 또는 2160p의 UHD 모니터가 주로 쓰이더라구요.


TMS9918은 상하 테두리(BD)를 제외하면 메인 화면은 192라인입니다.

V9938/9958은 테두리를 제외한 기본 화면은 212라인 + 16라인(수직 쉬프트) = 228라인이구요.

오버스캔 트릭을 쓰면 240라인을 모두 쓸 수 있죠.


MSX2 이상의 기종에서 정수배 스케일링을 쓰려면 QHD 이상으로 가야하는데...

제가 쓰는 구닥다리 768p 모니터에서는 192라인 x 4 = 768라인이 됩니다.

MSX1 화면을 정수배로 업스케일 후 스캔라인 효과를 먹이는 건 가능하다는 얘기죠.

초기 MSX1용 게임들을 즐기는 경우에 유용하게 쓸 수 있겠습니다 ㅎ.ㅎ



[본론]


제가 쓰는 LCD는 2005년에 직접 개발했던 펌웨어가 적용되어있습니다.

지금도 코드 빌드하고 다운로드 하는 건 별 문제없이 할 수 있어요.

먼저 코드를 수정해서, 192라인을 4배 스케일링을 해서 픽셀을 딱 맞춰 놓습니다.


그럼 이제 스캔라인 효과를 만들어야하는데요.

단순히 검정 라인으로 표시한다면, 프레임 버퍼의 각 라인 사이에 빈 라인을 두면 쉽게 구현됩니다.

1번 라인 캡쳐 + 라인 메모리 스킵(검정라인) +

2번 라인 캡쳐 + 라인 메모리 스킵(검정라인) +

...

192번 라인 캡쳐 + 라인 메모리 스킵(검정라인)


이렇게 되겠죠? 192라인을 캡쳐하면 실제 데이터는 384라인이 되겠구요.

이걸 그대로 2배 스케일링해서 출력하면 됩니다. 간단하죠?

근데 이렇게 하면 조금 재미없으니, 다른 방법으로 해보아요~


이번에는 입력된 라인을 연속으로 캡쳐 후 4배 스케일링 하도록 둡니다.

이 상태에서 업스케일된 각 4개 라인의 마지막 라인과, 인접한 다음 4개 라인의 첫 라인을 지워줍니다.

보통 업스케일을 하면 각 픽셀이 보간(인터폴레이션) 되기 때문에 경계면 양쪽을 함께 지워야 이쁘게 나와욤.

참고로, 비디오 칩에 따라서는 보간을 끄고 픽셀을 정수배로 늘리는 방식도 있습니다. 보통 라인 더블러가 이런식이죠.


별 내용 아닌데, 글로 적으려니 힘드네요. 아래 스샷을 보시죠!

각 블럭이 실제 화면의 1픽셀입니다.



이해되시죠? ㅎ.ㅎ

사실 위에 설명했던 내용은 20세기 에뮬인 paraMSX에 그대로 적용되어 있습니다.


.

.

.

그럼 이걸 LCD 펌웨어에 어떻게 적용하느냐가 문제인데요.

보드에 들어있는 칩은 업스케일 후 별도의 버퍼없이 출력단(LVDS)으로 넘어가기 때문에,

밝기 낮춘 픽셀을 추가로 그려넣을 수는 없습니다.

대신 이런 비디오 칩은 오버레이 기능이 들어있는데요.

비디오 채널 외에 배경 또는 그래픽 데이터를 오버레이 할 수 있습니다.

특히 그래픽 레이어는 알파블렌딩이 가능합니다.

대게 OSD를 표시할 때 쓰입니다. 메뉴, 채널 정보 등등...


그럼, 그래픽 레이어에 투명색 2라인 + 검정색 2라인 + ... 반복해서 768라인을 채워놓고요.

이걸 비디오 위에 오버레이하면 되겠죠?


아래 스샷들은 GT의 출력입니다. 참고하세요.


MSX 부팅로고와 알레스트2 타이틀 화면은 이렇게 나옵니다.




텍스트도 보시죠. 잘 보이도록 확대했어요.



아래는 화면의 절반(윗부분)만 스캔라인 효과를 적용한 모습입니다.

두 부분의 차이가 잘 보이네요.



그리고, 알파블렌딩 값은 리모컨으로 변경(10단계)할 수 있도록 해놨습니다.

50% 정도 먹인 상태가 적당하네요.


그럼, 즐 MSX 하셔요~ ㅎ.ㅎ/


2026년 3월 23일 월요일

WAU - Big B Radio 스트리밍 사이트

 


Download: PLS_Big_B_Radio.zip

Big B Radio라는 K-Pop, J-Pop 스트리밍을 해주는 서버를 찾았습니다.

M에서 PLS 파일로 MP3 스트리밍을 하려면, WAU가 필수입니다! ㅎ.ㅎ


2026년 3월 10일 화요일

MMC/SD Drive V3/V4 - BIOS & Tool v5.80

Download: 20260310_MMCSD_Drive_V3_V4_BIOS_Tool_v580.zip


--------------------------------------------------

MMC/SD Drive(tm) V3/V4 - BIOS & Tool

    By Yeongman Seo <sharksym@hitel.net>

--------------------------------------------------



[ BIOS & Tool v5.80 ]


- FDD_EMU


  SLT-Turbo용 DiskROM 패치 지원 (Shadow RAM BIOS)

  /DT 옵션 사용, V4는 SCC-I 128KB 모드로 전환됨



[ 업데이트 가이드 ]


1. MMCSD.COM, MMCSD.OVL 두개 파일을 SD카드에 복사.

   기존 파일을 덮어쓰면 됩니다.(예:UTILS 디렉토리)


2. MMCSD.COM 프로그램을 실행 또는 MMCSD /U 실행


3. 'Update BIOS-ROM? [y/N]' 메시지가 나오면 Y키 누름.


4. 다운로드 완료 후 RETURN키 눌러서 재부팅.


5. 끝


SLT-Turbo 제작 #20 - FDD_EMU

본체에 내장된 FDD는 SLT-Turbo에서 직접 접근하는 것이 불가능합니다.

파나소닉의 MSX2+ 및 turboR 기종들은 본체의 FDD가 SLOT 3-2에 위치하는데요.

SLT-Turbo의 GT 모드에서도 마찬가지로 SLOT 3-2에 디스크롬이 존재합니다.


만약 SLT-Turbo에서 디스크 읽기 명령이 들어오면 아래의 순으로 작업이 이루어집니다.


1. SLT-Turbo 디스크롬에서 본체로 디스크 읽기 커맨드 전송

2. 본체는 커맨드 수신 후, FDD 디스크롬의 루틴을 구동하여 공유 메모리로 데이터 로딩

3. 본체에서 SLT-Turbo로 커맨드 완료 알림

4. SLT-Turbo에서 공유 메모리의 데이터를 원래 목적지(Target addr)로 복사


이미 SLT-Turbo를 꽂고 본체의 FDD를 구동해보신 분도 계실텐데요.

암튼 여기까지는 기본기능이니까, 바로 본론으로 넘어갑니다~~ ㅎ.ㅎ/


아마 본체에 장착된 FDD는 사용할 기회가 많지 않다고 봅니다.

그래서 디스크 이미지(DSK 파일) 에뮬이라도 넣으면 좀 쓸모가 있으려나? 생각되더라구요.


사실 이걸 처음부터 생각한 것은 아닙니다.

어차피 MMC/SD V4가 있으니 DSK 에뮬 자체가 필요할 이유는 딱히 없죠 ㅎ.ㅎ

.

.

.


며칠 전, 오랜만에 SCMD로 듀얼 SCC-I 사운드를 들어보려고 했는데요.

SLT-Turbo를 쓰다보니, 이젠 SCMD 구동에 필요한 기기 구성을 하지 못하게 되었더라구요.

SCMD는 SCC-I 사운드 카트리지 2개가 기본 슬롯 2개에 따로 장착이 되어야 제대로 쓸 수 있습니다.

프로그램 자체의 제약이라고 할 수 있는데요.


예전에는 SLOT 1-0, 2-0에 SCC-I를 하나씩 꽂고, 개조한 GT의 SLOT 0-1에 MMC/SD를 꽂으면...

SCMD를 구동할 수 있는 환경이 되었죠.

SLT-Turbo는 SLOT 0-x, 3-x가 모두 기기에 내장되어있고, 외부 커넥터는 SLOT 1, 2만 사용가능합니다.

따라서, SCMD를 쓸 때는 본체의 FDD를 강제로 써야하는 상황이 된거죠.

오랜만에 2DD로 부팅해서 SCMD를 돌려보니, 인내심의 한계가 오네요ㅋ


다른 방법을 생각해봅니다!


SLOT 1-0 = T-Wave    (SCC-I 128KB)

SLOT 2-0 = MMC/SD V4 (SCC-I 128KB 모드)

SLOT 3-2 = DiskROM (본체 FDD 연동)


위의 상태에서 내장 디스크롬(SLOT 3-2)을 구동할 때,

본체의 FDD 대신 SLOT 2-0의 V4를 잠깐 디스크 모드로 변경해서 구동하는 방법입니다.


SCC-I 메모리 내에서 코드(ISR 관련 등)가 동작하고 있더라도,

디스크 관련 처리 시 인터럽트를 잘 막아주면(disable), V4의 동작모드를 전환해도 괜찮을 것 같더라구요.


만약 SLT-Turbo에서 디스크 읽기 명령이 들어오면, 디스크롬에서는 아래의 순으로 작업이 이루어집니다.


1) 인터럽트 금지 후, V4를 디스크 모드로 변경

2) V4의 디스크 루틴을 호출하여 디스크 R/W 처리

3) V4를 SCC-I 모드로 변경 후, 인터럽트 금지 해제


이 때, V4는 2DD_EMU 모드(DSK 이미지)로 동작할 수 있도록 미리 셋업이 되어있어야 합니다.


결국 S/W는 SLOT 3-2의 디스크 루틴을 사용하지만, 실제로 동작하는 디스크는 SLOT 2-0의 V4가 되겠네요.


물론 이 방법은 약간의 제약은 있습니다.

보통 DOS2에서는 디스크 액세스 시, 목적지(target) 주소가 항상 DOS2의 데이터 세그먼트로 설정됩니다.

그러니까 항상 메모리 매퍼 세그먼트가 된다는 얘기죠.


근데, DOS1에서는 메모리가 아닌 슬롯도 목적지 주소로 쓸 수 있습니다.

만약 주소 영역이 SLOT 2-0 슬롯이 된다면, 데이터를 제대로 로딩할 수가 없겠죠.

S/W에서는 디스크롬(SLOT 3-2) -> 목적지 메모리(SLOT 2-0)로 로딩했는데,

실제로는 FDD_EMU가 동작하면서, SLOT 2-0이 메모리(SCC-I SRAM)가 아닌 디스크롬으로 변경되니까요 ㅎ.ㅎ


만약 S/W에서 항상 메인 메모리(또는 V4가 아닌 슬롯)로 로딩하는 경우는 안전하게 쓸 수 있겠습니다.

흐흠... 원래 목표(?)였던 SCMD에서는 제대로 동작할까요?


영상으로 직접 확인하시죠. OUT RUN의 Passing Breeze 음악도 즐기면서요~ ㅎ.ㅎ/





PS.

사실 이 SLOT 3-2 FDD_EMU 모드는 이미 있던 기능이었습니다.

MMCSD.COM을 실행할 때, turboR에서는 /DT 옵션을 쓸 수 있는데요.

DOS2의 디스크 액세스 시 CPU 모드 전환하는 코드를 패치해서, V4의 디스크를 대신 구동하는 방식이었는데...

이 방법은 DOS1에서는 쓸 수 없어서, 그닥 활용되지는 못했습니다.


이번에 구현된 FDD_EMU 모드는,

SLT-Turbo의 BIOS Shadow 영역(RAM)의 DiskROM 코드를 직접 변경하는 방식이라서,

DOS1, DOS2 환경에 상관없이 모두 동작합니다.


그리고, V4의 부트메뉴에서 S키를 눌러서 SCC-I 128KB 모드를 설정하는 게 아닌,

MMCSD.COM 툴에서 자동으로 설정이 되니까 더 편하게 쓸 수 있어요.

위의 영상에서도 보셨겠지만, /DT 옵션 하나만 적용하면 끝입니다 ㅎ.ㅎ


그럼, 이만...