home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol075
/
g82.asm
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
4KB
|
115 lines
page 55
maclib bds
maclib cmac
direct
define swaphl
define wait
define getplot
enddir
;
;********************************************************
;* *
;* BDS-C Supplementary Library *
;* release 2 *
;* *
;* Steve de Plater, Nov. 1980 *
;* 66 Priam St. *
;* Chester Hill, *
;* NSW, 2162 *
;* Australia *
;* Phone: (02) 644 4009 *
;* *
;* This file: G82.ASM release 1 *
;* *
;********************************************************
;
;=============================================================
;
; int swaphl(p1)
; int p1;
;
; Returns the 16 bit word P1 with HI and LO bytes swapped.
;
prelude swaphl
call ma1toh ;get the word to swap to HL
mov d,h ;and swap it!
mov h,l
mov l,d
ret
postlude swaphl
;
;
;=============================================================
;
; int wait(port,mask,polarity);
;
; Used to generate tight status port loops
; If polarity is TRUE (non zero) then the routine returns
; when (PORT AND MASK) gives a ZERO result
; (ie when PORT and MASK have NO bits in common)
; If polarity is FALSE (zero) then the routine returns
; when (PORT AND MASK) gives a NON ZERO result
; (ie when PORT and MASK have SOME bits in common)
; The value returned is data input from the port.
;
prelude wait
call arghak ;get the parameters
push b
lda arg1 ;the port number
reloc sta,wait2a ;I hate self
reloc sta,wait4a ; modifying
reloc sta,wait6a ; code!
lda arg2 ;the MASK
mov b,a
lda arg3 ;the polarity
ora a ;false polarity ?
reloc jz,wait4 ;yes - jump
wait2: in 0 ;input the port
ana b ;and MASK
reloc jnz,wait2 ;and loop while NZ
reloc jmp,wait6
wait4: in 0 ;input the port
ana b ;and MASK
reloc jz,wait4 ;and loop while Z
wait6: in 0 ;get the port again
mov l,a ;and into HL
mvi h,0
pop b
ret
wait2a equ wait2+1 ;KLUDGE!
wait4a equ wait4+1
wait6a equ wait6+1
postlude wait
;
;==============================================================
;
; int *getplot()
;
; Returns a pointer to the beginning of the data area in
; c.ccc which contain the dma plotting information.
;
; int *pbase; /* points to base addr of screen RAM */
; int *ysize; /* points to no. of columns */
; int *xsize; /* points to no. of rows */
; int *psize; /* points to size of plot area */
;
; pbase=getplot();
; ysize=pbase+1; /* pointers are NOT integers */
; xsize=ysize+1;
; psize=xsize+1;
;
prelude getplot
lxi h,pbase
ret
postlude getplot
;