; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; general purpose mode macros

ClockShift * 9
SyncShift * 11

; pixel rate specifiers

CRPix_24000 * 3 :OR: (0 :SHL: ClockShift)
CRPix_16000 * 2 :OR: (0 :SHL: ClockShift)
CRPix_12000 * 1 :OR: (0 :SHL: ClockShift)
CRPix_8000  * 0 :OR: (0 :SHL: ClockShift)
CRPix_25175 * 3 :OR: (1 :SHL: ClockShift)
CRPix_36000 * 3 :OR: (2 :SHL: ClockShift)

        MACRO
        VIDC_List $lbpp,$hsync,$hbpch,$hlbdr,$hdisp,$hrbdr,$hfpch, $vsync,$vbpch,$vlbdr,$vdisp,$vrbdr,$vfpch,$pixrate,$sp
        LCLA    sub
        LCLA    syncpol
 [ $lbpp = 3
sub     SETA    5
 ]
 [ $lbpp = 2
sub     SETA    7
 ]
 [ $lbpp = 1
sub     SETA    11
 ]
 [ $lbpp = 0
sub     SETA    19
 ]
 [ "$sp"=""
syncpol SETA    0 :SHL: SyncShift               ; normal sync polarity
 |
        ASSERT $sp<=3
syncpol SETA    $sp :SHL: SyncShift
 ]
        ASSERT  ($hsync :AND: 1)=0
        ASSERT  ($hbpch :AND: 1)=1
        ASSERT  ($hlbdr :AND: 1)=0
        ASSERT  ($hdisp :AND: 1)=0
        ASSERT  ($hrbdr :AND: 1)=0
        ASSERT  ($hfpch :AND: 1)=1
 [ (($hsync+$hbpch+$hlbdr+$hdisp+$hrbdr+$hfpch) :AND: 3)<>0
        ! 0, "Warning: mode unsuitable for interlaced use"
 ]
; Horizontal
        &       (&80:SHL:24) :OR: ((($hsync+$hbpch+$hlbdr+$hdisp+$hrbdr+$hfpch -2  )/2) :SHL: 14) ; HCR
        &       (&84:SHL:24) :OR: ((($hsync                                    -2  )/2) :SHL: 14) ; HSWR
        &       (&88:SHL:24) :OR: ((($hsync+$hbpch                             -1  )/2) :SHL: 14) ; HBSR
        &       (&8C:SHL:24) :OR: ((($hsync+$hbpch+$hlbdr                      -sub)/2) :SHL: 14) ; HDSR
        &       (&90:SHL:24) :OR: ((($hsync+$hbpch+$hlbdr+$hdisp               -sub)/2) :SHL: 14) ; HDER
        &       (&94:SHL:24) :OR: ((($hsync+$hbpch+$hlbdr+$hdisp+$hrbdr        -1  )/2) :SHL: 14) ; HBER
        &       (&9C:SHL:24) :OR: (((($hsync+$hbpch+$hlbdr+$hdisp+$hrbdr+$hfpch-2)/2+1)/2):SHL:14); HIR
; Vertical
        &       (&A0:SHL:24) :OR: (($vsync+$vbpch+$vlbdr+$vdisp+$vrbdr+$vfpch    -1)    :SHL: 14) ; VCR
        &       (&A4:SHL:24) :OR: (($vsync                                       -1)    :SHL: 14) ; VSWR
        &       (&A8:SHL:24) :OR: (($vsync+$vbpch                                -1)    :SHL: 14) ; VBSR
        &       (&AC:SHL:24) :OR: (($vsync+$vbpch+$vlbdr                         -1)    :SHL: 14) ; VDSR
        &       (&B0:SHL:24) :OR: (($vsync+$vbpch+$vlbdr+$vdisp                  -1)    :SHL: 14) ; VDER
        &       (&B4:SHL:24) :OR: (($vsync+$vbpch+$vlbdr+$vdisp+$vrbdr           -1)    :SHL: 14) ; VBER
; Control Register
        &       (&E0:SHL:24) :OR: (CRPix_$pixrate) :OR: ($lbpp :SHL: 2) :OR: syncpol
        &       -1
        MEND

        MACRO
        VIDC_WS  $bpp,$hpix,$vpix,$multx,$multy, $dht

        &       VduExt_XWindLimit, $hpix-1
        &       VduExt_ScrRCol, ($hpix/8)-1
        &       VduExt_LineLength, $hpix*$bpp/8
 [ "$dht" <> ""
        &       VduExt_ModeFlags, ModeFlag_DoubleVertical
        &       VduExt_ScrBRow, ($vpix/16)-1
 |
        &       VduExt_ScrBRow, ($vpix/8)-1
 ]
        &       VduExt_YWindLimit, $vpix-1
        &       VduExt_ScreenSize, $hpix*$vpix*$bpp/8

        &       VduExt_XEigFactor, $multx
        &       VduExt_YEigFactor, $multy
        MEND




VLN_0   VIDC_List 0, 72,145, 48, 640, 48, 71, 3,18,18,256,17, 0,16000,0         ; MODE 0
VLN_1   VIDC_List 1, 36, 73, 24, 320, 24, 35, 3,18,18,256,17, 0, 8000,0         ; MODE 1
VLN_2   VIDC_List 2, 36, 73, 24, 320, 24, 35, 3,18,18,256,17, 0, 8000,0         ; MODE 2
VLN_3   VIDC_List 1, 72,145, 48, 640, 48, 71, 3,18,22,250,19, 0,16000,0         ; MODE 3
VLN_4   VIDC_List 0, 72,145, 48, 640, 48, 71, 3,18,18,256,17, 0,16000,0         ; MODE 4
VLN_5   VIDC_List 1, 36, 73, 24, 320, 24, 35, 3,18,18,256,17, 0, 8000,0         ; MODE 5
VLN_6   VIDC_List 1, 36, 73, 24, 320, 24, 35, 3,18,22,250,19, 0, 8000,0         ; MODE 6
VLN_7   VIDC_List 2, 36, 73, 24, 320, 24, 35, 3,18,22,250,19, 0, 8000,0         ; MODE 7
VLN_8   VIDC_List 1, 72,145, 48, 640, 48, 71, 3,18,18,256,17, 0,16000,0         ; MODE 8
VLN_9   VIDC_List 2, 36, 73, 24, 320, 24, 35, 3,18,18,256,17, 0, 8000,0         ; MODE 9
VLN_10  VIDC_List 3, 36, 73, 24, 320, 24, 35, 3,18,18,256,17, 0, 8000,0         ; MODE 10
VLN_11  VIDC_List 1, 72,145, 48, 640, 48, 71, 3,18,22,250,19, 0,16000,0         ; MODE 11
VLN_12  VIDC_List 2, 72,145, 48, 640, 48, 71, 3,18,18,256,17, 0,16000,0         ; MODE 12
VLN_13  VIDC_List 3, 36, 73, 24, 320, 24, 35, 3,18,18,256,17, 0, 8000,0         ; MODE 13
VLN_14  VIDC_List 2, 72,145, 48, 640, 48, 71, 3,18,22,250,19, 0,16000,0         ; MODE 14
VLN_15  VIDC_List 3, 72,145, 48, 640, 48, 71, 3,18,18,256,17, 0,16000,0         ; MODE 15
VLN_16  VIDC_List 2, 72,215, 46,1056, 46,101, 3,18,18,256,17, 0,24000,0         ; MODE 16
VLN_17  VIDC_List 2, 72,215, 46,1056, 46,101, 3,18,22,250,19, 0,24000,0         ; MODE 17
;VLN_18  VIDC_List 0, 56,183,  2, 640,  2, 13, 3,17, 1,512, 1, 0,24000,0         ; MODE 18
;VLN_19  VIDC_List 1, 56,183,  2, 640,  2, 13, 3,17, 1,512, 1, 0,24000,0         ; MODE 19
;VLN_20  VIDC_List 2, 56,183,  2, 640,  2, 13, 3,17, 1,512, 1, 0,24000,0         ; MODE 20
;VLN_21  VIDC_List 3, 56,183,  2, 640,  2, 13, 3,17, 1,512, 1, 0,24000,0         ; MODE 21
VLN_24  VIDC_List 3, 72,215, 46,1056, 46,101, 3,18,18,256,17, 0,24000,0         ; MODE 24
VLN_33  VIDC_List 3, 74,127,  0, 768,  0, 55, 3,18, 0,288, 0, 3,16000,0         ; MODE 33
VLN_34  VIDC_List 3, 74, 87,  0, 832,  0, 31, 3,18, 0,288, 0, 3,16000,0         ; MODE 34

VLM_0   VIDC_List 0, 72, 63, 88, 640, 88, 73, 3,16,17,256,17, 3,16000,0         ; MODE 0
VLM_1   VIDC_List 1, 36, 33, 44, 320, 44, 35, 3,16,17,256,17, 3, 8000,0         ; MODE 1
VLM_2   VIDC_List 2, 36, 33, 44, 320, 44, 35, 3,16,17,256,17, 3, 8000,0         ; MODE 2
VLM_3   VIDC_List 1, 72, 63, 88, 640, 88, 73, 3,16,20,250,20, 3,16000,0         ; MODE 3
VLM_4   VIDC_List 0, 72, 63, 88, 640, 88, 73, 3,16,17,256,17, 3,16000,0         ; MODE 4
VLM_5   VIDC_List 1, 36, 51, 24, 320, 24, 57, 3,16,17,256,17, 3, 8000,0         ; MODE 5
VLM_6   VIDC_List 1, 36, 33, 44, 320, 44, 35, 3,16,20,250,20, 3, 8000,0         ; MODE 6
VLM_7   VIDC_List 2, 36, 31, 44, 320, 44, 37, 3,18,22,250,16, 3, 8000,0         ; MODE 7
VLM_8   VIDC_List 1, 72, 63, 88, 640, 88, 73, 3,16,17,256,17, 3,16000,0         ; MODE 8
VLM_9   VIDC_List 2, 36, 33, 44, 320, 44, 35, 3,16,17,256,17, 3, 8000,0         ; MODE 9
VLM_10  VIDC_List 3, 36, 33, 44, 320, 44, 35, 3,16,17,256,17, 3, 8000,0         ; MODE 10
VLM_11  VIDC_List 1, 72, 63, 88, 640, 88, 73, 3,16,20,250,20, 3,16000,0         ; MODE 11
VLM_12  VIDC_List 2, 72, 63, 88, 640, 88, 73, 3,16,17,256,17, 3,16000,0         ; MODE 12
VLM_13  VIDC_List 3, 36, 33, 44, 320, 44, 35, 3,16,17,256,17, 3, 8000,0         ; MODE 13
VLM_14  VIDC_List 2, 72, 63, 88, 640, 88, 73, 3,16,20,250,20, 3,16000,0         ; MODE 14
VLM_15  VIDC_List 3, 72, 63, 88, 640, 88, 73, 3,16,17,256,17, 3,16000,0         ; MODE 15
VLM_16  VIDC_List 2,112, 47,132,1056,132, 57, 3,16,17,256,17, 3,24000,0         ; MODE 16
VLM_17  VIDC_List 2,112, 47,132,1056,132, 57, 3,16,20,250,20, 3,24000,0         ; MODE 17
VLM_18  VIDC_List 0, 56,111,  2, 640,  2, 85, 3,17, 1,512, 1, 0,24000,0         ; MODE 18
VLM_19  VIDC_List 1, 56,111,  2, 640,  2, 85, 3,17, 1,512, 1, 0,24000,0         ; MODE 19
VLM_20  VIDC_List 2, 56,111,  2, 640,  2, 85, 3,17, 1,512, 1, 0,24000,0         ; MODE 20
VLM_21  VIDC_List 3, 56,111,  2, 640,  2, 85, 3,17, 1,512, 1, 0,24000,0         ; MODE 21
VLM_24  VIDC_List 3,112, 47,132,1056,132, 57, 3,16,17,256,17, 3,24000,0         ; MODE 24
VLM_25  VIDC_List 0, 96, 47,  0, 640,  0, 15, 2,32, 0,480, 0,11,25175,3         ; MODE 25
VLM_26  VIDC_List 1, 96, 47,  0, 640,  0, 15, 2,32, 0,480, 0,11,25175,3         ; MODE 26
VLM_27  VIDC_List 2, 96, 47,  0, 640,  0, 15, 2,32, 0,480, 0,11,25175,3         ; MODE 27
VLM_28  VIDC_List 3, 96, 47,  0, 640,  0, 15, 2,32, 0,480, 0,11,25175,3         ; MODE 28
VLM_31  VIDC_List 2, 72,129,  0, 800,  0, 23, 2,22, 0,600, 0, 1,36000,0         ; MODE 31

VLH_23  VIDC_List 2, 52, 47,  2, 288,  2,  1, 3,43, 4,896, 4, 0,24000,0         ; MODE 23