Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - SEGA-man

Страницы: [1] 2 3 Далее
1
Прочитав статьи по данной тематике, как например здесь и при помощи ИИ, мне удалось написать код на С который легко можно залить через Arduino Nano по SPI.
Для разработки и заливки решил использовать Platformio. Теперь хочется ревью от более опытного программиста, кто мог бы указать на баги.
/*
 * Sega Mega Drive / Genesis controller
 * 3-button + proper 6-button extension
 *
 * MCU: ATmega8 / ATmega88
 * Clock: 8 MHz (internal)
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include <stdint.h>

/* ================= Sega DB9 mapping =================
 *
 * PD2  UP / X
 * PD3  DOWN / Y
 * PD4  LEFT / Z
 * PD5  RIGHT / MODE
 * PD6  A / B
 * PD7  START / C
 *
 * PB7  TH / SELECT (input from console)
 *
 * All outputs are ACTIVE LOW
 */

/* ================= Button source =================
 * Replace these macros with your real button inputs
 * Note: Buttons are assumed to be active-low (pressed = LOW)
 */
#define BTN_UP()     ((PINB & (1 << PB0)) == 0)
#define BTN_RIGHT()  ((PINB & (1 << PB1)) == 0)
#define BTN_DOWN()   ((PINB & (1 << PB2)) == 0)
#define BTN_LEFT()   ((PINB & (1 << PB3)) == 0)
#define BTN_START()  ((PINB & (1 << PB4)) == 0)
#define BTN_A()      ((PINB & (1 << PB5)) == 0)
#define BTN_B()      ((PINC & (1 << PC0)) == 0)
#define BTN_C()      ((PINC & (1 << PC4)) == 0)
#define BTN_MODE()   ((PINC & (1 << PC5)) == 0)
#define BTN_X()      ((PINC & (1 << PC3)) == 0)
#define BTN_Y()      ((PINC & (1 << PC2)) == 0)
#define BTN_Z()      ((PINC & (1 << PC1)) == 0)


/* ================= Internal state ================= */

static volatile uint8_t phase = 0;
static volatile uint8_t isSix = 0;
static volatile uint8_t prevTH = 1;
static volatile uint8_t idleTicks = 0;

/* ================= Helpers ================= */

static inline void writeLo(uint8_t pin)
{
    PORTD &= ~(1 << pin);
}

static inline void writeHi(uint8_t pin)
{
    PORTD |= (1 << pin);
}

static inline uint8_t th_level(void)
{
    return (PINB & (1 << PB7)) ? 1 : 0;
}

/* ================= Timer0 overflow (~1 ms) ================= */

#if defined(__AVR_ATmega8__)
ISR(TIMER0_OVF_vect)
#else
ISR(TIMER0_COMPA_vect)
#endif
{
    /* Increment idleTicks atomically */
    uint8_t ticks = idleTicks;
    ticks++;
    idleTicks = ticks;

    if (ticks > 12) {
        /* Disable interrupts to prevent race condition with main loop */
        cli();
        phase = 0;
        isSix = 0;     /* fallback to 3-button */
        sei();
    }
}

/* ================= TH polling ================= */

static inline void sega_poll_th(void)
{
    uint8_t th = th_level();

    if (th != prevTH) {
        prevTH = th;
        idleTicks = 0;

        /* Disable interrupts to prevent race condition with ISR */
        cli();
        uint8_t p = phase;
        if (++p >= 8) {
            p = 0;
            isSix = 1;   /* successful 6-button detect */
        }
        phase = p;
        sei();
    }
}

/* ================= Sega output ================= */

static inline void sega_output(void)
{
    uint8_t th = th_level();

    /* release all lines */
    writeHi(PD2); writeHi(PD3); writeHi(PD4);
    writeHi(PD5); writeHi(PD6); writeHi(PD7);

    /* ---------- 3 BUTTON MODE ---------- */
    if (!isSix) {
        if (th) {
            BTN_B() ? writeLo(PD6) : writeHi(PD6);
            BTN_C() ? writeLo(PD7) : writeHi(PD7);
        } else {
            BTN_UP()    ? writeLo(PD2) : writeHi(PD2);
            BTN_DOWN()  ? writeLo(PD3) : writeHi(PD3);
            BTN_LEFT()  ? writeLo(PD4) : writeHi(PD4);
            BTN_RIGHT() ? writeLo(PD5) : writeHi(PD5);
            BTN_A()     ? writeLo(PD6) : writeHi(PD6);
            BTN_START() ? writeLo(PD7) : writeHi(PD7);
        }
        return;
    }

    /* ---------- 6 BUTTON MODE ---------- */
    switch (phase) {

    case 0:
    case 1:
    case 2:
        if (!th) {
            BTN_UP()    ? writeLo(PD2) : writeHi(PD2);
            BTN_DOWN()  ? writeLo(PD3) : writeHi(PD3);
            BTN_LEFT()  ? writeLo(PD4) : writeHi(PD4);
            BTN_RIGHT() ? writeLo(PD5) : writeHi(PD5);
        }
        break;

    case 3:
        if (th) {
            BTN_B() ? writeLo(PD6) : writeHi(PD6);
            BTN_C() ? writeLo(PD7) : writeHi(PD7);
        } else {
            BTN_A()     ? writeLo(PD6) : writeHi(PD6);
            BTN_START() ? writeLo(PD7) : writeHi(PD7);
        }
        break;

    case 4:
        /* 6-button ID phase */
        writeLo(PD2); writeLo(PD3);
        writeLo(PD4); writeLo(PD5);
        break;

    case 5:
        if (!th) {
            BTN_X()    ? writeLo(PD2) : writeHi(PD2);
            BTN_Y()    ? writeLo(PD3) : writeHi(PD3);
            BTN_Z()    ? writeLo(PD4) : writeHi(PD4);
            BTN_MODE() ? writeLo(PD5) : writeHi(PD5);
        }
        break;

    case 6:
    case 7:
        /* These phases are not used in 6-button mode output */
        /* Controller should be idle during these phases */
        break;
    }
}

/* ================= Main ================= */

int main(void)
{
    /* Disable ADC (digital I/O only) */
    ADCSRA &= ~(1 << ADEN);

    /* PD2–PD7 outputs */
    DDRD |= (1 << PD2) | (1 << PD3) | (1 << PD4) |
            (1 << PD5) | (1 << PD6) | (1 << PD7);

    /* TH input (PB7) - no pull-up needed, console drives it */
    DDRB &= ~(1 << PB7);
   
    /* Button inputs: PB0-PB5 */
    DDRB &= ~((1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) | (1 << PB5));
    PORTB |= (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) | (1 << PB5);  /* Enable pull-ups */
   
    /* Button inputs: PC0-PC5 */
    DDRC &= ~((1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5));
    PORTC |= (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5);  /* Enable pull-ups */

#if defined(__AVR_ATmega8__)
    /* ---------- ATmega8 : Timer0 overflow ---------- */
    /* F_CPU = 8 MHz
     * Prescaler = 64
     * Overflow period ≈ 2.048 ms
     * idleTicks > 12 gives ~24.6 ms timeout
     */

    TCCR0 = (1 << CS01) | (1 << CS00);   /* clk/64 */
    TCNT0 = 0;                           /* initialize counter */
    TIMSK |= (1 << TOIE0);               /* enable overflow interrupt */
#elif defined(__AVR_ATmega88__) || defined(__AVR_ATmega88A__) || defined(__AVR_ATmega88PA__)
    /* ---------- ATmega88 / ATmega88A / ATmega88PA / ATmega88PB ---------- */
    /* F_CPU = 8 MHz
    * Prescaler = 64
    * OCR0A = 124 → 1 ms
    */

    TCCR0A = (1 << WGM01);               /* CTC */
    TCCR0B = (1 << CS01) | (1 << CS00);  /* clk/64 */
    TCNT0  = 0;                          /* initialize counter */
    OCR0A  = 124;
    TIMSK0 = (1 << OCIE0A);
#endif

    sei();

    while (1) {
        sega_poll_th();
        sega_output();
    }
}

2
Можно, только я отпустил до 8, и это в пределах допустимого. Учитывая что PS One работают от блоков питания для PS2 на которых 8.5В


Добавлено позже:

а 3 Ампера БП даст?

Добавлено позже:
Когда ты меняешь делитель, петля обратной связи пересчитывается под другое напряжение но компенсация (RC-цепи) остаётся рассчитанной на 12 V.

Ну и как следствие возможны осцилляции, пульсации на выходе, нестабильная работа под динамической нагрузкой (лазер + мотор). Лучше бы оригинальный БП восстановил.
Да, лучше бы. Я бы тоже так хотел. И там не 3А на оригинальном БП а 2А. 2А потребляются в пике, если прям все работает одновременно.
БП который я использовал был хороший и выдавал 12В 1.5А, так что он подошел нормально и даже не грелся сильно

Добавлено позже:
Eugeniy_59
Для эксперимента купил такой же нерабочий блок на барахолке. И по твоему совету начал искать отвалившуюся пайку. Таковая обнаружилась на высоковольтном кондере 22мкф. Пропаял его и все что выглядело подозрительно. Появилось напряжение на выходе. Но!
Напряжение проседало под нагрузкой. Это электролиты! Те что на выходе были в норме, а вот С3 показал высокий ESR, хотя емкость была норм.
В общем причины было две - пропайка и конденсатор С3. Это для тех кто столкнется с ремонтов такого БП  :cool:

Добавлено 9 января 2026 года:
В итоге я снова перепроверил тот оригинальный блок питания, обнаружил пробитые, после моих экспериментов стабилиитроны на 18В.
Заменил два стабилитрона и конденсатор С3 и все заработало.
Всего-то надо было проверить ESR :(

3
Да, обновил но я чет не разобрался со сборкой, поэтому через ИИ сделал кода на Си.
Прикрепил архив с файлом.

У меня пока нет возможности его затестить, но может кто попробует и отпишет?
Он совместим с atmega88

4
Картриджи / диски / Виснет картридж sega
« : 10 Декабрь 2025, 22:33:26 »
Подниму старый пост, так как попался картридж с фифа97.
Я сразу решил проверить чемпионат, и он сработал! То есть после матча игра не зависла как это было в детстве.
Я открыл коробку и там лежит плата на подобие той, что в первом посте. С разницей, что верхняя капля нанесена на саму плату а не отдельную платформу.
Этой проблемой страдали все игры серии фифа в детстве. Кстати, чемпионат можно было проходить если ставить крестик и давать возможность компьютеру самому решать какой счет будет.
Зачастую это был узкий набор комбинаций счетов, который случайным образом присваивался, ну или определенным алгоритмом)

Добавлено позже:
Вот такой картридж и вот такая приставка T2. логика 74HC00

5
4 поколение / Ремонт клона Sega Mega Drive 1
« : 05 Декабрь 2025, 21:12:22 »
в таком случае есть опасность что видеопамять будет битая. мне не хочется всякий хлам собирать)

6
О чем вообще разговор? Ну покупайте эти платы и пилите текстолит сами. Зачем тут это флуд?

7
4 поколение / Ремонт клона Sega Mega Drive 1
« : 01 Декабрь 2025, 20:46:44 »
глянул на алишке, да чет не хочется 10 штук покупать.
Может кто подскажет где купить штучно в москве?

8
Ввиду того, что я запорол одну планку видео памяти на консоли которой, хочу восстановить для себя, ищу MB81461-12.
Ну или аналогичную с таймингом 12. Может у кого есть бесхозная или с разбора  :)

9
4 поколение / Ремонт клона Sega Mega Drive 1
« : 29 Ноябрь 2025, 23:34:15 »
binturong_reiko, ты был прав: я внимательно посмотрел и увидел что у одной ножки повреждена контактная линия. Как только восстановил то все заработало. Фух! выдохнул.
Спасибо за наводку  :thumbup:

Добавлено позже:
Теперь мне нужна MB81461 ну или аналоги:
HM53461Z
HM53462Z
M5M4C264L
KM424C64Z
D41264V
D42264V

На водолее, к сожалению уже не купить

10
4 поколение / Ремонт клона Sega Mega Drive 1
« : 29 Ноябрь 2025, 20:35:15 »
Отпаивал оловоотсосом, вроде и прозвонил все.
Глянул видосы по ремонту и скорее всего так и есть: отсутствие контакта

11
4 поколение / Ремонт клона Sega Mega Drive 1
« : 29 Ноябрь 2025, 19:10:28 »
Итак, я решил провести эксперимент и проверить компоненты на своей нерабочей плате. Для этого приобрел идентичный клон.
Решил начать с видеопамяти, и запаивать по одной. Для этого выпаял с абочей платы одну планку и впаял со старой платы. Та показала аретфакты: ну окей, подумал я и выпаял планку.
Теперь в новую плату вернул свою родную планку, и меня ждал сюрприз - снова артефакты. Получается я запорол новую консоль впаяв видеопамять с нерабочей консоли? Что могло пойти не так?

12
4 поколение / Ремонт клона Sega Mega Drive 1
« : 25 Ноябрь 2025, 20:46:27 »
and1981
10 и 12. И не похоже что оно паялось. Оно могло так работать стабильно?

Я посмотрел по схеме для T2B и там должно быть 4.3В, хотел узнать критичны ли 0.1В

13
На Али примерно от 350 рубасов, мне кажется, не так уж велика цена.

Так я ж видел качество этих джойстиков и могу сравнить новодельный клон и стародельный. Стародельные клоны, как в моем случае, часто имели хорошие провода и крестовину.


Добавлено позже:
Так я ж видел качество этих джойстиков и могу сравнить новодельный клон и стародельный. Стародельные клоны, как в моем случае, часто имели хорошие провода и крестовину.
ну вот тебе и юзкейс, как говорится) Сможешь восстановить оригинальный джой. А я в данном случае хочу восстановить хороший клон

14
Думаю стоит, выпиливать каплю и резать текстолит зачем? Еще надо рабочую плату найти.
А так, купил на алишке разбери зеро за 150р, залил код и запаял вместо капли.
Тем более, что эта проблема, когда капля отмирает частая, и думаю многим пригодится решение на разбери зеро судя по посту в Дзене :)

15
Да, скорее всего внутри капли этот контакт просто высажен на землю.
Интересно как это так получается, неужели из-за дефоррмации платы? Я ее гнул и это ничего не меняло.

Чесслово, новые контроллеры это такой шлак, я думал что хуже старых нет. Дядюшка Ляо деградирует.

16
Итак, я решил данную проблему с помощью резистора 10Ком.
Для начала я пытался понять причну почему кнопка нажата. Начал замерять уровни на проводах. Все были высокие кроме кнопки вправо.
Далее я отрезал дорожку ведущую от провода к капле, и кнопка перестала быть нажатой. Теперь я понял что подтянув провод к земле кнопка становится нажатой.
В итоге взял подтянул через резистор 10Ком кнопку к проводу, в обход капли. Все работает. Но у меня остается вопрос: надолго ли? И вообще правильно ли я сделал?
Исходя из этой схемы, кнопки вверх и вниз работают в обход чипа


Фотки моей гениальной работы прикрепил  :cool:

17
Сорян, неправильно выразился.
Да, кнопка вправо зажата постоянно.
Я подкинул рабочий провод и картина все та же

Добавлено позже:
Я прочистил спиртом контактые площадки все тщательно, но снова без результата

18
Да, кстати я снова решил выпаять и прозвнить кабель и нашел место обрыва кнопки вправо.
Но теперь другая проблема - она отжата всегда.
Может есть какой-то вариант с подтянуть эту кнопку резистором к 5В ?

19
Достались мне два джоя вместе с нерабочей приставкой, о которой я писал
И проблема у одного: постоянно зажата кнопка вправо.
Провод прозвонил, был обрыв и я его починил.
Подкинул заведомо рабочий провод и проблема все та же - кнопка вправо зажата

20
6 поколение / PS2 50004 не читает диски
« : 30 Октябрь 2025, 20:28:59 »
Пробовал и CD и DVD и оригиналы PS1 и PS2 и аудио.
Это лазер я покупал не на али. И выглядел он довольно хорошо. Головку я проверил на другой приставке и она работает.
Но почему-то не хочет работать на этой конкретной консоли

21
6 поколение / PS2 50004 не читает диски
« : 28 Октябрь 2025, 22:12:09 »
Прикупил себе PS2 SCHP-50004 который не читал диски, ну и новый лазер к нему 400С. (Старый лазер такой же модели)
После замены симптомы следующие: диск раскручивается длительное время и после выдает ошибку DISC READ ERROR.
Я пробовал и через PMAP настроить по этому видео мануалу но все тщетно (да, и значения у меня высокие почему-то, как я не крутил шестерни F9xx)
Попробовал и lenschanger 1.2 но и тут без изменений.
Мне уже доводилось менять лазеры на фатках, и вроде бы как все работало сходу без проблем. Но тут случай уникальный судя по всему.

Хочу это экземпляр оставить себе, уж очень он в хорошем состоянии)

Добавлено позже:
Лазер светит, это видно.
У меня остается лишь предположение что это может быть шлейф

22
quq_CCCP
Благодарю. Но я пока в турции нахожусь)

23
Досталась консоль Micro Genius, которая один в один похожа на Dendy, с отсутствующей кнопкой сброса.
Хотелось бы узнать, может кто поделиться 3д моделью

24
Имею стародельный геймпад, то есть шестикнопочный клон для Sega MD2 и как часто бывает с этими клонами с каплей - он перестал работать.
Я проерил провод и он звонится нормально, то есть провода целые и на удивление качественные (как телефонные).
У Hotpixel на гитхабе заметил интересный проект где он сделал переходник для мыши, с использованием arduino nano.
Я понимаю что arduino nano не совсем будет подходить, а вот если RPi-Zero ??
Может кто имел дело с таким?

Добавлено позже:
Вот еще нашел интересную статью, где человек восстанавливает геймпад при помощи atmega8
https://dzen.ru/a/Y4HEsPHGXi7GqIZL

Добавлено 9 ноября 2025 года:
Может кому-то довелось скачать код для атмеги8 из этой статьи: https://dzen.ru/a/Y4HEsPHGXi7GqIZL

Очень хочется глянуть.
В итоге написал Алексею (кластеру), который порекомендовал писать на C для Raspberry Pi Zero.
Скорее всего плата разбери попадет мне в руки только в след году, поэтому хотелось попросить мож у кого есть свои наработки на этот счет.
Думаю много людей захотят таким образом воостановить свои старые джойстики)

25
4 поколение / Ремонт клона Sega Mega Drive 1
« : 18 Октябрь 2025, 22:29:12 »
Я хочу сделать заказ на водолее и купить мульт, но так же подстрахуюсь и куплю оперативу, теперь вопрос: у меня установлена HSRM20256LM12 и что подойдет как замена? Желательно из доступного на водолее


Добавлено 23 октября 2025 года:
заказал вот такие две на водолее
Надеюсь подойдет

Добавлено 24 ноября 2025 года:
У меня появилось пару вопросов по этой плате:
1. На мульт идет питаение 4.2В после диода, это норм?
2. На плате установлено две разные микрухи VRAM: MB81461B и D42264V-10. Это как вообще?

26
4 поколение / Ремонт клона Sega Mega Drive 1
« : 12 Октябрь 2025, 20:21:25 »
Благодарю за наводку. Плата после залития, поэтому буду прозванивать переходы и искать обрывы пожалуй

Добавлено позже:
В случае даже если отсутствует синхро сигнал это тоже может быть мульт?

27
4 поколение / Ремонт клона Sega Mega Drive 1
« : 11 Октябрь 2025, 15:37:23 »
А вот это уже интересно.
Кстати, на плате не обнаружил КЗ. Но ta-06s греется сильно. Можно сказать только она и греется.
Ну и стабилизатор 7805 греется

28
4 поколение / Ремонт клона Sega Mega Drive 1
« : 10 Октябрь 2025, 21:06:09 »
да есть такой риск, но хочется плату завести, попробовать

29
4 поколение / Ремонт клона Sega Mega Drive 1
« : 10 Октябрь 2025, 19:40:36 »
прикупил себе клон на барахолке. И когда открыл обнаружил что он после залития. Отмыл его от грязи стеклоочистителем, а затем прошелся спиротом.
После всех процедур проверил стабилизатор и он выдает 4.9В. Первый раз включал без кварца (он просто отгнил) и приставка ничего не выдала. Потом запаял новый кварц и результат такой же.
И еще там был этот белый резистор на 5 ватт я поначалу с ним включал, но потом подумал: а мог ли он что-то сжечь?
Плата выглядит как T2A для SMD2
Потрогав все схемы, обнаружил что греется ta-06s. На водолее лишь есть TA-06SD. Она подойдет для замены?

Добавлено позже:
хотелось бы еще попросить схемы для ta-06s и ta-06sd

30
4 поколение / Sega MD2 с кириллицей
« : 13 Август 2025, 23:38:50 »
На барахолке нашел вот такой девайс, хотелось бы узнать что там внутри. TCT6005?
Может кто встречал такой

Страницы: [1] 2 3 Далее