Difference between revisions of "BC Racers/Hidden content"
From Sega Retro
m (Text replacement - "| image1=Notavailable.svg | desc=" to "| image1= | desc=") |
m |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
===Sega logo ™ symbol=== | ===Sega logo ™ symbol=== | ||
{{HiddenContent | {{HiddenContent | ||
− | | image1= | + | | image1=BCRacers 32X JP Sega.png |
| desc=While not released in Japan, code exists to remove the ™ symbol from the introductory [[Sega]] logo if the game detects it is being played on a Japanese system. | | desc=While not released in Japan, code exists to remove the ™ symbol from the introductory [[Sega]] logo if the game detects it is being played on a Japanese system. | ||
+ | }} | ||
+ | |||
+ | ===Unused content=== | ||
+ | ====Hidden text==== | ||
+ | {{HiddenContent | ||
+ | | noimage=yes | ||
+ | | desc=Present at {{hex|0x2F63A4}} in the ROM is a chunk of macro code from an old version of [[wikipedia:Multi-Edit|Multi-Edit]].{{ref|https://web.archive.org/save/https://tcrf.net/BC_Racers_(32X)}} | ||
+ | |||
+ | <pre style='white-space: pre-wrap; width:640px'>turn_int = DlgExecute( dlg, 100, "Warning!", FILELOCK_HELPLINK, "", DLG_ScreenCenter ); | ||
+ | DlgKill( dlg ); | ||
+ | #ELSE | ||
+ | RM('MEERROR^MessageBox /NW=1/T=Warning/M=Your configuration files are locked. Before unlocking them, insure that there are NOT multiple copies of Multi-Edit running with your user id.'); | ||
+ | RM('USERIN^XMENU /B=1/X=25/Y=8/T=1/L=Action:/M=Unlock configuration files()Ignore and leave files locked()'); | ||
+ | kill_box; | ||
+ | #ENDIF | ||
+ | if( return_int == 1 ) { | ||
+ | int tr = refresh; | ||
+ | str tstr; | ||
+ | refresh = false; | ||
+ | make_message('Unlocking configuration files '); | ||
+ | working; | ||
+ | delete_window; | ||
+ | if( user_id == '' ) { | ||
+ | if( (Global_Str('@DB_EXTENSION') == '') ) { | ||
+ | tstr = me_path + '*.DB'; | ||
+ | call unlock_files; } else { tstr = me_path + '*.' + Global_Str('@DB_EXTENSION'); | ||
+ | call unlock_files; } tstr = me_path + '*.ME'; | ||
+ | call unlock_files; | ||
+ | } else { | ||
+ | // tstr = me_path + user_id + '.USR\*.*'; | ||
+ | return_str = '<USER_PATH>*.*'; | ||
+ | rm('XlateCmdLine'); | ||
+ | tstr = return_str; | ||
+ | call unlock_files; | ||
+ | } tstr = user_id + 'MEERR.TMP'; | ||
+ | call unlock_files; | ||
+ | // tstr = me_path + user_id + '*.TMP'; | ||
+ | return_str = '<USER_PATH>*.TMP'; | ||
+ | rm('XlateCmdLine'); | ||
+ | tstr = return_str; | ||
+ | call unlock_files; | ||
+ | goto config_unlocked; | ||
+ | unlock_files: int jx = FIRST_FILE(TSTR); | ||
+ | while( jx == 0 ) { if(last_file_attr & 1) { if( switch_file( caps(fexpand( get_path( tstr ) + last_file_name )))) { if(file_changed) save_file; | ||
+ | delete_window; | ||
+ | } Set_File_Attr( get_path( tstr ) + last_file_name, last_file_attr & $FE ); | ||
+ | } jx = next_file; | ||
+ | } ret; | ||
+ | config_unlocked: make_message('Configuration files unlocked.'); | ||
+ | refresh = tr; | ||
+ | } return(); | ||
+ | } void ProcessCmdLine( int m = parse_int("/M=", mparm_str) ) { } macro PARMLOAD { | ||
+ | /******************************************************************************* | ||
+ | MULTI_EDIT MACRO | ||
+ | Name: PARMLOAD | ||
+ | Description: This macro is called by Multi-Edit directly after STARTUP. It | ||
+ | takes care of loading in files and executing macros from the | ||
+ | command line | ||
+ | (C) Copyright 1991 by American Cybernetics, Inc. | ||
+ | *******************************************************************************/ | ||
+ | int parmload_mode = parse_int("/M=", mparm_str); | ||
+ | #ifdef DEMO if( !parmload_mode) { | ||
+ | // special stuff for the demo to support Evolve | ||
+ | if (global_int('!EVgDialectId')) { | ||
+ | /* make_message("!EVgDialectId=" + str(global_int('!EVgDialectId'))); | ||
+ | read_key; | ||
+ | */ RM("EVINIT"); | ||
+ | } } #endif // DEMO | ||
+ | int Load_Count,Parm_Number; | ||
+ | int cur_id = window_id; | ||
+ | int jx, tw, tr, mouse_initialized = FALSE ; | ||
+ | int restore_enable = 1, no_restore = 0, Goto_L_Num = 0; | ||
+ | str TStr, TStr2, Goto_F_Name[80], session_name[128] = ""; | ||
+ | str wdir[512] = ""; set_global_int('MENU_LEVEL', global_int('MENU_LEVEL') + 1 ); if( !parmload_mode ) { #IFNDEF Windows | ||
+ | make_message('Welcome to Multi-Edit V' + Version + '. Press ' + global_str('!HM_KEY1') + ' for help.'); | ||
+ | #ELSE make_message('Welcome to Multi-Edit V' + Version + '. Press <F1> for help.'); #ENDIF refresh = false; working; RM('.STARTUP^STARTUP'); } refresh = false; working; if( !parmload_mode ) { | ||
+ | /* Check and see if MECONFIG is read_only. If so then prompt the | ||
+ | user, to see if he/she wants them unlocked */ | ||
+ | tw = window_id; | ||
+ | if( user_id == '' ) { tstr = me_path + 'MECONFIG'; } else { | ||
+ | // 7.00.0: tstr = me_path + user_id + '.USR\MECONFIG'; | ||
+ | // 7.00.a: consult the USER_PATH for user directory | ||
+ | return_str = '<USER_PATH>MECONFIG'; | ||
+ | rm('XlateCmdLine'); tstr = return_str; } | ||
+ | /* This provides support for a default DB file extension to be configured. It | ||
+ | is overridden if the calling macro specifies an extension */ | ||
+ | if( (Global_Str('@DB_EXTENSION') == '') ) { Tstr = Tstr + '.DB'; } else { Tstr = Tstr + '.' + Global_Str('@DB_EXTENSION'); } | ||
+ | if( switch_file( tstr ) ) { | ||
+ | if( read_only ) { | ||
+ | call init_mouse; | ||
+ | ConfigLocked(); } } } | ||
+ | switch_win_id( tw ); | ||
+ | error_level = 0; | ||
+ | Error_Level = 0; | ||
+ | load_count = parmload_mode; | ||
+ | Parm_Number = 1; | ||
+ | refresh = false; | ||
+ | while( Parm_Number <= PARAM_COUNT ) { TStr = PARAM_STR(Parm_Number); | ||
+ | TStr = Caps(Remove_Space(TStr)); | ||
+ | if( Xpos(Copy(Tstr,1,1),'/-',1) ) { Tstr = Copy(Tstr,2,80); | ||
+ | if ( TStr == "CD" ) { // ldh | ||
+ | ++Parm_Number; // ldh | ||
+ | if ( Param_Str( Parm_Number ) != "" ) { // ldh | ||
+ | TStr = Caps( Remove_Space( Param_Str( Parm_Number ) ) ); // ldh | ||
+ | if ( Svl( TStr ) > 3 ) { // ldh | ||
+ | if ( Copy( TStr, Svl( TStr ), 1 ) == "\\" ) { // ldh | ||
+ | TStr = Copy( TStr, 1, Svl( TStr ) - 1 ); // ldh } // ldh.......} // ldh.......Change_Dir( TStr ); // ldh......} // ldh.....} // ldh.....else if ( Copy (TStr, 1, 3) == "WK=" ).....{......wdir = Copy (TStr, 4, 128);.....}.....else if ( TStr == "SM" ).....{......restore_enable = False;......no_restore = True;......RM("SESSMGR /NOSWITCH=1");.....}.....else if ( copy(tstr,1,2) == "SR" ).....{......int tid = window_id;......int tr = refresh;......refresh = false;......if(LocateDbPage("MECONFIG", "SESSMGR.CFG", false))......{.......down;.......session_name = get_line;.......restore_enable = TRUE;......}......switch_win_id(tid);......refresh = tr;.....}.....else if ((Copy( TStr, 1, 2) == "SN" ) &&.......(Global_Int('@RESTORE') == 3)) // only if encoded status files are active | ||
+ | { | ||
+ | // switch to named session | ||
+ | restore_enable = True; | ||
+ | session_name = copy(tstr,3,128); | ||
+ | } else if ( Copy( TStr, 1, 1) == "@" ) // ldh | ||
+ | // Load files from a file list | ||
+ | refresh = false; | ||
+ | restore_enable = False; | ||
+ | Set_Global_Int('LOAD_COUNT',Load_Count); | ||
+ | int tid = window_id; | ||
+ | create_window; | ||
+ | window_attr = 0x81; | ||
+ | tstr = copy(tstr,2,128); | ||
+ | load_file( tstr ); | ||
+ | int tag_win = window_id; | ||
+ | make_message(""); | ||
+ | if(error_level) { call init_mouse; | ||
+ | rm("messagebox /B=2/T=Error/M=List file " + tstr + " not found."); | ||
+ | } else { switch_win_id( tid ); | ||
+ | RM('LDFILES /NRL=1/TAG=' + str(tag_win) + '/DE=1/CW=2/LC=' + str(load_count)); | ||
+ | Load_Count = return_int; | ||
+ | if( (Load_Count == 1) ) { | ||
+ | /* Save the first file loaded so that if the user specifies a line number to | ||
+ | go to, we can do it. */ | ||
+ | Goto_F_Name = File_Name; | ||
+ | } tid = window_id; | ||
+ | } refresh = false; | ||
+ | if( switch_win_id( tag_win )) delete_window; | ||
+ | switch_win_id(tid); | ||
+ | } else if( TStr == 'NR' ) { if( !parmload_mode ) { restore_enable = False; | ||
+ | no_restore = TRUE; | ||
+ | } } e</pre> | ||
+ | |||
+ | |||
+ | Present at {{hex|0x2FF4F2}} is another chunk of this macro code. | ||
+ | <pre>/L=6/C=4/ATTR= | ||
+ | D[=.=.= | ||
+ | Version 5 | ||
+ | /L=7/C=20=.=.= | ||
+ | Copyright(c) 1988, 1993 by American Cybernetics, Inc. | ||
+ | /L=9/C=2=.=.= | ||
+ | Multi-Edit is protected under United States copyright law. Copies may be made for the puro NOT locate source | ||
+ | * /TF=filename The tag filename to use | ||
+ | * (do not auto determine) | ||
+ | -------------------------------------------------- */ | ||
+ | { str tag_id = parse_str("/TAGID=",mparm_str), | ||
+ | tag_language = tag_get_language(get_extension(file_name)), | ||
+ | backtrack_data; | ||
+ | int | ||
+ | src_win = window_id, | ||
+ | tag_win, | ||
+ | force_tag_id = (tag_id != ""), | ||
+ | next_tag = parse_int("/NEXT=", mparm_str); | ||
+ | g_was_maximized = IsZoomed(window_Handle); | ||
+ | backtrack_data = tag_init_backtrk(); | ||
+ | again: | ||
+ | refresh = false; | ||
+ | // If we are doing a NEXT tag then do not start from the top, | ||
+ | // and use the last tag instead of the current word | ||
+ | if ((!next_tag) && (!force_tag_id)) { if( parse_int("/MAN=",mparm_str)) | ||
+ | { return_str = ""; | ||
+ | rm("USERIN^QUERYBOX /P=Enter Tag:/W=32/ML=80/T=Multi-Tags/H="+TAGPROMPT_HELPLINK); | ||
+ | if( return_int <= 0 ) goto exit } else { rm("tag_parse_text"); | ||
+ | tag_id = return_str; | ||
+ | if( tag_id == "" ) { | ||
+ | make_message( "No valid tag." ); | ||
+ | switch_win_id( src_win ); | ||
+ | goto exit; | ||
+ | } | ||
+ | } | ||
+ | rm( 'tag_find_file /TF=' + parse_str("/TF=", mparm_str) ); | ||
+ | if( !return_int ) { | ||
+ | make_message( 'No tag file found.' ); | ||
+ | switch_win_id( src_win ); | ||
+ | goto exit; | ||
+ | } | ||
+ | if (!next_tag) { tof; } else { tag_id = global_str( 'LAST_TAG_FIND' ); | ||
+ | eol; | ||
+ | } | ||
+ | ignore_case = TRUE; | ||
+ | reg_exp_stat = TRUE; | ||
+ | if( search_fwd( '%' + tag_id + '[ |9]', 0 ) ) { | ||
+ | tag_store_find(tag_language, tag_id, backtrack_data); | ||
+ | // set_global_str('LAST_TAG_FIND', tag_id ); | ||
+ | return_int = 1; | ||
+ | if( !parse_int("/FO=", mparm_str )) { /* make_message("tag_locate " + str(g_was_maximized) + " " + file_name); | ||
+ | read_key; | ||
+ | */ RM('tag_goto /SAVEZOOM=1/OW=' + str( src_win )); | ||
+ | if( return_int == 2 ) { next_tag = TRUE; | ||
+ | goto again; | ||
+ | } } } else { make_message( 'No tag found.' ); | ||
+ | switch_win_id( src_win ); | ||
+ | return_int = 0; | ||
+ | } exit: } macro tag_parse_text { str ls[40] = tag_get_language(get_extension(file_name)); | ||
+ | mark_pos; | ||
+ | again: return_str = ""; | ||
+ | right; | ||
+ | while( (c_col > 1) && xpos(cur_char, tag_delimits, 1) ) left; | ||
+ | while( (c_col > 1) && !xpos(cur_char, tag_delimits,1) ) left; | ||
+ | /* if(( ls == "C") || (ls == "C++") ) { if( cur_char == "." ) { left; | ||
+ | while( (c_col > 1) && !xpos(cur_char, tag_delimits,1) ) left; | ||
+ | if( xpos(cur_char, tag_delimits,1 )) right; | ||
+ | return_str = shorten_str(get_word( tag_delimits )) + "</pre> | ||
}} | }} | ||
Latest revision as of 03:33, 8 September 2023
- Back to: BC Racers.
32X version
Sega logo ™ symbol
While not released in Japan, code exists to remove the ™ symbol from the introductory Sega logo if the game detects it is being played on a Japanese system.
Unused content
Hidden text
Present at 002F63A4 in the ROM is a chunk of macro code from an old version of Multi-Edit.[1]
turn_int = DlgExecute( dlg, 100, "Warning!", FILELOCK_HELPLINK, "", DLG_ScreenCenter ); DlgKill( dlg ); #ELSE RM('MEERROR^MessageBox /NW=1/T=Warning/M=Your configuration files are locked. Before unlocking them, insure that there are NOT multiple copies of Multi-Edit running with your user id.'); RM('USERIN^XMENU /B=1/X=25/Y=8/T=1/L=Action:/M=Unlock configuration files()Ignore and leave files locked()'); kill_box; #ENDIF if( return_int == 1 ) { int tr = refresh; str tstr; refresh = false; make_message('Unlocking configuration files '); working; delete_window; if( user_id == '' ) { if( (Global_Str('@DB_EXTENSION') == '') ) { tstr = me_path + '*.DB'; call unlock_files; } else { tstr = me_path + '*.' + Global_Str('@DB_EXTENSION'); call unlock_files; } tstr = me_path + '*.ME'; call unlock_files; } else { // tstr = me_path + user_id + '.USR\*.*'; return_str = '<USER_PATH>*.*'; rm('XlateCmdLine'); tstr = return_str; call unlock_files; } tstr = user_id + 'MEERR.TMP'; call unlock_files; // tstr = me_path + user_id + '*.TMP'; return_str = '<USER_PATH>*.TMP'; rm('XlateCmdLine'); tstr = return_str; call unlock_files; goto config_unlocked; unlock_files: int jx = FIRST_FILE(TSTR); while( jx == 0 ) { if(last_file_attr & 1) { if( switch_file( caps(fexpand( get_path( tstr ) + last_file_name )))) { if(file_changed) save_file; delete_window; } Set_File_Attr( get_path( tstr ) + last_file_name, last_file_attr & $FE ); } jx = next_file; } ret; config_unlocked: make_message('Configuration files unlocked.'); refresh = tr; } return(); } void ProcessCmdLine( int m = parse_int("/M=", mparm_str) ) { } macro PARMLOAD { /******************************************************************************* MULTI_EDIT MACRO Name: PARMLOAD Description: This macro is called by Multi-Edit directly after STARTUP. It takes care of loading in files and executing macros from the command line (C) Copyright 1991 by American Cybernetics, Inc. *******************************************************************************/ int parmload_mode = parse_int("/M=", mparm_str); #ifdef DEMO if( !parmload_mode) { // special stuff for the demo to support Evolve if (global_int('!EVgDialectId')) { /* make_message("!EVgDialectId=" + str(global_int('!EVgDialectId'))); read_key; */ RM("EVINIT"); } } #endif // DEMO int Load_Count,Parm_Number; int cur_id = window_id; int jx, tw, tr, mouse_initialized = FALSE ; int restore_enable = 1, no_restore = 0, Goto_L_Num = 0; str TStr, TStr2, Goto_F_Name[80], session_name[128] = ""; str wdir[512] = ""; set_global_int('MENU_LEVEL', global_int('MENU_LEVEL') + 1 ); if( !parmload_mode ) { #IFNDEF Windows make_message('Welcome to Multi-Edit V' + Version + '. Press ' + global_str('!HM_KEY1') + ' for help.'); #ELSE make_message('Welcome to Multi-Edit V' + Version + '. Press <F1> for help.'); #ENDIF refresh = false; working; RM('.STARTUP^STARTUP'); } refresh = false; working; if( !parmload_mode ) { /* Check and see if MECONFIG is read_only. If so then prompt the user, to see if he/she wants them unlocked */ tw = window_id; if( user_id == '' ) { tstr = me_path + 'MECONFIG'; } else { // 7.00.0: tstr = me_path + user_id + '.USR\MECONFIG'; // 7.00.a: consult the USER_PATH for user directory return_str = '<USER_PATH>MECONFIG'; rm('XlateCmdLine'); tstr = return_str; } /* This provides support for a default DB file extension to be configured. It is overridden if the calling macro specifies an extension */ if( (Global_Str('@DB_EXTENSION') == '') ) { Tstr = Tstr + '.DB'; } else { Tstr = Tstr + '.' + Global_Str('@DB_EXTENSION'); } if( switch_file( tstr ) ) { if( read_only ) { call init_mouse; ConfigLocked(); } } } switch_win_id( tw ); error_level = 0; Error_Level = 0; load_count = parmload_mode; Parm_Number = 1; refresh = false; while( Parm_Number <= PARAM_COUNT ) { TStr = PARAM_STR(Parm_Number); TStr = Caps(Remove_Space(TStr)); if( Xpos(Copy(Tstr,1,1),'/-',1) ) { Tstr = Copy(Tstr,2,80); if ( TStr == "CD" ) { // ldh ++Parm_Number; // ldh if ( Param_Str( Parm_Number ) != "" ) { // ldh TStr = Caps( Remove_Space( Param_Str( Parm_Number ) ) ); // ldh if ( Svl( TStr ) > 3 ) { // ldh if ( Copy( TStr, Svl( TStr ), 1 ) == "\\" ) { // ldh TStr = Copy( TStr, 1, Svl( TStr ) - 1 ); // ldh } // ldh.......} // ldh.......Change_Dir( TStr ); // ldh......} // ldh.....} // ldh.....else if ( Copy (TStr, 1, 3) == "WK=" ).....{......wdir = Copy (TStr, 4, 128);.....}.....else if ( TStr == "SM" ).....{......restore_enable = False;......no_restore = True;......RM("SESSMGR /NOSWITCH=1");.....}.....else if ( copy(tstr,1,2) == "SR" ).....{......int tid = window_id;......int tr = refresh;......refresh = false;......if(LocateDbPage("MECONFIG", "SESSMGR.CFG", false))......{.......down;.......session_name = get_line;.......restore_enable = TRUE;......}......switch_win_id(tid);......refresh = tr;.....}.....else if ((Copy( TStr, 1, 2) == "SN" ) &&.......(Global_Int('@RESTORE') == 3)) // only if encoded status files are active { // switch to named session restore_enable = True; session_name = copy(tstr,3,128); } else if ( Copy( TStr, 1, 1) == "@" ) // ldh // Load files from a file list refresh = false; restore_enable = False; Set_Global_Int('LOAD_COUNT',Load_Count); int tid = window_id; create_window; window_attr = 0x81; tstr = copy(tstr,2,128); load_file( tstr ); int tag_win = window_id; make_message(""); if(error_level) { call init_mouse; rm("messagebox /B=2/T=Error/M=List file " + tstr + " not found."); } else { switch_win_id( tid ); RM('LDFILES /NRL=1/TAG=' + str(tag_win) + '/DE=1/CW=2/LC=' + str(load_count)); Load_Count = return_int; if( (Load_Count == 1) ) { /* Save the first file loaded so that if the user specifies a line number to go to, we can do it. */ Goto_F_Name = File_Name; } tid = window_id; } refresh = false; if( switch_win_id( tag_win )) delete_window; switch_win_id(tid); } else if( TStr == 'NR' ) { if( !parmload_mode ) { restore_enable = False; no_restore = TRUE; } } e
Present at 002FF4F2 is another chunk of this macro code.
/L=6/C=4/ATTR= D[=.=.= Version 5 /L=7/C=20=.=.= Copyright(c) 1988, 1993 by American Cybernetics, Inc. /L=9/C=2=.=.= Multi-Edit is protected under United States copyright law. Copies may be made for the puro NOT locate source * /TF=filename The tag filename to use * (do not auto determine) -------------------------------------------------- */ { str tag_id = parse_str("/TAGID=",mparm_str), tag_language = tag_get_language(get_extension(file_name)), backtrack_data; int src_win = window_id, tag_win, force_tag_id = (tag_id != ""), next_tag = parse_int("/NEXT=", mparm_str); g_was_maximized = IsZoomed(window_Handle); backtrack_data = tag_init_backtrk(); again: refresh = false; // If we are doing a NEXT tag then do not start from the top, // and use the last tag instead of the current word if ((!next_tag) && (!force_tag_id)) { if( parse_int("/MAN=",mparm_str)) { return_str = ""; rm("USERIN^QUERYBOX /P=Enter Tag:/W=32/ML=80/T=Multi-Tags/H="+TAGPROMPT_HELPLINK); if( return_int <= 0 ) goto exit } else { rm("tag_parse_text"); tag_id = return_str; if( tag_id == "" ) { make_message( "No valid tag." ); switch_win_id( src_win ); goto exit; } } rm( 'tag_find_file /TF=' + parse_str("/TF=", mparm_str) ); if( !return_int ) { make_message( 'No tag file found.' ); switch_win_id( src_win ); goto exit; } if (!next_tag) { tof; } else { tag_id = global_str( 'LAST_TAG_FIND' ); eol; } ignore_case = TRUE; reg_exp_stat = TRUE; if( search_fwd( '%' + tag_id + '[ |9]', 0 ) ) { tag_store_find(tag_language, tag_id, backtrack_data); // set_global_str('LAST_TAG_FIND', tag_id ); return_int = 1; if( !parse_int("/FO=", mparm_str )) { /* make_message("tag_locate " + str(g_was_maximized) + " " + file_name); read_key; */ RM('tag_goto /SAVEZOOM=1/OW=' + str( src_win )); if( return_int == 2 ) { next_tag = TRUE; goto again; } } } else { make_message( 'No tag found.' ); switch_win_id( src_win ); return_int = 0; } exit: } macro tag_parse_text { str ls[40] = tag_get_language(get_extension(file_name)); mark_pos; again: return_str = ""; right; while( (c_col > 1) && xpos(cur_char, tag_delimits, 1) ) left; while( (c_col > 1) && !xpos(cur_char, tag_delimits,1) ) left; /* if(( ls == "C") || (ls == "C++") ) { if( cur_char == "." ) { left; while( (c_col > 1) && !xpos(cur_char, tag_delimits,1) ) left; if( xpos(cur_char, tag_delimits,1 )) right; return_str = shorten_str(get_word( tag_delimits )) + "
References
- ↑ https://tcrf.net/BC_Racers_(32X) (Wayback Machine: http-s:- :)
BC Racers | |
---|---|
Main page | Comparisons | Maps | Hidden content | Magazine articles | Reception | Region coding | Technical information |