?login_element?

Subversion Repositories NedoOS

Rev

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

  1.  
  2.     MODULE TIME
  3.     PUBLIC time
  4.         #include "sysdefs.asm"
  5.         RSEG CODE
  6. time:
  7.         push ix
  8.         push iy
  9.     ld c,CMD_GETTIMER ;out: dehl=timer
  10.         call BDOS
  11.         ld b,d
  12.         ld c,e
  13.         pop iy
  14.         pop ix
  15.         ret ;return bchl
  16.         ENDMOD
  17.  
  18.  
  19. ;unsigned long OS_GETTIME (struct diskOp *); //out: ix=date, hl=time
  20.  
  21.  
  22.     MODULE OS_GETTIME
  23.     PUBLIC OS_GETTIME
  24.         #include "sysdefs.asm"
  25.         RSEG CODE
  26. OS_GETTIME:
  27.     push ix
  28.     push iy
  29.     ld c,CMD_GETTIME ;out: ix=date, hl=time
  30.         call BDOS
  31.         di
  32.         push ix
  33.         pop bc
  34.         ei
  35.         pop iy
  36.     pop ix
  37.     ret ;return bchl
  38.         ENDMOD
  39.  
  40.         MODULE ERRNOMOD
  41.         PUBLIC errno
  42.         RSEG    NO_INIT
  43. errno:
  44.         defs 1
  45.         ENDMOD
  46.        
  47.         MODULE MYGETCHAR
  48.         PUBLIC getchar
  49.         EXTERN _low_level_get
  50.         RSEG CODE
  51. getchar:
  52.         call _low_level_get
  53.         or a
  54.         jr z,getchar
  55.         ld l,a
  56.         ld h,0
  57.         ret    
  58.         ENDMOD
  59.        
  60.         MODULE OS_RESERV_1
  61.         PUBLIC os_reserv_1
  62.         #include "sysdefs.asm"
  63.         RSEG CODE
  64. os_reserv_1:
  65.         push bc
  66.         push ix
  67.         push iy
  68.     ld c,CMD_RESERV_1
  69.         call BDOS
  70.         pop iy
  71.         pop ix
  72.         pop bc
  73.         ret    
  74.         ENDMOD
  75.        
  76.         MODULE SCRREDRAW
  77.         PUBLIC scrredraw
  78.         RSEG CODE
  79. scrredraw:
  80.         xor a
  81.         ret    
  82.         ENDMOD
  83.  
  84.         MODULE OSLOWGET
  85.         PUBLIC bdosgetkey
  86.         EXTERN scrredraw,exit,YIELD
  87.         #include "sysdefs.asm"
  88.         RSEG CODE
  89. bdosgetkey:
  90.         push de
  91.         push bc
  92.         push ix
  93.         push iy
  94.         ld c,CMD_YIELD
  95.         call BDOS
  96.         rst 0x08
  97.         cp key_esc
  98.         jp z,exit
  99.         cp key_redraw
  100.         call z,scrredraw
  101.         ld l,a
  102.         ld h,0
  103.         pop iy
  104.         pop ix
  105.         pop bc
  106.         pop de
  107.         ret
  108.         ENDMOD
  109.    
  110.         MODULE conv1251to866
  111.         PUBLIC conv1251to866, t1251to866
  112.         RSEG CODE
  113. conv1251to866:  ;DE-string
  114.         push de
  115. ploop:
  116.         ld a,(de)
  117.         or a
  118.         jr z,pexit
  119.         cp 128
  120.         jr c,asci
  121.         add a,low(t1251to866-128)
  122.         ld l,a
  123.         ld a,0
  124.         adc a,high(t1251to866-128)
  125.         ld h,a
  126.         ld a,(hl)
  127.         ld (de),a
  128. asci:
  129.         inc de
  130.         jr ploop
  131. pexit:
  132.         pop de
  133.         ret
  134.         RSEG    CONST
  135. t1251to866:
  136.         DEFB 0x3F, 0x3F, 0x27, 0x3F, 0x22, 0x3A, 0xC5, 0xD8, 0x3F, 0x25, 0x3F, 0x3C, 0x3F, 0x3F, 0x3F, 0x3F
  137.         DEFB 0x30, 0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D, 0x54, 0x3F, 0x3E, 0x3F, 0x3F, 0x3F, 0x3F
  138.         DEFB 0xFF, 0xF6, 0xF7, 0x3F, 0xFD, 0x3F, 0xB3, 0x15, 0xF0, 0x63, 0xF2, 0x3C, 0xBF, 0x2D, 0x52, 0xF4
  139.         DEFB 0xF8, 0x2B, 0x3F, 0x3F, 0x3F, 0xE7, 0x14, 0xFA, 0xF1, 0xFC, 0xF3, 0x3E, 0x3F, 0x3F, 0x3F, 0xF5
  140.         DEFB 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F
  141.         DEFB 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F
  142.         DEFB 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF
  143.         DEFB 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF
  144.         ENDMOD
  145.        
  146.         MODULE YIELD
  147.         PUBLIC YIELD
  148.         #include "sysdefs.asm"
  149.         RSEG CODE
  150. YIELD:
  151.         push bc
  152.         push de
  153.         push ix
  154.         push iy
  155.         ld c,CMD_YIELD
  156.         call BDOS
  157.         pop iy
  158.         pop ix
  159.         pop de
  160.         pop bc
  161.         ret
  162.         ENDMOD
  163.        
  164.         MODULE SETMUSIC
  165.         PUBLIC OS_SETMUSIC
  166.         #include "sysdefs.asm"
  167.         RSEG CODE
  168. OS_SETMUSIC:    ;DE - proc_ptr, A - ?
  169.         ld h,d
  170.         ld l,e
  171.         ld a,c
  172.     ex af,af'
  173.         push ix
  174.         push iy
  175.         ld c,CMD_SETMUSIC       ;hl=muzaddr (0x4000..0x7fff), a=muzpg
  176.         call BDOS
  177.         pop iy
  178.         pop ix
  179.         ret
  180.         ENDMOD
  181.        
  182.         MODULE OSGETCONFIG
  183.         PUBLIC OS_GETCONFIG
  184.         #include "sysdefs.asm"
  185.         RSEG CODE
  186. OS_GETCONFIG:
  187.    push bc
  188.         ld c,CMD_GETCONFIG
  189.         push de
  190.         push ix
  191.         push iy
  192.         call BDOS
  193.         pop iy
  194.         pop ix
  195.         pop de
  196.    pop bc
  197.         ret
  198.         ENDMOD
  199.  
  200.         MODULE GETMAINPAGES
  201.         PUBLIC OS_GETMAINPAGES,OS_GETAPPMAINPAGES
  202.    EXTERN errno
  203.         #include "sysdefs.asm"
  204.         RSEG CODE
  205. OS_GETAPPMAINPAGES:
  206.    ld c,CMD_GETAPPMAINPAGES
  207.    jr l1
  208. OS_GETMAINPAGES:
  209.         ld c,CMD_GETMAINPAGES
  210. l1
  211.         push de
  212.         push ix
  213.         push iy
  214.         call BDOS
  215.         ld b,d ;out: d,e,h,l=pages in 0000,4000,8000,c000, c=flags, a=error
  216.         ld c,e
  217.         pop iy
  218.         pop ix
  219.         pop de
  220.         LD (errno), a
  221.         ret
  222.         ENDMOD
  223.  
  224.         MODULE SETPG32KHIGH
  225.         PUBLIC SETPG32KHIGH
  226.         #include "sysdefs.asm"
  227.         RSEG CODE
  228. SETPG32KHIGH:
  229.         push bc
  230.         push ix
  231.         push iy
  232.         ld a,e
  233.         rst 0x28
  234.         pop iy
  235.         pop ix
  236.         pop bc
  237.         ret
  238.         ENDMOD
  239.  
  240.         MODULE MAIN_ARGS
  241.         PUBLIC main_args
  242.         RSEG CODE
  243. main_args
  244.         ld hl,args
  245.         ld de,0x0080
  246. get_cmd_args_l2
  247.         ld (hl),e
  248.         inc hl
  249.         ld (hl),d
  250.         inc hl
  251.         dec de
  252. get_cmd_args_l
  253.         inc de
  254.         ld a,(de)
  255.         or a
  256.         jr z,get_cmd_args_end
  257.         cp ' '
  258.         jr nz,get_cmd_args_l
  259.         xor a
  260.         ld (de),a
  261. skipspaces
  262.         inc de
  263.         ld a,(de)
  264.         or a
  265.         jr z,get_cmd_args_end
  266.         cp ' '
  267.         jr nz,get_cmd_args_l2
  268.         jr skipspaces
  269. get_cmd_args_end:
  270.         ld bc,args
  271.         sbc hl,bc
  272.         ex de,hl
  273.         srl e
  274.         ret
  275.         RSEG    NO_INIT
  276. args:
  277.         defs 32
  278.         ENDMOD
  279.  
  280.  
  281.         MODULE OSDROPAPP
  282.         PUBLIC OS_DROPAPP
  283.         #include "sysdefs.asm"
  284.         RSEG CODE
  285. OS_DROPAPP:     ;e=id ; hl=result
  286.         ld c,CMD_DROPAPP
  287.         push ix
  288.         push iy
  289.         call BDOS
  290.         pop iy
  291.         pop ix
  292.         ret
  293.         ENDMOD
  294.  
  295.         MODULE OS_SETGFX
  296.         PUBLIC OS_SETGFX
  297.         #include "sysdefs.asm"
  298.         RSEG CODE
  299. OS_SETGFX:      ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;eF=-1: disable gfx (out: e=old gfxmode)
  300.    push bc
  301.         push hl
  302.         push ix
  303.         push iy
  304.         ld c,CMD_SETGFX
  305.         call BDOS
  306.         pop iy
  307.         pop ix
  308.         pop hl
  309.         pop bc
  310.         ret
  311.         ENDMOD
  312.  
  313.         MODULE OSGETPAGEOWNER   ;e=page ;out: e=owner id (0=free, 0xff=system)
  314.         PUBLIC OS_GETPAGEOWNER
  315.         #include "sysdefs.asm"
  316.         RSEG CODE
  317. OS_GETPAGEOWNER:
  318.    push bc
  319.         ld c,CMD_GETPAGEOWNER
  320.         push de
  321.         push ix
  322.         push iy
  323.         call BDOS
  324.         LD a, e
  325.         pop iy
  326.         pop ix
  327.         pop de
  328.    pop bc
  329.         ret
  330.         ENDMOD
  331.        
  332.         MODULE  my_im2
  333.         PUBLIC  my_im2_init
  334.         RSEG    INTJP
  335.         DEFS 3
  336.         RSEG    INTTABLE
  337.         DEFS 257
  338.         RSEG    CODE
  339. my_im2_init
  340.         di
  341.         ld a,0xc3
  342.         ld (SFB(INTJP)),a
  343.         ld (SFB(INTJP)+1),de
  344.         ld a,HIGH(SFB(INTTABLE))
  345.         ld i,a
  346.         inc a
  347.         ld hl,SFB(INTTABLE)-1
  348. tloop
  349.         inc hl
  350.         ld (hl),HIGH(SFB(INTJP))
  351.         cp h
  352.         jr nz,tloop
  353.         im 2
  354.         ret
  355.         ENDMOD
  356.  
  357. ;Kulich Area
  358.  
  359.         MODULE OS_NEWPAGE       ;out: a=0 (OK)/!=0 (fail), e=page
  360.         PUBLIC OS_NEWPAGE
  361.         #include "sysdefs.asm"
  362.         RSEG CODE
  363. OS_NEWPAGE:
  364.    push bc
  365.         ld c,CMD_NEWPAGE
  366.         push ix
  367.         push iy
  368.         call BDOS
  369.         pop iy
  370.         pop ix
  371.    pop bc
  372.         ld h,a                  ;error
  373.         ld l,e                  ;page
  374.         ret
  375.         ENDMOD
  376.  
  377.  
  378. // DE - старое имя, возможно с полным или относительным путём (ASCIIZ). HL - новое имя, пока что требуется такой же путь, как в DE.
  379. // out HL - указатель на последний элемент пути в этом буфере (NOT MSXDOS compatible! with Drive/path!)
  380.         MODULE OS_RENAME
  381.         PUBLIC OS_RENAME
  382.         #include "sysdefs.asm"
  383.         RSEG CODE
  384. OS_RENAME:
  385. ;           ld de, oldname
  386. ;       ld bc, newname
  387.         ld h,b
  388.         ld l,c
  389.         push ix
  390.         push iy
  391.         ld c,CMD_RENAME
  392.         call BDOS
  393.         pop iy
  394.         pop ix
  395.         ret
  396.         ENDMOD
  397.  
  398. // DE - имя файла, возможно с полным или относительным путём (ASCIIZ).; А - ошибка. Если 0x00, то ошибки нет.                                                                                        
  399.         MODULE OS_DELETE
  400.         PUBLIC OS_DELETE
  401.         #include "sysdefs.asm"
  402.         RSEG CODE
  403. OS_DELETE:
  404.         push bc
  405.         push ix
  406.         push iy
  407.         ld c,CMD_DELETE
  408.         call BDOS
  409.         pop iy
  410.         pop ix
  411.         pop bc
  412.         ld h,0
  413.         ld l,a
  414.         ret
  415.         ENDMOD
  416.  
  417.  
  418.  
  419.  
  420.  
  421.         MODULE OS_READSECTORS   ;de= pointer to diskOp structure
  422.         PUBLIC OS_READSECTORS
  423.         #include "sysdefs.asm"
  424.         RSEG CODE
  425. OS_READSECTORS:
  426.         push bc
  427.         push de
  428.         push ix
  429.         push iy
  430.  
  431.         ex de,hl
  432.         ld b,(hl)       ;drive
  433.         inc l
  434.         ld e,(hl)       ;buffer L
  435.         inc l
  436.         ld d,(hl)       ;buffer H
  437.         inc l
  438.         push de
  439.         ld e,(hl)       ;sector L
  440.         inc l
  441.         ld d,(hl)       ;sector H
  442.         inc l
  443.         ld  a,(hl)      ;sector X
  444.         ld  ixl,a
  445.         inc l
  446.         ld  a,(hl)      ;sector I
  447.         ld  ixh,a
  448.         inc l
  449.         ld  a,(hl)      ;count
  450.         pop hl
  451.         ex de,hl
  452.         ld c,CMD_READSECTORS
  453.         ex af,af' ;'
  454.     call BDOS ;c=CMD
  455.         pop iy
  456.         pop ix
  457.         pop de
  458.         pop bc
  459.         ret             ;BCHL
  460.         ENDMOD 
  461.        
  462.         MODULE OS_WRITESECTORS  ;de= pointer to diskOp structure
  463.         PUBLIC OS_WRITESECTORS
  464.         #include "sysdefs.asm"
  465.         RSEG CODE
  466. OS_WRITESECTORS:
  467.         push bc
  468.         push de
  469.         push ix
  470.         push iy
  471.  
  472.         ex de,hl
  473.         ld b,(hl)       ;drive
  474.         inc l
  475.         ld e,(hl)       ;buffer L
  476.         inc l
  477.         ld d,(hl)       ;buffer H
  478.         inc l
  479.         push de
  480.         ld e,(hl)       ;sector L
  481.         inc l
  482.         ld d,(hl)       ;sector H
  483.         inc l
  484.         ld  a,(hl)      ;sector X
  485.         ld  ixl,a
  486.         inc l
  487.         ld  a,(hl)      ;sector I
  488.         ld  ixh,a
  489.         inc l
  490.         ld  a,(hl)      ;count
  491.         pop hl
  492.         ex de,hl
  493.         ld c,CMD_WRITESECTORS
  494.         ex af,af' ;'
  495.     call BDOS ;c=CMD
  496.         pop iy
  497.         pop ix
  498.         pop de
  499.         pop bc
  500.         ret             ;BCHL  
  501.         ENDMOD
  502.  
  503.         MODULE OS_GETPATH
  504.         PUBLIC OS_GETPATH
  505.         #include "sysdefs.asm"
  506.         RSEG CODE
  507. OS_GETPATH:
  508.         push bc
  509.         push ix
  510.         push iy
  511.         ld c,CMD_GETPATH
  512.         call BDOS
  513.         pop iy
  514.         pop ix
  515.         pop bc
  516.         ld hl,0
  517.         ret
  518.         ENDMOD
  519.  
  520.         MODULE OS_SETSYSDRV                    
  521.         PUBLIC OS_SETSYSDRV                    
  522.         #include "sysdefs.asm"
  523.         RSEG CODE      
  524. OS_SETSYSDRV
  525.         push bc
  526.         push de
  527.         push ix
  528.         push iy
  529.         ld c,CMD_SETSYSDRV                      ; out: A: A!=0 -- системный диск не примонтирован. L: -- общее количество примонтированных дисков.
  530.         call BDOS
  531.         pop iy
  532.         pop ix
  533.         pop de
  534.         pop bc
  535.         ld h,a                                          ;h = error l = No of disks
  536.         ret
  537.         ENDMOD
  538.  
  539.         MODULE OS_CHDIR
  540.         PUBLIC OS_CHDIR
  541.         #include "sysdefs.asm"
  542.         RSEG CODE
  543. OS_CHDIR:
  544.         push bc
  545.         push ix
  546.         push iy
  547.         ld c,CMD_CHDIR                          ;DE = Pointer to ASCIIZ string. Out A=error
  548.         call BDOS
  549.         pop iy
  550.         pop ix
  551.         pop bc
  552.         ld l,0
  553.         ld h,a                                          ;h = error
  554.         ret
  555.         ENDMOD
  556.  
  557.  
  558.         MODULE OS_NEWAPP
  559.         PUBLIC OS_NEWAPP
  560.         #include "sysdefs.asm"
  561.         RSEG CODE
  562. OS_NEWAPP:
  563.         push bc
  564.         ld (strPtr), de
  565.         push ix
  566.         push iy
  567.         ld c,CMD_NEWAPP                         ;out: b=id, a=error, dehl=newapp pages in 0000,4000,8000,c000 ;MAKE NEW DISABLED APP
  568.         call BDOS
  569.         pop iy
  570.         pop ix
  571.         ld c,a
  572.         push hl
  573.         ld hl,(strPtr)
  574.         ld (hl),d
  575.         inc hl
  576.         ld (hl),e
  577.         pop hl
  578.         ex de,hl
  579.         ld hl,(strPtr)
  580.         inc hl
  581.         inc hl
  582.         ld (hl),d
  583.         inc hl
  584.         ld (hl),e
  585.         inc hl
  586.         ld (hl),b
  587.         inc hl
  588.         ld (hl),c
  589.         pop bc
  590.         ret
  591. strPtr
  592.         DEFW 0000
  593.         ENDMOD
  594.  
  595.         MODULE OS_RUNAPP
  596.         PUBLIC OS_RUNAPP
  597.         #include "sysdefs.asm"
  598.         RSEG CODE
  599. OS_RUNAPP:     
  600.         push hl
  601.         push bc
  602.         push ix
  603.         push iy
  604.         ld c,CMD_RUNAPP ;e=id ;ACTIVATE DISABLED APP
  605.         call BDOS
  606.         pop iy
  607.         pop ix
  608.     pop bc
  609.         pop hl
  610.         ret
  611.         ENDMOD
  612.  
  613.         MODULE OS_WAITPID
  614.         PUBLIC OS_WAITPID
  615.         #include "sysdefs.asm"
  616.         RSEG CODE
  617. OS_WAITPID:
  618.         push bc
  619.         push ix
  620.         push iy
  621.     ld c,CMD_SETWAITING
  622.         call BDOS
  623.         ld c,CMD_YIELD
  624.         call BDOS
  625.         ld c,CMD_GETCHILDRESULT
  626.         call BDOS
  627.         pop iy
  628.         pop ix
  629.         pop bc
  630.         ret
  631.         ENDMOD
  632.  
  633.  
  634.  
  635.  
  636.         MODULE OS_HIDEFROMPARENT
  637.         PUBLIC OS_HIDEFROMPARENT
  638.         #include "sysdefs.asm"
  639.         RSEG CODE
  640. OS_HIDEFROMPARENT:     
  641.         push bc
  642.         push ix
  643.         push iy
  644.         ld c,CMD_HIDEFROMPARENT
  645.         call BDOS
  646.         pop iy
  647.         pop ix
  648.     pop bc
  649.         ret
  650.         ENDMOD
  651.  
  652.         MODULE OS_CLS
  653.         PUBLIC OS_CLS
  654.         #include "sysdefs.asm"
  655.         RSEG CODE
  656. OS_CLS:
  657.         push bc
  658.         push hl
  659.         push ix
  660.         push iy
  661.         ld c,CMD_CLS
  662.         call BDOS
  663.         pop iy
  664.         pop ix
  665.         pop bc
  666.         pop hl
  667.         ret
  668.         ENDMOD
  669.  
  670.  
  671.  
  672.         MODULE OS_GETKEY
  673.         PUBLIC OS_GETKEY
  674.         RSEG CODE
  675. OS_GETKEY:
  676.         push ix
  677.         push iy
  678.     rst 0x08    ;out: a=key (NOKEY=no key), de=mouse position (y,x), l=mouse buttons (bits 0,1,2: 0=pressed)+mouse wheel (bits 7..4), h=high bits of key|register, bc=keynolang, lx=kempston joystick, nz=no focus (mouse position=0, ignore it!)
  679.         pop iy
  680.         pop ix
  681.         ld l,a
  682.         ld h,c
  683.         ld bc,0x8000
  684.         jp nz, focusFalse
  685.         ld bc,0x0000
  686.         focusFalse:
  687.         ret             ;B = флаг фокуса  C=0 H=код интернациональный L=код с языком
  688.         ENDMOD
  689.  
  690.  
  691. ;Возвращает нажатую кнопку клавиатуры, кнопки мыши и координаты мыши.
  692. ;Фактически чтение происходит только процессом с фокусом. При отсутствии фокуса возвращается
  693. ;код символа NOKEY и флаг Z установлен в 0 (т.е. верно условие NZ).
  694. ;    Аргументов нет.
  695. ;    Возвращаемые значения в регистрах:
  696. ;        A - код символа(кнопки). Допустимые коды смотри в 'sysdefs.asm' секция 'Usable key codes'
  697. ;        C - код символа(кнопки) без учета текущего языкового модификатора. Как правило, используется для обработки "горячих кнопок"
  698. ;        DE - позиция мыши (y,x) (возвращает 0 при отсутствии фокуса)
  699. ;        L - кнопки мыши (bits 0(LMB),1(RMB),2(MMB): 0=pressed; bits 7..4=положение колёсика)
  700. ;        LX - Kempston joystick (0bP2JFUDLR): 1=pressed, - при отсутствии джойстика 0 (а не 0xff)
  701. ;        Флаг Z - если 0(NZ), то отсутствует фокус.
  702.  
  703.  
  704.  
  705.         MODULE OS_DIHALT
  706.         PUBLIC OS_DIHALT
  707.         RSEG CODE
  708. OS_DIHALT:
  709.         DI
  710.         HALT
  711.         ret
  712.         //ENDMOD
  713.         END
  714.