home *** CD-ROM | disk | FTP | other *** search
- 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
- 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
-
-