10 *=$600
20 ;
30 ; -------------------------------
40 ; A=USR(ML,ADR,# BYTES,DIRECTION)
50 ;
60 ; ROTATES DATA LEFT OR RIGHT
70 ;
80 ; -------------------------------
90 ;
0100 ADR = $CB
0110 BYTES = $CD
0120 DIR = $CE
0130 PLA ; IGNORE
0140 PLA ; GET HI BYTE OF ADDRESS
0150 STA ADR+1
0160 PLA ; GET LO BYTE OF ADDRESS
0170 STA ADR
0180 PLA ; IGNORE
0190 PLA ; GET NUMBER OF BYTES
0200 STA BYTES
0210 PLA ; IGNORE
0220 PLA ; GET DIRECTION
0230 STA DIR
0240 ;
0250 LDY #0
0260 LOOP CLC
0270 LDA DIR
0280 BNE RIGHT ; RIGHT IF A 1
0290 ;
0300 LEFT LDA (ADR),Y
0310 ASL A ; SHIFT LEFT
0320 BCC STORE ; NO CARRY BIT
0330 CLC
0340 ADC #1 ; SET BIT 0
0350 CLC
0360 BCC STORE
0370 RIGHT LDA (ADR),Y
0380 LSR A ; SHIFT RIGHT
0390 BCC STORE ; NO CARRY BIT
0400 CLC
0410 ADC #128 ; SET BIT 7
0420 STORE STA (ADR),Y
0430 INY
0440 CPY BYTES ; DONE?
0450 BNE LOOP ; NO
0460 RTS ; YES- RETURN TO BASIC