home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol075 / 640graph.asm < prev    next >
Encoding:
Assembly Source File  |  1985-02-10  |  4.3 KB  |  208 lines

  1. ;Z80 VERSION OF 2650 GRAPHICS PACKAGE
  2. ;TRANSLATED BY S. K. PHILLIPS  JAN. 1980.
  3. ;
  4.     TITLE DG640 GRAPHICS FOR Z80
  5. ;
  6. ;
  7.     ORG 100H
  8. ;
  9. PAGE    EQU    0E8H    ;VDU START LOCATION
  10. ;
  11.     JP    START    ;GO TO START
  12. ;
  13. ;EXTRACT OP CODE FROM I/P INFORMATION
  14. ;NB. I/P INFO. IN H&L 
  15. ;H=OP CODE + Y COORD.  L=X COORD.
  16. ;
  17. GRAP:    LD    A,0C0H    ;MASK WORD
  18.     AND    H
  19.     LD    (OPER),A    ;SAVE OP CODE
  20. ;
  21. ;ENTER HERE TO BYPASS OP CODE
  22. SADD:    LD    A,H
  23.     LD    (Y),A    ;SAVE Y ADDRESS
  24.     LD    A,L
  25.     LD    (X),A    ;SAVE X ADDRESS
  26. ;
  27. ;EXTRACT ADDRESS OF BYTE CONTAINING THIS BIT
  28. ;
  29.     RR    L
  30.     RL    H
  31.     RL    L
  32.     RL    L
  33.     RR    H
  34.     RR    H
  35.     RR    H
  36.     RR    H
  37.     RR    L
  38.     RR    H
  39.     RR    L
  40.     LD    A,H
  41.     AND    03H    ;MASK TO GET 2 BITS OF POINTER
  42.     OR    PAGE    ;PAGE=VDU ADDRESS
  43.     LD    (PTR+1),A    ;SAVE HIGH ORDER
  44.     LD    A,L
  45.     LD    (PTR),A        ;SAVE LOW ORDER
  46. ;
  47. ;SET UP INDEX TO BIT WITHIN THIS BYTE
  48. ;
  49.     LD    L,01H
  50.     LD    A,H
  51.     AND    70H    ;MASK TO GET INDEX
  52.     JR    Z,ND-$
  53. LOP:    RL    L
  54.     SUB    10H    ;THIS DECREMENTS THE INDEX BY 1
  55.     JR    NZ,LOP-$
  56. ND:    LD    A,L    ;L NOW =8 BIT REPRESENTATION OF
  57.             ;3 BIT INDEX
  58.     LD    (INDX),A    ;STORE THE 8 BITS
  59. ;
  60. ;SET/CLEAR/INVERT/TEST BIT
  61. ;
  62. MOP:    LD    HL,(PTR)    ;HL POINTS TO BYTE ON SCREEN
  63.     LD    B,(HL)    ;GET CONTENTS OF BYTE ON SCREEN
  64.     LD    A,(OPER)    ;GET OPERAND
  65.     AND    A    ;SET FLAGS
  66.     JR    Z,TEST-$    ;JMP IF 00
  67.     CP    80H    ;SEE IF 'CLEAR' CODE
  68.     LD    A,(INDX)    ;GET IX BYTE
  69.     JP    M,SET    ;IF LT MUST BE SET=01B
  70.     JR    Z,REST-$    ;IF EQ MUST BE CLEAR=10B
  71.     JP    P,INVT    ;IF GT MUST BE INVERT=11B
  72. REST:    AND    B    ;RESET
  73. INVT:    XOR    B    ;INVERT
  74. STORE:    LD    (HL),A    ;STORE NEW CONTENTS
  75.     RET
  76. SET:    OR    B    ;OR IN NEW BIT
  77.     JR    STORE-$
  78. TEST:    AND    B
  79.     RET        ;WILL RETURN WITH ZERO FLAG SET
  80.             ;IF TEST FOR BIT AT THIS POINT
  81.             ;SHOWS THERE WAS NOTHING
  82. ;
  83. ;GRAPHICS INITIALISATION ROUTINE
  84. ;
  85. INIT:    LD    HL,0E800H    ;VDU ADDRESS
  86. LOOP1:    LD    (HL),00    ;CLEAR SCREEN CODE
  87.     INC    HL
  88.     BIT    2,H    ;DETECTS EC00 HEX
  89.     JR    Z,LOOP1-$
  90. LOOP2:    LD    (HL),02    ;CODE FOR GRAPHICS
  91.     INC    HL
  92.     BIT    4,H    ;DETECTS F000 HEX
  93.     JR    Z,LOOP2-$
  94.     LD    A,1
  95.     LD    (INDX),A    ;INIT INDEX
  96.     LD    A,0
  97.     LD    (X),A
  98.     LD    (Y),A
  99.     LD    (PTR),A    ;INIT X, Y & PTR
  100.     LD    A,0E8H
  101.     LD    (PTR+1),A    ;INIT MSB OF POINTER
  102. ;
  103. ;PICTURE WRITER ROUTINE
  104. ;ENTER HERE
  105. ;
  106. START:    LD    SP,6000H
  107. IN:    CALL    FIN    ;FLASH AND GET CHARACT IN A
  108.     CP    0EH    ;SEE IF CTL-N
  109.     JR    Z,INIT-$    ;IF SO INIT GRAPHICS
  110. ;
  111. ;TEST IF END
  112. ;
  113.     CP    0DH    ;SEE IF CR
  114.     JP    Z,0000    ;WARM BOOT
  115.     PUSH    AF    ;SAVE A
  116.     AND    07
  117.     LD    E,A    ;SAVE IN E LAST 3 BITS
  118.             ;E=DIRECTION NUMBER
  119.     POP    AF    ;RESTORE A
  120.     AND    70H    ;MASK TO GET SIGNIFICANT
  121.             ;ASCII DIGITS
  122. ;
  123. ;WORK OUT OP CODE
  124. ;
  125.     CP    40H    ;SEE IF PLAIN LETTER
  126.     JR    NZ,W1-$
  127.     LD    A,40H    ;LOAD WRITE CODE=01B
  128.     JR    SETBIT-$
  129. W1:    JP    P,MOVE    ;LOWER CASE LETTER
  130. CLEAR:    LD    A,80H    ;MUST HAVE BEEN CTL
  131.             ;THEREFORE CLEAR=10B
  132.     JR    SETBIT-$
  133. MOVE:    LD    A,00    ;LOWER CASE THEREFORE MOVE
  134.             ; MOVE=00B
  135. SETBIT:    LD    (OPER),A    ;STORE NEW OPERAND
  136. ;
  137. ;PERFORM OPERATION
  138. ;
  139.     CALL    MOP    ;DO OP AT PRESENT LOCATION
  140. ;
  141. ;INCREMENT X COORDINATE
  142. ;
  143.     LD    IX,DATA    ;POINT TO DATA
  144.     LD    D,00    ;NB. DIRECTION NUM. IS IN REG E
  145.     ADD IX,DE    ;POINT TO APPROPRIATE PLACE IN TABLE
  146.     LD    A,(X)    ;GET X COORD.
  147.     ADD    A,(IX)    ;ADD ENTRY FROM TABLE
  148.     LD    L,A    ;SAVE IN L
  149. ;
  150. ;INCREMENT Y COORDINATE
  151. ;
  152.     LD    A,(Y)    ;GET Y COORD.
  153.     INC    IX
  154.     INC    IX    ;POINT TO Y DATA
  155.     SUB    (IX)    ;SUB BECAUSE PAGE UPSIDE DOWN
  156.     AND    3FH    ;SET OP CODE TO 00
  157.     LD    H,A    ;SAVE IN H
  158. ;
  159. ;PERFORM OPERATION
  160. ;
  161.     CALL    GRAP    ;CURSOR MOVES TO NEW LOCATION
  162.     JR    IN-$
  163. ;FLASH UNTIL INPUT
  164. ;
  165. FIN:    LD    A,0C0H    ;SET CODE FOR INVERT
  166.     LD    (OPER),A
  167. FLSH:    CALL    MOP    ;DO IT
  168.     LD    C,2    ;DELAY CONSTANT
  169.     CALL    DO    ;DO DELAY
  170. F0:    IN    A,(7DH)    ;GET STATUS
  171.     AND    02    ;CHECK FOR RX BUFF READY
  172.     JR    Z,F1-$    ;JUMP IF NO I/P
  173.     IN    A,(7CH)    ;GET I/P
  174.     AND    7FH    ;MASK PARITY
  175.     RET
  176. F1:    CALL    MOP    ;INVERT AGAIN
  177.     LD    C,8H    ;DELAY CONST.
  178.     CALL    DO    ;4 TIMES DELAY
  179.     JR    FLSH-$
  180. ;
  181. ;DELAY
  182. ;
  183. DO:    PUSH    BC
  184.     PUSH    DE
  185. D1:    LD    B,10H    ;B,D LOOP GIVES .1 SECS.
  186. D2:    LD    D,00
  187. D3:    DEC    D
  188.     JR    NZ,D3-$
  189.     DEC    B
  190.     JR    NZ,D2-$
  191.     DEC    C
  192.     JR    NZ,D1-$
  193.     POP    DE
  194.     POP    BC
  195.     RET
  196. ;
  197. ;
  198. DATA:    DEFB    0,1,1,1,0
  199.     DEFB    0FFH,0FFH,0FFH,0,1
  200. OPER:    DEFS    1
  201. INDX:    DEFS    1
  202. X:    DEFS    1
  203. Y:    DEFS    1
  204. PTR:    DEFS    2
  205. ;
  206. ;
  207. END
  208. │F#σ═h!Cs!û^#VδΘ▓┌▓┌╕∞■   ═╚┬#═╙├#:¿╗└:⌐║╔┴ß^#V#σ┼├╛*»^#V╔═╚╩τ┴┼>├%╤╒├#x■ ┬÷»├'µ8_├#*▒δ═╛┬#├╕├#╤╒├#═╙┴┼>├%╤╒╤╒><7ß╔ ├╟┬ ═╟─ ╔╟╟ Θ╟╟╞╧τ"╟└≈╙T6*╛}µ■╩^!T4═2├G═ ═░    *hM═╜G═α:╦■ ┬══«╡═+G═G┼W═    δ═+G═U╔!═⌐> ═Ç+δ! É@!Æ!BH    @@AéBH         B! "êBHI$$ÆBI$BI ä$䯠   ÆHI     éD$ÉÉ