diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s
index db73be8f7..289ee7e39 100644
--- a/libsrc/c64/emd/c64-rrr.s
+++ b/libsrc/c64/emd/c64-rrr.s
@@ -3,49 +3,67 @@
 ;should work for ActionReplay as well...
 ;
 ;
-;Version 1.0
-;
-;Johannes Braun 2006-08-22
-;hannenz@freenet.de
+; original Version 1.0 by Johannes Braun 2006-08-22 <hannenz@freenet.de>
 ;
 ;use the functions described in "usr/lib/cc65/include/em.h" to make use of this driver.
-;-------------------------------------------------------------------------------------------------------------------------
+; ------------------------------------------------------------------------
 
 ;NOTE: If called from ROM the Lo_Code routines must exit with LDA #$00 / STA $DE00!!! just change and recompile!
 
-        .include "em-kernel.inc"
-        .importzp ptr1,ptr2,ptr3,ptr4,tmp1
-        .macpack generic
+        .include        "zeropage.inc"
 
-c64_ram        = ptr1        ;use some more expressive identifiers...
-rr_ram        = ptr2
-len        = ptr3
-aux        = ptr4
-temp        = tmp1
+        .include        "em-kernel.inc"
+        .include        "em-error.inc"
 
-Lo_Mem        = $0100        ;location of Lo_Code (must be below $1000 or above $e000)
+        .macpack        generic
+        .macpack        module
 
-.segment "JUMPTABLE"
+; ------------------------------------------------------------------------
 
-        .byte $65,$6d,$64    ;Driver signature
-        .byte EMD_API_VERSION
+c64_ram = ptr1  ; use some more expressive identifiers...
+rr_ram  = ptr2
+len     = ptr3
+aux     = ptr4
+temp    = tmp1
 
-        .addr INSTALL        ;Jump Table
-        .addr UNINSTALL
-        .addr PAGECOUNT
-        .addr MAP
-        .addr USE
-        .addr COMMIT
-        .addr COPYFROM
-        .addr COPYTO
+Lo_Mem  = $0100 ; location of Lo_Code (must be below $1000 or above $e000)
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+        module_header   _c64_rrr_emd
+
+; Driver signature
+
+        .byte   $65, $6d, $64           ; "emd"
+        .byte   EMD_API_VERSION         ; EM API version number
+
+; Library reference
+
+        .addr   $0000
+
+; Jump table
+
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   PAGECOUNT
+        .addr   MAP
+        .addr   USE
+        .addr   COMMIT
+        .addr   COPYFROM
+        .addr   COPYTO
+
+; ------------------------------------------------------------------------        
 
 .bss
-window:        .res 256        ;the memory window (256 bytes)
+window: .res 256        ; the memory window (256 bytes)
 
 .rodata
-dummy:        .word window        ;a "pseudo"-em_copy_struct, used by em_map/ em_commit
-        .byte 0            ;to pass over to COPYTO/COPYFROM
-curpage:    .byte $ff        ;just this byte is changed according to the desired page
+dummy:
+        .word window    ; a "pseudo"-em_copy_struct, used by em_map/ em_commit
+        .byte 0         ; to pass over to COPYTO/COPYFROM
+curpage:
+        .byte $ff       ; just this byte is changed according to the desired page
         .byte 0
         .word 256
 
@@ -61,37 +79,37 @@ INSTALL:
         sta Lo_Mem,x
         dex
         bpl :-
-        stx curpage     ;invalidate current page ($ff)
+        stx curpage     ; invalidate current page ($ff)
 
-        ldx #$23        ;$de00 value for rr-ram
-        ldy #$02        ;$de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM!
+        ldx #$23        ; $de00 value for rr-ram
+        ldy #$02        ; $de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM!
         bne COMMON
 
-c1:        stx $de00        ;try accessing rr-ram
+c1:     stx $de00       ; try accessing rr-ram
         lda $8888
         pha
-        lda $9999        ;remember old content of $8888 and $9999
+        lda $9999       ; remember old content of $8888 and $9999
         pha
 
         lda #$55
-        sta $8888        ;write test values
+        sta $8888       ; write test values
         asl
         sta $9999
 
-        sty $de00        ;switch to c64 ram
+        sty $de00       ; switch to c64 ram
         stx $8888
         stx $9999
 
-        stx $de00        ;switch to rr-ram again (if present)
-        ldx $8888        ;read the values
+        stx $de00       ; switch to rr-ram again (if present)
+        ldx $8888       ; read the values
         ldy $9999
         pla
-        sta $9999        ;and write the old values back
+        sta $9999       ; and write the old values back
         pla
         sta $8888
 
         lda #2
-        sta $de00        ;c64 ram again
+        sta $de00       ; c64 ram again
 
         cli
         cpx #$55
@@ -100,7 +118,7 @@ c1:        stx $de00        ;try accessing rr-ram
         bne no
         lda #0
         rts
-no:        asl            ;.A still has #2, so return #4: error code for "device not present"
+no:     asl             ; A still has #2, so return #4: error code for "device not present"
         rts
 c2:
 ;----------------------------------------------------------------------------------------
@@ -108,7 +126,8 @@ c2:
 ;----------------------------------------------------------------------------------------
 UNINSTALL:
 return_null:
-        lda #$00        ;always return 32kb (128 pages)
+        lda #$00        ; always return 32kb (128 pages)
+        ; fall through, skip the LDA
         .byte $2c
 
 ;----------------------------------------------------------------------------------------
@@ -123,12 +142,13 @@ PAGECOUNT:
 ;void* __fastcall__ em_use(unsigned page);
 ;----------------------------------------------------------------------------------------
 USE:
-        cmp #$80        ;valid page?
-        bcs return_null        ;no, return NULL pointer
-        sta curpage        ;set to current page
-return_win:    lda #<window        ;return pointer to window
+        cmp #$80            ; valid page?
+        bcs return_null     ; no, return NULL pointer
+        sta curpage         ; set to current page
+return_win:
+        lda #<window        ; return pointer to window
         ldx #>window
-return:        rts
+return: rts
 
 ;----------------------------------------------------------------------------------------
 ;void* __fastcall__ em_map(unsigned page);
@@ -137,10 +157,10 @@ MAP:
         cmp #$80
         bcs return_null
         sta curpage
-        lda #<dummy        ;load .A/.X with adress of data for COPYFROM-call (which expects the
-        ldx #>dummy        ;adress in .A/.X)
+        lda #<dummy        ; load .A/.X with adress of data for COPYFROM-call (which expects the
+        ldx #>dummy        ; adress in .A/.X)
         jsr COPYFROM
-        bcs return_win        ;function returns pointer to window (returns always with carry set!)
+        bcs return_win     ; function returns pointer to window (returns always with carry set!)
 
 ;----------------------------------------------------------------------------------------
 ;void __fastcall__ em_commit(void);
@@ -149,8 +169,8 @@ COMMIT:
         lda curpage
         cmp #$80
         bcs return
-        lda #<dummy        ;load .A/.X with adress of data for COPYTO-call (which expects the
-        ldx #>dummy        ;adress in .A/.X)
+        lda #<dummy        ; load .A/.X with adress of data for COPYTO-call (which expects the
+        ldx #>dummy        ; adress in .A/.X)
 
 ;----------------------------------------------------------------------------------------
 ;void __fastcall__ em_copyto (struct em_copy *copy_data);
@@ -161,7 +181,7 @@ COPYTO:
         ;copy the main copyto routine into Lo_Mem
 
         ldy #Lo_Code1_End - Lo_Code1
-:        lda Lo_Code1-1,y
+:       lda Lo_Code1-1,y
         sta Lo_Mem-1,y
         dey
         bne :-
@@ -172,11 +192,11 @@ COMMON:
         ;this part will be executed in Lo_Mem (!) by COPYFROM
 
 Lo_Code2:
-        stx $de00        ;map in rr-ram
-        lda (rr_ram),y        ;get byte from rr-ram
-        sty $de00        ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!!
-        sta (c64_ram),y        ;and write to c64-ram
-        nop            ;pad to same size as Lo_Code1
+        stx $de00       ;map in rr-ram
+        lda (rr_ram),y  ;get byte from rr-ram
+        sty $de00       ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!!
+        sta (c64_ram),y ;and write to c64-ram
+        nop             ;pad to same size as Lo_Code1
         nop
 Lo_Code2_End:
 
@@ -184,41 +204,41 @@ Lo_Code2_End:
         ;this part will be executed in Lo_Mem (!) by COPYTO
 
 Lo_Code1:
-        lda (c64_ram),y        ;read 1 byte from c64-ram
-        stx $de00        ;map in rr-ram
-        sta (rr_ram),y        ;write byte to rr-ram
+        lda (c64_ram),y ;read 1 byte from c64-ram
+        stx $de00       ;map in rr-ram
+        sta (rr_ram),y  ;write byte to rr-ram
         lda #$02        ;map in c64-ram again
         sta $de00
-                    ;12 bytes
+                        ;12 bytes
 
         ;this part is common for both COPYFROM/COPYTO and executed in Lo_Mem, too
 
 Lo_Code_Common:
-        inc c64_ram        ;increase pointers
+        inc c64_ram         ;increase pointers
         bne :+
         inc c64_ram+1
-:        inc rr_ram
+:       inc rr_ram
         bne @skip
         inc rr_ram+1
         lda rr_ram+1
-        cmp #$a0        ;wrap around 16k boundary in rr-ram window ($8000-$a000)
+        cmp #$a0            ;wrap around 16k boundary in rr-ram window ($8000-$a000)
         bne @skip
 
-        lda #$80        ;reset pointer to $8000
+        lda #$80            ;reset pointer to $8000
         sta rr_ram+1
-        txa            ;adjust value in .X to map in next 16k-bank in rr-ram
-        adc #7            ;carry is set because of former CMP, so it adds 8
+        txa                 ;adjust value in .X to map in next 16k-bank in rr-ram
+        adc #7              ;carry is set because of former CMP, so it adds 8
         tax
                     ;27 bytes
-@skip:        lda c64_ram
+@skip:  lda c64_ram
         cmp len
         lda c64_ram+1
         sbc len+1
         bcc Lo_Code1
-        lda #2            ;CHANGE to LDA #0 if driver is called from ROM
+        lda #2              ;CHANGE to LDA #0 if driver is called from ROM
         sta $de00
         cli
-        rts            ;17 bytes    = 56 bytes Lo_Code ($38)
+        rts                 ;17 bytes    = 56 bytes Lo_Code ($38)
 Lo_Code1_End:
 ;----------------------------------------------------------------------------------------
 ;void __fastcall__ em_copyfrom(struct em_copy *copy_data);
@@ -228,16 +248,16 @@ COPYFROM:
         jsr get_struct_data
 
         ldy #Lo_Code2_End - Lo_Code2    ;copy routine into Lo_Mem
-:        lda Lo_Code2-1,y
+:       lda Lo_Code2-1,y
         sta Lo_Mem-1,y
         dey
         bne :-
         ldy #Lo_Code1_End-Lo_Code_Common
-:        lda Lo_Code_Common-1,y
+:       lda Lo_Code_Common-1,y
         sta Lo_Mem+11,y
         dey
         bne :-
-        beq COMMON        ;and execute...
+        beq COMMON          ;and execute...
 ;----------------------------------------------------------------------------------------
 ;read the struct data located at (.A/.X)
 ;and setup parameters for stash/ fetch operation
@@ -247,39 +267,40 @@ get_struct_data:
         ;read and process the values from the em_copy struct passed to as parameters rameter to the
         ;functions em_copyto and em_copyfrom
 
-        sta aux            ;store adress of struct (passed in .A/.X) into a zp pointer
+        sta aux         ;store adress of struct (passed in .A/.X) into a zp pointer
         stx aux+1
-        ldy #0            ;index 0
+        ldy #0          ;index 0
 
-        lda (aux),y        ;read c64-adress lo
+        lda (aux),y     ;read c64-adress lo
         sta c64_ram
         iny
-        lda (aux),y        ;read c64-adress hi
-        sta c64_ram+1        ;(c64_ram) --> points to c64-adress space
+        lda (aux),y     ;read c64-adress hi
+        sta c64_ram+1   ;(c64_ram) --> points to c64-adress space
         iny
-        lda (aux),y        ;read rr-adress lo
+        lda (aux),y     ;read rr-adress lo
         sta rr_ram
         iny
-        lda (aux),y        ;rr-adress hi
-        pha            ;remember
+        lda (aux),y     ;rr-adress hi
+        pha             ;remember
         and #$1f
         ora #$80        ;adjust into 16k-window ($8000-$a000)
         sta rr_ram+1
-        pla            ;re-get hi byte of rr-adress
+        pla             ;re-get hi byte of rr-adress
         and #$60        ;isolate bits 5 and 6
         lsr
-        lsr            ;shift into bits 3 and 4
+        lsr             ;shift into bits 3 and 4
         ora #$23        ;set bit 5 (select ram) and 1+2 (game/exrom setting for ULTIMAX-mode)
-        tax            ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank
+        tax             ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank
         iny
-        iny            ;skip unused byte
-        lda (aux),y        ;read length lo-byte
+        iny             ;skip unused byte
+        lda (aux),y     ;read length lo-byte
         clc
-        adc c64_ram        ;add to c64-addres
+        adc c64_ram     ;add to c64-addres
         sta len
         iny
-        lda (aux),y        ;length hi-byte
+        lda (aux),y     ;length hi-byte
         adc c64_ram+1
-        sta len+1        ;tmp2: length, tmp3 contains end adress of transfer in c64-ram.
-        rts            ;55 bytes
+        sta len+1       ;tmp2: length, tmp3 contains end adress of transfer in c64-ram.
+        rts
+                        ;55 bytes