diff --git a/compiler/res/prog8lib/prog8lib.asm b/compiler/res/prog8lib/prog8lib.asm index 1285d3c6a..e4b58d831 100644 --- a/compiler/res/prog8lib/prog8lib.asm +++ b/compiler/res/prog8lib/prog8lib.asm @@ -1879,6 +1879,22 @@ lsr_array_w .proc rts .pend +rol_array_ub .proc + ; -- rol a ubyte in an array (index and array address on stack) + inx + ldy c64.ESTACK_LO,x + inx + lda c64.ESTACK_LO,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI,x + sta c64.SCRATCH_ZPWORD1+1 + lda (c64.SCRATCH_ZPWORD1),y + rol a + sta (c64.SCRATCH_ZPWORD1),y + rts + .pend + + ror_array_ub .proc ; -- ror a ubyte in an array (index and array address on stack) inx @@ -1951,6 +1967,29 @@ ror_array_uw .proc rts .pend +rol_array_uw .proc + ; -- rol a uword in an array (index and array address on stack) + php + inx + lda c64.ESTACK_LO,x + asl a + tay + inx + lda c64.ESTACK_LO,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI,x + sta c64.SCRATCH_ZPWORD1+1 + lda (c64.SCRATCH_ZPWORD1),y + plp + rol a + sta (c64.SCRATCH_ZPWORD1),y + iny + lda (c64.SCRATCH_ZPWORD1),y + rol a + sta (c64.SCRATCH_ZPWORD1),y + rts + .pend + rol2_array_uw .proc ; -- rol2 (16-bit rol) a uword in an array (index and array address on stack) inx @@ -2011,11 +2050,3 @@ lsl_array_b .proc lsl_array_w .proc .warn "lsl_array_w" ; TODO .pend - -rol_array_ub .proc - .warn "rol_array_ub" ; TODO - .pend - -rol_array_uw .proc - .warn "rol_array_uw" ; TODO - .pend diff --git a/examples/arithmetic/bitshift.p8 b/examples/arithmetic/bitshift.p8 index 91770065c..6ff9e8d3a 100644 --- a/examples/arithmetic/bitshift.p8 +++ b/examples/arithmetic/bitshift.p8 @@ -66,21 +66,27 @@ main { c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') + set_carry() rol(uwarray[1]) c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') + set_carry() rol(uwarray[1]) c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') + set_carry() rol(uwarray[1]) c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') + set_carry() rol(uwarray[1]) c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') + set_carry() rol(uwarray[1]) c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') + set_carry() rol(uwarray[1]) c64scr.print_uwbin(uwarray[1] as uword, false) c64.CHROUT('\n') @@ -109,11 +115,8 @@ main { ; c64.CHROUT('\n') ; lsl(ubarray[1]) -; rol(ubarray[1]) ; lsl(bbarray[1]) -; ; lsl(uwarray[1]) -; rol(uwarray[1]) ; lsl(wwarray[1]) }