diff --git a/TestSrc/Begin b/TestSrc/Begin
index 7ea144cc6e0fed8f1a8fbee915fd55adb42adc52..bbc46c57084755cb35e50aaa301b15229af362a5 100644
--- a/TestSrc/Begin
+++ b/TestSrc/Begin
@@ -122,6 +122,9 @@ DontShowProgressColours	SETL	{TRUE} :LAND: STB		; Do not show the progress colou
 								; Progress Colours will always be shown when using POST Box.
 								; Set to true for NC - Fault Report ANC-00159.
 
+                GBLL    DontDoCMOSTest
+DontDoCMOSTest  SETL    {TRUE} :LAND: STB
+
 
 
 ts_Rom_bits     *       21                              ; Widest ROM address
@@ -1089,6 +1092,9 @@ ts_IOEBtest
 
 
 ts_CMOStest
+        [ DontDoCMOSTest
+        B       ts_IOinit
+        |
         ADR     r4,%FT1
         BL      ts_SendText
 
@@ -1264,6 +1270,8 @@ ts_CMOStest
 25
         B       ts_IOinit
 
+        ] ; DontDoCMOSTest
+
         LTORG
         ROUT
 ;
diff --git a/VersionASM b/VersionASM
index 507e62f6019938f918a9da89139faafa1af837a7..680eb02a4128b1eab379461e5859320def18697b 100644
--- a/VersionASM
+++ b/VersionASM
@@ -6,9 +6,9 @@
 			GBLS	Module_MinorVersion
 			GBLS	Module_Date
 			GBLS	Module_FullVersion
-Module_MajorVersion	SETS    "4.89"
-Module_Version          SETA    489
+Module_MajorVersion	SETS    "4.90"
+Module_Version          SETA    490
 Module_MinorVersion	SETS	""
-Module_Date		SETS    "23 Sep 1999"
-Module_FullVersion      SETS    "4.89"
+Module_Date		SETS    "29 Sep 1999"
+Module_FullVersion      SETS    "4.90"
                         END
diff --git a/VersionNum b/VersionNum
index 19b2aa7597f13934225c16d4dd9eba3b83d5ae65..1c5ff5d44bd0f9d33e0bda7f849b33557676174f 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,15 +1,15 @@
-/* (4.89)
+/* (4.90)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  *
  */
-#define Module_MajorVersion_CMHG     	4.89
+#define Module_MajorVersion_CMHG     	4.90
 #define Module_MinorVersion_CMHG	
-#define Module_Date_CMHG      		23 Sep 1999
+#define Module_Date_CMHG      		29 Sep 1999
 
-#define Module_MajorVersion     	"4.89"
-#define Module_Version                  489
+#define Module_MajorVersion     	"4.90"
+#define Module_Version                  490
 #define Module_MinorVersion		""
-#define Module_Date      		"23 Sep 1999"
+#define Module_Date      		"29 Sep 1999"
 
-#define Module_FullVersion              "4.89"
+#define Module_FullVersion              "4.90"
diff --git a/s/ARM600 b/s/ARM600
index aad1e5f41994cd713f15157d2f3de58de3dc2021..1d7069ed0ece6e291b265da09f6f27a9325e0b64 100644
--- a/s/ARM600
+++ b/s/ARM600
@@ -966,15 +966,15 @@ init7500FEcpu
 ;
    [ FECPUSpeedNormal
      [ FEIOSpeedHalf
-	MOV     r0, #IOMD_CLKCTL_CpuclkNormal + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkNormal
-     |
 	MOV     r0, #IOMD_CLKCTL_CpuclkNormal + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkHalf
+     |
+	MOV     r0, #IOMD_CLKCTL_CpuclkNormal + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkNormal
      ]
    |
      [ FEIOSpeedHalf
-	MOV     r0, #IOMD_CLKCTL_CpuclkHalf + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkNormal
-     |
 	MOV     r0, #IOMD_CLKCTL_CpuclkHalf + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkHalf
+     |
+	MOV     r0, #IOMD_CLKCTL_CpuclkHalf + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkNormal
      ]
    ]
   ]
diff --git a/s/NewReset b/s/NewReset
index 28470c018cd9fd2c72473d2372ebcbfe9bd3486d..d681a44d373af132b2544629c9501cc477b3c725 100644
--- a/s/NewReset
+++ b/s/NewReset
@@ -970,7 +970,7 @@ reset_loop
  ; Oh, just leave it be
 	MOV	R0, #VduCMOS
 	BL	Read
- [ IOMD_C_MonitorType = 0 :LAND: MPEGPoduleNTSCNotPALMask = 0 :LAND: IOMD_C_PALNTSCType = 0
+ [ IOMD_C_MonitorType = 0 :LAND: IOMD_C_PALNTSCType = 0
 ; Force TV if we don't have a MonitorType auto-detect bit
 	TEQ	R0, #(Sync_Separate :OR: MonitorType0)
  |
@@ -1237,7 +1237,7 @@ DefaultCMOSTable ; list of non-zero options wanted :
         =       DBTBCMOS,	        (1:SHL:4)				; Boot
         =       YearCMOS,               97
         =       YearCMOS+1,             19
-  [ IOMD_C_MonitorType = 0 :LAND: MPEGPoduleNTSCNotPALMask = 0 :LAND: IOMD_C_PALNTSCType = 0
+  [ IOMD_C_MonitorType = 0 :LAND: IOMD_C_PALNTSCType = 0
 ; TV if we don't have a MonitorType auto-detect bit
 	=	VduCMOS,	        Sync_Separate :OR: MonitorType0
   |
diff --git a/s/PMF/i2cutils b/s/PMF/i2cutils
index 2820f8a0d6f8c6386aecb8faa3aeebd47c2b5f25..721905b02c452be57b8c8355d6023468873e299e 100644
--- a/s/PMF/i2cutils
+++ b/s/PMF/i2cutils
@@ -463,7 +463,7 @@ Write
 
         MOV     R14, #0                 ; don't write to protected section
         LDRB    R14, [R14, #NVRamWriteSize]
-        CMP     R0, R14                 ; (note assumption that NVRamWriteSize is
+        CMP     R0, R14, LSL #8         ; (note assumption that NVRamWriteSize is
         Pull    "R0-R4, PC", HS         ; outside mangled region).
 
 	MOV	R2, R0
@@ -542,6 +542,7 @@ WriteBlock ROUT
         MOV	R14, #0
         LDRB    R4, [R14, #NVRamWriteSize]
         LDRB	R14, [R14, #NVRamSize]
+        MOV     R4, R4, LSL #8
         |
         LDRB	R14, NVSize
         MOV     R4, R14
@@ -1320,38 +1321,6 @@ MakeChecksum	ROUT
 
         LTORG
 
-; *****************************************************************************
-;
-;       OS_SetTime - Set the real-time clock
-;
-; in:   R0 = pointer to 5 byte UTC time
-;
-; out:  R0 preserved
-;
-
-SetTimeSWI ROUT
-        Push    "R0-R8"
-        SUB     SP, SP, #36
-        MOV     R1, R0
-        MOV     R2, SP
-        SWI     XTerritory_ConvertTimeToUTCOrdinals
-        ADDVS   SP, SP, #36+4
-        Pull    "R1-R8", VS
-        ExitSWIHandler VS
-        LDR     R8, [SP], #4    ; centiseconds
-        LDR     R7, [SP], #4    ; seconds
-        LDR     R1, [SP], #4    ; minutes
-        Pull    "R0,R2,R3,R5"   ; hours, day, month, year
-        ADD     SP, SP, #8      ; junk day of week and year
-        MOV     R4, #100
-        DivRem  R6, R5, R4, R14 ; R5 = year (lo), R6 = year (hi)
-
-        BL      SetTime
-
-        STRVS   R0,[SP]
-        Pull    "R0-R8"
-        ExitSWIHandler
-
 ; *****************************************************************************
 ;
 ;	SetTime - Write the CMOS clock time and update 5-byte RealTime
diff --git a/s/PMF/osinit b/s/PMF/osinit
index 6c3d50b13107fd72a74fb678b4c923b0567e0ec4..27748ca54035df252e6c66fabf5d892ea122b6d7 100644
--- a/s/PMF/osinit
+++ b/s/PMF/osinit
@@ -683,33 +683,23 @@ ReadMachineType ENTRY "r0-r12"
         MOVEQ   r2, #&FF                        ; then return all ones for monitor lead type
         BEQ     %FT90
 
+      [ MPEGPoduleNTSCNotPALMask <> 0
+        !       1, "Sorry, I don't do MPEGPoduleNTSCNotPALMask any more"
+      ]
+
         [ STB
         LDR     r0, =VIDC                       ; on VIDC20 we invert HSYNC by writing to External Register
 
   [ MorrisSupport				; On Morris, monitor auto-detect has been moved to IOMD_CLINES
-	TST     R11, #IOST_7500
-        LDREQ	r3, =IOMD_MonitorType		; Not Morris, address is in old place
-    [ IOMD_C_MonitorType = 0			; Monitor auto-detect not supported:
-     [ MPEGPoduleNTSCNotPALMask <> 0
-	BEQ	%FT15				; not an IOMD-style machine, so skip any STB stuff
-	LDR	r3, =MPEGPoduleNTSCNotPALAddress ; point at podule status register
-	LDRB	r2, [r3]
-	TST	r2, #MPEGPoduleNTSCNotPALMask	; test PAL/NTSC bit
-	MOVEQ	r2, #4_0331			; if bit clear then PAL TV
-	MOVNE	r2, #4_1331			; if bit set then NTSC TV
-	B	%FT90
-15
-     |
-        MOVNE	r2, #&FF                        ; then return all ones for monitor lead type
-        BNE	%FT90
-     ]
-    |
+    [ IOMD_C_MonitorType <> 0
 	ASSERT	(IOMD_C_MonitorType = (1<<0))	; this code only understands auto-detect in bit 0
-	LDRNE	r3, =(IOMD_Base + IOMD_CLINES)
     ]
+	TST     R11, #IOST_7500
+        LDREQ	r3, =IOMD_MonitorType		; Not Morris, address is in old place
+        LDRNE   r3, =(IOMD_Base + IOMD_CLINES)
   |
         LDR     r3, =IOMD_MonitorType
-  ]
+  ] ; MorrisSupport
 
         LDR     r1, =VIDCExternal+Ext_InvertCompVSYNC+Ext_DACsOn+Ext_ERegExt ; normal HSYNC value
         STR     r1, [r0]
@@ -769,7 +759,7 @@ ReadMachineType ENTRY "r0-r12"
         BL      CheckBits                       ; call check routine with second value
         SUBS    r12, r12, #1
         BNE     %BT20
-        |
+        | ; STB
 
  [ VIDC_Type = "VIDC20"
         LDR     r0, =VIDC                       ; on VIDC20 we invert HSYNC by writing to External Register
@@ -853,7 +843,7 @@ ReadMachineType ENTRY "r0-r12"
 
 
 
-        ]
+        ] ; STB
 
 ; now process result
 
@@ -980,17 +970,19 @@ TranslateMonitorLeadType ENTRY "r0-r2"
 MonitorLeadList
   [ STB
    [ IOMD_C_MonitorType = 0					; no auto-detect bit
-    [ MPEGPoduleNTSCNotPALMask <> 0
-        MonitorLeadItem 4_0331,  50, 0, 0                       ; PAL TV interlaced overscanned
-        MonitorLeadItem 4_1331,  58, 8, 0                       ; NTSC TV interlaced overscanned
-    ]
+     [ IOMD_C_PALNTSCType = 0					; no PAL/NTSC bits:
+        MonitorLeadItem 4_3333,  12, 0, 1                       ; PAL TV assumed
+     | ; IOMD_C_PALNTSCType = 0
+        MonitorLeadItem 4_0333,  12, 0, 1                       ; PAL TV
+        MonitorLeadItem 4_1333,  46, 8, 1                       ; NTSC TV
+     ] ; IOMD_C_PALNTSCType = 0
    |
      [ :LNOT: ChrontelSupport
        [ IOMD_C_PALNTSCType = 0					; no PAL/NTSC bits:
         MonitorLeadItem 4_3331,  12, 0, 1                       ; PAL TV assumed
        | ; IOMD_C_PALNTSCType = 0				; wealth of bits:
-        MonitorLeadItem 4_0331,  50, 0, 0                       ; PAL TV interlaced overscanned
-        MonitorLeadItem 4_1331,  58, 8, 0                       ; NTSC TV interlaced overscanned
+        MonitorLeadItem 4_0331,  12, 0, 1                       ; PAL TV
+        MonitorLeadItem 4_1331,  46, 8, 1                       ; NTSC TV
        ] ; IOMD_C_PALNTSCType = 0
      ] ; :LNOT: ChrontelSupport
    ] ; IOMD_C_MonitorType = 0
diff --git a/s/vdu/vdumodes b/s/vdu/vdumodes
index f955e59f11b1e4484e94da7348c1dc46df6fb3c8..1460f2e069011e7cff6d14f9b48df5b4d81407cc 100644
--- a/s/vdu/vdumodes
+++ b/s/vdu/vdumodes
@@ -289,7 +289,7 @@ F_$label *      framerate       ; set up frame rate symbol
  ]
         MEND
 
-NumMonitorTypes *       5
+NumMonitorTypes *       9
 NumModes        *       50
 maxmode         *       NumModes-1
 minmode         *       0
@@ -593,6 +593,218 @@ BigVIDCTable
 
         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
+        &       -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
+
+        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
+
+        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
+
+        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
+
+        ASSERT  (.-BigVIDCTable)=((NumModes*NumMonitorTypes):SHL:2)
+
 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
diff --git a/s/vdu/vduswis b/s/vdu/vduswis
index 882be16f8b2318e22a8cf890655e0c0b2848dafe..12ec36544c8992b83ef2a71b1683023bcefae60c 100644
--- a/s/vdu/vduswis
+++ b/s/vdu/vduswis
@@ -879,6 +879,8 @@ FindOKMode ROUT
 
         ADR     r14, SubstModeTable
         LDR     r11, [r14, r3, LSL #2]
+        TEQ     r11, #0                 ; if r0=0, monitor type is actually unknown - issue service call
+        BEQ     %FT10
         ADD     r1, r11, r14
 05
         BL      FindSubstitute
@@ -921,6 +923,10 @@ SubstModeTable
         &       SubstType2-SubstModeTable
         &       SubstType3-SubstModeTable
         &       SubstType4-SubstModeTable
+        &       0
+        &       0
+        &       0
+        &       SubstType8-SubstModeTable
 
 SubstType01
         =        0,  8, 12, 15
@@ -930,6 +936,8 @@ SubstType3
         =       25, 26, 27, 28
 SubstType4
         =       29, 30, 31, 32
+SubstType8
+        =       44, 45, 46, 46
 
 ; *****************************************************************************
 ;