home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol142 / banner.z80 < prev    next >
Encoding:
Text File  |  1984-04-29  |  17.5 KB  |  1,311 lines

  1.  
  2. ;********************************************************
  3. ;*                            *
  4. ;*  Program to do BIG banners in a 12x7 matrix        *
  5. ;*  -----------------------------------------        *
  6. ;*   Barrie Hall  , 4th November 1982            *
  7. ;*   Macro-80 format for a Z80 CPU.            *
  8. ;*                            *
  9. ;*                            *
  10. ;*  Features:                        *
  11. ;*        - Full 96 characters.            *
  12. ;*        - 12x7 matrix.                *
  13. ;*        - Lower case DESCENDERS.        *
  14. ;*        - Command tail OR Interactive mode.    *
  15. ;*                            *
  16. ;*   This program prints banners on the CP/M console.    *
  17. ;*  To get the banner on your printer, use ^P before    *
  18. ;*  you use BANNER.                    *
  19. ;*   The characters are stored as a series of 9 bytes    *
  20. ;*  which represent a 9x7 matrix, this matrix is shifted*
  21. ;*  down three rows for lower case descenders, if there    *
  22. ;*  are no descending chars in the current line, the    *
  23. ;*  program does three line feeds.            *
  24. ;*   For most chars, the fill charcater used is the     *
  25. ;*  actual char itself, BUT some ('!"(){}[]/) chars are    *
  26. ;*  illegible so the program will use an X IFF the char    *
  27. ;*  appears in the lookup table at the end of the prog.    *
  28. ;*                            *
  29. ;*   If you type:                    *
  30. ;*        A>banner hello fred            *
  31. ;*  ,the program will print the banner, HELLO FRED, in    *
  32. ;*  upper case on the console, (CP/M translates all char*
  33. ;*  in its command line to UPPER CASE.            *
  34. ;*  If you type:                    *
  35. ;*        A>banner                *
  36. ;*  ,the program will give a prompt (>), now you can     *
  37. ;* up to a thousand characters and as many lines as you    *
  38. ;* at up to 15 chars a line (limit with 15" paper).    *
  39. ;*  When you have finished your message, type '\' on a    *
  40. ;* line by it's self (i.e. >\ ). The program will banner*
  41. ;* print the lines you have typed in.            *
  42. ;*                            *
  43. ;*               Barrie Hall, 15th Nov 82    *
  44. ;*                            *
  45. ;* Please send bugs, comments, abuse etc to:         *
  46. ;*                            *
  47. ;*        Sydney RCPM on (02)997-1836        *
  48. ;*        OR verabally on (02)80-2200        *
  49. ;*                            *
  50. ;*   All commercial rights reservered by author.    *
  51. ;*    (c) 1982                    *
  52. ;*                            *
  53. ;********************************************************
  54.  
  55.     aseg
  56.     .z80
  57.     org    0100h
  58. lines    equ    12
  59. fdos    equ    0005h
  60. fcb    equ    005ch
  61. fcbcr    equ    fcb+32
  62. cmdbuf    equ    80h       ;cpm command line tail
  63. true    equ    0
  64. false    equ    not true    ;a lie???
  65. cr    equ    0dh
  66. lf    equ    0ah
  67.  
  68. ;This routine prints the CP/M command tail as a 9x7 banner
  69. ;on the console OR gets lines from console and buffer them
  70. ;up until we get a \ on a line by itself.
  71.  
  72. ; The format is 9 lines by 7 columns, the columns are the
  73. ;Bits in the byte, each byte represents a line of the char.
  74. ; SO we scan a byte for each char in each line.
  75.     ld    (stack),sp
  76.     ld    sp,dtem        ;space for stack
  77. ;dont print leading spaces in the command tail
  78.     ld    a,(cmdbuf)    ;length byte
  79.     cp    0
  80.     jr    z,inter1    ;no command line, give prom
  81.     add    a,81h        ;address of last+1 char
  82.     ld    h,0
  83.     ld    l,a
  84.     ld    (hl),00        ;so prog terminates!!
  85.     ld    hl,cmdbuf+1
  86. nxtf::    ld    a,(hl)
  87.     inc    hl
  88.     cp    ' '
  89.     jr    z,nxtf
  90.     cp    09h
  91.     jr    z,nxtf
  92.     cp    00h
  93.     jp    z,gsys        ;no message
  94.     dec    hl
  95.     ld    (messg),hl
  96.     call    bigchar    
  97.     ld    sp,(stack)    ;restore stack and
  98.     ret            ;go to the CCP.
  99. ;interactive mode, give a prompt and read a line, store
  100. ;it in the buffer and get another line from the console.
  101. ;if the first char on the line is slosh '\', go and print
  102. ;the buffer in banner format and return to CP/M.
  103.  
  104.  
  105. inter1::
  106.     ld    hl,bffer
  107.     ld    (bptr),hl
  108. inter2::
  109.     call    crlf
  110. dff::    ld    e,'>'
  111.     call    cout
  112.     ld    a,15    ;max char with 130 columns
  113.     ld    (80h),a
  114.     ld    de,80h
  115.     call    lchin
  116.     ld    a,(81h)
  117.     ld    b,a
  118.     cp    0
  119.     jr    z,inter2    ;no chars typed...
  120. ;move what was typed to the main buffer and zero terminate
  121. ;it.
  122.     ld    a,(82h)
  123.     cp    '\'        ;terminate??
  124.     jr    z,prt44        ;go and print the buffer
  125.     ld    a,b
  126.     ld    de,(bptr)    ;get pointer to main text
  127.     push    de        ;buffer..save for later
  128.     push    af        ;set up block move
  129.     ld    c,a        ;length
  130.     ld    b,0
  131.     ld    hl,82h        ;first byte of text
  132.     ldir            ;block move to the main buffer
  133.     pop    af
  134.     pop    hl
  135.     ld    c,a
  136.     ld    b,0
  137.     add    hl,bc        ;update buffer pointer
  138.     ld    (hl),0        ;zero terminate
  139.     inc    hl
  140.     ld    (bptr),hl
  141.     jr    inter2        ;do again
  142.  
  143. prt44::
  144.     ld    hl,(bptr)
  145.     ld    (hl),0ffh    ;message terminate
  146. ;now, print a line at a time , when there is an 0ffh after
  147. ;a zero(end of line), return to CP/M
  148.     ld    hl,bffer
  149. nxmss1::
  150.     ld    (messg),hl
  151.     push    hl
  152.     call    bigchar        ;do one line.
  153.     pop    hl
  154. zrlp::    ld    a,(hl)
  155.     inc    hl
  156.     cp    0
  157.     jr    nz,zrlp
  158.     ld    a,(hl)
  159.     cp    0ffh
  160.     jr    nz,nxmss1
  161. ;else exit to cpm
  162.     ld    sp,(stack)
  163.     ret
  164.  
  165. bigchar::
  166. ; this routine prints out the banner line
  167. ;using the data table. The chars come from the CP/M
  168. ;command tail OR the interactive data buffer.
  169.  
  170.     ld    a,false
  171.     ld    (desflg),a
  172.     ld    b,0    ;line ZERO
  173. netlin::
  174.     ld    ix,(messg)
  175. nxtchr::
  176.     ld    a,(ix)
  177.     inc    ix
  178.     cp    00
  179.     jr    z,nxtln
  180.     cp    ' '
  181.     jr    z,spce
  182.     cp    09h
  183.     jr    z,spce
  184.     push    bc
  185. ;check for lower case descenders
  186. ;g,j,p,q,y
  187.     cp    'g'
  188.     jr    z,des
  189.     cp    'j'
  190.     jr    z,des
  191.     cp    'p'
  192.     jr    z,des
  193.     cp    'q'
  194.     jr    z,des
  195.     cp    'y'
  196.     jr    z,des
  197.     ld    d,a
  198.     ld    a,b
  199.     cp    9
  200.     jr    c,nwrs
  201.     ld    a,(desflg)
  202.     cp    true
  203.     jr    nz,ext11    ;no descenders
  204.     jr    spps        ;do some lf's and leave.
  205. nwrs::    ld    a,d
  206. bopo::    call    biglne
  207. aftr::
  208.     pop    bc
  209.     jr    nxtchr
  210. des::
  211. ;set descenders this line flag
  212. ;and print 7 spaces if line < 3
  213.     ld    d,a
  214.     ld    a,true
  215.     ld    (desflg),a
  216.     ld    a,b
  217.     sub    3
  218.     cp    0
  219.     ld    b,a
  220.     jp    m,spps
  221.     ld    a,d
  222.     jr    bopo
  223. spps::
  224.     ld    e,' '
  225.     ld    b,9
  226. spss1::
  227.     call    cout
  228.     djnz    spss1
  229.     jr    aftr
  230.  
  231. nxtln::
  232.     inc    b
  233.     ld    a,b
  234.     cp    lines    ;12 lines
  235.     jr    z,gsys
  236.     call    crlf
  237.     jr    netlin
  238.  
  239. spce::
  240.     push    bc
  241.     ld    b,9
  242. spc11::
  243.     ld    e,' '
  244.     call    cout
  245.     djnz    spc11
  246.     pop    bc
  247.     jr    nxtchr
  248.  
  249. ext11::
  250. ;do 3 crslfs and go to CP/M
  251.     pop    bc
  252.     ld    b,3
  253. lflop::
  254.     call    crlf
  255.     djnz    lflop
  256. gsys::
  257.     ld    e,cr
  258.     call    cout
  259.     ret
  260.  
  261.  
  262. biglne::
  263. ;this routine prints out line N of char in A reg on the
  264. ;console
  265.  
  266. ;work out mask for matrix from 01 to 80
  267.     ld    (chr),a
  268.     sub    21h
  269.     ret    m
  270. ;line number is passed in B reg
  271. ;multiply A by 9 to get offset, add base address
  272. ;9A can be up to 1192 (lots) so use 16 bit arith
  273.     ld    l,a
  274.     ld    h,0
  275.     push    hl
  276.     pop    de
  277.     add    hl,hl        ;x2
  278.     add    hl,hl        ;x4
  279.     add    hl,hl        ;x8
  280.     add    hl,de        ;+1=9
  281.     ld    de,graf        ;add table offset
  282.     add    hl,de
  283.     ld    c,b        ;byte offset THIS LINE
  284.     ld    b,0
  285.     add    hl,bc    ;got address of byte for this line
  286. ;now move the AND mask through the LINE byte and print
  287. ;out the chars and spaces.
  288.     ld    a,(hl)    ;byte for line number B.
  289.     ld    d,a    ;remeber A reg
  290.     ld    b,7
  291.     ld    c,40h    ;initial mask
  292. chrpp::
  293.     ld    a,d
  294.     push    hl
  295.     push    bc
  296.     and    c
  297.     jr    z,blk
  298.     ld    a,(chr)        ;decide between an 'X'
  299.     ld    hl,lup1
  300.     ld    b,lup2-lup1    ;length of look up table
  301. lupps::
  302.     cp    (hl)
  303.     inc    hl
  304.     jr    z,xxss        ;its in table of bad print chrs
  305.     djnz    lupps
  306. ;not in table print it verbatim (hope not!)
  307.     ld    e,a
  308.     call    cout        ;matrix fill char.
  309. ljj::    pop    bc
  310.     pop    hl
  311.     srl    c
  312.     djnz    chrpp
  313.     ld    e,' '    ;inter..
  314.     call    cout    ;character..
  315.     call    cout    ;spacing..
  316.     ret
  317. xxss::
  318.     ld    e,'X'
  319.     call    cout
  320.     jr    ljj
  321. blk::
  322.     ld    e,' '
  323.     call    cout
  324.     jr    ljj
  325.  
  326. ;cpm routines
  327.  
  328. crlf:    ld    e,0ah
  329.     call    cout
  330.     ld    e,0dh
  331.     call    cout
  332.     ret
  333. ;    
  334. cout:    push    bc
  335.     push    de
  336.     push    hl
  337.     ld    c,2
  338.     jr    cpm
  339. ;
  340. chin:    push    bc
  341.     push    de
  342.     push    hl    
  343.     ld    c,1    
  344.     jr    cpm
  345. ;
  346. lchin::    push    bc
  347.     push    de
  348.     push    hl
  349.     ld    c,10
  350.     jr    cpm
  351.  
  352.  
  353. pmess::    push    bc
  354.     push    de
  355.     push    hl
  356.     ld    c,9
  357.     jr    cpm
  358.  
  359. open::    push    bc
  360.     push    de
  361.     push    hl
  362.     ld    c,15        ;open cp/m file code
  363.     jr    cpm
  364.  
  365. read::    push    bc
  366.     push    de
  367.     push    hl
  368.     ld    c,20        ;read cp/m file code.
  369.     jr    cpm
  370.  
  371.  
  372. setdma::
  373.     push    bc
  374.     push    de
  375.     push    hl
  376.     ld    c,26        ;set dma address code.
  377.     jr    cpm
  378.  
  379. cpm::    call    fdos        ;go to cp/m
  380.     pop    hl        ;restore all registers pushed
  381.     pop    de
  382.     pop    bc
  383.     ret            ;back to the main program
  384.  
  385. ;table for the Banner characters....
  386. graf::
  387. ;1 byte per line - 9 lines per character
  388.  
  389. ;!
  390.     db    0001000b
  391.     db    0001000b
  392.     db    0001000b
  393.     db    0001000b
  394.     db    0001000b
  395.     db    0
  396.     db    0
  397.     db    0001000b
  398.     db    0001000b
  399. ;"
  400.     db    0100100b
  401.     db    0100100b
  402.     db    0100100b
  403.     db    0,0,0,0,0,0
  404. ;#
  405.     db    0010100b
  406.     db    0010100b
  407.     db    0010100b
  408.     db    1111111b
  409.     db    0010100b
  410.     db    1111111b
  411.     db    0010100b
  412.     db    0010100b
  413.     db    0010100b
  414. ;$
  415.     db    0001000b
  416.     db    0111111b
  417.     db    1001000b
  418.     db    1001000b
  419.     db    0111110b
  420.     db    0001001b
  421.     db    0001001b
  422.     db    1111110b
  423.     db    0001000b
  424. ;%
  425.     db    0100000b
  426.     db    1010001b
  427.     db    0100010b
  428.     db    0000100b
  429.     db    0001000b
  430.     db    0010000b
  431.     db    0100010b
  432.     db    1000101b
  433.     db    0000010b
  434. ;&
  435.     db    0111000b
  436.     db    1000100b
  437.     db    1000100b
  438.     db    0101000b
  439.     db    0010000b
  440.     db    0101001b
  441.     db    1000110b
  442.     db    1000110b
  443.     db    0111001b
  444. ;'
  445.     db    0001100b
  446.     db    0001100b
  447.     db    0001000b
  448.     db    0010000b
  449.     db    0,0,0,0,0
  450. ;(
  451.     db    0000100b
  452.     db    0001000b
  453.     db    0010000b
  454.     db    0010000b
  455.     db    0010000b
  456.     db    0010000b
  457.     db    0010000b
  458.     db    0001000b
  459.     db    0000100b
  460. ;)
  461.     db    0010000b
  462.     db    0001000b
  463.     db    0000100b
  464.     db    0000100b
  465.     db    0000100b
  466.     db    0000100b
  467.     db    0000100b
  468.     db    0001000b
  469.     db    0010000b
  470. ;*
  471.     db    0001000b
  472.     db    1001001b
  473.     db    0101010b
  474.     db    0011100b
  475.     db    1111111b
  476.     db    0011100b
  477.     db    0101010b
  478.     db    1001001b
  479.     db    0001000b
  480. ;+
  481.     db    0
  482.     db    0001000b
  483.     db    0001000b
  484.     db    0001000b
  485.     db    1111111b
  486.     db    0001000b
  487.     db    0001000b
  488.     db    0001000b
  489.     db    0
  490. ;,
  491.     db    0,0,0,0
  492.     db    0011000b
  493.     db    0011000b
  494.     db    0010000b
  495.     db    0100000b
  496.     db    0
  497. ;-
  498.     db    0,0,0,0
  499.     db    1111111b
  500.     db    0,0,0,0
  501. ;.
  502.     db    0,0,0,0,0,0,0
  503.     db    0011000b
  504.     db    0011000b
  505. ;/
  506.     db    0
  507.     db    0000001b
  508.     db    0000010b
  509.     db    0000100b
  510.     db    0001000b
  511.     db    0010000b
  512.     db    0100000b
  513.     db    1000000b
  514.     db    0
  515. ;0
  516.     db    0111110b
  517.     db    1000001b
  518.     db    1000011b
  519.     db    1000101b
  520.     db    1001001b
  521.     db    1010001b
  522.     db    1100001b
  523.     db    1000001b
  524.     db    0111110b
  525. ;1
  526.     db    0001000b
  527.     db    0011000b
  528.     db    0101000b
  529.     db    0001000b
  530.     db    0001000b
  531.     db    0001000b
  532.     db    0001000b
  533.     db    0001000b
  534.     db    0111110b
  535. ;2
  536.     db    0111110b
  537.     db    1000001b
  538.     db    0000001b
  539.     db    0000010b
  540.     db    0011100b
  541.     db    0100000b
  542.     db    1000000b
  543.     db    1000000b
  544.     db    1111111b
  545. ;3
  546.     db    0111110b
  547.     db    1000001b
  548.     db    0000001b
  549.     db    0000001b
  550.     db    0011110b
  551.     db    0000001b
  552.     db    0000001b
  553.     db    1000001b
  554.     db    0111110b
  555. ;4
  556.     db    0000010b
  557.     db    0000110b
  558.     db    0001010b
  559.     db    0010010b
  560.     db    0100010b
  561.     db    1000010b
  562.     db    1111111b
  563.     db    0000010b
  564.     db    0000010b
  565. ;5
  566.     db    1111111b
  567.     db    1000000b
  568.     db    1000000b
  569.     db    1111100b
  570.     db    0000010b
  571.     db    0000001b
  572.     db    0000001b
  573.     db    1000010b
  574.     db    0111100b
  575. ;6
  576.     db    0011110b
  577.     db    0100000b
  578.     db    1000000b
  579.     db    1000000b
  580.     db    1111110b
  581.     db    1000001b
  582.     db    1000001b
  583.     db    1000001b
  584.     db    0111110b
  585. ;7
  586.     db    1111111b
  587.     db    1000001b
  588.     db    0000010b
  589.     db    0000100b
  590.     db    0001000b
  591.     db    0010000b
  592.     db    0010000b
  593.     db    0010000b
  594.     db    0010000b
  595. ;8
  596.     db    0111110b
  597.     db    1000001b
  598.     db    1000001b
  599.     db    1000001b
  600.     db    0111110b
  601.     db    1000001b
  602.     db    1000001b
  603.     db    1000001b
  604.     db    0111110b
  605. ;9
  606.     db    0111110b
  607.     db    1000001b
  608.     db    1000001b
  609.     db    1000001b
  610.     db    0111111b
  611.     db    0000001b
  612.     db    0000001b
  613.     db    0000010b
  614.     db    0111100b
  615. ;:
  616.     db    0
  617.     db    0
  618.     db    0
  619.     db    0011000b
  620.     db    0011000b
  621.     db    0
  622.     db    0
  623.     db    0011000b
  624.     db    0011000b
  625. ;;
  626.     db    0011000b
  627.     db    0011000b
  628.     db    0
  629.     db    0
  630.     db    0011000b
  631.     db    0011000b
  632.     db    0010000b
  633.     db    0100000b
  634.     db    0
  635. ;<
  636.     db    0000100b
  637.     db    0001000b
  638.     db    0010000b
  639.     db    0100000b
  640.     db    1000000b
  641.     db    0100000b
  642.     db    0010000b
  643.     db    0001000b
  644.     db    0000100b
  645. ;=
  646.     db    0,0,0
  647.     db    0111110b
  648.     db    0
  649.     db    0111110b
  650.     db    0,0,0
  651. ;>
  652.     db    0010000b
  653.     db    0001000b
  654.     db    0000100b
  655.     db    0000010b
  656.     db    0000001b
  657.     db    0000010b
  658.     db    0000100b
  659.     db    0001000b
  660.     db    0010000b
  661. ;?
  662.     db    0011110b
  663.     db    0100001b
  664.     db    0100001b
  665.     db    0000001b
  666.     db    0000110b
  667.     db    0001000b
  668.     db    0001000b
  669.     db    0
  670.     db    0001000b
  671. ;@
  672.     db    0011110b
  673.     db    0100001b
  674.     db    1001101b
  675.     db    1010101b
  676.     db    1010101b
  677.     db    1011110b
  678.     db    1000000b
  679.     db    0100000b
  680.     db    0011110b
  681. ;A
  682.     db    0011100b
  683.     db    0100010b
  684.     db    1000001b
  685.     db    1000001b
  686.     db    1000001b
  687.     db    1111111b
  688.     db    1000001b
  689.     db    1000001b
  690.     db    1000001b
  691. ;B
  692.     db    1111110b
  693.     db    0100001b
  694.     db    0100001b
  695.     db    0100001b
  696.     db    0111110b
  697.     db    0100001b
  698.     db    0100001b
  699.     db    0100001b
  700.     db    1111110b
  701. ;C
  702.     db    0011110b
  703.     db    0100001b
  704.     db    1000000b
  705.     db    1000000b
  706.     db    1000000b
  707.     db    1000000b
  708.     db    1000000b
  709.     db    0100001b
  710.     db    0011110b
  711. ;D
  712.     db    1111100b
  713.     db    0100010b
  714.     db    0100001b
  715.     db    0100001b
  716.     db    0100001b
  717.     db    0100001b
  718.     db    0100001b
  719.     db    0100010b
  720.     db    1111100b
  721. ;E
  722.     db    1111111b
  723.     db    1000000b
  724.     db    1000000b
  725.     db    1000000b
  726.     db    1111000b
  727.     db    1000000b
  728.     db    1000000b
  729.     db    1000000b
  730.     db    1111111b
  731. ;F
  732.     db    1111111b
  733.     db    1000000b
  734.     db    1000000b
  735.     db    1000000b
  736.     db    1111000b
  737.     db    1000000b
  738.     db    1000000b
  739.     db    1000000b
  740.     db    1000000b
  741. ;G
  742.     db    0011110b
  743.     db    0100001b
  744.     db    1000000b
  745.     db    1000000b
  746.     db    1000000b
  747.     db    1001111b
  748.     db    1000001b
  749.     db    0100001b
  750.     db    0011110b
  751. ;H
  752.     db    1000001b
  753.     db    1000001b
  754.     db    1000001b
  755.     db    1000001b
  756.     db    1111111b
  757.     db    1000001b
  758.     db    1000001b
  759.     db    1000001b
  760.     db    1000001b
  761. ;I
  762.     db    0111110b
  763.     db    0001000b
  764.     db    0001000b
  765.     db    0001000b
  766.     db    0001000b
  767.     db    0001000b
  768.     db    0001000b
  769.     db    0001000b
  770.     db    0111110b
  771. ;J
  772.     db    0011111b
  773.     db    0000100b
  774.     db    0000100b
  775.     db    0000100b
  776.     db    0000100b
  777.     db    0000100b
  778.     db    0000100b
  779.     db    1000100b
  780.     db    0111000b
  781. ;K
  782.     db    1000001b
  783.     db    1000010b
  784.     db    1000100b
  785.     db    1001000b
  786.     db    1010000b
  787.     db    1101000b
  788.     db    1000100b
  789.     db    1000010b
  790.     db    1000001b
  791. ;L
  792.     db    1000000b
  793.     db    1000000b
  794.     db    1000000b
  795.     db    1000000b
  796.     db    1000000b
  797.     db    1000000b
  798.     db    1000000b
  799.     db    1000000b
  800.     db    1111111b
  801. ;M
  802.     db    1000001b
  803.     db    1100011b
  804.     db    1010101b
  805.     db    1001001b
  806.     db    1001001b
  807.     db    1000001b
  808.     db    1000001b
  809.     db    1000001b
  810.     db    1000001b
  811. ;N
  812.     db    1000001b
  813.     db    1100001b
  814.     db    1010001b
  815.     db    1001001b
  816.     db    1000101b
  817.     db    1000011b
  818.     db    1000001b
  819.     db    1000001b
  820.     db    1000001b
  821. ;O
  822.     db    0011100b
  823.     db    0100010b
  824.     db    1000001b
  825.     db    1000001b
  826.     db    1000001b
  827.     db    1000001b
  828.     db    1000001b
  829.     db    0100010b
  830.     db    0011100b
  831. ;P
  832.     db    1111110b
  833.     db    1000001b
  834.     db    1000001b
  835.     db    1000001b
  836.     db    1111110b
  837.     db    1000000b
  838.     db    1000000b
  839.     db    1000000b
  840.     db    1000000b
  841. ;Q
  842.     db    0011100b
  843.     db    0100010b
  844.     db    1000001b
  845.     db    1000001b
  846.     db    1000001b
  847.     db    1001001b
  848.     db    1000101b
  849.     db    0100010b
  850.     db    0011101b
  851. ;R
  852.     db    1111110b
  853.     db    1000001b
  854.     db    1000001b
  855.     db    1000001b
  856.     db    1111110b
  857.     db    1001000b
  858.     db    1000100b
  859.     db    1000010b
  860.     db    1000001b
  861. ;S
  862.     db    0111110b
  863.     db    1000001b
  864.     db    1000000b
  865.     db    1000000b
  866.     db    0111110b
  867.     db    0000001b
  868.     db    0000001b
  869.     db    1000001b
  870.     db    0111110b
  871. ;T
  872.     db    1111111b
  873.     db    0001000b
  874.     db    0001000b
  875.     db    0001000b
  876.     db    0001000b
  877.     db    0001000b
  878.     db    0001000b
  879.     db    0001000b
  880.     db    0001000b
  881. ;U
  882.     db    1000001b
  883.     db    1000001b
  884.     db    1000001b
  885.     db    1000001b
  886.     db    1000001b
  887.     db    1000001b
  888.     db    1000001b
  889.     db    1000001b
  890.     db    0111110b
  891. ;V
  892.     db    1000001b
  893.     db    1000001b
  894.     db    1000001b
  895.     db    0100010b
  896.     db    0100010b
  897.     db    0010100b
  898.     db    0010100b
  899.     db    0001000b
  900.     db    0001000b
  901. ;W
  902.     db    1000001b
  903.     db    1000001b
  904.     db    1000001b
  905.     db    1000001b
  906.     db    1001001b
  907.     db    1001001b
  908.     db    1010101b
  909.     db    1100011b
  910.     db    1000001b
  911. ;X
  912.     db    1000001b
  913.     db    1000001b
  914.     db    0100010b
  915.     db    0010100b
  916.     db    0001000b
  917.     db    0010100b
  918.     db    0100010b
  919.     db    1000001b
  920.     db    1000001b
  921. ;Y
  922.     db    1000001b
  923.     db    1000001b
  924.     db    0100010b
  925.     db    0010100b
  926.     db    0001000b
  927.     db    0001000b
  928.     db    0001000b
  929.     db    0001000b
  930.     db    0001000b
  931. ;Z
  932.     db    1111111b
  933.     db    0000001b
  934.     db    0000010b
  935.     db    0000100b
  936.     db    0001000b
  937.     db    0010000b
  938.     db    0100000b
  939.     db    1000000b
  940.     db    1111111b
  941.  
  942.  
  943. ;[
  944.     db    0111100b
  945.     db    0100000b
  946.     db    0100000b
  947.     db    0100000b
  948.     db    0100000b
  949.     db    0100000b
  950.     db    0100000b
  951.     db    0100000b
  952.     db    0111100b
  953. ;\
  954.     db    0000000b
  955.     db    1000000b
  956.     db    0100000b
  957.     db    0010000b
  958.     db    0001000b
  959.     db    0000100b
  960.     db    0000010b
  961.     db    0000001b
  962.     db    0000000b
  963. ;]
  964.     db    0111100b
  965.     db    0000100b
  966.     db    0000100b
  967.     db    0000100b
  968.     db    0000100b
  969.     db    0000100b
  970.     db    0000100b
  971.     db    0000100b
  972.     db    0111100b
  973. ;^
  974.     db    0001000b
  975.     db    0010100b
  976.     db    0100010b
  977.     db    1000001b
  978.     db    0
  979.     db    0
  980.     db    0
  981.     db    0
  982.     db    0
  983. ;_
  984.     db    0,0,0,0,0,0,0,0
  985.     db    1111111b
  986. ;`
  987.     db    0011000b
  988.     db    0011000b
  989.     db    0001000b
  990.     db    0000100b
  991.     db    0,0,0,0,0
  992. ;a
  993.     db    0
  994.     db    0
  995.     db    0
  996.     db    0111100b
  997.     db    0000010b
  998.     db    0111110b
  999.     db    1000010b
  1000.     db    1000010b
  1001.     db    0111101b
  1002. ;b
  1003.     db    1000000b
  1004.     db    1000000b
  1005.     db    1000000b
  1006.     db    1011100b
  1007.     db    1100010b
  1008.     db    1000010b
  1009.     db    1000010b
  1010.     db    1100010b
  1011.     db    1011100b
  1012. ;c
  1013.     db    0
  1014.     db    0
  1015.     db    0
  1016.     db    0111100b
  1017.     db    1000010b
  1018.     db    1000000b
  1019.     db    1000000b
  1020.     db    1000010b
  1021.     db    0111100b
  1022. ;d
  1023.     db    0000010b
  1024.     db    0000010b
  1025.     db    0000010b
  1026.     db    0111010b
  1027.     db    1000110b
  1028.     db    1000010b
  1029.     db    1000010b
  1030.     db    1000110b
  1031.     db    0111010b
  1032. ;e
  1033.     db    0
  1034.     db    0
  1035.     db    0
  1036.     db    0111100b
  1037.     db    1000010b
  1038.     db    1111110b
  1039.     db    1000000b
  1040.     db    1000000b
  1041.     db    0111100b
  1042. ;f
  1043.     db    0001100b
  1044.     db    0010010b
  1045.     db    0010000b
  1046.     db    0010000b
  1047.     db    1111100b
  1048.     db    0010000b
  1049.     db    0010000b
  1050.     db    0010000b
  1051.     db    0010000b
  1052. ;g
  1053.     db    0111010b
  1054.     db    1000110b
  1055.     db    1000010b
  1056.     db    1000110b
  1057.     db    0111010b
  1058.     db    0000010b
  1059.     db    0000010b
  1060.     db    1000010b
  1061.     db    0111100b
  1062. ;h
  1063.     db    1000000b
  1064.     db    1000000b
  1065.     db    1000000b
  1066.     db    1011100b
  1067.     db    1100010b
  1068.     db    1000010b
  1069.     db    1000010b
  1070.     db    1000010b
  1071.     db    1000010b
  1072. ;i
  1073.     db    0
  1074.     db    0001000b
  1075.     db    0    
  1076.     db    0011000b
  1077.     db    0001000b
  1078.     db    0001000b
  1079.     db    0001000b
  1080.     db    0001000b
  1081.     db    0011100b
  1082. ;j
  1083.     db    0000110b
  1084.     db    0000010b
  1085.     db    0000010b
  1086.     db    0000010b    
  1087.     db    0000010b
  1088.     db    0000010b
  1089.     db    0000010b
  1090.     db    0100010b
  1091.     db    0011100b
  1092. ;k
  1093.     db    1000000b
  1094.     db    1000000b
  1095.     db    1000000b
  1096.     db    1000100b
  1097.     db    1001000b
  1098.     db    1010000b
  1099.     db    1101000b
  1100.     db    1000100b
  1101.     db    1000010b
  1102. ;l
  1103.     db    0011000b
  1104.     db    0001000b
  1105.     db    0001000b
  1106.     db    0001000b
  1107.     db    0001000b
  1108.     db    0001000b
  1109.     db    0001000b
  1110.     db    0001000b
  1111.     db    0011100b
  1112. ;m
  1113.     db    0
  1114.     db    0
  1115.     db    0
  1116.     db    1110110b
  1117.     db    1001001b
  1118.     db    1001001b
  1119.     db    1001001b
  1120.     db    1001001b
  1121.     db    1001001b
  1122. ;n
  1123.     db    0
  1124.     db    0
  1125.     db    0
  1126.     db    1011100b
  1127.     db    1100010b
  1128.     db    1000010b
  1129.     db    1000010b
  1130.     db    1000010b
  1131.     db    1000010b
  1132. ;o
  1133.     db    0
  1134.     db    0
  1135.     db    0
  1136.     db    0111100b
  1137.     db    1000010b
  1138.     db    1000010b
  1139.     db    1000010b
  1140.     db    1000010b
  1141.     db    0111100b
  1142. ;p
  1143.     db    1011100b
  1144.     db    1100010b
  1145.     db    1000010b
  1146.     db    1000010b
  1147.     db    1100010b
  1148.     db    1011100b
  1149.     db    1000000b
  1150.     db    1000000b
  1151.     db    1000000b
  1152. ;q
  1153.     db    0111010b
  1154.     db    1000110b
  1155.     db    1000010b
  1156.     db    1000010b
  1157.     db    1000110b
  1158.     db    0111010b
  1159.     db    0000010b
  1160.     db    0000010b
  1161.     db    0000011b
  1162. ;r
  1163.     db    0
  1164.     db    0
  1165.     db    0
  1166.     db    1011100b
  1167.     db    1100010b
  1168.     db    1000000b
  1169.     db    1000000b
  1170.     db    1000000b
  1171.     db    1000000b
  1172. ;s
  1173.     db    0
  1174.     db    0
  1175.     db    0
  1176.     db    0111100b
  1177.     db    1000010b
  1178.     db    0110000b
  1179.     db    0001100b
  1180.     db    1000010b
  1181.     db    0111100b
  1182. ;t
  1183.     db    0
  1184.     db    0010000b
  1185.     db    0010000b
  1186.     db    1111100b
  1187.     db    0010000b
  1188.     db    0010000b
  1189.     db    0010000b
  1190.     db    0010010b
  1191.     db    0001100b
  1192. ;u
  1193.     db    0
  1194.     db    0
  1195.     db    0
  1196.     db    1000010b
  1197.     db    1000010b
  1198.     db    1000010b
  1199.     db    1000010b
  1200.     db    1000110b
  1201.     db    0111010b
  1202. ;v
  1203.     db    0
  1204.     db    0
  1205.     db    0
  1206.     db    1000001b
  1207.     db    1000001b
  1208.     db    1000001b
  1209.     db    0100010b
  1210.     db    0010100b
  1211.     db    0001000b
  1212. ;w
  1213.     db    0
  1214.     db    0
  1215.     db    0
  1216.     db    1000001b
  1217.     db    1001001b
  1218.     db    1001001b
  1219.     db    1001001b
  1220.     db    1001001b
  1221.     db    0110110b
  1222. ;x
  1223.     db    0
  1224.     db    0
  1225.     db    0
  1226.     db    1000010b
  1227.     db    0100100b
  1228.     db    0011000b
  1229.     db    0011000b
  1230.     db    0100100b
  1231.     db    1000010b
  1232. ;y
  1233.     db    1000010b
  1234.     db    1000010b
  1235.     db    1000010b
  1236.     db    1000010b
  1237.     db    1000110b
  1238.     db    0111010b
  1239.     db    0000010b
  1240.     db    1000010b
  1241.     db    0111100b
  1242. ;z
  1243.     db    0
  1244.     db    0
  1245.     db    0
  1246.     db    1111110b
  1247.     db    0000100b
  1248.     db    0001000b
  1249.     db    0010000b
  1250.     db    0100000b
  1251.     db    1111110b
  1252. ;{
  1253.     db    0001110b
  1254.     db    0010000b
  1255.     db    0010000b
  1256.     db    0010000b
  1257.     db    0100000b
  1258.     db    0010000b
  1259.     db    0010000b
  1260.     db    0010000b
  1261.     db    0001110b
  1262. ;|
  1263.     db    0001000b
  1264.     db    0001000b
  1265.     db    0001000b
  1266.     db    0
  1267.     db    0
  1268.     db    0001000b
  1269.     db    0001000b
  1270.     db    0001000b
  1271.     db    0
  1272. ;}
  1273.     db    0111000b
  1274.     db    0000100b
  1275.     db    0000100b
  1276.     db    0000100b
  1277.     db    0000010b
  1278.     db    0000100b
  1279.     db    0000100b
  1280.     db    0000100b
  1281.     db    0111000b
  1282. ;~
  1283.     db    0110000b
  1284.     db    1001001b
  1285.     db    0000110b
  1286.     db    0,0,0,0,0,0
  1287.  
  1288. ;THE END
  1289.     db    0
  1290.     db    0
  1291.     db    0
  1292. ;these are chars which dont show up very well if they are
  1293. ;typed in the banner as themselves, SO we use an 'X' to
  1294. ;make up the matrix instead.
  1295. lup1::    db    '!','"','%','.',';',',','/','\','`','*'
  1296.     db    '(',')','~','^','|',':',27h,'-','='
  1297. ;dummy label
  1298. lup2::
  1299. messg::
  1300.     dw    0080h
  1301. stack::    dw    0000h    ;temp for CCP stack pointer
  1302. chr::    db    0
  1303. desflg::
  1304.     db    false
  1305. bptr::    dw    bffer
  1306. bffer::    ds    1000
  1307. dtem    equ    $+64    ;stack space
  1308.     end
  1309.  
  1310.  
  1311.