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

  1. ; PRIMITIVE SOLID SHAPE DRAWING
  2. ;
  3. ; RICHARD L. RYLANDER   11/7/84
  4. ;
  5. ; LOAD ARITHMETIC AND GRAPHIC UTILITIES FIRST
  6. ;
  7. ;*****************************************
  8. RAM=$036A
  9. ORIGIN=$C5EA
  10. ;
  11. MLPCND=$AC     ; MULTIPLICAND (S)
  12. MLPLER=$AD     ; MULTIPLIER (S)
  13. PROD=$AE      ; PRODUCT (D)
  14. MULT=$C011    ; CALL FOR MULTIPLY
  15. ;
  16. DVDND=$FD     ; DIVIDEND (D)
  17. DVSOR=$FB     ; DIVISOR (D)
  18. QUOT=$FD      ; QUOTIENT (D)
  19. DIVIDE=$C025  ; CALL FOR DIVIDE
  20. ;
  21. ARG=$AC       ; ARGUMENT (S)
  22. SQR=$AE       ; SQUARE OF ARG (D)
  23. SQUARE=$C004  ; CALL FOR SQUARE
  24. ;
  25. RADCND=$AC    ; RADICAND (D)
  26. ROOT=$033C    ; SQUARE ROOT (S)
  27. SQRT=$C064    ; CALL FOR SQRT
  28. ;
  29. RNDM=$C000    ; RANDOM NUMBER
  30. RANDOM=$C0C8  ; CALL FOR RANDOM
  31. ; NOTE - A CALL TO 'RANDOM' LEAVES A RANDOM BYTE
  32. ; IN THE ACCUMULATOR
  33. ;
  34. XPLT=$033F
  35. YPLT=$0341
  36. NORM=$C224
  37. PLTSHD=$C20F
  38. VALUE=$0344   ; FINAL NORMALIZED SHADE VALUE
  39. HTORRN=$0346  ; SHADE FLAG, 1=HALFTONE
  40. NOSCAL=$0347  ; SCALE FLAG, 1=NO SCALE
  41. ;
  42.        *=RAM
  43. XCENT  *=*+2  ; CENTER COORD
  44. XREL   *=*+1  ; RELATIVE (TO CENTER)
  45. XSHD   *=*+2  ; USED IN SHADE CALC
  46. YCENT  *=*+1  ; CENTER COORD
  47. YREL   *=*+1  ; RELATIVE (TO CENTER)
  48. YSHD   *=*+2  ; USED IN SHADE CALC
  49. ZREL   *=*+2  ; RELATIVE (TO CENTER)
  50. ZWX    *=*+2  ; Z WITH X (+ OR -)
  51. ;
  52. RADIUS *=*+2  ; LOCAL RADIUS OF SURFACE
  53. TONE   *=*+2  ; USED IN SHADE CALC
  54. TNTMP  *=*+2  ; USED IN SHADE CALC
  55. ;
  56. CLIPL  *=*+1  ; LEFT CLIPPING BOUND
  57. CLIPR  *=*+1  ; RIGHT CLIPPING BOUND
  58. CLIPU  *=*+1  ; UP CLIPPING BOUND
  59. CLIPD  *=*+1  ; DOWN CLIPPING BOUND
  60. ;
  61. HEMI   *=*+1  ; PLOTTING HEMISPHERE
  62. ;
  63. BAKLIT *=*+1  ; BACKLIT FLAG
  64. HVFLAG *=*+1  ; HORIZONTAL/VERTICAL FLAG
  65. TEMP   *=*+2  ; TEMPORARY STORAGE
  66. CNTX   *=*+1   ; LOOP COUNTER
  67. CNTY   *=*+1   ; LOOP COUNTER
  68. MAX    *=*+1   ; LOOP LIMIT
  69. ;
  70. HLEN   *=*+1   ; HALF-LENGTH OF CYLINDERS
  71. RS     *=*+2   ; SQUARE OF TOROID RADIUS
  72. RT     *=*+1   ; TOROID (RING) RADIUS
  73. RC     *=*+1   ; CENTER RADIUS OF TOROID
  74. RO     *=*+1   ; OUTER RADIUS OF TOROID
  75. RI     *=*+1   ; INNER RADIUS OF TOROID
  76. XSQR   *=*+2
  77. XMAX   *=*+1
  78. ;
  79. R0=HLEN
  80. ;
  81.        *=ORIGIN
  82. ;*****************************************
  83. ;
  84. ; DIVIDE WITH SINGLE PRECISION DIVISOR
  85. ; (USED OFTEN IN SHAPE ROUTINES)
  86. ;
  87. SDIV   LDA #0
  88.        STA DVSOR+1
  89.        JMP DIVIDE
  90. ;
  91. ;*****************************************
  92. ;
  93. ; CALCULATE SHADE VALUE (0-63) BY
  94. ; MULTIPLYING 'TONE' BY 26 THEN
  95. ; DIVIDE RESULT BY RADIUS OF SURFACE
  96. ;
  97. GETVAL BIT TONE+1
  98.        BPL CNTNU   ; IF 'TONE'<0, THEN
  99.        LDA BAKLIT  ; MAKE VALUE 0 OR ABS(TONE)
  100.        BNE NEGATE  ; DEPENDING ON BAKLIT FLAG
  101.        STA VALUE
  102.        RTS
  103. NEGATE SEC
  104.        LDA #$00
  105.        SBC TONE
  106.        STA TONE
  107. CNTNU  LDA TONE
  108.        STA MLPCND
  109.        LDA #$1A
  110.        STA MLPLER
  111.        JSR MULT
  112.        STA DVDND+1
  113.        LDA PROD
  114.        STA DVDND
  115.        LDA RADIUS
  116.        STA DVSOR
  117.        JSR SDIV
  118.        LDA QUOT
  119.        STA VALUE
  120.        RTS
  121. ;
  122. ;*****************************************
  123. ;
  124. ; POINT PLOTTING BY QUADRANTS USING
  125. ; THE FOUR-FOLD SYMMETRY OF SIMPLE OBJECTS
  126. ;
  127. ; DEPENDING ON STATUS OF 'HVFLAG', EXCHANGE
  128. ; X AND Y COORDINATES TO ROTATE OBJECTS 90 DEG
  129. ; SINGLE SHAPE ROUTINE CAN THEN BE USED TO
  130. ; DRAW 'HORIZONTAL' OR 'VERTICAL' VERSIONS
  131. ; OF AN OBJECT
  132. ;
  133. ; THE FOLOWING IS A 'BASIC SUBROUTINE'
  134. ; EQUIVALENT TO EXPLAIN ITS OPERATION
  135. ;
  136. ; NOTE THAT LABELS ARE USED IN PLACE OF
  137. ; LINE NUMBERS
  138. ;
  139. ; 'PTPLOT' IF HVFLAG<0 THEN GOTO 'NOROT'
  140. ;          (STACK)=XREL:XREL=YREL:YREL=(STACK)
  141. ;          (STACK)=XSHD:XSHD=YSHD:YSHD=(STACK)
  142. ; 'NOROT'  GOSUB 'GETZ'
  143. ;          REM CALCULATE 2*Z FROM X,Y AND RADIUS
  144. ;          HEMI = 1
  145. ;          IF XREL>CLIPL THEN GOTO 'RHEMI'
  146. ;          ZWX=2*Z-XSHD
  147. ;          XPLT=XCENT-XREL:REM LEFT HEMISPHERE
  148. ; 'CHCLUP' IF YREL>CLIPU THEN GOTO 'DHEMI'
  149. ;          TONE=ZWX+YSHD
  150. ;          GOSUB 'GETVAL':REM NORMALIZE SHADE VAL
  151. ;          YPLT=YCENT+YREL
  152. ;          GOSUB 'PLTSHD':REM PLOT OR UNPLOT
  153. ;          REM   POINTS WEIGHTED BY SHADE VALUE
  154. ; 'DHEMI'  IF YREL>CLIPD THEN GOTO 'RHEMI'
  155. ;          TONE=ZWX-YSHD
  156. ;          GOSUB 'GETVAL'
  157. ;          YPLT=YCENT-YREL
  158. ;          GOSUB 'PLTSHD'
  159. ; 'RHEMI'  IF HEMI=0 THEN RETURN
  160. ;          HEMI=0
  161. ;          IF XREL>CLIPR THEN RETURN
  162. ;          ZWX=2*Z+XSHD
  163. ;          XPLT=XCENT+XREL
  164. ;          GOSUB 'CHCLUP'
  165. ;          RETURN
  166. ;
  167. PTPLOT BIT HVFLAG
  168.        BPL NOROT
  169.        LDA XREL
  170.        PHA
  171.        PHA
  172.        LDA YREL
  173.        STA XREL
  174.        PLA
  175.        STA YREL
  176.        LDA XSHD
  177.        PHA
  178.        PHA
  179.        LDA YSHD
  180.        STA XSHD
  181.        PLA
  182.        STA YSHD
  183.        LDA XSHD+1
  184.        PHA
  185.        PHA
  186.        LDA YSHD+1
  187.        STA XSHD+1
  188.        PLA
  189.        STA YSHD+1
  190. NOROT  JSR GETZ
  191. PTPLT2 LDA #$01
  192.        STA HEMI
  193.        SEC
  194.        LDA CLIPL  ; CHECK LEFT HEMISPHERE
  195.        CMP XREL
  196.        BCC RHEMI
  197.        SEC
  198.        LDA ROOT
  199.        SBC XSHD
  200.        STA ZWX
  201.        LDA ROOT+1
  202.        SBC XSHD+1
  203.        STA ZWX+1
  204.        SEC
  205.        LDA XCENT
  206.        SBC XREL
  207.        STA XPLT
  208.        LDA XCENT+1
  209.        SBC #$00
  210.        STA XPLT+1
  211. ;
  212. CHCLUP SEC
  213.        LDA CLIPU  ; CHECK FOR UP CLIPPING
  214.        CMP YREL
  215.        BCC DHEMI
  216.        CLC
  217.        LDA ZWX
  218.        ADC YSHD
  219.        STA TONE
  220.        LDA ZWX+1
  221.        ADC YSHD+1
  222.        STA TONE+1
  223.        JSR GETVAL
  224.        CLC
  225.        LDA YCENT
  226.        ADC YREL
  227.        STA YPLT
  228.        JSR PLTSHD
  229. ;
  230. DHEMI  SEC
  231.        LDA CLIPD  ; CHECK FOR DOWN CLIPPING
  232.        CMP YREL
  233.        BCC RHEMI
  234.        SEC
  235.        LDA ZWX
  236.        SBC YSHD
  237.        STA TONE
  238.        LDA ZWX+1
  239.        SBC YSHD+1
  240.        STA TONE+1
  241.        JSR GETVAL
  242.        SEC
  243.        LDA YCENT
  244.        SBC YREL
  245.        STA YPLT
  246.        JSR PLTSHD
  247. ;
  248. RHEMI  LDA HEMI
  249.        BEQ PLDONE
  250.        DEC HEMI
  251.        SEC
  252.        LDA CLIPR  ; CHECK FOR RIGHT CLIPPING
  253.        CMP XREL
  254.        BCC PLDONE
  255.        CLC
  256.        LDA ROOT
  257.        ADC XSHD
  258.        STA ZWX
  259.        LDA ROOT+1
  260.        ADC XSHD+1
  261.        STA ZWX+1
  262.        CLC
  263.        LDA XCENT
  264.        ADC XREL
  265.        STA XPLT
  266.        LDA XCENT+1
  267.        ADC #$00
  268.        STA XPLT+1
  269.        JMP CHCLUP
  270. PLDONE BIT HVFLAG
  271.        BPL NORSTR
  272.        LDA XSHD+1    ; RESTORE COORDS
  273.        STA YSHD+1
  274.        PLA
  275.        STA XSHD+1
  276.        LDA XSHD
  277.        STA YSHD
  278.        PLA
  279.        STA XSHD
  280.        LDA XREL
  281.        STA YREL
  282.        PLA
  283.        STA XREL
  284. NORSTR RTS
  285. ;
  286. ;*****************************************
  287. ;
  288. ; CALCULATE Z FROM LOCAL X,Y BY
  289. ; PYTHAGOREAN SUM
  290. ;
  291. GETZ   LDA RADIUS
  292.        STA ARG
  293.        JSR SQUARE
  294.        STA TNTMP+1
  295.        LDA SQR
  296.        STA TNTMP
  297.        LDA XSHD
  298.        STA ARG
  299.        JSR SQUARE
  300.        SEC
  301.        LDA TNTMP
  302.        SBC SQR
  303.        STA TNTMP
  304.        LDA TNTMP+1
  305.        SBC SQR+1
  306.        STA TNTMP+1
  307.        LDA YSHD
  308.        STA ARG
  309.        JSR SQUARE
  310.        SEC
  311.        LDA TNTMP
  312.        SBC SQR
  313.        STA RADCND
  314.        LDA TNTMP+1
  315.        SBC SQR+1
  316.        STA RADCND+1
  317.        BMI ZEROOT
  318.        JSR SQRT
  319.        ASL ROOT
  320.        ROL ROOT+1
  321.        RTS
  322. ZEROOT LDA #$00
  323.        STA ROOT
  324.        STA ROOT+1
  325.        RTS
  326. ;
  327. ;*****************************************
  328. ;
  329. ; SET UP PARAMETERS FOR TOROIDS
  330. ;
  331. ; RT=(RO-RI)/2   RS=RT*RT   RC=RT+RI
  332. ;
  333. TPARM  LDA RO
  334.        SEC
  335.        SBC RI
  336.        LSR A
  337.        STA RT
  338.        STA RADIUS
  339.        CLC
  340.        ADC RI
  341.        STA RC
  342.        LDA RT
  343.        STA ARG
  344.        JSR SQUARE
  345.        LDA SQR
  346.        STA RS
  347.        LDA SQR+1
  348.        STA RS+1
  349.        LDA #0
  350.        STA CNTX
  351.        RTS
  352. ;
  353. ;*****************************************
  354. ;
  355. ; DRAW A SHADED SPHERE
  356. ;
  357. ; 'BASIC SUBROUTINE' EQUIVALENT
  358. ;
  359. ; 'SPHERE' FOR CNTX=0 TO RADIUS/SQR(2)
  360. ;          XREL=CNTX:XSHD=CNTX
  361. ;          FOR CNTY=CNTX TO SQR(RAD*RAD-CNTX*CNTX)
  362. ;          YREL=CNTY:YSHD=CNTY
  363. ;          HVFLAG=0
  364. ;          GOSUB 'PTPLOT'
  365. ;          REM EXCHANGE X & Y TO USE 8-FOLD SYM
  366. ;          HVFLAG=-128
  367. ;
  368. ;          GOSUB 'PTPLOT'
  369. ;          NEXT CNTY
  370. ;          NEXT CNTX
  371. ;          RETURN
  372. ;
  373. ;
  374. SPHERE LDA RADIUS
  375.        STA ARG
  376.        JSR SQUARE
  377.        ASL SQR
  378.        ROL SQR+1
  379.        LDA SQR
  380.        STA RADCND
  381.        LDA SQR+1
  382.        STA RADCND+1
  383.        JSR SQRT
  384.        LSR ROOT+1
  385.        ROR ROOT
  386.        LDA ROOT
  387.        STA XMAX
  388.        LDA #$00
  389.        STA CNTX
  390.        STA XSHD+1
  391.        STA YSHD+1
  392.        LDA RADIUS
  393.        STA ARG
  394.        JSR SQUARE
  395.        STA TEMP+1
  396.        LDA SQR
  397.        STA TEMP
  398. LOOPX  LDA CNTX
  399.        STA CNTY
  400.        STA ARG
  401.        STA XREL
  402.        STA XSHD
  403.        JSR SQUARE
  404.        SEC
  405.        LDA TEMP
  406.        SBC SQR
  407.        STA RADCND
  408.        LDA TEMP+1
  409.        SBC SQR+1
  410.        STA RADCND+1
  411.        JSR SQRT
  412.        LDA ROOT
  413.        STA MAX
  414. LOOPY  LDA CNTY
  415.        STA YREL
  416.        STA YSHD
  417.        LDA #0
  418.        STA HVFLAG
  419.        JSR PTPLOT
  420.        LDA #$80
  421.        STA HVFLAG
  422.        JSR PTPLOT
  423.        LDA CNTY
  424.        CMP MAX
  425.        BEQ DONEY
  426.        INC CNTY
  427.        JMP LOOPY
  428. DONEY  LDA CNTX
  429.        CMP XMAX
  430.        BEQ DONE
  431.        INC CNTX
  432.        JMP LOOPX
  433. DONE   RTS
  434. ;
  435. ;*****************************************
  436. ;
  437. ; DRAW SHADED CYLINDERS
  438. ;
  439. ; 'BASIC SUBROUTINE' EQUIVALENT
  440. ;
  441. ; 'CYLNDR' XSHD=0
  442. ;          FOR YREL=RADIUS TO 0
  443. ;          YSHD=YREL
  444. ;          FOR XREL=HLEN TO 0
  445. ;          GOSUB 'PTPLOT'
  446. ;          NEXT XREL
  447. ;          NEXT YREL
  448. ;          RETURN
  449. ;
  450. CYLNDR LDA #0
  451.        STA XSHD
  452.        STA XSHD+1
  453.        STA YSHD+1
  454.        LDA RADIUS
  455.        STA YREL
  456. CYLOOP LDA HLEN
  457.        STA XREL
  458.        LDA YREL
  459.        STA YSHD
  460. CXLOOP JSR PTPLOT
  461.        DEC XREL
  462.        BPL CXLOOP
  463.        DEC YREL
  464.        BPL CYLOOP
  465.        RTS
  466. ;
  467. ;*****************************************
  468. ;
  469. ; DRAW EDGE-VIEW TOROIDS
  470. ;
  471. ; 'BASIC SUBROUTINE' EQUIVALENT
  472. ;
  473. ; 'EDGTOR' GOSUB 'TPARM':REM SET UP RADII
  474. ;          FOR CNTX=0 TO RT
  475. ;          XREL=CNTX:XSHD=CNTX
  476. ;          R0=SQR(RT*RT-CNTX*CNTX)
  477. ;          FOR CNTY=0 TO R0+RC
  478. ;          YREL=CNTY
  479. ;          YSHD=(R0*CNTY)/(R0+RC)
  480. ;          GOSUB 'PTPLOT'
  481. ;          NEXT CNTY
  482. ;          NEXT CNTX
  483. ;          RETURN
  484. ;
  485. EDGTOR JSR TPARM
  486.        LDA #$00
  487.        STA XSHD+1
  488.        STA YSHD+1
  489. LOOPX4 LDA CNTX
  490.        STA XREL
  491.        STA XSHD
  492.        STA ARG
  493.        JSR SQUARE
  494.        SEC
  495.        LDA RS
  496.        SBC SQR
  497.        STA RADCND
  498.        LDA RS+1
  499.        SBC SQR+1
  500.        STA RADCND+1
  501.        JSR SQRT
  502.        LDA ROOT
  503.        STA R0
  504.        CLC
  505.        ADC RC
  506.        STA MAX
  507.        LDA #$00
  508.        STA CNTY
  509. LOOPY4 LDA CNTY
  510.        STA YREL
  511.        STA MLPLER
  512.        LDA R0
  513.        STA MLPCND
  514.        JSR MULT
  515.        STA DVDND+1
  516.        LDA PROD
  517.        STA DVDND
  518.        LDA MAX
  519.        STA DVSOR
  520.        JSR SDIV
  521.        LDA QUOT
  522.        STA YSHD
  523.        JSR PTPLOT
  524.        LDA CNTY
  525.        CMP MAX
  526.        BEQ DONE4
  527.        INC CNTY
  528.        JMP LOOPY4
  529. DONE4  LDA CNTX
  530.        CMP RT
  531.        BEQ DONEHT
  532.        INC CNTX
  533.        JMP LOOPX4
  534. DONEHT RTS
  535. ;
  536. ;*****************************************
  537. ;
  538. ; DRAW A SHADED, TOP-VIEW TOROID
  539. ;
  540. ; 'BASIC SUBROUTINE' EQUIVALENT
  541. ;
  542. ; 'TOROID' GOSUB 'TPARM'
  543. ;          FOR CNTX=0 TO RO/SQR(2)
  544. ;          REM 8-FOLD SYMMETRY USED
  545. ;          XREL=CNTX
  546. ;          MAX=SQR(RO*RO-CNTX*CNTX)
  547. ;          IF CNTX>RI THEN GOTO 'GRTR'
  548. ;          CNTY=SQR(RI*RI-CNTY*CNTY)
  549. ;          GOTO 'LLPY1'
  550. ; 'GRTR'   CNTY=CNTX
  551. ; 'LLPY1'  YREL=CNTY
  552. ;          R0=SQR(CNTY*CNTY+CNTX*CNTX)
  553. ;          XSHD=CNTX-(CNTX*RC)/R0
  554. ;          YSHD=CNTY-(CNTY*RC)/R0
  555. ;          HVFLAG=0:GOSUB 'PTPLOT'
  556. ;          HVFLAG=-128:GOSUB 'PTPLOT'
  557. ;          IF CNTY=MAX THEN GOTO 'DDNY1'
  558. ;          CNTY=CNTY+1
  559. ;          GOTO 'LLPY1'
  560. ; 'DDNY1'  NEXT CNTX
  561. ;          RETURN
  562. ;
  563. TOROID JSR TPARM
  564.        LDA RO
  565.        STA ARG
  566.        JSR SQUARE
  567.        ASL SQR
  568.        ROL SQR+1
  569.        LDA SQR
  570.        STA RADCND
  571.        LDA SQR+1
  572.        STA RADCND+1
  573.        JSR SQRT
  574.        LSR ROOT+1
  575.        ROR ROOT
  576.        LDA ROOT
  577.        STA XMAX
  578. LLPX1  LDA CNTX
  579.        STA XREL
  580.        STA ARG
  581.        JSR SQUARE
  582.        STA XSQR+1
  583.        LDA SQR
  584.        STA XSQR
  585.        LDA RO
  586.        STA ARG
  587.        JSR SQUARE
  588.        SEC
  589.        LDA SQR
  590.        SBC XSQR
  591.        STA RADCND
  592.        LDA SQR+1
  593.        SBC XSQR+1
  594.        STA RADCND+1
  595.        JSR SQRT
  596.        LDA ROOT
  597.        STA MAX
  598.        SEC
  599.        LDA RI
  600.        SBC CNTX
  601.        BCC GRTR
  602.        LDA RI
  603.        STA ARG
  604.        JSR SQUARE
  605.        SEC
  606.        LDA SQR
  607.        SBC XSQR
  608.        STA RADCND
  609.        LDA SQR+1
  610.        SBC XSQR+1
  611.        STA RADCND+1
  612.        JSR SQRT
  613.        LDA ROOT
  614.        STA CNTY
  615.        JMP LLPY1
  616. GRTR   LDA CNTX
  617.        STA CNTY
  618. LLPY1  LDA CNTY
  619.        STA YREL
  620.        STA ARG
  621.        JSR SQUARE
  622.        CLC
  623.        LDA SQR
  624.        ADC XSQR
  625.        STA RADCND
  626.        LDA SQR+1
  627.        ADC XSQR+1
  628.        STA RADCND+1
  629.        JSR SQRT
  630.        LDA ROOT
  631.        STA R0
  632.        STA DVSOR
  633.        LDA CNTX
  634.        STA MLPLER
  635.        LDA RC
  636.        STA MLPCND
  637.        JSR MULT
  638.        STA DVDND+1
  639.        LDA PROD
  640.        STA DVDND
  641.        JSR SDIV
  642.        SEC
  643.        LDA CNTX
  644.        SBC QUOT
  645.        STA XSHD
  646.        LDA #$00
  647.        SBC QUOT+1
  648.        STA XSHD+1
  649.        LDA CNTY
  650.        STA MLPLER
  651.        LDA RC
  652.        STA MLPCND
  653.        JSR MULT
  654.        STA DVDND+1
  655.        LDA PROD
  656.        STA DVDND
  657.        LDA R0
  658.        STA DVSOR
  659.        JSR SDIV
  660.        SEC
  661.        LDA CNTY
  662.        SBC QUOT
  663.        STA YSHD
  664.        LDA #$00
  665.        STA HVFLAG
  666.        SBC QUOT+1
  667.        STA YSHD+1
  668.        JSR PTPLOT
  669.        LDA #$80
  670.        STA HVFLAG
  671.        JSR PTPLOT
  672.        LDA CNTY
  673.        CMP MAX
  674.        BEQ DDNY1
  675.        INC CNTY
  676.        JMP LLPY1
  677. DDNY1  LDA CNTX
  678.        CMP XMAX
  679.        BEQ DUNTOR
  680.        INC CNTX
  681.        JMP LLPX1
  682. DUNTOR RTS
  683. ;
  684. ;*****************************************
  685. ;
  686. ; DRAW "INSIDE VIEW" TOROIDS
  687. ;
  688. ; 'BASIC SUBROUTINE' EQUIVALENT
  689. ;
  690. ; 'SPOOL'  GOSUB 'TPARM'
  691. ;          FOR CNTX=0 TO RT
  692. ;          XREL=CNTX:XSHD=CNTX
  693. ;          MAX=RC-SQR(RS-CNTX*CNTX)
  694. ;          FOR CNTY=0 TO MAX
  695. ;          YREL=CNTY
  696. ;          YSHD=(RC*CNTY/MAX)-CNTY
  697. ;          GOSUB 'PTPLOT'
  698. ;          NEXT CNTY
  699. ;          NEXT CNTX
  700. ;          RETURN
  701. ;
  702. SPOOL  JSR TPARM
  703. LLPX2  LDA CNTX
  704.        STA XREL
  705.        STA ARG
  706.        SEC
  707.        LDA #$00
  708.        SBC CNTX
  709.        STA XSHD
  710.        LDA #$00
  711.        SBC #$00
  712.        STA XSHD+1
  713.        JSR SQUARE
  714.        SEC
  715.        LDA RS
  716.        SBC SQR
  717.        STA RADCND
  718.        LDA RS+1
  719.        SBC SQR+1
  720.        STA RADCND+1
  721.        JSR SQRT
  722.        SEC
  723.        LDA RC
  724.        SBC ROOT
  725.        STA MAX
  726.        LDA #$00
  727.        STA CNTY
  728. LLPY2  LDA CNTY
  729.        STA YREL
  730.        STA MLPLER
  731.        LDA RC
  732.        STA MLPCND
  733.        JSR MULT
  734.        STA DVDND+1
  735.        LDA PROD
  736.        STA DVDND
  737.        LDA MAX
  738.        STA DVSOR
  739.        JSR SDIV
  740.        LDA QUOT
  741.        SEC
  742.        SBC CNTY
  743.        STA YSHD
  744.        LDA QUOT+1
  745.        SBC #$00
  746.        STA YSHD+1
  747.        JSR PTPLOT
  748.        LDA CNTY
  749.        CMP MAX
  750.        BEQ DDNY2
  751.        INC CNTY
  752.        JMP LLPY2
  753. DDNY2  LDA CNTX
  754.        CMP RT
  755.        BEQ DUNHSP
  756.        INC CNTX
  757.        JMP LLPX2
  758. DUNHSP RTS
  759. .END
  760.