Routines |
Prev: 58878 | Up: Map | Next: 58945 |
Used by the routine at 49274.
|
||||
This routine alternates the INK and PAPER colours of the sky above the landscape to flash between yellow and blue.
It checks the INK and PAPER colours of the byte (1 or 6) and toggles between them.
The effect doesn't filter out squares in the left/right border - because a section on the left has yellow in it, it gets affected - see Bugs - Intro sequence - lightning effect colour bleeds into border.
|
||||
58896 | LD B,255 | 255 bytes covers a couple of rows more than the first third of the screen. | ||
58898 | LD HL,22592 | Screen attribute address - top left of the screen, then two rows down below the top border | ||
Determine INK colour in screen attribute byte:
|
||||
58901 | LD A,(HL) | Get screen attribute byte | ||
58902 | LD D,A | Store in D register | ||
58903 | AND 7 | Get the INK value from the screen attribute byte (0-7) | ||
58905 | CP 1 | Is it blue (INK 1)? | ||
58907 | JR NZ,58913 | |||
58909 | LD A,6 | If so, set the INK colour to yellow (6) and skip next check | ||
58911 | JR 58919 | |||
58913 | CP 6 | Is the INK colour yellow (6)? | ||
58915 | JR NZ,58919 | |||
58917 | LD A,1 | If so, Set the INK colour to blue | ||
Determine PAPER colour to paint sky - alternating between yellow and blue:
|
||||
58919 | LD E,A | Copy INK colour into E register - blue (1) or yellow (6) | ||
58920 | LD A,D | Get screen attribute byte | ||
58921 | AND 56 | Filter out everything but the PAPER colour (bits 3-5) | ||
58923 | CP 8 | Is it blue (PAPER 1)? | ||
58925 | JR NZ,58931 | |||
58927 | LD A,48 | If so, set to yellow (PAPER 6) and skip next check | ||
58929 | JR 58937 | |||
58931 | CP 48 | Is it yellow (PAPER 6)? | ||
58933 | JR NZ,58937 | |||
58935 | LD A,8 | If so, set to blue (PAPER 1) | ||
Combine calculated INK and PAPER parts of attribute byte:
|
||||
58937 | OR E | Combine PAPER value with INK value calculated earlier | ||
58938 | LD (HL),A | ...and print onto screen | ||
58939 | INC HL | Move right one square | ||
58940 | AND 16 | This instruction has no effect, as the A register is assigned a new value within the next couple of instructions | ||
58942 | DJNZ 58901 | Repeat x 255, covering the top third of the screen (and a bit more). | ||
58944 | RET | Return to the routine at 49274 |
Prev: 58878 | Up: Map | Next: 58945 |