home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / s85xx / s8504b.d64 / graph.src < prev    next >
Text File  |  1995-03-30  |  5KB  |  251 lines

  1. ; GRAPHICS UTILITIES
  2. ;
  3. ; RICHARD L. RYLANDER   11/4/84
  4. ;
  5. ; LOAD ARITHMETIC UTILITIES FIRST
  6. ;
  7. RAM=$033E
  8. ORIGIN=$C0E2
  9. ;
  10. MLPCND=$AC     ; MULTIPLICAND (S)
  11. MLPLER=$AD     ; MULTIPLIER (S)
  12. PROD=$AE      ; PRODUCT (D)
  13. MULT=$C011    ; CALL FOR MULTIPLY
  14. ;
  15. RNDM=$C000    ; RANDOM NUMBER
  16. RANDOM=$C0C8  ; CALL FOR RANDOM
  17. ; NOTE - A CALL TO 'RANDOM' LEAVES A RANDOM BYTE
  18. ; IN THE ACCUMULATOR
  19. ;
  20.        *=RAM
  21. PLTFLG *=*+1  ; PLOT/UNPLOT FLAG
  22. XPLT   *=*+2  ; ABSOLUTE PLOT COORD
  23. YPLT   *=*+1  ; ABSOLUTE PLOT COORD
  24. VIC1   *=*+1  ; REGISTER STORAGE
  25. VIC2   *=*+1  ; REGISTER STORAGE
  26. VALUE  *=*+2  ; FINAL NORMALIZED SHADE VALUE
  27. HTORRN *=*+1  ; SHADE FLAG, 1=HALFTONE
  28. NOSCAL *=*+1  ; SCALE FLAG, 1=NO SCALE
  29. TEMP   *=*+2  ; TEMPORARY STORAGE
  30. ;
  31.        *=ORIGIN
  32. ;
  33. ;*****************************************
  34. ;
  35. ; TURN ON BIT MAP GRAPHICS MODE,
  36. ; SAVING REGISTER VALUES FOR
  37. ; RETURN TO TEXT MODE LATER.
  38. ;
  39. GRFON  LDA $D011
  40.        ORA #$20
  41.        STA $D011
  42.        LDA $DD00
  43.        STA VIC1
  44.        AND #$FC
  45.        ORA #$01
  46.        STA $DD00
  47.        LDA $D018
  48.        STA VIC2
  49.        LDA #$19
  50.        STA $D018
  51.        RTS
  52. ;
  53. ;*****************************************
  54. ;
  55. ; RETURN TO TEXT SCREEN
  56. ;
  57. GRFOFF LDA $D011
  58.        AND #$DF
  59.        STA $D011
  60.        LDA VIC1
  61.        STA $DD00
  62.        LDA VIC2
  63.        STA $D018
  64.        RTS
  65. ;
  66. ;*****************************************
  67. ;
  68. ; FILL COLOR MAP FOR BLACK DOTS ON WHITE
  69. ;
  70. COLOR  LDA #$01    ; POKE NEW COLORS HERE
  71.        LDX #0
  72. COL1   STA $8400,X
  73.        STA $8500,X
  74.        STA $8600,X
  75.        STA $8700,X
  76.        DEX
  77.        BNE COL1
  78.        RTS
  79. ;
  80. ;*****************************************
  81. ;
  82. ; CLEAR HI-RES GRAPHICS SCREEN
  83. ;
  84. CLEAR  LDA #$A0
  85.        STA $FC
  86.        LDY #0
  87.        STY $FB
  88.        LDA #0      ; CLEAR BYTE
  89.        LDX #$20
  90. CLRLP  STA ($FB),Y
  91.        INY
  92.        BNE CLRLP
  93.        INC $FC
  94.        DEX
  95.        BNE CLRLP
  96.        RTS
  97. ;
  98. ;*****************************************
  99. ;
  100. ; PLOT AND UNPLOT POINTS ON HI-RES GRAPHICS
  101. ; SCREEN. ABSOLUTE X AND Y SCREEN COORDINATES
  102. ; ARE POKED INTO XPLT, XPLT+1, AND YPLT
  103. ;
  104. PLOT   LDA #0
  105.        .BYTE $2C
  106. UNPLOT LDA #$80
  107.        STA PLTFLG
  108.        LDA $01    ; BASIC ROM OUT
  109.        AND #$FE
  110.        STA $01
  111.        SEC        ; INVERT Y COORDINATE TO
  112.        LDA #$C7   ; PUT ORIGIN IN LOWER LEFT
  113.        SBC YPLT   ; CORNER OF SCREEN
  114.        TAX        ; (199.-YPLT)
  115.        LSR A
  116.        LSR A
  117.        LSR A
  118.        TAY
  119.        LDA TABLE1,Y
  120.        STA $FB
  121.        LDA TABLE2,Y
  122.        STA $FC
  123.        TXA
  124.        AND #$07
  125.        CLC
  126.        ADC $FB
  127.        STA $FB
  128.        LDA XPLT
  129.        AND #$F8
  130.        ADC $FB
  131.        STA $FB
  132.        LDA XPLT+1
  133.        ADC $FC
  134.        STA $FC
  135.        LDA #$A0
  136.        ADC $FC
  137.        STA $FC
  138.        LDA XPLT
  139.        AND #$07
  140.        EOR #$07
  141.        TAX
  142.        LDA #$01
  143. PLOTLP DEX
  144.        BMI PLOT2
  145.        ASL A
  146.        BNE PLOTLP
  147. PLOT2  LDY #0
  148.        BIT PLTFLG
  149.        BPL NOPLOT
  150.        EOR #$FF
  151.        AND ($FB),Y
  152.        .BYTE $2C
  153. NOPLOT ORA ($FB),Y
  154.        STA ($FB),Y
  155.        LDA $01     ; BASIC ROM RESTORED
  156.        ORA #$01
  157.        STA $01
  158.        RTS
  159. ;
  160. TABLE1 .BYTE $00,$40,$80,$C0
  161.        .BYTE $00,$40,$80,$C0
  162.        .BYTE $00,$40,$80,$C0
  163.        .BYTE $00,$40,$80,$C0
  164.        .BYTE $00,$40,$80,$C0
  165.        .BYTE $00,$40,$80,$C0,$00
  166. ;
  167. TABLE2 .BYTE $00,$01,$02,$03
  168.        .BYTE $05,$06,$07,$08
  169.        .BYTE $0A,$0B,$0C,$0D
  170.        .BYTE $0F,$10,$11,$12
  171.        .BYTE $14,$15,$16,$17
  172.        .BYTE $19,$1A,$1B,$1C,$1E
  173. ;
  174. ;*****************************************
  175. ;
  176. ; SHADING BY HYBRID DITHER/DOT-GROWTH
  177. ;
  178. SHADE  LDA XPLT     ; USE BITS -----***
  179.        AND #$07     ; OF 'X' SCREEN COORD
  180.        STA TEMP
  181.        LDA YPLT     ; AND BITS -----***
  182.        AND #$07     ; OF 'Y' SCREEN COORD
  183.        ASL A        ; SHIFTED INTO --***---
  184.        ASL A        ; POSITION TO DETERMINE
  185.        ASL A        ; 6-BIT OFFSET IN
  186.        ORA TEMP     ; THRESHOLD TABLE
  187.        TAX
  188.        LDA THRESH,X ; SCREEN-POSITION-WEIGHTED
  189.        CMP VALUE    ; THRESHOLD VALUE
  190.        BPL GREATR
  191.        JMP UNPLOT
  192. GREATR JMP PLOT
  193. ;
  194. ;*****************************************
  195. ;
  196. ; SHADING BY RANDOM HALFTONE
  197. ;
  198. RSHADE JSR RANDOM
  199.        LSR A         ; REDUCE RANDOM BYTE
  200.        LSR A         ; TO 6 BITS FOR SHADE
  201.        CMP VALUE     ; VALUE COMPARISON
  202.        BPL MORE
  203.        JMP UNPLOT
  204. MORE   JMP PLOT
  205. ;
  206. ;*****************************************
  207. ;
  208. ; PLOT A POINT WEIGHTED BY SHADING SCHEME
  209. ; AND SHADE VALUE
  210. ; CHECK 'NOSCAL' FLAG FOR SCALING OF Y COORD
  211. ; CHECK 'HTORRN' FLAG FOR TYPE OF SHADING
  212. ;
  213. PLTSHD LDA NOSCAL
  214.        BEQ NORM
  215. ;
  216. ; SCALE Y FROM 0-239 PSEUDO-COORDINATES
  217. ; TO 0-199 TRUE SCREEN COORDINATES BY
  218. ;     Y = (Y+1)*213/256
  219. ;
  220. SCALE  LDY YPLT
  221.        INY
  222.        STY MLPLER
  223.        LDA #$D5      ; 213.
  224.        STA MLPCND
  225.        JSR MULT      ; RETURN WITH HIGH BYTE
  226.        STA YPLT      ; IN ACCUMULATOR
  227. NORM   LDA HTORRN
  228.        BEQ RPLT
  229.        JMP SHADE
  230. RPLT   JMP RSHADE
  231. ;
  232. ;
  233. ;
  234. THRESH .BYTE $00,$08,$35,$3D
  235.        .BYTE $02,$0A,$37,$3F
  236.        .BYTE $10,$18,$25,$2D
  237.        .BYTE $12,$1A,$27,$2F
  238.        .BYTE $31,$39,$04,$0C
  239.        .BYTE $33,$3B,$06,$0E
  240.        .BYTE $21,$29,$14,$1C
  241.        .BYTE $23,$2B,$16,$1E
  242.        .BYTE $03,$0B,$36,$3E
  243.        .BYTE $01,$09,$34,$3C
  244.        .BYTE $13,$1B,$26,$2E
  245.        .BYTE $11,$19,$24,$2C
  246.        .BYTE $32,$3A,$07,$0F
  247.        .BYTE $30,$38,$05,$0D
  248.        .BYTE $22,$2A,$17,$1F
  249.        .BYTE $20,$28,$15,$1D
  250. .END
  251.