| Technician Ted | Routines |
| Prev: AE4E | Up: Map | Next: AF5D |
|
Used by the routine at AA65.
|
||||
| AE77 | LD HL,($A422) | Get current room number in L | ||
| AE7A | LD H,$00 | |||
| AE7C | PUSH HL | Remember this | ||
|
Get the room flags, to work out what we should draw
|
||||
| AE7D | LD DE,$7DC0 | Get the base address of the room flags | ||
| AE80 | ADD HL,DE | Advance to the current room's one | ||
| AE81 | LD A,(HL) | Put it in A and L | ||
| AE82 | LD L,A | |||
| AE83 | LD ($A457),A | And store it | ||
| AE86 | AND $03 | |||
| AE88 | LD ($A461),A | Put just the moving object flags here | ||
| AE8B | LD A,L | Get the static object part of the flags | ||
| AE8C | RRCA | |||
| AE8D | RRCA | |||
| AE8E | AND $1F | |||
| AE90 | LD ($A462),A | Store it here | ||
| AE93 | POP HL | Restore HL | ||
| AE94 | ADD HL,HL | Convert room number to 16-bit pointer | ||
| AE95 | LD DE,($A471) | Get pointer to room offset data | ||
| AE99 | ADD HL,DE | Get the pointer to the room | ||
| AE9A | LD E,(HL) | Store it in DE | ||
| AE9B | INC HL | |||
| AE9C | LD D,(HL) | |||
| AE9D | LD HL,($A473) | Get the pointer to base room data | ||
| AEA0 | ADD HL,DE | Add our offset - HL now points to the room data | ||
| AEA1 | LD DE,$A421 | Get current border colour variable in A | ||
| AEA4 | LD A,(DE) | |||
| AEA5 | AND $F8 | Strip out ink flags | ||
| AEA7 | OR (HL) | Preserve border colour | ||
| AEA8 | LD (DE),A | Store it | ||
| AEA9 | INC HL | Get background colour in A | ||
| AEAA | LD A,(HL) | |||
| AEAB | LD ($A402),A | Store it | ||
| AEAE | INC HL | Put pointer to UDG store in IX | ||
| AEAF | PUSH HL | |||
| AEB0 | POP IX | |||
|
Clear the screen
|
||||
| AEB2 | LD HL,$9000 | Blank screen 2 store | ||
| AEB5 | LD DE,$9001 | |||
| AEB8 | LD BC,$0FFF | |||
| AEBB | LD (HL),$00 | |||
| AEBD | LDIR | |||
| AEBF | LD HL,$A200 | Blank screen 2 attributes | ||
| AEC2 | LD DE,$A201 | |||
| AEC5 | LD BC,$01FF | |||
| AEC8 | LD (HL),A | |||
| AEC9 | LDIR | |||
|
Put objects on the screen
|
||||
| AECB | LD HL,$C2C1 | Store pointer to static UDGs here | ||
| AECE | LD ($A423),HL | |||
| AED1 | LD HL,$7FD0 | Store pointer to conveyor belt data here | ||
| AED4 | LD ($A455),HL | |||
| AED7 | XOR A | Set first frame of conveyor belts | ||
| AED8 | LD ($A444),A | |||
| AEDB | LD (HL),A | |||
| AEDC | LD A,$90 | |||
| AEDE | LD ($A45C),A | |||
| AEE1 | LD DE,$A200 | Read static UDG information into attributes 2 | ||
| AEE4 | CALL $B5FD | |||
| AEE7 | LD A,$80 | |||
| AEE9 | LD ($A45C),A | |||
| AEEC | LD A,$FF | |||
| AEEE | LD ($A444),A | |||
| AEF1 | CALL $B5FA | |||
| AEF4 | LD HL,($A455) | |||
| AEF7 | LD (HL),$00 | |||
| AEF9 | CALL $B5FA | |||
| AEFC | PUSH IX | |||
| AEFE | POP HL | |||
|
Draw any task buttons
|
||||
| AEFF | LD A,(HL) | Get next value | ||
| AF00 | INC HL | Increment to next pointer in the room data | ||
| AF01 | AND A | Is the next value zero? | ||
| AF02 | CALL NZ,$B203 | If not, there are task buttons, so process them | ||
|
Initialize moving objects
|
||||
| AF05 | LD ($A41D),HL | |||
| AF08 | XOR A | |||
| AF09 | LD ($A42A),A | |||
| AF0C | CP (HL) | |||
| AF0D | INC HL | |||
| AF0E | JR NZ,$AF0C | |||
| AF10 | CP (HL) | |||
| AF11 | INC HL | |||
| AF12 | JR NZ,$AF10 | |||
| AF14 | LD ($A41F),HL | |||
| AF17 | CP (HL) | |||
| AF18 | INC HL | |||
| AF19 | JR NZ,$AF17 | |||
| AF1B | LD IX,$7E00 | |||
| AF1F | CALL $B4A5 | |||
| AF22 | LD (IX+$00),$00 | |||
| AF26 | LD (IX+$01),$00 | |||
| AF2A | INC HL | |||
|
Draw the title and status area
|
||||
| AF2B | CALL $B140 | |||
|
Make the copy of the screen live
|
||||
| AF2E | LD HL,$9000 | Copy screen 2 to screen 1 | ||
| AF31 | LD DE,$8000 | |||
| AF34 | LD BC,$1000 | |||
| AF37 | LDIR | |||
| AF39 | LD HL,$A200 | Copy attributes 2 to attributes 1 | ||
| AF3C | LD DE,$A000 | |||
| AF3F | LD B,$02 | |||
| AF41 | LDIR | |||
| AF43 | LD HL,$8000 | Make screen 1 live | ||
| AF46 | LD DE,$4000 | |||
| AF49 | LD B,$10 | |||
| AF4B | LDIR | |||
| AF4D | LD HL,$A000 | Make attributes 1 live | ||
| AF50 | LD DE,$5800 | |||
| AF53 | LD B,$02 | |||
| AF55 | LDIR | |||
| AF57 | LD A,($A421) | Set the border colour | ||
| AF5A | OUT ($FE),A | |||
| AF5C | RET | |||
| Prev: AE4E | Up: Map | Next: AF5D |