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 >
Wrap
Text File
|
2022-10-26
|
12KB
|
394 lines
*= $1000
;--------variablen----------------------
color1 = $fb ;farben 1
color2 = $fc ;2 und 3 fuer
color3 = $fd ;farbsetzer
check = $fe ;check-variabler (0/1)
ylaenge = $02 ;laenge der menues
breite = $03 ;breite der menues
xreg = $04 ;offset
;---------------------------------------
;--------main program-------------------
;---------------------------------------
jsr sprinit ;spritepointer
jsr scrinit ;screen-init
again sei ;irq sperren
lda #$00 ;checkvariable
sta check ;setzen
lda #<start ;irq
ldy #>start ;auf eigene
sta $0314 ;routine
sty $0315 ;verbiegen
lda #$01 ;raster-irq
sta $d01a ;zulassen
cli ;irq freigeben
rts ;und zurueck
start inc $d019 ;irr loeschen
lda check ;checkvariable
beq irqend ;testen, menue
;sichtbar???
sta $d01a ;ja dann
jsr wait ;warten
jsr joystick;joy abfragen
jsr checkframe;grenzen testen
jsr checky2 ;menue verlassen?
jmp $ea81 ;alter irq
;(ohne tast.abfr)
irqend jsr joystick;joy abfragen
jsr checky ;im menuebereich?
jmp $ea31 ;alter irq
;(mit tast.abfr.)
;---------------------------------------
;--------sub-routines-------------------
;---------------------------------------
;--------joystick-abfrage---------------
joystick lda $dc00 ;port 2 holen
clc ;carry loeschen
ror a ;und durchtesten
bcc oben ;bit 0=oben
ror a ;
bcc unten ;bit 1=unten
ror a ;
bcc links ;bit 2=links
ror a ;
bcc rechts ;bit 3=rechts
ror a ;
bcc button ;bit 4=button
rts ;
oben dec $d001 ;sprite ypos=y+1
rts ;zurueck
unten inc $d001 ;sprite ypos=y-1
rts ;zurueck
rechts inc $d000 ;sprite xpos=x+1
ldx $d000 ;position bereits
cpx #$00 ;wieder $00?
bne rend ;nein dann ende
lda $d010 ;ja, dann
clc ;msb fuer sprite
ror a ;1 setzen
adc #$00 ;bzw. loeschen
eor #$01 ;und
sta $d010 ;schreiben
rend rts ;zurueck
links dec $d000 ;sprite xpos=x-1
ldx $d000 ;position bereits
cpx #$ff ;wieder $00?
bne lend ;nein dann ende
lda $d010 ;ja dann msb
clc ;fuer sprite 1
ror a ;setzen
adc #$00 ;bzw. loeschen
eor #$01 ;und
sta $d010 ;schreiben
lend rts ;zurueck
button rts ;noch nicht belegt
;--------y position checker-------------
checky lda $d001 ;testet, ob
clc ;die menueleiste
cmp #$3f ;erreicht wurde
beq continue;wenn ja, klappt
rts ;sie auf
continue jsr freeze ;hintergrund
;retten und
jsr showline;menue anzeigen
lda #$01 ;hauptprogramm
sta check ;mitteilen, dass
rts ;menue sichtbar
freeze ldx #$00 ;friert
fr1 lda $0400,x ;screen-ram +
sta $3000,x ;color-ram
lda $d800,x ;ein + legt es
sta $3100,x ;ab
inx ;$3000 im
bne fr1 ;speicher ab
rts
showline ldx #$4f ;zeigt
show1 lda menue,x ;menueleiste
sta $0400,x ;an
dex ;
bpl show1 ;
rts ;
;---------------------------------------
;------- window routinen ---------------
;---------------------------------------
;--------wait---------------------------
wait ldx #$00 ;wait-routine
ldy #$00 ;damit der
wait1 iny ;sprite-pointer
bne wait1 ;auf dem
inx ;bildschirm
cpx #$05 ;richtig
bne wait1 ;steuerbar ist
rts ;
;--------check y position (remove line)-
checky2 lda $d001 ;testet, ob
clc ;die menueleiste
cmp #$40 ;bereits
bcs end ;verlassen wurde
rts ;
end jsr refreeze;wenn ja, screen
lda #$00 ;restaurieren und
sta check ;es dem haupt-
rts ;prg mitteilen
;--------screen-inhalt restaurieren-----
refreeze ldx #$00 ;setzt den
rfr1 lda $3000,x ;urspruenglichen
sta $0400,x ;screen
lda $3100,x ;wieder zusammen
sta $d800,x ;(screen+color-
inx ; ram)
bne rfr1 ;
rts ;
;--------check x position and-----------
;--------mark menu----------------------
checkframe lda $d010 ;diese routine
ror a ;legt die grenzen
bcs check2 ;fest, ab wann
;ein menuepunkt
lda $d000 ;als aktiviert
cmp #$20 ;(=gelb) gilt
bcc cont
tax ;mittels
sec ;subtract-
sbc #$20 ;commands werden
cmp #$40 ;die groesste
bcc first ;und kleinste
txa ;grenze ueber-
sec ;prueft
sbc #$88 ;
cmp #$48 ;
bcc second ;
check2 lda $d000 ;extra check,
tax ;da vielleicht
cmp #$38 ;msb gesetzt ist
bcc third ;wenn ja dann
;drittes menue
cont bcs nothing ;kein menuepunkt
rts ;tangiert, also
;nix anleuchten
;--------window-macros aufrufen---------
first lda #$07 ;farben
sta color1 ;festlegen
lda #$0f ;und
sta color2 ;
sta color3 ;farbsetzer
jsr colors ;aufrufen
lda #$03 ;laenge der
sta ylaenge ;menues (y)
ldx #$02 ;startpunkt
stx xreg ;setzen (2.pos)
lda #<pull1 ;menue-nr.
sta puloop+1;festlegen
lda #$09 ;breite
sta breite ;setzen
jsr pulldown;menuesetzer
rts ;
second lda #$0f ;farben
sta color1 ;setzen
sta color3 ;
rol dedx ;
jsr $56illegal adress mode
eor (/,x);
lda #$04 ;laenturbo
sta ylaenge ;menues (y)
ldx #$0f ;startpunkt
stx xreg ;setzen (0f.pos)
lda #<pull2 ;menue-nr.
sta puloop+1;festlegen
lda #$09 ;breite
sta breite ;
jsr pulldown;
rts ;
third lda #$0f ;siehe
sta color1 ;label
sta color2 ;>>second<<
lda #$07 ;
sta color3 ;
jsr colors ;
lda #$02 ;
sta ylaenge ;
ldx #$1c ;
stx xreg ;
lda #<pull3 ;
sta puloop+1;
lda #$09 ;
sta breite ;
jsr pulldown;
rts ;
;--------layer-screen restaurieren------
nothing ldx #$0b ;nichts
noth1 lda #$0f ;anleuchten
sta $d81b,x ;
sta $d80e,x ;
sta $d800,x ;
dex ;
bpl noth1 ;
ldx #$00 ;und den
noth2 lda $3050,x ;aktuellen
sta $0450,x ;hintergrund
inx ;anzeigen
cpx #$b0 ;
bne noth2 ;
rts ;
;-------color-macro---------------------
colors ldx #$0b ;farben
col1 lda color1 ;setzen
sta $d800,x ;
lda color2 ;
sta $d80e,x ;
lda color3 ;
sta $d81b,x ;
dex ;
bpl col1 ;
rts ;
;-------pulldown-macro------------------
pulldown ldy #$00 ;dieses macro
puld1 ldx xreg ;setzt mit den
puloop lda pull1,y ;parametern
change sta $0450,x ;>>puloop<<
inx ;>>breite<<
iny ;>>ylaenge<< und
cpy breite ;>>xreg<<
bne puloop ;ein
lda change+1;pulldown-menue
clc ;auf den
adc #$28 ;bildschirm
sta change+1;
lda breite ;breite auf-
clc ;addieren, damit
adc #$09 ;der >cpy breite<
sta breite ;funktioniert
dec ylaenge ;bereits
lda ylaenge ;alle zeilen
bne puld1 ;auf dem screen?
lda #$50 ;ja, dann
sta change+1;zuruecksetzen
rts ;
;---------------------------------------
;--------init part----------------------
;---------------------------------------
;--------sprite initialisieren----------
sprinit ldx #$3f ;$3f
loop lda sprdata,x;sprite-datas
sta $0340,x ;in den speicher
dex ;schreiben
bpl loop ;
lda #$01 ;farbe weiss
sta $d027 ;setzen
lda #$00 ;multicolor
sta $d01c ;aus
sta $d01b ;spr-prioritaet
lda #$a0 ;position
sta $d000 ;auf $a0/$a0
sta $d001 ;setzen
lda #$0d ;sprite-block-
sta $07f8 ;pointer setzen
lda #$01 ;sprite
sta $d015 ;anschalten
rts ;zurueck
;--------screen initialisieren----------
scrinit lda #$00 ;screen +
sta $d020 ;frame
sta $d021 ;schwarz
lda #$0f ;zeichenfarbe
sta $0286 ;hellgrau
jsr $e544 ;und setzen
rts ;zurueck
;---------------------------------------
;---------------------------------------
;----tabellen (windows+sprite+menue)----
;---------------------------------------
*= $1300
sprdata .byte $00,$00,$00,$00,$20,$00
.byte $00,$70,$00,$00,$f8,$00
.byte $01,$fc,$00,$03,$fe,$00
.byte $07,$ff,$00,$0f,$ff,$80
.byte $00,$70,$00,$00,$70,$00
.byte $00,$70,$00,$00,$70,$00
.byte $00,$70,$00,$00,$70,$00
.byte $00,$70,$00,$00,$70,$00
.byte $00,$70,$00,$00,$70,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00
menue .byte $20,$20,$20,$0d,$05,$0e
.byte $15,$05,$20,$31,$20,$20
.byte $20,$20,$20,$20,$0d,$05
.byte $0e,$15,$05,$20,$32,$20
.byte $20,$20,$20,$20,$20,$0d
.byte $05,$0e,$15,$05,$20,$33
.byte $20,$20,$20,$20,$40,$40
.byte $40,$40,$40,$40,$40,$40
.byte $40,$40,$40,$40,$40,$40
.byte $40,$40,$40,$40,$40,$40
.byte $40,$40,$40,$40,$40,$40
.byte $40,$40,$40,$40,$40,$40
.byte $40,$40,$40,$40,$40,$40
.byte $40,$40,$20
*= $1400
pull1 .byte $5d,$06,$01,$12,$02,$05
.byte $20,$31,$5d,$5d,$06,$01
.byte $12,$02,$05,$20,$32,$5d
.byte $6d,$40,$40,$40,$40,$40
.byte $40,$40,$7d
pull2 .byte $5d,$17,$09,$0e,$04,$0f
.byte $17,$31,$5d,$5d,$17,$09
.byte $0e,$04,$0f,$17,$32,$5d
.byte $5d,$17,$09,$0e,$04,$0f
.byte $17,$33,$5d,$6d,$40,$40
.byte $40,$40,$40,$40,$40,$7d
pull3 .byte $5d,$20,$11,$15,$09,$14
.byte $21,$20,$5d,$6d,$40,$40
.byte $40,$40,$40,$40,$40,$7d
;---------------------------------------