Login

Subversion Repositories NedoOS

Rev

Rev 1649 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

        DEVICE ZXSPECTRUM128
        include "../_sdk/sys_h.asm"
;COMMANDLINE    EQU #80

        org PROGSTART
cmd_begin
        ld hl,COMMANDLINE
        call skipword
        cp 0x00
        jp z, defname
        call skipspaces
        cp 0x00
        jp z, defname

        ld de,FILE_NAME
        call getname
        inc hl
        ld (hl),0
        ld a,0
        ld (de),a

defname:
        ld de,FILE_NAME
        OS_CREATEHANDLE
        or a
        jp nz,ERR_EXIT    ;обработка ошибок
        ld a,b
        ld (handle),a    ;сохраняем дескриптор

;Заполняю пустотой внутренний мир файла
        ld b,160
t1:     push bc
        ld a,(handle)
        ld b,a
        ld de,Empt
        ld hl,4096
        OS_WRITEHANDLE
        or a
        jp nz,ERR_EXIT    ;обработка ошибок
                pop bc

                djnz t1

;Ищу в нем своё место
                ld a, (handle)
                ld b,a
                ld de,#0000
                ld hl,#0800
                OS_SEEKHANDLE

;и заполняю его смыслом
        ld a,(handle)
        ld b,a
        ld de, SYSTEM_TRACK
        ld hl,BUF_SIZE
        OS_WRITEHANDLE
        or a
        jp nz,ERR_EXIT    ;обработка ошибок
 
CLOSE_ERR_EXIT
        ld a,(handle)
        ld b,a
        OS_CLOSEHANDLE

ERR_EXIT
        QUIT

skipword
;hl=string
;out: hl=terminator/space addr
getword0
        ld a,(hl)
        or a
        ret z
        cp 0x20
        ret z
        inc hl
        jr getword0

skipspaces
;hl=string
;out: hl=after last space
        ld a,(hl)
        cp ' '
        ret nz
        inc hl
        jr skipspaces

getname:
        ld a,(hl)
        cp 0
        ret z
       
        cp ' '
        ret z
        ld (de),a
        inc hl
        inc de
        jr getname
               
handle:
           DEFB 0

;Ну проще я не придумал :-(
;Придумаю переделаю.
Empt:
        DEFS 16*256

SYSTEM_TRACK:;системная дорожка

BUFF_ADDR:
                DEFB 0
DCU_SEC:
                DEFS 224
FR_SEC_NEXT:;следующий свободный сектор
                DEFB 0
FR_TRK_NEXT:;следующая свободная дорожка
                DEFB 1
TYPE_DISC:; тип диска
                DEFB #10
N_FILES:; количество файлов на диске           
                DEFB 0
; количество свободных секторов на диске
;(это максимальное количество, будем из него вычитать)
N_FREE_SEC:
                DEFW #09F0
MAIN_BYTE:
                DEFB #10
ZERO:  
                DEFB 0,0
BLANK9:
                DEFB #20,#20,#20,#20,#20,#20,#20,#20,#20,0; последний ноль нужен!
N_DEL_FILES:
                DEFB 0
;заголовок диска
DISC_TITLE:
                DEFB "RESULT",0,0
ZERO_N:
                DEFS 3
BUF_SIZE EQU $-SYSTEM_TRACK
       
FILE_NAME:
        DEFB "dist.trd"
END:    DEFB 0
        DEFB 0

cmd_end
 



        ;display "Size ",/d,cmd_end-cmd_begin," bytes"
 
        savebin "mktrd.com",cmd_begin,cmd_end-cmd_begin
 
        LABELSLIST "../../us/user.l"