![]() |
Routines |
Prev: 77A3 | Up: Map |
|
||||||||
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 |