アットウィキロゴ

トルネコの大冒険2 (GBA) > 確率

乱数

32-bit 疑似乱数生成器を用いており、その状態 x は次の式で更新されます: x ← (x × 0x5d588b65 + 1) mod 2^{32}

乱数 0〜(n-1) は (x / 2^{16}) mod n によって生成されます。

ソース

+ ...
80421EC  03 4A          LDR R2, [PC, #$03] ; 0x0200fe7c
80421EE  11 68          LDR R1, [R2, #$00] ; 0x5d588b65
80421F0  03 48          LDR R0, [PC, #$03]
80421F2  48 43          MUL R0, R1
80421F4  01 30          ADD R0, #$01
80421F6  10 60          STR R0, [R2, #$00]
80421F8  00 0C          LSR R0, R0, #$10
80421FA  70 47          BX LR
80421FC  7C FE 00 02 65 8B 58 5D
 
;
; 0〜(A-1) の乱数取得
;
8042204  10 B5          PUSH {R4,LR}
8042206  04 1C          ADD R4, R0, #$00
8042208  FF F7          BLL #$07FF
804220A  F0 FF          BLH #$07F0 ; 乱数 0〜65535 取得
 
804220C  00 2C          CMP R4, #$00
804220E  01 D1          BNE $08042214
8042210  00 20          MOV R0, #$00
8042212  02 E0          BAL $0804221A
 
8042214  21 1C          ADD R1, R4, #$00
8042216  1A F0          BLL #$001A
8042218  6F FC          BLH #$046F ; $0805caf8
 
804221A  10 BC          POP {R4}
804221C  02 BC          POP {R1}
804221E  08 47          BX R1
 
;
; 
;
805CAF8  01 23          MOV R3, #$01
805CAFA  00 29          CMP R1, #$00
805CAFC  5E D0          BEQ $0805CBBC
805CAFE  00 D5          BPL $0805CB02
805CB00  49 42          NEG R1, R1
805CB02  10 B4          PUSH {R4}
805CB04  01 B4          PUSH {R0}
805CB06  00 28          CMP R0, #$00
805CB08  00 D5          BPL $0805CB0C
805CB0A  40 42          NEG R0, R0
805CB0C  88 42          CMP R0, R1
805CB0E  4F D3          BCC $0805CBB0
805CB10  01 24          MOV R4, #$01
805CB12  24 07          LSL R4, R4, #$1C
805CB14  A1 42          CMP R1, R4
805CB16  04 D2          BCS $0805CB22
805CB18  81 42          CMP R1, R0
805CB1A  02 D2          BCS $0805CB22
805CB1C  09 01          LSL R1, R1, #$04
805CB1E  1B 01          LSL R3, R3, #$04
805CB20  F8 E7          BAL $0805CB14
805CB22  E4 00          LSL R4, R4, #$03
805CB24  A1 42          CMP R1, R4
805CB26  04 D2          BCS $0805CB32
805CB28  81 42          CMP R1, R0
805CB2A  02 D2          BCS $0805CB32
805CB2C  49 00          LSL R1, R1, #$01
805CB2E  5B 00          LSL R3, R3, #$01
805CB30  F8 E7          BAL $0805CB24
805CB32  00 22          MOV R2, #$00
805CB34  88 42          CMP R0, R1
805CB36  00 D3          BCC $0805CB3A
805CB38  40 1A          SUB R0, R0, R1
805CB3A  4C 08          LSR R4, R1, #$01
805CB3C  A0 42          CMP R0, R4
805CB3E  05 D3          BCC $0805CB4C
805CB40  00 1B          SUB R0, R0, R4
805CB42  9C 46          MOV R12, R3
805CB44  01 24          MOV R4, #$01
805CB46  E3 41          ROR R3, R4
805CB48  1A 43          ORR R2, R3
805CB4A  63 46          MOV R3, R12
805CB4C  8C 08          LSR R4, R1, #$02
805CB4E  A0 42          CMP R0, R4
805CB50  05 D3          BCC $0805CB5E
805CB52  00 1B          SUB R0, R0, R4
805CB54  9C 46          MOV R12, R3
805CB56  02 24          MOV R4, #$02
805CB58  E3 41          ROR R3, R4
805CB5A  1A 43          ORR R2, R3
805CB5C  63 46          MOV R3, R12
805CB5E  CC 08          LSR R4, R1, #$03
805CB60  A0 42          CMP R0, R4
805CB62  05 D3          BCC $0805CB70
805CB64  00 1B          SUB R0, R0, R4
805CB66  9C 46          MOV R12, R3
805CB68  03 24          MOV R4, #$03
805CB6A  E3 41          ROR R3, R4
805CB6C  1A 43          ORR R2, R3
805CB6E  63 46          MOV R3, R12
805CB70  9C 46          MOV R12, R3
805CB72  00 28          CMP R0, #$00
805CB74  03 D0          BEQ $0805CB7E
805CB76  1B 09          LSR R3, R3, #$04
805CB78  01 D0          BEQ $0805CB7E
805CB7A  09 09          LSR R1, R1, #$04
805CB7C  D9 E7          BAL $0805CB32
805CB7E  0E 24          MOV R4, #$0E
805CB80  24 07          LSL R4, R4, #$1C
805CB82  22 40          AND R2, R4
805CB84  14 D0          BEQ $0805CBB0
805CB86  63 46          MOV R3, R12
805CB88  03 24          MOV R4, #$03
805CB8A  E3 41          ROR R3, R4
805CB8C  1A 42          TST R2, R3
805CB8E  01 D0          BEQ $0805CB94
805CB90  CC 08          LSR R4, R1, #$03
805CB92  00 19          ADD R0, R0, R4
805CB94  63 46          MOV R3, R12
805CB96  02 24          MOV R4, #$02
805CB98  E3 41          ROR R3, R4
805CB9A  1A 42          TST R2, R3
805CB9C  01 D0          BEQ $0805CBA2
805CB9E  8C 08          LSR R4, R1, #$02
805CBA0  00 19          ADD R0, R0, R4
805CBA2  63 46          MOV R3, R12
805CBA4  01 24          MOV R4, #$01
805CBA6  E3 41          ROR R3, R4
805CBA8  1A 42          TST R2, R3
805CBAA  01 D0          BEQ $0805CBB0
805CBAC  4C 08          LSR R4, R1, #$01
805CBAE  00 19          ADD R0, R0, R4
805CBB0  10 BC          POP {R4}
805CBB2  00 2C          CMP R4, #$00
805CBB4  00 D5          BPL $0805CBB8
805CBB6  40 42          NEG R0, R0
805CBB8  10 BC          POP {R4}
805CBBA  F7 46          MOV PC, LR
 
最終更新:2024年04月29日 10:28