$40 : B_SEEK (2HD) : X68000 IOCS CALL

・B_SEEK IOCS 콜 번호 : $40 (2HD)

기능 
 디스크 시크 (2HD)

입력
 D0.L  $40   IOCS 콜 번호
 D1.W  PDA ✕ 256+MODE
 D2.L  목적 시크 위치

리턴
 D0.L  스테이터스

해설
디스크의 지정 위치까지 시크합니다.
입력의 D1.W는 상위 8비트가 PDA, 하위 8비트가 MODE입니다.
PDA는 2HD 디스 관계의 콜에서는 다음과 같이 되어있습니다.

 PDA = $90    2HD DRIVE 0
     .             .
     .             .
     .             .
 PDA = $93    2HD DRIVE 3

MODE의 내용은 다음을 따릅니다. (다른 비트는 항상 0입니다)

 비트 6 : MFM   FM/MFM 모드 전환
          0    FM (단밀도)
          1    MFM (배밀도)
 비트 5 : RETRY
          0    리트라이 하지 않는다
          1    리트라이 한다
 비트 4 : SEEK
          0    시크 동작을 하지 않고 실행
          1    시크 동작을 하고난 뒤 실행
주 : MFM은 시스템에서는 MFM 모드에서 사용합니다.
리트라이의 경우, 10회 리트라이 하고 최초 5회는 시크하지 않은채, 이후 5번은 리캘리브레이트, 시크를 동반한 리트라이를 합니다.

입력의 D2.L은 목적의 시크 위치를 지정합니다.
내용은 다음과 같습니다.

     D31 D30 D29 D28 D27 D26 D25 D24 | D23 D22 D21 D20 D19 D18 D17 D16
D2.L            섹터 길이             |              트랙
     D15 D14 D13 D12 D11 D10 D09 D08 | D07 D06 D05 D04 D03 D02 D01 D00
                  사이드              |              섹터
         
섹터 길이의 지정은 다음과 같습니다.
 0   128 바이트
 1   256 바이트
 2   512 바이트
 3  1024 바이트
리턴의 D0.L은 FDC의 스테이터스입니다.
스테이터스의 내용은 다음과 같습니다.

 비트 31~24 : ST0   리절트 스테이터스 0
 비트 23~16 : PCN   커맨드 종료시의 실린더 번호
 비트 15~0  : 부정

리절트 스테이터스 0 (ST0)의 상세한 내용은 부록 6. FDC의 스테이터스를 참조해 주세요.

프로그램 예
******************************************
** B_SEEK                              $40
******************************************

           .include    iocscall.mac
           .include    doscall.mac
iocs     equ     $0f
         
         .text
         .
         .
         moveq.l  #_B_SEEK,d0      * IOCS 콜 번호 세트
         move.w   #$90_70,d1       * pda = $90, mode = %0111_0000 = $70
         move.l   #$03_05_01_08,d2 * sector길이=3, track=5, side=1, sector=8
         trap     #iocs            * IOCS 콜
         .
         .
         .end

댓글 남기기