Guest User

Untitled

a guest
Dec 1st, 2011
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. DEFINT A-Z
  2.  
  3. '*** Variable declarations *************************
  4. DIM BitMask(0 TO 7) AS INTEGER
  5. DIM CmdLine AS STRING
  6. DIM bmpfile AS STRING
  7. DIM chrfile AS STRING
  8. DIM CurChr AS INTEGER
  9. DIM FileNum AS INTEGER
  10. DIM XSIZE AS LONG
  11. DIM YSIZE AS LONG
  12. DIM Bitsperpixel AS INTEGER
  13. DIM XTILES AS INTEGER
  14. DIM YTILES AS INTEGER
  15. DIM Index AS INTEGER
  16. DIM R AS INTEGER
  17. DIM G AS INTEGER
  18. DIM B AS INTEGER
  19. DIM BUFFER AS STRING
  20. DIM XX AS INTEGER
  21. DIM YY AS INTEGER
  22. DIM X AS INTEGER
  23. DIM Y AS INTEGER
  24. DIM LX AS INTEGER
  25. DIM LY AS INTEGER
  26. DIM Tile AS INTEGER
  27. DIM B1 AS INTEGER
  28. DIM B2 AS INTEGER
  29. DIM PX AS INTEGER
  30. DIM PX1 AS INTEGER
  31. DIM PX2 AS INTEGER
  32.  
  33. '*** Set bit mask **********************************
  34. BitMask(0) = &H80
  35. BitMask(1) = &H40
  36. BitMask(2) = &H20
  37. BitMask(3) = &H10
  38. BitMask(4) = &H8
  39. BitMask(5) = &H4
  40. BitMask(6) = &H2
  41. BitMask(7) = &H1
  42.  
  43. '*** Interpret command line ************************
  44. bmpfile = ""
  45. chrfile = ""
  46. CurChr = 0
  47. CmdLine = COMMAND$
  48.  
  49. IF CmdLine = "" THEN GOTO BadCommand
  50.  
  51. DO
  52. CurChr = CurChr + 1
  53. C$ = MID$(CmdLine, CurChr, 1)
  54. IF C$ <> " " THEN bmpfile = bmpfile + C$
  55. LOOP UNTIL ((LEN(bmpfile) <> 0) AND (C$ = " ")) OR (CurChr = LEN(CmdLine))
  56.  
  57. IF CurChr = LEN(CmdLine) THEN GOTO BadCommand
  58.  
  59. DO
  60. CurChr = CurChr + 1
  61. C$ = MID$(CmdLine, CurChr, 1)
  62. IF C$ <> " " THEN chrfile = chrfile + C$
  63. LOOP UNTIL ((LEN(chrfile) <> 0) AND (C$ = " ")) OR (CurChr = LEN(CmdLine))
  64.  
  65. IF bmpfile = "" OR chrfile = "" THEN GOTO BadCommand
  66.  
  67. '*** Check if BMP has the needed specs *************
  68. FileNum = FREEFILE
  69. OPEN bmpfile FOR BINARY AS FileNum
  70. IF LOF(FileNum) = 0 THEN
  71. CLOSE FileNum
  72. KILL bmpfile
  73. PRINT
  74. PRINT " Cannot find BMP file"
  75. END
  76. END IF
  77. CLOSE FileNum
  78.  
  79. OPEN bmpfile FOR BINARY AS FileNum
  80.  
  81. GET FileNum, 19, XSIZE
  82. GET FileNum, 23, YSIZE
  83.  
  84. IF (XSIZE > 320) OR (YSIZE > 200) THEN
  85. CLOSE FileNum
  86. PRINT
  87. PRINT " Image is larger than 320x200"
  88. END
  89. END IF
  90.  
  91. XTILES = XSIZE \ 8
  92. YTILES = YSIZE \ 8
  93.  
  94. GET FileNum, 29, Bitsperpixel
  95.  
  96. IF Bitsperpixel <> 8 THEN
  97. CLOSE FileNum
  98. PRINT
  99. PRINT " Not a 256 colors BMP"
  100. END
  101. END IF
  102.  
  103. SCREEN 13 'VGA 320x200x256
  104.  
  105. CLS
  106.  
  107. '*** Set the first 4 colors of the palette *********
  108. SEEK FileNum, 55
  109.  
  110. FOR Index = 0 TO 3
  111. A$ = " ": GET FileNum, , A$: B = ASC(A$): B = B \ 4
  112. A$ = " ": GET FileNum, , A$: G = ASC(A$): G = G \ 4
  113. A$ = " ": GET FileNum, , A$: R = ASC(A$): R = R \ 4
  114. A$ = " ": GET FileNum, , A$
  115.  
  116. OUT &H3C8, Index
  117. OUT &H3C9, R
  118. OUT &H3C9, G
  119. OUT &H3C9, B
  120. NEXT Index
  121.  
  122. '*** Decode BMP data to the screen *****************
  123. SEEK FileNum, 1079
  124.  
  125. FOR YY = (YSIZE - 1) TO 0 STEP -1
  126. BUFFER = SPACE$(XSIZE): GET FileNum, , BUFFER
  127. FOR XX = 1 TO XSIZE
  128. PSET (XX - 1, YY), ASC(MID$(BUFFER, XX, 1))
  129. NEXT XX
  130. NEXT YY
  131.  
  132. CLOSE FileNum
  133.  
  134. '*** Save CHR file *********************************
  135. Y = 0
  136. X = 0
  137. B1 = 0
  138. B2 = 0
  139.  
  140. OPEN chrfile FOR BINARY AS FileNum
  141.  
  142. Reg& = 1
  143. FOR Tile = 1 TO (XTILES * YTILES)
  144. FOR LY = 0 TO 7
  145. FOR LX = 0 TO 7
  146. XX = X + LX
  147. YY = Y + LY
  148. PX = POINT(XX, YY)
  149. IF PX > 3 THEN PX = 0
  150. PX2 = (PX AND 2) \ 2
  151. PX1 = PX AND 1
  152. B1 = B1 OR (PX1 * BitMask(LX))
  153. B2 = B2 OR (PX2 * BitMask(LX))
  154. NEXT LX
  155. A$ = CHR$(B1)
  156. PUT FileNum, Reg&, A$
  157. A$ = CHR$(B2)
  158. PUT FileNum, Reg& + 8, A$
  159. Reg& = Reg& + 1
  160. B1 = 0
  161. B2 = 0
  162. NEXT LY
  163. X = X + 8
  164. IF X > (XTILES * 8) - 1 THEN
  165. X = 0
  166. Y = Y + 8
  167. END IF
  168. Reg& = Reg& + 8
  169. NEXT Tile
  170.  
  171. CLOSE FileNum
  172.  
  173. COLOR 15
  174. LOCATE 25, 1: PRINT "DONE - Press any key . . ."; : SLEEP
  175.  
  176. CLS
  177.  
  178. SCREEN 0: WIDTH 80 'Text mode
  179.  
  180. END 'End of program
  181.  
  182. '*** If command line is wrong... *******************
  183. BadCommand:
  184.  
  185. PRINT
  186. PRINT " Syntax: bmp2nes.exe bmpfile.bmp chrfile.chr"
  187.  
  188. END
  189.  
  190.  
  191.  
Advertisement
Add Comment
Please, Sign In to add comment