Как получить случайное число на 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.