Subversion Repositories NedoOS

Rev

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

  1. ;не включаем gfxmode, чтобы idle никогда не получал фокус
  2. ;по умолчанию стоит текстмод
  3.         ld sp,0x4000 ;нельзя ниже 0x3b00 и нельзя пересечься с resident (если мы в pgtrdosfs)
  4.         ld e,7
  5.         OS_CLS
  6.         ;если сделать SETGFX, то после введения терминалов появится лишний терминал под idle
  7.        
  8.         OS_GETMAINPAGES
  9. ;dehl=номера страниц в 0000,4000,8000,c000
  10.         push hl
  11.         OS_DELPAGE
  12.         pop hl
  13.         push hl
  14.         ld e,h
  15.         OS_DELPAGE
  16.         pop hl
  17.         ld e,l
  18.         OS_DELPAGE
  19.                
  20.                 if atm==1
  21. ;заставка
  22.                 ld hl,spr_cat
  23. logo_loop
  24.                 push hl
  25.         ld hl,spr_str
  26.         call prtext
  27.                 pop hl
  28.                 ld b,16
  29. logo_loop1
  30.                 ld a,(hl)
  31.                 inc hl
  32.                 cp 0xff
  33.                 ld c,a
  34.                 jr z,logo_end
  35. logo_pix_loop
  36.                 ld a,0xdb
  37.                 sla c
  38.                 jr c,logo_no_pix
  39.                 ld a,' '
  40. logo_no_pix
  41.                 push hl
  42.                 push bc
  43.                 push af
  44.                 PRCHAR
  45.                 pop af
  46.                 PRCHAR
  47.                 pop bc
  48.                 pop hl
  49.                 dec b
  50.                 ld a,b
  51.                 cp 8
  52.                 jr z,logo_loop1
  53.                 or a
  54.                 jr nz,logo_pix_loop
  55.                 jr logo_loop
  56.                
  57. spr_cat
  58.         defb %00100000, %00000100
  59.         defb %00110000, %00001100
  60.         defb %00111011, %11011100
  61.         defb %00111111, %11111100
  62.         defb %01100011, %11000110
  63.         defb %01110001, %10001110
  64.         defb %00111111, %11111100
  65.         defb %00001111, %11110000
  66.         defb %00000011, %11000000
  67.         defb %01110000, %00001110
  68.         defb %10001001, %10010000
  69.         defb %10001001, %10001110
  70.         defb %10001011, %11000001
  71.         defb %01110011, %11001110
  72.         defb %00000011, %11000000
  73.         defb %00000111, %11100000
  74.         defb %00001111, %11110000
  75.         defb %00001111, %11110000
  76.         defb %00000111, %11100000
  77.         defb %00011111, %11111000
  78.         defb %00111111, %11111100
  79.         defb 0xff
  80. spr_str
  81.         db "\r\n                        ",0
  82. logo_end       
  83.                 ld de,0
  84.                 OS_SETXY
  85.                 endif
  86.                
  87.         ld e,'A'
  88. mountdrives0
  89.         push de
  90.         ld a,e
  91.         ld (tdrivemounted_drive),a
  92.         OS_MOUNT
  93.         or a
  94.         jr nz,.mnt_fail
  95.         ld hl,tdrivemounted
  96.         call prtext
  97.         pop de
  98.                 jr .mnt_next
  99. .mnt_fail
  100.         pop de
  101.                 cp 13           ;There is no valid FAT volume on the physical drive
  102.                 jr z,.mnt_next
  103.                 cp 10           ;The physical drive is write protected
  104.                 jr z,.mnt_next
  105.                 ld a,e
  106.                 cp 'M'
  107.                 jr nc,.mnt_next
  108.                 dec a
  109.                 or %00000011    ;Next drive
  110.                 inc a
  111.                 ld e,a
  112. .mnt_next
  113.         inc e
  114.         ld a,e
  115.         cp 'P'
  116.         jr nz,mountdrives0
  117.                
  118. idle_runcmd
  119.         ;ld de,tpipename
  120.         ;push de
  121.         ;OS_OPENHANDLE
  122.         ;ld a,b
  123.         ;ld (pipe1handle),a
  124.         ;pop de
  125.         ;OS_OPENHANDLE
  126.         ;ld a,b
  127.         ;ld (pipe2handle),a
  128.  
  129.         OS_SETSYSDRV
  130.  
  131.         ld hl,tcmdloading
  132.         call prtext
  133.        
  134.         ;ld de,cmd_filename
  135.         ;OS_OPENHANDLE
  136.         ;or a
  137.         ;jr nz,execcmd_error
  138.        
  139.         ;call idle_readapp ;делает CLOSE
  140.        
  141.         ;push af
  142.         ;ld b,a
  143. ;pipehandles=$+1
  144. ;pipe1handle=$+1
  145. ;pipe2handle=$+2
  146.          ;ld de,0
  147.          ;ld h,0xff ;rnd
  148. ;b=id, e=stdin, d=stdout, h=stderr        
  149.         ;OS_SETSTDINOUT
  150.        
  151.         ;pop af ;id
  152.         ;ld e,a
  153.         ;OS_RUNAPP
  154.  
  155.  
  156.         ld de,term_filename
  157.         OS_OPENHANDLE
  158.         or a
  159.         jr nz,execcmd_error
  160.        
  161.         call idle_readapp ;делает CLOSE
  162.        
  163.          ;push af
  164.          ;ld b,a
  165.          ;ld hl,(pipehandles)
  166.          ;ld d,l
  167.          ;ld e,h
  168.          ;ld h,0xff ;rnd
  169. ;b=id, e=stdin, d=stdout, h=stderr        
  170.          ;OS_SETSTDINOUT
  171.          ;pop af ;id
  172.  
  173.         ld e,a
  174.         ;jr $
  175.         OS_RUNAPP
  176.        
  177. ;понизить приоритет себе
  178.         ld e,1
  179.         OS_FREEZEAPP
  180.        
  181. idleloop
  182.                 if atm != 1
  183.         halt ;читаем клавиатуру не слишком часто
  184.                 endif
  185.         ;ld a,1
  186.         ;out (0xfe),a
  187.        
  188.         ld a,0xfe
  189.         in a,(0xfe)
  190.         bit 3,a ;'c'
  191.         jr nz,idleloop
  192.         ld a,0x7f
  193.         in a,(0xfe)
  194.         bit 2,a ;'m'
  195.         jr nz,idleloop
  196.         ld a,0xfd
  197.         in a,(0xfe)
  198.         bit 2,a ;'d'
  199.         jr nz,idleloop
  200.         ld e,7
  201.         OS_CLS
  202.         ;jr $
  203.         jp idle_runcmd
  204.  
  205. execcmd_error
  206.         ld hl,tcmdnotfound
  207.         call prtext
  208.         jr idleloop
  209.  
  210. idle_readapp
  211.         ld a,b
  212.         ld (curhandle),a
  213.        
  214.         OS_NEWAPP ;для первой создаваемой задачи будут созданы первые два пайпа и подключены
  215. ;dehl=номера страниц в 0000,4000,8000,c000 нового приложения, b=id, a=error
  216.         push bc ;b=id
  217.  
  218.         ld a,d
  219.         SETPG32KHIGH
  220.         push de
  221.         push hl
  222.         ld hl,cmdbuf
  223.         ld de,0xc080
  224.         ld bc,128  
  225.         ldir ;command line
  226.         pop hl
  227.         pop de
  228.  
  229.         call readfile_pages_dehl
  230.  
  231.         ld a,(curhandle)
  232.         ld b,a
  233.         OS_CLOSEHANDLE
  234.  
  235.         pop af ;id
  236.         ret
  237.  
  238. tcmdnotfound
  239.         db "term.com not found",0x0d,0x0a,0
  240. tcmdloading
  241.         db "loading term.com",0x0d,0x0a,0
  242. tdrivemounted
  243.         db "Drive "
  244. tdrivemounted_drive
  245.         db "N mounted",0x0d,0x0a,0
  246.  
  247. cmdbuf
  248.         db "term.com cmd.com autoexec.bat",0 ;чтобы потом входить в интерактивный режим (cmd проверяет первое слово), иначе придётся прописать в autoexec.bat команду cmd и иметь две задачи cmd (одну висящую в ожидании другого cmd)
  249.        
  250. prtext
  251. prtext0
  252.         ld a,(hl)
  253.         or a
  254.         ret z
  255.         push hl
  256.         PRCHAR ;testing (351/352t) (was 986/987t)
  257.         pop hl
  258.         inc hl
  259.         jr prtext0
  260.  
  261. readfile_pages_dehl
  262.         ld a,d
  263.         SETPG32KHIGH
  264.         ld a,0xc100/256
  265.         call cmd_loadpage
  266.         ret nz        
  267.         ld a,e
  268.         call cmd_loadfullpage
  269.         ret nz
  270.         ld a,h
  271.         call cmd_loadfullpage
  272.         ret nz
  273.         ld a,l
  274. cmd_loadfullpage
  275.         SETPG32KHIGH
  276.         ld a,0xc000/256
  277. cmd_loadpage
  278. ;out: a=error
  279. ;keeps hl,de
  280.         push de
  281.         push hl
  282.         ld d,a
  283.         xor a
  284.         ld l,a
  285.         ld e,a
  286.         sub d
  287.         ld h,a ;de=buffer, hl=size
  288. curhandle=$+1
  289.         ld b,0
  290.         OS_READHANDLE
  291.         pop hl
  292.         pop de
  293.         or a
  294.         ret
  295.  
  296. term_filename
  297.         db "term.com",0
  298. ;cmd_filename
  299. ;        db "cmd.com" ;0 в конце подразумевается
  300. stack
  301.         ds 64
  302. endstack
  303.