home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / commodore-scene-files / Coverdisks / CDU / V4D05.D64 / viewscreens.asm (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  9.4 KB  |  404 lines

  1. 10 *=$C000
  2. 20 ! **********************************
  3. 30 !
  4. 40 !    SEUCK EXTENSION BLOCK/SCREEN
  5. 50 !   EXPANSION ROUTINE BY IAN (null)FFE
  6. 60 !      OCTOBER, 1989 FOR CDU.
  7. 70 !
  8. 80 !   SOURCE FILE COMPATIBLE WITH:
  9. 90 !
  10. 100 !
  11. 110 !    >  MIKRO ASSEMBLER
  12. 120 !    >  6510+
  13. 130 !    >  MY MACRO ASSEMBLER
  14. 140 !
  15. 150 !       (CHANGE ASL A TO ASLA
  16. 160 !       WITH MACRO ASSEMBLER)
  17. 170 !
  18. 180 ! **********************************
  19. 190 !
  20. 200 ! THIS PROGRAM TAKES THE DATA
  21. 210 ! SAVED FROM THE S.E.U.C.K EXTENSION
  22. 220 ! EDITOR, AND DISPLAYS A GIVEN
  23. 230 ! SCREEN.
  24. 240 !
  25. 250 ! WE ARE USING BANK 0 (DEFAULT)
  26. 260 ! WITH THE FOLLOWING SET OF DATA:-
  27. 270 !
  28. 280 ! BLOCK COLOURS     AT $2000-$2080
  29. 290 ! BLOCK DEFINITIONS AT $2100-$2D80
  30. 300 ! CHARACTER SET     AT $3000-$3800
  31. 310 ! SCREEN DATA       AT $4000-$6000
  32. 320 ! SCREEN            AT $0400>DEFAULT
  33. 330 !
  34. 340 !      FIRST GIVE VALUES TO
  35. 350 !      LABELS REFERING TO THE ABOVE
  36. 360 !
  37. 370 BLOCKBASE=$2100
  38. 380 SCREENDATA=$4000
  39. 390 BB=BLOCKBASE !  A SHORTER LABEL FOR
  40. 400 !               LATER ON!!
  41. 410 COLBLOCK=$2000
  42. 420 SC=1024
  43. 430 !
  44. 440 !           USED TO FIND COLOUR MAP
  45. 450 !           FROM SCREEN ADDRESS...
  46. 460 !
  47. 470 DIFFERENCE=55296-SC
  48. 480 !
  49. 490 !      INIT ZERO PAGE LOCATIONS TO
  50. 500 !      HOLD THE ADDRESSES TO WORK ON
  51. 510 !
  52. 520 BLOCKAD=$FE
  53. 530 COLOURAD=$FC
  54. 540 SCREENAD=$FA
  55. 550 SAD=$F8
  56. 560 !
  57. 570 ! *****************************
  58. 580 !
  59. 590 ! THIS IS ALL THAT IS REQUIRED
  60. 600 ! OF YOU TO PRINT A SCREEN!!!
  61. 610 !
  62. 620 SEI
  63. 630 LDA #28 !     MOVE CHAR SET TO 12288
  64. 640 STA 53272
  65. 650 LDA #216
  66. 660 STA 53270 !   MULTICOLOUR ON
  67. 670 !
  68. 680 LDA #0  !   SET COLOURS AS YOU WISH
  69. 690 STA 53281
  70. 700 STA 53282
  71. 710 LDX #6
  72. 720 STX 53282
  73. 730 INX
  74. 740 STX 53283
  75. 750 LDA #0  !     LOAD A WITH SCREEN #
  76. 760 JSR EXPASCR
  77. 770 CLI
  78. 780 RTS
  79. 790 ! *****************************
  80. 800 !
  81. 810 ! ----------------------------------
  82. 820 !       THE ROUTINE BELOW PRINTS
  83. 830 !       A SINGLE BLOCK TO THE SCREEN
  84. 840 !       AT THE GIVEN X AND Y COORDS.
  85. 850 !      CALL THIS ROUTINE WITH:
  86. 860 !             A=BLOCK NUMBER
  87. 870 !     "XINIT" ANY "YINIT"
  88. 880 !  HOLDING THE RELEVANT COORDINATES.
  89. 890 !
  90. 900 ! ----------------------------------
  91. 910 EXPBLOCK !
  92. 920 !
  93. 930 !
  94. 940 STA BLOCKNUM
  95. 950 TAX
  96. 960 !
  97. 970 !
  98. 980 !     ! GET Y=BLOCK NUMBER*2
  99. 990 !
  100. 1000 ASL A !  SHIFT LEFT IE. *2
  101. 1010 TAY
  102. 1020 !
  103. 1030 !     GET THE COLOUR OF THIS BLOCK
  104. 1040 LDA COLBLOCK,X
  105. 1050 STA COLOUR
  106. 1060 !
  107. 1070 !   NOW WE NEED TO GET THE START
  108. 1080 !   ADDR. OF THIS BLOCK'S DEFINITION
  109. 1090 !
  110. 1100 !   TO DO THIS WE NEED TO GET :-
  111. 1110 !   (BLOCK NO.*25)+BLOCK BASE ADDR.
  112. 1120 !   THIS MAY TAKE MUCH PROCESSOR
  113. 1130 !   TIME AS "MULTIPLE-ADDITION"
  114. 1140 !   TECHNIQUES ARE REQUIRED.
  115. 1150 !
  116. 1160 ! INSTEAD I HAVE SET UP A 256-BYTE
  117. 1170 ! TABLE HOLDING EACH OF THE 128
  118. 1180 ! BLOCK ADDRESSES.
  119. 1190 ! TO INDEX A PARTICULAR BLOCK DEF.
  120. 1200 !       INDEX=BLOCK NO. *2
  121. 1210 !
  122. 1220 !        AS Y=BLOCK NO*2
  123. 1230 !
  124. 1240 !
  125. 1250 LDA BLOCKTABAD,Y ! GET LO BYTE
  126. 1260 STA BLOCKAD
  127. 1270 LDA BLOCKTABAD+1,Y ! HI BYTE
  128. 1280 STA BLOCKAD+1
  129. 1290 !
  130. 1300 !      SIMPLE ISN'T IT, NOW"?"
  131. 1310 !
  132. 1320 ! THIS TIME SAVING IS REQUIRED
  133. 1330 ! AS THIS ROUTINE IS CALLED 32
  134. 1340 ! TIMES FOR EACH SCREEN - YOU WILL
  135. 1350 ! NOTICE THE TIME DIFFERENCE
  136. 1360 ! IF THE ADDRESS WASN'T TABULATED!
  137. 1370 ! WE NEED TO BANG DATA ONTO THE
  138. 1380 ! SCREEN LIKE A BAT OUT OF HELL,
  139. 1390 !  SO IT'S WELL WORTH THE 256 BYTES!
  140. 1400 ! -------------------------------
  141. 1410 !           SUMMARY:-
  142. 1420 !  BLOCKAD HOLDS BLOCK/CHAR ADDR
  143. 1430 !  FOR BLOCK IN "BLOCKNUM"
  144. 1440 ! -------------------------------
  145. 1450 !
  146. 1460 !  NOW GET SCREENAD TO HOLD THE
  147. 1470 !  SCREEN ADDRESS FOR THE Y COORD.
  148. 1480 !
  149. 1490 !    IE. SO AS SCREENAD HOLDS THE
  150. 1500 !    SCREEN ADDRESS FOR WHEN X=0.
  151. 1510 !
  152. 1520 !   I AM EMPLOYING THE SAME
  153. 1530 !   "GET THE ADDRESS OUT OF THE
  154. 1540 !   TABLE[171]QUICK" METHOD AGAIN AS
  155. 1550 ! IT IS IN THE MAIN ROUTINE STILL!
  156. 1560 !    GET Y COORDINATE*2 FOR OFFSET
  157. 1570 !    IN THE SCREEN ADDRESS TABLE.
  158. 1580 !
  159. 1590 LDA YINIT
  160. 1600 ASL A
  161. 1610 TAY
  162. 1620 LDA SCREENTABLE,Y
  163. 1630 STA SCREENAD
  164. 1640 LDA SCREENTABLE+1,Y
  165. 1650 STA SCREENAD+1
  166. 1660 !
  167. 1670 !
  168. 1680 !
  169. 1690 !
  170. 1700 ! -----------------------------
  171. 1710 ! NOW SCREENAD=THE Y COORD ADDRESS
  172. 1720 ! OF THE SCREEN FOR X=0
  173. 1730 ! -----------------------------
  174. 1740 !
  175. 1750 LDA #0
  176. 1760 STA BLKREAD !  COUNT THROUGH 0-24
  177. 1770 !              CHARS. IN THIS BLOCK
  178. 1780 LDA #5
  179. 1790 STA YCOUNT !     HEIGHT OF BLOCK
  180. 1800 !
  181. 1810 DO1Y LDA XINIT ! EACH NEW Y COORD -
  182. 1820 !                GIVE THE X START
  183. 1830 !                INDEX ACROSS THE
  184. 1840 !                THE SCREEN IE.
  185. 1850 !                VALUE FROM 0-39.
  186. 1860 STA XCOORD
  187. 1870 LDY #5 !         WIDTH OF BLOCK
  188. 1880 STY XCOUNT
  189. 1890 !
  190. 1900 DO1X LDY BLKREAD !    INDEX (0-24)
  191. 1910 !                    THROUGH BLOCK
  192. 1920 !                    DEFINITION.
  193. 1930 !
  194. 1940 !           READ A CHAR. TO PRINT
  195. 1950 !           FROM THIS BLOCK'S BASE
  196. 1960 !
  197. 1970 READBLOCK LDA (BLOCKAD),Y
  198. 1980 !
  199. 1990 LDY XCOORD !    STORE ON SCREEN
  200. 2000 !              TAKING INTO ACCOUNT
  201. 2010 !               THE COLUMN INDEX
  202. 2020 !
  203. 2030 STA (SCREENAD),Y
  204. 2040 !
  205. 2050 !     CREATE THE COLOURMAP ADDRESS
  206. 2060 !     RELATIVE FROM THE SCREEN.
  207. 2070 !
  208. 2080 !  NOTE THAT IF A SCREEN ADDRESS
  209. 2090 !  IS BEING USED THAT IS >55296
  210. 2100 !   THEN THE LABEL DIFFERENCE
  211. 2110 !  WOULD NEED TO BE CHANGED TO:-
  212. 2120 !      DIFFERENCE=SCR-55296
  213. 2130 !
  214. 2140 !  AND THE "ADC" INSTRUCTIONS
  215. 2150 ! BELOW WOULD NEED TO BE CHANGED
  216. 2160 ! TO "SBC" - MAKING SURE THAT YOU
  217. 2170 ! SET CARRY (SEC) FIRST INSTEAD OF
  218. 2180 !   "CLC"  - NUFF SAID!
  219. 2190 !
  220. 2200 CLC
  221. 2210 LDA SCREENAD
  222. 2220 ADC #<DIFFERENCE
  223. 2230 STA COLOURAD
  224. 2240 LDA SCREENAD+1
  225. 2250 ADC #>DIFFERENCE
  226. 2260 STA COLOURAD+1
  227. 2270 LDA COLOUR
  228. 2280 !
  229. 2290 !  Y STILL HOLDS COLUMN INDEX
  230. 2300 ! SO COLOUR IN THAT CHAR ON SCREEN!
  231. 2310 STA (COLOURAD),Y
  232. 2320 !
  233. 2330 INC XCOORD !     MOVE ALONG SCREEN
  234. 2340 !                COLUMN
  235. 2350 INC BLKREAD !   THROUGH 0-24 INDEX
  236. 2360 !               IN BLOCK
  237. 2370 !
  238. 2380 !
  239. 2390 DEC XCOUNT       LOOP WIDTH
  240. 2400 BNE DO1X
  241. 2410 !
  242. 2420 !
  243. 2430 ! NOW MOVE DOWN ONE Y COORDINATE -
  244. 2440 ! JUST ADD 40 TO THE SCREEN ADDR.
  245. 2450 !
  246. 2460 CLC
  247. 2470 LDA SCREENAD
  248. 2480 ADC #40
  249. 2490 STA SCREENAD
  250. 2500 BCC OKE
  251. 2510 INC SCREENAD+1
  252. 2520 !
  253. 2530 OKE DEC YCOUNT !   LOOP HEIGHT
  254. 2540 BNE DO1Y
  255. 2550 RTS
  256. 2560 XCOORD BYT 0
  257. 2570 BLKREAD BYT 0
  258. 2580 XINIT BYT 0
  259. 2590 YINIT BYT 0
  260. 2600 BLOCKNUM BYT 0
  261. 2610 YCOUNT BYT 0
  262. 2620 XCOUNT BYT 0
  263. 2630 ! ------------------------------
  264. 2640 !
  265. 2650 ! THIS ROUTINE EXPANDS A COMPLETE
  266. 2660 ! SCREEN BY CALLING THE "EXPAND
  267. 2670 ! A BLOCK ROUTINE" FOR EACH OF THE
  268. 2680 ! 32 BLOCKS ON A SCREEN..
  269. 2690 !
  270. 2700 !IT IS CALLED WITH A=SCREEN NUMBER
  271. 2710 ! - SIMPLICITY IT'SELF FOR YOU!
  272. 2720 !
  273. 2730 ! ------------------------------
  274. 2740 EXPASCR !
  275. 2750 !
  276. 2760 ! RIGHT - WHAT WE MUST DO
  277. 2770 ! IS FIND THE SCREEN DATA ADDRESS.
  278. 2780 ! EACH DATA ADDRESS FOR A SCREEN
  279. 2790 ! IS 32 BYTES LONG - SO WE MUST
  280. 2800 ! GET (32*SCREEN)+BASE
  281. 2810 ! OF DATA ADDRESSES - OK...
  282. 2820 !
  283. 2830 LDX #0
  284. 2840 STA SAD
  285. 2850 STX SAD+1 !  INIT MULTIPLY
  286. 2860 !
  287. 2870 CLC
  288. 2880 ASL SAD
  289. 2890 ROL SAD+1 !             *2
  290. 2900 ASL SAD
  291. 2910 ROL SAD+1 !             *4
  292. 2920 ASL SAD
  293. 2930 ROL SAD+1 !             *8
  294. 2940 ASL SAD
  295. 2950 ROL SAD+1 !             *16
  296. 2960 ASL SAD
  297. 2970 ROL SAD+1         !     *32
  298. 2980 !
  299. 2990 !     NOW TO ADD IN THE BASE
  300. 3000 !     ADDRESS OF THE SCREEN DATA
  301. 3010 !
  302. 3020 CLC
  303. 3030 LDA SAD
  304. 3040 ADC #<SCREENDATA
  305. 3050 STA SAD
  306. 3060 LDA SAD+1
  307. 3070 ADC #>SCREENDATA
  308. 3080 STA SAD+1
  309. 3090 !
  310. 3100 ! --------------------------
  311. 3110 ! WICKED! - SCRAD/+1 HOLDS BASE
  312. 3120 ! ADDRESS FOR THE SCREEN - PHEW!
  313. 3130 ! ---------------------------
  314. 3140 !
  315. 3150 !
  316. 3160 STX XINIT !      X COORD ON SCREEN
  317. 3170 STX YINIT !      Y   "   "    "
  318. 3180 STX BLOKC ! INDEX IN SCREEN [131]
  319. 3190 !           [164] [135] BLOCK NUMBERS
  320. 3200 BKA !
  321. 3210 LDY BLOKC
  322. 3220 LDA (SAD),Y ! [135] BLOCK IN
  323. 3230 !                 THIS SCREEN
  324. 3240 !
  325. 3250 INC BLOKC !  [130] BLOCK IN SCREEN
  326. 3260 !
  327. 3270 ! BANG THAT BLOCK [145][164] THE SCREEN !
  328. 3280 JSR [189]BLOCK
  329. 3290 !
  330. 3300 LDA XINIT
  331. 3310 CLC
  332. 3320 ADC #5 !      START [130] BLOCK
  333. 3330 !            AL[145]G BY 5 CHARACTERS
  334. 3340 STA XINIT
  335. 3350 CMP #40 ! RIGHT[171]MOST COLUMN
  336. 3360 !         REACHED
  337. 3370 !
  338. 3380 BNE NOXREAC
  339. 3390 !
  340. 3400 ! [171][171][177] [139] X REACHED LAST COLUMN
  341. 3410 !     [167] RESET X [164] 0, [175] MOVE
  342. 3420 !     DOWN BY 5 Y CO[176]DINATES!!
  343. 3430 !
  344. 3440 LDA #0
  345. 3450 STA XINIT
  346. 3460 CLC
  347. 3470 LDA YINIT
  348. 3480 ADC #5 !      DOWN 5 CHARS(Y)
  349. 3490 STA YINIT
  350. 3500 !
  351. 3510 !
  352. 3520 CMP #20 !  CHECK FOR MAX Y COORD.
  353. 3530 !         (MUST BE A MULTIPLE OF 5
  354. 3540 !          - OR ELSE !!!!)
  355. 3550 !
  356. 3560 BEQ [142]
  357. 3570 NOXREAC JMP BKA
  358. 3580 !
  359. 3590 ! FINALLY THE WHOLE SCREEN HAS
  360. 3600 ! BEEN DISPLAYED [171] SIT BACK &
  361. 3610 ! ADMIRE YOUR W[176]K..........
  362. 3620 !
  363. 3630 [142] !
  364. 3640 RTS
  365. 3650 BLOKC BYT 0
  366. 3660 COLOUR BYT 0
  367. 3670 !
  368. 3680 !
  369. 3690 !THE ADDRESSES OF BLOCK DEFINITIONS
  370. 3700 ! (ALL 128 OF THEM!)
  371. 3710 !
  372. 3720 BLOCKTABAD !
  373. 3730 W[176] BB,BB[170]25,BB[170]50,BB[170]75,BB[170]100,BB[170]125,BB[170]150,BB[170]175,BB[170]200,BB[170]225
  374. 3740 W[176] BB[170]250,BB[170]275,BB[170]300,BB[170]325
  375. 3750 W[176] BB[170]350,BB[170]375,BB[170]400,BB[170]425
  376. 3760 W[176] BB[170]450,BB[170]475,BB[170]500,BB[170]525
  377. 3770 W[176] BB[170]550,BB[170]575,BB[170]600,BB[170]625
  378. 3780 W[176] BB[170]650,BB[170]675,BB[170]700,BB[170]725,BB[170]750,BB[170]775,BB[170]800,BB[170]825,BB[170]850,BB[170]875
  379. 3790 W[176] BB[170]900,BB[170]925,BB[170]950,BB[170]975,BB[170]1000,BB[170]1025
  380. 3800 W[176] BB[170]1050,BB[170]1075,BB[170]1100,BB[170]1125,BB[170]1150,BB[170]1175,BB[170]1200,BB[170]1225
  381. 3810 W[176] BB[170]1250,BB[170]1275,BB[170]1300,BB[170]1325,BB[170]1350,BB[170]1375,BB[170]1400,BB[170]1425
  382. 3820 W[176] BB[170]1450,BB[170]1475,BB[170]1500,BB[170]1525,BB[170]1550,BB[170]1575,BB[170]1600,BB[170]1625
  383. 3830 W[176] BB[170]1650,BB[170]1675,BB[170]1700,BB[170]1725,BB[170]1750,BB[170]1775,BB[170]1800,BB[170]1825
  384. 3840 W[176] BB[170]1850,BB[170]1875,BB[170]1900,BB[170]1925
  385. 3850 W[176] BB[170]1950,BB[170]1975,BB[170]2000,BB[170]2025,BB[170]2050,BB[170]2075,BB[170]2100,BB[170]2125
  386. 3860 W[176] BB[170]2150,BB[170]2175,BB[170]2200,BB[170]2225,BB[170]2250,BB[170]2275,BB[170]2300,BB[170]2325
  387. 3870 W[176] BB[170]2350,BB[170]2375,BB[170]2400,BB[170]2425,BB[170]2450,BB[170]2475,BB[170]2500,BB[170]2525
  388. 3880 W[176] BB[170]2550,BB[170]2575,BB[170]2600,BB[170]2625,BB[170]2650,BB[170]2675,BB[170]2700,BB[170]2725
  389. 3890 W[176] BB[170]2750,BB[170]2775,BB[170]2800,BB[170]2825,BB[170]2850,BB[170]2875,BB[170]2900,BB[170]2925
  390. 3900 W[176] BB[170]2950,BB[170]2975,BB[170]3000,BB[170]3025,BB[170]3050,BB[170]3075,BB[170]3100,BB[170]3125
  391. 3910 W[176] BB[170]3150,BB[170]3175
  392. 3920 !
  393. 3930 ! [175] THE SCREEN ADDRESSES.....
  394. 3940 !
  395. 3950 SCREENTABLE W[176] SC,SC[170]40,SC[170]80,SC[170]120,SC[170]160,SC[170]200,SC[170]240,SC[170]280,SC[170]320
  396. 3960 W[176] SC[170]360,SC[170]400,SC[170]440,SC[170]480,SC[170]520,SC[170]560,SC[170]600,SC[170]640,SC[170]680,SC[170]720
  397. 3970 W[176] SC[170]760,SC[170]800
  398. 3980 !
  399. 3990 !
  400. 4000 !         IG'89
  401. 4010 !
  402. 4020 !
  403. 4030 !
  404.