;; This example shows how to dump the lower ROM
;; of an Amstrad CPC or KC Compact computer.
;; When active, the lower ROM is readable in the range &0000-&3fff.
;; The lower ROM contains the operating system and firmware.
;; This source is released under the GNU Public License V2.

;; firmware function to activate the lower rom
.kl_l_rom_enable	equ &b906
;; firmware function to restore the rom state
.kl_rom_restore		equ &b90c


;; When activated, the lower rom will be readable from &0000-&3fff.
;; The program will not function if it is in this range.
org &4000

;; enable the lower (operating system) rom
;; and store the previous state
call kl_l_rom_enable
ld (rom_previous_state),a

;; copy rom data to store
ld hl,&0000				;; source
ld de,rom_data			;; dest
ld bc,&4000				;; length

;; restore the previous state
ld a,(rom_previous_state)
call kl_rom_restore


;; stores the previous state of the rom configuration
.rom_previous_state defb 0

;; a buffer to store the 16k of rom data
.rom_data equ $+1