home *** CD-ROM | disk | FTP | other *** search
/ Go64! / Go64_2002-06_2002_CSW_Side_A.d64 / rotlinwslope.txt < prev    next >
Text File  |  2023-02-26  |  36KB  |  1,755 lines

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