Amstrad Plus Index du Forum

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

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

*****Raster sous interruption

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation
Sujet précédent :: Sujet suivant  
Auteur Message
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 237

MessagePosté le: Mer 26 Oct - 14:31 (2016)    Sujet du message: *****Raster sous interruption Répondre en citant

Il y a quelques temps déjà, Kukulcan m'a demandé de lui concocter une routine de raster pour le jeu qu'il présentera prochainement à la Retrodev 2016, VirusDog!

Cette routine de raster se devait d'être "spéciale" puisqu'elle devait fonctionner sous interruption. Après plusieurs heures de réflexions,
j'ai enfin réussi à synchroniser ces foutus rasters, mais pas sans mal...

Kukulcan l'ayant utilisé pour une intro de Deckard présentant son prochain Stream "Halloween 2016", je vous propose donc aujourd'hui
cette routine en avant première.

Code:

; Raster sous interruption+ Retour Basic
; ---AsT/iMPAct
; ----- Kukulcan/Cpc Power Force 5
; ------ Longshot/Logon System (très fortement inspiré)

; call &a000 ; affiche les rasters sous interruption
; call &a003 ; desactive les rasters sous interruption

       org #a000

            jp init        ; Routine installee 
            jp restore      ; Routine desinstallee 
vecteur jp interrupt ; nouvelle routine d'interrupt
;
tabint     Word int1 
;          Word int2 ; je supprime volontairement la 2ème int car la table de raster fait 104 lignes (2x52 lignes) 
           Word int3 
           Word int4 
           Word int5 
           Word int6 
           Word int1
;
oldvect fill 3,0 ; sauve 3 octets du vecteur d'int 

init
        DI                       
        ld hl,(#39)
        ld de,oldvect
        ldi:ldi:ldi
        ld e,(hl):ld d,0 ; recup octet de depl pour retour1
        inc hl
        ld (retour2+1),hl
        add hl,de
        ld (retour1+1),hl
        ld de,vecteur
        ld hl,(#39)
        ex de,hl
        ldi:ldi:ldi
;
        ei
        ret

restore
        di 
        ld hl,(#39) 
        ld de,oldvect        
        ex de,hl        
        ldi:ldi:ldi 
        ei 
        ret 

; Routine Interruption 

interrupt 
        push af:push bc:push de:push hl 
        ld hl,cpt+1    ; compteur Interruption
        ld b,#f5    
        in a,(c) 
        rra 
        jr nc,gereint 
        LD (hl),255       ; reset compteur interruption 
gereint
        inc (hl)      
;
;       
cpt     ld a,0 
        cp 5            
        jr c,notsup            
        xor a  ; reset compteur 
notsup 
        add a,a               ; a=a*2
        ld l,a 
        ld h,tabint/256 
        ld bc,9
        add hl,bc 

        ld a,(hl)         
        inc l 
        ld h,(hl) 
        ld l,a 
        ld bc,back       
        push bc 
        jp (hl)         
back 
        pop hl:pop de:pop bc:pop af 
        ex af,af'


retour1   jp c,#caca ; adresse pour le retour basic si la carry est vraie
retour2   jp #dead   ; sinon c'est ici que ça se passe


int1                ; 1ere int
      fill 20,0
;
      ld hl,table ; table des couleurs du raster
      ld bc,#7F10
      ld e,104-1 ; 104 lignes de haut
;
b1    out (c),c ; sélectionne border
      ld a,(HL)
      out (c),a ; envoie l'encre
      out (c ),0 ; selectionne le pen 0
      out (c),a ; envoie l'encre
      inc hl
      fill 64-16-8,0
      dec e
      jr nz,b1 
      ld a,(hl):out (c),a
      ret

int2  ret  ; 2ème int

int3 ld bc,#7F10 ; 3ème int
      ld a,#54      ; on remet le border et le pen 0
      out (c),c      ; a l'encre 0
      out (c),a

      out (c),0

      out (c),a

; on rempli la table des rasters de 104 couleur 0 (#54)
;
     ld b,104     ; nb de lignes
      ld hl,table  ; pointe sur la table des rasters
      ld a,#54    ; couleur du fond à copier
loop ld (hl),a
      inc l
      djnz loop
;

; Mouvement des rasters
; HL pointe sur une table sinus qui s'incremente à chaque VBL
; créant ainsi le mouvement y du raster
;
tb    ld hl,tbcos 
      ld a,(hl)
      inc l
      ld (tb+1),hl
      ld (modif+1),a
;
tb2   ld hl,tbcos+#10
      ld a,(hl)
      inc l
      ld (tb2+1),hl
      ld (modif2+1),a
;
tb3   ld hl,tbcos+#20
      ld a,(hl)
      inc l
      ld (tb3+1),hl
      ld (modif3+1),a
;
tb4   ld hl,tbcos+#30
      ld a,(hl)
      inc l
      ld (tb4+1),hl
      ld (modif4+1),a
;
tb5   ld hl,tbcos+#40
      ld a,(hl)
      inc l
      ld (tb5+1),hl
      ld (modif5+1),a
;
tb6   ld hl,tbcos+#50
      ld a,(hl)
      inc l
      ld (tb6+1),hl
      ld (modif6+1),a
      ret

int4    ret ; 4ème int 

int5                   ; 5ème int

;
; Création de rasters de 3 lignes
;
modif  ld hl,table 
      ld (hl),#4c ; rouge
      inc hl
      ld (hl),#4b ; blanc
      inc hl
      ld (hl),#4c ; rouge
;
modif2  ld hl,table+19
      ld (hl),#4e ; orange
      inc hl
      ld (hl),#4b ; blanc
      inc hl
      ld (hl),#4e ; orange
;
modif3  ld hl,table+39
      ld (hl),#4a ; jaune
      inc hl
      ld (hl),#4b ; blanc
      inc hl
      ld (hl),#4a ; jaune
;
modif4  ld hl,table+59
      ld (hl),#49 ; jaune clair
      inc hl
      ld (hl),#4b ; blanc
      inc hl
      ld (hl),#49 ; jaune clair
;
modif5  ld hl,table+79
      ld (hl),#5a ; vert clair
      inc hl
      ld (hl),#4b ; blanc
      inc hl
      ld (hl),#5a ; vert clair
;
modif6  ld hl,table+99
      ld (hl),#52 ; vert
      inc hl
      ld (hl),#4b ; blanc
      inc hl
      ld (hl),#52 ; vert

      ret 

int6 ; 6ème int
  
      fill 22+4,0
      ld bc,#7F10
      ld a,#44
      out (c),c
      out (c),a

      out (c),0

      out (c),a
;
;
      ei
      halt ; Ah tiens, un Halt ? pourquoi ? Devinez !      
      RET 

      org #A200
;
; On rempli la table avec la valeur de la couleur du fond
; ici #54

table 
      fill 255,#54
;
      org #A300
;
; Ici se trouve la table de cosinus que vous aurez précalculée en basic
;
tbcos            ; table de cosinus





_________________
Ast/iMP4CT

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


Revenir en haut
Publicité






MessagePosté le: Mer 26 Oct - 14:31 (2016)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com