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

  1.  
  2. init      jsr initsub
  3. clr       #move $37,$33  ;clr
  4.           lda $2d
  5.           sta $2f
  6.           sta $31
  7.           lda $2e
  8.           sta $30
  9.           sta $32
  10.           rts
  11. initsub   .blck
  12.           jsr gran
  13.           ldx #$69      ;lineflag:=0
  14.           stx algo1+34
  15.           stx algo2+34
  16.           ldx #1
  17.           stx costab
  18.           lda #0
  19.           ldy #$ff
  20. l1        sta costab,y
  21.           dey
  22.           bne l1
  23.           ldx #[vartabend-vartab]
  24. l2        lda vartab,x  ;variablen auf
  25.           sta vb,x      :defaultwerte
  26.           dex
  27.           bpl l2
  28.           #movei $8700,$283  ;speicher-
  29.                              ;ende
  30.           #movei befehle,$308
  31.           rts
  32.           .bend
  33. warte     jsr ende
  34.           jmp $a483
  35. warmstart jsr ende
  36.           jmp $e38b  ;weiter warmstart
  37. ende      lda #$37   ;memoff
  38.           sta 1
  39.           lda #$ff   ;ausgang
  40.           sta $dc02  ;port a
  41.           cli
  42.                  ;alter outputvektor :
  43.           #movei $f1ca,$326
  44.                  ;alter interpr.-vek.:
  45.           #movei befehle,$308
  46.                  ;alter warmstart:
  47.           #movei $e38b,$300
  48.                  ;alte warteschleife:
  49.           #movei $a483,$302
  50.                  ;alter nmi-vektor:
  51.           #movei $fe47,$318
  52.           jsr graus
  53.           lda #0
  54.           sta $c6    ;puffer leer
  55.           lda puff
  56.           sta $68
  57.           rts
  58.  
  59. btest     .blck
  60.           jsr xtest
  61.           bcs error
  62.           jsr ytest
  63.           bcs error
  64.           jsr ztest
  65.           bcs error
  66.           rts
  67. error     lda #<text
  68.           ldy #>text
  69.           jmp fehler
  70. text      .byte 'verschiebung zu gross'
  71.           .byte 0
  72.           .bend
  73.  
  74. dreh      lda dimflag
  75.           bne hschleif
  76.           jmp dimerror
  77. hschleif  .blck
  78.                    ;neuer outputvektor:
  79.           #movei output,$326
  80.                    ;neuer interpr.vek.:
  81.           #movei l6,$308
  82.                    ;neuer warmstart:
  83.           #movei warmstart,$300
  84.                    ;neue warteschleife:
  85.           #movei warte,$302
  86.                    ;neuer nmi-vektor:
  87.           #movei nmi,$318
  88. l1        jsr memon
  89.           lda $68      ;fac retten
  90.           sta puff
  91.           jsr clrscreen
  92.           jsr drehen
  93.           jsr bild
  94.           jsr anzeigen
  95.           jsr joy
  96.           lda puff
  97.           sta $68      ;wiederherstellen
  98.           lda #0
  99.           sta $c6      ;puffer leer
  100.           jsr $ea87    ;tastaturabfrage
  101.           lda autoflg
  102.           beq l1
  103.           jsr memoff
  104.           rts      ;zur interpreterschl.
  105. l6        jsr $0073
  106.           bne l2        ;kein zeilenende
  107. l3        jmp $a7ae
  108. l2        cmp #'\'
  109.           beq l7
  110.           jmp befehlesub ;weiter
  111. l7        jsr l1
  112.           jmp l6
  113.           .bend
  114.  
  115. output    .blck
  116.           pha
  117.           lda $9a
  118.           cmp #3
  119.           bne l1
  120.           lda #7
  121.           sta $dd00
  122.           lda #$9b
  123.           sta $d011
  124.           lda #$8
  125.           sta $d016
  126.           lda #$14
  127.           sta $d018
  128.           pla
  129.           jmp $e716
  130. l1        jmp $f1d5
  131.           .bend
  132.  
  133. out       .segment a
  134.           lda &a&+1
  135.           ldx &a&
  136.           jsr $bdcd
  137.           jsr $ab3b
  138.           .mend
  139.  
  140. getvarsub .blck       ;holt variable
  141.           lda 1       ;     nach x/y
  142.           pha
  143.           lda #$37    ;memoff
  144.           sta 1
  145.           jsr frmnum  ;nach a/y
  146.           clc
  147.           lda $61
  148.           adc #3      ;*8
  149.           sta $61
  150.           cmp #3
  151.           bcc error   ;overflow
  152.           jsr $b1aa   ;integer
  153.           sta $15
  154.           sty $14
  155.           tax         ;absolutwert
  156.           bpl l1
  157.           sec
  158.           lda #0
  159.           sbc $14
  160.           tay
  161.           lda #0
  162.           sbc $15
  163. l1        cmp #$49    ;>$49e6 -> error
  164.           bcc l2
  165.           bne error
  166. l3        cpy #$e7
  167.           bcc l2
  168. error     jmp illegal
  169. l2        ldx $14
  170.           ldy $15
  171.           pla         ;alter speicher
  172.           sta 1
  173.           rts
  174.           .bend
  175. end1      ;
  176.  
  177. costab  = $c400
  178.  
  179. offset1 = *+offset-$c500
  180. *       = $c500
  181.         .offs offset1
  182.  
  183. costab2 ;
  184.  .byte $00,$ff,$fb,$f5,$ec,$e1,$d4,$c4
  185.  .byte $b1,$9c,$85,$6b,$4e,$30,$0e,$eb
  186.  .byte $c4,$9c,$71,$43,$13,$e1,$ac,$74
  187.  .byte $3b,$fe,$c0,$7f,$3b,$f5,$ad,$62
  188.  .byte $15,$c5,$73,$1f,$c8,$6e,$13,$b4
  189.  .byte $54,$f1,$8c,$24,$ba,$4e,$df,$6e
  190.  .byte $fa,$84,$0c,$91,$14,$95,$13,$8f
  191.  .byte $09,$80,$f5,$68,$d9,$47,$b3,$1c
  192.  .byte $83,$e8,$4b,$ab,$0a,$66,$bf,$17
  193.  .byte $6c,$bf,$10,$5e,$aa,$f4,$3c,$82
  194.  .byte $c6,$07,$46,$83,$be,$f7,$2d,$62
  195.  .byte $94,$c4,$f2,$1e,$48,$70,$96,$ba
  196.  .byte $db,$fb,$18,$34,$4d,$65,$7a,$8e
  197.  .byte $9f,$ae,$bc,$c7,$d1,$d9,$de,$e2
  198.  .byte $e4,$e4,$e2,$de,$d8,$d1,$c7,$bc
  199.  .byte $af,$a0,$8f,$7d,$68,$52,$3a,$20
  200.  .byte $05,$e8,$c9,$a8,$86,$62,$3c,$14
  201.  .byte $eb,$c1,$94,$66,$36,$05,$d2,$9e
  202.  .byte $68,$30,$f7,$bc,$80,$42,$03,$c2
  203.  .byte $80,$3c,$f7,$b0,$68,$1f,$d4,$88
  204.  .byte $3a,$eb,$9a,$49,$f6,$a1,$4c,$f5
  205.  .byte $9c,$43,$e8,$8c,$2f,$d0,$70,$10
  206.  .byte $ad,$4a,$e6,$80,$1a,$b2,$49,$df
  207.  .byte $74,$08,$9b,$2d,$be,$4e,$dd,$6b
  208.  .byte $f8,$84,$0f,$99,$22,$aa,$32,$b9
  209.  .byte $3e,$c3,$48,$cb,$4d,$cf,$50,$d1
  210.  .byte $50,$cf,$4d,$cb,$47,$c3,$3f,$ba
  211.  .byte $34,$ae,$27,$9f,$17,$8e,$05,$7c
  212.  .byte $f1,$67,$dc,$50,$c4,$38,$ab,$1e
  213.  .byte $90,$02,$74,$e5,$56,$c7,$38,$a8
  214.  .byte $18,$87,$f7,$66,$d5,$44,$b3,$21
  215.  .byte $90,$fe,$6c,$da,$48,$b6,$24,$92
  216. costab3 ;
  217.  .byte $00,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  218.  .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe
  219.  .byte $fe,$fe,$fe,$fe,$fe,$fd,$fd,$fd
  220.  .byte $fd,$fc,$fc,$fc,$fc,$fb,$fb,$fb
  221.  .byte $fb,$fa,$fa,$fa,$f9,$f9,$f9,$f8
  222.  .byte $f8,$f7,$f7,$f7,$f6,$f6,$f5,$f5
  223.  .byte $f4,$f4,$f4,$f3,$f3,$f2,$f2,$f1
  224.  .byte $f1,$f0,$ef,$ef,$ee,$ee,$ed,$ed
  225.  .byte $ec,$eb,$eb,$ea,$ea,$e9,$e8,$e8
  226.  .byte $e7,$e6,$e6,$e5,$e4,$e3,$e3,$e2
  227.  .byte $e1,$e1,$e0,$df,$de,$dd,$dd,$dc
  228.  .byte $db,$da,$d9,$d9,$d8,$d7,$d6,$d5
  229.  .byte $d4,$d3,$d3,$d2,$d1,$d0,$cf,$ce
  230.  .byte $cd,$cc,$cb,$ca,$c9,$c8,$c7,$c6
  231.  .byte $c5,$c4,$c3,$c2,$c1,$c0,$bf,$be
  232.  .byte $bd,$bc,$bb,$ba,$b9,$b8,$b7,$b6
  233.  .byte $b5,$b3,$b2,$b1,$b0,$af,$ae,$ad
  234.  .byte $ab,$aa,$a9,$a8,$a7,$a6,$a4,$a3
  235.  .byte $a2,$a1,$9f,$9e,$9d,$9c,$9b,$99
  236.  .byte $98,$97,$95,$94,$93,$92,$90,$8f
  237.  .byte $8e,$8c,$8b,$8a,$88,$87,$86,$84
  238.  .byte $83,$82,$80,$7f,$7e,$7c,$7b,$7a
  239.  .byte $78,$77,$75,$74,$73,$71,$70,$6e
  240.  .byte $6d,$6c,$6a,$69,$67,$66,$64,$63
  241.  .byte $61,$60,$5f,$5d,$5c,$5a,$59,$57
  242.  .byte $56,$54,$53,$51,$50,$4e,$4d,$4b
  243.  .byte $4a,$48,$47,$45,$44,$42,$41,$3f
  244.  .byte $3e,$3c,$3b,$39,$38,$36,$35,$33
  245.  .byte $31,$30,$2e,$2d,$2b,$2a,$28,$27
  246.  .byte $25,$24,$22,$20,$1f,$1d,$1c,$1a
  247.  .byte $19,$17,$15,$14,$12,$11,$0f,$0e
  248.  .byte $0c,$0a,$09,$07,$06,$04,$03,$01
  249. cosend    ;
  250.  
  251. vartab    .word 0      ;zw
  252.           .byte $e0,0,0;ba,bi
  253.           .word 0,0    ;immer,eventl
  254.           .word $cf00  ;lanf
  255.           .word 0,0,0  ;wa,wb
  256.           .byte 5,0,0  ;dwa
  257.           .byte 5,0,0  ;dwb
  258.           .word 0,0,0  ;x,y,z
  259.           .word 80,80,80;delx,dely,delz
  260.           .byte 0      ;dimflag
  261.           .byte 0      ;autoflg
  262.           .byte 0      ;joyflg
  263.           .byte 0      ;perspflg
  264.           .word -[1000*16];aug
  265.           .word -[500*16];s
  266.           .word 500*16 ;as
  267.           .word $6000  ;xmin
  268.           .word $6000  ;ymin
  269.           .word $6000  ;zmin
  270.           .word $a000  ;xmax
  271.           .word $a000  ;ymax
  272.           .word $a000  ;zmax
  273. vartabend ;
  274.  
  275. meldung   .byte $93,$0d
  276.           .byte '  **** '
  277.           .byte 'dreher  von markus'
  278.           .byte ' olbrich ****'
  279.           .byte $0d,$0d
  280.           .byte ' 64k ram system  ',0
  281. meldend   ;
  282.  
  283. offset2   = *+offset1-$c800
  284. *         = $c800
  285.           .offs offset2
  286.  
  287. getnum    lda 1       ;holt 16bit wert
  288.           pha
  289.           lda #$37    ;memoff
  290.           sta 1
  291.           jsr frmnum  ;nach $14/$15
  292.           jsr $b1aa   ;integer
  293.           sta $15
  294.           sty $14
  295.           pla
  296.           sta 1       ;alter speicher
  297.           rts
  298. getvar    .segment a  ;holt variable
  299.           jsr getvarsub
  300.           stx &a&
  301.           sty &a&+1
  302.           .mend
  303. getpar    .macro par  ;holt parameter
  304.           jsr getparsub  ;nach &par&
  305.           sta &par&
  306.           .mend
  307. getparsub .blck
  308.           jsr getnum
  309.           lda $15
  310.           beq l1
  311. error     jmp illegal
  312. l1        lda $14
  313.           and #1
  314.           cmp $14
  315.           bne error
  316.           rts
  317.           .bend
  318.  
  319. ptest     .blck
  320.           lda pmax+1
  321.           cmp $15
  322.           bcc l2 ;>pmax
  323.           bne l3
  324.           lda pmax
  325.           cmp $14
  326.           bcs l3 ;<=pmax
  327. l2        jmp illegal
  328. l3        rts
  329.           .bend
  330. pumrech   .blck     ;in :nummer $14/$15
  331.           jsr ptest ;out:pvek
  332.           #move $14,pvek
  333.           #ashl pvek    ;*16
  334.           #ashl pvek
  335.           #ashl pvek
  336.           #ashl pvek
  337.           #add panf,pvek,pvek
  338.           ldx #$87
  339.           cpx panf+1
  340.           bcc l1    ;>$87
  341.           cmp #$87
  342.           bcc l1    ;<$87
  343.           clc
  344.           lda pvek+1
  345.           adc #>dend+1-$87
  346.           sta pvek+1
  347. l1        rts
  348.           .bend
  349.  
  350. ltest     .blck
  351.           lda lmax+1
  352.           cmp $15
  353.           bcc l2  ;>lmax
  354.           bne l3
  355.           lda lmax
  356.           cmp $14
  357.           bcs l3
  358. l2        jmp illegal
  359. l3        rts
  360.           .bend
  361. lumrech   .blck     ;in :nummer $14/$15
  362.           jsr ltest ;out:lvek
  363.           #move $14,lvek
  364.           #ashl lvek ;*4
  365.           #ashl lvek
  366.           #add lanf,lvek,lvek
  367.           ldx #$87
  368.           cpx lanf+1
  369.           bcc l1  ;>$87
  370.           cmp #$87
  371.           bcc l1  ;<$87
  372.           clc
  373.           lda lvek+1
  374.           adc #>dend+1-$87
  375.           sta lvek+1
  376. l1        rts
  377.           .bend
  378.  
  379.       ;anfang par
  380.  
  381. obj       .blck      ;obj pmax,lmax
  382.           jsr getnum
  383.           #move $14,pmax
  384.           cmp #$0d
  385.           bcc l1     ;<$0d00
  386. l2        jmp $a435  ;out of memory
  387. l1        jsr komma
  388.           jsr getnum
  389.           #move $14,lmax
  390.           cmp #$27
  391.           bcs l2     ;>=$2700
  392.           .bend
  393. dim2      .blck
  394.           lsr $15    ;/4
  395.           ror $14
  396.           lsr $15
  397.           ror $14
  398. l5        #add $14,pmax,$14
  399.           #addi 3,$14,$14
  400.           #ashl $14  ;*16
  401.           #ashl $14
  402.           #ashl $14
  403.           #ashl $14
  404.           lda #$e0->dend-2
  405.           cmp $15
  406.           bcc l10  ;$14>$e0-dend-2
  407.           #movei $8700,$14
  408.           jmp l6
  409. l10       sec
  410.           lda #[$87+[$e0-[>dend+3]]]
  411.           sbc $15
  412.           sta $15
  413.           bcc l8   ;unterlauf
  414. l6        lda $2e  ;cmp varanf
  415.           cmp $15
  416.           bcc l7
  417.           bne l8
  418.           lda $2d
  419.           cmp $14
  420.           bcc l7
  421. l8        jmp $a435 ;<=varanf -> error
  422. l7        #move $14,panf
  423.           #move pmax,$14
  424.           inc $14
  425.           bne l9
  426.           inc $15
  427. l9        jsr pumrech+3  ;ohne ptest
  428.           #move pvek,lanf
  429.           lda #1         ;dimensioniert
  430.           sta dimflag
  431.           jsr memon
  432.           #move lmax,zw
  433. l11       #move zw,$14
  434.           jsr lumrech+3
  435.           ldy #1
  436.           lda #$ff       ;unbelegt
  437.           sta (lvek),y
  438.           ldx zw
  439.           dec zw
  440.           txa
  441.           bne l11
  442.           dec zw+1
  443.           bpl l11
  444.           #move pmax,zw
  445. l12       #move zw,$14
  446.           jsr pumrech+3
  447.           ldy #1
  448.           lda #$80       ;unbelegt
  449.           sta (pvek),y
  450.           ldx zw
  451.           dec zw
  452.           txa
  453.           bne l12
  454.           dec zw+1
  455.           bpl l12
  456.           jsr memoff
  457.           jmp clr
  458.           .bend
  459.  
  460. dwset       ; dwset dwa,dwb
  461.           jsr getnum
  462.           #move $14,dwa
  463.           jsr komma
  464.           jsr getnum
  465.           #move $14,dwb
  466.           rts
  467.  
  468. delset      ; delset delx,dely,delz
  469.           #getvar delx
  470.           jsr komma
  471.           #getvar dely
  472.           jsr komma
  473.           #getvar delz
  474.           rts
  475.  
  476. perspset    ;perspset aug,s
  477.           .blck
  478.           #getvar aug
  479.           jsr komma
  480.           #getvar s
  481.           #sub s,aug,as
  482.           bvc l2
  483.           bmi l1     ;v=1 und n=1
  484. l3        lda #<text ;error
  485.           ldy #>text
  486.           jmp fehler
  487. l2        bmi l3     ;v=0 und n=1
  488. l1        rts
  489. text      .byte 'aug>s',0
  490.           .bend
  491.  
  492. dimtext   .byte 'objekt nicht '
  493.           .byte 'dimensioniert',0
  494. dimerror  lda #<dimtext
  495.           ldy #>dimtext
  496. fehler    sta zw
  497.           sty zw+1
  498.           jsr $ffcc
  499.           lda #0
  500.           sta $13
  501.           jsr $aad7
  502.           jsr $ab45
  503.           lda zw
  504.           ldy zw+1
  505.           jsr $ab1e
  506.           jmp $a462
  507.  
  508. modset     ; modset joyflg,autoflg,
  509.            ;                   perspflg
  510.           #getpar joyflg
  511.           jsr komma
  512.           #getpar autoflg
  513.           jsr komma
  514.           #getpar perspflg
  515.           rts
  516.  
  517. ver       .macro a,b,c
  518.           lda &a&
  519.           cmp &b&
  520.           lda &a&+1
  521.           sbc &b&+1
  522.           bvs lver1
  523.           bpl &c&
  524.           bmi lver2
  525. lver1     bmi &c&
  526. lver2     .mend
  527.  
  528. pset       ; pset nummer,x,y,z
  529.           lda dimflag
  530.           bne *+5
  531.           jmp dimerror
  532.           jsr getnum
  533.           jsr komma
  534.           jsr pumrech
  535.           #move pvek,$fe
  536.           #getvar fac
  537.           jsr komma
  538.           jsr memon
  539.           #movenin fac,0,$fe
  540.           #getvar fac
  541.           jsr komma
  542.           #movenin fac,2,$fe
  543.           #getvar fac
  544.           #movenin fac,4,$fe
  545.           jsr memoff
  546.           jsr minimax
  547.           jmp btest
  548.  
  549. minimax   .blck
  550.           jsr memon
  551.           #movevin $fe,0,fac
  552.           #ver xmax,fac,l1
  553.           #move fac,xmax
  554. l1        #ver fac,xmin,l2
  555.           #move fac,xmin
  556. l2        #movevin $fe,2,fac
  557.           #ver ymax,fac,l3
  558.           #move fac,ymax
  559. l3        #ver fac,ymin,l4
  560.           #move fac,ymin
  561. l4        #movevin $fe,4,fac
  562.           #ver zmax,fac,l5
  563.           #move fac,zmax
  564. l5        #ver fac,zmin,l6
  565.           #move fac,zmin
  566. l6        jmp memoff
  567.           .bend
  568.  
  569. lset       ; lset lnum,pnum,pnum
  570.           lda dimflag
  571.           bne *+5
  572.           jmp dimerror
  573.           jsr getnum
  574.           jsr lumrech
  575.           jsr komma
  576.           jsr getnum
  577.           jsr pumrech
  578.           jsr memon
  579.           #move lvek,$fe
  580.           #movenin pvek,0,$fe
  581.           jsr memoff
  582.           jsr komma
  583.           jsr getnum
  584.           jsr pumrech
  585.           jsr memon
  586.           #movenin pvek,2,$fe
  587.           jsr memoff
  588.           rts
  589.  
  590. video       ;video hinten,obj,lineflag
  591.           .blck
  592.           jsr getnum
  593.           lda $15
  594.           bne l2
  595.           lda $14
  596.           sta zw
  597.           and #$f0
  598.           beq l1
  599. l2        jmp illegal
  600. l1        jsr komma
  601.           jsr getnum
  602.           lda $15
  603.           bne l2
  604.           lda $14
  605.           tay
  606.           and #$f0
  607.           bne l2
  608.           tya
  609.           asl
  610.           asl
  611.           asl
  612.           asl
  613.           ora zw
  614.           jsr farben
  615.           jsr komma
  616.           jsr getparsub     ;lineflag
  617.           lda $14
  618.           beq l3
  619.           lda #$91          ;=1
  620.           .byte $ec
  621. l3        lda #$69          ;=0
  622.           sta algo1+34
  623.           sta algo2+34
  624.           rts
  625.           .bend
  626.  
  627. joy       .blck
  628.           lda #$37   ;i/o einblenden
  629.           sta 1
  630.           lda #$e0   ;eingang
  631.           sta $dc02
  632.           lda $dc00  ;joystick lesen
  633.           tax
  634.           and #16
  635.           bne l5
  636.           pla        ;button -> ende
  637.           pla
  638.           jmp ende
  639. l5        lda joyflg
  640.           beq l12
  641.           jsr lwa
  642.           jsr lwb
  643.           jsr lxa
  644.           jsr lya
  645.           jsr lza
  646.           rts
  647. l12       ldy #0
  648.           txa
  649.           and #1
  650.           bne l1
  651.           iny
  652.           jsr lwb        ;oben
  653. l1        txa
  654.           and #2
  655.           bne l2
  656.           iny
  657.           #sub wb,dwb,wb ;unten
  658. l2        txa
  659.           and #4
  660.           bne l3
  661.           iny
  662.           #sub wa,dwa,wa ;links
  663. l3        txa
  664.           and #8
  665.           bne l4
  666.           iny
  667.           jsr lwa        ;rechts
  668. l4        lda #$ff     ;ausgang
  669.           sta $dc02    ;port a
  670.           ldx #$ef
  671.           stx $dc00    ;spalte waehlen
  672.           ldx $dc01    ;port b
  673.           txa
  674.           and #$02
  675.           bne l6
  676.           iny
  677.           jsr lza        ;i
  678. l6        txa
  679.           and #$04
  680.           bne l7
  681.           iny
  682.           jsr lxs        ;j
  683. l7        txa
  684.           and #$10
  685.           bne l8
  686.           iny
  687.           jsr lzs        ;m
  688. l8        txa
  689.           and #$20
  690.           bne l9
  691.           iny
  692.           jsr lxa        ;k
  693. l9        txa
  694.           and #$80
  695.           bne l10
  696.           iny
  697.           jsr lys        ;n
  698. l10       ldx #$f7
  699.           stx $dc00
  700.           lda $dc01
  701.           and #$40
  702.           bne l11
  703.           iny
  704.           jsr lya        ;u
  705. l11       lda autoflg
  706.           bne l13
  707.           tya
  708.           bne l13
  709.           jmp joy
  710. l13       rts
  711. lwa       #add wa,dwa,wa
  712.           rts
  713. lwb       #add wb,dwb,wb
  714.           rts
  715. lxa       #add x,delx,x
  716.           jsr xtest
  717.           bcs lxs
  718.           rts
  719. lya       #add y,dely,y
  720.           jsr ytest
  721.           bcs lys
  722.           rts
  723. lza       #add z,delz,z
  724.           jsr ztest
  725.           bcs lzs
  726.           rts
  727. lxs       #sub x,delx,x
  728.           jsr xtest
  729.           bcs lxa
  730.           rts
  731. lys       #sub y,dely,y
  732.           jsr ytest
  733.           bcs lya
  734.           rts
  735. lzs       #sub z,delz,z
  736.           jsr ztest
  737.           bcs lza
  738.           rts
  739.           .bend
  740.  
  741. xtest     .blck
  742.           #add x,xmax,$14
  743.           jsr gtest
  744.           bcs l18
  745.           #add xmin,x,$14
  746.           jsr ktest
  747. l18       rts
  748.           .bend
  749. ytest     .blck
  750.           #add y,ymax,$14
  751.           jsr gtest
  752.           bcs l19
  753.           #add ymin,y,$14
  754.           jsr ktest
  755. l19       rts
  756.           .bend
  757. ztest     .blck
  758.           #add z,zmax,$14
  759.           jsr gtest
  760.           bcs l20
  761.           #add zmin,z,$14
  762.           jsr ktest
  763. l20       rts
  764.           .bend
  765.  
  766. gtest     .blck
  767.           bmi ktest ;test auf bereichs-
  768.           cmp #$49  ;ueberschreitung
  769.           bcc l1    ;<$49
  770.           bne cset  ;>$49
  771.           lda $14
  772.           cmp #$e7
  773. l1        rts
  774.           .bend
  775.  
  776. ktest     .blck
  777.           bpl gtest
  778.           cmp #$b6
  779.           bcc cset  ;<$b6
  780.           bne l1    ;>$b6
  781.           lda $14
  782.           cmp #$1a
  783.           bcc cset  ;<$1a
  784. l1        clc
  785.           rts
  786.           .bend
  787. cset      sec              ;ausserhalb
  788.           rts
  789.  
  790. anfset      ;anfset wa,wb,x,y,z
  791.           jsr getnum
  792.           #move $14,wa
  793.           jsr komma
  794.           jsr getnum
  795.           #move $14,wb
  796.           jsr komma
  797.           #getvar x
  798.           jsr komma
  799.           #getvar y
  800.           jsr komma
  801.           #getvar z
  802.           jmp btest
  803.  
  804. bliste .byte 'init',0   ;befehlsliste
  805.        .byte 'obj',0
  806.        .byte 'pset',0
  807.        .byte 'lset',0
  808.        .byte 'delset',0
  809.        .byte 'dwset',0
  810.        .byte 'modset',0
  811.        .byte 'perspset',0
  812.        .byte 'video',0
  813.        .byte 'dreh',0
  814.        .byte 'anfset',0
  815.        .byte 'giga',0
  816. badr   .word init,obj,pset,lset,delset
  817.        .word dwset,modset,perspset
  818.        .word video,dreh,anfset,giga
  819.  
  820. dend      ;
  821.  
  822.  
  823. offset3   = *+offset2-$8700
  824. *         = $8700
  825.           .offs offset3
  826.  
  827.  
  828. giga   .blck
  829.  
  830. fz     = $c7e0
  831. pz     = fz+2
  832. fp     = pz+2      ;flaechenpointer
  833. fpf    = fp+2      ;folgender fp
  834. pbis   = fpf+2
  835. lbis   = pbis+2
  836. ep     = lbis+2
  837. fanz   = ep+1
  838. panz   = fanz+2
  839. q      = panz+2
  840. qa     = q+2
  841. qv     = qa+2
  842.  
  843.        lda $9d
  844.        ora #$40
  845.        sta $9d
  846.        #movei closer,$300
  847.        jsr $ffe7     ;clall
  848.        jsr $ad9e     ;frmevl
  849.        jsr $b6a3     ;frestr
  850.        cmp #14
  851.        bcc l3    ;<14
  852.        ldx #23   ;string too long error
  853.        jmp $a437
  854. l3     pha
  855.        tay
  856. l1     lda ($22),y   ;name in puffer
  857.        sta textpuff+3,y
  858.        dey
  859.        bpl l1
  860.        pla
  861.        clc
  862.        adc #[3+4]
  863.        pha           ;gesamtlaenge
  864.        tay
  865.        lda #0
  866.        sta textpuff,y
  867.        ldx #4
  868. l2     lda text2-1,x ;text2 anhaengen
  869.        sta textpuff-1,y
  870.        dey
  871.        dex
  872.        bne l2
  873.        pla           ;gesamtlaenge
  874.        ldx #<textpuff
  875.        ldy #>textpuff
  876.        jsr $ffbd     ;filenamenparameter
  877.        lda #1        ;log. filenr.
  878.        ldx #8        ;geraete nr.
  879.        ldy #2        ;sek. adresse
  880.        jsr $ffba     ;parameter setzen
  881.        jsr open
  882.        lda #2        ;log. filenr.
  883.        ldx #8        ;geraete nr.
  884.        ldy #3        ;sek. adresse
  885.        jsr $ffba     ;parameter setzen
  886.        jsr open
  887.        ldx #1        ;log. filenr.
  888.        jsr chkin
  889.        jsr wertin    ;fanz holen
  890.        sta fanz
  891.        sty fanz+1
  892.        jsr wertin    ;panz holen
  893.        sta panz
  894.        sty panz+1
  895.        jsr wertin    ;ueberlesen
  896.        jsr init
  897.        lda panz
  898.        sta pmax      ;pmax:=panz
  899.        sta lmax      ;lmax:=panz
  900.        sta $14       ;$14 :=panz
  901.        ldy panz+1
  902.        sty pmax+1
  903.        sty lmax+1
  904.        sty $15
  905.        jsr dim2       ;dimensionieren
  906.        #move fanz,$fe ;fanz mal 3bytes
  907. l4     jsr basin      ;ueberlesen
  908.        jsr basin
  909.        jsr basin
  910.        sec
  911.        lda $fe
  912.        sbc #1
  913.        sta $fe
  914.        bcs l4.1
  915.        dec $ff
  916. l4.1   lda $fe
  917.        bne l4
  918.        lda $ff
  919.        bne l4
  920.        ldx #2        ;auf file 2 gehen
  921.        jsr chkin
  922.        jsr wertin    ;3 werte ueberlesen
  923.        jsr wertin
  924.        jsr wertin
  925.  
  926.        .blck
  927.        lda #0
  928.        sta fz        ;fz:=0
  929.        sta fz+1
  930.        sta pz        ;pz:=0
  931.        sta pz+1
  932.        sta pbis      ;pbis:=0
  933.        sta pbis+1
  934.        sta lbis      ;lbis:=0
  935.        sta lbis+1
  936.        ldx #2        ;file 2
  937.        jsr chkin
  938.        jsr basin     ;fp lesen
  939.        sta fp
  940.        jsr basin
  941.        sta fp+1
  942.        jsr basin
  943. l1     lda #0        ;ep:=0
  944.        sta ep
  945.        ldx fz        ;fanz=fz+1?
  946.        ldy fz+1
  947.        inx
  948.        bne l22
  949.        iny
  950. l22    cpx fanz
  951.        bne l23
  952.        cpy fanz+1
  953.        bne l23
  954.                      ;fanz=fz+1 ->
  955.        #move panz,fpf;fpf:=panz+1
  956.        inc fpf
  957.        bne l2
  958.        inc fpf+1
  959.        jmp l2
  960. l23    ldx #2        ;file 2
  961.        jsr chkin
  962.        jsr basin     ;fpf lesen
  963.        sta fpf
  964.        jsr basin
  965.        sta fpf+1
  966.        jsr basin
  967. l2     ldx #1        ;punkt lesen
  968.        jsr chkin     ;file 1
  969.        ldx #5
  970. l3     txa
  971.        pha
  972.        jsr basin     ;low
  973.        sta fac
  974.        jsr basin     ;high
  975.        eor #$80
  976.        sta fac+1
  977.        jsr zerr      ;*1.25
  978.        lda fac+1
  979.        asl           ;vorzeichen in c
  980.        pla
  981.        tax
  982.        lda fac+1     ;high
  983.        ror
  984.        sta puffer,x  ;in puffer
  985.        dex
  986.        lda fac       ;low
  987.        ror
  988.        sta puffer,x
  989.        dex
  990.        bpl l3
  991.        sec
  992.        lda #0
  993.        sbc puffer+4
  994.        sta puffer+4
  995.        lda #0
  996.        sbc puffer+5
  997.        sta puffer+5
  998.        #move puffer,fac
  999.        #move puffer+2,puffer
  1000.        sec
  1001.        lda #0
  1002.        sbc fac
  1003.        sta puffer+2
  1004.        lda #0
  1005.        sbc fac+1
  1006.        sta puffer+3
  1007.        inc pz        ;pz+=1
  1008.        bne l4
  1009.        inc pz+1
  1010. l4     ldx fp        ;fpf=fp+1?
  1011.        ldy fp+1
  1012.        inx
  1013.        bne l5
  1014.        iny
  1015. l5     cpx fpf
  1016.        bne l6        ;<>
  1017.        cpy fpf+1
  1018.        bne l6        ;<>
  1019.        jmp l7        ;fpf=fp+1
  1020. l6     lda #0        ;stelle q finden
  1021.        sta $14
  1022.        sta $15
  1023. l8     jsr memoff
  1024.        jsr pumrech
  1025.        jsr memon
  1026.        lda $14
  1027.        cmp pbis
  1028.        bne l9
  1029.        lda $15
  1030.        cmp pbis+1
  1031.        bne l9
  1032.        inc pbis     ;$14=pbis -> pbis+=1
  1033.        bne l10
  1034.        inc pbis+1
  1035.        jmp l10
  1036. l9     ldy #5
  1037. l11    lda (pvek),y
  1038.        cmp puffer,y
  1039.        bne l12
  1040.        dey
  1041.        bpl l11
  1042. l10    lda pvek      ;gefunden
  1043.        sta q
  1044.        sta $fe
  1045.        lda pvek+1
  1046.        sta q+1
  1047.        sta $ff
  1048.        jmp l13
  1049. l12    inc $14       ;$14+=1
  1050.        bne l8
  1051.        inc $15
  1052.        jmp l8
  1053. l13    ldy #5        ;puffer nach q
  1054. l14    lda puffer,y
  1055.        sta (pvek),y
  1056.        dey
  1057.        bpl l14
  1058.        jsr minimax
  1059.        lda ep        ;ep=0?
  1060.        bne l15       ;ep=1
  1061.        inc ep        ;ep:=1
  1062.        lda pvek      ;qa:=q  :qv:=q
  1063.        sta qa
  1064.        sta qv
  1065.        lda pvek+1
  1066.        sta qa+1
  1067.        sta qv+1
  1068.        jmp l2        ;naechsten punkt
  1069. l15    jsr l17       ;linie von  q
  1070.        lda qv        ;      nach qv
  1071.        sta (lvek),y
  1072.        iny
  1073.        lda qv+1
  1074.        sta (lvek),y
  1075.        jsr memoff
  1076.        lda fpf
  1077.        cmp pz
  1078.        bne l16       ;fpf<>pz
  1079.        lda fpf+1
  1080.        cmp pz+1
  1081.        bne l16       ;fpf<>pz
  1082.        jsr l17       ;linie von  q
  1083.        lda qa        ;      nach qa
  1084.        sta (lvek),y
  1085.        iny
  1086.        lda qa+1
  1087.        sta (lvek),y
  1088.        jsr memoff
  1089.        jmp l7
  1090. l17    #move lbis,$14
  1091.        inc lbis
  1092.        bne l21
  1093.        inc lbis+1
  1094. l21    jsr lumrech
  1095.        jsr memon
  1096.        ldy #0        ;linie von  q
  1097.        lda q
  1098.        sta (lvek),y
  1099.        iny
  1100.        lda q+1
  1101.        sta (lvek),y
  1102.        iny
  1103.        rts
  1104. l16    #move q,qv
  1105.        jmp l2
  1106.  
  1107. l7     inc fz        ;fz+=1
  1108.        bne l18
  1109.        inc fz+1
  1110. l18    #move fpf,fp  ;fp:=fpf
  1111.        lda fanz+1
  1112.        cmp fz+1
  1113.        bne l19
  1114.        lda fanz
  1115.        cmp fz
  1116.        beq l20
  1117. l19    jmp l1        ;fz<>fanz -> l1
  1118. l20    lda #0        ;aufraeumen
  1119.        sta $fe
  1120.        sta $ff
  1121. l24    #move $fe,$14
  1122.        jsr memoff
  1123.        jsr lumrech
  1124.        jsr memon
  1125.        ldy #3
  1126. l25    lda (lvek),y
  1127.        sta puffer,y
  1128.        dey
  1129.        bpl l25
  1130.        inc $14
  1131.        bne l26
  1132.        inc $15
  1133. l26    jsr memoff
  1134.        jsr lumrech
  1135.        jsr memon
  1136.        ldy #3
  1137. l27    lda (lvek),y
  1138.        cmp puffer,y
  1139.        bne l28
  1140.        dey
  1141.        bpl l27
  1142. l30    lda #$ff      ;($lvek) loeschen
  1143.        ldy #1
  1144.        sta (lvek),y
  1145.        jmp l29
  1146. l28    ldy #0
  1147.        lda (lvek),y
  1148.        cmp puffer+2
  1149.        bne l29
  1150.        iny
  1151.        lda (lvek),y
  1152.        cmp puffer+3
  1153.        bne l29
  1154.        iny
  1155.        lda (lvek),y
  1156.        cmp puffer
  1157.        bne l29
  1158.        iny
  1159.        lda (lvek),y
  1160.        cmp puffer+1
  1161.        beq l30
  1162. l29    lda $14
  1163.        cmp lbis
  1164.        bne l31
  1165.        lda $15
  1166.        cmp lbis+1
  1167.        beq l32
  1168. l31    inc $14     ;$14<>lbis
  1169.        bne l26
  1170.        inc $15
  1171.        jmp l26
  1172. l32    inc $fe     ;$14=lbis -> $fe+=1
  1173.        bne l33
  1174.        inc $ff
  1175. l33    lda $fe
  1176.        cmp lbis
  1177.        bne l34     ;$fe<>lbis
  1178.        lda $ff
  1179.        cmp lbis+1
  1180.        beq l35
  1181. l34    jmp l24
  1182. l35    jsr memoff
  1183.        rts
  1184.        .bend
  1185.  
  1186. wertin     ;holt zahl von disk
  1187.            ;und wandelt nach integer
  1188.        .blck
  1189.        inc $13
  1190.        ldx #0
  1191. l1     jsr basin
  1192.        cmp #$d       ;return -> ende
  1193.        beq l2
  1194.        sta $200,x
  1195.        inx
  1196.        cpx #$59
  1197.        bcc l1
  1198.        ldx #$17      ;zu lang
  1199.        jmp $a437     ;error
  1200. l2     jsr $aaca
  1201.        dec $13
  1202.        #move $7a,$4b
  1203.        stx $7a
  1204.        sty $7b
  1205.        jsr $ae83     ;ascii nach fac
  1206.        jsr $b1b8     ;integer
  1207.        #move $4b,$7a
  1208.        lda $65       ;low
  1209.        ldy $64       ;high
  1210.        rts
  1211.        .bend
  1212.  
  1213. fehler .blck
  1214.        bcc l2        ;kein fehler
  1215.        pha           ;fehlernummer
  1216.        jsr status
  1217.        pla           ;fehler holen
  1218.        tax
  1219.        jmp $a437     ;fehlerausgabe
  1220. l2     pha
  1221.        lda $90       ;status
  1222.        and #$3f      ;eoi loeschen
  1223.        bne l1
  1224.        pla           ;kein fehler
  1225.        rts
  1226. l1     pla           ;fehler
  1227.        jsr status
  1228.        jmp $e382     ;warmstart
  1229.        .bend
  1230.  
  1231. close  lda #1
  1232.        jsr $ffc3     ;close 1
  1233.        lda #2
  1234.        jsr $ffc3     ;close 2
  1235.        jsr clrch
  1236.        sta $13
  1237.        rts
  1238.  
  1239. closer txa           ;fehler retten
  1240.        pha
  1241.        jsr close
  1242.        #movei $e38b,$300
  1243.        pla           ;fehler holen
  1244.        tax
  1245.        jmp ($300)
  1246.  
  1247. basin  lda $90       ;status
  1248.        and #$40      ;eoi isolieren
  1249.        bne close     ;eoi
  1250.        jsr $ffcf
  1251.        jmp fehler
  1252. chkin  jsr $ffc6
  1253.        jmp fehler
  1254. clrch  = $ffcc
  1255. open   jsr $ffc0
  1256.        jmp fehler
  1257.  
  1258. status .blck
  1259.        lda #8        ;fehlermeldung
  1260.        sta $ba
  1261.        jsr $ffb4     ;talk
  1262.        bit $90
  1263.        bmi l2        ;device not present
  1264.        lda #13
  1265.        jsr $ffd2
  1266.        lda #[15+$60]
  1267.        sta $b9
  1268.        jsr $ff96     ;sectalk
  1269. l1     jsr $ffa5     ;iecin
  1270.        jsr $ffd2     ;print
  1271.        cmp #13
  1272.        bne l1
  1273. l2     jsr $ffab     ;untalk
  1274.        rts
  1275.        .bend
  1276.  
  1277. text2  .byte ',s,r'
  1278. textpuff .byte 'ob.'
  1279. puffer ;
  1280.        *=*+16
  1281.        .bend
  1282.  
  1283. notbel .blck         ;error bei nicht
  1284.        jsr ende      ;definiertem punkt
  1285.        lda #<text
  1286.        ldy #>text
  1287.        jmp fehler
  1288. text   .byte 'punkt nicht definiert',0
  1289.        .bend
  1290.  
  1291. befehle .blck
  1292.        jsr $0073
  1293.        beq end       ;zeilenende
  1294.        jmp befehlesub
  1295. end    jmp $a7ae
  1296.        .bend
  1297.  
  1298. befehlesub .blck     ;sucht in der liste
  1299.        tax           ;nach befehlen
  1300.        bmi end       ;token
  1301.        ldx #0
  1302.        stx $ff
  1303. l4     ldy #0
  1304.        lda bliste,x
  1305. l2     cmp ($7a),y
  1306.        bne l1
  1307.        iny
  1308.        inx
  1309.        lda bliste,x
  1310.        bne l2
  1311.        lda $ff       ;befehl gefunden
  1312.        asl
  1313.        tax
  1314.        clc
  1315.        tya
  1316.        adc $7a
  1317.        sta $7a
  1318.        bcc l3
  1319.        inc $7b
  1320. l3     lda badr,x
  1321.        sta $fe
  1322.        lda badr+1,x
  1323.        sta $ff
  1324.        jsr l6
  1325.        jmp $a7ae
  1326. l6     jmp ($fe)    ;befehl ausfuehren
  1327.        rts
  1328. l1     inc $ff
  1329.        lda $ff
  1330.        cmp #12
  1331.        beq end
  1332. l5     inx          ;ungleich
  1333.        lda bliste,x
  1334.        bne l5
  1335.        inx
  1336.        jmp l4
  1337. end    jsr $0079     ;chrgot
  1338.        jmp $a7e7     ;weiter interpreter
  1339.                      ;schleife
  1340.        .bend
  1341.  
  1342. gigaend ;
  1343.  
  1344.