Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted by Bergi ( 17 years ago )
section	.text

main:
PGCR	EQU $400001				; Port General Control Register
PADDR	EQU $400005				; Port A Data Direction Register
PBDDR	EQU $400007				; Port B Data Direction Register
PACR	EQU $40000D				; Port A Control Register
PBCR	EQU $40000F				; Port B Control Register
PADR	EQU $400011				; Port A Data Register
PBDR	EQU $400013				; Port B Data Register

INIT:
	MOVE.B	#$00,PGCR			; Izberemo MODE 0
	MOVE.B	#$80,PACR			; Izberemo SUBMODE 1X
	MOVE.B	#$80,PBCR			; Izberemo SUBMODE 1X
	MOVE.B	#%11111111,PADDR	; Vsi pini na vratih A so izhodi
	MOVE.B	#%00000000,PBDDR	; Vsi pini na vratih B so vhodi
	
	LEA	TEKST(PC),A1  			;
	MOVE.W	#$0D,-(A7)			; Nalozimo tekst v pomnilnik in ga izpisemo
	TRAP	#4					;
	
	MOVE.L	#%11,D1				; Nastavimo najnizja bita v registru D1 - Motorcek naj se vrti; leva smer
	MOVE.L	#3000,D2
	
zacetek:
	MOVE.W	#$04,-(A7)			;
	TRAP	#4					; Poklicemo podprogram, ki preveri, ali je bila tipka prekinjena

	CMP	#$00,D0					; Preverimo, ali je bila tipka pritisnjena - najnizji bit registra D0 je nastavljen
	BEQ.B	motor				; Ce tipka ni bila pritisnjena, skocimo na labelo motor

	MOVE.W	#$06,-(A7)			; V primeru, da je bila tipka pritisnjena, jo preberemo s podprogramom,
	TRAP	#4					; ki ASCII reprezentacijo stevila shrani v register D0
	
pr_nic:
	CMP	#$30,D0					; Preverimo, ali je bila pritisnjena tipka "0" - izklop
	BNE.B	pr_ena
	BCLR	#0,D1				; Ce je bila, pocistimo nicti bit registra D1
	BRA.B	motor				; Skocimo na labelo motor

pr_ena:
	CMP	#$31,D0					; Preverimo, ali je bila pritisnjena tipka "1" - vklop
	BNE.B	pr_lev
	BSET	#0,D1				; Ce je bila, nastavimo nicti bit registra D1
	BRA.B	motor				; Skocimo na labelo motor
	
pr_lev:
	CMP	#$4C,D0					; Preverimo, ali je bila pritisnjena tipka "L" - vklop
	BNE.B	pr_des
	BCLR	#1,D1				; Ce je bila, pocistimo prvi bit registra D1
	BRA.B	motor				; Skocimo na labelo motor
	
pr_des:
	CMP	#$44,D0					; Preverimo, ali je bila pritisnjena tipka "D" - vklop
	BNE.B	pr_plu
	BSET 	#1,D1				; Ce je bila, pocistimo prvi bit registra D1
	BRA.B	motor				; Skocimo na labelo motor
	
pr_plu:	
	CMP	#$2B,D0					; Preverimo, ali je bila pritisnjena tipka "+" - vklop
	BNE.B	pr_min
	CMP.W	#1300,D2			; Ce je bila, primerjamo najnizjo mejo zakasnitve - pod njo se motorcek zatika
	BLE.B	skoci_p				; Ce je bila presezena, pomanjsevanje preskocimo
	SUB.W	#100,D2				; Zakasnitev povecamo za 100 ( motorcek se bo hitreje vrtel )
skoci_p	BRA.W	motor			; Skocimo na labelo motor
	
pr_min:
	CMP	#$2D,D0					; Preverimo, ali je bila pritisnjena tipka "-" - vklop
	BNE.B	motor
	CMP.W	#4500,D2			; Ce je bila, primerjamo najvecjo mejo zakasnitve - nad njo se motorcek zatika
	BGE.B	skoci_m				; Ce je bila presezena, povecevanje preskocimo
	ADD.W	#100,D2				; Zakasnitev povecamo za 100 ( motorcek se bo pocasneje vrtel )
skoci_m	BRA.W	motor			; Skocimo na labelo motor
	
motor:
	BTST	#0,D1				; Preverimo, ali je nicti bit registra D1 nastavljen ali ne
	BEQ.W	zacetek				; #0,D1 => 1 = Motorcek se vrti ; 0 = motorcek se ne vrti
	BTST	#1,D1				; Ce se vrti, preverimo, v katero stran se vrti
	BNE.B	sk_lev				; #1,D1 => 1 = Vrti levo
	BSR.B	vr_des				; #1,D1 => 0 = Vrti levo
	BRA.W	zacetek				; Skoci nazaj na zacetek

sk_lev:
	BSR.W	vr_lev				; Skocimo na subrituno, ki motorcku posilja ukaze za vrtenje v levo
	BRA.W	zacetek				; Skocimo nazaj na zacetek

vr_des:							; Subrutina za vrtenje v desno
	MOVE.B	#%1001,PADR
	BSR.B	zakasnitev			; Sprozanje subrutine zakasnitev
	MOVE.B	#%0101,PADR
	BSR.B	zakasnitev
	MOVE.B	#%0110,PADR
	BSR.B	zakasnitev
	MOVE.B	#%1010,PADR
	BSR.B	zakasnitev
	RTS							; Skok iz subrutine
	
vr_lev:							; Subrutina za vrtenje v levo
	MOVE.B	#%1010,PADR
	BSR.B	zakasnitev			; Sprozanje subrutine zakasnitev
	MOVE.B	#%0110,PADR
	BSR.B	zakasnitev
	MOVE.B	#%0101,PADR
	BSR.B	zakasnitev
	MOVE.B	#%1001,PADR
	BSR.B	zakasnitev
	RTS							; Skok iz subrutine

zakasnitev:						; Subrutina zakasnitev
	MOVE.W	D2,D3
zanka:	SUB	#1,D3
	CMP	#0,D3
	BLE.B	koncaj
	BRA.B	zanka
koncaj:	RTS						; Skok iz subrutine

TEKST	DC.B	81,"0 .. Izkljuci",$A,$D,"1 .. Vkljuci",$A,$D,"L .. Levo",$A,$D,"D .. Desno",$A,$D,"+ .. Hitreje",$A,$D,"- .. Pocasneje",$A,$D

 

Revise this Paste

Your Name: Code Language: