home *** CD-ROM | disk | FTP | other *** search
- ;Library Name: ARRAYLIB
- ;Module Name: REVERSE
- ;Author: Al Hawley
- ;Date: 06 Mar 1987
- ;Version number: 1.0a
- ;Previous version: 1.0 dated 4 March 1987
-
- ;Version History:
-
- ;Program Function: ARRAYLIB is a collection of subroutines which
- ; implement the management of byte arrays in programs written
- ; for Z80 or HD64180 based computers. This module is one of the
- ; set, and may require the presence of others.
-
- ;***************************************************
- ; COPYRIGHT NOTICE
- ;ARRAYLIB is copyright by A. E. Hawley on March 4, 1987.
- ;It may be freely distributed, but it must not be sold
- ;either separately or as part of a package without the
- ;written consent of the author. The author may be reached
- ;via electronic mail at the Ladera Z-Node in Los Angeles,
- ;213-670-9465, or by U.S. Mail at:
- ;
- ; 6032 Chariton Ave.
- ; Los Angeles, CA. 90056
- ; Voice Phone: 213-649-3575
- ;
- ; RELEASE NOTICE
- ;ARRAYLIB is released for beta test through the Z-system
- ;users group Z-SIG. It may be reached through the
- ;Lillipute Z-Node in Chicago, 312-649-1730.
-
- ;***************************************************
-
- name reverse
- ;This module contains the following routines:
- public arinvert
-
- arinvert:
- ;invert the order of the bits in each byte of a (dumaplen)
- ;byte disk/user map from row 0, column 0 to the end.
- ld hl,(bitmap) ;address of row 0, col 0
- ld a,h
- or a,l
- ld a,1 ;error code - undef array
- scf ;in case hl = 0 (undef array)
- ret z ;return if undef array
-
- ld a,(dumaplen)
- ld b,a ;length of du map
- invrt1: call armirror ;invert bits at (hl). bc preserved
- inc hl
- djnz invrt1
- ret
-
- ;*************************************
-
- armirror:
- ;invert the order of the bits at (hl)
- ;input: hl = addr of byte to invert
- ;output: mirror image in (hl)
- ; swap bits 0-7,1-6,2-5,3-4
- ; reg a is destroyed
- ;all other registers preserved
-
- ;test for common symetrical cases and
- ;do nothing (it's faster)
- ld a,(hl)
- or a ;00000000b?
- ret z
- cp 0ffh ;11111111b?
- ret z
- ;probably not symetrical. make mirror image.
- push bc
- rra ;lsb->cy, rotate right
- rl c ;cy-lsb, rotate left
- rra ;..repeat 7 more times
- rl c
- rra
- rl c ;this code would be shorter
- rra ;..if done in a loop, but
- rl c ;..also slower
- rra
- rl c
- rra
- rl c
- rra
- rl c
- rra
- rl c ;reversed pattern in c
- ld (hl),c ;store at memory loc
- pop bc
- ret
-
- ;**********************************************
- COMMON /ARDAT/
-
- ;COMMON data area - contains default values for a 64
- ;byte array useful for disk/user bitmapping.
- bitmap: dw 0 ;..filled in by ARRAYDEF
- hicol: dw 3 ;4 columns: 0,1,2,3
- hirow: dw 15 ;16 rows (0....15)
- dumaplen:
- dw 64 ;(3+1)*(15+1)
-
- maxdu: dw 0 ;transient d/u data
- curloc: dw 0 ;NDR entry pointer
-
- ;**********************************************
-
- end
-