;des is sisch ultrakrasse lischterkedde
XDEF main
PBODR EQU $000216C2 ;/* Port B Open Drain */
PBPAR EQU $000216CB ;/* Port B Pin Assignment */
PBDIR EQU $000216B8 ;/* Port B Data Direction */
PBDAT EQU $000216C4 ;/* Port B Data */
CodeSec: SECTION 1
main: CLR.L D1
MOVE.L #$000000FF,PBDIR.L
MOVE.L #$00000000,PBPAR.L
MOVE.W #$0000,PBODR.L
MOVE.L #$00000000,PBDAT.L
MOVE.B #$01,D1
BACK: ROR.B #$01,D1 ;rotiere D1 um 1 nach links
MOVE.L D1,PBDAT.L ;copy d1 nach pbdat
MOVE.L #$00000000,D4 ;wartezähler init
BRA.W WAIT
WEITER: ROL.B #$01,D1 ;rotiere D1 um 1 nach links
MOVE.L D1,PBDAT.L ;copy d1 nach pbdat
MOVE.L #$00000000,D4 ;wartezähler init
BRA.W WAIT
WAIT: ADD.L #$00000001,D4 ;wartezähler +1
CMP.L #$0003FFFF,D4 ;check ob warteende erreicht
BNE.W WAIT ;springe wieder in warteschleife wenn !ende
CHECK: MOVE.L PBDAT.L,D2 ;copy pbdat nach d2
OR.W #$EFFF,D2 ;check in d2 ob pd12=1
CMP.W #$EFFF,D2 ;siehe oben
BEQ.W CHECK ;springe wieder CHECK wenn taster immer noch gedrückt
MOVE.L PBDAT.L,D2 ;copy pbdat nach d2
OR.W #$DFFF,D2 ;check in d2 ob pd12=1
CMP.W #$DFFF,D2 ;siehe oben
BEQ.W CHECK ;springe wieder CHECK wenn taster immer noch gedrückt
BRA.W LOOP ;springe LOOP wenn taster offen
LOOP: MOVE.L PBDAT.L,D2 ;copy pbdat nach d2
OR.W #$EFFF,D2 ;check in d2 ob pd12=1
CMP.W #$EFFF,D2 ;siehe oben
BEQ.W WEITER ;wenn pb12=1 springe WEITER
MOVE.L PBDAT.L,D2 ;copy pbdat nach d2
OR.W #$DFFF,D2 ;check in d2 ob pd12=1
CMP.W #$DFFF,D2 ;siehe oben
BEQ.W BACK ;wenn pb12=1 springe WEITER
BRA.W LOOP ;wenn nich dann wieder loop
END ;GANZ WISCHTISCH!!!