qdos.inc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2020 by Karoly Balogh
  4. Interface QDOS OS functions used by the Sinclair QL RTL
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. {$i qdosh.inc}
  12. const
  13. _MT_INF = $00;
  14. _MT_DMODE = $10;
  15. _MT_ALCHP = $18;
  16. _MT_RECHP = $19;
  17. function mt_inf(sys_vars: ppchar; ver_ascii: plongint): Tjobid; assembler; nostackframe; public name '_mt_inf';
  18. asm
  19. move.l d2,-(sp)
  20. move.l sys_vars,-(sp)
  21. move.l ver_ascii,-(sp)
  22. moveq.l #_MT_INF,d0
  23. trap #1
  24. move.l (sp)+,a1
  25. move.l d2,(a1) { ver_ascii }
  26. move.l (sp)+,a1
  27. move.l a0,(a1) { sys_vars }
  28. move.l (sp)+,d2
  29. move.l d1,d0 { jobid }
  30. end;
  31. procedure mt_dmode(s_mode: pword; d_type: pword); assembler; nostackframe; public name '_mt_dmode';
  32. asm
  33. movem.l d2/a3-a4,-(sp)
  34. move.w (a0),d1
  35. move.w (a1),d2
  36. moveq.l #_MT_DMODE,d0
  37. trap #1
  38. move.w d1,(a0)
  39. move.w d2,(a1)
  40. movem.l (sp)+,d2/a3-a4
  41. end;
  42. function mt_alchp(size: dword; sizegot: pdword; jobid: Tjobid): pointer; assembler; nostackframe; public name '_mt_alchp';
  43. asm
  44. movem.l d2-d3/a2-a3,-(sp)
  45. move.l sizegot,-(sp)
  46. move.l jobid,d2
  47. move.l size,d1
  48. moveq.l #_MT_ALCHP,d0
  49. trap #1
  50. move.l (sp)+,d2 // sizegot ptr
  51. tst d0
  52. bne @quit
  53. move.l d2,a1
  54. beq @nosizegot
  55. move.l d1,(a1)
  56. @nosizegot:
  57. move.l a0,d0
  58. @quit:
  59. movem.l (sp)+,d2-d3/a2-a3
  60. end;
  61. procedure mt_rechp(area: pointer); assembler; nostackframe; public name '_mt_rechp';
  62. asm
  63. movem.l d2-d3/a2-a3,-(sp)
  64. move.l area,a0
  65. moveq.l #_MT_RECHP,d0
  66. trap #1
  67. movem.l (sp)+,d2-d3/a2-a3
  68. end;
  69. const
  70. _IO_OPEN = $01;
  71. _IO_CLOSE = $02;
  72. function io_open_qlstr(name_qlstr: pointer; mode: longint): Tchanid; assembler; nostackframe; public name '_io_open_qlstr';
  73. asm
  74. movem.l d2-d3,-(sp)
  75. move.l name_qlstr,a0
  76. moveq.l #-1,d1
  77. move.l mode,d3
  78. moveq.l #_IO_OPEN,d0
  79. trap #2
  80. bne @quit
  81. move.l a0,d0
  82. @quit:
  83. movem.l (sp)+,d2-d3
  84. end;
  85. function io_open(name: pchar; mode: longint): Tchanid; public name '_io_open';
  86. var
  87. len: longint;
  88. name_qlstr: array[0..63] of char;
  89. begin
  90. len:=length(name);
  91. if len > length(name_qlstr)-2 then
  92. len:=length(name_qlstr)-2;
  93. PWord(@name_qlstr)[0]:=len;
  94. Move(name^,name_qlstr[2],len);
  95. result:=io_open_qlstr(@name_qlstr,mode);
  96. end;
  97. function io_close(chan: Tchanid): longint; assembler; nostackframe; public name '_io_close';
  98. asm
  99. move.l chan,a0
  100. moveq.l #_IO_CLOSE,d0
  101. trap #2
  102. end;
  103. const
  104. _IO_SBYTE = $05;
  105. _IO_SSTRG = $07;
  106. _SD_WDEF = $0D;
  107. _SD_CLEAR = $20;
  108. function io_sbyte(chan: Tchanid; timeout: Ttimeout; c: char): longint; assembler; public name '_io_sbyte';
  109. asm
  110. move.l d3,-(sp)
  111. move.w timeout,d3
  112. clr.l d1
  113. move.b c,d1
  114. move.l chan,a0
  115. moveq.l #_IO_SBYTE,d0
  116. trap #3
  117. move.l (sp)+,d3
  118. end;
  119. function io_sstrg(chan: Tchanid; timeout: Ttimeout; buf: pointer; len: smallint): smallint; assembler; public name '_io_sstrg';
  120. asm
  121. movem.l d2-d3,-(sp)
  122. move.w len,d2
  123. move.l buf,a1
  124. move.w timeout,d3
  125. move.l chan,a0
  126. moveq.l #_IO_SSTRG,d0
  127. trap #3
  128. tst.l d0
  129. beq @ok
  130. cmp.w #ERR_EF,d0
  131. beq @eof
  132. cmp.w #ERR_NC,d0
  133. bne @quit
  134. @eof:
  135. tst.w d1
  136. beq @quit
  137. @ok:
  138. clr.l d0
  139. move.w d1,d0
  140. @quit:
  141. movem.l (sp)+,d2-d3
  142. end;
  143. function sd_wdef(chan: Tchanid; timeout: Ttimeout; border_colour: byte; border_width: word; window: PQLRect): longint; assembler; public name '_sd_wdef';
  144. asm
  145. movem.l d2-d3,-(sp)
  146. move.l window,a1
  147. move.w timeout,d3
  148. move.w border_width,d2
  149. move.b border_colour,d1
  150. move.l chan,a0
  151. moveq.l #_SD_WDEF,d0
  152. trap #3
  153. movem.l (sp)+,d2-d3
  154. end;
  155. function sd_clear(chan: Tchanid; timeout: Ttimeout): longint; assembler; public name '_sd_clear';
  156. asm
  157. move.l d3,-(sp)
  158. move.w timeout,d3
  159. move.l chan,a0
  160. moveq.l #_SD_CLEAR,d0
  161. trap #3
  162. move.l (sp)+,d3
  163. end;
  164. const
  165. _UT_CON = $c6;
  166. _UT_SCR = $c8;
  167. function ut_con(params: PWindowDef): Tchanid; assembler; nostackframe; public name '_ut_con';
  168. asm
  169. movem.l d2-d3/a2-a3,-(sp)
  170. move.l params,a1
  171. move.w _UT_CON,a2
  172. jsr (a2)
  173. bne @quit
  174. move.l a0,d0
  175. @quit:
  176. movem.l (sp)+,d2-d3/a2-a3
  177. end;
  178. function ut_scr(params: PWindowDef): Tchanid; assembler; nostackframe; public name '_ut_scr';
  179. asm
  180. movem.l d2-d3/a2-a3,-(sp)
  181. move.l params,a1
  182. move.w _UT_SCR,a2
  183. jsr (a2)
  184. bne @quit
  185. move.l a0,d0
  186. @quit:
  187. movem.l (sp)+,d2-d3/a2-a3
  188. end;