  ** е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ендппп