Routines |
Prev: $BE08 | Up: Map | Next: $BFF5 |
$BE09 | JSR $2E13 | Prepare for a new game. | ||
$BE0C | LDX #$00 | X will count the characters from little boy no. 1 to ERIC. | ||
$BE0E | LDY #$01 | The second byte of a character's buffer holds his x-coordinate. | ||
$BE10 | LDA #$60 | Prepare to address the character buffers, starting with little boy no. 1's at $7860. | ||
$BE12 | STA $50 | |||
$BE14 | LDA #$78 | |||
$BE16 | STA $51 | |||
$BE18 | TXA | Set A to 0. | ||
$BE19 | STA ($50),Y | Set the x-coordinate of every character to 0. Given that the leftmost column of the skool on screen has been initialised to 32, this places the character off screen to the left. | ||
$BE1B | INC $51 | |||
$BE1D | NOP | |||
$BE1E | NOP | |||
$BE1F | NOP | |||
$BE20 | NOP | |||
$BE21 | NOP | |||
$BE22 | INX | |||
$BE23 | CPX #$15 | |||
$BE25 | BNE $BE19 | |||
$BE27 | LDA #$A9 | Change the instructions at $333F and $334B to 'LDA #$06' and 'LDA #$00'. This makes the routine at $3326 draw blank blue tiles. | ||
$BE29 | STA $333F | |||
$BE2C | STA $334B | |||
$BE2F | LDA #$06 | |||
$BE31 | STA $3340 | |||
$BE34 | LDA #$00 | |||
$BE36 | STA $334C | |||
$BE39 | JSR $3012 | Bring a blank screen into view. | ||
$BE3C | LDA #$44 | $4468 is the address of the message 'Do you want to put in'. Store it at $D6. | ||
$BE3E | STA $D7 | |||
$BE40 | LDA #$68 | |||
$BE42 | STA $D6 | |||
$BE44 | LDA #$10 | The message will be 16 character cells wide. Store this width at $9D. | ||
$BE46 | STA $9D | |||
$BE48 | LDA #$80 | Store the number of bytes to copy from the text graphic buffer at $31. | ||
$BE4A | STA $31 | |||
$BE4C | JSR $BFF5 | Write this message into the text graphic buffer and centre it. | ||
$BE4F | LDX #$14 | These are the coordinates at which to print the message. | ||
$BE51 | LDY #$01 | |||
$BE53 | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BE56 | LDA #$8D | $8DE8 is the address of the message 'your own names Y/N?'. Store it at $D6. | ||
$BE58 | STA $D7 | |||
$BE5A | LDA #$E8 | |||
$BE5C | STA $D6 | |||
$BE5E | JSR $BFF5 | Write this message into the text graphic buffer and centre it. | ||
$BE61 | LDX #$14 | These are the coordinates at which to print the message. | ||
$BE63 | LDY #$02 | |||
$BE65 | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BE68 | LDA #$00 | Initialise the keyboard reading at $4C to 0. | ||
$BE6A | STA $4C | |||
$BE6C | LDA $4C | Pick up the keyboard reading at $4C. | ||
$BE6E | TAY | Transfer the reading to Y. | ||
$BE6F | CPY #$59 | Was 'Y' pressed? | ||
$BE71 | BEQ $BE7A | Branch if so. | ||
$BE73 | CPY #$4E | Was 'N' pressed? | ||
$BE75 | BNE $BE6C | Branch back if not to get another keyboard reading. | ||
$BE77 | JMP $BFDB | Jump forward. | ||
The player has pressed 'Y' to change the names.
|
||||
$BE7A | LDA #$8D | $8D68 is the address of the message 'CAST OF CHARACTERS'. Store it at $D6. | ||
$BE7C | STA $D7 | |||
$BE7E | LDA #$68 | |||
$BE80 | STA $D6 | |||
$BE82 | JSR $BFF5 | Write this message into the text graphic buffer and centre it. | ||
$BE85 | LDX #$14 | These are the coordinates at which to print the message. | ||
$BE87 | LDY #$05 | |||
$BE89 | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BE8C | LDA #$14 | Set the current character number at $60 to $14 (ERIC). | ||
$BE8E | STA $60 | |||
$BE90 | JSR $3279 | Copy the current character's buffer into page 0. | ||
$BE93 | LDA $60 | Pick up the current character number from $60. | ||
$BE95 | CMP #$14 | Is it $14 (ERIC)? | ||
$BE97 | BNE $BE9C | Branch if not. | ||
$BE99 | SEC | Set the carry flag to prepare for subtraction. | ||
$BE9A | SBC #$02 | Now A=$12 for ERIC. | ||
$BE9C | STA $52 | Store the modified character number ($0B-$12) at $52. | ||
$BE9E | LDA #$12 | Subtract this modified character number from $12 and then add $90. Now A holds $90-$97, the MSB of the address of the message that describes the current character. | ||
$BEA0 | SEC | |||
$BEA1 | SBC $52 | |||
$BEA3 | CLC | |||
$BEA4 | ADC #$90 | |||
$BEA6 | STA $D7 | Store this address ($9068, $9168, $9268, $9368, $9468, $9568, $9668 or $9768) at $D6. | ||
$BEA8 | LDA #$68 | |||
$BEAA | STA $D6 | |||
$BEAC | JSR $BFF5 | Write the message into the text graphic buffer and centre it. | ||
$BEAF | LDX #$14 | These are the coordinates at which to print the message. | ||
$BEB1 | LDY #$08 | |||
$BEB3 | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BEB6 | LDA $52 | Pick up the modified character number ($0B-$12) from $52. | ||
$BEB8 | SEC | Set the carry flag to prepare for subtraction. | ||
$BEB9 | SBC #$0B | Now A=$00-$07. | ||
$BEBB | TAX | Transfer this character identifier to X. | ||
$BEBC | LDA $90E8,X | Pick up the corresponding character name message address LSB from the table at $90E8 and store it at $72. | ||
$BEBF | STA $72 | |||
$BEC1 | STA $D6 | Now the vector at $D6 holds the address of the character's name. | ||
$BEC3 | LDA #$47 | |||
$BEC5 | STA $D7 | |||
$BEC7 | JSR $BFF5 | Write the character's name into the text graphic buffer and centre it. | ||
$BECA | LDX #$14 | These are the coordinates at which to print the character's name. | ||
$BECC | LDY #$11 | |||
$BECE | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BED1 | LDA #$1C | Set the character's x-coordinate to 28. | ||
$BED3 | STA $FC | |||
$BED5 | LDA #$0A | Set the character's y-coordinate to 10. | ||
$BED7 | STA $FB | |||
$BED9 | LDA #$40 | Initialise the counter at $AD. | ||
$BEDB | STA $AD | |||
$BEDD | LDA #$32 | Set the character's destination x-coordinate to 50 (approximately the centre of the screen). | ||
$BEDF | STA $AC | |||
$BEE1 | JSR $33BF | Restore the character's buffer from page 0. | ||
$BEE4 | JSR $3279 | Copy the character's buffer into page 0. | ||
$BEE7 | JSR $137B | Send the character one step along the way to the centre of the screen. | ||
$BEEA | LDX #$3F | Pause briefly. | ||
$BEEC | LDY #$FF | |||
$BEEE | DEY | |||
$BEEF | BNE $BEEE | |||
$BEF1 | DEX | |||
$BEF2 | BNE $BEEC | |||
$BEF4 | JSR $33BF | Restore the character's buffer from page 0. | ||
$BEF7 | JSR $31EA | Update the display. | ||
$BEFA | LDA $AD | Decrement the counter at $AD. | ||
$BEFC | BNE $BEE4 | Branch back unless it's zero now. | ||
$BEFE | LDA #$8E | Store $8E68 (PRESS'C'TO CHANGE NAME) at $D6. | ||
$BF00 | STA $D7 | |||
$BF02 | LDA #$68 | |||
$BF04 | STA $D6 | |||
$BF06 | JSR $BFF5 | Write this message into the text graphic buffer and centre it. | ||
$BF09 | LDX #$14 | These are the coordinates at which to print the message. | ||
$BF0B | LDY #$13 | |||
$BF0D | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BF10 | LDA #$00 | Reset the keyboard reading at $4C to zero. | ||
$BF12 | STA $4C | |||
$BF14 | LDA $4C | Wait for a keypress. | ||
$BF16 | TAY | |||
$BF17 | BEQ $BF14 | |||
$BF19 | CPY #$43 | Was it 'C'? | ||
$BF1B | BEQ $BF20 | Branch if so. | ||
$BF1D | JMP $BFA1 | Otherwise jump forward. | ||
'C' was pressed to change the character's name.
|
||||
$BF20 | JSR $8FE8 | Wipe the character's name. | ||
$BF23 | NOP | |||
$BF24 | LDA #$68 | Change the address at $D6 to $8F68 (ENTER NEW NAME). | ||
$BF26 | STA $D6 | |||
$BF28 | JSR $BFF5 | Write this message into the text graphic buffer and centre it. | ||
$BF2B | LDX #$14 | These are the coordinates at which to print the message. | ||
$BF2D | LDY #$13 | |||
$BF2F | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BF32 | LDX #$0B | Clear the character name entry buffer at $4700. | ||
$BF34 | LDA #$00 | |||
$BF36 | STA $4700,X | |||
$BF39 | DEX | |||
$BF3A | BPL $BF36 | |||
$BF3C | LDA #$47 | Store the address of the (empty) character name entry buffer at $D6. | ||
$BF3E | STA $D7 | |||
$BF40 | LDA #$00 | |||
$BF42 | STA $D6 | |||
$BF44 | JSR $BFF5 | Write this blank message into the text graphic buffer and centre it. | ||
$BF47 | LDX #$14 | These are the coordinates at which to print the message. | ||
$BF49 | LDY #$11 | |||
$BF4B | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BF4E | LDY #$00 | Y will counter the number of letters entered so far. | ||
$BF50 | LDA #$00 | Initialise the keyboard reading at $4C to 0. | ||
$BF52 | STA $4C | |||
$BF54 | LDA $4C | Pick up the keyboard reading at $4C. | ||
$BF56 | BEQ $BF54 | Branch back until a key has been pressed. | ||
$BF58 | TAX | Transfer the keypress code to X. | ||
$BF59 | CPX #$20 | Was SPACE pressed? | ||
$BF5B | BEQ $BF69 | Branch if so. | ||
$BF5D | CPX #$0D | Was RETURN pressed? | ||
$BF5F | BEQ $BEFE | Branch if so. | ||
$BF61 | CPX #$41 | Is the character code less than $41 ('A')? | ||
$BF63 | BCC $BF50 | Branch back if so to get the next keypress. | ||
$BF65 | CPX #$5B | Is the character code greater than $5A ('Z')? | ||
$BF67 | BCS $BF50 | Branch back if so to get the next keypress. | ||
$BF69 | CPY #$0C | Have 12 letters already been entered? | ||
$BF6B | BEQ $BF50 | Branch back if so to get the next keypress. | ||
$BF6D | TXA | Transfer the keypress code back to A and store it in the character name buffer at $4700. | ||
$BF6E | STA $4700,Y | |||
$BF71 | INY | Next letter. | ||
$BF72 | TYA | Save the letter counter on the stack. | ||
$BF73 | PHA | |||
$BF74 | LDA #$47 | Store the address of the character name entry buffer ($4700) at $D6. | ||
$BF76 | STA $D7 | |||
$BF78 | LDA #$00 | |||
$BF7A | STA $D6 | |||
$BF7C | JSR $BFF5 | Write the name entered so far into the text graphic buffer and centre it. | ||
$BF7F | LDX #$14 | These are the coordinates at which to print the name. | ||
$BF81 | LDY #$11 | |||
$BF83 | JSR $3868 | Copy the text graphic buffer to the screen. | ||
$BF86 | PLA | Restore the letter counter to Y. | ||
$BF87 | TAY | |||
$BF88 | LDA #$47 | Store the address of the character name entry buffer ($4700) at $4E and the address of the character's existing name at $50. | ||
$BF8A | STA $4F | |||
$BF8C | STA $51 | |||
$BF8E | LDA #$00 | |||
$BF90 | STA $4E | |||
$BF92 | LDA $72 | |||
$BF94 | STA $50 | |||
$BF96 | DEY | Point at the last letter entered in the character name entry buffer and copy it over the corresponding letter in the character's existing name. | ||
$BF97 | LDA ($4E),Y | |||
$BF99 | STA ($50),Y | |||
$BF9B | INY | Increment the letter counter. | ||
$BF9C | NOP | |||
$BF9D | NOP | |||
$BF9E | JMP $BF50 | Jump back to get another keypress. | ||
The character's name change has finished or been skipped. Time to walk the character off screen.
|
||||
$BFA1 | LDA #$4A | Set the character's destination x-coordinate to 74 (off screen to the right). | ||
$BFA3 | STA $AC | |||
$BFA5 | LDA #$40 | Initialise the counter at $AD. | ||
$BFA7 | STA $AD | |||
$BFA9 | JSR $33BF | Restore the character's buffer from page 0. | ||
$BFAC | JSR $3279 | Copy the character's buffer to page 0. | ||
$BFAF | JSR $137B | Send the character one step along the way off the screen. | ||
$BFB2 | LDX #$3F | Pause briefly. | ||
$BFB4 | LDY #$FF | |||
$BFB6 | DEY | |||
$BFB7 | BNE $BFB6 | |||
$BFB9 | DEX | |||
$BFBA | BNE $BFB4 | |||
$BFBC | JSR $33BF | Restore the character's buffer from page 0. | ||
$BFBF | JSR $31EA | Update the display. | ||
$BFC2 | LDA $AD | Decrement the counter at $AD. | ||
$BFC4 | BNE $BFAC | Branch back unless it's zero now. | ||
$BFC6 | LDA $60 | Pick up the current character number from $60. | ||
$BFC8 | CMP #$14 | Is it $14 (ERIC)? | ||
$BFCA | BNE $BFD0 | Branch if not. | ||
$BFCC | DEC $60 | Decrease the current character number at $60 by two (to $12), thus skipping over ERIC's and BOY WONDER's catapult pellets. | ||
$BFCE | DEC $60 | |||
$BFD0 | DEC $60 | Decrement the current character number at $60. | ||
$BFD2 | LDA $60 | Pick up the current character number from $60. | ||
$BFD4 | CMP #$0A | Is it $0A (little boy no. 11)? | ||
$BFD6 | BEQ $BFDB | Branch if so. | ||
$BFD8 | JMP $BE90 | Otherwise jump back to deal with the next character. | ||
The player either pressed 'N' to leave the names alone, or has finished naming every character.
|
||||
$BFDB | LDA #$B1 | Change the instructions at $333F and $334B back to 'LDA ($52),Y' and 'LDA ($54),Y'. | ||
$BFDD | STA $333F | |||
$BFE0 | STA $334B | |||
$BFE3 | LDA #$52 | |||
$BFE5 | STA $3340 | |||
$BFE8 | LDA #$54 | |||
$BFEA | STA $334C | |||
$BFED | JSR $2E13 | Prepare for a new game. | ||
$BFF0 | LDA #$01 | Set the game mode indicator at $46 to 1. | ||
$BFF2 | STA $46 | |||
$BFF4 | RTS |
Prev: $BE08 | Up: Map | Next: $BFF5 |