![]() |
Routines |
| Prev: 61974 | Up: Map | Next: 62048 |
|
Used by the routine at 62068.
|
||||
|
This routine provides random code sheet co-ordinates for security code entry.
The first 4 bytes at 61974 contain random values (generated at 62089 from the FRAMES system variable timer).
This routine then uses a combination of bit shift and XOR operations to further obfuscate the data at 61974. Ultimately a randomized byte #4 of this set is used to generate the random codesheet co-ordinates.
|
||||
| 61982 | PUSH HL | Store registers | ||
| 61983 | PUSH BC | |||
| 61984 | PUSH IX | |||
| 61986 | LD B,8 | 8 x iterations of the below | ||
| 61988 | LD IX,61974 | Pointer to byte 1 of 8 byte data set | ||
| 61992 | AND A | Sets (A=0) or unsets (A<>0) zero flag, though the zero flag will be changed in the next instruction anyway | ||
| 61993 | BIT 7,(IX+3) | Top bit of 4th byte in data set (61974) | ||
| 61997 | JR Z,62022 | If it's zero (bit not set), rotate left first 4 bytes of data set and jump back to 61988 | ||
|
Combine some bytes to further mix up the numbers:
|
||||
| 61999 | LD HL,61978 | Pointer to byte 5 of 8 byte data set | ||
| 62002 | LD C,3 | 3 iterations | ||
| 62004 | LD A,(IX+0) | Mash together (XOR) bytes 1-3 in the table with (fixed) bytes 5-7 | ||
| 62007 | XOR (HL) | |||
| 62008 | LD (IX+0),A | ...re-storing each one | ||
| 62011 | INC IX | Increment both pointers | ||
| 62013 | INC HL | |||
| 62014 | DEC C | |||
| 62015 | JR NZ,62004 | Repeat for first three 3 bytes in table | ||
| 62017 | LD IX,61974 | Point to the start of the 8 byte set | ||
| 62021 | SCF | Set the carry flag ready for the next loop | ||
| 62022 | RL (IX+0) | Rotate each of the first 4 bytes | ||
| 62026 | RL (IX+1) | |||
| 62030 | RL (IX+2) | |||
| 62034 | RL (IX+3) | |||
| 62038 | DJNZ 61988 | ...and repeat from 61988 (8 iterations) | ||
| 62040 | LD A,(IX+3) | Grab the randomized/hashed 4th btye of the table in the A register - this will be used to generate the co-ordinates | ||
| 62043 | POP IX | Retrieve registers | ||
| 62045 | POP BC | |||
| 62046 | POP HL | |||
| 62047 | RET | A register returned with the number to use to pick the code sheet co-ordinates. | ||
| Prev: 61974 | Up: Map | Next: 62048 |