    ;; This example shows the firmware functions used to save
    ;; a file.
    ;;
    ;; in this example, the file is called SCREEN.SCR
    ;; and is a dump of the screen (from the default location &c000-&ffff)

    ;; firmware function to open a file for writing
    .cas_out_open equ &bc8c
    ;; firmware function to write an entire file
    ;; the file will be written with a AMSDOS header
    .cas_out_direct equ &bc98
    ;; firmware function to close a file opened for writing
    .cas_out_close equ &bc8f

    org &4000

    call save_file
    ret

    .save_file
    ;; B = length of the filename in characters
    ld b,end_filename-filename

    ;; HL = address of the start of the filename
    ld hl,filename

    ;; DE = address of a 2k buffer
    ;;
    ;; in disc mode: this buffer is not used when CAS IN DIRECT
    ;; firmware function is used, so it is safe to put it anywhere
    ;; you want.
    ld de,0

    ;; firmware function to open a file for reading
    call cas_out_open

    ;; firmware function to write the entire file
    ;; this will automatically generate a AMSDOS header
    ;; and write it before the the file data.

    ;; HL = load address
    ld hl,&c000
    ;; DE = length
    ld de,&4000
    ;; BC = execution address
    ld bc,&0000
    ;; A = file type (2 = binary)
    ld a,2

    ;; write file
    call cas_out_direct

    ;; firmware function to close a file opened for writing
    call cas_out_close

    ret

    ;; the filename to save
    ;; disc filenames are a maximum of 12 characters long
    ;; 8 characters for name, and 3 characters for extension
    .filename
    defb "SCREEN.SCR"