home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / maxidi22.lzh / TOS / URAN_DOS.S next >
Encoding:
Text File  |  1992-02-19  |  7.1 KB  |  392 lines

  1. ; File name:    URAn_DOS.S    Revised:    1991.05.07
  2. ; Creator:    U.R.Andersson    Created:    1991.01.02
  3. ; (c)1991 by:    U.R.Andersson    All rights reserved
  4. ; Released as:    FREEWARE    (NB: commercial sales forbidden!)
  5. ;
  6. ;
  7. ;    GEMDOS DEFINITIONS
  8. ;
  9. Pterm0        =    $100000
  10. Cconin        =    $100001
  11. Cconout        =    $110002
  12. Cauxin        =    $100003
  13. Cauxout        =    $110004
  14. Cprnout        =    $110005
  15. Crawio        =    $110006
  16. Crawcin        =    $100007
  17. Cnecin        =    $100008
  18. Cconws        =    $111009
  19. Cconrs        =    $11100A
  20. Cconis        =    $10000B
  21. Dsetdrv        =    $11000E
  22. Cconos        =    $100010
  23. Cprnos        =    $100011
  24. Cauxis        =    $100012
  25. Cauxos        =    $100013
  26. Dgetdrv        =    $100019
  27. Fsetdta        =    $11101A
  28. Super        =    $111020
  29. Tgetdate    =    $10002A
  30. Tsetdate    =    $11002B
  31. Tgettime    =    $10002C
  32. Tsettime    =    $11002D
  33. Fgetdta        =    $10002F
  34. Sversion    =    $100030
  35. Ptermres    =    $120131
  36. Dfree        =    $121036
  37. Dcreate        =    $111039
  38. Ddelete        =    $11103A
  39. Dsetpath    =    $11103B
  40. Fcreate        =    $12103C
  41. Fopen        =    $12103D
  42. Fclose        =    $11003E
  43. Fread        =    $13423F
  44. Fwrite        =    $134240
  45. Fdelete        =    $111041
  46. Fseek        =    $130142
  47. Fattrib        =    $131043
  48. Fdup        =    $110045
  49. Fforce        =    $120046
  50. Dgetpath    =    $121047
  51. Malloc        =    $110148
  52. Mfree        =    $111049
  53. Mshrink        =    $13244A
  54. Pexec        =    $14E04B
  55. Pterm        =    $11004C
  56. Fsfirst        =    $12104E
  57. Fsnext        =    $10004F
  58. Frename        =    $136056
  59. Fdatime        =    $131057
  60. ;
  61. ;
  62. ;    BIOS DEFINITIONS
  63. ;
  64. Getmpb        =    $D11000
  65. Bconstat    =    $D10001
  66. Bconin        =    $D10002
  67. Bconout        =    $D20003
  68. Rwabs        =    $D52004
  69. Setexc        =    $D22005
  70. Tickal        =    $D00006
  71. Getbpb        =    $D10007
  72. Bcostat        =    $D10008
  73. Mediach        =    $D10009
  74. Drvmap        =    $D0000A
  75. Kbshift        =    $D1000B
  76. ;
  77. ;
  78. ;    XBIOS DEFINITIONS
  79. ;
  80. Initmous    =    $E36000
  81. Ssbrk        =    $E20001
  82. Physbase    =    $E00002
  83. Logbase        =    $E00003
  84. Getrez        =    $E00004
  85. Setscreen    =    $E33005
  86. Setpallete    =    $E11006
  87. Setcolor    =    $E20007
  88. Floprd        =    $E71208
  89. Flopwr        =    $E71209
  90. Flopfmt        =    $E71F0A
  91. ;; CLR_D0        =    $E0000B
  92. Midiws        =    $E2200C
  93. Mfpint        =    $E2200D
  94. Iorec        =    $E1000E
  95. Rsconf        =    $E6000F
  96. Keytbl        =    $E37010
  97. Random        =    $E00011
  98. Protobt        =    $E41212
  99. Flopver        =    $E71213
  100. Scrdmp        =    $E00014
  101. Cursconf    =    $E20015
  102. Settime        =    $E10116
  103. Gettime        =    $E00017
  104. Bioskeys    =    $E00018
  105. Ikbdws        =    $E22019
  106. Jdisint        =    $E1001A
  107. Jenabint    =    $E1001B
  108. Giaccess    =    $E2001C
  109. Offgibit    =    $E1001D
  110. Ongibit        =    $E1001E
  111. Xbtimer        =    $E4801F
  112. Dosound        =    $E11020
  113. Setprt        =    $E10021
  114. Kbdvbase    =    $E00022
  115. Kbrate        =    $E20023
  116. Prtblk        =    $E11024
  117. Vsync        =    $E00025
  118. Supexec        =    $E11026
  119. Puntaes        =    $E00027
  120. Floprate    =    $E20029     ;STE & Rainbow TOS
  121. Blitmode    =    $E10040     ;all late TOS
  122. Monopack    =    $E1004F     ;MONOPACK patch (actually, full code = $4D4F)
  123. ;
  124. ;
  125. ;    Pointer indirection flag
  126. ;
  127. _IND    =    $40000000
  128. ;
  129. ;
  130. ;    Boot sector offsets
  131. ;
  132. bs_codebra    =  0    ;$00  w $60xx
  133. bs_filler    =  2    ;$02 6b
  134. bs_serial    =  8    ;$08 3b
  135. bs_sectbytes    = 11    ;$0b iw
  136. bs_clust_sects    = 13    ;$0d  b
  137. bs_boot_sects    = 14    ;$0e iw
  138. bs_disk_FATs    = 16    ;$10  b
  139. bs_root_files    = 17    ;$11 iw
  140. bs_disk_sects    = 19    ;$13 iw
  141. bs_media    = 21    ;$15  b
  142. bs_FAT_sects    = 22    ;$16 iw
  143. bs_track_sects    = 24    ;$18 iw
  144. bs_disk_sides    = 26    ;$1a iw
  145. bs_hide_sects    = 28    ;$1c iw
  146. ;    next follows the part used only by executable boots
  147. bs_execflg    = 30    ;$1e   w
  148. bs_ldmode    = 32    ;$20   w
  149. bs_ssect    = 34    ;$22   w
  150. bs_sectcnt    = 36    ;$24   w
  151. bs_ldaddr    = 38    ;$26   L
  152. bs_fatbuf    = 42    ;$2a   L
  153. bs_fname    = 46    ;$2e 11b
  154. bs_fname_end    = 57    ;$39   b
  155. bs_bootprog    = 58    ;$3a ...
  156. ;
  157. ;
  158. ;    BPB offsets
  159. ;
  160.         rsreset
  161. bpb_sect_bytes    rs.w    1    ;typ:  512
  162. bpb_clust_sects    rs.w    1    ;typ:    2
  163. bpb_clust_bytes    rs.w    1    ;typ: 1024
  164. bpb_root_sects    rs.w    1    ;typ:    7
  165. bpb_FAT_sects    rs.w    1    ;typ:    5
  166. bpb_FAT2_start    rs.w    1    ;typ:    6
  167. bpb_data_start    rs.w    1    ;typ:   18 = 2*5 + 7 + 1
  168. bpb_data_clusts    rs.w    1    ;typ:  711 = 720 - 18/2
  169. bpb_flag    rs.w    1    ;b0==16bit_FAT/12bit_FAT typ: 0
  170. bpb_size    =    __RS
  171. ;NB: data_start = FAT_sects*2 + root_sects + 1  rounded up for clust_sects alignment
  172. ;NB: data_clusts= Total_clusts - data_start/clust_sect
  173. ;
  174. ;
  175. ;    Directory offsets
  176. ;
  177.         rsreset
  178. dir_fname    rs.b    8    ;first char $00==unused $E5==erased
  179. dir_fext    rs.b    3
  180. dir_fattr    rs.b    1
  181. dir_reserved    rs.b    10
  182. dir_ftime    rs.w    1    ;iw
  183. dir_fdate    rs.w    1    ;iw
  184. dir_fcluster    rs.w    1    ;iw
  185. dir_fsize    rs.l    1    ;il
  186. dir_size    =    __RS
  187. ;
  188. ;
  189. ;    DTA offsets
  190. ;
  191.         rsreset
  192. dta_reserved    rs.b    21
  193. dta_fattr    rs.b    1
  194. dta_ftime    rs.w    1
  195. dta_fdate    rs.w    1
  196. dta_fsize    rs.l    1
  197. dta_fname    rs.b    14
  198. dta_size    =    __RS
  199. ;
  200. ;
  201. ;    Program file header offsets
  202. ;
  203.         rsreset
  204. ph_codebra    rs.w    1    ;always $601A
  205. ph_textlen    rs.l    1
  206. ph_datalen    rs.l    1
  207. ph_bss_len    rs.l    1
  208. ph_symblen    rs.l    1
  209. ph_res1        rs.l    1
  210. ph_res2        rs.l    1
  211. ph_res3        rs.w    1
  212. ph_textbeg    =    __RS
  213. ph_size        =    __RS
  214. ;
  215. ;
  216. ;    Basepage offsets
  217. ;
  218.     rsreset
  219. bp_selfbeg_p    rs.l    1
  220. bp_selfend_p    rs.l    1
  221. bp_textbeg_p    rs.l    1
  222. bp_textlen    rs.l    1
  223. bp_databeg_p    rs.l    1
  224. bp_datalen    rs.l    1
  225. bp_bss_beg_p    rs.l    1
  226. bp_bss_len    rs.l    1
  227. bp_dta_p    rs.l    1
  228. bp_parent_p    rs.l    1
  229. bp_reserved    rs.l    1
  230. bp_environ_p    rs.l    1
  231. bp_undef    rs.l    20
  232. bp_arglen    rs.b    1
  233. bp_argstring    rs.b    127
  234. ;
  235. ;
  236. ;    MACRO DEFINITIONS
  237. ;
  238. gemdos    MACRO    op,v2,v3,v4,v5
  239.     xbios    \1,\2,\3,\4,\5
  240.     ENDM
  241. ;
  242. sub_gemdos    MACRO    op,v2,v3,v4,v5
  243.     zz_prep_trap    \1,\2,\3,\4,\5
  244.     bsr    gemdos_sub
  245.     IFNE    zzDOSAS>8
  246.     add    #zzDOSAS,sp
  247.     ELSEIF
  248.     addq    #zzDOSAS,sp
  249.     ENDC
  250.     ENDM
  251. ;
  252. bios    MACRO    op,v2,v3,v4,v5,v6
  253.     xbios    \1,\2,\3,\4,\5,\6
  254.     ENDM
  255. ;
  256. sub_bios    MACRO    op,v2,v3,v4,v5,v6
  257.     zz_prep_trap    \1,\2,\3,\4,\5,\6
  258.     bsr    bios_sub
  259.     IFNE    zzDOSAS>8
  260.     add    #zzDOSAS,sp
  261.     ELSEIF
  262.     addq    #zzDOSAS,sp
  263.     ENDC
  264.     ENDM
  265. ;
  266. xbios    MACRO    op,v2,v3,v4,v5,v6,v7,v8,v9,v10
  267.     zz_prep_trap    \1,\2,\3,\4,\5,\6,\7,\8,\9,\a
  268.     trap    #zzDOSTR
  269.     IFNE    zzDOSAS>8
  270.     add    #zzDOSAS,sp
  271.     ELSEIF
  272.     addq    #zzDOSAS,sp
  273.     ENDC
  274.     ENDM
  275. ;
  276. sub_xbios    MACRO    op,v2,v3,v4,v5,v6,v7,v8,v9,v10
  277.     zz_prep_trap    \1,\2,\3,\4,\5,\6,\7,\8,\9,\a
  278.     bsr    xbios_sub
  279.     IFNE    zzDOSAS>8
  280.     add    #zzDOSAS,sp
  281.     ELSEIF
  282.     addq    #zzDOSAS,sp
  283.     ENDC
  284.     ENDM
  285. ;
  286. zz_prep_trap    MACRO    op,v2,v3,v4,v5,v6,v7,v8,v9,v10
  287. zzDOSIF    set    (\1)&_IND
  288. zzDOSTR    set    ((\1)>>20)&255
  289. zzDOSAC    set    ((\1)>>16)&15
  290. zzDOSPF    set    ((\1)>>12)&15
  291. zzDOSLF    set    ((\1)>>08)&15
  292. zzDOSOP    set    (\1)&255
  293.     IFNE    zzDOSOP=$4F
  294.     IFNE    zzDOSTR=$0E
  295. zzDOSOP    set    $4D4F
  296.     ENDC
  297.     ENDC
  298. zzDOSAS    set    2
  299.     IFNE    zzDOSAC>0
  300.     IFNE    zzDOSAC>1
  301.     IFNE    zzDOSAC>2
  302.     IFNE    zzDOSAC>3
  303.     IFNE    zzDOSAC>4
  304.     IFNE    zzDOSAC>5
  305.     IFNE    zzDOSAC>6
  306.     IFNE    zzDOSAC>7
  307.     IFNE    zzDOSAC>8
  308.     IFNE    zzDOSLF=15
  309. zzDOSLF    set    130
  310.     ENDC
  311.     DOSPUSH    8,\a
  312.     ENDC
  313.     DOSPUSH    7,\9
  314.     ENDC
  315.     DOSPUSH    6,\8
  316.     ENDC
  317.     DOSPUSH    5,\7
  318.     ENDC
  319.     DOSPUSH    4,\6
  320.     ENDC
  321.     DOSPUSH    3,\5
  322.     ENDC
  323.     DOSPUSH    2,\4
  324.     ENDC
  325.     DOSPUSH    1,\3
  326.     ENDC
  327.     DOSPUSH    0,\2
  328.     ENDC
  329.     MOVE    #zzDOSOP,-(sp)
  330.     ENDM
  331. ;
  332. ;This macro handles all argument checking for bios, xbios & gemdos functions
  333. ;special argument cases are:
  334. ;no argument = FAIL error
  335. ;'()'    = Assumes argument is on stack already
  336. ;'!'    = Places 0 on stack using "clr"
  337. ;'?'    = Places -1 on stack
  338. DOSPUSH    MACRO    v1,v2
  339. zzDOSAS    set    zzDOSAS+2
  340.     IFNE    (1<<\1)&(zzDOSPF!zzDOSLF)
  341. zzDOSAS    set    zzDOSAS+2
  342.     ENDC
  343.     IFC    '()','\2'
  344.     MEXIT
  345.     ENDC
  346.     IFC    '','\2'
  347.     FAIL    Missing operand in system call
  348.     MEXIT
  349.     ENDC
  350.     IFNE    (1<<\1)&zzDOSPF
  351.     IFC    '!','\2'
  352.     clr.l    -(sp)
  353.     MEXIT
  354.     ENDC
  355.     IFC    '?','\2'
  356.     move.l    #-1,-(sp)
  357.     MEXIT
  358.     ENDC
  359.     IFEQ    zzDOSIF
  360.     pea    \2
  361.     MEXIT
  362.     ENDC
  363.     move.l    \2,-(SP)
  364.     MEXIT
  365.     ENDC
  366.     IFNE    (1<<\1)&zzDOSLF
  367.     IFC    '!','\2'
  368.     clr.l    -(sp)
  369.     MEXIT
  370.     ENDC
  371.     IFC    '?','\2'
  372.     move.l    #-1,-(sp)
  373.     MEXIT
  374.     ENDC
  375.     move.l    \2,-(SP)
  376.     MEXIT
  377.     ENDC
  378.     IFC    '!','\2'
  379.     clr    -(sp)
  380.     MEXIT
  381.     ENDC
  382.     IFC    '?','\2'
  383.     move    #-1,-(sp)
  384.     MEXIT
  385.     ENDC
  386.     move    \2,-(SP)
  387.     ENDM
  388. ;
  389. zzDOSAS    set    0
  390. ;
  391. ; End of file:    URAn_DOS.S
  392.