*************************************************************
*                                                           *
* SECTRAN TRANSLATES A LOGICAL SECTOR # INTO A PHYSICAL     *
* SECTOR #.                                                 *
*                                                           *
*************************************************************

SECTRAN INX     B
        PUSH    D               ;SAVE TABLE ADDRESS
        PUSH    B               ;SAVE SECTOR #
        CALL    GETDPB          ;GET DPB ADDRESS INTO HL
        MOV     A,M             ;GET # OF CP/M SECTORS/TRACK
        ORA     A               ;CLEAR CARY
        RAR                     ;DIVIDE BY TWO
        SUB     C
        PUSH    PSW             ;SAVE ADJUSTED SECTOR
        JM      SIDETWO
SIDEA   POP     PSW             ;DISCARD ADJUSTED SECTOR
        POP     B               ;RESTORE SECTOR REQUESTED
        POP     D               ;RESTOR ADDRESS OF XLT TABLE
SIDEONE XCHG                    ;HL <- &(TRANSLATION TABLE)
        DAD     B               ;BC = OFFSET INTO TABLE
        MOV     L,M             ;HL <- PHYSICAL SECTOR
        MVI     H,0
        RET

SIDETWO LXI     B,17            ;OFFSET TO SIDE BIT
        DAD     B
        MOV     A,M
        ANI     8               ;TEST FOR DOUBLE SIDED
        JZ      SIDEA           ;MEDIA IS ONLY SINGLE SIDED
        POP     PSW             ;RETRIEVE ADJUSTED SECTOR
        POP     B
        CMA                     ;MAKE SECTOR REQUEST POSITIVE
        INR     A
        MOV     C,A             ;MAKE NEW SECTOR THE REQUESTED 
                                ;  SECTOR
        POP     D
        CALL    SIDEONE
        MVI     A,80H           ;SIDE TWO BIT
        ORA     L               ;       AND SECTOR
        MOV     L,A
        RET

