home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / sys / atari / 8bit / 5978 < prev    next >
Encoding:
Internet Message Format  |  1993-01-28  |  5.6 KB

  1. Path: sparky!uunet!portal!cup.portal.com!Rick_Michael_Cortese
  2. From: Rick_Michael_Cortese@cup.portal.com
  3. Newsgroups: comp.sys.atari.8bit
  4. Subject: Re: File Headers.
  5. Message-ID: <74526@cup.portal.com>
  6. Date: Thu, 28 Jan 93 10:59:28 PST
  7. Organization: The Portal System (TM)
  8. References: <01GTPN1EK9H491Y69D@vax.edinboro.edu>
  9.   <VecTXB8w165w@cyberden.sf.ca.us>
  10. Lines: 263
  11.  
  12. 10       .OPT NO OBJ
  13. 20       .OPT NO LIST
  14. 30 ;
  15. 40 ;Some stuff I knocked out for
  16. 50 ;      "The Dude"
  17. 60 ; Rick Cortese Sept '91
  18. 70 ;"ASM,,#D:WCS.COM" TO MAKE FILE
  19. 80 ;
  20. 90 ;            EQUATES
  21. 0100 ;These are all STD Atari locations
  22. 0110 ;i.e. The OS decides INBUFF, an
  23. 0120 ;I/O buffer, is at $580. The're
  24. 0130 ;are 2 software registers, each
  25. 0140 ;6 bytes, @ $D4 & $E0 that the OS
  26. 0150 ;sets up & uses for FP operation
  27. 0160 ;
  28. 0170 CIOV =  $E456
  29. 0180 EOL =   $9B
  30. 0190 CLS =   125
  31. 0200 B   =   30      BACKSPACE
  32. 0210 D   =   29      DOWN
  33. 0220 TAB =   127
  34. 0230 PUTREC = $09
  35. 0240 GETREC = $05
  36. 0250 INBUFF = $F3
  37. 0260 ;
  38. 0270 ;Index to 1st byte in buffer
  39. 0280 ;
  40. 0290 CIX =   $F2
  41. 0300 IOCB0 = $0340
  42. 0310 ICCOM = IOCB0+2
  43. 0320 ICBAL = IOCB0+4
  44. 0330 ICBAH = IOCB0+5
  45. 0340 ICBLL = IOCB0+8
  46. 0350 ICBLH = IOCB0+9
  47. 0360 ;
  48. 0370 ;ROM FP entry points from OS
  49. 0380 ;SOURCE LISTING, MAPPING THE
  50. 0390 ;ATARI, DE RE ATARI, etc.
  51. 0400 ;There are more, but I don't
  52. 0410 ;      use everything!
  53. 0420 ;
  54. 0430 ;Convert string to FP
  55. 0440 AFP =   $D800
  56. 0450 ;Convert FP to string
  57. 0460 FASC =  $D8E6
  58. 0470 ;Subtract FR0=FR0-FR1
  59. 0480 FSUB =  $DA60
  60. 0490 ;Divide FR0=FR0/FR1
  61. 0500 FDIV =  $DB28
  62. 0510 ;Move FR0 to FR1
  63. 0520 FMOVE = $DDB6
  64. 0530 ;Convert FP# in FR0 to integer
  65. 0540 ;(2 bytes) at $D4, $D5
  66. 0550 FPI =   $D9D2
  67. 0560 ;
  68. 0570 ;This'll make it load and go
  69. 0580 ;then continue with the next
  70. 0590 ;file if it is appended
  71. 0600 ;
  72. 0610 INIT =  $02E2
  73. 0620     *=  $3000
  74. 0630 ;
  75. 0640 ;Sparta JSR to 1st BYTE of file
  76. 0650 ;so stick this in to fool it
  77. 0660 ;should make it compatabile
  78. 0670 ;      with any DOS
  79. 0680 ;
  80. 0690     RTS
  81. 0700 START
  82. 0710     LDA #$38
  83. 0720     STA $D302
  84. 0730     LDA #$FF
  85. 0740     STA $D300
  86. 0750     LDA #$3C
  87. 0760 ;
  88. 0770 ;Use IOCB0 since the OS OPENs it
  89. 0780 ;on POWER UP (Saves time & MEM)
  90. 0790 ;save IOCB STATUS(A 5, 9,or 12)
  91. 0800 ;since this file may be chained
  92. 0810 ;it may have been changed by
  93. 0820 ;the 1st program in the file
  94. 0830 ;
  95. 0840     LDA ICCOM
  96. 0850     STA RESET
  97. 0860 ;
  98. 0870 ;Prompt user for number
  99. 0880 ;
  100. 0890     LDA #MESSAGE1&$FF
  101. 0900     STA ICBAL
  102. 0910     LDA #MESSAGE1/$0100
  103. 0920     STA ICBAH
  104. 0930     JSR OUTPUT
  105. 0940 ;
  106. 0950 ;INPUT user number to BUFFER
  107. 0960 ;I used mine to save INBUFF
  108. 0970 ;for intermediate I/O
  109. 0980 ;
  110. 0990     LDA #BUFFER&$FF
  111. 1000     STA ICBAL
  112. 1010     LDA #BUFFER/$0100
  113. 1020     STA ICBAH
  114. 1030     JSR INPUT
  115. 1040 ;
  116. 1050 ;LOAD FR0 with "144.39"
  117. 1060 ;
  118. 1070     LDA #ANUM&$FF
  119. 1080     STA INBUFF
  120. 1090     LDA #ANUM/$0100
  121. 1100     STA INBUFF+1
  122. 1110     LDA #0
  123. 1120     STA CIX
  124. 1130     JSR AFP
  125. 1140 ;
  126. 1150 ;MOVE it to FR1
  127. 1160 ;
  128. 1170     JSR FMOVE
  129. 1180 ;
  130. 1190 ;LOAD FR0 with user number
  131. 1200 ;
  132. 1210     LDA #BUFFER&$FF
  133. 1220     STA INBUFF
  134. 1230     LDA #BUFFER/$0100
  135. 1240     STA INBUFF+1
  136. 1250     LDA #0
  137. 1260     STA CIX
  138. 1270     JSR AFP
  139. 1280 ;
  140. 1290 ;SUBTRACT  FR0=FR0-FR1
  141. 1300 ;
  142. 1310     JSR FSUB
  143. 1320 ;
  144. 1330 ;MOVE result to FR1
  145. 1340 ;
  146. 1350     JSR FMOVE
  147. 1360 ;
  148. 1370 ;LOAD FR0 with .015 number
  149. 1380 ;
  150. 1390     LDA #BNUM&$FF
  151. 1400     STA INBUFF
  152. 1410     LDA #BNUM/$0100
  153. 1420     STA INBUFF+1
  154. 1430     LDA #0
  155. 1440     STA CIX
  156. 1450     JSR AFP
  157. 1460 ;
  158. 1470 ;This is actually .015/number
  159. 1480 ;
  160. 1490     JSR FDIV
  161. 1500     BCS BYE     OUT IF NUM/0
  162. 1510 ;
  163. 1520 ;FR0=>FR1
  164. 1530 ;
  165. 1540     JSR FMOVE
  166. 1550 ;
  167. 1560 ;MOVE "1" to FP0
  168. 1570 ;
  169. 1580     LDA #CNUM&$FF
  170. 1590     STA INBUFF
  171. 1600     LDA #CNUM/$0100
  172. 1610     STA INBUFF+1
  173. 1620     LDA #0
  174. 1630     STA CIX
  175. 1640     JSR AFP
  176. 1650 ;
  177. 1660 ;This inverts to number/.015
  178. 1670 ;
  179. 1680     JSR FDIV
  180. 1690     BCS BYE     out if ERROR
  181. 1700     JSR FASC
  182. 1710 ;
  183. 1720 ;Last DIGIT will be INVERSE
  184. 1730 ;
  185. 1740     LDY #$FF
  186. 1750 LOOP
  187. 1760     INY
  188. 1770     LDA (INBUFF),Y
  189. 1780     BPL LOOP
  190. 1790     AND #$7F
  191. 1800     STA (INBUFF),Y
  192. 1810     INY
  193. 1820     LDA #EOL
  194. 1830     STA (INBUFF),Y
  195. 1840     LDA #$80
  196. 1850     STA ICBAL
  197. 1860     LDA #$05
  198. 1870     STA ICBAH
  199. 1880     JSR OUTPUT
  200. 1890 ;
  201. 1900 ;CONVERT FP to INTEGER @ $D4
  202. 1910 ;
  203. 1920     JSR FPI
  204. 1930     LDA $D4
  205. 1940     STA $D300
  206. 1950     LDA RESET
  207. 1960     STA ICCOM
  208. 1970     RTS
  209. 1980 BYE
  210. 1990 ;
  211. 2000 ;Got here because of a NUM/0
  212. 2010 ;or user made a mistake or wants
  213. 2020 ;a ZERO so we give him one
  214. 2030 ;
  215. 2040     LDA #ZERO&$FF
  216. 2050     STA INBUFF
  217. 2060     LDA #ZERO/$0100
  218. 2070     STA INBUFF+1
  219. 2080     LDA #0
  220. 2090     STA CIX
  221. 2100     JSR AFP
  222. 2110     JSR FASC
  223. 2120     LDY #$FF
  224. 2130     JMP LOOP
  225. 2140 ANUM
  226. 2150     .BYTE "144.39",EOL
  227. 2160 BNUM
  228. 2170     .BYTE "0.015",EOL
  229. 2180 CNUM
  230. 2190     .BYTE "1",EOL
  231. 2200 ZERO
  232. 2210     .BYTE "0",EOL
  233. 2220 OUTPUT
  234. 2230     LDA #PUTREC
  235. 2240     STA ICCOM
  236. 2250     LDA #$FF
  237. 2260     STA ICBLL
  238. 2270     LDA #$00
  239. 2280     STA ICBLH
  240. 2290     LDX #0
  241. 2300     JSR CIOV
  242. 2310     RTS
  243. 2320 INPUT
  244. 2330     LDA #GETREC
  245. 2340     STA ICCOM
  246. 2350     LDA #$FF
  247. 2360     STA ICBLL
  248. 2370     LDA #$00
  249. 2380     STA ICBLH
  250. 2390     LDX #0
  251. 2400     JSR CIOV
  252. 2410     RTS
  253. 2420 RESET
  254. 2430     *=  *+1
  255. 2440 MESSAGE1
  256. 2450     .BYTE CLS,D,D,D,TAB,"Hello!"
  257. 2460     .BYTE D,D,B,B,B,B,B,B,B,B,B
  258. 2470     .BYTE "Input a number"
  259. 2480     .BYTE D,B,B,B,B,B,B,B,B,B,B
  260. 2490     .BYTE "BETWEEN 144.39 & "
  261. 2500     .BYTE "148.215",EOL
  262. 2510 BUFFER
  263. 2520 ;
  264. 2530 ;This really isn't Necessary
  265. 2540 ;since I just need the ADDRESS
  266. 2550 ;of the 1st free POSITION
  267. 2560 ;beyond the PROGRAM,
  268. 2570 ;but if I wanted to add some code
  269. 2580 ;after the BUFFER & before INIT...
  270. 2590 ;
  271. 2600     *=  *+$FF
  272. 2610     *=  INIT
  273. 2620     .WORD START
  274. 2630     .END
  275.