Subversion Repositories NedoOS

Rev

Rev 1215 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3. ;COMMANDLINE    EQU #80
  4.  
  5.         org PROGSTART
  6. cmd_begin
  7.  
  8.  
  9.                 ld hl,COMMANDLINE
  10.         call skipword
  11.         call skipspaces
  12.         ld (par1addr),hl
  13.                 ld de,FILE_NAME
  14.                 call getname
  15.                 inc hl
  16.                 ld (hl),0
  17.                 ld a,0
  18.                 ld (de),a
  19. ;               jr $
  20.  
  21.         ld de,FILE_NAME
  22.         OS_CREATEHANDLE
  23.         or a
  24.         jp nz,ERR_EXIT    ;обработка ошибок
  25.         ld a,b
  26.         ld (handle),a    ;сохраняем дескриптор
  27.  
  28. ;Заполняю пустотой внутренний мир файла
  29.                 ld      b,160
  30. t1:             push bc
  31.         ld a,(handle)
  32.         ld b,a
  33.         ld de,Empt
  34.         ld hl,4096
  35.         OS_WRITEHANDLE
  36.         or a
  37.         jp nz,ERR_EXIT    ;обработка ошибок
  38.                 pop bc
  39.  
  40.                 djnz t1
  41.  
  42. ;Ищу в нем своё место
  43.                 ld a, (handle)
  44.                 ld b,a
  45.                 ld de,#0000
  46.                 ld hl,#0800
  47.                 OS_SEEKHANDLE
  48.  
  49. ;и заполняю его смыслом
  50.         ld a,(handle)
  51.         ld b,a
  52.         ld de, SYSTEM_TRACK
  53.         ld hl,BUF_SIZE
  54.         OS_WRITEHANDLE
  55.         or a
  56.         jp nz,ERR_EXIT    ;обработка ошибок
  57.  
  58. CLOSE_ERR_EXIT
  59.         ld a,(handle)
  60.         ld b,a
  61.         OS_CLOSEHANDLE
  62.  
  63. ERR_EXIT
  64.         QUIT
  65.  
  66. skipword
  67. ;hl=string
  68. ;out: hl=terminator/space addr
  69. getword0
  70.         ld a,(hl)
  71.         or a
  72.         ret z
  73.                 cp 0x20
  74.                 ret z
  75.         inc hl
  76.         jr getword0
  77.  
  78. skipspaces
  79. ;hl=string
  80. ;out: hl=after last space
  81.         ld a,(hl)
  82.         cp ' '
  83.         ret nz
  84.         inc hl
  85.         jr skipspaces
  86.  
  87. getname:
  88.         ld a,(hl)
  89.         cp 0
  90.         ret z
  91.        
  92.         cp ' '
  93.         ret z
  94.                 ld (de),a
  95.         inc hl
  96.         inc de
  97.         jr getname
  98.                
  99. handle:
  100.            DEFB 0
  101.  
  102. ;Ну проще я не придумал :-(
  103. ;Придумаю переделаю.
  104. Empt:
  105.         DEFS 16*256
  106.  
  107. SYSTEM_TRACK:;системная дорожка
  108.  
  109. BUFF_ADDR:
  110.                 DEFB 0
  111. DCU_SEC:
  112.                 DEFS 224
  113. FR_SEC_NEXT:;следующий свободный сектор
  114.                 DEFB 0
  115. FR_TRK_NEXT:;следующая свободная дорожка
  116.                 DEFB 1
  117. TYPE_DISC:; тип диска
  118.                 DEFB #10
  119. N_FILES:; количество файлов на диске            
  120.                 DEFB 0
  121. ; количество свободных секторов на диске
  122. ;(это максимальное количество, будем из него вычитать)
  123. N_FREE_SEC:
  124.                 DEFW #09F0
  125. MAIN_BYTE:
  126.                 DEFB #10
  127. ZERO:  
  128.                 DEFB 0,0
  129. BLANK9:
  130.                 DEFB #20,#20,#20,#20,#20,#20,#20,#20,#20,0; последний ноль нужен!
  131. N_DEL_FILES:
  132.                 DEFB 0
  133. ;заголовок диска
  134. DISC_TITLE:
  135.                 DEFB "RESULT",0,0
  136. ZERO_N:
  137.                 DEFS 3
  138. BUF_SIZE EQU $-SYSTEM_TRACK
  139.  
  140. par1addr:
  141.                 DEFB 0
  142. par2addr:
  143.                 DEFB 0         
  144. FILE_NAME:
  145.         DEFB "dist.trd"
  146. END:    DEFB 0
  147.         DEFB 0
  148.  
  149. cmd_end
  150.  
  151.  
  152.  
  153.  
  154.         ;display "Size ",/d,cmd_end-cmd_begin," bytes"
  155.  
  156.         savebin "mktrd.com",cmd_begin,cmd_end-cmd_begin
  157.  
  158.         LABELSLIST "../../us/user.l"
  159.