home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / 94xx / 9403b.d64 / spritedemo.asc < prev    next >
Text File  |  1995-03-30  |  23KB  |  913 lines

  1. ;---------------------------------------
  2. ;             SPRITE MOVER
  3. ;---------------------------------------
  4. ; (W) IN 1991 BY INGO KUSCH
  5. ;                SIMONSTR.9
  6. ;                4700 HAMM 3
  7. ;            TEL:02381/464619
  8. ;---------------------------------------
  9. ; BEREICH  :    -X- : 456-480
  10. ; -------            (480-456) CLR  !!!!
  11. ;               -Y- : 40-240
  12. ;---------------------------------------
  13. ;ABKUERZUNGEN:
  14. ; 'SR' - SPRITE ROUTINE
  15. ;       (MOVE-PROGRAMM)
  16. ; 'SD' - SPRITE DARSTELLUNG
  17. ;       (SICHTBARMACHEN DER BEERECHNETEN
  18. ;        SPRITES MIT FIRST & NEXT)
  19. ; ZW.SP. - ZWISCHEN SPEICHER
  20. ; S.O. - SIEHE OBEN
  21. ; S.U. - SIEHE UNTEN
  22. ; CLR  - CLEAR = LOESCHEN
  23. ; SPR  - SPRITE
  24. ; ADR  - ADRESSE
  25. ; TAB  - TABELLE
  26. ; TRK  - TRACK
  27. ; NR   - NUMMER
  28. ;  ?   - BEDINGUNGEN/ABFRAGEN
  29. ;  !   - BEFEHLE/ANWEISUNGEN
  30. ;---------------------------------------
  31.  
  32. ;--- SPRITE TABELLEN
  33.  
  34. BASE     = $4000
  35. INITTB   = BASE
  36. XPOS     = BASE+30       ;POSITION X
  37. YPOS     = BASE+60       ;   "     Y
  38. BLOCK    = BASE+90       ;BLOCK NR
  39. CONTROL  = BASE+120      ;ON/MSB/COLOR
  40. DELTAX   = BASE+150      ;BEWEGUNG -X-
  41. DELTAY   = BASE+180      ;   "     -Y-
  42. DELAY    = BASE+210      ;COUNTDOWN
  43. SINXHI   = BASE+240      ;SINUS -X-
  44. SINXLO   = BASE+270
  45. SINX1    = BASE+300
  46. SINX2    = BASE+330
  47. SINX3    = BASE+360
  48. SINYHI   = BASE+390      ;SINUS -Y-
  49. SINYLO   = BASE+420
  50. SINY1    = BASE+450
  51. SINY2    = BASE+480
  52. SINY3    = BASE+520
  53. ANITB    = BASE+570      ;ANIMATION
  54. ANICO    = BASE+600
  55. ANITCO   = BASE+630
  56. SPECLO   = BASE+660      ;SPECIAL-PRGS
  57. SPECHI   = BASE+690
  58. TRKLO    = BASE+720      ;TRACK COUNT
  59. TRKHI    = BASE+750
  60. TRKPO    = BASE+780
  61. ACCTX    = BASE+810   ;BESCHLEUNIGUNG-X-
  62. ACCTY    = BASE+840   ;       "      -Y-
  63. ACCT1    = BASE+870   ; " -ZEIT -X-
  64. ACCT2    = BASE+900   ; "   "   -Y-
  65. ZWISCH   = BASE+930      ;BEELIEBIG
  66. ZWISCH2  = BASE+960      ;NUTZBAR
  67. ZWISCH3  = BASE+990      ;   "
  68. ZWISCH4  = BASE+1020     ;   "
  69.  
  70. XPOS2    = BASE+1050     ;FUER 'SD'
  71. YPOS2    = BASE+1080     ;NOTWENDIGE
  72. CONTROL2 = BASE+1110     ;ZWISCHEN TABS
  73. BLOCK2   = BASE+1140
  74.  
  75. YTAB     = BASE+$0500    ;SORTIER TAB 1
  76. SRTAB    = YTAB+100      ;   "     "  2
  77. SRTAB2   = YTAB+130      ; ZW.SP. 'SD'
  78. SPFREE   = YTAB+160      ;SORTIER TAB 3
  79.  
  80.  
  81.  
  82. ;--- ZEROPAGE ADRESSEN
  83.  
  84. ADR      = $02
  85. MADR     = $04
  86. MRE      = $06
  87.  
  88. XWERT    = $08
  89. YWERT    = $09
  90. CNTR     = $0A
  91. IREG     = $0B
  92. FSPR     = $0C
  93. SPR      = $0D
  94. SPR2     = $0E
  95. SPR3     = $0F
  96. ZWR      = $10
  97. ZWR2     = $11
  98. MZWR     = $12
  99. MZWR2    = $13
  100. BY       = $14
  101. MY       = $15
  102. SY       = $16
  103. TIME     = $17           ;'UHR'
  104.  
  105. SPR21    = $1A
  106. SPR31    = $1B
  107.  
  108.  
  109.  
  110. ;--- MAKROS
  111.  
  112. SETIRQ   .MACRO          ;SETZT IRQ
  113.          LDA #<\1
  114.          STA $FFFE
  115.          LDA #>\1
  116.          STA $FFFF
  117.          .ENDM
  118.  
  119. FREE     .MACRO          ;GIBT IRQ FREI
  120.          ASL $D019
  121.          CLI
  122.          .ENDM
  123.  
  124.  
  125. ;--- MAIN PART
  126.  
  127.  
  128.  
  129.          *= $0810
  130.  
  131.          JMP INIT        ;S.U.
  132.  
  133.  
  134. ;---------------------------------------
  135. ;* ACHTUNG ! DIE FOLGENDE ROUTINE WIRD
  136. ;  VON DEN IRQ-PROGRAMMEN FIRST & NEXT
  137. ;  ANGESPRUNGEN ! SIE STEHT HIER VORN,
  138. ;  DAMIT SIE EINIGE TAKTZYKLEN SCHNELLER
  139. ;  (BRANCHES NUR IN GLEICHE PAGE USW...)
  140. ;---------------------------------------
  141.  
  142. SET      DEC SPR21       ;BRINGT DIE
  143.          BMI ST3         ;SPRS AUF
  144.          LDX SPR21       ;DEN SCREEN ...
  145.          LDY SRTAB2,X
  146.          LDA CONTROL2,Y  ;FARBE
  147.          BPL SET         ;NOCH AN ?!?!
  148.          LDX SPR
  149.          STA $D027,X
  150.          ASL A           ;MSB HOLEN
  151.          ASL A
  152.          LDA $D010
  153.          AND TABB,X
  154.          BCC ST10        ;MSB - SETZEN
  155.          ORA TABC,X
  156. ST10     STA $D010
  157.  
  158.          LDA BLOCK2,Y    ;BLOCK-NUMMER
  159. ST4      STA $07F8,X
  160.          TXA
  161.          ASL A
  162.          TAX
  163.          LDA XPOS2,Y     ;X-POSITION
  164.          STA $D000,X
  165.          LDA YPOS2,Y     ;Y-POSITION
  166.          STA $D001,X
  167.  
  168.          LDA SPR         ;NEXT SPR
  169.          ADC #$01
  170.          AND #$07
  171.          STA SPR
  172.          RTS
  173.  
  174. TABB     .BYTE $FE,$FD,$FB,$F7
  175.          .BYTE $EF,$DF,$BF,$7F
  176. TABC     .BYTE $01,$02,$04,$08
  177.          .BYTE $10,$20,$40,$80
  178.  
  179. ST3      PLA             ;KEINE SPRS
  180.          PLA             ;MEHR
  181.          #SETIRQ (FIRST) ;IRQ AN DEN
  182.          LDA $D011       ; ANFANG
  183.          AND #$7F        ;RASTER
  184.          STA $D011       ; REFRESH
  185.          LDA #10
  186.          STA $D012
  187.          LDA SPR31
  188.          CMP #$08        ;ZURUECK NACH:
  189.          BCS ST31
  190.          JMP F3          ;FIRST ?!?
  191. ST31     JMP N3          ;ODER NEXT ??
  192.  
  193.  
  194.  
  195.  
  196. ;---------------------------------------
  197. ;* EIGENTLICHER PROGRAMM BEGINN
  198. ;---------------------------------------
  199.  
  200. INIT     SEI
  201.          LDA #$05          ;ROM AUS
  202.          STA $01
  203.          LDA #$00
  204.          STA $D020         ;BACKGROUND
  205.          STA $D021         ; COLORS
  206.          STA $DC0E         ;ZEIT IRQS
  207.          STA $DC0D         ;SPERREN
  208.  
  209.          TAX
  210. II1      LDA #$00
  211.          STA BASE,X        ;REGISTER
  212.          STA BASE+$0100,X  ;ZURUECK-
  213.          STA BASE+$0200,X  ; SETZEN
  214.          STA BASE+$0300,X
  215.          STA BASE+$0400,X
  216.          STA BASE+$0500,X
  217.          LDA #$20
  218.          STA $0400,X       ;BILDSCHIRM
  219.          STA $0500,X       ;CLR !
  220.          STA $0600,X
  221.          STA $0700,X
  222.          DEX
  223.          BNE II1
  224.  
  225.          LDX #30           ;DITO
  226.          LDA #$00
  227. II2      STA $02,X         ;ZEROPAGE
  228.          DEX
  229.          BPL II2
  230.  
  231.          LDA #$FF          ;MULTICOLOR
  232.          STA $D01C         ;ON
  233.          LDA #$06          ;SPR
  234.          STA $D025         ; FARBEN
  235.          LDA #$01          ;SETZEN
  236.          STA $D026
  237.  
  238. START    LDA #<NMI         ;NMIS
  239.          LDX #>NMI         ;AUFFANGEN
  240.          STA $FFFA
  241.          STX $FFFB
  242.          #SETIRQ (FIRST)   ;RASTER-IRQ
  243.          LDA $D011         ;  INIT...
  244.          AND #$7F          ;RASTER MSB
  245.          STA $D011         ;CLR
  246.          LDA #20           ;RASTERZEILE
  247.          STA $D012         ;SETZEN
  248.          LDA #$81          ;RASTERIRQ
  249.          STA $D01A         ; MASKIEREN
  250.          CLI               ;FREIGABE
  251.  
  252. WAIT     JSR MINIT    ;SPR INIT
  253.          JSR TIMER    ;HIER PLATZ FUER
  254.          JMP WAIT     ;CHECK-ROUTINEN
  255.                       ;TIMER-ROUTINEN
  256.                       ;USW. AUSSERHALB
  257.                       ;DES IRQ !
  258.  
  259.  
  260.  
  261. ;---------------------------------------
  262. ;* STELLT DIE ERSTEN ACHT SPRITES DAR
  263. ;---------------------------------------
  264.  
  265. FIRST    STA A1+1     ;REGISTER
  266.          STX X1+1     ; RETTEN
  267.          STY Y1+1
  268.  
  269.          INC BY       ;ZEITTAKT
  270.          LDA BY
  271.          AND #$3F     ;CIRCA JEDEN
  272.          BNE I1       ; 64. SCREEN
  273.          LDA TIME     ; EINMAL
  274.          CLC          ; TIME-COUNTER
  275.          ADC #1       ; ERHOEHEN !
  276.          STA TIME
  277.          BCC I1
  278.          INC TIME+1
  279. I1
  280.          LDA SPR2       ;HIER WERDEN DIE
  281.          STA SPR21      ;VON DER 'SR'
  282.          LDA SPR3       ;BEARBEITETEN
  283.          STA SPR31      ;REGISTER IN
  284.          LDX #30        ;DIE FUER 'SD'
  285. IN2      LDA XPOS,X     ;NOTWENDIGEN
  286.          STA XPOS2,X    ;COPIERT.
  287.          LDA YPOS,X
  288.          STA YPOS2,X    ;DADURCH KANN
  289.          LDA CONTROL,X  ;DIE BERECHNUNG
  290.          STA CONTROL2,X ;'SR' (FUER DEN
  291.          LDA BLOCK,X    ;NAECHSTEN
  292.          STA BLOCK2,X   ;DURCHLAUF)
  293.          LDA SRTAB,X    ;PARALLEL MIT
  294.          STA SRTAB2,X   ;'SD' ABLAUFEN,
  295.          DEX            ;OHNE DASS BEIDE
  296.          BPL IN2        ;SICH STOEREN !
  297.  
  298.          LDA #$00       ;SPR EIN!
  299.          STA SPR
  300.          LDX SPR31
  301. F5       CPX #$09       ;MEHR ALS 8 ?
  302.          BCC F4
  303.          LDX #$08       ;DANN: ALLE AN!
  304. F4       LDA TABD,X     ;SONST: EVTL.
  305.          STA $D015      ;  WENIGER!
  306.  
  307.          JSR SET        ;DIE OBERSTEN 8
  308.          JSR SET        ;SPR DARSTELLEN!
  309.          JSR SET
  310.          JSR SET
  311.          JSR SET
  312.          JSR SET
  313.          JSR SET
  314.          JSR SET
  315.  
  316.          LDA $D001      ;UNTERE KANTE
  317.          ADC #21        ;DES NAECHSTEN
  318.          STA $D012      ;SPRS NEUER
  319.          #SETIRQ (NEXT) ;RASTER-INIT !
  320.  
  321. F3       #FREE          ;IRQ FREI
  322.  
  323.          JSR MOVE       ;'SR'
  324.          LDA #$00
  325.          STA $D020
  326.  
  327. A1       LDA #$00       ;REGISTER
  328. X1       LDX #$00       ; RETTEN
  329. Y1       LDY #$00
  330. NMI      RTI
  331.  
  332.  
  333. ;---------------------------------------
  334. ;* STELLT DIE WEITEREN SPRITES DAR !
  335. ;---------------------------------------
  336.  
  337. NEXT     STA A2+1       ;S.O.
  338.          STX X2+1
  339.          STY Y2+1
  340.  
  341. N2       JSR SET        ;'SD'
  342.          ASL A          ;NOCH GENUG RAS-
  343.          TAX            ;TER ZEIT BIS
  344.          LDA $D001,X    ;ZUM NAECHSTEN
  345.          ADC #21        ;SPR, UM NOCH
  346.          STA ZWR        ;EINEN IRQ AUS-
  347.          LDX $D012      ;ZULOESEN ???
  348.          INX
  349.          CPX ZWR
  350.          BCS N2         ;NEIN : N2
  351.  
  352.          STA $D012      ;JA !
  353. N3
  354. A2       LDA #$00       ;S.O.
  355. X2       LDX #$00
  356. Y2       LDY #$00
  357.          #FREE
  358.          RTI
  359.  
  360.  
  361.  
  362. ;---------------------------------------
  363. ;* EIGENTLICHE SPRITE-ROUTINE 'SR'
  364. ;---------------------------------SYNTAX
  365. ;ZUR BEWEGUNG & DARSTELLUNG DER SPRITES!
  366. ;    úúúúúúúúúúúúúúúúúúúúúú
  367. ;                         ░└└└└└└└└└└└└«
  368. ;  XXXX XXXX              ▌CONTROL-BYTE▌
  369. ;  ▌▌▌▌ ¡└└└└SPRITE FARBE ¡└└└└└└└└└└└└╜
  370. ;  ▌▌▌¡└└└└└└1ST/2ND NIBBLE (SINUS)
  371. ;  ▌▌¡└└└└└└└EXPLOSION ON/OFF
  372. ;  ▌¡└└└└└└└└MSB
  373. ;  ¡└└└└└└└└└SPRITE ON/OFF
  374. ;---------------------------------------
  375.  
  376. MOVE     LDA MY          ;FUER X/Y
  377.          EOR #$80        ;BEWEGUNG :
  378.          STA MY          ;UP/DOWN HALF
  379.                          ;(S.U.)
  380.          LDX #30
  381. MO2      LDA CONTROL,X
  382.          BPL YR5         ;SPR AN ?
  383.                          ;JA !
  384.          LDA #$00        ;ZWISCHENWERTE
  385.          STA XWERT       ;LOSECHEN
  386.          STA YWERT
  387.  
  388. AN5      LDA ANITB,X     ;ANIMATION ?
  389.          BNE AN51
  390.          JMP XS          ;NEIN : S.U.
  391. AN51     ASL A           ;JA:AUSFUEHREN
  392.          DEC ANITCO,X
  393.          BPL AN21        ;NEXT STEP ?
  394.          TAY             ;JA !
  395.          LDA ANITAB+2,Y  ;WARTEZEIT
  396.          STA ANITCO,X    ; RESTAURIEREN
  397.          LDA ANITAB,Y    ;ADR
  398.          STA ADR         ;HOLEN
  399.          LDA ANITAB+1,Y
  400.          STA ADR+1
  401.          LDY ANICO,X     ;STEPNUMMER
  402. AN3      LDA (ADR),Y     ;BLOCK HOLEN
  403.          BNE AN2         ;BLOCK OK ?
  404.          STA ANICO,X     ;NEIN:
  405.          TAY             ;ANIMATION VON
  406.          BCC AN3         ;VORNE ?
  407.  
  408.          LDA ANITB,X     ;NICHT NOCHMAL!
  409.          AND #$3F        ;EXPLOSION ?
  410.          BEQ AN8         ;JA : CLR
  411. AN41     INC INITTB,X    ;NEIN:NEXT INIT
  412.          LDA #$00        ;ANIM. FERTIG
  413.          STA ANITB,X
  414.  
  415. AN4      LDA CONTROL,X
  416.          ASL A
  417.          BPL AN42        ;MSB ?
  418.          LDA XPOS,X      ;JA :
  419.          CMP #160        ; SPR CLR ?
  420.          BCC AN42        ; NEIN
  421.          CMP #200
  422.          BCS AN42        ; NEIN
  423.          BCC AN8         ;JA!
  424.  
  425. AN42     LDA YPOS,X      ; SORTIERT SPR.
  426.          LSR A           ; IN YTAB EIN
  427.          LSR A
  428.          CMP #10         ;SPR CLR ?
  429.          BCC AN8         ; JA
  430.          CMP #60
  431.          BCS AN8         ; JA
  432.          TAY             ;NEIN
  433. YR4      LDA YTAB,Y
  434.          BEQ YR3         ;PLATZ BESETZT?
  435.          INY             ; JA:NEXT PLACE
  436.          CPY #60
  437.          BCC YR4         ; END OF TAB?
  438.          BCS YR5         ; JA: NEXT SPR
  439. YR3      TXA
  440.          STA YTAB,Y      ; EINSORTIEREN
  441.          BNE YR5
  442.  
  443. AN8      LDA #$00        ; SPR CLR!
  444.          STA CONTROL,X
  445. YR5      DEX             ; NEXT SPR
  446.          BEQ YR51        ; ALL READY ?
  447.          JMP MO2         ; NO
  448. YR51     JMP SORT        ; ALL READY !!
  449.  
  450. AN2      STA BLOCK,X     ; NEW BLOCK
  451.          INC ANICO,X     ; STEP FORWARD
  452. AN21     BCC XS          ; EXPLOSION ?
  453.          LDY #0          ; VIELLEICHT
  454.          LDA ANITB,X
  455.          AND #$3F
  456.          BNE XS          ; EXPLOSION ?
  457.          JMP SETXY       ; JA!
  458.  
  459. XS       LDA CONTROL,X   ; WEITER :
  460.          EOR #$10        ; FIRST/SEC.
  461.          STA CONTROL,X   ; HALFBYTE
  462.          ASL A
  463.          ASL A
  464.          ASL A
  465.          STA SY          ; SICHERN
  466.          LDA SINXHI,X    ; SINUS IN
  467.          BEQ YS          ; X-RICHTUNG ?
  468.          STA ADR+1       ; JA:ADR
  469.          LDA SINXLO,X    ; HOLEN
  470.          STA ADR
  471.          LDY SINX1,X
  472.          LDA (ADR),Y     ; WERT HOLEN
  473.          BIT SY          ; 1ST/2ND
  474.          BMI XS2         ; HALFBYTE ?
  475.          LSR A           ; FIRST
  476.          LSR A
  477.          LSR A
  478.          LSR A
  479. XS2      AND #$0F        ; SECOND
  480.          TAY
  481.          LDA DELTB,Y     ; AUS TAB HOLEN
  482.          STA XWERT       ; ABLEGEN
  483.          BIT SY          ; BEREITS NEXT
  484.          BPL YS          ;  BYTE ???
  485.          LDA SINX1,X     ; JA!
  486.          CLC             ; STEP FORWARD
  487.          ADC #1
  488.          CMP SINX2,X
  489.          BCC XS1         ;ENDE ERREICHT?
  490.          LDA SINX3,X     ; JA:RESTART
  491. XS1      STA SINX1,X     ; NEIN:STORE
  492.  
  493. YS       LDA SINYHI,X    ; SINUS IN
  494.          BEQ DEL         ; Y-RICHTUNG ?
  495.          STA ADR+1       ; JA :ADR
  496.          LDA SINYLO,X    ; HOLEN
  497.          STA ADR
  498.          LDY SINY1,X
  499.          LDA (ADR),Y     ; DITO
  500.          BIT SY          ; ALLES ANALOG
  501.          BMI YS2         ; ZU -XS-
  502.          LSR A
  503.          LSR A
  504.          LSR A
  505.          LSR A
  506. YS2      AND #$0F
  507.          TAY
  508.          LDA DELTB,Y
  509.          STA YWERT
  510.          BIT SY
  511.          BPL DEL
  512.          LDA SINY1,X
  513.          CLC
  514.          ADC #1
  515.          CMP SINY2,X
  516.          BCC YS1
  517.          LDA SINY3,X
  518. YS1      STA SINY1,X
  519.  
  520. DEL      LDA DELAY,X     ; COUNTDOWN ?
  521.          BEQ ACX
  522.          DEC DELAY,X     ; JA:AUSFUEHREN
  523.          BNE ACX         ; NULL ?
  524.          INC INITTB,X    ; JA:NEXT INIT
  525.  
  526. ACX      LDA ACCTX,X  ;BESCHLEUNIGUNG X?
  527.          BEQ DX
  528.          DEC ACCT1,X     ;JA:WERT SCHON
  529.          BPL AC1         ;  AENDERN ?
  530.  
  531.          LDA ACCTX,X     ;JA: ZEIT
  532.          STA ACCT1,X     ; RESTAURIEREN
  533.  
  534.          LDA DELTAX,X    ;TAB-WERT HOLEN
  535.          AND #$F0
  536.          STA ZWR2        ;ZIEL RETTEN
  537.          LSR A
  538.          LSR A
  539.          LSR A
  540.          LSR A
  541.          STA ZWR         ;ZIEL WERT
  542.          LDA DELTAX,X
  543.          AND #$0F        ;MOMENT WERT
  544.          CMP ZWR         ;ZIEL
  545.          BNE AC5         ; ERREICHT?
  546.          LDA #$00        ; JA : ACC-
  547.          STA ACCTX,X     ; ENDE !
  548.          BEQ ACY
  549.  
  550. AC5      BCC AC3         ;ZIEL ANNAEHREN
  551.          SBC #1
  552.          BPL AC4
  553. AC3      ADC #1
  554. AC4      ORA ZWR2        ;TAB WERT
  555.          STA DELTAX,X    ; ZURUECK !
  556.          BNE DX1
  557.  
  558. AC1      LDA DELTAX,X    ;BEWEGUNG AUS-
  559.          BNE DX1         ;  FUEHREN !
  560.  
  561. DX       LDA DELTAX,X    ; X -
  562.          BEQ DY          ;  BEWEGUNG ??
  563.          BIT MY          ; JA
  564.          BPL DX1         ; 1ST/2ND HALF?
  565.          LSR A           ;1ST
  566.          LSR A
  567.          LSR A
  568.          LSR A
  569. DX1      AND #$0F        ;2ND
  570.          TAY
  571.          LDA DELTB,Y     ; S.O.
  572.          CLC
  573.          ADC XWERT       ;ABLEGEN
  574.          STA XWERT
  575.  
  576. ACY      LDA ACCTY,X  ;BESCHLEUNIGUNG Y?
  577.          BEQ DY
  578.          DEC ACCT2,X     ;JA: WEITER
  579.          BPL AC11        ;ANALOG -ACX-
  580.  
  581.          LDA ACCTY,X
  582.          STA ACCT2,X
  583.  
  584.          LDA DELTAY,X
  585.          AND #$F0
  586.          STA ZWR2
  587.          LSR A
  588.          LSR A
  589.          LSR A
  590.          LSR A
  591.          STA ZWR
  592.          LDA DELTAY,X
  593.          AND #$0F
  594.          CMP ZWR
  595.          BNE AC6
  596.          LDA #$00
  597.          STA ACCTY,X
  598.          BEQ SPC
  599.  
  600. AC6      BCC AC7
  601.          SBC #1
  602.          BPL AC8
  603. AC7      ADC #1
  604. AC8      ORA ZWR2
  605.          STA DELTAY,X
  606.          BNE DY1
  607.  
  608. AC11     LDA DELTAY,X
  609.          BNE DY1
  610.  
  611. DY       LDA DELTAY,X    ; Y BEWEGUNG ?
  612.          BEQ SPC
  613.          BIT MY          ; ANALOG -DX- !
  614.          BPL DY1
  615.          LSR A
  616.          LSR A
  617.          LSR A
  618.          LSR A
  619. DY1      AND #$0F
  620.          TAY
  621.          LDA DELTB,Y
  622.          CLC
  623.          ADC YWERT
  624.          STA YWERT
  625.  
  626. SPC      LDA SPECHI,X    ;SPECIAL PRG ?!
  627.          BEQ SETXY
  628.          STA SP1+2       ;JA! ADR
  629.          LDA SPECLO,X    ; HOLEN
  630.          STA SP1+1
  631.          STX SP1+4       ;SPR-NR RETTEN
  632. SP1      JSR $FFFF       ;INS ZUSATZ-PRG
  633.          LDX #0          ;SPR-NR RETTEN
  634.  
  635. SETXY    LDA XWERT       ;NEUE SPR-POS.
  636.          BEQ SX5         ;BERECHNEN !
  637.          CLC
  638.          ADC XPOS,X      ;X-POS
  639.          STA XPOS,X
  640.          BIT XWERT
  641.          BPL SX3         ;XWERT NEG?
  642.          BCC SX3+2       ;ADD.UEBERLAUF?
  643.          BCS SX5         ;JA/NEIN?
  644. SX3      BCC SX5
  645.          LDA CONTROL,X   ;MIT MSB !
  646.          EOR #$40
  647.          STA CONTROL,X
  648. SX5      LDA YWERT
  649.          BEQ SX4
  650.          CLC
  651.          ADC YPOS,X      ;Y-POS
  652.          STA YPOS,X      ; UND FERTIG!
  653.  
  654. SX4      JMP AN4         ;EINSORTIEREN !
  655.  
  656.  
  657.  
  658. ;---------------------------------------
  659. ;* ABSCHLIESSENDER SORTIER - ALGORITHMUS
  660. ;---------------------------------------
  661.  
  662. SORT     LDY #0
  663.          LDX #60
  664. AN7      LDA YTAB,X      ;TAB SEARCH
  665.          BEQ AN6         ;SPR GEFUNDEN?
  666.          STA SRTAB,Y   ;JA:EINSORTIEREN!
  667.          LDA #0
  668.          STA YTAB,X      ;WERT CLR!
  669.          INY             ;NEXT
  670. AN6      DEX             ;GANZEN BEREICH
  671.          CPX #10         ;DURCHSUCHEN!
  672.          BCS AN7
  673.          LDA #$FF        ;ENDE DER TAB
  674.          STA SRTAB,Y     ;MARKIEREN
  675.          STY SPR2        ;SPR-ANZAHL
  676.          STY SPR3        ;RETTEN
  677.  
  678. FS7      DEY             ;UEBERPRUEFT
  679.          BEQ TRY         ;NOCHMALS DIE
  680.          LDX SRTAB,Y     ;REIHENFOLGE
  681.          LDA YPOS,X      ;DER SPRITES
  682.          LDX SRTAB-1,Y   ;MITTELS DER
  683.          CMP YPOS,X      ;JEWEILIGEN
  684.          BCC FS7         ;(ECHTEN) YPOS
  685.          LDA SRTAB,Y     ;& SORTIERT UM
  686.          STA SRTAB-1,Y   ;(FALLS NOETIG)
  687.          TXA
  688.          STA SRTAB,Y
  689.          BNE FS7
  690.  
  691. TRY      LDY #0          ;FERTIGT EINE
  692.          LDX #30         ;TABELLE DER
  693. FS2      LDA CONTROL,X   ;FREIEN SPR
  694.          BMI FS1         ;AN ...
  695.          LDA INITTB,X
  696.          BEQ FS3         ;WIRD VON
  697.          BPL FS1         ;GETSPR GENUTZT
  698.          CMP #$FF
  699.          BNE FS1
  700.          LDA #$00
  701.          STA INITTB,X
  702.          BEQ FS1
  703. FS3      TXA
  704.          STA SPFREE,Y
  705.          INY
  706. FS1      DEX
  707.          BNE FS2
  708.          DEY
  709.          STY FSPR        ;ENDE DES MOVE
  710.          RTS             ;PROGRAMMS
  711.  
  712.  
  713.  
  714. ;---------------------------------------
  715. ;* INITIALISIERT ALLE SPRITES MITTELS
  716. ;  TRACK-TABELLE !
  717. ;---------------------------------------
  718.  
  719. MINIT    LDX #30
  720. MI17     LDA INITTB,X
  721.          BEQ MI1         ;INIT ?
  722.          CMP #$FF        ;VIELLEICHT ?
  723.          BEQ MI1
  724.          BMI MI16        ;JA:EXPLOSION
  725.          LDY CONTROL,X   ;JA:NORMAL
  726.          STY CNTR
  727.          BMI MI2         ;SPR ON?
  728.          ASL A           ;NEIN
  729.          TAY
  730.          LDA TRKTAB,Y    ;TRACK ADR
  731.          STA TRKLO,X     ; HOLEN
  732.          STA MADR
  733.          LDA TRKTAB+1,Y
  734.          STA TRKHI,X
  735.          STA MADR+1
  736.          JSR CLR         ;ALTE WERT CLR
  737.          LDY #0
  738.          LDA (MADR),Y    ;POSITION
  739.          BEQ MI15        ;  GEGEBEN ?
  740.          ASL A           ;JA !
  741.          STA XPOS,X      ; X-POS &
  742.          ROR A
  743.          LSR A
  744.          AND #$40
  745.          STA CNTR        ; MSB HOLEN!
  746.          INY
  747.          LDA (MADR),Y
  748.          STA YPOS,X      ; Y-POS HOLEN!
  749. MI15     LDY #2
  750.          BNE MI32        ; WEITER
  751.  
  752. MI16     JSR EXPL2       ;EXPL.-INIT
  753. MI13     LDA CNTR
  754.          STA CONTROL,X   ;SPR EIN/AUS
  755. MI14     LDA #0
  756.          STA INITTB,X    ;INIT FERTIG!
  757. MI1      DEX
  758.          BNE MI17        ;NEXT SPR?
  759.          RTS             ;MINIT ENDE !!!
  760.  
  761.  
  762.                          ;SPR WAR EIN !
  763. MI2      TYA             ;CONTROL-REG!
  764.          ASL A
  765.          ASL A
  766.          BMI MI14        ;EXPL ?
  767. MI12     LDA TRKLO,X     ;NO: ALTE
  768.          STA MADR        ; ADR HOLEN
  769.          LDA TRKHI,X
  770.          BEQ MI14
  771.          STA MADR+1
  772.          LDY TRKPO,X     ;POINTER
  773. MI32     LDA (MADR),Y
  774.          BEQ MI14        ;TRACK ENDE ?
  775.          CMP #$FF        ;NO:
  776.          BEQ MIJMP       ;JUMP/EINSCHUB?
  777.          JSR MI3         ;NO: NORM-INIT!
  778.          INY
  779.          TYA             ;NEUEN
  780.          STA TRKPO,X     ;POINTER RETTEN
  781.          JMP MI13        ;NEXT SPR !
  782.  
  783. MIJMP    INY
  784.          LDA (MADR),Y    ;TESTEN !
  785.          CMP #$FF
  786.          BEQ MIJ1        ;JUMP ?
  787.          CMP #$FE
  788.          BEQ MIJS        ;EINSCHUB ?
  789.          DEY
  790.          JMP MI13        ;WEDER NOCH !
  791.  
  792.  
  793. MIJ1     INY             ;JUMP!
  794.          LDA (MADR),Y    ; HOLT NEUE
  795.          STA TRKLO,X     ; TRACK ADR
  796.          INY             ; & UEBERGIBT!
  797.          LDA (MADR),Y    ; ACHTUNG :
  798.          STA TRKHI,X     ;----------
  799.          LDA #0          ;MUSS AUF
  800.          STA TRKPO,X     ;STATUS BYTE
  801.          BEQ MI12        ;WEISEN !!!
  802.  
  803.  
  804.                          ;EINSCHUB !
  805. MIJS     INY             ; HOLT
  806.          LDA (MADR),Y    ; EINSPRUNG
  807.          STA MIJS2+1     ; DER INIT-SEQ
  808.          INY
  809.          LDA (MADR),Y    ;ACHTUNG:
  810.          STA MADR+1      ;--------
  811. MIJS2    LDA #$00        ;MUSS AUF
  812.          STA MADR        ;STATUS BYTE
  813.          INY             ;WEISEN !
  814.          TYA
  815.          STA TRKPO,X
  816.          LDY #0
  817.          LDA (MADR),Y    ; FUEHRT SIE
  818.          JSR MI3         ; AUS & KEHRT
  819.          JMP MI13        ; ZURUECK
  820.  
  821.  
  822. MI3      LSR A           ;HOLT ALLE
  823.          STA IREG        ; DATEN AUS DEM
  824.          BCC MI4         ; TRACK !
  825.          INY
  826.          LDA (MADR),Y    ;SPECIAL INIT?
  827.          STA MI4-6       ;WENN JA:
  828.          INY             ; HOLT EINSRUNG
  829.          LDA (MADR),Y
  830.          STA MI4-5
  831.          STY MI4-1       ;RETTET X,Y
  832.          STX MI4-3
  833.          JSR $FFFF       ;SPRINGT EIN!
  834.          LDX #0          ; X,Y RETTEN
  835.          LDY #0
  836.  
  837. MI4      LSR IREG        ;BASIC
  838.          BCC MI5         ; REFRESH ?
  839.          INY             ;JA:
  840.          LDA (MADR),Y    ;JA: HOLT:
  841.          BEQ MI41
  842.          STA BLOCK,X     ; BLOCK &
  843. MI41     LDA CNTR
  844.          AND #$40
  845.          INY
  846.          ORA (MADR),Y    ; FARBE !
  847.          ORA #$80        ;& SPR ON !
  848.          STA CNTR
  849.  
  850. MI5      LSR IREG        ;BEWEGUNG X/Y?
  851.          BCC MI6
  852.          INY             ;JA: HOLT:
  853.          LDA (MADR),Y    ; DELTAX
  854.          STA DELTAX,X
  855.          INY
  856.          LDA (MADR),Y    ; DELTAY
  857.          STA DELTAY,X
  858.  
  859. MI6      LSR IREG        ;COUNT DOWN?
  860.          BCC MI7
  861.          INY             ;JA:
  862.          LDA (MADR),Y    ; HOLT DELAY
  863.          STA DELAY,X
  864.  
  865. MI7      LSR IREG        ;BESCHLEUNIGUNG
  866.          BCC MI8         ; X/Y ?
  867.          INY             ;JA!
  868.          STY MI71+1      ;Y RETTEN
  869.          LDA (MADR),Y    ;HOLT ZEIGER
  870.          ASL A           ; AUF ACCTB
  871.          ASL A           ; *4
  872.          TAY             ;HOLT AUS
  873.          LDA ACCTB+1,Y   ; ACCTB :
  874.          STA ACCTX,X     ; TIME X
  875.          LDA ACCTB,Y     ;ZIEL/START -X-
  876.          STA DELTAX,X
  877.          LDA ACCTB+3,Y   ; TIME Y
  878.          STA ACCTY,X
  879.          LDA ACCTB+2,Y   ;ZIEL/START -Y-
  880.          STA DELTAY,X
  881.          LDA #$00        ; ALTE COUNTER
  882.          STA ACCT1,X     ; CLR
  883.          STA ACCT2,X
  884. MI71     LDY #$00        ;Y ZURUECK
  885.  
  886. MI8      LSR IREG        ;ANIMATION ?
  887.          BCC MI9
  888.          INY             ;JA
  889.          LDA (MADR),Y    ;ANIMATIONS-NR.
  890.          ASL A           ;*2
  891.          STA ANITB,X     ;UEBERGEBEN
  892.          LDA #0
  893.          STA ANITCO,X    ; CLR
  894.          STA ANICO,X
  895.  
  896. MI9      LSR IREG        ;SPECIAL-PRG
  897.          BCC MI10
  898.          INY             ;JA !
  899.          LDA (MADR),Y
  900.          STA SPECLO,X    ;HOLT ADR !
  901.          INY
  902.          LDA (MADR),Y    ;&UEBERGIBT !
  903.          STA SPECHI,X
  904.  
  905. MI10     LSR IREG        ;SINUS ?
  906.          BCC MI11
  907.          INY             ; JA!
  908.          LDA (MADR),Y    ;HOLT NR FUER
  909.          JMP SININIT     ;SINTAB2 & INIT
  910. MI11     RTS
  911.  
  912.  
  913.