Routines
 Prev: 77A3 Up: Map Next: 7866
77D3: Deal with Sam when he's on the phone
 Used by the routine at 74D8 when bit 4 at 7FFC is set (by the routine at 76FA), indicating that Sam is on the phone. 77D3 LD HL,\$7F9B The telephone call status flags are stored at 7F9B 77D6 BIT 6,(HL) Has someone asked Sam 'WHO'S THERE?' 77D8 JP NZ,\$776F Jump if so 77DB BIT 1,(HL) Is the telephone call still in progress? 77DD JR Z,\$77E3 Jump if so 77DF CALL \$F1E3 Hang up if 'h' was pressed 77E2 RET The telephone call is still in progress. 77E3 BIT 7,(HL) Has Sam picked up a telephone that was ringing? 77E5 JR Z,\$77F3 Jump if not 77E7 CALL \$F1E3 Hang up if 'h' was pressed 77EA LD A,(\$7FD3) A=ID of the telephone that Sam is holding 77ED LD HL,\$6B4B The ringing phone location table is at 6B4B 77F0 JP \$77A3 Check whether there is a message for Sam 77F3 BIT 5,(HL) Is the destination telephone ringing? 77F5 JR Z,\$7806 Jump if not 77F7 CALL \$F1E3 Hang up if 'h' was pressed 77FA CALL \$772F Is the telephone that Sam is calling either off-screen or close enough to a character that can pick it up? 77FD RET NC Return if not 77FE LD A,(\$7F9A) A=ID of the telephone that Sam is calling 7801 LD HL,\$6B72 The phone message table is at 6B72 7804 JR \$77F0 Check whether Sam has called someone who has a message for him Sam is still dialling the telephone number. 7806 BIT 4,(HL) Are we currently making the sound effect of a digit being dialled? 7808 JR NZ,\$7830 Jump if so 780A CALL \$F1E3 Check for keypresses and hang up if 'h' was pressed 780D RET Z Return if no key with an ASCII code in the range 0x30-0x7F was pressed 780E CP \$3A Was the ASCII code of the keypress greater than 0x39 ('9')? 7810 RET NC Return if so 7811 CP \$30 Was the ASCII code less than 0x30 ('0')? 7813 RET C Return if so 7814 LD HL,\$7F91 Store the ASCII code of the digit in the first available space at 7F92 7817 INC L 7818 BIT 5,(HL) 781A JR NZ,\$7817 781C LD (HL),A 781D SUB \$30 A=digit that was dialled (0-9) 781F JR NZ,\$7823 Jump unless '0' was dialled 7821 LD A,\$0A The digit '0' will give 10 clicks 7823 INC A A=1-11 7824 LD (\$E614),A Store this in byte 0x14 of Sam's buffer 7827 LD L,\$9B HL=7F9B (telephone call status flags) 7829 LD (HL),\$10 Set bit 4 782B LD A,\$2A Message 0x2A: 'I DIALLED {number}' 782D JP \$75CA Queue this message urgently The sound effect of a digit being dialled is currently in progress. 7830 LD HL,\$E608 Set Sam's main action timer (in byte 0x08 of his buffer) to 3 7833 LD (HL),\$03 7835 LD L,\$14 Point HL at byte 0x14 of Sam's buffer 7837 DEC (HL) Are there any more clicks to make? 7838 JP NZ,\$EC69 Make a click if so Sam has finished dialling a digit of the telephone number. Check whether the number dialled so far is valid. 783B LD HL,\$7F9B Clear all the telephone call status flags at 7F9B 783E LD (HL),\$00 7840 LD L,\$92 Collect the ASCII code of the first digit that was dialled from 7F92 7842 LD A,(HL) 7843 CP \$30 Was it '0'? 7845 JR Z,\$7861 Jump if so (no telephone numbers start with 0) 7847 INC L Add the ASCII codes of the second and third digits to the first 7848 ADD A,(HL) 7849 INC L 784A ADD A,(HL) 784B INC L Point HL at the fourth digit 784C CP \$AB Set the zero flag if '999' was dialled 784E LD A,\$70 0x70 is the ID of the telephone in the police station 7850 JR Z,\$785A Jump if Sam has dialled the police 7852 BIT 5,(HL) Has Sam dialled four digits yet? 7854 RET Z Return if not 7855 CALL \$7A17 Has Sam dialled a valid telephone number? 7858 JR NZ,\$7861 Jump if not 785A LD HL,\$7FD3 7FD3 holds the ID of the telephone Sam is holding 785D CP (HL) Does it match the ID of the telephone Sam is calling? 785E JP NZ,\$7A0C Jump if not to place the call 7861 LD A,\$2F Message 0x2F: ' THE NUMBER WAS UNOBTAINABLE' 7863 JP \$7799 Disconnect the call and queue this message urgently
 Prev: 77A3 Up: Map Next: 7866