Prev: 9559 Up: Map Next: 9597
955A: Load A with a pseudo-random number between 00 and the higher of 02 and A (input)
Used by the routines at 9A5A, 9A8B, 9ACF, 9B3D, 9B8F, A82E, C98E, CBB0, CBD3, D004, D2B7 and D6FF.
Input
A Range
Output
A Generated random number
955A CP $02 If range is less than 02 then set it to 02.
955C JP NC,$9561
955F LD A,$02
9561 LD ($9559),A
9564 PUSH HL
9565 PUSH DE
9566 PUSH BC
9567 LD DE,($9557)
956B LD H,E
956C LD L,$FD
956E LD A,D
956F OR A
9570 SBC HL,DE
9572 SBC A,$00
9574 SBC HL,DE
9576 SBC A,$00
9578 LD E,A
9579 LD D,$00
957B SBC HL,DE
957D JP NC,$9581
9580 INC HL
9581 LD ($9557),HL
9584 PUSH HL
9585 POP DE
9586 LD A,($9559)
9589 DEC A
958A LD B,A
958B XOR A Set A to 00.
958C ADD HL,DE Add DE to HL.
958D JP NC,$9591 If DE has not crossed the FFFF - 0000 boundary then skip ahead to 9591.
9590 INC A Increase A (count of number of times DE rolls over from FFFF to 0000).
9591 DJNZ $958C Decrease B and loop back to 958C.
9593 POP BC Restore BC, DE and HL from the stack.
9594 POP DE
9595 POP HL
9596 RET Return.
Prev: 9559 Up: Map Next: 9597