Programming:Reading and writing the boot sector of a SYSTEM/VENDOR disc
From CPCWiki - THE Amstrad CPC encyclopedia!
;; This example will install a RSX command which can be used ;; to get and put a boot sector to a SYSTEM/VENDOR disc. ;; ;; The boot sector can be executed with a |CPM command. ;; .kl_find_command equ &bcd4 .kl_log_ext equ &bcd1 ;; call &8000 to install RSX commands: ;; ;; |BOOTGET,<drive>,<addr> ;; get track 0, sector &41 on drive <drive> and write it to <addr> ;; ;; |BOOTPUT,<drive>,<addr> ;; put track 0, sector &41 on drive <drive> and read from <addr> ;;------------------------------------------------------------ ;; install rsx commands org &8000 .start ld hl,work_space ld bc,rsx_table jp kl_log_ext ;;------------------------------------------------------------ .work_space defs 4 ;;------------------------------------------------------------ .rsx_table defw name_table jp get_boot_sector ;; get boot sector jp put_boot_sector ;; put boot sector ;;------------------------------------------------------------ .name_table defb "BOOTGE","T"+&80 // get boot sector defb "BOOTPU","T"+&80 // put boot sector defb 0 ;;------------------------------------------------------------ .get_boot_sector cp 2 ret nz .ok call initialise ret nc ld l,(ix+0) ;; address to put boot sector data to ld h,(ix+1) ld e,(ix+2) ;; drive ld d,0 ;; track ld c,&41 ;; sector rst 3 defw read_sector_jmp ret .put_boot_sector cp 2 ret nz call initialise ret nc ld l,(ix+0) ;; address to get boot sector data from ld h,(ix+1) ld e,(ix+2) ;; drive ld d,0 ld c,&41 rst 3 defw write_sector_jmp ret ;;-------------------------------------------------------------- ;; find commands .initialise ld hl,read_sector_cmd call kl_find_command ret nc ld (read_sector_jmp),hl ld a,b ld (read_sector_jmp+2),a ld hl,write_sector_cmd call kl_find_command ret nc ld (write_sector_jmp),hl ld a,b ld (write_sector_jmp+2),a ret ;;-------------------------------------------------------------- .read_sector_cmd defb 4+&80 ;; BIOS: READ SECTOR .write_sector_cmd defb 5+&80 ;; BIOS: WRITE SECTOR .read_sector_jmp defw 0 ;; address defb 0 ;; rom select .write_sector_jmp defw 0 ;; address defb 0 ;; rom select