** Е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ЕОДРРР