home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / srand.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.5 KB  |  82 lines

  1. ;
  2. ; SYSLIB Module Name:  SRAND
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  2.0
  5. ; Module Version Number:  1.0
  6. ; Module Entry Points:
  7. ;    RND        RNDINIT        RNDSEED
  8. ; Module External References:
  9. ;    PRINT        CONDIN
  10. ;
  11. ;*
  12. ;*  EXTERNALS
  13. ;*
  14.     EXT    PRINT
  15.     EXT    CONDIN
  16.  
  17. ;*
  18. ;*  RNDINIT -- INITIALIZE RANDOM NUMBER GENERATOR
  19. ;*    THIS ROUTINE PROMPTS THE USER FOR A KEYPRESS, AND THEN SETS THE
  20. ;*    SEE VALUE FOR THE RANDOM NUMBER GENERATOR (8-BIT)
  21. ;*  NO INPUT OR OUTPUT PARAMETERS
  22. ;*  GENERALLY, IT IS LEFT TO THE USER TO PRINT A MESSAGE BEFORE THIS ROUTINE
  23. ;*    IS CALLED
  24. ;*
  25. RNDINIT::
  26.     PUSH    PSW    ; SAVE REGS
  27.     PUSH    B
  28.     MVI    B,0    ; START AT 0
  29. RNDIL:
  30.     INR    B    ; INCREMENT SEED
  31.     CALL    CONDIN    ; INPUT?
  32.     JZ    RNDIL
  33.     MOV    A,B    ; GET SEED
  34. RNDID:
  35.     STA    SEED    ; SAVE IT FOR LATER
  36.     CALL    RND    ; GENERATE A RANDOM NUMBER
  37.     STA    ADDEND    ; SAVE A INITIAL ADDEND
  38.     POP    B    ; RESTORE REGS
  39.     POP    PSW
  40.     RET
  41.  
  42. ;*
  43. ;*  RNDSEED -- ALLOW USER TO SPECIFY A SEED VALUE FOR THE RANDOM NUMBER GEN
  44. ;*    SEED IS PASSED IN A; NO REGS AFFECTED
  45. ;*
  46. RNDSEED::
  47.     PUSH    PSW    ; SAVE REGS
  48.     PUSH    B
  49.     JMP    RNDID    ; SAVE SEED AND GENERATE ADDEND
  50.  
  51. ;
  52. ;  RANDOM NUMBER SEED VALUE
  53. ;
  54. SEED:
  55.     DS    1    ; 1 BYTE
  56. ADDEND:
  57.     DS    1    ; ADDEND
  58.  
  59. ;*
  60. ;*  RANDOM NUMBER GENERATOR
  61. ;*    RANDOM NUMBER RETURNED IN A
  62. ;*
  63. RND::
  64.     PUSH    H    ; DON'T AFFECT HL
  65.     LXI    H,SEED    ; PT TO SEED
  66.     MOV    A,M    ; GET IT
  67.     RLC        ; PLAY WITH IT
  68.     XRA    M
  69.     RRC
  70.     INX    H    ; PT TO ADDEND
  71.     INR    M    ; INCREMENT IT
  72.     ADD    M    ; ADD IN ADDEND
  73.     JPE    SKIP
  74.     INR    M    ; INCREMENT ADDEND AGAIN
  75. SKIP:
  76.     DCX    H    ; PT TO SEED AGAIN
  77.     MOV    M,A    ; SAVE NEW SEED
  78.     POP    H    ; RESTORE HL
  79.     RET
  80.  
  81.     END
  82.