Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Rupture 2 lignes à 2 lignes + Rasters.

 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> CRTC
Previous topic :: Next topic  
Author Message
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 6 Feb - 16:41 (2019)    Post subject: Rupture 2 lignes à 2 lignes + Rasters. Reply with quote

Suite à un live de Roudoudou sur Twitch hier soir que j'ai beaucoup apprécié, j'ai décidé de vous proposer la routine suivante à titre éducatif.


Il ne s'agit ni plus ni moins que de la gestion d'un raster dans une zone de Rupture 2 lignes à 2 lignes


Pour tous ceux qui ignoreraient ce dont je parle, je leur conseille donc, en premier lieu, d'aller lire l'article qui s'intitule Programmez vos Ruptures Facilement.





Code:
;
; Rupture 2 lignes à 2 lignes
;     Compatible All Crtc
; Code by AsT/iMPact Fevrier 2019.
; 1er code de l'année.
;
 org #1000
 run $
 nolist
;
 di
 ld hl,#c9fb ; kill int
 ld (#38),hl
;
; Creation de la Trame 1 ligne sur 2
;
 ld hl,#c000
 ld b,80
pixg ld (hl),%10101010
 inc l
 djnz pixg
 ld hl,#c800
 ld b,80
pixd ld (hl),%01010101
 inc l
 djnz pixd
;
 ei
;
main ld b,#f5
vbl in a,(c)
 rra
 jr nc,vbl
;
 ld bc,#7f8e
 out (c),c
;
 ld bc,#bc07 ; kill vbl R7> Max R4
 out (c),c
 inc b
 out (c),c
;
y1 ld de,background ; Déclaration et affichage 8 rasters
 call pokeraster
y2 ld de,background
 call pokeraster
y3 ld de,background
 call pokeraster
y4 ld de,background
 call pokeraster
y5 ld de,background
 call pokeraster
y6 ld de,background
 call pokeraster
y7 ld de,background
 call pokeraster
y8 ld de,background
 call pokeraster
;
 ld b,1 ; manque 1 ligne avant que l'overflow du r9
l0 defs 60,0
 djnz l0
;
 ld bc,#bc09 
 ld a,1
 out (c),c
 inc b
 out (c),a
;
 ld bc,#bc04
 out (c),c
 inc b
 ld a,0 ; 33-1
 out (c),a
;
 ei
 halt

;
 call raster
;
 ld bc,#bc07 ; Re-Positionne la Vbl
 ld a,2
 out (c),c
 inc b
 out (c),a
 ld bc,#bc04
 out (c),c
 ld a,6-1
 inc b
 out (c),a
 ld bc,#bc09
 ld a,7
 out (c),c
 inc b
 out (c),a
;
 call clearraster2
 call calculy1
;
 jp main
;
; Routine de Rasters Simplifiés
;
raster di
 ld bc,#7f01
 ld hl,background
 ld a,248+4
 defs 13,0
;
looprast
;
 defw #71ed ; selectionne couleur 0 

 inc b
 outi
 out (c),c ; selectionne couleur 1
 inc b
 outi
;
 defs 64-4-20,0
;
 dec a
 jr nz,looprast
 ei
 ret
;
; Efface Raster dans la Table BackGround
;
clearraster2
 di
 ld (pile+1),sp
 ld sp,bgend
 ld hl,#5444
 defs 252,#E5 ; push hl
pile  ld sp,0
 ei
 ret
;
; Affiche Raster dans la table BackGround
;
pokeraster
 ld hl,tableraster
  defw #a0ed,#a0ed,#a0ed,#a0ed ; Opcode Ldi
  defw #a0ed,#a0ed,#a0ed,#a0ed ; 40 x Ldi car 20 couleurs (pen 0 et pen 1)
  defw #a0ed,#a0ed,#a0ed,#a0ed ; 
  defw #a0ed,#a0ed,#a0ed,#a0ed ; 
 defw #a0ed,#a0ed,#a0ed,#a0ed ; 
  defw #a0ed,#a0ed,#a0ed,#a0ed ; 
  defw #a0ed,#a0ed,#a0ed,#a0ed ;
  defw #a0ed,#a0ed,#a0ed,#a0ed ; 
 defw #a0ed,#a0ed,#a0ed,#a0ed ;
  defw #a0ed,#a0ed,#a0ed,#a0ed ;  
 ret
;
; Calcul Y de la position des rasters
; grace à une table générée en Basic en amont
;
calculy1 ld hl,bumptab
 ld a,(hl)
 inc l
 ld (calculy1+1),hl
 ld l,a
 ld h,0
 add hl,hl
 ld bc,background
 add hl,bc
 ld (y1+1),hl
;
calculy2 ld hl,bumptab+8
 ld a,(hl)
 inc l
 ld (calculy2+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y2+1),hl
calculy3 ld hl,bumptab+#10
 ld a,(hl)
 inc l
 ld (calculy3+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y3+1),hl
calculy4 ld hl,bumptab+#18
 ld a,(hl)
 inc l
 ld (calculy4+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y4+1),hl
calculy5 ld hl,bumptab+#20
 ld a,(hl)
 inc l
 ld (calculy5+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y5+1),hl
calculy6 ld hl,bumptab+#28
 ld a,(hl)
 inc l
 ld (calculy6+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y6+1),hl
calculy7 ld hl,bumptab+#30
 ld a,(hl)
 inc l
 ld (calculy7+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y7+1),hl
calculy8 ld hl,bumptab+#38
 ld a,(hl)
 inc l
 ld (calculy8+1),hl
 ld l,a
 ld h,0
 add hl,hl
 add hl,bc
 ld (y8+1),hl
 ret
;
; BackGround ou comment remplir chaque lignes avec la couleur noire
;
background
 defs 252*2,#54
bgend
;
; Table des couleurs de mon raster
;
tableraster
 ;defb #54,#54 ; 1
 defb #54,#5c ; 2
 defb #5c,#5c ; 3
 defb #5c,#4c ; 4
 defb #4c,#4c ; 5
 defb #4c,#4e ; 6
 defb #4e,#4e ; 7
 defb #4e,#4a ; 8
 defb #4a,#4a ; 9
 defb #4a,#4b ; 10
 defb #4b,#4b ; 11
 defb #4b,#4b ; 12
 defb #4a,#4b ; 13
 defb #4a,#4a ; 14
 defb #4e,#4a ; 15
 defb #4e,#4e ; 16
 defb #4c,#4e ; 17
 defb #4c,#4c ; 18
 defb #5c,#4c ; 19
 defb #5c,#5c ; 20
 defb #5c,#54 ; 21 
;
; Bumptab
; Table de rebond générée au préalable en basic puis convertie en ascii
; pour inclure au code source
;
 org #800
bumptab
;
 db #00,#00,#00,#00,#01,#01,#02,#03
 db #04,#05,#06,#08,#09,#0b,#0d,#0f
 db #11,#13,#16,#18,#1b,#1d,#20,#23
 db #26,#29,#2d,#30,#34,#37,#3b,#3f
 db #43,#47,#4b,#4f,#54,#58,#5c,#61
 db #66,#6a,#6f,#74,#79,#7e,#83,#88
 db #8d,#93,#98,#9d,#a3,#a8,#ae,#b3
 db #b9,#be,#c4,#c9,#cf,#d5,#da,#e0
 db #e6,#e0,#da,#d5,#cf,#c9,#c4,#be
 db #b9,#b3,#ae,#a8,#a3,#9d,#98,#93
 db #8d,#88,#83,#7e,#79,#74,#6f,#6a
 db #66,#61,#5c,#58,#54,#4f,#4b,#47
 db #43,#3f,#3b,#37,#34,#30,#2d,#29
 db #26,#23,#20,#1d,#1b,#18,#16,#13
 db #11,#0f,#0d,#0b,#09,#08,#06,#05
 db #04,#03,#02,#01,#01,#00,#00,#00
 db #00,#00,#00,#00,#01,#01,#02,#03
 db #04,#05,#06,#08,#09,#0b,#0d,#0f
 db #11,#13,#16,#18,#1b,#1d,#20,#23
 db #26,#29,#2d,#30,#34,#37,#3b,#3f
 db #43,#47,#4b,#4f,#54,#58,#5c,#61
 db #66,#6a,#6f,#74,#79,#7e,#83,#88
 db #8d,#93,#98,#9d,#a3,#a8,#ae,#b3
 db #b9,#be,#c4,#c9,#cf,#d5,#da,#e0
 db #e6,#e0,#da,#d5,#cf,#c9,#c4,#be
 db #b9,#b3,#ae,#a8,#a3,#9d,#98,#93
 db #8d,#88,#83,#7e,#79,#74,#6f,#6a
 db #66,#61,#5c,#58,#54,#4f,#4b,#47
 db #43,#3f,#3b,#37,#34,#30,#2d,#29
 db #26,#23,#20,#1d,#1b,#18,#16,#13
 db #11,#0f,#0d,#0b,#09,#08,#06,#05
 db #04,#03,#02,#01,#01,#00,#00,#00
;










Comme d'habitude, vos commentaires sont les bienvenue.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Publicité






PostPosted: Wed 6 Feb - 16:41 (2019)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
fgbrain


Offline

Joined: 01 Jun 2015
Posts: 17
Localisation: Greece
Masculin
Point(s): 1
Moyenne de points: 0.06

PostPosted: Sun 5 Jan - 14:03 (2020)    Post subject: Rupture 2 lignes à 2 lignes + Rasters. Reply with quote

Hi to all and happy 2020 !!!

I keep wondering about 2 ace games from ARC developments... X-OUT and Forgotten Worlds...
They both use Double buffered screen and REG9=5.
There are lots of sprites and fast scrolling in both games..!

Apart from memory reasons... Is there any other gain using 6 scans per character line??


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Sun 5 Jan - 14:17 (2020)    Post subject: Rupture 2 lignes à 2 lignes + Rasters. Reply with quote

fgbrain wrote:


Apart from memory reasons... Is there any other gain using 6 scans per character line??



I don’t really know. You should have to look at the source code to Know it. I believe you should find important data as musics or sprites positions into blocs Lines missing. 
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Kris


Offline

Joined: 08 Sep 2014
Posts: 261
Localisation: 35
Masculin Gémeaux (21mai-20juin)
Point(s): 86
Moyenne de points: 0.33

PostPosted: Mon 6 Jan - 13:54 (2020)    Post subject: Rupture 2 lignes à 2 lignes + Rasters. Reply with quote

Sympa cet exemple, tu pourrais nous en dire plus sur la table d'ondulation ? Si j'ai bien compris, tu généres une fonction sous basic, tu recuperes les valeurs que tu inclues au code source pour faire bouger les raster; par contre, pourquoi tu parles de transformer ces valeurs en ASCII  et pas en hexa ?
_________________
Kris


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Mon 6 Jan - 14:27 (2020)    Post subject: Rupture 2 lignes à 2 lignes + Rasters. Reply with quote

Kris wrote:
Sympa cet exemple, tu pourrais nous en dire plus sur la table d'ondulation ? Si j'ai bien compris, tu généres une fonction sous basic, tu recuperes les valeurs que tu inclues au code source pour faire bouger les raster; par contre, pourquoi tu parles de transformer ces valeurs en ASCII  et pas en hexa ?


Salut Kris,

Comme tu l'as compris, j'ai effectivement généré la table sinus en basic. Le passage en ascii a été utilisé pour récupèrer les datas générés en mémoire et le transformer en ascii pour être inclus dans le code source.

Voilà, le voile est levé! Mort de Rire
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> CRTC All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group