26. SCR_MODE

*------------------------------------------------------------------------------
* NAME          SCR_MODE
*------------------------------------------------------------------------------
* DEPENDENCY    None
* PURPOSE       Check the mode & set if required
* DESCRIPTION   Checks for the mode passed in D0 and if not correct, change to
*               that mode.
* INPUTS :
*               D0.B = 4 or 8 for required mode
* OUTPUTS :
*               D0 = Error code
*               Z flag set if no errors, unset otherwise.
*------------------------------------------------------------------------------
scr_mode        move.l   d1-d2/d7/a3,-(a7)  ; Save working registers
                move.b   d0,d7              ; Save required mode
                cmpi.w   #4,d7              ; Is mode 4 required ?
                bne.s    scrm_8             ; Nope.
                clr.b    d7                 ; Mode 4 requires 0
scrm_8          moveq    #mt_dmode,d0
                moveq    #-1,d1             ; Read current mode
                moveq    #-1,d2             ; Read current display type
                trap     #1                 ; Do it
                tst.l    d0                 ; Did it work ?
                bne.s    scrm_exit          ; No, bale out
                cmp.b    d1,d7              ; Are we in the correct mode ?
                beq.s    scrm_exit          ; Don't set mode if already correct (Z
*                                           ; set = no errors & D0 = zero)
                moveq    #mt_dmode,d0
                move.b   d7,d1              ; Get the required mode from D7
                trap     #1                 ; Set mode
                move.l   (a7)+,d1-d2/d7/a3  ; Restore working registers
                tst.l    d0                 ; Set Z flag if no errors
scrm_exit       rts