X68000용 CCOMPILER PRO-68K ver2.0 프로그래머즈 매뉴얼 IOCS CALL

제 3 장 IOCS 콜 ( 디스크 드라이브 제어 관련 부분 발췌 )

DOS 콜과 함께 X68000에서 사용할 수 있는 펑션 콜의 하나로, 이 IOCS 콜이 있습니다.
본서 제 2장에서 해설하고 있는 DOS 콜이 Human68k 내부의 서브루틴을 콜하고 있는 것에 대해, IOCS콜은 X68000내의 ROM에 적혀있는 서브루틴을 콜하고 있습니다.

3.1 IOCS 콜 일람

IOCS 콜의 일람을 표시합니다.
처음에는 코드 순, 다음이 이름 순입니다.
또, IOCS 콜에서 사용하는 이외의 TRAP 벡터에 대해서도 보여줍니다.

IOCS 콜 (코드 순)

코드  이름       기능                                페이지
$40  B_SEEK    디스크의 시크 (2HD)                   334
$40  B_SEEK    디스크의 시크 (하드디스크)              337
$41  B_VERIFY  디스크 데이터의 베리파이 (2HD)          339
$41  B_VERIFY  디스크 데이터의 베리파이 (하드디스크)     341
$42  B_READDI  진단을 위한 디스크로부터의 읽기          343
$43  B_DSKINI  디스크의 초기화 (2HD)                 345
$43  B_DSKINI  디스크의 초기화 (하드디스크)            347
$44  B_DRVSNS  디스크 상태 체크                      348
$45  B_WRITE   디스크로의 쓰기                       349
$46  B_READ    디스크로부터 읽기                     351
$47  B_RECALI  디스크의 리캘리브레이트 (2HD)           353
$47  B_RECALI  디스크의 리캘리브레이트 (하드디스크)      355
#49  B_WRITED  파손 데이터 쓰기 (2HD)                356
#4A  B_READID  ID 정보 읽기         Ver1.0 매뉴얼에만 수록
$4B  B_BADFMT  파손 트랙을 사용 불능으로 하기 (하드디스크) 357
$4C  B_READDL  파손 데이터 읽기 (2HD)                358
$4D  B_FORMAT  디스크 포맷 (2HD)                    360
$4D  B_FORMAT  디스크 포맷 (하드디스크)               362
$4E  B_DRVCHK  드라이브 상태 설정 (2HD)              363
$4F  B_EJECT   이젝트 (2HD)                        365
$4F  B_EJECT   십핑 (하드디스크)                     366

IOCS 콜 (이름 순)
생략

참고자료 : TRAP 15 이외의 시스템 TRAP

・TRAP8    시스템 예약

・TRAP9    OS 디버그용

・TRAP10   리셋/프론트 SW/외부 SW/소프트 OFF 처리
   입력 D0.L = $58363801  프론트 SW
            = $58363802  외부 SW
            = $58363803  소프트 OFF
            = 그 외       리셋

・TRAP11   [BREAK]키 처리
   입력 D0.B의 비트 0 = 0  [BREAK] ([CTRL]+[C])
                    = 1  [SHIFT]+[BREAK] ([CTRL]+[S])

・TRAP12   [COPY]키 처리
   입력 D0.B = 0  축소 카피 (1색)
            = 1  확대 카피 (1색)
            = 2 또는 3  확대 카피 (4색)

・TRAP13   [CTRL]+[C]처리

・TRAP14   에러 표시와 처리
   입력 D7.W = 에러 코드

3.2 IOCS 콜 상세

3.2.1 IOCS 콜 사용 방법

IOCS 콜은 MPU68000 특유의 명령인 TRAP 명령을 사용해 호출합니다.
TRAP 명령은 MPU68000의 예외처리를 기동하는 명령의 하나로 특히 시스템에 예약 되어있는 소프트웨어 예외처리를 할 때 사용합니다.
X68000의 IOCS 콜에는 수많은 시스템 TRAP 중에 소프트웨어 예외처리의 15번을 사용합니다. (TRAP15)
레지스터 D0에 IOCS 콜 번호를 세트하고 그 뒤 TRAP15를 실행하면 시스템은 예외처리 벡터 번호 $2F를 발생시켜 이것에 의해 $0BC에 써져있는 어드레스에 분기하고 여기서 D0의 IOCS 콜 번호를 확인하고나서 IOCS 콜의 서브루틴으로 분기하는 것입니다.
실제의 실행예를 다음에 나타냈습니다.

MOVEQ.L #no, D0    * no는 IOCS 콜 번호
TRAP    #15

또는 매크로를 사용해서

include  iocscall.mac
   .
   .
   .
IOCS     _B_KEYINP

리턴 값이 있는 것은 리턴 시에 레지스터와 지정한 메모리 등에 값을 반환합니다.
IOCS에서 사용하는 메모리는 다음과 같이 되어있습니다.

$000000 ~ $0003FF  =  인터럽트 / TRAP / 그 외 시스템용
$000400 ~ $0007FF  =  IOCS 콜 처리 테이블 용
$000800 ~ $000FFF  =  IOCS 워크
$001000 ~ $0017FF  =  시스템용 워크
$001800 ~ $001BFF  =  DOS 콜 처리 테이블 용
$001C00 ~ $001FFF  =  Human68k 워크
$002000 ~ $0023FF  =  2HD용 IPL, 또는 HD용 IPL MENU 프로그램
$002400 ~ $0027FF  =  HD용 IPL 프로그램
$00???? ~ $0067FF  =  Human68k 스택 (SSP)
$006800 ~ ???????  =  Human68k

3.2.2 IOCS 콜 해설 방법

3.2.3 부터는 다음과 같은 형식으로 IOCS 콜을 해설합니다.

・이  름        IOCS 콜 번호 : $??
기      능      기능의 해설
입      력      입력 파라미터의 해설
리      턴      리턴 값
해      설      기능의 자세한 해설
프로그램 예      IOCS 콜을 사용한 작은 프로그램, 서브루틴 등의 예  

・이름
설명하는 IOCS 콜의 이름입니다.
이름은 기능을 나타내도록 되어있습니다.

・IOCS 콜 번호
IOCS 콜의 기능을 나타내는 번호입니다.
16진수 2자로 써있습니다.
입력 파라미터인 D0.L에 대입합니다.

・기능
기능의 개요를 나타냅니다.

・입력
콜에 필요한 입력 파라미터를 나타냅니다.
D0.L에는 IOCS 콜 번호를 입력합니다.
A0 레지스터는 입력으로 지정할 수 없습니다.
A0 이외의 레지스터에 대해서는 각각의 IOCS 콜에 따라 다릅니다.

・리턴
IOCS 콜의 결과를 몇 개의 레지스터에 반환하는 경우가 있습니다.
각각 IOCS 콜에 따라 차이가 있습니다.
원칙으로 여기서 지정한 이외의 레지스터 (D0 제외)는 파괴되지 않습니다.
레지스터 표에 ▒▒▒처럼 색칠 되어있는 것은 입력 파라미터와 리턴 값에 사용되는 것을 표시합니다.

・해설
기능의 해설보다 상세한 해설을 보여줍니다.

・프로그램 예
이 IOCS 콜을 호출할 때의 시퀀스 상태, 또는 IOCS 콜을 사용하는 작은 서브루틴, 프로그램 등을 예로 보여줍니다.

3.2.3 개개의 IOCS 콜

IOCS 콜 번호화 각각의 기능 또는 그 입력(파라미터), 리턴 (값)을 다음에 표시합니다.
또, 다음의 IOCS 콜은 시스템 예약의 IOCS 콜입니다.

IOCS 콜 번호 : $03
IOCS 콜 번호 : $05~$0B
IOCS 콜 번호 : $14
IOCS 콜 번호 : $36~$3A
IOCS 콜 번호 : $48
IOCS 콜 번호 : $4A
IOCS 콜 번호 : $91~$93
IOCS 콜 번호 : $95~$9F
IOCS 콜 번호 : $A6~$AD
IOCS 콜 번호 : $B0
IOCS 콜 번호 : $D0~$D2
IOCS 콜 번호 : $D5
IOCS 콜 번호 : $D9~$DE
IOCS 콜 번호 : $E0~$FF

댓글 남기기