AtariST assembler

Diskussioner om Atari, Apple II, ZX Spectrum, Amstrad CPC, NES, SNES, Megadrive och mer...

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher

Re: AtariST assembler

Inläggav Redreamer » 1 mars 2019, 18:29

De ligger flätade efter varandra 1.2.3.4, 1.2.3.4 osv... därför fungerar en post decrement av a6 något vidare. Det var också därför det började med en asl då den inte tar med x flaggan vid första (ordet längst till höger)
Men du har helt rätt, borde börja med en rad. Men då ser man så dåligt i grafiken vad som händer. Ska trixa lite mer i kväll.

Skickat från min ANE-LX1 via Tapatalk
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1199
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: AtariST assembler

Inläggav bjonte » 1 mars 2019, 18:42

I så fall blir det ganska enkelt. Efter varje bitplansscroll är a6 tillbaks till början så då behöver a6 ökas på med en rad för att komma till nästa bitplan. Om man bakar in bitplansloopen och lägger det i en subrutin så skulle det kanske se ut såhär:

Kod: Markera allt
   equ screen_width = 320
   equ scroll_height = 16
   equ bytes_per_row = screen_width / 8
   equ words_per_row = bytes_per_row / 2
   equ bitplanes = 4

   lea <screen_address>,a6
   moveq #scroll_height,d0
   jsr scroll_text
   rts

; -> a6: screen address for upper line of scroll text
: -> d0: lines to scroll
; <> d3-d7: preserved
; <> a0-a5: preserved
scroll_text:
   move.l d0,d2
   subq #1,d2
   .line_loop:
      jsr scroll_line
   dbf d2,.line_loop
   rts

; -> a6: screen address
; <- a6: address to next line
; <> d2-d7: preserved
; <> a0-a5: preserved
scroll_line:
   moveq #bitplanes-1,d1
   .plane_loop:

      moveq #words_per_row-1,d0
      ; move to end of row before scrolling
      addq #bytes_per_row,a6
      .loop:
         roxl.w -(a6)
      dbf d0,.loop

      ; move to next bit plane
      addq #bytes_per_row,a6

   dbf d1,.plane_loop
   rts
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1569
Blev medlem: 17 april 2006, 23:12

Re: AtariST assembler

Inläggav Redreamer » 1 mars 2019, 21:36

Inspirerande med lite mer ordning i koden. =) Men jag tror du missförstod min risiga förklaring för bitplanen. Alltså, varje rad är på detta viset ordmässigt...
W1(bitplan1),W2(bitplan2),w3(bitplan3),w4(bitplan4), w5(bitplan1),w6(bitplan2)..osv Alltså inte en hel rad för ett plan och sen samma rad igen fast för nästa plan. Blir lätt rörigt när man ska förklara. Men jag tror du förstå nu.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1199
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: AtariST assembler

Inläggav bjonte » 2 mars 2019, 10:14

Då fattar jag mer av din kod och det blir lite krångligare. Jag skulle nog flytta adressen till sista bitplanet på sista ordet på raden och arbeta bakåt för att sedan återställa adresspekaren till raden efter. Jag skulle till en början inte lösa problemet med vad som kommer in från höger innan scrollen funkar (om det inte går att bredda skärmen så att ett extra tecken ryms i minnet fast inte syns).

Kod: Markera allt
   equ screen_width = 320
   equ scroll_height = 16
   equ bitplanes = 4
   equ bytes_per_bitplane_row = screen_width / 8
   equ bytes_per_row = bytes_per_bitplane_row * bitplanes
   equ words_per_bitplane_row = bytes_per_row / 2

   lea a6, <address>
   moveq #scroll_height - 1,d2
   jsr scroll_text
   rts

; -> a6: screen address for upper line of scroll text
: -> d0: lines to scroll
; <> d3-d7: preserved
; <> a0-a5: preserved
scroll_text:
   move.l d0,d2
   subq #1,d2
   .line_loop:
      jsr scroll_line
   dbf d2,.line_loop
   rts

; -> a6: screen address
; <- a6: screen address for next line
; <> d2-d7: preserved
; <> a0-a5: preserved
scroll_line:
   ; move to last word of last bitplane at end of line
   add.l #bytes_per_row - 2,a6

   ; for each bitplane
   moveq #bitplanes-1,d1
   .plane_loop:

      ; for each word in the bitplane
      moveq #words_per_bitplane_row-1,d0
      .loop:
         roxl.w (a6)
         ; move backwards to next word in the same bitplane
         subq #2*bitplanes
      dbf d0,.loop

      ; move forward an entire line, minus one word to get to the
      ; last word in the previous bitplane
      addq #bytes_per_row - 2,a6

   dbf d1,.plane_loop

   ; We're now at the last bitplane on the next to last word.
   ; To get to the next line, add one word to get to last bitplane
   ; words and then a full set of bitplanes words to get to next
   ; line.
   addq #2 + 2*bitplanes,a6
   rts
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1569
Blev medlem: 17 april 2006, 23:12

Re: AtariST assembler

Inläggav Redreamer » 2 mars 2019, 22:54

Tjoho, fick ju till det efter att jag skavt lite på hörnen på din kod för att min assemblator skulle acceptera allt. =) Nu får jag fortsätta med att förfina det hela. Kul att komma vidare. Blir ju lite sick sack framåt, tack för hjälpen!
Frågan är ju sedan hur mycket scrollande man kommer göra när det är en så dyr process på en st. Men för att komma igång å lära sig så är det en nyttig övning tror ja.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1199
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: AtariST assembler

Inläggav bjonte » 3 mars 2019, 08:05

Kul att du fick det att funka! Jag hittade bara på en syntax. Jag har såklart ingen aning om hur din assembler vill ha det.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1569
Blev medlem: 17 april 2006, 23:12

Föregående

Återgå till Andra 8-bitars & 16-bitars TV-spel/datorer

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