GAMEBG.S (16050B)
1 * gamebg 2 ThreeFive = 1 3 EditorDisk = 0 4 org = $4c00 5 tr on 6 lst off 7 lstdo off 8 *------------------------------- 9 * 10 * PRINCE OF PERSIA 11 * Copyright 1989 Jordan Mechner 12 * 13 *------------------------------- 14 org org 15 16 jmp UPDATEMETERS 17 jmp DRAWKIDMETER 18 jmp DRAWSWORD 19 jmp DRAWKID 20 jmp DRAWSHAD 21 22 jmp SETUPFLAME 23 jmp CONTINUEMSG 24 jmp ADDCHAROBJ 25 jmp SETOBJINDX 26 jmp PRINTLEVEL 27 28 jmp DRAWOPPMETER 29 jmp FLIPDISKMSG 30 jmp TIMELEFTMSG 31 jmp DRAWGUARD 32 jmp DRAWGUARD 33 34 jmp SETUPFLASK 35 jmp SETUPCOMIX 36 jmp PSETUPFLAME 37 jmp DRAWPOST 38 jmp DRAWGLASS 39 40 jmp INITLAY 41 jmp TWINKLE 42 jmp FLOW 43 jmp PMASK 44 jmp YELLOW 45 46 jmp SETRECHECK0 47 jmp RECHECKYEL 48 ds 3 49 ds 3 50 ds 3 51 52 *------------------------------- 53 lst 54 put eq 55 lst 56 put gameeq 57 lst off 58 59 *------------------------------- 60 * 61 * 2nd level copy protection 62 * signature check routine 63 * 64 *------------------------------- 65 do ThreeFive 66 YELLOW lda #$80 67 sta yellowflag 68 rts 69 70 else 71 put ryellow1 72 fin 73 74 *------------------------------- 75 lst 76 put movedata 77 lst off 78 79 *------------------------------- 80 dum locals 81 82 xsave ds 1 83 addr ds 2 84 temp ds 1 85 86 dend 87 88 tempsave ds $10 89 90 *------------------------------- 91 * Strength meters 92 93 KidStrX db 00,01,02,03,04,05,06,08,09,10,11,12 94 KidStrOFF db 00,01,02,03,04,05,06,00,01,02,03,04 95 96 OppStrX db 39,38,37,36,35,34,32,31,30,29,28,27 97 OppStrOFF db 05,04,03,02,01,00,06,05,04,03,02,01 98 99 bullet = $88 ;in bgtable2 100 blank = $8c 101 bline hex 89,8a,8b 102 103 *------------------------------- 104 * Post in Princess's room 105 106 postx = 31 107 posty = 152 108 postimg = $c ;chtable6 109 110 *------------------------------- 111 * Stars outside Princess's window 112 113 starx = 2 114 stary hex 62,65,6d,72 115 stari hex 2a,2b,2b,2a ;chtable6 116 117 *------------------------------- 118 * Hourglass 119 120 glassx = 19 121 glassy = 151 122 glassimg hex 15,0d,0e,0f,10,11,12,13,14 ;chtable6 123 sandht db 0,1,2,3,4,5,6,7 124 125 flowx = glassx+1 126 flowy = glassy-2 127 flowimg hex 16,17,18 ;chtable6 128 129 *------------------------------- 130 * Masks for Princess's face & hair 131 132 pmaskdx hex 00,00 133 pmaskdy db -4,-33 134 pmaski hex 2c,22 135 136 *------------------------------- 137 * Comix 138 139 starimage = $41 140 startable = 0 ;chtable1 141 142 *------------------------------- 143 * Torch animation frames 144 * 0 1 2 3 4 5 6 7 8 9 10 11 145 * 12 13 14 15 16 17 146 147 torchflame hex 52,53,54,55,56,61,62,63,64,52,54,56 148 hex 63,61,55,53,64,62 149 150 ptorchflame db 1,2,3,4,5,6,7,8,9,3,5,7,1,4,9,2,8,6 151 152 *------------------------------- 153 * Bubbling flask frames 154 * 0 1 2 3 4 5 6 7 8 9 10 11 155 156 bubble hex b2,af,b0,b1,b0,af,b1,b0,af 157 158 *------------------------------- 159 * Message data: YCO, XCO, OFFSET, IMAGE 160 161 my = 90 162 lowmy = 153 163 hiconty = 73 164 lowconty = 168 165 166 contbox db hiconty,13,0,$7c ;Press button to continue 167 msgbox db my,15,0,$7b ;Empty message box 168 levelmsg db my-5,16,3,$7a ;"Level" 169 flipbox db my-1,13,0,$7e ;Turn disk over 170 timeleft db my,11,0,$7d ;Minutes left 171 seconds db my-5,14,0,$7f ;"Seconds" 172 173 *------------------------------- 174 * Numbers (0-12) 175 176 digit1 hex 00,00,00,00,00,00,00,00,00,00 177 hex 71,71,71 178 179 digit2 hex 70,71,72,73,74,75,76,77,78,79 180 hex 70,71,72 181 182 *------------------------------- 183 * Print "XX Minutes Left" 184 *------------------------------- 185 ]rts rts 186 187 TIMELEFTMSG 188 lda #timeleft 189 ldx #>timeleft 190 jsr setupimage 191 192 lda MinLeft 193 cmp #2 194 bcs :ok 195 lda KidAction 196 cmp #3 197 beq :ok 198 cmp #4 199 beq :ok ;falling 200 lda KidBlockY 201 cmp #1 202 bne :ok 203 lda #lowmy 204 sta YCO ;keep msg box out of kid's way 205 :ok jsr superim1 206 207 lda YCO 208 sec 209 sbc #5 210 sta YCO 211 212 lda XCO 213 clc 214 adc #1 215 sta XCO 216 lda #0 217 sta OPACITY 218 219 lda #ora 220 sta OPACITY 221 222 jsr getminleft 223 224 lda MinLeft ;BCD byte (e.g., $55 = 55 minutes) 225 cmp #2 226 bcs :1 227 lda SecLeft 228 :1 sta temp 229 lsr 230 lsr 231 lsr 232 lsr 233 beq :skip1st 234 tax 235 lda digit2,x ;1st digit 236 sta IMAGE 237 238 jsr addmsg 239 240 :skip1st lda XCO 241 clc 242 adc #1 243 sta XCO 244 245 lda temp 246 and #$f 247 tax 248 lda digit2,x ;2nd digit 249 sta IMAGE 250 251 jsr addmsg 252 253 * Minutes or seconds? 254 255 lda MinLeft 256 cmp #2 257 bcs ]rts 258 259 lda YCO 260 pha 261 lda #seconds 262 ldx #>seconds 263 jsr setupimage 264 pla 265 sta YCO 266 lda #sta 267 sta OPACITY 268 jmp addmsg ;replace "minutes" with "seconds" 269 270 *------------------------------- 271 * Print "Level XX" 272 *------------------------------- 273 ]rts rts 274 275 PRINTLEVEL 276 lda #msgbox 277 ldx #>msgbox 278 jsr superimage 279 280 lda #levelmsg 281 ldx #>levelmsg 282 jsr setupimage 283 284 jsr getlevelno 285 cpx #10 286 bcc :1 287 lda #0 288 sta OFFSET 289 :1 290 lda #ora 291 sta OPACITY 292 jsr addmsg 293 294 lda XCO 295 clc 296 adc #6 297 sta XCO 298 299 jsr getlevelno ;X = level # (0-12) 300 lda digit1,x ;1st digit 301 beq :skip1st 302 sta IMAGE 303 304 lda #ora 305 sta OPACITY 306 jsr addmsg 307 308 lda XCO 309 clc 310 adc #1 311 sta XCO 312 313 jsr getlevelno 314 :skip1st lda digit2,x ;2nd digit 315 sta IMAGE 316 317 lda #ora 318 sta OPACITY 319 jmp addmsg 320 321 *------------------------------- 322 getlevelno 323 ldx level 324 cpx #13 325 bcc :ok 326 ldx #12 327 :ok 328 ]rts rts 329 330 *------------------------------- 331 * Superimpose "Press button to continue" message 332 *------------------------------- 333 CONTINUEMSG 334 lda #contbox 335 ldx #>contbox 336 jsr setupimage 337 338 lda KidBlockX 339 and #1 340 bne :1 341 lda #lowconty 342 sta YCO 343 :1 jmp superim1 344 345 *------------------------------- 346 * Superimpose "Turn disk over" message 347 *------------------------------- 348 FLIPDISKMSG 349 lda #flipbox 350 ldx #>flipbox 351 jmp superimage 352 353 *------------------------------- 354 * Superimpose image (using layrsave) 355 *------------------------------- 356 superimage 357 jsr setupimage 358 superim1 359 lda #sta.$40 360 sta OPACITY 361 jmp addmsg 362 363 *------------------------------- 364 * Set up image 365 * 366 * In: A-X = image data addr 367 * Out: XCO, YCO, IMAGE 368 *------------------------------- 369 setupimage 370 sta addr 371 stx addr+1 372 373 ldy #0 374 lda (addr),y 375 sta YCO 376 iny 377 lda (addr),y 378 sta XCO 379 iny 380 lda (addr),y 381 sta OFFSET 382 iny 383 lda (addr),y 384 sta IMAGE 385 ]rts 386 :rts rts 387 388 *------------------------------- 389 * Draw Kid 390 *------------------------------- 391 DRAWKID 392 lda backtolife 393 beq :2 394 lda PAGE 395 beq ]rts ;flash when coming back to life 396 397 :2 lda mergetimer 398 bmi :1 399 and #1 400 beq :1 401 jmp DrawEored ;flash between kid & shadowman 402 403 :1 jmp DrawNormal 404 405 *------------------------------- 406 * Draw Sword 407 *------------------------------- 408 DRAWSWORD 409 jmp DrawNormal 410 411 *------------------------------- 412 * Draw Shadowman 413 *------------------------------- 414 DRAWSHAD 415 jmp DrawEored 416 417 *------------------------------- 418 * Draw Guard 419 *------------------------------- 420 DRAWGUARD 421 do EditorDisk 422 lda #EditorDisk 423 cmp #2 424 beq DrawNormal 425 fin 426 427 lda GuardColor ;set by "ADDGUARD" in AUTO 428 beq DrawNormal 429 bne DrawShifted 430 431 *------------------------------- 432 DrawNormal 433 lda #mask 434 sta OPACITY 435 436 lda #UseLayrsave.$80 437 jmp addmid 438 439 ]rts rts 440 441 *------------------------------- 442 DrawShifted 443 lda #1 444 jsr chgoffset 445 446 lda #mask 447 sta OPACITY 448 449 lda #UseLayrsave.$80 450 jmp addmid 451 452 *------------------------------- 453 DrawEored 454 lda #eor 455 sta OPACITY 456 457 lda #UseLayrsave.$80 458 jmp addmid 459 460 *------------------------------- 461 chgoffset 462 clc 463 adc OFFSET 464 cmp #7 465 bcc :1 466 467 inc XCO 468 sec 469 sbc #7 470 471 :1 sta OFFSET 472 rts 473 474 *------------------------------- 475 * 476 * Update strength meters 477 * 478 *------------------------------- 479 UPDATEMETERS 480 lda redkidmeter 481 beq :1 482 483 jsr DrawKidMeter 484 485 :1 lda redoppmeter 486 beq ]rts 487 488 jmp DrawOppMeter 489 ]rts rts 490 491 *------------------------------- 492 * 493 * Draw kid's strength meter at lower left 494 * 495 *------------------------------- 496 DRAWKIDMETER 497 lda inbuilder 498 bne ]rts 499 500 lda #191 501 sta YCO 502 lda #sta 503 sta OPACITY 504 505 ldx #0 506 stx xsave ;# of bullets drawn so far 507 508 :loop lda KidStrength 509 sec 510 sbc xsave ;# of bullets left to draw 511 beq :darkpart 512 cmp #4 513 bcs :draw3 514 cmp #3 515 bcs :draw2 516 cmp #2 517 bcc :drawlast 518 ;Draw 1 bullet 519 :draw1 ldy #1 520 bne :drline 521 ;Draw 2 bullets 522 :draw2 ldy #2 523 bne :drline 524 ;Draw 3 bullets 525 :draw3 ldy #3 526 bne :drline 527 528 :drawlast lda KidStrength 529 cmp #2 530 bcs :steady 531 lda PAGE 532 beq :skip ;flashes when down to 1 533 :steady lda #bullet 534 ldy #1 535 jsr :draw 536 :skip jmp :darkpart 537 538 * Draw line of 1-3 bullets 539 540 :drline lda bline-1,y ;image # 541 jsr :draw 542 jmp :loop 543 544 :draw sta IMAGE 545 ldx xsave 546 tya 547 clc 548 adc xsave 549 sta xsave 550 551 * In: IMAGE; x = unit # (0 = leftmost) 552 553 :drawimg lda KidStrX,x 554 sta XCO 555 lda KidStrOFF,x 556 sta OFFSET 557 jmp addmsg 558 559 * Draw blanks to limit of MaxKidStr 560 561 :darkpart 562 lda #and 563 sta OPACITY 564 lda #blank 565 sta IMAGE 566 :dloop ldx xsave 567 cpx MaxKidStr 568 bcs ]rts 569 jsr :drawimg 570 inc xsave 571 bne :dloop 572 ]rts rts 573 574 *------------------------------- 575 * 576 * Draw opp's strength meter at lower right 577 * 578 *------------------------------- 579 DRAWOPPMETER 580 lda inbuilder 581 bne ]rts 582 583 lda OppStrength 584 beq ]rts 585 586 lda ShadID 587 cmp #24 ;mouse 588 beq ]rts 589 cmp #4 ;skel 590 beq ]rts 591 cmp #1 ;shadow 592 bne :1 593 lda level 594 cmp #12 595 bne ]rts ;shad strength shows only on level 12 596 :1 597 lda #191 598 sta YCO 599 lda #sta.$80 ;mirror 600 sta OPACITY 601 602 ldx #0 603 stx xsave ;# of bullets drawn so far 604 605 :loop lda OppStrength 606 sec 607 sbc xsave ;# of bullets left to draw 608 beq :darkpart 609 cmp #4 610 bcs :draw3 611 cmp #3 612 bcs :draw2 613 cmp #2 614 bcc :drawlast 615 ;Draw 1 bullet 616 :draw1 ldy #1 617 bne :drline 618 ;Draw 2 bullets 619 :draw2 ldy #2 620 bne :drline 621 ;Draw 3 bullets 622 :draw3 ldy #3 623 bne :drline 624 625 :drawlast lda OppStrength 626 cmp #2 627 bcs :steady 628 lda PAGE 629 beq :darkpart ;flashes when down to 1 630 :steady lda #bullet 631 ldy #1 632 jmp :draw 633 634 * Draw line of 1-3 bullets 635 636 :drline lda bline-1,y ;image # 637 jsr :draw 638 jmp :loop 639 640 :draw sta IMAGE 641 ldx xsave 642 tya 643 clc 644 adc xsave 645 sta xsave 646 647 :drawimg lda OppStrX,x 648 sta XCO 649 lda OppStrOFF,x 650 sta OFFSET 651 jmp addmsg 652 653 :darkpart 654 lda #and.$80 655 sta OPACITY 656 lda #blank 657 sta IMAGE 658 ldx xsave 659 jmp :drawimg 660 661 *------------------------------- 662 * 663 * Set up to draw bubbling flask 664 * 665 * In/out: same as SETUPFLAME 666 * 667 *------------------------------- 668 EmptyPot = 0 669 RefreshPot = %00100000 670 BoostPot = %01000000 671 MystPot = %01100000 672 673 boffset = 2 674 675 SETUPFLASK 676 lda #boffset 677 sta OFFSET 678 679 txa 680 and #%11100000 681 cmp #EmptyPot 682 beq :0 683 cmp #BoostPot 684 beq :tall ;special flask (taller) 685 bcc :cont 686 687 inc OFFSET ;mystery potion (blue) 688 689 :tall lda YCO 690 sec 691 sbc #4 692 sta YCO 693 694 :cont txa 695 and #%00011111 696 tax 697 cpx #bubbLast+1 698 bcc :ok 699 ldx #0 700 :ok lda bubble,x 701 sta IMAGE 702 703 inc XCO 704 inc XCO 705 706 lda YCO 707 sec 708 sbc #14 709 sta YCO 710 711 lda #sta 712 sta OPACITY 713 714 lda #bgtable2 715 sta TABLE 716 lda #>bgtable2 717 sta TABLE+1 718 719 ]rts rts 720 721 :0 ldx #0 722 beq :ok 723 724 *------------------------------- 725 * 726 * Setup to draw flame 727 * 728 * In: XCO = blockxco 729 * YCO = Ay 730 * X = spreced 731 * 732 * Out: ready to call ADDBACK (or FASTLAY) 733 * 734 *------------------------------- 735 SETUPFLAME 736 cpx #torchLast+1 737 bcs ]rts 738 739 lda torchflame,x 740 sta IMAGE 741 742 inc XCO 743 744 lda YCO 745 sec 746 sbc #43 747 sta YCO 748 749 lda #sta 750 sta OPACITY 751 752 lda #bgtable1 753 sta TABLE 754 lda #>bgtable1 755 sta TABLE+1 756 757 ]rts rts 758 759 *------------------------------- 760 * 761 * Setup to draw flame (Princess's room) 762 * 763 * In: XCO, YCO; X = frame # 764 * Out: Ready to call ADDMID or LAY 765 * 766 *------------------------------- 767 PSETUPFLAME 768 cpx #torchLast+1 769 bcs ]rts 770 771 lda ptorchflame,x 772 sta IMAGE 773 774 lda #sta 775 sta OPACITY 776 777 jsr initlay 778 779 ]setch6 lda #chtable6 780 sta TABLE 781 lda #>chtable6 782 sta TABLE+1 783 784 ]rts rts 785 786 *------------------------------- 787 * 788 * Twinkle one of the stars outside Princess's window 789 * (Update it directly on both screens) 790 * 791 * In: X = star # (0-3) 792 * 793 *------------------------------- 794 TWINKLE 795 lda #starx 796 sta XCO 797 lda stary,x 798 sta YCO 799 lda stari,x 800 sta IMAGE 801 lda #eor 802 sta OPACITY 803 jsr ]setch6 804 jsr fastlay ;<--DIRECT HIRES CALL 805 lda PAGE 806 eor #$20 807 sta PAGE ;& on other page 808 jsr fastlay 809 lda PAGE 810 eor #$20 811 sta PAGE 812 rts 813 814 *------------------------------- 815 * 816 * Draw big white post in Princess's room 817 * 818 *------------------------------- 819 DRAWPOST 820 lda #postx 821 sta XCO 822 lda #posty 823 sta YCO 824 lda #postimg 825 sta IMAGE 826 lda #ora 827 sta OPACITY 828 jsr ]setch6 829 jmp addfore 830 831 *------------------------------- 832 * 833 * Draw hourglass in Princess's room 834 * 835 * In: X = glass state (0-8, 0 = full) 836 * 837 *------------------------------- 838 DRAWGLASS 839 lda #glassx 840 sta XCO 841 lda #glassy 842 sta YCO 843 lda glassimg,x 844 sta IMAGE 845 lda #sta 846 sta OPACITY 847 jsr ]setch6 848 jmp addback 849 850 *------------------------------- 851 * 852 * Mask princess's face & hair for certain CharPosns 853 * 854 * (Called after ADDCHAROBJ) 855 * 856 *------------------------------- 857 PMASK 858 ldx CharPosn 859 cpx #19 ;plie 860 bne :1 861 ldx #0 862 bpl :mask 863 :1 cpx #1 ;pslump-1 864 beq :m1 865 cpx #18 ;pslump-2 866 bne :2 867 :m1 ldx #1 868 bpl :mask 869 :2 870 871 ]rts rts 872 873 :mask 874 lda FCharY 875 clc 876 adc pmaskdy,x 877 sta YCO 878 879 lda XCO 880 clc 881 adc pmaskdx,x 882 sta XCO 883 884 lda pmaski,x 885 sta IMAGE 886 887 lda #5 ;chtable6 888 sta TABLE 889 890 lda #and 891 sta OPACITY 892 lda #UseLayrsave.$80 893 jmp addmid 894 895 *------------------------------- 896 * If failed copy prot check due to disk not in drive, recheck 897 * In: a = 0 (Call after setrecheck0) 898 *------------------------------- 899 RECHECKYEL 900 sta tempblockx 901 sta tempblocky 902 jsr indexblock ;set y = 0 903 lda (locals),y ;All of this just to hide "lda recheck0"! 904 beq ]rts 905 ldx #5 906 jsr yellow 907 lda #$ff 908 rts 909 910 *------------------------------- 911 * 912 * Draw sand flowing through hourglass 913 * 914 * In: X = frame # (0-3) 915 * Y = hourglass state (0-8) 916 * 917 *------------------------------- 918 FLOW 919 cpy #8 920 bcs ]rts ;glass is empty 921 jsr initlay 922 lda #glassy 923 sec 924 sbc sandht,y 925 sta BOTCUT 926 lda flowimg,x 927 sta IMAGE 928 lda #flowx 929 sta XCO 930 lda #0 931 sta OFFSET 932 lda #flowy 933 sta YCO 934 lda #sta 935 sta OPACITY 936 jsr ]setch6 937 jmp lay ;<---DIRECT HIRES CALL 938 939 *------------------------------- 940 * Save/restore FCharVars 941 942 saveFChar 943 ldx #$f 944 :loop lda FCharVars,x 945 sta tempsave,x 946 dex 947 bpl :loop 948 rts 949 950 restoreFChar 951 ldx #$f 952 :loop lda tempsave,x 953 sta FCharVars,x 954 dex 955 bpl :loop 956 ]rts rts 957 958 *------------------------------- 959 * 960 * Draw "comix" star 961 * 962 * In: Char data 963 * 964 *------------------------------- 965 SETUPCOMIX 966 jsr saveFChar 967 jsr :sub 968 jmp restoreFChar 969 970 :sub lda #$ff 971 sta FCharIndex 972 973 * Get y-coord 974 975 lda CharPosn 976 cmp #185 ;dead 977 beq :low 978 cmp #177 ;impaled 979 beq :imp 980 cmp #106 981 bcc :80 982 cmp #111 ;crouching 983 bcc :low 984 :80 cmp #178 ;halved 985 beq ]rts 986 987 lda #-15 988 ldx CharID 989 beq :3 990 lda #-11 ;kid strikes lower than opponent 991 :3 clc 992 adc FCharY 993 sta FCharY 994 jmp :8 995 996 :low lda #4 997 clc 998 adc FCharY 999 sta FCharY 1000 jmp :8 1001 1002 * Get x-coord 1003 1004 :imp lda #-5 impaled 1005 bne :9 1006 :8 lda #5 1007 :9 jsr addfcharx 1008 1009 * Get color (kid red, opps blue) 1010 1011 lda CharID 1012 beq :2 ;kid: 0 1013 lda #1 ;opponents: 1 1014 :2 1015 eor FCharX 1016 eor FCharFace 1017 and #1 ;look only at low bits 1018 bne :1 1019 inc FCharX 1020 bne :1 1021 inc FCharX+1 1022 :1 1023 lda #starimage 1024 sta FCharImage 1025 lda #startable 1026 sta FCharTable 1027 1028 lda #0 1029 sta FCharCU 1030 sta FCharCL 1031 lda #40 1032 sta FCharCR 1033 lda #192 1034 sta FCharCD 1035 1036 lda #TypeComix 1037 jmp addcharobj 1038 ]rts rts 1039 1040 *------------------------------- 1041 * 1042 * A D D C H A R O B J 1043 * 1044 * Add a character to object table 1045 * 1046 * In: FCharVars 1047 * A = object type 1048 * 1049 *------------------------------- 1050 ADDCHAROBJ 1051 ldx objX ;# objects already in list 1052 inx 1053 cpx #maxobj 1054 bcs ]rts ;list full (shouldn't happen) 1055 stx objX 1056 1057 sta objTYP,x 1058 1059 lda FCharX 1060 sta XCO 1061 lda FCharX+1 1062 sta OFFSET 1063 1064 txa 1065 pha 1066 jsr cvtx ;from 280-res to byte/offset 1067 pla 1068 tax 1069 1070 lda XCO 1071 sta objX,x 1072 lda OFFSET 1073 sta objOFF,x 1074 1075 lda FCharY 1076 sta objY,x 1077 1078 lda FCharCU 1079 sta objCU,x 1080 lda FCharCL 1081 sta objCL,x 1082 lda FCharCR 1083 sta objCR,x 1084 lda FCharCD 1085 sta objCD,x 1086 1087 lda FCharImage 1088 sta objIMG,x 1089 1090 lda FCharTable 1091 sta objTAB,x 1092 1093 lda FCharFace 1094 sta objFACE,x 1095 1096 jmp SETOBJINDX 1097 1098 *------------------------------- 1099 * 1100 * S E T O B J I N D X 1101 * 1102 * Set object index 1103 * 1104 *------------------------------- 1105 SETOBJINDX 1106 lda FCharIndex 1107 sta objINDX,x 1108 1109 cmp #30 1110 bcs :os 1111 1112 tax 1113 1114 lda #1 1115 sta objbuf,x 1116 :os 1117 rts 1118 1119 *------------------------------- 1120 * 1121 * Text routines 1122 * 1123 * NOTE: These routines bypass normal data structures 1124 * & write directly to hi-res page. 1125 * 1126 * Call at end of DRAWALL to make sure text goes on top 1127 * of everything else. 1128 * 1129 *------------------------------- 1130 * 1131 * Call once before using other text routines 1132 * 1133 *------------------------------- 1134 pretext 1135 jsr initlay 1136 1137 lda #bgtable2 1138 sta TABLE 1139 lda #>bgtable2 1140 sta TABLE+1 1141 rts 1142 1143 *------------------------------- 1144 * Part of "Yellow" copy-protection 1145 1146 SETRECHECK0 1147 lda #recheck0 1148 sta locals 1149 lda #>recheck0 1150 sta locals+1 ;fall thru (& return A = 0) 1151 1152 *------------------------------- 1153 INITLAY 1154 lda #3 ;auxmem 1155 sta BANK 1156 1157 lda #40 1158 sta RIGHTCUT 1159 lda #192 1160 sta BOTCUT ;use full screen 1161 lda #0 1162 sta LEFTCUT 1163 sta TOPCUT 1164 rts 1165 1166 *------------------------------- 1167 * 1168 * Print character 1169 * 1170 * In: PAGE, XCO/OFFSET, YCO 1171 * a = ASCII value of character 1172 * Out: XCO/OFFSET (modified) 1173 * 1174 *------------------------------- 1175 prchar 1176 sec 1177 sbc #"/" ;"0" = 1 1178 sta IMAGE 1179 1180 lda #ora 1181 sta OPACITY 1182 1183 jsr lay 1184 1185 inc XCO 1186 rts 1187 1188 *------------------------------- 1189 lst 1190 ds 1 1191 usr $a9,17,$00,*-org 1192 lst off