Как получить случайное число на GBDK?

Я новичок в C и GBDK, и я хочу создать генератор случайных чисел, который выбирает от 0 до 1. Как симулятор «хакера».

Я перепробовал много примеров из Интернета. Но ничего не получилось.

Скриншот с вывода последней попытки, которую я сделал: https://i.ibb.co/f8G39vX/bgberrors.png

Код последней попытки:

      #include <gb/gb.h>
#include <stdio.h>
#include <rand.h>

void init();

void main() 
{
        init();
        while(1)
        {
            UINT8 r = ((UINT8)rand()) % (UINT8)4;
            printf(r);
        }
}

void init()
{
    DISPLAY_ON;
}

Как я могу этого добиться?

1 ответ

      #include <gb/gb.h>
#include <stdint.h>
#include <stdio.h>
#include <rand.h>

void init();

void main()
{
        init();
        printf(" \n\n\n\n\n\n\n\n    PRESS START!\n");
        // abuse user input for seed generation
        waitpad(J_START);
        uint16_t seed = LY_REG;
        seed |= (uint16_t)DIV_REG << 8;
        initrand(DIV_REG);
        while(1)
        {
            UINT8 r = ((UINT8)rand()) % (UINT8)2;
            printf("%d", r);
        }
}

void init()
{
        DISPLAY_ON;
}

Протестировано с GBDK-2020 4.0.3

Также проверьте пример "rand" в GBDK-2020.

По поводу комментариев:

Да, у GBDK есть собственная библиотека (включая stdlib). Вероятно, это форк библиотеки SDCC 20 лет назад. Текущий SDCC имеет rand() в stdlib.h, а GBDK-2020 - нет. Макс - 0xFF, я не знаю, как это определить.

Следует максимально избегать поплавков, это полностью программно, аппаратной поддержки для этого нет. Double на самом деле не поддерживается компилятором и возвращается к float.

Страниц руководства нет, документация доступна здесь: https://gbdk-2020.github.io/gbdk-2020/docs/api/rand_8h.html или прочтите файл gbdk_manual.pdf, связанный с gbdk-2020.

Другие вопросы по тегам