?login_element?

Subversion Repositories NedoOS

Rev

Rev 776 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;maincode
  2. ;возврат в систему
  3. ;TODO через функцию системы (чтобы 0x0000 можно было использовать для своих целей, напр. структура NIL или указатель в 0xffff)
  4. user_fdvalue1=$+1
  5.         ld a,fd_system
  6.         out (0xfd),a
  7. ;(в CP/M текущий дисковод!)
  8.         nop
  9.  
  10.         ds 0x0005-$ ;0 b
  11. ;вызов функции системы
  12. ;TODO сделать рестарт, с сохранением аккумулятора
  13. user_fdvalue2=$+1
  14.         ld a,fd_system
  15.         out (0xfd),a
  16. ;getchar=0x0009 (можно rst 0x08)
  17. user_fdvalue3=$+1
  18.         ld a,fd_system
  19.         out (0xfd),a
  20. kernel_setpg
  21.         out (c),a
  22.         ret
  23.  
  24.         ds 0x0010-$ ;0 b
  25. ;putchar=0x0010
  26.         ld e,a
  27. user_fdvalue4=$+1
  28.         ld a,fd_system
  29.         out (0xfd),a
  30. kernel_result_a
  31.         ex af,af' ;'
  32.         ret ;можно перенести вместо kernel_setpg
  33. user_scr0_low=0x0017
  34.         nop
  35.  
  36. ;TODO убрать рестарты включения страниц, вместо них сделать вызовы (будет быстрее из-за отсутствия jr)
  37.         ds 0x0018-$ ;1 b
  38. ;setpg4000=0x0018
  39.         ld bc,memport4000
  40.         ld (curpg16k),a
  41.         jr kernel_setpg
  42.  
  43.         ds 0x0020-$ ;0 b
  44. ;setpg8000=0x0020
  45.         ld bc,memport8000
  46.         ld (curpg32klow),a
  47.         jr kernel_setpg
  48.  
  49.         ds 0x0028-$ ;0 b
  50. ;setpgc000=0x0028
  51.         ld bc,memportc000
  52.         ld (curpg32khigh),a
  53.         jr kernel_setpg
  54.  
  55.         ds 0x0030-$ ;0 b
  56.         jp $
  57.         nop
  58.         nop
  59. user_scr0_high=0x0035
  60.         nop
  61. user_scr1_low=0x0036
  62.         nop
  63. user_scr1_high=0x0037
  64.         nop
  65.  
  66. ;int=3946t / 1800t без палитры (из них 905t установка палитры, 874t чтение клавиатуры)
  67.         ds 0x0038-$ ;0 b
  68.         push af
  69.         push bc
  70.         push de
  71. user_fdvalue6=$+1
  72.         ld a,fd_system ;%0x0Ksx1x ;для неисправленного АТМ2 надо A9=1, а номер страницы в 0x7ffd не будет влиять, если адресация по memportc000
  73.         out (0xfd),a ;7 b
  74. ;---------
  75. init_resident
  76. ;di ;сейчас мы в стеке чужой задачи, т.к. свою ещё не включили!!! можем запороть чужой стек!!!
  77. ;bc=memport0000
  78. ;d=pgmain
  79.        ei ;interrupt will be enabled after the following command (31 t-states di:out:ei:out, normal INT len = 32 t)
  80.         out (c),d ;may switch this code page
  81. curpg16k=$+1
  82.         ld a,pgkillable;0;pgmain4000
  83.         ld b,memport4000/256
  84.         out (c),a
  85. curpg32klow=$+1
  86.         ld a,pgkillable;0;pgmain8000
  87.         ld b,memport8000/256
  88.         out (c),a
  89. curpg32khigh=$+1
  90.         ld a,pgkillable;0;pgmainc000
  91.         ld b,memportc000/256
  92.         out (c),a
  93.         pop de
  94.         pop bc
  95.         pop af
  96.         ret
  97.  
  98.         display "end of user kernel=",$
  99.         display "curpg16k=",curpg16k
  100.         display "curpg32klow=",curpg32klow
  101.         display "curpg32khigh=",curpg32khigh
  102.