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
/
ENTERPRS
/
CPM
/
UTILS
/
A
/
28MAY87R.ARK
/
CXROMINT.ASM
< prev
next >
Wrap
Assembly Source File
|
1989-09-27
|
3KB
|
123 lines
page
chr$move macro xx,yy,zz
lxi h,xx*16+DS$char$def
lxi d,yy*16+DS$char$def
lxi b,zz*16-8
call block$move$80
endm
chr$fill macro xx,yy,zz
lxi h,xx*16+DS$char$def ; start adr
lxi b,yy*16 ; count
mvi d,zz ; character to fill with
call block$fill$80
endm
newoffset equ 179*11*2
;
; 1st move pet-asc characters to ASCII positions
;
install$ASCII:
lxi h,100h*16+DS$char$def+4 ; point to center of @ char
call rd$mem ; ..read it to B
inr b ; ..if it is a zero then
dcr b ; ..install$ascii has been done
rz ; ..so just exit
Chr$fill 180h,64,0 ; fill 180-1bf with 0
Chr$move 17ah,18ah,1
Chr$move 169h,189h,1
Chr$move 15eh,18eh,2 ; move 2 character definitions
Chr$move 101h,161h,26 ; move 16 character definitions
Chr$fill 100h,32,0
Chr$move 000h,140h,1
Chr$move 01bh,15bh,3 ; move 3 character definitions
Chr$move 01ch,180h,1
Chr$move 01eh,181h,2
Chr$move 040h,1c0h,64 ; move 16 character definitions
; now install characters that are NOT already defined
lxi d,extra$char$table
lxi h,15ch*16+DS$char$def
call char$install
lxi h,15eh*16+DS$char$def
mvi b,3 ; install 5e, 5f and 60
call char$install$group
lxi h,17bh*16+DS$char$def
mvi b,5
jr char$install$group ; call/ret
page
;
; user function, HL supplied on the stack under the stack
;
char$install$gp:
pop h ; get return address
xthl ; get HL from stack (ret adr to stack)
;
; this routine will install a group of characters form
; system memory into the video (character def) memory.
;
; INPUT:
; DE=system memory character definition
; HL=character code adr to install
; B=number of characters to install (should be > 2)
; OUTPUT:
; DE=eight more then on entry
; HL=character code adr to install + B*16
; B=0
;
char$install$group:
push b
push h
call char$install
pop h
lxi b,16
dad b ; advance to the next character
pop b
djnz char$install$group
ret
page
;
; this routine will install the character pointed to by DE
; into the 8563 ASCII char set, character number pointed
; to by HL.
; INPUT:
; DE=system memory character definition
; HL=character code adr to install
; OUTPUT:
; DE=eight more then on entry
; H=0
;
char$install:
call set$update$adr ;
mvi h,8 ; set the loop count
install$char$loop:
ldax d ; get the input data
outp a ; save to video memory
dcr c ; point to status register
inx d ; advance the input pointer
write$wait:
inp a ; wait for the chip to write
ral ; the data to memory (with auto
jrnc write$wait ; incrment)
inr c ; point to the data register
dcr h ; dec the loop count
jrnz install$char$loop
ret
page