Prev: 24476 Up: Map Next: 24560
24477: Play a tune
Used by the routine at 62910. The main entry point is used to play the theme tune.
24477 LD HL,23611 Reset bit 5 at 23611, clearing the record of any keypresses before the tune starts
24480 RES 5,(HL)
24482 LD HL,56384 The theme tune data starts at 56385
This entry point is used by the routine at 23907 with HL=56364-1 (the up-a-year tune data starts at 56364).
24485 DI Disable interrupts
24486 INC HL Point HL at the next tune datum
24487 LD A,(HL) Pick it up
24488 INC A Is it an end-of-section marker?
24489 JR NZ,24496 Jump if not
24491 INC HL Point HL at the first datum in the next section
24492 LD A,(HL)
24493 INC HL
24494 LD H,(HL)
24495 LD L,A
24496 LD A,(HL) A=tune datum
24497 AND A Have we reached the end of the tune?
24498 JP Z,62169 Jump if so
A non-zero tune datum has been found, meaning the tune is not finished yet.
24501 PUSH HL Save the tune data table pointer
24502 RRCA Set the carry flag if we should pause briefly
24503 LD B,A Copy the right-rotated tune datum to B
24504 JR NC,24514 Jump unless we should pause briefly
24506 LD D,15 Pause briefly
24508 DEC E
24509 JR NZ,24508
24511 DEC D
24512 JR NZ,24508
24514 AND 7 0<=A<=7
24516 LD C,A C=border colour for this note
24517 ADD A,A Point HL at an entry in the note duration/pitch data table at 24560
24518 ADD A,240
24520 LD L,A
24521 LD H,95
24523 LD A,B A=original tune datum rotated right one bit
24524 RRCA Obtain the note frequency parameter in E and the note duration parameter in HL
24525 RRCA
24526 RRCA
24527 AND 15
24529 LD B,A
24530 LD E,(HL)
24531 INC L
24532 LD A,(HL)
24533 LD HL,0
24536 ADD HL,DE
24537 DJNZ 24536
24539 RES 0,L
24541 LD E,A
24542 LD A,C Produce a note
24543 OUT (254),A
24545 XOR 16
24547 LD C,A
24548 LD B,E
24549 DJNZ 24549
24551 DEC HL
24552 DEC L
24553 LD A,H
24554 OR L
24555 JR NZ,24542
24557 POP HL Restore the tune data table pointer to HL
24558 JR 24486 Pick up the next tune datum
Prev: 24476 Up: Map Next: 24560