BASIC 모드에서 DOS 모드로 복귀(전환) 후 특정 커맨드를 자동으로 실행하는 방법입니다.
어떻게 구현하는지 궁금해하시는 분이 계셔서, 직접 보여드리겠습니다요~ ㅎ.ㅎ
일단 도스로 복귀하는 방법부터 알아야겠네요.
BASIC에서 CALL SYSTEM 명령을 사용하면 됩니다.
(참고로 CALL은 MSX에서 외부 슬롯의 BASIC 커맨드를 실행하는 명령어입니다.)
여기서 한가지 알고계셔야 할 부분은,
DOS1에서는 CALL SYSTEM 명령으로 DOS 복귀만 가능.
DOS2에서는 CALL SYSTEM("문자열") 식으로 DOS 복귀 후 실행할 명령까지 입력가능.
이라는 점입니다.
지금부터 설명드릴 "DOS 복귀 후 커맨드 실행하기"는 DOS1 환경 기준입니다.
DOS2에서는 CALL SYSTEM("문자열")만으로 쉽게 가능하다고 위에서 알려드렸구요.
DOS1에서 이걸 구현하려면, 약간의 꼼수가 필요합니다.
워낙 유명한거라서 아시는 분들이 많을꺼에요. ㅎ.ㅎ
바로 "WORKAREA의 키입력 버퍼에 글자 밀어넣기"가 되겠습니다.
MSX의 BIOS에서는 주기적(VDP VBLANK 인터럽트)으로 키보드 입력을 체크해서 버퍼에 채워넣습니다.
키 매트릭스 버퍼는 현재 눌려진 키(스위치)의 상태를 나타내구요.
키입력 버퍼는 눌러진 키를 ASCII 코드로 변환하여 순서대로 채워넣습니다.
여기서 키입력 버퍼는 40바이트의 원형 버퍼(Circular Buffer/Queue)로 구현되어있구요.
WORKAREA FBF0H 부터 할당이 되어있습니다.
원형 버퍼니까 쓰기/읽기 포인터가 필요한데요.
각각 WORKAREA F3F8H, F3FAH에 저장됩니다.
여기에 ASCII 코드를 채워넣으면, 사용자가 키보드를 직접 누르지 않더라도 키입력이 된 것처럼 만들 수 있어요.
그럼 간단한(?) BASIC 프로그램으로 동작을 보여드리겠습니다요~
아래는 BASIC 모드에서 DOS 모드로 복귀 후, DIR 명령을 수행하는 프로그램입니다.
DOS 복귀 전에, 키입력 버퍼에 DIR + '\r' 4바이트 문자를 넣어서 자동으로 실행되는 것이죠.
프로그램 자체는 C$ 문자열을 키입력 버퍼에 집어넣고, CALL SYSTEM을 수행하는게 전부입니다.
DOS2에서는 그냥 CALL SYSTEM("DIR") 하면 끝나는 작업을, DOS1에서는 이렇게 힘들게 해야되네요.ㅋ
그럼, 실제로 실행해보겠습니다.
해당 BASIC 프로그램은 DIR.BAS라는 이름의 파일로 저장했습니다.
DOS 부팅 후 BASIC DIR.BAS 명령으로 프로그램을 실행하면...
BASIC 모드에서 DIR.BAS 프로그램이 실행되어 다시 DOS로 돌아옵니다.
복귀하면 자동으로 DIR 명령이 수행되구요.
어떻게 구현하는지 아시겠죠? ㅎ.ㅎ
그럼, 즐거운 밤되셔요~