home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1992 November / 64er_Magazin_92-11_1992_Markt__Technik_de_Side_B.d64 / pulldown.src < prev    next >
Text File  |  2022-10-26  |  12KB  |  394 lines

  1.            *= $1000
  2.  
  3. ;--------variablen----------------------
  4.  
  5. color1     = $fb ;farben 1
  6. color2     = $fc ;2 und 3 fuer
  7. color3     = $fd ;farbsetzer
  8. check      = $fe ;check-variabler (0/1)
  9. ylaenge    = $02 ;laenge der menues
  10. breite     = $03 ;breite der menues
  11. xreg       = $04 ;offset
  12.  
  13. ;---------------------------------------
  14. ;--------main program-------------------
  15. ;---------------------------------------
  16.            jsr sprinit ;spritepointer
  17.            jsr scrinit ;screen-init
  18.  
  19. again      sei         ;irq sperren
  20.            lda #$00    ;checkvariable
  21.            sta check   ;setzen
  22.            lda #<start ;irq
  23.            ldy #>start ;auf eigene
  24.            sta $0314   ;routine
  25.            sty $0315   ;verbiegen
  26.            lda #$01    ;raster-irq
  27.            sta $d01a   ;zulassen
  28.            cli         ;irq freigeben
  29.            rts         ;und zurueck
  30.  
  31. start      inc $d019   ;irr loeschen
  32.  
  33.            lda check   ;checkvariable
  34.            beq irqend  ;testen, menue
  35.                        ;sichtbar???
  36.            sta $d01a   ;ja dann
  37.            jsr wait    ;warten
  38.            jsr joystick;joy abfragen
  39.            jsr checkframe;grenzen testen
  40.            jsr checky2 ;menue verlassen?
  41.            jmp $ea81   ;alter irq
  42.                        ;(ohne tast.abfr)
  43.  
  44. irqend     jsr joystick;joy abfragen
  45.            jsr checky  ;im menuebereich?
  46.  
  47.            jmp $ea31   ;alter irq
  48.                        ;(mit tast.abfr.)
  49.  
  50. ;---------------------------------------
  51. ;--------sub-routines-------------------
  52. ;---------------------------------------
  53.  
  54. ;--------joystick-abfrage---------------
  55. joystick   lda $dc00   ;port 2 holen
  56.            clc         ;carry loeschen
  57.            ror a       ;und durchtesten
  58.            bcc oben    ;bit 0=oben
  59.            ror a       ; 
  60.            bcc unten   ;bit 1=unten
  61.            ror a       ;
  62.            bcc links   ;bit 2=links
  63.            ror a       ;
  64.            bcc rechts  ;bit 3=rechts
  65.            ror a       ;
  66.            bcc button  ;bit 4=button
  67.            rts         ;
  68.  
  69. oben       dec $d001   ;sprite ypos=y+1
  70.            rts         ;zurueck
  71. unten      inc $d001   ;sprite ypos=y-1
  72.            rts         ;zurueck
  73.  
  74. rechts     inc $d000   ;sprite xpos=x+1
  75.            ldx $d000   ;position bereits
  76.            cpx #$00    ;wieder $00?
  77.            bne rend    ;nein dann ende
  78.            lda $d010   ;ja, dann
  79.            clc         ;msb fuer sprite
  80.            ror a       ;1 setzen
  81.            adc #$00    ;bzw. loeschen
  82.            eor #$01    ;und
  83.            sta $d010   ;schreiben
  84. rend       rts         ;zurueck
  85.  
  86. links      dec $d000   ;sprite xpos=x-1
  87.            ldx $d000   ;position bereits
  88.            cpx #$ff    ;wieder $00?
  89.            bne lend    ;nein dann ende
  90.            lda $d010   ;ja dann msb
  91.            clc         ;fuer sprite 1
  92.            ror a       ;setzen
  93.            adc #$00    ;bzw. loeschen
  94.            eor #$01    ;und
  95.            sta $d010   ;schreiben
  96. lend       rts         ;zurueck
  97.  
  98. button     rts        ;noch nicht belegt
  99.  
  100. ;--------y position checker-------------
  101. checky     lda $d001   ;testet, ob
  102.            clc         ;die menueleiste
  103.            cmp #$3f    ;erreicht wurde
  104.            beq continue;wenn ja, klappt
  105.            rts         ;sie auf
  106.  
  107. continue   jsr freeze  ;hintergrund
  108.                        ;retten und
  109.            jsr showline;menue anzeigen
  110.            lda #$01    ;hauptprogramm
  111.            sta check   ;mitteilen, dass
  112.            rts         ;menue sichtbar
  113.  
  114. freeze     ldx #$00    ;friert
  115. fr1        lda $0400,x ;screen-ram +
  116.            sta $3000,x ;color-ram
  117.            lda $d800,x ;ein + legt es
  118.            sta $3100,x ;ab
  119.            inx         ;$3000 im
  120.            bne fr1     ;speicher ab
  121.            rts
  122.  
  123. showline   ldx #$4f    ;zeigt
  124. show1      lda menue,x ;menueleiste
  125.            sta $0400,x ;an
  126.            dex         ;
  127.            bpl show1   ;
  128.            rts         ;
  129.  
  130. ;---------------------------------------
  131. ;------- window routinen ---------------
  132. ;---------------------------------------
  133.  
  134. ;--------wait---------------------------
  135. wait       ldx #$00    ;wait-routine
  136.            ldy #$00    ;damit der
  137. wait1      iny         ;sprite-pointer
  138.            bne wait1   ;auf dem
  139.            inx         ;bildschirm
  140.            cpx #$05    ;richtig
  141.            bne wait1   ;steuerbar ist
  142.            rts         ;
  143.  
  144. ;--------check y position (remove line)-
  145. checky2    lda $d001   ;testet, ob
  146.            clc         ;die menueleiste
  147.            cmp #$40    ;bereits
  148.            bcs end     ;verlassen wurde
  149.            rts         ;
  150.  
  151. end        jsr refreeze;wenn ja, screen
  152.            lda #$00    ;restaurieren und
  153.            sta check   ;es dem haupt-
  154.            rts         ;prg mitteilen
  155.  
  156. ;--------screen-inhalt restaurieren-----
  157. refreeze   ldx #$00    ;setzt den
  158. rfr1       lda $3000,x ;urspruenglichen
  159.            sta $0400,x ;screen
  160.            lda $3100,x ;wieder zusammen
  161.            sta $d800,x ;(screen+color-
  162.            inx         ; ram)
  163.            bne rfr1    ;
  164.            rts         ;
  165.  
  166. ;--------check x position and-----------
  167. ;--------mark menu----------------------
  168. checkframe lda $d010   ;diese routine
  169.            ror a       ;legt die grenzen
  170.            bcs check2  ;fest, ab wann
  171.                        ;ein menuepunkt
  172.            lda $d000   ;als aktiviert
  173.            cmp #$20    ;(=gelb) gilt
  174.            bcc cont
  175.            tax         ;mittels
  176.            sec         ;subtract-
  177.            sbc #$20    ;commands werden
  178.            cmp #$40    ;die groesste
  179.            bcc first   ;und kleinste
  180.            txa         ;grenze ueber-
  181.            sec         ;prueft
  182.            sbc #$88    ;
  183.            cmp #$48    ;
  184.            bcc second  ;
  185.  
  186. check2     lda $d000   ;extra check,
  187.            tax         ;da vielleicht
  188.            cmp #$38    ;msb gesetzt ist
  189.            bcc third   ;wenn ja dann
  190.                        ;drittes menue
  191. cont       bcs nothing ;kein menuepunkt
  192.            rts         ;tangiert, also
  193.                        ;nix anleuchten
  194.  
  195. ;--------window-macros aufrufen---------
  196. first      lda #$07    ;farben
  197.            sta color1  ;festlegen
  198.            lda #$0f    ;und
  199.            sta color2  ;
  200.            sta color3  ;farbsetzer
  201.            jsr colors  ;aufrufen
  202.  
  203.            lda #$03    ;laenge der
  204.            sta ylaenge ;menues (y)
  205.            ldx #$02    ;startpunkt
  206.            stx xreg    ;setzen (2.pos)
  207.            lda #<pull1 ;menue-nr.
  208.            sta puloop+1;festlegen
  209.            lda #$09    ;breite
  210.            sta breite  ;setzen
  211.            jsr pulldown;menuesetzer
  212.            rts         ;
  213.  
  214. second     lda #$0f    ;farben
  215.            sta color1  ;setzen
  216.            sta color3  ;
  217.            rol dedx    ;
  218.            jsr $56illegal adress mode
  219.            eor (/,x);
  220.  
  221.            lda #$04    ;laenturbo
  222.            sta ylaenge ;menues (y)
  223.            ldx #$0f    ;startpunkt
  224.            stx xreg    ;setzen (0f.pos)
  225.            lda #<pull2 ;menue-nr.
  226.            sta puloop+1;festlegen
  227.            lda #$09    ;breite
  228.            sta breite  ;
  229.            jsr pulldown;
  230.            rts         ;
  231.  
  232. third      lda #$0f    ;siehe
  233.            sta color1  ;label
  234.            sta color2  ;>>second<<
  235.            lda #$07    ;
  236.            sta color3  ;
  237.            jsr colors  ;
  238.  
  239.            lda #$02    ;
  240.            sta ylaenge ;
  241.            ldx #$1c    ;
  242.            stx xreg    ;
  243.            lda #<pull3 ;
  244.            sta puloop+1;
  245.            lda #$09    ;
  246.            sta breite  ;
  247.            jsr pulldown;
  248.            rts         ;
  249.  
  250. ;--------layer-screen restaurieren------
  251. nothing    ldx #$0b    ;nichts
  252. noth1      lda #$0f    ;anleuchten
  253.            sta $d81b,x ;
  254.            sta $d80e,x ;
  255.            sta $d800,x ;
  256.            dex         ;
  257.            bpl noth1   ;
  258.            ldx #$00    ;und den
  259. noth2      lda $3050,x ;aktuellen
  260.            sta $0450,x ;hintergrund
  261.            inx         ;anzeigen
  262.            cpx #$b0    ;
  263.            bne noth2   ;
  264.            rts         ;
  265.  
  266. ;-------color-macro---------------------
  267. colors     ldx #$0b    ;farben
  268. col1       lda color1  ;setzen
  269.            sta $d800,x ;
  270.            lda color2  ;
  271.            sta $d80e,x ;
  272.            lda color3  ;
  273.            sta $d81b,x ;
  274.            dex         ;
  275.            bpl col1    ;
  276.            rts         ;
  277.  
  278. ;-------pulldown-macro------------------
  279. pulldown   ldy #$00    ;dieses macro
  280. puld1      ldx xreg    ;setzt mit den
  281. puloop     lda pull1,y ;parametern
  282. change     sta $0450,x ;>>puloop<<
  283.            inx         ;>>breite<<
  284.            iny         ;>>ylaenge<< und
  285.            cpy breite  ;>>xreg<<
  286.            bne puloop  ;ein
  287.  
  288.            lda change+1;pulldown-menue
  289.            clc         ;auf den
  290.            adc #$28    ;bildschirm
  291.            sta change+1;
  292.            lda breite  ;breite auf-
  293.            clc         ;addieren, damit
  294.            adc #$09    ;der >cpy breite<
  295.            sta breite  ;funktioniert
  296.  
  297.            dec ylaenge ;bereits
  298.            lda ylaenge ;alle zeilen
  299.            bne puld1   ;auf dem screen?
  300.            lda #$50    ;ja, dann
  301.            sta change+1;zuruecksetzen
  302.            rts         ;
  303.  
  304. ;---------------------------------------
  305. ;--------init part----------------------
  306. ;---------------------------------------
  307.  
  308. ;--------sprite initialisieren----------
  309. sprinit    ldx #$3f    ;$3f
  310. loop       lda sprdata,x;sprite-datas
  311.            sta $0340,x ;in den speicher
  312.            dex         ;schreiben
  313.            bpl loop    ;
  314.  
  315.            lda #$01    ;farbe weiss
  316.            sta $d027   ;setzen
  317.            lda #$00    ;multicolor
  318.            sta $d01c   ;aus
  319.            sta $d01b   ;spr-prioritaet
  320.  
  321.            lda #$a0    ;position
  322.            sta $d000   ;auf $a0/$a0
  323.            sta $d001   ;setzen
  324.  
  325.            lda #$0d    ;sprite-block-
  326.            sta $07f8   ;pointer setzen
  327.            lda #$01    ;sprite
  328.            sta $d015   ;anschalten
  329.            rts         ;zurueck
  330.  
  331. ;--------screen initialisieren----------
  332. scrinit    lda #$00    ;screen +
  333.            sta $d020   ;frame
  334.            sta $d021   ;schwarz
  335.            lda #$0f    ;zeichenfarbe
  336.            sta $0286   ;hellgrau
  337.            jsr $e544   ;und setzen
  338.            rts         ;zurueck
  339. ;---------------------------------------
  340.  
  341. ;---------------------------------------
  342. ;----tabellen (windows+sprite+menue)----
  343. ;---------------------------------------
  344.  
  345.            *= $1300
  346.  
  347. sprdata    .byte $00,$00,$00,$00,$20,$00
  348.            .byte $00,$70,$00,$00,$f8,$00
  349.            .byte $01,$fc,$00,$03,$fe,$00
  350.            .byte $07,$ff,$00,$0f,$ff,$80
  351.            .byte $00,$70,$00,$00,$70,$00
  352.            .byte $00,$70,$00,$00,$70,$00
  353.            .byte $00,$70,$00,$00,$70,$00
  354.            .byte $00,$70,$00,$00,$70,$00
  355.            .byte $00,$70,$00,$00,$70,$00
  356.            .byte $00,$00,$00,$00,$00,$00
  357.            .byte $00,$00,$00,$00
  358.  
  359. menue      .byte $20,$20,$20,$0d,$05,$0e
  360.            .byte $15,$05,$20,$31,$20,$20
  361.            .byte $20,$20,$20,$20,$0d,$05
  362.            .byte $0e,$15,$05,$20,$32,$20
  363.            .byte $20,$20,$20,$20,$20,$0d
  364.            .byte $05,$0e,$15,$05,$20,$33
  365.            .byte $20,$20,$20,$20,$40,$40
  366.            .byte $40,$40,$40,$40,$40,$40
  367.            .byte $40,$40,$40,$40,$40,$40
  368.            .byte $40,$40,$40,$40,$40,$40
  369.            .byte $40,$40,$40,$40,$40,$40
  370.            .byte $40,$40,$40,$40,$40,$40
  371.            .byte $40,$40,$40,$40,$40,$40
  372.            .byte $40,$40,$20
  373.  
  374.            *= $1400
  375.  
  376. pull1      .byte $5d,$06,$01,$12,$02,$05
  377.            .byte $20,$31,$5d,$5d,$06,$01
  378.            .byte $12,$02,$05,$20,$32,$5d
  379.            .byte $6d,$40,$40,$40,$40,$40
  380.            .byte $40,$40,$7d
  381.  
  382. pull2      .byte $5d,$17,$09,$0e,$04,$0f
  383.            .byte $17,$31,$5d,$5d,$17,$09
  384.            .byte $0e,$04,$0f,$17,$32,$5d
  385.            .byte $5d,$17,$09,$0e,$04,$0f
  386.            .byte $17,$33,$5d,$6d,$40,$40
  387.            .byte $40,$40,$40,$40,$40,$7d
  388.  
  389. pull3      .byte $5d,$20,$11,$15,$09,$14
  390.            .byte $21,$20,$5d,$6d,$40,$40
  391.            .byte $40,$40,$40,$40,$40,$7d
  392. ;---------------------------------------
  393.  
  394.