Compare commits

...

19 Commits

Author SHA1 Message Date
Hendrik Langer b5b02b439d update config 7 years ago
Hendrik Langer 79f9727399 copy old config 7 years ago
Hendrik Langer d44301b363 move custom animation after merged upstream animations 7 years ago
Hendrik Langer 7500a7b56d Merge remote-tracking branch 'upstream/master' into 2017 7 years ago
Christian Kroll a880b0246c renewed linker skripts for latest avr-binutils 8 years ago
Christian Kroll 986a86af13 took care of warnings from newer GCCs 8 years ago
Christian Kroll 7055d8ac78 added profile for the replacement borg in the lab; downgraded borg-andre profile to ATMega32 9 years ago
Christian Kroll dc97831e1b uart_commands.c: eeprom_update_block() also utilized in avr-libc > 1.8.1 9 years ago
Christian Kroll b3bd047235 user_loop.h: forgot include guards 9 years ago
Christian Kroll ef897bd4ef user_loop.c: corrected a misleading comment 9 years ago
Christian Kroll dda8f61363 fixed typo in sample file 9 years ago
Christian Kroll d41ada0c45 simplify inclusion of personal animations which not meant to be included in the official repo 9 years ago
Christian Kroll ddf2dff7bd backported "This is not Detroit" logo to master 11 years ago
Christian Kroll 122719d987 another variant of the fixed math animations 9 years ago
Christian Kroll 6356b9f770 acsess TIMSK instead of TIMSK0 on ATmega16/32 9 years ago
Christian Kroll 70c7c567a6 my personal ocd 9 years ago
Christian Kroll cbc716683f borg_hw_ancient.c: streamlined driver for Peter's Ur-Borg 9 years ago
Christian Kroll 21dd61011b Merge pull request #3 from stefanctdo/kart 9 years ago
Stefan Kinzel 3efdbbe28b Kart: Add blink effect on boost, switched boost-key to 'fire' 10 years ago
  1. 161
      .config
  2. 2
      .gitignore
  3. 1
      Makefile
  4. 7
      config.in
  5. 39
      ld_scripts/avr5.x
  6. 39
      ld_scripts/avr51.x
  7. 39
      ld_scripts/avr6.x
  8. 3
      profiles/borg-ancient
  9. 24
      profiles/borg-andre
  10. 162
      profiles/borg-labor-lounge
  11. 2
      scripts/lxdialog/Makefile
  12. 2
      scripts/lxdialog/lxdialog.c
  13. 2
      src/animations/Makefile
  14. 4
      src/animations/bitmapscroller/Makefile
  15. 1
      src/animations/bitmapscroller/config.in
  16. 141
      src/animations/bitmapscroller/thisisnotdetroit.c
  17. 6
      src/animations/bitmapscroller/thisisnotdetroit.h
  18. 3
      src/animations/config.in
  19. 77
      src/animations/fpmath_patterns.c
  20. 2
      src/animations/fpmath_patterns.h
  21. 93
      src/borg_hw/borg_hw_ancient.c
  22. 8
      src/borg_hw/borg_hw_andreborg.c
  23. 4
      src/borg_hw/borg_hw_borg16.c
  24. 2
      src/borg_hw/config_ancient.in
  25. 20
      src/display_loop.c
  26. 46
      src/games/kart/kart.c
  27. 1
      src/games/kart/kart.h
  28. 7
      src/scrolltext/scrolltext3.c
  29. 8
      src/uart/uart_commands.c
  30. 25
      src/user/Makefile
  31. 18
      src/user/config.in
  32. 22
      src/user/user_loop.c
  33. 16
      src/user/user_loop.h

161
.config

@ -0,0 +1,161 @@
#
# Automatically generated by make menuconfig: don't edit
#
#
# General Setup
#
MCU=atmega32
FREQ=16000000
#
# Borg Hardware
#
NUM_ROWS=10
NUM_COLS=11
NUMPLANE=3
BORG_HW=HW_BORG_16
#
# Borg16 port setup
#
# HIGH_CONTRAST is not set
# UART_SUPPORT is not set
UART_BAUDRATE_SETTING=19200
COLPORT1=PORTC
COLPORT2=PORTA
ROWPORT=PORTD
PIN_MCLR=4
PIN_CLK=6
PIN_DATA=7
# REVERSE_COLS is not set
# INVERT_ROWS is not set
SWAP_ROWS_COLS=y
# INTERLACED_ROWS is not set
# INTERLACED_COLS is not set
#
# Features
#
RANDOM_SUPPORT=y
# LAP_TIME_EXTENSION is not set
# SCROLLTEXT_SUPPORT is not set
# RFM12_SUPPORT is not set
DCF77_SUPPORT=y
DCF_INTERRUPT=0
#
# Joystick Support
#
JOYSTICK_SUPPORT=y
JOYSTICK_CHOICE=JOY_PARALLEL
#
# Joystick Settings
#
PARALLEL_JOYSTICK_SUPPORT=y
JOYSTICK_PIN_UP=PINB
JOYSTICK_BIT_UP=0
JOYSTICK_PIN_DOWN=PINB
JOYSTICK_BIT_DOWN=1
JOYSTICK_PIN_LEFT=PINB
JOYSTICK_BIT_LEFT=2
JOYSTICK_PIN_RIGHT=PINB
JOYSTICK_BIT_RIGHT=3
JOYSTICK_PIN_FIRE=PIND
JOYSTICK_BIT_FIRE=3
# CAN_SUPPORT is not set
# MENU_SUPPORT is not set
#
# Games
#
GAME_TETRIS_CORE=y
GAME_TETRIS=y
# GAME_BASTET is not set
# GAME_TETRIS_FP is not set
GAME_SPACE_INVADERS=y
GAME_SNAKE=y
# SNAKE_POV_CONTROL is not set
SNAKE_GAME_DELAY=200
GAME_BREAKOUT=y
# GAME_KART is not set
#
# Animations
#
# ANIMATION_SCROLLTEXT is not set
ANIMATION_SPIRAL=y
SPIRAL_DELAY=5
ANIMATION_JOERN1=y
# ANIMATION_SNAKE is not set
SNAKE_ANIM_DELAY=100
SNAKE_TERMINATION_DELAY=60
SNAKE_MAX_LENGTH=64
SNAKE_MAX_APPLES=10
# ANIMATION_CHECKERBOARD is not set
# ANIMATION_FIRE is not set
FIRE_S=30
FIRE_N=5
FIRE_DIV=44
FIRE_DELAY=50
FIRE_CYCLES=800
# ANIMATION_MATRIX is not set
MATRIX_STREAMER_NUM=30
MATRIX_CYCLES=500
MATRIX_DELAY=60
# ANIMATION_RANDOM_BRIGHT is not set
# ANIMATION_STONEFLY is not set
# ANIMATION_FLYINGDOTS is not set
# ANIMATION_GAMEOFLIFE is not set
GOL_DELAY=100
GOL_CYCLES=360
# ANIMATION_BREAKOUT is not set
# ANIMATION_MHERWEG is not set
# ANIMATION_MOIRE is not set
# ANIMATION_LTN_ANT is not set
# ANIMATION_TIME is not set
TIME_MASTER_ADDR=0x00
TIME_UPDATE_TIMEOUT=23
ANIMATION_CLOCK=y
# ANIMATION_BMSCROLLER is not set
# ANIMATION_LABORLOGO is not set
# ANIMATION_AMPHIBIAN is not set
# ANIMATION_LOGO_OOS is not set
# ANIMATION_FAIRYDUST is not set
# ANIMATION_THISISNOTDETROIT is not set
#
# Fixed-point math patterns
#
# ANIMATION_PLASMA is not set
FP_PLASMA_DELAY=1
# ANIMATION_PSYCHEDELIC is not set
FP_PSYCHO_DELAY=15
# ANIMATION_SURFACE_WAVE is not set
FP_SURFACE_DELAY=15
# ANIMATION_BLACKHOLE is not set
# ANIMATION_DNA is not set
# ANIMATION_SQUARES is not set
# 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
#
# User Animations
#

2
.gitignore

@ -1,5 +1,5 @@
.cdtproject .cdtproject
.config #.config
.config.old .config.old
.cproject .cproject
.menuconfig.log .menuconfig.log

1
Makefile

@ -43,6 +43,7 @@ include $(MAKETOPDIR)/defaults.mk
@ echo "SUBDIRS += $(TOPDIR)/animations" >> $@ @ echo "SUBDIRS += $(TOPDIR)/animations" >> $@
@ echo "SUBDIRS += $(TOPDIR)/animations/bitmapscroller" >> $@ @ echo "SUBDIRS += $(TOPDIR)/animations/bitmapscroller" >> $@
@ echo "SUBDIRS += $(TOPDIR)/smallani" >> $@ @ echo "SUBDIRS += $(TOPDIR)/smallani" >> $@
@ echo "SUBDIRS += $(TOPDIR)/user" >> $@
@ (for subdir in `grep -e "^#define .*_SUPPORT" $(TOPDIR)/autoconf.h \ @ (for subdir in `grep -e "^#define .*_SUPPORT" $(TOPDIR)/autoconf.h \
| sed -e "s/^#define /$(TOPDIR)\//" -e "s/_SUPPORT.*//" \ | sed -e "s/^#define /$(TOPDIR)\//" -e "s/_SUPPORT.*//" \
| tr "[A-Z]\\n" "[a-z] " `; do \ | tr "[A-Z]\\n" "[a-z] " `; do \

7
config.in

@ -95,6 +95,11 @@ source src/animations/config.in
############################################################################### ###############################################################################
### small Animations Menu ##################################################### ### Small Animations Menu #####################################################
source src/smallani/config.in source src/smallani/config.in
############################################################################### ###############################################################################
### User Menu #################################################################
source src/user/config.in
###############################################################################

39
ld_scripts/avr5.x

@ -1,4 +1,8 @@
/* Default linker script, for normal executables */ /* Default linker script, for normal executables */
/* Copyright (C) 2014-2016 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr") OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
OUTPUT_ARCH(avr:5) OUTPUT_ARCH(avr:5)
MEMORY MEMORY
@ -9,6 +13,7 @@ MEMORY
fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = 1K
} }
SECTIONS SECTIONS
{ {
@ -76,13 +81,19 @@ SECTIONS
KEEP(*(.vectors)) KEEP(*(.vectors))
/* For data that needs to reside in the lower 64k of progmem. */ /* For data that needs to reside in the lower 64k of progmem. */
*(.progmem.gcc*) *(.progmem.gcc*)
*(.progmem*) /* PR 13812: Placing the trampolines here gives a better chance
that they will be in range of the code that uses them. */
. = ALIGN(2); . = ALIGN(2);
__trampolines_start = . ; __trampolines_start = . ;
/* The jump trampolines for the 16-bit limited relocs will reside here. */ /* The jump trampolines for the 16-bit limited relocs will reside here. */
*(.trampolines) *(.trampolines)
*(.trampolines*) *(.trampolines*)
__trampolines_end = . ; __trampolines_end = . ;
/* avr-libc expects these data to reside in lower 64K. */
*libprintf_flt.a:*(.progmem.data)
*libc.a:*(.progmem.data)
*(.progmem*)
. = ALIGN(2);
/* For future tablejump instruction arrays for 3 byte pc devices. /* For future tablejump instruction arrays for 3 byte pc devices.
We don't relax jump/call instructions within these sections. */ We don't relax jump/call instructions within these sections. */
*(.jumptables) *(.jumptables)
@ -146,7 +157,7 @@ SECTIONS
KEEP (*(.fini0)) KEEP (*(.fini0))
_etext = . ; _etext = . ;
} > text } > text
.data : AT (ADDR (.text) + SIZEOF (.text)) .data :
{ {
PROVIDE (__data_start = .) ; PROVIDE (__data_start = .) ;
*(.data) *(.data)
@ -160,8 +171,8 @@ SECTIONS
. = ALIGN(2); . = ALIGN(2);
_edata = . ; _edata = . ;
PROVIDE (__data_end = .) ; PROVIDE (__data_end = .) ;
} > data } > data AT> text
.bss SIZEOF(.data) + ADDR(.data) : .bss ADDR(.data) + SIZEOF (.data) : AT (ADDR (.bss))
{ {
PROVIDE (__bss_start = .) ; PROVIDE (__bss_start = .) ;
*(.bss) *(.bss)
@ -172,7 +183,7 @@ SECTIONS
__data_load_start = LOADADDR(.data); __data_load_start = LOADADDR(.data);
__data_load_end = __data_load_start + SIZEOF(.data); __data_load_end = __data_load_start + SIZEOF(.data);
/* Global data not cleared after reset. */ /* Global data not cleared after reset. */
.noinit SIZEOF(.bss) + ADDR(.bss) : .noinit ADDR(.bss) + SIZEOF (.bss) : AT (ADDR (.noinit))
{ {
PROVIDE (__noinit_start = .) ; PROVIDE (__noinit_start = .) ;
*(.noinit*) *(.noinit*)
@ -182,7 +193,8 @@ SECTIONS
} > data } > data
.eeprom : .eeprom :
{ {
*(.eeprom*) /* See .data above... */
KEEP(*(.eeprom*))
__eeprom_end = . ; __eeprom_end = . ;
} > eeprom } > eeprom
.fuse : .fuse :
@ -208,6 +220,7 @@ SECTIONS
.stab.index 0 : { *(.stab.index) } .stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) } .stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) } .comment 0 : { *(.comment) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
/* DWARF debug sections. /* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */ of the section so we begin them at 0. */
@ -221,11 +234,21 @@ SECTIONS
.debug_aranges 0 : { *(.debug_aranges) } .debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) } .debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */ /* DWARF 2 */
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) } .debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) } .debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) } .debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) } .debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) } .debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
} }

39
ld_scripts/avr51.x

@ -1,4 +1,8 @@
/* Default linker script, for normal executables */ /* Default linker script, for normal executables */
/* Copyright (C) 2014-2016 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr") OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
OUTPUT_ARCH(avr:51) OUTPUT_ARCH(avr:51)
MEMORY MEMORY
@ -9,6 +13,7 @@ MEMORY
fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = 1K
} }
SECTIONS SECTIONS
{ {
@ -76,13 +81,19 @@ SECTIONS
KEEP(*(.vectors)) KEEP(*(.vectors))
/* For data that needs to reside in the lower 64k of progmem. */ /* For data that needs to reside in the lower 64k of progmem. */
*(.progmem.gcc*) *(.progmem.gcc*)
*(.progmem*) /* PR 13812: Placing the trampolines here gives a better chance
that they will be in range of the code that uses them. */
. = ALIGN(2); . = ALIGN(2);
__trampolines_start = . ; __trampolines_start = . ;
/* The jump trampolines for the 16-bit limited relocs will reside here. */ /* The jump trampolines for the 16-bit limited relocs will reside here. */
*(.trampolines) *(.trampolines)
*(.trampolines*) *(.trampolines*)
__trampolines_end = . ; __trampolines_end = . ;
/* avr-libc expects these data to reside in lower 64K. */
*libprintf_flt.a:*(.progmem.data)
*libc.a:*(.progmem.data)
*(.progmem*)
. = ALIGN(2);
/* For future tablejump instruction arrays for 3 byte pc devices. /* For future tablejump instruction arrays for 3 byte pc devices.
We don't relax jump/call instructions within these sections. */ We don't relax jump/call instructions within these sections. */
*(.jumptables) *(.jumptables)
@ -146,7 +157,7 @@ SECTIONS
KEEP (*(.fini0)) KEEP (*(.fini0))
_etext = . ; _etext = . ;
} > text } > text
.data : AT (ADDR (.text) + SIZEOF (.text)) .data :
{ {
PROVIDE (__data_start = .) ; PROVIDE (__data_start = .) ;
*(.data) *(.data)
@ -160,8 +171,8 @@ SECTIONS
. = ALIGN(2); . = ALIGN(2);
_edata = . ; _edata = . ;
PROVIDE (__data_end = .) ; PROVIDE (__data_end = .) ;
} > data } > data AT> text
.bss SIZEOF(.data) + ADDR(.data) : .bss ADDR(.data) + SIZEOF (.data) : AT (ADDR (.bss))
{ {
PROVIDE (__bss_start = .) ; PROVIDE (__bss_start = .) ;
*(.bss) *(.bss)
@ -172,7 +183,7 @@ SECTIONS
__data_load_start = LOADADDR(.data); __data_load_start = LOADADDR(.data);
__data_load_end = __data_load_start + SIZEOF(.data); __data_load_end = __data_load_start + SIZEOF(.data);
/* Global data not cleared after reset. */ /* Global data not cleared after reset. */
.noinit SIZEOF(.bss) + ADDR(.bss) : .noinit ADDR(.bss) + SIZEOF (.bss) : AT (ADDR (.noinit))
{ {
PROVIDE (__noinit_start = .) ; PROVIDE (__noinit_start = .) ;
*(.noinit*) *(.noinit*)
@ -182,7 +193,8 @@ SECTIONS
} > data } > data
.eeprom : .eeprom :
{ {
*(.eeprom*) /* See .data above... */
KEEP(*(.eeprom*))
__eeprom_end = . ; __eeprom_end = . ;
} > eeprom } > eeprom
.fuse : .fuse :
@ -208,6 +220,7 @@ SECTIONS
.stab.index 0 : { *(.stab.index) } .stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) } .stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) } .comment 0 : { *(.comment) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
/* DWARF debug sections. /* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */ of the section so we begin them at 0. */
@ -221,11 +234,21 @@ SECTIONS
.debug_aranges 0 : { *(.debug_aranges) } .debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) } .debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */ /* DWARF 2 */
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) } .debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) } .debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) } .debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) } .debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) } .debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
} }

39
ld_scripts/avr6.x

@ -1,4 +1,8 @@
/* Default linker script, for normal executables */ /* Default linker script, for normal executables */
/* Copyright (C) 2014-2016 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr") OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
OUTPUT_ARCH(avr:6) OUTPUT_ARCH(avr:6)
MEMORY MEMORY
@ -9,6 +13,7 @@ MEMORY
fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = 1K
} }
SECTIONS SECTIONS
{ {
@ -76,13 +81,19 @@ SECTIONS
KEEP(*(.vectors)) KEEP(*(.vectors))
/* For data that needs to reside in the lower 64k of progmem. */ /* For data that needs to reside in the lower 64k of progmem. */
*(.progmem.gcc*) *(.progmem.gcc*)
*(.progmem*) /* PR 13812: Placing the trampolines here gives a better chance
that they will be in range of the code that uses them. */
. = ALIGN(2); . = ALIGN(2);
__trampolines_start = . ; __trampolines_start = . ;
/* The jump trampolines for the 16-bit limited relocs will reside here. */ /* The jump trampolines for the 16-bit limited relocs will reside here. */
*(.trampolines) *(.trampolines)
*(.trampolines*) *(.trampolines*)
__trampolines_end = . ; __trampolines_end = . ;
/* avr-libc expects these data to reside in lower 64K. */
*libprintf_flt.a:*(.progmem.data)
*libc.a:*(.progmem.data)
*(.progmem*)
. = ALIGN(2);
/* For future tablejump instruction arrays for 3 byte pc devices. /* For future tablejump instruction arrays for 3 byte pc devices.
We don't relax jump/call instructions within these sections. */ We don't relax jump/call instructions within these sections. */
*(.jumptables) *(.jumptables)
@ -146,7 +157,7 @@ SECTIONS
KEEP (*(.fini0)) KEEP (*(.fini0))
_etext = . ; _etext = . ;
} > text } > text
.data : AT (ADDR (.text) + SIZEOF (.text)) .data :
{ {
PROVIDE (__data_start = .) ; PROVIDE (__data_start = .) ;
*(.data) *(.data)
@ -160,8 +171,8 @@ SECTIONS
. = ALIGN(2); . = ALIGN(2);
_edata = . ; _edata = . ;
PROVIDE (__data_end = .) ; PROVIDE (__data_end = .) ;
} > data } > data AT> text
.bss SIZEOF(.data) + ADDR(.data) : .bss ADDR(.data) + SIZEOF (.data) : AT (ADDR (.bss))
{ {
PROVIDE (__bss_start = .) ; PROVIDE (__bss_start = .) ;
*(.bss) *(.bss)
@ -172,7 +183,7 @@ SECTIONS
__data_load_start = LOADADDR(.data); __data_load_start = LOADADDR(.data);
__data_load_end = __data_load_start + SIZEOF(.data); __data_load_end = __data_load_start + SIZEOF(.data);
/* Global data not cleared after reset. */ /* Global data not cleared after reset. */
.noinit SIZEOF(.bss) + ADDR(.bss) : .noinit ADDR(.bss) + SIZEOF (.bss) : AT (ADDR (.noinit))
{ {
PROVIDE (__noinit_start = .) ; PROVIDE (__noinit_start = .) ;
*(.noinit*) *(.noinit*)
@ -182,7 +193,8 @@ SECTIONS
} > data } > data
.eeprom : .eeprom :
{ {
*(.eeprom*) /* See .data above... */
KEEP(*(.eeprom*))
__eeprom_end = . ; __eeprom_end = . ;
} > eeprom } > eeprom
.fuse : .fuse :
@ -208,6 +220,7 @@ SECTIONS
.stab.index 0 : { *(.stab.index) } .stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) } .stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) } .comment 0 : { *(.comment) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
/* DWARF debug sections. /* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */ of the section so we begin them at 0. */
@ -221,11 +234,21 @@ SECTIONS
.debug_aranges 0 : { *(.debug_aranges) } .debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) } .debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */ /* DWARF 2 */
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) } .debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) } .debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) } .debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) } .debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) } .debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
} }

3
profiles/borg-ancient

@ -5,7 +5,7 @@
# #
# General Setup # General Setup
# #
MCU=atmega32 MCU=atmega16
FREQ=16000000 FREQ=16000000
# #
@ -21,6 +21,7 @@ BORG_HW=HW_ANCIENTBORG
# #
COLPORT=PORTC COLPORT=PORTC
ROWPORT=PORTA ROWPORT=PORTA
# WATCHDOG_ENABLED is not set
# #
# Features # Features

24
profiles/borg-andre

@ -5,7 +5,7 @@
# #
# General Setup # General Setup
# #
MCU=atmega644p MCU=atmega32
FREQ=16000000 FREQ=16000000
# #
@ -68,11 +68,14 @@ MENU_SUPPORT=y
# #
GAME_TETRIS_CORE=y GAME_TETRIS_CORE=y
GAME_TETRIS=y GAME_TETRIS=y
GAME_BASTET=y # GAME_BASTET is not set
GAME_TETRIS_FP=y # GAME_TETRIS_FP is not set
GAME_SPACE_INVADERS=y GAME_SPACE_INVADERS=y
GAME_SNAKE=y GAME_SNAKE=y
# SNAKE_POV_CONTROL is not set
SNAKE_GAME_DELAY=200
GAME_BREAKOUT=y GAME_BREAKOUT=y
# GAME_KART is not set
# #
# Animations # Animations
@ -82,7 +85,6 @@ ANIMATION_SPIRAL=y
SPIRAL_DELAY=5 SPIRAL_DELAY=5
ANIMATION_JOERN1=y ANIMATION_JOERN1=y
ANIMATION_SNAKE=y ANIMATION_SNAKE=y
SNAKE_GAME_DELAY=200
SNAKE_ANIM_DELAY=100 SNAKE_ANIM_DELAY=100
SNAKE_TERMINATION_DELAY=60 SNAKE_TERMINATION_DELAY=60
SNAKE_MAX_LENGTH=64 SNAKE_MAX_LENGTH=64
@ -113,9 +115,10 @@ TIME_MASTER_ADDR=00
TIME_UPDATE_TIMEOUT=50 TIME_UPDATE_TIMEOUT=50
ANIMATION_BMSCROLLER=y ANIMATION_BMSCROLLER=y
ANIMATION_LABORLOGO=y ANIMATION_LABORLOGO=y
ANIMATION_AMPHIBIAN=y # ANIMATION_AMPHIBIAN is not set
# ANIMATION_LOGO_OOS is not set # ANIMATION_LOGO_OOS is not set
ANIMATION_FAIRYDUST=y ANIMATION_FAIRYDUST=y
# ANIMATION_THISISNOTDETROIT is not set
# #
# Fixed-point math patterns # Fixed-point math patterns
@ -124,10 +127,13 @@ ANIMATION_PLASMA=y
FP_PLASMA_DELAY=1 FP_PLASMA_DELAY=1
ANIMATION_PSYCHEDELIC=y ANIMATION_PSYCHEDELIC=y
FP_PSYCHO_DELAY=15 FP_PSYCHO_DELAY=15
ANIMATION_SURFACE_WAVE=y
FP_SURFACE_DELAY=15
ANIMATION_BLACKHOLE=y ANIMATION_BLACKHOLE=y
ANIMATION_DNA=y
ANIMATION_SQUARES=y ANIMATION_SQUARES=y
# ANIMATION_TESTS is not set ANIMATION_TESTS=y
# ANIMATION_OFF is not set ANIMATION_OFF=y
# #
# small Animations # small Animations
@ -144,3 +150,7 @@ SMALLANIMATION_ROWBOUNCE_COUNT=10
# SMALLANIMATION_COLBOUNCE is not set # SMALLANIMATION_COLBOUNCE is not set
SMALLANIMATION_COLBOUNCE_SPEED=50 SMALLANIMATION_COLBOUNCE_SPEED=50
SMALLANIMATION_COLBOUNCE_COUNT=10 SMALLANIMATION_COLBOUNCE_COUNT=10
#
# User Animations
#

162
profiles/borg-labor-lounge

@ -0,0 +1,162 @@
#
# Automatically generated by make menuconfig: don't edit
#
#
# General Setup
#
MCU=atmega644p
FREQ=16000000
#
# Borg Hardware
#
NUM_ROWS=16
NUM_COLS=16
NUMPLANE=3
BORG_HW=HW_BORG_16
#
# Borg16 port setup
#
HIGH_CONTRAST=y
UART_SUPPORT=y
UART_BAUDRATE_SETTING=19200
COLPORT1=PORTC
COLPORT2=PORTA
ROWPORT=PORTD
PIN_MCLR=4
PIN_CLK=6
PIN_DATA=7
REVERSE_COLS=y
# INVERT_ROWS is not set
# INTERLACED_ROWS is not set
# INTERLACED_COLS is not set
#
# 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"
# RFM12_SUPPORT is not set
#
# Joystick Support
#
JOYSTICK_SUPPORT=y
JOYSTICK_CHOICE=JOY_PARALLEL
#
# Joystick Settings
#
PARALLEL_JOYSTICK_SUPPORT=y
JOYSTICK_PIN_UP=PINB
JOYSTICK_BIT_UP=0
JOYSTICK_PIN_DOWN=PINB
JOYSTICK_BIT_DOWN=1
JOYSTICK_PIN_LEFT=PINB
JOYSTICK_BIT_LEFT=2
JOYSTICK_PIN_RIGHT=PINB
JOYSTICK_BIT_RIGHT=3
JOYSTICK_PIN_FIRE=PIND
JOYSTICK_BIT_FIRE=3
# CAN_SUPPORT is not set
MENU_SUPPORT=y
#
# Games
#
GAME_TETRIS_CORE=y
GAME_TETRIS=y
GAME_BASTET=y
GAME_TETRIS_FP=y
GAME_SPACE_INVADERS=y
GAME_SNAKE=y
# SNAKE_POV_CONTROL is not set
SNAKE_GAME_DELAY=200
GAME_BREAKOUT=y
GAME_KART=y
#
# Animations
#
ANIMATION_SCROLLTEXT=y
ANIMATION_SPIRAL=y
SPIRAL_DELAY=5
ANIMATION_JOERN1=y
ANIMATION_SNAKE=y
SNAKE_ANIM_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
MATRIX_DELAY=60
ANIMATION_RANDOM_BRIGHT=y
ANIMATION_STONEFLY=y
ANIMATION_FLYINGDOTS=y
ANIMATION_GAMEOFLIFE=y
GOL_DELAY=100
GOL_CYCLES=360
ANIMATION_BREAKOUT=y
# ANIMATION_MHERWEG is not set
ANIMATION_MOIRE=y
ANIMATION_LTN_ANT=y
# ANIMATION_TIME is not set
TIME_MASTER_ADDR=0x00
TIME_UPDATE_TIMEOUT=23
ANIMATION_BMSCROLLER=y
ANIMATION_LABORLOGO=y
ANIMATION_AMPHIBIAN=y
ANIMATION_LOGO_OOS=y
ANIMATION_FAIRYDUST=y
ANIMATION_THISISNOTDETROIT=y
#
# Fixed-point math patterns
#
ANIMATION_PLASMA=y
FP_PLASMA_DELAY=1
ANIMATION_PSYCHEDELIC=y
FP_PSYCHO_DELAY=15
ANIMATION_SURFACE_WAVE=y
FP_SURFACE_DELAY=15
ANIMATION_BLACKHOLE=y
ANIMATION_DNA=y
ANIMATION_SQUARES=y
ANIMATION_TESTS=y
ANIMATION_OFF=y
#
# 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
#
# User Animations
#

2
scripts/lxdialog/Makefile

@ -32,7 +32,7 @@ lxdialog: $(OBJS)
$(HOSTCC) $(HOSTCFLAGS) -o lxdialog $(OBJS) $(LIBS) $(HOSTCC) $(HOSTCFLAGS) -o lxdialog $(OBJS) $(LIBS)
ncurses: ncurses:
@echo "main() {}" > lxtemp.c @echo "int main() {return 0;}" > lxtemp.c
@if $(HOSTCC) $(HOSTCFLAGS) -lncurses lxtemp.c ; then \ @if $(HOSTCC) $(HOSTCFLAGS) -lncurses lxtemp.c ; then \
rm -f lxtemp.c a.out; \ rm -f lxtemp.c a.out; \
else \ else \

2
scripts/lxdialog/lxdialog.c

@ -208,7 +208,7 @@ j_inputbox (const char *t, int ac, const char * const * av)
int ret = dialog_inputbox (t, av[2], atoi (av[3]), atoi (av[4]), int ret = dialog_inputbox (t, av[2], atoi (av[3]), atoi (av[4]),
ac == 6 ? av[5] : (char *) NULL); ac == 6 ? av[5] : (char *) NULL);
if (ret == 0) if (ret == 0)
fprintf(stderr, dialog_input_result); fputs(dialog_input_result, stderr);
return ret; return ret;
} }

2
src/animations/Makefile

@ -42,7 +42,7 @@ ifeq ($(ANIMATION_LTN_ANT),y)
SRC += ltn_ant.c SRC += ltn_ant.c
endif endif
ifneq (,$(filter y,$(ANIMATION_PLASMA) $(ANIMATION_PSYCHEDELIC))) ifneq (,$(filter y,$(ANIMATION_PLASMA) $(ANIMATION_PSYCHEDELIC) $(ANIMATION_SURFACE_WAVE)))
SRC += fpmath_patterns.c SRC += fpmath_patterns.c
endif endif

4
src/animations/bitmapscroller/Makefile

@ -22,6 +22,10 @@ ifeq ($(ANIMATION_FAIRYDUST),y)
SRC += fairydust.c SRC += fairydust.c
endif endif
ifeq ($(ANIMATION_THISISNOTDETROIT),y)
SRC += thisisnotdetroit.c
endif
include $(MAKETOPDIR)/rules.mk include $(MAKETOPDIR)/rules.mk
include $(MAKETOPDIR)/depend.mk include $(MAKETOPDIR)/depend.mk

1
src/animations/bitmapscroller/config.in

@ -3,4 +3,5 @@ dep_bool_menu "Bitmap Scroller" ANIMATION_BMSCROLLER y $RANDOM_SUPPORT
dep_bool "Amphibian" ANIMATION_AMPHIBIAN $ANIMATION_BMSCROLLER dep_bool "Amphibian" ANIMATION_AMPHIBIAN $ANIMATION_BMSCROLLER
dep_bool "Out of Spec Logo" ANIMATION_LOGO_OOS $ANIMATION_BMSCROLLER dep_bool "Out of Spec Logo" ANIMATION_LOGO_OOS $ANIMATION_BMSCROLLER
dep_bool "Fairydust" ANIMATION_FAIRYDUST $ANIMATION_BMSCROLLER dep_bool "Fairydust" ANIMATION_FAIRYDUST $ANIMATION_BMSCROLLER
dep_bool "This is not Detroit" ANIMATION_THISISNOTDETROIT $ANIMATION_BMSCROLLER
endmenu endmenu

141
src/animations/bitmapscroller/thisisnotdetroit.c

@ -0,0 +1,141 @@
#include <stdint.h>
#include <assert.h>
#include "../../compat/pgmspace.h"
#include "bitmapscroller.h"
#include "thisisnotdetroit.h"
static uint8_t const athisIsNotDetroitBitmap[2][55][8] PROGMEM =
{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x80},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x60},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x20, 0x64},
{0x00, 0x00, 0x00, 0x01, 0x01, 0x18, 0x03, 0x24},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0xe1, 0xd4},
{0x00, 0x00, 0x00, 0x00, 0x01, 0x5f, 0xeb, 0x22},
{0x00, 0x00, 0x00, 0x01, 0x11, 0xfe, 0x10, 0x00},
{0x00, 0x00, 0x06, 0x8f, 0xa5, 0x18, 0x00, 0x00},
{0x00, 0x00, 0x3f, 0xf0, 0xc0, 0x00, 0x00, 0x01},
{0x01, 0x82, 0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00},
{0x03, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00},
{0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x1f, 0xf6, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00},
{0x09, 0xc0, 0x00, 0x37, 0xc0, 0x00, 0x00, 0x00},
{0x38, 0x00, 0x0a, 0xe7, 0x40, 0x00, 0x00, 0x00},
{0x38, 0x01, 0xce, 0xff, 0x00, 0x00, 0x00, 0x00},
{0x3c, 0xbe, 0xce, 0xf7, 0xc0, 0x00, 0x00, 0x00},
{0x3c, 0xfd, 0xce, 0xf3, 0xe0, 0x00, 0x00, 0x00},
{0x1c, 0xf8, 0xfe, 0xf0, 0x60, 0x00, 0x00, 0x00},
{0x04, 0x70, 0xfe, 0xf2, 0xe0, 0x00, 0x00, 0x00},
{0x00, 0x70, 0xee, 0xff, 0xe0, 0x00, 0x00, 0x00},
{0x00, 0x70, 0xce, 0xf0, 0x80, 0x06, 0xc0, 0x00},
{0x00, 0x71, 0xce, 0x60, 0x02, 0x1f, 0x80, 0x00},
{0x00, 0x71, 0xc0, 0x00, 0x1f, 0xdf, 0x40, 0x00},
{0x00, 0x70, 0x00, 0x03, 0xbf, 0xd6, 0x00, 0x00},
{0x00, 0x00, 0x00, 0xf3, 0x3d, 0xc6, 0x00, 0x00},
{0x00, 0x01, 0x40, 0xfb, 0xf1, 0xe6, 0x00, 0x00},
{0x00, 0x21, 0xf0, 0xfb, 0xb8, 0xc6, 0x00, 0x00},
{0x00, 0x77, 0x80, 0xfb, 0xf0, 0xe6, 0x00, 0x00},
{0x00, 0x73, 0x80, 0xef, 0xbf, 0xc6, 0x00, 0x00},
{0x00, 0x77, 0xe0, 0xef, 0xbf, 0x84, 0x00, 0x0c},
{0x00, 0x71, 0xf0, 0xef, 0x8e, 0x00, 0x00, 0xf8},
{0x00, 0x70, 0x70, 0xe7, 0x80, 0x00, 0x1b, 0xfc},
{0x00, 0x73, 0xf0, 0xc0, 0x00, 0x0f, 0x1b, 0xf0},
{0x00, 0x73, 0xe0, 0x00, 0x0c, 0x3f, 0x98, 0xf0},
{0x00, 0x70, 0x40, 0x03, 0x7f, 0x7b, 0x98, 0xf0},
{0x00, 0x60, 0x00, 0x5f, 0x7e, 0x73, 0xd8, 0xf0},
{0x00, 0x00, 0x1f, 0x7f, 0x67, 0xf1, 0xd8, 0xf0},
{0x00, 0x0e, 0x1f, 0x7c, 0x77, 0xe3, 0x98, 0xf0},
{0x00, 0x3f, 0x1e, 0x1c, 0x7c, 0xf7, 0x9c, 0xe0},
{0x00, 0x7f, 0xdb, 0x1c, 0x6e, 0x7f, 0x1c, 0x00},
{0x00, 0x71, 0xdf, 0x1c, 0x7f, 0x3f, 0x00, 0x00},
{0x00, 0x71, 0xdb, 0x1c, 0x67, 0x80, 0x00, 0x00},
{0x00, 0x71, 0xdd, 0x1c, 0x50, 0x00, 0x00, 0x00},
{0x00, 0x73, 0xdf, 0x18, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x7f, 0x1f, 0x80, 0x00, 0x00, 0xfc, 0x00},
{0x00, 0x7e, 0x10, 0x00, 0x00, 0x7f, 0xf0, 0x00},
{0x00, 0x68, 0x00, 0x00, 0x2f, 0xff, 0x90, 0x00},
{0x00, 0x00, 0x00, 0x03, 0xfe, 0xa3, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x1f, 0xfd, 0x00, 0x00, 0x00},
{0x00, 0x3c, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00},
{0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x08},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x2a},
{0x00, 0x00, 0x00, 0x02, 0x40, 0x3f, 0xf0, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0xc0, 0x00},
{0x00, 0x00, 0x01, 0x41, 0xd7, 0xe0, 0x00, 0x02},
{0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00},
{0x00, 0x7d, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00},
{0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00},
{0x1f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x0f, 0xf8, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00},
{0x3e, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00},
{0x38, 0x00, 0x06, 0x77, 0xc0, 0x00, 0x00, 0x00},
{0x18, 0x00, 0xce, 0x66, 0x00, 0x00, 0x00, 0x00},
{0x18, 0x7d, 0xce, 0x67, 0xc0, 0x00, 0x00, 0x00},
{0x1d, 0xfd, 0xce, 0x67, 0xe0, 0x00, 0x00, 0x00},
{0x0d, 0xf1, 0xfe, 0x60, 0xe0, 0x00, 0x00, 0x00},
{0x0c, 0x31, 0xfe, 0x67, 0xe0, 0x00, 0x00, 0x00},
{0x00, 0x31, 0xce, 0x67, 0xc0, 0x00, 0x00, 0x00},
{0x00, 0x31, 0xce, 0x67, 0x00, 0x01, 0xc0, 0x00},
{0x00, 0x31, 0xce, 0x00, 0x00, 0x1f, 0xc0, 0x00},
{0x00, 0x31, 0xc0, 0x00, 0x0f, 0x9f, 0x80, 0x00},
{0x00, 0x30, 0x00, 0x03, 0x1f, 0xc7, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x73, 0xb9, 0xe7, 0x00, 0x00},
{0x00, 0x00, 0xe0, 0x73, 0x38, 0xe7, 0x00, 0x00},
{0x00, 0x13, 0xe0, 0x7b, 0x70, 0xe7, 0x00, 0x00},
{0x00, 0x33, 0xe0, 0x7f, 0x39, 0xc7, 0x00, 0x00},
{0x00, 0x37, 0x00, 0x7f, 0x3f, 0xc7, 0x00, 0x00},
{0x00, 0x33, 0xe0, 0x6f, 0x3f, 0x80, 0x00, 0x00},
{0x00, 0x33, 0xf0, 0x67, 0x1f, 0x00, 0x01, 0xfc},
{0x00, 0x30, 0x70, 0x67, 0x00, 0x00, 0x1d, 0xf8},
{0x00, 0x33, 0xf0, 0x60, 0x00, 0x1f, 0x1d, 0xe0},
{0x00, 0x37, 0xe0, 0x00, 0x00, 0x3f, 0x9c, 0x60},
{0x00, 0x33, 0x80, 0x00, 0x7e, 0x7f, 0xdc, 0x60},
{0x00, 0x00, 0x00, 0x3f, 0x7f, 0x71, 0xdc, 0x60},
{0x00, 0x00, 0x0f, 0x7f, 0x77, 0x61, 0xdc, 0x60},
{0x00, 0x00, 0x1f, 0x7c, 0x7e, 0x71, 0xdc, 0x60},
{0x00, 0x3f, 0x9c, 0x1c, 0x7e, 0x7b, 0x98, 0x60},
{0x00, 0x3f, 0x9f, 0x1c, 0x7e, 0x7f, 0x98, 0x00},
{0x00, 0x33, 0xdf, 0x1c, 0x67, 0x3e, 0x00, 0x00},
{0x00, 0x31, 0xdc, 0x1c, 0x77, 0x00, 0x00, 0x00},
{0x00, 0x31, 0xdb, 0x9c, 0x60, 0x00, 0x00, 0x00},
{0x00, 0x33, 0x9f, 0x9c, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x3f, 0x9f, 0x00, 0x00, 0x01, 0xf8, 0x00},
{0x00, 0x3f, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00},
{0x00, 0x30, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00},
{0x00, 0x00, 0x00, 0x0f, 0xff, 0x5c, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00},
{0x00, 0x1e, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}};
static uint8_t logo_thisIsNotDetroit_getChunk(unsigned char const nBitPlane,
unsigned char const nChunkX,
unsigned char const nChunkY,
unsigned int const nFrame)
{
assert(nBitPlane < 2);
assert(nChunkX < 8);
assert(nChunkY < 55);
return pgm_read_byte(&athisIsNotDetroitBitmap[nBitPlane][nChunkY][nChunkX]);
}
void logo_thisIsNotDetroit()
{
// width 64, height 55, 2 bitplanes (4 colors), 600 frames à 75ms
// frame change and viewport movement after every cyle (both dividers are 1)
bitmap_scroll(64, 55, 2, 600, 75, 1, 1, logo_thisIsNotDetroit_getChunk);
}

6
src/animations/bitmapscroller/thisisnotdetroit.h

@ -0,0 +1,6 @@
#ifndef THISISNOTDETROIT_H_
#define THISISNOTDETROIT_H_
void logo_thisIsNotDetroit();
#endif /* THISISNOTDETROIT_H_ */

3
src/animations/config.in

@ -61,6 +61,9 @@ comment "Animations"
bool "Psychedelic" ANIMATION_PSYCHEDELIC $ANIMATION_FIXEDPOINT bool "Psychedelic" ANIMATION_PSYCHEDELIC $ANIMATION_FIXEDPOINT
int "Additional Frame Delay (in ms) For Psychedelic" FP_PSYCHO_DELAY 15 int "Additional Frame Delay (in ms) For Psychedelic" FP_PSYCHO_DELAY 15
bool "Surface Wave" ANIMATION_SURFACE_WAVE $ANIMATION_FIXEDPOINT
int "Additional Frame Delay (in ms) For Psychedelic" FP_SURFACE_DELAY 15
endmenu endmenu
bool "Black Hole" ANIMATION_BLACKHOLE bool "Black Hole" ANIMATION_BLACKHOLE

77
src/animations/fpmath_patterns.c

@ -566,4 +566,81 @@ void psychedelic(void)
#endif /* ANIMATION_PSYCHEDELIC */ #endif /* ANIMATION_PSYCHEDELIC */
#ifdef ANIMATION_SURFACE_WAVE
/**
* This type maintains values relevant for the surface wave animation which need
* to be persistent over consecutive invocations.
*/
typedef struct fixp_surface_s
{
fixp_t fCenterX1; /**< X-coordinate of first curl's center. */
fixp_t fCenterY1; /**< Y-coordinate of first curl's center. */
fixp_t fCenterX2; /**< X-coordinate of second curl's center. */
fixp_t fCenterY2; /**< Y-coordinate of second curl's center. */
} fixp_surface_t;
/**
* Generates two flowing circular waves superimposing each other.
* @param x x-coordinate
* @param y y-coordinate
* @param t A step value which changes for each frame, allowing for animations.
* @param r A pointer to persistent interim results.
* @return The brightness value (0 < n <= NUM_PLANES) of the given coordinate.
*/
static unsigned char fixAnimSurfaceWave(unsigned char const x,
unsigned char const y,
fixp_t const t,
void *const r)
{
assert(x < (LINEBYTES * 8));
assert(y < NUM_ROWS);
fixp_surface_t *p = (fixp_surface_t *)r;
if (x == 0 && y == 0)
{
p->fCenterX1 = fixMul(fixCos(t), fixScaleUp(NUM_COLS / 2));
p->fCenterY1 = fixMul(fixSin(t), fixScaleUp(NUM_ROWS / 2));
p->fCenterX2 = p->fCenterY1 + fixScaleUp(NUM_ROWS / (NUMPLANE + 1));
p->fCenterY2 = p->fCenterX1 + fixScaleUp(NUM_COLS / (NUMPLANE + 1));
}
unsigned char const nResult1 =
fixMul(fixSin(fixDist(fixScaleUp(x), fixScaleUp(y),
p->fCenterX1, p->fCenterY1)) + FIX,
(fixp_t)((NUMPLANE - 1.05) * FIX));
unsigned char const nResult2 =
fixMul(fixSin(fixDist(fixScaleUp(x), fixScaleUp(y),
p->fCenterX2, p->fCenterY2)) + FIX,
(fixp_t)((NUMPLANE - 1.05) * FIX));
unsigned char const nResult = (nResult1 + nResult2) / 2 / FIX;
assert(nResult <= NUMPLANE);
return nResult;
}
/**
* Starting point for the surface wave animation.
*/
void surfaceWave(void)
{
fixp_surface_t r;
#ifndef __AVR__
fixDrawPattern(0, fixScaleUp(75), 0.1 * FIX, 30, fixAnimSurfaceWave, &r);
#else
#ifndef FP_SURFACE_DELAY
#define FP_SURFACE_DELAY 15
#endif
fixDrawPattern(0, fixScaleUp(60), 0.1 * FIX, FP_SURFACE_DELAY,
fixAnimSurfaceWave, &r);
#endif /* __AVR__ */
}
#endif /* ANIMATION_SURFACE_WAVE */
/*@}*/ /*@}*/

2
src/animations/fpmath_patterns.h

@ -16,6 +16,8 @@ void plasma(void);
void psychedelic(void); void psychedelic(void);
void surfaceWave(void);
#endif /* FPMATH_PATTERNS_H_ */ #endif /* FPMATH_PATTERNS_H_ */
/*@}*/ /*@}*/

93
src/borg_hw/borg_hw_ancient.c

@ -1,21 +1,18 @@
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <avr/io.h> #include <avr/io.h>
#include <avr/wdt.h>
#undef WATCHDOG_ENABLED
#ifdef WATCHDOG_ENABLED
# include <avr/wdt.h>
#endif
#include "../config.h" #include "../config.h"
#include "../makros.h" #include "../makros.h"
#include "borg_hw.h" #include "borg_hw.h"
// define row port // define row port
#ifndef ROWPORT #ifndef ROWPORT
# define ROWPORT PORTA # define ROWPORT PORTA
#endif #endif
#define ROWDDR DDR(ROWPORT) #define ROWDDR DDR(ROWPORT)
// define column port // define column port
#ifndef COLPORT #ifndef COLPORT
# define COLPORT PORTC # define COLPORT PORTC
@ -23,20 +20,43 @@
#define COLDDR DDR(COLPORT) #define COLDDR DDR(COLPORT)
// Timer0 control
#if defined(__AVR_ATmega164__) || \
defined(__AVR_ATmega164P__) || \
defined(__AVR_ATmega324__) || \
defined(__AVR_ATmega324P__) || \
defined(__AVR_ATmega644__) || \
defined(__AVR_ATmega644P__) || \
defined(__AVR_ATmega1284__) || \
defined(__AVR_ATmega1284P__)
# define TIMER0_OFF() TIMSK0 &= ~(OCIE0A); TCCR0A = 0; TCCR0B = 0
# define TIMER0_CTC_CS64() TCCR0A = _BV(WGM01); TCCR0B = _BV(CS01) | _BV(CS00)
# define TIMER0_RESET() TCNT0 = 0
# define TIMER0_COMPARE(t) OCR0A = t
# define TIMER0_INT_ENABLE() TIMSK0 |= _BV(OCIE0A)
# define TIMER0_ISR TIMER0_COMPA_vect
#elif defined(__AVR_ATmega16__) || \
defined(__AVR_ATmega32__)
# define TIMER0_OFF() TIMSK &= ~(OCIE0); TCCR0 = 0
# define TIMER0_CTC_CS64() TCCR0 = _BV(WGM01) | _BV(CS01) | _BV(CS00)
# define TIMER0_RESET() TCNT0 = 0
# define TIMER0_COMPARE(t) OCR0 = t
# define TIMER0_INT_ENABLE() TIMSK |= _BV(OCIE0)
# define TIMER0_ISR TIMER0_COMP_vect
#else
# error MCU not supported
#endif
// buffer which holds the currently shown frame // buffer which holds the currently shown frame
unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES]; unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES];
ISR(TIMER0_COMP_vect) ISR(TIMER0_ISR)
{ {
static unsigned char plane = 0; static unsigned char plane = 0;
static unsigned char row = 0; static unsigned char row = 0;
#ifdef WATCHDOG_ENABLED
// reset watchdog
wdt_reset();
#endif
ROWPORT = 0; ROWPORT = 0;
row++; row++;
if ((COLPORT <<= 1) == 0) { if ((COLPORT <<= 1) == 0) {
@ -46,6 +66,11 @@ ISR(TIMER0_COMP_vect)
if (++plane == NUMPLANE) if (++plane == NUMPLANE)
{ {
plane = 0; plane = 0;
#ifdef WATCHDOG_ENABLED
// reset watchdog
wdt_reset();
#endif
} }
} }
@ -56,50 +81,28 @@ ISR(TIMER0_COMP_vect)
ROWPORT = pixmap[plane][row][0]; ROWPORT = pixmap[plane][row][0];
} }
void timer0_off(){ void timer0_off(){
cli(); cli();
COLPORT = 0; COLPORT = 0;
ROWPORT = 0; ROWPORT = 0;
#if defined (__AVR_ATmega644P__) || defined (__AVR_ATmega644__) || (__AVR_ATmega1284P__) || defined (__AVR_ATmega1284__) TIMER0_OFF();
TCCR0A = 0x00;
TCCR0B = 0x00;
TIMSK0 = 0;
#else
TCCR0 = 0x00;
TIMSK = 0;
#endif
sei(); sei();
} }
static void timer0_on(){
/* TCCR0: FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 // initialize timer which triggers the interrupt
CS02 CS01 CS00 static void timer0_on() {
0 0 0 stop TIMER0_CTC_CS64(); // CTC mode, prescaling conforms to clk/64
0 0 1 clk TIMER0_RESET(); // set counter to 0
0 1 0 clk/8 TIMER0_COMPARE(0x10); // compare with this value first
0 1 1 clk/64 TIMER0_INT_ENABLE(); // enable Timer/Counter0 Output Compare Match (A) Int.
1 0 0 clk/256
1 0 1 clk/1024
*/
#if defined (__AVR_ATmega644P__) || defined (__AVR_ATmega644__) || (__AVR_ATmega1284P__) || defined (__AVR_ATmega1284__)
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(){ void borg_hw_init(){
// switch all pins of both the row and the column port to output mode // switch all pins of both the row and the column port to output mode
ROWDDR = 0xFF; ROWDDR = 0xFF;
@ -114,6 +117,6 @@ void borg_hw_init(){
#ifdef WATCHDOG_ENABLED #ifdef WATCHDOG_ENABLED
// activate watchdog timer // activate watchdog timer
wdt_reset(); wdt_reset();
wdt_enable(0x00); // 17ms watchdog wdt_enable(WDTO_15MS); // 15ms watchdog
#endif #endif
} }

8
src/borg_hw/borg_hw_andreborg.c

@ -19,18 +19,18 @@
defined(__AVR_ATmega644P__) || \ defined(__AVR_ATmega644P__) || \
defined(__AVR_ATmega1284__) || \ defined(__AVR_ATmega1284__) || \
defined(__AVR_ATmega1284P__) defined(__AVR_ATmega1284P__)
# define TIMER0_OFF() TCCR0A = 0; TCCR0B = 0 # define TIMER0_OFF() TIMSK0 &= ~(OCIE0A); TCCR0A = 0; TCCR0B = 0
# define TIMER0_CTC_CS256() TCCR0A = _BV(WGM01); TCCR0B = _BV(CS02) # define TIMER0_CTC_CS256() TCCR0A = _BV(WGM01); TCCR0B = _BV(CS02)
# define TIMER0_RESET() TCNT0 = 0 # define TIMER0_RESET() TCNT0 = 0
# define TIMER0_COMPARE(t) OCR0A = t # define TIMER0_COMPARE(t) OCR0A = t
# define TIMER0_INT_ENABLE() TIMSK0 = _BV(OCIE0A) # define TIMER0_INT_ENABLE() TIMSK0 |= _BV(OCIE0A)
# define TIMER0_ISR TIMER0_COMPA_vect # define TIMER0_ISR TIMER0_COMPA_vect
#else // ATmega16/32 #else // ATmega16/32
# define TIMER0_OFF() TCCR0 = 0 # define TIMER0_OFF() TIMSK &= ~(OCIE0); TCCR0 = 0
# define TIMER0_CTC_CS256() TCCR0 = _BV(WGM01) | _BV(CS02) # define TIMER0_CTC_CS256() TCCR0 = _BV(WGM01) | _BV(CS02)
# define TIMER0_RESET() TCNT0 = 0 # define TIMER0_RESET() TCNT0 = 0
# define TIMER0_COMPARE(t) OCR0 = t # define TIMER0_COMPARE(t) OCR0 = t
# define TIMER0_INT_ENABLE() TIMSK = _BV(OCIE0) # define TIMER0_INT_ENABLE() TIMSK |= _BV(OCIE0)
# define TIMER0_ISR TIMER0_COMP_vect # define TIMER0_ISR TIMER0_COMP_vect
#endif #endif

4
src/borg_hw/borg_hw_borg16.c

@ -41,14 +41,14 @@
defined(__AVR_ATmega644P__) || \ defined(__AVR_ATmega644P__) || \
defined(__AVR_ATmega1284__) || \ defined(__AVR_ATmega1284__) || \
defined(__AVR_ATmega1284P__) defined(__AVR_ATmega1284P__)
# define TIMER0_OFF() TCCR0A = 0; TCCR0B = 0 # define TIMER0_OFF() TIMSK0 &= ~(OCIE0A); TCCR0A = 0; TCCR0B = 0
# define TIMER0_CTC_CS256() TCCR0A = _BV(WGM01); TCCR0B = _BV(CS02) # define TIMER0_CTC_CS256() TCCR0A = _BV(WGM01); TCCR0B = _BV(CS02)
# define TIMER0_RESET() TCNT0 = 0 # define TIMER0_RESET() TCNT0 = 0
# define TIMER0_COMPARE(t) OCR0A = t # define TIMER0_COMPARE(t) OCR0A = t
# define TIMER0_INT_ENABLE() TIMSK0 |= _BV(OCIE0A) # define TIMER0_INT_ENABLE() TIMSK0 |= _BV(OCIE0A)
# define TIMER0_ISR TIMER0_COMPA_vect # define TIMER0_ISR TIMER0_COMPA_vect
#else // ATmega16/32 #else // ATmega16/32
# define TIMER0_OFF() TCCR0 = 0 # define TIMER0_OFF() TIMSK &= ~(OCIE0); TCCR0 = 0
# define TIMER0_CTC_CS256() TCCR0 = _BV(WGM01) | _BV(CS02) # define TIMER0_CTC_CS256() TCCR0 = _BV(WGM01) | _BV(CS02)
# define TIMER0_RESET() TCNT0 = 0 # define TIMER0_RESET() TCNT0 = 0
# define TIMER0_COMPARE(t) OCR0 = t # define TIMER0_COMPARE(t) OCR0 = t

2
src/borg_hw/config_ancient.in

@ -15,4 +15,6 @@ choice 'Row Port' \
PORTD PORTD" \ PORTD PORTD" \
'PORTA' ROWPORT 'PORTA' ROWPORT
bool "Watchdog" WATCHDOG_ENABLED n
endmenu endmenu

20
src/display_loop.c

@ -18,6 +18,7 @@
#include "animations/bitmapscroller/amphibian.h" #include "animations/bitmapscroller/amphibian.h"
#include "animations/bitmapscroller/outofspec.h" #include "animations/bitmapscroller/outofspec.h"
#include "animations/bitmapscroller/fairydust.h" #include "animations/bitmapscroller/fairydust.h"
#include "animations/bitmapscroller/thisisnotdetroit.h"
#include "animations/fpmath_patterns.h" #include "animations/fpmath_patterns.h"
#include "animations/mherweg.h" #include "animations/mherweg.h"
#include "animations/moire.h" #include "animations/moire.h"
@ -53,6 +54,8 @@
# include "joystick/joystick.h" # include "joystick/joystick.h"
#endif #endif
#include "user/user_loop.h"
volatile unsigned char oldMode, oldOldmode, reverseMode, mode; volatile unsigned char oldMode, oldOldmode, reverseMode, mode;
jmp_buf newmode_jmpbuf; jmp_buf newmode_jmpbuf;
@ -268,8 +271,21 @@ void display_loop(){
dna(); dna();
break; break;
#endif #endif
#ifdef ANIMATION_CLOCK
#ifdef ANIMATION_SURFACE_WAVE
case 27: case 27:
surfaceWave();
break;
#endif
#ifdef ANIMATION_THISISNOTDETROIT
case 28:
logo_thisIsNotDetroit();
break;
#endif
#ifdef ANIMATION_CLOCK
case 29:
wordclock(); wordclock();
break; break;
#endif #endif
@ -315,6 +331,8 @@ void display_loop(){
break; break;
#endif #endif
#include "user/user_loop.c"
#ifdef MENU_SUPPORT #ifdef MENU_SUPPORT
case 0xFDu: case 0xFDu:
mode = 1; mode = 1;

46
src/games/kart/kart.c

@ -23,7 +23,7 @@
#if defined MENU_SUPPORT && defined GAME_KART #if defined MENU_SUPPORT && defined GAME_KART
// icon (TODO: convert to hex) // icon
static const uint8_t icon[8] PROGMEM = static const uint8_t icon[8] PROGMEM =
{ 0xE1, // 0b11100001, { 0xE1, // 0b11100001,
0xE1, // 0b11100001, 0xE1, // 0b11100001,
@ -44,7 +44,7 @@ game_descriptor_t kart_game_descriptor __attribute__((section(".game_descriptors
#define WAIT 15 #define WAIT 15
#define DRIVE_DIV 10 #define DRIVE_DIV 9
#define DIRECTION_DIV 20 #define DIRECTION_DIV 20
#define DECREASE_WIDTH_DIV 300 #define DECREASE_WIDTH_DIV 300
#define ACCELERATE_DIV 800 #define ACCELERATE_DIV 800
@ -64,6 +64,9 @@ game_descriptor_t kart_game_descriptor __attribute__((section(".game_descriptors
#define BORDER_DARK 2 #define BORDER_DARK 2
#define OBSTACLE_COLOR 3 #define OBSTACLE_COLOR 3
#define NUM_FLASHES 3
#define BLINK_TIME 300
// borders = (middle, width, obstacle_pos) // borders = (middle, width, obstacle_pos)
uint8_t borders[NUM_ROWS][3]; uint8_t borders[NUM_ROWS][3];
uint32_t extra_score = 0; uint32_t extra_score = 0;
@ -72,6 +75,7 @@ void kart_game(){
// Initialisation // Initialisation
uint32_t decrease_width_div = DECREASE_WIDTH_DIV; uint32_t decrease_width_div = DECREASE_WIDTH_DIV;
uint16_t accelerate_div = ACCELERATE_DIV;
uint8_t key_ignore[2]; uint8_t key_ignore[2];
uint8_t drive_div = DRIVE_DIV; uint8_t drive_div = DRIVE_DIV;
uint8_t carpos = NUM_COLS / 2; uint8_t carpos = NUM_COLS / 2;
@ -109,12 +113,13 @@ void kart_game(){
// DECREASE WIDTH // DECREASE WIDTH
if(cycle % decrease_width_div == 0){ if(cycle % decrease_width_div == 0){
width--; width--;
decrease_width_div = decrease_width_div*2; decrease_width_div *= 2;
} }
// INCREASE SPEED // INCREASE SPEED
if(cycle % ACCELERATE_DIV == 0 ){ if(cycle % accelerate_div == 0 ){
drive_div--; drive_div--;
accelerate_div *= 2;
} }
// MOVE // MOVE
@ -142,7 +147,8 @@ void kart_game(){
key_ignore[1] = KEY_IGNORE_INITIAL; key_ignore[1] = KEY_IGNORE_INITIAL;
key_ignore[0] = 0; key_ignore[0] = 0;
}else if(JOYISUP && boost_till == 0){ }else if(JOYISFIRE && boost_till == 0){
blink();
boost_till = cycle + BOOST_CYCLES; boost_till = cycle + BOOST_CYCLES;
boost_multiplier = BOOST_MULTIPLIER; boost_multiplier = BOOST_MULTIPLIER;
}else if(!(JOYISRIGHT || JOYISLEFT)){ }else if(!(JOYISRIGHT || JOYISLEFT)){
@ -224,7 +230,8 @@ void kart_game(){
wait(WAIT); wait(WAIT);
} }
snprintf(game_over, sizeof(game_over), "</#Game Over, Score: %lu", cycle); snprintf(game_over, sizeof(game_over), "</#Game Over, Score: %lu",
(long unsigned)cycle);
scrolltext(game_over); scrolltext(game_over);
} }
@ -265,6 +272,33 @@ void save_street(uint8_t middle, uint8_t width, uint8_t obstacle_pos){
} }
/**
* Flash the screen NUM_FLASHES times.
*/
void blink(){
// Two copies of the pixmap.
unsigned char pixmap_copy_1[NUMPLANE][NUM_ROWS][LINEBYTES];
unsigned char pixmap_copy_2[NUMPLANE][NUM_ROWS][LINEBYTES];
unsigned char plane, row, byte, flashes;
// create empty pixmap
for(plane = 0; plane < NUMPLANE; plane++){
for(row = 0; row < NUM_ROWS; row++){
for(byte = 0; byte < LINEBYTES; byte++){
pixmap_copy_2[plane][row][byte] = 0;
}
}
}
// Do a triangle shift.
for(flashes = NUM_FLASHES*2; flashes > 0; flashes--){
memcpy(pixmap_copy_1, pixmap, sizeof(pixmap));
memcpy(pixmap, pixmap_copy_2, sizeof(pixmap));
memcpy(pixmap_copy_2, pixmap_copy_1, sizeof(pixmap));
wait(BLINK_TIME);
}
}
/** /**
* check if collision occours * check if collision occours
*/ */

1
src/games/kart/kart.h

@ -13,5 +13,6 @@ void kart_game(void);
void drive(void); void drive(void);
void save_street(uint8_t middle, uint8_t width, uint8_t obstacle_pos); void save_street(uint8_t middle, uint8_t width, uint8_t obstacle_pos);
uint8_t check_collision(uint8_t carpos); uint8_t check_collision(uint8_t carpos);
void blink();
#endif /* KART_H_ */ #endif /* KART_H_ */

7
src/scrolltext/scrolltext3.c

@ -34,12 +34,17 @@
#define MAX_FONTS 1 #define MAX_FONTS 1
font fonts[MAX_FONTS]; font fonts[MAX_FONTS];
// never used
/*
#define MAX_SPECIALCOLORS 3 #define MAX_SPECIALCOLORS 3
static const unsigned char PROGMEM colorTable[MAX_SPECIALCOLORS * NUM_ROWS] = {1, 1, 2, 3, 3, 2, 1, 1, static const unsigned char PROGMEM colorTable[MAX_SPECIALCOLORS * NUM_ROWS] ={
1, 1, 2, 3, 3, 2, 1, 1,
3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3,
3, 3, 2, 2, 3, 3, 2, 2 3, 3, 2, 2, 3, 3, 2, 2
}; };
*/
static const char default_text[] PROGMEM = SCROLLTEXT_TEXT; static const char default_text[] PROGMEM = SCROLLTEXT_TEXT;
char scrolltext_text[SCROLLTEXT_BUFFER_SIZE]; char scrolltext_text[SCROLLTEXT_BUFFER_SIZE];

8
src/uart/uart_commands.c

@ -50,8 +50,9 @@ extern volatile unsigned char reverseMode;
#define CR "\r\n" #define CR "\r\n"
#if (!(defined(eeprom_update_block) && \ #if ((__AVR_LIBC_MAJOR__ < 1) || \
((E2PAGESIZE == 2) || (E2PAGESIZE == 4) || (E2PAGESIZE == 8)))) || \ ((__AVR_LIBC_MAJOR__ == 1) && (__AVR_LIBC_MINOR__ < 7))) || \
((E2PAGESIZE != 2) && (E2PAGESIZE != 4) && (E2PAGESIZE != 8)) || \
!defined(ANIMATION_TESTS) || !(defined(SCROLLTEXT_SUPPORT)) !defined(ANIMATION_TESTS) || !(defined(SCROLLTEXT_SUPPORT))
char const UART_STR_NOTIMPL[] PROGMEM = "Not implemented."CR; char const UART_STR_NOTIMPL[] PROGMEM = "Not implemented."CR;
#endif #endif
@ -145,7 +146,8 @@ static void uartcmd_clear_buffer(void) {
* Erases the complete EEPROM to reset counters and high score tables. * Erases the complete EEPROM to reset counters and high score tables.
*/ */
static void uartcmd_erase_eeprom(void) { static void uartcmd_erase_eeprom(void) {
#if defined(eeprom_update_block) && \ #if ((__AVR_LIBC_MAJOR__ > 1) || \
((__AVR_LIBC_MAJOR__ == 1) && (__AVR_LIBC_MINOR__ >= 7))) && \
((E2PAGESIZE == 2) || (E2PAGESIZE == 4) || (E2PAGESIZE == 8)) ((E2PAGESIZE == 2) || (E2PAGESIZE == 4) || (E2PAGESIZE == 8))
uint8_t const eeclear[] = uint8_t const eeclear[] =
# if E2PAGESIZE == 8 # if E2PAGESIZE == 8

25
src/user/Makefile

@ -0,0 +1,25 @@
# This file eases the integration of your personal animations which are not
# meant to be included in the official Borgware-2D repository.
#
# Just add your own source files to the SRC variable (checking for options
# introduced in your config.in file) as shown in the commented samples.
MAKETOPDIR = ../..
TARGET = libuser.a
include $(MAKETOPDIR)/defaults.mk
# ifeq ($(ANIMATION_MY_SIMPLE_ANIM),y)
# SRC += my_simple_anim.c
# endif
# ifeq ($(ANIMATION_MY_COMPLEX_ANIM),y)
# SRC += my_complex_anim.c
# endif
include $(MAKETOPDIR)/rules.mk
include $(MAKETOPDIR)/depend.mk

18
src/user/config.in

@ -0,0 +1,18 @@
# This file eases the integration of your personal animations which are not
# meant to be included in the official Borgware-2D repository.
#
# Just add configurations options for your animations here as shown in the
# commented samples.
mainmenu_option next_comment
comment "User Animations"
comment "Insert config options for your own animations here!"
# bool "A simple anim" ANIMATION_MY_SIMPLE_ANIM $RANDOM_SUPPORT
# dep_bool_menu "A complex anim" ANIMATION_MY_COMPLEX_ANIM $RANDOM_SUPPORT
# int "Sample integer config value" MY_SAMPLE_INT 100
# bool "Sample boolean config value" MY_SAMPLE_BOOL y
# endmenu
endmenu

22
src/user/user_loop.c

@ -0,0 +1,22 @@
/* This file eases the integration of your personal animations which are not
meant to be included in the official Borgware-2D repository.
It is inserted at the middle of the big switch/case block of the
src/display_loop.c file. Please make sure that you use a mode number
200<=n<=252 to avoid conflicts with newer upstream animations.
Just add your case blocks (guarded by the config options you introduced in
config.in) as shown in the commented samples. */
// #ifdef ANIMATION_MY_SIMPLE_ANIM
// case 200:
// my_simple_animation();
// break;
// #endif
// #ifdef ANIMATION_MY_COMPLEX_ANIM
// case 201:
// my_complex_animation(MY_SAMPLE_INT, MY_SAMPLE_BOOL);
// break;
// #endif

16
src/user/user_loop.h

@ -0,0 +1,16 @@
#ifndef USER_LOOP_H_
#define USER_LOOP_H_
/* This file eases the integration of your personal animations which are not
meant to be included in the official Borgware-2D repository.
It is inserted at the beginning of the src/display_loop.c file.
Just add your header #include directives as shown in the commented
samples. */
// #include "my_simple_animation.h"
// #include "my_complex_animation.h"
#endif // USER_LOOP_H_
Loading…
Cancel
Save