home *** CD-ROM | disk | FTP | other *** search
- ########
- ##################
- ###### ######
- #####
- ##### #### #### ## ##### #### #### #### #### #### #####
- ##### ## ## #### ## ## ## ### ## #### ## ## ##
- ##### ######## ## ## ## ##### ## ## ## ## ##
- ##### ## ## ######## ## ## ## ### ## ## #### ## ##
- ##### #### #### #### #### ##### #### #### #### #### #### ######
- ##### ##
- ###### ###### ╓OLUME 1 - ╔SSUE 3
- ################## ╩ULY 15, 1992
- ########
-
- =============================================================================
- ┼DITOR'S ╬OTES:
- BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
-
- ╚ERE'S OVER 3000 LINES OF HACKING ARTICLES & SUCH... ╙ORRY ABOUT THE LENGTH
- AS SOME OF THE ARTICLES RAN A BIT OVERBOARD. ╔NCLUDED WITHIN IS A DISCUSSION OF
- THE ╦┼╥╬┴╠ ROUTINES, AN EXAMINATION OF ╥ASTERS, AND A PACKAGE OF BURST ROUTINES
- FOR USE IN YOUR OWN PROGRAMS. ╔F YOU'VE GOT ANY IDEAS FOR ARTICLES ETC THAT
- YOU'D LIKE TO SEE OR WANT TO HEAR MORE ON A CERTAIN TOPIC FEEL FREE TO EMAIL
- ME.
-
- ╔'M PLEASED TO INTRODUCE THE ─EMO ├ORNER WHERE EACH MONTH WE'LL REPORT
- HOW TO ACHIEVE SOME OF THE GRAPHIC AND SOUND EFFECTS THAT ARE PRESENT IN
- MANY DEMOS THAT ARE WONDERED ABOUT.
-
- ╬OTE: ╘HE ARTICLE CONCERNING PROGRAMMING AND USAGE OF THE 1351 MOUSE HAS
- BEEN DELAYED UNTIL THE NEXT ISSUE DUE TO TIME AND LENGTH CONSTRAINTS.
-
- ╘HIS FILE IS AVAILABLE VIA ANONYMOUS FTP AT TYBALT.CALTECH.EDU UNDER
- PUB/RKNOP/HACKING.MAG. ┬ACK ISSUES OF ├= ╚ACKING ARE ALSO LOCATED THERE.
-
- **************** ╫┴╥╬╔╬╟╙, ╒╨─┴╘┼╙, ┬╒╟ ╥┼╨╧╥╘╙, ┼╘├... **********************
-
- ╧╧╨╙ - ╔N THE LAST ISSUE OF ├= ╚ACKING IN ═ARK ╠AWRENCE'S ╞ILE ╙PLITTER A LINE
- INADVERTANTLY GOT CHOPPED OFF. ╘HE FOLLOWING CODE SHOULD BE FIXED BETWEEN THE
- COMMENTS THAT ARE LISTED:
-
- [.
- .
- .]
- █ ═AKE ┼╪╘┼╬╙╔╧╬ A STRING REPRESENTATION OF ├╧╒╬╘, TO BE ADDED TO THE
- ╧UT╞ILE╬AME TO MAKE THINGS A TAD EASIER▌
-
- ╧UT╞ILE╬AME := ├ONCAT(╬EW╞ILE,'.',├OPY('00',1,3-╠ENGTH(┼XTENSION)),
- ┼XTENSION); █**╘╚╔╙ ╔╙ ╘╚┼ ╙╘┴╘┼═┼╬╘...**▌
-
- █ ├REATE FILENAME BASED ON WHICH PART WE'RE UP TO ▌
- [.
- .
- .]
-
- =============================================================================
- ╬OTE: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN WHOLE,
- FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL AUTHORS FOR
- PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
-
- *** ┴╒╘╚╧╥╙ ╠╔╙╘┼─ ┬┼╠╧╫ ╥┼╘┴╔╬ ┴╠╠ ╥╔╟╚╘╙ ╘╧ ╘╚┼╔╥ ┴╥╘╔├╠┼╙ ***
- =============================================================================
- ╔N ╘HIS ╔SSUE:
-
- ╠EARNING ═╠ - ╨ART 3
-
- ╔N THIS EDITION WE TAKE A LOOK AT READING AND WRITING COMMANDS TO THE DISK
- DRIVE, INCLUDING READING THE DISK DIRECTORY AND ERROR CHANNEL. ╘HIS ARTICLE
- PARALLELS THE DISCUSSION OF THE ├=128 AND ├=64 ╦┼╥╬┴╠ JUMP TABLES OF AVAILABLE
- ROUTINES. ╫RITTEN BY ├RAIG ╘AYLOR.
-
- ╘HE ─EMO ├ORNER: ═ISSING ├YCLES
-
- ┼VERYBODY KNOWS THAT THERE ARE 63 CYCLES AVAILABLE TO THE ├64 PROCESSOR
- ON EACH SCAN LINE, EXCEPT FOR ONE WHICH ONLY PROVIDES 23 CYCLES. ┬UT WHAT
- HAPPENS WHEN WE ADD SPRITES AND WHY ? ╫RITTEN BY ╨ASI '┴LBERT' ╧JALA.
-
- ╦┼╥╬┴╠ 64/128
-
- ╘HE ├=128 AND ├=64 JUMP TABLE POINTS TO MANY VALUABLE SYSTEM ROUTINES IS
- DISCUSSED AND EXAMINED IN DETAIL. ╫RITTEN BY ├RAIG ╘AYLOR.
-
- 64╦ ╓─├ ╥┴═ AND AN ALTERNATE ╟┼╧╙128 ┬ACKGROUND ╙CREEN
-
- ╙TANDARD ╟┼╧╙ ONLY USES THE FIRST 16╦ OF YOUR ╓─├ SCREEN. ╔F YOU HAVE 64╦
- OF ╓─├ ╥┴═, AND WANT TO WRITE AN 80-COLUMN ONLY APPLICATION, YOU CAN PUT SOME
- OF THE ADDITIONAL ╓─├ ╥┴═ TO USE AS A REPLACEMENT FOR THE STANDARD ╟┼╧╙
- BACKGROUND SCREEN. ┴ND, IN THE BARGAIN, YOU GET AN ADDITIONAL 16╦ OF
- APPLICATION ╞RONT╥┴═ TO USE! ╫RITTEN BY ╥OBERT ╦NOP.
-
- ╟EO╨AINT ╞ILE ╞ORMAT
-
- ╫RITTEN BY ┬RUCE ╓RIELING, THIS ARTICLE PROVIDES AN IN DEPTH DESCRIPTION OF
- EXACTLY HOW GEO╨AINT STORES ITS GRAPHIC IMAGES ON DISK. ╔T EXAMINES THE
- CONCEPT OF ╓╠╔╥ FILES, HOW GRAPHICS DATA IS LAID OUT ON SCREEN (FROM BOTH
- GEO╨AINT AND THE ╓╔├'S PERSPECTIVE), AND GEO╨AINT'S GRAPHICS COMPRESSION
- TECHNIQUES.
-
- ╥ASTERS - ╫HAT ╘HEY ┴RE AND ╚OW TO ╒SE ╘HEM
-
- ╫RITTEN BY ┬RUCE ╓RIELING, THIS ARTICLE PROVIDES AN INTRODUCTION TO CREATING
- SPECIAL ON-SCREEN EFFECTS USING THE TECHNIQUE OF RASTER INTERRUPTS. ╘HE
- BASICS ARE EXAMINED, INCLUDING WHAT THEY ARE, AND HOW TO PROGRAM THEM. ╘HIS
- ARTICLE SHOULD PROVIDE A GOOD STARTING POINT FOR SOMEONE WANTING TO GET
- THEIR FEET WET IN RASTER PROGRAMMING.
-
- ┬URSTING ┘OUR 128: ╘HE ╞ASTLOAD ┬URST ├OMMAND
-
- ╫RITTEN BY ├RAIG ┬RUCE THIS ARTICLE COVERS THE ╞ASTLOAD BURST COMMAND OF THE
- 1571 AND 1581 DISK DRIVES. ╘HE ╞ASTLOAD COMMAND OPERATION AND PROTOCOL ARE
- DISCUSSED AND A PACKAGE FOR USING THE ╞ASTLOAD COMMAND TO READ REGULAR
- SEQUENTIAL FILES AT BINARY PROGRAM LOADING SPEEDS IS PRESENTED. ╘O DEMONSTRATE
- THE PACKAGE, A FILE WORD COUNTING UTILITY IS IMPLEMENTED AND THE "COMMENTED"
- CODE IS INCLUDED.
-
- ============================================================================
- ╠EARNING ═╠ - ╨ART 3
- BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
-
- ╠AST TIME WE USED A ROUTINE AT $╞╞─2 WHICH WOULD PRINT OUT THE CHARACTER CODE
- CONTAINED WITHIN THE ACCUMALATOR. ╘HAT LOCATION WILL ALWAYS PRINT THE CHARACTER
- OUT REGARDLESS OF ╓╔├-20, ├=64, ├=128 AND EVEN ╨┼╘ BECAUSE ├OMMODORE DECIDED
- TO SET UP SOME LOCATIONS IN HIGH MEMORY THAT WOULD PERFORM ROUTINES THAT ARE
- COMMONLY NEEDED.
-
- ╘AKE A LOOK NOW AT THE ╦┼╥╬┴╠ 64/128 ARTICLE AND GLANCE OVER SOME OF THE
- ROUTINES AND THEIR FUNCTION / PURPOSE. ╘HIS ARTICLE IS MEANT TO BE A COMPANION
- TO THAT ARTICLE SO YOU MAY WANT TO FLIP BACK AND FORTH AS THE DISCUSSION
- OF THE PROGRAM LISTED BELOW IS DISCUSSED.
-
- ╬OTE THAT ╔'VE BORROWED ├RAIG ┬RUCE'S NOTATION OF HAVING LISTINGS INSIDE. ╘O
- EXTRACT THE SOURCE THAT FOLLOWS ENTER THE FOLLOWING COMMAND ON A ╒NIX SYSTEM:
-
- GREP '^\.@...\!' ╚ACK3 ▄ SED 'S/^.@...\!.//' ▄ SED 'S/.@...\!//' >DIR.ASM
-
- .@001! ;
- .@002! ; ╙ET UP COMPUTER TYPE FOR COMPUTER-DEPENDANT CODE /
- .@003! ; ╧NLY USED IN DISPLAYING # ROUTINE / START OF ASSEMBLY SETTING.
- .@004! ; ┬╒──┘ FORMAT.
- .@005! ;
- .@006! COMPUTER = 128 ; ─EFINE AS EITHER 64 OR 128.
-
- ╞OR BOTH C64 AND C128 USERS THE FOLLOWING CODE WORKS. ╫ITHIN THE CODE IS
- CONDITIONAL ASSEMBLY WHICH MEANS IT WILL WORK ON EITHER COMPUTER ASSUMING THAT
- THE COMPUTER IS EQUAL TO EITHER 128 OR 64.
-
- .@007!
- .@008! .IF COMPUTER-64 ;** IF COMPUTER NOT C64 THEN
- .@009! .ORG $1300 ; AND ALSO MAKE SURE IN ┬┴╬╦ 15 WHEN CALLING
- .@010! ; THESE ROUTINES.
- .@011! .ELSE ;** ELSE IF _IS_ C64, THEN
- .@012! .ORG $C000
- .@013! .IFE ;** END OF COMPUTER-DEPENDANT CODE.
-
- ┬ECAUSE OF THIS (THE SOURCE IS IN ┬╒──┘ FORMAT) THE ├64 AND ├128 ARE SET TO
- ASSEMBLE AT DIFFERENT MEMORY LOCATIONS. ╧N THE ├64, $C000 IS 49152. ╧N THE ├128
- IT IS AT 4864. ╬OTE FOR THE ├128 IT IS NECESSARY TO DO A ┬┴╬╦15 BEFORE EXECUTING
- THE CODE.
-
- .@014! .MEM ; - ASSEMBLE TO MEMORY.
-
- ╘HIS TELLS THE ASSEMBLER TO ACTUALLY PUT THE CODE INTO MEMORY.
-
- .@015!
- .@016! ;;-----------------------------------------------------------------------
- .@017! ;; ╦┼╥╬┴╠ ┼╤╒┴╘┼╙
- .@018! ;;---------------------------------------------------------------------
- .@019!
- .@020! SETNAM = $FFBD
- .@021! SETLFS = $FFBA
- .@022! OPEN = $FFC0
- .@023! CLOSE = $FFC3
- .@024! CHKIN = $FFC6
- .@025! CHRIN = $FFCF
- .@026! BSOUT = $FFD2
- .@027! CLRCH = $FFCC
- .@028!
-
- ╘HESE ARE THE ╦┼╥╬┴╠ ROUTINES WE WILL ACTUALLY BE USING. ╘HEIR ACTUAL
- USE WILL BE DOCUMENTED WHEN WE COME ACROSS THEM WITHIN THE CODE.
-
- .@029! ;;-----------------------------------------------------------------------
- .@030!
- .@031! TEMP = 253
- .@032! CHARRET = $0D
- .@033! SPACE = $20
- .@034!
-
- ╘EMP IS SET UP TO JUST BE A TEMPORARY LOCATION IN ZERO-PAGE. ╠OCATION 253 ON
- BOTH THE ├64 AND ├128 IS UNUSED. ├HARRET STANDS FOR THE CARRIAGE RETURN
- CHARACTER AND IS THE EQUIVLENT OF A CHR$(13). ╙PACE STANDS FOR THE CODE FOR A
- SPACE (A CHR$(32))
-
- .@035! ;;---------------------------------------------------------------------
- .@036!
- .@037! START = *
- .@038!
- .@039! JSR READ'DIR ; ╔NITIAL JUMP TABLE -- ╬OTE: ╫ILL READ ERROR AFTER
- .@040! JMP READ'ERR ; SHOWING DIRECTORY.
- .@041!
-
- ┘OU'LL SEE CODE LIKE THIS A LOT -- ┬ASICALLY WE'RE BUILDING WHAT IS KNOWN AS A
- JUMP TABLE. ╘HAT WAY IF WE ADD MORE CODE TO THE DIRECTORY OR ERROR ROUTINE WE
- DON'T HAVE TO WORRY ABOUT OUR ╙┘╙ CALL'S CHANGING. ╘O READ THE DIRECTORY JUST
- ╙┘╙ BASE, TO READ THE ERROR CHANNEL JUST ╙┘╙ BASE+3 (WHERE ┬┴╙┼ IS 49152 ON THE
- ├64, 4864 ON THE 128)...
-
- ┴LSO THE ╩╙╥ ╩═╨ COMBINATION MAY SEEM A LITTLE STRANGE BUT WHAT WE ARE DOING
- IS TREATING THE DIRECTORY ROUTINE AS A SUBROUTINE AND THEN ╩╒═╨╔╬╟ TO THE
- ERROR ROUTINE. ╧NCE WE DO THAT THE ╥╘╙ IN READ'ERR WILL RETURN US BACK TO BASIC.
-
- .@042! ;;----------------------------------------------------------------------
- .@043!
- .@044! READ'DIR = *
- .@045!
- .@046! ; ╧PENS AND READS DIRECTORY AS A BASIC PROGRAM.
- .@047! ;==
- .@048! ; ┬ASIC PROGRAMS ARE READ IN AS FOLLOWS:
- .@049! ; [╨TR TO ╬EXT ╠INE]:2 [╠INE #]:2 [╘EXT]:.... [$00 BYTE]
- .@050! ; ^^^^^^^^^^^╥┼╨┼┴╘╙^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- .@051! ; ╘HE END OF A PROGRAM IS SIGNIFED BY THE $00 BYTE SIGNIFYING END OF TEXT
- .@052! ; AND THE PTR'S ALSO BEING = $00.
- .@053! ;==
-
- ╘HERE ARE SEVERAL WAYS TO READ THE DIRECTORY IN MACHINE LANGUAGE. ╫HAT WE ARE
- DOING HERE IS TAKING ADVANTAGE OF THE DRIVE'S ABILITY TO ALLOW US TO LOAD THE
- DIRECTORY AS A BASIC PROGRAM -*EXCEPT*- WE AREN'T LOADING IT PER SE. ╫E'RE
- GONNA GRAB EACH BYTE AS IT COMES FROM THE DRIVE AND INTERPRET IT OURSELVES
- INSTEAD OF PUTTING IT IN MEMORY AS WOULD NORMALLY BE DONE.
-
- ┬ASIC PROGRAMS ARE STORED AS THE FOLLOWING: ┴ 2 BYTE POINTER, A 2 BYTE
- LINE #, THE BASIC TEXT, AND A NULL TERMINATOR AND THEN STARTING OVER
- FROM THE 2 BYTE POINTER. ╘HE POINTER WE DO NOT NEED, THE LINE # IS THE NUMBER
- OF BLOCKS THE FILE TAKES UP AND THE ╘┼╪╘ IS THE PROGRAM NAME AND FILE TYPE. ╫E
- KNOW WHEN WE'RE FINISHED ON THE LINE BY CHECKING FOR A $00 BYTE.
-
- .@054! ; ┬EGIN BY OPENING UP THE
- .@055! ; DIRECTORY FILE ("$").
- .@056! LDA #$01 ; LENGTH IS 1
- .@057! LDX #<DIR ; LO BYTE POINTER TO FILE NAME.
- .@058! LDY #>DIR ; HI BYTE POINTER TO FILE NAME.
- .@059! JSR SETNAM ; - CALL SETNAM
-
- ╧KAY, FIRST WE NEED TO SIMULATE OPENING THE DIRECTORY AS A PROGRAM FILE.
- ╙┼╘╬┴═ SETS UP THE FILENAME FOR THE OPEN COMMAND. ╔N EFFECT WE ARE GIVING THE
- BASIC SYNTAX OF OPEN FILE#,DEVICE#,CHANNEL#,"FILENAME" IN REVERSE.
-
- .@060! LDA #$01 ; FILE # 1
- .@061! LDX #$08 ; DEVICE # 8
- .@062! LDY #$00 ; CHANNEL # 0
- .@063! JSR SETLFS ; - CALL SETLFS
-
- ╚ERE WE SPECIFY THE DEVICE #, FILE #, CHANNEL # IN PREPERATION FOR THE OPEN.
-
- .@064! JSR OPEN ; - CALL OPEN
-
- ╧PEN UP THE FILE. ╘HIS IS THE ROUTINE THAT DOES THE REAL WORK. ╙┼╘╬┴═ AND
- ╙┼╘╠╞╙ WERE PREPARATORY ROUTINES FOR THIS.
-
- .@065! ;
- .@066! ; READ IN THE BYTES AND DISPLAY (SKIPPING LINE LINKS ETC)
- .@067! ;
- .@068! LDX #$01 ; FILE #1
- .@069! JSR CHKIN ; - CALL CHKIN TO SET INPUT FILE #.
-
- ╬OW WE NEED TO SPECIFY THE INPUT FILE # AND TELL THE COMPUTER THAT ALL FURTHER
- CHRIN'S ARE TO BE FROM FILE #1. (┬Y DEFAULT, IT WOULD HAVE READ FROM THE
- KEYBOARD UNLESS WE HAD THIS HERE).
-
- .@070! JSR CHRIN ; - IGNORE STARTING ADDRESS (2 BYTES)
- .@071! JSR CHRIN
-
- ╙KIP THE STARTING ADDRESS -- ╫HEN READING THE DIRECTORY IT IS NOT RELEVANT
- SO READ THE BYTES AND DISCARD THEM.
-
- .@072! SKIP JSR CHRIN ; - IGNORE POINTER TO NEXT LINE (2 BYTES)
-
- ╬OW WE SKIP THE POINTER FOR THE NEXT LINE. ╘HIS IS ONLY USED WHEN LOADING
- BASIC PROGRAMS TO RE-LINK THE LINES. ╫HEN LISTING THE DIRECTORY THEY ARE NOT
- NEEDED.
-
- .@073! BCK1 JSR CHRIN
-
- ╘HIS IS STILL PART OF THE ROUTINE THAT SKIPS THE POINTER TO THE NEXT LINE, YET
- IT HAS A LABEL USED BELOW THAT ALLOWS US TO CHECK FOR END OF FILE MORE EASILY.
-
- .@074! LINE JSR CHRIN ; - GET LINE # LO.
- .@075! STA TEMP ; - STORE LO OF LINE # @ TEMP
- .@076! JSR CHRIN ; - GET HI OF LINE #
-
- ╚ERE WE GET THE LINE # AS THE NEXT 2 BYTES IN THE FILE.
-
- .@077!
- .@078! .IF COMPUTER-64 ; * IF ├128 THEN
-
- ╒NFORTUNATELY ├= DID NOT PROVIDE A NICE ROUTINE IN THE ╦┼╥╬┴╠ TO DISPLAY
- NUMERIC VALUES - HOWEVER - BY EXPLORING INSIDE THE OPERATING SYSTEM A WAY TO
- DISPLAY NUMBERS IS THERE. ╬OTE THAT THE FOLLOWING MAY LOOK CONFUSING -- IF IT
- DOES JUST REST ASSURED IT WILL PRINT OUT THE LINE # CORRECTLY.
-
- .@079! STA $61
- .@080! LDY TEMP
- .@081! STY $60
- .@082! LDA #$00
- .@083! STA $63
- .@084! LDY TEMP ; STORE VALUES FOR CONVERSION.
- .@085! JSR $BA07 ; - ═╧╬╔╘╧╥ ROUTINE: CONVERT TO ┬├─ VALUES
- .@086! LDA #$00
- .@087! LDX #$08
- .@088! LDY #$03
- .@089! JSR $BA5D ; - ═╧╬╔╘╧╥ ROUTINE: PRINT ┬├─
- .@090! ;VALUES IN DECIMAL
-
- ╘HIS IS THE ├128 VERSION WHICH USES SOME OF THE ═╧╬╔╘╧╥ ROUTINES TO DISPLAY
- THE NUMERIC BLOCK SIZE.
-
- .@091! .ELSE ; * ELSE IF C64
- .@092! LDX TEMP
- .@093! JSR $BDCD ; - PRINT LINE # (W/IN ╥╧═ ROUTINE).
- .@094! .IFE ; * END OF COMPUTER DEPENDANT CODE.
-
- ╘HIS IS THE ├64 CODE TO DISPLAY A NUMERIC VALUE (NOTICE HOW MUCH SIMPLIFIED IT
- IS OVER THE ├128)...
-
- .@095!
- .@096! LDA #SPACE
- .@097! JSR BSOUT ; - PRINT SPACE
-
- ╠ET'S PRINT A SPACE BETWEEN THE FILENAME AND THE BLOCK SIZE.
-
- .@098! GTASC JSR CHRIN ; - START PRINTING FILENAME UNTIL
- .@099! ;END OF LINE.
- .@100! BEQ CHCK ; (┌ERO SIGNIFIES EOL).
- .@101! JSR BSOUT ; - ╨RINT CHARACTER
- .@102! SEC
- .@103! BCS GTASC ; AND JUMP BACK.
-
- ╬OW WE START GETTING A CHARACTER (LINE #98), IF ZERO WE BRANCH OUT OF THE LOOP
- (LINE #100), ELSE WE DISPLAY THE CHARACTER (#101), AND JUMP BACK (#102-03).
-
- .@104! CHCK LDA #CHARRET ; - ┼LSE WE NEED TO START THE NEXT LINE
- .@105! JSR BSOUT ; ╨RINT A CARRIAGE RETURN.
-
- ┴H, WE GOT TO A NULL BYTE SO THAT'S THE END OF THIS LINE - DISPLAY A CAR/RET.
-
- .@106! JSR CHRIN ; - ┴ND GET THE NEXT POINTER
- .@107! BNE BCK1 ; ╔F NON-ZERO GO, STRIP OTHER PTR,
- .@108! ; AND CONTINUE.
-
- ╘HIS IS WHERE WE BRANCH BACK -- WE ARE CHECKING HERE FOR 2 NULL BYTES ON
- INPUT. ╫E GET THE FIRST BYTE OF THE POINTER AND IF IT'S NON-ZERO THEN WE KNOW
- IT'S NOT THE END OF THE DIRECTORY SO WE JUMP BACK TO DISCARD THE SECOND BYTE AT
- LINE #73.
-
- .@109! JSR CHRIN ; - ┼LSE CHECK 2ND BYTE OF POINTER
- .@110! BNE LINE ; AS IF BOTH 0 THEN = END OF DIRECTORY.
-
- ╘HIS IS A CONTINUATION OF THE CHECKING ABOVE. ╘HIS TIME WE'RE GETTING THE
- 2ND BYTE AND CHECKING FOR 0. ╔F IT'S NOT WE JUMP BACK TO GET AND DISPLAY THE
- LINE # ETC. ╔F IT IS 0 THEN THAT MEANS WE HAD $0000 FOR THE NEXT POINTER WHICH
- MEANS THAT IT'S THE END OF THE DIRECTORY.
-
- .@111! ;
- .@112! ;HAD 3 0'S IN A ROW SO END OF PROG
- .@113! ;NOW CLOSE THE FILE.
- .@114! ;
- .@115! LDA #$01 ; FILE # TO CLOSE
- .@116! JSR CLOSE ; - SO CLOSE IT
- .@117! JSR CLRCH ; - CLEAR ALL CHANNELS
- .@118! RTS ; - AND RETURN TO BASIC
- .@119!
-
- ╫E THEN CLOSE THE FILE BY SPECIFYING THE FILE # AND CALLING CLOSE. ╫E THEN
- TELL THE COMPUTER TO RESET ALL THE DEFAULT INPUT / OUTPUT DEVICES BY CALLING
- CLRCH (REMEMBER WE CHANGED THE DEFAULT INPUT CHANNEL??). ┴ND THEN WE CAN RETURN
- TO WHERE THIS ROUTINE WAS CALLED FROM.
-
- .@120! ; ╞╔╠┼╬┴═┼ STRING
- .@121! DIR .ASC "$"
-
- ╘HIS IS THE STRING THAT IS POINTED TO BY THE ╙┼╘╬┴═ CALL. ╬OTE THAT A SEARCH
- PATTERN COULD BE SET BY
- LINE#121: .ASC "$HACK*"
- AND BY CHANGING THE LENGTH SET IN .┴ IN THE CALL IN LINE #56.
-
- .@122!
- .@123! ;;-----------------------------------------------------------------------
- .@124!
- .@125! READ'ERR = *
- .@126!
- .@127! ; ╘HIS ROUTINE SIMPLY GRABS BYTES FROM A CHANNEL 15 IT OPENS UP UNTIL
- .@128! ; A CAR/RET BYTE IS FOUND. ╘HEN IT CLOSES AND RETURNS.
- .@129!
-
- ╥EADING THE ERROR CHANNEL IS MUCH MUCH MORE SIMPLER THAN READING THE
- DIRECTORY. ┬ASICALLY WE JUST OPEN UP THE CHANNEL (SPECIFYING A NULL NAME) AND
- REPEATADLY GET BYTES UNTIL A CAR/RET IS FOUND.
-
- .@130! RDERR LDA #$00 ; LENGTH IS 0
- .@131! JSR SETNAM ; - CALL SETNAME
-
- ╙ETUP SO WE DON'T SPECIFY A NAME (LENGTH = 0).
-
- .@132! LDA #$0F ; FILE # (15)
- .@133! LDX #$08 ; DEVICE # (08)
- .@134! LDY #$0F ; CHANNEL # (15)
- .@135! JSR SETLFS ; - SET LOGICAL FILE #
-
- ─O THE EQUIVLENT OF OPEN 15,8,15.
-
- .@136! JSR OPEN ; - AND OPEN IT.
-
- ╧PEN IT.
-
- .@137! ;SPECIFY FILE AS INPUT
- .@138! LDX #$0F ; FILE 15 IS INPUT
- .@139! JSR CHKIN ; - SO SPECIFY IT.
-
- ╬OW SET UP FILE # 15 AS INPUT SO WE CAN START GETTING, DISPLAYING ETC UNTIL
- A CAR/RET IS FOUND.
-
- .@140! ;NOW READ IN FILE
- .@141! LOOP JSR CHRIN ; - READ CHAR
- .@142! JSR BSOUT ; - PRINT CHAR
- .@143! CMP #CHARRET ; IS IT RETURN?
- .@144! BNE LOOP ; - IF NOT JMP BACK
-
- ╥EAD IN AND DISPLAY THE CHARACTERS FROM THE ERROR CHANNEL UNTIL A CHAR/RET IS
- FOUND.
-
- .@145! ;NOW CLOSE THE FILE
- .@146! LDA #$0F ; FILE #
- .@147! JSR CLOSE ; - CLOSE THE FILE
- .@148! JSR CLRCH ; RESTORE I/O
-
- ┴ND ONCE IT IS, WE CLOSE THE FILE AND RESTORE THE DEFAULT I/O SETTINGS.
-
- .@149! ;NOW RETURN TO BASIC
- .@150! RTS
-
- ┴ND RETURN TO OUR CALLER, IN THIS CASE - BASIC.
-
- ============================================================================
- [ ╘HE ─EMO ├ORNER IS GOING TO BE A COLUMN WHERE EACH MONTH WE'LL BE
- INTRODUCED TO A NEW FEATURE (SOME PEOPLE CALL THEM BUGS, WE'LL CALL THEM
- FEATURES) OF THE ├OMMODORE 64 OR 128 IN THE ╓IDEO AND ╙OUND AREAS THAT
- HAVE COMMONLY BEEN SHOWN ON DEMOS BUT WITH NO MENTION OF HOW TO ACCOMPLISH
- THEM. ╬OTE THAT READERS MAY ALSO WANT TO TAKE A LOOK AT THE INTRODUCTION
- TO ╥ASTERS ELSEWHERE IN THIS MAGAZINE.]
-
- ╘HE ─EMO ├ORNER: ═ISSING ├YCLES
- BY ╨ASI '┴LBERT' ╧JALA (PO87553@CS.TUT.FI ALBERT@CC.TUT.FI)
- ╫RITTEN ON 15-═AY-91 ╘RANSLATION 30-═AY-92
-
-
- ═ISSING ├YCLES
- --------------
- [ALL TIMINGS ARE IN ╨┴╠, THE PRINCIPLE APPLIES TO ╬╘╙├ TOO]
-
- ┼VERYBODY KNOWS THAT THERE ARE 63 CYCLES AVAILABLE TO THE ├64 PROCESSOR ON
- EACH SCAN LINE, EXCEPT FOR ONE WHICH ONLY PROVIDES 23 CYCLES (LATER REFERRED
- TO AS A └BAD CYCLE'. ┴RE TBEY USEFUL? ┴ GOOD USE IS FOR SYNCHRONIZATION.
- ╬ORMALLY BEFORE THE ├╨╒ STARTS TO EXECUTE THE RASTER INTERRUPT CODE, IT'S
- EXECUTING AN INSTRUCTION OF UNDEFINED CYCLE-LENGTH. ╘HIS EXECUTION TIME VARIES
- FROM TWO TO SEVEN CYCLES.
-
- ╫ITH A SPRITE, YOU CAN DO THE SYNCHRONIZATION WITH A MINIMAL EFFORT USING
- A ─┼├ OR ╔╬├ INSTRUCTION IN THE RIGHT PLACE. ╔F THE PROCESSOR IS EARLY,
- IT HAS TO WAIT FOR THE BUS, OTHERWISE IT WILL CONTINUE TO EXECUTE CYCLES
- FROM THE INSTRUCTION.
-
- ╔ HAVE NEVER EXPERIMENTED WITH ANY OTHER INSTRUCTION THAN ─┼├/╔╬├, BUT
- SOME OTHERS SHOULD WORK ALSO. ┘OU NEED AN INSTRUCTION WHICH HAS A CYCLE THAT
- DO NOT NEED THE BUS TO BE AVAILABLE. E.G. ╔╬├ $3FFF WILL INCREASE THE
- VALUE DURING THE FIFTH CYCLE AND DO NOT NEED THE BUS FOR THAT.
-
-
- _┴ DEMO PROGRAM_
-
- ╘HE ENCLOSED PROGRAM INCLUDES A SHORT RASTER COLOR ROUTINE TO DEMONSTRATE
- THIS STRICT TIMING AND SYNCHRONIZATION. ╘HE BACKGROUND COLOR IS CHANGED
- 12 TIMES ON EACH LINE. ╘HE ELECTRON BEAM RUNS OVER EIGHT PIXELS DURING
- ONE CYCLE, SO THE TIMING MUST BE PRECISE.
-
- --------------------------------------------------------------------------
- _╘ABLE FOR ╨┴╠ ╓╔├ TIMING FOR THE ═ISSING CYCLES_
-
-
- 012345678901234567890123456789012345678901234567890123456789012 CYCLES
-
- ╬ORMAL SCAN LINE, 0 SPRITES
- GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR P P P P P P P P PHI-1 ╓╔├
- PHI-2 ╓╔├
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PHI-2 6510
- 63 CYCLES AVAILABLE
-
- ╬ORMAL SCAN LINE, 8 SPRITES
- GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR PSPSPSPSPSPSPSPS PHI-1 ╓╔├
- SSSSSSSSSSSSSSSS PHI-2 ╓╔├
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX╪╪╪ PHI-2 6510
- 46-49 CYCLES AVAILABLE
-
- ╬ORMAL SCAN LINE, 4 SPRITES
- GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR PSP PSP PSP PSP PHI-1 ╓╔├
- SS SS SS SS PHI-2 ╓╔├
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX╪╪╪ XX PHI-2 6510
- 48-51 CYCLES AVAILABLE
-
- ┬AD SCAN LINE, 0 SPRITES
- GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR P P P P P P P P PHI-1 ╓╔├
- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC PHI-2 ╓╔├
- XXXXXXXXXXXXXXXXXXXXXXX PHI-2 6510
- 23 CYCLES AVAILABLE
-
- ┬AD SCAN LINE, 8 SPRITES
- GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR PSPSPSPSPSPSPSPS PHI-1 ╓╔├
- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SSSSSSSSSSSSSSSS PHI-2 ╓╔├
- XXXX╪╪╪ PHI-2 6510
- 4-7 CYCLES AVAILABLE
-
-
- G= GRAFIX DATA FETCH (CHARACTER IMAGES OR GRAPHICS DATA)
- R= REFRESH
- P= SPRITE IMAGE POINTER FETCH
- C= CHARACTER AND COLOR ├╧─┼ FETCH DURING A BAD SCAN LINE
- S= SPRITE DATA FETCH
- X= PROCESSOR EXECUTING INSTRUCTIONS
- ╪= PROCESSOR EXECUTING AN INSTRUCTION, BUS REQUEST PENDING
-
- ╧BSERVE! ╘HE LEFT EDGE OF THE CHART IS NOT THE LEFT EDGE OF THE SCREEN NOR
- THE LEFT EDGE OF THE BEAM, BUT THE SPRITE X-COORDINATE 0. ╔F YOU
- HAVE OPENED THE BORDERS, YOU KNOW WHAT ╔ MEAN. ┴ SPRITE CAN BE
- MOVED LEFT FROM THE COORDINATE 0 BY USING X-VALUES GREATER THAN 500.
- ___________
- ▄ _______ ▄<-- ═AXIMUM SIZED VIDEO SCREEN
- ▄▄▄ ▄ ▄
- ▄▄▄ ▄<-- ╬ORMAL ├64 SCREEN
- ▄▄▄ ▄ ▄
- ▄▄▄_______▄ ▄
- ▄▄ ▄
- ▄▄__________▄
- ^ ╙PRITE COORDINATE 0
-
- --------------------------------------------------------------------------
-
- ─EMONSTRATION PROGRAM FOR MISSING CYCLES
-
-
- ├╧╠╧╥0= $├┼00 ; ╨LACE FOR COLOR BAR 0
- ├╧╠╧╥1= $├╞00 ; ╨LACE FOR COLOR BAR 1
- ╥┴╙╘┼╥= $╞┴ ; ╠INE FOR THE RASTER INTERRUPT
- ─╒══┘= $├╞╞╞ ; ╘IMING VARIABLE
-
- *= $├000
- ╙┼╔ ; ─ISABLE INTERRUPTS
- ╠─┴ #$7╞ ; ─ISABLE TIMER INTERRUPTS
- ╙╘┴ $─├0─
- ╠─┴ #$01 ; ┼NABLE RASTER INTERRUPTS
- ╙╘┴ $─01┴
- ╙╘┴ $─015 ; ┼NABLE ╙PRITE 0
- ╠─┴ #<╔╥╤ ; ╔NIT INTERRUPT VECTOR
- ╙╘┴ $0314
- ╠─┴ #>╔╥╤
- ╙╘┴ $0315
- ╠─┴ #$1┬
- ╙╘┴ $─011
- ╠─┴ #╥┴╙╘┼╥ ; ╙ET INTERRUPT POSITION (INC. 9TH BIT)
- ╙╘┴ $─012
- ╠─┴ #╥┴╙╘┼╥-20 ; ╙PRITE WILL JUST REACH THE INTERRUPT POSITION
- ╙╘┴ $─001 ; WHEN IT IS POSITIONED 20 LINES EARLIER
-
- ╠─╪ #51
- ╠─┘ #0
- ╙╘┴ $─017 ; ╬O ┘-ENLARGEMENT
- ╠╧╧╨0 ╠─┴ ├╧╠,╪ ; ├REATE COLOR BARS
- ╨╚┴
- ┴╬─ #15
- ╙╘┴ ├╧╠╧╥0,╪
- ╙╘┴ ├╧╠╧╥0+52,┘
- ╙╘┴ ├╧╠╧╥0+104,╪
- ╙╘┴ ├╧╠╧╥0+156,┘
- ╨╠┴
- ╠╙╥
- ╠╙╥
- ╠╙╥
- ╠╙╥
- ╙╘┴ ├╧╠╧╥1,╪
- ╙╘┴ ├╧╠╧╥1+52,┘
- ╙╘┴ ├╧╠╧╥1+104,╪
- ╙╘┴ ├╧╠╧╥1+156,┘
- ╔╬┘
- ─┼╪
- ┬╨╠ ╠╧╧╨0
- ├╠╔ ; ┼NABLE INTERRUPTS
- ╥╘╙ ; ╥ETURN
-
-
- ╔╥╤ ╬╧╨ ; ╫AIT A BIT
- ╬╧╨
- ╬╧╨
- ╬╧╨
- ╠─┘ #103 ; 104 LINES OF COLORS (SOME OF THEM NOT VISIBLE)
- ; ╥EDUCE FOR ╬╘╙├, 55 ?
- ╔╬├ ─╒══┘ ; ╚ANDLES THE SYNCHRONIZATION WITH THE HELP OF THE
- ─┼├ ─╒══┘ ; SPRITE AND THE 6-CLOCK INSTRUCTIONS
- ; ┴DD A ╬╧╨ FOR ╬╘╙├
-
- ╞╔╥╙╘ ╠─╪ ├╧╠╧╥0,┘ ; ─O THE COLOR EFFECTS
- ╙┼├╧╬─ ╠─┴ ├╧╠╧╥1,┘
- ╙╘┴ $─020
- ╙╘╪ $─020
- ╙╘┴ $─020
- ╙╘╪ $─020
- ╙╘┴ $─020
- ╙╘╪ $─020
- ╙╘┴ $─020
- ╙╘╪ $─020
- ╙╘┴ $─020
- ╙╘╪ $─020
- ╙╘┴ $─020
- ╙╘╪ $─020
- ; ┴DD A ╬╧╨ FOR ╬╘╙├ (ONE LINE = 65 CYCLES)
- ╠─┴ #0 ; ╘HROW AWAY 2 CYCLES (TOTAL LOOP = 63 CYCLES)
- ─┼┘
- ┬╨╠ ╞╔╥╙╘ ; ╠OOP FOR 104 LINES
-
- ╙╘┴ $─020
- ╠─┴ #103 ; ╞OR SUBTRACTION
- ─┼├ ╞╔╥╙╘+1 ; ═OVE THE BARS
- ┬╨╠ ╧╓┼╥
- ╙╘┴ ╞╔╥╙╘+1
- ╧╓┼╥ ╙┼├
- ╙┬├ ╞╔╥╙╘+1
- ╙╘┴ ╙┼├╧╬─+1
-
- ╠─┴ #1 ; ┴CK THE RASTER INTERRUPT
- ╙╘┴ $─019
- ╩═╨ $┼┴31 ; ╩UMP TO THE STANDARD IRQ HANDLER
-
- ├╧╠ ┬┘╘ $09,$90,$09,$9┬,$00,$99,$2┬,$08,$90,$29,$8┬,$08,$9├,$20,$89,$┴┬
- ┬┘╘ $08,$9├,$2╞,$80,$┴9,$╞┬,$08,$9├,$2╞,$87,$┴0,$╞9,$7┬,$18,$0├,$6╞
- ┬┘╘ $07,$61,$40,$09,$6┬,$48,$┼├,$0╞,$67,$41,$┼1,$30,$09,$6┬,$48,$┼├
- ┬┘╘ $3╞,$77,$11,$11
- ; ╘WO COLOR BARS
-
- --------------------------------------------------------------------------
- ┬ASIC LOADER FOR ═ISSING CYCLES EXAMPLE PROGRAM (╨┴╠)
-
- 1 ╙=49152
- 2 ─┼╞╞╬╚(├)=├-48+7*(├>64)
- 3 ├╚=0:╥┼┴─┴$,┴:╨╥╔╬╘┴$:╔╞┴$="┼╬─"╘╚┼╬╨╥╔╬╘"<CLR>":╙┘╙49152:┼╬─
- 4 ╞╧╥╞=0╘╧31:╤=╞╬╚(┴╙├(═╔─$(┴$,╞*2+1)))*16+╞╬╚(┴╙├(═╔─$(┴$,╞*2+2)))
- 5 ├╚=├╚+╤:╨╧╦┼╙,╤:╙=╙+1:╬┼╪╘:╔╞├╚=┴╘╚┼╬3
- 6 ╨╥╔╬╘"├╚┼├╦╙╒═ ┼╥╥╧╥":┼╬─
- 100 ─┴╘┴ 78┴97╞8─0──├┴9018─1┴─08─15─0┴9578─1403┴9├08─1503┴91┬8─11─0┴9╞┴8─, 3773
- 101 ─┴╘┴ 12─0┴9┼68─01─0┴233┴0008─17─0┬─┴├├048290╞9─00├┼9934├┼9─68├┼999├├┼, 4157
- 102 ─┴╘┴ 684┴4┴4┴4┴9─00├╞9934├╞9─68├╞999├├╞├8├┴10─95860┼┴┼┴┼┴┼┴┴067┼┼╞╞├╞, 4878
- 103 ─┴╘┴ ├┼╞╞├╞┬┼18├┼┬94╞├╞8─20─08┼20─08─20─08┼20─08─20─08┼20─08─20─08┼20, 4403
- 104 ─┴╘┴ ─08─20─08┼20─08─20─08┼20─0┴9008810─18─20─0┴967├┼64├010038─64├038, 3923
- 105 ─┴╘┴ ┼─64├08─67├0┼┼19─04├31┼┴0990099┬00992┬0890298┬089├2089┴┬089├2╞80, 3483
- 106 ─┴╘┴ ┴9╞┬089├2╞87┴0╞97┬180├6╞076140096┬48┼├0╞6741┼130096┬48┼├3╞771111, 3133
- 200 ─┴╘┴ ┼╬─,0
-
- --------------------------------------------------------------------------
- ╒UENCODED ├64 EXECUTABLE VERSION (╨┴╠)
-
- BEGIN 644 MISSING.64
- ═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
- ═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
- ═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
- ═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
- ═2╒-532!%4┼)/4┬(┌@└└."60└@╥└╫.$$┘-╘8╪1#!$1$-!.3└╤.$0╤040╨.$0╤╦
- ═-40╨03─╒-╙┴$,30╨,╘$┘0╙└╪1#$╒,#-!.3%".$0╤,40╨03┼&03┴$+"└╙-╙<╙┴
- ═└%╠)90"#(#$╥1#!!.44╓.$0╨,40╨03(╙,╘$╨,#└╪1#$╫1#!"1$%#0╙└╘.#(┘?
- ═,$8┘1#└╨0╘4┘.3,╘0╘4┘1#8╪0╘4┘.3┼#0╘4╠(#0╤-3<└╩└┼╞└(,@-├@╘031!4
- ═-$$╘03┼$,#!#1├─┘,╙1#1├┼$-├┴#1├─┘.4-#1─,╪0╘$╤,$0┘-3@╓,$5!14%%>
- ═045!03└╓-╘5%1─9#1┬╨@-#@╫.└#╒"6<└@╥!#149&0╘9"13$╪0╘5".31&0╘8╪^
- ═1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨╚
- ═+"└╘-#└╙└$(*:└"#($0╨.$0╥,$0╨.$4╥,$0╨.$0╥,$0╨.$4╥,$0╨03─╨,#@╪╓
- ═,3!$,3┴$,├!$,$$┘-├=#138╘0╙└╤,#└╙.$0╓-$,╨,╙@╠(#,┘,├,└├╨╔╔└(,@^
- ═140╓-$,╨.$0╓-╘,╨144╤.40╨-$,╙,45!,#─┘,#└┘.4(╨,#─┘,─(╨.#─╨,├─╪[
- ═0├└╪.4,╥,#@┘04(╨.#┼#,─8╪,"╨@,╙0╪,╨#<"╞╚└@╥!!.49",#@┘0╙)&.#=!?
- ═,$8┘-╘(╤.#!#-─8╨-╙8╤-#└╨.39"-#┴%0╙!&-├<╘,44╤,╙└╨.39"-#┴%0╙-&╓
- ;-╙<╤,3$╤+"└╙,3,╙└.@*╥└"#($5.1"╨╨└└└└8
- └└
- END
- SIZE 747
-
- --------------------------------------------------------------------------
- ╒UENCODED ├64 EXECUTABLE VERSION (╬╘╙├)
-
- BEGIN 644 MISSING.64
- ═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
- ═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
- ═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
- ═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
- ═2╒-532!%4┼)/4┬(┌@└└."60└@╥└╫.$$┘-╘8╪1#!$1$-!.3└╤.$0╤040╨.$0╤╦
- ═-40╨03─╒-╙┴$,30╨,╘$┘0╙└╪1#$╒,#-!.3%".$0╤,40╨03┼&03┴$+"└╙-╙<╙┴
- ═└%╠)90"#(#$╥1#!!.44╓.$0╨,40╨03(╙,╘$╨,#└╪1#$╫1#!"1$%%0╙└╘.#(┘┴
- ═,$8┘1#└╨0╘4┘.3,╘0╘4┘1#8╪0╘4┘.3┼#0╘4╠(#0╤-3─└╩└┼╞└(,@-├@╘031!6
- ═-$$╘03┼$,#!#1├─┘,╙1#1├┼$-├┴#1├─┘.4-#1─,╪0╘$╤,$0┘-3@╓,$5!14%%>
- ═045!03└╙-╘5%1─9#1┬╨@-#@╙,└#╒"6<└@╥!#149&0╘9%04)%,#!#14(┘,#!#4
- ═1├┴$,├!$,#┴%,├!$,#┴$,├!$,#┴%,├!$,#┴$,├!$,#┴%,├!$,#┴$,├!$,#┴%$
- ═+"└╘-3└╥└$(*:└"#(#(╨1#└╪1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨1#!%04$┘.
- ═,#└╪.#$╨1#└╪1#(╨1#!!.38╫0╘4╓-4,╨,3└╨,╙┴$-├4╠(#,┘-#(└├╨╔╔└(,@╥
- ═0╙└╙.$5$-├5#,#┴$-├┴#,$5%,3┼$,#1#,╙%%03└┘.3└╨.3┼",#└┘.3)",#@┘(
- ═,#(┘.$(╨.#┼#,├└╪.4%",#@┘0╥╨@,╙4╒.└#<"╞╚└@╥└╥1├@╨03┼&0├└╪.4,╥_
- ═1├@╫03!&.3=",3@╨0╙9&,#<╓,30╨,#─╓0├0╪14,╨1├8╫-#%%,3,╨,#─╓0├0╪╦
- ═14,╙1├<╫+"└╙,├<╘└"<+:╨"#(#$╤,3$╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨╧
- ═,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╠(#,╘└#,+1
- ,;└"#($5.1"╨╨└└└└"
- └└
- END
- SIZE 822
- ============================================================================
- ╦ERNAL 64 / 128
- BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
-
- +--------------+
- ▄ ╔NTRODUCTION ▄
- +--------------+
-
- ╫HEN ├OMMODORE INTRODUCED THE ╨┼╘ AGES AGO BEFORE THE ╓IC-20 AND ├OMMODORE 64,
- 128 THEY SET IN THE HIGHEST MEMORY LOCATIONS A SERIES OF JUMPS TO OTHER ROUTINES
- SO THAT USERS DIDN'T NEED BOTHER CHECKING IF ANY REVISIONS HAD BEEN MADE. ╘HEY
- WERE ASSURED THAT THE ADDRESS THEY WERE JUMPING TO, WOULD INDEED, BE THE ADDRESS
- THAT WOULD PRINT OUT A CHARACTER OR WHATNOT.
-
- ╘HE ╦┼╥╬┴╠ HAS GROWN SINCE ├OMMODORE FIRST INTRODUCED IT, THE ├=128 ╦┼╥╬┴╠ HAS
- FIFTY-SEVEN SEPERATE ROUTINES WHICH ARE AVAILABLE TO PROGRAMMERS. ╘HESE ROUTINES
- HANDLE FUNCTIONS RELATING TO THE SERIAL DEVICES (THE BULK OF THEM), THE SCREEN
- AND MISCELLANOUS SYSTEM ROUTINES SUCH AS SCANNING THE KEYBOARD, UPDATING AND
- READING THE SYSTEM CLOCK (╘╔$).
-
- +-------------------+
- ▄ ╘ABLE OF ╥OUTINES ▄
- +-------------------+
-
- ╘HE FOLLOWING TABLE LISTS THE AVAILABLE ROUTINES, THEIR FUNCTION, ADDRESS,
- THEIR NAME, AND REGISTERS AFFECTED UPON EXIT. ╔N ADDATION, ON THE LEFT OF EACH
- LINE ARE THE GROUP THAT ╔ HAVE CATAGORIZED THEM UNDER: ╓IDEO(╓ID), ╙YSTEM(╙YS),
- AND ╙ERIAL(╙ER).
-
- --------+---------+---------+---------------------------------------+-----------
- ▄ ▄╥EGISTERS▄ ▄╟ROUP
- ┴DDRESS ▄ ╬┴═┼ ▄ ┴ ╪ ┘ ╞ ▄ ─ESCRITPTION ▄╓ID ╙YS ╙ER
- --------+---------+---------+---------------------------------------+-----------
- ╞╞47/128▄╙╨╔╬╙╨╧╒╘▄ * ▄ ╔NITIALIZES ╔/╧ FOR FAST SERIAL ▄ ***
- ╞╞4┴/128▄ ├╠╧╙┼┴╠╠▄ * * * ▄ ├LOSE ALL FILES ON A DEVICE ▄ ***
- ╞╞4─/128▄ ├64═╧─┼ ▄ ▄ ╙WITCHES TO ├=64 MODE ▄ ***
- ╞╞50/128▄ ─═┴├┴╠╠ ▄ * * ▄ ╙END ─═┴ COMMAND TO ╥┼╒ ▄ ***
- ╞╞53/128▄ ┬╧╧╘├┴╠╠▄ * * * ▄ ┴TTEMPTS TO RUN BOOT SECTOR ▄ *** ***
- ╞╞56/128▄ ╨╚╧┼╬╔╪ ▄ * * * ▄ ╔NITALIZES EXTERNAL/INTERNAL CARTRI. ▄ ***
- ╞╞59/128▄ ╠╦╒╨╠┴ ▄ * * * * ▄ ╠OOKS UP LOGICAL DEVICE # ▄ *** ***
- ╞╞5├/128▄ ╠╦╒╨╙┴ ▄ * * * * ▄ ╠OOKS UP FOR SECONDARY ADDRESS ▄ *** ***
- ╞╞5╞/128▄ ╙╫┴╨╨┼╥ ▄ * * * ▄ ╙WITCHES BETTEN 40 / 80 COLUMN SCREEN ▄***
- ╞╞62/128▄ ─╠├╚┴╥ ▄ * * * ▄ ╔NITIALIZES 80 COLUMN CHARACTER SET ▄***
- ╞╞65/128▄ ╨╞╦┼┘ ▄ * * * * ▄ ╔NSTALLS A FUNCTION KEY DEFINITION ▄ ***
- ╞╞68/128▄ ╙┼╘┬╬╦ ▄ ▄ ╙ETS BANK FOR ANY ╔/╧ OPERATIONS ▄ *** ***
- ╞╞6┬/128▄ ╟┼╘├╞╟ ▄ * ▄ ╟ET ══╒ CONFIGURATION FOR A GIVEN BANK▄ ***
- ╞╞6┼/128▄ ╩╙╥╞┴╥ ▄ ▄ ╩UMPS TO A SUBROUTINE IN ANOTHER BANK ▄ ***
- ╞╞71/128▄ ╩═╨╞┴╥ ▄ ▄ ╙TARTS EXECUTING CODE IN ANOTHER BANK ▄ ***
- ╞╞74/128▄ ╔╬─╞┼╘ ▄ * * * ▄ ┼XECUTE A ╠─┴(FETVEC),┘ FROM A BANK ▄ ***
- ╞╞77/128▄ ╔╬─╙╘┴ ▄ * * ▄ ╙TORES A VALUE INDIRECTLY IN A BANK ▄ ***
- ╞╞7┴/128▄ ╔╬─├═╨ ▄ * * ▄ ├OMPARES A VALUE INDIRECTLY IN A BANK ▄ ***
- ╞╞7─/128▄ ╨╥╔══ ▄ ▄ ╧UTPUTS NULL-TERMINATED STRING ▄*** ***
- ////////▄/////////▄/////////▄///////////////////////////////////////▄///////////
- ╞╞81 ▄ ├╔╬╘ ▄ * * * ▄ ╙ETUP ╓╔├,SCREEN VALUES, 8563... ▄***
- ╞╞84 ▄ ╔╧╔╬╔╘ ▄ * * * ▄ ╔NITIALIZE ╓╔├,╙╔─,8563,├╔┴ FOR SYSTEM▄*** ***
- ╞╞87 ▄ ╥┴═╘┴╙ ▄ * * * ▄ ╔NITIALIZE RAM. ▄ ***
- ╞╞8─ ▄ ╓┼├╘╧╥ ▄ * * ▄ ╥EADS OR ╫RITES TO ╦ERNAL ╥┴═ ╓ECTORS ▄ ***
- ╞╞90 ▄ ╙┼╘═╙╟ ▄ ▄ ╙ETS ╦ERNAL ═ESSAGES ╧N/╧FF. ▄ ***
- ╞╞93 ▄ ╙┼├╬─ ▄ * ▄ ╙ENDS SECONDARY ADDRESS AFTER ╠╔╙╘╬ ▄ *** ***
- ╞╞96 ▄ ╘╦╙┴ ▄ * ▄ ╙ENDS SECONDARY ADDRESS AFTER ╘┴╠╦ ▄ *** ***
- ╞╞99 ▄ ═┼═╘╧╨ ▄ * * ▄ ╥EAD OR SET THE TOP OF SYSTEM ╥┴═. ▄ ***
- ╞╞9├ ▄ ═┼═┬╧╘ ▄ * * ▄ ╥EAD OR SET THE BOTTOM OF SYSTEM ╥┴═. ▄ ***
- ╞╞9╞ ▄ ╦┼┘ ▄ ▄ ╙CANS ╦EYBOARD ▄ ***
- ╞╞┴2 ▄ ╙┼╘═╧ ▄ ▄ -- ╒NIMPLEMENTED ╙UBROUTINE IN ┴LL -- ▄ [╬/┴]
- ╞╞┴5 ▄ ┴├╨╘╥ ▄ * ▄ ╟RABS BYTE FROM CURRENT TALKER ▄ *** ***
- ╞╞┴8 ▄ ├╔╧╒╘ ▄ * ▄ ╧UTPUT BYTE TO CURRENT LISTENER ▄ *** ***
- ╞╞┴┬ ▄ ╒╬╘╠╦ ▄ * ▄ ├OMMANDS DEVICE TO STOP TALKING ▄ *** ***
- ╞╞┴┼ ▄ ╒╬╠╙╬ ▄ * ▄ ├OMMANDS DEVICE TO STOP LISTENING ▄ *** ***
- ╞╞┬1 ▄ ╠╔╙╘╬ ▄ * ▄ ├OMMANDS DEVICE TO BEGIN LISTENING ▄ *** ***
- ╞╞┬4 ▄ ╘┴╠╦ ▄ * ▄ ├OMMANDS DEVICE TO BEGIN TALKING ▄ *** ***
- ╞╞┬7 ▄ ╥┼┴─╙╙ ▄ * ▄ ╥ETURNS ╔/╧ STATUS BYTE ▄ ***
- ╞╞┬┴ ▄ ╙┼╘╠╞╙ ▄ ▄ ╙ETS LOGICAL #, DEVICE #, SECONDARY # ▄ ***
- ╞╞┬─ ▄ ╙┼╘╬┴═ ▄ ▄ ╙ETS POINTER TO FILENAME. ▄ ***
- ╞╞├0 ▄ ╧╨┼╬ ▄ * * * * ▄ ╧PENS UP A LOGICAL FILE. ▄ ***
- ╞╞├3 ▄ ├╠╧╙┼ ▄ * * * * ▄ ├LOSES A LOGICAL FILE. ▄ ***
- ╞╞├6 ▄ ├╚╦╔╬ ▄ * * * * ▄ ╙ET INPUT CHANNEL ▄ ***
-