neoquest: небесполезный pc speaker

20
НЕБЕСПОЛЕЗНЫЙ PC SPEAKER Павленко Евгений Левин Дмитрий

Upload: neoquest

Post on 04-Jul-2015

278 views

Category:

Technology


2 download

DESCRIPTION

Presentation from NeoQUEST Conference about PC Speaker.

TRANSCRIPT

Page 1: NeoQUEST: небесполезный Pc speaker

НЕБЕСПОЛЕЗНЫЙ PC SPEAKER

Павленко Евгений Левин Дмитрий

Page 2: NeoQUEST: небесполезный Pc speaker

МЕТОДЫ ОТЛАДКИОрганизационные меры

Интерактивные отладчики

Эмуляторы

Диагностические сообщения

Средства самодиагностики и самопроверки

Средства трассировки

Средства профилирования

Page 3: NeoQUEST: небесполезный Pc speaker

НИЗКОУРОВНЕВАЯ ОТЛАДКАОтладка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки.

Использование отладчиков — инструментов, которые включают в себя интерфейс для

пошагового выполнения программы: оператор за оператором, функция

за функцией, с остановками на некоторых строках исходного кода или при достижении

определённого условия.

Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода —

на экран, принтер, громкоговоритель или в файл.

Page 4: NeoQUEST: небесполезный Pc speaker

СЛОЖНЫЕ УСЛОВИЯ ОТЛАДКИ

PC SPEAKER РАБОТАЕТ ВСЕГДА

Page 5: NeoQUEST: небесполезный Pc speaker

АППАРАТНЫЕ ОТЛАДЧИКИ

Page 6: NeoQUEST: небесполезный Pc speaker

ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ

ПОМОГАЮТ ПОНЯТЬ КАК ВЕДЕТ СЕБЯ СИСТЕМА НА САМОМ ДЕЛЕ

Диагностические сообщения через COM-порт

Диагностические сообщения в памяти

Диагностические сообщения через PC SPEAKER

Page 7: NeoQUEST: небесполезный Pc speaker

ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ — COM

ПОМОГАЮТ ПОНЯТЬ КАК ВЕДЕТ СЕБЯ СИСТЕМА НА САМОМ ДЕЛЕ

bool gdb_serial_setup( int port, int baud ){

unsigned cval;int cflag = CREAD | HUPCL | CLOCAL;int quot = 0;

switch (baud){case 115200: cflag |= B115200; break;case 9600: cflag |= B9600; break;}cflag |= CS8;quot = 115200 / gdb_baud;cval = cflag & (CSIZE | CSTOPB);cval >>= 4;if (cflag & PARENB)

cval |= UART_LCR_PARITY;if (!(cflag & PARODD))

cval |= UART_LCR_EPAR;

cval = 0x3;outportb(gdb_port + UART_LCR, cval | UART_LCR_DLAB); // set DLAB outportb(gdb_port + UART_DLL, quot & 0xff); // LS of divisor outportb(gdb_port + UART_DLM, quot >> 8); // MS of divisor outportb(gdb_port + UART_LCR, cval); // reset DLAB outportb(gdb_port + UART_IER, UART_IER_RDI); // turn on interruptsoutportb(gdb_port + UART_MCR, UART_MCR_OUT2 | UART_MCR_DTR | UART_MCR_RTS);

if (0xff == inportb(gdb_port + UART_LSR))return false;

gdb_serial_initialized = true;return true;

}

static void write_char( int chr ){

while (0 == (inportb(gdb_port + UART_LSR) & UART_LSR_THRE));

outportb(gdb_port + UART_TX, chr);}

Page 8: NeoQUEST: небесполезный Pc speaker

ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ —PC SPEAKER

ПОМОГАЮТ ПОНЯТЬ КАК ВЕДЕТ СЕБЯ СИСТЕМА НА САМОМ ДЕЛЕ, РАБОТАЮТ В ЛЮБЫХ

УСЛОВИЯХ

Программируемый таймер, генерирующий прямоугольную звуковую волну частоты, дольной 1,193 МГц, без участия центрального процессора. Это позволяет проигрывать простые одноголосые звуковые сигналы. К 1990-м годам программисты, запуская быстрые арпеджио, научились исполнять на динамике музыку, которая не вызывает отвращение.

Прямое управление мембраной через порт 61h с дискретностью в 1 бит. Подавая с большой частотой то 0, то 1, с помощью широтно-импульсной модуляции можно синтезировать низкокачественный оцифрованный звук —правда, за счёт существенного использования ресурсов процессора. Этим в своё время широко пользовались трекеры и некоторые игры (AnotherWorld, Metal Mutant).

Page 9: NeoQUEST: небесполезный Pc speaker

PC SPEAKER → ARDUINO

PC SPEAKER

Page 10: NeoQUEST: небесполезный Pc speaker

ОТЛАДКА С ПОМОЩЬЮ ADRUINO

СИМВОЛЫ КОДИРУЮТСЯ НАПРЯЖЕНИЕМ, ОЧЕНЬ ПРОСТАЯ РЕАЛИЗАЦИЯ, 1 СИМВОЛ В СЕКУНДУ

Page 11: NeoQUEST: небесполезный Pc speaker

ИСХОДНЫЙ КОД#define TR_ARDUINO_PCSPK_0 50

#define TR_ARDUINO_PCSPK_1 100

#define TR_ARDUINO_PCSPK_AFTER_BIT 50

#define TR_ARDUINO_PCSPK_AFTER_BYTE 100

void dbg_pcspk_send_byte( char a, int(*dbg_ard_send_bit)(int), int delay )

{

unsigned char buf[8] =

{!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20), !!(a & 0x40), !!(a & 0x80)};

for (int i = 0; i < sizeof(buf); i++)

{

dbg_ard_send_bit(buf[i]);

}

dbg_delay(delay);

}

extern "C" void dbg_pcspk_disable() {

unsigned char tmp = inportb(0x61);tmp &= 0xFC;outportb(0x61, tmp);

}

extern "C" void dbg_pcspk_enable() {

unsigned char tmp = inportb(0x61);tmp |= 2;outportb(0x61, tmp);

}

int dbg_ard_send_bit(int b){

dbg_pcspk_enable();dbg_delay(b ? TR_ARDUINO_PCSPK_1 :

TR_ARDUINO_PCSPK_0);dbg_pcspk_disable();dbg_delay(TR_ARDUINO_PCSPK_AFTER_BIT);

}

void trDbgPrintBuf_ard( const char *p_str){

char c = *p_str;

while(c){

dbg_pcspk_send_byte(c, dbg_ard_send_bit, TR_ARDUINO_PCSPK_AFTER_BYTE);

p_str++;c = *p_str;

}}

Page 12: NeoQUEST: небесполезный Pc speaker

PC SPEAKER → СИНТЕЗ РЕЧИ

PC SPEAKER

Page 13: NeoQUEST: небесполезный Pc speaker

СИНТЕЗ РЕЧИПример преобразования фразы:1) Исходная фраза – «James Bond 007.»2) Замена цифр и знаков препинания – «James Bond zero

zero seven dot»3) Разбиение на фонемы – «J-A-M-EZ B-UH-N-D Z-EH-R-

AH Z-EH-R-AH S-EE-V-EH-N D-OH-T»

ТРУДНАЯ РЕАЛИЗАЦИЯ, НЕ ОЧЕНЬ ПОНЯТНО ГОВОРИТ,

ИНТЕРЕСНО И ОЧЕНЬ СМЕШНО

Page 14: NeoQUEST: небесполезный Pc speaker

ВНИМАНИЕ! КОНКУРС!

Page 15: NeoQUEST: небесполезный Pc speaker

PC SPEAKER → MIC

PC SPEAKER

Page 16: NeoQUEST: небесполезный Pc speaker

ОТЛАДКА ЧЕРЕЗ МИКРОФОН

БЫСТРЕЕ, ЧЕМ ARDUINO; СЛОЖНЕЕ, ЧЕМ ARDUINO; НЕОБХОДИМА СИНХРТОНИЗАЦИЯ; НЕ ТРЕБУЕТСЯ ARDUINO

РАЗБИЕНИЕ ПОТОКА НА БЛОКИ

ВЫДЕЛЕНИЕ СИНХРОПОСЫЛКИ И ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ

ДЕКОДИРОВАНИЕ ИНФОРМАЦИИ

Page 17: NeoQUEST: небесполезный Pc speaker

ИСХОДНЫЙ КОД#define TR_MIC_PCSPK_0 1

#define TR_MIC_PCSPK_1 3

#define TR_MIC_PCSPK_AFTER_BIT 4

#define TR_MIC_PCSPK_AFTER_BYTE 8

#define TR_MIC_PCSPK_FREQ_0 1000

#define TR_MIC_PCSPK_FREQ_1 333

void trDbgMicSendSync()

{

for (int I = 0; I < 16; I++)

{

dbg_pcspk_send_byte('-', dbg_mic_send_bit, TR_MIC_PCSPK_AFTER_BYTE);

}

}

int dbg_mic_send_bit(int b){

if (b){

dbg_sound_play(TR_MIC_PCSPK_FREQ_1);

dbg_delay(TR_MIC_PCSPK_1);}else{

dbg_sound_play(TR_MIC_PCSPK_FREQ_0);

dbg_delay(TR_MIC_PCSPK_0);}dbg_sound_stop();

dbg_delay(TR_MIC_PCSPK_AFTER_BIT);}

void dbg_pcspk_send_byte( char a, int (*send_bit)(int), int delay ){

unsigned char buf[8] = {!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20),

!!(a & 0x40), !!(a & 0x80)};for (int i = 0; i < sizeof(buf); i++){

send_bit(buf[i]);}dbg_delay(delay);

}

void trDbgPrintBuf_mic(const char *p_str){

char c = *p_str;while (c){

dbg_pcspk_send_byte(c, dbg_mic_send_bit,TR_MIC_PCSPK_AFTER_BYTE);

p_str++;c = *p_str;

}}

Page 18: NeoQUEST: небесполезный Pc speaker

PC SPEAKER → ВОЗДУХ → MIC

PC SPEAKER

Page 19: NeoQUEST: небесполезный Pc speaker

ВЗГЛЯД С ДРУГОЙ СТОРОНЫЗащищенный ПК на

котором выключен USB, WiFi, LAN и т.д.

Page 20: NeoQUEST: небесполезный Pc speaker

ВЫВОДЫ PC SPEAKER — незаменимая вещь для отладки в экстремальных

условиях.

Четыре варианта отладки через PC SPEAKER:

С использованием Arduino;

Синтез речи;

По проводу с использованием микрофона;

По воздуху с использованием микрофона.

Через PC SPEAKER можно скрытно передавать информацию по воздуху.