home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / trs80coco.zip / ccexbin.bas next >
BASIC Source File  |  2011-08-08  |  2KB  |  82 lines

  1. 110 ' EXBIN - CONVERT S-RECORD FORMAT TO BINARY
  2. 120 '
  3. 130 PCLEAR 1
  4. 140 CLEAR 200,&H1FFF
  5. 150 DIM V(50)
  6. 160 AL=64*1024 ' LOWEST ADDRESS
  7. 170 AU=0       ' HIGHEST ADDRESS
  8. 180 AX=0       ' EXEC ADDRESS
  9. 190 AM=&H2000  ' MIN ALLOWED
  10. 200 SF=1
  11. 210 CLS
  12. 220 PRINT"EXBIN"
  13. 230 PRINT"CONVERT S-RECORD FILE TO BINARY"
  14. 240 '
  15. 250 INPUT"S-FILE";NM$
  16. 260 OPEN"I",SF,NM$
  17. 270 '
  18. 280 NREC=0
  19. 290 '
  20. 300 ' MAIN LOOP - READ RECORD AND CONVERT IT
  21. 310 INPUT#SF,DL$: NREC=NREC+1
  22. 320 IF LEFT$(DL$,1)="S" THEN 380
  23. 330 PRINT "FILE IS NOT IN S-RECORD FORMAT."
  24. 340 PRINT "LINE";NREC
  25. 350 PRINT DL$
  26. 360 STOP
  27. 370 ' RECORD TYPE (0,1 OR 9)
  28. 380 TYPE=VAL(MID$(DL$,2,1))
  29. 390 ' RECORD LENGTH
  30. 400 LN=VAL("&H"+MID$(DL$,3,2))
  31. 410 ' ADDRESS FIELD
  32. 420 ADR=VAL("&H"+MID$(DL$,5,4))
  33. 430 ' COMPUTE CHECKSUM
  34. 440 CK=LN+INT(ADR/256)+ADR-256*INT(ADR/256)
  35. 450 ' DATA BYTES
  36. 460 IF LN<=3 THEN 510
  37. 470 FOR I=1 TO LN-3
  38. 480 V(I)=VAL("&H"+MID$(DL$,7+2*I,2))
  39. 490 CK=CK+V(I)
  40. 500 NEXT I
  41. 510 CK=255-(CK-256*INT(CK/256))
  42. 520 CS=VAL("&H"+RIGHT$(DL$,2))
  43. 530 IF CK=CS THEN 580
  44. 540 PRINT"CHECKSUM ERROR AT LINE";NREC
  45. 550 PRINT DL$
  46. 560 PRINT "COMPUTED ";HEX$(CK);" FOUND ";HEX$(CS)
  47. 570 STOP
  48. 580 IF TYPE=9 THEN TYPE=2
  49. 590 IF TYPE<0 OR TYPE>2 THEN PRINT"UNKNOWN RECORD TYPE ";TYPE:PRINT DL$:STOP
  50. 600 ON TYPE+1 GOSUB 640,720,840
  51. 610 IF TYPE<2 THEN GOTO 310
  52. 620 END
  53. 630 '
  54. 640 ' FILE NAME RECORD
  55. 650 BN$=""
  56. 660 FOR I=1 TO LN-3
  57. 670 BN$=BN$+CHR$(V(I))
  58. 680 NEXT I
  59. 690 PRINT"OUTPUT FILE = ";BN$
  60. 700 RETURN
  61. 710 '
  62. 720 ' DATA RECORD
  63. 730 IF ADR>=AM THEN 770
  64. 740 PRINT"ADDRESS ";HEX$(ADR);" LESS THAN ";HEX$(AM)
  65. 750 PRINT"AT LINE ";NREC
  66. 760 STOP
  67. 770 FOR I=0 TO LN-4
  68. 780 POKE ADR+I,V(I+1)
  69. 790 NEXT I
  70. 800 IF ADR<AL THEN AL=ADR
  71. 810 IF ADR+LN-4>AU THEN AU=ADR+LN-4
  72. 820 RETURN
  73. 830 '
  74. 840 ' EXECUTION ENTRY RECORD
  75. 850 AX=ADR
  76. 860 PRINT"BINARY FILE  = ";BN$
  77. 870 PRINT"LOW  ADDRESS = &H";HEX$(AL)
  78. 880 PRINT"HIGH ADDRESS = &H";HEX$(AU)
  79. 890 PRINT"EXEC ADDRESS = &H";HEX$(AX)
  80. 900 SAVEM BN$,AL,AU,AX
  81. 910 RETURN
  82.