This page is at least 14 years old !
|
La bombe F est un petit montage électronique destiné à
foutre la merde dans les magasins d'électroménager. Contrairement à sa grande soeur, la bombe H, la bombe F ne produit
aucun dégat. Elle fait juste... chier.
Code C pour AVRStudio 4, les valeurs à modifier sont précisées en commentaires.
#include "avr/io.h"
#include "util/delay.h"
static unsigned char shft8bit(unsigned char val) {
USIDR = val;
USISR = (1<<USIOIF);
do {
USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC);
_delay_us(1);
} while ((USISR & (1<<USIOIF)) == 0);
return USIDR;
}
int main(void) {
uint8_t spiread;
uint16_t rand=0x4E71,b;
MCUSR = 0x00; // Pas de watchdog, merci
WDTCR = (1<<WDCE) | (1<<WDE);
WDTCR = 0x00;
DDRB = 0b11111110; // Tout en outputs sauf DI
TCCR1 = 0b11000001; // Utiliser timer1 en PWM
GTCCR = 0b01100000; // Utiliser la sortie OCR1
OCR1C = 0xFF; // Max
OCR1B = 0x00; // Initialiser la sortie son à 0
_delay_ms(30000); // Le temps de partir...
for (;;) {
PORTB &= ~_BV(PB3); // Chip select bas
_delay_ms(10);
if (rand & 0x400) {
spiread=shft8bit(0x03); // "READ" pour les 25128
spiread=shft8bit(0x00); // Commencer à lire à 0x0000
spiread=shft8bit(0x00);
for (b=0;b<0xFB9;b++) { // Taille du sample 1
spiread=shft8bit(0x00);
OCR1B = spiread;
_delay_us(110);
rand += spiread;
}
} else {
spiread=shft8bit(0x03); // "READ" pour les 25128
spiread=shft8bit(0x0F); // Commencer à lire à 0x0FBA
spiread=shft8bit(0xBA);
for (b=0;b<0x2EA7;b++) { // Taille du sample 2
spiread=shft8bit(0x00);
OCR1B = spiread;
_delay_us(110);
rand += spiread;
}
}
rand<<=1;
if (rand & 0x80) rand |= 1; // LFSR pourri (mais suffisant)
PORTB |= _BV(PB3); // Chip select haut
_delay_ms(1000);
}
}
|



