home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1987 December / 64er_Magazin_87-12_1987_Markt__Technik_de_Side_B.d64 / source.teil1 < prev    next >
Text File  |  2022-10-26  |  28KB  |  1,337 lines

  1.  
  2. *         = $801
  3.  
  4. ; speicherbelegung:
  5. ; $e000 - $ffff    : bild 1
  6. ; dend  - $dfff    : daten
  7. ; $c800 - dend-1   : programm
  8. ; $c780 - $c7ff    : variablen
  9. ; $c700 - $c77f    : vartab (defaults)
  10. ; $c400 - $c6ff    : cosinustabelle
  11. ; $c000 - $c3ff    : farben 1
  12. ; $a000 - $bfff    : bild 2
  13. ; $9000 - $9fff    : programm
  14. ; $8c00 - $8fff    : farben 2
  15. ; $8800 - $8bff    : programm
  16.  
  17. panf      = $37  ;anfang der punkte
  18. pvek      = $59  ;zeiger auf punkt
  19. lvek      = $5b  ;  "     "  linie
  20. fac       = $61  ;3bytes
  21. arg       = $69  ;3bytes
  22. hilf      = $64  ;arithmetisches
  23.                  ;hilfsregister (3bytes)
  24. basis     = $29
  25. zero      = fac
  26. vic       = $d000
  27. vonx      = $5d
  28. vony      = $5f
  29. nachx     = $6c
  30. nachy     = $67
  31. dx        = fac
  32. dy        = fac+2
  33. ds        = hilf+1
  34. sp        = hilf+2
  35.  
  36. vb        = $c780 ;anfang variablen
  37. zw        = vb
  38. ba        = zw+2
  39. bi        = ba+1
  40. eventl    = bi+2
  41. immer     = eventl+2
  42.  
  43. lanf      = immer+2  ;anfang der linien
  44. wa        = lanf+2   ;winkel a
  45. wb        = wa+3     ;winkel b
  46. dwa       = wb+3     ;delta winkel a
  47. dwb       = dwa+3    ;delta einkel b
  48. x         = dwb+3    ;verschiebung x
  49. y         = x+2      ;verschiebung y
  50. z         = y+2      ;verschiebung z
  51. delx      = z+2      ;delta x
  52. dely      = delx+2   ;delta y
  53. delz      = dely+2   ;delta z
  54. dimflag   = delz+2   ;flag dimensionrng.
  55. autoflg   = dimflag+1;flag automatische
  56.                      ;basic -
  57.                      ;interpretation
  58. joyflg    = autoflg+1;flag joystick-
  59.                      ;steuerung
  60.                      ;0=joystick
  61.                      ;1=automatisch
  62. perspflg   = joyflg+1 ;0=parallelp.
  63.                      ;1=fluchtp.
  64. aug       = perspflg+1;augpunkt
  65. s         = aug+2    ;schirm
  66. as        = s+2      ;s-aug
  67. xmin      = as+2     ;minimum von x
  68. ymin      = xmin+2   ;   "     "  y
  69. zmin      = ymin+2   ;   "     "  z
  70. xmax      = zmin+2   ;maximum von x
  71. ymax      = xmax+2   ;   "     "  y
  72. zmax      = ymax+2   ;   "     "  z
  73. vonz      = zmax+2
  74. nachz     = vonz+2
  75. neg       = nachz+2  ;negativflag
  76. winkel    = neg+1
  77. pmax      = winkel+3 ;max. punktnr.
  78. lmax      = pmax+2   ;max. liniennr.
  79. sa        = lmax+2   ;sin(wa)
  80. sb        = sa+3     ;sin(wb)
  81. ca        = sb+3     ;cos(wa)
  82. cb        = ca+3     ;cos(wb)
  83. puff      = cb+3     ;puffer
  84.  
  85.  
  86. frmnum    = $ad8a
  87. getadr    = $b7f7
  88. illegal   = $b248
  89.  
  90. move      .segment a,b
  91.           lda &a&
  92.           sta &b&
  93.           lda &a&+1
  94.           sta &b&+1
  95.           .mend
  96. movew     .segment a,b
  97.           #move &a&,&b&
  98.           lda &a&+2
  99.           sta &b&+2
  100.           .mend
  101. movei     .segment im,b
  102.           lda #<[&im&]
  103.           sta &b&
  104.           lda #>[&im&]
  105.           sta &b&+1
  106.           .mend
  107. movevin   .segment vek,offset,ad
  108.           ldy #&offset&
  109.           lda (&vek&),y
  110.           sta &ad&
  111.           iny
  112.           lda (&vek&),y
  113.           sta &ad&+1
  114.           .mend
  115. movenin   .segment ad,offset,vek
  116.           ldy #&offset&
  117.           lda &ad&
  118.           sta (&vek&),y
  119.           iny
  120.           lda &ad&+1
  121.           sta (&vek&),y
  122.           .mend
  123. add       .segment a,b,c
  124.           clc
  125.           lda &a&
  126.           adc &b&
  127.           sta &c&
  128.           lda &a&+1
  129.           adc &b&+1
  130.           sta &c&+1
  131.           .mend
  132. addi      .segment a,b,c
  133.           clc
  134.           lda #<&a&
  135.           adc &b&
  136.           sta &c&
  137.           lda #>&a&
  138.           adc &b&+1
  139.           sta &c&+1
  140.           .mend
  141. sub       .segment a,b,c
  142.           sec
  143.           lda &a&
  144.           sbc &b&
  145.           sta &c&
  146.           lda &a&+1
  147.           sbc &b&+1
  148.           sta &c&+1
  149.           .mend
  150. subi      .segment a,b,c
  151.           sec
  152.           lda #<&a&
  153.           sbc &b&
  154.           sta &c&
  155.           lda #>&a&
  156.           sbc &b&+1
  157.           sta &c&+1
  158.           .mend
  159. shiftr    .macro a
  160.           clc
  161.           bvs l1
  162.           bpl l3
  163.           bmi l2
  164. l1        bmi l3
  165. l2        sec
  166. l3        ror &a&+1
  167.           ror &a&
  168.           .mend
  169. sladd     .segment a,b,c
  170.           asl &a&
  171.           rol &a&+1
  172.           #add &a&,&b&,&c&
  173.           .mend
  174. subsr     .segment a,b,c
  175.           #sub &a&,&b&,&c&
  176.           #shiftr &c&
  177.           .mend
  178. subsri    .segment a,b,c
  179.           #subi &a&,&b&,&c&
  180.           #shiftr &c&
  181.           .mend
  182. ashl      .segment a
  183.           asl &a&
  184.           rol &a&+1
  185.           .mend
  186. swap     .segment a,b
  187.          lda &a&
  188.          ldx &b&
  189.          sta &b&
  190.          stx &a&
  191.          .mend
  192. swapw    .segment a,b
  193.          #swap &a&,&b&
  194.          #swap &a&+1,&b&+1
  195.          .mend
  196. rotr     .segment a
  197.          lda &a&+1
  198.          asl
  199.          ror &a&+1
  200.          ror &a&
  201.          .mend
  202. t8       .segment a
  203.          lda &a&+1
  204.          tax
  205.          asl
  206.          ror &a&+1
  207.          ror &a&
  208.          txa
  209.          asl
  210.          ror &a&+1
  211.          ror &a&
  212.          txa
  213.          asl
  214.          ror &a&+1
  215.          ror &a&
  216.          .mend
  217.  
  218.   .byte $0f,$08,$0a,$00,$9e,$20,$32,$30
  219.   .byte $36,$35,$20,$20,$20,$00,$00,$00
  220.           #movei [anfang+offset],$5f
  221.           #movei [end1+offset],$5a
  222.           #movei end1,$58
  223.           jsr $a3bf
  224.           #movei [$c500+offset1],$5f
  225.           #movei [meldend+offset1],$5a
  226.           #movei meldend,$58
  227.           jsr $a3bf
  228.           #movei [$c800+offset2],$5f
  229.           #movei [dend+offset2],$5a
  230.           #movei dend,$58
  231.           jsr $a3bf
  232.           #movei [giga+offset3],$5f
  233.           #movei [gigaend+offset3],$5a
  234.           #movei gigaend,$58
  235.           jsr $a3bf
  236.           jsr initsub
  237.           jsr $e3bf ;basic init
  238.           lda $2b
  239.           ldy $2c
  240.           jsr $a408
  241.           lda #<meldung
  242.           ldy #>meldung
  243.           jsr $e42d ;meldung,new
  244.           jmp $a474 ;ready
  245.  
  246. offset    = *-$9000
  247. *         = $9000
  248.           .offs offset
  249.  
  250. anfang    ;
  251.  
  252. komma     lda 1
  253.           pha
  254.           lda #$37
  255.           sta 1
  256.           jsr $aefd
  257.           pla
  258.           sta 1
  259.           rts
  260.  
  261. memon     #movei nmi,$fffa   ;nmi-vek
  262.           lda #$34
  263.           sei
  264.           sta 1
  265.           rts
  266. nmi       jsr memoff
  267.           jmp $e37b      ;warmstart
  268. memoff    lda #$37
  269.           sta 1
  270.           cli
  271.           rts
  272.  
  273. g        .var 1
  274. k        .var 2
  275. gg       .var 3
  276. kg       .var 4
  277. comp     .macro ad,con,num,lab,weit
  278. c        .var &con&
  279.          ldx &ad&+1
  280. n        .var &num&
  281.          .if c .= 3
  282. n         .set n-1
  283. c         .set 1
  284.          .cend
  285.          .if c .= 4
  286. n         .set n+1
  287. c         .set 2
  288.          .cend
  289.          .ifpl n
  290.           .if c .= 1
  291.             bmi end
  292.            .if &weit&
  293.             beq l2
  294.             jmp &lab&
  295.            .else
  296.             bne &lab&
  297.            .cend
  298.           .else
  299.            .if &weit&
  300.             bpl l1
  301.             jmp &lab&
  302.            .else
  303.             bmi &lab&
  304.            .cend
  305. l1          bne end
  306.           .cend
  307.          .else
  308.           .if c .= 2
  309.            bpl end
  310.            inx
  311.            .if &weit&
  312.             bpl l2
  313.             jmp &lab&
  314.            .else
  315.             bmi &lab&
  316.            .cend
  317.           .else
  318.            .if &weit&
  319.             bmi l1
  320.             jmp &lab&
  321.            .else
  322.             bpl &lab&
  323.            .cend
  324. l1           inx
  325.            bmi end
  326.           .cend
  327.          .cend
  328. l2       ;
  329.          .if c .= 1
  330.           lda #n
  331.           cmp &ad&
  332.          .else
  333.           lda &ad&
  334.           cmp #n
  335.          .cend
  336.          .if not &weit&
  337.           bcc &lab&
  338.          .else
  339.           bcs end
  340.           jmp &lab&
  341.          .cend
  342. end      .mend
  343.  
  344.       ;anfang graf
  345.  
  346. clrscreen lda ba
  347.           sta zero+1
  348.           ldy #0
  349.           sty zero
  350.           ldx #31
  351.           lda #0
  352. lcr1      sta (zero),y
  353.           dey
  354.           bne lcr1
  355.           inc zero+1
  356.           dex
  357.           bne lcr1
  358.           ldy #64
  359. lcr2      sta (zero),y
  360.           dey
  361.           bpl lcr2
  362.           rts
  363.  
  364. gran      lda #$e0     ;anfangsseite
  365.           sta ba
  366.           lda #$10
  367.  
  368. farben    ldx #0
  369. farben1   sta $c000,x
  370.           sta $c100,x
  371.           sta $c200,x
  372.           sta $c300,x
  373.           sta $8c00,x
  374.           sta $8d00,x
  375.           sta $8e00,x
  376.           sta $8f00,x
  377.           dex
  378.           bne farben1
  379.           rts
  380.  
  381. graus     lda #27
  382.           sta vic+17
  383.           lda #200
  384.           sta vic+22
  385.           lda #21
  386.           sta vic+24
  387.           lda #3
  388.           sta $dd00
  389.           rts
  390.  
  391. anzeigen  lda #$37     ;i/o einblenden
  392.           sta 1
  393. lan2      lda vic+18   ;warten auf
  394.           bne lan2     ;rasterzeile=0
  395.           lda vic+17
  396.           and #$80
  397.           bne lan2
  398.           lda #$bb
  399.           sta vic+17
  400.           lda ba
  401.           cmp #$a0
  402.           bne lan1
  403.           lda #$e0     ;ba=$a0
  404.           sta ba
  405.           lda #$38
  406.           sta vic+24
  407.           lda #1
  408.           sta $dd00
  409.           lda #$34
  410.           sta 1
  411.           rts
  412. lan1      lda #$a0     ;ba=$e0
  413.           sta ba
  414.           lda #$08
  415.           sta vic+24
  416.           lda #0
  417.           sta $dd00
  418.           lda #$34
  419.           sta 1
  420.           rts
  421.  
  422. pktset    .segment
  423.           lda bi
  424.           ora (basis),y
  425.           sta (basis),y
  426.           .mend
  427.  
  428. plot      .blck
  429.           lda vony
  430.           lsr
  431.           lsr
  432.           lsr
  433.           tay
  434.           clc
  435.           lda vony
  436.           and #7
  437.           adc maltab,y
  438.           sta basis
  439.           lda vonx
  440.           and #$f8
  441.           adc basis
  442.           sta basis
  443.           lda maltab1,y
  444.           adc ba
  445.           adc vonx+1
  446.           sta basis+1
  447.           lda vonx
  448.           and #7
  449.           tay
  450.           lda hochtab,y
  451.           sta bi
  452.           ldy #0
  453.           #pktset
  454.           rts
  455. maltab    .byte $00,$40,$80,$c0
  456.           .byte $00,$40,$80,$c0
  457.           .byte $00,$40,$80,$c0
  458.           .byte $00,$40,$80,$c0
  459.           .byte $00,$40,$80,$c0
  460.           .byte $00,$40,$80,$c0
  461.           .byte $00
  462. maltab1   .byte $00,$01,$02,$03
  463.           .byte $05,$06,$07,$08
  464.           .byte $0a,$0b,$0c,$0d
  465.           .byte $0f,$10,$11,$12
  466.           .byte $14,$15,$16,$17
  467.           .byte $19,$1a,$1b,$1c
  468.           .byte $1e
  469. hochtab   .byte $80,$40,$20,$10
  470.           .byte $08,$04,$02,$01
  471.           .bend
  472.  
  473. xp        lsr bi
  474.           bcs lxp1
  475.           rts
  476. lxp1      ror bi
  477.           clc
  478.           lda basis
  479.           adc #8
  480.           sta basis
  481.           bcc lxp2
  482.           inc basis+1
  483. lxp2      rts
  484. yp        inc basis
  485.           bne lyp1
  486.           inc basis+1
  487. lyp1      lda basis
  488.           and #$07
  489.           beq lyp2
  490.           rts
  491. lyp2      #addi $138,basis,basis
  492.           rts
  493. xm        asl bi
  494.           bcs lxm1
  495.           rts
  496. lxm1      rol bi
  497.           sec
  498.           lda basis
  499.           sbc #8
  500.           sta basis
  501.           lda basis+1
  502.           sbc #0
  503.           sta basis+1
  504.           rts
  505. ym        lda basis
  506.           and #$7
  507.           beq lym1
  508.           dec basis
  509.           rts
  510. lym1      sec
  511.           lda basis
  512.           sbc #$39
  513.           sta basis
  514.           lda basis+1
  515.           sbc #1
  516.           sta basis+1
  517.           rts
  518.  
  519. cut       .blck
  520. lab1      jsr cutsub ;von
  521.           #swapw vonx,nachx
  522.           #swapw vony,nachy
  523.           jsr cutsub ;nach
  524.           rts
  525. noline    pla    ;keine linie ->
  526.           pla    ;zwei ruecksprung-
  527.           pla    ;adressen holen
  528.           pla
  529.           rts
  530. cutsub  #comp vony,k,100,l12,$ffff
  531.         #comp nachy,g,99,noline,0
  532. l13     #comp vonx,gg,$ff60,l15,0
  533.         #comp nachx,k,$ff60,noline,0
  534. l16       jsr doya
  535. l20     #comp fac,k,$ff9c,noline,0
  536.         #comp fac,g,99,l17,0
  537.           #move fac,vony
  538.           #movei $ff60,vonx
  539.           rts
  540. l17       jsr doxd
  541.         #comp fac,g,159,noline,$ffff
  542.           #move fac,vonx
  543.           #movei 99,vony
  544.           rts
  545. l15     #comp vonx,k,160,l18,$ffff
  546.         #comp nachx,k,160,l19,0
  547.           jmp noline
  548. l19       jsr doyc
  549. l25     #comp fac,k,$ff9c,noline,$ffff
  550.         #comp fac,g,99,l26,0
  551.           #move fac,vony
  552.           #movei 159,vonx
  553.           rts
  554. l26       jsr doxd
  555.         #comp fac,k,$ff60,noline,$ffff
  556.           #move fac,vonx
  557.           #movei 99,vony
  558.           rts
  559. l18       jsr doxd
  560.           #move fac,vonx
  561.           #movei 99,vony
  562.           rts
  563. l12     #comp vony,gg,$ff9c,l21,$ffff
  564.         #comp nachy,gg,$ff9c,l22,0
  565.           jmp noline
  566. l22     #comp vonx,gg,$ff60,l23,0
  567.         #comp nachx,gg,$ff60,l24,0
  568.           jmp noline
  569. l24       jsr doya
  570. l33     #comp fac,k,$ff9c,l34,0
  571.         #comp fac,g,99,noline,$ffff
  572.           #move fac,vony
  573.           #movei $ff60,vonx
  574.           rts
  575. l34       jsr doxb
  576.         #comp fac,g,159,noline,$ffff
  577.           #move fac,vonx
  578.           #movei $ff9c,vony
  579.           rts
  580. l23     #comp vonx,k,160,l27,0
  581.         #comp nachx,k,160,l28,0
  582.           jmp noline
  583. l28       jsr doyc
  584. l35    #comp fac,k,$ff9c,l36,0
  585.         #comp fac,g,99,noline,$ffff
  586.           #move fac,vony
  587.           #movei 159,vonx
  588.           rts
  589. l36       jsr doxb
  590.        #comp fac,k,$ff60,noline,$ffff
  591.           #move fac,vonx
  592.           #movei $ff9c,vony
  593.           rts
  594. l27       jsr doxb
  595.           #move fac,vonx
  596.           #movei $ff9c,vony
  597.           rts
  598. l21     #comp vonx,gg,$ff60,l29,0
  599.         #comp nachx,k,$ff60,noline,$ffff
  600. l30       jsr doya
  601.         #comp fac,k,$ff9c,noline,$ffff
  602.         #comp fac,g,99,noline,$ffff
  603.           #move fac,vony
  604.           #movei $ff60,vonx
  605.           rts
  606. l29     #comp vonx,g,159,l31,0
  607.           rts
  608. l31     #comp nachx,g,159,noline,$ffff
  609. l32       jsr doyc
  610.         #comp fac,k,$ff9c,noline,$ffff
  611.         #comp fac,g,99,noline,$ffff
  612.           #move fac,vony
  613.           #movei 159,vonx
  614.           rts
  615.  
  616. negarg    .macro
  617.           ldy #0
  618.           lda arg+1
  619.           bpl lab
  620.           sec
  621.           tya
  622.           sbc arg
  623.           sta arg
  624.           tya
  625.           sbc arg+1
  626.           sta arg+1
  627.           dey
  628.           tya
  629.           eor neg
  630.           sta neg   ;negativflag
  631. lab       .mend
  632.  
  633. mul       .blck ;fac hilf:=fac*arg
  634.           ldy #0
  635.           sty hilf
  636.           sty hilf+1
  637.           lda fac+1
  638.           sta neg   ;vorzeichen
  639.           bpl l1
  640.           sec       ;fac<0
  641.           tya
  642.           sbc fac
  643.           sta fac
  644.           tya
  645.           sbc fac+1
  646.           sta fac+1
  647. l1        #negarg
  648.           ldx #13
  649.           #ashl fac
  650.           #ashl fac
  651.           #ashl fac
  652.           bcc l4   ;unbedingt
  653. l3        asl hilf
  654.           rol hilf+1
  655. l4        rol fac
  656.           rol fac+1
  657.           bcc l2
  658.           #add hilf,arg,hilf
  659.           bcc l2
  660.           inc fac
  661.           bne l2
  662.           inc fac+1
  663. l2        dex
  664.           bne l3
  665.           rts
  666.           .bend
  667.  
  668. div       .blck ;fac:=(neg)fac hilf/arg
  669.           #negarg
  670.           lda fac+1
  671.           bne l1
  672.           lda fac
  673.           bne l1
  674.           lda hilf+1
  675.           cmp arg+1
  676.           bcs l1
  677.           lda hilf
  678.           cmp arg
  679.           bcs l1
  680.           sty fac+1  ;arg>hilf -> fac:=0
  681.           sty fac
  682.           rts
  683. l1        ldx #16
  684.           clc
  685. l6        rol hilf
  686.           rol hilf+1
  687.           rol fac
  688.           rol fac+1
  689.           sec
  690.           lda fac
  691.           sbc arg
  692.           tay
  693.           lda fac+1
  694.           sbc arg+1
  695.           bcc l5    ;unterlauf
  696.           sta fac+1
  697.           sty fac
  698. l5        dex
  699.           bne l6
  700.           rol hilf
  701.           rol hilf+1
  702.           lda neg   ;vorzeichen
  703.           bpl l7    ;positiv
  704.           #subi 0,hilf,fac ;negativ
  705.           rts
  706. l7        #move hilf,fac   ;positiv
  707.           rts
  708.           .bend
  709.  
  710. doya      #subi $ff60,vonx,fac
  711.           #sub nachy,vony,arg
  712.           jsr mul
  713.           #sub nachx,vonx,arg
  714.           jsr div
  715.           #add fac,vony,fac
  716.           rts
  717. doxb      #subi $ff9c,vony,fac
  718.           #sub nachx,vonx,arg
  719.           jsr mul
  720.           #sub nachy,vony,arg
  721.           jsr div
  722.           #add fac,vonx,fac
  723.           rts
  724. doyc      #subi 159,vonx,fac
  725.           #sub nachy,vony,arg
  726.           jsr mul
  727.           #sub nachx,vonx,arg
  728.           jsr div
  729.           #add fac,vony,fac
  730.           rts
  731. doxd      #subi 99,vony,fac
  732.           #sub nachx,vonx,arg
  733.           jsr mul
  734.           #sub nachy,vony,arg
  735.           jsr div
  736.           #add fac,vonx,fac
  737.           rts
  738.           .bend
  739.  
  740. vek       .blck
  741.           #t8 vonx
  742.           #t8 vony
  743.           #t8 nachx
  744.           #t8 nachy
  745.           jsr cut
  746.           #addi 160,vonx,vonx  ;mitte
  747.           #addi 160,nachx,nachx
  748.           #subi 99,vony,vony
  749.           #subi 99,nachy,nachy
  750. l15       lda nachx+1
  751.           cmp vonx+1
  752.           bcc l4
  753.           bne l5
  754.           lda nachx
  755.           cmp vonx
  756.           bne l21
  757.           lda vony
  758.           cmp nachy
  759.           bne l21
  760.           jmp plot  ;von=nach
  761. l21       bcs l5
  762. l4        lda vonx  ;vonx > nachx
  763.           #swapw vonx,nachx
  764.           #swap vony,nachy
  765. l5        jsr plot
  766.           #sub nachx,vonx,dx
  767.           sec         ;dy:=nachy-vony
  768.           lda nachy
  769.           sbc vony
  770.           sta dy
  771.           bcc l6    ;vony>nachy
  772.           lda dx+1
  773.           bne l7    ;dx>dy
  774.           lda dx
  775.           cmp dy
  776.           bcc l8    ;dy>dx
  777. l7        #movei yp,eventl  ;dx>dy
  778.           #movei xp,immer
  779.           ldx #0      ;flag algo1
  780.           jmp l9
  781. l8        #movei xp,eventl
  782.           #movei yp,immer
  783.           ldx #1      ;flag algo2
  784.           jmp l9
  785. l6        sec
  786.           lda #0      ;neg dy
  787.           sbc dy
  788.           sta dy
  789.           lda dx+1
  790.           bne l10     ;dx>dy
  791.           lda dx
  792.           cmp dy
  793.           bcc l11     ;dy>dx
  794. l10       #movei ym,eventl ;dx>dy
  795.           #movei xp,immer
  796.           ldx #0      ;flag algo1
  797.           jmp l9
  798. l11       #movei xp,eventl  ;dy>dx
  799.           #movei ym,immer
  800.           ldx #1      ;flag algo2
  801. l9        ldy #0   ;fuer pktset loeschen
  802.           lda dx+1
  803.           beq l16   ;dx high=0
  804.           lda dx    ;linie halbieren
  805.           sec
  806.           ror
  807.           sta nachx
  808.           sta dx
  809.           bcc l19
  810.           inc nachx
  811. l19       lda dy
  812.           lsr
  813.           sta nachy
  814.           sta dy
  815.           bcc l20
  816.           inc nachy
  817. l20       jsr l16    ;erste haelfte
  818.           lda nachx
  819.           sta dx
  820.           lda nachy
  821.           sta dy
  822. l16       txa        ;flag holen
  823.           bne algo2
  824.           .bend
  825. algo1     .blck
  826.           lda dx
  827.           sta sp
  828.           lsr
  829.           sta ds
  830. l1        clc
  831.           lda ds
  832.           adc dy
  833.           sta ds
  834.           bcs l22
  835.           cmp dx
  836.           bcc l2
  837. l22       lda ds
  838.           sbc dx
  839.           sta ds
  840.           jsr l13
  841.           #pktset
  842. l2        jsr l14
  843. l3        #pktset
  844.           dec sp
  845.           bne l1
  846.           rts
  847.           .bend
  848. algo2     .blck
  849.           lda dy
  850.           sta sp
  851.           lsr
  852.           sta ds
  853. l17       clc
  854.           lda ds
  855.           adc dx
  856.           sta ds
  857.           bcs l23
  858.           cmp dy
  859.           bcc l18
  860. l23       lda ds
  861.           sbc dy
  862.           sta ds
  863.           jsr l13
  864.           #pktset
  865. l18       jsr l14
  866.           #pktset
  867.           dec sp
  868.           bne l17
  869.           rts
  870.           .bend
  871.  
  872. l13       jmp (eventl)
  873. l14       jmp (immer)
  874.  
  875.       ;anfang dreh
  876.  
  877. muldreh   .blck       ;fac:=fac*arg
  878.           ldy #0      ; fac:koordinate
  879.           sty hilf    ; arg:sin v cos
  880.           sty hilf+1
  881.           lda fac+1
  882.           sta hilf+2
  883.           bpl l6      ;fac positiv
  884.           sec
  885.           tya
  886.           sbc fac
  887.           sta fac
  888.           tya
  889.           sbc fac+1
  890.           sta fac+1
  891. l6        lda arg+2
  892.           lsr
  893.           bcs l4      ;arg=1
  894.           ldx #16
  895.           clc
  896.           jmp l5
  897. l2        asl hilf
  898.           rol hilf+1
  899. l5        rol fac
  900.           rol fac+1
  901.           bcc l1
  902.           clc
  903.           lda hilf
  904.           adc arg
  905.           sta hilf
  906.           lda hilf+1
  907.           adc arg+1
  908.           sta hilf+1
  909.           bcc l1
  910.           inc fac
  911.           bne l1
  912.           inc fac+1
  913. l1        dex
  914.           bne l2
  915. l4        lda arg+2
  916.           eor hilf+2
  917.           bpl l3
  918.           sec
  919.           tya
  920.           sbc fac
  921.           sta fac
  922.           tya
  923.           sbc fac+1
  924.           sta fac+1
  925. l3        rts
  926.           .bend
  927.  
  928. divdreh   .blck       ;hilf:=fac/arg
  929.           ldy #0      ;hilf:sin v cos
  930.           sty hilf    ;fac,arg:positiv
  931.           sty hilf+1  ;arg>=fac
  932.           sty hilf+2
  933.           lda fac+1
  934.           cmp arg+1
  935.           bne l1
  936.           lda fac
  937.           cmp arg
  938.           bne l1
  939.           inc hilf+2 ;fac=arg
  940.           rts
  941. l1        ldx #16
  942.           lda arg+1
  943.           bpl l2
  944.           lsr arg+1
  945.           ror arg
  946.           jmp l8
  947. l2        asl fac
  948.           rol fac+1
  949.           jmp l8
  950. l5        rol hilf
  951.           rol hilf+1
  952.           rol fac
  953.           rol fac+1
  954. l8        sec
  955.           lda fac
  956.           sbc arg
  957.           tay
  958.           lda fac+1
  959.           sbc arg+1
  960.           bcc l4
  961.           sta fac+1
  962.           sty fac
  963. l4        dex
  964.           bne l5
  965.           rol hilf
  966.           rol hilf+1
  967.           rts
  968.           .bend
  969.  
  970. cos       .blck        ;fac:=cos(fac)
  971.           lda fac+1
  972.           lsr
  973.           bcs l1
  974.           lsr
  975.           bcs l2
  976.           ldx fac      ;i
  977. l5        lda costab,x
  978. l3        sta fac+2
  979.           lda costab2,x
  980.           sta fac
  981.           lda costab3,x
  982.           sta fac+1
  983.           rts
  984. l1        lsr
  985.           bcs l4
  986.           sec          ;ii
  987.           lda #0
  988.           sbc fac
  989.           bne l6
  990. l7        sta fac
  991.           sta fac+1
  992.           sta fac+2
  993.           rts
  994. l6        tax
  995.           lda costab,x
  996.           ora #$80
  997.           jmp l3
  998. l2        ldx fac       ;iii
  999.           lda costab,x
  1000.           ora #$80
  1001.           jmp l3
  1002. l4        lda #0        ;iv
  1003.           sbc fac
  1004.           tax
  1005.           beq l7
  1006.           jmp l5
  1007.           .bend
  1008. sin       .blck      ;fac:=sin(fac)
  1009.           sec        ;fac:=fac-90 grad
  1010.           lda fac+1
  1011.           sbc #1
  1012.           sta fac+1
  1013.           jmp cos
  1014.           .bend
  1015.  
  1016. zerr      .blck
  1017.           lda fac+1  ;fac+=fac/4
  1018.           bmi l3
  1019. l1        lsr
  1020.           tay
  1021.           lda fac
  1022.           ror
  1023.           tax
  1024.           tya
  1025.           lsr
  1026. l2        tay
  1027.           txa
  1028.           ror
  1029.           clc
  1030.           adc fac
  1031.           sta fac
  1032.           tya
  1033.           adc fac+1
  1034.           sta fac+1
  1035.           rts
  1036. l3        sec
  1037.           ror
  1038.           tay
  1039.           lda fac
  1040.           ror
  1041.           tax
  1042.           tya
  1043.           sec
  1044.           ror
  1045.           jmp l2
  1046.           .bend
  1047.  
  1048. perspsub  .blck
  1049.           lda perspflg
  1050.           bne fluchtp
  1051. parallel  #movevin pvek,6,fac  ;fac:=xd
  1052.           jsr zerr
  1053.           #movenin fac,12,pvek ;xdp:=fac
  1054.           #movevin pvek,8,fac  ;fac:=yd
  1055.           #movenin fac,14,pvek ;ydp:=fac
  1056.           rts
  1057. fluchtp   ldy #10  ;arg:=zd-aug
  1058.           sec
  1059.           lda (pvek),y
  1060.           sbc aug
  1061.           sta arg
  1062.           iny
  1063.           lda (pvek),y
  1064.           sbc aug+1
  1065.           sta arg+1
  1066.           #move as,fac ;fac:=as
  1067.           jsr divdreh
  1068.           #movew hilf,arg ;arg:=fac/arg
  1069.           #movevin pvek,6,fac  ;fac:=xd
  1070.           jsr muldreh     ;fac:=fac*arg
  1071.           jsr zerr
  1072.           #movenin fac,12,pvek ;xdp:=fac
  1073.           #movevin pvek,8,fac  ;fac:=yd
  1074.           jsr muldreh  ;yd:=fac*arg
  1075.           #movenin fac,14,pvek ;ydp:=fac
  1076.           rts
  1077.           .bend
  1078.  
  1079. zw1       = vonx
  1080. zw2       = vony
  1081. zw3       = nachx
  1082. zwx       = nachy
  1083. zwy       = lvek
  1084. zwz       = $6e
  1085. addob     .segment a,b,c
  1086.           ldy #&a&
  1087.           clc
  1088.           lda (pvek),y
  1089.           adc &b&
  1090.           sta &c&
  1091.           iny
  1092.           lda (pvek),y
  1093.           adc &b&+1
  1094.           sta &c&+1
  1095.           .mend
  1096. drehen    .blck
  1097.           #subi 0,wa,fac ;sa
  1098.           jsr sin
  1099.           #movew fac,sa
  1100.           #move wb,fac   ;sb
  1101.           jsr sin
  1102.           #movew fac,sb
  1103.           #subi 0,wa,fac ;ca
  1104.           jsr cos
  1105.           #movew fac,ca
  1106.           #move wb,fac   ;cb
  1107.           jsr cos
  1108.           #movew fac,cb
  1109.           #movei 0,$14
  1110.           jsr pumrech
  1111. l1        ldy #1
  1112.           lda (pvek),y
  1113.           cmp #$80
  1114.           bne l8
  1115.           jmp inpvek     ;punkt unbelegt
  1116. l8        #addob 0,x,zwx
  1117.           #addob 2,y,zwy
  1118.           #addob 4,z,zwz
  1119.           #movew ca,arg
  1120.           #move zwx,fac
  1121.           jsr muldreh
  1122.           #move fac,zw1
  1123.           #move zwz,fac
  1124.           jsr muldreh
  1125.           #move fac,zw2
  1126.           #movew sa,arg
  1127.           #move zwz,fac
  1128.           jsr muldreh
  1129.           ldy #6           ;xd
  1130.           lda fac
  1131.           adc zw1
  1132.           sta (pvek),y
  1133.           iny
  1134.           lda fac+1
  1135.           adc zw1+1
  1136.           sta (pvek),y
  1137.           #move zwx,fac
  1138.           jsr muldreh
  1139.           sec
  1140.           lda zw2
  1141.           sbc fac
  1142.           sta fac
  1143.           sta zw3
  1144.           lda zw2+1
  1145.           sbc fac+1
  1146.           sta fac+1
  1147.           sta zw3+1
  1148.           #movew cb,arg
  1149.           jsr muldreh
  1150.           #move fac,zw1
  1151.           #move zwy,fac
  1152.           jsr muldreh
  1153.           #move fac,zw2
  1154.           #movew sb,arg
  1155.           #move zwy,fac
  1156.           jsr muldreh
  1157.           clc
  1158.           ldy #10        ;zd
  1159.           lda zw1
  1160.           adc fac
  1161.           sta (pvek),y
  1162.           iny
  1163.           lda zw1+1
  1164.           adc fac+1
  1165.           sta (pvek),y
  1166.           #move zw3,fac
  1167.           jsr muldreh
  1168.           sec
  1169.           ldy #8          ;yd
  1170.           lda zw2
  1171.           sbc fac
  1172.           sta (pvek),y
  1173.           iny
  1174.           lda zw2+1
  1175.           sbc fac+1
  1176.           sta (pvek),y
  1177.           ldy #10      ;zd-s
  1178.           lda (pvek),y
  1179.           cmp s
  1180.           iny
  1181.           lda (pvek),y
  1182.           sbc s+1
  1183.           bvs l5
  1184.           bmi inpvek   ;zd<s
  1185.           bpl l6
  1186. l5        bpl inpvek   ;zd<s
  1187. l6        jsr perspsub
  1188. inpvek    clc
  1189.           lda pvek
  1190.           adc #16
  1191.           sta pvek
  1192.           bcc l2
  1193.           inc pvek+1
  1194. l2        lda pvek+1
  1195.           cmp #$87
  1196.           bne l3
  1197.           lda #>dend+1
  1198.           sta pvek+1
  1199. l3        cmp lanf+1
  1200.           bne l7
  1201.           lda pvek
  1202.           cmp lanf
  1203.           beq l4
  1204. l7        jmp l1
  1205. l4        rts
  1206.           .bend
  1207.  
  1208. bild      .blck        ;erzeugt das bild
  1209.           #move lmax,$14
  1210.           jsr lumrech
  1211. l1        #movevin lvek,0,pvek
  1212.           cmp #$ff
  1213.           bne l12
  1214.           jmp delvek     ;nicht belegt
  1215. l12       #movevin pvek,12,vonx
  1216.           #movevin pvek,14,vony
  1217.           #movevin pvek,10,vonz
  1218.           #movevin lvek,2,$14
  1219.           ldy #1
  1220.           lda (pvek),y
  1221.           cmp #$80       ;belegt?
  1222.           bne l17
  1223. l18       jmp notbel     ;nicht belegt
  1224. l17       lda ($14),y
  1225.           cmp #$80
  1226.           beq l18
  1227.           #movevin $14,12,nachx
  1228.           #movevin $14,14,nachy
  1229.           #movevin $14,10,nachz
  1230.           lda vonz
  1231.           cmp s
  1232.           lda vonz+1
  1233.           sbc s+1
  1234.           bvs l2
  1235.           bmi l3
  1236.           bpl l4
  1237. l2        bpl l3
  1238. l4        jmp l5            ;vonz>=s
  1239. l3        lda nachz         ;vonz<s
  1240.           cmp s
  1241.           lda nachz+1
  1242.           sbc s+1
  1243.           bvs l6
  1244.           bmi l7
  1245.           bpl l8
  1246. l6        bmi l8
  1247. l7        jmp delvek        ;nachz<s
  1248. l8        #movevin pvek,6,vonx ;nachz>=s
  1249.           #movevin pvek,8,vony
  1250.           #sub s,vonz,fac
  1251.           #sub nachz,vonz,arg
  1252.           jsr divdreh    ;hilf:=fac/arg
  1253.           #movew hilf,arg
  1254.           #movevin $14,6,hilf  ;nachx
  1255.           #sub hilf,vonx,fac
  1256.           jsr d2
  1257.           jsr muldreh
  1258.           asl fac
  1259.           rol fac+1
  1260.           #add vonx,fac,fac
  1261.           jsr zerr
  1262.           #move fac,vonx
  1263.           #movevin $14,8,hilf  ;nachy
  1264.           #sub hilf,vony,fac
  1265.           jsr d2
  1266.           jsr muldreh
  1267.           asl fac
  1268.           rol fac+1
  1269.           #add vony,fac,vony
  1270.           jmp lab1
  1271. l5        #sub s,nachz,fac
  1272.           bvs l14
  1273.           bmi l16   ;nachz>s
  1274.           bpl l15
  1275. l14       bmi l15
  1276. l16       jmp lab1  ;nachz>s
  1277. l15       #movevin $14,6,nachx
  1278.           #movevin $14,8,nachy
  1279.           #sub vonz,nachz,arg
  1280.           jsr divdreh
  1281.           #movew hilf,arg
  1282.           #movevin pvek,6,hilf  ;vonx
  1283.           #sub hilf,nachx,fac
  1284.           jsr d2
  1285.           jsr muldreh
  1286.           asl fac
  1287.           rol fac+1
  1288.           #add nachx,fac,fac
  1289.           jsr zerr
  1290.           #move fac,nachx
  1291.           #movevin pvek,8,hilf  ;vony
  1292.           #sub hilf,nachy,fac
  1293.           jsr d2
  1294.           jsr muldreh
  1295.           asl fac
  1296.           rol fac+1
  1297.           #add nachy,fac,nachy
  1298. lab1      jsr vek
  1299. delvek    sec
  1300.           lda lvek
  1301.           sbc #4
  1302.           sta lvek
  1303.           bcs l11
  1304.           dec lvek+1
  1305. l11       lda lvek+1
  1306.           cmp #>dend
  1307.           bne l9     ;lvek>=dend+1
  1308.           lda #$86
  1309.           sta lvek+1
  1310. l9        lda lvek+1
  1311.           cmp lanf+1
  1312.           beq l13
  1313.           bcs l10    ;lvek>lanf
  1314. l19       rts
  1315. l13       lda lvek
  1316.           cmp lanf
  1317.           bcc l19    ;lvek<lanf
  1318. l10       jmp l1
  1319.  
  1320. d2        .blck
  1321.           clc
  1322.           bvs l1
  1323.           bpl l3
  1324.           bmi l2
  1325. l1        bmi l3
  1326. l2        sec
  1327. l3        ror fac+1
  1328.           ror fac
  1329.           rts
  1330.           .bend
  1331.  
  1332.           .bend
  1333.  
  1334.           .file source.teil2
  1335.  
  1336.  
  1337.