En liten spritescroll?

Diskussioner om mjukvara, emulatorer och BIOS-/ROM-/flash-filer

Moderatorer: Fanta_gbg, stonan, Zlasher

En liten spritescroll?

Inläggav Nova ex flash inc » 6 april 2012, 15:10

Tristesen av skärtorsdags-kvällen resulterade i en liten ca 16sprites scroll, i Y-led övre/nedre border ,
alltså utan multiplexning, Källkod om någon vill kika :D
Lite mindre labels än tidigare, Börjar gilla CBMProgram studio mer och mer.

Bifogar en liten fil som ska in på $1000 med spriteset, sinusar och en truddelut.
eller som ni nu har visat mig: *=$0ffe, INCBIN "C:...." osv.. tack.
Kod: Markera allt
*=$4000
          JSR $E544      ;  Rensa skärmen
          JSR $1003      ; Nollställ musikrutin (init)
          LDA #$0F       ; Grå sidborder
          STA $D020     
          LDA #$00       ; Och svart
          STA $D021      ; Skärm
          STA $3FFF
     
         
          ldx #$00
          LDA #$80       
          STA $2C00,X    ;sätt alla spritepekare som mellanslag
          INX
          BNE *-4       
          LDA #$FF       ; Sätt alla spritebitar på
          STA $D015      ; och alla sprites i multicolor
          STA $D01C     
          LDA #$0B       ; Sprite multicolor 2
          STA $D025     
          LDA #$0F       ;Sprite multicolor 3
          STA $D026     
          LDX #$00       
          LDA #$0C       
          STA $D027,X     ; Sprite grundfärg lika alla 8
          LDA #$80       
          STA $07f8,X   
          INX
          CPX #$08       
          BNE *-13       
          LDA #$00       ; Sätt x-sinus pekare till 0
          STA $05       
          LDA #$15       ; Sätt y-scroll pekare till 0
          STA $06       
          LDA #$8D       ; Sätt raster pekar scrollning till $8d
          STA $07       
          LDA #$00       ; Sätt textscroll pekare till 0
          STA $08       
          LDA #$0F       ; $10 - $1d är sprites y positioner
          STA $10        ; Som sedan scrollas upp 21 pixlar
          LDA #$24       
          STA $11       
          LDA #$39       
          STA $12       
          LDA #$4E       
          STA $13       
          LDA #$63       
          STA $14       
          LDA #$78       
          STA $15       
          LDA #$8D       
          STA $16       
          LDA #$A2       
          STA $17       
          LDA #$B7       
          STA $18       
          LDA #$CC       
          STA $19       
          LDA #$E1       
          STA $1A       
          LDA #$F6       
          STA $1B       
          LDA #$0B       
          STA $1C       
          LDA #$20       
          STA $1D       
          LDA #$35       
          STA $1E       
          JSR *+6       
          JMP *-0       
          SEI
          LDA #<IRQ      ; Sätt interrupt pekare
          STA $0314     
          LDA #>IRQ      ; Hög och låg byte
          STA $0315     
          LDA #$30       
          STA $D012     
          CLI
          RTS
IRQ       LDA #$00       
          CMP $D012      ; Vänta in raster-rad 0
          BNE *-3     
          STA $D010      ; Sätt $d010 till 0
          JSR YSPOS1     ; Rita ut Sprites 1 - 8 i y-led
          JSR XSIN1      ; Och i X-led
          JSR $1003      ; Spela musiken
          LDA $07        ;
          CMP $D012      ; Vänta in raster rad-pekare
          BNE *-3        ; Denna scrollas 21 pixlar upp
          LDA $18        ; och följer spritesen
          STA $D001      ; Rita ut sprite 1 pånytt i Y-led
          LDA $2C08      ; och sätt spritepekare
          STA $07F8      ; + X-led och $d010 fort som fan
          LDX $05        ; innan spriten ska synas
          LDA $2A08,X    ; $05 är x-sin pekare
          STA $D000     
          LDA $2808,X   
          BEQ *+12       ; Ska $d010 för sprite 1 vara på?
          LDA $D010      ; Annars hoppa ner och släck
          ORA #$01       ; Bit 1 om den är tänd
          STA $D010     
          bne *+10   
          LDA $D010     
          AND #$FE       
          STA $D010     
          JSR YSPOS2     ; Rita ut sprite 2-8 nya y positioner
          JSR XSIN2      ; Och x positioner
          LDA #$F8       ; här ska vi lura processorn att
          CMP $D012      ; övre och nedre border är utritad
          BNE *-3        ;genom att hålla den sysselsatt
          LDA #$00       ; och sätta 0 i $d011
          STA $D011      ; mellan rasterrad $f8 - 00 (Ungefär)
          LDA $1B        ; Krävs ingen precis timing för detta.
          STA $D007     
          LDA $2C0B     
          STA $07FB     
          LDA $1C       
          STA $D009     
          LDA $2C0C     
          STA $07FC     
          JSR SCROLL     
          LDA #$20       
          CMP $D012     
          BNE *-3       
          LDA #$1B       ; Sätt 25 kolumners textläge igen för
          STA $D011      ; att kunna ha text.
          INC $05        ; på skärmen om man vill
          JMP $EA81      ; öka x-sin pekare & Återstarta irq.
XSIN1     LDX $05       
          LDA $2A00,X   
          STA $D000     
          LDA $2800,X   
          BEQ *+10   
          LDA $D010     
          ORA #$01       
          STA $D010     
          LDA $2A01,X   
          STA $D002     
          LDA $2801,X   
          BEQ *+10     
          LDA $D010     
          ORA #$02       
          STA $D010     
          LDA $2A02,X   
          STA $D004     
          LDA $2802,X   
          BEQ *+10   
          LDA $D010     
          ORA #$04       
          STA $D010     
          LDA $2A03,X   
          STA $D006     
          LDA $2803,X   
          BEQ *+10     
          LDA $D010     
          ORA #$08       
          STA $D010     
          LDA $2A04,X   
          STA $D008     
          LDA $2804,X   
          BEQ *+10     
          LDA $D010     
          ORA #$10       
          STA $D010     
          LDA $2A05,X   
          STA $D00A     
          LDA $2805,X   
          BEQ *+10     
          LDA $D010     
          ORA #$20       
          STA $D010     
          LDA $2A06,X   
          STA $D00C     
          LDA $2806,X   
          BEQ *+10     
          LDA $D010     
          ORA #$40       
          STA $D010     
          LDA $2A07,X   
          STA $D00E     
          LDA $2807,X   
          BEQ *+10     
          LDA $D010     
          ORA #$80       
          STA $D010     
          RTS
XSIN2     LDX $05       
          LDA $2A09,X   
          STA $D002     
          LDA $2809,X   
          BEQ *+12     
          LDA $D010     
          ORA #$02       ;$D010 BLIR HÄR LITE LURIGARE
          STA $D010      ;EFTERSOM TEX BIT 1 DVS FÖR SPRITE1
          BNE *+10     ;KANSKE REDAN ÄR TÄND SEDAN FÖRSTA
          LDA $D010      ;GÅNGEN VI SATTE X POSITION OCH $D010
          AND #$FD       ;
          STA $D010      ;VI BEHÖVER DÅ SLÄCKA BIT 1 OM VI INTE
          LDA $2A0A,X    ;VILL HA DEN TÄND,
          STA $D004      ;OCH TÄNDA DEN OM VI VILL HA $D010
          LDA $280A,X    ;DVS SINUSVÄRDE HÖGRE ÄN 256,
          BEq *+12     ;HOPPAS NI HÄNGER MED I SVÄNGARNA
          LDA $D010     
          ORA #$04       ; ;-)
          STA $D010     
          BNE *+10     
          LDA $D010     
          AND #$FB       
          STA $D010     
          LDA $2A0B,X   
          STA $D006     
          LDA $280B,X   
          BEQ *+12   
          LDA $D010     
          ORA #$08       
          STA $D010     
          BNE *+10     
          LDA $D010     
          AND #$F7       
          STA $D010
          LDA $2A0C,X   
          STA $D008     
          LDA $280C,X   
          BEQ *+12     
          LDA $D010     
          ORA #$10       
          STA $D010     
          BNE *+10     
          LDA $D010     
          AND #$EF       
          STA $D010     
          LDA $2A0D,X   
          STA $D00A     
          LDA $280D,X   
          BEQ *+12   
          LDA $D010     
          ORA #$20       
          STA $D010     
          BNE *+10     
          LDA $D010     
          AND #$DF       
          STA $D010     
          RTS
YSPOS1    LDA $2C00     
          STA $07F8     
          LDA $10       
          STA $D001     
          LDA $11       
          STA $D003     
          LDA $2C01     
          STA $07F9     
          LDA $12       
          STA $D005     
          LDA $2C02     
          STA $07FA     
          LDA $13       
          STA $D007     
          LDA $2C03     
          STA $07FB     
          LDA $14       
          STA $D009     
          LDA $2C04     
          STA $07FC     
          LDA $15       
          STA $D00B     
          LDA $2C05     
          STA $07FD     
          LDA $16       
          STA $D00D     
          LDA $2C06     
          STA $07FE     
          LDA $17       
          STA $D00F     
          LDA $2C07     
          STA $07FF     
          RTS
YSPOS2    LDA $19       
          STA $D003     
          LDA $2C09     
          STA $07F9     
          LDA $1A       
          STA $D005     
          LDA $2C0A     
          STA $07FA     
          LDA $1B       
          STA $D007     
          LDA $2C0B     
          STA $07FB     
          LDA $1C       
          STA $D009     
          LDA $2C0C     
          STA $07FC     
          LDA $1D       
          STA $D00B     
          LDA $2C0D     
          STA $07FD     
          RTS
SCROLL    DEC $10       
          DEC $11       
          DEC $12       
          DEC $13       
          DEC $14       
          DEC $15       
          DEC $16       
          DEC $17       
          DEC $18       
          DEC $19       
          DEC $1A       
          DEC $1B       
          DEC $1C       
          DEC $1D       
          DEC $07       
          DEC $06       
          LDX $06       
          CPX #$00      ; Kolla om sprite y-pekare
          BEQ *+3       ; har scrollat 21 pixlar
          RTS           ; isåfall hoppa ner för att
          LDX #$015      ; återställa sprite y-pekare
          STX $06        ; rasterrad-pekare samt
          LDA #$8D       ; flytta alla tecken tillbaka
          STA $07        ; 1 byte i spritepekarna
          LDA #$0F       ; och peta in ett nytt tecken
          STA $10        ; längst bak.
          LDA #$24       
          STA $11       
          LDA #$39       
          STA $12       
          LDA #$4E       
          STA $13       
          LDA #$63       
          STA $14       
          LDA #$78       
          STA $15       
          LDA #$8D       
          STA $16       
          LDA #$A2       
          STA $17       
          LDA #$B7       
          STA $18       
          LDA #$CC       
          STA $19       
          LDA #$E1       
          STA $1A       
          LDA #$F6       
          STA $1B       
          LDA #$0B       
          STA $1C       
          LDA #$20       
          STA $1D       
          LDA #$35       
          STA $1E       
          LDA $2C01     
          STA $2C00     
          LDA $2C02     
          STA $2C01     
          LDA $2C03     
          STA $2C02     
          LDA $2C04     
          STA $2C03     
          LDA $2C05     
          STA $2C04     
          LDA $2C06     
          STA $2C05     
          LDA $2C07     
          STA $2C06     
          LDA $2C08     
          STA $2C07     
          LDA $2C09     
          STA $2C08     
          LDA $2C0A     
          STA $2C09     
          LDA $2C0B     
          STA $2C0A     
          LDA $2C0C     
          STA $2C0B     
          LDA $2C0D     
          STA $2C0C     
          LDY $08        ; tecken-pekare i Y
          LDX $2E00,Y    ; Läs tecken i X + tecken-pekare
          LDA $2D00,X    ; Hämta spritepekare i tabell med
          STA $2C0D      ; hjälp av X
          INC $08        ; Öka teckenpekaren 1 byte inför
          RTS            ; Nästa scrollning
*=$0FFE
INCBIN    "C:\USERS\BJÖRN OLSSON\DOCUMENTS\C64\SPRITESCROLL\SPRSINMUS2.PRG"


Lägger med en .prg fil när jag ändå håller på.
Hoppas nån kan ha någon nytta av skräpet
Ha det bra sålänge/Björn.
Bilagor
sprsinmus2.rar
Spriteset, sinusar, musik
(3.48 KiB) Nerladdad 360 gånger
PRGspritescroll.rar
.prg
(4.65 KiB) Nerladdad 363 gånger
Nova/Genesis Project.
Coder för Flash inc och lite Science 451 när det begav sig..
Bor i Karlstad.
Användarvisningsbild
Nova ex flash inc
Lärling
Lärling
 
Inlägg: 46
Blev medlem: 10 mars 2012, 18:06

Re: En liten spritescroll?

Inläggav e5frog » 6 april 2012, 23:07

Ojojoj...

Inte tokigt, om de nu bara inte ploppade fram i nederkant och såg skumt ut i ovandelen där bokstäverna försvann då hade det varit perfekt!
Går det att börja lite tidigare och sluta lite senare eller måste man ta till specialtrick?

Ska testa på riktig hårdvara med, inte bara i VICE...

Syns inget konstigt i ovankanten men de ploppar upp nästan hela bokstaven i taget i nederkanten även där.

Imponerande ändå! Skulle inte kunna göra något sådant själv.
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2764
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

En liten spritescroll?

Inläggav Metalux » 7 april 2012, 07:10

Minsann! Det här skall provas. Snart blir det ju ett riktigt demo. Du får bilda eller gå i grupp ju.
Metalux, assembler, C64, Amiga.
Användarvisningsbild
Metalux
Erfaren lärling
Erfaren lärling
 
Inlägg: 140
Blev medlem: 2 maj 2007, 18:40
Ort: Lund

Re: En liten spritescroll?

Inläggav Nova ex flash inc » 7 april 2012, 19:59

Har bara kört den i vice, där blir det lite "bloppigt" längst upp, men längst ner scrollas texten upp snyggt?
Men eftersom jag drar översta spriten ända upp till linje 0
borde den försvinna helt ur synfältet tycker jag?
Nedersta spriten har linje 309 som lägsta Y-position, bara någon linje kvar med andra ord,
när jag har använt sprites tidigare som ska försvinna upp och eller åka ner ur skärmen i n/ö bordern
och använt ungefär samma y-positioner som nu har de försvunnit snyggt på "riktiga" hårdvaran,
Tror vice på monitor inte emulerar skärmen riktigt rätt i x och y led???

Och det är klart du kan skriva en liknande effekt e5frog, Det är bara att dra igång och försöka,
Du verkar ju kunna din assembler, Det och en Mapping the C64 är allt man behöver :D
Nova/Genesis Project.
Coder för Flash inc och lite Science 451 när det begav sig..
Bor i Karlstad.
Användarvisningsbild
Nova ex flash inc
Lärling
Lärling
 
Inlägg: 46
Blev medlem: 10 mars 2012, 18:06

Re: En liten spritescroll?

Inläggav e5frog » 7 april 2012, 20:58

Måste man krångla med att visa bara delar av spriten för att de ska glida in snyggt?
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2764
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: En liten spritescroll?

Inläggav Nova ex flash inc » 8 april 2012, 19:25

Nää, Det har aldrig varit nödvändigt när jag skrev på en riktig 64, Spritesen fick alltid plats att gömma sig
över och under skärmen så att säga,
Har funderat på om dagens monitorer/LCD-tv eller vad man nu kör 64an på utnyttjar y-led bättre
än de gamla tjock-tv-14" man oftast använde förr?
Skrev iaf en liten snutt som ändrar borderfärgen mellan rasterrad $00 och $15 (21pixlar samma som en sprite)
När jag kör den i Vice ser man 6-7 pixlar typ i nederänden,därför "bloppar" spritesen bort
Men drar man spriten högre upp än 0 dyker den
upp i nederkant istället :D Kan någon köra kodsnutten på en riktig burk och se hur det ser ut
för min har inte fått liv ännu :cry: :cry:
Kod: Markera allt
*=$1000
          SEI
          LDA #<IRQ     
          STA $0314     
          LDA #>IRQ     
          STA $0315     
          LDA #$F0       
          STA $D012     
          CLI
          RTS
IRQ       LDA #$FF       ; LÄTTAST ATT VÄNTA IN $FF ELLER NÅTT,
          CMP $D012      ; ANNARS FÖRVÄXLAS LÄTT LINJE 0 OCH
          BNE *-3        ; LINJE O (den EFTER 256, 312 LINJER PÅ PAL
          LDX #$00       ; 64or, så linje 0 finns 2 gånger.
          INX
          BNE *-1       
          LDA #$00       
          CMP $D012     
          BNE *-3       
          DEC$D020
          LDA #$15       
          CMP $D012     
          BNE *-3       
          INC $D020     
          JMP $EA81 
Nova/Genesis Project.
Coder för Flash inc och lite Science 451 när det begav sig..
Bor i Karlstad.
Användarvisningsbild
Nova ex flash inc
Lärling
Lärling
 
Inlägg: 46
Blev medlem: 10 mars 2012, 18:06


Återgå till Mjukvara exkl. spel & prog.-verktyg

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst

Banners

BOA Japon Mediapalatset Nostalgibutiken
Quartex Retro Overlays Retroplay Spel och sånt
Super Motaro Söders Serie & Skivhandel vintagegames.se RG 2016