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
Back to previous page