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 >
Wrap
Text File
|
2000-06-30
|
3KB
|
147 lines
page
; RCP-REG.Z80
;
;Section 5J
;Command: REG
;Function: Manipulate Memory Registers
;
;Forms:
; REG D or REG <-- Display Register Value
; REG Mreg <-- Decrement Register Value
; REG Preg <-- Increment Register Value
; REG Sreg value <-- Set Register Value
register:
ld de,fcb1+2 ; Pt to first arg
ld a,(de) ; Get possible digit
call regptr ; Pt to register
dec de ; Pt to command
ld a,(de) ; Get command
cp 'S' ; Set?
jr z,rset
cp 'P' ; Plus?
jr z,rinc
cp 'M' ; Minus?
jr z,rdec
; SHOW REGISTER VALUES
rshow:
xor a ; Select register 0
ld b,a ; Counter set to 0 in B
call regp2 ; HL pts to register 0
rshow1:
ld a,b ; Get counter value
cp 10
ret z ; Exit if done
call print
db ' Reg',' '+80h
ld a,b ; Print register number
add '0'
call conout
call print
db ' ','='+80h
push bc ; Save counter
push hl ; Save pointer
call regout1 ; Print register value (no error flag setting)
pop hl ; Get pointer
pop bc ; Get counter
inc b ; Increment counter
ld a,b ; Check for new line
cp 5 ; New line after fifth register display
call z,crlf
inc hl ; Pt to next register
jr rshow1
; INCREMENT REGISTER VALUE
; HL PTS TO MEMORY REGISTER ON INPUT
rinc:
inc (hl) ; Increment it
jr regout ; Print result
; DECREMENT REGISTER VALUE
; HL PTS TO MEMORY REGISTER ON INPUT
rdec:
dec (hl) ; Decrement value
jr regout ; Print result
; SET REGISTER VALUE
; HL PTS TO REGISTER ON INPUT
rset:
ld de,fcb2+1 ; Pt to value
ld b,0 ; Init value to zero
rset1:
ld a,(de) ; Get next digit
inc de ; Pt to next
sub '0' ; Convert to binary
jr c,rset2
cp 10 ; Range?
jr nc,rset2
ld c,a ; Digit in c
ld a,b ; Multiply old by 10
add a,a ; *2
add a,a ; *4
add a,b ; *5
add a,a ; *10
add a,c ; Add in new digit
ld b,a ; Result in b
jr rset1
rset2:
ld (hl),b ; Set value
regout: ; Entry point with setting of error flag
if seterr ; Set error flag
ld a,(hl) ; Get register value
ld (z3msg+6),a ; Copy into program error flag
endif
; ** THE FOLLOWING 'RET' INSTRUCTION KEEPS DISPLAY QUIET WHEN CHANGING
; ** AND SETTING REGISTER VALUES. Thanks to Howard Goldstein for
; ** this tip. - Rick Charnes
ret ; AVOIDS GOING TO 'REGOUT1:'
; ** PATCH DONE ** - rc
regout1: ; Entry point for not setting error flag
call print ; Print leading space
db ' '+80h
ld a,(hl) ; Get register value
ld l,a ; Value in HL
xor a
ld h,a
ld de,100 ; Print 100's
ld b,80h ; Set flag to print leading space for zero
jp decdsp3 ; Display three digits and return
; SET HL TO POINT TO MEMORY REGISTER WHOSE INDEX IS PTED TO BY HL
; ON INPUT, A CONTAINS REGISTER CHAR
; ON OUTPUT, HL = ADDRESS OF MEMORY REGISTER (REG 0 ASSUMED IF ERROR)
regptr:
ld b,0 ; Init to zero
sub '0' ; Convert
jr c,regp1
cp 10 ; Range
jr nc,regp1
ld b,a ; Value in b
regp1:
ld a,b ; Value in a
regp2:
ld hl,z3msg+30h ; Pt to memory registers
add a,l ; Pt to proper register
ld l,a
ld a,h
adc 0
ld h,a ; Hl pts to register
ret
;
; End RCP-REG.Z80
ers
add a,l ; Pt to pro