MASTER.S (20002B)
1 * master 3.5 2 DemoDisk = 0 3 FinalDisk = 1 4 5 org = $f880 6 lst off 7 *------------------------------- 8 * 9 * M A S T E R 10 * 11 * (3.5" version) 12 * 13 * Sits in main l.c. 14 * 15 *------------------------------- 16 org org 17 18 jmp FIRSTBOOT 19 jmp LOADLEVEL 20 jmp RELOAD 21 jmp LoadStage2 22 jmp RELOAD 23 24 jmp ATTRACTMODE 25 jmp CUTPRINCESS 26 jmp SAVEGAME 27 jmp LOADGAME 28 jmp DOSTARTGAME 29 30 jmp EPILOG 31 jmp LOADALTSET 32 33 *------------------------------- 34 lst 35 put eq 36 lst 37 put gameeq 38 lst off 39 40 Tmoveauxlc = moveauxlc-$b000 41 42 *------------------------------- 43 * RW18 ID bytes 44 45 POPside1 = $a9 46 POPside2 = $ad 47 48 * RW18 zero page vars 49 50 slot = $fd 51 track = $fe 52 lastrack = $ff 53 54 * RW18 commands 55 56 DrvOn = $00 57 DrvOff = $01 58 Seek = $02 59 RdSeqErr = $03 60 RdGrpErr = $04 61 WrtSeqErr = $05 62 WrtGrpErr = $06 63 ModID = $07 64 RdSeq = $83 65 RdGrp = $84 66 WrtSeq = $85 67 WrtGrp = $86 68 Inc = $40 ;.Inc to inc track 69 70 *------------------------------- 71 * Local vars 72 73 dum locals 74 75 ]dest ds 2 76 ]source ds 2 77 ]endsourc ds 2 78 79 newBGset1 ds 1 80 newBGset2 ds 1 81 newCHset ds 1 82 83 dend 84 85 *------------------------------- 86 * Passed params 87 88 params = $3f0 89 90 *------------------------------- 91 * Coordinates of default load-in level 92 93 demolevel db 33,0 94 firstlevel db 33,1 95 96 *------------------------------- 97 * Hi bytes of crunch data 98 * Double hi-res (stage 1) 99 100 pacSplash = $40 101 delPresents = $70 102 delByline = $72 103 delTitle = $74 104 pacProlog = $7c 105 pacSumup = $60 ;mainmem 106 pacEpilog = $76 ;side B 107 108 * Single hires (stage 2) 109 110 pacProom = $84 111 112 *------------------------------- 113 * Music song #s 114 * Set 1 (title) 115 116 s_Presents = 1 117 s_Byline = 2 118 s_Title = 3 119 s_Prolog = 4 120 s_Sumup = 5 121 s_Princess = 7 122 s_Squeek = 8 123 s_Vizier = 9 124 s_Buildup = 10 125 s_Magic = 11 126 127 * Set 2 (epilog) 128 129 s_Epilog = 1 130 s_Curtain = 2 131 132 *------------------------------- 133 * Soft switches 134 135 IOUDISoff = $c07f 136 IOUDISon = $c07e 137 DHIRESoff = $c05f 138 DHIRESon = $c05e 139 HIRESon = $c057 140 HIRESoff = $c056 141 PAGE2on = $c055 142 PAGE2off = $c054 143 MIXEDon = $c053 144 MIXEDoff = $c052 145 TEXTon = $c051 146 TEXToff = $c050 147 ALTCHARon = $c00f 148 ALTCHARoff = $c00e 149 ADCOLon = $c00d 150 ADCOLoff = $c00c 151 ALTZPon = $c009 152 ALTZPoff = $c008 153 RAMWRTaux = $c005 154 RAMWRTmain = $c004 155 RAMRDaux = $c003 156 RAMRDmain = $c002 157 ADSTOREon = $c001 158 ADSTOREoff = $c000 159 160 RWBANK2 = $c083 161 RWBANK1 = $c08b 162 163 *------------------------------- 164 kprincess = "p"-$60 ;temp! 165 kdemo = "d"-$60 ;temp! 166 krestart = "r"-$60 167 kresume = "l"-$60 168 169 *------------------------------- 170 * 171 * Notes: 172 * 173 * Game code sits in auxmem & aux l.c. and uses aux z.p. 174 * 175 * Routines in main l.c. (including MASTER and HIRES) 176 * are called via intermediary routines in GRAFIX (in auxmem). 177 * 178 * RW18 sits in bank 1 of main language card; 179 * driveon switches it in, driveoff switches it out. 180 * 181 *------------------------------- 182 * 183 * F I R S T B O O T 184 * 185 *------------------------------- 186 FIRSTBOOT 187 lda MIXEDoff 188 jsr setaux 189 190 * Set BBund ID byte 191 192 lda #POPside1 193 sta BBundID 194 195 * Load hires tables & add'l hires routines 196 197 sta RAMWRTmain 198 lda #2 199 sta track 200 jsr rw18 201 db RdGrp.Inc 202 hex e0,e1,e2,e3,e4,e5,e6,e7,e8 203 hex e9,ea,eb,ec,ed,00,00,00,00 204 205 * Load as much of Stage 3 as we can keep 206 207 jsr loadperm 208 209 * Turn off drive 210 211 jsr driveoff 212 213 * Check for IIGS 214 215 jsr checkIIGS ;returns IIGS 216 217 * Start attract loop 218 219 jsr initsystem ;in topctrl 220 221 lda #0 222 sta invert ;rightside up Y tables 223 224 lda #1 225 sta soundon ;Sound on 226 227 jmp AttractLoop 228 229 *------------------------------- 230 * 231 * Reload code & images 232 * (Temp routine for game development) 233 * 234 *------------------------------- 235 RELOAD 236 do 0 237 jsr driveon 238 239 jsr loadperm 240 jsr LoadStage3 241 242 jmp driveoff 243 fin 244 245 *------------------------------- 246 * 247 * Load music (1K) 248 * 249 * Load at $5000 mainmem & move to aux l.c. 250 * 251 *------------------------------- 252 * Load music set 1 (title) 253 254 loadmusic1 255 jsr setmain 256 lda #34 257 sta track 258 jsr rw18 259 db RdSeq,$4e ;we only want $50-53 260 ]mm jsr setaux 261 jmp xmovemusic 262 263 *------------------------------- 264 * Load music set 2 (game) 265 266 loadmusic2 267 jsr setmain 268 lda #20 269 sta track 270 jsr rw18 271 db RdGrp.Inc 272 hex 50,51,52,53,00,00,00,00,00 273 hex 00,00,00,00,00,00,00,00,00 274 jmp ]mm 275 276 *------------------------------- 277 * Load music set 3 (epilog) 278 279 loadmusic3 280 jmp loadmusic1 281 282 *------------------------------- 283 setaux sta RAMRDaux 284 sta RAMWRTaux 285 rts 286 287 setmain sta RAMRDmain 288 sta RAMWRTmain 289 rts 290 291 *------------------------------- 292 * 293 * D R I V E O N 294 * 295 * In: A = delay 296 * BBundID 297 * 298 * Sets auxmem 299 * 300 *------------------------------- 301 driveon lda #0 302 driveon1 sta :delay 303 304 jsr setaux ;set auxmem 305 306 * switch in bank 1 (RW18) 307 308 bit RWBANK1 309 bit RWBANK1 ;1st 4k bank 310 311 * set Bbund ID 312 313 lda BBundID 314 sta :IDbyte 315 316 jsr rw18 317 db ModID 318 :IDbyte hex a9 ;Bbund ID byte 319 320 * turn on drive 1 321 322 jsr rw18 323 db DrvOn 324 :drive hex 01 325 :delay hex 00 326 rts 327 328 *------------------------------- 329 * 330 * D R I V E O F F 331 * 332 *------------------------------- 333 driveoff jsr rw18 334 db DrvOff 335 336 * switch in bank 2 337 338 bit RWBANK2 339 bit RWBANK2 ;2nd 4k bank 340 341 sta $c010 ;clr kbd 342 343 jmp setaux ;& set auxmem 344 345 *------------------------------- 346 * 347 * Set first level/demo level 348 * 349 *------------------------------- 350 set1stlevel 351 lda firstlevel 352 ldx firstlevel+1 353 SetLevel sta params 354 stx params+1 355 ]rts rts 356 357 setdemolevel 358 lda demolevel 359 ldx demolevel+1 360 jmp SetLevel 361 362 *------------------------------- 363 * 364 * Check track 22 to make sure it's the right disk 365 * 366 * (Scratch page 2 mainmem--return w/mainmem set) 367 * 368 *------------------------------- 369 checkdisk 370 jsr setaux 371 ldx #POPside2 372 stx BBundID 373 374 jsr driveon 375 :loop jsr setmain 376 lda #22 377 sta track 378 jsr rw18 379 db RdGrpErr.Inc 380 hex 02,00,00,00,00,00,00,00,00 381 hex 00,00,00,00,00,00,00,00,00 382 bcc ]rts 383 jsr error 384 jmp :loop 385 386 *------------------------------- 387 * 388 * Save/load game 389 * 390 * Write/read 256 bytes of data: sector 0, track 23, side 2 391 * We scorch an entire track, but on side 2 we can afford it 392 * 393 *------------------------------- 394 SAVEGAME 395 jsr checkdisk ;sets main 396 397 sta RAMRDaux 398 ldx #15 399 :loop lda savedgame,x ;aux 400 sta $200,x ;main 401 dex 402 bpl :loop 403 sta RAMRDmain 404 405 lda #23 406 sta track 407 jsr rw18 408 db WrtGrpErr 409 hex 02,00,00,00,00,00,00,00,00 410 hex 00,00,00,00,00,00,00,00,00 411 bcc :ok 412 jsr whoop 413 :ok jmp driveoff 414 415 *------------------------------- 416 LOADGAME 417 jsr checkdisk ;sets main 418 419 lda #23 420 sta track 421 jsr rw18 422 db RdGrp 423 hex 02,00,00,00,00,00,00,00,00 424 hex 00,00,00,00,00,00,00,00,00 425 426 sta RAMWRTaux 427 ldx #15 428 :loop lda $200,x ;main 429 sta savedgame,x ;aux 430 dex 431 bpl :loop 432 433 jmp driveoff 434 435 *------------------------------- 436 * 437 * Load alt. character set (chtable4) 438 * 439 * In: Y = CHset4 440 * 441 *------------------------------- 442 LOADALTSET 443 sty newCHset 444 445 jsr driveon 446 447 jsr rdch4 448 449 jmp driveoff 450 451 *------------------------------- 452 * 453 * L O A D L E V E L 454 * 455 * In: bluepTRK, bluepREG 456 * TRK = track # (1-33) 457 * REG = region on track (0-1) 458 * A = BGset1; X = BGset2; Y = CHset4 459 * 460 * Load level into "working blueprint" buffer in auxmem; 461 * game code will make a "backup copy" into aux l.c. 462 * (which we can't reach from here). 463 * 464 * If bg & char sets in memory aren't right, load them in 465 * 466 *------------------------------- 467 LOADLEVEL 468 sta newBGset1 469 stx newBGset2 470 sty newCHset 471 472 jsr driveon 473 474 jsr rdbluep ;blueprint 475 jsr rdbg1 ;bg set 1 476 jsr rdbg2 ;bg set 2 477 jsr rdch4 ;char set 4 478 479 jsr vidstuff 480 481 jmp driveoff 482 483 *------------------------------- 484 setbluep 485 lda bluepTRK 486 sta track 487 lda bluepREG 488 ]rts rts 489 490 *------------------------------- 491 vidstuff 492 lda BBundID 493 cmp #POPside2 494 bne ]rts 495 lda $c000 496 cmp #"^" 497 bne ]rts 498 499 jsr setmain 500 lda #12 501 sta track 502 jsr rw18 503 db RdGrp.Inc 504 hex 00,00,00,00,00,00,00,00,00 505 hex 00,00,00,0c,0d,0e,0f,10,11 506 :loop jsr rw18 507 db RdSeq.Inc 508 :sm hex 12 509 lda :sm 510 clc 511 adc #$12 512 sta :sm 513 cmp #$6c 514 bcc :loop 515 jsr driveoff 516 jsr setmain 517 jmp $c00 518 519 *------------------------------- 520 * Track data for alt bg/char sets 521 * 522 * Set #: 0 1 2 3 4 5 6 523 524 bg1trk hex 05,00,07 525 bg2trk hex 12,02,09 526 ch4trk hex 0d,03,04,05,0a,0b 527 ch4off hex 0c,00,06,0c,00,06 528 529 *------------------------------- 530 rdbg1 ldx newBGset1 531 cpx BGset1 ;already in memory? 532 beq :rts ;yes--no need to load 533 stx BGset1 534 lda bg1trk,x 535 sta track 536 jsr rw18 537 db RdSeq.Inc,$60 538 jsr rw18 539 db RdSeq.Inc,$72 540 ]rts 541 :rts rts 542 543 rdbg2 ldx newBGset2 544 cpx BGset2 545 beq ]rts 546 stx BGset2 547 lda bg2trk,x 548 sta track 549 jsr rw18 550 db RdSeq.Inc,$84 551 rts 552 553 rdch4 ldx newCHset 554 cpx CHset 555 beq ]rts 556 stx CHset 557 lda ch4trk,x 558 sta track 559 lda ch4off,x 560 beq :off0 561 cmp #6 562 beq :off6 563 cmp #12 564 beq :off12 565 rts 566 567 :off12 jsr rw18 568 db RdGrp.Inc 569 hex 00,00,00,00,00,00,00,00,00 570 hex 00,00,00,96,97,98,99,9a,9b 571 jsr rw18 572 db RdSeq.Inc,$9c 573 rts 574 575 :off6 jsr rw18 576 db RdGrp.Inc 577 hex 00,00,00,00,00,00,96,97,98 578 hex 99,9a,9b,9c,9d,9e,9f,a0,a1 579 jsr rw18 580 db RdGrp.Inc 581 hex a2,a3,a4,a5,a6,a7,a8,a9,aa 582 hex ab,ac,ad,00,00,00,00,00,00 583 rts 584 585 :off0 jsr rw18 586 db RdSeq.Inc,$96 587 jsr rw18 588 db RdGrp.Inc 589 hex a8,a9,aa,ab,ac,ad,00,00,00 590 hex 00,00,00,00,00,00,00,00,00 591 ]rts rts 592 593 *------------------------------- 594 * 595 * read blueprint 596 * 597 *------------------------------- 598 rdbluep 599 jsr setbluep 600 bne :reg1 601 602 :reg0 jsr rw18 603 db RdGrpErr 604 hex b7,b8,b9,ba,bb,bc,bd,be,bf 605 hex 00,00,00,00,00,00,00,00,00 606 bcc ]rts 607 jsr error 608 jmp :reg0 609 610 :reg1 jsr rw18 611 db RdGrpErr 612 hex 00,00,00,00,00,00,00,00,00 613 hex b7,b8,b9,ba,bb,bc,bd,be,bf 614 bcc ]rts 615 jsr error 616 jmp :reg1 617 618 *------------------------------- 619 * 620 * Copy one DHires page to another 621 * 622 *------------------------------- 623 copy1to2 624 lda #$40 ;dest 625 ldx #$20 ;org 626 bne copydhires 627 628 copy2to1 629 lda #$20 630 ldx #$40 631 632 copydhires 633 sta IMAGE+1 ;dest 634 stx IMAGE ;org 635 636 jsr _copy2000aux 637 jmp _copy2000 ;in hires 638 639 *------------------------------- 640 * 641 * Cut to princess screen 642 * 643 *------------------------------- 644 CUTPRINCESS 645 jsr blackout 646 lda #1 ;seek track 0 647 cutprincess1 648 jsr LoadStage2 ;displaces bgtab1-2, chtab4 649 650 lda #pacProom 651 jsr SngExpand 652 653 lda #$40 654 sta IMAGE+1 655 lda #$20 656 sta IMAGE ;copy page 1 to page 2 657 jmp _copy2000 ;in HIRES 658 659 *------------------------------- 660 * 661 * Epilog (You Win) 662 * 663 *------------------------------- 664 EPILOG 665 lda #1 666 sta soundon 667 sta musicon 668 jsr blackout 669 jsr LoadStage1B 670 671 jsr Epilog 672 673 lda #POPside1 674 sta BBundID 675 sta $c010 676 :loop lda $c000 677 bpl :loop ;fall thru 678 679 *------------------------------- 680 * 681 * A T T R A C T 682 * 683 * Self-running "attract mode" 684 * 685 *------------------------------- 686 ATTRACTMODE 687 AttractLoop 688 lda #1 689 sta musicon 690 691 jsr SetupDHires 692 693 jsr PubCredit 694 695 jsr AuthorCredit 696 697 jsr TitleScreen 698 699 jsr Prolog1 700 ]princess 701 jsr PrincessScene 702 703 jsr SetupDHires 704 705 jsr Prolog2 706 707 jsr SilentTitle 708 709 jmp Demo 710 711 *------------------------------- 712 * 713 * Set up double hi-res 714 * 715 *------------------------------- 716 SetupDHires 717 718 * Show black lo-res scrn 719 720 jsr blackout 721 722 * Load in Stage 1 data 723 724 jmp LoadStage1A 725 726 *------------------------------- 727 * 728 * "Broderbund Software Presents" 729 * 730 *------------------------------- 731 PubCredit 732 733 * Unpack splash screen into DHires page 1 734 735 jsr unpacksplash 736 737 * Show DHires page 1 738 739 jsr setdhires 740 741 * Copy to DHires page 2 742 743 jsr copy1to2 744 745 lda #44 746 jsr tpause 747 748 * Unpack "Broderbund Presents" onto page 1 749 750 lda #delPresents 751 jsr DeltaExpPop 752 753 ldx #80 754 lda #s_Presents 755 jsr PlaySongI 756 757 jmp CleanScreen 758 759 *------------------------------- 760 * 761 * Credit line disappears 762 * 763 *------------------------------- 764 CleanScreen 765 766 * Switch to DHires page 2 767 * (credit line disappears) 768 769 lda PAGE2on 770 771 * Copy DHires page 2 back to hidden page 1 772 773 jsr copy2to1 774 775 * Display page 1 776 777 lda PAGE2off 778 ]rts rts 779 780 *------------------------------- 781 * 782 * "A Game by Jordan Mechner" 783 * 784 *------------------------------- 785 AuthorCredit 786 787 lda #42 788 jsr tpause 789 790 * Unpack byline onto page 1 791 792 lda #delByline 793 jsr DeltaExpPop 794 795 ldx #80 796 lda #s_Byline 797 jsr PlaySongI 798 799 * Credit line disappears 800 801 jmp CleanScreen 802 803 *------------------------------- 804 * 805 * "Prince of Persia" 806 * 807 *------------------------------- 808 SilentTitle 809 jsr unpacksplash 810 811 jsr copy1to2 812 813 lda #20 814 jsr tpause 815 816 lda #delTitle 817 jsr DeltaExpPop 818 819 lda #160 820 jmp tpause 821 822 *------------------------------- 823 TitleScreen 824 lda #38 825 jsr tpause 826 827 * Unpack title onto page 1 828 829 lda #delTitle 830 jsr DeltaExpPop 831 832 ldx #140 833 lda #s_Title 834 jsr PlaySongI 835 836 * Credit line disappears 837 838 jmp CleanScreen 839 840 *------------------------------- 841 * 842 * Prologue, part 1 843 * 844 *------------------------------- 845 Prolog1 846 lda #pacProlog 847 sta RAMRDaux 848 jsr DblExpand 849 850 ldx #250 851 lda #s_Prolog 852 jmp PlaySongI 853 854 *------------------------------- 855 * 856 * Princess's room: Vizier starts hourglass 857 * 858 *------------------------------- 859 PrincessScene 860 jsr blackout 861 862 jsr ReloadStuff ;wiped out by dhires titles 863 864 lda #0 ;don't seek track 0 865 jsr cutprincess1 866 867 lda #0 ;cut #0 (intro) 868 jmp xplaycut ;aux l.c. via grafix 869 870 *------------------------------- 871 * 872 * Prologue, part 2 873 * 874 *------------------------------- 875 Prolog2 876 lda #pacSumup 877 sta RAMRDmain 878 jsr DblExpand 879 880 jsr setdhires 881 882 ldx #250 883 lda #s_Sumup 884 jmp PlaySongI 885 886 *------------------------------- 887 * 888 * Epilog 889 * 890 *------------------------------- 891 Epilog 892 lda IIGS 893 bne SuperEpilog ;super hi-res ending if IIGS 894 895 lda #pacEpilog 896 sta RAMRDaux 897 jsr DblExpand 898 899 jsr setdhires 900 901 lda #s_Epilog 902 jsr PlaySongNI 903 lda #15 904 jsr pauseNI 905 jsr unpacksplash 906 lda #75 907 jsr pauseNI 908 909 lda #s_Curtain 910 jsr PlaySongNI 911 lda #60 912 jsr pauseNI 913 914 jmp blackout 915 916 unpacksplash 917 lda #pacSplash 918 sta RAMRDaux 919 jmp DblExpand 920 921 *------------------------------- 922 * 923 * Super hi-res epilog (IIGS only) 924 * 925 *------------------------------- 926 SuperEpilog 927 lda #1 ;aux 928 jsr fadein ;fade in epilog screen 929 jsr setaux 930 931 lda #s_Epilog 932 jsr PlaySongNI 933 934 jsr fadeout 935 lda #0 ;main 936 jsr fadein ;fade to palace screen 937 jsr setaux 938 939 lda #80 940 jsr pauseNI 941 942 lda #s_Curtain 943 jsr PlaySongNI 944 945 lda #255 946 jsr pauseNI 947 948 jsr fadeout ;...and fade to black 949 950 jmp * ;and hang (because it's too much 951 ;trouble to restart) 952 953 *------------------------------- 954 * 955 * Demo sequence 956 * 957 *------------------------------- 958 Demo 959 jsr blackout 960 961 jsr LoadStage3 962 963 jsr setdemolevel 964 jsr rdbluep 965 966 jsr driveoff 967 968 * Go to TOPCTRL 969 970 lda #0 971 jmp start 972 973 *------------------------------- 974 * non-interruptible pause 975 976 pauseNI 977 :loop sta pausetemp 978 ldy #20 979 :loop1 ldx #0 980 :loop2 dex 981 bne :loop2 982 dey 983 bne :loop1 984 985 lda pausetemp 986 sec 987 sbc #1 988 bne :loop 989 ]rts rts 990 991 *------------------------------- 992 * 993 * Start game? (if key or button pressed) 994 * 995 *------------------------------- 996 StartGame? 997 jsr musickeys 998 cmp #$80 ;key or button press? 999 bcc ]rts ;no 1000 1001 do FinalDisk 1002 else 1003 cmp #kdemo ;temp! 1004 bne :1 1005 jmp Demo 1006 :1 cmp #kprincess ;temp! 1007 bne :2 1008 jmp ]princess 1009 fin 1010 1011 :2 cmp #krestart 1012 bne :3 1013 jmp AttractLoop 1014 :3 ;fall thru to DOSTARTGAME 1015 *------------------------------- 1016 * 1017 * Start a game 1018 * 1019 *------------------------------- 1020 DOSTARTGAME 1021 jsr blackout 1022 1023 * Turn on drive & load Stage 3 routines 1024 1025 :1 jsr LoadStage3 1026 1027 * Load 1st level 1028 1029 jsr set1stlevel 1030 1031 jsr rdbluep 1032 1033 * Turn off drive & set aux 1034 1035 jsr driveoff 1036 1037 * Go to TOPCTRL 1038 1039 lda #1 1040 sta musicon 1041 1042 do DemoDisk 1043 else 1044 1045 lda keypress 1046 cmp #kresume 1047 bne :newgame 1048 1049 * Resume old game 1050 1051 lda #4 ;arbitrary 1052 jmp startresume 1053 1054 fin 1055 1056 * Start new game 1057 1058 :newgame 1059 lda #1 1060 jmp start 1061 1062 *------------------------------- 1063 * 1064 * Load permanent code & data 1065 * (only once) 1066 * 1067 *------------------------------- 1068 loadperm 1069 lda #3 1070 sta track 1071 1072 jsr setaux 1073 1074 jsr rw18 1075 db RdSeq.Inc,$0e 1076 1077 jsr rw18 1078 db RdGrp.Inc 1079 hex 04,05,06,07,08,09,0a,0b,0c 1080 hex 0d,20,21,22,23,24,25,26,27 1081 1082 jsr setmain 1083 lda #9 1084 sta track 1085 jsr rw18 1086 db RdSeq.Inc,$84 1087 jsr rw18 1088 db RdSeq.Inc,$96 1089 1090 jsr rw18 1091 db RdSeq.Inc,$08 1092 1093 jsr rw18 1094 db RdGrp.Inc 1095 hex 1a,1b,1c,1d,1e,1f,a8,a9,aa 1096 hex ab,ac,ad,ae,af,b0,b1,b2,b3 1097 1098 jsr rw18 1099 db RdGrp.Inc 1100 hex b4,b5,b6,b7,b8,b9,ba,bb,bc 1101 hex bd,be,bf,00,00,00,00,00,00 1102 1103 *------------------------------- 1104 * 1105 * Load aux l.c. stuff (tracks 19-21 & 34) 1106 * (includes music set 1) 1107 * 1108 * Load into main hires area & move to aux l.c. 1109 * 1110 *------------------------------- 1111 lda #19 1112 sta track 1113 1114 jsr rw18 1115 db RdGrp.Inc 1116 hex 00,00,20,21,22,23,24,25,26 1117 hex 27,28,29,2a,2b,2c,2d,2e,2f 1118 1119 jsr rw18 1120 db RdGrp.Inc 1121 hex 00,00,00,00,30,31,32,33,34 1122 hex 35,36,37,38,39,3a,3b,3c,3d 1123 jsr rw18 1124 db RdSeq.Inc,$3e 1125 1126 lda #34 1127 sta track 1128 jsr rw18 1129 db RdGrp.Inc 1130 hex 00,00,50,51,52,53,54,55,56 1131 hex 57,58,59,5a,5b,5c,5d,5e,5f 1132 1133 jsr setaux 1134 lda #1 1135 sta MSset 1136 1137 jsr setmain 1138 jmp Tmoveauxlc 1139 1140 *------------------------------- 1141 * 1142 * Stage 1: static dbl hires screens -- no animation 1143 * Stage 2: character animation only (bg is unpacked) 1144 * Stage 3: full game animation 1145 * 1146 *------------------------------- 1147 * 1148 * Load Stage 1 data (sida A) 1149 * 1150 *------------------------------- 1151 ]lsub sta track 1152 :test jsr rw18 1153 db RdSeqErr.Inc,$40 1154 bcc :ok 1155 jsr error 1156 jmp :test 1157 :ok 1158 jsr rw18 1159 db RdSeq.Inc,$52 1160 jsr rw18 1161 db RdSeq.Inc,$64 1162 jsr rw18 1163 db RdSeq.Inc,$76 1164 jsr rw18 1165 db RdSeq.Inc,$88 1166 rts 1167 1168 LoadStage1A 1169 jsr driveon 1170 1171 lda #22 1172 jsr ]lsub 1173 1174 jsr setmain 1175 jsr rw18 1176 db RdSeq.Inc,$60 1177 jsr rw18 1178 db RdSeq.Inc,$72 1179 1180 jsr loadmusic1 1181 1182 jsr setaux 1183 lda #$ff 1184 sta BGset1 1185 sta BGset2 1186 sta CHset 1187 1188 jmp driveoff 1189 1190 *------------------------------- 1191 * 1192 * Load stage 1 (side B) 1193 * 1194 *------------------------------- 1195 LoadStage1B 1196 jsr driveon 1197 1198 jsr loadmusic3 ;epilog 1199 1200 lda IIGS 1201 bne :shires ;Super hi-res ending only if IIGS 1202 1203 lda #18 1204 jsr ]lsub 1205 jmp driveoff 1206 1207 :shires jsr loadsuper ;in unpack 1208 jmp driveoff 1209 1210 *------------------------------- 1211 * 1212 * Reload 2000-6000 auxmem 1213 * (wiped out by dhires titles) 1214 * 1215 *------------------------------- 1216 ReloadStuff 1217 jsr driveon 1218 1219 :test lda #4 1220 sta track 1221 jsr rw18 1222 db RdGrpErr 1223 hex 00,00,00,00,00,00,00,00,00 1224 hex 00,20,21,22,23,24,25,26,27 1225 bcc :ok 1226 jsr error 1227 jmp :test 1228 :ok 1229 lda #15 1230 sta track 1231 jsr rw18 1232 db RdSeq.Inc,$28 1233 jsr rw18 1234 db RdSeq.Inc,$3a 1235 jsr rw18 1236 db RdSeq.Inc,$4c 1237 1238 jmp driveoff 1239 1240 *------------------------------- 1241 * 1242 * Load stage 2 data (6000-a800) 1243 * 1244 *------------------------------- 1245 LoadStage2 1246 ldx BBundID 1247 cpx #POPside2 1248 beq LoadStage2B 1249 1250 LoadStage2A 1251 jsr driveon 1252 1253 lda #0 1254 jsr loadch7 ;side A only 1255 1256 lda #29 1257 ]ls2 sta track 1258 1259 :test jsr rw18 1260 db RdSeqErr.Inc,$60 1261 bcc :ok 1262 jsr error 1263 jmp :test 1264 :ok 1265 jsr rw18 1266 db RdSeq.Inc,$72 1267 jsr rw18 1268 db RdSeq.Inc,$84 1269 jsr rw18 1270 db RdGrp.Inc 1271 hex 96,97,98,99,9a,9b,9c,9d,9e 1272 hex 00,00,00,00,00,00,00,00,00 1273 1274 lda #$ff 1275 sta BGset1 1276 sta BGset2 1277 sta CHset 1278 1279 jmp driveoff 1280 1281 * Load chtable7 (side A only) 1282 1283 loadch7 1284 sta recheck0 1285 :test lda #28 1286 sta track 1287 jsr rw18 1288 db RdGrpErr.Inc 1289 hex 00,00,00,00,00,00,00,00,00 1290 hex 00,00,00,00,9f,a0,a1,a2,a3 1291 bcc :ok 1292 jsr error 1293 jmp :test 1294 :ok 1295 ]rts rts 1296 1297 *------------------------------- 1298 * 1299 * Load stage 2 routines (side B) 1300 * 1301 *------------------------------- 1302 LoadStage2B 1303 jsr driveon 1304 1305 lda #24 1306 bne ]ls2 1307 1308 *------------------------------- 1309 * 1310 * Load stage 3 1311 * Full version (from stage 1) 1312 * 1313 * Reload 2000-AC00 auxmem, 6000-7200 mainmem 1314 * 1315 *------------------------------- 1316 LoadStage3 1317 jsr driveon 1318 1319 lda #4 1320 sta track 1321 1322 :loop jsr rw18 1323 db RdGrpErr.Inc 1324 hex 00,00,00,00,00,00,00,00,00 1325 hex 00,20,21,22,23,24,25,26,27 1326 bcc :ok 1327 jsr error 1328 jmp :loop 1329 :ok 1330 jsr rw18 1331 db RdSeq.Inc,$60 1332 jsr rw18 1333 db RdSeq.Inc,$72 ;bgtable1 1334 1335 jsr setmain 1336 jsr rw18 1337 db RdSeq.Inc,$60 1338 jsr rw18 1339 db RdSeq.Inc,$72 1340 1341 jsr setaux 1342 1343 lda #13 1344 sta track 1345 jsr rw18 1346 db RdGrp.Inc 1347 hex 00,00,00,00,00,00,00,00,00 1348 hex 00,00,00,96,97,98,99,9a,9b 1349 jsr rw18 1350 db RdSeq.Inc,$9c ;chtable4 1351 jsr rw18 1352 db RdSeq.Inc,$28 1353 jsr rw18 1354 db RdSeq.Inc,$3a 1355 jsr rw18 1356 db RdSeq.Inc,$4c 1357 jsr rw18 1358 db RdSeq.Inc,$84 ;bgtable2 1359 1360 lda #0 1361 sta BGset1 1362 sta BGset2 1363 sta CHset 1364 1365 jsr loadmusic2 1366 1367 jmp setaux 1368 1369 *------------------------------- 1370 * 1371 * Play song--interruptible & non-interruptible 1372 * 1373 * (Enter & exit w/ bank 2 switched in) 1374 * 1375 * In: A = song # 1376 * X = length to pause if sound is turned off 1377 * 1378 *------------------------------- 1379 PlaySongNI ;non-interruptible 1380 ;(& ignores sound/music toggles) 1381 jsr setaux 1382 jsr xminit 1383 :loop jsr xmplay 1384 cmp #0 1385 bne :loop 1386 ]rts rts 1387 1388 *------------------------------- 1389 PlaySongI ;interruptible 1390 jsr setaux 1391 beq ]rts 1392 1393 tay 1394 lda musicon 1395 and soundon 1396 beq :pause 1397 1398 tya 1399 jsr xminit 1400 :loop jsr StartGame? 1401 jsr xmplay 1402 cmp #0 1403 bne :loop 1404 ]rts rts 1405 1406 :pause txa ;falls thru to tpause 1407 *------------------------------- 1408 * 1409 * In: A = delay (max = 255) 1410 * 1411 *------------------------------- 1412 tpause 1413 :loop sta pausetemp 1414 1415 ldy #2 1416 :loop1 ldx #0 1417 :loop2 jsr StartGame? 1418 dex 1419 bne :loop2 1420 dey 1421 bne :loop1 1422 1423 lda pausetemp 1424 sec 1425 sbc #1 1426 bne :loop 1427 ]rts rts 1428 1429 *------------------------------- 1430 * 1431 * Disk error 1432 * 1433 * Prompt user for correct disk side & wait for keypress 1434 * 1435 *------------------------------- 1436 error 1437 jsr driveoff 1438 1439 jsr prompt 1440 1441 jmp driveon 1442 1443 *------------------------------- 1444 lst 1445 eof ds 1 1446 usr $a9,1,$a80,*-org 1447 lst off