home *** CD-ROM | disk | FTP | other *** search
- 10 *=$C000
- 20 ! **********************************
- 30 !
- 40 ! SEUCK EXTENSION BLOCK/SCREEN
- 50 ! EXPANSION ROUTINE BY IAN (null)FFE
- 60 ! OCTOBER, 1989 FOR CDU.
- 70 !
- 80 ! SOURCE FILE COMPATIBLE WITH:
- 90 !
- 100 !
- 110 ! > MIKRO ASSEMBLER
- 120 ! > 6510+
- 130 ! > MY MACRO ASSEMBLER
- 140 !
- 150 ! (CHANGE ASL A TO ASLA
- 160 ! WITH MACRO ASSEMBLER)
- 170 !
- 180 ! **********************************
- 190 !
- 200 ! THIS PROGRAM TAKES THE DATA
- 210 ! SAVED FROM THE S.E.U.C.K EXTENSION
- 220 ! EDITOR, AND DISPLAYS A GIVEN
- 230 ! SCREEN.
- 240 !
- 250 ! WE ARE USING BANK 0 (DEFAULT)
- 260 ! WITH THE FOLLOWING SET OF DATA:-
- 270 !
- 280 ! BLOCK COLOURS AT $2000-$2080
- 290 ! BLOCK DEFINITIONS AT $2100-$2D80
- 300 ! CHARACTER SET AT $3000-$3800
- 310 ! SCREEN DATA AT $4000-$6000
- 320 ! SCREEN AT $0400>DEFAULT
- 330 !
- 340 ! FIRST GIVE VALUES TO
- 350 ! LABELS REFERING TO THE ABOVE
- 360 !
- 370 BLOCKBASE=$2100
- 380 SCREENDATA=$4000
- 390 BB=BLOCKBASE ! A SHORTER LABEL FOR
- 400 ! LATER ON!!
- 410 COLBLOCK=$2000
- 420 SC=1024
- 430 !
- 440 ! USED TO FIND COLOUR MAP
- 450 ! FROM SCREEN ADDRESS...
- 460 !
- 470 DIFFERENCE=55296-SC
- 480 !
- 490 ! INIT ZERO PAGE LOCATIONS TO
- 500 ! HOLD THE ADDRESSES TO WORK ON
- 510 !
- 520 BLOCKAD=$FE
- 530 COLOURAD=$FC
- 540 SCREENAD=$FA
- 550 SAD=$F8
- 560 !
- 570 ! *****************************
- 580 !
- 590 ! THIS IS ALL THAT IS REQUIRED
- 600 ! OF YOU TO PRINT A SCREEN!!!
- 610 !
- 620 SEI
- 630 LDA #28 ! MOVE CHAR SET TO 12288
- 640 STA 53272
- 650 LDA #216
- 660 STA 53270 ! MULTICOLOUR ON
- 670 !
- 680 LDA #0 ! SET COLOURS AS YOU WISH
- 690 STA 53281
- 700 STA 53282
- 710 LDX #6
- 720 STX 53282
- 730 INX
- 740 STX 53283
- 750 LDA #0 ! LOAD A WITH SCREEN #
- 760 JSR EXPASCR
- 770 CLI
- 780 RTS
- 790 ! *****************************
- 800 !
- 810 ! ----------------------------------
- 820 ! THE ROUTINE BELOW PRINTS
- 830 ! A SINGLE BLOCK TO THE SCREEN
- 840 ! AT THE GIVEN X AND Y COORDS.
- 850 ! CALL THIS ROUTINE WITH:
- 860 ! A=BLOCK NUMBER
- 870 ! "XINIT" ANY "YINIT"
- 880 ! HOLDING THE RELEVANT COORDINATES.
- 890 !
- 900 ! ----------------------------------
- 910 EXPBLOCK !
- 920 !
- 930 !
- 940 STA BLOCKNUM
- 950 TAX
- 960 !
- 970 !
- 980 ! ! GET Y=BLOCK NUMBER*2
- 990 !
- 1000 ASL A ! SHIFT LEFT IE. *2
- 1010 TAY
- 1020 !
- 1030 ! GET THE COLOUR OF THIS BLOCK
- 1040 LDA COLBLOCK,X
- 1050 STA COLOUR
- 1060 !
- 1070 ! NOW WE NEED TO GET THE START
- 1080 ! ADDR. OF THIS BLOCK'S DEFINITION
- 1090 !
- 1100 ! TO DO THIS WE NEED TO GET :-
- 1110 ! (BLOCK NO.*25)+BLOCK BASE ADDR.
- 1120 ! THIS MAY TAKE MUCH PROCESSOR
- 1130 ! TIME AS "MULTIPLE-ADDITION"
- 1140 ! TECHNIQUES ARE REQUIRED.
- 1150 !
- 1160 ! INSTEAD I HAVE SET UP A 256-BYTE
- 1170 ! TABLE HOLDING EACH OF THE 128
- 1180 ! BLOCK ADDRESSES.
- 1190 ! TO INDEX A PARTICULAR BLOCK DEF.
- 1200 ! INDEX=BLOCK NO. *2
- 1210 !
- 1220 ! AS Y=BLOCK NO*2
- 1230 !
- 1240 !
- 1250 LDA BLOCKTABAD,Y ! GET LO BYTE
- 1260 STA BLOCKAD
- 1270 LDA BLOCKTABAD+1,Y ! HI BYTE
- 1280 STA BLOCKAD+1
- 1290 !
- 1300 ! SIMPLE ISN'T IT, NOW"?"
- 1310 !
- 1320 ! THIS TIME SAVING IS REQUIRED
- 1330 ! AS THIS ROUTINE IS CALLED 32
- 1340 ! TIMES FOR EACH SCREEN - YOU WILL
- 1350 ! NOTICE THE TIME DIFFERENCE
- 1360 ! IF THE ADDRESS WASN'T TABULATED!
- 1370 ! WE NEED TO BANG DATA ONTO THE
- 1380 ! SCREEN LIKE A BAT OUT OF HELL,
- 1390 ! SO IT'S WELL WORTH THE 256 BYTES!
- 1400 ! -------------------------------
- 1410 ! SUMMARY:-
- 1420 ! BLOCKAD HOLDS BLOCK/CHAR ADDR
- 1430 ! FOR BLOCK IN "BLOCKNUM"
- 1440 ! -------------------------------
- 1450 !
- 1460 ! NOW GET SCREENAD TO HOLD THE
- 1470 ! SCREEN ADDRESS FOR THE Y COORD.
- 1480 !
- 1490 ! IE. SO AS SCREENAD HOLDS THE
- 1500 ! SCREEN ADDRESS FOR WHEN X=0.
- 1510 !
- 1520 ! I AM EMPLOYING THE SAME
- 1530 ! "GET THE ADDRESS OUT OF THE
- 1540 ! TABLE[171]QUICK" METHOD AGAIN AS
- 1550 ! IT IS IN THE MAIN ROUTINE STILL!
- 1560 ! GET Y COORDINATE*2 FOR OFFSET
- 1570 ! IN THE SCREEN ADDRESS TABLE.
- 1580 !
- 1590 LDA YINIT
- 1600 ASL A
- 1610 TAY
- 1620 LDA SCREENTABLE,Y
- 1630 STA SCREENAD
- 1640 LDA SCREENTABLE+1,Y
- 1650 STA SCREENAD+1
- 1660 !
- 1670 !
- 1680 !
- 1690 !
- 1700 ! -----------------------------
- 1710 ! NOW SCREENAD=THE Y COORD ADDRESS
- 1720 ! OF THE SCREEN FOR X=0
- 1730 ! -----------------------------
- 1740 !
- 1750 LDA #0
- 1760 STA BLKREAD ! COUNT THROUGH 0-24
- 1770 ! CHARS. IN THIS BLOCK
- 1780 LDA #5
- 1790 STA YCOUNT ! HEIGHT OF BLOCK
- 1800 !
- 1810 DO1Y LDA XINIT ! EACH NEW Y COORD -
- 1820 ! GIVE THE X START
- 1830 ! INDEX ACROSS THE
- 1840 ! THE SCREEN IE.
- 1850 ! VALUE FROM 0-39.
- 1860 STA XCOORD
- 1870 LDY #5 ! WIDTH OF BLOCK
- 1880 STY XCOUNT
- 1890 !
- 1900 DO1X LDY BLKREAD ! INDEX (0-24)
- 1910 ! THROUGH BLOCK
- 1920 ! DEFINITION.
- 1930 !
- 1940 ! READ A CHAR. TO PRINT
- 1950 ! FROM THIS BLOCK'S BASE
- 1960 !
- 1970 READBLOCK LDA (BLOCKAD),Y
- 1980 !
- 1990 LDY XCOORD ! STORE ON SCREEN
- 2000 ! TAKING INTO ACCOUNT
- 2010 ! THE COLUMN INDEX
- 2020 !
- 2030 STA (SCREENAD),Y
- 2040 !
- 2050 ! CREATE THE COLOURMAP ADDRESS
- 2060 ! RELATIVE FROM THE SCREEN.
- 2070 !
- 2080 ! NOTE THAT IF A SCREEN ADDRESS
- 2090 ! IS BEING USED THAT IS >55296
- 2100 ! THEN THE LABEL DIFFERENCE
- 2110 ! WOULD NEED TO BE CHANGED TO:-
- 2120 ! DIFFERENCE=SCR-55296
- 2130 !
- 2140 ! AND THE "ADC" INSTRUCTIONS
- 2150 ! BELOW WOULD NEED TO BE CHANGED
- 2160 ! TO "SBC" - MAKING SURE THAT YOU
- 2170 ! SET CARRY (SEC) FIRST INSTEAD OF
- 2180 ! "CLC" - NUFF SAID!
- 2190 !
- 2200 CLC
- 2210 LDA SCREENAD
- 2220 ADC #<DIFFERENCE
- 2230 STA COLOURAD
- 2240 LDA SCREENAD+1
- 2250 ADC #>DIFFERENCE
- 2260 STA COLOURAD+1
- 2270 LDA COLOUR
- 2280 !
- 2290 ! Y STILL HOLDS COLUMN INDEX
- 2300 ! SO COLOUR IN THAT CHAR ON SCREEN!
- 2310 STA (COLOURAD),Y
- 2320 !
- 2330 INC XCOORD ! MOVE ALONG SCREEN
- 2340 ! COLUMN
- 2350 INC BLKREAD ! THROUGH 0-24 INDEX
- 2360 ! IN BLOCK
- 2370 !
- 2380 !
- 2390 DEC XCOUNT LOOP WIDTH
- 2400 BNE DO1X
- 2410 !
- 2420 !
- 2430 ! NOW MOVE DOWN ONE Y COORDINATE -
- 2440 ! JUST ADD 40 TO THE SCREEN ADDR.
- 2450 !
- 2460 CLC
- 2470 LDA SCREENAD
- 2480 ADC #40
- 2490 STA SCREENAD
- 2500 BCC OKE
- 2510 INC SCREENAD+1
- 2520 !
- 2530 OKE DEC YCOUNT ! LOOP HEIGHT
- 2540 BNE DO1Y
- 2550 RTS
- 2560 XCOORD BYT 0
- 2570 BLKREAD BYT 0
- 2580 XINIT BYT 0
- 2590 YINIT BYT 0
- 2600 BLOCKNUM BYT 0
- 2610 YCOUNT BYT 0
- 2620 XCOUNT BYT 0
- 2630 ! ------------------------------
- 2640 !
- 2650 ! THIS ROUTINE EXPANDS A COMPLETE
- 2660 ! SCREEN BY CALLING THE "EXPAND
- 2670 ! A BLOCK ROUTINE" FOR EACH OF THE
- 2680 ! 32 BLOCKS ON A SCREEN..
- 2690 !
- 2700 !IT IS CALLED WITH A=SCREEN NUMBER
- 2710 ! - SIMPLICITY IT'SELF FOR YOU!
- 2720 !
- 2730 ! ------------------------------
- 2740 EXPASCR !
- 2750 !
- 2760 ! RIGHT - WHAT WE MUST DO
- 2770 ! IS FIND THE SCREEN DATA ADDRESS.
- 2780 ! EACH DATA ADDRESS FOR A SCREEN
- 2790 ! IS 32 BYTES LONG - SO WE MUST
- 2800 ! GET (32*SCREEN)+BASE
- 2810 ! OF DATA ADDRESSES - OK...
- 2820 !
- 2830 LDX #0
- 2840 STA SAD
- 2850 STX SAD+1 ! INIT MULTIPLY
- 2860 !
- 2870 CLC
- 2880 ASL SAD
- 2890 ROL SAD+1 ! *2
- 2900 ASL SAD
- 2910 ROL SAD+1 ! *4
- 2920 ASL SAD
- 2930 ROL SAD+1 ! *8
- 2940 ASL SAD
- 2950 ROL SAD+1 ! *16
- 2960 ASL SAD
- 2970 ROL SAD+1 ! *32
- 2980 !
- 2990 ! NOW TO ADD IN THE BASE
- 3000 ! ADDRESS OF THE SCREEN DATA
- 3010 !
- 3020 CLC
- 3030 LDA SAD
- 3040 ADC #<SCREENDATA
- 3050 STA SAD
- 3060 LDA SAD+1
- 3070 ADC #>SCREENDATA
- 3080 STA SAD+1
- 3090 !
- 3100 ! --------------------------
- 3110 ! WICKED! - SCRAD/+1 HOLDS BASE
- 3120 ! ADDRESS FOR THE SCREEN - PHEW!
- 3130 ! ---------------------------
- 3140 !
- 3150 !
- 3160 STX XINIT ! X COORD ON SCREEN
- 3170 STX YINIT ! Y " " "
- 3180 STX BLOKC ! INDEX IN SCREEN [131]
- 3190 ! [164] [135] BLOCK NUMBERS
- 3200 BKA !
- 3210 LDY BLOKC
- 3220 LDA (SAD),Y ! [135] BLOCK IN
- 3230 ! THIS SCREEN
- 3240 !
- 3250 INC BLOKC ! [130] BLOCK IN SCREEN
- 3260 !
- 3270 ! BANG THAT BLOCK [145][164] THE SCREEN !
- 3280 JSR [189]BLOCK
- 3290 !
- 3300 LDA XINIT
- 3310 CLC
- 3320 ADC #5 ! START [130] BLOCK
- 3330 ! AL[145]G BY 5 CHARACTERS
- 3340 STA XINIT
- 3350 CMP #40 ! RIGHT[171]MOST COLUMN
- 3360 ! REACHED
- 3370 !
- 3380 BNE NOXREAC
- 3390 !
- 3400 ! [171][171][177] [139] X REACHED LAST COLUMN
- 3410 ! [167] RESET X [164] 0, [175] MOVE
- 3420 ! DOWN BY 5 Y CO[176]DINATES!!
- 3430 !
- 3440 LDA #0
- 3450 STA XINIT
- 3460 CLC
- 3470 LDA YINIT
- 3480 ADC #5 ! DOWN 5 CHARS(Y)
- 3490 STA YINIT
- 3500 !
- 3510 !
- 3520 CMP #20 ! CHECK FOR MAX Y COORD.
- 3530 ! (MUST BE A MULTIPLE OF 5
- 3540 ! - OR ELSE !!!!)
- 3550 !
- 3560 BEQ [142]
- 3570 NOXREAC JMP BKA
- 3580 !
- 3590 ! FINALLY THE WHOLE SCREEN HAS
- 3600 ! BEEN DISPLAYED [171] SIT BACK &
- 3610 ! ADMIRE YOUR W[176]K..........
- 3620 !
- 3630 [142] !
- 3640 RTS
- 3650 BLOKC BYT 0
- 3660 COLOUR BYT 0
- 3670 !
- 3680 !
- 3690 !THE ADDRESSES OF BLOCK DEFINITIONS
- 3700 ! (ALL 128 OF THEM!)
- 3710 !
- 3720 BLOCKTABAD !
- 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
- 3740 W[176] BB[170]250,BB[170]275,BB[170]300,BB[170]325
- 3750 W[176] BB[170]350,BB[170]375,BB[170]400,BB[170]425
- 3760 W[176] BB[170]450,BB[170]475,BB[170]500,BB[170]525
- 3770 W[176] BB[170]550,BB[170]575,BB[170]600,BB[170]625
- 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
- 3790 W[176] BB[170]900,BB[170]925,BB[170]950,BB[170]975,BB[170]1000,BB[170]1025
- 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
- 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
- 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
- 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
- 3840 W[176] BB[170]1850,BB[170]1875,BB[170]1900,BB[170]1925
- 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
- 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
- 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
- 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
- 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
- 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
- 3910 W[176] BB[170]3150,BB[170]3175
- 3920 !
- 3930 ! [175] THE SCREEN ADDRESSES.....
- 3940 !
- 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
- 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
- 3970 W[176] SC[170]760,SC[170]800
- 3980 !
- 3990 !
- 4000 ! IG'89
- 4010 !
- 4020 !
- 4030 !
-