; "Rolling Sprite" ; ; Par OffseT 1993 / Quasar CPC 3 ; Adapt{ par SNN pour Quasar CPC 8 Org &9000 Nolist Limit &a000 LargeurEcran Equ &50 TableX Equ &5000 ; Table Ox TableY Equ &4800 ; Table Oy TableAdr Equ &8000 ; Adresses Sprite Equ &4000 ; Sprite Largeur Equ 30 ; Largeur Hauteur Equ 32 ; Hauteur Taille Equ largeur*hauteur OffAdr Equ taille+sprite-1 ; ; Initialisation ; ; Pokage des LDD ld hl,pokeldd ld de,pokeldd+2 ld bc,2*largeur-2 ldir ; G{n{ration de la table d'adresses di ld (pile),sp ; (1) ld sp,tableadr ld hl,0 push hl ld de,tabley ; (2) LoopT40 ld hl,&c000+largeur+10 ld a,(de) or a jp z,saute cp 255 jp z,nextt4 ld b,a LoopT4 push bc call bc26 pop bc djnz loopt4 Saute ld a,(tablex) push bc ld c,a ld b,0 add hl,bc ; (3) pop bc push hl ld hl,(saute+1) inc hl ld (saute+1),hl inc de jp loopt40 NextT4 ld (start),sp ld sp,(pile) ld hl,tablex ; (4) ld (saute+1),hl ld hl,(start) ld (posit4),hl ei ; ; Programme principal ; Prog ld b,&f5 Synchro in a,(c) rra jr nc,synchro call offset ; Test clavier di ld bc,&f40e out (c),c 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 ei rla jp c,prog ; Exit ret ; Affichage du Rolling Sprite Init04 ld sp,(start) ; (5) pop hl jp return1 Init042 ld sp,(start) pop hl jp return2 Offset di ld (pile),sp ld sp,(posit4) pop hl ld a,h or l jr z,init04 Return1 ld (posit4),sp ld de,offadr ld b,hauteur Loop1 ex de,hl PokeLDD ldd ds 2*largeur-2 ex de,hl pop hl ld a,h or l jr z,init042 Return2 djnz loop1 ld sp,(pile) ei ret BC26 ld a,h add a,8 ld h,a ret nc ld bc,&c000+largeurecran add hl,bc ret ; ; Data ; Posit4 dw 0 Start dw 0 Pile dw 0PC 3 ; Adapt{ par SNN pour Quasar CPC 8 Org &9000 Nolist Limit &a000