![]() |
Routines |
| Prev: FA00 | Up: Map | Next: FE24 |
|
Used by the routine at 5D0C.
|
||||
|
The code here was copied at 5D0C after the first tape data block was loaded - the first part here is a copy of this.
Avalon's data (as stored on tape) is encrypted using a simple algorithm.
The game memory from 61A9 to FA00 is unencrypted in the instructions from FDFF.
|
||||
| FDE8 | LD SP,$FFFA | Put the stack pointer (nearly) at the top of RAM | ||
| FDEB | LD IX,$61A9 | IX = address pointer at start of data block to LOAD | ||
| FDEF | LD DE,$9858 | Data block length (code up to RAM address 64000) | ||
| FDF2 | LD A,$FF | Indicates a data block to load (rather than header) | ||
| FDF4 | SCF | Sets the carry flag, which tells the ROM routine to perform a LOAD | ||
|
The next 4 instructions are in the ROM loading routine just before 1377, executed here just before the jump there at FDFC (as it's not loading a header block)
|
||||
| FDF5 | INC D | |||
| FDF6 | EX AF,AF' | |||
| FDF7 | DEC D | |||
| FDF8 | DI | |||
| FDF9 | LD HL,$FDFF | This is the address that the code in the following instructions (starting from FDFF) will be at after the copy at the start of this routine. | ||
| FDFC | JP $0561 | Launch the ROM loading routine | ||
|
Unencrypt all game code and data. A reverse encoding of this would've been done before the data was saved to tape.
|
||||
| FDFF | LD HL,$61A9 | Start address | ||
| FE02 | LD DE,$9858 | Number of bytes to work through | ||
|
Unencryption loop:
|
||||
| FE05 | LD A,(HL) | Get byte | ||
| FE06 | XOR %01100110 | XOR to reverse the bits | ||
| FE08 | RRCA | Rotate right/divide by 2 | ||
| FE09 | XOR L | A second XOR to reverse the bytes, using the low byte of the address pointer | ||
| FE0A | LD (HL),A | Re-store the unencrypted byte into memory | ||
| FE0B | INC HL | Move to the next memory address | ||
| FE0C | DEC DE | Decrement the number-of-bytes counter | ||
| FE0D | LD A,D | Check for zero | ||
| FE0E | OR E | |||
| FE0F | JR NZ,$FE05 | If not, continue to unencrypt the data | ||
|
Data in memory is now unpacked/unencrypted
|
||||
| FE11 | LD A,$02 | |||
| FE13 | LD ($5C6B),A | Enable screen character rows 22 & 23 for INPUT/errors | ||
| FE16 | EI | Enable interrupts | ||
| FE17 | JP $F34B | Jump to the code input routine | ||
|
Unused data
|
||||
| FE1A | DEFB $20,$20,$20,$20,$20,$20,$20,$20 | |||
| FE22 | DEFB $20,$20 | |||
| Prev: FA00 | Up: Map | Next: FE24 |