; http://www.cpcrulez.fr
; ORG #a000 ; ENT $ ; ;rasters (c) 1990 Pour Noix De Croco No 5... Par DUFFY ; ;attention, revenir sous basic pour faire le CALL &A000 et presser la petite ;touche ENTER pour executer car si sous basic ou sous dams, vous pressez ;la grosse touche ENTER (ou RETURN), vous aurrez pas le temps de voir.... ; init ;met les rasters sous interruption CALL #bd19 ;pause pour pression de touche CALL #bd19 CALL #bd19 DI LD hl,(#39) LD (saut+1),hl ;met l'adresse de la routine a la LD hl,tub ;place du RST #38 qui est appele tous LD (#39),hl ;les 300e de seconde EI ;(le balayage ecran se fait tous le 50e bcl ;attente de touche EI HALT ;attend proch'interruption (les rasters DI ; clav ;ENTER/RETURN presse PUSH AF PUSH BC PUSH HL LD HL,stock LD BC,#F40E OUT (C),C LD B,#F6 IN A,(C) AND #30 LD C,A OR #C0 OUT (C),A OUT (C),C INC B LD A,#92 OUT (C),A PUSH BC SET 6,C clavlp LD B,#F6 OUT (C),C LD B,#F4 IN A,(C) LD (HL),A INC HL INC C LD A,C AND #0F CP #0A JR NZ,clavlp POP BC LD A,#82 OUT (C),A DEC B OUT (C),C POP HL POP BC POP AF ; LD a,(stock+2) CP #ff JP z,bcl ;si pas presse, continu rasters JP denit ;sinon fin ; stock DEFS 9,0 denit DI ;enleve la routine du rst #38 LD hl,(saut+1) ;et remet ancienne adresse LD (#39),hl EI RET ;retour basic ; adrtub1 DEFW tbtub1 ;pointe sur le tube couleur rouge adrtub2 DEFW tbtub2 ;couleur bleue adrtub3 DEFW tbtub3 ;en changeant les numeros, on adrtub4 DEFW tbtub4 ;change les couleurs de chaque tube adrtub5 DEFW tbtub2 adrtub6 DEFW tbtub5 adrtub7 DEFW tbtub5 adrtub8 DEFW tbtub2 adrtub9 DEFW tbtub4 adrtub10 DEFW tbtub3 adrtub11 DEFW tbtub2 adrtub12 DEFW tbtub1 ; notub1 DEFB 0 ;tube No 1 -> Locate vertical a 0 cotub1 DEFB 0 ;sens (0=descend, 1=monte) notub2 DEFB 10 ;locate sur hauter ecran cotub2 DEFB 0 ;descend notub3 DEFB 20 cotub3 DEFB 0 notub4 DEFB 30 cotub4 DEFB 0 notub5 DEFB 40 cotub5 DEFB 0 notub6 DEFB 50 cotub6 DEFB 0 notub7 DEFB 60 cotub7 DEFB 0 notub8 DEFB 70 cotub8 DEFB 0 notub9 DEFB 80 cotub9 DEFB 0 notub10 DEFB 90 cotub10 DEFB 0 notub11 DEFB 100 cotub11 DEFB 0 notub12 DEFB 110 cotub12 DEFB 0 notub13 DEFB 110 cotub13 DEFB 0 ; tub DI ; PUSH af ;bd19 PUSH bc LD b,#f5 ;balayage ecran en haut ? IN a,(c) RRA JP c,tuba ;si oui commence routine POP bc POP af JP saut ;si non alors fin tuba POP bc POP af ; PUSH hl ;sauve registres PUSH bc ;(sauf ix et iy mais c'est pas grave) PUSH af ; LD iy,adrtub1 ;iy pointe sur 1er tube LD ix,notub1 ;ix pointe sur sens du 1er tube LD b,12 ;nombre de tubes a afficher CALL tub1 ;met les dans table DEFS 59,0 ;pause pour demarrer bien a gauche ; LD hl,table-1 ;hl pointe sur table a mettre sur ecran LD bc,#7f10 ;#10 = tub dans border (ink 16) tubloop INC hl ;augmente sur table LD a,(hl) ;prend couleur de la table OR a ;= 0 ? JP z,fin ;alors fin, tout est affiche ; OUT (c),c ;choisi ink OUT (c),a ;met couleur dans ink (ici ink=border) LD c,0 ;couleur 0 (paper) OUT (c),c OUT (c),a ;met-z-y couleur aussi LD c,#10 ;rechoisi border pour la prochaine fois DEFS 97,0 ;tub=2 lignes de haut (33 pour une) ; ; JP tubloop ;ligne suivante sur ecran fin POP af ;retire les registres sauves au debut POP bc POP hl ; saut JP #b941 ;saute a l'adresse normale du RST #38 ; tbtub2 DEFB #54,#44,#55,#5d,#5f,#53 ;couleurs tube rouge DEFB #5f,#55,#44,#54,#54 ; tbtub1 DEFB #54,#5c,#4c,#4e,#4a,#4a ;couleurs tube bleu DEFB #4e,#4c,#5c,#54,#54 tbtub3 DEFB #54,#56,#52,#42,#59,#59 ;couleurs tube vert DEFB #42,#52,#56,#54,#54 tbtub4 DEFB #54,#58,#45,#4d,#4f,#4f ;couleurs tube violet DEFB #4d,#45,#58,#54,#54 tbtub5 DEFB #54,#4e,#4a,#43,#4b,#4b ;couleurs tube jaune DEFB #43,#4a,#4e,#54,#54 ; table ;ici la table a afficher sur l'ecran DEFS 132,#54 ;nb lignes de haut DEFW 0 ;fin par 2 zeros par securite ; tub1 ;affiche tube dans la table ci-dessus LD a,(ix+1) ;sens de deplacement tube ? OR a ;descend ? LD a,(ix+0) ;met position vertical dans A JP nz,tub1m ;si non (descend?), va a monte ! ; tub1d ;routine qui fait descendre le tube act INC a CP 121 ;tube sur derniere ligne ? (130+11) JP nz,tub1ds ;non alors continu LD (ix+1),a ;sinon met valeur dans sens LD hl,table ;debut table dans HL LD d,0 LD e,a ;position locate dans DE ADD hl,de ;additionne le tout EX de,hl ;et on a le position absolue dans DE LD h,(iy+01) LD l,(iy+00) ;hl=adresse couleurs du tube actuel JP trans ;transfert sur table ; tub1ds ;descend LD (ix+0),a ;stocke position actuelle tub1ds2 LD hl,table ;meme scenario que 11 ligne + haut LD d,0 LD e,a ADD hl,de EX de,hl LD h,(iy+01) LD l,(iy+00) JP trans ; tub1m ;fait monter tubular DEC a ;tube tout en haut ? CP 0 ;(pas OR A, faut meme duree que CP 130) JP nz,tub1ms ;si non continu LD (ix+1),a ;si oui, stocke sens LD hl,table ;et rememe scenario LD d,0 ;(transfert sur table) LD e,a ADD hl,de EX de,hl LD h,(iy+01) LD l,(iy+00) JP trans tub1ms LD (ix+0),a tub1msx LD hl,table LD d,0 LD e,a ADD hl,de EX de,hl LD h,(iy+01) LD l,(iy+00) JP trans ;oui, je sais, le Jp ci-dessus va juste en dessous, mais c'est pour avoir ;toujours la meme duree d'execution par sens... trans PUSH bc ;sauve compteur de tube LDI ;transfert des 11 lignes de couleurs LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI POP bc INC ix ;pointeur sur position du tube suivant INC ix INC iy ;pointeur sur sens du tube suivant INC iy DEC b ;compteur de tube a zero ? JP nz,tub1 ;si non, on affiche un autre tube ; RET ;retour a l'affichage sur ecran ; |