Subversion Repositories NedoOS

Rev

Rev 2296 | 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 OS_SETSCREEN
  241.         PUBLIC OS_SETSCREEN
  242.         #include "sysdefs.asm"
  243.         RSEG CODE
  244. OS_SETSCREEN:
  245.   ;halt
  246.         push bc
  247.         push hl
  248.         push ix
  249.         push iy
  250.         ld c,CMD_SETSCREEN       ;e=screen=0..1
  251.         call BDOS
  252.         pop iy
  253.         pop ix
  254.         pop hl
  255.         pop bc
  256.         ret
  257.         ENDMOD
  258.  
  259.         MODULE OS_SETPGC000
  260.         PUBLIC OS_SETPGC000
  261.         #include "sysdefs.asm"
  262.         RSEG CODE
  263. OS_SETPGC000:
  264.         push bc
  265.         push ix
  266.         push iy
  267.         ld a,e
  268.         rst 0x28
  269.         pop iy
  270.         pop ix
  271.         pop bc
  272.         ret
  273.         ENDMOD
  274.  
  275.         MODULE OS_SETPG8000
  276.         PUBLIC OS_SETPG8000
  277.         #include "sysdefs.asm"
  278.         RSEG CODE
  279. OS_SETPG8000:
  280.         push bc
  281.         push ix
  282.         push iy
  283.         ld a,e
  284.         rst 0x20
  285.         pop iy
  286.         pop ix
  287.         pop bc
  288.         ret
  289.         ENDMOD
  290.  
  291.         MODULE MAIN_ARGS
  292.         PUBLIC main_args
  293.         RSEG CODE
  294. main_args
  295.         ld hl,args
  296.         ld de,0x0080
  297. get_cmd_args_l2
  298.         ld (hl),e
  299.         inc hl
  300.         ld (hl),d
  301.         inc hl
  302.         dec de
  303. get_cmd_args_l
  304.         inc de
  305.         ld a,(de)
  306.         or a
  307.         jr z,get_cmd_args_end
  308.         cp ' '
  309.         jr nz,get_cmd_args_l
  310.         xor a
  311.         ld (de),a
  312. skipspaces
  313.         inc de
  314.         ld a,(de)
  315.         or a
  316.         jr z,get_cmd_args_end
  317.         cp ' '
  318.         jr nz,get_cmd_args_l2
  319.         jr skipspaces
  320. get_cmd_args_end:
  321.         ld bc,args
  322.         sbc hl,bc
  323.         ex de,hl
  324.         srl e
  325.         ret
  326.         RSEG    NO_INIT
  327. args:
  328.         defs 32
  329.         ENDMOD
  330.  
  331.  
  332.         MODULE OSDROPAPP
  333.         PUBLIC OS_DROPAPP
  334.         #include "sysdefs.asm"
  335.         RSEG CODE
  336. OS_DROPAPP:     ;e=id ; hl=result
  337.         ld c,CMD_DROPAPP
  338.         push ix
  339.         push iy
  340.         call BDOS
  341.         pop iy
  342.         pop ix
  343.         ret
  344.         ENDMOD
  345.  
  346.         MODULE OS_SETGFX
  347.         PUBLIC OS_SETGFX
  348.         #include "sysdefs.asm"
  349.         RSEG CODE
  350. OS_SETGFX:      ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  351.         push bc
  352.         push hl
  353.         push ix
  354.         push iy
  355.         ld c,CMD_SETGFX
  356.         halt
  357.         call BDOS
  358.         pop iy
  359.         pop ix
  360.         pop hl
  361.         pop bc
  362.         ld a, e
  363.         ret
  364.         ENDMOD
  365.  
  366.         MODULE OSGETPAGEOWNER   ;e=page ;out: e=owner id (0=free, 0xff=system)
  367.         PUBLIC OS_GETPAGEOWNER
  368.         #include "sysdefs.asm"
  369.         RSEG CODE
  370. OS_GETPAGEOWNER:
  371.    push bc
  372.         push ix
  373.         push iy
  374.         ld c,CMD_GETPAGEOWNER
  375.         call BDOS
  376.         LD a, e
  377.         pop iy
  378.         pop ix
  379.    pop bc
  380.         ret
  381.         ENDMOD
  382.        
  383.         MODULE  my_im2
  384.         PUBLIC  my_im2_init
  385.         RSEG    INTJP
  386.         DEFS 3
  387.         RSEG    INTTABLE
  388.         DEFS 257
  389.         RSEG    CODE
  390. my_im2_init
  391.         di
  392.         ld a,0xc3
  393.         ld (SFB(INTJP)),a
  394.         ld (SFB(INTJP)+1),de
  395.         ld a,HIGH(SFB(INTTABLE))
  396.         ld i,a
  397.         inc a
  398.         ld hl,SFB(INTTABLE)-1
  399. tloop
  400.         inc hl
  401.         ld (hl),HIGH(SFB(INTJP))
  402.         cp h
  403.         jr nz,tloop
  404.         im 2
  405.         ret
  406.         ENDMOD
  407.  
  408. ;Kulich Area
  409.  
  410.         MODULE OS_NEWPAGE       ;out: a=0 (OK)/!=0 (fail), e=page
  411.         PUBLIC OS_NEWPAGE
  412.         #include "sysdefs.asm"
  413.         RSEG CODE
  414. OS_NEWPAGE:
  415.    push bc
  416.         ld c,CMD_NEWPAGE
  417.         push ix
  418.         push iy
  419.         call BDOS
  420.         pop iy
  421.         pop ix
  422.    pop bc
  423.         ld h,a                  ;error
  424.         ld l,e                  ;page
  425.         ret
  426.         ENDMOD
  427.  
  428.         MODULE OS_DELPAGE       ;out: a=0 (OK)/!=0 (fail), e=page
  429.         PUBLIC OS_DELPAGE
  430.         #include "sysdefs.asm"
  431.         RSEG CODE
  432. OS_DELPAGE:
  433.    push bc
  434.         push hl
  435.         ld c,CMD_DELPAGE
  436.         push ix
  437.         push iy
  438.         call BDOS
  439.         pop iy
  440.         pop ix
  441.    pop hl
  442.         pop bc
  443.         ret
  444.         ENDMOD
  445.  
  446.         MODULE OS_GETSCR0      
  447.         PUBLIC OS_GETSCR0
  448.         #include "sysdefs.asm"
  449.         RSEG CODE
  450. OS_GETSCR0:
  451.        
  452.        
  453.         ld a,(user_scr0_high)
  454.         ld h,a
  455.         ld a,(user_scr0_low)
  456.         ld l, a
  457.         ret
  458.         ENDMOD
  459.  
  460.         MODULE OS_GETSCR1      
  461.         PUBLIC OS_GETSCR1
  462.         #include "sysdefs.asm"
  463.         RSEG CODE
  464. OS_GETSCR1:
  465.         ld a,(user_scr1_high)
  466.         ld h,a
  467.         ld a,(user_scr1_low)
  468.         ld l,a
  469.         ret
  470.         ENDMOD
  471.  
  472.         MODULE OS_RENAME
  473.         PUBLIC OS_RENAME
  474.         #include "sysdefs.asm"
  475.         RSEG CODE
  476. OS_RENAME:
  477. ;           ld de, oldname
  478. ;       ld bc, newname
  479.         ld h,b
  480.         ld l,c
  481.         push ix
  482.         push iy
  483.         ld c,CMD_RENAME
  484.         call BDOS
  485.         pop iy
  486.         pop ix
  487.         ret
  488.         ENDMOD
  489.  
  490.         MODULE OS_SETBORDER    
  491.         PUBLIC OS_SETBORDER
  492.         #include "sysdefs.asm"
  493.         RSEG CODE
  494. OS_SETBORDER:
  495.         push bc
  496.         push hl
  497.         push ix
  498.         push iy
  499.    ld c,CMD_SETBORDER ;e=0..15
  500.         call BDOS
  501.         pop iy
  502.         pop ix
  503.         pop hl
  504.         pop bc
  505.         ret
  506.         ENDMOD
  507.  
  508.         MODULE OS_DELETE
  509.         PUBLIC OS_DELETE
  510.         #include "sysdefs.asm"
  511.         RSEG CODE
  512. OS_DELETE:
  513.         push bc
  514.         push ix
  515.         push iy
  516.         ld c,CMD_DELETE
  517.         call BDOS
  518.         pop iy
  519.         pop ix
  520.         pop bc
  521.         ld h,0
  522.         ld l,a
  523.         ret
  524.         ENDMOD
  525.  
  526.  
  527.  
  528.  
  529.  
  530.         MODULE OS_READSECTORS   ;de= pointer to diskOp structure
  531.         PUBLIC OS_READSECTORS
  532.         #include "sysdefs.asm"
  533.         RSEG CODE
  534. OS_READSECTORS:
  535.         push bc
  536.         push de
  537.         push ix
  538.         push iy
  539.  
  540.         ex de,hl
  541.         ld b,(hl)       ;drive
  542.         inc l
  543.         ld e,(hl)       ;buffer L
  544.         inc l
  545.         ld d,(hl)       ;buffer H
  546.         inc l
  547.         push de
  548.         ld e,(hl)       ;sector L
  549.         inc l
  550.         ld d,(hl)       ;sector H
  551.         inc l
  552.         ld  a,(hl)      ;sector X
  553.         ld  ixl,a
  554.         inc l
  555.         ld  a,(hl)      ;sector I
  556.         ld  ixh,a
  557.         inc l
  558.         ld  a,(hl)      ;count
  559.         pop hl
  560.         ex de,hl
  561.         ld c,CMD_READSECTORS
  562.         ex af,af' ;'
  563.     call BDOS ;c=CMD
  564.         pop iy
  565.         pop ix
  566.         pop de
  567.         pop bc
  568.         ret             ;BCHL
  569.         ENDMOD 
  570.        
  571.         MODULE OS_WRITESECTORS  ;de= pointer to diskOp structure
  572.         PUBLIC OS_WRITESECTORS
  573.         #include "sysdefs.asm"
  574.         RSEG CODE
  575. OS_WRITESECTORS:
  576.         push bc
  577.         push de
  578.         push ix
  579.         push iy
  580.  
  581.         ex de,hl
  582.         ld b,(hl)       ;drive
  583.         inc l
  584.         ld e,(hl)       ;buffer L
  585.         inc l
  586.         ld d,(hl)       ;buffer H
  587.         inc l
  588.         push de
  589.         ld e,(hl)       ;sector L
  590.         inc l
  591.         ld d,(hl)       ;sector H
  592.         inc l
  593.         ld  a,(hl)      ;sector X
  594.         ld  ixl,a
  595.         inc l
  596.         ld  a,(hl)      ;sector I
  597.         ld  ixh,a
  598.         inc l
  599.         ld  a,(hl)      ;count
  600.         pop hl
  601.         ex de,hl
  602.         ld c,CMD_WRITESECTORS
  603.         ex af,af' ;'
  604.     call BDOS ;c=CMD
  605.         pop iy
  606.         pop ix
  607.         pop de
  608.         pop bc
  609.         ret             ;BCHL  
  610.         ENDMOD
  611.  
  612.         MODULE OS_GETPATH
  613.         PUBLIC OS_GETPATH
  614.         #include "sysdefs.asm"
  615.         RSEG CODE
  616. OS_GETPATH:
  617.         push bc
  618.         push ix
  619.         push iy
  620.         ld c,CMD_GETPATH
  621.         call BDOS
  622.         pop iy
  623.         pop ix
  624.         pop bc
  625.         ld hl,0
  626.         ret
  627.         ENDMOD
  628.  
  629.         MODULE OS_SETSYSDRV                    
  630.         PUBLIC OS_SETSYSDRV                    
  631.         #include "sysdefs.asm"
  632.         RSEG CODE      
  633. OS_SETSYSDRV
  634.         push bc
  635.         push de
  636.         push ix
  637.         push iy
  638.         ld c,CMD_SETSYSDRV                      ; out: A: A!=0 -- системный диск не примонтирован. L: -- общее количество примонтированных дисков.
  639.         call BDOS
  640.         pop iy
  641.         pop ix
  642.         pop de
  643.         pop bc
  644.         ld h,a                                          ;h = error l = No of disks
  645.         ret
  646.         ENDMOD
  647.  
  648.         MODULE OS_CHDIR
  649.         PUBLIC OS_CHDIR
  650.         #include "sysdefs.asm"
  651.         RSEG CODE
  652. OS_CHDIR:
  653.         push bc
  654.         push ix
  655.         push iy
  656.         ld c,CMD_CHDIR                          ;DE = Pointer to ASCIIZ string. Out A=error
  657.         call BDOS
  658.         pop iy
  659.         pop ix
  660.         pop bc
  661.         ld l,0
  662.         ld h,a                                          ;h = error
  663.         ret
  664.         ENDMOD
  665.  
  666.  
  667.         MODULE OS_NEWAPP
  668.         PUBLIC OS_NEWAPP
  669.         #include "sysdefs.asm"
  670.         RSEG CODE
  671. OS_NEWAPP:
  672.         push bc
  673.         ld (strPtr), de
  674.         push ix
  675.         push iy
  676.         ld c,CMD_NEWAPP                         ;out: b=id, a=error, dehl=newapp pages in 0000,4000,8000,c000 ;MAKE NEW DISABLED APP
  677.         call BDOS
  678.         pop iy
  679.         pop ix
  680.         ld c,a
  681.         push hl
  682.         ld hl,(strPtr)
  683.         ld (hl),d
  684.         inc hl
  685.         ld (hl),e
  686.         pop hl
  687.         ex de,hl
  688.         ld hl,(strPtr)
  689.         inc hl
  690.         inc hl
  691.         ld (hl),d
  692.         inc hl
  693.         ld (hl),e
  694.         inc hl
  695.         ld (hl),b
  696.         inc hl
  697.         ld (hl),c
  698.         pop bc
  699.         ret
  700. strPtr
  701.         DEFW 0000
  702.         ENDMOD
  703.  
  704.         MODULE OS_RUNAPP
  705.         PUBLIC OS_RUNAPP
  706.         #include "sysdefs.asm"
  707.         RSEG CODE
  708. OS_RUNAPP:     
  709.         push hl
  710.         push bc
  711.         push ix
  712.         push iy
  713.         ld c,CMD_RUNAPP ;e=id ;ACTIVATE DISABLED APP
  714.         call BDOS
  715.         pop iy
  716.         pop ix
  717.     pop bc
  718.         pop hl
  719.         ret
  720.         ENDMOD
  721.  
  722.         MODULE OS_WAITPID
  723.         PUBLIC OS_WAITPID
  724.         #include "sysdefs.asm"
  725.         RSEG CODE
  726. OS_WAITPID:
  727.         push bc
  728.         push ix
  729.         push iy
  730.     ld c,CMD_SETWAITING
  731.         call BDOS
  732.         ld c,CMD_YIELD
  733.         call BDOS
  734.         ld c,CMD_GETCHILDRESULT
  735.         call BDOS
  736.         pop iy
  737.         pop ix
  738.         pop bc
  739.         ret
  740.         ENDMOD
  741.  
  742.  
  743.  
  744.  
  745.         MODULE OS_HIDEFROMPARENT
  746.         PUBLIC OS_HIDEFROMPARENT
  747.         #include "sysdefs.asm"
  748.         RSEG CODE
  749. OS_HIDEFROMPARENT:     
  750.         push bc
  751.         push ix
  752.         push iy
  753.         ld c,CMD_HIDEFROMPARENT
  754.         call BDOS
  755.         pop iy
  756.         pop ix
  757.     pop bc
  758.         ret
  759.         ENDMOD
  760.  
  761.         MODULE OS_CLS
  762.         PUBLIC OS_CLS
  763.         #include "sysdefs.asm"
  764.         RSEG CODE
  765. OS_CLS:
  766.         push bc
  767.         push hl
  768.         push ix
  769.         push iy
  770.         ld c,CMD_CLS
  771.         call BDOS
  772.         pop iy
  773.         pop ix
  774.         pop bc
  775.         pop hl
  776.         ret
  777.         ENDMOD
  778.  
  779.  
  780.  
  781.         MODULE OS_GETKEY
  782.         PUBLIC OS_GETKEY
  783.         RSEG CODE
  784. OS_GETKEY:
  785.         push ix
  786.         push iy
  787.     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!)
  788.         pop iy
  789.         pop ix
  790.         ld l,a
  791.         ld h,c
  792.         ld bc,0x8000
  793.         jp nz, focusFalse
  794.         ld bc,0x0000
  795.         focusFalse:
  796.         ret
  797.         ENDMOD
  798.  
  799.         MODULE OS_GETMOUSE
  800.         PUBLIC OS_GETMOUSE
  801.         RSEG CODE
  802. OS_GETMOUSE:
  803.         push ix
  804.         push iy
  805.     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!)
  806.         pop iy
  807.         pop ix
  808.         ld h,c
  809.         ld b,d
  810.         ld c,e
  811.         ret
  812.         ENDMOD
  813.  
  814.         MODULE OS_SETCOLOR
  815.         PUBLIC OS_SETCOLOR
  816.         #include "sysdefs.asm"
  817.         RSEG CODE
  818. OS_SETCOLOR
  819.         push bc
  820.         push hl
  821.         push ix
  822.         push iy
  823.     ld c,CMD_SETCOLOR
  824.         call BDOS
  825.         pop iy
  826.         pop ix
  827.         pop bc
  828.         pop hl
  829.         ret
  830.         ENDMOD
  831.  
  832.         MODULE OS_DIHALT
  833.         PUBLIC OS_DIHALT
  834.         RSEG CODE
  835. OS_DIHALT:
  836.         DI
  837.         HALT
  838.         ret
  839.         //ENDMOD
  840.         END
  841.