home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / ZCPR33 / A-R / PLF10.LBR / RCPREG.LIB < prev    next >
Text File  |  2000-06-30  |  3KB  |  147 lines

  1.     page
  2.  
  3. ; RCP-REG.Z80
  4.  
  5. ;
  6. ;Section 5J
  7. ;Command: REG
  8. ;Function:  Manipulate Memory Registers
  9. ;
  10. ;Forms:
  11. ;    REG D or REG        <-- Display Register Value
  12. ;    REG Mreg        <-- Decrement Register Value
  13. ;    REG Preg        <-- Increment Register Value
  14. ;    REG Sreg value        <-- Set Register Value
  15.  
  16. register:
  17.     ld    de,fcb1+2    ; Pt to first arg
  18.     ld    a,(de)        ; Get possible digit
  19.     call    regptr        ; Pt to register
  20.     dec    de        ; Pt to command
  21.     ld    a,(de)        ; Get command
  22.     cp    'S'        ; Set?
  23.     jr    z,rset
  24.     cp    'P'        ; Plus?
  25.     jr    z,rinc
  26.     cp    'M'        ; Minus?
  27.     jr    z,rdec
  28.  
  29. ; SHOW REGISTER VALUES
  30.  
  31. rshow:
  32.     xor    a        ; Select register 0
  33.     ld    b,a        ; Counter set to 0 in B
  34.     call    regp2        ; HL pts to register 0
  35. rshow1:
  36.     ld    a,b        ; Get counter value
  37.     cp    10
  38.     ret    z        ; Exit if done
  39.     call    print
  40.     db    '    Reg',' '+80h
  41.     ld    a,b        ; Print register number
  42.     add    '0'
  43.     call    conout
  44.     call    print
  45.     db    ' ','='+80h
  46.     push    bc        ; Save counter
  47.     push    hl        ; Save pointer
  48.     call    regout1        ; Print register value (no error flag setting)
  49.     pop    hl        ; Get pointer
  50.     pop    bc        ; Get counter
  51.     inc    b        ; Increment counter
  52.     ld    a,b        ; Check for new line
  53.     cp    5        ; New line after fifth register display
  54.     call    z,crlf
  55.     inc    hl        ; Pt to next register
  56.     jr    rshow1
  57.  
  58. ; INCREMENT REGISTER VALUE
  59. ;    HL PTS TO MEMORY REGISTER ON INPUT
  60.  
  61. rinc:
  62.     inc    (hl)        ; Increment it
  63.     jr    regout        ; Print result
  64.  
  65. ; DECREMENT REGISTER VALUE
  66. ;    HL PTS TO MEMORY REGISTER ON INPUT
  67.  
  68. rdec:
  69.     dec    (hl)        ; Decrement value
  70.     jr    regout        ; Print result
  71.  
  72. ; SET REGISTER VALUE
  73. ;    HL PTS TO REGISTER ON INPUT
  74.  
  75. rset:
  76.     ld    de,fcb2+1    ; Pt to value
  77.     ld    b,0        ; Init value to zero
  78. rset1:
  79.     ld    a,(de)        ; Get next digit
  80.     inc    de        ; Pt to next
  81.     sub    '0'        ; Convert to binary
  82.     jr    c,rset2
  83.     cp    10        ; Range?
  84.     jr    nc,rset2
  85.     ld    c,a        ; Digit in c
  86.     ld    a,b        ; Multiply old by 10
  87.     add    a,a        ; *2
  88.     add    a,a        ; *4
  89.     add    a,b        ; *5
  90.     add    a,a        ; *10
  91.     add    a,c        ; Add in new digit
  92.     ld    b,a        ; Result in b
  93.     jr    rset1
  94. rset2:
  95.     ld    (hl),b        ; Set value
  96.  
  97. regout:                ; Entry point with setting of error flag
  98.      if    seterr        ; Set error flag
  99.     ld    a,(hl)        ; Get register value
  100.     ld    (z3msg+6),a    ; Copy into program error flag
  101.      endif
  102.  
  103. ; ** THE FOLLOWING 'RET' INSTRUCTION KEEPS DISPLAY QUIET WHEN CHANGING
  104. ; ** AND SETTING REGISTER VALUES.  Thanks to Howard Goldstein for
  105. ; ** this tip.          - Rick Charnes
  106.  
  107.     ret            ; AVOIDS GOING TO 'REGOUT1:'
  108.  
  109. ; ** PATCH DONE ** - rc
  110.  
  111. regout1:            ; Entry point for not setting error flag
  112.     call    print        ; Print leading space
  113.     db    ' '+80h
  114.     ld    a,(hl)        ; Get register value
  115.     ld    l,a        ; Value in HL
  116.     xor    a
  117.     ld    h,a
  118.     ld    de,100        ; Print 100's
  119.     ld    b,80h        ; Set flag to print leading space for zero
  120.     jp    decdsp3        ; Display three digits and return
  121.  
  122. ; SET HL TO POINT TO MEMORY REGISTER WHOSE INDEX IS PTED TO BY HL
  123. ;    ON INPUT, A CONTAINS REGISTER CHAR
  124. ;    ON OUTPUT, HL = ADDRESS OF MEMORY REGISTER (REG 0 ASSUMED IF ERROR)
  125.  
  126. regptr:
  127.     ld    b,0        ; Init to zero
  128.     sub    '0'        ; Convert
  129.     jr    c,regp1
  130.     cp    10        ; Range
  131.     jr    nc,regp1
  132.     ld    b,a        ; Value in b
  133. regp1:
  134.     ld    a,b        ; Value in a
  135. regp2:
  136.     ld    hl,z3msg+30h    ; Pt to memory registers
  137.     add    a,l        ; Pt to proper register
  138.     ld    l,a
  139.     ld    a,h
  140.     adc    0
  141.     ld    h,a        ; Hl pts to register
  142.     ret
  143. ;
  144. ; End RCP-REG.Z80
  145.  
  146. ers
  147.     add    a,l        ; Pt to pro