?login_element?

Subversion Repositories NedoOS

Rev

Rev 864 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  2.  
  3. sys_newapp_forBDOS
  4.         ld a,(iy+app.id)
  5.        push af ;parent id
  6.          push iy ;parent app
  7.           di ;между findfreeid+findfreeappstruct и заполнением iy+app.id нельзя переключать задачи!!! ;TODO critical section
  8.         call sys_findfreeid ;портит iy
  9.          pop hl ;parent app
  10.         push af ;id
  11.          push hl ;parent app
  12.         call sys_findfreeappstruct ;возвращает iy = адрес первой свободной структуры app ;TODO error
  13.          pop ix ;parent app
  14.          ld a,(ix+app.stdin)
  15.          ld (iy+app.stdin),a
  16.          ld a,(ix+app.stdout)
  17.          ld (iy+app.stdout),a
  18.          ld a,(ix+app.stderr)
  19.          ld (iy+app.stderr),a
  20.          ld l,(ix+app.textcuraddr)
  21.          ld h,(ix+app.textcuraddr+1)
  22.          ;jr nz,BDOS_newapp_fail
  23.          jr z,sys_newapp_forBDOS2
  24. ;BDOS_newapp_fail
  25.         pop af
  26.        pop af
  27.         ld a,0xff
  28.           ei
  29.         ret
  30.  
  31. sys_newapp_forBDOS2
  32.         pop af ;id
  33.         push af ;id
  34.         ld e,0xff ;auto page
  35.         ;hl=textcuraddr
  36.         call sys_newapp
  37.           ei
  38.          push iy
  39.          pop de
  40.          ld hl,(appaddr)
  41.          ld bc,app.vol
  42.          add hl,bc
  43.          ex de,hl
  44.          add hl,bc
  45.          ex de,hl
  46.          ld bc,5;DIR_sz
  47.          ldir ;копировать текущий vol и dircluster
  48.         call BDOS_getmainpages_iy
  49.         pop bc ;b=id
  50.        pop af ;parent id
  51.         ld (iy+app.parentid),a
  52.         xor a
  53.         ret ;success
  54.        
  55. sys_newapp
  56. ;iy=app
  57. ;a=id
  58. ;e=page (0xff = auto)
  59. ;hl=textcuraddr
  60. ;в это время нельзя переключать задачи, иначе структуру могут перезахватить!
  61.         ;TODO priority
  62.         ld (iy+app.id),a ;зарезервировали место
  63.         ld (iy+app.flags),0 ;пока тут 0, задачу никто не будет трогать
  64.         ;ld hl,0xc1c0
  65.         ld (iy+app.textcuraddr),l
  66.         ld (iy+app.textcuraddr+1),h
  67.         ;TODO curmsg
  68.         ;TODO endmsg
  69.         ;TODO next
  70.         ld a,e
  71.         inc a
  72.        push af
  73.         call z,BDOS_newpage_iy
  74.         ld (iy+app.mainpg),e
  75.  
  76.         ld a,e
  77.         call sys_setpgc000
  78.  
  79.         ld hl,wasuserkernel
  80.         ld de,0+0xc000
  81.         ld bc,userkernel_sz
  82.         ldir
  83.        pop af
  84.        jr nz,sys_newapp_nokillcmdline ;for idle
  85.         xor a
  86.         ld (0xc000+COMMANDLINE),a ;command line
  87. sys_newapp_nokillcmdline
  88.         call disablescreeninapp
  89.        
  90.         call BDOS_newpage_iy
  91.         ld a,e
  92.         ld (curpg16k+0xc000),a
  93.         call BDOS_newpage_iy
  94.         ld a,e
  95.         ld (curpg32klow+0xc000),a
  96.         call BDOS_newpage_iy
  97.         ld a,e
  98.         ld (curpg32khigh+0xc000),a
  99.  
  100.         call sys_setpgc000
  101.         ld hl,0x0100
  102.         ld (0xfffe),hl ;адрес выхода
  103.        
  104.         ld (iy+app.curcolor),7
  105.         ld (iy+app.screen),fd_user
  106.         ;ld (iy+app.gfxmode),0xa8;%10101000 ;320x200 mode
  107.                 IFDEF NOTURBO
  108.         ld (iy+app.gfxmode),0xa6;%10101110 ;textmode
  109.                 ELSE
  110.         ld (iy+app.gfxmode),0xae;%10101110 ;textmode
  111.                 ENDIF
  112.         push iy
  113.         pop de
  114.         ld hl,app.pal
  115.         add hl,de
  116.         ex de,hl
  117.         ld hl,standardpal
  118.         ld bc,32
  119.         ldir
  120.  
  121.         ;ld a,SYSDRV ;TODO брать драйв от текущего app
  122.         ;call BDOS_setvol_rootdir ;требует PGFATFS
  123.                 ld a,(SYSDRV_VAL)
  124.          ld (iy+app.vol),a      ;SYSDRV ;TODO брать драйв от текущего app
  125.          ld (iy+app.dircluster),b;0
  126.          ld (iy+app.dircluster+1),b;0
  127.          ld (iy+app.dircluster+2),b;0
  128.          ld (iy+app.dircluster+3),b;0
  129.  
  130.         ld (iy+app.border),b;0
  131.  
  132.         ld a,pgkillable
  133.          ld (iy+app.scr0low),a;0
  134.          ld (iy+app.scr0high),a;0
  135.          ld (iy+app.scr1low),a;0
  136.          ld (iy+app.scr1high),a;0
  137.  
  138.         ;ld a,(iy+app.mainpg)
  139.         ;ld (iy-safestack_sz+1),a
  140.         ;ld a,(iy+app.screen)
  141.         ;ld (iy-safestack_sz+7),a
  142.         ld (iy-2),0xf8
  143.         ld (iy-1),0xff ;sp=-8 в описателе задачи (там 3 рег.пары и адрес выхода)
  144.         ;jr $
  145.         ret
  146.        
  147. makeidle
  148.         ld iy,app1
  149.         ld (appaddr),iy
  150.         ld a,1 ;id
  151.         ld e,pgtrdosfs ;pgidle
  152.         ld hl,0xc1c0
  153.         call sys_newapp
  154.         ;ld a,'i' ;idle
  155.         ;ld (0xc000+COMMANDLINE),a ;command line
  156.          ;ld (iy+app.vol),SYSDRV ;есть в самом idle
  157.         set factive,(iy+app.flags)
  158.         ret
  159.  
  160. standardpal
  161.         STANDARDPAL
  162.  
  163.         if PS2KBD==0
  164.                         include "syskey2.asm"
  165.                 else
  166.                         include "ps2drv.asm"
  167.         endif
  168.        
  169. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  170.                 if INETDRV
  171.         include "w5300.asm"
  172.         else
  173. wiznet_open
  174. wiznet_close
  175. wiznet_read
  176. wiznet_write
  177.         ld hl,0xffff
  178.         ld a,l
  179.         ret
  180.                 ENDIF
  181.