From fb297c9b6accf599a23239f50157195bf451bab1 Mon Sep 17 00:00:00 2001
From: Kevin Bracey <kbracey@gitlab.riscosopen.org>
Date: Wed, 29 Sep 1999 17:09:34 +0000
Subject: [PATCH] * Meaning of FEIOSpeedHalf was accidentally inverted.

* Wasn't allowing writes to most of EEPROM.
* Old prototype OS_SetTime SWI code removed.
* MPEGPoduleNTSCNotPALMask option support removed to simplify things a bit.
* Now can cope with a system with a PAL/NTSC link, but no monitor detect line.
* Default PAL & NTSC modes now always 12 & 46 respectively.
* Kernel now knows about monitor type 8 (NTSC) - modes 44-46 (640x200) are
  available.
* STB/NC CMOS test removed from POST pending further investigation.

Version 4.90. Tagged as 'Kernel-4_90'
---
 TestSrc/Begin  |   8 ++
 VersionASM     |   8 +-
 VersionNum     |  14 ++--
 s/ARM600       |   8 +-
 s/NewReset     |   4 +-
 s/PMF/i2cutils |  35 +-------
 s/PMF/osinit   |  46 +++++------
 s/vdu/vdumodes | 214 ++++++++++++++++++++++++++++++++++++++++++++++++-
 s/vdu/vduswis  |   8 ++
 9 files changed, 267 insertions(+), 78 deletions(-)

diff --git a/TestSrc/Begin b/TestSrc/Begin
index 7ea144cc..bbc46c57 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 507e62f6..680eb02a 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 19b2aa75..1c5ff5d4 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 aad1e5f4..1d7069ed 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 28470c01..d681a44d 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 2820f8a0..721905b0 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 6c3d50b1..27748ca5 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 f955e59f..1460f2e0 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 882be16f..12ec3654 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
 
 ; *****************************************************************************
 ;
-- 
GitLab