Pl3 EX ASS 2.S: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
 
<pre>
 
<pre>
 
 
  +
*** ILLUSTRATION DES OPERATIONS SUR LA RAM VIDEO ET L'ECRAN LOGIQUE ***
*HEXER SPRITE DEMO, 12/88*
 
 
 
anz equ 5
 
   
  +
move.l a7,a5 ;Initialise le TOS
pea 0
 
  +
lea pile,a7
  +
move.l 4(a5),a5
  +
move.l $c(a5),d0
  +
add.l $14(a5),d0
  +
add.l $1c(a5),d0
  +
add.l #$100,d0
  +
move.l d0,-(sp)
  +
move.l a5,-(sp)
  +
move #0,-(sp)
  +
move #$4a,-(sp) ;SETBLOCK
  +
trap #1
  +
add.l #12,sp
  +
  +
  +
clr.l -(sp) ;super
 
move #$20,-(sp)
 
move #$20,-(sp)
 
trap #1
 
trap #1
Line 11: Line 25:
 
move.l d0,ssp
 
move.l d0,ssp
 
 
lea stack,a7
 
 
 
  +
* ECRIRE sur PHYS puis LOG et poser LOG sur PHYS *
move.b $ff8260,rezsave
 
move.b $ff820a,palsave
 
movem.l $ff8240,d0-d7
 
movem.l d0-d7,palettesave
 
 
 
move.w #2,-(sp)
+
move.l #INTRO,-(sp) ;Texte sur PHYS
  +
move.w #$09,-(sp)
trap #14
 
  +
trap #1
  +
addq.l #6,sp
  +
  +
move #7,-(sp) ;TOUCHE
  +
trap #1
 
addq.l #2,sp
 
addq.l #2,sp
move.l d0,oldram
 
 
 
  +
move.l #ecran+256,d0 ;adresse LOG
bsr vsync
 
  +
and.l #$ffffff00,d0 ;divisible par 256
  +
move.l d0,a0 ;a0=LOG
  +
move.l $44e,a5 ;a5=PHYS
  +
 
 
move.b #0,$ff8260
 
move.b #2,$ff820a
 
 
 
  +
*** On ecrit sur le PHYS ***
movem.l palette,d0-d7
 
movem.l d0-d7,$ff8240
 
 
 
move.l #bildschirme+256,d0
 
and.l #$ffffff00,d0
 
 
move.l d0,vidram
 
add.l #32000,d0
 
move.l d0,logram
 
bsr setbild
 
 
*effacer l'ecran *42
 
 
moveq #0,d1
 
move.l vidram,a0
 
move #15999,d0
 
 
clloop move.l d1,(a0)+
 
dbra d0,clloop
 
 
*cylindres *49
 
 
gesamte_zeile move.l vidram,a0
 
move.l logram,a1
 
add.l #160*50,a0
 
add.l #160*50,a1
 
moveq #99,d7
 
move.l #$8787ffff,d0
 
move.l #$55556666,d1
 
bildinit_noch_eine_zeile moveq #19,d6
 
bildinit_gesamte_zeile move.l d1,(a0)+
 
move.l d0,(a0)+
 
move.l d1,(a1)+
 
move.l d0,(a1)+
 
dbra d6,bildinit_gesamte_zeile
 
swap d0
 
rol.w #2,d0
 
swap d0 ;d1 ??????
 
rol.l #2,d1
 
dbra d7,bildinit_noch_eine_zeile
 
 
******************************** 73
 
   
  +
main:
 
  +
move.l #7999,d0 ;Write of PHYS
  +
moveq.l #-1,d1
  +
move.l a5,a6
  +
cr:
  +
move.l d1,(a6)+
  +
dbf d0,cr
   
  +
lea sppuffer,a2
 
  +
move.l #TEXTE,-(sp) ;Texte sur PHYS
lea daten,a0
 
  +
move.w #$09,-(sp)
lea masken,a1
 
move #0,d7
+
trap #1
  +
addq.l #6,sp
 
 
  +
move #7,-(sp) ;TOUCHE
spinitloop:
 
  +
trap #1
  +
addq.l #2,sp
   
  +
movem.l d7/a0-a2,-(sp)
 
  +
*** On ecrit sur le LOG ***
bsr preshift
 
  +
movem.l (sp)+,d7/a0-a2
 
  +
add.l #6144,a2
 
  +
add.l #128,a0
 
  +
move.l #7999,d0 ;Write of LOG
add.l #32,a1
 
  +
moveq.l #-1,d1
dbra d7,spinitloop
 
  +
move.l a0,a6
  +
acr:
  +
move.l d1,(a6)+
  +
dbf d0,acr
 
 
  +
move.l a0,d5 ;a0= LOG
*99
 
  +
lsr.l #8,d5 ;MMU --> PHYS devient LOG
  +
move.b d5,$ff8203 ;on travaille sur LOG
  +
lsr.l #8,d5 ;(On change le PHYS sous LOG)
  +
move.b d5,$ff8201 ;¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹
 
 
lea savepuffer,a0
 
move #anz-1,d0
 
spcloop:
 
clr.l (a0)
 
add.l #262,a0
 
clr.l (a0)
 
add.l #262,a0
 
dbra d0,spcloop
 
 
 
move #anz-1,d4
+
move #7,-(sp) ;TOUCHE
  +
trap #1
lea x,a3
 
lea y,a4
 
lea xg,a5
 
lea yg,a6
 
kinitloop move #17,-(sp)
 
trap #14
 
 
addq.l #2,sp
 
addq.l #2,sp
moveq #0,d1
 
move.w d0,d1
 
 
 
**** page 103
 
*************
 
 
 
divu #336,d1
 
swap d1
 
move.w d1,(a3)+
 
move.w #17,-(sp)
 
trap #14
 
addq.l #2,sp
 
moveq #0,d1
 
move.w d0,d1
 
divu #216,d1
 
swap d1
 
move.w d1,(a4)+
 
move #17,-(sp)
 
trap #14
 
addq.l #2,sp
 
move d0,d1
 
lsr #1,d1
 
and #1,d0
 
and #1,d1
 
tst d0
 
bne xgi1
 
move #-1,d0
 
xgi1:
 
tst d1
 
bne ygi1
 
move #-1,d1
 
ygi1:
 
move d0,(a5)+
 
move d1,(a6)+
 
dbra d4,kinitloop
 
 
 
  +
*** On pose LOG sur PHYS ***
testloop:
 
  +
  +
move.l a5,d5 ;a5= PHYS
  +
lsr.l #8,d5 ;MMU --> LOG devient PHYS
  +
move.b d5,$ff8203 ;on d‚pose le LOG sur PHYS
  +
lsr.l #8,d5 ;(le PHYS chang‚ revient)
  +
move.b d5,$ff8201 ;¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹
   
  +
move #7,-(sp) ;TOUCHE
bsr vsync
 
lea anz*262*2+savepuffer,a6
 
move #anz-1,d5
 
spundrawloop:
 
sub.l #524,a6
 
move.l a6,a0
 
bsr spriteundraw
 
dbra d5,spundrawloop
 
 
*173
 
 
lea savepuffer,a3
 
lea x,a5
 
lea y,a6
 
move #anz-1,d7
 
stdrawloop:
 
move (a5)+,d0
 
move (a6)+,d1 *autre cote***********
 
moveq #0,d2
 
move d7,-(sp)
 
 
move.l a3,-(sp)
 
bsr sprite
 
 
move.l (sp)+,a3
 
move (sp)+,d7
 
add.l #524,a3
 
dbra d7,stdrawloop
 
 
lea x,a2
 
lea y,a3
 
lea xg,a4
 
lea yg,a5
 
move #anz-1,d7
 
kcalcloop:
 
move (a2),d0
 
move (a3),d1
 
add (a4),d0
 
 
bpl xok1
 
neg.w (a4)
 
addq.w #2,d0
 
xok1:
 
add (a5),d1
 
bpl yok1
 
neg.w (a5)
 
addq.w #2,d1
 
yok1:
 
cmp #336,d0
 
bcs xok2
 
neg.w (a4)
 
subq #2,d0
 
xok2:
 
cmp #216,d1
 
bcs yok2
 
neg.w (a5)
 
subq #2,d1
 
yok2:
 
move d0,(a2)+
 
move d1,(a3)+
 
addq.l #2,a4
 
addq.l #2,a5
 
dbra d7,kcalcloop
 
 
bsr bildchange
 
not saveindex
 
 
move #$b,-(sp) *page 104***********
 
 
trap #1
 
trap #1
 
addq.l #2,sp
 
addq.l #2,sp
tst d0
 
beq testloop
 
 
 
move #7,-(sp)
 
trap #1
 
addq.l #2,sp
 
 
 
  +
move.l ssp,-(sp) ;USER
bra exit
 
 
;*************************253
 
 
exit:
 
bsr vsync
 
move.b palsave,$ff820a
 
move.b rezsave,$ff8260
 
movem.l palettesave,d0-d7
 
movem.l d0-d7,$ff8240
 
move.l oldram,d0
 
bsr setbild
 
 
move.l ssp,-(sp)
 
 
move #$20,-(sp)
 
move #$20,-(sp)
 
trap #1
 
trap #1
 
addq.l #6,sp
 
addq.l #6,sp
  +
 
clr.W -(sp)
+
clr.w -(sp) ;PTERM
 
trap #1
 
trap #1
 
 
setbild:
 
lsr.l #8,d0
 
move.b d0,$ff8203
 
lsr #8,d0
 
move.b d0,$ff8201
 
rts
 
 
 
  +
SECTION DATA
bildchange:
 
 
move.l logram,d0
 
move.l vidram,logram
 
move.l d0,vidram
 
bra setbild
 
 
 
  +
TEXTE DC.B 27,'Y',32,32,' TEXTE ‚crit sur l',39,'‚cran LOGIQUE et pos‚ sur',10,13
vsync:
 
  +
DC.B ' l',39,'‚cran PHYSIQUE ... blablabla :',10,13
move #37,-(sp)
 
trap #14
 
addq.l #2,sp
 
rts
 
 
 
  +
REPT 22
************291
 
  +
DC.B 'textetextetextetextetextetextetextetextetexte',10,13
  +
ENDR
 
 
  +
DC.B 0
preshift:
 
move #15,d7
 
spinitloop0:
 
moveq #0,d0
 
move.w (a1),(a2)+
 
move.w (a1)+,(a2)+
 
move.l d0,(a2)+
 
move.l (a0)+,(a2)+
 
move.l (a0)+,(a2)+
 
move.l d0,(a2)+
 
move.l d0,(a2)+
 
dbra d7,spinitloop0
 
 
move #14,d7
 
spinitloop1:
 
lea -384(a2),a3
 
move #15,d6
 
spinitloop2:
 
move.w (a3),d0
 
swap d0
 
move.w 4(a3),d0
 
lsr.l #1,d0 *******a cote
 
not.l (a3)+
 
not.l (a3)+
 
move.w d0,4(a2)
 
move.w d0,6(a2)
 
swap d0
 
move.w d0,(a2)
 
move.w d0,2(a2)
 
addq.l #8,a2
 
 
move.w (a3),d0
 
swap d0
 
move.w 8(a3),d0
 
lsr.l #1,d0
 
move.w d0,8(a2)
 
swap d0
 
move.w d0,(a2)
 
addq.l #2,a2 ***335
 
addq.l #2,a3
 
move.w (a3),d0
 
swap d0
 
move.w 8(a3),d0
 
lsr.l #1,d0
 
move.w d0,8(a2)
 
swap d0
 
move.w d0,(a2)
 
addq.l #2,a2
 
addq.l #2,a3
 
move.w (a3),d0
 
swap d0
 
move.w 8(a3),d0
 
lsr.l #1,d0
 
move.w d0,8(a2)
 
swap d0
 
move.w d0,(a2)
 
addq.l #2,a2
 
addq.l #2,a3
 
move.w (a3),d0
 
swap d0 **356
 
move.w 8(a3),d0
 
lsr.l #1,d0
 
move.w d0,8(a2)
 
swap d0
 
move.w d0,(a2)
 
add.l #10,a2
 
add.l #10,a3
 
dbra d6,spinitloop2
 
dbra d7,spinitloop1
 
lea -384(a2),a3
 
move #15,d0
 
 
nochinvertloop:
 
not.l (a3)
 
not.l 4(a3)
 
add.l #24,a3
 
dbra d0,nochinvertloop
 
rts
 
 
*************** 376
 
 
sprite:
 
tst saveindex
 
bpl savep1
 
add.l #262,a3
 
savep1:
 
addq #1,d0
 
move d0,d4
 
move d1,d5
 
lea sppuffer,a0
 
move d0,d3
 
and #15,d3
 
mulu #384,d3
 
mulu #6144,d2
 
add.l d2,d3
 
add.l d3,a0
 
 
*******page 105
 
 
and #$fff0,d0
 
lsr #1,d0
 
mulu #160,d1
 
add d0,d1
 
sub #2400+8,d1
 
 
move.l logram,a1
 
add.w d1,a1
 
 
move #15,d7
 
 
move d5,d6
 
sub #15,d6
 
bpl obenclipok
 
add d6,d7
 
bmi spabgang
 
neg.w d6
 
move d6,d0
 
mulu #24,d6
 
 
add.l d6,a0
 
mulu #160,d0
 
add.l d0,a1
 
 
obenclipok:
 
move #199,d6
 
sub d5,d6
 
bpl xclip
 
add d6,d7
 
bmi spabgang
 
 
xclip:
 
cmp #16,d4
 
bcs splinksclip
 
cmp #320,d4
 
bcc sprechtsclip
 
 
move.l #144,d6 *437
 
 
move.l a1,(a3)+
 
move.w d7,(a3)+
 
 
spritescanloop:
 
move.l (a1),(a3)+
 
move.l 4(a1),(a3)+
 
move.l 8(a1),(a3)+
 
move.l 12(a1),(a3)+
 
movem.l (a0)+,d0-d5
 
 
and.l d0,(a1)
 
 
and.l d0,4(a1)
 
and.l d1,8(a1)
 
and.l d1,12(a1)
 
 
or.l d2,(a1)+
 
or.l d3,(a1)+
 
 
or.l d4,(a1)+
 
or.l d5,(a1)+
 
 
add.l d6,a1
 
dbra d7,spritescanloop
 
rts
 
 
spabgang:
 
clr.l (a3)+
 
clr.l (a3)+
 
rts
 
 
splinksclip:
 
move.l #152,d6
 
addq.l #8,a1
 
 
move.l a1,(a3)+
 
move.w d7,(a3)+
 
bset #7,-2(a3)
 
 
spritescanloop1:
 
move.l (a1),(a3)+
 
move.l 4(a1),(a3)+
 
movem.l (a0)+,d0-d5
 
and.l d1,(a1)
 
and.l d1,4(a1)
 
or.l d4,(a1)+
 
or.l d5,(a1)+
 
add.l d6,a1
 
dbra d7,spritescanloop1
 
rts
 
 
*****cote suivant
 
   
  +
INTRO DC.B 27,'E','Compare l',39,'affichage normal avec celui'
sprechtsclip:
 
  +
DC.B ' LOG sur PHYS (L-P, 1/89)',0
cmp #336,d4
 
bcc spabgang
 
move.l #152,d6
 
 
 
move.l a1,(a3)+
 
move.w d7,(a3)+
 
bset #7,-2(a3)
 
 
spritescanloopr:
 
move.l (a1),(a3)+
 
move.l 4(a1),(a3)+
 
movem.l (a0)+,d0-d5
 
and.l d0,(a1)
 
and.l d0,4(a1)
 
or.l d2,(a1)+
 
or.l d3,(a1)+
 
add.l d6,a1
 
dbra d7,spritescanloopr
 
rts
 
 
***** 518
 
 
spriteundraw:
 
tst saveindex
 
bpl savep1und
 
add.l #262,a0
 
savep1und:
 
tst.l (a0)
 
beq noundraw
 
move.l (a0),a1
 
clr.l (a0)+
 
move.w (a0)+,d7
 
bmi halbundraw
 
 
move.l #160,d6
 
undrawloop:
 
movem.l (a0)+,d0-d3
 
movem.l d0-d3,(a1)
 
add.l d6,a1
 
dbra d7,undrawloop
 
noundraw:
 
rts
 
 
halbundraw
 
and #255,d7
 
move.l #152,d6
 
halbundrawloop:
 
move.l (a0)+,(a1)+
 
move.l (a0)+,(a1)+
 
add.l d6,a1
 
dbra d7,halbundrawloop
 
rts
 
 
palette dc.w $0,$700,$730,$750,$770,$470,$70,$75
 
dc.w $77,$111,$222,$333,$444,$555,$666,$777
 
 
daten:
 
 
dc.w $03C0,$07E0,$0000,$07E0,$0810,$1818,$07E0,$1FF8
 
dc.w $0000,$2004,$1FF8,$3FFC,$1310,$4C02,$3FFC,$7FFE
 
dc.w $4F12,$5C02,$3FFC,$7FFE,$0804,$9C09,$7FFE,$FFFF
 
dc.w $9411,$8805,$7FFE,$FFFF,$982B,$8005,$7FFE,$FFFF
 
dc.w $800B,$8005,$7FFE,$FFFF,$A155,$8009,$7FFE,$FFFF
 
dc.w $1994,$8009,$7FFE,$FFFF,$426A,$4012,$3FFC,$7FFE
 
dc.w $09D0,$4422,$3FFC,$7FFE,$0420,$23C4,$1FF8,$3FFC
 
dc.w $09D0,$1818,$07E0,$1FF8,$03C0,$07E0,$0000,$07E0
 
 
***** page 106
 
 
masken:
 
 
 
dc.w $07E0,$1FF8,$3FFC,$7FFE,$7FFE,$FFFF,$FFFF,$FFFF
 
dc.w $FFFF,$FFFF,$FFFF,$7FFE,$7FFE,$3FFC,$1FF8,$07E0
 
 
section bss
 
 
ssp ds.l 1
 
vidram ds.l 1
 
logram ds.l 1
 
oldram ds.l 1
 
 
rezsave ds.b 1
 
palsave ds.b 1
 
palettesave ds.w 16
 
 
 
  +
SECTION BSS
 
 
  +
ds.b 500 ;USP
x ds.w anz
 
  +
pile ds.b 1
   
  +
ecran ds.b 32256 ;LOG SCREEN (1*32000+256)
 
y ds.w anz
 
   
xg ds.w anz
+
ssp ds.l 1
   
 
yg ds.w anz
 
 
 
 
saveindex ds.w 1
 
 
ds.l 200
 
 
stack ds.l 4
 
 
bildschirme ds.b 64256
 
 
 
 
savepuffer ds.b 262*anz*2
 
 
 
 
sppuffer:
 
   
 
END
 
END
 
 
  +
</pre>
 
</pre>
 
 
Back to [[ASM_Tutorial]]
 
Back to [[ASM_Tutorial]]

Revision as of 16:29, 9 October 2006

	
*** ILLUSTRATION DES OPERATIONS SUR LA RAM VIDEO ET L'ECRAN LOGIQUE ***
	

           move.l     a7,a5		;Initialise le TOS 
           lea        pile,a7
           move.l     4(a5),a5     
           move.l     $c(a5),d0    
           add.l      $14(a5),d0
           add.l      $1c(a5),d0
           add.l      #$100,d0
           move.l     d0,-(sp)
           move.l     a5,-(sp)
           move       #0,-(sp)
           move       #$4a,-(sp)		;SETBLOCK
           trap       #1
           add.l      #12,sp


	clr.l	-(sp)		;super
	move	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	move.l	d0,ssp
	
	
	* ECRIRE sur PHYS puis LOG et poser LOG sur PHYS *
	
	move.l	#INTRO,-(sp)	;Texte sur PHYS
	move.w	#$09,-(sp)
	trap	#1
	addq.l	#6,sp

	move	#7,-(sp)		;TOUCHE
	trap	#1
	addq.l	#2,sp
	
	move.l	#ecran+256,d0	;adresse LOG
	and.l	#$ffffff00,d0	;divisible par 256
	move.l	d0,a0		;a0=LOG
	move.l	$44e,a5		;a5=PHYS

	
	
	*** On ecrit sur le PHYS ***
	

		
	move.l	#7999,d0		;Write of PHYS
	moveq.l	#-1,d1
	move.l	a5,a6
cr:
	move.l	d1,(a6)+
	dbf	d0,cr


	move.l	#TEXTE,-(sp)	;Texte sur PHYS
	move.w	#$09,-(sp)
	trap	#1
	addq.l	#6,sp
	
	move	#7,-(sp)		;TOUCHE
	trap	#1
	addq.l	#2,sp


	*** On ecrit sur le LOG ***


		
	move.l	#7999,d0		;Write of LOG
	moveq.l	#-1,d1
	move.l	a0,a6
acr:
	move.l	d1,(a6)+
	dbf	d0,acr
	
	move.l	a0,d5		;a0= LOG
	lsr.l	#8,d5		;MMU -->  PHYS devient LOG
	move.b	d5,$ff8203		;on travaille sur LOG
	lsr.l	#8,d5		;(On change le PHYS sous LOG)
	move.b	d5,$ff8201		;¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹
	
	
	move	#7,-(sp)		;TOUCHE
	trap	#1
	addq.l	#2,sp
	
	
	
	*** On pose LOG sur PHYS ***
		
	move.l	a5,d5		;a5= PHYS
	lsr.l	#8,d5		;MMU  --> LOG devient PHYS
	move.b	d5,$ff8203		;on d‚pose le LOG sur PHYS
	lsr.l	#8,d5		;(le PHYS chang‚ revient)
	move.b	d5,$ff8201		;¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹

	move	#7,-(sp)		;TOUCHE
	trap	#1
	addq.l	#2,sp
	
	
	move.l	ssp,-(sp)		;USER
	move	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
		
	clr.w	-(sp)		;PTERM
	trap	#1
	
	
	SECTION    DATA
	
TEXTE	DC.B	27,'Y',32,32,' TEXTE ‚crit sur l',39,'‚cran LOGIQUE et pos‚ sur',10,13
	DC.B	' l',39,'‚cran PHYSIQUE  ... blablabla :',10,13
	
	REPT	22
	DC.B	'textetextetextetextetextetextetextetextetexte',10,13
	ENDR
	
	DC.B       0

INTRO	DC.B	27,'E','Compare l',39,'affichage normal avec celui'
	DC.B	' LOG sur PHYS  (L-P, 1/89)',0
	
		
	SECTION    BSS
		
	ds.b	500		;USP
pile	ds.b	1

ecran	ds.b	32256		;LOG SCREEN (1*32000+256)

ssp	ds.l	1


	END
	
		

Back to ASM_Tutorial