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