* * еL цHEAPO аSSEMBLER * * уTILITY ROUTINES -- INIT, MEMORY MANAGEMENT * * дск '@0:INIT' ═рел ассембле═еьт едитор═еьт ресторе═еьт теьт═еьт буфенд═еьт теьтенд═еьт цоделен═еьт дорг═еьт блстарт═еьт бленд═еьт блдест═еьт блможе═еьт строут═еьт пцоде═=═$02Ю;цODE BANK псвап═=═$05Ю;сWAP BANK старт ═ймп рестарт ═ймп инит монитор═ент ═ймп гомон басиц═ент ═ймп гобас VERSION═DFB $20 бордер═ент ═дфб 12 бацкгнд═ент ═дфб 6 теьтцолор ент ═дфб 1 лопаге═ент ═дфб #$02 хипаге═ент ═дфб #$ф0 йумпмон═дфб $5цЮ;йR. монстарт═дла $6000 моненд═дла $8000 рестарт ═сеи ═цлц ═ьце ═реп #$10 ═сеп #$20 ═лды #0000 ═пхы ═плд ═сты псвап ═лда лопаге ═инц ═ста псвап+2 ═лды #$1000 :лооп═лда [поинт],ы ═ста >$000000,ы ═ины ═цпы #$6000 ═бцц :лооп *:лооп лда $031000,ь * ста >$001000,ь * инь * цпь #$5000 * бцц :лооп ═рег #$30 ═ймл инит2 инитпоинт ═лда #00 ═ста пцоде ═ста пцоде+1 ═ста псвап ═ста псвап+1 ═лда лопаге ═ста пцоде+2 ═инц ═ста псвап+2 ═ртс инит ═йср инитпоинт ═лды #12 :лооп═лда старт,ы ═цмп ═бне :цонт ═деь ═бпл :лооп ═йср строут ═тьт 'THERE IS A DISTURBANCE IN THE FORCE...',0D ═тьт 'RESTART OLD SESSION?',00 :WAIT═йср $ффе4 ═бея :WAIT ═цмп #'N' ═бне рестарт :цонт * лда $д27ф * дец * ста хипаге ═стз цодефлагЮ;нO CODE PRESENT ═йср цопыуп ═рег #$20 ═лдь монстартЮ;мONITOR :л2═лда >$000000,ь ═ста $030000,ь ═инь ═цпь моненд ═бцц :л2 ═ста $д07е ═лда #$5цЮ;ймл рестарт ═ста $д300 ═лда #$00 ═ста $д301 ═лда #$10 ═ста $д302 ═лда #3 ═ста $д303 ═ста $д07ф ═реп #$20Ю;иNIT EDITOR ═лда #$000д ═ста $040000Ю;BUFFER 1 ═ста $040002Ю;BUFFER 2 ═ста $040004Ю;... ═ста $040006 ═ста $040008 ═ста $04000а ═ста $04000ц ═ста $04000е ═лда #0000 ═ста теьт ═лда #$0001 ═ста буфенд ═лда #$000ф ═ста теьтенд ═сеп #$30 ═лда #$04 ═ста теьт+2 ═ста буфенд+2 ═ста теьтенд+2 инит2 ═цлд ═сец ═ьце ═рег #$30 ═лдь #$фф ═тьс ═йср $фда3Ю;рESTART KERNAL ═йср $фд15 ═йср $фф5б ═лда #$04 ═ста $288 ═лда #$36Ю;нO басиц ═ста $01 ═цли ═йср инитппп ═ймп едитор цопыуп ═цлц ═ьце ═реп #$10 ═сеп #$20 ═лдь #0000Ю;аSSEMBLER :л1═лда >$001000,ь ═ста $031000,ь ═инь ═цпь #$5000 ═бцц :л1 ═ртс ═рег #$30 * * оLD SCHEME: * $0334-$0338 жECTORS * $0800-$XXXX сOURCE CODE * $8XXX-$9XXX йAMAICAмON * $9XXX-$бффф еL цHEAPO * $010800-$01XXXX цOMPILED CODE * аLSO STORAGE FOR SOURCE CODE * * нEW SCHEME: * BANK 2 -- CODE ASSEMBLY * BANK 3 -- ASSEMBLER STORAGE * BANK 4+ - сOURCE CODE * гомон ═йср цопыуп ═ймл $030000+гомон2 гомон2 ═пхк ═плб ═йср цопыцоде ═рег #$20 ═лдь монстарт :л2═лда $030000,ь ═ста >$000000,ь ═инь ═цпь моненд ═бцц :л2 ═лда монстарт+2 ═пха ═плб ═ймп йумпмон * рег #$30 * лда монстарт+2 * пха * плд * ймп [монстарт] гобас ═йср цопыуп ═сеп #$30 ═йср строут ═дфб 147 ═тьт 'SYS $D300 TO RE-ENTER',00 ═лда #$37 ═ста $01 ═стз $0800 ═лда #13 ═йср $ффд2Ю;FIX CURSOR ═йср $е3бф ═йср $е453 ═йср цопыппп ═ймл $030000+гобас2 гобас2 ═пхк ═плб ═йср цопыцоде ═сец ═ьце ═лда #00 ═пха ═плб ═ймл $00а474 цодефлаг═ент ═дфб 00 цопыцоде ═лда цодефлаг ═бея :скип ═реп #$30 ═лда дорг ═ста :ста+1 ═сеп #$20 ═лда дорг+2 ═ста :ста+3 ═ора дорг ═ора дорг+1 ═бея :скипЮ;рел MODULE ═лдь #0000 :л1═лда $020000,ь :ста═ста >$000000,ь ═инь ═цпь цоделен ═бне :л1 :скип═ртс ═рег #$30 пппдест═=═$цд80 цопыпппЮ;кLUDGE ═цлц ═ьце ═реп #$10 ═сеп #$20 ═лдь #0000 :лооп═лда инитппп,ь ═ста пппдест,ь ═инь ═цпь #ендппп-инитппп ═бцц :лооп ═ьце ═ймп пппдест ═рег #$30 * * пеек+поке+ваит 24-BIT PATCH FOR THE сUPERцпу * аLSO PATCHES LOAD/SAVE * * жERS. 2: цHANGE ONLY лда (),ы -> лда [], USE $50 $51 $52 * AS 24-BIT ADDRESS. (BUT ALSO $14 $15 AS BEFORE). тHIS * SHOULD MAXIMIZE COMPATIBILITY. * * нOTE THAT сыс PATCH IS TRIVIAL. * * сTEPHEN л. йUDD 12/6/97 * * 1/3/98 аDDED сыс AND лоад PATCHES. * * 12/14/99 -- аDDED TO йAMMON * линнум═=═$14Ю;жARIABLE нум24═=═$50Ю;нEW 24-BIT DEST. цхргет═=═$73 тьтптр═=═$7а хигхптр═=═$абЮ;хIGH BYTE OF END SAVE ADDR. *=============================== гетбыте═=═$б79б гетнум═=═$б7еб гетцхк═=═гетнум+6 гетадр═=═$б7ф7 пеек═=═$б80д поке═=═$б824 ваит═=═$б82д *=============================== * гетадр PATCH -> гетадр+7 п1адр═=═гетадр+7 патцх1═=═$99Ю;цмп #$91 -> цмп #$99 * гетадр PATCH -> гетадр+$0д п2адр═=═гетадр+$0д патцх2═=═$4цЮ;ймп линфетцх * пеек PATCH -> пеек+9 п3адр═=═пеек+11 патцх3а═=═$а7Ю;лда [$50] патцх3б═=═нум24 * поке PATCH -> поке+4 п4адр═=═поке+6 патцх4а═=═$87Ю;ста [$50] патцх4б═=═патцх3б * ваит PATCH -> ваит+17 п5адр═=═ваит+19 патцх5а═=═патцх3аЮ;лда [$50] патцх5б═=═патцх3б *=============================== инитппп * пATCH басиц * иNIT иежал VECTOR ═лда $ф7е5 ═цмп #$91Ю;цHECK FOR ппп ═бне :скип ═лда $030аЮ;оLD иежал ═ста $0334 ═лда $030б ═ста $0335 :скип ═пер хеьежал ═пла ═ста $030а ═пла ═ста $030б * сET UP BANK 1 PATCHES ═цлц ═дфб $фбЮ;XCE ═дфб $е2,$30Ю;SEP #$30 ═лда #$01 ═пха ═дфб $абЮ;плб -- STORE TO BANK 1 * пATCH басиц ═лда #патцх1Ю;гетадр ═ста п1адр ═лда #патцх2 ═ста п2адр ═пер линфетцх ═пла * лда #<линфетцх ═ста п2адр+1 ═пла * лда #>линфетцх ═ста п2адр+2 ═лда #патцх3аЮ;пеек+ваит ═ста п3адр ═ста п5адр ═лда #патцх3б ═ста п3адр+1 ═ста п5адр+1 ═ста п4адр+1Ю;поке ═лда #патцх4а ═ста п4адр * пATCH сыс ═лда #$дцЮ;ймп [] ═ста $е144 ═лда #нум24 ═ста $е145 * гET FILENAME+ADDRESS PATCH ═пер гетит ═пла * лда #<гетит ═ста $е1ф7 ═пла * лда #>гетит ═ста $е1ф8 * пATCH саже ROUTINE спатцх ═пер саже ═пла * лда #<саже ═ста $е157 * лда #>саже ═пла ═ста $е158 ═пер сб0 * лда #<сб0 ═пла ═ста $ф606 * лда #>сб0 ═пла ═ста $ф607 ═лда #$04 ═ста $ф5ф5Ю;цмп #$04 ═лда #$90Ю;бцц ... ═ста $ф5ф6 ═лда #$а6Ю;лдь $б9 ═ста $ф5ф8 ═лда #$б9 ═ста $ф5ф9 ═лда #$аеЮ;START ADDRESS IN $ае/ф ═ста $ф61б ═лда #$аф ═ста $ф620 ═лда #$еаЮ;ноп OUT $ц1->$ац COPY ═ста $ф617 ═ста $ф618 ═ста $ф619 ═пер цмпсаже * лда #<цмпсаже ═пла ═ста $ф625 * лда #>цмпсаже ═пла ═ста $ф626 ═пер инцсаже * лда #<инцсаже ═пла ═ста $ф63б * лда #>инцсаже ═пла ═ста $ф63ц ═лда #$а7Ю;лда [$ае] ═ста $ф629 ═лда #$ае ═ста $ф62а * пATCH лоад ROUTINE лпатцх ═пер лоад * лда #<лоад ═пла ═ста $е16д ═пла * лда #>лоад ═ста $е16е ═пер сажеаддр ═пла ═ста $ф4ф1 ═ста $ф39ф ═пла ═ста $ф4ф2 ═ста $ф3а0 ═лда #$ц7 ═ста $ф512Ю;цмп [$ае] ═лда #$87 ═ста $ф51цЮ;ста [$ае] ═ста $ф7е5 ═ста $ф7ф0 ═лда #$20 ═ста $ф51еЮ;йср инцсаже ═ста $ф7е7 ═пер инцсаже ═пла * лда #<инцсаже ═ста $ф51ф ═ста $ф7е8 ═пла * лда #>инцсаже ═ста $ф520 ═ста $ф7е9 ═лда #$еаЮ;ноп ноп ноп ═ста $ф521 ═ста $ф522 ═ста $ф523 ═ста $ф7еа ═ста $ф7еб ═ста $ф7ец ═лда #$б0 ═ста $ф75бЮ;лда $00б0,ы ═лда #$б3 ═ста $ф765Ю;SPRITES -> $б3 ═ста $ф7фф ═инц $ф805Ю;пла/ста ETC. ═инц $ф808 ═инц $ф80б ═сец ═ьце ═лда #$00 ═пха ═плб ═лда $ф4а7 ═цмп #$64 ═бея :ртс * фURTHER лоад PATCH ═лдь #ф4ц1-ф4а7-1 :лооп═лда ф4а7,ь ═хеь 9фа7ф401Ю;ста $01ф4а7,ь ═деь ═бпл :лооп :ртс═ртс ф4а7═хеь 6490Ю;стз $90 ═лда $ба ═цмп #$04 ═бцс :цонт ═ймп $ф713 :цонт═лды $б7 ═бне :ц2 ═ймп $ф2цц :ц2═лдь $б9 ═бпл :ц3Ю;рEALLY JUST WANT $фф ═инь ═хеь 2ц :ц3═хеь 64б0Ю;стз $б0 ф4ц1 * пATCH ежал TO READ IN HEX VALUES хеьежал ═йср цхргет ═цмп #'$' ═бне нопе ═лда #$ц0 ═ста $0еЮ;128+64 = 24-BIT INTEGER ═лда #00 ═ста $61Ю;фац1=0 ═ста $0дЮ;жалтып = NUMERIC лооп═йср цхргет ═бея линртс ═бцц :нумбер ═сбц #8Ю;а-ф WILL BE 10-15 :нумбер═сбц #47 ═цмп #16 ═бцц окЮ;цAN USE E.G. $D0+5 NOW ═цмп #46-55Ю;цHECK FOR DECIMAL PT. ═бне линртс еррор═лдь #14Ю;иLLEGAL QUANTITY ═ймп ($0300) ок═пха ═пер сиьтеен ═пла ═таь ═пла ═таы ═тьа * лда #<сиьтеен * лды #>сиьтеен ═йср $ба28Ю;мULTIPLY фац1 BY 16 ═пла ═йср $бд7еЮ;аDD TO фац1 ═ймп лооп нопе═лдь тьтптрЮ;бACK UP тьтптр ═бне :скип ═дец тьтптр+1 :скип═дец тьтптр ═ймп ($0334)Ю;нORMAL ROUTINE *сиьтеен фло 16 ;16 IN 5-BYTE FP ($85 00 00 00 00) сиьтеен═дфб $85,00,00,00,00 ═тьт 'JUDD' * * цOPY BYTES OF фац1 INTO линнум AND нум24 * * оN EXIT, .ы .а = линнум+1, линнум * линфетцх ═лда $63Ю;HIGH ═ста нум24+2 ═лда $64Ю;MED ═лды $65Ю;LOW ═сты линнум ═сты нум24 ═ста линнум+1 ═ста нум24+1 линртс═ртс * * пATCH лоад+саже COMMAND TO READ ADDRESS IF PRESENT. * саже═йср гетпармсЮ;гET 1ST TWO PARMS ═бне линртсЮ;еXIT ═йср сетнумЮ;$ац IS NOW START ADDRESS ═йср гетит ═йср цхек24 ═бне еррорЮ;REQUIRE ANOTHER ADDRESS ═лды нум24+1Ю;END ADDRESS ═лда нум24+2 ═ста хигхптр ═пла ═пла ═лда #$ацЮ;START ADDRESS ═ймп $е156+9 лоад═йср гетпармс ═бне линртс ═йср сетнум ═плаЮ;OLD RETURN ADDRESS ═пла ═лда $0а ═ймп $е16ц+9Ю;иNTO THE LOAD ROUTINE гетит═йср $е20еЮ;цHECK FOR COMMA ═йср $ад8аЮ;GET NUMBER ═йср $б7ф7Ю;CONVERT TO INT ═лдь нум24Ю;LOW BYTE IN .ь ═ртс гетпармс═йср $е1д4Ю;гET 1ST TWO PARMS цхек24═лды #$фф ═лда $0еЮ;цHECK FOR 24-BIT HEX VALUE ═цмп #$ц0 ═бне :ртс ═сты $б9Ю;са -- 24-BIT FLAG :ртс═ртс сетнум═лдь нум24 ═сть $ацЮ;саже START ADDRESSES ═лды нум24+1 ═сты $ад ═лда нум24+2 ═ста $б0Ю;аLWAYS HIGH ADDRESS ═ртс * * саже COMPARE AND INCREMENT ROUTINES * цмпсаже═сец ═лда $ае ═сбц $ац ═лда $аф ═сбц $ад ═лда $б0 ═сбц хигхптр ═ртс инцсаже═инц $ае ═бне :ртс ═инц $аф ═бне :ртс ═инц $б0 :ртс═ртс * * пATCH саже VARIABLES * сб0═иньЮ;.ь CONTAINS са ═бея :скипЮ;оNE BYTE SHORT OF A FIT INTO ═дфб $64,$б0Ю;саже ITSELF. ═дфб $64,хигхптрЮ;стз :скип═лда $ц1Ю;START ADDRESS -> $ае ═лдь $аеЮ;END ADDRESS -> $ац ═ста $ае ═сть $ац ═лда $ц2 ═лдь $аф ═ста $аф ═сть $ад ═ймп $ф3д5Ю;CONTINUE AS NORMAL * * сAVE LOAD ADDRESS * сажеаддр ═лда $ае ═ста $ц3 ═лда $аф ═ста $ц4 ═ймп $ф5д2 ендппп