Nettoyer une bank avec LDIR

Plus d'informations
26 Juil 2020 18:45 #64 par ZISQUIER
Nettoyer une bank avec LDIR a été créé par ZISQUIER
Bon ... moi mon truc est en cartouche donc une fois le programme principal copié en RAM et une fois les interruptions coupés, je veux "nettoyer" ma RAM de la BANK 0 (donc de #0000 à #3FFF)

Le temps machine, dans cette zone du programme je m'en tape l'anus ! ce que je veux c'est économiser de l'octets ! mon précieuuuuuux octets !

donc j'ai cette routine là pour le moment :
; /////////////////////////////////////////////////////////////////////////////////////////////////
; /////////////////////////////// NETTOYAGE DE LA RAM BANK 0 /////////////////////////////
; /////////////////////////////////////////////////////////////////////////////////////////////////
	Xor 	a					; on met 0 dans A
	ld hl,#0000				; début à effacer en #0FFF
	ld e,l									
	ld d,h									
	inc de					; on incrémente de 1 l'adresse à effacer
	ld (hl),a					; et on met 0 dans l'octet de l'adresse 
	LD BC,#4000		        	; sur une longueur de #4000
	ldir		

Y'a t'il plus court en ligne de code ? (même si y'a plus de NOP je m'en tape)

signé, Zisquier

proverbe de pro-CPC : « çà sert à rien d'avoir des sprites hard et un scroll fluide avec des graph sont dégueu, une palettes moches et un jeu vide»

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 11:28 #66 par BDCIron
Réponse de BDCIron sur le sujet Nettoyer une bank avec LDIR
Ca irait 10000 fois plus vite avec la pile...
Tu mets la pile en fin de bank, tu fous genre LD HL,0
Puis: PUSH HL:PUSH HL:PUSH HL... Autant de fois qu'il faut pour faire un gros bloc de push et une boucle pour répéter ça quand même un minimum et pas à avoir à en mettre trop ^^

16384 avec LDIR= 6*16383 + 5= 98309 NOPS !!!
16384 avec PUSH: 8192*4= 32768 NOPS...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 20:08 #71 par ZISQUIER
Réponse de ZISQUIER sur le sujet Nettoyer une bank avec LDIR
Ah oui je comprends, c'est ce que roud a fait dans l'init de la cartouche. Apres si avec un compteur et un djnz ça peut se faire, peut importe le temps machine, je veux juste compacter les ligne de commande en un minimum d'instruction

signé, Zisquier

proverbe de pro-CPC : « çà sert à rien d'avoir des sprites hard et un scroll fluide avec des graph sont dégueu, une palettes moches et un jeu vide»

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 20:13 #72 par ZISQUIER
Réponse de ZISQUIER sur le sujet Nettoyer une bank avec LDIR
Donc si je fait genre :
Ld hl,0
Ld b,16000     ; et des banannes
Efface
Push hl
Djnz Efface

Ça marche ça ?

signé, Zisquier

proverbe de pro-CPC : « çà sert à rien d'avoir des sprites hard et un scroll fluide avec des graph sont dégueu, une palettes moches et un jeu vide»

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 21:24 #74 par BDCIron
Réponse de BDCIron sur le sujet Nettoyer une bank avec LDIR
Mets plus de PUSH. L'interet c'est dans aligner quelques uns si tu ne veux pas perdre l'avantage du gain de temps avec ton djnz.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 21:38 #76 par Deadsystem
Réponse de Deadsystem sur le sujet Nettoyer une bank avec LDIR
il pensait plus à un truc de ce style

org &2000
adresseBank equ &4000 ; adresse bank a vider

di ; arret interruptions
ld (pile+1),sp ; sauve la pile
ld sp,adresseBank+&4000 ; sp=adresse bank+longueur

ld hl,0 ; vide hl
ld bc,&20FF ; longueur banque /2 + des broutilles
bcl: push hl ; envois hl dans sp
dec bc ; decompte bc
ld a,b ; a=b
or a ; or a
jr nz,bcl ; si =0 boucle finie
pile : ld sp,&0000 ; on remets la pile
ei ; le interrupetions
ret ; on quitte

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 21:47 - 27 Juil 2020 21:49 #77 par Deadsystem
Réponse de Deadsystem sur le sujet Nettoyer une bank avec LDIR
dans ton cas un petit truc de ce genre devrait le faire assez rapidement ;)
org &2000
adresseBank equ &0000 ; adresse bank a vider
di ; arret interruptions
ld (pile+1),sp ; sauve la pile
ld sp,adresseBank+&4000 ; sp=adresse bank+longueur
ld hl,0 ; vide hl
ld bc,&200 ; longueur banque /32 + des broutilles
bcl: defs 16,&E5 ; on écrit 16x PUSH HL, sans se fatiguer
dec bc ; decompte bc
ld a,b ; a=b
or a ; or a
jr nz,bcl ; si =0 boucle finie
pile : ld sp,&0000 ; on remets la pile
ei ; les interruptions
ret ; on quitte
Dernière édition: 27 Juil 2020 21:49 par Deadsystem.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
27 Juil 2020 23:10 #78 par ZISQUIER
Réponse de ZISQUIER sur le sujet Nettoyer une bank avec LDIR
Alors oui les gars je comprends bien, mais comme j'ai pas besoin de gagner de temps mais plutôt de la place, c'est pour ça que j'ai mis qu'un seul Push HL. Amaury ok je peut mettre plus de push hl, mais ça prends p'us de place aussi.

signé, Zisquier

proverbe de pro-CPC : « çà sert à rien d'avoir des sprites hard et un scroll fluide avec des graph sont dégueu, une palettes moches et un jeu vide»

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
28 Juil 2020 12:13 #79 par BDCIron
Réponse de BDCIron sur le sujet Nettoyer une bank avec LDIR

Deadsystem écrit: dans ton cas un petit truc de ce genre devrait le faire assez rapidement ;)
org &2000
adresseBank equ &0000 ; adresse bank a vider
di ; arret interruptions
ld (pile+1),sp ; sauve la pile
ld sp,adresseBank+&4000 ; sp=adresse bank+longueur
ld hl,0 ; vide hl
ld bc,&200 ; longueur banque /32 + des broutilles
bcl: defs 16,&E5 ; on écrit 16x PUSH HL, sans se fatiguer
dec bc ; decompte bc
ld a,b ; a=b
or a ; or a
jr nz,bcl ; si =0 boucle finie
pile : ld sp,&0000 ; on remets la pile
ei ; les interruptions
ret ; on quitte


alors oui, mais avec ta boucle tu perds du temps.

DEC B; tu décrémentais BC déjà donc bon... T'as un bug ^^ 1 Nop
LD A,B ; 1Nop
OR A ; 1Nop
JR nz, ;2 Nops

Soit 5 nops, DJNZ en prend 4, soit 1 NOP de moins par bouclage

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
28 Juil 2020 12:14 #80 par BDCIron
Réponse de BDCIron sur le sujet Nettoyer une bank avec LDIR
Thomas: peux-tu faire une map de ta ram qu'on voit ce qu'il y a dedans car je trouve étrange que tu sois en manque de place.

Connexion ou Créer un compte pour participer à la conversation.