![]() |
Routines |
Prev: DAC0 | Up: Map | Next: DCA7 |
Used by the routine at DAC0.
|
||||
DB27 | CALL $DD1F | Handle passsword code input | ||
Decode entered password into text definition at DD0E
|
||||
DB2A | LD A,($DD01) | Set first figure of score | ||
DB2D | LD ($DD0E),A | |||
DB30 | LD A,($DCF6) | Set second figure of score | ||
DB33 | LD ($DD0F),A | |||
DB36 | LD A,($DCFA) | Set third figure of score | ||
DB39 | LD ($DD10),A | |||
DB3C | LD A,($DCFE) | Set fourth figure of score | ||
DB3F | LD ($DD11),A | |||
DB42 | LD A,($DCFC) | Set fifth figure of score | ||
DB45 | LD ($DD12),A | |||
DB48 | LD A,($DCF8) | Set number of lives | ||
DB4B | LD ($DD13),A | |||
DB4E | LD A,($DCF5) | Set weapon available for double fire | ||
DB51 | LD ($DD14),A | |||
DB54 | LD A,($DCF9) | Set weapon available for laser | ||
DB57 | LD ($DD15),A | |||
DB5A | LD A,($DCFB) | Set weapon available for multiple | ||
DB5D | LD ($DD16),A | |||
DB60 | LD A,($DCF7) | Set weapon available for spray | ||
DB63 | LD ($DD17),A | |||
DB66 | LD A,($DD00) | Set first figure for shield power | ||
DB69 | LD ($DD18),A | |||
DB6C | LD A,($DCFD) | Set second figure for shield power | ||
DB6F | LD ($DD19),A | |||
DB72 | LD A,($DCFF) | Set number of smartbombs | ||
DB75 | LD ($DD1A),A | |||
DB78 | LD A,($DD03) | Set first figure of checksum | ||
DB7B | LD ($DD1B),A | |||
DB7E | LD A,($DD04) | Set second figure of checksum | ||
DB81 | LD ($DD1C),A | |||
DB84 | LD A,($DD02) | Set third figure of checksum | ||
DB87 | LD ($DD1D),A | |||
DB8A | LD B,$0D | For every charcode in the password substract the current number to 9. So 9 => 0 8 => 1 7 => 2 ... | ||
DB8C | LD E,$00 | |||
DB8E | LD ($A22C),HL | |||
DB91 | LD HL,$DD0E | |||
DB94 | LD C,(HL) | |||
DB95 | LD A,$39 | |||
DB97 | SUB C | |||
DB98 | ADD A,$30 | |||
DB9A | LD (HL),A | |||
DB9B | SUB $30 | Set into E the protection code (checksum) Checksum will be the sum of all the digits of the code | ||
DB9D | ADD A,E | |||
DB9E | LD E,A | |||
DB9F | INC HL | Increment address for the next charcode | ||
DBA0 | DJNZ $DB94 | Jump until all charcodes processed | ||
DBA2 | LD HL,$DCF5 | Computes checksum code into E for the entered password | ||
DBA5 | LD B,$0D | |||
DBA7 | LD DE,$0000 | |||
DBAA | LD A,(HL) | |||
DBAB | SUB $30 | |||
DBAD | ADD A,E | |||
DBAE | LD E,A | |||
DBAF | INC HL | |||
DBB0 | DJNZ $DBAA | |||
DBB2 | LD ($A261),DE | Save checksum code into A261 | ||
DBB6 | LD A,E | Jump to show invalid code windows if checksum == 0 | ||
DBB7 | OR A | |||
DBB8 | JP Z,$DC59 | |||
DBBB | LD A,$30 | Set into charcode buffer at A23F the checksum code | ||
DBBD | LD ($A23F),A | |||
DBC0 | LD ($A240),A | |||
DBC3 | LD A,($DD1D) | |||
DBC6 | LD ($A243),A | |||
DBC9 | LD A,($DD1B) | |||
DBCC | LD ($A241),A | |||
DBCF | LD A,($DD1C) | |||
DBD2 | LD ($A242),A | |||
DBD5 | CALL $DC69 | Computes into HL the corresponent checksum number | ||
DBD8 | LD DE,($A261) | Test if checksum number computed is equal to checksum number of the code and jump to show invalid code if both number are diferent | ||
DBDC | AND A | |||
DBDD | SBC HL,DE | |||
DBDF | JP NZ,$DC59 | |||
DBE2 | LD A,($DD0E) | Set into charcode buffer at A23F th score | ||
DBE5 | LD ($A23F),A | |||
DBE8 | LD A,($DD0F) | |||
DBEB | LD ($A240),A | |||
DBEE | LD A,($DD10) | |||
DBF1 | LD ($A241),A | |||
DBF4 | LD A,($DD11) | |||
DBF7 | LD ($A242),A | |||
DBFA | LD A,($DD12) | |||
DBFD | LD ($A243),A | |||
DC00 | CALL $DC69 | Computes the score number and set into A263 | ||
DC03 | LD ($A263),HL | |||
DC06 | LD A,($DD13) | Computes the lives of Rex from password code and set into A267 | ||
DC09 | SUB $30 | |||
DC0B | LD ($A267),A | |||
DC0E | LD A,($DD14) | For every weapon set if weapon is available or not based on password | ||
DC11 | SUB $30 | |||
DC13 | LD ($A1E9),A | |||
DC16 | LD A,($DD15) | |||
DC19 | SUB $30 | |||
DC1B | LD ($A1EA),A | |||
DC1E | LD A,($DD16) | |||
DC21 | SUB $30 | |||
DC23 | LD ($A1EB),A | |||
DC26 | LD A,($DD17) | |||
DC29 | SUB $30 | |||
DC2B | LD ($A1EC),A | |||
DC2E | LD A,$30 | Set into charcode buffer the shield power | ||
DC30 | LD ($A23F),A | |||
DC33 | LD ($A240),A | |||
DC36 | LD ($A241),A | |||
DC39 | LD A,($DD18) | |||
DC3C | LD ($A242),A | |||
DC3F | LD A,($DD19) | |||
DC42 | LD ($A243),A | |||
DC45 | CALL $DC69 | Computes shield power number and set into A265 | ||
DC48 | LD ($A265),HL | |||
DC4B | LD A,($DD1A) | Computes smartbombs number and set into A266 | ||
DC4E | SUB $30 | |||
DC50 | LD ($A266),A | |||
DC53 | CP $04 | if smartbomb is greater than 3 then jump to show invalid code | ||
DC55 | JP NC,$DC59 | |||
DC58 | RET | |||
Show invalid code windows
|
||||
DC59 | LD IX,$DCA7 | Set IY to the address for text definition of invalid code | ||
DC5D | LD B,$02 | Set B the number of lines | ||
DC5F | CALL $A2E6 | Draws a windows | ||
DC62 | CALL $DD9B | Wait for a keypress and set into A the charcode for the key | ||
DC65 | POP BC | Restore BC | ||
DC66 | JP $DAE3 | Jump back to handle password input | ||
Convert the digit charcode buffer to the equivalent number and save it into HL
|
||||
DC69 | LD HL,$A23F | Point HL to the digit charcode buffer for checksum code | ||
DC6C | LD B,$05 | Convert charcode buffer to number buffer number = charcode - $30 | ||
DC6E | LD A,(HL) | |||
DC6F | SUB $30 | |||
DC71 | LD (HL),A | |||
DC72 | INC HL | |||
DC73 | DJNZ $DC6E | |||
DC75 | LD HL,$0000 | Reset number value to 0 | ||
DC78 | LD IX,$A23E | Point IX to the address previous to the ten thousands figure | ||
DC7C | LD DE,$2710 | Set DE to 10.000 | ||
DC7F | CALL $DC9B | Jump to compute the equivalent number in the figure of ten thousands | ||
DC82 | LD DE,$03E8 | Set DE to 1.000 | ||
DC85 | CALL $DC9B | Jump to compute the equivalent number in the figure of thousands | ||
DC88 | LD DE,$0064 | Set DE to 100 | ||
DC8B | CALL $DC9B | Jump to compute the equivalent number in the figure of hundreds | ||
DC8E | LD DE,$000A | Set DE to 10 | ||
DC91 | CALL $DC9B | Jump to compute the equivalent number in the figure of tens | ||
DC94 | LD DE,$0001 | Set DE to 1 | ||
DC97 | CALL $DC9B | Jump to compute the equivalent number in the figure of units | ||
DC9A | RET | |||
Compute the equivalent number based in the figure of the digit
|
||||
DC9B | INC IX | Point to the next figure | ||
DC9D | LD A,(IX+$00) | Return if digit is 0 | ||
DCA0 | OR A | |||
DCA1 | RET Z | |||
DCA2 | LD B,A | Compute the equivalent figure x => x0.000 for ten thousands, x => x.000 for thousands ... | ||
DCA3 | ADD HL,DE | |||
DCA4 | DJNZ $DCA3 | |||
DCA6 | RET |
Prev: DAC0 | Up: Map | Next: DCA7 |