Секреты инициализации UOC-Leader (TDA9341, TDA937x, OM837x)

UOC-Leader — упрощённо говоря, это семейство UOC в которых видеопроцессор (Octava) такой же как в обычных UOC, а вот контроллер с OSD сделан более дешёвым способом, чем в UOC или в UOC3: кодовая и символьная память физически одно целое, NXP называет ИМС семейства UOC-Leader, как Split Memory Device’s. Многообразие типов UOC-Leader также, как и в UOC/UOC+ достигается инициализацией «секретного» регистра 0xFF видеопроцессора: подробнее об этом написано здесь.

Но, несмотря на то, что идея, лежащая в основе многообразия типов ИМС, та же, но инициализация в UOC-Leader выглядит иначе. Ниже приводится код инициализации для TDA9341.

823A E4                       clr     A
823B F5 2B                    mov     RAM_2B, A
823D 85 A2 2C                 mov     RAM_2C, TXT32
8240 12 A8 F0                 lcall   i2c_disable
8243          loc_8243:
8243 7F 01                    mov     R7, #1
8245 12 8E BF                 lcall   uoc_rdstatus
8248 EF                       mov     A, R7
8249 20 E7 F7                 jb      ACC7, loc_8243    ; POR-check
824C AD 2C                    mov     R5, RAM_2C
824E 7F FF                    mov     R7, #0xFF
8250 12 8C B8                 lcall   uoc_wrbyte

Как видно из приведённого фрагмента, значение boot-регистра выбирается сразу из TXT32, а не формируется с помощью табличного алгоритма, как в UOC/UOC+. Значение TXT32 формируется на основе значений ячеек CHARROM по адресам 0x7FF8(GPF1) и 0x7FF9(GPF2). Интерпретация битов boot-регистра такая же, как и для UOC/UOC+:
b.6 — QSS
b.5 — FMradio
b.4 — East/West
b.3 — AM detector
b.2 — SECAM
b.1 — NTSC
b.0 — PAL

Как и в случае с UOC/UOC+, когда у Вас нет под рукой требуемой болванки, достаточно пропатчить код прошивки, чтобы она нормально работала в другой болванке. В данном случае, чтобы прошивка из TDA9341 нормально работала в болванке TDA9377 достаточно по адресу 0x823D вписать команду mov RAM_2C, #7 (код: 75 2C 07) вместо старой команды mov RAM_2C, TXT32.

Замечу, что по спецификации семейство TDA937x вообще не имеет декодера SECAM-а, а TDA9377 вообще имеет на борту только декодер NTSC, однако, после такого патча отлично работает работает и с SECAM-ом в качестве TDA9341.