?login_element?

Subversion Repositories NedoOS

Rev

Rev 547 | Rev 660 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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 e,0xdb
  37.                 sla c
  38.                 jr c,logo_no_pix
  39.                 ld e,' '
  40. logo_no_pix
  41.                 push hl
  42.                 push bc
  43.                 push de
  44.                 OS_PRCHAR
  45.                 pop de
  46.                 OS_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.        
  172.         pop af ;id
  173.         ld e,a
  174.         ;jr $
  175.         OS_RUNAPP
  176.        
  177. ;понизить приоритет себе
  178.         ld e,1
  179.         OS_FREEZEAPP
  180.        
  181. idleloop
  182.         ;ld a,1
  183.         ;out (0xfe),a
  184.        
  185.         ld a,0xfe
  186.         in a,(0xfe)
  187.         bit 3,a ;'c'
  188.         jr nz,idleloop
  189.         ld a,0x7f
  190.         in a,(0xfe)
  191.         bit 2,a ;'m'
  192.         jr nz,idleloop
  193.         ld a,0xfd
  194.         in a,(0xfe)
  195.         bit 2,a ;'d'
  196.         jr nz,idleloop
  197.         ld e,7
  198.         OS_CLS
  199.         ;jr $
  200.         jp idle_runcmd
  201.  
  202. execcmd_error
  203.         ld hl,tcmdnotfound
  204.         call prtext
  205.         jr idleloop
  206.  
  207. idle_readapp
  208.         ld a,b
  209.         ld (curhandle),a
  210.        
  211.         OS_NEWAPP ;для первой создаваемой задачи будут созданы первые два пайпа и подключены
  212. ;dehl=номера страниц в 0000,4000,8000,c000 нового приложения, b=id, a=error
  213.         push bc ;b=id
  214.  
  215.         ld a,d
  216.         SETPG32KHIGH
  217.         push de
  218.         push hl
  219.         ld hl,cmdbuf
  220.         ld de,0xc080
  221.         ld bc,128  
  222.         ldir ;command line
  223.         pop hl
  224.         pop de
  225.  
  226.         call readfile_pages_dehl
  227.  
  228.         ld a,(curhandle)
  229.         ld b,a
  230.         OS_CLOSEHANDLE
  231.  
  232.         pop af ;id
  233.         ret
  234.  
  235. tcmdnotfound
  236.         db "term.com not found",0x0d,0x0a,0
  237. tcmdloading
  238.         db "loading term.com",0x0d,0x0a,0
  239. tdrivemounted
  240.         db "Drive "
  241. tdrivemounted_drive
  242.         db "N mounted",0x0d,0x0a,0
  243.  
  244. cmdbuf
  245.         db "term.com cmd.com autoexec.bat",0 ;чтобы потом входить в интерактивный режим (cmd проверяет первое слово), иначе придётся прописать в autoexec.bat команду cmd и иметь две задачи cmd (одну висящую в ожидании другого cmd)
  246.        
  247. prtext
  248. prtext0
  249.         ld a,(hl)
  250.         or a
  251.         ret z
  252.         push hl
  253.         PRCHAR ;testing (351/352t) (was 986/987t)
  254.         pop hl
  255.         inc hl
  256.         jr prtext0
  257.  
  258. readfile_pages_dehl
  259.         ld a,d
  260.         SETPG32KHIGH
  261.         ld a,0xc100/256
  262.         call cmd_loadpage
  263.         ret nz        
  264.         ld a,e
  265.         call cmd_loadfullpage
  266.         ret nz
  267.         ld a,h
  268.         call cmd_loadfullpage
  269.         ret nz
  270.         ld a,l
  271. cmd_loadfullpage
  272.         SETPG32KHIGH
  273.         ld a,0xc000/256
  274. cmd_loadpage
  275. ;out: a=error
  276. ;keeps hl,de
  277.         push de
  278.         push hl
  279.         ld d,a
  280.         xor a
  281.         ld l,a
  282.         ld e,a
  283.         sub d
  284.         ld h,a ;de=buffer, hl=size
  285. curhandle=$+1
  286.         ld b,0
  287.         OS_READHANDLE
  288.         pop hl
  289.         pop de
  290.         or a
  291.         ret
  292.  
  293. term_filename
  294.         db "term.com",0
  295. ;cmd_filename
  296. ;        db "cmd.com" ;0 в конце подразумевается
  297. stack
  298.         ds 64
  299. endstack
  300.