; Copyright 1996 Acorn Computers Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
;     http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; > $.Kernel.Source.VduModes
;

; general purpose mode macros

; mjs Kernel/HAL split
;
; BigVIDCTable is now in hardware independent format, ie. a VIDC list type 3
;
; Macro VIDC_List10 removed - hardware specific, and very old anyway! (VIDC1 is pre Medusa)
; Macro VIDC_List20 removed - hardware specific, not needed in HAL either
; Macro VIDC_ListT3 newly defined

        MACRO
$label  VIDC_List $lbpp,$hsync,$hbpch,$hlbdr,$hdisp,$hrbdr,$hfpch, $vsync,$vbpch,$vlbdr,$vdisp,$vrbdr,$vfpch,$pixrate,$sp,$int
$label  VIDC_ListT3 $lbpp,$hsync,$hbpch,$hlbdr,$hdisp,$hrbdr,$hfpch, $vsync,$vbpch,$vlbdr,$vdisp,$vrbdr,$vfpch,$pixrate,$sp,$int
        MEND


; Macro VIDC_ListT3 - for hardware independent table (using 'VIDC' list type 3 format, see PRM 5a-125)
;
        MACRO
$label  VIDC_ListT3 $lbpp,$hsync,$hbpch,$hlbdr,$hdisp,$hrbdr,$hfpch, $vsync,$vbpch,$vlbdr,$vdisp,$vrbdr,$vfpch,$pixrate,$sp,$int

        LCLA    sp
        LCLA    dwidth
        GBLA    framerate
        LCLA    framepixels

 [ "$sp"=""
sp      SETA    0                               ; normal sync polarity
 |
        ASSERT $sp<=3
sp      SETA    $sp
 ]

; just to check width is whole number of words (to suit rendering code)
dwidth  SETA    $hdisp :SHL: $lbpp
        ASSERT  (dwidth :AND: 31) = 0

framepixels SETA ($hsync+$hbpch+$hlbdr+$hdisp+$hrbdr+$hfpch)*($vsync+$vbpch+$vlbdr+$vdisp+$vrbdr+$vfpch)
framerate SETA  ($pixrate*1000+framepixels/2)/framepixels

F_$label *      framerate       ; set up frame rate symbol

;
        &       framerate        ; stash framerate before VIDC list, F_ labels are inaccurate because different monitor types use different timings
$label
        &       3                ; format (type 3)
        &       $lbpp            ; log2 bits per pixel
; Horizontal (in pixels)
        &       $hsync           ; sync width
        &       $hbpch           ; back porch
        &       $hlbdr           ; left border
        &       $hdisp           ; display size
        &       $hrbdr           ; right border
        &       $hfpch           ; front porch
; Vertical (in rasters)
        &       $vsync           ; sync width
        &       $vbpch           ; back porch
        &       $vlbdr           ; top border
        &       $vdisp           ; display size
        &       $vrbdr           ; bottom border
        &       $vfpch           ; front porch
;
        &       $pixrate         ; pixel rate (kHz)
 [ "$int"<>""
        &       sp :OR: SyncPol_Interlace :OR: SyncPol_InterlaceFields
 |
        &       sp               ; sync polarity
 ]
        &       -1               ; terminator (no video control parameters)

        MEND   ; MACRO VIDC_ListT3



NumMonitorTypes *       9

; These macro are used by various routines in the kernel to check for a valid mode number
; MUST be kept up-to-date with the list of invalid modes between 0 and maxmode

        MACRO
        BranchIfKnownMode $reg, $address
        CMP     $reg, #NumModes
        BCC     $address                ; then branch
        MEND

        MACRO
        BranchIfNotKnownMode $reg, $address
        CMP     $reg, #NumModes
        BCS     $address                ; branch if *NOT* known
        MEND


BigVIDCTable

;
;       monitor type 0, 50Hz TV
;
 [ Only13500kHzTV
        &       VLN_0  - BigVIDCTable   ; 0
        &       -1                      ; 1
        &       -1                      ; 2
        &       VLN_3  - BigVIDCTable   ; 3
        &       VLN_4  - BigVIDCTable   ; 4
        &       -1                      ; 5
        &       -1                      ; 6
        &       -1                      ; 7
        &       VLN_8  - BigVIDCTable   ; 8
        &       -1                      ; 9
        &       -1                      ; 10
        &       VLN_11 - BigVIDCTable   ; 11
        &       VLN_12 - BigVIDCTable   ; 12
        &       -1                      ; 13
        &       VLN_14 - BigVIDCTable   ; 14
        &       VLN_15 - BigVIDCTable   ; 15
        &       -1                      ; 16
        &       -1                      ; 17
   [ HWInterlace
        &       VLN_18 - BigVIDCTable   ; 18
        &       VLN_19 - BigVIDCTable   ; 19
        &       VLN_20 - BigVIDCTable   ; 20
        &       VLN_21 - BigVIDCTable   ; 21
   |
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
   ]
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
   [ HWInterlace
        &       VLN_25 - BigVIDCTable   ; 25
        &       VLN_26 - BigVIDCTable   ; 26
        &       VLN_27 - BigVIDCTable   ; 27
        &       VLN_28 - BigVIDCTable   ; 28
   |
        &       -1                      ; 25
        &       -1                      ; 26
        &       -1                      ; 27
        &       -1                      ; 28
   ]
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       -1                      ; 44
        &       -1                      ; 45
        &       -1                      ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       -1                      ; 50
        &       -1                      ; 51
        &       -1                      ; 52
        &       -1                      ; 53
 |
        &       VLN_0  - BigVIDCTable   ; 0
        &       VLN_1  - BigVIDCTable   ; 1
        &       VLN_2  - BigVIDCTable   ; 2
        &       VLN_3  - BigVIDCTable   ; 3
        &       VLN_4  - BigVIDCTable   ; 4
        &       VLN_5  - BigVIDCTable   ; 5
        &       VLN_6  - BigVIDCTable   ; 6
 [ HiResTTX
        &       -1                      ; 7
 |
        &       VLN_7  - BigVIDCTable   ; 7
 ]
        &       VLN_8  - BigVIDCTable   ; 8
        &       VLN_9  - BigVIDCTable   ; 9
        &       VLN_10 - BigVIDCTable   ; 10
        &       VLN_11 - BigVIDCTable   ; 11
        &       VLN_12 - BigVIDCTable   ; 12
        &       VLN_13 - BigVIDCTable   ; 13
        &       VLN_14 - BigVIDCTable   ; 14
        &       VLN_15 - BigVIDCTable   ; 15
        &       VLN_16 - BigVIDCTable   ; 16
        &       VLN_17 - BigVIDCTable   ; 17
   [ HWInterlace
        &       VLN_18 - BigVIDCTable   ; 18
        &       VLN_19 - BigVIDCTable   ; 19
        &       VLN_20 - BigVIDCTable   ; 20
        &       VLN_21 - BigVIDCTable   ; 21
   |
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
   ]
        &       VLN_22 - BigVIDCTable   ; 22
        &       -1                      ; 23
        &       VLN_24 - BigVIDCTable   ; 24
   [ HWInterlace
        &       VLN_25 - BigVIDCTable   ; 25
        &       VLN_26 - BigVIDCTable   ; 26
        &       VLN_27 - BigVIDCTable   ; 27
        &       VLN_28 - BigVIDCTable   ; 28
   |
        &       -1                      ; 25
        &       -1                      ; 26
        &       -1                      ; 27
        &       -1                      ; 28
   ]
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       VLN_33 - BigVIDCTable   ; 33
        &       VLN_34 - BigVIDCTable   ; 34
        &       VLN_35 - BigVIDCTable   ; 35
        &       VLN_36 - BigVIDCTable   ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       -1                      ; 44
        &       -1                      ; 45
        &       -1                      ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       VLN_50 - BigVIDCTable   ; 50
        &       VLN_51 - BigVIDCTable   ; 51
        &       VLN_52 - BigVIDCTable   ; 52
        &       VLN_53 - BigVIDCTable   ; 53
 ]

;
;       monitor type 1, multiscan
;
        ASSERT  (.-BigVIDCTable)=((NumModes*1):SHL:2)

        &       VLM_0  - BigVIDCTable   ; 0
        &       VLM_1  - BigVIDCTable   ; 1
        &       VLM_2  - BigVIDCTable   ; 2
        &       VLM_3  - BigVIDCTable   ; 3
        &       VLM_4  - BigVIDCTable   ; 4
        &       VLM_5  - BigVIDCTable   ; 5
        &       VLM_6  - BigVIDCTable   ; 6
        &       VLM_7  - BigVIDCTable   ; 7
        &       VLM_8  - BigVIDCTable   ; 8
        &       VLM_9  - BigVIDCTable   ; 9
        &       VLM_10 - BigVIDCTable   ; 10
        &       VLM_11 - BigVIDCTable   ; 11
        &       VLM_12 - BigVIDCTable   ; 12
        &       VLM_13 - BigVIDCTable   ; 13
        &       VLM_14 - BigVIDCTable   ; 14
        &       VLM_15 - BigVIDCTable   ; 15
        &       VLM_16 - BigVIDCTable   ; 16
        &       VLM_17 - BigVIDCTable   ; 17
        &       VLM_18 - BigVIDCTable   ; 18
        &       VLM_19 - BigVIDCTable   ; 19
        &       VLM_20 - BigVIDCTable   ; 20
        &       VLM_21 - BigVIDCTable   ; 21
        &       VLM_22 - BigVIDCTable   ; 22
        &       -1                      ; 23
        &       VLM_24 - BigVIDCTable   ; 24
        &       VLM_25 - BigVIDCTable   ; 25
        &       VLM_26 - BigVIDCTable   ; 26
        &       VLM_27 - BigVIDCTable   ; 27
        &       VLM_28 - BigVIDCTable   ; 28
        &       VLM_29 - BigVIDCTable   ; 29
        &       VLM_30 - BigVIDCTable   ; 30
        &       VLM_31 - BigVIDCTable   ; 31
        &       VLM_32 - BigVIDCTable   ; 32
        &       VLM_33 - BigVIDCTable   ; 33 Ovscn
        &       VLM_34 - BigVIDCTable   ; 34
        &       VLM_35 - BigVIDCTable   ; 35
        &       VLM_36 - BigVIDCTable   ; 36
        &       VLM_37 - BigVIDCTable   ; 37 dtp
        &       VLM_38 - BigVIDCTable   ; 38
        &       VLM_39 - BigVIDCTable   ; 39
        &       VLM_40 - BigVIDCTable   ; 40
        &       VLM_41 - BigVIDCTable   ; 41 EGA
        &       VLM_42 - BigVIDCTable   ; 42
        &       VLM_43 - BigVIDCTable   ; 43
        &       VLM_44 - BigVIDCTable   ; 44 CGA
        &       VLM_45 - BigVIDCTable   ; 45
        &       VLM_46 - BigVIDCTable   ; 46
        &       VLM_47 - BigVIDCTable   ; 47 PCSoft
        &       VLM_48 - BigVIDCTable   ; 48 Games mode
        &       VLM_49 - BigVIDCTable   ; 49 Games mode
        &       VLM_50 - BigVIDCTable   ; 50
        &       VLM_51 - BigVIDCTable   ; 51
        &       VLM_52 - BigVIDCTable   ; 52
        &       VLM_53 - BigVIDCTable   ; 53


;
;       monitor type 2, HiRes
;
        ASSERT  (.-BigVIDCTable)=((NumModes*2):SHL:2)

        &       -1                      ; 0
        &       -1                      ; 1
        &       -1                      ; 2
        &       -1                      ; 3
        &       -1                      ; 4
        &       -1                      ; 5
        &       -1                      ; 6
        &       -1                      ; 7
        &       -1                      ; 8
        &       -1                      ; 9
        &       -1                      ; 10
        &       -1                      ; 11
        &       -1                      ; 12
        &       -1                      ; 13
        &       -1                      ; 14
        &       -1                      ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       VLH_23 - BigVIDCTable   ; 23
        &       -1                      ; 24
        &       -1                      ; 25
        &       -1                      ; 26
        &       -1                      ; 27
        &       -1                      ; 28
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       -1                      ; 44
        &       -1                      ; 45
        &       -1                      ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       -1                      ; 50
        &       -1                      ; 51
        &       -1                      ; 52
        &       -1                      ; 53

;
;       monitor type 3, VGA
;
        ASSERT  (.-BigVIDCTable)=((NumModes*3):SHL:2)

        &       VgaX_0  - BigVIDCTable  ; 0
        &       VgaX_1  - BigVIDCTable  ; 1
        &       VgaX_2  - BigVIDCTable  ; 2
        &       VgaX_3  - BigVIDCTable  ; 3
        &       VgaX_4  - BigVIDCTable  ; 4
        &       VgaX_5  - BigVIDCTable  ; 5
        &       VgaX_6  - BigVIDCTable  ; 6
        &       VgaX_7  - BigVIDCTable  ; 7
        &       VgaX_8  - BigVIDCTable  ; 8
        &       VgaX_9  - BigVIDCTable  ; 9
        &       VgaX_10 - BigVIDCTable  ; 10
        &       VgaX_11 - BigVIDCTable  ; 11
        &       VgaX_12 - BigVIDCTable  ; 12
        &       VgaX_13 - BigVIDCTable  ; 13
        &       VgaX_14 - BigVIDCTable  ; 14
        &       VgaX_15 - BigVIDCTable  ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
        &       VLM_25 - BigVIDCTable   ; 25
        &       VLM_26 - BigVIDCTable   ; 26
        &       VLM_27 - BigVIDCTable   ; 27
        &       VLM_28 - BigVIDCTable   ; 28
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &      VgaX_41 - BigVIDCTable   ; 41 EGA
        &      VgaX_42 - BigVIDCTable   ; 42
        &      VgaX_43 - BigVIDCTable   ; 43
        &      VgaX_44 - BigVIDCTable   ; 44 CGA
        &      VgaX_45 - BigVIDCTable   ; 45
        &      VgaX_46 - BigVIDCTable   ; 46
        &       VLM_47 - BigVIDCTable   ; 47 PCSoft
        &       VLM_48 - BigVIDCTable   ; 48 Games mode
        &       VLM_49 - BigVIDCTable   ; 49 Games mode
        &       VgaX_50 - BigVIDCTable  ; 50
        &       VgaX_51 - BigVIDCTable  ; 51
        &       VgaX_52 - BigVIDCTable  ; 52
        &       VgaX_53 - BigVIDCTable  ; 53

;
;       monitor type 4, SVGA
;
        ASSERT  (.-BigVIDCTable)=((NumModes*4):SHL:2)

        &       VgaX_0  - BigVIDCTable  ; 0
        &       VgaX_1  - BigVIDCTable  ; 1
        &       VgaX_2  - BigVIDCTable  ; 2
        &       VgaX_3  - BigVIDCTable  ; 3
        &       VgaX_4  - BigVIDCTable  ; 4
        &       VgaX_5  - BigVIDCTable  ; 5
        &       VgaX_6  - BigVIDCTable  ; 6
        &       VgaX_7  - BigVIDCTable  ; 7
        &       VgaX_8  - BigVIDCTable  ; 8
        &       VgaX_9  - BigVIDCTable  ; 9
        &       VgaX_10 - BigVIDCTable  ; 10
        &       VgaX_11 - BigVIDCTable  ; 11
        &       VgaX_12 - BigVIDCTable  ; 12
        &       VgaX_13 - BigVIDCTable  ; 13
        &       VgaX_14 - BigVIDCTable  ; 14
        &       VgaX_15 - BigVIDCTable  ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
        &       VLM_25 - BigVIDCTable   ; 25
        &       VLM_26 - BigVIDCTable   ; 26
        &       VLM_27 - BigVIDCTable   ; 27
        &       VLM_28 - BigVIDCTable   ; 28
        &       VLM_29 - BigVIDCTable   ; 29
        &       VLM_30 - BigVIDCTable   ; 30
        &       VLM_31 - BigVIDCTable   ; 31
        &       VLM_32 - BigVIDCTable   ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &      VgaX_41 - BigVIDCTable   ; 41 EGA
        &      VgaX_42 - BigVIDCTable   ; 42
        &      VgaX_43 - BigVIDCTable   ; 43
        &      VgaX_44 - BigVIDCTable   ; 44 CGA
        &      VgaX_45 - BigVIDCTable   ; 45
        &      VgaX_46 - BigVIDCTable   ; 46
        &       VLM_47 - BigVIDCTable   ; 47 PCSoft
        &       VLM_48 - BigVIDCTable   ; 48 Games mode
        &       VLM_49 - BigVIDCTable   ; 49 Games mode
        &       VgaX_50 - BigVIDCTable  ; 50
        &       VgaX_51 - BigVIDCTable  ; 51
        &       VgaX_52 - BigVIDCTable  ; 52
        &       VgaX_53 - BigVIDCTable  ; 53

;
;       monitor type 5, LCD
;
        ASSERT  (.-BigVIDCTable)=((NumModes*5):SHL:2)

        &       -1                      ; 0
        &       -1                      ; 1
        &       -1                      ; 2
        &       -1                      ; 3
        &       -1                      ; 4
        &       -1                      ; 5
        &       -1                      ; 6
        &       -1                      ; 7
        &       -1                      ; 8
        &       -1                      ; 9
        &       -1                      ; 10
        &       -1                      ; 11
        &       -1                      ; 12
        &       -1                      ; 13
        &       -1                      ; 14
        &       -1                      ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
        &       LCD_25 - BigVIDCTable   ; 25
        &       LCD_26 - BigVIDCTable   ; 26
        &       LCD_27 - BigVIDCTable   ; 27
        &       LCD_28 - BigVIDCTable   ; 28
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       -1                      ; 44
        &       -1                      ; 45
        &       -1                      ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       LCD_50 - BigVIDCTable   ; 50
        &       LCD_51 - BigVIDCTable   ; 51
        &       LCD_52 - BigVIDCTable   ; 52
        &       LCD_53 - BigVIDCTable   ; 53

;
;       monitor type 6, reserved?
;
        ASSERT  (.-BigVIDCTable)=((NumModes*6):SHL:2)

        &       -1                      ; 0
        &       -1                      ; 1
        &       -1                      ; 2
        &       -1                      ; 3
        &       -1                      ; 4
        &       -1                      ; 5
        &       -1                      ; 6
        &       -1                      ; 7
        &       -1                      ; 8
        &       -1                      ; 9
        &       -1                      ; 10
        &       -1                      ; 11
        &       -1                      ; 12
        &       -1                      ; 13
        &       -1                      ; 14
        &       -1                      ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
        &       -1                      ; 25
        &       -1                      ; 26
        &       -1                      ; 27
        &       -1                      ; 28
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       -1                      ; 44
        &       -1                      ; 45
        &       -1                      ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       -1                      ; 50
        &       -1                      ; 51
        &       -1                      ; 52
        &       -1                      ; 53

;
;       monitor type 7, file
;
        ASSERT  (.-BigVIDCTable)=((NumModes*7):SHL:2)

        &       -1                      ; 0
        &       -1                      ; 1
        &       -1                      ; 2
        &       -1                      ; 3
        &       -1                      ; 4
        &       -1                      ; 5
        &       -1                      ; 6
        &       -1                      ; 7
        &       -1                      ; 8
        &       -1                      ; 9
        &       -1                      ; 10
        &       -1                      ; 11
        &       -1                      ; 12
        &       -1                      ; 13
        &       -1                      ; 14
        &       -1                      ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
        &       -1                      ; 25
        &       -1                      ; 26
        &       -1                      ; 27
        &       -1                      ; 28
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       -1                      ; 44
        &       -1                      ; 45
        &       -1                      ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       -1                      ; 50
        &       -1                      ; 51
        &       -1                      ; 52
        &       -1                      ; 53

;
;       monitor type 8, 60Hz TV
;
        ASSERT  (.-BigVIDCTable)=((NumModes*8):SHL:2)

        &       -1                      ; 0
        &       -1                      ; 1
        &       -1                      ; 2
        &       -1                      ; 3
        &       -1                      ; 4
        &       -1                      ; 5
        &       -1                      ; 6
        &       -1                      ; 7
        &       -1                      ; 8
        &       -1                      ; 9
        &       -1                      ; 10
        &       -1                      ; 11
        &       -1                      ; 12
        &       -1                      ; 13
        &       -1                      ; 14
        &       -1                      ; 15
        &       -1                      ; 16
        &       -1                      ; 17
        &       -1                      ; 18
        &       -1                      ; 19
        &       -1                      ; 20
        &       -1                      ; 21
        &       -1                      ; 22
        &       -1                      ; 23
        &       -1                      ; 24
        &       -1                      ; 25
        &       -1                      ; 26
        &       -1                      ; 27
        &       -1                      ; 28
        &       -1                      ; 29
        &       -1                      ; 30
        &       -1                      ; 31
        &       -1                      ; 32
        &       -1                      ; 33
        &       -1                      ; 34
        &       -1                      ; 35
        &       -1                      ; 36
        &       -1                      ; 37
        &       -1                      ; 38
        &       -1                      ; 39
        &       -1                      ; 40
        &       -1                      ; 41
        &       -1                      ; 42
        &       -1                      ; 43
        &       VLM_44 - BigVIDCTable   ; 44 CGA
        &       VLM_45 - BigVIDCTable   ; 45
        &       VLM_46 - BigVIDCTable   ; 46
        &       -1                      ; 47
        &       -1                      ; 48
        &       -1                      ; 49
        &       -1                      ; 50
        &       -1                      ; 51
        &       -1                      ; 52
        &       -1                      ; 53

        ASSERT  (.-BigVIDCTable)=((NumModes*NumMonitorTypes):SHL:2)

 ; Now supply an alternate 13.5MHz-based (wide)
 [ Only13500kHzTV
VLN_0   VIDC_List 0, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0         ; MODE 0
F_VLN_1 * 50
F_VLN_2 * 50
VLN_3   VIDC_List 1, 64, 62, 40, 640, 40, 18, 3,19,19,250,19, 2,13500,0         ; MODE 3
VLN_4   VIDC_List 0, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0         ; MODE 4
F_VLN_5 * 50
F_VLN_6 * 50
F_VLN_7 * 50
VLN_8   VIDC_List 1, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0         ; MODE 8
F_VLN_9 * 50
F_VLN_10 * 50
VLN_11  VIDC_List 1, 64, 62, 40, 640, 40, 18, 3,19,19,250,19, 2,13500,0         ; MODE 11
VLN_12  VIDC_List 2, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0         ; MODE 12
F_VLN_13 * 50
VLN_14  VIDC_List 2, 64, 62, 40, 640, 40, 18, 3,19,19,250,19, 2,13500,0         ; MODE 14
VLN_15  VIDC_List 3, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0         ; MODE 15
F_VLN_16 * 50
F_VLN_17 * 50
   [ HWInterlace
VLN_18  VIDC_List 0, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0,int     ; MODE 18
VLN_19  VIDC_List 1, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0,int     ; MODE 19
VLN_20  VIDC_List 2, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0,int     ; MODE 20
VLN_21  VIDC_List 3, 64, 62, 40, 640, 40, 18, 3,19,16,256,16, 2,13500,0,int     ; MODE 21
   ]
F_VLN_22 * 50
F_VLN_24 * 50
   [ HWInterlace
VLN_25  VIDC_List 0, 64, 62, 40, 640, 40, 18, 3,19,24,240,24, 2,13500,0,int     ; MODE 25
VLN_26  VIDC_List 1, 64, 62, 40, 640, 40, 18, 3,19,24,240,24, 2,13500,0,int     ; MODE 26
VLN_27  VIDC_List 2, 64, 62, 40, 640, 40, 18, 3,19,24,240,24, 2,13500,0,int     ; MODE 27
VLN_28  VIDC_List 3, 64, 62, 40, 640, 40, 18, 3,19,24,240,24, 2,13500,0,int     ; MODE 28
   ]
F_VLN_33 * 50
F_VLN_34 * 50
F_VLN_35 * 50
F_VLN_36 * 50
 |
VLN_0   VIDC_List 0, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0         ; MODE 0
VLN_1   VIDC_List 1, 38, 44, 48, 320, 48, 14, 3,19,16,256,16, 2, 8000,0         ; MODE 1
VLN_2   VIDC_List 2, 38, 44, 48, 320, 48, 14, 3,19,16,256,16, 2, 8000,0         ; MODE 2
VLN_3   VIDC_List 1, 76, 88, 96, 640, 96, 28, 3,19,19,250,19, 2,16000,0         ; MODE 3
VLN_4   VIDC_List 0, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0         ; MODE 4
VLN_5   VIDC_List 1, 38, 44, 48, 320, 48, 14, 3,19,16,256,16, 2, 8000,0         ; MODE 5
VLN_6   VIDC_List 1, 38, 44, 48, 320, 48, 14, 3,19,19,250,19, 2, 8000,0         ; MODE 6
   [ :LNOT: HiResTTX
VLN_7   VIDC_List 2, 38, 44, 48, 320, 48, 14, 3,19,19,250,19, 2, 8000,0         ; MODE 7
   ]
VLN_8   VIDC_List 1, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0         ; MODE 8
VLN_9   VIDC_List 2, 38, 44, 48, 320, 48, 14, 3,19,16,256,16, 2, 8000,0         ; MODE 9
VLN_10  VIDC_List 3, 38, 44, 48, 320, 48, 14, 3,19,16,256,16, 2, 8000,0         ; MODE 10
VLN_11  VIDC_List 1, 76, 88, 96, 640, 96, 28, 3,19,19,250,19, 2,16000,0         ; MODE 11
VLN_12  VIDC_List 2, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0         ; MODE 12
VLN_13  VIDC_List 3, 38, 44, 48, 320, 48, 14, 3,19,16,256,16, 2, 8000,0         ; MODE 13
VLN_14  VIDC_List 2, 76, 88, 96, 640, 96, 28, 3,19,19,250,19, 2,16000,0         ; MODE 14
VLN_15  VIDC_List 3, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0         ; MODE 15
VLN_16  VIDC_List 2,114,132, 96,1056, 96, 42, 3,19,16,256,16, 2,24000,0         ; MODE 16
VLN_17  VIDC_List 2,114,132, 96,1056, 96, 42, 3,19,19,250,19, 2,24000,0         ; MODE 17
   [ HWInterlace
VLN_18  VIDC_List 0, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0,int     ; MODE 18
VLN_19  VIDC_List 1, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0,int     ; MODE 19
VLN_20  VIDC_List 2, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0,int     ; MODE 20
VLN_21  VIDC_List 3, 76, 88, 96, 640, 96, 28, 3,19,16,256,16, 2,16000,0,int     ; MODE 21
   ]
VLN_22  VIDC_List 2, 76,120,  0, 768,  0, 60, 3,19, 0,288, 0, 2,16000,0         ; MODE 22
VLN_24  VIDC_List 3,114,132, 96,1056, 96, 42, 3,19,16,256,16, 2,24000,0         ; MODE 24
   [ HWInterlace
VLN_25  VIDC_List 0, 76, 88, 96, 640, 96, 28, 3,19,24,240,24, 2,16000,0,int     ; MODE 25
VLN_26  VIDC_List 1, 76, 88, 96, 640, 96, 28, 3,19,24,240,24, 2,16000,0,int     ; MODE 26
VLN_27  VIDC_List 2, 76, 88, 96, 640, 96, 28, 3,19,24,240,24, 2,16000,0,int     ; MODE 27
VLN_28  VIDC_List 3, 76, 88, 96, 640, 96, 28, 3,19,24,240,24, 2,16000,0,int     ; MODE 28
   ]
VLN_33  VIDC_List 0, 76,120,  0, 768,  0, 60, 3,19, 0,288, 0, 2,16000,0         ; MODE 33
VLN_34  VIDC_List 1, 76,120,  0, 768,  0, 60, 3,19, 0,288, 0, 2,16000,0         ; MODE 34
VLN_35  VIDC_List 2, 76,120,  0, 768,  0, 60, 3,19, 0,288, 0, 2,16000,0         ; MODE 35
VLN_36  VIDC_List 3, 76,120,  0, 768,  0, 60, 3,19, 0,288, 0, 2,16000,0         ; MODE 36
VLN_50  VIDC_List 0, 38, 44, 48, 320, 48, 14, 3,19,24,240,24, 2, 8000,0         ; MODE 50
VLN_51  VIDC_List 1, 38, 44, 48, 320, 48, 14, 3,19,24,240,24, 2, 8000,0         ; MODE 51
VLN_52  VIDC_List 2, 38, 44, 48, 320, 48, 14, 3,19,24,240,24, 2, 8000,0         ; MODE 52
VLN_53  VIDC_List 3, 38, 44, 48, 320, 48, 14, 3,19,24,240,24, 2, 8000,0         ; MODE 53
 ]

VLM_0   VIDC_List 0, 72, 62, 88, 640, 88, 74, 3,16,17,256,17, 3,16000,0         ; MODE 0
VLM_1   VIDC_List 1, 36, 30, 44, 320, 44, 38, 3,16,17,256,17, 3, 8000,0         ; MODE 1
VLM_2   VIDC_List 2, 36, 30, 44, 320, 44, 38, 3,16,17,256,17, 3, 8000,0         ; MODE 2
VLM_3   VIDC_List 1, 72, 62, 88, 640, 88, 74, 3,16,20,250,20, 3,16000,0         ; MODE 3
VLM_4   VIDC_List 0, 72, 62, 88, 640, 88, 74, 3,16,17,256,17, 3,16000,0         ; MODE 4
VLM_5   VIDC_List 1, 36, 30, 44, 320, 44, 38, 3,16,17,256,17, 3, 8000,0         ; MODE 5
VLM_6   VIDC_List 1, 36, 30, 44, 320, 44, 38, 3,16,20,250,20, 3, 8000,0         ; MODE 6
 [ TTX256
 ASSERT HiResTTX
VLM_7   VIDC_List 3, 56,112,  0, 640,  0, 88, 3,18, 6,500, 6, 1,24000,0         ; MODE 7
 |
 [ HiResTTX
VLM_7   VIDC_List 2, 56,112,  0, 640,  0, 88, 3,18, 6,500, 6, 1,24000,0         ; MODE 7
 |
VLM_7   VIDC_List 2, 36, 30, 44, 320, 44, 38, 3,16,20,250,20, 3, 8000,0         ; MODE 7
 ]
 ]
VLM_8   VIDC_List 1, 72, 62, 88, 640, 88, 74, 3,16,17,256,17, 3,16000,0         ; MODE 8
VLM_9   VIDC_List 2, 36, 30, 44, 320, 44, 38, 3,16,17,256,17, 3, 8000,0         ; MODE 9
VLM_10  VIDC_List 3, 36, 30, 44, 320, 44, 38, 3,16,17,256,17, 3, 8000,0         ; MODE 10
VLM_11  VIDC_List 1, 72, 62, 88, 640, 88, 74, 3,16,20,250,20, 3,16000,0         ; MODE 11
VLM_12  VIDC_List 2, 72, 62, 88, 640, 88, 74, 3,16,17,256,17, 3,16000,0         ; MODE 12
VLM_13  VIDC_List 3, 36, 30, 44, 320, 44, 38, 3,16,17,256,17, 3, 8000,0         ; MODE 13
VLM_14  VIDC_List 2, 72, 62, 88, 640, 88, 74, 3,16,20,250,20, 3,16000,0         ; MODE 14
VLM_15  VIDC_List 3, 72, 62, 88, 640, 88, 74, 3,16,17,256,17, 3,16000,0         ; MODE 15
VLM_16  VIDC_List 2,108, 72,106,1056,106, 88, 3,16,17,256,17, 3,24000,0         ; MODE 16
VLM_17  VIDC_List 2,108, 72,106,1056,106, 88, 3,16,20,250,20, 3,24000,0         ; MODE 17
VLM_18  VIDC_List 0, 56,112,  0, 640,  0, 88, 3,18, 0,512, 0, 1,24000,0         ; MODE 18
VLM_19  VIDC_List 1, 56,112,  0, 640,  0, 88, 3,18, 0,512, 0, 1,24000,0         ; MODE 19
VLM_20  VIDC_List 2, 56,112,  0, 640,  0, 88, 3,18, 0,512, 0, 1,24000,0         ; MODE 20
VLM_21  VIDC_List 3, 56,112,  0, 640,  0, 88, 3,18, 0,512, 0, 1,24000,0         ; MODE 21
VLM_22  VIDC_List 2, 76, 82,  0, 768,  0, 98, 3,19, 0,288, 0, 2,16000,0         ; MODE 22
VLM_24  VIDC_List 3,108, 72,106,1056,106, 88, 3,16,17,256,17, 3,24000,0         ; MODE 24
VLM_25  VIDC_List 0, 96, 46,  0, 640,  0, 18, 2,32, 0,480, 0,11,25175,3         ; MODE 25
VLM_26  VIDC_List 1, 96, 46,  0, 640,  0, 18, 2,32, 0,480, 0,11,25175,3         ; MODE 26
VLM_27  VIDC_List 2, 96, 46,  0, 640,  0, 18, 2,32, 0,480, 0,11,25175,3         ; MODE 27
VLM_28  VIDC_List 3, 96, 46,  0, 640,  0, 18, 2,32, 0,480, 0,11,25175,3         ; MODE 28
VLM_29  VIDC_List 0, 72,128,  0, 800,  0, 24, 2,22, 0,600, 0, 1,36000,0         ; MODE 29
VLM_30  VIDC_List 1, 72,128,  0, 800,  0, 24, 2,22, 0,600, 0, 1,36000,0         ; MODE 30
VLM_31  VIDC_List 2, 72,128,  0, 800,  0, 24, 2,22, 0,600, 0, 1,36000,0         ; MODE 31

VLM_33  VIDC_List 0, 76,82,  0, 768,  0, 98, 3,19, 0,288, 0, 2,16000,0         ; MODE 33
VLM_34  VIDC_List 1, 76,82,  0, 768,  0, 98, 3,19, 0,288, 0, 2,16000,0         ; MODE 34
VLM_35  VIDC_List 2, 76,82,  0, 768,  0, 98, 3,19, 0,288, 0, 2,16000,0         ; MODE 35
VLM_36  VIDC_List 3, 76,82,  0, 768,  0, 98, 3,19, 0,288, 0, 2,16000,0         ; MODE 36

VLM_37  VIDC_List 0,118, 58,  0, 896,  0, 28, 3, 9, 0,352, 0, 0,24000,2         ; DTP 896x352
VLM_38  VIDC_List 1,118, 58,  0, 896,  0, 28, 3, 9, 0,352, 0, 0,24000,2         ; EGA std
VLM_39  VIDC_List 2,118, 58,  0, 896,  0, 28, 3, 9, 0,352, 0, 0,24000,2
VLM_40  VIDC_List 3,118, 58,  0, 896,  0, 28, 3, 9, 0,352, 0, 0,24000,2

VLM_41  VIDC_List 0, 76, 36,  0, 640,  0, 16, 3, 9, 0,352, 0, 0,16783,2         ; EGA
VLM_42  VIDC_List 1, 76, 36,  0, 640,  0, 16, 3, 9, 0,352, 0, 0,16783,2
VLM_43  VIDC_List 2, 76, 36,  0, 640,  0, 16, 3, 9, 0,352, 0, 0,16783,2

VLM_44  VIDC_List 0, 72,162,  0, 640,  0,146, 3,34, 0,200, 0,25,16000,0         ; CGA
VLM_45  VIDC_List 1, 72,162,  0, 640,  0,146, 3,34, 0,200, 0,25,16000,0
VLM_46  VIDC_List 2, 72,162,  0, 640,  0,146, 3,34, 0,200, 0,25,16000,0

VLM_47  VIDC_List 3, 64, 62,  0, 360,  0, 46, 2,32, 0,480, 0,11,16783,3         ; PC Soft

VLM_48  VIDC_List 2, 48, 22,  0, 320,  0, 10, 2,32, 0,480, 0,11,12587,3         ; Games mode
VLM_49  VIDC_List 3, 48, 22,  0, 320,  0, 10, 2,32, 0,480, 0,11,12587,3         ; Games mode
VLM_50  VIDC_List 0, 36, 30, 44, 320, 44, 38, 3,16,25,240,25, 3, 8000,0
VLM_51  VIDC_List 1, 36, 30, 44, 320, 44, 38, 3,16,25,240,25, 3, 8000,0
VLM_52  VIDC_List 2, 36, 30, 44, 320, 44, 38, 3,16,25,240,25, 3, 8000,0
VLM_53  VIDC_List 3, 36, 30, 44, 320, 44, 38, 3,16,25,240,25, 3, 8000,0

; New modes for VIDC20

VLM_32  VIDC_List 3, 72,128,  0, 800,  0, 24, 2,22, 0,600, 0, 1,36000,0         ; MODE 32 (800 x 600 x 8bpp)


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

VgaX_0   VIDC_List 0, 96, 46,  0, 640,  0,18, 2,106,0,256, 0,85,25175,2         ; TV modes in VGA_350)
VgaX_1   VIDC_List 1, 48, 22,  0, 320,  0,10, 2,106,0,256, 0,85,12587,2
VgaX_2   VIDC_List 2, 48, 22,  0, 320,  0,10, 2,106,0,256, 0,85,12587,2
VgaX_3   VIDC_List 1, 96, 46,  0, 640,  0,18, 2,109,0,250, 0,88,25175,2
VgaX_4   VIDC_List 0, 96, 46,  0, 640,  0,18, 2,106,0,256, 0,85,25175,2
VgaX_5   VIDC_List 1, 48, 22,  0, 320,  0,10, 2,106,0,256, 0,85,12587,2
VgaX_6   VIDC_List 1, 48, 22,  0, 320,  0,10, 2,109,0,250, 0,88,12587,2
 [ HiResTTX
VgaX_7 * VLM_7
 |
VgaX_7   VIDC_List 2, 48, 22,  0, 320,  0,10, 2,109,0,250, 0,88,12587,2
 ]
VgaX_8   VIDC_List 1, 96, 46,  0, 640,  0,18, 2,106,0,256, 0,85,25175,2
VgaX_9   VIDC_List 2, 48, 22,  0, 320,  0,10, 2,106,0,256, 0,85,12587,2
VgaX_10  VIDC_List 3, 48, 22,  0, 320,  0,10, 2,106,0,256, 0,85,12587,2
VgaX_11  VIDC_List 1, 96, 46,  0, 640,  0,18, 2,109,0,250, 0,88,25175,2
VgaX_12  VIDC_List 2, 96, 46,  0, 640,  0,18, 2,106,0,256, 0,85,25175,2
VgaX_13  VIDC_List 3, 48, 22,  0, 320,  0,10, 2,106,0,256, 0,85,12587,2
VgaX_14  VIDC_List 2, 96, 46,  0, 640,  0,18, 2,109,0,250, 0,88,25175,2
VgaX_15  VIDC_List 3, 96, 46,  0, 640,  0,18, 2,106,0,256, 0,85,25175,2

VgaX_41  VIDC_List 0, 96, 46,  0, 640,  0,18, 2,58, 0,352, 0,37,25175,2         ; EGA
VgaX_42  VIDC_List 1, 96, 46,  0, 640,  0,18, 2,58, 0,352, 0,37,25175,2
VgaX_43  VIDC_List 2, 96, 46,  0, 640,  0,18, 2,58, 0,352, 0,37,25175,2

VgaX_44  VIDC_List 0, 96, 46,  0, 640,  0,18,2,134, 0,200,0,113,25175,2         ; CGA
VgaX_45  VIDC_List 1, 96, 46,  0, 640,  0,18,2,134, 0,200,0,113,25175,2
VgaX_46  VIDC_List 2, 96, 46,  0, 640,  0,18,2,134, 0,200,0,113,25175,2

VgaX_50  VIDC_List 0, 48, 22,  0, 320,  0,10, 2,58,56,240,56,37,12587,2
VgaX_51  VIDC_List 1, 48, 22,  0, 320,  0,10, 2,58,56,240,56,37,12587,2
VgaX_52  VIDC_List 2, 48, 22,  0, 320,  0,10, 2,58,56,240,56,37,12587,2
VgaX_53  VIDC_List 3, 48, 22,  0, 320,  0,10, 2,58,56,240,56,37,12587,2

LCD_25   VIDC_List 0,  8, 32,  0, 640,  0,16,1,  0, 0,480,0,  0,27000,0
LCD_26   VIDC_List 1,  8, 32,  0, 640,  0,16,1,  0, 0,480,0,  0,27000,0
LCD_27   VIDC_List 2,  8, 32,  0, 640,  0,16,1,  0, 0,480,0,  0,27000,0
LCD_28   VIDC_List 3,  8, 32,  0, 640,  0,16,1,  0, 0,480,0,  0,27000,0
LCD_50   VIDC_List 0,132,220,  0, 320, 0,220,1,  3, 0,240,0,  4,16000,0
LCD_51   VIDC_List 1,132,220,  0, 320, 0,220,1,  3, 0,240,0,  4,16000,0
LCD_52   VIDC_List 2,132,220,  0, 320, 0,220,1,  3, 0,240,0,  4,16000,0
LCD_53   VIDC_List 3,132,220,  0, 320, 0,220,1,  3, 0,240,0,  4,16000,0

; Table of ideal frame rate for each numbered mode, to put in dummy mode selector
; if numbered mode number is not directly available on this monitortype


FrameRateTable
 [ HiResTTX
        =       F_VLN_0, F_VLN_1, F_VLN_2, F_VLN_3, F_VLN_4, F_VLN_5, F_VLN_6, F_VLM_7
 |
        =       F_VLN_0, F_VLN_1, F_VLN_2, F_VLN_3, F_VLN_4, F_VLN_5, F_VLN_6, F_VLN_7
 ]
        =       F_VLN_8, F_VLN_9, F_VLN_10, F_VLN_11, F_VLN_12, F_VLN_13, F_VLN_14, F_VLN_15
        =       F_VLN_16, F_VLN_17, F_VLM_18, F_VLM_19, F_VLM_20, F_VLM_21, F_VLN_22, F_VLH_23
        =       F_VLN_24, F_VLM_25, F_VLM_26, F_VLM_27, F_VLM_28, F_VLM_29, F_VLM_30, F_VLM_31
        =       F_VLM_32, F_VLN_33, F_VLN_34, F_VLN_35, F_VLN_36, F_VLM_37, F_VLM_38, F_VLM_39
        =       F_VLM_40, F_VLM_41, F_VLM_42, F_VLM_43, F_VLM_44, F_VLM_45, F_VLM_46, F_VLM_47
        =       F_VLM_48, F_VLM_49, F_LCD_50, F_LCD_51, F_LCD_52, F_LCD_53
        ASSERT  . - FrameRateTable = NumModes
        ALIGN

Vwstab
 & VW_0  - Vwstab      ; MODE  0
 & VW_1  - Vwstab      ; MODE  1
 & VW_2  - Vwstab      ; MODE  2
 & VW_3  - Vwstab      ; MODE  3
 & VW_4  - Vwstab      ; MODE  4
 & VW_5  - Vwstab      ; MODE  5
 & VW_6  - Vwstab      ; MODE  6
 & VW_7  - Vwstab      ; MODE  7
 & VW_8  - Vwstab      ; MODE  8
 & VW_9  - Vwstab      ; MODE  9
 & VW_10 - Vwstab      ; MODE  10
 & VW_11 - Vwstab      ; MODE  11
 & VW_12 - Vwstab      ; MODE  12
 & VW_13 - Vwstab      ; MODE  13
 & VW_14 - Vwstab      ; MODE  14
 & VW_15 - Vwstab      ; MODE  15
 & VW_16 - Vwstab      ; MODE  16
 & VW_17 - Vwstab      ; MODE  17
 & VW_18 - Vwstab      ; MODE  18
 & VW_19 - Vwstab      ; MODE  19
 & VW_20 - Vwstab      ; MODE  20
 & VW_21 - Vwstab      ; MODE  21
 & VW_22 - Vwstab      ; MODE  22 (new mode for visually handicapped)
 & VW_23 - Vwstab      ; MODE  23
 & VW_24 - Vwstab      ; MODE  24
 & VW_25 - Vwstab      ; MODE  25
 & VW_26 - Vwstab      ; MODE  26
 & VW_27 - Vwstab      ; MODE  27
 & VW_28 - Vwstab      ; MODE  28
 & VW_29 - Vwstab      ; MODE  29 exp
 & VW_30 - Vwstab      ; MODE  30 exp
 & VW_31 - Vwstab      ; MODE  31
 & VW_32 - Vwstab      ; MODE  32
 & VW_33 - Vwstab      ; MODE  33
 & VW_34 - Vwstab      ; MODE  34
 & VW_35 - Vwstab      ; MODE  35
 & VW_36 - Vwstab      ; MODE  36
 & VW_37 - Vwstab      ; MODE  37
 & VW_38 - Vwstab      ; MODE  38
 & VW_39 - Vwstab      ; MODE  39
 & VW_40 - Vwstab      ; MODE  40
 & VW_41 - Vwstab      ; MODE  41
 & VW_42 - Vwstab      ; MODE  42
 & VW_43 - Vwstab      ; MODE  43
 & VW_44 - Vwstab      ; MODE  44
 & VW_45 - Vwstab      ; MODE  45
 & VW_46 - Vwstab      ; MODE  46
 & VW_47 - Vwstab      ; MODE  47
 & VW_48 - Vwstab      ; MODE  48
 & VW_49 - Vwstab      ; MODE  49
 & VW_50 - Vwstab      ; MODE  50
 & VW_51 - Vwstab      ; MODE  51
 & VW_52 - Vwstab      ; MODE  52
 & VW_53 - Vwstab      ; MODE  53

M22S * 1280*976/8  ;  screen size
M23S * 1152*896/8
M25S *  640*480/8
M31S *  800*600/8
M37S *  896*352/8
M41S *  640*352/8
M44S *  640*200/8
M47S *  360*480/8
M50S *  320*240/8

        MACRO
$label  VWSTAB  $BaseMode, $ScreenSize,$LineLength,$XWindLimit,$YWindLimit,$YShftFactor,    $XEigFactor,$YEigFactor,$NColour,$ScrRCol,$ScrBRow,$Log2BPC,$Log2BPP,$ModeFlags
$label
        LCLS    ScrSize
        LCLA    xres
        LCLA    yres
        LCLA    pixdepth
        LCLA    yeig
        LCLA    scrsz
        [ ("$ScreenSize" :RIGHT: 1) = "K"
ScrSize SETS ("$ScreenSize" :LEFT: ((:LEN: "$ScreenSize")-1))
scrsz   SETA    $ScrSize * 1024
        |
scrsz   SETA    $ScreenSize
        ]
        &       scrsz
        &       $XWindLimit, $YWindLimit, $LineLength, $NColour
        &       $YShftFactor, $ModeFlags, $XEigFactor, $YEigFactor
        &       $Log2BPC, $Log2BPP
        &       $ScrRCol, $ScrBRow
        ALIGN
        &       0, $BaseMode, -1 ; Dummy mode workspace block for Service_ModeExtension
        MEND

VW_0    VWSTAB  0, 20K, 80, 639,255,4,1,2, 1, 79, 31,0,0,0                                             ; MODE 0
VW_1    VWSTAB  1, 20K, 80, 319,255,4,2,2, 3, 39, 31,1,1,0                                             ; MODE 1
VW_2    VWSTAB  2, 40K,160, 159,255,5,3,2,15, 19, 31,3,2,0                                             ; MODE 2
VW_3    VWSTAB  3, 40K,160, 639,249,5,1,2, 1, 79, 24,1,1,ModeFlag_NonGraphic+ModeFlag_GapMode+ModeFlag_BBCGapMode  ; MODE 3
VW_4    VWSTAB  4, 20K, 80, 319,255,4,2,2, 1, 39, 31,1,0,0                                             ; MODE 4
VW_5    VWSTAB  5, 20K, 80, 159,255,4,3,2, 3, 19, 31,2,1,0                                             ; MODE 5
VW_6    VWSTAB  6, 20K, 80, 319,249,4,2,2, 1, 39, 24,1,1,ModeFlag_NonGraphic+ModeFlag_GapMode+ModeFlag_BBCGapMode  ; MODE 6
 [ TTX256
 ASSERT HiResTTX
VW_7    VWSTAB  7,640K,640, 639,499,5,1,1,255,39, 24,3,3,ModeFlag_NonGraphic+ModeFlag_GapMode+ModeFlag_Teletext+ModeFlag_DoubleVertical+ModeFlag_FullPalette ; MODE 7
 |
 [ HiResTTX
VW_7    VWSTAB  7,320K,320, 639,499,5,1,1,15, 39, 24,2,2,ModeFlag_NonGraphic+ModeFlag_GapMode+ModeFlag_Teletext+ModeFlag_DoubleVertical ; MODE 7
 |
VW_7    VWSTAB  7, 80K,160, 319,249,5,2,2,15, 39, 24,2,2,ModeFlag_NonGraphic+ModeFlag_GapMode+ModeFlag_Teletext    ; MODE 7
 ]
 ]
VW_8    VWSTAB  8, 40K,160, 639,255,5,1,2, 3, 79, 31,1,1,0                                             ; MODE 8
VW_9    VWSTAB  9, 40K,160, 319,255,5,2,2,15, 39, 31,2,2,0                                             ; MODE 9
VW_10   VWSTAB 10, 80K,320, 159,255,6,3,2,63, 19, 31,4,3,0                                             ; MODE 10
VW_11   VWSTAB 11, 40K,160, 639,249,5,1,2, 3, 79, 24,1,1,ModeFlag_GapMode                                  ; MODE 11
VW_12   VWSTAB 12, 80K,320, 639,255,6,1,2,15, 79, 31,2,2,0                                             ; MODE 12
VW_13   VWSTAB 13, 80K,320, 319,255,6,2,2,63, 39, 31,3,3,0                                             ; MODE 13
VW_14   VWSTAB 14, 80K,320, 639,249,6,1,2,15, 79, 24,2,2,ModeFlag_GapMode                                  ; MODE 14
VW_15   VWSTAB 15,160K,640, 639,255,7,1,2,63, 79, 31,3,3,0                                             ; MODE 15
VW_16   VWSTAB 16,132K,528,1055,255,0,1,2,15,131, 31,2,2,0                                             ; MODE 16
VW_17   VWSTAB 17,132K,528,1055,249,0,1,2,15,131, 24,2,2,ModeFlag_GapMode                                  ; MODE 17
VW_18   VWSTAB 18, 40K, 80, 639,511,4,1,1, 1, 79, 63,0,0,0                                             ; MODE 18
VW_19   VWSTAB 19, 80K,160, 639,511,5,1,1, 3, 79, 63,1,1,0                                             ; MODE 19
VW_20   VWSTAB 20,160K,320, 639,511,6,1,1,15, 79, 63,2,2,0                                             ; MODE 20
VW_21   VWSTAB 21,320K,640, 639,511,7,1,1,63, 79, 63,3,3,0                                             ; MODE 21
VW_22   VWSTAB 22,108K,384, 767,287,0,0,1,15, 95, 35,2,2,0                                             ; MODE 22
VW_23   VWSTAB 23,M23S,144,1151,895,0,1,1, 1,143, 55,0,0,ModeFlag_HiResMono+ModeFlag_DoubleVertical            ; MODE 23
VW_24   VWSTAB 24,264K,1056,1055,255,0,1,2,63,131,31,3,3,0                                             ; MODE 24
VW_25 VWSTAB 25,M25S  , 80, 639,479,4,1,1, 1, 79, 59,0,0,0                                             ; MODE 25
VW_26 VWSTAB 26,M25S*2,160, 639,479,5,1,1, 3, 79, 59,1,1,0                                             ; MODE 26
VW_27 VWSTAB 27,M25S*4,320, 639,479,6,1,1,15, 79, 59,2,2,0                                             ; MODE 27
VW_28 VWSTAB 28,M25S*8,640, 639,479,7,1,1,63, 79, 59,3,3,0                                             ; MODE 28

VW_29 VWSTAB 29,M31S  ,100, 799,599,0,1,1, 1, 99, 74,0,0,0                                             ; MODE 29
VW_30 VWSTAB 30,M31S*2,200, 799,599,0,1,1, 3, 99, 74,1,1,0                                             ; MODE 30
VW_31 VWSTAB 31,M31S*4,400, 799,599,0,1,1,15, 99, 74,2,2,0                                             ; MODE 31
VW_32 VWSTAB 32,M31S*8,800, 799,599,0,1,1,63, 99, 74,3,3,0                                             ; MODE 32

VW_33   VWSTAB 33, 27K, 96, 767,287,0,1,2, 1, 95, 35,0,0,0                                             ; MODE 33
VW_34   VWSTAB 34, 54K,192, 767,287,0,1,2, 3, 95, 35,1,1,0                                             ; MODE 34
VW_35   VWSTAB 35,108K,384, 767,287,0,1,2,15, 95, 35,2,2,0                                             ; MODE 35
VW_36   VWSTAB 36,216K,768, 767,287,0,1,2,63, 95, 35,3,3,0                                             ; MODE 36

VW_37 VWSTAB 37,M37S  ,112, 895,351,0,1,2, 1,111, 43,0,0,0                                             ; MODE 37
VW_38 VWSTAB 38,M37S*2,224, 895,351,0,1,2, 3,111, 43,1,1,0                                             ; MODE 38
VW_39 VWSTAB 39,M37S*4,448, 895,351,0,1,2,15,111, 43,2,2,0                                             ; MODE 39
VW_40 VWSTAB 40,M37S*8,896, 895,351,0,1,2,63,111, 43,3,3,0                                             ; MODE 40

VW_41 VWSTAB 41,M41S  , 80, 639,351,0,1,2, 1, 79, 43,0,0,0                                             ; EGA 1,2,4bpp
VW_42 VWSTAB 42,M41S*2,160, 639,351,0,1,2, 3, 79, 43,1,1,0                                             ;
VW_43 VWSTAB 43,M41S*4,320, 639,351,0,1,2,15, 79, 43,2,2,0                                             ; 640x352

VW_44 VWSTAB 44,M44S  , 80, 639,199,0,1,2, 1, 79, 24,0,0,0                                             ; CGA 1,2,4bpp
VW_45 VWSTAB 45,M44S*2,160, 639,199,0,1,2, 3, 79, 24,1,1,0                                             ;
VW_46 VWSTAB 46,M44S*4,320, 639,199,0,1,2,15, 79, 24,2,2,0                                             ; 640x200

VW_47 VWSTAB 47,M47S*8,360, 359,479,0,2,2,63, 44, 59,3,3,0                                             ; PCSoft 360 x 480 x 8bpp
VW_48 VWSTAB 48,   75K,160, 319,479,0,2,1,15, 39, 59,2,2,0                                             ; Games 320 x 480 x 4bpp
VW_49 VWSTAB 49,  150K,320, 319,479,0,2,1,63, 39, 59,3,3,0                                             ; Games 320 x 480 x 8bpp

VW_50 VWSTAB 50,M50S  , 40, 319,239,0,2,2, 1, 39, 29,0,0,0
VW_51 VWSTAB 51,M50S*2, 80, 319,239,0,2,2, 3, 39, 29,1,1,0
VW_52 VWSTAB 52,M50S*4,160, 319,239,0,2,2,15, 39, 29,2,2,0
VW_53 VWSTAB 53,M50S*8,320, 319,239,0,2,2,63, 39, 29,3,3,0

;            $BaseMode              $YShftFactor  $ScrBRow
;               $ScreenSize           $XEigFactor    $Log2BPC
;                      $LineLength      $YEigFactor    $Log2BPP
;                           $XWindLimit   $NColour       $ModeFlags
;                               $YWindLimit   $ScrRCol

        END