Technician Ted | Routines |
Prev: BAE5 | Up: Map | Next: BD9E |
Used by the routine at AF5D.
|
||||
BB17 | LD HL,($A408) | |||
BB1A | LD ($A441),HL | |||
BB1D | LD HL,$A403 | |||
BB20 | LD A,(HL) | |||
BB21 | AND $C3 | |||
BB23 | LD (HL),A | |||
BB24 | AND $01 | |||
BB26 | LD A,$02 | |||
BB28 | JR Z,$BB34 | |||
BB2A | LD HL,($A404) | |||
BB2D | BIT 7,(HL) | |||
BB2F | JP NZ,$BC59 | |||
BB32 | INC HL | |||
BB33 | LD A,(HL) | |||
BB34 | LD HL,($A40A) | |||
BB37 | LD BC,($A408) | |||
BB3B | ADD HL,BC | |||
BB3C | LD BC,$001E | |||
BB3F | ADD HL,BC | |||
BB40 | EX DE,HL | |||
BB41 | LD HL,($A406) | |||
BB44 | CP $02 | |||
BB46 | LD A,H | |||
BB47 | JR NZ,$BB61 | |||
BB49 | AND $07 | |||
BB4B | JR Z,$BB65 | |||
BB4D | CP $07 | |||
BB4F | JR NZ,$BB87 | |||
BB51 | LD A,($A403) | |||
BB54 | OR $04 | |||
BB56 | LD ($A403),A | |||
BB59 | LD A,H | |||
BB5A | AND $F8 | |||
BB5C | LD H,A | |||
BB5D | LD A,$60 | |||
BB5F | JR $BB67 | |||
BB61 | AND $07 | |||
BB63 | JR NZ,$BB87 | |||
BB65 | LD A,$40 | |||
BB67 | ADD A,L | |||
BB68 | LD L,A | |||
BB69 | JR NC,$BB6F | |||
BB6B | LD A,H | |||
BB6C | ADD A,$08 | |||
BB6E | LD H,A | |||
BB6F | LD A,($A40F) | |||
BB72 | LD C,A | |||
BB73 | CPL | |||
BB74 | LD B,A | |||
BB75 | LD A,(DE) | |||
BB76 | AND C | |||
BB77 | AND (HL) | |||
BB78 | JR NZ,$BBA0 | |||
BB7A | INC DE | |||
BB7B | INC L | |||
BB7C | LD A,(DE) | |||
BB7D | AND (HL) | |||
BB7E | JR NZ,$BBA0 | |||
BB80 | DEC DE | |||
BB81 | INC L | |||
BB82 | LD A,(DE) | |||
BB83 | AND B | |||
BB84 | AND (HL) | |||
BB85 | JR NZ,$BBA0 | |||
BB87 | LD HL,$A403 | |||
BB8A | BIT 0,(HL) | |||
BB8C | JP NZ,$BC59 | |||
BB8F | LD A,$02 | |||
BB91 | LD (HL),$20 | |||
BB93 | LD HL,($A40C) | |||
BB96 | LD BC,$000A | |||
BB99 | ADD HL,BC | |||
BB9A | LD ($A40C),HL | |||
BB9D | JP $BC7D | |||
BBA0 | EX DE,HL | |||
BBA1 | LD HL,$A403 | |||
BBA4 | BIT 2,(HL) | |||
BBA6 | JR Z,$BBAE | |||
BBA8 | RES 0,(HL) | |||
BBAA | LD A,$01 | |||
BBAC | JR $BB93 | |||
BBAE | EX DE,HL | |||
BBAF | CALL $BA34 | Has Ted collided with anything? | ||
BBB2 | RET C | If he has, and it's fatal, exit with carry flag set | ||
BBB3 | LD D,A | |||
BBB4 | LD HL,$A40E | Get the fallen height | ||
BBB7 | LD A,$27 | Is it more than the maximum to survive? | ||
BBB9 | CP (HL) | |||
BBBA | RET C | If not, return with carry flag set to show life lost | ||
BBBB | LD (HL),$00 | Set on the ground | ||
BBBD | LD HL,$A439 | Mark that Ted will not get an infinite death loop now | ||
BBC0 | SET 0,(HL) | |||
BBC2 | LD HL,$010D | |||
BBC5 | LD ($A40C),HL | |||
BBC8 | XOR A | |||
BBC9 | LD ($A443),A | |||
Check for LEFT
|
||||
BBCC | CALL $A72F | |||
BBCF | JR Z,$BBD8 | |||
BBD1 | LD C,$82 | |||
BBD3 | LD HL,$A47B | |||
BBD6 | JR $BBE2 | |||
Check for RIGHT
|
||||
BBD8 | CALL $A734 | |||
BBDB | JR Z,$BBF0 | |||
BBDD | LD C,$02 | |||
BBDF | LD HL,$A57B | |||
BBE2 | LD ($A408),HL | |||
BBE5 | LD ($A443),BC | |||
BBE9 | LD A,($A403) | |||
BBEC | BIT 6,A | |||
BBEE | JR Z,$BBF2 | |||
Check for JUMP
|
||||
BBF0 | LD C,$00 | No movement | ||
BBF2 | CALL $A739 | Was "jump" pressed? | ||
BBF5 | JR Z,$BC04 | Move on if not | ||
BBF7 | SET 0,C | Set bit 0 to denote "mid jump" | ||
BBF9 | LD HL,$A76C | Set automatic movement table to the "jump" table at A76C | ||
BBFC | LD ($A404),HL | |||
BBFF | LD HL,$A443 | |||
BC02 | SET 0,(HL) | |||
Check for conveyor belts
|
||||
BC04 | LD HL,($A41F) | |||
BC07 | LD A,(HL) | |||
BC08 | AND $7F | |||
BC0A | JR Z,$BC39 | |||
BC0C | CP D | |||
BC0D | INC HL | |||
BC0E | JR NZ,$BC07 | |||
BC10 | DEC HL | |||
BC11 | LD A,($A403) | |||
BC14 | CPL | |||
BC15 | AND $42 | |||
BC17 | JR NZ,$BC24 | |||
BC19 | LD A,($A403) | |||
BC1C | XOR (HL) | |||
BC1D | RLA | |||
BC1E | JR NC,$BC24 | |||
BC20 | LD A,($A443) | |||
BC23 | LD C,A | |||
BC24 | LD A,C | |||
BC25 | BIT 1,A | |||
BC27 | JR NZ,$BC31 | |||
BC29 | XOR (HL) | |||
BC2A | AND $7F | |||
BC2C | XOR (HL) | |||
BC2D | OR $42 | |||
BC2F | JR $BC4D | |||
BC31 | XOR (HL) | |||
BC32 | RLA | |||
BC33 | JR NC,$BC4A | |||
BC35 | RES 1,C | |||
BC37 | JR $BC4C | |||
BC39 | LD HL,$A442 | |||
BC3C | LD A,($A409) | |||
BC3F | CP (HL) | |||
BC40 | LD A,($A443) | |||
BC43 | LD C,A | |||
BC44 | JR Z,$BC4D | |||
BC46 | AND $01 | |||
BC48 | JR $BC4D | |||
BC4A | SET 6,C | |||
BC4C | LD A,C | |||
BC4D | LD ($A403),A | |||
BC50 | BIT 0,A | |||
BC52 | JR NZ,$BC59 | |||
BC54 | LD HL,($A406) | |||
BC57 | JR $BCD6 | |||
Ted is jumping (or otherwise moving automatically), handle the movement
|
||||
BC59 | LD HL,($A404) | Point to next jump table entry | ||
BC5C | LD A,(HL) | Get the first byte | ||
BC5D | LD C,A | Copy into C | ||
BC5E | RLA | Convert to note to play in BC | ||
BC5F | SBC A,A | |||
BC60 | LD B,A | |||
BC61 | PUSH HL | Remember this | ||
BC62 | LD HL,($A40C) | Get current sound to play | ||
BC65 | ADD HL,BC | Add (or subtract) offset | ||
BC66 | LD ($A40C),HL | Store new sound | ||
BC69 | POP HL | Restore HL | ||
BC6A | INC HL | Put the second byte in B | ||
BC6B | LD B,(HL) | |||
BC6C | INC HL | Move to next entry and set it as active | ||
BC6D | LD ($A404),HL | |||
BC70 | LD A,(HL) | Get the entry | ||
BC71 | LD HL,$A403 | Get jump flags | ||
BC74 | SET 5,(HL) | |||
BC76 | CP $80 | Is it the "end of table byte?" | ||
BC78 | LD A,B | Put jump distance in A | ||
BC79 | JR NZ,$BC7D | Loop back if it isn't | ||
BC7B | RES 0,(HL) | Reset "Ted jumping" flag if the movement table has finished | ||
BC7D | LD HL,($A406) | |||
BC80 | AND A | |||
BC81 | JR Z,$BCD6 | |||
BC83 | BIT 7,A | |||
BC85 | JR NZ,$BCB9 | |||
BC87 | LD B,A | |||
BC88 | LD A,($A403) | Set bit 3 (Ted falling) in flags | ||
BC8B | OR $08 | |||
BC8D | LD ($A403),A | |||
BC90 | LD DE,$A40E | Increase height fallen, unless it is at maximum already | ||
BC93 | LD A,(DE) | |||
BC94 | INC A | |||
BC95 | JR NZ,$BC98 | |||
BC97 | DEC A | |||
BC98 | LD (DE),A | |||
BC99 | INC H | Move Ted down a line | ||
BC9A | LD A,H | Have we reached the end of an 8x8 block? | ||
BC9B | AND $07 | |||
BC9D | JR NZ,$BCB5 | No, so move on | ||
BC9F | LD A,L | Jump to a new 8x8 block | ||
BCA0 | ADD A,$20 | |||
BCA2 | LD L,A | |||
BCA3 | JR C,$BCA9 | Move on if we are still on the same third of the screen | ||
BCA5 | LD A,H | Move on to the next third of a screen | ||
BCA6 | SUB $08 | |||
BCA8 | LD H,A | |||
BCA9 | BIT 3,H | |||
BCAB | JR Z,$BCB5 | Jump forward if more screen to write to | ||
BCAD | LD A,L | Check third of screen | ||
BCAE | AND $E0 | |||
BCB0 | CP $C0 | |||
BCB2 | LD A,$03 | |||
BCB4 | RET Z | Return if Ted has reached the floor | ||
BCB5 | DJNZ $BC93 | Loop back round - still falling | ||
BCB7 | JR $BCD6 | |||
BCB9 | NEG | |||
BCBB | LD B,A | |||
BCBC | LD A,H | |||
BCBD | DEC H | |||
BCBE | AND $07 | |||
BCC0 | JR NZ,$BCD4 | |||
BCC2 | LD A,L | |||
BCC3 | SUB $20 | |||
BCC5 | LD L,A | |||
BCC6 | LD A,H | |||
BCC7 | JR C,$BCCC | |||
BCC9 | ADD A,$08 | |||
BCCB | LD H,A | |||
BCCC | CP $80 | |||
BCCE | JR NC,$BCD4 | |||
BCD0 | XOR A | |||
BCD1 | LD A,$01 | |||
BCD3 | RET | |||
BCD4 | DJNZ $BCBC | |||
BCD6 | LD A,($A403) | Get flags | ||
BCD9 | BIT 1,A | |||
BCDB | LD C,A | |||
BCDC | EX DE,HL | |||
BCDD | LD HL,($A40A) | |||
BCE0 | LD A,($A40F) | |||
BCE3 | JR Z,$BD15 | |||
BCE5 | BIT 7,C | |||
BCE7 | LD BC,$0020 | |||
BCEA | JR NZ,$BD03 | |||
BCEC | SRL A | |||
BCEE | JR NZ,$BD00 | |||
BCF0 | LD A,E | |||
BCF1 | AND $1F | |||
BCF3 | CP $1E | |||
BCF5 | LD A,$02 | |||
BCF7 | RET Z | |||
BCF8 | LD A,$FF | |||
BCFA | LD HL,$0000 | |||
BCFD | INC E | |||
BCFE | JR $BD15 | |||
BD00 | ADD HL,BC | |||
BD01 | JR $BD15 | |||
BD03 | SCF | |||
BD04 | ADC A,A | |||
BD05 | JR NC,$BD13 | |||
BD07 | LD A,E | |||
BD08 | AND $1F | |||
BD0A | RET Z | |||
BD0B | LD A,$01 | |||
BD0D | LD HL,$00E0 | |||
BD10 | DEC E | |||
BD11 | JR $BD15 | |||
BD13 | SBC HL,BC | |||
BD15 | LD BC,($A408) | |||
BD19 | PUSH HL | |||
BD1A | ADD HL,BC | |||
BD1B | LD C,A | |||
BD1C | PUSH DE | |||
BD1D | EX DE,HL | |||
BD1E | CALL $B9EF | |||
BD21 | LD B,L | |||
BD22 | POP DE | |||
BD23 | POP HL | |||
BD24 | RET C | |||
BD25 | JR Z,$BD66 | |||
BD27 | LD A,($A403) | |||
BD2A | BIT 4,A | |||
BD2C | JR NZ,$BD66 | |||
BD2E | AND $09 | |||
BD30 | CP $08 | |||
BD32 | LD A,$10 | |||
BD34 | LD ($A403),A | |||
BD37 | LD HL,($A406) | |||
BD3A | JR NZ,$BD57 | |||
BD3C | LD A,B | |||
BD3D | LD B,$04 | |||
BD3F | SRL C | |||
BD41 | JR NZ,$BD45 | |||
BD43 | DEC C | |||
BD44 | INC E | |||
BD45 | DJNZ $BD3F | |||
BD47 | AND $1F | |||
BD49 | LD B,A | |||
BD4A | LD A,E | |||
BD4B | AND $1F | |||
BD4D | CP B | |||
BD4E | JR NZ,$BD52 | |||
BD50 | EX AF,AF' | |||
BD51 | CP C | |||
BD52 | RRA | |||
BD53 | OR $7F | |||
BD55 | JR $BCDB | |||
BD57 | EX DE,HL | |||
BD58 | LD HL,($A441) | |||
BD5B | LD ($A408),HL | |||
BD5E | LD HL,($A40A) | |||
BD61 | LD A,($A40F) | |||
BD64 | JR $BD71 | |||
BD66 | LD ($A40A),HL | |||
BD69 | LD A,C | |||
BD6A | LD ($A40F),A | |||
BD6D | LD ($A406),DE | |||
BD71 | LD BC,($A408) | |||
BD75 | ADD HL,BC | |||
BD76 | LD BC,$0210 | |||
BD79 | LD ($A400),BC | |||
BD7D | LD C,A | |||
BD7E | EX DE,HL | |||
BD7F | JR Z,$BD89 | |||
BD81 | PUSH HL | |||
BD82 | PUSH DE | |||
BD83 | CALL $B9EF | |||
BD86 | POP DE | |||
BD87 | POP HL | |||
BD88 | RET C | |||
BD89 | CALL $B7CC | |||
BD8C | LD A,($A403) | |||
BD8F | BIT 5,A | |||
BD91 | JR Z,$BD9B | |||
BD93 | LD B,$07 | |||
BD95 | LD HL,($A40C) | |||
BD98 | CALL $BEF6 | |||
BD9B | OR $FF | |||
BD9D | RET |
Prev: BAE5 | Up: Map | Next: BD9E |