Prev: 50F4 Up: Map Next: 51DC
51A0: Change a character's name
Used by the routine at 52A0. Waits for keypresses while a character's name is being changed, and prints them as they are typed. Returns when ENTER is pressed.
Input
A Message number of the character's name (0x15-0x1F)
51A0 LD L,A Collect the start address of the message (the character's name) into HL
51A1 LD H,$FE
51A3 LD E,(HL)
51A4 INC H
51A5 LD D,(HL)
51A6 EX DE,HL
51A7 LD BC,$0C00 B=0x0C, C=0x00
51AA LD (HL),C Blank out the current name (12 bytes)
51AB INC HL
51AC DJNZ $51AA
51AE PUSH AF Save the message number
51AF LD HL,$5040 5040=display file address at which to print the name
51B2 CALL $50BC Print the name built up so far
51B5 CALL $71E2 Wait for a keypress
51B8 JR Z,$51B5
51BA CP $0D Set the zero flag if ENTER was pressed
51BC LD B,A B=keypress code
51BD JR NZ,$51C1 Jump unless ENTER was pressed
51BF POP AF Restore the message number to A
51C0 RET Return with the new name entered
A key was pressed, and it wasn't ENTER. Place the ASCII code in the right slot of the message area corresponding to the character's name.
51C1 POP AF Restore the message number to A
51C2 LD L,A Collect the start address of the message (the character's name) into DE
51C3 LD H,$FE
51C5 LD E,(HL)
51C6 INC H
51C7 LD D,(HL)
51C8 LD HL,$000B
51CB LD C,A Store the message number in C briefly
51CC ADD HL,DE Point HL at the last byte in the message area for the character's name
51CD LD A,(HL) Pick up this last byte in A
51CE AND A Is the message area already full?
51CF JR NZ,$51D9 Jump if so
51D1 EX DE,HL HL=start address of the message area
51D2 DEC HL
51D3 INC HL Point HL at the first unused slot in the message area
51D4 LD A,(HL)
51D5 AND A
51D6 JR NZ,$51D3
51D8 LD (HL),B Place the letter just entered into this slot
51D9 LD A,C Restore the message number to A
51DA JR $51AE Print the letter and collect another
Prev: 50F4 Up: Map Next: 51DC