Prev: 60348 Up: Map Next: 60580
60360: Display High Score Entry Screen
Used by the routines at Check_Any_Key_During_Display and Attract_Mode_Loop.
Initialises the high score entry screen: clears the display, prints the option header from Messaging_SelectOptions, and renders the current score entries with their cursor markers. Runs a 75-frame input loop allowing keyboard and joystick adjustment of the three score entry fields via Adjust_Score_Field_Cursor and Adjust_Name_Entry_Cursor. After name entry, redraws the final score table and cycles the display for 50 frames before jumping to the attract mode at Attract_Mode_Loop.
Display_High_Score_Entry_Screen 60360 XOR A Clear the display with attribute BLACK via Initialise_Display_And_Border.
60361 CALL Initialise_Display_And_Border
60364 CALL Draw_Colour_Border Initialise the scrolling display via Draw_Colour_Border.
60367 CALL Cycle_Border_Colour Advance the colour cycle via Cycle_Border_Colour.
60370 LD HL,61030 Call PrintMessaging using Messaging_SelectOptions.
60373 CALL PrintMessaging
60376 LD A,6 Write 6 to *50432.
60378 LD (50432),A
60381 LD A,70 Write 70 to *50433.
60383 LD (50433),A
60386 LD A,4 Write 4 to *50434.
60388 LD (50434),A
60391 LD A,(50429) Load the first score entry cursor from 50429.
60394 LD B,25 Set the column position to 25.
60396 CALL Render_Score_Character Render the first score entry character via Render_Score_Character.
60399 LD A,(50430) Load the second score entry cursor from 50430.
60402 CALL Highlight_Score_Entry_Cell Highlight the second score entry character via Highlight_Score_Entry_Cell.
60405 LD A,(50431) Load the third score entry cursor from 50431.
60408 LD B,73 Set the column position to 73.
60410 CALL Render_Score_Character Render the third score entry character via Render_Score_Character.
60413 XOR A Clear A.
60414 LD B,153 Set the column position to 153.
60416 CALL Render_Score_Character Clear the bottom score entry position via Render_Score_Character.
60419 EXX Switch to the alternate registers.
60420 LD B,75 Set the name entry frame counter to 75 in B'.
Per-frame name entry loop: services controls and handles character selection for all three score entry fields each frame.
High_Score_Entry_Loop 60422 EXX Switch back to the main registers for this frame.
60423 LD C,100 Set the frame delay count to 100.
60425 CALL Display_Loop_Delay Run the per-frame timing delay via Display_Loop_Delay.
60428 CALL CheckBreakKey Check for the BREAK key combination via CheckBreakKey.
60431 CALL Check_S_Key_During_Display Check for the S key via Check_S_Key_During_Display.
60434 CALL Save_Or_Load_High_Scores Check for tape save/load keys (J/L) via Save_Or_Load_High_Scores.
60437 CALL Scan_And_Cycle_Screen_Attributes Read the joystick input via Scan_And_Cycle_Screen_Attributes.
60440 LD DE,50432 Point DE to the score entry columns at 50432.
60443 LD IX,50435 Point IX to the score entry parameters at 50435.
60447 CALL Scan_Score_Display_Attributes Update the score display via Scan_Score_Display_Attributes.
60450 CALL Cycle_Border_Colour Advance the colour cycle via Cycle_Border_Colour.
60453 CALL 654 Call KEY_SCAN.
60456 JR NZ,High_Score_Entry_Loop_End Skip character field handling if no player input is registered.
60458 INC E Advance the character selection index.
60459 JR Z,High_Score_Entry_Loop_End Skip to High_Score_Entry_Loop_End if the selection index has overflowed.
60461 DEC E Step the selection index back by one.
60462 LD B,2 Set the field count to 2.
60464 LD A,(50432) Load the first cursor column from 50432 into C.
60467 LD C,A
60468 LD A,(50429) Load the first cursor position from 50429 into D.
60471 LD D,A
60472 LD IX,60968 Point IX to the first character table at 60968.
60476 CALL Adjust_Score_Field_Cursor Adjust the first score entry field via Adjust_Score_Field_Cursor.
60479 LD A,D Write the updated first cursor position back to 50429.
60480 LD (50429),A
60483 JR Z,High_Score_Entry_Loop_End Skip to High_Score_Entry_Loop_End if only the first field was updated.
60485 LD B,9 Set the field count to 9.
60487 LD A,(50433) Load the second cursor column from 50433 into C.
60490 LD C,A
60491 LD A,(50430) Load the second cursor position from 50430 into D.
60494 LD D,A
60495 LD IX,60974 Point IX to the second character table at 60974.
60499 CALL Adjust_Name_Entry_Cursor Adjust the second score entry field via Adjust_Name_Entry_Cursor.
60502 LD A,D Write the updated second cursor position back to 50430.
60503 LD (50430),A
60506 JR Z,High_Score_Entry_Loop_End Skip to High_Score_Entry_Loop_End if only the second field was updated.
60508 LD B,6 Set the field count to 6.
60510 LD A,(50434) Load the third cursor column from 50434 into C.
60513 LD C,A
60514 LD A,(50431) Load the third cursor position from 50431 into D.
60517 LD D,A
60518 LD IX,61001 Point IX to the third character table at Score_Entry_Field_Three_Table.
60522 CALL Adjust_Score_Field_Cursor Adjust the third score entry field via Adjust_Score_Field_Cursor.
60525 LD A,D Write the updated third cursor position back to 50431.
60526 LD (50431),A
High_Score_Entry_Loop_End 60529 EXX Switch to the alternate registers.
60530 DJNZ High_Score_Entry_Loop Decrement the frame counter and loop back to High_Score_Entry_Loop.
60532 EXX Switch back to the main registers.
This entry point is used by the routine at Save_Or_Load_High_Scores.
Name entry complete: clear the display and redraw the final score table before the display cycling phase.
High_Score_Display 60533 XOR A Clear the display with attribute BLACK via Initialise_Display_And_Border.
60534 CALL Initialise_Display_And_Border
60537 CALL Draw_Colour_Border Initialise the scrolling display via Draw_Colour_Border.
60540 CALL Cycle_Border_Colour Advance the colour cycle via Cycle_Border_Colour.
60543 CALL Display_High_Score_Screen Render the high score table via Display_High_Score_Screen.
60546 EXX Switch to the alternate registers.
60547 LD B,50 Set the display frame counter to 50 in B'.
Per-frame display cycling loop: services controls and colour attributes for 50 frames before returning to the attract mode.
High_Score_Display_Loop 60549 EXX Switch back to the main registers for this frame.
60550 LD C,100 Set the frame delay count to 100.
60552 CALL Display_Loop_Delay Run the per-frame timing delay via Display_Loop_Delay.
60555 CALL CheckBreakKey Check for the BREAK key combination via CheckBreakKey.
60558 CALL Check_S_Key_During_Display Check for the S key via Check_S_Key_During_Display.
60561 CALL Save_Or_Load_High_Scores Check for tape save/load keys (J/L) via Save_Or_Load_High_Scores.
60564 CALL Check_Any_Key_During_Display Restart the high score display if any key is held via Check_Any_Key_During_Display.
60567 CALL Scan_And_Cycle_Screen_Attributes Read the joystick input via Scan_And_Cycle_Screen_Attributes.
60570 CALL Cycle_Border_Colour Advance the colour cycle via Cycle_Border_Colour.
60573 EXX Switch to the alternate registers.
60574 DJNZ High_Score_Display_Loop Decrement the frame counter and loop back to High_Score_Display_Loop.
60576 EXX Switch back to the main registers.
60577 JP Attract_Mode_Loop Jump to the attract mode loop at Attract_Mode_Loop.
Prev: 60348 Up: Map Next: 60580