; ; Programme d'exemple de rupture simple ; par OffseT 1994 pour Quasar CPC 7 ; ; Gestion de 3 ruptures classiques ; Org &8000 Nolist ; ; Initialisations ; di ; On coupe les interruptions ld hl,(&38) ; On lit l'ancienne interruption ld (inter+1),hl ; et on la sauve. ld hl,&c9fb ; On remplace tout \a par ld (&38),hl ; du neuf (EI,RET) ei ; On remet les interruptions ; Formatage de l'{cran ld bc,&bc00+3 ; On met la valeur 8 dans out (c),c ; le registre 3 du CRTC ld bc,&bd00+8 ; afin de rester compatible out (c),c ; avec les CRTC type 2 ld bc,&bc00+2 ; pour lesquels la valeur out (c),c ; 50 est autrement impossible ld bc,&bd00+50 ; @ mettre dans le registre 2 out (c),c ; On met ensuite le registre 1 ld bc,&bc00+1 ; @ la valeur 48 ce qui out (c),c ; nous fait un {cran de ld bc,&bd00+48 ; 96 octets de large, out (c),c ; un overscan complet quoi ! ; Offset rupture 1 ld bc,&bc00+12 ; On initialise l'offset out (c),c ; qui sera celui de la ld bc,&bd00+&30 ; premi}re rupture avant le out (c),c ; programme principal afin ld bc,&bc00+13 ; d'etre sur que tout marchera out (c),c ; sur tous les CRTC car certains ld bc,&bd00+0 ; certains refusent de modifier out (c),c ; l'offset pendant la VBL ; Programme Principal ; Attente de la VBL Prog ld b,&f5 ; On attend gentiment Synchro in a,(c) ; que le canon @ {lectron rra ; entame sa remont{e vers jr nc,synchro ; le haut de l'{cran. ; Pr{paration des ruptures ld bc,&bc00+7 ; On met le registre 7 en overflow out (c),c ; pour ne pas etre embeter par des ld bc,&bd00+255 ; des zones de VBL intempestives au out (c),c ; milieu de nos ruptures. ld b,255 ; Une petite boucle d'attente pour que djnz $ ; les CRTC qui refusent de travailler ; pendant la VBL ne soient pas gen{s. ; Gestion des ruptures ; Rupture 1 ld bc,&bc00+4 ; On met le registre 4 @ 14 out (c),c ; ce qui signifie que le ld bc,&bd00+14 ; premier {cran fera 15 out (c),c ; lignes de haut. ; Offset rupture 2 ld bc,&bc00+12 ; On pr{pare le nouvel out (c),c ; offset pour la rupture ld bc,&bd00+&20 ; 2 afin que celui-ci out (c),c ; soit pris en compte au ld bc,&bc00+13 ; bouclage du compteur du out (c),c ; registre 4 de notre ld bc,&bd00+0 ; brave petit CRTC out (c),c ; ador{... ; Rupture 2 halt ; On attend que le premier halt ; {cran ait {t{ compl}tement halt ; balay{ et que le compteur ld bc,&bc00+4 ; du registre 4 ait boucl{ out (c),c ; puis on charge la nouvelle ld bc,&bd00+12 ; hauteur, 13 lignes de out (c),c ; caract}res ici. ; Offset rupture 3 ld bc,&bc00+12 ; On pr{pare le nouvel out (c),c ; offset pour la rupture ld bc,&bd00+&10 ; 3 afin que celui-ci out (c),c ; soit pris en compte au ld bc,&bc00+13 ; bouclage du compteur du out (c),c ; registre 4 de notre ld bc,&bd00+0 ; brave petit CRTC out (c),c ; ador{... ; Rupture 3 halt ; On attend la fin de la halt ; rupture 2 et on commande ld bc,&bc00+4 ; au CRTC la hauteur de out (c),c ; l'{cran suivant, ici ld bc,&bd00+10 ; c'est le dernier et il out (c),c ; fait 11 lignes. ; Offset rupture 1 ld bc,&bc00+12 ; On bufferise l'offset out (c),c ; de la premi}re rupture ld bc,&bd00+&30 ; qui sera pris en compte out (c),c ; apr}s la VBL. On le fait ld bc,&bc00+13 ; @ l'avance car certains out (c),c ; CRTC un peu fain{ants ld bc,&bd00+0 ; refusent de travailler out (c),c ; pendant la VBL. ; Fin des ruptures ld bc,&bc00+7 ; On remet le registre 7 @ out (c),c ; 0 pour que le CRTC puisse ld bc,&bd00+0 ; se remettre de ses {motions out (c),c ; sinon plus de synchro ! ; Test clavier ; Barre espace ld bc,&f40e ; Rien @ dire ici car out (c),c ; ce n'est pas le sujet ! ld bc,&f6c0 out (c),c xor a out (c),a ld bc,&f792 out (c),c ld bc,&f645 out (c),c ld b,&f4 in a,(c) ld bc,&f782 out (c),c ld bc,&f600 out (c),c rla jp c,prog ; ; R{initialisations ; ; Ecran en mode standard ld bc,&bc00+12 ; On se remet l'offset out (c),c ; standard avec l'{cran ld bc,&bd00+&30 ; log{ en &C000 pour ne out (c),c ; pas avoir de gribouillis ld bc,&bc00+13 ; au retour au BASIC... out (c),c ; Puis on enchaine sur la ld bc,&bd00+0 ; remise @ l'{tat standard out (c),c ; de tous les autres ld bc,&bc00+4 ; registre du CRTC. out (c),c ; Registre 4 @ 38, d}s la ld bc,&bd00+38 ; prochaine VBL tout va out (c),c ; rentrer dans l'ordre. ld bc,&bc00+7 ; Registre 7 @ la valeur 30 out (c),c ; pour recader l'{cran en ld bc,&bd00+30 ; hauteur. out (c),c ; Puis on remet l'{cran ld bc,&bc00+2 ; en place en largeur out (c),c ; avant de remettre le ld bc,&bd00+46 ; registre 3 @ 142 qui out (c),c ; nous avait servi @ ld bc,&bc00+3 ; faire suivre le CRTC out (c),c ; type 2 qui plante ld bc,&bd00+142 ; autrement avec le out (c),c ; registre 2 @ 50. ld bc,&bc00+1 ; Et puis pour finir, out (c),c ; on se remet la bonne ld bc,&bd00+40 ; largeur pour ne pas out (c),c ; perdre ce pauvre BASIC. ; Interruptions standard di ; On coupe tout ! Inter ld hl,0 ; On remet le vieux ld (&38),hl ; mod}le et on ei ; remet en marche ! ret ; Heu... ; Surtout, veillez bien @ ce que la somme de la hauteur de ; tous les {crans soit {gale @ 39 (hauteur = registre 4 + 1). e de rupture simple ; par OffseT 1994 pour Quasar CPC 7 ; ; Gestion de 3 ruptures classiques ;