вторник, 26 декабря 2023 г.

Different stack in priviledged and user mode in cortex a15


1. privileged and user mode from ARM Architecture Manual ARMv7-A and ARMv7-R edition

"A3.6.1 Processor privilege levels, execution privilege, and access privilege
As introduced in About the Application level programmers’ model on page A2-38, within a security state, the ARMv7 architecture defines different levels of execution privilege:
• in Secure state, the privilege levels are PL1 and PL0
• in Non-secure state, the privilege levels are PL2, PL1, and PL0.

PL0 indicates unprivileged execution in the current security state.
The current processor mode determines the execution privilege level, and therefore the execution privilege level can be described as the processor privilege level.

Every memory access has an access privilege, that is either unprivileged or privileged.

The characteristics of the privilege levels are:

1) PL0 The privilege level of application software, that executes in User mode. Therefore, software
executed in User mode is described as unprivileged software. This software cannot access some
features of the architecture. In particular, it cannot change many of the configuration settings.
Software executing at PL0 makes only unprivileged memory accesses.

2) PL1 Software execution in all modes other than User mode and Hyp mode is at PL1. Normally, operating system software executes at PL1. Software executing at PL1 can access all features of the
architecture, and can change the configuration settings for those features, except for some features
added by the Virtualization Extensions that are only accessible at PL2.

Note In many implementation models, system software is unaware of the PL2 level of privilege, and of
whether the implementation includes the Virtualization Extensions.

The PL1 modes refers to all the modes other than User mode and Hyp mode.
Software executing at PL1 makes privileged memory accesses by default, but can also make
unprivileged accesses.

3) PL2 Software executing in Hyp mode executes at PL2.
Software executing at PL2 can perform all of the operations accessible at PL1, and can access some
additional functionality.
Hyp mode is normally used by a hypervisor, that controls, and can switch between, Guest OSs, that
execute at PL1.


2. run-time initialization of c program

8.11.1 Run-Time Initialization from TI Assembly Guide
"All C/C++ programs must be linked with code to initialize and execute the program, called a bootstrap routine, also known as the boot.obj object module. The symbol _c_int00 is defined as the program entry point and is the start of the C boot routine in boot.obj; referencing _c_int00 ensures that boot.obj is automatically linked in from the run-time-support library. When a program begins running, it executes boot.obj first. The boot.obj symbol contains code and data for initializing the run-time environment and performs the following tasks:
• Changes from system mode to user mode
• Sets up the user mode stack
• Processes the run-time .cinit initialization table and autoinitializes global variables (when the linker is invoked with the --rom_model option)
• Calls main
The run-time-support object libraries contain boot.obj. You can:
• Use the archiver to extract boot.obj from the library and then link the module in directly.
• Include the appropriate run-time-support library as an input file (the linker automatically extracts
boot.obj when you use the --ram_model or --rom_model option)."


3. stack - регистр R13 (SP)

6.1.2 C/C++ System Stack from ARM Optmizing C/C++ Compiler

"The run-time stack grows from the high addresses to the low addresses. The compiler uses the R13 register to manage this stack. R13 is the stack pointer (SP), which points to the next unused location on the stack.

The linker sets the stack size, creates a global symbol, __TI_STACK_SIZE, and assigns it a value equal to the stack size in bytes. The default stack size is 2048 bytes. You can change the stack size at link time by using the --stack_size option with the linker command. For more information on the --stack_size option, see the linker description chapter in the ARM Assembly Language Tools User's Guide.

At system initialization, SP is set to a designated address for the top of the stack. This address is the first location past the end of the .stack section. Since the position of the stack depends on where the .stack section is allocated, the actual address of the stack is determined at link time.

The C/C++ environment automatically decrements SP at the entry to a function to reserve all the space
necessary for the execution of that function. The stack pointer is incremented at the exit of the function to restore the stack to the state before the function was entered. If you interface assembly language routines to C/C++ programs, be sure to restore the stack pointer to the same state it was in before the function was entered."

Links:

4. heap

6.1.3 Dynamic Memory Allocation from ARM Optmizing C/C++ Compiler

"The run-time-support library supplied with the ARM compiler contains several functions (such as malloc, calloc, and realloc) that allow you to allocate memory dynamically for variables at run time.

Memory is allocated from a global pool, or heap, that is defined in the .sysmem section. You can set the size of the .sysmem section by using the --heap_size=size option with the linker command. The linker also creates a global symbol, __TI_SYSMEM_SIZE, and assigns it a value equal to the size of the heap in bytes. The default size is 2048 bytes. For more information on the --heap_size option, see the linker description chapter in the ARM Assembly Language Tools User's Guide.

If you use any C I/O function, the RTS library allocates an I/O buffer for each file you access. This buffer will be a bit larger than BUFSIZ, which is defined in stdio.h and defaults to 256. Make sure you allocate a heap large enough for these buffers or use setvbuf to change the buffer to a statically-allocated buffer.

Dynamically allocated objects are not addressed directly (they are always accessed with pointers) and the memory pool is in a separate section (.sysmem). Therefore, the dynamic memory pool size may be limited only by the amount of memory in your system. To conserve space in the .bss section, you can allocate large arrays from the heap instead of defining them as global or static. For example, instead of a definition such as:
struct big table[100];

Use a pointer and call the malloc function:
struct big *table
table = (struct big *)malloc(100*sizeof(struct big));

When allocating from a heap, make sure the size of the heap is large enough for the allocation. This is particularly important when allocating variable-length arrays."

Links:

вторник, 12 декабря 2023 г.

Устранение проблемы c вечной перезагрузкой ноута ASUS N61J "SYSTEM THREAD EXCEPTION NOT HANDLED" (ETD.sys)

На ноуте ASUS N61J при покупке стояла windows 7. Я поставил windows 10 и fedora. При обновлении на windows 10, видимо, нет корректных драйверов для Elan Trackpad Device (ETD). Драйвер, как говорят здесь, скачивается со стандартными обновлениями windows. Решение в статье заклюается в том, что надо либо сам ноут довести до состояния, чтобы появилось автоматическое восстановление, либо загрузиться с установочной флешки в меню автоматического восстановления. Но у меня ни первый способ, ни второй не получились. Получилось через dualboot на Fedora сделать ntfsfix нужному разделу с системными файлами windows 10. После этого раздел стал доступен в режиме rw и я просто через mc удалил файл C:\windows\system32\drivers\ETD.sys.

понедельник, 13 ноября 2023 г.

Set stack in system and irq mode in cortex a15

Code Composer Studio v. 11.1.0.00011 Windows

1. Build Tool: ti-cgt-arm_20.2.7.LTS

Перед main загружается из файла
C:\ti\ccs1110\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\src\boot_non_cortex_m.asm
asm-функция _c_int00 на строчке 180 (32 BIT STATE BOOT ROUTINE).

Файл boot_non_cortex_m.asm надо немного отредактировать, чтобы при старте cortex a15 процессор не падал в hard fault.

;****************************************************************************
;* BOOT.ASM
;*
;* THIS IS THE INITAL BOOT ROUTINE FOR TMS470 C++ PROGRAMS.
;* IT MUST BE LINKED AND LOADED WITH ALL C++ PROGRAMS.
;*
;* THIS MODULE PERFORMS THE FOLLOWING ACTIONS:
;*   1) ALLOCATES THE STACK AND INITIALIZES THE STACK POINTER
;*   2) CALLS AUTO-INITIALIZATION ROUTINE
;*   3) CALLS THE FUNCTION MAIN TO START THE C++ PROGRAM
;*   4) CALLS THE STANDARD EXIT ROUTINE
;*
;* THIS MODULE DEFINES THE FOLLOWING GLOBAL SYMBOLS:
;*   1) __stack     STACK MEMORY AREA
;*   2) _c_int00    BOOT ROUTINE
;*
;****************************************************************************
.armfunc _c_int00

;****************************************************************************
;*  32 BIT STATE BOOT ROUTINE                                               *
;****************************************************************************

    .global __stack
;***************************************************************
;* DEFINE THE USER MODE STACK (DEFAULT SIZE IS 512)
;***************************************************************
__stack:.usect  ".stack", 0, 4

    .global _c_int00
;***************************************************************
;* FUNCTION DEF: _c_int00
;***************************************************************
_c_int00: .asmfunc stack_usage(0)

    ; Invalidate and Enable Branch Prediction
    MOV     r0, #0
    MCR     p15, #0, r0, c7, c5, #6
    ISB
    MRC     p15, #0, r0, c1, c0, #0
    ORR     r0, r0, #0x00000800
    MCR     p15, #0, r0, c1, c0, #0

    .if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__

        ;
        ; Enable Neon/VFP Co-Processor
        ;
MRC p15, #0, r1, c1, c0, #2        ; r1 = Access Control Register
ORR r1, r1, #(0xf << 20)           ; enable full access for p10,11
MCR p15, #0, r1, c1, c0, #2        ; Access Control Register = r1
MOV r1, #0
MCR p15, #0, r1, c7, c5, #4        ; flush prefetch buffer
MOV r0,#0x40000000
FMXR FPEXC, r0                     ; Set Neon/VFP Enable bit
        ;*------------------------------------------------------
        ;* SETUP PRIVILEGED AND USER MODE ACCESS TO COPROCESSORS
        ;* 10 AND 11, REQUIRED TO ENABLE NEON/VFP
        ;* COPROCESSOR ACCESS CONTROL REG
        ;* BITS [23:22] - CP11, [21:20] - CP10
        ;* SET TO 0b11 TO ENABLE USER AND PRIV MODE ACCESS
        ;*------------------------------------------------------
        ;MRC      p15,#0x0,r0,c1,c0,#2
        ;MOV      r3,#0xf00000
        ;ORR      r0,r0,r3
        ;MCR      p15,#0x0,r0,c1,c0,#2

        ;*------------------------------------------------------
        ; SET THE EN BIT, FPEXC[30] TO ENABLE NEON AND VFP
        ;*------------------------------------------------------
        ;MOV      r0,#0x40000000
        ;FMXR     FPEXC,r0
.endif

    ;*------------------------------------------------------
    ;* SET TO USER MODE
    ;*------------------------------------------------------
    ;
    ; Change to user mode. It allows for a stack smaller than 64kB.
    ;
    ;MRS     r0, cpsr
    ;BIC     r0, r0, #0x1F  ; CLEAR MODES
    ;ORR     r0, r0, #0x10  ; SET USER MODE
    ;MSR     cpsr_pf, r0

    ;*------------------------------------------------------
    ;* INITIALIZE THE USER MODE STACK
    ;*------------------------------------------------------
    ;.if __TI_AVOID_EMBEDDED_CONSTANTS
    ;    MOVW    sp, __STACK_END
    ;    MOVT    sp, __STACK_END
    ;.else
    ;LDR     sp, c_STACK_END
    ;.endif

    ;
    ; The stack for all the modes (Abort, FIQ, etc.) is set by
    ; the runtime support library.
    ;
    BIC   r0, r0, #0x1F ; system mode

    ORR   r0, r0, #0x12 ; IRQ mode
    MSR   cpsr_cf, r0
LDR   r13, c_IRQ_STACK_END

    ORR   r0, r0, #0x1F ; system mode
    MSR   cpsr_cf, r0
LDR   r13, c_SYSTEM_STACK_END

    ;*------------------------------------------------------
;* Call the __mpu_init hook function.
    ;*------------------------------------------------------
    BL      __mpu_init

    ;*------------------------------------------------------
    ;* Perform all the required initializations when
    ;* _system_pre_init() returns non-zero:
    ;*   - Process BINIT Table
    ;*   - Perform C auto initialization
    ;*   - Call global constructors
    ;*------------------------------------------------------
    BL      _system_pre_init
    CMP     R0, #0
    BEQ     bypass_auto_init
    BL      __TI_auto_init
bypass_auto_init:

    ;*------------------------------------------------------
    ;* CALL APPLICATION
    ;*------------------------------------------------------
    BL      _args_main

    ;*------------------------------------------------------
    ;* IF APPLICATION DIDN'T CALL EXIT, CALL EXIT(1)
    ;*------------------------------------------------------
    MOV     R0, #1
    BL      exit

    ;*------------------------------------------------------
    ;* DONE, LOOP FOREVER
    ;*------------------------------------------------------
L1:     B       L1
    .endasmfunc

;***************************************************************
;* CONSTANTS USED BY THIS MODULE
;***************************************************************
    ;.if !__TI_AVOID_EMBEDDED_CONSTANTS
c_SYSTEM_STACK_END    .long    __STACK_END
c_IRQ_STACK_END       .long    __STACK_END - 0x400
    ;.endif

;******************************************************
;* UNDEFINED REFERENCES                               *
;******************************************************
.global __STACK_END
        .global _system_pre_init
        .global __TI_auto_init
.global _args_main
.global exit
.global __mpu_init

.end

Links:

2. Build tool: Linaro GNU v7.2.1. Файл в сконструированном мастером проекте startup_ARMCA15.S.

@******************************************************************************
@
@ startup_ARMCA15.S - Init code routine for Cortex A15 cores and Linaro baremetal
@


@****************************** Global Symbols*******************************
.global Entry
.global __stack
.global __bss_start__
.global __bss_end__
.global start_boot


@************************ Internal Definitions ******************************
@
@ to set the mode bits in CPSR for different modes
@
.set MODE_USR, 0x10
.set MODE_FIQ, 0x11
.set MODE_IRQ, 0x12
.set MODE_SVC, 0x13
.set MODE_ABT, 0x17
.set MODE_UND, 0x1B
.set MODE_SYS, 0x1F


.equ I_F_BIT, 0xC0


@**************************** Code Section ***********************************
.text


@
@ This code is assembled for ARM instructions
@
.code 32


@******************************************************************************
@
@******************************************************************************
@
@ The reset handler sets up the stack pointers for all the modes. The FIQ and
@ IRQ shall be disabled during this. Then clears the BSS section, enters the
@ main function.


Entry:




@ Invalidate and Enable Branch Prediction
MOV r0, #0
MCR p15, #0, r0, c7, c5, #6
ISB
MRC p15, #0, r0, c1, c0, #0
ORR r0, r0, #0x00000800
MCR p15, #0, r0, c1, c0, #0


.if __ARM_PCS_VFP == 1


@
@ Enable Neon/VFP Co-Processor
@
MRC p15, #0, r1, c1, c0, #2 @ r1 = Access Control Register
ORR r1, r1, #(0xf << 20) @ enable full access for p10,11
MCR p15, #0, r1, c1, c0, #2 @ Access Control Register = r1
MOV r1, #0
MCR p15, #0, r1, c7, c5, #4 @ flush prefetch buffer
MOV r0,#0x40000000
FMXR FPEXC, r0 @ Set Neon/VFP Enable bit


.endif


MRS r0, cpsr
ORR r0, r0, #192
MSR cpsr, r0
@
@ The stack for all the modes (Abort, FIQ, etc.) is set by
@ the runtime support library.
@
BIC r0, r0, #0x1F


ORR r0, r0, #0x12
MSR cpsr_cf, r0
LDR r13, = __StackMp


ORR r0, r0, #0x1F
MSR cpsr_cf, r0
LDR r13, = __StackTop
@
@ Set up the Vector Base Address Regsiter
@
LDR r0, = __isr_vector
MCR p15, 0, r0, c12, c0, 0 @ Write VBAR Register

.if USERMODE == 1
@
@ Change to user mode. It allows for a stack smaller than 64kB.
@
MSR cpsr_c, #MODE_USR|I_F_BIT @ change to user mode
.endif


@
@ The BSS section is cleared by the runtime support library
@


@
@ Enter the main function.
@ The symbol _start is the entry point for the runtime support library
@


Enter_BootLoader:
LDR r10, = _start @ Get the address of _start
MOV lr,pc @ Dummy return
BX r10 @ Branch to main
SUB pc, pc, #0x08 @ looping


@
@ Set the Stack space here
@
.section .stack
.align 4
.globl __StackBase
.globl __StackLimit
__StackLimit:
@ .space 0x400 @ the stack size is set by the linker script
.size __StackLimit, . - __StackLimit
__StackBase:
.size __StackBase, . - __StackBase


@
@ Set the Heap space here
@
.section .heap
.align 4
.globl __HeapBase
.globl __HeapLimit
__HeapBase:
@ .space 0x400 @ the heap size is set by the linker script
.size __HeapBase, . - __HeapBase
__HeapLimit:
.size __HeapLimit, . - __HeapLimit

@
@ Set the Interrupt vector table here
@


.section .isr_vector
.align 4
.globl __isr_vector
__isr_vector:
LDR pc, [pc,#24] @ 0x00 Reset
LDR pc, = UndefInstHandler @ 0x04 Undefined instruction
LDR pc, = SVC_Handler @ 0x08 Supervisor
LDR pc, = AbortHandler @ 0x0C Prefetch abort
LDR pc, = AbortHandler @ 0x10 Data abort
LDR pc, = AbortHandler @ 0x14 not used
LDR pc, = IRQHandler @ 0x18 IRQ
LDR pc, = FIQHandler @ 0x1C FIQ


.long Entry
.long 0
.long SVC_Handler
.long 0
.long 0
.long 0
.long 0
.long 0


@
@ End of the file
@
.end


https://community.arm.com/support-forums/f/keil-forum/26293/understanding-pc-r15-register-arm7

Stack:
1) Устройство Стека для Intel386 https://habr.com/ru/articles/675522/
3) Как защититься от переполнения стека (на Cortex M)? https://habr.com/ru/articles/425071/
4) Как работает stack trace на ARM https://habr.com/ru/companies/embox/articles/424365/
5) Одна маленькая загадка про Cortex-M https://habr.com/ru/articles/224101/

Interrupts:
1) Что необходимо знать, чтобы написать свою Embedded RTOS (часть 1) https://habr.com/ru/articles/598693/
2) Тайны пингвина: как работают исключения и прерывания в Linux? https://habr.com/ru/companies/timeweb/articles/780082/
3) Динамическое управление прерываниями в ARM https://habr.com/ru/articles/275351/
4) Прерывания в конвейеризированных процессорах https://habr.com/ru/articles/188002/

четверг, 7 сентября 2023 г.

Двигатель троит на малых оборотах

Ссылки:
1) Троит на холостых и 1000 — 1500 оборотах, советы предложения? https://www.drive2.ru/l/6099110/
2) Троит на холостых: диагностика, форсунки, ревизия впуска, свечи — результат нулевой. Куда копать? https://www.drive2.ru/l/7955924/

Датчик массового расхода воздуха (ДМРВ):
2) Как работает датчик расхода воздуха? (трехмерная анимация) https://www.youtube.com/watch?v=2dPmXo6266o&ab_channel=MotorserviceGroup
3) Датчик массового расхода воздуха https://www.youtube.com/watch?v=LMNmDvi0B3M&ab_channel=AutoOstrov

Перебор двигателя:
1) Капитальный ремонт двигателя subaru impreza 2008 https://www.drive2.ru/l/601054629467261909/
2) Капитальный ремонт двигателя EJ25 Subaru Outback https://www.drive2.ru/b/730555/
4) Разборка, дефектовка Subaru EJ25 с Forester для нашего подписчика https://www.youtube.com/watch?v=n1gWSoIkZEo&ab_channel=XtremeGarageOdessa

Диагностика двигателя:

Создание и отладка c# проектов в Visual Studio Community Edition и Visual Studio Code

VS Community Edition 2022:
1) Visual Studio 2022 Community Installation and C# net development https://www.youtube.com/watch?v=I4oNHzS2Otg&ab_channel=CircuitSecrets

VS Code:
1) Tutorial: Create a .NET console application using Visual Studio Code https://learn.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-7-0
2) Tutorial: Debug a .NET console application using Visual Studio Code https://learn.microsoft.com/en-us/dotnet/core/tutorials/debugging-with-visual-studio-code?pivots=dotnet-7-0

среда, 30 августа 2023 г.

Oculus Quest 2

Ссылки:
2) Покупка - Meta (Oculus) Quest/Quest 2 https://4pda.to/forum/index.php?showtopic=1005642&st=9400
3) Как мы делаем образовательную VR — платформу для университета МИФИ https://habr.com/ru/articles/567500/
4) Работа на орбите, или VR-продуктивность в мире удалёнки https://habr.com/ru/companies/jugru/articles/596215/
5) Состояние VR в 2022-м: работа, 3D-миры, мероприятия, секс, игры https://habr.com/ru/companies/jugru/articles/646565/

понедельник, 31 июля 2023 г.

Датчик температуры, отправляющий ее через GSM

Ссылки:
1) Обзор GSM-розетки «Телеметрика» https://habr.com/ru/companies/dadget/articles/397443/
2) GSM/Wi-Fi сигнализация Navigard NV 8321W https://habr.com/ru/articles/515844/
3) Автономная охранная система на Arduino + GSM https://habr.com/ru/articles/493514/
4) Обзор температурных логгеров (датчиков) для сети LoRaWAN https://habr.com/ru/companies/msw/articles/712334/
5) GSM модули для умного дома https://habr.com/ru/companies/intems/articles/513798/
6) (!)Контролируем температуру по SMS (Arduino Nano + Neoway M660) https://habr.com/ru/articles/364459/
7) Как GPS трекер стал логером или простой и дешевый способ организовать мониторинг физических параметров удаленных объектов https://habr.com/ru/articles/153719/
8) Датчик температуры с GSM модулем? https://qna.habr.com/q/13875
9) Twine: «умный дом» с простым интерфейсом https://habr.com/ru/articles/133421/
10) Опыт применения GSM модуля в домашней автоматизации https://habr.com/ru/articles/460745/

понедельник, 24 июля 2023 г.

вторник, 13 июня 2023 г.

Навес для машины

Навес из железа, дерева:
6) Монтаж готового навеса для авто своими руками. Монолитный поликарбонат, сотовый поликарбонат https://www.youtube.com/watch?v=vyMe6NiCJPo&ab_channel=OscarGroup
11) Навес для автомобиля. Обсуждение, общие вопросы https://www.forumhouse.ru/threads/383575/

среда, 7 июня 2023 г.

Текстовые квесты

Статьи:
1) Как написать хороший текстовый квест: 13 советов https://dtf.ru/gamedev/242049-kak-napisat-horoshiy-tekstovyy-kvest-13-sovetov
2) Текстовые квесты и Интерактивная литература https://quest-book.ru/forum/24
3) Текстовые игры — новый старый инструмент для автора или «Сделаем Текстовые Квесты снова Великими!» https://habr.com/ru/articles/647251/
5) 5 лучших игр в Телеграм: Симулятор фермы, стратегии и текстовые квесты https://vc.ru/flood/586431-5-luchshih-igr-v-telegram-simulyator-fermy-strategii-i-tekstovye-kvesty
6) Постановка задачи: текстовый квест https://codingprojects.ru/textbook/64/lesson/462
8) Текстовые квесты на ПК https://kanobu.ru/games/collections/tekstovye-kvesty-na-pk/?page=2
9) 7 бесплатных текстовых квестов для смартфонов https://lifehacker.ru/8-interactive-fiction-games/
10) Outcast's Journey - текстовый квест https://4pda.to/forum/index.php?showtopic=829719
12) В Steam вышел AI Dungeon – текстовый квест, где ИИ придумывает сюжет на ходу https://hi-tech.ua/v-steam-vyshel-ai-dungeon-tekstovyj-kvest-gde-ii-pridumyvaet-syuzhet-na-hodu/

понедельник, 27 февраля 2023 г.

Алгоритмы цифровой обработки изображения

Вики:

Книги:
1) Юкио Сато - Обработка сигналов, первое знакомство https://disk.yandex.ru/i/4WTkt3ihZ4cvlA
2) Гонсалес, Вудс - Цифровая обработка изображений https://disk.yandex.ru/i/bPLwxdpmwTaqgA
3) Гонсалес, Вудс - Цифровая обработка изображений с использованием MatLab https://disk.yandex.ru/i/7UalnFn4p6qj4g

Histogram in GNU Octave:

DSP:
1) Курс лекций «Основы цифровой обработки сигналов» https://habr.com/ru/post/460445/


YCbCr, YUV:
Обработка сигналов, цифровая обработка изображений (дальнейший серфинг):

Обработка статического изображения, видео; DPCM:
14) ФНЧ
17) АЦП
18) ЦАП
22) АЧХ
25) sinc
32) (прочитать) обработка сигналов
33) (прочитать, запрограммить) преобразование Фурье
38) КСВ
42) (прочитать, запрограммить) ряд тейлора

Music and DSP:
3) Немного сложнее чем мигание светодиодом или усилитель с DSP обработкой сигнала и веб интерфейсом https://habr.com/ru/articles/583992/

DSP youtube series:

Не идет зарядка DEXP URSUS S670

Ссылка:

вторник, 31 января 2023 г.

ChatGPT, Midjourney

Статьи:
1) Восстание пишущих машин. Как именно нейросети захватят игры (и мир) https://daily.afisha.ru/games/24854-vosstanie-pishuschih-mashin-kak-imenno-neyroseti-zahvatyat-igry-i-mir/
2) Как выглядел бы Гарри Поттер, если бы его придумал Достоевский? Показывает нейросеть https://daily.afisha.ru/infoporn/24893-kak-vyglyadel-by-garri-potter-esli-by-ego-pridumal-dostoevskiy-pokazyvaet-neyroset/
3) Как выглядели бы «Звездные войны», если бы их снимал Тарковский? Показывает нейросеть https://daily.afisha.ru/infoporn/24848-kak-vyglyadeli-by-zvezdnye-voyny-esli-by-ih-snimal-tarkovskiy-pokazyvaet-neyroset/
4) Нейросеть изобразила героев «Властелина Колец» и «Голодных игр» в стиле студии Ghibli https://daily.afisha.ru/infoporn/24801-neyroset-izobrazila-geroev-vlastelina-kolec-i-golodnyh-igr-v-stile-studii-ghibli/