Problem med kod (kompilering)

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Problem med kod (kompilering)

Inläggav Chrille64 » 8 juli 2016, 20:33

Hej Alla!

Jag håller på, åter igen, att försöka mig på assembler programmering på C64 och misstänker att jag tänker fel när jag nu kört fast.

Jag försöker rita upp en "starfield" som scrollar med hjälp av att rita en punkt på skärmen.

"Mjukscroll" försöker jag få fram genom att kolla rasters.

Jag är som sagt helt grön på det här så jag har antagligen tänkt fel i koden nedan för när jag nu kompilerar efter att ha lagt till nya rader så får jag följande fel:

starfield.asm (67): error: Branch out of range (-133 bytes).

Koden:

Kod: Markera allt
      processor 6502
   
   org $1000
   lda #$01 ;set color number to 0 = black.
   sta $d020 ;set border color to 0 = black.
   lda #$00
   sta $d021 ;set background color to 0 = black.
   jsr $e544   ;clear the screen.
   
reset:
   ldy #$09
   sty $07e9
   ldx #$00
   stx $07e8
   stx $07ea
      
starfield:
   ldx $07ea
   lda star,x
   ldx $07e8
   sta $0400,x
   sta $040a,x
   sta $0414,x
   sta $041e,x
   sta $04cd,x
   sta $04d7,x
   sta $04e1,x
   sta $0590,x
   sta $059a,x
   sta $05a4,x ;Rad som är nyttillagd. Innan denna rad fungerade det.
   lda #$0b
   sta $d800,x
   sta $d80a,x
   sta $d814,x
   sta $d81e,x
   sta $d8cd,x
   sta $d8d7,x
   sta $d8e1,x
   sta $d990,x
   sta $d99a,x
   sta $d9a4,x ;Rad som är nyttillagd. Innan denna rad fungerade det.
   dex
   lda #$00
   sta $d800,x
   sta $d80a,x
   sta $d814,x
   sta $d81e,x
   sta $d8cd,x
   sta $d8d7,x
   sta $d8e1,x
   sta $d990,x
   sta $d99a,x
   sta $d9a4,x ;Rad som är nyttillagd. Innan denna rad fungerade det.
   ldx $07e8
   inx
   stx $07e8
   ldy #$00
rastercheck:
   lda $d012
    cmp #$ff     
    bne rastercheck
   iny
   cpy #$10
   bne rastercheck
   ldx $07e8
   cpx $07e9
   bne starfield
   dex
   lda #$00
   sta $d800,x
   sta $d80a,x
   sta $d814,x
   sta $d81e,x
   sta $d8cd,x
   sta $d8d7,x
   sta $d8e1,x
   sta $d990,x
   sta $d99a,x
   sta $d9a4,x ;Rad som är nyttillagd. Innan denna rad fungerade det.
   ldx #$00
   stx $07e8
   jmp starfield

star      .byte "."


Tänker jag helt galet när jag kör på i denna riktningen? :)

Mvh.
Christian
Användarvisningsbild
Chrille64
Erfaren gesäll
Erfaren gesäll
 
Inlägg: 204
Blev medlem: 1 mars 2013, 13:45
Ort: Malmö

Re: Problem med kod (kompilering)

Inläggav bjonte » 8 juli 2016, 22:07

Problemet är att bne starfield behöver hoppa länge än 128 bytes och det går inte. Du behöver använda jmp, som inte har begränsningar på hur långt det hoppas. Om du byter bne starfield mot detta så funkar det nog att assemblera.

Kod: Markera allt
beq skipjmp
jmp starfield
skipjmp:
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2021
Blev medlem: 17 april 2006, 23:12

Re: Problem med kod (kompilering)

Inläggav carlsson » 11 juli 2016, 09:16

Ett annat alternativ är att bryta ut återkommande kodsegment till subrutiner. Det kommer visserligen att slöa ner exekveringen, men du sparar lite plats och det villkorade hoppet fungerar. Om timingen är extremt viktig kanske detta är ett dåligt förslag, jämfört med Bjontes förslag att vända det villkorade hoppet och lägga till ett ovillkorat hopp.

Kod: Markera allt
starfield:
   ldx $07ea
   lda star,x
   ldx $07e8
   sta $0400,x
   sta $040a,x
   sta $0414,x
   sta $041e,x
   sta $04cd,x
   sta $04d7,x
   sta $04e1,x
   sta $0590,x
   sta $059a,x
   sta $05a4,x ;Rad som är nyttillagd. Innan denna rad fungerade det.
   lda #$0b
        jsr colsta ; NY RAD
   dex
   lda #$00
        jsr colsta ; NY RAD
   ldx $07e8
   inx
   stx $07e8
   ldy #$00
rastercheck:
   lda $d012
    cmp #$ff     
    bne rastercheck
   iny
   cpy #$10
   bne rastercheck
   ldx $07e8
   cpx $07e9
   bne starfield
   dex
   lda #$00
        jsr colsta ; NY RAD
   ldx #$00
   stx $07e8
   jmp starfield

colsta:
   sta $d800,x
   sta $d80a,x
   sta $d814,x
   sta $d81e,x
   sta $d8cd,x
   sta $d8d7,x
   sta $d8e1,x
   sta $d990,x
   sta $d99a,x
   sta $d9a4,x
        rts

star      .byte "."
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2357
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: Problem med kod (kompilering)

Inläggav bjonte » 11 juli 2016, 10:21

Carlssons förslag gör ju koden mer läsbar också så jag skulle göra det ifall det inte orsakar problem.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2021
Blev medlem: 17 april 2006, 23:12


Återgå till Programmering/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
cron