Й" *дск '@0:DISKIO' ═рел сцреенп═=═$ц3 дорг═еьт цоделен═еьт цодефлаг═еьт теьт═еьт буфенд═еьт релфлаг═еьт * * уPDATES FOR еL цHEAPO: ADDED OBJECT CODE STUFF, * MODIFIED DIRECTORY ROUTINE, REMOVED UNNECESSARY * ROUTINES. * * слй 12/98 * * 1/00 24-BIT VERSION (блможе, дискио) * * * дISK ROUTINES. тHIS IS A COMMON DISK ACCESS ROUTINE * FOR THE MUSIC COMPOSER. а STRING ADDRESS IS PASSED IN * IN (.ь,.а) = (LO,HI) WHICH IS принтED TO THE SCREEN * (PRESUMABLY IT INCLUDES A SCREEN CLEAR!). тHE * APPROPRIATE LOAD AND SAVE ADDRESSES MUST BE SET UP * AHEAD OF TIME AS WELL. тHE PROGRAM THEN PRINTS A * SHORT MENU AND HANDLES ANY DISK ACCESSES. * * нEW ADDITION: A 2-BYTE IDENTIFIER MUST ALSO BE * SPECIFIED. иF GREATER THAN $фф00 THE BYTE CHECK IS * SKIPPED, OTHERWISE THESE TWO-BYTES ARE COMPARED WITH * THE FIRST TWO DATA BYTES IN THE FILE, AND IF THEY * DO NOT MATCH AN INCORRECT FILE TYPE IS ASSUMED. * реадст═=═$ффб7 сетлфс═=═$ффба сетнам═=═$ффбд опен═=═$ффц0 цлосе═=═$ффц3 цхкин═=═$ффц6 цхкоут═=═$ффц9 цлрцхн═=═$ффцц цхрин═=═$ффцф цхроут═=═$ффд2 лоад═=═$ффд5 саже═=═$ффд8 стоп═=═$ффе1 гетин═=═$ффе4 цлалл═=═$ффе7 фая2═=═$69 ацц═=═фая2 ауь═=═ацц+2 еьт═=═ауь+2 блнсв═=═$цц блнон═=═$цф блнцт═=═$цд ластфиле═ент ═дс═16,0Ю;лAST FILENAME ластлен═ент ═дфб 00 невдата═ент ═дфб═00Ю;вAS NEW DATA LOADED? страддр═да═00 дискио═ент ; сть страддр ; ста страддр+1 ═лда═#00 ═ста═невдата ═лда═#$ц0 ═ста═$9дЮ;кERNAL MESSAGES ON маин ═йср═строут ═дфб═147 ; дфб 159 ;цYAN ═дфб═14Ю;LOWERCASE ═дфб═13,13,13 ═дфб═32,32 ═тьт═'L - лOAD SOURCE' ═дфб═13,32,32 ═тьт═'A - аPPEND SOURCE' ═дфб═13,32,32 ═тьт═'S - сAVE SOURCE' ═дфб═13,32,32 ═тьт═'O - сAVE OBJECT CODE' ═дфб═13,32,32 ═тьт═'D - дIRECTORY' ═дфб═13,32,32 ═тьт═'@ - сEND DISK COMMAND' ═дфб═13,32,32 ═тьт═'C - цHANGE DRIVE NO.' ═дфб═13,32,32 ═тьт═'X - еXIT' ═дфб═13,32,32 ═тьт═'цURRENT DRIVE: ' ; дфб 158 ;ыELLOW ═дфб═00 ═лда═$ба ═цмп═#10 ═бцц═:принт ═лда═#'1' ═йср═цхроут ═лда═$ба ═сец ═сбц═#10 :принт═ора═#48 ═йср═цхроут ═до═0 ═йср═строут ═дфб═13,32,32 ═тьт═'цURRENT FILE : ' ═дфб═00 ═лдь═#<ластфиле ═лда═#>ластфиле ═йср═принт ═фин :промпт═йср═строут ═дфб═13,13,32 ═тьт═'>' ═дфб═00 :ваит═йср═стопЮ;дIR MAY HAVE BEEN STOPPED ═бея═:ваит :ваит2═йср═гетин ═бея═:ваит2 ═цмп═#'L' ═бея═:лоад ═цмп═#'A' ═бея═:апп ═цмп═#'S' ═бея═:саже ═цмп═#'O' ═бея═:обй ═цмп═#'D' ═бея═:дир ═цмп═#'@' ═бея═:цмд ═цмп═#'C' ═бея═:цхдр ═цмп═#'X' ═бея═:еьит ═ймп═маин :апп═йср═аппенд ═бцс═:ваитймп :еьит═ртс :лоад═йср═лоадфиле ═бцс═:ваитймп ═ртс :саже═йср═сажефиле ═ймп═:ваитймп :обй═йср═сажеобй ═ймп═:ваитймп :дир═йср═принтдир ═ймп═:промпт :цмд═йср═сендцмд ═йср═гетерр :ваитймп═йср═ваиткеы ═ймп═маин :цхдр ═лда═#13 ═йср═цхроут ═лда═#'#' ═йср═цхроут ═йср═гетбыте ═бея═:доне ═цмп═#20 ═бцс═:доне ═ста═$ба :доне═ймп═маин гетбыте ═лдь═#3 ═йср═инпут ═бея═:ртс ═лдь═#>стрбуф ═лда═#<стрбуф ═лды═#10 ═йср═асцтонум ═бцс═:ртс ═лда═ацц :ртс═ртс ваиткеы═ент ═йср═строут ═дфб═13,13 ═тьт═'пRESS A KEY TO CONTINUE...',00 ═лда═$0286Ю;сET BLINK COLOR TO ═ста═$0287Ю;CURRENT COLOR. ═лда═#1 ═ста═блнцт ═лда═#00 ═ста═блнсвЮ;бLINK :в═лда═блнон ═бне═:вЮ;вAIT FOR ONE BLINK :ваит═йср═гетин ═бея═:ваит ═лды═#1 ═сты═блнцт :ваит2═лды═блнон ═бея═:ваит2 ═инц═блнсв ═ртс * * дISK ROUTINES * * принтдир READS THE DIRECTORY FROM THE CURRENT DEVICE * AND PRINTS IT TO THE SCREEN. * принтдир ═лда═#01Ю;фILE NO. ═лдь═$баЮ;цURRENT DEVICE NUMBER ═лды═#00Ю;сECONDARY ADDRESS ═йср═сетлфс ═лда═#1 ═лдь═#<:доллар ═лды═#>:доллар ═йср═сетнам ═йср═опен ═лдь═#01 ═йср═цхкин ═бцс═:ендЮ;еRROR IF CARRY SET ═йср═цхринЮ;гRAB LOAD ADDRESS ═йср═цхрин :лооп1═лда═#13 ═йср═цхроут ═йср═цхринЮ;лINE LINK ═йср═цхрин ═йср═цхринЮ;лINE NUMBER (FILE SIZE) ═таы ═йср═цхрин ═таь ═йср═реадст ═бне═:енд ═тыа ═лды═#10Ю;бASE ═йср═принтнумЮ;пRINT OUT THE NUMBER IN ь,ы ═лда═#32 ═йср═цхроутЮ;аDD A SPACE TO LOOK NICE :лооп2═йср═цхрин ═таь ═бея═:стоп ═йср═цхроут ═бне═:лооп2 :стоп═йср═стоп ═бне═:лооп1 :енд═лда═#01 ═йср═цлосе ═йср═цлрцхн ═лда═#13 ═ймп═цхроут :доллар═тьт═'$' * * сажефиле, WHOSE PURPOSE IS AWFULLY SELF-EVIDENT. * сажефиле ═лда═#'S' ═ста═филеьт ═йср═гетнаме ═бея═:абортЮ;зERO SET MEANS ABORTED INPUT ═лда═теьтЮ;сAVE STARTS AT $0800 ═ста═фая2 ═лда═теьт+1 ═ста═фая2+1 ═лда═теьт+2 ═ста═$б0 ═лдь═буфенд ═лды═буфенд+1 ═лда═буфенд+2 ═ста═$аб ═лда═#фая2 ═йср═саже ═бцс═:еррор ═ймп═сажеок :аборт═лды═#00 :лооп2═лда═:теьт2,ы ═бея═:енд ═йср═цхроут ═ины ═бне═:лооп2 :еррор═лды═#00 :л1═лда═:ертеьт,ы ═бея═:енд ═йср═цхроут ═ины ═бне═:л1 :енд═йср═гетерр ═сец ═ртс :ертеьт═дфб═13 ═тьт═'*** SAVE ERROR ***' :теьт2═дфб═13 ═тьт═'SAVE ABORTED' ═дфб═13,00 сажеок ═йср═цлрцхн ═лды═$б7Ю;цOPY FILENAME TO ластфиле ═деы ═деыЮ;рEMOVE EXTENSION ═сты ластлен ═лда #00 :л4═ста ластфиле,ы ═деы ═лда═($бб),ы ═цпы═#00 ═бпл═:л4 ═лда═#13 ═йср═цхроут ═цлц ═ртс * * аппенд -- лоадфиле TO END ADDRESS INSTEAD OF * START ADDRESS. * алоад═дфб═00 аппенд ═сец ═дфб═$24 * * лоадфиле - REMARKABLY SIMILAR TO сажефиле * лоадфиле ═цлц ═рор═алоад ═лда═#'S' ═ста═филеьт ═йср═гетнаме ═бея═:абортЮ;зERO SET MEANS ABORTED INPUT ═лдь═теьт ═лды═теьт+1 ═лда═теьт+2 ═бит═алоад ═бпл═:ста ═лдь═буфенд ═лды═буфенд+1 ═лда═буфенд+2 :ста═ста═$б0 ═лда═#00 ═йср═лоад ═бцс═лоадерр ═инц═невдата ═ймп═сажеок :аборт═лды═#00 :лооп3═лда═лтеьт2,ы ═бея═ленд ═йср═цхроут ═ины ═бне═:лооп3 ленд═йср═гетерр ═сец ═ртс лоадерр :еррор═йср═цлалл ═йср═цлрцхн ═лды═#00 :лооп2═лда═:ертеьт,ы ═бея═ленд ═йср═цхроут ═ины ═бне═:лооп2 ═бея═ленд :ертеьт═дфб═13 ═тьт═'*** LOAD ERROR ***' лтеьт2═дфб═13 ═тьт═'LOAD ABORTED.' ═дфб═13,00 * * сAVE OBJECT FILE * сажеобй ═лдь═цодефлаг ═бея═:еьит ═лда═#'O' ═лдь═релфлаг ═бне═:ц0 ═лда═#'L'Ю;LINKER :ц0═ста═филеьт ═йср═гетнаме ═бея═:еьитЮ;зERO SET MEANS ABORTED INPUT ═лда═#$00Ю;дATA AT $020000 ═ста═фая2 ═ста═фая2+1 ═лда═#2 ═ста═фая2+2 ═лда═#$02 ═ста═$б9Ю;сECONDARY ADDRESS ═йср═опен ═бцс═лоадерр ═лдь═#$08 ═йср═цхкоут ═лда═доргЮ;лOAD ADDRESS ═йср═цхроут ═лда═дорг+1 ═йср═цхроут ═лдь цоделен+1 ═лды цоделен ═бея :лоопЮ;THINK $0100 ═инь :лооп═дфб═$а7Ю;лда [] ═дфб═фая2 ═йср═цхроут ═инц═фая2 ═бне═:ц1 ═инц═фая2+1 :ц1═деы ═бне═:лооп ═деь ═бне═:лооп ═лда═#8 ═йср═цлосе ═йср═цлрцхн :еьит═ртс * гET FILE NAME AND SET FILE PARAMETERS филеьт═дфб═'S'Ю;фILENAME EXTENSION гетнаме ═йср═строут ═тьт═'фILENAME:',00 ═лдь═#00Ю;уSE DEFAULT FILENAME :л2═лда═ластфиле,ь ═ста═стрбуф,ь ═бея═:ц1 ═йср═цхроут ═инь ═цпь═ластлен ═бцц═:л2 :ц1═тьа ═лдь═#14Ю;нUMBER OF CHARS MAX ═йср═инпут2Ю;.а CONTAINS LENGTH ═бея═:ртс ═таь ═лда═#'.' ═ста═стрбуф,ь ═инь ═лда═филеьт ═ста═стрбуф,ь ═инь ═цмп═#'S' ═бея═:нобй ═лды═#00 :л1═лда═:обй,ы ═ста═стрбуф,ь ═инь ═ины ═цпы═#4 ═бне═:л1 :нобй═тьа ═лдь═#<стрбуфЮ;сEE инпут FOR MORE INFO ═лды═#>стрбуф ═йср═сетнам ═лда═#08Ю;фILE NO. ═лдь═$баЮ;цURRENT DEVICE NUMBER ═лды═#$ффЮ;сECONDARY ADDRESS (PPPATCH) ═йср═сетлфс ═лда═#$01Ю;цLEAR з :ртс═ртс :обй═тьт═',P,W' * * сендцмд SENDS A COMMAND TO THE CURRENT DRIVE * сендцмд ═до═0 ═лда═#13 ═йср═цхроут ═лда═#'>' ═йср═цхроут ═фин ═лдь═#36 ═йср═инпут ═бея═:еррор ═лда═#$0ф ═лдь═$ба ═лды═#$0ф ═йср═сетлфс ═лда═#00 ═йср═сетнам ═йср═опен ═бцс═:еррор ═лдь═#$0ф ═йср═цхкоут ═лды═#00 :лооп═лда═стрбуф,ы ═бея═:еррор ═йср═цхроут ═ины ═бне═:лооп :еррор═йср═цлрцхн ═лда═#$0ф ═йср═цлосе ═ймп═цлрцхн * * гетерр PRINTS THE ERROR MESSAGE FROM THE CURRENT DISK DRIVE. * гетерр═ент ═лда═#13 ═йср═цхроут * * тHIS METHOD IS A BIT FASTER ON OUTPUT TO SCREEN. * ═йср═опенерр ═бцс═гетеьит гетерр2═ент :лооп═йср═цхрин ═цмп═#$0д ═бея═гетеьит ═йср═цхроут ═бне═:лооп гетеьит═йср═цхроут ═йср═цхроутЮ;оNE MORE TO LOOK NICE ═лда═#15 ═йср═цлосе ═ймп═цлрцхн опенерр═ент ═лда═#$ц0Ю;кERNAL MSG ON ═ста═$90 ═лда═#$0ф ═лдь═$ба ═лды═#$0ф ═йср═сетлфс ═лда═#00 ═йср═сетнам ═йср═опен ═лда═#00 ═ста═$90 ═бцс═:еррор ═лдь═#$0ф ═ймп═цхкинЮ;цARRY CLEAR -> ок :еррор═лда═#13 ═сец ═ртс * тHIS METHOD SEEMS A LITTLE SLOWER ═до═0Ю;дON'T ASSEMBLE ═лда═$ба ═йср═талкЮ;цOMMAND DEVICE TO TALK ═лда═#$6фЮ;цHANNEL 15 ═ста═саЮ;цURRENT SECONDARY ADDRESS ═йср═ткса ═лда═#$0дЮ;сET FOR INITIAL цр :лооп═йср═цхроут ═йср═ацптр ═цмп═#$0д ═бне═:лооп ═йср═цхроутЮ;дO цр ═ймп═унтлкЮ;... AND EXIT ═фин * * инпут INPUTS A STRING OF DATA INTO стрбуф. тHE MAXIMUM * NUMBER OF CHARS TO BE READ ARE PASSED IN ь. оN OUTPUT, * ZERO SET MEANS THE INPUT WAS ABORTED WITH р/с OR IS * EMPTY. .а (AND стрлен) CONTAINS THE STRING LENGTH. * стрбуф═еяу═$0200 стрлен═ент ═дфб═00 маьлен═дфб═00 инпут═ент ═лда═#00 ═ста═стрбуф инпут2═ста═стрлен ═сть═маьлен ═лда═$0286Ю;сET BLINK COLOR TO ═ста═$0287Ю;CURRENT COLOR. :лооп═лда═#1 ═ста═блнцт ═лда═#00 ═ста═блнсвЮ;бLINK :в═лда═блнон ═бне═:вЮ;вAIT FOR ONE BLINK :ваит═йср═гетин ═бне═:блофф ═йср═стоп ═бне═:ваит ═лда═#00 :блофф═лды═#1 ═сты═блнцт :ваит2═лды═блнон ═бея═:ваит2 ═инц═блнсв ═таы ═бея═:ртс ═цмп═#160Ю;аLPHANUMERIC CHARACTERS ═бцс═:нормал ═цмп═#147 ═бея═:цлр ═цмп═#128 ═бцс═:лооп ═цмп═#13 ═бея═:доне ═цмп═#20 ═бея═:дел ═цмп═#32 ═бцц═:лооп :нормал ═лды═стрлен ═цпы═маьлен ═бцс═:лооп ═ста═стрбуф,ы ═йср═цхроут ═инц═стрлен ═бне═:лооп :цлр═лды═стрлен ═бея═:лооп ═лда═#20 :л2═йср═цхроут ═дец═стрлен ═бне═:л2 ═бея═:лооп :дел═лды═стрлен ═бея═:лооп ═йср═цхроут ═дец═стрлен ═бпл═:лооп :доне═лды═стрлен ═лда═#00 ═ста═стрбуф,ы ═тыаЮ;з SET IF STRING EMPTY :ртс═ртс *------------------------------- * * мY OWN LITTLE KERNAL ROUTINES -- USEFUL UTILITY * ROUTINES. * * керплоп * плопьы * плоп -- фAST SCREEN (TEXT) PLOTTING ROUTINES * цхароут -- плопS A CHARACTER TO THE SCREEN * режон/режофф -- тURNS ON/OFF RVS-CHARS WITH цхароут * принт -- пRINTS A STRING USING цхроут * строут -- пRINTS A STRING IMMEDIATELY FOLLOWING CALL * принплоп -- лIKE принт BUT USES плоп * плопстр -- плопS A STRING IMMEDIATELY FOLLOWING CALL * мулт16 -- 16-BIT INTEGER MULTIPLY ROUTINE * диж16 -- 16-BIT DIVIDE * асцтонум -- цONVERT STRING TO 16-BIT NUMBER * принтнум -- пRINT 16-BIT NUMBER USING цхроут * плопнум -- плопS 16-BIT NUMBER TO SCREEN * пхбыте -- плоп TWO DIGIT HEX BYTE * блможе -- бLOCK MEMORY MOVE * * * плоп * сTORES THE VALUE IN а TO THE SCREEN AT THE POINT * (ров,цолумн) AND THE COLOR IN цолор TO THE * COLORMAP. иF ENTERED AT плопьы, ров IS SET TO ь AND * COLUMN IS SET TO ы. иF ENTERED AT керплоп, CHAR * IS STORED TO THE KERRENT SCREEN POINTER. * оN EXIT, а ь AND ы ARE PRESERVED; CARRY SET INDICATES * AN ERROR, I.E. ROW/COL OUT OF RANGE. * ров═ент ═дфб═0Ю;цURRENT ROW,COLUMN цолумн═ент ═дфб═0 цолор═ент ═дфб═0 плопьы═ентЮ;сET ы=COLUMN, ь=ROW ═цпь═#25 ═бцс═плопртс ═цпы═#40 ═бцс═плопртс ═сты═цолумн ═сть═ров плоп═ент ═пха ═лда═ровЮ;вE NEED 40*ров ═асл ═асл ═адц═ровЮ;5*ров ═ста═сцреенп ═лда═#00Ю;а=HIGH BYTE ═асл═сцреенпЮ;мULT BY 8 ═рол ═асл═сцреенп ═рол ═асл═сцреенп ═рол ═адц═#$04Ю;аDD 1024 ═ста═сцреенп+1Ю;сцреенп NOW POINTS TO SCREEN ═пла плопртс═ртс ктемп═дс═1 стаьы═ент ═йср═плопьыЮ;PLOP TO ь,ы керплоп═ентЮ;плоп TO KERRENT SCREEN LOC. ═сты═ктемп ═лды═цолумн ═ста═(сцреенп),ы ═пха ═лда═сцреенп+1 ═пха ═анд═#$03 ═цлц ═адц═#$д8Ю;цOLOR MEM AT $д800 ═ста═сцреенп+1 ═лда═цолор ═ста═(сцреенп),ы ═плаЮ;рESTORE сцреенп TO POINT TO SCREEN ═ста═сцреенп+1 ═цлцЮ;сIGNAL ALL IS WELL. ═плаЮ;RESTORE а ═лды═ктемп ═ртс * * цхароут * сTICKS A цхр$ CHARACTER TO THE SCREEN AT THE CURRENT * ROW,COLUMN AND ADVANCES THE COLUMN. * аLL REGISTERS ARE PRESERVED. * цхароут═ент ═еор═#$е0Ю;цONVERT TO SCREEN CHAR ═цлц ═адц═#32 ═бпл═:цонт ═адц═#64 ═бпл═:цонт ═еор═#$а0 :цонт═еор═режерсе ═йср═керплоп ═инц═цолумн ═ртс * * режон/режофф * тURNS ON/OFF REVERSE-CHARACTER PRINTING WITH цхароут * режерсе═дфб═00 режон═ент ═пха ═лда═#$80 ═ста═режерсе ═пла ═ртс режофф═ент ═пха ═лда═#00 ═ста═режерсе ═пла ═ртс * * принт * аS THE NAME SUGGESTS, THIS PRINTS A STRING TO THE * SCREEN, WHERE THE ADDRESS OF THE STRING IS * CONTAINED IN (.ь,.а) = (LO,HI). тHE STRING IS * ASSUMED TO BE NULL-TERMINATED. * * оN EXIT, THE LOCATION OF THE LAST CHARACTER READ * (THE NULL-TERMINATOR HOPEFULLY) IS RETURNED IN * (.ь,.а) = (LO,HI). ы IS PRESERVED. * принт═ент ═ста═:лооп+2 :лооп═лда═$а000,ь ═бея═:доне ═йср═цхроут ═инь ═бне═:лооп ═инц═:лооп+2 ═бне═:лооп :доне ═лда═:лооп+2 ═ртс * * строут * лIKE принт, BUT THE STRING IMMEDIATELY FOLLOWS THE * SUBROUTINE CALL; EXECUTION RESUMES RIGHT AFTER THE * NULL-TERMINATION BYTE. * * оN EXIT, а AND ь ARE THOROUGHLY HOSED. * строут═ент ═пла ═таьЮ;лO BYTE ═пла ═инь ═бне═:цонт ═цлц ═адц═#01 :цонт═йср═принт ═пхаЮ;HI BYTE ═тьа ═пхаЮ;LO BYTE ═ртс * * лIKE принт, BUT USES плоп. * принплоп═ент ═ста═:лооп+2 :лооп═лда═$а000,ь ═бея═:доне ═йср═цхароут ═инь ═бне═:лооп ═инц═:лооп+2 ═бне═:лооп :доне ═лда═:лооп+2 ═ртс * * плопстр * лIKE строут, BUT USES плоп * темпа═дфб═00 темпь═дфб═00 плопстр═ент ═ста═темпа ═сть═темпь ═пла ═таьЮ;лO BYTE ═пла ═инь ═бне═:цонт ═цлц ═адц═#01 :цонт═йср═принплоп ═пхаЮ;HI BYTE ═тьа ═пхаЮ;LO BYTE ═лдь═темпь ═лда═темпа ═ртс *------------------------------------- * 16 BIT MULTIPLY AND DIVIDE ROUTINES. * тHREE 16 BIT (TWO-BYTE) LOCATIONS * ацц, ауь AND еьт MUST BE SET UP, * PREFERABLY ON ZERO PAGE. *------------------------------------- * мултиплы роутине * ацц*ауь -> [ацц,еьт] (LOW,HI) 32 BIT RESULT мулт16═ент ═лда═#0 ═ста═еьт+1 ═лды #$11 ═цлц ]лооп═рор еьт+1 ═рор ═рор═ацц+1 ═рор═ацц ═бцц═мул2 ═цлц ═адц═ауь ═пха ═лда═ауь+1 ═адц═еьт+1 ═ста═еьт+1 ═пла мул2═деы ═бне═]лооп ═ста═еьт ═ртс * дижиде роутине * ацц/ауь -> ацц, REMAINDER IN еьт диж16═ент ═лда═#0 ═ста═еьт+1 ═лды═#$10 :лооп═асл═ацц ═рол═ацц+1 ═рол ═рол═еьт+1 ═пха ═цмп═ауь ═лда═еьт+1 ═сбц═ауь+1 ═бцц═:диж2 ═ста═еьт+1 ═пла ═сбц═ауь ═пха ═инц═ацц :диж2═пла ═деы ═бне═:лооп ═ста═еьт ═ртс * * асцтонум * цONVERTS A STRING TO A 16-BIT NUMBER. тHE ADDRESS * OF THE STRING IS PASSED IN IN (а,ь) = (LO,HI), AND * THE BASE OF THE NUMBER IS CONTAINED IN ы. жALID * BASES ARE 0-16. тHE STRING IS ASSUMED TO BE * NULL-TERMINATED. * * оN EXIT, CARRY SET DENOTES AN ERROR, EITHER AN * INVALID BASE, AN INVALID STRING, OR A NUMBER * OVERFLOW. тHE NUMBER IS CONTAINED IN ацц, AS * USED IN мулт16. тHE LAST CHAR READ IS CONTAINED * IN (а,ь)=(LO,HI). ы IS TOAST. * асцтонум═ент ═цпы═#17 ═бцс═:еьит ═сты═ауьЮ;ауь=NUMBER BASE ═лды═#00 ═сты═ауь+1 ═сты═ацц ═сты═ацц+1 ═сть═:лооп+2 ═таьЮ;ь=LO BYTE STRING :лооп═лда═$а000,ьЮ;жALID CHARS ARE $30-$39, $41-$46 ═бея═:еьит ═еор═#$30 ═цмп═#10 ═бцц═:цонт ═еор═#$70Ю;сHOULD USE сбц #$70-9 ═адц═#8Ю;нOW а-ф = 10-16 :цонт═цмп═ауьЮ;цOMPARE WITH NUMBER BASE ═бцс═:еьит ═пха ═йср═мулт16Ю;мULTIPLY NUMBER TIMES BASE ═пла ═лды═еьтЮ;дID MULTIPLICATION EXCEED 16 BITS? ═бне═:еррор ═цлц ═адц═ацц ═ста═ацц ═лда═ацц+1 ═адц═#00 ═ста═ацц+1 ═инь ═бне═:лооп ═инц═:лооп+2 ═бне═:лооп :еррор═сец :еьит═тьа ═лдь═:лооп+2 ═ртс * * принтнум * пRINTS THE 16-BIT NUMBER IN (а,ь) = (LO,HI) * TO THE SCREEN, I.E. PRINTS USING цхроут. * тHE NUMBER BASE IS CONTAINED IN ы. * принтнум═ент ═ста═ацц ═сть═ацц+1 ═сты═ауьЮ;бASE ═лдь═#00 ═сть═ауь+1 * ацц/ауь -> ацц, REMAINDER IN еьт :лооп═йср═диж16 ═инь ═лда═еьт ═пха ═лда═ацц ═ора═ацц+1 ═бне═:лоопЮ;дIVIDE UNTIL RESULT=0 :пооп═пла ═ора═#$30Ю;цONVERT TO CHR$ ═цмп═#$3а ═бцц═:плоп ═адц═#$06Ю;$3а->а $3б->б ETC. :плоп═йср═цхроут ═деь ═бне═:пооп ═ртс * * плопнум * пLOPS THE 16-BIT NUMBER IN (а,ь) = (LO,HI) * TO THE SCREEN, I.E. PRINTS USING плоп ROUTINE. * тHE NUMBER BASE IS CONTAINED IN ы. * плопнум═ент ═ста═ацц ═сть═ацц+1 ═сты═ауьЮ;бASE ═лдь═#00 ═сть═ауь+1 * ацц/ауь -> ацц, REMAINDER IN еьт :лооп═йср═диж16 ═инь ═лда═еьт ═пха ═лда═ацц ═ора═ацц+1 ═бне═:лоопЮ;дIVIDE UNTIL RESULT=0 :пооп═пла ═ора═#$30Ю;цONVERT TO CHR$ ═цмп═#$3а ═бцц═:плоп ═адц═#$06Ю;$3а->а $3б->б ETC. :плоп═йср═цхароут ═деь ═бне═:пооп ═ртс * * пхбыте * пRINT A HEX BYTE IN .а, INCLUDING TRAILING ZEROS * пхбыте═ент ═пха ═лср ═лср ═лср ═лср ═йср═:принт ═пла ═анд═#$0ф :принт═ора═#$30 ═цмп═#$3а ═бцц═:плоп ═адц═#$06 :плоп═ймп═цхароут * * блможе * мOVES A BLOCK OF MEMORY TO ANOTHER LOCATION. * сET блстарт TO THE BEGINNING OF THE BLOCK OF * MEMORY, бленд TO THE LAST BYTE OF THE BLOCK, * AND блдест TO THE DESTINATION BYTE (2-BYTES * EACH, IN LO,HI FORMAT). * * тHE ROUTINE IS SMART, AND CAN TELL THE DIFFERENCE * BETWEEN FORWARDS AND BACKWARDS MOVES, ETC. * * ауь AND еьт ARE USED, FROM MULT ROUTINE. * блстарт═ент ═дла═0 бленд═ент ═дла═0 блдест═ент ═дла═0 блможе═ент ═ьце ═пхп ═цлц ═ьце ═реп═#$30 ═лда═блендЮ;нUMBER OF BYTES TO MOVE ═сец ═сбц═блстарт ═таы ═сеп═#$20 ═лда═бленд+2 ═сбц═блстарт+2 ═бцц═:доне ═ста═ауьЮ;(.ь,ауь) = (ло,хи24) ═лда═блстарт ═сец ═сбц═блдест ═лда═блстарт+1 ═сбц═блдест+1 ═лда═блстарт+2 ═сбц═блдест+2 ═бцц═:форвард ═реп═#$20 ═лда═блстарт ═ста═:бсрц+1 ═лда═блдест ═ста═:бдест+1 ═сеп═#$20 ═лда═блстарт+2 ═ста═:бсрц+3 ═лда═блдест+2 ═ста═:бдест+3 ═инц═ауь ═ины ═лдь═#0000 :лооп :бсрц═лда═$100000,ь :бдест═ста═$100000,ь ═инь ═бне═:ц1 ═инц═:бсрц+3 ═инц═:бдест+3 :ц1═деы ═бне═:лооп ═дец═ауь ═бне═:лооп :доне═плп ═ьце ═ртс :форвардЮ;мOVE BLOCK FORWARDS ═реп═#$20 ═тыа ═адц═блдестЮ;цOPY TO END OF BLOCKS ═ста═:фдест+1 ═сеп═#$20 ═лда═ауь ═адц═блдест+2 ═ста═:фдест+3 ═лда═бленд ═ста═:фсрц+1 ═лда═бленд+1 ═ста═:фсрц+2 ═лда═бленд+2 ═ста═:фсрц+3 ═инц═ауь ═ины ═лдь═#0000 :флооп :фсрц═лда═$100000,ь :фдест═ста═$100000,ь ═деь ═цпь═#$фффф ═бне═:ц2 ═дец═:фсрц+3 ═дец═:фдест+3 :ц2═деы ═бне═:флооп ═дец═ауь ═бне═:флооп ═ймп═:доне