к"*ДУЛ '@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 ДЕЩ ВОЕ :ЖМППР ДЕГ БХШ ВОЕ :ЖМППР КНР :ДПОЕ