home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / c64 / programming / atbasic.lzh / atbasic / atbasic.asc < prev    next >
Encoding:
Text File  |  1995-01-04  |  12.1 KB  |  279 lines

  1.  
  2.  
  3.                               @BASIC 
  4.  
  5.             BY a. fACHAT (FACHAT@GALILEO.RHEIN-NECKAR.DE)
  6. -----------------------------------------------------------------------
  7.      @BASIC IS COVERED BY THE gnu PUBLIC lICENSE, SEE FILE copying
  8.  
  9.  
  10. 0) pREFACE 
  11.    tHE pROGRAMM @BASIC IS A basic EXTENSION WITH OVER 40 NEW basic COMMANDS
  12.    AND SEVERAL ADDITIONAL FEATURES.
  13.    i HAVE WRITTEN THIS PROGRAMM SOME YEARS AGO AND i DO NOT SUPPORT 
  14.    IT ANY MORE. i DO ALSO NOT TAKE ANY WARRANTY FOR THIS PROGRAMM OR ITS
  15.    USE IN ANY FORM.  
  16.  
  17. 1) hOW TO USE
  18.    tO USE THIS basic EXTENSION, YOU HAVE TO LOAD THIS EXTENSION INTO MEMORY
  19.    AS A MACHINE PROGRAMM (",8,1") AND THEN INITIALIZE IT BY A RESET OR
  20.    "sys 64738". aLL cOMMANDS ARE NOW AVAILABLE. tO RESTORE A basic PROGRAMM,
  21.    USE THE NEW COMMAND "old". 
  22.    yOU LOOSE 8KbYTE OF basic MEMORY, BUT $C000-$CFFF STAYS FREE.
  23.  
  24. 2) cOMMANDS
  25.    aLL COMMANDS CAN BE ABBRIVIATED AS USUAL (DEl FOR delete AND SO)
  26.  
  27.    a) tOOLKIT
  28.    trace     SWITCHES ON tRACE MODE, I.E. THE ACTUAL basic LINE IS BEING
  29.              PRINTED IN THE FIRST TWO LINES OF THE SCREEN.
  30.              pRESSING THE SHIFT kEY GIVES CONTINOUS EXECUTION, cbm kEY MAKES
  31.              SINGLE STEP. "trace off" SWITCHES BACK TO NORMAL MODE.
  32.              tHESE TWO COMMANDS CAN BE ANYWHERE IN THE PROGRAMM CODE.
  33.  
  34.    delete    tHIS COMMAND REMOVES lINES FROM THE basic CODE. sYNTAX AS 
  35.              THE SYNTAX FROM THE list COMMAND.
  36.  
  37.    auto      aUTOMATIC LINENUMBERING WHILE INPUTTING A NEW basic PROGRAMM.
  38.              i.E. tHE COMPUTER AUTOMAGICALLY PRINTS THE LINE NUMBER ON THE 
  39.              SCREEN, YOU JUST TYPE THE basic CODE. aN EMPTY LINE STOPS THIS
  40.              MODE. aN ASTERIX ("*") BEFORE THE LINE NUMBER SAYS THAT THIS 
  41.              LINE ALREADY EXISTS. wITH AN EMPTY LINE YOU CAN BREAK WITHOUT
  42.              OVERWRITING THE EXISTING LINE. 
  43.              wITH AN ADDITIONAL tEXT YOU CAN EVEN SPARE WRITING E.G. "data"
  44.              EACH AND EVERY LINE - IT GETS PRINTED AND WRITEN TO THE LINE.
  45.              (E.G. "auto 10000,10,data" FIRST PRINTS " 10000 data" AND WAITS
  46.              FOR THE INPUT LINE AND THEN PRINTS " 10010 data" AND SO ON)
  47.              sTANDARD IS STARTING LINE 100, AND GO ON WITH STEPS OF 10
  48.              sYNTAX: 
  49.                 auto [sTARTING_LINE][,[sTEPPING][,ADDITIONAL_TEXT]
  50.     
  51.    old       tHIS COMMAND RECALLS A basic PROGRAMM THAT HAS BEEN REMOVED WITH
  52.              "new" OR BY A reset. yOU MUST NOT DEFINE ANY VARIABLE AFTER THE
  53.              DELETION OF THE PROGRAMM BECAUSE THAT WILL OVERWRITE THE PROGRAMM
  54.              CODE. nOTE THAT A "syntax error" SOMETIME IS AN INDICATOR THAT 
  55.              A NEW VARIABLE HAS BEEN DEFINED BECAUSE A COMMAND HAS NOT BEEN
  56.              RECOGNIZED.
  57.  
  58.    dump      tHIS COMMAND PRINTS OUT ALL ACTUAL VARIABLES, DEFINED FIELDS
  59.              AND FUNCTIONS.
  60.  
  61.    find      SEARCHES THE COMPLETE basic PROGRAMM FOR A SPECIFIC EXPRESSION
  62.              "find get" E.G. LISTS ALL LINES THAT CONTAIN THE "get" basic
  63.              COMMAND.
  64.  
  65.    renumber  RENUMBERS A basic PROGRAMM. aLL gotoS, gosubS AND if thenS 
  66.              GET NEW NUMBERS TO POINT TO THE SAME LOCATION, JUST WITH THE
  67.              SAME NUMBER.
  68.              yOU CAN EVEN RENUMBER ONLY A PART OF THE PROGRAMM.
  69.              sYNTAX:
  70.                 renumber [[sTARTING_lINE][,[sTEPPING][,[sTART_OF_AREA][-]
  71.                           [eND_OF_aREA]]]]
  72.  
  73.    dload/dsave/dverify/mload/mverify/msave
  74.              nEW dISK bASIC COMMANDS. d* WORKS FOR basic PROGRAMMS THAT ARE 
  75.              ON dISK, m* WORKS ON mACHINE LANGUAGE PROGRAMMS THAT ARE ON dISK.
  76.              sYNTAX:
  77.                 dload"NAME"[,d0][,u8]
  78.                 msave"NAME"[,d0][,u8],STARTADDRESS,ENDADDRESS
  79.                 mload"NAME"[,d0][,u8][,STARTADDRESS]
  80.              *verify IS AS *load; dsave IS AS dload. rEPLACE THE 0 WITH
  81.              THE dISK DRIVE ON YOUR fLOPPY uNIT THE FILE IS ON AND THE 8 WITH
  82.              THE uNIT (iec) ADDRESS.
  83.    run       tHIS IS NEW, MAN? yES IT IS:
  84.                 run"NAME"[,d0][,u8] 
  85.              LOADS AND IMMEDIATELY RUNS A basic PROGRAMM.
  86.  
  87.    catalog/directory
  88.              SHOWS THE DIRECTORY OF THE SPECIFIED DRIVE.
  89.                 catalog[#4][,]["MASK"][,d0][,u8]
  90.              REPLACE THE 4 WITH THE PRINTER (iec) DEVICE YOU WANT TO PRINT
  91.              THE DIRECTORY ON.
  92.  
  93.    scratch   REMOVES FILE(S) FROM DISK
  94.    collect   CHKDSK 
  95.    header    FORMATS FLOPPY
  96.    copy      COPIES FILES ON dISK, NOT VIA THE COMPUTER. wORKS BEST ON DUAL
  97.              DRIVE FLOPPIES.
  98.    backup    cOPIES WHOLE DISKS ON DUAL DRIVE FLOPPIES.
  99.    rename    RENAMES FILES.
  100.    COMMON SYNTAX:
  101.              command ["NAME1"][,][d0] [to ["NAME2"][,][d1]] [,u8]
  102.  
  103.    disk      A) SENDS A COMMAND TO A DISK DRIVE: disk"COMMAND"[,u8]
  104.              B) SETS DEFAULT DEVICE (THE ONE THAT IS USED WITHOUT A ",uX"):
  105.                 disk DEV (E.G. "disk 9")
  106.  
  107.    ds/ds$    tHESE TWO VARIABLES REPRESENT THE STATUS OF THE DISK.
  108.              ds  IS THE NUMERICAL CODE (=0)
  109.              ds$ IS THE ERROR STRING (=00, OK,00,00)
  110.  
  111.    append/merge
  112.              append APPENDS A basic PROGRAMM TO THE ONE IN MEMORY.
  113.              merge MERGES THE NEW PROGRAMM INTO THE OLD ONE, USING 
  114.              LINE NUMBERS. i.E. IF THE PROGRAMM IN MEMORY HAS LINE NUMBERS
  115.              ABOVE 1000 AND THE ONE ON DISK NUMBERS BELOW, WE END UP
  116.              WITH THE "merge"'D PROGRAMM IN FRONT OF THE OLD ONE.
  117.              sYNTAX IS AS dload.
  118.  
  119.    list/enter
  120.              'list #4 [,[A][-][E]]' LISTS THE PROGRAMM DIRECTLY TO THE PRINTER.
  121.              'list "NAME"[,d0][,u8] [,[A][-][E]]' LISTS THE PROGRAMM DIRECTLY 
  122.              INTO A FILE ON dISK.
  123.              'enter "NAME"[,d0][,u8]' LOADS THIS ascii FILE BACK INTO 
  124.              MEMORY AND PUTS THE LINES IN THE RIGHT PLACE. iT EVEN 
  125.              EXECUTES COMMANDS FROM THE FILE (EVER HEARD ABOUT STDIN
  126.              REDIRECTION?)
  127.              fOR THOSE RUNNING "speeddos", YOU HAVE TO SWITCH OF THE DISPLAY
  128.              OF THE MEMORY LOCATION THE PROGRAMM IS LOADED TO BEFORE THE
  129.              FIRST mload/dload/load IN ANY 'ENTER' FILE BY DOING "poke $0298,3"
  130.              yOU CAN EASILY CREATE AN EXECUTABLE ENTER FILE BY:
  131.                 open 1,8,1,"ENTERFILE"
  132.                 print#1,"mload"CHR$(34)"LOAD ME"CHR$(34)",$C000"
  133.                 print#1,"mload"CHR$(34)"@MON 1.1/7"CHR$(34)
  134.                 print#1,"himem$7000"
  135.                 close1
  136.  
  137.    key       IS THE KEY TO THE FUNCTION KEYS ;-)
  138.              key SHOWS THE CURRENT FUNCTION KEY MAPPING,
  139.              key 1,"dump" PUTS THE STRING "dump" ON f-KEY 1
  140.              tHE APOSTROPH (') IS CONVERTED INTO (") AND THE LEFT ARROW
  141.              BECOMES A CARRIAGE RETURN.
  142.              key off SWITCHES THE KEY MAPPING OFF, key on SWITCHES BACK ON.
  143.  
  144.    colour    colour [bORDER_COLOUR][,[bACKGROUND_COLOUR][,cURSOR COLOUR]]
  145.              SETS THE COLOURS.
  146.  
  147.    set time / set alarm
  148.              tHESE COMMANDS HANDLE THE BUILTIN "tIME OF dAY" CLOCK.
  149.              set time "1213145" SETS THE tod TO 12 O'CLOCK, 13 MINUTES,
  150.              14 SECONDS AND 5 TENTHS OF A SECOND.
  151.              set alarm HAS THE SAME SYNTAX. alarm off SWITCHES THE alarm
  152.              CLOCK OFF, alarm on BACK AGAIN.
  153.              wHEN THE ALARM GOES OFF, THE COMPUTER STOPS AND MAKES AN AWFUL
  154.              NOISE ;-) (run/stop GIVES IT A BREAK ;-)
  155.              tHE VARIABLE time GIVES THE ACTUAL tod IN THE SAME 5 DIGIT FORMAT.
  156.  
  157.    help      LISTS ALL NEW COMMANDS AND FUNCTIONS.
  158.   
  159.    basic/reset/exit
  160.              basic EXITS @BASIC AND GOES BACK TO cbm basic, BUT KEEPS THE
  161.              MEMORY FOR @BASIC ALLOCATED. A RUN/STOP-RESTORE BRINGS YOU BACK.
  162.              reset REINITIALIZES @BASIC AND exit EXITS @BASIC FULLY AND GOES
  163.              BACK TO cbm bASIC
  164.  
  165.    screen    SWITCHES THE ACTUAL SCREEN WITH A BUFFERED ONE, I.E. THE NOW
  166.              ACTUAL ONE GETS BUFFERED AND THE BUFFERES ONE IS DISPLAYED.
  167.              aT THE FIRST TIME THE SCREEN IS FILLED WITH NONSENSE, YOU HAVE
  168.              TO CLEAR IT (OTHERWISE THE COMPUTER MAY EVEN CRASH). bUT THE
  169.              BUFFERED SCREEN IS KEPT OVER A RESET.
  170.  
  171.    b) tHE sCREEN EDITOR
  172.    tHE SCREEN EDITOR IS A BIT IMPROVED. yOU HAVE SOME ADDITIONAL KEYS 
  173.    AVAILABLE: 
  174.  
  175.    ctrl-l    CLEAR THE REST OF THE LINE FROM THE CURSOR POSTITION.
  176.    ctrl-a    PUT THE CURSOR BEHIND THE LAST CHARACTER OF THE ACTUAL LINE.
  177.    ctrl-u    GO TO THE LOWER LEFT EDGE OF THE SCREEN
  178.    ctrl-z    INSERT MODE
  179.    ctrl-d    dELETE THE CHARACTER UNDERNEATH THE CURSOR AND MOVE THE
  180.              REST OF THE LINE ONE CHARACTER TO THE LEFT.
  181.  
  182.    yOU CAN MAP THESE KEYS TO OTHER CODES (E.G. speeddos USERS MAY MAP
  183.    ctrl-u TO ctrl-hOME ($82) AND ctrl-l TO ctrl-dEL ($84)). pEOPLE WHO
  184.    BURN THEIR OWN KERNEL eprom, YOU CAN FILL UNUSED ENTRIES IN THE
  185.    ctrl-KEYMAP AT $EC78 WITH UNUSED CODES (E.G. $80-$84) AND MAP E.G. 
  186.    ctrl-cRSRrIGHT TO $80 TO 'pUT CURSOR TO THE END OF THE LINE' (FORMER
  187.    ctrl-a)
  188.  
  189.    lIST-sCROLL
  190.    iF YOU MOVE THE CURSOR 'OUT OF THE SCREEN' AT THE TOP OR THE BOTTOM OF
  191.    OF THE SCREEN, THE SCREEN SCROLLS UP AND DOWN AND A basic LISTING 
  192.    IS BEING CONTINUED, I.E. THE RIGHT LINES ARE BEING PRINTED ON THE TOP
  193.    OR THE BOTTOM OF THE SCREEN.
  194.  
  195.    c) aRITHMETIC
  196.    eACH VALUE CAN NOW BE EXPRESSED IN DECIMAL AS USUAL, IN HEXADECIMAL
  197.    WITH A PRECEEDING "$" AND IN BINARY FORMAT WITH A PRECEEDING "%".
  198.    bOTH HAVE A MAXIMAL LENGTH OF 16 bIT, I.E. 16 BINARY DIGITS OR 4 HEX
  199.    DIGITS.
  200.  
  201.    hex$/bin$ BUILD A HEX/BINARY STRING OUT OF AN INTEGER. 
  202.    TRY 'print hex$(123),bin$(245)'
  203.  
  204.    deek/doke
  205.    sAME AS peek/poke, JUST FOR TWO BYTE VALUES. LOW BYTE GOES IN THE
  206.    LOWER ADDRESS, THE HIGH BYTE INTO THE HIGHER BYTE.
  207.  
  208.    loram/hiram
  209.    tHESE COMMANDS SET THE START OF basic ram AND END OF basic ram POINTER
  210.    TO NEW VALUES. tHE loram COMMAND MAKES A NEW. tHE hiram COMMAND MAKES
  211.    A clr; IF A basic PROGRAMM WOULD BE DESTROYED, YOU GET AN "out of memory
  212.    error".  sYNTAX:
  213.       himem $7000
  214.       loram $1000
  215.  
  216.    d) mONITOR
  217.    iN @BASIC A SMALL hEX mONITOR IS INCLUDED. yOU HAVE THE FOLLOWING 
  218.    COMMANDS:
  219.    .M ADR1 [ADR2]                     mEMORY DUMP
  220.    .T START1 END1 START2              tRANSFER MEM1 TO MEM2
  221.    .C START1 END1 START2              COMPARE MEMORY
  222.    .O START END BYTE                  OCCUPIES MEMORY WITH BYTE
  223.    .F START END "TEXT"                FIND "TEXT" IN MEMORY
  224.    .F START END BYTE [BYTE2 [...]]    FIND BYTES IN MEMORY
  225.    .G ADR                             GO TO MEMORY ADDRESS (sys)
  226.    tO CHANGE MEMORY LOCATIONS, OVERWRITE THE HEX NUMBERS IN THE HEX DUMP.
  227.    oF COURSE THE MONITOR IS IN THE LIST SCROLL FUNCTION AS WELL.
  228.  
  229.    e) oTHER STUFF
  230.    iF THE INTERPRETER FINDS A "!" TO EXECUTE, IT JUMPS TO $C006.
  231.    sO YOU CAN EASILY INCLUDE SOME OWN EXTENSIONS.
  232.    
  233.    @BASIC HAS THREE SPECIAL BYTES:
  234.    $9FFD: DEFAULT DISK UNIT (IN eprom VERSION AT $02A9)
  235.    $9FFE: INTERNAL FLAG (IN eprom VERSION AT $02A7)
  236.      BIT 7=1:   lIST ONLY TILL COLON (FOR FUNCTION DUMP)
  237.      BIT 2=1:   SUPPRESS SCREEN CONTROL CHARACTER. PRINT INVERS CHARACTER 
  238.                 INSTEAD (list, dump, mon, key)
  239.    $9FFF: EXTERNEL FLAG (IN eprom VERSION AT $02A8)
  240.      BIT 7=1:   aLARM ON
  241.      BIT 6=1:   tRACE ON
  242.      BIT 5=1:   kEY ON
  243.      BIT 4=1:   EDITOR ON
  244.      BIT 3=1:   DON'T TOKENIZE INPUT
  245.      BIT 1=1:   PUT ONLY NORMAL (cbm) tOKENS INTO A NEW basic LINE
  246.                 (E.G. MY aSSEMBLER DOESN'T KNOW ABOUT NEW TOKENS!)
  247.  
  248.    iF YOU PRESS ctrl DURING RESET OR @BASIC INITIALIZATION, THE COMMAND
  249.    'enter"@R*"' IS BEING EXECUTED. sO YOU CAN PUT AN APPROPRIATELY NAMED
  250.    ENTER FILE ON EACH WORKING DISK THAT AUTOMAGICALLY INSTALLS ALL YOUR
  251.    NEEDED PROGRAMMS.
  252.  
  253.    mEMORY mAP:
  254.    zERO pAGE
  255.       $FB-$FF AS WELL AS ALREADY USED ONES.
  256.    mEMORY
  257.       $8000-$9FFF PROGRAMM CODE. CONTAINS FUNCTION KEYS AND DISK BUFFER
  258.                   IN THE ram VERSION.
  259.       $A001-$A813 THE BUFFERED SCREEN.
  260.  
  261.       IN eprom VERSION THE HELP SCREEN, THE FUNCTION KEYS ETC ARE UNDER
  262.       THE MODUL IN THE ram BETWEEN $8000 AND $9FFF
  263.       btw i HAVE NEVER TESTED IF THE eprom VERSION WORKS ;-)
  264.  
  265.    sYSTEM JUMP VECTORS:
  266.       $0314 irq
  267.       $0316 brk
  268.       $0324 input
  269.       $0326 output
  270.  
  271.    rESET AND nmi ARE CAUGHT BY THE 'cbm80' MARK AND THE APPROPRIATE
  272.    VECTORS AT THE BEGINNING OF THE mODULE.
  273.  
  274.    basic VECTORS:
  275.    $0300-$030B, WHEREAS THE VECTOR AT $0306 IS NOT NEEDED AS i HAVE AN OWN
  276.                 NEW ROUTINE FOR THE list COMMAND.
  277.  
  278.  
  279.