home *** CD-ROM | disk | FTP | other *** search
-
-
- @BASIC
-
- BY a. fACHAT (FACHAT@GALILEO.RHEIN-NECKAR.DE)
- -----------------------------------------------------------------------
- @BASIC IS COVERED BY THE gnu PUBLIC lICENSE, SEE FILE copying
-
-
- 0) pREFACE
- tHE pROGRAMM @BASIC IS A basic EXTENSION WITH OVER 40 NEW basic COMMANDS
- AND SEVERAL ADDITIONAL FEATURES.
- i HAVE WRITTEN THIS PROGRAMM SOME YEARS AGO AND i DO NOT SUPPORT
- IT ANY MORE. i DO ALSO NOT TAKE ANY WARRANTY FOR THIS PROGRAMM OR ITS
- USE IN ANY FORM.
-
- 1) hOW TO USE
- tO USE THIS basic EXTENSION, YOU HAVE TO LOAD THIS EXTENSION INTO MEMORY
- AS A MACHINE PROGRAMM (",8,1") AND THEN INITIALIZE IT BY A RESET OR
- "sys 64738". aLL cOMMANDS ARE NOW AVAILABLE. tO RESTORE A basic PROGRAMM,
- USE THE NEW COMMAND "old".
- yOU LOOSE 8KbYTE OF basic MEMORY, BUT $C000-$CFFF STAYS FREE.
-
- 2) cOMMANDS
- aLL COMMANDS CAN BE ABBRIVIATED AS USUAL (DEl FOR delete AND SO)
-
- a) tOOLKIT
- trace SWITCHES ON tRACE MODE, I.E. THE ACTUAL basic LINE IS BEING
- PRINTED IN THE FIRST TWO LINES OF THE SCREEN.
- pRESSING THE SHIFT kEY GIVES CONTINOUS EXECUTION, cbm kEY MAKES
- SINGLE STEP. "trace off" SWITCHES BACK TO NORMAL MODE.
- tHESE TWO COMMANDS CAN BE ANYWHERE IN THE PROGRAMM CODE.
-
- delete tHIS COMMAND REMOVES lINES FROM THE basic CODE. sYNTAX AS
- THE SYNTAX FROM THE list COMMAND.
-
- auto aUTOMATIC LINENUMBERING WHILE INPUTTING A NEW basic PROGRAMM.
- i.E. tHE COMPUTER AUTOMAGICALLY PRINTS THE LINE NUMBER ON THE
- SCREEN, YOU JUST TYPE THE basic CODE. aN EMPTY LINE STOPS THIS
- MODE. aN ASTERIX ("*") BEFORE THE LINE NUMBER SAYS THAT THIS
- LINE ALREADY EXISTS. wITH AN EMPTY LINE YOU CAN BREAK WITHOUT
- OVERWRITING THE EXISTING LINE.
- wITH AN ADDITIONAL tEXT YOU CAN EVEN SPARE WRITING E.G. "data"
- EACH AND EVERY LINE - IT GETS PRINTED AND WRITEN TO THE LINE.
- (E.G. "auto 10000,10,data" FIRST PRINTS " 10000 data" AND WAITS
- FOR THE INPUT LINE AND THEN PRINTS " 10010 data" AND SO ON)
- sTANDARD IS STARTING LINE 100, AND GO ON WITH STEPS OF 10
- sYNTAX:
- auto [sTARTING_LINE][,[sTEPPING][,ADDITIONAL_TEXT]
-
- old tHIS COMMAND RECALLS A basic PROGRAMM THAT HAS BEEN REMOVED WITH
- "new" OR BY A reset. yOU MUST NOT DEFINE ANY VARIABLE AFTER THE
- DELETION OF THE PROGRAMM BECAUSE THAT WILL OVERWRITE THE PROGRAMM
- CODE. nOTE THAT A "syntax error" SOMETIME IS AN INDICATOR THAT
- A NEW VARIABLE HAS BEEN DEFINED BECAUSE A COMMAND HAS NOT BEEN
- RECOGNIZED.
-
- dump tHIS COMMAND PRINTS OUT ALL ACTUAL VARIABLES, DEFINED FIELDS
- AND FUNCTIONS.
-
- find SEARCHES THE COMPLETE basic PROGRAMM FOR A SPECIFIC EXPRESSION
- "find get" E.G. LISTS ALL LINES THAT CONTAIN THE "get" basic
- COMMAND.
-
- renumber RENUMBERS A basic PROGRAMM. aLL gotoS, gosubS AND if thenS
- GET NEW NUMBERS TO POINT TO THE SAME LOCATION, JUST WITH THE
- SAME NUMBER.
- yOU CAN EVEN RENUMBER ONLY A PART OF THE PROGRAMM.
- sYNTAX:
- renumber [[sTARTING_lINE][,[sTEPPING][,[sTART_OF_AREA][-]
- [eND_OF_aREA]]]]
-
- dload/dsave/dverify/mload/mverify/msave
- nEW dISK bASIC COMMANDS. d* WORKS FOR basic PROGRAMMS THAT ARE
- ON dISK, m* WORKS ON mACHINE LANGUAGE PROGRAMMS THAT ARE ON dISK.
- sYNTAX:
- dload"NAME"[,d0][,u8]
- msave"NAME"[,d0][,u8],STARTADDRESS,ENDADDRESS
- mload"NAME"[,d0][,u8][,STARTADDRESS]
- *verify IS AS *load; dsave IS AS dload. rEPLACE THE 0 WITH
- THE dISK DRIVE ON YOUR fLOPPY uNIT THE FILE IS ON AND THE 8 WITH
- THE uNIT (iec) ADDRESS.
- run tHIS IS NEW, MAN? yES IT IS:
- run"NAME"[,d0][,u8]
- LOADS AND IMMEDIATELY RUNS A basic PROGRAMM.
-
- catalog/directory
- SHOWS THE DIRECTORY OF THE SPECIFIED DRIVE.
- catalog[#4][,]["MASK"][,d0][,u8]
- REPLACE THE 4 WITH THE PRINTER (iec) DEVICE YOU WANT TO PRINT
- THE DIRECTORY ON.
-
- scratch REMOVES FILE(S) FROM DISK
- collect CHKDSK
- header FORMATS FLOPPY
- copy COPIES FILES ON dISK, NOT VIA THE COMPUTER. wORKS BEST ON DUAL
- DRIVE FLOPPIES.
- backup cOPIES WHOLE DISKS ON DUAL DRIVE FLOPPIES.
- rename RENAMES FILES.
- COMMON SYNTAX:
- command ["NAME1"][,][d0] [to ["NAME2"][,][d1]] [,u8]
-
- disk A) SENDS A COMMAND TO A DISK DRIVE: disk"COMMAND"[,u8]
- B) SETS DEFAULT DEVICE (THE ONE THAT IS USED WITHOUT A ",uX"):
- disk DEV (E.G. "disk 9")
-
- ds/ds$ tHESE TWO VARIABLES REPRESENT THE STATUS OF THE DISK.
- ds IS THE NUMERICAL CODE (=0)
- ds$ IS THE ERROR STRING (=00, OK,00,00)
-
- append/merge
- append APPENDS A basic PROGRAMM TO THE ONE IN MEMORY.
- merge MERGES THE NEW PROGRAMM INTO THE OLD ONE, USING
- LINE NUMBERS. i.E. IF THE PROGRAMM IN MEMORY HAS LINE NUMBERS
- ABOVE 1000 AND THE ONE ON DISK NUMBERS BELOW, WE END UP
- WITH THE "merge"'D PROGRAMM IN FRONT OF THE OLD ONE.
- sYNTAX IS AS dload.
-
- list/enter
- 'list #4 [,[A][-][E]]' LISTS THE PROGRAMM DIRECTLY TO THE PRINTER.
- 'list "NAME"[,d0][,u8] [,[A][-][E]]' LISTS THE PROGRAMM DIRECTLY
- INTO A FILE ON dISK.
- 'enter "NAME"[,d0][,u8]' LOADS THIS ascii FILE BACK INTO
- MEMORY AND PUTS THE LINES IN THE RIGHT PLACE. iT EVEN
- EXECUTES COMMANDS FROM THE FILE (EVER HEARD ABOUT STDIN
- REDIRECTION?)
- fOR THOSE RUNNING "speeddos", YOU HAVE TO SWITCH OF THE DISPLAY
- OF THE MEMORY LOCATION THE PROGRAMM IS LOADED TO BEFORE THE
- FIRST mload/dload/load IN ANY 'ENTER' FILE BY DOING "poke $0298,3"
- yOU CAN EASILY CREATE AN EXECUTABLE ENTER FILE BY:
- open 1,8,1,"ENTERFILE"
- print#1,"mload"CHR$(34)"LOAD ME"CHR$(34)",$C000"
- print#1,"mload"CHR$(34)"@MON 1.1/7"CHR$(34)
- print#1,"himem$7000"
- close1
-
- key IS THE KEY TO THE FUNCTION KEYS ;-)
- key SHOWS THE CURRENT FUNCTION KEY MAPPING,
- key 1,"dump" PUTS THE STRING "dump" ON f-KEY 1
- tHE APOSTROPH (') IS CONVERTED INTO (") AND THE LEFT ARROW
- BECOMES A CARRIAGE RETURN.
- key off SWITCHES THE KEY MAPPING OFF, key on SWITCHES BACK ON.
-
- colour colour [bORDER_COLOUR][,[bACKGROUND_COLOUR][,cURSOR COLOUR]]
- SETS THE COLOURS.
-
- set time / set alarm
- tHESE COMMANDS HANDLE THE BUILTIN "tIME OF dAY" CLOCK.
- set time "1213145" SETS THE tod TO 12 O'CLOCK, 13 MINUTES,
- 14 SECONDS AND 5 TENTHS OF A SECOND.
- set alarm HAS THE SAME SYNTAX. alarm off SWITCHES THE alarm
- CLOCK OFF, alarm on BACK AGAIN.
- wHEN THE ALARM GOES OFF, THE COMPUTER STOPS AND MAKES AN AWFUL
- NOISE ;-) (run/stop GIVES IT A BREAK ;-)
- tHE VARIABLE time GIVES THE ACTUAL tod IN THE SAME 5 DIGIT FORMAT.
-
- help LISTS ALL NEW COMMANDS AND FUNCTIONS.
-
- basic/reset/exit
- basic EXITS @BASIC AND GOES BACK TO cbm basic, BUT KEEPS THE
- MEMORY FOR @BASIC ALLOCATED. A RUN/STOP-RESTORE BRINGS YOU BACK.
- reset REINITIALIZES @BASIC AND exit EXITS @BASIC FULLY AND GOES
- BACK TO cbm bASIC
-
- screen SWITCHES THE ACTUAL SCREEN WITH A BUFFERED ONE, I.E. THE NOW
- ACTUAL ONE GETS BUFFERED AND THE BUFFERES ONE IS DISPLAYED.
- aT THE FIRST TIME THE SCREEN IS FILLED WITH NONSENSE, YOU HAVE
- TO CLEAR IT (OTHERWISE THE COMPUTER MAY EVEN CRASH). bUT THE
- BUFFERED SCREEN IS KEPT OVER A RESET.
-
- b) tHE sCREEN EDITOR
- tHE SCREEN EDITOR IS A BIT IMPROVED. yOU HAVE SOME ADDITIONAL KEYS
- AVAILABLE:
-
- ctrl-l CLEAR THE REST OF THE LINE FROM THE CURSOR POSTITION.
- ctrl-a PUT THE CURSOR BEHIND THE LAST CHARACTER OF THE ACTUAL LINE.
- ctrl-u GO TO THE LOWER LEFT EDGE OF THE SCREEN
- ctrl-z INSERT MODE
- ctrl-d dELETE THE CHARACTER UNDERNEATH THE CURSOR AND MOVE THE
- REST OF THE LINE ONE CHARACTER TO THE LEFT.
-
- yOU CAN MAP THESE KEYS TO OTHER CODES (E.G. speeddos USERS MAY MAP
- ctrl-u TO ctrl-hOME ($82) AND ctrl-l TO ctrl-dEL ($84)). pEOPLE WHO
- BURN THEIR OWN KERNEL eprom, YOU CAN FILL UNUSED ENTRIES IN THE
- ctrl-KEYMAP AT $EC78 WITH UNUSED CODES (E.G. $80-$84) AND MAP E.G.
- ctrl-cRSRrIGHT TO $80 TO 'pUT CURSOR TO THE END OF THE LINE' (FORMER
- ctrl-a)
-
- lIST-sCROLL
- iF YOU MOVE THE CURSOR 'OUT OF THE SCREEN' AT THE TOP OR THE BOTTOM OF
- OF THE SCREEN, THE SCREEN SCROLLS UP AND DOWN AND A basic LISTING
- IS BEING CONTINUED, I.E. THE RIGHT LINES ARE BEING PRINTED ON THE TOP
- OR THE BOTTOM OF THE SCREEN.
-
- c) aRITHMETIC
- eACH VALUE CAN NOW BE EXPRESSED IN DECIMAL AS USUAL, IN HEXADECIMAL
- WITH A PRECEEDING "$" AND IN BINARY FORMAT WITH A PRECEEDING "%".
- bOTH HAVE A MAXIMAL LENGTH OF 16 bIT, I.E. 16 BINARY DIGITS OR 4 HEX
- DIGITS.
-
- hex$/bin$ BUILD A HEX/BINARY STRING OUT OF AN INTEGER.
- TRY 'print hex$(123),bin$(245)'
-
- deek/doke
- sAME AS peek/poke, JUST FOR TWO BYTE VALUES. LOW BYTE GOES IN THE
- LOWER ADDRESS, THE HIGH BYTE INTO THE HIGHER BYTE.
-
- loram/hiram
- tHESE COMMANDS SET THE START OF basic ram AND END OF basic ram POINTER
- TO NEW VALUES. tHE loram COMMAND MAKES A NEW. tHE hiram COMMAND MAKES
- A clr; IF A basic PROGRAMM WOULD BE DESTROYED, YOU GET AN "out of memory
- error". sYNTAX:
- himem $7000
- loram $1000
-
- d) mONITOR
- iN @BASIC A SMALL hEX mONITOR IS INCLUDED. yOU HAVE THE FOLLOWING
- COMMANDS:
- .M ADR1 [ADR2] mEMORY DUMP
- .T START1 END1 START2 tRANSFER MEM1 TO MEM2
- .C START1 END1 START2 COMPARE MEMORY
- .O START END BYTE OCCUPIES MEMORY WITH BYTE
- .F START END "TEXT" FIND "TEXT" IN MEMORY
- .F START END BYTE [BYTE2 [...]] FIND BYTES IN MEMORY
- .G ADR GO TO MEMORY ADDRESS (sys)
- tO CHANGE MEMORY LOCATIONS, OVERWRITE THE HEX NUMBERS IN THE HEX DUMP.
- oF COURSE THE MONITOR IS IN THE LIST SCROLL FUNCTION AS WELL.
-
- e) oTHER STUFF
- iF THE INTERPRETER FINDS A "!" TO EXECUTE, IT JUMPS TO $C006.
- sO YOU CAN EASILY INCLUDE SOME OWN EXTENSIONS.
-
- @BASIC HAS THREE SPECIAL BYTES:
- $9FFD: DEFAULT DISK UNIT (IN eprom VERSION AT $02A9)
- $9FFE: INTERNAL FLAG (IN eprom VERSION AT $02A7)
- BIT 7=1: lIST ONLY TILL COLON (FOR FUNCTION DUMP)
- BIT 2=1: SUPPRESS SCREEN CONTROL CHARACTER. PRINT INVERS CHARACTER
- INSTEAD (list, dump, mon, key)
- $9FFF: EXTERNEL FLAG (IN eprom VERSION AT $02A8)
- BIT 7=1: aLARM ON
- BIT 6=1: tRACE ON
- BIT 5=1: kEY ON
- BIT 4=1: EDITOR ON
- BIT 3=1: DON'T TOKENIZE INPUT
- BIT 1=1: PUT ONLY NORMAL (cbm) tOKENS INTO A NEW basic LINE
- (E.G. MY aSSEMBLER DOESN'T KNOW ABOUT NEW TOKENS!)
-
- iF YOU PRESS ctrl DURING RESET OR @BASIC INITIALIZATION, THE COMMAND
- 'enter"@R*"' IS BEING EXECUTED. sO YOU CAN PUT AN APPROPRIATELY NAMED
- ENTER FILE ON EACH WORKING DISK THAT AUTOMAGICALLY INSTALLS ALL YOUR
- NEEDED PROGRAMMS.
-
- mEMORY mAP:
- zERO pAGE
- $FB-$FF AS WELL AS ALREADY USED ONES.
- mEMORY
- $8000-$9FFF PROGRAMM CODE. CONTAINS FUNCTION KEYS AND DISK BUFFER
- IN THE ram VERSION.
- $A001-$A813 THE BUFFERED SCREEN.
-
- IN eprom VERSION THE HELP SCREEN, THE FUNCTION KEYS ETC ARE UNDER
- THE MODUL IN THE ram BETWEEN $8000 AND $9FFF
- btw i HAVE NEVER TESTED IF THE eprom VERSION WORKS ;-)
-
- sYSTEM JUMP VECTORS:
- $0314 irq
- $0316 brk
- $0324 input
- $0326 output
-
- rESET AND nmi ARE CAUGHT BY THE 'cbm80' MARK AND THE APPROPRIATE
- VECTORS AT THE BEGINNING OF THE mODULE.
-
- basic VECTORS:
- $0300-$030B, WHEREAS THE VECTOR AT $0306 IS NOT NEEDED AS i HAVE AN OWN
- NEW ROUTINE FOR THE list COMMAND.
-
-
-