home *** CD-ROM | disk | FTP | other *** search
- .%0860! FETCHLINE = *
- .%0861! STA ZW1
- .%0862! STY ZW1+1
- .%0863! LDX #2
- .%0864! - LDA SORT╨,X
- .%0865! STA ZP1,X
- .%0866! DEX
- .%0867! BPL -
- .%0868! LDX #HEADER
- .%0869! LDY #4
- .%0870! JSR ZPLOAD
- .%0871! LDA HEADER+3
- .%0872! LDY #0
- .%0873! JMP FETCH
- .%0874!
- .%0875! ;*** SORT╟╘CMP( SORTLINE, CMPLINE ) : .├╙=█SORTLINE >= CMPLINE▌
- .%0876!
-
- ╘HIS ROUTINE COMPARES THE LINES STORED IN THE "SORTLINE" AND "CMPLINE" BUFFERS
- AND RETURNS WITH CARRY SET IF THE "SORTLINE" IS LARGER (ALPHABETICALLY). ╔T
- ALSO TAKES INTO ACCOUNT THE STARTING COMPARISON POSITIONS AND HANDLES THE CASE
- OF EITHER OR BOTH LINES NOT BEING AS LONG AS THE START POSITION OF THE STRING
- COMPARISON.
-
- .%0877! SORT╟╘CMP = *
-
- ╘HIS SECTION OF CODE MAKES BIT0 OF .╪ A "1" IF SORTLINE IS NOT LONG ENOUGH TO
- BE COMPARED, AND MAKES BIT1 A "1" IF CMPLINE IS TOO SHORT.
-
- .%0878! LDX #0
- .%0879! CLC
- .%0880! LDA SORT├OLUMN
- .%0881! ADC #5
- .%0882! CMP SORTBUFLEN
- .%0883! BCC +
- .%0884! INX
- .%0885! + CMP CMPBUFLEN
- .%0886! BCC +
- .%0887! INX
- .%0888! INX
-
- ┴ND HERE IS WHERE IT TAKES ACTION DEPENDING WHETHER THE LINES ARE LARGE ENOUGH
- OR NOT. ╘HE CASES ARE:
-
- . .╪=%00000000 - STRINGS ARE LONG ENOUGH TO BE COMPARED, SO CONTINUE
- . .╪=%00000001 - SORTLINE IS TOO SHORT, CMPLINE OK, SO RETURN WITH CARRY CLEAR
- . .╪=%00000010 - CMPLINE IS TOO SHORT, SORTLINE OK, SO RETURN WITH CARRY SET
- . .╪=%00000011 - BOTH SORTLINE AND CMPLINE ARE TOO SHORT; CARRY SET
-
- .%0889! + TXA
- .%0890! BEQ DO├OMPARE
- .%0891! CMP #2
- .%0892! RTS
- .%0893!
- .%0894! DO├OMPARE = *
-
- ╘HIS SECTION DOES THE COMPARE IF BOTH LINES ARE LONG ENOUGH.
-
- .%0895! LDY SORT├OLUMN
- .%0896! - LDA SORTLINE,Y
- .%0897! CMP CMPLINE,Y
- .%0898! BNE +
- .%0899! CMP #0
- .%0900! BEQ +
- .%0901! INY
- .%0902! BNE -
- .%0903! + RTS
- .%0904!
- .%0905! ;*** POSITION╠INE( SORTLINE ) : SORT╤=PREV, SORT╨=NEXT
- .%0906!
-
- ╘HIS ROUTINE SEARCHES FOR THE CORRECT POSITION IN THE LINE LIST TO INSERT THE
- NEW LINE, AND RETURNS SORT╤ AND SORT╨ TO STRADDLE THE NEW LINE POSITION. ╬OTE
- THAT THIS ROUTINE CAUSES THE LIST TO BE IN REVERSE ORDER AS DISCUSSED
- EARLIER.
-
- .%0907! POSITION╠INE = *
-
- ╙ET ╨ TO HEAD AND ╤ TO ╬ULL.
-
- .%0908! LDX #2
- .%0909! - LDA #BK╬ULL
- .%0910! STA SORT╤,X
- .%0911! LDA SORTHEAD,X
- .%0912! STA SORT╨,X
- .%0913! DEX
- .%0914! BPL -
- .%0915!
- .%0916! POSITION╙EARCH = *
-
- ╘HIS ROUTINE BREAKS OUT IF THE CURRENT LINE POINTER IS ╬ULL. ╧THERWISE, IT
- FETCHES THE CURRENT LINE POINTER (SORT╨) INTO THE CMPLINE BUFFER AND CALLS THE
- STRING COMPARE ROUTINE. ╔F THE NEW LINE READ IN FROM THE FILE IS GREATER THAN
- OR EQUAL TO THE CURRENT LINE ALREADY IN THE LIST, THE SEARCH KICKS OUT. ╘HE
- "BCS" ON LINE 924 CONTROLS THE ORDER OF THE SORT. ╧THERWISE, THE ╨ AND ╤
- POINTERS ARE UPDATED IN THE USUAL WAY AND THE SEARCH CONTINUES.
-
- .%0917! LDA SORT╨+2
- .%0918! CMP #BK╬ULL
- .%0919! BEQ POSITION┼XIT
- .%0920! LDA #<CMPBUF
- .%0921! LDY #>CMPBUF
- .%0922! JSR FETCHLINE
- .%0923! JSR SORT╟╘CMP
- .%0924! BCS POSITION┼XIT ;** CONTROLS SORT ORDER
- .%0925! LDX #2
- .%0926! - LDA SORT╨,X
- .%0927! STA SORT╤,X
- .%0928! LDA CMPBUF,X
- .%0929! STA SORT╨,X
- .%0930! DEX
- .%0931! BPL -
- .%0932! BMI POSITION╙EARCH
- .%0933!
- .%0934! POSITION┼XIT = *
-
- ┴T THIS POINT, SORT╨ AND SORT╤ STRADDLE THE POSITION TO PUT THE NEW LINE, SO
- WE RETURN.
-
- .%0935! RTS
- .%0936!
- .%0937! ;*** STORELINE( SORTLINE ) █BETWEEN SORT╤ AND SORT╨▌
- .%0938!
-
- ╘HIS ROUTINE ACTUALLY STORES THE NEW LINE READ IN BETWEEN THE SORT╤ AND SORT╨
- LINES.
-
- .%0939! STORELINE = *
-
- ╞IRST, SPACE FOR THE NEW LINE IS ALLOCATED.
-
- .%0940! LDA SORTBUFLEN
- .%0941! LDY #0
- .%0942! JSR MALLOC
- .%0943! BCC +
- .%0944! RTS
-
- ┴ND THE NEW LINE'S NEXT POINTER IS SET TO POINT TO SORT╨.
-
- .%0945! + LDX #2
- .%0946! - LDA SORT╨,X
- .%0947! STA SORTBUF,X
- .%0948! DEX
- .%0949! BPL -
-
- ┴ND THE NEW LINE IS STASHED OUT TO MAIN MEMORY.
-
- .%0950! LDA #<SORTBUF
- .%0951! LDY #>SORTBUF
- .%0952! STA ZW1
- .%0953! STY ZW1+1
- .%0954! LDA SORTBUFLEN
- .%0955! LDY #0
- .%0956! JSR STASH
-
- ╬OW ALL THAT IS LEFT TO IS MAKE THE PREVIOUS LINE RECORD (SORT╤) POINT TO THE
- NEW LINE RECORD.
-
- .%0957! LDA SORT╤+2
- .%0958! CMP #BK╬ULL
- .%0959! BEQ STORELINE╞IRST
-
- ╔F THERE IS AN ACTUAL PREVIOUS LINE, THE NEW LINE POINTER IS WRITTEN OUT OVER
- THE NEXT LINE POINTER IN ITS HEADER.
-
- .%0960! LDX #2
- .%0961! - LDA ZP1,X
- .%0962! LDY SORT╤,X
- .%0963! STA SORT╤,X
- .%0964! STY ZP1,X
- .%0965! DEX
- .%0966! BPL -
- .%0967! LDX #SORT╤
- .%0968! LDY #3
- .%0969! JSR ZPSTORE
- .%0970! CLC
- .%0971! RTS
- .%0972!
-
- ╔F THERE IS NO ACTUAL PREVIOUS LINE, THEN THE LINE LIST HEAD POINTER IS SET TO
- POINT TO THE NEW LINE (WHICH IS NOW THE FIRST LINE ON THE LIST).
-
- .%0973! STORELINE╞IRST = *
- .%0974! LDX #2
- .%0975! - LDA ZP1,X
- .%0976! STA SORTHEAD,X
- .%0977! DEX
- .%0978! BPL -
- .%0979! CLC
- .%0980! RTS
- .%0981!
- .%0982! ;*** READFILE()
- .%0983!
-
- ╘HIS ROUTINE READS IN THE FILE AND PUTS THE LINES INTO THEIR CORRECT SORTED
- POSITIONS AS IT IS READING.
-
- .%0984! READFILE = *
-
- ├LEAR THE LINE LIST BY SETTING THE HEAD POINTER TO ╬ULL.
-
- .%0985! LDX #2
- .%0986! LDA #BK╬ULL
- .%0987! - STA SORTHEAD,X
- .%0988! DEX
- .%0989! BPL -
-
- ╙ET THE ┼╧╞ FLAG TO 0 AND SET THE CURRENT INPUT CHANNEL TO LOGICAL FILE #1
- WHICH IS ASSUMED TO BE OPENED BEFORE THE SORT UTILITY IS INVOKED.
-
- .%0990! LDA #0
- .%0991! STA EOFSTAT
- .%0992! LDX #1
- .%0993! JSR KERNEL├HKIN
- .%0994! BCS READ┼XIT
-
- ╒NTIL ┼╧╞, READ THE NEW LINE, FIND THE POSITION IN THE LINE LIST, STORE IT,
- PRINT OUT A "." TO INDICATE TO THE USER THAT ANOTHER LINE HAS BEEN PROCESSED,
- AND REPEAT. ┼XIT ON ┼╧╞.
-
- .%0995! - JSR GETLINE
- .%0996! BCS READ┼XIT
- .%0997! JSR POSITION╠INE
- .%0998! JSR STORELINE
- .%0999! BCS READ┼XIT
- .%1000! LDA #"."
- .%1001! JSR ECHO╙TATUS
- .%1002! JMP -
- .%1003!
- .%1004! READ┼XIT = *
- .%1005! RTS
- .%1006!
- .%1007! ;*** WRITEFILE()
- .%1008!
-
- ╘HIS ROUTINE WRITES THE LINE LIST OUT TO LOGICAL FILE NUMBER 2 WHICH IS
- ASSUMED TO BE OPENED BEFORE THE SORT UTILITY IS INVOKED. ╘HIS ROUTINE FOLLOWS
- THE STANDARD STRUCTURE FOR PROCESSING A LINKED LIST.
-
- .%1009! WRITEFILE = *
- .%1010! LDX #2
- .%1011! - LDA SORTHEAD,X
- .%1012! STA SORT╨,X
- .%1013! DEX
- .%1014! BPL -
- .%1015! LDX #2
- .%1016! JSR KERNEL├HKOUT
- .%1017!
- .%1018! WRITE╠INE = *
- .%1019! LDA SORT╨+2
- .%1020! CMP #BK╬ULL
- .%1021! BEQ WRITE┼XIT
- .%1022! LDA #<SORTBUF
- .%1023! LDY #>SORTBUF
- .%1024! JSR FETCHLINE
- .%1025! JSR PUTLINE
- .%1026! LDX #2
- .%1027! - LDA SORTBUF,X
- .%1028! STA SORT╨,X
- .%1029! DEX
- .%1030! BPL -
- .%1031! JMP WRITE╠INE
- .%1032!
- .%1033! WRITE┼XIT = *
- .%1034! JSR KERNEL├LRCHN
- .%1035! RTS
- .%1036!
- .%1037! ;*** REVERSE╠IST()
- .%1038!
-
- ╘HIS ROUTINE WILL REVERSE THE ORDER OF THE LINE LIST. ╙TARTING FROM THE HEAD
- LINE, EACH LINE IS EXTRACTED AND IS MADE TO POINT TO THE PREVIOUS LINE
- EXTRACTED. ╬O DATA ACTUALLY HAS TO BE MOVED AROUND; ONLY THE HEADERS OF THE
- LINE RECORDS HAVE TO BE CHANGED.
-
- .%1039! REVERSE╞ILE = *
- .%1040! LDX #2
- .%1041! - LDA SORTHEAD,X
- .%1042! STA ZP1,X
- .%1043! LDA #BK╬ULL
- .%1044! STA SORTHEAD,X
- .%1045! DEX
- .%1046! BPL -
- .%1047!
- .%1048! REVERSE╠INE = *
- .%1049! LDA ZP1+2
- .%1050! CMP #BK╬ULL
- .%1051! BEQ REVERSE┼XIT
-
- ╞ETCH THE POINTER FROM THE CURRENT LINE INTO SORT╨ AND THEN REPLACE IT WITH
- THE VALUE AT SORTHEAD (THE PREVIOUS LINE ALTERED).
-
- .%1052! LDX #SORT╨
- .%1053! LDY #3
- .%1054! JSR ZPLOAD
- .%1055! LDX #SORTHEAD
- .%1056! LDY #3
- .%1057! JSR ZPSTORE
-
- ═AKE SORTHEAD POINT TO THE CURRENT LINE, AND THEN GO TO THE NEXT LINE WHOSE
- POINTER WAS EXTRACTED FROM THE CURRENT LINE (BEFORE THE CURRENT LINE WAS
- CHANGED).
-
- .%1058! LDX #2
- .%1059! - LDA ZP1,X
- .%1060! STA SORTHEAD,X
- .%1061! LDA SORT╨,X
- .%1062! STA ZP1,X
- .%1063! DEX
- .%1064! BPL -
- .%1065! BMI REVERSE╠INE
- .%1066!
- .%1067! REVERSE┼XIT = *
- .%1068! RTS
- .%1069!
- .%1070! ;*** FREEFILE()
- .%1071!
-
- ╘HIS ROUTINE SCANS THROUGH THE LINES IN THE LINE LIST AND DEALLOCATES EACH
- LINE RECORD.
-
- .%1072! FREEFILE = *
- .%1073! LDX #2
- .%1074! - LDA SORTHEAD,X
- .%1075! STA ZP1,X
- .%1076! DEX
- .%1077! BPL -
- .%1078!
- .%1079! FREE╠INE = *
- .%1080! LDA ZP1+2
- .%1081! CMP #BK╬ULL
- .%1082! BNE +
- .%1083! RTS
- .%1084! + LDX #HEADER
- .%1085! LDY #4
- .%1086! JSR ZPLOAD
- .%1087! LDA HEADER+3
- .%1088! LDY #0
- .%1089! JSR FREE
- .%1090! LDX #2
- .%1091! - LDA HEADER,X
- .%1092! STA ZP1,X
- .%1093! DEX
- .%1094! BPL -
- .%1095! JMP FREE╠INE
- .%1096!
- .%1097! ;*** MAIN()
- .%1098!
-
- ╞INALLY! ╘HE MAIN ROUTINE SETS THE SORT KEY COLUMN AND CALLS EACH OF THE
- SUBROUTINES FOR THE DIFFERENT PHASES OF THE SORT AND PRINTS OUT A LETTER
- INDICATING WHAT THE PROGRAM IS CURRENTLY DOING.
-
- .%1099! MAIN = *
- .%1100! CMP #1
- .%1101! BCC +
- .%1102! SBC #1
- .%1103! + STA SORT├OLUMN
- .%1104! LDA #"S"
- .%1105! JSR ECHO╙TATUS
- .%1106! JSR STARTUP
- .%1107! LDA #"R"
- .%1108! JSR ECHO╙TATUS
- .%1109! JSR READFILE
- .%1110! LDA #"V"
- .%1111! JSR ECHO╙TATUS
- .%1112! JSR REVERSE╞ILE
- .%1113! LDA #"W"
- .%1114! JSR ECHO╙TATUS
- .%1115! JSR WRITEFILE
- .%1116! LDA #"F"
- .%1117! JSR ECHO╙TATUS
- .%1118! JSR FREEFILE
- .%1119! LDA #"X"
- .%1120! JSR ECHO╙TATUS
- .%1121! JSR SHUTDOWN
- .%1122! LDA #13
- .%1123! JSR ECHO╙TATUS
-
- ╔T RETURNS WITH .┴ SET TO ZERO IN CASE THE USER CALLS SORT AGAIN AND FORGETS
- TO SPECIFY A VALUE FOR THE SORTING COLUMN USING THE ┬┴╙╔├ ╙┘╙ STATEMENT.
-
- .%1124! LDA #0
- .%1125! RTS
-
- ------------------------------------------------------------------------------
-
- 5. ╞╒╘╒╥┼ ┼╬╚┴╬├┼═┼╬╘╙
-
- ╘HIS DYNAMIC MEMORY ALLOCATION PACKAGE DOES NOT SUPPORT EXPANDED INTERNAL
- MEMORY (AS SPECIFIED IN ╘WIN ├ITIES-128 ═AGAZINE) OR ╥AM╠INK MEMORY. ╔ AM
- PLANNING TO MODIFY THE MEMORY ALLOCATION IN THE ┌ED-128 PROGRAM TO SUPPORT
- BOTH OF THESE KINDS OF MEMORY. ╘HE EXTRA INTERNAL MEMORY BANKS WOULD BE
- ACCESSED IN A SIMILAR MANNER AS ╥┴═1 IS, EXCEPT THAT ╔ WILL NEED TO HAVE SOME
- SPECIAL BANK NUMBERS FOR THEM, SINCE THEY CANNOT BE HANDLED IN EXACTLY THE
- SAME WAY AS ╥┴═0 AND ╥┴═1. ╔ WILL ALSO HAVE TO MODIFY THAT OTHER ══╒ REGISTER
- IN ORDER TO SELECT WHICH REAL BANKS SHOW UP IN THE ╥┴═2 AND ╥┴═3 POSITONS.
-
- ╘HE MEMORY INSIDE A ╥AM╠INK CAN BE ACCESSED IN A SIMILAR WAY TO HOW MEMORY IS
- ACCESSED IN AN ╥┼╒. ╧NE BIG DIFFERENCE IS THAT THE LAYOUT OF THE STORAGE IN A
- ╥AM╠INK IS ACTUALLY ORGANIZED. ┴ ╥AM╠INK (AND A ╥AM─RIVE ╔ ASSUME) CAN HAVE
- UP TO 31 PARTITONS OF VARIOUS TYPES. ╔ AM THINKING THAT TO SNIFF A ╥AM╠INK,
- THE PACKAGE WILL CHECK TO SEE IF YOU HAVE A ╥AM╠INK AND WILL THEN CHECK TO SEE
- IF YOU HAVE PARTITON NUMBER 31 SET UP AS A "FOREIGN" MODE PARTITION WITH THE
- NAME "SWAP". ╔F SO, THE PACKAGE WILL ASK THE ╥╠-─╧╙ FOR THE START ADDRESS AND
- LENGTH OF THE PARTITION AND WILL THEN USE THE ╥AM╠INK MEMORY INSTEAD OF AN
- ╥┼╒. ╘HIS MAKES SENSE SINCE AN ╥┼╒ CAN BE MADE INTO BE PART OF THE ╥AM╠INK
- AND SINCE YOU CAN GET A LOT MORE MEMORY IN A ╥AM╠INK THAN ╔ HAVE EVER HEARD OF
- IN AN EXPANDED ╥┼╒. ╔ PERSONALLY HAVE AN 8 ═EG ╥AM╠INK AND ╔ HAVE SET ASIDE A
- 1 ═EG PARTITION FOR THE SWAP SPACE. ╬OW ╔ JUST HAVE TO WRITE THE SOFTWARE TO
- USE IT.
-
- ╘HESE ADDITIONAL TYPES OF MEMORY CAN BE SEEMLESSLY IMPLEMENTED INTO THIS
- PACKAGE AND THE USAGE WILL BE COMPELETELY TRANSPARENT TO THE USER AND TO THE
- HIGHER LEVEL ROUTINES.
-
- ┴LSO, ALTHOUGH ╔ HAVE NOT ATTEMPTED TO DO THIS, THE CODE PRESENTED HERE COULD
- BE PORTED TO THE ├OMMODORE 64. ╘HE COMMON CODE ROUTINES WOULD BE REMOVED
- SINCE THE 64 HAS ONLY ONE INTERNAL BANK, AND INSTEAD OF USING THE ══╒ TO
- SELECT ╥┴═0, YOU WOULD STORE INTO THE PROCESSOR ╔/╧ PORT TO SELECT THE BARE
- INTERNAL ╥┴═. (┘OU WOULD ALSO HAVE TO WORRY ABOUT INTERRUPTS HAPPENING WHILE
- YOU ARE ACCESSING THIS MEMORY). ┴LL OF THE HIGHER LEVEL CODE ABOVE THE
- ZPLOAD, ZPSTORE, FETCH AND STASH ROUTINES WOULD (PROBABLY) STAY (PRETTY MUCH)
- THE SAME, SINCE THEY CALL THE LOWER LEVEL ROUTINES TO DO THE ACTUAL
- MACHINE-SPECIFIC GRUNT WORK.
-
- ╔F YOU HAVE ANY QUESTIONS OR COMMENTS ABOUT THIS ARTICLE, FEEL FREE TO DROP ME
- A LINE.
-
- ------------------------------------------------------------------------------
-
- 6. ╒╒┼╬├╧─┼─ ┬╔╬┴╥╔┼╙
-
- ╚ERE ARE THE ┬┴╙╔├ PROGRAM AND THE MACHINE LANGUAGE SUBROUTINES FOR THE
- SORTING UTILITY. ╘HEY ARE IN UUENCODED FORM AND YOU WILL PROBABLY HAVE TO
- EXTRACT THEM INTO A SEPARATE FILES BEFORE YOU UUDECODE THEM. ┼NJOY!
-
- BEGIN 640 SORT ═└1╨╞'└$└222╥(─┼.4%541─┼,12┘46%0┬(#╚@242╥."└┌(%-&╠├$└11╨"└$\─
- ═╠┬)/5510551&24╤%+┼185"(@.┬!/1+(╪└$╠<└╨└┌└&8<9└"9(─╤/041)3─<@
- ═4╘]25"┘"24╪╬+┬╪┬└'└<;@#^└┬└╤-0"'''@└_┴$┬4╘]25"┘"24╪┬+%4╚240╔
- ═└*4<@@"9(┼-#4─%40╘┴)3─<@3╘╤$($9)3$4╬+┬╪┬└+4<├└#╥*$\─*2╤5*$]$
- ═*0#'')8└╞2)33╒)424┘'+┬╪╬(@#;'*└└╟╙$╠240╠,┬╨┬,#╚┬╩───└/8<╩@"?
- ═,┬╤/1"╨╙+"(╨.┬*╩3╥2╩(┬╤3+%<┬└└─=═└">(-$╚(├$╙,#└┬*2╤31@└0';╪└
- =╚#(└%╤╫(└*└╤└"@=╘@"9(─9)3─┼32$5$(2(└└└└╚ └ END
-
- BEGIN 640 SORT.BIN
- ═└!-,╔!┼,(╤-,-┴-,╥!-,_┴-,#11,;11,└╤9,╥18└└└└└└└└└└*─└2"┬╔#╚╘└
- ═_╥!($╥#\%""╟%6"┬└*─└╟0└"┌.!╥╘/┬╔└(╘└_╓"┬└+╒6$┘╘└└╬├@<╔#╒8*7\
- ═├0#_┴/╓@└+'┌┼0#╚╥,3]─/:╔#╚╘└_╓"┼_(╘└_╪3]╚└"╒└)'┌┌,├$_9#╓╩0┌-
- ═└/]@┬/└-├0+_╠?╩-└?^1_╚├0\╪╘"_['┌├0'_─?┌╔#╚╘└_╓"(\└╓-└?^╤_╚╘"
- ═_┘'┌┬-#╙├0'_╠?┌-└╧^1^╩─.├0#_8*7\,└-,└└*,!]^@─8╘&╫╪╪"╫┌╘'╒8╘#
- ═╫┌7┌├03?╔?╬-!=^╔└(╘(╫┌╘╨╘*(└├├#0├└'?├3#08*7\,└-,&0*,!]^@─$╙4
- ═$┌;\$└6┬─4╙-%,└└╘"*╚╘└%@╪#_╨└╘╨╥└╚╪└_╪├╨!['┌─?┌(╘/╞╤^╔'^╩0┌-
- ═└/]@┴8"$@:7[┴8*┼_╪6#╔8'╨#┌;\╚└└@'┴3╞^^;_╤╚'0\:2└\└6╞_"└>%*6"
- ═┴?╬┼@╪7_8*;\$└6┬─$╙-%,└└╘"*╚╘└%@╪#_╨└╘╤2└╚╪└_╪├╨!['^─?╩(╘/╞╤
- ═_╔'┌╩0┌-└/]@┴8"$@:7_┴8*┼^╪6#╔8'╨#┌;\╚└└@?┴3╞^^;_╤╚'0\:2└\└6╞
- ═_"!^%*6"┴?^┼@╪7[8(╘'╫╪╨(╫┌7^╔/^-└═^,└]^┼^╩3[├03?├└7?╔?╥-!═^╠
- ═,-"╔└(╘╨╘(╪!╫╪╨╨╘&!_╩3^-└/^┬"╦╘└╫┘╘└"\╚0]┌─.├0#_╩0"-"=^-"═^═
- ═└-^┬└╦╓┴%96└╥┴#╪╩0"-'!.╔└**└┴?╩%^╪;\(%╨5╠└?╬'!/╞_-#╘╦1╨3╘!6╔
- ═/╪╘└_┌(*╧0└+╟0#?╥┴#╫╩0┌-└/]@╦1╨3╙?╠4─└%@╔?╥%@┌*└╚└0@#!,@┴16╨
- ═#┌7\2*╞└┴?╥%@╥"%%6┬%_&"╔└(6$┴8>┬┴*└$(└─3╚@.╒┴-6└╘└7*$/<88#┴@
- ═4╠┼$0└3[╚@*╔└)╘@$┌╟_╟1╘3╥┴#╙.*╘2$╧└!&*╘3$╬╓─%:┬═╔!6┬/╥#╪%:╓┼
- ═%:╥╞%:)_(/@5╩0"%├┌6/╙1╨3╠!4)@(7\╩0"%^╚7[╩?┬@_╥└8$^:/╘.1@┴?╬&
- ═_*─└┴?╔,&!,8:0>0└<@╔^(6%┴(:┬└╦╘=$┘7┌╩?^5┴\╚0]*7\╥?_0#┌╟_┴?╩%
- ═^╪7\╩0&-&╤,╪8**└╚└4@"1.┼@\6%╔83┼┴╦└0╚@*╒^╔6'═8"5^╠╚0]4╨=%├┬═
- ═(!/┼┴8╘@$┌╘┴$^6&├2$3╠└/.(┴.┼@\6%╘└:┼┴.6&\",╪╔8/┼┴86#╔83┼┴╚6$
- ═╚╚"@!2└,$╤┬┼^╞6#┴?╩┼^╓6$┴?╠88*6)╥?_0#*("═8"='1/*$/@88*("═?╩╘
- ═┴┘6'┼/╦*$/6┬@*└#(└╨3╚@*╒┴┘7┌╥┴#┘&&└8:0>0└<@╔^(6%┴(:┬└╦7┌┼8>]
- ═'1.5^╩╟_┼8╦*$/"┼_,╟_\"┬┼_,6)─"+0"╩7┌╤8>┼^^6(╠!:┬@*└#(└─3╚@*╒
- ═^╔6*═8"5^╠╚0]3#2╚@*╒┬╔7┌╥┴#┘╔?╙)_]└:╚@*]'1.5@+6'╟1╘3╥┴#╙╔86─
- ═┴╚6#┴(1,┴!>┬@*└%(└─3╔?╙%┬=└╩&*7┌98.╩╔?═┼┴,6(╘!╙─┴]└8&*6#986%
- ═@┌6$98:%┴*("═8╩5┴\╚0^3└/╚╚>@└╥└,$┌6%╔(:%@╪2$╔8╟%@═└╙&*6'98.╩
- ═╔8┴┼┴,6!╘"7─@-└┴╚@*╒@)7┌╥┴#┘╔81(╔8-(╚╚"@!2└)$╤┴╚98.%@╓┴┼┴(6$
- ═╚@*╒┴┘7┌╥┴#┘╚╚"@!2└,$╤┬═(!-┼┴8╘@$┌╘┴$╓6&├2$3─└/╬(┴,88*└└)└)╨
- ═)"#/_[└?╞00+╥*:0┴@+└\+└%╥0╫0┘╪┬╔└)─$"╤┬8:06-└╨╠88*┼└┴0+└└-#╩
- ═.&"@└+─$"_└&(-+_╥-#╒╩0╒,╘╧^%_╚3_╚@*╒!╔7┌╥┴#┘╚@╥@!"└)$┌4/╚└!,
- ═#╤.┬└!┬═_╨┴╔!<╘#"┘└!┌,╘#")└"┌.┬*\└/)└╞"╠_╨┬┘!└╧9!└├0!\─└\└/(
- ═╘/%@╚@*╔_┘4)═0.5!╠╚0]:4(╥?_╨'*─└╚└@@*╤@@1┴┬╨$*("═0:5";╘└")4&
- ═╥┴#╘,-┘@╦0,+╚└└@%1.0└6"┬└╦4&╟0└+╥┴#╪╩0"@"╪7^┴/^═└╨╬@└"└2$┌4+
- ═╥?_╨%╩("═?╩╘"94)┼/╦*$/6┬":└#(└╨3&&"┬└╦7┌┼0/*$/─88*("╩?^5└\╚0
- ═^┌─└┴0*┬└2#&_[└5(.47╠!└@=!@@╔!┬╨"*─╬(-+_3└098*("═0.5!╠╚0^:("
- ═(,╟_╔0├)__└7╩0"@"╥└╦&"└9&*("╧0└+┼0;*$/┴,*!─@╙/]@╚@*╒└┘7┌╩?^5
- ═└\╚0]:7\╥?_╨':(&╚└,@"1.┬└┌└#(└╨3╚@*╒^╔4#═0:5^╠╚0]3#=8*("═0.5
- ═^╠╚0^:7\╥?_0└6"┬#*└$(└─3╔0^@└"└8$┌("═0╥5^╠╚0^4╥#&<─!─└+╔└8╫_
- ═"*┼3(-+_(└,3╩5(@╘╧\@\!┬╔5┬#2_╥!)&:┼7(-+_(!╚9╩48@╘╧\@>┴╞╔6"#2
- ,_╥└&$┌─-(-+_╩0!@ └ END
-
- ============================================================================
- ╬EXT ╔SSUE: (╚OPEFULLY!!! :-] )
-
- ╘HE 1351 ═OUSE ─EMYSTIFIED
-
- ┴N INDEPTH LOOK AT HOW THE 1351 MOUSE OPERATES AND HOW TO ACCESS IT WITHIN
- YOUR ═╠ PROGRAMS, IN ADDITION TO A ┬┴╙╔├ DRIVER FOR THE 80 COLUMN SCREEN.
-
- ═╠ ╘UTOR - ╨ART 3
-
- ╔N THIS EDITION WE TAKE A LOOK AT READING AND WRITING COMMANDS TO THE DISK
- DRIVE, INCLUDING READING THE DISK DIRECTORY. ╘HIS ARTICLE WILL ALSO PARALLEL
- THE DISCUSSION OF THE ├=128 AND ├=64 ╦┼╥╬┴╠ JUMP TABLES OF AVAILABLE ROUTINES.
-
- ╦┼╥╬┴╠ 64/128
-
- ╘HE ├=128 AND ├=64 JUMP TABLE THAT POINTS TO MANY VALUABLE SYSTEM ROUTINES IS
- LISTED AND DISCUSSED WITH EXAMPLE APPLICATIONS AND HOW TO USE THEM.
-
- ┬URSTING YOUR 128
-
- ╘HIS ARTICLE WILL EXAMINE THE ROUTINES AND MYSTERIES ABOUT HOW TO USE ┬URST
- COMMANDS ON THE 1571 AND 1581. ╘HESE ROUTINES WILL BE EXTRACT FROM ┌ED-128.
- ============================================================================
- ┼╬─ OF ├= ╚ACKING ╔SSUE 2.
- ============================================================================
-
-