aboutsummaryrefslogtreecommitdiff
path: root/defender.info
diff options
context:
space:
mode:
Diffstat (limited to 'defender.info')
-rw-r--r--defender.info75
1 files changed, 68 insertions, 7 deletions
diff --git a/defender.info b/defender.info
index 58b2e95..519fadb 100644
--- a/defender.info
+++ b/defender.info
@@ -12,8 +12,13 @@ label { name "rtclok_ok"; addr $800b; };
label { name "init_work_ram"; addr $a268; };
label { name "start_game"; addr $8100; comment "..."; };
label { name "show_game_type"; addr $811f; comment "draw the text for e.g. ONE PLAYER EASY"; };
+label { name "sgt_nextchar"; addr $813d; };
+label { name "sgt_done"; addr $8147; };
label { name "draw_title_text"; addr $8259; comment "draw the text for DEFENDER/SELECT GAME AND PRESS THE START BUTTON"; };
-label { name "draw_demo_text"; addr $8963; comment "draw the text for DEFENDER c 1982 ATARI, during the demo game"; };
+label { name "draw_demo_text"; addr $895c; comment "draw the text for DEFENDER c 1982 ATARI, during the demo game"; };
+label { name "ddt_draw"; addr $8963; };
+label { name "ddt_nextchar"; addr $8980; };
+label { name "ddt_done"; addr $898b; };
label { name "dtt_lo"; addr $8267; comment "lda #<title_text"; };
label { name "dtt_hi"; addr $826b; comment "lda #>title_text"; };
label { name "dtt_loop"; addr $8271; };
@@ -21,7 +26,7 @@ label { name "dtt_color"; addr $8279; comment "multicolor support. bytes with $F
label { name "dtt_print"; addr $8288; };
label { name "dtt_inc_ptr"; addr $828b; };
label { name "dtt_done"; addr $8294; };
-label { name "check_consol"; addr $baa0; comment "see if start or select are pressed"; };
+label { name "read_consol"; addr $baa0; comment "see if start or select are pressed, set flags"; };
label { name "start_pressed"; addr $bac6; comment "user pressed start key, ignore if game is playing & not paused"; };
label { name "consol_done"; addr $bab4; comment "several code paths jump here instead of doing their own RTS"; };
label { name "ignore_start"; addr $bad1; comment "don't handle start key while game is playing & not paused"; };
@@ -50,8 +55,12 @@ label { name "level_ok"; addr $83d7; comment "ramp up the speed on odd-numbered
label { name "set_game_type"; addr $80e6; };
label { name "update_title_colors"; addr $809a; comment "rotate colors"; };
label { name "update_title_sfx"; addr $80a6; comment "alter the drone sound's pitch"; };
-label { name "title_fx_ok"; addr $80b7; };
+label { name "tsi_show_gt"; addr $8092; };
+label { name "tsi_wait_to_draw"; addr $8095; };
+label { name "tsi_delay"; addr $80c8; };
+label { name "tsi_check_start"; addr $80b7; };
label { name "title_screen_idle"; addr $8078; comment "play & fade the drone while we wait for the user to press select or start"; };
+label { name "tsi_text"; addr $808f; comment "play & fade the drone while we wait for the user to press select or start"; };
label { name "init_title_screen"; addr $8031; };
label { name "init_drone"; addr $8d79; comment "start the drone sound you hear at the title screen & when starting/ending a level. Also silence channel 2 (the engine noise). In BASIC this would be: SOUND 1,0,0,0:SOUND 2,255,10,15:SOUND 3,254,10,15"; };
label { name "game_on"; addr $8369; comment "called when start button is pressed from title screen or pause mode"; };
@@ -99,12 +108,14 @@ label { name "hsp_loop"; addr $8899; };
label { name "hsp_check_demo"; addr $88ae; comment "don't ever kill the 'player' in demo mode (game_type==0)"; };
label { name "check_hyperspace_fatal"; addr $88b2; comment "kill player if RANDOM >= $AA (in other words, 33% of the time!)"; };
label { name "hsp_done"; addr $88bc; };
-label { name "draw_starfield"; addr $a832; comment "XXX don't know how this works yet"; };
+label { name "animate_starfield"; addr $a832; comment "XXX don't know how this works yet"; };
label { name "hyperspace_implosion"; addr $97e7; comment "looks like the ship explosion, but in reverse"; };
label { name "ship_explosion"; addr $97d9; comment "particles"; };
label { name "init_splosion"; addr $97f7; comment "calculate (ex|im)plosion particles for the player ship"; };
label { name "animate_explosion"; addr $9830; };
+label { name "ae_loop"; addr $983d; };
label { name "animate_implosion"; addr $9868; };
+label { name "ai_loop"; addr $9875; };
label { name "animate_splosion"; addr $9895; comment "called multiple times by animate_(im|ex)plosion. uses particles set up by init_splosion"; };
label { name "as_done"; addr $9961; };
label { name "is_loop"; addr $97f9; };
@@ -113,8 +124,20 @@ label { name "draw_scanner_border_and_planet"; addr $9fb1; comment "XXX don't kn
label { name "add_cursprite_points"; addr $a7ae; comment "add points to score based on what kind of enemy we killed. does not include points for rescued humans nor end-of-level bonus."; };
label { name "add_points"; addr $a7b2; comment "this entry point takes a sprite type in A, used for end-of-level bonus (and...?)"; };
label { name "draw_scores"; addr $9442; comment "draw score digits in the HUDs for both players (but not lives nor smartbombs)"; };
-label { name "draw_2_score_digits"; addr $9483; comment "called 4 times for the 4 bytes of score. does division by 10."; };
-label { name "flash_score"; addr $93bc; comment "flash the score of the current player"; };
+label { name "dsc_ok"; addr $9458; };
+label { name "draw_score_2p"; addr $93e2; comment "draw current player's score in 2p mode. does nothing in 1p mode!"; };
+label { name "ds2p_p1"; addr $9426; comment "draw player 1's score since he's the current player"; };
+label { name "ds2_ok"; addr $93f8; };
+label { name "print_number"; addr $9483; comment "print number in A, at current cursor pos. range 0-99 (0-$63). does division by 10. suppress leading zeroes if leading_zero_flag is clear."; };
+label { name "pn_div10"; addr $9488; };
+label { name "pn_div10_loop"; addr $948d; };
+label { name "pn_draw"; addr $94b5; };
+label { name "pn_skip"; addr $94b8; };
+label { name "pn_div10_ok"; addr $949e; };
+label { name "clear_score"; addr $93bc; comment "print 7 spaces over the current player's score. used to flash the score of the current player"; };
+label { name "fs_set_y"; addr $93d2; };
+label { name "fs_next_char"; addr $93d9; };
+label { name "fs_done"; addr $93e1; };
label { name "copy_code_to_ram"; addr $a291; comment "copy is done because the code is self-modifying"; };
label { name "clr_ram_sprites_loop"; addr $a2aa; };
label { name "crsl_ok"; addr $a2b4; };
@@ -155,9 +178,22 @@ label { name "sbf_loop"; addr $9c0f; };
label { name "spawn_sprite"; addr $abed; comment "XXX does this apply to humanoids too?"; };
label { name "nl_wtf"; addr $83cb; comment "this branch should never be taken (means level was $FF, but it's clamped to $63 below)"; };
label { name "nl_drone"; addr $83ea; };
+label { name "nl_next_stars"; addr $83f8; };
+label { name "nl_delay"; addr $8414; };
label { name "level_cleared"; addr $8427; comment "decide whether or not to resurrect dead humans"; };
label { name "dont_repopulate"; addr $843f; };
label { name "div_5_loop"; addr $842c; };
+label { name "clear_enemy_explosions"; addr $845b; };
+label { name "cex_loop"; addr $845f; };
+label { name "prep_next_level"; addr $8465; comment "clean up game state, show prompt if in 2p mode"; };
+label { name "pnl_store_trig"; addr $8478; comment "store either TRIG0 or TRIG1"; };
+label { name "pnl_clear_player_shots"; addr $849a; };
+label { name "check_consol"; addr $8503; comment "handle start/select keys during gameplay (ignore if not paused)"; };
+label { name "cc_chk_start"; addr $8511; };
+label { name "cc_chk_keyboard"; addr $851c; comment "in demo mode, pressing any key returns to the title screen"; };
+label { name "check_paused"; addr $852a; };
+label { name "wait_draw_ok"; addr $853f; };
+label { name "check_spawn"; addr $854c; comment "see if it's time to spawn a lander wave or a baiter yet"; };
label { name "draw_p1_lives_and_bombs"; addr $86b0; comment "update HUD"; };
label { name "draw_p2_lives_and_bombs"; addr $8780; comment "update HUD"; };
label { name "move_ship"; addr $85c9; comment "only in non-demo game"; };
@@ -201,6 +237,16 @@ label { name "no_vert_move"; addr $ad98; comment "ship not moving up or down XXX
label { name "move_up"; addr $ad90; comment "XXX how does this work?"; };
label { name "move_down"; addr $ad94; comment "XXX how does this work?"; };
label { name "demo_logic"; addr $88bd; comment "animate the demo-game ship"; };
+label { name "dl_hyperspace"; addr $894c; };
+label { name "dl_smartbomb"; addr $8952; };
+label { name "dl_done"; addr $8959; };
+label { name "dl_down"; addr $891c; comment "move the ship down"; };
+label { name "dl_vert_delta"; addr $88f0; comment "move the ship up or down, towards the sprite we're considering. actual movement ends up as the sum of all the calls here"; };
+label { name "dl_vert_move"; addr $88dd; };
+label { name "dl_vm_next"; addr $88e4; };
+label { name "dl_trigger"; addr $8946; };
+label { name "dl_check_move"; addr $88d1; comment "is it time to move the ship?"; };
+label { name "dl_check_hyper"; addr $892b; };
label { name "printchar"; addr $972e; comment "print the DSCII text character in the A reg"; };
label { name "pch_done"; addr $9757; };
label { name "print_copyright"; addr $9758; comment "print copyright symbol ($c0). it's double-wide, so 2 glyphs"; };
@@ -223,6 +269,14 @@ label { name "ab_next_sprite"; addr $9698; };
label { name "calc_bonus_index"; addr $96c7; comment "A = 7 + (level < 6 ? level : 5); // index into score_points_table"; };
label { name "cbi_add7"; addr $96cf; comment "add 7 because that's where the bonus amounts start, in score_points_table"; };
label { name "save_p1_state"; addr $89b9; comment "save game state to p1_sav_* area"; };
+label { name "sp1_loop"; addr $89bb; };
+label { name "sp1_skip"; addr $89cb; };
+label { name "sp2_loop"; addr $8a0f; };
+label { name "sp2_skip"; addr $8a1f; };
+label { name "lp1_loop"; addr $8a63; };
+label { name "lp1_skip"; addr $8a73; };
+label { name "lp2_loop"; addr $8ab7; };
+label { name "lp2_skip"; addr $8ac7; };
label { name "save_p2_state"; addr $8a0d; comment "save game state to p2_sav_* area"; };
label { name "load_p1_state"; addr $8a61; comment "restore game state from p1_sav_* area"; };
label { name "load_p2_state"; addr $8ab5; comment "restore game state from p2_sav_* area"; };
@@ -233,8 +287,13 @@ label { name "delay_loop"; addr $8874; comment "takes delay time in A. only ever
label { name "dl_wait"; addr $8876; };
label { name "prompt_done"; addr $84ff; comment "either the prompt screen is finished, or we were in single-player mode & didn't need it"; };
label { name "print_p1_text"; addr $8b09; comment "print PLAYER ONE"; };
+label { name "pp1_next"; addr $8b15; };
+label { name "pp1_done"; addr $8b20; };
label { name "print_p2_text"; addr $8b3e; comment "print PLAYER TWO"; };
+label { name "pp2_next"; addr $8b4a; };
+label { name "pp2_done"; addr $8b55; };
label { name "clear_prompt_text"; addr $8b73; comment "print 40 spaces over the PLAYER (ONE|TWO) message"; };
+label { name "cpt_next_char"; addr $8b7f; };
# not sure 'spawn' is quite the right word here
label { name "spawn_humanoid"; addr $aee6; comment "'spawn' not the right word. this does all the logic for humanoids (falling, hitting the ground)"; };
label { name "spawn_lander"; addr $b08e; };
@@ -251,6 +310,7 @@ label { name "baiter_check"; addr $bb7b; comment "decide whether to spawn a bait
label { name "bc_done"; addr $bba2; };
label { name "bc_spawn"; addr $bb8d; comment "yes, spawn it"; };
label { name "get_random"; addr $8cf2; comment "variant of an LFSR. could have just use 'lda RANDOM', this is likely an artifact of Baker's Apple II heritage. Returns 'random' number in A."; };
+label { name "get_spawn_pos"; addr $8d0c; comment "pick a random, valid spot"; };
label { name "detonate_smartbomb"; addr $8bac; };
label { name "smartbomb_kill_stuff"; addr $8bd0; comment "kill every enemy on the screen"; };
label { name "kill_next"; addr $8bbd; };
@@ -334,6 +394,7 @@ label { name "screen_ptr"; addr $c0; size 2; comment "pointer to screen memory,
# non-zp data addresses
label { name "enemy_explosion_table"; addr $052b; size 128; comment "4 bytes per entry, 32 entries"; };
label { name "splosion_particles"; addr $0400; size 256; comment "page full of random garbage, generated by init_splosion, used/altered by animate_plosion"; };
+label { name "leading_zero_flag"; addr $0510; comment "bit 7 clear = skip leading zeroes in print_number. set = print leading zeroes ('01' instead of '1'"; };
label { name "plosion_x_start"; addr $0507; };
label { name "plosion_y_start"; addr $0508; };
label { name "plosion_x"; addr $0505; };
@@ -437,7 +498,7 @@ range { name "gttxt_2p_normal"; start $820f; end $8233; type bytetable; comment
range { name "gttxt_2p_hard"; start $8234; end $8258; type bytetable; comment "' T W O P L A Y E R H A R D '"; };
range { name "title_text"; start $8295; end $8328; type bytetable; comment "cF, c5 are color codes. 'cF D E F E N D E RnlnlnlnlnlnlcF S E L E C T G A M E A N D P R E S Snlnl T H E S T A R T B U T T O Nnlnlnlnlc5 c) 1 9 8 2 A T A R I'"; };
range { name "table_8329"; start $8329; end $8368; type bytetable; comment "is this used at all?"; };
-range { name "power_10_table"; start $9507; end $9509; type bytetable; comment "1, 10, 100 aka 10*0, 10*1, 10*2. used by draw_2_score_digits. last byte appears to never get read."; };
+range { name "power_10_table"; start $9507; end $9509; type bytetable; comment "1, 10, 100 aka 10*0, 10*1, 10*2. used by print_number. last byte appears to never get read."; };
range { name "font"; start $950a; end $9641; type bytetable; comment "13 4x8 glyphs, 0 thru 9, space, left & right halves of copyright symbol. 2bpp, but only one color used (11). really 3x8 as rightmost column is blank (for spacing) in all glyphs. height is the full 8 (no blanks for spacing)."; };
label { name "font_letters"; addr $9572; comment "uppercase, 26 4x8 glyphs but no blank column for spacing (full 4x8). also J Q Z glyphs are graphics of some kind."; };
range { name "demo_text"; start $898f; end $89b8; type bytetable; comment "' D E F E N D E R c 1982 A T A R I '"; };