home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol073 / wmpat.asm < prev   
Assembly Source File  |  1984-04-29  |  3KB  |  185 lines

  1. ;
  2. ; title        Wordmaster patch for VDM-1
  3. ; filename    wmpat.asm
  4. ; author    Robert A. Van Valzah   3/14/79
  5. ; last revisor    R. A. V.  11/11/79
  6. ; reason    revised for word master 1.06, added routine
  7. ;        to actually do a carriage return when needed
  8. ;
  9. screen    equ    0cc00h
  10. ;
  11. ; These equates must be set by disassembling a virgin copy
  12. ; of wordmaster to find present values.
  13. ;
  14. pastwm    equ    29b8h    ;value dw'd in pbegmem
  15. ;
  16. ;
  17.     org    180h    ;clear screen and home
  18.     push    h    ;save wm reg h
  19.     lxi    h,screen
  20.     shld    cursor
  21. clr:
  22.     mvi    m,' '
  23.     inx    h
  24.     mov    a,h
  25.     cpi    (screen shr 8)+4
  26.     jnz    clr
  27.     jmp    morclr    ;cont'd below
  28. ;
  29.     org    196h
  30. tcursor:
  31.     push    h    ;save line & cold
  32.     call    csoff
  33.     pop    h
  34.     push    h
  35.     push    d
  36.     lxi    d,screen
  37.     mov    a,h    ;save col
  38.     mvi    h,0    ;multiply line by 64
  39.     rept    6
  40.       dad    h
  41.     endm
  42.     dad    d    ;add displacement to screen base
  43.     add    l    ;add col to line
  44.     mov    l,a
  45.     call    cson
  46.     pop    d
  47.     pop    h
  48.     ret
  49. ;
  50.     org    1b7h    ;patch in new end of memory to take into account
  51.     dw    neweom    ;added code
  52.     db    16    ;patch in new hight of 25 lines
  53.     db    64    ;patch in new line length
  54.     db    0    ;no erase to end of line
  55. ;
  56.     org    1c1h    ;patch out all delays
  57.     db    0, 0, 0
  58. ;
  59.     org    pastwm    ;org to patch area
  60. morclr:
  61.     lxi    h,screen
  62.     call    cson
  63.     pop    h    ;restore wm's reg h
  64.     lda    initdone
  65.     ora    a
  66.     rnz
  67.     push    h    ;save wm's reg h
  68.     mvi    a,0ffh    ;set init done flag
  69.     sta    initdone
  70.     lhld    1
  71.     inx    h
  72.     push    h    ;save address of address field of
  73.     mov    a,m    ;boot jmp in cbios table
  74.     inx    h
  75.     mov    h,m
  76.     mov    l,a
  77.     shld    oldboot    ;save old boot routine address
  78.     pop    h
  79.     mvi    m,low(boot) ;poke address of out boot routine
  80.     inx    h
  81.     mvi    m,high(boot)
  82.     lhld    1    ;as above for co jump
  83.     mvi    l,0dh
  84.     push    h    ;save address of co jump
  85.     mov    a,m
  86.     inx    h
  87.     mov    h,m
  88.     mov    l,a
  89.     shld    oldco
  90.     pop    h
  91.     mvi    m,low(outch)
  92.     inx    h
  93.     mvi    m,high(outch)
  94.     pop    h    ;restore wm's reg h
  95.     ret
  96. ;
  97. boot:    ;resore old boot and co jumps
  98.     lhld    oldboot
  99.     xchg
  100.     lhld    1
  101.     inx    h
  102.     mov    m,e
  103.     inx    h
  104.     mov    m,d
  105.     lhld    oldco
  106.     xchg
  107.     lhld    1
  108.     mvi    l,0dh
  109.     mov    m,e
  110.     inx    h
  111.     mov    m,d
  112.     jmp    0
  113. ;
  114. outch:
  115.     push    h    ;save wm's reg h
  116.     call    csoff    ;off with old cursor
  117.     mov    a,c
  118.     cpi    10    ;new line?
  119.     jz    lf    ;yes
  120.     cpi    13    ;carriage return?
  121.     jz    cr
  122.     mov    m,c    ;no put new chr on screen
  123.     inx    h
  124. onret:            ;turn on cursor & return
  125.     call    cson
  126.     pop    h    ;restore wm's reg h
  127.     ret
  128. cr:
  129.     mov    a,l    ;move cursor to start of line
  130.     ani    255-63
  131.     mov    l,a
  132.     jmp    onret    ;and return
  133. lf:            ;process line feed char
  134.     inx    h    ;move cursor to start of next line
  135.     mov    a,l
  136.     ani    63
  137.     jnz    lf
  138.     mov    a,h    ;off end of screen?
  139.     cpi    (screen shr 8)+4
  140.     jnz    onret    ;no - just return
  141.     push    d    ;yes - scroll
  142.     lxi    h,screen
  143.     lxi    d,screen+40h
  144. movup:
  145.     ldax    d
  146.     mov    m,a
  147.     inx    d
  148.     inx    h
  149.     mov    a,d
  150.     cpi    (screen shr 8)+4
  151.     jnz    movup
  152.     push    h    ;blank new line
  153. blnk:
  154.     mvi    m,' '
  155.     inx    h
  156.     mov    a,h
  157.     cpi    (screen shr 8)+4
  158.     jnz    blnk
  159.     pop    h
  160.     pop    d
  161.     jmp    onret
  162. ;
  163. csoff:
  164.     lhld    cursor
  165.     mov    a,m
  166.     ani    7fh
  167.     mov    m,a
  168.     ret
  169. ;
  170. cson:
  171.     shld    cursor
  172.     mov    a,m
  173.     ori    80h
  174.     mov    m,a
  175.     ret
  176. ;
  177. initdone db    0
  178. oldco    ds    2
  179. oldboot    ds    2
  180. cursor    ds    2
  181. ;
  182. neweom:
  183. ;
  184.     end
  185.