BSUBS.S (18616B)
1 * bsubs 2 org = $7200 3 lst off 4 *------------------------------- 5 * 6 * B U I L D E R S U B S 7 * 8 *------------------------------- 9 org org 10 11 JMP DBLHGR 12 JMP DBLDRAW 13 JMP MOVEBLOK 14 JMP SWSINGLE 15 JMP SWDOUBLE 16 17 jmp SPECIALK 18 jmp BCALCBLUE 19 jmp TOPEDGE 20 jmp BOTEDGE 21 jmp LEFTEDGE 22 23 jmp RTEDGE 24 jmp PRBLOKNO 25 jmp PRSCRNUM 26 jmp MENUSPECIAL 27 jmp DRAWBETHSYM 28 29 jmp INVBETHSYM 30 jmp DRAWALLSYMB 31 jmp STOREMENU 32 jmp DoDblCls 33 jmp DoDblLay 34 35 jmp DoDblFast 36 jmp DoDblSave 37 jmp DoDblWipe 38 jmp DoDblPrint 39 jmp DoDblImseek 40 41 jmp PAGEFLIP 42 jmp INPUT 43 jmp DBLPEEL 44 jmp RETRIEVEMENU 45 jmp MOVESTUFF 46 47 jmp DoDblOra 48 jmp COPYAUXSCRN 49 jmp DRAWMENUSYM 50 jmp UNINDEX 51 jmp SUPERGUARDS 52 53 jmp INITINPUT 54 jmp DRAWFLASKNO 55 jmp PRGDPROG 56 57 *------------------------------- 58 put eq 59 put buildereq 60 put movedata 61 62 *------------------------------- 63 * Local vars 64 65 dum locals 66 67 rowno ds 1 68 yindex ds 1 69 colno ds 1 70 bitmask ds 1 71 temp ds 1 72 73 dend 74 75 *------------------------------- 76 * Key equates 77 78 SHIFT = $20 79 CTRL = $60 80 81 kleft = "h"-CTRL 82 kright = "u"-CTRL 83 kup = "k"-CTRL 84 kdown = "j"-CTRL 85 86 kbtn0 = " " 87 kbtn1 = RETURN 88 89 *------------------------------- 90 arrow = 3 91 blockn = 1 92 93 bluediff = BLUETYPE-bLINDEX 94 95 *------------------------------- 96 * EDTABLE shapes 97 98 ibox1 = 1 99 iwipe = 4 100 uparr = 5 101 dnarr = 6 102 lftarr = 7 103 rtarr = 8 104 digits = 9 105 106 kid = $13 107 eye = $14 108 guard = $2d 109 110 bethmask1 = $15 111 bethmask2 = $16 112 113 bethsyms hex 17,18,19,1a,1b,1c,1d,00 114 hex 1e,1f,20,21,22,23,24,00 115 hex 25,26,27,28,29,2a,2b,00 116 117 *------------------------------- 118 * initial states 119 120 initials db 0 121 db 48*4 ;1: gate up 122 db 0 ;2: gate down 123 124 *------------------------------ 125 * 126 * D B L H G R 127 * 128 * Clear both double hi-res pages and display page 2 129 * Also clear lo-res page 1 130 * 131 *------------------------------- 132 DBLHGR 133 STA $C00C ;80COL off 134 STA $C000 ;80STORE off 135 STA $C07E ;IOUDIS on 136 137 lda #0 138 JSR lrcls ;Clear lo-res page 1 to black 139 140 LDA $C054 ;Page 1 141 LDA $C052 ;MIXED off 142 LDA $C056 ;HIRES off 143 LDA $C050 ;TEXT off 144 145 LDA #0 146 STA PAGE 147 148 jsr DoDblCls 149 150 LDA $C057 ;HIRES on 151 STA $C00D ;80COL on 152 STA $C05E ;DHIRES on 153 154 LDA #$20 155 STA PAGE 156 157 jsr DoDblCls ;Clear hires p.2 158 159 jsr zeropeels ;zero peel buffers 160 161 lda #0 162 sta TOPCUT 163 164 rts 165 166 *------------------------------- 167 * 168 * M O V E B L O C K 169 * 170 * Move block (or pointer) from where it was 2 frames 171 * ago to where BLOCKX and BLOCKY say it is now 172 * 173 *------------------------------- 174 MOVEBLOK 175 jsr DBLPEEL ;peel off old block or pointer 176 ;(using peel buffer we set up 2 frames ago) 177 178 jsr DZEROPEEL ;zero just-used peel buffer 179 180 jsr DRAWPTR ;draw new block or pointer 181 182 ]rts rts 183 184 *------------------------------- 185 * 186 * D Z E R O P E E L 187 * 188 * Zero peel buffer for whichever page we're on 189 * 190 *------------------------------- 191 DZEROPEEL 192 lda PAGE 193 beq :page1 194 195 lda #0 196 sta peelX+maxpeel 197 198 lda #dpeelbuf2 199 sta PEELBUF 200 lda #>dpeelbuf2 201 sta PEELBUF+1 202 rts 203 204 :page1 sta peelX 205 206 lda #dpeelbuf1 207 sta PEELBUF 208 lda #>dpeelbuf1 209 sta PEELBUF+1 210 rts 211 212 *------------------------------- 213 * 214 * D B L D R A W P T R 215 * 216 * Draw block or pointer in current posn (BLOCKX,BLOCKY) 217 * 218 *------------------------------- 219 DRAWPTR 220 221 * "AND" blockmask 222 223 LDA BLOCKX 224 STA XCO 225 LDA BLOCKX+1 226 STA OFFSET 227 228 LDA BLOCKY 229 STA YCO 230 231 LDA CURSOR ;1=block, 3=arrow 232 CLC 233 ADC #1 ;MASK 234 STA IMAGE 235 236 LDA #0 237 STA OPACITY ;"AND" 238 239 jsr dblsetup ;set up for dbllay 240 241 * Save underlayer in peel buffer 242 243 jsr DoDblSave 244 245 jsr addpeel ;in grafix 246 247 * Lay down image 248 249 jsr DoDblLay 250 251 * "OR" block 252 253 LDA BLOCKX 254 STA XCO 255 LDA BLOCKX+1 256 STA OFFSET 257 258 LDA BLOCKY 259 STA YCO 260 261 LDA CURSOR 262 STA IMAGE 263 264 LDA #1 265 STA OPACITY ;"OR" 266 267 jsr DBLDRAW 268 269 lda CURSOR 270 cmp #1 ;block? 271 bne ]rts 272 273 LDA BLOCKX 274 STA XCO 275 LDA BLOCKX+1 276 STA OFFSET 277 LDA BLOCKY 278 STA YCO 279 280 jmp prblokno ;print block # 281 282 *------------------------------- 283 * 284 * D B L P E E L 285 * 286 * "Peel off" images laid down on this page 287 * 288 *------------------------------- 289 DBLPEEL 290 ldx PAGE 291 beq :1 292 ldx #maxpeel 293 :1 stx :sm+1 294 295 lda peelX,x ;# images in peel list 296 beq :rts 297 298 :loop pha 299 300 clc 301 :sm adc #0 ;0 or maxpeel 302 tax 303 304 lda peelIMGL,x 305 sta IMAGE 306 307 lda peelIMGH,x 308 sta IMAGE+1 309 310 lda peelX,x 311 sta XCO 312 313 lda peelY,x 314 sta YCO 315 316 lda #sta 317 sta OPACITY 318 319 jsr DoDblFast 320 321 pla 322 sec 323 sbc #1 324 bne :loop 325 326 :rts 327 ]rts rts 328 329 *------------------------------- 330 * 331 * P R S C R N U M 332 * 333 * print screen # in u.l. corner 334 * (single hi-res) 335 * 336 *------------------------------- 337 PRSCRNUM 338 lda shownums 339 beq ]rts 340 341 lda #10 342 sta YCO 343 lda #0 344 sta XCO 345 sta OFFSET 346 347 ldx number ;1-MAXBLOX 348 lda digit1,x 349 jsr sprint 350 351 ldx number 352 lda digit2,x 353 jmp sprint 354 355 *------------------------------- 356 * print guard prog # in lower left 357 358 PRGDPROG 359 lda #190 360 sta YCO 361 lda #0 362 sta XCO 363 sta OFFSET 364 ldx number 365 lda digit2,x 366 jmp sprint 367 368 *------------------------------- 369 * 370 * S I N G L E H R P R I N T 371 * 372 * Single hires print 373 * In: A = character (0-9 or space) 374 * 375 *------------------------------- 376 sprint 377 cmp #" " 378 beq :rts 379 sec 380 sbc #"0" 381 sta addr 382 clc 383 adc #digits 384 sta IMAGE 385 386 lda #0 387 sta OPACITY 388 jsr genmaskor 389 390 ldx addr 391 lda OFFSET ;advance cursor 392 clc 393 adc chrbits,x 394 sta OFFSET 395 :rts 396 ]rts rts 397 398 *------------------------------- 399 * 400 * P R I N T B L O C K N O 401 * 402 * print block # on face 403 * (double hi-res) 404 * 405 *------------------------------- 406 PRBLOKNO 407 lda shownums 408 beq ]rts 409 410 lda XCO 411 clc 412 adc #5 413 sta charx 414 415 lda OFFSET 416 adc #0 417 sta charx+1 418 419 lda YCO 420 clc 421 adc #7 422 sta chary 423 424 jsr cvtx 425 426 ldx number ;1-MAXBLOX 427 lda digit1,x 428 jsr print 429 ldx number 430 lda digit2,x 431 jmp print 432 433 *------------------------------- 434 digit2 435 asc "0123456789012345678901234" 436 digit1 437 asc " 111111111122222" 438 chrbits 439 db 6,4,6,6,6,6,6,6,6,6 440 441 *------------------------------- 442 * 443 * D B L S E T U P 444 * 445 * In: IMAGE (image #) 446 * XCO/OFFSET (2-byte X-coord, 0-559) 447 * YCO (0-191) 448 * OPACITY (0-2) 449 * ("IXYO) 450 * 451 *------------------------------- 452 DBLDRAW jsr dblsetup 453 jmp DoDblLay 454 455 *------------------------------- 456 dblsetup 457 lda #dblimage 458 sta TABLE 459 lda #>dblimage 460 sta TABLE+1 461 462 jsr DoDblImseek ;setup starting addr of img table 463 jmp cvtx ;convert xco to byte & offset 464 465 *------------------------------- 466 * 467 * S W S I N G L E 468 * 469 * Switch from double to single hi-res 470 * 471 *------------------------------- 472 SWSINGLE 473 STA $C00C ;80COL off 474 STA $C05F ;DHIRES off 475 rts 476 477 *------------------------------- 478 * 479 * S W D O U B L E 480 * 481 * Switch from single to double hi-res 482 * 483 *------------------------------- 484 SWDOUBLE 485 STA $C00D ;80COL on 486 STA $C05E ;DHIRES on 487 ]rts rts 488 489 *------------------------------- 490 * 491 * S P E C I A L K E Y S 492 * 493 * In: ASCII code in A-reg, hibit set 494 * 495 *------------------------------- 496 497 ctrl = $60 498 shift = $20 499 500 ksoundsw = "s" 501 knum = "n" 502 503 * development section 504 505 krestart = "r"-ctrl 506 kreboot = "z"-ctrl 507 508 *------------------------------- 509 SPECIALK 510 lda keypress 511 jsr debugkeys 512 513 lda keypress 514 515 cmp #krestart 516 bne :0 517 jmp restartbldr 518 519 :0 cmp #kreboot 520 bne :1 521 522 jsr saveblue ;to aux 523 jmp reboot 524 525 :1 526 *------------------------------- 527 :cont 528 cmp #ksoundsw-ctrl 529 beq soundsw 530 531 cmp #knum-ctrl 532 beq numsw 533 534 :2 535 ]rts rts 536 537 *------------------------------- 538 soundsw ;lda sound 539 ;eor #$ff 540 ;sta sound 541 jmp gtone 542 543 numsw lda shownums 544 eor #1 545 sta shownums 546 lda #1 547 sta setupflg 548 ]rts rts 549 550 *------------------------------- 551 * INIT INPUT 552 553 INITINPUT 554 555 lda $c010 556 557 jsr setcenter 558 559 jsr controller 560 561 lda joyX 562 beq :jok 563 lda joyY 564 beq :jok 565 566 lda #0 ;If either jstk axis is centered, 567 sta joyon ;assume a joystick is connected-- 568 ;else default to kbd-only mode 569 :jok lda #0 570 sta jcount 571 572 rts 573 574 *------------------------------- 575 * 576 * M E N U S P E C I A L 577 * 578 * Superimpose special stuff on b.g. 579 * 580 * If this is menu screen, draw special symbols; 581 * if not, draw flask #s; 582 * if links are shown, draw beth rectangles 583 * 584 *------------------------------- 585 MENUSPECIAL 586 ; lda inmenu 587 ; ora linkmode 588 ; beq ]rts ;neither special case 589 lda SCRNUM 590 jsr bcalcblue 591 592 ldy #2 ;start at bottom 593 594 :row sty rowno 595 596 lda BlockBot+1,y 597 sta loy 598 599 lda Mult10,y 600 sta yindex 601 602 lda #0 603 sta colno 604 605 :loop asl 606 asl 607 sta XCO 608 609 ldy yindex 610 lda (bLinkIndex),y 611 sta objspec 612 613 lda (BlueType),y 614 and #idmask 615 sta objid 616 617 jsr DRAWFLASKNO 618 619 jsr DRAWALLSYMB 620 621 lda inmenu 622 beq :skip 623 624 lda objspec 625 beq :skip 626 bmi :skip 627 tax ;valid codes: 1-127 628 629 lda loy 630 sta YCO 631 632 lda #0 633 sta OPACITY ;don't mirror 634 635 jsr DRAWMENUSYM 636 :skip 637 inc yindex 638 inc colno 639 640 lda colno 641 cmp #10 642 bcc :loop 643 644 :nextln ldy rowno 645 beq :done 646 dey 647 jmp :row 648 649 :done rts 650 651 *------------------------------- 652 * 653 * S U P E R G U A R D S 654 * 655 * Superimpose guard figures on screen 656 * for each square with secmask marked 657 * 658 *------------------------------- 659 SUPERGUARDS 660 lda SCRNUM 661 jsr bcalcblue 662 663 ldy #2 ;start at bottom 664 665 :row sty rowno 666 667 lda BlockBot+1,y 668 sta loy 669 670 lda Mult10,y 671 sta yindex 672 673 lda #0 674 sta colno 675 676 :loop asl 677 asl 678 sta XCO 679 680 ldy yindex 681 lda (BlueType),y 682 and #secmask 683 beq :skip 684 685 lda loy 686 sta YCO 687 688 lda #0 689 sta OPACITY ;don't mirror 690 691 ldx #3 ;guard 692 jsr DRAWMENUSYM 693 :skip 694 inc yindex 695 inc colno 696 697 lda colno 698 cmp #10 699 bcc :loop 700 701 :nextln ldy rowno 702 beq :done 703 dey 704 jmp :row 705 706 :done rts 707 708 *------------------------------- 709 * 710 * B C A L C B L U E 711 * 712 * In: A = screen # (1-24); NOT 0 713 * 714 * Out: BlueType, BlueSpec, bLinkIndex 715 * 716 *------------------------------- 717 BCALCBLUE 718 jsr calcblue ;returns BlueType, BlueSpec 719 720 * Now get bLinkIndex 721 722 lda inmenu 723 bne :calcmenu 724 725 lda BlueType 726 sec 727 sbc #bluediff 728 sta bLinkIndex 729 730 lda BlueType+1 731 sbc #>bluediff 732 sta bLinkIndex+1 733 734 rts 735 736 :calcmenu 737 lda #menubspec 738 sta bLinkIndex 739 740 lda #>menubspec 741 sta bLinkIndex+1 742 743 ]rts rts 744 745 ]bug jmp gtone 746 747 *------------------------------- 748 * Draw flask # (if object is a flask) 749 750 flaskbits hex 00,01,02,04,08,10,20,40 751 752 DRAWFLASKNO 753 lda objid 754 cmp #flask 755 bne ]rts 756 757 lda linkmode 758 bne ]rts 759 lda inmenu 760 bne ]rts 761 762 lda (BlueSpec),y 763 tax 764 cpx #8 765 bcs ]rts 766 767 * Note--for convenience we'll use the beth routine 768 769 lda #0 770 sta linkbits 771 sta linkbits+1 772 773 lda flaskbits,x 774 sta linkbits+2 775 776 jmp drawallsymb1 777 778 *------------------------------- 779 * 780 * D R A W A L L S Y M B 781 * 782 * Draw all symbols in a beth rectangle 783 * 784 * In: XCO, YCO, objspec 785 * 786 *------------------------------- 787 DRAWALLSYMB 788 lda linkmode 789 beq ]rts 790 lda inmenu 791 bne ]rts 792 793 ldx objspec ;link index 794 bmi ]rts ;ff=unlinkable object 795 ;index range is 0-127 796 lda bLINK4,x 797 bpl ]bug ;hibit should be set 798 799 lda bLINK1,x 800 sta linkbits 801 lda bLINK2,x 802 sta linkbits+1 803 lda bLINK3,x 804 sta linkbits+2 805 806 * Three columns, L-R; take each one B-T 807 808 drawallsymb1 809 lda #0 810 sta bethx ;0-2 811 ;XCO already set 812 :nextcol asl 813 sta OFFSET ;0,2,4 814 815 lda loy 816 sta YCO 817 818 lda #0 819 sta bethy ;0-7 820 821 lda #1 822 :loop sta bitmask 823 ldx bethx 824 and linkbits,x 825 beq :nextsym 826 827 jsr drawbethsym1 828 829 :nextsym lda YCO 830 sec 831 sbc #8 832 sta YCO 833 834 inc bethy 835 lda bitmask 836 asl 837 bne :loop ;cycle through all 8 bits 838 839 inc XCO 840 841 inc bethx 842 lda bethx 843 cmp #3 844 bcc :nextcol 845 846 :done lda #0 847 sta OFFSET 848 849 :rts rts 850 851 *------------------------------- 852 * 853 * D R A W B E T H S Y M 854 * 855 * Draw a symbol 856 * 857 * In: XCO/OFFSET, YCO, bethposn 858 * 859 * DRAWBETHSYM1: no layrsave 860 * 861 *------------------------------- 862 drawbethsym1 863 jsr setupbmask 864 jsr lay 865 866 jmp drawbrest 867 868 DRAWBETHSYM 869 jsr setupbmask 870 jsr layrsave 871 jsr addpeel 872 jsr lay 873 874 jmp drawbrest 875 876 *------------------------------- 877 setupbmask 878 jsr seted 879 880 * 1) AND mask1 881 882 lda #bethmask1 883 sta IMAGE 884 885 lda #and 886 sta OPACITY 887 888 ]rts rts 889 890 *------------------------------- 891 drawbrest 892 893 * 2) OR symbol 894 895 jsr getbsym 896 beq ]rts 897 sta IMAGE 898 899 lda #ora 900 sta OPACITY 901 902 jmp lay 903 904 *------------------------------- 905 * 906 * G E T B E T H S Y M 907 * 908 * in: bethx, bethy 909 * out: A =symbol # 910 * 911 *------------------------------- 912 getbsym lda bethx 913 asl 914 asl 915 asl ;x8 916 clc 917 adc bethy 918 tax 919 920 lda bethsyms,x 921 rts 922 923 *------------------------------- 924 * 925 * I N V E R T B E T H S Y M 926 * 927 *------------------------------- 928 INVBETHSYM 929 jsr DRAWBETHSYM 930 931 * (3) EOR mask2 932 933 lda #bethmask2 934 sta IMAGE 935 936 lda #eor 937 sta OPACITY 938 939 jmp lay 940 941 *------------------------------- 942 * 943 * E D G E A R R O W S 944 * 945 *------------------------------- 946 * IXYO: image,xco,offset,yco,[opacity] 947 948 te db #uparr,19,3,7 949 be db #dnarr,19,3,191 950 le db #lftarr,0,0,98 951 re db #rtarr,39,0,98 952 953 TOPEDGE lda #te 954 ldx #>te 955 bne drawej 956 957 BOTEDGE lda #be 958 ldx #>be 959 bne drawej 960 961 LEFTEDGE lda #le 962 ldx #>le 963 bne drawej 964 965 RTEDGE lda #re 966 ldx #>re 967 968 *------------------------------- 969 * 970 * D R A W E J 971 * 972 *------------------------------- 973 drawej sta addr 974 stx addr+1 975 976 ldy #0 977 lda (addr),y 978 sta IMAGE 979 980 iny 981 lda (addr),y 982 sta XCO 983 984 iny 985 lda (addr),y 986 sta OFFSET 987 988 iny 989 lda (addr),y 990 sta YCO 991 992 * general mask-or sequence 993 994 genmaskor 995 jsr seted 996 997 lda OPACITY 998 and #$80 ;preserve hi bit 999 pha 1000 1001 ora #mask 1002 sta OPACITY 1003 jsr lay 1004 1005 pla 1006 ora #ora 1007 sta OPACITY 1008 jmp lay 1009 1010 *------------------------------- 1011 seted 1012 lda #0 1013 sta TOPCUT 1014 sta LEFTCUT 1015 lda #40 1016 sta RIGHTCUT 1017 lda #192 1018 sta BOTCUT 1019 1020 lda #edtable 1021 sta TABLE 1022 lda #>edtable 1023 sta TABLE+1 1024 1025 lda #2 1026 sta BANK 1027 rts 1028 *------------------------------- 1029 * 1030 * D R A W M E N U S Y M 1031 * 1032 * draw menu symbol 1033 * 1034 * In: OPACITY (hi bit) 1035 * XCO, YCO; x = symbol # 1036 * 1 = kid 1037 * 2 = eye 1038 * 3 = guard 1039 * 1040 *------------------------------- 1041 msymi db 0,kid,eye,guard 1042 msymx db 0,2,0,0 1043 msymos db 0,4,0,2 1044 msymy db 0,-10,-20,-10 1045 1046 msymxm db 0,5,0,7 1047 msymosm db 0,0,0,4 1048 1049 DRAWMENUSYM 1050 lda msymi,x 1051 sta IMAGE 1052 1053 lda msymy,x 1054 clc 1055 adc YCO 1056 sta YCO 1057 1058 lda OPACITY 1059 bmi :mirror 1060 1061 lda msymos,x 1062 sta OFFSET 1063 1064 lda msymx,x 1065 :1 clc 1066 adc XCO 1067 sta XCO 1068 1069 jmp genmaskor 1070 1071 :mirror 1072 lda msymosm,x 1073 sta OFFSET 1074 1075 lda msymxm,x 1076 jmp :1 1077 1078 *------------------------------- 1079 * 1080 * S T O R E M E N U 1081 * 1082 * Draw menu screen #0 on page 2 1083 * & store it in "menuscrn" buffer 1084 * for fast retrieval later 1085 * 1086 *------------------------------- 1087 STOREMENU 1088 lda PAGE 1089 pha 1090 lda SCRNUM 1091 pha 1092 1093 jsr noneighs 1094 1095 lda #$20 1096 sta PAGE 1097 1098 lda #0 1099 sta SCRNUM 1100 1101 lda #1 1102 sta inmenu 1103 1104 jsr zeropeels 1105 jsr zerolsts 1106 jsr sure 1107 jsr drawall 1108 1109 jsr menuspecial 1110 1111 lda #0 1112 sta inmenu ;! 1113 ;and store it 1114 lda #>menuscrn 1115 sta IMAGE+1 1116 lda #$40 1117 sta IMAGE 1118 jsr copy2000ma ;main to aux 1119 1120 pla 1121 sta SCRNUM 1122 pla 1123 sta PAGE 1124 rts 1125 1126 *------------------------------- 1127 * 1128 * R E T R I E V E M E N U 1129 * 1130 * Copy onto both hires scrns 1131 * 1132 *------------------------------- 1133 RETRIEVEMENU 1134 lda #$20 ;page1 1135 jsr :copy 1136 1137 lda #$40 ;page2 1138 :copy sta IMAGE+1 1139 1140 lda #>menuscrn 1141 sta IMAGE 1142 1143 jmp copy2000am ;aux to main 1144 1145 *------------------------------- 1146 * 1147 * D O D B L R O U T I N E S 1148 * 1149 * Dblhires routines sit in aux l.c. 1150 * 1151 *------------------------------- 1152 DoDblCls 1153 jmp dblcls 1154 1155 DoDblLay 1156 jmp dbllay 1157 1158 DoDblFast 1159 jmp dblfast 1160 1161 DoDblSave 1162 jmp dblsave 1163 1164 DoDblWipe 1165 jmp dblwipe 1166 1167 DoDblPrint 1168 jmp dblprint 1169 1170 DoDblImseek 1171 jmp dblimseek 1172 1173 DoDblOra 1174 jmp dblora 1175 1176 *------------------------------- 1177 * 1178 * P A G E F L I P 1179 * 1180 *------------------------------- 1181 PAGEFLIP 1182 lda PAGE 1183 bne :1 1184 1185 lda #$20 1186 sta PAGE 1187 lda $C054 ;show page 1 1188 rts 1189 1190 :1 lda #0 1191 sta PAGE 1192 lda $C055 ;show page 2 1193 rts 1194 1195 *------------------------------- 1196 * 1197 * M O V E S T U F F 1198 * 1199 * Called from BUILDER 1200 * Enter & exit w/ALTZP on 1201 * 1202 *------------------------------- 1203 MOVESTUFF 1204 1205 * We need to copy HRTABLES from main l.c. to 1206 * aux l.c.--first copy it into loading area 1207 1208 sta $c008 ;ALTZP off 1209 1210 lda #$20 1211 ldx #$e0 1212 ldy #$ee 1213 jsr movemem 1214 1215 sta $c009 ;ALTZP on 1216 1217 * Now move stuff from loading area to aux l.c. 1218 * (MASTER couldn't do this from main l.c.) 1219 1220 lda #$d0 1221 ldx #$40 1222 ldy #$50 1223 jsr movemem ;aux bank 2 1224 1225 lda #$e0 1226 ldx #$20 1227 ldy #$40 1228 jmp movemem ;the rest 1229 1230 *------------------------------- 1231 * 1232 * I N P U T 1233 * 1234 * Monitor keyboard and joystick for user commands 1235 * and return command # in A (0 = nothing) 1236 * Also return keypress, keydown 1237 * 1238 *------------------------------- 1239 INPUT 1240 lda $C000 1241 sta keypress 1242 1243 lda $C010 1244 sta keydown 1245 1246 lda keypress 1247 bpl :nocmd ;no key down 1248 1249 jsr specialk first check for special keys 1250 1251 * Keyboard control 1252 1253 lda keypress 1254 1255 cmp #kleft 1256 BNE :3 1257 lda #Cleft 1258 rts 1259 1260 :3 CMP #kright 1261 BNE :4 1262 lda #Cright 1263 rts 1264 1265 :4 CMP #kup 1266 BNE :5 1267 lda #Cup 1268 rts 1269 1270 :5 CMP #kdown 1271 BNE :nomove 1272 lda #Cdown 1273 rts 1274 1275 :nomove cmp #kbtn0 1276 bne :6 1277 lda #Cbtn0 1278 rts 1279 1280 :6 cmp #kbtn1 1281 bne :7 1282 lda #Cbtn1 1283 rts 1284 1285 :7 1286 :nocmd 1287 lda joyon ;joystick mode? 1288 bne joystick ;yes 1289 1290 lda #0 ;no cmd 1291 ]rts rts 1292 1293 *------------------------------- 1294 * 1295 * J O Y S T I C K 1296 * 1297 * Joystick input 1298 * 1299 *------------------------------- 1300 joystick 1301 jsr controller 1302 jsr buttons 1303 jsr getselect 1304 1305 lda JSTKX 1306 bpl :1 1307 1308 lda #1 1309 cmp jlast ;Same direction as last move? 1310 bne :jleft ;No--set timer & go ahead 1311 1312 lda jcount ;Yes--is time up yet? 1313 beq :jleft1 ;Yes--go ahead 1314 dec jcount ;No--keep waiting 1315 lda #0 1316 rts 1317 1318 :jleft jsr jmove ;set timer 1319 lda #Cleft 1320 rts 1321 1322 :jleft1 jsr jrepeat ;set repeat timer 1323 lda #Cleft 1324 rts 1325 1326 :1 beq :2 1327 1328 lda #2 ;"right" 1329 cmp jlast 1330 bne :jright 1331 1332 lda jcount 1333 beq :jright1 1334 dec jcount 1335 lda #0 1336 rts 1337 1338 :jright jsr jmove 1339 lda #Cright 1340 rts 1341 1342 :jright1 jsr jrepeat 1343 lda #Cright 1344 rts 1345 1346 :2 lda JSTKY 1347 bpl :3 1348 1349 lda #3 1350 cmp jlast 1351 bne :jup 1352 1353 lda jcount 1354 beq :jup1 1355 dec jcount 1356 lda #0 1357 rts 1358 1359 :jup jsr jmove 1360 lda #Cup 1361 rts 1362 1363 :jup1 jsr jrepeat 1364 lda #Cup 1365 rts 1366 1367 :3 beq :nomove 1368 1369 lda #4 1370 cmp jlast 1371 bne :jdown 1372 1373 lda jcount 1374 beq :jdown1 1375 dec jcount 1376 lda #0 1377 rts 1378 1379 :jdown jsr jmove 1380 lda #Cdown 1381 rts 1382 1383 :jdown1 jsr jrepeat 1384 lda #Cdown 1385 rts 1386 1387 :nomove lda #0 1388 sta jlast 1389 1390 lda BUTT0 1391 bpl :nobtn0 1392 1393 lda #Cbtn0 1394 rts 1395 1396 :nobtn0 lda BUTT1 1397 bpl :nobtn1 1398 1399 lda #Cbtn1 1400 rts 1401 :nobtn1 1402 1403 :nocmd lda #0 1404 rts 1405 1406 *------------------------------- 1407 * 1408 * J M O V E 1409 * 1410 *------------------------------- 1411 jmove sta jlast 1412 1413 lda setupflg 1414 bne :done ;no delay (scroll's slow enough) 1415 1416 lda CURSOR 1417 cmp #blockn 1418 beq :block ;slight delay 1419 1420 :pointer lda #10 1421 bne :gotit 1422 1423 :block lda #5 1424 1425 :gotit sta jcount 1426 1427 :done rts 1428 1429 1430 jrepeat lda setupflg 1431 bne :done ;no delay 1432 1433 lda CURSOR 1434 cmp #blockn 1435 beq :done 1436 1437 lda #3 1438 sta jcount 1439 1440 :done rts 1441 1442 *------------------------------- 1443 * no neighbors (for menu) 1444 1445 noneighs 1446 lda #0 1447 sta scrnLeft 1448 sta scrnRight 1449 sta scrnAbove 1450 sta scrnBelow 1451 sta scrnAboveL 1452 sta scrnBelowL 1453 sta scrnAboveR 1454 sta scrnBelowR 1455 rts 1456 1457 *------------------------------- 1458 * 1459 * C O P Y A U X S C R N 1460 * 1461 * Copy one aux hires page to the other 1462 * 1463 * In: PAGE = dest scrn (00/20) 1464 * 1465 * (Use in conjunction with "copyscrn" in grafix 1466 * to copy dblhires screen) 1467 * 1468 *------------------------------- 1469 COPYAUXSCRN 1470 lda PAGE 1471 clc 1472 adc #$20 1473 sta IMAGE+1 ;dest addr 1474 1475 eor #$60 1476 sta IMAGE ;org addr 1477 1478 jmp copyaux2000 1479 1480 1481 *------------------------------- 1482 * 1483 * C O P Y A U X 2 0 0 0 1484 * 1485 * Copy $2000 bytes within auxmem 1486 * 1487 * In: IMAGE+1 = dest scrn, IMAGE = org scrn 1488 * (use hi byte of actual memory address) 1489 * 1490 *------------------------------- 1491 copyaux2000 1492 lda IMAGE+1 1493 sta :dst+2 1494 lda IMAGE 1495 sta :org+2 1496 1497 ldx #$20 1498 1499 ldy #0 1500 :loop 1501 :org lda $2000,y 1502 :dst sta $4000,y 1503 1504 iny 1505 bne :loop 1506 1507 inc :org+2 1508 inc :dst+2 1509 1510 dex 1511 bne :loop 1512 1513 ]rts rts 1514 1515 *------------------------------- 1516 * 1517 * U N I N D E X 1518 * 1519 * In: A = block index (0-29) 1520 * Out: A = tempblockx, X = tempblocky 1521 * 1522 *------------------------------- 1523 UNINDEX 1524 ldx #0 1525 :loop cmp #10 1526 bcc ]rts 1527 sec 1528 sbc #10 1529 inx 1530 bne :loop 1531 ;A = blockx, X = blocky 1532 ]rts rts 1533 1534 *------------------------------- 1535 lst 1536 ds 1 1537 usr $a9,23,$000,*-org 1538 lst off