?login_element?

Subversion Repositories NedoOS

Rev

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