ÄÔÊ-ÂÂÓ ÐROGRAMMER'S ÉNFORMATION 2/23/91 - ÐRELIMINARY ÆOR REVISIONS 910202 AND HIGHER ------------------------------------------------------------------------------ ÔHE INFORMATION GIVEN IN THIS TEXTFILE IS FOR THE USE OF PROGRAMMERS WHO WISH TO WRITE THEIR OWN Å[Ø]Åà MODULES FOR THE ÄÔÊ-ÂÂÓ. ÕSE THIS INFORMATION AT YOUR OWN RISK! ÄÔÊ ÓOFTWARE ASSUMES NO RESPONSIBILITY FOR ANY DAMAGE CAUSED BY THE USE OF THIS INFORMATION. ÔHE INFORMATION IN THIS TEXTFILE IS SUBJECT TO CHANGE WITHOUT NOTICE! ------------------------------------------------------------------------------ ÔHIS TEXTFILE CONTAINS A MAP OF MEMORY LOCATIONS USED BY THE ÄÔÊ-ÂÂÓ. ÁLTHOUGH MOST OF THESE LOCATIONS ARE NOT USABLE BY MODULES YOU MAY PROGRAM, SOME ARE, AND THE REST ARE INCLUDED SO THAT YOU WILL KNOW WHICH MEMORY LOCATIONS ARE USED BY THE ÂÂÓ. ÌOCATIONS MARKED FOR FUTURE USE SHOULD NOT BE USED BY YOUR PROGRAM AS THEY MAY CREATE CONFLICTS IN FUTURE REVISIONS OF THE ÂÂÓ. ÔHIS MEMORY MAP ALSO LISTS THE ENTRY POINTS FOR THE VARIOUS MACHINE LANGUAGE ROUTINES USED BY THE ÄÔÊ-ÂÂÓ. ÔHE MAJORITY OF THESE ROUTINES ARE ÎÏÔ INTENDED TO BE USED BY YOUR PROGRAMS. ÈOWEVER, THERE ARE A COUPLE THAT YOU CAN USE, AND THE USE OF THESE ROUTINES IS DESCRIBED LATER IN THIS TEXTFILE. ÐLEASE DO NOT USE ANY ÂÂÓ MACHINE LANGUAGE ROUTINES OTHER THAN THE ONES DESCRIBED AFTER THE MEMORY MAP! ÍOST ROUTINES ARE SUBJECT TO CHANGE, AND MAY EVEN VARY WITHIN THE SAME REVISION UNDER DIFFERENT HARDWARE CONDITIONS. ÂESIDES THE MEMORY LOCATIONS LISTED HERE, THE ÂÁÓÉà AND ËERNAL ROUTINES ALSO USE THEIR OWN MEMORY LOCATIONS. ÔHE USE OF THEM ARE DESCRIBED IN MEMORY MAP BOOKS FOR THE ÃOMMODORE 64. ÔHE FOLLOWING ÒÁÍ LOCATIONS ARE AVAILABLE FOR YOUR USE: ÚERO PAGE: 02, 92H, 96H, 9Â-9ÃH, 9Å-9ÆH, ÂÅ-ÂÆH, Ã1-Ã4H. ÏTHER: 0310-0313H, 032Å-032ÆH, 0334-033ÂH, 03ÆÃ-03ÆÆH, 07Æ8H, 07ÆÄ-07ÆÆH, Ã000-Ã11ÂH. ÓOME OF THESE ADDRESSES ARE LISTED AS USED IN VARIOUS ÃOMMODORE 64 MEMORY MAPS, BUT YOU SHOULD BE ABLE TO USE THEM WITHOUT CAUSING ANY PROBLEMS. ÔHE VALUES STORED IN THESE LOCATIONS WILL NOT BE DESTROYED AFTER YOUR MODULE RETURNS CONTROL TO THE ÂÂÓ PROGRAM. ÙOU MAY ALSO USE ANY MEMORY LOCATION LISTED BELOW AS USED FOR TEMPORARY STORAGE, BUT REMEMBER THAT VALUES STORED IN THESE LOCATIONS ARE SUBJECT TO CHANGE AFTER YOUR MODULE HAS RETURNED CONTROL BACK TO THE ÂÂÓ. Á ÂÁÓÉà VARIABLE LIST IS ALSO GIVEN. ÍOST OF THESE VARIABLES WILL NOT BE USABLE BY YOUR PROGRAM, BUT THEY ARE ALL LISTED ANYWAY JUST TO MAKE THE LISTING COMPLETE. ------------------------------------------------------------------------------ ÄÔÊ-ÂÂÓ ÍEMORY ÍAP (ÒEVISION 910119): ------------------------------------------------------------------------------ ÓIMPLIFIED (SHOWS ÒÁÍ UNDER ÒÏÍ): ------------------------------------------------------------------------------ 0000 - ÓYSTEM/ÂÂÓ ÒÁÍ VARIABLES 0400 - ÖIDEO ÍEMORY 0800 - ÃOMPLIED ÂÁÓÉà CODE & VARIABLES 9Å34 - Í.Ì. ÍODULE (Ó.5) (ÔERMINAL / ÂAUDRATE TUNING FUNCTIONS) Á000 - ÅDITOR/ÐROTOCOL/ÅXEC-MODULE BUFFER Â158 - ÄATA ÍODULE (Ó.3) (CONFIGURATION DATA) ÂÂ4Å - Í.Ì. ÍODULE (Ó.4) (ÅDITOR & ÆILESERVER FUNCTIONS) Ã000 - ÂUFFER AREAS Ã15Æ - Í.Ì. ÍODULE (Ó.2) (ÉNIT. AND MAIN Í.Ì.) Ä000 - É/Ï ÐORTS (ÒÁÍ UNUSED - FUTURE USE) Å000 - ÂASES FILE MESSAGE POINTERS Æ72à - ÄATA ÍODULE (Ó.6) (ÁWAITING-ÃALL ÓCREEN / ÓHAREWARE SCREEN) ------------------------------------------------------------------------------ ÄETAILED ÍEMORY ÍAP (SHOWS ÄÔÊ-ÂÂÓ UNIQUE ADDRESSES ONLY): ------------------------------------------------------------------------------ 0001 - ÂANK SWITCH PORT ÔHE ÄÔÊ-ÂÂÓ STORES THE EDIT BUFFER, LOADABLE MACHINE LANGUAGE MODULES, SOME ADDITIONAL MACHINE LANGUAGE, AND THE S.3 CONFIGURATION FILE UNDER THE ÂÁÓÉà ÒÏÍ. ÍESSAGE POINTERS AND TABLES, THE AWAITING- CALL SCREEN, SHAREWARE NOTICE SCREEN, AND ËERNAL ÒÏÍ ÎÍÉ ROUTINES ARE STORED UNDER THE ËERNAL ÒÏÍ. 008Â-008à - ÁÃÉÁ BASE É/Ï POINTER (ÓWIFTLINK ONLY). 008Ä - ( FUTURE USE ). 008Å - ÍENU-ÁBORT ÅNABLE FLAG ÓTORING A NON-ZERO VALUE HERE CAUSES ALL FILE #2 OUTPUT (THE ÂÂÓ OUTPUT CHANNEL) TO BE DISCARDED WHEN THERE IS DATA IN THE ÒÓ-232 INPUT BUFFER. ÔHIS LOCATION IS ZEROED WHEN THE ÂÂÓ REQUESTS INPUT FROM THE USER. ÔHIS LOCATION IS USED TO IMPLIMENT THE ÂÂÓ "QUICK-KEYS". 008Æ - ( FUTURE USE ). 00Á0-00Á2 - ÊIFFY CLOCK - USED FOR PROTOCOL TIMING AND TIMEOUT CHECKS. 00Á5/00Á6 - ÕSED BY ÉÒÑ ROUTINE. 00Â0/00Â1 - ÔEMPORARY WORK POINTER. 00Â2/00Â3 - ÔEMPORARY WORK POINTER. 00ÆÂ/00Æà - ÕSED BY ÏÐÅÎ ROUTINE. 00ÆÄ/00ÆÅ - ÔEMPORARY WORK POINTER. 02Á7 - ÂÂÓ ÉNPUT/ÏUTPUT ÃONTROL. ÃONTROLS É/Ï THROUGH THE ÂÂÓ É/Ï CHANNEL (FILE #2). ÖALID VALUES ARE: ÂIT 0 - 0 = ÁÓÃÉÉ TRANSLATION OFF 1 = ÁÓÃÉÉ TRANSLATION ON ÂIT 1 - 0 = ÒÓ-232 É/Ï ONLY 1 = ÒÓ-232 AND CONSOLE É/Ï (ÂOTH BITS ZERO ALLOWS RAW ÒÓ-232 É/Ï, OTHERWISE LINEFEED AND XON/XOFF FLOW CONTROL ARE ACTIVE.) 02Á8 - ÍODEM DEVICE NUMBER. ÎORMALLY 2, HOWEVER MAY BE CHANGED TO 4 TO ROUTE OUTPUT TO PRINTER. ÓINCE THIS SHOULD ONLY BE DONE ON CONSOLE MODE, DO NOT CHANGE THIS LOCATION IN YOUR MODULES. 02Á9 - ÃARRIER-DETECT MASK. ÁLLOWS FOR CARRIER-DETECT TO BE TURNED ON OR OFF. ÔHIS IS USED TO PREVENT DROPPED CARRIER CONDITIONS DURING CONSOLE MODE WHILE IN MACHINE LANGUAGE ROUTINES. (ÂÁÓÉà HAS IT'S OWN CARRIER-DETECT MASK VARIABLE.) ÖALID VALUES ARE: #$00 - ÂÂÓ IGNORES CARRIER #$10 - ÂÂÓ DETECTS CARRIER 02ÁÁ - ÌINEFEED FLAG. Á NON-ZERO VALUE WILL SEND A LINEFEED AFTER EACH #$0Ä CODE SENT TO THE MODEM IF THE ÂÂÓ INPUT/OUTPUT CONTROL IS NON-ZERO. 02Á - ØÏÆÆ FLAG. Á NON-ZERO VALUE WILL PAUSE OUTPUT VIA THE ÂÂÓ OUTPUT CHANNEL IF THE ÂÂÓ INPUT/OUTPUT CONTROL IS NON-ZERO. 02Áà - ÖIDEO WIDTH. ÃURRENT VIDEO WIDTH (MUST BE BETWEEN 20 AND 80). 02ÁÄ - ÌAST KEY PRESSED WHILE IN FILE SERVER. ÕSED BY ÂÁÓÉà PORTION OF ÂÂÓ TO DETERMINE IF USER [Á]BORTED, [Ó]KIPPED, OR [Î]EXT'ED THE FILE OUTPUT. 02ÁÅ - ÁBORT FLAG. ÕSED BY FILE SERVER. ÎON-ZERO VALUE ABORTS FILE OUTPUT. 02ÁÆ - ÂUFFER FILE NUMBER. ÕSED BY BUFFER LOAD/SAVE ROUTINES. 02Â0 - ÂAUD-RATE INDEX. #$00 = ÓWIFTLINK BAUD #1 OR 300 BPS ON ËERNAL ÒÓ-232 #$01 = ÓWIFTLINK BAUD #2 OR 1200 BPS ON ËERNAL ÒÓ-232 #$02 = ÓWIFTLINK BAUD #3 OR 2400 BPS ON ËERNAL ÒÓ-232 #$03 = ÓWIFTLINK BAUD #4 ONLY #$04 = ÓWIFTLINK BAUD #5 ONLY #$05 = ÓWIFTLINK BAUD #6 ONLY ×HEN THE ÂÂÓ CHANGES THE BAUD, IT POKES THE BAUD RATE INDEX HERE, THEN CALLS THE BAUD-RATE CHANGE ROUTINE. ÉF THE BAUD-RATE VALUE IS ÏÒ'ED WITH #$08, THEN THE ÂÂÓ WILL ALWAYS CHANGE THE BAUD-RATE, OTHERWISE IT WILL ONLY CHANGE IT IF CARRIER IS NOT PRESENT. ÁFTER RETURNING FROM THE BAUD-RATE CHANGE ROUTINE, THIS LOCATION CONTAINS THE CURRENT BAUD-RATE INDEX VALUE WHICH CAN BE USED TO VERIFY IF THE BAUD RATE WAS CHANGED. 02Â1 - ×INDOW FLAG. ÉF THIS LOCATION IS GREATER THAN ZERO, THEN THE ÂÂÓ WILL DISPLAY A BLUE WINDOW AT THE TOP OF THE SCREEN. ÔHE NUMBER STORED HERE SHOULD BE THE NUMBER OF CHARACTERS IN THE WINDOW. (ÃURRENTLY, THIS NUMBER IS 80.) 02Â2/02Â3 - ÍAXIMUM NUMBER OF ÃÂÍ DISK BLOCKS ALLOWED IN FILE UPLOAD. 02Â4/02Â5 - ÍESSAGE NUMBER ( ÍESSAGE DATABASE ROUTINES ). 02Â6/02Â7 - ÏLDEST MESSAGE INDEX ( ÍESSAGE DATABASE ROUTINES ). 02Â8/02Â9 - ÎEW MESSAGE NUMBER ( ÍESSAGE DATABASE ROUTINES ). 02ÂÁ - ÒOOM NUMBER + #$40 ( ÍESSAGE DATABASE ROUTINES ). 02 - ÍAXIMUM NUMBER OF ROOMS ( ÍESSAGE DATABASE ROUTINES). ÍUST ALWAYS EQUAL 50! ÄO NOT CHANGE! 02Âà - ÃÏÎÔÒÏÌ-à MASK. #$00 = ÄISABLE ÃÏÎÔÒÏÌ-à DETECT #$ÆÆ = ÅNABLE ÃÏÎÔÒÏÌ-à DETECT 02ÂÄ - ÒÓ-232 STATUS REGISTER ØÏÒ VALUE. 02ÂÅ - ÓYSTEM ÃONTROL ÂLOCK. ÂITS ARE ARRANGED AS FOLLOWS: ÂIT 0 = ÃÈÔ ÂIT 1 = ÃÅÎ ÂIT 2 = ÍÏÎ ÂIT 3 = ÎÅ× ÂIT 4 = ÐÁÓ ÂIT 5 = ÃÒÅ ÂIT 6 = ÆÕÌ ÂIT 7 = ÓÙÓ 02ÂÆ - ÐRINTER TYPE. ÎON-ZERO VALUE HERE TURNS ÃÂÍ-ÁÓÃÉÉ TRANSLATION ON FOR PRINTER. 02Ã0 - ÅDIT BUFFER SIZE. ÓIZE IN 256-BYTE BLOCKS PLUS Á0H. 02Ã1-02Ã6 - ÔWIT DETECTOR THRESHOLD VALUES. 02Ã7-02Ä1 - ÔWIT DETECTOR TRIGGER VALUES. 02Ä2 - ÃENSOR MODE FLAG. ÉNDICATES TO CENSOR ROUTINE IF CENSOR ROUTINE IS BEING CALLED FROM THE FILE SERVER OR THE TWIT DETECTOR. ÉF THE CENSOR ROUTINE IS BEING CALLED FROM THE FILE SERVER, THEN ANY WORDS BLANKED OUT WILL NOT TRIGGER THE TWIT DETECTOR. 02Ä3 - ÃENSOR WORD COUNTER ( ÔWIT DETECTOR ). 02Ä4 - ÍINUTE STORAGE ( ÉÒÑ ×INDOW ROUTINE ). ÔHIS LOCATION IS USED TO MAKE SURE THE WINDOW IS UPDATED AT LEAST ONCE A MINUTE. 02Ä5 - ÉNPUT INTERRUPT FLAG. ÔHIS LOCATION INDICATES TO THE ÂÁÓÉà PORTION OF THE ÂÂÓ IF THE INPUT ROUTINE OR FILE SERVER ROUTINE WAS INTERRUPTED ABNORMALLY. ÔHIS OCCURS WHEN CERTAIN FUNCTION KEYS OR ÃÏÎÔÒÏÌ-à ARE PRESSED, IF CARRIER IS DROPPED, OR A TIMEOUT ERROR OCCURS. ÖALID VALUES ARE: #$00 = ÎORMAL (NO INTERRUPT OCCURRED) #$08 = Æ4 KEY PRESSED #$09 = ÃÔÒÌ-à KEY PRESSED #$0Á = Æ2 KEY PRESSED #$0 = Æ6 KEY PRESSED #$0à = Æ8 KEY PRESSED #$0Ä = ÃARRIER DROP #$0Å = ÔIMEOUT ERROR ÁPPROPRIATE ACTION IS TAKEN WHEN CONTROL RETURNS TO THE ÂÁÓÉà PORTION OF THE PROGRAM. 02Ä6 - ÃONTROL-KEY FLAG. ÕSED WHEN ENTERING CONTROL CODES VIA THE ÃÔÒÌ-Ð SEQUENCE TO TELL THE ÂÂÓ NOT TO INTERPRET THE CODE AS A COMMAND, BUT TO ACCEPT IT AS NORMAL DATA. 02Ä7-02ÅÁ - ( FOR FUTURE USE ). 02Å - ÔEMPORARY WORK SPACE ( ÃÔÒÌ-Ð HEXADECIMAL-BINARY CONVERSION ). 02Åà - ÔEMPORARY WORK SPACE ( ÃÔÒÌ-Ð HEXADECIMAL-BINARY CONVERSION ). 02ÅÄ - ÔEMPORARY WORK SPACE ( ÍESSAGE DATABASE ROUTINES ). 02ÅÅ/02ÅÆ - ÔEMPORARY WORK SPACE ( ÍESSAGE DATABASE ROUTINES ). 02Æ0/02Æ1 - ÔEMPORARY WORK SPACE ( ÍESSAGE DATABASE ROUTINES ). 02Æ2 - ÔEMPORARY WORK SPACE ( ÓÙÓ STATEMENT ARGUMENT VALUES ). 02Æ3 - ÔEMPORARY WORK SPACE ( ÆILE SERVER ROUTINE ). 02Æ6 - ÔEMPORARY WORK SPACE ( ÆILE SERVER ROUTINE ). 02Æ7 - ÒÓ-232 INTERRUPT STATUS SAVE. ÔHIS IS USED BY THE PAUSE ROUTINE. 02Æ8-02ÆÁ - ( FOR FUTURE USE ). 02Æ - ÄISABLE REMOTE-ENABLE FLAG (I.E. DATE = "999999"). 02Æà - ÔEMPORARY WORK SPACE ( HOURS SAVE / DIRECTORY BLOCKS FREE ). 02ÆÄ - ÔEMPORARY WORK SPACE ( MINUTES SAVE / DIRECTORY BLOCKS FREE ). 02ÆÅ - ÐÍ-TO-ÁÍ TRACKER (USED FOR MIDNIGHT HOUSEKEEPING). 02ÆÆ - ÔEMPORARY WORK SPACE ( [Ó]AVE [Ë]EEP FLAG ). 033à - ÃURRENT DRIVE LETTER ÔHIS LOCATION STORES THE ÁÓÃÉÉ VALUE OF THE CURRENT DRIVE LETTER. 033Ä-0354 - ÃURRENT PARTITION TABLE 24 MEMORY LOCATIONS, ONE FOR EACH POSSIBLE PHYSICAL DRIVE (DEVICES 8-31). ÅACH LOCATION CONTAINS THE ÁÓÃÉÉ VALUE OF THE LAST DRIVE LETTER THAT ACCESSED THAT PHYSICAL DRIVE. ÔHIS IS USED TO DETERMINE IF THE KERNAL OVERLAY SHOULD SEND THE COMMAND CHANNEL STRING WHEN OPENING A FILE. ÔO FORCE THE ÂÂÓ TO SEND THE COMMAND CHANNEL STRING, SET THE APPROPIATE LOCATION (OR ALL LOCATIONS) TO ZERO. 0355-035Ä - 300 BPS ÒÓ-232 DATA (ËERNAL ÒÓ-232 ONLY) ÄATA IS ORGANIZED AS FOLLOWS: ÂYTES 1-4 = ÄATA STORED IN MOCK ÒÓ-232 CONTROL REGISTERS ÂYTES 5-6 = ÒECEIVER HALF-BIT TIME ÂYTES 7-8 = ÔRANSMITTER FULL-BIT TIME 035Å-0365 - 1200 BPS ÒÓ-232 DATA (ËERNAL ÒÓ-232 ONLY) (ÓEE ABOVE.) 0366-036Ä - 2400 BPS ÒÓ-232 DATA (ËERNAL ÒÓ-232 ONLY) (ÓEE ABOVE.) 036Å-0373 - ÈAYES ÒESPONSE ÃODE ÔABLE (ÓWIFTLINK ÒÓ-232 ONLY) ÓIX BYTES, ONE FOR EACH POSSIBLE BAUDRATE. ÔHIS TABLE CONTAINS THE RESPONSE CODES THAT THE ÂÂÓ LOOKS FOR TO DETERMINE THE BAUDRATE OF THE INCOMING CALL. ÓETABLE USING PROGRAM Ó×-ÓÅÔ. 0374-0379 - ÁÃÉÁ ÃONTROL ÒEGISTER ÔABLE (ÓWIFTLINK ÒÓ-232 ONLY) ÓIX BYTES, ONE FOR EACH POSSIBLE BAUDRATE. ÔHIS TABLE CONTAINS THE VALUE TO BE STORED IN THE ÁÃÉÁ COMMAND REGISTER FOR A PARTICULAR BAUDRATE. ÓETABLE USING PROGRAM Ó×-ÓÅÔ. 037Á-037Æ - ÂAUDRATE ÖALUE ÔABLE (ÓWIFTLINK ÒÓ-232 ONLY) ÓIX BYTES, ONE FOR EACH POSSIBLE BAUDRATE. ÔHIS TABLE CONTAINS THE DISPLAYED BAUDRATE VALUE FOR EACH BAUDRATE. ÓETABLE USING PROGRAM Ó×-ÓÅÔ. 0380-0383 - ( FOR FUTURE USE ). 0384-03Ä3 - ×INDOW DATA. ÔHESE LOCATIONS CONTAINS THE DATA TO BE DISPLAYED IN THE BLUE WINDOW IN THE FORM OF SCREEN CODES. ÔHIS DATA SHOULD NOT BE MODIFIED SINCE THE ÂÂÓ NOT ONLY WRITES TO THIS BUFFER, BUT IT ALSO READS THE DATA BACK SINCE SOME OF THE ÂÂÓ'S MACHINE LANGUAGE ROUTINES MAY MODIFY THE WINDOW DATA. 03Ä4-03Æ - ( FOR FUTURE WINDOW EXPANSION ). 03ÆÃ-03ÆÆ - ÆREE ÒÁÍ. 07Æ9 - ÄATE ÐRESET FLAG Á VALUE OF #$7 HERE INDICATES THE NEXT THREE BYTES CONTAIN A VALID DATE. ÔHIS AND THE NEXT THREE BYTES ARE USED ONLY WHEN REBOOTING THE ÂÂÓ. 07ÆÁ - ÄECIMAL YEAR (0-99) 07Æ - ÄECIMAL MONTH (1-12) 07Æà - ÄECIMAL DAY (1-31) 0800-9Å33 - ÃOMPILED ÂÁÓÉà PORTION OF ÂÂÓ & VARIABLE AREA. 9Å34 = Ó.5 ÍACHINE ÌANGUAGE ÍODULE (ÃÈÁÎÇÅ ÂÁÕÄ ÅNTRY) 9Å37 = ÔÅÒÍÉÎÁÌ ÅNTRY 9Å3Á = ÔÏÇÇÌÅ ÄÔÒ ÅNTRY 9Å3Á-9ÆÅ5 = ÄÔÒ/ÔÅÒÍÉÎÁÌ/ÂÁÕÄ ÔÕÎÉÎÇ ÒOUTINES 9ÆÅ7 - ÒÓ-232 STATUS REGISTER ( ØÏÒ'ED ) ÔHE ÉÒÑ ROUTINE CHECKS THE ÒÓ-232 STATUS EVERY 1/60TH OF A SECOND, ØÏÒ'S THE VALUE FOUND THERE WITH ØÏÒ VALUE (@ 02ÂÄH), AND STORES THE RESULT HERE. ÁLL CHECKS FOR CARRIER SHOULD BE CHECKED HERE. ÃARRIER IS PRESENT WHEN BIT 4 (VALUE = 10H) IS 0. ÃARRIER SHOULD BE CHECKED AS FOLLOWS: LDA $9FE7 ; GET RS-232 STATUS AND #$10 ; MASK ALL BITS EXCEPT CARRIER AND $02A9 ; MASK WITH CARRIER-DETECT MASK BNE -NO CARRIER- -CARRIER- Á000-Â157 - ÅDITOR, ÆILE COPIER, ÐROTOCOL AND ÅXEC MODULE BUFFER ÌOCATION $Á000 NORMALLY CONTAINS A #$0Ä (ÃÒ), FOLLOWED BY THE EDIT BUFFER TEXT, WITH A ÎÕÌÌ BYTE USED AS AN ÅÏÔ CHARACTER. ÔHE ÂÂÓ'S FILE COPIER AND LOADABLE MACHINE LANGUAGE MODULES WILL OVERWRITE ANY EDIT BUFFER TEXT. ÉF THE EDIT BUFFER TEXT IS OVER- WRITTEN, THEN THE ÂÂÓ WILL CLEAR THE EDIT BUFFER BEFORE THE NEXT ÃÏÍÍÁÎÄ PROMPT SO THAT THE USER WILL NOT SEE ANY GARBAGE CHARACTERS IN THE BUFFER. Á FUTURE REVISION OF THE ÂÂÓ MAY COPY THE EDIT BUFFER CONTENTS TO THE É/Ï AREA ÒÁÍ (WHICH IS CURRENTLY UNUSED) BEFORE THE EDIT BUFFER IS OVERWRITTEN. Â158-ÂÂ4Ä - Ó.3 CONFIGURATION FILE BUFFER ÃONTAINS THE CENSOR VOCABULARY, A ÎÕÌÌ, ËERNAL OVERLAY (EACH ENTRY FOLLOWED BY A ÎÕÌÌ), AND THE EDITABLE PHRASES (EACH ENTRY FOLLOWED BY A ÎÕÌÌ). ÂÂ4Å = ÅÄÉÔÏÒ/ÆÉÌÅ ÓÅÒÖÅÒ ÅNTRY. ÁLL MACHINE LANGUAGE FUNCTIONS OF THE EDITOR (WRITING, LISTING, EDITTING, LOADING AND SAVING), AS WELL AS THE FILE SERVER ROUTINE (USED TO DISPLAY ALL TEXT FROM DISK SUCH AS MESSAGES, EMAIL, ÓÉÇFILES, ETC), ARE CALLED THROUGH THIS LOCATION. ÂÂ51 = ÃÅÎÓÏÒ ÅNTRY. ÔHIS IS ÂÁÓÉÃ'S ENTRY INTO THE CENSOR ROUTINE. ÔHIS ENTRY IS USED BY THE TWIT DETECTOR. ÂÂ54-ÂÆÆÆ = Ó.4 ÍACHINE ÌANGUAGE ÍODULE Ã000-Ã11 - ÔEMPORARY STORAGE BUFFERS. ÔHIS AREA IS USED BY THE ÂÂÓ AS BUFFERS FOR THE EDITOR SEARCH AND REPLACE ROUTINES, LIST ROUTINES, AND THE ÂÂÓ LINE EDITOR. ÔHIS AREA MAY BE USED BY MODULES IN ANY MANNER. ÔHERE IS ENOUGH ROOM HERE FOR ONE 256-BYTE OR TWO 128-BYTE FILE TRANSFER BUFFERS. ÙOU CAN ALSO USE IT TO STORE SHORT MACHINE LANGUAGE ROUTINES SUCH AS A ROUTINE TO SWITCH IN THE ÂÁÓÉà ÒÏÍ TEMPORARILY, CALL A SUBROUTINE, AND SWITCH ÂÁÓÉà BACK OUT. Ã11Ã-Ã15 - ÃENSOR VOCABULARY INDEX (ALLOWS FOR UP TO 64 ENTRIES). ÔHIS INDEX IS USED TO HELP SPEED THINGS UP FOR THE NASTY-WORD- CHECKER. ÉT CONTAINS THE LENGTH OF EACH WORD IN THE VOCABULARY. Ã15à = (FUTURE USE) Ã15Æ = ÅÄÉÔÏÒ/ÆÉÌÅ ÓÅÒÖÅÒ ÓETUP ÅNTRY. ÓWITCHES ÂÁÓÉà OUT AND JUMPS TO ÂÂ4Å (THE S.4 MODULE). Ã162 = ÃÏÎÓÏÌÅ/ÃÏÎÔÒÏÌ ÉÎÔÅÒÒÕÐÔ ÃÈÅÃËÅÒ ÅNTRY. ÁLSO CALLED BY THE ÌÉÎÅ ÅÄÉÔÏÒ ROUTINE. Ã165 = ÄÉÒÅÃÔÏÒÙ ÒÅÁÄÅÒ ÅNTRY ÄISPLAYS DISK DIRECTORY. ÍUST HAVE DIRECTORY FILE OPEN AND ÂÁÓÉà SWITCHED IN. ÍEM-LOC (02Æ2) = #$00 - ÎORMAL DISK DIRECTORY FORMAT = #$01 - ÓÉÇFILE DISK DIRECTORY FORMAT Ã168 = ÓÔÁÃË ÒÅÓÅÔ ÅNTRY ÕSED TO RESET THE STACK AT ÃÏÍÍÁÎÄ PROMPTS. ÄO NOT USE! Ã16 = ÄÉÓÐÌÁÙ ÏÆÆ-ÌÉÎÅ ÓÃÒÅÅÎ ÅNTRY. ÄISPLAYS THE BACKGROUND FOR AWAITING-CALL SCREEN. Ã16Å = ÄÉÓÐÌÁÙ ÓÈÁÒÅ×ÁÒÅ ÓÃÒÅÅÎ ÅNTRY. ÄISPLAYS THE SHAREWARE SCREEN (ÓÈÉÆÔ/ÃÔÒÌ SCREEN). Ã171 = ÄÉÓÐÌÁÙ Ó.3 ÆÉÌÅ ÅÄÉÔÁÂÌÅ ÐÈÒÁÓÅ ÅNTRY. ÔHIS ROUTINE EITHER DISPLAYS THE EDITABLE PHRASE FROM THE S.3 FILE DATA, OR OPENS A FILE AND DISPLAYS THE FILE. Ã174 = ÎÏÎ-ÃÁÓÅ-ÓÅÎÓÉÔÉÖÅ ÓÔÒÉÎÇ ÃÏÍÐÁÒÅ ÅNTRY. ÃOMPARES TWO STRING VARIABLES. ÔHIS ROUTINE COMPARES ONLY CHARACTERS UP TO THE LENGTH OF THE SECOND STRING. Ã177 = ÆÉÌÅ-ÃÏÐÉÅÒ ÄÉÓË ÒÅÁÄ ÅNTRY. ÒEADS BLOCKS INTO THE EDIT BUFFER. Ã17Á = ÄÉÓË ÌÉÎÅ-ÉÎÐÕÔ ÅNTRY. ÕSED TO INPUT A STRING INTO ONE OR MORE VARIABLES. Ã17Ä = ÇÅÔ ÃÈÁÒÁÃÔÅÒ ÅNTRY. ÁLL ÂÂÓ INPUTS USE THIS ROUTINE TO ACCEPT DATA FROM THE USER. ÔHIS ROUTINE WILL RETURN WITH CARRY SET IF AN INTERRUPT REQUEST OCCURS DUE TO CARRIER DROP, ÃÔÒÌ-Ã, AND CERTAIN FUNCTION KEYS ARE PRESSED. ÉF CARRIER IS SET, THEN THE MODULE SHOULD EXIT TO RETURN CONTROL TO THE ÂÂÓ SO IT CAN HANDLE THE INTERRUPT REQUEST. Ã180 = ÇÁÒÂÁÇÅ ÃÏÌÌÅÃÔÏÒ ÅNTRY. ÔHIS ROUTINE ERASES CERTAIN STRING VARIABLES TO PROVIDE FOR A FASTER GARBAGE COLLECTION. ÇARBAGE COLLECTION OCCURS BEFORE THE ÃÏÍÍÁÎÄ PROMPT. Ã183 = ÆÉÌÅ-ÃÏÐÉÅÒ ÄÉÓË ×ÒÉÔÅ ÅNTRY. ×RITES DISK BLOCK INFO FROM THE EDIT BUFFER TO THE DISK. Ã186 = ÄÉÓÐÌÁÙ-ÔÒÁÎÓÌÁÔÅ ÅNTRY. ÕSED INTERNALLY TO MAP SOME OF THE ÁÓÃÉÉ CODES TO THEIR CLOSEST VISUAL EQUIVALENT. Ã189 = ÓËÉÐ ÂÁÍ ÅNTRY. ÕSED TO SKIP THE ÂÁÍ ENTRY WHEN READING A TRACK & SECTOR DIRECTORY. Ã18à = ËÉÌÌ ÒÏÏÍ ÅNTRY. ÃLEARS ALL OCCURANCES OF A SPECIFIC MESSAGE INDEX CODE. Ã18Æ = ÆÉÎÄ ÉÎÄÅØ ÆÒÏÍ ÍÅÓÓÁÇÅ ÎÕÍÂÅÒ ÅNTRY ÆINDS THE POSITION IN THE MESSAGE INDEX OF THE MESSAGE NUMBER GIVEN BASED ON WHAT THE CURRENT ROOM IS. Ã192 = ÓÅÔ ÕÐ ÒÏÏÍ ÅNTRY ÆINDS INFORMATION ABOUT ROOM. Ã195 = ÒÏÏÍ ÈÏÕÓÅËÅÅÐÉÎÇ ÅNTRY ÃHECKS FOR UNUSED ROOMS. Ã198 = ÍÅÓÓÁÇÅ-ÉÎÄÅØ ÌÏÁÄ ÌOADS THE MESSAGE INDEX FROM THE ÂÁÓÅÓ FILE INTO MEMORY. Ã19 = ÍÅÓÓÁÇÅ-ÉÎÄÅØ ÓÁÖÅ ÓAVES THE MESSAGE INDEX FROM MEMORY TO THE ÂÁÓÅÓ FILE. Ã19Å = ÒÏÏÍ ÓÏÒÔ ÃREATES A SORTING INDEX FOR THE SIG/ROOM LIST. Ã1ÂÁ-ÃÆÆÆ = Ó.2 ÍACHINE ÌANGUAGE ÍODULE ÄÃ08-ÄÃ0 - ÔÏÄ ÃLOCK #1 - ÕSED FOR TIME-OF-DAY. ÄÄ08-ÄÄ0 - ÔÏÄ ÃLOCK #2 - ÕSED FOR USER'S SESSION TIMER Å000-ÅÄÁ - ÍESSAGE INDEX. ÅACH POSITION INDICATES THE ROOM NUMBER + #$40 OF EACH MESSAGE. Æ72Ã-ÆÄ01 - Ó.6 ÍODULE (ÁWAITING-CALL & SHAREWARE SCREEN DATA BUFFER). ÆÄ15-ÆÄ46 - ÎEW ÍESSAGE ÐOINTERS (LOW BYTES) ÆÄ47-ÆÄ78 - ÎEW ÍESSAGE ÐOINTERS (HI BYTES) ÔHESE LOCATIONS CONTAIN POINTERS TO THE NEWEST MESSAGES THAT THE USER HAS READ FOR EACH ROOM. ÔHESE POINTERS ARE USED TO COMPUTE THE NUMBER OF OLD AND NEW MESSAGES THE USER HAS. ÆÄ79-ÆÄÁÁ - ÎUMBER OF ÍESSAGES (LOW BYTES) ÆÄÁÂ-ÆÄÄà - ÎUMBER OF ÍESSAGES (HI BYTES) ÔHESE LOCATIONS CONTAIN THE NUMBER OF MESSAGES IN EACH ROOM. ×HEN THE USER ENTERS A DIFFERENT ROOM, A MACHINE LANGUAGE ROUTINE LOOKS UP THE NUMBER AND STORES IT AT $02ÅÅ/02ÅÆ. ÆÄÄÄ-ÆÅ0Å - ÎUMBER OF ÏLD ÍESSAGES (LOW BYTES) ÆÅ0Æ-ÆÅ40 - ÎUMBER OF ÏLD ÍESSAGES (HI BYTES) ÔHESE LOCATIONS CONTAIN THE NUMBER OF OLD MESSAGES IN EACH ROOM. ×HEN THE USER ENTERS A DIFFERENT ROOM, A MACHINE LANGUAGE ROUTINE LOOKS UP THE NUMBER, ADDS 1 TO IT (SO IT BECOMES THE MESSAGE NUMBER OF THE FIRST NEW MESSAGE), AND STORES IT AT $02Â8/02Â9. (ÁLL OTHER ÒÁÍ UNDER THE ËERNAL ÒÏÍ IS AND MUST REMAIN A COPY OF THE ËERNAL ÒÏÍ. ÔHIS ALLOWS FOR THE USE OF THE ÎÍÉ INTERRUPT ROUTINES WHEN THE ÒÏÍ IS SWITCHED OUT.) ------------------------------------------------------------------------------ ÔHE FOLLOWING ÒÏÍ VECTORS HAVE BEEN CHANGED: 0308/0309 - ÉÇÏÎÅ - ÔO ALLOW EXECUTION OF ÂÁÓÉà EXTENSIONS. 0314/0315 - ÉÒÑ - ÔO ENABLE THE ÂÂÓ WINDOW AND CARRIER-DETECT ROUTINES. 0318/0319 - ÎÍÉ - ÔO LESSEN THE CHANCE OF LOCKING UP THE COMPUTER IF THE ÒÅÓÔÏÒÅ KEY IS PRESSED, AND ALSO TO DISPLAY THE DIAGNOSTIC SCREEN WITH ÒÕÎ/ÓÔÏÐ & ÒÅÓÔÏÒÅ. ÁLSO HANDLES ÓWIFTLINK ÎÍÉ ROUTINES IF ÓWIFTLINK IS ACTIVE. 031Á/031 - ÏÐÅÎ - ÔO ENABLE THE KERNAL OVERLAY. 031Å/031Æ - ÃÈËÉÎ - ÔO ALLOW THE USE OF DEVICE 4 TO READ THE EDIT BUFFER. ÕSED ONLY BY THE FILE SERVER WHEN LISTING THE EDIT BUFFER. 0320/0321 - ÃÈËÏÕÔ - ÔO HANDLE THE PROPER CHANNEL NUMBER FOR THE ÂÂÓ OUTPUT CHANNEL DEPENDING ON THE CARRIER MASK. 0326/0327 - ÃÈÒÏÕÔ - ÂÂÓ OUTPUT DRIVER. ÈANDLES ALL MODEM/DISPLAY OUTPUT. 032Á/032 - ÇÅÔÉÎ - ÂÂÓ INPUT DRIVER. ÈANDLES ALL MODEM/KEYBOARD INPUT. (ÂÂÓ DOES NOT USE ÃÈÒÉÎ FOR KEYBOARD OR ÒÓ-232 INPUT!) ÐLEASE DO NOT CHANGE ANY VECTORS! ------------------------------------------------------------------------------ ÂÁÓÉà ÖARIABLE ÌISTING: ------------------------------------------------------------------------------ (ÓINCE THE ÂÁÓÉà ÒÏÍ IS SWITCHED OUT WHEN EXECUTING A MODULE, YOU MUST DEVISE YOUR OWN ROUTINE FOR ACCESSING VARIABLES IF YOU NEED TO.) A - ÃONSTANT = 56577 A$ - ÔEMP - ÈAYES COMMAND TO SEND A% - ÁCCOUNT - ÓÉÇ-BULLETIN READ FLAGS A0 - ÔEMP AA - ÔEMP AA$ - ÁCCOUNT - ÁCCESS AC - ÁCCOUNT - ÎUMBER OF CALLS AD - ÁCCOUNT - ÎUMBER OF DOWNLOADS AD$ - ÁCCOUNT - ÄATE OF LAST CALL AE - ÅDITOR MODE FLAG (USED TO DETERMINE WHERE EDITOR IS CALLED FROM) AF - ÁCCOUNT - ÅMAIL FORWARDING ACCOUNT NUMBER AH$ - ÁCCOUNT - ÎEW MESSAGE POINTERS (ENCODED) AI - ÁCCOUNT - ÎUMBER OF MESSAGES POSTED (SYSTEM TOTAL) AL - ÁCCOUNT - ÎUMBER OF BAD LOGOFFS. AM - ÁCCOUNT - ÎUMBER OF MESSAGES POSTED (USER'S TOTAL) AN$ - ÁCCOUNT - ÎAME AN% - ÁCCOUNT - ÓAVED MESSAGES AS OLD OR NEW FLAG AP$ - ÁCCOUNT - ÐASSWORD AS$ - ÁCCOUNT - ÓTATUS AT - ÁCCOUNT - ÄAILY TIME LIMIT AT% - ÁCCOUNT - ÔIME USED TODAY (PREVIOUS SESSIONS ONLY) AU - ÁCCOUNT - ÎUMBER OF UPLOADS AV - ÁCCOUNT - ÖIDEO ×IDTH AX - ÔEMP AX$ - ÁCCOUNT - ÐROTOCOL B = ÂAUDRATE ÖALUE (ÔHE NUMERIC VALUE OF THE BAUDRATE.) B$(*) = ÒOOM ÎAME ÁRRAY (ÖALID INDEX IS 1 TO 50. ÕNUSED ROOMS ARE NULL.) B(*) = ÒOOM ÓTATUS ÁRRAY (ÖALID INDEX IS 1 TO 50. ÔHE VALUE RETURNED IS AS FOLLOWS: BITS 0-3 = ÓÉÇ ROOM IS ASSIGNED TO (0 MEANS ROOM NOT IN USE), BIT 4 = BIT 5 = ÌOGOFF MESSAGE ROOM FLAG, BIT 6 = ÒEAD-ONLY FLAG, BIT 7 = ÌOCKED ROOM FLAG. ÎOTE THAT AN UNUSED ROOM MAY BE LOCKED SO THAT IT CANNOT BE CREATED.) BN = ÃURRENT ROOM INDEX NUMBER (ÖALID NUMBER IS 1 TO 50. 0 MEANS USER IS NOT IN A ROOM.) C$ - ÌAST COMMAND SEQUENCE ENTERED. CA - ÃARRIER STATUS (USED IN ÃÈÁÔ MODE) CC - ÃARRIER ÄETECT ÂIT ÍASK CM - ÃOMMAND-ENTERED FLAG (OTHER THAN CHAT OR DOWNLOAD) CN = ÎUMBER OF CALLS RECEIVED. D - ÔEMP - ÄRIVE D$ - ÔEMP - ÄATE STRING (INCLUDES DAY OF WEEK) D$(*) = ÓÉÇ ÂULLETIN ÄATE-LAST-MODIFIED ÁRRAY (ÓTRING IN ÙÙÍÍÄÄ FORMAT.) D% = ÕSER - ÓÉÇ-BULLETIN READ FLAGS (ÅACH BIT REPRESENTS A ÓÉÇ BULLETIN THAT THE USER HAS READ.) D%(*) = ÍESSAGE/DRIVE ÁLLOCATION ÁRRAY (ÖALID INDEX IS 0 TO 25 FOR DRIVES A TO Z. ÅACH ENTRY INDICATES THE NUMBER OF MESSAGES ON THAT DRIVE.) DB - ÄEFAULT BAUDRATE DD = ÄAY ÏF ÍONTH (ÂETWEEN 1 AND 7, STARTING AT ÆRIDAY.) DW = ÄAY ÏF ×EEK (1 TO 31.) E - ÔEMP - ÄÏÓ ÅRROR ÎUMBER E$ - ÔEMP E(*) = ÅMAIL ÔYPE/ÒECEIVER ÄATA ÁRRAY (ÖALID INDEX FROM 1 TO VARIABLE ME. ÖALUE IS ACCOUNT NUMBER PLUS 1024 IF CERTIFIED, PLUS 3072 IF URGENT. 0 INDICATES AN AVAILABLE EMAIL SLOT.) E2$ - ÔEMP - ÄÏÓ ÅRROR ÃHANNEL ÂUFFER ED(*) = ÅMAIL ÄATE-SENT ÁRRAY (ÖALID INDEX FROM 1 TO VARIABLE ME. ÖALUE IS DATE IN ÙÙÙÙÍÍÄÄ FORMAT. 0 INDICATES AN AVAILABLE EMAIL SLOT.) EN$ - ÃONSTANT = "ÅNTER " EU - ÅMAIL ÁCCOUNT TO ÒEAD F$ - ÔEMP - ÆILENAME F1$ - ÔEMP - ÆILENAME F2$ - ÔEMP - ÆILENAME FA = ÆIRST ÁVAILABLE ÁCCOUNT ÎUMBER FD - ÌAST ÍESSAGE ÅDITTED (ÅITHER DRIVE OR BASE INDEX NUMBER) G$ - ÔEMP - ÃURRENT ÓÉÇ ÌETTER H$ = ÈAYES ÅSCAPE ÓEQUENCE ÁÓÃÉÉ ÃHARACTER (ÔHE CHARACTER MUST BE SENT 3 TIMES FOR THE ÈAYES ESCAPE SEQUENCE.) HH$ = ÈAYES ÈANGUP ÓEQUENCE (ÈAYES COMMAND TO SEND AFTER SENDING THE ESCAPE SEQUENCE.) HI = ÉNDEX TO ÎEXT ÍESSAGE TO ÓAVE (ÕSED TO DETERMINE THE START/END POINTS OF THE MESSAGE INDEX BUFFER. ÔHIS IS A POINTER TO THE NEXT MESSAGE TO BE SAVED. ÉT ALSO POINTS TO THE OLDEST MESSAGE IN THE SYSTEM ONCE THE MESSAGES HAVE STARTED CYCLING.) HL = ÍAX ÎUMBER OF ÍESSAGES ÃONFIGURED ÆOR I - ÔEMP I$ - ÔEMP - ÌINE ÅDITOR ÉNPUT ÓTRING I1 - ÔEMP I2 - ÔEMP I3 - ÔEMP ID - ÆILE ÓERVER & ÅDITOR ÉNTERRUPT ÔYPE II$ - ÔEMP - ÌINE ÅDITOR ÉNPUT ÓTRING (ÕPPERCASE) J - ÔEMP J$ - ÔEMP - ×INDOW ÂUILDER K$ - ÃONSTANT = "------" L - ÔEMP - ÌINE ÅDITOR ÍAXIMUM ÌENGTH L$ - ÔEMP LB$ - ÃONSTANT = ":A.ÌÏÇÂÏÏË" LC$ = ÌAST ÃALLER'S ÎAME LG = ÌOGOFF ÍESSAGES ÁVAILABLE FLAG (ÁNY NON-ZERO VALUE MEANS LOGOFF MESSAGES ARE AVAILABLE.) LM$ - ÃONSTANT = ":E-SYS" LS - ÔEMP LT = ÌTËERNAL ÒÏÍ FLAG (ÁNY NON-ZERO VALUE INDICATES THE PRESENCE OF A ÌTËERNAL HARD DRIVE. ÆOR FUTURE USE OF ÌTËERNAL HARD DRIVES.) M$ - ÃONSTANT - ÃÈÒ$(13) M0$ = ÈAYES ÂÂÓ ÉNITIALIZATION ÓEQUENCE (ÅACH COMMAND SENT IS SEPARATED WITH A SPACE.) M1$ = ÈAYES ÔERMINAL ÉNITIALIZATION ÓEQUENCE (ÅACH COMMAND SENT IS SEPARATED WITH A SPACE.) M3$ = ÈAYES ÍODEM ÏFF-HOOK ÓEQUENCE ME = ÍAXIMUM ÐIECES ÏF ÅMAIL MM = ÍONTH (1 TO 12. 0 INDICATES ÂÂÓ IS DISABLED.) MN = ÎUMBER ÏF ÍESSAGES ÉN ÒOOM MP = ÎUMBER ÏF ÍESSAGES ÐOSTED (ÔHIS IS THE SYSTEM TOTAL. ÖARIABLE HI IS DERIVED FROM THIS VARIABLE.) MS$ - ÃONSTANT = "ESSAGE" N$ N% = ÕSER - ÓAVED MESSAGES AS OLD OR NEW FLAG (ÁNY NON-ZERO VALUE WILL MAKE SAVED MESSAGES AS NEW.) N(*) = ÕSER - ÎEW MESSAGE POINTERS (ÖALID INDEX IS 1 TO 50 REPRESENTING ROOM NUMBERS. ÅACH ARRAY ELEMENT IS A POINTER TO THE LAST MESSAGE READ IN THE ROOM. ÔHIS ARRAY IN CONJUNCTION WITH VARIABLES MP AND UI TELL THE ÂÂÓ WHICH MESSAGES ARE NEW.) NA$ - ÃONSTANT = "ÎÎÎÎÎÎÎÎÎÎÎÎÎÎ" (USED TO CHECK FOR MINIMUM ACCESS) NB - ÍESSAGE ÎUMBER NM = ÎUMBER ÏF ÎEW ÍESSAGES ÉN ÒOOM (ÉF 0, THEN ROOM IS EMPTY.) NM$ = ÎEW ÕSER ÑUESTIONAIRE ÎAME ÐROMPT (I.E. "ÎAME:", "ÈANDLE:", ETC.) O$ - ÃONSTANT - ÃÈÒ$(0) P$ - ÃONSTANT - "RESS ÒÅÔÕÒÎ" PS - ÍESSAGE ÉNDEX Q - ÔEMP Q$ - ÔEMP Q$(*) - ÁNSWERS TO ÑUESTIONAIRE Q0 - ÔEMP - ÃURRENT ÑUESTION ÐOINTER QA$(*) - ÎEW ÕSER ÑUESTIONAIRE QB(*) - ÍAXIMUM ÎUMBER OF ÃHARACTERS ÁLLOWED IN ÑUESTIONAIRE QQ - ÎUMBER OF ÑUESTIONS IN ÑUESTIONAIRE R - ÃONSTANT = 50 (ÍAXIMUM ÎUMBER OF ÒOOMS - DO ÎÏÔ CHANGE) R1 - ÔEMP - ÓTARTING ÍESSAGE IN ÓEQUENCE R2 - ÔEMP - ÅNDING ÍESSAGE IN ÓEQUENCE S$ - ÒOOM/ÓÉÇ ÓORT ÉNDEX S$(*) = ÓÉÇ ÎAME ÁRRAY (ÖALID INDEX IS 0 TO 14. ÔHIS ARRAY CONTAINS THE NAMES OF EACH ÓÉÇ. Á NULL SIGNAME IS A HIDDEN ("DELETED") ÓÉÇ. S1 = ÄEFAULT ÖIDEO ×IDTH (ÖALID VIDEO WIDTH IS 20 TO 80. ÐLEASE DO NOT EXCEED THIS RANGE.) S1$ = ÒECOVERY ÐASSWORD (ÕSED FOR REMOTE ENABLING.) S2 = ÍAXIMUM ÎUMBER OF ÕSERS (ÖALID NUMBER IS FROM 1 TO 999. ÄO NOT EXCEED 999.) S2$ = ÎEW ÕSER ÁCCESS S3 = ÄEFAULT ÔIME ÌIMIT (ÄEFAULT DAILY TIME LIMIT.) S3$ = ÕNLOGGED-ON ÕSER ÁCCESS S4 = ÁCCOUNT DRIVE (ÁÓÃÉÉ VALUE OF DRIVE LETTER.) S5 = ÅMAIL DRIVE (ÁÓÃÉÉ VALUE OF DRIVE LETTER.) S6$ = ÓÉÇ ÄOWNLOAD DRIVES (15 DRIVE LETTERS.) S8 = ÃURRENT UPLOAD DRIVE (ÁÓÃÉÉ VALUE OF DRIVE LETTER.) S8$ = ÓÉÇ ÕPLOAD DRIVES (15 DRIVE LETTERS.) S9 = ÍODEM TYPE (1 = 1650 OR COMPATABLE, 2 = 1670/ÈAYES OR COMPATABLE, 3 = 1660 OR COMPATABLE.) SC$ - ÃONSTANT = "ÃÈÔÃÅÎÍÏÎÎÅ×ÐÁÓÃÒÅÆÕÌÓÙÓ" (ÓYSTEM ÃONTROL ÂLOCK TEXT) SF = ÌOGOFF ÍESSAGE DRIVE (ÁÓÃÉÉ VALUE OF DRIVE LETTER.) SL = ÌOGOFF ÍESSAGE ROOM (ÃONTAINS THE ROOM NUMBER OF THE ROOM THAT LOGOFF MESSAGES ARE TO BE SAVED TO. ÌOGOFF MESSAGES ARE SAVED TO "E.SYS" FILE IF THIS VARIABLE IS 0. ÔHE ÂÂÓ SCANS THE ROOM STATUS ARRAY AND STORES THE APPROPRIATE VALUE HERE.) T - ÔEMP / ÎUMBER OF TRIES LEFT / ÌOGOFF TYPE T0 - ÔEMP T1 - ÔEMP T2 = ÕSER - ÔIME ÏNLINE ÔODAY (ÔOTAL) (ÃURRENT AMOUNT OF TIME, IN MINUTES, THAT THE USER HAS BEEN ONLINE TODAY. ÕSED IN CONJUNCTION WITH VARIABLE UD$ (TO DETERMINE IF USER HAS BEEN ONLINE TODAY OR IF USER'S TIMELIMIT CAN BE RESET).) TW = ÕSER - ÔWIT ÌEVEL (ÖALID RANGE BETWEEN 0 AND 255.) U = ÕSER - ÁCCOUNT ÎUMBER (ÖALID RANGE BETWEEN 0 AND 999. ÉF ZERO, THEN USER IS NOT LOGGED ON.) U$ - "ÓYSOP" OR "ÓÉÇOP" (ÄISPLAYED WHEN [.] COMMAND IS SELECTED.) UA = ÁCCESS LEVEL IN CURRENT ROOM (ÃURRENT ACCESS VALUE DERIVED FROM VARIABLES UA$ AND B(BN). 1 = ÎO ACCESS, 2 = ÒEAD-ONLY ACCESS, 3 = ×RITE ACCESS, 4 = ÃREATE ACCESS, 5 = ÓÉÇOP ACCESS.) UA$ = ÕSER - ÁCCESS UC = ÕSER - ÎUMBER OF CALLS UD = ÕSER - ÎUMBER OF DOWNLOADS UD$ = ÕSER - ÄATE LAST CALLED (ÄATE IN ÙÙÍÍÄÄ FORMAT. ÕSED IN CONJUNCTION WITH ARRAY N .) UF = ÕSER - ÅMAIL FORWARDING ACCOUNT NUMBER (ÖALID RANGE BETWEEN 0 AND 999.) UI = ÕSER - ÎUMBER OF MESSAGES POSTED AT LAST CALL (SYSTEM TOTAL) (ÃONTAINS VALUE OF VARIABLE MP AT TIME OF USER'S LAST LOGOFF. ÕSED TO DETERMINE IF ALL MESSAGES ARE NEW.) UL = ÕSER - ÎUMBER OF BAD LOGOFFS. UM = ÕSER - ÎUMBER OF MESSAGES POSTED (USER'S TOTAL) UN$ = ÕSER - ÎAME UP$ = ÕSER - ÐASSWORD US$ = ÕSER - ÓTATUS UT = ÕSER - ÄAILY ÔIME ÌIMIT UT% = ÕSER - ÔIME ÕSED ÔODAY (PREVIOUS SESSIONS ONLY) (ÃONTAINS THE VALUE OF VARIABLE T2 AT TIME OF USER'S LAST LOGOFF.) UU = ÕSER - ÎUMBER OF UPLOADS UX$ = ÕSER - ÐROTOCOL (ÍUST CONTAIN THE NAME OF A PROTOCOL, EVEN IF PROTOCOL DOES NOT EXIST.) X - ÔEMP - ÄISK ÓPACE ÁVAILABLE X$ = ÄATE AND ÔIME / ÔEMP (ÄATE AND TIME IN FORMAT "ÙÙÍÍÄÄ AT ÈÈ:ÍÍ?Í".) XM$ - ÌAST ÍESSAGE ÅDITTED (ÆILENAME OF MESSAGE) YY = ÙEAR (ÖALID RANGE IS 0 TO 99. ÁNY VALUE LESS THAN 81 IS IN THE 21ST CENTURY.) Z$ - ÔEMP ZR$ - ÃONSTANT = "000000" (USED TO CHECK IF ÂÂÓ DISABLED) ÉF THE ÂÂÓ CRASHES WITH AN ERROR, OR DOES A WARM START, YOU MAY DISPLAY THE VALUE OF ANY VARIABLE WITH THE ÐÒÉÎÔ COMMAND. ------------------------------------------------------------------------------ ÍODULE ÐROGRAMMING ÇUIDE: ÍODULE FILES ARE LOCATED ON A ÓÉÇ-FILE DRIVE SO THAT EACH ÓÉÇ CAN HAVE IT'S OWN SET OF MODULES. ÅACH MODULE MAY BE WRITTEN USING ANY Ã64 ASSEMBLER. ÔHE MODULES MUST BE GIVEN A FILENAME CONSISTING OF A ÓÉÇ LETTER, A PERCENT SIGN, AND THE NAME OF THE MODULE IN UPPERCASE LETTER, I.E. "A%ÖÏÔÅ". ÔHE ÂÂÓ WILL LOAD A MODULE OF ANY SEQUENTIAL FILE TYPE (ÐÒÇ, ÓÅÑ, OR ÕÓÒ). ÍODULES ARE RUN ONLINE BY USING THE COMMAND Å[Ø]EC: AT THE ÃÏÍÍÁÎÄ PROMPT. ÂY LEAVING OUT THE MODULENAME, A DESCRIPTION FILE WILL BE DISPLAYED. ÔHE FILENAME OF THIS FILE CONSISTS OF THE ÓÉÇ LETTER AND A PERCENT SIGN. ÔHIS FILE SHOULD BE LOCATED ON THE ÓÉÇFILE DRIVE AND IT SHOULD CONTAIN A LIST OF AVAILABLE MODULES. ×HEN WRITING MODULES FOR THE ÄÔÊ-ÂÂÓ, YOU SHOULD OBSERVE THE FOLLOWING GUIDELINES: 1. ÔO HELP MAINTAIN COMPATABILITY WITH FUTURE REVISIONS OF THE ÄÔÊ-ÂÂÓ, TRY NOT TO READ OR MODIFY ANY MEMORY LOCATIONS MENTIONED IN THE MEMORY MAP EXCEPT FOR THE ONES LABEL "ÔEMPORARY WORK SPACE", "ÔEMPORARY WORK POINTER", OR THOSE MEMORY LOCATIONS MENTIONED BELOW. ÉF THE MEMORY LOCATIONS OTHER THAN THE TEMPORARY LOCATIONS ARE CHANGED, THEY MUST BE RESTORED TO THEIR ORIGINAL VALUES UPON EXITING THE MODULE. 2. ÔHE ÂÂÓ KEEPS THE FOLLOWING FILES OPEN AT ALL TIMES: ÆILE 2 = ÂÂÓ ÉNPUT/ÏUTPUT ÃHANNEL ÆILE 4 = ÐRINTER ÏUTPUT/ÅDIT-ÂUFFER ÉNPUT ÄO NOT CLOSE THESE FILES! ÁLL OTHER FILE NUMBERS ARE AVAILABLE FOR YOUR USE. ÈOWEVER, IF YOU OPEN A FILE, CLOSE IT BEFORE EXITING YOUR MODULE. 3. ÍODULES ARE LOADED INTO THE EDIT BUFFER MEMORY. ÍODULES MUST LOAD AND EXECUTE AT $Á001. ÍODULE SIZE MAY BE LARGER THAN THE CONFIGURED SIZE OF THE EDIT BUFFER (IN THE S.1 FILE), BUT IT MAY NOT EXCEED THE MAXIMUM SIZE OF THE EDIT BUFFER (4095 BYTES). ÓINCE MODULES ARE LOCATED UNDER ÂÁÓÉà ÒÏÍ, YOU CANNOT ACCESS ANY ÂÁÓÉà ÒÏÍ ROUTINES WITHOUT BRANCHING OUT FROM UNDER THE ÂÁÓÉà ÒÏÍ AND THEN SWITCHING THE ÂÁÓÉà ÒÏÍ IN TEMPORARILY. ÁLL MODULES MUST EXIT WITH AN ÒÔÓ INSTRUCTION. 4. ÕSE THE DOCUMENTED ËERNAL ÒÏÍ VECTORS AS MUCH AS POSSIBLE. ÔHIS APPLIES ESPECIALLY TO THE ÒÓ-232 É/Ï ROUTINES. 5. ÁNY DISK ACCESS SHOULD OPEN FILES USING DEVICE NUMBERS COORESPONDING TO THE ÁÓÃÉÉ VALUES OF THE DRIVE LETTERS (Á=65, Â=66, ETC). ÏNCE THE FILE HAS BEEN OPEN, THE ÂÂÓ'S KERNAL OVERLAY WILL CONVERT THE LOGICAL DRIVE NUMBER INTO A PHYSICAL DEVICE NUMBER SO THAT LOCATION $ÂÁ WILL CONTAIN THE ACTUAL DEVICE NUMBER AS IT USUALLY DOES. 6. ÔHE SOFTWARE ÊIFFY CLOCK VALUES MAY BE CHANGED AND DO NOT HAVE TO BE RESTORED WHEN RETURNING CONTROL TO THE ÂÂÓ. 7. ÄO NOT TURN INTERRUPTS OFF, OR MODIFY INTERRUPT ROUTINES. ÔHE ÂÂÓ USES THE ÉÒÑ ROUTINE TO DISPLAY THE WINDOW AT THE TOP OF THE SCREEN AND TO CHECK FOR CARRIER. ÔHE ÎÍÉ ROUTINE IS USED FOR ÒÓ-232 COMMUNICATIONS. 8. ÔO PREVENT LOCKUP PROBLEMS, ALWAYS CHECK FOR CARRIER IN ALL LOOPS THAT DO NOT EXIT IN A SHORT PERIOD OF TIME. ÃARRIER MAY BE CHECKED BY CALLING THE FOLLOWING SUBROUTINE: CARRIER ; GET RS-232 STATUS. LDA $9FE7 ; MASK ALL BITS EXCEPT THE CARRIER BIT. AND #$10 ; MASK RESULT WITH CARRIER-DETECT MASK (FORCE CARRIER IF IN ; CONSOLE MODE). SINCE DOING A FILE TRANSFER WHILE IN CONSOLE ; MODE IS USELESS (RS-232 I/O IS DISABLED), LEAVE THIS INSTRUCTION ; OUT IF YOU ARE WRITING A PROTOCOL MODULE. AND $02A9 ; EXIT SUBROUTINE. RTS ÔHIS SUBROUTINE WILL RETURN ZERO SET (REGISTER Á=0) IF CARRIER IS PRESENT, OR ZERO CLEARED (REGISTER Á=16) IF CARRIER IS NOT PRESENT. ÉF CARRIER IS NOT PRESENT, THE MODULE SHOULD CLOSE ALL FILES AND EXIT. ÔHE ÂÂÓ WILL THEN HANDLE THE CARRIER-DROP. ÄO NOT CHECK CARRIER AT LOCATION $ÄÄ01 AS SOME MODEMS/INTERFACES MAY USE REVERSE CARRIER AND ALSO THIS LOCATION IS NOT USED WITH THE ÓWIFTLINK-232 CARTRIDGE. 9. ÔHE ÄÔÊ-ÂÂÓ DOES NOT USE A FULL 256-BYTE ÒÓ-232 OUTPUT BUFFER. ÔHIS IS TO HELP PREVENT GARBLING PROBLEMS WITH THE SOFTWARE ÒÓ-232 ROUTINES. ÔHE ÓWIFTLINK MODE ALSO DOES NOT USE AN OUTPUT BUFFER. ÔHIS KEEPS THE ÎÍÉ ROUTINE AS SHORT AS POSSIBLE AND ALLOWS FOR MORE COMPATABLITY WITH THE SOFTWARE ÒÓ-232 ROUTINES. ÔHE FULL 256-BYTE INPUT BUFFER IS USED HOWEVER, WITH BOTH SOFTWARE AND ÓWIFTLINK ÒÓ-232 MODES. ÐLEASE DO NOT MANIPULATE THE É/Ï BUFFERS DIRECTLY. ÕSE THE ËERNAL É/Ï ROUTINES. 10. ÔHE ÓWIFTLINK'S RECEIVER SECTION IS DISABLED DURING ALL SERIAL PORT ACCESS TO PREVENT SERIAL PORT TIMING PROBLEMS. ÔHE RECEIVER IS ENABLED VIA THE ËERNAL ÃÌÒÃÈÎ ROUTINE. ÁLWAYS REMEMBER TO CALL ÃÌÒÃÈÎ AFTER A DISK ACCESS IF YOU WANT TO BE ABLE TO RECEIVE CHARACTERS FROM THE MODEM. 11. ÔHE ÓWIFTLINK ÎÍÉ ROUTINE STORES BITS 0 THROUGH 3 OF THE STATUS REGISTER TO LOCATION $0297 SO YOU CAN USE THIS LOCATION AS YOU WOULD NORMALLY. ÌOCATION $02Á1 IS NOT USED IN ÓWIFTLINK MODE. 12. ÕSE ÇÅÔÉÎ, NOT ÃÈËÉÎ, FOR ALL FILE #2 (MODEM/KEYBOARD) INPUT. 13. ÙOU MAY FIND THE ÂÁÓÉà VARIABLES LISTED ABOVE WITH A "=" AFTER THE VARIABLE NAME USEFUL. ÓINCE THE ÂÁÓÉà ÒÏÍ IS SWITCHED OUT, YOU WILL HAVE TO DEVISE YOUR OWN METHOD OF ACCESS THE VARIABLE YOU WANT TO USE. ÖARIABLE POSITIONS MAY VARY SO YOU SHOULD ALWAYS SEARCH FOR A VARIABLE BY NAME. ÄO NOT ASSUME THAT A GIVEN VARIABLE WILL ALWAYS BE IN THE SAME LOCATION IN THE VARIABLE AREA IN FUTURE REVISIONS. ÉN MOST CASES, YOU SHOULD NOT CHANGE THE VALUE OF A VARIABLE. 14. ÄO NOT CALL ÂÁÓÉÃ'S RANDOM NUMBER GENERATOR. ÔHE MEMORY LOCATION USED TO STORE THE SEED VALUE IS BEING USED FOR OTHER PURPOSES. ------------------------------------------------------------------------------ ÐROTOCOL ÍODULE ÐROGRAMMING ÇUIDE: ÐROTOCOL FILES ARE A MORE SPECIALIZED FORM OF MODULE. ÔHE FILENAME OF A PROTOCOL MODULE CONSISTS OF "P-" FOLLOWED BY THE PROTOCOL NAME IN UPPERCASE LETTERS. ÔHESE FILES ARE LOCATED ON DRIVE Á. ÉN ADDITION TO THE ABOVE GUIDELINES, THE FOLLOWING APPLIES TO PROTOCOL FILES: 15. ÔHE ÄÔÊ-ÂÂÓ OPENS THE FILE TO BE RECEIVED OR SENT BEFORE CALLING THE PROTOCOL MODULE ROUTINE. ÔHE FILE NUMBER IS 8. ÔHE COMMAND CHANNEL IS ALSO OPEN USING FILE NUMBER 1. (ÉN THE FUTURE, THIS WILL CHANGE IF/WHEN MULTI-FILE TRANSFERS ARE IMPLIMENTED. ÆILE 8 WILL BE A ÐÒÇ-FORMAT DIRECTORY FILE AND FILE 1 WILL BE CLOSED. ÔHE LOADING ADDRESS MAY CHANGE TO $Á000 OR $Á002 TO FORCE INCOMPATABILITY WITH THE OLD MODULES. ÔHIS IS TO PREVENT PROBLEMS WITH RUNNING MULTI-FILE TRANSFERS ON AN OLDER ÂÂÓ THAT CAN'T HANDLE THEM.) 16. ÔHE PROTOCOL MODULE MUST CONTAIN BOTH SEND AND RECEIVE ROUTINES. ÔHE RECEIVE ROUTINE MUST START AT $Á001 AND THE SEND ROUTINE MUST START AT $Á004. 17. ÕNLESS THE PROTOCOL IS AN ÁÓÃÉÉ TRANSFER, BOTH THE SEND AND RECEIVE ROUTINES MUST TURN ÁÓÃÉÉ TRANSLATION OFF. ÅCHO SHOULD ALSO BE TURNED OFF. ÍAKE SURE YOU TURN TRANSLATION AND ECHO BACK ON WHEN THE TRANSFER IS FINISHED. ÔRANSLATION AND ECHO CONTROL IS AT $02Á7. 18. ÂOTH SEND AND RECEIVE ROUTINES USE THE Á REGISTER TO INDICATE THE SUCCESS OF THE TRANSFER UPON EXITING THE MODULE: #$00 = FILE TRANSFER COMPLETE - NO ERROR #$01 = ERROR - TIMEOUT #$02 = ERROR - CANCELLED BY USER #$03 = ERROR - CANCELLED BY SYSOP #$04 = ERROR - OTHER (UNUSED) #$05 = ERROR - DISK FULL #$10 = ERROR - CARRIER DROP ÁNY NON-ZERO STATUS ON A FILE RECEIVE WILL CAUSE THE ÂÂÓ TO SCRATCH THE FILE. ÎOTE THAT THE ROUTINE DESCRIBED EARLIER TO CHECK FOR CARRIER WILL SET Á TO #$10 FOR YOU IF CARRIER IS DROPPED. ÒEMEMBER TO LEAVE THE "AND $02A9" INSTRUCTION OUT OF YOUR CARRIER DETECT ROUTINE WHEN WRITING A PROTOCOL MODULE. 19. ÍAKE SURE YOU CHECK FOR CARRIER AND IMPLIMENT TIMEOUTS IN ALL LOOPS TO PREVENT TOO MUCH IDLE TIME BEING WASTED. 20. ÕSE THE SOFTWARE JIFFY CLOCK FOR TIMING. 21. ÔRY NOT TO BUFFER TOO MANY BLOCKS IN MEMORY AT A TIME. ÁLOT OF FILE TRANSFER PROTOCOLS WRITTEN FOR THE ÃOMMODORE BUFFER UP TO 16 BLOCKS OR MORE IN MEMORY BEFORE WRITING TO DISK OR SENDING TO THE MODEM. ÔHIS SLOWS DOWN THE FILE TRANSFER. ÉNSTEAD, WHEN SENDING DATA, READ ONE OR TWO BLOCKS OF DATA FROM THE DISK AS YOU NEED IT. ×HEN RECEIVING DATA, WRITE IT TO DISK AS SOON AS IT HAS BEEN VERIFIED CORRECT. 22. ÙOUR PROTOCOL MODULE SHOULD DISPLAY THE STATUS OF THE TRANSFER ON THE SCREEN AS IT GOES. ÔRY NOT TO USE THE WHOLE SCREEN. ÁT A MINIMUM, YOU SHOULD DISPLAY THE NUMBER OF BLOCKS SENT OR RECEIVED. 23. ÐROVIDE SOME WAY FOR THE SYSOP AND USER TO ABORT THE TRANSFER. Á ÃÏÎÔÒÏÌ-Ø WOULD CONFORM TO THE ORIGINAL ÄÔÊ XMODEM'S WAY OF ABORTING THE TRANSFER. ÉF YOU THINK A ÃÏÎÔÒÏÌ-Ø IS TOO EASY TO ABORT THE TRANSFER BY ACCIDENT, THEN TRY TWO ÃÏÎÔÒÏÌ-Ø'S IN A ROW WITHIN A LIMITTED AMOUNT OF TIME. ÒEMEMBER TO SET REGISTER Á TO THE APPROPRIATE VALUE WHEN EXITING. 24. ÔHE MAXIMUM NUMBER OF 254-BYTE DISK BLOCKS THAT CAN BE SAVED TO DISK WHEN RECEIVING A FILE IS STORED AT LOCATIONS $02Â2 AND $02Â3 (IN LOW/HIGH BYTE ORDER). ÅXCEEDING THIS LIMIT BY ABOUT 12 BLOCKS MAY RESULT IN A CORRUPTED DISK. (12 BLOCKS WAS CHOSEN TO PROVIDE A SAFETY ZONE.) ÔHE PROTOCOL SHOULD ABORT WHEN THIS LIMIT HAS BEEN REACHED. ÂEFORE THE TRANSFER BEGINS, YOU CAN MULTIPLY OR DIVIDE THIS MEMORY LOCATION TO GET THE NUMBER OF FILE TRANSFER BLOCKS (I.E. MULTIPLY BY 2 TO GET THE APPROXIMATE NUMBER OF 128- BYTE XMODEM BLOCKS). 25. ×HEN THE TRANSFER IS COMPLETE, YOU SHOULD CLOSE FILES 8 AND 1. ÉF THE TRANSFER WAS NOT A SUCCESS, YOU DON'T HAVE TO DELETE THE FILE. ÔHE ÂÂÓ WILL DO THAT FOR YOU IF THE PROTOCOL MODULE EXITS WITH THE Á REGISTER HOLDING A NON-ZERO VALUE. ------------------------------------------------------------------------------ ÍODULE ÐROGRAMMING ÅXAMPLES: ; ---------------------------------------------------------------------------- ; ÔURNING ÁÓÃÉÉ TRANSLATION AND SCREEN ECHO OFF AND ON. (ÕSED WHEN ; WRITING A FILE TRANSFER PROTOCOL.) LDA $02Á7 ; GET CURRENT ÂÂÓ É/Ï STATUS PHA ; SAVE IT ON STACK FOR LATER RESTORAL LDA #$00 ; VALUE TO TURN TRANSLATION AND ECHO OFF STA $02Á7 ; STORE BACK INTO ÂÂÓ É/Ï STATUS STA $008Å ; TURN "QUICK-KEYS" OFF. : ; YOUR CODE GOES HERE PLA ; RESTORE OLD ÂÂÓ É/Ï STATUS STA $02Á7 ; ; ÔHE ÂÂÓ WILL RESTORE THE VALUE OF $008Å WHEN IT EXITS THE MODULE; YOU DON'T ; HAVE TO SAVE IT. ; ---------------------------------------------------------------------------- ; ÇETTING TYPED-IN INPUT FROM A USER. (ÕSED WHEN WRITING AN INTERACTIVE ; MODULE SUCH AS A VOTING BOOTH, QUESTIONAIRE, ETC.) BUFFER = $Ã000 _ÇÅÔÃÈÁÒ = $Ã17Ä ÃÌÒÃÈÎ = $ÆÆÃà ÃÈËÉÎ = $ÆÆÃ6 ÃÈËÏÕÔ = $ÆÆÃ9 ÃÈÒÏÕÔ = $ÆÆÄ2 ÕÉÎÐÕÔ JSR ÃÌÒÃÈÎ ; CLEAR É/Ï CHANNELS IF NEEDED LDX #$02 ; SETUP ÂÂÓ É/Ï JSR ÃÈËÉÎ LDX #$02 JSR ÃÈËÏÕÔ LDY #$00 ; RESET BUFFER POINTER ÌÏÏÐ JSR _ÇÅÔÃÈÁÒ ; GET A CHARACTER FROM THE USER BCS ÅØÉÔ ; EXIT MODULE IF CARRY IS SET CMP #$0Ä ; ÒÅÔÕÒÎ KEY? BEQ ÃÒ ; EXIT INPUT ROUTINE IF YES CMP #$14 ; ÄÅÌ KEY? BEQ ÄÅÌ CMP #$20 ; INVALID CONTROL CHARACTER? BCC ÌÏÏÐ ; IGNORE AND GET ANOTHER CHARACTER IF YES CPY #40 ; 40 CHARACTERS ENTERED ALREADY? (ÙOU MAY CHANGE ; THIS VALUE IF DESIRED.) BCS ÌÏÏÐ ; IGNORE AND GET ANOTHER CHARACTER IF YES JSR ÃÈÒÏÕÔ ; ECHO CHARACTER TO USER STA BUFFER,Y ; STORE CHARACTER IN INPUT BUFFER INY ; INCREMENT BUFFER POINTER BNE ÌÏÏÐ ; GET ANOTHER CHARACTER ÄÅÌ CPY 0 ; IS BUFFER EMPTY? BEQ ÌÏÏÐ ; INGORE AND GET ANOTHER CHARACTER IF YES JSR ÃÈÒÏÕÔ ; ECHO ÄÅÌ CHARACTER TO USER DEY ; DECREMENT BUFFER POINTER BPL ÌÏÏÐ ; GET ANOTHER CHARACTER ÃÒ JSR ÃÈÒÏÕÔ ; ECHO CARRIAGE RETURN TO USER LDA #$00 ; STORE A NULL AFTER BUFFER CHARACTERS (OPTIONAL) STA BUFFER,Y ÅØÉÔ RTS ; EXIT INPUT SUBROUTINE ; ÔHIS SUBROUTINE ASSUMES ÂÂÓ É/Ï CONTROL ($02Á7) IS SET FOR TRANSLATION AND ; ECHO ON. "BUFFER" POINTS TO AN AREA OF MEMORY SUFFICIENTLY LARGE ENOUGH ; TO CONTAIN ALL THE CHARACTERS THE USER CAN TYPE IN. ÕPON EXITING THIS ; SUBROUTINE, REGISTER Á CONTAINS #$0Ä, Ù CONTAINS THE NUMBER OF CHARACTERS ; TYPED IN, AND THE CHARACTERS THEMSELVES ARE STORED AT "BUFFER". ÉF THIS ; SUBROUTINE EXITS WITH CARRY SET, THEN YOU SHOULD EXIT THE MODULE AS SOON ; AS POSSIBLE. ÎOTE THAT CALLS TO _ÇÅÔÃÈÁÒ WILL RESET THE JIFFY CLOCK. ÉF ; CARRIER IS DROPPED WHILE IN THIS ROUTINE, CARRY WILL BE SET, SO THERE IS ; NO NEED TO ADD CARRIER DETECT TO THIS ROUTINE. ÔHIS ROUTINE WILL ALSO ; HANDLE ALL STANDARD CONSOLE INTERRUPTS SUCH AS SYSOP-PAGE, Ã= STATUS ; CHANGE, ETC IF YOU EXIT YOUR MODULE WHEN THIS ROUTINE RETURNS WITH CARRIER ; SET. ; ---------------------------------------------------------------------------- ; ÇETTING THE VALUE OF A STRING VARIABLE. (ÕSED WHEN YOU WANT TO USE OR ; DISPLAY THE VALUE OF A ÂÁÓÉà STRING VARIABLE SUCH AS THE DATE, USER'S NAME, ; ETC.) ADRS = $0019 ; ÕSED TO STORE ADDRESS OF STRING DATA VAR = $0021 ; ÕSED TO STORE ADDRESS OF VARIABLE DESCRIPTOR LENGTH = $0023 ; ÕSED TO STORE LENGTH OF STRING DATA ÆÉÎÄÖÁÒ PLA ; GET ADDRESS OF JSR INSTRUCTION USED TO CALL THIS STA ADRS ; THIS SUBROUTINE (VARIABLE NAME IS STORED PLA ; IMMEDIATELY AFTER THE JSR INSTRUCTION) STA ADRS+1 INC ADRS BNE ÆÖ00 INC ADRS+1 ÆÖ00 LDA #$02 ; SET UP JMP INSTRUCTION AT END OF THIS SUBROUTINE CLC ; TO JUMP BACK INTO THE CALLING ROUTINE JUST AFTER ADC ADRS ; THE VARIABLE NAME STA ÊÕÍÐ LDA #$00 ADC ADRS+1 STA ÊÕÍÐ+1 LDA $2D ; FIND START OF VARIABLE STORAGE AREA STA VAR LDA $2E STA VAR+1 ÆÖ01 LDY #$00 ; (VAR) POINTING TO DESIRED VARIABLE? LDA (VAR),Y CMP (ADRS),Y BNE ÆÖ02 INY LDA (VAR),Y EOR #$80 CMP (ADRS),Y BEQ ÆÖ03 ; JUMP IF VARIABLE FOUND ÆÖ02 LDA #$07 ; OTHERWISE GO TO NEXT VARIABLE CLC ADC VAR STA VAR BCC ÆÖ01 INC VAR+1 BNE ÆÖ01 ÆÖ03 LDY #$02 ; VARIABLE FOUND (VAR POINTS TO VARIABLE NAME LDA (VAR),Y ; IN VARIABLE TABLE STA (LENGTH) ; STORE LENGTH INY LDA (VAR),Y STA ADRS ; STORE ADDRESS INY LDA (VAR),Y STA ADRS+1 JMP ; RETURN TO CALLING ROUTINE ÊÕÍÐ $0000 ; ÔHIS SUBROUTINE MUST BE CALLED WITH THE NAME OF THE VARIABLE STORED IN ; THE TWO BYTES FOLLOWING THE JSR STATEMENT. ÔHE VARIABLE NAME MUST START ; WITH A LOWERCASE LETTER, AND END WITH A LOWERCASE LETTER, A DIGIT, OR A ; SPACE. ÔHE VARIABLE MUST ALREADY EXIST, OTHERWISE THE ROUTINE WILL LOCKUP. ; ÕPON EXITING, "VAR" POINTS TO THE VARIABLE NAME IN THE VARIABLE TABLE, ; "LENGTH" CONTAINS THE NUMBER OF CHARACTERS IN THE STRING VARIABLE, AND ; "ADRS" POINTS TO THE FIRST CHARACTER OF THE STRING. ÒEGISTERS Á AND Ù ARE ; MODIFIED. ; ÉF YOU WISH TO READ A NUMERIC VARIABLE, YOU MUST DEVISE YOUR OWN METHOD ; OF USING THE FLOATING POINT INFORMATION IN THE VARIABLE. ÏNCE YOU DEVISE ; A WAY TO ACCESS THE ÂÁÓÉà ÒÏÍ, YOU CAN USE THE ÉNTEGER/ÆLOATING ÐOINT ; CONVERSION ROUTINES AVAILABLE THROUGH VECTORS $3/$4 AND $5/$6. ; ÙOU CAN ALSO TRY SWITCHING IN ÂÁÓÉà AT TIMES WHEN YOU NEED TO. ÊUST ; REMEMBER NOT TO SWITCH ÂÁÓÉà IN WHILE YOU ARE STILL UNDER THE ÂÁÓÉà ÒÏÍ.