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