📄 read_random.asm
字号:
;****************************************************************;
; Read Random Number
;
; function: generate a number between 0 and m_rnd_range
; variable: rnd_num_16+1, rnd_num_16 and m_rnd_range
;
; Written by: Mr.ZhangJinBo
; Date: 2004-02-16
;****************************************************************;
;****************************************************************;
;input:m_rnd_range(求的随机数范围),
;output:rnd_num(所求的随机数)
;****************************************************************;
;================================================================;
;Data Area
;================================================================;
.area read_random_var(data)
temp_rnd:: .ds 2 ;随机数高低位临时寄存器
rnd_num:: .ds 1 ;计算出来的随机数
rnd_num_16:: .ds 2 ;随机数高低位寄存器
m_rnd_range:: .ds 1 ;要求的随机数范围
;================================================================;
;Code Area
;================================================================;
.area read_random_code(code)
read_random::
;-----------------------------------当随机范围是0,输出的随机数也是0(这样的速度快)
lda m_rnd_range ;/*04-02-18*/当键按下时九是这状态
cmpe #0
brnz generate_random ;/*04-02-18*/
lda #0
sta rnd_num
br end_read_random ;/*04-02-18*/
;---------------------------------------
generate_random::
call random_generate ;把本体随机数移一遍
lda rnd_num_16 ;送到临时寄存器
sta temp_rnd ;this variable is used temporarily
lda rnd_num_16+1 ;
sta temp_rnd+1
begin_multiply:
;adda #0 ;clear 'C'
lda temp_rnd ;
adda rnd_num_16
sta temp_rnd
lda temp_rnd+1 ;
addc rnd_num_16+1
sta temp_rnd+1
lda rnd_num ;
addc #00
sta rnd_num
lda m_rnd_range ;decrease the times of cycle
deca
sta m_rnd_range
;cmpe #0
brnz begin_multiply ;the result of multiplication divides #0ffh,
;the final result approximates to rnd_num
end_read_random:
ret
;----------------------------------------------------------------;
; 16bit random number generate Subroutine(把随机数移一遍)
;----------------------------------------------------------------;
random_generate::
lda #00100000b
anda rnd_num_16+1 ;select the bit5 of rnd_num_16(16bit random number high 8bit)
brz 1$
lda #1 ;bit2=1
sta temp_rnd ;.ds 1
br 2$
1$: ;bit2=0
lda #0
sta temp_rnd
2$:
lda #00010000b ;select the bit4 of rnd_num_16(16bit random number high 8bit)
anda rnd_num_16+1
brz 3$
lda #1 ;bit3=1
xora temp_rnd
sta temp_rnd
br 4$
3$:
lda #0 ;bit3=0
xora temp_rnd
sta temp_rnd
4$:
lda #00001000b ;select the bit3 of rnd_num_16(16bit random number high 8bit)
anda rnd_num_16+1
brz 5$
lda #1 ;bit4=1
xora temp_rnd
sta temp_rnd
br 6$
5$:
lda #0 ;bit4=0
xora temp_rnd
sta temp_rnd
6$: lda #00000001b ;select the bit0 of rnd_num_16+1(16bit random number low 8bit)
anda rnd_num_16
brz 7$
lda #1 ;bit15=1
xora temp_rnd
sta temp_rnd
br 8$
7$:
lda #0 ;bit15=0
xora temp_rnd
sta temp_rnd
8$:
brz 9$
lda #00000001b
ora r_op1 ;change the state of 'C'
sta r_op1
br 10$
9$:
lda #11111110b
anda r_op1
sta r_op1
10$: ;rotate right with C
lda rnd_num_16+1
rorc
sta rnd_num_16+1
lda rnd_num_16
rorc
sta rnd_num_16
ret
;================================================================;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -