home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / Geneve / 9640news / CAT14 / GPLXB.ARK < prev    next >
Text File  |  2006-10-19  |  9KB  |  304 lines

  1. ?
  2.  
  3.   The following are lists of two methods of implementing
  4. the DSR, GPL and CIF (Convert Integer to Floating-point)
  5. routines in Extended Basic.  These routines are not
  6. included in the package of routines loaded into low
  7. memory by the CALL INIT command.  First is an Assembly
  8. program list that implements the routines.  The second
  9. is a list of X-Basic CALL LOAD Pokes that will load the
  10. routines into low memory.
  11.  
  12.   EQU statements needed for BLWP to these routines are
  13.  
  14.       DSRLNK EQU  >24F4
  15.       GPLLNK EQU  >24F8
  16.       CIFLNK EQU  >24FC
  17.  
  18.   The DSR and GPL routines work as documented in the Editor/
  19. Assembler manual.  The CIF routine provided, like the routine
  20. loaded by the Ed/Assmblr cartridge and called through XMLLNK,
  21. takes the one-word integer value at the FAC (Floating point
  22. ACcumulator) at >834A and returns the converted result at FAC.
  23. Unlike the XMLLNK-provided routine, this routine should NOT
  24. have a DATA >2300 statement following the BLWP @CIFLNK statement.
  25.  
  26.   The DSR and CIF routines were both created from dis-assembly
  27. listing of the routines provided by the Ed/Assmblr cartridge.
  28. The GPL routine was picked up many months ago on a bulletin
  29. board (I can't remember which one), and appears to work - although
  30. the specifics of HOW it works is a mystery to me.
  31.  
  32.   Warning!! Handling your own DSR PABs (Peripheral Access Blocks)
  33. and buffer areas appears to be VERY dangerous in the Extended
  34. Basic environment.  You can very easily destroy data in VDP memory
  35. currently in-use by the X-Basic interpreter.  One way of handling
  36. this is to OPEN the file in Basic and use the value at >833C to
  37. find the PAB and buffer area allocated by the file. (See page 302
  38. of the Editor/Assembler manual)  Or, save the VDP memory you're
  39. going to use to RAM and then restore it to the original value
  40. after the DSRLNK.  ALSO, be advised that the Get String Space routine
  41. provided via the GPLLNK appears to not work in the X-Basic environment.
  42. Eventually (usually after the first "garbage collection" is forced),
  43. VDP memory in use by the X-Basic interpreter will get corrupted and
  44. (as we frequently say), "Results may be unpredictable".
  45.  
  46.  
  47.   The following Assembler listing may be used as a stand-alone code
  48. file by:
  49.          1) Stripping out my comments and the CALL LOAD listing
  50.          2) Create a code file by running it through the Assembler.
  51.          3) In your X-Basic program:
  52.               a) CALL LOAD("DSKn.<filename>")
  53.               b) CALL LINK("FIXFFA")
  54.               c) CALL LOAD your code file that will use the routines.
  55.  
  56.   Or, you may wish to simply include the Assembler source statements
  57. in your Assembler program.  If so, take out my DEF and AORG statements
  58. and the FIXFFA routine (the last 5 lines of the listing).
  59.  
  60.  
  61.  
  62.        DEF  FIXFFA
  63.  
  64.        AORG >24F4
  65.  
  66. GPLWS  EQU  >83E0        Equates needed in Extended Basic Environment
  67. UTILWS EQU  >2038
  68.  
  69. VSBR   EQU  >2028
  70.  
  71. FAC    EQU  >834A
  72. GRMRA  EQU  >9802
  73. GRMWA  EQU  >9C02
  74. PABADD EQU  >8356
  75. PAD    EQU  >8300
  76. SUBSTK EQU  >8373
  77.  
  78. DSRLNK DATA UTILWS       Set-up BLWP fields
  79.        DATA DSRBGN
  80.  
  81. GPLLNK DATA UTILWS
  82.        DATA GPLBGN
  83.  
  84. CIFLNK DATA UTILWS
  85.        DATA CIFBGN
  86.  
  87. FNAME  TEXT '----------' Work area and Constants used by DSR routine
  88. VAL1   BYTE >20
  89. VAL2   BYTE >AA
  90. VAL3   BYTE >2E
  91.  
  92. DSRBGN MOV  *R14+,R5     Begin of DSR routine
  93.        SZCB @VAL1,R15
  94.        MOV  @PABADD,R0
  95.        MOV  R0,R9
  96.        AI   R9,-8
  97.        BLWP @VSBR
  98.        MOVB R1,R3
  99.        SRL  R3,8
  100.        SETO R4
  101.        LI   R2,FNAME
  102. DSR1   INC  R0
  103.        INC  R4
  104.        C    R4,R3
  105.        JEQ  DSR2
  106.        BLWP @VSBR
  107.        MOVB R1,*R2+
  108.        CB   R1,@VAL3
  109.        JNE  DSR1
  110. DSR2   MOV  R4,R4
  111.        JEQ  DSR10
  112.        CI   R4,>0007
  113.        JGT  DSR10
  114.        CLR  @>83D0
  115.        MOV  R4,@>8354
  116.        INC  R4
  117.        A    R4,@PABADD
  118.        LWPI GPLWS
  119.        CLR  R1
  120.        LI   R12,>0F00
  121. DSR3   MOV  R12,R12
  122.        JEQ  DSR4
  123.        SBZ  >0000
  124. DSR4   AI   R12,>0100
  125.        CLR  @>83D0
  126.        CI   R12,>2000
  127.        JEQ  DSR9
  128.        MOV  R12,@>83D0
  129.        SBO  >0000
  130.        LI   R2,>4000
  131.        CB   *R2,@VAL2
  132.        JNE  DSR3
  133.        A    @UTILWS+10,R2
  134.        JMP  DSR6
  135. DSR5   MOV  @>83D2,R2
  136.        SBO  >0000
  137. DSR6   MOV  *R2,R2
  138.        JEQ  DSR3
  139.        MOV  R2,@>83D2
  140.        INCT R2
  141.        MOV  *R2+,R9
  142.        MOVB @>8355,R5
  143.        JEQ  DSR8
  144.        CB   R5,*R2+
  145.        JNE  DSR5
  146.        SRL  R5,8
  147.        LI   R6,FNAME
  148. DSR7   CB   *R6+,*R2+
  149.        JNE  DSR5
  150.        DEC  R5
  151.        JNE  DSR7
  152. DSR8   INC  R1
  153.        BL   *R9
  154.        JMP  DSR5
  155.        SBZ  >0000
  156.        LWPI UTILWS
  157.        MOV  R9,R0
  158.        BLWP @VSBR
  159.        SRL  R1,13
  160.        JNE  DSR11
  161.        RTWP
  162. DSR9   LWPI UTILWS
  163. DSR10  CLR  R1
  164. DSR11  SWPB R1
  165.        MOVB R1,*R13
  166.        SOCB @VAL1,R15
  167.        RTWP
  168.  
  169.  
  170. GPLBGN MOVB @GRMRA,R1    Begin of GPL routine
  171.        SWPB R1
  172.        MOVB @GRMRA,R1
  173.        SWPB R1
  174.        AI   R1,-3
  175.        MOVB @SUBSTK,R2
  176.        SRL  R2,8
  177.        AI   R2,PAD
  178.        INCT R2
  179.        MOVB R1,*R2
  180.        SWPB R1
  181.        MOVB R1,@1(R2)
  182.        SWPB R2
  183.        MOVB R2,@SUBSTK
  184.        MOVB *R14+,@GRMWA
  185.        MOVB *R14+,@GRMWA
  186.        MOV  @>2000,R4
  187.        LI   R3,GPL1
  188.        MOV  R3,@>2000
  189.        LWPI GPLWS
  190.        RT
  191. GPL1   LWPI UTILWS
  192.        MOV  R4,@>2000
  193.        RTWP
  194.  
  195.  
  196. RADIX  DATA 100          Constant used by CIF routine
  197.  
  198. CIFBGN LI   R4,FAC       Start of CIF routine
  199.        MOV  *R4,R0
  200.        MOV  R4,R6
  201.        CLR  *R6+
  202.        CLR  *R6+
  203.        MOV  R0,R5
  204.        JEQ  CIFRTN
  205.        ABS  R0
  206.        LI   R3,>0040
  207.        CLR  *R6+
  208.        CLR  *R6
  209.        CI   R0,100
  210.        JL   CIF2
  211.        CI   R0,10000
  212.        JL   CIF1
  213.        INC  R3
  214.        MOV  R0,R1
  215.        CLR  R0
  216.        DIV  @RADIX,R0
  217.        MOVB @UTILWS+3,@3(R4)
  218. CIF1   INC  R3
  219.        MOV  R0,R1
  220.        CLR  R0
  221.        DIV  @RADIX,R0
  222.        MOVB @UTILWS+3,@2(R4)
  223. CIF2   MOVB @UTILWS+1,@1(R4)
  224.        MOVB @UTILWS+7,*R4
  225.        INV  R5
  226.        JLT  CIFRTN
  227.        NEG  *R4
  228. CIFRTN RTWP
  229.  
  230.  
  231. FIXFFA LI   R0,EOF+2     Fix-up First Free Address value
  232.        MOV  R0,@>2002      after LOAD, do a CALL LINK("FIXFFA")
  233.        CLR  R0
  234. EOF    RT
  235.  
  236.        END
  237.  
  238.  
  239.  
  240.  
  241.  
  242.   The following is the Extended Basic statements necessary
  243. to LOAD the DSR, GPL and CIF routines into low memory.
  244. The First Free Address value (at >2002) is fixed up
  245. so that subsequent LOADs of Assembler code files will
  246. not overwrite the routines.
  247.  
  248.   Convert these lines with the DV80TO.PRO program into a
  249. MERGEable X-Basic file.  They can then be MERGEd into
  250. into a X-Basic program that LOADs other Assembler
  251. subroutines that need these routines.
  252.  
  253.   Entry points for the 3 LNKs are the same as stated above.
  254.  
  255.  
  256. 100 CALL INIT
  257. 110 CALL LOAD(9460,32,56,37,14,32,56,37,222,32,56)
  258. 120 CALL LOAD(9470,38,46,45,45,45,45,45,45,45,45)
  259. 130 CALL LOAD(9480,45,45,32,170,46,0,193,126,83,224)
  260. 140 CALL LOAD(9490,37,10,192,32,131,86,194,64,2,41)
  261. 150 CALL LOAD(9500,255,248,4,32,32,40,208,193,9,131)
  262. 160 CALL LOAD(9510,7,4,2,2,37,0,5,128,5,132)
  263. 170 CALL LOAD(9520,128,196,19,6,4,32,32,40,220,129)
  264. 180 CALL LOAD(9530,152,1,37,12,22,246,193,4,19,71)
  265. 190 CALL LOAD(9540,2,132,0,7,21,68,4,224,131,208)
  266. 200 CALL LOAD(9550,200,4,131,84,5,132,168,4,131,86)
  267. 210 CALL LOAD(9560,2,224,131,224,4,193,2,12,15,0)
  268. 220 CALL LOAD(9570,195,12,19,1,30,0,2,44,1,0)
  269. 230 CALL LOAD(9580,4,224,131,208,2,140,32,0,19,44)
  270. 240 CALL LOAD(9590,200,12,131,208,29,0,2,2,64,0)
  271. 250 CALL LOAD(9600,152,18,37,11,22,238,160,160,32,66)
  272. 260 CALL LOAD(9610,16,3,192,160,131,210,29,0,192,146)
  273. 270 CALL LOAD(9620,19,230,200,2,131,210,5,194,194,114)
  274. 280 CALL LOAD(9630,209,96,131,85,19,9,156,133,22,242)
  275. 290 CALL LOAD(9640,9,133,2,6,37,0,156,182,22,237)
  276. 300 CALL LOAD(9650,6,5,22,252,5,129,6,153,16,232)
  277. 310 CALL LOAD(9660,30,0,2,224,32,56,192,9,4,32)
  278. 320 CALL LOAD(9670,32,40,9,209,22,4,3,128,2,224)
  279. 330 CALL LOAD(9680,32,56,4,193,6,193,215,65,243,224)
  280. 340 CALL LOAD(9690,37,10,3,128,208,96,152,2,6,193)
  281. 350 CALL LOAD(9700,208,96,152,2,6,193,2,33,255,253)
  282. 360 CALL LOAD(9710,208,160,131,115,9,130,2,34,131,0)
  283. 370 CALL LOAD(9720,5,194,212,129,6,193,216,129,0,1)
  284. 380 CALL LOAD(9730,6,194,216,2,131,115,216,62,156,2)
  285. 390 CALL LOAD(9740,216,62,156,2,193,32,32,0,2,3)
  286. 400 CALL LOAD(9750,38,34,200,3,32,0,2,224,131,224)
  287. 410 CALL LOAD(9760,4,91,2,224,32,56,200,4,32,0)
  288. 420 CALL LOAD(9770,3,128,0,100,2,4,131,74,192,20)
  289. 430 CALL LOAD(9780,193,132,4,246,4,246,193,64,19,35)
  290. 440 CALL LOAD(9790,7,64,2,3,0,64,4,246,4,214)
  291. 450 CALL LOAD(9800,2,128,0,100,26,19,2,128,39,16)
  292. 460 CALL LOAD(9810,26,8,5,131,192,64,4,192,60,32)
  293. 470 CALL LOAD(9820,38,44,217,32,32,59,0,3,5,131)
  294. 480 CALL LOAD(9830,192,64,4,192,60,32,38,44,217,32)
  295. 490 CALL LOAD(9840,32,59,0,2,217,32,32,57,0,1)
  296. 500 CALL LOAD(9850,213,32,32,63,5,69,17,1,5,20)
  297. 510 CALL LOAD(9860,3,128)
  298. 520 CALL LOAD(8194,38,134) ! Fix-up First Free Address Value
  299.  
  300.  
  301. Download complete.  Turn off Capture File.
  302.  
  303.  
  304.