제 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







댓글 남기기