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 >
Assembly Source File  |  1989-09-27  |  3KB  |  123 lines

  1.     page
  2.  
  3. chr$move    macro    xx,yy,zz
  4.     lxi    h,xx*16+DS$char$def
  5.     lxi    d,yy*16+DS$char$def
  6.     lxi    b,zz*16-8
  7.     call    block$move$80
  8.     endm
  9.  
  10. chr$fill    macro    xx,yy,zz
  11.     lxi    h,xx*16+DS$char$def    ; start adr
  12.     lxi    b,yy*16            ; count
  13.     mvi    d,zz            ; character to fill with
  14.     call    block$fill$80
  15.     endm
  16.  
  17. newoffset    equ    179*11*2
  18. ;
  19. ;    1st move pet-asc characters to ASCII positions
  20. ;
  21. install$ASCII:
  22.     lxi    h,100h*16+DS$char$def+4    ; point to center of @ char
  23.     call    rd$mem            ; ..read it to B
  24.     inr    b            ; ..if it is a zero then
  25.     dcr    b            ; ..install$ascii has been done
  26.     rz                ; ..so just exit
  27.  
  28.     Chr$fill    180h,64,0    ; fill 180-1bf with 0
  29.  
  30.     Chr$move    17ah,18ah,1
  31.     Chr$move    169h,189h,1
  32.     Chr$move    15eh,18eh,2    ; move  2 character definitions
  33.     Chr$move    101h,161h,26    ; move 16 character definitions
  34.  
  35.     Chr$fill    100h,32,0
  36.  
  37.     Chr$move    000h,140h,1
  38.     Chr$move    01bh,15bh,3    ; move 3 character definitions
  39.     Chr$move    01ch,180h,1
  40.     Chr$move    01eh,181h,2
  41.     Chr$move    040h,1c0h,64    ; move 16 character definitions
  42.  
  43. ;    now install characters that are NOT already defined
  44.  
  45.     lxi    d,extra$char$table
  46.     lxi    h,15ch*16+DS$char$def
  47.     call    char$install
  48.  
  49.     lxi    h,15eh*16+DS$char$def
  50.     mvi    b,3                ; install 5e, 5f and 60
  51.     call    char$install$group
  52.  
  53.     lxi    h,17bh*16+DS$char$def
  54.     mvi    b,5
  55.     jr    char$install$group        ; call/ret
  56.  
  57.     page
  58. ;
  59. ;    user function, HL supplied on the stack under the stack
  60. ;
  61. char$install$gp:
  62.     pop    h            ; get return address
  63.     xthl                ; get HL from stack (ret adr to stack)
  64. ;
  65. ;    this routine will install a group of characters form
  66. ;    system memory into the video (character def) memory.
  67. ;
  68. ;    INPUT:
  69. ;        DE=system memory character definition
  70. ;        HL=character code adr to install
  71. ;         B=number of characters to install (should be > 2)
  72. ;    OUTPUT:
  73. ;        DE=eight more then on entry
  74. ;        HL=character code adr to install + B*16
  75. ;         B=0
  76. ;
  77. char$install$group:
  78.     push    b
  79.     push    h
  80.     call    char$install
  81.     pop    h
  82.     lxi    b,16
  83.     dad    b            ; advance to the next character
  84.     pop    b
  85.     djnz    char$install$group
  86.  
  87.     ret
  88.  
  89.     page
  90. ;
  91. ;    this routine will install the character pointed to by DE
  92. ;    into the 8563 ASCII char set, character number pointed
  93. ;    to by HL.
  94. ;    INPUT:
  95. ;        DE=system memory character definition
  96. ;        HL=character code adr to install
  97. ;    OUTPUT:
  98. ;        DE=eight more then on entry
  99. ;         H=0
  100. ;
  101. char$install:
  102.     call    set$update$adr        ;
  103.     mvi    h,8            ; set the loop count
  104.  
  105. install$char$loop:
  106.     ldax    d            ; get the input data
  107.     outp    a            ; save to video memory
  108.     dcr    c            ; point to status register
  109.     inx    d            ; advance the input pointer
  110.  
  111. write$wait:
  112.     inp    a            ; wait for the chip to write
  113.     ral                ; the data to memory (with auto
  114.     jrnc    write$wait        ; incrment)
  115.  
  116.     inr    c            ; point to the data register
  117.     dcr    h            ; dec the loop count
  118.     jrnz    install$char$loop
  119.  
  120.     ret
  121.  
  122.     page
  123.