This commit was manufactured by cvs2svn to create tag 'v1_4'.
git-svn-id: svn://svn.rockbox.org/rockbox/tags/v1_4@2573 a1c6a512-1295-4272-9138-f99709370657
|
|
@ -1,14 +0,0 @@
|
|||
# The "checkoutlist" file is used to support additional version controlled
|
||||
# administrative files in $CVSROOT/CVSROOT, such as template files.
|
||||
#
|
||||
# The first entry on a line is a filename which will be checked out from
|
||||
# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
|
||||
# The remainder of the line is an error message to use if the file cannot
|
||||
# be checked out.
|
||||
#
|
||||
# File format:
|
||||
#
|
||||
# [<whitespace>]<filename><whitespace><error message><end-of-line>
|
||||
#
|
||||
# comment lines begin with '#'
|
||||
syncmail
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
# The "commitinfo" file is used to control pre-commit checks.
|
||||
# The filter on the right is invoked with the repository and a list
|
||||
# of files to check. A non-zero exit of the filter program will
|
||||
# cause the commit to be aborted.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being committed to, relative
|
||||
# to the $CVSROOT. For the first match that is found, then the remainder
|
||||
# of the line is the name of the filter to run.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
# Set this to "no" if pserver shouldn't check system users/passwords
|
||||
#SystemAuth=no
|
||||
|
||||
# Set `PreservePermissions' to `yes' to save file status information
|
||||
# in the repository.
|
||||
#PreservePermissions=no
|
||||
|
||||
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
|
||||
# level of the new working directory when using the `cvs checkout'
|
||||
# command.
|
||||
#TopLevelAdmin=no
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
# This file affects handling of files based on their names.
|
||||
#
|
||||
# The -t/-f options allow one to treat directories of files
|
||||
# as a single file, or to transform a file in other ways on
|
||||
# its way in and out of CVS.
|
||||
#
|
||||
# The -m option specifies whether CVS attempts to merge files.
|
||||
#
|
||||
# The -k option specifies keyword expansion (e.g. -kb for binary).
|
||||
#
|
||||
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
|
||||
#
|
||||
# wildcard [option value][option value]...
|
||||
#
|
||||
# where option is one of
|
||||
# -f from cvs filter value: path to filter
|
||||
# -t to cvs filter value: path to filter
|
||||
# -m update methodology value: MERGE or COPY
|
||||
# -k expansion mode value: b, o, kkv, &c
|
||||
#
|
||||
# and value is a single-quote delimited value.
|
||||
# For example:
|
||||
#*.gif -k 'b'
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
# The "editinfo" file is used to allow verification of logging
|
||||
# information. It works best when a template (as specified in the
|
||||
# rcsinfo file) is provided for the logging procedure. Given a
|
||||
# template with locations for, a bug-id number, a list of people who
|
||||
# reviewed the code before it can be checked in, and an external
|
||||
# process to catalog the differences that were code reviewed, the
|
||||
# following test can be applied to the code:
|
||||
#
|
||||
# Making sure that the entered bug-id number is correct.
|
||||
# Validating that the code that was reviewed is indeed the code being
|
||||
# checked in (using the bug-id number or a seperate review
|
||||
# number to identify this particular code set.).
|
||||
#
|
||||
# If any of the above test failed, then the commit would be aborted.
|
||||
#
|
||||
# Actions such as mailing a copy of the report to each reviewer are
|
||||
# better handled by an entry in the loginfo file.
|
||||
#
|
||||
# One thing that should be noted is the the ALL keyword is not
|
||||
# supported. There can be only one entry that matches a given
|
||||
# repository.
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
# The "loginfo" file controls where "cvs commit" log information
|
||||
# is sent. The first entry on a line is a regular expression which must match
|
||||
# the directory that the change is being made to, relative to the
|
||||
# $CVSROOT. If a match is found, then the remainder of the line is a filter
|
||||
# program that should expect log information on its standard input.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name ALL appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or DEFAULT.
|
||||
#
|
||||
# You may specify a format string as part of the
|
||||
# filter. The string is composed of a `%' followed
|
||||
# by a single format character, or followed by a set of format
|
||||
# characters surrounded by `{' and `}' as separators. The format
|
||||
# characters are:
|
||||
#
|
||||
# s = file name
|
||||
# V = old version number (pre-checkin)
|
||||
# v = new version number (post-checkin)
|
||||
#
|
||||
# For example:
|
||||
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
|
||||
# or
|
||||
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
|
||||
CVSROOT $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} zagor@users.sourceforge.net
|
||||
^apps $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} rockbox-cvs@cool.haxx.se
|
||||
^firmware $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} rockbox-cvs@cool.haxx.se
|
||||
^docs $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} rockbox-cvs@cool.haxx.se
|
||||
^uisimulator $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} rockbox-cvs@cool.haxx.se
|
||||
^tools $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} rockbox-cvs@cool.haxx.se
|
||||
^gdb $CVSROOT/CVSROOT/syncmail -C4 -u %{sVv} rockbox-cvs@cool.haxx.se
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
# Three different line formats are valid:
|
||||
# key -a aliases...
|
||||
# key [options] directory
|
||||
# key [options] directory files...
|
||||
#
|
||||
# Where "options" are composed of:
|
||||
# -i prog Run "prog" on "cvs commit" from top-level of module.
|
||||
# -o prog Run "prog" on "cvs checkout" of module.
|
||||
# -e prog Run "prog" on "cvs export" of module.
|
||||
# -t prog Run "prog" on "cvs rtag" of module.
|
||||
# -u prog Run "prog" on "cvs update" of module.
|
||||
# -d dir Place module in directory "dir" instead of module name.
|
||||
# -l Top-level directory only -- do not recurse.
|
||||
#
|
||||
# NOTE: If you change any of the "Run" options above, you'll have to
|
||||
# release and re-checkout any working directories of these modules.
|
||||
#
|
||||
# And "directory" is a path to a directory relative to $CVSROOT.
|
||||
#
|
||||
# The "-a" option specifies an alias. An alias is interpreted as if
|
||||
# everything on the right of the "-a" had been typed on the command line.
|
||||
#
|
||||
# You can encode a module within a module by using the special '&'
|
||||
# character to interpose another module into the current module. This
|
||||
# can be useful for creating a module that consists of many directories
|
||||
# spread out over the entire source repository.
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
# The "notify" file controls where notifications from watches set by
|
||||
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
|
||||
# a regular expression which is tested against the directory that the
|
||||
# change is being made to, relative to the $CVSROOT. If it matches,
|
||||
# then the remainder of the line is a filter program that should contain
|
||||
# one occurrence of %s for the user to notify, and information on its
|
||||
# standard input.
|
||||
#
|
||||
# "ALL" or "DEFAULT" can be used in place of the regular expression.
|
||||
#
|
||||
# For example:
|
||||
#ALL mail %s -s "CVS notification"
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
# The "rcsinfo" file is used to control templates with which the editor
|
||||
# is invoked on commit and import.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being made to, relative to the
|
||||
# $CVSROOT. For the first match that is found, then the remainder of the
|
||||
# line is the name of the file that contains the template.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
210
CVSROOT/syncmail
|
|
@ -1,210 +0,0 @@
|
|||
#! /usr/bin/python
|
||||
# -*- Python -*-
|
||||
|
||||
"""Complicated notification for CVS checkins.
|
||||
|
||||
This script is used to provide email notifications of changes to the CVS
|
||||
repository. These email changes will include context diffs of the changes.
|
||||
Really big diffs will be trimmed.
|
||||
|
||||
This script is run from a CVS loginfo file (see $CVSROOT/CVSROOT/loginfo). To
|
||||
set this up, create a loginfo entry that looks something like this:
|
||||
|
||||
mymodule /path/to/this/script %%s some-email-addr@your.domain
|
||||
|
||||
In this example, whenever a checkin that matches `mymodule' is made, this
|
||||
script is invoked, which will generate the diff containing email, and send it
|
||||
to some-email-addr@your.domain.
|
||||
|
||||
Note: This module used to also do repository synchronizations via
|
||||
rsync-over-ssh, but since the repository has been moved to SourceForge,
|
||||
this is no longer necessary. The syncing functionality has been ripped
|
||||
out in the 3.0, which simplifies it considerably. Access the 2.x versions
|
||||
to refer to this functionality. Because of this, the script is misnamed.
|
||||
|
||||
It no longer makes sense to run this script from the command line. Doing so
|
||||
will only print out this usage information.
|
||||
|
||||
Usage:
|
||||
|
||||
%(PROGRAM)s [options] <%%S> email-addr [email-addr ...]
|
||||
|
||||
Where options is:
|
||||
|
||||
--cvsroot=<path>
|
||||
Use <path> as the environment variable CVSROOT. Otherwise this
|
||||
variable must exist in the environment.
|
||||
|
||||
--help
|
||||
-h
|
||||
Print this text.
|
||||
|
||||
--context=#
|
||||
-C #
|
||||
Include # lines of context around lines that differ (default: 2).
|
||||
|
||||
-c
|
||||
Produce a context diff (default).
|
||||
|
||||
-u
|
||||
Produce a unified diff (smaller, but harder to read).
|
||||
|
||||
<%%S>
|
||||
CVS %%s loginfo expansion. When invoked by CVS, this will be a single
|
||||
string containing the directory the checkin is being made in, relative
|
||||
to $CVSROOT, followed by the list of files that are changing. If the
|
||||
%%s in the loginfo file is %%{sVv}, context diffs for each of the
|
||||
modified files are included in any email messages that are generated.
|
||||
|
||||
email-addrs
|
||||
At least one email address.
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import string
|
||||
import time
|
||||
import getopt
|
||||
|
||||
# Notification command
|
||||
MAILCMD = '/bin/mail -s "cvs: %(SUBJECT)s" %(PEOPLE)s 2>&1 > /dev/null'
|
||||
|
||||
# Diff trimming stuff
|
||||
DIFF_HEAD_LINES = 20
|
||||
DIFF_TAIL_LINES = 20
|
||||
DIFF_TRUNCATE_IF_LARGER = 1000
|
||||
|
||||
PROGRAM = sys.argv[0]
|
||||
|
||||
|
||||
|
||||
def usage(code, msg=''):
|
||||
print __doc__ % globals()
|
||||
if msg:
|
||||
print msg
|
||||
sys.exit(code)
|
||||
|
||||
|
||||
|
||||
def calculate_diff(filespec, contextlines):
|
||||
try:
|
||||
file, oldrev, newrev = string.split(filespec, ',')
|
||||
except ValueError:
|
||||
# No diff to report
|
||||
return '***** Bogus filespec: %s' % filespec
|
||||
if oldrev == 'NONE':
|
||||
try:
|
||||
if os.path.exists(file):
|
||||
fp = open(file)
|
||||
else:
|
||||
update_cmd = 'cvs -fn update -r %s -p %s' % (newrev, file)
|
||||
fp = os.popen(update_cmd)
|
||||
lines = fp.readlines()
|
||||
fp.close()
|
||||
lines.insert(0, '--- NEW FILE: %s ---\n' % file)
|
||||
except IOError, e:
|
||||
lines = ['***** Error reading new file: ',
|
||||
str(e), '\n***** file: ', file, ' cwd: ', os.getcwd()]
|
||||
elif newrev == 'NONE':
|
||||
lines = ['--- %s DELETED ---\n' % file]
|
||||
else:
|
||||
# This /has/ to happen in the background, otherwise we'll run into CVS
|
||||
# lock contention. What a crock.
|
||||
if contextlines > 0:
|
||||
difftype = "-C " + str(contextlines)
|
||||
else:
|
||||
difftype = "-uN"
|
||||
diffcmd = '/usr/bin/cvs -f diff -kk %s -b -r %s -r %s %s' % (
|
||||
difftype, oldrev, newrev, file)
|
||||
fp = os.popen(diffcmd)
|
||||
lines = fp.readlines()
|
||||
sts = fp.close()
|
||||
# ignore the error code, it always seems to be 1 :(
|
||||
## if sts:
|
||||
## return 'Error code %d occurred during diff\n' % (sts >> 8)
|
||||
if len(lines) > DIFF_TRUNCATE_IF_LARGER:
|
||||
removedlines = len(lines) - DIFF_HEAD_LINES - DIFF_TAIL_LINES
|
||||
del lines[DIFF_HEAD_LINES:-DIFF_TAIL_LINES]
|
||||
lines.insert(DIFF_HEAD_LINES,
|
||||
'[...%d lines suppressed...]\n' % removedlines)
|
||||
return string.join(lines, '')
|
||||
|
||||
|
||||
|
||||
def blast_mail(mailcmd, filestodiff, contextlines):
|
||||
# cannot wait for child process or that will cause parent to retain cvs
|
||||
# lock for too long. Urg!
|
||||
if not os.fork():
|
||||
# in the child
|
||||
# give up the lock you cvs thang!
|
||||
time.sleep(2)
|
||||
fp = os.popen(mailcmd, 'w')
|
||||
fp.write(sys.stdin.read())
|
||||
fp.write('\n')
|
||||
# append the diffs if available
|
||||
for file in filestodiff:
|
||||
fp.write(calculate_diff(file, contextlines))
|
||||
fp.write('\n')
|
||||
fp.close()
|
||||
# doesn't matter what code we return, it isn't waited on
|
||||
os._exit(0)
|
||||
|
||||
|
||||
|
||||
# scan args for options
|
||||
def main():
|
||||
contextlines = 2
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'hC:cu',
|
||||
['context=', 'cvsroot=', 'help'])
|
||||
except getopt.error, msg:
|
||||
usage(1, msg)
|
||||
|
||||
# parse the options
|
||||
for opt, arg in opts:
|
||||
if opt in ('-h', '--help'):
|
||||
usage(0)
|
||||
elif opt == '--cvsroot':
|
||||
os.environ['CVSROOT'] = arg
|
||||
elif opt in ('-C', '--context'):
|
||||
contextlines = int(arg)
|
||||
elif opt == '-c':
|
||||
if contextlines <= 0:
|
||||
contextlines = 2
|
||||
elif opt == '-u':
|
||||
contextlines = 0
|
||||
|
||||
# What follows is the specification containing the files that were
|
||||
# modified. The argument actually must be split, with the first component
|
||||
# containing the directory the checkin is being made in, relative to
|
||||
# $CVSROOT, followed by the list of files that are changing.
|
||||
if not args:
|
||||
usage(1, 'No CVS module specified')
|
||||
SUBJECT = args[0]
|
||||
specs = string.split(args[0])
|
||||
del args[0]
|
||||
|
||||
# The remaining args should be the email addresses
|
||||
if not args:
|
||||
usage(1, 'No recipients specified')
|
||||
|
||||
# Now do the mail command
|
||||
PEOPLE = string.join(args)
|
||||
mailcmd = MAILCMD % vars()
|
||||
|
||||
print 'Mailing %s...' % PEOPLE
|
||||
if specs == ['-', 'Imported', 'sources']:
|
||||
return
|
||||
if specs[-3:] == ['-', 'New', 'directory']:
|
||||
del specs[-3:]
|
||||
print 'Generating notification message...'
|
||||
blast_mail(mailcmd, specs[1:], contextlines)
|
||||
print 'Generating notification message... done.'
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
sys.exit(0)
|
||||
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
# The "taginfo" file is used to control pre-tag checks.
|
||||
# The filter on the right is invoked with the following arguments:
|
||||
#
|
||||
# $1 -- tagname
|
||||
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
|
||||
# $3 -- repository
|
||||
# $4-> file revision [file revision ...]
|
||||
#
|
||||
# A non-zero exit of the filter program will cause the tag to be aborted.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being committed to, relative
|
||||
# to the $CVSROOT. For the first match that is found, then the remainder
|
||||
# of the line is the name of the filter to run.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
# The "verifymsg" file is used to allow verification of logging
|
||||
# information. It works best when a template (as specified in the
|
||||
# rcsinfo file) is provided for the logging procedure. Given a
|
||||
# template with locations for, a bug-id number, a list of people who
|
||||
# reviewed the code before it can be checked in, and an external
|
||||
# process to catalog the differences that were code reviewed, the
|
||||
# following test can be applied to the code:
|
||||
#
|
||||
# Making sure that the entered bug-id number is correct.
|
||||
# Validating that the code that was reviewed is indeed the code being
|
||||
# checked in (using the bug-id number or a seperate review
|
||||
# number to identify this particular code set.).
|
||||
#
|
||||
# If any of the above test failed, then the commit would be aborted.
|
||||
#
|
||||
# Actions such as mailing a copy of the report to each reviewer are
|
||||
# better handled by an entry in the loginfo file.
|
||||
#
|
||||
# One thing that should be noted is the the ALL keyword is not
|
||||
# supported. There can be only one entry that matches a given
|
||||
# repository.
|
||||
|
|
@ -53,17 +53,17 @@ new:
|
|||
|
||||
id: LANG_ROCKBOX_INFO
|
||||
desc: displayed topmost on the info screen
|
||||
eng: "Rockbox info:"
|
||||
eng: "Rockbox Info:"
|
||||
new:
|
||||
|
||||
id: LANG_BUFFER_STAT_PLAYER
|
||||
desc: the buffer size player-screen width, %d MB %d fraction of MB
|
||||
eng: "Buf: %d.%02dMb"
|
||||
eng: "Buf: %d.%02dMB"
|
||||
new:
|
||||
|
||||
id: LANG_BUFFER_STAT_RECORDER
|
||||
desc: the buffer size recorder-screen width, %d MB %d fraction of MB
|
||||
eng: "Buffer: %d.%02dMb"
|
||||
eng: "Buffer: %d.%02dMB"
|
||||
new:
|
||||
|
||||
id: LANG_BATTERY_LEVEL_PLAYER
|
||||
|
|
@ -198,7 +198,7 @@ new:
|
|||
|
||||
id: LANG_PLAY_SELECTED
|
||||
desc: in settings_menu
|
||||
eng: "Play selected first"
|
||||
eng: "Play Selected First"
|
||||
new:
|
||||
|
||||
id: LANG_MP3FILTER
|
||||
|
|
@ -246,7 +246,7 @@ new:
|
|||
|
||||
id: LANG_DISCHARGE
|
||||
desc: in settings_menu
|
||||
eng: "Deep discharge"
|
||||
eng: "Deep Discharge"
|
||||
new:
|
||||
|
||||
id: LANG_TIME
|
||||
|
|
@ -291,7 +291,7 @@ new:
|
|||
|
||||
id: LANG_RESET_CONFIRM_RECORDER
|
||||
desc: confirm to reset settings
|
||||
eng: "Play = Yes"
|
||||
eng: "PLAY = Yes"
|
||||
new:
|
||||
|
||||
id: LANG_RESET_CANCEL_RECORDER
|
||||
|
|
@ -381,7 +381,7 @@ new:
|
|||
|
||||
id: LANG_DECAY
|
||||
desc: in sound_settings
|
||||
eng: "AV decay time"
|
||||
eng: "AV Decay Time"
|
||||
new:
|
||||
|
||||
id: LANG_CHANNEL_MENU
|
||||
|
|
@ -391,7 +391,7 @@ new:
|
|||
|
||||
id: LANG_CHANNEL
|
||||
desc: in sound_settings
|
||||
eng: "Channel configuration"
|
||||
eng: "Channel Configuration"
|
||||
new:
|
||||
|
||||
id: LANG_CHANNEL_STEREO
|
||||
|
|
@ -441,7 +441,7 @@ new:
|
|||
|
||||
id: LANG_RESUME_CONFIRM_RECORDER
|
||||
desc: posible answer to resume question
|
||||
eng: "Play = Yes"
|
||||
eng: "PLAY = Yes"
|
||||
new:
|
||||
|
||||
id: LANG_RESUME_CANCEL_RECORDER
|
||||
|
|
@ -476,7 +476,7 @@ new:
|
|||
|
||||
id: LANG_MUTE_OFF_PLAYER
|
||||
desc: displayed when mute is off
|
||||
eng: "MUTE OFF"
|
||||
eng: "Mute OFF"
|
||||
new:
|
||||
|
||||
id: LANG_MUTE_ON_RECORDER
|
||||
|
|
@ -561,7 +561,7 @@ new:
|
|||
|
||||
id: LANG_ID3_PATH
|
||||
desc: in wps
|
||||
eng: "[PATH]"
|
||||
eng: "[Path]"
|
||||
new:
|
||||
|
||||
id: LANG_PITCH_UP
|
||||
|
|
@ -626,7 +626,7 @@ new:
|
|||
|
||||
id: LANG_SNAKE_SCORE
|
||||
desc: when you die in snake game
|
||||
eng: "Your score :"
|
||||
eng: "Your score:"
|
||||
new:
|
||||
|
||||
id: LANG_SNAKE_HISCORE
|
||||
|
|
@ -646,12 +646,12 @@ new:
|
|||
|
||||
id: LANG_SNAKE_RESUME
|
||||
desc: what to do to resume game
|
||||
eng: "[Play] to resume"
|
||||
eng: "[PLAY] to resume"
|
||||
new:
|
||||
|
||||
id: LANG_SNAKE_QUIT
|
||||
desc: how to quit game
|
||||
eng: "[Off] to quit"
|
||||
eng: "[OFF] to quit"
|
||||
new:
|
||||
|
||||
id: LANG_SNAKE_LEVEL
|
||||
|
|
@ -666,7 +666,7 @@ new:
|
|||
|
||||
id: LANG_SNAKE_START
|
||||
desc: how to start or pause the game
|
||||
eng: "[Play] to start/pause"
|
||||
eng: "[PLAY] to start/pause"
|
||||
new:
|
||||
|
||||
id: LANG_SOKOBAN_LEVEL
|
||||
|
|
@ -686,7 +686,7 @@ new:
|
|||
|
||||
id: LANG_SOKOBAN_QUIT
|
||||
desc: how to quit game
|
||||
eng: "[Off] to stop"
|
||||
eng: "[OFF] to stop"
|
||||
new:
|
||||
|
||||
id: LANG_SOKOBAN_F1
|
||||
|
|
@ -750,12 +750,12 @@ new:
|
|||
|
||||
id: LANG_WORMLET_PLAYERS
|
||||
desc: wormlet game
|
||||
eng: "%d Players up/dn"
|
||||
eng: "%d Players UP/DN"
|
||||
new:
|
||||
|
||||
id: LANG_WORMLET_WORMS
|
||||
desc: wormlet game
|
||||
eng: "%d Worms l/r"
|
||||
eng: "%d Worms L/R"
|
||||
new:
|
||||
|
||||
id: LANG_WORMLET_REMOTE_CTRL
|
||||
|
|
@ -807,7 +807,7 @@ new:
|
|||
|
||||
id: LANG_FILTER
|
||||
desc: setting name for dir filter
|
||||
eng: "Show files"
|
||||
eng: "Show Files"
|
||||
new:
|
||||
|
||||
id: LANG_FILTER_MUSIC
|
||||
|
|
@ -837,37 +837,37 @@ new:
|
|||
|
||||
id: LANG_PM_MENU
|
||||
desc: in the display menu
|
||||
eng: "Peak meter"
|
||||
eng: "Peak Meter"
|
||||
new:
|
||||
|
||||
id: LANG_PM_RELEASE
|
||||
desc: in the peak meter menu
|
||||
eng: "Peak release"
|
||||
eng: "Peak Release"
|
||||
new:
|
||||
|
||||
id: LANG_PM_PEAK_HOLD
|
||||
desc: in the peak meter menu
|
||||
eng: "Peak hold time"
|
||||
eng: "Peak Hold Time"
|
||||
new:
|
||||
|
||||
id: LANG_PM_CLIP_HOLD
|
||||
desc: in the peak meter menu
|
||||
eng: "Clip hold time"
|
||||
eng: "Clip Hold Time"
|
||||
new:
|
||||
|
||||
id: LANG_PM_ETERNAL
|
||||
desc: in the peak meter menu
|
||||
eng: "eternal"
|
||||
eng: "Eternal"
|
||||
new:
|
||||
|
||||
id: LANG_PM_UNITS_PER_READ
|
||||
desc: in the peak meter menu
|
||||
eng: "Units per read"
|
||||
eng: "Units Per Read"
|
||||
new:
|
||||
|
||||
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
|
||||
desc: in display_settings_menu
|
||||
eng: "Backlight on when charging"
|
||||
eng: "Backlight On When Plugged"
|
||||
new:
|
||||
|
||||
id: LANG_REPEAT
|
||||
|
|
|
|||
|
|
@ -597,18 +597,18 @@ new: "Einde van de lijst"
|
|||
|
||||
id: LANG_END_CONFIRM_PLAYER
|
||||
desc: when playlist has finished
|
||||
eng: "<Press ON>"
|
||||
new: "<Kies ON>"
|
||||
eng: ""
|
||||
new: ""
|
||||
|
||||
id: LANG_END_PLAYLIST_RECORDER
|
||||
desc: when playlist has finished
|
||||
eng: "<End of song list>"
|
||||
new: "<Einde van liedjeslijst>"
|
||||
eng: "End of song list"
|
||||
new: "Einde van de titellijst"
|
||||
|
||||
id: LANG_END_CONFIRM_RECORDER
|
||||
desc: when playlist has finished
|
||||
eng: "Press ON"
|
||||
new: "Kies ON"
|
||||
eng: ""
|
||||
new: ""
|
||||
|
||||
id: LANG_SNAKE_SCORE
|
||||
desc: when you die in snake game
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ BATTERY-FAQ
|
|||
CONTRIBUTING
|
||||
COPYING
|
||||
CREDITS
|
||||
CUSTOM_EQ_FORMAT
|
||||
CUSTOM_CFG_FORMAT
|
||||
CUSTOM_WPS_FORMAT
|
||||
FAQ
|
||||
FILES
|
||||
|
|
|
|||
|
|
@ -15,3 +15,4 @@ drivers/*.[ch]
|
|||
include/*.h
|
||||
include/sys/*.h
|
||||
win32.mak
|
||||
fonts/*.bdf
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
Makefile
|
||||
linker.cfg
|
||||
*.[chs]
|
||||
30
gdb/Makefile
|
|
@ -1,30 +0,0 @@
|
|||
# __________ __ ___.
|
||||
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
# \/ \/ \/ \/ \/
|
||||
# $Id$
|
||||
#
|
||||
TARGET = stub
|
||||
OBJS = start.o sh-stub.o
|
||||
LIBS = -lgcc
|
||||
|
||||
.s.o:
|
||||
sh-elf-as -o $@ $<
|
||||
|
||||
.c.o:
|
||||
sh-elf-gcc -O -I../firmware/drivers -m1 -Wall -Wstrict-prototypes -c -o $@ $<
|
||||
|
||||
archos.mod: $(TARGET).elf
|
||||
sh-elf-objcopy -O binary $(TARGET).elf $(TARGET).out
|
||||
../tools/scramble $(TARGET).out archos.mod
|
||||
|
||||
$(TARGET).elf: $(OBJS)
|
||||
sh-elf-gcc -nostartfiles $(OBJS) -lgcc -Wl,-Map,$(TARGET).map -o $(TARGET).elf -Tlinker.cfg
|
||||
|
||||
clean:
|
||||
rm $(OBJS) $(TARGET).map $(TARGET).elf $(TARGET).out archos.mod
|
||||
|
||||
start.o: start.s
|
||||
sh-stub.o: sh-stub.c
|
||||
80
gdb/README
|
|
@ -1,80 +0,0 @@
|
|||
--------------------------------------------------------------------
|
||||
__________ __ ___.
|
||||
Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
\/ \/ \/ \/ \/
|
||||
$Id$
|
||||
|
||||
Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Debugging the Archos Jukebox
|
||||
----------------------------
|
||||
|
||||
To debug using the serial port on the Jukebox, you need to do the following:
|
||||
|
||||
1) Connect the serial port to the PC. This is best done with the "serial
|
||||
port mod" described on the home page, along with a serial port converter
|
||||
for the 3V signals from the Jukebox.
|
||||
|
||||
2) Build or download a GDB SH1 cross debugger
|
||||
|
||||
3) Compile the GDB stub from the CVS "gdb" archive
|
||||
|
||||
4) Copy the newly built ARCHOS.MOD to the Jukebox.
|
||||
|
||||
5) Start the Jukebox and fire up the GDB with the elf file you want to debug
|
||||
as an argument along with the baud rate:
|
||||
|
||||
# sh-elf-gdb -b 38400 test.elf
|
||||
|
||||
6) In GDB, type:
|
||||
|
||||
(gdb) target remote /dev/ttyS0
|
||||
|
||||
/dev/ttyS0 is the serial port you want to use. I guess Windows users
|
||||
would type COM1 or something like that.
|
||||
|
||||
GDB should answer with a message like:
|
||||
|
||||
Remote debugging using /dev/ttyS0
|
||||
0x090014b6 in ?? ()
|
||||
(gdb)
|
||||
|
||||
7) Load the code from the elf file you specified on the command line:
|
||||
|
||||
(gdb) load
|
||||
|
||||
GDB should answer like this:
|
||||
|
||||
Loading section .text, size 0x6b00 lma 0x9018000
|
||||
Loading section .data, size 0x738 lma 0x901eb00
|
||||
Start address 0x9018290, load size 29240
|
||||
Transfer rate: 11696 bits/sec, 102 bytes/write.
|
||||
(gdb)
|
||||
|
||||
8) You're set. Now try to set a breakpoint and run:
|
||||
|
||||
(gdb) b 22
|
||||
Breakpoint 1 at 0x90182c6: file led.c, line 14.
|
||||
(gdb) c
|
||||
Continuing.
|
||||
|
||||
Breakpoint 2, main () at led.c:15
|
||||
15 SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER);
|
||||
(gdb)
|
||||
|
||||
Good luck!
|
||||
|
||||
|
||||
Technical details:
|
||||
|
||||
As for now, the GDB stub occupies the memory from 0x900000 up to
|
||||
0x9018000. This will change.
|
||||
|
||||
Compile and link your test program at 0x9018000 and up, and it will work.
|
||||
|
||||
The baud rate is 38400, and the settings are 8N1.
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
ENTRY(_start)
|
||||
OUTPUT_FORMAT(elf32-sh)
|
||||
SECTIONS
|
||||
{
|
||||
.vectors 0x09000000 :
|
||||
{
|
||||
*(.vectors);
|
||||
. = ALIGN(0x200);
|
||||
start.o(.text)
|
||||
*(.rodata)
|
||||
}
|
||||
|
||||
.text :
|
||||
{
|
||||
*(.text)
|
||||
}
|
||||
|
||||
.bss :
|
||||
{
|
||||
_stack = . + 0x1000;
|
||||
_stub_stack = _stack + 0x1000;
|
||||
}
|
||||
|
||||
.pad 0x0900C800 :
|
||||
{
|
||||
LONG(0);
|
||||
}
|
||||
}
|
||||
1577
gdb/sh-stub.c
41
gdb/start.s
|
|
@ -1,41 +0,0 @@
|
|||
!***************************************************************************
|
||||
! __________ __ ___.
|
||||
! Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
! Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
! Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
! Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
! \/ \/ \/ \/ \/
|
||||
! $Id$
|
||||
!
|
||||
! Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
!
|
||||
! All files in this archive are subject to the GNU General Public License.
|
||||
! See the file COPYING in the source tree root for full license agreement.
|
||||
!
|
||||
! This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
! KIND, either express or implied.
|
||||
!
|
||||
!***************************************************************************
|
||||
! note: sh-1 has a "delay cycle" after every branch where you can
|
||||
! execute another instruction "for free".
|
||||
|
||||
.file "start.s"
|
||||
.section .text
|
||||
.extern _INIT
|
||||
.extern _vectable
|
||||
.extern _stack
|
||||
.global _start
|
||||
.align 2
|
||||
|
||||
_start:
|
||||
mov.l 1f, r1
|
||||
mov.l 3f, r3
|
||||
mov.l 2f, r15
|
||||
jmp @r3
|
||||
ldc r1, vbr
|
||||
nop
|
||||
|
||||
1: .long _vectable
|
||||
2: .long _stack
|
||||
3: .long _INIT
|
||||
.type _start,@function
|
||||
39
www/Makefile
|
|
@ -1,39 +0,0 @@
|
|||
ACTION=@echo preprocessing $@; rm -f $@; $(HOME)/bin/fcpp -WWW -Uunix -H -C -V -LL >$@
|
||||
|
||||
SRC := $(wildcard *.t)
|
||||
SOBJS := daily.shtml main.shtml index.shtml status.shtml \
|
||||
bugs.shtml requests.shtml
|
||||
OBJS := $(SRC:%.t=%.html) $(SOBJS)
|
||||
|
||||
.SUFFIXES: .t .html
|
||||
|
||||
%.html : %.t
|
||||
$(ACTION) $<
|
||||
|
||||
%.shtml : %.t
|
||||
$(ACTION) $<
|
||||
|
||||
all: $(OBJS)
|
||||
@(cd schematics; $(MAKE))
|
||||
@(cd docs; $(MAKE))
|
||||
@(cd mods; $(MAKE))
|
||||
@(cd internals; $(MAKE))
|
||||
@(cd irc; $(MAKE))
|
||||
@(cd devcon; $(MAKE))
|
||||
@(cd sh-win; $(MAKE))
|
||||
@(cd download; $(MAKE))
|
||||
@(cd manual; $(MAKE))
|
||||
@(cd manual-1.2; $(MAKE))
|
||||
@(cd tshirt-contest; $(MAKE))
|
||||
|
||||
main.html: main.t activity.html
|
||||
|
||||
main.shtml: main.t activity.html
|
||||
|
||||
index.shtml: main.shtml
|
||||
ln -s main.shtml index.shtml
|
||||
|
||||
daily.shtml: daily.t
|
||||
|
||||
clean:
|
||||
find . -name "*html" | xargs rm
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
#define YELLOW "#ffffa3"
|
||||
#define GREEN "#80db72"
|
||||
#define RED "#ffadad"
|
||||
|
||||
#define STATUS(_col_,_mod_,_file_,_href_,_person_,_status_) \
|
||||
<tr bgcolor=_col_><td>_mod_</td><td><a href=_href_>_file_</a></td><td>_person_</td><td>_status_</td></tr>
|
||||
|
||||
<table align="right">
|
||||
<tr><th colspan=2>Color codes:</th></tr>
|
||||
<tr><td bgcolor=GREEN> </td><td> Working code exists</td></tr>
|
||||
<tr><td bgcolor=YELLOW> </td><td> Development in progress</td></tr>
|
||||
<tr><td bgcolor=RED> </td><td> Undermanned. Help needed.</td></tr>
|
||||
</table>
|
||||
|
||||
<table cellspacing=0 cellpadding=2 border=1>
|
||||
<tr bgcolor="#cccccc"><th>Module</th><th>File(s) in CVS</h><th>Current person</th><th>Status</th></tr><tr>
|
||||
STATUS(GREEN,I<sup><small>2</small></sup>C driver,firmware/drivers/i2c.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/i2c.c", Linus,Works)
|
||||
STATUS(GREEN,LED driver,firmware/drivers/led.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/led.c",Björn,Works)
|
||||
STATUS(GREEN,GDB stub,gdb/,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/gdb/", Linus,Works)
|
||||
STATUS(GREEN,List,firmware/common/list.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/common/lists.c", Linus,Works)
|
||||
STATUS(GREEN,ID3 parser,firmware/i3d.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/id3.c", Daniel,Works)
|
||||
STATUS(GREEN,FAQ,www/docs/FAQ,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/www/docs/FAQ",Rob,Existing)
|
||||
STATUS(GREEN,Fat32 filesystem,firmware/drivers/fat.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/fat.c", Björn,Works)
|
||||
STATUS(GREEN,Tetris,apps/tetris.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/apps/tetris.c", , Works)
|
||||
STATUS(GREEN,MAS driver,firmware/drivers/mas.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/mas.c", Linus,Works)
|
||||
STATUS(GREEN,ATA driver,firmware/drivers/ata.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/ata.c", Björn,Works)
|
||||
STATUS(GREEN,Scheduler,firmware/thread.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/thread.c", Linus,Works)
|
||||
STATUS(GREEN,X11 simulator,uisimulator/x11, "http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/uisimulator/x11/", Daniel,Works)
|
||||
STATUS(GREEN,Win32 simulator,uisimulator/win32/,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/uisimulator/win32/", Felix,Works)
|
||||
STATUS(GREEN,API docs,firmware/API,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/API", ,First version)
|
||||
STATUS(GREEN,Key handling,firmware/drivers/button.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/button.c",Björn,Works)
|
||||
STATUS(GREEN,CPU setup,firmware/system.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/system.c", Linus,Works)
|
||||
STATUS(GREEN,Directory browser UI,apps/tree.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/apps/tree.c", Daniel,Works)
|
||||
STATUS(GREEN,LCD driver,firmware/drivers/lcd.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/drivers/lcd.c", Björn,Works)
|
||||
STATUS(GREEN,Mpeg thread,firmware/mpeg.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/mpeg.c",Linus, Works)
|
||||
STATUS(YELLOW,Playlist handling,firmware/playlist.c,"http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/playlist.c", Wavey, Progressing)
|
||||
#if 0
|
||||
STATUS(RED,Boot loader (rolo), ,"", ,Planned)
|
||||
STATUS(RED,New DSP algorithms, ,"", ,We need help!)
|
||||
#endif
|
||||
</tr></table>
|
||||
<i><small>Updated __DATE__</small></i>
|
||||
27
www/bugs.t
|
|
@ -1,27 +0,0 @@
|
|||
#define _PAGE_ Open bug reports
|
||||
#include "head.t"
|
||||
|
||||
<!--#include file="bugs.txt" -->
|
||||
|
||||
<h2>Submitting new bug reports</h2>
|
||||
|
||||
<a name="rules">
|
||||
<h3>Rules for bug reporting:</h3>
|
||||
|
||||
<ol>
|
||||
<li> Don't file bug reports on unreleased code (CVS/daily builds). Write a mail to the <a href="/mail/">mailing list</a> instead.
|
||||
<li> Check that the bug hasn't already been reported
|
||||
<li> Always include the following information in your bug report:
|
||||
<ul>
|
||||
<li> Which exact model Archos you have (as printed on the unit)
|
||||
<li> Which exact ROM firmware version you have
|
||||
<li> Which exact Rockbox version you are using
|
||||
<li> A link to the data that malfunctions, if applicable (IMPORTANT!)
|
||||
</ul>
|
||||
<li>If you have a Sourceforge account, log in before you file the report.
|
||||
<li>If you don't have a SF account, sign the report with your email.
|
||||
</ol>
|
||||
|
||||
<p><a href="http://sourceforge.net/tracker/?func=add&group_id=44306&atid=439118">Click here to submit a new bug report</a>.
|
||||
|
||||
#include "foot.t"
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
105
www/cross-gcc.t
|
|
@ -1,105 +0,0 @@
|
|||
#define _PAGE_ Building the SH1 cross compiler
|
||||
#include "head.t"
|
||||
|
||||
<p>
|
||||
In this example I will assume that you are running Linux with the bash shell.
|
||||
We will only build the C compiler along with the assembler, linker and stuff.
|
||||
Note that the procedure is exactly the same if you are running cygwin on Windows.
|
||||
|
||||
<h2>Download the source code</h2>
|
||||
<p>
|
||||
You will need the following archives:
|
||||
<ul>
|
||||
<li>binutils-2.11.tar.gz (find it at your closest GNU FTP site)
|
||||
<li>gcc-3.0.4.tar.gz (find it at your closest GNU FTP site)
|
||||
<li>(optional) gdb-5.1.1.tar.gz (find it at your closest GNU FTP site)
|
||||
</ul>
|
||||
<p>
|
||||
If you want to stay out of trouble, use the versions stated above. If you
|
||||
want to live on the edge you can try building with the latest versions.
|
||||
However, if you use binutils-2.13 or later you will not be able to build
|
||||
Rockbox older that CVS 2002-09-08 if you don't add the .rodata.str1.4
|
||||
section to the .rodata section in the linker script:
|
||||
|
||||
<pre>
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
<b> *(.rodata.str1.4)</b>
|
||||
} > DRAM
|
||||
</pre>
|
||||
|
||||
<h2>Unpack the archives</h2>
|
||||
<p>
|
||||
<pre>
|
||||
/home/linus> tar zxf binutils-2.11.tar.gz
|
||||
/home/linus> tar zxf gcc-3.0.4.tar.gz
|
||||
/home/linus> tar zxf gdb-5.1.1.tar.gz
|
||||
</pre>
|
||||
|
||||
<h2>Create the directory tree</h2>
|
||||
<p>
|
||||
<pre>
|
||||
/home/linus> mkdir build
|
||||
/home/linus> cd build
|
||||
/home/linus/build> mkdir binutils
|
||||
/home/linus/build> mkdir gcc
|
||||
/home/linus/build> mkdir gdb
|
||||
</pre>
|
||||
|
||||
<h2>Choose location</h2>
|
||||
<p>
|
||||
Now is the time to decide where you want the tools to be installed. This is
|
||||
the directory where all binaries, libraries, man pages and stuff end up when
|
||||
you do "make install".
|
||||
<p>
|
||||
In this example I have chosen "/home/linus/sh1" as my installation directory, or <i>prefix</i> as it is called. Feel free to use any prefix, like
|
||||
/usr/local/sh1 for example.
|
||||
|
||||
<h2>Build binutils</h2>
|
||||
<p>
|
||||
We will start with building the binutils (the assembler, linker and stuff).
|
||||
This is pretty straightforward. We will be installing the whole tool chain
|
||||
in the /home/linus/sh1 directory.
|
||||
<pre>
|
||||
/home/linus> cd build/binutils
|
||||
/home/linus/build/binutils> ../../binutils-2.11/configure --target=sh-elf --prefix=/home/linus/sh1
|
||||
/home/linus/build/binutils> make
|
||||
/home/linus/build/binutils> make install
|
||||
</pre>
|
||||
|
||||
<h2>Build GCC</h2>
|
||||
<p>
|
||||
Now you are ready to build GCC. To do this, you must have the newly built
|
||||
binutils in the PATH.
|
||||
<pre>
|
||||
/home/linus> export PATH=/home/linus/sh1/bin:$PATH
|
||||
/home/linus> cd build/gcc
|
||||
/home/linus/gcc> ../../gcc-3.0.4/configure --target=sh-elf --prefix=/home/linus/sh1 --enable-languages=c
|
||||
/home/linus/build/gcc> make
|
||||
/home/linus/build/gcc> make install
|
||||
</pre>
|
||||
|
||||
<h2>Build GDB</h2>
|
||||
<p>
|
||||
If you are planning to debug your code with GDB, you have to build it as well.
|
||||
<pre>
|
||||
/home/linus> export PATH=/home/linus/sh1/bin:$PATH
|
||||
/home/linus> cd build/gdb
|
||||
/home/linus/gdb> ../../gdb-5.1.1/configure --target=sh-elf --prefix=/home/linus/sh1
|
||||
/home/linus/build/gdb> make
|
||||
/home/linus/build/gdb> make install
|
||||
</pre>
|
||||
|
||||
<h2>Done</h2>
|
||||
<p>
|
||||
If someone up there likes you, you now have a working tool chain for SH1.
|
||||
To compile a file with gcc:
|
||||
<pre>
|
||||
/home/linus> sh-elf-gcc -c main.o main.c
|
||||
</pre>
|
||||
Good luck!
|
||||
<p>
|
||||
<i>Linus</i>
|
||||
|
||||
#include "foot.t"
|
||||
148
www/cvs.t
|
|
@ -1,148 +0,0 @@
|
|||
#define _PAGE_ Accessing source code via CVS
|
||||
#include "head.t"
|
||||
|
||||
<h2>Browsing the repositry</h2>
|
||||
|
||||
<p>Just go <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/">here</a>.
|
||||
|
||||
<h2>Daily snapshots</h2>
|
||||
|
||||
<p>Every night at 6am CET, we build a source tarball and target .mod files from the latest CVS code.
|
||||
<a href="daily.shtml">Get them here</a>.
|
||||
|
||||
<h2>Downloading (checking out) the source</h2>
|
||||
|
||||
<p>You, obviously, need to have <a href="http://www.cvshome.org">CVS</a> installed to do this.
|
||||
|
||||
<p>The examples below use the 'firmware' module, since that's what most people are interested in. Here is a complete list of the available modules:
|
||||
|
||||
<ul>
|
||||
<li>apps - the source code to the applications
|
||||
<li>firmware - the source code to the firmware library
|
||||
<li>gdb - the gdb stub to use for remote debugging
|
||||
<li>tools - tools for building the firmware
|
||||
<li>uisimulator - a user interface simulator for X11
|
||||
<li>www - the web page
|
||||
</ul>
|
||||
|
||||
<h3>Anonymous read-only checkout</h3>
|
||||
|
||||
<p>If you are not a registered developer, use this method.
|
||||
When asked for a password, just press enter:
|
||||
|
||||
<p><tt>cvs -d:pserver:anonymous@cvs.rockbox.sourceforge.net:/cvsroot/rockbox login
|
||||
<br>cvs -z3 -d:pserver:anonymous@cvs.rockbox.sourceforge.net:/cvsroot/rockbox co firmware</tt>
|
||||
|
||||
<p>A "firmware" directory will be created in your current directory, and all the source files go there.
|
||||
|
||||
<h3>Checkout for developers</h3>
|
||||
|
||||
<p>For this, you need to:
|
||||
|
||||
<ol>
|
||||
<li> Have <a href="http://www.openssh.com">SSH</a> installed.
|
||||
<li> Have a <a href="http://sourceforge.net/account/register.php">SourceForge account</a>
|
||||
<li> Be a
|
||||
<a href="http://sourceforge.net/project/memberlist.php?group_id=44306">registered developer</a>
|
||||
of the Rockbox project
|
||||
<li> Log on to your cvs server account once: <tt>ssh <b>username</b>@cvs.rockbox.sourceforge.net</tt> <br>It will disconnect you immediately, but now your account is set up.
|
||||
</ol>
|
||||
|
||||
<p>Then run:
|
||||
|
||||
<p><tt>export CVS_RSH=ssh
|
||||
<br>cvs -z3 -d:ext:<b>username</b>@cvs.rockbox.sourceforge.net:/cvsroot/rockbox co firmware</tt>
|
||||
|
||||
<p>If you are using WinCVS, the procedure is
|
||||
<a href="http://www.wincvs.org/ssh.html">somewhat different</a>.
|
||||
|
||||
<h2>Checking in modifications</h2>
|
||||
|
||||
<p>CVS is a "no-reserve" version control system. This means that you work on your local files without first reserving them. Any conflicts with other developers are detected when you check-in, or "commit" as it's called in CVS:
|
||||
|
||||
<p><tt>cvs commit <b>filename</b></tt>
|
||||
|
||||
<p>This will start an editor and ask you to describe the changes you've made. If you want, you can use the -m command line option to specify the comment right there:
|
||||
|
||||
<p><tt>cvs commit -m "This is my change comment" <b>filename</b></tt>
|
||||
|
||||
<p><strong>Note:</strong> Before checking in modifications, test-build all targets (player, player-old, recorder, player-sim, recorder-sim) to make sure your changes don't break anything.
|
||||
|
||||
<h2>Updating your repository</h2>
|
||||
|
||||
<p>Since several people commit to the repository, you will need to periodically
|
||||
synchronize your local files with the changes made by others.
|
||||
This operation is called "update":
|
||||
|
||||
<p><tt>cvs update -dP</tt>
|
||||
|
||||
<p>The <b>-d</b> switch tells update to create any new directories that have been created the repository since last update.
|
||||
<br>The <b>-P</b> switch tells update to delete files that have been removed in the repository.
|
||||
|
||||
<h2>Adding a new file</h2>
|
||||
|
||||
<p>Adding a file is very simple:
|
||||
|
||||
<p><tt>cvs add <b>filename</b></tt>
|
||||
|
||||
<p>If you are adding a binary file, you need to specify the -kb flag:
|
||||
|
||||
<p><tt>cvs add -kb <b>filename</b></tt>
|
||||
|
||||
<p>These changes, like any other change, has to be committed before they will be visible on the server.
|
||||
|
||||
<h2>Querying the status of your files</h2>
|
||||
|
||||
<p>Sometimes it is interesting to get a list of the status of your files versus
|
||||
those on the remote repository. This is called "status":
|
||||
|
||||
<p><tt>cvs status</tt>
|
||||
|
||||
<p>The output from "status" can be rather verbose. You may want to filter it with grep:
|
||||
|
||||
<p><tt>cvs status | grep Status</tt>
|
||||
|
||||
<p>To only list files who differ from the server, filter again:
|
||||
|
||||
<p><tt>cvs status | grep Status | grep -v Up-to-date</tt>
|
||||
|
||||
<h2>Producing a diff of your changes</h2>
|
||||
|
||||
<p>If you want to see how your local files differ from the CVS repository,
|
||||
you can ask CVS to show you:
|
||||
|
||||
<p><tt>cvs diff -u [files(s)]</tt>
|
||||
|
||||
<p>The <tt>-u</tt> selects the "unified" diff format, which is preferrable
|
||||
when working with source code.
|
||||
|
||||
<h2>What Happens in the Repository?</h2>
|
||||
<p>
|
||||
Subscribe to the rockbox-cvs list to get mails sent to you for every commit
|
||||
done to the repostory.
|
||||
<p>
|
||||
To join this list, send a mail to majordomo@cool.haxx.se, with the following
|
||||
text in the body (no subject) "subscribe rockbox-cvs".
|
||||
<p>
|
||||
<b>Note</b> that this may cause quite a few mails to get sent during periods
|
||||
of intense development.
|
||||
|
||||
<h2>Getting rid of the password prompts</h2>
|
||||
|
||||
<p>Each cvs operation has to be authenticated with ssh. This is normally done
|
||||
by you entering your password. This gets boring fast.
|
||||
Instead, you can register your public ssh key with your SourceForge account. This way, your connection is authenticated automatically.
|
||||
|
||||
<p><a href="http://sourceforge.net/account/login.php">Log in</a>
|
||||
to your SourceForge account and go to your
|
||||
<a href="https://sourceforge.net/account/">account options</a>.
|
||||
On the bottom of the page, there is a link to
|
||||
<a href="https://sourceforge.net/account/editsshkeys.php">edit your ssh keys</a>.
|
||||
Copy the contents of your local <tt>.ssh/identity.pub</tt> or
|
||||
<tt>.ssh/id_rsa.pub</tt> there.
|
||||
|
||||
<p>Like many things on SourceForge, the key change doesn't take effect immediately. You'll have to wait a few hours until some magic batch job kicks in and puts your keys where they should be. Then you can use cvs without entering your password.
|
||||
|
||||
<p>If you work from several different computers/accounts, you must add the key for each account you are using.
|
||||
|
||||
#include "foot.t"
|
||||
63
www/daily.t
|
|
@ -1,63 +0,0 @@
|
|||
#define _PAGE_ Daily builds
|
||||
#include "head.t"
|
||||
|
||||
<h2>Source tarballs</h2>
|
||||
|
||||
<!--#exec cmd="./dailysrc.pl" -->
|
||||
|
||||
<p>Useful links for do-it-yourselfers:
|
||||
<ul>
|
||||
<li><a href="cross-gcc.html">Building the SH1 cross compiler</a>
|
||||
<li><a href="sh-win/">Setting up an SH1 cross compiler for Windows</a>
|
||||
<li><a href="docs/how_to_compile.html">README from the docs directory</a>,
|
||||
describing how to compile Rockbox
|
||||
<lI><a href="manual/">The Rockbox Manual</a>
|
||||
</ul>
|
||||
|
||||
<h2>Target builds</h2>
|
||||
|
||||
<p>These are automated daily builds of the CVS code.
|
||||
They are <i>not</i> official releases and are in fact almost guaranteed to contain bugs!
|
||||
|
||||
<p>These builds are discussed in IRC or mail only. <font color="red"><big><b>DO NOT FILE BUG REPORTS FOR THEM!</b></big></font>
|
||||
|
||||
<p>There are three versions of each build:
|
||||
|
||||
<!--#exec cmd="./dailymod.pl" -->
|
||||
|
||||
<p><b>Note 1:</b> You must rename the file to "archos.mod" ("ajbrec.ajz" for the recorder) before copying it to the root of your archos.
|
||||
|
||||
|
||||
<h2>CVS compile status</h2>
|
||||
|
||||
<p>This table shows which targets are currently compilable from the CVS code, and how many compiler warnings the build generates. "OK" means no warnings.
|
||||
The batch timestamp is GMT.
|
||||
|
||||
<p>
|
||||
<!--#include virtual="buildstatus.link" -->
|
||||
|
||||
<h2>CVS builds</h2>
|
||||
|
||||
<p>These builds are as "bleeding edge" as you can get. Up-to-date builds of the latest CVS code (the top line from the above table):
|
||||
|
||||
<p><table class=dailymod><tr valign=top>
|
||||
<td>
|
||||
<a href="auto/build-player/archos.mod">Player</a><br>
|
||||
<a href="auto/build-playerdebug/archos.mod">Player debug</a><br>
|
||||
<a href="auto/build-playersim/rockboxui">Player simulator (linux)</a><br>
|
||||
<a href="http://codeforce.d2g.com/rockbox/autocvs">Player simulator (win32)</a><br>
|
||||
</td>
|
||||
<td>
|
||||
<a href="auto/build-playerold/archos.mod">Player-old</a><br>
|
||||
<a href="auto/build-playerolddebug/archos.mod">Player-old debug</a><br>
|
||||
<a href="auto/build-playeroldsim/rockboxui">Player-old simulator (linux)</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="auto/build-recorder/ajbrec.ajz">Recorder</a><br>
|
||||
<a href="auto/build-recorderdebug/ajbrec.ajz">Recorder debug</a><br>
|
||||
<a href="auto/build-recordersim/rockboxui">Recorder simulator (linux)</a><br>
|
||||
<a href="http://codeforce.d2g.com/rockbox/autocvs">Recorder simulator (win32)</a><br>
|
||||
</td>
|
||||
</tr></table>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
$basedir = "/home/dast/rockbox-build/daily-build";
|
||||
|
||||
sub list {
|
||||
$dir = shift @_;
|
||||
|
||||
opendir(DIR, "$basedir/$dir") or
|
||||
die "Can't opendir($basedir/$dir)";
|
||||
@tarballs = sort grep { /^a/ } readdir(DIR);
|
||||
closedir DIR;
|
||||
|
||||
print "<ul>\n";
|
||||
for ( @tarballs ) {
|
||||
print "<li><a href=\"daily/$dir/$_\">$_</a>\n";
|
||||
}
|
||||
print "</ul>\n";
|
||||
}
|
||||
|
||||
print "<table class=dailymod><tr><td>\n";
|
||||
print "<h3>player-old</h3>\n";
|
||||
print "<p>This version is for old Archos Jukebox 5000, 6000 models with ROM firmware older than 4.50:\n";
|
||||
&list("playerold");
|
||||
|
||||
print "</td><td>\n";
|
||||
print "<h3>player</h3>\n";
|
||||
print "<p>This version is for Archos Jukebox 5000/6000 with ROM firmware 4.50 or later, and all Studio models:\n";
|
||||
&list("player");
|
||||
|
||||
print "</td><td>\n";
|
||||
print "<h3>recorder</h3>\n";
|
||||
print "<p>This version is for all Archos Jukebox Recorder models:\n";
|
||||
&list("recorder");
|
||||
|
||||
print "</td></tr></table>\n";
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
$basedir = "/home/dast/rockbox-build/daily-build/";
|
||||
|
||||
opendir(DIR, $basedir) or
|
||||
die "Can't opendir($basedir)";
|
||||
@tarballs = sort grep { /^rockbox-daily-/ } readdir(DIR);
|
||||
closedir DIR;
|
||||
|
||||
print "<ul>\n";
|
||||
|
||||
for ( @tarballs ) {
|
||||
$size = (stat("$basedir/$_"))[7];
|
||||
$log = "";
|
||||
if (/-(\d+)/) {
|
||||
$date = $1;
|
||||
if ( -f "$basedir/changes-$date.txt") {
|
||||
$lines = `grep "Number of changes:" $basedir/changes-$date.txt | cut "-d " -f4` + 0;
|
||||
$log = "<a href=\"daily/changes-$date.txt\">Changelog</a> <small>($lines changes)</small>";
|
||||
}
|
||||
}
|
||||
print "<li><a href=\"daily/$_\">$_</a> <small>($size bytes)</small> $log\n";
|
||||
}
|
||||
|
||||
print "</ul>\n";
|
||||
|
Before Width: | Height: | Size: 722 KiB |
|
Before Width: | Height: | Size: 727 KiB |
|
Before Width: | Height: | Size: 788 KiB |
|
Before Width: | Height: | Size: 612 KiB |
|
Before Width: | Height: | Size: 883 KiB |
|
Before Width: | Height: | Size: 989 KiB |
|
Before Width: | Height: | Size: 983 KiB |
|
|
@ -1,9 +0,0 @@
|
|||
ACTION=@echo preprocessing $@; rm -f $@; $(HOME)/bin/fcpp -WWW -I.. -Uunix -H -C -V -LL >$@
|
||||
|
||||
SRC := $(wildcard *.t)
|
||||
OBJS := $(SRC:%.t=%.html)
|
||||
|
||||
all: $(OBJS)
|
||||
|
||||
%.html : %.t
|
||||
$(ACTION) $<
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
4083: Comparison between Recorder and Player
|
||||
4084: Contest: Spot the development box!
|
||||
4086: A stack of "virgins"!
|
||||
4087: A pre-4.50 player (left) and a post-4.50 player (right).
|
||||
4089: There's lots of fun to be had with these things!
|
||||
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
|
@ -1,132 +0,0 @@
|
|||
#define _PAGE_ Rockbox Developer Conference 2002
|
||||
#include "head.t"
|
||||
|
||||
<table align="right"><tr><td><a href="show.cgi?img4083.jpg"><img src="img4083t.jpg" alt="photo" border=0 width=200 height=150></a><br><small><i>Comparison of Recorder and Player</i></small></td></tr></table>
|
||||
|
||||
<p>Well, almost. :-) Björn, Linus, Daniel and Kjell sat down at Linus' house
|
||||
friday night (2002-04-19) with our Archoses and had a long and fruitful discussion about software design.
|
||||
Here are a few things that we discussed:
|
||||
|
||||
<h2>Application Programming Interfaces</h2>
|
||||
|
||||
<p>We want to try to stick to POSIX where these exist and are practical. The
|
||||
reason is simply that many people already know these APIs well. Here are a
|
||||
few which haven't already been defined in the code:
|
||||
|
||||
<h3>File operations</h3>
|
||||
<ul>
|
||||
<li>open
|
||||
<li>close
|
||||
<li>read
|
||||
<li>write
|
||||
<li>seek
|
||||
<li>unlink
|
||||
<li>rename
|
||||
</ul>
|
||||
|
||||
<table align="right"><tr><td><a href="show.cgi?img4084.jpg"><img src="img4084t.jpg" alt="photo" border=0 width=200 height=150></a>
|
||||
<br><small><i>Contest: Spot the development box!</i></small></td></tr></table>
|
||||
|
||||
<h3>Directory operations</h3>
|
||||
<ul>
|
||||
<li>opendir
|
||||
<li>closedir
|
||||
<li>readdir
|
||||
</ul>
|
||||
|
||||
<h3>Disk operations</h3>
|
||||
<ul>
|
||||
<li>readblock
|
||||
<li>writeblock
|
||||
<li>spindown
|
||||
<li>diskinfo
|
||||
<li>partitioninfo
|
||||
</ul>
|
||||
|
||||
<p>We also decided that we will use the 'newlib' standard C library,
|
||||
replacing some functions with smaller variants as we move forward.
|
||||
|
||||
<h2>Multitasking</h2>
|
||||
|
||||
<p>We spent much time discussing and debating task scheduling, or the lack
|
||||
thereof. First, we went with the idea that we don't really need "real"
|
||||
scheduling. Instead, a simple "tree-task" system would be used: A
|
||||
main-loop, a timer tick and a "bottom half" low-priority interrupt, each
|
||||
with an event queue.
|
||||
|
||||
<p>Pretty soon we realized that we will want to:
|
||||
|
||||
<ol style="a">
|
||||
<li> Use a timer tick to poll disk I/O (assuming we can't get an interrupt)
|
||||
<li> Perform slow disk operations in both the MP3->DAC feeder and the user
|
||||
interface, sometimes at the same time.
|
||||
<li> Not lock up the user interface during I/O.
|
||||
</ol>
|
||||
|
||||
<table align="right"><tr><td><a href="show.cgi?img4086.jpg"><img src="img4086t.jpg" alt="photo" border=0 width=200 height=150></a>
|
||||
<br><small><i>A stack of "virgins"!</i></small></td></tr></table>
|
||||
|
||||
<p>At the same time, we agreed that we should not walk into the common trap
|
||||
of engaging in "job splitting". That is, to split up jobs in small chunks
|
||||
so they don't take so long to finish. The problem with job splitting is
|
||||
that it makes the code flow very complex.
|
||||
|
||||
<p>After much scratching our collective heads over how to make a primitive
|
||||
"three-task" system be able to do everything we wanted without resorting
|
||||
to complex job splitting, we finally came to the conclusion that we were
|
||||
heading down the wrong road:
|
||||
|
||||
<p><blockquote>
|
||||
<b>We need threading.</b>
|
||||
</blockquote>
|
||||
|
||||
<p>Even though a scheduler adds complexity, it makes the rest of the code so
|
||||
much more straight-forward that the total net result is less overall
|
||||
complexity.
|
||||
|
||||
<p>To keep it simple, we decided to use a cooperative scheduler. That is, one
|
||||
in which the threads themselves decide when scheduling is performed. The
|
||||
big gain from this, apart from making the scheduler itself less complex,
|
||||
is that we don't have to worry as much about making all code "multithread
|
||||
safe".
|
||||
|
||||
<p>Affording ourselves the luxury of threads, we soon identified four basic
|
||||
threads:
|
||||
|
||||
<ul>
|
||||
<li>Disk thread, performing all disk operations
|
||||
<li>UI thread, handling the user interface
|
||||
<li>MP3 feed thread, making sure the MAS is fed with data at all times
|
||||
<li>I2C thread, handling the sometimes very relaxed timing of the I2C bus
|
||||
</ul>
|
||||
|
||||
<p>Threads use message passing between them and each have a message queue
|
||||
associated to it.
|
||||
|
||||
<table align="right"><tr><td><a href="show.cgi?img4089.jpg"><img src="img4089t.jpg" alt="photo" border=0 width=200 height=150></a>
|
||||
<br><small><i>There's much fun to be had with these things!</i></small></td></tr></table>
|
||||
|
||||
<p>In addition to the threads, we need a timer interrupt with the ability to
|
||||
send messages to threads at specific intervals. This will also be used to
|
||||
scan the keys of the jukebox and handle key repeat detection (when a key
|
||||
has been pressed for a number of ticks).
|
||||
|
||||
<p>None of these things are, of course, written in stone. Feel free to
|
||||
comment, discuss and argue about them!
|
||||
|
||||
<p>We are currently 89 subscribers to this list. If you want to get more
|
||||
deeply involved in what's going on, I encourage you to:
|
||||
|
||||
<ul>
|
||||
<li>Subscribe to the rockbox-cvs list, to see all code that goes in.
|
||||
<li>Join the #rockbox channel on irc.openprojects.net. There are always a
|
||||
couple of us in there.
|
||||
</ul>
|
||||
|
||||
<p>I have written a set of guidelines for contributing code to the project.
|
||||
Take a look at them in CVS or here:
|
||||
<a href="http://bjorn.haxx.se/rockbox/firmware/CONTRIBUTING">CONTRIBUTING</a>
|
||||
|
||||
<p>/Björn
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
ACTION=@echo preprocessing $@; rm -f $@; $(HOME)/bin/fcpp -WWW -I.. -Uunix -H -C -V -P -LL >$@
|
||||
|
||||
|
||||
SRC := $(wildcard *.t)
|
||||
OBJS := $(SRC:%.t=%.html)
|
||||
|
||||
FAQ2HTML = ../faq2html.pl
|
||||
TXT2HTML = ../txt2html.pl
|
||||
|
||||
# This is correct. It does point to ../../docs but we need a different
|
||||
# name so that the directories don't collide.
|
||||
DOCS = ../docs_
|
||||
|
||||
all: $(OBJS)
|
||||
|
||||
faq.raw: $(DOCS)/FAQ $(FAQ2HTML)
|
||||
$(FAQ2HTML) < $< > $@
|
||||
|
||||
faq.html: faq.t faq.raw $(FAQ2HTML)
|
||||
$(ACTION) $<
|
||||
|
||||
battery-faq.raw: $(DOCS)/BATTERY-FAQ $(FAQ2HTML)
|
||||
$(FAQ2HTML) < $< > $@
|
||||
|
||||
battery-faq.html: battery-faq.t battery-faq.raw $(FAQ2HTML)
|
||||
$(ACTION) $<
|
||||
|
||||
contributing.raw: $(DOCS)/CONTRIBUTING $(TXT2HTML)
|
||||
$(TXT2HTML) < $< > $@
|
||||
|
||||
contributing.html: contributing.t contributing.raw $(TXT2HTML)
|
||||
$(ACTION) $<
|
||||
|
||||
custom_wps_format.raw: $(DOCS)/CUSTOM_WPS_FORMAT $(TXT2HTML)
|
||||
$(TXT2HTML) < $< > $@
|
||||
|
||||
custom_wps_format.html: custom_wps_format.t custom_wps_format.raw $(TXT2HTML)
|
||||
$(ACTION) $<
|
||||
|
||||
how_to_compile.raw: $(DOCS)/README $(TXT2HTML)
|
||||
$(TXT2HTML) < $< > $@
|
||||
|
||||
how_to_compile.html: how_to_compile.t how_to_compile.raw $(TXT2HTML)
|
||||
$(ACTION) $<
|
||||
|
||||
%.html : %.t
|
||||
$(ACTION) $<
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#define _PAGE_ FAQ - Frequently Asked Battery Questions
|
||||
#include "head.t"
|
||||
|
||||
#include "battery-faq.raw"
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#define _PAGE_ Contributing to Rockbox
|
||||
#include "head.t"
|
||||
|
||||
<pre>
|
||||
#include "contributing.raw"
|
||||
</pre>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#define _PAGE_ Configuring the Player WPS
|
||||
#include "head.t"
|
||||
|
||||
<pre>
|
||||
#include "custom_wps_format.raw"
|
||||
</pre>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
#define _PAGE_ Useful data sheets
|
||||
#include "head.t"
|
||||
|
||||
<p>All in PDF format.
|
||||
|
||||
<h2>General docs</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="cpu_sh1_pb.pdf">Hitachi SH-1 Product Brief</a> 120 kB
|
||||
<li><a href="sh1_2p.pdf">Hitachi SH-1 Programming Manual r4.0</a> 1600 kB
|
||||
<li><a href="sh7032h.pdf">Hitachi SH-1 Hardware Manual r5.0</a> 2300 kB
|
||||
<li><a href="flash_SST37VF512.pdf">SST SST37VF020 256kB Flash ROM</a> 172 kB
|
||||
<li><a href="ata-atapi-v5.pdf">ATA-ATAPI-5</a> 2772 kB
|
||||
</ul>
|
||||
|
||||
<h2>Player specific</h2>
|
||||
<ul>
|
||||
<li><a href="SSD1801R0_4.pdf">Solomon SSD 1801 LCD controller</a> 584 kB (unconfirmed)
|
||||
<li><a href="dsp_mas3507d_3pd.pdf">Micronas MAS 3507D MPEG Audio Decoder</a> 872 kB
|
||||
<li><a href="dac_dac3550a_1ds.pdf">Micronas DAC 3550A Stereo Audio DAC</a> 592 kB
|
||||
<li><a href="dram_41c16105.pdf">ISSI IS41LV16105 Fast Page DRAM</a> 148 kB
|
||||
<li><a href="isd200.pdf">ISD-200 USB/ATA bridge</a> 376 kB
|
||||
</ul>
|
||||
|
||||
<h2>Recorder specific</h2>
|
||||
<ul>
|
||||
<li><a href="ssd1815r1_5.pdf">Solomon SSD 1815 LCD controller</a> 864 kB
|
||||
<li><a href="mas3587f_2pd.pdf">Micronas MAS 3587F MPEG Audio Encoder/Decoder</a> 1300 kB
|
||||
<li><a href="dram_k4e151612d.pdf">Samsung K4E151612D EDO DRAM</a> 400 kB
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="dc2dc_LM2651.pdf">National LM2651 DC/DC converter</a> 200 kB
|
||||
<li><a href="dc2dc_MC34063A.pdf">Fairchild MC34064A DC/DC converter</a> 45 kB
|
||||
<li><a href="fet_FZT849.pdf">FZT824 High Current Transistor</a> 60 kB
|
||||
<li><a href="rtc_tm41st84w.pdf">ST M41ST84W Real Time Clock</a> 180 kB
|
||||
<li><a href="isd300.pdf">ISD-300 USB/ATA bridge</a> 376 kB
|
||||
</ul>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#define _PAGE_ FAQ - Frequently Asked Questions
|
||||
#include "head.t"
|
||||
|
||||
#include "faq.raw"
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#define _PAGE_ How to compile Rockbox
|
||||
#include "head.t"
|
||||
|
||||
<pre>
|
||||
#include "how_to_compile.raw"
|
||||
</pre>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
#define _PAGE_ Documentation
|
||||
#include "head.t"
|
||||
|
||||
<h2>For users</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="/docs/faq.html">Frequently Asked Questions</a>
|
||||
<li><a href="/manual/">User manual</a>
|
||||
</ul>
|
||||
|
||||
<h2>For developers</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="/notes.html">Research notes</a>
|
||||
<li><a href="datasheets.html">Data sheets</a>
|
||||
<li><a href="/schematics/">Schematics</a>
|
||||
<li><a href="/cvs.html">How to use CVS</a>
|
||||
<li><a href="/cross-gcc.html">Building the cross compiler</a>
|
||||
<li><a href="/sh-win/">Setting up the cross compiler for Windows</a>
|
||||
<li><a href="how_to_compile.html">How to compile Rockbox</a> (README from cvs)
|
||||
<li><a href="mpeghdr.html">MPEG frame header info</a>
|
||||
</ul>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,761 +0,0 @@
|
|||
#define _PAGE_ MPEG Audio Frame Header
|
||||
#include "head.t"
|
||||
|
||||
<P>This is a brief and informal document targeted to those who want to deal
|
||||
with the MPEG format. If you are one of them, you probably already know what
|
||||
is MPEG audio. If not, jump to <A
|
||||
HREF="http://www.mp3.com/">http://www.mp3.com/</A> or <A
|
||||
HREF="http://www.layer3.org/">http://www.layer3.org/</A> where you will find
|
||||
more details and also more links. This document does not cover compression and
|
||||
decompression algorithm.
|
||||
|
||||
<P>NOTE: You cannot just search the Internet and find the MPEG audio specs. It
|
||||
is copyrighted and you will have to pay quite a bit to get the Paper. That's why
|
||||
I made this. Information I got is gathered from the Internet, and mostly originate
|
||||
from program sources I found available for free. Despite my intention to always
|
||||
specify the information sources, I am not able to do it this time. Sorry, I did
|
||||
not maintain the list. :-(
|
||||
<P><B>These are not a decoding specs, it just informs you how to read the </B><A
|
||||
HREF="#MPEG HEADER"><B>MPEG headers</B></A><B> and the </B> <A HREF="#MPEGTAG"
|
||||
TARGET=""><B>MPEG TAG</B></A><B>. MPEG Version 1, 2 and 2.5 and Layer I, II
|
||||
and III are supported, the MP3 TAG (ID3v1 and ID3v1.1) also.</B>. Those of you
|
||||
who use Delphi may find <A
|
||||
HREF="http://www.dv.co.yu/mpgscript/mpgtools.htm">MPGTools Delphi unit (freeware source)</A>
|
||||
useful, it is where I implemented this stuff.
|
||||
|
||||
<P>I do not claim information presented in this document is accurate. At first
|
||||
I just gathered it from different sources. It was not an easy task but I needed
|
||||
it. Later, I received lots of comments as feedback when I published this document.
|
||||
I think this last release is highly accurate due to comments and corrections I
|
||||
received.
|
||||
<P>This document is last updated on December 22, 1999.
|
||||
<P ALIGN="center"><FONT SIZE="5"><B>MPEG Audio Compression Basics</B></FONT>
|
||||
|
||||
<P>This is one of many methods to compress audio in digital form trying to consume
|
||||
as little space as possible but keep audio quality as good as possible. MPEG compression
|
||||
showed up as one of the best achievements in this area.
|
||||
<P>This is a lossy compression, which means, you will certainly loose some audio
|
||||
information when you use this compression methods. But, this lost can hardly be
|
||||
noticed because the compression method tries to control it. By using several quite
|
||||
complicate and demanding mathematical algorithms it will only loose those parts
|
||||
of sound that are hard to be heard even in the original form. This leaves more
|
||||
space for information that is important. This way you can compress audio up to
|
||||
12 times (you may choose compression ratio) which is really significant. Due to
|
||||
its quality MPEG audio became very popular.
|
||||
<P>MPEG standards MPEG-1, MPEG-2 and MPEG-4 are known but this document covers
|
||||
first two of them. There is an unofficial MPEG-2.5 which is rarely used. It is
|
||||
also covered.
|
||||
<P><B>MPEG-1 audio</B> (described in ISO/IEC 11172-3) describes three Layers of audio coding with the following properties:
|
||||
<LI>one or two audio channels
|
||||
<LI>sample rate 32kHz, 44.1kHz or 48kHz.
|
||||
<LI>bit rates from 32kbps up to 448kbps<BR>
|
||||
Each layer has its merits.
|
||||
|
||||
<P><B>MPEG-2 audio</B> (described in ISO/IEC 13818-3) has two extensions to MPEG-1, usually referred as MPEG-2/LSF and MPEG-2/Multichannel.
|
||||
<P>MPEG-2/LSF has the following properties:
|
||||
<LI>one or two audio channels
|
||||
<LI>sample rates half those of MPEG-1
|
||||
<LI>bit rates from 8 kbps up to 256kbps.
|
||||
|
||||
<P>MPEG-2/Multichannel has the following properties:
|
||||
<LI>up to 5 full range audio channels and an LFE-channel (Low Frequency
|
||||
Enhancement <> subwoofer!)
|
||||
<LI>sample rates the same as those of MPEG-1
|
||||
<LI>highest possible bitrate goes up to about 1Mbps for 5.1
|
||||
|
||||
|
||||
<P ALIGN="center"><A NAME="MPEG HEADER"></A><FONT SIZE="5"><B>MPEG Audio Frame
|
||||
Header</B></FONT>
|
||||
|
||||
<P>An MPEG audio file is built up from smaller parts called frames. Generally,
|
||||
frames are independent items. Each frame has its own header and audio informations.
|
||||
There is no file header. Therefore, you can cut any part of MPEG file and play
|
||||
it correctly (this should be done on frame boundaries but most applications will
|
||||
handle incorrect headers). For Layer III, this is not 100% correct. Due to internal
|
||||
data organization in MPEG version 1 Layer III files, frames are often dependent
|
||||
of each other and they cannot be cut off just like that.
|
||||
<P>When you want to read info about an MPEG file, it is usually enough to find
|
||||
the first frame, read its header and assume that the other frames are the same
|
||||
This may not be always the case. Variable bitrate MPEG files may use so called
|
||||
bitrate switching, which means that bitrate changes according to the content of
|
||||
each frame. This way lower bitrates may be used in frames where it will not reduce
|
||||
sound quality. This allows making better compression while keeping high quality
|
||||
of sound.
|
||||
<P>The frame header is constituted by the very first four bytes (32bits) in a
|
||||
frame. The first eleven bits (or first twelve bits, see below about frame sync)
|
||||
of a frame header are always set and they are called "frame sync". Therefore,
|
||||
you can search through the file for the first occurence of frame sync (meaning
|
||||
that you have to find a byte with a value of 255, and followed by a byte with
|
||||
its three (or four) most significant bits set). Then you read the whole header
|
||||
and check if the values are correct. You will see in the following table the exact
|
||||
meaning of each bit in the header, and which values may be checked for validity.
|
||||
Each value that is specified as reserved, invalid, bad, or not allowed should
|
||||
indicate an invalid header. Remember, this is not enough, frame sync can be easily
|
||||
(and very frequently) found in any binary file. Also it is likely that MPEG file
|
||||
contains garbage on it's beginning which also may contain false sync. Thus, you
|
||||
have to check two or more frames in a row to assure you are really dealing with
|
||||
MPEG audio file.
|
||||
<P>Frames may have a CRC check. The CRC is 16 bits long
|
||||
and, if it exists, it follows the frame header. After the CRC comes the audio
|
||||
data. You may calculate the length of the frame and use it if you need to read
|
||||
other headers too or just want to calculate the CRC of the frame, to compare
|
||||
it with the one you read from the file. This is actually a very good method to
|
||||
check the MPEG header validity.
|
||||
|
||||
<P>Here is "graphical" presentation of the header content. Characters
|
||||
from A to M are used to indicate different fields. In the table, you can see
|
||||
details about the content of each field.
|
||||
<P ALIGN="center">
|
||||
<B><TT><FONT SIZE="5">
|
||||
AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
|
||||
</FONT>
|
||||
</TT></B>
|
||||
|
||||
<P><CENTER>
|
||||
|
||||
<TABLE BORDER="0" CELLSPACING=7>
|
||||
<TR VALIGN=TOP BGCOLOR="#E2E2E2">
|
||||
<TD>Sign</TD><TD>Length<BR>(bits)</TD><TD>Position<BR>(bits)</TD><TD>Description</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP>
|
||||
<TD>A</TD><TD>11</TD><TD>(31-21)</TD><TD>Frame sync (all bits set)</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP>
|
||||
<TD>B</TD><TD>2</TD><TD>(20,19)</TD><TD>MPEG Audio version ID<BR>
|
||||
00 - MPEG Version 2.5<BR>01 - reserved<BR>10 - MPEG Version 2 (ISO/IEC 13818-3)<BR>11 - MPEG Version 1 (ISO/IEC 11172-3)
|
||||
<P>Note: MPEG Version 2.5 is not official standard. Bit No 20 in frame header
|
||||
is used to indicate version 2.5. Applications that do not support this MPEG version
|
||||
expect this bit always to be set, meaning that frame sync (A) is twelve bits long,
|
||||
not eleve as stated here. Accordingly, B is one bit long (represents only bit
|
||||
No 19). I recommend using methodology presented here, since this allows you to
|
||||
distinguish all three versions and keep full compatibility.
|
||||
</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP><TD>C</TD><TD>2</TD><TD>(18,17)</TD>
|
||||
<TD>Layer description<BR>
|
||||
00 - reserved<BR>
|
||||
01 - Layer III<BR>
|
||||
10 - Layer II<BR>
|
||||
11 - Layer I</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP>
|
||||
<TD>D</TD><TD>1</TD><TD>(16)</TD>
|
||||
<TD>Protection bit<BR>
|
||||
0 - Protected by CRC (16bit crc follows header)<BR>
|
||||
1 - Not protected</TD>
|
||||
</TR>
|
||||
<TR VALIGN=TOP><TD>E</TD><TD>4</TD><TD>(15,12)</TD><TD>Bitrate index<BR>
|
||||
<TABLE BORDER="1" CELLSPACING="0" CELLPADING="0">
|
||||
<TR><TD>bits</TD><TD>V1,L1</TD><TD>V1,L2</TD><TD>V1,L3</TD><TD>V2,L1</TD><TD>V2, L2 & L3</TD></TR>
|
||||
<TR><TD>0000</TD><TD>free</TD><TD>free</TD><TD>free</TD><TD>free</TD><TD>free</TD></TR>
|
||||
<TR><TD>0001</TD><TD>32</TD><TD>32</TD><TD>32</TD><TD>32</TD><TD>8</TD></TR>
|
||||
<TR><TD>0010</TD><TD>64</TD><TD>48</TD><TD>40</TD><TD>48</TD><TD>16</TD></TR>
|
||||
<TR><TD>0011</TD><TD>96</TD><TD>56</TD><TD>48</TD><TD>56</TD><TD>24</TD></TR>
|
||||
<TR><TD>0100</TD><TD>128</TD><TD>64</TD><TD>56</TD><TD>64</TD><TD>32</TD></TR>
|
||||
<TR><TD>0101</TD><TD>160</TD><TD>80</TD><TD>64</TD><TD>80</TD><TD>40</TD></TR>
|
||||
<TR><TD>0110</TD><TD>192</TD><TD>96</TD><TD>80</TD><TD>96</TD><TD>48</TD></TR>
|
||||
<TR><TD>0111</TD><TD>224</TD><TD>112</TD><TD>96</TD><TD>112</TD><TD>56</TD></TR>
|
||||
<TR><TD>1000</TD><TD>256</TD><TD>128</TD><TD>112</TD><TD>128</TD><TD>64</TD></TR>
|
||||
<TR><TD>1001</TD><TD>288</TD><TD>160</TD><TD>128</TD><TD>144</TD><TD>80</TD></TR>
|
||||
<TR><TD>1010</TD><TD>320</TD><TD>192</TD><TD>160</TD><TD>160</TD><TD>96</TD></TR>
|
||||
<TR><TD>1011</TD><TD>352</TD><TD>224</TD><TD>192</TD><TD>176</TD><TD>112</TD></TR>
|
||||
<TR><TD>1100</TD><TD>384</TD><TD>256</TD><TD>224</TD><TD>192</TD><TD>128</TD></TR>
|
||||
<TR><TD>1101</TD><TD>416</TD><TD>320</TD><TD>256</TD><TD>224</TD><TD>144</TD></TR>
|
||||
<TR><TD>1110</TD><TD>448</TD><TD>384</TD><TD>320</TD><TD>256</TD><TD>160</TD></TR>
|
||||
<TR><TD>1111</TD><TD>bad</TD><TD>bad</TD><TD>bad</TD><TD>bad</TD><TD>bad</TD></TR>
|
||||
</TABLE>
|
||||
<P>
|
||||
NOTES: All values are in kbps<BR>
|
||||
V1 - MPEG Version 1<BR>
|
||||
V2 - MPEG Version 2 and Version 2.5<BR>
|
||||
L1 - Layer I<BR>
|
||||
L2 - Layer II<BR>
|
||||
L3 - Layer III<BR>
|
||||
"free" means free format. If the correct fixed bitrate (such files cannot
|
||||
use variable bitrate) is different than those presented in upper table it must
|
||||
be determined by the application. This may be implemented only for internal purposes
|
||||
since third party applications have no means to find out correct bitrate. Howewer,
|
||||
this is not impossible to do but demands lot's of efforts.<BR>
|
||||
"bad" means that this is not an allowed value
|
||||
|
||||
<P>MPEG files may have variable bitrate (VBR). This means that bitrate in the file may change. I have learned about two used methods:
|
||||
<LI>bitrate switching. Each frame may be created with different bitrate. It may be used in all layers. Layer III decoders must support this method. Layer I & II decoders may support it.
|
||||
<LI>bit reservoir. Bitrate may be borrowed (within limits) from previous frames
|
||||
in order to provide more bits to demanding parts of the input signal. This causes,
|
||||
however, that the frames are no longer independent, which means you should not
|
||||
cut this files. This is supported only in Layer III.
|
||||
<P>More about VBR you may find on <A HREF="http://www.xingtech.com/">Xing Tech
|
||||
site</A>
|
||||
<P>For Layer II there are some combinations of bitrate and mode which are not
|
||||
allowed. Here is a list of allowed combinations.
|
||||
<TABLE BORDER=1 CELLSPACING=0>
|
||||
<TR>
|
||||
<TD>bitrate</TD>
|
||||
<TD>allowed modes</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>free</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>32</TD>
|
||||
<TD>single channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>48</TD>
|
||||
<TD>single channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>56</TD>
|
||||
<TD>single channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>64</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>80</TD>
|
||||
<TD>single channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>96</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>112</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>128</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>160</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>192</TD>
|
||||
<TD>all</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>224</TD>
|
||||
<TD>stereo, intensity stereo, dual channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>256</TD>
|
||||
<TD>stereo, intensity stereo, dual channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>320</TD>
|
||||
<TD>stereo, intensity stereo, dual channel</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>384</TD>
|
||||
<TD>stereo, intensity stereo, dual channel</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</TD></TR>
|
||||
<TR VALIGN=TOP>
|
||||
<TD>F</TD><TD>2</TD><TD>(11,10)</TD>
|
||||
<TD>Sampling rate frequency index (values are in Hz)
|
||||
<TABLE BORDER="1" CELLSPACING="0" CELLPADING="0">
|
||||
<TR><TD>bits</TD><TD>MPEG1</TD><TD>MPEG2</TD><TD>MPEG2.5</TD></TR>
|
||||
<TR><TD>00</TD><TD>44100</TD><TD>22050</TD><TD>11025</TD></TR>
|
||||
<TR><TD>01</TD><TD>48000</TD><TD>24000</TD><TD>12000</TD></TR>
|
||||
<TR><TD>10</TD><TD>32000</TD><TD>16000</TD><TD>8000</TD></TR>
|
||||
<TR><TD>11</TD><TD>reserv.</TD><TD>reserv.</TD><TD>reserv.</TD></TR>
|
||||
</TABLE>
|
||||
</TD></TR>
|
||||
|
||||
<TR VALIGN=TOP>
|
||||
<TD>G</TD><TD>1</TD><TD>(9)</TD>
|
||||
<TD>Padding bit<BR>
|
||||
0 - frame is not padded<BR>
|
||||
1 - frame is padded with one extra slot<BR>
|
||||
|
||||
Padding is used to fit the bit rates exactly. For an example: 128k 44.1kHz layer II uses a lot of 418 bytes and some of 417 bytes long frames to get the exact 128k bitrate. For Layer I slot is 32 bits long, for Layer II and Layer III slot is 8 bits long.
|
||||
|
||||
|
||||
|
||||
<P><B>How to calculate frame length</B>
|
||||
|
||||
<P>First, let's distinguish two terms frame size and frame length. Frame size
|
||||
is the number of samples contained in a frame. It is constant and always 384 samples
|
||||
for Layer I and 1152 samples for Layer II and Layer III. Frame length is length
|
||||
of a frame when compressed. It is calculated in slots. One slot is 4 bytes long
|
||||
for Layer I, and one byte long for Layer II and Layer III. When you are reading
|
||||
MPEG file you must calculate this to be able to find each consecutive frame. Remember,
|
||||
frame length may change from frame to frame due to padding or bitrate switching.
|
||||
<P>Read the BitRate, SampleRate and Padding of the frame header.
|
||||
<P>For Layer I files us this formula:
|
||||
<P ALIGN=CENTER>FrameLengthInBytes = (12 * BitRate / SampleRate + Padding) * 4
|
||||
<P ALIGN=LEFT>For Layer II & III files use this formula:
|
||||
<P ALIGN=CENTER>FrameLengthInBytes = 144 * BitRate / SampleRate + Padding
|
||||
<P>Example:<BR>
|
||||
Layer III, BitRate=128000, SampleRate=44100, Padding=0<BR>
|
||||
==> FrameSize=417 bytes
|
||||
</TD></TR>
|
||||
|
||||
<TR VALIGN=TOP><TD>H</TD><TD>1</TD><TD>(8)</TD>
|
||||
<TD>Private bit. It may be freely used for specific needs of an application, i.e. if it has to trigger some application specific events.</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP><TD>I</TD><TD>2</TD><TD>(7,6)</TD>
|
||||
<TD>Channel Mode<BR>
|
||||
00 - Stereo<BR>
|
||||
01 - Joint stereo (Stereo)<BR>
|
||||
10 - Dual channel (Stereo)<BR>
|
||||
11 - Single channel (Mono)</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP><TD>J</TD><TD>2</TD><TD>(5,4)</TD>
|
||||
<TD>Mode extension (Only if Joint stereo)
|
||||
<P>Mode extension is used to join informations that are of no use for stereo effect, thus reducing needed resources. These bits are dynamically determined by an encoder in Joint stereo mode.
|
||||
|
||||
<P>Complete frequency range of MPEG file is divided in subbands There are 32 subbands. For Layer I & II these two bits determine frequency range (bands) where intensity stereo is applied. For Layer III these two bits determine which type of joint stereo
|
||||
|
||||
is used (intensity stereo or m/s stereo). Frequency range is determined within decompression algorythm.
|
||||
|
||||
<TABLE BORDER="0" CELLSPACING="2" CELLPADDING="0">
|
||||
<TR><TD ALIGN=CENTER>Layer I and II</TD><TD ALIGN=CENTER>Layer III</TD></TR>
|
||||
<TR VALIGN=TOP><TD>
|
||||
<TABLE BORDER="1" CELLSPACING="0" CELLPADING="0">
|
||||
<TR><TD>value</TD><TD>Layer I & II</TD></TR>
|
||||
<TR><TD>00</TD><TD>bands 4 to 31</TD></TR>
|
||||
<TR><TD>01</TD><TD>bands 8 to 31</TD></TR>
|
||||
<TR><TD>10</TD><TD>bands 12 to 31</TD></TR>
|
||||
<TR><TD>11</TD><TD>bands 16 to 31</TD></TR></TABLE>
|
||||
</TD>
|
||||
|
||||
<TD>
|
||||
<TABLE BORDER="1" CELLSPACING="0" CELLPADING="0" WIDTH="212">
|
||||
<TR ALIGN=CENTER><TD>Intensity stereo</TD><TD>MS stereo</TD></TR>
|
||||
<TR ALIGN=CENTER><TD>off</TD><TD>off</TD></TR>
|
||||
<TR ALIGN=CENTER><TD>on</TD><TD>off</TD></TR>
|
||||
<TR ALIGN=CENTER><TD>off</TD><TD>on</TD></TR>
|
||||
<TR ALIGN=CENTER><TD>on</TD><TD>on</TD></TR></TABLE>
|
||||
</TD></TR></TABLE>
|
||||
</TD></TR>
|
||||
|
||||
<TR VALIGN=TOP><TD>K</TD><TD>1</TD><TD>(3)</TD>
|
||||
<TD>Copyright<BR>
|
||||
0 - Audio is not copyrighted<BR>
|
||||
1 - Audio is copyrighted</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP><TD>L</TD><TD>1</TD><TD>(2)</TD>
|
||||
<TD>Original<BR>
|
||||
0 - Copy of original media<BR>
|
||||
1 - Original media</TD>
|
||||
</TR>
|
||||
|
||||
<TR VALIGN=TOP>
|
||||
<TD>M</TD><TD>2</TD><TD>(1,0)</TD>
|
||||
<TD>Emphasis<BR>
|
||||
00 - none<BR>
|
||||
01 - 50/15 ms<BR>
|
||||
10 - reserved<BR>
|
||||
11 - CCIT J.17</TD>
|
||||
</TR></TABLE>
|
||||
<P> </P></CENTER>
|
||||
|
||||
<P ALIGN="center"><A NAME="MPEGTAG"></A><FONT SIZE="5"><B>MPEG Audio Tag ID3v1</B></FONT>
|
||||
<P>The TAG is used to describe the MPEG Audio file. It contains information
|
||||
about artist, title, album, publishing year and genre. There is some extra
|
||||
space for comments. It is exactly 128 bytes long and is located at very end of
|
||||
the audio data. You can get it by reading the last 128 bytes of the MPEG audio
|
||||
file.
|
||||
|
||||
<P ALIGN="center"><FONT SIZE="5"><B><TT>
|
||||
AAABBBBB BBBBBBBB BBBBBBBB BBBBBBBB<BR>
|
||||
BCCCCCCC CCCCCCCC CCCCCCCC CCCCCCCD<BR>
|
||||
DDDDDDDD DDDDDDDD DDDDDDDD DDDDDEEE<BR>
|
||||
EFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFG<BR>
|
||||
</TT></B></FONT>
|
||||
|
||||
<CENTER>
|
||||
|
||||
<TABLE BORDER="0" WIDTH="500">
|
||||
<TR VALIGN=TOP BGCOLOR=#E2E2E2>
|
||||
<TD>Sign</TD><TD>Length<BR>(bytes)</TD><TD>Position<BR>
|
||||
(bytes)</TD><TD>Description</TD></TR>
|
||||
<TR VALIGN=TOP><TD>A</TD><TD>3</TD><TD>(0-2)</TD>
|
||||
<TD>Tag identification. Must contain 'TAG' if tag exists and is
|
||||
correct.</TD>
|
||||
</TR>
|
||||
<TR><TD>B</TD><TD>30</TD><TD>(3-32)</TD><TD>Title</TD></TR>
|
||||
<TR><TD>C</TD><TD>30</TD><TD>(33-62)</TD><TD>Artist</TD></TR>
|
||||
<TR><TD>D</TD><TD>30</TD><TD>(63-92)</TD><TD>Album</TD></TR>
|
||||
<TR><TD>E</TD><TD>4</TD><TD>(93-96)</TD><TD>Year</TD></TR>
|
||||
<TR><TD>F</TD><TD>30</TD><TD>(97-126)</TD><TD>Comment</TD></TR>
|
||||
<TR><TD>G</TD><TD>1</TD><TD>(127)</TD><TD>Genre</TD></TR></TABLE>
|
||||
</CENTER>
|
||||
|
||||
<P>The specification asks for all fields to be padded with null character
|
||||
(ASCII 0). However, not all applications respect this (an example is WinAmp
|
||||
which pads fields with <space>, ASCII 32).
|
||||
|
||||
<P>There is a small change proposed in <B>ID3v1.1</B> structure. The last byte
|
||||
of the Comment field may be used to specify the track number of a song in an
|
||||
album. It should contain a null character (ASCII 0) if the information is
|
||||
unknown.
|
||||
|
||||
<P>Genre is a numeric field which may have one of the following values:
|
||||
|
||||
<CENTER>
|
||||
<TABLE BORDER="0" WIDTH="90%">
|
||||
<TR>
|
||||
<TD WIDTH="1%">0</TD>
|
||||
<TD WIDTH="20%">'Blues'</TD>
|
||||
<TD WIDTH="1%">20</TD>
|
||||
<TD WIDTH="20%">'Alternative'</TD>
|
||||
<TD WIDTH="1%">40</TD>
|
||||
<TD WIDTH="20%">'AlternRock'</TD>
|
||||
<TD WIDTH="1%">60</TD>
|
||||
<TD WIDTH="20%">'Top 40'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>1</TD>
|
||||
<TD>'Classic Rock'</TD>
|
||||
<TD>21</TD>
|
||||
<TD>'Ska'</TD>
|
||||
<TD>41</TD>
|
||||
<TD>'Bass'</TD>
|
||||
<TD>61</TD>
|
||||
<TD>'Christian Rap'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>2</TD>
|
||||
<TD>'Country'</TD>
|
||||
<TD>22</TD>
|
||||
<TD>'Death Metal'</TD>
|
||||
<TD>42</TD>
|
||||
<TD>'Soul'</TD>
|
||||
<TD>62</TD>
|
||||
<TD>'Pop/Funk'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>3</TD>
|
||||
<TD>'Dance'</TD>
|
||||
<TD>23</TD>
|
||||
<TD>'Pranks'</TD>
|
||||
<TD>43</TD>
|
||||
<TD>'Punk'</TD>
|
||||
<TD>63</TD>
|
||||
<TD>'Jungle'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>4</TD>
|
||||
<TD>'Disco'</TD>
|
||||
<TD>24</TD>
|
||||
<TD>'Soundtrack'</TD>
|
||||
<TD>44</TD>
|
||||
<TD>'Space'</TD>
|
||||
<TD>64</TD>
|
||||
<TD>'Native American'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>5</TD>
|
||||
<TD>'Funk'</TD>
|
||||
<TD>25</TD>
|
||||
<TD>'Euro-Techno'</TD>
|
||||
<TD>45</TD>
|
||||
<TD>'Meditative'</TD>
|
||||
<TD>65</TD>
|
||||
<TD>'Cabaret'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>6</TD>
|
||||
<TD>'Grunge'</TD>
|
||||
<TD>26</TD>
|
||||
<TD>'Ambient'</TD>
|
||||
<TD>46</TD>
|
||||
<TD>'Instrumental Pop'</TD>
|
||||
<TD>66</TD>
|
||||
<TD>'New Wave'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>7</TD>
|
||||
<TD>'Hip-Hop'</TD>
|
||||
<TD>27</TD>
|
||||
<TD>'Trip-Hop'</TD>
|
||||
<TD>47</TD>
|
||||
<TD>'Instrumental Rock'</TD>
|
||||
<TD>67</TD>
|
||||
<TD>'Psychadelic'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>8</TD>
|
||||
<TD>'Jazz'</TD>
|
||||
<TD>28</TD>
|
||||
<TD>'Vocal'</TD>
|
||||
<TD>48</TD>
|
||||
<TD>'Ethnic'</TD>
|
||||
<TD>68</TD>
|
||||
<TD>'Rave'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>9</TD>
|
||||
<TD>'Metal'</TD>
|
||||
<TD>29</TD>
|
||||
<TD>'Jazz+Funk'</TD>
|
||||
<TD>49</TD>
|
||||
<TD>'Gothic'</TD>
|
||||
<TD>69</TD>
|
||||
<TD>'Showtunes'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>10</TD>
|
||||
<TD>'New Age'</TD>
|
||||
<TD>30</TD>
|
||||
<TD>'Fusion'</TD>
|
||||
<TD>50</TD>
|
||||
<TD>'Darkwave'</TD>
|
||||
<TD>70</TD>
|
||||
<TD>'Trailer'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>11</TD>
|
||||
<TD>'Oldies'</TD>
|
||||
<TD>31</TD>
|
||||
<TD>'Trance'</TD>
|
||||
<TD>51</TD>
|
||||
<TD>'Techno-Industrial'</TD>
|
||||
<TD>71</TD>
|
||||
<TD>'Lo-Fi'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>12</TD>
|
||||
<TD>'Other'</TD>
|
||||
<TD>32</TD>
|
||||
<TD>'Classical'</TD>
|
||||
<TD>52</TD>
|
||||
<TD>'Electronic'</TD>
|
||||
<TD>72</TD>
|
||||
<TD>'Tribal'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>13</TD>
|
||||
<TD>'Pop'</TD>
|
||||
<TD>33</TD>
|
||||
<TD>'Instrumental'</TD>
|
||||
<TD>53</TD>
|
||||
<TD>'Pop-Folk'</TD>
|
||||
<TD>73</TD>
|
||||
<TD>'Acid Punk'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>14</TD>
|
||||
<TD>'R&B'</TD>
|
||||
<TD>34</TD>
|
||||
<TD>'Acid'</TD>
|
||||
<TD>54</TD>
|
||||
<TD>'Eurodance'</TD>
|
||||
<TD>74</TD>
|
||||
<TD>'Acid Jazz'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>15</TD>
|
||||
<TD>'Rap'</TD>
|
||||
<TD>35</TD>
|
||||
<TD>'House'</TD>
|
||||
<TD>55</TD>
|
||||
<TD>'Dream'</TD>
|
||||
<TD>75</TD>
|
||||
<TD>'Polka'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>16</TD>
|
||||
<TD>'Reggae'</TD>
|
||||
<TD>36</TD>
|
||||
<TD>'Game'</TD>
|
||||
<TD>56</TD>
|
||||
<TD>'Southern Rock'</TD>
|
||||
<TD>76</TD>
|
||||
<TD>'Retro'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>17</TD>
|
||||
<TD>'Rock'</TD>
|
||||
<TD>37</TD>
|
||||
<TD>'Sound Clip'</TD>
|
||||
<TD>57</TD>
|
||||
<TD>'Comedy'</TD>
|
||||
<TD>77</TD>
|
||||
<TD>'Musical'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>18</TD>
|
||||
<TD>'Techno'</TD>
|
||||
<TD>38</TD>
|
||||
<TD>'Gospel'</TD>
|
||||
<TD>58</TD>
|
||||
<TD>'Cult'</TD>
|
||||
<TD>78</TD>
|
||||
<TD>'Rock & Roll'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>19</TD>
|
||||
<TD>'Industrial'</TD>
|
||||
<TD>39</TD>
|
||||
<TD>'Noise'</TD>
|
||||
<TD>59</TD>
|
||||
<TD>'Gangsta'</TD>
|
||||
<TD>79</TD>
|
||||
<TD>'Hard Rock'</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<DIV ALIGN="LEFT"><BR>
|
||||
WinAmp expanded this table with next codes: </DIV>
|
||||
<TABLE BORDER="0" WIDTH="90%">
|
||||
<TR>
|
||||
<TD WIDTH="1%">80</TD>
|
||||
<TD WIDTH="20%">'Folk'</TD>
|
||||
<TD>92</TD>
|
||||
<TD>'Progressive Rock'</TD>
|
||||
<TD>104</TD>
|
||||
<TD>'Chamber Music'</TD>
|
||||
<TD>116</TD>
|
||||
<TD>'Ballad'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>81</TD>
|
||||
<TD>'Folk-Rock'</TD>
|
||||
<TD WIDTH="1%">93</TD>
|
||||
<TD WIDTH="20%">'Psychedelic Rock'</TD>
|
||||
<TD>105</TD>
|
||||
<TD>'Sonata'</TD>
|
||||
<TD>117</TD>
|
||||
<TD>'Poweer Ballad'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>82</TD>
|
||||
<TD>'National Folk'</TD>
|
||||
<TD>94</TD>
|
||||
<TD>'Symphonic Rock'</TD>
|
||||
<TD WIDTH="1%">106</TD>
|
||||
<TD WIDTH="20%">'Symphony'</TD>
|
||||
<TD>118</TD>
|
||||
<TD>'Rhytmic Soul'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>83</TD>
|
||||
<TD>'Swing'</TD>
|
||||
<TD>95</TD>
|
||||
<TD>'Slow Rock'</TD>
|
||||
<TD>107</TD>
|
||||
<TD>'Booty Brass'</TD>
|
||||
<TD WIDTH="1%">119</TD>
|
||||
<TD WIDTH="20%">'Freestyle'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>84</TD>
|
||||
<TD>'Fast Fusion'</TD>
|
||||
<TD>96</TD>
|
||||
<TD>'Big Band'</TD>
|
||||
<TD>108</TD>
|
||||
<TD>'Primus'</TD>
|
||||
<TD>120</TD>
|
||||
<TD>'Duet'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>85</TD>
|
||||
<TD>'Bebob'</TD>
|
||||
<TD>97</TD>
|
||||
<TD>'Chorus'</TD>
|
||||
<TD>109</TD>
|
||||
<TD>'Porn Groove'</TD>
|
||||
<TD>121</TD>
|
||||
<TD>'Punk Rock'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>86</TD>
|
||||
<TD>'Latin'</TD>
|
||||
<TD>98</TD>
|
||||
<TD>'Easy Listening'</TD>
|
||||
<TD>110</TD>
|
||||
<TD>'Satire'</TD>
|
||||
<TD>122</TD>
|
||||
<TD>'Drum Solo'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>87</TD>
|
||||
<TD>'Revival'</TD>
|
||||
<TD>99</TD>
|
||||
<TD>'Acoustic'</TD>
|
||||
<TD>111</TD>
|
||||
<TD>'Slow Jam'</TD>
|
||||
<TD>123</TD>
|
||||
<TD>'A Capela'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>88</TD>
|
||||
<TD>'Celtic'</TD>
|
||||
<TD>100</TD>
|
||||
<TD>'Humour'</TD>
|
||||
<TD>112</TD>
|
||||
<TD>'Club'</TD>
|
||||
<TD>124</TD>
|
||||
<TD>'Euro-House'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>89</TD>
|
||||
<TD>'Bluegrass'</TD>
|
||||
<TD>101</TD>
|
||||
<TD>'Speech'</TD>
|
||||
<TD>113</TD>
|
||||
<TD>'Tango'</TD>
|
||||
<TD>125</TD>
|
||||
<TD>'Dance Hall'</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>90</TD>
|
||||
<TD>'Avantgarde'</TD>
|
||||
<TD>102</TD>
|
||||
<TD>'Chanson'</TD>
|
||||
<TD>114</TD>
|
||||
<TD>'Samba'</TD>
|
||||
<TD> </TD>
|
||||
<TD> </TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>91</TD>
|
||||
<TD>'Gothic Rock'</TD>
|
||||
<TD>103</TD>
|
||||
<TD>'Opera'</TD>
|
||||
<TD>115</TD>
|
||||
<TD>'Folklore'</TD>
|
||||
<TD> </TD>
|
||||
<TD> </TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN=8>Any other value should be considered as 'Unknown'
|
||||
</TABLE>
|
||||
<P> </P></CENTER>
|
||||
|
||||
<P ALIGN="center"><A NAME="MPEG TAG"></A><FONT SIZE="5"><B>MPEG Audio Tag ID3v2</B></FONT>
|
||||
<P>This is new proposed TAG format which is different than ID3v1 and ID3v1.1.
|
||||
Complete tech specs for it may be found at <A
|
||||
HREF="http://www.id3.org/">http://www.id3.org/</A>.
|
||||
<P><CENTER>
|
||||
<HR>
|
||||
<P><FONT SIZE="-1"> Created on September 1998. by <A HREF="http://www.dv.co.yu/broker/">Predrag
|
||||
Supurovic</A>.<BR>
|
||||
Thanks to <A HREF="http://www.jps.net/kyunghi/">Jean</A> for debugging and polishing
|
||||
of this document, <A HREF="http://members.tripod.com/~videoripper/home.htm">Peter
|
||||
Luijer</A>, Guwani, Rob Leslie and Franc Zijderveld<BR>
|
||||
for valuable comments and corrections.</FONT></P>
|
||||
<P>© 1998, 1999 Copyright by DataVoyage</P>
|
||||
<P><FONT SIZE="-1">This document may be changed. Check <A
|
||||
HREF="http://www.dv.co.yu/mpgscript/mpeghdr.htm">http://www.dv.co.yu/mpgscript/mpeghdr.htm</A>
|
||||
for updates.<BR>
|
||||
You may use it freely. Distribution is allowed only in unaltered form. If you
|
||||
can help me make it more accurate, please do. </FONT></P>
|
||||
<P> </P>
|
||||
</CENTER>
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
ACTION=@echo preprocessing $@; rm -f $@; $(HOME)/bin/fcpp -WWW -I.. -Uunix -H -C -V -LL >$@
|
||||
|
||||
SRC := $(wildcard *.t)
|
||||
OBJS := $(SRC:%.t=%.html)
|
||||
|
||||
all: $(OBJS)
|
||||
|
||||
%.html : %.t
|
||||
$(ACTION) $<
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
#define _PAGE_ Download
|
||||
#define DOWNLOAD_PAGE
|
||||
#include "head.t"
|
||||
|
||||
<h2>Changes for version 1.3</h2>
|
||||
|
||||
<p>Please read the <a href="rockbox-1.3-notes.txt">release notes</a>. (<a href="old.html">Older releases</a>)
|
||||
|
||||
<p>
|
||||
<table><tr valign="top"><td>
|
||||
<h3>player-old</h3>
|
||||
<p>This version is for old Archos Jukebox 6000 models with ROM firmware older than 4.50.
|
||||
|
||||
<ul>
|
||||
<li><a href="rockbox-1.3-player-old.mod">rockbox-1.3-player-old.mod</a>
|
||||
</ul>
|
||||
|
||||
</td><td>
|
||||
|
||||
<h3>player</h3>
|
||||
<p>This version is for Archos Jukebox 5000, 6000 with ROM firmware 4.50 or later, and all Studio models.
|
||||
|
||||
<ul>
|
||||
<li><a href="rockbox-1.3-player.mod">rockbox-1.3-player.mod</a>
|
||||
</ul>
|
||||
|
||||
</td><td>
|
||||
|
||||
<h3>recorder</h3>
|
||||
<p>This version is for all Archos Jukebox Recorder models.
|
||||
|
||||
<ul>
|
||||
<li><a href="rockbox-1.3-recorder.ajz">rockbox-1.3-recorder.ajz</a>
|
||||
</ul>
|
||||
|
||||
</td></tr></table>
|
||||
|
||||
<h3>Source code</h3>
|
||||
<ul>
|
||||
<li><a href="rockbox-1.3.tar.gz">rockbox-1.3.tar.gz</a>
|
||||
</ul>
|
||||
|
||||
<h3>User interface simulators</h3>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li><a href="rockbox-1.3-player-sim">player simulator 1.3 for linux-x86</a>
|
||||
<li><a href="rockbox-1.3-recorder-sim">recorder simulator 1.3 for linux-x86</a>
|
||||
<li><a href="rockbox-1.2-player-sim.exe">player simulator 1.2 for win32</a>
|
||||
<li><a href="rockbox-1.2-recorder-sim.exe">recorder simulator 1.2 for win32</a>
|
||||
</ul>
|
||||
|
||||
<p>The simulators browse a directory called 'archos' in the directory they are started from. Create it and copy some mp3 files there. The buttons are simulated on the numeric keypad:
|
||||
<dl>
|
||||
<dt><b>Player</b>
|
||||
<dd>4/6 = prev/next, 8 = play, 2 = stop, enter = menu, + = on
|
||||
|
||||
<dt><b>Recorder</b>
|
||||
<dd>4/6 = left/right, 8/2 = up/down, 5 = play/pause, / * - = menu keys, +/enter = on/off
|
||||
</dl>
|
||||
|
||||
<h2>Installation</h2>
|
||||
<p>Rename your current archos.mod (if any) in the root of your archos, then copy the rockbox archos.mod there. Make sure it's called "archos.mod" (5000,6000,Studio) or "ajbrec.ajz" (Recorder).
|
||||
|
||||
<p>To remove the Rockbox firmware, just reverse the process: Rename the rockbox archos.mod file and replace it with your original firmware file. If you had no firmware file, just renaming or removing the rockbox file is sufficient.
|
||||
|
||||
<p>(Note that some models cannot shut off while the power adapter is plugged in.)
|
||||
|
||||
<h2>Bug reports</h2>
|
||||
|
||||
<p>Please use our <a href="/bugs.html">bug page</a>
|
||||
for all bug reports and feature requests.
|
||||
|
||||
<p>If you are interested in helping with the development of Rockbox, please join the mailing list.
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
#define _PAGE_ Old Release Notes
|
||||
#define OLDRELEASES_PAGE
|
||||
#include "head.t"
|
||||
|
||||
<p><a href="rockbox-1.3-notes.txt">1.3 release notes</a>.
|
||||
<p><a href="rockbox-1.2-notes.txt">1.1 release notes</a>.
|
||||
<p><a href="rockbox-1.1-notes.txt">1.1 release notes</a>.
|
||||
<p><a href="rockbox-1.0-notes.txt">1.0 release notes</a>.
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
HPATH = /usr/local/sh-gcc/bin
|
||||
CC = $(HPATH)/sh-elf-gcc
|
||||
LD = $(HPATH)/sh-elf-ld
|
||||
AR = $(HPATH)/sh-elf-ar
|
||||
AS = $(HPATH)/sh-elf-as
|
||||
OC = $(HPATH)/sh-elf-objcopy
|
||||
|
||||
INCLUDES=-I.
|
||||
|
||||
CFLAGS = -Os -Wall -m1 -nostdlib -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES)
|
||||
AFLAGS += -small -relax
|
||||
|
||||
OBJS= start.o main.o
|
||||
|
||||
%.o: %.s
|
||||
$(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) -c $<
|
||||
|
||||
|
||||
all : archos.mod # archos.asm
|
||||
|
||||
main.o: main.c
|
||||
|
||||
archos.elf : $(OBJS) app.lds
|
||||
$(CC) -nostdlib -o archos.elf $(OBJS) -lgcc -Tapp.lds -Wl,-Map,archos.map
|
||||
|
||||
archos.bin : archos.elf
|
||||
$(OC) -O binary archos.elf archos.bin
|
||||
|
||||
archos.asm: archos.bin
|
||||
sh2d -sh1 archos.bin > archos.asm
|
||||
|
||||
archos.mod : archos.bin
|
||||
scramble archos.bin archos.mod
|
||||
|
||||
dist:
|
||||
tar czvf dist.tar.gz Makefile main.c start.s app.lds
|
||||
|
||||
clean:
|
||||
-rm -f *.x *.i *.o *.elf *.bin *.map *.mod *.bak *~
|
||||
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
Rockbox example build
|
||||
---------------------
|
||||
|
||||
These files are meant to show how to build a simple program for the Archos.
|
||||
|
||||
Note that the display code only works on older machines (<4.50) so don't
|
||||
look too hard on that.
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
ENTRY(_start)
|
||||
OUTPUT_FORMAT(elf32-sh)
|
||||
SECTIONS
|
||||
{
|
||||
.vectors 0x09000000 :
|
||||
{
|
||||
*(.vectors);
|
||||
. = ALIGN(0x200);
|
||||
*(.text.start)
|
||||
*(.text)
|
||||
*(.rodata)
|
||||
}
|
||||
|
||||
.bss :
|
||||
{
|
||||
_stack = . + 0x1000;
|
||||
}
|
||||
|
||||
.pad 0x0900C800 :
|
||||
{
|
||||
LONG(0);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
#define PBDR (*((volatile unsigned short *)0x05FFFFC2))
|
||||
|
||||
#define DC 1
|
||||
#define CS1 2
|
||||
#define SDA 4
|
||||
#define SCK 8
|
||||
|
||||
static const unsigned char ascii2lcd[] = {
|
||||
0x00,0x01,0x02,0x03,0x00,0x84,0x85,0x89,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0xec,0xe3,0xe2,0xe1,0xe0,0xdf,0x15,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x24,0x25,0x26,0x37,0x06,0x29,0x2a,0x2b,
|
||||
0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,
|
||||
0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,
|
||||
0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
|
||||
0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,
|
||||
0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,
|
||||
0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,
|
||||
0x5c,0x5d,0x5e,0xa9,0x33,0xce,0x00,0x15,
|
||||
0x00,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,
|
||||
0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,
|
||||
0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,
|
||||
0x7c,0x7d,0x7e,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
|
||||
0x45,0x45,0x45,0x45,0x45,0x45,0x24,0x47,
|
||||
0x49,0x49,0x49,0x49,0x4d,0x4d,0x4d,0x4d,
|
||||
0x48,0x52,0x53,0x53,0x53,0x53,0x53,0x24,
|
||||
0x24,0x59,0x59,0x59,0x59,0x5d,0x24,0x24,
|
||||
0x65,0x65,0x65,0x65,0x65,0x65,0x24,0x67,
|
||||
0x69,0x69,0x69,0x69,0x6d,0x6d,0x6d,0x6d,
|
||||
0x73,0x72,0x73,0x73,0x73,0x73,0x73,0x24,
|
||||
0x24,0x79,0x79,0x79,0x79,0x7d,0x24,0x7d
|
||||
};
|
||||
|
||||
void lcd_write(int byte, int data)
|
||||
{
|
||||
int i;
|
||||
char on,off;
|
||||
|
||||
PBDR &= ~CS1; /* enable lcd chip select */
|
||||
|
||||
if ( data ) {
|
||||
on=~(SDA|SCK);
|
||||
off=SCK|DC;
|
||||
}
|
||||
else {
|
||||
on=~(SDA|SCK|DC);
|
||||
off=SCK;
|
||||
}
|
||||
/* clock out each bit, MSB first */
|
||||
for (i=0x80;i;i>>=1)
|
||||
{
|
||||
PBDR &= on;
|
||||
if (i & byte)
|
||||
PBDR |= SDA;
|
||||
PBDR |= off;
|
||||
}
|
||||
|
||||
PBDR |= CS1; /* disable lcd chip select */
|
||||
}
|
||||
|
||||
void lcd_printxy( char x, char y, unsigned char* string, int len )
|
||||
{
|
||||
int i;
|
||||
lcd_write(0xb0+y*16+x,0);
|
||||
for (i=0; string[i] && i<len; i++)
|
||||
lcd_write(ascii2lcd[string[i]],1);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
lcd_printxy(0,0,"Open Source",11);
|
||||
|
||||
/* simple scroll */
|
||||
while (1) {
|
||||
int i,j;
|
||||
char* string = " Jukebox Jukebox ";
|
||||
for ( i=0; i<11; i++ ) {
|
||||
lcd_printxy(0,1,string+i,11);
|
||||
for (j=0; j<600000; j++);
|
||||
PBDR ^= 0x40; /* toggle LED (PB6) */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern const void stack(void);
|
||||
|
||||
const void* vectors[] __attribute__ ((section (".vectors"))) =
|
||||
{
|
||||
main, /* Power-on reset */
|
||||
stack, /* Power-on reset (stack pointer) */
|
||||
main, /* Manual reset */
|
||||
stack /* Manual reset (stack pointer) */
|
||||
};
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
! note: sh-1 has a "delay cycle" after every branch where you can
|
||||
! execute another instruction "for free".
|
||||
|
||||
.file "start.s"
|
||||
.section .text.start
|
||||
.extern _main
|
||||
.extern _vectors
|
||||
.extern _stack
|
||||
.global _start
|
||||
.align 2
|
||||
|
||||
_start:
|
||||
mov.l 1f, r1
|
||||
mov.l 3f, r3
|
||||
mov.l 2f, r15
|
||||
jmp @r3
|
||||
ldc r1, vbr
|
||||
nop
|
||||
|
||||
1: .long _vectors
|
||||
2: .long _stack
|
||||
3: .long _main
|
||||
.type _start,@function
|
||||
101
www/faq2html.pl
|
|
@ -1,101 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# this is really a faq2html and should only be used for this purpose
|
||||
|
||||
sub fixline {
|
||||
$_ =~ s/\</</g;
|
||||
$_ =~ s/\>/>/g;
|
||||
|
||||
$_ =~ s/(http:\/\/([a-zA-Z0-9_.\/-]*)[^\) .\n])/\<a href=\"$1\"\>$1\<\/a\>/g;
|
||||
|
||||
$_ =~ s/(\\|\/)$/$1 /g; # clobber backslash on end of line
|
||||
}
|
||||
|
||||
sub show {
|
||||
if(@q) {
|
||||
print @q;
|
||||
undef @q;
|
||||
}
|
||||
if(@a) {
|
||||
print @a;
|
||||
undef @a;
|
||||
}
|
||||
if(@p) {
|
||||
print "<pre>\n";
|
||||
print @p;
|
||||
print "</pre>\n";
|
||||
undef @p;
|
||||
}
|
||||
}
|
||||
|
||||
while(<STDIN>) {
|
||||
|
||||
fixline($_);
|
||||
|
||||
# detect and mark Q-sections
|
||||
if( $_ =~ /^(Q(\d*)[.:] )(.*)/) {
|
||||
|
||||
show();
|
||||
|
||||
# collect the full Q
|
||||
push @q, "<a name=\"$2\"></a><p class=\"faqq\">";
|
||||
push @q, "$2. $3";
|
||||
my $line;
|
||||
|
||||
$indent = length($1);
|
||||
$first = " " x $indent;
|
||||
|
||||
#print "$indent|$first|$1|\n";
|
||||
|
||||
while(<STDIN>) {
|
||||
|
||||
fixline($_);
|
||||
|
||||
$line = $_;
|
||||
|
||||
if($_ !~ /^A/) {
|
||||
push @q, "$_";
|
||||
}
|
||||
else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
# first line of A
|
||||
$line =~ s/^A(\d*)[.:] *//g; # cut off the "A[num]."
|
||||
push @a, "<p class=\"faqa\">";
|
||||
push @a, $line;
|
||||
|
||||
$prev='a';
|
||||
next;
|
||||
}
|
||||
# print "$_ matches '$first'?\n";
|
||||
|
||||
if($_ =~ /^$first(\S)/) {
|
||||
|
||||
|
||||
if($prev ne 'a') {
|
||||
show();
|
||||
push @a, "<p class=\"faqa\">";
|
||||
}
|
||||
|
||||
push @a, $_;
|
||||
$prev='a';
|
||||
}
|
||||
else {
|
||||
if($prev ne 'p') {
|
||||
show();
|
||||
}
|
||||
if(@p) {
|
||||
# if we have data, we fix blank lines
|
||||
$_ =~ s/^\s*$/\ \n/g; # empty lines are nbsp
|
||||
push @p, $_; # add it
|
||||
}
|
||||
elsif($_ !~ /^\s*$/) {
|
||||
# this is not a blank line, add it
|
||||
push @p, $_;
|
||||
}
|
||||
$prev = 'p';
|
||||
}
|
||||
}
|
||||
show();
|
||||
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<hr size=1 align="left" width="10%">
|
||||
<small><i>Page was last modified __FILE_DATE__</i> <a href=mailto:bjorn@haxx.se>Björn Stenberg</a></small>
|
||||
</td></tr></table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
@html = `curl --silent "http://sourceforge.net/tracker/?group_id=44306&atid=439118"`;
|
||||
|
||||
@entries = grep {/HREF=\"\/tracker\/index.php/} @html;
|
||||
|
||||
print "<table class=bugs>\n";
|
||||
print "<tr><th>submitted</th><th>id</th><th>summary</th><th>submitted by</th><th>assigned to</th></tr>\n";
|
||||
for ( @entries ) {
|
||||
if ( /NOWRAP>(\d+).*?HREF=\"(.*?)\">(.*?)<.*?(nbsp;|\*) (.*?)<.*?\>(\w+)<.*?\>(\w+)</ ) {
|
||||
($submit, $assigned, $date, $id, $num, $summary) = ($7, $6, $5, $2, $1, $3);
|
||||
$submit = "<a href=http://sourceforge.net/users/$submit>$submit</a>" if ( $submit ne "nobody" );
|
||||
$assigned = "<a href=http://sourceforge.net/users/$assigned>$assigned</a>" if ( $assigned ne "nobody" );
|
||||
|
||||
print "<tr><td>$date</td><td><a href=\"http://www.sourceforge.net$id\">$num</a></td><td>$summary</td><td>$submit</td><td>$assigned</td></tr>\n";
|
||||
}
|
||||
}
|
||||
print "</table>\n";
|
||||
60
www/head.t
|
|
@ -1,60 +0,0 @@
|
|||
#define BGCOLOR "#b6c6e5"
|
||||
#define MENUBG "#6887bb"
|
||||
#define TITLE(_x) <h1>_x</h1>
|
||||
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<link rel="STYLESHEET" type="text/css" href="/style.css">
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
#ifdef _PAGE_
|
||||
<title>Rockbox - _PAGE_</title>
|
||||
#else
|
||||
<title>Rockbox</title>
|
||||
#endif
|
||||
<meta name="author" content="Björn Stenberg, in Emacs">
|
||||
#ifndef _PAGE_
|
||||
<meta name="keywords" content="bjorn,stenberg,computer,programming,mtb,stockholm,software,sms,byta,bostad">
|
||||
#endif
|
||||
</head>
|
||||
<body bgcolor=BGCOLOR text="black" link="blue" vlink="purple" alink="red"
|
||||
topmargin=0 leftmargin=0 marginwidth=0 marginheight=0>
|
||||
|
||||
<table border=0 cellpadding=7 cellspacing=0 height="100%">
|
||||
<tr valign="top">
|
||||
<td bgcolor=MENUBG valign="top">
|
||||
<br>
|
||||
<a href="/"><img src="/rockbox100.png" width=99 height=30 border=0></a> <br>
|
||||
|
||||
<p align="right">
|
||||
<a class="menulink" href="/">main page</a><br>
|
||||
<a class="menulink" href="/download/">download</a><br>
|
||||
<a class="menulink" href="/screenshots.html">screen shots</a><br>
|
||||
<a class="menulink" href="/daily.shtml">daily builds</a><br>
|
||||
<a class="menulink" href="/docs/">documentation</a><br>
|
||||
<a class="menulink" href="/mail/">mailing lists</a><br>
|
||||
<a class="menulink" href="/irc/">IRC</a><br>
|
||||
<a class="menulink" href="/internals/">photos</a><br>
|
||||
<a class="menulink" href="/mods/">hardware mods</a><br>
|
||||
<a class="menulink" href="/requests.shtml">feature requests</a><br>
|
||||
<a class="menulink" href="/bugs.shtml">bug reports</a><br>
|
||||
<a class="menulink" href="http://sourceforge.net/tracker/?group_id=44306&atid=439120">patches</a><br>
|
||||
<a class="menulink" href="http://bjorn.haxx.se/isd200/">linux driver</a>
|
||||
|
||||
<div align="right">
|
||||
<form action="http://www.google.com/search">
|
||||
<input name=as_q size=12><br>
|
||||
<input value="Search" type=submit>
|
||||
<input type=hidden name=as_oq value=rockbox>
|
||||
<input type=hidden name=as_sitesearch value="bjorn.haxx.se">
|
||||
</form></div>
|
||||
|
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/ sflogo.php?group_id=44306&type=1" width="88" height="31" border="0" alt="SourceForge.net Logo"></a>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
#ifdef _LOGO_
|
||||
<div align="center">_LOGO_</div>
|
||||
#else
|
||||
TITLE(_PAGE_)
|
||||
#endif
|
||||
124
www/history.t
|
|
@ -1,124 +0,0 @@
|
|||
#define _PAGE_ History
|
||||
#define HISTORY_PAGE
|
||||
#include "head.t"
|
||||
|
||||
<p><i>2002-08-09</i>: Version 1.2 is released. <a href="download/">Download it here</a>.
|
||||
|
||||
<p><i>2002-08-06</i>: Web site moved to new domain: <strong>rockbox.haxx.se</strong>.
|
||||
|
||||
<p><i>2002-08-06</i>: Battery charging added for the Recorders (players have hardware charging).
|
||||
|
||||
<p><i>2002-08-02</i>: <a href="tshirt-contest">Rockbox T-Shirt Design Contest</a>
|
||||
|
||||
<p><i>2002-07-28</i>: Configuration saving implemented for all models. Experimental saving to disk
|
||||
is not yet enabled on the players by default.
|
||||
|
||||
<p><i>2002-06-30</i>: USB cable detection added.
|
||||
|
||||
<p><i>2002-06-27</i>: MP3 playback now works for Recorder 6000 and Recorder 10 too.
|
||||
|
||||
<p><i>2002-06-19</i>: Version 1.1 is released. <a href="download/">Download it here</a>.
|
||||
|
||||
<p><i>2002-06-19</i>: Recorder sound support checked into CVS. Good news: No background noise!
|
||||
|
||||
<p><i>2002-06-10</i>: Playlist and scroll support added. Testing for release v1.1.
|
||||
|
||||
<p><i>2002-06-07</i>: The ATA driver now works for the Recorder models too.
|
||||
|
||||
<p><i>2002-06-01</i>: Version 1.0 is released! <a href="download/">Download it here</a>.
|
||||
|
||||
<p><i>2002-06-01</i>: Web site has been down three days due to a major power loss.
|
||||
|
||||
<p><i>2002-05-27</i>: All v1.0 code is written, we are now entering debug phase.
|
||||
If you like living on the edge, <a href="daily.shtml">here are daily builds</a>.
|
||||
|
||||
<p><i>2002-05-26</i>: New web design. First player release drawing closer.
|
||||
|
||||
<p><i>2002-05-03</i>: <b>SOUND!</b> Linus' experimental MAS code has
|
||||
<a href="http://bjorn.haxx.se/rockbox/mail/archive/rockbox-archive-2002-05/0016.shtml">played our first 4 seconds of music</a>.
|
||||
|
||||
<p><i>2002-04-27</i>: Julien Labruyére has generously donated an Archos Jukebox 6000 to the project. Thank you!
|
||||
|
||||
<p><i>2002-04-25</i>: Grant Wier has tested the Player LCD's double-height capability:
|
||||
<a href="archos-text-DH1.jpg"><img align=center src="archos-text-DH2_sm.jpg"></a>
|
||||
|
||||
<p><i>2002-04-23</i>: Report from the <a href="devcon/">Rockbox Spring Developer Conference 2002</a> ;-)
|
||||
|
||||
<p><i>2002-04-22</i>: Gentlemen, we have <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/rockbox/firmware/thread.c">threading</a>.
|
||||
|
||||
<p><i>2002-04-11</i>: The <a href="codes_rec.png">Recorder charset</a> has been mapped.
|
||||
|
||||
<p><i>2002-03-28</i>: Lots of new stuff on the web page:
|
||||
<a href="docs/faq.html">faq</a>,
|
||||
<a href="irc/">irc logs</a>,
|
||||
<a href="tools.html">tools</a> and
|
||||
<a href="internals/">photos</a>.
|
||||
|
||||
<p><i>2002-03-25</i>: New section for
|
||||
<a href="mods/">hardware modifications</a>.
|
||||
First out is the long awaited
|
||||
<a href="mods/serialport.html">serial port mod</a>.
|
||||
|
||||
<p><i>2002-03-25</i>: New instructions for
|
||||
<a href="cross-gcc.html">how to build an SH-1 cross-compiler</a>.
|
||||
|
||||
<p><i>2002-03-14</i>: New linux patch and instructions for
|
||||
<a href="lock.html">unlocking the archos harddisk</a> if you have the "Part. Error" problem.
|
||||
|
||||
<p><i>2002-03-08</i>: Uploaded a simple example, showing
|
||||
<a href="example/">how to build a program for the Archos</a>.
|
||||
|
||||
<p><i>2002-03-05</i>: The
|
||||
<a href="lock.html">harddisk password lock problem is solved</a>!
|
||||
Development can now resume at full speed!
|
||||
|
||||
<p><i>2002-01-29</i>: If you have feature requests or suggestions,
|
||||
please submit them to our
|
||||
<a href="http://sourceforge.net/projects/rockbox/">Sourceforge page</a>.
|
||||
|
||||
<p><i>2002-01-19</i>: Cool logo submitted by Thomas Saeys.
|
||||
|
||||
<p><i>2002-01-16</i>: The project now has a proper name: Rockbox.
|
||||
Logos are welcome! :-)
|
||||
<br>Also, Felix Arends wrote a quick <a href="sh-win/">tutorial</a>
|
||||
for how to get sh-gcc running under windows.
|
||||
|
||||
<p><i>2002-01-09</i>: Nicolas Sauzede
|
||||
<a href="mail/archive/rockbox-archive-2002-01/0096.shtml">found out</a>
|
||||
how to
|
||||
<a href="mail/archive/rockbox-archive-2002-01/0099.shtml">display icons and custom characters</a> on the Jukebox LCD.
|
||||
|
||||
<p><i>2002-01-08</i>: The two LCD charsets have been
|
||||
<a href="notes.html#charsets">mapped and drawn</a>.
|
||||
|
||||
<p><i>2002-01-07</i>:
|
||||
<a href="mail/archive/rockbox-archive-2002-01/0026.shtml">Jukebox LCD code</a>.
|
||||
I have written a small test program that scrolls some text on the display.
|
||||
You need
|
||||
<a href="mail/archive/rockbox-archive-2002-01/att-0026/01-archos.mod.gz">this file</a>
|
||||
for units with ROM earlier than 4.50 and
|
||||
<a href="mail/archive/rockbox-archive-2002-01/att-0050/02-archos.mod.gz">this file</a>
|
||||
for all others. (The files are gzipped, you need to unzip them before they will work.)
|
||||
|
||||
<p><i>2001-12-29</i>: Recorder LCD code. Gary Czvitkovicz knew the Recorder LCD controller since before and wrote some
|
||||
<a href="mail/archive/rockbox-archive-2001-12/att-0145/01-ajbr_lcd.zip">code</a>
|
||||
that writes text on the Recorder screen.
|
||||
|
||||
<p><i>2001-12-13</i>: First program
|
||||
<a href="mail/archive/rockbox-archive-2001-12/0070.shtml">released</a>!
|
||||
A 550 bytes long
|
||||
<a href="mail/archive/rockbox-archive-2001-12/att-0070/01-archos.mod">archos.mod</a>
|
||||
that performs the amazing magic of flashing the red LED. :-)
|
||||
|
||||
<p><i>2001-12-11</i>: Checksum algorithm solved, thanks to Andy Choi. A new "scramble" utility is available.
|
||||
|
||||
<p><i>2001-12-09</i>: Working my way through the setup code. The <a href="notes.html">notes</a> are being updated continously.
|
||||
|
||||
<p><i>2001-12-08</i>: Analyzed the exception vector table. See <a href="notes.html">the notes</a>. Also, a <a href="mail/">mailing list archive</a> is up.
|
||||
|
||||
<p><i>2001-12-07</i>:
|
||||
I just wrote this web page to announce descramble.c.
|
||||
I've disassembled one firmware version and looked a bit on the code, but no real analysis yet.
|
||||
Summary: Lots of dreams, very little reality. :-)
|
||||
|
||||
#include "foot.t"
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# A very simple load balancing script:
|
||||
# If more than $nlim hits in under $tlim seconds, redirect to $mirror.
|
||||
#
|
||||
# 2002-01-24 Björn Stenberg <bjorn@haxx.se>
|
||||
|
||||
# redirect is triggered by more than:
|
||||
$nlim = 10; # accesses in...
|
||||
$tlim = 10; # seconds
|
||||
$mirror = "http://rockbox.sourceforge.net/rockbox/";
|
||||
|
||||
open FILE, "+<.load" or die "Can't open .load: $!";
|
||||
flock FILE, LOCK_EX;
|
||||
@a = <FILE>;
|
||||
if ( scalar @a > $nlim ) {
|
||||
$first = shift @a;
|
||||
}
|
||||
else {
|
||||
$first = $a[0];
|
||||
}
|
||||
$now = time();
|
||||
@a = ( @a, "$now\n" );
|
||||
truncate FILE, 0;
|
||||
seek FILE, 0, 0;
|
||||
for ( @a ) {
|
||||
print FILE $_;
|
||||
}
|
||||
flock FILE, LOCK_UN;
|
||||
close FILE;
|
||||
|
||||
$diff = $now - $first;
|
||||
if ( $diff < $tlim ) {
|
||||
print "Location: $mirror\n\n";
|
||||
}
|
||||
else {
|
||||
print "Content-Type: text/html\n\n";
|
||||
open FILE, "<main.html" or die "Can't open main.html: $!\n";
|
||||
print <FILE>;
|
||||
close FILE;
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
#include "foot.t"
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
#define _PAGE_ Rockbox mailing lists
|
||||
#include "head.t"
|
||||
|
Before Width: | Height: | Size: 258 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 358 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 221 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
|
@ -1,9 +0,0 @@
|
|||
ACTION=@echo preprocessing $@; rm -f $@; $(HOME)/bin/fcpp -WWW -I.. -Uunix -H -C -V -LL >$@
|
||||
|
||||
SRC := $(wildcard *.t)
|
||||
OBJS := $(SRC:%.t=%.html)
|
||||
|
||||
all: $(OBJS)
|
||||
|
||||
%.html : %.t
|
||||
$(ACTION) $<
|
||||
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 2 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 143 KiB |