Christian Kroll
13 years ago
5 changed files with 259 additions and 17 deletions
@ -0,0 +1,119 @@ |
|||||
|
#include <avr/interrupt.h> |
||||
|
#include <avr/io.h> |
||||
|
|
||||
|
#undef WATCHDOG_ENABLED |
||||
|
#ifdef WATCHDOG_ENABLED |
||||
|
# include <avr/wdt.h> |
||||
|
#endif |
||||
|
|
||||
|
#include "../config.h" |
||||
|
#include "../makros.h" |
||||
|
#include "borg_hw.h" |
||||
|
|
||||
|
// define row port
|
||||
|
#ifndef ROWPORT |
||||
|
# define ROWPORT PORTA |
||||
|
#endif |
||||
|
#define ROWDDR DDR(ROWPORT) |
||||
|
|
||||
|
// define column port
|
||||
|
#ifndef COLPORT |
||||
|
# define COLPORT PORTC |
||||
|
#endif |
||||
|
#define COLDDR DDR(COLPORT) |
||||
|
|
||||
|
|
||||
|
// buffer which holds the currently shown frame
|
||||
|
unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES]; |
||||
|
|
||||
|
|
||||
|
SIGNAL(SIG_OUTPUT_COMPARE0) |
||||
|
{ |
||||
|
static unsigned char plane = 0; |
||||
|
static unsigned char row = 0; |
||||
|
|
||||
|
#ifdef WATCHDOG_ENABLED |
||||
|
// reset watchdog
|
||||
|
wdt_reset(); |
||||
|
#endif |
||||
|
|
||||
|
ROWPORT = 0; |
||||
|
row++; |
||||
|
if ((COLPORT <<= 1) == 0) { |
||||
|
row = 0; |
||||
|
COLPORT = 1; |
||||
|
|
||||
|
if (++plane == NUMPLANE) |
||||
|
{ |
||||
|
plane = 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
for (unsigned char x = 0; x < 10; x++) { |
||||
|
asm volatile ("nop"); |
||||
|
} |
||||
|
|
||||
|
ROWPORT = pixmap[plane][row][0]; |
||||
|
} |
||||
|
|
||||
|
void timer0_off(){ |
||||
|
cli(); |
||||
|
|
||||
|
COLPORT = 0; |
||||
|
ROWPORT = 0; |
||||
|
|
||||
|
#ifdef __AVR_ATmega644P__ |
||||
|
TCCR0A = 0x00; |
||||
|
TCCR0B = 0x00; |
||||
|
TIMSK0 = 0; |
||||
|
#else |
||||
|
TCCR0 = 0x00; |
||||
|
TIMSK = 0; |
||||
|
#endif |
||||
|
|
||||
|
sei(); |
||||
|
} |
||||
|
|
||||
|
static void timer0_on(){ |
||||
|
/* TCCR0: FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
|
||||
|
CS02 CS01 CS00 |
||||
|
0 0 0 stop |
||||
|
0 0 1 clk |
||||
|
0 1 0 clk/8 |
||||
|
0 1 1 clk/64 |
||||
|
1 0 0 clk/256 |
||||
|
1 0 1 clk/1024 |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
#ifdef __AVR_ATmega644P__ |
||||
|
TCCR0A = 0x02; // CTC Mode
|
||||
|
TCCR0B = 0x03; // clk/64
|
||||
|
TCNT0 = 0x00; // reset timer
|
||||
|
OCR0 = 0x0A; // compare with this value
|
||||
|
TIMSK0 = 0x02; // compare match Interrupt on
|
||||
|
#else |
||||
|
TCCR0 = 0x0B; // CTC Mode, clk/64
|
||||
|
TCNT0 = 0x00; // reset timer
|
||||
|
OCR0 = 0x0A; // compare with this value
|
||||
|
TIMSK = 0x02; // compare match Interrupt on
|
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void borg_hw_init(){ |
||||
|
// switch all pins of both the row and the column port to output mode
|
||||
|
ROWDDR = 0xFF; |
||||
|
COLDDR = 0xFF; |
||||
|
|
||||
|
// switch off all rows and columns for now
|
||||
|
COLPORT = 0; |
||||
|
ROWPORT = 0; |
||||
|
|
||||
|
timer0_on(); |
||||
|
|
||||
|
#ifdef WATCHDOG_ENABLED |
||||
|
// activate watchdog timer
|
||||
|
wdt_reset(); |
||||
|
wdt_enable(0x00); // 17ms watchdog
|
||||
|
#endif |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
mainmenu_option next_comment |
||||
|
comment "Ancient Borg Port Setup" |
||||
|
|
||||
|
choice 'Column Port' \ |
||||
|
"PORTA PORTA \ |
||||
|
PORTB PORTB \ |
||||
|
PORTC PORTC \ |
||||
|
PORTD PORTD" \ |
||||
|
'PORTC' COLPORT |
||||
|
|
||||
|
choice 'Row Port' \ |
||||
|
"PORTA PORTA \ |
||||
|
PORTB PORTB \ |
||||
|
PORTC PORTC \ |
||||
|
PORTD PORTD" \ |
||||
|
'PORTA' ROWPORT |
||||
|
|
||||
|
endmenu |
@ -0,0 +1,108 @@ |
|||||
|
# |
||||
|
# Automatically generated by make menuconfig: don't edit |
||||
|
# |
||||
|
|
||||
|
# |
||||
|
# General Setup |
||||
|
# |
||||
|
MCU=atmega32 |
||||
|
FREQ=16000000 |
||||
|
|
||||
|
# |
||||
|
# Borg Hardware |
||||
|
# |
||||
|
NUM_ROWS=8 |
||||
|
NUM_COLS=8 |
||||
|
NUMPLANE=3 |
||||
|
BORG_HW=HW_ANCIENTBORG |
||||
|
|
||||
|
# |
||||
|
# Ancient Borg Port Setup |
||||
|
# |
||||
|
COLPORT=PORTC |
||||
|
ROWPORT=PORTA |
||||
|
|
||||
|
# |
||||
|
# Features |
||||
|
# |
||||
|
RANDOM_SUPPORT=y |
||||
|
# LAP_TIME_EXTENSION is not set |
||||
|
SCROLLTEXT_SUPPORT=y |
||||
|
SCROLLTEXT_FONT=FONT_ARIAL8 |
||||
|
SCROLLTEXT_BUFFER_SIZE=128 |
||||
|
SCROLL_X_SPEED=20 |
||||
|
SCROLL_Y_SPEED=20 |
||||
|
SCROLLTEXT_TEXT="</#www.das-labor.org" |
||||
|
# JOYSTICK_SUPPORT is not set |
||||
|
# CAN_SUPPORT is not set |
||||
|
# MENU_SUPPORT is not set |
||||
|
|
||||
|
# |
||||
|
# Games |
||||
|
# |
||||
|
# GAME_TETRIS_CORE is not set |
||||
|
# GAME_TETRIS is not set |
||||
|
# GAME_BASTET is not set |
||||
|
# GAME_TETRIS_FP is not set |
||||
|
# GAME_SPACE_INVADERS is not set |
||||
|
# GAME_SNAKE is not set |
||||
|
# GAME_BREAKOUT is not set |
||||
|
|
||||
|
# |
||||
|
# Animations |
||||
|
# |
||||
|
ANIMATION_SCROLLTEXT=y |
||||
|
ANIMATION_SPIRAL=y |
||||
|
ANIMATION_JOERN1=y |
||||
|
ANIMATION_SNAKE=y |
||||
|
SNAKE_CYCLE_DELAY=100 |
||||
|
SNAKE_TERMINATION_DELAY=60 |
||||
|
SNAKE_MAX_LENGTH=64 |
||||
|
SNAKE_MAX_APPLES=10 |
||||
|
ANIMATION_CHECKERBOARD=y |
||||
|
ANIMATION_FIRE=y |
||||
|
FIRE_S=30 |
||||
|
FIRE_N=5 |
||||
|
FIRE_DIV=44 |
||||
|
FIRE_DELAY=50 |
||||
|
FIRE_CYCLES=800 |
||||
|
ANIMATION_MATRIX=y |
||||
|
MATRIX_STREAMER_NUM=30 |
||||
|
MATRIX_CYCLES=500 |
||||
|
ANIMATION_RANDOM_BRIGHT=y |
||||
|
# ANIMATION_STONEFLY is not set |
||||
|
ANIMATION_FLYINGDOTS=y |
||||
|
ANIMATION_GAMEOFLIFE=y |
||||
|
GOL_DELAY=100 |
||||
|
GOL_CYCLES=360 |
||||
|
# ANIMATION_BREAKOUT is not set |
||||
|
# ANIMATION_MHERWEG is not set |
||||
|
# ANIMATION_LTN_ANT is not set |
||||
|
# ANIMATION_TIME is not set |
||||
|
TIME_MASTER_ADDR=00 |
||||
|
TIME_UPDATE_TIMEOUT=50 |
||||
|
# ANIMATION_BMSCROLLER is not set |
||||
|
# ANIMATION_LABORLOGO is not set |
||||
|
# ANIMATION_AMPHIBIAN is not set |
||||
|
# ANIMATION_LOGO_OOS is not set |
||||
|
# ANIMATION_LOGO_28C3 is not set |
||||
|
ANIMATION_PLASMA=y |
||||
|
ANIMATION_PSYCHEDELIC=y |
||||
|
# ANIMATION_TESTS is not set |
||||
|
# ANIMATION_OFF is not set |
||||
|
|
||||
|
# |
||||
|
# small Animations |
||||
|
# |
||||
|
# SMALLANIMATION_ROWWALK is not set |
||||
|
SMALLANIMATION_ROWWALK_SPEED=50 |
||||
|
SMALLANIMATION_ROWWALK_COUNT=10 |
||||
|
# SMALLANIMATION_COLWALK is not set |
||||
|
SMALLANIMATION_COLWALK_SPEED=50 |
||||
|
SMALLANIMATION_COLWALK_COUNT=10 |
||||
|
# SMALLANIMATION_ROWBOUNCE is not set |
||||
|
SMALLANIMATION_ROWBOUNCE_SPEED=50 |
||||
|
SMALLANIMATION_ROWBOUNCE_COUNT=10 |
||||
|
# SMALLANIMATION_COLBOUNCE is not set |
||||
|
SMALLANIMATION_COLBOUNCE_SPEED=50 |
||||
|
SMALLANIMATION_COLBOUNCE_COUNT=10 |
Loading…
Reference in new issue