home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / HACKING3A.SFX / issue3.2-4 < prev   
Encoding:
Text File  |  1990-02-12  |  32.2 KB  |  791 lines

  1. ╞╞├9    ▄ ├╚╦╧╒╘  ▄ * * * * ▄ ╙ET OUTPUT CHANNEL                    ▄        ***
  2. ╞╞├├    ▄ ├╠╥├╚   ▄ * *     ▄ ╥ESTORE DEFAULT CHANNELS              ▄        ***
  3. ╞╞├╞    ▄ ┬┴╙╔╬   ▄ *     * ▄ ╔NPUT FROM CHANNEL                    ▄        ***
  4. ╞╞─2    ▄ ┬╙╧╒╘   ▄ *     * ▄ ╧UTPUT TO CHANNEL (AKA ├╚╥╧╒╘)        ▄***     ***
  5. ╞╞─5    ▄ ╠╧┴─    ▄ * * * * ▄ ╠OAD DATA FROM FILE                   ▄        ***
  6. ╞╞─8    ▄ ╙┴╓┼    ▄ * * * * ▄ ╙AVE DATA TO FILE                     ▄        ***
  7. ╞╞─┬    ▄ ╙┼╘╘╔═  ▄         ▄ ╙ETS INTERNAL (╘╔$) CLOCK             ▄    *** 
  8. ╞╞─┼    ▄ ╥─╘╔═   ▄ * * *   ▄ ╥EADS INTERNAL (╘╔$) CLOCK            ▄    ***
  9. ╞╞┼1    ▄ ╙╘╧╨    ▄ * *     ▄ ╙CANS AND CHECK FOR ╙╘╧╨ KEY          ▄    ***
  10. ╞╞┼4    ▄ ╟┼╘╔╬   ▄ * * * * ▄ ╥EADS BUFFERED DATA FROM FILE         ▄        ***
  11. ╞╞┼7    ▄ ├╠┴╠╠   ▄ * *     ▄ ├LOSE ALL OPEN FILES AND CHANNELS     ▄        ***
  12. ╞╞┼┴    ▄ ╒─╘╔═   ▄ * *     ▄ ╒PDATES INTERNAL (╘╔$) CLOCK          ▄    ***
  13. ╞╞┼─    ▄ ╙├╥╧╥╟  ▄ * * *   ▄ ╥ETURNS CURRENT WINDOW/SCREEN SIZE    ▄*** 
  14. ╞╞╞0    ▄ ╨╠╧╘    ▄   * * * ▄ ╥EAD OR SET CURSOR POSITION           ▄***
  15. ╞╞╞3    ▄ ╔╧┬┴╙┼  ▄   * *   ▄ ╥EAD BASE OF ╔/╧ BLOCK                ▄    ***
  16. --------+---------+---------+---------------------------------------+-----------
  17.  
  18.                           
  19.                           +--------------------------+
  20.                           ▄ ╘HE ╥OUTINES ╘HEMSELVES. ▄
  21.                           +--------------------------+
  22.  
  23. ┴. ┼RROR HANDLING
  24.  
  25.   ╞OR THE ROUTINES IN THE ╦┼╥╬┴╠ THAT RETURN STATUS CODES (INDICATED BY THE ╞╠
  26. STATUS IN THE CHART) THE CARRY IS SET IF THERE IS AN ERROR.  ╧THERWISE, THE 
  27. CARRY RETURNED IS CLEAR.  ╔F THE CARRY IS SET, THE ERROR CODE IS RETURNED IN THE
  28. ACCUMALATOR:
  29.                                            +-----------------------------------+
  30.        .┴ ▄═EANING                         ▄ ╬╧╘┼: ╙OME OF THE ╔/╧ ROUTINES    ▄
  31.       ----+------------------------------  ▄       INDICATE THE ERROR CODE VIA ▄
  32.         0 ▄ ╙TOP ╦EY PRESSED               ▄       THE ╥┼┴─╙╘ ROUTINE WHEN     ▄
  33.         1 ▄ ╘OO ═ANY ╧PEN ╞ILES            ▄       SETTING THE CARRY.          ▄
  34.         2 ▄ ╞ILE ┴LREADY ╧PEN              +------------------------------------
  35.         3 ▄ ╞ILE ╬OT ╧PEN
  36.         4 ▄ ╞ILE ╬OT ╞OUND
  37.         5 ▄ ─EVICE ╬OT ╨RESENT
  38.         6 ▄ ╞ILE ╫AS ╬OT ╧PENED ┴S ╔NPUT
  39.         7 ▄ ╞ILE ╫AS ╬OT ╧PENED ┴S ╧UTPUT
  40.         8 ▄ ╞ILE ╬AME ╬OT ╨RESENT
  41.         9 ▄ ╔LLEGAL ─EVICE ╬UMBER
  42.        41 ▄ ╞ILE ╥EAD ┼RROR
  43.  
  44.  
  45. ┬. ─EVICE ╬UMBERS:
  46.  
  47.   ╘HE FOLLOWING TABLE LISTS THE "STANDARD" DEVICE NUMBERS USED BY THE ├= ╦ERNAL.
  48.  
  49.            +---------+----------------------------+
  50.            ▄─EVICE # ▄ ─EVICE ╬AME                ▄
  51.            +---------+----------------------------+
  52.            ▄   0     ▄ ╦EYBOARD (STANDARD INPUT)  ▄
  53.            ▄   1     ▄ ├ASSETTE                   ▄
  54.            ▄   2     ▄ ╥╙-232                     ▄
  55.            ▄   3     ▄ ╙CREEN   (STANDARD OUTPUT) ▄
  56.            ▄   4 - 30▄ ╙ERIAL ┬US ─EVICES         ▄
  57.            ▄     4-7 ▄ ╨RINTERS        (TYPICALLY)▄
  58.            ▄     8-30▄ ─ISK ─RIVES     (TYPICALLY)▄
  59.            +---------+----------------------------+
  60.  
  61. ├. ╥OUTINE ─ESCRIPTIONS.
  62.  
  63.   ─UE TO SPACE LIMITATIONS A FULLY-DETAILED, DESCRIPTIVE SUMMARY OF THE ╦┼╥╬┴╠
  64. ROUTINES IS NOT FEASIBLE.  ╚OWEVER, LISTED BELOW IS A DESCRIPTION OF WHAT EACH
  65. ROUTINE DOES, EXPECTED PARAMETERS AND ANY NOTES ON ├=128/├=64 DIFFERENCES AS 
  66. WELL AS NOTES TO CLARIFY ANY POSSIBLY CONFUSING DETAILS.
  67.  
  68.  ---------------------------------------------------------------------------
  69.  
  70. ╥OUTINE        : ╙╨╔╬╙╨╧╒╘ ** 128 ╧╬╠┘ **
  71.  ╦ERNAL ┴DDRESS: $╞╞47
  72.  ─ESCRIPTION   : ╙ETUP ├╔┴ FOR ┬╒╥╘ PROTOCOL.
  73.  ╥EGISTERS ╔N  : .├ = 0 -> ╙╨╔╬╨ (INPUT)
  74.                  .├ = 1 -> ╙╨╧╒╘ (OUTPUT)
  75.  ╥EGISTERS ╧UT : .┴ DESTROYED
  76.  ═EMORY ├HANGED: ├╔┴, ══╒.
  77.  
  78. ╥OUTINE        : ├╠╧╙┼┴╠╠ ** 128 ╧╬╠┘ **
  79.  ╦ERNAL ┴DDRESS: $╞╞4┴
  80.  ─ESCRIPTION   : ├LOSE ALL FILES ON A DEVICE.
  81.  ╥EGISTERS ╔N  : .┴ = DEVICE # (0-31)
  82.  ╥EGISTERS ╧UT : .┴, .╪, .┘ USED.
  83.  ═EMORY ├HANGED: ╬ONE.
  84.  
  85. ╥OUTINE        : ├64═╧─┼ ** 128 ╧╬╠┘ **
  86.  ╦ERNAL ┴DDRESS: $╞╞4─
  87.  ─ESCRIPTION   : ╙WITCHES TO ├64 ═ODE
  88.  ╥EGISTERS ╔N  : ╬ONE.
  89.  ╥EGISTERS ╧UT : ╬ONE.
  90.  ═EMORY ├HANGED: -┴╠╠- ╘HIS ROUTINE INITIALIZES AND CALLS THE ├64 COLD START
  91.                  ROUTINE. ╘HERE IS NO WAY TO SWITCH OUT OF ├64 MODE ONCE THIS
  92.                  ROUTINE IS ENTERED.
  93.  
  94. ╥OUTINE        : ─═┴├┴╠╠ ** 128 ╧╬╠┘ **
  95.  ╦ERNAL ┴DDRESS: $╞╞50
  96.  ─ESCRIPTION   : ╨ERFORM ─═┴ COMMAND (FOR ╥┼╒)
  97.  ╥EGISTERS ╔N  : .╪ = ┬ANK, .┘ = ─═┴ CONTROLLER COMMAND
  98.                  ╬╧╘┼: ╥┼╒ REGISTERS MUST HAVE BEEN PREVIOUSLY SETUP.
  99.  ╥EGISTERS ╧UT : .┴, .╪ USED
  100.  ═EMORY ├HANGED: ─EPENDENANT UPON ╥┼╒ REGISTERS, ╥┼╒ COMMAND.
  101.  
  102. ╥OUTINE        : ┬╧╧╘├┴╠╠ ** 128 ╧╬╠┘ **
  103.  ╦ERNAL ┴DDRESS: $╞╞53
  104.  ─ESCRIPTION   : ┴TTEMPTS TO LOAD AND EXECUTE BOOT SECTOR FROM A DRIVE.
  105.  ╥EGISTERS ╔N  : .┴ = DRIVE # IN ASCII (USUALLY '0' / $30)
  106.                  .╪ = DEVICE #
  107.  ╥EGISTERS ╧UT : .┴, .╪, .┘ USED. .├ = 1 IF ╔/╧ ERROR.
  108.  ═EMORY ├HANGED: ┴S PER BOOT SECTOR. 
  109.  
  110. ╥OUTINE        : ╨╚╧┼╬╔╪ ** 128 ╧╬╠┘ **
  111.  ╦ERNAL ┴DDRESS: $╞╞56
  112.  ─ESCRIPTION   : ╔NITALIZES EXTERNAL / INTERNATAL CARTRIDGES,CHECK FOR DISK BOOT
  113.  ╥EGISTERS ╔N  : ╬ONE.
  114.  ╥EGISTERS ╧UT : .┴, .╪, .┘ USED.
  115.  ═EMORY ├HANGED: ├ALLS ANY AUTO-START CATRIDGES THAT ARE INSTALLED ON THE SYSTEM
  116.  
  117. ╥OUTINE        : ╠╦╒╨╠┴ ** 128 ╧╬╠┘ **
  118.  ╦ERNAL ┴DDRESS: $╞╞59
  119.  ─ESCRIPTION   : ╙EARCH FILE TABLES FOR A GIVEN LOGICAL DEVICE #.
  120.  ╥EGISTERS ╔N  : .┴ = ╠OGICAL ─EVICE #.
  121.  ╥EGISTERS ╧UT : .├ = 0 IF FOUND -> .┴ = ╠OGICAL ─EVICE #, 
  122.                                     .╪ = ╠OGICAL ╞ILE #,
  123.                                     .┘ = ╠OGICAL ╙ECONDARY #.
  124.                  .├ =1 IF NOT FOUND.
  125.  ═EMORY ├HANGED: ╬ONE.
  126.  
  127. ╥OUTINE        : ╠╦╒╨╙┴ ** 128 ╧╬╠┘ **
  128.  ╦ERNAL ┴DDRESS: $╞╞5├
  129.  ─ESCRIPTION   : ╙EARCH FILE TABLES FOR A GIVEN SECONDARY ADDRESS.
  130.  ╥EGISTERS ╔N  : .┘ = ╙ECONDARY ADDRESS TO SEARCH FOR.
  131.  ╥EGISTERS ╧UT : ┴S ╠╦╒╨╠┴ (SEE ╠╦╒╨╠┴).
  132.  ═EMORY ├HANGED: ╬ONE.
  133.  
  134. ╥OUTINE        : ╙╫┴╨╨┼╥ ** 128 ╧╬╠┘ **
  135.  ╦ERNAL ┴DDRESS: $╞╞5╞
  136.  ─ESCRIPTION   : ╙WITCHES BETWEEN 40 / 80 COLUMN SCREEN.
  137.  ╥EGISTERS ╔N  : ╬ONE.
  138.  ╥EGISTERS ╧UT : .┴, .╪, .┘ DESTROYED.
  139.  ═EMORY ├HANGED: ╙CREEN ┼DITOR ╠OCATIONS.
  140.  
  141. ╥OUTINE        : ─╠├╚┴╥ ** 128 ╧╬╠┘ **
  142.  ╦ERNAL ┴DDRESS: $╞╞62
  143.  ─ESCRIPTION   : ╔NITIALIZES 80 COLUMN CHARACTER SET.
  144.  ╥EGISTERS ╔N  : ╬ONE.
  145.  ╥EGISTERS ╧UT : .┴, .╪, .┘ DESTROYED.
  146.  ═EMORY ├HANGED: ╬ONE.
  147.  
  148. ╥OUTINE        : ╨╞╦┼┘ ** 128 ╧╬╠┘ **
  149.  ╦ERNAL ┴DDRESS: $╞╞65
  150.  ─ESCRIPTION   : ╔NSTALLS A FUNCTION KEY DEFINITION      
  151.  ╥EGISTERS ╔N  : .┴ = POINTER TO ┌-╨ ADDRESS (3 BYTES : ADDRESS LO/HI/BANK.)
  152.                  .┘ = LENGTH, .╪ = KEY # (9 = ╙HIFT ╥╒╬/╙╘╧╨, 10 = ╚┼╠╨).
  153.  ╥EGISTERS ╧UT : .├ = 1 IF ╬O ROOM, .├ = 0 IF SUCCESSFUL.
  154.                  .┴, .╪, .┘ DESTROYED.
  155.  ═EMORY ├HANGED: ╞UNCTION ╦EY ╘ABLE MODIFIED.
  156.  
  157. ╥OUTINE        : ╙┼╘┬╬╦ ** 128 ╧╬╠┘ **
  158.  ╦ERNAL ┴DDRESS: $╞╞68
  159.  ─ESCRIPTION   : ╙ETS BANK FOR ANY FUTURE ╔/╧ OPERATIONS
  160.  ╥EGISTERS ╔N  : .┴ = ═EMORY ┬ANK, .╪ = ┬ANK WHERE FILENAME IS.
  161.  ╥EGISTERS ╧UT : ╬ONE.
  162.  ═EMORY ├HANGED: ╬ONE.
  163.  
  164. ╥OUTINE        : ╟┼╘├╞╟ ** 128 ╧╬╠┘ **
  165.  ╦ERNAL ┴DDRESS: $╞╞6┬
  166.  ─ESCRIPTION   : ╟ET ══╒ CONFIGURATION FOR A GIVEN BANK.
  167.  ╥EGISTERS ╔N  : ╬ONE.
  168.  ╥EGISTERS ╧UT : ╬ONE.
  169.  ═EMORY ├HANGED: 
  170.  
  171. ╥OUTINE        : ╩╙╥╞┴╥ ** 128 ╧╬╠┘ **
  172.  ╦ERNAL ┴DDRESS: $╞╞6┼
  173.  ─ESCRIPTION   : ╩UMPS TO A SUBROUTINE IN ANOTHER BANK.
  174.  ╥EGISTERS ╔N  : ╬ONE. (╙EE ╩═╨╞┴╥ FOR MEM LOCATIONS ╔╬)
  175.  ╥EGISTERS ╧UT : ╬ONE. (╙EE ╩═╨╞┴╥ FOR MEM LOCATIONS ╧╒╘)
  176.  
  177. ╥OUTINE        : ╩═╨╞┴╥ ** 128 ╧╬╠┘ **
  178.  ╦ERNAL ┴DDRESS: $╞╞71
  179.  ─ESCRIPTION   : ╙TARTS EXECUTING CODE IN ANOTHER BANK.  
  180.  ╥EGISTERS ╔N  : ╬ONE.
  181.    ═EMORY ╔N   :  $02 - ┬ANK (0-15)
  182.                   $03 - ╨├ HIGH
  183.                   $04 - ╨├ LO
  184.                   $05 - .╙ (╨ROCESSOR STATUS)
  185.                   $06 - .┴
  186.                   $07 - .╪
  187.                   $08 - .┘
  188.  ╥EGISTERS ╧UT : ╬ONE.
  189.    ═EMORY ╧UT  : ┴S MEMORY IN.
  190.  
  191. ╥OUTINE        : ╔╬─╞┼╘ ** 128 ╧╬╠┘ **
  192.  ╦ERNAL ┴DDRESS: $╞╞74
  193.  ─ESCRIPTION   : ┼XECUTE A ╠─┴(FETVEC),┘ FROM A BANK.
  194.  ╥EGISTERS ╔N  : .┴ - POINTER TO ┌-╨AGE LOCATION HOLDING ADDRESS
  195.                  .╪ - ┬ANK (0-15), .┘ - ╔NDEX.
  196.  ╥EGISTERS ╧UT : .┴ = DATA, .╪ - DESTROYED.
  197.  ═EMORY ├HANGED: ╬ONE.
  198.  
  199. ╥OUTINE        : ╔╬─╙╘┴ ** 128 ╧╬╠┘ **
  200.  ╦ERNAL ┴DDRESS: $╞╞77
  201.  ─ESCRIPTION   : ┼XECUTE A ╙╘┴(STAVEC),┘ IN A BANK.
  202.  ╥EGISTERS ╔N  : .┴ - POINTER TO ┌-╨AGE LOCATION HOLDING ADDRESS
  203.                  .╪ - ┬ANK (0-15), .┘ - ╔NDEX.
  204.  ╥EGISTERS ╧UT : .╪ - ─ESTROYED.
  205.  ═EMORY ├HANGED: ┴S PER REGISTERS.
  206.  
  207. ╥OUTINE        : ╔╬─├═╨ ** 128 ╧╬╠┘ **
  208.  ╦ERNAL ┴DDRESS: $╞╞7┴
  209.  ─ESCRIPTION   : ┼XECUTES A ├═╨(CMPVEC),┘ IN A BANK.
  210.  ╥EGISTERS ╔N  : .┴ = DATA, .╪ = ┬ANK (0-15), .┘ - ┌-╨AGE PTR.
  211.  ╥EGISTERS ╧UT : .╪ DESTROYED, ╞LAGS SET ACCORDINGLY.
  212.  ═EMORY ├HANGED: ╬ONE.
  213.  
  214. ╥OUTINE        : ╨╥╔══ ** 128 ╧╬╠┘ **
  215.  ╦ERNAL ┴DDRESS: $╞╞7─
  216.  ─ESCRIPTION   : ╨RINTS NULL TERMINATED STRING FOLLOWING ╩╙╥ TO CURRENT CHANNEL
  217.  ╥EGISTERS ╔N  : ╬ONE.
  218.  ╥EGISTERS ╧UT : ╬ONE.
  219.  ═EMORY ├HANGED: ─EPENDENT UPON CURRENT DEVICE. 
  220.  ┼XAMPLE       :
  221.                [ . . . ]
  222.                  ╩╙╥ $╞╞7─         ; ╩╙╥ TO PRIMM, / PRINT FOLLOWING STRING.
  223.                  .┴╙├ "╚I ╫ORLD!"  ; ╙TRING TO PRINT.
  224.                  .┬┘╘ $00          ; ╔═╨╧╥╘┴╬╘: ╬ULL ╘ERMINATED.
  225.                [ . . . ]
  226.  
  227.  ---------------------------------------------------------------------------
  228.  
  229. ╥OUTINE        : ├╔╬╘
  230.  ╦ERNAL ┴DDRESS: $╞╞81
  231.  ─ESCRIPTION   : ╙ETUP ╓╔├, SCREEN VALUES, (128: 8563)...
  232.  ╥EGISTERS ╔N  : ╬ONE.
  233.  ╥EGISTERS ╧UT : ╬ONE.
  234.  ═EMORY ├HANGED: ╙CREEN ┼DITOR ╠OCATIONS.
  235.  
  236. ╥OUTINE        : ╔╧╔╬╔╘
  237.  ╦ERNAL ┴DDRESS: $╞╞84
  238.  ─ESCRIPTION   : ╔NITIALIZES PERTINANT DISPLAY AND I/O DEVICES
  239.  ╥EGISTERS ╔N  : ├64: ╬ONE. ▄ ├128: $0┴04/BIT 7
  240.                             ▄          0 - ╞ULL ╙ETUP.
  241.                             ▄          1 - ╨ARTIAL ╙ETUP. (NO 8563 CHAR)
  242.  ╥EGISTERS ╧UT : .┴, .╪, .┘ DESTROYED.
  243.  ═EMORY ├HANGED: ├╔┴'S, ╓╔├, 8502 PORT, (├128: ALSO OPTIONALLY 8563).
  244.  ╬OTE          : ╘HIS ROUTINE AUTOMATICALLY DISTINGUISHES A ╨┴╠ SYSTEM FROM A
  245.                  ╬╘╙├ SYSTEM AND SETS ╨┴╠├╬╘ ACCORDINGLY FOR USE IN THE 
  246.                  TIME ROUTINES.
  247.  
  248. ╥OUTINE        : ╥┴═╘┴╙
  249.  ╦ERNAL ┴DDRESS: $╞╞87
  250.  ─ESCRIPTION   : ├LEARS ┌-╨AGE, ╙ETS ╥╙-232 BUFFERS, TOP/BOT ╥AM.
  251.  ╥EGISTERS ╔N  : ╬ONE.
  252.  ╥EGISTERS ╧UT : .┴, .╪, .┘ DESTROYED.
  253.  ═EMORY ├HANGED: ┌-╨AGE, ╥S-232 BUFFERS, TOP/BOT ╥AM PTRS
  254.  
  255. ╥OUTINE        : ╓┼├╘╧╥
  256.  ╦ERNAL ┴DDRESS: $╞╞8─
  257.  ─ESCRIPTION   : ├OPIES / ╙TORES ╦┼╥╬┴╠ INDIRECT ╥┴═ VECTORS.
  258.  ╥EGISTERS ╔N  : .├ = 0 (╙ET ╦┼╥╬┴╠ ╓ECTORS) ▄ .├ = 1 (─UPLICATE ╦┼╥╬┴╠ VECTORS)
  259.                  .╪┘ = ADDRESS OF VECTORS    ▄ .╪┘ = ADDRESS OF USER VECTORS
  260.  ╥EGISTERS ╧UT : .┴, .┘ DESTROYED            ▄ .┴, .┘ DESTROYED.
  261.  ═EMORY ├HANGED: ╦┼╥╬┴╠ ╓ECTORS CHANGED      ▄ ╓ECTORS WRITTEN TO .╪┘
  262.  ╬OTE          : ╘HIS ROUTINE IS RARELY USED, USUALLY THE VECTORS ARE DIRECTLY
  263.                  CHANGED THEMSELVES. ╘HE VECTORS, IN ORDER, ARE :
  264.  
  265.                  ├128: ╔╥╤,┬╥╦,╬═╔,╧╨┼╬,├╠╧╙┼,├╚╦╔╬,├╚╦╧╒╘,├╠╥├╚,┬┴╙╔╬,┬╙╧╒╘
  266.                        ╙╘╧╨,╟┼╘╔╬,├╠┴╠╠,┼╪═╧╬ (MONITOR),╠╧┴─,╙┴╓┼
  267.                  ├64 : ╔╥╤,┬╥╦,╬═╔,╧╨┼╬,├╠╧╙┼,├╚╦╔╬,├╚╦╧╒╘,├╠╥├╚,┬┴╙╔╬,┬╙╧╒╘
  268.                        ╙╘╧╨,╟┼╘╔╬,├╠┴╠╠,╒╙╥├═─ (NOT USED),╠╧┴─,╙┴╓┼
  269.  
  270. ╥OUTINE        : ╙┼╘═╙╟
  271.  ╦ERNAL ┴DDRESS: $╞╞90
  272.  ─ESCRIPTION   : ╙ET CONTROL OF ╦┼╥╬┴╠ CONTROL AND ERROR MESSAGES.
  273.  ╥EGISTERS ╔N  : .┴ BIT 7 = ╦┼╥╬┴╠ ├ONTROL ═ESSAGES (1 = ON)
  274.                     BIT 6 = ╦┼╥╬┴╠ ┼RROR   ═ESSAGES (1 = ON)
  275.  ╥EGISTERS ╧UT : ╬ONE.
  276.  ╬OTE          : ╦┼╥╬┴╠ ├ONTROL MESSAGES ARE THOSE DEFINED AS ╠OADING, ╞OUND ETC
  277.                  ... ╦┼╥╬┴╠ ┼RROR MESSAGES ARE ╔/╧ ┼╥╥╧╥ # MESSAGES WHICH ARE
  278.                  LISTED AS FOLLOWS:
  279.  
  280. ╥OUTINE        : ╙┼├╬─
  281.  ╦ERNAL ┴DDRESS: $╞╞93
  282.  ─ESCRIPTION   : ╙ENDS SECONDARY ADDRESS TO DEVICE AFTER A ╠╔╙╘╬
  283.  ╥EGISTERS ╔N  : .┴ = SECONDARY ADDRESS
  284.  ╥EGISTERS ╧UT : .┴ USED.
  285.  ═EMORY ├HANGED: ╬ONE.
  286.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  287.  
  288. ╥OUTINE        : ╘╦╙┴
  289.  ╦ERNAL ┴DDRESS: $╞╞96
  290.  ─ESCRIPTION   : ╙ENDS SECONDARY ADDRESS TO DEVICE AFTER ╘┴╠╦
  291.  ╥EGISTERS ╔N  : .┴ = SECONDARY ADDRESS.
  292.  ╥EGISTERS ╧UT : .┴ USED.
  293.  ═EMORY ├HANGED: ╬ONE.
  294.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  295.  
  296. ╥OUTINE        : ═┼═╘╧╨
  297.  ╦ERNAL ┴DDRESS: $╞╞99
  298.  ─ESCRIPTION   : ╥EAD OR ╙ET TOP OF ╙YSTEM ╥AM
  299.  ╥EGISTERS ╔N  : .├ = 1 (╥EAD ═EM╘OP)     ▄ .├ = 0 (╙ET ═EM╘OP)
  300.                                           ▄ .╪┘ = TOP OF MEMORY
  301.  ╥EGISTERS ╧UT : .╪┘ = TOP OF MEMORY      ▄ ╬ONE.
  302.  ═EMORY ├HANGED: ╬ONE.                    ▄ ╘OP OF MEMORY CHANGED.
  303.  ╬OTE          : ╧N THE ├=128, THIS ROUTINE REFERS TO THE TOP OF ┬┴╬╦ 0 ╥┴═, NOT
  304.                  ┬┴╬╦ 1 ╥┴═.
  305.  
  306. ╥OUTINE        : ═┼═┬╧╘
  307.  ╦ERNAL ┴DDRESS: $╞╞9├
  308.  ─ESCRIPTION   : ╥EAD OR ╙ET BOTTOM OF ╙YSTEM ╥AM
  309.  ╥EGISTERS ╔N  : .├ = 1 (╥EAD ═EM┬OT)     ▄ .├ = 0 (╙ET ═EM┬OT)
  310.                                           ▄ .╪┘ = BOTTOM OF MEMORY.
  311.  ╥EGISTERS ╧UT : .╪┘ = BOTTOM OF MEMORY   ▄ ╬ONE.
  312.  ═EMORY ├HANGED: ╬ONE.                    ▄ ┬OTTOM OF ═EMORY CHANGED.
  313.  ╬OTE          : ╧N THE ├=128, THIS ROUTINE REFERS TO THE BOTTOM OF ┬┴╬╦ 0 ╥┴═, 
  314.                  NOT, ┬┴╬╦ 1 ╥┴═.
  315.  
  316. ╥OUTINE        : ╦┼┘
  317.  ╦ERNAL ┴DDRESS: $╞╞9╞
  318.  ─ESCRIPTION   : ╙CANS ╦EYBOARD
  319.  ╥EGISTERS ╔N  : ╬ONE.
  320.  ╥EGISTERS ╧UT : ╬ONE.
  321.  ═EMORY ├HANGED: ╥ELEVANT ╙YSTEM ╦EYBOARD ╓ALUES
  322.  
  323. ╥OUTINE        : ╙┼╘═╧
  324.  ╦ERNAL ┴DDRESS: $╞╞┴2
  325.  ─ESCRIPTION   : ╘HIS IS A ROUTINE WHO'S CODE NEVER MADE IT INTO ANY VERSIONS
  326.                  OF THE ╦┼╥╬┴╠ ON THE ├64, ╓IC-20 AND ├128.  ╘HUS IT IS OF NO
  327.                  PRATICAL USE.
  328.  
  329. ╥OUTINE        : ┴├╨╘╥
  330.  ╦ERNAL ┴DDRESS: $╞╞┴5
  331.  ─ESCRIPTION   : ╟ET BYTE FROM CURRENT TALKER.
  332.  ╥EGISTERS ╔N  : ╬ONE.
  333.  ╥EGISTERS ╧UT : .┴ = DATA BYTE.
  334.  ═EMORY ├HANGED: ╬ONE.
  335.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  336.  
  337. ╥OUTINE        : ├╔╧╒╘
  338.  ╦ERNAL ┴DDRESS: $╞╞┴8
  339.  ─ESCRIPTION   : ╧UTPUT BYTE TO CURRENT LISTENER.
  340.  ╥EGISTERS ╔N  : .┴ = BYTE.
  341.  ╥EGISTERS ╧UT : .┴ USED.
  342.  ═EMORY ├HANGED: ╬ONE.
  343.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  344.  
  345. ╥OUTINE        : ╒╬╘╠╦
  346.  ╦ERNAL ┴DDRESS: $╞╞┴┬
  347.  ─ESCRIPTION   : ├OMMANDS CURRENT ╘┴╠╦ DEVICE TO STOP ╘┴╠╦╔╬╟.
  348.  ╥EGISTERS ╔N  : ╬ONE.
  349.  ╥EGISTERS ╧UT : .┴ USED.
  350.  ═EMORY ├HANGED: ╬ONE.
  351.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  352.  
  353. ╥OUTINE        : ╒╬╠╙╬
  354.  ╦ERNAL ┴DDRESS: $╞╞┴┼
  355.  ─ESCRIPTION   : ├OMMANDS CURRENT LISTENING DEVICE TO STOP LISTENING.
  356.  ╥EGISTERS ╔N  : ╬ONE.
  357.  ╥EGISTERS ╧UT : .┴ USED.
  358.  ═EMORY ├HANGED: ╬ONE.
  359.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  360.  
  361. ╥OUTINE        : ╠╔╙╘╬
  362.  ╦ERNAL ┴DDRESS: $╞╞┬1
  363.  ─ESCRIPTION   : ├OMMANDS DEVICE TO BEGIN LISTENING.
  364.  ╥EGISTERS ╔N  : .┴ = DEVICE #.
  365.  ╥EGISTERS ╧UT : .┴ USED.
  366.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  367.  
  368. ╥OUTINE        : ╘┴╠╦
  369.  ╦ERNAL ┴DDRESS: $╞╞┬4
  370.  ─ESCRIPTION   : ├OMMANDS DEVICE TO BEGIN TALKING.
  371.  ╥EGISTERS ╔N  : .┴ = DEVICE #.
  372.  ╥EGISTERS ╧UT : .┴ USED.
  373.  ═EMORY ├HANGED: ╬ONE.
  374.  ╬OTE          : ╠OW LEVEL SERIAL ╔/╧ - RECOMMENDED USE ╧╨┼╬,├╠╧╙┼,├╚╥╧╒╘ ETC..
  375.  
  376. ╥OUTINE        : ╥┼┴─╙╙
  377.  ╦ERNAL ┴DDRESS: $╞╞┬7
  378.  ─ESCRIPTION   : ╥ETURN ╔/╧ STATUS BYTE.
  379.  ╥EGISTERS ╔N  : ╬ONE.
  380.  ╥EGISTERS ╧UT : .┴ = STATUS BYTE. (SEE SECTION ON ┼╥╥╧╥ MESSAGES).
  381.  ═EMORY ├HANGED: ╬ONE.
  382.  
  383. ╥OUTINE        : ╙┼╘╠╞╙
  384.  ╦ERNAL ┴DDRESS: $╞╞┬┴
  385.  ─ESCRIPTION   : ╙ET LOGICAL FILE #, DEVICE #, SECONDARY # FOR ╔/╧.
  386.  ╥EGISTERS ╔N  : .┴ = LOGICAL FILE #, .╪ = DEVICE #, .┘ = SECONDARY #
  387.  ╥EGISTERS ╧UT : ╬ONE.
  388.  ═EMORY ├HANGED: ╬ONE.
  389.  
  390. ╥OUTINE        : ╙┼╘╬┴═
  391.  ╦ERNAL ┴DDRESS: $╞╞┬─
  392.  ─ESCRIPTION   : ╙ETS POINTER TO FILENAME IN PREPERATION FOR ╧╨┼╬.
  393.  ╥EGISTERS ╔N  : .┴ = STRING LENGTH, .╪┘ = STRING ADDRESS.
  394.  ╥EGISTERS ╧UT : ╬ONE.
  395.  ═EMORY ├HANGED: ╬ONE.
  396.  ╬OTE          : ╘O SPECIFY _NO_ FILENAME SPECIFY A LENGTH OF 0.
  397.  
  398. ╥OUTINE        : ╧╨┼╬
  399.  ╦ERNAL ┴DDRESS: $╞╞├0
  400.  ─ESCRIPTION   : ╧PEN UP FILE THAT HAS BEEN SETUP BY ╙┼╘╬┴═,╙┼╘╠╞╙
  401.  ╥EGISTERS ╔N  : ╬ONE.
  402.  ╥EGISTERS ╧UT : .┴ = ERROR CODE, .╪,.┘ DESTROYED.
  403.                  .├ = 1 IF ERROR.
  404.  ═EMORY ├HANGED: ╬ONE.
  405.  
  406. ╥OUTINE        : ├╠╧╙┼
  407.  ╦ERNAL ┴DDRESS: $╞╞├3
  408.  ─ESCRIPTION   : ├LOSE A LOGICAL FILE.
  409.  ╥EGISTERS ╔N  : .┴ = LOGICAL FILE #.
  410.  ╥EGISTERS ╧UT : .┴ = ERROR CODE, .╪,.┘ DESTROYED.
  411.                  .├ = 1 IF ERROR
  412.  ═EMORY ├HANGED: ╬ONE.
  413.  
  414. ╥OUTINE        : ├╚╦╔╬
  415.  ╦ERNAL ┴DDRESS: $╞╞├6
  416.  ─ESCRIPTION   : ╙ETS INPUT CHANNEL.
  417.  ╥EGISTERS ╔N  : .╪ = LOGICAL FILE #.
  418.  ╥EGISTERS ╧UT : .┴ = ERROR CODE, .╪,.┘ DESTROYED.
  419.                  .├ = 1 IF ERROR
  420.  ═EMORY ├HANGED: ╬ONE.
  421.  
  422. ╥OUTINE        : ├╚╦╧╒╘
  423.  ╦ERNAL ┴DDRESS: $╞╞├9
  424.  ─ESCRIPTION   : ╙ETS OUTPUT CHANNEL.
  425.  ╥EGISTERS ╔N  : .╪ = LOGICAL FILE #.
  426.  ╥EGISTERS ╧UT : .┴ = ERROR CODE, .╪,.┘ DESTROYED.
  427.                  .├ = 1 IF ERROR
  428.  ═EMORY ├HANGED: ╬ONE.
  429.  
  430. ╥OUTINE        : ├╠╥├╚
  431.  ╦ERNAL ┴DDRESS: $╞╞├├
  432.  ─ESCRIPTION   : ╥ESTORE DEFAULT INPUT AND OUTPUT CHANNELS.
  433.  ╥EGISTERS ╔N  : ╬ONE.
  434.  ╥EGISTERS ╧UT : .┴, .╪ USED.
  435.  ═EMORY ├HANGED: ╬ONE.
  436.  
  437. ╥OUTINE        : ┬┴╙╔╬
  438.  ╦ERNAL ┴DDRESS: $╞╞├╞
  439.  ─ESCRIPTION   : ╥EAD CHARACTER FROM CURRENT INPUT CHANNEL.
  440.                  ├ASSETTE - ╥ETURNED ONE CHARACTER A TIME FROM CASSETTE BUFFER.
  441.                  ╥S-232   - ╥ETURN ONE CHARACTER AT A TIME, WAITING UNTIL 
  442.                             CHARACTER IS READY.
  443.                  ╙ERIAL   - ╥ETURNED ONE CHARACTER AT TIME, WAITING IF NESSC.
  444.                  ╙CREEN   - ╥EAD FROM CURRENT CURSOR POSITION.
  445.                  ╦EYBOARD - ╥EAD CHARACTERS AS A STRING, THEN RETURN THEM 
  446.                             INDIVIDUALLY UPON EACH CALL UNTIL ALL CHARACTERS
  447.                             HAVE BEEN PASSED ($0D IS THE ┼╧╠).
  448.  ╥EGISTERS ╔N  : ╬ONE.
  449.  ╥EGISTERS ╧UT : .┴ = CHARACTER OR ERROR CODE, .├ = 1 IF ERROR.
  450.  ═EMORY ├HANGED: ╬ONE.
  451.  
  452. ╥OUTINE        : ┬╙╧╒╘ AKA ├╚╥╧╒╘
  453.  ╦ERNAL ┴DDRESS: $╞╞─2
  454.  ─ESCRIPTION   : ╧UTPUT BYTE TO CURRENT CHANNEL
  455.  ╥EGISTERS ╔N  : .┴ = ┬YTE
  456.  ╥EGISTERS ╧UT : .├ = 1 IF ┼╥╥╧╥ (EXAMINE ╥┼┴─╙╘)
  457.  ═EMORY ├HANGED: ─EPENDENT UPON CURRENT DEVICE.
  458.  
  459. ╥OUTINE        : ╠╧┴─
  460.  ╦ERNAL ┴DDRESS: $╞╞─5
  461.  ─ESCRIPTION   : ╠OADS FILE INTO MEMORY (SETUP VIA ╙┼╘╠╞╙,╙┼╘╬┴═)..
  462.  ╥EGISTERS ╔N  : .┴ = 0 - ╠OAD, ╬ON-0 = ╓ERIFY
  463.                  .╪┘ = LOAD ADDRESS (IF SECONDARY ADDRESS = 0)
  464.  ╥EGISTERS ╧UT : .┴ = ERROR CODE .├ = 1 IF ERROR.
  465.                  .╪┘ = ENDING ADDRESS 
  466.  ═EMORY ├HANGED: ┴S PER REGISTERS / DATA FILE.
  467.  
  468. ╥OUTINE        : ╙┴╓┼
  469.  ╦ERNAL ┴DDRESS: $╞╞─8
  470.  ─ESCRIPTION   : ╙AVE SECTION OF MEMORY TO A FILE.
  471.  ╥EGISTERS ╔N  : .┴ = ┌-PAGE PTR TO START ADRESS
  472.                  .╪┘ = END ADDRESS
  473.  ╥EGISTERS ╧UT : .┴ = ERROR CODE, .├ = 1 IF ERROR.
  474.                  .╪┘ = USED.
  475.  ═EMORY ├HANGED: ╬ONE.
  476.  
  477. ╥OUTINE        : ╙┼╘╘╔═
  478.  ╦ERNAL ┴DDRESS: $╞╞─┬
  479.  ─ESCRIPTION   : ╙ET INTERNAL CLOCK (╘╔$).
  480.  ╥EGISTERS ╔N  : .┴╪┘ - ├LOCK VALUE IN JIFFIES (1/60 SECS).
  481.  ╥EGISTERS ╧UT : ╬ONE.
  482.  ═EMORY ├HANGED: ╥ELEVANT SYSTEM TIME LOCATIONS SET.
  483.  
  484. ╥OUTINE        : ╥─╘╔═
  485.  ╦ERNAL ┴DDRESS: $╞╞─┼
  486.  ─ESCRIPTION   : ╥EADS INTERNAL CLOCK (╘╔$)
  487.  ╥EGISTERS ╔N  : ╬ONE.
  488.  ╥EGISTERS ╧UT : .┴╪┘ - ├LOCK VALUE IN JIFFIES (1/60 SECS).
  489.  ═EMORY ├HANGED: ╬ONE.
  490.  
  491. ╥OUTINE        : ╙╘╧╨
  492.  ╦ERNAL ┴DDRESS: ╞╞┼1
  493.  ─ESCRIPTION   : ╙CANS ╙╘╧╨ KEY.
  494.  ╥EGISTERS ╔N  : ╬ONE.
  495.  ╥EGISTERS ╧UT : .┴ = LAST KEYBOARD ROW, .╪ = DESTROYED (IF STOP KEY)
  496.  ═EMORY ├HANGED: ╬ONE.
  497.  ╬OTE          : ╘HE LAST KEYBOARD ROW IS AS FOLLOWS:
  498.                  .┴ -> ▄ 7   ▄ 6   ▄ 5   ▄ 4   ▄ 3   ▄ 2   ▄ 1  ▄ 0
  499.                   ╦┼┘: ▄╙╘╧╨ ▄╤    ▄├=   ▄╙╨┴├┼▄2    ▄├╘╥╠ ▄<-  ▄1
  500.  
  501. ╥OUTINE       : ╟┼╘╔╬
  502.  ╦ERNAL ┴DDRESS: $╞╞┼4
  503.  ─ESCRIPTION   : ╥EAD BUFFERED DATA FROM FILE.
  504.                  ╦EYBOARD - ╥EAD FROM KEYBOARD BUFFER, ELSE RETURN NULL ($00).
  505.                  ╥S-232   - ╥EAD FROM ╥S-232 BUFFER, ELSE NULL IS RETURNED.
  506.                  ╙ERIAL   - ╙EE ┬┴╙╔╬
  507.                  ├ASSETTE - ╙EE ┬┴╙╔╬
  508.                  ╙CREEN   - ╙EE ┬┴╙╔╬
  509.  ╥EGISTERS ╔N  : ╬ONE.
  510.  ╥EGISTERS ╧UT : .┴ = CHARACTER, .├ = 1 IF ERROR.
  511.                  .╪┘ = USED.
  512.  ═EMORY ├HANGED: ╬ONE.
  513.  
  514. ╥OUTINE       : ├╠┴╠╠
  515.  ╦ERNAL ┴DDRESS: $╞╞┼7
  516.  ─ESCRIPTION   : ├LOSE ALL OPEN FILES AND CHANNELS.
  517.  ╥EGISTERS ╔N  : ╬ONE.
  518.  ╥EGISTERS ╧UT : .┴╪ USED.
  519.  ═EMORY ├HANGED: ╬ONE.
  520.  ╬OTE          : ╘HIS ROUTINE DOES NOT _ACTUALLY_ CLOSE THE FILES, RATHER IT
  521.                  REMOVES THEIR PRESCENSE FROM THE FILE TABLES HELD IN MEMORY.
  522.                  ╔T'S RECOMMENDED TO USE CLOSE TO CLOSE FILES INSTEAD OF USING
  523.                  THIS ROUTINE.
  524.  
  525.  
  526. ╥OUTINE        : ╒─╘╔═┼
  527.  ╦ERNAL ┴DDRESS: $╞╞┼┴
  528.  ─ESCRIPTION   : ╒PDATE INTERNAL (╘╔$) CLOCK BY 1 JIFFIE (1/60 SEC).
  529.  ╥EGISTERS ╔N  : ╬ONE.
  530.  ╥EGISTERS ╧UT : .┴,.╪ DESTROYED.
  531.  ═EMORY ├HANGED: ╥ELEVANT SYSTEM TIME LOCATIONS CHANGED.
  532.  
  533. ╥OUTINE        : ╙├╥╧╥╟
  534.  ╦ERNAL ┴DDRESS: $╞╞┼─
  535.  ─ESCRIPTION   : ╥ETURNS CURRENT WINDOW/SCREEN SIZE
  536.  ╥EGISTERS ╔N  : ╬ONE.
  537.  ╥EGISTERS ╧UT : .╪ - ╫INDOW ╥OW ═AX
  538.                  .┘ - ╫INDOW ├OL ═AX
  539.                  .┴ - ╙CREEN ├OL ═AX (128 ONLY, 64 UNCHANGED)
  540.  ═EMORY ├HANGED: ╬ONE
  541.  
  542. ╥OUTINE        : ╨╠╧╘
  543.  ╦ERNAL ┴DDRESS: $╞╞╞0
  544.  ─ESCRIPTION   : ╥EAD OR SET CURSOR POSITION.
  545.  ╥EGISTERS ╔N  : .├ = 1 (╥EAD)        ▄      .├ = 0 (╙ET)
  546.                    ╬ONE.              ▄        .╪ = ├OL
  547.                                       ▄        .┘ = ╥OW
  548.  ╥EGISTERS ╧UT : .├ = 1 (╥EAD)        ▄      .├ = 0 (╙ET) 
  549.                    .╪ = ├URRENT ├OL   ▄         ╬ONE.
  550.                    .┘ = ├URRENT ╥OW   ▄
  551.  ═EMORY ├HANGED:  ╬ONE                ▄      ╙CREEN ┼DITOR ╠OCATIONS.
  552.  
  553. ╥OUTINE        : ╔╧┬┴╙┼
  554.  ╦ERNAL ┴DDRESS: $╞╞╞3
  555.  ─ESCRIPTION   : ╥ETURNS BASE OF ╔/╧ ┬LOCK
  556.  ╥EGISTERS ╔N  : ╬ONE.
  557.  ╥EGISTERS ╧UT : .╪┘ = ADDRESS OF ╔/╧ BLOCK ($─000)
  558.  ═EMORY ├HANGED: ╙CREEN ┼DITOR ╠OCATIONS.
  559.  
  560. ============================================================================
  561. 64╦ ╓─├ ╥┴═ AND AN ALTERNATE ╟┼╧╙128 ┬ACKGROUND ╙CREEN
  562. BY ╥OBERT ┴. ╦NOP ╩R. (RKNOP@TYBALT.CALTECH.EDU, ╥.╦╬╧╨1 ON ╟┼NIE)
  563.  
  564. ╔. ╔NTRODUCTION
  565.  
  566. ╟┼╧╙, BOTH THE 64 AND 128 VARIETIES, USES BITMAPPED SCREENS FOR ITS OUTPUT.
  567. ╔N 40 COLUMNS, THIS MEANS 8╦ OF SYSTEM MEMORY IS SET ASIDE FOR THE MAIN
  568. SCREEN.  ╘HEN, IN ADDITION, ╟┼╧╙ ALSO USES DISPLAY BUFFERING; IN OTHER WORDS,
  569. ╟┼╧╙ ALLOCATES A SECOND 8╦ AS A "BACKGROUND" (┬╟) SCREEN THAT IS USED TO KEEP
  570. AN INTACT COPY OF THE FOREGROUND (╞╟) SCREEN.  ╘HIS CAN BE VERY USEFUL FOR A
  571. NUMBER OF REASONS; ONE, IT CAN BE USED AS AN UNDO BUFFER, AS IT IS IN
  572. GEO╨AINT.  ╫HEN YOU HAVE A DELICATE DRAWING, AND THEN ACCIDENTALLY RUN THE
  573. ERASER ACROSS IT, THE EFFECTS OF THE ERASER ARE ONLY WRITTEN TO THE ╞╟ SCREEN.
  574. ┴ CLICK OF THE ╒╬─╧ BUTTON BRINGS THE ┬╟ SCREEN, WITH THE PRE-ERASER VERSION
  575. OF YOUR PAINTING, BACK TO THE FORE.  ┴NOTHER USE IS FOR BUFFERING THE CONTENTS
  576. OF THE SCREEN WHEN SOMETHING LIKE A DIALOG BOX OR A MENU IS WRITTEN OVER IT.
  577. ╫HEN A DIALOG BOX IS ERASED, AND YOU SEE WHATEVER HAD BEEN UNDERNEATG IT
  578. MAGICALLY REAPPEAR, THE GRAPHICS UNDERNEATH ARE BEING PULLED FROM THE ┬╟
  579. SCREEN.
  580.  
  581. ┴PPLICATIONS HAVE THE OPTION NOT TO USE THE ┬╟ SCREEN.  ├HANGE A COUPLE OF
  582. VECTORS AND FLAGS, AND YOU CAN USE THE 8╦ ┬╟ SCREEN FOR APPLICATION ╥┴═.
  583. (╘HIS IS VERY CONVENIENT, SINCE THE ┬╟ SCREEN IS DIRECTLY ABOVE THE NORMAL 22╦
  584. OF APPLICATION ╥┴═ IN THE ╟┼╧╙ MEMORY MAP.)  ╧F COURSE, THE APPLICATION THEN
  585. HAS TO PROVIDE SOME WAY OF REDRAWING BLOCKS OF THE SCREEN HIDDEN BY MENUS AND
  586. DIALOG BOXES.  GEO╫RITE IS AN EXAMPLE OF THIS; WHEN YOU BRING UP, AND EXIT
  587. FROM, A DIALOG BOX IN GEO╫RITE, THERE IS BRIEFLY A BLANK RECTANGLE ON THE
  588. SCREEN BEFORE THE TEXT IS REDRAWN ON THE SCREEN.
  589.  
  590. ╒NDER ╟┼╧╙128 IN 80 COLUMNS, THE BITMAP SCREEN IS NOW TWICE AS LARGE: 640X200
  591. INSTEAD OF 320X200.  ╘HE ╞╟ SCREEN, HERE 16╦, OCCUPIES ╓─├ MEMORY.  ╘HE MEMORY
  592. USED FOR BOTH THE 40 COLUMN ╞╟ AND 40 COLUMN ┬╟ SCREEN IS USED FOR THE 80
  593. COLUMN ┬╟ SCREEN.
  594.  
  595. ╟┼╧╙128 WAS WRITTEN FOR, AND RUNS ON, 128'S WITH ONLY THE USUAL 16╦ OF ╓─├
  596. ╥┴═.  ┴ND, IT USES BASICALLY ALL 16╦ OF THIS ╥┴═.  ╚OWEVER, IF YOU HAVE 64╦ OF
  597. ╓─├ ╥┴═ (AS IS THE CASE WITH 128─'S, AND WITH FLAT 128'S THAT HAVE BEEN
  598. UPGRADED), YOU'VE GOT AN ADDITIONAL 48╦ OF ╓─├ ╥┴═ THAT THE ╟┼╧╙ SYSTEM
  599. DOESN'T TOUCH.  ╙O, WHY NOT USE SOME OF THIS ╥┴═ AS A 80 COLUMN ┬╟ SCREEN?
  600. ╘HEN, IF YOU ARE WRITING AN 80-COLUMN ONLY APPLICATION, YOU GET AN EXTRA 16╦,
  601. THE 40-COLUMN ┬╟ SCREEN AT $6000 AND THE 40-COLUMN ╞╟ SCREEN AT $A000, IN MAIN
  602. MEMORY WHICH YOUR APPLICATION CAN USE HOWEVER IT SEES FIT.
  603.  
  604.  
  605. ╔╔. ╙UPPORT ╥OUTINES
  606.  
  607. ╧NLY A SMALL NUMBER OF ROUTINES ACTUALLY NEED TO BE WRITTEN TO IMPLEMENT THIS
  608. SCHEME; MOREOVER, THESE ROUTINES ARE REALATIVELY STRAIGHTFORWARD.  ┴FTER ALL,
  609. WE ARE SIMPLY COPYING MEMORY FROM ONE PART OF ╓─├ ╥┴═ TO ANOTHER.  ╘HE ╓─├'S
  610. BLOCK COPY FEATURE OF THE ╓─├ IS VERY HELPFUL IN THIS ENDEAVOR.  (╙EE ├RAIG
  611. ╘AYLOR'S ARTICLE FROM LAST ISSUE, OR MOST ANY 128 PROGRAMMING GUIDE.)  ╘HE
  612. FILE VDC-BG.SFX, ASSOCIATED WITH THIS ISSUE OF THE ╚ACKING ═AG, IS A
  613. SELF-EXTRACTING ARCHIVE WITH A NUMBER OF GEO╨ROGRAMMER SOURCE FILES (IN
  614. GEO╫RITE 2.1 FORMAT) AND A SMALL DIPPY DEMONSTRATION PROGRAM.  ╘HE FILE ╓─├-┬╟
  615. CONTAINS THE FOLLOWING ROUTINES:
  616.  
  617. ╔NIT╓─├       -- MAKE SURE YOUR ╓─├ KNOWS IT HAS 64╦ ╥┴═
  618. ╓─├╔MP╠INE    -- ╔MPRINT HORIZONTAL LINE FROM ╞╟ SCREEN TO ┬╟ SCREEN
  619. ╓─├╥EC╠INE    -- ╥ECOVER HORIZONTAL LINE FROM ┬╟ SCREEN TO ╞╟ SCREEN
  620. ╓─├╔MP╥ECT    -- ╔MPRINT RECTANGLE FROM ╞╟ SCREEN TO ┬╟ SCREEN
  621. ╓─├╥EC╥ECT    -- ╥ECOVER RECTANGLE FROM ┬╟ SCREEN TO ╞╟ SCREEN
  622.  
  623. ┼ACH ╔MPRINT ROUTINE ACTUALLY USES MOST OF THE SAME CODE AS THE CORRESPONDING
  624. ╥ECOVER ROUTINE; ALL THAT DIFFERS IS THE OFFSET TO THE "SOURCE" AND
  625. "DESTINATION" SCREENS IN ╓─├ ╥┴═.  (╘HE OFFSET FOR THE ╞╟ SCREEN IS $0000, AND
  626. FOR THE ┬╟ SCREEN IS $4000.)  ╘HE ROUTINES TAKE THE SAME ARGUMENTS AS THE
  627. NON-╓─├ ╔MPRINT AND ╥ECOVER ROUTINES AS DOCUMENTED IN THE ╚ITCHHIKER'S ╟UIDE.
  628. (┘OU WILL NOTE, HOWEVER, THAT FOR WHATEVER REASON THE STANDARD ╟┼╧╙
  629. ╔MPRINT╠INE AND ╥ECOVER╠INE ROUTINES WERE ONLY IMPLEMENTED FOR ┴PPLE ╟┼╧╙.)
  630. ┬RIEFLY, THESE ARE:
  631.  
  632. ╥OUTINE:     ╔NIT╓─├
  633.  
  634. ╨ASS:        ╬OTHING
  635.  
  636. ╥ETURN:      ╬OTHING
  637.  
  638. ─ESTROYS:    A,X
  639.  
  640. ╬OTE:        ╘HIS ROUTINE SHOULD BE CALLED AT THE VERY BEGINNING OF YOUR
  641.              PROGRAM BEFORE YOU DO ANY WRITING TO THE ╞╟ SCREEN OR THE ╓─├.
  642.  
  643. ------------------------------------------------------------------------------
  644.  
  645.  
  646. ╥OUTINE:     ╓─├╔MP╠INE
  647.              ╓─├╥EC╠INE
  648.  
  649. ╨ASS:        R3   -- LEFT EDGE OF LINE TO IMPRINT/RECOVER (WORD)
  650.              R4   -- RIGHT EDGE OF LINE TO IMPRINT/RECOVER (WORD)
  651.              R11╠ -- Y COORDINATE OF LINE TO IMPRINT/RECOVER (BYTE)
  652.  
  653. ╥ETURN:      R3, R4 -- PROCESSED THROUGH ╬ORMALIZE╪
  654.  
  655. ─ESTROYS:    A,X,Y,R5-R8,R11
  656.  
  657. -------------------------------------------------------------------------------
  658.  
  659. ╥OUTINE:     ╓─├╔MP╥ECT
  660.              ╓─├╥EC╥ECT
  661.  
  662. ╨ASS:        R3   -- X-COORDINATE OF UPPER-LEFT CORNER (WORD)
  663.              R2╠  -- Y-COORDINATE OF UPPER-LEFT CORNER (BYTE)
  664.              R4   -- X-COORDINATE OF LOWER-RIGHT CORNER (WORD)
  665.              R2╚  -- Y-COORDINATE OF LOWER-RIGHT CORNER (BYTE)
  666.  
  667. ╥ETURN:      R3,R4 -- PROCESSED THROUGH ╬ORMALIZE╪
  668.  
  669. ─ESTROYS:    A,X,Y,R5-R8,R10╠,R11
  670.  
  671. ------------------------------------------------------------------------------
  672.  
  673.  
  674. ╘O DISCUSS THE IMPRINT AND RECOVER LINE ROUTINES, CONSIDER THE ┴╙├╔╔ DIAGRAM
  675. OF A PORTION OF A LINE ON THE ╓─├ SCREEN.  ┴ X INDICATES A PIXEL THAT IS IN
  676. THE LINE TO BE COPIED.  ╘HE ╔'S INDICATE BYTE BOUNDARIES; THE PIXEL BELOW EACH
  677. ╔ IS THE MSB OF THE CORRESPONDING BYTE IN THE ╓─├ BITMAP.  (┬YTES INCREASE
  678. HORIZONTALLY ACROSS THE SCREEN; THERE IS NO CARD STRUCTURE FOUND IN THE 80
  679. COLUMN BITMAP SCREEN.)
  680.  
  681.            ╔       ╔       ╔       ╔
  682.            ....XXXXXXXXXXXXXXXXXXXXXXXXX...
  683.                 ^  \______________/  ^
  684.              LEFT          ╔         RIGHT
  685.           RESIDUAL     FULL BYTES    RESIDUAL
  686.  
  687. ╘HE LINE MOVING ROUTINE NEEDS TO FIGURE THE LOCATION IN ╓─├ ╥┴═ OF THE
  688. LEFTMOST FULL BYTE, THE NUMBER OF FULL BYTES, AND THE LOCATION OF THE TWO
  689. RESIDUAL BYTES; ADDITIONALLY, IT BUILDS A BIT MASK FOR THE RESIDUAL BYTES,
  690. WITH BITS SET CORRESPONDING TO PIXELS TO BE COPIED.  ╘HIS MASK IS USED TO
  691. CREATE THE PROPER COMBINATION OF DATA FROM THE SOURCE AND DESTINATION SCREENS
  692. IN THE TWO RESIDUAL BYTES.
  693.  
  694. ╧NCE IT KNOWS ALL THIS, ALL THE LINE ROUTINES DO IS (1) SUBMIT A ╓─├ BLOCK
  695. COPY TO COPY THE FULL BYTES, (2) READ THE LEFT RESIDUAL BYTE FROM THE SOURCE,
  696. MASK OUT THE APPROPRIATE PIXELS, AND ╧╥ IT WITH THE APPROPRIATE PIXELS FROM
  697. THE DESTINATION, AND WRITE THAT ONE BYTE (3) REPEAT (2) FOR THE RIGHT RESIDUAL
  698. BYTE.
  699.  
  700. ╘HE RECTANGLE ROUTINES SIMPLY CALL THE LINE COPY ROUTINES REPEATEDLY,
  701. (R2╚)-(R2╠)+1 TIMES.  (╬OTE THAT WHILE THIS IS THE MOST EFFICIENT WAY TO DO IT
  702. FROM A CODING TIME POINT OF VIEW <GRIN>, REALLY THE RECTANGLE ROUTINES ONLY
  703. NEED CALCULATE THE RESIDUAL BIT MASKS AND THE LOCATIONS ONCE.  ╘HEREAFTER,
  704. LOCATIONS CAN BE UPDATED BY ADDING 80 (THE LENGTH OF A ╓─├ LINE) FOR EACH NEW
  705. LINE.  ╘HE CHANGES TO THE CODE TO IMPLEMENT THIS ARE NOT DIFFICULT, AND IT
  706. ISN'T CLEAR WHY ╔ DIDN'T MAKE THEM....)
  707.  
  708.  
  709. ╔╔╔. ╒SE OF THE ╥OUTINES
  710.  
  711. ╔N A WORD, YOU USE THESE ROUTINES WHENEVER YOU WOULD HAVE USED THE NORMAL ╟┼╧╙
  712. IMPRINT/RECOVER ROUTINES.  ╘HERE ARE A FEW OTHER CONSIERATIONS, THOUGH.
  713.  
  714. ╞IRST OF ALL, YOU NEED TO SET THE FLAG DISP┬UFFER╧N TO ╙╘_╫╥_╞╧╥┼.  ╘HE ╟┼╧╙
  715. SYSTEM GRAPHIC ROUTINES THINK THAT THE ┬╟ SCREEN IS IN MAIN MEMORY, AND THUS
  716. WILL NOT CORRECTLY USE YOUR NEW ╓─├ ┬╟ SCREEN.  ╘HIS MEANS, UNFORTUNATELY,
  717. THAT YOU CAN'T JUST BLITHELY GO DRAWING GRAPHICS, ASSUMING THAT THEY'LL BE
  718. BUFFERED FOR RECALL WHEN NEEDED.  ╚OWEVER, IT IS NOT TOO MUCH TROUBLE TO MAKE
  719. A CALL TO ╓─├╔MP╥ECT EITHER RIGHT AFTER YOU'VE MADE SOME GRAPHIC CHANGE, OR
  720. RIGHT BEFORE SOMETHING POTENTIALLY HAZARDOUS WILL HAPPEN (E.G. A CALL TO
  721. ─O─LG┬OX).  ╞OR INSTANCE, YOU MIGHT HAVE ALL OF YOUR MAIN MENUS BE ─YNAMIC
  722. ╙UBMENUS WHICH CALL ╓─├╔MP╥ECT BEFORE OPENING THE SUBMENU.
  723.  
  724. ╙ECOND, YOU SHOULD LOAD RECOVER╓ECTOR WITH ╓─├╥EC╥ECT.  ╙INCE ╓─├╥EC╥ECT TAKES
  725. THE SAME PARAMETERS AS ╥ECOVER╥ECTANGLE, IT CAN SUBSTITUTE DIRECTLY FOR IT.
  726. ╧NCE YOU SET THIS VECTOR, ALL MENUS AND DIALOG BOXES ERASED FROM THE SCREEN
  727. AUTOMATICALLY RESTORE THE DESTROYED REGION FROM YOUR ╓─├ ┬╟ SCREEN.
  728.  
  729. ┬OTH OF THESE ARE DEMONSTRATED IN THE TEST PROGRAM INCLUDED IN VDC-BG.SFX.
  730.  
  731.  
  732. ╔╓. ┴NOTHER 32╦
  733.  
  734. ╘HE ALERT READER WILL HAVE NOTICED THAT THE ╓─├ ┬╟ SCREEN ONLY TAKES AS MUCH
  735. MEMORY AS THE ╓─├ ╞╟ SCREEN, I.E. 16╦.  ╘HUS, EVEN WITH THIS SCHEME, THERE IS
  736. STILL ANOTHER 32╦ OF FREE MEMORY IN ╓─├ ╥┴═.  ╤UADRUPLE BUFFERING, ANYONE?
  737.  
  738. ┴ MORE TANTALIZING PROSPECT WOULD BE TO IMPLEMENT A 640X400 INTERLACED SCREEN
  739. FOR ╟┼╧╙128.  ╘HIS PRESENTS A NUMBER OF PROBLEMS, HOWEVER.  ╞IRST, THERE IS
  740. THAT TERRIBLE FLICKER.  ┬UT, THIS CAN BE MADE REASONABLE THROUGH THE USE OF
  741. POLARIZING FILTERS (IN LAYMAN'S TERMS, "SUNGLASSES") AND APPROPRIATE COLOR
  742. CHOICES.  ═ORE SERIOUSLY, THE ╟┼╧╙ KERNAL GRAPHIC ROUTINES ALL TAKE BYTE
  743. ARGUM└>:S FOR ┘ COORDINATES.  ╙O, ALL 400 VERTICAL PIXELS CANNOT BE ADDRESSED
  744. WITH THOSE ROUTINES.  ╘HUS, SOMBODY IMPLEMENTING A ╟┼╧╙ INTERLACED SCREEN IS
  745. FACED WITH RE-WRITING ALL OF THE GRAPHICS ROUTINES.  (╙OMETHING TO DO WITH THE
  746. 8╦ YOU'VE FREED UP AT $A000, ╔ SUPPOSE.)  ╙INCE EACH 640X400 GRAPHIC SCREEN
  747. WOULD REQUIRE 32╦ OF MEMORY FOR THE BITMAP, YOU COULD STILL HAVE A ╓─├
  748. ┬ACKGROUND SCREEN.
  749.  
  750. [ ╬OTE: ╘HE CODE DISCUSSED WITHIN THIS ARTICLE IS AVAILABLE VIA ANONYMOUS 
  751. ╞╘╨ AT TYBALT.CALTECH.EDU UNDER THE DIRECTORY PUB/RKNOP/HACKING.MAG AS 
  752. VDC-BG.SFX. ╘HIS WILL DISSOLVE INTO THE ╟┼╧╫╥╔╘┼ SOURCE FILES.]
  753.  
  754. ============================================================================
  755.  
  756. ╟EO╨AINT ╞ILE ╞ORMAT
  757. --------------------
  758. BY ┬RUCE ╓RIELING (BVRIELING@UNDERGRAD.MATH.WATERLOO.EDU)
  759.  
  760. ╟EO╨AINT IS AN EXCELLENT GRAPHICS PROGRAM WRITTEN FOR THE ╟┼╧╙ ENVIRONMENT. ╔TS
  761. DISK ACCESS IS RELATIVELY QUICK, COMPARED IT TO WHAT A COMPARABLE PROGRAM WOULD
  762. DO ON A NON-╟┼╧╙ EQUIPPED ├64. ╨ART OF THIS ACCOMPLISHMENT CAN BE ATTRIBUTED TO
  763. THE DISK╘URBO THAT IS AN INTEGRAL PART OF ╟┼╧╙. ╚OWEVER, THE SPECIAL ╟EO╨AINT
  764. FILE-SAVING SCHEME DESERVES SOME OF THE CREDIT.
  765.  
  766.  
  767. ╓╠╔╥
  768. ----
  769.  
  770. ╟EO╨AINT FILES ARE ALWAYS STORED IN ╓ARIABLE ╠ENGTH ╔NDEXED ╥ECORDING FILES. 
  771. ╓╠╔╥ FILES OFFER ADVANTAGES NOT AVAILABLE WITHOUT ╟┼╧╙. ╟ENERALLY SPEAKING, ╓╠╔╥
  772. IS THE ULTIMATE IN ╥┼╠┴╘╔╓┼ FILES.
  773.  
  774. ╘HE FORMAT OF A ╓╠╔╥ FILE IS NOT THAT DIFFICULT TO FIGURE OUT. ╫HILE IN A 
  775. REGULAR ├64 FILE, THE TWO BYTES DIRECTLY FOLLOWING THE ╞╔╠┼╘┘╨┼ BYTE IN THE 
  776. DIRECTORY WOULD POINT TO THE DATA FILE FOLLOWING, ╓╠╔╥ FILES USE THESE TWO BYTES
  777. TO POINT TO A ╓╠╔╥ ╚┼┴─┼╥ ┬╠╧├╦ (DON'T CONFUSE THE ╓╠╔╥ ╚┼┴─┼╥ BLOCK WITH THE
  778. ╔╬╞╧ BLOCK). ╘HE FIRST TWO BYTES OF THIS BLOCK ARE $00/╞╞, AS THE HEADER BLOCK 
  779. IS A ═┴╪╔═╒═ OF ONE BLOCK LONG. (╘HIS IS WHY WHEN YOU ╓┴╠╔─┴╘┼ A ╟┼╧╙ DISK FROM
  780. ├64 MODE, ╟EO╨AINT PICTURES ARE LOST. ╧NLY THE HEADER BLOCK IS RECOGNISED AS 
  781. BEING PART OF THE FILE. ╘HE REST OF THE PICTURE GETS DEALLOCATED IN THE ┬┴═). 
  782. ╘HE REMAINING 254 BYTES IN THE BLOCK ARE DIVIDED INTO 127 2-BYTE POINTERS TO 
  783. TRACKS/SECTORS ON THE DISK. ╘HESE POINTERS POINT TO THE INDIVIDUAL RECORDS OF 
  784. THE ╓╠╔╥ FILE, WHICH MAY BE ┴╬┘ NUMBER OF BLOCKS LONG. ╘HE ╓╠╔╥ TRACK/SECTOR 
  785. POINTERS IN THE ╓╠╔╥ HEADER BLOCK ONLY POINT TO THE ╞╔╥╙╘ BLOCK OF THE CHAIN. 
  786. ╞ROM THEN ON, THE SECTORS CHAIN THEMSELVES TOGETHER USING THE NORMAL FORMAT IE.
  787. THE FIRST TWO BYTES OF EACH BLOCK POINT TO THE FOLLOWING BLOCK.
  788.  
  789. ┴ SAMPLE ╟EO╨AINT ╓╠╔╥ HEADER MIGHT LOOK LIKE THIS:
  790.  
  791.