home *** CD-ROM | disk | FTP | other *** search
/ Go64! / Go64_2002-04_2002_CSW_Side_A.d64 / rotwireframe.txt < prev    next >
Text File  |  2023-02-26  |  39KB  |  1,808 lines

  1.         ; go64! tutorial on 3-d graphics
  2.         ; part 4: drawing lines (1)
  3.  
  4.         ; go64! 3d-kurs
  5.         ; teil 4: linienzeichnen (1)
  6.  
  7.  
  8. vicbank  = %00000011; $0000-$4000
  9. v        = vicbank($03*$4000;=$0000
  10. screen   = $0400
  11. charset0 = $2000
  12. charset1 = $2800
  13. spidcod0 = $5000
  14. spidcod1 = $7200
  15. spdt0ofs = $00
  16. spdt1ofs = $0880
  17. spdt2ofs = $1100
  18. spdt3ofs = $1980
  19. spdxofsl = $0f00
  20. spdxofsh = $0f80
  21.  
  22. basezp   = $02
  23. currchar = $00+basezp
  24. pointers = $01+basezp
  25. alphalo  = $04+basezp
  26. betalo   = $05+basezp
  27. gammalo  = $06+basezp
  28. alphahi  = $07+basezp
  29. betahi   = $08+basezp
  30. gammahi  = $09+basezp
  31. alpha    = $0a+basezp
  32. beta     = $0b+basezp
  33. gamma    = $0c+basezp
  34. sinbufl0 = $0d+basezp
  35. sinbufh0 = $0e+basezp
  36. sinbufl1 = $0f+basezp
  37. sinbufh1 = $10+basezp
  38. unitxxlo = $11+basezp
  39. unitxxhi = $12+basezp
  40. unitxylo = $13+basezp
  41. unitxyhi = $14+basezp
  42. unitxzlo = $15+basezp
  43. unitxzhi = $16+basezp
  44. unityxlo = $17+basezp
  45. unityxhi = $18+basezp
  46. unityylo = $19+basezp
  47. unityyhi = $1a+basezp
  48. unityzlo = $1b+basezp
  49. unityzhi = $1c+basezp
  50. unitzxlo = $1d+basezp
  51. unitzxhi = $1e+basezp
  52. unitzylo = $1f+basezp
  53. unitzyhi = $20+basezp
  54. unitzzlo = $21+basezp
  55. unitzzhi = $22+basezp
  56. dividend = $23+basezp
  57. divisor  = $25+basezp
  58. x2dcrdfr = $28+basezp
  59. z2dcrdfr = $30+basezp
  60. x2dcords = $38+basezp
  61. y2dcords = $40+basezp
  62. z2dcords = $48+basezp
  63. oldxcrds = $50+basezp
  64. oldycrds = $58+basezp
  65. begx     = $0d+basezp
  66. endx     = $0e+basezp
  67. begy     = $0f+basezp
  68. endy     = $10+basezp
  69. deltax   = $11+basezp
  70. deltay   = $12+basezp
  71.  
  72. foregndc = $01
  73. backgndc = $06
  74.  
  75. xpos     = $0c; char matrix coordinates
  76. ypos     = $05; zeichenmatrixkoordinaten
  77.  
  78. alphaadd = $ffff+1-($0200/3)
  79. betaadd  = $0700/3; angle add values
  80. gammaadd = $0300/3; winkeladditionswerte
  81.  
  82. numpoint = $08
  83.  
  84.  
  85.          *= $4000
  86.  
  87.          sei
  88.          lda #$35
  89.          sta $01
  90.          lda #<return;nmi
  91.          sta $fffa
  92.          lda #>return;nmi
  93.          sta $fffb
  94.          bit $d011
  95.          bpl *-3
  96.          bit $d011
  97.          bmi *-3
  98.          lda #$00
  99.          sta $d011
  100.          lda #backgndc
  101.          sta $d020
  102.          sta $d021
  103.  
  104.  
  105.          ; build tables
  106.          ; tabellen generieren
  107.  
  108.          lda #$00
  109.          tax
  110.          tay
  111.          .byte $24
  112. mkxofstb pla
  113.          sta spdxofsl,y
  114.          pha
  115.          txa
  116.          sta spdxofsh,y
  117.          pla
  118.          clc
  119.          adc #spidraw1-spidraw0
  120.       ;= adc #spidrawe-spidraw1
  121.          bcc *+3
  122.          inx
  123.          iny
  124.          bpl mkxofstb+1
  125.  
  126.          ldx #$00
  127.          lda sincoslo+$00,x
  128.          sta sincoslo+$0100,x
  129.          lda sincoshi+$00,x
  130.          sta sincoshi+$0100,x
  131.          inx
  132.          bne *-13
  133.  
  134.  
  135.          ; build speedcode
  136.          ; speedcode generieren
  137.  
  138.          lda #<spidcod0
  139.          sta pointers+2
  140.          lda #>spidcod0
  141.          sta pointers+3
  142.          lda #>charset0+v
  143.          sta pointers+4
  144.          jsr makspeed
  145.          lda #<spidcod1
  146.          sta pointers+2
  147.          lda #>spidcod1
  148.          sta pointers+3
  149.          lda #>charset1+v
  150.          sta pointers+4
  151.          jsr makspeed
  152.  
  153.  
  154.          ; clear charsets
  155.          ; zeichensaetze loeschen
  156.  
  157.          lda #>charset0+v
  158.          sta pointers+1
  159.          lda #>charset1+v
  160.          sta pointers+3
  161.          lda #<charset0+v
  162.          sta pointers+0
  163.          sta pointers+2
  164.          ldx #$08
  165.          tay
  166. clearchr sta (pointers+0),y
  167.          sta (pointers+2),y
  168.          iny
  169.          bne clearchr
  170.          inc pointers+1
  171.          inc pointers+3
  172.          dex
  173.          bne clearchr
  174.  
  175.  
  176.          ; clear screen
  177.          ; bildschirm loeschen
  178.  
  179.          lda #$00
  180.          tax
  181.          sta screen+v+$00,x
  182.          sta screen+v+$0100,x
  183.          sta screen+v+$0200,x
  184.          sta screen+v+$0300,x
  185.          inx
  186.          bne *-13
  187.  
  188.  
  189.          ; set up screen matrix
  190.          ; bildschirmmatrix bilden
  191.  
  192.          clc
  193.          lda #<xpos+(ypos*$28)+screen+v
  194.          sta pointers+0
  195.          lda #>xpos+(ypos*$28)+screen+v
  196.          sta pointers+1
  197.          ldx #$00
  198. setupscr txa
  199.          ldy #$00
  200.          sta (pointers+0),y
  201.          adc #$10
  202.          iny
  203.          cpy #$10
  204.          bne setupscr+3
  205.          lda #$27
  206.          adc pointers+0
  207.          sta pointers+0
  208.          bcc *+4
  209.          inc pointers+1
  210.          inx
  211.          cpx #$10
  212.          bne setupscr
  213.  
  214.  
  215.          ; set foreground colour
  216.          ; vordergrundfarbe setzen
  217.  
  218.          lda #foregndc
  219.          ldx #$00
  220.          sta $d800,x
  221.          sta $d900,x
  222.          sta $da00,x
  223.          sta $db00,x
  224.          inx
  225.          bne *-13
  226.  
  227.  
  228.          ; set vic registers
  229.          ; vic-register setzen
  230.  
  231.          bit $d011
  232.          bpl *-3
  233.          bit $d011
  234.          bmi *-3
  235.          lda #%00011011
  236.          sta $d011
  237.          lda #%00001000
  238.          sta $d016
  239.          lda #screen/64.(charset0/$0400)
  240.          sta $d018
  241.          lda $dd00
  242.          and #%11111100
  243.          ora #vicbank
  244.          sta $dd00
  245.          lda #$ff
  246.          sta $d012
  247.          lda #$01
  248.          sta $d01a
  249.          lda #$7f
  250.          sta $dc0d
  251.          lda #<irq
  252.          sta $fffe
  253.          lda #>irq
  254.          sta $ffff
  255.          bit $dc0d
  256.          dec $d019
  257.          cli
  258.  
  259.  
  260.          ; reset angles and coordinates
  261.          ; koordinaten&winkel nullsetzen
  262.  
  263.          lda #$00
  264.          ldx #numpoint-1
  265.          sta oldxcrds,x
  266.          sta oldycrds,x
  267.          dex
  268.          bpl *-5
  269.          sta currchar
  270.          sta alphalo
  271.          sta betalo
  272.          sta gammalo
  273.          sta alphahi
  274.          sta betahi
  275.          sta gammahi
  276.  
  277.  
  278.          ; main loop
  279.          ; hauptschleife
  280.  
  281. mainloop ; rotate unit vectors
  282.          ;  (absolutely unoptimized)
  283.          ; einheitsvektoren rotieren
  284.          ;  (absolut unoptimiert)
  285.  
  286.          sei
  287.          lda alphahi
  288.          sta alpha
  289.          lda gammahi
  290.          sta gamma
  291.          lda betahi
  292.          sta beta
  293.          cli
  294.  
  295.           ;   cos (beta) * cos (gamma)
  296.          clc
  297.          adc #$40          ; (cos)
  298.          sec
  299.          sbc gamma
  300.          sec
  301.          sbc #$40          ; (cos)
  302.          tax               ; beta-gamma
  303.          clc
  304.          lda beta
  305.          adc #$40          ; (cos)
  306.          clc
  307.          adc gamma
  308.          clc
  309.          adc #$40          ; (cos)
  310.          tay               ; beta+gamma
  311.          sec
  312.          lda sincoslo+$40,x
  313.          sbc sincoslo+$40,y
  314.          sta unitxxlo
  315.          lda sincoshi+$40,x;    cos(b-g)
  316.          sbc sincoshi+$40,y;  - cos(b+g)
  317.          sta unitxxhi
  318.  
  319.           ; - sin(a) * sin(b) * cos(g)
  320.           ; - cos(a) * sin(g)
  321.          clc
  322.          lda beta
  323.          adc gamma
  324.          clc
  325.          adc #$40     ; (cos)
  326.          sec
  327.          sbc alpha
  328.          sec
  329.          sbc #$80     ; (-)
  330.          tax          ; beta+gamma-alpha
  331.          clc
  332.          lda alpha
  333.          adc #$80     ; (-)
  334.          clc
  335.          adc gamma
  336.          clc
  337.          adc #$40     ; (cos)
  338.          sec
  339.          sbc beta
  340.          tay          ; alpha+gamma-beta
  341.          clc
  342.          lda sincoslo+$00,x
  343.          adc sincoslo+$00,y
  344.          sta sinbufl0
  345.          lda sincoshi+$00,x;  sin(b+g-a)
  346.          adc sincoshi+$00,y;+ sin(a+g-b)
  347.          sta sinbufh0
  348.          clc
  349.          lda alpha
  350.          adc #$80     ; (-)
  351.          clc
  352.          adc beta
  353.          sec
  354.          sbc gamma
  355.          sec
  356.          sbc #$40     ; (cos)
  357.          tax          ; alpha+beta-gamma
  358.          clc
  359.          lda alpha
  360.          adc #$80     ; (-)
  361.          clc
  362.          adc beta
  363.          clc
  364.          adc gamma
  365.          clc
  366.          adc #$40     ; (cos)
  367.          tay          ; alpha+beta+gamma
  368.          sec
  369.          lda sincoslo+$00,x
  370.          sbc sincoslo+$00,y
  371.          sta sinbufl1
  372.          lda sincoshi+$00,x;  sin(a+b-g)
  373.          sbc sincoshi+$00,y;- sin(a+b+g)
  374.          sta sinbufh1
  375.          clc
  376.          lda sinbufl0
  377.          adc sinbufl1
  378.          sta sinbufl1
  379.          lda sinbufh0
  380.          adc sinbufh1
  381.          cmp #$80
  382.          ror a  ; - sin(a)*sin(b)*cos(g)
  383.          ror sinbufl1
  384.          sta sinbufh1
  385.  
  386.          clc
  387.          lda alpha
  388.          adc #$40+$80      ; (-cos)
  389.          sec
  390.          sbc gamma
  391.          tax               ; alpha-gamma
  392.          clc
  393.          lda alpha
  394.          adc #$40+$80      ; (-cos)
  395.          clc
  396.          adc gamma
  397.          tay               ; alpha+gamma
  398.          sec
  399.          lda sincoslo+$40,x
  400.          sbc sincoslo+$40,y
  401.          sta sinbufl0      ;    cos(a-g)
  402.          lda sincoshi+$40,x;  - cos(a+g)
  403.          sbc sincoshi+$40,y
  404.          sta sinbufh0  ; - cos(a)*sin(g)
  405.  
  406.          clc
  407.          lda sinbufl0
  408.          adc sinbufl1
  409.          sta unitxylo
  410.          lda sinbufh0
  411.          adc sinbufh1
  412.          sta unitxyhi
  413.  
  414.           ;   cos(a) * sin(b) * cos(g)
  415.           ; - sin(a) * sin(g)
  416.          clc
  417.          lda beta
  418.          adc gamma
  419.          clc
  420.          adc #$40     ; (cos)
  421.          sec
  422.          sbc alpha
  423.          sec
  424.          sbc #$40     ; (cos)
  425.          tax          ; beta+gamma-alpha
  426.          clc
  427.          lda alpha
  428.          adc #$40     ; (cos)
  429.          clc
  430.          adc gamma
  431.          clc
  432.          adc #$40     ; (cos)
  433.          sec
  434.          sbc beta
  435.          tay          ; alpha+gamma-beta
  436.          clc
  437.          lda sincoslo+$00,x
  438.          adc sincoslo+$00,y
  439.          sta sinbufl0
  440.          lda sincoshi+$00,x;  sin(b+g-a)
  441.          adc sincoshi+$00,y;+ sin(a+g-b)
  442.          sta sinbufh0
  443.          clc
  444.          lda alpha
  445.          adc #$40     ; (cos)
  446.          clc
  447.          adc beta
  448.          sec
  449.          sbc gamma
  450.          sec
  451.          sbc #$40     ; (cos)
  452.          tax          ; alpha+beta-gamma
  453.          clc
  454.          lda alpha
  455.          adc #$40     ; (cos)
  456.          clc
  457.          adc beta
  458.          clc
  459.          adc gamma
  460.          clc
  461.          adc #$40     ; (cos)
  462.          tay          ; alpha+beta+gamma
  463.          sec
  464.          lda sincoslo+$00,x
  465.          sbc sincoslo+$00,y
  466.          sta sinbufl1
  467.          lda sincoshi+$00,x;  sin(a+b-g)
  468.          sbc sincoshi+$00,y;- sin(a+b+g)
  469.          sta sinbufh1
  470.          clc
  471.          lda sinbufl0
  472.          adc sinbufl1
  473.          sta sinbufl1
  474.          lda sinbufh0
  475.          adc sinbufh1
  476.          cmp #$80
  477.          ror a    ; cos(a)*sin(b)*cos(g)
  478.          ror sinbufl1
  479.          sta sinbufh1
  480.  
  481.          clc
  482.          lda alpha
  483.          adc #$80          ; (-)
  484.          sec
  485.          sbc gamma
  486.          tax               ; alpha-gamma
  487.          clc
  488.          lda alpha
  489.          adc #$80          ; (-)
  490.          clc
  491.          adc gamma
  492.          tay               ; alpha+gamma
  493.          sec
  494.          lda sincoslo+$40,x
  495.          sbc sincoslo+$40,y
  496.          sta sinbufl0      ;    cos(a-g)
  497.          lda sincoshi+$40,x;  - cos(a+g)
  498.          sbc sincoshi+$40,y
  499.          sta sinbufh0  ; - sin(a)*sin(g)
  500.  
  501.          clc
  502.          lda sinbufl0
  503.          adc sinbufl1
  504.          sta unitxzlo
  505.          lda sinbufh0
  506.          adc sinbufh1
  507.          sta unitxzhi
  508.  
  509.  
  510.           ; - cos (beta) * sin (gamma)
  511.          clc
  512.          lda beta
  513.          adc #$40+$80      ; (-cos)
  514.          sec
  515.          sbc gamma
  516.          tax               ; beta-gamma
  517.          clc
  518.          lda beta
  519.          adc #$40+$80      ; (-cos)
  520.          clc
  521.          adc gamma
  522.          tay               ; beta+gamma
  523.          sec
  524.          lda sincoslo+$40,x
  525.          sbc sincoslo+$40,y
  526.          sta unityxlo
  527.          lda sincoshi+$40,x;    cos(b-g)
  528.          sbc sincoshi+$40,y;  - cos(b+g)
  529.          sta unityxhi
  530.  
  531.           ;   sin(a) * sin(b) * sin(g)
  532.           ; - cos(a) * cos(g)
  533.          clc
  534.          lda beta
  535.          adc gamma
  536.          sec
  537.          sbc alpha
  538.          tax          ; beta+gamma-alpha
  539.          clc
  540.          lda alpha
  541.          adc gamma
  542.          sec
  543.          sbc beta
  544.          tay          ; alpha+gamma-beta
  545.          clc
  546.          lda sincoslo+$00,x
  547.          adc sincoslo+$00,y
  548.          sta sinbufl0
  549.          lda sincoshi+$00,x;  sin(b+g-a)
  550.          adc sincoshi+$00,y;+ sin(a+g-b)
  551.          sta sinbufh0
  552.          clc
  553.          lda alpha
  554.          adc beta
  555.          sec
  556.          sbc gamma
  557.          tax          ; alpha+beta-gamma
  558.          clc
  559.          lda alpha
  560.          adc beta
  561.          clc
  562.          adc gamma
  563.          tay          ; alpha+beta+gamma
  564.          sec
  565.          lda sincoslo+$00,x
  566.          sbc sincoslo+$00,y
  567.          sta sinbufl1
  568.          lda sincoshi+$00,x;  sin(a+b-g)
  569.          sbc sincoshi+$00,y;- sin(a+b+g)
  570.          sta sinbufh1
  571.          clc
  572.          lda sinbufl0
  573.          adc sinbufl1
  574.          sta sinbufl1
  575.          lda sinbufh0
  576.          adc sinbufh1
  577.          cmp #$80
  578.          ror a    ; sin(a)*sin(b)*sin(g)
  579.          ror sinbufl1
  580.          sta sinbufh1
  581.  
  582.          clc
  583.          lda alpha
  584.          adc #$40+$80      ; (-cos)
  585.          sec
  586.          sbc gamma
  587.          sec
  588.          sbc #$40          ; (cos)
  589.          tax               ; alpha-gamma
  590.          clc
  591.          lda alpha
  592.          adc #$40+$80      ; (-cos)
  593.          clc
  594.          adc gamma
  595.          clc
  596.          adc #$40          ; (cos)
  597.          tay               ; alpha+gamma
  598.          sec
  599.          lda sincoslo+$40,x
  600.          sbc sincoslo+$40,y
  601.          sta sinbufl0      ;    cos(a-g)
  602.          lda sincoshi+$40,x;  - cos(a+g)
  603.          sbc sincoshi+$40,y
  604.          sta sinbufh0  ; - cos(a)*cos(g)
  605.  
  606.          clc
  607.          lda sinbufl0
  608.          adc sinbufl1
  609.          sta unityylo
  610.          lda sinbufh0
  611.          adc sinbufh1
  612.          sta unityyhi
  613.  
  614.           ; - cos(a) * sin(b) * sin(g)
  615.           ; - sin(a) * cos(g)
  616.          clc
  617.          lda beta
  618.          adc gamma
  619.          sec
  620.          sbc alpha
  621.          sec
  622.          sbc #$40+$80 ; (-cos)
  623.          tax          ; beta+gamma-alpha
  624.          clc
  625.          lda alpha
  626.          adc #$40+$80 ; (-cos)
  627.          clc
  628.          adc gamma
  629.          sec
  630.          sbc beta
  631.          tay          ; alpha+gamma-beta
  632.          clc
  633.          lda sincoslo+$00,x
  634.          adc sincoslo+$00,y
  635.          sta sinbufl0
  636.          lda sincoshi+$00,x;  sin(b+g-a)
  637.          adc sincoshi+$00,y;+ sin(a+g-b)
  638.          sta sinbufh0
  639.          clc
  640.          lda alpha
  641.          adc #$40+$80 ; (-cos)
  642.          adc beta
  643.          sec
  644.          sbc gamma
  645.          tax          ; alpha+beta-gamma
  646.          clc
  647.          lda alpha
  648.          adc #$40+$80 ; (-cos)
  649.          clc
  650.          adc beta
  651.          clc
  652.          adc gamma
  653.          tay          ; alpha+beta+gamma
  654.          sec
  655.          lda sincoslo+$00,x
  656.          sbc sincoslo+$00,y
  657.          sta sinbufl1
  658.          lda sincoshi+$00,x;  sin(a+b-g)
  659.          sbc sincoshi+$00,y;- sin(a+b+g)
  660.          sta sinbufh1
  661.          clc
  662.          lda sinbufl0
  663.          adc sinbufl1
  664.          sta sinbufl1
  665.          lda sinbufh0
  666.          adc sinbufh1
  667.          cmp #$80
  668.          ror a  ; - cos(a)*sin(b)*sin(g)
  669.          ror sinbufl1
  670.          sta sinbufh1
  671.  
  672.          clc
  673.          lda alpha
  674.          adc #$80          ; (-)
  675.          sec
  676.          sbc gamma
  677.          sec
  678.          sbc #$40          ; (cos)
  679.          tax               ; alpha-gamma
  680.          clc
  681.          lda alpha
  682.          adc #$80          ; (-)
  683.          clc
  684.          adc gamma
  685.          clc
  686.          adc #$40          ; (cos)
  687.          tay               ; alpha+gamma
  688.          sec
  689.          lda sincoslo+$40,x
  690.          sbc sincoslo+$40,y
  691.          sta sinbufl0      ;    cos(a-g)
  692.          lda sincoshi+$40,x;  - cos(a+g)
  693.          sbc sincoshi+$40,y
  694.          sta sinbufh0  ; - sin(a)*cos(g)
  695.  
  696.          clc
  697.          lda sinbufl0
  698.          adc sinbufl1
  699.          sta unityzlo
  700.          lda sinbufh0
  701.          adc sinbufh1
  702.          sta unityzhi
  703.  
  704.  
  705.           ;   sin (beta)
  706.          ldx beta
  707.          lda sincoslo+$00,x
  708.          asl a
  709.          sta unitzxlo
  710.          lda sincoshi+$00,x
  711.          rol a
  712.          sta unitzxhi
  713.  
  714.           ;   sin (alpha) * cos (beta)
  715.          sec
  716.          lda alpha
  717.          sbc beta
  718.          sec
  719.          sbc #$40          ; (cos)
  720.          tax               ; alpha-beta
  721.          clc
  722.          lda alpha
  723.          adc beta
  724.          clc
  725.          adc #$40          ; (cos)
  726.          tay               ; alpha+beta
  727.          sec
  728.          lda sincoslo+$40,x
  729.          sbc sincoslo+$40,y
  730.          sta unitzylo
  731.          lda sincoshi+$40,x;    cos(a-b)
  732.          sbc sincoshi+$40,y;  - cos(a+b)
  733.          sta unitzyhi
  734.  
  735.           ; - cos (alpha) * cos (beta)
  736.          clc
  737.          lda alpha
  738.          adc #$80+$40      ; (-cos)
  739.          sec
  740.          sbc beta
  741.          sec
  742.          sbc #$40          ; (cos)
  743.          tax               ; alpha-beta
  744.          clc
  745.          lda alpha
  746.          adc #$80+$40      ; (-cos)
  747.          clc
  748.          adc beta
  749.          clc
  750.          adc #$40          ; (cos)
  751.          tay               ; alpha+beta
  752.          clc
  753.          lda sincoslo+$40,x
  754.          sbc sincoslo+$40,y
  755.          sta unitzzlo
  756.          lda sincoshi+$40,x;    cos(a-b)
  757.          sbc sincoshi+$40,y;  - cos(a+b)
  758.          sta unitzzhi
  759.  
  760.  
  761.  
  762.          ; calculate new coordinates,
  763.          ;  pretty unoptimized too
  764.          ; neue koordinaten berechnen,
  765.          ;  auch ziemlich unoptimiert
  766.  
  767.           ; p(-1;+1;+1)
  768.          sec
  769.          lda unitxylo
  770.          sbc unitxxlo
  771.          tax
  772.          lda unitxyhi
  773.          sbc unitxxhi
  774.          tay
  775.          clc
  776.          txa
  777.          adc unitxzlo
  778.          sta x2dcrdfr+$00
  779.          tya
  780.          adc unitxzhi
  781.          sta x2dcords+$00
  782.  
  783.          sec
  784.          lda unityylo
  785.          sbc unityxlo
  786.          tax
  787.          lda unityyhi
  788.          sbc unityxhi
  789.          tay
  790.          clc
  791.          txa
  792.          adc unityzlo
  793.          tya
  794.          adc unityzhi
  795.          sta y2dcords+$00
  796.  
  797.          sec
  798.          lda unitzylo
  799.          sbc unitzxlo
  800.          tax
  801.          lda unitzyhi
  802.          sbc unitzxhi
  803.          tay
  804.          clc
  805.          txa
  806.          adc unitzzlo
  807.          sta z2dcrdfr+$00
  808.          tya
  809.          adc unitzzhi
  810.          sta z2dcords+$00
  811.  
  812.           ; p(+1;+1;+1)
  813.          clc
  814.          lda unitxxlo
  815.          adc unitxylo
  816.          tax
  817.          lda unitxxhi
  818.          adc unitxyhi
  819.          tay
  820.          clc
  821.          txa
  822.          adc unitxzlo
  823.          sta x2dcrdfr+$01
  824.          tya
  825.          adc unitxzhi
  826.          sta x2dcords+$01
  827.  
  828.          clc
  829.          lda unityxlo
  830.          adc unityylo
  831.          tax
  832.          lda unityxhi
  833.          adc unityyhi
  834.          tay
  835.          clc
  836.          txa
  837.          adc unityzlo
  838.          tya
  839.          adc unityzhi
  840.          sta y2dcords+$01
  841.  
  842.          clc
  843.          lda unitzxlo
  844.          adc unitzylo
  845.          tax
  846.          lda unitzxhi
  847.          adc unitzyhi
  848.          tay
  849.          clc
  850.          txa
  851.          adc unitzzlo
  852.          sta z2dcrdfr+$01
  853.          tya
  854.          adc unitzzhi
  855.          sta z2dcords+$01
  856.  
  857.           ; p(-1;+1;-1)
  858.          sec
  859.          lda unitxylo
  860.          sbc unitxxlo
  861.          tax
  862.          lda unitxyhi
  863.          sbc unitxxhi
  864.          tay
  865.          sec
  866.          txa
  867.          sbc unitxzlo
  868.          sta x2dcrdfr+$02
  869.          tya
  870.          sbc unitxzhi
  871.          sta x2dcords+$02
  872.  
  873.          sec
  874.          lda unityylo
  875.          sbc unityxlo
  876.          tax
  877.          lda unityyhi
  878.          sbc unityxhi
  879.          tay
  880.          sec
  881.          txa
  882.          sbc unityzlo
  883.          tya
  884.          sbc unityzhi
  885.          sta y2dcords+$02
  886.  
  887.          sec
  888.          lda unitzylo
  889.          sbc unitzxlo
  890.          tax
  891.          lda unitzyhi
  892.          sbc unitzxhi
  893.          tay
  894.          sec
  895.          txa
  896.          sbc unitzzlo
  897.          sta z2dcrdfr+$02
  898.          tya
  899.          sbc unitzzhi
  900.          sta z2dcords+$02
  901.  
  902.           ; p(+1;+1;-1)
  903.          clc
  904.          lda unitxxlo
  905.          adc unitxylo
  906.          tax
  907.          lda unitxxhi
  908.          adc unitxyhi
  909.          tay
  910.          sec
  911.          txa
  912.          sbc unitxzlo
  913.          sta x2dcrdfr+$03
  914.          tya
  915.          sbc unitxzhi
  916.          sta x2dcords+$03
  917.  
  918.          clc
  919.          lda unityxlo
  920.          adc unityylo
  921.          tax
  922.          lda unityxhi
  923.          adc unityyhi
  924.          tay
  925.          sec
  926.          txa
  927.          sbc unityzlo
  928.          tya
  929.          sbc unityzhi
  930.          sta y2dcords+$03
  931.  
  932.          clc
  933.          lda unitzxlo
  934.          adc unitzylo
  935.          tax
  936.          lda unitzxhi
  937.          adc unitzyhi
  938.          tay
  939.          sec
  940.          txa
  941.          sbc unitzzlo
  942.          sta z2dcrdfr+$03
  943.          tya
  944.          sbc unitzzhi
  945.          sta z2dcords+$03
  946.  
  947.           ; p(-1;-1;+1)
  948.          sec
  949.          lda unitxzlo
  950.          sbc unitxxlo
  951.          tax
  952.          lda unitxzhi
  953.          sbc unitxxhi
  954.          tay
  955.          sec
  956.          txa
  957.          sbc unitxylo
  958.          sta x2dcrdfr+$04
  959.          tya
  960.          sbc unitxyhi
  961.          sta x2dcords+$04
  962.  
  963.          sec
  964.          lda unityzlo
  965.          sbc unityxlo
  966.          tax
  967.          lda unityzhi
  968.          sbc unityxhi
  969.          tay
  970.          sec
  971.          txa
  972.          sbc unityylo
  973.          tya
  974.          sbc unityyhi
  975.          sta y2dcords+$04
  976.  
  977.          sec
  978.          lda unitzzlo
  979.          sbc unitzxlo
  980.          tax
  981.          lda unitzzhi
  982.          sbc unitzxhi
  983.          tay
  984.          sec
  985.          txa
  986.          sbc unitzylo
  987.          sta z2dcrdfr+$04
  988.          tya
  989.          sbc unitzyhi
  990.          sta z2dcords+$04
  991.  
  992.           ; p(+1;-1;+1)
  993.          sec
  994.          lda unitxxlo
  995.          sbc unitxylo
  996.          tax
  997.          lda unitxxhi
  998.          sbc unitxyhi
  999.          tay
  1000.          clc
  1001.          txa
  1002.          adc unitxzlo
  1003.          sta x2dcrdfr+$05
  1004.          tya
  1005.          adc unitxzhi
  1006.          sta x2dcords+$05
  1007.  
  1008.          sec
  1009.          lda unityxlo
  1010.          sbc unityylo
  1011.          tax
  1012.          lda unityxhi
  1013.          sbc unityyhi
  1014.          tay
  1015.          clc
  1016.          txa
  1017.          adc unityzlo
  1018.          tya
  1019.          adc unityzhi
  1020.          sta y2dcords+$05
  1021.  
  1022.          sec
  1023.          lda unitxzlo
  1024.          sbc unitzylo
  1025.          tax
  1026.          lda unitzxhi
  1027.          sbc unitzyhi
  1028.          tay
  1029.          clc
  1030.          txa
  1031.          adc unitzzlo
  1032.          sta z2dcrdfr+$05
  1033.          tya
  1034.          adc unitzzhi
  1035.          sta z2dcords+$05
  1036.  
  1037.           ; p(-1;-1;-1)
  1038.          sec
  1039.          lda #$00
  1040.          sbc unitxxlo
  1041.          tax
  1042.          lda #$00
  1043.          sbc unitxxhi
  1044.          tay
  1045.          sec
  1046.          txa
  1047.          sbc unitxylo
  1048.          tax
  1049.          tya
  1050.          sbc unitxyhi
  1051.          tay
  1052.          sec
  1053.          txa
  1054.          sbc unitxzlo
  1055.          sta x2dcrdfr+$06
  1056.          tya
  1057.          sbc unitxzhi
  1058.          sta x2dcords+$06
  1059.  
  1060.          sec
  1061.          lda #$00
  1062.          sbc unityxlo
  1063.          tax
  1064.          lda #$00
  1065.          sbc unityxhi
  1066.          tay
  1067.          sec
  1068.          txa
  1069.          sbc unityylo
  1070.          tax
  1071.          tya
  1072.          sbc unityyhi
  1073.          tay
  1074.          sec
  1075.          txa
  1076.          sbc unityzlo
  1077.          tya
  1078.          sbc unityzhi
  1079.          sta y2dcords+$06
  1080.  
  1081.          sec
  1082.          lda #$00
  1083.          sbc unitzxlo
  1084.          tax
  1085.          lda #$00
  1086.          sbc unitzxhi
  1087.          tay
  1088.          sec
  1089.          txa
  1090.          sbc unitzylo
  1091.          tax
  1092.          tya
  1093.          sbc unitzyhi
  1094.          tay
  1095.          sec
  1096.          txa
  1097.          sbc unitzzlo
  1098.          sta z2dcrdfr+$06
  1099.          tya
  1100.          sbc unitzzhi
  1101.          sta z2dcords+$06
  1102.  
  1103.           ; p(+1;-1;-1)
  1104.          sec
  1105.          lda unitxxlo
  1106.          sbc unitxylo
  1107.          tax
  1108.          lda unitxxhi
  1109.          sbc unitxyhi
  1110.          tay
  1111.          sec
  1112.          txa
  1113.          sbc unitxzlo
  1114.          sta x2dcrdfr+$07
  1115.          tya
  1116.          sbc unitxzhi
  1117.          sta x2dcords+$07
  1118.  
  1119.          sec
  1120.          lda unityxlo
  1121.          sbc unityylo
  1122.          tax
  1123.          lda unityxhi
  1124.          sbc unityyhi
  1125.          tay
  1126.          sec
  1127.          txa
  1128.          sbc unityzlo
  1129.          tya
  1130.          sbc unityzhi
  1131.          sta y2dcords+$07
  1132.  
  1133.          sec
  1134.          lda unitzxlo
  1135.          sbc unitzylo
  1136.          tax
  1137.          lda unitzxhi
  1138.          sbc unitzyhi
  1139.          tay
  1140.          sec
  1141.          txa
  1142.          sbc unitzzlo
  1143.          sta z2dcrdfr+$07
  1144.          tya
  1145.          sbc unitzzhi
  1146.          sta z2dcords+$07
  1147.  
  1148.  
  1149.          ; convert coordinates to 2-d
  1150.          ; koordinaten nach 2d wandeln
  1151.  
  1152.          ldx #numpoint-1
  1153. convto2d ldy x2dcrdfr,x
  1154.          lda x2dcords,x
  1155.          jsr perspect
  1156.          sta x2dcords,x
  1157.          ldy z2dcrdfr,x
  1158.          lda z2dcords,x
  1159.          jsr perspect
  1160.          sta y2dcords,x
  1161.          dex
  1162.          bpl convto2d
  1163.  
  1164.  
  1165.          ; toggle visible screen
  1166.          ; sichtbaren bildschirm
  1167.          ;  umschalten
  1168.  
  1169.          lda $d012
  1170.          cmp #$d3
  1171.          bcs *+13
  1172.          cmp #$53
  1173.          bcc *+9
  1174.          lda #$d3
  1175.          cmp $d012
  1176.          bcs *-3
  1177.          lda #$01
  1178.          eor currchar
  1179.          sta currchar
  1180.          lda #charset0(charset1/$0400
  1181.          eor $d018
  1182.          sta $d018
  1183.  
  1184.  
  1185.          ; clear the invisible charset
  1186.          ; den unsichtbaren zeichensatz
  1187.          ;  loeschen
  1188.  
  1189.          lda #$00
  1190.          tax
  1191.          ldy currchar
  1192.          beq clirchr1
  1193. clirchr0 sta charset0+v+$00,x
  1194.          sta charset0+v+$80,x
  1195.          sta charset0+v+$0100,x
  1196.          sta charset0+v+$0180,x
  1197.          sta charset0+v+$0200,x
  1198.          sta charset0+v+$0280,x
  1199.          sta charset0+v+$0300,x
  1200.          sta charset0+v+$0380,x
  1201.          sta charset0+v+$0400,x
  1202.          sta charset0+v+$0480,x
  1203.          sta charset0+v+$0500,x
  1204.          sta charset0+v+$0580,x
  1205.          sta charset0+v+$0600,x
  1206.          sta charset0+v+$0680,x
  1207.          sta charset0+v+$0700,x
  1208.          sta charset0+v+$0780,x
  1209.          inx
  1210.          bpl clirchr0
  1211.          bmi drawloop-2
  1212. clirchr1 sta charset1+v+$00,x
  1213.          sta charset1+v+$80,x
  1214.          sta charset1+v+$0100,x
  1215.          sta charset1+v+$0180,x
  1216.          sta charset1+v+$0200,x
  1217.          sta charset1+v+$0280,x
  1218.          sta charset1+v+$0300,x
  1219.          sta charset1+v+$0380,x
  1220.          sta charset1+v+$0400,x
  1221.          sta charset1+v+$0480,x
  1222.          sta charset1+v+$0500,x
  1223.          sta charset1+v+$0580,x
  1224.          sta charset1+v+$0600,x
  1225.          sta charset1+v+$0680,x
  1226.          sta charset1+v+$0700,x
  1227.          sta charset1+v+$0780,x
  1228.          inx
  1229.          bpl clirchr1
  1230.  
  1231.  
  1232.          ; draw vector object
  1233.          ; vektorobjekt zeichnen
  1234.  
  1235.          ldy #linepnt1-linepnt0-1
  1236. drawloop sty pointers+2
  1237.          ldx linepnt0,y
  1238.          lda x2dcords,x
  1239.          sta begx
  1240.          lda y2dcords,x
  1241.          sta begy
  1242.          ldx linepnt1,y
  1243.          lda x2dcords,x
  1244.          ldy y2dcords,x
  1245.          tax
  1246.          jsr drawline
  1247.          ldy pointers+2
  1248.          dey
  1249.          bpl drawloop
  1250.          jmp mainloop
  1251.  
  1252.  
  1253.          ; irq routine
  1254.          ; irq-routine
  1255.  
  1256. irq      pha
  1257.  
  1258.  
  1259.          ; advance angles
  1260.          ; winkel erhoehen
  1261.  
  1262.          clc
  1263.          lda #<alphaadd
  1264.          adc alphalo
  1265.          sta alphalo
  1266.          lda #>alphaadd
  1267.          adc alphahi
  1268.          sta alphahi
  1269.          clc
  1270.          lda #<betaadd
  1271.          adc betalo
  1272.          sta betalo
  1273.          lda #>betaadd
  1274.          adc betahi
  1275.          sta betahi
  1276.          clc
  1277.          lda #<gammaadd
  1278.          adc gammalo
  1279.          sta gammalo
  1280.          lda #>gammaadd
  1281.          adc gammahi
  1282.          sta gammahi
  1283.  
  1284.          dec $d019
  1285.          pla
  1286.          rti
  1287.  
  1288.  
  1289.          ;perform perspective division
  1290.          ;perspektivdivision vollfuehren
  1291.  
  1292. perspect pha
  1293.          bpl nonegcrd
  1294.          pha
  1295.          tya
  1296.          clc
  1297.          eor #$ff
  1298.          adc #$01
  1299.          tay
  1300.          pla
  1301.          eor #$ff
  1302.          adc #$00
  1303. nonegcrd sta dividend+0
  1304.          sty dividend+1
  1305.          clc
  1306.          lda #$50; only positive depth
  1307.                  ;  values
  1308.                  ; nur positive tiefen-
  1309.                  ;  werte
  1310.          adc y2dcords,x
  1311.          sta divisor+0
  1312.          ldy #$00
  1313.          sty divisor+1
  1314.          iny
  1315.          sty divisor+2
  1316.          sec
  1317. divloop  ror divisor+0
  1318.          ror divisor+1
  1319.          sec
  1320.          lda dividend+1
  1321.          sbc divisor+1
  1322.          tay
  1323.          lda dividend+0
  1324.          sbc divisor+0
  1325.          bcc *+6
  1326.          sta dividend+0
  1327.          sty dividend+1
  1328.          rol divisor+2
  1329.          bcc divloop
  1330.          pla
  1331.          asl a
  1332.          lda divisor+2
  1333.          bcc *+4
  1334.          eor #$ff
  1335.          adc #$40;origin is at ($40;$40)
  1336.                  ;ursprung bei ($40;$40)
  1337.          rts
  1338.  
  1339.  
  1340.          ; draw a line
  1341.          ; eine linie zeichnen
  1342.  
  1343. drawline stx endx
  1344.          sty endy
  1345.          cpx begx
  1346.          bcs *+14; swap line end points
  1347.          lda begx;  if the line runs
  1348.          sta endx;  from right to left
  1349.          lda begy; linienendpunkte ver-
  1350.          sta endy;  tauschen, wenn die
  1351.          stx begx;  linie von rechts
  1352.          sty begy;  nach links verlaeuft
  1353.          sec
  1354.          lda endx
  1355.          sbc begx
  1356.          sta deltax
  1357.          lda begy
  1358.          sbc endy
  1359.          bcc lintype2
  1360.          sta deltay
  1361.          cmp deltax
  1362.          bcc lintype1
  1363.          dec endy
  1364.          lsr a
  1365.          eor #$ff
  1366.          tax
  1367.          lda #<spdt0ofs
  1368.          ldy #>spdt0ofs
  1369.          jmp putline0
  1370. lintype1 lda deltax
  1371.          lsr a
  1372.          eor #$ff
  1373.          tax
  1374.          lda #<spdt1ofs
  1375.          ldy #>spdt1ofs
  1376.          jmp putline0
  1377. lintype2 eor #$ff
  1378.          adc #$01
  1379.          sta deltay
  1380.          cmp deltax
  1381.          bcs lintype3
  1382.          lda deltax
  1383.          lsr a
  1384.          eor #$ff
  1385.          tax
  1386.          lda #<spdt2ofs
  1387.          ldy #>spdt2ofs
  1388.          jmp putline0
  1389. lintype3 inc endy
  1390.          lsr a
  1391.          eor #$ff
  1392.          tax
  1393.          lda #<spdt3ofs
  1394.          ldy #>spdt3ofs
  1395.  
  1396. putline0 clc
  1397.          pha
  1398.          lda currchar
  1399.          beq drwlnch1
  1400.          pla
  1401.          adc #<spidcod0
  1402.          sta pointers+0
  1403.          tya
  1404.          adc #>spidcod0
  1405.          sta pointers+1
  1406.          bne putline1
  1407. drwlnch1 pla
  1408.          adc #<spidcod1
  1409.          sta pointers+0
  1410.          tya
  1411.          adc #>spidcod1
  1412.          sta pointers+1
  1413.  
  1414. putline1 ldy begx      ; determine
  1415.          lda pointers+0;  jump-in
  1416.          adc spdxofsl,y;  address
  1417.          sta speedjsr+1
  1418.          lda pointers+1; einsprung-
  1419.          adc spdxofsh,y;  adresse
  1420.          sta speedjsr+2;  bestimmen
  1421.  
  1422.          ldy endx
  1423.          lda #sprw0dir-spidraw0+1
  1424.          adc pointers+0
  1425.          php
  1426.          clc
  1427.          adc spdxofsl,y
  1428.          sta pointers+0; determine
  1429.          lda #$00      ;  return address
  1430.          adc pointers+1
  1431.          plp           ; rueckkehr-
  1432.          adc spdxofsh,y;  adresse
  1433.          sta pointers+1;  bestimmen
  1434.  
  1435.          ldy #$00
  1436.          lda (pointers+0),y; buffer some
  1437.          pha               ;  speedcode
  1438.          iny
  1439.          lda (pointers+0),y; etwas
  1440.          pha               ;  speedcode
  1441.          iny               ;  puffern
  1442.          lda (pointers+0),y
  1443.          pha
  1444.          iny
  1445.          lda (pointers+0),y
  1446.          pha
  1447.          iny
  1448.          lda (pointers+0),y
  1449.          pha
  1450.  
  1451.           ; store the little fixing
  1452.           ;  loop
  1453.           ; die kleine korrigierschleife
  1454.           ;  schreiben
  1455.          ldy #$00
  1456.          lda #$c0; op-code for cmp #$
  1457.                  ; op-code fuer cmp #$
  1458.          sta (pointers+0),y
  1459.          iny
  1460.          lda endy
  1461.          sta (pointers+0),y
  1462.          iny
  1463.          lda #$d0; op-code for bne
  1464.                  ; op-code fuer bne
  1465.          sta (pointers+0),y
  1466.          iny
  1467.          lda #$f3; *-11
  1468.          sta (pointers+0),y
  1469.          iny
  1470.          lda #$60; op-code for rts
  1471.                  ; op-code fuer rts
  1472.          sta (pointers+0),y
  1473.  
  1474.          clc
  1475.          txa
  1476.          ldy begy
  1477. speedjsr jsr !$00; finally draw the line
  1478.                  ; die linie endlich
  1479.                  ;  zeichnen
  1480.  
  1481.          ldy #$04; restore the speedcode
  1482.          pla     ; den speedcode wieder-
  1483.          sta (pointers+0),y; herstellen
  1484.          dey
  1485.          pla
  1486.          sta (pointers+0),y
  1487.          dey
  1488.          pla
  1489.          sta (pointers+0),y
  1490.          dey
  1491.          pla
  1492.          sta (pointers+0),y
  1493.          dey
  1494.          pla
  1495.          sta (pointers+0),y
  1496.          rts
  1497.  
  1498.  
  1499.          ; subroutine to build
  1500.          ;  the speedcode
  1501.          ; unterroutine zum generieren
  1502.          ;  des speedcodes
  1503.  
  1504. makspeed lda #$88; op-code for dey
  1505.                  ; op-code fuer dey
  1506.          sta sprw0dir
  1507.          sta sprw1dir
  1508.  
  1509.          lda #<spdt0ofs
  1510.          ldx #>spdt0ofs
  1511.          jsr mkspt0sb
  1512.          lda #<spdt1ofs
  1513.          ldx #>spdt1ofs
  1514.          jsr mkspt1sb
  1515.  
  1516.          lda #$c8; op-code for iny
  1517.                  ; op-code fuer iny
  1518.          sta sprw0dir
  1519.          sta sprw1dir
  1520.  
  1521.          lda #<spdt2ofs
  1522.          ldx #>spdt2ofs
  1523.          jsr mkspt1sb
  1524.          lda #<spdt3ofs
  1525.          ldx #>spdt3ofs
  1526.          jmp mkspt0sb
  1527.  
  1528. mkspt0sb clc
  1529.          adc pointers+2
  1530.          sta pointers+0
  1531.          txa
  1532.          adc pointers+3
  1533.          sta pointers+1
  1534.          lda #%10000000
  1535.          sta spidraw0+2
  1536.          lda pointers+4
  1537.          sta spidraw0+5
  1538.          sta spidraw0+8
  1539.          ldx #$80; 128 pixels width
  1540.                  ; 128 pixel breite
  1541. mkspt0lp ldy #spidraw1-spidraw0-1
  1542.          lda spidraw0,y
  1543.          sta (pointers+0),y
  1544.          dey
  1545.          bpl mkspt0lp+2
  1546.          lda #spidraw1-spidraw0
  1547.          ldy #spidraw0-spidraw0
  1548.          jsr nextspid
  1549.          bne mkspt0lp+0
  1550.          rts
  1551.  
  1552. mkspt1sb clc
  1553.          adc pointers+2
  1554.          sta pointers+0
  1555.          txa
  1556.          adc pointers+3
  1557.          sta pointers+1
  1558.          lda #%10000000
  1559.          sta spidraw1+2
  1560.          lda pointers+4
  1561.          sta spidraw1+5
  1562.          sta spidraw1+8
  1563.          ldx #$80; 128 pixels width
  1564.                  ; 128 pixel breite
  1565. mkspt1lp ldy #spidrawe-spidraw1-1
  1566.          lda spidraw1,y
  1567.          sta (pointers+0),y
  1568.          dey
  1569.          bpl mkspt1lp+2
  1570.          lda #spidrawe-spidraw1
  1571.          ldy #spidraw1-spidraw0
  1572.          jsr nextspid
  1573.          bne mkspt1lp+0
  1574.          rts
  1575.  
  1576. nextspid clc
  1577.          adc pointers+0
  1578.          sta pointers+0
  1579.          bcc *+4
  1580.          inc pointers+1
  1581.          lda spidraw0+2,y
  1582.          lsr a
  1583.          lda spidraw0+2,y
  1584.          ror a
  1585.          sta spidraw0+2,y
  1586.          bcc nxtspret
  1587.          clc
  1588.          lda #$80; 1 char column is 128
  1589.                  ;  (16x8) bytes
  1590.                  ; 1 zeichenspalte sind
  1591.                  ;  128 (16*8) bytes
  1592.          adc spidraw0+4,y
  1593.          sta spidraw0+4,y
  1594.          sta spidraw0+7,y
  1595.          lda #$00
  1596.          adc spidraw0+5,y
  1597.          sta spidraw0+5,y
  1598.          sta spidraw0+8,y
  1599. nxtspret dex
  1600.          rts
  1601.  
  1602.  
  1603.          ; speedcode element for a
  1604.          ;  slope angle of +/-90 to  
  1605.          ;  +/-45 degrees
  1606.          ; speedcodeelement fuer einen
  1607.          ;  steigungswinkel von +/-90
  1608.          ;  bis +/-45 grad
  1609.  
  1610. spidraw0 tax
  1611.          lda #$00
  1612.          ora !$00,y
  1613.          sta !$00,y
  1614. sprw0dir .byte $00
  1615.          txa
  1616.          adc deltax
  1617.          bcc spidraw0
  1618.          sbc deltay
  1619.  
  1620.  
  1621.          ; speedcode element for a
  1622.          ;  slope angle of +/-45 to 0
  1623.          ;  degrees
  1624.          ; speedcodeelement fuer einen
  1625.          ;  steigungswinkel von +/-45
  1626.          ;  bis 0 grad
  1627.  
  1628. spidraw1 tax
  1629.          lda #$00
  1630.          ora !$00,y
  1631.          sta !$00,y
  1632.          txa
  1633.          adc deltay
  1634.          bcc *+5
  1635.          sbc deltax
  1636. sprw1dir .byte $00
  1637.  
  1638. spidrawe
  1639.  
  1640.          ; table with the line begin
  1641.          ;  and end points
  1642.          ; tabelle der linienanfangs-
  1643.          ;  und endpunkte
  1644.  
  1645. linepnt0 .byte 0,1,3,2,0,1,2,3,4,5,7,6
  1646. linepnt1 .byte 1,3,2,0,4,5,6,7,5,7,6,4
  1647.  
  1648.  
  1649. nmi      rti
  1650.  
  1651.  
  1652.          ; sine/cosine table
  1653.          ; sinus-/kosinustabelle
  1654.  
  1655.          *= *&$ff00+$0100
  1656. sincoslo .byte $00,$8a,$14,$9e,$28,$b1
  1657.          .byte $3a,$c2,$4a,$d1,$58,$de
  1658.          .byte $62,$e6,$69,$ea,$6b,$ea
  1659.          .byte $67,$e4,$5e,$d8,$4f,$c5
  1660.          .byte $38,$aa,$1a,$88,$f4,$5e
  1661.          .byte $c6,$2b,$8e,$ee,$4d,$a8
  1662.          .byte $01,$57,$ab,$fc,$4a,$96
  1663.          .byte $de,$24,$66,$a6,$e3,$1c
  1664.          .byte $53,$86,$b6,$e3,$0d,$33
  1665.          .byte $57,$77,$93,$ad,$c3,$d5
  1666.          .byte $e4,$f0,$f9,$fe,$ff,$fe
  1667.          .byte $f9,$f0,$e4,$d5,$c3,$ad
  1668.          .byte $93,$77,$57,$33,$0d,$e3
  1669.          .byte $b6,$86,$53,$1c,$e3,$a6
  1670.          .byte $66,$24,$de,$96,$4a,$fc
  1671.          .byte $ab,$57,$01,$a8,$4d,$ee
  1672.          .byte $8e,$2b,$c6,$5e,$f4,$88
  1673.          .byte $1a,$aa,$38,$c5,$4f,$d8
  1674.          .byte $5e,$e4,$67,$ea,$6b,$ea
  1675.          .byte $69,$e6,$62,$de,$58,$d1
  1676.          .byte $4a,$c2,$3a,$b1,$28,$9e
  1677.          .byte $14,$8a,$00,$75,$eb,$61
  1678.          .byte $d7,$4e,$c5,$3d,$b5,$2e
  1679.          .byte $a7,$21,$9d,$19,$96,$15
  1680.          .byte $94,$15,$98,$1b,$a1,$27
  1681.          .byte $b0,$3a,$c7,$55,$e5,$77
  1682.          .byte $0b,$a1,$39,$d4,$71,$11
  1683.          .byte $b2,$57,$fe,$a8,$54,$03
  1684.          .byte $b5,$69,$21,$db,$99,$59
  1685.          .byte $1c,$e3,$ac,$79,$49,$1c
  1686.          .byte $f2,$cc,$a8,$88,$6c,$52
  1687.          .byte $3c,$2a,$1b,$0f,$06,$01
  1688.          .byte $00,$01,$06,$0f,$1b,$2a
  1689.          .byte $3c,$52,$6c,$88,$a8,$cc
  1690.          .byte $f2,$1c,$49,$79,$ac,$e3
  1691.          .byte $1c,$59,$99,$db,$21,$69
  1692.          .byte $b5,$03,$54,$a8,$fe,$57
  1693.          .byte $b2,$11,$71,$d4,$39,$a1
  1694.          .byte $0b,$77,$e5,$55,$c7,$3a
  1695.          .byte $b0,$27,$a1,$1b,$98,$15
  1696.          .byte $94,$15,$96,$19,$9d,$21
  1697.          .byte $a7,$2e,$b5,$3d,$c5,$4e
  1698.          .byte $d7,$61,$eb,$75
  1699.  
  1700.          *= *+$0100
  1701. sincoshi .byte $00,$00,$01,$01,$02,$02
  1702.          .byte $03,$03,$04,$04,$05,$05
  1703.          .byte $06,$06,$07,$07,$08,$08
  1704.          .byte $09,$09,$0a,$0a,$0b,$0b
  1705.          .byte $0c,$0c,$0d,$0d,$0d,$0e
  1706.          .byte $0e,$0f,$0f,$0f,$10,$10
  1707.          .byte $11,$11,$11,$11,$12,$12
  1708.          .byte $12,$13,$13,$13,$13,$14
  1709.          .byte $14,$14,$14,$14,$15,$15
  1710.          .byte $15,$15,$15,$15,$15,$15
  1711.          .byte $15,$15,$15,$15,$15,$15
  1712.          .byte $15,$15,$15,$15,$15,$15
  1713.          .byte $15,$15,$15,$15,$15,$14
  1714.          .byte $14,$14,$14,$14,$13,$13
  1715.          .byte $13,$13,$12,$12,$12,$11
  1716.          .byte $11,$11,$11,$10,$10,$0f
  1717.          .byte $0f,$0f,$0e,$0e,$0d,$0d
  1718.          .byte $0d,$0c,$0c,$0b,$0b,$0a
  1719.          .byte $0a,$09,$09,$08,$08,$07
  1720.          .byte $07,$06,$06,$05,$05,$04
  1721.          .byte $04,$03,$03,$02,$02,$01
  1722.          .byte $01,$00,$00,$ff,$fe,$fe
  1723.          .byte $fd,$fd,$fc,$fc,$fb,$fb
  1724.          .byte $fa,$fa,$f9,$f9,$f8,$f8
  1725.          .byte $f7,$f7,$f6,$f6,$f5,$f5
  1726.          .byte $f4,$f4,$f3,$f3,$f2,$f2
  1727.          .byte $f2,$f1,$f1,$f0,$f0,$f0
  1728.          .byte $ef,$ef,$ee,$ee,$ee,$ee
  1729.          .byte $ed,$ed,$ed,$ec,$ec,$ec
  1730.          .byte $ec,$eb,$eb,$eb,$eb,$eb
  1731.          .byte $ea,$ea,$ea,$ea,$ea,$ea
  1732.          .byte $ea,$ea,$ea,$ea,$ea,$ea
  1733.          .byte $ea,$ea,$ea,$ea,$ea,$ea
  1734.          .byte $ea,$ea,$ea,$ea,$ea,$ea
  1735.          .byte $ea,$eb,$eb,$eb,$eb,$eb
  1736.          .byte $ec,$ec,$ec,$ec,$ed,$ed
  1737.          .byte $ed,$ee,$ee,$ee,$ee,$ef
  1738.          .byte $ef,$f0,$f0,$f0,$f1,$f1
  1739.          .byte $f2,$f2,$f2,$f3,$f3,$f4
  1740.          .byte $f4,$f5,$f5,$f6,$f6,$f7
  1741.          .byte $f7,$f8,$f8,$f9,$f9,$fa
  1742.          .byte $fa,$fb,$fb,$fc,$fc,$fd
  1743.          .byte $fd,$fe,$fe,$ff
  1744.  
  1745.          *= *+$0100
  1746. return   sei
  1747.          lda #$37
  1748.          sta $01
  1749.          ldx #$ff
  1750.          txs
  1751.          jsr $fda3
  1752.          lda #$00
  1753.          tay
  1754.          sta $02,y
  1755.          sta $0200,y
  1756.          sta $0300,y
  1757.          iny
  1758.          bne *-10
  1759.          ldx #$3c
  1760.          ldy #$03
  1761.          stx $b2
  1762.          sty $b3
  1763.          ldx #$00
  1764.          ldy #$a0
  1765.          jsr $fd8c
  1766.          jsr $fd15
  1767.          jsr $ff5b
  1768.          jsr $e453
  1769.          jsr $e3bf
  1770.          ldx #$01
  1771.          stx $df06
  1772.          dex
  1773.          stx $df02
  1774.          stx $df04
  1775.          ldy #$08
  1776.          sty $df03
  1777.          sty $df05
  1778.          ldy #$f8
  1779.          sty $df07
  1780.          dey
  1781.          sty $df08
  1782.          stx $df0a
  1783.          lda #$ec
  1784.          sta $df01
  1785.          ldy #$1f
  1786.          lda doreturn,y
  1787.          sta $0340,y
  1788.          dey
  1789.          bpl *-7
  1790.          jsr $0340
  1791.          stx $df06
  1792.          lda #$ed
  1793.          sta $df01
  1794.          lda #$8f
  1795.          pha
  1796.          lda #$ff
  1797.          pha
  1798.          jmp $0340
  1799. doreturn sei
  1800.          lda #$30
  1801.          sta $01
  1802.          lda $ff00
  1803.          sta $ff00
  1804.          lda #$37
  1805.          sta $01
  1806.          rts
  1807.  
  1808.