3,703 bytes added,
16:07, 21 December 2018 [[Media:m4reconf.zip | m4reconf.zip]]
Here is a native CPC program to use other people's (or sd cards) M4 rom configuration:
Unpack the m4reconf.bin to the /M4 directory of the microSD.
Copy whatever romslots.bin and romconfig.bin you want to use to the /M4 directory aswell.
Run"m4reconf.bin"
Power cycle CPC and done.
== Source code ==
<nowiki>
; M4 rom re-config
; To assemble use RASM assembler
; Duke - 2018
org 0x4000
nolist
km_wait_key equ 0xBB18
txt_output equ 0xBB5A
txt_set_column equ 0xBB6F
scr_reset equ 0xBC0E
scr_set_ink equ 0xBC32
scr_set_border equ 0xBC38
cas_in_open equ 0xBC77
cas_in_close equ 0xBC7A
cas_in_char equ 0xBC80
cas_out_open equ 0xBC8C
cas_out_close equ 0xBC8F
cas_out_char equ 0xBC95
kl_init_back equ 0xBCCE
; re-init M4rom
ld de,0x40
ld hl,0xB0FF
call 0xBCCB
; setup screen
ld a,2
call scr_reset ; set mode 2
xor a
ld b,a
call scr_set_border
xor a
ld b,a
ld c,b
call scr_set_ink
ld a,1
ld b,26
ld c,b
call scr_set_ink
ld a,20
call txt_set_column
ld hl,txt_title
call wrt
; read romconfig.bin
ld hl,filename
ld de,buf
ld b,13 ; "romconfig.bin"
call cas_in_open
jp nc,file_err
ld hl, buf2
ld bc,1088 ; file len
fread_loop:
call cas_in_char
ld (hl),a
inc hl
dec bc
xor a
cp c
jr nz, fread_loop
cp b
jr nz, fread_loop
call cas_in_close
; display 'active' roms and set the flag so they are re-flashed on power cycle
ld ix,buf2
ld b,(ix) ; number of roms (either 16 or 32)
ld de,32
add ix,de ; skip header
inc de
rom_loop:
ld a,(ix)
cp 1
jr nz, rom_not_used
push de
push ix
pop hl
push bc
inc hl ; point to rom name
ld de,text_buf
ld bc,32
ldir
pop bc
pop de
ld hl,text_buf
call wrt
ld hl,txt_reen
call wrt
ld (ix),2 ; set rom to NEW
rom_not_used:
add ix,de ; +33
djnz rom_loop
; save the modified romconfig.bin
ld hl,filename
ld de,buf
ld b,13 ; "romconfig.bin"
call cas_out_open
ld hl,buf2
ld bc,1088 ; file len
fwrite_loop:
ld a,(hl)
call cas_out_char
inc hl
dec bc
xor a
cp c
jr nz, fwrite_loop
cp b
jr nz, fwrite_loop
call cas_out_close
done:
; display done
ld hl,txt_done
call wrt
jp km_wait_key
file_err:
ld hl,txt_file_err
call wrt
jp km_wait_key
wrt:
ld a,(hl)
or a
ret z
call txt_output
inc hl
jr wrt
filename:
db "romconfig.bin"
txt_title:
db "M4 rom reconfig - Duke 2018",10,13,10,13,0
txt_file_err:
db "Error M4 romconfig.bin not found!",10,13,0
txt_reen:
db " re-enabled.",10,13,0
txt_done:
db 10,13,10,13,"Done! Power-cycle CPC",0
text_buf:
ds 33,0
buf: ds 2048,0
buf2: ds 1088,0
</nowiki>