📄 read_random.asl
字号:
+ 1 ;****************************************************************;
+ 2 ; Read Random Number
+ 3 ;
+ 4 ; function: generate a number between 0 and m_rnd_range
+ 5 ; variable: rnd_num_16+1, rnd_num_16 and m_rnd_range
+ 6 ;
+ 7 ; Written by: Mr.ZhangJinBo
+ 8 ; Date: 2004-02-16
+ 9 ;****************************************************************;
+ 10 ;****************************************************************;
+ 11 ;input:m_rnd_range(求的随机数范围),
+ 12 ;output:rnd_num(所求的随机数)
+ 13 ;****************************************************************;
+ 14 ;================================================================;
+ 15 ;Data Area
+ 16 ;================================================================;
+B 00 01
+ 17 .area read_random_var(data)
+ 18
0000 19 temp_rnd:: .ds 2 ;随机数高低位临时寄存器
0002 20 rnd_num:: .ds 1 ;计算出来的随机数
0003 21 rnd_num_16:: .ds 2 ;随机数高低位寄存器
0005 22 m_rnd_range:: .ds 1 ;要求的随机数范围
+ 23
+ 24 ;================================================================;
+ 25 ;Code Area
+ 26 ;================================================================;
+B 00 02
+ 27 .area read_random_code(code)
+ 28
0000 29 read_random::
+ 30 ;-----------------------------------当随机范围是0,输出的随机数也是0(这样的速度快)
0000 F1 05 31 lda m_rnd_range ;/*04-02-18*/当键按下时九是这状态
0002 A7 00 32 cmpe #0
0004 07 00 0E 33 brnz generate_random ;/*04-02-18*/
0007 F3 00 34 lda #0
0009 FD 02 35 sta rnd_num
000B 02 00 33 36 br end_read_random ;/*04-02-18*/
+ 37 ;---------------------------------------
000E 38 generate_random::
000E 20 00 34 39 call random_generate ;把本体随机数移一遍
0011 F1 03 40 lda rnd_num_16 ;送到临时寄存器
0013 FD 00 41 sta temp_rnd ;this variable is used temporarily
0015 F1 04 42 lda rnd_num_16+1 ;
0017 FD 01 43 sta temp_rnd+1
0019 44 begin_multiply:
+ 45 ;adda #0 ;clear 'C'
0019 F1 00 46 lda temp_rnd ;
001B 89 03 47 adda rnd_num_16
001D FD 00 48 sta temp_rnd
001F F1 01 49 lda temp_rnd+1 ;
0021 99 04 50 addc rnd_num_16+1
0023 FD 01 51 sta temp_rnd+1
0025 F1 02 52 lda rnd_num ;
0027 9B 00 53 addc #00
0029 FD 02 54 sta rnd_num
002B F1 05 55 lda m_rnd_range ;decrease the times of cycle
002D 3F 56 deca
002E FD 05 57 sta m_rnd_range
+ 58 ;cmpe #0
0030 07 00 19 59 brnz begin_multiply ;the result of multiplication divides #0ffh,
+ 60 ;the final result approximates to rnd_num
0033 61 end_read_random:
0033 24 62 ret
+ 63 ;----------------------------------------------------------------;
+ 64 ; 16bit random number generate Subroutine(把随机数移一遍)
+ 65 ;----------------------------------------------------------------;
0034 66 random_generate::
0034 F3 20 67 lda #00100000b
0036 C9 04 68 anda rnd_num_16+1 ;select the bit5 of rnd_num_16(16bit random number high 8bit)
0038 06 00 42 69 brz 1$
003B F3 01 70 lda #1 ;bit2=1
003D FD 00 71 sta temp_rnd ;.ds 1
003F 02 00 46 72 br 2$
+ 73 1$: ;bit2=0
0042 F3 00 74 lda #0
0044 FD 00 75 sta temp_rnd
+ 76 2$:
0046 F3 10 77 lda #00010000b ;select the bit4 of rnd_num_16(16bit random number high 8bit)
0048 C9 04 78 anda rnd_num_16+1
004A 06 00 56 79 brz 3$
004D F3 01 80 lda #1 ;bit3=1
004F E9 00 81 xora temp_rnd
0051 FD 00 82 sta temp_rnd
0053 02 00 5C 83 br 4$
+ 84 3$:
0056 F3 00 85 lda #0 ;bit3=0
0058 E9 00 86 xora temp_rnd
005A FD 00 87 sta temp_rnd
+ 88 4$:
005C F3 08 89 lda #00001000b ;select the bit3 of rnd_num_16(16bit random number high 8bit)
005E C9 04 90 anda rnd_num_16+1
0060 06 00 6C 91 brz 5$
0063 F3 01 92 lda #1 ;bit4=1
0065 E9 00 93 xora temp_rnd
0067 FD 00 94 sta temp_rnd
0069 02 00 72 95 br 6$
+ 96 5$:
006C F3 00 97 lda #0 ;bit4=0
006E E9 00 98 xora temp_rnd
0070 FD 00 99 sta temp_rnd
0072 F3 01 100 6$: lda #00000001b ;select the bit0 of rnd_num_16+1(16bit random number low 8bit)
0074 C9 03 101 anda rnd_num_16
0076 06 00 82 102 brz 7$
0079 F3 01 103 lda #1 ;bit15=1
007B E9 00 104 xora temp_rnd
007D FD 00 105 sta temp_rnd
007F 02 00 88 106 br 8$
+ 107 7$:
0082 F3 00 108 lda #0 ;bit15=0
0084 E9 00 109 xora temp_rnd
0086 FD 00 110 sta temp_rnd
+ 111 8$:
0088 06 00 94 112 brz 9$
008B F3 01 113 lda #00000001b
008D D8 22 114 ora r_op1 ;change the state of 'C'
008F FC 22 115 sta r_op1
0091 02 00 9A 116 br 10$
+ 117 9$:
0094 F3 FE 118 lda #11111110b
0096 C8 22 119 anda r_op1
0098 FC 22 120 sta r_op1
+ 121 10$: ;rotate right with C
009A F1 04 122 lda rnd_num_16+1
009C 7F 123 rorc
009D FD 04 124 sta rnd_num_16+1
009F F1 03 125 lda rnd_num_16
00A1 7F 126 rorc
00A2 FD 03 127 sta rnd_num_16
00A4 24 128 ret
+ 129 ;================================================================;
+ 130
+
+Symbol Table
+
+ 2 begin_multiply 0019 R
+ 2 end_read_random 0033 R
+ 2 generate_random 000E GR
+ 1 m_rnd_range 0005 GR
+ 2 random_generate 0034 GR
+ 2 read_random 0000 GR
+ 1 rnd_num 0002 GR
+ 1 rnd_num_16 0003 GR
+ 1 temp_rnd 0000 GR
+
+
+Area Table
+
+ 0 . size 0 flags 0
+ 1 read_random_var size 6 flags 2
+ 2 read_random_code size A5 flags 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -